{"version":3,"sources":["kendo.dataviz.mobile.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","wrapper","wrapperStyle","browser","outerWidth","_outerWidth","outerHeight","_outerHeight","parent","hasClass","style","is","display","position","percentRegExp","test","boxSizing","mozBoxSizing","webkitBoxSizing","addClass","msie","floor","version","zoom","children","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","templateRegExp","template","html","containmentComparer","a","b","contains","resizableWidget","widget","inArray","attr","focusable","isTabIndexNotNaN","nodeName","disabled","href","visible","expr","filters","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","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","name","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","lowerLocalInfrao","localInfrao","newLocalInfrao","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","copy","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","target","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","role","directiveSelector","directives","selectors","triggeredByInput","tagName","onWidgetRegistered","len","logToConsole","message","console","suppressLog","log","dataSource","jQuery","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","Infrao","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","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","removeClass","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","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","isPlainObject","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","InfraerSelect","firstField","secondField","optgroup","label","specified","InfraerTable","fieldIndex","cells","cell","empty","tbody","tBodies","rows","fieldCount","dataMethod","_data","_attachBubbleHandlers","InfraerList","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","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","deep","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","_valueIsObservableObject","_valueIsObservableArray","_source","valueLength","sourceItem","dataTextField","isObservableObject","cascadeFrom","listView","bound","_preselect","old","removeIndex","newValue","oldValues","selectedNode","nonPrimitiveValues","_isMultipleSelection","_getAllChecked","newValues","selectedValue","gantt","_isBound","scheduler","arr","addLength","shifted","shiftedLength","toDestroy","hasValue","hasSource","hasEvents","hasChecked","hasCss","widgetBinding","specificBinders","applyBinding","binder","observableHierarchy","recursiveRead","parseTransition","transitionRegExp","SCRIPT","SHOW","HIDE","TRANSITION_START","TRANSITION_END","ATTACH","DETACH","sizzleErrorRegExp","View","_wrap","_evalTemplate","evalTemplate","_fragments","notInitialized","_createElement","_eachFragment","ViewClone","triggerBeforeShow","triggerBeforeHide","showStart","showEnd","hideEnd","detach","fragments","methodName","getElementById","contents","replaceWith","Layout","containers","_createContainer","showIn","ViewContainer","Fragment","attach","running","after","locationID","previousEntry","theTransition","transitionData","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","touchInfrao","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","wrapInner","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","callout","_show","_appendContent","iframe","contentOptions","showIframe","src","_ajaxRequest","_initPopup","activate","ariaId","_positionCallout","arrow","_closeButtonClick","_closePopup","elementOffset","offsetAmount","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","nodeInfrao","_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","grid","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","pushNodeInfrao","decoration","createsStackingContext","popNodeInfrao","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","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","Infrainity","prevLineBottom","doChunk","cc","origStart","setStart","isJustified","columnCount","findEOL","eol","estimateLineLength","startOffset","drawText","getFontHeight","textTransform","TextRect","decorate","line","ypos","underline","lineThrough","overline","align$$1","textOverflow","saveTextOverflow","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","_offset","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","classNames","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","_range","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","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","InfraerredDate","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","SASS_THEMES","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","encodeFormatInfraormation","encodeBCH","dividePolynomials","initMatrices","addFormatInfraormation","encodeVersionInfraormation","addVersionInfraormation","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","versionsCodewordsInfraormation","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","versionCodewordsInfraormation","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","versionInfraormation","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","Infralate","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_InfraINITY","nodeLeftClass","upNodes","downNodes","intDiv","placeRightToLeft","rightClasses","leftSibling","rightPos","placeRight","NEGATIVE_InfraINITY","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","TemplateItem","OverflowTemplateItem","ToolBar","TOOLBAR","BUTTON","OVERFLOW_BUTTON","TOGGLE_BUTTON","BUTTON_GROUP","SPLIT_BUTTON","SEPARATOR","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","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","getCalendarInfrao","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","footer","_focusView","focusOnNav","_cellID","_class","_selectDates","_addClassProxy","_cell","todayString","toDateString","_cellByDate","_removeClassProxy","selectDates","weekColumnHeader","_today","_title","_destroySelectable","_table","_bindTable","_option","navigateToPast","navigateToFuture","navigateUp","navigateDown","future","_oldTable","_changeView","_animate","_visualizeSelectedDatesInView","validSelectedDates","datesUnique","_validateValue","selectedDates","selectableOptions","_onSelect","_onRelatedTarget","_toggleSelection","_cellsBySelector","_deselect","_addSelectedCellsToArray","_rangeSelection","currentCell","toDateCell","daysDifference","currentDateIndex","_dateInView","firstDateInView","lastDateInView","focusedDate","isDisabled","_keyboardToggleSelection","_nextNavigatable","_keyboardRangeSelection","navigatableDate","viewWrapper","insertAfter","_horizontal","viewWidth","float","margin-left","_vertical","disabledDate","firstDayCurrentMonth","isBigger","isTodayDisabled","_todayClick","footerTemplate","firstVisibleDay","calendarInfrao","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","_wrapper","dateView","_updateARIA","_icon","aria-expanded","aria-owns","autocomplete","_createDateInput","_old","_update","ARIATemplate","dateInput","_dateInput","_dateIcon","_toggleHover","_focusElement","dateChanged","valueUpdated","textFormatted","_typing","stopImmediatePropagation","aria-controls","isSameType","_ariaTemplate","buttonHtml","CLASS_ICON","truncate","placeholderSupported","INPUT","SPIN","TOUCHEND","STATE_INVALID","INTEGER_REGEXP","NumericTextBox","inputType","isStep","_focusout","_arrows","_validation","_text","_toggleText","restrictDecimals","spinners","upArrowText","downArrowText","_upArrowEventHandler","_downArrowEventHandler","_spin","_upArrow","_downArrow","_keypress","_keyup","_arrowsWrap","_placeholder","aria-valuemin","aria-valuemax","adjusted","_adjust","_focusin","arrows","_spinning","_validationIcon","_focusing","groupRegExp","extractRegExp","caretPosition","_culture","_removeInvalidState","CLASSNAME","accessKey","_step","isNumPadDecimal","isValid","_numericRegex","_addInvalidState","fractionRule","_separator","_floatRegExp","rounder","isNotNull","DOMElement","resolveRules","resolvers","validator","ruleResolvers","numberOfDecimalDigits","parseHtml","parseHTML","searchForMessageContainer","invalidMsgRegExp","Validator","INVALIDMSG","INVALIDINPUT","VALIDINPUT","emailRegExp","urlRegExp","CHECKBOXSELECTOR","NUMBERINPUTSELECTOR","NAME","FORM","NOVALIDATE","VALIDATE","VALIDATE_INPUT","patternMatcher","hasAttribute","validateAttributeSelector","_errorTemplate","errorTemplate","_inputSelector","_checkboxSelector","_errors","_isValidated","required","email","dateCompare","checkbox","raise","validateOnBlur","_checkElement","validateInput","inputs","invalid","lbl","messageText","wasValid","messageLabel","lblId","inputWrap","_checkValidity","_findMessageContainer","_extractMessage","_decorateMessageContainer","hideMessages","locators","messageLocators","locate","ruleKey","nonDefaultMessage","customMessage","fieldType","convertToValueBinding","bindAttr","createAttributes","ruleName","stringRule","validation","DATATYPE","BINDING","specialRules","convertItems","addValidationRules","modelField","oldIE","nameSpecialCharRegExp","ERRORTEMPLATE","EQUAL_SET","editors","kendoNumericTextBox","kendoDatePicker","Editable","$angular","_validateProxy","_validate","clearContainer","skipFocus","editor","isValuesEditor","isCustomEditor","preventChangeTrigger","_validationEventInProgress","bindAttribute","bindingRegex","validatable","modelFields","toInt","constrain","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","titleBarHeight","encoded","titleBar","titleElement","scrollContainer","otherModalsVisible","overlayFx","showOptions","contentElement","containmentContext","Fade","fadeIn","_containerScrollTop","_containerScrollLeft","_removeOverlay","suppressAnimation","modals","hideOverlay","hideOptions","systemTriggered","defaultPrevented","userTriggered","lastModal","_actionable","_shouldFocus","windowTop","currentWindow","originalZIndex","windowObject","zIndexNew","shouldRestrictTop","restoreOptions","_sizingAction","actionId","before","$body","$html","_storeOverflowRule","_restoreOverflowRule","$element","_isOverflowStored","overflowRule","win","contentFrame","_triggerRefresh","_ajaxComplete","_loadingIconTimeout","_ajaxError","_ajaxSuccess","_showLoading","iframeSrcAttributes","contentHtml","wrapperPosition","relativeElMarginLeft","relativeElMarginTop","elementPadding","resizeDirection","initialSize","containerOffset","_relativeElMarginLeft","_relativeElMarginTop","leftRtlOffset","scrollOffset","windowBottom","windowRight","newWindowTop","initialWindowPosition","initialPointerPosition","_finishDrag","unifyType","mapChangedItems","itemsToMatch","itemsLength","selectedLength","unchanged","isValidFilterExpr","removeFiltersForField","STATIC_LIST_NS","StaticList","percentageUnitsRegex","GROUPHEADER","ITEMSELECTOR","LABELIDPART","CASCADE","HIDDENCLASS","isIE","quotRegExp","alternativeNames","ComboBox","DropDownList","List","_isSelect","ul","aria-hidden","_listMousedown","columns","_columnsHeader","_noData","_accessors","_initValue","headerTemplate","noDataTemplate","_renderFooter","_renderNoData","_focused","_angularElement","colGroup","currentColumn","columnsHeaderTemplate","currentWidthInt","widthStyle","columnsHeader","noData","_listOptions","changeEventOption","_listChange","listBoundHandler","_listBound","_activateItem","deactivate","_deactivateItem","groupTemplate","fixedGroupTemplate","_initList","listOptions","selectedItemChange","VirtualList","_setListValue","_updateSelectionState","filterInput","_isFilterEnabled","_hideClear","_showClear","_clearValue","_clearText","_accessor","_customOption","enforceMinLength","highlightFirst","_clearFilter","_filterSource","newExpression","dataSourceState","isMultiColumnFiltering","filterFields","resetPageSettings","removed","_clearFilterExpressions","_pushFilterExpression","_cascading","setDSFilter","filtersToRemove","_toggleNoData","_toggleHeader","groupHeader","_allowOpening","_ignoreCase","widgetOptions","fromFilter","_buildExpression","_open","_clearButton","clearButton","_inputValue","_typingTimeout","minLength","_emptySearch","_searchByWord","_unbindDataSource","selectedDataItems","_aria","suggest","_ariaLabel","labelId","focusedElm","inputElm","inputId","labelElm","ariaLabel","ariaLabelledBy","_generateLabelId","_valueBeforeCascade","_userTriggered","_oldIndex","isFiltered","typing","_enable","_dataValue","_offsetHeight","_height","popups","footerHeight","_openHandler","_adjustListWidth","autoWidth","_closeHandler","_focusItem","noFocusedItem","scrollToIndex","_calculateGroupPadding","_calculatePopupHeight","_calculateColumnsHeaderPadding","_resizePopup","_popup","_makeUnselectable","preventFocus","touchEnabled","MSPointers","_prevent","_triggerCascade","_cascadeTriggered","_cascadedValue","_triggerChange","_requestStartHandler","_requestEndHandler","_errorHandler","requireValueMapper","valueMapper","_initial","_initialIndex","_parentWidget","_cascadeSelect","_cascadeValue","_accessorInput","_accessorSelect","_custom","_syncValueAndText","custom","_hideBusy","_busy","_arrowIcon","_showBusy","_request","_requestEnd","_firstItem","focusFirst","_lastItem","focusLast","_nextItem","focusNext","_prevItem","focusPrev","activeFilter","shouldTrigger","_fetch","dataItemByIndex","getElementIndex","focusout","scrollWith","_fetchData","optionLabel","dataText","dataValue","htmlElement","_cascade","cascade","_cascadeHandlerProxy","_cascadeHandler","_cascadeFilterRequests","_selectedValue","_toggleCascadeOnFocus","valueBeforeCascade","_clearSelection","_cascadeChange","filterValue","cascadeFromParentField","cascadeFromField","currentHandler","_touchHandlers","_optionID","_selectedIndices","_dataItems","_getter","_onScroll","_scrollId","_renderHeader","_fixedHeader","endY","tapPosition","_touchTriggered","_triggerClick","itemOffsetTop","itemOffsetHeight","contentScrollTop","contentOffsetHeight","bottomDistance","_getValues","_valueGetter","hasCandidate","_get","focusIndex","skipUpdate","_skipUpdate","filtered","singleSelection","selectedIndices","added","_deselectFiltered","_valueComparer","_valueDeferred","_valueIndices","_valueExpr","normalized","_valueType","_dataItemPosition","valueExpr","removedIndices","templateText","_normalizeIndices","newIndices","_firstVisibleItem","itemHeight","lastChild","previousSibling","isGrouped","visibleItem","_renderItem","notFirstItem","hasColumns","isLastGroupedItem","_renderColumns","dataContext","_selected","_lastDSFilter","skipUpdateOnBind","isItemChange","_bound","lastFrom","isPrimitive","getItemCount","listScreens","getDefaultItemHeight","mockList","bufferSizes","opposite","listValidator","downThreshold","upThreshold","lastScrollTop","scrollCallback","syncList","reorder","webkitTransform","map2","ITEMCHANGE","reshift","placeholderTemplate","renderColumns","GROUPITEM","isActivePromise","WRAPPER","VIRTUALLIST","CONTENT","LIST","HEADER","VIRTUALITEM","ITEM","HEIGHTCONTAINER","LISTBOUND","VIRTUAL_LIST_NS","_fetching","_selectedDataItems","_selectedIndexes","_rangesList","_promisesList","_renderItems","_triggerListBound","oppositeBuffer","mapValueTo","_selectProxy","_clean","_deferValueSet","mute","_selectingValue","_highlightSelectedItems","_getElementByDataItem","_mute","_createList","_forcePrefetch","shouldClear","_prefetchByValue","_checkValuesOrder","_removedAddedIndexes","dataView","_dataView","forSelection","mapValueToIndex","mapValueToDataItem","indexes","_getIndecies","deferredRange","itemCount","_","existingRange","isEmptyList","_activeDeferred","_getSkip","_findDataItem","_getRange","triggerEvent","_getElementByIndex","_focusedIndex","_getElementLocation","_screenHeight","heightContainer","isAlreadySelected","prefetchStarted","_selectDeferred","_deselectCurrentValues","_listCreated","_lastScrollTop","hasData","setScreenHeight","yPosition","yDownPostion","screenEnd","_generateItems","_saveInitialRanges","_buildValueGetter","_setHeight","getList","_listItems","_whenChanged","_reorderList","padHeight","lastRequestedRange","lastRangeStart","rangeStart","flatGroup","groupLength","_getterDeferred","firstItemIndex","_indexConstraint","firstVisibleGroup","fixedGroupText","currentVisibleGroup","firstVisibleDataItemIndex","firstVisibleDataItem","_itemMapper","listType","_currentGroup","_getDataItemsCollection","_listIndex","theValidator","theNew","currentOffset","list2","range2","_bufferSizes","buffers","selectedIndexes","removedindexesCounter","_deselectSingleItem","oldSkip","firstItem","assign","normalizeIndex","sameCharsOnly","nsFocusEvent","CLICKEVENTS","STATE_FILTER","STATE_ACCEPT","MSG_INVALID_OPTION_LABEL","_focusHandler","_focusInputHandler","_focusInput","_optionLabel","_inputTemplate","_prev","_word","_span","_mobile","_filterHeader","_attachFocusHandlers","hasOptionLabel","_textAccessor","_optionLabelText","valueTemplate","optionLabelTemplate","_arrow","_focusFilter","_resizeFilterInput","isInputActive","originalPrevent","_optionLabelDataItem","loweredText","_valueSetter","_assignInstance","_buildOptions","optionLabelValue","initialIndex","_presetValue","_selectValue","_filterPaste","_search","_focusinHandler","_focusoutHandler","isIFrame","self","_wrapperMousedown","_wrapperClick","dropDownWrapper","isPopupVisible","_getElementDataItem","_matchText","_shuffleData","splitIndex","optionDataItem","_selectNext","oldFocusedItem","isInLoop","_last","charCode","_popupOpen","compareElement","jQueryCandidate","_resetOptionLabel","focusedItem","additionalClass","keepState","aria-haspopup","SELECTOR","DOMelement","accesskey","unselectable","getElements","optionLabelText","origEvent","isAutoConnector","closestConnector","resCtr","minimumDistance","MAXINT","indicesOfItems","filterShapeDataItem","filterConnectionDataItem","fromConnector","fromX","fromY","toConnector","toX","toY","connectionSelector","kendoDropDownList","InactiveItem","InactiveItemsCollection","cloneDataItem","splitDiagramElements","createModel","clearField","copyDefaultOptions","mainOptions","translateToOrigin","defaultButtons","DiagramElement","Connector","Diagram","DiagramToolBar","Editor","PopupEditor","CASCADING","DEFAULT_CANVAS_WIDTH","DEFAULT_CANVAS_HEIGHT","DEFAULT_SHAPE_TYPE","DEFAULT_SHAPE_WIDTH","DEFAULT_SHAPE_HEIGHT","DEFAULT_SHAPE_MINWIDTH","DEFAULT_SHAPE_MINHEIGHT","DEFAULT_SHAPE_POSITION","DEFAULT_CONNECTION_BACKGROUND","TRANSFORMED","MOUSEWHEEL_NS","MOBILE_ZOOM_RATE","MOBILE_PAN_DISTANCE","BUTTON_TEMPLATE","CONNECTION_CONTENT_OFFSET","DefaultConnectors","imageClass","extra","serializable","_content","contentVisual","_contentVisual","_updateContentVisual","_createContentVisual","elementTemplate","_canSelect","shapeId","updateOptionsFromModel","createShapeVisual","updateBounds","_createConnectors","_setOptionsFromModel","modelOptions","redrawVisual","_isEditable","_redrawVisual","syncChanges","_suspendModelRefresh","_resumeModelRefresh","_rotate","_alignContent","containerRect","aligner","contentBounds","contentRect","alignedBounds","_transformedBounds","_rotatedBounds","_setBounds","_triggerBoundsChange","_layouting","refreshConnections","deselected","_internalSelection","_selectionChanged","sc","deltaAngle","newPosition","cons","nameOrPoint","toLocaleLowerCase","_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","updating","valueIsCollection","currentValueLength","watchHandler","changeHandler","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","viewOptions","post","_scroller","kAttr","MobileScrollView","Pager","templateDirectives","templateName","outerHTML","MAX_DOUBLE_TAP_DISTANCE","eventProxy","_triggerTouch","gestureEventProxy","enableSwipe","minXDelta","maxYDelta","maxDuration","doubleTapTimeout","lastTap","_dragstart","_swipestart","_swipemove","initPopOvers","popovers","preventScrollIfNotInput","initWidgets","UI_OVERLAY","BEFORE_SHOW","AFTER_SHOW","BEFORE_HIDE","defaultTransition","getLayout","reload","modelScope","purge","inited","_invokeNgController","_padIfNativeScrolling","isAndroid","skin","isAndroidForced","hasPlatformIndependentSkin","topContainer","bottomContainer","scrollerContent","idAttrValue","contentSelector","_callController","_locate","platform","previousView","bodyRegExp","LOAD_START","LOAD_COMPLETE","SHOW_START","SAME_VIEW_REQUESTED","VIEW_SHOW","VIEW_TYPE_DETERMINED","AFTER","ViewEngine","errorMessage","sandbox","_hideViews","rootView","rootNeeded","layouts","viewContainer","getLayoutProxy","_setupLayouts","loader","showView","remoteViewURLPrefix","showClosure","_findViewElement","_createView","serverNavigation","_loadView","modalViews","urlPath","_getLayout","_xhr","_xhrComplete","CAPTURE_EVENTS","Loader","captureEvents","_attachCapture","_loading","changeMessage","transitionDone","EXTERNAL","HREF","DUMMY_HREF","SKIP_TRANSITION_ON_BACK_BUTTON","WIDGET_RELS","collapsible","historyCallback","viewEngine","_historyNavigate","_historyReplace","closeActiveDialogs","viewShow","loadStart","loadComplete","sameViewRequested","viewTypeDetermined","_setPortraitWidth","_setupAppLinks","dialogs","navigateToInitial","portraitWidth","bindToRouter","attrUrl","hideLoading","showLoading","changeLoadingMessage","linkRoles","pressedButtonSelector","buttonSelectors","_mouseup","_appLinkClick","delayedTouchEnd","openFor","paneContainer","OVERLAY","DIRECTION_CLASSES","DIRECTIONS","ANIMATION","containerPopup","PopOver","initialOpen","SHIM","Shim","app","osname","ioswp","shim","_hide","BEFORE_OPEN","WRAP","ModalView","_shim","SWIPE_TO_OPEN","AFTER_HIDE","NULL_VIEW","Drawer","drawer","_viewShow","_attachTransition","swipeToOpen","leftPositioned","swipeToOpenViews","_moveViewTo","visibleOnCurrentView","_currentViewIncludedIn","_setAsCurrent","canMoveLeft","canMoveRight","leftSwipe","limitedPosition","shouldShow","pastHalf","velocityThreshold","EXPANED_PANE_SHIM","SplitView","_style","_paramsHistory","expandedPaneShim","_shimUserEvents","collapsePanes","expandPanes","osCssClass","variant","setDefaultPlatform","statusBarStyle","wp8Background","noVariantSet","isOrientationHorizontal","getOrientationClass","VERTICAL","setMinimumHeight","applyViewportHeight","HEAD","viewportTemplate","DEFAULT_OS","BERRYPHONEGAP","FONT_SIZE_COEF","CHROME","BROKEN_WEBVIEW_RESIZE","INITIALLY_HORIZONTAL","MOBILE_PLATFORMS","ios7","usedWithBlock","systemMeta","clipTemplate","ENABLE_CLIP","iconMeta","HIDEBAR","SUPPORT_SWIPE_TO_GO_BACK","HISTORY_TRANSITION","BARCOMPENSATION","STATUS_BAR_HEIGHT","SCREEN","Application","bootstrap","startHistory","_setupPlatform","_attachMeta","_setupElementClass","_attachHideBarHandlers","updateDocumentTitle","_setupDocumentTitle","_startHistory","hideAddressBar","browserHistory","historyTransition","retina","refreshBackgroundColorProxy","_resizeToScreenHeight","includeStatusBar","_clearExistingMeta","hideBar","_initialHeight","defaultTitle","_hideBar","COMMAND","CONTEXT_DATA","cancelTemplate","ShimClass","_closeProxy","_shimHideProxy","actionData","_shimHide","highlightButton","ANDROID3UP","deactivateTimeoutID","createBadge","DISABLEDSTATE","useTap","clickOn","_timeoutDeactivate","badge","badgeElement","iconSpan","iconElement","BackButton","DetailButton","DISABLE","_button","selectOn","buttongroup","COLLAPSIBLE","INSET","HEADER_WRAPPER","CONTENT_WRAPPER","COLLAPSED","EXPANDED","ANIMATED","EXAPND","COLLAPSE","Collapsible","_buildHeader","collapsed","inset","collapseIcon","expandIcon","iconPosition","instant","_getContentHeight","whitespace","TEXT_NODE","whitespaceRegExp","addIcon","enhanceItem","ICON_SELECTOR","enhanceLinkItem","itemAndDetailButtons","otherNodes","enhanceCheckBoxItem","putAt","VirtualListViewItem","LOAD_ICON","VirtualListViewLoadingIndicator","VirtualListViewPressToLoadMore","VirtualListViewItemBinder","ListViewItemBinder","ListViewFilter","ITEM_SELECTOR","HIGHLIGHT_SELECTOR","GROUP_CLASS","ACTIVE_CLASS","GROUP_WRAPPER","GROUP_TEMPLATE","SEARCH_TEMPLATE","STYLED","DATABINDING","ITEM_CHANGE","buttonRegExp","HeaderFixer","headerFixer","cacheHeaders","_shouldFixHeaders","_cacheHeaders","_scrollHandler","_fixHeader","fixedHeaders","headerPair","currentHeader","DEFAULT_PULL_PARAMETERS","RefreshHandler","pullParameters","pull","_pulled","_first","itemConstructor","prevItem","endReached","below","averageItemHeight","remainingItemsCount","batchUpdate","nextIndex","initialOffset","lastDirection","above","lastItem","lastTop","topBorder","setDataItem","_loadIcon","_loadButton","loadMoreText","loadMore","kendoMobileButton","_hideShowButton","_showLoadButton","chromeHeight","pressToLoadMore","virtualViewSize","updateScrollerSize","updateSize","itemBinder","_progressHandler","adding","removing","prependOnRefresh","appendOnRefresh","groupedMode","findByDataItem","_shouldShowLoading","replaceGrouped","endlessScroll","filterable","autoFilter","searchInput","_oldFilter","_filterChange","_dataSourceChange","_refreshInput","appliedFilters","_applyFilter","scrollTreshold","scrollThreshold","_headerFixer","_itemsCache","_itemBinder","_pullToRefreshHandler","_enhanceItems","emptyDataSource","_scrollerInstance","triggerChange","replaceItem","newItem","_dim","clicked","plainItem","dataIDAttribute","templateProxy","groupTemplateProxy","_headerTemplate","buttonElement","_styleGroups","rootItems","enhanced","toggleTitle","noTitle","showTitle","NavBar","leftElement","rightElement","ElasticPane","ScrollViewContent","VirtualScrollViewContent","Page","CHANGING","CURRENT_PAGE_CLASS","VIRTUAL_PAGE_CLASS","CLEANUP","VIRTUAL_PAGE_COUNT","LEFT_PAGE","CETER_PAGE","RIGHT_PAGE","LEFT_SWIPE","NUDGE","RIGHT_SWIPE","scrollView","_changeProxy","_refreshProxy","pageHTML","pageCount","ScrollViewPager","updateDimension","transitionTo","ScrollViewElasticPane","_getPages","contentHeight","enablePager","pagerOverlay","paneMoved","swipeType","bounce","nextPage","approx","minSnap","maxSnap","currentPage","updatePage","forcePageUpdate","resizeTo","containerHeight","pager","pageElements","_paged","_initPages","_buffer","_pendingPageRefresh","_pendingWidgetRefresh","_resetPages","itemsPerPage","_resetProxy","_endReachedProxy","emptyTemplate","emptyTemplateProxy","setWidth","_repositionPages","_updatePagesContent","thresholdPassed","isEndReached","_cancelMove","_moveBackward","_moveForward","setPageContent","_resetMovable","_onResize","_onReset","_onEndReached","theContent","VirtualPage","mobileContainer","transitionEnd","dragStart","dragEnd","_syncWithContent","viewInit","bounceVelocityThreshold","prevPage","_transitionEnd","minLimit","maxLimit","SWITCHON","SWITCHOFF","MARGINLEFT","ACTIVE_STATE","DISABLED_STATE","RESOLVEDPREFIX","TRANSFORMSTYLE","SWITCH_MARKUP","onLabel","offLabel","snapPoint","_animateBackground","handleWidth","_stop","ACTIVE_STATE_CLASS","TabStrip","_buildButton","switchTo","tab","tabs","_setActiveItem","switchByFullUrl","currentItem","tabstrip"],"mappings":"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,EA77LhC,GAEOikB,IACAu6D,GACA0pB,GACAvN,GACA5hG,GACA08G,GACAxf,GACAqY,GACAowB,GACAlsB,GACAxuF,GACAhnB,GACAsB,GACAqgI,GACAC,GACAC,GACAC,GACAtpD,GACAF,GACAypD,GACAxJ,GACAyJ,GACAC,GACAlsB,GACAmsB,GACAnJ,GACAoJ,GACAp6G,GACAq6G,GACA5/F,GACA6/F,GACAC,GACA36G,GACAs0F,GACA0c,GACAn4F,GACA+hG,GACAC,GACAC,GACAzhI,GACA0hI,GACA76G,GACAu9C,GACAx/D,GACA2yE,GACAoqD,GACAvmE,GACAwmE,GACAngG,GACAogG,GACAjsH,GACAksH,GAmDA1L,GAuCAU,GAwCAiL,GAWAhyH,GACAiyH,GAaAC,GACAC,GAwCAC,GAkCAC,GACAC,GASAC,GAKAnL,GAOAoL,GAuCAC,GAoBAC,GACAC,GAyDAh3C,GACAjiD,GACAgnD,GACA9B,GACAG,GACA1O,GACArM,GACA+b,GACAD,GACA37D,GACA87D,GACAjD,GACAsD,GACAt8E,GACAk9E,GACAT,GACAmyC,GAwFA5vC,GAuCAqlC,GA4LAwK,GA6GAC,GAeAC,GACAC,GA6BAC,GAsOAC,GAkGAC,GAkGAC,GACAC,GACAC,GA4JAC,GAoGAC,GAmJAC,GACAvuB,GAqCAwuB,GACAC,GAwIAC,GA8BAC,GA+EAC,GACAC,GACAC,GAkSAC,GAkpBApJ,GACAF,GACAF,GACAD,GACAD,GACAD,GACAD,GACAD,GACA8J,GACAtJ,GACAtB,GACAW,GACAL,GACA+D,GACAD,GACAD,GACAlC,GA4MA4I,GAaAC,GA0dA7F,GACA8F,GAUAnG,GACAx6F,GACAu5F,GAUAF,GAUAuH,GAsCAC,GA8LAC,GA8cAC,GACAC,GAuSAC,GA0MAC,GACAC,GAsXAC,GA8DAC,GAqLAC,GAsKAC,GAoIAC,GAiBAC,GAoBAC,GACAC,GACAC,EA9tLJxqI,QAAOuB,MAAM4pB,QAAUnrB,OAAOuB,MAAM4pB,YAChCC,GAAU7pB,MAAM6pB,QAChBu6D,GAAOv6D,GAAQu6D,KACf0pB,GAAOjkF,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vJ,GAAmBC,EAAiBjuJ,GAA7C,GACage,GAEGkwI,EACAC,EAEIC,CALhB,KAASpwI,IAAShe,IACT6C,GAAQmb,EAAOqwI,KAAgBruJ,EAAQ1D,eAAe0hB,KACnDkwI,EAAaluJ,EAAQge,GACrBmwI,EAAgBF,EAAgBjwI,GAChCmsE,GAAQgkE,KACJC,EAA2B,OAAfF,EACZE,IAAcjkE,GAAQ+jE,UACfD,GAAgBjwI,GACnBowI,SACOpuJ,GAAQge,IAEZmwI,GAAiBh8B,GAAS+7B,IAC7B/7B,GAASg8B,IACTH,EAAmBG,EAAeD,KAO1D,QAASI,GAAkBC,GACvB,IAAK,GAAIhxJ,GAAM,EAAGA,EAAMgxJ,EAAMj3J,OAAQiG,IAClCgxJ,EAAMhxJ,GAAKixJ,eA3+WtB,GAEOhtI,GACAjrB,GACAqhD,GACA62G,GACAh4C,GACA0c,GACAv8D,GACAkc,GACAC,GACAC,GACA7wD,GACAi7G,GACAb,GACAc,GACAjsH,GACAiR,GACAi6G,GACAG,GACAlJ,GACA6I,GACAjyC,GACA7mE,GACA3d,GACA64H,GACAjwC,GACAqlC,GACA/B,GACAoB,GACApwH,GACA/G,GACAkwF,GACAmmC,GACA33H,GACAk1B,GACA47D,GACAonC,GACAwM,GACAR,GACAlM,GACAqO,GACA57F,GACAgtF,GACAp7G,GACAu7G,GACAuN,GACAlB,GACAlvH,GACAi8E,GACAv+D,GACAo/D,GACAumC,GACA3mC,GACA8xC,GACAtxC,GACA50F,GACA4pB,GACAikF,GACAhoE,GACAwzE,GACA/Y,GACArb,GACAm2B,GACAg1C,GACAntH,GACAqsH,GA+BAuH,GAUAC,GAkBAC,GA8EA/F,GAiHAgG,GACAC,GACAC,GACAC,GACAC,GA2GA/1J,GACAg2J,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAhgJ,GACA85I,GACAmG,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GAC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,EAAGA,EAAIwS,EAAQ5V,OAAQoD,IAChC8C,EAAQ2U,SAASjF,EAAQnW,OAAO2D,GAAI,IACpC8L,EAAK0G,QAAQxF,KAAKlK,GAClBgJ,EAAKkyH,YAAcl7H,CAEvBgJ,GAAK0oM,UAAYn/J,EAAOvpC,EAAK5M,YAEjCu1M,aAAc,SAAU9C,EAAeH,GACnC,IAAK,GAAIxxM,GAAI,EAAGA,EAAIwxM,EAAO50M,OAAQoD,IAC/B,GAAIkF,KAAKssM,EAAOxxM,IAAIhB,GAAG2yM,EAAc7uM,MAAO6uM,EAAcp6L,OACtD,MAAOi6L,GAAOxxM,EAGtBkF,MAAKgnM,sBAAsByF,EAAc7uM,MAAMzG,OAAOs1M,EAAcp6L,SAExEq1L,cACI,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,SAEJ8H,KAAM,MAEVtI,EAAUuI,SAAWtJ,EAAYzlM,QAC7B0O,KAAM,aACNk9L,QAAS,OAEbpF,EAAUwI,SAAWvJ,EAAYzlM,QAC7B0O,KAAM,aACNk9L,QAAS,OAEbpF,EAAUyI,SAAWxJ,EAAYzlM,QAC7B0O,KAAM,aACNk9L,QAAS,OAEbpF,EAAU0I,QAAUzJ,EAAYzlM,QAC5B0O,KAAM,WACNk9L,QACI,IACA,IACA,IACA,UAGRpF,EAAU,WAAaf,EAAY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","file":"kendo.dataviz.mobile.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;\n kendo.version = '2019.1.220'.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 lowerLocalInfrao(localInfrao) {\n var newLocalInfrao = {}, property;\n for (property in localInfrao) {\n newLocalInfrao[property] = lowerArray(localInfrao[property]);\n }\n return newLocalInfrao;\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 = lowerLocalInfrao(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 = lowerLocalInfrao(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;\n if (!element.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)) {\n height = outerHeight(element);\n }\n element.wrap($('
').addClass('k-animation-container').css({\n width: width,\n height: height\n }));\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 var 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 if (browser.msie && math.floor(browser.version) <= 7) {\n element.css({ zoom: 1 });\n element.children('.k-menu').width(element.width());\n }\n return element.parent();\n }\n function deepExtend(destination) {\n var i = 1, length = arguments.length;\n for (i = 1; i < length; i++) {\n deepExtendOne(destination, arguments[i]);\n }\n return destination;\n }\n function deepExtendOne(destination, source) {\n var ObservableArray = kendo.data.ObservableArray, LazyObservableArray = kendo.data.LazyObservableArray, DataSource = kendo.data.DataSource, HierarchicalDataSource = kendo.data.HierarchicalDataSource, property, propValue, propType, propInit, destProp;\n for (property in source) {\n propValue = source[property];\n propType = typeof propValue;\n if (propType === OBJECT && propValue !== null) {\n propInit = propValue.constructor;\n } else {\n propInit = null;\n }\n if (propInit && propInit !== Array && propInit !== ObservableArray && propInit !== LazyObservableArray && propInit !== DataSource && propInit !== HierarchicalDataSource && propInit !== RegExp) {\n if (propValue instanceof Date) {\n destination[property] = new Date(propValue.getTime());\n } else if (isFunction(propValue.clone)) {\n destination[property] = propValue.clone();\n } else {\n destProp = destination[property];\n if (typeof destProp === OBJECT) {\n destination[property] = destProp || {};\n } else {\n destination[property] = {};\n }\n deepExtendOne(destination[property], propValue);\n }\n } else if (propType !== UNDEFINED) {\n destination[property] = propValue;\n }\n }\n return destination;\n }\n function testRx(agent, rxs, dflt) {\n for (var rx in rxs) {\n if (rxs.hasOwnProperty(rx) && rxs[rx].test(agent)) {\n return rx;\n }\n }\n return dflt !== undefined ? dflt : agent;\n }\n function toHyphens(str) {\n return str.replace(/([a-z][A-Z])/g, function (g) {\n return g.charAt(0) + '-' + g.charAt(1).toLowerCase();\n });\n }\n function toCamelCase(str) {\n return str.replace(/\\-(\\w)/g, function (strMatch, g1) {\n return g1.toUpperCase();\n });\n }\n function getComputedStyles(element, properties) {\n var styles = {}, computedStyle;\n if (document.defaultView && document.defaultView.getComputedStyle) {\n computedStyle = document.defaultView.getComputedStyle(element, '');\n if (properties) {\n $.each(properties, function (idx, value) {\n styles[value] = computedStyle.getPropertyValue(value);\n });\n }\n } else {\n computedStyle = element.currentStyle;\n if (properties) {\n $.each(properties, function (idx, value) {\n styles[value] = computedStyle[toCamelCase(value)];\n });\n }\n }\n if (!kendo.size(styles)) {\n styles = computedStyle;\n }\n return styles;\n }\n function isScrollable(element) {\n if (element && element.className && typeof element.className === 'string' && element.className.indexOf('k-auto-scrollable') > -1) {\n return true;\n }\n var overflow = getComputedStyles(element, ['overflow']).overflow;\n return overflow == 'auto' || overflow == 'scroll';\n }\n function scrollLeft(element, value) {\n var webkit = support.browser.webkit;\n var mozila = support.browser.mozilla;\n var el = element instanceof $ ? element[0] : element;\n var isRtl;\n if (!element) {\n return;\n }\n isRtl = support.isRtl(element);\n if (value !== undefined) {\n if (isRtl && webkit) {\n el.scrollLeft = el.scrollWidth - el.clientWidth - value;\n } else if (isRtl && mozila) {\n el.scrollLeft = -value;\n } else {\n el.scrollLeft = value;\n }\n } else {\n if (isRtl && webkit) {\n return el.scrollWidth - el.clientWidth - el.scrollLeft;\n } else {\n return Math.abs(el.scrollLeft);\n }\n }\n }\n (function () {\n support._scrollbar = undefined;\n support.scrollbar = function (refresh) {\n if (!isNaN(support._scrollbar) && !refresh) {\n return support._scrollbar;\n } else {\n var div = document.createElement('div'), result;\n div.style.cssText = 'overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block';\n div.innerHTML = ' ';\n document.body.appendChild(div);\n support._scrollbar = result = div.offsetWidth - div.scrollWidth;\n document.body.removeChild(div);\n return result;\n }\n };\n support.isRtl = function (element) {\n return $(element).closest('.k-rtl').length > 0;\n };\n var table = document.createElement('table');\n try {\n table.innerHTML = '';\n support.tbodyInnerHtml = true;\n } catch (e) {\n support.tbodyInnerHtml = false;\n }\n support.touch = 'ontouchstart' in window;\n var docStyle = document.documentElement.style;\n var transitions = support.transitions = false, transforms = support.transforms = false, elementProto = 'HTMLElement' in window ? HTMLElement.prototype : [];\n support.hasHW3D = 'WebKitCSSMatrix' in window && 'm11' in new window.WebKitCSSMatrix() || 'MozPerspective' in docStyle || 'msPerspective' in docStyle;\n support.cssFlexbox = 'flexWrap' in docStyle || 'WebkitFlexWrap' in docStyle || 'msFlexWrap' in docStyle;\n each([\n 'Moz',\n 'webkit',\n 'O',\n 'ms'\n ], function () {\n var prefix = this.toString(), hasTransitions = typeof table.style[prefix + 'Transition'] === STRING;\n if (hasTransitions || typeof table.style[prefix + 'Transform'] === STRING) {\n var lowPrefix = prefix.toLowerCase();\n transforms = {\n css: lowPrefix != 'ms' ? '-' + lowPrefix + '-' : '',\n prefix: prefix,\n event: lowPrefix === 'o' || lowPrefix === 'webkit' ? lowPrefix : ''\n };\n if (hasTransitions) {\n transitions = transforms;\n transitions.event = transitions.event ? transitions.event + 'TransitionEnd' : 'transitionend';\n }\n return false;\n }\n });\n table = null;\n support.transforms = transforms;\n support.transitions = transitions;\n support.devicePixelRatio = window.devicePixelRatio === undefined ? 1 : window.devicePixelRatio;\n try {\n support.screenWidth = window.outerWidth || window.screen ? window.screen.availWidth : window.innerWidth;\n support.screenHeight = window.outerHeight || window.screen ? window.screen.availHeight : window.innerHeight;\n } catch (e) {\n support.screenWidth = window.screen.availWidth;\n support.screenHeight = window.screen.availHeight;\n }\n support.detectOS = function (ua) {\n var os = false, minorVersion, match = [], notAndroidPhone = !/mobile safari/i.test(ua), agentRxs = {\n wp: /(Windows Phone(?: OS)?)\\s(\\d+)\\.(\\d+(\\.\\d+)?)/,\n fire: /(Silk)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n android: /(Android|Android.*(?:Opera|Firefox).*?\\/)\\s*(\\d+)\\.?(\\d+(\\.\\d+)?)?/,\n iphone: /(iPhone|iPod).*OS\\s+(\\d+)[\\._]([\\d\\._]+)/,\n ipad: /(iPad).*OS\\s+(\\d+)[\\._]([\\d_]+)/,\n meego: /(MeeGo).+NokiaBrowser\\/(\\d+)\\.([\\d\\._]+)/,\n webos: /(webOS)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n blackberry: /(BlackBerry|BB10).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n playbook: /(PlayBook).*?Tablet\\s*OS\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\n windows: /(MSIE)\\s+(\\d+)\\.(\\d+(\\.\\d+)?)/,\n tizen: /(tizen).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/i,\n sailfish: /(sailfish).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*firefox/i,\n ffos: /(Mobile).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*Firefox/\n }, osRxs = {\n ios: /^i(phone|pad|pod)$/i,\n android: /^android|fire$/i,\n blackberry: /^blackberry|playbook/i,\n windows: /windows/,\n wp: /wp/,\n flat: /sailfish|ffos|tizen/i,\n meego: /meego/\n }, formFactorRxs = { tablet: /playbook|ipad|fire/i }, browserRxs = {\n omini: /Opera\\sMini/i,\n omobile: /Opera\\sMobi/i,\n firefox: /Firefox|Fennec/i,\n mobilesafari: /version\\/.*safari/i,\n ie: /MSIE|Windows\\sPhone/i,\n chrome: /chrome|crios/i,\n webkit: /webkit/i\n };\n for (var agent in agentRxs) {\n if (agentRxs.hasOwnProperty(agent)) {\n match = ua.match(agentRxs[agent]);\n if (match) {\n if (agent == 'windows' && 'plugins' in navigator) {\n return false;\n }\n os = {};\n os.device = agent;\n os.tablet = testRx(agent, formFactorRxs, false);\n os.browser = testRx(ua, browserRxs, 'default');\n os.name = testRx(agent, osRxs);\n os[os.name] = true;\n os.majorVersion = match[2];\n os.minorVersion = (match[3] || '0').replace('_', '.');\n minorVersion = os.minorVersion.replace('.', '').substr(0, 2);\n os.flatVersion = os.majorVersion + minorVersion + new Array(3 - (minorVersion.length < 3 ? minorVersion.length : 2)).join('0');\n os.cordova = typeof window.PhoneGap !== UNDEFINED || typeof window.cordova !== UNDEFINED;\n os.appMode = window.navigator.standalone || /file|local|wmapp/.test(window.location.protocol) || os.cordova;\n if (os.android && (support.devicePixelRatio < 1.5 && os.flatVersion < 400 || notAndroidPhone) && (support.screenWidth > 800 || support.screenHeight > 800)) {\n os.tablet = agent;\n }\n break;\n }\n }\n }\n return os;\n };\n var mobileOS = support.mobileOS = support.detectOS(navigator.userAgent);\n support.wpDevicePixelRatio = mobileOS.wp ? screen.width / 320 : 0;\n support.hasNativeScrolling = false;\n if (mobileOS.ios || mobileOS.android && mobileOS.majorVersion > 2 || mobileOS.wp) {\n support.hasNativeScrolling = mobileOS;\n }\n support.delayedClick = function () {\n if (support.touch) {\n if (mobileOS.ios) {\n return true;\n }\n if (mobileOS.android) {\n if (!support.browser.chrome) {\n return true;\n }\n if (support.browser.version < 32) {\n return false;\n }\n return !($('meta[name=viewport]').attr('content') || '').match(/user-scalable=no/i);\n }\n }\n return false;\n };\n support.mouseAndTouchPresent = support.touch && !(support.mobileOS.ios || support.mobileOS.android);\n support.detectBrowser = function (ua) {\n var browser = false, match = [], browserRxs = {\n edge: /(edge)[ \\/]([\\w.]+)/i,\n webkit: /(chrome|crios)[ \\/]([\\w.]+)/i,\n safari: /(webkit)[ \\/]([\\w.]+)/i,\n opera: /(opera)(?:.*version|)[ \\/]([\\w.]+)/i,\n msie: /(msie\\s|trident.*? rv:)([\\w.]+)/i,\n mozilla: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n };\n for (var agent in browserRxs) {\n if (browserRxs.hasOwnProperty(agent)) {\n match = ua.match(browserRxs[agent]);\n if (match) {\n browser = {};\n browser[agent] = true;\n browser[match[1].toLowerCase().split(' ')[0].split('/')[0]] = true;\n browser.version = parseInt(document.documentMode || match[2], 10);\n break;\n }\n }\n }\n return browser;\n };\n support.browser = support.detectBrowser(navigator.userAgent);\n support.detectClipboardAccess = function () {\n var commands = {\n copy: document.queryCommandSupported ? document.queryCommandSupported('copy') : false,\n cut: document.queryCommandSupported ? document.queryCommandSupported('cut') : false,\n paste: document.queryCommandSupported ? document.queryCommandSupported('paste') : false\n };\n if (support.browser.chrome) {\n commands.paste = false;\n if (support.browser.version >= 43) {\n commands.copy = true;\n commands.cut = true;\n }\n }\n return commands;\n };\n support.clipboard = support.detectClipboardAccess();\n support.zoomLevel = function () {\n try {\n var browser = support.browser;\n var ie11WidthCorrection = 0;\n var docEl = document.documentElement;\n if (browser.msie && browser.version == 11 && docEl.scrollHeight > docEl.clientHeight && !support.touch) {\n ie11WidthCorrection = support.scrollbar();\n }\n return support.touch ? docEl.clientWidth / window.innerWidth : browser.msie && browser.version >= 10 ? ((top || window).document.documentElement.offsetWidth + ie11WidthCorrection) / (top || window).innerWidth : 1;\n } catch (e) {\n return 1;\n }\n };\n support.cssBorderSpacing = typeof docStyle.borderSpacing != 'undefined' && !(support.browser.msie && support.browser.version < 8);\n (function (browser) {\n var cssClass = '', docElement = $(document.documentElement), majorVersion = parseInt(browser.version, 10);\n if (browser.msie) {\n cssClass = 'ie';\n } else if (browser.mozilla) {\n cssClass = 'ff';\n } else if (browser.safari) {\n cssClass = 'safari';\n } else if (browser.webkit) {\n cssClass = 'webkit';\n } else if (browser.opera) {\n cssClass = 'opera';\n } else if (browser.edge) {\n cssClass = 'edge';\n }\n if (cssClass) {\n cssClass = 'k-' + cssClass + ' k-' + cssClass + majorVersion;\n }\n if (support.mobileOS) {\n cssClass += ' k-mobile';\n }\n if (!support.cssFlexbox) {\n cssClass += ' k-no-flexbox';\n }\n docElement.addClass(cssClass);\n }(support.browser));\n support.eventCapture = document.documentElement.addEventListener;\n var input = document.createElement('input');\n support.placeholder = 'placeholder' in input;\n support.propertyChangeEvent = 'onpropertychange' in input;\n support.input = function () {\n var types = [\n 'number',\n 'date',\n 'time',\n 'month',\n 'week',\n 'datetime',\n 'datetime-local'\n ];\n var length = types.length;\n var value = 'test';\n var result = {};\n var idx = 0;\n var type;\n for (; idx < length; idx++) {\n type = types[idx];\n input.setAttribute('type', type);\n input.value = value;\n result[type.replace('-', '')] = input.type !== 'text' && input.value !== value;\n }\n return result;\n }();\n input.style.cssText = 'float:left;';\n support.cssFloat = !!input.style.cssFloat;\n input = null;\n support.stableSort = function () {\n var threshold = 513;\n var sorted = [{\n index: 0,\n field: 'b'\n }];\n for (var i = 1; i < threshold; i++) {\n sorted.push({\n index: i,\n field: 'a'\n });\n }\n sorted.sort(function (a, b) {\n return a.field > b.field ? 1 : a.field < b.field ? -1 : 0;\n });\n return sorted[0].index === 1;\n }();\n support.matchesSelector = elementProto.webkitMatchesSelector || elementProto.mozMatchesSelector || elementProto.msMatchesSelector || elementProto.oMatchesSelector || elementProto.matchesSelector || elementProto.matches || function (selector) {\n var nodeList = document.querySelectorAll ? (this.parentNode || document).querySelectorAll(selector) || [] : $(selector), i = nodeList.length;\n while (i--) {\n if (nodeList[i] == this) {\n return true;\n }\n }\n return false;\n };\n support.matchMedia = 'matchMedia' in window;\n support.pushState = window.history && window.history.pushState;\n var documentMode = document.documentMode;\n support.hashChange = 'onhashchange' in window && !(support.browser.msie && (!documentMode || documentMode <= 8));\n support.customElements = 'registerElement' in window.document;\n var chrome = support.browser.chrome, mozilla = support.browser.mozilla;\n support.msPointers = !chrome && window.MSPointerEvent;\n support.pointers = !chrome && !mozilla && window.PointerEvent;\n support.kineticScrollNeeded = mobileOS && (support.touch || support.msPointers || support.pointers);\n }());\n function size(obj) {\n var result = 0, key;\n for (key in obj) {\n if (obj.hasOwnProperty(key) && key != 'toJSON') {\n result++;\n }\n }\n return result;\n }\n function getOffset(element, type, positioned) {\n if (!type) {\n type = 'offset';\n }\n var offset = element[type]();\n var result = {\n top: offset.top,\n right: offset.right,\n bottom: offset.bottom,\n left: offset.left\n };\n if (support.browser.msie && (support.pointers || support.msPointers) && !positioned) {\n var sign = support.isRtl(element) ? 1 : -1;\n result.top -= window.pageYOffset - document.documentElement.scrollTop;\n result.left -= window.pageXOffset + sign * document.documentElement.scrollLeft;\n }\n return result;\n }\n var directions = {\n left: { reverse: 'right' },\n right: { reverse: 'left' },\n down: { reverse: 'up' },\n up: { reverse: 'down' },\n top: { reverse: 'bottom' },\n bottom: { reverse: 'top' },\n 'in': { reverse: 'out' },\n out: { reverse: 'in' }\n };\n function parseEffects(input) {\n var effects = {};\n each(typeof input === 'string' ? input.split(' ') : input, function (idx) {\n effects[idx] = this;\n });\n return effects;\n }\n function fx(element) {\n return new kendo.effects.Element(element);\n }\n var effects = {};\n $.extend(effects, {\n enabled: true,\n Element: function (element) {\n this.element = $(element);\n },\n promise: function (element, options) {\n if (!element.is(':visible')) {\n element.css({ display: element.data('olddisplay') || 'block' }).css('display');\n }\n if (options.hide) {\n element.data('olddisplay', element.css('display')).hide();\n }\n if (options.init) {\n options.init();\n }\n if (options.completeCallback) {\n options.completeCallback(element);\n }\n element.dequeue();\n },\n disable: function () {\n this.enabled = false;\n this.promise = this.promiseShim;\n },\n enable: function () {\n this.enabled = true;\n this.promise = this.animatedPromise;\n }\n });\n effects.promiseShim = effects.promise;\n function prepareAnimationOptions(options, duration, reverse, complete) {\n if (typeof options === STRING) {\n if (isFunction(duration)) {\n complete = duration;\n duration = 400;\n reverse = false;\n }\n if (isFunction(reverse)) {\n complete = reverse;\n reverse = false;\n }\n if (typeof duration === BOOLEAN) {\n reverse = duration;\n duration = 400;\n }\n options = {\n effects: options,\n duration: duration,\n reverse: reverse,\n complete: complete\n };\n }\n return extend({\n effects: {},\n duration: 400,\n reverse: false,\n init: noop,\n teardown: noop,\n hide: false\n }, options, {\n completeCallback: options.complete,\n complete: noop\n });\n }\n function animate(element, options, duration, reverse, complete) {\n var idx = 0, length = element.length, instance;\n for (; idx < length; idx++) {\n instance = $(element[idx]);\n instance.queue(function () {\n effects.promise(instance, prepareAnimationOptions(options, duration, reverse, complete));\n });\n }\n return element;\n }\n function toggleClass(element, classes, options, add) {\n if (classes) {\n classes = classes.split(' ');\n each(classes, function (idx, value) {\n element.toggleClass(value, add);\n });\n }\n return element;\n }\n if (!('kendoAnimate' in $.fn)) {\n extend($.fn, {\n kendoStop: function (clearQueue, gotoEnd) {\n return this.stop(clearQueue, gotoEnd);\n },\n kendoAnimate: function (options, duration, reverse, complete) {\n return animate(this, options, duration, reverse, complete);\n },\n kendoAddClass: function (classes, options) {\n return kendo.toggleClass(this, classes, options, true);\n },\n kendoRemoveClass: function (classes, options) {\n return kendo.toggleClass(this, classes, options, false);\n },\n kendoToggleClass: function (classes, options, toggle) {\n return kendo.toggleClass(this, classes, options, toggle);\n }\n });\n }\n var ampRegExp = /&/g, ltRegExp = //g;\n function htmlEncode(value) {\n return ('' + value).replace(ampRegExp, '&').replace(ltRegExp, '<').replace(gtRegExp, '>').replace(quoteRegExp, '"').replace(aposRegExp, ''');\n }\n var eventTarget = function (e) {\n return e.target;\n };\n if (support.touch) {\n eventTarget = function (e) {\n var touches = 'originalEvent' in e ? e.originalEvent.changedTouches : 'changedTouches' in e ? e.changedTouches : null;\n return touches ? document.elementFromPoint(touches[0].clientX, touches[0].clientY) : e.target;\n };\n each([\n 'swipe',\n 'swipeLeft',\n 'swipeRight',\n 'swipeUp',\n 'swipeDown',\n 'doubleTap',\n 'tap'\n ], function (m, value) {\n $.fn[value] = function (callback) {\n return this.bind(value, callback);\n };\n });\n }\n if (support.touch) {\n if (!support.mobileOS) {\n support.mousedown = 'mousedown touchstart';\n support.mouseup = 'mouseup touchend';\n support.mousemove = 'mousemove touchmove';\n support.mousecancel = 'mouseleave touchcancel';\n support.click = 'click';\n support.resize = 'resize';\n } else {\n support.mousedown = 'touchstart';\n support.mouseup = 'touchend';\n support.mousemove = 'touchmove';\n support.mousecancel = 'touchcancel';\n support.click = 'touchend';\n support.resize = 'orientationchange';\n }\n } else if (support.pointers) {\n support.mousemove = 'pointermove';\n support.mousedown = 'pointerdown';\n support.mouseup = 'pointerup';\n support.mousecancel = 'pointercancel';\n support.click = 'pointerup';\n support.resize = 'orientationchange resize';\n } else if (support.msPointers) {\n support.mousemove = 'MSPointerMove';\n support.mousedown = 'MSPointerDown';\n support.mouseup = 'MSPointerUp';\n support.mousecancel = 'MSPointerCancel';\n support.click = 'MSPointerUp';\n support.resize = 'orientationchange resize';\n } else {\n support.mousemove = 'mousemove';\n support.mousedown = 'mousedown';\n support.mouseup = 'mouseup';\n support.mousecancel = 'mouseleave';\n support.click = 'click';\n support.resize = 'resize';\n }\n var wrapExpression = function (members, paramName) {\n var result = paramName || 'd', index, idx, length, member, count = 1;\n for (idx = 0, length = members.length; idx < length; idx++) {\n member = members[idx];\n if (member !== '') {\n index = member.indexOf('[');\n if (index !== 0) {\n if (index == -1) {\n member = '.' + member;\n } else {\n count++;\n member = '.' + member.substring(0, index) + ' || {})' + member.substring(index);\n }\n }\n count++;\n result += member + (idx < length - 1 ? ' || {})' : ')');\n }\n }\n return new Array(count).join('(') + result;\n }, localUrlRe = /^([a-z]+:)?\\/\\//i;\n extend(kendo, {\n widgets: [],\n _widgetRegisteredCallbacks: [],\n ui: kendo.ui || {},\n fx: kendo.fx || fx,\n effects: kendo.effects || effects,\n mobile: kendo.mobile || {},\n data: kendo.data || {},\n dataviz: kendo.dataviz || {},\n drawing: kendo.drawing || {},\n spreadsheet: { messages: {} },\n keys: {\n INSERT: 45,\n DELETE: 46,\n BACKSPACE: 8,\n TAB: 9,\n ENTER: 13,\n ESC: 27,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n END: 35,\n HOME: 36,\n SPACEBAR: 32,\n PAGEUP: 33,\n PAGEDOWN: 34,\n F2: 113,\n F10: 121,\n F12: 123,\n NUMPAD_PLUS: 107,\n NUMPAD_MINUS: 109,\n NUMPAD_DOT: 110\n },\n support: kendo.support || support,\n animate: kendo.animate || animate,\n ns: '',\n attr: function (value) {\n return 'data-' + kendo.ns + value;\n },\n getShadows: getShadows,\n wrap: wrap,\n deepExtend: deepExtend,\n getComputedStyles: getComputedStyles,\n isScrollable: isScrollable,\n scrollLeft: scrollLeft,\n size: size,\n toCamelCase: toCamelCase,\n toHyphens: toHyphens,\n getOffset: kendo.getOffset || getOffset,\n parseEffects: kendo.parseEffects || parseEffects,\n toggleClass: kendo.toggleClass || toggleClass,\n directions: kendo.directions || directions,\n Observable: Observable,\n Class: Class,\n Template: Template,\n template: proxy(Template.compile, Template),\n render: proxy(Template.render, Template),\n stringify: proxy(JSON.stringify, JSON),\n eventTarget: eventTarget,\n htmlEncode: htmlEncode,\n isLocalUrl: function (url) {\n return url && !localUrlRe.test(url);\n },\n expr: function (expression, safe, paramName) {\n expression = expression || '';\n if (typeof safe == STRING) {\n paramName = safe;\n safe = false;\n }\n paramName = paramName || 'd';\n if (expression && expression.charAt(0) !== '[') {\n expression = '.' + expression;\n }\n if (safe) {\n expression = expression.replace(/\"([^.]*)\\.([^\"]*)\"/g, '\"$1_$DOT$_$2\"');\n expression = expression.replace(/'([^.]*)\\.([^']*)'/g, '\\'$1_$DOT$_$2\\'');\n expression = wrapExpression(expression.split('.'), paramName);\n expression = expression.replace(/_\\$DOT\\$_/g, '.');\n } else {\n expression = paramName + expression;\n }\n return expression;\n },\n getter: function (expression, safe) {\n var key = expression + safe;\n return getterCache[key] = getterCache[key] || new Function('d', 'return ' + kendo.expr(expression, safe));\n },\n setter: function (expression) {\n return setterCache[expression] = setterCache[expression] || new Function('d,value', kendo.expr(expression) + '=value');\n },\n accessor: function (expression) {\n return {\n get: kendo.getter(expression),\n set: kendo.setter(expression)\n };\n },\n guid: function () {\n var id = '', i, random;\n for (i = 0; i < 32; i++) {\n random = math.random() * 16 | 0;\n if (i == 8 || i == 12 || i == 16 || i == 20) {\n id += '-';\n }\n id += (i == 12 ? 4 : i == 16 ? random & 3 | 8 : random).toString(16);\n }\n return id;\n },\n roleSelector: function (role) {\n return role.replace(/(\\S+)/g, '[' + kendo.attr('role') + '=$1],').slice(0, -1);\n },\n directiveSelector: function (directives) {\n var selectors = directives.split(' ');\n if (selectors) {\n for (var i = 0; i < selectors.length; i++) {\n if (selectors[i] != 'view') {\n selectors[i] = selectors[i].replace(/(\\w*)(view|bar|strip|over)$/, '$1-$2');\n }\n }\n }\n return selectors.join(' ').replace(/(\\S+)/g, 'kendo-mobile-$1,').slice(0, -1);\n },\n triggeredByInput: function (e) {\n return /^(label|input|textarea|select)$/i.test(e.target.tagName);\n },\n onWidgetRegistered: function (callback) {\n for (var i = 0, len = kendo.widgets.length; i < len; i++) {\n callback(kendo.widgets[i]);\n }\n kendo._widgetRegisteredCallbacks.push(callback);\n },\n logToConsole: function (message, type) {\n var console = window.console;\n if (!kendo.suppressLog && typeof console != 'undefined' && console.log) {\n console[type || 'log'](message);\n }\n }\n });\n var Widget = Observable.extend({\n init: function (element, options) {\n var that = this;\n that.element = kendo.jQuery(element).handler(that);\n that.angular('init', options);\n Observable.fn.init.call(that);\n var dataSource = options ? options.dataSource : null;\n if (dataSource) {\n options = extend({}, options, { dataSource: {} });\n }\n options = that.options = extend(true, {}, that.options, options);\n if (dataSource) {\n options.dataSource = dataSource;\n }\n if (!that.element.attr(kendo.attr('role'))) {\n that.element.attr(kendo.attr('role'), (options.name || '').toLowerCase());\n }\n that.element.data('kendo' + options.prefix + options.name, that);\n that.bind(that.events, options);\n },\n events: [],\n options: { prefix: '' },\n _hasBindingTarget: function () {\n return !!this.element[0].kendoBindingTarget;\n },\n _tabindex: function (target) {\n target = target || this.wrapper;\n var element = this.element, TABINDEX = 'tabindex', tabindex = target.attr(TABINDEX) || element.attr(TABINDEX);\n element.removeAttr(TABINDEX);\n target.attr(TABINDEX, !isNaN(tabindex) ? tabindex : 0);\n },\n setOptions: function (options) {\n this._setEvents(options);\n $.extend(this.options, options);\n },\n _setEvents: function (options) {\n var that = this, idx = 0, length = that.events.length, e;\n for (; idx < length; idx++) {\n e = that.events[idx];\n if (that.options[e] && options[e]) {\n that.unbind(e, that.options[e]);\n }\n }\n that.bind(that.events, options);\n },\n resize: function (force) {\n var size = this.getSize(), currentSize = this._size;\n if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this._size = size;\n this._resize(size, force);\n this.trigger('resize', size);\n }\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n size: function (size) {\n if (!size) {\n return this.getSize();\n } else {\n this.setSize(size);\n }\n },\n setSize: $.noop,\n _resize: $.noop,\n destroy: function () {\n var that = this;\n that.element.removeData('kendo' + that.options.prefix + that.options.name);\n that.element.removeData('handler');\n that.unbind();\n },\n _destroy: function () {\n this.destroy();\n },\n angular: function () {\n },\n _muteAngularRebind: function (callback) {\n this._muteRebind = true;\n callback.call(this);\n this._muteRebind = false;\n }\n });\n var DataBoundWidget = Widget.extend({\n dataItems: function () {\n return this.dataSource.flatView();\n },\n _angularItems: function (cmd) {\n var that = this;\n that.angular(cmd, function () {\n return {\n elements: that.items(),\n data: $.map(that.dataItems(), function (dataItem) {\n return { dataItem: dataItem };\n })\n };\n });\n }\n });\n kendo.dimensions = function (element, dimensions) {\n var domElement = element[0];\n if (dimensions) {\n element.css(dimensions);\n }\n return {\n width: domElement.offsetWidth,\n height: domElement.offsetHeight\n };\n };\n kendo.notify = noop;\n var templateRegExp = /template$/i, jsonRegExp = /^\\s*(?:\\{(?:.|\\r\\n|\\n)*\\}|\\[(?:.|\\r\\n|\\n)*\\])\\s*$/, jsonFormatRegExp = /^\\{(\\d+)(:[^\\}]+)?\\}|^\\[[A-Za-z_]+\\]$/, dashRegExp = /([A-Z])/g;\n function parseOption(element, option) {\n var value;\n if (option.indexOf('data') === 0) {\n option = option.substring(4);\n option = option.charAt(0).toLowerCase() + option.substring(1);\n }\n option = option.replace(dashRegExp, '-$1');\n value = element.getAttribute('data-' + kendo.ns + option);\n if (value === null) {\n value = undefined;\n } else if (value === 'null') {\n value = null;\n } else if (value === 'true') {\n value = true;\n } else if (value === 'false') {\n value = false;\n } else if (numberRegExp.test(value) && option != 'mask') {\n value = parseFloat(value);\n } else if (jsonRegExp.test(value) && !jsonFormatRegExp.test(value)) {\n value = new Function('return (' + value + ')')();\n }\n return value;\n }\n function parseOptions(element, options, source) {\n var result = {}, option, value;\n for (option in options) {\n value = parseOption(element, option);\n if (value !== undefined) {\n if (templateRegExp.test(option)) {\n if (typeof value === 'string') {\n if ($('#' + value).length) {\n value = kendo.template($('#' + value).html());\n } else if (source) {\n value = kendo.template(source[value]);\n }\n } else {\n value = element.getAttribute(option);\n }\n }\n result[option] = value;\n }\n }\n return result;\n }\n kendo.initWidget = function (element, options, roles) {\n var result, option, widget, idx, length, role, value, dataSource, fullPath, widgetKeyRegExp;\n if (!roles) {\n roles = kendo.ui.roles;\n } else if (roles.roles) {\n roles = roles.roles;\n }\n element = element.nodeType ? element : element[0];\n role = element.getAttribute('data-' + kendo.ns + 'role');\n if (!role) {\n return;\n }\n fullPath = role.indexOf('.') === -1;\n if (fullPath) {\n widget = roles[role];\n } else {\n widget = kendo.getter(role)(window);\n }\n var data = $(element).data(), widgetKey = widget ? 'kendo' + widget.fn.options.prefix + widget.fn.options.name : '';\n if (fullPath) {\n widgetKeyRegExp = new RegExp('^kendo.*' + role + '$', 'i');\n } else {\n widgetKeyRegExp = new RegExp('^' + widgetKey + '$', 'i');\n }\n for (var key in data) {\n if (key.match(widgetKeyRegExp)) {\n if (key === widgetKey) {\n result = data[key];\n } else {\n return data[key];\n }\n }\n }\n if (!widget) {\n return;\n }\n dataSource = parseOption(element, 'dataSource');\n options = $.extend({}, parseOptions(element, widget.fn.options), options);\n if (dataSource) {\n if (typeof dataSource === STRING) {\n options.dataSource = kendo.getter(dataSource)(window);\n } else {\n options.dataSource = dataSource;\n }\n }\n for (idx = 0, length = widget.fn.events.length; idx < length; idx++) {\n option = widget.fn.events[idx];\n value = parseOption(element, option);\n if (value !== undefined) {\n options[option] = kendo.getter(value)(window);\n }\n }\n if (!result) {\n result = new widget(element, options);\n } else if (!$.isEmptyObject(options)) {\n result.setOptions(options);\n }\n return result;\n };\n kendo.rolesFromNamespaces = function (namespaces) {\n var roles = [], idx, length;\n if (!namespaces[0]) {\n namespaces = [\n kendo.ui,\n kendo.dataviz.ui\n ];\n }\n for (idx = 0, length = namespaces.length; idx < length; idx++) {\n roles[idx] = namespaces[idx].roles;\n }\n return extend.apply(null, [{}].concat(roles.reverse()));\n };\n kendo.init = function (element) {\n var roles = kendo.rolesFromNamespaces(slice.call(arguments, 1));\n $(element).find('[data-' + kendo.ns + 'role]').addBack().each(function () {\n kendo.initWidget(this, {}, roles);\n });\n };\n kendo.destroy = function (element) {\n $(element).find('[data-' + kendo.ns + 'role]').addBack().each(function () {\n var data = $(this).data();\n for (var key in data) {\n if (key.indexOf('kendo') === 0 && typeof data[key].destroy === FUNCTION) {\n data[key].destroy();\n }\n }\n });\n };\n function containmentComparer(a, b) {\n return $.contains(a, b) ? -1 : 1;\n }\n function resizableWidget() {\n var widget = $(this);\n return $.inArray(widget.attr('data-' + kendo.ns + 'role'), [\n 'slider',\n 'rangeslider'\n ]) > -1 || widget.is(':visible');\n }\n kendo.resize = function (element, force) {\n var widgets = $(element).find('[data-' + kendo.ns + 'role]').addBack().filter(resizableWidget);\n if (!widgets.length) {\n return;\n }\n var widgetsArray = $.makeArray(widgets);\n widgetsArray.sort(containmentComparer);\n $.each(widgetsArray, function () {\n var widget = kendo.widgetInstance($(this));\n if (widget) {\n widget.resize(force);\n }\n });\n };\n kendo.parseOptions = parseOptions;\n extend(kendo.ui, {\n Widget: Widget,\n DataBoundWidget: DataBoundWidget,\n roles: {},\n progress: function (container, toggle, options) {\n var mask = container.find('.k-loading-mask'), support = kendo.support, browser = support.browser, isRtl, leftRight, webkitCorrection, containerScrollLeft, cssClass;\n options = $.extend({}, {\n width: '100%',\n height: '100%',\n top: container.scrollTop(),\n opacity: false\n }, options);\n cssClass = options.opacity ? 'k-loading-mask k-opaque' : 'k-loading-mask';\n if (toggle) {\n if (!mask.length) {\n isRtl = support.isRtl(container);\n leftRight = isRtl ? 'right' : 'left';\n containerScrollLeft = container.scrollLeft();\n webkitCorrection = browser.webkit ? !isRtl ? 0 : container[0].scrollWidth - container.width() - 2 * containerScrollLeft : 0;\n mask = $(kendo.format('
{1}
', cssClass, kendo.ui.progress.messages.loading)).width(options.width).height(options.height).css('top', options.top).css(leftRight, Math.abs(containerScrollLeft) + webkitCorrection).prependTo(container);\n }\n } else if (mask) {\n mask.remove();\n }\n },\n plugin: function (widget, register, prefix) {\n var name = widget.fn.options.name, getter;\n register = register || kendo.ui;\n prefix = prefix || '';\n register[name] = widget;\n register.roles[name.toLowerCase()] = widget;\n getter = 'getKendo' + prefix + name;\n name = 'kendo' + prefix + name;\n var widgetEntry = {\n name: name,\n widget: widget,\n prefix: prefix || ''\n };\n kendo.widgets.push(widgetEntry);\n for (var i = 0, len = kendo._widgetRegisteredCallbacks.length; i < len; i++) {\n kendo._widgetRegisteredCallbacks[i](widgetEntry);\n }\n $.fn[name] = function (options) {\n var value = this, args;\n if (typeof options === STRING) {\n args = slice.call(arguments, 1);\n this.each(function () {\n var widget = $.data(this, name), method, result;\n if (!widget) {\n throw new Error(kendo.format('Cannot call method \\'{0}\\' of {1} before it is initialized', options, name));\n }\n method = widget[options];\n if (typeof method !== FUNCTION) {\n throw new Error(kendo.format('Cannot find method \\'{0}\\' of {1}', options, name));\n }\n result = method.apply(widget, args);\n if (result !== undefined) {\n value = result;\n return false;\n }\n });\n } else {\n this.each(function () {\n return new widget(this, options);\n });\n }\n return value;\n };\n $.fn[name].widget = widget;\n $.fn[getter] = function () {\n return this.data(name);\n };\n }\n });\n kendo.ui.progress.messages = { loading: 'Loading...' };\n var ContainerNullObject = {\n bind: function () {\n return this;\n },\n nullObject: true,\n options: {}\n };\n var MobileWidget = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this.element.autoApplyNS();\n this.wrapper = this.element;\n this.element.addClass('km-widget');\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.kendoDestroy();\n },\n options: { prefix: 'Mobile' },\n events: [],\n view: function () {\n var viewElement = this.element.closest(kendo.roleSelector('view splitview modalview drawer'));\n return kendo.widgetInstance(viewElement, kendo.mobile.ui) || ContainerNullObject;\n },\n viewHasNativeScrolling: function () {\n var view = this.view();\n return view && view.options.useNativeScrolling;\n },\n container: function () {\n var element = this.element.closest(kendo.roleSelector('view layout modalview drawer splitview'));\n return kendo.widgetInstance(element.eq(0), kendo.mobile.ui) || ContainerNullObject;\n }\n });\n extend(kendo.mobile, {\n init: function (element) {\n kendo.init(element, kendo.mobile.ui, kendo.ui, kendo.dataviz.ui);\n },\n appLevelNativeScrolling: function () {\n return kendo.mobile.application && kendo.mobile.application.options && kendo.mobile.application.options.useNativeScrolling;\n },\n roles: {},\n ui: {\n Widget: MobileWidget,\n DataBoundWidget: DataBoundWidget.extend(MobileWidget.prototype),\n roles: {},\n plugin: function (widget) {\n kendo.ui.plugin(widget, kendo.mobile.ui, 'Mobile');\n }\n }\n });\n deepExtend(kendo.dataviz, {\n init: function (element) {\n kendo.init(element, kendo.dataviz.ui);\n },\n ui: {\n roles: {},\n themes: {},\n views: [],\n plugin: function (widget) {\n kendo.ui.plugin(widget, kendo.dataviz.ui);\n }\n },\n roles: {}\n });\n kendo.touchScroller = function (elements, options) {\n if (!options) {\n options = {};\n }\n options.useNative = true;\n return $(elements).map(function (idx, element) {\n element = $(element);\n if (support.kineticScrollNeeded && kendo.mobile.ui.Scroller && !element.data('kendoMobileScroller')) {\n element.kendoMobileScroller(options);\n return element.data('kendoMobileScroller');\n } else {\n return false;\n }\n })[0];\n };\n kendo.preventDefault = function (e) {\n e.preventDefault();\n };\n kendo.widgetInstance = function (element, suites) {\n var role = element.data(kendo.ns + 'role'), widgets = [], i, length;\n if (role) {\n if (role === 'content') {\n role = 'scroller';\n }\n if (role === 'editortoolbar') {\n var editorToolbar = element.data('kendoEditorToolbar');\n if (editorToolbar) {\n return editorToolbar;\n }\n }\n if (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.filters.visible(element) && !$(element).parents().addBack().filter(function () {\n return $.css(this, 'visibility') === 'hidden';\n }).length;\n }\n $.extend($.expr[':'], {\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 extend(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 Infrao = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n var zone = Infrao.zone;\n var rule = Infrao.rule;\n return kendo.parseFloat(rule ? zone[0] - rule[6] : zone[0]);\n }\n function abbr(utcTime, timezone) {\n var Infrao = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n var zone = Infrao.zone;\n var rule = Infrao.rule;\n var base = zone[2];\n if (base.indexOf('/') >= 0) {\n return base.split('/')[rule && +rule[6] ? 1 : 0];\n } else if (base.indexOf('%s') >= 0) {\n return base.replace('%s', !rule || rule[7] == '-' ? '' : rule[7]);\n }\n return base;\n }\n function convert(date, fromOffset, toOffset) {\n var tempToOffset = toOffset;\n var diff;\n if (typeof fromOffset == STRING) {\n fromOffset = this.offset(date, fromOffset);\n }\n if (typeof toOffset == STRING) {\n toOffset = this.offset(date, toOffset);\n }\n var fromLocalOffset = date.getTimezoneOffset();\n date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\n var toLocalOffset = date.getTimezoneOffset();\n if (typeof tempToOffset == STRING) {\n tempToOffset = this.offset(date, tempToOffset);\n }\n diff = toLocalOffset - fromLocalOffset + (toOffset - tempToOffset);\n return new Date(date.getTime() + diff * 60000);\n }\n function apply(date, timezone) {\n return this.convert(date, date.getTimezoneOffset(), timezone);\n }\n function remove(date, timezone) {\n return this.convert(date, timezone, date.getTimezoneOffset());\n }\n function toLocalDate(time) {\n return this.apply(new Date(time), 'Etc/UTC');\n }\n return {\n zones: {},\n rules: {},\n offset: offset,\n convert: convert,\n apply: apply,\n remove: remove,\n abbr: abbr,\n toLocalDate: toLocalDate\n };\n }();\n kendo.date = function () {\n var MS_PER_MINUTE = 60000, MS_PER_DAY = 86400000;\n function adjustDST(date, hours) {\n if (hours === 0 && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n return true;\n }\n return false;\n }\n function setDayOfWeek(date, day, dir) {\n var hours = date.getHours();\n dir = dir || 1;\n day = (day - date.getDay() + 7 * dir) % 7;\n date.setDate(date.getDate() + day);\n adjustDST(date, hours);\n }\n function dayOfWeek(date, day, dir) {\n date = new Date(date);\n setDayOfWeek(date, day, dir);\n return date;\n }\n function firstDayOfMonth(date) {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n }\n function lastDayOfMonth(date) {\n var last = new Date(date.getFullYear(), date.getMonth() + 1, 0), first = firstDayOfMonth(date), timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n if (timeOffset) {\n last.setHours(first.getHours() + timeOffset / 60);\n }\n return last;\n }\n function moveDateToWeekStart(date, weekStartDay) {\n if (weekStartDay !== 1) {\n return addDays(dayOfWeek(date, weekStartDay, -1), 4);\n }\n return addDays(date, 4 - (date.getDay() || 7));\n }\n function calcWeekInYear(date, weekStartDay) {\n var firstWeekInYear = new Date(date.getFullYear(), 0, 1, -6);\n var newDate = moveDateToWeekStart(date, weekStartDay);\n var diffInMS = newDate.getTime() - firstWeekInYear.getTime();\n var days = Math.floor(diffInMS / MS_PER_DAY);\n return 1 + Math.floor(days / 7);\n }\n function weekInYear(date, weekStartDay) {\n if (weekStartDay === undefined) {\n weekStartDay = kendo.culture().calendar.firstDay;\n }\n var prevWeekDate = addDays(date, -7);\n var nextWeekDate = addDays(date, 7);\n var weekNumber = calcWeekInYear(date, weekStartDay);\n if (weekNumber === 0) {\n return calcWeekInYear(prevWeekDate, weekStartDay) + 1;\n }\n if (weekNumber === 53 && calcWeekInYear(nextWeekDate, weekStartDay) > 1) {\n return 1;\n }\n return weekNumber;\n }\n function getDate(date) {\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n adjustDST(date, 0);\n return date;\n }\n function toUtcTime(date) {\n return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n function getMilliseconds(date) {\n return toInvariantTime(date).getTime() - getDate(toInvariantTime(date));\n }\n function isInTimeRange(value, min, max) {\n var msMin = getMilliseconds(min), msMax = getMilliseconds(max), msValue;\n if (!value || msMin == msMax) {\n return true;\n }\n if (min >= max) {\n max += MS_PER_DAY;\n }\n msValue = getMilliseconds(value);\n if (msMin > msValue) {\n msValue += MS_PER_DAY;\n }\n if (msMax < msMin) {\n msMax += MS_PER_DAY;\n }\n return msValue >= msMin && msValue <= msMax;\n }\n function isInDateRange(value, min, max) {\n var msMin = min.getTime(), msMax = max.getTime(), msValue;\n if (msMin >= msMax) {\n msMax += MS_PER_DAY;\n }\n msValue = value.getTime();\n return msValue >= msMin && msValue <= msMax;\n }\n function addDays(date, offset) {\n var hours = date.getHours();\n date = new Date(date);\n setTime(date, offset * MS_PER_DAY);\n adjustDST(date, hours);\n return date;\n }\n function setTime(date, milliseconds, ignoreDST) {\n var offset = date.getTimezoneOffset();\n var difference;\n date.setTime(date.getTime() + milliseconds);\n if (!ignoreDST) {\n difference = date.getTimezoneOffset() - offset;\n date.setTime(date.getTime() + difference * MS_PER_MINUTE);\n }\n }\n function setHours(date, time) {\n date = new Date(kendo.date.getDate(date).getTime() + kendo.date.getMilliseconds(time));\n adjustDST(date, time.getHours());\n return date;\n }\n function today() {\n return getDate(new Date());\n }\n function isToday(date) {\n return getDate(date).getTime() == today().getTime();\n }\n function toInvariantTime(date) {\n var staticDate = new Date(1980, 1, 1, 0, 0, 0);\n if (date) {\n staticDate.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n return staticDate;\n }\n return {\n adjustDST: adjustDST,\n dayOfWeek: dayOfWeek,\n setDayOfWeek: setDayOfWeek,\n getDate: getDate,\n isInDateRange: isInDateRange,\n isInTimeRange: isInTimeRange,\n isToday: isToday,\n nextDay: function (date) {\n return addDays(date, 1);\n },\n previousDay: function (date) {\n return addDays(date, -1);\n },\n toUtcTime: toUtcTime,\n MS_PER_DAY: MS_PER_DAY,\n MS_PER_HOUR: 60 * MS_PER_MINUTE,\n MS_PER_MINUTE: MS_PER_MINUTE,\n setTime: setTime,\n setHours: setHours,\n addDays: addDays,\n today: today,\n toInvariantTime: toInvariantTime,\n firstDayOfMonth: firstDayOfMonth,\n lastDayOfMonth: lastDayOfMonth,\n weekInYear: weekInYear,\n getMilliseconds: getMilliseconds\n };\n }();\n kendo.stripWhitespace = function (element) {\n if (document.createNodeIterator) {\n var iterator = document.createNodeIterator(element, NodeFilter.SHOW_TEXT, function (node) {\n return node.parentNode == element ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n }, false);\n while (iterator.nextNode()) {\n if (iterator.referenceNode && !iterator.referenceNode.textContent.trim()) {\n iterator.referenceNode.parentNode.removeChild(iterator.referenceNode);\n }\n }\n } else {\n for (var i = 0; i < element.childNodes.length; i++) {\n var child = element.childNodes[i];\n if (child.nodeType == 3 && !/\\S/.test(child.nodeValue)) {\n element.removeChild(child);\n i--;\n }\n if (child.nodeType == 1) {\n kendo.stripWhitespace(child);\n }\n }\n }\n };\n var animationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n setTimeout(callback, 1000 / 60);\n };\n kendo.animationFrame = function (callback) {\n animationFrame.call(window, callback);\n };\n var animationQueue = [];\n kendo.queueAnimation = function (callback) {\n animationQueue[animationQueue.length] = callback;\n if (animationQueue.length === 1) {\n kendo.runNextAnimation();\n }\n };\n kendo.runNextAnimation = function () {\n kendo.animationFrame(function () {\n if (animationQueue[0]) {\n animationQueue.shift()();\n if (animationQueue[0]) {\n kendo.runNextAnimation();\n }\n }\n });\n };\n kendo.parseQueryStringParams = function (url) {\n var queryString = url.split('?')[1] || '', params = {}, paramParts = queryString.split(/&|=/), length = paramParts.length, idx = 0;\n for (; idx < length; idx += 2) {\n if (paramParts[idx] !== '') {\n params[decodeURIComponent(paramParts[idx])] = decodeURIComponent(paramParts[idx + 1]);\n }\n }\n return params;\n };\n kendo.elementUnderCursor = function (e) {\n if (typeof e.x.client != 'undefined') {\n return document.elementFromPoint(e.x.client, e.y.client);\n }\n };\n kendo.wheelDeltaY = function (jQueryEvent) {\n var e = jQueryEvent.originalEvent, deltaY = e.wheelDeltaY, delta;\n if (e.wheelDelta) {\n if (deltaY === undefined || deltaY) {\n delta = e.wheelDelta;\n }\n } else if (e.detail && e.axis === e.VERTICAL_AXIS) {\n delta = -e.detail * 10;\n }\n return delta;\n };\n kendo.throttle = function (fn, delay) {\n var timeout;\n var lastExecTime = 0;\n if (!delay || delay <= 0) {\n return fn;\n }\n var throttled = function () {\n var that = this;\n var elapsed = +new Date() - lastExecTime;\n var args = arguments;\n function exec() {\n fn.apply(that, args);\n lastExecTime = +new Date();\n }\n if (!lastExecTime) {\n return exec();\n }\n if (timeout) {\n clearTimeout(timeout);\n }\n if (elapsed > delay) {\n exec();\n } else {\n timeout = setTimeout(exec, delay - elapsed);\n }\n };\n throttled.cancel = function () {\n clearTimeout(timeout);\n };\n return throttled;\n };\n kendo.caret = function (element, start, end) {\n var rangeElement;\n var isPosition = start !== undefined;\n if (end === undefined) {\n end = start;\n }\n if (element[0]) {\n element = element[0];\n }\n if (isPosition && element.disabled) {\n return;\n }\n try {\n if (element.selectionStart !== undefined) {\n if (isPosition) {\n element.focus();\n var mobile = support.mobileOS;\n if (mobile.wp || mobile.android) {\n setTimeout(function () {\n element.setSelectionRange(start, end);\n }, 0);\n } else {\n element.setSelectionRange(start, end);\n }\n } else {\n start = [\n element.selectionStart,\n element.selectionEnd\n ];\n }\n } else if (document.selection) {\n if ($(element).is(':visible')) {\n element.focus();\n }\n rangeElement = element.createTextRange();\n if (isPosition) {\n rangeElement.collapse(true);\n rangeElement.moveStart('character', start);\n rangeElement.moveEnd('character', end - start);\n rangeElement.select();\n } else {\n var rangeDuplicated = rangeElement.duplicate(), selectionStart, selectionEnd;\n rangeElement.moveToBookmark(document.selection.createRange().getBookmark());\n rangeDuplicated.setEndPoint('EndToStart', rangeElement);\n selectionStart = rangeDuplicated.text.length;\n selectionEnd = selectionStart + rangeElement.text.length;\n start = [\n selectionStart,\n selectionEnd\n ];\n }\n }\n } catch (e) {\n start = [];\n }\n return start;\n };\n kendo.compileMobileDirective = function (element, scope) {\n var angular = window.angular;\n element.attr('data-' + kendo.ns + 'role', element[0].tagName.toLowerCase().replace('kendo-mobile-', '').replace('-', ''));\n angular.element(element).injector().invoke([\n '$compile',\n function ($compile) {\n $compile(element)(scope);\n if (!/^\\$(digest|apply)$/.test(scope.$$phase)) {\n scope.$digest();\n }\n }\n ]);\n return kendo.widgetInstance(element, kendo.mobile.ui);\n };\n kendo.antiForgeryTokens = function () {\n var tokens = {}, csrf_token = $('meta[name=csrf-token],meta[name=_csrf]').attr('content'), csrf_param = $('meta[name=csrf-param],meta[name=_csrf_header]').attr('content');\n $('input[name^=\\'__RequestVerificationToken\\']').each(function () {\n tokens[this.name] = this.value;\n });\n if (csrf_param !== undefined && csrf_token !== undefined) {\n tokens[csrf_param] = csrf_token;\n }\n return tokens;\n };\n kendo.cycleForm = function (form) {\n var firstElement = form.find('input, .k-widget').first();\n var lastElement = form.find('button, .k-button').last();\n function focus(el) {\n var widget = kendo.widgetInstance(el);\n if (widget && widget.focus) {\n widget.focus();\n } else {\n el.focus();\n }\n }\n lastElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && !e.shiftKey) {\n e.preventDefault();\n focus(firstElement);\n }\n });\n firstElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && e.shiftKey) {\n e.preventDefault();\n focus(lastElement);\n }\n });\n };\n kendo.focusElement = function (element) {\n var scrollTopPositions = [];\n var scrollableParents = element.parentsUntil('body').filter(function (index, element) {\n var computedStyle = kendo.getComputedStyles(element, ['overflow']);\n return computedStyle.overflow !== 'visible';\n }).add(window);\n scrollableParents.each(function (index, parent) {\n scrollTopPositions[index] = $(parent).scrollTop();\n });\n try {\n element[0].setActive();\n } catch (e) {\n element[0].focus();\n }\n scrollableParents.each(function (index, parent) {\n $(parent).scrollTop(scrollTopPositions[index]);\n });\n };\n kendo.matchesMedia = function (mediaQuery) {\n var media = kendo._bootstrapToMedia(mediaQuery) || mediaQuery;\n return support.matchMedia && window.matchMedia(media).matches;\n };\n kendo._bootstrapToMedia = function (bootstrapMedia) {\n return {\n 'xs': '(max-width: 576px)',\n 'sm': '(min-width: 576px)',\n 'md': '(min-width: 768px)',\n 'lg': '(min-width: 992px)',\n 'xl': '(min-width: 1200px)'\n }[bootstrapMedia];\n };\n (function () {\n function postToProxy(dataURI, fileName, proxyURL, proxyTarget) {\n var form = $('
').attr({\n action: proxyURL,\n method: 'POST',\n target: proxyTarget\n });\n var data = kendo.antiForgeryTokens();\n data.fileName = fileName;\n var parts = dataURI.split(';base64,');\n data.contentType = parts[0].replace('data:', '');\n data.base64 = parts[1];\n for (var name in data) {\n if (data.hasOwnProperty(name)) {\n $('').attr({\n value: data[name],\n name: name,\n type: 'hidden'\n }).appendTo(form);\n }\n }\n form.appendTo('body').submit().remove();\n }\n var fileSaver = document.createElement('a');\n var downloadAttribute = 'download' in fileSaver && !kendo.support.browser.edge;\n function saveAsBlob(dataURI, fileName) {\n var blob = dataURI;\n if (typeof dataURI == 'string') {\n var parts = dataURI.split(';base64,');\n var contentType = parts[0];\n var base64 = atob(parts[1]);\n var array = new Uint8Array(base64.length);\n for (var idx = 0; idx < base64.length; idx++) {\n array[idx] = base64.charCodeAt(idx);\n }\n blob = new Blob([array.buffer], { type: contentType });\n }\n navigator.msSaveBlob(blob, fileName);\n }\n function saveAsDataURI(dataURI, fileName) {\n if (window.Blob && dataURI instanceof Blob) {\n dataURI = URL.createObjectURL(dataURI);\n }\n fileSaver.download = fileName;\n fileSaver.href = dataURI;\n var e = document.createEvent('MouseEvents');\n e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n fileSaver.dispatchEvent(e);\n setTimeout(function () {\n URL.revokeObjectURL(dataURI);\n });\n }\n kendo.saveAs = function (options) {\n var save = postToProxy;\n if (!options.forceProxy) {\n if (downloadAttribute) {\n save = saveAsDataURI;\n } else if (navigator.msSaveBlob) {\n save = saveAsBlob;\n }\n }\n save(options.dataURI, options.fileName, options.proxyURL, options.proxyTarget);\n };\n }());\n kendo.proxyModelSetters = function proxyModelSetters(data) {\n var observable = {};\n Object.keys(data || {}).forEach(function (property) {\n Object.defineProperty(observable, property, {\n get: function () {\n return data[property];\n },\n set: function (value) {\n data[property] = value;\n data.dirty = true;\n }\n });\n });\n return observable;\n };\n }(jQuery, window));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.fx', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'fx',\n name: 'Effects',\n category: 'framework',\n description: 'Required for animation effects in all Kendo UI widgets.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, fx = kendo.effects, each = $.each, extend = $.extend, proxy = $.proxy, support = kendo.support, browser = support.browser, transforms = support.transforms, transitions = support.transitions, scaleProperties = {\n scale: 0,\n scalex: 0,\n scaley: 0,\n scale3d: 0\n }, translateProperties = {\n translate: 0,\n translatex: 0,\n translatey: 0,\n translate3d: 0\n }, hasZoom = typeof document.documentElement.style.zoom !== 'undefined' && !transforms, matrix3dRegExp = /matrix3?d?\\s*\\(.*,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?/i, cssParamsRegExp = /^(-?[\\d\\.\\-]+)?[\\w\\s]*,?\\s*(-?[\\d\\.\\-]+)?[\\w\\s]*/i, translateXRegExp = /translatex?$/i, oldEffectsRegExp = /(zoom|fade|expand)(\\w+)/, singleEffectRegExp = /(zoom|fade|expand)/, unitRegExp = /[xy]$/i, transformProps = [\n 'perspective',\n 'rotate',\n 'rotatex',\n 'rotatey',\n 'rotatez',\n 'rotate3d',\n 'scale',\n 'scalex',\n 'scaley',\n 'scalez',\n 'scale3d',\n 'skew',\n 'skewx',\n 'skewy',\n 'translate',\n 'translatex',\n 'translatey',\n 'translatez',\n 'translate3d',\n 'matrix',\n 'matrix3d'\n ], transform2d = [\n 'rotate',\n 'scale',\n 'scalex',\n 'scaley',\n 'skew',\n 'skewx',\n 'skewy',\n 'translate',\n 'translatex',\n 'translatey',\n 'matrix'\n ], transform2units = {\n 'rotate': 'deg',\n scale: '',\n skew: 'px',\n translate: 'px'\n }, cssPrefix = transforms.css, round = Math.round, BLANK = '', PX = 'px', NONE = 'none', AUTO = 'auto', WIDTH = 'width', HEIGHT = 'height', HIDDEN = 'hidden', ORIGIN = 'origin', ABORT_ID = 'abortId', OVERFLOW = 'overflow', TRANSLATE = 'translate', POSITION = 'position', COMPLETE_CALLBACK = 'completeCallback', TRANSITION = cssPrefix + 'transition', TRANSFORM = cssPrefix + 'transform', BACKFACE = cssPrefix + 'backface-visibility', PERSPECTIVE = cssPrefix + 'perspective', DEFAULT_PERSPECTIVE = '1500px', TRANSFORM_PERSPECTIVE = 'perspective(' + DEFAULT_PERSPECTIVE + ')', directions = {\n left: {\n reverse: 'right',\n property: 'left',\n transition: 'translatex',\n vertical: false,\n modifier: -1\n },\n right: {\n reverse: 'left',\n property: 'left',\n transition: 'translatex',\n vertical: false,\n modifier: 1\n },\n down: {\n reverse: 'up',\n property: 'top',\n transition: 'translatey',\n vertical: true,\n modifier: 1\n },\n up: {\n reverse: 'down',\n property: 'top',\n transition: 'translatey',\n vertical: true,\n modifier: -1\n },\n top: { reverse: 'bottom' },\n bottom: { reverse: 'top' },\n 'in': {\n reverse: 'out',\n modifier: -1\n },\n out: {\n reverse: 'in',\n modifier: 1\n },\n vertical: { reverse: 'vertical' },\n horizontal: { reverse: 'horizontal' }\n };\n kendo.directions = directions;\n extend($.fn, {\n kendoStop: function (clearQueue, gotoEnd) {\n if (transitions) {\n return fx.stopQueue(this, clearQueue || false, gotoEnd || false);\n } else {\n return this.stop(clearQueue, gotoEnd);\n }\n }\n });\n if (transforms && !transitions) {\n each(transform2d, function (idx, value) {\n $.fn[value] = function (val) {\n if (typeof val == 'undefined') {\n return animationProperty(this, value);\n } else {\n var that = $(this)[0], transformValue = value + '(' + val + transform2units[value.replace(unitRegExp, '')] + ')';\n if (that.style.cssText.indexOf(TRANSFORM) == -1) {\n $(this).css(TRANSFORM, transformValue);\n } else {\n that.style.cssText = that.style.cssText.replace(new RegExp(value + '\\\\(.*?\\\\)', 'i'), transformValue);\n }\n }\n return this;\n };\n $.fx.step[value] = function (fx) {\n $(fx.elem)[value](fx.now);\n };\n });\n var curProxy = $.fx.prototype.cur;\n $.fx.prototype.cur = function () {\n if (transform2d.indexOf(this.prop) != -1) {\n return parseFloat($(this.elem)[this.prop]());\n }\n return curProxy.apply(this, arguments);\n };\n }\n kendo.toggleClass = function (element, classes, options, add) {\n if (classes) {\n classes = classes.split(' ');\n if (transitions) {\n options = extend({\n exclusive: 'all',\n duration: 400,\n ease: 'ease-out'\n }, options);\n element.css(TRANSITION, options.exclusive + ' ' + options.duration + 'ms ' + options.ease);\n setTimeout(function () {\n element.css(TRANSITION, '').css(HEIGHT);\n }, options.duration);\n }\n each(classes, function (idx, value) {\n element.toggleClass(value, add);\n });\n }\n return element;\n };\n kendo.parseEffects = function (input, mirror) {\n var effects = {};\n if (typeof input === 'string') {\n each(input.split(' '), function (idx, value) {\n var redirectedEffect = !singleEffectRegExp.test(value), resolved = value.replace(oldEffectsRegExp, function (match, $1, $2) {\n return $1 + ':' + $2.toLowerCase();\n }), effect = resolved.split(':'), direction = effect[1], effectBody = {};\n if (effect.length > 1) {\n effectBody.direction = mirror && redirectedEffect ? directions[direction].reverse : direction;\n }\n effects[effect[0]] = effectBody;\n });\n } else {\n each(input, function (idx) {\n var direction = this.direction;\n if (direction && mirror && !singleEffectRegExp.test(idx)) {\n this.direction = directions[direction].reverse;\n }\n effects[idx] = this;\n });\n }\n return effects;\n };\n function parseInteger(value) {\n return parseInt(value, 10);\n }\n function parseCSS(element, property) {\n return parseInteger(element.css(property));\n }\n function keys(obj) {\n var acc = [];\n for (var propertyName in obj) {\n acc.push(propertyName);\n }\n return acc;\n }\n function strip3DTransforms(properties) {\n for (var key in properties) {\n if (transformProps.indexOf(key) != -1 && transform2d.indexOf(key) == -1) {\n delete properties[key];\n }\n }\n return properties;\n }\n function normalizeCSS(element, properties) {\n var transformation = [], cssValues = {}, lowerKey, key, value, isTransformed;\n for (key in properties) {\n lowerKey = key.toLowerCase();\n isTransformed = transforms && transformProps.indexOf(lowerKey) != -1;\n if (!support.hasHW3D && isTransformed && transform2d.indexOf(lowerKey) == -1) {\n delete properties[key];\n } else {\n value = properties[key];\n if (isTransformed) {\n transformation.push(key + '(' + value + ')');\n } else {\n cssValues[key] = value;\n }\n }\n }\n if (transformation.length) {\n cssValues[TRANSFORM] = transformation.join(' ');\n }\n return cssValues;\n }\n if (transitions) {\n extend(fx, {\n transition: function (element, properties, options) {\n var css, delay = 0, oldKeys = element.data('keys') || [], timeoutID;\n options = extend({\n duration: 200,\n ease: 'ease-out',\n complete: null,\n exclusive: 'all'\n }, options);\n var stopTransitionCalled = false;\n var stopTransition = function () {\n if (!stopTransitionCalled) {\n stopTransitionCalled = true;\n if (timeoutID) {\n clearTimeout(timeoutID);\n timeoutID = null;\n }\n element.removeData(ABORT_ID).dequeue().css(TRANSITION, '').css(TRANSITION);\n options.complete.call(element);\n }\n };\n options.duration = $.fx ? $.fx.speeds[options.duration] || options.duration : options.duration;\n css = normalizeCSS(element, properties);\n $.merge(oldKeys, keys(css));\n element.data('keys', $.unique(oldKeys)).height();\n element.css(TRANSITION, options.exclusive + ' ' + options.duration + 'ms ' + options.ease).css(TRANSITION);\n element.css(css).css(TRANSFORM);\n if (transitions.event) {\n element.one(transitions.event, stopTransition);\n if (options.duration !== 0) {\n delay = 500;\n }\n }\n timeoutID = setTimeout(stopTransition, options.duration + delay);\n element.data(ABORT_ID, timeoutID);\n element.data(COMPLETE_CALLBACK, stopTransition);\n },\n stopQueue: function (element, clearQueue, gotoEnd) {\n var cssValues, taskKeys = element.data('keys'), retainPosition = !gotoEnd && taskKeys, completeCallback = element.data(COMPLETE_CALLBACK);\n if (retainPosition) {\n cssValues = kendo.getComputedStyles(element[0], taskKeys);\n }\n if (completeCallback) {\n completeCallback();\n }\n if (retainPosition) {\n element.css(cssValues);\n }\n return element.removeData('keys').stop(clearQueue);\n }\n });\n }\n function animationProperty(element, property) {\n if (transforms) {\n var transform = element.css(TRANSFORM);\n if (transform == NONE) {\n return property == 'scale' ? 1 : 0;\n }\n var match = transform.match(new RegExp(property + '\\\\s*\\\\(([\\\\d\\\\w\\\\.]+)')), computed = 0;\n if (match) {\n computed = parseInteger(match[1]);\n } else {\n match = transform.match(matrix3dRegExp) || [\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n property = property.toLowerCase();\n if (translateXRegExp.test(property)) {\n computed = parseFloat(match[3] / match[2]);\n } else if (property == 'translatey') {\n computed = parseFloat(match[4] / match[2]);\n } else if (property == 'scale') {\n computed = parseFloat(match[2]);\n } else if (property == 'rotate') {\n computed = parseFloat(Math.atan2(match[2], match[1]));\n }\n }\n return computed;\n } else {\n return parseFloat(element.css(property));\n }\n }\n var EffectSet = kendo.Class.extend({\n init: function (element, options) {\n var that = this;\n that.element = element;\n that.effects = [];\n that.options = options;\n that.restore = [];\n },\n run: function (effects) {\n var that = this, effect, idx, jdx, length = effects.length, element = that.element, options = that.options, deferred = $.Deferred(), start = {}, end = {}, target, children, childrenLength;\n that.effects = effects;\n deferred.done($.proxy(that, 'complete'));\n element.data('animating', true);\n for (idx = 0; idx < length; idx++) {\n effect = effects[idx];\n effect.setReverse(options.reverse);\n effect.setOptions(options);\n that.addRestoreProperties(effect.restore);\n effect.prepare(start, end);\n children = effect.children();\n for (jdx = 0, childrenLength = children.length; jdx < childrenLength; jdx++) {\n children[jdx].duration(options.duration).run();\n }\n }\n for (var effectName in options.effects) {\n extend(end, options.effects[effectName].properties);\n }\n if (!element.is(':visible')) {\n extend(start, { display: element.data('olddisplay') || 'block' });\n }\n if (transforms && !options.reset) {\n target = element.data('targetTransform');\n if (target) {\n start = extend(target, start);\n }\n }\n start = normalizeCSS(element, start);\n if (transforms && !transitions) {\n start = strip3DTransforms(start);\n }\n element.css(start).css(TRANSFORM);\n for (idx = 0; idx < length; idx++) {\n effects[idx].setup();\n }\n if (options.init) {\n options.init();\n }\n element.data('targetTransform', end);\n fx.animate(element, end, extend({}, options, { complete: deferred.resolve }));\n return deferred.promise();\n },\n stop: function () {\n $(this.element).kendoStop(true, true);\n },\n addRestoreProperties: function (restore) {\n var element = this.element, value, i = 0, length = restore.length;\n for (; i < length; i++) {\n value = restore[i];\n this.restore.push(value);\n if (!element.data(value)) {\n element.data(value, element.css(value));\n }\n }\n },\n restoreCallback: function () {\n var element = this.element;\n for (var i = 0, length = this.restore.length; i < length; i++) {\n var value = this.restore[i];\n element.css(value, element.data(value));\n }\n },\n complete: function () {\n var that = this, idx = 0, element = that.element, options = that.options, effects = that.effects, length = effects.length;\n element.removeData('animating').dequeue();\n if (options.hide) {\n element.data('olddisplay', element.css('display')).hide();\n }\n this.restoreCallback();\n if (hasZoom && !transforms) {\n setTimeout($.proxy(this, 'restoreCallback'), 0);\n }\n for (; idx < length; idx++) {\n effects[idx].teardown();\n }\n if (options.completeCallback) {\n options.completeCallback(element);\n }\n }\n });\n fx.promise = function (element, options) {\n var effects = [], effectClass, effectSet = new EffectSet(element, options), parsedEffects = kendo.parseEffects(options.effects), effect;\n options.effects = parsedEffects;\n for (var effectName in parsedEffects) {\n effectClass = fx[capitalize(effectName)];\n if (effectClass) {\n effect = new effectClass(element, parsedEffects[effectName].direction);\n effects.push(effect);\n }\n }\n if (effects[0]) {\n effectSet.run(effects);\n } else {\n if (!element.is(':visible')) {\n element.css({ display: element.data('olddisplay') || 'block' }).css('display');\n }\n if (options.init) {\n options.init();\n }\n element.dequeue();\n effectSet.complete();\n }\n };\n extend(fx, {\n animate: function (elements, properties, options) {\n var useTransition = options.transition !== false;\n delete options.transition;\n if (transitions && 'transition' in fx && useTransition) {\n fx.transition(elements, properties, options);\n } else {\n if (transforms) {\n elements.animate(strip3DTransforms(properties), {\n queue: false,\n show: false,\n hide: false,\n duration: options.duration,\n complete: options.complete\n });\n } else {\n elements.each(function () {\n var element = $(this), multiple = {};\n each(transformProps, function (idx, value) {\n var params, currentValue = properties ? properties[value] + ' ' : null;\n if (currentValue) {\n var single = properties;\n if (value in scaleProperties && properties[value] !== undefined) {\n params = currentValue.match(cssParamsRegExp);\n if (transforms) {\n extend(single, { scale: +params[0] });\n }\n } else {\n if (value in translateProperties && properties[value] !== undefined) {\n var position = element.css(POSITION), isFixed = position == 'absolute' || position == 'fixed';\n if (!element.data(TRANSLATE)) {\n if (isFixed) {\n element.data(TRANSLATE, {\n top: parseCSS(element, 'top') || 0,\n left: parseCSS(element, 'left') || 0,\n bottom: parseCSS(element, 'bottom'),\n right: parseCSS(element, 'right')\n });\n } else {\n element.data(TRANSLATE, {\n top: parseCSS(element, 'marginTop') || 0,\n left: parseCSS(element, 'marginLeft') || 0\n });\n }\n }\n var originalPosition = element.data(TRANSLATE);\n params = currentValue.match(cssParamsRegExp);\n if (params) {\n var dX = value == TRANSLATE + 'y' ? +null : +params[1], dY = value == TRANSLATE + 'y' ? +params[1] : +params[2];\n if (isFixed) {\n if (!isNaN(originalPosition.right)) {\n if (!isNaN(dX)) {\n extend(single, { right: originalPosition.right - dX });\n }\n } else {\n if (!isNaN(dX)) {\n extend(single, { left: originalPosition.left + dX });\n }\n }\n if (!isNaN(originalPosition.bottom)) {\n if (!isNaN(dY)) {\n extend(single, { bottom: originalPosition.bottom - dY });\n }\n } else {\n if (!isNaN(dY)) {\n extend(single, { top: originalPosition.top + dY });\n }\n }\n } else {\n if (!isNaN(dX)) {\n extend(single, { marginLeft: originalPosition.left + dX });\n }\n if (!isNaN(dY)) {\n extend(single, { marginTop: originalPosition.top + dY });\n }\n }\n }\n }\n }\n if (!transforms && value != 'scale' && value in single) {\n delete single[value];\n }\n if (single) {\n extend(multiple, single);\n }\n }\n });\n if (browser.msie) {\n delete multiple.scale;\n }\n element.animate(multiple, {\n queue: false,\n show: false,\n hide: false,\n duration: options.duration,\n complete: options.complete\n });\n });\n }\n }\n }\n });\n fx.animatedPromise = fx.promise;\n var Effect = kendo.Class.extend({\n init: function (element, direction) {\n var that = this;\n that.element = element;\n that._direction = direction;\n that.options = {};\n that._additionalEffects = [];\n if (!that.restore) {\n that.restore = [];\n }\n },\n reverse: function () {\n this._reverse = true;\n return this.run();\n },\n play: function () {\n this._reverse = false;\n return this.run();\n },\n add: function (additional) {\n this._additionalEffects.push(additional);\n return this;\n },\n direction: function (value) {\n this._direction = value;\n return this;\n },\n duration: function (duration) {\n this._duration = duration;\n return this;\n },\n compositeRun: function () {\n var that = this, effectSet = new EffectSet(that.element, {\n reverse: that._reverse,\n duration: that._duration\n }), effects = that._additionalEffects.concat([that]);\n return effectSet.run(effects);\n },\n run: function () {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n var that = this, element = that.element, idx = 0, restore = that.restore, length = restore.length, value, deferred = $.Deferred(), start = {}, end = {}, target, children = that.children(), childrenLength = children.length;\n deferred.done($.proxy(that, '_complete'));\n element.data('animating', true);\n for (idx = 0; idx < length; idx++) {\n value = restore[idx];\n if (!element.data(value)) {\n element.data(value, element.css(value));\n }\n }\n for (idx = 0; idx < childrenLength; idx++) {\n children[idx].duration(that._duration).run();\n }\n that.prepare(start, end);\n if (!element.is(':visible')) {\n extend(start, { display: element.data('olddisplay') || 'block' });\n }\n if (transforms) {\n target = element.data('targetTransform');\n if (target) {\n start = extend(target, start);\n }\n }\n start = normalizeCSS(element, start);\n if (transforms && !transitions) {\n start = strip3DTransforms(start);\n }\n element.css(start).css(TRANSFORM);\n that.setup();\n element.data('targetTransform', end);\n fx.animate(element, end, {\n duration: that._duration,\n complete: deferred.resolve\n });\n return deferred.promise();\n },\n stop: function () {\n var idx = 0, children = this.children(), childrenLength = children.length;\n for (idx = 0; idx < childrenLength; idx++) {\n children[idx].stop();\n }\n $(this.element).kendoStop(true, true);\n return this;\n },\n restoreCallback: function () {\n var element = this.element;\n for (var i = 0, length = this.restore.length; i < length; i++) {\n var value = this.restore[i];\n element.css(value, element.data(value));\n }\n },\n _complete: function () {\n var that = this, element = that.element;\n element.removeData('animating').dequeue();\n that.restoreCallback();\n if (that.shouldHide()) {\n element.data('olddisplay', element.css('display')).hide();\n }\n if (hasZoom && !transforms) {\n setTimeout($.proxy(that, 'restoreCallback'), 0);\n }\n that.teardown();\n },\n setOptions: function (options) {\n extend(true, this.options, options);\n },\n children: function () {\n return [];\n },\n shouldHide: $.noop,\n setup: $.noop,\n prepare: $.noop,\n teardown: $.noop,\n directions: [],\n setReverse: function (reverse) {\n this._reverse = reverse;\n return this;\n }\n });\n function capitalize(word) {\n return word.charAt(0).toUpperCase() + word.substring(1);\n }\n function createEffect(name, definition) {\n var effectClass = Effect.extend(definition), directions = effectClass.prototype.directions;\n fx[capitalize(name)] = effectClass;\n fx.Element.prototype[name] = function (direction, opt1, opt2, opt3) {\n return new effectClass(this.element, direction, opt1, opt2, opt3);\n };\n each(directions, function (idx, theDirection) {\n fx.Element.prototype[name + capitalize(theDirection)] = function (opt1, opt2, opt3) {\n return new effectClass(this.element, theDirection, opt1, opt2, opt3);\n };\n });\n }\n var FOUR_DIRECTIONS = [\n 'left',\n 'right',\n 'up',\n 'down'\n ], IN_OUT = [\n 'in',\n 'out'\n ];\n createEffect('slideIn', {\n directions: FOUR_DIRECTIONS,\n divisor: function (value) {\n this.options.divisor = value;\n return this;\n },\n prepare: function (start, end) {\n var that = this, tmp, element = that.element, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, direction = directions[that._direction], offset = -direction.modifier * (direction.vertical ? outerHeight(element) : outerWidth(element)), startValue = offset / (that.options && that.options.divisor || 1) + PX, endValue = '0px';\n if (that._reverse) {\n tmp = start;\n start = end;\n end = tmp;\n }\n if (transforms) {\n start[direction.transition] = startValue;\n end[direction.transition] = endValue;\n } else {\n start[direction.property] = startValue;\n end[direction.property] = endValue;\n }\n }\n });\n createEffect('tile', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, previous) {\n Effect.prototype.init.call(this, element, direction);\n this.options = { previous: previous };\n },\n previousDivisor: function (value) {\n this.options.previousDivisor = value;\n return this;\n },\n children: function () {\n var that = this, reverse = that._reverse, previous = that.options.previous, divisor = that.options.previousDivisor || 1, dir = that._direction;\n var children = [kendo.fx(that.element).slideIn(dir).setReverse(reverse)];\n if (previous) {\n children.push(kendo.fx(previous).slideIn(directions[dir].reverse).divisor(divisor).setReverse(!reverse));\n }\n return children;\n }\n });\n function createToggleEffect(name, property, defaultStart, defaultEnd) {\n createEffect(name, {\n directions: IN_OUT,\n startValue: function (value) {\n this._startValue = value;\n return this;\n },\n endValue: function (value) {\n this._endValue = value;\n return this;\n },\n shouldHide: function () {\n return this._shouldHide;\n },\n prepare: function (start, end) {\n var that = this, startValue, endValue, out = this._direction === 'out', startDataValue = that.element.data(property), startDataValueIsSet = !(isNaN(startDataValue) || startDataValue == defaultStart);\n if (startDataValueIsSet) {\n startValue = startDataValue;\n } else if (typeof this._startValue !== 'undefined') {\n startValue = this._startValue;\n } else {\n startValue = out ? defaultStart : defaultEnd;\n }\n if (typeof this._endValue !== 'undefined') {\n endValue = this._endValue;\n } else {\n endValue = out ? defaultEnd : defaultStart;\n }\n if (this._reverse) {\n start[property] = endValue;\n end[property] = startValue;\n } else {\n start[property] = startValue;\n end[property] = endValue;\n }\n that._shouldHide = end[property] === defaultEnd;\n }\n });\n }\n createToggleEffect('fade', 'opacity', 1, 0);\n createToggleEffect('zoom', 'scale', 1, 0.01);\n createEffect('slideMargin', {\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, origin = element.data(ORIGIN), offset = options.offset, margin, reverse = that._reverse;\n if (!reverse && origin === null) {\n element.data(ORIGIN, parseFloat(element.css('margin-' + options.axis)));\n }\n margin = element.data(ORIGIN) || 0;\n end['margin-' + options.axis] = !reverse ? margin + offset : margin;\n }\n });\n createEffect('slideTo', {\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, offset = options.offset.split(','), reverse = that._reverse;\n if (transforms) {\n end.translatex = !reverse ? offset[0] : 0;\n end.translatey = !reverse ? offset[1] : 0;\n } else {\n end.left = !reverse ? offset[0] : 0;\n end.top = !reverse ? offset[1] : 0;\n }\n element.css('left');\n }\n });\n createEffect('expand', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n restore: [OVERFLOW],\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, reverse = that._reverse, property = that._direction === 'vertical' ? HEIGHT : WIDTH, setLength = element[0].style[property], oldLength = element.data(property), length = parseFloat(oldLength || setLength), realLength = round(element.css(property, AUTO)[property]());\n start.overflow = HIDDEN;\n length = options && options.reset ? realLength || length : length || realLength;\n end[property] = (reverse ? 0 : length) + PX;\n start[property] = (reverse ? length : 0) + PX;\n if (oldLength === undefined) {\n element.data(property, setLength);\n }\n },\n shouldHide: function () {\n return this._reverse;\n },\n teardown: function () {\n var that = this, element = that.element, property = that._direction === 'vertical' ? HEIGHT : WIDTH, length = element.data(property);\n if (length == AUTO || length === BLANK) {\n setTimeout(function () {\n element.css(property, AUTO).css(property);\n }, 0);\n }\n }\n });\n var TRANSFER_START_STATE = {\n position: 'absolute',\n marginLeft: 0,\n marginTop: 0,\n scale: 1\n };\n createEffect('transfer', {\n init: function (element, target) {\n this.element = element;\n this.options = { target: target };\n this.restore = [];\n },\n setup: function () {\n this.element.appendTo(document.body);\n },\n prepare: function (start, end) {\n var that = this, element = that.element, outerBox = fx.box(element), innerBox = fx.box(that.options.target), currentScale = animationProperty(element, 'scale'), scale = fx.fillScale(innerBox, outerBox), transformOrigin = fx.transformOrigin(innerBox, outerBox);\n extend(start, TRANSFER_START_STATE);\n end.scale = 1;\n element.css(TRANSFORM, 'scale(1)').css(TRANSFORM);\n element.css(TRANSFORM, 'scale(' + currentScale + ')');\n start.top = outerBox.top;\n start.left = outerBox.left;\n start.transformOrigin = transformOrigin.x + PX + ' ' + transformOrigin.y + PX;\n if (that._reverse) {\n start.scale = scale;\n } else {\n end.scale = scale;\n }\n }\n });\n var CLIPS = {\n top: 'rect(auto auto $size auto)',\n bottom: 'rect($size auto auto auto)',\n left: 'rect(auto $size auto auto)',\n right: 'rect(auto auto auto $size)'\n };\n var ROTATIONS = {\n top: {\n start: 'rotatex(0deg)',\n end: 'rotatex(180deg)'\n },\n bottom: {\n start: 'rotatex(-180deg)',\n end: 'rotatex(0deg)'\n },\n left: {\n start: 'rotatey(0deg)',\n end: 'rotatey(-180deg)'\n },\n right: {\n start: 'rotatey(180deg)',\n end: 'rotatey(0deg)'\n }\n };\n function clipInHalf(container, direction) {\n var vertical = kendo.directions[direction].vertical, size = container[vertical ? HEIGHT : WIDTH]() / 2 + 'px';\n return CLIPS[direction].replace('$size', size);\n }\n createEffect('turningPage', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n prepare: function (start, end) {\n var that = this, reverse = that._reverse, direction = reverse ? directions[that._direction].reverse : that._direction, rotation = ROTATIONS[direction];\n start.zIndex = 1;\n if (that._clipInHalf) {\n start.clip = clipInHalf(that._container, kendo.directions[direction].reverse);\n }\n start[BACKFACE] = HIDDEN;\n end[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.start : rotation.end);\n start[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.end : rotation.start);\n },\n setup: function () {\n this._container.append(this.element);\n },\n face: function (value) {\n this._face = value;\n return this;\n },\n shouldHide: function () {\n var that = this, reverse = that._reverse, face = that._face;\n return reverse && !face || !reverse && face;\n },\n clipInHalf: function (value) {\n this._clipInHalf = value;\n return this;\n },\n temporary: function () {\n this.element.addClass('temp-page');\n return this;\n }\n });\n createEffect('staticPage', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n restore: ['clip'],\n prepare: function (start, end) {\n var that = this, direction = that._reverse ? directions[that._direction].reverse : that._direction;\n start.clip = clipInHalf(that._container, direction);\n start.opacity = 0.999;\n end.opacity = 1;\n },\n shouldHide: function () {\n var that = this, reverse = that._reverse, face = that._face;\n return reverse && !face || !reverse && face;\n },\n face: function (value) {\n this._face = value;\n return this;\n }\n });\n createEffect('pageturn', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n init: function (element, direction, face, back) {\n Effect.prototype.init.call(this, element, direction);\n this.options = {};\n this.options.face = face;\n this.options.back = back;\n },\n children: function () {\n var that = this, options = that.options, direction = that._direction === 'horizontal' ? 'left' : 'top', reverseDirection = kendo.directions[direction].reverse, reverse = that._reverse, temp, faceClone = options.face.clone(true).removeAttr('id'), backClone = options.back.clone(true).removeAttr('id'), element = that.element;\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\n }\n return [\n kendo.fx(options.face).staticPage(direction, element).face(true).setReverse(reverse),\n kendo.fx(options.back).staticPage(reverseDirection, element).setReverse(reverse),\n kendo.fx(faceClone).turningPage(direction, element).face(true).clipInHalf(true).temporary().setReverse(reverse),\n kendo.fx(backClone).turningPage(reverseDirection, element).clipInHalf(true).temporary().setReverse(reverse)\n ];\n },\n prepare: function (start, end) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = 'preserve-3d';\n start.opacity = 0.999;\n end.opacity = 1;\n },\n teardown: function () {\n this.element.find('.temp-page').remove();\n }\n });\n createEffect('flip', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n init: function (element, direction, face, back) {\n Effect.prototype.init.call(this, element, direction);\n this.options = {};\n this.options.face = face;\n this.options.back = back;\n },\n children: function () {\n var that = this, options = that.options, direction = that._direction === 'horizontal' ? 'left' : 'top', reverseDirection = kendo.directions[direction].reverse, reverse = that._reverse, temp, element = that.element;\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\n }\n return [\n kendo.fx(options.face).turningPage(direction, element).face(true).setReverse(reverse),\n kendo.fx(options.back).turningPage(reverseDirection, element).setReverse(reverse)\n ];\n },\n prepare: function (start) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = 'preserve-3d';\n }\n });\n var RESTORE_OVERFLOW = !support.mobileOS.android;\n var IGNORE_TRANSITION_EVENT_SELECTOR = '.km-touch-scrollbar, .km-actionsheet-wrapper';\n createEffect('replace', {\n _before: $.noop,\n _after: $.noop,\n init: function (element, previous, transitionClass) {\n Effect.prototype.init.call(this, element);\n this._previous = $(previous);\n this._transitionClass = transitionClass;\n },\n duration: function () {\n throw new Error('The replace effect does not support duration setting; the effect duration may be customized through the transition class rule');\n },\n beforeTransition: function (callback) {\n this._before = callback;\n return this;\n },\n afterTransition: function (callback) {\n this._after = callback;\n return this;\n },\n _both: function () {\n return $().add(this._element).add(this._previous);\n },\n _containerClass: function () {\n var direction = this._direction, containerClass = 'k-fx k-fx-start k-fx-' + this._transitionClass;\n if (direction) {\n containerClass += ' k-fx-' + direction;\n }\n if (this._reverse) {\n containerClass += ' k-fx-reverse';\n }\n return containerClass;\n },\n complete: function (e) {\n if (!this.deferred || e && $(e.target).is(IGNORE_TRANSITION_EVENT_SELECTOR)) {\n return;\n }\n var container = this.container;\n container.removeClass('k-fx-end').removeClass(this._containerClass()).off(transitions.event, this.completeProxy);\n this._previous.hide().removeClass('k-fx-current');\n this.element.removeClass('k-fx-next');\n if (RESTORE_OVERFLOW) {\n container.css(OVERFLOW, '');\n }\n if (!this.isAbsolute) {\n this._both().css(POSITION, '');\n }\n this.deferred.resolve();\n delete this.deferred;\n },\n run: function () {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n var that = this, element = that.element, previous = that._previous, container = element.parents().filter(previous.parents()).first(), both = that._both(), deferred = $.Deferred(), originalPosition = element.css(POSITION), originalOverflow;\n if (!container.length) {\n container = element.parent();\n }\n this.container = container;\n this.deferred = deferred;\n this.isAbsolute = originalPosition == 'absolute';\n if (!this.isAbsolute) {\n both.css(POSITION, 'absolute');\n }\n if (RESTORE_OVERFLOW) {\n originalOverflow = container.css(OVERFLOW);\n container.css(OVERFLOW, 'hidden');\n }\n if (!transitions) {\n this.complete();\n } else {\n element.addClass('k-fx-hidden');\n container.addClass(this._containerClass());\n this.completeProxy = $.proxy(this, 'complete');\n container.on(transitions.event, this.completeProxy);\n kendo.animationFrame(function () {\n element.removeClass('k-fx-hidden').addClass('k-fx-next');\n previous.css('display', '').addClass('k-fx-current');\n that._before(previous, element);\n kendo.animationFrame(function () {\n container.removeClass('k-fx-start').addClass('k-fx-end');\n that._after(previous, element);\n });\n });\n }\n return deferred.promise();\n },\n stop: function () {\n this.complete();\n }\n });\n var Animation = kendo.Class.extend({\n init: function () {\n var that = this;\n that._tickProxy = proxy(that._tick, that);\n that._started = false;\n },\n tick: $.noop,\n done: $.noop,\n onEnd: $.noop,\n onCancel: $.noop,\n start: function () {\n if (!this.enabled()) {\n return;\n }\n if (!this.done()) {\n this._started = true;\n kendo.animationFrame(this._tickProxy);\n } else {\n this.onEnd();\n }\n },\n enabled: function () {\n return true;\n },\n cancel: function () {\n this._started = false;\n this.onCancel();\n },\n _tick: function () {\n var that = this;\n if (!that._started) {\n return;\n }\n that.tick();\n if (!that.done()) {\n kendo.animationFrame(that._tickProxy);\n } else {\n that._started = false;\n that.onEnd();\n }\n }\n });\n var Transition = Animation.extend({\n init: function (options) {\n var that = this;\n extend(that, options);\n Animation.fn.init.call(that);\n },\n done: function () {\n return this.timePassed() >= this.duration;\n },\n timePassed: function () {\n return Math.min(this.duration, new Date() - this.startDate);\n },\n moveTo: function (options) {\n var that = this, movable = that.movable;\n that.initial = movable[that.axis];\n that.delta = options.location - that.initial;\n that.duration = typeof options.duration == 'number' ? options.duration : 300;\n that.tick = that._easeProxy(options.ease);\n that.startDate = new Date();\n that.start();\n },\n _easeProxy: function (ease) {\n var that = this;\n return function () {\n that.movable.moveAxis(that.axis, ease(that.timePassed(), that.initial, that.delta, that.duration));\n };\n }\n });\n extend(Transition, {\n easeOutExpo: function (t, b, c, d) {\n return t == d ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n },\n easeOutBack: function (t, b, c, d, s) {\n s = 1.70158;\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n }\n });\n fx.Animation = Animation;\n fx.Transition = Transition;\n fx.createEffect = createEffect;\n fx.box = function (element) {\n element = $(element);\n var result = element.offset();\n result.width = kendo._outerWidth(element);\n result.height = kendo._outerHeight(element);\n return result;\n };\n fx.transformOrigin = function (inner, outer) {\n var x = (inner.left - outer.left) * outer.width / (outer.width - inner.width), y = (inner.top - outer.top) * outer.height / (outer.height - inner.height);\n return {\n x: isNaN(x) ? 0 : x,\n y: isNaN(y) ? 0 : y\n };\n };\n fx.fillScale = function (inner, outer) {\n return Math.min(inner.width / outer.width, inner.height / outer.height);\n };\n fx.fitScale = function (inner, outer) {\n return Math.max(inner.width / outer.width, inner.height / outer.height);\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.router', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'router',\n name: 'Router',\n category: 'framework',\n description: 'The Router class is responsible for tracking the application state and navigating between the application states.',\n depends: ['core'],\n hidden: false\n };\n (function ($, undefined) {\n var kendo = window.kendo, CHANGE = 'change', BACK = 'back', SAME = 'same', support = kendo.support, location = window.location, history = window.history, CHECK_URL_INTERVAL = 50, BROKEN_BACK_NAV = kendo.support.browser.msie, hashStrip = /^#*/, document = window.document;\n function absoluteURL(path, pathPrefix) {\n if (!pathPrefix) {\n return path;\n }\n if (path + '/' === pathPrefix) {\n path = pathPrefix;\n }\n var regEx = new RegExp('^' + pathPrefix, 'i');\n if (!regEx.test(path)) {\n path = pathPrefix + '/' + path;\n }\n return location.protocol + '//' + (location.host + '/' + path).replace(/\\/\\/+/g, '/');\n }\n function hashDelimiter(bang) {\n return bang ? '#!' : '#';\n }\n function locationHash(hashDelimiter) {\n var href = location.href;\n if (hashDelimiter === '#!' && href.indexOf('#') > -1 && href.indexOf('#!') < 0) {\n return null;\n }\n return href.split(hashDelimiter)[1] || '';\n }\n function stripRoot(root, url) {\n if (url.indexOf(root) === 0) {\n return url.substr(root.length).replace(/\\/\\//g, '/');\n } else {\n return url;\n }\n }\n var HistoryAdapter = kendo.Class.extend({\n back: function () {\n if (BROKEN_BACK_NAV) {\n setTimeout(function () {\n history.back();\n });\n } else {\n history.back();\n }\n },\n forward: function () {\n if (BROKEN_BACK_NAV) {\n setTimeout(function () {\n history.forward();\n });\n } else {\n history.forward();\n }\n },\n length: function () {\n return history.length;\n },\n replaceLocation: function (url) {\n location.replace(url);\n }\n });\n var PushStateAdapter = HistoryAdapter.extend({\n init: function (root) {\n this.root = root;\n },\n navigate: function (to) {\n history.pushState({}, document.title, absoluteURL(to, this.root));\n },\n replace: function (to) {\n history.replaceState({}, document.title, absoluteURL(to, this.root));\n },\n normalize: function (url) {\n return stripRoot(this.root, url);\n },\n current: function () {\n var current = location.pathname;\n if (location.search) {\n current += location.search;\n }\n return stripRoot(this.root, current);\n },\n change: function (callback) {\n $(window).bind('popstate.kendo', callback);\n },\n stop: function () {\n $(window).unbind('popstate.kendo');\n },\n normalizeCurrent: function (options) {\n var fixedUrl, root = options.root, pathname = location.pathname, hash = locationHash(hashDelimiter(options.hashBang));\n if (root === pathname + '/') {\n fixedUrl = root;\n }\n if (root === pathname && hash) {\n fixedUrl = absoluteURL(hash.replace(hashStrip, ''), root);\n }\n if (fixedUrl) {\n history.pushState({}, document.title, fixedUrl);\n }\n }\n });\n function fixHash(url) {\n return url.replace(/^(#)?/, '#');\n }\n function fixBang(url) {\n return url.replace(/^(#(!)?)?/, '#!');\n }\n var HashAdapter = HistoryAdapter.extend({\n init: function (bang) {\n this._id = kendo.guid();\n this.prefix = hashDelimiter(bang);\n this.fix = bang ? fixBang : fixHash;\n },\n navigate: function (to) {\n location.hash = this.fix(to);\n },\n replace: function (to) {\n this.replaceLocation(this.fix(to));\n },\n normalize: function (url) {\n if (url.indexOf(this.prefix) < 0) {\n return url;\n } else {\n return url.split(this.prefix)[1];\n }\n },\n change: function (callback) {\n if (support.hashChange) {\n $(window).on('hashchange.' + this._id, callback);\n } else {\n this._interval = setInterval(callback, CHECK_URL_INTERVAL);\n }\n },\n stop: function () {\n $(window).off('hashchange.' + this._id);\n clearInterval(this._interval);\n },\n current: function () {\n return locationHash(this.prefix);\n },\n normalizeCurrent: function (options) {\n var pathname = location.pathname, root = options.root;\n if (options.pushState && root !== pathname) {\n this.replaceLocation(root + this.prefix + stripRoot(root, pathname));\n return true;\n }\n return false;\n }\n });\n var History = kendo.Observable.extend({\n start: function (options) {\n options = options || {};\n this.bind([\n CHANGE,\n BACK,\n SAME\n ], options);\n if (this._started) {\n return;\n }\n this._started = true;\n options.root = options.root || '/';\n var adapter = this.createAdapter(options), current;\n if (adapter.normalizeCurrent(options)) {\n return;\n }\n current = adapter.current();\n $.extend(this, {\n adapter: adapter,\n root: options.root,\n historyLength: adapter.length(),\n current: current,\n locations: [current]\n });\n adapter.change($.proxy(this, '_checkUrl'));\n },\n createAdapter: function (options) {\n return support.pushState && options.pushState ? new PushStateAdapter(options.root) : new HashAdapter(options.hashBang);\n },\n stop: function () {\n if (!this._started) {\n return;\n }\n this.adapter.stop();\n this.unbind(CHANGE);\n this._started = false;\n },\n change: function (callback) {\n this.bind(CHANGE, callback);\n },\n replace: function (to, silent) {\n this._navigate(to, silent, function (adapter) {\n adapter.replace(to);\n this.locations[this.locations.length - 1] = this.current;\n });\n },\n navigate: function (to, silent) {\n if (to === '#:back') {\n this.backCalled = true;\n this.adapter.back();\n return;\n }\n this._navigate(to, silent, function (adapter) {\n adapter.navigate(to);\n this.locations.push(this.current);\n });\n },\n _navigate: function (to, silent, callback) {\n var adapter = this.adapter;\n to = adapter.normalize(to);\n if (this.current === to || this.current === decodeURIComponent(to)) {\n this.trigger(SAME);\n return;\n }\n if (!silent) {\n if (this.trigger(CHANGE, {\n url: to,\n decode: false\n })) {\n return;\n }\n }\n this.current = to;\n callback.call(this, adapter);\n this.historyLength = adapter.length();\n },\n _checkUrl: function () {\n var adapter = this.adapter, current = adapter.current(), newLength = adapter.length(), navigatingInExisting = this.historyLength === newLength, back = current === this.locations[this.locations.length - 2] && navigatingInExisting, backCalled = this.backCalled, prev = this.current;\n if (current === null || this.current === current || this.current === decodeURIComponent(current)) {\n return true;\n }\n this.historyLength = newLength;\n this.backCalled = false;\n this.current = current;\n if (back && this.trigger('back', {\n url: prev,\n to: current\n })) {\n adapter.forward();\n this.current = prev;\n return;\n }\n if (this.trigger(CHANGE, {\n url: current,\n backButtonPressed: !backCalled\n })) {\n if (back) {\n adapter.forward();\n } else {\n adapter.back();\n this.historyLength--;\n }\n this.current = prev;\n return;\n }\n if (back) {\n this.locations.pop();\n } else {\n this.locations.push(current);\n }\n }\n });\n kendo.History = History;\n kendo.History.HistoryAdapter = HistoryAdapter;\n kendo.History.HashAdapter = HashAdapter;\n kendo.History.PushStateAdapter = PushStateAdapter;\n kendo.absoluteURL = absoluteURL;\n kendo.history = new History();\n }(window.kendo.jQuery));\n (function () {\n var kendo = window.kendo, history = kendo.history, Observable = kendo.Observable, INIT = 'init', ROUTE_MISSING = 'routeMissing', CHANGE = 'change', BACK = 'back', SAME = 'same', optionalParam = /\\((.*?)\\)/g, namedParam = /(\\(\\?)?:\\w+/g, splatParam = /\\*\\w+/g, escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n function namedParamReplace(match, optional) {\n return optional ? match : '([^/]+)';\n }\n function routeToRegExp(route, ignoreCase) {\n return new RegExp('^' + route.replace(escapeRegExp, '\\\\$&').replace(optionalParam, '(?:$1)?').replace(namedParam, namedParamReplace).replace(splatParam, '(.*?)') + '$', ignoreCase ? 'i' : '');\n }\n function stripUrl(url) {\n return url.replace(/(\\?.*)|(#.*)/g, '');\n }\n var Route = kendo.Class.extend({\n init: function (route, callback, ignoreCase) {\n if (!(route instanceof RegExp)) {\n route = routeToRegExp(route, ignoreCase);\n }\n this.route = route;\n this._callback = callback;\n },\n callback: function (url, back, decode) {\n var params, idx = 0, length, queryStringParams = kendo.parseQueryStringParams(url);\n queryStringParams._back = back;\n url = stripUrl(url);\n params = this.route.exec(url).slice(1);\n length = params.length;\n if (decode) {\n for (; idx < length; idx++) {\n if (typeof params[idx] !== 'undefined') {\n params[idx] = decodeURIComponent(params[idx]);\n }\n }\n }\n params.push(queryStringParams);\n this._callback.apply(null, params);\n },\n worksWith: function (url, back, decode) {\n if (this.route.test(stripUrl(url))) {\n this.callback(url, back, decode);\n return true;\n } else {\n return false;\n }\n }\n });\n var Router = Observable.extend({\n init: function (options) {\n if (!options) {\n options = {};\n }\n Observable.fn.init.call(this);\n this.routes = [];\n this.pushState = options.pushState;\n this.hashBang = options.hashBang;\n this.root = options.root;\n this.ignoreCase = options.ignoreCase !== false;\n this.bind([\n INIT,\n ROUTE_MISSING,\n CHANGE,\n SAME,\n BACK\n ], options);\n },\n destroy: function () {\n history.unbind(CHANGE, this._urlChangedProxy);\n history.unbind(SAME, this._sameProxy);\n history.unbind(BACK, this._backProxy);\n this.unbind();\n },\n start: function () {\n var that = this, sameProxy = function () {\n that._same();\n }, backProxy = function (e) {\n that._back(e);\n }, urlChangedProxy = function (e) {\n that._urlChanged(e);\n };\n history.start({\n same: sameProxy,\n change: urlChangedProxy,\n back: backProxy,\n pushState: that.pushState,\n hashBang: that.hashBang,\n root: that.root\n });\n var initEventObject = {\n url: history.current || '/',\n preventDefault: $.noop\n };\n if (!that.trigger(INIT, initEventObject)) {\n that._urlChanged(initEventObject);\n }\n this._urlChangedProxy = urlChangedProxy;\n this._backProxy = backProxy;\n },\n route: function (route, callback) {\n this.routes.push(new Route(route, callback, this.ignoreCase));\n },\n navigate: function (url, silent) {\n kendo.history.navigate(url, silent);\n },\n replace: function (url, silent) {\n kendo.history.replace(url, silent);\n },\n _back: function (e) {\n if (this.trigger(BACK, {\n url: e.url,\n to: e.to\n })) {\n e.preventDefault();\n }\n },\n _same: function () {\n this.trigger(SAME);\n },\n _urlChanged: function (e) {\n var url = e.url;\n var decode = !!e.decode;\n var back = e.backButtonPressed;\n if (!url) {\n url = '/';\n }\n if (this.trigger(CHANGE, {\n url: e.url,\n params: kendo.parseQueryStringParams(e.url),\n backButtonPressed: back\n })) {\n e.preventDefault();\n return;\n }\n var idx = 0, routes = this.routes, route, length = routes.length;\n for (; idx < length; idx++) {\n route = routes[idx];\n if (route.worksWith(url, back, decode)) {\n return;\n }\n }\n if (this.trigger(ROUTE_MISSING, {\n url: url,\n params: kendo.parseQueryStringParams(url),\n backButtonPressed: back\n })) {\n e.preventDefault();\n }\n }\n });\n kendo.Router = Router;\n }());\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.odata', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.odata',\n name: 'OData',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, NEWLINE = '\\r\\n', DOUBLELINE = '\\r\\n\\r\\n', isFunction = kendo.isFunction, odataFilters = {\n eq: 'eq',\n neq: 'ne',\n gt: 'gt',\n gte: 'ge',\n lt: 'lt',\n lte: 'le',\n contains: 'substringof',\n doesnotcontain: 'substringof',\n endswith: 'endswith',\n startswith: 'startswith',\n isnull: 'eq',\n isnotnull: 'ne',\n isnullorempty: 'eq',\n isnotnullorempty: 'ne',\n isempty: 'eq',\n isnotempty: 'ne'\n }, odataFiltersVersionFour = extend({}, odataFilters, { contains: 'contains' }), mappers = {\n pageSize: $.noop,\n page: $.noop,\n filter: function (params, filter, useVersionFour) {\n if (filter) {\n filter = toOdataFilter(filter, useVersionFour);\n if (filter) {\n params.$filter = filter;\n }\n }\n },\n sort: function (params, orderby) {\n var expr = $.map(orderby, function (value) {\n var order = value.field.replace(/\\./g, '/');\n if (value.dir === 'desc') {\n order += ' desc';\n }\n return order;\n }).join(',');\n if (expr) {\n params.$orderby = expr;\n }\n },\n skip: function (params, skip) {\n if (skip) {\n params.$skip = skip;\n }\n },\n take: function (params, take) {\n if (take) {\n params.$top = take;\n }\n }\n }, defaultDataType = { read: { dataType: 'jsonp' } };\n function toOdataFilter(filter, useOdataFour) {\n var result = [], logic = filter.logic || 'and', idx, length, field, type, format, operator, value, ignoreCase, filters = filter.filters;\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n value = filter.value;\n operator = filter.operator;\n if (filter.filters) {\n filter = toOdataFilter(filter, useOdataFour);\n } else {\n ignoreCase = filter.ignoreCase;\n field = field.replace(/\\./g, '/');\n filter = odataFilters[operator];\n if (useOdataFour) {\n filter = odataFiltersVersionFour[operator];\n }\n if (operator === 'isnullorempty') {\n filter = kendo.format('{0} {1} null or {0} {1} \\'\\'', field, filter);\n } else if (operator === 'isnotnullorempty') {\n filter = kendo.format('{0} {1} null and {0} {1} \\'\\'', field, filter);\n } else if (operator === 'isnull' || operator === 'isnotnull') {\n filter = kendo.format('{0} {1} null', field, filter);\n } else if (operator === 'isempty' || operator === 'isnotempty') {\n filter = kendo.format('{0} {1} \\'\\'', field, filter);\n } else if (filter && value !== undefined) {\n type = $.type(value);\n if (type === 'string') {\n format = '\\'{1}\\'';\n value = value.replace(/'/g, '\\'\\'');\n if (ignoreCase === true) {\n field = 'tolower(' + field + ')';\n }\n } else if (type === 'date') {\n if (useOdataFour) {\n format = '{1:yyyy-MM-ddTHH:mm:ss+00:00}';\n value = kendo.timezone.apply(value, 'Etc/UTC');\n } else {\n format = 'datetime\\'{1:yyyy-MM-ddTHH:mm:ss}\\'';\n }\n } else {\n format = '{1}';\n }\n if (filter.length > 3) {\n if (filter !== 'substringof') {\n format = '{0}({2},' + format + ')';\n } else {\n format = '{0}(' + format + ',{2})';\n if (operator === 'doesnotcontain') {\n if (useOdataFour) {\n format = '{0}({2},\\'{1}\\') eq -1';\n filter = 'indexof';\n } else {\n format += ' eq false';\n }\n }\n }\n } else {\n format = '{2} {0} ' + format;\n }\n filter = kendo.format(format, filter, value, field);\n }\n }\n result.push(filter);\n }\n filter = result.join(' ' + logic + ' ');\n if (result.length > 1) {\n filter = '(' + filter + ')';\n }\n return filter;\n }\n function stripMetadata(obj) {\n for (var name in obj) {\n if (name.indexOf('@odata') === 0) {\n delete obj[name];\n }\n }\n }\n function hex16() {\n return Math.floor((1 + Math.random()) * 65536).toString(16).substr(1);\n }\n function createBoundary(prefix) {\n return prefix + hex16() + '-' + hex16() + '-' + hex16();\n }\n function createDelimeter(boundary, close) {\n var result = NEWLINE + '--' + boundary;\n if (close) {\n result += '--';\n }\n return result;\n }\n function createCommand(transport, item, httpVerb, command) {\n var transportUrl = transport.options[command].url;\n var commandPrefix = kendo.format('{0} ', httpVerb);\n if (isFunction(transportUrl)) {\n return commandPrefix + transportUrl(item);\n } else {\n return commandPrefix + transportUrl;\n }\n }\n function getOperationHeader(changeset, changeId) {\n var header = '';\n header += createDelimeter(changeset, false);\n header += NEWLINE + 'Content-Type: application/http';\n header += NEWLINE + 'Content-Transfer-Encoding: binary';\n header += NEWLINE + 'Content-ID: ' + changeId;\n return header;\n }\n function getOperationContent(item) {\n var content = '';\n content += NEWLINE + 'Content-Type: application/json;odata=minimalmetadata';\n content += NEWLINE + 'Prefer: return=representation';\n content += DOUBLELINE + kendo.stringify(item);\n return content;\n }\n function getOperations(collection, changeset, changeId, command, transport, skipContent) {\n var requestBody = '';\n for (var i = 0; i < collection.length; i++) {\n requestBody += getOperationHeader(changeset, changeId);\n requestBody += DOUBLELINE + createCommand(transport, collection[i], transport.options[command].type, command) + ' HTTP/1.1';\n if (!skipContent) {\n requestBody += getOperationContent(collection[i]);\n }\n requestBody += NEWLINE;\n changeId++;\n }\n return requestBody;\n }\n function processCollection(colection, boundary, changeset, changeId, transport, command, skipContent) {\n var requestBody = '';\n requestBody += getBoundary(boundary, changeset);\n requestBody += getOperations(colection, changeset, changeId, command, transport, skipContent);\n requestBody += createDelimeter(changeset, true);\n requestBody += NEWLINE;\n return requestBody;\n }\n function getBoundary(boundary, changeset) {\n var requestBody = '';\n requestBody += '--' + boundary + NEWLINE;\n requestBody += 'Content-Type: multipart/mixed; boundary=' + changeset + NEWLINE;\n return requestBody;\n }\n function createBatchRequest(transport, colections) {\n var options = {};\n var boundary = createBoundary('sf_batch_');\n var requestBody = '';\n var changeId = 0;\n var batchURL = transport.options.batch.url;\n var changeset = createBoundary('sf_changeset_');\n options.type = transport.options.batch.type;\n options.url = isFunction(batchURL) ? batchURL() : batchURL;\n options.headers = { 'Content-Type': 'multipart/mixed; boundary=' + boundary };\n if (colections.updated.length) {\n requestBody += processCollection(colections.updated, boundary, changeset, changeId, transport, 'update', false);\n changeId += colections.updated.length;\n changeset = createBoundary('sf_changeset_');\n }\n if (colections.destroyed.length) {\n requestBody += processCollection(colections.destroyed, boundary, changeset, changeId, transport, 'destroy', true);\n changeId += colections.destroyed.length;\n changeset = createBoundary('sf_changeset_');\n }\n if (colections.created.length) {\n requestBody += processCollection(colections.created, boundary, changeset, changeId, transport, 'create', false);\n }\n requestBody += createDelimeter(boundary, true);\n options.data = requestBody;\n return options;\n }\n function parseBatchResponse(responseText) {\n var responseMarkers = responseText.match(/--changesetresponse_[a-z0-9-]+$/gm);\n var markerIndex = 0;\n var collections = [];\n var changeBody;\n var status;\n var code;\n var marker;\n var jsonModel;\n collections.push({\n models: [],\n passed: true\n });\n for (var i = 0; i < responseMarkers.length; i++) {\n marker = responseMarkers[i];\n if (marker.lastIndexOf('--', marker.length - 1)) {\n if (i < responseMarkers.length - 1) {\n collections.push({\n models: [],\n passed: true\n });\n }\n continue;\n }\n if (!markerIndex) {\n markerIndex = responseText.indexOf(marker);\n } else {\n markerIndex = responseText.indexOf(marker, markerIndex + marker.length);\n }\n changeBody = responseText.substring(markerIndex, responseText.indexOf('--', markerIndex + 1));\n status = changeBody.match(/^HTTP\\/1\\.\\d (\\d{3}) (.*)$/gm).pop();\n code = kendo.parseFloat(status.match(/\\d{3}/g).pop());\n if (code >= 200 && code <= 299) {\n jsonModel = changeBody.match(/\\{.*\\}/gm);\n if (jsonModel) {\n collections[collections.length - 1].models.push(JSON.parse(jsonModel[0]));\n }\n } else {\n collections[collections.length - 1].passed = false;\n }\n }\n return collections;\n }\n extend(true, kendo.data, {\n schemas: {\n odata: {\n type: 'json',\n data: function (data) {\n return data.d.results || [data.d];\n },\n total: 'd.__count'\n }\n },\n transports: {\n odata: {\n read: {\n cache: true,\n dataType: 'jsonp',\n jsonp: '$callback'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type, useVersionFour) {\n var params, value, option, dataType;\n options = options || {};\n type = type || 'read';\n dataType = (this.options || defaultDataType)[type];\n dataType = dataType ? dataType.dataType : 'json';\n if (type === 'read') {\n params = { $inlinecount: 'allpages' };\n if (dataType != 'json') {\n params.$format = 'json';\n }\n for (option in options) {\n if (mappers[option]) {\n mappers[option](params, options[option], useVersionFour);\n } else {\n params[option] = options[option];\n }\n }\n } else {\n if (dataType !== 'json') {\n throw new Error('Only json dataType can be used for ' + type + ' operation.');\n }\n if (type !== 'destroy') {\n for (option in options) {\n value = options[option];\n if (typeof value === 'number') {\n options[option] = value + '';\n }\n }\n params = kendo.stringify(options);\n }\n }\n return params;\n }\n }\n }\n });\n extend(true, kendo.data, {\n schemas: {\n 'odata-v4': {\n type: 'json',\n data: function (data) {\n if ($.isArray(data)) {\n for (var i = 0; i < data.length; i++) {\n stripMetadata(data[i]);\n }\n return data;\n } else {\n data = $.extend({}, data);\n stripMetadata(data);\n if (data.value) {\n return data.value;\n }\n return [data];\n }\n },\n total: function (data) {\n return data['@odata.count'];\n }\n }\n },\n transports: {\n 'odata-v4': {\n batch: { type: 'POST' },\n read: {\n cache: true,\n dataType: 'json'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type) {\n var result = kendo.data.transports.odata.parameterMap(options, type, true);\n if (type == 'read') {\n result.$count = true;\n delete result.$inlinecount;\n }\n return result;\n },\n submit: function (e) {\n var that = this;\n var options = createBatchRequest(that, e.data);\n var collections = e.data;\n if (!collections.updated.length && !collections.destroyed.length && !collections.created.length) {\n return;\n }\n $.ajax(extend(true, {}, {\n success: function (response) {\n var responses = parseBatchResponse(response);\n var index = 0;\n var current;\n if (collections.updated.length) {\n current = responses[index];\n if (current.passed) {\n e.success(current.models.length ? current.models : [], 'update');\n }\n index++;\n }\n if (collections.destroyed.length) {\n current = responses[index];\n if (current.passed) {\n e.success([], 'destroy');\n }\n index++;\n }\n if (collections.created.length) {\n current = responses[index];\n if (current.passed) {\n e.success(current.models, 'create');\n }\n }\n },\n error: function (response, status, error) {\n e.error(response, status, error);\n }\n }, options));\n }\n }\n }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.xml', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.xml',\n name: 'XML',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, isArray = $.isArray, isPlainObject = $.isPlainObject, map = $.map, each = $.each, extend = $.extend, getter = kendo.getter, Class = kendo.Class;\n var XmlDataReader = Class.extend({\n init: function (options) {\n var that = this, total = options.total, model = options.model, parse = options.parse, errors = options.errors, serialize = options.serialize, data = options.data;\n if (model) {\n if (isPlainObject(model)) {\n var base = options.modelBase || kendo.data.Model;\n if (model.fields) {\n each(model.fields, function (field, value) {\n if (isPlainObject(value) && value.field) {\n if (!$.isFunction(value.field)) {\n value = extend(value, { field: that.getter(value.field) });\n }\n } else {\n value = { field: that.getter(value) };\n }\n model.fields[field] = value;\n });\n }\n var id = model.id;\n if (id) {\n var idField = {};\n idField[that.xpathToMember(id, true)] = { field: that.getter(id) };\n model.fields = extend(idField, model.fields);\n model.id = that.xpathToMember(id);\n }\n model = base.define(model);\n }\n that.model = model;\n }\n if (total) {\n if (typeof total == 'string') {\n total = that.getter(total);\n that.total = function (data) {\n return parseInt(total(data), 10);\n };\n } else if (typeof total == 'function') {\n that.total = total;\n }\n }\n if (errors) {\n if (typeof errors == 'string') {\n errors = that.getter(errors);\n that.errors = function (data) {\n return errors(data) || null;\n };\n } else if (typeof errors == 'function') {\n that.errors = errors;\n }\n }\n if (data) {\n if (typeof data == 'string') {\n data = that.xpathToMember(data);\n that.data = function (value) {\n var result = that.evaluate(value, data), modelInstance;\n result = isArray(result) ? result : [result];\n if (that.model && model.fields) {\n modelInstance = new that.model();\n return map(result, function (value) {\n if (value) {\n var record = {}, field;\n for (field in model.fields) {\n record[field] = modelInstance._parse(field, model.fields[field].field(value));\n }\n return record;\n }\n });\n }\n return result;\n };\n } else if (typeof data == 'function') {\n that.data = data;\n }\n }\n if (typeof parse == 'function') {\n var xmlParse = that.parse;\n that.parse = function (data) {\n var xml = parse.call(that, data);\n return xmlParse.call(that, xml);\n };\n }\n if (typeof serialize == 'function') {\n that.serialize = serialize;\n }\n },\n total: function (result) {\n return this.data(result).length;\n },\n errors: function (data) {\n return data ? data.errors : null;\n },\n serialize: function (data) {\n return data;\n },\n parseDOM: function (element) {\n var result = {}, parsedNode, node, nodeType, nodeName, member, attribute, attributes = element.attributes, attributeCount = attributes.length, idx;\n for (idx = 0; idx < attributeCount; idx++) {\n attribute = attributes[idx];\n result['@' + attribute.nodeName] = attribute.nodeValue;\n }\n for (node = element.firstChild; node; node = node.nextSibling) {\n nodeType = node.nodeType;\n if (nodeType === 3 || nodeType === 4) {\n result['#text'] = node.nodeValue;\n } else if (nodeType === 1) {\n parsedNode = this.parseDOM(node);\n nodeName = node.nodeName;\n member = result[nodeName];\n if (isArray(member)) {\n member.push(parsedNode);\n } else if (member !== undefined) {\n member = [\n member,\n parsedNode\n ];\n } else {\n member = parsedNode;\n }\n result[nodeName] = member;\n }\n }\n return result;\n },\n evaluate: function (value, expression) {\n var members = expression.split('.'), member, result, length, intermediateResult, idx;\n while (member = members.shift()) {\n value = value[member];\n if (isArray(value)) {\n result = [];\n expression = members.join('.');\n for (idx = 0, length = value.length; idx < length; idx++) {\n intermediateResult = this.evaluate(value[idx], expression);\n intermediateResult = isArray(intermediateResult) ? intermediateResult : [intermediateResult];\n result.push.apply(result, intermediateResult);\n }\n return result;\n }\n }\n return value;\n },\n parse: function (xml) {\n var documentElement, tree, result = {};\n documentElement = xml.documentElement || $.parseXML(xml).documentElement;\n tree = this.parseDOM(documentElement);\n result[documentElement.nodeName] = tree;\n return result;\n },\n xpathToMember: function (member, raw) {\n if (!member) {\n return '';\n }\n member = member.replace(/^\\//, '').replace(/\\//g, '.');\n if (member.indexOf('@') >= 0) {\n return member.replace(/\\.?(@.*)/, raw ? '$1' : '[\"$1\"]');\n }\n if (member.indexOf('text()') >= 0) {\n return member.replace(/(\\.?text\\(\\))/, raw ? '#text' : '[\"#text\"]');\n }\n return member;\n },\n getter: function (member) {\n return getter(this.xpathToMember(member), true);\n }\n });\n $.extend(true, kendo.data, {\n XmlDataReader: XmlDataReader,\n readers: { xml: XmlDataReader }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data', [\n 'kendo.core',\n 'kendo.data.odata',\n 'kendo.data.xml'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'data',\n name: 'Data source',\n category: 'framework',\n description: 'Powerful component for using local and remote data.Fully supports CRUD, Sorting, Paging, Filtering, Grouping, and Aggregates.',\n depends: ['core'],\n features: [\n {\n id: 'data-odata',\n name: 'OData',\n description: 'Support for accessing Open Data Protocol (OData) services.',\n depends: ['data.odata']\n },\n {\n id: 'data-signalr',\n name: 'SignalR',\n description: 'Support for binding to SignalR hubs.',\n depends: ['data.signalr']\n },\n {\n id: 'data-XML',\n name: 'XML',\n description: 'Support for binding to XML.',\n depends: ['data.xml']\n }\n ]\n };\n (function ($, undefined) {\n var extend = $.extend, proxy = $.proxy, isPlainObject = $.isPlainObject, isEmptyObject = $.isEmptyObject, isArray = $.isArray, grep = $.grep, ajax = $.ajax, map, each = $.each, noop = $.noop, kendo = window.kendo, isFunction = kendo.isFunction, Observable = kendo.Observable, Class = kendo.Class, STRING = 'string', FUNCTION = 'function', ASCENDING = 'asc', CREATE = 'create', READ = 'read', UPDATE = 'update', DESTROY = 'destroy', CHANGE = 'change', SYNC = 'sync', GET = 'get', ERROR = 'error', REQUESTSTART = 'requestStart', PROGRESS = 'progress', REQUESTEND = 'requestEnd', crud = [\n CREATE,\n READ,\n UPDATE,\n DESTROY\n ], identity = function (o) {\n return o;\n }, getter = kendo.getter, stringify = kendo.stringify, math = Math, push = [].push, join = [].join, pop = [].pop, splice = [].splice, shift = [].shift, slice = [].slice, unshift = [].unshift, toString = {}.toString, stableSort = kendo.support.stableSort, dateRegExp = /^\\/Date\\((.*?)\\)\\/$/;\n var ObservableArray = Observable.extend({\n init: function (array, type) {\n var that = this;\n that.type = type || ObservableObject;\n Observable.fn.init.call(that);\n that.length = array.length;\n that.wrapAll(array, that);\n },\n at: function (index) {\n return this[index];\n },\n toJSON: function () {\n var idx, length = this.length, value, json = new Array(length);\n for (idx = 0; idx < length; idx++) {\n value = this[idx];\n if (value instanceof ObservableObject) {\n value = value.toJSON();\n }\n json[idx] = value;\n }\n return json;\n },\n parent: noop,\n wrapAll: function (source, target) {\n var that = this, idx, length, parent = function () {\n return that;\n };\n target = target || [];\n for (idx = 0, length = source.length; idx < length; idx++) {\n target[idx] = that.wrap(source[idx], parent);\n }\n return target;\n },\n wrap: function (object, parent) {\n var that = this, observable;\n if (object !== null && toString.call(object) === '[object Object]') {\n observable = object instanceof that.type || object instanceof Model;\n if (!observable) {\n object = object instanceof ObservableObject ? object.toJSON() : object;\n object = new that.type(object);\n }\n object.parent = parent;\n object.bind(CHANGE, function (e) {\n that.trigger(CHANGE, {\n field: e.field,\n node: e.node,\n index: e.index,\n items: e.items || [this],\n action: e.node ? e.action || 'itemloaded' : 'itemchange'\n });\n });\n }\n return object;\n },\n push: function () {\n var index = this.length, items = this.wrapAll(arguments), result;\n result = push.apply(this, items);\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\n return result;\n },\n slice: slice,\n sort: [].sort,\n join: join,\n pop: function () {\n var length = this.length, result = pop.apply(this);\n if (length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: length - 1,\n items: [result]\n });\n }\n return result;\n },\n splice: function (index, howMany, item) {\n var items = this.wrapAll(slice.call(arguments, 2)), result, i, len;\n result = splice.apply(this, [\n index,\n howMany\n ].concat(items));\n if (result.length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: index,\n items: result\n });\n for (i = 0, len = result.length; i < len; i++) {\n if (result[i] && result[i].children) {\n result[i].unbind(CHANGE);\n }\n }\n }\n if (item) {\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\n }\n return result;\n },\n shift: function () {\n var length = this.length, result = shift.apply(this);\n if (length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: 0,\n items: [result]\n });\n }\n return result;\n },\n unshift: function () {\n var items = this.wrapAll(arguments), result;\n result = unshift.apply(this, items);\n this.trigger(CHANGE, {\n action: 'add',\n index: 0,\n items: items\n });\n return result;\n },\n indexOf: function (item) {\n var that = this, idx, length;\n for (idx = 0, length = that.length; idx < length; idx++) {\n if (that[idx] === item) {\n return idx;\n }\n }\n return -1;\n },\n forEach: function (callback, thisArg) {\n var idx = 0;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n callback.call(context, this[idx], idx, this);\n }\n },\n map: function (callback, thisArg) {\n var idx = 0;\n var result = [];\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n result[idx] = callback.call(context, this[idx], idx, this);\n }\n return result;\n },\n reduce: function (callback) {\n var idx = 0, result, length = this.length;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx < length) {\n result = this[idx++];\n }\n for (; idx < length; idx++) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n reduceRight: function (callback) {\n var idx = this.length - 1, result;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx > 0) {\n result = this[idx--];\n }\n for (; idx >= 0; idx--) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n filter: function (callback, thisArg) {\n var idx = 0;\n var result = [];\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n result[result.length] = item;\n }\n }\n return result;\n },\n find: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n return item;\n }\n }\n },\n every: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (!callback.call(context, item, idx, this)) {\n return false;\n }\n }\n return true;\n },\n some: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n return true;\n }\n }\n return false;\n },\n remove: function (item) {\n var idx = this.indexOf(item);\n if (idx !== -1) {\n this.splice(idx, 1);\n }\n },\n empty: function () {\n this.splice(0, this.length);\n }\n });\n if (typeof Symbol !== 'undefined' && Symbol.iterator && !ObservableArray.prototype[Symbol.iterator]) {\n ObservableArray.prototype[Symbol.iterator] = [][Symbol.iterator];\n }\n var LazyObservableArray = ObservableArray.extend({\n init: function (data, type, events) {\n Observable.fn.init.call(this);\n this.type = type || ObservableObject;\n if (events) {\n this._events = events;\n }\n for (var idx = 0; idx < data.length; idx++) {\n this[idx] = data[idx];\n }\n this.length = idx;\n this._parent = proxy(function () {\n return this;\n }, this);\n },\n at: function (index) {\n var item = this[index];\n if (!(item instanceof this.type)) {\n item = this[index] = this.wrap(item, this._parent);\n } else {\n item.parent = this._parent;\n }\n return item;\n }\n });\n function eventHandler(context, type, field, prefix) {\n return function (e) {\n var event = {}, key;\n for (key in e) {\n event[key] = e[key];\n }\n if (prefix) {\n event.field = field + '.' + e.field;\n } else {\n event.field = field;\n }\n if (type == CHANGE && context._notifyChange) {\n context._notifyChange(event);\n }\n context.trigger(type, event);\n };\n }\n var ObservableObject = Observable.extend({\n init: function (value) {\n var that = this, member, field, parent = function () {\n return that;\n };\n Observable.fn.init.call(this);\n this._handlers = {};\n for (field in value) {\n member = value[field];\n if (typeof member === 'object' && member && !member.getTime && field.charAt(0) != '_') {\n member = that.wrap(member, field, parent);\n }\n that[field] = member;\n }\n that.uid = kendo.guid();\n },\n shouldSerialize: function (field) {\n return this.hasOwnProperty(field) && field !== '_handlers' && field !== '_events' && typeof this[field] !== FUNCTION && field !== 'uid';\n },\n forEach: function (f) {\n for (var i in this) {\n if (this.shouldSerialize(i)) {\n f(this[i], i);\n }\n }\n },\n toJSON: function () {\n var result = {}, value, field;\n for (field in this) {\n if (this.shouldSerialize(field)) {\n value = this[field];\n if (value instanceof ObservableObject || value instanceof ObservableArray) {\n value = value.toJSON();\n }\n result[field] = value;\n }\n }\n return result;\n },\n get: function (field) {\n var that = this, result;\n that.trigger(GET, { field: field });\n if (field === 'this') {\n result = that;\n } else {\n result = kendo.getter(field, true)(that);\n }\n return result;\n },\n _set: function (field, value) {\n var that = this;\n var composite = field.indexOf('.') >= 0;\n if (composite) {\n var paths = field.split('.'), path = '';\n while (paths.length > 1) {\n path += paths.shift();\n var obj = kendo.getter(path, true)(that);\n if (obj instanceof ObservableObject) {\n obj.set(paths.join('.'), value);\n return composite;\n }\n path += '.';\n }\n }\n kendo.setter(field)(that, value);\n return composite;\n },\n set: function (field, value) {\n var that = this, isSetPrevented = false, composite = field.indexOf('.') >= 0, current = kendo.getter(field, true)(that);\n if (current !== value) {\n if (current instanceof Observable && this._handlers[field]) {\n if (this._handlers[field].get) {\n current.unbind(GET, this._handlers[field].get);\n }\n current.unbind(CHANGE, this._handlers[field].change);\n }\n isSetPrevented = that.trigger('set', {\n field: field,\n value: value\n });\n if (!isSetPrevented) {\n if (!composite) {\n value = that.wrap(value, field, function () {\n return that;\n });\n }\n if (!that._set(field, value) || field.indexOf('(') >= 0 || field.indexOf('[') >= 0) {\n that.trigger(CHANGE, { field: field });\n }\n }\n }\n return isSetPrevented;\n },\n parent: noop,\n wrap: function (object, field, parent) {\n var that = this;\n var get;\n var change;\n var type = toString.call(object);\n if (object != null && (type === '[object Object]' || type === '[object Array]')) {\n var isObservableArray = object instanceof ObservableArray;\n var isDataSource = object instanceof DataSource;\n if (type === '[object Object]' && !isDataSource && !isObservableArray) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n get = eventHandler(that, GET, field, true);\n object.bind(GET, get);\n change = eventHandler(that, CHANGE, field, true);\n object.bind(CHANGE, change);\n that._handlers[field] = {\n get: get,\n change: change\n };\n } else if (type === '[object Array]' || isObservableArray || isDataSource) {\n if (!isObservableArray && !isDataSource) {\n object = new ObservableArray(object);\n }\n change = eventHandler(that, CHANGE, field, false);\n object.bind(CHANGE, change);\n that._handlers[field] = { change: change };\n }\n object.parent = parent;\n }\n return object;\n }\n });\n function equal(x, y) {\n if (x === y) {\n return true;\n }\n var xtype = $.type(x), ytype = $.type(y), field;\n if (xtype !== ytype) {\n return false;\n }\n if (xtype === 'date') {\n return x.getTime() === y.getTime();\n }\n if (xtype !== 'object' && xtype !== 'array') {\n return false;\n }\n for (field in x) {\n if (!equal(x[field], y[field])) {\n return false;\n }\n }\n return true;\n }\n var parsers = {\n 'number': function (value) {\n if (typeof value === STRING && value.toLowerCase() === 'null') {\n return null;\n }\n return kendo.parseFloat(value);\n },\n 'date': function (value) {\n if (typeof value === STRING && value.toLowerCase() === 'null') {\n return null;\n }\n return kendo.parseDate(value);\n },\n 'boolean': function (value) {\n if (typeof value === STRING) {\n if (value.toLowerCase() === 'null') {\n return null;\n } else {\n return value.toLowerCase() === 'true';\n }\n }\n return value != null ? !!value : value;\n },\n 'string': function (value) {\n if (typeof value === STRING && value.toLowerCase() === 'null') {\n return null;\n }\n return value != null ? value + '' : value;\n },\n 'default': function (value) {\n return value;\n }\n };\n var defaultValues = {\n 'string': '',\n 'number': 0,\n 'date': new Date(),\n 'boolean': false,\n 'default': ''\n };\n function getFieldByName(obj, name) {\n var field, fieldName;\n for (fieldName in obj) {\n field = obj[fieldName];\n if (isPlainObject(field) && field.field && field.field === name) {\n return field;\n } else if (field === name) {\n return field;\n }\n }\n return null;\n }\n var Model = ObservableObject.extend({\n init: function (data) {\n var that = this;\n if (!data || $.isEmptyObject(data)) {\n data = $.extend({}, that.defaults, data);\n if (that._initializers) {\n for (var idx = 0; idx < that._initializers.length; idx++) {\n var name = that._initializers[idx];\n data[name] = that.defaults[name]();\n }\n }\n }\n ObservableObject.fn.init.call(that, data);\n that.dirty = false;\n that.dirtyFields = {};\n if (that.idField) {\n that.id = that.get(that.idField);\n if (that.id === undefined) {\n that.id = that._defaultId;\n }\n }\n },\n shouldSerialize: function (field) {\n return ObservableObject.fn.shouldSerialize.call(this, field) && field !== 'uid' && !(this.idField !== 'id' && field === 'id') && field !== 'dirty' && field !== 'dirtyFields' && field !== '_accessors';\n },\n _parse: function (field, value) {\n var that = this, fieldName = field, fields = that.fields || {}, parse;\n field = fields[field];\n if (!field) {\n field = getFieldByName(fields, fieldName);\n }\n if (field) {\n parse = field.parse;\n if (!parse && field.type) {\n parse = parsers[field.type.toLowerCase()];\n }\n }\n return parse ? parse(value) : value;\n },\n _notifyChange: function (e) {\n var action = e.action;\n if (action == 'add' || action == 'remove') {\n this.dirty = true;\n this.dirtyFields[e.field] = true;\n }\n },\n editable: function (field) {\n field = (this.fields || {})[field];\n return field ? field.editable !== false : true;\n },\n set: function (field, value, initiator) {\n var that = this;\n var dirty = that.dirty;\n if (that.editable(field)) {\n value = that._parse(field, value);\n if (!equal(value, that.get(field))) {\n that.dirty = true;\n that.dirtyFields[field] = true;\n if (ObservableObject.fn.set.call(that, field, value, initiator) && !dirty) {\n that.dirty = dirty;\n if (!that.dirty) {\n that.dirtyFields[field] = false;\n }\n }\n } else {\n that.trigger('equalSet', {\n field: field,\n value: value\n });\n }\n }\n },\n accept: function (data) {\n var that = this, parent = function () {\n return that;\n }, field;\n for (field in data) {\n var value = data[field];\n if (field.charAt(0) != '_') {\n value = that.wrap(data[field], field, parent);\n }\n that._set(field, value);\n }\n if (that.idField) {\n that.id = that.get(that.idField);\n }\n that.dirty = false;\n that.dirtyFields = {};\n },\n isNew: function () {\n return this.id === this._defaultId;\n }\n });\n Model.define = function (base, options) {\n if (options === undefined) {\n options = base;\n base = Model;\n }\n var model, proto = extend({ defaults: {} }, options), name, field, type, value, idx, length, fields = {}, originalName, id = proto.id, functionFields = [];\n if (id) {\n proto.idField = id;\n }\n if (proto.id) {\n delete proto.id;\n }\n if (id) {\n proto.defaults[id] = proto._defaultId = '';\n }\n if (toString.call(proto.fields) === '[object Array]') {\n for (idx = 0, length = proto.fields.length; idx < length; idx++) {\n field = proto.fields[idx];\n if (typeof field === STRING) {\n fields[field] = {};\n } else if (field.field) {\n fields[field.field] = field;\n }\n }\n proto.fields = fields;\n }\n for (name in proto.fields) {\n field = proto.fields[name];\n type = field.type || 'default';\n value = null;\n originalName = name;\n name = typeof field.field === STRING ? field.field : name;\n if (!field.nullable) {\n value = proto.defaults[originalName !== name ? originalName : name] = field.defaultValue !== undefined ? field.defaultValue : defaultValues[type.toLowerCase()];\n if (typeof value === 'function') {\n functionFields.push(name);\n }\n }\n if (options.id === name) {\n proto._defaultId = value;\n }\n proto.defaults[originalName !== name ? originalName : name] = value;\n field.parse = field.parse || parsers[type];\n }\n if (functionFields.length > 0) {\n proto._initializers = functionFields;\n }\n model = base.extend(proto);\n model.define = function (options) {\n return Model.define(model, options);\n };\n if (proto.fields) {\n model.fields = proto.fields;\n model.idField = proto.idField;\n }\n return model;\n };\n var Comparer = {\n selector: function (field) {\n return isFunction(field) ? field : getter(field);\n },\n compare: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n a = selector(a);\n b = selector(b);\n if (a == null && b == null) {\n return 0;\n }\n if (a == null) {\n return -1;\n }\n if (b == null) {\n return 1;\n }\n if (a.localeCompare) {\n return a.localeCompare(b);\n }\n return a > b ? 1 : a < b ? -1 : 0;\n };\n },\n create: function (sort) {\n var compare = sort.compare || this.compare(sort.field);\n if (sort.dir == 'desc') {\n return function (a, b) {\n return compare(b, a, true);\n };\n }\n return compare;\n },\n combine: function (comparers) {\n return function (a, b) {\n var result = comparers[0](a, b), idx, length;\n for (idx = 1, length = comparers.length; idx < length; idx++) {\n result = result || comparers[idx](a, b);\n }\n return result;\n };\n }\n };\n var StableComparer = extend({}, Comparer, {\n asc: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n if (valueA == null) {\n return -1;\n }\n if (valueB == null) {\n return 1;\n }\n if (valueA.localeCompare) {\n return valueA.localeCompare(valueB);\n }\n return valueA > valueB ? 1 : -1;\n };\n },\n desc: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n if (valueA == null) {\n return 1;\n }\n if (valueB == null) {\n return -1;\n }\n if (valueB.localeCompare) {\n return valueB.localeCompare(valueA);\n }\n return valueA < valueB ? 1 : -1;\n };\n },\n create: function (sort) {\n return this[sort.dir](sort.field);\n }\n });\n map = function (array, callback) {\n var idx, length = array.length, result = new Array(length);\n for (idx = 0; idx < length; idx++) {\n result[idx] = callback(array[idx], idx, array);\n }\n return result;\n };\n var operators = function () {\n function quote(str) {\n if (typeof str == 'string') {\n str = str.replace(/[\\r\\n]+/g, '');\n }\n return JSON.stringify(str);\n }\n function textOp(impl) {\n return function (a, b, ignore) {\n b += '';\n if (ignore) {\n a = '(' + a + ' || \\'\\').toString().toLowerCase()';\n b = b.toLowerCase();\n }\n return impl(a, quote(b), ignore);\n };\n }\n function operator(op, a, b, ignore) {\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(b.toLowerCase());\n a = '((' + a + ' || \\'\\')+\\'\\').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) {\n return operator('==', a, b, ignore);\n },\n neq: function (a, b, ignore) {\n return operator('!=', a, b, ignore);\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);\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 = 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 = InfraerTable(table, fields);\n } else if (select) {\n data = InfraerSelect(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 InfraerSelect(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 InfraerTable(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 expressions = 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 InfraerList(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 = InfraerList(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 = InfraerList(list, fields);\n }\n }\n dataSource.data = data;\n return dataSource instanceof HierarchicalDataSource ? dataSource : new HierarchicalDataSource(dataSource);\n };\n var Buffer = kendo.Observable.extend({\n init: function (dataSource, viewSize, disablePrefetch) {\n kendo.Observable.fn.init.call(this);\n this._prefetching = false;\n this.dataSource = dataSource;\n this.prefetch = !disablePrefetch;\n var buffer = this;\n dataSource.bind('change', function () {\n buffer._change();\n });\n dataSource.bind('reset', function () {\n buffer._reset();\n });\n this._syncWithDataSource();\n this.setViewSize(viewSize);\n },\n setViewSize: function (viewSize) {\n this.viewSize = viewSize;\n this._recalculate();\n },\n at: function (index) {\n var pageSize = this.pageSize, itemPresent = true;\n if (index >= this.total()) {\n this.trigger('endreached', { index: index });\n return null;\n }\n if (!this.useRanges) {\n return this.dataSource.view()[index];\n }\n if (this.useRanges) {\n if (index < this.dataOffset || index >= this.skip + pageSize) {\n itemPresent = this.range(Math.floor(index / pageSize) * pageSize);\n }\n if (index === this.prefetchThreshold) {\n this._prefetch();\n }\n if (index === this.midPageThreshold) {\n this.range(this.nextMidRange, true);\n } else if (index === this.nextPageThreshold) {\n this.range(this.nextFullRange);\n } else if (index === this.pullBackThreshold) {\n if (this.offset === this.skip) {\n this.range(this.previousMidRange);\n } else {\n this.range(this.previousFullRange);\n }\n }\n if (itemPresent) {\n return this.dataSource.at(index - this.dataOffset);\n } else {\n this.trigger('endreached', { index: index });\n return null;\n }\n }\n },\n indexOf: function (item) {\n return this.dataSource.data().indexOf(item) + this.dataOffset;\n },\n total: function () {\n return parseInt(this.dataSource.total(), 10);\n },\n next: function () {\n var buffer = this, pageSize = buffer.pageSize, offset = buffer.skip - buffer.viewSize + pageSize, pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize;\n this.offset = offset;\n this.dataSource.prefetch(pageSkip, pageSize, function () {\n buffer._goToRange(offset, true);\n });\n },\n range: function (offset, nextRange) {\n if (this.offset === offset) {\n return true;\n }\n var buffer = this, pageSize = this.pageSize, pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize, dataSource = this.dataSource;\n if (nextRange) {\n pageSkip += pageSize;\n }\n if (dataSource.inRange(offset, pageSize)) {\n this.offset = offset;\n this._recalculate();\n this._goToRange(offset);\n return true;\n } else if (this.prefetch) {\n dataSource.prefetch(pageSkip, pageSize, function () {\n buffer.offset = offset;\n buffer._recalculate();\n buffer._goToRange(offset, true);\n });\n return false;\n }\n return true;\n },\n syncDataSource: function () {\n var offset = this.offset;\n this.offset = null;\n this.range(offset);\n },\n destroy: function () {\n this.unbind();\n },\n _prefetch: function () {\n var buffer = this, pageSize = this.pageSize, prefetchOffset = this.skip + pageSize, dataSource = this.dataSource;\n if (!dataSource.inRange(prefetchOffset, pageSize) && !this._prefetching && this.prefetch) {\n this._prefetching = true;\n this.trigger('prefetching', {\n skip: prefetchOffset,\n take: pageSize\n });\n dataSource.prefetch(prefetchOffset, pageSize, function () {\n buffer._prefetching = false;\n buffer.trigger('prefetched', {\n skip: prefetchOffset,\n take: pageSize\n });\n });\n }\n },\n _goToRange: function (offset, expanding) {\n if (this.offset !== offset) {\n return;\n }\n this.dataOffset = offset;\n this._expanding = expanding;\n this.dataSource.range(offset, this.pageSize);\n this.dataSource.enableRequestsInProgress();\n },\n _reset: function () {\n this._syncPending = true;\n },\n _change: function () {\n var dataSource = this.dataSource;\n this.length = this.useRanges ? dataSource.lastRange().end : dataSource.view().length;\n if (this._syncPending) {\n this._syncWithDataSource();\n this._recalculate();\n this._syncPending = false;\n this.trigger('reset', { offset: this.offset });\n }\n this.trigger('resize');\n if (this._expanding) {\n this.trigger('expand');\n }\n delete this._expanding;\n },\n _syncWithDataSource: function () {\n var dataSource = this.dataSource;\n this._firstItemUid = dataSource.firstItemUid();\n this.dataOffset = this.offset = dataSource.skip() || 0;\n this.pageSize = dataSource.pageSize();\n this.useRanges = dataSource.options.serverPaging;\n },\n _recalculate: function () {\n var pageSize = this.pageSize, offset = this.offset, viewSize = this.viewSize, skip = Math.ceil(offset / pageSize) * pageSize;\n this.skip = skip;\n this.midPageThreshold = skip + pageSize - 1;\n this.nextPageThreshold = skip + viewSize - 1;\n this.prefetchThreshold = skip + Math.floor(pageSize / 3 * 2);\n this.pullBackThreshold = this.offset - 1;\n this.nextMidRange = skip + pageSize - viewSize;\n this.nextFullRange = skip;\n this.previousMidRange = offset - viewSize;\n this.previousFullRange = skip - pageSize;\n }\n });\n var BatchBuffer = kendo.Observable.extend({\n init: function (dataSource, batchSize) {\n var batchBuffer = this;\n kendo.Observable.fn.init.call(batchBuffer);\n this.dataSource = dataSource;\n this.batchSize = batchSize;\n this._total = 0;\n this.buffer = new Buffer(dataSource, batchSize * 3);\n this.buffer.bind({\n 'endreached': function (e) {\n batchBuffer.trigger('endreached', { index: e.index });\n },\n 'prefetching': function (e) {\n batchBuffer.trigger('prefetching', {\n skip: e.skip,\n take: e.take\n });\n },\n 'prefetched': function (e) {\n batchBuffer.trigger('prefetched', {\n skip: e.skip,\n take: e.take\n });\n },\n 'reset': function () {\n batchBuffer._total = 0;\n batchBuffer.trigger('reset');\n },\n 'resize': function () {\n batchBuffer._total = Math.ceil(this.length / batchBuffer.batchSize);\n batchBuffer.trigger('resize', {\n total: batchBuffer.total(),\n offset: this.offset\n });\n }\n });\n },\n syncDataSource: function () {\n this.buffer.syncDataSource();\n },\n at: function (index) {\n var buffer = this.buffer, skip = index * this.batchSize, take = this.batchSize, view = [], item;\n if (buffer.offset > skip) {\n buffer.at(buffer.offset - 1);\n }\n for (var i = 0; i < take; i++) {\n item = buffer.at(skip + i);\n if (item === null) {\n break;\n }\n view.push(item);\n }\n return view;\n },\n total: function () {\n return this._total;\n },\n destroy: function () {\n this.buffer.destroy();\n this.unbind();\n }\n });\n extend(true, kendo.data, {\n readers: { json: DataReader },\n Query: Query,\n DataSource: DataSource,\n HierarchicalDataSource: HierarchicalDataSource,\n Node: Node,\n ObservableObject: ObservableObject,\n ObservableArray: ObservableArray,\n LazyObservableArray: LazyObservableArray,\n LocalTransport: LocalTransport,\n RemoteTransport: RemoteTransport,\n Cache: Cache,\n DataReader: DataReader,\n Model: Model,\n Buffer: Buffer,\n BatchBuffer: BatchBuffer\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.binder', [\n 'kendo.core',\n 'kendo.data'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'binder',\n name: 'MVVM',\n category: 'framework',\n description: 'Model View ViewModel (MVVM) is a design pattern which helps developers separate the Model (the data) from the View (the UI).',\n depends: [\n 'core',\n 'data'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Observable = kendo.Observable, ObservableObject = kendo.data.ObservableObject, ObservableArray = kendo.data.ObservableArray, toString = {}.toString, binders = {}, Class = kendo.Class, proxy = $.proxy, VALUE = 'value', SOURCE = 'source', EVENTS = 'events', CHECKED = 'checked', CSS = 'css', deleteExpando = true, FUNCTION = 'function', CHANGE = 'change';\n (function () {\n var a = document.createElement('a');\n try {\n delete a.test;\n } catch (e) {\n deleteExpando = false;\n }\n }());\n var Binding = Observable.extend({\n init: function (parents, path) {\n var that = this;\n Observable.fn.init.call(that);\n that.source = parents[0];\n that.parents = parents;\n that.path = path;\n that.dependencies = {};\n that.dependencies[path] = true;\n that.observable = that.source instanceof Observable;\n that._access = function (e) {\n that.dependencies[e.field] = true;\n };\n if (that.observable) {\n that._change = function (e) {\n that.change(e);\n };\n that.source.bind(CHANGE, that._change);\n }\n },\n _parents: function () {\n var parents = this.parents;\n var value = this.get();\n if (value && typeof value.parent == 'function') {\n var parent = value.parent();\n if ($.inArray(parent, parents) < 0) {\n parents = [parent].concat(parents);\n }\n }\n return parents;\n },\n change: function (e) {\n var dependency, ch, field = e.field, that = this;\n if (that.path === 'this') {\n that.trigger(CHANGE, e);\n } else {\n for (dependency in that.dependencies) {\n if (dependency.indexOf(field) === 0) {\n ch = dependency.charAt(field.length);\n if (!ch || ch === '.' || ch === '[') {\n that.trigger(CHANGE, e);\n break;\n }\n }\n }\n }\n },\n start: function (source) {\n source.bind('get', this._access);\n },\n stop: function (source) {\n source.unbind('get', this._access);\n },\n get: function () {\n var that = this, source = that.source, index = 0, path = that.path, result = source;\n if (!that.observable) {\n return result;\n }\n that.start(that.source);\n result = source.get(path);\n while (result === undefined && source) {\n source = that.parents[++index];\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n if (result === undefined) {\n source = that.source;\n while (result === undefined && source) {\n source = source.parent();\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n }\n if (typeof result === 'function') {\n index = path.lastIndexOf('.');\n if (index > 0) {\n source = source.get(path.substring(0, index));\n }\n that.start(source);\n if (source !== that.source) {\n result = result.call(source, that.source);\n } else {\n result = result.call(source);\n }\n that.stop(source);\n }\n if (source && source !== that.source) {\n that.currentSource = source;\n source.unbind(CHANGE, that._change).bind(CHANGE, that._change);\n }\n that.stop(that.source);\n return result;\n },\n set: function (value) {\n var source = this.currentSource || this.source;\n var field = kendo.getter(this.path)(source);\n if (typeof field === 'function') {\n if (source !== this.source) {\n field.call(source, this.source, value);\n } else {\n field.call(source, value);\n }\n } else {\n source.set(this.path, value);\n }\n },\n destroy: function () {\n if (this.observable) {\n this.source.unbind(CHANGE, this._change);\n if (this.currentSource) {\n this.currentSource.unbind(CHANGE, this._change);\n }\n }\n this.unbind();\n }\n });\n var EventBinding = Binding.extend({\n get: function () {\n var source = this.source, path = this.path, index = 0, handler;\n handler = source.get(path);\n while (!handler && source) {\n source = this.parents[++index];\n if (source instanceof ObservableObject) {\n handler = source.get(path);\n }\n }\n return proxy(handler, source);\n }\n });\n var TemplateBinding = Binding.extend({\n init: function (source, path, template) {\n var that = this;\n Binding.fn.init.call(that, source, path);\n that.template = template;\n },\n render: function (value) {\n var html;\n this.start(this.source);\n html = kendo.render(this.template, value);\n this.stop(this.source);\n return html;\n }\n });\n var Binder = Class.extend({\n init: function (element, bindings, options) {\n this.element = element;\n this.bindings = bindings;\n this.options = options;\n },\n bind: function (binding, attribute) {\n var that = this;\n binding = attribute ? binding[attribute] : binding;\n binding.bind(CHANGE, function (e) {\n that.refresh(attribute || e);\n });\n that.refresh(attribute);\n },\n destroy: function () {\n }\n });\n var TypedBinder = Binder.extend({\n dataType: function () {\n var dataType = this.element.getAttribute('data-type') || this.element.type || 'text';\n return dataType.toLowerCase();\n },\n parsedValue: function () {\n return this._parseValue(this.element.value, this.dataType());\n },\n _parseValue: function (value, dataType) {\n if (dataType == 'date') {\n value = kendo.parseDate(value, 'yyyy-MM-dd');\n } else if (dataType == 'datetime-local') {\n value = kendo.parseDate(value, [\n 'yyyy-MM-ddTHH:mm:ss',\n 'yyyy-MM-ddTHH:mm'\n ]);\n } else if (dataType == 'number') {\n value = kendo.parseFloat(value);\n } else if (dataType == 'boolean') {\n value = value.toLowerCase();\n if (kendo.parseFloat(value) !== null) {\n value = Boolean(kendo.parseFloat(value));\n } else {\n value = value.toLowerCase() === 'true';\n }\n }\n return value;\n }\n });\n binders.attr = Binder.extend({\n refresh: function (key) {\n this.element.setAttribute(key, this.bindings.attr[key].get());\n }\n });\n binders.css = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.classes = {};\n },\n refresh: function (className) {\n var element = $(this.element), binding = this.bindings.css[className], hasClass = this.classes[className] = binding.get();\n if (hasClass) {\n element.addClass(className);\n } else {\n element.removeClass(className);\n }\n }\n });\n binders.style = Binder.extend({\n refresh: function (key) {\n this.element.style[key] = this.bindings.style[key].get() || '';\n }\n });\n binders.enabled = Binder.extend({\n refresh: function () {\n if (this.bindings.enabled.get()) {\n this.element.removeAttribute('disabled');\n } else {\n this.element.setAttribute('disabled', 'disabled');\n }\n }\n });\n binders.readonly = Binder.extend({\n refresh: function () {\n if (this.bindings.readonly.get()) {\n this.element.setAttribute('readonly', 'readonly');\n } else {\n this.element.removeAttribute('readonly');\n }\n }\n });\n binders.disabled = Binder.extend({\n refresh: function () {\n if (this.bindings.disabled.get()) {\n this.element.setAttribute('disabled', 'disabled');\n } else {\n this.element.removeAttribute('disabled');\n }\n }\n });\n binders.events = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.handlers = {};\n },\n refresh: function (key) {\n var element = $(this.element), binding = this.bindings.events[key], handler = this.handlers[key];\n if (handler) {\n element.off(key, handler);\n }\n handler = this.handlers[key] = binding.get();\n element.on(key, binding.source, handler);\n },\n destroy: function () {\n var element = $(this.element), handler;\n for (handler in this.handlers) {\n element.off(handler, this.handlers[handler]);\n }\n }\n });\n binders.text = Binder.extend({\n refresh: function () {\n var text = this.bindings.text.get();\n var dataFormat = this.element.getAttribute('data-format') || '';\n if (text == null) {\n text = '';\n }\n $(this.element).text(kendo.toString(text, dataFormat));\n }\n });\n binders.visible = Binder.extend({\n refresh: function () {\n if (this.bindings.visible.get()) {\n this.element.style.display = '';\n } else {\n this.element.style.display = 'none';\n }\n }\n });\n binders.invisible = Binder.extend({\n refresh: function () {\n if (!this.bindings.invisible.get()) {\n this.element.style.display = '';\n } else {\n this.element.style.display = 'none';\n }\n }\n });\n binders.html = Binder.extend({\n refresh: function () {\n this.element.innerHTML = this.bindings.html.get();\n }\n });\n binders.value = TypedBinder.extend({\n init: function (element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = proxy(this.change, this);\n this.eventName = options.valueUpdate || CHANGE;\n $(this.element).on(this.eventName, this._change);\n this._initChange = false;\n },\n change: function () {\n this._initChange = this.eventName != CHANGE;\n this.bindings[VALUE].set(this.parsedValue());\n this._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var value = this.bindings[VALUE].get();\n if (value == null) {\n value = '';\n }\n var type = this.dataType();\n if (type == 'date') {\n value = kendo.toString(value, 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(value, 'yyyy-MM-ddTHH:mm:ss');\n }\n this.element.value = value;\n }\n this._initChange = false;\n },\n destroy: function () {\n $(this.element).off(this.eventName, this._change);\n }\n });\n binders.source = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n var source = this.bindings.source.get();\n if (source instanceof kendo.data.DataSource && options.autoBind !== false) {\n source.fetch();\n }\n },\n refresh: function (e) {\n var that = this, source = that.bindings.source.get();\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n if (e.action == 'add') {\n that.add(e.index, e.items);\n } else if (e.action == 'remove') {\n that.remove(e.index, e.items);\n } else if (e.action != 'itemchange') {\n that.render();\n }\n } else {\n that.render();\n }\n },\n container: function () {\n var element = this.element;\n if (element.nodeName.toLowerCase() == 'table') {\n if (!element.tBodies[0]) {\n element.appendChild(document.createElement('tbody'));\n }\n element = element.tBodies[0];\n }\n return element;\n },\n template: function () {\n var options = this.options, template = options.template, nodeName = this.container().nodeName.toLowerCase();\n if (!template) {\n if (nodeName == 'select') {\n if (options.valueField || options.textField) {\n template = kendo.format('', options.valueField || options.textField, options.textField || options.valueField);\n } else {\n template = '';\n }\n } else if (nodeName == 'tbody') {\n template = '#:data#';\n } else if (nodeName == 'ul' || nodeName == 'ol') {\n template = '
  • #:data#
  • ';\n } else {\n template = '#:data#';\n }\n template = kendo.template(template);\n }\n return template;\n },\n add: function (index, items) {\n var element = this.container(), parents, idx, length, child, clone = element.cloneNode(false), reference = element.children[index];\n $(clone).html(kendo.render(this.template(), items));\n if (clone.children.length) {\n parents = this.bindings.source._parents();\n for (idx = 0, length = items.length; idx < length; idx++) {\n child = clone.children[0];\n element.insertBefore(child, reference || null);\n bindElement(child, items[idx], this.options.roles, [items[idx]].concat(parents));\n }\n }\n },\n remove: function (index, items) {\n var idx, element = this.container();\n for (idx = 0; idx < items.length; idx++) {\n var child = element.children[index];\n unbindElementTree(child, true);\n if (child.parentNode == element) {\n element.removeChild(child);\n }\n }\n },\n render: function () {\n var source = this.bindings.source.get(), parents, idx, length, element = this.container(), template = this.template();\n if (source == null) {\n return;\n }\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n if (!(source instanceof ObservableArray) && toString.call(source) !== '[object Array]') {\n source = [source];\n }\n if (this.bindings.template) {\n unbindElementChildren(element, true);\n $(element).html(this.bindings.template.render(source));\n if (element.children.length) {\n parents = this.bindings.source._parents();\n for (idx = 0, length = source.length; idx < length; idx++) {\n bindElement(element.children[idx], source[idx], this.options.roles, [source[idx]].concat(parents));\n }\n }\n } else {\n $(element).html(kendo.render(template, source));\n }\n }\n });\n binders.input = {\n checked: TypedBinder.extend({\n init: function (element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = proxy(this.change, this);\n $(this.element).change(this._change);\n },\n change: function () {\n var element = this.element;\n var value = this.value();\n if (element.type == 'radio') {\n value = this.parsedValue();\n this.bindings[CHECKED].set(value);\n } else if (element.type == 'checkbox') {\n var source = this.bindings[CHECKED].get();\n var index;\n if (source instanceof ObservableArray) {\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n if (index > -1) {\n source.splice(index, 1);\n } else {\n source.push(value);\n }\n } else {\n this.bindings[CHECKED].set(value);\n }\n }\n },\n refresh: function () {\n var value = this.bindings[CHECKED].get(), source = value, type = this.dataType(), element = this.element;\n if (element.type == 'checkbox') {\n if (source instanceof ObservableArray) {\n var index = -1;\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n element.checked = index >= 0;\n } else {\n element.checked = source;\n }\n } else if (element.type == 'radio') {\n if (type == 'date') {\n value = kendo.toString(value, 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(value, 'yyyy-MM-ddTHH:mm:ss');\n }\n if (value !== null && typeof value !== 'undefined' && element.value === value.toString()) {\n element.checked = true;\n } else {\n element.checked = false;\n }\n }\n },\n value: function () {\n var element = this.element, value = element.value;\n if (element.type == 'checkbox') {\n value = element.checked;\n }\n return value;\n },\n destroy: function () {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n binders.select = {\n source: binders.source.extend({\n refresh: function (e) {\n var that = this, source = that.bindings.source.get();\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n if (e.action == 'add') {\n that.add(e.index, e.items);\n } else if (e.action == 'remove') {\n that.remove(e.index, e.items);\n } else if (e.action == 'itemchange' || e.action === undefined) {\n that.render();\n if (that.bindings.value) {\n if (that.bindings.value) {\n var val = retrievePrimitiveValues(that.bindings.value.get(), $(that.element).data('valueField'));\n if (val === null) {\n that.element.selectedIndex = -1;\n } else {\n that.element.value = val;\n }\n }\n }\n }\n } else {\n that.render();\n }\n }\n }),\n value: TypedBinder.extend({\n init: function (target, bindings, options) {\n TypedBinder.fn.init.call(this, target, bindings, options);\n this._change = proxy(this.change, this);\n $(this.element).change(this._change);\n },\n parsedValue: function () {\n var dataType = this.dataType();\n var values = [];\n var value, option, idx, length;\n for (idx = 0, length = this.element.options.length; idx < length; idx++) {\n option = this.element.options[idx];\n if (option.selected) {\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n values.push(this._parseValue(value, dataType));\n }\n }\n return values;\n },\n change: function () {\n var values = [], element = this.element, source, field = this.options.valueField || this.options.textField, valuePrimitive = this.options.valuePrimitive, option, valueIndex, value, idx, length;\n for (idx = 0, length = element.options.length; idx < length; idx++) {\n option = element.options[idx];\n if (option.selected) {\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n if (field) {\n values.push(value);\n } else {\n values.push(this._parseValue(value, this.dataType()));\n }\n }\n }\n if (field) {\n source = this.bindings.source.get();\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n for (valueIndex = 0; valueIndex < values.length; valueIndex++) {\n for (idx = 0, length = source.length; idx < length; idx++) {\n var sourceValue = source[idx].get(field);\n var match = String(sourceValue) === values[valueIndex];\n if (match) {\n values[valueIndex] = source[idx];\n break;\n }\n }\n }\n }\n value = this.bindings[VALUE].get();\n if (value instanceof ObservableArray) {\n value.splice.apply(value, [\n 0,\n value.length\n ].concat(values));\n } else if (!valuePrimitive && (value instanceof ObservableObject || value === null || value === undefined || !field)) {\n this.bindings[VALUE].set(values[0]);\n } else {\n this.bindings[VALUE].set(values[0].get(field));\n }\n },\n refresh: function () {\n var optionIndex, element = this.element, options = element.options, value = this.bindings[VALUE].get(), values = value, field = this.options.valueField || this.options.textField, found = false, type = this.dataType(), optionValue;\n if (!(values instanceof ObservableArray)) {\n values = new ObservableArray([value]);\n }\n element.selectedIndex = -1;\n for (var valueIndex = 0; valueIndex < values.length; valueIndex++) {\n value = values[valueIndex];\n if (field && value instanceof ObservableObject) {\n value = value.get(field);\n }\n if (type == 'date') {\n value = kendo.toString(values[valueIndex], 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(values[valueIndex], 'yyyy-MM-ddTHH:mm:ss');\n }\n for (optionIndex = 0; optionIndex < options.length; optionIndex++) {\n optionValue = options[optionIndex].value;\n if (optionValue === '' && value !== '') {\n optionValue = options[optionIndex].text;\n }\n if (value != null && optionValue == value.toString()) {\n options[optionIndex].selected = true;\n found = true;\n }\n }\n }\n },\n destroy: function () {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n function dataSourceBinding(bindingName, fieldName, setter) {\n return Binder.extend({\n init: function (widget, bindings, options) {\n var that = this;\n Binder.fn.init.call(that, widget.element[0], bindings, options);\n that.widget = widget;\n that._dataBinding = proxy(that.dataBinding, that);\n that._dataBound = proxy(that.dataBound, that);\n that._itemChange = proxy(that.itemChange, that);\n },\n itemChange: function (e) {\n bindElement(e.item[0], e.data, this._ns(e.ns), [e.data].concat(this.bindings[bindingName]._parents()));\n },\n dataBinding: function (e) {\n var idx, length, widget = this.widget, items = e.removedItems || widget.items();\n for (idx = 0, length = items.length; idx < length; idx++) {\n unbindElementTree(items[idx], false);\n }\n },\n _ns: function (ns) {\n ns = ns || kendo.ui;\n var all = [\n kendo.ui,\n kendo.dataviz.ui,\n kendo.mobile.ui\n ];\n all.splice($.inArray(ns, all), 1);\n all.unshift(ns);\n return kendo.rolesFromNamespaces(all);\n },\n dataBound: function (e) {\n var idx, length, widget = this.widget, items = e.addedItems || widget.items(), dataSource = widget[fieldName], view, parents, hds = kendo.data.HierarchicalDataSource;\n if (hds && dataSource instanceof hds) {\n return;\n }\n if (items.length) {\n view = e.addedDataItems || dataSource.flatView();\n parents = this.bindings[bindingName]._parents();\n for (idx = 0, length = view.length; idx < length; idx++) {\n if (items[idx]) {\n bindElement(items[idx], view[idx], this._ns(e.ns), [view[idx]].concat(parents));\n }\n }\n }\n },\n refresh: function (e) {\n var that = this, source, widget = that.widget, select, multiselect, dropdowntree;\n e = e || {};\n if (!e.action) {\n that.destroy();\n widget.bind('dataBinding', that._dataBinding);\n widget.bind('dataBound', that._dataBound);\n widget.bind('itemChange', that._itemChange);\n source = that.bindings[bindingName].get();\n if (widget[fieldName] instanceof kendo.data.DataSource && widget[fieldName] != source) {\n if (source instanceof kendo.data.DataSource) {\n widget[setter](source);\n } else if (source && source._dataSource) {\n widget[setter](source._dataSource);\n } else {\n select = kendo.ui.Select && widget instanceof kendo.ui.Select;\n multiselect = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect;\n dropdowntree = kendo.ui.DropDownTree && widget instanceof kendo.ui.DropDownTree;\n if (!dropdowntree) {\n widget[fieldName].data(source);\n } else {\n widget.treeview[fieldName].data(source);\n }\n if (that.bindings.value && (select || multiselect)) {\n widget.value(retrievePrimitiveValues(that.bindings.value.get(), widget.options.dataValueField));\n }\n }\n }\n }\n },\n destroy: function () {\n var widget = this.widget;\n widget.unbind('dataBinding', this._dataBinding);\n widget.unbind('dataBound', this._dataBound);\n widget.unbind('itemChange', this._itemChange);\n }\n });\n }\n binders.widget = {\n events: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this.handlers = {};\n },\n refresh: function (key) {\n var binding = this.bindings.events[key], handler = this.handlers[key];\n if (handler) {\n this.widget.unbind(key, handler);\n }\n handler = binding.get();\n this.handlers[key] = function (e) {\n e.data = binding.source;\n handler(e);\n if (e.data === binding.source) {\n delete e.data;\n }\n };\n this.widget.bind(key, this.handlers[key]);\n },\n destroy: function () {\n var handler;\n for (handler in this.handlers) {\n this.widget.unbind(handler, this.handlers[handler]);\n }\n }\n }),\n checked: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = proxy(this.change, this);\n this.widget.bind(CHANGE, this._change);\n },\n change: function () {\n this.bindings[CHECKED].set(this.value());\n },\n refresh: function () {\n this.widget.check(this.bindings[CHECKED].get() === true);\n },\n value: function () {\n var element = this.element, value = element.value;\n if (value == 'on' || value == 'off' || this.element.type == 'checkbox') {\n value = element.checked;\n }\n return value;\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n 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 };\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, Observable = kendo.Observable, SCRIPT = 'SCRIPT', INIT = 'init', SHOW = 'show', HIDE = 'hide', TRANSITION_START = 'transitionStart', TRANSITION_END = 'transitionEnd', ATTACH = 'attach', DETACH = 'detach', sizzleErrorRegExp = /unrecognized expression/;\n var View = Observable.extend({\n init: function (content, options) {\n var that = this;\n options = options || {};\n Observable.fn.init.call(that);\n that.content = content;\n that.id = kendo.guid();\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 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 this.element.css('display', '');\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 this._eachFragment(DETACH);\n this.element.detach();\n this.trigger(HIDE);\n },\n destroy: function () {\n var element = this.element;\n if (element) {\n kendo.unbind(element);\n kendo.destroy(element);\n element.remove();\n }\n },\n fragments: function (fragments) {\n $.extend(this._fragments, fragments);\n },\n _eachFragment: function (methodName) {\n for (var placeholder in this._fragments) {\n this._fragments[placeholder][methodName](this, placeholder);\n }\n },\n _createElement: function () {\n var that = this, wrapper = '<' + that.tagName + ' />', element, content;\n try {\n content = $(document.getElementById(that.content) || that.content);\n if (content[0].tagName === SCRIPT) {\n content = content.html();\n }\n } catch (e) {\n if (sizzleErrorRegExp.test(e.message)) {\n content = that.content;\n }\n }\n if (typeof content === 'string') {\n content = content.replace(/^\\s+|\\s+$/g, '');\n if (that._evalTemplate) {\n content = kendo.template(content)(that.model || {});\n }\n element = $(wrapper).append(content);\n if (!that._wrap) {\n element = element.contents();\n }\n } else {\n element = content;\n if (that._evalTemplate) {\n var result = $(kendo.template($('
    ').append(element.clone(true)).html())(that.model || {}));\n if ($.contains(document, element[0])) {\n element.replaceWith(result);\n }\n element = result;\n }\n if (that._wrap) {\n element = element.wrapAll(wrapper).parent();\n }\n }\n return element;\n }\n });\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 });\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, touchInfrao) {\n extend(this, {\n x: new TouchAxis('X', touchInfrao.location),\n y: new TouchAxis('Y', touchInfrao.location),\n type: touchInfrao.type,\n useClickAsTap: userEvents.useClickAsTap,\n threshold: userEvents.threshold || THRESHOLD[touchInfrao.type],\n userEvents: userEvents,\n target: target,\n currentTarget: touchInfrao.currentTarget,\n initialTouch: touchInfrao.target,\n id: touchInfrao.id,\n pressEvent: touchInfrao,\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 (touchInfrao) {\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, touchInfrao);\n } else {\n that._trigger(DOUBLETAP, touchInfrao);\n }\n that.userEvents._clicks = 0;\n }, CLICK_DELAY);\n }\n },\n _hold: function () {\n this._trigger(HOLD, this.pressEvent);\n },\n move: function (touchInfrao) {\n var that = this;\n if (that._finished) {\n return;\n }\n that.x.move(touchInfrao.location);\n that.y.move(touchInfrao.location);\n if (!that._moved) {\n if (that._withinIgnoreThreshold()) {\n return;\n }\n if (!UserEvents.current || UserEvents.current === that.userEvents) {\n that._start(touchInfrao);\n } else {\n return that.dispose();\n }\n }\n if (!that._finished) {\n that._trigger(MOVE, touchInfrao);\n }\n },\n end: function (touchInfrao) {\n this.endTime = now();\n if (this._finished) {\n return;\n }\n this._finished = true;\n this._trigger(RELEASE, touchInfrao);\n if (this._moved) {\n this._trigger(END, touchInfrao);\n } else {\n if (!this.useClickAsTap) {\n if (this.supportDoubleTap) {\n this._tap(touchInfrao);\n } else {\n this._trigger(TAP, touchInfrao);\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 (touchInfrao) {\n clearTimeout(this._holdTimeout);\n this.startTime = now();\n this._moved = true;\n this._trigger(START, touchInfrao);\n },\n _trigger: function (name, touchInfrao) {\n var that = this, jQueryEvent = touchInfrao.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, touchInfrao, 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 touchInfrao = touches[idx];\n matchingTouch = dict[touchInfrao.id];\n if (matchingTouch) {\n matchingTouch[methodName](touchInfrao);\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._trigger(HOLD, e)) {\n this.userEvents.cancel();\n } else {\n this._activated = true;\n }\n },\n _drag: function (e) {\n e.preventDefault();\n var cursorElement = this._elementUnderCursor(e);\n if (this.options.autoScroll && this._cursorElement !== cursorElement) {\n this._scrollableParent = findScrollableParent(cursorElement);\n this._cursorElement = cursorElement;\n }\n this._lastEvent = e;\n this._processMovement(e, cursorElement);\n if (this.options.autoScroll) {\n if (this._scrollableParent[0]) {\n var velocity = autoScrollVelocity(e.x.location, e.y.location, scrollableViewPort(this._scrollableParent));\n this._scrollCompenstation = $.extend({}, this.hintOffset);\n this._scrollVelocity = velocity;\n if (velocity.y === 0 && velocity.x === 0) {\n clearInterval(this._scrollInterval);\n this._scrollInterval = null;\n } else if (!this._scrollInterval) {\n this._scrollInterval = setInterval($.proxy(this, '_autoScroll'), 50);\n }\n }\n }\n if (this.hint) {\n this._updateHint(e);\n }\n },\n _processMovement: function (e, cursorElement) {\n this._withDropTarget(cursorElement, function (target, targetElement) {\n if (!target) {\n if (lastDropTarget) {\n lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\n lastDropTarget = null;\n }\n return;\n }\n if (lastDropTarget) {\n if (targetElement === lastDropTarget.targetElement) {\n return;\n }\n lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\n }\n target._trigger(DRAGENTER, extend(e, { dropTarget: $(targetElement) }));\n lastDropTarget = extend(target, { targetElement: targetElement });\n });\n this._trigger(DRAG, extend(e, {\n dropTarget: lastDropTarget,\n elementUnderCursor: cursorElement\n }));\n },\n _autoScroll: function () {\n var parent = this._scrollableParent[0], velocity = this._scrollVelocity, compensation = this._scrollCompenstation;\n if (!parent) {\n return;\n }\n var cursorElement = this._elementUnderCursor(this._lastEvent);\n this._processMovement(this._lastEvent, cursorElement);\n var yIsScrollable, xIsScrollable;\n var isRootNode = parent === scrollableRoot()[0];\n if (isRootNode) {\n yIsScrollable = document.body.scrollHeight > $window.height();\n xIsScrollable = document.body.scrollWidth > $window.width();\n } else {\n yIsScrollable = parent.offsetHeight <= parent.scrollHeight;\n xIsScrollable = parent.offsetWidth <= parent.scrollWidth;\n }\n var yDelta = parent.scrollTop + velocity.y;\n var yInBounds = yIsScrollable && yDelta > 0 && yDelta < parent.scrollHeight;\n var xDelta = parent.scrollLeft + velocity.x;\n var xInBounds = xIsScrollable && xDelta > 0 && xDelta < parent.scrollWidth;\n if (yInBounds) {\n parent.scrollTop += velocity.y;\n }\n if (xInBounds) {\n parent.scrollLeft += velocity.x;\n }\n if (this.hint && isRootNode && (xInBounds || yInBounds)) {\n if (yInBounds) {\n compensation.top += velocity.y;\n }\n if (xInBounds) {\n compensation.left += velocity.x;\n }\n this.hint.css(compensation);\n }\n },\n _end: function (e) {\n this._withDropTarget(this._elementUnderCursor(e), function (target, targetElement) {\n if (target) {\n target._drop(extend({}, e, { dropTarget: $(targetElement) }));\n lastDropTarget = null;\n }\n });\n this._cancel(this._trigger(DRAGEND, e));\n },\n _cancel: function (isDefaultPrevented) {\n var that = this;\n that._scrollableParent = null;\n this._cursorElement = null;\n clearInterval(this._scrollInterval);\n that._activated = false;\n if (that.hint && !that.dropped) {\n setTimeout(function () {\n that.hint.stop(true, true);\n if (isDefaultPrevented) {\n that._afterEndHandler();\n } else {\n that.hint.animate(that.currentTargetOffset, 'fast', that._afterEndHandler);\n }\n }, 0);\n } else {\n that._afterEnd();\n }\n },\n _trigger: function (eventName, e) {\n var that = this;\n return that.trigger(eventName, extend({}, e.event, {\n x: e.x,\n y: e.y,\n currentTarget: that.currentTarget,\n initialTarget: e.touch ? e.touch.initialTouch : null,\n dropTarget: e.dropTarget,\n elementUnderCursor: e.elementUnderCursor\n }));\n },\n _elementUnderCursor: function (e) {\n var target = elementUnderCursor(e), hint = this.hint;\n if (hint && contains(hint[0], target)) {\n hint.hide();\n target = elementUnderCursor(e);\n if (!target) {\n target = elementUnderCursor(e);\n }\n hint.show();\n }\n return target;\n },\n _withDropTarget: function (element, callback) {\n var result, group = this.options.group, targets = dropTargets[group], areas = dropAreas[group];\n if (targets && targets.length || areas && areas.length) {\n result = checkTarget(element, targets, areas);\n if (result) {\n callback(result.target, result.targetElement);\n } else {\n callback();\n }\n }\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that._afterEnd();\n that.userEvents.destroy();\n this._scrollableParent = null;\n this._cursorElement = null;\n clearInterval(this._scrollInterval);\n that.currentTarget = null;\n },\n _afterEnd: function () {\n var that = this;\n if (that.hint) {\n that.hint.remove();\n }\n delete draggables[that.options.group];\n that.trigger('destroy');\n that.trigger(HINTDESTROYED);\n $(document).off(KEYUP, that._captureEscape);\n }\n });\n kendo.ui.plugin(DropTarget);\n kendo.ui.plugin(DropTargetArea);\n kendo.ui.plugin(Draggable);\n kendo.TapCapture = TapCapture;\n kendo.containerBoundaries = containerBoundaries;\n extend(kendo.ui, {\n Pane: Pane,\n PaneDimensions: PaneDimensions,\n Movable: Movable\n });\n function scrollableViewPort(element) {\n var root = scrollableRoot()[0], offset, top, left;\n if (element[0] === root) {\n top = root.scrollTop;\n left = root.scrollLeft;\n return {\n top: top,\n left: left,\n bottom: top + $window.height(),\n right: left + $window.width()\n };\n } else {\n offset = element.offset();\n offset.bottom = offset.top + element.height();\n offset.right = offset.left + element.width();\n return offset;\n }\n }\n function scrollableRoot() {\n return $(kendo.support.browser.edge || kendo.support.browser.safari ? document.body : document.documentElement);\n }\n function findScrollableParent(element) {\n var root = scrollableRoot();\n if (!element || element === document.body || element === document.documentElement) {\n return root;\n }\n var parent = $(element)[0];\n while (parent && !kendo.isScrollable(parent) && parent !== document.body) {\n parent = parent.parentNode;\n }\n if (parent === document.body) {\n return root;\n }\n return $(parent);\n }\n function autoScrollVelocity(mouseX, mouseY, rect) {\n var velocity = {\n x: 0,\n y: 0\n };\n var AUTO_SCROLL_AREA = 50;\n if (mouseX - rect.left < AUTO_SCROLL_AREA) {\n velocity.x = -(AUTO_SCROLL_AREA - (mouseX - rect.left));\n } else if (rect.right - mouseX < AUTO_SCROLL_AREA) {\n velocity.x = AUTO_SCROLL_AREA - (rect.right - mouseX);\n }\n if (mouseY - rect.top < AUTO_SCROLL_AREA) {\n velocity.y = -(AUTO_SCROLL_AREA - (mouseY - rect.top));\n } else if (rect.bottom - mouseY < AUTO_SCROLL_AREA) {\n velocity.y = AUTO_SCROLL_AREA - (rect.bottom - mouseY);\n }\n return velocity;\n }\n kendo.ui.Draggable.utils = {\n autoScrollVelocity: autoScrollVelocity,\n scrollableViewPort: scrollableViewPort,\n findScrollableParent: findScrollableParent\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.scroller', [\n 'kendo.fx',\n 'kendo.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.scroller',\n name: 'Scroller',\n category: 'mobile',\n description: 'The Kendo Mobile Scroller widget enables touch friendly kinetic scrolling for the contents of a given DOM element.',\n depends: [\n 'fx',\n 'draganddrop'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, fx = kendo.effects, ui = mobile.ui, proxy = $.proxy, extend = $.extend, Widget = ui.Widget, Class = kendo.Class, Movable = kendo.ui.Movable, Pane = kendo.ui.Pane, PaneDimensions = kendo.ui.PaneDimensions, Transition = fx.Transition, Animation = fx.Animation, abs = Math.abs, SNAPBACK_DURATION = 500, SCROLLBAR_OPACITY = 0.7, FRICTION = 0.96, VELOCITY_MULTIPLIER = 10, MAX_VELOCITY = 55, OUT_OF_BOUNDS_FRICTION = 0.5, ANIMATED_SCROLLER_PRECISION = 5, RELEASECLASS = 'km-scroller-release', REFRESHCLASS = 'km-scroller-refresh', PULL = 'pull', CHANGE = 'change', RESIZE = 'resize', SCROLL = 'scroll', MOUSE_WHEEL_ID = 2;\n var ZoomSnapBack = Animation.extend({\n init: function (options) {\n var that = this;\n Animation.fn.init.call(that);\n extend(that, options);\n that.userEvents.bind('gestureend', proxy(that.start, that));\n that.tapCapture.bind('press', proxy(that.cancel, that));\n },\n enabled: function () {\n return this.movable.scale < this.dimensions.minScale;\n },\n done: function () {\n return this.dimensions.minScale - this.movable.scale < 0.01;\n },\n tick: function () {\n var movable = this.movable;\n movable.scaleWith(1.1);\n this.dimensions.rescale(movable.scale);\n },\n onEnd: function () {\n var movable = this.movable;\n movable.scaleTo(this.dimensions.minScale);\n this.dimensions.rescale(movable.scale);\n }\n });\n var DragInertia = Animation.extend({\n init: function (options) {\n var that = this;\n Animation.fn.init.call(that);\n extend(that, options, {\n transition: new Transition({\n axis: options.axis,\n movable: options.movable,\n onEnd: function () {\n that._end();\n }\n })\n });\n that.tapCapture.bind('press', function () {\n that.cancel();\n });\n that.userEvents.bind('end', proxy(that.start, that));\n that.userEvents.bind('gestureend', proxy(that.start, that));\n that.userEvents.bind('tap', proxy(that.onEnd, that));\n },\n onCancel: function () {\n this.transition.cancel();\n },\n freeze: function (location) {\n var that = this;\n that.cancel();\n that._moveTo(location);\n },\n onEnd: function () {\n var that = this;\n if (that.paneAxis.outOfBounds()) {\n that._snapBack();\n } else {\n that._end();\n }\n },\n done: function () {\n return abs(this.velocity) < 1;\n },\n start: function (e) {\n var that = this, velocity;\n if (!that.dimension.enabled) {\n return;\n }\n if (that.paneAxis.outOfBounds()) {\n that._snapBack();\n } else {\n velocity = e.touch.id === MOUSE_WHEEL_ID ? 0 : e.touch[that.axis].velocity;\n that.velocity = Math.max(Math.min(velocity * that.velocityMultiplier, MAX_VELOCITY), -MAX_VELOCITY);\n that.tapCapture.captureNext();\n Animation.fn.start.call(that);\n }\n },\n tick: function () {\n var that = this, dimension = that.dimension, friction = that.paneAxis.outOfBounds() ? OUT_OF_BOUNDS_FRICTION : that.friction, delta = that.velocity *= friction, location = that.movable[that.axis] + delta;\n if (!that.elastic && dimension.outOfBounds(location)) {\n location = Math.max(Math.min(location, dimension.max), dimension.min);\n that.velocity = 0;\n }\n that.movable.moveAxis(that.axis, location);\n },\n _end: function () {\n this.tapCapture.cancelCapture();\n this.end();\n },\n _snapBack: function () {\n var that = this, dimension = that.dimension, snapBack = that.movable[that.axis] > dimension.max ? dimension.max : dimension.min;\n that._moveTo(snapBack);\n },\n _moveTo: function (location) {\n this.transition.moveTo({\n location: location,\n duration: SNAPBACK_DURATION,\n ease: Transition.easeOutExpo\n });\n }\n });\n var AnimatedScroller = Animation.extend({\n init: function (options) {\n var that = this;\n kendo.effects.Animation.fn.init.call(this);\n extend(that, options, {\n origin: {},\n destination: {},\n offset: {}\n });\n },\n tick: function () {\n this._updateCoordinates();\n this.moveTo(this.origin);\n },\n done: function () {\n return abs(this.offset.y) < ANIMATED_SCROLLER_PRECISION && abs(this.offset.x) < ANIMATED_SCROLLER_PRECISION;\n },\n onEnd: function () {\n this.moveTo(this.destination);\n if (this.callback) {\n this.callback.call();\n }\n },\n setCoordinates: function (from, to) {\n this.offset = {};\n this.origin = from;\n this.destination = to;\n },\n setCallback: function (callback) {\n if (callback && kendo.isFunction(callback)) {\n this.callback = callback;\n } else {\n callback = undefined;\n }\n },\n _updateCoordinates: function () {\n this.offset = {\n x: (this.destination.x - this.origin.x) / 4,\n y: (this.destination.y - this.origin.y) / 4\n };\n this.origin = {\n y: this.origin.y + this.offset.y,\n x: this.origin.x + this.offset.x\n };\n }\n });\n var ScrollBar = Class.extend({\n init: function (options) {\n var that = this, horizontal = options.axis === 'x', element = $('
    ');\n extend(that, options, {\n element: element,\n elementSize: 0,\n movable: new Movable(element),\n scrollMovable: options.movable,\n alwaysVisible: options.alwaysVisible,\n size: horizontal ? 'width' : 'height'\n });\n that.scrollMovable.bind(CHANGE, proxy(that.refresh, that));\n that.container.append(element);\n if (options.alwaysVisible) {\n that.show();\n }\n },\n refresh: function () {\n var that = this, axis = that.axis, dimension = that.dimension, paneSize = dimension.size, scrollMovable = that.scrollMovable, sizeRatio = paneSize / dimension.total, position = Math.round(-scrollMovable[axis] * sizeRatio), size = Math.round(paneSize * sizeRatio);\n if (sizeRatio >= 1) {\n this.element.css('display', 'none');\n } else {\n this.element.css('display', '');\n }\n if (position + size > paneSize) {\n size = paneSize - position;\n } else if (position < 0) {\n size += position;\n position = 0;\n }\n if (that.elementSize != size) {\n that.element.css(that.size, size + 'px');\n that.elementSize = size;\n }\n that.movable.moveAxis(axis, position);\n },\n show: function () {\n this.element.css({\n opacity: SCROLLBAR_OPACITY,\n visibility: 'visible'\n });\n },\n hide: function () {\n if (!this.alwaysVisible) {\n this.element.css({ opacity: 0 });\n }\n }\n });\n var Scroller = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n that._native = that.options.useNative && kendo.support.hasNativeScrolling;\n if (that._native) {\n element.addClass('km-native-scroller').prepend('
    ');\n extend(that, {\n scrollElement: element,\n fixedContainer: element.children().first()\n });\n return;\n }\n element.css('overflow', 'hidden').addClass('km-scroll-wrapper').wrapInner('
    ').prepend('
    ');\n var inner = element.children().eq(1), tapCapture = new kendo.TapCapture(element), movable = new Movable(inner), dimensions = new PaneDimensions({\n element: inner,\n container: element,\n forcedEnabled: that.options.zoom\n }), avoidScrolling = this.options.avoidScrolling, userEvents = new kendo.UserEvents(element, {\n touchAction: 'pan-y',\n fastTap: true,\n allowSelection: true,\n preventDragEvent: true,\n captureUpIfMoved: true,\n multiTouch: that.options.zoom,\n supportDoubleTap: that.options.supportDoubleTap,\n start: function (e) {\n dimensions.refresh();\n var velocityX = abs(e.x.velocity), velocityY = abs(e.y.velocity), horizontalSwipe = velocityX * 2 >= velocityY, originatedFromFixedContainer = $.contains(that.fixedContainer[0], e.event.target), verticalSwipe = velocityY * 2 >= velocityX;\n if (!originatedFromFixedContainer && !avoidScrolling(e) && that.enabled && (dimensions.x.enabled && horizontalSwipe || dimensions.y.enabled && verticalSwipe)) {\n userEvents.capture();\n } else {\n userEvents.cancel();\n }\n }\n }), pane = new Pane({\n movable: movable,\n dimensions: dimensions,\n userEvents: userEvents,\n elastic: that.options.elastic\n }), zoomSnapBack = new ZoomSnapBack({\n movable: movable,\n dimensions: dimensions,\n userEvents: userEvents,\n tapCapture: tapCapture\n }), animatedScroller = new AnimatedScroller({\n moveTo: function (coordinates) {\n that.scrollTo(coordinates.x, coordinates.y);\n }\n });\n movable.bind(CHANGE, function () {\n that.scrollTop = -movable.y;\n that.scrollLeft = -movable.x;\n that.trigger(SCROLL, {\n scrollTop: that.scrollTop,\n scrollLeft: that.scrollLeft\n });\n });\n if (that.options.mousewheelScrolling) {\n element.on('DOMMouseScroll mousewheel', proxy(this, '_wheelScroll'));\n }\n extend(that, {\n movable: movable,\n dimensions: dimensions,\n zoomSnapBack: zoomSnapBack,\n animatedScroller: animatedScroller,\n userEvents: userEvents,\n pane: pane,\n tapCapture: tapCapture,\n pulled: false,\n enabled: true,\n scrollElement: inner,\n scrollTop: 0,\n scrollLeft: 0,\n fixedContainer: element.children().first()\n });\n that._initAxis('x');\n that._initAxis('y');\n that._wheelEnd = function () {\n that._wheel = false;\n that.userEvents.end(0, that._wheelY);\n };\n dimensions.refresh();\n if (that.options.pullToRefresh) {\n that._initPullToRefresh();\n }\n },\n _wheelScroll: function (e) {\n if (!this._wheel) {\n this._wheel = true;\n this._wheelY = 0;\n this.userEvents.press(0, this._wheelY);\n }\n clearTimeout(this._wheelTimeout);\n this._wheelTimeout = setTimeout(this._wheelEnd, 50);\n var delta = kendo.wheelDeltaY(e);\n if (delta) {\n this._wheelY += delta;\n this.userEvents.move(0, this._wheelY);\n }\n e.preventDefault();\n },\n makeVirtual: function () {\n this.dimensions.y.makeVirtual();\n },\n virtualSize: function (min, max) {\n this.dimensions.y.virtualSize(min, max);\n },\n height: function () {\n return this.dimensions.y.size;\n },\n scrollHeight: function () {\n return this.scrollElement[0].scrollHeight;\n },\n scrollWidth: function () {\n return this.scrollElement[0].scrollWidth;\n },\n options: {\n name: 'Scroller',\n zoom: false,\n pullOffset: 140,\n visibleScrollHints: false,\n elastic: true,\n useNative: false,\n mousewheelScrolling: true,\n avoidScrolling: function () {\n return false;\n },\n pullToRefresh: false,\n messages: {\n pullTemplate: 'Pull to refresh',\n releaseTemplate: 'Release to refresh',\n refreshTemplate: 'Refreshing'\n }\n },\n events: [\n PULL,\n SCROLL,\n RESIZE\n ],\n _resize: function () {\n if (!this._native) {\n this.contentResized();\n }\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n if (options.pullToRefresh) {\n that._initPullToRefresh();\n }\n },\n reset: function () {\n if (this._native) {\n this.scrollElement.scrollTop(0);\n } else {\n this.movable.moveTo({\n x: 0,\n y: 0\n });\n this._scale(1);\n }\n },\n contentResized: function () {\n this.dimensions.refresh();\n if (this.pane.x.outOfBounds()) {\n this.movable.moveAxis('x', this.dimensions.x.min);\n }\n if (this.pane.y.outOfBounds()) {\n this.movable.moveAxis('y', this.dimensions.y.min);\n }\n },\n zoomOut: function () {\n var dimensions = this.dimensions;\n dimensions.refresh();\n this._scale(dimensions.fitScale);\n this.movable.moveTo(dimensions.centerCoordinates());\n },\n enable: function () {\n this.enabled = true;\n },\n disable: function () {\n this.enabled = false;\n },\n scrollTo: function (x, y) {\n if (this._native) {\n this.scrollElement.scrollLeft(abs(x));\n this.scrollElement.scrollTop(abs(y));\n } else {\n this.dimensions.refresh();\n this.movable.moveTo({\n x: x,\n y: y\n });\n }\n },\n animatedScrollTo: function (x, y, callback) {\n var from, to;\n if (this._native) {\n this.scrollTo(x, y);\n } else {\n from = {\n x: this.movable.x,\n y: this.movable.y\n };\n to = {\n x: x,\n y: y\n };\n this.animatedScroller.setCoordinates(from, to);\n this.animatedScroller.setCallback(callback);\n this.animatedScroller.start();\n }\n },\n pullHandled: function () {\n var that = this;\n that.refreshHint.removeClass(REFRESHCLASS);\n that.hintContainer.html(that.pullTemplate({}));\n that.yinertia.onEnd();\n that.xinertia.onEnd();\n that.userEvents.cancel();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n if (this.userEvents) {\n this.userEvents.destroy();\n }\n },\n _scale: function (scale) {\n this.dimensions.rescale(scale);\n this.movable.scaleTo(scale);\n },\n _initPullToRefresh: function () {\n var that = this;\n that.dimensions.y.forceEnabled();\n that.pullTemplate = kendo.template(that.options.messages.pullTemplate);\n that.releaseTemplate = kendo.template(that.options.messages.releaseTemplate);\n that.refreshTemplate = kendo.template(that.options.messages.refreshTemplate);\n that.scrollElement.prepend('' + that.pullTemplate({}) + '');\n that.refreshHint = that.scrollElement.children().first();\n that.hintContainer = that.refreshHint.children('.km-template');\n that.pane.y.bind('change', proxy(that._paneChange, that));\n that.userEvents.bind('end', proxy(that._dragEnd, that));\n },\n _dragEnd: function () {\n var that = this;\n if (!that.pulled) {\n return;\n }\n that.pulled = false;\n that.refreshHint.removeClass(RELEASECLASS).addClass(REFRESHCLASS);\n that.hintContainer.html(that.refreshTemplate({}));\n that.yinertia.freeze(that.options.pullOffset / 2);\n that.trigger('pull');\n },\n _paneChange: function () {\n var that = this;\n if (that.movable.y / OUT_OF_BOUNDS_FRICTION > that.options.pullOffset) {\n if (!that.pulled) {\n that.pulled = true;\n that.refreshHint.removeClass(REFRESHCLASS).addClass(RELEASECLASS);\n that.hintContainer.html(that.releaseTemplate({}));\n }\n } else if (that.pulled) {\n that.pulled = false;\n that.refreshHint.removeClass(RELEASECLASS);\n that.hintContainer.html(that.pullTemplate({}));\n }\n },\n _initAxis: function (axis) {\n var that = this, movable = that.movable, dimension = that.dimensions[axis], tapCapture = that.tapCapture, paneAxis = that.pane[axis], scrollBar = new ScrollBar({\n axis: axis,\n movable: movable,\n dimension: dimension,\n container: that.element,\n alwaysVisible: that.options.visibleScrollHints\n });\n dimension.bind(CHANGE, function () {\n scrollBar.refresh();\n });\n paneAxis.bind(CHANGE, function () {\n scrollBar.show();\n });\n that[axis + 'inertia'] = new DragInertia({\n axis: axis,\n paneAxis: paneAxis,\n movable: movable,\n tapCapture: tapCapture,\n userEvents: that.userEvents,\n dimension: dimension,\n elastic: that.options.elastic,\n friction: that.options.friction || FRICTION,\n velocityMultiplier: that.options.velocityMultiplier || VELOCITY_MULTIPLIER,\n end: function () {\n scrollBar.hide();\n that.trigger('scrollEnd', {\n axis: axis,\n scrollTop: that.scrollTop,\n scrollLeft: that.scrollLeft\n });\n }\n });\n }\n });\n ui.plugin(Scroller);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.popup', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'popup',\n name: 'Pop-up',\n category: 'framework',\n depends: ['core'],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, Class = kendo.Class, support = kendo.support, getOffset = kendo.getOffset, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, OPEN = 'open', CLOSE = 'close', DEACTIVATE = 'deactivate', ACTIVATE = 'activate', CENTER = 'center', LEFT = 'left', RIGHT = 'right', TOP = 'top', BOTTOM = 'bottom', ABSOLUTE = 'absolute', HIDDEN = 'hidden', BODY = 'body', LOCATION = 'location', POSITION = 'position', VISIBLE = 'visible', EFFECTS = 'effects', ACTIVE = 'k-state-active', ACTIVEBORDER = 'k-state-border', ACTIVEBORDERREGEXP = /k-state-border-(\\w+)/, ACTIVECHILDREN = '.k-picker-wrap, .k-dropdown-wrap, .k-link', MOUSEDOWN = 'down', DOCUMENT_ELEMENT = $(document.documentElement), proxy = $.proxy, WINDOW = $(window), SCROLL = 'scroll', cssPrefix = support.transitions.css, TRANSFORM = cssPrefix + 'transform', extend = $.extend, NS = '.kendoPopup', styles = [\n 'font-size',\n 'font-family',\n 'font-stretch',\n 'font-style',\n 'font-weight',\n 'line-height'\n ];\n function contains(container, target) {\n if (!container || !target) {\n return false;\n }\n return container === target || $.contains(container, target);\n }\n var Popup = Widget.extend({\n init: function (element, options) {\n var that = this, parentPopup;\n options = options || {};\n if (options.isRtl) {\n options.origin = options.origin || BOTTOM + ' ' + RIGHT;\n options.position = options.position || TOP + ' ' + RIGHT;\n }\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n that.collisions = options.collision ? options.collision.split(' ') : [];\n that.downEvent = kendo.applyEventMap(MOUSEDOWN, kendo.guid());\n if (that.collisions.length === 1) {\n that.collisions.push(that.collisions[0]);\n }\n parentPopup = $(that.options.anchor).closest('.k-popup,.k-group').filter(':not([class^=km-])');\n options.appendTo = $($(options.appendTo)[0] || parentPopup[0] || document.body);\n that.element.hide().addClass('k-popup k-group k-reset').toggleClass('k-rtl', !!options.isRtl).css({ position: ABSOLUTE }).appendTo(options.appendTo).attr('aria-hidden', true).on('mouseenter' + NS, function () {\n that._hovered = true;\n }).on('wheel' + NS, function (e) {\n var list = $(e.target).find('.k-list');\n var scrollArea = list.parent();\n if (list.length && list.is(':visible') && (scrollArea.scrollTop() === 0 && e.originalEvent.deltaY < 0 || scrollArea.scrollTop() === scrollArea.prop('scrollHeight') - scrollArea.prop('offsetHeight') && e.originalEvent.deltaY > 0)) {\n e.preventDefault();\n }\n }).on('mouseleave' + NS, function () {\n that._hovered = false;\n });\n that.wrapper = $();\n if (options.animation === false) {\n options.animation = {\n open: { effects: {} },\n close: {\n hide: true,\n effects: {}\n }\n };\n }\n extend(options.animation.open, {\n complete: function () {\n that.wrapper.css({ overflow: VISIBLE });\n that._activated = true;\n that._trigger(ACTIVATE);\n }\n });\n extend(options.animation.close, {\n complete: function () {\n that._animationClose();\n }\n });\n that._mousedownProxy = function (e) {\n that._mousedown(e);\n };\n if (support.mobileOS.android) {\n that._resizeProxy = function (e) {\n setTimeout(function () {\n that._resize(e);\n }, 600);\n };\n } else {\n that._resizeProxy = function (e) {\n that._resize(e);\n };\n }\n if (options.toggleTarget) {\n $(options.toggleTarget).on(options.toggleEvent + NS, $.proxy(that.toggle, that));\n }\n },\n events: [\n OPEN,\n ACTIVATE,\n CLOSE,\n DEACTIVATE\n ],\n options: {\n name: 'Popup',\n toggleEvent: 'click',\n origin: BOTTOM + ' ' + LEFT,\n position: TOP + ' ' + LEFT,\n anchor: BODY,\n appendTo: null,\n collision: 'flip fit',\n viewport: window,\n copyAnchorStyles: true,\n autosize: false,\n modal: false,\n adjustSize: {\n width: 0,\n height: 0\n },\n animation: {\n open: {\n effects: 'slideIn:down',\n transition: true,\n duration: 200\n },\n close: {\n duration: 100,\n hide: true\n }\n }\n },\n _animationClose: function () {\n var that = this;\n var location = that.wrapper.data(LOCATION);\n that.wrapper.hide();\n if (location) {\n that.wrapper.css(location);\n }\n if (that.options.anchor != BODY) {\n that._hideDirClass();\n }\n that._closing = false;\n that._trigger(DEACTIVATE);\n },\n destroy: function () {\n var that = this, options = that.options, element = that.element.off(NS), parent;\n Widget.fn.destroy.call(that);\n if (options.toggleTarget) {\n $(options.toggleTarget).off(NS);\n }\n if (!options.modal) {\n DOCUMENT_ELEMENT.unbind(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.unbind(that.downEvent, that._mousedownProxy).bind(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.unbind(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 this._scrollableParents()[method](SCROLL, this._resizeProxy);\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 ], f);\n}(function () {\n var __meta__ = {\n id: 'tooltip',\n name: 'Tooltip',\n category: 'web',\n description: 'The Tooltip widget displays a popup hint for a given html element.',\n depends: [\n 'core',\n 'popup'\n ],\n features: [{\n id: 'tooltip-fx',\n name: 'Animation',\n description: 'Support for animation',\n depends: ['fx']\n }]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, Popup = kendo.ui.Popup, isFunction = kendo.isFunction, isPlainObject = $.isPlainObject, extend = $.extend, proxy = $.proxy, DOCUMENT = $(document), isLocalUrl = kendo.isLocalUrl, ARIAIDSUFFIX = '_tt_active', DESCRIBEDBY = 'aria-describedby', SHOW = 'show', HIDE = 'hide', ERROR = 'error', CONTENTLOAD = 'contentLoad', REQUESTSTART = 'requestStart', KCONTENTFRAME = 'k-content-frame', TEMPLATE = '
    #if (!autoHide) {#
    #}#' + '
    ' + '#if (callout){ #
    #}#' + '
    ', IFRAMETEMPLATE = kendo.template(''), NS = '.kendoTooltip', POSITIONS = {\n bottom: {\n origin: 'bottom center',\n position: 'top center'\n },\n top: {\n origin: 'top center',\n position: 'bottom center'\n },\n left: {\n origin: 'center left',\n position: 'center right',\n collision: 'fit flip'\n },\n right: {\n origin: 'center right',\n position: 'center left',\n collision: 'fit flip'\n },\n center: {\n position: 'center center',\n origin: 'center center'\n }\n }, REVERSE = {\n 'top': 'bottom',\n 'bottom': 'top',\n 'left': 'right',\n 'right': 'left',\n 'center': 'center'\n }, DIRCLASSES = {\n bottom: 'n',\n top: 's',\n left: 'e',\n right: 'w',\n center: 'n'\n }, DIMENSIONS = {\n 'horizontal': {\n offset: 'top',\n size: 'outerHeight'\n },\n 'vertical': {\n offset: 'left',\n size: 'outerWidth'\n }\n }, DEFAULTCONTENT = function (e) {\n return e.target.data(kendo.ns + 'title');\n };\n function restoreTitle(element) {\n while (element.length) {\n if (restoreTitleAttributeForElement(element)) {\n break;\n }\n element = element.parent();\n }\n }\n function restoreTitleAttributeForElement(element) {\n var title = element.data(kendo.ns + 'title');\n if (title) {\n element.attr('title', title);\n element.removeData(kendo.ns + 'title');\n return true;\n }\n }\n function saveTitleAttributeForElement(element) {\n var title = element.attr('title');\n if (title) {\n element.data(kendo.ns + 'title', title);\n element.attr('title', '');\n return true;\n }\n }\n function saveTitleAttributes(element) {\n while (element.length && !element.is('body')) {\n if (saveTitleAttributeForElement(element)) {\n break;\n }\n element = element.parent();\n }\n }\n var Tooltip = Widget.extend({\n init: function (element, options) {\n var that = this, axis;\n Widget.fn.init.call(that, element, options);\n axis = that.options.position.match(/left|right/) ? 'horizontal' : 'vertical';\n that.dimensions = DIMENSIONS[axis];\n that._documentKeyDownHandler = proxy(that._documentKeyDown, that);\n that.element.on(that.options.showOn + NS, that.options.filter, proxy(that._showOn, that));\n if (this._isShownOnMouseEnter() || this._isShownOnClick()) {\n that.element.on('mouseenter' + NS, that.options.filter, proxy(that._mouseenter, that));\n }\n if (this.options.autoHide && this._isShownOnMouseEnter()) {\n that.element.on('mouseleave' + NS, that.options.filter, proxy(that._mouseleave, that));\n }\n if (this.options.autoHide && this._isShownOnFocus()) {\n that.element.on('blur' + NS, that.options.filter, proxy(that._blur, that));\n }\n },\n options: {\n name: 'Tooltip',\n filter: '',\n content: DEFAULTCONTENT,\n showAfter: 100,\n callout: true,\n position: 'bottom',\n showOn: 'mouseenter',\n autoHide: true,\n width: null,\n height: null,\n animation: {\n open: {\n effects: 'fade:in',\n duration: 0\n },\n close: {\n duration: 40,\n hide: true\n }\n }\n },\n events: [\n SHOW,\n HIDE,\n CONTENTLOAD,\n ERROR,\n REQUESTSTART\n ],\n _isShownOnFocus: function () {\n return this.options.showOn && this.options.showOn.match(/focus/);\n },\n _isShownOnMouseEnter: function () {\n return this.options.showOn && this.options.showOn.match(/mouseenter/);\n },\n _isShownOnClick: function () {\n return this.options.showOn && this.options.showOn.match(/click/);\n },\n _mouseenter: function (e) {\n saveTitleAttributes($(e.currentTarget));\n },\n _showOn: function (e) {\n var that = this;\n var currentTarget = $(e.currentTarget);\n if (that._isShownOnClick() && !that._isShownOnMouseEnter()) {\n that._show(currentTarget);\n } else if (that._isShownOnFocus()) {\n saveTitleAttributes(currentTarget);\n that._show(currentTarget);\n } else {\n clearTimeout(that.timeout);\n that.timeout = setTimeout(function () {\n that._show(currentTarget);\n }, that.options.showAfter);\n }\n },\n _appendContent: function (target) {\n var that = this, contentOptions = that.options.content, element = that.content, showIframe = that.options.iframe, iframe;\n if (isPlainObject(contentOptions) && contentOptions.url) {\n if (!('iframe' in that.options)) {\n showIframe = !isLocalUrl(contentOptions.url);\n }\n that.trigger(REQUESTSTART, {\n options: contentOptions,\n target: target\n });\n if (!showIframe) {\n element.empty();\n kendo.ui.progress(element, true);\n that._ajaxRequest(contentOptions);\n } else {\n element.hide();\n iframe = element.find('.' + KCONTENTFRAME)[0];\n if (iframe) {\n iframe.src = contentOptions.url || iframe.src;\n } else {\n element.html(IFRAMETEMPLATE({ content: contentOptions }));\n }\n element.find('.' + KCONTENTFRAME).off('load' + NS).on('load' + NS, function () {\n that.trigger(CONTENTLOAD);\n element.show();\n });\n }\n } else if (contentOptions && isFunction(contentOptions)) {\n contentOptions = contentOptions({\n sender: this,\n target: target\n });\n element.html(contentOptions || '');\n } else {\n element.html(contentOptions);\n }\n that.angular('compile', function () {\n return { elements: element };\n });\n },\n _ajaxRequest: function (options) {\n var that = this;\n jQuery.ajax(extend({\n type: 'GET',\n dataType: 'html',\n cache: false,\n error: function (xhr, status) {\n kendo.ui.progress(that.content, false);\n that.trigger(ERROR, {\n status: status,\n xhr: xhr\n });\n },\n success: proxy(function (data) {\n kendo.ui.progress(that.content, false);\n that.content.html(data);\n that.trigger(CONTENTLOAD);\n }, that)\n }, options));\n },\n _documentKeyDown: function (e) {\n if (e.keyCode === kendo.keys.ESC) {\n this.hide();\n }\n },\n refresh: function () {\n var that = this, popup = that.popup;\n if (popup && popup.options.anchor) {\n that._appendContent(popup.options.anchor);\n }\n },\n hide: function () {\n if (this.popup) {\n this.popup.close();\n }\n },\n show: function (target) {\n target = target || this.element;\n saveTitleAttributes(target);\n this._show(target);\n },\n _show: function (target) {\n var that = this, current = that.target();\n if (!that.popup) {\n that._initPopup();\n }\n if (current && current[0] != target[0]) {\n that.popup.close();\n that.popup.element.kendoStop(true, true);\n }\n if (!current || current[0] != target[0]) {\n that._appendContent(target);\n that.popup.options.anchor = target;\n }\n that.popup.one('deactivate', function () {\n restoreTitle(target);\n target.removeAttr(DESCRIBEDBY);\n this.element.removeAttr('id').attr('aria-hidden', true);\n DOCUMENT.off('keydown' + NS, that._documentKeyDownHandler);\n });\n that.popup.open();\n },\n _initPopup: function () {\n var that = this, options = that.options, wrapper = $(kendo.template(TEMPLATE)({\n callout: options.callout && options.position !== 'center',\n dir: DIRCLASSES[options.position],\n autoHide: options.autoHide\n }));\n that.popup = new Popup(wrapper, extend({\n autosize: true,\n activate: function () {\n var anchor = this.options.anchor, ariaId = anchor[0].id || that.element[0].id;\n if (ariaId) {\n anchor.attr(DESCRIBEDBY, ariaId + ARIAIDSUFFIX);\n this.element.attr('id', ariaId + ARIAIDSUFFIX);\n }\n if (options.callout) {\n that._positionCallout();\n }\n this.element.removeAttr('aria-hidden');\n DOCUMENT.on('keydown' + NS, that._documentKeyDownHandler);\n that.trigger(SHOW);\n },\n close: function () {\n that.trigger(HIDE);\n },\n copyAnchorStyles: false,\n animation: options.animation\n }, POSITIONS[options.position]));\n wrapper.css({\n width: options.width,\n height: options.height\n });\n that.content = wrapper.find('.k-tooltip-content');\n that.arrow = wrapper.find('.k-callout');\n if (options.autoHide && this._isShownOnMouseEnter()) {\n wrapper.on('mouseleave' + NS, proxy(that._mouseleave, that));\n } else {\n wrapper.on('click' + NS, '.k-tooltip-button', proxy(that._closeButtonClick, that));\n }\n },\n _closeButtonClick: function (e) {\n e.preventDefault();\n this.hide();\n },\n _mouseleave: function (e) {\n this._closePopup(e.currentTarget);\n clearTimeout(this.timeout);\n },\n _blur: function (e) {\n this._closePopup(e.currentTarget);\n },\n _closePopup: function (target) {\n if (this.popup) {\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 this.popup.element.css('margin-top', '').css('margin-right', '').css('margin-bottom', '').css('margin-left', '');\n if (position == 'top' || position == 'left') {\n this.popup.element.css('margin-' + position, -this.arrow.outerWidth() / 2 + 'px');\n } else {\n this.popup.element.css('margin-' + REVERSE[position], this.arrow.outerWidth() / 2 + 'px');\n }\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 });\n kendo.ui.plugin(Tooltip);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/util', ['kendo.core'], f);\n}(function () {\n (function ($) {\n function createPromise() {\n return $.Deferred();\n }\n function promiseAll(promises) {\n return $.when.apply($, promises);\n }\n kendo.drawing.util = kendo.drawing.util || {};\n kendo.deepExtend(kendo.drawing.util, {\n createPromise: createPromise,\n promiseAll: promiseAll\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.color', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'color',\n name: 'Color utils',\n category: 'framework',\n advanced: true,\n description: 'Color utilities used across components',\n depends: ['core']\n };\n window.kendo = window.kendo || {};\n var Class = kendo.Class;\n var support = kendo.support;\n var namedColors = {\n aliceblue: 'f0f8ff',\n antiquewhite: 'faebd7',\n aqua: '00ffff',\n aquamarine: '7fffd4',\n azure: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '000000',\n blanchedalmond: 'ffebcd',\n blue: '0000ff',\n blueviolet: '8a2be2',\n brown: 'a52a2a',\n burlywood: 'deb887',\n cadetblue: '5f9ea0',\n chartreuse: '7fff00',\n chocolate: 'd2691e',\n coral: 'ff7f50',\n cornflowerblue: '6495ed',\n cornsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: '00ffff',\n darkblue: '00008b',\n darkcyan: '008b8b',\n darkgoldenrod: 'b8860b',\n darkgray: 'a9a9a9',\n darkgrey: 'a9a9a9',\n darkgreen: '006400',\n darkkhaki: 'bdb76b',\n darkmagenta: '8b008b',\n darkolivegreen: '556b2f',\n darkorange: 'ff8c00',\n darkorchid: '9932cc',\n darkred: '8b0000',\n darksalmon: 'e9967a',\n darkseagreen: '8fbc8f',\n darkslateblue: '483d8b',\n darkslategray: '2f4f4f',\n darkslategrey: '2f4f4f',\n darkturquoise: '00ced1',\n darkviolet: '9400d3',\n deeppink: 'ff1493',\n deepskyblue: '00bfff',\n dimgray: '696969',\n dimgrey: '696969',\n dodgerblue: '1e90ff',\n firebrick: 'b22222',\n floralwhite: 'fffaf0',\n forestgreen: '228b22',\n fuchsia: 'ff00ff',\n gainsboro: 'dcdcdc',\n ghostwhite: 'f8f8ff',\n gold: 'ffd700',\n goldenrod: 'daa520',\n gray: '808080',\n grey: '808080',\n green: '008000',\n greenyellow: 'adff2f',\n honeydew: 'f0fff0',\n hotpink: 'ff69b4',\n indianred: 'cd5c5c',\n indigo: '4b0082',\n ivory: 'fffff0',\n khaki: 'f0e68c',\n lavender: 'e6e6fa',\n lavenderblush: 'fff0f5',\n lawngreen: '7cfc00',\n lemonchiffon: 'fffacd',\n lightblue: 'add8e6',\n lightcoral: 'f08080',\n lightcyan: 'e0ffff',\n lightgoldenrodyellow: 'fafad2',\n lightgray: 'd3d3d3',\n lightgrey: 'd3d3d3',\n lightgreen: '90ee90',\n lightpink: 'ffb6c1',\n lightsalmon: 'ffa07a',\n lightseagreen: '20b2aa',\n lightskyblue: '87cefa',\n lightslategray: '778899',\n lightslategrey: '778899',\n lightsteelblue: 'b0c4de',\n lightyellow: 'ffffe0',\n lime: '00ff00',\n limegreen: '32cd32',\n linen: 'faf0e6',\n magenta: 'ff00ff',\n maroon: '800000',\n mediumaquamarine: '66cdaa',\n mediumblue: '0000cd',\n mediumorchid: 'ba55d3',\n mediumpurple: '9370d8',\n mediumseagreen: '3cb371',\n mediumslateblue: '7b68ee',\n mediumspringgreen: '00fa9a',\n mediumturquoise: '48d1cc',\n mediumvioletred: 'c71585',\n midnightblue: '191970',\n mintcream: 'f5fffa',\n mistyrose: 'ffe4e1',\n moccasin: 'ffe4b5',\n navajowhite: 'ffdead',\n navy: '000080',\n oldlace: 'fdf5e6',\n olive: '808000',\n olivedrab: '6b8e23',\n orange: 'ffa500',\n orangered: 'ff4500',\n orchid: 'da70d6',\n palegoldenrod: 'eee8aa',\n palegreen: '98fb98',\n paleturquoise: 'afeeee',\n palevioletred: 'd87093',\n papayawhip: 'ffefd5',\n peachpuff: 'ffdab9',\n peru: 'cd853f',\n pink: 'ffc0cb',\n plum: 'dda0dd',\n powderblue: 'b0e0e6',\n purple: '800080',\n red: 'ff0000',\n rosybrown: 'bc8f8f',\n royalblue: '4169e1',\n saddlebrown: '8b4513',\n salmon: 'fa8072',\n sandybrown: 'f4a460',\n seagreen: '2e8b57',\n seashell: 'fff5ee',\n sienna: 'a0522d',\n silver: 'c0c0c0',\n skyblue: '87ceeb',\n slateblue: '6a5acd',\n slategray: '708090',\n slategrey: '708090',\n snow: 'fffafa',\n springgreen: '00ff7f',\n steelblue: '4682b4',\n tan: 'd2b48c',\n teal: '008080',\n thistle: 'd8bfd8',\n tomato: 'ff6347',\n turquoise: '40e0d0',\n violet: 'ee82ee',\n wheat: 'f5deb3',\n white: 'ffffff',\n whitesmoke: 'f5f5f5',\n yellow: 'ffff00',\n yellowgreen: '9acd32'\n };\n var browser = support.browser;\n var matchNamedColor = function (color) {\n var colorNames = Object.keys(namedColors);\n colorNames.push('transparent');\n var regexp = new RegExp('^(' + colorNames.join('|') + ')(\\\\W|$)', 'i');\n matchNamedColor = function (color) {\n return regexp.exec(color);\n };\n return regexp.exec(color);\n };\n var BaseColor = Class.extend({\n init: function () {\n },\n toHSV: function () {\n return this;\n },\n toRGB: function () {\n return this;\n },\n toHex: function () {\n return this.toBytes().toHex();\n },\n toBytes: function () {\n return this;\n },\n toCss: function () {\n return '#' + this.toHex();\n },\n toCssRgba: function () {\n var rgb = this.toBytes();\n return 'rgba(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ', ' + parseFloat(Number(this.a).toFixed(3)) + ')';\n },\n toDisplay: function () {\n if (browser.msie && browser.version < 9) {\n return this.toCss();\n }\n return this.toCssRgba();\n },\n equals: function (c) {\n return c === this || c !== null && this.toCssRgba() === parseColor(c).toCssRgba();\n },\n diff: function (other) {\n if (other === null) {\n return NaN;\n }\n var c1 = this.toBytes();\n var c2 = other.toBytes();\n return Math.sqrt(Math.pow((c1.r - c2.r) * 0.3, 2) + Math.pow((c1.g - c2.g) * 0.59, 2) + Math.pow((c1.b - c2.b) * 0.11, 2));\n },\n clone: function () {\n var c = this.toBytes();\n if (c === this) {\n c = new Bytes(c.r, c.g, c.b, c.a);\n }\n return c;\n }\n });\n var RGB = BaseColor.extend({\n init: function (r, g, b, a) {\n BaseColor.fn.init.call(this);\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n },\n toHSV: function () {\n var ref = this;\n var r = ref.r;\n var g = ref.g;\n var b = ref.b;\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var delta = max - min;\n var v = max;\n var h, s;\n if (delta === 0) {\n return new HSV(0, 0, v, this.a);\n }\n if (max !== 0) {\n s = delta / max;\n if (r === max) {\n h = (g - b) / delta;\n } else if (g === max) {\n h = 2 + (b - r) / delta;\n } else {\n h = 4 + (r - g) / delta;\n }\n h *= 60;\n if (h < 0) {\n h += 360;\n }\n } else {\n s = 0;\n h = -1;\n }\n return new HSV(h, s, v, this.a);\n },\n toHSL: function () {\n var ref = this;\n var r = ref.r;\n var g = ref.g;\n var b = ref.b;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h, s, l = (max + min) / 2;\n if (max === min) {\n h = s = 0;\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n break;\n }\n }\n return new HSL(h * 60, s * 100, l * 100, this.a);\n },\n toBytes: function () {\n return new Bytes(this.r * 255, this.g * 255, this.b * 255, this.a);\n }\n });\n var Bytes = RGB.extend({\n init: function (r, g, b, a) {\n RGB.fn.init.call(this, Math.round(r), Math.round(g), Math.round(b), a);\n },\n toRGB: function () {\n return new RGB(this.r / 255, this.g / 255, this.b / 255, this.a);\n },\n toHSV: function () {\n return this.toRGB().toHSV();\n },\n toHSL: function () {\n return this.toRGB().toHSL();\n },\n toHex: function () {\n return hex(this.r, 2) + hex(this.g, 2) + hex(this.b, 2);\n },\n toBytes: function () {\n return this;\n }\n });\n function hex(n, width, pad) {\n if (pad === void 0) {\n pad = '0';\n }\n var result = n.toString(16);\n while (width > result.length) {\n result = pad + result;\n }\n return result;\n }\n var HSV = BaseColor.extend({\n init: function (h, s, v, a) {\n BaseColor.fn.init.call(this);\n this.h = h;\n this.s = s;\n this.v = v;\n this.a = a;\n },\n toRGB: function () {\n var ref = this;\n var h = ref.h;\n var s = ref.s;\n var v = ref.v;\n var r, g, b;\n if (s === 0) {\n r = g = b = v;\n } else {\n h /= 60;\n var i = Math.floor(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - s * f);\n var t = v * (1 - s * (1 - f));\n switch (i) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n default:\n r = v;\n g = p;\n b = q;\n break;\n }\n }\n return new RGB(r, g, b, this.a);\n },\n toHSL: function () {\n return this.toRGB().toHSL();\n },\n toBytes: function () {\n return this.toRGB().toBytes();\n }\n });\n var HSL = BaseColor.extend({\n init: function (h, s, l, a) {\n BaseColor.fn.init.call(this);\n this.h = h;\n this.s = s;\n this.l = l;\n this.a = a;\n },\n toRGB: function () {\n var h = this.h / 360;\n var s = this.s / 100;\n var l = this.l / 100;\n var r, g, b;\n if (s === 0) {\n r = g = b = l;\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n return new RGB(r, g, b, this.a);\n },\n toHSV: function () {\n return this.toRGB().toHSV();\n },\n toBytes: function () {\n return this.toRGB().toBytes();\n }\n });\n function hue2rgb(p, q, s) {\n var t = s;\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n }\n function parseColor(value, safe) {\n var m, ret;\n if (value == null || value === 'none') {\n return null;\n }\n if (value instanceof BaseColor) {\n return value;\n }\n var color = value.toLowerCase();\n if (m = matchNamedColor(color)) {\n if (m[1] === 'transparent') {\n color = new RGB(1, 1, 1, 0);\n } else {\n color = parseColor(namedColors[m[1]], safe);\n }\n color.match = [m[1]];\n return color;\n }\n if (m = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})\\b/i.exec(color)) {\n ret = new Bytes(parseInt(m[1], 16), parseInt(m[2], 16), parseInt(m[3], 16), 1);\n } else if (m = /^#?([0-9a-f])([0-9a-f])([0-9a-f])\\b/i.exec(color)) {\n ret = new Bytes(parseInt(m[1] + m[1], 16), parseInt(m[2] + m[2], 16), parseInt(m[3] + m[3], 16), 1);\n } else if (m = /^rgb\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/.exec(color)) {\n ret = new Bytes(parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10), 1);\n } else if (m = /^rgba\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9.]+)\\s*\\)/.exec(color)) {\n ret = new Bytes(parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10), parseFloat(m[4]));\n } else if (m = /^rgb\\(\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*\\)/.exec(color)) {\n ret = new RGB(parseFloat(m[1]) / 100, parseFloat(m[2]) / 100, parseFloat(m[3]) / 100, 1);\n } else if (m = /^rgba\\(\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9.]+)\\s*\\)/.exec(color)) {\n ret = new RGB(parseFloat(m[1]) / 100, parseFloat(m[2]) / 100, parseFloat(m[3]) / 100, parseFloat(m[4]));\n }\n if (ret) {\n ret.match = m;\n } else if (!safe) {\n throw new Error('Cannot parse color: ' + color);\n }\n return ret;\n }\n var Color = Class.extend({\n init: function (value) {\n var this$1 = this;\n if (arguments.length === 1) {\n var formats = Color.formats;\n var resolvedColor = this.resolveColor(value);\n for (var idx = 0; idx < formats.length; idx++) {\n var formatRegex = formats[idx].re;\n var processor = formats[idx].process;\n var parts = formatRegex.exec(resolvedColor);\n if (parts) {\n var channels = processor(parts);\n this$1.r = channels[0];\n this$1.g = channels[1];\n this$1.b = channels[2];\n }\n }\n } else {\n this.r = arguments[0];\n this.g = arguments[1];\n this.b = arguments[2];\n }\n this.r = this.normalizeByte(this.r);\n this.g = this.normalizeByte(this.g);\n this.b = this.normalizeByte(this.b);\n },\n toHex: function () {\n var pad = this.padDigit;\n var r = this.r.toString(16);\n var g = this.g.toString(16);\n var b = this.b.toString(16);\n return '#' + pad(r) + pad(g) + pad(b);\n },\n resolveColor: function (value) {\n var color = value || 'black';\n if (color.charAt(0) === '#') {\n color = color.substr(1, 6);\n }\n color = color.replace(/ /g, '');\n color = color.toLowerCase();\n color = Color.namedColors[color] || color;\n return color;\n },\n normalizeByte: function (value) {\n if (value < 0 || isNaN(value)) {\n return 0;\n }\n return value > 255 ? 255 : value;\n },\n padDigit: function (value) {\n return value.length === 1 ? '0' + value : value;\n },\n brightness: function (value) {\n var round = Math.round;\n this.r = round(this.normalizeByte(this.r * value));\n this.g = round(this.normalizeByte(this.g * value));\n this.b = round(this.normalizeByte(this.b * value));\n return this;\n },\n percBrightness: function () {\n return Math.sqrt(0.241 * this.r * this.r + 0.691 * this.g * this.g + 0.068 * this.b * this.b);\n }\n });\n Color.fromBytes = function (r, g, b, a) {\n return new Bytes(r, g, b, a != null ? a : 1);\n };\n Color.fromRGB = function (r, g, b, a) {\n return new RGB(r, g, b, a != null ? a : 1);\n };\n Color.fromHSV = function (h, s, v, a) {\n return new HSV(h, s, v, a != null ? a : 1);\n };\n Color.fromHSL = function (h, s, l, a) {\n return new HSL(h, s, l, a != null ? a : 1);\n };\n Color.formats = [\n {\n re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n process: function (parts) {\n return [\n parseInt(parts[1], 10),\n parseInt(parts[2], 10),\n parseInt(parts[3], 10)\n ];\n }\n },\n {\n re: /^(\\w{2})(\\w{2})(\\w{2})$/,\n process: function (parts) {\n return [\n parseInt(parts[1], 16),\n parseInt(parts[2], 16),\n parseInt(parts[3], 16)\n ];\n }\n },\n {\n re: /^(\\w{1})(\\w{1})(\\w{1})$/,\n process: function (parts) {\n return [\n parseInt(parts[1] + parts[1], 16),\n parseInt(parts[2] + parts[2], 16),\n parseInt(parts[3] + parts[3], 16)\n ];\n }\n }\n ];\n Color.namedColors = namedColors;\n kendo.deepExtend(kendo, {\n parseColor: parseColor,\n Color: Color\n });\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('util/text-metrics', ['kendo.core'], f);\n}(function () {\n (function ($) {\n window.kendo.util = window.kendo.util || {};\n var LRUCache = kendo.Class.extend({\n init: function (size) {\n this._size = size;\n this._length = 0;\n this._map = {};\n },\n put: function (key, value) {\n var map = this._map;\n var entry = {\n key: key,\n value: value\n };\n map[key] = entry;\n if (!this._head) {\n this._head = this._tail = entry;\n } else {\n this._tail.newer = entry;\n entry.older = this._tail;\n this._tail = entry;\n }\n if (this._length >= this._size) {\n map[this._head.key] = null;\n this._head = this._head.newer;\n this._head.older = null;\n } else {\n this._length++;\n }\n },\n get: function (key) {\n var entry = this._map[key];\n if (entry) {\n if (entry === this._head && entry !== this._tail) {\n this._head = entry.newer;\n this._head.older = null;\n }\n if (entry !== this._tail) {\n if (entry.older) {\n entry.older.newer = entry.newer;\n entry.newer.older = entry.older;\n }\n entry.older = this._tail;\n entry.newer = null;\n this._tail.newer = entry;\n this._tail = entry;\n }\n return entry.value;\n }\n }\n });\n var REPLACE_REGEX = /\\r?\\n|\\r|\\t/g;\n var SPACE = ' ';\n function normalizeText(text) {\n return String(text).replace(REPLACE_REGEX, SPACE);\n }\n function objectKey(object) {\n var parts = [];\n for (var key in object) {\n parts.push(key + object[key]);\n }\n return parts.sort().join('');\n }\n function hashKey(str) {\n var hash = 2166136261;\n for (var i = 0; i < str.length; ++i) {\n hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);\n hash ^= str.charCodeAt(i);\n }\n return hash >>> 0;\n }\n function zeroSize() {\n return {\n width: 0,\n height: 0,\n baseline: 0\n };\n }\n var DEFAULT_OPTIONS = { baselineMarkerSize: 1 };\n var defaultMeasureBox;\n if (typeof document !== 'undefined') {\n defaultMeasureBox = document.createElement('div');\n defaultMeasureBox.style.cssText = 'position: absolute !important; top: -4000px !important; width: auto !important; height: auto !important;' + 'padding: 0 !important; margin: 0 !important; border: 0 !important;' + 'line-height: normal !important; visibility: hidden !important; white-space: pre!important;';\n }\n var TextMetrics = kendo.Class.extend({\n init: function (options) {\n this._cache = new LRUCache(1000);\n this.options = $.extend({}, DEFAULT_OPTIONS, options);\n },\n measure: function (text, style, options) {\n if (options === void 0) {\n options = {};\n }\n if (!text) {\n return zeroSize();\n }\n var styleKey = objectKey(style);\n var cacheKey = hashKey(text + styleKey);\n var cachedResult = this._cache.get(cacheKey);\n if (cachedResult) {\n return cachedResult;\n }\n var size = zeroSize();\n var measureBox = options.box || defaultMeasureBox;\n var baselineMarker = this._baselineMarker().cloneNode(false);\n for (var key in style) {\n var value = style[key];\n if (typeof value !== 'undefined') {\n measureBox.style[key] = value;\n }\n }\n var textStr = options.normalizeText !== false ? normalizeText(text) : String(text);\n measureBox.textContent = textStr;\n measureBox.appendChild(baselineMarker);\n document.body.appendChild(measureBox);\n if (textStr.length) {\n size.width = measureBox.offsetWidth - this.options.baselineMarkerSize;\n size.height = measureBox.offsetHeight;\n size.baseline = baselineMarker.offsetTop + this.options.baselineMarkerSize;\n }\n if (size.width > 0 && size.height > 0) {\n this._cache.put(cacheKey, size);\n }\n measureBox.parentNode.removeChild(measureBox);\n return size;\n },\n _baselineMarker: function () {\n var marker = document.createElement('div');\n marker.style.cssText = 'display: inline-block; vertical-align: baseline;width: ' + this.options.baselineMarkerSize + 'px; height: ' + this.options.baselineMarkerSize + 'px;overflow: hidden;';\n return marker;\n }\n });\n TextMetrics.current = new TextMetrics();\n function measureText(text, style, measureBox) {\n return TextMetrics.current.measure(text, style, measureBox);\n }\n kendo.deepExtend(kendo.util, {\n LRUCache: LRUCache,\n TextMetrics: TextMetrics,\n measureText: measureText,\n objectKey: objectKey,\n hashKey: hashKey,\n normalizeText: normalizeText\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/kendo-drawing', [\n 'drawing/util',\n 'kendo.color',\n 'util/text-metrics'\n ], f);\n}(function () {\n (function ($) {\n window.kendo = window.kendo || {};\n var kendoDrawing = kendo.drawing;\n var kendoDrawingUtil = kendoDrawing.util;\n var Class = kendo.Class;\n var kendoUtil = kendo.util;\n var support = kendo.support;\n var supportBrowser = support.browser;\n var createPromise = kendoDrawingUtil.createPromise;\n var promiseAll = kendoDrawingUtil.promiseAll;\n var ObserversMixin = {\n extend: function (proto) {\n var this$1 = this;\n for (var method in this) {\n if (method !== 'extend') {\n proto[method] = this$1[method];\n }\n }\n },\n observers: function () {\n this._observers = this._observers || [];\n return this._observers;\n },\n addObserver: function (element) {\n if (!this._observers) {\n this._observers = [element];\n } else {\n this._observers.push(element);\n }\n return this;\n },\n removeObserver: function (element) {\n var observers = this.observers();\n var index = observers.indexOf(element);\n if (index !== -1) {\n observers.splice(index, 1);\n }\n return this;\n },\n trigger: function (methodName, event) {\n var observers = this._observers;\n if (observers && !this._suspended) {\n for (var idx = 0; idx < observers.length; idx++) {\n var observer = observers[idx];\n if (observer[methodName]) {\n observer[methodName](event);\n }\n }\n }\n return this;\n },\n optionsChange: function (e) {\n if (e === void 0) {\n e = {};\n }\n e.element = this;\n this.trigger('optionsChange', e);\n },\n geometryChange: function () {\n this.trigger('geometryChange', { element: this });\n },\n suspend: function () {\n this._suspended = (this._suspended || 0) + 1;\n return this;\n },\n resume: function () {\n this._suspended = Math.max((this._suspended || 0) - 1, 0);\n return this;\n },\n _observerField: function (field, value) {\n if (this[field]) {\n this[field].removeObserver(this);\n }\n this[field] = value;\n value.addObserver(this);\n }\n };\n function append(first, second) {\n first.push.apply(first, second);\n return first;\n }\n var literals = {\n 1: 'i',\n 10: 'x',\n 100: 'c',\n 2: 'ii',\n 20: 'xx',\n 200: 'cc',\n 3: 'iii',\n 30: 'xxx',\n 300: 'ccc',\n 4: 'iv',\n 40: 'xl',\n 400: 'cd',\n 5: 'v',\n 50: 'l',\n 500: 'd',\n 6: 'vi',\n 60: 'lx',\n 600: 'dc',\n 7: 'vii',\n 70: 'lxx',\n 700: 'dcc',\n 8: 'viii',\n 80: 'lxxx',\n 800: 'dccc',\n 9: 'ix',\n 90: 'xc',\n 900: 'cm',\n 1000: 'm'\n };\n function arabicToRoman(n) {\n var values = [\n 1000,\n 900,\n 800,\n 700,\n 600,\n 500,\n 400,\n 300,\n 200,\n 100,\n 90,\n 80,\n 70,\n 60,\n 50,\n 40,\n 30,\n 20,\n 10,\n 9,\n 8,\n 7,\n 6,\n 5,\n 4,\n 3,\n 2,\n 1\n ];\n var roman = '';\n while (n > 0) {\n if (n < values[0]) {\n values.shift();\n } else {\n roman += literals[values[0]];\n n -= values[0];\n }\n }\n return roman;\n }\n var UNDEFINED = 'undefined';\n function defined(value) {\n return typeof value !== UNDEFINED;\n }\n var defId = 1;\n function definitionId() {\n return 'kdef' + defId++;\n }\n var DEG_TO_RAD = Math.PI / 180;\n var MAX_NUM = Number.MAX_VALUE;\n var MIN_NUM = -Number.MAX_VALUE;\n function deg(radians) {\n return radians / DEG_TO_RAD;\n }\n var KEY_STR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var fromCharCode = String.fromCharCode;\n function encodeUTF8(input) {\n var output = '';\n for (var i = 0; i < input.length; i++) {\n var c = input.charCodeAt(i);\n if (c < 128) {\n output += fromCharCode(c);\n } else if (c < 2048) {\n output += fromCharCode(192 | c >>> 6);\n output += fromCharCode(128 | c & 63);\n } else if (c < 65536) {\n output += fromCharCode(224 | c >>> 12);\n output += fromCharCode(128 | c >>> 6 & 63);\n output += fromCharCode(128 | c & 63);\n }\n }\n return output;\n }\n function encodeBase64(input) {\n var output = '';\n var i = 0;\n var utfInput = encodeUTF8(input);\n while (i < utfInput.length) {\n var chr1 = utfInput.charCodeAt(i++);\n var chr2 = utfInput.charCodeAt(i++);\n var chr3 = utfInput.charCodeAt(i++);\n var enc1 = chr1 >> 2;\n var enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n var enc3 = (chr2 & 15) << 2 | chr3 >> 6;\n var enc4 = chr3 & 63;\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n output = output + KEY_STR.charAt(enc1) + KEY_STR.charAt(enc2) + KEY_STR.charAt(enc3) + KEY_STR.charAt(enc4);\n }\n return output;\n }\n function eventCoordinates(e) {\n if (defined((e.x || {}).location)) {\n return {\n x: e.x.location,\n y: e.y.location\n };\n }\n return {\n x: e.pageX || e.clientX || 0,\n y: e.pageY || e.clientY || 0\n };\n }\n function eventElement(e) {\n if (e === void 0) {\n e = {};\n }\n return e.touch ? e.touch.initialTouch : e.target;\n }\n function isTransparent(color) {\n return color === '' || color === null || color === 'none' || color === 'transparent' || !defined(color);\n }\n function last(array) {\n if (array) {\n return array[array.length - 1];\n }\n }\n function limitValue(value, min, max) {\n return Math.max(Math.min(value, max), min);\n }\n function mergeSort(a, cmp) {\n if (a.length < 2) {\n return a.slice();\n }\n function merge(a, b) {\n var r = [], ai = 0, bi = 0, i = 0;\n while (ai < a.length && bi < b.length) {\n if (cmp(a[ai], b[bi]) <= 0) {\n r[i++] = a[ai++];\n } else {\n r[i++] = b[bi++];\n }\n }\n if (ai < a.length) {\n r.push.apply(r, a.slice(ai));\n }\n if (bi < b.length) {\n r.push.apply(r, b.slice(bi));\n }\n return r;\n }\n return function sort(a) {\n if (a.length <= 1) {\n return a;\n }\n var m = Math.floor(a.length / 2);\n var left = a.slice(0, m);\n var right = a.slice(m);\n left = sort(left);\n right = sort(right);\n return merge(left, right);\n }(a);\n }\n function rad(degrees) {\n return degrees * DEG_TO_RAD;\n }\n function pow(p) {\n if (p) {\n return Math.pow(10, p);\n }\n return 1;\n }\n function round(value, precision) {\n var power = pow(precision);\n return Math.round(value * power) / power;\n }\n function valueOrDefault(value, defaultValue) {\n return defined(value) ? value : defaultValue;\n }\n function bindEvents(element, events) {\n for (var eventName in events) {\n var eventNames = eventName.trim().split(' ');\n for (var idx = 0; idx < eventNames.length; idx++) {\n element.addEventListener(eventNames[idx], events[eventName], false);\n }\n }\n }\n function elementOffset(element) {\n var box = element.getBoundingClientRect();\n var documentElement = document.documentElement;\n return {\n top: box.top + (window.pageYOffset || documentElement.scrollTop) - (documentElement.clientTop || 0),\n left: box.left + (window.pageXOffset || documentElement.scrollLeft) - (documentElement.clientLeft || 0)\n };\n }\n function elementStyles(element, styles) {\n var result = {};\n var style = window.getComputedStyle(element) || {};\n var stylesArray = Array.isArray(styles) ? styles : [styles];\n for (var idx = 0; idx < stylesArray.length; idx++) {\n var field = stylesArray[idx];\n result[field] = style[field];\n }\n return result;\n }\n function getPixels(value) {\n if (isNaN(value)) {\n return value;\n }\n return value + 'px';\n }\n function elementSize(element, size) {\n if (size) {\n var width = size.width;\n var height = size.height;\n if (defined(width)) {\n element.style.width = getPixels(width);\n }\n if (defined(height)) {\n element.style.height = getPixels(height);\n }\n } else {\n var size$1 = elementStyles(element, [\n 'width',\n 'height'\n ]);\n return {\n width: parseInt(size$1.width, 10),\n height: parseInt(size$1.height, 10)\n };\n }\n }\n function unbindEvents(element, events) {\n if (events === void 0) {\n events = {};\n }\n for (var name in events) {\n var eventNames = name.trim().split(' ');\n for (var idx = 0; idx < eventNames.length; idx++) {\n element.removeEventListener(eventNames[idx], events[name], false);\n }\n }\n }\n var util = {\n append: append,\n arabicToRoman: arabicToRoman,\n createPromise: createPromise,\n defined: defined,\n definitionId: definitionId,\n deg: deg,\n encodeBase64: encodeBase64,\n eventCoordinates: eventCoordinates,\n eventElement: eventElement,\n isTransparent: isTransparent,\n last: last,\n limitValue: limitValue,\n mergeSort: mergeSort,\n promiseAll: promiseAll,\n rad: rad,\n round: round,\n valueOrDefault: valueOrDefault,\n bindEvents: bindEvents,\n elementOffset: elementOffset,\n elementSize: elementSize,\n elementStyles: elementStyles,\n unbindEvents: unbindEvents,\n DEG_TO_RAD: DEG_TO_RAD,\n MAX_NUM: MAX_NUM,\n MIN_NUM: MIN_NUM\n };\n var toString = {}.toString;\n var OptionsStore = Class.extend({\n init: function (options, prefix) {\n var this$1 = this;\n if (prefix === void 0) {\n prefix = '';\n }\n this.prefix = prefix;\n for (var field in options) {\n var member = options[field];\n member = this$1._wrap(member, field);\n this$1[field] = member;\n }\n },\n get: function (field) {\n var parts = field.split('.');\n var result = this;\n while (parts.length && result) {\n var part = parts.shift();\n result = result[part];\n }\n return result;\n },\n set: function (field, value) {\n var current = this.get(field);\n if (current !== value) {\n this._set(field, this._wrap(value, field));\n this.optionsChange({\n field: this.prefix + field,\n value: value\n });\n }\n },\n _set: function (field, value) {\n var this$1 = this;\n var composite = field.indexOf('.') >= 0;\n var parentObj = this;\n var fieldName = field;\n if (composite) {\n var parts = fieldName.split('.');\n var prefix = this.prefix;\n while (parts.length > 1) {\n fieldName = parts.shift();\n prefix += fieldName + '.';\n var obj = parentObj[fieldName];\n if (!obj) {\n obj = new OptionsStore({}, prefix);\n obj.addObserver(this$1);\n parentObj[fieldName] = obj;\n }\n parentObj = obj;\n }\n fieldName = parts[0];\n }\n parentObj._clear(fieldName);\n parentObj[fieldName] = value;\n },\n _clear: function (field) {\n var current = this[field];\n if (current && current.removeObserver) {\n current.removeObserver(this);\n }\n },\n _wrap: function (object, field) {\n var type = toString.call(object);\n var wrapped = object;\n if (wrapped !== null && defined(wrapped) && type === '[object Object]') {\n if (!(object instanceof OptionsStore) && !(object instanceof Class)) {\n wrapped = new OptionsStore(wrapped, this.prefix + field + '.');\n }\n wrapped.addObserver(this);\n }\n return wrapped;\n }\n });\n ObserversMixin.extend(OptionsStore.prototype);\n function setAccessor(field) {\n return function (value) {\n if (this[field] !== value) {\n this[field] = value;\n this.geometryChange();\n }\n return this;\n };\n }\n function getAccessor(field) {\n return function () {\n return this[field];\n };\n }\n function defineAccessors(fn, fields) {\n for (var i = 0; i < fields.length; i++) {\n var name = fields[i];\n var capitalized = name.charAt(0).toUpperCase() + name.substring(1, name.length);\n fn['set' + capitalized] = setAccessor(name);\n fn['get' + capitalized] = getAccessor(name);\n }\n }\n var Matrix = Class.extend({\n init: function (a, b, c, d, e, f) {\n if (a === void 0) {\n a = 0;\n }\n if (b === void 0) {\n b = 0;\n }\n if (c === void 0) {\n c = 0;\n }\n if (d === void 0) {\n d = 0;\n }\n if (e === void 0) {\n e = 0;\n }\n if (f === void 0) {\n f = 0;\n }\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n },\n multiplyCopy: function (matrix) {\n return new Matrix(this.a * matrix.a + this.c * matrix.b, this.b * matrix.a + this.d * matrix.b, this.a * matrix.c + this.c * matrix.d, this.b * matrix.c + this.d * matrix.d, this.a * matrix.e + this.c * matrix.f + this.e, this.b * matrix.e + this.d * matrix.f + this.f);\n },\n invert: function () {\n var ref = this;\n var a = ref.a;\n var b = ref.b;\n var d = ref.c;\n var e = ref.d;\n var g = ref.e;\n var h = ref.f;\n var det = a * e - b * d;\n if (det === 0) {\n return null;\n }\n return new Matrix(e / det, -b / det, -d / det, a / det, (d * h - e * g) / det, (b * g - a * h) / det);\n },\n clone: function () {\n return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);\n },\n equals: function (other) {\n if (!other) {\n return false;\n }\n return this.a === other.a && this.b === other.b && this.c === other.c && this.d === other.d && this.e === other.e && this.f === other.f;\n },\n round: function (precision) {\n this.a = round(this.a, precision);\n this.b = round(this.b, precision);\n this.c = round(this.c, precision);\n this.d = round(this.d, precision);\n this.e = round(this.e, precision);\n this.f = round(this.f, precision);\n return this;\n },\n toArray: function (precision) {\n var result = [\n this.a,\n this.b,\n this.c,\n this.d,\n this.e,\n this.f\n ];\n if (defined(precision)) {\n for (var i = 0; i < result.length; i++) {\n result[i] = round(result[i], precision);\n }\n }\n return result;\n },\n toString: function (precision, separator) {\n if (separator === void 0) {\n separator = ',';\n }\n return this.toArray(precision).join(separator);\n }\n });\n Matrix.translate = function (x, y) {\n return new Matrix(1, 0, 0, 1, x, y);\n };\n Matrix.unit = function () {\n return new Matrix(1, 0, 0, 1, 0, 0);\n };\n Matrix.rotate = function (angle, x, y) {\n var matrix = new Matrix();\n matrix.a = Math.cos(rad(angle));\n matrix.b = Math.sin(rad(angle));\n matrix.c = -matrix.b;\n matrix.d = matrix.a;\n matrix.e = x - x * matrix.a + y * matrix.b || 0;\n matrix.f = y - y * matrix.a - x * matrix.b || 0;\n return matrix;\n };\n Matrix.scale = function (scaleX, scaleY) {\n return new Matrix(scaleX, 0, 0, scaleY, 0, 0);\n };\n Matrix.IDENTITY = Matrix.unit();\n function toMatrix(transformation) {\n if (transformation && typeof transformation.matrix === 'function') {\n return transformation.matrix();\n }\n return transformation;\n }\n var Point = Class.extend({\n init: function (x, y) {\n this.x = x || 0;\n this.y = y || 0;\n },\n equals: function (other) {\n return other && other.x === this.x && other.y === this.y;\n },\n clone: function () {\n return new Point(this.x, this.y);\n },\n rotate: function (angle, origin) {\n var originPoint = Point.create(origin) || Point.ZERO;\n return this.transform(Matrix.rotate(angle, originPoint.x, originPoint.y));\n },\n translate: function (x, y) {\n this.x += x;\n this.y += y;\n this.geometryChange();\n return this;\n },\n translateWith: function (point) {\n return this.translate(point.x, point.y);\n },\n move: function (x, y) {\n this.x = this.y = 0;\n return this.translate(x, y);\n },\n scale: function (scaleX, scaleY) {\n if (scaleY === void 0) {\n scaleY = scaleX;\n }\n this.x *= scaleX;\n this.y *= scaleY;\n this.geometryChange();\n return this;\n },\n scaleCopy: function (scaleX, scaleY) {\n return this.clone().scale(scaleX, scaleY);\n },\n transform: function (transformation) {\n var matrix = toMatrix(transformation);\n var ref = this;\n var x = ref.x;\n var y = ref.y;\n this.x = matrix.a * x + matrix.c * y + matrix.e;\n this.y = matrix.b * x + matrix.d * y + matrix.f;\n this.geometryChange();\n return this;\n },\n transformCopy: function (transformation) {\n var point = this.clone();\n if (transformation) {\n point.transform(transformation);\n }\n return point;\n },\n distanceTo: function (point) {\n var dx = this.x - point.x;\n var dy = this.y - point.y;\n return Math.sqrt(dx * dx + dy * dy);\n },\n round: function (digits) {\n this.x = round(this.x, digits);\n this.y = round(this.y, digits);\n this.geometryChange();\n return this;\n },\n toArray: function (digits) {\n var doRound = defined(digits);\n var x = doRound ? round(this.x, digits) : this.x;\n var y = doRound ? round(this.y, digits) : this.y;\n return [\n x,\n y\n ];\n },\n toString: function (digits, separator) {\n if (separator === void 0) {\n separator = ' ';\n }\n var ref = this;\n var x = ref.x;\n var y = ref.y;\n if (defined(digits)) {\n x = round(x, digits);\n y = round(y, digits);\n }\n return x + separator + y;\n }\n });\n Point.create = function (arg0, arg1) {\n if (defined(arg0)) {\n if (arg0 instanceof Point) {\n return arg0;\n } else if (arguments.length === 1 && arg0.length === 2) {\n return new Point(arg0[0], arg0[1]);\n }\n return new Point(arg0, arg1);\n }\n };\n Point.min = function () {\n var arguments$1 = arguments;\n var minX = MAX_NUM;\n var minY = MAX_NUM;\n for (var i = 0; i < arguments.length; i++) {\n var point = arguments$1[i];\n minX = Math.min(point.x, minX);\n minY = Math.min(point.y, minY);\n }\n return new Point(minX, minY);\n };\n Point.max = function () {\n var arguments$1 = arguments;\n var maxX = MIN_NUM;\n var maxY = MIN_NUM;\n for (var i = 0; i < arguments.length; i++) {\n var point = arguments$1[i];\n maxX = Math.max(point.x, maxX);\n maxY = Math.max(point.y, maxY);\n }\n return new Point(maxX, maxY);\n };\n Point.minPoint = function () {\n return new Point(MIN_NUM, MIN_NUM);\n };\n Point.maxPoint = function () {\n return new Point(MAX_NUM, MAX_NUM);\n };\n if (Object.defineProperties) {\n Object.defineProperties(Point, {\n ZERO: {\n get: function () {\n return new Point(0, 0);\n }\n }\n });\n }\n defineAccessors(Point.prototype, [\n 'x',\n 'y'\n ]);\n ObserversMixin.extend(Point.prototype);\n var Size = Class.extend({\n init: function (width, height) {\n this.width = width || 0;\n this.height = height || 0;\n },\n equals: function (other) {\n return other && other.width === this.width && other.height === this.height;\n },\n clone: function () {\n return new Size(this.width, this.height);\n },\n toArray: function (digits) {\n var doRound = defined(digits);\n var width = doRound ? round(this.width, digits) : this.width;\n var height = doRound ? round(this.height, digits) : this.height;\n return [\n width,\n height\n ];\n }\n });\n Size.create = function (arg0, arg1) {\n if (defined(arg0)) {\n if (arg0 instanceof Size) {\n return arg0;\n } else if (arguments.length === 1 && arg0.length === 2) {\n return new Size(arg0[0], arg0[1]);\n }\n return new Size(arg0, arg1);\n }\n };\n if (Object.defineProperties) {\n Object.defineProperties(Size, {\n ZERO: {\n get: function () {\n return new Size(0, 0);\n }\n }\n });\n }\n defineAccessors(Size.prototype, [\n 'width',\n 'height'\n ]);\n ObserversMixin.extend(Size.prototype);\n var Rect = Class.extend({\n init: function (origin, size) {\n if (origin === void 0) {\n origin = new Point();\n }\n if (size === void 0) {\n size = new Size();\n }\n this.setOrigin(origin);\n this.setSize(size);\n },\n clone: function () {\n return new Rect(this.origin.clone(), this.size.clone());\n },\n equals: function (other) {\n return other && other.origin.equals(this.origin) && other.size.equals(this.size);\n },\n setOrigin: function (value) {\n this._observerField('origin', Point.create(value));\n this.geometryChange();\n return this;\n },\n getOrigin: function () {\n return this.origin;\n },\n setSize: function (value) {\n this._observerField('size', Size.create(value));\n this.geometryChange();\n return this;\n },\n getSize: function () {\n return this.size;\n },\n width: function () {\n return this.size.width;\n },\n height: function () {\n return this.size.height;\n },\n topLeft: function () {\n return this.origin.clone();\n },\n bottomRight: function () {\n return this.origin.clone().translate(this.width(), this.height());\n },\n topRight: function () {\n return this.origin.clone().translate(this.width(), 0);\n },\n bottomLeft: function () {\n return this.origin.clone().translate(0, this.height());\n },\n center: function () {\n return this.origin.clone().translate(this.width() / 2, this.height() / 2);\n },\n bbox: function (matrix) {\n var tl = this.topLeft().transformCopy(matrix);\n var tr = this.topRight().transformCopy(matrix);\n var br = this.bottomRight().transformCopy(matrix);\n var bl = this.bottomLeft().transformCopy(matrix);\n return Rect.fromPoints(tl, tr, br, bl);\n },\n transformCopy: function (m) {\n return Rect.fromPoints(this.topLeft().transform(m), this.bottomRight().transform(m));\n },\n expand: function (x, y) {\n if (y === void 0) {\n y = x;\n }\n this.size.width += 2 * x;\n this.size.height += 2 * y;\n this.origin.translate(-x, -y);\n return this;\n },\n expandCopy: function (x, y) {\n return this.clone().expand(x, y);\n },\n containsPoint: function (point) {\n var origin = this.origin;\n var bottomRight = this.bottomRight();\n return !(point.x < origin.x || point.y < origin.y || bottomRight.x < point.x || bottomRight.y < point.y);\n },\n _isOnPath: function (point, width) {\n var rectOuter = this.expandCopy(width, width);\n var rectInner = this.expandCopy(-width, -width);\n return rectOuter.containsPoint(point) && !rectInner.containsPoint(point);\n }\n });\n Rect.fromPoints = function () {\n var topLeft = Point.min.apply(null, arguments);\n var bottomRight = Point.max.apply(null, arguments);\n var size = new Size(bottomRight.x - topLeft.x, bottomRight.y - topLeft.y);\n return new Rect(topLeft, size);\n };\n Rect.union = function (a, b) {\n return Rect.fromPoints(Point.min(a.topLeft(), b.topLeft()), Point.max(a.bottomRight(), b.bottomRight()));\n };\n Rect.intersect = function (a, b) {\n var rect1 = {\n left: a.topLeft().x,\n top: a.topLeft().y,\n right: a.bottomRight().x,\n bottom: a.bottomRight().y\n };\n var rect2 = {\n left: b.topLeft().x,\n top: b.topLeft().y,\n right: b.bottomRight().x,\n bottom: b.bottomRight().y\n };\n if (rect1.left <= rect2.right && rect2.left <= rect1.right && rect1.top <= rect2.bottom && rect2.top <= rect1.bottom) {\n return Rect.fromPoints(new Point(Math.max(rect1.left, rect2.left), Math.max(rect1.top, rect2.top)), new Point(Math.min(rect1.right, rect2.right), Math.min(rect1.bottom, rect2.bottom)));\n }\n };\n ObserversMixin.extend(Rect.prototype);\n var Transformation = Class.extend({\n init: function (matrix) {\n if (matrix === void 0) {\n matrix = Matrix.unit();\n }\n this._matrix = matrix;\n },\n clone: function () {\n return new Transformation(this._matrix.clone());\n },\n equals: function (other) {\n return other && other._matrix.equals(this._matrix);\n },\n translate: function (x, y) {\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(x, y));\n this._optionsChange();\n return this;\n },\n scale: function (scaleX, scaleY, origin) {\n if (scaleY === void 0) {\n scaleY = scaleX;\n }\n if (origin === void 0) {\n origin = null;\n }\n var originPoint = origin;\n if (originPoint) {\n originPoint = Point.create(originPoint);\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(originPoint.x, originPoint.y));\n }\n this._matrix = this._matrix.multiplyCopy(Matrix.scale(scaleX, scaleY));\n if (originPoint) {\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(-originPoint.x, -originPoint.y));\n }\n this._optionsChange();\n return this;\n },\n rotate: function (angle, origin) {\n var originPoint = Point.create(origin) || Point.ZERO;\n this._matrix = this._matrix.multiplyCopy(Matrix.rotate(angle, originPoint.x, originPoint.y));\n this._optionsChange();\n return this;\n },\n multiply: function (transformation) {\n var matrix = toMatrix(transformation);\n this._matrix = this._matrix.multiplyCopy(matrix);\n this._optionsChange();\n return this;\n },\n matrix: function (value) {\n if (value) {\n this._matrix = value;\n this._optionsChange();\n return this;\n }\n return this._matrix;\n },\n _optionsChange: function () {\n this.optionsChange({\n field: 'transform',\n value: this\n });\n }\n });\n ObserversMixin.extend(Transformation.prototype);\n function transform(matrix) {\n if (matrix === null) {\n return null;\n }\n if (matrix instanceof Transformation) {\n return matrix;\n }\n return new Transformation(matrix);\n }\n var Element$1 = Class.extend({\n init: function (options) {\n this._initOptions(options);\n },\n _initOptions: function (options) {\n if (options === void 0) {\n options = {};\n }\n var clip = options.clip;\n var transform$$1 = options.transform;\n if (transform$$1) {\n options.transform = transform(transform$$1);\n }\n if (clip && !clip.id) {\n clip.id = definitionId();\n }\n this.options = new OptionsStore(options);\n this.options.addObserver(this);\n },\n transform: function (value) {\n if (defined(value)) {\n this.options.set('transform', transform(value));\n } else {\n return this.options.get('transform');\n }\n },\n parentTransform: function () {\n var element = this;\n var parentMatrix;\n while (element.parent) {\n element = element.parent;\n var transformation = element.transform();\n if (transformation) {\n parentMatrix = transformation.matrix().multiplyCopy(parentMatrix || Matrix.unit());\n }\n }\n if (parentMatrix) {\n return transform(parentMatrix);\n }\n },\n currentTransform: function (parentTransform) {\n if (parentTransform === void 0) {\n parentTransform = this.parentTransform();\n }\n var elementTransform = this.transform();\n var elementMatrix = toMatrix(elementTransform);\n var parentMatrix = toMatrix(parentTransform);\n var combinedMatrix;\n if (elementMatrix && parentMatrix) {\n combinedMatrix = parentMatrix.multiplyCopy(elementMatrix);\n } else {\n combinedMatrix = elementMatrix || parentMatrix;\n }\n if (combinedMatrix) {\n return transform(combinedMatrix);\n }\n },\n visible: function (value) {\n if (defined(value)) {\n this.options.set('visible', value);\n return this;\n }\n return this.options.get('visible') !== false;\n },\n clip: function (value) {\n var options = this.options;\n if (defined(value)) {\n if (value && !value.id) {\n value.id = definitionId();\n }\n options.set('clip', value);\n return this;\n }\n return options.get('clip');\n },\n opacity: function (value) {\n if (defined(value)) {\n this.options.set('opacity', value);\n return this;\n }\n return valueOrDefault(this.options.get('opacity'), 1);\n },\n clippedBBox: function (transformation) {\n var bbox = this._clippedBBox(transformation);\n if (bbox) {\n var clip = this.clip();\n return clip ? Rect.intersect(bbox, clip.bbox(transformation)) : bbox;\n }\n },\n containsPoint: function (point, parentTransform) {\n if (this.visible()) {\n var transform$$1 = this.currentTransform(parentTransform);\n var transformedPoint = point;\n if (transform$$1) {\n transformedPoint = point.transformCopy(transform$$1.matrix().invert());\n }\n return this._hasFill() && this._containsPoint(transformedPoint) || this._isOnPath && this._hasStroke() && this._isOnPath(transformedPoint);\n }\n return false;\n },\n _hasFill: function () {\n var fill = this.options.fill;\n return fill && !isTransparent(fill.color);\n },\n _hasStroke: function () {\n var stroke = this.options.stroke;\n return stroke && stroke.width > 0 && !isTransparent(stroke.color);\n },\n _clippedBBox: function (transformation) {\n return this.bbox(transformation);\n }\n });\n Element$1.prototype.nodeType = 'Element';\n ObserversMixin.extend(Element$1.prototype);\n function ellipseExtremeAngles(center, rx, ry, matrix) {\n var extremeX = 0;\n var extremeY = 0;\n if (matrix) {\n extremeX = Math.atan2(matrix.c * ry, matrix.a * rx);\n if (matrix.b !== 0) {\n extremeY = Math.atan2(matrix.d * ry, matrix.b * rx);\n }\n }\n return {\n x: extremeX,\n y: extremeY\n };\n }\n var PI_DIV_2 = Math.PI / 2;\n var Circle$2 = Class.extend({\n init: function (center, radius) {\n if (center === void 0) {\n center = new Point();\n }\n if (radius === void 0) {\n radius = 0;\n }\n this.setCenter(center);\n this.setRadius(radius);\n },\n setCenter: function (value) {\n this._observerField('center', Point.create(value));\n this.geometryChange();\n return this;\n },\n getCenter: function () {\n return this.center;\n },\n equals: function (other) {\n return other && other.center.equals(this.center) && other.radius === this.radius;\n },\n clone: function () {\n return new Circle$2(this.center.clone(), this.radius);\n },\n pointAt: function (angle) {\n return this._pointAt(rad(angle));\n },\n bbox: function (matrix) {\n var this$1 = this;\n var extremeAngles = ellipseExtremeAngles(this.center, this.radius, this.radius, matrix);\n var minPoint = Point.maxPoint();\n var maxPoint = Point.minPoint();\n for (var i = 0; i < 4; i++) {\n var currentPointX = this$1._pointAt(extremeAngles.x + i * PI_DIV_2).transformCopy(matrix);\n var currentPointY = this$1._pointAt(extremeAngles.y + i * PI_DIV_2).transformCopy(matrix);\n var currentPoint = new Point(currentPointX.x, currentPointY.y);\n minPoint = Point.min(minPoint, currentPoint);\n maxPoint = Point.max(maxPoint, currentPoint);\n }\n return Rect.fromPoints(minPoint, maxPoint);\n },\n _pointAt: function (angle) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n return new Point(center.x + radius * Math.cos(angle), center.y + radius * Math.sin(angle));\n },\n containsPoint: function (point) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n var inCircle = Math.pow(point.x - center.x, 2) + Math.pow(point.y - center.y, 2) <= Math.pow(radius, 2);\n return inCircle;\n },\n _isOnPath: function (point, width) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n var pointDistance = center.distanceTo(point);\n return radius - width <= pointDistance && pointDistance <= radius + width;\n }\n });\n defineAccessors(Circle$2.prototype, ['radius']);\n ObserversMixin.extend(Circle$2.prototype);\n var GRADIENT = 'Gradient';\n var Paintable = {\n extend: function (proto) {\n proto.fill = this.fill;\n proto.stroke = this.stroke;\n },\n fill: function (color, opacity) {\n var options = this.options;\n if (defined(color)) {\n if (color && color.nodeType !== GRADIENT) {\n var newFill = { color: color };\n if (defined(opacity)) {\n newFill.opacity = opacity;\n }\n options.set('fill', newFill);\n } else {\n options.set('fill', color);\n }\n return this;\n }\n return options.get('fill');\n },\n stroke: function (color, width, opacity) {\n if (defined(color)) {\n this.options.set('stroke.color', color);\n if (defined(width)) {\n this.options.set('stroke.width', width);\n }\n if (defined(opacity)) {\n this.options.set('stroke.opacity', opacity);\n }\n return this;\n }\n return this.options.get('stroke');\n }\n };\n var IDENTITY_MATRIX_HASH = Matrix.IDENTITY.toString();\n var Measurable = {\n extend: function (proto) {\n proto.bbox = this.bbox;\n proto.geometryChange = this.geometryChange;\n },\n bbox: function (transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n var matrixHash = combinedMatrix ? combinedMatrix.toString() : IDENTITY_MATRIX_HASH;\n var bbox;\n if (this._bboxCache && this._matrixHash === matrixHash) {\n bbox = this._bboxCache.clone();\n } else {\n bbox = this._bbox(combinedMatrix);\n this._bboxCache = bbox ? bbox.clone() : null;\n this._matrixHash = matrixHash;\n }\n var strokeWidth = this.options.get('stroke.width');\n if (strokeWidth && bbox) {\n bbox.expand(strokeWidth / 2);\n }\n return bbox;\n },\n geometryChange: function () {\n delete this._bboxCache;\n this.trigger('geometryChange', { element: this });\n }\n };\n function geometryAccessor(name) {\n var fieldName = '_' + name;\n return function (value) {\n if (defined(value)) {\n this._observerField(fieldName, value);\n this.geometryChange();\n return this;\n }\n return this[fieldName];\n };\n }\n function defineGeometryAccessors(fn, names) {\n for (var i = 0; i < names.length; i++) {\n fn[names[i]] = geometryAccessor(names[i]);\n }\n }\n var DEFAULT_STROKE = '#000';\n var Circle = Element$1.extend({\n init: function (geometry, options) {\n if (geometry === void 0) {\n geometry = new Circle$2();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke(DEFAULT_STROKE);\n }\n },\n rawBBox: function () {\n return this._geometry.bbox();\n },\n _bbox: function (matrix) {\n return this._geometry.bbox(matrix);\n },\n _containsPoint: function (point) {\n return this.geometry().containsPoint(point);\n },\n _isOnPath: function (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n });\n Circle.prototype.nodeType = 'Circle';\n Paintable.extend(Circle.prototype);\n Measurable.extend(Circle.prototype);\n defineGeometryAccessors(Circle.prototype, ['geometry']);\n var PRECISION = 10;\n function close(a, b, tolerance) {\n if (tolerance === void 0) {\n tolerance = PRECISION;\n }\n return round(Math.abs(a - b), tolerance) === 0;\n }\n function closeOrLess(a, b, tolerance) {\n return a < b || close(a, b, tolerance);\n }\n function lineIntersection(p0, p1, p2, p3) {\n var s1x = p1.x - p0.x;\n var s2x = p3.x - p2.x;\n var s1y = p1.y - p0.y;\n var s2y = p3.y - p2.y;\n var nx = p0.x - p2.x;\n var ny = p0.y - p2.y;\n var d = s1x * s2y - s2x * s1y;\n var s = (s1x * ny - s1y * nx) / d;\n var t = (s2x * ny - s2y * nx) / d;\n if (s >= 0 && s <= 1 && t >= 0 && t <= 1) {\n return new Point(p0.x + t * s1x, p0.y + t * s1y);\n }\n }\n var MAX_INTERVAL = 45;\n var pow$1 = Math.pow;\n var Arc$2 = Class.extend({\n init: function (center, options) {\n if (center === void 0) {\n center = new Point();\n }\n if (options === void 0) {\n options = {};\n }\n this.setCenter(center);\n this.radiusX = options.radiusX;\n this.radiusY = options.radiusY || options.radiusX;\n this.startAngle = options.startAngle;\n this.endAngle = options.endAngle;\n this.anticlockwise = options.anticlockwise || false;\n this.xRotation = options.xRotation;\n },\n clone: function () {\n return new Arc$2(this.center, {\n radiusX: this.radiusX,\n radiusY: this.radiusY,\n startAngle: this.startAngle,\n endAngle: this.endAngle,\n anticlockwise: this.anticlockwise\n });\n },\n setCenter: function (value) {\n this._observerField('center', Point.create(value));\n this.geometryChange();\n return this;\n },\n getCenter: function () {\n return this.center;\n },\n pointAt: function (angle) {\n var center = this.center;\n var radian = rad(angle);\n return new Point(center.x + this.radiusX * Math.cos(radian), center.y + this.radiusY * Math.sin(radian));\n },\n curvePoints: function () {\n var this$1 = this;\n var startAngle = this.startAngle;\n var dir = this.anticlockwise ? -1 : 1;\n var curvePoints = [this.pointAt(startAngle)];\n var interval = this._arcInterval();\n var intervalAngle = interval.endAngle - interval.startAngle;\n var subIntervalsCount = Math.ceil(intervalAngle / MAX_INTERVAL);\n var subIntervalAngle = intervalAngle / subIntervalsCount;\n var currentAngle = startAngle;\n var transformation;\n if (this.xRotation) {\n transformation = transform().rotate(this.xRotation, this.center);\n }\n for (var i = 1; i <= subIntervalsCount; i++) {\n var nextAngle = currentAngle + dir * subIntervalAngle;\n var points = this$1._intervalCurvePoints(currentAngle, nextAngle, transformation);\n curvePoints.push(points.cp1, points.cp2, points.p2);\n currentAngle = nextAngle;\n }\n return curvePoints;\n },\n bbox: function (matrix) {\n var this$1 = this;\n var interval = this._arcInterval();\n var startAngle = interval.startAngle;\n var endAngle = interval.endAngle;\n var extremeAngles = ellipseExtremeAngles(this.center, this.radiusX, this.radiusY, matrix);\n var extremeX = deg(extremeAngles.x);\n var extremeY = deg(extremeAngles.y);\n var endPoint = this.pointAt(endAngle).transformCopy(matrix);\n var currentAngleX = bboxStartAngle(extremeX, startAngle);\n var currentAngleY = bboxStartAngle(extremeY, startAngle);\n var currentPoint = this.pointAt(startAngle).transformCopy(matrix);\n var minPoint = Point.min(currentPoint, endPoint);\n var maxPoint = Point.max(currentPoint, endPoint);\n while (currentAngleX < endAngle || currentAngleY < endAngle) {\n var currentPointX = void 0;\n if (currentAngleX < endAngle) {\n currentPointX = this$1.pointAt(currentAngleX).transformCopy(matrix);\n currentAngleX += 90;\n }\n var currentPointY = void 0;\n if (currentAngleY < endAngle) {\n currentPointY = this$1.pointAt(currentAngleY).transformCopy(matrix);\n currentAngleY += 90;\n }\n currentPoint = new Point(currentPointX.x, currentPointY.y);\n minPoint = Point.min(minPoint, currentPoint);\n maxPoint = Point.max(maxPoint, currentPoint);\n }\n return Rect.fromPoints(minPoint, maxPoint);\n },\n _arcInterval: function () {\n var ref = this;\n var startAngle = ref.startAngle;\n var endAngle = ref.endAngle;\n var anticlockwise = ref.anticlockwise;\n if (anticlockwise) {\n var oldStart = startAngle;\n startAngle = endAngle;\n endAngle = oldStart;\n }\n if (startAngle > endAngle || anticlockwise && startAngle === endAngle) {\n endAngle += 360;\n }\n return {\n startAngle: startAngle,\n endAngle: endAngle\n };\n },\n _intervalCurvePoints: function (startAngle, endAngle, transformation) {\n var p1 = this.pointAt(startAngle);\n var p2 = this.pointAt(endAngle);\n var p1Derivative = this._derivativeAt(startAngle);\n var p2Derivative = this._derivativeAt(endAngle);\n var t = (rad(endAngle) - rad(startAngle)) / 3;\n var cp1 = new Point(p1.x + t * p1Derivative.x, p1.y + t * p1Derivative.y);\n var cp2 = new Point(p2.x - t * p2Derivative.x, p2.y - t * p2Derivative.y);\n if (transformation) {\n p1.transform(transformation);\n p2.transform(transformation);\n cp1.transform(transformation);\n cp2.transform(transformation);\n }\n return {\n p1: p1,\n cp1: cp1,\n cp2: cp2,\n p2: p2\n };\n },\n _derivativeAt: function (angle) {\n var radian = rad(angle);\n return new Point(-this.radiusX * Math.sin(radian), this.radiusY * Math.cos(radian));\n },\n containsPoint: function (point) {\n var interval = this._arcInterval();\n var intervalAngle = interval.endAngle - interval.startAngle;\n var ref = this;\n var center = ref.center;\n var radiusX = ref.radiusX;\n var radiusY = ref.radiusY;\n var distance = center.distanceTo(point);\n var angleRad = Math.atan2(point.y - center.y, point.x - center.x);\n var pointRadius = radiusX * radiusY / Math.sqrt(pow$1(radiusX, 2) * pow$1(Math.sin(angleRad), 2) + pow$1(radiusY, 2) * pow$1(Math.cos(angleRad), 2));\n var startPoint = this.pointAt(this.startAngle).round(PRECISION);\n var endPoint = this.pointAt(this.endAngle).round(PRECISION);\n var intersection = lineIntersection(center, point.round(PRECISION), startPoint, endPoint);\n var containsPoint;\n if (intervalAngle < 180) {\n containsPoint = intersection && closeOrLess(center.distanceTo(intersection), distance) && closeOrLess(distance, pointRadius);\n } else {\n var angle = calculateAngle(center.x, center.y, radiusX, radiusY, point.x, point.y);\n if (angle !== 360) {\n angle = (360 + angle) % 360;\n }\n var inAngleRange = interval.startAngle <= angle && angle <= interval.endAngle;\n containsPoint = inAngleRange && closeOrLess(distance, pointRadius) || !inAngleRange && (!intersection || intersection.equals(point));\n }\n return containsPoint;\n },\n _isOnPath: function (point, width) {\n var interval = this._arcInterval();\n var center = this.center;\n var angle = calculateAngle(center.x, center.y, this.radiusX, this.radiusY, point.x, point.y);\n if (angle !== 360) {\n angle = (360 + angle) % 360;\n }\n var inAngleRange = interval.startAngle <= angle && angle <= interval.endAngle;\n return inAngleRange && this.pointAt(angle).distanceTo(point) <= width;\n }\n });\n Arc$2.fromPoints = function (start, end, rx, ry, largeArc, swipe, rotation) {\n var arcParameters = normalizeArcParameters({\n x1: start.x,\n y1: start.y,\n x2: end.x,\n y2: end.y,\n rx: rx,\n ry: ry,\n largeArc: largeArc,\n swipe: swipe,\n rotation: rotation\n });\n return new Arc$2(arcParameters.center, {\n startAngle: arcParameters.startAngle,\n endAngle: arcParameters.endAngle,\n radiusX: arcParameters.radiusX,\n radiusY: arcParameters.radiusY,\n xRotation: arcParameters.xRotation,\n anticlockwise: swipe === 0\n });\n };\n defineAccessors(Arc$2.prototype, [\n 'radiusX',\n 'radiusY',\n 'startAngle',\n 'endAngle',\n 'anticlockwise'\n ]);\n ObserversMixin.extend(Arc$2.prototype);\n function calculateAngle(cx, cy, rx, ry, x, y) {\n var cos = round((x - cx) / rx, 3);\n var sin = round((y - cy) / ry, 3);\n return round(deg(Math.atan2(sin, cos)));\n }\n function normalizeArcParameters(parameters) {\n var x1 = parameters.x1;\n var y1 = parameters.y1;\n var x2 = parameters.x2;\n var y2 = parameters.y2;\n var rx = parameters.rx;\n var ry = parameters.ry;\n var largeArc = parameters.largeArc;\n var swipe = parameters.swipe;\n var rotation = parameters.rotation;\n if (rotation === void 0) {\n rotation = 0;\n }\n var radians = rad(rotation);\n var cosine = Math.cos(radians);\n var sine = Math.sin(radians);\n var xT = cosine * (x1 - x2) / 2 + sine * (y1 - y2) / 2;\n var yT = -sine * (x1 - x2) / 2 + cosine * (y1 - y2) / 2;\n var sign = largeArc !== swipe ? 1 : -1;\n var xt2 = Math.pow(xT, 2);\n var yt2 = Math.pow(yT, 2);\n var rx2 = Math.pow(rx, 2);\n var ry2 = Math.pow(ry, 2);\n var delta = xt2 / rx2 + yt2 / ry2;\n if (delta > 1) {\n delta = Math.sqrt(xt2 / rx2 + yt2 / ry2);\n rx = delta * rx;\n rx2 = Math.pow(rx, 2);\n ry = delta * ry;\n ry2 = Math.pow(ry, 2);\n }\n var constT = sign * Math.sqrt((rx2 * ry2 - rx2 * yt2 - ry2 * xt2) / (rx2 * yt2 + ry2 * xt2));\n if (isNaN(constT)) {\n constT = 0;\n }\n var cxT = constT * (rx * yT) / ry;\n var cyT = -constT * (ry * xT) / rx;\n var cx = cosine * cxT - sine * cyT + (x1 + x2) / 2;\n var cy = sine * cxT + cosine * cyT + (y1 + y2) / 2;\n var uX = (xT - cxT) / rx;\n var uY = (yT - cyT) / ry;\n var vX = -(xT + cxT) / rx;\n var vY = -(yT + cyT) / ry;\n var startAngle = (uY >= 0 ? 1 : -1) * deg(Math.acos(uX / Math.sqrt(uX * uX + uY * uY)));\n var angleCosine = round((uX * vX + uY * vY) / (Math.sqrt(uX * uX + uY * uY) * Math.sqrt(vX * vX + vY * vY)), 10);\n var angle = (uX * vY - uY * vX >= 0 ? 1 : -1) * deg(Math.acos(angleCosine));\n if (!swipe && angle > 0) {\n angle -= 360;\n }\n if (swipe && angle < 0) {\n angle += 360;\n }\n var endAngle = startAngle + angle;\n var signEndAngle = endAngle >= 0 ? 1 : -1;\n endAngle = Math.abs(endAngle) % 360 * signEndAngle;\n return {\n center: new Point(cx, cy),\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: rx,\n radiusY: ry,\n xRotation: rotation\n };\n }\n function bboxStartAngle(angle, start) {\n var startAngle = angle;\n while (startAngle < start) {\n startAngle += 90;\n }\n return startAngle;\n }\n var push = [].push;\n var pop = [].pop;\n var splice = [].splice;\n var shift = [].shift;\n var slice = [].slice;\n var unshift = [].unshift;\n var ElementsArray = Class.extend({\n init: function (array) {\n if (array === void 0) {\n array = [];\n }\n this.length = 0;\n this._splice(0, array.length, array);\n },\n elements: function (value) {\n if (value) {\n this._splice(0, this.length, value);\n this._change();\n return this;\n }\n return this.slice(0);\n },\n push: function () {\n var elements = arguments;\n var result = push.apply(this, elements);\n this._add(elements);\n return result;\n },\n slice: function () {\n return slice.call(this);\n },\n pop: function () {\n var length = this.length;\n var result = pop.apply(this);\n if (length) {\n this._remove([result]);\n }\n return result;\n },\n splice: function (index, howMany) {\n var elements = slice.call(arguments, 2);\n var result = this._splice(index, howMany, elements);\n this._change();\n return result;\n },\n shift: function () {\n var length = this.length;\n var result = shift.apply(this);\n if (length) {\n this._remove([result]);\n }\n return result;\n },\n unshift: function () {\n var elements = arguments;\n var result = unshift.apply(this, elements);\n this._add(elements);\n return result;\n },\n indexOf: function (element) {\n var this$1 = this;\n var length = this.length;\n for (var idx = 0; idx < length; idx++) {\n if (this$1[idx] === element) {\n return idx;\n }\n }\n return -1;\n },\n _splice: function (index, howMany, elements) {\n var result = splice.apply(this, [\n index,\n howMany\n ].concat(elements));\n this._clearObserver(result);\n this._setObserver(elements);\n return result;\n },\n _add: function (elements) {\n this._setObserver(elements);\n this._change();\n },\n _remove: function (elements) {\n this._clearObserver(elements);\n this._change();\n },\n _setObserver: function (elements) {\n var this$1 = this;\n for (var idx = 0; idx < elements.length; idx++) {\n elements[idx].addObserver(this$1);\n }\n },\n _clearObserver: function (elements) {\n var this$1 = this;\n for (var idx = 0; idx < elements.length; idx++) {\n elements[idx].removeObserver(this$1);\n }\n },\n _change: function () {\n }\n });\n ObserversMixin.extend(ElementsArray.prototype);\n var GeometryElementsArray = ElementsArray.extend({\n _change: function () {\n this.geometryChange();\n }\n });\n function pointAccessor(name) {\n var fieldName = '_' + name;\n return function (value) {\n if (defined(value)) {\n this._observerField(fieldName, Point.create(value));\n this.geometryChange();\n return this;\n }\n return this[fieldName];\n };\n }\n function definePointAccessors(fn, names) {\n for (var i = 0; i < names.length; i++) {\n fn[names[i]] = pointAccessor(names[i]);\n }\n }\n function isOutOfEndPoint(endPoint, controlPoint, point) {\n var angle = deg(Math.atan2(controlPoint.y - endPoint.y, controlPoint.x - endPoint.x));\n var rotatedPoint = point.transformCopy(transform().rotate(-angle, endPoint));\n return rotatedPoint.x < endPoint.x;\n }\n function calculateCurveAt(t, field, points) {\n var t1 = 1 - t;\n return Math.pow(t1, 3) * points[0][field] + 3 * Math.pow(t1, 2) * t * points[1][field] + 3 * Math.pow(t, 2) * t1 * points[2][field] + Math.pow(t, 3) * points[3][field];\n }\n function toCubicPolynomial(points, field) {\n return [\n -points[0][field] + 3 * points[1][field] - 3 * points[2][field] + points[3][field],\n 3 * (points[0][field] - 2 * points[1][field] + points[2][field]),\n 3 * (-points[0][field] + points[1][field]),\n points[0][field]\n ];\n }\n var ComplexNumber = Class.extend({\n init: function (real, img) {\n if (real === void 0) {\n real = 0;\n }\n if (img === void 0) {\n img = 0;\n }\n this.real = real;\n this.img = img;\n },\n add: function (cNumber) {\n return new ComplexNumber(round(this.real + cNumber.real, PRECISION), round(this.img + cNumber.img, PRECISION));\n },\n addConstant: function (value) {\n return new ComplexNumber(this.real + value, this.img);\n },\n negate: function () {\n return new ComplexNumber(-this.real, -this.img);\n },\n multiply: function (cNumber) {\n return new ComplexNumber(this.real * cNumber.real - this.img * cNumber.img, this.real * cNumber.img + this.img * cNumber.real);\n },\n multiplyConstant: function (value) {\n return new ComplexNumber(this.real * value, this.img * value);\n },\n nthRoot: function (n) {\n var rad$$1 = Math.atan2(this.img, this.real);\n var r = Math.sqrt(Math.pow(this.img, 2) + Math.pow(this.real, 2));\n var nthR = Math.pow(r, 1 / n);\n return new ComplexNumber(nthR * Math.cos(rad$$1 / n), nthR * Math.sin(rad$$1 / n));\n },\n equals: function (cNumber) {\n return this.real === cNumber.real && this.img === cNumber.img;\n },\n isReal: function () {\n return this.img === 0;\n }\n });\n function numberSign(x) {\n return x < 0 ? -1 : 1;\n }\n function solveQuadraticEquation(a, b, c) {\n var squareRoot = Math.sqrt(Math.pow(b, 2) - 4 * a * c);\n return [\n (-b + squareRoot) / (2 * a),\n (-b - squareRoot) / (2 * a)\n ];\n }\n function solveCubicEquation(a, b, c, d) {\n if (a === 0) {\n return solveQuadraticEquation(b, c, d);\n }\n var p = (3 * a * c - Math.pow(b, 2)) / (3 * Math.pow(a, 2));\n var q = (2 * Math.pow(b, 3) - 9 * a * b * c + 27 * Math.pow(a, 2) * d) / (27 * Math.pow(a, 3));\n var Q = Math.pow(p / 3, 3) + Math.pow(q / 2, 2);\n var i = new ComplexNumber(0, 1);\n var b3a = -b / (3 * a);\n var x1, x2, y1, y2, y3, z1, z2;\n if (Q < 0) {\n x1 = new ComplexNumber(-q / 2, Math.sqrt(-Q)).nthRoot(3);\n x2 = new ComplexNumber(-q / 2, -Math.sqrt(-Q)).nthRoot(3);\n } else {\n x1 = -q / 2 + Math.sqrt(Q);\n x1 = new ComplexNumber(numberSign(x1) * Math.pow(Math.abs(x1), 1 / 3));\n x2 = -q / 2 - Math.sqrt(Q);\n x2 = new ComplexNumber(numberSign(x2) * Math.pow(Math.abs(x2), 1 / 3));\n }\n y1 = x1.add(x2);\n z1 = x1.add(x2).multiplyConstant(-1 / 2);\n z2 = x1.add(x2.negate()).multiplyConstant(Math.sqrt(3) / 2);\n y2 = z1.add(i.multiply(z2));\n y3 = z1.add(i.negate().multiply(z2));\n var result = [];\n if (y1.isReal()) {\n result.push(round(y1.real + b3a, PRECISION));\n }\n if (y2.isReal()) {\n result.push(round(y2.real + b3a, PRECISION));\n }\n if (y3.isReal()) {\n result.push(round(y3.real + b3a, PRECISION));\n }\n return result;\n }\n function hasRootsInRange(points, point, field, rootField, range) {\n var polynomial = toCubicPolynomial(points, rootField);\n var roots = solveCubicEquation(polynomial[0], polynomial[1], polynomial[2], polynomial[3] - point[rootField]);\n var intersection;\n for (var idx = 0; idx < roots.length; idx++) {\n if (0 <= roots[idx] && roots[idx] <= 1) {\n intersection = calculateCurveAt(roots[idx], field, points);\n if (Math.abs(intersection - point[field]) <= range) {\n return true;\n }\n }\n }\n }\n function curveIntersectionsCount(points, point, bbox) {\n var polynomial = toCubicPolynomial(points, 'x');\n var roots = solveCubicEquation(polynomial[0], polynomial[1], polynomial[2], polynomial[3] - point.x);\n var rayIntersection, intersectsRay;\n var count = 0;\n for (var i = 0; i < roots.length; i++) {\n rayIntersection = calculateCurveAt(roots[i], 'y', points);\n intersectsRay = close(rayIntersection, point.y) || rayIntersection > point.y;\n if (intersectsRay && ((roots[i] === 0 || roots[i] === 1) && bbox.bottomRight().x > point.x || 0 < roots[i] && roots[i] < 1)) {\n count++;\n }\n }\n return count;\n }\n function lineIntersectionsCount(a, b, point) {\n var intersects;\n if (a.x !== b.x) {\n var minX = Math.min(a.x, b.x);\n var maxX = Math.max(a.x, b.x);\n var minY = Math.min(a.y, b.y);\n var maxY = Math.max(a.y, b.y);\n var inRange = minX <= point.x && point.x < maxX;\n if (minY === maxY) {\n intersects = point.y <= minY && inRange;\n } else {\n intersects = inRange && (maxY - minY) * ((a.x - b.x) * (a.y - b.y) > 0 ? point.x - minX : maxX - point.x) / (maxX - minX) + minY - point.y >= 0;\n }\n }\n return intersects ? 1 : 0;\n }\n var Segment = Class.extend({\n init: function (anchor, controlIn, controlOut) {\n this.anchor(anchor || new Point());\n this.controlIn(controlIn);\n this.controlOut(controlOut);\n },\n bboxTo: function (toSegment, matrix) {\n var segmentAnchor = this.anchor().transformCopy(matrix);\n var toSegmentAnchor = toSegment.anchor().transformCopy(matrix);\n var rect;\n if (this.controlOut() && toSegment.controlIn()) {\n rect = this._curveBoundingBox(segmentAnchor, this.controlOut().transformCopy(matrix), toSegment.controlIn().transformCopy(matrix), toSegmentAnchor);\n } else {\n rect = this._lineBoundingBox(segmentAnchor, toSegmentAnchor);\n }\n return rect;\n },\n _lineBoundingBox: function (p1, p2) {\n return Rect.fromPoints(p1, p2);\n },\n _curveBoundingBox: function (p1, cp1, cp2, p2) {\n var points = [\n p1,\n cp1,\n cp2,\n p2\n ];\n var extremesX = this._curveExtremesFor(points, 'x');\n var extremesY = this._curveExtremesFor(points, 'y');\n var xLimits = arrayLimits([\n extremesX.min,\n extremesX.max,\n p1.x,\n p2.x\n ]);\n var yLimits = arrayLimits([\n extremesY.min,\n extremesY.max,\n p1.y,\n p2.y\n ]);\n return Rect.fromPoints(new Point(xLimits.min, yLimits.min), new Point(xLimits.max, yLimits.max));\n },\n _curveExtremesFor: function (points, field) {\n var extremes = this._curveExtremes(points[0][field], points[1][field], points[2][field], points[3][field]);\n return {\n min: calculateCurveAt(extremes.min, field, points),\n max: calculateCurveAt(extremes.max, field, points)\n };\n },\n _curveExtremes: function (x1, x2, x3, x4) {\n var a = x1 - 3 * x2 + 3 * x3 - x4;\n var b = -2 * (x1 - 2 * x2 + x3);\n var c = x1 - x2;\n var sqrt = Math.sqrt(b * b - 4 * a * c);\n var t1 = 0;\n var t2 = 1;\n if (a === 0) {\n if (b !== 0) {\n t1 = t2 = -c / b;\n }\n } else if (!isNaN(sqrt)) {\n t1 = (-b + sqrt) / (2 * a);\n t2 = (-b - sqrt) / (2 * a);\n }\n var min = Math.max(Math.min(t1, t2), 0);\n if (min < 0 || min > 1) {\n min = 0;\n }\n var max = Math.min(Math.max(t1, t2), 1);\n if (max > 1 || max < 0) {\n max = 1;\n }\n return {\n min: min,\n max: max\n };\n },\n _intersectionsTo: function (segment, point) {\n var intersectionsCount;\n if (this.controlOut() && segment.controlIn()) {\n intersectionsCount = curveIntersectionsCount([\n this.anchor(),\n this.controlOut(),\n segment.controlIn(),\n segment.anchor()\n ], point, this.bboxTo(segment));\n } else {\n intersectionsCount = lineIntersectionsCount(this.anchor(), segment.anchor(), point);\n }\n return intersectionsCount;\n },\n _isOnCurveTo: function (segment, point, width, endSegment) {\n var bbox = this.bboxTo(segment).expand(width, width);\n if (bbox.containsPoint(point)) {\n var p1 = this.anchor();\n var p2 = this.controlOut();\n var p3 = segment.controlIn();\n var p4 = segment.anchor();\n if (endSegment === 'start' && p1.distanceTo(point) <= width) {\n return !isOutOfEndPoint(p1, p2, point);\n } else if (endSegment === 'end' && p4.distanceTo(point) <= width) {\n return !isOutOfEndPoint(p4, p3, point);\n }\n var points = [\n p1,\n p2,\n p3,\n p4\n ];\n if (hasRootsInRange(points, point, 'x', 'y', width) || hasRootsInRange(points, point, 'y', 'x', width)) {\n return true;\n }\n var rotation = transform().rotate(45, point);\n var rotatedPoints = [\n p1.transformCopy(rotation),\n p2.transformCopy(rotation),\n p3.transformCopy(rotation),\n p4.transformCopy(rotation)\n ];\n return hasRootsInRange(rotatedPoints, point, 'x', 'y', width) || hasRootsInRange(rotatedPoints, point, 'y', 'x', width);\n }\n },\n _isOnLineTo: function (segment, point, width) {\n var p1 = this.anchor();\n var p2 = segment.anchor();\n var angle = deg(Math.atan2(p2.y - p1.y, p2.x - p1.x));\n var rect = new Rect([\n p1.x,\n p1.y - width / 2\n ], [\n p1.distanceTo(p2),\n width\n ]);\n return rect.containsPoint(point.transformCopy(transform().rotate(-angle, p1)));\n },\n _isOnPathTo: function (segment, point, width, endSegment) {\n var isOnPath;\n if (this.controlOut() && segment.controlIn()) {\n isOnPath = this._isOnCurveTo(segment, point, width / 2, endSegment);\n } else {\n isOnPath = this._isOnLineTo(segment, point, width);\n }\n return isOnPath;\n }\n });\n definePointAccessors(Segment.prototype, [\n 'anchor',\n 'controlIn',\n 'controlOut'\n ]);\n ObserversMixin.extend(Segment.prototype);\n function arrayLimits(arr) {\n var length = arr.length;\n var min = MAX_NUM;\n var max = MIN_NUM;\n for (var i = 0; i < length; i++) {\n max = Math.max(max, arr[i]);\n min = Math.min(min, arr[i]);\n }\n return {\n min: min,\n max: max\n };\n }\n function elementsBoundingBox(elements, applyTransform, transformation) {\n var boundingBox;\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n if (element.visible()) {\n var elementBoundingBox = applyTransform ? element.bbox(transformation) : element.rawBBox();\n if (elementBoundingBox) {\n if (boundingBox) {\n boundingBox = Rect.union(boundingBox, elementBoundingBox);\n } else {\n boundingBox = elementBoundingBox;\n }\n }\n }\n }\n return boundingBox;\n }\n function elementsClippedBoundingBox(elements, transformation) {\n var boundingBox;\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n if (element.visible()) {\n var elementBoundingBox = element.clippedBBox(transformation);\n if (elementBoundingBox) {\n if (boundingBox) {\n boundingBox = Rect.union(boundingBox, elementBoundingBox);\n } else {\n boundingBox = elementBoundingBox;\n }\n }\n }\n }\n return boundingBox;\n }\n var MultiPath = Element$1.extend({\n init: function (options) {\n Element$1.fn.init.call(this, options);\n this.paths = new GeometryElementsArray();\n this.paths.addObserver(this);\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n }\n },\n moveTo: function (x, y) {\n var path = new Path();\n path.moveTo(x, y);\n this.paths.push(path);\n return this;\n },\n lineTo: function (x, y) {\n if (this.paths.length > 0) {\n last(this.paths).lineTo(x, y);\n }\n return this;\n },\n curveTo: function (controlOut, controlIn, point) {\n if (this.paths.length > 0) {\n last(this.paths).curveTo(controlOut, controlIn, point);\n }\n return this;\n },\n arc: function (startAngle, endAngle, radiusX, radiusY, anticlockwise) {\n if (this.paths.length > 0) {\n last(this.paths).arc(startAngle, endAngle, radiusX, radiusY, anticlockwise);\n }\n return this;\n },\n arcTo: function (end, rx, ry, largeArc, swipe, rotation) {\n if (this.paths.length > 0) {\n last(this.paths).arcTo(end, rx, ry, largeArc, swipe, rotation);\n }\n return this;\n },\n close: function () {\n if (this.paths.length > 0) {\n last(this.paths).close();\n }\n return this;\n },\n _bbox: function (matrix) {\n return elementsBoundingBox(this.paths, true, matrix);\n },\n rawBBox: function () {\n return elementsBoundingBox(this.paths, false);\n },\n _containsPoint: function (point) {\n var paths = this.paths;\n for (var idx = 0; idx < paths.length; idx++) {\n if (paths[idx]._containsPoint(point)) {\n return true;\n }\n }\n return false;\n },\n _isOnPath: function (point) {\n var paths = this.paths;\n var width = this.options.stroke.width;\n for (var idx = 0; idx < paths.length; idx++) {\n if (paths[idx]._isOnPath(point, width)) {\n return true;\n }\n }\n return false;\n },\n _clippedBBox: function (transformation) {\n return elementsClippedBoundingBox(this.paths, this.currentTransform(transformation));\n }\n });\n MultiPath.prototype.nodeType = 'MultiPath';\n Paintable.extend(MultiPath.prototype);\n Measurable.extend(MultiPath.prototype);\n var ShapeMap = {\n l: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n for (var i = 0; i < parameters.length; i += 2) {\n var point = new Point(parameters[i], parameters[i + 1]);\n if (options.isRelative) {\n point.translateWith(position);\n }\n path.lineTo(point.x, point.y);\n position.x = point.x;\n position.y = point.y;\n }\n },\n c: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n for (var i = 0; i < parameters.length; i += 6) {\n var controlOut = new Point(parameters[i], parameters[i + 1]);\n var controlIn = new Point(parameters[i + 2], parameters[i + 3]);\n var point = new Point(parameters[i + 4], parameters[i + 5]);\n if (options.isRelative) {\n controlIn.translateWith(position);\n controlOut.translateWith(position);\n point.translateWith(position);\n }\n path.curveTo(controlOut, controlIn, point);\n position.x = point.x;\n position.y = point.y;\n }\n },\n v: function (path, options) {\n var value = options.isRelative ? 0 : options.position.x;\n toLineParamaters(options.parameters, true, value);\n this.l(path, options);\n },\n h: function (path, options) {\n var value = options.isRelative ? 0 : options.position.y;\n toLineParamaters(options.parameters, false, value);\n this.l(path, options);\n },\n a: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n for (var i = 0; i < parameters.length; i += 7) {\n var radiusX = parameters[i];\n var radiusY = parameters[i + 1];\n var rotation = parameters[i + 2];\n var largeArc = parameters[i + 3];\n var swipe = parameters[i + 4];\n var endPoint = new Point(parameters[i + 5], parameters[i + 6]);\n if (options.isRelative) {\n endPoint.translateWith(position);\n }\n if (position.x !== endPoint.x || position.y !== endPoint.y) {\n path.arcTo(endPoint, radiusX, radiusY, largeArc, swipe, rotation);\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n }\n },\n s: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n var previousCommand = options.previousCommand;\n var lastControlIn;\n if (previousCommand === 's' || previousCommand === 'c') {\n lastControlIn = last(last(path.paths).segments).controlIn();\n }\n for (var i = 0; i < parameters.length; i += 4) {\n var controlIn = new Point(parameters[i], parameters[i + 1]);\n var endPoint = new Point(parameters[i + 2], parameters[i + 3]);\n var controlOut = void 0;\n if (options.isRelative) {\n controlIn.translateWith(position);\n endPoint.translateWith(position);\n }\n if (lastControlIn) {\n controlOut = reflectionPoint(lastControlIn, position);\n } else {\n controlOut = position.clone();\n }\n lastControlIn = controlIn;\n path.curveTo(controlOut, controlIn, endPoint);\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n },\n q: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n for (var i = 0; i < parameters.length; i += 4) {\n var controlPoint = new Point(parameters[i], parameters[i + 1]);\n var endPoint = new Point(parameters[i + 2], parameters[i + 3]);\n if (options.isRelative) {\n controlPoint.translateWith(position);\n endPoint.translateWith(position);\n }\n var cubicControlPoints = quadraticToCubicControlPoints(position, controlPoint, endPoint);\n path.curveTo(cubicControlPoints.controlOut, cubicControlPoints.controlIn, endPoint);\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n },\n t: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n var previousCommand = options.previousCommand;\n var controlPoint;\n if (previousCommand === 'q' || previousCommand === 't') {\n var lastSegment = last(last(path.paths).segments);\n controlPoint = lastSegment.controlIn().clone().translateWith(position.scaleCopy(-1 / 3)).scale(3 / 2);\n }\n for (var i = 0; i < parameters.length; i += 2) {\n var endPoint = new Point(parameters[i], parameters[i + 1]);\n if (options.isRelative) {\n endPoint.translateWith(position);\n }\n if (controlPoint) {\n controlPoint = reflectionPoint(controlPoint, position);\n } else {\n controlPoint = position.clone();\n }\n var cubicControlPoints = quadraticToCubicControlPoints(position, controlPoint, endPoint);\n path.curveTo(cubicControlPoints.controlOut, cubicControlPoints.controlIn, endPoint);\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n }\n };\n function toLineParamaters(parameters, isVertical, value) {\n var insertPosition = isVertical ? 0 : 1;\n for (var i = 0; i < parameters.length; i += 2) {\n parameters.splice(i + insertPosition, 0, value);\n }\n }\n function reflectionPoint(point, center) {\n if (point && center) {\n return center.scaleCopy(2).translate(-point.x, -point.y);\n }\n }\n var third = 1 / 3;\n function quadraticToCubicControlPoints(position, controlPoint, endPoint) {\n var scaledPoint = controlPoint.clone().scale(2 / 3);\n return {\n controlOut: scaledPoint.clone().translateWith(position.scaleCopy(third)),\n controlIn: scaledPoint.translateWith(endPoint.scaleCopy(third))\n };\n }\n var SEGMENT_REGEX = /([a-df-z]{1})([^a-df-z]*)(z)?/gi;\n var SPLIT_REGEX = /[,\\s]?([+\\-]?(?:\\d*\\.\\d+|\\d+)(?:[eE][+\\-]?\\d+)?)/g;\n var MOVE = 'm';\n var CLOSE = 'z';\n function parseParameters(str) {\n var parameters = [];\n str.replace(SPLIT_REGEX, function (match, number) {\n parameters.push(parseFloat(number));\n });\n return parameters;\n }\n var PathParser = Class.extend({\n parse: function (str, options) {\n var multiPath = new MultiPath(options);\n var position = new Point();\n var previousCommand;\n str.replace(SEGMENT_REGEX, function (match, element, params, closePath) {\n var command = element.toLowerCase();\n var isRelative = command === element;\n var parameters = parseParameters(params.trim());\n if (command === MOVE) {\n if (isRelative) {\n position.x += parameters[0];\n position.y += parameters[1];\n } else {\n position.x = parameters[0];\n position.y = parameters[1];\n }\n multiPath.moveTo(position.x, position.y);\n if (parameters.length > 2) {\n command = 'l';\n parameters.splice(0, 2);\n }\n }\n if (ShapeMap[command]) {\n ShapeMap[command](multiPath, {\n parameters: parameters,\n position: position,\n isRelative: isRelative,\n previousCommand: previousCommand\n });\n if (closePath && closePath.toLowerCase() === CLOSE) {\n multiPath.close();\n }\n } else if (command !== MOVE) {\n throw new Error('Error while parsing SVG path. Unsupported command: ' + command);\n }\n previousCommand = command;\n });\n return multiPath;\n }\n });\n PathParser.current = new PathParser();\n var Path = Element$1.extend({\n init: function (options) {\n Element$1.fn.init.call(this, options);\n this.segments = new GeometryElementsArray();\n this.segments.addObserver(this);\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n if (!defined(this.options.stroke.lineJoin)) {\n this.options.set('stroke.lineJoin', 'miter');\n }\n }\n },\n moveTo: function (x, y) {\n this.suspend();\n this.segments.elements([]);\n this.resume();\n this.lineTo(x, y);\n return this;\n },\n lineTo: function (x, y) {\n var point = defined(y) ? new Point(x, y) : x;\n var segment = new Segment(point);\n this.segments.push(segment);\n return this;\n },\n curveTo: function (controlOut, controlIn, point) {\n if (this.segments.length > 0) {\n var lastSegment = last(this.segments);\n var segment = new Segment(point, controlIn);\n this.suspend();\n lastSegment.controlOut(controlOut);\n this.resume();\n this.segments.push(segment);\n }\n return this;\n },\n arc: function (startAngle, endAngle, radiusX, radiusY, anticlockwise) {\n if (this.segments.length > 0) {\n var lastSegment = last(this.segments);\n var anchor = lastSegment.anchor();\n var start = rad(startAngle);\n var center = new Point(anchor.x - radiusX * Math.cos(start), anchor.y - radiusY * Math.sin(start));\n var arc = new Arc$2(center, {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: radiusX,\n radiusY: radiusY,\n anticlockwise: anticlockwise\n });\n this._addArcSegments(arc);\n }\n return this;\n },\n arcTo: function (end, rx, ry, largeArc, swipe, rotation) {\n if (this.segments.length > 0) {\n var lastSegment = last(this.segments);\n var anchor = lastSegment.anchor();\n var arc = Arc$2.fromPoints(anchor, end, rx, ry, largeArc, swipe, rotation);\n this._addArcSegments(arc);\n }\n return this;\n },\n _addArcSegments: function (arc) {\n var this$1 = this;\n this.suspend();\n var curvePoints = arc.curvePoints();\n for (var i = 1; i < curvePoints.length; i += 3) {\n this$1.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\n }\n this.resume();\n this.geometryChange();\n },\n close: function () {\n this.options.closed = true;\n this.geometryChange();\n return this;\n },\n rawBBox: function () {\n return this._bbox();\n },\n _containsPoint: function (point) {\n var segments = this.segments;\n var length = segments.length;\n var intersectionsCount = 0;\n var previous, current;\n for (var idx = 1; idx < length; idx++) {\n previous = segments[idx - 1];\n current = segments[idx];\n intersectionsCount += previous._intersectionsTo(current, point);\n }\n if (this.options.closed || !segments[0].anchor().equals(segments[length - 1].anchor())) {\n intersectionsCount += lineIntersectionsCount(segments[0].anchor(), segments[length - 1].anchor(), point);\n }\n return intersectionsCount % 2 !== 0;\n },\n _isOnPath: function (point, width) {\n var segments = this.segments;\n var length = segments.length;\n var pathWidth = width || this.options.stroke.width;\n if (length > 1) {\n if (segments[0]._isOnPathTo(segments[1], point, pathWidth, 'start')) {\n return true;\n }\n for (var idx = 2; idx <= length - 2; idx++) {\n if (segments[idx - 1]._isOnPathTo(segments[idx], point, pathWidth)) {\n return true;\n }\n }\n if (segments[length - 2]._isOnPathTo(segments[length - 1], point, pathWidth, 'end')) {\n return true;\n }\n }\n return false;\n },\n _bbox: function (matrix) {\n var segments = this.segments;\n var length = segments.length;\n var boundingBox;\n if (length === 1) {\n var anchor = segments[0].anchor().transformCopy(matrix);\n boundingBox = new Rect(anchor, Size.ZERO);\n } else if (length > 0) {\n for (var i = 1; i < length; i++) {\n var segmentBox = segments[i - 1].bboxTo(segments[i], matrix);\n if (boundingBox) {\n boundingBox = Rect.union(boundingBox, segmentBox);\n } else {\n boundingBox = segmentBox;\n }\n }\n }\n return boundingBox;\n }\n });\n Path.fromRect = function (rect, options) {\n return new Path(options).moveTo(rect.topLeft()).lineTo(rect.topRight()).lineTo(rect.bottomRight()).lineTo(rect.bottomLeft()).close();\n };\n Path.fromPoints = function (points, options) {\n if (points) {\n var path = new Path(options);\n for (var i = 0; i < points.length; i++) {\n var point = Point.create(points[i]);\n if (point) {\n if (i === 0) {\n path.moveTo(point);\n } else {\n path.lineTo(point);\n }\n }\n }\n return path;\n }\n };\n Path.fromArc = function (arc, options) {\n var path = new Path(options);\n var startAngle = arc.startAngle;\n var start = arc.pointAt(startAngle);\n path.moveTo(start.x, start.y);\n path.arc(startAngle, arc.endAngle, arc.radiusX, arc.radiusY, arc.anticlockwise);\n return path;\n };\n Path.prototype.nodeType = 'Path';\n Paintable.extend(Path.prototype);\n Measurable.extend(Path.prototype);\n Path.parse = function (str, options) {\n return PathParser.current.parse(str, options);\n };\n var DEFAULT_STROKE$1 = '#000';\n var Arc = Element$1.extend({\n init: function (geometry, options) {\n if (geometry === void 0) {\n geometry = new Arc$2();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke(DEFAULT_STROKE$1);\n }\n },\n _bbox: function (matrix) {\n return this._geometry.bbox(matrix);\n },\n rawBBox: function () {\n return this.geometry().bbox();\n },\n toPath: function () {\n var path = new Path();\n var curvePoints = this.geometry().curvePoints();\n if (curvePoints.length > 0) {\n path.moveTo(curvePoints[0].x, curvePoints[0].y);\n for (var i = 1; i < curvePoints.length; i += 3) {\n path.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\n }\n }\n return path;\n },\n _containsPoint: function (point) {\n return this.geometry().containsPoint(point);\n },\n _isOnPath: function (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n });\n Arc.prototype.nodeType = 'Arc';\n Paintable.extend(Arc.prototype);\n Measurable.extend(Arc.prototype);\n defineGeometryAccessors(Arc.prototype, ['geometry']);\n var DEFAULT_FONT = '12px sans-serif';\n var DEFAULT_FILL = '#000';\n var Text = Element$1.extend({\n init: function (content, position, options) {\n if (position === void 0) {\n position = new Point();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.content(content);\n this.position(position);\n if (!this.options.font) {\n this.options.font = DEFAULT_FONT;\n }\n if (!defined(this.options.fill)) {\n this.fill(DEFAULT_FILL);\n }\n },\n content: function (value) {\n if (defined(value)) {\n this.options.set('content', value);\n return this;\n }\n return this.options.get('content');\n },\n measure: function () {\n var metrics = kendoUtil.measureText(this.content(), { font: this.options.get('font') });\n return metrics;\n },\n rect: function () {\n var size = this.measure();\n var pos = this.position().clone();\n return new Rect(pos, [\n size.width,\n size.height\n ]);\n },\n bbox: function (transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n return this.rect().bbox(combinedMatrix);\n },\n rawBBox: function () {\n return this.rect().bbox();\n },\n _containsPoint: function (point) {\n return this.rect().containsPoint(point);\n }\n });\n Text.prototype.nodeType = 'Text';\n Paintable.extend(Text.prototype);\n definePointAccessors(Text.prototype, ['position']);\n var Image$1 = Element$1.extend({\n init: function (src, rect, options) {\n if (rect === void 0) {\n rect = new Rect();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.src(src);\n this.rect(rect);\n },\n src: function (value) {\n if (defined(value)) {\n this.options.set('src', value);\n return this;\n }\n return this.options.get('src');\n },\n bbox: function (transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n return this._rect.bbox(combinedMatrix);\n },\n rawBBox: function () {\n return this._rect.bbox();\n },\n _containsPoint: function (point) {\n return this._rect.containsPoint(point);\n },\n _hasFill: function () {\n return this.src();\n }\n });\n Image$1.prototype.nodeType = 'Image';\n defineGeometryAccessors(Image$1.prototype, ['rect']);\n var Traversable = {\n extend: function (proto, childrenField) {\n proto.traverse = function (callback) {\n var children = this[childrenField];\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if (child.traverse) {\n child.traverse(callback);\n } else {\n callback(child);\n }\n }\n return this;\n };\n }\n };\n var Group = Element$1.extend({\n init: function (options) {\n Element$1.fn.init.call(this, options);\n this.children = [];\n },\n childrenChange: function (action, items, index) {\n this.trigger('childrenChange', {\n action: action,\n items: items,\n index: index\n });\n },\n append: function () {\n append(this.children, arguments);\n this._reparent(arguments, this);\n this.childrenChange('add', arguments);\n return this;\n },\n insert: function (index, element) {\n this.children.splice(index, 0, element);\n element.parent = this;\n this.childrenChange('add', [element], index);\n return this;\n },\n insertAt: function (element, index) {\n return this.insert(index, element);\n },\n remove: function (element) {\n var index = this.children.indexOf(element);\n if (index >= 0) {\n this.children.splice(index, 1);\n element.parent = null;\n this.childrenChange('remove', [element], index);\n }\n return this;\n },\n removeAt: function (index) {\n if (0 <= index && index < this.children.length) {\n var element = this.children[index];\n this.children.splice(index, 1);\n element.parent = null;\n this.childrenChange('remove', [element], index);\n }\n return this;\n },\n clear: function () {\n var items = this.children;\n this.children = [];\n this._reparent(items, null);\n this.childrenChange('remove', items, 0);\n return this;\n },\n bbox: function (transformation) {\n return elementsBoundingBox(this.children, true, this.currentTransform(transformation));\n },\n rawBBox: function () {\n return elementsBoundingBox(this.children, false);\n },\n _clippedBBox: function (transformation) {\n return elementsClippedBoundingBox(this.children, this.currentTransform(transformation));\n },\n currentTransform: function (transformation) {\n return Element$1.prototype.currentTransform.call(this, transformation) || null;\n },\n containsPoint: function (point, parentTransform) {\n if (this.visible()) {\n var children = this.children;\n var transform = this.currentTransform(parentTransform);\n for (var idx = 0; idx < children.length; idx++) {\n if (children[idx].containsPoint(point, transform)) {\n return true;\n }\n }\n }\n return false;\n },\n _reparent: function (elements, newParent) {\n var this$1 = this;\n for (var i = 0; i < elements.length; i++) {\n var child = elements[i];\n var parent = child.parent;\n if (parent && parent !== this$1 && parent.remove) {\n parent.remove(child);\n }\n child.parent = newParent;\n }\n }\n });\n Group.prototype.nodeType = 'Group';\n Traversable.extend(Group.prototype, 'children');\n function translateToPoint(point, bbox, element) {\n var transofrm = element.transform() || transform();\n var matrix = transofrm.matrix();\n matrix.e += point.x - bbox.origin.x;\n matrix.f += point.y - bbox.origin.y;\n transofrm.matrix(matrix);\n element.transform(transofrm);\n }\n function alignStart(size, rect, align, axis, sizeField) {\n var start;\n if (align === 'start') {\n start = rect.origin[axis];\n } else if (align === 'end') {\n start = rect.origin[axis] + rect.size[sizeField] - size;\n } else {\n start = rect.origin[axis] + (rect.size[sizeField] - size) / 2;\n }\n return start;\n }\n function alignStartReverse(size, rect, align, axis, sizeField) {\n var start;\n if (align === 'start') {\n start = rect.origin[axis] + rect.size[sizeField] - size;\n } else if (align === 'end') {\n start = rect.origin[axis];\n } else {\n start = rect.origin[axis] + (rect.size[sizeField] - size) / 2;\n }\n return start;\n }\n var DEFAULT_OPTIONS = {\n alignContent: 'start',\n justifyContent: 'start',\n alignItems: 'start',\n spacing: 0,\n orientation: 'horizontal',\n lineSpacing: 0,\n wrap: true,\n revers: false\n };\n var forEach = function (elements, callback) {\n elements.forEach(callback);\n };\n var forEachReverse = function (elements, callback) {\n var length = elements.length;\n for (var idx = length - 1; idx >= 0; idx--) {\n callback(elements[idx], idx);\n }\n };\n var Layout = Group.extend({\n init: function (rect, options) {\n Group.fn.init.call(this, $.extend({}, DEFAULT_OPTIONS, options));\n this._rect = rect;\n this._fieldMap = {};\n },\n rect: function (value) {\n if (value) {\n this._rect = value;\n return this;\n }\n return this._rect;\n },\n _initMap: function () {\n var options = this.options;\n var fieldMap = this._fieldMap;\n if (options.orientation === 'horizontal') {\n fieldMap.sizeField = 'width';\n fieldMap.groupsSizeField = 'height';\n fieldMap.groupAxis = 'x';\n fieldMap.groupsAxis = 'y';\n } else {\n fieldMap.sizeField = 'height';\n fieldMap.groupsSizeField = 'width';\n fieldMap.groupAxis = 'y';\n fieldMap.groupsAxis = 'x';\n }\n if (options.reverse) {\n this.forEach = forEachReverse;\n this.justifyAlign = alignStartReverse;\n } else {\n this.forEach = forEach;\n this.justifyAlign = alignStart;\n }\n },\n reflow: function () {\n var this$1 = this;\n if (!this._rect || this.children.length === 0) {\n return;\n }\n this._initMap();\n if (this.options.transform) {\n this.transform(null);\n }\n var options = this.options;\n var rect = this._rect;\n var ref = this._initGroups();\n var groups = ref.groups;\n var groupsSize = ref.groupsSize;\n var ref$1 = this._fieldMap;\n var sizeField = ref$1.sizeField;\n var groupsSizeField = ref$1.groupsSizeField;\n var groupAxis = ref$1.groupAxis;\n var groupsAxis = ref$1.groupsAxis;\n var groupOrigin = new Point();\n var elementOrigin = new Point();\n var size = new Size();\n var groupStart = alignStart(groupsSize, rect, options.alignContent, groupsAxis, groupsSizeField);\n var elementStart, group, groupBox;\n var arrangeElements = function (bbox, idx) {\n var element = group.elements[idx];\n elementOrigin[groupAxis] = elementStart;\n elementOrigin[groupsAxis] = alignStart(bbox.size[groupsSizeField], groupBox, options.alignItems, groupsAxis, groupsSizeField);\n translateToPoint(elementOrigin, bbox, element);\n elementStart += bbox.size[sizeField] + options.spacing;\n };\n for (var groupIdx = 0; groupIdx < groups.length; groupIdx++) {\n group = groups[groupIdx];\n groupOrigin[groupAxis] = elementStart = this$1.justifyAlign(group.size, rect, options.justifyContent, groupAxis, sizeField);\n groupOrigin[groupsAxis] = groupStart;\n size[sizeField] = group.size;\n size[groupsSizeField] = group.lineSize;\n groupBox = new Rect(groupOrigin, size);\n this$1.forEach(group.bboxes, arrangeElements);\n groupStart += group.lineSize + options.lineSpacing;\n }\n if (!options.wrap && group.size > rect.size[sizeField]) {\n var scale = rect.size[sizeField] / groupBox.size[sizeField];\n var scaledStart = groupBox.topLeft().scale(scale, scale);\n var scaledSize = groupBox.size[groupsSizeField] * scale;\n var newStart = alignStart(scaledSize, rect, options.alignContent, groupsAxis, groupsSizeField);\n var transform$$1 = transform();\n if (groupAxis === 'x') {\n transform$$1.translate(rect.origin.x - scaledStart.x, newStart - scaledStart.y);\n } else {\n transform$$1.translate(newStart - scaledStart.x, rect.origin.y - scaledStart.y);\n }\n transform$$1.scale(scale, scale);\n this.transform(transform$$1);\n }\n },\n _initGroups: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var children = ref.children;\n var lineSpacing = options.lineSpacing;\n var wrap = options.wrap;\n var spacing = options.spacing;\n var sizeField = this._fieldMap.sizeField;\n var group = this._newGroup();\n var groups = [];\n var addGroup = function () {\n groups.push(group);\n groupsSize += group.lineSize + lineSpacing;\n };\n var groupsSize = -lineSpacing;\n for (var idx = 0; idx < children.length; idx++) {\n var element = children[idx];\n var bbox = children[idx].clippedBBox();\n if (element.visible() && bbox) {\n if (wrap && group.size + bbox.size[sizeField] + spacing > this$1._rect.size[sizeField]) {\n if (group.bboxes.length === 0) {\n this$1._addToGroup(group, bbox, element);\n addGroup();\n group = this$1._newGroup();\n } else {\n addGroup();\n group = this$1._newGroup();\n this$1._addToGroup(group, bbox, element);\n }\n } else {\n this$1._addToGroup(group, bbox, element);\n }\n }\n }\n if (group.bboxes.length) {\n addGroup();\n }\n return {\n groups: groups,\n groupsSize: groupsSize\n };\n },\n _addToGroup: function (group, bbox, element) {\n group.size += bbox.size[this._fieldMap.sizeField] + this.options.spacing;\n group.lineSize = Math.max(bbox.size[this._fieldMap.groupsSizeField], group.lineSize);\n group.bboxes.push(bbox);\n group.elements.push(element);\n },\n _newGroup: function () {\n return {\n lineSize: 0,\n size: -this.options.spacing,\n bboxes: [],\n elements: []\n };\n }\n });\n var Rect$2 = Element$1.extend({\n init: function (geometry, options) {\n if (geometry === void 0) {\n geometry = new Rect();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n }\n },\n _bbox: function (matrix) {\n return this._geometry.bbox(matrix);\n },\n rawBBox: function () {\n return this._geometry.bbox();\n },\n _containsPoint: function (point) {\n return this._geometry.containsPoint(point);\n },\n _isOnPath: function (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n });\n Rect$2.prototype.nodeType = 'Rect';\n Paintable.extend(Rect$2.prototype);\n Measurable.extend(Rect$2.prototype);\n defineGeometryAccessors(Rect$2.prototype, ['geometry']);\n function alignElements(elements, rect, alignment, axis, sizeField) {\n for (var idx = 0; idx < elements.length; idx++) {\n var bbox = elements[idx].clippedBBox();\n if (bbox) {\n var point = bbox.origin.clone();\n point[axis] = alignStart(bbox.size[sizeField], rect, alignment || 'start', axis, sizeField);\n translateToPoint(point, bbox, elements[idx]);\n }\n }\n }\n function align(elements, rect, alignment) {\n alignElements(elements, rect, alignment, 'x', 'width');\n }\n function vAlign(elements, rect, alignment) {\n alignElements(elements, rect, alignment, 'y', 'height');\n }\n function stackElements(elements, stackAxis, otherAxis, sizeField) {\n if (elements.length > 1) {\n var origin = new Point();\n var previousBBox = elements[0].bbox;\n for (var idx = 1; idx < elements.length; idx++) {\n var element = elements[idx].element;\n var bbox = elements[idx].bbox;\n origin[stackAxis] = previousBBox.origin[stackAxis] + previousBBox.size[sizeField];\n origin[otherAxis] = bbox.origin[otherAxis];\n translateToPoint(origin, bbox, element);\n bbox.origin[stackAxis] = origin[stackAxis];\n previousBBox = bbox;\n }\n }\n }\n function createStackElements(elements) {\n var stackElements = [];\n for (var idx = 0; idx < elements.length; idx++) {\n var element = elements[idx];\n var bbox = element.clippedBBox();\n if (bbox) {\n stackElements.push({\n element: element,\n bbox: bbox\n });\n }\n }\n return stackElements;\n }\n function stack(elements) {\n stackElements(createStackElements(elements), 'x', 'y', 'width');\n }\n function vStack(elements) {\n stackElements(createStackElements(elements), 'y', 'x', 'height');\n }\n function getStacks(elements, rect, sizeField) {\n var maxSize = rect.size[sizeField];\n var stacks = [];\n var stack = [];\n var stackSize = 0;\n var element, bbox;\n var addElementToStack = function () {\n stack.push({\n element: element,\n bbox: bbox\n });\n };\n for (var idx = 0; idx < elements.length; idx++) {\n element = elements[idx];\n bbox = element.clippedBBox();\n if (bbox) {\n var size = bbox.size[sizeField];\n if (stackSize + size > maxSize) {\n if (stack.length) {\n stacks.push(stack);\n stack = [];\n addElementToStack();\n stackSize = size;\n } else {\n addElementToStack();\n stacks.push(stack);\n stack = [];\n stackSize = 0;\n }\n } else {\n addElementToStack();\n stackSize += size;\n }\n }\n }\n if (stack.length) {\n stacks.push(stack);\n }\n return stacks;\n }\n function wrapElements(elements, rect, axis, otherAxis, sizeField) {\n var stacks = getStacks(elements, rect, sizeField);\n var origin = rect.origin.clone();\n var result = [];\n for (var idx = 0; idx < stacks.length; idx++) {\n var stack = stacks[idx];\n var startElement = stack[0];\n origin[otherAxis] = startElement.bbox.origin[otherAxis];\n translateToPoint(origin, startElement.bbox, startElement.element);\n startElement.bbox.origin[axis] = origin[axis];\n stackElements(stack, axis, otherAxis, sizeField);\n result.push([]);\n for (var elementIdx = 0; elementIdx < stack.length; elementIdx++) {\n result[idx].push(stack[elementIdx].element);\n }\n }\n return result;\n }\n function wrap(elements, rect) {\n return wrapElements(elements, rect, 'x', 'y', 'width');\n }\n function vWrap(elements, rect) {\n return wrapElements(elements, rect, 'y', 'x', 'height');\n }\n function fit(element, rect) {\n var bbox = element.clippedBBox();\n if (bbox) {\n var elementSize = bbox.size;\n var rectSize = rect.size;\n if (rectSize.width < elementSize.width || rectSize.height < elementSize.height) {\n var scale = Math.min(rectSize.width / elementSize.width, rectSize.height / elementSize.height);\n var transform$$1 = element.transform() || transform();\n transform$$1.scale(scale, scale);\n element.transform(transform$$1);\n }\n }\n }\n var StopsArray = ElementsArray.extend({\n _change: function () {\n this.optionsChange({ field: 'stops' });\n }\n });\n function optionsAccessor(name) {\n return function (value) {\n if (defined(value)) {\n this.options.set(name, value);\n return this;\n }\n return this.options.get(name);\n };\n }\n function defineOptionsAccessors(fn, names) {\n for (var i = 0; i < names.length; i++) {\n fn[names[i]] = optionsAccessor(names[i]);\n }\n }\n var GradientStop = Class.extend({\n init: function (offset, color, opacity) {\n this.options = new OptionsStore({\n offset: offset,\n color: color,\n opacity: defined(opacity) ? opacity : 1\n });\n this.options.addObserver(this);\n }\n });\n GradientStop.create = function (arg) {\n if (defined(arg)) {\n var stop;\n if (arg instanceof GradientStop) {\n stop = arg;\n } else if (arg.length > 1) {\n stop = new GradientStop(arg[0], arg[1], arg[2]);\n } else {\n stop = new GradientStop(arg.offset, arg.color, arg.opacity);\n }\n return stop;\n }\n };\n defineOptionsAccessors(GradientStop.prototype, [\n 'offset',\n 'color',\n 'opacity'\n ]);\n ObserversMixin.extend(GradientStop.prototype);\n var Gradient = Class.extend({\n init: function (options) {\n if (options === void 0) {\n options = {};\n }\n this.stops = new StopsArray(this._createStops(options.stops));\n this.stops.addObserver(this);\n this._userSpace = options.userSpace;\n this.id = definitionId();\n },\n userSpace: function (value) {\n if (defined(value)) {\n this._userSpace = value;\n this.optionsChange();\n return this;\n }\n return this._userSpace;\n },\n _createStops: function (stops) {\n if (stops === void 0) {\n stops = [];\n }\n var result = [];\n for (var idx = 0; idx < stops.length; idx++) {\n result.push(GradientStop.create(stops[idx]));\n }\n return result;\n },\n addStop: function (offset, color, opacity) {\n this.stops.push(new GradientStop(offset, color, opacity));\n },\n removeStop: function (stop) {\n var index = this.stops.indexOf(stop);\n if (index >= 0) {\n this.stops.splice(index, 1);\n }\n }\n });\n Gradient.prototype.nodeType = 'Gradient';\n ObserversMixin.extend(Gradient.prototype);\n $.extend(Gradient.prototype, {\n optionsChange: function (e) {\n this.trigger('optionsChange', {\n field: 'gradient' + (e ? '.' + e.field : ''),\n value: this\n });\n },\n geometryChange: function () {\n this.optionsChange();\n }\n });\n var LinearGradient = Gradient.extend({\n init: function (options) {\n if (options === void 0) {\n options = {};\n }\n Gradient.fn.init.call(this, options);\n this.start(options.start || new Point());\n this.end(options.end || new Point(1, 0));\n }\n });\n definePointAccessors(LinearGradient.prototype, [\n 'start',\n 'end'\n ]);\n var RadialGradient = Gradient.extend({\n init: function (options) {\n if (options === void 0) {\n options = {};\n }\n Gradient.fn.init.call(this, options);\n this.center(options.center || new Point());\n this._radius = defined(options.radius) ? options.radius : 1;\n this._fallbackFill = options.fallbackFill;\n },\n radius: function (value) {\n if (defined(value)) {\n this._radius = value;\n this.geometryChange();\n return this;\n }\n return this._radius;\n },\n fallbackFill: function (value) {\n if (defined(value)) {\n this._fallbackFill = value;\n this.optionsChange();\n return this;\n }\n return this._fallbackFill;\n }\n });\n definePointAccessors(RadialGradient.prototype, ['center']);\n function swing(position) {\n return 0.5 - Math.cos(position * Math.PI) / 2;\n }\n function linear(position) {\n return position;\n }\n function easeOutElastic(position, time, start, diff) {\n var s = 1.70158, p = 0, a = diff;\n if (position === 0) {\n return start;\n }\n if (position === 1) {\n return start + diff;\n }\n if (!p) {\n p = 0.5;\n }\n if (a < Math.abs(diff)) {\n a = diff;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(diff / a);\n }\n return a * Math.pow(2, -10 * position) * Math.sin((Number(position) - s) * (1.1 * Math.PI) / p) + diff + start;\n }\n var easingFunctions = {\n swing: swing,\n linear: linear,\n easeOutElastic: easeOutElastic\n };\n var AnimationFactory = Class.extend({\n init: function () {\n this._items = [];\n },\n register: function (name, type) {\n this._items.push({\n name: name,\n type: type\n });\n },\n create: function (element, options) {\n var items = this._items;\n var match;\n if (options && options.type) {\n var type = options.type.toLowerCase();\n for (var i = 0; i < items.length; i++) {\n if (items[i].name.toLowerCase() === type) {\n match = items[i];\n break;\n }\n }\n }\n if (match) {\n return new match.type(element, options);\n }\n }\n });\n AnimationFactory.current = new AnimationFactory();\n var now = Date.now || function () {\n return new Date().getTime();\n };\n var Animation = Class.extend({\n init: function (element, options) {\n this.options = $.extend({}, this.options, options);\n this.element = element;\n },\n setup: function () {\n },\n step: function () {\n },\n play: function () {\n var this$1 = this;\n var options = this.options;\n var duration = options.duration;\n var delay = options.delay;\n if (delay === void 0) {\n delay = 0;\n }\n var easing = easingFunctions[options.easing];\n var start = now() + delay;\n var finish = start + duration;\n if (duration === 0) {\n this.step(1);\n this.abort();\n } else {\n setTimeout(function () {\n var loop = function () {\n if (this$1._stopped) {\n return;\n }\n var wallTime = now();\n var time = limitValue(wallTime - start, 0, duration);\n var position = time / duration;\n var easingPosition = easing(position, time, 0, 1, duration);\n this$1.step(easingPosition);\n if (wallTime < finish) {\n kendo.animationFrame(loop);\n } else {\n this$1.abort();\n }\n };\n loop();\n }, delay);\n }\n },\n abort: function () {\n this._stopped = true;\n },\n destroy: function () {\n this.abort();\n }\n });\n Animation.prototype.options = {\n duration: 500,\n easing: 'swing'\n };\n Animation.create = function (type, element, options) {\n return AnimationFactory.current.create(type, element, options);\n };\n var SurfaceFactory = Class.extend({\n init: function () {\n this._items = [];\n },\n register: function (name, type, order) {\n var items = this._items;\n var first = items[0];\n var entry = {\n name: name,\n type: type,\n order: order\n };\n if (!first || order < first.order) {\n items.unshift(entry);\n } else {\n items.push(entry);\n }\n },\n create: function (element, options) {\n var items = this._items;\n var match = items[0];\n if (options && options.type) {\n var preferred = options.type.toLowerCase();\n for (var i = 0; i < items.length; i++) {\n if (items[i].name === preferred) {\n match = items[i];\n break;\n }\n }\n }\n if (match) {\n return new match.type(element, options);\n }\n kendo.logToConsole('Warning: Unable to create Kendo UI Drawing Surface. Possible causes:\\n' + '- The browser does not support SVG and Canvas. User agent: ' + navigator.userAgent);\n }\n });\n SurfaceFactory.current = new SurfaceFactory();\n var events = [\n 'click',\n 'mouseenter',\n 'mouseleave',\n 'mousemove',\n 'resize'\n ];\n var Surface = kendo.Observable.extend({\n init: function (element, options) {\n kendo.Observable.fn.init.call(this);\n this.options = $.extend({}, options);\n this.element = element;\n this.element._kendoExportVisual = this.exportVisual.bind(this);\n this._click = this._handler('click');\n this._mouseenter = this._handler('mouseenter');\n this._mouseleave = this._handler('mouseleave');\n this._mousemove = this._handler('mousemove');\n this._visual = new Group();\n elementSize(element, this.options);\n this.bind(events, this.options);\n this._enableTracking();\n },\n draw: function (element) {\n this._visual.children.push(element);\n },\n clear: function () {\n this._visual.children = [];\n },\n destroy: function () {\n this._visual = null;\n this.element._kendoExportVisual = null;\n this.unbind();\n },\n eventTarget: function (e) {\n var this$1 = this;\n var domNode = eventElement(e);\n var node;\n while (!node && domNode) {\n node = domNode._kendoNode;\n if (domNode === this$1.element) {\n break;\n }\n domNode = domNode.parentElement;\n }\n if (node) {\n return node.srcElement;\n }\n },\n exportVisual: function () {\n return this._visual;\n },\n getSize: function () {\n return elementSize(this.element);\n },\n currentSize: function (size) {\n if (size) {\n this._size = size;\n } else {\n return this._size;\n }\n },\n setSize: function (size) {\n elementSize(this.element, size);\n this.currentSize(size);\n this._resize();\n },\n resize: function (force) {\n var size = this.getSize();\n var currentSize = this.currentSize();\n if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this.currentSize(size);\n this._resize(size, force);\n this.trigger('resize', size);\n }\n },\n size: function (value) {\n if (!value) {\n return this.getSize();\n }\n this.setSize(value);\n },\n suspendTracking: function () {\n this._suspendedTracking = true;\n },\n resumeTracking: function () {\n this._suspendedTracking = false;\n },\n _enableTracking: function () {\n },\n _resize: function () {\n },\n _handler: function (eventName) {\n var this$1 = this;\n return function (e) {\n var node = this$1.eventTarget(e);\n if (node && !this$1._suspendedTracking) {\n this$1.trigger(eventName, {\n element: node,\n originalEvent: e,\n type: eventName\n });\n }\n };\n },\n _elementOffset: function () {\n var element = this.element;\n var ref = elementStyles(element, [\n 'paddingLeft',\n 'paddingTop'\n ]);\n var paddingLeft = ref.paddingLeft;\n var paddingTop = ref.paddingTop;\n var ref$1 = elementOffset(element);\n var left = ref$1.left;\n var top = ref$1.top;\n return {\n left: left + parseInt(paddingLeft, 10),\n top: top + parseInt(paddingTop, 10)\n };\n },\n _surfacePoint: function (e) {\n var offset = this._elementOffset();\n var coord = eventCoordinates(e);\n var x = coord.x - offset.left;\n var y = coord.y - offset.top;\n return new Point(x, y);\n }\n });\n Surface.create = function (element, options) {\n return SurfaceFactory.current.create(element, options);\n };\n Surface.support = {};\n var BaseNode = Class.extend({\n init: function (srcElement) {\n this.childNodes = [];\n this.parent = null;\n if (srcElement) {\n this.srcElement = srcElement;\n this.observe();\n }\n },\n destroy: function () {\n var this$1 = this;\n if (this.srcElement) {\n this.srcElement.removeObserver(this);\n }\n var children = this.childNodes;\n for (var i = 0; i < children.length; i++) {\n this$1.childNodes[i].destroy();\n }\n this.parent = null;\n },\n load: function () {\n },\n observe: function () {\n if (this.srcElement) {\n this.srcElement.addObserver(this);\n }\n },\n append: function (node) {\n this.childNodes.push(node);\n node.parent = this;\n },\n insertAt: function (node, pos) {\n this.childNodes.splice(pos, 0, node);\n node.parent = this;\n },\n remove: function (index, count) {\n var this$1 = this;\n var end = index + count;\n for (var i = index; i < end; i++) {\n this$1.childNodes[i].removeSelf();\n }\n this.childNodes.splice(index, count);\n },\n removeSelf: function () {\n this.clear();\n this.destroy();\n },\n clear: function () {\n this.remove(0, this.childNodes.length);\n },\n invalidate: function () {\n if (this.parent) {\n this.parent.invalidate();\n }\n },\n geometryChange: function () {\n this.invalidate();\n },\n optionsChange: function () {\n this.invalidate();\n },\n childrenChange: function (e) {\n if (e.action === 'add') {\n this.load(e.items, e.index);\n } else if (e.action === 'remove') {\n this.remove(e.index, e.items.length);\n }\n this.invalidate();\n }\n });\n function renderAttr(name, value) {\n return defined(value) && value !== null ? ' ' + name + '=\"' + value + '\" ' : '';\n }\n function renderAllAttr(attrs) {\n var output = '';\n for (var i = 0; i < attrs.length; i++) {\n output += renderAttr(attrs[i][0], attrs[i][1]);\n }\n return output;\n }\n function renderStyle(attrs) {\n var output = '';\n for (var i = 0; i < attrs.length; i++) {\n var value = attrs[i][1];\n if (defined(value)) {\n output += attrs[i][0] + ':' + value + ';';\n }\n }\n if (output !== '') {\n return output;\n }\n }\n var NODE_MAP = {};\n var SVG_NS = 'http://www.w3.org/2000/svg';\n var NONE = 'none';\n var renderSVG = function (container, svg) {\n container.innerHTML = svg;\n };\n if (typeof document !== 'undefined') {\n var testFragment = '';\n var testContainer = document.createElement('div');\n var hasParser = typeof DOMParser !== 'undefined';\n testContainer.innerHTML = testFragment;\n if (hasParser && testContainer.firstChild.namespaceURI !== SVG_NS) {\n renderSVG = function (container, svg) {\n var parser = new DOMParser();\n var chartDoc = parser.parseFromString(svg, 'text/xml');\n var importedDoc = document.adoptNode(chartDoc.documentElement);\n container.innerHTML = '';\n container.appendChild(importedDoc);\n };\n }\n }\n var renderSVG$1 = renderSVG;\n var TRANSFORM = 'transform';\n var DefinitionMap = {\n clip: 'clip-path',\n fill: 'fill'\n };\n function isDefinition(type, value) {\n return type === 'clip' || type === 'fill' && (!value || value.nodeType === 'Gradient');\n }\n function baseUrl() {\n var base = document.getElementsByTagName('base')[0];\n var href = document.location.href;\n var url = '';\n if (base && !supportBrowser.msie) {\n var hashIndex = href.indexOf('#');\n if (hashIndex !== -1) {\n href = href.substring(0, hashIndex);\n }\n url = href;\n }\n return url;\n }\n var Node = BaseNode.extend({\n init: function (srcElement, options) {\n BaseNode.fn.init.call(this, srcElement);\n this.definitions = {};\n this.options = options;\n },\n destroy: function () {\n if (this.element) {\n this.element._kendoNode = null;\n this.element = null;\n }\n this.clearDefinitions();\n BaseNode.fn.destroy.call(this);\n },\n load: function (elements, pos) {\n var this$1 = this;\n for (var i = 0; i < elements.length; i++) {\n var srcElement = elements[i];\n var children = srcElement.children;\n var childNode = new NODE_MAP[srcElement.nodeType](srcElement, this$1.options);\n if (defined(pos)) {\n this$1.insertAt(childNode, pos);\n } else {\n this$1.append(childNode);\n }\n childNode.createDefinitions();\n if (children && children.length > 0) {\n childNode.load(children);\n }\n var element = this$1.element;\n if (element) {\n childNode.attachTo(element, pos);\n }\n }\n },\n root: function () {\n var root = this;\n while (root.parent) {\n root = root.parent;\n }\n return root;\n },\n attachTo: function (domElement, pos) {\n var container = document.createElement('div');\n renderSVG$1(container, '' + this.render() + '');\n var element = container.firstChild.firstChild;\n if (element) {\n if (defined(pos)) {\n domElement.insertBefore(element, domElement.childNodes[pos] || null);\n } else {\n domElement.appendChild(element);\n }\n this.setElement(element);\n }\n },\n setElement: function (element) {\n if (this.element) {\n this.element._kendoNode = null;\n }\n this.element = element;\n this.element._kendoNode = this;\n var nodes = this.childNodes;\n for (var i = 0; i < nodes.length; i++) {\n var childElement = element.childNodes[i];\n nodes[i].setElement(childElement);\n }\n },\n clear: function () {\n this.clearDefinitions();\n if (this.element) {\n this.element.innerHTML = '';\n }\n var children = this.childNodes;\n for (var i = 0; i < children.length; i++) {\n children[i].destroy();\n }\n this.childNodes = [];\n },\n removeSelf: function () {\n if (this.element) {\n var parentNode = this.element.parentNode;\n if (parentNode) {\n parentNode.removeChild(this.element);\n }\n this.element = null;\n }\n BaseNode.fn.removeSelf.call(this);\n },\n template: function () {\n return this.renderChildren();\n },\n render: function () {\n return this.template();\n },\n renderChildren: function () {\n var nodes = this.childNodes;\n var output = '';\n for (var i = 0; i < nodes.length; i++) {\n output += nodes[i].render();\n }\n return output;\n },\n optionsChange: function (e) {\n var field = e.field;\n var value = e.value;\n if (field === 'visible') {\n this.css('display', value ? '' : NONE);\n } else if (DefinitionMap[field] && isDefinition(field, value)) {\n this.updateDefinition(field, value);\n } else if (field === 'opacity') {\n this.attr('opacity', value);\n } else if (field === 'cursor') {\n this.css('cursor', value);\n } else if (field === 'id') {\n if (value) {\n this.attr('id', value);\n } else {\n this.removeAttr('id');\n }\n }\n BaseNode.fn.optionsChange.call(this, e);\n },\n attr: function (name, value) {\n if (this.element) {\n this.element.setAttribute(name, value);\n }\n },\n allAttr: function (attrs) {\n var this$1 = this;\n for (var i = 0; i < attrs.length; i++) {\n this$1.attr(attrs[i][0], attrs[i][1]);\n }\n },\n css: function (name, value) {\n if (this.element) {\n this.element.style[name] = value;\n }\n },\n allCss: function (styles) {\n var this$1 = this;\n for (var i = 0; i < styles.length; i++) {\n this$1.css(styles[i][0], styles[i][1]);\n }\n },\n removeAttr: function (name) {\n if (this.element) {\n this.element.removeAttribute(name);\n }\n },\n mapTransform: function (transform) {\n var attrs = [];\n if (transform) {\n attrs.push([\n TRANSFORM,\n 'matrix(' + transform.matrix().toString(6) + ')'\n ]);\n }\n return attrs;\n },\n renderTransform: function () {\n return renderAllAttr(this.mapTransform(this.srcElement.transform()));\n },\n transformChange: function (value) {\n if (value) {\n this.allAttr(this.mapTransform(value));\n } else {\n this.removeAttr(TRANSFORM);\n }\n },\n mapStyle: function () {\n var options = this.srcElement.options;\n var style = [[\n 'cursor',\n options.cursor\n ]];\n if (options.visible === false) {\n style.push([\n 'display',\n NONE\n ]);\n }\n return style;\n },\n renderStyle: function () {\n return renderAttr('style', renderStyle(this.mapStyle(true)));\n },\n renderOpacity: function () {\n return renderAttr('opacity', this.srcElement.options.opacity);\n },\n renderId: function () {\n return renderAttr('id', this.srcElement.options.id);\n },\n createDefinitions: function () {\n var srcElement = this.srcElement;\n var definitions = this.definitions;\n if (srcElement) {\n var options = srcElement.options;\n var hasDefinitions;\n for (var field in DefinitionMap) {\n var definition = options.get(field);\n if (definition && isDefinition(field, definition)) {\n definitions[field] = definition;\n hasDefinitions = true;\n }\n }\n if (hasDefinitions) {\n this.definitionChange({\n action: 'add',\n definitions: definitions\n });\n }\n }\n },\n definitionChange: function (e) {\n if (this.parent) {\n this.parent.definitionChange(e);\n }\n },\n updateDefinition: function (type, value) {\n var definitions = this.definitions;\n var current = definitions[type];\n var attr = DefinitionMap[type];\n var definition = {};\n if (current) {\n definition[type] = current;\n this.definitionChange({\n action: 'remove',\n definitions: definition\n });\n delete definitions[type];\n }\n if (!value) {\n if (current) {\n this.removeAttr(attr);\n }\n } else {\n definition[type] = value;\n this.definitionChange({\n action: 'add',\n definitions: definition\n });\n definitions[type] = value;\n this.attr(attr, this.refUrl(value.id));\n }\n },\n clearDefinitions: function () {\n var definitions = this.definitions;\n this.definitionChange({\n action: 'remove',\n definitions: definitions\n });\n this.definitions = {};\n },\n renderDefinitions: function () {\n return renderAllAttr(this.mapDefinitions());\n },\n mapDefinitions: function () {\n var this$1 = this;\n var definitions = this.definitions;\n var attrs = [];\n for (var field in definitions) {\n attrs.push([\n DefinitionMap[field],\n this$1.refUrl(definitions[field].id)\n ]);\n }\n return attrs;\n },\n refUrl: function (id) {\n var skipBaseHref = (this.options || {}).skipBaseHref;\n var baseHref = this.baseUrl().replace(/'/g, '\\\\\\'');\n var base = skipBaseHref ? '' : baseHref;\n return 'url(' + base + '#' + id + ')';\n },\n baseUrl: function () {\n return baseUrl();\n }\n });\n var GradientStopNode = Node.extend({\n template: function () {\n return '';\n },\n renderOffset: function () {\n return renderAttr('offset', this.srcElement.offset());\n },\n mapStyle: function () {\n var srcElement = this.srcElement;\n return [\n [\n 'stop-color',\n srcElement.color()\n ],\n [\n 'stop-opacity',\n srcElement.opacity()\n ]\n ];\n },\n optionsChange: function (e) {\n if (e.field === 'offset') {\n this.attr(e.field, e.value);\n } else if (e.field === 'color' || e.field === 'opacity') {\n this.css('stop-' + e.field, e.value);\n }\n }\n });\n var GradientNode = Node.extend({\n init: function (srcElement) {\n Node.fn.init.call(this, srcElement);\n this.id = srcElement.id;\n this.loadStops();\n },\n loadStops: function () {\n var this$1 = this;\n var stops = this.srcElement.stops;\n var element = this.element;\n for (var idx = 0; idx < stops.length; idx++) {\n var stopNode = new GradientStopNode(stops[idx]);\n this$1.append(stopNode);\n if (element) {\n stopNode.attachTo(element);\n }\n }\n },\n optionsChange: function (e) {\n if (e.field === 'gradient.stops') {\n BaseNode.prototype.clear.call(this);\n this.loadStops();\n } else if (e.field === 'gradient') {\n this.allAttr(this.mapCoordinates());\n }\n },\n renderCoordinates: function () {\n return renderAllAttr(this.mapCoordinates());\n },\n mapSpace: function () {\n return [\n 'gradientUnits',\n this.srcElement.userSpace() ? 'userSpaceOnUse' : 'objectBoundingBox'\n ];\n }\n });\n var LinearGradientNode = GradientNode.extend({\n template: function () {\n return '' + this.renderChildren() + '';\n },\n mapCoordinates: function () {\n var srcElement = this.srcElement;\n var start = srcElement.start();\n var end = srcElement.end();\n var attrs = [\n [\n 'x1',\n start.x\n ],\n [\n 'y1',\n start.y\n ],\n [\n 'x2',\n end.x\n ],\n [\n 'y2',\n end.y\n ],\n this.mapSpace()\n ];\n return attrs;\n }\n });\n var RadialGradientNode = GradientNode.extend({\n template: function () {\n return '' + this.renderChildren() + '';\n },\n mapCoordinates: function () {\n var srcElement = this.srcElement;\n var center = srcElement.center();\n var radius = srcElement.radius();\n var attrs = [\n [\n 'cx',\n center.x\n ],\n [\n 'cy',\n center.y\n ],\n [\n 'r',\n radius\n ],\n this.mapSpace()\n ];\n return attrs;\n }\n });\n var ClipNode = Node.extend({\n init: function (srcElement) {\n Node.fn.init.call(this);\n this.srcElement = srcElement;\n this.id = srcElement.id;\n this.load([srcElement]);\n },\n template: function () {\n return '' + this.renderChildren() + '';\n }\n });\n var DefinitionNode = Node.extend({\n init: function () {\n Node.fn.init.call(this);\n this.definitionMap = {};\n },\n attachTo: function (domElement) {\n this.element = domElement;\n },\n template: function () {\n return '' + this.renderChildren() + '';\n },\n definitionChange: function (e) {\n var definitions = e.definitions;\n var action = e.action;\n if (action === 'add') {\n this.addDefinitions(definitions);\n } else if (action === 'remove') {\n this.removeDefinitions(definitions);\n }\n },\n createDefinition: function (type, item) {\n var nodeType;\n if (type === 'clip') {\n nodeType = ClipNode;\n } else if (type === 'fill') {\n if (item instanceof LinearGradient) {\n nodeType = LinearGradientNode;\n } else if (item instanceof RadialGradient) {\n nodeType = RadialGradientNode;\n }\n }\n return new nodeType(item);\n },\n addDefinitions: function (definitions) {\n var this$1 = this;\n for (var field in definitions) {\n this$1.addDefinition(field, definitions[field]);\n }\n },\n addDefinition: function (type, srcElement) {\n var ref = this;\n var element = ref.element;\n var definitionMap = ref.definitionMap;\n var id = srcElement.id;\n var mapItem = definitionMap[id];\n if (!mapItem) {\n var node = this.createDefinition(type, srcElement);\n definitionMap[id] = {\n element: node,\n count: 1\n };\n this.append(node);\n if (element) {\n node.attachTo(this.element);\n }\n } else {\n mapItem.count++;\n }\n },\n removeDefinitions: function (definitions) {\n var this$1 = this;\n for (var field in definitions) {\n this$1.removeDefinition(definitions[field]);\n }\n },\n removeDefinition: function (srcElement) {\n var definitionMap = this.definitionMap;\n var id = srcElement.id;\n var mapItem = definitionMap[id];\n if (mapItem) {\n mapItem.count--;\n if (mapItem.count === 0) {\n this.remove(this.childNodes.indexOf(mapItem.element), 1);\n delete definitionMap[id];\n }\n }\n }\n });\n var RootNode = Node.extend({\n init: function (options) {\n Node.fn.init.call(this);\n this.options = options;\n this.defs = new DefinitionNode();\n },\n attachTo: function (domElement) {\n this.element = domElement;\n this.defs.attachTo(domElement.firstElementChild);\n },\n clear: function () {\n BaseNode.prototype.clear.call(this);\n },\n template: function () {\n return this.defs.render() + this.renderChildren();\n },\n definitionChange: function (e) {\n this.defs.definitionChange(e);\n }\n });\n var RTL = 'rtl';\n function alignToScreen(element) {\n var ctm;\n try {\n ctm = element.getScreenCTM ? element.getScreenCTM() : null;\n } catch (e) {\n }\n if (ctm) {\n var left = -ctm.e % 1;\n var top = -ctm.f % 1;\n var style = element.style;\n if (left !== 0 || top !== 0) {\n style.left = left + 'px';\n style.top = top + 'px';\n }\n }\n }\n var Surface$1 = Surface.extend({\n init: function (element, options) {\n Surface.fn.init.call(this, element, options);\n this._root = new RootNode($.extend({ rtl: elementStyles(element, 'direction').direction === RTL }, this.options));\n renderSVG$1(this.element, this._template());\n this._rootElement = this.element.firstElementChild;\n alignToScreen(this._rootElement);\n this._root.attachTo(this._rootElement);\n bindEvents(this.element, {\n click: this._click,\n mouseover: this._mouseenter,\n mouseout: this._mouseleave,\n mousemove: this._mousemove\n });\n this.resize();\n },\n destroy: function () {\n if (this._root) {\n this._root.destroy();\n this._root = null;\n this._rootElement = null;\n unbindEvents(this.element, {\n click: this._click,\n mouseover: this._mouseenter,\n mouseout: this._mouseleave,\n mousemove: this._mousemove\n });\n }\n Surface.fn.destroy.call(this);\n },\n translate: function (offset) {\n var viewBox = Math.round(offset.x) + ' ' + Math.round(offset.y) + ' ' + this._size.width + ' ' + this._size.height;\n this._offset = offset;\n this._rootElement.setAttribute('viewBox', viewBox);\n },\n draw: function (element) {\n Surface.fn.draw.call(this, element);\n this._root.load([element]);\n },\n clear: function () {\n Surface.fn.clear.call(this);\n this._root.clear();\n },\n svg: function () {\n return '' + this._template();\n },\n exportVisual: function () {\n var ref = this;\n var visual = ref._visual;\n var offset = ref._offset;\n if (offset) {\n var wrap = new Group();\n wrap.children.push(visual);\n wrap.transform(transform().translate(-offset.x, -offset.y));\n visual = wrap;\n }\n return visual;\n },\n _resize: function () {\n if (this._offset) {\n this.translate(this._offset);\n }\n },\n _template: function () {\n return '' + this._root.render() + '';\n }\n });\n Surface$1.prototype.type = 'svg';\n if (typeof document !== 'undefined' && document.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')) {\n Surface.support.svg = true;\n SurfaceFactory.current.register('svg', Surface$1, 10);\n }\n var GroupNode = Node.extend({\n template: function () {\n return '' + this.renderChildren() + '';\n },\n optionsChange: function (e) {\n if (e.field === 'transform') {\n this.transformChange(e.value);\n }\n Node.fn.optionsChange.call(this, e);\n }\n });\n NODE_MAP.Group = GroupNode;\n var DASH_ARRAYS = {\n dot: [\n 1.5,\n 3.5\n ],\n dash: [\n 4,\n 3.5\n ],\n longdash: [\n 8,\n 3.5\n ],\n dashdot: [\n 3.5,\n 3.5,\n 1.5,\n 3.5\n ],\n longdashdot: [\n 8,\n 3.5,\n 1.5,\n 3.5\n ],\n longdashdotdot: [\n 8,\n 3.5,\n 1.5,\n 3.5,\n 1.5,\n 3.5\n ]\n };\n var SOLID = 'solid';\n var BUTT = 'butt';\n var ATTRIBUTE_MAP = {\n 'fill.opacity': 'fill-opacity',\n 'stroke.color': 'stroke',\n 'stroke.width': 'stroke-width',\n 'stroke.opacity': 'stroke-opacity'\n };\n var SPACE = ' ';\n var PathNode = Node.extend({\n geometryChange: function () {\n this.attr('d', this.renderData());\n this.invalidate();\n },\n optionsChange: function (e) {\n switch (e.field) {\n case 'fill':\n if (e.value) {\n this.allAttr(this.mapFill(e.value));\n } else {\n this.removeAttr('fill');\n }\n break;\n case 'fill.color':\n this.allAttr(this.mapFill({ color: e.value }));\n break;\n case 'stroke':\n if (e.value) {\n this.allAttr(this.mapStroke(e.value));\n } else {\n this.removeAttr('stroke');\n }\n break;\n case 'transform':\n this.transformChange(e.value);\n break;\n default:\n var name = ATTRIBUTE_MAP[e.field];\n if (name) {\n this.attr(name, e.value);\n }\n break;\n }\n Node.fn.optionsChange.call(this, e);\n },\n content: function () {\n if (this.element) {\n this.element.textContent = this.srcElement.content();\n }\n },\n renderData: function () {\n return this.printPath(this.srcElement);\n },\n printPath: function (path) {\n var this$1 = this;\n var segments = path.segments;\n var length = segments.length;\n if (length > 0) {\n var parts = [];\n var output, currentType;\n for (var i = 1; i < length; i++) {\n var segmentType = this$1.segmentType(segments[i - 1], segments[i]);\n if (segmentType !== currentType) {\n currentType = segmentType;\n parts.push(segmentType);\n }\n if (segmentType === 'L') {\n parts.push(this$1.printPoints(segments[i].anchor()));\n } else {\n parts.push(this$1.printPoints(segments[i - 1].controlOut(), segments[i].controlIn(), segments[i].anchor()));\n }\n }\n output = 'M' + this.printPoints(segments[0].anchor()) + SPACE + parts.join(SPACE);\n if (path.options.closed) {\n output += 'Z';\n }\n return output;\n }\n },\n printPoints: function () {\n var points = arguments;\n var length = points.length;\n var result = [];\n for (var i = 0; i < length; i++) {\n result.push(points[i].toString(3));\n }\n return result.join(' ');\n },\n segmentType: function (segmentStart, segmentEnd) {\n return segmentStart.controlOut() && segmentEnd.controlIn() ? 'C' : 'L';\n },\n mapStroke: function (stroke) {\n var attrs = [];\n if (stroke && !isTransparent(stroke.color)) {\n attrs.push([\n 'stroke',\n stroke.color\n ]);\n attrs.push([\n 'stroke-width',\n stroke.width\n ]);\n attrs.push([\n 'stroke-linecap',\n this.renderLinecap(stroke)\n ]);\n attrs.push([\n 'stroke-linejoin',\n stroke.lineJoin\n ]);\n if (defined(stroke.opacity)) {\n attrs.push([\n 'stroke-opacity',\n stroke.opacity\n ]);\n }\n if (defined(stroke.dashType)) {\n attrs.push([\n 'stroke-dasharray',\n this.renderDashType(stroke)\n ]);\n }\n } else {\n attrs.push([\n 'stroke',\n NONE\n ]);\n }\n return attrs;\n },\n renderStroke: function () {\n return renderAllAttr(this.mapStroke(this.srcElement.options.stroke));\n },\n renderDashType: function (stroke) {\n var dashType = stroke.dashType;\n var width = stroke.width;\n if (width === void 0) {\n width = 1;\n }\n if (dashType && dashType !== SOLID) {\n var dashArray = DASH_ARRAYS[dashType.toLowerCase()];\n var result = [];\n for (var i = 0; i < dashArray.length; i++) {\n result.push(dashArray[i] * width);\n }\n return result.join(' ');\n }\n },\n renderLinecap: function (stroke) {\n var dashType = stroke.dashType;\n var lineCap = stroke.lineCap;\n return dashType && dashType !== 'solid' ? BUTT : lineCap;\n },\n mapFill: function (fill) {\n var attrs = [];\n if (!(fill && fill.nodeType === 'Gradient')) {\n if (fill && !isTransparent(fill.color)) {\n attrs.push([\n 'fill',\n fill.color\n ]);\n if (defined(fill.opacity)) {\n attrs.push([\n 'fill-opacity',\n fill.opacity\n ]);\n }\n } else {\n attrs.push([\n 'fill',\n NONE\n ]);\n }\n }\n return attrs;\n },\n renderFill: function () {\n return renderAllAttr(this.mapFill(this.srcElement.options.fill));\n },\n template: function () {\n return '';\n }\n });\n NODE_MAP.Path = PathNode;\n var ArcNode = PathNode.extend({\n renderData: function () {\n return this.printPath(this.srcElement.toPath());\n }\n });\n NODE_MAP.Arc = ArcNode;\n var CircleNode = PathNode.extend({\n geometryChange: function () {\n var center = this.center();\n this.attr('cx', center.x);\n this.attr('cy', center.y);\n this.attr('r', this.radius());\n this.invalidate();\n },\n center: function () {\n return this.srcElement.geometry().center;\n },\n radius: function () {\n return this.srcElement.geometry().radius;\n },\n template: function () {\n return '';\n }\n });\n NODE_MAP.Circle = CircleNode;\n var RectNode = PathNode.extend({\n geometryChange: function () {\n var geometry = this.srcElement.geometry();\n this.attr('x', geometry.origin.x);\n this.attr('y', geometry.origin.y);\n this.attr('width', geometry.size.width);\n this.attr('height', geometry.size.height);\n this.invalidate();\n },\n size: function () {\n return this.srcElement.geometry().size;\n },\n origin: function () {\n return this.srcElement.geometry().origin;\n },\n template: function () {\n return '';\n }\n });\n NODE_MAP.Rect = RectNode;\n var ImageNode = PathNode.extend({\n geometryChange: function () {\n this.allAttr(this.mapPosition());\n this.invalidate();\n },\n optionsChange: function (e) {\n if (e.field === 'src') {\n this.allAttr(this.mapSource());\n }\n PathNode.fn.optionsChange.call(this, e);\n },\n mapPosition: function () {\n var rect = this.srcElement.rect();\n var tl = rect.topLeft();\n return [\n [\n 'x',\n tl.x\n ],\n [\n 'y',\n tl.y\n ],\n [\n 'width',\n rect.width() + 'px'\n ],\n [\n 'height',\n rect.height() + 'px'\n ]\n ];\n },\n renderPosition: function () {\n return renderAllAttr(this.mapPosition());\n },\n mapSource: function (encode) {\n var src = this.srcElement.src();\n if (encode) {\n src = kendo.htmlEncode(src);\n }\n return [[\n 'xlink:href',\n src\n ]];\n },\n renderSource: function () {\n return renderAllAttr(this.mapSource(true));\n },\n template: function () {\n return '' + '';\n }\n });\n NODE_MAP.Image = ImageNode;\n var ENTITY_REGEX = /&(?:[a-zA-Z]+|#\\d+);/g;\n function decodeEntities(text) {\n if (!text || typeof text !== 'string' || !ENTITY_REGEX.test(text)) {\n return text;\n }\n var element = decodeEntities._element;\n ENTITY_REGEX.lastIndex = 0;\n return text.replace(ENTITY_REGEX, function (match) {\n element.innerHTML = match;\n return element.textContent || element.innerText;\n });\n }\n if (typeof document !== 'undefined') {\n decodeEntities._element = document.createElement('span');\n }\n var TextNode = PathNode.extend({\n geometryChange: function () {\n var pos = this.pos();\n this.attr('x', pos.x);\n this.attr('y', pos.y);\n this.invalidate();\n },\n optionsChange: function (e) {\n if (e.field === 'font') {\n this.attr('style', renderStyle(this.mapStyle()));\n this.geometryChange();\n } else if (e.field === 'content') {\n PathNode.fn.content.call(this, this.srcElement.content());\n }\n PathNode.fn.optionsChange.call(this, e);\n },\n mapStyle: function (encode) {\n var style = PathNode.fn.mapStyle.call(this, encode);\n var font = this.srcElement.options.font;\n if (encode) {\n font = kendo.htmlEncode(font);\n }\n style.push([\n 'font',\n font\n ], [\n 'white-space',\n 'pre'\n ]);\n return style;\n },\n pos: function () {\n var pos = this.srcElement.position();\n var size = this.srcElement.measure();\n return pos.clone().setY(pos.y + size.baseline);\n },\n renderContent: function () {\n var content = this.srcElement.content();\n content = decodeEntities(content);\n content = kendo.htmlEncode(content);\n return kendoUtil.normalizeText(content);\n },\n renderTextAnchor: function () {\n var anchor;\n if ((this.options || {}).rtl && !(supportBrowser.msie || supportBrowser.edge)) {\n anchor = 'end';\n }\n return renderAttr('text-anchor', anchor);\n },\n template: function () {\n return '' + this.renderContent() + '';\n }\n });\n NODE_MAP.Text = TextNode;\n var MultiPathNode = PathNode.extend({\n renderData: function () {\n var this$1 = this;\n var paths = this.srcElement.paths;\n if (paths.length > 0) {\n var result = [];\n for (var i = 0; i < paths.length; i++) {\n result.push(this$1.printPath(paths[i]));\n }\n return result.join(' ');\n }\n }\n });\n NODE_MAP.MultiPath = MultiPathNode;\n var geometry = {\n Circle: Circle$2,\n Arc: Arc$2,\n Rect: Rect,\n Point: Point,\n Segment: Segment,\n Matrix: Matrix,\n Size: Size,\n toMatrix: toMatrix,\n Transformation: Transformation,\n transform: transform\n };\n function exportGroup(group) {\n var root = new RootNode({ skipBaseHref: true });\n var bbox = group.clippedBBox();\n var rootGroup = group;\n if (bbox) {\n var origin = bbox.getOrigin();\n var exportRoot = new Group();\n exportRoot.transform(transform().translate(-origin.x, -origin.y));\n exportRoot.children.push(group);\n rootGroup = exportRoot;\n }\n root.load([rootGroup]);\n var svg = '' + root.render() + '';\n root.destroy();\n return svg;\n }\n var svg = {\n Surface: Surface$1,\n RootNode: RootNode,\n Node: Node,\n GroupNode: GroupNode,\n ArcNode: ArcNode,\n CircleNode: CircleNode,\n RectNode: RectNode,\n ImageNode: ImageNode,\n TextNode: TextNode,\n PathNode: PathNode,\n MultiPathNode: MultiPathNode,\n DefinitionNode: DefinitionNode,\n ClipNode: ClipNode,\n GradientStopNode: GradientStopNode,\n LinearGradientNode: LinearGradientNode,\n RadialGradientNode: RadialGradientNode,\n exportGroup: exportGroup\n };\n var NODE_MAP$2 = {};\n function renderPath(ctx, path) {\n var segments = path.segments;\n if (segments.length === 0) {\n return;\n }\n var segment = segments[0];\n var anchor = segment.anchor();\n ctx.moveTo(anchor.x, anchor.y);\n for (var i = 1; i < segments.length; i++) {\n segment = segments[i];\n anchor = segment.anchor();\n var prevSeg = segments[i - 1];\n var prevOut = prevSeg.controlOut();\n var controlIn = segment.controlIn();\n if (prevOut && controlIn) {\n ctx.bezierCurveTo(prevOut.x, prevOut.y, controlIn.x, controlIn.y, anchor.x, anchor.y);\n } else {\n ctx.lineTo(anchor.x, anchor.y);\n }\n }\n if (path.options.closed) {\n ctx.closePath();\n }\n }\n var Node$2 = BaseNode.extend({\n init: function (srcElement) {\n BaseNode.fn.init.call(this, srcElement);\n if (srcElement) {\n this.initClip();\n }\n },\n initClip: function () {\n var clip = this.srcElement.clip();\n if (clip) {\n this.clip = clip;\n clip.addObserver(this);\n }\n },\n clear: function () {\n if (this.srcElement) {\n this.srcElement.removeObserver(this);\n }\n this.clearClip();\n BaseNode.fn.clear.call(this);\n },\n clearClip: function () {\n if (this.clip) {\n this.clip.removeObserver(this);\n delete this.clip;\n }\n },\n setClip: function (ctx) {\n if (this.clip) {\n ctx.beginPath();\n renderPath(ctx, this.clip);\n ctx.clip();\n }\n },\n optionsChange: function (e) {\n if (e.field === 'clip') {\n this.clearClip();\n this.initClip();\n }\n BaseNode.fn.optionsChange.call(this, e);\n },\n setTransform: function (ctx) {\n if (this.srcElement) {\n var transform = this.srcElement.transform();\n if (transform) {\n ctx.transform.apply(ctx, transform.matrix().toArray(6));\n }\n }\n },\n loadElements: function (elements, pos, cors) {\n var this$1 = this;\n for (var i = 0; i < elements.length; i++) {\n var srcElement = elements[i];\n var children = srcElement.children;\n var childNode = new NODE_MAP$2[srcElement.nodeType](srcElement, cors);\n if (children && children.length > 0) {\n childNode.load(children, pos, cors);\n }\n if (defined(pos)) {\n this$1.insertAt(childNode, pos);\n } else {\n this$1.append(childNode);\n }\n }\n },\n load: function (elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n this.invalidate();\n },\n setOpacity: function (ctx) {\n if (this.srcElement) {\n var opacity = this.srcElement.opacity();\n if (defined(opacity)) {\n this.globalAlpha(ctx, opacity);\n }\n }\n },\n globalAlpha: function (ctx, value) {\n var opactity = value;\n if (opactity && ctx.globalAlpha) {\n opactity *= ctx.globalAlpha;\n }\n ctx.globalAlpha = opactity;\n },\n visible: function () {\n var src = this.srcElement;\n return !src || src && src.options.visible !== false;\n }\n });\n var GroupNode$2 = Node$2.extend({\n renderTo: function (ctx) {\n if (!this.visible()) {\n return;\n }\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n var childNodes = this.childNodes;\n for (var i = 0; i < childNodes.length; i++) {\n var child = childNodes[i];\n if (child.visible()) {\n child.renderTo(ctx);\n }\n }\n ctx.restore();\n }\n });\n Traversable.extend(GroupNode$2.prototype, 'childNodes');\n NODE_MAP$2.Group = GroupNode$2;\n var FRAME_DELAY = 1000 / 60;\n var RootNode$2 = GroupNode$2.extend({\n init: function (canvas) {\n GroupNode$2.fn.init.call(this);\n this.canvas = canvas;\n this.ctx = canvas.getContext('2d');\n var invalidateHandler = this._invalidate.bind(this);\n this.invalidate = kendo.throttle(function () {\n kendo.animationFrame(invalidateHandler);\n }, FRAME_DELAY);\n },\n destroy: function () {\n GroupNode$2.fn.destroy.call(this);\n this.canvas = null;\n this.ctx = null;\n },\n load: function (elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n this._invalidate();\n },\n _invalidate: function () {\n if (!this.ctx) {\n return;\n }\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.renderTo(this.ctx);\n }\n });\n Traversable.extend(RootNode$2.prototype, 'childNodes');\n var QuadRoot = Class.extend({\n init: function () {\n this.shapes = [];\n },\n _add: function (shape, bbox) {\n this.shapes.push({\n bbox: bbox,\n shape: shape\n });\n shape._quadNode = this;\n },\n pointShapes: function (point) {\n var shapes = this.shapes;\n var length = shapes.length;\n var result = [];\n for (var idx = 0; idx < length; idx++) {\n if (shapes[idx].bbox.containsPoint(point)) {\n result.push(shapes[idx].shape);\n }\n }\n return result;\n },\n insert: function (shape, bbox) {\n this._add(shape, bbox);\n },\n remove: function (shape) {\n var shapes = this.shapes;\n var length = shapes.length;\n for (var idx = 0; idx < length; idx++) {\n if (shapes[idx].shape === shape) {\n shapes.splice(idx, 1);\n break;\n }\n }\n }\n });\n var QuadNode = QuadRoot.extend({\n init: function (rect) {\n QuadRoot.fn.init.call(this);\n this.children = [];\n this.rect = rect;\n },\n inBounds: function (rect) {\n var nodeRect = this.rect;\n var nodeBottomRight = nodeRect.bottomRight();\n var bottomRight = rect.bottomRight();\n var inBounds = nodeRect.origin.x <= rect.origin.x && nodeRect.origin.y <= rect.origin.y && bottomRight.x <= nodeBottomRight.x && bottomRight.y <= nodeBottomRight.y;\n return inBounds;\n },\n pointShapes: function (point) {\n var children = this.children;\n var length = children.length;\n var result = QuadRoot.fn.pointShapes.call(this, point);\n for (var idx = 0; idx < length; idx++) {\n append(result, children[idx].pointShapes(point));\n }\n return result;\n },\n insert: function (shape, bbox) {\n var children = this.children;\n var inserted = false;\n if (this.inBounds(bbox)) {\n if (this.shapes.length < 4) {\n this._add(shape, bbox);\n } else {\n if (!children.length) {\n this._initChildren();\n }\n for (var idx = 0; idx < children.length; idx++) {\n if (children[idx].insert(shape, bbox)) {\n inserted = true;\n break;\n }\n }\n if (!inserted) {\n this._add(shape, bbox);\n }\n }\n inserted = true;\n }\n return inserted;\n },\n _initChildren: function () {\n var ref = this;\n var rect = ref.rect;\n var children = ref.children;\n var center = rect.center();\n var halfWidth = rect.width() / 2;\n var halfHeight = rect.height() / 2;\n children.push(new QuadNode(new Rect([\n rect.origin.x,\n rect.origin.y\n ], [\n halfWidth,\n halfHeight\n ])), new QuadNode(new Rect([\n center.x,\n rect.origin.y\n ], [\n halfWidth,\n halfHeight\n ])), new QuadNode(new Rect([\n rect.origin.x,\n center.y\n ], [\n halfWidth,\n halfHeight\n ])), new QuadNode(new Rect([\n center.x,\n center.y\n ], [\n halfWidth,\n halfHeight\n ])));\n }\n });\n var ROOT_SIZE = 3000;\n var LEVEL_STEP = 10000;\n var MAX_LEVEL = 75;\n var ShapesQuadTree = Class.extend({\n init: function () {\n this.initRoots();\n },\n initRoots: function () {\n this.rootMap = {};\n this.root = new QuadRoot();\n this.rootElements = [];\n },\n clear: function () {\n var this$1 = this;\n var rootElements = this.rootElements;\n for (var idx = 0; idx < rootElements.length; idx++) {\n this$1.remove(rootElements[idx]);\n }\n this.initRoots();\n },\n pointShape: function (point) {\n var sectorRoot = (this.rootMap[Math.floor(point.x / ROOT_SIZE)] || {})[Math.floor(point.y / ROOT_SIZE)];\n var result = this.root.pointShapes(point);\n if (sectorRoot) {\n result = result.concat(sectorRoot.pointShapes(point));\n }\n this.assignZindex(result);\n result.sort(zIndexComparer);\n for (var idx = 0; idx < result.length; idx++) {\n if (result[idx].containsPoint(point)) {\n return result[idx];\n }\n }\n },\n assignZindex: function (elements) {\n var this$1 = this;\n for (var idx = 0; idx < elements.length; idx++) {\n var element = elements[idx];\n var zIndex = 0;\n var levelWeight = Math.pow(LEVEL_STEP, MAX_LEVEL);\n var parents = [];\n while (element) {\n parents.push(element);\n element = element.parent;\n }\n while (parents.length) {\n element = parents.pop();\n zIndex += ((element.parent ? element.parent.children : this$1.rootElements).indexOf(element) + 1) * levelWeight;\n levelWeight /= LEVEL_STEP;\n }\n elements[idx]._zIndex = zIndex;\n }\n },\n optionsChange: function (e) {\n if (e.field === 'transform' || e.field === 'stroke.width') {\n this.bboxChange(e.element);\n }\n },\n geometryChange: function (e) {\n this.bboxChange(e.element);\n },\n bboxChange: function (element) {\n var this$1 = this;\n if (element.nodeType === 'Group') {\n for (var idx = 0; idx < element.children.length; idx++) {\n this$1.bboxChange(element.children[idx]);\n }\n } else {\n if (element._quadNode) {\n element._quadNode.remove(element);\n }\n this._insertShape(element);\n }\n },\n add: function (elements) {\n var elementsArray = Array.isArray(elements) ? elements.slice(0) : [elements];\n append(this.rootElements, elementsArray);\n this._insert(elementsArray);\n },\n childrenChange: function (e) {\n var this$1 = this;\n if (e.action === 'remove') {\n for (var idx = 0; idx < e.items.length; idx++) {\n this$1.remove(e.items[idx]);\n }\n } else {\n this._insert(Array.prototype.slice.call(e.items, 0));\n }\n },\n _insert: function (elements) {\n var this$1 = this;\n var element;\n while (elements.length > 0) {\n element = elements.pop();\n element.addObserver(this$1);\n if (element.nodeType === 'Group') {\n append(elements, element.children);\n } else {\n this$1._insertShape(element);\n }\n }\n },\n _insertShape: function (shape) {\n var bbox = shape.bbox();\n if (bbox) {\n var sectors = this.getSectors(bbox);\n var x = sectors[0][0];\n var y = sectors[1][0];\n if (this.inRoot(sectors)) {\n this.root.insert(shape, bbox);\n } else {\n var rootMap = this.rootMap;\n if (!rootMap[x]) {\n rootMap[x] = {};\n }\n if (!rootMap[x][y]) {\n rootMap[x][y] = new QuadNode(new Rect([\n x * ROOT_SIZE,\n y * ROOT_SIZE\n ], [\n ROOT_SIZE,\n ROOT_SIZE\n ]));\n }\n rootMap[x][y].insert(shape, bbox);\n }\n }\n },\n remove: function (element) {\n var this$1 = this;\n element.removeObserver(this);\n if (element.nodeType === 'Group') {\n var children = element.children;\n for (var idx = 0; idx < children.length; idx++) {\n this$1.remove(children[idx]);\n }\n } else if (element._quadNode) {\n element._quadNode.remove(element);\n delete element._quadNode;\n }\n },\n inRoot: function (sectors) {\n return sectors[0].length > 1 || sectors[1].length > 1;\n },\n getSectors: function (rect) {\n var bottomRight = rect.bottomRight();\n var bottomX = Math.floor(bottomRight.x / ROOT_SIZE);\n var bottomY = Math.floor(bottomRight.y / ROOT_SIZE);\n var sectors = [\n [],\n []\n ];\n for (var x = Math.floor(rect.origin.x / ROOT_SIZE); x <= bottomX; x++) {\n sectors[0].push(x);\n }\n for (var y = Math.floor(rect.origin.y / ROOT_SIZE); y <= bottomY; y++) {\n sectors[1].push(y);\n }\n return sectors;\n }\n });\n function zIndexComparer(x1, x2) {\n if (x1._zIndex < x2._zIndex) {\n return 1;\n }\n if (x1._zIndex > x2._zIndex) {\n return -1;\n }\n return 0;\n }\n var SurfaceCursor = Class.extend({\n init: function (surface) {\n surface.bind('mouseenter', this._mouseenter.bind(this));\n surface.bind('mouseleave', this._mouseleave.bind(this));\n this.element = surface.element;\n },\n clear: function () {\n this._resetCursor();\n },\n destroy: function () {\n this._resetCursor();\n delete this.element;\n },\n _mouseenter: function (e) {\n var cursor = this._shapeCursor(e);\n if (!cursor) {\n this._resetCursor();\n } else {\n if (!this._current) {\n this._defaultCursor = this._getCursor();\n }\n this._setCursor(cursor);\n }\n },\n _mouseleave: function () {\n this._resetCursor();\n },\n _shapeCursor: function (e) {\n var shape = e.element;\n while (shape && !defined(shape.options.cursor)) {\n shape = shape.parent;\n }\n if (shape) {\n return shape.options.cursor;\n }\n },\n _getCursor: function () {\n if (this.element) {\n return this.element.style.cursor;\n }\n },\n _setCursor: function (cursor) {\n if (this.element) {\n this.element.style.cursor = cursor;\n this._current = cursor;\n }\n },\n _resetCursor: function () {\n if (this._current) {\n this._setCursor(this._defaultCursor || '');\n delete this._current;\n }\n }\n });\n var Surface$3 = Surface.extend({\n init: function (element, options) {\n Surface.fn.init.call(this, element, options);\n this.element.innerHTML = this._template(this);\n var canvas = this.element.firstElementChild;\n var size = elementSize(element);\n canvas.width = size.width;\n canvas.height = size.height;\n this._rootElement = canvas;\n this._root = new RootNode$2(canvas);\n this._mouseTrackHandler = this._trackMouse.bind(this);\n bindEvents(this.element, {\n click: this._mouseTrackHandler,\n mousemove: this._mouseTrackHandler\n });\n },\n destroy: function () {\n Surface.fn.destroy.call(this);\n if (this._root) {\n this._root.destroy();\n this._root = null;\n }\n if (this._searchTree) {\n this._searchTree.clear();\n delete this._searchTree;\n }\n if (this._cursor) {\n this._cursor.destroy();\n delete this._cursor;\n }\n unbindEvents(this.element, {\n click: this._mouseTrackHandler,\n mousemove: this._mouseTrackHandler\n });\n },\n draw: function (element) {\n Surface.fn.draw.call(this, element);\n this._root.load([element], undefined, this.options.cors);\n if (this._searchTree) {\n this._searchTree.add([element]);\n }\n },\n clear: function () {\n Surface.fn.clear.call(this);\n this._root.clear();\n if (this._searchTree) {\n this._searchTree.clear();\n }\n if (this._cursor) {\n this._cursor.clear();\n }\n },\n eventTarget: function (e) {\n if (this._searchTree) {\n var point = this._surfacePoint(e);\n var shape = this._searchTree.pointShape(point);\n return shape;\n }\n },\n image: function () {\n var ref = this;\n var root = ref._root;\n var rootElement = ref._rootElement;\n var loadingStates = [];\n root.traverse(function (childNode) {\n if (childNode.loading) {\n loadingStates.push(childNode.loading);\n }\n });\n var promise = createPromise();\n var resolveDataURL = function () {\n root._invalidate();\n try {\n var data = rootElement.toDataURL();\n promise.resolve(data);\n } catch (e) {\n promise.reject(e);\n }\n };\n promiseAll(loadingStates).then(resolveDataURL, resolveDataURL);\n return promise;\n },\n suspendTracking: function () {\n Surface.fn.suspendTracking.call(this);\n if (this._searchTree) {\n this._searchTree.clear();\n delete this._searchTree;\n }\n },\n resumeTracking: function () {\n Surface.fn.resumeTracking.call(this);\n if (!this._searchTree) {\n this._searchTree = new ShapesQuadTree();\n var childNodes = this._root.childNodes;\n var rootElements = [];\n for (var idx = 0; idx < childNodes.length; idx++) {\n rootElements.push(childNodes[idx].srcElement);\n }\n this._searchTree.add(rootElements);\n }\n },\n _resize: function () {\n this._rootElement.width = this._size.width;\n this._rootElement.height = this._size.height;\n this._root.invalidate();\n },\n _template: function () {\n return '';\n },\n _enableTracking: function () {\n this._searchTree = new ShapesQuadTree();\n this._cursor = new SurfaceCursor(this);\n Surface.fn._enableTracking.call(this);\n },\n _trackMouse: function (e) {\n if (this._suspendedTracking) {\n return;\n }\n var shape = this.eventTarget(e);\n if (e.type !== 'click') {\n var currentShape = this._currentShape;\n if (currentShape && currentShape !== shape) {\n this.trigger('mouseleave', {\n element: currentShape,\n originalEvent: e,\n type: 'mouseleave'\n });\n }\n if (shape && currentShape !== shape) {\n this.trigger('mouseenter', {\n element: shape,\n originalEvent: e,\n type: 'mouseenter'\n });\n }\n this.trigger('mousemove', {\n element: shape,\n originalEvent: e,\n type: 'mousemove'\n });\n this._currentShape = shape;\n } else if (shape) {\n this.trigger('click', {\n element: shape,\n originalEvent: e,\n type: 'click'\n });\n }\n }\n });\n Surface$3.prototype.type = 'canvas';\n if (typeof document !== 'undefined' && document.createElement('canvas').getContext) {\n Surface.support.canvas = true;\n SurfaceFactory.current.register('canvas', Surface$3, 20);\n }\n function addGradientStops(gradient, stops) {\n for (var idx = 0; idx < stops.length; idx++) {\n var stop = stops[idx];\n var color = kendo.parseColor(stop.color());\n color.a *= stop.opacity();\n gradient.addColorStop(stop.offset(), color.toCssRgba());\n }\n }\n var PathNode$2 = Node$2.extend({\n renderTo: function (ctx) {\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n ctx.beginPath();\n this.renderPoints(ctx, this.srcElement);\n this.setLineDash(ctx);\n this.setLineCap(ctx);\n this.setLineJoin(ctx);\n this.setFill(ctx);\n this.setStroke(ctx);\n ctx.restore();\n },\n setFill: function (ctx) {\n var fill = this.srcElement.options.fill;\n var hasFill = false;\n if (fill) {\n if (fill.nodeType === 'Gradient') {\n this.setGradientFill(ctx, fill);\n hasFill = true;\n } else if (!isTransparent(fill.color)) {\n ctx.fillStyle = fill.color;\n ctx.save();\n this.globalAlpha(ctx, fill.opacity);\n ctx.fill();\n ctx.restore();\n hasFill = true;\n }\n }\n return hasFill;\n },\n setGradientFill: function (ctx, fill) {\n var bbox = this.srcElement.rawBBox();\n var gradient;\n if (fill instanceof LinearGradient) {\n var start = fill.start();\n var end = fill.end();\n gradient = ctx.createLinearGradient(start.x, start.y, end.x, end.y);\n } else if (fill instanceof RadialGradient) {\n var center = fill.center();\n gradient = ctx.createRadialGradient(center.x, center.y, 0, center.x, center.y, fill.radius());\n }\n addGradientStops(gradient, fill.stops);\n ctx.save();\n if (!fill.userSpace()) {\n ctx.transform(bbox.width(), 0, 0, bbox.height(), bbox.origin.x, bbox.origin.y);\n }\n ctx.fillStyle = gradient;\n ctx.fill();\n ctx.restore();\n },\n setStroke: function (ctx) {\n var stroke = this.srcElement.options.stroke;\n if (stroke && !isTransparent(stroke.color) && stroke.width > 0) {\n ctx.strokeStyle = stroke.color;\n ctx.lineWidth = valueOrDefault(stroke.width, 1);\n ctx.save();\n this.globalAlpha(ctx, stroke.opacity);\n ctx.stroke();\n ctx.restore();\n return true;\n }\n },\n dashType: function () {\n var stroke = this.srcElement.options.stroke;\n if (stroke && stroke.dashType) {\n return stroke.dashType.toLowerCase();\n }\n },\n setLineDash: function (ctx) {\n var dashType = this.dashType();\n if (dashType && dashType !== SOLID) {\n var dashArray = DASH_ARRAYS[dashType];\n if (ctx.setLineDash) {\n ctx.setLineDash(dashArray);\n } else {\n ctx.mozDash = dashArray;\n ctx.webkitLineDash = dashArray;\n }\n }\n },\n setLineCap: function (ctx) {\n var dashType = this.dashType();\n var stroke = this.srcElement.options.stroke;\n if (dashType && dashType !== SOLID) {\n ctx.lineCap = BUTT;\n } else if (stroke && stroke.lineCap) {\n ctx.lineCap = stroke.lineCap;\n }\n },\n setLineJoin: function (ctx) {\n var stroke = this.srcElement.options.stroke;\n if (stroke && stroke.lineJoin) {\n ctx.lineJoin = stroke.lineJoin;\n }\n },\n renderPoints: function (ctx, path) {\n renderPath(ctx, path);\n }\n });\n NODE_MAP$2.Path = PathNode$2;\n var ArcNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var path = this.srcElement.toPath();\n renderPath(ctx, path);\n }\n });\n NODE_MAP$2.Arc = ArcNode$2;\n var CircleNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var ref = this.srcElement.geometry();\n var center = ref.center;\n var radius = ref.radius;\n ctx.arc(center.x, center.y, radius, 0, Math.PI * 2);\n }\n });\n NODE_MAP$2.Circle = CircleNode$2;\n var RectNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var ref = this.srcElement.geometry();\n var origin = ref.origin;\n var size = ref.size;\n ctx.rect(origin.x, origin.y, size.width, size.height);\n }\n });\n NODE_MAP$2.Rect = RectNode$2;\n var ImageNode$2 = PathNode$2.extend({\n init: function (srcElement, cors) {\n PathNode$2.fn.init.call(this, srcElement);\n this.onLoad = this.onLoad.bind(this);\n this.onError = this.onError.bind(this);\n this.loading = createPromise();\n var img = this.img = new Image();\n if (cors && !/^data:/i.test(srcElement.src())) {\n img.crossOrigin = cors;\n }\n img.src = srcElement.src();\n if (img.complete) {\n this.onLoad();\n } else {\n img.onload = this.onLoad;\n img.onerror = this.onError;\n }\n },\n renderTo: function (ctx) {\n if (this.loading.state() === 'resolved') {\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.drawImage(ctx);\n ctx.restore();\n }\n },\n optionsChange: function (e) {\n if (e.field === 'src') {\n this.loading = createPromise();\n this.img.src = this.srcElement.src();\n } else {\n PathNode$2.fn.optionsChange.call(this, e);\n }\n },\n onLoad: function () {\n this.loading.resolve();\n this.invalidate();\n },\n onError: function () {\n this.loading.reject(new Error('Unable to load image \\'' + this.img.src + '\\'. Check for connectivity and verify CORS headers.'));\n },\n drawImage: function (ctx) {\n var rect = this.srcElement.rect();\n var topLeft = rect.topLeft();\n ctx.drawImage(this.img, topLeft.x, topLeft.y, rect.width(), rect.height());\n }\n });\n NODE_MAP$2.Image = ImageNode$2;\n var TextNode$2 = PathNode$2.extend({\n renderTo: function (ctx) {\n var text = this.srcElement;\n var pos = text.position();\n var size = text.measure();\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n ctx.beginPath();\n ctx.font = text.options.font;\n ctx.textAlign = 'left';\n if (this.setFill(ctx)) {\n ctx.fillText(text.content(), pos.x, pos.y + size.baseline);\n }\n if (this.setStroke(ctx)) {\n this.setLineDash(ctx);\n ctx.strokeText(text.content(), pos.x, pos.y + size.baseline);\n }\n ctx.restore();\n }\n });\n NODE_MAP$2.Text = TextNode$2;\n var MultiPathNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var paths = this.srcElement.paths;\n for (var i = 0; i < paths.length; i++) {\n renderPath(ctx, paths[i]);\n }\n }\n });\n NODE_MAP$2.MultiPath = MultiPathNode$2;\n var canvas = {\n Surface: Surface$3,\n RootNode: RootNode$2,\n Node: Node$2,\n GroupNode: GroupNode$2,\n ArcNode: ArcNode$2,\n CircleNode: CircleNode$2,\n RectNode: RectNode$2,\n ImageNode: ImageNode$2,\n TextNode: TextNode$2,\n PathNode: PathNode$2,\n MultiPathNode: MultiPathNode$2\n };\n function exportImage(group, options) {\n var defaults = {\n width: '800px',\n height: '600px',\n cors: 'Anonymous'\n };\n var exportRoot = group;\n var bbox = group.clippedBBox();\n if (bbox) {\n var origin = bbox.getOrigin();\n exportRoot = new Group();\n exportRoot.transform(transform().translate(-origin.x, -origin.y));\n exportRoot.children.push(group);\n var size = bbox.getSize();\n defaults.width = size.width + 'px';\n defaults.height = size.height + 'px';\n }\n var surfaceOptions = $.extend(defaults, options);\n var container = document.createElement('div');\n var style = container.style;\n style.display = 'none';\n style.width = surfaceOptions.width;\n style.height = surfaceOptions.height;\n document.body.appendChild(container);\n var surface = new Surface$3(container, surfaceOptions);\n surface.suspendTracking();\n surface.draw(exportRoot);\n var promise = surface.image();\n var destroy = function () {\n surface.destroy();\n document.body.removeChild(container);\n };\n promise.then(destroy, destroy);\n return promise;\n }\n function exportSVG(group, options) {\n var svg = exportGroup(group);\n if (!options || !options.raw) {\n svg = 'data:image/svg+xml;base64,' + encodeBase64(svg);\n }\n return createPromise().resolve(svg);\n }\n var browser = supportBrowser;\n function slice$1(thing) {\n return Array.prototype.slice.call(thing);\n }\n var KENDO_PSEUDO_ELEMENT = 'KENDO-PSEUDO-ELEMENT';\n var IMAGE_CACHE = {};\n var nodeInfrao = {};\n nodeInfrao._root = nodeInfrao;\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 nodeInfrao._clipbox = false;\n nodeInfrao._matrix = Matrix.unit();\n nodeInfrao._stackingContext = {\n element: element,\n group: group\n };\n if (options.avoidLinks === true) {\n nodeInfrao._avoidLinks = 'a';\n } else {\n nodeInfrao._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 nodeInfrao._clipbox = false;\n nodeInfrao._matrix = Matrix.unit();\n nodeInfrao._stackingContext = {\n element: element,\n group: group\n };\n pushNodeInfrao(element, getComputedStyle(element), group);\n if (element.firstChild.nodeType == 3) {\n renderText(element, element.firstChild, group);\n } else {\n _renderElement(element, group);\n }\n popNodeInfrao();\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 nodeInfrao[name];\n }\n function getAllCounters(name) {\n var values = [], p = nodeInfrao;\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 = nodeInfrao;\n name = '_counter_' + name;\n while (p && !hasOwnProperty(p, name)) {\n p = Object.getPrototypeOf(p);\n }\n if (!p) {\n p = nodeInfrao._root;\n }\n p[name] = (p[name] || 0) + (inc == null ? 1 : inc);\n }\n function resetCounter(name, val) {\n name = '_counter_' + name;\n nodeInfrao[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 pushNodeInfrao(element, style, group) {\n nodeInfrao = Object.create(nodeInfrao);\n nodeInfrao[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 (!nodeInfrao[name]) {\n nodeInfrao[name] = color;\n }\n });\n }\n if (createsStackingContext(style)) {\n nodeInfrao._stackingContext = {\n element: element,\n group: group\n };\n }\n }\n function popNodeInfrao() {\n nodeInfrao = Object.getPrototypeOf(nodeInfrao);\n }\n function updateClipbox(path) {\n if (nodeInfrao._clipbox != null) {\n var box = path.bbox(nodeInfrao._matrix);\n if (nodeInfrao._clipbox) {\n nodeInfrao._clipbox = Rect.intersect(nodeInfrao._clipbox, box);\n } else {\n nodeInfrao._clipbox = box;\n }\n }\n }\n function emptyClipbox() {\n var cb = nodeInfrao._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 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 (!nodeInfrao._avoidLinks || !matches(element, nodeInfrao._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 return group;\n function adjustBoxes(boxes) {\n if (/^td$/i.test(element.tagName)) {\n var table = nodeInfrao.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 (nodeInfrao._stackingContext.element === element) {\n nodeInfrao._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 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 var estimateLineLength = element.getBoundingClientRect().width / fontSize * 5;\n if (estimateLineLength === 0) {\n estimateLineLength = 500;\n }\n var prevLineBottom = null;\n var underline = nodeInfrao['underline'];\n var lineThrough = nodeInfrao['line-through'];\n var overline = nodeInfrao['overline'];\n var hasDecoration = underline || lineThrough || overline;\n while (!doChunk()) {\n }\n if (microsoft && textOverflow == 'ellipsis') {\n element.style.textOverflow = saveTextOverflow;\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: Infrainity,\n right: -Infrainity,\n bottom: -Infrainity,\n left: Infrainity\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 = nodeInfrao._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 (nodeInfrao._clipbox) {\n var m = nodeInfrao._matrix.invert();\n var r = nodeInfrao._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 (nodeInfrao._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 pushNodeInfrao(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 nodeInfrao._matrix = nodeInfrao._matrix.multiplyCopy(m);\n _renderWithPseudoElements(element, group);\n });\n }\n popNodeInfrao();\n }\n function mmul(a, b) {\n var a1 = a[0], b1 = a[1], c1 = a[2], d1 = a[3], e1 = a[4], f1 = a[5];\n var a2 = b[0], b2 = b[1], c2 = b[2], d2 = b[3], e2 = b[4], f2 = b[5];\n return [\n a1 * a2 + b1 * c2,\n a1 * b2 + b1 * d2,\n c1 * a2 + d1 * c2,\n c1 * b2 + d1 * d2,\n e1 * a2 + f1 * c2 + e2,\n e1 * b2 + f1 * d2 + f2\n ];\n }\n var drawing = {\n svg: svg,\n canvas: canvas,\n util: util,\n PathParser: PathParser,\n Surface: Surface,\n BaseNode: BaseNode,\n SurfaceFactory: SurfaceFactory,\n OptionsStore: OptionsStore,\n exportImage: exportImage,\n exportSVG: exportSVG,\n QuadNode: QuadNode,\n ShapesQuadTree: ShapesQuadTree,\n ObserversMixin: ObserversMixin,\n Element: Element$1,\n Circle: Circle,\n Arc: Arc,\n Path: Path,\n MultiPath: MultiPath,\n Text: Text,\n Image: Image$1,\n Group: Group,\n Layout: Layout,\n Rect: Rect$2,\n align: align,\n vAlign: vAlign,\n stack: stack,\n vStack: vStack,\n wrap: wrap,\n vWrap: vWrap,\n fit: fit,\n LinearGradient: LinearGradient,\n RadialGradient: RadialGradient,\n GradientStop: GradientStop,\n Gradient: Gradient,\n Animation: Animation,\n AnimationFactory: AnimationFactory,\n drawDOM: drawDOM\n };\n kendo.deepExtend(kendo, {\n drawing: drawing,\n geometry: geometry\n });\n kendo.drawing.Segment = kendo.geometry.Segment;\n kendo.dataviz.drawing = kendo.drawing;\n kendo.dataviz.geometry = kendo.geometry;\n kendo.drawing.util.measureText = kendo.util.measureText;\n kendo.drawing.util.objectKey = kendo.util.objectKey;\n kendo.drawing.Color = kendo.Color;\n kendo.util.encodeBase64 = kendo.drawing.util.encodeBase64;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/surface-tooltip', [\n 'kendo.popup',\n 'drawing/kendo-drawing'\n ], f);\n}(function () {\n (function ($) {\n var NS = '.kendo';\n var kendo = window.kendo;\n var deepExtend = kendo.deepExtend;\n var utils = kendo.drawing.util;\n var defined = utils.defined;\n var limitValue = utils.limitValue;\n var eventCoordinates = utils.eventCoordinates;\n var outerWidth = kendo._outerWidth;\n var outerHeight = kendo._outerHeight;\n var proxy = $.proxy;\n var TOOLTIP_TEMPLATE = '
    ' + '
    ' + '
    ';\n var TOOLTIP_CLOSE_TEMPLATE = '';\n var SurfaceTooltip = kendo.Class.extend({\n init: function (surface, options) {\n this.element = $(TOOLTIP_TEMPLATE);\n this.content = this.element.children('.k-tooltip-content');\n options = options || {};\n this.options = deepExtend({}, this.options, this._tooltipOptions(options));\n this.popupOptions = {\n appendTo: options.appendTo,\n animation: options.animation,\n copyAnchorStyles: false,\n collision: 'fit fit'\n };\n this._openPopupHandler = $.proxy(this._openPopup, this);\n this.surface = surface;\n this._bindEvents();\n },\n options: {\n position: 'top',\n showOn: 'mouseenter',\n offset: 7,\n autoHide: true,\n hideDelay: 0,\n showAfter: 100\n },\n _bindEvents: function () {\n this._showHandler = proxy(this._showEvent, this);\n this._surfaceLeaveHandler = proxy(this._surfaceLeave, this);\n this._mouseleaveHandler = proxy(this._mouseleave, this);\n this._mousemoveHandler = proxy(this._mousemove, this);\n this.surface.bind('click', this._showHandler);\n this.surface.bind('mouseenter', this._showHandler);\n this.surface.bind('mouseleave', this._mouseleaveHandler);\n this.surface.bind('mousemove', this._mousemoveHandler);\n this.surface.element.on('mouseleave' + NS, this._surfaceLeaveHandler);\n this.element.on('click' + NS, '.k-tooltip-button', proxy(this._hideClick, this));\n this.element.on('mouseleave' + NS, proxy(this._tooltipLeave, this));\n },\n getPopup: function () {\n if (!this.popup) {\n this.popup = new kendo.ui.Popup(this.element, this.popupOptions);\n }\n return this.popup;\n },\n destroy: function () {\n var popup = this.popup;\n this.surface.unbind('click', this._showHandler);\n this.surface.unbind('mouseenter', this._showHandler);\n this.surface.unbind('mouseleave', this._mouseleaveHandler);\n this.surface.unbind('mousemove', this._mousemoveHandler);\n this.surface.element.off('mouseleave' + NS, this._surfaceLeaveHandler);\n this.element.off('click' + NS);\n this.element.off('mouseleave' + NS);\n if (popup) {\n popup.destroy();\n delete this.popup;\n }\n delete this.popupOptions;\n clearTimeout(this._timeout);\n delete this.element;\n delete this.content;\n delete this.surface;\n },\n _tooltipOptions: function (options) {\n options = options || {};\n return {\n position: options.position,\n showOn: options.showOn,\n offset: options.offset,\n autoHide: options.autoHide,\n width: options.width,\n height: options.height,\n content: options.content,\n shared: options.shared,\n hideDelay: options.hideDelay,\n showAfter: options.showAfter\n };\n },\n _tooltipShape: function (shape) {\n while (shape && !shape.options.tooltip) {\n shape = shape.parent;\n }\n return shape;\n },\n _updateContent: function (target, shape, options) {\n var content = options.content;\n if (kendo.isFunction(content)) {\n content = content({\n element: shape,\n target: target\n });\n }\n if (content) {\n this.content.html(content);\n return true;\n }\n },\n _position: function (shape, options, elementSize, event) {\n var position = options.position;\n var tooltipOffset = options.offset || 0;\n var surface = this.surface;\n var offset = surface._instance._elementOffset();\n var size = surface.getSize();\n var surfaceOffset = surface._instance._offset;\n var bbox = shape.bbox();\n var width = elementSize.width;\n var height = elementSize.height;\n var left = 0, top = 0;\n bbox.origin.translate(offset.left, offset.top);\n if (surfaceOffset) {\n bbox.origin.translate(-surfaceOffset.x, -surfaceOffset.y);\n }\n if (position == 'cursor' && event) {\n var coord = eventCoordinates(event);\n left = coord.x - width / 2;\n top = coord.y - height - tooltipOffset;\n } else if (position == 'left') {\n left = bbox.origin.x - width - tooltipOffset;\n top = bbox.center().y - height / 2;\n } else if (position == 'right') {\n left = bbox.bottomRight().x + tooltipOffset;\n top = bbox.center().y - height / 2;\n } else if (position == 'bottom') {\n left = bbox.center().x - width / 2;\n top = bbox.bottomRight().y + tooltipOffset;\n } else {\n left = bbox.center().x - width / 2;\n top = bbox.origin.y - height - tooltipOffset;\n }\n return {\n left: limitValue(left, offset.left, offset.left + size.width),\n top: limitValue(top, offset.top, offset.top + size.height)\n };\n },\n show: function (shape, options) {\n this._show(shape, shape, deepExtend({}, this.options, this._tooltipOptions(shape.options.tooltip), options));\n },\n hide: function () {\n var popup = this.popup;\n var current = this._current;\n delete this._current;\n clearTimeout(this._showTimeout);\n if (popup && popup.visible() && current && !this.surface.trigger('tooltipClose', {\n element: current.shape,\n target: current.target,\n popup: popup\n })) {\n popup.close();\n }\n },\n _hideClick: function (e) {\n e.preventDefault();\n this.hide();\n },\n _show: function (target, shape, options, event, delay) {\n var current = this._current;\n clearTimeout(this._timeout);\n if (current && (current.shape === shape && options.shared || current.target === target)) {\n return;\n }\n clearTimeout(this._showTimeout);\n var popup = this.getPopup();\n if (!this.surface.trigger('tooltipOpen', {\n element: shape,\n target: target,\n popup: popup\n }) && this._updateContent(target, shape, options)) {\n this._autoHide(options);\n var elementSize = this._measure(options);\n if (popup.visible()) {\n popup.close(true);\n }\n this._current = {\n options: options,\n elementSize: elementSize,\n shape: shape,\n target: target,\n position: this._position(options.shared ? shape : target, options, elementSize, event)\n };\n if (delay) {\n this._showTimeout = setTimeout(this._openPopupHandler, options.showAfter || 0);\n } else {\n this._openPopup();\n }\n }\n },\n _openPopup: function () {\n var current = this._current;\n var position = current.position;\n this.getPopup().open(position.left, position.top);\n },\n _autoHide: function (options) {\n if (options.autoHide && this._closeButton) {\n this.element.removeClass('k-tooltip-closable');\n this._closeButton.remove();\n delete this._closeButton;\n }\n if (!options.autoHide && !this._closeButton) {\n this.element.addClass('k-tooltip-closable');\n this._closeButton = $(TOOLTIP_CLOSE_TEMPLATE).prependTo(this.element);\n }\n },\n _showEvent: function (e) {\n var shape = this._tooltipShape(e.element);\n if (shape) {\n var options = deepExtend({}, this.options, this._tooltipOptions(shape.options.tooltip));\n if (options && options.showOn == e.type) {\n this._show(e.element, shape, options, e.originalEvent, true);\n }\n }\n },\n _measure: function (options) {\n var popup = this.getPopup();\n var width, height;\n this.element.css({\n width: 'auto',\n height: 'auto'\n });\n var visible = popup.visible();\n if (!visible) {\n popup.wrapper.show();\n }\n this.element.css({\n width: defined(options.width) ? options.width : 'auto',\n height: defined(options.height) ? options.height : 'auto'\n });\n width = outerWidth(this.element);\n height = outerHeight(this.element);\n if (!visible) {\n popup.wrapper.hide();\n }\n return {\n width: width,\n height: height\n };\n },\n _mouseleave: function (e) {\n if (this.popup && !this._popupRelatedTarget(e.originalEvent)) {\n var tooltip = this;\n var current = tooltip._current;\n if (current && current.options.autoHide) {\n tooltip._timeout = setTimeout(function () {\n clearTimeout(tooltip._showTimeout);\n tooltip.hide();\n }, current.options.hideDelay || 0);\n }\n }\n },\n _mousemove: function (e) {\n var current = this._current;\n if (current && e.element) {\n var options = current.options;\n if (options.position == 'cursor') {\n var position = this._position(e.element, options, current.elementSize, e.originalEvent);\n current.position = position;\n this.getPopup().wrapper.css({\n left: position.left,\n top: position.top\n });\n }\n }\n },\n _surfaceLeave: function (e) {\n if (this.popup && !this._popupRelatedTarget(e)) {\n clearTimeout(this._showTimeout);\n this.hide();\n }\n },\n _popupRelatedTarget: function (e) {\n return e.relatedTarget && $(e.relatedTarget).closest(this.popup.wrapper).length;\n },\n _tooltipLeave: function () {\n var tooltip = this;\n var current = tooltip._current;\n if (current && current.options.autoHide) {\n tooltip._timeout = setTimeout(function () {\n tooltip.hide();\n }, current.options.hideDelay || 0);\n }\n }\n });\n kendo.drawing.SurfaceTooltip = SurfaceTooltip;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/surface', [\n 'drawing/kendo-drawing',\n 'drawing/surface-tooltip'\n ], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var draw = kendo.drawing;\n var DrawingSurface = draw.Surface;\n var Widget = kendo.ui.Widget;\n var deepExtend = kendo.deepExtend;\n var proxy = $.proxy;\n kendo.support.svg = DrawingSurface.support.svg;\n kendo.support.canvas = DrawingSurface.support.canvas;\n var Surface = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, {});\n this.options = deepExtend({}, this.options, options);\n this._instance = DrawingSurface.create(this.element[0], options);\n if (this._instance.translate) {\n this.translate = translate;\n }\n this._triggerInstanceHandler = proxy(this._triggerInstanceEvent, this);\n this._bindHandler('click');\n this._bindHandler('mouseenter');\n this._bindHandler('mouseleave');\n this._bindHandler('mousemove');\n this._enableTracking();\n },\n options: {\n name: 'Surface',\n tooltip: {}\n },\n events: [\n 'click',\n 'mouseenter',\n 'mouseleave',\n 'mousemove',\n 'resize',\n 'tooltipOpen',\n 'tooltipClose'\n ],\n _triggerInstanceEvent: function (e) {\n this.trigger(e.type, e);\n },\n _bindHandler: function (event) {\n this._instance.bind(event, this._triggerInstanceHandler);\n },\n draw: function (element) {\n this._instance.draw(element);\n },\n clear: function () {\n if (this._instance) {\n this._instance.clear();\n }\n this.hideTooltip();\n },\n destroy: function () {\n if (this._instance) {\n this._instance.destroy();\n delete this._instance;\n }\n if (this._tooltip) {\n this._tooltip.destroy();\n delete this._tooltip;\n }\n Widget.fn.destroy.call(this);\n },\n exportVisual: function () {\n return this._instance.exportVisual();\n },\n eventTarget: function (e) {\n return this._instance.eventTarget(e);\n },\n showTooltip: function (shape, options) {\n if (this._tooltip) {\n this._tooltip.show(shape, options);\n }\n },\n hideTooltip: function () {\n if (this._tooltip) {\n this._tooltip.hide();\n }\n },\n suspendTracking: function () {\n this._instance.suspendTracking();\n this.hideTooltip();\n },\n resumeTracking: function () {\n this._instance.resumeTracking();\n },\n getSize: function () {\n return {\n width: this.element.width(),\n height: this.element.height()\n };\n },\n setSize: function (size) {\n this.element.css({\n width: size.width,\n height: size.height\n });\n this._size = size;\n this._instance.currentSize(size);\n this._resize();\n },\n _resize: function () {\n this._instance.currentSize(this._size);\n this._instance._resize();\n },\n _enableTracking: function () {\n if (kendo.ui.Popup) {\n this._tooltip = new draw.SurfaceTooltip(this, this.options.tooltip || {});\n }\n }\n });\n kendo.ui.plugin(Surface);\n Surface.create = function (element, options) {\n return new Surface(element, options);\n };\n kendo.drawing.Surface = Surface;\n function translate(offset) {\n this._instance.translate(offset);\n }\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/html', ['drawing/kendo-drawing'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var drawing = kendo.drawing;\n var drawDOM = drawing.drawDOM;\n drawing.drawDOM = function (element, options) {\n return drawDOM($(element)[0], options);\n };\n drawing.drawDOM.drawText = drawDOM.drawText;\n drawing.drawDOM.getFontFaces = drawDOM.getFontFaces;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.drawing', [\n 'drawing/util',\n 'drawing/kendo-drawing',\n 'drawing/surface-tooltip',\n 'drawing/surface',\n 'drawing/html'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'drawing',\n name: 'Drawing API',\n category: 'framework',\n description: 'The Kendo UI low-level drawing API',\n depends: [\n 'core',\n 'color',\n 'popup'\n ]\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/core/kendo-core', [\n 'kendo.core',\n 'kendo.drawing'\n ], f);\n}(function () {\n (function ($) {\n window.kendo.dataviz = window.kendo.dataviz || {};\n var drawing = kendo.drawing;\n var util = drawing.util;\n var Path = drawing.Path;\n var Group = drawing.Group;\n var Class = kendo.Class;\n var geometry = kendo.geometry;\n var Rect = geometry.Rect;\n var Circle = geometry.Circle;\n var geometryTransform = geometry.transform;\n var Segment = geometry.Segment;\n var dataviz = kendo.dataviz;\n var deepExtend = kendo.deepExtend;\n var isFunction = kendo.isFunction;\n var __common_getter_js = kendo.getter;\n var ARC = 'arc';\n var AXIS_LABEL_CLICK = 'axisLabelClick';\n var BLACK = '#000';\n var BOTTOM = 'bottom';\n var CENTER = 'center';\n var CIRCLE = 'circle';\n var COORD_PRECISION = 3;\n var CROSS = 'cross';\n var DATE = 'date';\n var DEFAULT_FONT = '12px sans-serif';\n var DEFAULT_HEIGHT = 400;\n var DEFAULT_PRECISION = 10;\n var DEFAULT_WIDTH = 600;\n var END = 'end';\n var FORMAT_REGEX = /\\{\\d+:?/;\n var HEIGHT = 'height';\n var HIGHLIGHT_ZINDEX = 100;\n var INSIDE = 'inside';\n var LEFT = 'left';\n var MAX_VALUE = Number.MAX_VALUE;\n var MIN_VALUE = -Number.MAX_VALUE;\n var NONE = 'none';\n var NOTE_CLICK = 'noteClick';\n var NOTE_HOVER = 'noteHover';\n var NOTE_LEAVE = 'noteLeave';\n var OBJECT = 'object';\n var OUTSIDE = 'outside';\n var RIGHT = 'right';\n var START = 'start';\n var STRING = 'string';\n var TOP = 'top';\n var TRIANGLE = 'triangle';\n var VALUE = 'value';\n var WHITE = '#fff';\n var WIDTH = 'width';\n var X = 'x';\n var Y = 'y';\n var constants = {\n ARC: ARC,\n AXIS_LABEL_CLICK: AXIS_LABEL_CLICK,\n BLACK: BLACK,\n BOTTOM: BOTTOM,\n CENTER: CENTER,\n CIRCLE: CIRCLE,\n COORD_PRECISION: COORD_PRECISION,\n CROSS: CROSS,\n DATE: DATE,\n DEFAULT_FONT: DEFAULT_FONT,\n DEFAULT_HEIGHT: DEFAULT_HEIGHT,\n DEFAULT_PRECISION: DEFAULT_PRECISION,\n DEFAULT_WIDTH: DEFAULT_WIDTH,\n END: END,\n FORMAT_REGEX: FORMAT_REGEX,\n HEIGHT: HEIGHT,\n HIGHLIGHT_ZINDEX: HIGHLIGHT_ZINDEX,\n INSIDE: INSIDE,\n LEFT: LEFT,\n MAX_VALUE: MAX_VALUE,\n MIN_VALUE: MIN_VALUE,\n NONE: NONE,\n NOTE_CLICK: NOTE_CLICK,\n NOTE_HOVER: NOTE_HOVER,\n NOTE_LEAVE: NOTE_LEAVE,\n OBJECT: OBJECT,\n OUTSIDE: OUTSIDE,\n RIGHT: RIGHT,\n START: START,\n STRING: STRING,\n TOP: TOP,\n TRIANGLE: TRIANGLE,\n VALUE: VALUE,\n WHITE: WHITE,\n WIDTH: WIDTH,\n X: X,\n Y: Y\n };\n function isArray(value) {\n return Array.isArray(value);\n }\n function addClass(element, classes) {\n var classArray = isArray(classes) ? classes : [classes];\n for (var idx = 0; idx < classArray.length; idx++) {\n var className = classArray[idx];\n if (element.className.indexOf(className) === -1) {\n element.className += ' ' + className;\n }\n }\n }\n var SPACE_REGEX = /\\s+/g;\n function removeClass(element, className) {\n if (element && element.className) {\n element.className = element.className.replace(className, '').replace(SPACE_REGEX, ' ');\n }\n }\n function alignPathToPixel(path) {\n var offset = 0.5;\n if (path.options.stroke && kendo.drawing.util.defined(path.options.stroke.width)) {\n if (path.options.stroke.width % 2 === 0) {\n offset = 0;\n }\n }\n for (var i = 0; i < path.segments.length; i++) {\n path.segments[i].anchor().round(0).translate(offset, offset);\n }\n return path;\n }\n function clockwise(angle1, angle2) {\n return -angle1.x * angle2.y + angle1.y * angle2.x < 0;\n }\n function isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n }\n function isString(value) {\n return typeof value === STRING;\n }\n function convertableToNumber(value) {\n return isNumber(value) || isString(value) && isFinite(value);\n }\n function isObject(value) {\n return typeof value === 'object';\n }\n function styleValue(value) {\n if (isNumber(value)) {\n return value + 'px';\n }\n return value;\n }\n var SIZE_STYLES_REGEX = /width|height|top|left|bottom|right/i;\n function isSizeField(field) {\n return SIZE_STYLES_REGEX.test(field);\n }\n function elementStyles(element, styles) {\n var stylesArray = isString(styles) ? [styles] : styles;\n if (isArray(stylesArray)) {\n var result = {};\n var style = window.getComputedStyle(element);\n for (var idx = 0; idx < stylesArray.length; idx++) {\n var field = stylesArray[idx];\n result[field] = isSizeField(field) ? parseFloat(style[field]) : style[field];\n }\n return result;\n } else if (isObject(styles)) {\n for (var field$1 in styles) {\n element.style[field$1] = styleValue(styles[field$1]);\n }\n }\n }\n function getSpacing(value, defaultSpacing) {\n if (defaultSpacing === void 0) {\n defaultSpacing = 0;\n }\n var spacing = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n if (typeof value === 'number') {\n spacing[TOP] = spacing[RIGHT] = spacing[BOTTOM] = spacing[LEFT] = value;\n } else {\n spacing[TOP] = value[TOP] || defaultSpacing;\n spacing[RIGHT] = value[RIGHT] || defaultSpacing;\n spacing[BOTTOM] = value[BOTTOM] || defaultSpacing;\n spacing[LEFT] = value[LEFT] || defaultSpacing;\n }\n return spacing;\n }\n var defaultImplementation = {\n format: function (format, value) {\n return value;\n },\n toString: function (value) {\n return value;\n },\n parseDate: function (value) {\n return new Date(value);\n }\n };\n var current = defaultImplementation;\n var IntlService = Class.extend({});\n IntlService.register = function (userImplementation) {\n current = userImplementation;\n };\n if (Object.defineProperties) {\n Object.defineProperties(IntlService, {\n implementation: {\n get: function () {\n return current;\n }\n }\n });\n }\n var FORMAT_REPLACE_REGEX = /\\{(\\d+)(:[^\\}]+)?\\}/g;\n var FormatService = Class.extend({\n init: function (intlService) {\n this._intlService = intlService;\n },\n auto: function (formatString) {\n var values = [], len = arguments.length - 1;\n while (len-- > 0)\n values[len] = arguments[len + 1];\n var intl = this.intl;\n if (isString(formatString) && formatString.match(FORMAT_REGEX)) {\n return intl.format.apply(intl, [formatString].concat(values));\n }\n return intl.toString(values[0], formatString);\n },\n localeAuto: function (formatString, values, locale) {\n var intl = this.intl;\n var result;\n if (isString(formatString) && formatString.match(FORMAT_REGEX)) {\n result = formatString.replace(FORMAT_REPLACE_REGEX, function (match, index, placeholderFormat) {\n var value = values[parseInt(index, 10)];\n return intl.toString(value, placeholderFormat ? placeholderFormat.substring(1) : '', locale);\n });\n } else {\n result = intl.toString(values[0], formatString, locale);\n }\n return result;\n }\n });\n if (Object.defineProperties) {\n Object.defineProperties(FormatService.fn, {\n intl: {\n get: function () {\n return this._intlService || IntlService.implementation;\n },\n set: function (value) {\n this._intlService = value;\n }\n }\n });\n }\n var ChartService = Class.extend({\n init: function (chart, context) {\n if (context === void 0) {\n context = {};\n }\n this._intlService = context.intlService;\n this.sender = context.sender || chart;\n this.format = new FormatService(context.intlService);\n this.chart = chart;\n this.rtl = Boolean(context.rtl);\n },\n notify: function (name, args) {\n if (this.chart) {\n this.chart.trigger(name, args);\n }\n },\n isPannable: function (axis) {\n var pannable = ((this.chart || {}).options || {}).pannable;\n return pannable && pannable.lock !== axis;\n }\n });\n if (Object.defineProperties) {\n Object.defineProperties(ChartService.fn, {\n intl: {\n get: function () {\n return this._intlService || IntlService.implementation;\n },\n set: function (value) {\n this._intlService = value;\n this.format.intl = value;\n }\n }\n });\n }\n var current$1;\n var DomEventsBuilder = Class.extend({});\n DomEventsBuilder.register = function (userImplementation) {\n current$1 = userImplementation;\n };\n DomEventsBuilder.create = function (element, events) {\n if (current$1) {\n return current$1.create(element, events);\n }\n };\n var current$2 = {\n compile: function (template) {\n return template;\n }\n };\n var TemplateService = Class.extend({});\n TemplateService.register = function (userImplementation) {\n current$2 = userImplementation;\n };\n TemplateService.compile = function (template) {\n return current$2.compile(template);\n };\n var services = {\n ChartService: ChartService,\n DomEventsBuilder: DomEventsBuilder,\n FormatService: FormatService,\n IntlService: IntlService,\n TemplateService: TemplateService\n };\n function getTemplate(options) {\n if (options === void 0) {\n options = {};\n }\n var template;\n if (options.template) {\n options.template = template = TemplateService.compile(options.template);\n } else if (isFunction(options.content)) {\n template = options.content;\n }\n return template;\n }\n function grep(array, callback) {\n var length = array.length;\n var result = [];\n for (var idx = 0; idx < length; idx++) {\n if (callback(array[idx])) {\n result.push(array[idx]);\n }\n }\n return result;\n }\n function hasClasses(element, classNames) {\n if (element.className) {\n var names = classNames.split(' ');\n for (var idx = 0; idx < names.length; idx++) {\n if (element.className.indexOf(names[idx]) !== -1) {\n return true;\n }\n }\n }\n }\n var HashMap = function HashMap() {\n this._map = {};\n };\n HashMap.prototype.get = function get(name) {\n return this._map[this._key(name)];\n };\n HashMap.prototype.set = function set(name, value) {\n this._map[this._key(name)] = value;\n };\n HashMap.prototype._key = function _key(name) {\n return name instanceof Date ? name.getTime() : name;\n };\n function inArray(value, array) {\n if (array) {\n return array.indexOf(value) !== -1;\n }\n }\n function interpolateValue(start, end, progress) {\n return kendo.drawing.util.round(start + (end - start) * progress, COORD_PRECISION);\n }\n var TRIGGER = 'trigger';\n var InstanceObserver = Class.extend({\n init: function (observer, handlers) {\n this.observer = observer;\n this.handlerMap = deepExtend({}, this.handlerMap, handlers);\n },\n trigger: function (name, args) {\n var ref = this;\n var observer = ref.observer;\n var handlerMap = ref.handlerMap;\n var isDefaultPrevented;\n if (handlerMap[name]) {\n isDefaultPrevented = this.callObserver(handlerMap[name], args);\n } else if (observer[TRIGGER]) {\n isDefaultPrevented = this.callObserver(TRIGGER, name, args);\n }\n return isDefaultPrevented;\n },\n callObserver: function (fnName) {\n var args = [], len = arguments.length - 1;\n while (len-- > 0)\n args[len] = arguments[len + 1];\n return this.observer[fnName].apply(this.observer, args);\n },\n requiresHandlers: function (names) {\n var this$1 = this;\n if (this.observer.requiresHandlers) {\n return this.observer.requiresHandlers(names);\n }\n for (var idx = 0; idx < names.length; idx++) {\n if (this$1.handlerMap[names[idx]]) {\n return true;\n }\n }\n }\n });\n function map(array, callback) {\n var length = array.length;\n var result = [];\n for (var idx = 0; idx < length; idx++) {\n var value = callback(array[idx]);\n if (kendo.drawing.util.defined(value)) {\n result.push(value);\n }\n }\n return result;\n }\n function mousewheelDelta(e) {\n var delta = 0;\n if (e.wheelDelta) {\n delta = -e.wheelDelta / 120;\n delta = delta > 0 ? Math.ceil(delta) : Math.floor(delta);\n }\n if (e.detail) {\n delta = kendo.drawing.util.round(e.detail / 3);\n }\n return delta;\n }\n var ref = kendo.drawing.util;\n var append = ref.append;\n var bindEvents = ref.bindEvents;\n var defined = ref.defined;\n var deg = ref.deg;\n var elementOffset = ref.elementOffset;\n var elementSize = ref.elementSize;\n var eventElement = ref.eventElement;\n var eventCoordinates = ref.eventCoordinates;\n var last = ref.last;\n var limitValue = ref.limitValue;\n var objectKey = ref.objectKey;\n var rad = ref.rad;\n var round = ref.round;\n var unbindEvents = ref.unbindEvents;\n var valueOrDefault = ref.valueOrDefault;\n var FontLoader = Class.extend({});\n FontLoader.fetchFonts = function (options, fonts, state) {\n if (state === void 0) {\n state = { depth: 0 };\n }\n var MAX_DEPTH = 5;\n if (!options || state.depth > MAX_DEPTH || !document.fonts) {\n return;\n }\n Object.keys(options).forEach(function (key) {\n var value = options[key];\n if (key === 'dataSource' || key[0] === '$' || !value) {\n return;\n }\n if (key === 'font') {\n fonts.push(value);\n } else if (typeof value === 'object') {\n state.depth++;\n FontLoader.fetchFonts(value, fonts, state);\n state.depth--;\n }\n });\n };\n FontLoader.loadFonts = function (fonts, callback) {\n var promises = [];\n if (fonts.length > 0 && document.fonts) {\n try {\n promises = fonts.map(function (font) {\n return document.fonts.load(font);\n });\n } catch (e) {\n kendo.logToConsole(e);\n }\n Promise.all(promises).then(callback, callback);\n } else {\n callback();\n }\n };\n FontLoader.preloadFonts = function (options, callback) {\n var fonts = [];\n FontLoader.fetchFonts(options, fonts);\n FontLoader.loadFonts(fonts, callback);\n };\n function setDefaultOptions(type, options) {\n var proto = type.prototype;\n if (proto.options) {\n proto.options = deepExtend({}, proto.options, options);\n } else {\n proto.options = options;\n }\n }\n function sparseArrayLimits(arr) {\n var min = MAX_VALUE;\n var max = MIN_VALUE;\n for (var idx = 0, length = arr.length; idx < length; idx++) {\n var value = arr[idx];\n if (value !== null && isFinite(value)) {\n min = Math.min(min, value);\n max = Math.max(max, value);\n }\n }\n return {\n min: min === MAX_VALUE ? undefined : min,\n max: max === MIN_VALUE ? undefined : max\n };\n }\n function autoMajorUnit(min, max) {\n var diff = round(max - min, DEFAULT_PRECISION - 1);\n if (diff === 0) {\n if (max === 0) {\n return 0.1;\n }\n diff = Math.abs(max);\n }\n var scale = Math.pow(10, Math.floor(Math.log(diff) / Math.log(10)));\n var relativeValue = round(diff / scale, DEFAULT_PRECISION);\n var scaleMultiplier = 1;\n if (relativeValue < 1.904762) {\n scaleMultiplier = 0.2;\n } else if (relativeValue < 4.761904) {\n scaleMultiplier = 0.5;\n } else if (relativeValue < 9.523809) {\n scaleMultiplier = 1;\n } else {\n scaleMultiplier = 2;\n }\n return round(scale * scaleMultiplier, DEFAULT_PRECISION);\n }\n var Point = Class.extend({\n init: function (x, y) {\n this.x = x || 0;\n this.y = y || 0;\n },\n clone: function () {\n return new Point(this.x, this.y);\n },\n equals: function (point) {\n return point && this.x === point.x && this.y === point.y;\n },\n rotate: function (center, degrees) {\n var theta = rad(degrees);\n var cosT = Math.cos(theta);\n var sinT = Math.sin(theta);\n var cx = center.x;\n var cy = center.y;\n var ref = this;\n var x = ref.x;\n var y = ref.y;\n this.x = round(cx + (x - cx) * cosT + (y - cy) * sinT, COORD_PRECISION);\n this.y = round(cy + (y - cy) * cosT - (x - cx) * sinT, COORD_PRECISION);\n return this;\n },\n multiply: function (a) {\n this.x *= a;\n this.y *= a;\n return this;\n },\n distanceTo: function (point) {\n var dx = this.x - point.x;\n var dy = this.y - point.y;\n return Math.sqrt(dx * dx + dy * dy);\n }\n });\n Point.onCircle = function (center, angle, radius) {\n var radians = rad(angle);\n return new Point(center.x - radius * Math.cos(radians), center.y - radius * Math.sin(radians));\n };\n var Box = Class.extend({\n init: function (x1, y1, x2, y2) {\n this.x1 = x1 || 0;\n this.y1 = y1 || 0;\n this.x2 = x2 || 0;\n this.y2 = y2 || 0;\n },\n equals: function (box) {\n return this.x1 === box.x1 && this.x2 === box.x2 && this.y1 === box.y1 && this.y2 === box.y2;\n },\n width: function () {\n return this.x2 - this.x1;\n },\n height: function () {\n return this.y2 - this.y1;\n },\n translate: function (dx, dy) {\n this.x1 += dx;\n this.x2 += dx;\n this.y1 += dy;\n this.y2 += dy;\n return this;\n },\n move: function (x, y) {\n var height = this.height();\n var width = this.width();\n if (defined(x)) {\n this.x1 = x;\n this.x2 = this.x1 + width;\n }\n if (defined(y)) {\n this.y1 = y;\n this.y2 = this.y1 + height;\n }\n return this;\n },\n wrap: function (targetBox) {\n this.x1 = Math.min(this.x1, targetBox.x1);\n this.y1 = Math.min(this.y1, targetBox.y1);\n this.x2 = Math.max(this.x2, targetBox.x2);\n this.y2 = Math.max(this.y2, targetBox.y2);\n return this;\n },\n wrapPoint: function (point) {\n var arrayPoint = isArray(point);\n var x = arrayPoint ? point[0] : point.x;\n var y = arrayPoint ? point[1] : point.y;\n this.wrap(new Box(x, y, x, y));\n return this;\n },\n snapTo: function (targetBox, axis) {\n if (axis === X || !axis) {\n this.x1 = targetBox.x1;\n this.x2 = targetBox.x2;\n }\n if (axis === Y || !axis) {\n this.y1 = targetBox.y1;\n this.y2 = targetBox.y2;\n }\n return this;\n },\n alignTo: function (targetBox, anchor) {\n var height = this.height();\n var width = this.width();\n var axis = anchor === TOP || anchor === BOTTOM ? Y : X;\n var offset = axis === Y ? height : width;\n if (anchor === CENTER) {\n var targetCenter = targetBox.center();\n var center = this.center();\n this.x1 += targetCenter.x - center.x;\n this.y1 += targetCenter.y - center.y;\n } else if (anchor === TOP || anchor === LEFT) {\n this[axis + 1] = targetBox[axis + 1] - offset;\n } else {\n this[axis + 1] = targetBox[axis + 2];\n }\n this.x2 = this.x1 + width;\n this.y2 = this.y1 + height;\n return this;\n },\n shrink: function (dw, dh) {\n this.x2 -= dw;\n this.y2 -= dh;\n return this;\n },\n expand: function (dw, dh) {\n this.shrink(-dw, -dh);\n return this;\n },\n pad: function (padding) {\n var spacing = getSpacing(padding);\n this.x1 -= spacing.left;\n this.x2 += spacing.right;\n this.y1 -= spacing.top;\n this.y2 += spacing.bottom;\n return this;\n },\n unpad: function (padding) {\n var spacing = getSpacing(padding);\n spacing.left = -spacing.left;\n spacing.top = -spacing.top;\n spacing.right = -spacing.right;\n spacing.bottom = -spacing.bottom;\n return this.pad(spacing);\n },\n clone: function () {\n return new Box(this.x1, this.y1, this.x2, this.y2);\n },\n center: function () {\n return new Point(this.x1 + this.width() / 2, this.y1 + this.height() / 2);\n },\n containsPoint: function (point) {\n return point.x >= this.x1 && point.x <= this.x2 && point.y >= this.y1 && point.y <= this.y2;\n },\n points: function () {\n return [\n new Point(this.x1, this.y1),\n new Point(this.x2, this.y1),\n new Point(this.x2, this.y2),\n new Point(this.x1, this.y2)\n ];\n },\n getHash: function () {\n return [\n this.x1,\n this.y1,\n this.x2,\n this.y2\n ].join(',');\n },\n overlaps: function (box) {\n return !(box.y2 < this.y1 || this.y2 < box.y1 || box.x2 < this.x1 || this.x2 < box.x1);\n },\n rotate: function (rotation) {\n var width = this.width();\n var height = this.height();\n var ref = this.center();\n var cx = ref.x;\n var cy = ref.y;\n var r1 = rotatePoint(0, 0, cx, cy, rotation);\n var r2 = rotatePoint(width, 0, cx, cy, rotation);\n var r3 = rotatePoint(width, height, cx, cy, rotation);\n var r4 = rotatePoint(0, height, cx, cy, rotation);\n width = Math.max(r1.x, r2.x, r3.x, r4.x) - Math.min(r1.x, r2.x, r3.x, r4.x);\n height = Math.max(r1.y, r2.y, r3.y, r4.y) - Math.min(r1.y, r2.y, r3.y, r4.y);\n this.x2 = this.x1 + width;\n this.y2 = this.y1 + height;\n return this;\n },\n toRect: function () {\n return new Rect([\n this.x1,\n this.y1\n ], [\n this.width(),\n this.height()\n ]);\n },\n hasSize: function () {\n return this.width() !== 0 && this.height() !== 0;\n },\n align: function (targetBox, axis, alignment) {\n var c1 = axis + 1;\n var c2 = axis + 2;\n var sizeFunc = axis === X ? WIDTH : HEIGHT;\n var size = this[sizeFunc]();\n if (inArray(alignment, [\n LEFT,\n TOP\n ])) {\n this[c1] = targetBox[c1];\n this[c2] = this[c1] + size;\n } else if (inArray(alignment, [\n RIGHT,\n BOTTOM\n ])) {\n this[c2] = targetBox[c2];\n this[c1] = this[c2] - size;\n } else if (alignment === CENTER) {\n this[c1] = targetBox[c1] + (targetBox[sizeFunc]() - size) / 2;\n this[c2] = this[c1] + size;\n }\n }\n });\n function rotatePoint(x, y, cx, cy, angle) {\n var theta = rad(angle);\n return new Point(cx + (x - cx) * Math.cos(theta) + (y - cy) * Math.sin(theta), cy - (x - cx) * Math.sin(theta) + (y - cy) * Math.cos(theta));\n }\n var Ring = Class.extend({\n init: function (center, innerRadius, radius, startAngle, angle) {\n this.center = center;\n this.innerRadius = innerRadius;\n this.radius = radius;\n this.startAngle = startAngle;\n this.angle = angle;\n },\n clone: function () {\n return new Ring(this.center, this.innerRadius, this.radius, this.startAngle, this.angle);\n },\n middle: function () {\n return this.startAngle + this.angle / 2;\n },\n setRadius: function (newRadius, innerRadius) {\n if (innerRadius) {\n this.innerRadius = newRadius;\n } else {\n this.radius = newRadius;\n }\n return this;\n },\n point: function (angle, innerRadius) {\n var radianAngle = rad(angle);\n var ax = Math.cos(radianAngle);\n var ay = Math.sin(radianAngle);\n var radius = innerRadius ? this.innerRadius : this.radius;\n var x = round(this.center.x - ax * radius, COORD_PRECISION);\n var y = round(this.center.y - ay * radius, COORD_PRECISION);\n return new Point(x, y);\n },\n adjacentBox: function (distance, width, height) {\n var sector = this.clone().expand(distance);\n var midAndle = sector.middle();\n var midPoint = sector.point(midAndle);\n var hw = width / 2;\n var hh = height / 2;\n var sa = Math.sin(rad(midAndle));\n var ca = Math.cos(rad(midAndle));\n var x = midPoint.x - hw;\n var y = midPoint.y - hh;\n if (Math.abs(sa) < 0.9) {\n x += hw * -ca / Math.abs(ca);\n }\n if (Math.abs(ca) < 0.9) {\n y += hh * -sa / Math.abs(sa);\n }\n return new Box(x, y, x + width, y + height);\n },\n containsPoint: function (p) {\n var center = this.center;\n var innerRadius = this.innerRadius;\n var radius = this.radius;\n var startAngle = this.startAngle;\n var endAngle = this.startAngle + this.angle;\n var dx = p.x - center.x;\n var dy = p.y - center.y;\n var vector = new Point(dx, dy);\n var startPoint = this.point(startAngle);\n var startVector = new Point(startPoint.x - center.x, startPoint.y - center.y);\n var endPoint = this.point(endAngle);\n var endVector = new Point(endPoint.x - center.x, endPoint.y - center.y);\n var dist = round(dx * dx + dy * dy, COORD_PRECISION);\n return (startVector.equals(vector) || clockwise(startVector, vector)) && !clockwise(endVector, vector) && dist >= innerRadius * innerRadius && dist <= radius * radius;\n },\n getBBox: function () {\n var this$1 = this;\n var box = new Box(MAX_VALUE, MAX_VALUE, MIN_VALUE, MIN_VALUE);\n var startAngle = round(this.startAngle % 360);\n var endAngle = round((startAngle + this.angle) % 360);\n var innerRadius = this.innerRadius;\n var allAngles = [\n 0,\n 90,\n 180,\n 270,\n startAngle,\n endAngle\n ].sort(numericComparer);\n var startAngleIndex = allAngles.indexOf(startAngle);\n var endAngleIndex = allAngles.indexOf(endAngle);\n var angles;\n if (startAngle === endAngle) {\n angles = allAngles;\n } else {\n if (startAngleIndex < endAngleIndex) {\n angles = allAngles.slice(startAngleIndex, endAngleIndex + 1);\n } else {\n angles = [].concat(allAngles.slice(0, endAngleIndex + 1), allAngles.slice(startAngleIndex, allAngles.length));\n }\n }\n for (var i = 0; i < angles.length; i++) {\n var point = this$1.point(angles[i]);\n box.wrapPoint(point);\n box.wrapPoint(point, innerRadius);\n }\n if (!innerRadius) {\n box.wrapPoint(this.center);\n }\n return box;\n },\n expand: function (value) {\n this.radius += value;\n return this;\n }\n });\n function numericComparer(a, b) {\n return a - b;\n }\n var Sector = Ring.extend({\n init: function (center, radius, startAngle, angle) {\n Ring.fn.init.call(this, center, 0, radius, startAngle, angle);\n },\n expand: function (value) {\n return Ring.fn.expand.call(this, value);\n },\n clone: function () {\n return new Sector(this.center, this.radius, this.startAngle, this.angle);\n },\n setRadius: function (newRadius) {\n this.radius = newRadius;\n return this;\n }\n });\n var DIRECTION_ANGLE = 0.001;\n var ShapeBuilder = Class.extend({\n createRing: function (sector, options) {\n var startAngle = sector.startAngle + 180;\n var endAngle = sector.angle + startAngle;\n if (sector.angle > 0 && startAngle === endAngle) {\n endAngle += DIRECTION_ANGLE;\n }\n var center = new geometry.Point(sector.center.x, sector.center.y);\n var radius = Math.max(sector.radius, 0);\n var innerRadius = Math.max(sector.innerRadius, 0);\n var arc = new geometry.Arc(center, {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: radius,\n radiusY: radius\n });\n var path = Path.fromArc(arc, options).close();\n if (innerRadius) {\n arc.radiusX = arc.radiusY = innerRadius;\n var innerEnd = arc.pointAt(endAngle);\n path.lineTo(innerEnd.x, innerEnd.y);\n path.arc(endAngle, startAngle, innerRadius, innerRadius, true);\n } else {\n path.lineTo(center.x, center.y);\n }\n return path;\n }\n });\n ShapeBuilder.current = new ShapeBuilder();\n var ChartElement = Class.extend({\n init: function (options) {\n this.children = [];\n this.options = deepExtend({}, this.options, this.initUserOptions(options));\n },\n initUserOptions: function (options) {\n return options;\n },\n reflow: function (targetBox) {\n var children = this.children;\n var box;\n for (var i = 0; i < children.length; i++) {\n var currentChild = children[i];\n currentChild.reflow(targetBox);\n box = box ? box.wrap(currentChild.box) : currentChild.box.clone();\n }\n this.box = box || targetBox;\n },\n destroy: function () {\n var children = this.children;\n if (this.animation) {\n this.animation.destroy();\n }\n for (var i = 0; i < children.length; i++) {\n children[i].destroy();\n }\n },\n getRoot: function () {\n var parent = this.parent;\n return parent ? parent.getRoot() : null;\n },\n getSender: function () {\n var service = this.getService();\n if (service) {\n return service.sender;\n }\n },\n getService: function () {\n var element = this;\n while (element) {\n if (element.chartService) {\n return element.chartService;\n }\n element = element.parent;\n }\n },\n translateChildren: function (dx, dy) {\n var children = this.children;\n var childrenCount = children.length;\n for (var i = 0; i < childrenCount; i++) {\n children[i].box.translate(dx, dy);\n }\n },\n append: function () {\n var arguments$1 = arguments;\n var this$1 = this;\n for (var i = 0; i < arguments.length; i++) {\n var item = arguments$1[i];\n this$1.children.push(item);\n item.parent = this$1;\n }\n },\n renderVisual: function () {\n if (this.options.visible === false) {\n return;\n }\n this.createVisual();\n this.addVisual();\n this.renderChildren();\n this.createAnimation();\n this.renderComplete();\n },\n addVisual: function () {\n if (this.visual) {\n this.visual.chartElement = this;\n if (this.parent) {\n this.parent.appendVisual(this.visual);\n }\n }\n },\n renderChildren: function () {\n var children = this.children;\n var length = children.length;\n for (var i = 0; i < length; i++) {\n children[i].renderVisual();\n }\n },\n createVisual: function () {\n this.visual = new Group({\n zIndex: this.options.zIndex,\n visible: valueOrDefault(this.options.visible, true)\n });\n },\n createAnimation: function () {\n if (this.visual && this.options.animation) {\n this.animation = drawing.Animation.create(this.visual, this.options.animation);\n }\n },\n appendVisual: function (childVisual) {\n if (!childVisual.chartElement) {\n childVisual.chartElement = this;\n }\n if (childVisual.options.noclip) {\n this.clipRoot().visual.append(childVisual);\n } else if (defined(childVisual.options.zIndex)) {\n this.stackRoot().stackVisual(childVisual);\n } else if (this.isStackRoot) {\n this.stackVisual(childVisual);\n } else if (this.visual) {\n this.visual.append(childVisual);\n } else {\n this.parent.appendVisual(childVisual);\n }\n },\n clipRoot: function () {\n if (this.parent) {\n return this.parent.clipRoot();\n }\n return this;\n },\n stackRoot: function () {\n if (this.parent) {\n return this.parent.stackRoot();\n }\n return this;\n },\n stackVisual: function (childVisual) {\n var zIndex = childVisual.options.zIndex || 0;\n var visuals = this.visual.children;\n var length = visuals.length;\n var pos;\n for (pos = 0; pos < length; pos++) {\n var sibling = visuals[pos];\n var here = valueOrDefault(sibling.options.zIndex, 0);\n if (here > zIndex) {\n break;\n }\n }\n this.visual.insert(pos, childVisual);\n },\n traverse: function (callback) {\n var children = this.children;\n var length = children.length;\n for (var i = 0; i < length; i++) {\n var child = children[i];\n callback(child);\n if (child.traverse) {\n child.traverse(callback);\n }\n }\n },\n closest: function (match) {\n var element = this;\n var matched = false;\n while (element && !matched) {\n matched = match(element);\n if (!matched) {\n element = element.parent;\n }\n }\n if (matched) {\n return element;\n }\n },\n renderComplete: function () {\n },\n hasHighlight: function () {\n var options = (this.options || {}).highlight;\n return !(!this.createHighlight || options && options.visible === false);\n },\n toggleHighlight: function (show) {\n var this$1 = this;\n var options = (this.options || {}).highlight || {};\n var customVisual = options.visual;\n var highlight = this._highlight;\n if (!highlight) {\n var highlightOptions = {\n fill: {\n color: WHITE,\n opacity: 0.2\n },\n stroke: {\n color: WHITE,\n width: 1,\n opacity: 0.2\n }\n };\n if (customVisual) {\n highlight = this._highlight = customVisual($.extend(this.highlightVisualArgs(), {\n createVisual: function () {\n return this$1.createHighlight(highlightOptions);\n },\n sender: this.getSender(),\n series: this.series,\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n percentage: this.percentage,\n runningTotal: this.runningTotal,\n total: this.total\n }));\n if (!highlight) {\n return;\n }\n } else {\n highlight = this._highlight = this.createHighlight(highlightOptions);\n }\n if (!defined(highlight.options.zIndex)) {\n highlight.options.zIndex = valueOrDefault(options.zIndex, this.options.zIndex);\n }\n this.appendVisual(highlight);\n }\n highlight.visible(show);\n },\n createGradientOverlay: function (element, options, gradientOptions) {\n var overlay = new Path($.extend({\n stroke: { color: 'none' },\n fill: this.createGradient(gradientOptions),\n closed: element.options.closed\n }, options));\n overlay.segments.elements(element.segments.elements());\n return overlay;\n },\n createGradient: function (options) {\n if (this.parent) {\n return this.parent.createGradient(options);\n }\n }\n });\n ChartElement.prototype.options = {};\n var BoxElement = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n this.options.margin = getSpacing(this.options.margin);\n this.options.padding = getSpacing(this.options.padding);\n },\n reflow: function (targetBox) {\n var this$1 = this;\n var options = this.options;\n var width = options.width;\n var height = options.height;\n var shrinkToFit = options.shrinkToFit;\n var hasSetSize = width && height;\n var margin = options.margin;\n var padding = options.padding;\n var borderWidth = options.border.width;\n var box;\n var reflowPaddingBox = function () {\n this$1.align(targetBox, X, options.align);\n this$1.align(targetBox, Y, options.vAlign);\n this$1.paddingBox = box.clone().unpad(margin).unpad(borderWidth);\n };\n var contentBox = targetBox.clone();\n if (hasSetSize) {\n contentBox.x2 = contentBox.x1 + width;\n contentBox.y2 = contentBox.y1 + height;\n }\n if (shrinkToFit) {\n contentBox.unpad(margin).unpad(borderWidth).unpad(padding);\n }\n ChartElement.fn.reflow.call(this, contentBox);\n if (hasSetSize) {\n box = this.box = new Box(0, 0, width, height);\n } else {\n box = this.box;\n }\n if (shrinkToFit && hasSetSize) {\n reflowPaddingBox();\n contentBox = this.contentBox = this.paddingBox.clone().unpad(padding);\n } else {\n contentBox = this.contentBox = box.clone();\n box.pad(padding).pad(borderWidth).pad(margin);\n reflowPaddingBox();\n }\n this.translateChildren(box.x1 - contentBox.x1 + margin.left + borderWidth + padding.left, box.y1 - contentBox.y1 + margin.top + borderWidth + padding.top);\n var children = this.children;\n for (var i = 0; i < children.length; i++) {\n var item = children[i];\n item.reflow(item.box);\n }\n },\n align: function (targetBox, axis, alignment) {\n this.box.align(targetBox, axis, alignment);\n },\n hasBox: function () {\n var options = this.options;\n return options.border.width || options.background;\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n var options = this.options;\n if (options.visible && this.hasBox()) {\n this.visual.append(Path.fromRect(this.paddingBox.toRect(), this.visualStyle()));\n }\n },\n visualStyle: function () {\n var options = this.options;\n var border = options.border || {};\n return {\n stroke: {\n width: border.width,\n color: border.color,\n opacity: valueOrDefault(border.opacity, options.opacity),\n dashType: border.dashType\n },\n fill: {\n color: options.background,\n opacity: options.opacity\n },\n cursor: options.cursor\n };\n }\n });\n setDefaultOptions(BoxElement, {\n align: LEFT,\n vAlign: TOP,\n margin: {},\n padding: {},\n border: {\n color: BLACK,\n width: 0\n },\n background: '',\n shrinkToFit: false,\n width: 0,\n height: 0,\n visible: true\n });\n var ShapeElement = BoxElement.extend({\n init: function (options, pointData) {\n BoxElement.fn.init.call(this, options);\n this.pointData = pointData;\n },\n getElement: function () {\n var ref = this;\n var options = ref.options;\n var box = ref.paddingBox;\n var type = options.type;\n var rotation = options.rotation;\n var center = box.center();\n var halfWidth = box.width() / 2;\n if (!options.visible || !this.hasBox()) {\n return null;\n }\n var style = this.visualStyle();\n var element;\n if (type === CIRCLE) {\n element = new drawing.Circle(new Circle([\n round(box.x1 + halfWidth, COORD_PRECISION),\n round(box.y1 + box.height() / 2, COORD_PRECISION)\n ], halfWidth), style);\n } else if (type === TRIANGLE) {\n element = Path.fromPoints([\n [\n box.x1 + halfWidth,\n box.y1\n ],\n [\n box.x1,\n box.y2\n ],\n [\n box.x2,\n box.y2\n ]\n ], style).close();\n } else if (type === CROSS) {\n element = new drawing.MultiPath(style);\n element.moveTo(box.x1, box.y1).lineTo(box.x2, box.y2);\n element.moveTo(box.x1, box.y2).lineTo(box.x2, box.y1);\n } else {\n element = Path.fromRect(box.toRect(), style);\n }\n if (rotation) {\n element.transform(geometryTransform().rotate(-rotation, [\n center.x,\n center.y\n ]));\n }\n element.options.zIndex = options.zIndex;\n return element;\n },\n createElement: function () {\n var this$1 = this;\n var customVisual = this.options.visual;\n var pointData = this.pointData || {};\n var visual;\n if (customVisual) {\n visual = customVisual({\n value: pointData.value,\n dataItem: pointData.dataItem,\n sender: this.getSender(),\n series: pointData.series,\n category: pointData.category,\n rect: this.paddingBox.toRect(),\n options: this.visualOptions(),\n createVisual: function () {\n return this$1.getElement();\n }\n });\n } else {\n visual = this.getElement();\n }\n return visual;\n },\n visualOptions: function () {\n var options = this.options;\n return {\n background: options.background,\n border: options.border,\n margin: options.margin,\n padding: options.padding,\n type: options.type,\n size: options.width,\n visible: options.visible\n };\n },\n createVisual: function () {\n this.visual = this.createElement();\n }\n });\n setDefaultOptions(ShapeElement, {\n type: CIRCLE,\n align: CENTER,\n vAlign: CENTER\n });\n var LINEAR = 'linear';\n var RADIAL = 'radial';\n var GRADIENTS = {\n glass: {\n type: LINEAR,\n rotation: 0,\n stops: [\n {\n offset: 0,\n color: WHITE,\n opacity: 0\n },\n {\n offset: 0.25,\n color: WHITE,\n opacity: 0.3\n },\n {\n offset: 1,\n color: WHITE,\n opacity: 0\n }\n ]\n },\n sharpBevel: {\n type: RADIAL,\n stops: [\n {\n offset: 0,\n color: WHITE,\n opacity: 0.55\n },\n {\n offset: 0.65,\n color: WHITE,\n opacity: 0\n },\n {\n offset: 0.95,\n color: WHITE,\n opacity: 0.25\n }\n ]\n },\n roundedBevel: {\n type: RADIAL,\n stops: [\n {\n offset: 0.33,\n color: WHITE,\n opacity: 0.06\n },\n {\n offset: 0.83,\n color: WHITE,\n opacity: 0.2\n },\n {\n offset: 0.95,\n color: WHITE,\n opacity: 0\n }\n ]\n },\n roundedGlass: {\n type: RADIAL,\n supportVML: false,\n stops: [\n {\n offset: 0,\n color: WHITE,\n opacity: 0\n },\n {\n offset: 0.5,\n color: WHITE,\n opacity: 0.3\n },\n {\n offset: 0.99,\n color: WHITE,\n opacity: 0\n }\n ]\n },\n sharpGlass: {\n type: RADIAL,\n supportVML: false,\n stops: [\n {\n offset: 0,\n color: WHITE,\n opacity: 0.2\n },\n {\n offset: 0.15,\n color: WHITE,\n opacity: 0.15\n },\n {\n offset: 0.17,\n color: WHITE,\n opacity: 0.35\n },\n {\n offset: 0.85,\n color: WHITE,\n opacity: 0.05\n },\n {\n offset: 0.87,\n color: WHITE,\n opacity: 0.15\n },\n {\n offset: 0.99,\n color: WHITE,\n opacity: 0\n }\n ]\n },\n bubbleShadow: {\n type: RADIAL,\n center: [\n 0.5,\n 0.5\n ],\n radius: 0.5\n }\n };\n function boxDiff(r, s) {\n if (r.x1 === s.x1 && r.y1 === s.y1 && r.x2 === s.x2 && r.y2 === s.y2) {\n return s;\n }\n var a = Math.min(r.x1, s.x1);\n var b = Math.max(r.x1, s.x1);\n var c = Math.min(r.x2, s.x2);\n var d = Math.max(r.x2, s.x2);\n var e = Math.min(r.y1, s.y1);\n var f = Math.max(r.y1, s.y1);\n var g = Math.min(r.y2, s.y2);\n var h = Math.max(r.y2, s.y2);\n var boxes = [];\n boxes[0] = new Box(b, e, c, f);\n boxes[1] = new Box(a, f, b, g);\n boxes[2] = new Box(c, f, d, g);\n boxes[3] = new Box(b, g, c, h);\n if (r.x1 === a && r.y1 === e || s.x1 === a && s.y1 === e) {\n boxes[4] = new Box(a, e, b, f);\n boxes[5] = new Box(c, g, d, h);\n } else {\n boxes[4] = new Box(c, e, d, f);\n boxes[5] = new Box(a, g, b, h);\n }\n return grep(boxes, function (box) {\n return box.height() > 0 && box.width() > 0;\n })[0];\n }\n var RootElement = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n var rootOptions = this.options;\n rootOptions.width = parseInt(rootOptions.width, 10);\n rootOptions.height = parseInt(rootOptions.height, 10);\n this.gradients = {};\n },\n reflow: function () {\n var ref = this;\n var options = ref.options;\n var children = ref.children;\n var currentBox = new Box(0, 0, options.width, options.height);\n this.box = currentBox.unpad(options.margin);\n for (var i = 0; i < children.length; i++) {\n children[i].reflow(currentBox);\n currentBox = boxDiff(currentBox, children[i].box) || new Box();\n }\n },\n createVisual: function () {\n this.visual = new Group();\n this.createBackground();\n },\n createBackground: function () {\n var options = this.options;\n var border = options.border || {};\n var box = this.box.clone().pad(options.margin).unpad(border.width);\n var background = Path.fromRect(box.toRect(), {\n stroke: {\n color: border.width ? border.color : '',\n width: border.width,\n dashType: border.dashType\n },\n fill: {\n color: options.background,\n opacity: options.opacity\n },\n zIndex: -10\n });\n this.visual.append(background);\n },\n getRoot: function () {\n return this;\n },\n createGradient: function (options) {\n var gradients = this.gradients;\n var hashCode = objectKey(options);\n var gradient = GRADIENTS[options.gradient];\n var drawingGradient;\n if (gradients[hashCode]) {\n drawingGradient = gradients[hashCode];\n } else {\n var gradientOptions = $.extend({}, gradient, options);\n if (gradient.type === 'linear') {\n drawingGradient = new drawing.LinearGradient(gradientOptions);\n } else {\n if (options.innerRadius) {\n gradientOptions.stops = innerRadialStops(gradientOptions);\n }\n drawingGradient = new drawing.RadialGradient(gradientOptions);\n drawingGradient.supportVML = gradient.supportVML !== false;\n }\n gradients[hashCode] = drawingGradient;\n }\n return drawingGradient;\n },\n cleanGradients: function () {\n var gradients = this.gradients;\n for (var hashCode in gradients) {\n gradients[hashCode]._observers = [];\n }\n },\n size: function () {\n var options = this.options;\n return new Box(0, 0, options.width, options.height);\n }\n });\n setDefaultOptions(RootElement, {\n width: DEFAULT_WIDTH,\n height: DEFAULT_HEIGHT,\n background: WHITE,\n border: {\n color: BLACK,\n width: 0\n },\n margin: getSpacing(5),\n zIndex: -2\n });\n function innerRadialStops(options) {\n var stops = options.stops;\n var usedSpace = options.innerRadius / options.radius * 100;\n var length = stops.length;\n var currentStops = [];\n for (var i = 0; i < length; i++) {\n var currentStop = $.extend({}, stops[i]);\n currentStop.offset = (currentStop.offset * (100 - usedSpace) + usedSpace) / 100;\n currentStops.push(currentStop);\n }\n return currentStops;\n }\n var FloatElement = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n this._initDirection();\n },\n _initDirection: function () {\n var options = this.options;\n if (options.vertical) {\n this.groupAxis = X;\n this.elementAxis = Y;\n this.groupSizeField = WIDTH;\n this.elementSizeField = HEIGHT;\n this.groupSpacing = options.spacing;\n this.elementSpacing = options.vSpacing;\n } else {\n this.groupAxis = Y;\n this.elementAxis = X;\n this.groupSizeField = HEIGHT;\n this.elementSizeField = WIDTH;\n this.groupSpacing = options.vSpacing;\n this.elementSpacing = options.spacing;\n }\n },\n reflow: function (targetBox) {\n this.box = targetBox.clone();\n this.reflowChildren();\n },\n reflowChildren: function () {\n var this$1 = this;\n var ref = this;\n var box = ref.box;\n var elementAxis = ref.elementAxis;\n var groupAxis = ref.groupAxis;\n var elementSizeField = ref.elementSizeField;\n var groupSizeField = ref.groupSizeField;\n var ref$1 = this.groupOptions();\n var groups = ref$1.groups;\n var groupsSize = ref$1.groupsSize;\n var maxGroupElementsSize = ref$1.maxGroupElementsSize;\n var groupsCount = groups.length;\n var groupsStart = box[groupAxis + 1] + this.alignStart(groupsSize, box[groupSizeField]());\n if (groupsCount) {\n var groupStart = groupsStart;\n for (var groupIdx = 0; groupIdx < groupsCount; groupIdx++) {\n var group = groups[groupIdx];\n var groupElements = group.groupElements;\n var elementStart = box[elementAxis + 1];\n var groupElementsCount = groupElements.length;\n for (var idx = 0; idx < groupElementsCount; idx++) {\n var element = groupElements[idx];\n var elementSize$$1 = this$1.elementSize(element);\n var groupElementStart = groupStart + this$1.alignStart(elementSize$$1[groupSizeField], group.groupSize);\n var elementBox = new Box();\n elementBox[groupAxis + 1] = groupElementStart;\n elementBox[groupAxis + 2] = groupElementStart + elementSize$$1[groupSizeField];\n elementBox[elementAxis + 1] = elementStart;\n elementBox[elementAxis + 2] = elementStart + elementSize$$1[elementSizeField];\n element.reflow(elementBox);\n elementStart += elementSize$$1[elementSizeField] + this$1.elementSpacing;\n }\n groupStart += group.groupSize + this$1.groupSpacing;\n }\n box[groupAxis + 1] = groupsStart;\n box[groupAxis + 2] = groupsStart + groupsSize;\n box[elementAxis + 2] = box[elementAxis + 1] + maxGroupElementsSize;\n }\n },\n alignStart: function (size, maxSize) {\n var start = 0;\n var align = this.options.align;\n if (align === RIGHT || align === BOTTOM) {\n start = maxSize - size;\n } else if (align === CENTER) {\n start = (maxSize - size) / 2;\n }\n return start;\n },\n groupOptions: function () {\n var this$1 = this;\n var ref = this;\n var box = ref.box;\n var children = ref.children;\n var elementSizeField = ref.elementSizeField;\n var groupSizeField = ref.groupSizeField;\n var elementSpacing = ref.elementSpacing;\n var groupSpacing = ref.groupSpacing;\n var maxSize = round(box[elementSizeField]());\n var childrenCount = children.length;\n var groups = [];\n var groupSize = 0;\n var groupElementsSize = 0;\n var groupsSize = 0;\n var maxGroupElementsSize = 0;\n var groupElements = [];\n for (var idx = 0; idx < childrenCount; idx++) {\n var element = children[idx];\n if (!element.box) {\n element.reflow(box);\n }\n var elementSize$$1 = this$1.elementSize(element);\n if (this$1.options.wrap && round(groupElementsSize + elementSpacing + elementSize$$1[elementSizeField]) > maxSize) {\n groups.push({\n groupElements: groupElements,\n groupSize: groupSize,\n groupElementsSize: groupElementsSize\n });\n maxGroupElementsSize = Math.max(maxGroupElementsSize, groupElementsSize);\n groupsSize += groupSpacing + groupSize;\n groupSize = 0;\n groupElementsSize = 0;\n groupElements = [];\n }\n groupSize = Math.max(groupSize, elementSize$$1[groupSizeField]);\n if (groupElementsSize > 0) {\n groupElementsSize += elementSpacing;\n }\n groupElementsSize += elementSize$$1[elementSizeField];\n groupElements.push(element);\n }\n groups.push({\n groupElements: groupElements,\n groupSize: groupSize,\n groupElementsSize: groupElementsSize\n });\n maxGroupElementsSize = Math.max(maxGroupElementsSize, groupElementsSize);\n groupsSize += groupSize;\n return {\n groups: groups,\n groupsSize: groupsSize,\n maxGroupElementsSize: maxGroupElementsSize\n };\n },\n elementSize: function (element) {\n return {\n width: element.box.width(),\n height: element.box.height()\n };\n },\n createVisual: function () {\n }\n });\n setDefaultOptions(FloatElement, {\n vertical: true,\n wrap: true,\n vSpacing: 0,\n spacing: 0\n });\n var DrawingText = drawing.Text;\n var Text = ChartElement.extend({\n init: function (content, options) {\n ChartElement.fn.init.call(this, options);\n this.content = content;\n this.reflow(new Box());\n },\n reflow: function (targetBox) {\n var options = this.options;\n var size = options.size = util.measureText(this.content, { font: options.font });\n this.baseline = size.baseline;\n this.box = new Box(targetBox.x1, targetBox.y1, targetBox.x1 + size.width, targetBox.y1 + size.height);\n },\n createVisual: function () {\n var ref = this.options;\n var font = ref.font;\n var color = ref.color;\n var opacity = ref.opacity;\n var cursor = ref.cursor;\n this.visual = new DrawingText(this.content, this.box.toRect().topLeft(), {\n font: font,\n fill: {\n color: color,\n opacity: opacity\n },\n cursor: cursor\n });\n }\n });\n setDefaultOptions(Text, {\n font: DEFAULT_FONT,\n color: BLACK\n });\n function rectToBox(rect) {\n var origin = rect.origin;\n var bottomRight = rect.bottomRight();\n return new Box(origin.x, origin.y, bottomRight.x, bottomRight.y);\n }\n var ROWS_SPLIT_REGEX = /\\n/m;\n var TextBox = BoxElement.extend({\n init: function (content, options, data) {\n BoxElement.fn.init.call(this, options);\n this.content = content;\n this.data = data;\n this._initContainer();\n if (this.options._autoReflow !== false) {\n this.reflow(new Box());\n }\n },\n _initContainer: function () {\n var options = this.options;\n var rows = String(this.content).split(ROWS_SPLIT_REGEX);\n var floatElement = new FloatElement({\n vertical: true,\n align: options.align,\n wrap: false\n });\n var textOptions = deepExtend({}, options, {\n opacity: 1,\n animation: null\n });\n this.container = floatElement;\n this.append(floatElement);\n for (var rowIdx = 0; rowIdx < rows.length; rowIdx++) {\n var text = new Text(rows[rowIdx].trim(), textOptions);\n floatElement.append(text);\n }\n },\n reflow: function (targetBox) {\n var options = this.options;\n var visualFn = options.visual;\n this.container.options.align = options.align;\n if (visualFn && !this._boxReflow) {\n var visualBox = targetBox;\n if (!visualBox.hasSize()) {\n this._boxReflow = true;\n this.reflow(visualBox);\n this._boxReflow = false;\n visualBox = this.box;\n }\n var visual = this.visual = visualFn(this.visualContext(visualBox));\n if (visual) {\n visualBox = rectToBox(visual.clippedBBox() || new Rect());\n visual.options.zIndex = options.zIndex;\n }\n this.box = this.contentBox = this.paddingBox = visualBox;\n } else {\n BoxElement.fn.reflow.call(this, targetBox);\n if (options.rotation) {\n var margin = getSpacing(options.margin);\n var box = this.box.unpad(margin);\n this.targetBox = targetBox;\n this.normalBox = box.clone();\n box = this.rotate();\n box.translate(margin.left - margin.right, margin.top - margin.bottom);\n this.rotatedBox = box.clone();\n box.pad(margin);\n }\n }\n },\n createVisual: function () {\n var options = this.options;\n this.visual = new Group({\n transform: this.rotationTransform(),\n zIndex: options.zIndex,\n noclip: options.noclip\n });\n if (this.hasBox()) {\n var box = Path.fromRect(this.paddingBox.toRect(), this.visualStyle());\n this.visual.append(box);\n }\n },\n renderVisual: function () {\n if (!this.options.visible) {\n return;\n }\n if (this.options.visual) {\n var visual = this.visual;\n if (visual && !defined(visual.options.noclip)) {\n visual.options.noclip = this.options.noclip;\n }\n this.addVisual();\n this.createAnimation();\n } else {\n BoxElement.fn.renderVisual.call(this);\n }\n },\n visualContext: function (targetBox) {\n var this$1 = this;\n var context = {\n text: this.content,\n rect: targetBox.toRect(),\n sender: this.getSender(),\n options: this.options,\n createVisual: function () {\n this$1._boxReflow = true;\n this$1.reflow(targetBox);\n this$1._boxReflow = false;\n return this$1.getDefaultVisual();\n }\n };\n if (this.data) {\n $.extend(context, this.data);\n }\n return context;\n },\n getDefaultVisual: function () {\n this.createVisual();\n this.renderChildren();\n var visual = this.visual;\n delete this.visual;\n return visual;\n },\n rotate: function () {\n var options = this.options;\n this.box.rotate(options.rotation);\n this.align(this.targetBox, X, options.align);\n this.align(this.targetBox, Y, options.vAlign);\n return this.box;\n },\n rotationTransform: function () {\n var rotation = this.options.rotation;\n if (!rotation) {\n return null;\n }\n var ref = this.normalBox.center();\n var cx = ref.x;\n var cy = ref.y;\n var boxCenter = this.rotatedBox.center();\n return geometryTransform().translate(boxCenter.x - cx, boxCenter.y - cy).rotate(rotation, [\n cx,\n cy\n ]);\n }\n });\n var Title = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n this.append(new TextBox(this.options.text, $.extend({}, this.options, { vAlign: this.options.position })));\n },\n reflow: function (targetBox) {\n ChartElement.fn.reflow.call(this, targetBox);\n this.box.snapTo(targetBox, X);\n }\n });\n Title.buildTitle = function (options, parent, defaultOptions) {\n var titleOptions = options;\n if (typeof options === 'string') {\n titleOptions = { text: options };\n }\n titleOptions = $.extend({ visible: true }, defaultOptions, titleOptions);\n var title;\n if (titleOptions && titleOptions.visible && titleOptions.text) {\n title = new Title(titleOptions);\n parent.append(title);\n }\n return title;\n };\n setDefaultOptions(Title, {\n color: BLACK,\n position: TOP,\n align: CENTER,\n margin: getSpacing(5),\n padding: getSpacing(5)\n });\n var AxisLabel = TextBox.extend({\n init: function (value, text, index, dataItem, options) {\n TextBox.fn.init.call(this, text, options);\n this.text = text;\n this.value = value;\n this.index = index;\n this.dataItem = dataItem;\n this.reflow(new Box());\n },\n visualContext: function (targetBox) {\n var context = TextBox.fn.visualContext.call(this, targetBox);\n context.value = this.value;\n context.dataItem = this.dataItem;\n context.format = this.options.format;\n context.culture = this.options.culture;\n return context;\n },\n click: function (widget, e) {\n widget.trigger(AXIS_LABEL_CLICK, {\n element: eventElement(e),\n value: this.value,\n text: this.text,\n index: this.index,\n dataItem: this.dataItem,\n axis: this.parent.options\n });\n },\n rotate: function () {\n if (this.options.alignRotation !== CENTER) {\n var box = this.normalBox.toRect();\n var transform = this.rotationTransform();\n this.box = rectToBox(box.bbox(transform.matrix()));\n } else {\n TextBox.fn.rotate.call(this);\n }\n return this.box;\n },\n rotationTransform: function () {\n var options = this.options;\n var rotation = options.rotation;\n if (!rotation) {\n return null;\n }\n if (options.alignRotation === CENTER) {\n return TextBox.fn.rotationTransform.call(this);\n }\n var rotationMatrix = geometryTransform().rotate(rotation).matrix();\n var box = this.normalBox.toRect();\n var rect = this.targetBox.toRect();\n var rotationOrigin = options.rotationOrigin || TOP;\n var alignAxis = rotationOrigin === TOP || rotationOrigin === BOTTOM ? X : Y;\n var distanceAxis = rotationOrigin === TOP || rotationOrigin === BOTTOM ? Y : X;\n var axisAnchor = rotationOrigin === TOP || rotationOrigin === LEFT ? rect.origin : rect.bottomRight();\n var topLeft = box.topLeft().transformCopy(rotationMatrix);\n var topRight = box.topRight().transformCopy(rotationMatrix);\n var bottomRight = box.bottomRight().transformCopy(rotationMatrix);\n var bottomLeft = box.bottomLeft().transformCopy(rotationMatrix);\n var rotatedBox = Rect.fromPoints(topLeft, topRight, bottomRight, bottomLeft);\n var translate = {};\n translate[distanceAxis] = rect.origin[distanceAxis] - rotatedBox.origin[distanceAxis];\n var distanceLeft = Math.abs(topLeft[distanceAxis] + translate[distanceAxis] - axisAnchor[distanceAxis]);\n var distanceRight = Math.abs(topRight[distanceAxis] + translate[distanceAxis] - axisAnchor[distanceAxis]);\n var alignStart, alignEnd;\n if (round(distanceLeft, DEFAULT_PRECISION) === round(distanceRight, DEFAULT_PRECISION)) {\n alignStart = topLeft;\n alignEnd = topRight;\n } else if (distanceRight < distanceLeft) {\n alignStart = topRight;\n alignEnd = bottomRight;\n } else {\n alignStart = topLeft;\n alignEnd = bottomLeft;\n }\n var alignCenter = alignStart[alignAxis] + (alignEnd[alignAxis] - alignStart[alignAxis]) / 2;\n translate[alignAxis] = rect.center()[alignAxis] - alignCenter;\n return geometryTransform().translate(translate.x, translate.y).rotate(rotation);\n }\n });\n setDefaultOptions(AxisLabel, { _autoReflow: false });\n var DEFAULT_ICON_SIZE = 7;\n var DEFAULT_LABEL_COLOR = '#fff';\n var Note = BoxElement.extend({\n init: function (fields, options, chartService) {\n BoxElement.fn.init.call(this, options);\n this.fields = fields;\n this.chartService = chartService;\n this.render();\n },\n hide: function () {\n this.options.visible = false;\n },\n show: function () {\n this.options.visible = true;\n },\n render: function () {\n var this$1 = this;\n var options = this.options;\n if (options.visible) {\n var label = options.label;\n var icon = options.icon;\n var box = new Box();\n var childAlias = function () {\n return this$1;\n };\n var size = icon.size;\n var text = this.fields.text;\n var width, height;\n if (defined(label) && label.visible) {\n var noteTemplate = getTemplate(label);\n if (noteTemplate) {\n text = noteTemplate(this.fields);\n } else if (label.format) {\n text = this.chartService.format.auto(label.format, text);\n }\n if (!label.color) {\n label.color = label.position === INSIDE ? DEFAULT_LABEL_COLOR : icon.background;\n }\n this.label = new TextBox(text, deepExtend({}, label));\n this.label.aliasFor = childAlias;\n if (label.position === INSIDE && !defined(size)) {\n if (icon.type === CIRCLE) {\n size = Math.max(this.label.box.width(), this.label.box.height());\n } else {\n width = this.label.box.width();\n height = this.label.box.height();\n }\n box.wrap(this.label.box);\n }\n }\n icon.width = width || size || DEFAULT_ICON_SIZE;\n icon.height = height || size || DEFAULT_ICON_SIZE;\n var marker = new ShapeElement(deepExtend({}, icon));\n marker.aliasFor = childAlias;\n this.marker = marker;\n this.append(marker);\n if (this.label) {\n this.append(this.label);\n }\n marker.reflow(new Box());\n this.wrapperBox = box.wrap(marker.box);\n }\n },\n reflow: function (targetBox) {\n var ref = this;\n var options = ref.options;\n var label = ref.label;\n var marker = ref.marker;\n var wrapperBox = ref.wrapperBox;\n var center = targetBox.center();\n var length = options.line.length;\n var position = options.position;\n if (options.visible) {\n var lineStart, box, contentBox;\n if (inArray(position, [\n LEFT,\n RIGHT\n ])) {\n if (position === LEFT) {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(-length, targetBox.center().y - wrapperBox.center().y);\n if (options.line.visible) {\n lineStart = [\n targetBox.x1,\n center.y\n ];\n this.linePoints = [\n lineStart,\n [\n contentBox.x2,\n center.y\n ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n } else {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(length, targetBox.center().y - wrapperBox.center().y);\n if (options.line.visible) {\n lineStart = [\n targetBox.x2,\n center.y\n ];\n this.linePoints = [\n lineStart,\n [\n contentBox.x1,\n center.y\n ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n }\n } else {\n if (position === BOTTOM) {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(targetBox.center().x - wrapperBox.center().x, length);\n if (options.line.visible) {\n lineStart = [\n center.x,\n targetBox.y2\n ];\n this.linePoints = [\n lineStart,\n [\n center.x,\n contentBox.y1\n ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n } else {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(targetBox.center().x - wrapperBox.center().x, -length);\n if (options.line.visible) {\n lineStart = [\n center.x,\n targetBox.y1\n ];\n this.linePoints = [\n lineStart,\n [\n center.x,\n contentBox.y2\n ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n }\n }\n if (marker) {\n marker.reflow(contentBox);\n }\n if (label) {\n label.reflow(contentBox);\n if (marker) {\n if (options.label.position === OUTSIDE) {\n label.box.alignTo(marker.box, position);\n }\n label.reflow(label.box);\n }\n }\n this.contentBox = contentBox;\n this.targetBox = targetBox;\n this.box = box || contentBox;\n }\n },\n createVisual: function () {\n BoxElement.fn.createVisual.call(this);\n this.visual.options.noclip = this.options.noclip;\n if (this.options.visible) {\n this.createLine();\n }\n },\n renderVisual: function () {\n var this$1 = this;\n var options = this.options;\n var customVisual = options.visual;\n if (options.visible && customVisual) {\n this.visual = customVisual($.extend(this.fields, {\n sender: this.getSender(),\n rect: this.targetBox.toRect(),\n options: {\n background: options.background,\n border: options.background,\n icon: options.icon,\n label: options.label,\n line: options.line,\n position: options.position,\n visible: options.visible\n },\n createVisual: function () {\n this$1.createVisual();\n this$1.renderChildren();\n var defaultVisual = this$1.visual;\n delete this$1.visual;\n return defaultVisual;\n }\n }));\n this.addVisual();\n } else {\n BoxElement.fn.renderVisual.call(this);\n }\n },\n createLine: function () {\n var options = this.options.line;\n if (this.linePoints) {\n var path = Path.fromPoints(this.linePoints, {\n stroke: {\n color: options.color,\n width: options.width,\n dashType: options.dashType\n }\n });\n alignPathToPixel(path);\n this.visual.append(path);\n }\n },\n click: function (widget, e) {\n var args = this.eventArgs(e);\n if (!widget.trigger(NOTE_CLICK, args)) {\n e.preventDefault();\n }\n },\n over: function (widget, e) {\n var args = this.eventArgs(e);\n if (!widget.trigger(NOTE_HOVER, args)) {\n e.preventDefault();\n }\n },\n out: function (widget, e) {\n var args = this.eventArgs(e);\n widget.trigger(NOTE_LEAVE, args);\n },\n eventArgs: function (e) {\n var options = this.options;\n return $.extend(this.fields, {\n element: eventElement(e),\n text: defined(options.label) ? options.label.text : '',\n visual: this.visual\n });\n }\n });\n setDefaultOptions(Note, {\n icon: {\n visible: true,\n type: CIRCLE\n },\n label: {\n position: INSIDE,\n visible: true,\n align: CENTER,\n vAlign: CENTER\n },\n line: { visible: true },\n visible: true,\n position: TOP,\n zIndex: 2\n });\n function createAxisTick(options, tickOptions) {\n var tickX = options.tickX;\n var tickY = options.tickY;\n var position = options.position;\n var tick = new Path({\n stroke: {\n width: tickOptions.width,\n color: tickOptions.color\n }\n });\n if (options.vertical) {\n tick.moveTo(tickX, position).lineTo(tickX + tickOptions.size, position);\n } else {\n tick.moveTo(position, tickY).lineTo(position, tickY + tickOptions.size);\n }\n alignPathToPixel(tick);\n return tick;\n }\n function createAxisGridLine(options, gridLine) {\n var lineStart = options.lineStart;\n var lineEnd = options.lineEnd;\n var position = options.position;\n var line = new Path({\n stroke: {\n width: gridLine.width,\n color: gridLine.color,\n dashType: gridLine.dashType\n }\n });\n if (options.vertical) {\n line.moveTo(lineStart, position).lineTo(lineEnd, position);\n } else {\n line.moveTo(position, lineStart).lineTo(position, lineEnd);\n }\n alignPathToPixel(line);\n return line;\n }\n var Axis = ChartElement.extend({\n init: function (options, chartService) {\n if (chartService === void 0) {\n chartService = new ChartService();\n }\n ChartElement.fn.init.call(this, options);\n this.chartService = chartService;\n if (!this.options.visible) {\n this.options = deepExtend({}, this.options, {\n labels: { visible: false },\n line: { visible: false },\n margin: 0,\n majorTickSize: 0,\n minorTickSize: 0\n });\n }\n this.options.minorTicks = deepExtend({}, {\n color: this.options.line.color,\n width: this.options.line.width,\n visible: this.options.minorTickType !== NONE\n }, this.options.minorTicks, {\n size: this.options.minorTickSize,\n align: this.options.minorTickType\n });\n this.options.majorTicks = deepExtend({}, {\n color: this.options.line.color,\n width: this.options.line.width,\n visible: this.options.majorTickType !== NONE\n }, this.options.majorTicks, {\n size: this.options.majorTickSize,\n align: this.options.majorTickType\n });\n this.initFields();\n if (!this.options._deferLabels) {\n this.createLabels();\n }\n this.createTitle();\n this.createNotes();\n },\n initFields: function () {\n },\n labelsRange: function () {\n return {\n min: this.options.labels.skip,\n max: this.labelsCount()\n };\n },\n createLabels: function () {\n var this$1 = this;\n var options = this.options;\n var align = options.vertical ? RIGHT : CENTER;\n var labelOptions = deepExtend({}, options.labels, {\n align: align,\n zIndex: options.zIndex\n });\n var step = Math.max(1, labelOptions.step);\n this.clearLabels();\n if (labelOptions.visible) {\n var range = this.labelsRange();\n var rotation = labelOptions.rotation;\n if (isObject(rotation)) {\n labelOptions.alignRotation = rotation.align;\n labelOptions.rotation = rotation.angle;\n }\n if (labelOptions.rotation === 'auto') {\n labelOptions.rotation = 0;\n options.autoRotateLabels = true;\n }\n for (var idx = range.min; idx < range.max; idx += step) {\n var label = this$1.createAxisLabel(idx, labelOptions);\n if (label) {\n this$1.append(label);\n this$1.labels.push(label);\n }\n }\n }\n },\n clearLabels: function () {\n this.children = grep(this.children, function (child) {\n return !(child instanceof AxisLabel);\n });\n this.labels = [];\n },\n clearTitle: function () {\n var this$1 = this;\n if (this.title) {\n this.children = grep(this.children, function (child) {\n return child !== this$1.title;\n });\n this.title = undefined;\n }\n },\n clear: function () {\n this.clearLabels();\n this.clearTitle();\n },\n lineBox: function () {\n var ref = this;\n var options = ref.options;\n var box = ref.box;\n var vertical = options.vertical;\n var mirror = options.labels.mirror;\n var axisX = mirror ? box.x1 : box.x2;\n var axisY = mirror ? box.y2 : box.y1;\n var lineWidth = options.line.width || 0;\n return vertical ? new Box(axisX, box.y1, axisX, box.y2 - lineWidth) : new Box(box.x1, axisY, box.x2 - lineWidth, axisY);\n },\n createTitle: function () {\n var options = this.options;\n var titleOptions = deepExtend({\n rotation: options.vertical ? -90 : 0,\n text: '',\n zIndex: 1,\n visualSize: true\n }, options.title);\n if (titleOptions.visible && titleOptions.text) {\n var title = new TextBox(titleOptions.text, titleOptions);\n this.append(title);\n this.title = title;\n }\n },\n createNotes: function () {\n var this$1 = this;\n var options = this.options;\n var notes = options.notes;\n var items = notes.data || [];\n this.notes = [];\n for (var i = 0; i < items.length; i++) {\n var item = deepExtend({}, notes, items[i]);\n item.value = this$1.parseNoteValue(item.value);\n var note = new Note({\n value: item.value,\n text: item.label.text,\n dataItem: item\n }, item, this$1.chartService);\n if (note.options.visible) {\n if (defined(note.options.position)) {\n if (options.vertical && !inArray(note.options.position, [\n LEFT,\n RIGHT\n ])) {\n note.options.position = options.reverse ? LEFT : RIGHT;\n } else if (!options.vertical && !inArray(note.options.position, [\n TOP,\n BOTTOM\n ])) {\n note.options.position = options.reverse ? BOTTOM : TOP;\n }\n } else {\n if (options.vertical) {\n note.options.position = options.reverse ? LEFT : RIGHT;\n } else {\n note.options.position = options.reverse ? BOTTOM : TOP;\n }\n }\n this$1.append(note);\n this$1.notes.push(note);\n }\n }\n },\n parseNoteValue: function (value) {\n return value;\n },\n renderVisual: function () {\n ChartElement.fn.renderVisual.call(this);\n this.createPlotBands();\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n this.createBackground();\n this.createLine();\n },\n gridLinesVisual: function () {\n var gridLines = this._gridLines;\n if (!gridLines) {\n gridLines = this._gridLines = new Group({ zIndex: -2 });\n this.appendVisual(this._gridLines);\n }\n return gridLines;\n },\n createTicks: function (lineGroup) {\n var options = this.options;\n var lineBox = this.lineBox();\n var mirror = options.labels.mirror;\n var majorUnit = options.majorTicks.visible ? options.majorUnit : 0;\n var tickLineOptions = { vertical: options.vertical };\n function render(tickPositions, tickOptions, skipUnit) {\n var count = tickPositions.length;\n var step = Math.max(1, tickOptions.step);\n if (tickOptions.visible) {\n for (var i = tickOptions.skip; i < count; i += step) {\n if (defined(skipUnit) && i % skipUnit === 0) {\n continue;\n }\n tickLineOptions.tickX = mirror ? lineBox.x2 : lineBox.x2 - tickOptions.size;\n tickLineOptions.tickY = mirror ? lineBox.y1 - tickOptions.size : lineBox.y1;\n tickLineOptions.position = tickPositions[i];\n lineGroup.append(createAxisTick(tickLineOptions, tickOptions));\n }\n }\n }\n render(this.getMajorTickPositions(), options.majorTicks);\n render(this.getMinorTickPositions(), options.minorTicks, majorUnit / options.minorUnit);\n },\n createLine: function () {\n var options = this.options;\n var line = options.line;\n var lineBox = this.lineBox();\n if (line.width > 0 && line.visible) {\n var path = new Path({\n stroke: {\n width: line.width,\n color: line.color,\n dashType: line.dashType\n }\n });\n path.moveTo(lineBox.x1, lineBox.y1).lineTo(lineBox.x2, lineBox.y2);\n if (options._alignLines) {\n alignPathToPixel(path);\n }\n var group = this._lineGroup = new Group();\n group.append(path);\n this.visual.append(group);\n this.createTicks(group);\n }\n },\n getActualTickSize: function () {\n var options = this.options;\n var tickSize = 0;\n if (options.majorTicks.visible && options.minorTicks.visible) {\n tickSize = Math.max(options.majorTicks.size, options.minorTicks.size);\n } else if (options.majorTicks.visible) {\n tickSize = options.majorTicks.size;\n } else if (options.minorTicks.visible) {\n tickSize = options.minorTicks.size;\n }\n return tickSize;\n },\n createBackground: function () {\n var ref = this;\n var options = ref.options;\n var box = ref.box;\n var background = options.background;\n if (background) {\n this._backgroundPath = Path.fromRect(box.toRect(), {\n fill: { color: background },\n stroke: null\n });\n this.visual.append(this._backgroundPath);\n }\n },\n createPlotBands: function () {\n var this$1 = this;\n var options = this.options;\n var plotBands = options.plotBands || [];\n var vertical = options.vertical;\n var plotArea = this.plotArea;\n if (plotBands.length === 0) {\n return;\n }\n var group = this._plotbandGroup = new Group({ zIndex: -1 });\n var altAxis = grep(this.pane.axes, function (axis) {\n return axis.options.vertical !== this$1.options.vertical;\n })[0];\n for (var idx = 0; idx < plotBands.length; idx++) {\n var item = plotBands[idx];\n var slotX = void 0, slotY = void 0;\n if (vertical) {\n slotX = (altAxis || plotArea.axisX).lineBox();\n slotY = this$1.getSlot(item.from, item.to, true);\n } else {\n slotX = this$1.getSlot(item.from, item.to, true);\n slotY = (altAxis || plotArea.axisY).lineBox();\n }\n if (slotX.width() !== 0 && slotY.height() !== 0) {\n var bandRect = new Rect([\n slotX.x1,\n slotY.y1\n ], [\n slotX.width(),\n slotY.height()\n ]);\n var path = Path.fromRect(bandRect, {\n fill: {\n color: item.color,\n opacity: item.opacity\n },\n stroke: null\n });\n group.append(path);\n }\n }\n this.appendVisual(group);\n },\n createGridLines: function (altAxis) {\n var options = this.options;\n var minorGridLines = options.minorGridLines;\n var majorGridLines = options.majorGridLines;\n var minorUnit = options.minorUnit;\n var vertical = options.vertical;\n var axisLineVisible = altAxis.options.line.visible;\n var majorUnit = majorGridLines.visible ? options.majorUnit : 0;\n var lineBox = altAxis.lineBox();\n var linePos = lineBox[vertical ? 'y1' : 'x1'];\n var lineOptions = {\n lineStart: lineBox[vertical ? 'x1' : 'y1'],\n lineEnd: lineBox[vertical ? 'x2' : 'y2'],\n vertical: vertical\n };\n var majorTicks = [];\n var container = this.gridLinesVisual();\n function render(tickPositions, gridLine, skipUnit) {\n var count = tickPositions.length;\n var step = Math.max(1, gridLine.step);\n if (gridLine.visible) {\n for (var i = gridLine.skip; i < count; i += step) {\n var pos = round(tickPositions[i]);\n if (!inArray(pos, majorTicks)) {\n if (i % skipUnit !== 0 && (!axisLineVisible || linePos !== pos)) {\n lineOptions.position = pos;\n container.append(createAxisGridLine(lineOptions, gridLine));\n majorTicks.push(pos);\n }\n }\n }\n }\n }\n render(this.getMajorTickPositions(), majorGridLines);\n render(this.getMinorTickPositions(), minorGridLines, majorUnit / minorUnit);\n return container.children;\n },\n reflow: function (box) {\n var ref = this;\n var options = ref.options;\n var labels = ref.labels;\n var title = ref.title;\n var vertical = options.vertical;\n var count = labels.length;\n var sizeFn = vertical ? WIDTH : HEIGHT;\n var titleSize = title ? title.box[sizeFn]() : 0;\n var space = this.getActualTickSize() + options.margin + titleSize;\n var rootBox = (this.getRoot() || {}).box || box;\n var boxSize = rootBox[sizeFn]();\n var maxLabelSize = 0;\n for (var i = 0; i < count; i++) {\n var labelSize = labels[i].box[sizeFn]();\n if (labelSize + space <= boxSize) {\n maxLabelSize = Math.max(maxLabelSize, labelSize);\n }\n }\n if (vertical) {\n this.box = new Box(box.x1, box.y1, box.x1 + maxLabelSize + space, box.y2);\n } else {\n this.box = new Box(box.x1, box.y1, box.x2, box.y1 + maxLabelSize + space);\n }\n this.arrangeTitle();\n this.arrangeLabels();\n this.arrangeNotes();\n },\n getLabelsTickPositions: function () {\n return this.getMajorTickPositions();\n },\n labelTickIndex: function (label) {\n return label.index;\n },\n arrangeLabels: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var labels = ref.labels;\n var labelsBetweenTicks = this.labelsBetweenTicks();\n var vertical = options.vertical;\n var lineBox = this.lineBox();\n var mirror = options.labels.mirror;\n var tickPositions = this.getLabelsTickPositions();\n var labelOffset = this.getActualTickSize() + options.margin;\n for (var idx = 0; idx < labels.length; idx++) {\n var label = labels[idx];\n var tickIx = this$1.labelTickIndex(label);\n var labelSize = vertical ? label.box.height() : label.box.width();\n var labelPos = tickPositions[tickIx] - labelSize / 2;\n var labelBox = void 0, firstTickPosition = void 0, nextTickPosition = void 0;\n if (vertical) {\n if (labelsBetweenTicks) {\n firstTickPosition = tickPositions[tickIx];\n nextTickPosition = tickPositions[tickIx + 1];\n var middle = firstTickPosition + (nextTickPosition - firstTickPosition) / 2;\n labelPos = middle - labelSize / 2;\n }\n var labelX = lineBox.x2;\n if (mirror) {\n labelX += labelOffset;\n label.options.rotationOrigin = LEFT;\n } else {\n labelX -= labelOffset + label.box.width();\n label.options.rotationOrigin = RIGHT;\n }\n labelBox = label.box.move(labelX, labelPos);\n } else {\n if (labelsBetweenTicks) {\n firstTickPosition = tickPositions[tickIx];\n nextTickPosition = tickPositions[tickIx + 1];\n } else {\n firstTickPosition = labelPos;\n nextTickPosition = labelPos + labelSize;\n }\n var labelY = lineBox.y1;\n if (mirror) {\n labelY -= labelOffset + label.box.height();\n label.options.rotationOrigin = BOTTOM;\n } else {\n labelY += labelOffset;\n label.options.rotationOrigin = TOP;\n }\n labelBox = new Box(firstTickPosition, labelY, nextTickPosition, labelY + label.box.height());\n }\n label.reflow(labelBox);\n }\n },\n autoRotateLabels: function () {\n if (this.options.autoRotateLabels && !this.options.vertical) {\n var tickPositions = this.getMajorTickPositions();\n var labels = this.labels;\n var angle;\n for (var idx = 0; idx < labels.length; idx++) {\n var width = Math.abs(tickPositions[idx + 1] - tickPositions[idx]);\n var labelBox = labels[idx].box;\n if (labelBox.width() > width) {\n if (labelBox.height() > width) {\n angle = -90;\n break;\n }\n angle = -45;\n }\n }\n if (angle) {\n for (var idx$1 = 0; idx$1 < labels.length; idx$1++) {\n labels[idx$1].options.rotation = angle;\n labels[idx$1].reflow(new Box());\n }\n return true;\n }\n }\n },\n arrangeTitle: function () {\n var ref = this;\n var options = ref.options;\n var title = ref.title;\n var mirror = options.labels.mirror;\n var vertical = options.vertical;\n if (title) {\n if (vertical) {\n title.options.align = mirror ? RIGHT : LEFT;\n title.options.vAlign = title.options.position;\n } else {\n title.options.align = title.options.position;\n title.options.vAlign = mirror ? TOP : BOTTOM;\n }\n title.reflow(this.box);\n }\n },\n arrangeNotes: function () {\n var this$1 = this;\n for (var idx = 0; idx < this.notes.length; idx++) {\n var item = this$1.notes[idx];\n var value = item.options.value;\n var slot = void 0;\n if (defined(value)) {\n if (this$1.shouldRenderNote(value)) {\n item.show();\n } else {\n item.hide();\n }\n slot = this$1.noteSlot(value);\n } else {\n item.hide();\n }\n item.reflow(slot || this$1.lineBox());\n }\n },\n noteSlot: function (value) {\n return this.getSlot(value);\n },\n alignTo: function (secondAxis) {\n var lineBox = secondAxis.lineBox();\n var vertical = this.options.vertical;\n var pos = vertical ? Y : X;\n this.box.snapTo(lineBox, pos);\n if (vertical) {\n this.box.shrink(0, this.lineBox().height() - lineBox.height());\n } else {\n this.box.shrink(this.lineBox().width() - lineBox.width(), 0);\n }\n this.box[pos + 1] -= this.lineBox()[pos + 1] - lineBox[pos + 1];\n this.box[pos + 2] -= this.lineBox()[pos + 2] - lineBox[pos + 2];\n },\n axisLabelText: function (value, dataItem, options) {\n var tmpl = getTemplate(options);\n var text = value;\n if (tmpl) {\n text = tmpl({\n value: value,\n dataItem: dataItem,\n format: options.format,\n culture: options.culture\n });\n } else if (options.format) {\n text = this.chartService.format.localeAuto(options.format, [value], options.culture);\n }\n return text;\n },\n slot: function (from, to, limit) {\n var slot = this.getSlot(from, to, limit);\n if (slot) {\n return slot.toRect();\n }\n },\n contentBox: function () {\n var box = this.box.clone();\n var labels = this.labels;\n if (labels.length) {\n var axis = this.options.vertical ? Y : X;\n if (this.chartService.isPannable(axis)) {\n var offset = this.maxLabelOffset();\n box[axis + 1] -= offset.start;\n box[axis + 2] += offset.end;\n } else {\n if (labels[0].options.visible) {\n box.wrap(labels[0].box);\n }\n var lastLabel = labels[labels.length - 1];\n if (lastLabel.options.visible) {\n box.wrap(lastLabel.box);\n }\n }\n }\n return box;\n },\n maxLabelOffset: function () {\n var this$1 = this;\n var ref = this.options;\n var vertical = ref.vertical;\n var reverse = ref.reverse;\n var labelsBetweenTicks = this.labelsBetweenTicks();\n var tickPositions = this.getLabelsTickPositions();\n var offsetField = vertical ? Y : X;\n var labels = this.labels;\n var startPosition = reverse ? 1 : 0;\n var endPosition = reverse ? 0 : 1;\n var maxStartOffset = 0;\n var maxEndOffset = 0;\n for (var idx = 0; idx < labels.length; idx++) {\n var label = labels[idx];\n var tickIx = this$1.labelTickIndex(label);\n var startTick = void 0, endTick = void 0;\n if (labelsBetweenTicks) {\n startTick = tickPositions[tickIx + startPosition];\n endTick = tickPositions[tickIx + endPosition];\n } else {\n startTick = endTick = tickPositions[tickIx];\n }\n maxStartOffset = Math.max(maxStartOffset, startTick - label.box[offsetField + 1]);\n maxEndOffset = Math.max(maxEndOffset, label.box[offsetField + 2] - endTick);\n }\n return {\n start: maxStartOffset,\n end: maxEndOffset\n };\n },\n limitRange: function (from, to, min, max, offset) {\n var options = this.options;\n if (from < min && offset < 0 && (!defined(options.min) || options.min <= min) || max < to && offset > 0 && (!defined(options.max) || max <= options.max)) {\n return null;\n }\n if (to < min && offset > 0 || max < from && offset < 0) {\n return {\n min: from,\n max: to\n };\n }\n var rangeSize = to - from;\n var minValue = from;\n var maxValue = to;\n if (from < min && offset < 0) {\n minValue = limitValue(from, min, max);\n maxValue = limitValue(from + rangeSize, min + rangeSize, max);\n } else if (to > max && offset > 0) {\n maxValue = limitValue(to, min, max);\n minValue = limitValue(to - rangeSize, min, max - rangeSize);\n }\n return {\n min: minValue,\n max: maxValue\n };\n },\n valueRange: function () {\n return {\n min: this.seriesMin,\n max: this.seriesMax\n };\n },\n labelsBetweenTicks: function () {\n return !this.options.justified;\n },\n prepareUserOptions: function () {\n }\n });\n setDefaultOptions(Axis, {\n labels: {\n visible: true,\n rotation: 0,\n mirror: false,\n step: 1,\n skip: 0\n },\n line: {\n width: 1,\n color: BLACK,\n visible: true\n },\n title: {\n visible: true,\n position: CENTER\n },\n majorTicks: {\n align: OUTSIDE,\n size: 4,\n skip: 0,\n step: 1\n },\n minorTicks: {\n align: OUTSIDE,\n size: 3,\n skip: 0,\n step: 1\n },\n axisCrossingValue: 0,\n majorTickType: OUTSIDE,\n minorTickType: NONE,\n majorGridLines: {\n skip: 0,\n step: 1\n },\n minorGridLines: {\n visible: false,\n width: 1,\n color: BLACK,\n skip: 0,\n step: 1\n },\n margin: 5,\n visible: true,\n reverse: false,\n justified: true,\n notes: { label: { text: '' } },\n _alignLines: true,\n _deferLabels: false\n });\n var MILLISECONDS = 'milliseconds';\n var SECONDS = 'seconds';\n var MINUTES = 'minutes';\n var HOURS = 'hours';\n var DAYS = 'days';\n var WEEKS = 'weeks';\n var MONTHS = 'months';\n var YEARS = 'years';\n var TIME_PER_MILLISECOND = 1;\n var TIME_PER_SECOND = 1000;\n var TIME_PER_MINUTE = 60 * TIME_PER_SECOND;\n var TIME_PER_HOUR = 60 * TIME_PER_MINUTE;\n var TIME_PER_DAY = 24 * TIME_PER_HOUR;\n var TIME_PER_WEEK = 7 * TIME_PER_DAY;\n var TIME_PER_MONTH = 31 * TIME_PER_DAY;\n var TIME_PER_YEAR = 365 * TIME_PER_DAY;\n var TIME_PER_UNIT = {\n 'years': TIME_PER_YEAR,\n 'months': TIME_PER_MONTH,\n 'weeks': TIME_PER_WEEK,\n 'days': TIME_PER_DAY,\n 'hours': TIME_PER_HOUR,\n 'minutes': TIME_PER_MINUTE,\n 'seconds': TIME_PER_SECOND,\n 'milliseconds': TIME_PER_MILLISECOND\n };\n function absoluteDateDiff(a, b) {\n var diff = a.getTime() - b;\n var offsetDiff = a.getTimezoneOffset() - b.getTimezoneOffset();\n return diff - offsetDiff * TIME_PER_MINUTE;\n }\n function addTicks(date, ticks) {\n return new Date(date.getTime() + ticks);\n }\n function toDate(value) {\n var result;\n if (value instanceof Date) {\n result = value;\n } else if (value) {\n result = new Date(value);\n }\n return result;\n }\n function startOfWeek(date, weekStartDay) {\n if (weekStartDay === void 0) {\n weekStartDay = 0;\n }\n var daysToSubtract = 0;\n var day = date.getDay();\n if (!isNaN(day)) {\n while (day !== weekStartDay) {\n if (day === 0) {\n day = 6;\n } else {\n day--;\n }\n daysToSubtract++;\n }\n }\n return addTicks(date, -daysToSubtract * TIME_PER_DAY);\n }\n function adjustDST(date, hours) {\n if (hours === 0 && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n return true;\n }\n return false;\n }\n function addHours(date, hours) {\n var roundedDate = new Date(date);\n roundedDate.setMinutes(0, 0, 0);\n var tzDiff = (date.getTimezoneOffset() - roundedDate.getTimezoneOffset()) * TIME_PER_MINUTE;\n return addTicks(roundedDate, tzDiff + hours * TIME_PER_HOUR);\n }\n function addDuration(dateValue, value, unit, weekStartDay) {\n var result = dateValue;\n if (dateValue) {\n var date = toDate(dateValue);\n var hours = date.getHours();\n if (unit === YEARS) {\n result = new Date(date.getFullYear() + value, 0, 1);\n adjustDST(result, 0);\n } else if (unit === MONTHS) {\n result = new Date(date.getFullYear(), date.getMonth() + value, 1);\n adjustDST(result, hours);\n } else if (unit === WEEKS) {\n result = addDuration(startOfWeek(date, weekStartDay), value * 7, DAYS);\n adjustDST(result, hours);\n } else if (unit === DAYS) {\n result = new Date(date.getFullYear(), date.getMonth(), date.getDate() + value);\n adjustDST(result, hours);\n } else if (unit === HOURS) {\n result = addHours(date, value);\n } else if (unit === MINUTES) {\n result = addTicks(date, value * TIME_PER_MINUTE);\n if (result.getSeconds() > 0) {\n result.setSeconds(0);\n }\n } else if (unit === SECONDS) {\n result = addTicks(date, value * TIME_PER_SECOND);\n } else if (unit === MILLISECONDS) {\n result = addTicks(date, value);\n }\n if (unit !== MILLISECONDS && result.getMilliseconds() > 0) {\n result.setMilliseconds(0);\n }\n }\n return result;\n }\n function floorDate(date, unit, weekStartDay) {\n return addDuration(toDate(date), 0, unit, weekStartDay);\n }\n function ceilDate(dateValue, unit, weekStartDay) {\n var date = toDate(dateValue);\n if (date && floorDate(date, unit, weekStartDay).getTime() === date.getTime()) {\n return date;\n }\n return addDuration(date, 1, unit, weekStartDay);\n }\n function dateComparer(a, b) {\n if (a && b) {\n return a.getTime() - b.getTime();\n }\n return -1;\n }\n function dateDiff(a, b) {\n return a.getTime() - b;\n }\n function toTime(value) {\n if (isArray(value)) {\n var result = [];\n for (var idx = 0; idx < value.length; idx++) {\n result.push(toTime(value[idx]));\n }\n return result;\n } else if (value) {\n return toDate(value).getTime();\n }\n }\n function dateEquals(a, b) {\n if (a && b) {\n return toTime(a) === toTime(b);\n }\n return a === b;\n }\n function timeIndex(date, start, baseUnit) {\n return absoluteDateDiff(date, start) / TIME_PER_UNIT[baseUnit];\n }\n function dateIndex(value, start, baseUnit, baseUnitStep) {\n var date = toDate(value);\n var startDate = toDate(start);\n var index;\n if (baseUnit === MONTHS) {\n index = date.getMonth() - startDate.getMonth() + (date.getFullYear() - startDate.getFullYear()) * 12 + timeIndex(date, new Date(date.getFullYear(), date.getMonth()), DAYS) / new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\n } else if (baseUnit === YEARS) {\n index = date.getFullYear() - startDate.getFullYear() + dateIndex(date, new Date(date.getFullYear(), 0), MONTHS, 1) / 12;\n } else if (baseUnit === DAYS || baseUnit === WEEKS) {\n index = timeIndex(date, startDate, baseUnit);\n } else {\n index = dateDiff(date, start) / TIME_PER_UNIT[baseUnit];\n }\n return index / baseUnitStep;\n }\n function duration(a, b, unit) {\n var diff;\n if (unit === YEARS) {\n diff = b.getFullYear() - a.getFullYear();\n } else if (unit === MONTHS) {\n diff = duration(a, b, YEARS) * 12 + b.getMonth() - a.getMonth();\n } else if (unit === DAYS) {\n diff = Math.floor(dateDiff(b, a) / TIME_PER_DAY);\n } else {\n diff = Math.floor(dateDiff(b, a) / TIME_PER_UNIT[unit]);\n }\n return diff;\n }\n function lteDateIndex(date, sortedDates) {\n var low = 0;\n var high = sortedDates.length - 1;\n var index;\n while (low <= high) {\n index = Math.floor((low + high) / 2);\n var currentDate = sortedDates[index];\n if (currentDate < date) {\n low = index + 1;\n continue;\n }\n if (currentDate > date) {\n high = index - 1;\n continue;\n }\n while (dateEquals(sortedDates[index - 1], date)) {\n index--;\n }\n return index;\n }\n if (sortedDates[index] <= date) {\n return index;\n }\n return index - 1;\n }\n function parseDate(intlService, date) {\n var result;\n if (isString(date)) {\n result = intlService.parseDate(date) || toDate(date);\n } else {\n result = toDate(date);\n }\n return result;\n }\n function parseDates(intlService, dates) {\n if (isArray(dates)) {\n var result = [];\n for (var idx = 0; idx < dates.length; idx++) {\n result.push(parseDate(intlService, dates[idx]));\n }\n return result;\n }\n return parseDate(intlService, dates);\n }\n var MIN_CATEGORY_POINTS_RANGE = 0.01;\n function indexOf(value, arr) {\n if (value instanceof Date) {\n var length = arr.length;\n for (var idx = 0; idx < length; idx++) {\n if (dateEquals(arr[idx], value)) {\n return idx;\n }\n }\n return -1;\n }\n return arr.indexOf(value);\n }\n var CategoryAxis = Axis.extend({\n initFields: function () {\n this._ticks = {};\n },\n categoriesHash: function () {\n return '';\n },\n clone: function () {\n var copy = new CategoryAxis($.extend({}, this.options), this.chartService);\n copy.createLabels();\n return copy;\n },\n initUserOptions: function (options) {\n var categories = options.categories || [];\n var definedMin = defined(options.min);\n var definedMax = defined(options.max);\n options.srcCategories = options.categories = categories;\n if ((definedMin || definedMax) && categories.length) {\n var min = definedMin ? Math.floor(options.min) : 0;\n var max;\n if (definedMax) {\n max = options.justified ? Math.floor(options.max) + 1 : Math.ceil(options.max);\n } else {\n max = categories.length;\n }\n options.categories = options.categories.slice(min, max);\n }\n return options;\n },\n rangeIndices: function () {\n var options = this.options;\n var length = options.categories.length || 1;\n var min = isNumber(options.min) ? options.min % 1 : 0;\n var max;\n if (isNumber(options.max) && options.max % 1 !== 0 && options.max < this.totalRange().max) {\n max = length - (1 - options.max % 1);\n } else {\n max = length - (options.justified ? 1 : 0);\n }\n return {\n min: min,\n max: max\n };\n },\n totalRangeIndices: function (limit) {\n var options = this.options;\n var min = isNumber(options.min) ? options.min : 0;\n var max;\n if (isNumber(options.max)) {\n max = options.max;\n } else if (isNumber(options.min)) {\n max = min + options.categories.length;\n } else {\n max = this.totalRange().max || 1;\n }\n if (limit) {\n var totalRange = this.totalRange();\n min = limitValue(min, 0, totalRange.max);\n max = limitValue(max, 0, totalRange.max);\n }\n return {\n min: min,\n max: max\n };\n },\n range: function () {\n var options = this.options;\n var min = isNumber(options.min) ? options.min : 0;\n var max = isNumber(options.max) ? options.max : this.totalRange().max;\n return {\n min: min,\n max: max\n };\n },\n roundedRange: function () {\n return this.range();\n },\n totalRange: function () {\n var options = this.options;\n return {\n min: 0,\n max: Math.max(this._seriesMax || 0, options.srcCategories.length) - (options.justified ? 1 : 0)\n };\n },\n scaleOptions: function () {\n var ref = this.rangeIndices();\n var min = ref.min;\n var max = ref.max;\n var lineBox = this.lineBox();\n var size = this.options.vertical ? lineBox.height() : lineBox.width();\n var scale = size / (max - min || 1);\n return {\n scale: scale * (this.options.reverse ? -1 : 1),\n box: lineBox,\n min: min,\n max: max\n };\n },\n arrangeLabels: function () {\n Axis.fn.arrangeLabels.call(this);\n this.hideOutOfRangeLabels();\n },\n hideOutOfRangeLabels: function () {\n var ref = this;\n var box = ref.box;\n var labels = ref.labels;\n if (labels.length) {\n var valueAxis = this.options.vertical ? Y : X;\n var start = box[valueAxis + 1];\n var end = box[valueAxis + 2];\n var firstLabel = labels[0];\n var lastLabel = last(labels);\n if (firstLabel.box[valueAxis + 1] > end || firstLabel.box[valueAxis + 2] < start) {\n firstLabel.options.visible = false;\n }\n if (lastLabel.box[valueAxis + 1] > end || lastLabel.box[valueAxis + 2] < start) {\n lastLabel.options.visible = false;\n }\n }\n },\n getMajorTickPositions: function () {\n return this.getTicks().majorTicks;\n },\n getMinorTickPositions: function () {\n return this.getTicks().minorTicks;\n },\n getLabelsTickPositions: function () {\n return this.getTicks().labelTicks;\n },\n tickIndices: function (stepSize) {\n var ref = this.rangeIndices();\n var min = ref.min;\n var max = ref.max;\n var limit = Math.ceil(max);\n var current = Math.floor(min);\n var indices = [];\n while (current <= limit) {\n indices.push(current);\n current += stepSize;\n }\n return indices;\n },\n getTickPositions: function (stepSize) {\n var ref = this.options;\n var vertical = ref.vertical;\n var reverse = ref.reverse;\n var ref$1 = this.scaleOptions();\n var scale = ref$1.scale;\n var box = ref$1.box;\n var min = ref$1.min;\n var pos = box[(vertical ? Y : X) + (reverse ? 2 : 1)];\n var indices = this.tickIndices(stepSize);\n var positions = [];\n for (var idx = 0; idx < indices.length; idx++) {\n positions.push(pos + round(scale * (indices[idx] - min), COORD_PRECISION));\n }\n return positions;\n },\n getTicks: function () {\n var options = this.options;\n var cache = this._ticks;\n var range = this.rangeIndices();\n var lineBox = this.lineBox();\n var hash = lineBox.getHash() + range.min + ',' + range.max + options.reverse + options.justified;\n if (cache._hash !== hash) {\n var hasMinor = options.minorTicks.visible || options.minorGridLines.visible;\n cache._hash = hash;\n cache.labelTicks = this.getTickPositions(1);\n cache.majorTicks = this.filterOutOfRangePositions(cache.labelTicks, lineBox);\n cache.minorTicks = hasMinor ? this.filterOutOfRangePositions(this.getTickPositions(0.5), lineBox) : [];\n }\n return cache;\n },\n filterOutOfRangePositions: function (positions, lineBox) {\n if (!positions.length) {\n return positions;\n }\n var axis = this.options.vertical ? Y : X;\n var inRange = function (position) {\n return lineBox[axis + 1] <= position && position <= lineBox[axis + 2];\n };\n var end = positions.length - 1;\n var startIndex = 0;\n while (!inRange(positions[startIndex]) && startIndex <= end) {\n startIndex++;\n }\n var endIndex = end;\n while (!inRange(positions[endIndex]) && endIndex >= 0) {\n endIndex--;\n }\n return positions.slice(startIndex, endIndex + 1);\n },\n getSlot: function (from, to, limit) {\n var options = this.options;\n var reverse = options.reverse;\n var justified = options.justified;\n var vertical = options.vertical;\n var ref = this.scaleOptions();\n var scale = ref.scale;\n var box = ref.box;\n var min = ref.min;\n var valueAxis = vertical ? Y : X;\n var lineStart = box[valueAxis + (reverse ? 2 : 1)];\n var slotBox = box.clone();\n var singleSlot = !defined(to);\n var start = valueOrDefault(from, 0);\n var end = valueOrDefault(to, start);\n end = Math.max(end - 1, start);\n end = Math.max(start, end);\n var p1 = lineStart + (start - min) * scale;\n var p2 = lineStart + (end + 1 - min) * scale;\n if (singleSlot && justified) {\n p2 = p1;\n }\n if (limit) {\n p1 = limitValue(p1, box[valueAxis + 1], box[valueAxis + 2]);\n p2 = limitValue(p2, box[valueAxis + 1], box[valueAxis + 2]);\n }\n slotBox[valueAxis + 1] = reverse ? p2 : p1;\n slotBox[valueAxis + 2] = reverse ? p1 : p2;\n return slotBox;\n },\n limitSlot: function (slot) {\n var vertical = this.options.vertical;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var limittedSlot = slot.clone();\n limittedSlot[valueAxis + 1] = limitValue(slot[valueAxis + 1], lineBox[valueAxis + 1], lineBox[valueAxis + 2]);\n limittedSlot[valueAxis + 2] = limitValue(slot[valueAxis + 2], lineBox[valueAxis + 1], lineBox[valueAxis + 2]);\n return limittedSlot;\n },\n slot: function (from, to, limit) {\n var min = Math.floor(this.options.min || 0);\n var start = from;\n var end = to;\n if (typeof start === 'string') {\n start = this.categoryIndex(start);\n } else if (isNumber(start)) {\n start -= min;\n }\n if (typeof end === 'string') {\n end = this.categoryIndex(end);\n } else if (isNumber(end)) {\n end -= min;\n }\n return Axis.fn.slot.call(this, start, end, limit);\n },\n pointCategoryIndex: function (point) {\n var ref = this.options;\n var reverse = ref.reverse;\n var justified = ref.justified;\n var vertical = ref.vertical;\n var valueAxis = vertical ? Y : X;\n var ref$1 = this.scaleOptions();\n var scale = ref$1.scale;\n var box = ref$1.box;\n var min = ref$1.min;\n var max = ref$1.max;\n var startValue = reverse ? max : min;\n var lineStart = box[valueAxis + 1];\n var lineEnd = box[valueAxis + 2];\n var pos = point[valueAxis];\n if (pos < lineStart || pos > lineEnd) {\n return null;\n }\n var value = startValue + (pos - lineStart) / scale;\n var diff = value % 1;\n if (justified) {\n value = Math.round(value);\n } else if (diff === 0 && value > 0) {\n value--;\n }\n return Math.floor(value);\n },\n getCategory: function (point) {\n var index = this.pointCategoryIndex(point);\n if (index === null) {\n return null;\n }\n return this.options.categories[index];\n },\n categoryIndex: function (value) {\n return this.totalIndex(value) - Math.floor(this.options.min || 0);\n },\n categoryAt: function (index, total) {\n var options = this.options;\n return (total ? options.srcCategories : options.categories)[index];\n },\n categoriesCount: function () {\n return (this.options.categories || []).length;\n },\n translateRange: function (delta) {\n var options = this.options;\n var lineBox = this.lineBox();\n var size = options.vertical ? lineBox.height() : lineBox.width();\n var range = options.categories.length;\n var scale = size / range;\n var offset = round(delta / scale, DEFAULT_PRECISION);\n return {\n min: offset,\n max: range + offset\n };\n },\n zoomRange: function (rate) {\n var rangeIndices = this.totalRangeIndices();\n var ref = this.totalRange();\n var totalMin = ref.min;\n var totalMax = ref.max;\n var min = limitValue(rangeIndices.min + rate, totalMin, totalMax);\n var max = limitValue(rangeIndices.max - rate, totalMin, totalMax);\n if (max - min > 0) {\n return {\n min: min,\n max: max\n };\n }\n },\n scaleRange: function (scale) {\n var range = this.options.categories.length;\n var delta = scale * range;\n return {\n min: -delta,\n max: range + delta\n };\n },\n labelsCount: function () {\n var labelsRange = this.labelsRange();\n return labelsRange.max - labelsRange.min;\n },\n labelsRange: function () {\n var options = this.options;\n var justified = options.justified;\n var labelOptions = options.labels;\n var ref = this.totalRangeIndices(true);\n var min = ref.min;\n var max = ref.max;\n var start = Math.floor(min);\n if (!justified) {\n min = Math.floor(min);\n max = Math.ceil(max);\n } else {\n min = Math.ceil(min);\n max = Math.floor(max);\n }\n var skip;\n if (min > labelOptions.skip) {\n skip = labelOptions.skip + labelOptions.step * Math.ceil((min - labelOptions.skip) / labelOptions.step);\n } else {\n skip = labelOptions.skip;\n }\n return {\n min: skip - start,\n max: (options.categories.length ? max + (justified ? 1 : 0) : 0) - start\n };\n },\n createAxisLabel: function (index, labelOptions) {\n var options = this.options;\n var dataItem = options.dataItems ? options.dataItems[index] : null;\n var category = valueOrDefault(options.categories[index], '');\n var text = this.axisLabelText(category, dataItem, labelOptions);\n return new AxisLabel(category, text, index, dataItem, labelOptions);\n },\n shouldRenderNote: function (value) {\n var range = this.totalRangeIndices();\n return Math.floor(range.min) <= value && value <= Math.ceil(range.max);\n },\n noteSlot: function (value) {\n var options = this.options;\n var index = value - Math.floor(options.min || 0);\n return this.getSlot(index);\n },\n arrangeNotes: function () {\n Axis.fn.arrangeNotes.call(this);\n this.hideOutOfRangeNotes();\n },\n hideOutOfRangeNotes: function () {\n var ref = this;\n var notes = ref.notes;\n var box = ref.box;\n if (notes && notes.length) {\n var valueAxis = this.options.vertical ? Y : X;\n var start = box[valueAxis + 1];\n var end = box[valueAxis + 2];\n for (var idx = 0; idx < notes.length; idx++) {\n var note = notes[idx];\n if (note.box && (end < note.box[valueAxis + 1] || note.box[valueAxis + 2] < start)) {\n note.hide();\n }\n }\n }\n },\n pan: function (delta) {\n var range = this.totalRangeIndices(true);\n var ref = this.scaleOptions();\n var scale = ref.scale;\n var offset = round(delta / scale, DEFAULT_PRECISION);\n var totalRange = this.totalRange();\n var min = range.min + offset;\n var max = range.max + offset;\n return this.limitRange(min, max, 0, totalRange.max, offset);\n },\n pointsRange: function (start, end) {\n var ref = this.options;\n var reverse = ref.reverse;\n var vertical = ref.vertical;\n var valueAxis = vertical ? Y : X;\n var range = this.totalRangeIndices(true);\n var ref$1 = this.scaleOptions();\n var scale = ref$1.scale;\n var box = ref$1.box;\n var lineStart = box[valueAxis + (reverse ? 2 : 1)];\n var diffStart = start[valueAxis] - lineStart;\n var diffEnd = end[valueAxis] - lineStart;\n var min = range.min + diffStart / scale;\n var max = range.min + diffEnd / scale;\n var rangeMin = Math.min(min, max);\n var rangeMax = Math.max(min, max);\n if (rangeMax - rangeMin >= MIN_CATEGORY_POINTS_RANGE) {\n return {\n min: rangeMin,\n max: rangeMax\n };\n }\n },\n valueRange: function () {\n return this.range();\n },\n totalIndex: function (value) {\n var options = this.options;\n var index = this._categoriesMap ? this._categoriesMap.get(value) : indexOf(value, options.srcCategories);\n return index;\n },\n currentRangeIndices: function () {\n var options = this.options;\n var min = 0;\n if (isNumber(options.min)) {\n min = Math.floor(options.min);\n }\n var max;\n if (isNumber(options.max)) {\n max = options.justified ? Math.floor(options.max) : Math.ceil(options.max) - 1;\n } else {\n max = this.totalCount() - 1;\n }\n return {\n min: min,\n max: max\n };\n },\n mapCategories: function () {\n if (!this._categoriesMap) {\n var map$$1 = this._categoriesMap = new HashMap();\n var srcCategories = this.options.srcCategories;\n for (var idx = 0; idx < srcCategories.length; idx++) {\n map$$1.set(srcCategories[idx], idx);\n }\n }\n },\n totalCount: function () {\n return Math.max(this.options.srcCategories.length, this._seriesMax || 0);\n }\n });\n setDefaultOptions(CategoryAxis, {\n type: 'category',\n vertical: false,\n majorGridLines: {\n visible: false,\n width: 1,\n color: BLACK\n },\n labels: { zIndex: 1 },\n justified: false,\n _deferLabels: true\n });\n var COORDINATE_LIMIT = 300000;\n var DateLabelFormats = {\n milliseconds: 'HH:mm:ss.fff',\n seconds: 'HH:mm:ss',\n minutes: 'HH:mm',\n hours: 'HH:mm',\n days: 'M/d',\n weeks: 'M/d',\n months: 'MMM \\'yy',\n years: 'yyyy'\n };\n var ZERO_THRESHOLD = 0.2;\n var AUTO = 'auto';\n var BASE_UNITS = [\n MILLISECONDS,\n SECONDS,\n MINUTES,\n HOURS,\n DAYS,\n WEEKS,\n MONTHS,\n YEARS\n ];\n var FIT = 'fit';\n function categoryRange(categories) {\n var range = categories._range;\n if (!range) {\n range = categories._range = sparseArrayLimits(categories);\n range.min = toDate(range.min);\n range.max = toDate(range.max);\n }\n return range;\n }\n var EmptyDateRange = Class.extend({\n init: function (options) {\n this.options = options;\n },\n displayIndices: function () {\n return {\n min: 0,\n max: 1\n };\n },\n displayRange: function () {\n return {};\n },\n total: function () {\n return {};\n },\n valueRange: function () {\n return {};\n },\n valueIndex: function () {\n return -1;\n },\n values: function () {\n return [];\n },\n totalIndex: function () {\n return -1;\n },\n valuesCount: function () {\n return 0;\n },\n totalCount: function () {\n return 0;\n },\n dateAt: function () {\n return null;\n }\n });\n var DateRange = Class.extend({\n init: function (start, end, options) {\n this.options = options;\n options.baseUnitStep = options.baseUnitStep || 1;\n var roundToBaseUnit = options.roundToBaseUnit;\n var justified = options.justified;\n this.start = addDuration(start, 0, options.baseUnit, options.weekStartDay);\n var lowerEnd = this.roundToTotalStep(end);\n var expandEnd = !justified && dateEquals(end, lowerEnd) && !options.justifyEnd;\n this.end = this.roundToTotalStep(end, !justified, expandEnd ? 1 : 0);\n var min = options.min || start;\n this.valueStart = this.roundToTotalStep(min);\n this.displayStart = roundToBaseUnit ? this.valueStart : min;\n var max = options.max;\n if (!max) {\n this.valueEnd = lowerEnd;\n this.displayEnd = roundToBaseUnit || expandEnd ? this.end : end;\n } else {\n this.valueEnd = this.roundToTotalStep(max, false, !justified && dateEquals(max, this.roundToTotalStep(max)) ? -1 : 0);\n this.displayEnd = roundToBaseUnit ? this.roundToTotalStep(max, !justified) : options.max;\n }\n if (this.valueEnd < this.valueStart) {\n this.valueEnd = this.valueStart;\n }\n if (this.displayEnd <= this.displayStart) {\n this.displayEnd = this.roundToTotalStep(this.displayStart, false, 1);\n }\n },\n displayRange: function () {\n return {\n min: this.displayStart,\n max: this.displayEnd\n };\n },\n displayIndices: function () {\n if (!this._indices) {\n var options = this.options;\n var baseUnit = options.baseUnit;\n var baseUnitStep = options.baseUnitStep;\n var minIdx = dateIndex(this.displayStart, this.valueStart, baseUnit, baseUnitStep);\n var maxIdx = dateIndex(this.displayEnd, this.valueStart, baseUnit, baseUnitStep);\n this._indices = {\n min: minIdx,\n max: maxIdx\n };\n }\n return this._indices;\n },\n total: function () {\n return {\n min: this.start,\n max: this.end\n };\n },\n totalCount: function () {\n var last$$1 = this.totalIndex(this.end);\n return last$$1 + (this.options.justified ? 1 : 0);\n },\n valueRange: function () {\n return {\n min: this.valueStart,\n max: this.valueEnd\n };\n },\n valueIndex: function (value) {\n var options = this.options;\n return Math.floor(dateIndex(value, this.valueStart, options.baseUnit, options.baseUnitStep));\n },\n totalIndex: function (value) {\n var options = this.options;\n return Math.floor(dateIndex(value, this.start, options.baseUnit, options.baseUnitStep));\n },\n dateIndex: function (value) {\n var options = this.options;\n return dateIndex(value, this.valueStart, options.baseUnit, options.baseUnitStep);\n },\n valuesCount: function () {\n var maxIdx = this.valueIndex(this.valueEnd);\n return maxIdx + 1;\n },\n values: function () {\n var values = this._values;\n if (!values) {\n var options = this.options;\n var range = this.valueRange();\n this._values = values = [];\n for (var date = range.min; date <= range.max;) {\n values.push(date);\n date = addDuration(date, options.baseUnitStep, options.baseUnit, options.weekStartDay);\n }\n }\n return values;\n },\n dateAt: function (index, total) {\n var options = this.options;\n return addDuration(total ? this.start : this.valueStart, options.baseUnitStep * index, options.baseUnit, options.weekStartDay);\n },\n roundToTotalStep: function (value, upper, next) {\n var ref = this.options;\n var baseUnit = ref.baseUnit;\n var baseUnitStep = ref.baseUnitStep;\n var weekStartDay = ref.weekStartDay;\n var start = this.start;\n var step = dateIndex(value, start, baseUnit, baseUnitStep);\n var roundedStep = upper ? Math.ceil(step) : Math.floor(step);\n if (next) {\n roundedStep += next;\n }\n return addDuration(start, roundedStep * baseUnitStep, baseUnit, weekStartDay);\n }\n });\n function autoBaseUnit(options, startUnit, startStep) {\n var categoryLimits = categoryRange(options.categories);\n var span = (options.max || categoryLimits.max) - (options.min || categoryLimits.min);\n var autoBaseUnitSteps = options.autoBaseUnitSteps;\n var maxDateGroups = options.maxDateGroups;\n var autoUnit = options.baseUnit === FIT;\n var autoUnitIx = startUnit ? BASE_UNITS.indexOf(startUnit) : 0;\n var baseUnit = autoUnit ? BASE_UNITS[autoUnitIx++] : options.baseUnit;\n var units = span / TIME_PER_UNIT[baseUnit];\n var totalUnits = units;\n var unitSteps, step, nextStep;\n while (!step || units >= maxDateGroups) {\n unitSteps = unitSteps || autoBaseUnitSteps[baseUnit].slice(0);\n do {\n nextStep = unitSteps.shift();\n } while (nextStep && startUnit === baseUnit && nextStep < startStep);\n if (nextStep) {\n step = nextStep;\n units = totalUnits / step;\n } else if (baseUnit === last(BASE_UNITS)) {\n step = Math.ceil(totalUnits / maxDateGroups);\n break;\n } else if (autoUnit) {\n baseUnit = BASE_UNITS[autoUnitIx++] || last(BASE_UNITS);\n totalUnits = span / TIME_PER_UNIT[baseUnit];\n unitSteps = null;\n } else {\n if (units > maxDateGroups) {\n step = Math.ceil(totalUnits / maxDateGroups);\n }\n break;\n }\n }\n options.baseUnitStep = step;\n options.baseUnit = baseUnit;\n }\n function defaultBaseUnit(options) {\n var categories = options.categories;\n var count = defined(categories) ? categories.length : 0;\n var minDiff = MAX_VALUE;\n var lastCategory, unit;\n for (var categoryIx = 0; categoryIx < count; categoryIx++) {\n var category = categories[categoryIx];\n if (category && lastCategory) {\n var diff = absoluteDateDiff(category, lastCategory);\n if (diff > 0) {\n minDiff = Math.min(minDiff, diff);\n if (minDiff >= TIME_PER_YEAR) {\n unit = YEARS;\n } else if (minDiff >= TIME_PER_MONTH - TIME_PER_DAY * 3) {\n unit = MONTHS;\n } else if (minDiff >= TIME_PER_WEEK) {\n unit = WEEKS;\n } else if (minDiff >= TIME_PER_DAY) {\n unit = DAYS;\n } else if (minDiff >= TIME_PER_HOUR) {\n unit = HOURS;\n } else if (minDiff >= TIME_PER_MINUTE) {\n unit = MINUTES;\n } else {\n unit = SECONDS;\n }\n }\n }\n lastCategory = category;\n }\n options.baseUnit = unit || DAYS;\n }\n function initUnit(options) {\n var baseUnit = (options.baseUnit || '').toLowerCase();\n var useDefault = baseUnit !== FIT && !inArray(baseUnit, BASE_UNITS);\n if (useDefault) {\n defaultBaseUnit(options);\n }\n if (baseUnit === FIT || options.baseUnitStep === AUTO) {\n autoBaseUnit(options);\n }\n return options;\n }\n var DateCategoryAxis = CategoryAxis.extend({\n clone: function () {\n var copy = new DateCategoryAxis($.extend({}, this.options), this.chartService);\n copy.createLabels();\n return copy;\n },\n categoriesHash: function () {\n var start = this.dataRange.total().min;\n return this.options.baseUnit + this.options.baseUnitStep + start;\n },\n initUserOptions: function (options) {\n return options;\n },\n initFields: function () {\n CategoryAxis.fn.initFields.call(this);\n var chartService = this.chartService;\n var intlService = chartService.intl;\n var options = this.options;\n var categories = options.categories || [];\n if (!categories._parsed) {\n categories = parseDates(intlService, categories);\n categories._parsed = true;\n }\n options = deepExtend({ roundToBaseUnit: true }, options, {\n categories: categories,\n min: parseDate(intlService, options.min),\n max: parseDate(intlService, options.max)\n });\n if (chartService.panning && chartService.isPannable(options.vertical ? Y : X)) {\n options.roundToBaseUnit = false;\n }\n options.userSetBaseUnit = options.userSetBaseUnit || options.baseUnit;\n options.userSetBaseUnitStep = options.userSetBaseUnitStep || options.baseUnitStep;\n this.options = options;\n options.srcCategories = categories;\n if (categories.length > 0) {\n var range = categoryRange(categories);\n var maxDivisions = options.maxDivisions;\n this.dataRange = new DateRange(range.min, range.max, initUnit(options));\n if (maxDivisions) {\n var dataRange = this.dataRange.displayRange();\n var divisionOptions = $.extend({}, options, {\n justified: true,\n roundToBaseUnit: false,\n baseUnit: 'fit',\n min: dataRange.min,\n max: dataRange.max,\n maxDateGroups: maxDivisions\n });\n var dataRangeOptions = this.dataRange.options;\n autoBaseUnit(divisionOptions, dataRangeOptions.baseUnit, dataRangeOptions.baseUnitStep);\n this.divisionRange = new DateRange(range.min, range.max, divisionOptions);\n } else {\n this.divisionRange = this.dataRange;\n }\n } else {\n options.baseUnit = options.baseUnit || DAYS;\n this.dataRange = this.divisionRange = new EmptyDateRange(options);\n }\n },\n tickIndices: function (stepSize) {\n var ref = this;\n var dataRange = ref.dataRange;\n var divisionRange = ref.divisionRange;\n var valuesCount = divisionRange.valuesCount();\n if (!this.options.maxDivisions || !valuesCount) {\n return CategoryAxis.fn.tickIndices.call(this, stepSize);\n }\n var indices = [];\n var values = divisionRange.values();\n var offset = 0;\n if (!this.options.justified) {\n values = values.concat(divisionRange.dateAt(valuesCount));\n offset = 0.5;\n }\n for (var idx = 0; idx < values.length; idx++) {\n indices.push(dataRange.dateIndex(values[idx]) + offset);\n if (stepSize !== 1 && idx >= 1) {\n var last$$1 = indices.length - 1;\n indices.splice(idx, 0, indices[last$$1 - 1] + (indices[last$$1] - indices[last$$1 - 1]) * stepSize);\n }\n }\n return indices;\n },\n shouldRenderNote: function (value) {\n var range = this.range();\n var categories = this.options.categories || [];\n return dateComparer(value, range.min) >= 0 && dateComparer(value, range.max) <= 0 && categories.length;\n },\n parseNoteValue: function (value) {\n return parseDate(this.chartService.intl, value);\n },\n noteSlot: function (value) {\n return this.getSlot(value);\n },\n translateRange: function (delta) {\n var options = this.options;\n var baseUnit = options.baseUnit;\n var weekStartDay = options.weekStartDay;\n var vertical = options.vertical;\n var lineBox = this.lineBox();\n var size = vertical ? lineBox.height() : lineBox.width();\n var range = this.range();\n var scale = size / (range.max - range.min);\n var offset = round(delta / scale, DEFAULT_PRECISION);\n if (range.min && range.max) {\n var from = addTicks(options.min || range.min, offset);\n var to = addTicks(options.max || range.max, offset);\n range = {\n min: addDuration(from, 0, baseUnit, weekStartDay),\n max: addDuration(to, 0, baseUnit, weekStartDay)\n };\n }\n return range;\n },\n scaleRange: function (delta) {\n var rounds = Math.abs(delta);\n var result = this.range();\n var from = result.min;\n var to = result.max;\n if (from && to) {\n while (rounds--) {\n var range = dateDiff(from, to);\n var step = Math.round(range * 0.1);\n if (delta < 0) {\n from = addTicks(from, step);\n to = addTicks(to, -step);\n } else {\n from = addTicks(from, -step);\n to = addTicks(to, step);\n }\n }\n result = {\n min: from,\n max: to\n };\n }\n return result;\n },\n labelsRange: function () {\n return {\n min: this.options.labels.skip,\n max: this.divisionRange.valuesCount()\n };\n },\n pan: function (delta) {\n if (this.isEmpty()) {\n return null;\n }\n var options = this.options;\n var lineBox = this.lineBox();\n var size = options.vertical ? lineBox.height() : lineBox.width();\n var ref = this.dataRange.displayRange();\n var min = ref.min;\n var max = ref.max;\n var totalLimits = this.dataRange.total();\n var scale = size / (max - min);\n var offset = round(delta / scale, DEFAULT_PRECISION) * (options.reverse ? -1 : 1);\n var from = addTicks(min, offset);\n var to = addTicks(max, offset);\n var panRange = this.limitRange(toTime(from), toTime(to), toTime(totalLimits.min), toTime(totalLimits.max), offset);\n if (panRange) {\n panRange.min = toDate(panRange.min);\n panRange.max = toDate(panRange.max);\n panRange.baseUnit = options.baseUnit;\n panRange.baseUnitStep = options.baseUnitStep || 1;\n panRange.userSetBaseUnit = options.userSetBaseUnit;\n panRange.userSetBaseUnitStep = options.userSetBaseUnitStep;\n return panRange;\n }\n },\n pointsRange: function (start, end) {\n if (this.isEmpty()) {\n return null;\n }\n var pointsRange = CategoryAxis.fn.pointsRange.call(this, start, end);\n var datesRange = this.dataRange.displayRange();\n var indicesRange = this.dataRange.displayIndices();\n var scale = dateDiff(datesRange.max, datesRange.min) / (indicesRange.max - indicesRange.min);\n var options = this.options;\n var min = addTicks(datesRange.min, pointsRange.min * scale);\n var max = addTicks(datesRange.min, pointsRange.max * scale);\n return {\n min: min,\n max: max,\n baseUnit: options.userSetBaseUnit || options.baseUnit,\n baseUnitStep: options.userSetBaseUnitStep || options.baseUnitStep\n };\n },\n zoomRange: function (delta) {\n if (this.isEmpty()) {\n return null;\n }\n var options = this.options;\n var fit = options.userSetBaseUnit === FIT;\n var totalLimits = this.dataRange.total();\n var ref = this.dataRange.displayRange();\n var rangeMin = ref.min;\n var rangeMax = ref.max;\n var ref$1 = this.dataRange.options;\n var weekStartDay = ref$1.weekStartDay;\n var baseUnit = ref$1.baseUnit;\n var baseUnitStep = ref$1.baseUnitStep;\n var min = addDuration(rangeMin, delta * baseUnitStep, baseUnit, weekStartDay);\n var max = addDuration(rangeMax, -delta * baseUnitStep, baseUnit, weekStartDay);\n if (fit) {\n var autoBaseUnitSteps = options.autoBaseUnitSteps;\n var maxDateGroups = options.maxDateGroups;\n var maxDiff = last(autoBaseUnitSteps[baseUnit]) * maxDateGroups * TIME_PER_UNIT[baseUnit];\n var rangeDiff = dateDiff(rangeMax, rangeMin);\n var diff = dateDiff(max, min);\n var baseUnitIndex = BASE_UNITS.indexOf(baseUnit);\n var autoBaseUnitStep, ticks;\n if (diff < TIME_PER_UNIT[baseUnit] && baseUnit !== MILLISECONDS) {\n baseUnit = BASE_UNITS[baseUnitIndex - 1];\n autoBaseUnitStep = last(autoBaseUnitSteps[baseUnit]);\n ticks = (rangeDiff - (maxDateGroups - 1) * autoBaseUnitStep * TIME_PER_UNIT[baseUnit]) / 2;\n min = addTicks(rangeMin, ticks);\n max = addTicks(rangeMax, -ticks);\n } else if (diff > maxDiff && baseUnit !== YEARS) {\n var stepIndex = 0;\n do {\n baseUnitIndex++;\n baseUnit = BASE_UNITS[baseUnitIndex];\n stepIndex = 0;\n ticks = 2 * TIME_PER_UNIT[baseUnit];\n do {\n autoBaseUnitStep = autoBaseUnitSteps[baseUnit][stepIndex];\n stepIndex++;\n } while (stepIndex < autoBaseUnitSteps[baseUnit].length && ticks * autoBaseUnitStep < rangeDiff);\n } while (baseUnit !== YEARS && ticks * autoBaseUnitStep < rangeDiff);\n ticks = (ticks * autoBaseUnitStep - rangeDiff) / 2;\n if (ticks > 0) {\n min = addTicks(rangeMin, -ticks);\n max = addTicks(rangeMax, ticks);\n min = addTicks(min, limitValue(max, totalLimits.min, totalLimits.max) - max);\n max = addTicks(max, limitValue(min, totalLimits.min, totalLimits.max) - min);\n }\n }\n }\n if (min < totalLimits.min) {\n min = totalLimits.min;\n }\n if (max > totalLimits.max) {\n max = totalLimits.max;\n }\n if (min && max && dateDiff(max, min) > 0) {\n return {\n min: min,\n max: max,\n baseUnit: options.userSetBaseUnit || options.baseUnit,\n baseUnitStep: options.userSetBaseUnitStep || options.baseUnitStep\n };\n }\n },\n range: function () {\n return this.dataRange.displayRange();\n },\n createAxisLabel: function (index, labelOptions) {\n var options = this.options;\n var dataItem = options.dataItems && !options.maxDivisions ? options.dataItems[index] : null;\n var date = this.divisionRange.dateAt(index);\n var unitFormat = labelOptions.dateFormats[this.divisionRange.options.baseUnit];\n labelOptions.format = labelOptions.format || unitFormat;\n var text = this.axisLabelText(date, dataItem, labelOptions);\n if (text) {\n return new AxisLabel(date, text, index, dataItem, labelOptions);\n }\n },\n categoryIndex: function (value) {\n return this.dataRange.valueIndex(value);\n },\n slot: function (from, to, limit) {\n var dateRange = this.dataRange;\n var start = from;\n var end = to;\n if (start instanceof Date) {\n start = dateRange.dateIndex(start);\n }\n if (end instanceof Date) {\n end = dateRange.dateIndex(end);\n }\n var slot = this.getSlot(start, end, limit);\n if (slot) {\n return slot.toRect();\n }\n },\n getSlot: function (a, b, limit) {\n var start = a;\n var end = b;\n if (typeof start === OBJECT) {\n start = this.categoryIndex(start);\n }\n if (typeof end === OBJECT) {\n end = this.categoryIndex(end);\n }\n return CategoryAxis.fn.getSlot.call(this, start, end, limit);\n },\n valueRange: function () {\n var options = this.options;\n var range = categoryRange(options.srcCategories);\n return {\n min: toDate(range.min),\n max: toDate(range.max)\n };\n },\n categoryAt: function (index, total) {\n return this.dataRange.dateAt(index, total);\n },\n categoriesCount: function () {\n return this.dataRange.valuesCount();\n },\n rangeIndices: function () {\n return this.dataRange.displayIndices();\n },\n labelsBetweenTicks: function () {\n return !this.divisionRange.options.justified;\n },\n prepareUserOptions: function () {\n if (this.isEmpty()) {\n return;\n }\n this.options.categories = this.dataRange.values();\n },\n getCategory: function (point) {\n var index = this.pointCategoryIndex(point);\n if (index === null) {\n return null;\n }\n return this.dataRange.dateAt(index);\n },\n totalIndex: function (value) {\n return this.dataRange.totalIndex(value);\n },\n currentRangeIndices: function () {\n var range = this.dataRange.valueRange();\n return {\n min: this.dataRange.totalIndex(range.min),\n max: this.dataRange.totalIndex(range.max)\n };\n },\n totalRange: function () {\n return this.dataRange.total();\n },\n totalCount: function () {\n return this.dataRange.totalCount();\n },\n isEmpty: function () {\n return !this.options.srcCategories.length;\n },\n roundedRange: function () {\n if (this.options.roundToBaseUnit !== false || this.isEmpty()) {\n return this.range();\n }\n var options = this.options;\n var datesRange = categoryRange(options.srcCategories);\n var dateRange = new DateRange(datesRange.min, datesRange.max, $.extend({}, options, {\n justified: false,\n roundToBaseUnit: true,\n justifyEnd: options.justified\n }));\n return dateRange.displayRange();\n }\n });\n setDefaultOptions(DateCategoryAxis, {\n type: DATE,\n labels: { dateFormats: DateLabelFormats },\n autoBaseUnitSteps: {\n milliseconds: [\n 1,\n 10,\n 100\n ],\n seconds: [\n 1,\n 2,\n 5,\n 15,\n 30\n ],\n minutes: [\n 1,\n 2,\n 5,\n 15,\n 30\n ],\n hours: [\n 1,\n 2,\n 3\n ],\n days: [\n 1,\n 2,\n 3\n ],\n weeks: [\n 1,\n 2\n ],\n months: [\n 1,\n 2,\n 3,\n 6\n ],\n years: [\n 1,\n 2,\n 3,\n 5,\n 10,\n 25,\n 50\n ]\n },\n maxDateGroups: 10\n });\n function autoAxisMin(min, max, narrow) {\n if (!min && !max) {\n return 0;\n }\n var axisMin;\n if (min >= 0 && max >= 0) {\n var minValue = min === max ? 0 : min;\n var diff = (max - minValue) / max;\n if (narrow === false || !narrow && diff > ZERO_THRESHOLD) {\n return 0;\n }\n axisMin = Math.max(0, minValue - (max - minValue) / 2);\n } else {\n axisMin = min;\n }\n return axisMin;\n }\n function autoAxisMax(min, max, narrow) {\n if (!min && !max) {\n return 1;\n }\n var axisMax;\n if (min <= 0 && max <= 0) {\n var maxValue = min === max ? 0 : max;\n var diff = Math.abs((maxValue - min) / maxValue);\n if (narrow === false || !narrow && diff > ZERO_THRESHOLD) {\n return 0;\n }\n axisMax = Math.min(0, maxValue - (min - maxValue) / 2);\n } else {\n axisMax = max;\n }\n return axisMax;\n }\n function floor(value, step) {\n return round(Math.floor(value / step) * step, DEFAULT_PRECISION);\n }\n function ceil(value, step) {\n return round(Math.ceil(value / step) * step, DEFAULT_PRECISION);\n }\n function limitCoordinate(value) {\n return Math.max(Math.min(value, COORDINATE_LIMIT), -COORDINATE_LIMIT);\n }\n var MIN_VALUE_RANGE = Math.pow(10, -DEFAULT_PRECISION + 1);\n var NumericAxis = Axis.extend({\n init: function (seriesMin, seriesMax, options, chartService) {\n Axis.fn.init.call(this, $.extend({}, options, {\n seriesMin: seriesMin,\n seriesMax: seriesMax\n }), chartService);\n },\n initUserOptions: function (options) {\n var autoOptions = autoAxisOptions(options.seriesMin, options.seriesMax, options);\n this.totalOptions = totalAxisOptions(autoOptions, options);\n return axisOptions(autoOptions, options);\n },\n initFields: function () {\n this.totalMin = this.totalOptions.min;\n this.totalMax = this.totalOptions.max;\n this.totalMajorUnit = this.totalOptions.majorUnit;\n this.seriesMin = this.options.seriesMin;\n this.seriesMax = this.options.seriesMax;\n },\n clone: function () {\n return new NumericAxis(this.seriesMin, this.seriesMax, $.extend({}, this.options), this.chartService);\n },\n startValue: function () {\n return 0;\n },\n range: function () {\n var options = this.options;\n return {\n min: options.min,\n max: options.max\n };\n },\n getDivisions: function (stepValue) {\n if (stepValue === 0) {\n return 1;\n }\n var options = this.options;\n var range = options.max - options.min;\n return Math.floor(round(range / stepValue, COORD_PRECISION)) + 1;\n },\n getTickPositions: function (unit, skipUnit) {\n var options = this.options;\n var vertical = options.vertical;\n var reverse = options.reverse;\n var lineBox = this.lineBox();\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var range = options.max - options.min;\n var scale = lineSize / range;\n var step = unit * scale;\n var divisions = this.getDivisions(unit);\n var dir = (vertical ? -1 : 1) * (reverse ? -1 : 1);\n var startEdge = dir === 1 ? 1 : 2;\n var positions = [];\n var pos = lineBox[(vertical ? Y : X) + startEdge];\n var skipStep = 0;\n if (skipUnit) {\n skipStep = skipUnit / unit;\n }\n for (var idx = 0; idx < divisions; idx++) {\n if (idx % skipStep !== 0) {\n positions.push(round(pos, COORD_PRECISION));\n }\n pos = pos + step * dir;\n }\n return positions;\n },\n getMajorTickPositions: function () {\n return this.getTickPositions(this.options.majorUnit);\n },\n getMinorTickPositions: function () {\n return this.getTickPositions(this.options.minorUnit);\n },\n getSlot: function (a, b, limit) {\n if (limit === void 0) {\n limit = false;\n }\n var options = this.options;\n var vertical = options.vertical;\n var reverse = options.reverse;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var lineStart = lineBox[valueAxis + (reverse ? 2 : 1)];\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var dir = reverse ? -1 : 1;\n var step = dir * (lineSize / (options.max - options.min));\n var slotBox = new Box(lineBox.x1, lineBox.y1, lineBox.x1, lineBox.y1);\n var start = a;\n var end = b;\n if (!defined(start)) {\n start = end || 0;\n }\n if (!defined(end)) {\n end = start || 0;\n }\n if (limit) {\n start = Math.max(Math.min(start, options.max), options.min);\n end = Math.max(Math.min(end, options.max), options.min);\n }\n var p1, p2;\n if (vertical) {\n p1 = options.max - Math.max(start, end);\n p2 = options.max - Math.min(start, end);\n } else {\n p1 = Math.min(start, end) - options.min;\n p2 = Math.max(start, end) - options.min;\n }\n slotBox[valueAxis + 1] = limitCoordinate(lineStart + step * (reverse ? p2 : p1));\n slotBox[valueAxis + 2] = limitCoordinate(lineStart + step * (reverse ? p1 : p2));\n return slotBox;\n },\n getValue: function (point) {\n var options = this.options;\n var vertical = options.vertical;\n var reverse = options.reverse;\n var max = Number(options.max);\n var min = Number(options.min);\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var lineStart = lineBox[valueAxis + (reverse ? 2 : 1)];\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var dir = reverse ? -1 : 1;\n var offset = dir * (point[valueAxis] - lineStart);\n var step = (max - min) / lineSize;\n var valueOffset = offset * step;\n if (offset < 0 || offset > lineSize) {\n return null;\n }\n var value = vertical ? max - valueOffset : min + valueOffset;\n return round(value, DEFAULT_PRECISION);\n },\n translateRange: function (delta) {\n var options = this.options;\n var vertical = options.vertical;\n var reverse = options.reverse;\n var max = options.max;\n var min = options.min;\n var lineBox = this.lineBox();\n var size = vertical ? lineBox.height() : lineBox.width();\n var range = max - min;\n var scale = size / range;\n var offset = round(delta / scale, DEFAULT_PRECISION);\n if ((vertical || reverse) && !(vertical && reverse)) {\n offset = -offset;\n }\n return {\n min: min + offset,\n max: max + offset,\n offset: offset\n };\n },\n scaleRange: function (delta) {\n var options = this.options;\n var offset = -delta * options.majorUnit;\n return {\n min: options.min - offset,\n max: options.max + offset\n };\n },\n labelsCount: function () {\n return this.getDivisions(this.options.majorUnit);\n },\n createAxisLabel: function (index, labelOptions) {\n var options = this.options;\n var value = round(options.min + index * options.majorUnit, DEFAULT_PRECISION);\n var text = this.axisLabelText(value, null, labelOptions);\n return new AxisLabel(value, text, index, null, labelOptions);\n },\n shouldRenderNote: function (value) {\n var range = this.range();\n return range.min <= value && value <= range.max;\n },\n pan: function (delta) {\n var range = this.translateRange(delta);\n return this.limitRange(range.min, range.max, this.totalMin, this.totalMax, range.offset);\n },\n pointsRange: function (start, end) {\n var startValue = this.getValue(start);\n var endValue = this.getValue(end);\n var min = Math.min(startValue, endValue);\n var max = Math.max(startValue, endValue);\n if (this.isValidRange(min, max)) {\n return {\n min: min,\n max: max\n };\n }\n },\n zoomRange: function (delta) {\n var ref = this;\n var totalMin = ref.totalMin;\n var totalMax = ref.totalMax;\n var newRange = this.scaleRange(delta);\n var min = limitValue(newRange.min, totalMin, totalMax);\n var max = limitValue(newRange.max, totalMin, totalMax);\n if (this.isValidRange(min, max)) {\n return {\n min: min,\n max: max\n };\n }\n },\n isValidRange: function (min, max) {\n return max - min > MIN_VALUE_RANGE;\n }\n });\n function autoAxisOptions(seriesMin, seriesMax, options) {\n var narrowRange = options.narrowRange;\n var autoMin = autoAxisMin(seriesMin, seriesMax, narrowRange);\n var autoMax = autoAxisMax(seriesMin, seriesMax, narrowRange);\n var majorUnit = autoMajorUnit(autoMin, autoMax);\n var autoOptions = { majorUnit: majorUnit };\n if (options.roundToMajorUnit !== false) {\n if (autoMin < 0 && remainderClose(autoMin, majorUnit, 1 / 3)) {\n autoMin -= majorUnit;\n }\n if (autoMax > 0 && remainderClose(autoMax, majorUnit, 1 / 3)) {\n autoMax += majorUnit;\n }\n }\n autoOptions.min = floor(autoMin, majorUnit);\n autoOptions.max = ceil(autoMax, majorUnit);\n return autoOptions;\n }\n function totalAxisOptions(autoOptions, options) {\n return {\n min: defined(options.min) ? Math.min(autoOptions.min, options.min) : autoOptions.min,\n max: defined(options.max) ? Math.max(autoOptions.max, options.max) : autoOptions.max,\n majorUnit: autoOptions.majorUnit\n };\n }\n function clearNullValues(options, fields) {\n for (var idx = 0; idx < fields.length; idx++) {\n var field = fields[idx];\n if (options[field] === null) {\n options[field] = undefined;\n }\n }\n }\n function axisOptions(autoOptions, userOptions) {\n var options = userOptions;\n var userSetMin, userSetMax;\n if (userOptions) {\n clearNullValues(userOptions, [\n 'min',\n 'max'\n ]);\n userSetMin = defined(userOptions.min);\n userSetMax = defined(userOptions.max);\n var userSetLimits = userSetMin || userSetMax;\n if (userSetLimits) {\n if (userOptions.min === userOptions.max) {\n if (userOptions.min > 0) {\n userOptions.min = 0;\n } else {\n userOptions.max = 1;\n }\n }\n }\n if (userOptions.majorUnit) {\n autoOptions.min = floor(autoOptions.min, userOptions.majorUnit);\n autoOptions.max = ceil(autoOptions.max, userOptions.majorUnit);\n } else if (userSetLimits) {\n options = deepExtend(autoOptions, userOptions);\n autoOptions.majorUnit = autoMajorUnit(options.min, options.max);\n }\n }\n autoOptions.minorUnit = (options.majorUnit || autoOptions.majorUnit) / 5;\n var result = deepExtend(autoOptions, options);\n if (result.min >= result.max) {\n if (userSetMin && !userSetMax) {\n result.max = result.min + result.majorUnit;\n } else if (!userSetMin && userSetMax) {\n result.min = result.max - result.majorUnit;\n }\n }\n return result;\n }\n function remainderClose(value, divisor, ratio) {\n var remainder = round(Math.abs(value % divisor), DEFAULT_PRECISION);\n var threshold = divisor * (1 - ratio);\n return remainder === 0 || remainder > threshold;\n }\n setDefaultOptions(NumericAxis, {\n type: 'numeric',\n min: 0,\n max: 1,\n vertical: true,\n majorGridLines: {\n visible: true,\n width: 1,\n color: BLACK\n },\n labels: { format: '#.####################' },\n zIndex: 1\n });\n var DateValueAxis = Axis.extend({\n init: function (seriesMin, seriesMax, axisOptions, chartService) {\n var min = toDate(seriesMin);\n var max = toDate(seriesMax);\n var intlService = chartService.intl;\n var options = axisOptions || {};\n options = deepExtend(options || {}, {\n min: parseDate(intlService, options.min),\n max: parseDate(intlService, options.max),\n axisCrossingValue: parseDates(intlService, options.axisCrossingValues || options.axisCrossingValue)\n });\n options = applyDefaults(min, max, options);\n Axis.fn.init.call(this, options, chartService);\n this.intlService = intlService;\n this.seriesMin = min;\n this.seriesMax = max;\n this.totalMin = toTime(floorDate(toTime(min) - 1, options.baseUnit));\n this.totalMax = toTime(ceilDate(toTime(max) + 1, options.baseUnit));\n },\n clone: function () {\n return new DateValueAxis(this.seriesMin, this.seriesMax, $.extend({}, this.options), this.chartService);\n },\n range: function () {\n var options = this.options;\n return {\n min: options.min,\n max: options.max\n };\n },\n getDivisions: function (stepValue) {\n var options = this.options;\n return Math.floor(duration(options.min, options.max, options.baseUnit) / stepValue + 1);\n },\n getTickPositions: function (step) {\n var options = this.options;\n var vertical = options.vertical;\n var lineBox = this.lineBox();\n var dir = (vertical ? -1 : 1) * (options.reverse ? -1 : 1);\n var startEdge = dir === 1 ? 1 : 2;\n var start = lineBox[(vertical ? Y : X) + startEdge];\n var divisions = this.getDivisions(step);\n var timeRange = dateDiff(options.max, options.min);\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var scale = lineSize / timeRange;\n var positions = [start];\n for (var i = 1; i < divisions; i++) {\n var date = addDuration(options.min, i * step, options.baseUnit);\n var pos = start + dateDiff(date, options.min) * scale * dir;\n positions.push(round(pos, COORD_PRECISION));\n }\n return positions;\n },\n getMajorTickPositions: function () {\n return this.getTickPositions(this.options.majorUnit);\n },\n getMinorTickPositions: function () {\n return this.getTickPositions(this.options.minorUnit);\n },\n getSlot: function (a, b, limit) {\n return NumericAxis.prototype.getSlot.call(this, parseDate(this.intlService, a), parseDate(this.intlService, b), limit);\n },\n getValue: function (point) {\n var value = NumericAxis.prototype.getValue.call(this, point);\n return value !== null ? toDate(value) : null;\n },\n labelsCount: function () {\n return this.getDivisions(this.options.majorUnit);\n },\n createAxisLabel: function (index, labelOptions) {\n var options = this.options;\n var offset = index * options.majorUnit;\n var date = options.min;\n if (offset > 0) {\n date = addDuration(date, offset, options.baseUnit);\n }\n var unitFormat = labelOptions.dateFormats[options.baseUnit];\n labelOptions.format = labelOptions.format || unitFormat;\n var text = this.axisLabelText(date, null, labelOptions);\n return new AxisLabel(date, text, index, null, labelOptions);\n },\n translateRange: function (delta, exact) {\n var options = this.options;\n var baseUnit = options.baseUnit;\n var weekStartDay = options.weekStartDay;\n var lineBox = this.lineBox();\n var size = options.vertical ? lineBox.height() : lineBox.width();\n var range = this.range();\n var scale = size / dateDiff(range.max, range.min);\n var offset = round(delta / scale, DEFAULT_PRECISION) * (options.reverse ? -1 : 1);\n var from = addTicks(options.min, offset);\n var to = addTicks(options.max, offset);\n if (!exact) {\n from = addDuration(from, 0, baseUnit, weekStartDay);\n to = addDuration(to, 0, baseUnit, weekStartDay);\n }\n return {\n min: from,\n max: to,\n offset: offset\n };\n },\n scaleRange: function (delta) {\n var ref = this.options;\n var from = ref.min;\n var to = ref.max;\n var rounds = Math.abs(delta);\n while (rounds--) {\n var range = dateDiff(from, to);\n var step = Math.round(range * 0.1);\n if (delta < 0) {\n from = addTicks(from, step);\n to = addTicks(to, -step);\n } else {\n from = addTicks(from, -step);\n to = addTicks(to, step);\n }\n }\n return {\n min: from,\n max: to\n };\n },\n shouldRenderNote: function (value) {\n var range = this.range();\n return dateComparer(value, range.min) >= 0 && dateComparer(value, range.max) <= 0;\n },\n pan: function (delta) {\n var range = this.translateRange(delta, true);\n var limittedRange = this.limitRange(toTime(range.min), toTime(range.max), this.totalMin, this.totalMax, range.offset);\n if (limittedRange) {\n return {\n min: toDate(limittedRange.min),\n max: toDate(limittedRange.max)\n };\n }\n },\n pointsRange: function (start, end) {\n var startValue = this.getValue(start);\n var endValue = this.getValue(end);\n var min = Math.min(startValue, endValue);\n var max = Math.max(startValue, endValue);\n return {\n min: toDate(min),\n max: toDate(max)\n };\n },\n zoomRange: function (delta) {\n var range = this.scaleRange(delta);\n var min = toDate(limitValue(toTime(range.min), this.totalMin, this.totalMax));\n var max = toDate(limitValue(toTime(range.max), this.totalMin, this.totalMax));\n return {\n min: min,\n max: max\n };\n }\n });\n function timeUnits(delta) {\n var unit = HOURS;\n if (delta >= TIME_PER_YEAR) {\n unit = YEARS;\n } else if (delta >= TIME_PER_MONTH) {\n unit = MONTHS;\n } else if (delta >= TIME_PER_WEEK) {\n unit = WEEKS;\n } else if (delta >= TIME_PER_DAY) {\n unit = DAYS;\n }\n return unit;\n }\n function applyDefaults(seriesMin, seriesMax, options) {\n var min = options.min || seriesMin;\n var max = options.max || seriesMax;\n var baseUnit = options.baseUnit || (max && min ? timeUnits(absoluteDateDiff(max, min)) : HOURS);\n var baseUnitTime = TIME_PER_UNIT[baseUnit];\n var autoMin = floorDate(toTime(min) - 1, baseUnit) || toDate(max);\n var autoMax = ceilDate(toTime(max) + 1, baseUnit);\n var userMajorUnit = options.majorUnit ? options.majorUnit : undefined;\n var majorUnit = userMajorUnit || ceil(autoMajorUnit(autoMin.getTime(), autoMax.getTime()), baseUnitTime) / baseUnitTime;\n var actualUnits = duration(autoMin, autoMax, baseUnit);\n var totalUnits = ceil(actualUnits, majorUnit);\n var unitsToAdd = totalUnits - actualUnits;\n var head = Math.floor(unitsToAdd / 2);\n var tail = unitsToAdd - head;\n if (!options.baseUnit) {\n delete options.baseUnit;\n }\n options.baseUnit = options.baseUnit || baseUnit;\n options.min = options.min || addDuration(autoMin, -head, baseUnit);\n options.max = options.max || addDuration(autoMax, tail, baseUnit);\n options.minorUnit = options.minorUnit || majorUnit / 5;\n options.majorUnit = majorUnit;\n return options;\n }\n setDefaultOptions(DateValueAxis, {\n type: DATE,\n majorGridLines: {\n visible: true,\n width: 1,\n color: BLACK\n },\n labels: { dateFormats: DateLabelFormats }\n });\n var DEFAULT_MAJOR_UNIT = 10;\n var LogarithmicAxis = Axis.extend({\n init: function (seriesMin, seriesMax, options, chartService) {\n var axisOptions = deepExtend({\n majorUnit: DEFAULT_MAJOR_UNIT,\n min: seriesMin,\n max: seriesMax\n }, options);\n var base = axisOptions.majorUnit;\n var autoMax = autoAxisMax$1(seriesMax, base);\n var autoMin = autoAxisMin$1(seriesMin, seriesMax, axisOptions);\n var range = initRange(autoMin, autoMax, axisOptions, options);\n axisOptions.max = range.max;\n axisOptions.min = range.min;\n axisOptions.minorUnit = options.minorUnit || round(base - 1, DEFAULT_PRECISION);\n Axis.fn.init.call(this, axisOptions, chartService);\n this.totalMin = defined(options.min) ? Math.min(autoMin, options.min) : autoMin;\n this.totalMax = defined(options.max) ? Math.max(autoMax, options.max) : autoMax;\n this.logMin = round(log(range.min, base), DEFAULT_PRECISION);\n this.logMax = round(log(range.max, base), DEFAULT_PRECISION);\n this.seriesMin = seriesMin;\n this.seriesMax = seriesMax;\n this.createLabels();\n },\n clone: function () {\n return new LogarithmicAxis(this.seriesMin, this.seriesMax, $.extend({}, this.options), this.chartService);\n },\n startValue: function () {\n return this.options.min;\n },\n getSlot: function (a, b, limit) {\n var ref = this;\n var options = ref.options;\n var logMin = ref.logMin;\n var logMax = ref.logMax;\n var reverse = options.reverse;\n var vertical = options.vertical;\n var base = options.majorUnit;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var lineStart = lineBox[valueAxis + (reverse ? 2 : 1)];\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var dir = reverse ? -1 : 1;\n var step = dir * (lineSize / (logMax - logMin));\n var slotBox = new Box(lineBox.x1, lineBox.y1, lineBox.x1, lineBox.y1);\n var start = a;\n var end = b;\n if (!defined(start)) {\n start = end || 1;\n }\n if (!defined(end)) {\n end = start || 1;\n }\n if (start <= 0 || end <= 0) {\n return null;\n }\n if (limit) {\n start = Math.max(Math.min(start, options.max), options.min);\n end = Math.max(Math.min(end, options.max), options.min);\n }\n start = log(start, base);\n end = log(end, base);\n var p1, p2;\n if (vertical) {\n p1 = logMax - Math.max(start, end);\n p2 = logMax - Math.min(start, end);\n } else {\n p1 = Math.min(start, end) - logMin;\n p2 = Math.max(start, end) - logMin;\n }\n slotBox[valueAxis + 1] = limitCoordinate(lineStart + step * (reverse ? p2 : p1));\n slotBox[valueAxis + 2] = limitCoordinate(lineStart + step * (reverse ? p1 : p2));\n return slotBox;\n },\n getValue: function (point) {\n var ref = this;\n var options = ref.options;\n var logMin = ref.logMin;\n var logMax = ref.logMax;\n var reverse = options.reverse;\n var vertical = options.vertical;\n var base = options.majorUnit;\n var lineBox = this.lineBox();\n var dir = vertical === reverse ? 1 : -1;\n var startEdge = dir === 1 ? 1 : 2;\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var step = (logMax - logMin) / lineSize;\n var valueAxis = vertical ? Y : X;\n var lineStart = lineBox[valueAxis + startEdge];\n var offset = dir * (point[valueAxis] - lineStart);\n var valueOffset = offset * step;\n if (offset < 0 || offset > lineSize) {\n return null;\n }\n var value = logMin + valueOffset;\n return round(Math.pow(base, value), DEFAULT_PRECISION);\n },\n range: function () {\n var options = this.options;\n return {\n min: options.min,\n max: options.max\n };\n },\n scaleRange: function (delta) {\n var base = this.options.majorUnit;\n var offset = -delta;\n return {\n min: Math.pow(base, this.logMin - offset),\n max: Math.pow(base, this.logMax + offset)\n };\n },\n translateRange: function (delta) {\n var ref = this;\n var options = ref.options;\n var logMin = ref.logMin;\n var logMax = ref.logMax;\n var reverse = options.reverse;\n var vertical = options.vertical;\n var base = options.majorUnit;\n var lineBox = this.lineBox();\n var size = vertical ? lineBox.height() : lineBox.width();\n var scale = size / (logMax - logMin);\n var offset = round(delta / scale, DEFAULT_PRECISION);\n if ((vertical || reverse) && !(vertical && reverse)) {\n offset = -offset;\n }\n return {\n min: Math.pow(base, logMin + offset),\n max: Math.pow(base, logMax + offset),\n offset: offset\n };\n },\n labelsCount: function () {\n var floorMax = Math.floor(this.logMax);\n var count = Math.floor(floorMax - this.logMin) + 1;\n return count;\n },\n getMajorTickPositions: function () {\n var ticks = [];\n this.traverseMajorTicksPositions(function (position) {\n ticks.push(position);\n }, {\n step: 1,\n skip: 0\n });\n return ticks;\n },\n createTicks: function (lineGroup) {\n var options = this.options;\n var majorTicks = options.majorTicks;\n var minorTicks = options.minorTicks;\n var vertical = options.vertical;\n var mirror = options.labels.mirror;\n var lineBox = this.lineBox();\n var ticks = [];\n var tickLineOptions = { vertical: vertical };\n function render(tickPosition, tickOptions) {\n tickLineOptions.tickX = mirror ? lineBox.x2 : lineBox.x2 - tickOptions.size;\n tickLineOptions.tickY = mirror ? lineBox.y1 - tickOptions.size : lineBox.y1;\n tickLineOptions.position = tickPosition;\n lineGroup.append(createAxisTick(tickLineOptions, tickOptions));\n }\n if (majorTicks.visible) {\n this.traverseMajorTicksPositions(render, majorTicks);\n }\n if (minorTicks.visible) {\n this.traverseMinorTicksPositions(render, minorTicks);\n }\n return ticks;\n },\n createGridLines: function (altAxis) {\n var options = this.options;\n var minorGridLines = options.minorGridLines;\n var majorGridLines = options.majorGridLines;\n var vertical = options.vertical;\n var lineBox = altAxis.lineBox();\n var lineOptions = {\n lineStart: lineBox[vertical ? 'x1' : 'y1'],\n lineEnd: lineBox[vertical ? 'x2' : 'y2'],\n vertical: vertical\n };\n var majorTicks = [];\n var container = this.gridLinesVisual();\n function render(tickPosition, gridLine) {\n if (!inArray(tickPosition, majorTicks)) {\n lineOptions.position = tickPosition;\n container.append(createAxisGridLine(lineOptions, gridLine));\n majorTicks.push(tickPosition);\n }\n }\n if (majorGridLines.visible) {\n this.traverseMajorTicksPositions(render, majorGridLines);\n }\n if (minorGridLines.visible) {\n this.traverseMinorTicksPositions(render, minorGridLines);\n }\n return container.children;\n },\n traverseMajorTicksPositions: function (callback, tickOptions) {\n var ref = this._lineOptions();\n var lineStart = ref.lineStart;\n var step = ref.step;\n var ref$1 = this;\n var logMin = ref$1.logMin;\n var logMax = ref$1.logMax;\n for (var power = Math.ceil(logMin) + tickOptions.skip; power <= logMax; power += tickOptions.step) {\n var position = round(lineStart + step * (power - logMin), DEFAULT_PRECISION);\n callback(position, tickOptions);\n }\n },\n traverseMinorTicksPositions: function (callback, tickOptions) {\n var this$1 = this;\n var ref = this.options;\n var min = ref.min;\n var max = ref.max;\n var minorUnit = ref.minorUnit;\n var base = ref.majorUnit;\n var ref$1 = this._lineOptions();\n var lineStart = ref$1.lineStart;\n var step = ref$1.step;\n var ref$2 = this;\n var logMin = ref$2.logMin;\n var logMax = ref$2.logMax;\n var start = Math.floor(logMin);\n for (var power = start; power < logMax; power++) {\n var minorOptions = this$1._minorIntervalOptions(power);\n for (var idx = tickOptions.skip; idx < minorUnit; idx += tickOptions.step) {\n var value = minorOptions.value + idx * minorOptions.minorStep;\n if (value > max) {\n break;\n }\n if (value >= min) {\n var position = round(lineStart + step * (log(value, base) - logMin), DEFAULT_PRECISION);\n callback(position, tickOptions);\n }\n }\n }\n },\n createAxisLabel: function (index, labelOptions) {\n var power = Math.ceil(this.logMin + index);\n var value = Math.pow(this.options.majorUnit, power);\n var text = this.axisLabelText(value, null, labelOptions);\n return new AxisLabel(value, text, index, null, labelOptions);\n },\n shouldRenderNote: function (value) {\n var range = this.range();\n return range.min <= value && value <= range.max;\n },\n pan: function (delta) {\n var range = this.translateRange(delta);\n return this.limitRange(range.min, range.max, this.totalMin, this.totalMax, range.offset);\n },\n pointsRange: function (start, end) {\n var startValue = this.getValue(start);\n var endValue = this.getValue(end);\n var min = Math.min(startValue, endValue);\n var max = Math.max(startValue, endValue);\n return {\n min: min,\n max: max\n };\n },\n zoomRange: function (delta) {\n var ref = this;\n var options = ref.options;\n var totalMin = ref.totalMin;\n var totalMax = ref.totalMax;\n var newRange = this.scaleRange(delta);\n var min = limitValue(newRange.min, totalMin, totalMax);\n var max = limitValue(newRange.max, totalMin, totalMax);\n var base = options.majorUnit;\n var acceptOptionsRange = max > min && options.min && options.max && round(log(options.max, base) - log(options.min, base), DEFAULT_PRECISION) < 1;\n var acceptNewRange = !(options.min === totalMin && options.max === totalMax) && round(log(max, base) - log(min, base), DEFAULT_PRECISION) >= 1;\n if (acceptOptionsRange || acceptNewRange) {\n return {\n min: min,\n max: max\n };\n }\n },\n _minorIntervalOptions: function (power) {\n var ref = this.options;\n var minorUnit = ref.minorUnit;\n var base = ref.majorUnit;\n var value = Math.pow(base, power);\n var nextValue = Math.pow(base, power + 1);\n var difference = nextValue - value;\n var minorStep = difference / minorUnit;\n return {\n value: value,\n minorStep: minorStep\n };\n },\n _lineOptions: function () {\n var ref = this.options;\n var reverse = ref.reverse;\n var vertical = ref.vertical;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var dir = vertical === reverse ? 1 : -1;\n var startEdge = dir === 1 ? 1 : 2;\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var step = dir * (lineSize / (this.logMax - this.logMin));\n var lineStart = lineBox[valueAxis + startEdge];\n return {\n step: step,\n lineStart: lineStart,\n lineBox: lineBox\n };\n }\n });\n function initRange(autoMin, autoMax, axisOptions, options) {\n var min = axisOptions.min;\n var max = axisOptions.max;\n if (defined(axisOptions.axisCrossingValue) && axisOptions.axisCrossingValue <= 0) {\n throwNegativeValuesError();\n }\n if (!defined(options.max)) {\n max = autoMax;\n } else if (options.max <= 0) {\n throwNegativeValuesError();\n }\n if (!defined(options.min)) {\n min = autoMin;\n } else if (options.min <= 0) {\n throwNegativeValuesError();\n }\n return {\n min: min,\n max: max\n };\n }\n function autoAxisMin$1(min, max, options) {\n var base = options.majorUnit;\n var autoMin = min;\n if (min <= 0) {\n autoMin = max <= 1 ? Math.pow(base, -2) : 1;\n } else if (!options.narrowRange) {\n autoMin = Math.pow(base, Math.floor(log(min, base)));\n }\n return autoMin;\n }\n function autoAxisMax$1(max, base) {\n var logMaxRemainder = round(log(max, base), DEFAULT_PRECISION) % 1;\n var autoMax;\n if (max <= 0) {\n autoMax = base;\n } else if (logMaxRemainder !== 0 && (logMaxRemainder < 0.3 || logMaxRemainder > 0.9)) {\n autoMax = Math.pow(base, log(max, base) + 0.2);\n } else {\n autoMax = Math.pow(base, Math.ceil(log(max, base)));\n }\n return autoMax;\n }\n function throwNegativeValuesError() {\n throw new Error('Non positive values cannot be used for a logarithmic axis');\n }\n function log(y, x) {\n return Math.log(y) / Math.log(x);\n }\n setDefaultOptions(LogarithmicAxis, {\n type: 'log',\n majorUnit: DEFAULT_MAJOR_UNIT,\n minorUnit: 1,\n axisCrossingValue: 1,\n vertical: true,\n majorGridLines: {\n visible: true,\n width: 1,\n color: BLACK\n },\n zIndex: 1,\n _deferLabels: true\n });\n var GridLinesMixin = {\n createGridLines: function (altAxis) {\n var options = this.options;\n var radius = Math.abs(this.box.center().y - altAxis.lineBox().y1);\n var gridLines = [];\n var skipMajor = false;\n var majorAngles, minorAngles;\n if (options.majorGridLines.visible) {\n majorAngles = this.majorGridLineAngles(altAxis);\n skipMajor = true;\n gridLines = this.renderMajorGridLines(majorAngles, radius, options.majorGridLines);\n }\n if (options.minorGridLines.visible) {\n minorAngles = this.minorGridLineAngles(altAxis, skipMajor);\n append(gridLines, this.renderMinorGridLines(minorAngles, radius, options.minorGridLines, altAxis, skipMajor));\n }\n return gridLines;\n },\n renderMajorGridLines: function (angles, radius, options) {\n return this.renderGridLines(angles, radius, options);\n },\n renderMinorGridLines: function (angles, radius, options, altAxis, skipMajor) {\n var radiusCallback = this.radiusCallback && this.radiusCallback(radius, altAxis, skipMajor);\n return this.renderGridLines(angles, radius, options, radiusCallback);\n },\n renderGridLines: function (angles, radius, options, radiusCallback) {\n var style = {\n stroke: {\n width: options.width,\n color: options.color,\n dashType: options.dashType\n }\n };\n var center = this.box.center();\n var circle = new Circle([\n center.x,\n center.y\n ], radius);\n var container = this.gridLinesVisual();\n for (var i = 0; i < angles.length; i++) {\n var line = new Path(style);\n if (radiusCallback) {\n circle.radius = radiusCallback(angles[i]);\n }\n line.moveTo(circle.center).lineTo(circle.pointAt(angles[i] + 180));\n container.append(line);\n }\n return container.children;\n },\n gridLineAngles: function (altAxis, size, skip, step, skipAngles) {\n var this$1 = this;\n var divs = this.intervals(size, skip, step, skipAngles);\n var options = altAxis.options;\n var altAxisVisible = options.visible && (options.line || {}).visible !== false;\n return map(divs, function (d) {\n var alpha = this$1.intervalAngle(d);\n if (!altAxisVisible || alpha !== 90) {\n return alpha;\n }\n });\n }\n };\n var RadarCategoryAxis = CategoryAxis.extend({\n range: function () {\n return {\n min: 0,\n max: this.options.categories.length\n };\n },\n reflow: function (box) {\n this.box = box;\n this.reflowLabels();\n },\n lineBox: function () {\n return this.box;\n },\n reflowLabels: function () {\n var this$1 = this;\n var ref = this;\n var labels = ref.labels;\n var labelOptions = ref.options.labels;\n var skip = labelOptions.skip || 0;\n var step = labelOptions.step || 1;\n var measureBox = new Box();\n for (var i = 0; i < labels.length; i++) {\n labels[i].reflow(measureBox);\n var labelBox = labels[i].box;\n labels[i].reflow(this$1.getSlot(skip + i * step).adjacentBox(0, labelBox.width(), labelBox.height()));\n }\n },\n intervals: function (size, skipOption, stepOption, skipAngles) {\n if (skipAngles === void 0) {\n skipAngles = false;\n }\n var options = this.options;\n var categories = options.categories.length;\n var divCount = categories / size || 1;\n var divAngle = 360 / divCount;\n var skip = skipOption || 0;\n var step = stepOption || 1;\n var divs = [];\n var angle = 0;\n for (var i = skip; i < divCount; i += step) {\n if (options.reverse) {\n angle = 360 - i * divAngle;\n } else {\n angle = i * divAngle;\n }\n angle = round(angle, COORD_PRECISION) % 360;\n if (!(skipAngles && inArray(angle, skipAngles))) {\n divs.push(angle);\n }\n }\n return divs;\n },\n majorIntervals: function () {\n return this.intervals(1);\n },\n minorIntervals: function () {\n return this.intervals(0.5);\n },\n intervalAngle: function (interval) {\n return (360 + interval + this.options.startAngle) % 360;\n },\n majorAngles: function () {\n var this$1 = this;\n return map(this.majorIntervals(), function (interval) {\n return this$1.intervalAngle(interval);\n });\n },\n createLine: function () {\n return [];\n },\n majorGridLineAngles: function (altAxis) {\n var majorGridLines = this.options.majorGridLines;\n return this.gridLineAngles(altAxis, 1, majorGridLines.skip, majorGridLines.step);\n },\n minorGridLineAngles: function (altAxis, skipMajor) {\n var ref = this.options;\n var minorGridLines = ref.minorGridLines;\n var majorGridLines = ref.majorGridLines;\n var majorGridLineAngles = skipMajor ? this.intervals(1, majorGridLines.skip, majorGridLines.step) : null;\n return this.gridLineAngles(altAxis, 0.5, minorGridLines.skip, minorGridLines.step, majorGridLineAngles);\n },\n radiusCallback: function (radius, altAxis, skipMajor) {\n if (altAxis.options.type !== ARC) {\n var minorAngle = rad(360 / (this.options.categories.length * 2));\n var minorRadius = Math.cos(minorAngle) * radius;\n var majorAngles = this.majorAngles();\n var radiusCallback = function (angle) {\n if (!skipMajor && inArray(angle, majorAngles)) {\n return radius;\n }\n return minorRadius;\n };\n return radiusCallback;\n }\n },\n createPlotBands: function () {\n var this$1 = this;\n var plotBands = this.options.plotBands || [];\n var group = this._plotbandGroup = new Group({ zIndex: -1 });\n for (var i = 0; i < plotBands.length; i++) {\n var band = plotBands[i];\n var slot = this$1.plotBandSlot(band);\n var singleSlot = this$1.getSlot(band.from);\n var head = band.from - Math.floor(band.from);\n slot.startAngle += head * singleSlot.angle;\n var tail = Math.ceil(band.to) - band.to;\n slot.angle -= (tail + head) * singleSlot.angle;\n var ring = ShapeBuilder.current.createRing(slot, {\n fill: {\n color: band.color,\n opacity: band.opacity\n },\n stroke: { opacity: band.opacity }\n });\n group.append(ring);\n }\n this.appendVisual(group);\n },\n plotBandSlot: function (band) {\n return this.getSlot(band.from, band.to - 1);\n },\n getSlot: function (from, to) {\n var options = this.options;\n var justified = options.justified;\n var box = this.box;\n var divs = this.majorAngles();\n var totalDivs = divs.length;\n var slotAngle = 360 / totalDivs;\n var fromValue = from;\n if (options.reverse && !justified) {\n fromValue = (fromValue + 1) % totalDivs;\n }\n fromValue = limitValue(Math.floor(fromValue), 0, totalDivs - 1);\n var slotStart = divs[fromValue];\n if (justified) {\n slotStart = slotStart - slotAngle / 2;\n if (slotStart < 0) {\n slotStart += 360;\n }\n }\n var toValue = limitValue(Math.ceil(to || fromValue), fromValue, totalDivs - 1);\n var slots = toValue - fromValue + 1;\n var angle = slotAngle * slots;\n return new Ring(box.center(), 0, box.height() / 2, slotStart, angle);\n },\n slot: function (from, to) {\n var slot = this.getSlot(from, to);\n var startAngle = slot.startAngle + 180;\n var endAngle = startAngle + slot.angle;\n return new geometry.Arc([\n slot.center.x,\n slot.center.y\n ], {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: slot.radius,\n radiusY: slot.radius\n });\n },\n pointCategoryIndex: function (point) {\n var this$1 = this;\n var length = this.options.categories.length;\n var index = null;\n for (var i = 0; i < length; i++) {\n var slot = this$1.getSlot(i);\n if (slot.containsPoint(point)) {\n index = i;\n break;\n }\n }\n return index;\n }\n });\n setDefaultOptions(RadarCategoryAxis, {\n startAngle: 90,\n labels: { margin: getSpacing(10) },\n majorGridLines: { visible: true },\n justified: true\n });\n deepExtend(RadarCategoryAxis.prototype, GridLinesMixin);\n var PolarAxis = Axis.extend({\n init: function (options, chartService) {\n Axis.fn.init.call(this, options, chartService);\n var instanceOptions = this.options;\n instanceOptions.minorUnit = instanceOptions.minorUnit || instanceOptions.majorUnit / 2;\n },\n getDivisions: function (stepValue) {\n return NumericAxis.prototype.getDivisions.call(this, stepValue) - 1;\n },\n reflow: function (box) {\n this.box = box;\n this.reflowLabels();\n },\n reflowLabels: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var labels = ref.labels;\n var labelOptions = ref.options.labels;\n var skip = labelOptions.skip || 0;\n var step = labelOptions.step || 1;\n var measureBox = new Box();\n var divs = this.intervals(options.majorUnit, skip, step);\n for (var i = 0; i < labels.length; i++) {\n labels[i].reflow(measureBox);\n var labelBox = labels[i].box;\n labels[i].reflow(this$1.getSlot(divs[i]).adjacentBox(0, labelBox.width(), labelBox.height()));\n }\n },\n lineBox: function () {\n return this.box;\n },\n intervals: function (size, skipOption, stepOption, skipAngles) {\n if (skipAngles === void 0) {\n skipAngles = false;\n }\n var min = this.options.min;\n var divisions = this.getDivisions(size);\n var divs = [];\n var skip = skipOption || 0;\n var step = stepOption || 1;\n for (var i = skip; i < divisions; i += step) {\n var current = (360 + min + i * size) % 360;\n if (!(skipAngles && inArray(current, skipAngles))) {\n divs.push(current);\n }\n }\n return divs;\n },\n majorIntervals: function () {\n return this.intervals(this.options.majorUnit);\n },\n minorIntervals: function () {\n return this.intervals(this.options.minorUnit);\n },\n intervalAngle: function (i) {\n return (540 - i - this.options.startAngle) % 360;\n },\n createLine: function () {\n return [];\n },\n majorGridLineAngles: function (altAxis) {\n var majorGridLines = this.options.majorGridLines;\n return this.gridLineAngles(altAxis, this.options.majorUnit, majorGridLines.skip, majorGridLines.step);\n },\n minorGridLineAngles: function (altAxis, skipMajor) {\n var options = this.options;\n var minorGridLines = options.minorGridLines;\n var majorGridLines = options.majorGridLines;\n var majorGridLineAngles = skipMajor ? this.intervals(options.majorUnit, majorGridLines.skip, majorGridLines.step) : null;\n return this.gridLineAngles(altAxis, options.minorUnit, minorGridLines.skip, minorGridLines.step, majorGridLineAngles);\n },\n plotBandSlot: function (band) {\n return this.getSlot(band.from, band.to);\n },\n getSlot: function (a, b) {\n var ref = this;\n var options = ref.options;\n var box = ref.box;\n var startAngle = options.startAngle;\n var start = limitValue(a, options.min, options.max);\n var end = limitValue(b || start, start, options.max);\n if (options.reverse) {\n start *= -1;\n end *= -1;\n }\n start = (540 - start - startAngle) % 360;\n end = (540 - end - startAngle) % 360;\n if (end < start) {\n var tmp = start;\n start = end;\n end = tmp;\n }\n return new Ring(box.center(), 0, box.height() / 2, start, end - start);\n },\n slot: function (from, to) {\n if (to === void 0) {\n to = from;\n }\n var options = this.options;\n var start = 360 - options.startAngle;\n var slot = this.getSlot(from, to);\n var min = Math.min(from, to);\n var max = Math.max(from, to);\n var startAngle, endAngle;\n if (options.reverse) {\n startAngle = min;\n endAngle = max;\n } else {\n startAngle = 360 - max;\n endAngle = 360 - min;\n }\n startAngle = (startAngle + start) % 360;\n endAngle = (endAngle + start) % 360;\n return new geometry.Arc([\n slot.center.x,\n slot.center.y\n ], {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: slot.radius,\n radiusY: slot.radius\n });\n },\n getValue: function (point) {\n var options = this.options;\n var center = this.box.center();\n var dx = point.x - center.x;\n var dy = point.y - center.y;\n var theta = Math.round(deg(Math.atan2(dy, dx)));\n var start = options.startAngle;\n if (!options.reverse) {\n theta *= -1;\n start *= -1;\n }\n return (theta + start + 360) % 360;\n },\n valueRange: function () {\n return {\n min: 0,\n max: Math.PI * 2\n };\n }\n });\n setDefaultOptions(PolarAxis, {\n type: 'polar',\n startAngle: 0,\n reverse: false,\n majorUnit: 60,\n min: 0,\n max: 360,\n labels: { margin: getSpacing(10) },\n majorGridLines: {\n color: BLACK,\n visible: true,\n width: 1\n },\n minorGridLines: { color: '#aaa' }\n });\n deepExtend(PolarAxis.prototype, GridLinesMixin, {\n createPlotBands: RadarCategoryAxis.prototype.createPlotBands,\n majorAngles: RadarCategoryAxis.prototype.majorAngles,\n range: NumericAxis.prototype.range,\n labelsCount: NumericAxis.prototype.labelsCount,\n createAxisLabel: NumericAxis.prototype.createAxisLabel\n });\n var RadarNumericAxisMixin = {\n options: { majorGridLines: { visible: true } },\n createPlotBands: function () {\n var this$1 = this;\n var ref = this.options;\n var type = ref.majorGridLines.type;\n var plotBands = ref.plotBands;\n if (plotBands === void 0) {\n plotBands = [];\n }\n var altAxis = this.plotArea.polarAxis;\n var majorAngles = altAxis.majorAngles();\n var center = altAxis.box.center();\n var group = this._plotbandGroup = new Group({ zIndex: -1 });\n for (var i = 0; i < plotBands.length; i++) {\n var band = plotBands[i];\n var bandStyle = {\n fill: {\n color: band.color,\n opacity: band.opacity\n },\n stroke: { opacity: band.opacity }\n };\n var slot = this$1.getSlot(band.from, band.to, true);\n var ring = new Ring(center, center.y - slot.y2, center.y - slot.y1, 0, 360);\n var shape = void 0;\n if (type === ARC) {\n shape = ShapeBuilder.current.createRing(ring, bandStyle);\n } else {\n shape = Path.fromPoints(this$1.plotBandPoints(ring, majorAngles), bandStyle).close();\n }\n group.append(shape);\n }\n this.appendVisual(group);\n },\n plotBandPoints: function (ring, angles) {\n var innerPoints = [];\n var outerPoints = [];\n var center = [\n ring.center.x,\n ring.center.y\n ];\n var innerCircle = new Circle(center, ring.innerRadius);\n var outerCircle = new Circle(center, ring.radius);\n for (var i = 0; i < angles.length; i++) {\n innerPoints.push(innerCircle.pointAt(angles[i] + 180));\n outerPoints.push(outerCircle.pointAt(angles[i] + 180));\n }\n innerPoints.reverse();\n innerPoints.push(innerPoints[0]);\n outerPoints.push(outerPoints[0]);\n return outerPoints.concat(innerPoints);\n },\n createGridLines: function (altAxis) {\n var options = this.options;\n var majorTicks = this.radarMajorGridLinePositions();\n var majorAngles = altAxis.majorAngles();\n var center = altAxis.box.center();\n var gridLines = [];\n if (options.majorGridLines.visible) {\n gridLines = this.renderGridLines(center, majorTicks, majorAngles, options.majorGridLines);\n }\n if (options.minorGridLines.visible) {\n var minorTicks = this.radarMinorGridLinePositions();\n append(gridLines, this.renderGridLines(center, minorTicks, majorAngles, options.minorGridLines));\n }\n return gridLines;\n },\n renderGridLines: function (center, ticks, angles, options) {\n var style = {\n stroke: {\n width: options.width,\n color: options.color,\n dashType: options.dashType\n }\n };\n var skip = options.skip;\n if (skip === void 0) {\n skip = 0;\n }\n var step = options.step;\n if (step === void 0) {\n step = 0;\n }\n var container = this.gridLinesVisual();\n for (var tickIx = skip; tickIx < ticks.length; tickIx += step) {\n var tickRadius = center.y - ticks[tickIx];\n if (tickRadius > 0) {\n var circle = new Circle([\n center.x,\n center.y\n ], tickRadius);\n if (options.type === ARC) {\n container.append(new drawing.Circle(circle, style));\n } else {\n var line = new Path(style);\n for (var angleIx = 0; angleIx < angles.length; angleIx++) {\n line.lineTo(circle.pointAt(angles[angleIx] + 180));\n }\n line.close();\n container.append(line);\n }\n }\n }\n return container.children;\n },\n getValue: function (point) {\n var lineBox = this.lineBox();\n var altAxis = this.plotArea.polarAxis;\n var majorAngles = altAxis.majorAngles();\n var center = altAxis.box.center();\n var radius = point.distanceTo(center);\n var distance = radius;\n if (this.options.majorGridLines.type !== ARC && majorAngles.length > 1) {\n var dx = point.x - center.x;\n var dy = point.y - center.y;\n var theta = (deg(Math.atan2(dy, dx)) + 540) % 360;\n majorAngles.sort(function (a, b) {\n return angularDistance(a, theta) - angularDistance(b, theta);\n });\n var midAngle = angularDistance(majorAngles[0], majorAngles[1]) / 2;\n var alpha = angularDistance(theta, majorAngles[0]);\n var gamma = 90 - midAngle;\n var beta = 180 - alpha - gamma;\n distance = radius * (Math.sin(rad(beta)) / Math.sin(rad(gamma)));\n }\n return this.axisType().prototype.getValue.call(this, new Point(lineBox.x1, lineBox.y2 - distance));\n }\n };\n function angularDistance(a, b) {\n return 180 - Math.abs(Math.abs(a - b) - 180);\n }\n var RadarNumericAxis = NumericAxis.extend({\n radarMajorGridLinePositions: function () {\n return this.getTickPositions(this.options.majorUnit);\n },\n radarMinorGridLinePositions: function () {\n var options = this.options;\n var minorSkipStep = 0;\n if (options.majorGridLines.visible) {\n minorSkipStep = options.majorUnit;\n }\n return this.getTickPositions(options.minorUnit, minorSkipStep);\n },\n axisType: function () {\n return NumericAxis;\n }\n });\n deepExtend(RadarNumericAxis.prototype, RadarNumericAxisMixin);\n var RadarLogarithmicAxis = LogarithmicAxis.extend({\n radarMajorGridLinePositions: function () {\n var positions = [];\n this.traverseMajorTicksPositions(function (position) {\n positions.push(position);\n }, this.options.majorGridLines);\n return positions;\n },\n radarMinorGridLinePositions: function () {\n var positions = [];\n this.traverseMinorTicksPositions(function (position) {\n positions.push(position);\n }, this.options.minorGridLines);\n return positions;\n },\n axisType: function () {\n return LogarithmicAxis;\n }\n });\n deepExtend(RadarLogarithmicAxis.prototype, RadarNumericAxisMixin);\n var WEIGHT = 0.333;\n var EXTREMUM_ALLOWED_DEVIATION = 0.01;\n var CurveProcessor = Class.extend({\n init: function (closed) {\n this.closed = closed;\n },\n process: function (dataPoints) {\n var this$1 = this;\n var points = dataPoints.slice(0);\n var segments = [];\n var closed = this.closed;\n var length = points.length;\n if (length > 2) {\n this.removeDuplicates(0, points);\n length = points.length;\n }\n if (length < 2 || length === 2 && points[0].equals(points[1])) {\n return segments;\n }\n var p0 = points[0];\n var p1 = points[1];\n var p2 = points[2];\n segments.push(new Segment(p0));\n while (p0.equals(points[length - 1])) {\n closed = true;\n points.pop();\n length--;\n }\n if (length === 2) {\n var tangent = this.tangent(p0, p1, X, Y);\n last(segments).controlOut(this.firstControlPoint(tangent, p0, p1, X, Y));\n segments.push(new Segment(p1, this.secondControlPoint(tangent, p0, p1, X, Y)));\n return segments;\n }\n var initialControlPoint, lastControlPoint;\n if (closed) {\n p0 = points[length - 1];\n p1 = points[0];\n p2 = points[1];\n var controlPoints = this.controlPoints(p0, p1, p2);\n initialControlPoint = controlPoints[1];\n lastControlPoint = controlPoints[0];\n } else {\n var tangent$1 = this.tangent(p0, p1, X, Y);\n initialControlPoint = this.firstControlPoint(tangent$1, p0, p1, X, Y);\n }\n var cp0 = initialControlPoint;\n for (var idx = 0; idx <= length - 3; idx++) {\n this$1.removeDuplicates(idx, points);\n length = points.length;\n if (idx + 3 <= length) {\n p0 = points[idx];\n p1 = points[idx + 1];\n p2 = points[idx + 2];\n var controlPoints$1 = this$1.controlPoints(p0, p1, p2);\n last(segments).controlOut(cp0);\n cp0 = controlPoints$1[1];\n var cp1 = controlPoints$1[0];\n segments.push(new Segment(p1, cp1));\n }\n }\n if (closed) {\n p0 = points[length - 2];\n p1 = points[length - 1];\n p2 = points[0];\n var controlPoints$2 = this.controlPoints(p0, p1, p2);\n last(segments).controlOut(cp0);\n segments.push(new Segment(p1, controlPoints$2[0]));\n last(segments).controlOut(controlPoints$2[1]);\n segments.push(new Segment(p2, lastControlPoint));\n } else {\n var tangent$2 = this.tangent(p1, p2, X, Y);\n last(segments).controlOut(cp0);\n segments.push(new Segment(p2, this.secondControlPoint(tangent$2, p1, p2, X, Y)));\n }\n return segments;\n },\n removeDuplicates: function (idx, points) {\n while (points[idx + 1] && (points[idx].equals(points[idx + 1]) || points[idx + 1].equals(points[idx + 2]))) {\n points.splice(idx + 1, 1);\n }\n },\n invertAxis: function (p0, p1, p2) {\n var invertAxis = false;\n if (p0.x === p1.x) {\n invertAxis = true;\n } else if (p1.x === p2.x) {\n if (p1.y < p2.y && p0.y <= p1.y || p2.y < p1.y && p1.y <= p0.y) {\n invertAxis = true;\n }\n } else {\n var fn = this.lineFunction(p0, p1);\n var y2 = this.calculateFunction(fn, p2.x);\n if (!(p0.y <= p1.y && p2.y <= y2) && !(p1.y <= p0.y && p2.y >= y2)) {\n invertAxis = true;\n }\n }\n return invertAxis;\n },\n isLine: function (p0, p1, p2) {\n var fn = this.lineFunction(p0, p1);\n var y2 = this.calculateFunction(fn, p2.x);\n return p0.x === p1.x && p1.x === p2.x || round(y2, 1) === round(p2.y, 1);\n },\n lineFunction: function (p1, p2) {\n var a = (p2.y - p1.y) / (p2.x - p1.x);\n var b = p1.y - a * p1.x;\n return [\n b,\n a\n ];\n },\n controlPoints: function (p0, p1, p2) {\n var xField = X;\n var yField = Y;\n var restrict = false;\n var switchOrientation = false;\n var tangent;\n if (this.isLine(p0, p1, p2)) {\n tangent = this.tangent(p0, p1, X, Y);\n } else {\n var monotonic = {\n x: this.isMonotonicByField(p0, p1, p2, X),\n y: this.isMonotonicByField(p0, p1, p2, Y)\n };\n if (monotonic.x && monotonic.y) {\n tangent = this.tangent(p0, p2, X, Y);\n restrict = true;\n } else {\n if (this.invertAxis(p0, p1, p2)) {\n xField = Y;\n yField = X;\n }\n if (monotonic[xField]) {\n tangent = 0;\n } else {\n var sign;\n if (p2[yField] < p0[yField] && p0[yField] <= p1[yField] || p0[yField] < p2[yField] && p1[yField] <= p0[yField]) {\n sign = numberSign((p2[yField] - p0[yField]) * (p1[xField] - p0[xField]));\n } else {\n sign = -numberSign((p2[xField] - p0[xField]) * (p1[yField] - p0[yField]));\n }\n tangent = EXTREMUM_ALLOWED_DEVIATION * sign;\n switchOrientation = true;\n }\n }\n }\n var secondControlPoint = this.secondControlPoint(tangent, p0, p1, xField, yField);\n if (switchOrientation) {\n var oldXField = xField;\n xField = yField;\n yField = oldXField;\n }\n var firstControlPoint = this.firstControlPoint(tangent, p1, p2, xField, yField);\n if (restrict) {\n this.restrictControlPoint(p0, p1, secondControlPoint, tangent);\n this.restrictControlPoint(p1, p2, firstControlPoint, tangent);\n }\n return [\n secondControlPoint,\n firstControlPoint\n ];\n },\n restrictControlPoint: function (p1, p2, cp, tangent) {\n if (p1.y < p2.y) {\n if (p2.y < cp.y) {\n cp.x = p1.x + (p2.y - p1.y) / tangent;\n cp.y = p2.y;\n } else if (cp.y < p1.y) {\n cp.x = p2.x - (p2.y - p1.y) / tangent;\n cp.y = p1.y;\n }\n } else {\n if (cp.y < p2.y) {\n cp.x = p1.x - (p1.y - p2.y) / tangent;\n cp.y = p2.y;\n } else if (p1.y < cp.y) {\n cp.x = p2.x + (p1.y - p2.y) / tangent;\n cp.y = p1.y;\n }\n }\n },\n tangent: function (p0, p1, xField, yField) {\n var x = p1[xField] - p0[xField];\n var y = p1[yField] - p0[yField];\n var tangent;\n if (x === 0) {\n tangent = 0;\n } else {\n tangent = y / x;\n }\n return tangent;\n },\n isMonotonicByField: function (p0, p1, p2, field) {\n return p2[field] > p1[field] && p1[field] > p0[field] || p2[field] < p1[field] && p1[field] < p0[field];\n },\n firstControlPoint: function (tangent, p0, p3, xField, yField) {\n var t1 = p0[xField];\n var t2 = p3[xField];\n var distance = (t2 - t1) * WEIGHT;\n return this.point(t1 + distance, p0[yField] + distance * tangent, xField, yField);\n },\n secondControlPoint: function (tangent, p0, p3, xField, yField) {\n var t1 = p0[xField];\n var t2 = p3[xField];\n var distance = (t2 - t1) * WEIGHT;\n return this.point(t2 - distance, p3[yField] - distance * tangent, xField, yField);\n },\n point: function (xValue, yValue, xField, yField) {\n var controlPoint = new geometry.Point();\n controlPoint[xField] = xValue;\n controlPoint[yField] = yValue;\n return controlPoint;\n },\n calculateFunction: function (fn, x) {\n var length = fn.length;\n var result = 0;\n for (var i = 0; i < length; i++) {\n result += Math.pow(x, i) * fn[i];\n }\n return result;\n }\n });\n function numberSign(value) {\n return value <= 0 ? -1 : 1;\n }\n dataviz.Gradients = GRADIENTS;\n kendo.deepExtend(kendo.dataviz, {\n constants: constants,\n services: services,\n autoMajorUnit: autoMajorUnit,\n Point: Point,\n Box: Box,\n Ring: Ring,\n Sector: Sector,\n ShapeBuilder: ShapeBuilder,\n ShapeElement: ShapeElement,\n ChartElement: ChartElement,\n BoxElement: BoxElement,\n RootElement: RootElement,\n FloatElement: FloatElement,\n Text: Text,\n TextBox: TextBox,\n Title: Title,\n AxisLabel: AxisLabel,\n Axis: Axis,\n Note: Note,\n CategoryAxis: CategoryAxis,\n DateCategoryAxis: DateCategoryAxis,\n DateValueAxis: DateValueAxis,\n NumericAxis: NumericAxis,\n LogarithmicAxis: LogarithmicAxis,\n PolarAxis: PolarAxis,\n RadarCategoryAxis: RadarCategoryAxis,\n RadarNumericAxis: RadarNumericAxis,\n RadarLogarithmicAxis: RadarLogarithmicAxis,\n CurveProcessor: CurveProcessor,\n rectToBox: rectToBox,\n addClass: addClass,\n removeClass: removeClass,\n alignPathToPixel: alignPathToPixel,\n clockwise: clockwise,\n convertableToNumber: convertableToNumber,\n deepExtend: deepExtend,\n elementStyles: elementStyles,\n getSpacing: getSpacing,\n getTemplate: getTemplate,\n getter: __common_getter_js,\n grep: grep,\n hasClasses: hasClasses,\n HashMap: HashMap,\n inArray: inArray,\n interpolateValue: interpolateValue,\n InstanceObserver: InstanceObserver,\n isArray: isArray,\n isFunction: isFunction,\n isNumber: isNumber,\n isObject: isObject,\n isString: isString,\n map: map,\n mousewheelDelta: mousewheelDelta,\n FontLoader: FontLoader,\n setDefaultOptions: setDefaultOptions,\n sparseArrayLimits: sparseArrayLimits,\n styleValue: styleValue,\n append: append,\n bindEvents: bindEvents,\n Class: Class,\n defined: defined,\n deg: deg,\n elementOffset: elementOffset,\n elementSize: elementSize,\n eventElement: eventElement,\n eventCoordinates: eventCoordinates,\n last: last,\n limitValue: limitValue,\n logToConsole: kendo.logToConsole,\n objectKey: objectKey,\n rad: rad,\n round: round,\n unbindEvents: unbindEvents,\n valueOrDefault: valueOrDefault,\n absoluteDateDiff: absoluteDateDiff,\n addDuration: addDuration,\n addTicks: addTicks,\n ceilDate: ceilDate,\n dateComparer: dateComparer,\n dateDiff: dateDiff,\n dateEquals: dateEquals,\n dateIndex: dateIndex,\n duration: duration,\n floorDate: floorDate,\n lteDateIndex: lteDateIndex,\n startOfWeek: startOfWeek,\n toDate: toDate,\n parseDate: parseDate,\n parseDates: parseDates,\n toTime: toTime\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/core/core', ['dataviz/core/kendo-core'], f);\n}(function () {\n (function ($) {\n var dataviz = kendo.dataviz;\n var services = dataviz.services;\n var draw = kendo.drawing;\n dataviz.ExportMixin = {\n extend: function (proto, skipLegacy) {\n if (!proto.exportVisual) {\n throw new Error('Mixin target has no exportVisual method defined.');\n }\n proto.exportSVG = this.exportSVG;\n proto.exportImage = this.exportImage;\n proto.exportPDF = this.exportPDF;\n if (!skipLegacy) {\n proto.svg = this.svg;\n proto.imageDataURL = this.imageDataURL;\n }\n },\n exportSVG: function (options) {\n return draw.exportSVG(this.exportVisual(), options);\n },\n exportImage: function (options) {\n return draw.exportImage(this.exportVisual(options), options);\n },\n exportPDF: function (options) {\n return draw.exportPDF(this.exportVisual(), options);\n },\n svg: function () {\n if (draw.svg.Surface) {\n return draw.svg.exportGroup(this.exportVisual());\n } else {\n throw new Error('SVG Export failed. Unable to export instantiate kendo.drawing.svg.Surface');\n }\n },\n imageDataURL: function () {\n if (!kendo.support.canvas) {\n return null;\n }\n if (draw.canvas.Surface) {\n var container = $('
    ').css({\n display: 'none',\n width: this.element.width(),\n height: this.element.height()\n }).appendTo(document.body);\n var surface = new draw.canvas.Surface(container[0]);\n surface.draw(this.exportVisual());\n var image = surface._rootElement.toDataURL();\n surface.destroy();\n container.remove();\n return image;\n } else {\n throw new Error('Image Export failed. Unable to export instantiate kendo.drawing.canvas.Surface');\n }\n }\n };\n services.IntlService.register({\n format: function (format) {\n return kendo.format.apply(null, [format].concat(Array.prototype.slice.call(arguments, 1)));\n },\n toString: kendo.toString,\n parseDate: kendo.parseDate\n });\n services.TemplateService.register({ compile: kendo.template });\n dataviz.Point2D = dataviz.Point;\n dataviz.Box2D = dataviz.Box;\n dataviz.mwDelta = function (e) {\n return dataviz.mousewheelDelta(e.originalEvent);\n };\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.core', [\n 'dataviz/core/kendo-core',\n 'dataviz/core/core'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.core',\n name: 'Core',\n description: 'The DataViz core functions',\n category: 'dataviz',\n depends: [\n 'core',\n 'drawing'\n ],\n hidden: true\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/themes/chart-base-theme', ['kendo.dataviz.core'], f);\n}(function () {\n (function () {\n window.kendo.dataviz = window.kendo.dataviz || {};\n var BAR_GAP = 1.5;\n var BAR_SPACING = 0.4;\n var BLACK = '#000';\n var SANS = 'Arial, Helvetica, sans-serif';\n var SANS11 = '11px ' + SANS;\n var SANS12 = '12px ' + SANS;\n var SANS16 = '16px ' + SANS;\n var TRANSPARENT = 'transparent';\n var WHITE = '#fff';\n var notes = function () {\n return {\n icon: { border: { width: 1 } },\n label: {\n font: SANS12,\n padding: 3\n },\n line: {\n length: 10,\n width: 2\n },\n visible: true\n };\n };\n var axisDefaults = function () {\n return {\n labels: { font: SANS12 },\n notes: notes(),\n title: {\n font: SANS16,\n margin: 5\n }\n };\n };\n var areaSeries = function () {\n return {\n highlight: { markers: { border: {} } },\n line: {\n opacity: 1,\n width: 0\n },\n markers: {\n size: 6,\n visible: false\n },\n opacity: 0.4\n };\n };\n var rangeAreaSeries = function () {\n return {\n highlight: { markers: { border: {} } },\n line: {\n opacity: 1,\n width: 0\n },\n markers: {\n size: 6,\n visible: false\n },\n opacity: 0.4\n };\n };\n var barSeries = function () {\n return {\n gap: BAR_GAP,\n spacing: BAR_SPACING\n };\n };\n var boxPlotSeries = function () {\n return {\n outliersField: '',\n meanField: '',\n border: {\n _brightness: 0.8,\n width: 1\n },\n downColor: WHITE,\n gap: 1,\n highlight: {\n border: {\n opacity: 1,\n width: 2\n },\n whiskers: { width: 3 },\n mean: { width: 2 },\n median: { width: 2 }\n },\n mean: { width: 2 },\n median: { width: 2 },\n spacing: 0.3,\n whiskers: { width: 2 }\n };\n };\n var bubbleSeries = function () {\n return {\n border: { width: 0 },\n labels: { background: TRANSPARENT },\n opacity: 0.6\n };\n };\n var bulletSeries = function () {\n return {\n gap: BAR_GAP,\n spacing: BAR_SPACING,\n target: { color: '#ff0000' }\n };\n };\n var candlestickSeries = function () {\n return {\n border: {\n _brightness: 0.8,\n width: 1\n },\n downColor: WHITE,\n gap: 1,\n highlight: {\n border: {\n opacity: 1,\n width: 2\n },\n line: { width: 2 }\n },\n line: {\n color: BLACK,\n width: 1\n },\n spacing: 0.3\n };\n };\n var columnSeries = function () {\n return {\n gap: BAR_GAP,\n spacing: BAR_SPACING\n };\n };\n var donutSeries = function () {\n return { margin: 1 };\n };\n var lineSeries = function () {\n return { width: 2 };\n };\n var ohlcSeries = function () {\n return {\n gap: 1,\n highlight: {\n line: {\n opacity: 1,\n width: 3\n }\n },\n line: { width: 1 },\n spacing: 0.3\n };\n };\n var radarAreaSeries = function () {\n return {\n line: {\n opacity: 1,\n width: 0\n },\n markers: {\n size: 6,\n visible: false\n },\n opacity: 0.5\n };\n };\n var radarLineSeries = function () {\n return {\n markers: { visible: false },\n width: 2\n };\n };\n var rangeBarSeries = function () {\n return {\n gap: BAR_GAP,\n spacing: BAR_SPACING\n };\n };\n var rangeColumnSeries = function () {\n return {\n gap: BAR_GAP,\n spacing: BAR_SPACING\n };\n };\n var scatterLineSeries = function () {\n return { width: 1 };\n };\n var waterfallSeries = function () {\n return {\n gap: 0.5,\n line: {\n color: BLACK,\n width: 1\n },\n spacing: BAR_SPACING\n };\n };\n var pieSeries = function () {\n return {\n labels: {\n background: '',\n color: '',\n padding: {\n top: 5,\n bottom: 5,\n left: 7,\n right: 7\n }\n }\n };\n };\n var funnelSeries = function () {\n return {\n labels: {\n background: '',\n color: '',\n padding: {\n top: 5,\n bottom: 5,\n left: 7,\n right: 7\n }\n }\n };\n };\n var seriesDefaults = function (options) {\n return {\n visible: true,\n labels: { font: SANS11 },\n overlay: options.gradients ? {} : { gradient: 'none' },\n area: areaSeries(),\n rangeArea: rangeAreaSeries(),\n verticalRangeArea: rangeAreaSeries(),\n bar: barSeries(),\n boxPlot: boxPlotSeries(),\n bubble: bubbleSeries(),\n bullet: bulletSeries(),\n candlestick: candlestickSeries(),\n column: columnSeries(),\n pie: pieSeries(),\n donut: donutSeries(),\n funnel: funnelSeries(),\n horizontalWaterfall: waterfallSeries(),\n line: lineSeries(),\n notes: notes(),\n ohlc: ohlcSeries(),\n radarArea: radarAreaSeries(),\n radarLine: radarLineSeries(),\n polarArea: radarAreaSeries(),\n polarLine: radarLineSeries(),\n rangeBar: rangeBarSeries(),\n rangeColumn: rangeColumnSeries(),\n scatterLine: scatterLineSeries(),\n verticalArea: areaSeries(),\n verticalBoxPlot: boxPlotSeries(),\n verticalBullet: bulletSeries(),\n verticalLine: lineSeries(),\n waterfall: waterfallSeries()\n };\n };\n var title = function () {\n return { font: SANS16 };\n };\n var legend = function () {\n return { labels: { font: SANS12 } };\n };\n var baseTheme = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n axisDefaults: axisDefaults(),\n categoryAxis: { majorGridLines: { visible: true } },\n navigator: {\n pane: {\n height: 90,\n margin: { top: 10 }\n }\n },\n seriesDefaults: seriesDefaults(options),\n title: title(),\n legend: legend()\n };\n };\n kendo.deepExtend(kendo.dataviz, { chartBaseTheme: baseTheme });\n }());\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/themes/auto-theme', ['kendo.dataviz.core'], f);\n}(function () {\n (function ($) {\n var cache;\n function autoTheme(force) {\n if (!force && cache) {\n return cache;\n }\n var theme = { chart: kendo.dataviz.chartBaseTheme() };\n var hook = $('
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ').appendTo(document.body);\n function mapColor(key, varName) {\n set(key, queryStyle(varName, 'backgroundColor'));\n }\n function queryStyle(varName, prop) {\n return hook.find('.k-var--' + varName).css(prop);\n }\n function set(path, value) {\n var store = theme;\n var parts = path.split('.');\n var key = parts.shift();\n while (parts.length > 0) {\n store = store[key] = store[key] || {};\n key = parts.shift();\n }\n store[key] = value;\n }\n (function setColors() {\n mapColor('chart.axisDefaults.crosshair.color', 'chart-crosshair-background');\n mapColor('chart.axisDefaults.labels.color', 'normal-text-color');\n mapColor('chart.axisDefaults.line.color', 'chart-major-lines');\n mapColor('chart.axisDefaults.majorGridLines.color', 'chart-major-lines');\n mapColor('chart.axisDefaults.minorGridLines.color', 'chart-minor-lines');\n mapColor('chart.axisDefaults.notes.icon.background', 'chart-notes-background');\n mapColor('chart.axisDefaults.notes.icon.border.color', 'chart-notes-border');\n mapColor('chart.axisDefaults.notes.line.color', 'chart-notes-lines');\n mapColor('chart.axisDefaults.title.color', 'normal-text-color');\n mapColor('chart.chartArea.background', 'background');\n mapColor('chart.legend.inactiveItems.labels.color', 'chart-inactive');\n mapColor('chart.legend.inactiveItems.markers.color', 'chart-inactive');\n mapColor('chart.legend.labels.color', 'normal-text-color');\n mapColor('chart.seriesDefaults.boxPlot.downColor', 'chart-major-lines');\n mapColor('chart.seriesDefaults.boxPlot.mean.color', 'base');\n mapColor('chart.seriesDefaults.boxPlot.median.color', 'base');\n mapColor('chart.seriesDefaults.boxPlot.whiskers.color', 'accent');\n mapColor('chart.seriesDefaults.bullet.target.color', 'accent');\n mapColor('chart.seriesDefaults.candlestick.downColor', 'normal-text-color');\n mapColor('chart.seriesDefaults.candlestick.line.color', 'normal-text-color');\n mapColor('chart.seriesDefaults.errorBars.color', 'chart-error-bars-background');\n mapColor('chart.seriesDefaults.horizontalWaterfall.line.color', 'chart-major-lines');\n mapColor('chart.seriesDefaults.icon.border.color', 'chart-major-lines');\n mapColor('chart.seriesDefaults.labels.background', 'background');\n mapColor('chart.seriesDefaults.labels.color', 'normal-text-color');\n mapColor('chart.seriesDefaults.notes.icon.background', 'chart-notes-background');\n mapColor('chart.seriesDefaults.notes.icon.border.color', 'chart-notes-border');\n mapColor('chart.seriesDefaults.notes.line.color', 'chart-notes-lines');\n mapColor('chart.seriesDefaults.verticalBoxPlot.downColor', 'chart-major-lines');\n mapColor('chart.seriesDefaults.verticalBoxPlot.mean.color', 'base');\n mapColor('chart.seriesDefaults.verticalBoxPlot.median.color', 'base');\n mapColor('chart.seriesDefaults.verticalBoxPlot.whiskers.color', 'accent');\n mapColor('chart.seriesDefaults.verticalBullet.target.color', 'accent');\n mapColor('chart.seriesDefaults.waterfall.line.color', 'chart-major-lines');\n mapColor('chart.title.color', 'normal-text-color');\n set('chart.seriesDefaults.labels.opacity', queryStyle('chart-area-opacity', 'opacity'));\n mapColor('diagram.shapeDefaults.fill.color', 'accent');\n mapColor('diagram.shapeDefaults.content.color', 'accent-contrast');\n mapColor('diagram.shapeDefaults.connectorDefaults.fill.color', 'normal-text-color');\n mapColor('diagram.shapeDefaults.connectorDefaults.stroke.color', 'accent-contrast');\n mapColor('diagram.shapeDefaults.connectorDefaults.hover.fill.color', 'accent-contrast');\n mapColor('diagram.shapeDefaults.connectorDefaults.hover.stroke.color', 'normal-text-color');\n mapColor('diagram.editable.resize.handles.stroke.color', 'normal-text-color');\n mapColor('diagram.editable.resize.handles.fill.color', 'normal-background');\n mapColor('diagram.editable.resize.handles.hover.stroke.color', 'normal-text-color');\n mapColor('diagram.editable.resize.handles.hover.fill.color', 'normal-text-color');\n mapColor('diagram.selectable.stroke.color', 'normal-text-color');\n mapColor('diagram.connectionDefaults.stroke.color', 'normal-text-color');\n mapColor('diagram.connectionDefaults.content.color', 'normal-text-color');\n mapColor('diagram.connectionDefaults.selection.handles.fill.color', 'accent-contrast');\n mapColor('diagram.connectionDefaults.selection.handles.stroke.color', 'normal-text-color');\n mapColor('diagram.connectionDefaults.selection.stroke.color', 'normal-text-color');\n mapColor('gauge.pointer.color', 'gauge-pointer');\n mapColor('gauge.scale.labels.color', 'normal-text-color');\n mapColor('gauge.scale.minorTicks.color', 'normal-text-color');\n mapColor('gauge.scale.majorTicks.color', 'normal-text-color');\n mapColor('gauge.scale.line.color', 'normal-text-color');\n mapColor('gauge.scale.rangePlaceholderColor', 'gauge-track');\n }());\n (function setFonts() {\n function font(varName) {\n return queryStyle(varName, 'fontSize') + ' ' + queryStyle(varName, 'fontFamily');\n }\n var defaultFont = font('chart-font');\n var titleFont = font('chart-title-font');\n var labelFont = font('chart-label-font');\n set('chart.axisDefaults.labels.font', labelFont);\n set('chart.axisDefaults.notes.label.font', defaultFont);\n set('chart.axisDefaults.title.font', defaultFont);\n set('chart.legend.labels.font', defaultFont);\n set('chart.seriesDefaults.labels.font', labelFont);\n set('chart.seriesDefaults.notes.label.font', defaultFont);\n set('chart.title.font', titleFont);\n }());\n (function setSeriesColors() {\n function letterPos(letter) {\n return letter.toLowerCase().charCodeAt(0) - 'a'.charCodeAt(0);\n }\n function seriesPos(name) {\n return letterPos(name.match(/series-([a-z])$/)[1]);\n }\n var series = $('.k-var--series div').toArray();\n var seriesColors = series.reduce(function (arr, el) {\n var pos = seriesPos(el.className);\n arr[pos] = $(el).css('backgroundColor');\n return arr;\n }, []);\n set('chart.seriesColors', seriesColors);\n }());\n hook.remove();\n cache = theme;\n return theme;\n }\n kendo.dataviz.autoTheme = autoTheme;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/themes/themes', ['dataviz/themes/chart-base-theme'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo, ui = kendo.dataviz.ui, deepExtend = kendo.deepExtend;\n var BLACK = '#000', SANS = 'Arial,Helvetica,sans-serif', SANS12 = '12px ' + SANS, WHITE = '#fff';\n var chartBaseTheme = kendo.dataviz.chartBaseTheme({ gradients: true });\n var gaugeBaseTheme = { scale: { labels: { font: SANS12 } } };\n var diagramBaseTheme = {\n shapeDefaults: {\n hover: { opacity: 0.2 },\n stroke: { width: 0 }\n },\n editable: {\n resize: {\n handles: {\n width: 7,\n height: 7\n }\n }\n },\n selectable: {\n stroke: {\n width: 1,\n dashType: 'dot'\n }\n },\n connectionDefaults: {\n stroke: { width: 2 },\n selection: {\n handles: {\n width: 8,\n height: 8\n }\n },\n editable: {\n tools: [\n 'edit',\n 'delete'\n ]\n }\n }\n };\n var themes = ui.themes, registerTheme = ui.registerTheme = function (themeName, options) {\n var result = {};\n result.chart = deepExtend({}, chartBaseTheme, options.chart);\n result.gauge = deepExtend({}, gaugeBaseTheme, options.gauge);\n result.diagram = deepExtend({}, diagramBaseTheme, options.diagram);\n result.treeMap = deepExtend({}, options.treeMap);\n var defaults = result.chart.seriesDefaults;\n defaults.verticalLine = deepExtend({}, defaults.line);\n defaults.verticalArea = deepExtend({}, defaults.area);\n defaults.rangeArea = deepExtend({}, defaults.area);\n defaults.verticalRangeArea = deepExtend({}, defaults.rangeArea);\n defaults.verticalBoxPlot = deepExtend({}, defaults.boxPlot);\n defaults.polarArea = deepExtend({}, defaults.radarArea);\n defaults.polarLine = deepExtend({}, defaults.radarLine);\n themes[themeName] = result;\n };\n registerTheme('black', {\n chart: {\n title: { color: WHITE },\n legend: {\n labels: { color: WHITE },\n inactiveItems: {\n labels: { color: '#919191' },\n markers: { color: '#919191' }\n }\n },\n seriesDefaults: {\n labels: { color: WHITE },\n errorBars: { color: WHITE },\n notes: {\n icon: {\n background: '#3b3b3b',\n border: { color: '#8e8e8e' }\n },\n label: { color: WHITE },\n line: { color: '#8e8e8e' }\n },\n pie: { overlay: { gradient: 'sharpBevel' } },\n donut: { overlay: { gradient: 'sharpGlass' } },\n line: { markers: { background: '#3d3d3d' } },\n scatter: { markers: { background: '#3d3d3d' } },\n scatterLine: { markers: { background: '#3d3d3d' } },\n waterfall: { line: { color: '#8e8e8e' } },\n horizontalWaterfall: { line: { color: '#8e8e8e' } },\n candlestick: {\n downColor: '#555',\n line: { color: WHITE },\n border: {\n _brightness: 1.5,\n opacity: 1\n },\n highlight: {\n border: {\n color: WHITE,\n opacity: 0.2\n }\n }\n },\n ohlc: { line: { color: WHITE } }\n },\n chartArea: { background: '#3d3d3d' },\n seriesColors: [\n '#0081da',\n '#3aafff',\n '#99c900',\n '#ffeb3d',\n '#b20753',\n '#ff4195'\n ],\n axisDefaults: {\n line: { color: '#8e8e8e' },\n labels: { color: WHITE },\n majorGridLines: { color: '#545454' },\n minorGridLines: { color: '#454545' },\n title: { color: WHITE },\n crosshair: { color: '#8e8e8e' },\n notes: {\n icon: {\n background: '#3b3b3b',\n border: { color: '#8e8e8e' }\n },\n label: { color: WHITE },\n line: { color: '#8e8e8e' }\n }\n }\n },\n gauge: {\n pointer: { color: '#0070e4' },\n scale: {\n rangePlaceholderColor: '#1d1d1d',\n labels: { color: WHITE },\n minorTicks: { color: WHITE },\n majorTicks: { color: WHITE },\n line: { color: WHITE }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#0066cc' },\n connectorDefaults: {\n fill: { color: WHITE },\n stroke: { color: '#384049' },\n hover: {\n fill: { color: '#3d3d3d' },\n stroke: { color: '#efefef' }\n }\n },\n content: { color: WHITE }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: '#3d3d3d' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: WHITE }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: WHITE },\n fill: { color: WHITE }\n }\n }\n },\n selectable: { stroke: { color: WHITE } },\n connectionDefaults: {\n stroke: { color: WHITE },\n content: { color: WHITE },\n selection: {\n handles: {\n fill: { color: '#3d3d3d' },\n stroke: { color: '#efefef' }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#0081da',\n '#314b5c'\n ],\n [\n '#3aafff',\n '#3c5464'\n ],\n [\n '#99c900',\n '#4f5931'\n ],\n [\n '#ffeb3d',\n '#64603d'\n ],\n [\n '#b20753',\n '#543241'\n ],\n [\n '#ff4195',\n '#643e4f'\n ]\n ]\n }\n });\n registerTheme('blueopal', {\n chart: {\n title: { color: '#293135' },\n legend: {\n labels: { color: '#293135' },\n inactiveItems: {\n labels: { color: '#27A5BA' },\n markers: { color: '#27A5BA' }\n }\n },\n seriesDefaults: {\n labels: {\n color: BLACK,\n background: WHITE,\n opacity: 0.5\n },\n errorBars: { color: '#293135' },\n candlestick: {\n downColor: '#c4d0d5',\n line: { color: '#9aabb2' }\n },\n waterfall: { line: { color: '#9aabb2' } },\n horizontalWaterfall: { line: { color: '#9aabb2' } },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#9aabb2' }\n },\n label: { color: '#293135' },\n line: { color: '#9aabb2' }\n }\n },\n seriesColors: [\n '#0069a5',\n '#0098ee',\n '#7bd2f6',\n '#ffb800',\n '#ff8517',\n '#e34a00'\n ],\n axisDefaults: {\n line: { color: '#9aabb2' },\n labels: { color: '#293135' },\n majorGridLines: { color: '#c4d0d5' },\n minorGridLines: { color: '#edf1f2' },\n title: { color: '#293135' },\n crosshair: { color: '#9aabb2' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#9aabb2' }\n },\n label: { color: '#293135' },\n line: { color: '#9aabb2' }\n }\n }\n },\n gauge: {\n pointer: { color: '#005c83' },\n scale: {\n rangePlaceholderColor: '#daecf4',\n labels: { color: '#293135' },\n minorTicks: { color: '#293135' },\n majorTicks: { color: '#293135' },\n line: { color: '#293135' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#7ec6e3' },\n connectorDefaults: {\n fill: { color: '#003f59' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#003f59' }\n }\n },\n content: { color: '#293135' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#003f59' },\n hover: {\n fill: { color: '#003f59' },\n stroke: { color: '#003f59' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#003f59' },\n fill: { color: '#003f59' }\n }\n }\n },\n selectable: { stroke: { color: '#003f59' } },\n connectionDefaults: {\n stroke: { color: '#003f59' },\n content: { color: '#293135' },\n selection: {\n handles: {\n fill: { color: '#3d3d3d' },\n stroke: { color: '#efefef' }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#0069a5',\n '#bad7e7'\n ],\n [\n '#0098ee',\n '#b9e0f5'\n ],\n [\n '#7bd2f6',\n '#ceeaf6'\n ],\n [\n '#ffb800',\n '#e6e3c4'\n ],\n [\n '#ff8517',\n '#e4d8c8'\n ],\n [\n '#e34a00',\n '#ddccc2'\n ]\n ]\n }\n });\n registerTheme('highcontrast', {\n chart: {\n title: { color: '#ffffff' },\n legend: {\n labels: { color: '#ffffff' },\n inactiveItems: {\n labels: { color: '#66465B' },\n markers: { color: '#66465B' }\n }\n },\n seriesDefaults: {\n labels: { color: '#ffffff' },\n errorBars: { color: '#ffffff' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#ffffff' }\n },\n label: { color: '#ffffff' },\n line: { color: '#ffffff' }\n },\n pie: { overlay: { gradient: 'sharpGlass' } },\n donut: { overlay: { gradient: 'sharpGlass' } },\n line: { markers: { background: '#2c232b' } },\n scatter: { markers: { background: '#2c232b' } },\n scatterLine: { markers: { background: '#2c232b' } },\n area: { opacity: 0.5 },\n waterfall: { line: { color: '#ffffff' } },\n horizontalWaterfall: { line: { color: '#ffffff' } },\n candlestick: {\n downColor: '#664e62',\n line: { color: '#ffffff' },\n border: {\n _brightness: 1.5,\n opacity: 1\n },\n highlight: {\n border: {\n color: '#ffffff',\n opacity: 1\n }\n }\n },\n ohlc: { line: { color: '#ffffff' } }\n },\n chartArea: { background: '#2c232b' },\n seriesColors: [\n '#a7008f',\n '#ffb800',\n '#3aafff',\n '#99c900',\n '#b20753',\n '#ff4195'\n ],\n axisDefaults: {\n line: { color: '#ffffff' },\n labels: { color: '#ffffff' },\n majorGridLines: { color: '#664e62' },\n minorGridLines: { color: '#4f394b' },\n title: { color: '#ffffff' },\n crosshair: { color: '#ffffff' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#ffffff' }\n },\n label: { color: '#ffffff' },\n line: { color: '#ffffff' }\n }\n }\n },\n gauge: {\n pointer: { color: '#a7008f' },\n scale: {\n rangePlaceholderColor: '#2c232b',\n labels: { color: '#ffffff' },\n minorTicks: { color: '#2c232b' },\n majorTicks: { color: '#664e62' },\n line: { color: '#ffffff' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#a7018f' },\n connectorDefaults: {\n fill: { color: WHITE },\n stroke: { color: '#2c232b' },\n hover: {\n fill: { color: '#2c232b' },\n stroke: { color: WHITE }\n }\n },\n content: { color: WHITE }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: '#2c232b' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: WHITE }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: WHITE },\n fill: { color: WHITE }\n }\n }\n },\n selectable: { stroke: { color: WHITE } },\n connectionDefaults: {\n stroke: { color: WHITE },\n content: { color: WHITE },\n selection: {\n handles: {\n fill: { color: '#2c232b' },\n stroke: { color: WHITE }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#a7008f',\n '#451c3f'\n ],\n [\n '#ffb800',\n '#564122'\n ],\n [\n '#3aafff',\n '#2f3f55'\n ],\n [\n '#99c900',\n '#424422'\n ],\n [\n '#b20753',\n '#471d33'\n ],\n [\n '#ff4195',\n '#562940'\n ]\n ]\n }\n });\n registerTheme('default', {\n chart: {\n title: { color: '#8e8e8e' },\n legend: {\n labels: { color: '#232323' },\n inactiveItems: {\n labels: { color: '#919191' },\n markers: { color: '#919191' }\n }\n },\n seriesDefaults: {\n labels: {\n color: BLACK,\n background: WHITE,\n opacity: 0.5\n },\n errorBars: { color: '#232323' },\n candlestick: {\n downColor: '#dedede',\n line: { color: '#8d8d8d' }\n },\n waterfall: { line: { color: '#8e8e8e' } },\n horizontalWaterfall: { line: { color: '#8e8e8e' } },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#8e8e8e' }\n },\n label: { color: '#232323' },\n line: { color: '#8e8e8e' }\n }\n },\n seriesColors: [\n '#ff6800',\n '#a0a700',\n '#ff8d00',\n '#678900',\n '#ffb53c',\n '#396000'\n ],\n axisDefaults: {\n line: { color: '#8e8e8e' },\n labels: { color: '#232323' },\n minorGridLines: { color: '#f0f0f0' },\n majorGridLines: { color: '#dfdfdf' },\n title: { color: '#232323' },\n crosshair: { color: '#8e8e8e' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#8e8e8e' }\n },\n label: { color: '#232323' },\n line: { color: '#8e8e8e' }\n }\n }\n },\n gauge: {\n pointer: { color: '#ea7001' },\n scale: {\n rangePlaceholderColor: '#dedede',\n labels: { color: '#2e2e2e' },\n minorTicks: { color: '#2e2e2e' },\n majorTicks: { color: '#2e2e2e' },\n line: { color: '#2e2e2e' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#e15613' },\n connectorDefaults: {\n fill: { color: '#282828' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#282828' }\n }\n },\n content: { color: '#2e2e2e' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#282828' },\n hover: {\n fill: { color: '#282828' },\n stroke: { color: '#282828' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#282828' },\n fill: { color: '#282828' }\n }\n }\n },\n selectable: { stroke: { color: '#a7018f' } },\n connectionDefaults: {\n stroke: { color: '#282828' },\n content: { color: '#2e2e2e' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#282828' }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#ff6800',\n '#edcfba'\n ],\n [\n '#a0a700',\n '#dadcba'\n ],\n [\n '#ff8d00',\n '#edd7ba'\n ],\n [\n '#678900',\n '#cfd6ba'\n ],\n [\n '#ffb53c',\n '#eddfc6'\n ],\n [\n '#396000',\n '#c6ceba'\n ]\n ]\n }\n });\n registerTheme('silver', {\n chart: {\n title: { color: '#4e5968' },\n legend: {\n labels: { color: '#4e5968' },\n inactiveItems: {\n labels: { color: '#B1BCC8' },\n markers: { color: '#B1BCC8' }\n }\n },\n seriesDefaults: {\n labels: {\n color: '#293135',\n background: '#eaeaec',\n opacity: 0.5\n },\n errorBars: { color: '#4e5968' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#4e5968' }\n },\n label: { color: '#4e5968' },\n line: { color: '#4e5968' }\n },\n line: { markers: { background: '#eaeaec' } },\n scatter: { markers: { background: '#eaeaec' } },\n scatterLine: { markers: { background: '#eaeaec' } },\n pie: { connectors: { color: '#A6B1C0' } },\n donut: { connectors: { color: '#A6B1C0' } },\n waterfall: { line: { color: '#a6b1c0' } },\n horizontalWaterfall: { line: { color: '#a6b1c0' } },\n candlestick: { downColor: '#a6afbe' }\n },\n chartArea: { background: '#eaeaec' },\n seriesColors: [\n '#007bc3',\n '#76b800',\n '#ffae00',\n '#ef4c00',\n '#a419b7',\n '#430B62'\n ],\n axisDefaults: {\n line: { color: '#a6b1c0' },\n labels: { color: '#4e5968' },\n majorGridLines: { color: '#dcdcdf' },\n minorGridLines: { color: '#eeeeef' },\n title: { color: '#4e5968' },\n crosshair: { color: '#a6b1c0' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#4e5968' }\n },\n label: { color: '#4e5968' },\n line: { color: '#4e5968' }\n }\n }\n },\n gauge: {\n pointer: { color: '#0879c0' },\n scale: {\n rangePlaceholderColor: '#f3f3f4',\n labels: { color: '#515967' },\n minorTicks: { color: '#515967' },\n majorTicks: { color: '#515967' },\n line: { color: '#515967' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#1c82c2' },\n connectorDefaults: {\n fill: { color: '#515967' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#282828' }\n }\n },\n content: { color: '#515967' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#515967' },\n hover: {\n fill: { color: '#515967' },\n stroke: { color: '#515967' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#515967' },\n fill: { color: '#515967' }\n }\n }\n },\n selectable: { stroke: { color: '#515967' } },\n connectionDefaults: {\n stroke: { color: '#515967' },\n content: { color: '#515967' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#515967' }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#007bc3',\n '#c2dbea'\n ],\n [\n '#76b800',\n '#dae7c3'\n ],\n [\n '#ffae00',\n '#f5e5c3'\n ],\n [\n '#ef4c00',\n '#f2d2c3'\n ],\n [\n '#a419b7',\n '#e3c7e8'\n ],\n [\n '#430b62',\n '#d0c5d7'\n ]\n ]\n }\n });\n registerTheme('metro', {\n chart: {\n title: { color: '#777777' },\n legend: {\n labels: { color: '#777777' },\n inactiveItems: {\n labels: { color: '#CBCBCB' },\n markers: { color: '#CBCBCB' }\n }\n },\n seriesDefaults: {\n labels: { color: BLACK },\n errorBars: { color: '#777777' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#777777' }\n },\n label: { color: '#777777' },\n line: { color: '#777777' }\n },\n candlestick: {\n downColor: '#c7c7c7',\n line: { color: '#787878' }\n },\n waterfall: { line: { color: '#c7c7c7' } },\n horizontalWaterfall: { line: { color: '#c7c7c7' } },\n overlay: { gradient: 'none' },\n border: { _brightness: 1 }\n },\n seriesColors: [\n '#8ebc00',\n '#309b46',\n '#25a0da',\n '#ff6900',\n '#e61e26',\n '#d8e404',\n '#16aba9',\n '#7e51a1',\n '#313131',\n '#ed1691'\n ],\n axisDefaults: {\n line: { color: '#c7c7c7' },\n labels: { color: '#777777' },\n minorGridLines: { color: '#c7c7c7' },\n majorGridLines: { color: '#c7c7c7' },\n title: { color: '#777777' },\n crosshair: { color: '#c7c7c7' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#777777' }\n },\n label: { color: '#777777' },\n line: { color: '#777777' }\n }\n }\n },\n gauge: {\n pointer: { color: '#8ebc00' },\n scale: {\n rangePlaceholderColor: '#e6e6e6',\n labels: { color: '#777' },\n minorTicks: { color: '#777' },\n majorTicks: { color: '#777' },\n line: { color: '#777' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#8ebc00' },\n connectorDefaults: {\n fill: { color: BLACK },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: BLACK }\n }\n },\n content: { color: '#777' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#787878' },\n hover: {\n fill: { color: '#787878' },\n stroke: { color: '#787878' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#787878' },\n fill: { color: '#787878' }\n }\n }\n },\n selectable: { stroke: { color: '#515967' } },\n connectionDefaults: {\n stroke: { color: '#787878' },\n content: { color: '#777' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#787878' }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#8ebc00',\n '#e8f2cc'\n ],\n [\n '#309b46',\n '#d6ebda'\n ],\n [\n '#25a0da',\n '#d3ecf8'\n ],\n [\n '#ff6900',\n '#ffe1cc'\n ],\n [\n '#e61e26',\n '#fad2d4'\n ],\n [\n '#d8e404',\n '#f7facd'\n ],\n [\n '#16aba9',\n '#d0eeee'\n ],\n [\n '#7e51a1',\n '#e5dcec'\n ],\n [\n '#313131',\n '#d6d6d6'\n ],\n [\n '#ed1691',\n '#fbd0e9'\n ]\n ]\n }\n });\n registerTheme('metroblack', {\n chart: {\n title: { color: '#ffffff' },\n legend: {\n labels: { color: '#ffffff' },\n inactiveItems: {\n labels: { color: '#797979' },\n markers: { color: '#797979' }\n }\n },\n seriesDefaults: {\n border: { _brightness: 1 },\n labels: { color: '#ffffff' },\n errorBars: { color: '#ffffff' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#cecece' }\n },\n label: { color: '#ffffff' },\n line: { color: '#cecece' }\n },\n line: { markers: { background: '#0e0e0e' } },\n bubble: { opacity: 0.6 },\n scatter: { markers: { background: '#0e0e0e' } },\n scatterLine: { markers: { background: '#0e0e0e' } },\n candlestick: {\n downColor: '#828282',\n line: { color: '#ffffff' }\n },\n waterfall: { line: { color: '#cecece' } },\n horizontalWaterfall: { line: { color: '#cecece' } },\n overlay: { gradient: 'none' }\n },\n chartArea: { background: '#0e0e0e' },\n seriesColors: [\n '#00aba9',\n '#309b46',\n '#8ebc00',\n '#ff6900',\n '#e61e26',\n '#d8e404',\n '#25a0da',\n '#7e51a1',\n '#313131',\n '#ed1691'\n ],\n axisDefaults: {\n line: { color: '#cecece' },\n labels: { color: '#ffffff' },\n minorGridLines: { color: '#2d2d2d' },\n majorGridLines: { color: '#333333' },\n title: { color: '#ffffff' },\n crosshair: { color: '#cecece' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#cecece' }\n },\n label: { color: '#ffffff' },\n line: { color: '#cecece' }\n }\n }\n },\n gauge: {\n pointer: { color: '#00aba9' },\n scale: {\n rangePlaceholderColor: '#2d2d2d',\n labels: { color: '#ffffff' },\n minorTicks: { color: '#333333' },\n majorTicks: { color: '#cecece' },\n line: { color: '#cecece' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#00aba9' },\n connectorDefaults: {\n fill: { color: WHITE },\n stroke: { color: '#0e0e0e' },\n hover: {\n fill: { color: '#0e0e0e' },\n stroke: { color: WHITE }\n }\n },\n content: { color: WHITE }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: '#0e0e0e' },\n stroke: { color: '#787878' },\n hover: {\n fill: { color: '#787878' },\n stroke: { color: '#787878' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: WHITE },\n fill: { color: WHITE }\n }\n }\n },\n selectable: { stroke: { color: '#787878' } },\n connectionDefaults: {\n stroke: { color: WHITE },\n content: { color: WHITE },\n selection: {\n handles: {\n fill: { color: '#0e0e0e' },\n stroke: { color: WHITE }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#00aba9',\n '#0b2d2d'\n ],\n [\n '#309b46',\n '#152a19'\n ],\n [\n '#8ebc00',\n '#28310b'\n ],\n [\n '#ff6900',\n '#3e200b'\n ],\n [\n '#e61e26',\n '#391113'\n ],\n [\n '#d8e404',\n '#36390c'\n ],\n [\n '#25a0da',\n '#132b37'\n ],\n [\n '#7e51a1',\n '#241b2b'\n ],\n [\n '#313131',\n '#151515'\n ],\n [\n '#ed1691',\n '#3b1028'\n ]\n ]\n }\n });\n registerTheme('moonlight', {\n chart: {\n title: { color: '#ffffff' },\n legend: {\n labels: { color: '#ffffff' },\n inactiveItems: {\n labels: { color: '#A1A7AB' },\n markers: { color: '#A1A7AB' }\n }\n },\n seriesDefaults: {\n labels: { color: '#ffffff' },\n errorBars: { color: '#ffffff' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#8c909e' }\n },\n label: { color: '#ffffff' },\n line: { color: '#8c909e' }\n },\n pie: { overlay: { gradient: 'sharpBevel' } },\n donut: { overlay: { gradient: 'sharpGlass' } },\n line: { markers: { background: '#212a33' } },\n bubble: { opacity: 0.6 },\n scatter: { markers: { background: '#212a33' } },\n scatterLine: { markers: { background: '#212a33' } },\n area: { opacity: 0.3 },\n candlestick: {\n downColor: '#757d87',\n line: { color: '#ea9d06' },\n border: {\n _brightness: 1.5,\n opacity: 1\n },\n highlight: {\n border: {\n color: WHITE,\n opacity: 0.2\n }\n }\n },\n waterfall: { line: { color: '#8c909e' } },\n horizontalWaterfall: { line: { color: '#8c909e' } },\n ohlc: { line: { color: '#ea9d06' } }\n },\n chartArea: { background: '#212a33' },\n seriesColors: [\n '#ffca08',\n '#ff710f',\n '#ed2e24',\n '#ff9f03',\n '#e13c02',\n '#a00201'\n ],\n axisDefaults: {\n line: { color: '#8c909e' },\n minorTicks: { color: '#8c909e' },\n majorTicks: { color: '#8c909e' },\n labels: { color: '#ffffff' },\n majorGridLines: { color: '#3e424d' },\n minorGridLines: { color: '#2f3640' },\n title: { color: '#ffffff' },\n crosshair: { color: '#8c909e' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#8c909e' }\n },\n label: { color: '#ffffff' },\n line: { color: '#8c909e' }\n }\n }\n },\n gauge: {\n pointer: { color: '#f4af03' },\n scale: {\n rangePlaceholderColor: '#2f3640',\n labels: { color: WHITE },\n minorTicks: { color: '#8c909e' },\n majorTicks: { color: '#8c909e' },\n line: { color: '#8c909e' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#f3ae03' },\n connectorDefaults: {\n fill: { color: WHITE },\n stroke: { color: '#414550' },\n hover: {\n fill: { color: '#414550' },\n stroke: { color: WHITE }\n }\n },\n content: { color: WHITE }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: '#414550' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: WHITE }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: WHITE },\n fill: { color: WHITE }\n }\n }\n },\n selectable: { stroke: { color: WHITE } },\n connectionDefaults: {\n stroke: { color: WHITE },\n content: { color: WHITE },\n selection: {\n handles: {\n fill: { color: '#414550' },\n stroke: { color: WHITE }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#ffca08',\n '#4e4b2b'\n ],\n [\n '#ff710f',\n '#4e392d'\n ],\n [\n '#ed2e24',\n '#4b2c31'\n ],\n [\n '#ff9f03',\n '#4e422a'\n ],\n [\n '#e13c02',\n '#482e2a'\n ],\n [\n '#a00201',\n '#3b232a'\n ]\n ]\n }\n });\n registerTheme('uniform', {\n chart: {\n title: { color: '#686868' },\n legend: {\n labels: { color: '#686868' },\n inactiveItems: {\n labels: { color: '#B6B6B6' },\n markers: { color: '#B6B6B6' }\n }\n },\n seriesDefaults: {\n labels: { color: '#686868' },\n errorBars: { color: '#686868' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#9e9e9e' }\n },\n label: { color: '#686868' },\n line: { color: '#9e9e9e' }\n },\n pie: { overlay: { gradient: 'sharpBevel' } },\n donut: { overlay: { gradient: 'sharpGlass' } },\n line: { markers: { background: '#ffffff' } },\n bubble: { opacity: 0.6 },\n scatter: { markers: { background: '#ffffff' } },\n scatterLine: { markers: { background: '#ffffff' } },\n area: { opacity: 0.3 },\n candlestick: {\n downColor: '#cccccc',\n line: { color: '#cccccc' },\n border: {\n _brightness: 1.5,\n opacity: 1\n },\n highlight: {\n border: {\n color: '#cccccc',\n opacity: 0.2\n }\n }\n },\n waterfall: { line: { color: '#9e9e9e' } },\n horizontalWaterfall: { line: { color: '#9e9e9e' } },\n ohlc: { line: { color: '#cccccc' } }\n },\n chartArea: { background: '#ffffff' },\n seriesColors: [\n '#527aa3',\n '#6f91b3',\n '#8ca7c2',\n '#a8bdd1',\n '#c5d3e0',\n '#e2e9f0'\n ],\n axisDefaults: {\n line: { color: '#9e9e9e' },\n minorTicks: { color: '#aaaaaa' },\n majorTicks: { color: '#888888' },\n labels: { color: '#686868' },\n majorGridLines: { color: '#dadada' },\n minorGridLines: { color: '#e7e7e7' },\n title: { color: '#686868' },\n crosshair: { color: '#9e9e9e' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#9e9e9e' }\n },\n label: { color: '#686868' },\n line: { color: '#9e9e9e' }\n }\n }\n },\n gauge: {\n pointer: { color: '#527aa3' },\n scale: {\n rangePlaceholderColor: '#e7e7e7',\n labels: { color: '#686868' },\n minorTicks: { color: '#aaaaaa' },\n majorTicks: { color: '#888888' },\n line: { color: '#9e9e9e' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#d1d1d1' },\n connectorDefaults: {\n fill: { color: '#686868' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#686868' }\n }\n },\n content: { color: '#686868' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#686868' },\n hover: {\n fill: { color: '#686868' },\n stroke: { color: '#686868' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#686868' },\n fill: { color: '#686868' }\n }\n }\n },\n selectable: { stroke: { color: '#686868' } },\n connectionDefaults: {\n stroke: { color: '#686868' },\n content: { color: '#686868' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#686868' }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#527aa3',\n '#d0d8e1'\n ],\n [\n '#6f91b3',\n '#d6dde4'\n ],\n [\n '#8ca7c2',\n '#dce1e7'\n ],\n [\n '#a8bdd1',\n '#e2e6ea'\n ],\n [\n '#c5d3e0',\n '#e7eaed'\n ],\n [\n '#e2e9f0',\n '#edeff0'\n ]\n ]\n }\n });\n registerTheme('bootstrap', {\n chart: {\n title: { color: '#333333' },\n legend: {\n labels: { color: '#333333' },\n inactiveItems: {\n labels: { color: '#999999' },\n markers: { color: '#9A9A9A' }\n }\n },\n seriesDefaults: {\n labels: { color: '#333333' },\n overlay: { gradient: 'none' },\n errorBars: { color: '#343434' },\n notes: {\n icon: {\n background: '#000000',\n border: { color: '#000000' }\n },\n label: { color: '#333333' },\n line: { color: '#000000' }\n },\n pie: { overlay: { gradient: 'none' } },\n donut: { overlay: { gradient: 'none' } },\n line: { markers: { background: '#ffffff' } },\n bubble: { opacity: 0.6 },\n scatter: { markers: { background: '#ffffff' } },\n scatterLine: { markers: { background: '#ffffff' } },\n area: { opacity: 0.8 },\n candlestick: {\n downColor: '#d0d0d0',\n line: { color: '#333333' },\n border: {\n _brightness: 1.5,\n opacity: 1\n },\n highlight: {\n border: {\n color: '#b8b8b8',\n opacity: 0.2\n }\n }\n },\n waterfall: { line: { color: '#cccccc' } },\n horizontalWaterfall: { line: { color: '#cccccc' } },\n ohlc: { line: { color: '#333333' } }\n },\n chartArea: { background: '#ffffff' },\n seriesColors: [\n '#428bca',\n '#5bc0de',\n '#5cb85c',\n '#f2b661',\n '#e67d4a',\n '#da3b36'\n ],\n axisDefaults: {\n line: { color: '#cccccc' },\n minorTicks: { color: '#ebebeb' },\n majorTicks: { color: '#cccccc' },\n labels: { color: '#333333' },\n majorGridLines: { color: '#cccccc' },\n minorGridLines: { color: '#ebebeb' },\n title: { color: '#333333' },\n crosshair: { color: '#000000' },\n notes: {\n icon: {\n background: '#000000',\n border: { color: '#000000' }\n },\n label: { color: '#ffffff' },\n line: { color: '#000000' }\n }\n }\n },\n gauge: {\n pointer: { color: '#428bca' },\n scale: {\n rangePlaceholderColor: '#cccccc',\n labels: { color: '#333333' },\n minorTicks: { color: '#ebebeb' },\n majorTicks: { color: '#cccccc' },\n line: { color: '#cccccc' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#428bca' },\n connectorDefaults: {\n fill: { color: '#333333' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#333333' }\n }\n },\n content: { color: '#333333' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#333333' },\n hover: {\n fill: { color: '#333333' },\n stroke: { color: '#333333' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#333333' },\n fill: { color: '#333333' }\n }\n }\n },\n selectable: { stroke: { color: '#333333' } },\n connectionDefaults: {\n stroke: { color: '#c4c4c4' },\n content: { color: '#333333' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#333333' }\n },\n stroke: { color: '#333333' }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#428bca',\n '#d1e0ec'\n ],\n [\n '#5bc0de',\n '#d6eaf0'\n ],\n [\n '#5cb85c',\n '#d6e9d6'\n ],\n [\n '#5cb85c',\n '#f4e8d7'\n ],\n [\n '#e67d4a',\n '#f2ddd3'\n ],\n [\n '#da3b36',\n '#f0d0cf'\n ]\n ]\n }\n });\n registerTheme('flat', {\n chart: {\n title: { color: '#4c5356' },\n legend: {\n labels: { color: '#4c5356' },\n inactiveItems: {\n labels: { color: '#CBCBCB' },\n markers: { color: '#CBCBCB' }\n }\n },\n seriesDefaults: {\n labels: { color: '#4c5356' },\n errorBars: { color: '#4c5356' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#cdcdcd' }\n },\n label: { color: '#4c5356' },\n line: { color: '#cdcdcd' }\n },\n candlestick: {\n downColor: '#c7c7c7',\n line: { color: '#787878' }\n },\n area: { opacity: 0.9 },\n waterfall: { line: { color: '#cdcdcd' } },\n horizontalWaterfall: { line: { color: '#cdcdcd' } },\n overlay: { gradient: 'none' },\n border: { _brightness: 1 }\n },\n seriesColors: [\n '#10c4b2',\n '#ff7663',\n '#ffb74f',\n '#a2df53',\n '#1c9ec4',\n '#ff63a5',\n '#1cc47b'\n ],\n axisDefaults: {\n line: { color: '#cdcdcd' },\n labels: { color: '#4c5356' },\n minorGridLines: { color: '#cdcdcd' },\n majorGridLines: { color: '#cdcdcd' },\n title: { color: '#4c5356' },\n crosshair: { color: '#cdcdcd' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#cdcdcd' }\n },\n label: { color: '#4c5356' },\n line: { color: '#cdcdcd' }\n }\n }\n },\n gauge: {\n pointer: { color: '#10c4b2' },\n scale: {\n rangePlaceholderColor: '#cdcdcd',\n labels: { color: '#4c5356' },\n minorTicks: { color: '#4c5356' },\n majorTicks: { color: '#4c5356' },\n line: { color: '#4c5356' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#10c4b2' },\n connectorDefaults: {\n fill: { color: '#363940' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#363940' }\n }\n },\n content: { color: '#4c5356' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#363940' },\n hover: {\n fill: { color: '#363940' },\n stroke: { color: '#363940' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#363940' },\n fill: { color: '#363940' }\n }\n }\n },\n selectable: { stroke: { color: '#363940' } },\n connectionDefaults: {\n stroke: { color: '#cdcdcd' },\n content: { color: '#4c5356' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#363940' }\n },\n stroke: { color: '#363940' }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#10c4b2',\n '#cff3f0'\n ],\n [\n '#ff7663',\n '#ffe4e0'\n ],\n [\n '#ffb74f',\n '#fff1dc'\n ],\n [\n '#a2df53',\n '#ecf9dd'\n ],\n [\n '#1c9ec4',\n '#d2ecf3'\n ],\n [\n '#ff63a5',\n '#ffe0ed'\n ],\n [\n '#1cc47b',\n '#d2f3e5'\n ]\n ]\n }\n });\n registerTheme('material', {\n chart: {\n title: { color: '#444444' },\n legend: {\n labels: { color: '#444444' },\n inactiveItems: {\n labels: { color: '#CBCBCB' },\n markers: { color: '#CBCBCB' }\n }\n },\n seriesDefaults: {\n labels: { color: '#444444' },\n errorBars: { color: '#444444' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#e5e5e5' }\n },\n label: { color: '#444444' },\n line: { color: '#e5e5e5' }\n },\n candlestick: {\n downColor: '#c7c7c7',\n line: { color: '#787878' }\n },\n area: { opacity: 0.9 },\n waterfall: { line: { color: '#e5e5e5' } },\n horizontalWaterfall: { line: { color: '#e5e5e5' } },\n overlay: { gradient: 'none' },\n border: { _brightness: 1 }\n },\n seriesColors: [\n '#3f51b5',\n '#03a9f4',\n '#4caf50',\n '#f9ce1d',\n '#ff9800',\n '#ff5722'\n ],\n axisDefaults: {\n line: { color: '#e5e5e5' },\n labels: { color: '#444444' },\n minorGridLines: { color: '#e5e5e5' },\n majorGridLines: { color: '#e5e5e5' },\n title: { color: '#444444' },\n crosshair: { color: '#7f7f7f' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#e5e5e5' }\n },\n label: { color: '#444444' },\n line: { color: '#e5e5e5' }\n }\n }\n },\n gauge: {\n pointer: { color: '#3f51b5' },\n scale: {\n rangePlaceholderColor: '#e5e5e5',\n labels: { color: '#444444' },\n minorTicks: { color: '#444444' },\n majorTicks: { color: '#444444' },\n line: { color: '#444444' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#3f51b5' },\n connectorDefaults: {\n fill: { color: '#7f7f7f' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#7f7f7f' }\n }\n },\n content: { color: '#444444' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#444444' },\n hover: {\n fill: { color: '#444444' },\n stroke: { color: '#444444' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#444444' },\n fill: { color: '#444444' }\n }\n }\n },\n selectable: { stroke: { color: '#444444' } },\n connectionDefaults: {\n stroke: { color: '#7f7f7f' },\n content: { color: '#444444' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#444444' }\n },\n stroke: { color: '#444444' }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#3f51b5',\n '#cff3f0'\n ],\n [\n '#03a9f4',\n '#e5f6fe'\n ],\n [\n '#4caf50',\n '#edf7ed'\n ],\n [\n '#f9ce1d',\n '#fefae8'\n ],\n [\n '#ff9800',\n '#fff4e5'\n ],\n [\n '#ff5722',\n '#ffeee8'\n ]\n ]\n }\n });\n registerTheme('materialblack', {\n chart: {\n title: { color: '#fff' },\n legend: {\n labels: { color: '#fff' },\n inactiveItems: {\n labels: { color: '#CBCBCB' },\n markers: { color: '#CBCBCB' }\n }\n },\n seriesDefaults: {\n labels: { color: '#fff' },\n errorBars: { color: '#fff' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#e5e5e5' }\n },\n label: { color: '#fff' },\n line: { color: '#e5e5e5' }\n },\n candlestick: {\n downColor: '#c7c7c7',\n line: { color: '#787878' }\n },\n area: { opacity: 0.9 },\n waterfall: { line: { color: '#4d4d4d' } },\n horizontalWaterfall: { line: { color: '#4d4d4d' } },\n overlay: { gradient: 'none' },\n border: { _brightness: 1 }\n },\n chartArea: { background: '#1c1c1c' },\n seriesColors: [\n '#3f51b5',\n '#03a9f4',\n '#4caf50',\n '#f9ce1d',\n '#ff9800',\n '#ff5722'\n ],\n axisDefaults: {\n line: { color: '#4d4d4d' },\n labels: { color: '#fff' },\n minorGridLines: { color: '#4d4d4d' },\n majorGridLines: { color: '#4d4d4d' },\n title: { color: '#fff' },\n crosshair: { color: '#7f7f7f' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#4d4d4d' }\n },\n label: { color: '#fff' },\n line: { color: '#4d4d4d' }\n }\n }\n },\n gauge: {\n pointer: { color: '#3f51b5' },\n scale: {\n rangePlaceholderColor: '#4d4d4d',\n labels: { color: '#fff' },\n minorTicks: { color: '#fff' },\n majorTicks: { color: '#fff' },\n line: { color: '#fff' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#3f51b5' },\n connectorDefaults: {\n fill: { color: '#7f7f7f' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#7f7f7f' }\n }\n },\n content: { color: '#fff' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#fff' },\n hover: {\n fill: { color: '#fff' },\n stroke: { color: '#fff' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#fff' },\n fill: { color: '#fff' }\n }\n }\n },\n selectable: { stroke: { color: '#fff' } },\n connectionDefaults: {\n stroke: { color: '#7f7f7f' },\n content: { color: '#fff' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#fff' }\n },\n stroke: { color: '#fff' }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#3f51b5',\n '#cff3f0'\n ],\n [\n '#03a9f4',\n '#e5f6fe'\n ],\n [\n '#4caf50',\n '#edf7ed'\n ],\n [\n '#f9ce1d',\n '#fefae8'\n ],\n [\n '#ff9800',\n '#fff4e5'\n ],\n [\n '#ff5722',\n '#ffeee8'\n ]\n ]\n }\n });\n (function () {\n var TEXT = '#333333';\n var INACTIVE = '#7f7f7f';\n var INACTIVE_SHAPE = '#bdbdbd';\n var AXIS = '#c8c8c8';\n var AXIS_MINOR = '#dddddd';\n var SERIES = [\n '#008fd3',\n '#99d101',\n '#f39b02',\n '#f05662',\n '#c03c53',\n '#acacac'\n ];\n var SERIES_LIGHT = [\n '#cbe8f5',\n '#eaf5cb',\n '#fceacc',\n '#fbdcdf',\n '#f2d7dc',\n '#eeeeee'\n ];\n var PRIMARY = SERIES[0];\n var DIAGRAM_HOVER = WHITE;\n function noteStyle() {\n return {\n icon: {\n background: '#007cc0',\n border: { color: '#007cc0' }\n },\n label: { color: '#ffffff' },\n line: { color: AXIS }\n };\n }\n registerTheme('fiori', {\n chart: {\n title: { color: TEXT },\n legend: {\n labels: { color: TEXT },\n inactiveItems: {\n labels: { color: INACTIVE },\n markers: { color: INACTIVE }\n }\n },\n seriesDefaults: {\n labels: { color: TEXT },\n errorBars: { color: TEXT },\n notes: noteStyle(),\n candlestick: {\n downColor: AXIS,\n line: { color: INACTIVE_SHAPE }\n },\n area: { opacity: 0.8 },\n waterfall: { line: { color: AXIS } },\n horizontalWaterfall: { line: { color: AXIS } },\n overlay: { gradient: 'none' },\n border: { _brightness: 1 }\n },\n seriesColors: SERIES,\n axisDefaults: {\n line: { color: AXIS },\n labels: { color: TEXT },\n minorGridLines: { color: AXIS_MINOR },\n majorGridLines: { color: AXIS },\n title: { color: TEXT },\n crosshair: { color: INACTIVE },\n notes: noteStyle()\n }\n },\n gauge: {\n pointer: { color: PRIMARY },\n scale: {\n rangePlaceholderColor: AXIS,\n labels: { color: TEXT },\n minorTicks: { color: TEXT },\n majorTicks: { color: TEXT },\n line: { color: TEXT }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: PRIMARY },\n connectorDefaults: {\n fill: { color: TEXT },\n stroke: { color: DIAGRAM_HOVER },\n hover: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: TEXT }\n }\n },\n content: { color: TEXT }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: INACTIVE_SHAPE },\n hover: {\n fill: { color: INACTIVE_SHAPE },\n stroke: { color: INACTIVE_SHAPE }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: INACTIVE_SHAPE },\n fill: { color: INACTIVE_SHAPE }\n }\n }\n },\n selectable: { stroke: { color: INACTIVE_SHAPE } },\n connectionDefaults: {\n stroke: { color: INACTIVE_SHAPE },\n content: { color: INACTIVE_SHAPE },\n selection: {\n handles: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: INACTIVE_SHAPE }\n },\n stroke: { color: INACTIVE_SHAPE }\n }\n }\n },\n treeMap: { colors: fuse(SERIES, SERIES_LIGHT) }\n });\n }());\n (function () {\n var TEXT = '#4e4e4e';\n var INACTIVE = '#7f7f7f';\n var INACTIVE_SHAPE = '#bdbdbd';\n var AXIS = '#c8c8c8';\n var AXIS_MINOR = '#e5e5e5';\n var SERIES = [\n '#0072c6',\n '#5db2ff',\n '#008a17',\n '#82ba00',\n '#ff8f32',\n '#ac193d'\n ];\n var SERIES_LIGHT = [\n '#cbe2f3',\n '#deeffe',\n '#cbe7d0',\n '#e5f0cb',\n '#fee8d5',\n '#eed0d7'\n ];\n var PRIMARY = SERIES[0];\n var DIAGRAM_HOVER = WHITE;\n function noteStyle() {\n return {\n icon: {\n background: '#00b0ff',\n border: { color: '#00b0ff' }\n },\n label: { color: '#ffffff' },\n line: { color: AXIS }\n };\n }\n registerTheme('office365', {\n chart: {\n title: { color: TEXT },\n legend: {\n labels: { color: TEXT },\n inactiveItems: {\n labels: { color: INACTIVE },\n markers: { color: INACTIVE }\n }\n },\n seriesDefaults: {\n labels: { color: TEXT },\n errorBars: { color: TEXT },\n notes: noteStyle(),\n candlestick: {\n downColor: AXIS,\n line: { color: INACTIVE_SHAPE }\n },\n area: { opacity: 0.8 },\n waterfall: { line: { color: AXIS } },\n horizontalWaterfall: { line: { color: AXIS } },\n overlay: { gradient: 'none' },\n border: { _brightness: 1 }\n },\n seriesColors: SERIES,\n axisDefaults: {\n line: { color: AXIS },\n labels: { color: TEXT },\n minorGridLines: { color: AXIS_MINOR },\n majorGridLines: { color: AXIS },\n title: { color: TEXT },\n crosshair: { color: INACTIVE },\n notes: noteStyle()\n }\n },\n gauge: {\n pointer: { color: PRIMARY },\n scale: {\n rangePlaceholderColor: AXIS,\n labels: { color: TEXT },\n minorTicks: { color: TEXT },\n majorTicks: { color: TEXT },\n line: { color: TEXT }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: PRIMARY },\n connectorDefaults: {\n fill: { color: TEXT },\n stroke: { color: DIAGRAM_HOVER },\n hover: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: TEXT }\n }\n },\n content: { color: TEXT }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: INACTIVE_SHAPE },\n hover: {\n fill: { color: INACTIVE_SHAPE },\n stroke: { color: INACTIVE_SHAPE }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: INACTIVE_SHAPE },\n fill: { color: INACTIVE_SHAPE }\n }\n }\n },\n selectable: { stroke: { color: INACTIVE_SHAPE } },\n connectionDefaults: {\n stroke: { color: INACTIVE_SHAPE },\n content: { color: INACTIVE_SHAPE },\n selection: {\n handles: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: INACTIVE_SHAPE }\n },\n stroke: { color: INACTIVE_SHAPE }\n }\n }\n },\n treeMap: { colors: fuse(SERIES, SERIES_LIGHT) }\n });\n }());\n (function () {\n var TEXT = '#32364c';\n var INACTIVE = '#7f7f7f';\n var INACTIVE_SHAPE = '#bdbdbd';\n var AXIS = '#dfe0e1';\n var AXIS_MINOR = '#dfe0e1';\n var SERIES = [\n '#ff4350',\n '#ff9ea5',\n '#00acc1',\n '#80deea',\n '#ffbf46',\n '#ffd78c'\n ];\n var SERIES_LIGHT = [\n '#ffd9dc',\n '#ffeced',\n '#cceef3',\n '#e6f8fb',\n '#fff2da',\n '#fff7e8'\n ];\n var PRIMARY = SERIES[0];\n var DIAGRAM_HOVER = WHITE;\n function noteStyle() {\n return {\n icon: {\n background: '#007cc0',\n border: { color: '#007cc0' }\n },\n label: { color: '#ffffff' },\n line: { color: AXIS }\n };\n }\n registerTheme('nova', {\n chart: {\n title: { color: TEXT },\n legend: {\n labels: { color: TEXT },\n inactiveItems: {\n labels: { color: INACTIVE },\n markers: { color: INACTIVE }\n }\n },\n seriesDefaults: {\n labels: { color: TEXT },\n errorBars: { color: TEXT },\n notes: noteStyle(),\n candlestick: {\n downColor: AXIS,\n line: { color: INACTIVE_SHAPE }\n },\n area: { opacity: 0.8 },\n waterfall: { line: { color: AXIS } },\n horizontalWaterfall: { line: { color: AXIS } },\n overlay: { gradient: 'none' },\n border: { _brightness: 1 }\n },\n seriesColors: SERIES,\n axisDefaults: {\n line: { color: AXIS },\n labels: { color: TEXT },\n minorGridLines: { color: AXIS_MINOR },\n majorGridLines: { color: AXIS },\n title: { color: TEXT },\n crosshair: { color: TEXT },\n notes: noteStyle()\n }\n },\n gauge: {\n pointer: { color: PRIMARY },\n scale: {\n rangePlaceholderColor: AXIS,\n labels: { color: TEXT },\n minorTicks: { color: TEXT },\n majorTicks: { color: TEXT },\n line: { color: TEXT }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: PRIMARY },\n connectorDefaults: {\n fill: { color: TEXT },\n stroke: { color: DIAGRAM_HOVER },\n hover: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: TEXT }\n }\n },\n content: { color: TEXT }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: INACTIVE_SHAPE },\n hover: {\n fill: { color: INACTIVE_SHAPE },\n stroke: { color: INACTIVE_SHAPE }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: INACTIVE_SHAPE },\n fill: { color: INACTIVE_SHAPE }\n }\n }\n },\n selectable: { stroke: { color: INACTIVE_SHAPE } },\n connectionDefaults: {\n stroke: { color: INACTIVE_SHAPE },\n content: { color: INACTIVE_SHAPE },\n selection: {\n handles: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: INACTIVE_SHAPE }\n },\n stroke: { color: INACTIVE_SHAPE }\n }\n }\n },\n treeMap: { colors: fuse(SERIES, SERIES_LIGHT) }\n });\n }());\n (function () {\n var SERIES = [\n '#ff6358',\n '#ffd246',\n '#78d237',\n '#28b4c8',\n '#2d73f5',\n '#aa46be'\n ];\n var SERIES_LIGHT = [\n '#ffd9dc',\n '#ffeced',\n '#cceef3',\n '#e6f8fb',\n '#fff2da',\n '#fff7e8'\n ];\n registerTheme('default-v2', {\n chart: {},\n gauge: {},\n diagram: {},\n treeMap: { colors: fuse(SERIES, SERIES_LIGHT) }\n });\n themes.sass = themes['default-v2'];\n }());\n (function () {\n var TEXT = '#292b2c';\n var AXIS = 'rgba(0, 0, 0, .04)';\n var SERIES = [\n '#0275d8',\n '#5bc0de',\n '#5cb85c',\n '#f0ad4e',\n '#e67d4a',\n '#d9534f'\n ];\n var SERIES_LIGHT = [\n '#ffd9dc',\n '#ffeced',\n '#cceef3',\n '#e6f8fb',\n '#fff2da',\n '#fff7e8'\n ];\n var PRIMARY = SERIES[0];\n registerTheme('bootstrap-v4', {\n chart: {},\n gauge: {\n pointer: { color: PRIMARY },\n scale: {\n rangePlaceholderColor: AXIS,\n labels: { color: TEXT },\n minorTicks: { color: TEXT },\n majorTicks: { color: TEXT },\n line: { color: TEXT }\n }\n },\n diagram: {},\n treeMap: { colors: fuse(SERIES, SERIES_LIGHT) }\n });\n }());\n function fuse(arr1, arr2) {\n return $.map(arr1, function (item, index) {\n return [[\n item,\n arr2[index]\n ]];\n });\n }\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.themes', [\n 'kendo.dataviz.core',\n 'dataviz/themes/chart-base-theme',\n 'dataviz/themes/auto-theme',\n 'dataviz/themes/themes'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.themes',\n name: 'Themes',\n description: 'Built-in themes for the DataViz widgets',\n category: 'dataviz',\n depends: ['dataviz.core'],\n hidden: true\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/chart/kendo-chart', [\n 'kendo.core',\n 'kendo.color',\n 'kendo.drawing',\n 'kendo.dataviz.core'\n ], f);\n}(function () {\n (function ($) {\n window.kendo.dataviz = window.kendo.dataviz || {};\n var dataviz = kendo.dataviz;\n var Class = dataviz.Class;\n var isNumber = dataviz.isNumber;\n var datavizConstants = dataviz.constants;\n var MAX_VALUE = datavizConstants.MAX_VALUE;\n var MIN_VALUE = datavizConstants.MIN_VALUE;\n var VALUE = datavizConstants.VALUE;\n var CENTER = datavizConstants.CENTER;\n var TOP = datavizConstants.TOP;\n var BOTTOM = datavizConstants.BOTTOM;\n var LEFT = datavizConstants.LEFT;\n var WHITE = datavizConstants.WHITE;\n var CIRCLE = datavizConstants.CIRCLE;\n var X = datavizConstants.X;\n var Y = datavizConstants.Y;\n var RIGHT = datavizConstants.RIGHT;\n var BLACK = datavizConstants.BLACK;\n var DATE = datavizConstants.DATE;\n var DEFAULT_PRECISION = datavizConstants.DEFAULT_PRECISION;\n var ARC = datavizConstants.ARC;\n var defined = dataviz.defined;\n var getter = dataviz.getter;\n var isArray = dataviz.isArray;\n var ChartElement = dataviz.ChartElement;\n var Point = dataviz.Point;\n var Box = dataviz.Box;\n var alignPathToPixel = dataviz.alignPathToPixel;\n var setDefaultOptions = dataviz.setDefaultOptions;\n var inArray = dataviz.inArray;\n var isFunction = dataviz.isFunction;\n var valueOrDefault = dataviz.valueOrDefault;\n var isObject = dataviz.isObject;\n var deepExtend = dataviz.deepExtend;\n var last = dataviz.last;\n var eventElement = dataviz.eventElement;\n var getTemplate = dataviz.getTemplate;\n var TextBox = dataviz.TextBox;\n var ShapeElement = dataviz.ShapeElement;\n var getSpacing = dataviz.getSpacing;\n var CurveProcessor = dataviz.CurveProcessor;\n var append = dataviz.append;\n var isString = dataviz.isString;\n var parseDate = dataviz.parseDate;\n var styleValue = dataviz.styleValue;\n var CategoryAxis = dataviz.CategoryAxis;\n var BoxElement = dataviz.BoxElement;\n var round = dataviz.round;\n var limitValue = dataviz.limitValue;\n var grep = dataviz.grep;\n var elementStyles = dataviz.elementStyles;\n var hasClasses = dataviz.hasClasses;\n var bindEvents = dataviz.bindEvents;\n var services = dataviz.services;\n var unbindEvents = dataviz.unbindEvents;\n var support = kendo.support;\n var drawing = kendo.drawing;\n var Path = drawing.Path;\n var Animation = drawing.Animation;\n var AnimationFactory = drawing.AnimationFactory;\n var Group = drawing.Group;\n var Color = kendo.Color;\n var geometry = kendo.geometry;\n var GeometryPoint = geometry.Point;\n var transform = geometry.transform;\n var ChartAxis = Class.extend({\n init: function (axis) {\n this._axis = axis;\n this.options = axis.options;\n },\n value: function (point) {\n var axis = this._axis;\n var value = axis.getCategory ? axis.getCategory(point) : axis.getValue(point);\n return value;\n },\n slot: function (from, to, limit) {\n if (limit === void 0) {\n limit = true;\n }\n return this._axis.slot(from, to, limit);\n },\n range: function () {\n return this._axis.range();\n },\n valueRange: function () {\n return this._axis.valueRange();\n }\n });\n function findAxisByName(name, axes) {\n for (var idx = 0; idx < axes.length; idx++) {\n if (axes[idx].options.name === name) {\n axes[idx].prepareUserOptions();\n return new ChartAxis(axes[idx]);\n }\n }\n }\n var ChartPane = kendo.Class.extend({\n init: function (pane) {\n this.visual = pane.visual;\n this.chartsVisual = pane.chartContainer.visual;\n this._pane = pane;\n },\n findAxisByName: function (name) {\n return findAxisByName(name, this._pane.axes);\n }\n });\n var ChartPlotArea = Class.extend({\n init: function (plotArea) {\n this._plotArea = plotArea;\n this.visual = plotArea.visual;\n this.backgroundVisual = plotArea._bgVisual;\n }\n });\n function countNumbers(values) {\n var length = values.length;\n var count = 0;\n for (var i = 0; i < length; i++) {\n var num = values[i];\n if (isNumber(num)) {\n count++;\n }\n }\n return count;\n }\n var Aggregates = {\n min: function (values) {\n var length = values.length;\n var min = MAX_VALUE;\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (isNumber(value)) {\n min = Math.min(min, value);\n }\n }\n return min === MAX_VALUE ? values[0] : min;\n },\n max: function (values) {\n var length = values.length;\n var max = MIN_VALUE;\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (isNumber(value)) {\n max = Math.max(max, value);\n }\n }\n return max === MIN_VALUE ? values[0] : max;\n },\n sum: function (values) {\n var length = values.length;\n var sum = 0;\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (isNumber(value)) {\n sum += value;\n }\n }\n return sum;\n },\n sumOrNull: function (values) {\n var result = null;\n if (countNumbers(values)) {\n result = Aggregates.sum(values);\n }\n return result;\n },\n count: function (values) {\n var length = values.length;\n var count = 0;\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (value !== null && defined(value)) {\n count++;\n }\n }\n return count;\n },\n avg: function (values) {\n var count = countNumbers(values);\n var result = values[0];\n if (count > 0) {\n result = Aggregates.sum(values) / count;\n }\n return result;\n },\n first: function (values) {\n var length = values.length;\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (value !== null && defined(value)) {\n return value;\n }\n }\n return values[0];\n }\n };\n function getField(field, row) {\n if (row === null) {\n return row;\n }\n var get = getter(field, true);\n return get(row);\n }\n var SeriesBinder = Class.extend({\n init: function () {\n this._valueFields = {};\n this._otherFields = {};\n this._nullValue = {};\n this._undefinedValue = {};\n },\n register: function (seriesTypes, valueFields, otherFields) {\n var this$1 = this;\n if (valueFields === void 0) {\n valueFields = [VALUE];\n }\n if (otherFields === void 0) {\n otherFields = {};\n }\n for (var i = 0; i < seriesTypes.length; i++) {\n var type = seriesTypes[i];\n this$1._valueFields[type] = valueFields;\n this$1._otherFields[type] = otherFields;\n this$1._nullValue[type] = this$1._makeValue(valueFields, null);\n this$1._undefinedValue[type] = this$1._makeValue(valueFields, undefined);\n }\n },\n canonicalFields: function (series) {\n return this.valueFields(series).concat(this.otherFields(series));\n },\n valueFields: function (series) {\n return this._valueFields[series.type] || [VALUE];\n },\n otherFields: function (series) {\n return this._otherFields[series.type] || [VALUE];\n },\n bindPoint: function (series, pointIx, item) {\n var data = series.data;\n var pointData = defined(item) ? item : data[pointIx];\n var result = { valueFields: { value: pointData } };\n var valueFields = this.valueFields(series);\n var otherFields = this._otherFields[series.type];\n var fields, value;\n if (pointData === null) {\n value = this._nullValue[series.type];\n } else if (!defined(pointData)) {\n value = this._undefinedValue[series.type];\n } else if (Array.isArray(pointData)) {\n var fieldData = pointData.slice(valueFields.length);\n value = this._bindFromArray(pointData, valueFields);\n fields = this._bindFromArray(fieldData, otherFields);\n } else if (typeof pointData === 'object') {\n var srcValueFields = this.sourceFields(series, valueFields);\n var srcPointFields = this.sourceFields(series, otherFields);\n value = this._bindFromObject(pointData, valueFields, srcValueFields);\n fields = this._bindFromObject(pointData, otherFields, srcPointFields);\n }\n if (defined(value)) {\n if (valueFields.length === 1) {\n result.valueFields.value = value[valueFields[0]];\n } else {\n result.valueFields = value;\n }\n }\n result.fields = fields || {};\n return result;\n },\n _makeValue: function (fields, initialValue) {\n var value = {};\n var length = fields.length;\n for (var i = 0; i < length; i++) {\n var fieldName = fields[i];\n value[fieldName] = initialValue;\n }\n return value;\n },\n _bindFromArray: function (array, fields) {\n var value = {};\n if (fields) {\n var length = Math.min(fields.length, array.length);\n for (var i = 0; i < length; i++) {\n value[fields[i]] = array[i];\n }\n }\n return value;\n },\n _bindFromObject: function (object, fields, srcFields) {\n if (srcFields === void 0) {\n srcFields = fields;\n }\n var value = {};\n if (fields) {\n var length = fields.length;\n for (var i = 0; i < length; i++) {\n var fieldName = fields[i];\n var srcFieldName = srcFields[i];\n if (srcFieldName !== null) {\n value[fieldName] = getField(srcFieldName, object);\n }\n }\n }\n return value;\n },\n sourceFields: function (series, canonicalFields) {\n var sourceFields = [];\n if (canonicalFields) {\n var length = canonicalFields.length;\n for (var i = 0; i < length; i++) {\n var fieldName = canonicalFields[i];\n var sourceFieldName = fieldName === VALUE ? 'field' : fieldName + 'Field';\n sourceFields.push(series[sourceFieldName] !== null ? series[sourceFieldName] || fieldName : null);\n }\n }\n return sourceFields;\n }\n });\n SeriesBinder.current = new SeriesBinder();\n var STD_ERR = 'stderr';\n var STD_DEV = 'stddev';\n var percentRegex = /percent(?:\\w*)\\((\\d+)\\)/;\n var standardDeviationRegex = new RegExp('^' + STD_DEV + '(?:\\\\((\\\\d+(?:\\\\.\\\\d+)?)\\\\))?$');\n var ErrorRangeCalculator = Class.extend({\n init: function (errorValue, series, field) {\n this.initGlobalRanges(errorValue, series, field);\n },\n initGlobalRanges: function (errorValue, series, field) {\n var data = series.data;\n var deviationMatch = standardDeviationRegex.exec(errorValue);\n if (deviationMatch) {\n this.valueGetter = this.createValueGetter(series, field);\n var average = this.getAverage(data);\n var deviation = this.getStandardDeviation(data, average, false);\n var multiple = deviationMatch[1] ? parseFloat(deviationMatch[1]) : 1;\n var errorRange = {\n low: average.value - deviation * multiple,\n high: average.value + deviation * multiple\n };\n this.globalRange = function () {\n return errorRange;\n };\n } else if (errorValue.indexOf && errorValue.indexOf(STD_ERR) >= 0) {\n this.valueGetter = this.createValueGetter(series, field);\n var standardError = this.getStandardError(data, this.getAverage(data));\n this.globalRange = function (value) {\n return {\n low: value - standardError,\n high: value + standardError\n };\n };\n }\n },\n createValueGetter: function (series, field) {\n var data = series.data;\n var binder = SeriesBinder.current;\n var valueFields = binder.valueFields(series);\n var item = defined(data[0]) ? data[0] : {};\n var valueGetter;\n if (isArray(item)) {\n var index = field ? valueFields.indexOf(field) : 0;\n valueGetter = getter('[' + index + ']');\n } else if (isNumber(item)) {\n valueGetter = getter();\n } else if (typeof item === datavizConstants.OBJECT) {\n var srcValueFields = binder.sourceFields(series, valueFields);\n valueGetter = getter(srcValueFields[valueFields.indexOf(field)]);\n }\n return valueGetter;\n },\n getErrorRange: function (pointValue, errorValue) {\n var low, high, value;\n if (!defined(errorValue)) {\n return null;\n }\n if (this.globalRange) {\n return this.globalRange(pointValue);\n }\n if (isArray(errorValue)) {\n low = pointValue - errorValue[0];\n high = pointValue + errorValue[1];\n } else if (isNumber(value = parseFloat(errorValue))) {\n low = pointValue - value;\n high = pointValue + value;\n } else if (value = percentRegex.exec(errorValue)) {\n var percentValue = pointValue * (parseFloat(value[1]) / 100);\n low = pointValue - Math.abs(percentValue);\n high = pointValue + Math.abs(percentValue);\n } else {\n throw new Error('Invalid ErrorBar value: ' + errorValue);\n }\n return {\n low: low,\n high: high\n };\n },\n getStandardError: function (data, average) {\n return this.getStandardDeviation(data, average, true) / Math.sqrt(average.count);\n },\n getStandardDeviation: function (data, average, isSample) {\n var this$1 = this;\n var length = data.length;\n var total = isSample ? average.count - 1 : average.count;\n var squareDifferenceSum = 0;\n for (var idx = 0; idx < length; idx++) {\n var value = this$1.valueGetter(data[idx]);\n if (isNumber(value)) {\n squareDifferenceSum += Math.pow(value - average.value, 2);\n }\n }\n return Math.sqrt(squareDifferenceSum / total);\n },\n getAverage: function (data) {\n var this$1 = this;\n var length = data.length;\n var sum = 0;\n var count = 0;\n for (var idx = 0; idx < length; idx++) {\n var value = this$1.valueGetter(data[idx]);\n if (isNumber(value)) {\n sum += value;\n count++;\n }\n }\n return {\n value: sum / count,\n count: count\n };\n }\n });\n var browser = support.browser || {};\n var INITIAL_ANIMATION_DURATION = 600;\n var FADEIN = 'fadeIn';\n var GLASS = 'glass';\n var BORDER_BRIGHTNESS = 0.8;\n var TOOLTIP_OFFSET = 5;\n var START_SCALE = browser.msie ? 0.001 : 0;\n var ERROR_LOW_FIELD = 'errorLow';\n var ERROR_HIGH_FIELD = 'errorHigh';\n var X_ERROR_LOW_FIELD = 'xErrorLow';\n var X_ERROR_HIGH_FIELD = 'xErrorHigh';\n var Y_ERROR_LOW_FIELD = 'yErrorLow';\n var Y_ERROR_HIGH_FIELD = 'yErrorHigh';\n var LINE_MARKER_SIZE = 8;\n var ZERO = 'zero';\n var INTERPOLATE = 'interpolate';\n var GAP = 'gap';\n var ABOVE = 'above';\n var BELOW = 'below';\n var SMOOTH = 'smooth';\n var STEP = 'step';\n var AREA = 'area';\n var BAR = 'bar';\n var BOX_PLOT = 'boxPlot';\n var BUBBLE = 'bubble';\n var BULLET = 'bullet';\n var CANDLESTICK = 'candlestick';\n var COLUMN = 'column';\n var DONUT = 'donut';\n var FUNNEL = 'funnel';\n var HORIZONTAL_WATERFALL = 'horizontalWaterfall';\n var LINE = 'line';\n var OHLC = 'ohlc';\n var PIE = 'pie';\n var POLAR_AREA = 'polarArea';\n var POLAR_LINE = 'polarLine';\n var POLAR_SCATTER = 'polarScatter';\n var RADAR_AREA = 'radarArea';\n var RADAR_COLUMN = 'radarColumn';\n var RADAR_LINE = 'radarLine';\n var RANGE_AREA = 'rangeArea';\n var RANGE_BAR = 'rangeBar';\n var RANGE_COLUMN = 'rangeColumn';\n var SCATTER = 'scatter';\n var SCATTER_LINE = 'scatterLine';\n var VERTICAL_AREA = 'verticalArea';\n var VERTICAL_BOX_PLOT = 'verticalBoxPlot';\n var VERTICAL_BULLET = 'verticalBullet';\n var VERTICAL_LINE = 'verticalLine';\n var VERTICAL_RANGE_AREA = 'verticalRangeArea';\n var WATERFALL = 'waterfall';\n var EQUALLY_SPACED_SERIES = [\n BAR,\n COLUMN,\n OHLC,\n CANDLESTICK,\n BOX_PLOT,\n VERTICAL_BOX_PLOT,\n BULLET,\n RANGE_COLUMN,\n RANGE_BAR,\n WATERFALL,\n HORIZONTAL_WATERFALL\n ];\n var LEGEND_ITEM_CLICK = 'legendItemClick';\n var LEGEND_ITEM_HOVER = 'legendItemHover';\n var LEGEND_ITEM_LEAVE = 'legendItemLeave';\n var SERIES_CLICK = 'seriesClick';\n var SERIES_HOVER = 'seriesHover';\n var SERIES_OVER = 'seriesOver';\n var SERIES_LEAVE = 'seriesLeave';\n var PLOT_AREA_CLICK = 'plotAreaClick';\n var PLOT_AREA_HOVER = 'plotAreaHover';\n var PLOT_AREA_LEAVE = 'plotAreaLeave';\n var DRAG = 'drag';\n var DRAG_END = 'dragEnd';\n var DRAG_START = 'dragStart';\n var ZOOM_START = 'zoomStart';\n var ZOOM = 'zoom';\n var ZOOM_END = 'zoomEnd';\n var SELECT_START = 'selectStart';\n var SELECT = 'select';\n var SELECT_END = 'selectEnd';\n var RENDER = 'render';\n var SHOW_TOOLTIP = 'showTooltip';\n var HIDE_TOOLTIP = 'hideTooltip';\n var PANE_RENDER = 'paneRender';\n var LOGARITHMIC = 'log';\n var CATEGORY = 'category';\n var INSIDE_END = 'insideEnd';\n var INSIDE_BASE = 'insideBase';\n var OUTSIDE_END = 'outsideEnd';\n var MOUSEWHEEL = 'DOMMouseScroll mousewheel';\n var MOUSEWHEEL_DELAY = 150;\n var constants = {\n INITIAL_ANIMATION_DURATION: INITIAL_ANIMATION_DURATION,\n FADEIN: FADEIN,\n LEGEND_ITEM_CLICK: LEGEND_ITEM_CLICK,\n LEGEND_ITEM_HOVER: LEGEND_ITEM_HOVER,\n LEGEND_ITEM_LEAVE: LEGEND_ITEM_LEAVE,\n SERIES_CLICK: SERIES_CLICK,\n SERIES_HOVER: SERIES_HOVER,\n SERIES_OVER: SERIES_OVER,\n SERIES_LEAVE: SERIES_LEAVE,\n GLASS: GLASS,\n BORDER_BRIGHTNESS: BORDER_BRIGHTNESS,\n TOOLTIP_OFFSET: TOOLTIP_OFFSET,\n START_SCALE: START_SCALE,\n ERROR_LOW_FIELD: ERROR_LOW_FIELD,\n ERROR_HIGH_FIELD: ERROR_HIGH_FIELD,\n X_ERROR_LOW_FIELD: X_ERROR_LOW_FIELD,\n X_ERROR_HIGH_FIELD: X_ERROR_HIGH_FIELD,\n Y_ERROR_LOW_FIELD: Y_ERROR_LOW_FIELD,\n Y_ERROR_HIGH_FIELD: Y_ERROR_HIGH_FIELD,\n LINE_MARKER_SIZE: LINE_MARKER_SIZE,\n INTERPOLATE: INTERPOLATE,\n ZERO: ZERO,\n SMOOTH: SMOOTH,\n STEP: STEP,\n CATEGORY: CATEGORY,\n FUNNEL: FUNNEL,\n BAR: BAR,\n CANDLESTICK: CANDLESTICK,\n PIE: PIE,\n COLUMN: COLUMN,\n AREA: AREA,\n VERTICAL_BULLET: VERTICAL_BULLET,\n BOX_PLOT: BOX_PLOT,\n OHLC: OHLC,\n WATERFALL: WATERFALL,\n LINE: LINE,\n BULLET: BULLET,\n VERTICAL_LINE: VERTICAL_LINE,\n VERTICAL_AREA: VERTICAL_AREA,\n RANGE_AREA: RANGE_AREA,\n VERTICAL_RANGE_AREA: VERTICAL_RANGE_AREA,\n RANGE_COLUMN: RANGE_COLUMN,\n VERTICAL_BOX_PLOT: VERTICAL_BOX_PLOT,\n RANGE_BAR: RANGE_BAR,\n HORIZONTAL_WATERFALL: HORIZONTAL_WATERFALL,\n SCATTER: SCATTER,\n SCATTER_LINE: SCATTER_LINE,\n BUBBLE: BUBBLE,\n RADAR_AREA: RADAR_AREA,\n RADAR_LINE: RADAR_LINE,\n RADAR_COLUMN: RADAR_COLUMN,\n POLAR_LINE: POLAR_LINE,\n POLAR_AREA: POLAR_AREA,\n POLAR_SCATTER: POLAR_SCATTER,\n RENDER: RENDER,\n PLOT_AREA_CLICK: PLOT_AREA_CLICK,\n PLOT_AREA_HOVER: PLOT_AREA_HOVER,\n PLOT_AREA_LEAVE: PLOT_AREA_LEAVE,\n LOGARITHMIC: LOGARITHMIC,\n DRAG: DRAG,\n DRAG_START: DRAG_START,\n DRAG_END: DRAG_END,\n ZOOM_START: ZOOM_START,\n ZOOM: ZOOM,\n ZOOM_END: ZOOM_END,\n SELECT_START: SELECT_START,\n SELECT: SELECT,\n SELECT_END: SELECT_END,\n PANE_RENDER: PANE_RENDER,\n GAP: GAP,\n DONUT: DONUT,\n INSIDE_END: INSIDE_END,\n INSIDE_BASE: INSIDE_BASE,\n OUTSIDE_END: OUTSIDE_END,\n MOUSEWHEEL: MOUSEWHEEL,\n MOUSEWHEEL_DELAY: MOUSEWHEEL_DELAY,\n SHOW_TOOLTIP: SHOW_TOOLTIP,\n HIDE_TOOLTIP: HIDE_TOOLTIP,\n EQUALLY_SPACED_SERIES: EQUALLY_SPACED_SERIES,\n ABOVE: ABOVE,\n BELOW: BELOW\n };\n var DEFAULT_ERROR_BAR_WIDTH = 4;\n var ErrorBarBase = ChartElement.extend({\n init: function (low, high, isVertical, chart, series, options) {\n ChartElement.fn.init.call(this, options);\n this.low = low;\n this.high = high;\n this.isVertical = isVertical;\n this.chart = chart;\n this.series = series;\n },\n reflow: function (targetBox) {\n var endCaps = this.options.endCaps;\n var isVertical = this.isVertical;\n var axis = this.getAxis();\n var valueBox = axis.getSlot(this.low, this.high);\n var centerBox = targetBox.center();\n var capsWidth = this.getCapsWidth(targetBox, isVertical);\n var capValue = isVertical ? centerBox.x : centerBox.y;\n var capStart = capValue - capsWidth;\n var capEnd = capValue + capsWidth;\n var linePoints;\n if (isVertical) {\n linePoints = [\n new Point(centerBox.x, valueBox.y1),\n new Point(centerBox.x, valueBox.y2)\n ];\n if (endCaps) {\n linePoints.push(new Point(capStart, valueBox.y1), new Point(capEnd, valueBox.y1), new Point(capStart, valueBox.y2), new Point(capEnd, valueBox.y2));\n }\n this.box = new Box(capStart, valueBox.y1, capEnd, valueBox.y2);\n } else {\n linePoints = [\n new Point(valueBox.x1, centerBox.y),\n new Point(valueBox.x2, centerBox.y)\n ];\n if (endCaps) {\n linePoints.push(new Point(valueBox.x1, capStart), new Point(valueBox.x1, capEnd), new Point(valueBox.x2, capStart), new Point(valueBox.x2, capEnd));\n }\n this.box = new Box(valueBox.x1, capStart, valueBox.x2, capEnd);\n }\n this.linePoints = linePoints;\n },\n getCapsWidth: function (box, isVertical) {\n var boxSize = isVertical ? box.width() : box.height();\n var capsWidth = Math.min(Math.floor(boxSize / 2), DEFAULT_ERROR_BAR_WIDTH) || DEFAULT_ERROR_BAR_WIDTH;\n return capsWidth;\n },\n createVisual: function () {\n var this$1 = this;\n var options = this.options;\n var visual = options.visual;\n if (visual) {\n this.visual = visual({\n low: this.low,\n high: this.high,\n rect: this.box.toRect(),\n sender: this.getSender(),\n options: {\n endCaps: options.endCaps,\n color: options.color,\n line: options.line\n },\n createVisual: function () {\n this$1.createDefaultVisual();\n var defaultVisual = this$1.visual;\n delete this$1.visual;\n return defaultVisual;\n }\n });\n } else {\n this.createDefaultVisual();\n }\n },\n createDefaultVisual: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var linePoints = ref.linePoints;\n var lineOptions = {\n stroke: {\n color: options.color,\n width: options.line.width,\n dashType: options.line.dashType\n }\n };\n ChartElement.fn.createVisual.call(this);\n for (var idx = 0; idx < linePoints.length; idx += 2) {\n var line = new Path(lineOptions).moveTo(linePoints[idx].x, linePoints[idx].y).lineTo(linePoints[idx + 1].x, linePoints[idx + 1].y);\n alignPathToPixel(line);\n this$1.visual.append(line);\n }\n }\n });\n setDefaultOptions(ErrorBarBase, {\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n },\n endCaps: true,\n line: { width: 2 },\n zIndex: 1\n });\n var CategoricalErrorBar = ErrorBarBase.extend({\n getAxis: function () {\n var axis = this.chart.seriesValueAxis(this.series);\n return axis;\n }\n });\n var MAX_EXPAND_DEPTH = 5;\n function evalOptions(options, context, state, dryRun) {\n if (state === void 0) {\n state = {};\n }\n if (dryRun === void 0) {\n dryRun = false;\n }\n var defaults = state.defaults = state.defaults || {};\n var depth = state.depth = state.depth || 0;\n var needsEval = false;\n state.excluded = state.excluded || [];\n if (depth > MAX_EXPAND_DEPTH) {\n return null;\n }\n for (var property in options) {\n if (!inArray(property, state.excluded) && options.hasOwnProperty(property)) {\n var propValue = options[property];\n if (isFunction(propValue)) {\n needsEval = true;\n if (!dryRun) {\n options[property] = valueOrDefault(propValue(context), defaults[property]);\n }\n } else if (isObject(propValue)) {\n if (!dryRun) {\n state.defaults = defaults[property];\n }\n state.depth++;\n needsEval = evalOptions(propValue, context, state, dryRun) || needsEval;\n state.depth--;\n }\n }\n }\n return needsEval;\n }\n function categoriesCount(series) {\n var seriesCount = series.length;\n var categories = 0;\n for (var i = 0; i < seriesCount; i++) {\n categories = Math.max(categories, series[i].data.length);\n }\n return categories;\n }\n var CategoricalChart = ChartElement.extend({\n init: function (plotArea, options) {\n ChartElement.fn.init.call(this, options);\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this.categoryAxis = plotArea.seriesCategoryAxis(options.series[0]);\n this.valueAxisRanges = {};\n this.points = [];\n this.categoryPoints = [];\n this.seriesPoints = [];\n this.seriesOptions = [];\n this._evalSeries = [];\n this.render();\n },\n render: function () {\n this.traverseDataPoints(this.addValue.bind(this));\n },\n pointOptions: function (series, seriesIx) {\n var options = this.seriesOptions[seriesIx];\n if (!options) {\n var defaults = this.pointType().prototype.defaults;\n this.seriesOptions[seriesIx] = options = deepExtend({}, defaults, { vertical: !this.options.invertAxes }, series);\n }\n return options;\n },\n plotValue: function (point) {\n if (!point) {\n return 0;\n }\n if (this.options.isStacked100 && isNumber(point.value)) {\n var categoryIx = point.categoryIx;\n var categoryPoints = this.categoryPoints[categoryIx];\n var otherValues = [];\n var categorySum = 0;\n for (var i = 0; i < categoryPoints.length; i++) {\n var other = categoryPoints[i];\n if (other) {\n var stack = point.series.stack;\n var otherStack = other.series.stack;\n if (stack && otherStack && stack.group !== otherStack.group) {\n continue;\n }\n if (isNumber(other.value)) {\n categorySum += Math.abs(other.value);\n otherValues.push(Math.abs(other.value));\n }\n }\n }\n if (categorySum > 0) {\n return point.value / categorySum;\n }\n }\n return point.value;\n },\n plotRange: function (point, startValue) {\n var this$1 = this;\n if (startValue === void 0) {\n startValue = 0;\n }\n var categoryPoints = this.categoryPoints[point.categoryIx];\n if (this.options.isStacked) {\n var plotValue = this.plotValue(point);\n var positive = plotValue >= 0;\n var prevValue = startValue;\n var isStackedBar = false;\n for (var i = 0; i < categoryPoints.length; i++) {\n var other = categoryPoints[i];\n if (point === other) {\n break;\n }\n var stack = point.series.stack;\n var otherStack = other.series.stack;\n if (stack && otherStack) {\n if (typeof stack === datavizConstants.STRING && stack !== otherStack) {\n continue;\n }\n if (stack.group && stack.group !== otherStack.group) {\n continue;\n }\n }\n var otherValue = this$1.plotValue(other);\n if (otherValue >= 0 && positive || otherValue < 0 && !positive) {\n prevValue += otherValue;\n plotValue += otherValue;\n isStackedBar = true;\n if (this$1.options.isStacked100) {\n plotValue = Math.min(plotValue, 1);\n }\n }\n }\n if (isStackedBar) {\n prevValue -= startValue;\n }\n return [\n prevValue,\n plotValue\n ];\n }\n var series = point.series;\n var valueAxis = this.seriesValueAxis(series);\n var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n return [\n axisCrossingValue,\n dataviz.convertableToNumber(point.value) ? point.value : axisCrossingValue\n ];\n },\n stackLimits: function (axisName, stackName) {\n var this$1 = this;\n var min = MAX_VALUE;\n var max = MIN_VALUE;\n for (var i = 0; i < this.categoryPoints.length; i++) {\n var categoryPoints = this$1.categoryPoints[i];\n if (!categoryPoints) {\n continue;\n }\n for (var pIx = 0; pIx < categoryPoints.length; pIx++) {\n var point = categoryPoints[pIx];\n if (point) {\n if (point.series.stack === stackName || point.series.axis === axisName) {\n var to = this$1.plotRange(point, 0)[1];\n if (defined(to) && isFinite(to)) {\n max = Math.max(max, to);\n min = Math.min(min, to);\n }\n }\n }\n }\n }\n return {\n min: min,\n max: max\n };\n },\n updateStackRange: function () {\n var this$1 = this;\n var ref = this.options;\n var isStacked = ref.isStacked;\n var chartSeries = ref.series;\n var limitsCache = {};\n if (isStacked) {\n for (var i = 0; i < chartSeries.length; i++) {\n var series = chartSeries[i];\n var axisName = series.axis;\n var key = axisName + series.stack;\n var limits = limitsCache[key];\n if (!limits) {\n limits = this$1.stackLimits(axisName, series.stack);\n var errorTotals = this$1.errorTotals;\n if (errorTotals) {\n if (errorTotals.negative.length) {\n limits.min = Math.min(limits.min, dataviz.sparseArrayLimits(errorTotals.negative).min);\n }\n if (errorTotals.positive.length) {\n limits.max = Math.max(limits.max, dataviz.sparseArrayLimits(errorTotals.positive).max);\n }\n }\n if (limits.min !== MAX_VALUE || limits.max !== MIN_VALUE) {\n limitsCache[key] = limits;\n } else {\n limits = null;\n }\n }\n if (limits) {\n this$1.valueAxisRanges[axisName] = limits;\n }\n }\n }\n },\n addErrorBar: function (point, data, categoryIx) {\n var value = point.value;\n var series = point.series;\n var seriesIx = point.seriesIx;\n var errorBars = point.options.errorBars;\n var lowValue = data.fields[ERROR_LOW_FIELD];\n var highValue = data.fields[ERROR_HIGH_FIELD];\n var errorRange;\n if (isNumber(lowValue) && isNumber(highValue)) {\n errorRange = {\n low: lowValue,\n high: highValue\n };\n } else if (errorBars && defined(errorBars.value)) {\n this.seriesErrorRanges = this.seriesErrorRanges || [];\n this.seriesErrorRanges[seriesIx] = this.seriesErrorRanges[seriesIx] || new ErrorRangeCalculator(errorBars.value, series, VALUE);\n errorRange = this.seriesErrorRanges[seriesIx].getErrorRange(value, errorBars.value);\n }\n if (errorRange) {\n point.low = errorRange.low;\n point.high = errorRange.high;\n this.addPointErrorBar(point, categoryIx);\n }\n },\n addPointErrorBar: function (point, categoryIx) {\n var isVertical = !this.options.invertAxes;\n var options = point.options.errorBars;\n var series = point.series;\n var low = point.low;\n var high = point.high;\n if (this.options.isStacked) {\n var stackedErrorRange = this.stackedErrorRange(point, categoryIx);\n low = stackedErrorRange.low;\n high = stackedErrorRange.high;\n } else {\n var fields = {\n categoryIx: categoryIx,\n series: series\n };\n this.updateRange({ value: low }, fields);\n this.updateRange({ value: high }, fields);\n }\n var errorBar = new CategoricalErrorBar(low, high, isVertical, this, series, options);\n point.errorBars = [errorBar];\n point.append(errorBar);\n },\n stackedErrorRange: function (point, categoryIx) {\n var plotValue = this.plotRange(point, 0)[1] - point.value;\n var low = point.low + plotValue;\n var high = point.high + plotValue;\n this.errorTotals = this.errorTotals || {\n positive: [],\n negative: []\n };\n if (low < 0) {\n this.errorTotals.negative[categoryIx] = Math.min(this.errorTotals.negative[categoryIx] || 0, low);\n }\n if (high > 0) {\n this.errorTotals.positive[categoryIx] = Math.max(this.errorTotals.positive[categoryIx] || 0, high);\n }\n return {\n low: low,\n high: high\n };\n },\n addValue: function (data, fields) {\n var categoryIx = fields.categoryIx;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var categoryPoints = this.categoryPoints[categoryIx];\n if (!categoryPoints) {\n this.categoryPoints[categoryIx] = categoryPoints = [];\n }\n var seriesPoints = this.seriesPoints[seriesIx];\n if (!seriesPoints) {\n this.seriesPoints[seriesIx] = seriesPoints = [];\n }\n var point = this.createPoint(data, fields);\n if (point) {\n $.extend(point, fields);\n point.owner = this;\n point.noteText = data.fields.noteText;\n if (!defined(point.dataItem)) {\n point.dataItem = series.data[categoryIx];\n }\n this.addErrorBar(point, data, categoryIx);\n }\n this.points.push(point);\n seriesPoints.push(point);\n categoryPoints.push(point);\n this.updateRange(data.valueFields, fields);\n },\n evalPointOptions: function (options, value, category, categoryIx, series, seriesIx) {\n var state = {\n defaults: series._defaults,\n excluded: [\n 'data',\n 'aggregate',\n '_events',\n 'tooltip',\n 'content',\n 'template',\n 'visual',\n 'toggle',\n '_outOfRangeMinPoint',\n '_outOfRangeMaxPoint'\n ]\n };\n var doEval = this._evalSeries[seriesIx];\n if (!defined(doEval)) {\n this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\n }\n var pointOptions = options;\n if (doEval) {\n pointOptions = deepExtend({}, pointOptions);\n evalOptions(pointOptions, {\n value: value,\n category: category,\n index: categoryIx,\n series: series,\n dataItem: series.data[categoryIx]\n }, state);\n }\n return pointOptions;\n },\n updateRange: function (data, fields) {\n var axisName = fields.series.axis;\n var value = data.value;\n var axisRange = this.valueAxisRanges[axisName];\n if (isFinite(value) && value !== null) {\n axisRange = this.valueAxisRanges[axisName] = axisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n axisRange.min = Math.min(axisRange.min, value);\n axisRange.max = Math.max(axisRange.max, value);\n }\n },\n seriesValueAxis: function (series) {\n var plotArea = this.plotArea;\n var axisName = series.axis;\n var axis = axisName ? plotArea.namedValueAxes[axisName] : plotArea.valueAxis;\n if (!axis) {\n throw new Error('Unable to locate value axis with name ' + axisName);\n }\n return axis;\n },\n reflow: function (targetBox) {\n var this$1 = this;\n var categorySlots = this.categorySlots = [];\n var chartPoints = this.points;\n var categoryAxis = this.categoryAxis;\n var pointIx = 0;\n this.traverseDataPoints(function (data, fields) {\n var categoryIx = fields.categoryIx;\n var currentSeries = fields.series;\n var valueAxis = this$1.seriesValueAxis(currentSeries);\n var point = chartPoints[pointIx++];\n var categorySlot = categorySlots[categoryIx];\n if (!categorySlot) {\n categorySlots[categoryIx] = categorySlot = this$1.categorySlot(categoryAxis, categoryIx, valueAxis);\n }\n if (point) {\n var plotRange = this$1.plotRange(point, valueAxis.startValue());\n var valueSlot = this$1.valueSlot(valueAxis, plotRange);\n if (valueSlot) {\n var pointSlot = this$1.pointSlot(categorySlot, valueSlot);\n point.aboveAxis = this$1.aboveAxis(point, valueAxis);\n point.stackValue = plotRange[1];\n if (this$1.options.isStacked100) {\n point.percentage = this$1.plotValue(point);\n }\n this$1.reflowPoint(point, pointSlot);\n } else {\n point.visible = false;\n }\n }\n });\n this.reflowCategories(categorySlots);\n if (!this.options.clip && this.options.limitPoints && this.points.length) {\n this.limitPoints();\n }\n this.box = targetBox;\n },\n valueSlot: function (valueAxis, plotRange) {\n return valueAxis.getSlot(plotRange[0], plotRange[1], !this.options.clip);\n },\n limitPoints: function () {\n var this$1 = this;\n var categoryPoints = this.categoryPoints;\n var points = categoryPoints[0].concat(last(categoryPoints));\n for (var idx = 0; idx < points.length; idx++) {\n if (points[idx]) {\n this$1.limitPoint(points[idx]);\n }\n }\n },\n limitPoint: function (point) {\n var limittedSlot = this.categoryAxis.limitSlot(point.box);\n if (!limittedSlot.equals(point.box)) {\n point.reflow(limittedSlot);\n }\n },\n aboveAxis: function (point, valueAxis) {\n var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n var value = point.value;\n return valueAxis.options.reverse ? value < axisCrossingValue : value >= axisCrossingValue;\n },\n categoryAxisCrossingValue: function (valueAxis) {\n var categoryAxis = this.categoryAxis;\n var options = valueAxis.options;\n var crossingValues = [].concat(options.axisCrossingValues || options.axisCrossingValue);\n return crossingValues[categoryAxis.axisIndex || 0] || 0;\n },\n reflowPoint: function (point, pointSlot) {\n point.reflow(pointSlot);\n },\n reflowCategories: function () {\n },\n pointSlot: function (categorySlot, valueSlot) {\n var options = this.options;\n var invertAxes = options.invertAxes;\n var slotX = invertAxes ? valueSlot : categorySlot;\n var slotY = invertAxes ? categorySlot : valueSlot;\n return new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\n },\n categorySlot: function (categoryAxis, categoryIx) {\n return categoryAxis.getSlot(categoryIx);\n },\n traverseDataPoints: function (callback) {\n var this$1 = this;\n var series = this.options.series;\n var count = categoriesCount(series);\n var seriesCount = series.length;\n for (var seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n this$1._outOfRangeCallback(series[seriesIx], '_outOfRangeMinPoint', seriesIx, callback);\n }\n for (var categoryIx = 0; categoryIx < count; categoryIx++) {\n for (var seriesIx$1 = 0; seriesIx$1 < seriesCount; seriesIx$1++) {\n var currentSeries = series[seriesIx$1];\n var currentCategory = this$1.categoryAxis.categoryAt(categoryIx);\n var pointData = this$1._bindPoint(currentSeries, seriesIx$1, categoryIx);\n callback(pointData, {\n category: currentCategory,\n categoryIx: categoryIx,\n series: currentSeries,\n seriesIx: seriesIx$1\n });\n }\n }\n for (var seriesIx$2 = 0; seriesIx$2 < seriesCount; seriesIx$2++) {\n this$1._outOfRangeCallback(series[seriesIx$2], '_outOfRangeMaxPoint', seriesIx$2, callback);\n }\n },\n _outOfRangeCallback: function (series, field, seriesIx, callback) {\n var outOfRangePoint = series[field];\n if (outOfRangePoint) {\n var categoryIx = outOfRangePoint.categoryIx;\n var pointData = this._bindPoint(series, seriesIx, categoryIx, outOfRangePoint.item);\n callback(pointData, {\n category: outOfRangePoint.category,\n categoryIx: categoryIx,\n series: series,\n seriesIx: seriesIx,\n dataItem: outOfRangePoint.item\n });\n }\n },\n _bindPoint: function (series, seriesIx, categoryIx, item) {\n if (!this._bindCache) {\n this._bindCache = [];\n }\n var bindCache = this._bindCache[seriesIx];\n if (!bindCache) {\n bindCache = this._bindCache[seriesIx] = [];\n }\n var data = bindCache[categoryIx];\n if (!data) {\n data = bindCache[categoryIx] = SeriesBinder.current.bindPoint(series, categoryIx, item);\n }\n return data;\n },\n formatPointValue: function (point, format) {\n if (point.value === null) {\n return '';\n }\n return this.chartService.format.auto(format, point.value);\n },\n pointValue: function (data) {\n return data.valueFields.value;\n }\n });\n setDefaultOptions(CategoricalChart, {\n series: [],\n invertAxes: false,\n isStacked: false,\n clip: true,\n limitPoints: true\n });\n var PointEventsMixin = {\n click: function (chart, e) {\n return chart.trigger(SERIES_CLICK, this.eventArgs(e));\n },\n hover: function (chart, e) {\n return chart.trigger(SERIES_HOVER, this.eventArgs(e));\n },\n over: function (chart, e) {\n return chart.trigger(SERIES_OVER, this.eventArgs(e));\n },\n out: function (chart, e) {\n return chart.trigger(SERIES_LEAVE, this.eventArgs(e));\n },\n eventArgs: function (e) {\n return {\n value: this.value,\n percentage: this.percentage,\n stackValue: this.stackValue,\n category: this.category,\n series: this.series,\n dataItem: this.dataItem,\n runningTotal: this.runningTotal,\n total: this.total,\n element: eventElement(e),\n originalEvent: e,\n point: this\n };\n }\n };\n var NoteMixin = {\n createNote: function () {\n var options = this.options.notes;\n var text = this.noteText || options.label.text;\n if (options.visible !== false && defined(text) && text !== null) {\n this.note = new dataviz.Note({\n value: this.value,\n text: text,\n dataItem: this.dataItem,\n category: this.category,\n series: this.series\n }, this.options.notes, this.owner.chartService);\n this.append(this.note);\n }\n }\n };\n var LinePoint = ChartElement.extend({\n init: function (value, options) {\n ChartElement.fn.init.call(this);\n this.value = value;\n this.options = options;\n this.aboveAxis = valueOrDefault(this.options.aboveAxis, true);\n this.tooltipTracking = true;\n },\n render: function () {\n var ref = this.options;\n var markers = ref.markers;\n var labels = ref.labels;\n if (this._rendered) {\n return;\n }\n this._rendered = true;\n if (markers.visible && markers.size) {\n this.marker = this.createMarker();\n this.append(this.marker);\n }\n if (labels.visible) {\n var labelTemplate = getTemplate(labels);\n var pointData = this.pointData();\n var labelText = this.value;\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else if (labels.format) {\n labelText = this.formatValue(labels.format);\n }\n this.label = new TextBox(labelText, deepExtend({\n align: CENTER,\n vAlign: CENTER,\n margin: {\n left: 5,\n right: 5\n },\n zIndex: valueOrDefault(labels.zIndex, this.series.zIndex)\n }, labels), pointData);\n this.append(this.label);\n }\n this.createNote();\n if (this.errorBar) {\n this.append(this.errorBar);\n }\n },\n markerBorder: function () {\n var options = this.options.markers;\n var background = options.background;\n var border = deepExtend({ color: this.color }, options.border);\n if (!defined(border.color)) {\n border.color = new Color(background).brightness(BORDER_BRIGHTNESS).toHex();\n }\n return border;\n },\n createVisual: function () {\n },\n createMarker: function () {\n var options = this.options.markers;\n var marker = new ShapeElement({\n type: options.type,\n width: options.size,\n height: options.size,\n rotation: options.rotation,\n background: options.background,\n border: this.markerBorder(),\n opacity: options.opacity,\n zIndex: valueOrDefault(options.zIndex, this.series.zIndex),\n animation: options.animation,\n visual: options.visual\n }, {\n dataItem: this.dataItem,\n value: this.value,\n series: this.series,\n category: this.category\n });\n return marker;\n },\n markerBox: function () {\n if (!this.marker) {\n this.marker = this.createMarker();\n this.marker.reflow(this._childBox);\n }\n return this.marker.box;\n },\n reflow: function (targetBox) {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var aboveAxis = ref.aboveAxis;\n var vertical = options.vertical;\n this.render();\n this.box = targetBox;\n var childBox = targetBox.clone();\n if (vertical) {\n if (aboveAxis) {\n childBox.y1 -= childBox.height();\n } else {\n childBox.y2 += childBox.height();\n }\n } else {\n if (aboveAxis) {\n childBox.x1 += childBox.width();\n } else {\n childBox.x2 -= childBox.width();\n }\n }\n this._childBox = childBox;\n if (this.marker) {\n this.marker.reflow(childBox);\n }\n this.reflowLabel(childBox);\n if (this.errorBars) {\n for (var i = 0; i < this.errorBars.length; i++) {\n this$1.errorBars[i].reflow(childBox);\n }\n }\n if (this.note) {\n var noteTargetBox = this.markerBox();\n if (!(options.markers.visible && options.markers.size)) {\n var center = noteTargetBox.center();\n noteTargetBox = new Box(center.x, center.y, center.x, center.y);\n }\n this.note.reflow(noteTargetBox);\n }\n },\n reflowLabel: function (box) {\n var ref = this;\n var options = ref.options;\n var label = ref.label;\n var anchor = options.labels.position;\n if (label) {\n anchor = anchor === ABOVE ? TOP : anchor;\n anchor = anchor === BELOW ? BOTTOM : anchor;\n label.reflow(box);\n label.box.alignTo(this.markerBox(), anchor);\n label.reflow(label.box);\n }\n },\n createHighlight: function () {\n var markers = this.options.highlight.markers;\n var defaultColor = this.markerBorder().color;\n var options = this.options.markers;\n var size = options.size + (options.border.width || 0) + (markers.border.width || 0);\n var shadow = new ShapeElement({\n type: options.type,\n width: size,\n height: size,\n rotation: options.rotation,\n background: markers.color || defaultColor,\n border: {\n color: markers.border.color,\n width: markers.border.width,\n opacity: valueOrDefault(markers.border.opacity, 1)\n },\n opacity: valueOrDefault(markers.opacity, 1)\n });\n shadow.reflow(this._childBox);\n return shadow.getElement();\n },\n highlightVisual: function () {\n return (this.marker || {}).visual;\n },\n highlightVisualArgs: function () {\n var marker = this.marker;\n var visual, rect;\n if (marker) {\n rect = marker.paddingBox.toRect();\n visual = marker.visual;\n } else {\n var size = this.options.markers.size;\n var halfSize = size / 2;\n var center = this.box.center();\n rect = new geometry.Rect([\n center.x - halfSize,\n center.y - halfSize\n ], [\n size,\n size\n ]);\n }\n return {\n options: this.options,\n rect: rect,\n visual: visual\n };\n },\n tooltipAnchor: function () {\n var markerBox = this.markerBox();\n var clipBox = this.owner.pane.clipBox();\n var showTooltip = !clipBox || clipBox.overlaps(markerBox);\n if (showTooltip) {\n var x = markerBox.x2 + TOOLTIP_OFFSET;\n var horizontalAlign = LEFT;\n var y, verticalAlign;\n if (this.aboveAxis) {\n y = markerBox.y1;\n verticalAlign = BOTTOM;\n } else {\n y = markerBox.y2;\n verticalAlign = TOP;\n }\n return {\n point: new Point(x, y),\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n }\n },\n formatValue: function (format) {\n return this.owner.formatPointValue(this, format);\n },\n overlapsBox: function (box) {\n var markerBox = this.markerBox();\n return markerBox.overlaps(box);\n },\n unclipElements: function () {\n if (this.label) {\n this.label.options.noclip = true;\n }\n if (this.note) {\n this.note.options.noclip = true;\n }\n },\n pointData: function () {\n return {\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n percentage: this.percentage,\n stackValue: this.stackValue,\n series: this.series\n };\n }\n });\n LinePoint.prototype.defaults = {\n vertical: true,\n markers: {\n visible: true,\n background: WHITE,\n size: LINE_MARKER_SIZE,\n type: CIRCLE,\n border: { width: 2 },\n opacity: 1\n },\n labels: {\n visible: false,\n position: ABOVE,\n margin: getSpacing(3),\n padding: getSpacing(4),\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n }\n },\n notes: { label: {} },\n highlight: {\n markers: {\n border: {\n color: '#fff',\n width: 2\n }\n },\n zIndex: datavizConstants.HIGHLIGHT_ZINDEX\n },\n errorBars: { line: { width: 1 } }\n };\n deepExtend(LinePoint.prototype, PointEventsMixin);\n deepExtend(LinePoint.prototype, NoteMixin);\n var LineSegment = ChartElement.extend({\n init: function (linePoints, series, seriesIx) {\n ChartElement.fn.init.call(this);\n this.linePoints = linePoints;\n this.series = series;\n this.seriesIx = seriesIx;\n },\n points: function () {\n return this.toGeometryPoints(this.linePoints);\n },\n toGeometryPoints: function (points) {\n var result = [];\n for (var i = 0, length = points.length; i < length; i++) {\n if (points[i] && points[i].visible !== false) {\n result.push(points[i]._childBox.toRect().center());\n }\n }\n return result;\n },\n createVisual: function () {\n var this$1 = this;\n var customVisual = this.series.visual;\n if (customVisual) {\n this.visual = customVisual({\n points: this.toGeometryPoints(this.linePoints),\n series: this.series,\n sender: this.getSender(),\n createVisual: function () {\n this$1.segmentVisual();\n return this$1.visual;\n }\n });\n if (this.visual && !defined(this.visual.options.zIndex)) {\n this.visual.options.zIndex = this.series.zIndex;\n }\n } else {\n this.segmentVisual();\n }\n },\n segmentVisual: function () {\n var ref = this;\n var options = ref.options;\n var series = ref.series;\n var color = series.color;\n var defaults = series._defaults;\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n var line = Path.fromPoints(this.points(), {\n stroke: {\n color: color,\n width: series.width,\n opacity: series.opacity,\n dashType: series.dashType\n },\n zIndex: series.zIndex\n });\n if (options.closed) {\n line.close();\n }\n this.visual = line;\n },\n aliasFor: function (e, coords) {\n return this.parent.getNearestPoint(coords.x, coords.y, this.seriesIx);\n }\n });\n setDefaultOptions(LineSegment, { closed: false });\n var StepLineMixin = {\n calculateStepPoints: function (points) {\n var categoryAxis = this.parent.plotArea.seriesCategoryAxis(this.series);\n var ref = categoryAxis.options;\n var justified = ref.justified;\n var vertical = ref.vertical;\n var reverse = ref.reverse;\n var stepAxis = vertical ? X : Y;\n var axis = vertical ? Y : X;\n var stepDir = reverse ? 2 : 1;\n var dir = stepDir;\n var previousPoint = toGeometryPoint(points[0], stepAxis, stepDir, axis, dir);\n var result = [previousPoint];\n for (var idx = 1; idx < points.length; idx++) {\n var point = toGeometryPoint(points[idx], stepAxis, stepDir, axis, dir);\n if (previousPoint[stepAxis] !== point[stepAxis]) {\n var stepPoint = new GeometryPoint();\n stepPoint[stepAxis] = previousPoint[stepAxis];\n stepPoint[axis] = point[axis];\n result.push(stepPoint, point);\n }\n previousPoint = point;\n }\n if (!justified) {\n result.push(toGeometryPoint(last(points), stepAxis, stepDir, axis, reverse ? 1 : 2));\n } else if (previousPoint !== last(result)) {\n result.push(previousPoint);\n }\n return result;\n }\n };\n function toGeometryPoint(lintPoint, stepAxis, stepDir, axis, dir) {\n var box = lintPoint.box;\n var result = new GeometryPoint();\n result[stepAxis] = box[stepAxis + stepDir];\n result[axis] = box[axis + dir];\n return result;\n }\n var StepLineSegment = LineSegment.extend({\n points: function () {\n return this.calculateStepPoints(this.linePoints);\n }\n });\n deepExtend(StepLineSegment.prototype, StepLineMixin);\n var SplineSegment = LineSegment.extend({\n segmentVisual: function () {\n var series = this.series;\n var defaults = series._defaults;\n var color = series.color;\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n var curveProcessor = new CurveProcessor(this.options.closed);\n var segments = curveProcessor.process(this.points());\n var curve = new Path({\n stroke: {\n color: color,\n width: series.width,\n opacity: series.opacity,\n dashType: series.dashType\n },\n zIndex: series.zIndex\n });\n curve.segments.push.apply(curve.segments, segments);\n this.visual = curve;\n }\n });\n var LineChartMixin = {\n renderSegments: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var seriesPoints = ref.seriesPoints;\n var series = options.series;\n var seriesCount = seriesPoints.length;\n var lastSegment;\n this._segments = [];\n for (var seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n var currentSeries = series[seriesIx];\n var sortedPoints = this$1.sortPoints(seriesPoints[seriesIx]);\n var pointCount = sortedPoints.length;\n var linePoints = [];\n for (var pointIx = 0; pointIx < pointCount; pointIx++) {\n var point = sortedPoints[pointIx];\n if (point) {\n linePoints.push(point);\n } else if (this$1.seriesMissingValues(currentSeries) !== INTERPOLATE) {\n if (linePoints.length > 1) {\n lastSegment = this$1.createSegment(linePoints, currentSeries, seriesIx, lastSegment);\n this$1._addSegment(lastSegment);\n }\n linePoints = [];\n }\n }\n if (linePoints.length > 1) {\n lastSegment = this$1.createSegment(linePoints, currentSeries, seriesIx, lastSegment);\n this$1._addSegment(lastSegment);\n }\n }\n this.children.unshift.apply(this.children, this._segments);\n },\n _addSegment: function (segment) {\n this._segments.push(segment);\n segment.parent = this;\n },\n sortPoints: function (points) {\n return points;\n },\n seriesMissingValues: function (series) {\n var missingValues = series.missingValues;\n var assumeZero = !missingValues && this.options.isStacked;\n return assumeZero ? ZERO : missingValues || INTERPOLATE;\n },\n getNearestPoint: function (x, y, seriesIx) {\n var target = new Point(x, y);\n var allPoints = this.seriesPoints[seriesIx];\n var nearestPointDistance = MAX_VALUE;\n var nearestPoint;\n for (var i = 0; i < allPoints.length; i++) {\n var point = allPoints[i];\n if (point && defined(point.value) && point.value !== null && point.visible !== false) {\n var pointBox = point.box;\n var pointDistance = pointBox.center().distanceTo(target);\n if (pointDistance < nearestPointDistance) {\n nearestPoint = point;\n nearestPointDistance = pointDistance;\n }\n }\n }\n return nearestPoint;\n }\n };\n var ClipAnimation = Animation.extend({\n setup: function () {\n this._setEnd(this.options.box.x1);\n },\n step: function (pos) {\n var box = this.options.box;\n this._setEnd(dataviz.interpolateValue(box.x1, box.x2, pos));\n },\n _setEnd: function (x) {\n var element = this.element;\n var segments = element.segments;\n var topRight = segments[1].anchor();\n var bottomRight = segments[2].anchor();\n element.suspend();\n topRight.setX(x);\n element.resume();\n bottomRight.setX(x);\n }\n });\n setDefaultOptions(ClipAnimation, { duration: INITIAL_ANIMATION_DURATION });\n AnimationFactory.current.register('clip', ClipAnimation);\n function anyHasZIndex(elements) {\n for (var idx = 0; idx < elements.length; idx++) {\n if (defined(elements[idx].zIndex)) {\n return true;\n }\n }\n }\n var ClipAnimationMixin = {\n createAnimation: function () {\n var root = this.getRoot();\n if (root && (root.options || {}).transitions !== false) {\n var box = root.size();\n var clipPath = Path.fromRect(box.toRect());\n this.visual.clip(clipPath);\n this.animation = new ClipAnimation(clipPath, { box: box });\n if (anyHasZIndex(this.options.series)) {\n this._setChildrenAnimation(clipPath);\n }\n }\n },\n _setChildrenAnimation: function (clipPath) {\n var points = this.animationPoints();\n for (var idx = 0; idx < points.length; idx++) {\n var point = points[idx];\n if (point && point.visual && defined(point.visual.options.zIndex)) {\n point.visual.clip(clipPath);\n }\n }\n }\n };\n var LineChart = CategoricalChart.extend({\n render: function () {\n CategoricalChart.fn.render.call(this);\n this.updateStackRange();\n this.renderSegments();\n },\n pointType: function () {\n return LinePoint;\n },\n createPoint: function (data, fields) {\n var categoryIx = fields.categoryIx;\n var category = fields.category;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var missingValues = this.seriesMissingValues(series);\n var value = data.valueFields.value;\n if (!defined(value) || value === null) {\n if (missingValues === ZERO) {\n value = 0;\n } else {\n return null;\n }\n }\n var pointOptions = this.pointOptions(series, seriesIx);\n pointOptions = this.evalPointOptions(pointOptions, value, category, categoryIx, series, seriesIx);\n var color = data.fields.color || series.color;\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n var point = new LinePoint(value, pointOptions);\n point.color = color;\n this.append(point);\n return point;\n },\n plotRange: function (point) {\n var this$1 = this;\n var plotValue = this.plotValue(point);\n if (this.options.isStacked) {\n var categoryIx = point.categoryIx;\n var categoryPoints = this.categoryPoints[categoryIx];\n for (var i = 0; i < categoryPoints.length; i++) {\n var other = categoryPoints[i];\n if (point === other) {\n break;\n }\n plotValue += this$1.plotValue(other);\n if (this$1.options.isStacked100) {\n plotValue = Math.min(plotValue, 1);\n }\n }\n }\n return [\n plotValue,\n plotValue\n ];\n },\n createSegment: function (linePoints, currentSeries, seriesIx) {\n var style = currentSeries.style;\n var pointType;\n if (style === STEP) {\n pointType = StepLineSegment;\n } else if (style === SMOOTH) {\n pointType = SplineSegment;\n } else {\n pointType = LineSegment;\n }\n return new pointType(linePoints, currentSeries, seriesIx);\n },\n animationPoints: function () {\n var points = this.points;\n var result = [];\n for (var idx = 0; idx < points.length; idx++) {\n result.push((points[idx] || {}).marker);\n }\n return result.concat(this._segments);\n }\n });\n deepExtend(LineChart.prototype, LineChartMixin, ClipAnimationMixin);\n var AreaSegment = LineSegment.extend({\n init: function (linePoints, currentSeries, seriesIx, prevSegment, stackPoints) {\n LineSegment.fn.init.call(this, linePoints, currentSeries, seriesIx);\n this.prevSegment = prevSegment;\n this.stackPoints = stackPoints;\n },\n createVisual: function () {\n var series = this.series;\n var defaults = series._defaults;\n var lineOptions = series.line || {};\n var color = series.color;\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n this.visual = new Group({ zIndex: series.zIndex });\n this.createFill({\n fill: {\n color: color,\n opacity: series.opacity\n },\n stroke: null\n });\n if (lineOptions.width > 0 && lineOptions.visible !== false) {\n this.createStroke({\n stroke: deepExtend({\n color: color,\n opacity: series.opacity,\n lineCap: 'butt'\n }, lineOptions)\n });\n }\n },\n strokeSegments: function () {\n var segments = this._strokeSegments;\n if (!segments) {\n segments = this._strokeSegments = this.createStrokeSegments();\n }\n return segments;\n },\n createStrokeSegments: function () {\n return this.segmentsFromPoints(this.points());\n },\n stackSegments: function () {\n if (this.prevSegment) {\n return this.prevSegment.createStackSegments(this.stackPoints);\n }\n return this.createStackSegments(this.stackPoints);\n },\n createStackSegments: function (stackPoints) {\n return this.segmentsFromPoints(this.toGeometryPoints(stackPoints)).reverse();\n },\n segmentsFromPoints: function (points) {\n return points.map(function (point) {\n return new geometry.Segment(point);\n });\n },\n createStroke: function (style) {\n var stroke = new Path(style);\n stroke.segments.push.apply(stroke.segments, this.strokeSegments());\n this.visual.append(stroke);\n },\n hasStackSegment: function () {\n return this.prevSegment || this.stackPoints && this.stackPoints.length;\n },\n createFill: function (style) {\n var strokeSegments = this.strokeSegments();\n var fillSegments = strokeSegments.slice(0);\n var hasStackSegments = this.hasStackSegment();\n if (hasStackSegments) {\n var stackSegments = this.stackSegments();\n append(fillSegments, stackSegments);\n }\n var fill = new Path(style);\n fill.segments.push.apply(fill.segments, fillSegments);\n if (!hasStackSegments && strokeSegments.length > 1) {\n this.fillToAxes(fill);\n }\n this.visual.append(fill);\n },\n fillToAxes: function (fillPath) {\n var chart = this.parent;\n var invertAxes = chart.options.invertAxes;\n var valueAxis = chart.seriesValueAxis(this.series);\n var crossingValue = chart.categoryAxisCrossingValue(valueAxis);\n var endSlot = valueAxis.getSlot(crossingValue, crossingValue, true);\n var segments = this.strokeSegments();\n var firstPoint = segments[0].anchor();\n var lastPoint = last(segments).anchor();\n var end = invertAxes ? endSlot.x1 : endSlot.y1;\n if (invertAxes) {\n fillPath.lineTo(end, lastPoint.y).lineTo(end, firstPoint.y);\n } else {\n fillPath.lineTo(lastPoint.x, end).lineTo(firstPoint.x, end);\n }\n }\n });\n var StepAreaSegment = AreaSegment.extend({\n createStrokeSegments: function () {\n return this.segmentsFromPoints(this.calculateStepPoints(this.linePoints));\n },\n createStackSegments: function (stackPoints) {\n return this.segmentsFromPoints(this.calculateStepPoints(stackPoints)).reverse();\n }\n });\n deepExtend(StepAreaSegment.prototype, StepLineMixin);\n var SplineAreaSegment = AreaSegment.extend({\n createStrokeSegments: function () {\n var curveProcessor = new CurveProcessor(this.options.closed);\n var linePoints = this.points();\n return curveProcessor.process(linePoints);\n },\n createStackSegments: function () {\n var strokeSegments = this.strokeSegments();\n var stackSegments = [];\n for (var idx = strokeSegments.length - 1; idx >= 0; idx--) {\n var segment = strokeSegments[idx];\n stackSegments.push(new geometry.Segment(segment.anchor(), segment.controlOut(), segment.controlIn()));\n }\n return stackSegments;\n }\n });\n var AreaChart = LineChart.extend({\n createSegment: function (linePoints, currentSeries, seriesIx, prevSegment) {\n var isStacked = this.options.isStacked;\n var style = (currentSeries.line || {}).style;\n var previousSegment;\n var stackPoints;\n if (isStacked && seriesIx > 0 && prevSegment) {\n var missingValues = this.seriesMissingValues(currentSeries);\n if (missingValues !== 'gap') {\n stackPoints = prevSegment.linePoints;\n previousSegment = prevSegment;\n } else {\n stackPoints = this._gapStackPoints(linePoints, seriesIx, style);\n }\n }\n var pointType;\n if (style === STEP) {\n pointType = StepAreaSegment;\n } else if (style === SMOOTH) {\n pointType = SplineAreaSegment;\n } else {\n pointType = AreaSegment;\n }\n return new pointType(linePoints, currentSeries, seriesIx, previousSegment, stackPoints);\n },\n reflow: function (targetBox) {\n var this$1 = this;\n LineChart.fn.reflow.call(this, targetBox);\n var stackPoints = this._stackPoints;\n if (stackPoints) {\n for (var idx = 0; idx < stackPoints.length; idx++) {\n var stackPoint = stackPoints[idx];\n var pointSlot = this$1.categoryAxis.getSlot(stackPoint.categoryIx);\n stackPoint.reflow(pointSlot);\n }\n }\n },\n _gapStackPoints: function (linePoints, seriesIx, style) {\n var this$1 = this;\n var seriesPoints = this.seriesPoints;\n var startIdx = linePoints[0].categoryIx;\n var length = linePoints.length;\n if (startIdx < 0) {\n startIdx = 0;\n length--;\n }\n var endIdx = startIdx + length;\n var pointOffset = this.seriesOptions[0]._outOfRangeMinPoint ? 1 : 0;\n var stackPoints = [];\n this._stackPoints = this._stackPoints || [];\n for (var categoryIx = startIdx; categoryIx < endIdx; categoryIx++) {\n var pointIx = categoryIx + pointOffset;\n var currentSeriesIx = seriesIx;\n var point = void 0;\n do {\n currentSeriesIx--;\n point = seriesPoints[currentSeriesIx][pointIx];\n } while (currentSeriesIx > 0 && !point);\n if (point) {\n if (style !== STEP && categoryIx > startIdx && !seriesPoints[currentSeriesIx][pointIx - 1]) {\n stackPoints.push(this$1._previousSegmentPoint(categoryIx, pointIx, pointIx - 1, currentSeriesIx));\n }\n stackPoints.push(point);\n if (style !== STEP && categoryIx + 1 < endIdx && !seriesPoints[currentSeriesIx][pointIx + 1]) {\n stackPoints.push(this$1._previousSegmentPoint(categoryIx, pointIx, pointIx + 1, currentSeriesIx));\n }\n } else {\n var gapStackPoint = this$1._createGapStackPoint(categoryIx);\n this$1._stackPoints.push(gapStackPoint);\n stackPoints.push(gapStackPoint);\n }\n }\n return stackPoints;\n },\n _previousSegmentPoint: function (categoryIx, pointIx, segmentIx, seriesIdx) {\n var seriesPoints = this.seriesPoints;\n var index = seriesIdx;\n var point;\n while (index > 0 && !point) {\n index--;\n point = seriesPoints[index][segmentIx];\n }\n if (!point) {\n point = this._createGapStackPoint(categoryIx);\n this._stackPoints.push(point);\n } else {\n point = seriesPoints[index][pointIx];\n }\n return point;\n },\n _createGapStackPoint: function (categoryIx) {\n var options = this.pointOptions({}, 0);\n var point = new LinePoint(0, options);\n point.categoryIx = categoryIx;\n point.series = {};\n return point;\n },\n seriesMissingValues: function (series) {\n return series.missingValues || ZERO;\n }\n });\n var AxisGroupRangeTracker = Class.extend({\n init: function () {\n this.axisRanges = {};\n },\n update: function (chartAxisRanges) {\n var axisRanges = this.axisRanges;\n for (var axisName in chartAxisRanges) {\n var chartRange = chartAxisRanges[axisName];\n var range = axisRanges[axisName];\n axisRanges[axisName] = range = range || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n range.min = Math.min(range.min, chartRange.min);\n range.max = Math.max(range.max, chartRange.max);\n }\n },\n reset: function (axisName) {\n this.axisRanges[axisName] = undefined;\n },\n query: function (axisName) {\n return this.axisRanges[axisName];\n }\n });\n var BarLabel = ChartElement.extend({\n init: function (content, options, pointData) {\n ChartElement.fn.init.call(this, options);\n this.textBox = new TextBox(content, this.options, pointData);\n this.append(this.textBox);\n },\n createVisual: function () {\n this.textBox.options.noclip = this.options.noclip;\n },\n reflow: function (targetBox) {\n var options = this.options;\n var vertical = options.vertical;\n var aboveAxis = options.aboveAxis;\n var text = this.children[0];\n var textOptions = text.options;\n var box = text.box;\n var padding = text.options.padding;\n var labelBox = targetBox;\n textOptions.align = vertical ? CENTER : LEFT;\n textOptions.vAlign = vertical ? TOP : CENTER;\n if (options.position === INSIDE_END) {\n if (vertical) {\n textOptions.vAlign = TOP;\n if (!aboveAxis && box.height() < targetBox.height()) {\n textOptions.vAlign = BOTTOM;\n }\n } else {\n textOptions.align = aboveAxis ? RIGHT : LEFT;\n }\n } else if (options.position === CENTER) {\n textOptions.vAlign = CENTER;\n textOptions.align = CENTER;\n } else if (options.position === INSIDE_BASE) {\n if (vertical) {\n textOptions.vAlign = aboveAxis ? BOTTOM : TOP;\n } else {\n textOptions.align = aboveAxis ? LEFT : RIGHT;\n }\n } else if (options.position === OUTSIDE_END) {\n if (vertical) {\n if (aboveAxis) {\n labelBox = new Box(targetBox.x1, targetBox.y1 - box.height(), targetBox.x2, targetBox.y1);\n } else {\n labelBox = new Box(targetBox.x1, targetBox.y2, targetBox.x2, targetBox.y2 + box.height());\n }\n } else {\n textOptions.align = CENTER;\n if (aboveAxis) {\n labelBox = new Box(targetBox.x2, targetBox.y1, targetBox.x2 + box.width(), targetBox.y2);\n } else {\n labelBox = new Box(targetBox.x1 - box.width(), targetBox.y1, targetBox.x1, targetBox.y2);\n }\n }\n }\n if (!options.rotation) {\n if (vertical) {\n padding.left = padding.right = (labelBox.width() - text.contentBox.width()) / 2;\n } else {\n padding.top = padding.bottom = (labelBox.height() - text.contentBox.height()) / 2;\n }\n }\n text.reflow(labelBox);\n },\n alignToClipBox: function (clipBox) {\n var vertical = this.options.vertical;\n var field = vertical ? Y : X;\n var start = field + '1';\n var end = field + '2';\n var text = this.children[0];\n var parentBox = this.parent.box;\n if (parentBox[start] < clipBox[start] || clipBox[end] < parentBox[end]) {\n var targetBox = text.paddingBox.clone();\n targetBox[start] = Math.max(parentBox[start], clipBox[start]);\n targetBox[end] = Math.min(parentBox[end], clipBox[end]);\n this.reflow(targetBox);\n }\n }\n });\n setDefaultOptions(BarLabel, {\n position: OUTSIDE_END,\n margin: getSpacing(3),\n padding: getSpacing(4),\n color: BLACK,\n background: '',\n border: {\n width: 1,\n color: ''\n },\n aboveAxis: true,\n vertical: false,\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n },\n zIndex: 2\n });\n function hasGradientOverlay(options) {\n var overlay = options.overlay;\n return overlay && overlay.gradient && overlay.gradient !== 'none';\n }\n var BAR_ALIGN_MIN_WIDTH = 6;\n var Bar = ChartElement.extend({\n init: function (value, options) {\n ChartElement.fn.init.call(this);\n this.options = options;\n this.color = options.color || WHITE;\n this.aboveAxis = valueOrDefault(this.options.aboveAxis, true);\n this.value = value;\n },\n render: function () {\n if (this._rendered) {\n return;\n }\n this._rendered = true;\n this.createLabel();\n this.createNote();\n if (this.errorBar) {\n this.append(this.errorBar);\n }\n },\n createLabel: function () {\n var options = this.options;\n var labels = options.labels;\n if (labels.visible) {\n var pointData = this.pointData();\n var labelTemplate = getTemplate(labels);\n var labelText;\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else {\n labelText = this.formatValue(labels.format);\n }\n this.label = new BarLabel(labelText, deepExtend({ vertical: options.vertical }, labels), pointData);\n this.append(this.label);\n }\n },\n formatValue: function (format) {\n return this.owner.formatPointValue(this, format);\n },\n reflow: function (targetBox) {\n var this$1 = this;\n this.render();\n var label = this.label;\n this.box = targetBox;\n if (label) {\n label.options.aboveAxis = this.aboveAxis;\n label.reflow(targetBox);\n }\n if (this.note) {\n this.note.reflow(targetBox);\n }\n if (this.errorBars) {\n for (var i = 0; i < this.errorBars.length; i++) {\n this$1.errorBars[i].reflow(targetBox);\n }\n }\n },\n createVisual: function () {\n var this$1 = this;\n var ref = this;\n var box = ref.box;\n var options = ref.options;\n var customVisual = options.visual;\n if (this.visible !== false) {\n ChartElement.fn.createVisual.call(this);\n if (customVisual) {\n var visual = this.rectVisual = customVisual({\n category: this.category,\n dataItem: this.dataItem,\n value: this.value,\n sender: this.getSender(),\n series: this.series,\n percentage: this.percentage,\n stackValue: this.stackValue,\n runningTotal: this.runningTotal,\n total: this.total,\n rect: box.toRect(),\n createVisual: function () {\n var group = new Group();\n this$1.createRect(group);\n return group;\n },\n options: options\n });\n if (visual) {\n this.visual.append(visual);\n }\n } else if (box.width() > 0 && box.height() > 0) {\n this.createRect(this.visual);\n }\n }\n },\n createRect: function (visual) {\n var options = this.options;\n var border = options.border;\n var strokeOpacity = defined(border.opacity) ? border.opacity : options.opacity;\n var rect = this.box.toRect();\n rect.size.width = Math.round(rect.size.width);\n var path = this.rectVisual = Path.fromRect(rect, {\n fill: {\n color: this.color,\n opacity: options.opacity\n },\n stroke: {\n color: this.getBorderColor(),\n width: border.width,\n opacity: strokeOpacity,\n dashType: border.dashType\n }\n });\n var width = this.box.width();\n var height = this.box.height();\n var size = options.vertical ? width : height;\n if (size > BAR_ALIGN_MIN_WIDTH) {\n alignPathToPixel(path);\n if (width < 1 || height < 1) {\n path.options.stroke.lineJoin = 'round';\n }\n }\n visual.append(path);\n if (hasGradientOverlay(options)) {\n var overlay = this.createGradientOverlay(path, { baseColor: this.color }, deepExtend({\n end: !options.vertical ? [\n 0,\n 1\n ] : undefined\n }, options.overlay));\n visual.append(overlay);\n }\n },\n createHighlight: function (style) {\n var highlight = Path.fromRect(this.box.toRect(), style);\n return alignPathToPixel(highlight);\n },\n highlightVisual: function () {\n return this.rectVisual;\n },\n highlightVisualArgs: function () {\n return {\n options: this.options,\n rect: this.box.toRect(),\n visual: this.rectVisual\n };\n },\n getBorderColor: function () {\n var color = this.color;\n var border = this.options.border;\n var brightness = border._brightness || BORDER_BRIGHTNESS;\n var borderColor = border.color;\n if (!defined(borderColor)) {\n borderColor = new Color(color).brightness(brightness).toHex();\n }\n return borderColor;\n },\n tooltipAnchor: function () {\n var ref = this;\n var options = ref.options;\n var box = ref.box;\n var aboveAxis = ref.aboveAxis;\n var clipBox = this.owner.pane.clipBox() || box;\n var horizontalAlign = LEFT;\n var verticalAlign = TOP;\n var x, y;\n if (options.vertical) {\n x = Math.min(box.x2, clipBox.x2) + TOOLTIP_OFFSET;\n if (aboveAxis) {\n y = Math.max(box.y1, clipBox.y1);\n } else {\n y = Math.min(box.y2, clipBox.y2);\n verticalAlign = BOTTOM;\n }\n } else {\n var x1 = Math.max(box.x1, clipBox.x1);\n var x2 = Math.min(box.x2, clipBox.x2);\n if (options.isStacked) {\n verticalAlign = BOTTOM;\n if (aboveAxis) {\n horizontalAlign = RIGHT;\n x = x2;\n } else {\n x = x1;\n }\n y = Math.max(box.y1, clipBox.y1) - TOOLTIP_OFFSET;\n } else {\n if (aboveAxis) {\n x = x2 + TOOLTIP_OFFSET;\n } else {\n x = x1 - TOOLTIP_OFFSET;\n horizontalAlign = RIGHT;\n }\n y = Math.max(box.y1, clipBox.y1);\n }\n }\n return {\n point: new Point(x, y),\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n },\n overlapsBox: function (box) {\n return this.box.overlaps(box);\n },\n pointData: function () {\n return {\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n percentage: this.percentage,\n stackValue: this.stackValue,\n runningTotal: this.runningTotal,\n total: this.total,\n series: this.series\n };\n }\n });\n deepExtend(Bar.prototype, PointEventsMixin);\n deepExtend(Bar.prototype, NoteMixin);\n Bar.prototype.defaults = {\n border: { width: 1 },\n vertical: true,\n overlay: { gradient: 'glass' },\n labels: {\n visible: false,\n format: '{0}'\n },\n opacity: 1,\n notes: { label: {} }\n };\n function forEach(elements, callback) {\n elements.forEach(callback);\n }\n function forEachReverse(elements, callback) {\n var length = elements.length;\n for (var idx = length - 1; idx >= 0; idx--) {\n callback(elements[idx], idx - length - 1);\n }\n }\n var ClusterLayout = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n this.forEach = options.rtl ? forEachReverse : forEach;\n },\n reflow: function (box) {\n var ref = this.options;\n var vertical = ref.vertical;\n var gap = ref.gap;\n var spacing = ref.spacing;\n var children = this.children;\n var count = children.length;\n var axis = vertical ? Y : X;\n var slots = count + gap + spacing * (count - 1);\n var slotSize = (vertical ? box.height() : box.width()) / slots;\n var position = box[axis + 1] + slotSize * (gap / 2);\n this.forEach(children, function (child, idx) {\n var childBox = (child.box || box).clone();\n childBox[axis + 1] = position;\n childBox[axis + 2] = position + slotSize;\n child.reflow(childBox);\n if (idx < count - 1) {\n position += slotSize * spacing;\n }\n position += slotSize;\n });\n }\n });\n setDefaultOptions(ClusterLayout, {\n vertical: false,\n gap: 0,\n spacing: 0\n });\n var StackWrap = ChartElement.extend({\n reflow: function (targetBox) {\n var this$1 = this;\n var positionAxis = this.options.vertical ? X : Y;\n var children = this.children;\n var childrenCount = children.length;\n var box = this.box = new Box();\n for (var i = 0; i < childrenCount; i++) {\n var currentChild = children[i];\n if (currentChild.visible !== false) {\n var childBox = currentChild.box.clone();\n childBox.snapTo(targetBox, positionAxis);\n if (i === 0) {\n box = this$1.box = childBox.clone();\n }\n currentChild.reflow(childBox);\n box.wrap(childBox);\n }\n }\n }\n });\n setDefaultOptions(StackWrap, { vertical: true });\n var BarChart = CategoricalChart.extend({\n render: function () {\n CategoricalChart.fn.render.call(this);\n this.updateStackRange();\n },\n pointType: function () {\n return Bar;\n },\n clusterType: function () {\n return ClusterLayout;\n },\n stackType: function () {\n return StackWrap;\n },\n stackLimits: function (axisName, stackName) {\n var limits = CategoricalChart.fn.stackLimits.call(this, axisName, stackName);\n return limits;\n },\n createPoint: function (data, fields) {\n var categoryIx = fields.categoryIx;\n var category = fields.category;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var ref = this;\n var options = ref.options;\n var children = ref.children;\n var isStacked = options.isStacked;\n var value = this.pointValue(data);\n var pointOptions = this.pointOptions(series, seriesIx);\n var labelOptions = pointOptions.labels;\n if (isStacked) {\n if (labelOptions.position === OUTSIDE_END) {\n labelOptions.position = INSIDE_END;\n }\n }\n pointOptions.isStacked = isStacked;\n var color = data.fields.color || series.color;\n if (value < 0 && pointOptions.negativeColor) {\n color = pointOptions.negativeColor;\n }\n pointOptions = this.evalPointOptions(pointOptions, value, category, categoryIx, series, seriesIx);\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n var pointType = this.pointType();\n var point = new pointType(value, pointOptions);\n point.color = color;\n var cluster = children[categoryIx];\n if (!cluster) {\n var clusterType = this.clusterType();\n cluster = new clusterType({\n vertical: options.invertAxes,\n gap: options.gap,\n spacing: options.spacing,\n rtl: !options.invertAxes && (this.chartService || {}).rtl\n });\n this.append(cluster);\n }\n if (isStacked) {\n var stackWrap = this.getStackWrap(series, cluster);\n stackWrap.append(point);\n } else {\n cluster.append(point);\n }\n return point;\n },\n getStackWrap: function (series, cluster) {\n var stack = series.stack;\n var stackGroup = stack ? stack.group || stack : stack;\n var wraps = cluster.children;\n var stackWrap;\n if (typeof stackGroup === datavizConstants.STRING) {\n for (var i = 0; i < wraps.length; i++) {\n if (wraps[i]._stackGroup === stackGroup) {\n stackWrap = wraps[i];\n break;\n }\n }\n } else {\n stackWrap = wraps[0];\n }\n if (!stackWrap) {\n var stackType = this.stackType();\n stackWrap = new stackType({ vertical: !this.options.invertAxes });\n stackWrap._stackGroup = stackGroup;\n cluster.append(stackWrap);\n }\n return stackWrap;\n },\n categorySlot: function (categoryAxis, categoryIx, valueAxis) {\n var options = this.options;\n var categorySlot = categoryAxis.getSlot(categoryIx);\n var startValue = valueAxis.startValue();\n if (options.isStacked) {\n var zeroSlot = valueAxis.getSlot(startValue, startValue, true);\n var stackAxis = options.invertAxes ? X : Y;\n categorySlot[stackAxis + 1] = categorySlot[stackAxis + 2] = zeroSlot[stackAxis + 1];\n }\n return categorySlot;\n },\n reflowCategories: function (categorySlots) {\n var children = this.children;\n var childrenLength = children.length;\n for (var i = 0; i < childrenLength; i++) {\n children[i].reflow(categorySlots[i]);\n }\n },\n createAnimation: function () {\n this._setAnimationOptions();\n CategoricalChart.fn.createAnimation.call(this);\n if (anyHasZIndex(this.options.series)) {\n this._setChildrenAnimation();\n }\n },\n _setChildrenAnimation: function () {\n var this$1 = this;\n var points = this.points;\n for (var idx = 0; idx < points.length; idx++) {\n var point = points[idx];\n var pointVisual = point.visual;\n if (pointVisual && defined(pointVisual.options.zIndex)) {\n point.options.animation = this$1.options.animation;\n point.createAnimation();\n }\n }\n },\n _setAnimationOptions: function () {\n var options = this.options;\n var animation = options.animation || {};\n var origin;\n if (options.isStacked) {\n var valueAxis = this.seriesValueAxis(options.series[0]);\n origin = valueAxis.getSlot(valueAxis.startValue());\n } else {\n origin = this.categoryAxis.getSlot(0);\n }\n animation.origin = new GeometryPoint(origin.x1, origin.y1);\n animation.vertical = !options.invertAxes;\n }\n });\n setDefaultOptions(BarChart, { animation: { type: BAR } });\n var Candlestick = ChartElement.extend({\n init: function (value, options) {\n ChartElement.fn.init.call(this, options);\n this.value = value;\n },\n reflow: function (box) {\n var ref = this;\n var options = ref.options;\n var value = ref.value;\n var chart = ref.owner;\n var valueAxis = chart.seriesValueAxis(options);\n var ocSlot = valueAxis.getSlot(value.open, value.close);\n var lhSlot = valueAxis.getSlot(value.low, value.high);\n ocSlot.x1 = lhSlot.x1 = box.x1;\n ocSlot.x2 = lhSlot.x2 = box.x2;\n this.realBody = ocSlot;\n var mid = lhSlot.center().x;\n var points = [];\n points.push([\n [\n mid,\n lhSlot.y1\n ],\n [\n mid,\n ocSlot.y1\n ]\n ]);\n points.push([\n [\n mid,\n ocSlot.y2\n ],\n [\n mid,\n lhSlot.y2\n ]\n ]);\n this.lines = points;\n this.box = lhSlot.clone().wrap(ocSlot);\n if (!this._rendered) {\n this._rendered = true;\n this.createNote();\n }\n this.reflowNote();\n },\n reflowNote: function () {\n if (this.note) {\n this.note.reflow(this.box);\n }\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n this._mainVisual = this.mainVisual(this.options);\n this.visual.append(this._mainVisual);\n this.createOverlay();\n },\n mainVisual: function (options) {\n var group = new Group();\n this.createBody(group, options);\n this.createLines(group, options);\n return group;\n },\n createBody: function (container, options) {\n var body = Path.fromRect(this.realBody.toRect(), {\n fill: {\n color: this.color,\n opacity: options.opacity\n },\n stroke: null\n });\n if (options.border.width > 0) {\n body.options.set('stroke', {\n color: this.getBorderColor(),\n width: options.border.width,\n dashType: options.border.dashType,\n opacity: valueOrDefault(options.border.opacity, options.opacity)\n });\n }\n alignPathToPixel(body);\n container.append(body);\n if (hasGradientOverlay(options)) {\n container.append(this.createGradientOverlay(body, { baseColor: this.color }, deepExtend({\n end: !options.vertical ? [\n 0,\n 1\n ] : undefined\n }, options.overlay)));\n }\n },\n createLines: function (container, options) {\n this.drawLines(container, options, this.lines, options.line);\n },\n drawLines: function (container, options, lines, lineOptions) {\n if (!lines) {\n return;\n }\n var lineStyle = {\n stroke: {\n color: lineOptions.color || this.color,\n opacity: valueOrDefault(lineOptions.opacity, options.opacity),\n width: lineOptions.width,\n dashType: lineOptions.dashType,\n lineCap: 'butt'\n }\n };\n for (var i = 0; i < lines.length; i++) {\n var line = Path.fromPoints(lines[i], lineStyle);\n alignPathToPixel(line);\n container.append(line);\n }\n },\n getBorderColor: function () {\n var border = this.options.border;\n var borderColor = border.color;\n if (!defined(borderColor)) {\n borderColor = new Color(this.color).brightness(border._brightness).toHex();\n }\n return borderColor;\n },\n createOverlay: function () {\n var overlay = Path.fromRect(this.box.toRect(), {\n fill: {\n color: WHITE,\n opacity: 0\n },\n stroke: null\n });\n this.visual.append(overlay);\n },\n createHighlight: function () {\n var highlight = this.options.highlight;\n var normalColor = this.color;\n this.color = highlight.color || this.color;\n var overlay = this.mainVisual(deepExtend({}, this.options, { line: { color: this.getBorderColor() } }, highlight));\n this.color = normalColor;\n return overlay;\n },\n highlightVisual: function () {\n return this._mainVisual;\n },\n highlightVisualArgs: function () {\n return {\n options: this.options,\n rect: this.box.toRect(),\n visual: this._mainVisual\n };\n },\n tooltipAnchor: function () {\n var box = this.box;\n var clipBox = this.owner.pane.clipBox() || box;\n return {\n point: new Point(box.x2 + TOOLTIP_OFFSET, Math.max(box.y1, clipBox.y1) + TOOLTIP_OFFSET),\n align: {\n horizontal: LEFT,\n vertical: TOP\n }\n };\n },\n formatValue: function (format) {\n return this.owner.formatPointValue(this, format);\n },\n overlapsBox: function (box) {\n return this.box.overlaps(box);\n }\n });\n setDefaultOptions(Candlestick, {\n vertical: true,\n border: { _brightness: 0.8 },\n line: { width: 2 },\n overlay: { gradient: 'glass' },\n tooltip: { format: '' + '' + '' + '' + '' + '' + '
    {4:d}
    Open:{0:C}
    High:{1:C}
    Low:{2:C}
    Close:{3:C}
    ' },\n highlight: {\n opacity: 1,\n border: {\n width: 1,\n opacity: 1\n },\n line: {\n width: 1,\n opacity: 1\n }\n },\n notes: {\n visible: true,\n label: {}\n }\n });\n deepExtend(Candlestick.prototype, PointEventsMixin);\n deepExtend(Candlestick.prototype, NoteMixin);\n function areNumbers(values) {\n return countNumbers(values) === values.length;\n }\n var CandlestickChart = CategoricalChart.extend({\n reflowCategories: function (categorySlots) {\n var children = this.children;\n var childrenLength = children.length;\n for (var i = 0; i < childrenLength; i++) {\n children[i].reflow(categorySlots[i]);\n }\n },\n addValue: function (data, fields) {\n var categoryIx = fields.categoryIx;\n var category = fields.category;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var ref = this;\n var children = ref.children;\n var options = ref.options;\n var value = data.valueFields;\n var valueParts = this.splitValue(value);\n var hasValue = areNumbers(valueParts);\n var dataItem = series.data[categoryIx];\n var categoryPoints = this.categoryPoints[categoryIx];\n var point;\n if (!categoryPoints) {\n this.categoryPoints[categoryIx] = categoryPoints = [];\n }\n if (hasValue) {\n point = this.createPoint(data, fields);\n }\n var cluster = children[categoryIx];\n if (!cluster) {\n cluster = new ClusterLayout({\n vertical: options.invertAxes,\n gap: options.gap,\n spacing: options.spacing,\n rtl: !options.invertAxes && (this.chartService || {}).rtl\n });\n this.append(cluster);\n }\n if (point) {\n this.updateRange(value, fields);\n cluster.append(point);\n point.categoryIx = categoryIx;\n point.category = category;\n point.series = series;\n point.seriesIx = seriesIx;\n point.owner = this;\n point.dataItem = dataItem;\n point.noteText = data.fields.noteText;\n }\n this.points.push(point);\n categoryPoints.push(point);\n },\n pointType: function () {\n return Candlestick;\n },\n createPoint: function (data, fields) {\n var categoryIx = fields.categoryIx;\n var category = fields.category;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var pointType = this.pointType();\n var value = data.valueFields;\n var pointOptions = deepExtend({}, series);\n var color = data.fields.color || series.color;\n pointOptions = this.evalPointOptions(pointOptions, value, category, categoryIx, series, seriesIx);\n if (series.type === CANDLESTICK) {\n if (value.open > value.close) {\n color = data.fields.downColor || series.downColor || series.color;\n }\n }\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n pointOptions.vertical = !this.options.invertAxes;\n var point = new pointType(value, pointOptions);\n point.color = color;\n return point;\n },\n splitValue: function (value) {\n return [\n value.low,\n value.open,\n value.close,\n value.high\n ];\n },\n updateRange: function (value, fields) {\n var axisName = fields.series.axis;\n var parts = this.splitValue(value);\n var axisRange = this.valueAxisRanges[axisName];\n axisRange = this.valueAxisRanges[axisName] = axisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n axisRange = this.valueAxisRanges[axisName] = {\n min: Math.min.apply(Math, parts.concat([axisRange.min])),\n max: Math.max.apply(Math, parts.concat([axisRange.max]))\n };\n },\n formatPointValue: function (point, format) {\n var value = point.value;\n return this.chartService.format.auto(format, value.open, value.high, value.low, value.close, point.category);\n },\n animationPoints: function () {\n return this.points;\n }\n });\n deepExtend(CandlestickChart.prototype, ClipAnimationMixin);\n var BoxPlot = Candlestick.extend({\n init: function (value, options) {\n Candlestick.fn.init.call(this, value, options);\n this.createNote();\n },\n reflow: function (box) {\n var ref = this;\n var options = ref.options;\n var value = ref.value;\n var chart = ref.owner;\n var valueAxis = chart.seriesValueAxis(options);\n var whiskerSlot, boxSlot;\n this.boxSlot = boxSlot = valueAxis.getSlot(value.q1, value.q3);\n this.realBody = boxSlot;\n this.reflowBoxSlot(box);\n this.whiskerSlot = whiskerSlot = valueAxis.getSlot(value.lower, value.upper);\n this.reflowWhiskerSlot(box);\n var medianSlot = valueAxis.getSlot(value.median);\n if (value.mean) {\n var meanSlot = valueAxis.getSlot(value.mean);\n this.meanPoints = this.calcMeanPoints(box, meanSlot);\n }\n this.whiskerPoints = this.calcWhiskerPoints(boxSlot, whiskerSlot);\n this.medianPoints = this.calcMedianPoints(box, medianSlot);\n this.box = whiskerSlot.clone().wrap(boxSlot);\n this.reflowNote();\n },\n reflowBoxSlot: function (box) {\n this.boxSlot.x1 = box.x1;\n this.boxSlot.x2 = box.x2;\n },\n reflowWhiskerSlot: function (box) {\n this.whiskerSlot.x1 = box.x1;\n this.whiskerSlot.x2 = box.x2;\n },\n calcMeanPoints: function (box, meanSlot) {\n return [[\n [\n box.x1,\n meanSlot.y1\n ],\n [\n box.x2,\n meanSlot.y1\n ]\n ]];\n },\n calcWhiskerPoints: function (boxSlot, whiskerSlot) {\n var mid = whiskerSlot.center().x;\n return [\n [\n [\n mid - 5,\n whiskerSlot.y1\n ],\n [\n mid + 5,\n whiskerSlot.y1\n ],\n [\n mid,\n whiskerSlot.y1\n ],\n [\n mid,\n boxSlot.y1\n ]\n ],\n [\n [\n mid - 5,\n whiskerSlot.y2\n ],\n [\n mid + 5,\n whiskerSlot.y2\n ],\n [\n mid,\n whiskerSlot.y2\n ],\n [\n mid,\n boxSlot.y2\n ]\n ]\n ];\n },\n calcMedianPoints: function (box, medianSlot) {\n return [[\n [\n box.x1,\n medianSlot.y1\n ],\n [\n box.x2,\n medianSlot.y1\n ]\n ]];\n },\n renderOutliers: function (options) {\n var this$1 = this;\n var value = this.value;\n var outliers = value.outliers || [];\n var outerFence = Math.abs(value.q3 - value.q1) * 3;\n var elements = [];\n var markers = options.markers || {};\n for (var i = 0; i < outliers.length; i++) {\n var outlierValue = outliers[i];\n if (outlierValue < value.q3 + outerFence && outlierValue > value.q1 - outerFence) {\n markers = options.outliers;\n } else {\n markers = options.extremes;\n }\n var markersBorder = deepExtend({}, markers.border);\n if (!defined(markersBorder.color)) {\n if (defined(this$1.color)) {\n markersBorder.color = this$1.color;\n } else {\n markersBorder.color = new Color(markers.background).brightness(BORDER_BRIGHTNESS).toHex();\n }\n }\n var shape = new ShapeElement({\n type: markers.type,\n width: markers.size,\n height: markers.size,\n rotation: markers.rotation,\n background: markers.background,\n border: markersBorder,\n opacity: markers.opacity\n });\n shape.value = outlierValue;\n elements.push(shape);\n }\n this.reflowOutliers(elements);\n return elements;\n },\n reflowOutliers: function (outliers) {\n var this$1 = this;\n var valueAxis = this.owner.seriesValueAxis(this.options);\n var center = this.box.center();\n for (var i = 0; i < outliers.length; i++) {\n var outlierValue = outliers[i].value;\n var markerBox = valueAxis.getSlot(outlierValue);\n if (this$1.options.vertical) {\n markerBox.move(center.x);\n } else {\n markerBox.move(undefined, center.y);\n }\n this$1.box = this$1.box.wrap(markerBox);\n outliers[i].reflow(markerBox);\n }\n },\n mainVisual: function (options) {\n var group = Candlestick.fn.mainVisual.call(this, options);\n var outliers = this.renderOutliers(options);\n for (var i = 0; i < outliers.length; i++) {\n var element = outliers[i].getElement();\n if (element) {\n group.append(element);\n }\n }\n return group;\n },\n createLines: function (container, options) {\n this.drawLines(container, options, this.whiskerPoints, options.whiskers);\n this.drawLines(container, options, this.medianPoints, options.median);\n this.drawLines(container, options, this.meanPoints, options.mean);\n },\n getBorderColor: function () {\n if ((this.options.border || {}).color) {\n return this.options.border.color;\n }\n if (this.color) {\n return this.color;\n }\n return Candlestick.fn.getBorderColor.call(this);\n }\n });\n setDefaultOptions(BoxPlot, {\n border: { _brightness: 0.8 },\n line: { width: 2 },\n median: { color: '#f6f6f6' },\n mean: {\n width: 2,\n dashType: 'dash',\n color: '#f6f6f6'\n },\n overlay: { gradient: 'glass' },\n tooltip: { format: '' + '' + '' + '' + '' + '' + '' + '' + '
    {6:d}
    Lower:{0:C}
    Q1:{1:C}
    Median:{2:C}
    Mean:{5:C}
    Q3:{3:C}
    Upper:{4:C}
    ' },\n highlight: {\n opacity: 1,\n border: {\n width: 1,\n opacity: 1\n },\n line: {\n width: 1,\n opacity: 1\n }\n },\n notes: {\n visible: true,\n label: {}\n },\n outliers: {\n visible: true,\n size: LINE_MARKER_SIZE,\n type: datavizConstants.CROSS,\n background: WHITE,\n border: {\n width: 2,\n opacity: 1\n },\n opacity: 0\n },\n extremes: {\n visible: true,\n size: LINE_MARKER_SIZE,\n type: CIRCLE,\n background: WHITE,\n border: {\n width: 2,\n opacity: 1\n },\n opacity: 0\n }\n });\n deepExtend(BoxPlot.prototype, PointEventsMixin);\n var VerticalBoxPlot = BoxPlot.extend({\n reflowBoxSlot: function (box) {\n this.boxSlot.y1 = box.y1;\n this.boxSlot.y2 = box.y2;\n },\n reflowWhiskerSlot: function (box) {\n this.whiskerSlot.y1 = box.y1;\n this.whiskerSlot.y2 = box.y2;\n },\n calcMeanPoints: function (box, meanSlot) {\n return [[\n [\n meanSlot.x1,\n box.y1\n ],\n [\n meanSlot.x1,\n box.y2\n ]\n ]];\n },\n calcWhiskerPoints: function (boxSlot, whiskerSlot) {\n var mid = whiskerSlot.center().y;\n return [\n [\n [\n whiskerSlot.x1,\n mid - 5\n ],\n [\n whiskerSlot.x1,\n mid + 5\n ],\n [\n whiskerSlot.x1,\n mid\n ],\n [\n boxSlot.x1,\n mid\n ]\n ],\n [\n [\n whiskerSlot.x2,\n mid - 5\n ],\n [\n whiskerSlot.x2,\n mid + 5\n ],\n [\n whiskerSlot.x2,\n mid\n ],\n [\n boxSlot.x2,\n mid\n ]\n ]\n ];\n },\n calcMedianPoints: function (box, medianSlot) {\n return [[\n [\n medianSlot.x1,\n box.y1\n ],\n [\n medianSlot.x1,\n box.y2\n ]\n ]];\n }\n });\n var BoxPlotChart = CandlestickChart.extend({\n addValue: function (data, fields) {\n var categoryIx = fields.categoryIx;\n var category = fields.category;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var ref = this;\n var children = ref.children;\n var options = ref.options;\n var value = data.valueFields;\n var valueParts = this.splitValue(value);\n var hasValue = areNumbers(valueParts);\n var dataItem = series.data[categoryIx];\n var categoryPoints = this.categoryPoints[categoryIx];\n var point;\n if (!categoryPoints) {\n this.categoryPoints[categoryIx] = categoryPoints = [];\n }\n if (hasValue) {\n point = this.createPoint(data, fields);\n }\n var cluster = children[categoryIx];\n if (!cluster) {\n cluster = new ClusterLayout({\n vertical: options.invertAxes,\n gap: options.gap,\n spacing: options.spacing,\n rtl: !options.invertAxes && (this.chartService || {}).rtl\n });\n this.append(cluster);\n }\n if (point) {\n this.updateRange(value, fields);\n cluster.append(point);\n point.categoryIx = categoryIx;\n point.category = category;\n point.series = series;\n point.seriesIx = seriesIx;\n point.owner = this;\n point.dataItem = dataItem;\n }\n this.points.push(point);\n categoryPoints.push(point);\n },\n pointType: function () {\n if (this.options.invertAxes) {\n return VerticalBoxPlot;\n }\n return BoxPlot;\n },\n splitValue: function (value) {\n return [\n value.lower,\n value.q1,\n value.median,\n value.q3,\n value.upper\n ];\n },\n updateRange: function (value, fields) {\n var axisName = fields.series.axis;\n var axisRange = this.valueAxisRanges[axisName];\n var parts = this.splitValue(value).concat(this.filterOutliers(value.outliers));\n if (defined(value.mean)) {\n parts = parts.concat(value.mean);\n }\n axisRange = this.valueAxisRanges[axisName] = axisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n axisRange = this.valueAxisRanges[axisName] = {\n min: Math.min.apply(Math, parts.concat([axisRange.min])),\n max: Math.max.apply(Math, parts.concat([axisRange.max]))\n };\n },\n formatPointValue: function (point, format) {\n var value = point.value;\n return this.chartService.format.auto(format, value.lower, value.q1, value.median, value.q3, value.upper, value.mean, point.category);\n },\n filterOutliers: function (items) {\n var length = (items || []).length;\n var result = [];\n for (var i = 0; i < length; i++) {\n var item = items[i];\n if (defined(item) && item !== null) {\n result.push(item);\n }\n }\n return result;\n }\n });\n var ScatterErrorBar = ErrorBarBase.extend({\n getAxis: function () {\n var axes = this.chart.seriesAxes(this.series);\n var axis = this.isVertical ? axes.y : axes.x;\n return axis;\n }\n });\n function hasValue(value) {\n return defined(value) && value !== null;\n }\n var ScatterChart = ChartElement.extend({\n init: function (plotArea, options) {\n ChartElement.fn.init.call(this, options);\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this._initFields();\n this.render();\n },\n _initFields: function () {\n this.xAxisRanges = {};\n this.yAxisRanges = {};\n this.points = [];\n this.seriesPoints = [];\n this.seriesOptions = [];\n this._evalSeries = [];\n },\n render: function () {\n this.traverseDataPoints(this.addValue.bind(this));\n },\n addErrorBar: function (point, field, fields) {\n var value = point.value[field];\n var valueErrorField = field + 'Value';\n var lowField = field + 'ErrorLow';\n var highField = field + 'ErrorHigh';\n var seriesIx = fields.seriesIx;\n var series = fields.series;\n var errorBars = point.options.errorBars;\n var lowValue = fields[lowField];\n var highValue = fields[highField];\n if (isNumber(value)) {\n var errorRange;\n if (isNumber(lowValue) && isNumber(highValue)) {\n errorRange = {\n low: lowValue,\n high: highValue\n };\n }\n if (errorBars && defined(errorBars[valueErrorField])) {\n this.seriesErrorRanges = this.seriesErrorRanges || {\n x: [],\n y: []\n };\n this.seriesErrorRanges[field][seriesIx] = this.seriesErrorRanges[field][seriesIx] || new ErrorRangeCalculator(errorBars[valueErrorField], series, field);\n errorRange = this.seriesErrorRanges[field][seriesIx].getErrorRange(value, errorBars[valueErrorField]);\n }\n if (errorRange) {\n this.addPointErrorBar(errorRange, point, field);\n }\n }\n },\n addPointErrorBar: function (errorRange, point, field) {\n var low = errorRange.low;\n var high = errorRange.high;\n var series = point.series;\n var options = point.options.errorBars;\n var isVertical = field === Y;\n var item = {};\n point[field + 'Low'] = low;\n point[field + 'High'] = high;\n point.errorBars = point.errorBars || [];\n var errorBar = new ScatterErrorBar(low, high, isVertical, this, series, options);\n point.errorBars.push(errorBar);\n point.append(errorBar);\n item[field] = low;\n this.updateRange(item, series);\n item[field] = high;\n this.updateRange(item, series);\n },\n addValue: function (value, fields) {\n var x = value.x;\n var y = value.y;\n var seriesIx = fields.seriesIx;\n var series = this.options.series[seriesIx];\n var missingValues = this.seriesMissingValues(series);\n var seriesPoints = this.seriesPoints[seriesIx];\n var pointValue = value;\n if (!(hasValue(x) && hasValue(y))) {\n pointValue = this.createMissingValue(pointValue, missingValues);\n }\n var point;\n if (pointValue) {\n point = this.createPoint(pointValue, fields);\n if (point) {\n $.extend(point, fields);\n this.addErrorBar(point, X, fields);\n this.addErrorBar(point, Y, fields);\n }\n this.updateRange(pointValue, fields.series);\n }\n this.points.push(point);\n seriesPoints.push(point);\n },\n seriesMissingValues: function (series) {\n return series.missingValues;\n },\n createMissingValue: function () {\n },\n updateRange: function (value, series) {\n var intlService = this.chartService.intl;\n var xAxisName = series.xAxis;\n var yAxisName = series.yAxis;\n var x = value.x;\n var y = value.y;\n var xAxisRange = this.xAxisRanges[xAxisName];\n var yAxisRange = this.yAxisRanges[yAxisName];\n if (hasValue(x)) {\n xAxisRange = this.xAxisRanges[xAxisName] = xAxisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n if (isString(x)) {\n x = parseDate(intlService, x);\n }\n xAxisRange.min = Math.min(xAxisRange.min, x);\n xAxisRange.max = Math.max(xAxisRange.max, x);\n }\n if (hasValue(y)) {\n yAxisRange = this.yAxisRanges[yAxisName] = yAxisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n if (isString(y)) {\n y = parseDate(intlService, y);\n }\n yAxisRange.min = Math.min(yAxisRange.min, y);\n yAxisRange.max = Math.max(yAxisRange.max, y);\n }\n },\n evalPointOptions: function (options, value, fields) {\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var state = {\n defaults: series._defaults,\n excluded: [\n 'data',\n 'tooltip',\n 'content',\n 'template',\n 'visual',\n 'toggle',\n '_outOfRangeMinPoint',\n '_outOfRangeMaxPoint'\n ]\n };\n var doEval = this._evalSeries[seriesIx];\n if (!defined(doEval)) {\n this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\n }\n var pointOptions = options;\n if (doEval) {\n pointOptions = deepExtend({}, options);\n evalOptions(pointOptions, {\n value: value,\n series: series,\n dataItem: fields.dataItem\n }, state);\n }\n return pointOptions;\n },\n pointType: function () {\n return LinePoint;\n },\n pointOptions: function (series, seriesIx) {\n var options = this.seriesOptions[seriesIx];\n if (!options) {\n var defaults = this.pointType().prototype.defaults;\n this.seriesOptions[seriesIx] = options = deepExtend({}, defaults, {\n markers: { opacity: series.opacity },\n tooltip: { format: this.options.tooltip.format },\n labels: { format: this.options.labels.format }\n }, series);\n }\n return options;\n },\n createPoint: function (value, fields) {\n var series = fields.series;\n var pointOptions = this.pointOptions(series, fields.seriesIx);\n var color = fields.color || series.color;\n pointOptions = this.evalPointOptions(pointOptions, value, fields);\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n var point = new LinePoint(value, pointOptions);\n point.color = color;\n this.append(point);\n return point;\n },\n seriesAxes: function (series) {\n var xAxisName = series.xAxis;\n var yAxisName = series.yAxis;\n var plotArea = this.plotArea;\n var xAxis = xAxisName ? plotArea.namedXAxes[xAxisName] : plotArea.axisX;\n var yAxis = yAxisName ? plotArea.namedYAxes[yAxisName] : plotArea.axisY;\n if (!xAxis) {\n throw new Error('Unable to locate X axis with name ' + xAxisName);\n }\n if (!yAxis) {\n throw new Error('Unable to locate Y axis with name ' + yAxisName);\n }\n return {\n x: xAxis,\n y: yAxis\n };\n },\n reflow: function (targetBox) {\n var this$1 = this;\n var chartPoints = this.points;\n var limit = !this.options.clip;\n var pointIx = 0;\n this.traverseDataPoints(function (value, fields) {\n var point = chartPoints[pointIx++];\n var seriesAxes = this$1.seriesAxes(fields.series);\n var slotX = seriesAxes.x.getSlot(value.x, value.x, limit);\n var slotY = seriesAxes.y.getSlot(value.y, value.y, limit);\n if (point) {\n if (slotX && slotY) {\n var pointSlot = this$1.pointSlot(slotX, slotY);\n point.reflow(pointSlot);\n } else {\n point.visible = false;\n }\n }\n });\n this.box = targetBox;\n },\n pointSlot: function (slotX, slotY) {\n return new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\n },\n traverseDataPoints: function (callback) {\n var this$1 = this;\n var ref = this;\n var series = ref.options.series;\n var seriesPoints = ref.seriesPoints;\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var currentSeriesPoints = seriesPoints[seriesIx];\n if (!currentSeriesPoints) {\n seriesPoints[seriesIx] = [];\n }\n for (var pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\n var ref$1 = this$1._bindPoint(currentSeries, seriesIx, pointIx);\n var value = ref$1.valueFields;\n var fields = ref$1.fields;\n callback(value, deepExtend({\n pointIx: pointIx,\n series: currentSeries,\n seriesIx: seriesIx,\n dataItem: currentSeries.data[pointIx],\n owner: this$1\n }, fields));\n }\n }\n },\n formatPointValue: function (point, format) {\n var value = point.value;\n return this.chartService.format.auto(format, value.x, value.y);\n },\n animationPoints: function () {\n var points = this.points;\n var result = [];\n for (var idx = 0; idx < points.length; idx++) {\n result.push((points[idx] || {}).marker);\n }\n return result;\n }\n });\n setDefaultOptions(ScatterChart, {\n series: [],\n tooltip: { format: '{0}, {1}' },\n labels: { format: '{0}, {1}' },\n clip: true\n });\n deepExtend(ScatterChart.prototype, ClipAnimationMixin, { _bindPoint: CategoricalChart.prototype._bindPoint });\n var Bubble = LinePoint.extend({\n init: function (value, options) {\n LinePoint.fn.init.call(this, value, options);\n this.category = value.category;\n },\n createHighlight: function () {\n var highlight = this.options.highlight;\n var border = highlight.border;\n var markers = this.options.markers;\n var center = this.box.center();\n var radius = (markers.size + markers.border.width + border.width) / 2;\n var highlightGroup = new Group();\n var shadow = new drawing.Circle(new geometry.Circle([\n center.x,\n center.y + radius / 5 + border.width / 2\n ], radius + border.width / 2), {\n stroke: { color: 'none' },\n fill: this.createGradient({\n gradient: 'bubbleShadow',\n color: markers.background,\n stops: [\n {\n offset: 0,\n color: markers.background,\n opacity: 0.3\n },\n {\n offset: 1,\n color: markers.background,\n opacity: 0\n }\n ]\n })\n });\n var overlay = new drawing.Circle(new geometry.Circle([\n center.x,\n center.y\n ], radius), {\n stroke: {\n color: border.color || new Color(markers.background).brightness(BORDER_BRIGHTNESS).toHex(),\n width: border.width,\n opacity: border.opacity\n },\n fill: {\n color: markers.background,\n opacity: highlight.opacity\n }\n });\n highlightGroup.append(shadow, overlay);\n return highlightGroup;\n }\n });\n Bubble.prototype.defaults = deepExtend({}, Bubble.prototype.defaults, {\n labels: { position: CENTER },\n highlight: {\n opacity: 1,\n border: {\n color: '#fff',\n width: 2,\n opacity: 1\n }\n }\n });\n Bubble.prototype.defaults.highlight.zIndex = undefined;\n var BubbleChart = ScatterChart.extend({\n _initFields: function () {\n this._maxSize = MIN_VALUE;\n ScatterChart.fn._initFields.call(this);\n },\n addValue: function (value, fields) {\n if (value.size !== null && (value.size > 0 || value.size < 0 && fields.series.negativeValues.visible)) {\n this._maxSize = Math.max(this._maxSize, Math.abs(value.size));\n ScatterChart.fn.addValue.call(this, value, fields);\n } else {\n this.points.push(null);\n this.seriesPoints[fields.seriesIx].push(null);\n }\n },\n reflow: function (box) {\n this.updateBubblesSize(box);\n ScatterChart.fn.reflow.call(this, box);\n },\n pointType: function () {\n return Bubble;\n },\n createPoint: function (value, fields) {\n var series = fields.series;\n var pointsCount = series.data.length;\n var delay = fields.pointIx * (INITIAL_ANIMATION_DURATION / pointsCount);\n var animationOptions = {\n delay: delay,\n duration: INITIAL_ANIMATION_DURATION - delay,\n type: BUBBLE\n };\n var color = fields.color || series.color;\n if (value.size < 0 && series.negativeValues.visible) {\n color = valueOrDefault(series.negativeValues.color, color);\n }\n var pointOptions = deepExtend({\n labels: {\n animation: {\n delay: delay,\n duration: INITIAL_ANIMATION_DURATION - delay\n }\n }\n }, this.pointOptions(series, fields.seriesIx), {\n markers: {\n type: CIRCLE,\n border: series.border,\n opacity: series.opacity,\n animation: animationOptions\n }\n });\n pointOptions = this.evalPointOptions(pointOptions, value, fields);\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n pointOptions.markers.background = color;\n var point = new Bubble(value, pointOptions);\n point.color = color;\n this.append(point);\n return point;\n },\n updateBubblesSize: function (box) {\n var this$1 = this;\n var ref = this;\n var series = ref.options.series;\n var boxSize = Math.min(box.width(), box.height());\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var seriesPoints = this$1.seriesPoints[seriesIx];\n var minSize = currentSeries.minSize || Math.max(boxSize * 0.02, 10);\n var maxSize = currentSeries.maxSize || boxSize * 0.2;\n var minR = minSize / 2;\n var maxR = maxSize / 2;\n var minArea = Math.PI * minR * minR;\n var maxArea = Math.PI * maxR * maxR;\n var areaRange = maxArea - minArea;\n var areaRatio = areaRange / this$1._maxSize;\n for (var pointIx = 0; pointIx < seriesPoints.length; pointIx++) {\n var point = seriesPoints[pointIx];\n if (point) {\n var area = Math.abs(point.value.size) * areaRatio;\n var radius = Math.sqrt((minArea + area) / Math.PI);\n var baseZIndex = valueOrDefault(point.options.zIndex, 0);\n var zIndex = baseZIndex + (1 - radius / maxR);\n deepExtend(point.options, {\n zIndex: zIndex,\n markers: {\n size: radius * 2,\n zIndex: zIndex\n },\n labels: { zIndex: zIndex + 1 }\n });\n }\n }\n }\n },\n formatPointValue: function (point, format) {\n var value = point.value;\n return this.chartService.format.auto(format, value.x, value.y, value.size, point.category);\n },\n createAnimation: function () {\n },\n createVisual: function () {\n }\n });\n setDefaultOptions(BubbleChart, {\n tooltip: { format: '{3}' },\n labels: { format: '{3}' }\n });\n var Target = ShapeElement.extend({});\n deepExtend(Target.prototype, PointEventsMixin);\n var Bullet = ChartElement.extend({\n init: function (value, options) {\n ChartElement.fn.init.call(this, options);\n this.aboveAxis = this.options.aboveAxis;\n this.color = options.color || WHITE;\n this.value = value;\n },\n render: function () {\n var options = this.options;\n if (!this._rendered) {\n this._rendered = true;\n if (defined(this.value.target)) {\n this.target = new Target({\n type: options.target.shape,\n background: options.target.color || this.color,\n opacity: options.opacity,\n zIndex: options.zIndex,\n border: options.target.border,\n vAlign: TOP,\n align: RIGHT\n });\n this.target.value = this.value;\n this.target.dataItem = this.dataItem;\n this.target.series = this.series;\n this.append(this.target);\n }\n this.createNote();\n }\n },\n reflow: function (box) {\n this.render();\n var ref = this;\n var options = ref.options;\n var target = ref.target;\n var chart = ref.owner;\n var invertAxes = options.invertAxes;\n var valueAxis = chart.seriesValueAxis(this.options);\n var categorySlot = chart.categorySlot(chart.categoryAxis, options.categoryIx, valueAxis);\n var targetValueSlot = valueAxis.getSlot(this.value.target);\n var targetSlotX = invertAxes ? targetValueSlot : categorySlot;\n var targetSlotY = invertAxes ? categorySlot : targetValueSlot;\n if (target) {\n var targetSlot = new Box(targetSlotX.x1, targetSlotY.y1, targetSlotX.x2, targetSlotY.y2);\n target.options.height = invertAxes ? targetSlot.height() : options.target.line.width;\n target.options.width = invertAxes ? options.target.line.width : targetSlot.width();\n target.reflow(targetSlot);\n }\n if (this.note) {\n this.note.reflow(box);\n }\n this.box = box;\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n var options = this.options;\n var body = Path.fromRect(this.box.toRect(), {\n fill: {\n color: this.color,\n opacity: options.opacity\n },\n stroke: null\n });\n if (options.border.width > 0) {\n body.options.set('stroke', {\n color: options.border.color || this.color,\n width: options.border.width,\n dashType: options.border.dashType,\n opacity: valueOrDefault(options.border.opacity, options.opacity)\n });\n }\n this.bodyVisual = body;\n alignPathToPixel(body);\n this.visual.append(body);\n },\n createAnimation: function () {\n if (this.bodyVisual) {\n this.animation = Animation.create(this.bodyVisual, this.options.animation);\n }\n },\n createHighlight: function (style) {\n return Path.fromRect(this.box.toRect(), style);\n },\n highlightVisual: function () {\n return this.bodyVisual;\n },\n highlightVisualArgs: function () {\n return {\n rect: this.box.toRect(),\n visual: this.bodyVisual,\n options: this.options\n };\n },\n formatValue: function (format) {\n return this.owner.formatPointValue(this, format);\n }\n });\n Bullet.prototype.tooltipAnchor = Bar.prototype.tooltipAnchor;\n setDefaultOptions(Bullet, {\n border: { width: 1 },\n vertical: false,\n opacity: 1,\n target: {\n shape: '',\n border: {\n width: 0,\n color: 'green'\n },\n line: { width: 2 }\n },\n tooltip: { format: 'Current: {0}
    Target: {1}' }\n });\n deepExtend(Bullet.prototype, PointEventsMixin);\n deepExtend(Bullet.prototype, NoteMixin);\n var BulletChart = CategoricalChart.extend({\n init: function (plotArea, options) {\n wrapData(options);\n CategoricalChart.fn.init.call(this, plotArea, options);\n },\n reflowCategories: function (categorySlots) {\n var children = this.children;\n var childrenLength = children.length;\n for (var i = 0; i < childrenLength; i++) {\n children[i].reflow(categorySlots[i]);\n }\n },\n plotRange: function (point) {\n var series = point.series;\n var valueAxis = this.seriesValueAxis(series);\n var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n return [\n axisCrossingValue,\n point.value.current || axisCrossingValue\n ];\n },\n createPoint: function (data, fields) {\n var categoryIx = fields.categoryIx;\n var category = fields.category;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var ref = this;\n var options = ref.options;\n var children = ref.children;\n var value = data.valueFields;\n var bulletOptions = deepExtend({\n vertical: !options.invertAxes,\n overlay: series.overlay,\n categoryIx: categoryIx,\n invertAxes: options.invertAxes\n }, series);\n var color = data.fields.color || series.color;\n bulletOptions = this.evalPointOptions(bulletOptions, value, category, categoryIx, series, seriesIx);\n if (isFunction(series.color)) {\n color = bulletOptions.color;\n }\n var bullet = new Bullet(value, bulletOptions);\n bullet.color = color;\n var cluster = children[categoryIx];\n if (!cluster) {\n cluster = new ClusterLayout({\n vertical: options.invertAxes,\n gap: options.gap,\n spacing: options.spacing,\n rtl: !options.invertAxes && (this.chartService || {}).rtl\n });\n this.append(cluster);\n }\n cluster.append(bullet);\n return bullet;\n },\n updateRange: function (value, fields) {\n var current = value.current;\n var target = value.target;\n var axisName = fields.series.axis;\n var axisRange = this.valueAxisRanges[axisName];\n if (defined(current) && !isNaN(current) && defined(target && !isNaN(target))) {\n axisRange = this.valueAxisRanges[axisName] = axisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n axisRange.min = Math.min(axisRange.min, current, target);\n axisRange.max = Math.max(axisRange.max, current, target);\n }\n },\n formatPointValue: function (point, format) {\n return this.chartService.format.auto(format, point.value.current, point.value.target);\n },\n pointValue: function (data) {\n return data.valueFields.current;\n },\n aboveAxis: function (point) {\n var value = point.value.current;\n return value > 0;\n },\n createAnimation: function () {\n var this$1 = this;\n var points = this.points;\n this._setAnimationOptions();\n for (var idx = 0; idx < points.length; idx++) {\n var point = points[idx];\n point.options.animation = this$1.options.animation;\n point.createAnimation();\n }\n }\n });\n BulletChart.prototype._setAnimationOptions = BarChart.prototype._setAnimationOptions;\n setDefaultOptions(BulletChart, { animation: { type: BAR } });\n function wrapData(options) {\n var series = options.series;\n for (var i = 0; i < series.length; i++) {\n var seriesItem = series[i];\n var data = seriesItem.data;\n if (data && !isArray(data[0]) && !isObject(data[0])) {\n seriesItem.data = [data];\n }\n }\n }\n var BaseTooltip = Class.extend({\n init: function (chartService, options) {\n this.chartService = chartService;\n this.options = deepExtend({}, this.options, options);\n },\n getStyle: function (options, point) {\n var background = options.background;\n var border = options.border.color;\n if (point) {\n var pointColor = point.color || point.options.color;\n background = valueOrDefault(background, pointColor);\n border = valueOrDefault(border, pointColor);\n }\n var padding = getSpacing(options.padding || {}, 'auto');\n return {\n backgroundColor: background,\n borderColor: border,\n font: options.font,\n color: options.color,\n opacity: options.opacity,\n borderWidth: styleValue(options.border.width),\n paddingTop: styleValue(padding.top),\n paddingBottom: styleValue(padding.bottom),\n paddingLeft: styleValue(padding.left),\n paddingRight: styleValue(padding.right)\n };\n },\n show: function (options, tooltipOptions, point) {\n options.format = tooltipOptions.format;\n var style = this.getStyle(tooltipOptions, point);\n options.style = style;\n if (!defined(tooltipOptions.color) && new Color(style.backgroundColor).percBrightness() > 180) {\n options.className = 'k-chart-tooltip-inverse';\n }\n this.chartService.notify(SHOW_TOOLTIP, options);\n this.visible = true;\n },\n hide: function () {\n if (this.chartService) {\n this.chartService.notify(HIDE_TOOLTIP);\n }\n this.visible = false;\n },\n destroy: function () {\n delete this.chartService;\n }\n });\n setDefaultOptions(BaseTooltip, {\n border: { width: 1 },\n opacity: 1\n });\n var CrosshairTooltip = BaseTooltip.extend({\n init: function (chartService, crosshair, options) {\n BaseTooltip.fn.init.call(this, chartService, options);\n this.crosshair = crosshair;\n this.formatService = chartService.format;\n this.initAxisName();\n },\n initAxisName: function () {\n var axis = this.crosshair.axis;\n var plotArea = axis.plotArea;\n var name;\n if (plotArea.categoryAxis) {\n name = axis.getCategory ? 'categoryAxis' : 'valueAxis';\n } else {\n name = axis.options.vertical ? 'yAxis' : 'xAxis';\n }\n this.axisName = name;\n },\n showAt: function (point) {\n var ref = this;\n var axis = ref.crosshair.axis;\n var options = ref.options;\n var value = axis[options.stickyMode ? 'getCategory' : 'getValue'](point);\n var formattedValue = value;\n if (options.format) {\n formattedValue = this.formatService.auto(options.format, value);\n } else if (axis.options.type === DATE) {\n formattedValue = this.formatService.auto(axis.options.labels.dateFormats[axis.options.baseUnit], value);\n }\n this.show({\n point: point,\n anchor: this.getAnchor(),\n crosshair: this.crosshair,\n value: formattedValue,\n axisName: this.axisName,\n axisIndex: this.crosshair.axis.axisIndex\n }, this.options);\n },\n hide: function () {\n this.chartService.notify(HIDE_TOOLTIP, {\n crosshair: this.crosshair,\n axisName: this.axisName,\n axisIndex: this.crosshair.axis.axisIndex\n });\n },\n getAnchor: function () {\n var ref = this;\n var crosshair = ref.crosshair;\n var ref_options = ref.options;\n var position = ref_options.position;\n var padding = ref_options.padding;\n var vertical = !crosshair.axis.options.vertical;\n var lineBox = crosshair.line.bbox();\n var horizontalAlign, verticalAlign, point;\n if (vertical) {\n horizontalAlign = CENTER;\n if (position === BOTTOM) {\n verticalAlign = TOP;\n point = lineBox.bottomLeft().translate(0, padding);\n } else {\n verticalAlign = BOTTOM;\n point = lineBox.topLeft().translate(0, -padding);\n }\n } else {\n verticalAlign = CENTER;\n if (position === LEFT) {\n horizontalAlign = RIGHT;\n point = lineBox.topLeft().translate(-padding, 0);\n } else {\n horizontalAlign = LEFT;\n point = lineBox.topRight().translate(padding, 0);\n }\n }\n return {\n point: point,\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n }\n });\n setDefaultOptions(CrosshairTooltip, { padding: 10 });\n var Crosshair = ChartElement.extend({\n init: function (chartService, axis, options) {\n ChartElement.fn.init.call(this, options);\n this.axis = axis;\n this.stickyMode = axis instanceof CategoryAxis;\n var tooltipOptions = this.options.tooltip;\n if (tooltipOptions.visible) {\n this.tooltip = new CrosshairTooltip(chartService, this, deepExtend({}, tooltipOptions, { stickyMode: this.stickyMode }));\n }\n },\n showAt: function (point) {\n this.point = point;\n this.moveLine();\n this.line.visible(true);\n if (this.tooltip) {\n this.tooltip.showAt(point);\n }\n },\n hide: function () {\n this.line.visible(false);\n if (this.tooltip) {\n this.tooltip.hide();\n }\n },\n moveLine: function () {\n var ref = this;\n var axis = ref.axis;\n var point = ref.point;\n var vertical = axis.options.vertical;\n var box = this.getBox();\n var dim = vertical ? Y : X;\n var lineStart = new GeometryPoint(box.x1, box.y1);\n var lineEnd;\n if (vertical) {\n lineEnd = new GeometryPoint(box.x2, box.y1);\n } else {\n lineEnd = new GeometryPoint(box.x1, box.y2);\n }\n if (point) {\n if (this.stickyMode) {\n var slot = axis.getSlot(axis.pointCategoryIndex(point));\n lineStart[dim] = lineEnd[dim] = slot.center()[dim];\n } else {\n lineStart[dim] = lineEnd[dim] = point[dim];\n }\n }\n this.box = box;\n this.line.moveTo(lineStart).lineTo(lineEnd);\n },\n getBox: function () {\n var axis = this.axis;\n var axes = axis.pane.axes;\n var length = axes.length;\n var vertical = axis.options.vertical;\n var box = axis.lineBox().clone();\n var dim = vertical ? X : Y;\n var axisLineBox;\n for (var i = 0; i < length; i++) {\n var currentAxis = axes[i];\n if (currentAxis.options.vertical !== vertical) {\n if (!axisLineBox) {\n axisLineBox = currentAxis.lineBox().clone();\n } else {\n axisLineBox.wrap(currentAxis.lineBox());\n }\n }\n }\n box[dim + 1] = axisLineBox[dim + 1];\n box[dim + 2] = axisLineBox[dim + 2];\n return box;\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n var options = this.options;\n this.line = new Path({\n stroke: {\n color: options.color,\n width: options.width,\n opacity: options.opacity,\n dashType: options.dashType\n },\n visible: false\n });\n this.moveLine();\n this.visual.append(this.line);\n },\n destroy: function () {\n if (this.tooltip) {\n this.tooltip.destroy();\n }\n ChartElement.fn.destroy.call(this);\n }\n });\n setDefaultOptions(Crosshair, {\n color: BLACK,\n width: 2,\n zIndex: -1,\n tooltip: { visible: false }\n });\n var ChartContainer = ChartElement.extend({\n init: function (options, pane) {\n ChartElement.fn.init.call(this, options);\n this.pane = pane;\n },\n shouldClip: function () {\n var children = this.children;\n var length = children.length;\n for (var i = 0; i < length; i++) {\n if (children[i].options.clip === true) {\n return true;\n }\n }\n return false;\n },\n _clipBox: function () {\n return this.pane.chartsBox();\n },\n createVisual: function () {\n this.visual = new Group({ zIndex: 0 });\n if (this.shouldClip()) {\n var clipBox = this.clipBox = this._clipBox();\n var clipRect = clipBox.toRect();\n var clipPath = Path.fromRect(clipRect);\n alignPathToPixel(clipPath);\n this.visual.clip(clipPath);\n this.unclipLabels();\n }\n },\n stackRoot: function () {\n return this;\n },\n unclipLabels: function () {\n var ref = this;\n var charts = ref.children;\n var clipBox = ref.clipBox;\n for (var i = 0; i < charts.length; i++) {\n var points = charts[i].points || {};\n var length = points.length;\n for (var j = 0; j < length; j++) {\n var point = points[j];\n if (point && point.visible !== false && point.overlapsBox && point.overlapsBox(clipBox)) {\n if (point.unclipElements) {\n point.unclipElements();\n } else {\n var label = point.label;\n var note = point.note;\n if (label && label.options.visible) {\n if (label.alignToClipBox) {\n label.alignToClipBox(clipBox);\n }\n label.options.noclip = true;\n }\n if (note && note.options.visible) {\n note.options.noclip = true;\n }\n }\n }\n }\n }\n },\n destroy: function () {\n ChartElement.fn.destroy.call(this);\n delete this.parent;\n }\n });\n ChartContainer.prototype.isStackRoot = true;\n var Pane = BoxElement.extend({\n init: function (options) {\n BoxElement.fn.init.call(this, options);\n this.id = paneID();\n this.createTitle();\n this.content = new ChartElement();\n this.chartContainer = new ChartContainer({}, this);\n this.append(this.content);\n this.axes = [];\n this.charts = [];\n },\n createTitle: function () {\n var titleOptions = this.options.title;\n if (isObject(titleOptions)) {\n titleOptions = deepExtend({}, titleOptions, {\n align: titleOptions.position,\n position: TOP\n });\n }\n this.title = dataviz.Title.buildTitle(titleOptions, this, Pane.prototype.options.title);\n },\n appendAxis: function (axis) {\n this.content.append(axis);\n this.axes.push(axis);\n axis.pane = this;\n },\n appendAxisAt: function (axis, pos) {\n this.content.append(axis);\n this.axes.splice(pos, 0, axis);\n axis.pane = this;\n },\n appendChart: function (chart) {\n if (this.chartContainer.parent !== this.content) {\n this.content.append(this.chartContainer);\n }\n this.charts.push(chart);\n this.chartContainer.append(chart);\n chart.pane = this;\n },\n empty: function () {\n var this$1 = this;\n var plotArea = this.parent;\n if (plotArea) {\n for (var i = 0; i < this.axes.length; i++) {\n plotArea.removeAxis(this$1.axes[i]);\n }\n for (var i$1 = 0; i$1 < this.charts.length; i$1++) {\n plotArea.removeChart(this$1.charts[i$1]);\n }\n }\n this.axes = [];\n this.charts = [];\n this.content.destroy();\n this.content.children = [];\n this.chartContainer.children = [];\n },\n reflow: function (targetBox) {\n var content;\n if (last(this.children) === this.content) {\n content = this.children.pop();\n }\n BoxElement.fn.reflow.call(this, targetBox);\n if (content) {\n this.children.push(content);\n }\n if (this.title) {\n this.contentBox.y1 += this.title.box.height();\n }\n },\n visualStyle: function () {\n var style = BoxElement.fn.visualStyle.call(this);\n style.zIndex = -10;\n return style;\n },\n renderComplete: function () {\n if (this.options.visible) {\n this.createGridLines();\n }\n },\n stackRoot: function () {\n return this;\n },\n clipRoot: function () {\n return this;\n },\n createGridLines: function () {\n var axes = this.axes;\n var allAxes = axes.concat(this.parent.axes);\n var vGridLines = [];\n var hGridLines = [];\n for (var i = 0; i < axes.length; i++) {\n var axis = axes[i];\n var vertical = axis.options.vertical;\n var gridLines = vertical ? vGridLines : hGridLines;\n for (var j = 0; j < allAxes.length; j++) {\n if (gridLines.length === 0) {\n var altAxis = allAxes[j];\n if (vertical !== altAxis.options.vertical) {\n append(gridLines, axis.createGridLines(altAxis));\n }\n }\n }\n }\n },\n refresh: function () {\n this.visual.clear();\n this.content.parent = null;\n this.content.createGradient = this.createGradient.bind(this);\n this.content.renderVisual();\n this.content.parent = this;\n if (this.title) {\n this.visual.append(this.title.visual);\n }\n this.visual.append(this.content.visual);\n this.renderComplete();\n this.notifyRender();\n },\n chartsBox: function () {\n var axes = this.axes;\n var length = axes.length;\n var chartsBox = new Box();\n for (var idx = 0; idx < length; idx++) {\n var axis = axes[idx];\n var axisValueField = axis.options.vertical ? Y : X;\n var lineBox = axis.lineBox();\n chartsBox[axisValueField + 1] = lineBox[axisValueField + 1];\n chartsBox[axisValueField + 2] = lineBox[axisValueField + 2];\n }\n if (chartsBox.x2 === 0) {\n var allAxes = this.parent.axes;\n var length$1 = allAxes.length;\n for (var idx$1 = 0; idx$1 < length$1; idx$1++) {\n var axis$1 = allAxes[idx$1];\n if (!axis$1.options.vertical) {\n var lineBox$1 = axis$1.lineBox();\n chartsBox.x1 = lineBox$1.x1;\n chartsBox.x2 = lineBox$1.x2;\n }\n }\n }\n return chartsBox;\n },\n clipBox: function () {\n return this.chartContainer.clipBox;\n },\n notifyRender: function () {\n var service = this.getService();\n if (service) {\n service.notify(PANE_RENDER, {\n pane: new ChartPane(this),\n index: this.paneIndex,\n name: this.options.name\n });\n }\n }\n });\n var ID = 1;\n function paneID() {\n return 'pane' + ID++;\n }\n Pane.prototype.isStackRoot = true;\n setDefaultOptions(Pane, {\n zIndex: -1,\n shrinkToFit: true,\n title: { align: LEFT },\n visible: true\n });\n function appendIfNotNull(array, element) {\n if (element !== null) {\n array.push(element);\n }\n }\n function segmentVisible(series, fields, index) {\n var visible = fields.visible;\n if (defined(visible)) {\n return visible;\n }\n var pointVisibility = series.pointVisibility;\n if (pointVisibility) {\n return pointVisibility[index];\n }\n }\n function bindSegments(series) {\n var data = series.data;\n var points = [];\n var sum = 0;\n var count = 0;\n for (var idx = 0; idx < data.length; idx++) {\n var pointData = SeriesBinder.current.bindPoint(series, idx);\n var value = pointData.valueFields.value;\n if (isString(value)) {\n value = parseFloat(value);\n }\n if (isNumber(value)) {\n pointData.visible = segmentVisible(series, pointData.fields, idx) !== false;\n pointData.value = Math.abs(value);\n points.push(pointData);\n if (pointData.visible) {\n sum += pointData.value;\n }\n if (value !== 0) {\n count++;\n }\n } else {\n points.push(null);\n }\n }\n return {\n total: sum,\n points: points,\n count: count\n };\n }\n function equalsIgnoreCase(a, b) {\n if (a && b) {\n return a.toLowerCase() === b.toLowerCase();\n }\n return a === b;\n }\n function filterSeriesByType(series, types) {\n var result = [];\n var seriesTypes = [].concat(types);\n for (var idx = 0; idx < series.length; idx++) {\n var currentSeries = series[idx];\n if (inArray(currentSeries.type, seriesTypes)) {\n result.push(currentSeries);\n }\n }\n return result;\n }\n function getDateField(field, row, intlService) {\n if (row === null) {\n return row;\n }\n var key = '_date_' + field;\n var value = row[key];\n if (!value) {\n value = parseDate(intlService, getter(field, true)(row));\n row[key] = value;\n }\n return value;\n }\n function isDateAxis(axisOptions, sampleCategory) {\n var type = axisOptions.type;\n var dateCategory = sampleCategory instanceof Date;\n return !type && dateCategory || equalsIgnoreCase(type, DATE);\n }\n function singleItemOrArray(array) {\n return array.length === 1 ? array[0] : array;\n }\n var AREA_REGEX = /area/i;\n function seriesMissingValues(series) {\n if (series.missingValues) {\n return series.missingValues;\n }\n return AREA_REGEX.test(series.type) || series.stack ? ZERO : INTERPOLATE;\n }\n function hasValue$1(series, item) {\n var fields = SeriesBinder.current.bindPoint(series, null, item);\n var valueFields = fields.valueFields;\n for (var field in valueFields) {\n if (dataviz.convertableToNumber(valueFields[field])) {\n return true;\n }\n }\n }\n function findNext(ref) {\n var start = ref.start;\n var dir = ref.dir;\n var min = ref.min;\n var max = ref.max;\n var getter$$1 = ref.getter;\n var hasItem = ref.hasItem;\n var series = ref.series;\n var pointHasValue, outPoint;\n var idx = start;\n do {\n idx += dir;\n if (hasItem(idx)) {\n outPoint = getter$$1(idx);\n pointHasValue = hasValue$1(series, outPoint.item);\n }\n } while (min <= idx && idx <= max && !pointHasValue);\n if (pointHasValue) {\n return outPoint;\n }\n }\n function createOutOfRangePoints(series, range, count, getter$$1, hasItem) {\n var min = range.min;\n var max = range.max;\n var hasMinPoint = min > 0 && min < count;\n var hasMaxPoint = max + 1 < count;\n if (hasMinPoint || hasMaxPoint) {\n var missingValues = seriesMissingValues(series);\n var minPoint, maxPoint;\n if (missingValues !== INTERPOLATE) {\n if (hasMinPoint) {\n minPoint = getter$$1(min - 1);\n }\n if (hasMaxPoint) {\n maxPoint = getter$$1(max + 1);\n }\n } else {\n var outPoint, pointHasValue;\n if (hasMinPoint) {\n outPoint = getter$$1(min - 1);\n pointHasValue = hasValue$1(series, outPoint.item);\n if (!pointHasValue) {\n minPoint = findNext({\n start: min,\n dir: -1,\n min: 0,\n max: count - 1,\n getter: getter$$1,\n hasItem: hasItem,\n series: series\n });\n } else {\n minPoint = outPoint;\n }\n }\n if (hasMaxPoint) {\n outPoint = getter$$1(max + 1);\n pointHasValue = hasValue$1(series, outPoint.item);\n if (!pointHasValue) {\n maxPoint = findNext({\n start: max,\n dir: 1,\n min: 0,\n max: count - 1,\n getter: getter$$1,\n hasItem: hasItem,\n series: series\n });\n } else {\n maxPoint = outPoint;\n }\n }\n }\n if (minPoint) {\n series._outOfRangeMinPoint = minPoint;\n }\n if (maxPoint) {\n series._outOfRangeMaxPoint = maxPoint;\n }\n }\n }\n var PlotAreaBase = ChartElement.extend({\n init: function (series, options, chartService) {\n ChartElement.fn.init.call(this, options);\n this.initFields(series, options);\n this.series = series;\n this.initSeries();\n this.charts = [];\n this.options.legend.items = [];\n this.axes = [];\n this.crosshairs = [];\n this.chartService = chartService;\n this.originalOptions = options;\n this.createPanes();\n this.render();\n this.createCrosshairs();\n },\n initFields: function () {\n },\n initSeries: function () {\n var series = this.series;\n for (var i = 0; i < series.length; i++) {\n series[i].index = i;\n }\n },\n createPanes: function () {\n var this$1 = this;\n var defaults = { title: { color: (this.options.title || {}).color } };\n var panes = [];\n var paneOptions = this.options.panes || [];\n var panesLength = Math.max(paneOptions.length, 1);\n function setTitle(options, defaults) {\n if (isString(options.title)) {\n options.title = { text: options.title };\n }\n options.title = deepExtend({}, defaults.title, options.title);\n }\n for (var i = 0; i < panesLength; i++) {\n var options = paneOptions[i] || {};\n setTitle(options, defaults);\n var currentPane = new Pane(options);\n currentPane.paneIndex = i;\n panes.push(currentPane);\n this$1.append(currentPane);\n }\n this.panes = panes;\n },\n createCrosshairs: function (panes) {\n var this$1 = this;\n if (panes === void 0) {\n panes = this.panes;\n }\n for (var i = 0; i < panes.length; i++) {\n var pane = panes[i];\n for (var j = 0; j < pane.axes.length; j++) {\n var axis = pane.axes[j];\n if (axis.options.crosshair && axis.options.crosshair.visible) {\n var currentCrosshair = new Crosshair(this$1.chartService, axis, axis.options.crosshair);\n this$1.crosshairs.push(currentCrosshair);\n pane.content.append(currentCrosshair);\n }\n }\n }\n },\n removeCrosshairs: function (pane) {\n var crosshairs = this.crosshairs;\n var axes = pane.axes;\n for (var i = crosshairs.length - 1; i >= 0; i--) {\n for (var j = 0; j < axes.length; j++) {\n if (crosshairs[i].axis === axes[j]) {\n crosshairs.splice(i, 1);\n break;\n }\n }\n }\n },\n hideCrosshairs: function () {\n var crosshairs = this.crosshairs;\n for (var idx = 0; idx < crosshairs.length; idx++) {\n crosshairs[idx].hide();\n }\n },\n findPane: function (name) {\n var panes = this.panes;\n var matchingPane;\n for (var i = 0; i < panes.length; i++) {\n if (panes[i].options.name === name) {\n matchingPane = panes[i];\n break;\n }\n }\n return matchingPane || panes[0];\n },\n findPointPane: function (point) {\n var panes = this.panes;\n var matchingPane;\n for (var i = 0; i < panes.length; i++) {\n if (panes[i].box.containsPoint(point)) {\n matchingPane = panes[i];\n break;\n }\n }\n return matchingPane;\n },\n appendAxis: function (axis) {\n var pane = this.findPane(axis.options.pane);\n pane.appendAxis(axis);\n this.axes.push(axis);\n axis.plotArea = this;\n },\n removeAxis: function (axisToRemove) {\n var this$1 = this;\n var filteredAxes = [];\n for (var i = 0; i < this.axes.length; i++) {\n var axis = this$1.axes[i];\n if (axisToRemove !== axis) {\n filteredAxes.push(axis);\n } else {\n axis.destroy();\n }\n }\n this.axes = filteredAxes;\n },\n appendChart: function (chart, pane) {\n this.charts.push(chart);\n if (pane) {\n pane.appendChart(chart);\n } else {\n this.append(chart);\n }\n },\n removeChart: function (chartToRemove) {\n var this$1 = this;\n var filteredCharts = [];\n for (var i = 0; i < this.charts.length; i++) {\n var chart = this$1.charts[i];\n if (chart !== chartToRemove) {\n filteredCharts.push(chart);\n } else {\n chart.destroy();\n }\n }\n this.charts = filteredCharts;\n },\n addToLegend: function (series) {\n var count = series.length;\n var legend = this.options.legend;\n var labels = legend.labels || {};\n var inactiveItems = legend.inactiveItems || {};\n var inactiveItemsLabels = inactiveItems.labels || {};\n var data = [];\n for (var i = 0; i < count; i++) {\n var currentSeries = series[i];\n var seriesVisible = currentSeries.visible !== false;\n if (currentSeries.visibleInLegend === false) {\n continue;\n }\n var text = currentSeries.name;\n var labelTemplate = seriesVisible ? getTemplate(labels) : getTemplate(inactiveItemsLabels) || getTemplate(labels);\n if (labelTemplate) {\n text = labelTemplate({\n text: hasValue(text) ? text : '',\n series: currentSeries\n });\n }\n var defaults = currentSeries._defaults;\n var color = currentSeries.color;\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n var itemLabelOptions = void 0, markerColor = void 0;\n if (seriesVisible) {\n itemLabelOptions = {};\n markerColor = color;\n } else {\n itemLabelOptions = {\n color: inactiveItemsLabels.color,\n font: inactiveItemsLabels.font\n };\n markerColor = inactiveItems.markers.color;\n }\n if (hasValue(text) && text !== '') {\n data.push({\n text: text,\n labels: itemLabelOptions,\n markerColor: markerColor,\n series: currentSeries,\n active: seriesVisible\n });\n }\n }\n append(legend.items, data);\n },\n groupAxes: function (panes) {\n var xAxes = [];\n var yAxes = [];\n for (var paneIx = 0; paneIx < panes.length; paneIx++) {\n var paneAxes = panes[paneIx].axes;\n for (var axisIx = 0; axisIx < paneAxes.length; axisIx++) {\n var axis = paneAxes[axisIx];\n if (axis.options.vertical) {\n yAxes.push(axis);\n } else {\n xAxes.push(axis);\n }\n }\n }\n return {\n x: xAxes,\n y: yAxes,\n any: xAxes.concat(yAxes)\n };\n },\n groupSeriesByPane: function () {\n var this$1 = this;\n var series = this.series;\n var seriesByPane = {};\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n var pane = this$1.seriesPaneName(currentSeries);\n if (seriesByPane[pane]) {\n seriesByPane[pane].push(currentSeries);\n } else {\n seriesByPane[pane] = [currentSeries];\n }\n }\n return seriesByPane;\n },\n filterVisibleSeries: function (series) {\n var result = [];\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n if (currentSeries.visible !== false) {\n result.push(currentSeries);\n }\n }\n return result;\n },\n reflow: function (targetBox) {\n var options = this.options.plotArea;\n var panes = this.panes;\n var margin = getSpacing(options.margin);\n this.box = targetBox.clone().unpad(margin);\n this.reflowPanes();\n this.detachLabels();\n this.reflowAxes(panes);\n this.reflowCharts(panes);\n },\n redraw: function (panes) {\n var this$1 = this;\n var panesArray = [].concat(panes);\n this.initSeries();\n var root = this.getRoot();\n if (root) {\n root.cleanGradients();\n }\n for (var i = 0; i < panesArray.length; i++) {\n this$1.removeCrosshairs(panesArray[i]);\n panesArray[i].empty();\n }\n this.render(panesArray);\n this.detachLabels();\n this.reflowAxes(this.panes);\n this.reflowCharts(panesArray);\n this.createCrosshairs(panesArray);\n for (var i$1 = 0; i$1 < panesArray.length; i$1++) {\n panesArray[i$1].refresh();\n }\n },\n axisCrossingValues: function (axis, crossingAxes) {\n var options = axis.options;\n var crossingValues = [].concat(options.axisCrossingValues || options.axisCrossingValue);\n var valuesToAdd = crossingAxes.length - crossingValues.length;\n var defaultValue = crossingValues[0] || 0;\n for (var i = 0; i < valuesToAdd; i++) {\n crossingValues.push(defaultValue);\n }\n return crossingValues;\n },\n alignAxisTo: function (axis, targetAxis, crossingValue, targetCrossingValue) {\n var slot = axis.getSlot(crossingValue, crossingValue, true);\n var slotEdge = axis.options.reverse ? 2 : 1;\n var targetSlot = targetAxis.getSlot(targetCrossingValue, targetCrossingValue, true);\n var targetEdge = targetAxis.options.reverse ? 2 : 1;\n var axisBox = axis.box.translate(targetSlot[X + targetEdge] - slot[X + slotEdge], targetSlot[Y + targetEdge] - slot[Y + slotEdge]);\n if (axis.pane !== targetAxis.pane) {\n axisBox.translate(0, axis.pane.box.y1 - targetAxis.pane.box.y1);\n }\n axis.reflow(axisBox);\n },\n alignAxes: function (xAxes, yAxes) {\n var this$1 = this;\n var xAnchor = xAxes[0];\n var yAnchor = yAxes[0];\n var xAnchorCrossings = this.axisCrossingValues(xAnchor, yAxes);\n var yAnchorCrossings = this.axisCrossingValues(yAnchor, xAxes);\n var leftAnchors = {};\n var rightAnchors = {};\n var topAnchors = {};\n var bottomAnchors = {};\n for (var i = 0; i < yAxes.length; i++) {\n var axis = yAxes[i];\n var pane = axis.pane;\n var paneId = pane.id;\n var visible = axis.options.visible !== false;\n var anchor = paneAnchor(xAxes, pane) || xAnchor;\n var anchorCrossings = xAnchorCrossings;\n if (anchor !== xAnchor) {\n anchorCrossings = this$1.axisCrossingValues(anchor, yAxes);\n }\n this$1.alignAxisTo(axis, anchor, yAnchorCrossings[i], anchorCrossings[i]);\n if (axis.options._overlap) {\n continue;\n }\n if (round(axis.lineBox().x1) === round(anchor.lineBox().x1)) {\n if (leftAnchors[paneId]) {\n axis.reflow(axis.box.alignTo(leftAnchors[paneId].box, LEFT).translate(-axis.options.margin, 0));\n }\n if (visible) {\n leftAnchors[paneId] = axis;\n }\n }\n if (round(axis.lineBox().x2) === round(anchor.lineBox().x2)) {\n if (!axis._mirrored) {\n axis.options.labels.mirror = !axis.options.labels.mirror;\n axis._mirrored = true;\n }\n this$1.alignAxisTo(axis, anchor, yAnchorCrossings[i], anchorCrossings[i]);\n if (rightAnchors[paneId]) {\n axis.reflow(axis.box.alignTo(rightAnchors[paneId].box, RIGHT).translate(axis.options.margin, 0));\n }\n if (visible) {\n rightAnchors[paneId] = axis;\n }\n }\n if (i !== 0 && yAnchor.pane === axis.pane) {\n axis.alignTo(yAnchor);\n axis.reflow(axis.box);\n }\n }\n for (var i$1 = 0; i$1 < xAxes.length; i$1++) {\n var axis$1 = xAxes[i$1];\n var pane$1 = axis$1.pane;\n var paneId$1 = pane$1.id;\n var visible$1 = axis$1.options.visible !== false;\n var anchor$1 = paneAnchor(yAxes, pane$1) || yAnchor;\n var anchorCrossings$1 = yAnchorCrossings;\n if (anchor$1 !== yAnchor) {\n anchorCrossings$1 = this$1.axisCrossingValues(anchor$1, xAxes);\n }\n this$1.alignAxisTo(axis$1, anchor$1, xAnchorCrossings[i$1], anchorCrossings$1[i$1]);\n if (axis$1.options._overlap) {\n continue;\n }\n if (round(axis$1.lineBox().y1) === round(anchor$1.lineBox().y1)) {\n if (!axis$1._mirrored) {\n axis$1.options.labels.mirror = !axis$1.options.labels.mirror;\n axis$1._mirrored = true;\n }\n this$1.alignAxisTo(axis$1, anchor$1, xAnchorCrossings[i$1], anchorCrossings$1[i$1]);\n if (topAnchors[paneId$1]) {\n axis$1.reflow(axis$1.box.alignTo(topAnchors[paneId$1].box, TOP).translate(0, -axis$1.options.margin));\n }\n if (visible$1) {\n topAnchors[paneId$1] = axis$1;\n }\n }\n if (round(axis$1.lineBox().y2, datavizConstants.COORD_PRECISION) === round(anchor$1.lineBox().y2, datavizConstants.COORD_PRECISION)) {\n if (bottomAnchors[paneId$1]) {\n axis$1.reflow(axis$1.box.alignTo(bottomAnchors[paneId$1].box, BOTTOM).translate(0, axis$1.options.margin));\n }\n if (visible$1) {\n bottomAnchors[paneId$1] = axis$1;\n }\n }\n if (i$1 !== 0) {\n axis$1.alignTo(xAnchor);\n axis$1.reflow(axis$1.box);\n }\n }\n },\n shrinkAxisWidth: function (panes) {\n var axes = this.groupAxes(panes).any;\n var axisBox = axisGroupBox(axes);\n var overflowX = 0;\n for (var i = 0; i < panes.length; i++) {\n var currentPane = panes[i];\n if (currentPane.axes.length > 0) {\n overflowX = Math.max(overflowX, axisBox.width() - currentPane.contentBox.width());\n }\n }\n if (overflowX !== 0) {\n for (var i$1 = 0; i$1 < axes.length; i$1++) {\n var currentAxis = axes[i$1];\n if (!currentAxis.options.vertical) {\n currentAxis.reflow(currentAxis.box.shrink(overflowX, 0));\n }\n }\n }\n },\n shrinkAxisHeight: function (panes) {\n var shrinked;\n for (var i = 0; i < panes.length; i++) {\n var currentPane = panes[i];\n var axes = currentPane.axes;\n var overflowY = Math.max(0, axisGroupBox(axes).height() - currentPane.contentBox.height());\n if (overflowY !== 0) {\n for (var j = 0; j < axes.length; j++) {\n var currentAxis = axes[j];\n if (currentAxis.options.vertical) {\n currentAxis.reflow(currentAxis.box.shrink(0, overflowY));\n }\n }\n shrinked = true;\n }\n }\n return shrinked;\n },\n fitAxes: function (panes) {\n var axes = this.groupAxes(panes).any;\n var offsetX = 0;\n for (var i = 0; i < panes.length; i++) {\n var currentPane = panes[i];\n var paneAxes = currentPane.axes;\n var paneBox = currentPane.contentBox;\n if (paneAxes.length > 0) {\n var axisBox = axisGroupBox(paneAxes);\n var offsetY = Math.max(paneBox.y1 - axisBox.y1, paneBox.y2 - axisBox.y2);\n offsetX = Math.max(offsetX, paneBox.x1 - axisBox.x1);\n for (var j = 0; j < paneAxes.length; j++) {\n var currentAxis = paneAxes[j];\n currentAxis.reflow(currentAxis.box.translate(0, offsetY));\n }\n }\n }\n for (var i$1 = 0; i$1 < axes.length; i$1++) {\n var currentAxis$1 = axes[i$1];\n currentAxis$1.reflow(currentAxis$1.box.translate(offsetX, 0));\n }\n },\n reflowAxes: function (panes) {\n var this$1 = this;\n var axes = this.groupAxes(panes);\n for (var i = 0; i < panes.length; i++) {\n this$1.reflowPaneAxes(panes[i]);\n }\n if (axes.x.length > 0 && axes.y.length > 0) {\n this.alignAxes(axes.x, axes.y);\n this.shrinkAxisWidth(panes);\n this.autoRotateAxisLabels(axes);\n this.alignAxes(axes.x, axes.y);\n if (this.shrinkAxisWidth(panes)) {\n this.alignAxes(axes.x, axes.y);\n }\n this.shrinkAxisHeight(panes);\n this.alignAxes(axes.x, axes.y);\n if (this.shrinkAxisHeight(panes)) {\n this.alignAxes(axes.x, axes.y);\n }\n this.fitAxes(panes);\n }\n },\n autoRotateAxisLabels: function (groupedAxes) {\n var this$1 = this;\n var ref = this;\n var panes = ref.panes;\n var axes = allPaneAxes(panes);\n var rotated;\n for (var idx = 0; idx < axes.length; idx++) {\n var axis = axes[idx];\n if (axis.autoRotateLabels()) {\n rotated = true;\n }\n }\n if (rotated) {\n for (var idx$1 = 0; idx$1 < panes.length; idx$1++) {\n this$1.reflowPaneAxes(panes[idx$1]);\n }\n if (groupedAxes.x.length > 0 && groupedAxes.y.length > 0) {\n this.alignAxes(groupedAxes.x, groupedAxes.y);\n this.shrinkAxisWidth(panes);\n }\n }\n },\n reflowPaneAxes: function (pane) {\n var axes = pane.axes;\n var length = axes.length;\n if (length > 0) {\n for (var i = 0; i < length; i++) {\n axes[i].reflow(pane.contentBox);\n }\n }\n },\n reflowCharts: function (panes) {\n var charts = this.charts;\n var count = charts.length;\n var box = this.box;\n for (var i = 0; i < count; i++) {\n var chartPane = charts[i].pane;\n if (!chartPane || inArray(chartPane, panes)) {\n charts[i].reflow(box);\n }\n }\n },\n reflowPanes: function () {\n var ref = this;\n var box = ref.box;\n var panes = ref.panes;\n var panesLength = panes.length;\n var remainingHeight = box.height();\n var remainingPanes = panesLength;\n var autoHeightPanes = 0;\n var top = box.y1;\n for (var i = 0; i < panesLength; i++) {\n var currentPane = panes[i];\n var height = currentPane.options.height;\n currentPane.options.width = box.width();\n if (!currentPane.options.height) {\n autoHeightPanes++;\n } else {\n if (height.indexOf && height.indexOf('%')) {\n var percents = parseInt(height, 10) / 100;\n currentPane.options.height = percents * box.height();\n }\n currentPane.reflow(box.clone());\n remainingHeight -= currentPane.options.height;\n }\n }\n for (var i$1 = 0; i$1 < panesLength; i$1++) {\n var currentPane$1 = panes[i$1];\n if (!currentPane$1.options.height) {\n currentPane$1.options.height = remainingHeight / autoHeightPanes;\n }\n }\n for (var i$2 = 0; i$2 < panesLength; i$2++) {\n var currentPane$2 = panes[i$2];\n var paneBox = box.clone().move(box.x1, top);\n currentPane$2.reflow(paneBox);\n remainingPanes--;\n top += currentPane$2.options.height;\n }\n },\n backgroundBox: function () {\n var axes = this.axes;\n var axesCount = axes.length;\n var box;\n for (var i = 0; i < axesCount; i++) {\n var axisA = axes[i];\n for (var j = 0; j < axesCount; j++) {\n var axisB = axes[j];\n if (axisA.options.vertical !== axisB.options.vertical) {\n var lineBox = axisA.lineBox().clone().wrap(axisB.lineBox());\n if (!box) {\n box = lineBox;\n } else {\n box = box.wrap(lineBox);\n }\n }\n }\n }\n return box || this.box;\n },\n chartsBoxes: function () {\n var panes = this.panes;\n var boxes = [];\n for (var idx = 0; idx < panes.length; idx++) {\n boxes.push(panes[idx].chartsBox());\n }\n return boxes;\n },\n addBackgroundPaths: function (multipath) {\n var boxes = this.chartsBoxes();\n for (var idx = 0; idx < boxes.length; idx++) {\n multipath.paths.push(Path.fromRect(boxes[idx].toRect()));\n }\n },\n backgroundContainsPoint: function (point) {\n var boxes = this.chartsBoxes();\n for (var idx = 0; idx < boxes.length; idx++) {\n if (boxes[idx].containsPoint(point)) {\n return true;\n }\n }\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n var options = this.options.plotArea;\n var opacity = options.opacity;\n var background = options.background;\n var border = options.border;\n if (border === void 0) {\n border = {};\n }\n if (isTransparent(background)) {\n background = WHITE;\n opacity = 0;\n }\n var bg = this._bgVisual = new drawing.MultiPath({\n fill: {\n color: background,\n opacity: opacity\n },\n stroke: {\n color: border.width ? border.color : '',\n width: border.width,\n dashType: border.dashType\n },\n zIndex: -1\n });\n this.addBackgroundPaths(bg);\n this.appendVisual(bg);\n },\n pointsByCategoryIndex: function (categoryIndex) {\n var charts = this.charts;\n var result = [];\n if (categoryIndex !== null) {\n for (var i = 0; i < charts.length; i++) {\n var chart = charts[i];\n if (chart.pane.options.name === '_navigator') {\n continue;\n }\n var points = charts[i].categoryPoints[categoryIndex];\n if (points && points.length) {\n for (var j = 0; j < points.length; j++) {\n var point = points[j];\n if (point && defined(point.value) && point.value !== null) {\n result.push(point);\n }\n }\n }\n }\n }\n return result;\n },\n pointsBySeriesIndex: function (seriesIndex) {\n return this.filterPoints(function (point) {\n return point.series.index === seriesIndex;\n });\n },\n pointsBySeriesName: function (name) {\n return this.filterPoints(function (point) {\n return point.series.name === name;\n });\n },\n filterPoints: function (callback) {\n var charts = this.charts;\n var result = [];\n for (var i = 0; i < charts.length; i++) {\n var chart = charts[i];\n var points = chart.points;\n for (var j = 0; j < points.length; j++) {\n var point = points[j];\n if (point && point.visible !== false && callback(point)) {\n result.push(point);\n }\n }\n }\n return result;\n },\n findPoint: function (callback) {\n var charts = this.charts;\n for (var i = 0; i < charts.length; i++) {\n var chart = charts[i];\n var points = chart.points;\n for (var j = 0; j < points.length; j++) {\n var point = points[j];\n if (point && point.visible !== false && callback(point)) {\n return point;\n }\n }\n }\n },\n paneByPoint: function (point) {\n var panes = this.panes;\n for (var i = 0; i < panes.length; i++) {\n var pane = panes[i];\n if (pane.box.containsPoint(point)) {\n return pane;\n }\n }\n },\n detachLabels: function () {\n var axes = this.groupAxes(this.panes);\n var xAxes = axes.x;\n var yAxes = axes.y;\n this.detachAxisGroupLabels(yAxes, xAxes);\n this.detachAxisGroupLabels(xAxes, yAxes);\n },\n detachAxisGroupLabels: function (axes, crossingAxes) {\n var this$1 = this;\n var labelAxisCount = 0;\n for (var i = 0; i < axes.length; i++) {\n var axis = axes[i];\n var pane = axis.pane;\n var anchor = paneAnchor(crossingAxes, pane) || crossingAxes[0];\n var axisIndex = i + labelAxisCount;\n var labelAxis = this$1.createLabelAxis(axis, axisIndex, anchor);\n if (labelAxis) {\n labelAxisCount++;\n var pos = pane.axes.indexOf(axis) + labelAxisCount;\n pane.appendAxisAt(labelAxis, pos);\n }\n }\n },\n createLabelAxis: function (axis, axisIndex, anchor) {\n var labelOptions = axis.options.labels;\n var position = labelOptions.position;\n var onAxis = position !== datavizConstants.END && position !== datavizConstants.START;\n var visible = labelOptions.visible;\n if (onAxis || visible === false) {\n return null;\n }\n var allAxes = this.groupAxes(this.panes);\n var crossingAxes = anchor.options.vertical ? allAxes.x : allAxes.y;\n var anchorCrossings = this.axisCrossingValues(anchor, crossingAxes);\n var end = position === datavizConstants.END;\n var range = anchor.range();\n var edge = end ? range.max : range.min;\n var crossingValue = limitValue(anchorCrossings[axisIndex], range.min, range.max);\n if (crossingValue - edge === 0) {\n return null;\n }\n anchorCrossings.splice(axisIndex + 1, 0, edge);\n anchor.options.axisCrossingValues = anchorCrossings;\n var labelAxis = axis.clone();\n axis.clear();\n labelAxis.options.name = undefined;\n labelAxis.options.line.visible = false;\n labelAxis.options.crosshair = undefined;\n labelAxis.options.notes = undefined;\n labelAxis.options.plotBands = undefined;\n return labelAxis;\n }\n });\n function axisGroupBox(axes) {\n var length = axes.length;\n var box;\n if (length > 0) {\n for (var i = 0; i < length; i++) {\n var axisBox = axes[i].contentBox();\n if (!box) {\n box = axisBox.clone();\n } else {\n box.wrap(axisBox);\n }\n }\n }\n return box || new Box();\n }\n function paneAnchor(axes, pane) {\n for (var i = 0; i < axes.length; i++) {\n var anchor = axes[i];\n if (anchor && anchor.pane === pane) {\n return anchor;\n }\n }\n }\n function isTransparent(color) {\n return color === '' || color === null || color === 'none' || color === 'transparent' || !defined(color);\n }\n var allPaneAxes = function (panes) {\n return panes.reduce(function (acc, pane) {\n return acc.concat(pane.axes);\n }, []);\n };\n setDefaultOptions(PlotAreaBase, {\n series: [],\n plotArea: { margin: {} },\n background: '',\n border: {\n color: BLACK,\n width: 0\n },\n legend: {\n inactiveItems: {\n labels: { color: '#919191' },\n markers: { color: '#919191' }\n }\n }\n });\n var PlotAreaEventsMixin = {\n hover: function (chart, e) {\n this._dispatchEvent(chart, e, PLOT_AREA_HOVER);\n },\n click: function (chart, e) {\n this._dispatchEvent(chart, e, PLOT_AREA_CLICK);\n }\n };\n var SeriesAggregator = Class.extend({\n init: function (series, binder, defaultAggregates) {\n var canonicalFields = binder.canonicalFields(series);\n var valueFields = binder.valueFields(series);\n var sourceFields = binder.sourceFields(series, canonicalFields);\n var seriesFields = this._seriesFields = [];\n var defaults = defaultAggregates.query(series.type);\n var rootAggregate = series.aggregate || defaults;\n this._series = series;\n this._binder = binder;\n for (var i = 0; i < canonicalFields.length; i++) {\n var field = canonicalFields[i];\n var fieldAggregate = void 0;\n if (isObject(rootAggregate)) {\n fieldAggregate = rootAggregate[field];\n } else if (i === 0 || inArray(field, valueFields)) {\n fieldAggregate = rootAggregate;\n } else {\n break;\n }\n if (fieldAggregate) {\n seriesFields.push({\n canonicalName: field,\n name: sourceFields[i],\n transform: isFunction(fieldAggregate) ? fieldAggregate : Aggregates[fieldAggregate]\n });\n }\n }\n },\n aggregatePoints: function (srcPoints, group) {\n var this$1 = this;\n var ref = this;\n var series = ref._series;\n var seriesFields = ref._seriesFields;\n var data = this._bindPoints(srcPoints || []);\n var firstDataItem = data.dataItems[0];\n var result = {};\n if (firstDataItem && !isNumber(firstDataItem) && !isArray(firstDataItem)) {\n var fn = function () {\n };\n fn.prototype = firstDataItem;\n result = new fn();\n }\n for (var i = 0; i < seriesFields.length; i++) {\n var field = seriesFields[i];\n var srcValues = this$1._bindField(data.values, field.canonicalName);\n var value = field.transform(srcValues, series, data.dataItems, group);\n if (value !== null && isObject(value) && !defined(value.length) && !(value instanceof Date)) {\n result = value;\n break;\n } else {\n if (defined(value)) {\n setValue(field.name, result, value);\n }\n }\n }\n return result;\n },\n _bindPoints: function (points) {\n var ref = this;\n var binder = ref._binder;\n var series = ref._series;\n var values = [];\n var dataItems = [];\n for (var i = 0; i < points.length; i++) {\n var pointIx = points[i];\n values.push(binder.bindPoint(series, pointIx));\n dataItems.push(series.data[pointIx]);\n }\n return {\n values: values,\n dataItems: dataItems\n };\n },\n _bindField: function (data, field) {\n var values = [];\n var count = data.length;\n for (var i = 0; i < count; i++) {\n var item = data[i];\n var valueFields = item.valueFields;\n var value = void 0;\n if (defined(valueFields[field])) {\n value = valueFields[field];\n } else {\n value = item.fields[field];\n }\n values.push(value);\n }\n return values;\n }\n });\n function setValue(fieldName, target, value) {\n var parentObj = target;\n var field = fieldName;\n if (fieldName.indexOf('.') > -1) {\n var parts = fieldName.split('.');\n while (parts.length > 1) {\n field = parts.shift();\n if (!defined(parentObj[field])) {\n parentObj[field] = {};\n }\n parentObj = parentObj[field];\n }\n field = parts.shift();\n }\n parentObj[field] = value;\n }\n var DefaultAggregates = Class.extend({\n init: function () {\n this._defaults = {};\n },\n register: function (seriesTypes, aggregates) {\n var this$1 = this;\n for (var i = 0; i < seriesTypes.length; i++) {\n this$1._defaults[seriesTypes[i]] = aggregates;\n }\n },\n query: function (seriesType) {\n return this._defaults[seriesType];\n }\n });\n DefaultAggregates.current = new DefaultAggregates();\n var RangeBar = Bar.extend({\n createLabel: function () {\n var labels = this.options.labels;\n var fromOptions = deepExtend({}, labels, labels.from);\n var toOptions = deepExtend({}, labels, labels.to);\n if (fromOptions.visible) {\n this.labelFrom = this._createLabel(fromOptions);\n this.append(this.labelFrom);\n }\n if (toOptions.visible) {\n this.labelTo = this._createLabel(toOptions);\n this.append(this.labelTo);\n }\n },\n _createLabel: function (options) {\n var labelTemplate = getTemplate(options);\n var pointData = this.pointData();\n var labelText;\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else {\n labelText = this.formatValue(options.format);\n }\n return new BarLabel(labelText, deepExtend({ vertical: this.options.vertical }, options), pointData);\n },\n reflow: function (targetBox) {\n this.render();\n var ref = this;\n var labelFrom = ref.labelFrom;\n var labelTo = ref.labelTo;\n var value = ref.value;\n this.box = targetBox;\n if (labelFrom) {\n labelFrom.options.aboveAxis = value.from > value.to;\n labelFrom.reflow(targetBox);\n }\n if (labelTo) {\n labelTo.options.aboveAxis = value.to > value.from;\n labelTo.reflow(targetBox);\n }\n if (this.note) {\n this.note.reflow(targetBox);\n }\n }\n });\n RangeBar.prototype.defaults = deepExtend({}, RangeBar.prototype.defaults, {\n labels: { format: '{0} - {1}' },\n tooltip: { format: '{1}' }\n });\n var RangeBarChart = BarChart.extend({\n pointType: function () {\n return RangeBar;\n },\n pointValue: function (data) {\n return data.valueFields;\n },\n formatPointValue: function (point, format) {\n if (point.value.from === null && point.value.to === null) {\n return '';\n }\n return this.chartService.format.auto(format, point.value.from, point.value.to);\n },\n plotRange: function (point) {\n if (!point) {\n return 0;\n }\n return [\n point.value.from,\n point.value.to\n ];\n },\n updateRange: function (value, fields) {\n var axisName = fields.series.axis;\n var from = value.from;\n var to = value.to;\n var axisRange = this.valueAxisRanges[axisName];\n if (value !== null && isNumber(from) && isNumber(to)) {\n axisRange = this.valueAxisRanges[axisName] = axisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n axisRange.min = Math.min(axisRange.min, from);\n axisRange.max = Math.max(axisRange.max, from);\n axisRange.min = Math.min(axisRange.min, to);\n axisRange.max = Math.max(axisRange.max, to);\n }\n },\n aboveAxis: function (point) {\n var value = point.value;\n return value.from < value.to;\n }\n });\n RangeBarChart.prototype.plotLimits = CategoricalChart.prototype.plotLimits;\n var RangeLinePoint = LinePoint.extend({\n aliasFor: function () {\n return this.parent;\n }\n });\n var AUTO = 'auto';\n var DEFAULT_FROM_FORMAT = '{0}';\n var DEFAULT_TO_FORMAT = '{1}';\n var RangeAreaPoint = ChartElement.extend({\n init: function (value, options) {\n ChartElement.fn.init.call(this);\n this.value = value;\n this.options = options;\n this.aboveAxis = valueOrDefault(this.options.aboveAxis, true);\n this.tooltipTracking = true;\n this.initLabelsFormat();\n },\n render: function () {\n if (this._rendered) {\n return;\n }\n this._rendered = true;\n var ref = this.options;\n var markers = ref.markers;\n var labels = ref.labels;\n var value = this.value;\n var fromPoint = this.fromPoint = new RangeLinePoint(value, deepExtend({}, this.options, {\n labels: labels.from,\n markers: markers.from\n }));\n var toPoint = this.toPoint = new RangeLinePoint(value, deepExtend({}, this.options, {\n labels: labels.to,\n markers: markers.to\n }));\n this.copyFields(fromPoint);\n this.copyFields(toPoint);\n this.append(fromPoint);\n this.append(toPoint);\n },\n reflow: function (targetBox) {\n this.render();\n var fromBox = targetBox.from;\n var toBox = targetBox.to;\n this.positionLabels(fromBox, toBox);\n this.fromPoint.reflow(fromBox);\n this.toPoint.reflow(toBox);\n this.box = this.fromPoint.markerBox().clone().wrap(this.toPoint.markerBox());\n },\n createHighlight: function () {\n var group = new Group();\n group.append(this.fromPoint.createHighlight());\n group.append(this.toPoint.createHighlight());\n return group;\n },\n highlightVisual: function () {\n return this.visual;\n },\n highlightVisualArgs: function () {\n return {\n options: this.options,\n from: this.fromPoint.highlightVisualArgs(),\n to: this.toPoint.highlightVisualArgs()\n };\n },\n tooltipAnchor: function () {\n var clipBox = this.owner.pane.clipBox();\n var showTooltip = !clipBox || clipBox.overlaps(this.box);\n if (showTooltip) {\n var box = this.box;\n var center = box.center();\n var horizontalAlign = LEFT;\n var x, y, verticalAlign;\n if (this.options.vertical) {\n x = center.x;\n y = box.y1 - TOOLTIP_OFFSET;\n verticalAlign = BOTTOM;\n } else {\n x = box.x2 + TOOLTIP_OFFSET;\n y = center.y;\n verticalAlign = CENTER;\n }\n return {\n point: new Point(x, y),\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n }\n },\n formatValue: function (format) {\n return this.owner.formatPointValue(this, format);\n },\n overlapsBox: function (box) {\n return this.box.overlaps(box);\n },\n unclipElements: function () {\n this.fromPoint.unclipElements();\n this.toPoint.unclipElements();\n },\n initLabelsFormat: function () {\n var labels = this.options.labels;\n if (!labels.format) {\n if (!labels.from || !labels.from.format) {\n labels.from = $.extend({}, labels.from, { format: DEFAULT_FROM_FORMAT });\n }\n if (!labels.to || !labels.to.format) {\n labels.to = $.extend({}, labels.to, { format: DEFAULT_TO_FORMAT });\n }\n }\n },\n positionLabels: function (fromBox, toBox) {\n var ref = this.options;\n var labels = ref.labels;\n var vertical = ref.vertical;\n if (labels.position === AUTO) {\n var fromLabelPosition, toLabelPosition;\n if (vertical) {\n if (toBox.y1 <= fromBox.y1) {\n toLabelPosition = ABOVE;\n fromLabelPosition = BELOW;\n } else {\n toLabelPosition = BELOW;\n fromLabelPosition = ABOVE;\n }\n } else {\n if (toBox.x1 <= fromBox.x1) {\n toLabelPosition = LEFT;\n fromLabelPosition = RIGHT;\n } else {\n toLabelPosition = RIGHT;\n fromLabelPosition = LEFT;\n }\n }\n if (!labels.from || !labels.from.position) {\n this.fromPoint.options.labels.position = fromLabelPosition;\n }\n if (!labels.to || !labels.to.position) {\n this.toPoint.options.labels.position = toLabelPosition;\n }\n }\n },\n copyFields: function (point) {\n point.dataItem = this.dataItem;\n point.category = this.category;\n point.series = this.series;\n point.color = this.color;\n point.owner = this.owner;\n }\n });\n deepExtend(RangeAreaPoint.prototype, PointEventsMixin);\n deepExtend(RangeAreaPoint.prototype, NoteMixin);\n RangeAreaPoint.prototype.defaults = {\n markers: {\n visible: false,\n background: WHITE,\n size: LINE_MARKER_SIZE,\n type: CIRCLE,\n border: { width: 2 },\n opacity: 1\n },\n labels: {\n visible: false,\n margin: getSpacing(3),\n padding: getSpacing(4),\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n },\n position: AUTO\n },\n notes: { label: {} },\n highlight: {\n markers: {\n border: {\n color: WHITE,\n width: 2\n }\n },\n zIndex: datavizConstants.HIGHLIGHT_ZINDEX\n },\n tooltip: { format: '{0} - {1}' }\n };\n var RangeAreaSegment = AreaSegment.extend({\n createStrokeSegments: function () {\n return this.segmentsFromPoints(this.toGeometryPoints(this.toPoints()));\n },\n stackSegments: function () {\n var fromSegments = this.fromSegments;\n if (!this.fromSegments) {\n fromSegments = this.fromSegments = this.segmentsFromPoints(this.toGeometryPoints(this.fromPoints().reverse()));\n }\n return fromSegments;\n },\n createStroke: function (style) {\n var toPath = new Path(style);\n var fromPath = new Path(style);\n toPath.segments.push.apply(toPath.segments, this.strokeSegments());\n fromPath.segments.push.apply(fromPath.segments, this.stackSegments());\n this.visual.append(toPath);\n this.visual.append(fromPath);\n },\n hasStackSegment: function () {\n return true;\n },\n fromPoints: function () {\n return this.linePoints.map(function (point) {\n return point.fromPoint;\n });\n },\n toPoints: function () {\n return this.linePoints.map(function (point) {\n return point.toPoint;\n });\n }\n });\n var SplineRangeAreaSegment = RangeAreaSegment.extend({\n createStrokeSegments: function () {\n return this.createCurveSegments(this.toPoints());\n },\n stackSegments: function () {\n var fromSegments = this.fromSegments;\n if (!this.fromSegments) {\n fromSegments = this.fromSegments = this.createCurveSegments(this.fromPoints().reverse());\n }\n return fromSegments;\n },\n createCurveSegments: function (points) {\n var curveProcessor = new CurveProcessor();\n return curveProcessor.process(this.toGeometryPoints(points));\n }\n });\n var StepRangeAreaSegment = RangeAreaSegment.extend({\n createStrokeSegments: function () {\n return this.segmentsFromPoints(this.calculateStepPoints(this.toPoints()));\n },\n stackSegments: function () {\n var fromSegments = this.fromSegments;\n if (!this.fromSegments) {\n fromSegments = this.fromSegments = this.segmentsFromPoints(this.calculateStepPoints(this.fromPoints()));\n fromSegments.reverse();\n }\n return fromSegments;\n }\n });\n deepExtend(StepRangeAreaSegment.prototype, StepLineMixin);\n var RangeAreaChart = CategoricalChart.extend({\n render: function () {\n CategoricalChart.fn.render.call(this);\n this.renderSegments();\n },\n pointType: function () {\n return RangeAreaPoint;\n },\n createPoint: function (data, fields) {\n var categoryIx = fields.categoryIx;\n var category = fields.category;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var value = data.valueFields;\n if (!hasValue(value.from) && !hasValue(value.to)) {\n if (this.seriesMissingValues(series) === ZERO) {\n value = {\n from: 0,\n to: 0\n };\n } else {\n return null;\n }\n }\n var pointOptions = this.pointOptions(series, seriesIx);\n pointOptions = this.evalPointOptions(pointOptions, value, category, categoryIx, series, seriesIx);\n var color = data.fields.color || series.color;\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n var point = new RangeAreaPoint(value, pointOptions);\n point.color = color;\n this.append(point);\n return point;\n },\n createSegment: function (linePoints, currentSeries, seriesIx) {\n var style = (currentSeries.line || {}).style;\n var segmentType;\n if (style === 'smooth') {\n segmentType = SplineRangeAreaSegment;\n } else if (style === 'step') {\n segmentType = StepRangeAreaSegment;\n } else {\n segmentType = RangeAreaSegment;\n }\n return new segmentType(linePoints, currentSeries, seriesIx);\n },\n plotRange: function (point, startValue) {\n if (!point) {\n return [\n startValue,\n startValue\n ];\n }\n return [\n point.value.from,\n point.value.to\n ];\n },\n valueSlot: function (valueAxis, plotRange) {\n var fromSlot = valueAxis.getSlot(plotRange[0], plotRange[0], !this.options.clip);\n var toSlot = valueAxis.getSlot(plotRange[1], plotRange[1], !this.options.clip);\n if (fromSlot && toSlot) {\n return {\n from: fromSlot,\n to: toSlot\n };\n }\n },\n pointSlot: function (categorySlot, valueSlot) {\n var from = valueSlot.from;\n var to = valueSlot.to;\n var fromSlot, toSlot;\n if (this.options.invertAxes) {\n fromSlot = new Box(from.x1, categorySlot.y1, from.x2, categorySlot.y2);\n toSlot = new Box(to.x1, categorySlot.y1, to.x2, categorySlot.y2);\n } else {\n fromSlot = new Box(categorySlot.x1, from.y1, categorySlot.x2, from.y2);\n toSlot = new Box(categorySlot.x1, to.y1, categorySlot.x2, to.y2);\n }\n return {\n from: fromSlot,\n to: toSlot\n };\n },\n addValue: function (data, fields) {\n var valueFields = data.valueFields;\n if (!isNumber(valueFields.from)) {\n valueFields.from = valueFields.to;\n }\n if (!isNumber(valueFields.to)) {\n valueFields.to = valueFields.from;\n }\n CategoricalChart.fn.addValue.call(this, data, fields);\n },\n updateRange: function (value, fields) {\n if (value !== null && isNumber(value.from) && isNumber(value.to)) {\n var axisName = fields.series.axis;\n var axisRange = this.valueAxisRanges[axisName] = this.valueAxisRanges[axisName] || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n var from = value.from;\n var to = value.to;\n axisRange.min = Math.min(axisRange.min, from, to);\n axisRange.max = Math.max(axisRange.max, from, to);\n }\n },\n formatPointValue: function (point, format) {\n var value = point.value;\n return this.chartService.format.auto(format, value.from, value.to);\n },\n animationPoints: function () {\n var points = this.points;\n var result = [];\n for (var idx = 0; idx < points.length; idx++) {\n var point = points[idx];\n if (point) {\n result.push((point.fromPoint || {}).marker);\n result.push((point.toPoint || {}).marker);\n }\n }\n return result.concat(this._segments);\n }\n });\n deepExtend(RangeAreaChart.prototype, LineChartMixin, ClipAnimationMixin);\n var OHLCPoint = Candlestick.extend({\n reflow: function (box) {\n var ref = this;\n var options = ref.options;\n var value = ref.value;\n var chart = ref.owner;\n var valueAxis = chart.seriesValueAxis(options);\n var oPoints = [];\n var cPoints = [];\n var lhPoints = [];\n var lhSlot = valueAxis.getSlot(value.low, value.high);\n var oSlot = valueAxis.getSlot(value.open, value.open);\n var cSlot = valueAxis.getSlot(value.close, value.close);\n oSlot.x1 = cSlot.x1 = lhSlot.x1 = box.x1;\n oSlot.x2 = cSlot.x2 = lhSlot.x2 = box.x2;\n var mid = lhSlot.center().x;\n oPoints.push([\n oSlot.x1,\n oSlot.y1\n ]);\n oPoints.push([\n mid,\n oSlot.y1\n ]);\n cPoints.push([\n mid,\n cSlot.y1\n ]);\n cPoints.push([\n cSlot.x2,\n cSlot.y1\n ]);\n lhPoints.push([\n mid,\n lhSlot.y1\n ]);\n lhPoints.push([\n mid,\n lhSlot.y2\n ]);\n this.lines = [\n oPoints,\n cPoints,\n lhPoints\n ];\n this.box = lhSlot.clone().wrap(oSlot.clone().wrap(cSlot));\n this.reflowNote();\n },\n createBody: function () {\n }\n });\n var OHLCChart = CandlestickChart.extend({\n pointType: function () {\n return OHLCPoint;\n }\n });\n var WaterfallSegment = ChartElement.extend({\n init: function (from, to, series) {\n ChartElement.fn.init.call(this);\n this.from = from;\n this.to = to;\n this.series = series;\n },\n linePoints: function () {\n var from = this.from;\n var ref = this;\n var fromBox = ref.from.box;\n var toBox = ref.to.box;\n var points = [];\n if (from.isVertical) {\n var y = from.aboveAxis ? fromBox.y1 : fromBox.y2;\n points.push([\n fromBox.x1,\n y\n ], [\n toBox.x2,\n y\n ]);\n } else {\n var x = from.aboveAxis ? fromBox.x2 : fromBox.x1;\n points.push([\n x,\n fromBox.y1\n ], [\n x,\n toBox.y2\n ]);\n }\n return points;\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n var line = this.series.line || {};\n var path = Path.fromPoints(this.linePoints(), {\n stroke: {\n color: line.color,\n width: line.width,\n opacity: line.opacity,\n dashType: line.dashType\n }\n });\n alignPathToPixel(path);\n this.visual.append(path);\n }\n });\n setDefaultOptions(WaterfallSegment, {\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n }\n });\n var WaterfallChart = BarChart.extend({\n render: function () {\n BarChart.fn.render.call(this);\n this.createSegments();\n },\n traverseDataPoints: function (callback) {\n var this$1 = this;\n var series = this.options.series;\n var totalCategories = categoriesCount(series);\n var isVertical = !this.options.invertAxes;\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var total = 0;\n var runningTotal = 0;\n for (var categoryIx = 0; categoryIx < totalCategories; categoryIx++) {\n var data = SeriesBinder.current.bindPoint(currentSeries, categoryIx);\n var value = data.valueFields.value;\n var summary = data.fields.summary;\n var from = total;\n var to = void 0;\n if (summary) {\n if (summary.toLowerCase() === 'total') {\n data.valueFields.value = total;\n from = 0;\n to = total;\n } else {\n data.valueFields.value = runningTotal;\n to = from - runningTotal;\n runningTotal = 0;\n }\n } else if (isNumber(value)) {\n runningTotal += value;\n total += value;\n to = total;\n }\n callback(data, {\n category: this$1.categoryAxis.categoryAt(categoryIx),\n categoryIx: categoryIx,\n series: currentSeries,\n seriesIx: seriesIx,\n total: total,\n runningTotal: runningTotal,\n from: from,\n to: to,\n isVertical: isVertical\n });\n }\n }\n },\n updateRange: function (value, fields) {\n BarChart.fn.updateRange.call(this, { value: fields.to }, fields);\n },\n aboveAxis: function (point) {\n return point.value >= 0;\n },\n plotRange: function (point) {\n return [\n point.from,\n point.to\n ];\n },\n createSegments: function () {\n var this$1 = this;\n var series = this.options.series;\n var seriesPoints = this.seriesPoints;\n var segments = this.segments = [];\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var points = seriesPoints[seriesIx];\n if (points) {\n var prevPoint = void 0;\n for (var pointIx = 0; pointIx < points.length; pointIx++) {\n var point = points[pointIx];\n if (point && prevPoint) {\n var segment = new WaterfallSegment(prevPoint, point, currentSeries);\n segments.push(segment);\n this$1.append(segment);\n }\n prevPoint = point;\n }\n }\n }\n }\n });\n var AREA_SERIES = [\n AREA,\n VERTICAL_AREA,\n RANGE_AREA,\n VERTICAL_RANGE_AREA\n ];\n var OUT_OF_RANGE_SERIES = [\n LINE,\n VERTICAL_LINE\n ].concat(AREA_SERIES);\n var CategoricalPlotArea = PlotAreaBase.extend({\n initFields: function (series) {\n var this$1 = this;\n this.namedCategoryAxes = {};\n this.namedValueAxes = {};\n this.valueAxisRangeTracker = new AxisGroupRangeTracker();\n if (series.length > 0) {\n this.invertAxes = inArray(series[0].type, [\n BAR,\n BULLET,\n VERTICAL_LINE,\n VERTICAL_AREA,\n VERTICAL_RANGE_AREA,\n RANGE_BAR,\n HORIZONTAL_WATERFALL,\n VERTICAL_BOX_PLOT\n ]);\n for (var i = 0; i < series.length; i++) {\n var stack = series[i].stack;\n if (stack && stack.type === '100%') {\n this$1.stack100 = true;\n break;\n }\n }\n }\n },\n render: function (panes) {\n if (panes === void 0) {\n panes = this.panes;\n }\n this.createCategoryAxes(panes);\n this.aggregateCategories(panes);\n this.createCategoryAxesLabels(panes);\n this.createCharts(panes);\n this.createValueAxes(panes);\n },\n removeAxis: function (axis) {\n var axisName = axis.options.name;\n PlotAreaBase.fn.removeAxis.call(this, axis);\n if (axis instanceof CategoryAxis) {\n delete this.namedCategoryAxes[axisName];\n } else {\n this.valueAxisRangeTracker.reset(axisName);\n delete this.namedValueAxes[axisName];\n }\n if (axis === this.categoryAxis) {\n delete this.categoryAxis;\n }\n if (axis === this.valueAxis) {\n delete this.valueAxis;\n }\n },\n createCharts: function (panes) {\n var this$1 = this;\n var seriesByPane = this.groupSeriesByPane();\n for (var i = 0; i < panes.length; i++) {\n var pane = panes[i];\n var paneSeries = seriesByPane[pane.options.name || 'default'] || [];\n this$1.addToLegend(paneSeries);\n var visibleSeries = this$1.filterVisibleSeries(paneSeries);\n if (!visibleSeries) {\n continue;\n }\n var groups = this$1.groupSeriesByCategoryAxis(visibleSeries);\n for (var groupIx = 0; groupIx < groups.length; groupIx++) {\n this$1.createChartGroup(groups[groupIx], pane);\n }\n }\n },\n createChartGroup: function (series, pane) {\n this.createAreaChart(filterSeriesByType(series, [\n AREA,\n VERTICAL_AREA\n ]), pane);\n this.createRangeAreaChart(filterSeriesByType(series, [\n RANGE_AREA,\n VERTICAL_RANGE_AREA\n ]), pane);\n this.createBarChart(filterSeriesByType(series, [\n COLUMN,\n BAR\n ]), pane);\n this.createRangeBarChart(filterSeriesByType(series, [\n RANGE_COLUMN,\n RANGE_BAR\n ]), pane);\n this.createBulletChart(filterSeriesByType(series, [\n BULLET,\n VERTICAL_BULLET\n ]), pane);\n this.createCandlestickChart(filterSeriesByType(series, CANDLESTICK), pane);\n this.createBoxPlotChart(filterSeriesByType(series, [\n BOX_PLOT,\n VERTICAL_BOX_PLOT\n ]), pane);\n this.createOHLCChart(filterSeriesByType(series, OHLC), pane);\n this.createWaterfallChart(filterSeriesByType(series, [\n WATERFALL,\n HORIZONTAL_WATERFALL\n ]), pane);\n this.createLineChart(filterSeriesByType(series, [\n LINE,\n VERTICAL_LINE\n ]), pane);\n },\n aggregateCategories: function (panes) {\n var this$1 = this;\n var series = this.srcSeries || this.series;\n var processedSeries = [];\n this._currentPointsCache = {};\n this._seriesPointsCache = this._seriesPointsCache || {};\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n var categoryAxis = this$1.seriesCategoryAxis(currentSeries);\n var axisPane = this$1.findPane(categoryAxis.options.pane);\n var dateAxis = equalsIgnoreCase(categoryAxis.options.type, DATE);\n if ((dateAxis || currentSeries.categoryField) && inArray(axisPane, panes)) {\n currentSeries = this$1.aggregateSeries(currentSeries, categoryAxis);\n } else {\n currentSeries = this$1.filterSeries(currentSeries, categoryAxis);\n }\n processedSeries.push(currentSeries);\n }\n this._seriesPointsCache = this._currentPointsCache;\n this._currentPointsCache = null;\n this.srcSeries = series;\n this.series = processedSeries;\n },\n filterSeries: function (series, categoryAxis) {\n var dataLength = (series.data || {}).length;\n categoryAxis._seriesMax = Math.max(categoryAxis._seriesMax || 0, dataLength);\n if (!(isNumber(categoryAxis.options.min) || isNumber(categoryAxis.options.max))) {\n return series;\n }\n var range = categoryAxis.currentRangeIndices();\n var outOfRangePoints = inArray(series.type, OUT_OF_RANGE_SERIES);\n var currentSeries = deepExtend({}, series);\n currentSeries.data = (currentSeries.data || []).slice(range.min, range.max + 1);\n if (outOfRangePoints) {\n createOutOfRangePoints(currentSeries, range, dataLength, function (idx) {\n return {\n item: series.data[idx],\n category: categoryAxis.categoryAt(idx, true),\n categoryIx: idx - range.min\n };\n }, function (idx) {\n return defined(series.data[idx]);\n });\n }\n return currentSeries;\n },\n clearSeriesPointsCache: function () {\n this._seriesPointsCache = {};\n },\n seriesSourcePoints: function (series, categoryAxis) {\n var this$1 = this;\n var key = series.index + ';' + categoryAxis.categoriesHash();\n if (this._seriesPointsCache[key]) {\n this._currentPointsCache[key] = this._seriesPointsCache[key];\n return this._seriesPointsCache[key];\n }\n var axisOptions = categoryAxis.options;\n var srcCategories = axisOptions.srcCategories;\n var dateAxis = equalsIgnoreCase(axisOptions.type, DATE);\n var srcData = series.data;\n var getFn = dateAxis ? getDateField : getField;\n var result = [];\n if (!dateAxis) {\n categoryAxis.mapCategories();\n }\n for (var idx = 0; idx < srcData.length; idx++) {\n var category = void 0;\n if (series.categoryField) {\n category = getFn(series.categoryField, srcData[idx], this$1.chartService.intl);\n } else {\n category = srcCategories[idx];\n }\n if (defined(category) && category !== null) {\n var categoryIx = categoryAxis.totalIndex(category);\n result[categoryIx] = result[categoryIx] || {\n items: [],\n category: category\n };\n result[categoryIx].items.push(idx);\n }\n }\n this._currentPointsCache[key] = result;\n return result;\n },\n aggregateSeries: function (series, categoryAxis) {\n var srcData = series.data;\n if (!srcData.length) {\n return series;\n }\n var srcPoints = this.seriesSourcePoints(series, categoryAxis);\n var result = deepExtend({}, series);\n var aggregator = new SeriesAggregator(deepExtend({}, series), SeriesBinder.current, DefaultAggregates.current);\n var data = result.data = [];\n var dataItems = categoryAxis.options.dataItems || [];\n var range = categoryAxis.currentRangeIndices();\n var categoryItem = function (idx) {\n var categoryIdx = idx - range.min;\n var point = srcPoints[idx];\n if (!point) {\n point = srcPoints[idx] = {};\n }\n point.categoryIx = categoryIdx;\n if (!point.item) {\n var category = categoryAxis.categoryAt(idx, true);\n point.category = category;\n point.item = aggregator.aggregatePoints(point.items, category);\n }\n return point;\n };\n for (var idx = range.min; idx <= range.max; idx++) {\n var point = categoryItem(idx);\n data[point.categoryIx] = point.item;\n if (point.items && point.items.length) {\n dataItems[point.categoryIx] = point.item;\n }\n }\n if (inArray(result.type, OUT_OF_RANGE_SERIES)) {\n createOutOfRangePoints(result, range, categoryAxis.totalCount(), categoryItem, function (idx) {\n return srcPoints[idx];\n });\n }\n categoryAxis.options.dataItems = dataItems;\n return result;\n },\n appendChart: function (chart, pane) {\n var series = chart.options.series;\n var categoryAxis = this.seriesCategoryAxis(series[0]);\n var categories = categoryAxis.options.categories;\n var categoriesToAdd = Math.max(0, categoriesCount(series) - categories.length);\n if (categoriesToAdd > 0) {\n categories = categoryAxis.options.categories = categoryAxis.options.categories.slice(0);\n while (categoriesToAdd--) {\n categories.push('');\n }\n }\n this.valueAxisRangeTracker.update(chart.valueAxisRanges);\n PlotAreaBase.fn.appendChart.call(this, chart, pane);\n },\n seriesPaneName: function (series) {\n var options = this.options;\n var axisName = series.axis;\n var axisOptions = [].concat(options.valueAxis);\n var axis = grep(axisOptions, function (a) {\n return a.name === axisName;\n })[0];\n var panes = options.panes || [{}];\n var defaultPaneName = (panes[0] || {}).name || 'default';\n var paneName = (axis || {}).pane || defaultPaneName;\n return paneName;\n },\n seriesCategoryAxis: function (series) {\n var axisName = series.categoryAxis;\n var axis = axisName ? this.namedCategoryAxes[axisName] : this.categoryAxis;\n if (!axis) {\n throw new Error('Unable to locate category axis with name ' + axisName);\n }\n return axis;\n },\n stackableChartOptions: function (firstSeries, pane) {\n var stack = firstSeries.stack;\n var isStacked100 = stack && stack.type === '100%';\n var clip = pane.options.clip;\n return {\n isStacked: stack,\n isStacked100: isStacked100,\n clip: clip\n };\n },\n groupSeriesByCategoryAxis: function (series) {\n var categoryAxes = [];\n var unique = {};\n for (var idx = 0; idx < series.length; idx++) {\n var name = series[idx].categoryAxis || '$$default$$';\n if (!unique.hasOwnProperty(name)) {\n unique[name] = true;\n categoryAxes.push(name);\n }\n }\n var groups = [];\n for (var axisIx = 0; axisIx < categoryAxes.length; axisIx++) {\n var axis = categoryAxes[axisIx];\n var axisSeries = groupSeries(series, axis, axisIx);\n if (axisSeries.length === 0) {\n continue;\n }\n groups.push(axisSeries);\n }\n return groups;\n },\n createBarChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var barChart = new BarChart(this, $.extend({\n series: series,\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n spacing: firstSeries.spacing\n }, this.stackableChartOptions(firstSeries, pane)));\n this.appendChart(barChart, pane);\n },\n createRangeBarChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var rangeColumnChart = new RangeBarChart(this, {\n series: series,\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n spacing: firstSeries.spacing\n });\n this.appendChart(rangeColumnChart, pane);\n },\n createBulletChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var bulletChart = new BulletChart(this, {\n series: series,\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n spacing: firstSeries.spacing,\n clip: pane.options.clip\n });\n this.appendChart(bulletChart, pane);\n },\n createLineChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var lineChart = new LineChart(this, $.extend({\n invertAxes: this.invertAxes,\n series: series\n }, this.stackableChartOptions(firstSeries, pane)));\n this.appendChart(lineChart, pane);\n },\n createAreaChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var areaChart = new AreaChart(this, $.extend({\n invertAxes: this.invertAxes,\n series: series\n }, this.stackableChartOptions(firstSeries, pane)));\n this.appendChart(areaChart, pane);\n },\n createRangeAreaChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var rangeAreaChart = new RangeAreaChart(this, {\n invertAxes: this.invertAxes,\n series: series,\n clip: pane.options.clip\n });\n this.appendChart(rangeAreaChart, pane);\n },\n createOHLCChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var chart = new OHLCChart(this, {\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n series: series,\n spacing: firstSeries.spacing,\n clip: pane.options.clip\n });\n this.appendChart(chart, pane);\n },\n createCandlestickChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var chart = new CandlestickChart(this, {\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n series: series,\n spacing: firstSeries.spacing,\n clip: pane.options.clip\n });\n this.appendChart(chart, pane);\n },\n createBoxPlotChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var chart = new BoxPlotChart(this, {\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n series: series,\n spacing: firstSeries.spacing,\n clip: pane.options.clip\n });\n this.appendChart(chart, pane);\n },\n createWaterfallChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var waterfallChart = new WaterfallChart(this, {\n series: series,\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n spacing: firstSeries.spacing\n });\n this.appendChart(waterfallChart, pane);\n },\n axisRequiresRounding: function (categoryAxisName, categoryAxisIndex) {\n var this$1 = this;\n var centeredSeries = filterSeriesByType(this.series, EQUALLY_SPACED_SERIES);\n for (var seriesIx = 0; seriesIx < this.series.length; seriesIx++) {\n var currentSeries = this$1.series[seriesIx];\n if (inArray(currentSeries.type, AREA_SERIES)) {\n var line = currentSeries.line;\n if (line && line.style === STEP) {\n centeredSeries.push(currentSeries);\n }\n }\n }\n for (var seriesIx$1 = 0; seriesIx$1 < centeredSeries.length; seriesIx$1++) {\n var seriesAxis = centeredSeries[seriesIx$1].categoryAxis || '';\n if (seriesAxis === categoryAxisName || !seriesAxis && categoryAxisIndex === 0) {\n return true;\n }\n }\n },\n aggregatedAxis: function (categoryAxisName, categoryAxisIndex) {\n var series = this.series;\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var seriesAxis = series[seriesIx].categoryAxis || '';\n if ((seriesAxis === categoryAxisName || !seriesAxis && categoryAxisIndex === 0) && series[seriesIx].categoryField) {\n return true;\n }\n }\n },\n createCategoryAxesLabels: function () {\n var axes = this.axes;\n for (var i = 0; i < axes.length; i++) {\n if (axes[i] instanceof CategoryAxis) {\n axes[i].createLabels();\n }\n }\n },\n createCategoryAxes: function (panes) {\n var this$1 = this;\n var invertAxes = this.invertAxes;\n var definitions = [].concat(this.options.categoryAxis);\n var axes = [];\n for (var i = 0; i < definitions.length; i++) {\n var axisOptions = definitions[i];\n var axisPane = this$1.findPane(axisOptions.pane);\n if (inArray(axisPane, panes)) {\n var name = axisOptions.name;\n var categories = axisOptions.categories;\n if (categories === void 0) {\n categories = [];\n }\n axisOptions = deepExtend({\n vertical: invertAxes,\n reverse: !invertAxes && this$1.chartService.rtl,\n axisCrossingValue: invertAxes ? MAX_VALUE : 0\n }, axisOptions);\n if (!defined(axisOptions.justified)) {\n axisOptions.justified = this$1.isJustified();\n }\n if (this$1.axisRequiresRounding(name, i)) {\n axisOptions.justified = false;\n }\n var categoryAxis = void 0;\n if (isDateAxis(axisOptions, categories[0])) {\n categoryAxis = new dataviz.DateCategoryAxis(axisOptions, this$1.chartService);\n } else {\n categoryAxis = new CategoryAxis(axisOptions, this$1.chartService);\n }\n definitions[i].categories = categoryAxis.options.srcCategories;\n if (name) {\n if (this$1.namedCategoryAxes[name]) {\n throw new Error('Category axis with name ' + name + ' is already defined');\n }\n this$1.namedCategoryAxes[name] = categoryAxis;\n }\n categoryAxis.axisIndex = i;\n axes.push(categoryAxis);\n this$1.appendAxis(categoryAxis);\n }\n }\n var primaryAxis = this.categoryAxis || axes[0];\n this.categoryAxis = primaryAxis;\n if (invertAxes) {\n this.axisY = primaryAxis;\n } else {\n this.axisX = primaryAxis;\n }\n },\n isJustified: function () {\n var series = this.series;\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n if (!inArray(currentSeries.type, AREA_SERIES)) {\n return false;\n }\n }\n return true;\n },\n createValueAxes: function (panes) {\n var this$1 = this;\n var tracker = this.valueAxisRangeTracker;\n var defaultRange = tracker.query();\n var definitions = [].concat(this.options.valueAxis);\n var invertAxes = this.invertAxes;\n var baseOptions = {\n vertical: !invertAxes,\n reverse: invertAxes && this.chartService.rtl\n };\n var axes = [];\n if (this.stack100) {\n baseOptions.roundToMajorUnit = false;\n baseOptions.labels = { format: 'P0' };\n }\n for (var i = 0; i < definitions.length; i++) {\n var axisOptions = definitions[i];\n var axisPane = this$1.findPane(axisOptions.pane);\n if (inArray(axisPane, panes)) {\n var name = axisOptions.name;\n var defaultAxisRange = equalsIgnoreCase(axisOptions.type, LOGARITHMIC) ? {\n min: 0.1,\n max: 1\n } : {\n min: 0,\n max: 1\n };\n var range = tracker.query(name) || defaultRange || defaultAxisRange;\n if (i === 0 && range && defaultRange) {\n range.min = Math.min(range.min, defaultRange.min);\n range.max = Math.max(range.max, defaultRange.max);\n }\n var axisType = void 0;\n if (equalsIgnoreCase(axisOptions.type, LOGARITHMIC)) {\n axisType = dataviz.LogarithmicAxis;\n } else {\n axisType = dataviz.NumericAxis;\n }\n var valueAxis = new axisType(range.min, range.max, deepExtend({}, baseOptions, axisOptions), this$1.chartService);\n if (name) {\n if (this$1.namedValueAxes[name]) {\n throw new Error('Value axis with name ' + name + ' is already defined');\n }\n this$1.namedValueAxes[name] = valueAxis;\n }\n valueAxis.axisIndex = i;\n axes.push(valueAxis);\n this$1.appendAxis(valueAxis);\n }\n }\n var primaryAxis = this.valueAxis || axes[0];\n this.valueAxis = primaryAxis;\n if (invertAxes) {\n this.axisX = primaryAxis;\n } else {\n this.axisY = primaryAxis;\n }\n },\n _dispatchEvent: function (chart, e, eventType) {\n var coords = chart._eventCoordinates(e);\n var point = new Point(coords.x, coords.y);\n var pane = this.pointPane(point);\n var categories = [];\n var values = [];\n if (!pane) {\n return;\n }\n var allAxes = pane.axes;\n for (var i = 0; i < allAxes.length; i++) {\n var axis = allAxes[i];\n if (axis.getValue) {\n appendIfNotNull(values, axis.getValue(point));\n } else {\n appendIfNotNull(categories, axis.getCategory(point));\n }\n }\n if (categories.length === 0) {\n appendIfNotNull(categories, this.categoryAxis.getCategory(point));\n }\n if (categories.length > 0 && values.length > 0) {\n chart.trigger(eventType, {\n element: eventElement(e),\n originalEvent: e,\n category: singleItemOrArray(categories),\n value: singleItemOrArray(values)\n });\n }\n },\n pointPane: function (point) {\n var panes = this.panes;\n for (var i = 0; i < panes.length; i++) {\n var currentPane = panes[i];\n if (currentPane.contentBox.containsPoint(point)) {\n return currentPane;\n }\n }\n },\n updateAxisOptions: function (axis, options) {\n updateAxisOptions(this.options, axis, options);\n updateAxisOptions(this.originalOptions, axis, options);\n }\n });\n function updateAxisOptions(targetOptions, axis, options) {\n var axesOptions = axis instanceof CategoryAxis ? [].concat(targetOptions.categoryAxis) : [].concat(targetOptions.valueAxis);\n deepExtend(axesOptions[axis.axisIndex], options);\n }\n function groupSeries(series, axis, axisIx) {\n return grep(series, function (s) {\n return axisIx === 0 && !s.categoryAxis || s.categoryAxis === axis;\n });\n }\n setDefaultOptions(CategoricalPlotArea, {\n categoryAxis: {},\n valueAxis: {}\n });\n deepExtend(CategoricalPlotArea.prototype, PlotAreaEventsMixin);\n var Highlight = Class.extend({\n init: function () {\n this._points = [];\n },\n destroy: function () {\n this._points = [];\n },\n show: function (points) {\n var this$1 = this;\n var arrayPoints = [].concat(points);\n this.hide();\n for (var i = 0; i < arrayPoints.length; i++) {\n var point = arrayPoints[i];\n if (point && point.toggleHighlight && point.hasHighlight()) {\n this$1.togglePointHighlight(point, true);\n this$1._points.push(point);\n }\n }\n },\n togglePointHighlight: function (point, show) {\n var toggleHandler = (point.options.highlight || {}).toggle;\n if (toggleHandler) {\n var eventArgs = {\n category: point.category,\n series: point.series,\n dataItem: point.dataItem,\n value: point.value,\n stackValue: point.stackValue,\n preventDefault: preventDefault,\n visual: point.highlightVisual(),\n show: show\n };\n toggleHandler(eventArgs);\n if (!eventArgs._defaultPrevented) {\n point.toggleHighlight(show);\n }\n } else {\n point.toggleHighlight(show);\n }\n },\n hide: function () {\n var this$1 = this;\n var points = this._points;\n while (points.length) {\n this$1.togglePointHighlight(points.pop(), false);\n }\n },\n isHighlighted: function (element) {\n var points = this._points;\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n if (element === point) {\n return true;\n }\n }\n return false;\n }\n });\n function preventDefault() {\n this._defaultPrevented = true;\n }\n function acceptKey(e, mouseKey) {\n var key = (mouseKey || '').toLowerCase();\n var event = e.event;\n var accept = key === 'none' && !(event.ctrlKey || event.shiftKey || event.altKey) || event[key + 'Key'];\n return accept;\n }\n function toChartAxisRanges(axisRanges) {\n var ranges = {};\n for (var idx = 0; idx < axisRanges.length; idx++) {\n var axisRange = axisRanges[idx];\n if (axisRange.axis.options.name) {\n ranges[axisRange.axis.options.name] = {\n min: axisRange.range.min,\n max: axisRange.range.max\n };\n }\n }\n return ranges;\n }\n var Pannable = Class.extend({\n init: function (plotArea, options) {\n this.plotArea = plotArea;\n this.options = deepExtend({}, this.options, options);\n },\n start: function (e) {\n this._active = acceptKey(e, this.options.key);\n return this._active;\n },\n move: function (e) {\n if (this._active) {\n var axisRanges = this.axisRanges = this._panAxes(e, X).concat(this._panAxes(e, Y));\n if (axisRanges.length) {\n this.axisRanges = axisRanges;\n return toChartAxisRanges(axisRanges);\n }\n }\n },\n end: function () {\n var active = this._active;\n this._active = false;\n return active;\n },\n pan: function () {\n var ref = this;\n var plotArea = ref.plotArea;\n var axisRanges = ref.axisRanges;\n if (axisRanges.length) {\n for (var idx = 0; idx < axisRanges.length; idx++) {\n var range = axisRanges[idx];\n plotArea.updateAxisOptions(range.axis, range.range);\n }\n plotArea.redraw(plotArea.panes);\n }\n },\n destroy: function () {\n delete this.plotArea;\n },\n _panAxes: function (e, position) {\n var plotArea = this.plotArea;\n var delta = -e[position].delta;\n var lock = (this.options.lock || '').toLowerCase();\n var updatedAxes = [];\n if (delta !== 0 && (lock || '').toLowerCase() !== position) {\n var axes = plotArea.axes;\n for (var idx = 0; idx < axes.length; idx++) {\n var axis = axes[idx];\n if (position === X && !axis.options.vertical || position === Y && axis.options.vertical) {\n var range = axis.pan(delta);\n if (range) {\n range.limitRange = true;\n updatedAxes.push({\n axis: axis,\n range: range\n });\n }\n }\n }\n }\n return updatedAxes;\n }\n });\n Pannable.prototype.options = {\n key: 'none',\n lock: 'none'\n };\n var ZoomSelection = Class.extend({\n init: function (chart, options) {\n this.chart = chart;\n this.options = deepExtend({}, this.options, options);\n this.createElement();\n },\n createElement: function () {\n var marquee = this._marquee = document.createElement('div');\n marquee.className = 'k-marquee';\n var marqueeColor = document.createElement('div');\n marqueeColor.className = 'k-marquee-color';\n marquee.appendChild(marqueeColor);\n },\n removeElement: function () {\n if (this._marquee.parentNode) {\n this._marquee.parentNode.removeChild(this._marquee);\n }\n },\n setStyles: function (styles) {\n elementStyles(this._marquee, styles);\n },\n start: function (e) {\n if (acceptKey(e, this.options.key)) {\n var chart = this.chart;\n var point = chart._eventCoordinates(e);\n var zoomPane = this._zoomPane = chart._plotArea.paneByPoint(point);\n var clipBox = zoomPane ? zoomPane.chartsBox().clone() : null;\n if (zoomPane && clipBox) {\n var offset = this._elementOffset();\n clipBox.translate(offset.left, offset.top);\n this._zoomPaneClipBox = clipBox;\n document.body.appendChild(this._marquee);\n this.setStyles({\n left: e.pageX + 1,\n top: e.pageY + 1,\n width: 0,\n height: 0\n });\n return true;\n }\n }\n return false;\n },\n _elementOffset: function () {\n var chartElement = this.chart.element;\n var ref = elementStyles(chartElement, [\n 'paddingLeft',\n 'paddingTop'\n ]);\n var paddingLeft = ref.paddingLeft;\n var paddingTop = ref.paddingTop;\n var offset = dataviz.elementOffset(chartElement);\n return {\n left: paddingLeft + offset.left,\n top: paddingTop + offset.top\n };\n },\n move: function (e) {\n var zoomPane = this._zoomPane;\n if (zoomPane) {\n this.setStyles(this._selectionPosition(e));\n }\n },\n end: function (e) {\n var zoomPane = this._zoomPane;\n if (zoomPane) {\n var elementOffset$$1 = this._elementOffset();\n var selectionPosition = this._selectionPosition(e);\n selectionPosition.left -= elementOffset$$1.left;\n selectionPosition.top -= elementOffset$$1.top;\n var start = {\n x: selectionPosition.left,\n y: selectionPosition.top\n };\n var end = {\n x: selectionPosition.left + selectionPosition.width,\n y: selectionPosition.top + selectionPosition.height\n };\n this._updateAxisRanges(start, end);\n this.removeElement();\n delete this._zoomPane;\n return toChartAxisRanges(this.axisRanges);\n }\n },\n zoom: function () {\n var axisRanges = this.axisRanges;\n if (axisRanges && axisRanges.length) {\n var plotArea = this.chart._plotArea;\n for (var idx = 0; idx < axisRanges.length; idx++) {\n var axisRange = axisRanges[idx];\n plotArea.updateAxisOptions(axisRange.axis, axisRange.range);\n }\n plotArea.redraw(plotArea.panes);\n }\n },\n destroy: function () {\n this.removeElement();\n delete this._marquee;\n delete this.chart;\n },\n _updateAxisRanges: function (start, end) {\n var lock = (this.options.lock || '').toLowerCase();\n var axisRanges = [];\n var axes = this._zoomPane.axes;\n for (var idx = 0; idx < axes.length; idx++) {\n var axis = axes[idx];\n var vertical = axis.options.vertical;\n if (!(lock === X && !vertical) && !(lock === Y && vertical)) {\n var range = axis.pointsRange(start, end);\n if (range) {\n axisRanges.push({\n axis: axis,\n range: range\n });\n }\n }\n }\n this.axisRanges = axisRanges;\n },\n _selectionPosition: function (e) {\n var clipBox = this._zoomPaneClipBox;\n var startLocation = {\n x: e.x.startLocation,\n y: e.y.startLocation\n };\n var pageX = e.x.location;\n var pageY = e.y.location;\n var lock = (this.options.lock || '').toLowerCase();\n var left = Math.min(startLocation.x, pageX);\n var top = Math.min(startLocation.y, pageY);\n var width = Math.abs(startLocation.x - pageX);\n var height = Math.abs(startLocation.y - pageY);\n if (lock === X) {\n left = clipBox.x1;\n width = clipBox.width();\n }\n if (lock === Y) {\n top = clipBox.y1;\n height = clipBox.height();\n }\n if (pageX > clipBox.x2) {\n width = clipBox.x2 - startLocation.x;\n }\n if (pageX < clipBox.x1) {\n width = startLocation.x - clipBox.x1;\n }\n if (pageY > clipBox.y2) {\n height = clipBox.y2 - startLocation.y;\n }\n if (pageY < clipBox.y1) {\n height = startLocation.y - clipBox.y1;\n }\n return {\n left: Math.max(left, clipBox.x1),\n top: Math.max(top, clipBox.y1),\n width: width,\n height: height\n };\n }\n });\n ZoomSelection.prototype.options = {\n key: 'shift',\n lock: 'none'\n };\n var MousewheelZoom = Class.extend({\n init: function (chart, options) {\n this.chart = chart;\n this.options = deepExtend({}, this.options, options);\n },\n updateRanges: function (delta) {\n var lock = (this.options.lock || '').toLowerCase();\n var axisRanges = [];\n var axes = this.chart._plotArea.axes;\n for (var idx = 0; idx < axes.length; idx++) {\n var axis = axes[idx];\n var vertical = axis.options.vertical;\n if (!(lock === X && !vertical) && !(lock === Y && vertical)) {\n var range = axis.zoomRange(-delta);\n if (range) {\n axisRanges.push({\n axis: axis,\n range: range\n });\n }\n }\n }\n this.axisRanges = axisRanges;\n return toChartAxisRanges(axisRanges);\n },\n zoom: function () {\n var axisRanges = this.axisRanges;\n if (axisRanges && axisRanges.length) {\n var plotArea = this.chart._plotArea;\n for (var idx = 0; idx < axisRanges.length; idx++) {\n var axisRange = axisRanges[idx];\n plotArea.updateAxisOptions(axisRange.axis, axisRange.range);\n }\n plotArea.redraw(plotArea.panes);\n }\n },\n destroy: function () {\n delete this.chart;\n }\n });\n var LegendLayout = ChartElement.extend({\n init: function (options, chartService) {\n ChartElement.fn.init.call(this, options);\n this.chartService = chartService;\n },\n render: function () {\n var ref = this;\n var children = ref.children;\n var options = ref.options;\n var vertical = options.vertical;\n this.visual = new drawing.Layout(null, {\n spacing: vertical ? 0 : options.spacing,\n lineSpacing: vertical ? options.spacing : 0,\n orientation: vertical ? 'vertical' : 'horizontal',\n reverse: options.rtl,\n alignItems: vertical ? 'start' : 'center'\n });\n for (var idx = 0; idx < children.length; idx++) {\n var legendItem = children[idx];\n legendItem.reflow(new Box());\n legendItem.renderVisual();\n }\n },\n reflow: function (box) {\n this.visual.rect(box.toRect());\n this.visual.reflow();\n var bbox = this.visual.clippedBBox();\n if (bbox) {\n this.box = dataviz.rectToBox(bbox);\n } else {\n this.box = new Box();\n }\n },\n renderVisual: function () {\n this.addVisual();\n },\n createVisual: function () {\n }\n });\n var LegendItem = BoxElement.extend({\n init: function (options) {\n BoxElement.fn.init.call(this, options);\n this.createContainer();\n if (!options.rtl) {\n this.createMarker();\n this.createLabel();\n } else {\n this.createLabel();\n this.createMarker();\n }\n },\n createContainer: function () {\n this.container = new dataviz.FloatElement({\n vertical: false,\n wrap: false,\n align: CENTER,\n spacing: this.options.spacing\n });\n this.append(this.container);\n },\n createMarker: function () {\n this.container.append(new ShapeElement(this.markerOptions()));\n },\n markerOptions: function () {\n var options = this.options;\n var markerColor = options.markerColor;\n return deepExtend({}, options.markers, {\n background: markerColor,\n border: { color: markerColor }\n });\n },\n createLabel: function () {\n var options = this.options;\n var labelOptions = deepExtend({}, options.labels);\n this.container.append(new TextBox(options.text, labelOptions));\n },\n renderComplete: function () {\n BoxElement.fn.renderComplete.call(this);\n var cursor = this.options.cursor || {};\n var eventSink = this._itemOverlay = Path.fromRect(this.container.box.toRect(), {\n fill: {\n color: WHITE,\n opacity: 0\n },\n stroke: null,\n cursor: cursor.style || cursor\n });\n this.appendVisual(eventSink);\n },\n click: function (widget, e) {\n var args = this.eventArgs(e);\n if (!widget.trigger(LEGEND_ITEM_CLICK, args) && e && e.type === 'contextmenu') {\n e.preventDefault();\n }\n },\n over: function (widget, e) {\n var args = this.eventArgs(e);\n if (!widget.trigger(LEGEND_ITEM_HOVER, args)) {\n widget._legendItemHover(args.seriesIndex, args.pointIndex);\n }\n return true;\n },\n out: function (widget, e) {\n widget._unsetActivePoint();\n widget.trigger(LEGEND_ITEM_LEAVE, this.eventArgs(e));\n },\n eventArgs: function (e) {\n var options = this.options;\n return {\n element: eventElement(e),\n text: options.text,\n series: options.series,\n seriesIndex: options.series.index,\n pointIndex: options.pointIndex\n };\n },\n renderVisual: function () {\n var this$1 = this;\n var options = this.options;\n var customVisual = options.visual;\n if (customVisual) {\n this.visual = customVisual({\n active: options.active,\n series: options.series,\n sender: this.getSender(),\n pointIndex: options.pointIndex,\n options: {\n markers: this.markerOptions(),\n labels: options.labels\n },\n createVisual: function () {\n this$1.createVisual();\n this$1.renderChildren();\n this$1.renderComplete();\n var defaultVisual = this$1.visual;\n delete this$1.visual;\n return defaultVisual;\n }\n });\n this.addVisual();\n } else {\n BoxElement.fn.renderVisual.call(this);\n }\n }\n });\n var HORIZONTAL = 'horizontal';\n var POINTER = 'pointer';\n var CUSTOM = 'custom';\n var Legend = ChartElement.extend({\n init: function (options, chartService) {\n if (chartService === void 0) {\n chartService = {};\n }\n ChartElement.fn.init.call(this, options);\n this.chartService = chartService;\n if (!inArray(this.options.position, [\n TOP,\n RIGHT,\n BOTTOM,\n LEFT,\n CUSTOM\n ])) {\n this.options.position = RIGHT;\n }\n this.createContainer();\n this.createItems();\n },\n createContainer: function () {\n var options = this.options;\n var position = options.position;\n var userAlign = options.align;\n var align = position;\n var vAlign = CENTER;\n if (position === CUSTOM) {\n align = LEFT;\n } else if (inArray(position, [\n TOP,\n BOTTOM\n ])) {\n if (userAlign === 'start') {\n align = LEFT;\n } else if (userAlign === 'end') {\n align = RIGHT;\n } else {\n align = CENTER;\n }\n vAlign = position;\n } else if (userAlign) {\n if (userAlign === 'start') {\n vAlign = TOP;\n } else if (userAlign === 'end') {\n vAlign = BOTTOM;\n }\n }\n this.container = new BoxElement({\n margin: options.margin,\n padding: options.padding,\n background: options.background,\n border: options.border,\n vAlign: vAlign,\n align: align,\n zIndex: options.zIndex,\n shrinkToFit: true\n });\n this.append(this.container);\n },\n createItems: function () {\n var chartService = this.getService();\n var options = this.options;\n var vertical = this.isVertical();\n var innerElement = new LegendLayout({\n vertical: vertical,\n spacing: options.spacing,\n rtl: chartService.rtl\n }, chartService);\n var items = options.items;\n if (options.reverse) {\n items = items.slice(0).reverse();\n }\n var count = items.length;\n for (var i = 0; i < count; i++) {\n var item = items[i];\n innerElement.append(new LegendItem(deepExtend({}, {\n markers: options.markers,\n labels: options.labels,\n rtl: chartService.rtl\n }, options.item, item)));\n }\n innerElement.render();\n this.container.append(innerElement);\n },\n isVertical: function () {\n var ref = this.options;\n var orientation = ref.orientation;\n var position = ref.position;\n var vertical = position === CUSTOM && orientation !== HORIZONTAL || (defined(orientation) ? orientation !== HORIZONTAL : inArray(position, [\n LEFT,\n RIGHT\n ]));\n return vertical;\n },\n hasItems: function () {\n return this.container.children[0].children.length > 0;\n },\n reflow: function (targetBox) {\n var options = this.options;\n var legendBox = targetBox.clone();\n if (!this.hasItems()) {\n this.box = legendBox;\n return;\n }\n if (options.position === CUSTOM) {\n this.containerCustomReflow(legendBox);\n this.box = legendBox;\n } else {\n this.containerReflow(legendBox);\n }\n },\n containerReflow: function (targetBox) {\n var ref = this;\n var options = ref.options;\n var container = ref.container;\n var position = options.position;\n var width = options.width;\n var height = options.height;\n var pos = position === TOP || position === BOTTOM ? X : Y;\n var vertical = this.isVertical();\n var alignTarget = targetBox.clone();\n var containerBox = targetBox.clone();\n if (position === LEFT || position === RIGHT) {\n containerBox.y1 = alignTarget.y1 = 0;\n }\n if (vertical && height) {\n containerBox.y2 = containerBox.y1 + height;\n containerBox.align(alignTarget, Y, container.options.vAlign);\n } else if (!vertical && width) {\n containerBox.x2 = containerBox.x1 + width;\n containerBox.align(alignTarget, X, container.options.align);\n }\n container.reflow(containerBox);\n containerBox = container.box;\n var box = containerBox.clone();\n if (options.offsetX || options.offsetY) {\n containerBox.translate(options.offsetX, options.offsetY);\n this.container.reflow(containerBox);\n }\n box[pos + 1] = targetBox[pos + 1];\n box[pos + 2] = targetBox[pos + 2];\n this.box = box;\n },\n containerCustomReflow: function (targetBox) {\n var ref = this;\n var options = ref.options;\n var container = ref.container;\n var offsetX = options.offsetX;\n var offsetY = options.offsetY;\n var width = options.width;\n var height = options.height;\n var vertical = this.isVertical();\n var containerBox = targetBox.clone();\n if (vertical && height) {\n containerBox.y2 = containerBox.y1 + height;\n } else if (!vertical && width) {\n containerBox.x2 = containerBox.x1 + width;\n }\n container.reflow(containerBox);\n containerBox = container.box;\n container.reflow(new Box(offsetX, offsetY, offsetX + containerBox.width(), offsetY + containerBox.height()));\n },\n renderVisual: function () {\n if (this.hasItems()) {\n ChartElement.fn.renderVisual.call(this);\n }\n }\n });\n setDefaultOptions(Legend, {\n position: RIGHT,\n items: [],\n offsetX: 0,\n offsetY: 0,\n margin: getSpacing(5),\n padding: getSpacing(5),\n border: {\n color: BLACK,\n width: 0\n },\n item: {\n cursor: POINTER,\n spacing: 6\n },\n spacing: 6,\n background: '',\n zIndex: 1,\n markers: {\n border: { width: 0 },\n width: 15,\n height: 3,\n type: 'rect',\n align: LEFT,\n vAlign: CENTER\n }\n });\n var PlotAreaFactory = Class.extend({\n init: function () {\n this._registry = [];\n },\n register: function (type, seriesTypes) {\n this._registry.push({\n type: type,\n seriesTypes: seriesTypes\n });\n },\n create: function (srcSeries, options, chartService) {\n var registry = this._registry;\n var match = registry[0];\n var series;\n for (var idx = 0; idx < registry.length; idx++) {\n var entry = registry[idx];\n series = filterSeriesByType(srcSeries, entry.seriesTypes);\n if (series.length > 0) {\n match = entry;\n break;\n }\n }\n return new match.type(series, options, chartService);\n }\n });\n PlotAreaFactory.current = new PlotAreaFactory();\n var ZOOM_ACCELERATION = 3;\n var SELECTOR_HEIGHT_ADJUST = 0.1;\n function createDiv(className) {\n var element = document.createElement('div');\n if (className) {\n element.className = className;\n }\n return element;\n }\n function closestHandle(element) {\n var current = element;\n while (current && !hasClasses(current, 'k-handle')) {\n current = current.parentNode;\n }\n return current;\n }\n var Selection = Class.extend({\n init: function (chart, categoryAxis, options, observer) {\n var chartElement = chart.element;\n this.options = deepExtend({}, this.options, options);\n this.chart = chart;\n this.observer = observer;\n this.chartElement = chartElement;\n this.categoryAxis = categoryAxis;\n this._dateAxis = this.categoryAxis instanceof dataviz.DateCategoryAxis;\n this.initOptions();\n if (this.options.visible) {\n this.createElements();\n this.set(this._index(this.options.from), this._index(this.options.to));\n this.bindEvents();\n }\n },\n onPane: function (pane) {\n return this.categoryAxis.pane === pane;\n },\n createElements: function () {\n var options = this.options;\n var wrapper = this.wrapper = createDiv('k-selector');\n elementStyles(wrapper, {\n top: options.offset.top,\n left: options.offset.left,\n width: options.width,\n height: options.height,\n direction: 'ltr'\n });\n var selection = this.selection = createDiv('k-selection');\n this.leftMask = createDiv('k-mask');\n this.rightMask = createDiv('k-mask');\n wrapper.appendChild(this.leftMask);\n wrapper.appendChild(this.rightMask);\n wrapper.appendChild(selection);\n selection.appendChild(createDiv('k-selection-bg'));\n var leftHandle = this.leftHandle = createDiv('k-handle k-left-handle');\n var rightHandle = this.rightHandle = createDiv('k-handle k-right-handle');\n leftHandle.appendChild(createDiv());\n rightHandle.appendChild(createDiv());\n selection.appendChild(leftHandle);\n selection.appendChild(rightHandle);\n this.chartElement.appendChild(wrapper);\n var selectionStyles = elementStyles(selection, [\n 'borderLeftWidth',\n 'borderRightWidth',\n 'height'\n ]);\n var leftHandleHeight = elementStyles(leftHandle, 'height').height;\n var rightHandleHeight = elementStyles(rightHandle, 'height').height;\n options.selection = {\n border: {\n left: selectionStyles.borderLeftWidth,\n right: selectionStyles.borderRightWidth\n }\n };\n elementStyles(leftHandle, { top: (selectionStyles.height - leftHandleHeight) / 2 });\n elementStyles(rightHandle, { top: (selectionStyles.height - rightHandleHeight) / 2 });\n wrapper.style.cssText = wrapper.style.cssText;\n },\n bindEvents: function () {\n if (this.options.mousewheel !== false) {\n this._mousewheelHandler = this._mousewheel.bind(this);\n var obj;\n bindEvents(this.wrapper, (obj = {}, obj[MOUSEWHEEL] = this._mousewheelHandler, obj));\n }\n this._domEvents = services.DomEventsBuilder.create(this.wrapper, {\n 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 InfraerredDate;\n for (var i = 0; i < typeSamples.length; i++) {\n if (typeSamples[i] instanceof Date) {\n InfraerredDate = true;\n break;\n }\n }\n var axisType;\n if (equalsIgnoreCase(axisOptions.type, DATE) || !axisOptions.type && InfraerredDate) {\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 === 'sass' || themeName === 'default-v2' || themeName === 'bootstrap-v4') {\n return dataviz.autoTheme().chart;\n }\n if (defined(themeName)) {\n var themes = dataviz.ui.themes || {};\n var theme = themes[themeName] || themes[themeName.toLowerCase()] || {};\n return theme.chart || {};\n }\n },\n _initChart: function () {\n this._createChart(this.options, this._getThemeOptions(this.options));\n this.options = this._instance.options;\n this._seriesVisibility.setOptions(this.options);\n },\n _createChart: function (options, themeOptions) {\n this._instance = new KendoChart(this.element[0], options, themeOptions, {\n observer: new ChartInstanceObserver(this),\n sender: this,\n rtl: this._isRtl()\n });\n },\n _onInit: function (e) {\n this._instance = e.sender;\n },\n _initDataSource: function (userOptions) {\n var chart = this, dataSource = (userOptions || {}).dataSource;\n chart._dataChangeHandler = proxy(chart._onDataChanged, chart);\n chart.dataSource = DataSource.create(dataSource).bind('change', chart._dataChangeHandler);\n chart._bindCategories();\n if (dataSource) {\n chart._hasDataSource = true;\n }\n this._initChart();\n this._initTooltip();\n if (dataSource) {\n if (chart.options.autoBind) {\n chart.dataSource.fetch();\n }\n }\n },\n _destroyCrosshairTooltips: function () {\n var tooltips = this._crosshairTooltips;\n if (tooltips) {\n for (var key in tooltips) {\n tooltips[key].destroy();\n }\n }\n this._crosshairTooltips = {};\n },\n _getCrosshairTooltip: function (name, index) {\n var tooltips = this._crosshairTooltips = this._crosshairTooltips || {};\n var key = name + index;\n var tooltip = tooltips[key];\n if (!tooltip) {\n tooltip = tooltips[key] = new CrosshairTooltip(this.element);\n }\n return tooltip;\n },\n _showTooltip: function (e) {\n if (e.crosshair) {\n var tooltip = this._getCrosshairTooltip(e.axisName, e.axisIndex);\n tooltip.show(e);\n } else if (this._tooltip) {\n this._tooltip.show(e);\n }\n },\n _hideTooltip: function (e) {\n if (e.crosshair) {\n var tooltip = this._getCrosshairTooltip(e.axisName, e.axisIndex);\n tooltip.hide();\n } else if (this._tooltip) {\n this._tooltip.hide(e);\n }\n },\n _onRender: function (e) {\n this._destroyCrosshairTooltips();\n this._copyMembers(e.sender);\n if (!this._hasDataSource || this._hasData || !this.options.autoBind) {\n this.trigger(RENDER);\n }\n },\n _copyMembers: function (instance) {\n this.options = instance.options;\n this._originalOptions = instance._originalOptions;\n this.surface = instance.surface;\n this._plotArea = instance._plotArea;\n this._model = instance._model;\n this._highlight = instance._highlight;\n this._selections = instance._selections;\n this._pannable = instance._pannable;\n this._zoomSelection = instance._zoomSelection;\n this._mousewheelZoom = instance._mousewheelZoom;\n },\n requiresHandlers: function (names) {\n var events = this._events;\n for (var idx = 0; idx < names.length; idx++) {\n if (defined(events[names[idx]])) {\n return true;\n }\n }\n },\n _initTooltip: function () {\n this._tooltip = this._createTooltip();\n this._tooltip.bind(LEAVE, proxy(this._tooltipleave, this));\n },\n _onLegendItemClick: function (e) {\n if (!this.trigger(LEGEND_ITEM_CLICK, e)) {\n this._legendItemClick(e.seriesIndex, e.pointIndex);\n }\n },\n _legendItemClick: function (seriesIndex, pointIndex) {\n var chart = this._instance, plotArea = chart._plotArea, currentSeries = (plotArea.srcSeries || plotArea.series)[seriesIndex];\n if ($.inArray(currentSeries.type, [\n PIE,\n DONUT,\n FUNNEL\n ]) >= 0) {\n var point = currentSeries.data[pointIndex];\n if (point && defined(point.visible)) {\n point.visible = !point.visible;\n } else {\n var pointVisibility = currentSeries.pointVisibility = currentSeries.pointVisibility || {};\n var visible = pointVisibility[pointIndex];\n pointVisibility[pointIndex] = defined(visible) ? !visible : false;\n }\n } else {\n currentSeries.visible = !currentSeries.visible;\n this._seriesVisibility.save(currentSeries);\n }\n chart._noTransitionsRedraw();\n },\n _createTooltip: function () {\n return new Tooltip(this.element, extend({}, this.options.tooltip, { rtl: this._isRtl() }));\n },\n _tooltipleave: function () {\n if (this._instance) {\n this._instance.hideElements();\n }\n },\n _bindData: function (e) {\n var chart = this, options = chart.options, series = chart._sourceSeries || options.series, seriesIx, seriesLength = series.length, data = chart.dataSource.view(), grouped = (chart.dataSource.group() || []).length > 0, processedSeries = [], seriesVisibility = this._seriesVisibility, currentSeries, groupedSeries;\n seriesVisibility.read();\n for (seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\n currentSeries = series[seriesIx];\n if (chart._isBindable(currentSeries) && grouped) {\n groupedSeries = groupSeries(currentSeries, data);\n processedSeries = processedSeries.concat(groupedSeries);\n seriesVisibility.applyByGroup(groupedSeries, e);\n } else {\n currentSeries = extend({}, currentSeries);\n processedSeries.push(currentSeries);\n seriesVisibility.applyByIndex(currentSeries, e);\n }\n }\n chart._sourceSeries = series;\n options.series = processedSeries;\n this._instance.applySeriesColors();\n chart._bindSeries();\n chart._bindCategories();\n this._hasData = true;\n },\n _onDataChanged: function (e) {\n this._bindData(e);\n this.trigger(DATABOUND);\n if (this._instance && this._instance.fontLoaded) {\n this._redraw();\n }\n },\n _bindSeries: function () {\n var chart = this, data = chart.dataSource.view(), series = chart.options.series, seriesIx, seriesLength = series.length, currentSeries, groupIx, seriesData;\n for (seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\n currentSeries = series[seriesIx];\n if (chart._isBindable(currentSeries)) {\n groupIx = currentSeries._groupIx;\n seriesData = defined(groupIx) ? (data[groupIx] || {}).items : data;\n if (currentSeries.autoBind !== false) {\n currentSeries.data = seriesData;\n }\n }\n }\n },\n _bindCategories: function () {\n var chart = this, data = chart.dataSource.view() || [], grouped = (chart.dataSource.group() || []).length > 0, categoriesData = data, options = chart.options, definitions = [].concat(options.categoryAxis), axisIx, axis;\n if (grouped) {\n if (data.length) {\n categoriesData = data[0].items;\n }\n }\n for (axisIx = 0; axisIx < definitions.length; axisIx++) {\n axis = definitions[axisIx];\n if (axis.autoBind !== false) {\n chart._bindCategoryAxis(axis, categoriesData, axisIx);\n }\n }\n },\n _bindCategoryAxis: function (axis, data, axisIx) {\n var count = (data || []).length, categoryIx, category, row;\n if (axis.field) {\n axis.categories = [];\n for (categoryIx = 0; categoryIx < count; categoryIx++) {\n row = data[categoryIx];\n category = getField(axis.field, row);\n if (categoryIx === 0) {\n axis.categories = [category];\n axis.dataItems = [row];\n } else {\n axis.categories.push(category);\n axis.dataItems.push(row);\n }\n }\n } else if (this._instance) {\n this._instance.bindCategoryAxisFromSeries(axis, axisIx);\n }\n },\n _isBindable: function (series) {\n var valueFields = SeriesBinder.current.valueFields(series), result = true, field, i;\n for (i = 0; i < valueFields.length; i++) {\n field = valueFields[i];\n if (field === VALUE) {\n field = 'field';\n } else {\n field = field + 'Field';\n }\n if (!defined(series[field])) {\n result = false;\n break;\n }\n }\n return result;\n },\n _isRtl: function () {\n return kendo.support.isRtl(this.element) && this.element.css('direction') === RTL;\n }\n });\n var proxyMembers = [\n 'getAxis',\n 'findAxisByName',\n 'plotArea',\n 'toggleHighlight',\n 'showTooltip',\n 'hideTooltip',\n '_resize',\n '_redraw',\n '_noTransitionsRedraw',\n '_legendItemHover',\n '_eventCoordinates'\n ];\n function createProxyMember(name) {\n Chart.fn[name] = function () {\n var instance = this._instance;\n if (instance) {\n return instance[name].apply(instance, arguments);\n }\n };\n }\n for (var idx = 0; idx < proxyMembers.length; idx++) {\n createProxyMember(proxyMembers[idx]);\n }\n function groupSeries(series, data) {\n var result = [], nameTemplate, legacyTemplate = series.groupNameTemplate, groupIx, dataLength = data.length, seriesClone;\n if (dataLength === 0) {\n seriesClone = deepExtend({}, series);\n seriesClone.visibleInLegend = false;\n return [seriesClone];\n }\n if (defined(legacyTemplate)) {\n kendo.logToConsole('\\'groupNameTemplate\\' is obsolete and will be removed in future versions. ' + 'Specify the group name template as \\'series.name\\'');\n if (legacyTemplate) {\n nameTemplate = template(legacyTemplate);\n }\n } else {\n nameTemplate = template(series.name || '');\n if (nameTemplate._slotCount === 0) {\n nameTemplate = template(defined(series.name) ? '#= group.value #: #= series.name #' : '#= group.value #');\n }\n }\n for (groupIx = 0; groupIx < dataLength; groupIx++) {\n seriesClone = deepExtend({}, series);\n if (!kendo.isFunction(seriesClone.color)) {\n seriesClone.color = undefined;\n }\n seriesClone._groupIx = groupIx;\n seriesClone._groupValue = data[groupIx].value;\n result.push(seriesClone);\n if (nameTemplate) {\n seriesClone.name = nameTemplate({\n series: seriesClone,\n group: data[groupIx]\n });\n }\n }\n return result;\n }\n dataviz.ExportMixin.extend(Chart.fn);\n if (kendo.PDFMixin) {\n kendo.PDFMixin.extend(Chart.fn);\n }\n dataviz.ui.plugin(Chart);\n var SeriesVisibilityState = Class.extend({\n init: function () {\n this.groups = {};\n this.index = {};\n this.options = {};\n },\n applyByGroup: function (series, e) {\n if (e && e.action || this.options.persistSeriesVisibility) {\n for (var idx = 0; idx < series.length; idx++) {\n if (this.groups[series[idx]._groupValue] === false) {\n series[idx].visible = false;\n }\n }\n } else {\n this.groups = {};\n }\n },\n applyByIndex: function (series, e) {\n if (e && e.action || this.options.persistSeriesVisibility) {\n if (this.index[series.index] === false) {\n series.visible = false;\n }\n } else {\n this.index = {};\n }\n },\n save: function (series) {\n if (!series) {\n return;\n }\n if (this.options.persistSeriesVisibility) {\n this.options.series[series.index].visible = series.visible;\n } else {\n this.saveState(series);\n }\n },\n setOptions: function (options) {\n this.options = options;\n this.groups = {};\n this.index = {};\n },\n read: function () {\n var options = this.options;\n if (options.persistSeriesVisibility) {\n var series = options.series;\n for (var idx = 0; idx < series.length; idx++) {\n this.saveState(series[idx]);\n }\n }\n },\n saveState: function (series) {\n if (defined(series._groupValue)) {\n this.groups[series._groupValue] = series.visible;\n } else {\n this.index[series.index] = series.visible;\n }\n }\n });\n var geom = kendo.geometry;\n function normalizeStyle(style) {\n for (var field in style) {\n if (style[field] === undefined) {\n style[field] = '';\n }\n }\n return style;\n }\n var Tooltip = Observable.extend({\n init: function (chartElement, options) {\n var tooltip = this;\n Observable.fn.init.call(tooltip);\n this.setOptions(options);\n tooltip.chartElement = chartElement;\n tooltip.template = Tooltip.template;\n if (!tooltip.template) {\n tooltip.template = Tooltip.template = kendo.template('
    ' + '
    ', {\n useWithBlock: false,\n paramName: 'd'\n });\n }\n tooltip.element = $(tooltip.template(tooltip.options));\n tooltip.move = proxy(tooltip.move, tooltip);\n tooltip._mouseleave = proxy(tooltip._mouseleave, tooltip);\n var mobileScrollerSelector = kendo.format('[{0}=\\'content\\'],[{0}=\\'scroller\\']', kendo.attr('role'));\n tooltip._mobileScroller = chartElement.closest(mobileScrollerSelector).data('kendoMobileScroller');\n },\n destroy: function () {\n this._clearShowTimeout();\n if (this.element) {\n this.element.off(MOUSELEAVE_NS).remove();\n this.element = null;\n }\n },\n setOptions: function (options) {\n this.options = deepExtend({}, this.options, options);\n },\n options: {\n opacity: 1,\n animation: { duration: TOOLTIP_ANIMATION_DURATION },\n sharedTemplate: '' + '' + '# for(var i = 0; i < points.length; i++) { #' + '# var point = points[i]; #' + '' + '# if(colorMarker) { # ' + '' + '# } #' + '# if(nameColumn) { # ' + '' + '# } #' + '' + '' + '# } #' + '
    #= categoryText #
    #if (point.series.name) {# #: point.series.name #: #} else {#   #}##= content(point) #
    ',\n categoryFormat: '{0:d}'\n },\n move: function () {\n var tooltip = this, options = tooltip.options, element = tooltip.element, offset;\n if (!tooltip.anchor || !tooltip.element) {\n return;\n }\n offset = tooltip._offset();\n if (!tooltip.visible) {\n element.css({\n top: offset.top,\n left: offset.left\n });\n }\n tooltip.visible = true;\n tooltip._ensureElement(document.body);\n element.stop(true, true).show().animate({\n left: offset.left,\n top: offset.top\n }, options.animation.duration);\n },\n _clearShowTimeout: function () {\n if (this.showTimeout) {\n clearTimeout(this.showTimeout);\n this.showTimeout = null;\n }\n },\n getAnchor: function (size) {\n var anchor = this.anchor;\n var point = anchor.point;\n var align = anchor.align;\n var x = point.left;\n var y = point.top;\n if (align.horizontal === 'center') {\n x -= size.width / 2;\n } else if (align.horizontal === 'right') {\n x -= size.width;\n }\n if (align.vertical === 'center') {\n y -= size.height / 2;\n } else if (align.vertical === 'bottom') {\n y -= size.height;\n }\n return {\n x: x,\n y: y\n };\n },\n _offset: function () {\n var tooltip = this, size = tooltip._measure(), anchor = tooltip.getAnchor(size), top = anchor.y, left = anchor.x, zoomLevel = kendo.support.zoomLevel(), viewport = $(window), scrollTop = window.pageYOffset || document.documentElement.scrollTop || 0, scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || 0, movable = (this._mobileScroller || {}).movable;\n if (!movable || movable.scale === 1) {\n top += tooltip._fit(top - scrollTop, size.height, outerHeight(viewport) / zoomLevel);\n left += tooltip._fit(left - scrollLeft, size.width, outerWidth(viewport) / zoomLevel);\n } else {\n var transform = geom.transform().scale(movable.scale, movable.scale, [\n movable.x,\n movable.y\n ]);\n var point = new geom.Point(left, top).transform(transform);\n left = point.x;\n top = point.y;\n }\n return {\n top: top,\n left: left\n };\n },\n show: function (e) {\n this.anchor = e.anchor;\n this.element.css(normalizeStyle(e.style));\n this.element.toggleClass(TOOLTIP_INVERSE, !!e.className);\n this.element.toggleClass(SHARED_TOOLTIP_CLASS, !!e.shared);\n var content = e.shared ? this._sharedContent(e) : this._pointContent(e.point);\n this.element.html(content);\n this._clearShowTimeout();\n this.showTimeout = setTimeout(this.move, TOOLTIP_SHOW_DELAY);\n },\n hide: function () {\n var tooltip = this;\n clearTimeout(tooltip.showTimeout);\n tooltip._hideElement();\n if (tooltip.visible) {\n tooltip.point = null;\n tooltip.visible = false;\n tooltip.index = null;\n }\n },\n _sharedContent: function (e) {\n var points = e.points;\n var nameColumn = dataviz.grep(points, function (point) {\n return defined(point.series.name);\n }).length;\n var colorMarker = e.series.length > 1;\n var colspan = 1;\n if (nameColumn) {\n colspan++;\n }\n if (colorMarker) {\n colspan++;\n }\n var template = kendo.template(this.options.sharedTemplate);\n var content = template({\n points: points,\n category: e.category,\n categoryText: e.categoryText,\n content: this._pointContent,\n colorMarker: colorMarker,\n nameColumn: nameColumn,\n colspan: colspan\n });\n return content;\n },\n _measure: function () {\n this._ensureElement();\n var size = {\n width: outerWidth(this.element),\n height: outerHeight(this.element)\n };\n return size;\n },\n _ensureElement: function () {\n if (this.element) {\n this.element.appendTo(document.body).on(MOUSELEAVE_NS, this._mouseleave);\n }\n },\n _mouseleave: function (e) {\n var target = e.relatedTarget;\n var chart = this.chartElement[0];\n if (target && target !== chart && !$.contains(chart, target)) {\n this.trigger(LEAVE);\n }\n },\n _hideElement: function () {\n var tooltip = this;\n var element = this.element;\n if (element) {\n element.fadeOut({\n always: function () {\n if (!tooltip.visible) {\n element.off(MOUSELEAVE_NS).remove();\n }\n }\n });\n }\n },\n _pointContent: function (point) {\n var tooltip = this, options = deepExtend({}, tooltip.options, point.options.tooltip), content, tooltipTemplate;\n if (defined(point.value)) {\n content = point.value.toString();\n }\n if (options.template) {\n tooltipTemplate = template(options.template);\n content = tooltipTemplate({\n value: point.value,\n category: point.category,\n series: point.series,\n dataItem: point.dataItem,\n percentage: point.percentage,\n runningTotal: point.runningTotal,\n total: point.total,\n low: point.low,\n high: point.high,\n xLow: point.xLow,\n xHigh: point.xHigh,\n yLow: point.yLow,\n yHigh: point.yHigh\n });\n } else if (options.format) {\n content = point.formatValue(options.format);\n }\n return content;\n },\n _fit: function (offset, size, viewPortSize) {\n var output = 0;\n if (offset + size > viewPortSize) {\n output = viewPortSize - (offset + size);\n }\n if (offset < 0) {\n output = -offset;\n }\n return output;\n }\n });\n var CrosshairTooltip = Tooltip.extend({\n init: function (chartElement, options) {\n Tooltip.fn.init.call(this, chartElement, options);\n this.element.addClass('k-chart-crosshair-tooltip');\n },\n show: function (e) {\n var element = this.element;\n if (element) {\n this.anchor = e.anchor;\n this.element.css(e.style);\n this.element.html(this.content(e));\n this.move();\n }\n },\n move: function () {\n var tooltip = this, element = tooltip.element, offset = tooltip._offset();\n tooltip._ensureElement();\n element.css({\n top: offset.top,\n left: offset.left\n }).show();\n },\n content: function (e) {\n var content = e.value, options = e.crosshair.options.tooltip;\n if (options.template) {\n content = template(options.template)({ value: content });\n }\n return content;\n },\n hide: function () {\n this.element.hide();\n }\n });\n var ChartPane = Class.extend({\n init: function (chart, pane) {\n this._chart = chart;\n this._pane = pane;\n this.visual = pane.visual;\n this.chartsVisual = pane.chartContainer.visual;\n this.name = pane.options.name;\n },\n series: function () {\n var chart = this._chart;\n var seriesByPane = chart._plotArea.groupSeriesByPane();\n var series = seriesByPane[this.name || 'default'];\n var result = [];\n if (series) {\n for (var idx = 0; idx < series.length; idx++) {\n result.push(new ChartSeries(chart, series[idx]));\n }\n }\n return result;\n }\n });\n var ChartSeries = Class.extend({\n init: function (chart, options) {\n this._chart = chart;\n this._options = options;\n },\n points: function (filter) {\n var points = this._points;\n if (!points) {\n var series = this._seriesOptions();\n var plotArea = this._chart._plotArea;\n this._points = points = plotArea.pointsBySeriesIndex(series.index);\n }\n if (kendo.isFunction(filter)) {\n points = this._filterPoints(points, filter);\n }\n return points;\n },\n data: function (data) {\n var series = this._seriesOptions();\n if (data) {\n var chart = this._chart;\n var plotArea = chart._plotArea;\n series.data = data;\n if (series.categoryField) {\n var axis = plotArea.seriesCategoryAxis(series);\n var options = [].concat(chart.options.categoryAxis);\n chart._instance.bindCategoryAxisFromSeries(options[axis.axisIndex], axis.axisIndex);\n }\n chart._noTransitionsRedraw();\n this._clearFields();\n }\n return series.data;\n },\n findPoint: function (filter) {\n var points = this.points();\n for (var idx = 0; idx < points.length; idx++) {\n if (filter(points[idx])) {\n return points[idx];\n }\n }\n },\n toggleHighlight: function (show, elements) {\n if (!elements) {\n elements = this.points();\n } else if (kendo.isFunction(elements)) {\n elements = this.points(elements);\n } else {\n elements = isArray(elements) ? elements : [elements];\n }\n this._chart._instance.togglePointsHighlight(show, elements);\n },\n toggleVisibility: function (visible, filter) {\n var chart = this._chart;\n var seriesOptions = this._seriesOptions();\n var hasFilter = kendo.isFunction(filter);\n if (!hasFilter) {\n seriesOptions.visible = visible;\n chart._seriesVisibility.save(seriesOptions);\n } else {\n if (inArray(seriesOptions.type, [\n PIE,\n DONUT,\n FUNNEL\n ])) {\n var data = this._filterData(filter);\n for (var idx = 0; idx < data.length; idx++) {\n data[idx].visible = visible;\n }\n } else {\n seriesOptions.visible = function (data) {\n return filter(data.dataItem) ? visible : true;\n };\n }\n }\n chart._noTransitionsRedraw();\n this._clearFields();\n },\n _filterData: function (filter) {\n var data = this._seriesOptions().data;\n var length = data.length;\n var result = [];\n for (var idx = 0; idx < length; idx++) {\n if (filter(data[idx])) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n _filterPoints: function (points, filter) {\n var result = [];\n var length = points.length;\n for (var idx = 0; idx < length; idx++) {\n if (filter(points[idx])) {\n result.push(points[idx]);\n }\n }\n return result;\n },\n _seriesOptions: function () {\n var series = this._series;\n if (!series) {\n series = this._series = this._chart._seriesOptions(this._options);\n }\n return series;\n },\n _clearFields: function () {\n delete this._points;\n delete this._series;\n }\n });\n function triggerPaneRender(panes) {\n for (var idx = 0; idx < panes.length; idx++) {\n panes[idx].notifyRender();\n }\n }\n dataviz.Tooltip = Tooltip;\n dataviz.CrosshairTooltip = CrosshairTooltip;\n dataviz.ChartInstanceObserver = ChartInstanceObserver;\n dataviz.ChartPane = ChartPane;\n dataviz.ChartSeries = ChartSeries;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.chart', [\n 'dataviz/chart/kendo-chart',\n 'dataviz/chart/chart'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.chart',\n name: 'Chart',\n category: 'dataviz',\n description: 'The Chart widget uses modern browser technologies to render high-quality data visualizations in the browser.',\n depends: [\n 'data',\n 'userevents',\n 'drawing',\n 'dataviz.core',\n 'dataviz.themes'\n ],\n features: [{\n id: 'dataviz.chart-pdf-export',\n name: 'PDF export',\n description: 'Export Chart as PDF',\n depends: ['pdf']\n }]\n };\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/gauge/kendo-gauges', [\n 'kendo.core',\n 'kendo.color',\n 'kendo.drawing',\n 'kendo.dataviz.core'\n ], f);\n}(function () {\n (function ($) {\n window.kendo.dataviz = window.kendo.dataviz || {};\n var dataviz = kendo.dataviz;\n var getSpacing = dataviz.getSpacing;\n var defined = dataviz.defined;\n var constants = dataviz.constants;\n var BLACK = constants.BLACK;\n var COORD_PRECISION = constants.COORD_PRECISION;\n var services = dataviz.services;\n var deepExtend = dataviz.deepExtend;\n var isArray = dataviz.isArray;\n var setDefaultOptions = dataviz.setDefaultOptions;\n var NumericAxis = dataviz.NumericAxis;\n var limitValue = dataviz.limitValue;\n var Box = dataviz.Box;\n var interpolateValue = dataviz.interpolateValue;\n var round = dataviz.round;\n var drawing = kendo.drawing;\n var DrawingGroup = drawing.Group;\n var DrawingPath = drawing.Path;\n var Animation = drawing.Animation;\n var AnimationFactory = drawing.AnimationFactory;\n var geometry = kendo.geometry;\n var Rect = geometry.Rect;\n var GeometryPoint = geometry.Point;\n var transform = geometry.transform;\n var ANGULAR_SPEED = 150;\n var LINEAR_SPEED = 250;\n var ARROW = 'arrow';\n var ARROW_POINTER = 'arrowPointer';\n var BAR_POINTER = 'barPointer';\n var DEFAULT_HEIGHT = 200;\n var DEFAULT_LINE_WIDTH = 0.5;\n var DEFAULT_WIDTH = 200;\n var DEGREE = Math.PI / 180;\n var INSIDE = 'inside';\n var LINEAR = 'linear';\n var OUTSIDE = 'outside';\n var RADIAL_POINTER = 'radialPointer';\n var RADIAL_RANGE_POINTER = 'radialRangePointer';\n function pad(bbox, value) {\n var origin = bbox.getOrigin();\n var size = bbox.getSize();\n var spacing = getSpacing(value);\n bbox.setOrigin([\n origin.x - spacing.left,\n origin.y - spacing.top\n ]);\n bbox.setSize([\n size.width + (spacing.left + spacing.right),\n size.height + (spacing.top + spacing.bottom)\n ]);\n return bbox;\n }\n var Group = DrawingGroup;\n var Path$1 = DrawingPath;\n var Text = drawing.Text;\n function buildLabelElement(label, options) {\n var labelBox = label.box;\n var textBox = label.children[0].box;\n var border = options.border || {};\n var background = options.background || '';\n var wrapper = Path$1.fromRect(new Rect([\n labelBox.x1,\n labelBox.y1\n ], [\n labelBox.width(),\n labelBox.height()\n ]), { stroke: {} });\n var text = new Text(label.text, new GeometryPoint(textBox.x1, textBox.y1), {\n font: options.font,\n fill: { color: options.color }\n });\n var styleGeometry = pad(text.bbox().clone(), options.padding);\n var styleBox = Path$1.fromRect(styleGeometry, {\n stroke: {\n color: border.width ? border.color : '',\n width: border.width,\n dashType: border.dashType,\n lineJoin: 'round',\n lineCap: 'round'\n },\n fill: { color: background }\n });\n var elements = new Group();\n elements.append(wrapper);\n elements.append(styleBox);\n elements.append(text);\n return elements;\n }\n function getRange(range, min, max) {\n var from = defined(range.from) ? range.from : constants.MIN_VALUE;\n var to = defined(range.to) ? range.to : constants.MAX_VALUE;\n range.from = Math.max(Math.min(to, from), min);\n range.to = Math.min(Math.max(to, from), max);\n return range;\n }\n function unpad(bbox, value) {\n var spacing = getSpacing(value);\n spacing.left = -spacing.left;\n spacing.top = -spacing.top;\n spacing.right = -spacing.right;\n spacing.bottom = -spacing.bottom;\n return pad(bbox, spacing);\n }\n var DEFAULT_MARGIN = 5;\n var Path = DrawingPath;\n var Surface = drawing.Surface;\n var Gauge = dataviz.Class.extend({\n init: function (element, userOptions, theme, context) {\n if (context === void 0) {\n context = {};\n }\n this.element = element;\n this.theme = theme;\n this.contextService = new services.ChartService(this, context);\n this._originalOptions = deepExtend({}, this.options, userOptions);\n this.options = deepExtend({}, this._originalOptions);\n this._initTheme(theme);\n this.redraw();\n },\n destroy: function () {\n if (this.surface) {\n this.surface.destroy();\n this.surface = null;\n }\n delete this.element;\n delete this.surfaceElement;\n },\n value: function (pointerValue) {\n var pointer = this.pointers[0];\n if (arguments.length === 0) {\n return pointer.value();\n }\n pointer.value(pointerValue);\n this._setValueOptions(pointerValue);\n },\n _draw: function () {\n var surface = this.surface;\n surface.clear();\n surface.draw(this._visuals);\n },\n exportVisual: function () {\n return this._visuals;\n },\n allValues: function (values) {\n var pointers = this.pointers;\n var allValues = [];\n if (arguments.length === 0) {\n for (var i = 0; i < pointers.length; i++) {\n allValues.push(pointers[i].value());\n }\n return allValues;\n }\n if (isArray(values)) {\n for (var i$1 = 0; i$1 < values.length; i$1++) {\n if (dataviz.isNumber(values[i$1])) {\n pointers[i$1].value(values[i$1]);\n }\n }\n }\n this._setValueOptions(values);\n },\n _setValueOptions: function (values) {\n var pointers = [].concat(this.options.pointer);\n var arrayValues = [].concat(values);\n for (var i = 0; i < arrayValues.length; i++) {\n pointers[i].value = arrayValues[i];\n }\n },\n resize: function () {\n this.noTransitionsRedraw();\n },\n noTransitionsRedraw: function () {\n var transitions = this.options.transitions;\n this._toggleTransitions(false);\n this.redraw();\n this._toggleTransitions(transitions);\n },\n redraw: function () {\n var size = this._surfaceSize();\n var wrapper = new Rect([\n 0,\n 0\n ], [\n size.width,\n size.height\n ]);\n this._initSurface();\n this.gaugeArea = this._createGaugeArea();\n this._createModel();\n var bbox = unpad(wrapper.bbox(), this._gaugeAreaMargin);\n this.reflow(bbox);\n },\n setOptions: function (options, theme) {\n this._originalOptions = deepExtend(this._originalOptions, options);\n this.options = deepExtend({}, this._originalOptions);\n this._initTheme(theme);\n this.redraw();\n },\n setDirection: function (rtl) {\n this.contextService.rtl = Boolean(rtl);\n if (this.surface && this.surface.type === 'svg') {\n this.surface.destroy();\n this.surface = null;\n }\n },\n setIntlService: function (intl) {\n this.contextService.intl = intl;\n },\n _initTheme: function (theme) {\n var currentTheme = theme || this.theme || {};\n this.theme = currentTheme;\n this.options = deepExtend({}, currentTheme, this.options);\n var options = this.options;\n var pointer = options.pointer;\n if (isArray(pointer)) {\n var pointers = [];\n for (var i = 0; i < pointer.length; i++) {\n pointers.push(deepExtend({}, currentTheme.pointer, pointer[i]));\n }\n options.pointer = pointers;\n }\n },\n _createGaugeArea: function () {\n var options = this.options.gaugeArea;\n var size = this.surface.size();\n var border = options.border || {};\n var areaGeometry = new Rect([\n 0,\n 0\n ], [\n size.width,\n size.height\n ]);\n this._gaugeAreaMargin = options.margin || DEFAULT_MARGIN;\n if (border.width > 0) {\n areaGeometry = unpad(areaGeometry, border.width);\n }\n var gaugeArea = Path.fromRect(areaGeometry, {\n stroke: {\n color: border.width ? border.color : '',\n width: border.width,\n dashType: border.dashType,\n lineJoin: 'round',\n lineCap: 'round'\n },\n fill: { color: options.background }\n });\n return gaugeArea;\n },\n _initSurface: function () {\n var ref = this;\n var options = ref.options;\n var surface = ref.surface;\n var element = this._surfaceElement();\n var size = this._surfaceSize();\n dataviz.elementSize(element, size);\n if (!surface || surface.options.type !== options.renderAs) {\n if (surface) {\n surface.destroy();\n }\n this.surface = Surface.create(element, { type: options.renderAs });\n } else {\n this.surface.clear();\n this.surface.resize();\n }\n },\n _surfaceSize: function () {\n var options = this.options;\n var size = this._getSize();\n if (options.gaugeArea) {\n deepExtend(size, options.gaugeArea);\n }\n return size;\n },\n _surfaceElement: function () {\n if (!this.surfaceElement) {\n this.surfaceElement = document.createElement('div');\n this.element.appendChild(this.surfaceElement);\n }\n return this.surfaceElement;\n },\n getSize: function () {\n return this._getSize();\n },\n _getSize: function () {\n var element = this.element;\n var defaultSize = this._defaultSize();\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n if (!width) {\n width = defaultSize.width;\n }\n if (!height) {\n height = defaultSize.height;\n }\n return {\n width: width,\n height: height\n };\n },\n _defaultSize: function () {\n return {\n width: DEFAULT_WIDTH,\n height: DEFAULT_HEIGHT\n };\n },\n _toggleTransitions: function (value) {\n var this$1 = this;\n this.options.transitions = value;\n for (var i = 0; i < this.pointers.length; i++) {\n this$1.pointers[i].options.animation.transitions = value;\n }\n }\n });\n setDefaultOptions(Gauge, {\n plotArea: {},\n theme: 'default',\n renderAs: '',\n pointer: {},\n scale: {},\n gaugeArea: {}\n });\n var Path$2 = DrawingPath;\n var Group$2 = DrawingGroup;\n var Point = GeometryPoint;\n function renderAxisTick(tickRenderOptions, tickOptions) {\n var position = tickRenderOptions.position;\n var tickX = tickRenderOptions.tickX;\n var tickY = tickRenderOptions.tickY;\n var start, end;\n if (tickRenderOptions.vertical) {\n start = new Point(tickX, position);\n end = new Point(tickX + tickOptions.size, position);\n } else {\n start = new Point(position, tickY);\n end = new Point(position, tickY + tickOptions.size);\n }\n var tickPath = new Path$2({\n stroke: {\n color: tickOptions.color,\n width: tickOptions.width\n }\n }).moveTo(start).lineTo(end);\n return tickPath;\n }\n function renderTicks(tickGroup, tickPositions, tickRenderOptions, tickOptions) {\n var count = tickPositions.length;\n if (tickOptions.visible) {\n var mirror = tickRenderOptions.mirror;\n var lineBox = tickRenderOptions.lineBox;\n for (var i = tickOptions.skip; i < count; i += tickOptions.step) {\n if (i % tickOptions.skipUnit === 0) {\n continue;\n }\n tickRenderOptions.tickX = mirror ? lineBox.x2 : lineBox.x2 - tickOptions.size;\n tickRenderOptions.tickY = mirror ? lineBox.y1 - tickOptions.size : lineBox.y1;\n tickRenderOptions.position = tickPositions[i];\n tickGroup.append(renderAxisTick(tickRenderOptions, tickOptions));\n }\n }\n }\n var LinearScale = NumericAxis.extend({\n init: function (options, service) {\n var scaleOptions = options || {};\n if (!defined(scaleOptions.reverse) && scaleOptions.vertical === false && (service || {}).rtl) {\n scaleOptions = $.extend({}, scaleOptions, { reverse: true });\n }\n NumericAxis.fn.init.call(this, 0, 1, scaleOptions, service);\n this.options.minorUnit = this.options.minorUnit || this.options.majorUnit / 10;\n },\n initUserOptions: function (options) {\n var scaleOptions = deepExtend({}, this.options, options);\n scaleOptions = deepExtend({}, scaleOptions, { labels: { mirror: scaleOptions.mirror } });\n scaleOptions.majorUnit = scaleOptions.majorUnit || dataviz.autoMajorUnit(scaleOptions.min, scaleOptions.max);\n return scaleOptions;\n },\n initFields: function () {\n },\n render: function () {\n var elements = this.elements = new Group$2();\n var labels = this.renderLabels();\n var scaleLine = this.renderLine();\n var scaleTicks = this.renderTicks();\n var ranges = this.renderRanges();\n elements.append(scaleLine, labels, scaleTicks, ranges);\n return elements;\n },\n renderRanges: function () {\n var this$1 = this;\n var options = this.options;\n var min = options.min;\n var max = options.max;\n var vertical = options.vertical;\n var mirror = options.labels.mirror;\n var ranges = options.ranges || [];\n var elements = new Group$2();\n var count = ranges.length;\n var rangeSize = options.rangeSize || options.minorTicks.size / 2;\n for (var i = 0; i < count; i++) {\n var range = getRange(ranges[i], min, max);\n var slot = this$1.getSlot(range.from, range.to);\n var slotX = vertical ? this$1.lineBox() : slot;\n var slotY = vertical ? slot : this$1.lineBox();\n if (vertical) {\n slotX.x1 -= rangeSize * (mirror ? -1 : 1);\n } else {\n slotY.y2 += rangeSize * (mirror ? -1 : 1);\n }\n elements.append(Path$2.fromRect(new Rect([\n slotX.x1,\n slotY.y1\n ], [\n slotX.x2 - slotX.x1,\n slotY.y2 - slotY.y1\n ]), {\n fill: {\n color: range.color,\n opacity: range.opacity\n },\n stroke: {}\n }));\n }\n return elements;\n },\n renderLabels: function () {\n var ref = this;\n var labels = ref.labels;\n var options = ref.options;\n var elements = new Group$2();\n for (var i = 0; i < labels.length; i++) {\n elements.append(buildLabelElement(labels[i], options.labels));\n }\n return elements;\n },\n renderLine: function () {\n var line = this.options.line;\n var lineBox = this.lineBox();\n var elements = new Group$2();\n if (line.width > 0 && line.visible) {\n var linePath = new Path$2({\n stroke: {\n color: line.color,\n dashType: line.dashType,\n width: line.width\n }\n });\n linePath.moveTo(lineBox.x1, lineBox.y1).lineTo(lineBox.x2, lineBox.y2);\n elements.append(linePath);\n }\n return elements;\n },\n renderTicks: function () {\n var ticks = new Group$2();\n var options = this.options;\n var majorUnit = options.majorTicks.visible ? options.majorUnit : 0;\n var tickRenderOptions = {\n vertical: options.vertical,\n mirror: options.labels.mirror,\n lineBox: this.lineBox()\n };\n renderTicks(ticks, this.getMajorTickPositions(), tickRenderOptions, options.majorTicks);\n renderTicks(ticks, this.getMinorTickPositions(), tickRenderOptions, deepExtend({}, { skipUnit: majorUnit / options.minorUnit }, options.minorTicks));\n return ticks;\n }\n });\n setDefaultOptions(LinearScale, {\n min: 0,\n max: 50,\n majorTicks: {\n size: 15,\n align: INSIDE,\n color: BLACK,\n width: DEFAULT_LINE_WIDTH,\n visible: true\n },\n minorTicks: {\n size: 10,\n align: INSIDE,\n color: BLACK,\n width: DEFAULT_LINE_WIDTH,\n visible: true\n },\n line: { width: DEFAULT_LINE_WIDTH },\n labels: {\n position: INSIDE,\n padding: 2\n },\n mirror: false,\n _alignLines: false\n });\n var Pointer = dataviz.Class.extend({\n init: function (scale, userOptions) {\n var ref = scale.options;\n var min = ref.min;\n var max = ref.max;\n var options = this.options = deepExtend({}, this.options, userOptions);\n options.fill = options.color;\n this.scale = scale;\n if (defined(options.value)) {\n options.value = limitValue(options.value, min, max);\n } else {\n options.value = min;\n }\n },\n value: function (newValue) {\n var options = this.options;\n var value = options.value;\n if (arguments.length === 0) {\n return value;\n }\n var ref = this.scale.options;\n var min = ref.min;\n var max = ref.max;\n options._oldValue = defined(options._oldValue) ? options.value : min;\n options.value = limitValue(newValue, min, max);\n if (this.elements) {\n this.repaint();\n }\n }\n });\n setDefaultOptions(Pointer, { color: BLACK });\n var LinearPointer = Pointer.extend({\n init: function (scale, options) {\n Pointer.fn.init.call(this, scale, options);\n this.options = deepExtend({ track: { visible: defined(options.track) } }, this.options);\n },\n reflow: function () {\n var ref = this;\n var options = ref.options;\n var scale = ref.scale;\n var ref$1 = scale.options;\n var mirror = ref$1.mirror;\n var vertical = ref$1.vertical;\n var scaleLine = scale.lineBox();\n var trackSize = options.track.size || options.size;\n var pointerHalfSize = options.size / 2;\n var margin = getSpacing(options.margin);\n var space = vertical ? margin[mirror ? 'left' : 'right'] : margin[mirror ? 'bottom' : 'top'];\n var pointerBox, pointerRangeBox, trackBox;\n space = mirror ? -space : space;\n if (vertical) {\n trackBox = new Box(scaleLine.x1 + space, scaleLine.y1, scaleLine.x1 + space, scaleLine.y2);\n if (mirror) {\n trackBox.x1 -= trackSize;\n } else {\n trackBox.x2 += trackSize;\n }\n if (options.shape !== BAR_POINTER) {\n pointerRangeBox = new Box(scaleLine.x2 + space, scaleLine.y1 - pointerHalfSize, scaleLine.x2 + space, scaleLine.y2 + pointerHalfSize);\n pointerBox = pointerRangeBox;\n }\n } else {\n trackBox = new Box(scaleLine.x1, scaleLine.y1 - space, scaleLine.x2, scaleLine.y1 - space);\n if (mirror) {\n trackBox.y2 += trackSize;\n } else {\n trackBox.y1 -= trackSize;\n }\n if (options.shape !== BAR_POINTER) {\n pointerRangeBox = new Box(scaleLine.x1 - pointerHalfSize, scaleLine.y1 - space, scaleLine.x2 + pointerHalfSize, scaleLine.y1 - space);\n pointerBox = pointerRangeBox;\n }\n }\n this.trackBox = trackBox;\n this.pointerRangeBox = pointerRangeBox;\n this.box = pointerBox || trackBox.clone().pad(options.border.width);\n },\n getElementOptions: function () {\n var options = this.options;\n return {\n fill: {\n color: options.color,\n opacity: options.opacity\n },\n stroke: defined(options.border) ? {\n color: options.border.width ? options.border.color || options.color : '',\n width: options.border.width,\n dashType: options.border.dashType,\n opacity: options.opacity\n } : null\n };\n },\n _margin: function () {\n var ref = this;\n var scale = ref.scale;\n var options = ref.options;\n var ref$1 = scale.options;\n var mirror = ref$1.mirror;\n var vertical = ref$1.vertical;\n var margin = getSpacing(options.margin);\n var space = vertical ? margin[mirror ? 'left' : 'right'] : margin[mirror ? 'bottom' : 'top'];\n return space;\n }\n });\n setDefaultOptions(LinearPointer, {\n shape: BAR_POINTER,\n track: { border: { width: 1 } },\n color: BLACK,\n border: { width: 1 },\n opacity: 1,\n margin: getSpacing(3),\n animation: { type: BAR_POINTER },\n visible: true\n });\n var ArrowLinearPointerAnimation = Animation.extend({\n setup: function () {\n var options = this.options;\n var margin = options.margin;\n var from = options.from;\n var to = options.to;\n var vertical = options.vertical;\n var axis = vertical ? 'x1' : 'y1';\n if (options.mirror === vertical) {\n from[axis] -= margin;\n to[axis] -= margin;\n } else {\n from[axis] += margin;\n to[axis] += margin;\n }\n var fromScale = this.fromScale = new GeometryPoint(from.x1, from.y1);\n var toScale = this.toScale = new GeometryPoint(to.x1, to.y1);\n if (options.duration !== 0) {\n options.duration = Math.max(fromScale.distanceTo(toScale) / options.duration * 1000, 1);\n }\n },\n step: function (pos) {\n var translateX = interpolateValue(this.fromScale.x, this.toScale.x, pos);\n var translateY = interpolateValue(this.fromScale.y, this.toScale.y, pos);\n this.element.transform(transform().translate(translateX, translateY));\n }\n });\n setDefaultOptions(ArrowLinearPointerAnimation, {\n easing: LINEAR,\n duration: LINEAR_SPEED\n });\n AnimationFactory.current.register(ARROW_POINTER, ArrowLinearPointerAnimation);\n var Point$1 = GeometryPoint;\n var Path$3 = DrawingPath;\n var ArrowLinearPointer = LinearPointer.extend({\n init: function (scale, options) {\n LinearPointer.fn.init.call(this, scale, options);\n if (!defined(this.options.size)) {\n this.options.size = this.scale.options.majorTicks.size * 0.6;\n }\n },\n pointerShape: function () {\n var ref = this;\n var scale = ref.scale;\n var size = ref.options.size;\n var halfSize = size / 2;\n var sign = scale.options.mirror ? -1 : 1;\n var shape;\n if (scale.options.vertical) {\n shape = [\n new Point$1(0, 0 - halfSize),\n new Point$1(0 - sign * size, 0),\n new Point$1(0, 0 + halfSize)\n ];\n } else {\n shape = [\n new Point$1(0 - halfSize, 0),\n new Point$1(0, 0 + sign * size),\n new Point$1(0 + halfSize, 0)\n ];\n }\n return shape;\n },\n repaint: function () {\n var ref = this;\n var scale = ref.scale;\n var options = ref.options;\n var animation = new ArrowLinearPointerAnimation(this.elements, deepExtend(options.animation, {\n vertical: scale.options.vertical,\n mirror: scale.options.mirror,\n margin: this._margin(options.margin),\n from: scale.getSlot(options._oldValue),\n to: scale.getSlot(options.value)\n }));\n if (options.animation.transitions === false) {\n animation.options.duration = 0;\n }\n animation.setup();\n animation.play();\n },\n render: function () {\n var ref = this;\n var scale = ref.scale;\n var options = ref.options;\n var elementOptions = this.getElementOptions();\n var shape = this.pointerShape(options.value);\n options.animation.type = ARROW_POINTER;\n var elements = new Path$3({\n stroke: elementOptions.stroke,\n fill: elementOptions.fill\n }).moveTo(shape[0]).lineTo(shape[1]).lineTo(shape[2]).close();\n var slot = scale.getSlot(options.value);\n elements.transform(transform().translate(slot.x1, slot.y1));\n this.elements = elements;\n return elements;\n }\n });\n var BarLinearPointerAnimation = Animation.extend({\n setup: function () {\n var options = this.options;\n var axis = this.axis = options.vertical ? constants.Y : constants.X;\n var to = this.to = options.newPoints[0][axis];\n var from = this.from = options.oldPoints[0][axis];\n if (options.duration !== 0) {\n options.duration = Math.max(Math.abs(to - from) / options.speed * 1000, 1);\n }\n this._set(from);\n },\n step: function (pos) {\n var value = interpolateValue(this.from, this.to, pos);\n this._set(value);\n },\n _set: function (value) {\n var setter = 'set' + this.axis.toUpperCase();\n var points = this.options.newPoints;\n points[0][setter](value);\n points[1][setter](value);\n }\n });\n setDefaultOptions(BarLinearPointerAnimation, {\n easing: LINEAR,\n speed: LINEAR_SPEED\n });\n AnimationFactory.current.register(BAR_POINTER, BarLinearPointerAnimation);\n var Group$3 = DrawingGroup;\n var Path$4 = DrawingPath;\n var BarLinearPointer = LinearPointer.extend({\n init: function (scale, options) {\n LinearPointer.fn.init.call(this, scale, options);\n if (!defined(this.options.size)) {\n this.options.size = this.scale.options.majorTicks.size * 0.3;\n }\n },\n pointerShape: function (value) {\n var ref = this;\n var scale = ref.scale;\n var options = ref.options;\n var ref$1 = scale.options;\n var mirror = ref$1.mirror;\n var vertical = ref$1.vertical;\n var dir = mirror === vertical ? -1 : 1;\n var size = options.size * dir;\n var minSlot = scale.getSlot(scale.options.min);\n var slot = scale.getSlot(value);\n var axis = vertical ? constants.Y : constants.X;\n var sizeAxis = vertical ? constants.X : constants.Y;\n var margin = this._margin() * dir;\n var p1 = new GeometryPoint();\n p1[axis] = minSlot[axis + '1'];\n p1[sizeAxis] = minSlot[sizeAxis + '1'];\n var p2 = new GeometryPoint();\n p2[axis] = slot[axis + '1'];\n p2[sizeAxis] = slot[sizeAxis + '1'];\n if (vertical) {\n p1.translate(margin, 0);\n p2.translate(margin, 0);\n } else {\n p1.translate(0, margin);\n p2.translate(0, margin);\n }\n var p3 = p2.clone();\n var p4 = p1.clone();\n if (vertical) {\n p3.translate(size, 0);\n p4.translate(size, 0);\n } else {\n p3.translate(0, size);\n p4.translate(0, size);\n }\n return [\n p1,\n p2,\n p3,\n p4\n ];\n },\n repaint: function () {\n var ref = this;\n var scale = ref.scale;\n var options = ref.options;\n var shape = this.pointerShape(options.value);\n var pointerPath = this.pointerPath;\n var oldShape = this.pointerShape(options._oldValue);\n pointerPath.moveTo(shape[0]).lineTo(shape[1]).lineTo(shape[2]).lineTo(shape[3]).close();\n var animation = new BarLinearPointerAnimation(pointerPath, deepExtend(options.animation, {\n reverse: scale.options.reverse,\n vertical: scale.options.vertical,\n oldPoints: [\n oldShape[1],\n oldShape[2]\n ],\n newPoints: [\n shape[1],\n shape[2]\n ]\n }));\n if (options.animation.transitions === false) {\n animation.options.duration = 0;\n }\n animation.setup();\n animation.play();\n },\n render: function () {\n var group = new Group$3();\n var elementOptions = this.getElementOptions();\n if (this.options.track.visible) {\n group.append(this.renderTrack());\n }\n var pointer = this.pointerPath = new Path$4({\n stroke: elementOptions.stroke,\n fill: elementOptions.fill\n });\n group.append(pointer);\n this.elements = group;\n return group;\n },\n renderTrack: function () {\n var trackOptions = this.options.track;\n var border = trackOptions.border || {};\n var trackBox = this.trackBox.clone().pad(border.width || 0);\n return new Path$4.fromRect(trackBox.toRect(), {\n fill: {\n color: trackOptions.color,\n opacity: trackOptions.opacity\n },\n stroke: {\n color: border.width ? border.color || trackOptions.color : '',\n width: border.width,\n dashType: border.dashType\n }\n });\n }\n });\n var DEFAULT_MIN_WIDTH = 60;\n var DEFAULT_MIN_HEIGHT = 60;\n var Group$1 = DrawingGroup;\n var LinearGauge = Gauge.extend({\n reflow: function (bbox) {\n var pointers = this.pointers;\n var bboxX = bbox.origin.x;\n var bboxY = bbox.origin.y;\n var box = new Box(bboxX, bboxY, bboxX + bbox.width(), bboxY + bbox.height());\n this.scale.reflow(box);\n this._shrinkScaleWidth(box);\n for (var i = 0; i < pointers.length; i++) {\n pointers[i].reflow();\n }\n this.bbox = this._getBox(box);\n this._alignElements();\n this._shrinkElements();\n this._buildVisual();\n this._draw();\n },\n _buildVisual: function () {\n var visuals = new Group$1();\n var scaleElements = this.scale.render();\n var pointers = this.pointers;\n visuals.append(this.gaugeArea);\n visuals.append(scaleElements);\n for (var i = 0; i < pointers.length; i++) {\n var current = pointers[i];\n visuals.append(current.render());\n current.value(current.options.value);\n }\n this._visuals = visuals;\n },\n _createModel: function () {\n var this$1 = this;\n var options = this.options;\n var scale = this.scale = new LinearScale(options.scale, this.contextService);\n this.pointers = [];\n var pointers = options.pointer;\n pointers = isArray(pointers) ? pointers : [pointers];\n for (var i = 0; i < pointers.length; i++) {\n var currentOptions = deepExtend({}, pointers[i], { animation: { transitions: options.transitions } });\n var pointerType = currentOptions.shape === ARROW ? ArrowLinearPointer : BarLinearPointer;\n this$1.pointers.push(new pointerType(scale, currentOptions));\n }\n },\n _defaultSize: function () {\n var vertical = this.options.scale.vertical;\n return {\n width: vertical ? DEFAULT_MIN_WIDTH : DEFAULT_WIDTH,\n height: vertical ? DEFAULT_HEIGHT : DEFAULT_MIN_HEIGHT\n };\n },\n _getBox: function (box) {\n var ref = this;\n var scale = ref.scale;\n var pointers = ref.pointers;\n var boxCenter = box.center();\n var plotAreaBox = pointers[0].box.clone().wrap(scale.box);\n for (var i = 0; i < pointers.length; i++) {\n plotAreaBox.wrap(pointers[i].box.clone());\n }\n var size;\n if (scale.options.vertical) {\n size = plotAreaBox.width() / 2;\n plotAreaBox = new Box(boxCenter.x - size, box.y1, boxCenter.x + size, box.y2);\n } else {\n size = plotAreaBox.height() / 2;\n plotAreaBox = new Box(box.x1, boxCenter.y - size, box.x2, boxCenter.y + size);\n }\n return plotAreaBox;\n },\n _alignElements: function () {\n var this$1 = this;\n var ref = this;\n var scale = ref.scale;\n var pointers = ref.pointers;\n var scaleBox = scale.box;\n var box = pointers[0].box.clone().wrap(scale.box);\n var plotAreaBox = this.bbox;\n for (var i = 0; i < pointers.length; i++) {\n box.wrap(pointers[i].box.clone());\n }\n var diff;\n if (scale.options.vertical) {\n diff = plotAreaBox.center().x - box.center().x;\n scale.reflow(new Box(scaleBox.x1 + diff, plotAreaBox.y1, scaleBox.x2 + diff, plotAreaBox.y2));\n } else {\n diff = plotAreaBox.center().y - box.center().y;\n scale.reflow(new Box(scaleBox.x1, scaleBox.y1 + diff, scaleBox.x2, scaleBox.y2 + diff));\n }\n for (var i$1 = 0; i$1 < pointers.length; i$1++) {\n pointers[i$1].reflow(this$1.bbox);\n }\n },\n _shrinkScaleWidth: function (bbox) {\n var ref = this;\n var scale = ref.scale;\n if (!scale.options.vertical) {\n var overflow = scale.contentBox().width() - bbox.width();\n if (overflow > 0) {\n scale.box.shrink(overflow, 0);\n scale.box.alignTo(bbox, 'center');\n scale.reflow(scale.box);\n }\n }\n },\n _shrinkElements: function () {\n var this$1 = this;\n var ref = this;\n var scale = ref.scale;\n var pointers = ref.pointers;\n var scaleBox = scale.box.clone();\n var pos = scale.options.vertical ? 'y' : 'x';\n var pointerBox = pointers[0].box;\n for (var i = 0; i < pointers.length; i++) {\n pointerBox.wrap(pointers[i].box.clone());\n }\n scaleBox[pos + 1] += Math.max(scaleBox[pos + 1] - pointerBox[pos + 1], 0);\n scaleBox[pos + 2] -= Math.max(pointerBox[pos + 2] - scaleBox[pos + 2], 0);\n scale.reflow(scaleBox);\n for (var i$1 = 0; i$1 < pointers.length; i$1++) {\n pointers[i$1].reflow(this$1.bbox);\n }\n }\n });\n setDefaultOptions(LinearGauge, {\n transitions: true,\n gaugeArea: { background: '' },\n scale: { vertical: true }\n });\n var GEO_ARC_ADJUST_ANGLE = 180;\n var Arc = drawing.Arc;\n var Path$5 = DrawingPath;\n var Group$5 = DrawingGroup;\n function drawTicks(arc, tickAngles, unit, tickOptions) {\n var ticks = new Group$5();\n var center = arc.center;\n var radius = arc.getRadiusX();\n if (tickOptions.visible) {\n for (var i = 0; i < tickAngles.length; i++) {\n var tickStart = arc.pointAt(tickAngles[i]);\n var tickEnd = new GeometryPoint(center.x + radius - tickOptions.size, center.y).rotate(tickAngles[i], center);\n ticks.append(new Path$5({\n stroke: {\n color: tickOptions.color,\n width: tickOptions.width\n }\n }).moveTo(tickStart).lineTo(tickEnd));\n }\n }\n return ticks;\n }\n function rangeSegment(from, to, color, opacity) {\n return {\n from: from,\n to: to,\n color: color,\n opacity: opacity\n };\n }\n var RadialScale = NumericAxis.extend({\n init: function (options, service) {\n NumericAxis.fn.init.call(this, 0, 1, options, service);\n },\n initUserOptions: function (options) {\n var scaleOptions = deepExtend({}, this.options, options);\n scaleOptions.majorUnit = scaleOptions.majorUnit || dataviz.autoMajorUnit(scaleOptions.min, scaleOptions.max);\n scaleOptions.minorUnit = scaleOptions.minorUnit || scaleOptions.majorUnit / 10;\n return scaleOptions;\n },\n initFields: function () {\n },\n render: function (center, radius) {\n var arc = this.renderArc(center, radius);\n this.bbox = arc.bbox();\n this.labelElements = this.renderLabels();\n this.ticks = this.renderTicks();\n this.ranges = this.renderRanges();\n },\n reflow: function (bbox) {\n var center = bbox.center();\n var radius = Math.min(bbox.height(), bbox.width()) / 2;\n if (defined(this.bbox)) {\n this.bbox = this.arc.bbox();\n this.radius(this.arc.getRadiusX());\n this.repositionRanges();\n this.renderLabels();\n } else {\n return this.render(center, radius);\n }\n },\n slotAngle: function (value) {\n var ref = this.options;\n var min = ref.min;\n var max = ref.max;\n var reverse = ref.reverse;\n var startAngle = ref.startAngle;\n var endAngle = ref.endAngle;\n var angle = endAngle - startAngle;\n var result;\n if (reverse) {\n result = endAngle - (value - min) / (max - min) * angle;\n } else {\n result = (value - min) / (max - min) * angle + startAngle;\n }\n return result + GEO_ARC_ADJUST_ANGLE;\n },\n hasRanges: function () {\n var ranges = this.options.ranges;\n return ranges && ranges.length;\n },\n ticksSize: function () {\n var ref = this.options;\n var majorTicks = ref.majorTicks;\n var minorTicks = ref.minorTicks;\n var size = 0;\n if (majorTicks.visible) {\n size = majorTicks.size;\n }\n if (minorTicks.visible) {\n size = Math.max(minorTicks.size, size);\n }\n return size;\n },\n renderLabels: function () {\n var this$1 = this;\n var options = this.options;\n var arc = this.arc.clone();\n var radius = arc.getRadiusX();\n var tickAngles = this.tickAngles(arc, options.majorUnit);\n var rangeSize = options.rangeSize = options.rangeSize || radius * 0.1;\n var labelsGroup = new Group$5();\n var rangeDistance = radius * 0.05;\n if (defined(options.rangeDistance)) {\n rangeDistance = options.rangeDistance;\n } else {\n options.rangeDistance = rangeDistance;\n }\n var labelsOptions = options.labels;\n var isInside = labelsOptions.position === INSIDE;\n var hasLabelElements = defined(this.labelElements);\n if (isInside) {\n radius -= this.ticksSize();\n if (this.hasRanges() && !hasLabelElements) {\n radius -= rangeSize + rangeDistance;\n }\n arc.setRadiusX(radius).setRadiusY(radius);\n }\n var labels = this.labels;\n var count = labels.length;\n var padding = labelsOptions.padding;\n for (var i = 0; i < count; i++) {\n var label = labels[i];\n var halfWidth = label.box.width() / 2;\n var halfHeight = label.box.height() / 2;\n var angle = tickAngles[i];\n var labelAngle = (angle - GEO_ARC_ADJUST_ANGLE) * DEGREE;\n var lp = arc.pointAt(angle);\n var cx = lp.x + Math.cos(labelAngle) * (halfWidth + padding) * (isInside ? 1 : -1);\n var cy = lp.y + Math.sin(labelAngle) * (halfHeight + padding) * (isInside ? 1 : -1);\n label.reflow(new Box(cx - halfWidth, cy - halfHeight, cx + halfWidth, cy + halfHeight));\n var labelPos = new GeometryPoint(label.box.x1, label.box.y1);\n var labelElement = void 0;\n if (!hasLabelElements) {\n labelElement = buildLabelElement(label, options.labels);\n labelsGroup.append(labelElement);\n } else {\n labelElement = this$1.labelElements.children[i];\n var prevLabelPos = labelElement.bbox().origin;\n var labelTransform = labelElement.transform() || transform();\n labelTransform.translate(labelPos.x - prevLabelPos.x, labelPos.y - prevLabelPos.y);\n labelElement.transform(labelTransform);\n }\n this$1.bbox = Rect.union(this$1.bbox, labelElement.bbox());\n }\n return labelsGroup;\n },\n repositionRanges: function () {\n var ranges = this.ranges.children;\n if (ranges.length > 0) {\n var ref = this.options;\n var rangeDistance = ref.rangeDistance;\n var rangeSize = ref.rangeSize;\n var rangeRadius = this.getRangeRadius();\n if (this.options.labels.position === INSIDE) {\n rangeRadius += rangeSize + rangeDistance;\n }\n var newRadius = rangeRadius + rangeSize / 2;\n for (var i = 0; i < ranges.length; i++) {\n ranges[i]._geometry.setRadiusX(newRadius).setRadiusY(newRadius);\n }\n this.bbox = Rect.union(this.bbox, this.ranges.bbox());\n }\n },\n renderRanges: function () {\n var this$1 = this;\n var segments = this.rangeSegments();\n var segmentsCount = segments.length;\n var result = new Group$5();\n if (segmentsCount) {\n var ref = this.options;\n var rangeSize = ref.rangeSize;\n var reverse = ref.reverse;\n var rangeDistance = ref.rangeDistance;\n var rangeRadius = this.getRangeRadius();\n this.radius(this.radius() - rangeSize - rangeDistance);\n for (var i = 0; i < segmentsCount; i++) {\n var segment = segments[i];\n var from = this$1.slotAngle(segment[reverse ? 'to' : 'from']);\n var to = this$1.slotAngle(segment[!reverse ? 'to' : 'from']);\n if (to - from !== 0) {\n result.append(this$1.createRange(from, to, rangeRadius, segment));\n }\n }\n }\n return result;\n },\n createRange: function (startAngle, endAngle, rangeRadius, options) {\n var rangeSize = this.options.rangeSize;\n var rangeGeom = new geometry.Arc(this.arc.center, {\n radiusX: rangeRadius + rangeSize / 2,\n radiusY: rangeRadius + rangeSize / 2,\n startAngle: startAngle,\n endAngle: endAngle\n });\n return new Arc(rangeGeom, {\n stroke: {\n width: rangeSize,\n color: options.color,\n opacity: options.opacity,\n lineCap: options.lineCap\n }\n });\n },\n rangeSegments: function () {\n var options = this.options;\n var ranges = options.ranges || [];\n var count = ranges.length;\n var segments = [];\n if (count) {\n var min = options.min;\n var max = options.max;\n var defaultColor = options.rangePlaceholderColor;\n segments.push(rangeSegment(min, max, defaultColor));\n for (var i = 0; i < count; i++) {\n var range = getRange(ranges[i], min, max);\n var segmentsCount = segments.length;\n for (var j = 0; j < segmentsCount; j++) {\n var segment = segments[j];\n if (segment.from <= range.from && range.from <= segment.to) {\n segments.push(rangeSegment(range.from, range.to, range.color, range.opacity));\n if (segment.from <= range.to && range.to <= segment.to) {\n segments.push(rangeSegment(range.to, segment.to, defaultColor, range.opacity));\n }\n segment.to = range.from;\n break;\n }\n }\n }\n }\n return segments;\n },\n getRangeRadius: function () {\n var ref = this;\n var arc = ref.arc;\n var options = ref.options;\n var rangeSize = options.rangeSize;\n var rangeDistance = options.rangeDistance;\n var majorTickSize = options.majorTicks.size;\n var radius;\n if (options.labels.position === OUTSIDE) {\n radius = arc.getRadiusX() - majorTickSize - rangeDistance - rangeSize;\n } else {\n radius = arc.getRadiusX() - rangeSize;\n }\n return radius;\n },\n renderArc: function (center, radius) {\n var options = this.options;\n var arc = this.arc = new geometry.Arc(center, {\n radiusX: radius,\n radiusY: radius,\n startAngle: options.startAngle + GEO_ARC_ADJUST_ANGLE,\n endAngle: options.endAngle + GEO_ARC_ADJUST_ANGLE\n });\n return arc;\n },\n renderTicks: function () {\n var ref = this;\n var arc = ref.arc;\n var options = ref.options;\n var tickArc = arc.clone();\n this.majorTickAngles = this.tickAngles(arc, options.majorUnit);\n this.majorTicks = drawTicks(tickArc, this.majorTickAngles, options.majorUnit, options.majorTicks);\n var allTicks = new Group$5();\n allTicks.append(this.majorTicks);\n var majorTickSize = options.majorTicks.size;\n var minorTickSize = options.minorTicks.size;\n this._tickDifference = majorTickSize - minorTickSize;\n if (options.labels.position === OUTSIDE) {\n var radius = tickArc.getRadiusX();\n tickArc.setRadiusX(radius - majorTickSize + minorTickSize).setRadiusY(radius - majorTickSize + minorTickSize);\n }\n this.minorTickAngles = this.normalizeTickAngles(this.tickAngles(arc, options.minorUnit));\n this.minorTicks = drawTicks(tickArc, this.minorTickAngles, options.minorUnit, options.minorTicks);\n allTicks.append(this.minorTicks);\n return allTicks;\n },\n normalizeTickAngles: function (angles) {\n var options = this.options;\n var skip = options.majorUnit / options.minorUnit;\n for (var i = angles.length - 1; i >= 0; i--) {\n if (i % skip === 0) {\n angles.splice(i, 1);\n }\n }\n return angles;\n },\n tickAngles: function (ring, stepValue) {\n var options = this.options;\n var reverse = options.reverse;\n var range = options.max - options.min;\n var angle = ring.endAngle - ring.startAngle;\n var tickCount = range / stepValue;\n var pos = ring.startAngle;\n var step = angle / tickCount;\n if (reverse) {\n pos += angle;\n step = -step;\n }\n var positions = [];\n for (var i = 0; i < tickCount; i++) {\n positions.push(round(pos, COORD_PRECISION));\n pos += step;\n }\n if (round(pos) <= ring.endAngle) {\n positions.push(pos);\n }\n return positions;\n },\n radius: function (value) {\n if (value) {\n this.arc.setRadiusX(value).setRadiusY(value);\n this.repositionTicks(this.majorTicks.children, this.majorTickAngles);\n this.repositionTicks(this.minorTicks.children, this.minorTickAngles, true);\n } else {\n return this.arc.getRadiusX();\n }\n },\n repositionTicks: function (ticks, tickAngles, minor) {\n var diff = minor ? this._tickDifference || 0 : 0;\n var tickArc = this.arc;\n var radius = tickArc.getRadiusX();\n if (minor && this.options.labels.position === OUTSIDE && diff !== 0) {\n tickArc = this.arc.clone();\n tickArc.setRadiusX(radius - diff).setRadiusY(radius - diff);\n }\n for (var i = 0; i < ticks.length; i++) {\n var newPoint = tickArc.pointAt(tickAngles[i]);\n var segments = ticks[i].segments;\n var xDiff = newPoint.x - segments[0].anchor().x;\n var yDiff = newPoint.y - segments[0].anchor().y;\n ticks[i].transform(new transform().translate(xDiff, yDiff));\n }\n }\n });\n setDefaultOptions(RadialScale, {\n min: 0,\n max: 100,\n majorTicks: {\n size: 15,\n align: INSIDE,\n color: BLACK,\n width: DEFAULT_LINE_WIDTH,\n visible: true\n },\n minorTicks: {\n size: 10,\n align: INSIDE,\n color: BLACK,\n width: DEFAULT_LINE_WIDTH,\n visible: true\n },\n startAngle: -30,\n endAngle: 210,\n labels: {\n position: INSIDE,\n padding: 2\n }\n });\n var RadialPointerAnimation = Animation.extend({\n init: function (element, options) {\n Animation.fn.init.call(this, element, options);\n var animationOptions = this.options;\n animationOptions.duration = Math.max(Math.abs(animationOptions.newAngle - animationOptions.oldAngle) / animationOptions.duration * 1000, 1);\n },\n step: function (pos) {\n var options = this.options;\n var angle = interpolateValue(options.oldAngle, options.newAngle, pos);\n this.element.transform(transform().rotate(angle, options.center));\n }\n });\n setDefaultOptions(RadialPointerAnimation, {\n easing: LINEAR,\n duration: ANGULAR_SPEED\n });\n AnimationFactory.current.register(RADIAL_POINTER, RadialPointerAnimation);\n var CAP_SIZE = 0.05;\n var Circle = drawing.Circle;\n var Group$6 = DrawingGroup;\n var Path$6 = DrawingPath;\n var RadialPointer = Pointer.extend({\n setAngle: function (angle) {\n this.elements.transform(transform().rotate(angle, this.center));\n },\n repaint: function () {\n var ref = this;\n var scale = ref.scale;\n var options = ref.options;\n var oldAngle = scale.slotAngle(options._oldValue);\n var newAngle = scale.slotAngle(options.value);\n if (options.animation.transitions === false) {\n this.setAngle(newAngle);\n } else {\n new RadialPointerAnimation(this.elements, deepExtend(options.animation, {\n oldAngle: oldAngle,\n newAngle: newAngle\n })).play();\n }\n },\n render: function () {\n var ref = this;\n var scale = ref.scale;\n var options = ref.options;\n var elements = new Group$6();\n if (options.animation !== false) {\n deepExtend(options.animation, {\n startAngle: 0,\n center: scale.arc.center,\n reverse: scale.options.reverse\n });\n }\n elements.append(this._renderNeedle(), this._renderCap());\n this.elements = elements;\n this.setAngle(DEGREE);\n return elements;\n },\n reflow: function (arc) {\n var center = this.center = arc.center;\n var length = limitValue(this.options.length || 1, 0.1, 1.5);\n var radius = this.radius = arc.getRadiusX() * length;\n var capSize = this.capSize = Math.round(radius * this.options.cap.size);\n this.bbox = Rect.fromPoints(new GeometryPoint(center.x - capSize, center.y - capSize), new GeometryPoint(center.x + capSize, center.y + capSize));\n },\n _renderNeedle: function () {\n var minorTickSize = this.scale.options.minorTicks.size;\n var center = this.center;\n var needleColor = this.options.color;\n var needlePath = new Path$6({\n fill: { color: needleColor },\n stroke: {\n color: needleColor,\n width: DEFAULT_LINE_WIDTH\n }\n });\n needlePath.moveTo(center.x + this.radius - minorTickSize, center.y).lineTo(center.x, center.y - this.capSize / 2).lineTo(center.x, center.y + this.capSize / 2).close();\n return needlePath;\n },\n _renderCap: function () {\n var options = this.options;\n var capColor = options.cap.color || options.color;\n var circle = new geometry.Circle(this.center, this.capSize);\n var cap = new Circle(circle, {\n fill: { color: capColor },\n stroke: { color: capColor }\n });\n return cap;\n }\n });\n setDefaultOptions(RadialPointer, {\n cap: { size: CAP_SIZE },\n arrow: {\n width: 16,\n height: 14\n },\n animation: {\n type: RADIAL_POINTER,\n duration: ANGULAR_SPEED\n }\n });\n var Group$4 = DrawingGroup;\n var RadialGauge = Gauge.extend({\n reflow: function (bbox) {\n var this$1 = this;\n var pointers = this.pointers;\n this.scale.reflow(bbox);\n this._initialPlotArea = this.scale.bbox;\n for (var i = 0; i < pointers.length; i++) {\n pointers[i].reflow(this$1.scale.arc);\n this$1._initialPlotArea = Rect.union(this$1._initialPlotArea, pointers[i].bbox);\n }\n this.fitScale(bbox);\n this.alignScale(bbox);\n this._buildVisual(this.gaugeArea, pointers, this.scale);\n this._draw();\n },\n _buildVisual: function (gaugeArea, pointers, scale) {\n var visuals = this._visuals = new Group$4();\n visuals.append(gaugeArea);\n visuals.append(scale.ticks);\n visuals.append(scale.ranges);\n this._buildPointers(pointers);\n visuals.append(scale.labelElements);\n },\n _buildPointers: function (pointers) {\n var this$1 = this;\n for (var i = 0; i < pointers.length; i++) {\n var current = pointers[i];\n current.render();\n this$1._visuals.append(current.elements);\n current.value(current.options.value);\n }\n },\n fitScale: function (bbox) {\n var this$1 = this;\n var arc = this.scale.arc;\n var plotAreaBox = this._initialPlotArea;\n var step = Math.abs(this.getDiff(plotAreaBox, bbox));\n var min = round(step, COORD_PRECISION);\n var max = round(-step, COORD_PRECISION);\n var minDiff, midDiff, maxDiff, mid, oldDiff;\n var staleFlag = 0;\n var i = 0;\n while (i++ < 100) {\n staleFlag = oldDiff === maxDiff ? staleFlag + 1 : 0;\n if (staleFlag > 5) {\n break;\n }\n if (min !== mid) {\n minDiff = this$1.getPlotBox(min, bbox, arc);\n if (0 <= minDiff && minDiff <= 2) {\n break;\n }\n }\n if (max !== mid) {\n maxDiff = this$1.getPlotBox(max, bbox, arc);\n if (0 <= maxDiff && maxDiff <= 2) {\n break;\n }\n }\n if (minDiff > 0 && maxDiff > 0) {\n mid = min * 2;\n } else if (minDiff < 0 && maxDiff < 0) {\n mid = max * 2;\n } else {\n mid = round((min + max) / 2 || 1, COORD_PRECISION);\n }\n midDiff = this$1.getPlotBox(mid, bbox, arc);\n if (0 <= midDiff && midDiff <= 2) {\n break;\n }\n oldDiff = maxDiff;\n if (midDiff > 0) {\n max = mid;\n maxDiff = midDiff;\n } else {\n min = mid;\n minDiff = midDiff;\n }\n }\n },\n getPlotBox: function (step, bbox, arc) {\n var this$1 = this;\n var scale = this.scale;\n var pointers = this.pointers;\n var radius = arc.getRadiusX();\n var scaleArc = arc.clone();\n scaleArc.setRadiusX(radius + step).setRadiusY(radius + step);\n scale.arc = scaleArc;\n scale.reflow(bbox);\n this.plotBbox = scale.bbox;\n for (var i = 0; i < pointers.length; i++) {\n pointers[i].reflow(scaleArc);\n this$1.plotBbox = Rect.union(this$1.plotBbox, pointers[i].bbox);\n }\n return this.getDiff(this.plotBbox, bbox);\n },\n getDiff: function (plotBox, box) {\n return Math.min(box.width() - plotBox.width(), box.height() - plotBox.height());\n },\n alignScale: function (bbox) {\n var this$1 = this;\n var plotBoxCenter = this.plotBbox.center();\n var boxCenter = bbox.center();\n var paddingX = plotBoxCenter.x - boxCenter.x;\n var paddingY = plotBoxCenter.y - boxCenter.y;\n var ref = this;\n var scale = ref.scale;\n var pointers = ref.pointers;\n scale.arc.center.x -= paddingX;\n scale.arc.center.y -= paddingY;\n scale.reflow(bbox);\n for (var i = 0; i < pointers.length; i++) {\n pointers[i].reflow(scale.arc);\n this$1.plotBbox = Rect.union(scale.bbox, pointers[i].bbox);\n }\n },\n _createModel: function () {\n var this$1 = this;\n var options = this.options;\n var pointers = options.pointer;\n var scale = this.scale = new RadialScale(options.scale, this.contextService);\n this.pointers = [];\n var pointersArr = isArray(pointers) ? pointers : [pointers];\n for (var i = 0; i < pointersArr.length; i++) {\n var current = new RadialPointer(scale, deepExtend({}, pointersArr[i], { animation: { transitions: options.transitions } }));\n this$1.pointers.push(current);\n }\n }\n });\n setDefaultOptions(RadialGauge, {\n transitions: true,\n gaugeArea: { background: '' }\n });\n var ArcScale = RadialScale.extend({\n rangeSegments: function () {\n var ref = this.options;\n var min = ref.min;\n var max = ref.max;\n var rangePlaceholderColor = ref.rangePlaceholderColor;\n var rangeLineCap = ref.rangeLineCap;\n return [{\n from: min,\n to: max,\n color: rangePlaceholderColor,\n lineCap: rangeLineCap\n }];\n },\n hasRanges: function () {\n return true;\n },\n placeholderRangeAngle: function (angle) {\n var geometry$$1 = this.ranges.children[0].geometry();\n if (this.options.reverse) {\n geometry$$1.setEndAngle(angle);\n } else {\n geometry$$1.setStartAngle(angle);\n }\n },\n addRange: function (from, to, options) {\n var reverse = this.options.reverse;\n var startAngle = this.slotAngle(reverse ? to : from);\n var endAngle = this.slotAngle(reverse ? from : to);\n var range = this.createRange(startAngle, endAngle, this.getRangeRadius(), options);\n this.ranges.append(range);\n return range;\n }\n });\n setDefaultOptions(ArcScale, {\n min: 0,\n max: 100,\n majorTicks: { visible: false },\n minorTicks: { visible: false },\n labels: { visible: false },\n startAngle: 0,\n endAngle: 180,\n rangeLineCap: 'round'\n });\n var MAX_DURATION = 800;\n var RangePointerAnimation = Animation.extend({\n init: function (element, options) {\n Animation.fn.init.call(this, element, options);\n var animationOptions = this.options;\n var duration = Math.abs(animationOptions.newAngle - animationOptions.oldAngle) / animationOptions.duration * 1000;\n animationOptions.duration = limitValue(duration, ANGULAR_SPEED, MAX_DURATION);\n var startColor = element.elements.options.get('stroke.color');\n var color = element.currentColor();\n if (startColor !== color) {\n this.startColor = new kendo.Color(startColor);\n this.color = new kendo.Color(color);\n }\n },\n step: function (pos) {\n var ref = this;\n var options = ref.options;\n var startColor = ref.startColor;\n var color = ref.color;\n var angle = interpolateValue(options.oldAngle, options.newAngle, pos);\n this.element.angle(angle);\n if (color) {\n var r = round(interpolateValue(startColor.r, color.r, pos));\n var g = round(interpolateValue(startColor.g, color.g, pos));\n var b = round(interpolateValue(startColor.b, color.b, pos));\n this.element.stroke(new kendo.Color(r, g, b).toHex());\n }\n }\n });\n setDefaultOptions(RangePointerAnimation, {\n easing: LINEAR,\n duration: ANGULAR_SPEED\n });\n AnimationFactory.current.register(RADIAL_RANGE_POINTER, RangePointerAnimation);\n var RangePointer = Pointer.extend({\n repaint: function () {\n var ref = this;\n var scale = ref.scale;\n var options = ref.options;\n var oldAngle = scale.slotAngle(options._oldValue);\n var newAngle = scale.slotAngle(options.value);\n if (this.animation) {\n this.animation.abort();\n }\n if (options.animation.transitions === false) {\n this.angle(newAngle);\n this.stroke(this.currentColor());\n } else {\n this.animation = new RangePointerAnimation(this, deepExtend(options.animation, {\n oldAngle: oldAngle,\n newAngle: newAngle\n }));\n this.animation.play();\n }\n },\n angle: function (value) {\n var geometry$$1 = this.elements.geometry();\n if (this.scale.options.reverse) {\n geometry$$1.setStartAngle(value);\n } else {\n geometry$$1.setEndAngle(value);\n }\n this.scale.placeholderRangeAngle(value);\n },\n stroke: function (value) {\n this.elements.stroke(value);\n },\n render: function () {\n if (this.elements) {\n return;\n }\n var ref = this;\n var scale = ref.scale;\n var options = ref.options;\n if (options.animation !== false) {\n deepExtend(options.animation, {\n startAngle: 0,\n center: scale.arc.center,\n reverse: scale.options.reverse\n });\n }\n this.elements = scale.addRange(scale.options.min, this.options.value, {\n color: this.currentColor(),\n opacity: options.opacity,\n lineCap: scale.options.rangeLineCap\n });\n },\n currentColor: function () {\n var ref = this.scale.options;\n var min = ref.min;\n var max = ref.max;\n var ref$1 = this.options;\n var colors = ref$1.colors;\n var color = ref$1.color;\n var value = ref$1.value;\n var currentValue = dataviz.isNumber(value) ? value : min;\n if (colors) {\n for (var idx = 0; idx < colors.length; idx++) {\n var ref$2 = colors[idx];\n var rangeColor = ref$2.color;\n var from = ref$2.from;\n if (from === void 0) {\n from = min;\n }\n var to = ref$2.to;\n if (to === void 0) {\n to = max;\n }\n if (from <= currentValue && currentValue <= to) {\n return rangeColor;\n }\n }\n }\n return color;\n },\n reflow: function () {\n this.render();\n this.bbox = this.elements.bbox();\n }\n });\n setDefaultOptions(RangePointer, {\n animation: {\n type: RADIAL_RANGE_POINTER,\n duration: ANGULAR_SPEED\n }\n });\n var ArcGauge = RadialGauge.extend({\n _initTheme: function (theme) {\n RadialGauge.fn._initTheme.call(this, theme);\n this.options.color = this.options.color || (this.theme.pointer || {}).color;\n },\n _createModel: function () {\n var options = this.options;\n var scale = this.scale = new ArcScale(options.scale, this.contextService);\n var pointer = new RangePointer(scale, deepExtend({}, {\n colors: options.colors,\n color: options.color,\n value: options.value,\n opacity: options.opacity,\n animation: { transitions: options.transitions }\n }));\n this.pointers = [pointer];\n },\n _buildPointers: function (pointers) {\n for (var i = 0; i < pointers.length; i++) {\n var current = pointers[i];\n current.render();\n current.value(current.options.value);\n }\n },\n _setValueOptions: function (value) {\n this.options.value = value;\n },\n currentColor: function () {\n var pointer = this.pointers[0];\n if (pointer) {\n return pointer.currentColor();\n }\n },\n centerLabelPosition: function (width, height) {\n var size = this.getSize();\n var center = this.scale.arc.center;\n var left = center.x - width / 2;\n var top = center.y - height / 2;\n if (width < size.width) {\n var right = left + width;\n left = Math.max(left, 0);\n if (right > size.width) {\n left -= right - size.width;\n }\n }\n if (height < size.height) {\n var bbox = this.scale.bbox;\n var yLimit = bbox.bottomRight().y;\n var bottom = top + height;\n top = Math.max(top, bbox.origin.y);\n if (bottom > yLimit) {\n top -= bottom - yLimit;\n }\n }\n return {\n left: left,\n top: top\n };\n }\n });\n kendo.deepExtend(kendo.dataviz, {\n Gauge: Gauge,\n LinearGauge: LinearGauge,\n LinearPointer: LinearPointer,\n ArrowLinearPointer: ArrowLinearPointer,\n BarLinearPointer: BarLinearPointer,\n LinearScale: LinearScale,\n RadialGauge: RadialGauge,\n RadialPointer: RadialPointer,\n RadialScale: RadialScale,\n ArcGauge: ArcGauge,\n RangePointer: RangePointer,\n ArcScale: ArcScale\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/gauge/main', ['dataviz/gauge/kendo-gauges'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var Widget = kendo.ui.Widget;\n var dataviz = kendo.dataviz;\n var LinearGauge = dataviz.LinearGauge;\n var RadialGauge = dataviz.RadialGauge;\n var ArcGauge = dataviz.ArcGauge;\n var draw = kendo.drawing;\n var SASS_THEMES = [\n 'sass',\n 'default-v2',\n 'bootstrap-v4'\n ];\n function themeOptions(options) {\n var themes = dataviz.ui.themes || {};\n var themeName = options.theme || '';\n var lowerName = themeName.toLowerCase();\n if (SASS_THEMES.indexOf(lowerName) != -1) {\n return dataviz.autoTheme().gauge;\n }\n return (themes[themeName] || themes[lowerName] || {}).gauge;\n }\n var Gauge = Widget.extend({\n init: function (element, userOptions) {\n kendo.destroy(element);\n $(element).empty();\n Widget.fn.init.call(this, element);\n this.options = kendo.deepExtend(this.options, userOptions);\n this.wrapper = this.element;\n this._createInstance();\n this.element.addClass('k-gauge');\n kendo.notify(this, dataviz.ui);\n },\n options: {\n theme: 'default',\n renderAs: '',\n pointer: {},\n scale: {},\n gaugeArea: { background: '' },\n transitions: true\n },\n setOptions: function (options) {\n this._instance.setOptions(options, themeOptions(options));\n this._copyFields();\n },\n redraw: function () {\n this._instance.redraw();\n this._copyFields();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this._instance.destroy();\n },\n _createInstance: function () {\n var gaugeType = this._gaugeType();\n this._instance = new gaugeType(this.element[0], this.options, themeOptions(this.options));\n this._copyFields();\n },\n _copyFields: function () {\n this._originalOptions = this._instance._originalOptions;\n this.options = this._instance.options;\n this.surface = this._instance.surface;\n this.bbox = this._instance.bbox;\n this.gaugeArea = this._instance.gaugeArea;\n this.pointers = this._instance.pointers;\n this.scale = this._instance.scale;\n },\n _resize: function () {\n this._instance.resize();\n }\n });\n var proxyMembers = [\n 'getSize',\n 'value',\n 'allValues',\n 'exportVisual'\n ];\n function createProxyMember(name) {\n Gauge.fn[name] = function () {\n return this._instance[name].apply(this._instance, arguments);\n };\n }\n for (var idx = 0; idx < proxyMembers.length; idx++) {\n createProxyMember(proxyMembers[idx]);\n }\n dataviz.ExportMixin.extend(Gauge.fn);\n var RadialGaugeWidget = Gauge.extend({\n options: { name: 'RadialGauge' },\n _gaugeType: function () {\n return RadialGauge;\n }\n });\n var LinearGaugeWidget = Gauge.extend({\n options: {\n name: 'LinearGauge',\n scale: { vertical: true }\n },\n _gaugeType: function () {\n return LinearGauge;\n }\n });\n var ArcGaugeWidget = Gauge.extend({\n init: function (element, userOptions) {\n Gauge.fn.init.call(this, element, userOptions);\n this.element.css('position', 'relative');\n this.element.addClass('k-arcgauge');\n this._centerTemplate();\n },\n options: { name: 'ArcGauge' },\n setOptions: function (options) {\n Gauge.fn.setOptions.call(this, options);\n this._centerTemplate();\n },\n redraw: function () {\n Gauge.fn.redraw.call(this);\n this._centerTemplate();\n },\n value: function (value) {\n var instance = this._instance;\n if (arguments.length === 0) {\n return instance.value();\n }\n instance.value(value);\n this._centerTemplate();\n },\n destroy: function () {\n Gauge.fn.destroy.call(this);\n delete this._centerElement;\n },\n exportVisual: function () {\n if (this._centerElement) {\n return false;\n }\n return Gauge.fn.exportVisual.call(this);\n },\n _resize: function () {\n this._instance.resize();\n this._centerTemplate();\n },\n _centerTemplate: function () {\n if (this.options.centerTemplate) {\n var template = kendo.template(this.options.centerTemplate);\n var instance = this._instance;\n var centerElement = this._getCenterElement();\n centerElement.html(template({\n color: instance.currentColor(),\n value: instance.value()\n }));\n var position = instance.centerLabelPosition(centerElement.width(), centerElement.height());\n centerElement.css(position);\n } else if (this._centerElement) {\n this._centerElement.remove();\n this._centerElement = null;\n }\n },\n _getCenterElement: function () {\n var centerElement = this._centerElement;\n if (!centerElement) {\n centerElement = this._centerElement = $('
    ').addClass('k-arcgauge-label');\n this.element.append(centerElement);\n }\n return centerElement;\n },\n _gaugeType: function () {\n return ArcGauge;\n }\n });\n function createExportMethod(name) {\n ArcGaugeWidget.fn[name] = function (options) {\n var gauge = this;\n var method = draw[name];\n if (!gauge._centerElement) {\n return method(gauge.exportVisual(), options);\n }\n return draw.drawDOM(gauge.element).then(function (visual) {\n return method(visual, options);\n });\n };\n }\n var exportMethods = [\n 'exportSVG',\n 'exportImage',\n 'exportPDF'\n ];\n for (idx = 0; idx < exportMethods.length; idx++) {\n createExportMethod(exportMethods[idx]);\n }\n dataviz.ui.plugin(LinearGaugeWidget);\n dataviz.ui.plugin(RadialGaugeWidget);\n dataviz.ui.plugin(ArcGaugeWidget);\n kendo.deepExtend(dataviz, {\n Gauge: Gauge,\n LinearGauge: LinearGaugeWidget,\n RadialGauge: RadialGaugeWidget,\n ArcGauge: ArcGaugeWidget\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.gauge', [\n 'dataviz/gauge/main',\n 'kendo.dataviz.themes'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.gauge',\n name: 'Gauge',\n category: 'dataviz',\n description: 'Linear, Radial and Arc gauges.',\n depends: [\n 'dataviz.core',\n 'dataviz.themes'\n ]\n };\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.barcode', [\n 'kendo.dataviz.core',\n 'kendo.drawing'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.barcode',\n name: 'Barcode',\n category: 'dataviz',\n description: 'Barcode widget',\n depends: ['dataviz.core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, extend = $.extend, deepExtend = kendo.deepExtend, inArray = $.inArray, isPlainObject = $.isPlainObject, draw = kendo.drawing, geom = kendo.geometry, util = kendo.drawing.util, defined = util.defined, dataviz = kendo.dataviz, Box2D = dataviz.Box2D, TextBox = dataviz.TextBox, DEFAULT_WIDTH = 300, DEFAULT_HEIGHT = 100, DEFAULT_QUIETZONE_LENGTH = 10, numberRegex = /^\\d+$/, alphanumericRegex = /^[a-z0-9]+$/i, InvalidCharacterErrorTemplate = 'Character \\'{0}\\' is not valid for symbology {1}';\n function getNext(value, index, count) {\n return value.substring(index, index + count);\n }\n var Encoding = kendo.Class.extend({\n init: function (options) {\n this.setOptions(options);\n },\n setOptions: function (options) {\n var that = this;\n that.options = extend({}, that.options, options);\n that.quietZoneLength = that.options.addQuietZone ? 2 * that.options.quietZoneLength : 0;\n },\n encode: function (value, width, height) {\n var that = this;\n if (defined(value)) {\n value += '';\n }\n that.initValue(value, width, height);\n if (that.options.addQuietZone) {\n that.addQuietZone();\n }\n that.addData();\n if (that.options.addQuietZone) {\n that.addQuietZone();\n }\n return {\n baseUnit: that.baseUnit,\n pattern: that.pattern\n };\n },\n options: {\n quietZoneLength: DEFAULT_QUIETZONE_LENGTH,\n addQuietZone: true,\n addCheckSum: true\n },\n initValue: function () {\n },\n addQuietZone: function () {\n this.pattern.push(this.options.quietZoneLength || DEFAULT_QUIETZONE_LENGTH);\n },\n addData: function () {\n },\n invalidCharacterError: function (character) {\n throw new Error(kendo.format(InvalidCharacterErrorTemplate, character, this.name));\n }\n });\n var encodings = {};\n var code39Base = Encoding.extend({\n minBaseUnitLength: 0.7,\n addData: function () {\n var that = this, value = that.value;\n that.addStart();\n for (var idx = 0; idx < value.length; idx++) {\n that.addCharacter(value.charAt(idx));\n }\n if (that.options.addCheckSum) {\n that.pushCheckSum();\n }\n that.addStop();\n that.prepareValues();\n },\n addCharacter: function (character) {\n var that = this, charData = that.characterMap[character];\n if (!charData) {\n that.invalidCharacterError(character);\n }\n that.addBase(charData);\n },\n addBase: function () {\n }\n });\n var code39ExtendedBase = {\n addCharacter: function (character) {\n var that = this;\n if (that.characterMap[character]) {\n that.addBase(that.characterMap[character]);\n } else if (character.charCodeAt(0) > 127) {\n that.invalidCharacterError(character);\n } else {\n that.addExtended(character.charCodeAt(0));\n }\n },\n addExtended: function (code) {\n var that = this, patterns;\n for (var i = 0; i < that.extendedMappings.length; i++) {\n if (patterns = that.extendedMappings[i].call(that, code)) {\n for (var j = 0; j < patterns.length; j++) {\n that.addBase(patterns[j]);\n }\n that.dataLength += patterns.length - 1;\n return;\n }\n }\n },\n extendedMappings: [\n function (code) {\n if (97 <= code && code <= 122) {\n var that = this;\n return [\n that.characterMap[that.shiftCharacters[0]],\n that.characterMap[String.fromCharCode(code - 32)]\n ];\n }\n },\n function (code) {\n if (33 <= code && code <= 58) {\n var that = this;\n return [\n that.characterMap[that.shiftCharacters[1]],\n that.characterMap[String.fromCharCode(code + 32)]\n ];\n }\n },\n function (code) {\n if (1 <= code && code <= 26) {\n var that = this;\n return [\n that.characterMap[that.shiftCharacters[2]],\n that.characterMap[String.fromCharCode(code + 64)]\n ];\n }\n },\n function (code) {\n var that = this, result, dataCharacter;\n if (!that.specialAsciiCodes[code]) {\n dataCharacter = Math.floor(code / 32) * 6 + (code - 27) % 32 + 64;\n result = [\n that.characterMap[that.shiftCharacters[3]],\n that.characterMap[String.fromCharCode(dataCharacter)]\n ];\n } else {\n result = [];\n for (var i = 0; i < that.specialAsciiCodes[code].length; i++) {\n result.push(that.characterMap[that.shiftCharacters[3]]);\n result.push(that.characterMap[that.specialAsciiCodes[code][i]]);\n }\n }\n return result;\n }\n ],\n specialAsciiCodes: {\n '0': ['U'],\n '64': ['V'],\n '96': ['W'],\n '127': [\n 'T',\n 'X',\n 'Y',\n 'Z'\n ]\n },\n shiftValuesAsciiCodes: {\n '39': 36,\n '40': 47,\n '41': 43,\n '42': 37\n },\n characterMap: {\n '+': false,\n '/': false,\n '$': false,\n '%': false\n },\n shiftCharacters: [\n 'SHIFT0',\n 'SHIFT1',\n 'SHIFT2',\n 'SHIFT3'\n ]\n };\n encodings.code39 = code39Base.extend({\n name: 'Code 39',\n checkSumMod: 43,\n minRatio: 2.5,\n maxRatio: 3,\n gapWidth: 1,\n splitCharacter: '|',\n initValue: function (value, width, height) {\n var that = this;\n that.width = width;\n that.height = height;\n that.value = value;\n that.dataLength = value.length;\n that.pattern = [];\n that.patternString = '';\n },\n prepareValues: function () {\n var that = this, baseUnit, minBaseUnit = that.minBaseUnitLength, ratio = that.maxRatio, minRatio = that.minRatio, minHeight = Math.max(0.15 * that.width, 24);\n if (that.height < minHeight) {\n throw new Error('Insufficient Height. The minimum height for value: ' + that.value + ' is: ' + minHeight);\n }\n while ((baseUnit = that.getBaseUnit(ratio)) < minBaseUnit && ratio > minRatio) {\n ratio = parseFloat((ratio - 0.1).toFixed(1));\n }\n if (baseUnit < minBaseUnit) {\n var minWidth = Math.ceil(that.getBaseWidth(minRatio) * minBaseUnit);\n throw new Error('Insufficient width. The minimum width for value: ' + that.value + ' is: ' + minWidth);\n }\n that.ratio = ratio;\n that.baseUnit = baseUnit;\n that.patternString = that.patternString.substring(0, that.patternString.length - 1);\n that.pattern = that.pattern.concat(that.patternString.replace(/ratio/g, ratio).split(that.splitCharacter));\n },\n getBaseUnit: function (ratio) {\n return this.width / this.getBaseWidth(ratio);\n },\n getBaseWidth: function (ratio) {\n var that = this, characterLength = 3 * (ratio + 2);\n return that.quietZoneLength + characterLength * (that.dataLength + 2) + that.gapWidth * (that.dataLength + 1);\n },\n addStart: function () {\n var that = this;\n that.addPattern(that.characterMap.START.pattern);\n that.addCharacterGap();\n },\n addBase: function (character) {\n this.addPattern(character.pattern);\n this.addCharacterGap();\n },\n addStop: function () {\n this.addPattern(this.characterMap.START.pattern);\n },\n addPattern: function (pattern) {\n for (var i = 0; i < pattern.length; i++) {\n this.patternString += this.patternMappings[pattern.charAt(i)];\n }\n },\n addCharacterGap: function () {\n var that = this;\n that.patternString += that.gapWidth + that.splitCharacter;\n },\n patternMappings: {\n 'b': '1|',\n 'w': '1|',\n 'B': 'ratio|',\n 'W': 'ratio|'\n },\n characterMap: {\n '0': {\n 'pattern': 'bwbWBwBwb',\n 'value': 0\n },\n '1': {\n 'pattern': 'BwbWbwbwB',\n 'value': 1\n },\n '2': {\n 'pattern': 'bwBWbwbwB',\n 'value': 2\n },\n '3': {\n 'pattern': 'BwBWbwbwb',\n 'value': 3\n },\n '4': {\n 'pattern': 'bwbWBwbwB',\n 'value': 4\n },\n '5': {\n 'pattern': 'BwbWBwbwb',\n 'value': 5\n },\n '6': {\n 'pattern': 'bwBWBwbwb',\n 'value': 6\n },\n '7': {\n 'pattern': 'bwbWbwBwB',\n 'value': 7\n },\n '8': {\n 'pattern': 'BwbWbwBwb',\n 'value': 8\n },\n '9': {\n 'pattern': 'bwBWbwBwb',\n 'value': 9\n },\n 'A': {\n 'pattern': 'BwbwbWbwB',\n 'value': 10\n },\n 'B': {\n 'pattern': 'bwBwbWbwB',\n 'value': 11\n },\n 'C': {\n 'pattern': 'BwBwbWbwb',\n 'value': 12\n },\n 'D': {\n 'pattern': 'bwbwBWbwB',\n 'value': 13\n },\n 'E': {\n 'pattern': 'BwbwBWbwb',\n 'value': 14\n },\n 'F': {\n 'pattern': 'bwBwBWbwb',\n 'value': 15\n },\n 'G': {\n 'pattern': 'bwbwbWBwB',\n 'value': 16\n },\n 'H': {\n 'pattern': 'BwbwbWBwb',\n 'value': 17\n },\n 'I': {\n 'pattern': 'bwBwbWBwb',\n 'value': 18\n },\n 'J': {\n 'pattern': 'bwbwBWBwb',\n 'value': 19\n },\n 'K': {\n 'pattern': 'BwbwbwbWB',\n 'value': 20\n },\n 'L': {\n 'pattern': 'bwBwbwbWB',\n 'value': 21\n },\n 'M': {\n 'pattern': 'BwBwbwbWb',\n 'value': 22\n },\n 'N': {\n 'pattern': 'bwbwBwbWB',\n 'value': 23\n },\n 'O': {\n 'pattern': 'BwbwBwbWb',\n 'value': 24\n },\n 'P': {\n 'pattern': 'bwBwBwbWb',\n 'value': 25\n },\n 'Q': {\n 'pattern': 'bwbwbwBWB',\n 'value': 26\n },\n 'R': {\n 'pattern': 'BwbwbwBWb',\n 'value': 27\n },\n 'S': {\n 'pattern': 'bwBwbwBWb',\n 'value': 28\n },\n 'T': {\n 'pattern': 'bwbwBwBWb',\n 'value': 29\n },\n 'U': {\n 'pattern': 'BWbwbwbwB',\n 'value': 30\n },\n 'V': {\n 'pattern': 'bWBwbwbwB',\n 'value': 31\n },\n 'W': {\n 'pattern': 'BWBwbwbwb',\n 'value': 32\n },\n 'X': {\n 'pattern': 'bWbwBwbwB',\n 'value': 33\n },\n 'Y': {\n 'pattern': 'BWbwBwbwb',\n 'value': 34\n },\n 'Z': {\n 'pattern': 'bWBwBwbwb',\n 'value': 35\n },\n '-': {\n 'pattern': 'bWbwbwBwB',\n 'value': 36\n },\n '.': {\n 'pattern': 'BWbwbwBwb',\n 'value': 37\n },\n ' ': {\n 'pattern': 'bWBwbwBwb',\n 'value': 38\n },\n '$': {\n 'pattern': 'bWbWbWbwb',\n 'value': 39\n },\n '/': {\n 'pattern': 'bWbWbwbWb',\n 'value': 40\n },\n '+': {\n 'pattern': 'bWbwbWbWb',\n 'value': 41\n },\n '%': {\n 'pattern': 'bwbWbWbWb',\n 'value': 42\n },\n START: { pattern: 'bWbwBwBwb' }\n },\n options: { addCheckSum: false }\n });\n encodings.code39extended = encodings.code39.extend(deepExtend({}, code39ExtendedBase, {\n name: 'Code 39 extended',\n characterMap: {\n SHIFT0: {\n 'pattern': 'bWbwbWbWb',\n 'value': 41\n },\n SHIFT1: {\n 'pattern': 'bWbWbwbWb',\n 'value': 40\n },\n SHIFT2: {\n 'pattern': 'bWbWbWbwb',\n 'value': 39\n },\n SHIFT3: {\n 'pattern': 'bwbWbWbWb',\n 'value': 42\n }\n }\n }));\n encodings.code93 = code39Base.extend({\n name: 'Code 93',\n cCheckSumTotal: 20,\n kCheckSumTotal: 15,\n checkSumMod: 47,\n initValue: function (value, width, height) {\n var that = this;\n that.value = value;\n that.width = width;\n that.height = height;\n that.pattern = [];\n that.values = [];\n that.dataLength = value.length;\n },\n prepareValues: function () {\n var that = this, minHeight = Math.max(0.15 * that.width, 24);\n if (that.height < minHeight) {\n throw new Error('Insufficient Height');\n }\n that.setBaseUnit();\n if (that.baseUnit < that.minBaseUnitLength) {\n throw new Error('Insufficient Width');\n }\n },\n setBaseUnit: function () {\n var that = this, checkSumLength = 2;\n that.baseUnit = that.width / (9 * (that.dataLength + 2 + checkSumLength) + that.quietZoneLength + 1);\n },\n addStart: function () {\n var pattern = this.characterMap.START.pattern;\n this.addPattern(pattern);\n },\n addStop: function () {\n var that = this;\n that.addStart();\n that.pattern.push(that.characterMap.TERMINATION_BAR);\n },\n addBase: function (charData) {\n this.addPattern(charData.pattern);\n this.values.push(charData.value);\n },\n pushCheckSum: function () {\n var that = this, checkValues = that._getCheckValues(), charData;\n that.checksum = checkValues.join('');\n for (var i = 0; i < checkValues.length; i++) {\n charData = that.characterMap[that._findCharacterByValue(checkValues[i])];\n that.addPattern(charData.pattern);\n }\n },\n _getCheckValues: function () {\n var that = this, values = that.values, length = values.length, wightedSum = 0, cValue, kValue, idx;\n for (idx = length - 1; idx >= 0; idx--) {\n wightedSum += that.weightedValue(values[idx], length - idx, that.cCheckSumTotal);\n }\n cValue = wightedSum % that.checkSumMod;\n wightedSum = that.weightedValue(cValue, 1, that.kCheckSumTotal);\n for (idx = length - 1; idx >= 0; idx--) {\n wightedSum += that.weightedValue(values[idx], length - idx + 1, that.kCheckSumTotal);\n }\n kValue = wightedSum % that.checkSumMod;\n return [\n cValue,\n kValue\n ];\n },\n _findCharacterByValue: function (value) {\n for (var character in this.characterMap) {\n if (this.characterMap[character].value === value) {\n return character;\n }\n }\n },\n weightedValue: function (value, index, total) {\n return (index % total || total) * value;\n },\n addPattern: function (pattern) {\n var value;\n for (var i = 0; i < pattern.length; i++) {\n value = parseInt(pattern.charAt(i), 10);\n this.pattern.push(value);\n }\n },\n characterMap: {\n '0': {\n 'pattern': '131112',\n 'value': 0\n },\n '1': {\n 'pattern': '111213',\n 'value': 1\n },\n '2': {\n 'pattern': '111312',\n 'value': 2\n },\n '3': {\n 'pattern': '111411',\n 'value': 3\n },\n '4': {\n 'pattern': '121113',\n 'value': 4\n },\n '5': {\n 'pattern': '121212',\n 'value': 5\n },\n '6': {\n 'pattern': '121311',\n 'value': 6\n },\n '7': {\n 'pattern': '111114',\n 'value': 7\n },\n '8': {\n 'pattern': '131211',\n 'value': 8\n },\n '9': {\n 'pattern': '141111',\n 'value': 9\n },\n 'A': {\n 'pattern': '211113',\n 'value': 10\n },\n 'B': {\n 'pattern': '211212',\n 'value': 11\n },\n 'C': {\n 'pattern': '211311',\n 'value': 12\n },\n 'D': {\n 'pattern': '221112',\n 'value': 13\n },\n 'E': {\n 'pattern': '221211',\n 'value': 14\n },\n 'F': {\n 'pattern': '231111',\n 'value': 15\n },\n 'G': {\n 'pattern': '112113',\n 'value': 16\n },\n 'H': {\n 'pattern': '112212',\n 'value': 17\n },\n 'I': {\n 'pattern': '112311',\n 'value': 18\n },\n 'J': {\n 'pattern': '122112',\n 'value': 19\n },\n 'K': {\n 'pattern': '132111',\n 'value': 20\n },\n 'L': {\n 'pattern': '111123',\n 'value': 21\n },\n 'M': {\n 'pattern': '111222',\n 'value': 22\n },\n 'N': {\n 'pattern': '111321',\n 'value': 23\n },\n 'O': {\n 'pattern': '121122',\n 'value': 24\n },\n 'P': {\n 'pattern': '131121',\n 'value': 25\n },\n 'Q': {\n 'pattern': '212112',\n 'value': 26\n },\n 'R': {\n 'pattern': '212211',\n 'value': 27\n },\n 'S': {\n 'pattern': '211122',\n 'value': 28\n },\n 'T': {\n 'pattern': '211221',\n 'value': 29\n },\n 'U': {\n 'pattern': '221121',\n 'value': 30\n },\n 'V': {\n 'pattern': '222111',\n 'value': 31\n },\n 'W': {\n 'pattern': '112122',\n 'value': 32\n },\n 'X': {\n 'pattern': '112221',\n 'value': 33\n },\n 'Y': {\n 'pattern': '122121',\n 'value': 34\n },\n 'Z': {\n 'pattern': '123111',\n 'value': 35\n },\n '-': {\n 'pattern': '121131',\n 'value': 36\n },\n '.': {\n 'pattern': '311112',\n 'value': 37\n },\n ' ': {\n 'pattern': '311211',\n 'value': 38\n },\n '$': {\n 'pattern': '321111',\n 'value': 39\n },\n '/': {\n 'pattern': '112131',\n 'value': 40\n },\n '+': {\n 'pattern': '113121',\n 'value': 41\n },\n '%': {\n 'pattern': '211131',\n 'value': 42\n },\n SHIFT0: {\n 'pattern': '122211',\n 'value': 46\n },\n SHIFT1: {\n 'pattern': '311121',\n 'value': 45\n },\n SHIFT2: {\n 'pattern': '121221',\n 'value': 43\n },\n SHIFT3: {\n 'pattern': '312111',\n 'value': 44\n },\n START: { 'pattern': '111141' },\n TERMINATION_BAR: '1'\n }\n });\n encodings.code93extended = encodings.code93.extend(deepExtend({}, code39ExtendedBase, {\n name: 'Code 93 extended',\n pushCheckSum: function () {\n var that = this, checkValues = that._getCheckValues(), value;\n that.checksum = checkValues.join('');\n for (var i = 0; i < checkValues.length; i++) {\n value = checkValues[i];\n if (that.shiftValuesAsciiCodes[value]) {\n that.addExtended(that.shiftValuesAsciiCodes[value]);\n } else {\n that.addPattern(that.characterMap[that._findCharacterByValue(value)].pattern);\n }\n }\n }\n }));\n var state128 = kendo.Class.extend({\n init: function (encoding) {\n this.encoding = encoding;\n },\n addStart: function () {\n },\n is: function () {\n },\n move: function () {\n },\n pushState: function () {\n }\n });\n var state128AB = state128.extend({\n FNC4: 'FNC4',\n init: function (encoding, states) {\n var that = this;\n that.encoding = encoding;\n that.states = states;\n that._initMoves(states);\n },\n addStart: function () {\n this.encoding.addPattern(this.START);\n },\n is: function (value, index) {\n var code = value.charCodeAt(index);\n return this.isCode(code);\n },\n move: function (encodingState) {\n var that = this, idx = 0;\n while (!that._moves[idx].call(that, encodingState) && idx < that._moves.length) {\n idx++;\n }\n },\n pushState: function (encodingState) {\n var that = this, states = that.states, value = encodingState.value, maxLength = value.length, code;\n if (inArray('C', states) >= 0) {\n var numberMatch = value.substr(encodingState.index).match(/\\d{4,}/g);\n if (numberMatch) {\n maxLength = value.indexOf(numberMatch[0], encodingState.index);\n }\n }\n while ((code = encodingState.value.charCodeAt(encodingState.index)) >= 0 && that.isCode(code) && encodingState.index < maxLength) {\n that.encoding.addPattern(that.getValue(code));\n encodingState.index++;\n }\n },\n _initMoves: function (states) {\n var that = this;\n that._moves = [];\n if (inArray(that.FNC4, states) >= 0) {\n that._moves.push(that._moveFNC);\n }\n if (inArray(that.shiftKey, states) >= 0) {\n that._moves.push(that._shiftState);\n }\n that._moves.push(that._moveState);\n },\n _moveFNC: function (encodingState) {\n if (encodingState.fnc) {\n encodingState.fnc = false;\n return encodingState.previousState == this.key;\n }\n },\n _shiftState: function (encodingState) {\n var that = this;\n if (encodingState.previousState == that.shiftKey && (encodingState.index + 1 >= encodingState.value.length || that.encoding[that.shiftKey].is(encodingState.value, encodingState.index + 1))) {\n that.encoding.addPattern(that.SHIFT);\n encodingState.shifted = true;\n return true;\n }\n },\n _moveState: function () {\n this.encoding.addPattern(this.MOVE);\n return true;\n },\n SHIFT: 98\n });\n var states128 = {};\n states128.A = state128AB.extend({\n key: 'A',\n shiftKey: 'B',\n isCode: function (code) {\n return 0 <= code && code < 96;\n },\n getValue: function (code) {\n if (code < 32) {\n return code + 64;\n }\n return code - 32;\n },\n MOVE: 101,\n START: 103\n });\n states128.B = state128AB.extend({\n key: 'B',\n shiftKey: 'A',\n isCode: function (code) {\n return 32 <= code && code < 128;\n },\n getValue: function (code) {\n return code - 32;\n },\n MOVE: 100,\n START: 104\n });\n states128.C = state128.extend({\n key: 'C',\n addStart: function () {\n this.encoding.addPattern(this.START);\n },\n is: function (value, index) {\n var next4 = getNext(value, index, 4);\n return (index + 4 <= value.length || value.length == 2) && numberRegex.test(next4);\n },\n move: function () {\n this.encoding.addPattern(this.MOVE);\n },\n pushState: function (encodingState) {\n var code;\n while ((code = getNext(encodingState.value, encodingState.index, 2)) && numberRegex.test(code) && code.length == 2) {\n this.encoding.addPattern(parseInt(code, 10));\n encodingState.index += 2;\n }\n },\n getValue: function (code) {\n return code;\n },\n MOVE: 99,\n START: 105\n });\n states128.FNC4 = state128.extend({\n key: 'FNC4',\n dependentStates: [\n 'A',\n 'B'\n ],\n init: function (encoding, states) {\n this.encoding = encoding;\n this._initSubStates(states);\n },\n addStart: function (encodingState) {\n var code = encodingState.value.charCodeAt(0) - 128, subState = this._getSubState(code);\n this.encoding[subState].addStart();\n },\n is: function (value, index) {\n var code = value.charCodeAt(index);\n return this.isCode(code);\n },\n isCode: function (code) {\n return 128 <= code && code < 256;\n },\n pushState: function (encodingState) {\n var that = this, subState = that._initSubState(encodingState), encoding = that.encoding, length = subState.value.length;\n encodingState.index += length;\n if (length < 3) {\n var code;\n for (; subState.index < length; subState.index++) {\n code = subState.value.charCodeAt(subState.index);\n subState.state = that._getSubState(code);\n if (subState.previousState != subState.state) {\n subState.previousState = subState.state;\n encoding[subState.state].move(subState);\n }\n encoding.addPattern(encoding[subState.state].MOVE);\n encoding.addPattern(encoding[subState.state].getValue(code));\n }\n } else {\n if (subState.state != subState.previousState) {\n encoding[subState.state].move(subState);\n }\n that._pushStart(subState);\n encoding.pushData(subState, that.subStates);\n if (encodingState.index < encodingState.value.length) {\n that._pushStart(subState);\n }\n }\n encodingState.fnc = true;\n encodingState.state = subState.state;\n },\n _pushStart: function (subState) {\n var that = this;\n that.encoding.addPattern(that.encoding[subState.state].MOVE);\n that.encoding.addPattern(that.encoding[subState.state].MOVE);\n },\n _initSubState: function (encodingState) {\n var that = this, subState = {\n value: that._getAll(encodingState.value, encodingState.index),\n index: 0\n };\n subState.state = that._getSubState(subState.value.charCodeAt(0));\n subState.previousState = encodingState.previousState == that.key ? subState.state : encodingState.previousState;\n return subState;\n },\n _initSubStates: function (states) {\n var that = this;\n that.subStates = [];\n for (var i = 0; i < states.length; i++) {\n if (inArray(states[i], that.dependentStates) >= 0) {\n that.subStates.push(states[i]);\n }\n }\n },\n _getSubState: function (code) {\n var that = this;\n for (var i = 0; i < that.subStates.length; i++) {\n if (that.encoding[that.subStates[i]].isCode(code)) {\n return that.subStates[i];\n }\n }\n },\n _getAll: function (value, index) {\n var code, result = '';\n while ((code = value.charCodeAt(index++)) && this.isCode(code)) {\n result += String.fromCharCode(code - 128);\n }\n return result;\n }\n });\n states128.FNC1 = state128.extend({\n key: 'FNC1',\n startState: 'C',\n dependentStates: [\n 'C',\n 'B'\n ],\n startAI: '(',\n endAI: ')',\n init: function (encoding, states) {\n this.encoding = encoding;\n this.states = states;\n },\n addStart: function () {\n this.encoding[this.startState].addStart();\n },\n is: function () {\n return inArray(this.key, this.states) >= 0;\n },\n pushState: function (encodingState) {\n var that = this, encoding = that.encoding, value = encodingState.value.replace(/\\s/g, ''), regexSeparators = new RegExp('[' + that.startAI + that.endAI + ']', 'g'), index = encodingState.index, subState = { state: that.startState }, current, nextStart, separatorLength;\n encoding.addPattern(that.START);\n while (true) {\n subState.index = 0;\n separatorLength = value.charAt(index) === that.startAI ? 2 : 0;\n current = separatorLength > 0 ? that.getBySeparator(value, index) : that.getByLength(value, index);\n if (current.ai.length) {\n nextStart = index + separatorLength + current.id.length + current.ai.length;\n } else {\n nextStart = value.indexOf(that.startAI, index + 1);\n if (nextStart < 0) {\n if (index + current.ai.max + current.id.length + separatorLength < value.length) {\n throw new Error('Separators are required after variable length identifiers');\n }\n nextStart = value.length;\n }\n }\n subState.value = value.substring(index, nextStart).replace(regexSeparators, '');\n that.validate(current, subState.value);\n encoding.pushData(subState, that.dependentStates);\n if (nextStart >= value.length) {\n break;\n }\n index = nextStart;\n if (subState.state != that.startState) {\n encoding[that.startState].move(subState);\n subState.state = that.startState;\n }\n if (!current.ai.length) {\n encoding.addPattern(that.START);\n }\n }\n encodingState.index = encodingState.value.length;\n },\n validate: function (current, value) {\n var code = value.substr(current.id.length), ai = current.ai;\n if (!ai.type && !numberRegex.test(code)) {\n throw new Error('Application identifier ' + current.id + ' is numeric only but contains non numeric character(s).');\n }\n if (ai.type == 'alphanumeric' && !alphanumericRegex.test(code)) {\n throw new Error('Application identifier ' + current.id + ' is alphanumeric only but contains non alphanumeric character(s).');\n }\n if (ai.length && ai.length !== code.length) {\n throw new Error('Application identifier ' + current.id + ' must be ' + ai.length + ' characters long.');\n }\n if (ai.min && ai.min > code.length) {\n throw new Error('Application identifier ' + current.id + ' must be at least ' + ai.min + ' characters long.');\n }\n if (ai.max && ai.max < code.length) {\n throw new Error('Application identifier ' + current.id + ' must be at most ' + ai.max + ' characters long.');\n }\n },\n getByLength: function (value, index) {\n var that = this, id, ai;\n for (var i = 2; i <= 4; i++) {\n id = getNext(value, index, i);\n ai = that.getAI(id) || that.getAI(id.substring(0, id.length - 1));\n if (ai) {\n return {\n id: id,\n ai: ai\n };\n }\n }\n that.unsupportedAIError(id);\n },\n unsupportedAIError: function (id) {\n throw new Error(kendo.format('\\'{0}\\' is not a supported Application Identifier'), id);\n },\n getBySeparator: function (value, index) {\n var that = this, start = value.indexOf(that.startAI, index), end = value.indexOf(that.endAI, start), id = value.substring(start + 1, end), ai = that.getAI(id) || that.getAI(id.substr(id.length - 1));\n if (!ai) {\n that.unsupportedAIError(id);\n }\n return {\n ai: ai,\n id: id\n };\n },\n getAI: function (id) {\n var ai = this.applicationIdentifiers, multiKey = ai.multiKey;\n if (ai[id]) {\n return ai[id];\n }\n for (var i = 0; i < multiKey.length; i++) {\n if (multiKey[i].ids && inArray(id, multiKey[i].ids) >= 0) {\n return multiKey[i].type;\n } else if (multiKey[i].ranges) {\n var ranges = multiKey[i].ranges;\n for (var j = 0; j < ranges.length; j++) {\n if (ranges[j][0] <= id && id <= ranges[j][1]) {\n return multiKey[i].type;\n }\n }\n }\n }\n },\n applicationIdentifiers: {\n '22': {\n max: 29,\n type: 'alphanumeric'\n },\n '402': { length: 17 },\n '7004': {\n max: 4,\n type: 'alphanumeric'\n },\n '242': {\n max: 6,\n type: 'alphanumeric'\n },\n '8020': {\n max: 25,\n type: 'alphanumeric'\n },\n '703': {\n min: 3,\n max: 30,\n type: 'alphanumeric'\n },\n '8008': {\n min: 8,\n max: 12,\n type: 'alphanumeric'\n },\n '253': {\n min: 13,\n max: 17,\n type: 'alphanumeric'\n },\n '8003': {\n min: 14,\n max: 30,\n type: 'alphanumeric'\n },\n multiKey: [\n {\n ids: [\n '15',\n '17',\n '8005',\n '8100'\n ],\n ranges: [\n [\n 11,\n 13\n ],\n [\n 310,\n 316\n ],\n [\n 320,\n 336\n ],\n [\n 340,\n 369\n ]\n ],\n type: { length: 6 }\n },\n {\n ids: [\n '240',\n '241',\n '250',\n '251',\n '400',\n '401',\n '403',\n '7002',\n '8004',\n '8007',\n '8110'\n ],\n ranges: [[90 - 99]],\n type: {\n max: 30,\n type: 'alphanumeric'\n }\n },\n {\n ids: ['7001'],\n ranges: [[\n 410,\n 414\n ]],\n type: { length: 13 }\n },\n {\n ids: [\n '10',\n '21',\n '254',\n '420',\n '8002'\n ],\n type: {\n max: 20,\n type: 'alphanumeric'\n }\n },\n {\n ids: [\n '00',\n '8006',\n '8017',\n '8018'\n ],\n type: { length: 18 }\n },\n {\n ids: [\n '01',\n '02',\n '8001'\n ],\n type: { length: 14 }\n },\n {\n ids: ['422'],\n ranges: [[\n 424,\n 426\n ]],\n type: { length: 3 }\n },\n {\n ids: [\n '20',\n '8102'\n ],\n type: { length: 2 }\n },\n {\n ids: [\n '30',\n '37'\n ],\n type: {\n max: 8,\n type: 'alphanumeric'\n }\n },\n {\n ids: [\n '390',\n '392'\n ],\n type: {\n max: 15,\n type: 'alphanumeric'\n }\n },\n {\n ids: [\n '421',\n '423'\n ],\n type: {\n min: 3,\n max: 15,\n type: 'alphanumeric'\n }\n },\n {\n ids: [\n '391',\n '393'\n ],\n type: {\n min: 3,\n max: 18,\n type: 'alphanumeric'\n }\n },\n {\n ids: [\n '7003',\n '8101'\n ],\n type: { length: 10 }\n }\n ]\n },\n START: 102\n });\n var code128Base = Encoding.extend({\n init: function (options) {\n Encoding.fn.init.call(this, options);\n this._initStates();\n },\n _initStates: function () {\n var that = this;\n for (var i = 0; i < that.states.length; i++) {\n that[that.states[i]] = new states128[that.states[i]](that, that.states);\n }\n },\n initValue: function (value, width, height) {\n var that = this;\n that.pattern = [];\n that.value = value;\n that.width = width;\n that.height = height;\n that.checkSum = 0;\n that.totalUnits = 0;\n that.index = 0;\n that.position = 1;\n },\n addData: function () {\n var that = this, encodingState = {\n value: that.value,\n index: 0,\n state: ''\n };\n if (that.value.length === 0) {\n return;\n }\n encodingState.state = encodingState.previousState = that.getNextState(encodingState, that.states);\n that.addStart(encodingState);\n that.pushData(encodingState, that.states);\n that.addCheckSum();\n that.addStop();\n that.setBaseUnit();\n },\n pushData: function (encodingState, states) {\n var that = this;\n while (true) {\n that[encodingState.state].pushState(encodingState);\n if (encodingState.index >= encodingState.value.length) {\n break;\n }\n if (!encodingState.shifted) {\n encodingState.previousState = encodingState.state;\n encodingState.state = that.getNextState(encodingState, states);\n that[encodingState.state].move(encodingState);\n } else {\n var temp = encodingState.state;\n encodingState.state = encodingState.previousState;\n encodingState.previousState = temp;\n encodingState.shifted = false;\n }\n }\n },\n addStart: function (encodingState) {\n this[encodingState.state].addStart(encodingState);\n this.position = 1;\n },\n addCheckSum: function () {\n var that = this;\n that.checksum = that.checkSum % 103;\n that.addPattern(that.checksum);\n },\n addStop: function () {\n this.addPattern(this.STOP);\n },\n setBaseUnit: function () {\n var that = this;\n that.baseUnit = that.width / (that.totalUnits + that.quietZoneLength);\n },\n addPattern: function (code) {\n var that = this, pattern = that.characterMap[code].toString(), value;\n for (var i = 0; i < pattern.length; i++) {\n value = parseInt(pattern.charAt(i), 10);\n that.pattern.push(value);\n that.totalUnits += value;\n }\n that.checkSum += code * that.position++;\n },\n getNextState: function (encodingState, states) {\n for (var i = 0; i < states.length; i++) {\n if (this[states[i]].is(encodingState.value, encodingState.index)) {\n return states[i];\n }\n }\n this.invalidCharacterError(encodingState.value.charAt(encodingState.index));\n },\n characterMap: [\n 212222,\n 222122,\n 222221,\n 121223,\n 121322,\n 131222,\n 122213,\n 122312,\n 132212,\n 221213,\n 221312,\n 231212,\n 112232,\n 122132,\n 122231,\n 113222,\n 123122,\n 123221,\n 223211,\n 221132,\n 221231,\n 213212,\n 223112,\n 312131,\n 311222,\n 321122,\n 321221,\n 312212,\n 322112,\n 322211,\n 212123,\n 212321,\n 232121,\n 111323,\n 131123,\n 131321,\n 112313,\n 132113,\n 132311,\n 211313,\n 231113,\n 231311,\n 112133,\n 112331,\n 132131,\n 113123,\n 113321,\n 133121,\n 313121,\n 211331,\n 231131,\n 213113,\n 213311,\n 213131,\n 311123,\n 311321,\n 331121,\n 312113,\n 312311,\n 332111,\n 314111,\n 221411,\n 431111,\n 111224,\n 111422,\n 121124,\n 121421,\n 141122,\n 141221,\n 112214,\n 112412,\n 122114,\n 122411,\n 142112,\n 142211,\n 241211,\n 221114,\n 413111,\n 241112,\n 134111,\n 111242,\n 121142,\n 121241,\n 114212,\n 124112,\n 124211,\n 411212,\n 421112,\n 421211,\n 212141,\n 214121,\n 412121,\n 111143,\n 111341,\n 131141,\n 114113,\n 114311,\n 411113,\n 411311,\n 113141,\n 114131,\n 311141,\n 411131,\n 211412,\n 211214,\n 211232,\n 2331112\n ],\n STOP: 106\n });\n encodings.code128a = code128Base.extend({\n name: 'Code 128 A',\n states: ['A']\n });\n encodings.code128b = code128Base.extend({\n name: 'Code 128 B',\n states: ['B']\n });\n encodings.code128c = code128Base.extend({\n name: 'Code 128 C',\n states: ['C']\n });\n encodings.code128 = code128Base.extend({\n name: 'Code 128',\n states: [\n 'C',\n 'B',\n 'A',\n 'FNC4'\n ]\n });\n encodings['gs1-128'] = code128Base.extend({\n name: 'Code GS1-128',\n states: [\n 'FNC1',\n 'C',\n 'B'\n ]\n });\n var msiBase = Encoding.extend({\n initValue: function (value, width) {\n var that = this;\n that.pattern = [];\n that.value = value;\n that.checkSumLength = 0;\n that.width = width;\n },\n setBaseUnit: function () {\n var that = this, startStopLength = 7;\n that.baseUnit = that.width / (12 * (that.value.length + that.checkSumLength) + that.quietZoneLength + startStopLength);\n },\n addData: function () {\n var that = this, value = that.value;\n that.addPattern(that.START);\n for (var i = 0; i < value.length; i++) {\n that.addCharacter(value.charAt(i));\n }\n if (that.options.addCheckSum) {\n that.addCheckSum();\n }\n that.addPattern(that.STOP);\n that.setBaseUnit();\n },\n addCharacter: function (character) {\n var that = this, pattern = that.characterMap[character];\n if (!pattern) {\n that.invalidCharacterError(character);\n }\n that.addPattern(pattern);\n },\n addPattern: function (pattern) {\n for (var i = 0; i < pattern.length; i++) {\n this.pattern.push(parseInt(pattern.charAt(i), 10));\n }\n },\n addCheckSum: function () {\n var that = this, checkSumFunction = that.checkSums[that.checkSumType], checkValues;\n checkValues = checkSumFunction.call(that.checkSums, that.value);\n that.checksum = checkValues.join('');\n for (var i = 0; i < checkValues.length; i++) {\n that.checkSumLength++;\n that.addPattern(that.characterMap[checkValues[i]]);\n }\n },\n checkSums: {\n Modulo10: function (value) {\n var checkValues = [\n 0,\n ''\n ], odd = value.length % 2, idx, evenSum, oddSum;\n for (idx = 0; idx < value.length; idx++) {\n checkValues[(idx + odd) % 2] += parseInt(value.charAt(idx), 10);\n }\n oddSum = checkValues[0];\n evenSum = (checkValues[1] * 2).toString();\n for (idx = 0; idx < evenSum.length; idx++) {\n oddSum += parseInt(evenSum.charAt(idx), 10);\n }\n return [(10 - oddSum % 10) % 10];\n },\n Modulo11: function (value) {\n var weightedSum = 0, mod = 11, length = value.length, weight, checkValue;\n for (var i = 0; i < length; i++) {\n weight = ((length - i) % 6 || 6) + 1;\n weightedSum += weight * value.charAt(i);\n }\n checkValue = (mod - weightedSum % mod) % mod;\n if (checkValue != 10) {\n return [checkValue];\n }\n return [\n 1,\n 0\n ];\n },\n Modulo11Modulo10: function (value) {\n var checkValues = this.Modulo11(value), mod11Value;\n mod11Value = value + checkValues[0];\n return checkValues.concat(this.Modulo10(mod11Value));\n },\n Modulo10Modulo10: function (value) {\n var checkValues = this.Modulo10(value), mod10Value;\n mod10Value = value + checkValues[0];\n return checkValues.concat(this.Modulo10(mod10Value));\n }\n },\n characterMap: [\n '12121212',\n '12121221',\n '12122112',\n '12122121',\n '12211212',\n '12211221',\n '12212112',\n '12212121',\n '21121212',\n '21121221'\n ],\n START: '21',\n STOP: '121',\n checkSumType: ''\n });\n encodings.msimod10 = msiBase.extend({\n name: 'MSI Modulo10',\n checkSumType: 'Modulo10'\n });\n encodings.msimod11 = msiBase.extend({\n name: 'MSI Modulo11',\n checkSumType: 'Modulo11'\n });\n encodings.msimod1110 = msiBase.extend({\n name: 'MSI Modulo11 Modulo10',\n checkSumType: 'Modulo11Modulo10'\n });\n encodings.msimod1010 = msiBase.extend({\n name: 'MSI Modulo10 Modulo10',\n checkSumType: 'Modulo10Modulo10'\n });\n encodings.code11 = Encoding.extend({\n name: 'Code 11',\n cCheckSumTotal: 10,\n kCheckSumTotal: 9,\n kCheckSumMinLength: 10,\n checkSumMod: 11,\n DASH_VALUE: 10,\n DASH: '-',\n START: '112211',\n STOP: '11221',\n initValue: function (value, width) {\n var that = this;\n that.pattern = [];\n that.value = value;\n that.width = width;\n that.totalUnits = 0;\n },\n addData: function () {\n var that = this;\n var value = that.value;\n that.addPattern(that.START);\n for (var i = 0; i < value.length; i++) {\n that.addCharacter(value.charAt(i));\n }\n if (that.options.addCheckSum) {\n that.addCheckSum();\n }\n that.addPattern(that.STOP);\n that.setBaseUnit();\n },\n setBaseUnit: function () {\n var that = this;\n that.baseUnit = that.width / (that.totalUnits + that.quietZoneLength);\n },\n addCheckSum: function () {\n var that = this, value = that.value, length = value.length, cValue;\n cValue = that.getWeightedSum(value, length, that.cCheckSumTotal) % that.checkSumMod;\n that.checksum = cValue + '';\n that.addPattern(that.characterMap[cValue]);\n length++;\n if (length >= that.kCheckSumMinLength) {\n var kValue = (cValue + that.getWeightedSum(value, length, that.kCheckSumTotal)) % that.checkSumMod;\n that.checksum += kValue;\n that.addPattern(that.characterMap[kValue]);\n }\n },\n getWeightedSum: function (value, length, total) {\n var weightedSum = 0;\n for (var i = 0; i < value.length; i++) {\n weightedSum += this.weightedValue(this.getValue(value.charAt(i)), length, i, total);\n }\n return weightedSum;\n },\n weightedValue: function (value, length, index, total) {\n var weight = (length - index) % total || total;\n return weight * value;\n },\n getValue: function (character) {\n var that = this;\n if (!isNaN(character)) {\n return parseInt(character, 10);\n } else if (character !== that.DASH) {\n that.invalidCharacterError(character);\n }\n return that.DASH_VALUE;\n },\n addCharacter: function (character) {\n var that = this, value = that.getValue(character), pattern = that.characterMap[value];\n that.addPattern(pattern);\n },\n addPattern: function (pattern) {\n var value;\n for (var i = 0; i < pattern.length; i++) {\n value = parseInt(pattern.charAt(i), 10);\n this.pattern.push(value);\n this.totalUnits += value;\n }\n },\n characterMap: [\n '111121',\n '211121',\n '121121',\n '221111',\n '112121',\n '212111',\n '122111',\n '111221',\n '211211',\n '211111',\n '112111'\n ],\n options: { addCheckSum: true }\n });\n encodings.postnet = Encoding.extend({\n name: 'Postnet',\n START: '2',\n VALID_CODE_LENGTHS: [\n 5,\n 9,\n 11\n ],\n DIGIT_SEPARATOR: '-',\n initValue: function (value, width, height) {\n var that = this;\n that.height = height;\n that.width = width;\n that.baseHeight = height / 2;\n that.value = value.replace(new RegExp(that.DIGIT_SEPARATOR, 'g'), '');\n that.pattern = [];\n that.validate(that.value);\n that.checkSum = 0;\n that.setBaseUnit();\n },\n addData: function () {\n var that = this, value = that.value;\n that.addPattern(that.START);\n for (var i = 0; i < value.length; i++) {\n that.addCharacter(value.charAt(i));\n }\n if (that.options.addCheckSum) {\n that.addCheckSum();\n }\n that.addPattern(that.START);\n that.pattern.pop();\n },\n addCharacter: function (character) {\n var that = this, pattern = that.characterMap[character];\n that.checkSum += parseInt(character, 10);\n that.addPattern(pattern);\n },\n addCheckSum: function () {\n var that = this;\n that.checksum = (10 - that.checkSum % 10) % 10;\n that.addCharacter(that.checksum);\n },\n setBaseUnit: function () {\n var that = this, startStopLength = 3;\n that.baseUnit = that.width / ((that.value.length + 1) * 10 + startStopLength + that.quietZoneLength);\n },\n validate: function (value) {\n var that = this;\n if (!numberRegex.test(value)) {\n that.invalidCharacterError(value.match(/[^0-9]/)[0]);\n }\n if (inArray(value.length, that.VALID_CODE_LENGTHS) < 0) {\n throw new Error('Invalid value length. Valid lengths for the Postnet symbology are ' + that.VALID_CODE_LENGTHS.join(','));\n }\n },\n addPattern: function (pattern) {\n var that = this, y1;\n for (var i = 0; i < pattern.length; i++) {\n y1 = that.height - that.baseHeight * pattern.charAt(i);\n that.pattern.push({\n width: 1,\n y1: y1,\n y2: that.height\n });\n that.pattern.push(1);\n }\n },\n characterMap: [\n '22111',\n '11122',\n '11212',\n '11221',\n '12112',\n '12121',\n '12211',\n '21112',\n '21121',\n '21211'\n ]\n });\n encodings.ean13 = Encoding.extend({\n initValue: function (value, width, height) {\n value += '';\n if (value.length != 12 || /\\D/.test(value)) {\n throw new Error('The value of the \"EAN13\" encoding should be 12 symbols');\n }\n var that = this;\n that.pattern = [];\n that.options.height = height;\n that.baseUnit = width / (95 + that.quietZoneLength);\n that.value = value;\n that.checksum = that.calculateChecksum();\n that.leftKey = value[0];\n that.leftPart = value.substr(1, 6);\n that.rightPart = value.substr(7) + that.checksum;\n },\n addData: function () {\n var that = this;\n that.addPieces(that.characterMap.start);\n that.addSide(that.leftPart, that.leftKey);\n that.addPieces(that.characterMap.middle);\n that.addSide(that.rightPart);\n that.addPieces(that.characterMap.start);\n },\n addSide: function (leftPart, key) {\n var that = this;\n for (var i = 0; i < leftPart.length; i++) {\n if (key && parseInt(that.keyTable[key].charAt(i), 10)) {\n that.addPieces(Array.prototype.slice.call(that.characterMap.digits[leftPart.charAt(i)]).reverse(), true);\n } else {\n that.addPieces(that.characterMap.digits[leftPart.charAt(i)], true);\n }\n }\n },\n addPieces: function (arrToAdd, limitedHeight) {\n var that = this;\n for (var i = 0; i < arrToAdd.length; i++) {\n if (limitedHeight) {\n that.pattern.push({\n y1: 0,\n y2: that.options.height * 0.95,\n width: arrToAdd[i]\n });\n } else {\n that.pattern.push(arrToAdd[i]);\n }\n }\n },\n calculateChecksum: function () {\n var odd = 0, even = 0, value = this.value.split('').reverse().join('');\n for (var i = 0; i < value.length; i++) {\n if (i % 2) {\n even += parseInt(value.charAt(i), 10);\n } else {\n odd += parseInt(value.charAt(i), 10);\n }\n }\n var checksum = (10 - (3 * odd + even) % 10) % 10;\n return checksum;\n },\n keyTable: [\n '000000',\n '001011',\n '001101',\n '001110',\n '010011',\n '011001',\n '011100',\n '010101',\n '010110',\n '011010'\n ],\n characterMap: {\n digits: [\n [\n 3,\n 2,\n 1,\n 1\n ],\n [\n 2,\n 2,\n 2,\n 1\n ],\n [\n 2,\n 1,\n 2,\n 2\n ],\n [\n 1,\n 4,\n 1,\n 1\n ],\n [\n 1,\n 1,\n 3,\n 2\n ],\n [\n 1,\n 2,\n 3,\n 1\n ],\n [\n 1,\n 1,\n 1,\n 4\n ],\n [\n 1,\n 3,\n 1,\n 2\n ],\n [\n 1,\n 2,\n 1,\n 3\n ],\n [\n 3,\n 1,\n 1,\n 2\n ]\n ],\n start: [\n 1,\n 1,\n 1\n ],\n middle: [\n 1,\n 1,\n 1,\n 1,\n 1\n ]\n }\n });\n encodings.ean8 = encodings.ean13.extend({\n initValue: function (value, width, height) {\n var that = this;\n if (value.length != 7 || /\\D/.test(value)) {\n throw new Error('Invalid value provided');\n }\n that.value = value;\n that.options.height = height;\n that.checksum = that.calculateChecksum(that.value);\n that.leftPart = that.value.substr(0, 4);\n that.rightPart = that.value.substr(4) + that.checksum;\n that.pattern = [];\n that.baseUnit = width / (67 + that.quietZoneLength);\n }\n });\n var Barcode = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.element = $(element);\n that.wrapper = that.element;\n that.element.addClass('k-barcode').css('display', 'block');\n that.surfaceWrap = $('
    ').css('position', 'relative').appendTo(this.element);\n that.surface = draw.Surface.create(that.surfaceWrap, { type: that.options.renderAs });\n that._setOptions(options);\n if (options && defined(options.value)) {\n that.redraw();\n }\n },\n setOptions: function (options) {\n this._setOptions(options);\n this.redraw();\n },\n redraw: function () {\n var size = this._getSize();\n this.surface.clear();\n this.surface.setSize({\n width: size.width,\n height: size.height\n });\n this.createVisual();\n this.surface.draw(this.visual);\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n _resize: function () {\n this.redraw();\n },\n createVisual: function () {\n this.visual = this._render();\n },\n _render: function () {\n var that = this, options = that.options, value = options.value, textOptions = options.text, textMargin = dataviz.getSpacing(textOptions.margin), size = that._getSize(), border = options.border || {}, encoding = that.encoding, contentBox = new Box2D(0, 0, size.width, size.height).unpad(border.width).unpad(options.padding), barHeight = contentBox.height(), result, textToDisplay, textHeight;\n var visual = new draw.Group();\n that.contentBox = contentBox;\n visual.append(that._getBackground(size));\n if (textOptions.visible) {\n textHeight = draw.util.measureText(value, { font: textOptions.font }).height;\n barHeight -= textHeight + textMargin.top + textMargin.bottom;\n }\n result = encoding.encode(value, contentBox.width(), barHeight);\n if (textOptions.visible) {\n textToDisplay = value;\n if (options.checksum && defined(encoding.checksum)) {\n textToDisplay += ' ' + encoding.checksum;\n }\n visual.append(that._getText(textToDisplay));\n }\n that.barHeight = barHeight;\n this._bandsGroup = this._getBands(result.pattern, result.baseUnit);\n visual.append(this._bandsGroup);\n return visual;\n },\n exportVisual: function () {\n return this._render();\n },\n _getSize: function () {\n var that = this, element = that.element, size = new geom.Size(DEFAULT_WIDTH, DEFAULT_HEIGHT);\n if (element.width() > 0) {\n size.width = element.width();\n }\n if (element.height() > 0) {\n size.height = element.height();\n }\n if (that.options.width) {\n size.width = that.options.width;\n }\n if (that.options.height) {\n size.height = that.options.height;\n }\n return size;\n },\n value: function (value) {\n var that = this;\n if (!defined(value)) {\n return that.options.value;\n }\n that.options.value = value + '';\n that.redraw();\n },\n _getBands: function (pattern, baseUnit) {\n var that = this, contentBox = that.contentBox, position = contentBox.x1, step, item;\n var group = new draw.Group();\n for (var i = 0; i < pattern.length; i++) {\n item = isPlainObject(pattern[i]) ? pattern[i] : {\n width: pattern[i],\n y1: 0,\n y2: that.barHeight\n };\n step = item.width * baseUnit;\n if (i % 2) {\n var rect = geom.Rect.fromPoints(new geom.Point(position, item.y1 + contentBox.y1), new geom.Point(position + step, item.y2 + contentBox.y1));\n var path = draw.Path.fromRect(rect, {\n fill: { color: that.options.color },\n stroke: null\n });\n group.append(path);\n }\n position += step;\n }\n return group;\n },\n _getBackground: function (size) {\n var that = this, options = that.options, border = options.border || {};\n var box = new Box2D(0, 0, size.width, size.height).unpad(border.width / 2);\n var path = draw.Path.fromRect(box.toRect(), {\n fill: { color: options.background },\n stroke: {\n color: border.width ? border.color : '',\n width: border.width,\n dashType: border.dashType\n }\n });\n return path;\n },\n _getText: function (value) {\n var that = this, textOptions = that.options.text, text = that._textbox = new TextBox(value, {\n font: textOptions.font,\n color: textOptions.color,\n align: 'center',\n vAlign: 'bottom',\n margin: textOptions.margin\n });\n text.reflow(that.contentBox);\n text.renderVisual();\n return text.visual;\n },\n _setOptions: function (options) {\n var that = this;\n that.type = (options.type || that.options.type).toLowerCase();\n if (that.type == 'upca') {\n that.type = 'ean13';\n options.value = '0' + options.value;\n }\n if (that.type == 'upce') {\n that.type = 'ean8';\n options.value = '0' + options.value;\n }\n if (!encodings[that.type]) {\n throw new Error('Encoding ' + that.type + 'is not supported.');\n }\n that.encoding = new encodings[that.type]();\n that.options = extend(true, that.options, options);\n },\n options: {\n name: 'Barcode',\n renderAs: 'svg',\n value: '',\n type: 'code39',\n checksum: false,\n width: 0,\n height: 0,\n color: 'black',\n background: 'white',\n text: {\n visible: true,\n font: '16px Consolas, Monaco, Sans Mono, monospace, sans-serif',\n color: 'black',\n margin: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n },\n border: {\n width: 0,\n dashType: 'solid',\n color: 'black'\n },\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n }\n });\n dataviz.ExportMixin.extend(Barcode.fn);\n dataviz.ui.plugin(Barcode);\n kendo.deepExtend(dataviz, {\n encodings: encodings,\n Encoding: Encoding\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.qrcode', [\n 'kendo.dataviz.core',\n 'kendo.drawing'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.qrcode',\n name: 'QRCode',\n category: 'dataviz',\n description: 'QRCode widget.',\n depends: [\n 'dataviz.core',\n 'drawing'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, draw = kendo.drawing, dataviz = kendo.dataviz, Widget = kendo.ui.Widget, Box2D = dataviz.Box2D, terminator = '0000', NUMERIC = 'numeric', ALPHA_NUMERIC = 'alphanumeric', BYTE = 'byte', powersOfTwo = { '1': 0 }, powersOfTwoResult = { '0': 1 }, generatorPolynomials = [\n [\n 1,\n 0\n ],\n [\n 1,\n 25,\n 0\n ]\n ], irregularAlignmentPatternsStartDistance = {\n 15: 20,\n 16: 20,\n 18: 24,\n 19: 24,\n 22: 20,\n 24: 22,\n 26: 24,\n 28: 20,\n 30: 20,\n 31: 24,\n 32: 28,\n 33: 24,\n 36: 18,\n 37: 22,\n 39: 20,\n 40: 24\n }, versionsCodewordsInfraormation = [\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, versionCodewordsInfraormation) {\n var codewordStart = 0, dataBlocks = [], errorBlocks = [], dataBlock, versionGroups = versionCodewordsInfraormation.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, versionCodewordsInfraormation.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 = versionsCodewordsInfraormation.length - 1, version = Math.floor(versionsCodewordsInfraormation.length / 2);\n do {\n if (dataCodewordsCount < versionsCodewordsInfraormation[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 <= versionsCodewordsInfraormation[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 encodeFormatInfraormation = 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 addFormatInfraormation = 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 encodeVersionInfraormation = function (version) {\n return encodeBCH(version, versionGeneratorPolynomial, 18);\n };\n var addVersionInfraormation = 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, versionInfraormation = versionsCodewordsInfraormation[version - 1][errorCorrectionLevel], dataString = padDataString(encodingResult.dataString, versionInfraormation.totalDataCodewords), blocks = getBlocks(dataString, versionInfraormation), matrices = initMatrices(version);\n addFinderPatterns(matrices);\n addAlignmentPatterns(matrices, version);\n addTimingFunctions(matrices);\n if (version >= 7) {\n addVersionInfraormation(matrices, toBitsString(0, 18));\n }\n addFormatInfraormation(matrices, toBitsString(0, 15));\n fillData(matrices, blocks);\n var minIdx = scoreMaskMatrixes(matrices), optimalMatrix = matrices[minIdx];\n if (version >= 7) {\n addVersionInfraormation([optimalMatrix], encodeVersionInfraormation(version));\n }\n var formatString = errorCorrectionPatterns[errorCorrectionLevel] + toBitsString(minIdx, 3);\n addFormatInfraormation([optimalMatrix], encodeFormatInfraormation(formatString));\n return optimalMatrix;\n };\n var QRCodeDefaults = {\n DEFAULT_SIZE: 200,\n QUIET_ZONE_LENGTH: 4,\n DEFAULT_ERROR_CORRECTION_LEVEL: 'L',\n DEFAULT_BACKGROUND: '#fff',\n DEFAULT_DARK_MODULE_COLOR: '#000',\n MIN_BASE_UNIT_SIZE: 1\n };\n var QRCode = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.element = $(element);\n that.wrapper = that.element;\n that.element.addClass('k-qrcode');\n that.surfaceWrap = $('
    ').css('position', 'relative').appendTo(this.element);\n that.surface = draw.Surface.create(that.surfaceWrap, { type: that.options.renderAs });\n that.setOptions(options);\n },\n redraw: function () {\n var size = this._getSize();\n this.surfaceWrap.css({\n width: size,\n height: size\n });\n this.surface.clear();\n this.createVisual();\n this.surface.draw(this.visual);\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n _resize: function () {\n this.redraw();\n },\n createVisual: function () {\n this.visual = this._render();\n },\n exportVisual: function () {\n return this._render();\n },\n _render: function () {\n var that = this, value = that._value, baseUnit, border = that.options.border || {}, padding = that.options.padding || 0, borderWidth = border.width || 0, quietZoneSize, matrix, size, dataSize, contentSize;\n border.width = borderWidth;\n var visual = new draw.Group();\n if (value) {\n matrix = encodeData(value, that.options.errorCorrection, that.options.encoding);\n size = that._getSize();\n contentSize = size - 2 * (borderWidth + padding);\n baseUnit = that._calculateBaseUnit(contentSize, matrix.length);\n dataSize = matrix.length * baseUnit;\n quietZoneSize = borderWidth + padding + (contentSize - dataSize) / 2;\n visual.append(that._renderBackground(size, border));\n visual.append(that._renderMatrix(matrix, baseUnit, quietZoneSize));\n }\n return visual;\n },\n _getSize: function () {\n var that = this, size;\n if (that.options.size) {\n size = parseInt(that.options.size, 10);\n } else {\n var element = that.element, min = Math.min(element.width(), element.height());\n if (min > 0) {\n size = min;\n } else {\n size = QRCodeDefaults.DEFAULT_SIZE;\n }\n }\n return size;\n },\n _calculateBaseUnit: function (size, matrixSize) {\n var baseUnit = Math.floor(size / matrixSize);\n if (baseUnit < QRCodeDefaults.MIN_BASE_UNIT_SIZE) {\n throw new Error('Insufficient size.');\n }\n if (baseUnit * matrixSize >= size && baseUnit - 1 >= QRCodeDefaults.MIN_BASE_UNIT_SIZE) {\n baseUnit--;\n }\n return baseUnit;\n },\n _renderMatrix: function (matrix, baseUnit, quietZoneSize) {\n var path = new draw.MultiPath({\n fill: { color: this.options.color },\n stroke: null\n });\n for (var row = 0; row < matrix.length; row++) {\n var y = quietZoneSize + row * baseUnit;\n var column = 0;\n while (column < matrix.length) {\n while (matrix[row][column] === 0 && column < matrix.length) {\n column++;\n }\n if (column < matrix.length) {\n var x = column;\n while (matrix[row][column] == 1) {\n column++;\n }\n var x1 = round(quietZoneSize + x * baseUnit);\n var y1 = round(y);\n var x2 = round(quietZoneSize + column * baseUnit);\n var y2 = round(y + baseUnit);\n path.moveTo(x1, y1).lineTo(x1, y2).lineTo(x2, y2).lineTo(x2, y1).close();\n }\n }\n }\n return path;\n },\n _renderBackground: function (size, border) {\n var box = new Box2D(0, 0, size, size).unpad(border.width / 2);\n return draw.Path.fromRect(box.toRect(), {\n fill: { color: this.options.background },\n stroke: {\n color: border.color,\n width: border.width\n }\n });\n },\n setOptions: function (options) {\n var that = this;\n options = options || {};\n that.options = extend(that.options, options);\n if (options.value !== undefined) {\n that._value = that.options.value + '';\n }\n that.redraw();\n },\n value: function (value) {\n var that = this;\n if (value === undefined) {\n return that._value;\n }\n that._value = value + '';\n that.redraw();\n },\n options: {\n name: 'QRCode',\n renderAs: 'svg',\n encoding: 'ISO_8859_1',\n value: '',\n errorCorrection: QRCodeDefaults.DEFAULT_ERROR_CORRECTION_LEVEL,\n background: QRCodeDefaults.DEFAULT_BACKGROUND,\n color: QRCodeDefaults.DEFAULT_DARK_MODULE_COLOR,\n size: '',\n padding: 0,\n border: {\n color: '',\n width: 0\n }\n }\n });\n dataviz.ExportMixin.extend(QRCode.fn);\n dataviz.ui.plugin(QRCode);\n kendo.deepExtend(dataviz, {\n QRCode: QRCode,\n QRCodeDefaults: QRCodeDefaults,\n QRCodeFunctions: {\n FreeCellVisitor: FreeCellVisitor,\n fillData: fillData,\n padDataString: padDataString,\n generateErrorCodewords: generateErrorCodewords,\n xorPolynomials: xorPolynomials,\n getBlocks: getBlocks,\n multiplyPolynomials: multiplyPolynomials,\n chooseMode: chooseMode,\n getModes: getModes,\n getDataCodewordsCount: getDataCodewordsCount,\n getVersion: getVersion,\n getDataString: getDataString,\n encodeFormatInfraormation: encodeFormatInfraormation,\n encodeBCH: encodeBCH,\n dividePolynomials: dividePolynomials,\n initMatrices: initMatrices,\n addFormatInfraormation: addFormatInfraormation,\n encodeVersionInfraormation: encodeVersionInfraormation,\n addVersionInfraormation: addVersionInfraormation,\n addCentricPattern: addCentricPattern,\n addFinderSeparator: addFinderSeparator,\n addFinderPatterns: addFinderPatterns,\n addAlignmentPatterns: addAlignmentPatterns,\n addTimingFunctions: addTimingFunctions,\n scoreMaskMatrixes: scoreMaskMatrixes,\n encodeData: encodeData,\n UTF8Encoder: UTF8Encoder\n },\n QRCodeFields: {\n modes: modeInstances,\n powersOfTwo: powersOfTwo,\n powersOfTwoResult: powersOfTwoResult,\n generatorPolynomials: generatorPolynomials\n }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/stock/kendo-stock-chart', ['kendo.dataviz.chart'], f);\n}(function () {\n (function () {\n window.kendo.dataviz = window.kendo.dataviz || {};\n var dataviz = kendo.dataviz;\n var elementStyles = dataviz.elementStyles;\n var deepExtend = dataviz.deepExtend;\n var toTime = dataviz.toTime;\n var datavizConstants = dataviz.constants;\n var Chart = dataviz.Chart;\n var drawing = kendo.drawing;\n var FadeOutAnimation = drawing.Animation.extend({\n setup: function () {\n this._initialOpacity = parseFloat(elementStyles(this.element, 'opacity').opacity);\n },\n step: function (pos) {\n elementStyles(this.element, { opacity: String(dataviz.interpolateValue(this._initialOpacity, 0, pos)) });\n },\n abort: function () {\n drawing.Animation.fn.abort.call(this);\n elementStyles(this.element, {\n display: 'none',\n opacity: String(this._initialOpacity)\n });\n },\n cancel: function () {\n drawing.Animation.fn.abort.call(this);\n elementStyles(this.element, { opacity: String(this._initialOpacity) });\n }\n });\n function createDiv(className, style) {\n var div = document.createElement('div');\n div.className = className;\n if (style) {\n div.style.cssText = style;\n }\n return div;\n }\n var NavigatorHint = dataviz.Class.extend({\n init: function (container, chartService, options) {\n this.options = deepExtend({}, this.options, options);\n this.container = container;\n this.chartService = chartService;\n var padding = elementStyles(container, [\n 'paddingLeft',\n 'paddingTop'\n ]);\n this.chartPadding = {\n top: padding.paddingTop,\n left: padding.paddingLeft\n };\n this.createElements();\n container.appendChild(this.element);\n },\n createElements: function () {\n var element = this.element = createDiv('k-navigator-hint', 'display: none; position: absolute; top: 1px; left: 1px;');\n var tooltip = this.tooltip = createDiv('k-tooltip k-chart-tooltip');\n var scroll = this.scroll = createDiv('k-scroll');\n tooltip.innerHTML = ' ';\n element.appendChild(tooltip);\n element.appendChild(scroll);\n },\n show: function (from, to, bbox) {\n var ref = this;\n var element = ref.element;\n var options = ref.options;\n var scroll = ref.scroll;\n var tooltip = ref.tooltip;\n var middle = dataviz.toDate(toTime(from) + toTime(to - from) / 2);\n var scrollWidth = bbox.width() * 0.4;\n var minPos = bbox.center().x - scrollWidth;\n var maxPos = bbox.center().x;\n var posRange = maxPos - minPos;\n var range = options.max - options.min;\n var scale = posRange / range;\n var offset = middle - options.min;\n var text = this.chartService.intl.format(options.format, from, to);\n var template = dataviz.getTemplate(options);\n this.clearHideTimeout();\n if (!this._visible) {\n elementStyles(element, {\n visibility: 'hidden',\n display: 'block'\n });\n this._visible = true;\n }\n if (template) {\n text = template({\n from: from,\n to: to\n });\n }\n tooltip.innerHTML = text;\n elementStyles(tooltip, {\n left: bbox.center().x - tooltip.offsetWidth / 2,\n top: bbox.y1\n });\n var tooltipStyle = elementStyles(tooltip, [\n 'marginTop',\n 'borderTopWidth',\n 'height'\n ]);\n elementStyles(scroll, {\n width: scrollWidth,\n left: minPos + offset * scale,\n top: bbox.y1 + tooltipStyle.marginTop + tooltipStyle.borderTopWidth + tooltipStyle.height / 2\n });\n elementStyles(element, { visibility: 'visible' });\n },\n clearHideTimeout: function () {\n if (this._hideTimeout) {\n clearTimeout(this._hideTimeout);\n }\n if (this._hideAnimation) {\n this._hideAnimation.cancel();\n }\n },\n hide: function () {\n var this$1 = this;\n this.clearHideTimeout();\n this._hideTimeout = setTimeout(function () {\n this$1._visible = false;\n this$1._hideAnimation = new FadeOutAnimation(this$1.element);\n this$1._hideAnimation.setup();\n this$1._hideAnimation.play();\n }, this.options.hideDelay);\n },\n destroy: function () {\n this.clearHideTimeout();\n if (this.container) {\n this.container.removeChild(this.element);\n }\n delete this.container;\n delete this.chartService;\n delete this.element;\n delete this.tooltip;\n delete this.scroll;\n }\n });\n dataviz.setDefaultOptions(NavigatorHint, {\n format: '{0:d} - {1:d}',\n hideDelay: 500\n });\n var NAVIGATOR_PANE = '_navigator';\n var NAVIGATOR_AXIS = NAVIGATOR_PANE;\n var constants = {\n NAVIGATOR_AXIS: NAVIGATOR_AXIS,\n NAVIGATOR_PANE: NAVIGATOR_PANE\n };\n var ZOOM_ACCELERATION = 3;\n var Navigator = dataviz.Class.extend({\n init: function (chart) {\n this.chart = chart;\n var options = this.options = deepExtend({}, this.options, chart.options.navigator);\n var select = options.select;\n if (select) {\n select.from = this.parseDate(select.from);\n select.to = this.parseDate(select.to);\n }\n if (!dataviz.defined(options.hint.visible)) {\n options.hint.visible = options.visible;\n }\n var obj;\n this.chartObserver = new dataviz.InstanceObserver(this, (obj = {}, obj[datavizConstants.DRAG] = '_drag', obj[datavizConstants.DRAG_END] = '_dragEnd', obj[datavizConstants.ZOOM] = '_zoom', obj[datavizConstants.ZOOM_END] = '_zoomEnd', obj));\n chart.addObserver(this.chartObserver);\n },\n parseDate: function (value) {\n return dataviz.parseDate(this.chart.chartService.intl, value);\n },\n clean: function () {\n if (this.selection) {\n this.selection.destroy();\n this.selection = null;\n }\n if (this.hint) {\n this.hint.destroy();\n this.hint = null;\n }\n },\n destroy: function () {\n if (this.chart) {\n this.chart.removeObserver(this.chartObserver);\n delete this.chart;\n }\n this.clean();\n },\n redraw: function () {\n this._redrawSelf();\n this.initSelection();\n },\n initSelection: function () {\n var ref = this;\n var chart = ref.chart;\n var options = ref.options;\n var axis = this.mainAxis();\n var ref$1 = axis.roundedRange();\n var min = ref$1.min;\n var max = ref$1.max;\n var ref$2 = options.select;\n var from = ref$2.from;\n var to = ref$2.to;\n var mousewheel = ref$2.mousewheel;\n var axisClone = clone(axis);\n if (axis.categoriesCount() === 0) {\n return;\n }\n this.clean();\n axisClone.box = axis.box;\n this.selection = new dataviz.Selection(chart, axisClone, {\n min: min,\n max: max,\n from: from || min,\n to: to || max,\n mousewheel: dataviz.valueOrDefault(mousewheel, { zoom: 'left' }),\n visible: options.visible\n }, new dataviz.InstanceObserver(this, {\n selectStart: '_selectStart',\n select: '_select',\n selectEnd: '_selectEnd'\n }));\n if (options.hint.visible) {\n this.hint = new NavigatorHint(chart.element, chart.chartService, {\n min: min,\n max: max,\n template: dataviz.getTemplate(options.hint),\n format: options.hint.format\n });\n }\n },\n setRange: function () {\n var plotArea = this.chart._createPlotArea(true);\n var axis = plotArea.namedCategoryAxes[NAVIGATOR_AXIS];\n var ref = axis.roundedRange();\n var min = ref.min;\n var max = ref.max;\n var select = this.options.select || {};\n var from = select.from || min;\n if (from < min) {\n from = min;\n }\n var to = select.to || max;\n if (to > max) {\n to = max;\n }\n this.options.select = deepExtend({}, select, {\n from: from,\n to: to\n });\n this.filterAxes();\n },\n _redrawSelf: function (silent) {\n var plotArea = this.chart._plotArea;\n if (plotArea) {\n plotArea.redraw(dataviz.last(plotArea.panes), silent);\n }\n },\n redrawSlaves: function () {\n var chart = this.chart;\n var plotArea = chart._plotArea;\n var slavePanes = plotArea.panes.slice(0, -1);\n plotArea.srcSeries = chart.options.series;\n plotArea.options.categoryAxis = chart.options.categoryAxis;\n plotArea.clearSeriesPointsCache();\n plotArea.redraw(slavePanes);\n },\n _drag: function (e) {\n var ref = this;\n var chart = ref.chart;\n var selection = ref.selection;\n var coords = chart._eventCoordinates(e.originalEvent);\n var navigatorAxis = this.mainAxis();\n var naviRange = navigatorAxis.roundedRange();\n var inNavigator = navigatorAxis.pane.box.containsPoint(coords);\n var axis = chart._plotArea.categoryAxis;\n var range = e.axisRanges[axis.options.name];\n var select = this.options.select;\n var duration;\n if (!range || inNavigator || !selection) {\n return;\n }\n if (select.from && select.to) {\n duration = toTime(select.to) - toTime(select.from);\n } else {\n duration = toTime(selection.options.to) - toTime(selection.options.from);\n }\n var from = dataviz.toDate(dataviz.limitValue(toTime(range.min), naviRange.min, toTime(naviRange.max) - duration));\n var to = dataviz.toDate(dataviz.limitValue(toTime(from) + duration, toTime(naviRange.min) + duration, naviRange.max));\n this.options.select = {\n from: from,\n to: to\n };\n if (this.options.liveDrag) {\n this.filterAxes();\n this.redrawSlaves();\n }\n selection.set(from, to);\n this.showHint(from, to);\n },\n _dragEnd: function () {\n this.filterAxes();\n this.filter();\n this.redrawSlaves();\n if (this.hint) {\n this.hint.hide();\n }\n },\n readSelection: function () {\n var ref = this;\n var ref_selection_options = ref.selection.options;\n var from = ref_selection_options.from;\n var to = ref_selection_options.to;\n var select = ref.options.select;\n select.from = from;\n select.to = to;\n },\n filterAxes: function () {\n var ref = this;\n var select = ref.options.select;\n if (select === void 0) {\n select = {};\n }\n var chart = ref.chart;\n var allAxes = chart.options.categoryAxis;\n var from = select.from;\n var to = select.to;\n for (var idx = 0; idx < allAxes.length; idx++) {\n var axis = allAxes[idx];\n if (axis.pane !== NAVIGATOR_PANE) {\n axis.min = from;\n axis.max = to;\n }\n }\n },\n filter: function () {\n var ref = this;\n var chart = ref.chart;\n var select = ref.options.select;\n if (!chart.requiresHandlers(['navigatorFilter'])) {\n return;\n }\n var mainAxis = this.mainAxis();\n var args = {\n from: select.from,\n to: select.to\n };\n if (mainAxis.options.type !== 'category') {\n var axisOptions = new dataviz.DateCategoryAxis(deepExtend({ baseUnit: 'fit' }, chart.options.categoryAxis[0], {\n categories: [\n select.from,\n select.to\n ]\n }), chart.chartService).options;\n args.from = dataviz.addDuration(axisOptions.min, -axisOptions.baseUnitStep, axisOptions.baseUnit);\n args.to = dataviz.addDuration(axisOptions.max, axisOptions.baseUnitStep, axisOptions.baseUnit);\n }\n this.chart.trigger('navigatorFilter', args);\n },\n _zoom: function (e) {\n var ref = this;\n var axis = ref.chart._plotArea.categoryAxis;\n var selection = ref.selection;\n var ref_options = ref.options;\n var select = ref_options.select;\n var liveDrag = ref_options.liveDrag;\n var mainAxis = this.mainAxis();\n var delta = e.delta;\n if (!selection) {\n return;\n }\n var fromIx = mainAxis.categoryIndex(selection.options.from);\n var toIx = mainAxis.categoryIndex(selection.options.to);\n e.originalEvent.preventDefault();\n if (Math.abs(delta) > 1) {\n delta *= ZOOM_ACCELERATION;\n }\n if (toIx - fromIx > 1) {\n selection.expand(delta);\n this.readSelection();\n } else {\n axis.options.min = select.from;\n select.from = axis.scaleRange(-e.delta).min;\n }\n if (liveDrag) {\n this.filterAxes();\n this.redrawSlaves();\n }\n selection.set(select.from, select.to);\n this.showHint(this.options.select.from, this.options.select.to);\n },\n _zoomEnd: function (e) {\n this._dragEnd(e);\n },\n showHint: function (from, to) {\n var plotArea = this.chart._plotArea;\n if (this.hint) {\n this.hint.show(from, to, plotArea.backgroundBox());\n }\n },\n _selectStart: function (e) {\n return this.chart._selectStart(e);\n },\n _select: function (e) {\n this.showHint(e.from, e.to);\n return this.chart._select(e);\n },\n _selectEnd: function (e) {\n if (this.hint) {\n this.hint.hide();\n }\n this.readSelection();\n this.filterAxes();\n this.filter();\n this.redrawSlaves();\n return this.chart._selectEnd(e);\n },\n mainAxis: function () {\n var plotArea = this.chart._plotArea;\n if (plotArea) {\n return plotArea.namedCategoryAxes[NAVIGATOR_AXIS];\n }\n },\n select: function (from, to) {\n var select = this.options.select;\n if (from && to) {\n select.from = this.parseDate(from);\n select.to = this.parseDate(to);\n this.filterAxes();\n this.filter();\n this.redrawSlaves();\n this.selection.set(from, to);\n }\n return {\n from: select.from,\n to: select.to\n };\n }\n });\n Navigator.setup = function (options, themeOptions) {\n if (options === void 0) {\n options = {};\n }\n if (themeOptions === void 0) {\n themeOptions = {};\n }\n if (options.__navi) {\n return;\n }\n options.__navi = true;\n var naviOptions = deepExtend({}, themeOptions.navigator, options.navigator);\n var panes = options.panes = [].concat(options.panes);\n var paneOptions = deepExtend({}, naviOptions.pane, { name: NAVIGATOR_PANE });\n if (!naviOptions.visible) {\n paneOptions.visible = false;\n paneOptions.height = 0.1;\n }\n panes.push(paneOptions);\n Navigator.attachAxes(options, naviOptions);\n Navigator.attachSeries(options, naviOptions, themeOptions);\n };\n Navigator.attachAxes = function (options, naviOptions) {\n var series = naviOptions.series || [];\n var categoryAxes = options.categoryAxis = [].concat(options.categoryAxis);\n var valueAxes = options.valueAxis = [].concat(options.valueAxis);\n var equallySpacedSeries = dataviz.filterSeriesByType(series, datavizConstants.EQUALLY_SPACED_SERIES);\n var justifyAxis = equallySpacedSeries.length === 0;\n var base = deepExtend({\n type: 'date',\n pane: NAVIGATOR_PANE,\n roundToBaseUnit: !justifyAxis,\n justified: justifyAxis,\n _collapse: false,\n majorTicks: { visible: true },\n tooltip: { visible: false },\n labels: { step: 1 },\n autoBind: naviOptions.autoBindElements,\n autoBaseUnitSteps: {\n minutes: [1],\n hours: [\n 1,\n 2\n ],\n days: [\n 1,\n 2\n ],\n weeks: [],\n months: [1],\n years: [1]\n }\n });\n var user = naviOptions.categoryAxis;\n categoryAxes.push(deepExtend({}, base, { maxDateGroups: 200 }, user, {\n name: NAVIGATOR_AXIS,\n title: null,\n baseUnit: 'fit',\n baseUnitStep: 'auto',\n labels: { visible: false },\n majorTicks: { visible: false }\n }), deepExtend({}, base, user, {\n name: NAVIGATOR_AXIS + '_labels',\n maxDateGroups: 20,\n baseUnitStep: 'auto',\n labels: { position: '' },\n plotBands: [],\n autoBaseUnitSteps: { minutes: [] },\n _overlap: true\n }), deepExtend({}, base, user, {\n name: NAVIGATOR_AXIS + '_ticks',\n maxDateGroups: 200,\n majorTicks: { width: 0.5 },\n plotBands: [],\n title: null,\n labels: {\n visible: false,\n mirror: true\n },\n _overlap: true\n }));\n valueAxes.push(deepExtend({\n name: NAVIGATOR_AXIS,\n pane: NAVIGATOR_PANE,\n majorGridLines: { visible: false },\n visible: false\n }, naviOptions.valueAxis));\n };\n Navigator.attachSeries = function (options, naviOptions, themeOptions) {\n var series = options.series = options.series || [];\n var navigatorSeries = [].concat(naviOptions.series || []);\n var seriesColors = themeOptions.seriesColors;\n var defaults = naviOptions.seriesDefaults;\n for (var idx = 0; idx < navigatorSeries.length; idx++) {\n series.push(deepExtend({\n color: seriesColors[idx % seriesColors.length],\n categoryField: naviOptions.dateField,\n visibleInLegend: false,\n tooltip: { visible: false }\n }, defaults, navigatorSeries[idx], {\n axis: NAVIGATOR_AXIS,\n categoryAxis: NAVIGATOR_AXIS,\n autoBind: naviOptions.autoBindElements\n }));\n }\n };\n function ClonedObject() {\n }\n function clone(obj) {\n ClonedObject.prototype = obj;\n return new ClonedObject();\n }\n var AUTO_CATEGORY_WIDTH = 28;\n var StockChart = Chart.extend({\n applyDefaults: function (options, themeOptions) {\n var width = dataviz.elementSize(this.element).width || datavizConstants.DEFAULT_WIDTH;\n var theme = themeOptions;\n var stockDefaults = {\n seriesDefaults: { categoryField: options.dateField },\n axisDefaults: {\n categoryAxis: {\n name: 'default',\n majorGridLines: { visible: false },\n labels: { step: 2 },\n majorTicks: { visible: false },\n maxDateGroups: Math.floor(width / AUTO_CATEGORY_WIDTH)\n }\n }\n };\n if (theme) {\n theme = deepExtend({}, theme, stockDefaults);\n }\n Navigator.setup(options, theme);\n Chart.fn.applyDefaults.call(this, options, theme);\n },\n _setElementClass: function (element) {\n dataviz.addClass(element, 'k-chart k-stockchart');\n },\n setOptions: function (options) {\n this.destroyNavigator();\n Chart.fn.setOptions.call(this, options);\n },\n noTransitionsRedraw: function () {\n var transitions = this.options.transitions;\n this.options.transitions = false;\n this._fullRedraw();\n this.options.transitions = transitions;\n },\n _resize: function () {\n this.noTransitionsRedraw();\n },\n _redraw: function () {\n var navigator = this.navigator;\n if (!this._dirty() && navigator && navigator.options.partialRedraw) {\n navigator.redrawSlaves();\n } else {\n this._fullRedraw();\n }\n },\n _dirty: function () {\n var options = this.options;\n var series = [].concat(options.series, options.navigator.series);\n var seriesCount = dataviz.grep(series, function (s) {\n return s && s.visible;\n }).length;\n var dirty = this._seriesCount !== seriesCount;\n this._seriesCount = seriesCount;\n return dirty;\n },\n _fullRedraw: function () {\n var navigator = this.navigator;\n if (!navigator) {\n navigator = this.navigator = new Navigator(this);\n this.trigger('navigatorCreated', { navigator: navigator });\n }\n navigator.clean();\n navigator.setRange();\n Chart.fn._redraw.call(this);\n navigator.initSelection();\n },\n _trackSharedTooltip: function (coords) {\n var plotArea = this._plotArea;\n var pane = plotArea.paneByPoint(coords);\n if (pane && pane.options.name === NAVIGATOR_PANE) {\n this._unsetActivePoint();\n } else {\n Chart.fn._trackSharedTooltip.call(this, coords);\n }\n },\n bindCategories: function () {\n Chart.fn.bindCategories.call(this);\n this.copyNavigatorCategories();\n },\n copyNavigatorCategories: function () {\n var definitions = [].concat(this.options.categoryAxis);\n var categories;\n for (var axisIx = 0; axisIx < definitions.length; axisIx++) {\n var axis = definitions[axisIx];\n if (axis.name === NAVIGATOR_AXIS) {\n categories = axis.categories;\n } else if (categories && axis.pane === NAVIGATOR_PANE) {\n axis.categories = categories;\n }\n }\n },\n destroyNavigator: function () {\n if (this.navigator) {\n this.navigator.destroy();\n this.navigator = null;\n }\n },\n destroy: function () {\n this.destroyNavigator();\n Chart.fn.destroy.call(this);\n },\n _stopChartHandlers: function (e) {\n var coords = this._eventCoordinates(e);\n var pane = this._plotArea.paneByPoint(coords);\n return Chart.fn._stopChartHandlers.call(this, e) || pane && pane.options.name === NAVIGATOR_PANE;\n }\n });\n dataviz.setDefaultOptions(StockChart, {\n dateField: 'date',\n axisDefaults: {\n categoryAxis: {\n type: 'date',\n baseUnit: 'fit',\n justified: true\n },\n valueAxis: {\n narrowRange: true,\n labels: { format: 'C' }\n }\n },\n navigator: {\n select: {},\n seriesDefaults: {\n markers: { visible: false },\n tooltip: { visible: true },\n line: { width: 2 }\n },\n hint: {},\n visible: true\n },\n tooltip: { visible: true },\n legend: { visible: false }\n });\n kendo.deepExtend(kendo.dataviz, {\n constants: constants,\n Navigator: Navigator,\n NavigatorHint: NavigatorHint,\n StockChart: StockChart\n });\n }());\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/stock/stock-chart', ['dataviz/stock/kendo-stock-chart'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var dataviz = kendo.dataviz;\n var ChartInstanceObserver = dataviz.ChartInstanceObserver;\n var Chart = dataviz.ui.Chart;\n var KendoStockChart = dataviz.StockChart;\n var constants = dataviz.constants;\n var NAVIGATOR_AXIS = constants.NAVIGATOR_AXIS;\n var NAVIGATOR_PANE = constants.NAVIGATOR_PANE;\n var deepExtend = kendo.deepExtend;\n var defined = dataviz.defined;\n var proxy = $.proxy;\n var CHANGE = 'change';\n var StockInstanceObserver = ChartInstanceObserver.extend({\n handlerMap: {\n navigatorFilter: '_onNavigatorFilter',\n navigatorCreated: '_onNavigatorCreated'\n }\n });\n var StockChart = Chart.extend({\n options: {\n name: 'StockChart',\n dateField: 'date',\n axisDefaults: {\n categoryAxis: {\n type: 'date',\n baseUnit: 'fit',\n justified: true\n },\n valueAxis: {\n narrowRange: true,\n labels: { format: 'C' }\n }\n },\n navigator: {\n select: {},\n seriesDefaults: {\n markers: { visible: false },\n tooltip: {\n visible: true,\n template: '#= kendo.toString(category, \\'d\\') #'\n },\n line: { width: 2 }\n },\n hint: {},\n visible: true\n },\n tooltip: { visible: true },\n legend: { visible: false },\n persistSeriesVisibility: true\n },\n _createChart: function (options, themeOptions) {\n this._initNavigatorOptions(options);\n this._instance = new KendoStockChart(this.element[0], options, themeOptions, {\n observer: new StockInstanceObserver(this),\n sender: this,\n rtl: this._isRtl()\n });\n },\n _initNavigatorOptions: function (options) {\n var navigatorOptions = options.navigator || {};\n var support = kendo.support;\n var isTouch = support.touch;\n var isFirefox = support.browser.mozilla;\n deepExtend(navigatorOptions, {\n autoBindElements: !navigatorOptions.dataSource,\n partialRedraw: navigatorOptions.dataSource,\n liveDrag: !isTouch && !isFirefox\n });\n },\n _initDataSource: function (userOptions) {\n var options = userOptions || {}, dataSource = options.dataSource, hasServerFiltering = dataSource && dataSource.serverFiltering, mainAxis = [].concat(options.categoryAxis)[0], naviOptions = options.navigator || {}, select = naviOptions.select, hasSelect = select && select.from && select.to;\n if (hasServerFiltering && hasSelect) {\n var filter = [].concat(dataSource.filter || []);\n var from = kendo.parseDate(select.from);\n var to = kendo.parseDate(select.to);\n var dummyAxis = new dataviz.DateCategoryAxis(deepExtend({ baseUnit: 'fit' }, mainAxis, {\n categories: [\n from,\n to\n ]\n }), kendo);\n dataSource.filter = buildFilter(dummyAxis.range().min, to).concat(filter);\n }\n Chart.fn._initDataSource.call(this, userOptions);\n },\n _onNavigatorCreated: function (e) {\n this._instance = e.sender;\n this.options = e.sender.options;\n this._navigator = this.navigator = e.navigator;\n this._initNavigatorDataSource();\n },\n _initNavigatorDataSource: function () {\n var navigatorOptions = this.options.navigator;\n var autoBind = navigatorOptions.autoBind;\n var dsOptions = navigatorOptions.dataSource;\n if (dsOptions) {\n this._navigatorDataChangedHandler = this._navigatorDataChangedHandler || proxy(this._onNavigatorDataChanged, this);\n this._navigatorDataSource = kendo.data.DataSource.create(dsOptions).bind(CHANGE, this._navigatorDataChangedHandler);\n if (!defined(autoBind)) {\n autoBind = this.options.autoBind;\n }\n if (autoBind) {\n this._navigatorDataSource.fetch();\n }\n }\n },\n _bindNavigatorSeries: function (series, data) {\n var seriesIx, currentSeries, seriesLength = series.length;\n for (seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\n currentSeries = series[seriesIx];\n if (currentSeries.axis == NAVIGATOR_AXIS && this._isBindable(currentSeries)) {\n currentSeries.data = data;\n }\n }\n },\n _onNavigatorDataChanged: function () {\n var chart = this, instance = chart._instance, categoryAxes = chart.options.categoryAxis, axisIx, axesLength = categoryAxes.length, data = chart._navigatorDataSource.view(), currentAxis, naviCategories;\n this._bindNavigatorSeries(chart.options.series, data);\n if (chart._sourceSeries) {\n this._bindNavigatorSeries(chart._sourceSeries, data);\n }\n for (axisIx = 0; axisIx < axesLength; axisIx++) {\n currentAxis = categoryAxes[axisIx];\n if (currentAxis.pane == NAVIGATOR_PANE) {\n if (currentAxis.name == NAVIGATOR_AXIS) {\n chart._bindCategoryAxis(currentAxis, data, axisIx);\n naviCategories = currentAxis.categories;\n } else {\n currentAxis.categories = naviCategories;\n }\n }\n }\n if (instance._model) {\n var navigator = this.navigator;\n navigator.redraw();\n navigator.setRange();\n if (!chart.options.dataSource || chart.options.dataSource && chart._dataBound) {\n navigator.redrawSlaves();\n }\n }\n },\n _bindCategories: function () {\n Chart.fn._bindCategories.call(this);\n if (this._instance) {\n this._instance.copyNavigatorCategories();\n }\n },\n _onDataChanged: function () {\n Chart.fn._onDataChanged.call(this);\n this._dataBound = true;\n },\n setOptions: function (options) {\n this._removeNavigatorDataSource();\n this._initNavigatorOptions(options);\n this._instance.destroyNavigator();\n Chart.fn.setOptions.call(this, options);\n },\n _onNavigatorFilter: function (e) {\n this.dataSource.filter(buildFilter(e.from, e.to));\n },\n requiresHandlers: function (names) {\n if (dataviz.inArray('navigatorFilter', names)) {\n var dataSource = this.dataSource;\n var hasServerFiltering = dataSource && dataSource.options.serverFiltering;\n return hasServerFiltering && this.options.navigator.dataSource;\n }\n return Chart.fn.requiresHandlers.call(this, names);\n },\n _removeNavigatorDataSource: function () {\n var navigatorDataSource = this._navigatorDataSource;\n if (navigatorDataSource) {\n navigatorDataSource.unbind(CHANGE, this._navigatorDataChangedHandler);\n delete this._navigatorDataSource;\n }\n },\n destroy: function () {\n Chart.fn.destroy.call(this);\n this._removeNavigatorDataSource();\n }\n });\n dataviz.ui.plugin(StockChart);\n function buildFilter(from, to) {\n return [\n {\n field: 'Date',\n operator: 'gte',\n value: from\n },\n {\n field: 'Date',\n operator: 'lt',\n value: to\n }\n ];\n }\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.stock', [\n 'dataviz/stock/kendo-stock-chart',\n 'dataviz/stock/stock-chart'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.stockchart',\n name: 'StockChart',\n category: 'dataviz',\n description: 'StockChart widget and associated financial series.',\n depends: ['dataviz.chart']\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/sparkline/kendo-sparkline', ['kendo.dataviz.chart'], f);\n}(function () {\n (function () {\n window.kendo.dataviz = window.kendo.dataviz || {};\n var dataviz = kendo.dataviz;\n var constants = dataviz.constants;\n var Chart = dataviz.Chart;\n var elementSize = dataviz.elementSize;\n var deepExtend = dataviz.deepExtend;\n var TOP_OFFSET = -2;\n var SharedTooltip$1 = dataviz.SharedTooltip.extend({\n _slotAnchor: function (coords, slot) {\n var axis = this.plotArea.categoryAxis;\n var vertical = axis.options.vertical;\n var align = vertical ? {\n horizontal: 'left',\n vertical: 'center'\n } : {\n horizontal: 'center',\n vertical: 'bottom'\n };\n var point;\n if (vertical) {\n point = new dataviz.Point(this.plotArea.box.x2, slot.center().y);\n } else {\n point = new dataviz.Point(slot.center().x, TOP_OFFSET);\n }\n return {\n point: point,\n align: align\n };\n },\n _defaultAnchor: function (point, slot) {\n return this._slotAnchor({}, slot);\n }\n });\n var DEAULT_BAR_WIDTH = 150;\n var DEAULT_BULLET_WIDTH = 150;\n var NO_CROSSHAIR = [\n constants.BAR,\n constants.BULLET\n ];\n function hide(children) {\n var state = [];\n for (var idx = 0; idx < children.length; idx++) {\n var child = children[idx];\n state[idx] = child.style.display;\n child.style.display = 'none';\n }\n return state;\n }\n function show(children, state) {\n for (var idx = 0; idx < children.length; idx++) {\n children[idx].style.display = state[idx];\n }\n }\n function wrapNumber(value) {\n return dataviz.isNumber(value) ? [value] : value;\n }\n var Sparkline = Chart.extend({\n _setElementClass: function (element) {\n dataviz.addClass(element, 'k-sparkline');\n },\n _initElement: function (element) {\n Chart.fn._initElement.call(this, element);\n this._initialWidth = Math.floor(elementSize(element).width);\n },\n _resize: function () {\n var element = this.element;\n var state = hide(element.childNodes);\n this._initialWidth = Math.floor(elementSize(element).width);\n show(element.childNodes, state);\n Chart.fn._resize.call(this);\n },\n _modelOptions: function () {\n var chartOptions = this.options;\n var stage = this._surfaceWrap();\n var displayState = hide(stage.childNodes);\n var space = document.createElement('span');\n space.innerHTML = ' ';\n stage.appendChild(space);\n var options = deepExtend({\n width: this._autoWidth,\n height: elementSize(stage).height,\n transitions: chartOptions.transitions\n }, chartOptions.chartArea, {\n inline: true,\n align: false\n });\n elementSize(stage, {\n width: options.width,\n height: options.height\n });\n stage.removeChild(space);\n show(stage.childNodes, displayState);\n if (this.surface) {\n this.surface.resize();\n }\n return options;\n },\n _surfaceWrap: function () {\n if (!this.stage) {\n var stage = this.stage = document.createElement('span');\n this.element.appendChild(stage);\n }\n return this.stage;\n },\n _createPlotArea: function (skipSeries) {\n var plotArea = Chart.fn._createPlotArea.call(this, skipSeries);\n this._autoWidth = this._initialWidth || this._calculateWidth(plotArea);\n return plotArea;\n },\n _calculateWidth: function (plotArea) {\n var options = this.options;\n var margin = dataviz.getSpacing(options.chartArea.margin);\n var charts = plotArea.charts;\n var stage = this._surfaceWrap();\n var total = 0;\n for (var i = 0; i < charts.length; i++) {\n var currentChart = charts[i];\n var firstSeries = (currentChart.options.series || [])[0];\n if (!firstSeries) {\n continue;\n }\n if (firstSeries.type === constants.BAR) {\n return DEAULT_BAR_WIDTH;\n }\n if (firstSeries.type === constants.BULLET) {\n return DEAULT_BULLET_WIDTH;\n }\n if (firstSeries.type === constants.PIE) {\n return elementSize(stage).height;\n }\n var categoryAxis = currentChart.categoryAxis;\n if (categoryAxis) {\n var pointsCount = categoryAxis.categoriesCount() * (!currentChart.options.isStacked && dataviz.inArray(firstSeries.type, [\n constants.COLUMN,\n constants.VERTICAL_BULLET\n ]) ? currentChart.seriesOptions.length : 1);\n total = Math.max(total, pointsCount);\n }\n }\n var size = total * options.pointWidth;\n if (size > 0) {\n size += margin.left + margin.right;\n }\n return size;\n },\n _createSharedTooltip: function (options) {\n return new SharedTooltip$1(this._plotArea, options);\n }\n });\n Sparkline.normalizeOptions = function (userOptions) {\n var options = wrapNumber(userOptions);\n if (dataviz.isArray(options)) {\n options = { seriesDefaults: { data: options } };\n } else {\n options = deepExtend({}, options);\n }\n if (!options.series) {\n options.series = [{ data: wrapNumber(options.data) }];\n }\n deepExtend(options, { seriesDefaults: { type: options.type } });\n if (dataviz.inArray(options.series[0].type, NO_CROSSHAIR) || dataviz.inArray(options.seriesDefaults.type, NO_CROSSHAIR)) {\n options = deepExtend({}, { categoryAxis: { crosshair: { visible: false } } }, options);\n }\n return options;\n };\n dataviz.setDefaultOptions(Sparkline, {\n chartArea: { margin: 2 },\n axisDefaults: {\n visible: false,\n majorGridLines: { visible: false },\n valueAxis: { narrowRange: true }\n },\n seriesDefaults: {\n type: 'line',\n area: { line: { width: 0.5 } },\n bar: { stack: true },\n padding: 2,\n width: 0.5,\n overlay: { gradient: null },\n highlight: { visible: false },\n border: { width: 0 },\n markers: {\n size: 2,\n visible: false\n }\n },\n tooltip: {\n visible: true,\n shared: true\n },\n categoryAxis: {\n crosshair: {\n visible: true,\n tooltip: { visible: false }\n }\n },\n legend: { visible: false },\n transitions: false,\n pointWidth: 5,\n panes: [{ clip: false }]\n });\n kendo.deepExtend(kendo.dataviz, { Sparkline: Sparkline });\n }());\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/sparkline/sparkline', ['dataviz/sparkline/kendo-sparkline'], f);\n}(function () {\n (function ($) {\n var dataviz = kendo.dataviz;\n var Chart = dataviz.ui.Chart;\n var KendoSparkline = dataviz.Sparkline;\n var ChartInstanceObserver = dataviz.ChartInstanceObserver;\n var extend = $.extend;\n var Sparkline = Chart.extend({\n init: function (element, userOptions) {\n var options = userOptions;\n if (options instanceof kendo.data.ObservableArray) {\n options = { seriesDefaults: { data: options } };\n }\n Chart.fn.init.call(this, element, KendoSparkline.normalizeOptions(options));\n },\n _createChart: function (options, themeOptions) {\n this._instance = new KendoSparkline(this.element[0], options, themeOptions, {\n observer: new ChartInstanceObserver(this),\n sender: this,\n rtl: this._isRtl()\n });\n },\n _createTooltip: function () {\n return new SparklineTooltip(this.element, extend({}, this.options.tooltip, { rtl: this._isRtl() }));\n },\n options: {\n name: 'Sparkline',\n chartArea: { margin: 2 },\n axisDefaults: {\n visible: false,\n majorGridLines: { visible: false },\n valueAxis: { narrowRange: true }\n },\n seriesDefaults: {\n type: 'line',\n area: { line: { width: 0.5 } },\n bar: { stack: true },\n padding: 2,\n width: 0.5,\n overlay: { gradient: null },\n highlight: { visible: false },\n border: { width: 0 },\n markers: {\n size: 2,\n visible: false\n }\n },\n tooltip: {\n visible: true,\n shared: true\n },\n categoryAxis: {\n crosshair: {\n visible: true,\n tooltip: { visible: false }\n }\n },\n legend: { visible: false },\n transitions: false,\n pointWidth: 5,\n panes: [{ clip: false }]\n }\n });\n dataviz.ui.plugin(Sparkline);\n var SparklineTooltip = dataviz.Tooltip.extend({\n options: { animation: { duration: 0 } },\n _hideElement: function () {\n if (this.element) {\n this.element.hide().remove();\n }\n }\n });\n dataviz.SparklineTooltip = SparklineTooltip;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.sparkline', [\n 'dataviz/sparkline/kendo-sparkline',\n 'dataviz/sparkline/sparkline'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.sparkline',\n name: 'Sparkline',\n category: 'dataviz',\n description: 'Sparkline widgets.',\n depends: ['dataviz.chart']\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('util/main', ['kendo.core'], f);\n}(function () {\n (function () {\n var kendo = window.kendo, deepExtend = kendo.deepExtend;\n function sqr(value) {\n return value * value;\n }\n var now = Date.now;\n if (!now) {\n now = function () {\n return new Date().getTime();\n };\n }\n function renderSize(size) {\n if (typeof size !== 'string') {\n size += 'px';\n }\n return size;\n }\n function renderPos(pos) {\n var result = [];\n if (pos) {\n var parts = kendo.toHyphens(pos).split('-');\n for (var i = 0; i < parts.length; i++) {\n result.push('k-pos-' + parts[i]);\n }\n }\n return result.join(' ');\n }\n function arabicToRoman(n) {\n var literals = {\n 1: 'i',\n 10: 'x',\n 100: 'c',\n 2: 'ii',\n 20: 'xx',\n 200: 'cc',\n 3: 'iii',\n 30: 'xxx',\n 300: 'ccc',\n 4: 'iv',\n 40: 'xl',\n 400: 'cd',\n 5: 'v',\n 50: 'l',\n 500: 'd',\n 6: 'vi',\n 60: 'lx',\n 600: 'dc',\n 7: 'vii',\n 70: 'lxx',\n 700: 'dcc',\n 8: 'viii',\n 80: 'lxxx',\n 800: 'dccc',\n 9: 'ix',\n 90: 'xc',\n 900: 'cm',\n 1000: 'm'\n };\n var values = [\n 1000,\n 900,\n 800,\n 700,\n 600,\n 500,\n 400,\n 300,\n 200,\n 100,\n 90,\n 80,\n 70,\n 60,\n 50,\n 40,\n 30,\n 20,\n 10,\n 9,\n 8,\n 7,\n 6,\n 5,\n 4,\n 3,\n 2,\n 1\n ];\n var roman = '';\n while (n > 0) {\n if (n < values[0]) {\n values.shift();\n } else {\n roman += literals[values[0]];\n n -= values[0];\n }\n }\n return roman;\n }\n function romanToArabic(r) {\n r = r.toLowerCase();\n var digits = {\n i: 1,\n v: 5,\n x: 10,\n l: 50,\n c: 100,\n d: 500,\n m: 1000\n };\n var value = 0, prev = 0;\n for (var i = 0; i < r.length; ++i) {\n var v = digits[r.charAt(i)];\n if (!v) {\n return null;\n }\n value += v;\n if (v > prev) {\n value -= 2 * prev;\n }\n prev = v;\n }\n return value;\n }\n function memoize(f) {\n var cache = Object.create(null);\n return function () {\n var id = '';\n for (var i = arguments.length; --i >= 0;) {\n id += ':' + arguments[i];\n }\n return id in cache ? cache[id] : cache[id] = f.apply(this, arguments);\n };\n }\n function isUnicodeLetter(ch) {\n return RX_UNICODE_LETTER.test(ch);\n }\n function withExit(f, obj) {\n try {\n return f.call(obj, function (value) {\n throw new Return(value);\n });\n } catch (ex) {\n if (ex instanceof Return) {\n return ex.value;\n }\n throw ex;\n }\n function Return(value) {\n this.value = value;\n }\n }\n deepExtend(kendo, {\n util: {\n now: now,\n renderPos: renderPos,\n renderSize: renderSize,\n sqr: sqr,\n romanToArabic: romanToArabic,\n arabicToRoman: arabicToRoman,\n memoize: memoize,\n isUnicodeLetter: isUnicodeLetter,\n withExit: withExit\n }\n });\n var RX_UNICODE_LETTER = new RegExp('[\\\\u0041-\\\\u005A\\\\u0061-\\\\u007A\\\\u00AA\\\\u00B5\\\\u00BA\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B2\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]');\n }());\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/location', [\n 'kendo.drawing',\n 'util/main'\n ], f);\n}(function () {\n (function ($, undefined) {\n var math = Math, abs = math.abs, atan = math.atan, atan2 = math.atan2, cos = math.cos, max = math.max, min = math.min, sin = math.sin, tan = math.tan, kendo = window.kendo, Class = kendo.Class, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, util = kendo.drawing.util, defined = util.defined, deg = util.deg, rad = util.rad, round = util.round, valueOrDefault = util.valueOrDefault, sqr = kendo.util.sqr;\n var Location = Class.extend({\n init: function (lat, lng) {\n if (arguments.length === 1) {\n this.lat = lat[0];\n this.lng = lat[1];\n } else {\n this.lat = lat;\n this.lng = lng;\n }\n },\n DISTANCE_ITERATIONS: 100,\n DISTANCE_CONVERGENCE: 1e-12,\n DISTANCE_PRECISION: 2,\n FORMAT: '{0:N6},{1:N6}',\n toArray: function () {\n return [\n this.lat,\n this.lng\n ];\n },\n equals: function (loc) {\n return loc && loc.lat === this.lat && loc.lng === this.lng;\n },\n clone: function () {\n return new Location(this.lat, this.lng);\n },\n round: function (precision) {\n this.lng = round(this.lng, precision);\n this.lat = round(this.lat, precision);\n return this;\n },\n wrap: function () {\n this.lng = this.lng % 180;\n this.lat = this.lat % 90;\n return this;\n },\n distanceTo: function (dest, datum) {\n return this.greatCircleTo(dest, datum).distance;\n },\n destination: function (distance, bearing, datum) {\n bearing = rad(bearing);\n datum = datum || dataviz.map.datums.WGS84;\n var fromLat = rad(this.lat);\n var fromLng = rad(this.lng);\n var dToR = distance / kendo.dataviz.map.datums.WGS84.a;\n var lat = math.asin(sin(fromLat) * cos(dToR) + cos(fromLat) * sin(dToR) * cos(bearing));\n var lng = fromLng + atan2(sin(bearing) * sin(dToR) * cos(fromLat), cos(dToR) - sin(fromLat) * sin(lat));\n return new Location(deg(lat), deg(lng));\n },\n greatCircleTo: function (dest, datum) {\n dest = Location.create(dest);\n datum = datum || dataviz.map.datums.WGS84;\n if (!dest || this.clone().round(8).equals(dest.clone().round(8))) {\n return {\n distance: 0,\n azimuthFrom: 0,\n azimuthTo: 0\n };\n }\n var a = datum.a;\n var b = datum.b;\n var f = datum.f;\n var L = rad(dest.lng - this.lng);\n var U1 = atan((1 - f) * tan(rad(this.lat)));\n var sinU1 = sin(U1);\n var cosU1 = cos(U1);\n var U2 = atan((1 - f) * tan(rad(dest.lat)));\n var sinU2 = sin(U2);\n var cosU2 = cos(U2);\n var lambda = L;\n var prevLambda;\n var i = this.DISTANCE_ITERATIONS;\n var converged = false;\n var sinLambda;\n var cosLambda;\n var sino;\n var cosA2;\n var coso;\n var cos2om;\n var sigma;\n while (!converged && i-- > 0) {\n sinLambda = sin(lambda);\n cosLambda = cos(lambda);\n sino = math.sqrt(sqr(cosU2 * sinLambda) + sqr(cosU1 * sinU2 - sinU1 * cosU2 * cosLambda));\n coso = sinU1 * sinU2 + cosU1 * cosU2 * cosLambda;\n sigma = atan2(sino, coso);\n var sinA = cosU1 * cosU2 * sinLambda / sino;\n cosA2 = 1 - sqr(sinA);\n cos2om = 0;\n if (cosA2 !== 0) {\n cos2om = coso - 2 * sinU1 * sinU2 / cosA2;\n }\n prevLambda = lambda;\n var C = f / 16 * cosA2 * (4 + f * (4 - 3 * cosA2));\n lambda = L + (1 - C) * f * sinA * (sigma + C * sino * (cos2om + C * coso * (-1 + 2 * sqr(cos2om))));\n converged = abs(lambda - prevLambda) <= this.DISTANCE_CONVERGENCE;\n }\n var u2 = cosA2 * (sqr(a) - sqr(b)) / sqr(b);\n var A = 1 + u2 / 16384 * (4096 + u2 * (-768 + u2 * (320 - 175 * u2)));\n var B = u2 / 1024 * (256 + u2 * (-128 + u2 * (74 - 47 * u2)));\n var deltao = B * sino * (cos2om + B / 4 * (coso * (-1 + 2 * sqr(cos2om)) - B / 6 * cos2om * (-3 + 4 * sqr(sino)) * (-3 + 4 * sqr(cos2om))));\n var azimuthFrom = atan2(cosU2 * sinLambda, cosU1 * sinU2 - sinU1 * cosU2 * cosLambda);\n var azimuthTo = atan2(cosU1 * sinLambda, -sinU1 * cosU2 + cosU1 * sinU2 * cosLambda);\n return {\n distance: round(b * A * (sigma - deltao), this.DISTANCE_PRECISION),\n azimuthFrom: deg(azimuthFrom),\n azimuthTo: deg(azimuthTo)\n };\n }\n });\n Location.fn.toString = function () {\n return kendo.format(this.FORMAT, this.lat, this.lng);\n };\n Location.fromLngLat = function (ll) {\n return new Location(ll[1], ll[0]);\n };\n Location.fromLatLng = function (ll) {\n return new Location(ll[0], ll[1]);\n };\n Location.create = function (a, b) {\n if (defined(a)) {\n if (a instanceof Location) {\n return a.clone();\n } else if (arguments.length === 1 && a.length === 2) {\n return Location.fromLatLng(a);\n } else {\n return new Location(a, b);\n }\n }\n };\n var Extent = Class.extend({\n init: function (nw, se) {\n nw = Location.create(nw);\n se = Location.create(se);\n if (nw.lng + 180 > se.lng + 180 && nw.lat + 90 < se.lat + 90) {\n this.se = nw;\n this.nw = se;\n } else {\n this.se = se;\n this.nw = nw;\n }\n },\n contains: function (loc) {\n var nw = this.nw, se = this.se, lng = valueOrDefault(loc.lng, loc[1]), lat = valueOrDefault(loc.lat, loc[0]);\n return loc && lng + 180 >= nw.lng + 180 && lng + 180 <= se.lng + 180 && lat + 90 >= se.lat + 90 && lat + 90 <= nw.lat + 90;\n },\n center: function () {\n var nw = this.nw;\n var se = this.se;\n var lng = nw.lng + (se.lng - nw.lng) / 2;\n var lat = nw.lat + (se.lat - nw.lat) / 2;\n return new Location(lat, lng);\n },\n containsAny: function (locs) {\n var result = false;\n for (var i = 0; i < locs.length; i++) {\n result = result || this.contains(locs[i]);\n }\n return result;\n },\n include: function (loc) {\n var nw = this.nw, se = this.se, lng = valueOrDefault(loc.lng, loc[1]), lat = valueOrDefault(loc.lat, loc[0]);\n nw.lng = min(nw.lng, lng);\n nw.lat = max(nw.lat, lat);\n se.lng = max(se.lng, lng);\n se.lat = min(se.lat, lat);\n },\n includeAll: function (locs) {\n for (var i = 0; i < locs.length; i++) {\n this.include(locs[i]);\n }\n },\n edges: function () {\n var nw = this.nw, se = this.se;\n return {\n nw: this.nw,\n ne: new Location(nw.lat, se.lng),\n se: this.se,\n sw: new Location(se.lat, nw.lng)\n };\n },\n toArray: function () {\n var nw = this.nw, se = this.se;\n return [\n nw,\n new Location(nw.lat, se.lng),\n se,\n new Location(se.lat, nw.lng)\n ];\n },\n overlaps: function (extent) {\n return this.containsAny(extent.toArray()) || extent.containsAny(this.toArray());\n }\n });\n Extent.World = new Extent([\n 90,\n -180\n ], [\n -90,\n 180\n ]);\n Extent.create = function (a, b) {\n if (a instanceof Extent) {\n return a;\n } else if (a && b) {\n return new Extent(a, b);\n } else if (a && a.length === 4 && !b) {\n return new Extent([\n a[0],\n a[1]\n ], [\n a[2],\n a[3]\n ]);\n }\n };\n deepExtend(dataviz, {\n map: {\n Extent: Extent,\n Location: Location\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/attribution', ['kendo.drawing'], f);\n}(function () {\n (function () {\n var kendo = window.kendo, Widget = kendo.ui.Widget, template = kendo.template, util = kendo.drawing.util, valueOrDefault = util.valueOrDefault, defined = util.defined;\n var Attribution = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this._initOptions(options);\n this.items = [];\n this.element.addClass('k-widget k-attribution');\n },\n options: {\n name: 'Attribution',\n separator: ' | ',\n itemTemplate: '#= text #'\n },\n filter: function (extent, zoom) {\n this._extent = extent;\n this._zoom = zoom;\n this._render();\n },\n add: function (item) {\n if (defined(item)) {\n if (typeof item === 'string') {\n item = { text: item };\n }\n this.items.push(item);\n this._render();\n }\n },\n remove: function (text) {\n var result = [];\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n if (item.text !== text) {\n result.push(item);\n }\n }\n this.items = result;\n this._render();\n },\n clear: function () {\n this.items = [];\n this.element.empty();\n },\n _render: function () {\n var result = [];\n var itemTemplate = template(this.options.itemTemplate);\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n var text = this._itemText(item);\n if (text !== '') {\n result.push(itemTemplate({ text: text }));\n }\n }\n if (result.length > 0) {\n this.element.empty().append(result.join(this.options.separator)).show();\n } else {\n this.element.hide();\n }\n },\n _itemText: function (item) {\n var text = '';\n var inZoomLevel = this._inZoomLevel(item.minZoom, item.maxZoom);\n var inArea = this._inArea(item.extent);\n if (inZoomLevel && inArea) {\n text += item.text;\n }\n return text;\n },\n _inZoomLevel: function (min, max) {\n var result = true;\n min = valueOrDefault(min, -Number.MAX_VALUE);\n max = valueOrDefault(max, Number.MAX_VALUE);\n result = this._zoom > min && this._zoom < max;\n return result;\n },\n _inArea: function (area) {\n var result = true;\n if (area) {\n result = area.contains(this._extent);\n }\n return result;\n }\n });\n kendo.dataviz.ui.plugin(Attribution);\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/navigator', ['kendo.core'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var Widget = kendo.ui.Widget;\n var keys = kendo.keys;\n var proxy = $.proxy;\n var NS = '.kendoNavigator';\n function button(dir) {\n return kendo.format('', dir);\n }\n var BUTTONS = button('up') + button('right') + button('down') + button('left');\n var Navigator = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this._initOptions(options);\n this.element.addClass('k-widget k-header k-shadow k-navigator').append(BUTTONS).on('click' + NS, '.k-button', proxy(this, '_click'));\n var parentElement = this.element.parent().closest('[' + kendo.attr('role') + ']');\n this._keyroot = parentElement.length > 0 ? parentElement : this.element;\n this._tabindex(this._keyroot);\n this._keydown = proxy(this._keydown, this);\n this._keyroot.on('keydown', this._keydown);\n },\n options: {\n name: 'Navigator',\n panStep: 1\n },\n events: ['pan'],\n dispose: function () {\n this._keyroot.off('keydown', this._keydown);\n },\n _pan: function (x, y) {\n var panStep = this.options.panStep;\n this.trigger('pan', {\n x: x * panStep,\n y: y * panStep\n });\n },\n _click: function (e) {\n var x = 0;\n var y = 0;\n var button = $(e.currentTarget);\n if (button.is('.k-navigator-up')) {\n y = 1;\n } else if (button.is('.k-navigator-down')) {\n y = -1;\n } else if (button.is('.k-navigator-right')) {\n x = 1;\n } else if (button.is('.k-navigator-left')) {\n x = -1;\n }\n this._pan(x, y);\n e.preventDefault();\n },\n _keydown: function (e) {\n switch (e.which) {\n case keys.UP:\n this._pan(0, 1);\n e.preventDefault();\n break;\n case keys.DOWN:\n this._pan(0, -1);\n e.preventDefault();\n break;\n case keys.RIGHT:\n this._pan(1, 0);\n e.preventDefault();\n break;\n case keys.LEFT:\n this._pan(-1, 0);\n e.preventDefault();\n break;\n }\n }\n });\n kendo.dataviz.ui.plugin(Navigator);\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/zoom', ['kendo.core'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var Widget = kendo.ui.Widget;\n var keys = kendo.keys;\n var proxy = $.proxy;\n function button(dir, iconClass) {\n return kendo.format('', dir, iconClass);\n }\n var NS = '.kendoZoomControl';\n var BUTTONS = button('in', 'k-i-plus') + button('out', 'k-i-minus');\n var PLUS = 187;\n var MINUS = 189;\n var FF_PLUS = 61;\n var FF_MINUS = 173;\n var ZoomControl = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this._initOptions(options);\n this.element.addClass('k-widget k-zoom-control k-button-wrap k-buttons-horizontal k-button-group k-group-horizontal').append(BUTTONS).on('click' + NS, '.k-button', proxy(this, '_click'));\n var parentElement = this.element.parent().closest('[' + kendo.attr('role') + ']');\n this._keyroot = parentElement.length > 0 ? parentElement : this.element;\n this._tabindex(this._keyroot);\n this._keydown = proxy(this._keydown, this);\n this._keyroot.on('keydown', this._keydown);\n },\n options: {\n name: 'ZoomControl',\n zoomStep: 1\n },\n events: ['change'],\n _change: function (dir) {\n var zoomStep = this.options.zoomStep;\n this.trigger('change', { delta: dir * zoomStep });\n },\n _click: function (e) {\n var button = $(e.currentTarget);\n var dir = 1;\n if (button.is('.k-zoom-out')) {\n dir = -1;\n }\n this._change(dir);\n e.preventDefault();\n },\n _keydown: function (e) {\n switch (e.which) {\n case keys.NUMPAD_PLUS:\n case PLUS:\n case FF_PLUS:\n this._change(1);\n break;\n case keys.NUMPAD_MINUS:\n case MINUS:\n case FF_MINUS:\n this._change(-1);\n break;\n }\n }\n });\n kendo.dataviz.ui.plugin(ZoomControl);\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/crs', [\n 'dataviz/map/location',\n 'kendo.drawing'\n ], f);\n}(function () {\n (function ($, undefined) {\n var math = Math, atan = math.atan, exp = math.exp, pow = math.pow, sin = math.sin, log = math.log, tan = math.tan, kendo = window.kendo, Class = kendo.Class, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, g = kendo.geometry, Point = g.Point, map = dataviz.map, Location = map.Location, util = kendo.drawing.util, rad = util.rad, deg = util.deg, limit = util.limitValue;\n var PI = math.PI, PI_DIV_2 = PI / 2, PI_DIV_4 = PI / 4, DEG_TO_RAD = PI / 180;\n var WGS84 = {\n a: 6378137,\n b: 6356752.314245179,\n f: 0.0033528106647474805,\n e: 0.08181919084262149\n };\n var Mercator = Class.extend({\n init: function (options) {\n this._initOptions(options);\n },\n MAX_LNG: 180,\n MAX_LAT: 85.0840590501,\n INVERSE_ITERATIONS: 15,\n INVERSE_CONVERGENCE: 1e-12,\n options: {\n centralMeridian: 0,\n datum: WGS84\n },\n forward: function (loc, clamp) {\n var proj = this, options = proj.options, datum = options.datum, r = datum.a, lng0 = options.centralMeridian, lat = limit(loc.lat, -proj.MAX_LAT, proj.MAX_LAT), lng = clamp ? limit(loc.lng, -proj.MAX_LNG, proj.MAX_LNG) : loc.lng, x = rad(lng - lng0) * r, y = proj._projectLat(lat);\n return new Point(x, y);\n },\n _projectLat: function (lat) {\n var datum = this.options.datum, ecc = datum.e, r = datum.a, y = rad(lat), ts = tan(PI_DIV_4 + y / 2), con = ecc * sin(y), p = pow((1 - con) / (1 + con), ecc / 2);\n return r * log(ts * p);\n },\n inverse: function (point, clamp) {\n var proj = this, options = proj.options, datum = options.datum, r = datum.a, lng0 = options.centralMeridian, lng = point.x / (DEG_TO_RAD * r) + lng0, lat = limit(proj._inverseY(point.y), -proj.MAX_LAT, proj.MAX_LAT);\n if (clamp) {\n lng = limit(lng, -proj.MAX_LNG, proj.MAX_LNG);\n }\n return new Location(lat, lng);\n },\n _inverseY: function (y) {\n var proj = this, datum = proj.options.datum, r = datum.a, ecc = datum.e, ecch = ecc / 2, ts = exp(-y / r), phi = PI_DIV_2 - 2 * atan(ts), i;\n for (i = 0; i <= proj.INVERSE_ITERATIONS; i++) {\n var con = ecc * sin(phi), p = pow((1 - con) / (1 + con), ecch), dphi = PI_DIV_2 - 2 * atan(ts * p) - phi;\n phi += dphi;\n if (math.abs(dphi) <= proj.INVERSE_CONVERGENCE) {\n break;\n }\n }\n return deg(phi);\n }\n });\n var SphericalMercator = Mercator.extend({\n MAX_LAT: 85.0511287798,\n _projectLat: function (lat) {\n var r = this.options.datum.a, y = rad(lat), ts = tan(PI_DIV_4 + y / 2);\n return r * log(ts);\n },\n _inverseY: function (y) {\n var r = this.options.datum.a, ts = exp(-y / r);\n return deg(PI_DIV_2 - 2 * atan(ts));\n }\n });\n var Equirectangular = Class.extend({\n forward: function (loc) {\n return new Point(loc.lng, loc.lat);\n },\n inverse: function (point) {\n return new Location(point.y, point.x);\n }\n });\n var EPSG3857 = Class.extend({\n init: function () {\n var crs = this, proj = crs._proj = new SphericalMercator();\n var c = this.c = 2 * PI * proj.options.datum.a;\n this._tm = g.transform().translate(0.5, 0.5).scale(1 / c, -1 / c);\n this._itm = g.transform().scale(c, -c).translate(-0.5, -0.5);\n },\n toPoint: function (loc, scale, clamp) {\n var point = this._proj.forward(loc, clamp);\n return point.transform(this._tm).scale(scale || 1);\n },\n toLocation: function (point, scale, clamp) {\n point = point.clone().scale(1 / (scale || 1)).transform(this._itm);\n return this._proj.inverse(point, clamp);\n }\n });\n var EPSG3395 = Class.extend({\n init: function () {\n this._proj = new Mercator();\n },\n toPoint: function (loc) {\n return this._proj.forward(loc);\n },\n toLocation: function (point) {\n return this._proj.inverse(point);\n }\n });\n var EPSG4326 = Class.extend({\n init: function () {\n this._proj = new Equirectangular();\n },\n toPoint: function (loc) {\n return this._proj.forward(loc);\n },\n toLocation: function (point) {\n return this._proj.inverse(point);\n }\n });\n deepExtend(dataviz, {\n map: {\n crs: {\n EPSG3395: EPSG3395,\n EPSG3857: EPSG3857,\n EPSG4326: EPSG4326\n },\n datums: { WGS84: WGS84 },\n projections: {\n Equirectangular: Equirectangular,\n Mercator: Mercator,\n SphericalMercator: SphericalMercator\n }\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/base', [\n 'kendo.core',\n 'dataviz/map/location'\n ], f);\n}(function () {\n (function ($, undefined) {\n var proxy = $.proxy, kendo = window.kendo, Class = kendo.Class, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, Extent = dataviz.map.Extent, util = kendo.drawing.util, defined = util.defined;\n var Layer = Class.extend({\n init: function (map, options) {\n this._initOptions(options);\n this.map = map;\n this.element = $('
    ').css({\n 'zIndex': this.options.zIndex,\n 'opacity': this.options.opacity\n }).appendTo(map.scrollElement);\n this._beforeReset = proxy(this._beforeReset, this);\n this._reset = proxy(this._reset, this);\n this._resize = proxy(this._resize, this);\n this._panEnd = proxy(this._panEnd, this);\n this._activate();\n this._updateAttribution();\n },\n destroy: function () {\n this._deactivate();\n },\n show: function () {\n this.reset();\n this._activate();\n this._applyExtent(true);\n },\n hide: function () {\n this._deactivate();\n this._setVisibility(false);\n },\n reset: function () {\n this._beforeReset();\n this._reset();\n },\n _reset: function () {\n this._applyExtent();\n },\n _beforeReset: $.noop,\n _resize: $.noop,\n _panEnd: function () {\n this._applyExtent();\n },\n _applyExtent: function () {\n var options = this.options;\n var zoom = this.map.zoom();\n var matchMinZoom = !defined(options.minZoom) || zoom >= options.minZoom;\n var matchMaxZoom = !defined(options.maxZoom) || zoom <= options.maxZoom;\n var extent = Extent.create(options.extent);\n var inside = !extent || extent.overlaps(this.map.extent());\n this._setVisibility(matchMinZoom && matchMaxZoom && inside);\n },\n _setVisibility: function (visible) {\n this.element.css('display', visible ? '' : 'none');\n },\n _activate: function () {\n var map = this.map;\n map.bind('beforeReset', this._beforeReset);\n map.bind('reset', this._reset);\n map.bind('resize', this._resize);\n map.bind('panEnd', this._panEnd);\n },\n _deactivate: function () {\n var map = this.map;\n map.unbind('beforeReset', this._beforeReset);\n map.unbind('reset', this._reset);\n map.unbind('resize', this._resize);\n map.unbind('panEnd', this._panEnd);\n },\n _updateAttribution: function () {\n var attr = this.map.attribution;\n if (attr) {\n attr.add(this.options.attribution);\n }\n }\n });\n deepExtend(dataviz, { map: { layers: { Layer: Layer } } });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/shape', [\n 'dataviz/map/layers/base',\n 'dataviz/map/location'\n ], f);\n}(function () {\n (function ($, undefined) {\n var proxy = $.proxy, kendo = window.kendo, Class = kendo.Class, DataSource = kendo.data.DataSource, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, g = kendo.geometry, d = kendo.drawing, Group = d.Group, last = d.util.last, defined = d.util.defined, map = dataviz.map, Location = map.Location, Layer = map.layers.Layer;\n var ShapeLayer = Layer.extend({\n init: function (map, options) {\n this._pan = proxy(this._pan, this);\n Layer.fn.init.call(this, map, options);\n this.surface = d.Surface.create(this.element, {\n width: map.scrollElement.width(),\n height: map.scrollElement.height()\n });\n this._initRoot();\n this.movable = new kendo.ui.Movable(this.surface.element);\n this._markers = [];\n this._click = this._handler('shapeClick');\n this.surface.bind('click', this._click);\n this._mouseenter = this._handler('shapeMouseEnter');\n this.surface.bind('mouseenter', this._mouseenter);\n this._mouseleave = this._handler('shapeMouseLeave');\n this.surface.bind('mouseleave', this._mouseleave);\n this._initDataSource();\n },\n options: { autoBind: true },\n destroy: function () {\n Layer.fn.destroy.call(this);\n this.surface.destroy();\n this.dataSource.unbind('change', this._dataChange);\n },\n setDataSource: function (dataSource) {\n if (this.dataSource) {\n this.dataSource.unbind('change', this._dataChange);\n }\n this.dataSource = kendo.data.DataSource.create(dataSource);\n this.dataSource.bind('change', this._dataChange);\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _reset: function () {\n Layer.fn._reset.call(this);\n this._translateSurface();\n if (this._data) {\n this._load(this._data);\n }\n },\n _initRoot: function () {\n this._root = new Group();\n this.surface.draw(this._root);\n },\n _beforeReset: function () {\n this.surface.clear();\n this._initRoot();\n },\n _resize: function () {\n this.surface.size(this.map.size());\n },\n _initDataSource: function () {\n var dsOptions = this.options.dataSource;\n this._dataChange = proxy(this._dataChange, this);\n this.dataSource = DataSource.create(dsOptions).bind('change', this._dataChange);\n if (dsOptions && this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _dataChange: function (e) {\n this._data = e.sender.view();\n this._load(this._data);\n },\n _load: function (data) {\n this._clearMarkers();\n if (!this._loader) {\n this._loader = new GeoJSONLoader(this.map, this.options.style, this);\n }\n var container = new Group();\n for (var i = 0; i < data.length; i++) {\n var shape = this._loader.parse(data[i]);\n if (shape) {\n container.append(shape);\n }\n }\n this._root.clear();\n this._root.append(container);\n },\n shapeCreated: function (shape) {\n var cancelled = false;\n if (shape instanceof d.Circle) {\n cancelled = defined(this._createMarker(shape));\n }\n if (!cancelled) {\n var args = {\n layer: this,\n shape: shape\n };\n cancelled = this.map.trigger('shapeCreated', args);\n }\n return cancelled;\n },\n featureCreated: function (e) {\n e.layer = this;\n this.map.trigger('shapeFeatureCreated', e);\n },\n _createMarker: function (shape) {\n var marker = this.map.markers.bind({ location: shape.location }, shape.dataItem);\n if (marker) {\n this._markers.push(marker);\n }\n return marker;\n },\n _clearMarkers: function () {\n for (var i = 0; i < this._markers.length; i++) {\n this.map.markers.remove(this._markers[i]);\n }\n this._markers = [];\n },\n _pan: function () {\n if (!this._panning) {\n this._panning = true;\n this.surface.suspendTracking();\n }\n },\n _panEnd: function (e) {\n Layer.fn._panEnd.call(this, e);\n this._translateSurface();\n this.surface.resumeTracking();\n this._panning = false;\n },\n _translateSurface: function () {\n var map = this.map;\n var nw = map.locationToView(map.extent().nw);\n if (this.surface.translate) {\n this.surface.translate(nw);\n this.movable.moveTo({\n x: nw.x,\n y: nw.y\n });\n }\n },\n _handler: function (event) {\n var layer = this;\n return function (e) {\n if (e.element) {\n var args = {\n layer: layer,\n shape: e.element,\n originalEvent: e.originalEvent\n };\n layer.map.trigger(event, args);\n }\n };\n },\n _activate: function () {\n Layer.fn._activate.call(this);\n this.map.bind('pan', this._pan);\n },\n _deactivate: function () {\n Layer.fn._deactivate.call(this);\n this.map.unbind('pan', this._pan);\n }\n });\n var GeoJSONLoader = Class.extend({\n init: function (locator, defaultStyle, observer) {\n this.observer = observer;\n this.locator = locator;\n this.style = defaultStyle;\n },\n parse: function (item) {\n var root = new Group();\n var unwrap = true;\n if (item.type === 'Feature') {\n unwrap = false;\n this._loadGeometryTo(root, item.geometry, item);\n this._featureCreated(root, item);\n } else {\n this._loadGeometryTo(root, item, item);\n }\n if (unwrap && root.children.length < 2) {\n root = root.children[0];\n }\n return root;\n },\n _shapeCreated: function (shape) {\n var cancelled = false;\n if (this.observer && this.observer.shapeCreated) {\n cancelled = this.observer.shapeCreated(shape);\n }\n return cancelled;\n },\n _featureCreated: function (group, dataItem) {\n if (this.observer && this.observer.featureCreated) {\n this.observer.featureCreated({\n group: group,\n dataItem: dataItem,\n properties: dataItem.properties\n });\n }\n },\n _loadGeometryTo: function (container, geometry, dataItem) {\n var coords = geometry.coordinates;\n var i;\n var path;\n switch (geometry.type) {\n case 'LineString':\n path = this._loadPolygon(container, [coords], dataItem);\n this._setLineFill(path);\n break;\n case 'MultiLineString':\n for (i = 0; i < coords.length; i++) {\n path = this._loadPolygon(container, [coords[i]], dataItem);\n this._setLineFill(path);\n }\n break;\n case 'Polygon':\n this._loadPolygon(container, coords, dataItem);\n break;\n case 'MultiPolygon':\n for (i = 0; i < coords.length; i++) {\n this._loadPolygon(container, coords[i], dataItem);\n }\n break;\n case 'Point':\n this._loadPoint(container, coords, dataItem);\n break;\n case 'MultiPoint':\n for (i = 0; i < coords.length; i++) {\n this._loadPoint(container, coords[i], dataItem);\n }\n break;\n }\n },\n _setLineFill: function (path) {\n var segments = path.segments;\n if (segments.length < 4 || !segments[0].anchor().equals(last(segments).anchor())) {\n path.options.fill = null;\n }\n },\n _loadShape: function (container, shape) {\n if (!this._shapeCreated(shape)) {\n container.append(shape);\n }\n return shape;\n },\n _loadPolygon: function (container, rings, dataItem) {\n var shape = this._buildPolygon(rings);\n shape.dataItem = dataItem;\n return this._loadShape(container, shape);\n },\n _buildPolygon: function (rings) {\n var type = rings.length > 1 ? d.MultiPath : d.Path;\n var path = new type(this.style);\n for (var i = 0; i < rings.length; i++) {\n for (var j = 0; j < rings[i].length; j++) {\n var point = this.locator.locationToView(Location.fromLngLat(rings[i][j]));\n if (j === 0) {\n path.moveTo(point.x, point.y);\n } else {\n path.lineTo(point.x, point.y);\n }\n }\n }\n return path;\n },\n _loadPoint: function (container, coords, dataItem) {\n var location = Location.fromLngLat(coords);\n var point = this.locator.locationToView(location);\n var circle = new g.Circle(point, 10);\n var shape = new d.Circle(circle, this.style);\n shape.dataItem = dataItem;\n shape.location = location;\n return this._loadShape(container, shape);\n }\n });\n deepExtend(kendo.data, {\n schemas: {\n geojson: {\n type: 'json',\n data: function (data) {\n if (data.type === 'FeatureCollection') {\n return data.features;\n }\n if (data.type === 'GeometryCollection') {\n return data.geometries;\n }\n return data;\n }\n }\n },\n transports: { geojson: { read: { dataType: 'json' } } }\n });\n deepExtend(dataviz, {\n map: {\n layers: {\n shape: ShapeLayer,\n ShapeLayer: ShapeLayer\n },\n GeoJSONLoader: GeoJSONLoader\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/bubble', ['dataviz/map/layers/shape'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, getter = kendo.getter, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, g = kendo.geometry, d = kendo.drawing, util = d.util, defined = util.defined, map = dataviz.map, Location = map.Location, ShapeLayer = map.layers.ShapeLayer;\n var BubbleLayer = ShapeLayer.extend({\n options: {\n autoBind: true,\n locationField: 'location',\n valueField: 'value',\n minSize: 0,\n maxSize: 100,\n scale: 'sqrt',\n symbol: 'circle'\n },\n _load: function (data) {\n this.surface.clear();\n if (data.length === 0) {\n return;\n }\n var opt = this.options;\n var getValue = getter(opt.valueField);\n data = data.slice(0);\n data.sort(function (a, b) {\n return getValue(b) - getValue(a);\n });\n var scaleType = this._scaleType();\n var scale;\n for (var i = 0; i < data.length; i++) {\n var dataItem = data[i];\n var location = getter(opt.locationField)(dataItem);\n var value = getter(opt.valueField)(dataItem);\n if (defined(location) && defined(value)) {\n if (!scale) {\n scale = new scaleType([\n 0,\n value\n ], [\n opt.minSize,\n opt.maxSize\n ]);\n }\n location = Location.create(location);\n var center = this.map.locationToView(location);\n var size = scale.map(value);\n var symbol = this._createSymbol({\n center: center,\n size: size,\n style: opt.style,\n dataItem: dataItem,\n location: location\n });\n symbol.dataItem = dataItem;\n symbol.location = location;\n symbol.value = value;\n this._drawSymbol(symbol);\n }\n }\n },\n _scaleType: function () {\n var scale = this.options.scale;\n if (kendo.isFunction(scale)) {\n return scale;\n }\n return dataviz.map.scales[scale];\n },\n _createSymbol: function (args) {\n var symbol = this.options.symbol;\n if (!kendo.isFunction(symbol)) {\n symbol = dataviz.map.symbols[symbol];\n }\n return symbol(args);\n },\n _drawSymbol: function (shape) {\n var args = {\n layer: this,\n shape: shape\n };\n var cancelled = this.map.trigger('shapeCreated', args);\n if (!cancelled) {\n this.surface.draw(shape);\n }\n }\n });\n var SqrtScale = kendo.Class.extend({\n init: function (domain, range) {\n this._domain = domain;\n this._range = range;\n var domainRange = Math.sqrt(domain[1]) - Math.sqrt(domain[0]);\n var outputRange = range[1] - range[0];\n this._ratio = outputRange / domainRange;\n },\n map: function (value) {\n var rel = (Math.sqrt(value) - Math.sqrt(this._domain[0])) * this._ratio;\n return this._range[0] + rel;\n }\n });\n var Symbols = {\n circle: function (args) {\n var geo = new g.Circle(args.center, args.size / 2);\n return new d.Circle(geo, args.style);\n },\n square: function (args) {\n var path = new d.Path(args.style);\n var halfSize = args.size / 2;\n var center = args.center;\n path.moveTo(center.x - halfSize, center.y - halfSize).lineTo(center.x + halfSize, center.y - halfSize).lineTo(center.x + halfSize, center.y + halfSize).lineTo(center.x - halfSize, center.y + halfSize).close();\n return path;\n }\n };\n deepExtend(dataviz, {\n map: {\n layers: {\n bubble: BubbleLayer,\n BubbleLayer: BubbleLayer\n },\n scales: { sqrt: SqrtScale },\n symbols: Symbols\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/tile', [\n 'dataviz/map/layers/base',\n 'dataviz/map/location'\n ], f);\n}(function () {\n (function ($, undefined) {\n var math = Math, proxy = $.proxy, kendo = window.kendo, Class = kendo.Class, template = kendo.template, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, g = kendo.geometry, Point = g.Point, Layer = dataviz.map.layers.Layer, util = kendo.util, renderSize = util.renderSize, drawingUtil = kendo.drawing.util, round = drawingUtil.round, limit = drawingUtil.limitValue;\n var TileLayer = Layer.extend({\n init: function (map, options) {\n Layer.fn.init.call(this, map, options);\n if (typeof this.options.subdomains === 'string') {\n this.options.subdomains = this.options.subdomains.split('');\n }\n var viewType = this._viewType();\n this._view = new viewType(this.element, this.options);\n },\n destroy: function () {\n Layer.fn.destroy.call(this);\n this._view.destroy();\n this._view = null;\n },\n _beforeReset: function () {\n var map = this.map;\n var origin = map.locationToLayer(map.extent().nw).round();\n this._view.viewOrigin(origin);\n },\n _reset: function () {\n Layer.fn._reset.call(this);\n this._updateView();\n this._view.reset();\n },\n _viewType: function () {\n return TileView;\n },\n _activate: function () {\n Layer.fn._activate.call(this);\n if (!kendo.support.mobileOS) {\n if (!this._pan) {\n this._pan = kendo.throttle(proxy(this._render, this), 100);\n }\n this.map.bind('pan', this._pan);\n }\n },\n _deactivate: function () {\n Layer.fn._deactivate.call(this);\n if (this._pan) {\n this.map.unbind('pan', this._pan);\n }\n },\n _updateView: function () {\n var view = this._view, map = this.map, extent = map.extent(), extentToPoint = {\n nw: map.locationToLayer(extent.nw).round(),\n se: map.locationToLayer(extent.se).round()\n };\n view.center(map.locationToLayer(map.center()));\n view.extent(extentToPoint);\n view.zoom(map.zoom());\n },\n _resize: function () {\n this._render();\n },\n _panEnd: function (e) {\n Layer.fn._panEnd.call(this, e);\n this._render();\n },\n _render: function () {\n this._updateView();\n this._view.render();\n }\n });\n var TileView = Class.extend({\n init: function (element, options) {\n this.element = element;\n this._initOptions(options);\n this.pool = new TilePool();\n },\n options: {\n tileSize: 256,\n subdomains: [\n 'a',\n 'b',\n 'c'\n ],\n urlTemplate: ''\n },\n center: function (center) {\n this._center = center;\n },\n extent: function (extent) {\n this._extent = extent;\n },\n viewOrigin: function (origin) {\n this._viewOrigin = origin;\n },\n zoom: function (zoom) {\n this._zoom = zoom;\n },\n pointToTileIndex: function (point) {\n return new Point(math.floor(point.x / this.options.tileSize), math.floor(point.y / this.options.tileSize));\n },\n tileCount: function () {\n var size = this.size(), firstTileIndex = this.pointToTileIndex(this._extent.nw), nw = this._extent.nw, point = this.indexToPoint(firstTileIndex).translate(-nw.x, -nw.y);\n return {\n x: math.ceil((math.abs(point.x) + size.width) / this.options.tileSize),\n y: math.ceil((math.abs(point.y) + size.height) / this.options.tileSize)\n };\n },\n size: function () {\n var nw = this._extent.nw, se = this._extent.se, diff = se.clone().translate(-nw.x, -nw.y);\n return {\n width: diff.x,\n height: diff.y\n };\n },\n indexToPoint: function (index) {\n var x = index.x, y = index.y;\n return new Point(x * this.options.tileSize, y * this.options.tileSize);\n },\n subdomainText: function () {\n var subdomains = this.options.subdomains;\n return subdomains[this.subdomainIndex++ % subdomains.length];\n },\n destroy: function () {\n this.element.empty();\n this.pool.empty();\n },\n reset: function () {\n this.pool.reset();\n this.subdomainIndex = 0;\n this.render();\n },\n render: function () {\n var size = this.tileCount(), firstTileIndex = this.pointToTileIndex(this._extent.nw), tile, x, y;\n for (x = 0; x < size.x; x++) {\n for (y = 0; y < size.y; y++) {\n tile = this.createTile({\n x: firstTileIndex.x + x,\n y: firstTileIndex.y + y\n });\n if (!tile.visible) {\n tile.show();\n }\n }\n }\n },\n createTile: function (currentIndex) {\n var options = this.tileOptions(currentIndex);\n var tile = this.pool.get(this._center, options);\n if (tile.element.parent().length === 0) {\n this.element.append(tile.element);\n }\n return tile;\n },\n tileOptions: function (currentIndex) {\n var index = this.wrapIndex(currentIndex), point = this.indexToPoint(currentIndex), origin = this._viewOrigin, offset = point.clone().translate(-origin.x, -origin.y);\n return {\n index: index,\n currentIndex: currentIndex,\n point: point,\n offset: roundPoint(offset),\n zoom: this._zoom,\n size: this.options.tileSize,\n subdomain: this.subdomainText(),\n urlTemplate: this.options.urlTemplate,\n errorUrlTemplate: this.options.errorUrlTemplate\n };\n },\n wrapIndex: function (index) {\n var boundary = math.pow(2, this._zoom);\n return {\n x: this.wrapValue(index.x, boundary),\n y: limit(index.y, 0, boundary - 1)\n };\n },\n wrapValue: function (value, boundary) {\n var remainder = math.abs(value) % boundary;\n if (value >= 0) {\n value = remainder;\n } else {\n value = boundary - (remainder === 0 ? boundary : remainder);\n }\n return value;\n }\n });\n var ImageTile = Class.extend({\n init: function (id, options) {\n this.id = id;\n this.visible = true;\n this._initOptions(options);\n this.createElement();\n this.show();\n },\n options: {\n urlTemplate: '',\n errorUrlTemplate: ''\n },\n createElement: function () {\n this.element = $('\\'\\'').css({\n width: this.options.size,\n height: this.options.size\n }).on('error', proxy(function (e) {\n if (this.errorUrl()) {\n e.target.setAttribute('src', this.errorUrl());\n } else {\n e.target.removeAttribute('src');\n }\n }, this));\n },\n show: function () {\n var element = this.element[0];\n element.style.top = renderSize(this.options.offset.y);\n element.style.left = renderSize(this.options.offset.x);\n var url = this.url();\n if (url) {\n element.setAttribute('src', url);\n }\n element.style.visibility = 'visible';\n this.visible = true;\n },\n hide: function () {\n this.element[0].style.visibility = 'hidden';\n this.visible = false;\n },\n url: function () {\n var urlResult = template(this.options.urlTemplate);\n return urlResult(this.urlOptions());\n },\n errorUrl: function () {\n var urlResult = template(this.options.errorUrlTemplate);\n return urlResult(this.urlOptions());\n },\n urlOptions: function () {\n var options = this.options;\n return {\n zoom: options.zoom,\n subdomain: options.subdomain,\n z: options.zoom,\n x: options.index.x,\n y: options.index.y,\n s: options.subdomain,\n quadkey: options.quadkey,\n q: options.quadkey,\n culture: options.culture,\n c: options.culture\n };\n },\n destroy: function () {\n if (this.element) {\n this.element.remove();\n this.element = null;\n }\n }\n });\n var TilePool = Class.extend({\n init: function () {\n this._items = [];\n },\n options: { maxSize: 100 },\n get: function (center, options) {\n if (this._items.length >= this.options.maxSize) {\n this._remove(center);\n }\n return this._create(options);\n },\n empty: function () {\n var items = this._items;\n for (var i = 0; i < items.length; i++) {\n items[i].destroy();\n }\n this._items = [];\n },\n reset: function () {\n var items = this._items;\n for (var i = 0; i < items.length; i++) {\n items[i].hide();\n }\n },\n _create: function (options) {\n var items = this._items;\n var tile;\n var id = util.hashKey(options.point.toString() + options.offset.toString() + options.zoom + options.urlTemplate);\n for (var i = 0; i < items.length; i++) {\n if (items[i].id === id) {\n tile = items[i];\n break;\n }\n }\n if (tile) {\n tile.show();\n } else {\n tile = new ImageTile(id, options);\n this._items.push(tile);\n }\n return tile;\n },\n _remove: function (center) {\n var items = this._items;\n var maxDist = -1;\n var index = -1;\n for (var i = 0; i < items.length; i++) {\n var dist = items[i].options.point.distanceTo(center);\n if (dist > maxDist && !items[i].visible) {\n index = i;\n maxDist = dist;\n }\n }\n if (index !== -1) {\n items[index].destroy();\n items.splice(index, 1);\n }\n }\n });\n function roundPoint(point) {\n return new Point(round(point.x), round(point.y));\n }\n deepExtend(dataviz, {\n map: {\n layers: {\n tile: TileLayer,\n TileLayer: TileLayer,\n ImageTile: ImageTile,\n TilePool: TilePool,\n TileView: TileView\n }\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/bing', ['dataviz/map/layers/tile'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, defined = kendo.drawing.util.defined, Extent = dataviz.map.Extent, Location = dataviz.map.Location, TileLayer = dataviz.map.layers.TileLayer, TileView = dataviz.map.layers.TileView;\n var BingLayer = TileLayer.extend({\n init: function (map, options) {\n this.options.baseUrl = this._scheme() + '://dev.virtualearth.net/REST/v1/Imagery/Metadata/';\n TileLayer.fn.init.call(this, map, options);\n this._onMetadata = $.proxy(this._onMetadata, this);\n this._fetchMetadata();\n },\n options: { imagerySet: 'road' },\n _fetchMetadata: function () {\n var options = this.options;\n if (!options.key) {\n throw new Error('Bing tile layer: API key is required');\n }\n $.ajax({\n url: options.baseUrl + options.imagerySet,\n data: {\n output: 'json',\n include: 'ImageryProviders',\n key: options.key,\n uriScheme: this._scheme()\n },\n type: 'get',\n dataType: 'jsonp',\n jsonp: 'jsonp',\n success: this._onMetadata\n });\n },\n _scheme: function (proto) {\n proto = proto || window.location.protocol;\n return proto.replace(':', '') === 'https' ? 'https' : 'http';\n },\n _onMetadata: function (data) {\n if (data && data.resourceSets.length) {\n var resource = this.resource = data.resourceSets[0].resources[0];\n deepExtend(this._view.options, {\n urlTemplate: resource.imageUrl.replace('{subdomain}', '#= subdomain #').replace('{quadkey}', '#= quadkey #').replace('{culture}', '#= culture #'),\n subdomains: resource.imageUrlSubdomains\n });\n var options = this.options;\n if (!defined(options.minZoom)) {\n options.minZoom = resource.zoomMin;\n }\n if (!defined(options.maxZoom)) {\n options.maxZoom = resource.zoomMax;\n }\n this._addAttribution();\n if (this.element.css('display') !== 'none') {\n this._reset();\n }\n }\n },\n _viewType: function () {\n return BingView;\n },\n _addAttribution: function () {\n var attr = this.map.attribution;\n if (attr) {\n var items = this.resource.imageryProviders;\n if (items) {\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n for (var y = 0; y < item.coverageAreas.length; y++) {\n var area = item.coverageAreas[y];\n attr.add({\n text: item.attribution,\n minZoom: area.zoomMin,\n maxZoom: area.zoomMax,\n extent: new Extent(new Location(area.bbox[2], area.bbox[1]), new Location(area.bbox[0], area.bbox[3]))\n });\n }\n }\n }\n }\n },\n imagerySet: function (value) {\n if (value) {\n this.options.imagerySet = value;\n this.map.attribution.clear();\n this._fetchMetadata();\n } else {\n return this.options.imagerySet;\n }\n }\n });\n var BingView = TileView.extend({\n options: { culture: 'en-US' },\n tileOptions: function (currentIndex) {\n var options = TileView.fn.tileOptions.call(this, currentIndex);\n options.culture = this.options.culture;\n options.quadkey = this.tileQuadKey(this.wrapIndex(currentIndex));\n return options;\n },\n tileQuadKey: function (index) {\n var quadKey = '', digit, mask, i;\n for (i = this._zoom; i > 0; i--) {\n digit = 0;\n mask = 1 << i - 1;\n if ((index.x & mask) !== 0) {\n digit++;\n }\n if ((index.y & mask) !== 0) {\n digit += 2;\n }\n quadKey += digit;\n }\n return quadKey;\n }\n });\n deepExtend(dataviz, {\n map: {\n layers: {\n bing: BingLayer,\n BingLayer: BingLayer,\n BingView: BingView\n }\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/marker', [\n 'dataviz/map/layers/base',\n 'dataviz/map/location',\n 'kendo.data',\n 'kendo.tooltip'\n ], f);\n}(function () {\n (function ($, undefined) {\n var doc = document, math = Math, indexOf = $.inArray, proxy = $.proxy, kendo = window.kendo, Class = kendo.Class, DataSource = kendo.data.DataSource, Tooltip = kendo.ui.Tooltip, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, map = dataviz.map, Location = map.Location, Layer = map.layers.Layer;\n var MarkerLayer = Layer.extend({\n init: function (map, options) {\n Layer.fn.init.call(this, map, options);\n this._markerClick = proxy(this._markerClick, this);\n this.element.on('click', '.k-marker', this._markerClick);\n this.items = [];\n this._initDataSource();\n },\n destroy: function () {\n Layer.fn.destroy.call(this);\n this.element.off('click', '.k-marker', this._markerClick);\n this.dataSource.unbind('change', this._dataChange);\n this.clear();\n },\n options: {\n zIndex: 1000,\n autoBind: true,\n dataSource: {},\n locationField: 'location',\n titleField: 'title'\n },\n add: function (arg) {\n if ($.isArray(arg)) {\n for (var i = 0; i < arg.length; i++) {\n this._addOne(arg[i]);\n }\n } else {\n return this._addOne(arg);\n }\n },\n remove: function (marker) {\n marker.destroy();\n var index = indexOf(marker, this.items);\n if (index > -1) {\n this.items.splice(index, 1);\n }\n },\n clear: function () {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].destroy();\n }\n this.items = [];\n },\n update: function (marker) {\n var loc = marker.location();\n if (loc) {\n marker.showAt(this.map.locationToView(loc));\n var args = {\n marker: marker,\n layer: this\n };\n this.map.trigger('markerActivate', args);\n }\n },\n _reset: function () {\n Layer.fn._reset.call(this);\n var items = this.items;\n for (var i = 0; i < items.length; i++) {\n this.update(items[i]);\n }\n },\n bind: function (options, dataItem) {\n var marker = map.Marker.create(options, this.options);\n marker.dataItem = dataItem;\n var args = {\n marker: marker,\n layer: this\n };\n var cancelled = this.map.trigger('markerCreated', args);\n if (!cancelled) {\n this.add(marker);\n return marker;\n }\n },\n setDataSource: function (dataSource) {\n if (this.dataSource) {\n this.dataSource.unbind('change', this._dataChange);\n }\n this.dataSource = kendo.data.DataSource.create(dataSource);\n this.dataSource.bind('change', this._dataChange);\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _addOne: function (arg) {\n var marker = Marker.create(arg, this.options);\n marker.addTo(this);\n return marker;\n },\n _initDataSource: function () {\n var dsOptions = this.options.dataSource;\n this._dataChange = proxy(this._dataChange, this);\n this.dataSource = DataSource.create(dsOptions).bind('change', this._dataChange);\n if (dsOptions && this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _dataChange: function (e) {\n this._load(e.sender.view());\n },\n _load: function (data) {\n this._data = data;\n this.clear();\n var getLocation = kendo.getter(this.options.locationField);\n var getTitle = kendo.getter(this.options.titleField);\n for (var i = 0; i < data.length; i++) {\n var dataItem = data[i];\n this.bind({\n location: getLocation(dataItem),\n title: getTitle(dataItem)\n }, dataItem);\n }\n },\n _markerClick: function (e) {\n var args = {\n marker: $(e.target).data('kendoMarker'),\n layer: this\n };\n this.map.trigger('markerClick', args);\n }\n });\n var Marker = Class.extend({\n init: function (options) {\n this.options = options || {};\n },\n addTo: function (parent) {\n this.layer = parent.markers || parent;\n this.layer.items.push(this);\n this.layer.update(this);\n },\n location: function (value) {\n if (value) {\n this.options.location = Location.create(value).toArray();\n if (this.layer) {\n this.layer.update(this);\n }\n return this;\n } else {\n return Location.create(this.options.location);\n }\n },\n showAt: function (point) {\n this.render();\n this.element.css({\n left: math.round(point.x),\n top: math.round(point.y)\n });\n if (this.tooltip && this.tooltip.popup) {\n this.tooltip.popup._position();\n }\n },\n hide: function () {\n if (this.element) {\n this.element.remove();\n this.element = null;\n }\n if (this.tooltip) {\n this.tooltip.destroy();\n this.tooltip = null;\n }\n },\n destroy: function () {\n this.layer = null;\n this.hide();\n },\n render: function () {\n if (!this.element) {\n var options = this.options;\n var layer = this.layer;\n this.element = $(doc.createElement('span')).addClass('k-marker k-icon k-i-marker-' + kendo.toHyphens(options.shape || 'pin')).attr('title', options.title).attr(options.attributes || {}).data('kendoMarker', this).css('zIndex', options.zIndex);\n if (layer) {\n layer.element.append(this.element);\n }\n this.renderTooltip();\n }\n },\n renderTooltip: function () {\n var marker = this;\n var title = marker.options.title;\n var options = marker.options.tooltip || {};\n if (options && Tooltip) {\n var template = options.template;\n if (template) {\n var contentTemplate = kendo.template(template);\n options.content = function (e) {\n e.location = marker.location();\n e.marker = marker;\n return contentTemplate(e);\n };\n }\n if (title || options.content || options.contentUrl) {\n this.tooltip = new Tooltip(this.element, options);\n this.tooltip.marker = this;\n }\n }\n }\n });\n Marker.create = function (arg, defaults) {\n if (arg instanceof Marker) {\n return arg;\n }\n return new Marker(deepExtend({}, defaults, arg));\n };\n deepExtend(dataviz, {\n map: {\n layers: {\n marker: MarkerLayer,\n MarkerLayer: MarkerLayer\n },\n Marker: Marker\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/main', [\n 'dataviz/map/crs',\n 'dataviz/map/location'\n ], f);\n}(function () {\n (function ($, undefined) {\n var doc = document, math = Math, min = math.min, pow = math.pow, proxy = $.proxy, kendo = window.kendo, Widget = kendo.ui.Widget, deepExtend = kendo.deepExtend, dataviz = kendo.dataviz, ui = dataviz.ui, g = kendo.geometry, Point = g.Point, map = dataviz.map, Extent = map.Extent, Location = map.Location, EPSG3857 = map.crs.EPSG3857, util = kendo.util, renderPos = util.renderPos, drawingUtil = kendo.drawing.util, defined = drawingUtil.defined, limit = drawingUtil.limitValue, valueOrDefault = drawingUtil.valueOrDefault;\n var CSS_PREFIX = 'k-', FRICTION = 0.9, FRICTION_MOBILE = 0.93, MOUSEWHEEL = 'DOMMouseScroll mousewheel', VELOCITY_MULTIPLIER = 5, DEFAULT_ZOOM_RATE = 1;\n var Map = Widget.extend({\n init: function (element, options) {\n kendo.destroy(element);\n Widget.fn.init.call(this, element);\n this._initOptions(options);\n this.bind(this.events, options);\n this.crs = new EPSG3857();\n this.element.addClass(CSS_PREFIX + this.options.name.toLowerCase()).css('position', 'relative').empty().append(doc.createElement('div'));\n this._viewOrigin = this._getOrigin();\n this._initScroller();\n this._initMarkers();\n this._initControls();\n this._initLayers();\n this._reset();\n this._mousewheel = proxy(this._mousewheel, this);\n this.element.bind(MOUSEWHEEL, this._mousewheel);\n },\n options: {\n name: 'Map',\n controls: {\n attribution: true,\n navigator: { panStep: 100 },\n zoom: true\n },\n layers: [],\n layerDefaults: {\n shape: {\n style: {\n fill: { color: '#fff' },\n stroke: {\n color: '#aaa',\n width: 0.5\n }\n }\n },\n bubble: {\n style: {\n fill: {\n color: '#fff',\n opacity: 0.5\n },\n stroke: {\n color: '#aaa',\n width: 0.5\n }\n }\n },\n marker: {\n shape: 'pinTarget',\n tooltip: { position: 'top' }\n }\n },\n center: [\n 0,\n 0\n ],\n zoom: 3,\n minSize: 256,\n minZoom: 1,\n maxZoom: 19,\n markers: [],\n markerDefaults: {\n shape: 'pinTarget',\n tooltip: { position: 'top' }\n },\n wraparound: true\n },\n events: [\n 'beforeReset',\n 'click',\n 'markerActivate',\n 'markerClick',\n 'markerCreated',\n 'pan',\n 'panEnd',\n 'reset',\n 'shapeClick',\n 'shapeCreated',\n 'shapeFeatureCreated',\n 'shapeMouseEnter',\n 'shapeMouseLeave',\n 'zoomEnd',\n 'zoomStart'\n ],\n destroy: function () {\n this.scroller.destroy();\n if (this.navigator) {\n this.navigator.destroy();\n }\n if (this.attribution) {\n this.attribution.destroy();\n }\n if (this.zoomControl) {\n this.zoomControl.destroy();\n }\n this.markers.destroy();\n for (var i = 0; i < this.layers.length; i++) {\n this.layers[i].destroy();\n }\n Widget.fn.destroy.call(this);\n },\n zoom: function (level) {\n var options = this.options;\n if (defined(level)) {\n level = math.round(limit(level, options.minZoom, options.maxZoom));\n if (options.zoom !== level) {\n options.zoom = level;\n this._reset();\n }\n return this;\n } else {\n return options.zoom;\n }\n },\n center: function (center) {\n if (center) {\n this.options.center = Location.create(center).toArray();\n this._reset();\n return this;\n } else {\n return Location.create(this.options.center);\n }\n },\n extent: function (extent) {\n if (extent) {\n this._setExtent(extent);\n return this;\n } else {\n return this._getExtent();\n }\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n this._reset();\n },\n locationToLayer: function (location, zoom) {\n var clamp = !this.options.wraparound;\n location = Location.create(location);\n return this.crs.toPoint(location, this._layerSize(zoom), clamp);\n },\n layerToLocation: function (point, zoom) {\n var clamp = !this.options.wraparound;\n point = Point.create(point);\n return this.crs.toLocation(point, this._layerSize(zoom), clamp);\n },\n locationToView: function (location) {\n location = Location.create(location);\n var origin = this.locationToLayer(this._viewOrigin);\n var point = this.locationToLayer(location);\n return point.translateWith(origin.scale(-1));\n },\n viewToLocation: function (point, zoom) {\n var origin = this.locationToLayer(this._getOrigin(), zoom);\n point = Point.create(point);\n point = point.clone().translateWith(origin);\n return this.layerToLocation(point, zoom);\n },\n eventOffset: function (e) {\n var point;\n var x;\n var y;\n var offset = this.element.offset();\n if (e.x || e.y) {\n var field = 'location';\n x = e.x[field] - offset.left;\n y = e.y[field] - offset.top;\n point = new g.Point(x, y);\n } else {\n var event = e.originalEvent || e;\n x = valueOrDefault(event.pageX, event.clientX) - offset.left;\n y = valueOrDefault(event.pageY, event.clientY) - offset.top;\n point = new g.Point(x, y);\n }\n return point;\n },\n eventToView: function (e) {\n var cursor = this.eventOffset(e);\n return this.locationToView(this.viewToLocation(cursor));\n },\n eventToLayer: function (e) {\n return this.locationToLayer(this.eventToLocation(e));\n },\n eventToLocation: function (e) {\n var cursor = this.eventOffset(e);\n return this.viewToLocation(cursor);\n },\n viewSize: function () {\n var element = this.element;\n var scale = this._layerSize();\n var width = element.width();\n if (!this.options.wraparound) {\n width = min(scale, width);\n }\n return {\n width: width,\n height: min(scale, element.height())\n };\n },\n exportVisual: function () {\n this._reset();\n return false;\n },\n _setOrigin: function (origin, zoom) {\n var size = this.viewSize(), topLeft;\n origin = this._origin = Location.create(origin);\n topLeft = this.locationToLayer(origin, zoom);\n topLeft.x += size.width / 2;\n topLeft.y += size.height / 2;\n this.options.center = this.layerToLocation(topLeft, zoom).toArray();\n return this;\n },\n _getOrigin: function (invalidate) {\n var size = this.viewSize(), topLeft;\n if (invalidate || !this._origin) {\n topLeft = this.locationToLayer(this.center());\n topLeft.x -= size.width / 2;\n topLeft.y -= size.height / 2;\n this._origin = this.layerToLocation(topLeft);\n }\n return this._origin;\n },\n _setExtent: function (extent) {\n var raw = Extent.create(extent);\n var se = raw.se.clone();\n if (this.options.wraparound && se.lng < 0 && extent.nw.lng > 0) {\n se.lng = 180 + (180 + se.lng);\n }\n extent = new Extent(raw.nw, se);\n this.center(extent.center());\n var width = this.element.width();\n var height = this.element.height();\n for (var zoom = this.options.maxZoom; zoom >= this.options.minZoom; zoom--) {\n var topLeft = this.locationToLayer(extent.nw, zoom);\n var bottomRight = this.locationToLayer(extent.se, zoom);\n var layerWidth = math.abs(bottomRight.x - topLeft.x);\n var layerHeight = math.abs(bottomRight.y - topLeft.y);\n if (layerWidth <= width && layerHeight <= height) {\n break;\n }\n }\n this.zoom(zoom);\n },\n _getExtent: function () {\n var nw = this._getOrigin();\n var bottomRight = this.locationToLayer(nw);\n var size = this.viewSize();\n bottomRight.x += size.width;\n bottomRight.y += size.height;\n var se = this.layerToLocation(bottomRight);\n return new Extent(nw, se);\n },\n _zoomAround: function (pivot, level) {\n this._setOrigin(this.layerToLocation(pivot, level), level);\n this.zoom(level);\n },\n _initControls: function () {\n var controls = this.options.controls;\n if (ui.Attribution && controls.attribution) {\n this._createAttribution(controls.attribution);\n }\n if (!kendo.support.mobileOS) {\n if (ui.Navigator && controls.navigator) {\n this._createNavigator(controls.navigator);\n }\n if (ui.ZoomControl && controls.zoom) {\n this._createZoomControl(controls.zoom);\n }\n }\n },\n _createControlElement: function (options, defaultPos) {\n var pos = options.position || defaultPos;\n var posSelector = '.' + renderPos(pos).replace(' ', '.');\n var wrap = $('.k-map-controls' + posSelector, this.element);\n if (wrap.length === 0) {\n wrap = $('
    ').addClass('k-map-controls ' + renderPos(pos)).appendTo(this.element);\n }\n return $('
    ').appendTo(wrap);\n },\n _createAttribution: function (options) {\n var element = this._createControlElement(options, 'bottomRight');\n this.attribution = new ui.Attribution(element, options);\n },\n _createNavigator: function (options) {\n var element = this._createControlElement(options, 'topLeft');\n var navigator = this.navigator = new ui.Navigator(element, options);\n this._navigatorPan = proxy(this._navigatorPan, this);\n navigator.bind('pan', this._navigatorPan);\n this._navigatorCenter = proxy(this._navigatorCenter, this);\n navigator.bind('center', this._navigatorCenter);\n },\n _navigatorPan: function (e) {\n var map = this;\n var scroller = map.scroller;\n var x = scroller.scrollLeft + e.x;\n var y = scroller.scrollTop - e.y;\n var bounds = this._virtualSize;\n var height = this.element.height();\n var width = this.element.width();\n x = limit(x, bounds.x.min, bounds.x.max - width);\n y = limit(y, bounds.y.min, bounds.y.max - height);\n map.scroller.one('scroll', function (e) {\n map._scrollEnd(e);\n });\n map.scroller.scrollTo(-x, -y);\n },\n _navigatorCenter: function () {\n this.center(this.options.center);\n },\n _createZoomControl: function (options) {\n var element = this._createControlElement(options, 'topLeft');\n var zoomControl = this.zoomControl = new ui.ZoomControl(element, options);\n this._zoomControlChange = proxy(this._zoomControlChange, this);\n zoomControl.bind('change', this._zoomControlChange);\n },\n _zoomControlChange: function (e) {\n if (!this.trigger('zoomStart', { originalEvent: e })) {\n this.zoom(this.zoom() + e.delta);\n this.trigger('zoomEnd', { originalEvent: e });\n }\n },\n _initScroller: function () {\n var friction = kendo.support.mobileOS ? FRICTION_MOBILE : FRICTION;\n var zoomable = this.options.zoomable !== false;\n var scroller = this.scroller = new kendo.mobile.ui.Scroller(this.element.children(0), {\n friction: friction,\n velocityMultiplier: VELOCITY_MULTIPLIER,\n zoom: zoomable,\n mousewheelScrolling: false,\n supportDoubleTap: true\n });\n scroller.bind('scroll', proxy(this._scroll, this));\n scroller.bind('scrollEnd', proxy(this._scrollEnd, this));\n scroller.userEvents.bind('gesturestart', proxy(this._scaleStart, this));\n scroller.userEvents.bind('gestureend', proxy(this._scale, this));\n scroller.userEvents.bind('doubleTap', proxy(this._doubleTap, this));\n scroller.userEvents.bind('tap', proxy(this._tap, this));\n this.scrollElement = scroller.scrollElement;\n },\n _initLayers: function () {\n var defs = this.options.layers, layers = this.layers = [];\n for (var i = 0; i < defs.length; i++) {\n var options = defs[i];\n var type = options.type || 'shape';\n var defaults = this.options.layerDefaults[type];\n var impl = dataviz.map.layers[type];\n layers.push(new impl(this, deepExtend({}, defaults, options)));\n }\n },\n _initMarkers: function () {\n this.markers = new map.layers.MarkerLayer(this, this.options.markerDefaults);\n this.markers.add(this.options.markers);\n },\n _scroll: function (e) {\n var origin = this.locationToLayer(this._viewOrigin).round();\n var movable = e.sender.movable;\n var offset = new g.Point(movable.x, movable.y).scale(-1).scale(1 / movable.scale);\n origin.x += offset.x;\n origin.y += offset.y;\n this._scrollOffset = offset;\n this._setOrigin(this.layerToLocation(origin));\n this.trigger('pan', {\n originalEvent: e,\n origin: this._getOrigin(),\n center: this.center()\n });\n },\n _scrollEnd: function (e) {\n if (!this._scrollOffset || !this._panComplete()) {\n return;\n }\n this._scrollOffset = null;\n this._panEndTS = new Date();\n this.trigger('panEnd', {\n originalEvent: e,\n origin: this._getOrigin(),\n center: this.center()\n });\n },\n _panComplete: function () {\n return new Date() - (this._panEndTS || 0) > 50;\n },\n _scaleStart: function (e) {\n if (this.trigger('zoomStart', { originalEvent: e })) {\n var touch = e.touches[1];\n if (touch) {\n touch.cancel();\n }\n }\n },\n _scale: function (e) {\n var scale = this.scroller.movable.scale;\n var zoom = this._scaleToZoom(scale);\n var gestureCenter = new g.Point(e.center.x, e.center.y);\n var centerLocation = this.viewToLocation(gestureCenter, zoom);\n var centerPoint = this.locationToLayer(centerLocation, zoom);\n var originPoint = centerPoint.translate(-gestureCenter.x, -gestureCenter.y);\n this._zoomAround(originPoint, zoom);\n this.trigger('zoomEnd', { originalEvent: e });\n },\n _scaleToZoom: function (scaleDelta) {\n var scale = this._layerSize() * scaleDelta;\n var tiles = scale / this.options.minSize;\n var zoom = math.log(tiles) / math.log(2);\n return math.round(zoom);\n },\n _reset: function () {\n if (this.attribution) {\n this.attribution.filter(this.center(), this.zoom());\n }\n this._viewOrigin = this._getOrigin(true);\n this._resetScroller();\n this.trigger('beforeReset');\n this.trigger('reset');\n },\n _resetScroller: function () {\n var scroller = this.scroller;\n var x = scroller.dimensions.x;\n var y = scroller.dimensions.y;\n var scale = this._layerSize();\n var nw = this.extent().nw;\n var topLeft = this.locationToLayer(nw).round();\n scroller.movable.round = true;\n scroller.reset();\n scroller.userEvents.cancel();\n var zoom = this.zoom();\n scroller.dimensions.forcedMinScale = pow(2, this.options.minZoom - zoom);\n scroller.dimensions.maxScale = pow(2, this.options.maxZoom - zoom);\n var xBounds = {\n min: -topLeft.x,\n max: scale - topLeft.x\n };\n var yBounds = {\n min: -topLeft.y,\n max: scale - topLeft.y\n };\n if (this.options.wraparound) {\n xBounds.max = 20 * scale;\n xBounds.min = -xBounds.max;\n }\n if (this.options.pannable === false) {\n var viewSize = this.viewSize();\n xBounds.min = yBounds.min = 0;\n xBounds.max = viewSize.width;\n yBounds.max = viewSize.height;\n }\n x.makeVirtual();\n y.makeVirtual();\n x.virtualSize(xBounds.min, xBounds.max);\n y.virtualSize(yBounds.min, yBounds.max);\n this._virtualSize = {\n x: xBounds,\n y: yBounds\n };\n },\n _renderLayers: function () {\n var defs = this.options.layers, layers = this.layers = [], scrollWrap = this.scrollWrap;\n scrollWrap.empty();\n for (var i = 0; i < defs.length; i++) {\n var options = defs[i];\n var type = options.type || 'shape';\n var defaults = this.options.layerDefaults[type];\n var impl = dataviz.map.layers[type];\n layers.push(new impl(this, deepExtend({}, defaults, options)));\n }\n },\n _layerSize: function (zoom) {\n zoom = valueOrDefault(zoom, this.options.zoom);\n return this.options.minSize * pow(2, zoom);\n },\n _tap: function (e) {\n if (!this._panComplete()) {\n return;\n }\n var cursor = this.eventOffset(e);\n this.trigger('click', {\n originalEvent: e,\n location: this.viewToLocation(cursor)\n });\n },\n _doubleTap: function (e) {\n var options = this.options;\n if (options.zoomable !== false) {\n if (!this.trigger('zoomStart', { originalEvent: e })) {\n var toZoom = this.zoom() + DEFAULT_ZOOM_RATE;\n var cursor = this.eventOffset(e);\n var location = this.viewToLocation(cursor);\n var postZoom = this.locationToLayer(location, toZoom);\n var origin = postZoom.translate(-cursor.x, -cursor.y);\n this._zoomAround(origin, toZoom);\n this.trigger('zoomEnd', { originalEvent: e });\n }\n }\n },\n _mousewheel: function (e) {\n e.preventDefault();\n var delta = dataviz.mwDelta(e) > 0 ? -1 : 1;\n var options = this.options;\n var fromZoom = this.zoom();\n var toZoom = limit(fromZoom + delta, options.minZoom, options.maxZoom);\n if (options.zoomable !== false && toZoom !== fromZoom) {\n if (!this.trigger('zoomStart', { originalEvent: e })) {\n var cursor = this.eventOffset(e);\n var location = this.viewToLocation(cursor);\n var postZoom = this.locationToLayer(location, toZoom);\n var origin = postZoom.translate(-cursor.x, -cursor.y);\n this._zoomAround(origin, toZoom);\n this.trigger('zoomEnd', { originalEvent: e });\n }\n }\n }\n });\n dataviz.ui.plugin(Map);\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.map', [\n 'kendo.data',\n 'kendo.userevents',\n 'kendo.tooltip',\n 'kendo.mobile.scroller',\n 'kendo.draganddrop',\n 'kendo.dataviz.core',\n 'dataviz/map/location',\n 'dataviz/map/attribution',\n 'dataviz/map/navigator',\n 'dataviz/map/zoom',\n 'dataviz/map/crs',\n 'dataviz/map/layers/base',\n 'dataviz/map/layers/shape',\n 'dataviz/map/layers/bubble',\n 'dataviz/map/layers/tile',\n 'dataviz/map/layers/bing',\n 'dataviz/map/layers/marker',\n 'dataviz/map/main'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.map',\n name: 'Map',\n category: 'dataviz',\n description: 'The Kendo DataViz Map displays spatial data',\n depends: [\n 'data',\n 'userevents',\n 'tooltip',\n 'dataviz.core',\n 'drawing',\n 'mobile.scroller'\n ]\n };\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/diagram/utils', ['kendo.core'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, diagram = kendo.dataviz.diagram = {}, deepExtend = kendo.deepExtend, isArray = $.isArray, EPSILON = 0.000001;\n var Utils = {};\n deepExtend(Utils, {\n isNearZero: function (num) {\n return Math.abs(num) < EPSILON;\n },\n isDefined: function (obj) {\n return typeof obj !== 'undefined';\n },\n isUndefined: function (obj) {\n return typeof obj === 'undefined' || obj === null;\n },\n isObject: function (obj) {\n return obj === Object(obj);\n },\n has: function (obj, key) {\n return Object.hasOwnProperty.call(obj, key);\n },\n isString: function (obj) {\n return Object.prototype.toString.call(obj) == '[object String]';\n },\n isBoolean: function (obj) {\n return Object.prototype.toString.call(obj) == '[object Boolean]';\n },\n isType: function (obj, type) {\n return Object.prototype.toString.call(obj) == '[object ' + type + ']';\n },\n isNumber: function (obj) {\n return !isNaN(parseFloat(obj)) && isFinite(obj);\n },\n isEmpty: function (obj) {\n if (obj === null) {\n return true;\n }\n if (isArray(obj) || Utils.isString(obj)) {\n return obj.length === 0;\n }\n for (var key in obj) {\n if (Utils.has(obj, key)) {\n return false;\n }\n }\n return true;\n },\n simpleExtend: function (destination, source) {\n if (!Utils.isObject(source)) {\n return;\n }\n for (var name in source) {\n destination[name] = source[name];\n }\n },\n initArray: function createIdArray(size, value) {\n var array = [];\n for (var i = 0; i < size; ++i) {\n array[i] = value;\n }\n return array;\n },\n serializePoints: function (points) {\n var res = [];\n for (var i = 0; i < points.length; i++) {\n var p = points[i];\n res.push(p.x + ';' + p.y);\n }\n return res.join(';');\n },\n deserializePoints: function (s) {\n var v = s.split(';'), points = [];\n if (v.length % 2 !== 0) {\n throw 'Not an array of points.';\n }\n for (var i = 0; i < v.length; i += 2) {\n points.push(new diagram.Point(parseInt(v[i], 10), parseInt(v[i + 1], 10)));\n }\n return points;\n },\n randomInteger: function (lower, upper) {\n return parseInt(Math.floor(Math.random() * upper) + lower, 10);\n },\n DFT: function (el, func) {\n func(el);\n if (el.childNodes) {\n for (var i = 0; i < el.childNodes.length; i++) {\n var item = el.childNodes[i];\n this.DFT(item, func);\n }\n }\n },\n getMatrixAngle: function (m) {\n if (m === null || m.d === 0) {\n return 0;\n }\n return Math.atan2(m.b, m.d) * 180 / Math.PI;\n },\n getMatrixScaling: function (m) {\n var sX = Math.sqrt(m.a * m.a + m.c * m.c);\n var sY = Math.sqrt(m.b * m.b + m.d * m.d);\n return [\n sX,\n sY\n ];\n }\n });\n function Range(start, stop, step) {\n if (typeof start == 'undefined' || typeof stop == 'undefined') {\n return [];\n }\n if (step && Utils.sign(stop - start) != Utils.sign(step)) {\n throw 'The sign of the increment should allow to reach the stop-value.';\n }\n step = step || 1;\n start = start || 0;\n stop = stop || start;\n if ((stop - start) / step === Infrainity) {\n throw 'Infrainite 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).Infralate(HITTESTAREA, HITTESTAREA), r2 = new Rect(to.x, to.y).Infralate(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 Infralate: 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().Infralate(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).Infralate(radiusX, radiusY).contains(point);\n var targetHandle = new Rect(targetPoint.x, targetPoint.y).Infralate(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).Infralate(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).Infralate(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.Infralate(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.Infralate(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_InfraINITY;\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_InfraINITY) {\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_InfraINITY;\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_InfraINITY) {\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_InfraINITY;\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_InfraINITY) {\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_InfraINITY;\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_InfraINITY) {\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', POPUP = 'k-popup', RESIZABLE_TOOLBAR = 'k-toolbar-resizable', STATE_ACTIVE = 'k-state-active', STATE_DISABLED = 'k-state-disabled', STATE_HIDDEN = 'k-state-hidden', GROUP_START = 'k-group-start', GROUP_END = 'k-group-end', PRIMARY = 'k-primary', ICON = 'k-icon', ICON_PREFIX = 'k-i-', BUTTON_ICON = 'k-button-icon', BUTTON_ICON_TEXT = 'k-button-icontext', LIST_CONTAINER = 'k-list-container k-split-container', SPLIT_BUTTON_ARROW = 'k-split-button-arrow', OVERFLOW_ANCHOR = 'k-overflow-anchor', OVERFLOW_CONTAINER = 'k-overflow-container', FIRST_TOOLBAR_VISIBLE = 'k-toolbar-first-visible', LAST_TOOLBAR_VISIBLE = 'k-toolbar-last-visible', CLICK = 'click', TOGGLE = 'toggle', OPEN = 'open', CLOSE = 'close', OVERFLOW_OPEN = 'overflowOpen', OVERFLOW_CLOSE = 'overflowClose', OVERFLOW_NEVER = 'never', OVERFLOW_AUTO = 'auto', OVERFLOW_ALWAYS = 'always', OVERFLOW_HIDDEN = 'k-overflow-hidden', OPTION_LIST_SUFFIX = '_optionlist', KENDO_UID_ATTR = kendo.attr('uid');\n kendo.toolbar = {};\n var components = {\n overflowAnchor: '
    ',\n overflowContainer: '
      '\n };\n kendo.toolbar.registerComponent = function (name, toolbar, overflow) {\n components[name] = {\n toolbar: toolbar,\n overflow: overflow\n };\n };\n var Item = kendo.Class.extend({\n addOverflowAttr: function () {\n this.element.attr(kendo.attr('overflow'), this.options.overflow || OVERFLOW_AUTO);\n },\n addUidAttr: function () {\n this.element.attr(KENDO_UID_ATTR, this.options.uid);\n },\n addIdAttr: function () {\n if (this.options.id) {\n this.element.attr('id', this.options.id);\n }\n },\n addOverflowIdAttr: function () {\n if (this.options.id) {\n this.element.attr('id', this.options.id + '_overflow');\n }\n },\n attributes: function () {\n if (this.options.attributes) {\n this.element.attr(this.options.attributes);\n }\n },\n show: function () {\n this.element.removeClass(STATE_HIDDEN).show();\n this.options.hidden = false;\n },\n hide: function () {\n this.element.addClass(STATE_HIDDEN).hide();\n if (this.overflow && this.overflowHidden) {\n this.overflowHidden();\n }\n this.options.hidden = true;\n },\n remove: function () {\n this.element.remove();\n },\n enable: function (isEnabled) {\n if (isEnabled === undefined) {\n isEnabled = true;\n }\n this.element.toggleClass(STATE_DISABLED, !isEnabled);\n this.options.enable = isEnabled;\n },\n twin: function () {\n var uid = this.element.attr(KENDO_UID_ATTR);\n if (this.overflow && this.options.splitContainerId) {\n return $('#' + this.options.splitContainerId).find('[' + KENDO_UID_ATTR + '=\\'' + uid + '\\']').data(this.options.type);\n } else if (this.overflow) {\n return this.toolbar.element.find('[' + KENDO_UID_ATTR + '=\\'' + uid + '\\']').data(this.options.type);\n } else if (this.toolbar.options.resizable) {\n return this.toolbar.popup.element.find('[' + KENDO_UID_ATTR + '=\\'' + uid + '\\']').data(this.options.type);\n }\n }\n });\n kendo.toolbar.Item = Item;\n var Button = Item.extend({\n init: function (options, toolbar) {\n var element = options.useButtonTag ? $('') : $('');\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n this.attributes();\n if (options.primary) {\n element.addClass(PRIMARY);\n }\n if (options.togglable) {\n element.addClass(TOGGLE_BUTTON);\n this.toggle(options.selected);\n }\n if (options.url !== undefined && !options.useButtonTag) {\n element.attr('href', options.url);\n if (options.mobile) {\n element.attr(kendo.attr('role'), 'button');\n }\n }\n if (options.group) {\n element.attr(kendo.attr('group'), options.group);\n this.group = this.toolbar.addToGroup(this, options.group);\n }\n if (!options.togglable && options.click && isFunction(options.click)) {\n this.clickHandler = options.click;\n }\n if (options.togglable && options.toggle && isFunction(options.toggle)) {\n this.toggleHandler = options.toggle;\n }\n },\n toggle: function (state, propagate) {\n state = !!state;\n if (this.group && state) {\n this.group.select(this);\n } else if (!this.group) {\n this.select(state);\n }\n if (propagate && this.twin()) {\n this.twin().toggle(state);\n }\n },\n getParentGroup: function () {\n if (this.options.isChild) {\n return this.element.closest('.' + BUTTON_GROUP).data('buttonGroup');\n }\n },\n _addGraphics: function () {\n var element = this.element, icon = this.options.icon, spriteCssClass = this.options.spriteCssClass, imageUrl = this.options.imageUrl, isEmpty, span, img;\n if (spriteCssClass || imageUrl || icon) {\n isEmpty = true;\n element.contents().filter(function () {\n return !$(this).hasClass('k-sprite') && !$(this).hasClass(ICON) && !$(this).hasClass('k-image');\n }).each(function (idx, el) {\n if (el.nodeType == 1 || el.nodeType == 3 && $.trim(el.nodeValue).length > 0) {\n isEmpty = false;\n }\n });\n if (isEmpty) {\n element.addClass(BUTTON_ICON);\n } else {\n element.addClass(BUTTON_ICON_TEXT);\n }\n }\n if (icon) {\n span = element.children('span.' + ICON).first();\n if (!span[0]) {\n span = $('').prependTo(element);\n }\n span.addClass(ICON_PREFIX + icon);\n } else if (spriteCssClass) {\n span = element.children('span.k-sprite').first();\n if (!span[0]) {\n span = $('').prependTo(element);\n }\n span.addClass(spriteCssClass);\n } else if (imageUrl) {\n img = element.children('img.k-image').first();\n if (!img[0]) {\n img = $('\"icon\"').prependTo(element);\n }\n img.attr('src', imageUrl);\n }\n }\n });\n kendo.toolbar.Button = Button;\n var ToolBarButton = Button.extend({\n init: function (options, toolbar) {\n Button.fn.init.call(this, options, toolbar);\n var element = this.element;\n element.addClass(BUTTON);\n this.addIdAttr();\n if (options.align) {\n element.addClass('k-align-' + options.align);\n }\n if (options.showText != 'overflow' && options.text) {\n if (options.mobile) {\n element.html('' + options.text + '');\n } else {\n element.html(options.text);\n }\n }\n options.hasIcon = options.showIcon != 'overflow' && (options.icon || options.spriteCssClass || options.imageUrl);\n if (options.hasIcon) {\n this._addGraphics();\n }\n this.addUidAttr();\n this.addOverflowAttr();\n this.enable(options.enable);\n if (options.hidden) {\n this.hide();\n }\n this.element.data({\n type: 'button',\n button: this\n });\n },\n select: function (selected) {\n if (selected === undefined) {\n selected = false;\n }\n this.element.toggleClass(STATE_ACTIVE, selected);\n this.options.selected = selected;\n }\n });\n kendo.toolbar.ToolBarButton = ToolBarButton;\n var OverflowButton = Button.extend({\n init: function (options, toolbar) {\n this.overflow = true;\n Button.fn.init.call(this, $.extend({}, options), toolbar);\n var element = this.element;\n if (options.showText != 'toolbar' && options.text) {\n if (options.mobile) {\n element.html('' + options.text + '');\n } else {\n element.html('' + options.text + '');\n }\n }\n options.hasIcon = options.showIcon != 'toolbar' && (options.icon || options.spriteCssClass || options.imageUrl);\n if (options.hasIcon) {\n this._addGraphics();\n }\n if (!options.isChild) {\n this._wrap();\n }\n this.addOverflowIdAttr();\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.enable(options.enable);\n element.addClass(OVERFLOW_BUTTON + ' ' + BUTTON);\n if (options.hidden) {\n this.hide();\n }\n if (options.togglable) {\n this.toggle(options.selected);\n }\n this.element.data({\n type: 'button',\n button: this\n });\n },\n _wrap: function () {\n this.element = this.element.wrap('
    • ').parent();\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n },\n select: function (selected) {\n if (selected === undefined) {\n selected = false;\n }\n if (this.options.isChild) {\n this.element.toggleClass(STATE_ACTIVE, selected);\n } else {\n this.element.find('.k-button').toggleClass(STATE_ACTIVE, selected);\n }\n this.options.selected = selected;\n }\n });\n kendo.toolbar.OverflowButton = OverflowButton;\n kendo.toolbar.registerComponent('button', ToolBarButton, OverflowButton);\n var ButtonGroup = Item.extend({\n createButtons: function (buttonConstructor) {\n var options = this.options;\n var items = options.buttons || [];\n var item;\n for (var i = 0; i < items.length; i++) {\n if (!items[i].uid) {\n items[i].uid = kendo.guid();\n }\n item = new buttonConstructor($.extend({\n mobile: options.mobile,\n isChild: true,\n type: 'button'\n }, items[i]), this.toolbar);\n item.element.appendTo(this.element);\n }\n },\n refresh: function () {\n this.element.children().filter(':not(\\'.' + STATE_HIDDEN + '\\'):first').addClass(GROUP_START);\n this.element.children().filter(':not(\\'.' + STATE_HIDDEN + '\\'):last').addClass(GROUP_END);\n }\n });\n kendo.toolbar.ButtonGroup = ButtonGroup;\n var ToolBarButtonGroup = ButtonGroup.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
      ');\n this.options = options;\n this.toolbar = toolbar;\n this.addIdAttr();\n if (options.align) {\n element.addClass('k-align-' + options.align);\n }\n this.createButtons(ToolBarButton);\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.refresh();\n element.addClass(BUTTON_GROUP);\n this.element.data({\n type: 'buttonGroup',\n buttonGroup: this\n });\n }\n });\n kendo.toolbar.ToolBarButtonGroup = ToolBarButtonGroup;\n var OverflowButtonGroup = ButtonGroup.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
    • ');\n this.options = options;\n this.toolbar = toolbar;\n this.overflow = true;\n this.addOverflowIdAttr();\n this.createButtons(OverflowButton);\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.refresh();\n element.addClass((options.mobile ? '' : BUTTON_GROUP) + ' k-overflow-group');\n this.element.data({\n type: 'buttonGroup',\n buttonGroup: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.OverflowButtonGroup = OverflowButtonGroup;\n kendo.toolbar.registerComponent('buttonGroup', ToolBarButtonGroup, OverflowButtonGroup);\n var ToolBarSplitButton = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
      ');\n this.options = options;\n this.toolbar = toolbar;\n this.mainButton = new ToolBarButton($.extend({}, options, { hidden: false }), toolbar);\n this.arrowButton = $('');\n this.popupElement = $('
        ');\n this.mainButton.element.removeAttr('href tabindex').appendTo(element);\n this.arrowButton.appendTo(element);\n this.popupElement.appendTo(element);\n if (options.align) {\n element.addClass('k-align-' + options.align);\n }\n if (!options.id) {\n options.id = options.uid;\n }\n element.attr('id', options.id + '_wrapper');\n this.addOverflowAttr();\n this.addUidAttr();\n this.createMenuButtons();\n this.createPopup();\n this._navigatable();\n this.mainButton.main = true;\n this.enable(options.enable);\n if (options.hidden) {\n this.hide();\n }\n element.data({\n type: 'splitButton',\n splitButton: this,\n kendoPopup: this.popup\n });\n },\n _navigatable: function () {\n var that = this;\n that.popupElement.on('keydown', '.' + BUTTON, function (e) {\n var li = $(e.target).parent();\n e.preventDefault();\n if (e.keyCode === keys.ESC || e.keyCode === keys.TAB || e.altKey && e.keyCode === keys.UP) {\n that.toggle();\n that.focus();\n } else if (e.keyCode === keys.DOWN) {\n findFocusableSibling(li, 'next').focus();\n } else if (e.keyCode === keys.UP) {\n findFocusableSibling(li, 'prev').focus();\n } else if (e.keyCode === keys.SPACEBAR || e.keyCode === keys.ENTER) {\n that.toolbar.userEvents.trigger('tap', { target: $(e.target) });\n } else if (e.keyCode === keys.HOME) {\n li.parent().find(':kendoFocusable').first().focus();\n } else if (e.keyCode === keys.END) {\n li.parent().find(':kendoFocusable').last().focus();\n }\n });\n },\n createMenuButtons: function () {\n var options = this.options;\n var items = options.menuButtons;\n var item;\n for (var i = 0; i < items.length; i++) {\n item = new ToolBarButton($.extend({\n mobile: options.mobile,\n type: 'button',\n click: options.click\n }, items[i]), this.toolbar);\n item.element.wrap('
      • ').parent().appendTo(this.popupElement);\n }\n },\n createPopup: function () {\n var that = this;\n var options = this.options;\n var element = this.element;\n this.popupElement.attr('id', options.id + OPTION_LIST_SUFFIX).attr(KENDO_UID_ATTR, options.rootUid);\n if (options.mobile) {\n this.popupElement = actionSheetWrap(this.popupElement);\n }\n this.popup = this.popupElement.kendoPopup({\n appendTo: options.mobile ? $(options.mobile).children('.km-pane') : null,\n anchor: element,\n isRtl: this.toolbar._isRtl,\n copyAnchorStyles: false,\n animation: options.animation,\n open: function (e) {\n var isDefaultPrevented = that.toolbar.trigger(OPEN, { target: element });\n if (isDefaultPrevented) {\n e.preventDefault();\n return;\n }\n that.adjustPopupWidth(e.sender);\n },\n activate: function () {\n this.element.find(':kendoFocusable').first().focus();\n },\n close: function (e) {\n var isDefaultPrevented = that.toolbar.trigger(CLOSE, { target: element });\n if (isDefaultPrevented) {\n e.preventDefault();\n }\n element.focus();\n }\n }).data('kendoPopup');\n this.popup.element.on(CLICK, 'a.k-button', preventClick);\n },\n adjustPopupWidth: function (popup) {\n var anchor = popup.options.anchor, computedWidth = outerWidth(anchor), width;\n kendo.wrap(popup.element).addClass('k-split-wrapper');\n if (popup.element.css('box-sizing') !== 'border-box') {\n width = computedWidth - (outerWidth(popup.element) - popup.element.width());\n } else {\n width = computedWidth;\n }\n popup.element.css({\n fontFamily: anchor.css('font-family'),\n 'min-width': width\n });\n },\n remove: function () {\n this.popup.element.off(CLICK, 'a.k-button');\n this.popup.destroy();\n this.element.remove();\n },\n toggle: function () {\n if (this.options.enable || this.popup.visible()) {\n this.popup.toggle();\n }\n },\n enable: function (isEnabled) {\n if (isEnabled === undefined) {\n isEnabled = true;\n }\n this.mainButton.enable(isEnabled);\n this.element.toggleClass(STATE_DISABLED, !isEnabled);\n this.options.enable = isEnabled;\n },\n focus: function () {\n this.element.focus();\n },\n hide: function () {\n if (this.popup) {\n this.popup.close();\n }\n this.element.addClass(STATE_HIDDEN).hide();\n this.options.hidden = true;\n },\n show: function () {\n this.element.removeClass(STATE_HIDDEN).hide();\n this.options.hidden = false;\n }\n });\n kendo.toolbar.ToolBarSplitButton = ToolBarSplitButton;\n var OverflowSplitButton = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
      • '), items = options.menuButtons, item, splitContainerId;\n this.options = options;\n this.toolbar = toolbar;\n this.overflow = true;\n splitContainerId = (options.id || options.uid) + OPTION_LIST_SUFFIX;\n this.mainButton = new OverflowButton($.extend({}, options));\n this.mainButton.element.appendTo(element);\n for (var i = 0; i < items.length; i++) {\n item = new OverflowButton($.extend({\n mobile: options.mobile,\n type: 'button',\n splitContainerId: splitContainerId\n }, items[i]), this.toolbar);\n item.element.appendTo(element);\n }\n this.addUidAttr();\n this.addOverflowAttr();\n this.mainButton.main = true;\n element.data({\n type: 'splitButton',\n splitButton: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.OverflowSplitButton = OverflowSplitButton;\n kendo.toolbar.registerComponent('splitButton', ToolBarSplitButton, OverflowSplitButton);\n var ToolBarSeparator = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
         
        ');\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n this.attributes();\n this.addIdAttr();\n this.addUidAttr();\n this.addOverflowAttr();\n element.addClass(SEPARATOR);\n element.data({\n type: 'separator',\n separator: this\n });\n }\n });\n var OverflowSeparator = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
      •  
      • ');\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n this.overflow = true;\n this.attributes();\n this.addUidAttr();\n this.addOverflowIdAttr();\n element.addClass(SEPARATOR);\n element.data({\n type: 'separator',\n separator: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.registerComponent('separator', ToolBarSeparator, OverflowSeparator);\n var TemplateItem = Item.extend({\n init: function (template, options, toolbar) {\n var element = isFunction(template) ? template(options) : template;\n if (!(element instanceof jQuery)) {\n element = $('
        ').html(element);\n } else {\n element = element.wrap('
        ').parent();\n }\n this.element = element;\n this.options = options;\n this.options.type = 'template';\n this.toolbar = toolbar;\n this.attributes();\n this.addUidAttr();\n this.addIdAttr();\n this.addOverflowAttr();\n element.data({\n type: 'template',\n template: this\n });\n }\n });\n kendo.toolbar.TemplateItem = TemplateItem;\n var OverflowTemplateItem = Item.extend({\n init: function (template, options, toolbar) {\n var element = isFunction(template) ? $(template(options)) : $(template);\n if (!(element instanceof jQuery)) {\n element = $('
      • ').html(element);\n } else {\n element = element.wrap('
      • ').parent();\n }\n this.element = element;\n this.options = options;\n this.options.type = 'template';\n this.toolbar = toolbar;\n this.overflow = true;\n this.attributes();\n this.addUidAttr();\n this.addOverflowIdAttr();\n this.addOverflowAttr();\n element.data({\n type: 'template',\n template: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.OverflowTemplateItem = OverflowTemplateItem;\n function toggleActive(e) {\n if (!e.target.is('.k-toggle-button')) {\n e.target.toggleClass(STATE_ACTIVE, e.type == 'press');\n }\n }\n function actionSheetWrap(element) {\n element = $(element);\n return element.hasClass('km-actionsheet') ? element.closest('.km-popup-wrapper') : element.addClass('km-widget km-actionsheet').wrap('
        ').parent().wrap('
        ').parent();\n }\n function preventClick(e) {\n if ($(e.target).closest('a.k-button').length) {\n e.preventDefault();\n }\n }\n function findFocusableSibling(element, dir) {\n var getSibling = dir === 'next' ? $.fn.next : $.fn.prev;\n var getter = dir === 'next' ? $.fn.first : $.fn.last;\n var candidate = getSibling.call(element);\n if (!candidate.length && element.is('.' + OVERFLOW_ANCHOR)) {\n return element;\n }\n if (candidate.is(':kendoFocusable') || !candidate.length) {\n return candidate;\n }\n if (candidate.find(':kendoFocusable').length) {\n return getter.call(candidate.find(':kendoFocusable'));\n }\n return findFocusableSibling(candidate, dir);\n }\n var Group = Class.extend({\n init: function (name) {\n this.name = name;\n this.buttons = [];\n },\n add: function (button) {\n this.buttons[this.buttons.length] = button;\n },\n remove: function (button) {\n var index = $.inArray(button, this.buttons);\n this.buttons.splice(index, 1);\n },\n select: function (button) {\n var tmp;\n for (var i = 0; i < this.buttons.length; i++) {\n tmp = this.buttons[i];\n tmp.select(false);\n }\n button.select(true);\n if (button.twin()) {\n button.twin().select(true);\n }\n }\n });\n var ToolBar = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.wrapper = that.element;\n element.addClass(TOOLBAR + ' k-widget');\n this.uid = kendo.guid();\n this._isRtl = kendo.support.isRtl(element);\n this._groups = {};\n element.attr(KENDO_UID_ATTR, this.uid);\n that.isMobile = typeof options.mobile === 'boolean' ? options.mobile : that.element.closest('.km-root')[0];\n that.animation = that.isMobile ? { open: { effects: 'fade' } } : {};\n if (that.isMobile) {\n element.addClass('km-widget');\n ICON = 'km-icon';\n ICON_PREFIX = 'km-';\n BUTTON = 'km-button';\n BUTTON_GROUP = 'km-buttongroup';\n STATE_ACTIVE = 'km-state-active';\n STATE_DISABLED = 'km-state-disabled';\n }\n if (options.resizable) {\n that._renderOverflow();\n element.addClass(RESIZABLE_TOOLBAR);\n that.overflowUserEvents = new kendo.UserEvents(that.element, {\n threshold: 5,\n allowSelection: true,\n filter: '.' + OVERFLOW_ANCHOR,\n tap: proxy(that._toggleOverflow, that)\n });\n that._resizeHandler = kendo.onResize(function () {\n that.resize();\n });\n } else {\n that.popup = { element: $([]) };\n }\n if (options.items && options.items.length) {\n for (var i = 0; i < options.items.length; i++) {\n that.add(options.items[i]);\n }\n if (options.resizable) {\n that._shrink(that.element.innerWidth());\n }\n }\n that.userEvents = new kendo.UserEvents(document, {\n threshold: 5,\n allowSelection: true,\n filter: '[' + KENDO_UID_ATTR + '=' + this.uid + '] a.' + BUTTON + ', ' + '[' + KENDO_UID_ATTR + '=' + this.uid + '] .' + OVERFLOW_BUTTON,\n tap: proxy(that._buttonClick, that),\n press: toggleActive,\n release: toggleActive\n });\n that.element.on(CLICK, 'a.k-button', preventClick);\n that._navigatable();\n if (options.resizable) {\n that.popup.element.on(CLICK, +'a.k-button', preventClick);\n }\n if (options.resizable) {\n this._toggleOverflowAnchor();\n }\n kendo.notify(that);\n },\n events: [\n CLICK,\n TOGGLE,\n OPEN,\n CLOSE,\n OVERFLOW_OPEN,\n OVERFLOW_CLOSE\n ],\n options: {\n name: 'ToolBar',\n items: [],\n resizable: true,\n mobile: null\n },\n addToGroup: function (button, groupName) {\n var group;\n if (!this._groups[groupName]) {\n group = this._groups[groupName] = new Group();\n } else {\n group = this._groups[groupName];\n }\n group.add(button);\n return group;\n },\n destroy: function () {\n var that = this;\n that.element.find('.' + SPLIT_BUTTON).each(function (idx, element) {\n $(element).data('kendoPopup').destroy();\n });\n that.element.off(CLICK, 'a.k-button');\n that.userEvents.destroy();\n if (that.options.resizable) {\n kendo.unbindResize(that._resizeHandler);\n that.overflowUserEvents.destroy();\n that.popup.element.off(CLICK, 'a.k-button');\n that.popup.destroy();\n }\n Widget.fn.destroy.call(that);\n },\n add: function (options) {\n var component = components[options.type], template = options.template, tool, that = this, itemClasses = that.isMobile ? '' : 'k-item k-state-default', overflowTemplate = options.overflowTemplate, overflowTool;\n $.extend(options, {\n uid: kendo.guid(),\n animation: that.animation,\n mobile: that.isMobile,\n rootUid: that.uid\n });\n if (options.menuButtons) {\n for (var i = 0; i < options.menuButtons.length; i++) {\n $.extend(options.menuButtons[i], { uid: kendo.guid() });\n }\n }\n if (template && !overflowTemplate) {\n options.overflow = OVERFLOW_NEVER;\n } else if (!options.overflow) {\n options.overflow = OVERFLOW_AUTO;\n }\n if (options.overflow !== OVERFLOW_NEVER && that.options.resizable) {\n if (overflowTemplate) {\n overflowTool = new OverflowTemplateItem(overflowTemplate, options, that);\n } else if (component) {\n overflowTool = new component.overflow(options, that);\n overflowTool.element.addClass(itemClasses);\n }\n if (overflowTool) {\n if (options.overflow === OVERFLOW_AUTO) {\n overflowTool.overflowHidden();\n }\n overflowTool.element.appendTo(that.popup.container);\n that.angular('compile', function () {\n return { elements: overflowTool.element.get() };\n });\n }\n }\n if (options.overflow !== OVERFLOW_ALWAYS) {\n if (template) {\n tool = new TemplateItem(template, options, that);\n } else if (component) {\n tool = new component.toolbar(options, that);\n }\n if (tool) {\n tool.element.appendTo(that.element);\n that.angular('compile', function () {\n return { elements: tool.element.get() };\n });\n }\n }\n },\n _getItem: function (candidate) {\n var element, toolbarItem, overflowItem, isResizable = this.options.resizable, type;\n element = this.element.find(candidate);\n if (!element.length) {\n element = $('.k-split-container[data-uid=' + this.uid + ']').find(candidate);\n }\n type = element.length ? element.data('type') : '';\n toolbarItem = element.data(type);\n if (toolbarItem) {\n if (toolbarItem.main) {\n element = element.parent('.' + SPLIT_BUTTON);\n type = 'splitButton';\n toolbarItem = element.data(type);\n }\n if (isResizable) {\n overflowItem = toolbarItem.twin();\n }\n } else if (isResizable) {\n element = this.popup.element.find(candidate);\n type = element.length ? element.data('type') : '';\n overflowItem = element.data(type);\n if (overflowItem && overflowItem.main) {\n element = element.parent('.' + SPLIT_BUTTON);\n type = 'splitButton';\n overflowItem = element.data(type);\n }\n }\n return {\n type: type,\n toolbar: toolbarItem,\n overflow: overflowItem\n };\n },\n remove: function (candidate) {\n var item = this._getItem(candidate);\n if (item.toolbar) {\n item.toolbar.remove();\n }\n if (item.overflow) {\n item.overflow.remove();\n }\n this.resize(true);\n },\n hide: function (candidate) {\n var item = this._getItem(candidate);\n var buttonGroupInstance;\n if (item.toolbar) {\n if (item.toolbar.options.type === 'button' && item.toolbar.options.isChild) {\n buttonGroupInstance = item.toolbar.getParentGroup();\n item.toolbar.hide();\n if (buttonGroupInstance) {\n buttonGroupInstance.refresh();\n }\n } else if (!item.toolbar.options.hidden) {\n item.toolbar.hide();\n }\n }\n if (item.overflow) {\n if (item.overflow.options.type === 'button' && item.overflow.options.isChild) {\n buttonGroupInstance = item.overflow.getParentGroup();\n item.overflow.hide();\n if (buttonGroupInstance) {\n buttonGroupInstance.refresh();\n }\n } else if (!item.overflow.options.hidden) {\n item.overflow.hide();\n }\n }\n this.resize(true);\n },\n show: function (candidate) {\n var item = this._getItem(candidate);\n if (item.toolbar) {\n if (item.toolbar.options.type === 'button' && item.toolbar.options.isChild) {\n item.toolbar.show();\n item.toolbar.getParentGroup().refresh();\n } else if (item.toolbar.options.hidden) {\n item.toolbar.show();\n }\n }\n if (item.overflow) {\n if (item.overflow.options.type === 'button' && item.overflow.options.isChild) {\n item.toolbar.show();\n item.overflow.getParentGroup().refresh();\n } else if (item.overflow.options.hidden) {\n item.overflow.show();\n }\n }\n this.resize(true);\n },\n enable: function (element, enable) {\n var item = this._getItem(element);\n if (typeof enable == 'undefined') {\n enable = true;\n }\n if (item.toolbar) {\n item.toolbar.enable(enable);\n }\n if (item.overflow) {\n item.overflow.enable(enable);\n }\n },\n getSelectedFromGroup: function (groupName) {\n return this.element.find('.' + TOGGLE_BUTTON + '[data-group=\\'' + groupName + '\\']').filter('.' + STATE_ACTIVE);\n },\n toggle: function (button, checked) {\n var element = $(button), item = element.data('button');\n if (item.options.togglable) {\n if (checked === undefined) {\n checked = true;\n }\n item.toggle(checked, true);\n }\n },\n _renderOverflow: function () {\n var that = this, overflowContainer = components.overflowContainer, isRtl = that._isRtl, horizontalDirection = isRtl ? 'left' : 'right';\n that.overflowAnchor = $(components.overflowAnchor).addClass(BUTTON);\n that.element.append(that.overflowAnchor);\n if (that.isMobile) {\n that.overflowAnchor.append('');\n overflowContainer = actionSheetWrap(overflowContainer);\n } else {\n that.overflowAnchor.append('');\n }\n that.popup = new kendo.ui.Popup(overflowContainer, {\n origin: 'bottom ' + horizontalDirection,\n position: 'top ' + horizontalDirection,\n anchor: that.overflowAnchor,\n isRtl: isRtl,\n animation: that.animation,\n appendTo: that.isMobile ? $(that.isMobile).children('.km-pane') : null,\n copyAnchorStyles: false,\n open: function (e) {\n var wrapper = kendo.wrap(that.popup.element).addClass('k-overflow-wrapper');\n if (!that.isMobile) {\n wrapper.css('margin-left', (isRtl ? -1 : 1) * ((outerWidth(wrapper) - wrapper.width()) / 2 + 1));\n } else {\n that.popup.container.css('max-height', parseFloat($('.km-content:visible').innerHeight()) - 15 + 'px');\n }\n if (that.trigger(OVERFLOW_OPEN)) {\n e.preventDefault();\n }\n },\n activate: function () {\n this.element.find(':kendoFocusable').first().focus();\n },\n close: function (e) {\n if (that.trigger(OVERFLOW_CLOSE)) {\n e.preventDefault();\n }\n this.element.focus();\n }\n });\n that.popup.element.on('keydown', '.' + BUTTON, function (e) {\n var target = $(e.target), li = target.parent(), isComplexTool = li.is('.' + BUTTON_GROUP) || li.is('.' + SPLIT_BUTTON), element;\n e.preventDefault();\n if (e.keyCode === keys.ESC || e.keyCode === keys.TAB || e.altKey && e.keyCode === keys.UP) {\n that._toggleOverflow();\n that.overflowAnchor.focus();\n } else if (e.keyCode === keys.DOWN) {\n element = !isComplexTool || isComplexTool && target.is(':last-child') ? li : target;\n findFocusableSibling(element, 'next').focus();\n } else if (e.keyCode === keys.UP) {\n element = !isComplexTool || isComplexTool && target.is(':first-child') ? li : target;\n findFocusableSibling(element, 'prev').focus();\n } else if (e.keyCode === keys.SPACEBAR || e.keyCode === keys.ENTER) {\n that.userEvents.trigger('tap', { target: $(e.target) });\n that.overflowAnchor.focus();\n } else if (e.keyCode === keys.HOME) {\n li.parent().find(':kendoFocusable').first().focus();\n } else if (e.keyCode === keys.END) {\n li.parent().find(':kendoFocusable').last().focus();\n }\n });\n if (that.isMobile) {\n that.popup.container = that.popup.element.find('.' + OVERFLOW_CONTAINER);\n } else {\n that.popup.container = that.popup.element;\n }\n that.popup.container.attr(KENDO_UID_ATTR, this.uid);\n },\n _toggleOverflowAnchor: function () {\n var hasVisibleChildren = false;\n 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 } else {\n this.overflowAnchor.css({\n visibility: 'hidden',\n width: '1px'\n });\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 + '\\')').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', msie = kendo.support.browser.msie, supportEventDelegation = false;\n (function ($) {\n (function () {\n $('
        ').on('click', '>*', function () {\n supportEventDelegation = true;\n }).find('span').click().end().off();\n }());\n }($));\n var Selectable = Widget.extend({\n init: function (element, options) {\n var that = this, multiple;\n Widget.fn.init.call(that, element, options);\n that._marquee = $('
        ');\n that._lastActive = null;\n that.element.addClass(SELECTABLE);\n that.relatedTarget = that.options.relatedTarget;\n multiple = that.options.multiple;\n if (this.options.aria && multiple) {\n that.element.attr('aria-multiselectable', true);\n }\n that.userEvents = new kendo.UserEvents(that.element, {\n global: true,\n allowSelection: true,\n filter: (!supportEventDelegation ? '.' + SELECTABLE + ' ' : '') + that.options.filter,\n tap: proxy(that._tap, that),\n touchAction: multiple ? 'none' : 'pan-x pan-y'\n });\n if (multiple) {\n that.userEvents.bind('start', proxy(that._start, that)).bind('move', proxy(that._move, that)).bind('end', proxy(that._end, that)).bind('select', proxy(that._select, that));\n }\n },\n events: [\n CHANGE,\n UNSELECT\n ],\n options: {\n name: 'Selectable',\n filter: '>*',\n inputSelectors: INPUTSELECTOR,\n multiple: false,\n relatedTarget: $.noop\n },\n _isElement: function (target) {\n var elements = this.element;\n var idx, length = elements.length, result = false;\n target = target[0];\n for (idx = 0; idx < length; idx++) {\n if (elements[idx] === target) {\n result = true;\n break;\n }\n }\n return result;\n },\n _tap: function (e) {\n var target = $(e.target), that = this, ctrlKey = e.event.ctrlKey || e.event.metaKey, multiple = that.options.multiple, shiftKey = multiple && e.event.shiftKey, selected, whichCode = e.event.which, buttonCode = e.event.button;\n if (!that._isElement(target.closest('.' + SELECTABLE)) || whichCode && whichCode == 3 || buttonCode && buttonCode == 2) {\n return;\n }\n if (!this._allowSelection(e.event.target)) {\n return;\n }\n selected = target.hasClass(SELECTED);\n if (!multiple || !ctrlKey) {\n that.clear();\n }\n target = target.add(that.relatedTarget(target));\n if (shiftKey) {\n that.selectRange(that._firstSelectee(), target, e);\n } else {\n if (selected && ctrlKey) {\n that._unselect(target);\n that._notify(CHANGE, e);\n } else {\n that.value(target, e);\n }\n that._lastActive = that._downTarget = target;\n }\n },\n _start: function (e) {\n var that = this, target = $(e.target), selected = target.hasClass(SELECTED), currentElement, ctrlKey = e.event.ctrlKey || e.event.metaKey;\n if (!this._allowSelection(e.event.target)) {\n return;\n }\n that._downTarget = target;\n if (!that._isElement(target.closest('.' + SELECTABLE))) {\n that.userEvents.cancel();\n return;\n }\n if (that.options.useAllItems) {\n that._items = that.element.find(that.options.filter);\n } else {\n currentElement = target.closest(that.element);\n that._items = currentElement.find(that.options.filter);\n }\n e.sender.capture();\n that._marquee.appendTo(document.body).css({\n left: e.x.client + 1,\n top: e.y.client + 1,\n width: 0,\n height: 0\n });\n if (!ctrlKey) {\n that.clear();\n }\n target = target.add(that.relatedTarget(target));\n if (selected) {\n that._selectElement(target, true);\n if (ctrlKey) {\n target.addClass(UNSELECTING);\n }\n }\n },\n _move: function (e) {\n var that = this, position = {\n left: e.x.startLocation > e.x.location ? e.x.location : e.x.startLocation,\n top: e.y.startLocation > e.y.location ? e.y.location : e.y.startLocation,\n width: abs(e.x.initialDelta),\n height: abs(e.y.initialDelta)\n };\n that._marquee.css(position);\n that._invalidateSelectables(position, e.event.ctrlKey || e.event.metaKey);\n e.preventDefault();\n },\n _end: function (e) {\n var that = this;\n that._marquee.remove();\n that._unselect(that.element.find(that.options.filter + '.' + UNSELECTING)).removeClass(UNSELECTING);\n var target = that.element.find(that.options.filter + '.' + ACTIVE);\n target = target.add(that.relatedTarget(target));\n that.value(target, e);\n that._lastActive = that._downTarget;\n that._items = null;\n },\n _invalidateSelectables: function (position, ctrlKey) {\n var idx, length, target = this._downTarget[0], items = this._items, related, toSelect;\n for (idx = 0, length = items.length; idx < length; idx++) {\n toSelect = items.eq(idx);\n related = toSelect.add(this.relatedTarget(toSelect));\n if (collision(toSelect, position)) {\n if (toSelect.hasClass(SELECTED)) {\n if (ctrlKey && target !== toSelect[0]) {\n related.removeClass(SELECTED).addClass(UNSELECTING);\n }\n } else if (!toSelect.hasClass(ACTIVE) && !toSelect.hasClass(UNSELECTING)) {\n related.addClass(ACTIVE);\n }\n } else {\n if (toSelect.hasClass(ACTIVE)) {\n related.removeClass(ACTIVE);\n } else if (ctrlKey && toSelect.hasClass(UNSELECTING)) {\n related.removeClass(UNSELECTING).addClass(SELECTED);\n }\n }\n }\n },\n value: function (val, e) {\n var that = this, selectElement = proxy(that._selectElement, that);\n if (val) {\n val.each(function () {\n selectElement(this);\n });\n that._notify(CHANGE, e);\n return;\n }\n return that.element.find(that.options.filter + '.' + SELECTED);\n },\n _firstSelectee: function () {\n var that = this, selected;\n if (that._lastActive !== null) {\n return that._lastActive;\n }\n selected = that.value();\n return selected.length > 0 ? selected[0] : that.element.find(that.options.filter)[0];\n },\n _selectElement: function (element, preventNotify) {\n var toSelect = $(element), isPrevented = !preventNotify && this._notify('select', { element: element });\n toSelect.removeClass(ACTIVE);\n if (!isPrevented) {\n toSelect.addClass(SELECTED);\n if (this.options.aria) {\n toSelect.attr(ARIASELECTED, true);\n }\n }\n },\n _notify: function (name, args) {\n args = args || {};\n return this.trigger(name, args);\n },\n _unselect: function (element) {\n if (this.trigger(UNSELECT, { element: element })) {\n return;\n }\n element.removeClass(SELECTED);\n if (this.options.aria) {\n element.attr(ARIASELECTED, false);\n }\n return element;\n },\n _select: function (e) {\n if (this._allowSelection(e.event.target)) {\n if (!msie || msie && !$(kendo._activeElement()).is(this.options.inputSelectors)) {\n e.preventDefault();\n }\n }\n },\n _allowSelection: function (target) {\n if ($(target).is(this.options.inputSelectors)) {\n this.userEvents.cancel();\n this._downTarget = null;\n return false;\n }\n return true;\n },\n resetTouchEvents: function () {\n this.userEvents.cancel();\n },\n clear: function () {\n var items = this.element.find(this.options.filter + '.' + SELECTED);\n this._unselect(items);\n },\n selectRange: function (start, end, e) {\n var that = this, idx, tmp, items;\n that.clear();\n if (that.element.length > 1) {\n items = that.options.continuousItems();\n }\n if (!items || !items.length) {\n items = that.element.find(that.options.filter);\n }\n start = $.inArray($(start)[0], items);\n end = $.inArray($(end)[0], items);\n if (start > end) {\n tmp = start;\n start = end;\n end = tmp;\n }\n if (!that.options.useAllItems) {\n end += that.element.length - 1;\n }\n for (idx = start; idx <= end; idx++) {\n that._selectElement(items[idx]);\n }\n that._notify(CHANGE, e);\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.element.off(NS);\n that.userEvents.destroy();\n that._marquee = that._lastActive = that.element = that.userEvents = null;\n }\n });\n Selectable.parseOptions = function (selectable) {\n var asLowerString = typeof selectable === 'string' && selectable.toLowerCase();\n return {\n multiple: asLowerString && asLowerString.indexOf('multiple') > -1,\n cell: asLowerString && asLowerString.indexOf('cell') > -1\n };\n };\n function collision(element, position) {\n if (!element.is(':visible')) {\n return false;\n }\n var elementPosition = kendo.getOffset(element), right = position.left + position.width, bottom = position.top + position.height;\n elementPosition.right = elementPosition.left + kendo._outerWidth(element);\n elementPosition.bottom = elementPosition.top + kendo._outerHeight(element);\n return !(elementPosition.left > right || elementPosition.right < position.left || elementPosition.top > bottom || elementPosition.bottom < position.top);\n }\n kendo.ui.plugin(Selectable);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.calendar', [\n 'kendo.core',\n 'kendo.selectable'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'calendar',\n name: 'Calendar',\n category: 'web',\n description: 'The Calendar widget renders a graphical calendar that supports navigation and selection.',\n depends: [\n 'core',\n 'selectable'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, ui = kendo.ui, Widget = ui.Widget, keys = kendo.keys, parse = kendo.parseDate, adjustDST = kendo.date.adjustDST, weekInYear = kendo.date.weekInYear, Selectable = kendo.ui.Selectable, extractFormat = kendo._extractFormat, template = kendo.template, getCulture = kendo.getCulture, transitions = kendo.support.transitions, transitionOrigin = transitions ? transitions.css + 'transform-origin' : '', cellTemplate = template('#=data.value#', { useWithBlock: false }), emptyCellTemplate = template('', { useWithBlock: false }), otherMonthCellTemplate = template(' ', { useWithBlock: false }), weekNumberTemplate = template('#= data.weekNumber #', { useWithBlock: false }), browser = kendo.support.browser, isIE8 = browser.msie && browser.version < 9, outerWidth = kendo._outerWidth, ns = '.kendoCalendar', CLICK = 'click' + ns, KEYDOWN_NS = 'keydown' + ns, ID = 'id', MIN = 'min', LEFT = 'left', SLIDE = 'slideIn', MONTH = 'month', CENTURY = 'century', CHANGE = 'change', NAVIGATE = 'navigate', VALUE = 'value', HOVER = 'k-state-hover', DISABLED = 'k-state-disabled', FOCUSED = 'k-state-focused', OTHERMONTH = 'k-other-month', OTHERMONTHCLASS = ' class=\"' + OTHERMONTH + '\"', OUTOFRANGE = 'k-out-of-range', TODAY = 'k-nav-today', CELLSELECTOR = 'td:has(.k-link)', CELLSELECTORVALID = 'td:has(.k-link):not(.' + DISABLED + '):not(.' + OUTOFRANGE + ')', WEEKCOLUMNSELECTOR = 'td:not(:has(.k-link))', SELECTED = 'k-state-selected', BLUR = 'blur' + ns, FOCUS = 'focus', FOCUS_WITH_NS = FOCUS + ns, MOUSEENTER = support.touch ? 'touchstart' : 'mouseenter', MOUSEENTER_WITH_NS = support.touch ? 'touchstart' + ns : 'mouseenter' + ns, MOUSELEAVE = support.touch ? 'touchend' + ns + ' touchmove' + ns : 'mouseleave' + ns, MS_PER_MINUTE = 60000, MS_PER_DAY = 86400000, PREVARROW = '_prevArrow', NEXTARROW = '_nextArrow', ARIA_DISABLED = 'aria-disabled', ARIA_SELECTED = 'aria-selected', ARIA_LABEL = 'aria-label', proxy = $.proxy, extend = $.extend, DATE = Date, views = {\n month: 0,\n year: 1,\n decade: 2,\n century: 3\n };\n var Calendar = Widget.extend({\n init: function (element, options) {\n var that = this, value, id;\n Widget.fn.init.call(that, element, options);\n element = that.wrapper = that.element;\n options = that.options;\n options.url = window.unescape(options.url);\n that.options.disableDates = getDisabledExpr(that.options.disableDates);\n that._templates();\n that._selectable();\n that._header();\n that._viewWrapper();\n that._footer(that.footer);\n id = element.addClass('k-widget k-calendar ' + (options.weekNumber ? ' k-week-number' : '')).on(MOUSEENTER_WITH_NS + ' ' + MOUSELEAVE, CELLSELECTOR, mousetoggle).on(KEYDOWN_NS, 'table.k-content', proxy(that._move, that)).on(CLICK, CELLSELECTOR, function (e) {\n var link = e.currentTarget.firstChild, value = toDateObject(link);\n if (link.href.indexOf('#') != -1) {\n e.preventDefault();\n }\n if (that._view.name == 'month' && that.options.disableDates(value)) {\n return;\n }\n if (that._view.name != 'month' || options.selectable == 'single') {\n that._click($(link));\n }\n }).on('mouseup' + ns, 'table.k-content, .k-footer', function () {\n that._focusView(that.options.focusOnNav !== false);\n }).attr(ID);\n if (id) {\n that._cellID = id + '_cell_selected';\n }\n if (that._isMultipleSelection() && that.options.weekNumber) {\n element.on(CLICK, WEEKCOLUMNSELECTOR, function (e) {\n var first = $(e.currentTarget).closest('tr').find(CELLSELECTORVALID).first(), last = that.selectable._lastActive = $(e.currentTarget).closest('tr').find(CELLSELECTORVALID).last();\n that.selectable.selectRange(first, last, { event: e });\n that._current = that._value = toDateObject(last.find('a'));\n that._class(FOCUSED, that._current);\n });\n }\n normalize(options);\n value = parse(options.value, options.format, options.culture);\n that._selectDates = [];\n that._index = views[options.start];\n that._current = new DATE(+restrictValue(value, options.min, options.max));\n that._addClassProxy = function () {\n that._active = true;\n if (that._cell.hasClass(DISABLED)) {\n var todayString = that._view.toDateString(getToday());\n that._cell = that._cellByDate(todayString);\n }\n that._cell.addClass(FOCUSED);\n };\n that._removeClassProxy = function () {\n that._active = false;\n that._cell.removeClass(FOCUSED);\n };\n that.value(value);\n if (that._isMultipleSelection() && options.selectDates.length > 0) {\n that.selectDates(options.selectDates);\n }\n kendo.notify(that);\n },\n options: {\n name: 'Calendar',\n value: null,\n min: new DATE(1900, 0, 1),\n max: new DATE(2099, 11, 31),\n dates: [],\n disableDates: null,\n url: '',\n culture: '',\n footer: '',\n format: '',\n month: {},\n weekNumber: false,\n selectable: 'single',\n selectDates: [],\n start: MONTH,\n depth: MONTH,\n animation: {\n horizontal: {\n effects: SLIDE,\n reverse: true,\n duration: 500,\n divisor: 2\n },\n vertical: {\n effects: 'zoomIn',\n duration: 400\n }\n },\n messages: { weekColumnHeader: '' }\n },\n events: [\n CHANGE,\n NAVIGATE\n ],\n setOptions: function (options) {\n var that = this;\n normalize(options);\n options.disableDates = getDisabledExpr(options.disableDates);\n Widget.fn.setOptions.call(that, options);\n that._templates();\n that._selectable();\n that._viewWrapper();\n that._footer(that.footer);\n that._index = views[that.options.start];\n that.navigate();\n if (options.weekNumber) {\n that.element.addClass('k-week-number');\n }\n },\n destroy: function () {\n var that = this, today = that._today;\n that.element.off(ns);\n that._title.off(ns);\n that[PREVARROW].off(ns);\n that[NEXTARROW].off(ns);\n that._destroySelectable();\n kendo.destroy(that._table);\n if (today) {\n kendo.destroy(today.off(ns));\n }\n Widget.fn.destroy.call(that);\n },\n current: function () {\n return this._current;\n },\n view: function () {\n return this._view;\n },\n focus: function (table) {\n table = table || this._table;\n this._bindTable(table);\n table.focus();\n },\n min: function (value) {\n return this._option(MIN, value);\n },\n max: function (value) {\n return this._option('max', value);\n },\n navigateToPast: function () {\n this._navigate(PREVARROW, -1);\n },\n navigateToFuture: function () {\n this._navigate(NEXTARROW, 1);\n },\n navigateUp: function () {\n var that = this, index = that._index;\n if (that._title.hasClass(DISABLED)) {\n return;\n }\n that.navigate(that._current, ++index);\n },\n navigateDown: function (value) {\n var that = this, index = that._index, depth = that.options.depth;\n if (!value) {\n return;\n }\n if (index === views[depth]) {\n if (!isEqualDate(that._value, that._current) || !isEqualDate(that._value, value)) {\n that.value(value);\n that.trigger(CHANGE);\n }\n return;\n }\n that.navigate(value, --index);\n },\n navigate: function (value, view) {\n view = isNaN(view) ? views[view] : view;\n var that = this, options = that.options, culture = options.culture, min = options.min, max = options.max, title = that._title, from = that._table, old = that._oldTable, currentValue = that._current, future = value && +value > +currentValue, vertical = view !== undefined && view !== that._index, to, currentView, compare, disabled;\n if (!value) {\n value = currentValue;\n }\n that._current = value = new DATE(+restrictValue(value, min, max));\n if (view === undefined) {\n view = that._index;\n } else {\n that._index = view;\n }\n that._view = currentView = calendar.views[view];\n compare = currentView.compare;\n disabled = view === views[CENTURY];\n title.toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n disabled = compare(value, min) < 1;\n that[PREVARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n if (that[PREVARROW].hasClass(DISABLED)) {\n that[PREVARROW].removeClass(HOVER);\n }\n disabled = compare(value, max) > -1;\n that[NEXTARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n if (that[NEXTARROW].hasClass(DISABLED)) {\n that[NEXTARROW].removeClass(HOVER);\n }\n if (from && old && old.data('animating')) {\n old.kendoStop(true, true);\n from.kendoStop(true, true);\n }\n that._oldTable = from;\n if (!from || that._changeView) {\n title.html(currentView.title(value, min, max, culture));\n that._table = to = $(currentView.content(extend({\n min: min,\n max: max,\n date: value,\n url: options.url,\n dates: options.dates,\n format: options.format,\n otherMonth: true,\n culture: culture,\n disableDates: options.disableDates,\n isWeekColumnVisible: options.weekNumber,\n messages: options.messages\n }, that[currentView.name])));\n addClassToViewContainer(to, currentView.name);\n makeUnselectable(to);\n var replace = from && from.data('start') === to.data('start');\n that._animate({\n from: from,\n to: to,\n vertical: vertical,\n future: future,\n replace: replace\n });\n that.trigger(NAVIGATE);\n that._focus(value);\n }\n if (view === views[options.depth] && that._selectDates.length > 0) {\n that._visualizeSelectedDatesInView();\n }\n if (that.options.selectable === 'single') {\n if (view === views[options.depth] && that._value && !that.options.disableDates(that._value)) {\n that._class('k-state-selected', that._value);\n }\n }\n that._class(FOCUSED, value);\n if (!from && that._cell) {\n that._cell.removeClass(FOCUSED);\n }\n that._changeView = true;\n },\n selectDates: function (dates) {\n var that = this, validSelectedDates, datesUnique;\n if (dates === undefined) {\n return that._selectDates;\n }\n datesUnique = dates.map(function (date) {\n return date.getTime();\n }).filter(function (date, position, array) {\n return array.indexOf(date) === position;\n }).map(function (time) {\n return new Date(time);\n });\n validSelectedDates = $.grep(datesUnique, function (value) {\n if (value) {\n return +that._validateValue(new Date(value.setHours(0, 0, 0, 0))) === +value;\n }\n });\n that._selectDates = validSelectedDates.length > 0 ? validSelectedDates : datesUnique.length === 0 ? datesUnique : that._selectDates;\n that._visualizeSelectedDatesInView();\n },\n value: function (value) {\n var that = this, old = that._view, view = that._view;\n if (value === undefined) {\n return that._value;\n }\n value = that._validateValue(value);\n if (value && that._isMultipleSelection()) {\n var date = new Date(+value);\n date.setHours(0, 0, 0, 0);\n that._selectDates = [date];\n that.selectable._lastActive = null;\n }\n if (old && value === null && that._cell) {\n that._cell.removeClass(SELECTED);\n } else {\n that._changeView = !value || view && view.compare(value, that._current) !== 0;\n that.navigate(value);\n }\n },\n _validateValue: function (value) {\n var that = this, options = that.options, min = options.min, max = options.max;\n if (value === null) {\n that._current = createDate(that._current.getFullYear(), that._current.getMonth(), that._current.getDate());\n }\n value = parse(value, options.format, options.culture);\n if (value !== null) {\n value = new DATE(+value);\n if (!isInRange(value, min, max)) {\n value = null;\n }\n }\n if (value === null || !that.options.disableDates(new Date(+value))) {\n that._value = value;\n } else if (that._value === undefined) {\n that._value = null;\n }\n return that._value;\n },\n _visualizeSelectedDatesInView: function () {\n var that = this;\n var selectedDates = {};\n $.each(that._selectDates, function (index, value) {\n selectedDates[kendo.calendar.views[0].toDateString(value)] = value;\n });\n that.selectable.clear();\n var cells = that._table.find(CELLSELECTOR).filter(function (index, element) {\n return selectedDates[$(element.firstChild).attr(kendo.attr(VALUE))];\n });\n if (cells.length > 0) {\n that.selectable._selectElement(cells, true);\n }\n },\n _isMultipleSelection: function () {\n var that = this;\n return that.options.selectable === 'multiple';\n },\n _selectable: function () {\n var that = this;\n if (!that._isMultipleSelection()) {\n return;\n }\n var selectable = that.options.selectable, selectableOptions = Selectable.parseOptions(selectable);\n if (selectableOptions.multiple) {\n that.element.attr('aria-multiselectable', 'true');\n }\n that.selectable = new Selectable(that.wrapper, {\n aria: true,\n inputSelectors: 'input,textarea,.k-multiselect-wrap,select,button,.k-button>span,.k-button>img,span.k-icon.k-i-arrow-60-down,span.k-icon.k-i-arrow-60-up',\n multiple: selectableOptions.multiple,\n filter: 'table.k-month:eq(0) ' + CELLSELECTORVALID,\n change: proxy(that._onSelect, that),\n relatedTarget: proxy(that._onRelatedTarget, that)\n });\n },\n _onRelatedTarget: function (target) {\n var that = this;\n if (that.selectable.options.multiple && target.is(CELLSELECTORVALID)) {\n that._current = toDateObject(target.find('a'));\n that._class(FOCUSED, toDateObject(target.find('a')));\n }\n },\n _onSelect: function (e) {\n var that = this, eventArgs = e, selectableOptions = Selectable.parseOptions(that.options.selectable);\n if (!selectableOptions.multiple) {\n if ($(eventArgs.event.currentTarget).is('td') && !$(eventArgs.event.currentTarget).hasClass('k-state-selected')) {\n $(eventArgs.event.currentTarget).addClass('k-state-selected');\n } else {\n that._click($(eventArgs.event.currentTarget).find('a'));\n }\n return;\n }\n if (eventArgs.event.ctrlKey || eventArgs.event.metaKey) {\n if ($(eventArgs.event.currentTarget).is(CELLSELECTORVALID)) {\n that._toggleSelection($(eventArgs.event.currentTarget));\n } else {\n that._cellsBySelector(CELLSELECTORVALID).each(function (index, element) {\n var value = toDateObject($(element).find('a'));\n that._deselect(value);\n });\n that._addSelectedCellsToArray();\n }\n } else if (eventArgs.event.shiftKey) {\n that._rangeSelection(that._cell);\n } else if ($(eventArgs.event.currentTarget).is(CELLSELECTOR)) {\n that.value(toDateObject($(eventArgs.event.currentTarget).find('a')));\n } else {\n that._selectDates = [];\n that._addSelectedCellsToArray();\n }\n that.trigger(CHANGE);\n },\n _destroySelectable: function () {\n var that = this;\n if (that.selectable) {\n that.selectable.destroy();\n that.selectable = null;\n }\n },\n _toggleSelection: function (currentCell) {\n var that = this, date = toDateObject(currentCell.find('a'));\n if (currentCell.hasClass('k-state-selected')) {\n that._selectDates.push(date);\n } else {\n that._deselect(date);\n }\n },\n _rangeSelection: function (toDateCell, startDate) {\n var that = this, fromDate = startDate || toDateObject(that.selectable.value().first().find('a')), toDate = toDateObject(toDateCell.find('a')), daysDifference;\n if (that.selectable._lastActive || that._value) {\n fromDate = that.selectable._lastActive ? toDateObject(that.selectable._lastActive.find('a')) : new Date(+that._value);\n } else {\n that.selectable._lastActive = startDate ? that._cellByDate(that._view.toDateString(startDate), CELLSELECTORVALID) : that.selectable.value().first();\n }\n that._selectDates = [];\n daysDifference = daysBetweenTwoDates(fromDate, toDate);\n addDaysToArray(that._selectDates, daysDifference, fromDate, that.options.disableDates);\n that._visualizeSelectedDatesInView();\n },\n _cellsBySelector: function (selector) {\n var that = this;\n return that._table.find(selector);\n },\n _addSelectedCellsToArray: function () {\n var that = this;\n that.selectable.value().each(function (index, item) {\n var date = toDateObject($(item.firstChild));\n if (!that.options.disableDates(date)) {\n that._selectDates.push(date);\n }\n });\n },\n _deselect: function (date) {\n var that = this;\n var currentDateIndex = that._selectDates.map(Number).indexOf(+date);\n if (currentDateIndex != -1) {\n that._selectDates.splice(currentDateIndex, 1);\n }\n },\n _dateInView: function (date) {\n var that = this, firstDateInView = toDateObject(that._cellsBySelector(CELLSELECTOR + ':first').find('a')), lastDateInView = toDateObject(that._cellsBySelector(CELLSELECTOR + ':last').find('a'));\n return +date <= +lastDateInView && +date >= +firstDateInView;\n },\n _move: function (e) {\n var that = this, options = that.options, key = e.keyCode, view = that._view, index = that._index, min = that.options.min, max = that.options.max, currentValue = new DATE(+that._current), isRtl = kendo.support.isRtl(that.wrapper), isDisabled = that.options.disableDates, value, prevent, method, temp;\n if (e.target === that._table[0]) {\n that._active = true;\n }\n if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\n value = 1;\n prevent = true;\n } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\n value = -1;\n prevent = true;\n } else if (key == keys.UP) {\n value = index === 0 ? -7 : -4;\n prevent = true;\n } else if (key == keys.DOWN) {\n value = index === 0 ? 7 : 4;\n prevent = true;\n } else if (key == keys.SPACEBAR) {\n value = 0;\n prevent = true;\n } else if (key == keys.HOME || key == keys.END) {\n method = key == keys.HOME ? 'first' : 'last';\n temp = view[method](currentValue);\n currentValue = new DATE(temp.getFullYear(), temp.getMonth(), temp.getDate(), currentValue.getHours(), currentValue.getMinutes(), currentValue.getSeconds(), currentValue.getMilliseconds());\n currentValue.setFullYear(temp.getFullYear());\n prevent = true;\n }\n if (e.ctrlKey || e.metaKey) {\n if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\n that.navigateToFuture();\n prevent = true;\n } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\n that.navigateToPast();\n prevent = true;\n } else if (key == keys.UP) {\n that.navigateUp();\n prevent = true;\n } else if (key == keys.DOWN) {\n that._click($(that._cell[0].firstChild));\n prevent = true;\n } else if ((key == keys.ENTER || key == keys.SPACEBAR) && that._isMultipleSelection()) {\n that._keyboardToggleSelection(e);\n var focusedDate = toDateObject($(that._cell[0]).find('a'));\n that._class(FOCUSED, focusedDate);\n }\n } else if (e.shiftKey) {\n if (value !== undefined || method) {\n if (!method) {\n view.setDate(currentValue, value);\n }\n if (!isInRange(currentValue, min, max)) {\n currentValue = restrictValue(currentValue, options.min, options.max);\n }\n if (isDisabled(currentValue)) {\n currentValue = that._nextNavigatable(currentValue, value);\n }\n min = createDate(min.getFullYear(), min.getMonth(), min.getDate());\n if (that._isMultipleSelection()) {\n that._keyboardRangeSelection(e, currentValue);\n } else {\n that._focus(currentValue);\n }\n }\n } else {\n if (key == keys.ENTER || key == keys.SPACEBAR) {\n if (view.name == 'month' && that._isMultipleSelection()) {\n that.value(toDateObject($(that._cell.find('a'))));\n that.selectable._lastActive = $(that._cell[0]);\n that.trigger(CHANGE);\n } else {\n that._click($(that._cell[0].firstChild));\n }\n prevent = true;\n } else if (key == keys.PAGEUP) {\n prevent = true;\n that.navigateToPast();\n } else if (key == keys.PAGEDOWN) {\n prevent = true;\n that.navigateToFuture();\n }\n if (value || method) {\n if (!method) {\n view.setDate(currentValue, value);\n }\n min = createDate(min.getFullYear(), min.getMonth(), min.getDate());\n if (!isInRange(currentValue, min, max)) {\n currentValue = restrictValue(currentValue, options.min, options.max);\n }\n if (isDisabled(currentValue)) {\n currentValue = that._nextNavigatable(currentValue, value);\n }\n if (that._isMultipleSelection()) {\n if (!that._dateInView(currentValue)) {\n that.navigate(currentValue);\n } else {\n that._current = currentValue;\n that._class(FOCUSED, currentValue);\n }\n } else {\n that._focus(currentValue);\n }\n }\n }\n if (prevent) {\n e.preventDefault();\n }\n return that._current;\n },\n _keyboardRangeSelection: function (event, currentValue) {\n var that = this, fromDate, daysDifference;\n if (!that._dateInView(currentValue)) {\n that._selectDates = [];\n fromDate = that.selectable._lastActive ? toDateObject(that.selectable._lastActive.find('a')) : currentValue;\n daysDifference = daysBetweenTwoDates(fromDate, new Date(+currentValue));\n addDaysToArray(that._selectDates, daysDifference, fromDate, that.options.disableDates);\n that.navigate(currentValue);\n that._current = currentValue;\n that.selectable._lastActive = that.selectable._lastActive || that._cellByDate(that._view.toDateString(currentValue), CELLSELECTORVALID);\n that.trigger(CHANGE);\n return;\n }\n that.selectable.options.filter = that.wrapper.find('table').length > 1 && +currentValue > +that._current ? 'table.k-month:eq(1) ' + CELLSELECTORVALID : 'table.k-month:eq(0) ' + CELLSELECTORVALID;\n that._class(FOCUSED, currentValue);\n that._current = currentValue;\n that._rangeSelection(that._cellByDate(that._view.toDateString(currentValue), CELLSELECTORVALID), currentValue);\n that.trigger(CHANGE);\n that.selectable.options.filter = 'table.k-month:eq(0) ' + CELLSELECTORVALID;\n },\n _keyboardToggleSelection: function (event) {\n var that = this;\n event.currentTarget = that._cell[0];\n that.selectable._lastActive = $(that._cell[0]);\n if ($(that._cell[0]).hasClass(SELECTED)) {\n that.selectable._unselect($(that._cell[0]));\n that.selectable.trigger(CHANGE, { event: event });\n } else {\n that.selectable.value($(that._cell[0]), { event: event });\n }\n },\n _nextNavigatable: function (currentValue, value) {\n var that = this, disabled = true, view = that._view, min = that.options.min, max = that.options.max, isDisabled = that.options.disableDates, navigatableDate = new Date(currentValue.getTime());\n view.setDate(navigatableDate, -value);\n while (disabled) {\n view.setDate(currentValue, value);\n if (!isInRange(currentValue, min, max)) {\n currentValue = navigatableDate;\n break;\n }\n disabled = isDisabled(currentValue);\n }\n return currentValue;\n },\n _animate: function (options) {\n var that = this;\n var from = options.from;\n var to = options.to;\n var active = that._active;\n var viewWrapper = that.element.children('.k-calendar-view');\n if (!from) {\n viewWrapper.append(to);\n that._bindTable(to);\n } else if (from.parent().data('animating')) {\n from.off(ns);\n from.parent().kendoStop(true, true).remove();\n from.remove();\n viewWrapper.append(to);\n that._focusView(active);\n } else if (!from.is(':visible') || that.options.animation === false || options.replace) {\n to.insertAfter(from);\n from.off(ns).remove();\n that._focusView(active);\n } else {\n that[options.vertical ? '_vertical' : '_horizontal'](from, to, options.future);\n }\n },\n _horizontal: function (from, to, future) {\n var that = this, active = that._active, horizontal = that.options.animation.horizontal, effects = horizontal.effects, viewWidth = outerWidth(from);\n if (effects && effects.indexOf(SLIDE) != -1) {\n from.add(to).css({ width: viewWidth });\n from.wrap('
        ');\n that._focusView(active, from);\n from.parent().css({\n position: 'relative',\n width: viewWidth * 2,\n 'float': LEFT,\n 'margin-left': future ? 0 : -viewWidth\n });\n to[future ? 'insertAfter' : 'insertBefore'](from);\n extend(horizontal, {\n effects: SLIDE + ':' + (future ? 'right' : LEFT),\n complete: function () {\n from.off(ns).remove();\n that._oldTable = null;\n to.unwrap();\n that._focusView(active);\n }\n });\n from.parent().kendoStop(true, true).kendoAnimate(horizontal);\n }\n },\n _vertical: function (from, to) {\n var that = this, vertical = that.options.animation.vertical, effects = vertical.effects, active = that._active, cell, position;\n if (effects && effects.indexOf('zoom') != -1) {\n to.insertBefore(from);\n from.css({\n position: 'absolute',\n width: to.width()\n });\n if (transitionOrigin) {\n cell = that._cellByDate(that._view.toDateString(that._current));\n position = cell.position();\n position = position.left + parseInt(cell.width() / 2, 10) + 'px' + ' ' + (position.top + parseInt(cell.height() / 2, 10) + 'px');\n to.css(transitionOrigin, position);\n }\n from.kendoStop(true, true).kendoAnimate({\n effects: 'fadeOut',\n duration: 600,\n complete: function () {\n from.off(ns).remove();\n that._oldTable = null;\n that._focusView(active);\n }\n });\n to.kendoStop(true, true).kendoAnimate(vertical);\n }\n },\n _cellByDate: function (value, selector) {\n return this._table.find(selector ? selector : 'td:not(.' + OTHERMONTH + ')').filter(function () {\n return $(this.firstChild).attr(kendo.attr(VALUE)) === value;\n });\n },\n _class: function (className, date) {\n var that = this, id = that._cellID, cell = that._cell, value = that._view.toDateString(date), disabledDate;\n if (cell) {\n cell.removeAttr(ARIA_SELECTED).removeAttr(ARIA_LABEL).removeAttr(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.removeAttr('aria-activedescendant').attr('aria-activedescendant', id);\n }\n },\n _bindTable: function (table) {\n table.on(FOCUS_WITH_NS, this._addClassProxy).on(BLUR, this._removeClassProxy);\n },\n _click: function (link) {\n var that = this, options = that.options, currentValue = new Date(+that._current), value = toDateObject(link);\n adjustDST(value, 0);\n if (that._view.name == 'month' && that.options.disableDates(value)) {\n value = that._value;\n }\n that._view.setDate(currentValue, value);\n that.navigateDown(restrictValue(currentValue, options.min, options.max));\n },\n _focus: function (value) {\n var that = this, view = that._view;\n if (view.compare(value, that._current) !== 0) {\n that.navigate(value);\n } else {\n that._current = value;\n that._class(FOCUSED, value);\n }\n },\n _focusView: function (active, table) {\n if (active) {\n this.focus(table);\n }\n },\n _viewWrapper: function () {\n var that = this;\n var element = that.element;\n var viewWrapper = element.children('.k-calendar-view');\n if (!viewWrapper[0]) {\n viewWrapper = $('
        ').insertAfter(element.find('.k-header'));\n }\n },\n _footer: function (template) {\n var that = this, today = getToday(), element = that.element, footer = element.find('.k-footer');\n if (!template) {\n that._toggle(false);\n footer.hide();\n return;\n }\n if (!footer[0]) {\n footer = $('
        ').appendTo(element);\n }\n that._today = footer.show().find('.k-link').html(template(today)).attr('title', kendo.toString(today, 'D', that.options.culture));\n that._toggle();\n },\n _header: function () {\n var that = this, element = that.element, links;\n if (!element.find('.k-header')[0]) {\n element.html('
        ' + '' + '' + '' + '
        ');\n }\n links = element.find('.k-link').on(MOUSEENTER_WITH_NS + ' ' + MOUSELEAVE + ' ' + FOCUS_WITH_NS + ' ' + BLUR, mousetoggle).click(false);\n that._title = links.eq(1).on(CLICK, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateUp();\n });\n that[PREVARROW] = links.eq(0).on(CLICK, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateToPast();\n });\n that[NEXTARROW] = links.eq(2).on(CLICK, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateToFuture();\n });\n },\n _navigate: function (arrow, modifier) {\n var that = this, index = that._index + 1, currentValue = new DATE(+that._current);\n if (that._isMultipleSelection()) {\n var firstDayCurrentMonth = that._table.find('td:not(.k-other-month):not(.k-out-of-range)').has('.k-link').first();\n currentValue = toDateObject(firstDayCurrentMonth.find('a'));\n that._current = new Date(+currentValue);\n }\n arrow = that[arrow];\n if (!arrow.hasClass(DISABLED)) {\n if (index > 3) {\n currentValue.setFullYear(currentValue.getFullYear() + 100 * modifier);\n } else {\n calendar.views[index].setDate(currentValue, modifier);\n }\n that.navigate(currentValue);\n }\n },\n _option: function (option, value) {\n var that = this, options = that.options, currentValue = that._value || that._current, isBigger;\n if (value === undefined) {\n return options[option];\n }\n value = parse(value, options.format, options.culture);\n if (!value) {\n return;\n }\n options[option] = new DATE(+value);\n if (option === MIN) {\n isBigger = value > currentValue;\n } else {\n isBigger = currentValue > value;\n }\n if (isBigger || isEqualMonth(currentValue, value)) {\n if (isBigger) {\n that._value = null;\n }\n that._changeView = true;\n }\n if (!that._changeView) {\n that._changeView = !!(options.month.content || options.month.empty);\n }\n that.navigate(that._value);\n that._toggle();\n },\n _toggle: function (toggle) {\n var that = this, options = that.options, isTodayDisabled = that.options.disableDates(getToday()), link = that._today;\n if (toggle === undefined) {\n toggle = isInRange(getToday(), options.min, options.max);\n }\n if (link) {\n link.off(CLICK);\n if (toggle && !isTodayDisabled) {\n link.addClass(TODAY).removeClass(DISABLED).on(CLICK, proxy(that._todayClick, that));\n } else {\n link.removeClass(TODAY).addClass(DISABLED).on(CLICK, prevent);\n }\n }\n },\n _todayClick: function (e) {\n var that = this, depth = views[that.options.depth], disabled = that.options.disableDates, today = getToday();\n e.preventDefault();\n if (disabled(today)) {\n return;\n }\n if (that._view.compare(that._current, today) === 0 && that._index == depth) {\n that._changeView = false;\n }\n if (that._isMultipleSelection()) {\n that._selectDates = [today];\n that.selectable._lastActive = null;\n }\n that._value = today;\n that.navigate(today, depth);\n that.trigger(CHANGE);\n },\n _templates: function () {\n var that = this, options = that.options, footer = options.footer, month = options.month, content = month.content, weekNumber = month.weekNumber, empty = month.empty, footerTemplate = '#= kendo.toString(data,\"D\",\"' + options.culture + '\") #';\n that.month = {\n content: template('' + (content || '#=data.value#') + '', { useWithBlock: !!content }),\n empty: template('' + (empty || ' ') + '', { useWithBlock: !!empty }),\n weekNumber: template('' + (weekNumber || '#= data.weekNumber #') + '', { useWithBlock: !!weekNumber })\n };\n if (footer && footer !== true) {\n footerTemplate = footer;\n }\n that.footer = footer !== false ? template(footerTemplate, { useWithBlock: false }) : null;\n }\n });\n ui.plugin(Calendar);\n var calendar = {\n firstDayOfMonth: function (date) {\n return createDate(date.getFullYear(), date.getMonth(), 1);\n },\n firstVisibleDay: function (date, calendarInfrao) {\n calendarInfrao = calendarInfrao || kendo.culture().calendar;\n var firstDay = calendarInfrao.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 getCalendarInfrao(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 = getCalendarInfrao(culture), firstDayIdx = currentCalendar.firstDay, days = currentCalendar.days, names = shiftArray(days.names, firstDayIdx), shortNames = shiftArray(days.namesShort, firstDayIdx), start = calendar.firstVisibleDay(date, currentCalendar), firstDayOfMonth = that.first(date), lastDayOfMonth = that.last(date), toDateString = that.toDateString, today = getToday(), html = '';\n if (showHeader) {\n html += '';\n } else {\n html += '';\n }\n if (isWeekColumnVisible) {\n html += '';\n }\n for (; idx < 7; idx++) {\n html += '';\n }\n adjustDST(today, 0);\n today = +today;\n return view({\n cells: 42,\n perRow: 7,\n html: html += '',\n start: start,\n isWeekColumnVisible: isWeekColumnVisible,\n weekNumber: options.weekNumber,\n min: createDate(min.getFullYear(), min.getMonth(), min.getDate()),\n max: createDate(max.getFullYear(), max.getMonth(), max.getDate()),\n otherMonth: otherMonth,\n content: options.content,\n lastDayOfMonth: lastDayOfMonth,\n empty: options.empty,\n setter: that.setDate,\n disableDates: options.disableDates,\n build: function (date, idx, disableDates) {\n var cssClass = [], day = date.getDay(), linkClass = '', url = '#';\n if (date < firstDayOfMonth || date > lastDayOfMonth) {\n cssClass.push(OTHERMONTH);\n }\n if (disableDates(date)) {\n cssClass.push(DISABLED);\n }\n if (+date === today) {\n cssClass.push('k-today');\n }\n if (day === 0 || day === 6) {\n cssClass.push('k-weekend');\n }\n if (hasUrl && inArray(+date, dates)) {\n url = navigateUrl.replace('{0}', kendo.toString(date, format, culture));\n linkClass = ' k-action-link';\n }\n return {\n date: date,\n dates: dates,\n ns: kendo.ns,\n title: kendo.toString(date, 'D', culture),\n value: date.getDate(),\n dateString: toDateString(date),\n cssClass: cssClass[0] ? ' class=\"' + cssClass.join(' ') + '\"' : '',\n linkClass: linkClass,\n url: url\n };\n },\n weekNumberBuild: function (date) {\n return {\n weekNumber: weekInYear(date, kendo.culture().calendar.firstDay),\n currentDate: date\n };\n }\n });\n },\n first: function (date) {\n return calendar.firstDayOfMonth(date);\n },\n last: function (date) {\n var last = createDate(date.getFullYear(), date.getMonth() + 1, 0), first = calendar.firstDayOfMonth(date), timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n if (timeOffset) {\n last.setHours(first.getHours() + timeOffset / 60);\n }\n return last;\n },\n compare: function (date1, date2) {\n var result, month1 = date1.getMonth(), year1 = date1.getFullYear(), month2 = date2.getMonth(), year2 = date2.getFullYear();\n if (year1 > year2) {\n result = 1;\n } else if (year1 < year2) {\n result = -1;\n } else {\n result = month1 == month2 ? 0 : month1 > month2 ? 1 : -1;\n }\n return result;\n },\n setDate: function (date, value) {\n var hours = date.getHours();\n if (value instanceof DATE) {\n date.setFullYear(value.getFullYear(), value.getMonth(), value.getDate());\n } else {\n calendar.setTime(date, value * MS_PER_DAY);\n }\n adjustDST(date, hours);\n },\n toDateString: function (date) {\n return date.getFullYear() + '/' + date.getMonth() + '/' + date.getDate();\n }\n },\n {\n name: 'year',\n title: function (date) {\n return date.getFullYear();\n },\n content: function (options) {\n var namesAbbr = getCalendarInfrao(options.culture).months.namesAbbr, toDateString = this.toDateString, min = options.min, max = options.max, html = '';\n if (options.showHeader) {\n html += '
        ' + this.title(date, min, max, culture) + '
        ' + options.messages.weekColumnHeader + '' + shortNames[idx] + '
        ';\n }\n return view({\n min: createDate(min.getFullYear(), min.getMonth(), 1),\n max: createDate(max.getFullYear(), max.getMonth(), 1),\n start: createDate(options.date.getFullYear(), 0, 1),\n html: html,\n setter: this.setDate,\n build: function (date) {\n return {\n value: namesAbbr[date.getMonth()],\n ns: kendo.ns,\n dateString: toDateString(date),\n cssClass: ''\n };\n }\n });\n },\n first: function (date) {\n return createDate(date.getFullYear(), 0, date.getDate());\n },\n last: function (date) {\n return createDate(date.getFullYear(), 11, date.getDate());\n },\n compare: function (date1, date2) {\n return compare(date1, date2);\n },\n setDate: function (date, value) {\n var month, hours = date.getHours();\n if (value instanceof DATE) {\n month = value.getMonth();\n date.setFullYear(value.getFullYear(), month, date.getDate());\n if (month !== date.getMonth()) {\n date.setDate(0);\n }\n } else {\n month = date.getMonth() + value;\n date.setMonth(month);\n if (month > 11) {\n month -= 12;\n }\n if (month > 0 && date.getMonth() != month) {\n date.setDate(0);\n }\n }\n adjustDST(date, hours);\n },\n toDateString: function (date) {\n return date.getFullYear() + '/' + date.getMonth() + '/1';\n }\n },\n {\n name: 'decade',\n title: function (date, min, max) {\n return title(date, min, max, 10);\n },\n content: function (options) {\n var year = options.date.getFullYear(), toDateString = this.toDateString, html = '';\n if (options.showHeader) {\n html += '
        ';\n html += this.title(options.date);\n html += '
        ';\n }\n return view({\n start: createDate(year - year % 10 - 1, 0, 1),\n min: createDate(options.min.getFullYear(), 0, 1),\n max: createDate(options.max.getFullYear(), 0, 1),\n otherMonth: options.otherMonth,\n html: html,\n setter: this.setDate,\n build: function (date, idx) {\n return {\n value: date.getFullYear(),\n ns: kendo.ns,\n dateString: toDateString(date),\n cssClass: idx === 0 || idx == 11 ? OTHERMONTHCLASS : ''\n };\n }\n });\n },\n first: function (date) {\n var year = date.getFullYear();\n return createDate(year - year % 10, date.getMonth(), date.getDate());\n },\n last: function (date) {\n var year = date.getFullYear();\n return createDate(year - year % 10 + 9, date.getMonth(), date.getDate());\n },\n compare: function (date1, date2) {\n return compare(date1, date2, 10);\n },\n setDate: function (date, value) {\n setDate(date, value, 1);\n },\n toDateString: function (date) {\n return date.getFullYear() + '/0/1';\n }\n },\n {\n name: CENTURY,\n title: function (date, min, max) {\n return title(date, min, max, 100);\n },\n content: function (options) {\n var year = options.date.getFullYear(), min = options.min.getFullYear(), max = options.max.getFullYear(), toDateString = this.toDateString, minYear = min, maxYear = max, html = '';\n minYear = minYear - minYear % 10;\n maxYear = maxYear - maxYear % 10;\n if (maxYear - minYear < 10) {\n maxYear = minYear + 9;\n }\n if (options.showHeader) {\n html += '
        ';\n html += this.title(options.date, options.min, options.max);\n html += '
        ';\n }\n return view({\n start: createDate(year - year % 100 - 10, 0, 1),\n min: createDate(minYear, 0, 1),\n max: createDate(maxYear, 0, 1),\n otherMonth: options.otherMonth,\n html: html,\n setter: this.setDate,\n build: function (date, idx) {\n var start = date.getFullYear(), end = start + 9;\n if (start < min) {\n start = min;\n }\n if (end > max) {\n end = max;\n }\n return {\n ns: kendo.ns,\n value: start + ' - ' + end,\n dateString: toDateString(date),\n cssClass: idx === 0 || idx == 11 ? OTHERMONTHCLASS : ''\n };\n }\n });\n },\n first: function (date) {\n var year = date.getFullYear();\n return createDate(year - year % 100, date.getMonth(), date.getDate());\n },\n last: function (date) {\n var year = date.getFullYear();\n return createDate(year - year % 100 + 99, date.getMonth(), date.getDate());\n },\n compare: function (date1, date2) {\n return compare(date1, date2, 100);\n },\n setDate: function (date, value) {\n setDate(date, value, 10);\n },\n toDateString: function (date) {\n var year = date.getFullYear();\n return year - year % 10 + '/0/1';\n }\n }\n ]\n };\n function title(date, min, max, modular) {\n var start = date.getFullYear(), minYear = min.getFullYear(), maxYear = max.getFullYear(), end;\n start = start - start % modular;\n end = start + (modular - 1);\n if (start < minYear) {\n start = minYear;\n }\n if (end > maxYear) {\n end = maxYear;\n }\n return start + '-' + end;\n }\n function view(options) {\n var idx = 0, data, min = options.min, max = options.max, start = options.start, setter = options.setter, build = options.build, weekNumberBuild = options.weekNumberBuild, length = options.cells || 12, isWeekColumnVisible = options.isWeekColumnVisible, cellsPerRow = options.perRow || 4, otherMonth = options.otherMonth, lastDayOfMonth = options.lastDayOfMonth, weekNumber = options.weekNumber || weekNumberTemplate, content = options.content || cellTemplate, empty = options.empty || emptyCellTemplate, otherMonthTemplate = options.otherMonthCellTemplate || otherMonthCellTemplate, html = options.html || '
        ';\n html += this.title(options.date, options.min, options.max);\n html += '
        ';\n if (isWeekColumnVisible) {\n html += weekNumber(weekNumberBuild(start));\n }\n for (; idx < length; idx++) {\n if (idx > 0 && idx % cellsPerRow === 0) {\n html += '';\n if (isWeekColumnVisible) {\n html += otherMonth || +start <= +lastDayOfMonth ? weekNumber(weekNumberBuild(start)) : weekNumber({ weekNumber: ' ' });\n }\n }\n start = createDate(start.getFullYear(), start.getMonth(), start.getDate());\n adjustDST(start, 0);\n data = build(start, idx, options.disableDates);\n html += data.cssClass.indexOf(OTHERMONTH) !== -1 && !otherMonth ? otherMonthTemplate(data) : isInRange(start, min, max) ? content(data) : empty(data);\n setter(start, 1);\n }\n return html + '
        ';\n }\n function compare(date1, date2, modifier) {\n var year1 = date1.getFullYear(), start = date2.getFullYear(), end = start, result = 0;\n if (modifier) {\n start = start - start % modifier;\n end = start - start % modifier + modifier - 1;\n }\n if (year1 > end) {\n result = 1;\n } else if (year1 < start) {\n result = -1;\n }\n return result;\n }\n function getToday() {\n var today = new DATE();\n return new DATE(today.getFullYear(), today.getMonth(), today.getDate());\n }\n function restrictValue(value, min, max) {\n var today = getToday();\n if (value) {\n today = new DATE(+value);\n }\n if (min > today) {\n today = new DATE(+min);\n } else if (max < today) {\n today = new DATE(+max);\n }\n return today;\n }\n function isInRange(date, min, max) {\n return +date >= +min && +date <= +max;\n }\n function shiftArray(array, idx) {\n return array.slice(idx).concat(array.slice(0, idx));\n }\n function setDate(date, value, multiplier) {\n value = value instanceof DATE ? value.getFullYear() : date.getFullYear() + multiplier * value;\n date.setFullYear(value);\n }\n function daysBetweenTwoDates(startDate, endDate) {\n if (+endDate < +startDate) {\n var temp = +startDate;\n calendar.views[0].setDate(startDate, endDate);\n calendar.views[0].setDate(endDate, new Date(temp));\n }\n var fromDateUTC = Date.UTC(startDate.getFullYear(), startDate.getMonth(), startDate.getDate());\n var endDateUTC = Date.UTC(endDate.getFullYear(), endDate.getMonth(), endDate.getDate());\n return Math.ceil((+endDateUTC - +fromDateUTC) / kendo.date.MS_PER_DAY);\n }\n function addDaysToArray(array, numberOfDays, fromDate, disableDates) {\n for (var i = 0; i <= numberOfDays; i++) {\n var nextDay = new Date(fromDate.getTime());\n nextDay = new Date(nextDay.setDate(nextDay.getDate() + i));\n if (!disableDates(nextDay)) {\n array.push(nextDay);\n }\n }\n }\n function mousetoggle(e) {\n var disabled = $(this).hasClass('k-state-disabled');\n if (!disabled) {\n $(this).toggleClass(HOVER, MOUSEENTER.indexOf(e.type) > -1 || e.type == FOCUS);\n }\n }\n function prevent(e) {\n e.preventDefault();\n }\n function createDate(year, month, date) {\n var dateObject = new DATE(year, month, date);\n dateObject.setFullYear(year, month, date);\n return dateObject;\n }\n function getCalendarInfrao(culture) {\n return getCulture(culture).calendars.standard;\n }\n function normalize(options) {\n var start = views[options.start], depth = views[options.depth], culture = getCulture(options.culture);\n options.format = extractFormat(options.format || culture.calendars.standard.patterns.d);\n if (isNaN(start)) {\n start = 0;\n options.start = MONTH;\n }\n if (depth === undefined || depth > start) {\n options.depth = MONTH;\n }\n if (options.dates === null) {\n options.dates = [];\n }\n }\n function makeUnselectable(element) {\n if (isIE8) {\n element.find('*').attr('unselectable', 'on');\n }\n }\n function addClassToViewContainer(element, currentView) {\n element.addClass('k-' + currentView);\n }\n function inArray(date, dates) {\n for (var i = 0, length = dates.length; i < length; i++) {\n if (date === +dates[i]) {\n return true;\n }\n }\n return false;\n }\n function isEqualDatePart(value1, value2) {\n if (value1) {\n return value1.getFullYear() === value2.getFullYear() && value1.getMonth() === value2.getMonth() && value1.getDate() === value2.getDate();\n }\n return false;\n }\n function isEqualMonth(value1, value2) {\n if (value1) {\n return value1.getFullYear() === value2.getFullYear() && value1.getMonth() === value2.getMonth();\n }\n return false;\n }\n function getDisabledExpr(option) {\n if (kendo.isFunction(option)) {\n return option;\n }\n if ($.isArray(option)) {\n return createDisabledExpr(option);\n }\n return $.noop;\n }\n function convertDatesArray(dates) {\n var result = [];\n for (var i = 0; i < dates.length; i++) {\n result.push(dates[i].setHours(0, 0, 0, 0));\n }\n return result;\n }\n function createDisabledExpr(dates) {\n var body, callback, disabledDates = [], days = [\n 'su',\n 'mo',\n 'tu',\n 'we',\n 'th',\n 'fr',\n 'sa'\n ], searchExpression = 'if (found) {' + ' return true ' + '} else {' + 'return false' + '}';\n if (dates[0] instanceof DATE) {\n disabledDates = convertDatesArray(dates);\n body = 'var found = date && window.kendo.jQuery.inArray(date.setHours(0, 0, 0, 0),[' + disabledDates + ']) > -1;' + searchExpression;\n } else {\n for (var i = 0; i < dates.length; i++) {\n var day = dates[i].slice(0, 2).toLowerCase();\n var index = $.inArray(day, days);\n if (index > -1) {\n disabledDates.push(index);\n }\n }\n body = 'var found = date && window.kendo.jQuery.inArray(date.getDay(),[' + disabledDates + ']) > -1;' + searchExpression;\n }\n callback = new Function('date', body);\n return callback;\n }\n function isEqualDate(oldValue, newValue) {\n if (oldValue instanceof Date && newValue instanceof Date) {\n oldValue = oldValue.getTime();\n newValue = newValue.getTime();\n }\n return oldValue === newValue;\n }\n function toDateObject(link) {\n var value = $(link).attr(kendo.attr(VALUE)).split('/');\n value = createDate(value[0], value[1], value[2]);\n return value;\n }\n calendar.isEqualDatePart = isEqualDatePart;\n calendar.isEqualDate = isEqualDate;\n calendar.makeUnselectable = makeUnselectable;\n calendar.restrictValue = restrictValue;\n calendar.isInRange = isInRange;\n calendar.addClassToViewContainer = addClassToViewContainer;\n calendar.normalize = normalize;\n calendar.viewsEnum = views;\n calendar.disabled = getDisabledExpr;\n calendar.toDateObject = toDateObject;\n calendar.getToday = getToday;\n calendar.createDate = createDate;\n kendo.calendar = calendar;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dateinput', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'dateinput',\n name: 'DateInput',\n category: 'web',\n description: 'The DateInput widget allows to edit date by typing.',\n depends: ['core']\n };\n (function ($, undefined) {\n var global = window;\n var kendo = global.kendo;\n var caret = kendo.caret;\n var ui = kendo.ui;\n var Widget = ui.Widget;\n var keys = kendo.keys;\n var ns = '.kendoDateInput';\n var proxy = $.proxy;\n var objectToString = {}.toString;\n var INPUT_EVENT_NAME = (kendo.support.propertyChangeEvent ? 'propertychange.kendoDateInput input' : 'input') + ns;\n var STATEDISABLED = 'k-state-disabled';\n var STATEDEFAULT = 'k-state-default';\n var STATEINVALID = 'k-state-invalid';\n var DISABLED = 'disabled';\n var READONLY = 'readonly';\n var CHANGE = 'change';\n var knownSymbols = 'dMyHhmftsz';\n var DateInput = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n options.format = kendo._extractFormat(options.format || kendo.getCulture(options.culture).calendars.standard.patterns.d);\n options.min = kendo.parseDate(element.attr('min')) || kendo.parseDate(options.min);\n options.max = kendo.parseDate(element.attr('max')) || kendo.parseDate(options.max);\n var insidePicker = (element.parent().attr('class') || '').indexOf('k-picker-wrap') >= 0;\n if (insidePicker) {\n that.wrapper = element.parent();\n } else {\n that.wrapper = element.wrap('').parent();\n that.wrapper.addClass(element[0].className);\n that.wrapper[0].style.cssText = element[0].style.cssText;\n element.css({\n width: '100%',\n height: element[0].style.height\n });\n }\n that._inputWrapper = $(that.wrapper[0]);\n $('').insertAfter(element);\n that._form();\n that.element.addClass(insidePicker ? ' ' : 'k-textbox').attr('autocomplete', 'off').on('focusout' + ns, function () {\n that._change();\n });\n try {\n element[0].setAttribute('type', 'text');\n } catch (e) {\n element[0].type = 'text';\n }\n var disabled = element.is('[disabled]') || $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n } else {\n that.readonly(element.is('[readonly]'));\n }\n that.value(that.options.value || element.val());\n kendo.notify(that);\n },\n options: {\n name: 'DateInput',\n culture: '',\n value: '',\n format: '',\n min: new Date(1900, 0, 1),\n max: new Date(2099, 11, 31),\n messages: {\n 'year': 'year',\n 'month': 'month',\n 'day': 'day',\n 'weekday': 'day of the week',\n 'hour': 'hours',\n 'minute': 'minutes',\n 'second': 'seconds',\n 'dayperiod': 'AM/PM'\n }\n },\n events: [CHANGE],\n min: function (value) {\n if (value !== undefined) {\n this.options.min = value;\n } else {\n return this.options.min;\n }\n },\n max: function (value) {\n if (value !== undefined) {\n this.options.max = value;\n } else {\n return this.options.max;\n }\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n this._unbindInput();\n this._bindInput();\n this._updateElementValue();\n },\n destroy: function () {\n var that = this;\n that.element.off(ns);\n if (that._formElement) {\n that._formElement.off('reset', that._resetHandler);\n }\n Widget.fn.destroy.call(that);\n },\n value: function (value) {\n if (value === undefined) {\n return this._dateTime.getDateObject();\n }\n if (value === null) {\n value = '';\n }\n if (objectToString.call(value) !== '[object Date]') {\n value = kendo.parseDate(value, this.options.format, this.options.culture);\n }\n if (value && !value.getTime()) {\n value = null;\n }\n this._dateTime = new customDateTime(value, this.options.format, this.options.culture, this.options.messages);\n this._updateElementValue();\n this._oldValue = value;\n },\n _updateElementValue: function () {\n var stringAndFromat = this._dateTime.toPair(this.options.format, this.options.culture, this.options.messages);\n this.element.val(stringAndFromat[0]);\n this._oldText = stringAndFromat[0];\n this._format = stringAndFromat[1];\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n _bindInput: function () {\n var that = this;\n that.element.on('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(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 element.removeAttr(DISABLED).removeAttr(READONLY);\n that._bindInput();\n } else {\n if (disable) {\n wrapper.addClass(STATEDISABLED).removeClass(STATEDEFAULT);\n element.attr(DISABLED, disable);\n element.removeAttr(READONLY);\n }\n if (readonly) {\n element.attr(READONLY, readonly);\n }\n }\n },\n _change: function () {\n var that = this;\n var oldValue = that._oldValue;\n var value = that.value();\n if (value && that.min() && value < that.min()) {\n that.value(that.min());\n value = that.value();\n }\n if (value && that.max() && value > that.max()) {\n that.value(that.max());\n value = that.value();\n }\n if (oldValue && value && value.getTime() !== oldValue.getTime() || oldValue && !value || !oldValue && value) {\n that._oldValue = value;\n that.trigger(CHANGE);\n that.element.trigger(CHANGE);\n }\n },\n _input: function () {\n var that = this;\n var element = that.element[0];\n var blinkInvalid = false;\n if (kendo._activeElement() !== element) {\n return;\n }\n var diff = approximateStringMatching(this._oldText, this._format, this.element[0].value, caret(this.element[0])[0]);\n var navigationOnly = diff.length === 1 && diff[0][1] === ' ';\n if (!navigationOnly) {\n for (var i = 0; i < diff.length; i++) {\n var valid = this._dateTime.parsePart(diff[i][0], diff[i][1]);\n blinkInvalid = blinkInvalid || !valid;\n }\n }\n this._updateElementValue();\n if (diff.length && diff[0][0] !== ' ') {\n this._selectSegment(diff[0][0]);\n if (!navigationOnly) {\n var difSym = diff[0][0];\n setTimeout(function () {\n that._selectSegment(difSym);\n });\n }\n }\n if (navigationOnly) {\n var newEvent = {\n keyCode: 39,\n preventDefault: function () {\n }\n };\n this._keydown(newEvent);\n }\n if (blinkInvalid) {\n clearTimeout(that._blinkInvalidTimeout);\n var stateInvalid = STATEINVALID;\n that.wrapper.addClass(STATEINVALID);\n that._blinkInvalidTimeout = setTimeout(function () {\n that.wrapper.removeClass(stateInvalid);\n }, 100);\n }\n },\n _mouseUp: function () {\n var selection = caret(this.element[0]);\n if (selection[0] === selection[1]) {\n this._selectNearestSegment();\n }\n },\n _scroll: function (e) {\n if (kendo._activeElement() !== this.element[0] || this.element.is('[readonly]')) {\n return;\n }\n e = window.event || e;\n var newEvent = {\n keyCode: 37,\n preventDefault: function () {\n }\n };\n if (e.shiftKey) {\n newEvent.keyCode = (e.wheelDelta || -e.detail) > 0 ? 37 : 39;\n } else {\n newEvent.keyCode = (e.wheelDelta || -e.detail) > 0 ? 38 : 40;\n }\n this._keydown(newEvent);\n e.returnValue = false;\n if (e.preventDefault) {\n e.preventDefault();\n }\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n },\n _form: function () {\n var that = this;\n var element = that.element;\n var formId = element.attr('form');\n var form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(element[0].value);\n });\n };\n that._formElement = form.on('reset', that._resetHandler);\n }\n },\n _paste: function (e) {\n e.preventDefault();\n },\n _keydown: function (e) {\n var key = e.keyCode;\n var selection;\n if (key == 37 || key == 39) {\n e.preventDefault();\n selection = caret(this.element[0]);\n if (selection[0] != selection[1]) {\n this._selectNearestSegment();\n }\n var dir = key == 37 ? -1 : 1;\n var index = dir == -1 ? caret(this.element[0])[0] - 1 : caret(this.element[0])[1] + 1;\n while (index >= 0 && index < this._format.length) {\n if (knownSymbols.indexOf(this._format[index]) >= 0) {\n this._selectSegment(this._format[index]);\n break;\n }\n index += dir;\n }\n }\n if (key == 38 || key == 40) {\n e.preventDefault();\n selection = caret(this.element[0]);\n var symbol = this._format[selection[0]];\n if (knownSymbols.indexOf(symbol) >= 0) {\n this._dateTime.modifyPart(symbol, key == 38 ? 1 : -1);\n this._updateElementValue();\n this._selectSegment(symbol);\n this.element.trigger(CHANGE);\n }\n }\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n var keycode = e.keyCode ? e.keyCode : e.which;\n if (keycode === 8 || keycode === 46) {\n var that = this;\n setTimeout(function () {\n that._input();\n }, 0);\n }\n }\n if (key === keys.ENTER) {\n this._change();\n }\n },\n _selectNearestSegment: function () {\n var selection = caret(this.element[0]);\n var start = selection[0];\n for (var i = start, j = start - 1; i < this._format.length || j >= 0; i++, j--) {\n if (i < this._format.length && knownSymbols.indexOf(this._format[i]) !== -1) {\n this._selectSegment(this._format[i]);\n return;\n }\n if (j >= 0 && knownSymbols.indexOf(this._format[j]) !== -1) {\n this._selectSegment(this._format[j]);\n return;\n }\n }\n },\n _selectSegment: function (symbol) {\n var begin = -1, end = 0;\n for (var i = 0; i < this._format.length; i++) {\n if (this._format[i] === symbol) {\n end = i + 1;\n if (begin === -1) {\n begin = i;\n }\n }\n }\n if (begin < 0) {\n begin = 0;\n }\n caret(this.element, begin, end);\n }\n });\n ui.plugin(DateInput);\n var customDateTime = function (initDate, initFormat, initCulture, initMessages) {\n var value = null;\n var year = true, month = true, date = true, hours = true, minutes = true, seconds = true, milliseconds = true;\n var typedMonthPart = '';\n var typedDayPeriodPart = '';\n var placeholders = {};\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000'\n ];\n function pad(number, digits, end) {\n number = number + '';\n digits = digits || 2;\n end = digits - number.length;\n if (end) {\n return zeros[digits].substring(0, end) + number;\n }\n return number;\n }\n var dateFormatRegExp = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|HH|H|hh|h|mm|m|fff|ff|f|tt|ss|s|zzz|zz|z|\"[^\"]*\"|'[^']*'/g;\n var months = null, calendar = null, days = null, returnsFormat = false;\n var matcher = function (match) {\n var mins, sign;\n var result;\n switch (match) {\n case 'd':\n result = date ? value.getDate() : placeholders.day;\n break;\n case 'dd':\n result = date ? pad(value.getDate()) : placeholders.day;\n break;\n case 'ddd':\n result = date && month && year ? days.namesAbbr[value.getDay()] : placeholders.weekday;\n break;\n case 'dddd':\n result = date && month && year ? days.names[value.getDay()] : placeholders.weekday;\n break;\n case 'M':\n result = month ? value.getMonth() + 1 : placeholders.month;\n break;\n case 'MM':\n result = month ? pad(value.getMonth() + 1) : placeholders.month;\n break;\n case 'MMM':\n result = month ? months.namesAbbr[value.getMonth()] : placeholders.month;\n break;\n case 'MMMM':\n result = month ? months.names[value.getMonth()] : placeholders.month;\n break;\n case 'yy':\n result = year ? pad(value.getFullYear() % 100) : placeholders.year;\n break;\n case 'yyyy':\n result = year ? pad(value.getFullYear(), 4) : placeholders.year;\n break;\n case 'h':\n result = hours ? value.getHours() % 12 || 12 : placeholders.hour;\n break;\n case 'hh':\n result = hours ? pad(value.getHours() % 12 || 12) : placeholders.hour;\n break;\n case 'H':\n result = hours ? value.getHours() : placeholders.hour;\n break;\n case 'HH':\n result = hours ? pad(value.getHours()) : placeholders.hour;\n break;\n case 'm':\n result = minutes ? value.getMinutes() : placeholders.minute;\n break;\n case 'mm':\n result = minutes ? pad(value.getMinutes()) : placeholders.minute;\n break;\n case 's':\n result = seconds ? value.getSeconds() : placeholders.second;\n break;\n case 'ss':\n result = seconds ? pad(value.getSeconds()) : placeholders.second;\n break;\n case 'f':\n result = milliseconds ? Math.floor(value.getMilliseconds() / 100) : milliseconds;\n break;\n case 'ff':\n result = value.getMilliseconds();\n if (result > 99) {\n result = Math.floor(result / 10);\n }\n result = milliseconds ? pad(result) : match;\n break;\n case 'fff':\n result = milliseconds ? pad(value.getMilliseconds(), 3) : match;\n break;\n case 'tt':\n result = hours ? value.getHours() < 12 ? calendar.AM[0] : calendar.PM[0] : placeholders.dayperiod;\n break;\n case 'zzz':\n mins = value.getTimezoneOffset();\n sign = mins < 0;\n result = Math.abs(mins / 60).toString().split('.')[0];\n mins = Math.abs(mins) - result * 60;\n result = (sign ? '+' : '-') + pad(result);\n result += ':' + pad(mins);\n break;\n case 'z':\n case 'zz':\n result = value.getTimezoneOffset() / 60;\n sign = result < 0;\n result = Math.abs(result).toString().split('.')[0];\n result = (sign ? '+' : '-') + (match === 'zz' ? pad(result) : result);\n break;\n }\n result = result !== undefined ? result : match.slice(1, match.length - 1);\n if (returnsFormat) {\n result = '' + result;\n var formatResult = '';\n if (match == 'ddd') {\n match = 'EEE';\n }\n if (match == 'dddd') {\n match = 'EEEE';\n }\n for (var i = 0; i < result.length; i++) {\n formatResult += match[0];\n }\n return formatResult;\n } else {\n return result;\n }\n };\n function generateMatcher(retFormat) {\n returnsFormat = retFormat;\n return matcher;\n }\n function setExisting(symbol, val) {\n switch (symbol) {\n case 'y':\n year = val;\n break;\n case 'M':\n month = val;\n if (!val) {\n value.setMonth(0);\n typedMonthPart = '';\n }\n break;\n case 'd':\n date = val;\n break;\n case 'H':\n case 'h':\n hours = val;\n if (!val) {\n typedDayPeriodPart = '';\n }\n break;\n case 'm':\n minutes = val;\n break;\n case 's':\n seconds = val;\n break;\n default:\n return;\n }\n }\n this.setValue = function (val) {\n date = val;\n };\n this.getValue = function () {\n return date;\n };\n this.modifyPart = function (symbol, offset) {\n var newValue = new Date(value && value.getTime ? value.getTime() : value);\n switch (symbol) {\n case 'y':\n newValue.setFullYear(newValue.getFullYear() + offset);\n break;\n case 'M':\n var newMonth = newValue.getMonth() + offset;\n newValue.setMonth(newMonth);\n if (newValue.getMonth() % 12 !== (newMonth + 12) % 12) {\n newValue.setDate(1);\n newValue.setMonth(newMonth);\n }\n break;\n case 'd':\n case 'E':\n newValue.setDate(newValue.getDate() + offset);\n break;\n case 'H':\n case 'h':\n newValue.setHours(newValue.getHours() + offset);\n break;\n case 'm':\n newValue.setMinutes(newValue.getMinutes() + offset);\n break;\n case 's':\n newValue.setSeconds(newValue.getSeconds() + offset);\n break;\n case 't':\n newValue.setHours((newValue.getHours() + 12) % 24);\n break;\n default:\n break;\n }\n if (newValue.getFullYear() > 0) {\n setExisting(symbol, true);\n value = newValue;\n }\n };\n this.parsePart = function (symbol, currentChar) {\n if (!currentChar) {\n setExisting(symbol, false);\n return true;\n }\n var newValue = new Date(value && value.getTime ? value.getTime() : value);\n var newHours;\n switch (symbol) {\n case 'd':\n var newDate = (date ? newValue.getDate() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newDate)) {\n return;\n }\n while (newDate > 31) {\n newDate = parseInt(newDate.toString().slice(1), 10);\n }\n if (newDate < 1) {\n date = false;\n } else {\n newValue.setDate(newDate);\n if (newValue.getMonth() !== value.getMonth()) {\n return;\n }\n date = true;\n }\n break;\n case 'M':\n var newMonth = (month ? (newValue.getMonth() + 1) * 10 : 0) + parseInt(currentChar, 10);\n if (!isNaN(newMonth)) {\n while (newMonth > 12) {\n newMonth = parseInt(newMonth.toString().slice(1), 10);\n }\n if (newMonth < 1) {\n month = false;\n } else {\n newValue.setMonth(newMonth - 1);\n if (newValue.getMonth() !== newMonth - 1) {\n newValue.setDate(1);\n newValue.setMonth(newMonth - 1);\n }\n month = true;\n }\n } else {\n var monthNames = calendar.months.names;\n typedMonthPart += currentChar.toLowerCase();\n while (typedMonthPart.length > 0) {\n for (var i = 0; i < monthNames.length; i++) {\n if (monthNames[i].toLowerCase().indexOf(typedMonthPart) === 0) {\n newValue.setMonth(i);\n month = true;\n value = newValue;\n return true;\n }\n }\n typedMonthPart = typedMonthPart.substring(1, typedMonthPart.length);\n }\n return false;\n }\n break;\n case 'y':\n var newYear = (year ? newValue.getFullYear() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newYear)) {\n return;\n }\n while (newYear > 9999) {\n newYear = parseInt(newYear.toString().slice(1), 10);\n }\n if (newYear < 1) {\n year = false;\n } else {\n newValue.setFullYear(newYear);\n year = true;\n }\n break;\n case 'h':\n newHours = (hours ? (newValue.getHours() % 12 || 12) * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newHours)) {\n return;\n }\n while (newHours > 12) {\n newHours = parseInt(newHours.toString().slice(1), 10);\n }\n newValue.setHours(Math.floor(newValue.getHours() / 12) * 12 + newHours % 12);\n hours = true;\n break;\n case 'H':\n newHours = (hours ? newValue.getHours() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newHours)) {\n return;\n }\n while (newHours > 23) {\n newHours = parseInt(newHours.toString().slice(1), 10);\n }\n newValue.setHours(newHours);\n hours = true;\n break;\n case 'm':\n var newMinutes = (minutes ? newValue.getMinutes() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newMinutes)) {\n return;\n }\n while (newMinutes > 59) {\n newMinutes = parseInt(newMinutes.toString().slice(1), 10);\n }\n newValue.setMinutes(newMinutes);\n minutes = true;\n break;\n case 's':\n var newSeconds = (seconds ? newValue.getSeconds() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newSeconds)) {\n return;\n }\n while (newSeconds > 59) {\n newSeconds = parseInt(newSeconds.toString().slice(1), 10);\n }\n newValue.setSeconds(newSeconds);\n seconds = true;\n break;\n case 't':\n if (hours) {\n typedDayPeriodPart += currentChar.toLowerCase();\n while (typedDayPeriodPart.length > 0) {\n if (calendar.AM[0].toLowerCase().indexOf(typedDayPeriodPart) === 0 && newValue.getHours() >= 12 || calendar.PM[0].toLowerCase().indexOf(typedDayPeriodPart) === 0 && newValue.getHours() < 12) {\n newValue.setHours((newValue.getHours() + 12) % 24);\n value = newValue;\n return true;\n }\n typedDayPeriodPart = typedDayPeriodPart.substring(1, typedDayPeriodPart.length);\n }\n return false;\n }\n break;\n default:\n break;\n }\n value = newValue;\n return true;\n };\n this.toPair = function (format, culture, messages) {\n if (!format) {\n return [\n '',\n ''\n ];\n }\n culture = kendo.getCulture(culture);\n calendar = culture.calendars.standard;\n format = calendar.patterns[format] || format;\n days = calendar.days;\n months = calendar.months;\n placeholders = messages;\n return [\n format.replace(dateFormatRegExp, generateMatcher(false)),\n format.replace(dateFormatRegExp, generateMatcher(true))\n ];\n };\n this.getDateObject = function () {\n return year && month && date && hours && minutes && seconds && milliseconds ? new Date(value.getTime()) : null;\n };\n if (!initDate) {\n value = new Date();\n var sampleFormat = this.toPair(initFormat, initCulture, initMessages)[1];\n for (var i = 0; i < sampleFormat.length; i++) {\n setExisting(sampleFormat[i], false);\n }\n } else {\n value = new Date(initDate.getTime());\n }\n };\n function approximateStringMatching(oldText, oldFormat, newText, caret) {\n var oldTextSeparator = oldText[caret + oldText.length - newText.length];\n oldText = oldText.substring(0, caret + oldText.length - newText.length);\n newText = newText.substring(0, caret);\n var diff = [];\n var i;\n if (oldText === newText && caret > 0) {\n diff.push([\n oldFormat[caret - 1],\n newText[caret - 1]\n ]);\n return diff;\n }\n if (oldText.indexOf(newText) === 0 && (newText.length === 0 || oldFormat[newText.length - 1] !== oldFormat[newText.length])) {\n var deletedSymbol = '';\n for (i = newText.length; i < oldText.length; i++) {\n if (oldFormat[i] !== deletedSymbol && knownSymbols.indexOf(oldFormat[i]) >= 0) {\n deletedSymbol = oldFormat[i];\n diff.push([\n deletedSymbol,\n ''\n ]);\n }\n }\n return diff;\n }\n if (newText[newText.length - 1] === ' ' || newText[newText.length - 1] === oldTextSeparator) {\n return [[\n oldFormat[caret - 1],\n ' '\n ]];\n }\n if (newText.indexOf(oldText) === 0 || knownSymbols.indexOf(oldFormat[caret - 1]) === -1) {\n var symbol = oldFormat[0];\n for (i = Math.max(0, oldText.length - 1); i < oldFormat.length; i++) {\n if (knownSymbols.indexOf(oldFormat[i]) >= 0) {\n symbol = oldFormat[i];\n break;\n }\n }\n return [[\n symbol,\n newText[caret - 1]\n ]];\n }\n return [[\n oldFormat[caret - 1],\n newText[caret - 1]\n ]];\n }\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.datepicker', [\n 'kendo.calendar',\n 'kendo.popup',\n 'kendo.dateinput'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'datepicker',\n name: 'DatePicker',\n category: 'web',\n description: 'The DatePicker widget allows the user to select a date from a calendar or by direct input.',\n depends: [\n 'calendar',\n 'popup'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, parse = kendo.parseDate, keys = kendo.keys, support = kendo.support, template = kendo.template, activeElement = kendo._activeElement, DIV = '
        ', SPAN = '', ns = '.kendoDatePicker', CLICK = 'click' + ns, UP = support.mouseAndTouchPresent ? kendo.applyEventMap('up', ns.slice(1)) : CLICK, OPEN = 'open', CLOSE = 'close', CHANGE = 'change', DISABLED = 'disabled', READONLY = 'readonly', DEFAULT = 'k-state-default', FOCUSED = 'k-state-focused', SELECTED = 'k-state-selected', STATEDISABLED = 'k-state-disabled', HOVER = 'k-state-hover', HOVEREVENTS = 'mouseenter' + ns + ' mouseleave' + ns, MOUSEDOWN = 'mousedown' + ns, ID = 'id', MIN = 'min', MAX = 'max', MONTH = 'month', ARIA_DISABLED = 'aria-disabled', ARIA_EXPANDED = 'aria-expanded', ARIA_HIDDEN = 'aria-hidden', calendar = kendo.calendar, isInRange = calendar.isInRange, restrictValue = calendar.restrictValue, isEqualDatePart = calendar.isEqualDatePart, extend = $.extend, proxy = $.proxy, DATE = Date;\n function normalize(options) {\n var parseFormats = options.parseFormats, format = options.format;\n calendar.normalize(options);\n parseFormats = $.isArray(parseFormats) ? parseFormats : [parseFormats];\n if (!parseFormats.length) {\n parseFormats.push('yyyy-MM-dd');\n }\n if ($.inArray(format, parseFormats) === -1) {\n parseFormats.splice(0, 0, options.format);\n }\n options.parseFormats = parseFormats;\n }\n function preventDefault(e) {\n e.preventDefault();\n }\n var DateView = function (options) {\n var that = this, id, body = document.body, div = $(DIV).attr(ARIA_HIDDEN, 'true').addClass('k-calendar-container').appendTo(body);\n that.options = options = options || {};\n id = options.id;\n if (id) {\n id += '_dateview';\n div.attr(ID, id);\n that._dateViewID = id;\n }\n that.popup = new ui.Popup(div, extend(options.popup, options, {\n name: 'Popup',\n isRtl: kendo.support.isRtl(options.anchor)\n }));\n that.div = div;\n that.value(options.value);\n };\n DateView.prototype = {\n _calendar: function () {\n var that = this;\n var calendar = that.calendar;\n var options = that.options;\n var div;\n if (!calendar) {\n div = $(DIV).attr(ID, kendo.guid()).appendTo(that.popup.element).on(MOUSEDOWN, preventDefault).on(CLICK, 'td:has(.k-link)', proxy(that._click, that));\n that.calendar = calendar = new ui.Calendar(div);\n that._setOptions(options);\n kendo.calendar.makeUnselectable(calendar.element);\n calendar.navigate(that._value || that._current, options.start);\n that.value(that._value);\n }\n },\n _setOptions: function (options) {\n this.calendar.setOptions({\n focusOnNav: false,\n change: options.change,\n culture: options.culture,\n dates: options.dates,\n depth: options.depth,\n footer: options.footer,\n format: options.format,\n max: options.max,\n min: options.min,\n month: options.month,\n weekNumber: options.weekNumber,\n start: options.start,\n disableDates: options.disableDates\n });\n },\n setOptions: function (options) {\n var old = this.options;\n var disableDates = options.disableDates;\n if (disableDates) {\n options.disableDates = calendar.disabled(disableDates);\n }\n this.options = extend(old, options, {\n change: old.change,\n close: old.close,\n open: old.open\n });\n if (this.calendar) {\n this._setOptions(this.options);\n }\n },\n destroy: function () {\n this.popup.destroy();\n },\n open: function () {\n var that = this;\n var popupHovered;\n that._calendar();\n popupHovered = that.popup._hovered;\n that.popup._hovered = true;\n that.popup.open();\n setTimeout(function () {\n that.popup._hovered = popupHovered;\n }, 1);\n },\n close: function () {\n this.popup.close();\n },\n min: function (value) {\n this._option(MIN, value);\n },\n max: function (value) {\n this._option(MAX, value);\n },\n toggle: function () {\n var that = this;\n that[that.popup.visible() ? CLOSE : OPEN]();\n },\n move: function (e) {\n var that = this, key = e.keyCode, calendar = that.calendar, selectIsClicked = e.ctrlKey && key == keys.DOWN || key == keys.ENTER, handled = false;\n if (e.altKey) {\n if (key == keys.DOWN) {\n that.open();\n e.preventDefault();\n handled = true;\n } else if (key == keys.UP) {\n that.close();\n e.preventDefault();\n handled = true;\n }\n } else if (that.popup.visible()) {\n if (key == keys.ESC || selectIsClicked && calendar._cell.hasClass(SELECTED)) {\n that.close();\n e.preventDefault();\n return true;\n }\n if (key != keys.SPACEBAR) {\n that._current = calendar._move(e);\n }\n handled = true;\n }\n return handled;\n },\n current: function (date) {\n this._current = date;\n this.calendar._focus(date);\n },\n value: function (value) {\n var that = this, calendar = that.calendar, options = that.options, disabledDate = options.disableDates;\n if (disabledDate && disabledDate(value)) {\n value = null;\n }\n that._value = value;\n that._current = new DATE(+restrictValue(value, options.min, options.max));\n if (calendar) {\n calendar.value(value);\n }\n },\n _click: function (e) {\n if (e.currentTarget.className.indexOf(SELECTED) !== -1) {\n this.calendar.trigger('change');\n this.close();\n }\n },\n _option: function (option, value) {\n var that = this;\n var calendar = that.calendar;\n that.options[option] = value;\n if (calendar) {\n calendar[option](value);\n }\n }\n };\n DateView.normalize = normalize;\n kendo.DateView = DateView;\n var DatePicker = Widget.extend({\n init: function (element, options) {\n var that = this, disabled, div;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n options.disableDates = kendo.calendar.disabled(options.disableDates);\n options.min = parse(element.attr('min')) || parse(options.min);\n options.max = parse(element.attr('max')) || parse(options.max);\n normalize(options);\n that._initialOptions = extend({}, options);\n that._wrapper();\n that.dateView = new DateView(extend({}, options, {\n id: element.attr(ID),\n anchor: that.wrapper,\n change: function () {\n that._change(this.value());\n that.close();\n },\n close: function (e) {\n if (that.trigger(CLOSE)) {\n e.preventDefault();\n } else {\n element.attr(ARIA_EXPANDED, false);\n div.attr(ARIA_HIDDEN, true);\n }\n },\n open: function (e) {\n var options = that.options, date;\n if (that.trigger(OPEN)) {\n e.preventDefault();\n } else {\n if (that.element.val() !== that._oldText) {\n date = parse(element.val(), options.parseFormats, options.culture);\n that.dateView[date ? 'current' : 'value'](date);\n }\n element.attr(ARIA_EXPANDED, true);\n div.attr(ARIA_HIDDEN, false);\n that._updateARIA(date);\n }\n }\n }));\n div = that.dateView.div;\n that._icon();\n try {\n element[0].setAttribute('type', 'text');\n } catch (e) {\n element[0].type = 'text';\n }\n element.addClass('k-input').attr({\n role: 'combobox',\n 'aria-expanded': false,\n 'aria-owns': that.dateView._dateViewID,\n 'autocomplete': 'off'\n });\n that._reset();\n that._template();\n disabled = element.is('[disabled]') || $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n } else {\n that.readonly(element.is('[readonly]'));\n }\n that._createDateInput(options);\n that._old = that._update(options.value || that.element.val());\n that._oldText = element.val();\n kendo.notify(that);\n },\n events: [\n OPEN,\n CLOSE,\n CHANGE\n ],\n options: {\n name: 'DatePicker',\n value: null,\n footer: '',\n format: '',\n culture: '',\n parseFormats: [],\n min: new Date(1900, 0, 1),\n max: new Date(2099, 11, 31),\n start: MONTH,\n depth: MONTH,\n animation: {},\n month: {},\n dates: [],\n disableDates: null,\n ARIATemplate: 'Current focused date is #=kendo.toString(data.current, \"D\")#',\n dateInput: false,\n weekNumber: false\n },\n setOptions: function (options) {\n var that = this;\n var value = that._value;\n Widget.fn.setOptions.call(that, options);\n options = that.options;\n options.min = parse(options.min);\n options.max = parse(options.max);\n normalize(options);\n that.dateView.setOptions(options);\n that._createDateInput(options);\n if (!that._dateInput) {\n that.element.val(kendo.toString(value, options.format, options.culture));\n }\n if (value) {\n that._updateARIA(value);\n }\n },\n _editable: function (options) {\n var that = this, icon = that._dateIcon.off(ns), element = that.element.off(ns), wrapper = that._inputWrapper.off(ns), readonly = options.readonly, disable = options.disable;\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n element.removeAttr(DISABLED).removeAttr(READONLY).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 },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\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.focus();\n }\n },\n _change: function (value) {\n var that = this, oldValue = that.element.val(), dateChanged;\n value = that._update(value);\n dateChanged = !kendo.calendar.isEqualDate(that._old, value);\n var valueUpdated = dateChanged && !that._typing;\n var textFormatted = oldValue !== that.element.val();\n if (valueUpdated || textFormatted) {\n that.element.trigger(CHANGE);\n }\n if (dateChanged) {\n that._old = value;\n that._oldText = that.element.val();\n that.trigger(CHANGE);\n }\n that._typing = false;\n },\n _keydown: function (e) {\n var that = this, dateView = that.dateView, value = that.element.val(), handled = false;\n if (!dateView.popup.visible() && e.keyCode == keys.ENTER && value !== that._oldText) {\n that._change(value);\n } else {\n handled = dateView.move(e);\n that._updateARIA(dateView._current);\n if (!handled) {\n that._typing = true;\n } else if (that._dateInput && e.stopImmediatePropagation) {\n e.stopImmediatePropagation();\n }\n }\n },\n _icon: function () {\n var that = this, element = that.element, icon;\n icon = element.next('span.k-select');\n if (!icon[0]) {\n icon = $('').insertAfter(element);\n }\n that._dateIcon = icon.attr({\n 'role': 'button',\n 'aria-controls': that.dateView._dateViewID\n });\n },\n _option: function (option, value) {\n var that = this, options = that.options;\n if (value === undefined) {\n return options[option];\n }\n value = parse(value, options.parseFormats, options.culture);\n if (!value) {\n return;\n }\n options[option] = new DATE(+value);\n that.dateView[option](value);\n },\n _update: function (value) {\n var that = this, options = that.options, min = options.min, max = options.max, current = that._value, date = parse(value, options.parseFormats, options.culture), isSameType = date === null && current === null || date instanceof Date && current instanceof Date, formattedValue;\n if (options.disableDates(date)) {\n date = null;\n if (!that._old && !that.element.val()) {\n value = null;\n }\n }\n if (+date === +current && isSameType) {\n formattedValue = kendo.toString(date, options.format, options.culture);\n if (formattedValue !== value) {\n that.element.val(date === null ? value : formattedValue);\n }\n return date;\n }\n if (date !== null && isEqualDatePart(date, min)) {\n date = restrictValue(date, min, max);\n } else if (!isInRange(date, min, max)) {\n date = null;\n }\n that._value = date;\n that.dateView.value(date);\n if (that._dateInput && date) {\n that._dateInput.value(date || value);\n } else {\n that.element.val(kendo.toString(date || value, options.format, options.culture));\n }\n that._updateARIA(date);\n return date;\n },\n _wrapper: function () {\n var that = this, element = that.element, wrapper;\n wrapper = element.parents('.k-datepicker');\n if (!wrapper[0]) {\n wrapper = element.wrap(SPAN).parent().addClass('k-picker-wrap k-state-default');\n wrapper = wrapper.wrap(SPAN).parent();\n }\n wrapper[0].style.cssText = element[0].style.cssText;\n element.css({\n width: '100%',\n height: element[0].style.height\n });\n that.wrapper = wrapper.addClass('k-widget k-datepicker').addClass(element[0].className);\n that._inputWrapper = $(wrapper[0].firstChild);\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n that.value(element[0].defaultValue);\n that.max(that._initialOptions.max);\n that.min(that._initialOptions.min);\n };\n that._form = form.on('reset', that._resetHandler);\n }\n },\n _template: function () {\n this._ariaTemplate = template(this.options.ARIATemplate);\n },\n _createDateInput: function (options) {\n if (this._dateInput) {\n this._dateInput.destroy();\n this._dateInput = null;\n }\n if (options.dateInput) {\n this._dateInput = new ui.DateInput(this.element, {\n culture: options.culture,\n format: options.format,\n min: options.min,\n max: options.max\n });\n }\n },\n _updateARIA: function (date) {\n var cell;\n var that = this;\n var calendar = that.dateView.calendar;\n that.element.removeAttr('aria-activedescendant');\n if (calendar) {\n cell = calendar._cell;\n cell.attr('aria-label', that._ariaTemplate({ current: date || calendar.current() }));\n that.element.attr('aria-activedescendant', cell.attr('id'));\n }\n }\n });\n ui.plugin(DatePicker);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.numerictextbox', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'numerictextbox',\n name: 'NumericTextBox',\n category: 'web',\n description: 'The NumericTextBox widget can format and display numeric, percentage or currency textbox.',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, caret = kendo.caret, keys = kendo.keys, ui = kendo.ui, Widget = ui.Widget, activeElement = kendo._activeElement, extractFormat = kendo._extractFormat, parse = kendo.parseFloat, placeholderSupported = kendo.support.placeholder, getCulture = kendo.getCulture, CHANGE = 'change', DISABLED = 'disabled', READONLY = 'readonly', INPUT = 'k-input', SPIN = 'spin', ns = '.kendoNumericTextBox', TOUCHEND = 'touchend', MOUSELEAVE = 'mouseleave' + ns, HOVEREVENTS = 'mouseenter' + ns + ' ' + MOUSELEAVE, DEFAULT = 'k-state-default', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', FOCUS = 'focus', POINT = '.', CLASS_ICON = 'k-icon', SELECTED = 'k-state-selected', STATEDISABLED = 'k-state-disabled', STATE_INVALID = 'k-state-invalid', ARIA_DISABLED = 'aria-disabled', INTEGER_REGEXP = /^(-)?(\\d*)$/, NULL = null, proxy = $.proxy, extend = $.extend;\n var NumericTextBox = Widget.extend({\n init: function (element, options) {\n var that = this, isStep = options && options.step !== undefined, min, max, step, value, disabled;\n var inputType;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element.on('focusout' + ns, proxy(that._focusout, that)).attr('role', 'spinbutton');\n options.placeholder = options.placeholder || element.attr('placeholder');\n min = that.min(element.attr('min'));\n max = that.max(element.attr('max'));\n step = that._parse(element.attr('step'));\n if (options.min === NULL && min !== NULL) {\n options.min = min;\n }\n if (options.max === NULL && max !== NULL) {\n options.max = max;\n }\n if (!isStep && step !== NULL) {\n options.step = step;\n }\n that._initialOptions = extend({}, options);\n inputType = element.attr('type');\n that._reset();\n that._wrapper();\n that._arrows();\n that._validation();\n that._input();\n if (!kendo.support.mobileOS) {\n that._text.on(FOCUS + ns, proxy(that._click, that));\n } else {\n that._text.on(TOUCHEND + ns + ' ' + FOCUS + ns, function () {\n if (kendo.support.browser.edge) {\n that._text.one(FOCUS + ns, function () {\n that._toggleText(false);\n element.focus();\n });\n } else {\n that._toggleText(false);\n element.focus();\n }\n });\n }\n element.attr('aria-valuemin', options.min !== NULL ? options.min * options.factor : options.min).attr('aria-valuemax', options.max !== NULL ? options.max * options.factor : options.max);\n options.format = extractFormat(options.format);\n value = options.value;\n if (value == NULL) {\n if (inputType == 'number') {\n value = parseFloat(element.val());\n } else {\n value = element.val();\n }\n }\n that.value(value);\n disabled = element.is('[disabled]') || $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n } else {\n that.readonly(element.is('[readonly]'));\n }\n that.angular('compile', function () {\n return { elements: that._text.get() };\n });\n kendo.notify(that);\n },\n options: {\n name: 'NumericTextBox',\n decimals: NULL,\n restrictDecimals: false,\n min: NULL,\n max: NULL,\n value: NULL,\n step: 1,\n round: true,\n culture: '',\n format: 'n',\n spinners: true,\n placeholder: '',\n factor: 1,\n upArrowText: 'Increase value',\n downArrowText: 'Decrease value'\n },\n events: [\n CHANGE,\n SPIN\n ],\n _editable: function (options) {\n var that = this, element = that.element, disable = options.disable, readonly = options.readonly, text = that._text.add(element), wrapper = that._inputWrapper.off(HOVEREVENTS);\n that._toggleText(true);\n that._upArrowEventHandler.unbind('press');\n that._downArrowEventHandler.unbind('press');\n element.off('keydown' + ns).off('keypress' + ns).off('keyup' + ns).off('paste' + ns);\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n text.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false);\n that._upArrowEventHandler.bind('press', function (e) {\n e.preventDefault();\n that._spin(1);\n that._upArrow.addClass(SELECTED);\n });\n that._downArrowEventHandler.bind('press', function (e) {\n e.preventDefault();\n that._spin(-1);\n that._downArrow.addClass(SELECTED);\n });\n that.element.on('keydown' + ns, proxy(that._keydown, that)).on('keypress' + ns, proxy(that._keypress, that)).on('keyup' + ns, proxy(that._keyup, that)).on('paste' + ns, proxy(that._paste, that));\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n text.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable);\n }\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n that._arrowsWrap.toggle(that.options.spinners);\n that._inputWrapper.toggleClass('k-expand-padding', !that.options.spinners);\n that._text.prop('placeholder', that.options.placeholder);\n that._placeholder(that.options.placeholder);\n that.element.attr({\n 'aria-valuemin': that.options.min !== NULL ? that.options.min * that.options.factor : that.options.min,\n 'aria-valuemax': that.options.max !== NULL ? that.options.max * that.options.factor : that.options.max\n });\n that.options.format = extractFormat(that.options.format);\n if (options.value !== undefined) {\n that.value(options.value);\n }\n },\n destroy: function () {\n var that = this;\n that.element.add(that._text).add(that._upArrow).add(that._downArrow).add(that._inputWrapper).off(ns);\n that._upArrowEventHandler.destroy();\n that._downArrowEventHandler.destroy();\n if (that._form) {\n that._form.off('reset', that._resetHandler);\n }\n Widget.fn.destroy.call(that);\n },\n min: function (value) {\n return this._option('min', value);\n },\n max: function (value) {\n return this._option('max', value);\n },\n step: function (value) {\n return this._option('step', value);\n },\n value: function (value) {\n var that = this, adjusted;\n if (value === undefined) {\n return that._value;\n }\n value = that._parse(value);\n adjusted = that._adjust(value);\n if (value !== adjusted) {\n return;\n }\n that._update(value);\n that._old = that._value;\n },\n focus: function () {\n this._focusin();\n },\n _adjust: function (value) {\n var that = this, options = that.options, min = options.min, max = options.max;\n if (value === NULL) {\n return value;\n }\n if (min !== NULL && value < min) {\n value = min;\n } else if (max !== NULL && value > max) {\n value = max;\n }\n return value;\n },\n _arrows: function () {\n var that = this, arrows, _release = function () {\n clearTimeout(that._spinning);\n arrows.removeClass(SELECTED);\n }, options = that.options, spinners = options.spinners, element = that.element;\n arrows = element.siblings('.' + CLASS_ICON);\n if (!arrows[0]) {\n arrows = $(buttonHtml('increase', options.upArrowText) + buttonHtml('decrease', options.downArrowText)).insertAfter(element);\n that._arrowsWrap = arrows.wrapAll('').parent();\n }\n if (!spinners) {\n arrows.parent().toggle(spinners);\n that._inputWrapper.addClass('k-expand-padding');\n }\n that._upArrow = arrows.eq(0);\n that._upArrowEventHandler = new kendo.UserEvents(that._upArrow, { release: _release });\n that._downArrow = arrows.eq(1);\n that._downArrowEventHandler = new kendo.UserEvents(that._downArrow, { release: _release });\n },\n _validation: function () {\n var that = this;\n var element = that.element;\n that._validationIcon = $('').hide().insertAfter(element);\n },\n _blur: function () {\n var that = this;\n that._toggleText(true);\n that._change(that.element.val());\n },\n _click: function (e) {\n var that = this;\n clearTimeout(that._focusing);\n that._focusing = setTimeout(function () {\n var input = e.target, idx = caret(input)[0], value = input.value.substring(0, idx), format = that._format(that.options.format), group = format[','], result, groupRegExp, extractRegExp, caretPosition = 0;\n if (group) {\n groupRegExp = new RegExp('\\\\' + group, 'g');\n extractRegExp = new RegExp('([\\\\d\\\\' + group + ']+)(\\\\' + format[POINT] + ')?(\\\\d+)?');\n }\n if (extractRegExp) {\n result = extractRegExp.exec(value);\n }\n if (result) {\n caretPosition = result[0].replace(groupRegExp, '').length;\n if (value.indexOf('(') != -1 && that._value < 0) {\n caretPosition++;\n }\n }\n that._focusin();\n caret(that.element[0], caretPosition);\n });\n },\n _change: function (value) {\n var that = this, factor = that.options.factor;\n if (factor && factor !== 1) {\n value = kendo.parseFloat(value);\n if (value !== null) {\n value = value / factor;\n }\n }\n that._update(value);\n value = that._value;\n if (that._old != value) {\n that._old = value;\n if (!that._typing) {\n that.element.trigger(CHANGE);\n }\n that.trigger(CHANGE);\n }\n that._typing = false;\n },\n _culture: function (culture) {\n return culture || getCulture(this.options.culture);\n },\n _focusin: function () {\n var that = this;\n that._inputWrapper.addClass(FOCUSED);\n that._toggleText(false);\n that.element[0].focus();\n },\n _focusout: function () {\n var that = this;\n clearTimeout(that._focusing);\n that._inputWrapper.removeClass(FOCUSED).removeClass(HOVER);\n that._blur();\n that._removeInvalidState();\n },\n _format: function (format, culture) {\n var numberFormat = this._culture(culture).numberFormat;\n format = format.toLowerCase();\n if (format.indexOf('c') > -1) {\n numberFormat = numberFormat.currency;\n } else if (format.indexOf('p') > -1) {\n numberFormat = numberFormat.percent;\n }\n return numberFormat;\n },\n _input: function () {\n var that = this, options = that.options, CLASSNAME = 'k-formatted-value', element = that.element.addClass(INPUT).show()[0], accessKey = element.accessKey, wrapper = that.wrapper, text;\n text = wrapper.find(POINT + CLASSNAME);\n if (!text[0]) {\n text = $('').insertBefore(element).addClass(CLASSNAME);\n }\n try {\n element.setAttribute('type', 'text');\n } catch (e) {\n element.type = 'text';\n }\n text[0].title = element.title;\n text[0].tabIndex = element.tabIndex;\n text[0].style.cssText = element.style.cssText;\n text.prop('placeholder', options.placeholder);\n if (accessKey) {\n text.attr('accesskey', accessKey);\n element.accessKey = '';\n }\n that._text = text.addClass(element.className).attr({\n 'role': 'spinbutton',\n 'aria-valuemin': options.min !== NULL ? options.min * options.factor : options.min,\n 'aria-valuemax': options.max !== NULL ? options.max * options.factor : options.max,\n 'autocomplete': 'off'\n });\n },\n _keydown: function (e) {\n var that = this, key = e.keyCode;\n that._key = key;\n if (key == keys.DOWN) {\n that._step(-1);\n } else if (key == keys.UP) {\n that._step(1);\n } else if (key == keys.ENTER) {\n that._change(that.element.val());\n } else if (key != keys.TAB) {\n that._typing = true;\n }\n },\n _keypress: function (e) {\n if (e.which === 0 || e.metaKey || e.ctrlKey || e.keyCode === keys.BACKSPACE || e.keyCode === keys.ENTER) {\n return;\n }\n var that = this;\n var min = that.options.min;\n var element = that.element;\n var selection = caret(element);\n var selectionStart = selection[0];\n var selectionEnd = selection[1];\n var character = String.fromCharCode(e.which);\n var numberFormat = that._format(that.options.format);\n var isNumPadDecimal = that._key === keys.NUMPAD_DOT;\n var value = element.val();\n var isValid;\n if (isNumPadDecimal) {\n character = numberFormat[POINT];\n }\n value = value.substring(0, selectionStart) + character + value.substring(selectionEnd);\n isValid = that._numericRegex(numberFormat).test(value);\n if (isValid && isNumPadDecimal) {\n element.val(value);\n caret(element, selectionStart + character.length);\n e.preventDefault();\n } else if (min !== null && min >= 0 && value.charAt(0) === '-' || !isValid) {\n that._addInvalidState();\n e.preventDefault();\n }\n that._key = 0;\n },\n _keyup: function () {\n this._removeInvalidState();\n },\n _addInvalidState: function () {\n var that = this;\n that._inputWrapper.addClass(STATE_INVALID);\n that._validationIcon.show();\n },\n _removeInvalidState: function () {\n var that = this;\n that._inputWrapper.removeClass(STATE_INVALID);\n that._validationIcon.hide();\n },\n _numericRegex: function (numberFormat) {\n var that = this;\n var separator = numberFormat[POINT];\n var precision = that.options.decimals;\n var fractionRule = '*';\n if (separator === POINT) {\n separator = '\\\\' + separator;\n }\n if (precision === NULL) {\n precision = numberFormat.decimals;\n }\n if (precision === 0 && that.options.restrictDecimals) {\n return INTEGER_REGEXP;\n }\n if (that.options.restrictDecimals) {\n fractionRule = '{0,' + precision + '}';\n }\n if (that._separator !== separator) {\n that._separator = separator;\n that._floatRegExp = new RegExp('^(-)?(((\\\\d+(' + separator + '\\\\d' + fractionRule + ')?)|(' + separator + '\\\\d' + fractionRule + ')))?$');\n }\n return that._floatRegExp;\n },\n _paste: function (e) {\n var that = this;\n var element = e.target;\n var value = element.value;\n var numberFormat = that._format(that.options.format);\n setTimeout(function () {\n var result = that._parse(element.value);\n if (result === NULL) {\n that._update(value);\n } else {\n element.value = result.toString().replace(POINT, numberFormat[POINT]);\n if (that._adjust(result) !== result || !that._numericRegex(numberFormat).test(element.value)) {\n that._update(value);\n }\n }\n });\n },\n _option: function (option, value) {\n var that = this, element = that.element, options = that.options;\n if (value === undefined) {\n return options[option];\n }\n value = that._parse(value);\n if (!value && option === 'step') {\n return;\n }\n options[option] = value;\n element.add(that._text).attr('aria-value' + option, value);\n element.attr(option, value);\n },\n _spin: function (step, timeout) {\n var that = this;\n timeout = timeout || 500;\n clearTimeout(that._spinning);\n that._spinning = setTimeout(function () {\n that._spin(step, 50);\n }, timeout);\n that._step(step);\n },\n _step: function (step) {\n var that = this, element = that.element, originalValue = that._value, value = that._parse(element.val()) || 0, precision = that.options.decimals || 2;\n if (activeElement() != element[0]) {\n that._focusin();\n }\n if (that.options.factor && value) {\n value = value / that.options.factor;\n }\n value = +(value + that.options.step * step).toFixed(precision);\n value = that._adjust(value);\n that._update(value);\n that._typing = false;\n if (originalValue !== value) {\n that.trigger(SPIN);\n }\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _toggleText: function (toggle) {\n var that = this;\n that._text.toggle(toggle);\n that.element.toggle(!toggle);\n },\n _parse: function (value, culture) {\n return parse(value, this._culture(culture), this.options.format);\n },\n _round: function (value, precision) {\n var rounder = this.options.round ? kendo._round : truncate;\n return rounder(value, precision);\n },\n _update: function (value) {\n var that = this, options = that.options, factor = options.factor, format = options.format, decimals = options.decimals, culture = that._culture(), numberFormat = that._format(format, culture), isNotNull;\n if (decimals === NULL) {\n decimals = numberFormat.decimals;\n }\n value = that._parse(value, culture);\n isNotNull = value !== NULL;\n if (isNotNull) {\n value = parseFloat(that._round(value, decimals), 10);\n }\n that._value = value = that._adjust(value);\n that._placeholder(kendo.toString(value, format, culture));\n if (isNotNull) {\n if (factor) {\n value = parseFloat(that._round(value * factor, decimals), 10);\n }\n value = value.toString();\n if (value.indexOf('e') !== -1) {\n value = that._round(+value, decimals);\n }\n value = value.replace(POINT, numberFormat[POINT]);\n } else {\n value = null;\n }\n that.element.val(value);\n that.element.add(that._text).attr('aria-valuenow', value);\n },\n _placeholder: function (value) {\n var input = this._text;\n input.val(value);\n if (!placeholderSupported && !value) {\n input.val(this.options.placeholder);\n }\n input.attr('title', this.element.attr('title') || input.val());\n },\n _wrapper: function () {\n var that = this, element = that.element, DOMElement = element[0], wrapper;\n wrapper = element.parents('.k-numerictextbox');\n if (!wrapper.is('span.k-numerictextbox')) {\n wrapper = element.hide().wrap('').parent();\n wrapper = wrapper.wrap('').parent();\n }\n wrapper[0].style.cssText = DOMElement.style.cssText;\n DOMElement.style.width = '';\n that.wrapper = wrapper.addClass('k-widget k-numerictextbox').addClass(DOMElement.className).css('display', '');\n that._inputWrapper = $(wrapper[0].firstChild);\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(element[0].value);\n that.max(that._initialOptions.max);\n that.min(that._initialOptions.min);\n });\n };\n that._form = form.on('reset', that._resetHandler);\n }\n }\n });\n function buttonHtml(direction, text) {\n var className = 'k-i-arrow-' + (direction === 'increase' ? '60-up' : '60-down');\n return '' + '' + '';\n }\n function truncate(value, precision) {\n var parts = parseFloat(value, 10).toString().split(POINT);\n if (parts[1]) {\n parts[1] = parts[1].substring(0, precision);\n }\n return parts.join(POINT);\n }\n ui.plugin(NumericTextBox);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.validator', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'validator',\n name: 'Validator',\n category: 'web',\n description: 'The Validator offers an easy way to do a client-side form validation.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, NS = '.kendoValidator', INVALIDMSG = 'k-invalid-msg', invalidMsgRegExp = new RegExp(INVALIDMSG, 'i'), INVALIDINPUT = 'k-invalid', VALIDINPUT = 'k-valid', emailRegExp = /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/i, urlRegExp = /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i, INPUTSELECTOR = ':input:not(:button,[type=submit],[type=reset],[disabled],[readonly])', CHECKBOXSELECTOR = ':checkbox:not([disabled],[readonly])', NUMBERINPUTSELECTOR = '[type=number],[type=range]', BLUR = 'blur', NAME = 'name', FORM = 'form', NOVALIDATE = 'novalidate', VALIDATE = 'validate', CHANGE = 'change', VALIDATE_INPUT = 'validateInput', proxy = $.proxy, patternMatcher = function (value, pattern) {\n if (typeof pattern === 'string') {\n pattern = new RegExp('^(?:' + pattern + ')$');\n }\n return pattern.test(value);\n }, matcher = function (input, selector, pattern) {\n var value = input.val();\n if (input.filter(selector).length && value !== '') {\n return patternMatcher(value, pattern);\n }\n return true;\n }, hasAttribute = function (input, name) {\n if (input.length) {\n return input[0].attributes[name] != null;\n }\n return false;\n };\n if (!kendo.ui.validator) {\n kendo.ui.validator = {\n rules: {},\n messages: {}\n };\n }\n function resolveRules(element) {\n var resolvers = kendo.ui.validator.ruleResolvers || {}, rules = {}, name;\n for (name in resolvers) {\n $.extend(true, rules, resolvers[name].resolve(element));\n }\n return rules;\n }\n function decode(value) {\n return value.replace(/&/g, '&').replace(/"/g, '\"').replace(/'/g, '\\'').replace(/</g, '<').replace(/>/g, '>');\n }\n function numberOfDecimalDigits(value) {\n value = (value + '').split('.');\n if (value.length > 1) {\n return value[1].length;\n }\n return 0;\n }\n function parseHtml(text) {\n if ($.parseHTML) {\n return $($.parseHTML(text));\n }\n return $(text);\n }\n function searchForMessageContainer(elements, fieldName) {\n var containers = $(), element, attr;\n for (var idx = 0, length = elements.length; idx < length; idx++) {\n element = elements[idx];\n if (invalidMsgRegExp.test(element.className)) {\n attr = element.getAttribute(kendo.attr('for'));\n if (attr === fieldName) {\n containers = containers.add(element);\n }\n }\n }\n return containers;\n }\n var Validator = Widget.extend({\n init: function (element, options) {\n var that = this, resolved = resolveRules(element), validateAttributeSelector = '[' + kendo.attr('validate') + '!=false]';\n options = options || {};\n options.rules = $.extend({}, kendo.ui.validator.rules, resolved.rules, options.rules);\n options.messages = $.extend({}, kendo.ui.validator.messages, resolved.messages, options.messages);\n Widget.fn.init.call(that, element, options);\n that._errorTemplate = kendo.template(that.options.errorTemplate);\n if (that.element.is(FORM)) {\n that.element.attr(NOVALIDATE, NOVALIDATE);\n }\n that._inputSelector = INPUTSELECTOR + validateAttributeSelector;\n that._checkboxSelector = CHECKBOXSELECTOR + validateAttributeSelector;\n that._errors = {};\n that._attachEvents();\n that._isValidated = false;\n },\n events: [\n VALIDATE,\n CHANGE,\n VALIDATE_INPUT\n ],\n options: {\n name: 'Validator',\n errorTemplate: '' + ' #=message#',\n messages: {\n required: '{0} is required',\n pattern: '{0} is not valid',\n min: '{0} should be greater than or equal to {1}',\n max: '{0} should be smaller than or equal to {1}',\n step: '{0} is not valid',\n email: '{0} is not valid email',\n url: '{0} is not valid URL',\n date: '{0} is not valid date',\n dateCompare: 'End date should be greater than or equal to the start date'\n },\n rules: {\n required: function (input) {\n var checkbox = input.filter('[type=checkbox]').length && !input.is(':checked'), value = input.val();\n return !(hasAttribute(input, 'required') && (!value || value === '' || value.length === 0 || checkbox));\n },\n pattern: function (input) {\n if (input.filter('[type=text],[type=email],[type=url],[type=tel],[type=search],[type=password]').filter('[pattern]').length && input.val() !== '') {\n return patternMatcher(input.val(), input.attr('pattern'));\n }\n return true;\n },\n min: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[min]').length && input.val() !== '') {\n var min = parseFloat(input.attr('min')) || 0, val = kendo.parseFloat(input.val());\n return min <= val;\n }\n return true;\n },\n max: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[max]').length && input.val() !== '') {\n var max = parseFloat(input.attr('max')) || 0, val = kendo.parseFloat(input.val());\n return max >= val;\n }\n return true;\n },\n step: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[step]').length && input.val() !== '') {\n var min = parseFloat(input.attr('min')) || 0, step = parseFloat(input.attr('step')) || 1, val = parseFloat(input.val()), decimals = numberOfDecimalDigits(step), raise;\n if (decimals) {\n raise = Math.pow(10, decimals);\n return Math.floor((val - min) * raise) % (step * raise) / Math.pow(100, decimals) === 0;\n }\n return (val - min) % step === 0;\n }\n return true;\n },\n email: function (input) {\n return matcher(input, '[type=email],[' + kendo.attr('type') + '=email]', emailRegExp);\n },\n url: function (input) {\n return matcher(input, '[type=url],[' + kendo.attr('type') + '=url]', urlRegExp);\n },\n date: function (input) {\n if (input.filter('[type^=date],[' + kendo.attr('type') + '=date]').length && input.val() !== '') {\n return kendo.parseDate(input.val(), input.attr(kendo.attr('format'))) !== null;\n }\n return true;\n }\n },\n validateOnBlur: true\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.off(NS);\n },\n value: function () {\n if (!this._isValidated) {\n return false;\n }\n return this.errors().length === 0;\n },\n _submit: function (e) {\n if (!this.validate()) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n e.preventDefault();\n return false;\n }\n return true;\n },\n _checkElement: function (element) {\n var state = this.value();\n this.validateInput(element);\n if (this.value() !== state) {\n this.trigger(CHANGE);\n }\n },\n _attachEvents: function () {\n var that = this;\n if (that.element.is(FORM)) {\n that.element.on('submit' + NS, proxy(that._submit, that));\n }\n if (that.options.validateOnBlur) {\n if (!that.element.is(INPUTSELECTOR)) {\n that.element.on(BLUR + NS, that._inputSelector, function () {\n that._checkElement($(this));\n });\n that.element.on('click' + NS, that._checkboxSelector, function () {\n that._checkElement($(this));\n });\n } else {\n that.element.on(BLUR + NS, function () {\n that._checkElement(that.element);\n });\n if (that.element.is(CHECKBOXSELECTOR)) {\n that.element.on('click' + NS, function () {\n that._checkElement(that.element);\n });\n }\n }\n }\n },\n validate: function () {\n var inputs;\n var idx;\n var result = false;\n var length;\n var isValid = this.value();\n this._errors = {};\n if (!this.element.is(INPUTSELECTOR)) {\n var invalid = false;\n inputs = this.element.find(this._inputSelector);\n for (idx = 0, length = inputs.length; idx < length; idx++) {\n if (!this.validateInput(inputs.eq(idx))) {\n invalid = true;\n }\n }\n result = !invalid;\n } else {\n result = this.validateInput(this.element);\n }\n this.trigger(VALIDATE, { valid: result });\n if (isValid !== result) {\n this.trigger(CHANGE);\n }\n return result;\n },\n validateInput: function (input) {\n input = $(input);\n this._isValidated = true;\n var that = this, template = that._errorTemplate, result = that._checkValidity(input), valid = result.valid, className = '.' + INVALIDMSG, fieldName = input.attr(NAME) || '', lbl = that._findMessageContainer(fieldName).add(input.next(className).filter(function () {\n var element = $(this);\n if (element.filter('[' + kendo.attr('for') + ']').length) {\n return element.attr(kendo.attr('for')) === fieldName;\n }\n return true;\n })).hide(), messageText, wasValid = !input.attr('aria-invalid');\n input.removeAttr('aria-invalid');\n if (!valid) {\n messageText = that._extractMessage(input, result.key);\n that._errors[fieldName] = messageText;\n var messageLabel = parseHtml(template({ message: decode(messageText) }));\n var lblId = lbl.attr('id');\n that._decorateMessageContainer(messageLabel, fieldName);\n if (lblId) {\n messageLabel.attr('id', lblId);\n }\n if (!lbl.replaceWith(messageLabel).length) {\n messageLabel.insertAfter(input);\n }\n messageLabel.show();\n input.attr('aria-invalid', true);\n } else {\n delete that._errors[fieldName];\n }\n if (wasValid !== valid) {\n this.trigger(VALIDATE_INPUT, {\n valid: valid,\n input: input\n });\n }\n input.toggleClass(INVALIDINPUT, !valid);\n input.toggleClass(VALIDINPUT, valid);\n if (kendo.widgetInstance(input)) {\n var inputWrap = kendo.widgetInstance(input)._inputWrapper;\n if (inputWrap) {\n inputWrap.toggleClass(INVALIDINPUT, !valid);\n inputWrap.toggleClass(INVALIDINPUT, !valid);\n }\n }\n return valid;\n },\n hideMessages: function () {\n var that = this, className = '.' + INVALIDMSG, element = that.element;\n if (!element.is(INPUTSELECTOR)) {\n element.find(className).hide();\n } else {\n element.next(className).hide();\n }\n },\n _findMessageContainer: function (fieldName) {\n var locators = kendo.ui.validator.messageLocators, name, containers = $();\n for (var idx = 0, length = this.element.length; idx < length; idx++) {\n containers = containers.add(searchForMessageContainer(this.element[idx].getElementsByTagName('*'), fieldName));\n }\n for (name in locators) {\n containers = containers.add(locators[name].locate(this.element, fieldName));\n }\n return containers;\n },\n _decorateMessageContainer: function (container, fieldName) {\n var locators = kendo.ui.validator.messageLocators, name;\n container.addClass(INVALIDMSG).attr(kendo.attr('for'), fieldName || '');\n for (name in locators) {\n locators[name].decorate(container, fieldName);\n }\n container.attr('role', 'alert');\n },\n _extractMessage: function (input, ruleKey) {\n var that = this, customMessage = that.options.messages[ruleKey], fieldName = input.attr(NAME), nonDefaultMessage;\n if (!kendo.ui.Validator.prototype.options.messages[ruleKey]) {\n nonDefaultMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n }\n customMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n return kendo.format(input.attr(kendo.attr(ruleKey + '-msg')) || input.attr('validationMessage') || nonDefaultMessage || input.attr('title') || customMessage || '', fieldName, input.attr(ruleKey) || input.attr(kendo.attr(ruleKey)));\n },\n _checkValidity: function (input) {\n var rules = this.options.rules, rule;\n for (rule in rules) {\n if (!rules[rule].call(this, input)) {\n return {\n valid: false,\n key: rule\n };\n }\n }\n return { valid: true };\n },\n errors: function () {\n var results = [], errors = this._errors, error;\n for (error in errors) {\n results.push(errors[error]);\n }\n return results;\n }\n });\n kendo.ui.plugin(Validator);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.editable', [\n 'kendo.datepicker',\n 'kendo.numerictextbox',\n 'kendo.validator',\n 'kendo.binder'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'editable',\n name: 'Editable',\n category: 'framework',\n depends: [\n 'datepicker',\n 'numerictextbox',\n 'validator',\n 'binder'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, extend = $.extend, oldIE = kendo.support.browser.msie && kendo.support.browser.version < 9, isFunction = kendo.isFunction, isPlainObject = $.isPlainObject, inArray = $.inArray, POINT = '.', nameSpecialCharRegExp = /(\"|\\%|'|\\[|\\]|\\$|\\.|\\,|\\:|\\;|\\+|\\*|\\&|\\!|\\#|\\(|\\)|<|>|\\=|\\?|\\@|\\^|\\{|\\}|\\~|\\/|\\||`)/g, ERRORTEMPLATE = '
        ' + '#=message#
        ', CHANGE = 'change';\n var EQUAL_SET = 'equalSet';\n var specialRules = [\n 'url',\n 'email',\n 'number',\n 'date',\n 'boolean'\n ];\n function fieldType(field) {\n field = field != null ? field : '';\n return field.type || $.type(field) || 'string';\n }\n function convertToValueBinding(container) {\n container.find(':input:not(:button, .k-combobox .k-input, [' + kendo.attr('role') + '=listbox], [' + kendo.attr('role') + '=upload], [' + kendo.attr('skip') + '], [type=file])').each(function () {\n var bindAttr = kendo.attr('bind'), binding = this.getAttribute(bindAttr) || '', bindingName = this.type === 'checkbox' || this.type === 'radio' ? 'checked:' : 'value:', fieldName = this.name;\n if (binding.indexOf(bindingName) === -1 && fieldName) {\n binding += (binding.length ? ',' : '') + bindingName + fieldName;\n $(this).attr(bindAttr, binding);\n }\n });\n }\n function createAttributes(options) {\n var field = (options.model.fields || options.model)[options.field], type = fieldType(field), validation = field ? field.validation : {}, ruleName, DATATYPE = kendo.attr('type'), BINDING = kendo.attr('bind'), rule, attr = {\n name: options.field,\n title: options.title\n };\n for (ruleName in validation) {\n rule = validation[ruleName];\n if (inArray(ruleName, specialRules) >= 0) {\n attr[DATATYPE] = ruleName;\n } else if (!isFunction(rule)) {\n var culture = kendo.getCulture();\n if (typeof rule === 'number' && culture.name.length) {\n var numberFormat = culture.numberFormat;\n var stringRule = rule.toString().replace(POINT, numberFormat[POINT]);\n attr[ruleName] = stringRule;\n } else {\n attr[ruleName] = isPlainObject(rule) ? rule.value || ruleName : rule;\n }\n }\n attr[kendo.attr(ruleName + '-msg')] = rule.message;\n }\n if (inArray(type, specialRules) >= 0) {\n attr[DATATYPE] = type;\n }\n attr[BINDING] = (type === 'boolean' ? 'checked:' : 'value:') + options.field;\n return attr;\n }\n function convertItems(items) {\n var idx, length, item, value, text, result;\n if (items && items.length) {\n result = [];\n for (idx = 0, length = items.length; idx < length; idx++) {\n item = items[idx];\n text = item.text || item.value || item;\n value = item.value == null ? item.text || item : item.value;\n result[idx] = {\n text: text,\n value: value\n };\n }\n }\n return result;\n }\n var editors = {\n 'number': function (container, options) {\n var attr = createAttributes(options);\n $('').attr(attr).appendTo(container).kendoNumericTextBox({ format: options.format });\n $('').hide().appendTo(container);\n },\n 'date': function (container, options) {\n var attr = createAttributes(options), format = options.format;\n if (format) {\n format = kendo._extractFormat(format);\n }\n attr[kendo.attr('format')] = format;\n $('').attr(attr).appendTo(container).kendoDatePicker({ format: options.format });\n $('').hide().appendTo(container);\n },\n 'string': function (container, options) {\n var attr = createAttributes(options);\n $('').attr(attr).appendTo(container);\n },\n 'boolean': function (container, options) {\n var attr = createAttributes(options);\n $('').attr(attr).appendTo(container);\n },\n 'values': function (container, options) {\n var attr = createAttributes(options);\n var items = kendo.stringify(convertItems(options.values));\n $('').attr({\n placeholder: this.element.attr('placeholder'),\n title: this.element.attr('title'),\n role: 'listbox',\n 'aria-haspopup': true,\n 'aria-expanded': false\n });\n this.list.prepend($('').append(this.filterInput.add(icon)));\n }\n },\n _span: function () {\n var that = this, wrapper = that.wrapper, SELECTOR = 'span.k-input', span;\n span = wrapper.find(SELECTOR);\n if (!span[0]) {\n wrapper.append(' ').append(that.element);\n span = wrapper.find(SELECTOR);\n }\n that.span = span;\n that._inputWrapper = $(wrapper[0].firstChild);\n that._arrow = wrapper.find('.k-select');\n that._arrowIcon = that._arrow.find('.k-icon');\n },\n _wrapper: function () {\n var that = this, element = that.element, DOMelement = element[0], wrapper;\n wrapper = element.parent();\n if (!wrapper.is('span.k-widget')) {\n wrapper = element.wrap('').parent();\n wrapper[0].style.cssText = DOMelement.style.cssText;\n wrapper[0].title = DOMelement.title;\n }\n that._focused = that.wrapper = wrapper.addClass('k-widget k-dropdown').addClass(DOMelement.className).css('display', '').attr({\n accesskey: element.attr('accesskey'),\n unselectable: 'on',\n role: 'listbox',\n 'aria-haspopup': true,\n 'aria-expanded': false\n });\n element.hide().removeAttr('accesskey');\n },\n _clearSelection: function (parent) {\n this.select(parent.value() ? 0 : -1);\n },\n _inputTemplate: function () {\n var that = this, template = that.options.valueTemplate;\n if (!template) {\n template = $.proxy(kendo.template('#:this._text(data)#', { useWithBlock: false }), that);\n } else {\n template = kendo.template(template);\n }\n that.valueTemplate = template;\n if (that.hasOptionLabel() && !that.options.optionLabelTemplate) {\n try {\n that.valueTemplate(that._optionLabelDataItem());\n } catch (e) {\n throw new Error(MSG_INVALID_OPTION_LABEL);\n }\n }\n },\n _textAccessor: function (text) {\n var dataItem = null;\n var template = this.valueTemplate;\n var optionLabelText = this._optionLabelText();\n var span = this.span;\n if (text === undefined) {\n return span.text();\n }\n if ($.isPlainObject(text) || text instanceof ObservableObject) {\n dataItem = text;\n } else if (optionLabelText && optionLabelText === text) {\n dataItem = this.options.optionLabel;\n }\n if (!dataItem) {\n dataItem = this._assignInstance(text, this._accessor());\n }\n if (this.hasOptionLabel()) {\n if (dataItem === optionLabelText || this._text(dataItem) === optionLabelText) {\n template = this.optionLabelTemplate;\n if (typeof this.options.optionLabel === 'string' && !this.options.optionLabelTemplate) {\n dataItem = optionLabelText;\n }\n }\n }\n var getElements = function () {\n return {\n elements: span.get(),\n data: [{ dataItem: dataItem }]\n };\n };\n this.angular('cleanup', getElements);\n try {\n span.html(template(dataItem));\n } catch (e) {\n span.html('');\n }\n this.angular('compile', getElements);\n },\n _preselect: function (value, text) {\n if (!value && !text) {\n text = this._optionLabelText();\n }\n this._accessor(value);\n this._textAccessor(text);\n this._old = this._accessor();\n this._oldIndex = this.selectedIndex;\n this.listView.setValue(value);\n this._initialIndex = null;\n this._presetValue = true;\n },\n _assignInstance: function (text, value) {\n var dataTextField = this.options.dataTextField;\n var dataItem = {};\n if (dataTextField) {\n assign(dataItem, dataTextField.split('.'), text);\n assign(dataItem, this.options.dataValueField.split('.'), value);\n dataItem = new ObservableObject(dataItem);\n } else {\n dataItem = text;\n }\n return dataItem;\n }\n });\n function assign(instance, fields, value) {\n var idx = 0, lastIndex = fields.length - 1, field;\n for (; idx < lastIndex; ++idx) {\n field = fields[idx];\n if (!(field in instance)) {\n instance[field] = {};\n }\n instance = instance[field];\n }\n instance[fields[lastIndex]] = value;\n }\n function normalizeIndex(index, length) {\n if (index >= length) {\n index -= length;\n }\n return index;\n }\n function sameCharsOnly(word, character) {\n for (var idx = 0; idx < word.length; idx++) {\n if (word.charAt(idx) !== character) {\n return false;\n }\n }\n return true;\n }\n ui.plugin(DropDownList);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/diagram/dom', [\n 'kendo.data',\n 'kendo.draganddrop',\n 'kendo.toolbar',\n 'kendo.editable',\n 'kendo.window',\n 'kendo.dropdownlist',\n 'kendo.dataviz.core',\n 'kendo.dataviz.themes',\n 'dataviz/diagram/svg',\n 'dataviz/diagram/services',\n 'dataviz/diagram/layout'\n ], f);\n}(function () {\n (function ($, undefined) {\n var dataviz = kendo.dataviz, draw = kendo.drawing, geom = kendo.geometry, diagram = dataviz.diagram, Widget = kendo.ui.Widget, Class = kendo.Class, proxy = $.proxy, deepExtend = kendo.deepExtend, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, extend = $.extend, HierarchicalDataSource = kendo.data.HierarchicalDataSource, Canvas = diagram.Canvas, Group = diagram.Group, Rectangle = diagram.Rectangle, Circle = diagram.Circle, CompositeTransform = diagram.CompositeTransform, Rect = diagram.Rect, Path = diagram.Path, DeleteShapeUnit = diagram.DeleteShapeUnit, DeleteConnectionUnit = diagram.DeleteConnectionUnit, TextBlock = diagram.TextBlock, Image = diagram.Image, Point = diagram.Point, Intersect = diagram.Intersect, ConnectionEditAdorner = diagram.ConnectionEditAdorner, UndoRedoService = diagram.UndoRedoService, ToolService = diagram.ToolService, Selector = diagram.Selector, ResizingAdorner = diagram.ResizingAdorner, ConnectorsAdorner = diagram.ConnectorsAdorner, Cursors = diagram.Cursors, Utils = diagram.Utils, Observable = kendo.Observable, ToBackUnit = diagram.ToBackUnit, ToFrontUnit = diagram.ToFrontUnit, PolylineRouter = diagram.PolylineRouter, CascadingRouter = diagram.CascadingRouter, isUndefined = Utils.isUndefined, isDefined = Utils.isDefined, defined = draw.util.defined, isArray = $.isArray, isFunction = kendo.isFunction, isString = Utils.isString, isPlainObject = $.isPlainObject, math = Math;\n var SASS_THEMES = [\n 'sass',\n 'default-v2',\n 'bootstrap-v4'\n ];\n var NS = '.kendoDiagram', CASCADING = 'cascading', ITEMBOUNDSCHANGE = 'itemBoundsChange', CHANGE = 'change', CLICK = 'click', DRAG = 'drag', DRAG_END = 'dragEnd', DRAG_START = 'dragStart', MOUSE_ENTER = 'mouseEnter', MOUSE_LEAVE = 'mouseLeave', ERROR = 'error', AUTO = 'Auto', TOP = 'Top', RIGHT = 'Right', LEFT = 'Left', BOTTOM = 'Bottom', MAXINT = 9007199254740992, SELECT = 'select', ITEMROTATE = 'itemRotate', PAN = 'pan', ZOOM_START = 'zoomStart', ZOOM_END = 'zoomEnd', NONE = 'none', DEFAULT_CANVAS_WIDTH = 600, DEFAULT_CANVAS_HEIGHT = 600, DEFAULT_SHAPE_TYPE = 'rectangle', DEFAULT_SHAPE_WIDTH = 100, DEFAULT_SHAPE_HEIGHT = 100, DEFAULT_SHAPE_MINWIDTH = 20, DEFAULT_SHAPE_MINHEIGHT = 20, DEFAULT_SHAPE_POSITION = 0, DEFAULT_CONNECTION_BACKGROUND = 'Yellow', MAX_VALUE = Number.MAX_VALUE, MIN_VALUE = -Number.MAX_VALUE, ABSOLUTE = 'absolute', TRANSFORMED = 'transformed', ROTATED = 'rotated', TRANSPARENT = 'transparent', WIDTH = 'width', HEIGHT = 'height', X = 'x', Y = 'y', MOUSEWHEEL_NS = 'DOMMouseScroll' + NS + ' mousewheel' + NS, MOBILE_ZOOM_RATE = 0.05, MOBILE_PAN_DISTANCE = 5, BUTTON_TEMPLATE = '#=text#', CONNECTION_CONTENT_OFFSET = 5;\n diagram.DefaultConnectors = [\n { name: TOP },\n { name: BOTTOM },\n { name: LEFT },\n { name: RIGHT },\n {\n name: AUTO,\n position: function (shape) {\n return shape.getPosition('center');\n }\n }\n ];\n var defaultButtons = {\n cancel: {\n text: 'Cancel',\n imageClass: 'k-i-cancel',\n className: 'k-diagram-cancel',\n iconClass: 'k-icon'\n },\n update: {\n text: 'Update',\n imageClass: 'k-i-checkmark',\n className: 'k-diagram-update',\n iconClass: 'k-icon'\n }\n };\n diagram.shapeDefaults = function (extra) {\n var defaults = {\n type: DEFAULT_SHAPE_TYPE,\n path: '',\n autoSize: true,\n visual: null,\n x: DEFAULT_SHAPE_POSITION,\n y: DEFAULT_SHAPE_POSITION,\n minWidth: DEFAULT_SHAPE_MINWIDTH,\n minHeight: DEFAULT_SHAPE_MINHEIGHT,\n width: DEFAULT_SHAPE_WIDTH,\n height: DEFAULT_SHAPE_HEIGHT,\n hover: {},\n editable: {\n connect: true,\n tools: []\n },\n connectors: diagram.DefaultConnectors,\n rotation: { angle: 0 }\n };\n Utils.simpleExtend(defaults, extra);\n return defaults;\n };\n function mwDelta(e) {\n var origEvent = e.originalEvent, delta = 0;\n if (origEvent.wheelDelta) {\n delta = -origEvent.wheelDelta / 40;\n delta = delta > 0 ? math.ceil(delta) : math.floor(delta);\n } else if (origEvent.detail) {\n delta = origEvent.detail;\n }\n return delta;\n }\n function isAutoConnector(connector) {\n return connector.options.name.toLowerCase() === AUTO.toLowerCase();\n }\n function closestConnector(point, connectors) {\n var minimumDistance = MAXINT, resCtr, connector;\n for (var i = 0; i < connectors.length; i++) {\n connector = connectors[i];\n if (!isAutoConnector(connector)) {\n var dist = point.distanceTo(connector.position());\n if (dist < minimumDistance) {\n minimumDistance = dist;\n resCtr = connector;\n }\n }\n }\n return resCtr;\n }\n function indicesOfItems(group, visuals) {\n var i, indices = [], visual;\n var children = group.drawingContainer().children;\n var length = children.length;\n for (i = 0; i < visuals.length; i++) {\n visual = visuals[i];\n for (var j = 0; j < length; j++) {\n if (children[j] == visual.drawingContainer()) {\n indices.push(j);\n break;\n }\n }\n }\n return indices;\n }\n var DiagramElement = Observable.extend({\n init: function (options) {\n var that = this;\n that.dataItem = (options || {}).dataItem;\n Observable.fn.init.call(that);\n that.options = deepExtend({ id: diagram.randomId() }, that.options, options);\n that.isSelected = false;\n that.visual = new Group({\n id: that.options.id,\n autoSize: that.options.autoSize\n });\n that.id = that.options.id;\n that._template();\n },\n options: {\n hover: {},\n cursor: Cursors.grip,\n content: { align: 'center middle' },\n selectable: true,\n serializable: true,\n enable: true\n },\n _getCursor: function (point) {\n if (this.adorner) {\n return this.adorner._getCursor(point);\n }\n return this.options.cursor;\n },\n visible: function (value) {\n if (isUndefined(value)) {\n return this.visual.visible();\n } else {\n this.visual.visible(value);\n }\n },\n bounds: function () {\n },\n refresh: function () {\n this.visual.redraw();\n },\n position: function (point) {\n this.options.x = point.x;\n this.options.y = point.y;\n this.visual.position(point);\n },\n toString: function () {\n return this.options.id;\n },\n serialize: function () {\n var json = deepExtend({}, { options: this.options });\n if (this.dataItem) {\n json.dataItem = this.dataItem.toString();\n }\n return json;\n },\n _content: function (content) {\n if (content !== undefined) {\n var options = this.options;\n if (diagram.Utils.isString(content)) {\n options.content.text = content;\n } else {\n deepExtend(options.content, content);\n }\n var contentOptions = options.content;\n var contentVisual = this._contentVisual;\n if (!contentVisual) {\n this._createContentVisual(contentOptions);\n } else {\n this._updateContentVisual(contentOptions);\n }\n }\n return this.options.content.text;\n },\n _createContentVisual: function (options) {\n if (options.text) {\n this._contentVisual = new TextBlock(options);\n this._contentVisual._includeInBBox = false;\n this.visual.append(this._contentVisual);\n }\n },\n _updateContentVisual: function (options) {\n this._contentVisual.redraw(options);\n },\n _hitTest: function (point) {\n var bounds = this.bounds();\n return this.visible() && bounds.contains(point) && this.options.enable;\n },\n _template: function () {\n var that = this;\n if (that.options.content.template) {\n var data = that.dataItem || {}, elementTemplate = kendo.template(that.options.content.template, { paramName: 'dataItem' });\n that.options.content.text = elementTemplate(data);\n }\n },\n _canSelect: function () {\n return this.options.selectable !== false;\n },\n toJSON: function () {\n return { id: this.options.id };\n }\n });\n var Connector = Class.extend({\n init: function (shape, options) {\n this.options = deepExtend({}, this.options, options);\n this.connections = [];\n this.shape = shape;\n },\n options: {\n width: 7,\n height: 7,\n fill: { color: DEFAULT_CONNECTION_BACKGROUND },\n hover: {}\n },\n position: function () {\n if (this.options.position) {\n return this.options.position(this.shape);\n } else {\n return this.shape.getPosition(this.options.name);\n }\n },\n toJSON: function () {\n return {\n shapeId: this.shape.toString(),\n connector: this.options.name\n };\n }\n });\n Connector.parse = function (diagram, str) {\n var tempStr = str.split(':'), id = tempStr[0], name = tempStr[1] || AUTO;\n for (var i = 0; i < diagram.shapes.length; i++) {\n var shape = diagram.shapes[i];\n if (shape.options.id == id) {\n return shape.getConnector(name.trim());\n }\n }\n };\n var Shape = DiagramElement.extend({\n init: function (options, diagram) {\n var that = this;\n DiagramElement.fn.init.call(that, options);\n this.diagram = diagram;\n this.updateOptionsFromModel();\n options = that.options;\n that.connectors = [];\n that.type = options.type;\n that.createShapeVisual();\n that.updateBounds();\n that.content(that.content());\n that._createConnectors();\n },\n options: diagram.shapeDefaults(),\n _setOptionsFromModel: function (model) {\n var modelOptions = filterShapeDataItem(model || this.dataItem);\n this.options = deepExtend({}, this.options, modelOptions);\n this.redrawVisual();\n },\n updateOptionsFromModel: function (model, field) {\n if (this.diagram && this.diagram._isEditable) {\n var modelOptions = filterShapeDataItem(model || this.dataItem);\n if (model && field) {\n if (!dataviz.inArray(field, [\n 'x',\n 'y',\n 'width',\n 'height'\n ])) {\n if (this.options.visual) {\n this._redrawVisual();\n } else if (modelOptions.type) {\n this.options = deepExtend({}, this.options, modelOptions);\n this._redrawVisual();\n }\n if (this.options.content) {\n this._template();\n this.content(this.options.content);\n }\n } else {\n var bounds = this.bounds();\n bounds[field] = model[field];\n this.bounds(bounds);\n }\n } else {\n this.options = deepExtend({}, this.options, modelOptions);\n }\n }\n },\n _redrawVisual: function () {\n this.visual.clear();\n this._contentVisual = null;\n this.options.dataItem = this.dataItem;\n this.createShapeVisual();\n this.updateBounds();\n },\n redrawVisual: function () {\n this._redrawVisual();\n if (this.options.content) {\n this._template();\n this.content(this.options.content);\n }\n },\n updateModel: function (syncChanges) {\n var diagram = this.diagram;\n if (diagram && diagram._isEditable) {\n var bounds = this._bounds;\n var model = this.dataItem;\n if (model) {\n diagram._suspendModelRefresh();\n if (defined(model.x) && bounds.x !== model.x) {\n model.set('x', bounds.x);\n }\n if (defined(model.y) && bounds.y !== model.y) {\n model.set('y', bounds.y);\n }\n if (defined(model.width) && bounds.width !== model.width) {\n model.set('width', bounds.width);\n }\n if (defined(model.height) && bounds.height !== model.height) {\n model.set('height', bounds.height);\n }\n this.dataItem = model;\n diagram._resumeModelRefresh();\n if (syncChanges) {\n diagram._syncShapeChanges();\n }\n }\n }\n },\n updateBounds: function () {\n var bounds = this.visual._measure(true);\n var options = this.options;\n this.bounds(new Rect(options.x, options.y, bounds.width, bounds.height));\n this._rotate();\n this._alignContent();\n },\n content: function (content) {\n var result = this._content(content);\n this._alignContent();\n return result;\n },\n _alignContent: function () {\n var contentOptions = this.options.content || {};\n var contentVisual = this._contentVisual;\n if (contentVisual && contentOptions.align) {\n var containerRect = this.visual._measure();\n var aligner = new diagram.RectAlign(containerRect);\n var contentBounds = contentVisual.drawingElement.bbox(null);\n var contentRect = new Rect(0, 0, contentBounds.width(), contentBounds.height());\n var alignedBounds = aligner.align(contentRect, contentOptions.align);\n contentVisual.position(alignedBounds.topLeft());\n }\n },\n _createConnectors: function () {\n var options = this.options, length = options.connectors.length, connectorDefaults = options.connectorDefaults, connector, i;\n for (i = 0; i < length; i++) {\n connector = new Connector(this, deepExtend({}, connectorDefaults, options.connectors[i]));\n this.connectors.push(connector);\n }\n },\n bounds: function (value) {\n var bounds;\n if (value) {\n if (isString(value)) {\n switch (value) {\n case TRANSFORMED:\n bounds = this._transformedBounds();\n break;\n case ABSOLUTE:\n bounds = this._transformedBounds();\n var pan = this.diagram._pan;\n bounds.x += pan.x;\n bounds.y += pan.y;\n break;\n case ROTATED:\n bounds = this._rotatedBounds();\n break;\n default:\n bounds = this._bounds;\n }\n } else {\n this._setBounds(value);\n this._triggerBoundsChange();\n if (!(this.diagram && this.diagram._layouting)) {\n this.refreshConnections();\n }\n }\n } else {\n bounds = this._bounds;\n }\n return bounds;\n },\n _setBounds: function (rect) {\n var options = this.options;\n var topLeft = rect.topLeft();\n var x = options.x = topLeft.x;\n var y = options.y = topLeft.y;\n var width = options.width = math.max(rect.width, options.minWidth);\n var height = options.height = math.max(rect.height, options.minHeight);\n this._bounds = new Rect(x, y, width, height);\n this.visual.redraw({\n x: x,\n y: y,\n width: width,\n height: height\n });\n },\n position: function (point) {\n if (point) {\n this.bounds(new Rect(point.x, point.y, this._bounds.width, this._bounds.height));\n } else {\n return this._bounds.topLeft();\n }\n },\n clone: function () {\n var json = this.serialize();\n json.options.id = diagram.randomId();\n if (this.diagram && this.diagram._isEditable && defined(this.dataItem)) {\n json.options.dataItem = cloneDataItem(this.dataItem);\n }\n return new Shape(json.options);\n },\n select: function (value) {\n var diagram = this.diagram, selected, deselected;\n if (isUndefined(value)) {\n value = true;\n }\n if (this._canSelect()) {\n if (this.isSelected != value) {\n selected = [];\n deselected = [];\n this.isSelected = value;\n if (this.isSelected) {\n diagram._selectedItems.push(this);\n selected.push(this);\n } else {\n Utils.remove(diagram._selectedItems, this);\n deselected.push(this);\n }\n if (!diagram._internalSelection) {\n diagram._selectionChanged(selected, deselected);\n }\n return true;\n }\n }\n },\n rotate: function (angle, center, undoable) {\n var rotate = this.visual.rotate();\n if (angle !== undefined) {\n if (undoable !== false && this.diagram && this.diagram.undoRedoService && angle !== rotate.angle) {\n this.diagram.undoRedoService.add(new diagram.RotateUnit(this.diagram._resizingAdorner, [this], [rotate.angle]), false);\n }\n var b = this.bounds(), sc = new Point(b.width / 2, b.height / 2), deltaAngle, newPosition;\n if (center) {\n deltaAngle = angle - rotate.angle;\n newPosition = b.center().rotate(center, 360 - deltaAngle).minus(sc);\n this._rotationOffset = this._rotationOffset.plus(newPosition.minus(b.topLeft()));\n this.position(newPosition);\n }\n this.visual.rotate(angle, sc);\n this.options.rotation.angle = angle;\n if (this.diagram && this.diagram._connectorsAdorner) {\n this.diagram._connectorsAdorner.refresh();\n }\n this.refreshConnections();\n if (this.diagram) {\n this.diagram.trigger(ITEMROTATE, { item: this });\n }\n }\n return rotate;\n },\n connections: function (type) {\n var result = [], i, j, con, cons, ctr;\n for (i = 0; i < this.connectors.length; i++) {\n ctr = this.connectors[i];\n cons = ctr.connections;\n for (j = 0, cons; j < cons.length; j++) {\n con = cons[j];\n if (type == 'out') {\n var source = con.source();\n if (source.shape && source.shape == this) {\n result.push(con);\n }\n } else if (type == 'in') {\n var target = con.target();\n if (target.shape && target.shape == this) {\n result.push(con);\n }\n } else {\n result.push(con);\n }\n }\n }\n return result;\n },\n refreshConnections: function () {\n $.each(this.connections(), function () {\n this.refresh();\n });\n },\n getConnector: function (nameOrPoint) {\n var i, ctr;\n if (isString(nameOrPoint)) {\n nameOrPoint = nameOrPoint.toLocaleLowerCase();\n for (i = 0; i < this.connectors.length; i++) {\n ctr = this.connectors[i];\n if (ctr.options.name.toLocaleLowerCase() == nameOrPoint) {\n return ctr;\n }\n }\n } else if (nameOrPoint instanceof Point) {\n return closestConnector(nameOrPoint, this.connectors);\n } else {\n return this.connectors.length ? this.connectors[0] : null;\n }\n },\n getPosition: function (side) {\n var b = this.bounds(), fnName = side.charAt(0).toLowerCase() + side.slice(1);\n if (isFunction(b[fnName])) {\n return this._transformPoint(b[fnName]());\n }\n return b.center();\n },\n redraw: function (options) {\n if (options) {\n var shapeOptions = this.options;\n var boundsChange;\n this.shapeVisual.redraw(this._visualOptions(options));\n if (this._diffNumericOptions(options, [\n WIDTH,\n HEIGHT,\n X,\n Y\n ])) {\n this.bounds(new Rect(shapeOptions.x, shapeOptions.y, shapeOptions.width, shapeOptions.height));\n boundsChange = true;\n }\n if (options.connectors) {\n shapeOptions.connectors = options.connectors;\n this._updateConnectors();\n }\n shapeOptions = deepExtend(shapeOptions, options);\n if (options.rotation || boundsChange) {\n this._rotate();\n }\n if (shapeOptions.content) {\n this.content(shapeOptions.content);\n }\n }\n },\n _updateConnectors: function () {\n var connections = this.connections();\n this.connectors = [];\n this._createConnectors();\n var connection;\n var source;\n var target;\n for (var idx = 0; idx < connections.length; idx++) {\n connection = connections[idx];\n source = connection.source();\n target = connection.target();\n if (source.shape && source.shape === this) {\n connection.source(this.getConnector(source.options.name) || null);\n } else if (target.shape && target.shape === this) {\n connection.target(this.getConnector(target.options.name) || null);\n }\n connection.updateModel();\n }\n },\n _diffNumericOptions: diagram.diffNumericOptions,\n _visualOptions: function (options) {\n return {\n data: options.path,\n source: options.source,\n hover: options.hover,\n fill: options.fill,\n stroke: options.stroke\n };\n },\n _triggerBoundsChange: function () {\n if (this.diagram) {\n this.diagram.trigger(ITEMBOUNDSCHANGE, {\n item: this,\n bounds: this._bounds.clone()\n });\n }\n },\n _transformPoint: function (point) {\n var rotate = this.rotate(), bounds = this.bounds(), tl = bounds.topLeft();\n if (rotate.angle) {\n point.rotate(rotate.center().plus(tl), 360 - rotate.angle);\n }\n return point;\n },\n _transformedBounds: function () {\n var bounds = this.bounds(), tl = bounds.topLeft(), br = bounds.bottomRight();\n return Rect.fromPoints(this.diagram.modelToView(tl), this.diagram.modelToView(br));\n },\n _rotatedBounds: function () {\n var bounds = this.bounds().rotatedBounds(this.rotate().angle), tl = bounds.topLeft(), br = bounds.bottomRight();\n return Rect.fromPoints(tl, br);\n },\n _rotate: function () {\n var rotation = this.options.rotation;\n if (rotation && rotation.angle) {\n this.rotate(rotation.angle);\n }\n this._rotationOffset = new Point();\n },\n _hover: function (value) {\n var options = this.options, hover = options.hover, stroke = options.stroke, fill = options.fill;\n if (value && isDefined(hover.stroke)) {\n stroke = deepExtend({}, stroke, hover.stroke);\n }\n if (value && isDefined(hover.fill)) {\n fill = hover.fill;\n }\n this.shapeVisual.redraw({\n stroke: stroke,\n fill: fill\n });\n if (options.editable && options.editable.connect) {\n this.diagram._showConnectors(this, value);\n }\n },\n _hitTest: function (value) {\n if (this.visible()) {\n var bounds = this.bounds(), rotatedPoint, angle = this.rotate().angle;\n if (value.isEmpty && !value.isEmpty()) {\n return Intersect.rects(value, bounds, angle ? angle : 0);\n } else {\n rotatedPoint = value.clone().rotate(bounds.center(), angle);\n if (bounds.contains(rotatedPoint)) {\n return this;\n }\n }\n }\n },\n toJSON: function () {\n return { shapeId: this.options.id };\n },\n createShapeVisual: function () {\n var options = this.options;\n var visualOptions = this._visualOptions(options);\n var visualTemplate = options.visual;\n var type = (options.type + '').toLocaleLowerCase();\n var shapeVisual;\n visualOptions.width = options.width;\n visualOptions.height = options.height;\n if (isFunction(visualTemplate)) {\n shapeVisual = visualTemplate.call(this, options);\n } else if (visualOptions.data) {\n shapeVisual = new Path(visualOptions);\n translateToOrigin(shapeVisual);\n } else if (type == 'rectangle') {\n shapeVisual = new Rectangle(visualOptions);\n } else if (type == 'circle') {\n shapeVisual = new Circle(visualOptions);\n } else if (type == 'text') {\n shapeVisual = new TextBlock(visualOptions);\n } else if (type == 'image') {\n shapeVisual = new Image(visualOptions);\n } else {\n shapeVisual = new Path(visualOptions);\n }\n this.shapeVisual = shapeVisual;\n this.visual.append(this.shapeVisual);\n }\n });\n var Connection = DiagramElement.extend({\n init: function (from, to, options) {\n var that = this;\n DiagramElement.fn.init.call(that, options);\n this.updateOptionsFromModel();\n this._initRouter();\n that.path = new diagram.Polyline(that.options);\n that.path.fill(TRANSPARENT);\n that.visual.append(that.path);\n that._sourcePoint = that._targetPoint = new Point();\n that._setSource(from);\n that._setTarget(to);\n that.content(that.options.content);\n that.definers = [];\n if (defined(options) && options.points) {\n that.points(options.points);\n }\n },\n options: {\n hover: { stroke: {} },\n startCap: NONE,\n endCap: NONE,\n points: [],\n selectable: true,\n fromConnector: AUTO,\n toConnector: AUTO\n },\n _setOptionsFromModel: function (model) {\n this.updateOptionsFromModel(model || this.dataItem);\n },\n updateOptionsFromModel: function (model) {\n if (this.diagram && this.diagram._isEditable) {\n var dataMap = this.diagram._dataMap;\n var options = filterConnectionDataItem(model || this.dataItem);\n if (model) {\n if (defined(options.from)) {\n var from = dataMap[options.from];\n if (from && defined(options.fromConnector)) {\n from = from.getConnector(options.fromConnector);\n }\n this.source(from);\n } else if (defined(options.fromX) && defined(options.fromY)) {\n this.source(new Point(options.fromX, options.fromY));\n }\n if (defined(options.to)) {\n var to = dataMap[options.to];\n if (to && defined(options.toConnector)) {\n to = to.getConnector(options.toConnector);\n }\n this.target(to);\n } else if (defined(options.toX) && defined(options.toY)) {\n this.target(new Point(options.toX, options.toY));\n }\n if (defined(options.type) && this.type() !== options.type) {\n this.points([]);\n this.type(options.type);\n }\n this.dataItem = model;\n this._template();\n this.redraw(this.options);\n } else {\n this.options = deepExtend({}, options, this.options);\n }\n }\n },\n updateModel: function (syncChanges) {\n if (this.diagram && this.diagram._isEditable) {\n if (this.diagram.connectionsDataSource) {\n var model = this.diagram.connectionsDataSource.getByUid(this.dataItem.uid);\n if (model) {\n this.diagram._suspendModelRefresh();\n if (defined(this.options.fromX) && this.options.fromX !== null) {\n clearField('from', model);\n clearField('fromConnector', model);\n model.set('fromX', this.options.fromX);\n model.set('fromY', this.options.fromY);\n } else {\n model.set('from', this.options.from);\n if (defined(model.fromConnector)) {\n model.set('fromConnector', this.sourceConnector ? this.sourceConnector.options.name : null);\n }\n clearField('fromX', model);\n clearField('fromY', model);\n }\n if (defined(this.options.toX) && this.options.toX !== null) {\n clearField('to', model);\n clearField('toConnector', model);\n model.set('toX', this.options.toX);\n model.set('toY', this.options.toY);\n } else {\n model.set('to', this.options.to);\n if (defined(model.toConnector)) {\n model.set('toConnector', this.targetConnector ? this.targetConnector.options.name : null);\n }\n clearField('toX', model);\n clearField('toY', model);\n }\n if (defined(this.options.type) && defined(model.type)) {\n model.set('type', this.options.type);\n }\n this.dataItem = model;\n this.diagram._resumeModelRefresh();\n if (syncChanges) {\n this.diagram._syncConnectionChanges();\n }\n }\n }\n }\n },\n sourcePoint: function () {\n return this._resolvedSourceConnector ? this._resolvedSourceConnector.position() : this._sourcePoint;\n },\n _setSource: function (source) {\n var shapeSource = source instanceof Shape;\n var defaultConnector = this.options.fromConnector || AUTO;\n var dataItem;\n if (shapeSource && !source.getConnector(defaultConnector)) {\n return;\n }\n if (source !== undefined) {\n this.from = source;\n }\n this._removeFromSourceConnector();\n if (source === null) {\n if (this.sourceConnector) {\n this._sourcePoint = (this._resolvedSourceConnector || this.sourceConnector).position();\n this._clearSourceConnector();\n this._setFromOptions(null, this._sourcePoint);\n }\n } else if (source instanceof Connector) {\n dataItem = source.shape.dataItem;\n if (dataItem) {\n this._setFromOptions(dataItem.id);\n }\n this.sourceConnector = source;\n this.sourceConnector.connections.push(this);\n } else if (source instanceof Point) {\n this._setFromOptions(null, source);\n this._sourcePoint = source;\n if (this.sourceConnector) {\n this._clearSourceConnector();\n }\n } else if (shapeSource) {\n dataItem = source.dataItem;\n if (dataItem) {\n this._setFromOptions(dataItem.id);\n }\n this.sourceConnector = source.getConnector(defaultConnector);\n this.sourceConnector.connections.push(this);\n }\n },\n source: function (source, undoable) {\n if (isDefined(source)) {\n if (undoable && this.diagram) {\n this.diagram.undoRedoService.addCompositeItem(new diagram.ConnectionEditUnit(this, source));\n }\n this._setSource(source);\n this.refresh();\n }\n return this.sourceConnector ? this.sourceConnector : this._sourcePoint;\n },\n _setFromOptions: function (from, fromPoint) {\n this.options.from = from;\n if (fromPoint) {\n this.options.fromX = fromPoint.x;\n this.options.fromY = fromPoint.y;\n } else {\n this.options.fromX = null;\n this.options.fromY = null;\n }\n },\n sourceDefiner: function (value) {\n if (value) {\n if (value instanceof diagram.PathDefiner) {\n value.left = null;\n this._sourceDefiner = value;\n this.source(value.point);\n } else {\n throw 'The sourceDefiner needs to be a PathDefiner.';\n }\n } else {\n if (!this._sourceDefiner) {\n this._sourceDefiner = new diagram.PathDefiner(this.sourcePoint(), null, null);\n }\n return this._sourceDefiner;\n }\n },\n targetPoint: function () {\n return this._resolvedTargetConnector ? this._resolvedTargetConnector.position() : this._targetPoint;\n },\n _setTarget: function (target) {\n var shapeTarget = target instanceof Shape;\n var defaultConnector = this.options.toConnector || AUTO;\n var dataItem;\n if (shapeTarget && !target.getConnector(defaultConnector)) {\n return;\n }\n if (target !== undefined) {\n this.to = target;\n }\n this._removeFromTargetConnector();\n if (target === null) {\n if (this.targetConnector) {\n this._targetPoint = (this._resolvedTargetConnector || this.targetConnector).position();\n this._clearTargetConnector();\n this._setToOptions(null, this._targetPoint);\n }\n } else if (target instanceof Connector) {\n dataItem = target.shape.dataItem;\n if (dataItem) {\n this._setToOptions(dataItem.id);\n }\n this.targetConnector = target;\n this.targetConnector.connections.push(this);\n } else if (target instanceof Point) {\n this._setToOptions(null, target);\n this._targetPoint = target;\n if (this.targetConnector) {\n this._clearTargetConnector();\n }\n } else if (shapeTarget) {\n dataItem = target.dataItem;\n if (dataItem) {\n this._setToOptions(dataItem.id);\n }\n this.targetConnector = target.getConnector(defaultConnector);\n this.targetConnector.connections.push(this);\n }\n },\n target: function (target, undoable) {\n if (isDefined(target)) {\n if (undoable && this.diagram) {\n this.diagram.undoRedoService.addCompositeItem(new diagram.ConnectionEditUnit(this, undefined, target));\n }\n this._setTarget(target);\n this.refresh();\n }\n return this.targetConnector ? this.targetConnector : this._targetPoint;\n },\n _setToOptions: function (to, toPoint) {\n this.options.to = to;\n if (toPoint) {\n this.options.toX = toPoint.x;\n this.options.toY = toPoint.y;\n } else {\n this.options.toX = null;\n this.options.toY = null;\n }\n },\n targetDefiner: function (value) {\n if (value) {\n if (value instanceof diagram.PathDefiner) {\n value.right = null;\n this._targetDefiner = value;\n this.target(value.point);\n } else {\n throw 'The sourceDefiner needs to be a PathDefiner.';\n }\n } else {\n if (!this._targetDefiner) {\n this._targetDefiner = new diagram.PathDefiner(this.targetPoint(), null, null);\n }\n return this._targetDefiner;\n }\n },\n _updateConnectors: function () {\n this._updateConnector(this.source(), 'source');\n this._updateConnector(this.target(), 'target');\n },\n _updateConnector: function (instance, name) {\n var that = this;\n var diagram = that.diagram;\n if (instance instanceof Connector && !diagram.getShapeById(instance.shape.id)) {\n var dataItem = instance.shape.dataItem;\n var connectorName = instance.options.name;\n var setNewTarget = function () {\n var shape = diagram._dataMap[dataItem.id];\n instance = shape.getConnector(connectorName);\n that[name](instance, false);\n that.updateModel();\n };\n if (diagram._dataMap[dataItem.id]) {\n setNewTarget();\n } else {\n var inactiveItem = diagram._inactiveShapeItems.getByUid(dataItem.uid);\n if (inactiveItem) {\n diagram._deferredConnectionUpdates.push(inactiveItem.onActivate(setNewTarget));\n }\n }\n } else {\n that[name](instance, false);\n }\n },\n content: function (content) {\n var result = this._content(content);\n if (defined(content)) {\n this._alignContent();\n }\n return result;\n },\n _createContentVisual: function (options) {\n var visual;\n if (isFunction(options.visual)) {\n visual = options.visual.call(this, options);\n } else if (options.text) {\n visual = new TextBlock(options);\n }\n if (visual) {\n this._contentVisual = visual;\n visual._includeInBBox = false;\n this.visual.append(visual);\n }\n return visual;\n },\n _updateContentVisual: function (options) {\n if (isFunction(options.visual)) {\n this.visual.remove(this._contentVisual);\n this._createContentVisual(options);\n } else {\n this._contentVisual.redraw(options);\n }\n },\n _alignContent: function () {\n if (this._contentVisual) {\n var offset = CONNECTION_CONTENT_OFFSET;\n var points = this.allPoints();\n var endIdx = math.floor(points.length / 2);\n var startIdx = endIdx - 1;\n while (startIdx > 0 && points[startIdx].equals(points[endIdx])) {\n startIdx--;\n endIdx++;\n }\n var endPoint = points[endIdx];\n var startPoint = points[startIdx];\n var boundingBox = this._contentVisual._measure();\n var width = boundingBox.width;\n var height = boundingBox.height;\n var alignToPath = points.length % 2 === 0;\n var distance = startPoint.distanceTo(endPoint);\n if (alignToPath && points.length > 2 && distance > 0 && (startPoint.y === endPoint.y && distance < width || startPoint.x === endPoint.x && distance < height)) {\n alignToPath = false;\n offset = 0;\n }\n var point;\n if (alignToPath) {\n var angle = draw.util.deg(math.atan2(endPoint.y - startPoint.y, endPoint.x - startPoint.x));\n point = new Point((endPoint.x - startPoint.x) / 2 + startPoint.x, (endPoint.y - startPoint.y) / 2 + startPoint.y);\n if (math.abs(angle) === 90) {\n point.x += offset;\n point.y -= height / 2;\n } else if (angle % 180 === 0) {\n point.x -= width / 2;\n point.y -= height + offset;\n } else if (angle < -90 || 0 < angle && angle < 90) {\n point.y -= height;\n } else if (angle < 0 || angle > 90) {\n point.x -= width;\n point.y -= height;\n }\n } else {\n var midIdx = math.floor(points.length / 2);\n point = points[midIdx].clone();\n startPoint = points[midIdx - 1];\n endPoint = points[midIdx + 1];\n var offsetX = startPoint.x <= point.x && endPoint.x <= point.x ? offset : -boundingBox.width - offset;\n var offsetY = startPoint.y <= point.y && endPoint.y <= point.y ? offset : -boundingBox.height - offset;\n point.x += offsetX;\n point.y += offsetY;\n }\n this._contentVisual.position(point);\n }\n },\n select: function (value) {\n var diagram = this.diagram, selected, deselected;\n if (this._canSelect()) {\n if (this.isSelected !== value) {\n this.isSelected = value;\n selected = [];\n deselected = [];\n if (this.isSelected) {\n this.adorner = new ConnectionEditAdorner(this, this.options.selection);\n diagram._adorn(this.adorner, true);\n diagram._selectedItems.push(this);\n selected.push(this);\n } else {\n if (this.adorner) {\n diagram._adorn(this.adorner, false);\n Utils.remove(diagram._selectedItems, this);\n this.adorner = undefined;\n deselected.push(this);\n }\n }\n if (this.adorner) {\n this.adorner.refresh();\n }\n if (!diagram._internalSelection) {\n diagram._selectionChanged(selected, deselected);\n }\n return true;\n }\n }\n },\n bounds: function (value) {\n if (value && !isString(value)) {\n this._bounds = value;\n } else {\n return this._bounds;\n }\n },\n type: function (value) {\n var options = this.options;\n if (value) {\n if (value !== options.type) {\n options.type = value;\n this._initRouter();\n this.refresh();\n }\n } else {\n return options.type;\n }\n },\n _initRouter: function () {\n var type = (this.options.type || '').toLowerCase();\n if (type == CASCADING) {\n this._router = new CascadingRouter(this);\n } else {\n this._router = new PolylineRouter(this);\n }\n },\n points: function (value) {\n if (value) {\n this.definers = [];\n for (var i = 0; i < value.length; i++) {\n var definition = value[i];\n if (definition instanceof diagram.Point) {\n this.definers.push(new diagram.PathDefiner(definition));\n } else if (definition.hasOwnProperty('x') && definition.hasOwnProperty('y')) {\n this.definers.push(new diagram.PathDefiner(new Point(definition.x, definition.y)));\n } else {\n throw 'A Connection point needs to be a Point or an object with x and y properties.';\n }\n }\n } else {\n var pts = [];\n if (isDefined(this.definers)) {\n for (var k = 0; k < this.definers.length; k++) {\n pts.push(this.definers[k].point);\n }\n }\n return pts;\n }\n },\n allPoints: function () {\n var pts = [this.sourcePoint()];\n if (this.definers) {\n for (var k = 0; k < this.definers.length; k++) {\n pts.push(this.definers[k].point);\n }\n }\n pts.push(this.targetPoint());\n return pts;\n },\n refresh: function () {\n this._resolveConnectors();\n this._refreshPath();\n this._alignContent();\n if (this.adorner) {\n this.adorner.refresh();\n }\n },\n _resolveConnectors: function () {\n var connection = this, sourcePoint, targetPoint, sourceConnectors, targetConnectors, source = connection.source(), target = connection.target();\n if (source instanceof Point) {\n sourcePoint = source;\n } else if (source instanceof Connector) {\n if (isAutoConnector(source)) {\n sourceConnectors = source.shape.connectors;\n } else {\n sourceConnectors = [source];\n }\n }\n if (target instanceof Point) {\n targetPoint = target;\n } else if (target instanceof Connector) {\n if (isAutoConnector(target)) {\n targetConnectors = target.shape.connectors;\n } else {\n targetConnectors = [target];\n }\n }\n if (sourcePoint) {\n if (targetConnectors) {\n connection._resolvedTargetConnector = closestConnector(sourcePoint, targetConnectors);\n }\n } else if (sourceConnectors) {\n if (targetPoint) {\n connection._resolvedSourceConnector = closestConnector(targetPoint, sourceConnectors);\n } else if (targetConnectors) {\n this._resolveAutoConnectors(sourceConnectors, targetConnectors);\n }\n }\n },\n _resolveAutoConnectors: function (sourceConnectors, targetConnectors) {\n var minNonConflict = MAXINT;\n var minDist = MAXINT;\n var minNonConflictSource, minNonConflictTarget;\n var sourcePoint, targetPoint;\n var minSource, minTarget;\n var sourceConnector, targetConnector;\n var sourceIdx, targetIdx;\n var dist;\n for (sourceIdx = 0; sourceIdx < sourceConnectors.length; sourceIdx++) {\n sourceConnector = sourceConnectors[sourceIdx];\n if (!isAutoConnector(sourceConnector)) {\n sourcePoint = sourceConnector.position();\n for (targetIdx = 0; targetIdx < targetConnectors.length; targetIdx++) {\n targetConnector = targetConnectors[targetIdx];\n if (!isAutoConnector(targetConnector)) {\n targetPoint = targetConnector.position();\n dist = math.round(sourcePoint.distanceTo(targetPoint));\n if (dist < minNonConflict && this.diagram && this._testRoutePoints(sourcePoint, targetPoint, sourceConnector, targetConnector)) {\n minNonConflict = dist;\n minNonConflictSource = sourceConnector;\n minNonConflictTarget = targetConnector;\n }\n if (dist < minDist) {\n minSource = sourceConnector;\n minTarget = targetConnector;\n minDist = dist;\n }\n }\n }\n }\n }\n if (minNonConflictSource) {\n minSource = minNonConflictSource;\n minTarget = minNonConflictTarget;\n }\n this._resolvedSourceConnector = minSource;\n this._resolvedTargetConnector = minTarget;\n },\n _testRoutePoints: function (sourcePoint, targetPoint, sourceConnector, targetConnector) {\n var router = this._router;\n var passRoute = true;\n if (router instanceof CascadingRouter) {\n var points = router.routePoints(sourcePoint, targetPoint, sourceConnector, targetConnector), start, end, rect, exclude;\n exclude = this._getRouteExclude(sourcePoint, targetPoint, sourceConnector.shape, targetConnector.shape);\n points.unshift(sourcePoint);\n points.push(targetPoint);\n for (var idx = 1; idx < points.length; idx++) {\n start = points[idx - 1];\n end = points[idx];\n rect = new Rect(math.min(start.x, end.x), math.min(start.y, end.y), math.abs(start.x - end.x), math.abs(start.y - end.y));\n if (rect.width > 0) {\n rect.x++;\n rect.width -= 2;\n }\n if (rect.height > 0) {\n rect.y++;\n rect.height -= 2;\n }\n if (!rect.isEmpty() && this.diagram._shapesQuadTree.hitTestRect(rect, exclude)) {\n passRoute = false;\n break;\n }\n }\n }\n return passRoute;\n },\n _getRouteExclude: function (sourcePoint, targetPoint, sourceShape, targetShape) {\n var exclude = [];\n if (this._isPointInsideShape(sourcePoint, sourceShape)) {\n exclude.push(sourceShape);\n }\n if (this._isPointInsideShape(targetPoint, targetShape)) {\n exclude.push(targetShape);\n }\n return exclude;\n },\n _isPointInsideShape: function (point, shape) {\n var bounds = shape.bounds(), rotatedPoint, angle = shape.rotate().angle, pointX, pointY, boundsX = bounds.x, boundsY = bounds.y;\n rotatedPoint = point.clone().rotate(bounds.center(), angle);\n pointX = rotatedPoint.x;\n pointY = rotatedPoint.y;\n return pointX > boundsX && pointX < boundsX + bounds.width && pointY > boundsY && pointY < boundsY + bounds.height;\n },\n redraw: function (options) {\n if (options) {\n this.options = deepExtend({}, this.options, options);\n var points = this.options.points;\n if (defined(points) && points.length > 0) {\n this.points(points);\n this._refreshPath();\n }\n if (options && options.content || options.text) {\n this.content(options.content);\n }\n this.path.redraw({\n fill: options.fill,\n stroke: options.stroke,\n startCap: options.startCap,\n endCap: options.endCap\n });\n }\n },\n clone: function () {\n var json = this.serialize();\n if (this.diagram && this.diagram._isEditable && defined(this.dataItem)) {\n json.options.dataItem = cloneDataItem(this.dataItem);\n }\n return new Connection(this.from, this.to, json.options);\n },\n serialize: function () {\n var from = this.from.toJSON ? this.from.toJSON : this.from.toString(), to = this.to.toJSON ? this.to.toJSON : this.to.toString();\n var json = deepExtend({}, {\n options: this.options,\n from: from,\n to: to\n });\n if (defined(this.dataItem)) {\n json.dataItem = this.dataItem.toString();\n }\n json.options.points = this.points();\n return json;\n },\n _hitTest: function (value) {\n if (this.visible()) {\n var p = new Point(value.x, value.y), from = this.sourcePoint(), to = this.targetPoint();\n if (value.isEmpty && !value.isEmpty() && value.contains(from) && value.contains(to)) {\n return this;\n }\n if (this._router.hitTest(p)) {\n return this;\n }\n }\n },\n _hover: function (value) {\n var color = (this.options.stroke || {}).color;\n if (value && isDefined(this.options.hover.stroke.color)) {\n color = this.options.hover.stroke.color;\n }\n this.path.redraw({ stroke: { color: color } });\n },\n _refreshPath: function () {\n if (!defined(this.path)) {\n return;\n }\n this._drawPath();\n this.bounds(this._router.getBounds());\n },\n _drawPath: function () {\n if (this._router) {\n this._router.route();\n }\n var source = this.sourcePoint();\n var target = this.targetPoint();\n var points = this.points();\n this.path.redraw({ points: [source].concat(points, [target]) });\n },\n _clearSourceConnector: function () {\n this.sourceConnector = undefined;\n this._resolvedSourceConnector = undefined;\n },\n _clearTargetConnector: function () {\n this.targetConnector = undefined;\n this._resolvedTargetConnector = undefined;\n },\n _removeFromSourceConnector: function () {\n if (this.sourceConnector) {\n Utils.remove(this.sourceConnector.connections, this);\n }\n },\n _removeFromTargetConnector: function () {\n if (this.targetConnector) {\n Utils.remove(this.targetConnector.connections, this);\n }\n },\n toJSON: function () {\n var connection = this;\n var from, to, point;\n if (connection.from && connection.from.toJSON) {\n from = connection.from.toJSON();\n } else {\n point = connection._sourcePoint;\n from = {\n x: point.x,\n y: point.y\n };\n }\n if (connection.to && connection.to.toJSON) {\n to = connection.to.toJSON();\n } else {\n point = connection._targetPoint;\n to = {\n x: point.x,\n y: point.y\n };\n }\n return {\n from: from,\n to: to\n };\n }\n });\n var Diagram = Widget.extend({\n init: function (element, userOptions) {\n var that = this;\n kendo.destroy(element);\n Widget.fn.init.call(that, element, userOptions);\n that._initTheme();\n that._initElements();\n that._extendLayoutOptions(that.options);\n that._initDefaults(userOptions);\n that._interactionDefaults();\n that._initCanvas();\n that.mainLayer = new Group({ id: 'main-layer' });\n that.canvas.append(that.mainLayer);\n that._shapesQuadTree = new ShapesQuadTree(that);\n that._pan = new Point();\n that._adorners = [];\n that.adornerLayer = new Group({ id: 'adorner-layer' });\n that.canvas.append(that.adornerLayer);\n that._createHandlers();\n that._initialize();\n that._resizingAdorner = new ResizingAdorner(that, { editable: that.options.editable });\n that._connectorsAdorner = new ConnectorsAdorner(that);\n that._adorn(that._resizingAdorner, true);\n that._adorn(that._connectorsAdorner, true);\n that.selector = new Selector(that);\n that._clipboard = [];\n that.pauseMouseHandlers = false;\n that._fetchFreshData();\n that._createGlobalToolBar();\n that._createOptionElements();\n that.zoom(that.options.zoom);\n that.canvas.draw();\n },\n options: {\n name: 'Diagram',\n theme: 'default',\n layout: '',\n zoomRate: 0.1,\n zoom: 1,\n zoomMin: 0,\n zoomMax: 2,\n dataSource: {},\n draggable: true,\n template: '',\n autoBind: true,\n editable: {\n rotate: {},\n resize: {},\n text: true,\n tools: [],\n drag: {\n snap: {\n size: 10,\n angle: 10\n }\n },\n remove: true\n },\n pannable: {},\n selectable: { key: 'none' },\n tooltip: {\n enabled: true,\n format: '{0}'\n },\n copy: {\n enabled: true,\n offsetX: 20,\n offsetY: 20\n },\n shapeDefaults: diagram.shapeDefaults({ undoable: true }),\n connectionDefaults: {\n editable: { tools: [] },\n type: CASCADING\n },\n shapes: [],\n connections: []\n },\n events: [\n ZOOM_END,\n ZOOM_START,\n PAN,\n SELECT,\n ITEMROTATE,\n ITEMBOUNDSCHANGE,\n CHANGE,\n CLICK,\n MOUSE_ENTER,\n MOUSE_LEAVE,\n 'toolBarClick',\n 'save',\n 'cancel',\n 'edit',\n 'remove',\n 'add',\n 'dataBound',\n DRAG_START,\n DRAG,\n DRAG_END\n ],\n items: function () {\n return $();\n },\n _createGlobalToolBar: function () {\n var editable = this.options.editable;\n if (editable) {\n var tools = editable.tools;\n if (this._isEditable && tools !== false && (!tools || tools.length === 0)) {\n tools = [\n 'createShape',\n 'undo',\n 'redo',\n 'rotateClockwise',\n 'rotateAnticlockwise'\n ];\n }\n if (tools && tools.length) {\n this.toolBar = new DiagramToolBar(this, {\n tools: tools || {},\n click: proxy(this._toolBarClick, this),\n modal: false\n });\n this.toolBar.element.css({ textAlign: 'left' });\n this.element.prepend(this.toolBar.element);\n this._resize();\n }\n }\n },\n createShape: function () {\n if (this.editor && this.editor.end() || !this.editor) {\n var dataSource = this.dataSource;\n var view = dataSource.view() || [];\n var index = view.length;\n var model = createModel(dataSource, {});\n var shape = this._createShape(model, {});\n if (!this.trigger('add', { shape: shape })) {\n dataSource.insert(index, model);\n var inactiveItem = this._inactiveShapeItems.getByUid(model.uid);\n inactiveItem.element = shape;\n this.edit(shape);\n }\n }\n },\n _createShape: function (dataItem, options) {\n options = deepExtend({}, this.options.shapeDefaults, options);\n options.dataItem = dataItem;\n var shape = new Shape(options, this);\n return shape;\n },\n createConnection: function () {\n if (this.editor && this.editor.end() || !this.editor) {\n var connectionsDataSource = this.connectionsDataSource;\n var view = connectionsDataSource.view() || [];\n var index = view.length;\n var model = createModel(connectionsDataSource, {});\n var connection = this._createConnection(model);\n if (!this.trigger('add', { connection: connection })) {\n this._connectionsDataMap[model.uid] = connection;\n connectionsDataSource.insert(index, model);\n this.addConnection(connection, false);\n this.edit(connection);\n }\n }\n },\n _createConnection: function (dataItem, source, target) {\n var options = deepExtend({}, this.options.connectionDefaults);\n options.dataItem = dataItem;\n var connection = new Connection(source || new Point(), target || new Point(), options);\n return connection;\n },\n editModel: function (dataItem, editorType) {\n this.cancelEdit();\n var editors, template;\n var editable = this.options.editable;\n if (editorType == 'shape') {\n editors = editable.shapeEditors;\n template = editable.shapeTemplate;\n } else if (editorType == 'connection') {\n var connectionSelectorHandler = proxy(connectionSelector, this);\n editors = deepExtend({}, {\n from: connectionSelectorHandler,\n to: connectionSelectorHandler\n }, editable.connectionEditors);\n template = editable.connectionTemplate;\n } else {\n return;\n }\n this.editor = new PopupEditor(this.element, {\n update: proxy(this._update, this),\n cancel: proxy(this._cancel, this),\n model: dataItem,\n type: editorType,\n target: this,\n editors: editors,\n template: template\n });\n this.trigger('edit', this._editArgs());\n },\n edit: function (item) {\n if (item.dataItem) {\n var editorType = item instanceof Shape ? 'shape' : 'connection';\n this.editModel(item.dataItem, editorType);\n }\n },\n cancelEdit: function () {\n if (this.editor) {\n this._getEditDataSource().cancelChanges(this.editor.model);\n this._destroyEditor();\n }\n },\n saveEdit: function () {\n if (this.editor && this.editor.end() && !this.trigger('save', this._editArgs())) {\n this._getEditDataSource().sync();\n }\n },\n _update: function () {\n if (this.editor && this.editor.end() && !this.trigger('save', this._editArgs())) {\n this._getEditDataSource().sync();\n this._destroyEditor();\n }\n },\n _cancel: function () {\n if (this.editor && !this.trigger('cancel', this._editArgs())) {\n var model = this.editor.model;\n this._getEditDataSource().cancelChanges(model);\n var element = this._connectionsDataMap[model.uid] || this._dataMap[model.id];\n if (element) {\n element._setOptionsFromModel(model);\n }\n this._destroyEditor();\n }\n },\n _getEditDataSource: function () {\n return this.editor.options.type === 'shape' ? this.dataSource : this.connectionsDataSource;\n },\n _editArgs: function () {\n var result = { container: this.editor.wrapper };\n result[this.editor.options.type] = this.editor.model;\n return result;\n },\n _destroyEditor: function () {\n if (this.editor) {\n this.editor.close();\n this.editor = null;\n }\n },\n _initElements: function () {\n this.wrapper = this.element.empty().css('position', 'relative').attr('tabindex', 0).addClass('k-widget k-diagram');\n this.scrollable = $('
        ').appendTo(this.element);\n },\n _initDefaults: function (userOptions) {\n var options = this.options;\n var editable = options.editable;\n var shapeDefaults = options.shapeDefaults;\n var connectionDefaults = options.connectionDefaults;\n var userShapeDefaults = (userOptions || {}).shapeDefaults;\n if (editable === false) {\n shapeDefaults.editable = false;\n connectionDefaults.editable = false;\n } else {\n copyDefaultOptions(editable, shapeDefaults.editable, [\n 'drag',\n 'remove',\n 'connect'\n ]);\n copyDefaultOptions(editable, connectionDefaults.editable, [\n 'drag',\n 'remove'\n ]);\n }\n if (userShapeDefaults && userShapeDefaults.connectors) {\n options.shapeDefaults.connectors = userShapeDefaults.connectors;\n }\n },\n _interactionDefaults: function () {\n var options = this.options;\n var selectable = options.selectable;\n var pannable = options.pannable;\n var mobile = kendo.support.mobileOS;\n if (selectable && !defined(selectable.multiple)) {\n options.selectable = deepExtend({ multiple: mobile ? false : true }, options.selectable);\n }\n if (pannable && !defined(pannable.key)) {\n options.pannable = deepExtend({ key: mobile ? 'none' : 'ctrl' }, options.pannable);\n }\n },\n _initCanvas: function () {\n var canvasContainer = $('
        ').appendTo(this.scrollable)[0];\n var viewPort = this.viewport();\n this.canvas = new Canvas(canvasContainer, {\n width: viewPort.width || DEFAULT_CANVAS_WIDTH,\n height: viewPort.height || DEFAULT_CANVAS_HEIGHT\n });\n },\n _createHandlers: function () {\n var that = this;\n var element = that.element;\n element.on(MOUSEWHEEL_NS, proxy(that._wheel, that)).on('keydown' + NS, proxy(that._keydown, that));\n that._userEvents = new kendo.UserEvents(this.scrollable, {\n multiTouch: true,\n fastTap: true,\n tap: proxy(that._tap, that),\n start: proxy(that._dragStart, that),\n move: proxy(that._drag, that),\n end: proxy(that._dragEnd, that),\n gesturestart: proxy(that._gestureStart, that),\n gesturechange: proxy(that._gestureChange, that),\n gestureend: proxy(that._gestureEnd, that),\n doubleTap: proxy(that._doubleTap, that),\n supportDoubleTap: true\n });\n that.toolService = new ToolService(that);\n this.scrollable.on('mouseover' + NS, proxy(that._mouseover, that)).on('mouseout' + NS, proxy(that._mouseout, that)).on('mousemove' + NS, proxy(that._mouseMove, that)).on('mousedown' + NS, proxy(that._mouseDown, that)).on('mouseup' + NS, proxy(that._mouseUp, that));\n this._syncHandler = proxy(that._syncChanges, that);\n that._resizeHandler = proxy(that.resize, that, false);\n kendo.onResize(that._resizeHandler);\n this.bind(ZOOM_START, proxy(that._destroyToolBar, that));\n this.bind(PAN, proxy(that._destroyToolBar, that));\n },\n _dragStart: function (e) {\n this._pauseMouseHandlers = true;\n var point = this._eventPositions(e, true);\n var event = e.event;\n if (this.toolService.start(point, this._meta(event))) {\n this._destroyToolBar();\n event.preventDefault();\n }\n },\n _drag: function (e) {\n var p = this._eventPositions(e);\n var event = e.event;\n if (this.toolService.move(p, this._meta(event))) {\n event.preventDefault();\n }\n },\n _dragEnd: function (e) {\n this._pauseMouseHandlers = false;\n var p = this._eventPositions(e);\n var event = e.event;\n if (this.toolService.end(p, this._meta(event))) {\n this._createToolBar();\n event.preventDefault();\n }\n },\n _mouseMove: function (e) {\n if (!this._pauseMouseHandlers) {\n var p = this._eventPositions(e);\n this.toolService._updateHoveredItem(p);\n this.toolService._updateCursor(p);\n }\n },\n _mouseDown: function () {\n this._pauseMouseHandlers = true;\n },\n _mouseUp: function () {\n this._pauseMouseHandlers = false;\n },\n _tap: function (e) {\n var toolService = this.toolService;\n var selectable = this.options.selectable;\n var point = this._eventPositions(e);\n var focused = this.focus();\n toolService._updateHoveredItem(point);\n if (toolService.hoveredItem) {\n var item = toolService.hoveredItem;\n this.trigger('click', {\n item: item,\n point: point\n });\n if (selectable && item.options.selectable !== false) {\n var multiple = selectable.multiple !== false;\n var ctrlPressed = kendo.support.mobileOS || this._meta(e.event).ctrlKey;\n if (item.isSelected) {\n if (ctrlPressed) {\n this._destroyToolBar();\n item.select(false);\n } else {\n this._createToolBar(focused);\n }\n } else {\n this._destroyToolBar();\n this.select(item, { addToSelection: multiple && ctrlPressed });\n this._createToolBar(focused);\n }\n }\n } else if (selectable) {\n this._destroyToolBar();\n this.deselect();\n }\n },\n _keydown: function (e) {\n if (this.toolService.keyDown(e.keyCode, this._meta(e))) {\n e.preventDefault();\n }\n },\n _wheel: function (e) {\n var delta = mwDelta(e), p = this._eventPositions(e), meta = deepExtend(this._meta(e), { delta: delta });\n if (this.toolService.wheel(p, meta)) {\n e.preventDefault();\n }\n },\n _meta: function (e) {\n return {\n ctrlKey: e.ctrlKey,\n metaKey: e.metaKey,\n altKey: e.altKey,\n shiftKey: e.shiftKey,\n type: e.type\n };\n },\n _eventPositions: function (e, start) {\n var point;\n if (e.touch) {\n var field = start ? 'startLocation' : 'location';\n point = new Point(e.x[field], e.y[field]);\n } else {\n var event = e.originalEvent;\n point = new Point(event.pageX, event.pageY);\n }\n return this.documentToModel(point);\n },\n _gestureStart: function (e) {\n this._destroyToolBar();\n this.scroller.disable();\n var initialCenter = this.documentToModel(new Point(e.center.x, e.center.y));\n var eventArgs = {\n point: initialCenter,\n zoom: this.zoom()\n };\n if (this.trigger(ZOOM_START, eventArgs)) {\n return;\n }\n this._gesture = e;\n this._initialCenter = initialCenter;\n },\n _gestureChange: function (e) {\n var previousGesture = this._gesture;\n var initialCenter = this._initialCenter;\n var center = this.documentToView(new Point(e.center.x, e.center.y));\n var scaleDelta = e.distance / previousGesture.distance;\n var zoom = this._zoom;\n var updateZoom = false;\n if (math.abs(scaleDelta - 1) >= MOBILE_ZOOM_RATE) {\n this._zoom = zoom = this._getValidZoom(zoom * scaleDelta);\n this.options.zoom = zoom;\n this._gesture = e;\n updateZoom = true;\n }\n var zoomedPoint = initialCenter.times(zoom);\n var pan = center.minus(zoomedPoint);\n if (updateZoom || this._pan.distanceTo(pan) >= MOBILE_PAN_DISTANCE) {\n this._panTransform(pan);\n this._updateAdorners();\n }\n e.preventDefault();\n },\n _doubleTap: function (e) {\n var diagram = this;\n var pointPosition = this._eventPositions(e);\n var options = diagram.options;\n var zoomRate = options.zoomRate;\n var zoom = diagram.zoom() + zoomRate;\n var meta = this._meta(e);\n var zoomOptions = {\n point: pointPosition,\n meta: meta,\n zoom: zoom\n };\n if (diagram.trigger(ZOOM_START, zoomOptions)) {\n return;\n }\n zoom = kendo.dataviz.round(Math.max(options.zoomMin, Math.min(options.zoomMax, zoom)), 2);\n zoomOptions.zoom = zoom;\n diagram.zoom(zoom, zoomOptions);\n diagram.trigger(ZOOM_END, zoomOptions);\n },\n _gestureEnd: function () {\n if (this.options.pannable !== false) {\n this.scroller.enable();\n }\n this.trigger(ZOOM_END, {\n point: this._initialCenter,\n zoom: this.zoom()\n });\n },\n _resize: function () {\n var viewport = this.viewport();\n if (this.canvas) {\n this.canvas.size(viewport);\n }\n if (this.scrollable && this.toolBar) {\n this.scrollable.height(viewport.height);\n }\n },\n _mouseover: function (e) {\n var node = e.target._kendoNode;\n if (node && node.srcElement._hover) {\n node.srcElement._hover(true, node.srcElement);\n }\n },\n _mouseout: function (e) {\n var node = e.target._kendoNode;\n if (node && node.srcElement._hover) {\n node.srcElement._hover(false, node.srcElement);\n }\n },\n _initTheme: function () {\n var that = this;\n var themeName = ((that.options || {}).theme || '').toLowerCase();\n var themes = dataviz.ui.themes || {};\n var themeOptions;\n if (SASS_THEMES.indexOf(themeName) != -1) {\n themeOptions = dataviz.autoTheme().diagram;\n } else {\n themeOptions = (themes[themeName] || {}).diagram;\n }\n that.options = deepExtend({}, themeOptions, that.options);\n if (that.options.editable === true) {\n deepExtend(that.options, { editable: (themeOptions || {}).editable });\n }\n },\n _createOptionElements: function () {\n var options = this.options;\n var shapesLength = options.shapes.length;\n if (shapesLength) {\n this._createShapes();\n }\n if (options.connections.length) {\n this._createConnections();\n }\n if (shapesLength && options.layout) {\n this.layout(options.layout);\n }\n },\n _createShapes: function () {\n var that = this, options = that.options, shapes = options.shapes, shape, i;\n for (i = 0; i < shapes.length; i++) {\n shape = shapes[i];\n that.addShape(shape);\n }\n },\n _createConnections: function () {\n var diagram = this, options = diagram.options, defaults = options.connectionDefaults, connections = options.connections, conn, source, target, i;\n for (i = 0; i < connections.length; i++) {\n conn = connections[i];\n source = diagram._findConnectionTarget(conn.from);\n target = diagram._findConnectionTarget(conn.to);\n diagram.connect(source, target, deepExtend({}, defaults, conn));\n }\n },\n _findConnectionTarget: function (options) {\n options = options || {};\n var diagram = this;\n var shapeId = isString(options) ? options : options.shapeId || options.id;\n var target;\n if (shapeId) {\n target = diagram.getShapeById(shapeId);\n if (options.connector) {\n target = target.getConnector(options.connector);\n }\n } else {\n target = new Point(options.x || 0, options.y || 0);\n }\n return target;\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n if (this._userEvents) {\n this._userEvents.destroy();\n }\n kendo.unbindResize(that._resizeHandler);\n that.clear();\n that.element.off(NS);\n that.scroller.wrapper.off(NS);\n that.canvas.destroy(true);\n that.canvas = undefined;\n that._destroyEditor();\n that.destroyScroller();\n that._destroyGlobalToolBar();\n that._destroyToolBar();\n },\n destroyScroller: function () {\n var scroller = this.scroller;\n if (!scroller) {\n return;\n }\n scroller.destroy();\n scroller.element.remove();\n this.scroller = null;\n },\n save: function () {\n var json = {\n shapes: [],\n connections: []\n };\n var i, connection, shape;\n for (i = 0; i < this.shapes.length; i++) {\n shape = this.shapes[i];\n if (shape.options.serializable) {\n json.shapes.push(shape.options);\n }\n }\n for (i = 0; i < this.connections.length; i++) {\n connection = this.connections[i];\n json.connections.push(deepExtend({}, connection.options, connection.toJSON()));\n }\n return json;\n },\n focus: function () {\n if (!this.element.is(kendo._activeElement())) {\n var element = this.element, scrollContainer = element[0], containers = [], offsets = [], documentElement = document.documentElement, i;\n do {\n scrollContainer = scrollContainer.parentNode;\n if (scrollContainer.scrollHeight > scrollContainer.clientHeight) {\n containers.push(scrollContainer);\n offsets.push(scrollContainer.scrollTop);\n }\n } while (scrollContainer != documentElement);\n element.focus();\n for (i = 0; i < containers.length; i++) {\n containers[i].scrollTop = offsets[i];\n }\n return true;\n }\n },\n load: function (options) {\n this.clear();\n this.setOptions(options);\n this._createShapes();\n this._createConnections();\n },\n setOptions: function (options) {\n deepExtend(this.options, options);\n },\n clear: function () {\n var that = this;\n that.select(false);\n that.mainLayer.clear();\n that._shapesQuadTree.clear();\n that._initialize();\n },\n connect: function (source, target, options) {\n var connection;\n if (this.connectionsDataSource && this._isEditable) {\n var dataItem = this.connectionsDataSource.add({});\n connection = this._connectionsDataMap[dataItem.uid];\n connection.source(source);\n connection.target(target);\n connection.redraw(options);\n connection.updateModel();\n } else {\n connection = new Connection(source, target, deepExtend({}, this.options.connectionDefaults, options));\n this.addConnection(connection);\n }\n return connection;\n },\n connected: function (source, target) {\n for (var i = 0; i < this.connections.length; i++) {\n var c = this.connections[i];\n if (c.from == source && c.to == target) {\n return true;\n }\n }\n return false;\n },\n addConnection: function (connection, undoable) {\n if (undoable !== false) {\n this.undoRedoService.add(new diagram.AddConnectionUnit(connection, this), false);\n }\n connection.diagram = this;\n connection._setOptionsFromModel();\n connection.refresh();\n this.mainLayer.append(connection.visual);\n this.connections.push(connection);\n this.trigger(CHANGE, {\n added: [connection],\n removed: []\n });\n return connection;\n },\n _addConnection: function (connection, undoable) {\n var connectionsDataSource = this.connectionsDataSource;\n var dataItem;\n if (connectionsDataSource && this._isEditable) {\n dataItem = createModel(connectionsDataSource, cloneDataItem(connection.dataItem));\n connection.dataItem = dataItem;\n connection.updateModel();\n if (!this.trigger('add', { connection: connection })) {\n this._connectionsDataMap[dataItem.uid] = connection;\n connectionsDataSource.add(dataItem);\n this.addConnection(connection, undoable);\n connection._updateConnectors();\n return connection;\n }\n } else if (!this.trigger('add', { connection: connection })) {\n this.addConnection(connection, undoable);\n connection._updateConnectors();\n return connection;\n }\n },\n addShape: function (item, undoable) {\n var shape, shapeDefaults = this.options.shapeDefaults;\n if (item instanceof Shape) {\n shape = item;\n } else if (!(item instanceof kendo.Class)) {\n shapeDefaults = deepExtend({}, shapeDefaults, item || {});\n shape = new Shape(shapeDefaults, this);\n } else {\n return;\n }\n if (undoable !== false) {\n this.undoRedoService.add(new diagram.AddShapeUnit(shape, this), false);\n }\n this.shapes.push(shape);\n if (shape.diagram !== this) {\n this._shapesQuadTree.insert(shape);\n shape.diagram = this;\n }\n this.mainLayer.append(shape.visual);\n this.trigger(CHANGE, {\n added: [shape],\n removed: []\n });\n return shape;\n },\n _addShape: function (shape, undoable) {\n var that = this;\n var dataSource = that.dataSource;\n var dataItem;\n if (dataSource && this._isEditable) {\n dataItem = createModel(dataSource, cloneDataItem(shape.dataItem));\n shape.dataItem = dataItem;\n shape.updateModel();\n if (!this.trigger('add', { shape: shape })) {\n this.dataSource.add(dataItem);\n var inactiveItem = this._inactiveShapeItems.getByUid(dataItem.uid);\n inactiveItem.element = shape;\n inactiveItem.undoable = undoable;\n return shape;\n }\n } else if (!this.trigger('add', { shape: shape })) {\n return this.addShape(shape, undoable);\n }\n },\n remove: function (items, undoable) {\n items = isArray(items) ? items.slice(0) : [items];\n var elements = splitDiagramElements(items);\n var shapes = elements.shapes;\n var connections = elements.connections;\n var i;\n if (!defined(undoable)) {\n undoable = true;\n }\n if (undoable) {\n this.undoRedoService.begin();\n }\n this._suspendModelRefresh();\n for (i = shapes.length - 1; i >= 0; i--) {\n this._removeItem(shapes[i], undoable, connections);\n }\n for (i = connections.length - 1; i >= 0; i--) {\n this._removeItem(connections[i], undoable);\n }\n this._resumeModelRefresh();\n if (undoable) {\n this.undoRedoService.commit(false);\n }\n this.trigger(CHANGE, {\n added: [],\n removed: items\n });\n },\n _removeShapeDataItem: function (item) {\n if (this._isEditable) {\n this.dataSource.remove(item.dataItem);\n delete this._dataMap[item.dataItem.id];\n }\n },\n _removeConnectionDataItem: function (item) {\n if (this._isEditable) {\n this.connectionsDataSource.remove(item.dataItem);\n delete this._connectionsDataMap[item.dataItem.uid];\n }\n },\n _triggerRemove: function (items) {\n var toRemove = [];\n var item, args, editable;\n for (var idx = 0; idx < items.length; idx++) {\n item = items[idx];\n editable = item.options.editable;\n if (item instanceof Shape) {\n args = { shape: item };\n } else {\n args = { connection: item };\n }\n if (editable && editable.remove !== false && !this.trigger('remove', args)) {\n toRemove.push(item);\n }\n }\n return toRemove;\n },\n undo: function () {\n this.undoRedoService.undo();\n },\n redo: function () {\n this.undoRedoService.redo();\n },\n select: function (item, options) {\n if (isDefined(item)) {\n options = deepExtend({ addToSelection: false }, options);\n var addToSelection = options.addToSelection, items = [], selected = [], i, element;\n if (!addToSelection) {\n this.deselect();\n }\n this._internalSelection = true;\n if (item instanceof Array) {\n items = item;\n } else if (item instanceof DiagramElement) {\n items = [item];\n }\n for (i = 0; i < items.length; i++) {\n element = items[i];\n if (element.select(true)) {\n selected.push(element);\n }\n }\n this._selectionChanged(selected, []);\n this._internalSelection = false;\n } else {\n return this._selectedItems;\n }\n },\n selectAll: function () {\n this.select(this.shapes.concat(this.connections));\n },\n selectArea: function (rect) {\n var i, items, item;\n this._internalSelection = true;\n var selected = [];\n if (rect instanceof Rect) {\n items = this.shapes.concat(this.connections);\n for (i = 0; i < items.length; i++) {\n item = items[i];\n if ((!rect || item._hitTest(rect)) && item.options.enable) {\n if (item.select(true)) {\n selected.push(item);\n }\n }\n }\n }\n this._selectionChanged(selected, []);\n this._internalSelection = false;\n },\n deselect: function (item) {\n this._internalSelection = true;\n var deselected = [], items = [], element, i;\n if (item instanceof Array) {\n items = item;\n } else if (item instanceof DiagramElement) {\n items.push(item);\n } else if (!isDefined(item)) {\n items = this._selectedItems.slice(0);\n }\n for (i = 0; i < items.length; i++) {\n element = items[i];\n if (element.select(false)) {\n deselected.push(element);\n }\n }\n this._selectionChanged([], deselected);\n this._internalSelection = false;\n },\n toFront: function (items, undoable) {\n if (!items) {\n items = this._selectedItems.slice();\n }\n var result = this._getDiagramItems(items), indices;\n if (!defined(undoable) || undoable) {\n indices = indicesOfItems(this.mainLayer, result.visuals);\n var unit = new ToFrontUnit(this, items, indices);\n this.undoRedoService.add(unit);\n } else {\n this.mainLayer.toFront(result.visuals);\n this._fixOrdering(result, true);\n }\n },\n toBack: function (items, undoable) {\n if (!items) {\n items = this._selectedItems.slice();\n }\n var result = this._getDiagramItems(items), indices;\n if (!defined(undoable) || undoable) {\n indices = indicesOfItems(this.mainLayer, result.visuals);\n var unit = new ToBackUnit(this, items, indices);\n this.undoRedoService.add(unit);\n } else {\n this.mainLayer.toBack(result.visuals);\n this._fixOrdering(result, false);\n }\n },\n bringIntoView: function (item, options) {\n var viewport = this.viewport();\n var aligner = new diagram.RectAlign(viewport);\n var current, rect, original, newPan;\n if (viewport.width === 0 || viewport.height === 0) {\n return;\n }\n options = deepExtend({\n animate: false,\n align: 'center middle'\n }, options);\n if (options.align == 'none') {\n options.align = 'center middle';\n }\n if (item instanceof DiagramElement) {\n rect = item.bounds(TRANSFORMED);\n } else if (isArray(item)) {\n rect = this.boundingBox(item);\n } else if (item instanceof Rect) {\n rect = item.clone();\n }\n original = rect.clone();\n rect.zoom(this._zoom);\n if (rect.width > viewport.width || rect.height > viewport.height) {\n this._zoom = this._getValidZoom(math.min(viewport.width / original.width, viewport.height / original.height));\n rect = original.clone().zoom(this._zoom);\n }\n this._zoomMainLayer();\n current = rect.clone();\n aligner.align(rect, options.align);\n newPan = rect.topLeft().minus(current.topLeft());\n this.pan(newPan.times(-1), options.animate);\n },\n alignShapes: function (direction) {\n if (isUndefined(direction)) {\n direction = 'Left';\n }\n var items = this.select(), val, item, i;\n if (items.length === 0) {\n return;\n }\n switch (direction.toLowerCase()) {\n case 'left':\n case 'top':\n val = MAX_VALUE;\n break;\n case 'right':\n case 'bottom':\n val = MIN_VALUE;\n break;\n }\n for (i = 0; i < items.length; i++) {\n item = items[i];\n if (item instanceof Shape) {\n switch (direction.toLowerCase()) {\n case 'left':\n val = math.min(val, item.options.x);\n break;\n case 'top':\n val = math.min(val, item.options.y);\n break;\n case 'right':\n val = math.max(val, item.options.x);\n break;\n case 'bottom':\n val = math.max(val, item.options.y);\n break;\n }\n }\n }\n var undoStates = [];\n var shapes = [];\n for (i = 0; i < items.length; i++) {\n item = items[i];\n if (item instanceof Shape) {\n shapes.push(item);\n undoStates.push(item.bounds());\n switch (direction.toLowerCase()) {\n case 'left':\n case 'right':\n item.position(new Point(val, item.options.y));\n break;\n case 'top':\n case 'bottom':\n item.position(new Point(item.options.x, val));\n break;\n }\n }\n }\n var unit = new diagram.TransformUnit(shapes, undoStates);\n this.undoRedoService.add(unit, false);\n },\n zoom: function (zoom, options) {\n if (zoom) {\n var staticPoint = options ? options.point : new diagram.Point(0, 0);\n zoom = this._zoom = this._getValidZoom(zoom);\n if (!isUndefined(staticPoint)) {\n staticPoint = new diagram.Point(math.round(staticPoint.x), math.round(staticPoint.y));\n var zoomedPoint = staticPoint.times(zoom);\n var viewportVector = this.modelToView(staticPoint);\n var raw = viewportVector.minus(zoomedPoint);\n this._storePan(new diagram.Point(math.round(raw.x), math.round(raw.y)));\n }\n if (options) {\n options.zoom = zoom;\n }\n this._panTransform();\n this.canvas.surface.hideTooltip();\n this._updateAdorners();\n }\n return this._zoom;\n },\n _getPan: function (pan) {\n var canvas = this.canvas;\n if (!canvas.translate) {\n pan = pan.plus(this._pan);\n }\n return pan;\n },\n pan: function (pan, animate) {\n if (pan instanceof Point) {\n var that = this;\n var scroller = that.scroller;\n pan = that._getPan(pan);\n pan = pan.times(-1);\n if (animate) {\n scroller.animatedScrollTo(pan.x, pan.y, function () {\n that._updateAdorners();\n });\n } else {\n scroller.scrollTo(pan.x, pan.y);\n that._updateAdorners();\n }\n } else {\n return this._pan.times(-1);\n }\n },\n viewport: function () {\n var element = this.element;\n var width = element.width();\n var height = element.height();\n if (this.toolBar) {\n height -= outerHeight(this.toolBar.element);\n }\n return new Rect(0, 0, width, height);\n },\n copy: function () {\n if (this.options.copy.enabled) {\n this._clipboard = [];\n this._copyOffset = 1;\n for (var i = 0; i < this._selectedItems.length; i++) {\n var item = this._selectedItems[i];\n this._clipboard.push(item);\n }\n }\n },\n cut: function () {\n if (this.options.copy.enabled) {\n this._clipboard = [];\n this._copyOffset = 0;\n for (var i = 0; i < this._selectedItems.length; i++) {\n var item = this._selectedItems[i];\n this._clipboard.push(item);\n }\n this.remove(this._clipboard, true);\n }\n },\n paste: function () {\n if (this._clipboard.length > 0) {\n var item, copied, i;\n var mapping = {};\n var elements = splitDiagramElements(this._clipboard);\n var connections = elements.connections;\n var shapes = elements.shapes;\n var offset = {\n x: this._copyOffset * this.options.copy.offsetX,\n y: this._copyOffset * this.options.copy.offsetY\n };\n this.deselect();\n for (i = 0; i < shapes.length; i++) {\n item = shapes[i];\n copied = item.clone();\n mapping[item.id] = copied;\n copied.position(new Point(item.options.x + offset.x, item.options.y + offset.y));\n copied.diagram = this;\n copied = this._addShape(copied);\n if (copied) {\n copied.select();\n }\n }\n for (i = 0; i < connections.length; i++) {\n item = connections[i];\n copied = this._addConnection(item.clone());\n if (copied) {\n this._updateCopiedConnection(copied, item, 'source', mapping, offset);\n this._updateCopiedConnection(copied, item, 'target', mapping, offset);\n copied.select(true);\n copied.updateModel();\n }\n }\n this._syncChanges();\n this._copyOffset += 1;\n }\n },\n _updateCopiedConnection: function (connection, sourceConnection, connectorName, mapping, offset) {\n var onActivate, inactiveItem, targetShape;\n var target = sourceConnection[connectorName]();\n var diagram = this;\n if (target instanceof Connector && mapping[target.shape.id]) {\n targetShape = mapping[target.shape.id];\n if (diagram.getShapeById(targetShape.id)) {\n connection[connectorName](targetShape.getConnector(target.options.name));\n } else {\n inactiveItem = diagram._inactiveShapeItems.getByUid(targetShape.dataItem.uid);\n if (inactiveItem) {\n onActivate = function (item) {\n targetShape = diagram._dataMap[item.id];\n connection[connectorName](targetShape.getConnector(target.options.name));\n connection.updateModel();\n };\n diagram._deferredConnectionUpdates.push(inactiveItem.onActivate(onActivate));\n }\n }\n } else {\n connection[connectorName](new Point(sourceConnection[connectorName + 'Point']().x + offset.x, sourceConnection[connectorName + 'Point']().y + offset.y));\n }\n },\n boundingBox: function (items, origin) {\n var rect = Rect.empty(), temp, di = isDefined(items) ? this._getDiagramItems(items) : { shapes: this.shapes };\n if (di.shapes.length > 0) {\n var item = di.shapes[0];\n rect = item.bounds(ROTATED);\n for (var i = 1; i < di.shapes.length; i++) {\n item = di.shapes[i];\n temp = item.bounds(ROTATED);\n if (origin === true) {\n temp.x -= item._rotationOffset.x;\n temp.y -= item._rotationOffset.y;\n }\n rect = rect.union(temp);\n }\n }\n return rect;\n },\n _containerOffset: function () {\n var containerOffset = this.element.offset();\n if (this.toolBar) {\n containerOffset.top += outerHeight(this.toolBar.element);\n }\n return containerOffset;\n },\n documentToView: function (point) {\n var containerOffset = this._containerOffset();\n return new Point(point.x - containerOffset.left, point.y - containerOffset.top);\n },\n viewToDocument: function (point) {\n var containerOffset = this._containerOffset();\n return new Point(point.x + containerOffset.left, point.y + containerOffset.top);\n },\n viewToModel: function (point) {\n return this._transformWithMatrix(point, this._matrixInvert);\n },\n modelToView: function (point) {\n return this._transformWithMatrix(point, this._matrix);\n },\n modelToLayer: function (point) {\n return this._transformWithMatrix(point, this._layerMatrix);\n },\n layerToModel: function (point) {\n return this._transformWithMatrix(point, this._layerMatrixInvert);\n },\n documentToModel: function (point) {\n var viewPoint = this.documentToView(point);\n if (!this.canvas.translate) {\n viewPoint.x = viewPoint.x + this.scroller.scrollLeft;\n viewPoint.y = viewPoint.y + this.scroller.scrollTop;\n }\n return this.viewToModel(viewPoint);\n },\n modelToDocument: function (point) {\n return this.viewToDocument(this.modelToView(point));\n },\n _transformWithMatrix: function (point, matrix) {\n var result = point;\n if (point instanceof Point) {\n if (matrix) {\n result = matrix.apply(point);\n }\n } else {\n var tl = this._transformWithMatrix(point.topLeft(), matrix), br = this._transformWithMatrix(point.bottomRight(), matrix);\n result = Rect.fromPoints(tl, br);\n }\n return result;\n },\n setDataSource: function (dataSource) {\n this.options.dataSource = dataSource;\n this._dataSource();\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n setConnectionsDataSource: function (dataSource) {\n this.options.connectionsDataSource = dataSource;\n this._connectionDataSource();\n if (this.options.autoBind) {\n this.connectionsDataSource.fetch();\n }\n },\n layout: function (options) {\n this._layouting = true;\n var type;\n if (isUndefined(options)) {\n options = this.options.layout;\n }\n if (isUndefined(options) || isUndefined(options.type)) {\n type = 'Tree';\n } else {\n type = options.type;\n }\n var l;\n switch (type.toLowerCase()) {\n case 'tree':\n l = new diagram.TreeLayout(this);\n break;\n case 'layered':\n l = new diagram.LayeredLayout(this);\n break;\n case 'forcedirected':\n case 'force':\n case 'spring':\n case 'springembedder':\n l = new diagram.SpringLayout(this);\n break;\n default:\n throw 'Layout algorithm \\'' + type + '\\' is not supported.';\n }\n var initialState = new diagram.LayoutState(this);\n var finalState = l.layout(options);\n if (finalState) {\n var unit = new diagram.LayoutUndoUnit(initialState, finalState, options ? options.animate : null);\n this.undoRedoService.add(unit);\n }\n this._layouting = false;\n this._redrawConnections();\n },\n getShapeById: function (id) {\n var found;\n found = Utils.first(this.shapes, function (s) {\n return s.visual.id === id;\n });\n if (found) {\n return found;\n }\n found = Utils.first(this.connections, function (c) {\n return c.visual.id === id;\n });\n return found;\n },\n getShapeByModelId: function (id) {\n var shape;\n if (this._isEditable) {\n shape = this._dataMap[id];\n } else {\n shape = Utils.first(this.shapes, function (shape) {\n return (shape.dataItem || {}).id === id;\n });\n }\n return shape;\n },\n getShapeByModelUid: function (uid) {\n var shape;\n if (this._isEditable) {\n shape = Utils.first(this.shapes, function (shape) {\n return (shape.dataItem || {}).uid === uid;\n });\n } else {\n shape = this._dataMap[uid];\n }\n return shape;\n },\n getConnectionByModelId: function (id) {\n var connection;\n if (this.connectionsDataSource) {\n connection = Utils.first(this.connections, function (connection) {\n return (connection.dataItem || {}).id === id;\n });\n }\n return connection;\n },\n getConnectionByModelUid: function (uid) {\n var connection;\n if (this.connectionsDataSource) {\n connection = this._connectionsDataMap[uid];\n }\n return connection;\n },\n _extendLayoutOptions: function (options) {\n if (options.layout) {\n options.layout = deepExtend({}, diagram.LayoutBase.fn.defaultOptions || {}, options.layout);\n }\n },\n _selectionChanged: function (selected, deselected) {\n if (selected.length || deselected.length) {\n this.trigger(SELECT, {\n selected: selected,\n deselected: deselected\n });\n }\n },\n _getValidZoom: function (zoom) {\n return math.min(math.max(zoom, this.options.zoomMin), this.options.zoomMax);\n },\n _panTransform: function (pos) {\n var diagram = this, pan = pos || diagram._pan;\n if (diagram.canvas.translate) {\n diagram.scroller.scrollTo(pan.x, pan.y);\n diagram._zoomMainLayer();\n } else {\n diagram._storePan(pan);\n diagram._transformMainLayer();\n }\n },\n _finishPan: function () {\n this.trigger(PAN, {\n total: this._pan,\n delta: Number.NaN\n });\n },\n _storePan: function (pan) {\n this._pan = pan;\n this._storeViewMatrix();\n },\n _zoomMainLayer: function () {\n var zoom = this._zoom;\n var transform = new CompositeTransform(0, 0, zoom, zoom);\n transform.render(this.mainLayer);\n this._storeLayerMatrix(transform);\n this._storeViewMatrix();\n },\n _transformMainLayer: function () {\n var pan = this._pan, zoom = this._zoom;\n var transform = new CompositeTransform(pan.x, pan.y, zoom, zoom);\n transform.render(this.mainLayer);\n this._storeLayerMatrix(transform);\n this._storeViewMatrix();\n },\n _storeLayerMatrix: function (canvasTransform) {\n this._layerMatrix = canvasTransform.toMatrix();\n this._layerMatrixInvert = canvasTransform.invert().toMatrix();\n },\n _storeViewMatrix: function () {\n var pan = this._pan, zoom = this._zoom;\n var transform = new CompositeTransform(pan.x, pan.y, zoom, zoom);\n this._matrix = transform.toMatrix();\n this._matrixInvert = transform.invert().toMatrix();\n },\n _toIndex: function (items, indices) {\n var result = this._getDiagramItems(items);\n this.mainLayer.toIndex(result.visuals, indices);\n this._fixOrdering(result, false);\n },\n _fixOrdering: function (result, toFront) {\n var shapePos = toFront ? this.shapes.length - 1 : 0, conPos = toFront ? this.connections.length - 1 : 0, i, item;\n for (i = 0; i < result.shapes.length; i++) {\n item = result.shapes[i];\n Utils.remove(this.shapes, item);\n Utils.insert(this.shapes, item, shapePos);\n }\n for (i = 0; i < result.cons.length; i++) {\n item = result.cons[i];\n Utils.remove(this.connections, item);\n Utils.insert(this.connections, item, conPos);\n }\n },\n _getDiagramItems: function (items) {\n var i, result = {}, args = items;\n result.visuals = [];\n result.shapes = [];\n result.cons = [];\n if (!items) {\n args = this._selectedItems.slice();\n } else if (!isArray(items)) {\n args = [items];\n }\n for (i = 0; i < args.length; i++) {\n var item = args[i];\n if (item instanceof Shape) {\n result.shapes.push(item);\n result.visuals.push(item.visual);\n } else if (item instanceof Connection) {\n result.cons.push(item);\n result.visuals.push(item.visual);\n }\n }\n return result;\n },\n _removeItem: function (item, undoable, removedConnections) {\n item.select(false);\n if (item instanceof Shape) {\n this._removeShapeDataItem(item);\n this._removeShape(item, undoable, removedConnections);\n } else if (item instanceof Connection) {\n this._removeConnectionDataItem(item);\n this._removeConnection(item, undoable);\n }\n this.mainLayer.remove(item.visual);\n },\n _removeShape: function (shape, undoable, removedConnections) {\n var i, connection, connector, sources = [], targets = [];\n this.toolService._removeHover();\n if (undoable) {\n this.undoRedoService.addCompositeItem(new DeleteShapeUnit(shape));\n }\n Utils.remove(this.shapes, shape);\n this._shapesQuadTree.remove(shape);\n for (i = 0; i < shape.connectors.length; i++) {\n connector = shape.connectors[i];\n for (var j = 0; j < connector.connections.length; j++) {\n connection = connector.connections[j];\n if (!removedConnections || !dataviz.inArray(connection, removedConnections)) {\n if (connection.sourceConnector == connector) {\n sources.push(connection);\n } else if (connection.targetConnector == connector) {\n targets.push(connection);\n }\n }\n }\n }\n for (i = 0; i < sources.length; i++) {\n sources[i].source(null, undoable);\n sources[i].updateModel();\n }\n for (i = 0; i < targets.length; i++) {\n targets[i].target(null, undoable);\n targets[i].updateModel();\n }\n },\n _removeConnection: function (connection, undoable) {\n if (connection.sourceConnector) {\n Utils.remove(connection.sourceConnector.connections, connection);\n }\n if (connection.targetConnector) {\n Utils.remove(connection.targetConnector.connections, connection);\n }\n if (undoable) {\n this.undoRedoService.addCompositeItem(new DeleteConnectionUnit(connection));\n }\n Utils.remove(this.connections, connection);\n },\n _removeDataItems: function (items, recursive) {\n var item, children, shape, idx;\n items = isArray(items) ? items : [items];\n while (items.length) {\n item = items.shift();\n shape = this._dataMap[item.uid];\n if (shape) {\n this._removeShapeConnections(shape);\n this._removeItem(shape, false);\n delete this._dataMap[item.uid];\n if (recursive && item.hasChildren && item.loaded()) {\n children = item.children.data();\n for (idx = 0; idx < children.length; idx++) {\n items.push(children[idx]);\n }\n }\n }\n }\n },\n _removeShapeConnections: function (shape) {\n var connections = shape.connections();\n var idx;\n if (connections) {\n for (idx = 0; idx < connections.length; idx++) {\n this._removeItem(connections[idx], false);\n }\n }\n },\n _addDataItem: function (dataItem, undoable) {\n if (!defined(dataItem)) {\n return;\n }\n var shape = this._dataMap[dataItem.id];\n if (shape) {\n return shape;\n }\n var options = deepExtend({}, this.options.shapeDefaults);\n options.dataItem = dataItem;\n shape = new Shape(options, this);\n this.addShape(shape, undoable !== false);\n this._dataMap[dataItem.id] = shape;\n return shape;\n },\n _addDataItemByUid: function (dataItem) {\n if (!defined(dataItem)) {\n return;\n }\n var shape = this._dataMap[dataItem.uid];\n if (shape) {\n return shape;\n }\n var options = deepExtend({}, this.options.shapeDefaults);\n options.dataItem = dataItem;\n shape = new Shape(options, this);\n this.addShape(shape);\n this._dataMap[dataItem.uid] = shape;\n return shape;\n },\n _addDataItems: function (items, parent) {\n var item, idx, shape, parentShape, connection;\n for (idx = 0; idx < items.length; idx++) {\n item = items[idx];\n shape = this._addDataItemByUid(item);\n parentShape = this._addDataItemByUid(parent);\n if (parentShape && !this.connected(parentShape, shape)) {\n connection = this.connect(parentShape, shape);\n }\n }\n },\n _refreshSource: function (e) {\n var that = this, node = e.node, action = e.action, items = e.items, options = that.options, idx, dataBound;\n if (e.field) {\n for (idx = 0; idx < items.length; idx++) {\n if (this._dataMap[items[idx].uid]) {\n this._dataMap[items[idx].uid].redrawVisual();\n }\n }\n return;\n }\n if (action == 'remove') {\n this._removeDataItems(e.items, true);\n } else {\n if ((!action || action === 'itemloaded') && !this._bindingRoots) {\n this._bindingRoots = true;\n dataBound = true;\n }\n if (!action && !node) {\n that.clear();\n }\n this._addDataItems(items, node);\n for (idx = 0; idx < items.length; idx++) {\n items[idx].load();\n }\n }\n if (options.layout && (dataBound || action == 'remove' || action == 'add')) {\n that.layout(options.layout);\n }\n if (dataBound) {\n this.trigger('dataBound');\n this._bindingRoots = false;\n }\n },\n _addItem: function (item) {\n if (item instanceof Shape) {\n this.addShape(item);\n } else if (item instanceof Connection) {\n this.addConnection(item);\n }\n },\n _createToolBar: function (preventClosing) {\n var diagram = this.toolService.diagram;\n if (!this.singleToolBar && diagram.select().length === 1) {\n var element = diagram.select()[0];\n if (element && element.options.editable !== false) {\n var editable = element.options.editable;\n var tools = editable.tools;\n if (this._isEditable && tools.length === 0) {\n if (element instanceof Shape) {\n tools = [\n 'edit',\n 'rotateClockwise',\n 'rotateAnticlockwise'\n ];\n } else if (element instanceof Connection) {\n tools = ['edit'];\n }\n if (editable && editable.remove !== false) {\n tools.push('delete');\n }\n }\n if (tools && tools.length) {\n var padding = 20;\n var point;\n this.singleToolBar = new DiagramToolBar(diagram, {\n tools: tools,\n click: proxy(this._toolBarClick, this),\n modal: true,\n popupZIndex: parseInt(diagram.element.closest('.k-window').css('zIndex'), 10) + 10\n });\n var popupWidth = outerWidth(this.singleToolBar._popup.element);\n var popupHeight = outerHeight(this.singleToolBar._popup.element);\n if (element instanceof Shape) {\n var shapeBounds = this.modelToView(element.bounds(ROTATED));\n point = new Point(shapeBounds.x, shapeBounds.y).minus(new Point((popupWidth - shapeBounds.width) / 2, popupHeight + padding));\n } else if (element instanceof Connection) {\n var connectionBounds = this.modelToView(element.bounds());\n point = new Point(connectionBounds.x, connectionBounds.y).minus(new Point((popupWidth - connectionBounds.width - 20) / 2, popupHeight + padding));\n }\n if (point) {\n if (!this.canvas.translate) {\n point = point.minus(new Point(this.scroller.scrollLeft, this.scroller.scrollTop));\n }\n point = this.viewToDocument(point);\n point = new Point(math.max(point.x, 0), math.max(point.y, 0));\n this.singleToolBar.showAt(point);\n if (preventClosing) {\n this.singleToolBar._popup.one('close', preventDefault);\n }\n } else {\n this._destroyToolBar();\n }\n }\n }\n }\n },\n _toolBarClick: function (e) {\n this.trigger('toolBarClick', e);\n this._destroyToolBar();\n },\n _normalizePointZoom: function (point) {\n return point.times(1 / this.zoom());\n },\n _initialize: function () {\n this.shapes = [];\n this._selectedItems = [];\n this.connections = [];\n this._dataMap = {};\n this._connectionsDataMap = {};\n this._inactiveShapeItems = new InactiveItemsCollection();\n this._deferredConnectionUpdates = [];\n this.undoRedoService = new UndoRedoService({\n undone: this._syncHandler,\n redone: this._syncHandler\n });\n this.id = diagram.randomId();\n },\n _fetchFreshData: function () {\n var that = this;\n that._dataSource();\n if (that._isEditable) {\n that._connectionDataSource();\n }\n if (that.options.autoBind) {\n if (that._isEditable) {\n this._loadingShapes = true;\n this._loadingConnections = true;\n that.dataSource.fetch();\n that.connectionsDataSource.fetch();\n } else {\n that.dataSource.fetch();\n }\n }\n },\n _dataSource: function () {\n if (defined(this.options.connectionsDataSource)) {\n this._isEditable = true;\n var dsOptions = this.options.dataSource || {};\n var ds = isArray(dsOptions) ? { data: dsOptions } : dsOptions;\n if (this.dataSource && this._shapesRefreshHandler) {\n this.dataSource.unbind('change', this._shapesRefreshHandler).unbind('requestStart', this._shapesRequestStartHandler).unbind('error', this._shapesErrorHandler);\n } else {\n this._shapesRefreshHandler = proxy(this._refreshShapes, this);\n this._shapesRequestStartHandler = proxy(this._shapesRequestStart, this);\n this._shapesErrorHandler = proxy(this._error, this);\n }\n this.dataSource = kendo.data.DataSource.create(ds).bind('change', this._shapesRefreshHandler).bind('requestStart', this._shapesRequestStartHandler).bind('error', this._shapesErrorHandler);\n } else {\n this._treeDataSource();\n this._isEditable = false;\n }\n },\n _connectionDataSource: function () {\n var dsOptions = this.options.connectionsDataSource;\n if (dsOptions) {\n var ds = isArray(dsOptions) ? { data: dsOptions } : dsOptions;\n if (this.connectionsDataSource && this._connectionsRefreshHandler) {\n this.connectionsDataSource.unbind('change', this._connectionsRefreshHandler).unbind('requestStart', this._connectionsRequestStartHandler).unbind('error', this._connectionsErrorHandler);\n } else {\n this._connectionsRefreshHandler = proxy(this._refreshConnections, this);\n this._connectionsRequestStartHandler = proxy(this._connectionsRequestStart, this);\n this._connectionsErrorHandler = proxy(this._connectionsError, this);\n }\n this.connectionsDataSource = kendo.data.DataSource.create(ds).bind('change', this._connectionsRefreshHandler).bind('requestStart', this._connectionsRequestStartHandler).bind('error', this._connectionsErrorHandler);\n }\n },\n _shapesRequestStart: function (e) {\n if (e.type == 'read') {\n this._loadingShapes = true;\n }\n },\n _connectionsRequestStart: function (e) {\n if (e.type == 'read') {\n this._loadingConnections = true;\n }\n },\n _error: function () {\n this._loadingShapes = false;\n },\n _connectionsError: function () {\n this._loadingConnections = false;\n },\n _refreshShapes: function (e) {\n if (e.action === 'remove') {\n if (this._shouldRefresh()) {\n this._removeShapes(e.items);\n }\n } else if (e.action === 'itemchange') {\n if (this._shouldRefresh()) {\n this._updateShapes(e.items, e.field);\n }\n } else if (e.action === 'add') {\n this._inactiveShapeItems.add(e.items);\n } else if (e.action === 'sync') {\n this._syncShapes(e.items);\n } else {\n this.refresh();\n }\n },\n _shouldRefresh: function () {\n return !this._suspended;\n },\n _suspendModelRefresh: function () {\n this._suspended = (this._suspended || 0) + 1;\n },\n _resumeModelRefresh: function () {\n this._suspended = math.max((this._suspended || 0) - 1, 0);\n },\n refresh: function () {\n this._loadingShapes = false;\n if (!this._loadingConnections) {\n this._rebindShapesAndConnections();\n }\n },\n _rebindShapesAndConnections: function () {\n this.clear();\n this._addShapes(this.dataSource.view());\n if (this.connectionsDataSource) {\n this._addConnections(this.connectionsDataSource.view(), false);\n }\n if (this.options.layout) {\n this.layout(this.options.layout);\n } else {\n this._redrawConnections();\n }\n this.trigger('dataBound');\n },\n refreshConnections: function () {\n this._loadingConnections = false;\n if (!this._loadingShapes) {\n this._rebindShapesAndConnections();\n }\n },\n _redrawConnections: function () {\n var connections = this.connections;\n for (var idx = 0; idx < connections.length; idx++) {\n connections[idx].refresh();\n }\n },\n _removeShapes: function (items) {\n var dataMap = this._dataMap;\n var item, i;\n for (i = 0; i < items.length; i++) {\n item = items[i];\n if (dataMap[item.id]) {\n this.remove(dataMap[item.id], false);\n dataMap[item.id] = null;\n }\n }\n },\n _syncShapes: function () {\n var diagram = this;\n var inactiveItems = diagram._inactiveShapeItems;\n inactiveItems.forEach(function (inactiveItem) {\n var dataItem = inactiveItem.dataItem;\n var shape = inactiveItem.element;\n if (!dataItem.isNew()) {\n if (shape) {\n shape._setOptionsFromModel();\n diagram.addShape(shape, inactiveItem.undoable);\n diagram._dataMap[dataItem.id] = shape;\n } else {\n diagram._addDataItem(dataItem);\n }\n inactiveItem.activate();\n inactiveItems.remove(dataItem);\n }\n });\n },\n _updateShapes: function (items, field) {\n for (var i = 0; i < items.length; i++) {\n var dataItem = items[i];\n var shape = this._dataMap[dataItem.id];\n if (shape) {\n shape.updateOptionsFromModel(dataItem, field);\n }\n }\n },\n _addShapes: function (dataItems) {\n for (var i = 0; i < dataItems.length; i++) {\n this._addDataItem(dataItems[i], false);\n }\n },\n _refreshConnections: function (e) {\n if (e.action === 'remove') {\n if (this._shouldRefresh()) {\n this._removeConnections(e.items);\n }\n } else if (e.action === 'add') {\n this._addConnections(e.items);\n } else if (e.action === 'sync') {\n } else if (e.action === 'itemchange') {\n if (this._shouldRefresh()) {\n this._updateConnections(e.items);\n }\n } else {\n this.refreshConnections();\n }\n },\n _removeConnections: function (items) {\n for (var i = 0; i < items.length; i++) {\n this.remove(this._connectionsDataMap[items[i].uid], false);\n this._connectionsDataMap[items[i].uid] = null;\n }\n },\n _updateConnections: function (items) {\n for (var i = 0; i < items.length; i++) {\n var dataItem = items[i];\n var connection = this._connectionsDataMap[dataItem.uid];\n connection.updateOptionsFromModel(dataItem);\n }\n },\n _addConnections: function (connections, undoable) {\n var length = connections.length;\n for (var i = 0; i < length; i++) {\n var dataItem = connections[i];\n this._addConnectionDataItem(dataItem, undoable);\n }\n },\n _addConnectionDataItem: function (dataItem, undoable) {\n if (!this._connectionsDataMap[dataItem.uid]) {\n var from = this._validateConnector(dataItem.from);\n if (!defined(from) || from === null) {\n from = new Point(dataItem.fromX, dataItem.fromY);\n }\n var to = this._validateConnector(dataItem.to);\n if (!defined(to) || to === null) {\n to = new Point(dataItem.toX, dataItem.toY);\n }\n if (defined(from) && defined(to)) {\n var options = deepExtend({}, this.options.connectionDefaults);\n options.dataItem = dataItem;\n var connection = new Connection(from, to, options);\n this._connectionsDataMap[dataItem.uid] = connection;\n this.addConnection(connection, undoable);\n }\n }\n },\n _validateConnector: function (value) {\n var connector;\n if (defined(value) && value !== null) {\n connector = this._dataMap[value];\n }\n return connector;\n },\n _treeDataSource: function () {\n var that = this, options = that.options, dataSource = options.dataSource;\n dataSource = isArray(dataSource) ? { data: dataSource } : dataSource;\n if (dataSource instanceof kendo.data.DataSource && !(dataSource instanceof kendo.data.HierarchicalDataSource)) {\n throw new Error('Incorrect DataSource type. If a single dataSource instance is set to the diagram then it should be a HierarchicalDataSource. You should set only the options instead of an instance or a HierarchicalDataSource instance or supply connectionsDataSource as well.');\n }\n if (!dataSource.fields) {\n dataSource.fields = [\n { field: 'text' },\n { field: 'url' },\n { field: 'spriteCssClass' },\n { field: 'imageUrl' }\n ];\n }\n if (that.dataSource && that._refreshHandler) {\n that._unbindDataSource();\n }\n that._refreshHandler = proxy(that._refreshSource, that);\n that._errorHandler = proxy(that._error, that);\n that.dataSource = HierarchicalDataSource.create(dataSource).bind(CHANGE, that._refreshHandler).bind(ERROR, that._errorHandler);\n },\n _unbindDataSource: function () {\n var that = this;\n that.dataSource.unbind(CHANGE, that._refreshHandler).unbind(ERROR, that._errorHandler);\n },\n _adorn: function (adorner, isActive) {\n if (isActive !== undefined && adorner) {\n if (isActive) {\n this._adorners.push(adorner);\n this.adornerLayer.append(adorner.visual);\n } else {\n Utils.remove(this._adorners, adorner);\n this.adornerLayer.remove(adorner.visual);\n }\n }\n },\n _showConnectors: function (shape, value) {\n if (value) {\n this._connectorsAdorner.show(shape);\n } else {\n this._connectorsAdorner.destroy();\n }\n },\n _updateAdorners: function () {\n var adorners = this._adorners;\n for (var i = 0; i < adorners.length; i++) {\n var adorner = adorners[i];\n if (adorner.refreshBounds) {\n adorner.refreshBounds();\n }\n adorner.refresh();\n }\n },\n _refresh: function () {\n for (var i = 0; i < this.connections.length; i++) {\n this.connections[i].refresh();\n }\n },\n _destroyToolBar: function () {\n if (this.singleToolBar) {\n this.singleToolBar.hide();\n this.singleToolBar.destroy();\n this.singleToolBar = null;\n }\n },\n _destroyGlobalToolBar: function () {\n if (this.toolBar) {\n this.toolBar.hide();\n this.toolBar.destroy();\n this.toolBar = null;\n }\n },\n exportDOMVisual: function () {\n var viewBox = this.canvas._viewBox;\n var scrollOffset = geom.transform().translate(-viewBox.x, -viewBox.y);\n var viewRect = new geom.Rect([\n 0,\n 0\n ], [\n viewBox.width,\n viewBox.height\n ]);\n var clipPath = draw.Path.fromRect(viewRect);\n var wrap = new draw.Group({ transform: scrollOffset });\n var clipWrap = new draw.Group({ clip: clipPath });\n var root = this.canvas.drawingElement.children[0];\n clipWrap.append(wrap);\n wrap.children.push(root);\n return clipWrap;\n },\n exportVisual: function () {\n var scale = geom.transform().scale(1 / this._zoom);\n var wrap = new draw.Group({ transform: scale });\n var root = this.mainLayer.drawingElement;\n wrap.children.push(root);\n return wrap;\n },\n _syncChanges: function () {\n this._syncShapeChanges();\n this._syncConnectionChanges();\n },\n _syncShapeChanges: function () {\n if (this.dataSource && this._isEditable) {\n this.dataSource.sync();\n }\n },\n _syncConnectionChanges: function () {\n var that = this;\n if (that.connectionsDataSource && that._isEditable) {\n $.when.apply($, that._deferredConnectionUpdates).then(function () {\n that.connectionsDataSource.sync();\n });\n that.deferredConnectionUpdates = [];\n }\n }\n });\n dataviz.ExportMixin.extend(Diagram.fn, true);\n if (kendo.PDFMixin) {\n kendo.PDFMixin.extend(Diagram.fn);\n }\n function filterShapeDataItem(dataItem) {\n var result = {};\n dataItem = dataItem || {};\n if (defined(dataItem.text) && dataItem.text !== null) {\n result.text = dataItem.text;\n }\n if (defined(dataItem.x) && dataItem.x !== null) {\n result.x = dataItem.x;\n }\n if (defined(dataItem.y) && dataItem.y !== null) {\n result.y = dataItem.y;\n }\n if (defined(dataItem.width) && dataItem.width !== null) {\n result.width = dataItem.width;\n }\n if (defined(dataItem.height) && dataItem.height !== null) {\n result.height = dataItem.height;\n }\n if (defined(dataItem.type) && dataItem.type !== null) {\n result.type = dataItem.type;\n }\n return result;\n }\n function filterConnectionDataItem(dataItem) {\n var result = {};\n dataItem = dataItem || {};\n if (defined(dataItem.text) && dataItem.text !== null) {\n result.content = dataItem.text;\n }\n if (defined(dataItem.type) && dataItem.type !== null) {\n result.type = dataItem.type;\n }\n if (defined(dataItem.from) && dataItem.from !== null) {\n result.from = dataItem.from;\n }\n if (defined(dataItem.fromConnector) && dataItem.fromConnector !== null) {\n result.fromConnector = dataItem.fromConnector;\n }\n if (defined(dataItem.fromX) && dataItem.fromX !== null) {\n result.fromX = dataItem.fromX;\n }\n if (defined(dataItem.fromY) && dataItem.fromY !== null) {\n result.fromY = dataItem.fromY;\n }\n if (defined(dataItem.to) && dataItem.to !== null) {\n result.to = dataItem.to;\n }\n if (defined(dataItem.toConnector) && dataItem.toConnector !== null) {\n result.toConnector = dataItem.toConnector;\n }\n if (defined(dataItem.toX) && dataItem.toX !== null) {\n result.toX = dataItem.toX;\n }\n if (defined(dataItem.toY) && dataItem.toY !== null) {\n result.toY = dataItem.toY;\n }\n return result;\n }\n var DiagramToolBar = kendo.Observable.extend({\n init: function (diagram, options) {\n kendo.Observable.fn.init.call(this);\n this.diagram = diagram;\n this.options = deepExtend({}, this.options, options);\n this._tools = [];\n this.createToolBar();\n this.createTools();\n this.appendTools();\n if (this.options.modal) {\n this.createPopup();\n }\n this.bind(this.events, options);\n },\n events: ['click'],\n createPopup: function () {\n this.container = $('
        ').append(this.element);\n this._popup = this.container.kendoPopup({}).getKendoPopup();\n },\n appendTools: function () {\n for (var i = 0; i < this._tools.length; i++) {\n var tool = this._tools[i];\n if (tool.buttons && tool.buttons.length || !defined(tool.buttons)) {\n this._toolBar.add(tool);\n }\n }\n },\n createToolBar: function () {\n this.element = $('
        ');\n this._toolBar = this.element.kendoToolBar({\n click: proxy(this.click, this),\n resizable: false\n }).getKendoToolBar();\n this.element.css('border', 'none');\n },\n createTools: function () {\n for (var i = 0; i < this.options.tools.length; i++) {\n this.createTool(this.options.tools[i]);\n }\n },\n createTool: function (tool) {\n if (!isPlainObject(tool)) {\n tool = { name: tool };\n }\n var toolName = tool.name + 'Tool';\n if (this[toolName]) {\n this[toolName](tool);\n } else {\n this._tools.push(deepExtend({}, tool, { attributes: this._setAttributes({ action: tool.name }) }));\n }\n },\n showAt: function (point) {\n var popupZIndex = parseInt(this.options.popupZIndex, 10);\n if (this._popup) {\n this._popup.open(point.x, point.y);\n if (popupZIndex) {\n this._popup.wrapper.css('zIndex', popupZIndex);\n }\n }\n },\n hide: function () {\n if (this._popup) {\n this._popup.close();\n }\n },\n newGroup: function () {\n return {\n type: 'buttonGroup',\n buttons: []\n };\n },\n editTool: function () {\n this._tools.push({\n icon: 'edit',\n showText: 'overflow',\n type: 'button',\n text: 'Edit',\n attributes: this._setAttributes({ action: 'edit' })\n });\n },\n deleteTool: function () {\n this._tools.push({\n icon: 'close',\n showText: 'overflow',\n type: 'button',\n text: 'Delete',\n attributes: this._setAttributes({ action: 'delete' })\n });\n },\n rotateAnticlockwiseTool: function (options) {\n this._appendGroup('rotate');\n this._rotateGroup.buttons.push({\n icon: 'rotate-left',\n showText: 'overflow',\n text: 'RotateAnticlockwise',\n group: 'rotate',\n attributes: this._setAttributes({\n action: 'rotateAnticlockwise',\n step: options.step\n })\n });\n },\n rotateClockwiseTool: function (options) {\n this._appendGroup('rotate');\n this._rotateGroup.buttons.push({\n icon: 'rotate-right',\n attributes: this._setAttributes({\n action: 'rotateClockwise',\n step: options.step\n }),\n showText: 'overflow',\n text: 'RotateClockwise',\n group: 'rotate'\n });\n },\n createShapeTool: function () {\n this._appendGroup('create');\n this._createGroup.buttons.push({\n icon: 'shape',\n showText: 'overflow',\n text: 'CreateShape',\n group: 'create',\n attributes: this._setAttributes({ action: 'createShape' })\n });\n },\n createConnectionTool: function () {\n this._appendGroup('create');\n this._createGroup.buttons.push({\n icon: 'connector',\n showText: 'overflow',\n text: 'CreateConnection',\n group: 'create',\n attributes: this._setAttributes({ action: 'createConnection' })\n });\n },\n undoTool: function () {\n this._appendGroup('history');\n this._historyGroup.buttons.push({\n icon: 'undo',\n showText: 'overflow',\n text: 'Undo',\n group: 'history',\n attributes: this._setAttributes({ action: 'undo' })\n });\n },\n redoTool: function () {\n this._appendGroup('history');\n this._historyGroup.buttons.push({\n icon: 'redo',\n showText: 'overflow',\n text: 'Redo',\n group: 'history',\n attributes: this._setAttributes({ action: 'redo' })\n });\n },\n _appendGroup: function (name) {\n var prop = '_' + name + 'Group';\n if (!this[prop]) {\n this[prop] = this.newGroup();\n this._tools.push(this[prop]);\n }\n },\n _setAttributes: function (attributes) {\n var attr = {};\n if (attributes.action) {\n attr[kendo.attr('action')] = attributes.action;\n }\n if (attributes.step) {\n attr[kendo.attr('step')] = attributes.step;\n }\n return attr;\n },\n _getAttributes: function (element) {\n var attr = {};\n var action = element.attr(kendo.attr('action'));\n if (action) {\n attr.action = action;\n }\n var step = element.attr(kendo.attr('step'));\n if (step) {\n attr.step = step;\n }\n return attr;\n },\n click: function (e) {\n var attributes = this._getAttributes($(e.target));\n var action = attributes.action;\n if (action && this[action]) {\n this[action](attributes);\n }\n this.trigger('click', this.eventData(action, e.target));\n },\n eventData: function (action, target) {\n var elements = this.selectedElements(), length = elements.length, shapes = [], connections = [], element;\n for (var idx = 0; idx < length; idx++) {\n element = elements[idx];\n if (element instanceof Shape) {\n shapes.push(element);\n } else {\n connections.push(element);\n }\n }\n return {\n shapes: shapes,\n connections: connections,\n action: action,\n target: target\n };\n },\n 'delete': function () {\n var diagram = this.diagram;\n var toRemove = diagram._triggerRemove(this.selectedElements());\n if (toRemove.length) {\n this.diagram.remove(toRemove, true);\n this.diagram._syncChanges();\n }\n },\n edit: function () {\n var selectedElemens = this.selectedElements();\n if (selectedElemens.length === 1) {\n this.diagram.edit(selectedElemens[0]);\n }\n },\n rotateClockwise: function (options) {\n var angle = parseFloat(options.step || 90);\n this._rotate(angle);\n },\n rotateAnticlockwise: function (options) {\n var angle = parseFloat(options.step || 90);\n this._rotate(-angle);\n },\n _rotate: function (angle) {\n var adorner = this.diagram._resizingAdorner;\n adorner.angle(adorner.angle() + angle);\n adorner.rotate();\n },\n selectedElements: function () {\n return this.diagram.select();\n },\n createShape: function () {\n this.diagram.createShape();\n },\n createConnection: function () {\n this.diagram.createConnection();\n },\n undo: function () {\n this.diagram.undo();\n },\n redo: function () {\n this.diagram.redo();\n },\n destroy: function () {\n this.diagram = null;\n this.element = null;\n this.options = null;\n if (this._toolBar) {\n this._toolBar.destroy();\n }\n if (this._popup) {\n this._popup.destroy();\n }\n }\n });\n var Editor = kendo.Observable.extend({\n init: function (element, options) {\n kendo.Observable.fn.init.call(this);\n this.options = extend(true, {}, this.options, options);\n this.element = element;\n this.model = this.options.model;\n this.fields = this._getFields();\n this._initContainer();\n this.createEditable();\n },\n options: { editors: {} },\n _initContainer: function () {\n this.wrapper = this.element;\n },\n createEditable: function () {\n var options = this.options;\n this.editable = new kendo.ui.Editable(this.wrapper, {\n fields: this.fields,\n target: options.target,\n clearContainer: false,\n model: this.model\n });\n },\n _isEditable: function (field) {\n return this.model.editable && this.model.editable(field);\n },\n _getFields: function () {\n var fields = [];\n var modelFields = this.model.fields;\n for (var field in modelFields) {\n var result = {};\n if (this._isEditable(field)) {\n var editor = this.options.editors[field];\n if (editor) {\n result.editor = editor;\n }\n result.field = field;\n fields.push(result);\n }\n }\n return fields;\n },\n end: function () {\n return this.editable.end();\n },\n destroy: function () {\n this.editable.destroy();\n this.editable.element.find('[' + kendo.attr('container-for') + ']').empty();\n this.model = this.wrapper = this.element = this.columns = this.editable = null;\n }\n });\n var PopupEditor = Editor.extend({\n init: function (element, options) {\n Editor.fn.init.call(this, element, options);\n this.bind(this.events, this.options);\n this.open();\n },\n events: [\n 'update',\n 'cancel'\n ],\n options: {\n window: {\n modal: true,\n resizable: false,\n draggable: true,\n title: 'Edit',\n visible: false\n }\n },\n _initContainer: function () {\n var that = this;\n this.wrapper = $('
        ').attr(kendo.attr('uid'), this.model.uid);\n var formContent = '';\n if (this.options.template) {\n formContent += this._renderTemplate();\n this.fields = [];\n } else {\n formContent += this._renderFields();\n }\n formContent += this._renderButtons();\n this.wrapper.append($('
        ').append(formContent));\n this.window = new kendo.ui.Window(this.wrapper.appendTo(this.element), this.options.window);\n this.window.bind('close', function (e) {\n if (e.userTriggered) {\n e.sender.element.focus();\n that._cancelClick(e);\n }\n });\n this._attachButtonEvents();\n },\n _renderTemplate: function () {\n var template = this.options.template;\n if (typeof template === 'string') {\n template = window.unescape(template);\n }\n template = kendo.template(template)(this.model);\n return template;\n },\n _renderFields: function () {\n var form = '';\n for (var i = 0; i < this.fields.length; i++) {\n var field = this.fields[i];\n form += '
        ';\n if (this._isEditable(field.field)) {\n form += '
        ';\n }\n }\n return form;\n },\n _renderButtons: function () {\n var form = '
        ';\n form += this._createButton('update');\n form += this._createButton('cancel');\n form += '
        ';\n return form;\n },\n _createButton: function (name) {\n return kendo.template(BUTTON_TEMPLATE)(defaultButtons[name]);\n },\n _attachButtonEvents: function () {\n this._cancelClickHandler = proxy(this._cancelClick, this);\n this.window.element.on(CLICK + NS, 'a.k-diagram-cancel', this._cancelClickHandler);\n this._updateClickHandler = proxy(this._updateClick, this);\n this.window.element.on(CLICK + NS, 'a.k-diagram-update', this._updateClickHandler);\n },\n _updateClick: function (e) {\n e.preventDefault();\n this.trigger('update');\n },\n _cancelClick: function (e) {\n e.preventDefault();\n this.trigger('cancel');\n },\n open: function () {\n this.window.center().open();\n },\n close: function () {\n this.window.bind('deactivate', proxy(this.destroy, this)).close();\n },\n destroy: function () {\n this.window.close().destroy();\n this.window.element.off(CLICK + NS, 'a.k-diagram-cancel', this._cancelClickHandler);\n this.window.element.off(CLICK + NS, 'a.k-diagram-update', this._updateClickHandler);\n this._cancelClickHandler = null;\n this._editUpdateClickHandler = null;\n this.window = null;\n Editor.fn.destroy.call(this);\n }\n });\n function connectionSelector(container, options) {\n var model = this.dataSource.reader.model;\n if (model) {\n var textField = model.fn.fields.text ? 'text' : model.idField;\n $('').appendTo(container).kendoDropDownList({\n dataValueField: model.idField,\n dataTextField: textField,\n dataSource: this.dataSource.data().toJSON(),\n optionLabel: ' ',\n valuePrimitive: true\n });\n }\n }\n function InactiveItem(dataItem) {\n this.dataItem = dataItem;\n this.callbacks = [];\n }\n InactiveItem.fn = InactiveItem.prototype = {\n onActivate: function (callback) {\n var deffered = $.Deferred();\n this.callbacks.push({\n callback: callback,\n deferred: deffered\n });\n return deffered;\n },\n activate: function () {\n var callbacks = this.callbacks;\n var item;\n for (var idx = 0; idx < callbacks.length; idx++) {\n item = this.callbacks[idx];\n item.callback(this.dataItem);\n item.deferred.resolve();\n }\n this.callbacks = [];\n }\n };\n function InactiveItemsCollection() {\n this.items = {};\n }\n InactiveItemsCollection.fn = InactiveItemsCollection.prototype = {\n add: function (items) {\n for (var idx = 0; idx < items.length; idx++) {\n this.items[items[idx].uid] = new InactiveItem(items[idx]);\n }\n },\n forEach: function (callback) {\n for (var uid in this.items) {\n callback(this.items[uid]);\n }\n },\n getByUid: function (uid) {\n return this.items[uid];\n },\n remove: function (item) {\n delete this.items[item.uid];\n }\n };\n var QuadRoot = Class.extend({\n init: function () {\n this.shapes = [];\n },\n _add: function (shape, bounds) {\n this.shapes.push({\n bounds: bounds,\n shape: shape\n });\n shape._quadNode = this;\n },\n insert: function (shape, bounds) {\n this._add(shape, bounds);\n },\n remove: function (shape) {\n var shapes = this.shapes;\n var length = shapes.length;\n for (var idx = 0; idx < length; idx++) {\n if (shapes[idx].shape === shape) {\n shapes.splice(idx, 1);\n break;\n }\n }\n },\n hitTestRect: function (rect, exclude) {\n var shapes = this.shapes;\n var length = shapes.length;\n for (var i = 0; i < length; i++) {\n if (this._testRect(shapes[i].shape, rect) && !dataviz.inArray(shapes[i].shape, exclude)) {\n return true;\n }\n }\n },\n _testRect: function (shape, rect) {\n var angle = shape.rotate().angle;\n var bounds = shape.bounds();\n var hit;\n if (!angle) {\n hit = bounds.overlaps(rect);\n } else {\n hit = Intersect.rects(rect, bounds, -angle);\n }\n return hit;\n }\n });\n var QuadNode = QuadRoot.extend({\n init: function (rect) {\n QuadRoot.fn.init.call(this);\n this.children = [];\n this.rect = rect;\n },\n inBounds: function (rect) {\n var nodeRect = this.rect;\n var nodeBottomRight = nodeRect.bottomRight();\n var bottomRight = rect.bottomRight();\n var inBounds = nodeRect.x <= rect.x && nodeRect.y <= rect.y && bottomRight.x <= nodeBottomRight.x && bottomRight.y <= nodeBottomRight.y;\n return inBounds;\n },\n overlapsBounds: function (rect) {\n return this.rect.overlaps(rect);\n },\n insert: function (shape, bounds) {\n var inserted = false;\n var children = this.children;\n var length = children.length;\n if (this.inBounds(bounds)) {\n if (!length && this.shapes.length < 4) {\n this._add(shape, bounds);\n } else {\n if (!length) {\n this._initChildren();\n }\n for (var idx = 0; idx < children.length; idx++) {\n if (children[idx].insert(shape, bounds)) {\n inserted = true;\n break;\n }\n }\n if (!inserted) {\n this._add(shape, bounds);\n }\n }\n inserted = true;\n }\n return inserted;\n },\n _initChildren: function () {\n var rect = this.rect, children = this.children, shapes = this.shapes, center = rect.center(), halfWidth = rect.width / 2, halfHeight = rect.height / 2, childIdx, shapeIdx;\n children.push(new QuadNode(new Rect(rect.x, rect.y, halfWidth, halfHeight)), new QuadNode(new Rect(center.x, rect.y, halfWidth, halfHeight)), new QuadNode(new Rect(rect.x, center.y, halfWidth, halfHeight)), new QuadNode(new Rect(center.x, center.y, halfWidth, halfHeight)));\n for (shapeIdx = shapes.length - 1; shapeIdx >= 0; shapeIdx--) {\n for (childIdx = 0; childIdx < children.length; childIdx++) {\n if (children[childIdx].insert(shapes[shapeIdx].shape, shapes[shapeIdx].bounds)) {\n shapes.splice(shapeIdx, 1);\n break;\n }\n }\n }\n },\n hitTestRect: function (rect, exclude) {\n var idx;\n var children = this.children;\n var length = children.length;\n var hit = false;\n if (this.overlapsBounds(rect)) {\n if (QuadRoot.fn.hitTestRect.call(this, rect, exclude)) {\n hit = true;\n } else {\n for (idx = 0; idx < length; idx++) {\n if (children[idx].hitTestRect(rect, exclude)) {\n hit = true;\n break;\n }\n }\n }\n }\n return hit;\n }\n });\n var ShapesQuadTree = Class.extend({\n ROOT_SIZE: 1000,\n init: function (diagram) {\n var boundsChangeHandler = proxy(this._boundsChange, this);\n diagram.bind(ITEMBOUNDSCHANGE, boundsChangeHandler);\n diagram.bind(ITEMROTATE, boundsChangeHandler);\n this.initRoots();\n },\n initRoots: function () {\n this.rootMap = {};\n this.root = new QuadRoot();\n },\n clear: function () {\n this.initRoots();\n },\n _boundsChange: function (e) {\n if (e.item._quadNode) {\n e.item._quadNode.remove(e.item);\n }\n this.insert(e.item);\n },\n insert: function (shape) {\n var bounds = shape.bounds(ROTATED);\n var rootSize = this.ROOT_SIZE;\n var sectors = this.getSectors(bounds);\n var x = sectors[0][0];\n var y = sectors[1][0];\n if (this.inRoot(sectors)) {\n this.root.insert(shape, bounds);\n } else {\n if (!this.rootMap[x]) {\n this.rootMap[x] = {};\n }\n if (!this.rootMap[x][y]) {\n this.rootMap[x][y] = new QuadNode(new Rect(x * rootSize, y * rootSize, rootSize, rootSize));\n }\n this.rootMap[x][y].insert(shape, bounds);\n }\n },\n remove: function (shape) {\n if (shape._quadNode) {\n shape._quadNode.remove(shape);\n }\n },\n inRoot: function (sectors) {\n return sectors[0].length > 1 || sectors[1].length > 1;\n },\n getSectors: function (rect) {\n var rootSize = this.ROOT_SIZE;\n var bottomRight = rect.bottomRight();\n var bottomX = math.floor(bottomRight.x / rootSize);\n var bottomY = math.floor(bottomRight.y / rootSize);\n var sectors = [\n [],\n []\n ];\n for (var x = math.floor(rect.x / rootSize); x <= bottomX; x++) {\n sectors[0].push(x);\n }\n for (var y = math.floor(rect.y / rootSize); y <= bottomY; y++) {\n sectors[1].push(y);\n }\n return sectors;\n },\n hitTestRect: function (rect, exclude) {\n var sectors = this.getSectors(rect);\n var xIdx, yIdx, x, y;\n var root;\n if (this.root.hitTestRect(rect, exclude)) {\n return true;\n }\n for (xIdx = 0; xIdx < sectors[0].length; xIdx++) {\n x = sectors[0][xIdx];\n for (yIdx = 0; yIdx < sectors[1].length; yIdx++) {\n y = sectors[1][yIdx];\n root = (this.rootMap[x] || {})[y];\n if (root && root.hitTestRect(rect, exclude)) {\n return true;\n }\n }\n }\n return false;\n }\n });\n function cloneDataItem(dataItem) {\n var result = dataItem;\n if (dataItem instanceof kendo.data.Model) {\n result = dataItem.toJSON();\n result[dataItem.idField] = dataItem._defaultId;\n }\n return result;\n }\n function splitDiagramElements(elements) {\n var connections = [];\n var shapes = [];\n var element, idx;\n for (idx = 0; idx < elements.length; idx++) {\n element = elements[idx];\n if (element instanceof Shape) {\n shapes.push(element);\n } else {\n connections.push(element);\n }\n }\n return {\n shapes: shapes,\n connections: connections\n };\n }\n function createModel(dataSource, model) {\n if (dataSource.reader.model) {\n return new dataSource.reader.model(model);\n }\n return new kendo.data.ObservableObject(model);\n }\n function clearField(field, model) {\n if (defined(model[field])) {\n model.set(field, null);\n }\n }\n function copyDefaultOptions(mainOptions, elementOptions, fields) {\n var field;\n for (var idx = 0; idx < fields.length; idx++) {\n field = fields[idx];\n if (elementOptions && !defined(elementOptions[field])) {\n elementOptions[field] = mainOptions[field];\n }\n }\n }\n function translateToOrigin(visual) {\n var bbox = visual.drawingContainer().clippedBBox(null);\n if (bbox.origin.x !== 0 || bbox.origin.y !== 0) {\n visual.position(-bbox.origin.x, -bbox.origin.y);\n }\n }\n function preventDefault(e) {\n e.preventDefault();\n }\n dataviz.ui.plugin(Diagram);\n deepExtend(diagram, {\n Shape: Shape,\n Connection: Connection,\n Connector: Connector,\n DiagramToolBar: DiagramToolBar,\n QuadNode: QuadNode,\n QuadRoot: QuadRoot,\n ShapesQuadTree: ShapesQuadTree,\n PopupEditor: PopupEditor\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.diagram', [\n 'kendo.data',\n 'kendo.draganddrop',\n 'kendo.userevents',\n 'kendo.mobile.scroller',\n 'kendo.drawing',\n 'dataviz/diagram/utils',\n 'dataviz/diagram/math',\n 'dataviz/diagram/svg',\n 'dataviz/diagram/services',\n 'dataviz/diagram/layout',\n 'dataviz/diagram/dom'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.diagram',\n name: 'Diagram',\n category: 'dataviz',\n description: 'The Kendo DataViz Diagram ',\n depends: [\n 'data',\n 'userevents',\n 'mobile.scroller',\n 'draganddrop',\n 'drawing',\n 'dataviz.core',\n 'dataviz.themes',\n 'toolbar'\n ],\n features: [\n {\n id: 'dataviz.diagram-pdf-export',\n name: 'PDF export',\n description: 'Export Diagram as PDF',\n depends: ['pdf']\n },\n {\n id: 'dataviz.diagram-editing',\n name: 'Editing',\n description: 'Support for model editing',\n depends: [\n 'editable',\n 'window',\n 'dropdownlist'\n ]\n }\n ]\n };\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.treemap', [\n 'kendo.data',\n 'kendo.userevents',\n 'kendo.dataviz.themes'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.treeMap',\n name: 'TreeMap',\n category: 'dataviz',\n description: 'The Kendo DataViz TreeMap',\n depends: [\n 'data',\n 'userevents',\n 'dataviz.themes'\n ]\n };\n (function ($, undefined) {\n var math = Math, proxy = $.proxy, isArray = $.isArray, kendo = window.kendo, outerHeight = kendo._outerHeight, outerWidth = kendo._outerWidth, Class = kendo.Class, Widget = kendo.ui.Widget, template = kendo.template, deepExtend = kendo.deepExtend, HierarchicalDataSource = kendo.data.HierarchicalDataSource, getter = kendo.getter, dataviz = kendo.dataviz;\n var NS = '.kendoTreeMap', CHANGE = 'change', DATA_BOUND = 'dataBound', ITEM_CREATED = 'itemCreated', MAX_VALUE = Number.MAX_VALUE, MOUSEOVER_NS = 'mouseover' + NS, MOUSELEAVE_NS = 'mouseleave' + NS, UNDEFINED = 'undefined';\n var TreeMap = Widget.extend({\n init: function (element, options) {\n kendo.destroy(element);\n $(element).empty();\n Widget.fn.init.call(this, element, options);\n this.wrapper = this.element;\n this._initTheme(this.options);\n this.element.addClass('k-widget k-treemap');\n this._setLayout();\n this._originalOptions = deepExtend({}, this.options);\n this._initDataSource();\n this._attachEvents();\n kendo.notify(this, dataviz.ui);\n },\n options: {\n name: 'TreeMap',\n theme: 'default',\n autoBind: true,\n textField: 'text',\n valueField: 'value',\n colorField: 'color'\n },\n events: [\n DATA_BOUND,\n ITEM_CREATED\n ],\n _initTheme: function (options) {\n var that = this, themes = dataviz.ui.themes || {}, themeName = ((options || {}).theme || '').toLowerCase(), themeOptions = (themes[themeName] || {}).treeMap;\n that.options = deepExtend({}, themeOptions, options);\n },\n _attachEvents: function () {\n this.element.on(MOUSEOVER_NS, proxy(this._mouseover, this)).on(MOUSELEAVE_NS, proxy(this._mouseleave, this));\n this._resizeHandler = proxy(this.resize, this, false);\n kendo.onResize(this._resizeHandler);\n },\n _setLayout: function () {\n if (this.options.type === 'horizontal') {\n this._layout = new SliceAndDice(false);\n this._view = new SliceAndDiceView(this, this.options);\n } else if (this.options.type === 'vertical') {\n this._layout = new SliceAndDice(true);\n this._view = new SliceAndDiceView(this, this.options);\n } else {\n this._layout = new Squarified();\n this._view = new SquarifiedView(this, this.options);\n }\n },\n _initDataSource: function () {\n var that = this, options = that.options, dataSource = options.dataSource;\n that._dataChangeHandler = proxy(that._onDataChange, that);\n that.dataSource = HierarchicalDataSource.create(dataSource).bind(CHANGE, that._dataChangeHandler);\n if (dataSource) {\n if (that.options.autoBind) {\n that.dataSource.fetch();\n }\n }\n },\n setDataSource: function (dataSource) {\n var that = this;\n that.dataSource.unbind(CHANGE, that._dataChangeHandler);\n that.dataSource = dataSource.bind(CHANGE, that._dataChangeHandler);\n if (dataSource) {\n if (that.options.autoBind) {\n that.dataSource.fetch();\n }\n }\n },\n _onDataChange: function (e) {\n var node = e.node;\n var items = e.items;\n var options = this.options;\n var item, i;\n if (!node) {\n this._cleanItems();\n this.element.empty();\n item = this._wrapItem(items[0]);\n this._layout.createRoot(item, outerWidth(this.element), outerHeight(this.element), this.options.type === 'vertical');\n this._view.createRoot(item);\n this._root = item;\n this._colorIdx = 0;\n } else {\n if (items.length) {\n var root = this._getByUid(node.uid);\n root.children = [];\n items = new kendo.data.Query(items)._sortForGrouping(options.valueField, 'desc');\n for (i = 0; i < items.length; i++) {\n item = items[i];\n root.children.push(this._wrapItem(item));\n }\n var htmlSize = this._view.htmlSize(root);\n this._layout.compute(root.children, root.coord, htmlSize);\n this._setColors(root.children);\n this._view.render(root);\n }\n }\n for (i = 0; i < items.length; i++) {\n items[i].load();\n }\n if (node) {\n this.trigger(DATA_BOUND, { node: node });\n }\n },\n _cleanItems: function () {\n var that = this;\n that.angular('cleanup', function () {\n return { elements: that.element.find('.k-leaf div,.k-treemap-title,.k-treemap-title-vertical') };\n });\n },\n _setColors: function (items) {\n var colors = this.options.colors;\n var colorIdx = this._colorIdx;\n var color = colors[colorIdx % colors.length];\n var colorRange, item;\n if (isArray(color)) {\n colorRange = colorsByLength(color[0], color[1], items.length);\n }\n var leafNodes = false;\n for (var i = 0; i < items.length; i++) {\n item = items[i];\n if (!defined(item.color)) {\n if (colorRange) {\n item.color = colorRange[i];\n } else {\n item.color = color;\n }\n }\n if (!item.dataItem.hasChildren) {\n leafNodes = true;\n }\n }\n if (leafNodes) {\n this._colorIdx++;\n }\n },\n _contentSize: function (root) {\n this.view.renderHeight(root);\n },\n _wrapItem: function (item) {\n var wrap = {};\n if (defined(this.options.valueField)) {\n wrap.value = getField(this.options.valueField, item);\n }\n if (defined(this.options.colorField)) {\n wrap.color = getField(this.options.colorField, item);\n }\n if (defined(this.options.textField)) {\n wrap.text = getField(this.options.textField, item);\n }\n wrap.level = item.level();\n wrap.dataItem = item;\n return wrap;\n },\n _getByUid: function (uid) {\n var items = [this._root];\n var item;\n while (items.length) {\n item = items.pop();\n if (item.dataItem.uid === uid) {\n return item;\n }\n if (item.children) {\n items = items.concat(item.children);\n }\n }\n },\n dataItem: function (node) {\n var uid = $(node).attr(kendo.attr('uid')), dataSource = this.dataSource;\n return dataSource && dataSource.getByUid(uid);\n },\n findByUid: function (uid) {\n return this.element.find('.k-treemap-tile[' + kendo.attr('uid') + '=\\'' + uid + '\\']');\n },\n _mouseover: function (e) {\n var target = $(e.target);\n if (target.hasClass('k-leaf')) {\n this._removeActiveState();\n target.removeClass('k-state-hover').addClass('k-state-hover');\n }\n },\n _removeActiveState: function () {\n this.element.find('.k-state-hover').removeClass('k-state-hover');\n },\n _mouseleave: function () {\n this._removeActiveState();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.off(NS);\n if (this.dataSource) {\n this.dataSource.unbind(CHANGE, this._dataChangeHandler);\n }\n this._root = null;\n kendo.unbindResize(this._resizeHandler);\n kendo.destroy(this.element);\n },\n items: function () {\n return $();\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n _resize: function () {\n var root = this._root;\n if (root) {\n var element = this.element;\n var rootElement = element.children();\n root.coord.width = outerWidth(element);\n root.coord.height = outerHeight(element);\n rootElement.css({\n width: root.coord.width,\n height: root.coord.height\n });\n this._resizeItems(root, rootElement);\n }\n },\n _resizeItems: function (root, element) {\n if (root.children && root.children.length) {\n var elements = element.children('.k-treemap-wrap').children();\n var child, childElement;\n this._layout.compute(root.children, root.coord, { text: this._view.titleSize(root, element) });\n for (var idx = 0; idx < root.children.length; idx++) {\n child = root.children[idx];\n childElement = elements.filter('[' + kendo.attr('uid') + '=\\'' + child.dataItem.uid + '\\']');\n this._view.setItemSize(child, childElement);\n this._resizeItems(child, childElement);\n }\n }\n },\n setOptions: function (options) {\n var dataSource = options.dataSource;\n options.dataSource = undefined;\n this._originalOptions = deepExtend(this._originalOptions, options);\n this.options = deepExtend({}, this._originalOptions);\n this._setLayout();\n this._initTheme(this.options);\n Widget.fn._setEvents.call(this, options);\n if (dataSource) {\n this.setDataSource(HierarchicalDataSource.create(dataSource));\n }\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n }\n });\n var Squarified = Class.extend({\n createRoot: function (root, width, height) {\n root.coord = {\n width: width,\n height: height,\n top: 0,\n left: 0\n };\n },\n leaf: function (tree) {\n return !tree.children;\n },\n layoutChildren: function (items, coord) {\n var parentArea = coord.width * coord.height;\n var totalArea = 0, itemsArea = [], i;\n for (i = 0; i < items.length; i++) {\n itemsArea[i] = parseFloat(items[i].value);\n totalArea += itemsArea[i];\n }\n for (i = 0; i < itemsArea.length; i++) {\n items[i].area = parentArea * itemsArea[i] / totalArea;\n }\n var minimumSideValue = this.layoutHorizontal() ? coord.height : coord.width;\n var firstElement = [items[0]];\n var tail = items.slice(1);\n this.squarify(tail, firstElement, minimumSideValue, coord);\n },\n squarify: function (tail, initElement, width, coord) {\n this.computeDim(tail, initElement, width, coord);\n },\n computeDim: function (tail, initElement, width, coord) {\n if (tail.length + initElement.length == 1) {\n var element = tail.length == 1 ? tail : initElement;\n this.layoutLast(element, width, coord);\n return;\n }\n if (tail.length >= 2 && initElement.length === 0) {\n initElement = [tail[0]];\n tail = tail.slice(1);\n }\n if (tail.length === 0) {\n if (initElement.length > 0) {\n this.layoutRow(initElement, width, coord);\n }\n return;\n }\n var firstElement = tail[0];\n if (this.worstAspectRatio(initElement, width) >= this.worstAspectRatio([firstElement].concat(initElement), width)) {\n this.computeDim(tail.slice(1), initElement.concat([firstElement]), width, coord);\n } else {\n var newCoords = this.layoutRow(initElement, width, coord);\n this.computeDim(tail, [], newCoords.dim, newCoords);\n }\n },\n layoutLast: function (items, w, coord) {\n items[0].coord = coord;\n },\n layoutRow: function (items, width, coord) {\n if (this.layoutHorizontal()) {\n return this.layoutV(items, width, coord);\n } else {\n return this.layoutH(items, width, coord);\n }\n },\n orientation: 'h',\n layoutVertical: function () {\n return this.orientation === 'v';\n },\n layoutHorizontal: function () {\n return this.orientation === 'h';\n },\n layoutChange: function () {\n this.orientation = this.layoutVertical() ? 'h' : 'v';\n },\n worstAspectRatio: function (items, width) {\n if (!items || items.length === 0) {\n return MAX_VALUE;\n }\n var areaSum = 0, maxArea = 0, minArea = MAX_VALUE;\n for (var i = 0; i < items.length; i++) {\n var area = items[i].area;\n areaSum += area;\n minArea = minArea < area ? minArea : area;\n maxArea = maxArea > area ? maxArea : area;\n }\n return math.max(width * width * maxArea / (areaSum * areaSum), areaSum * areaSum / (width * width * minArea));\n },\n compute: function (children, rootCoord, htmlSize) {\n if (!(rootCoord.width >= rootCoord.height && this.layoutHorizontal())) {\n this.layoutChange();\n }\n if (children && children.length > 0) {\n var newRootCoord = {\n width: rootCoord.width,\n height: rootCoord.height - htmlSize.text,\n top: 0,\n left: 0\n };\n this.layoutChildren(children, newRootCoord);\n }\n },\n layoutV: function (items, width, coord) {\n var totalArea = this._totalArea(items), top = 0;\n width = round(totalArea / width);\n for (var i = 0; i < items.length; i++) {\n var height = round(items[i].area / width);\n items[i].coord = {\n height: height,\n width: width,\n top: coord.top + top,\n left: coord.left\n };\n top += height;\n }\n var ans = {\n height: coord.height,\n width: coord.width - width,\n top: coord.top,\n left: coord.left + width\n };\n ans.dim = math.min(ans.width, ans.height);\n if (ans.dim != ans.height) {\n this.layoutChange();\n }\n return ans;\n },\n layoutH: function (items, width, coord) {\n var totalArea = this._totalArea(items);\n var height = round(totalArea / width), top = coord.top, left = 0;\n for (var i = 0; i < items.length; i++) {\n items[i].coord = {\n height: height,\n width: round(items[i].area / height),\n top: top,\n left: coord.left + left\n };\n left += items[i].coord.width;\n }\n var ans = {\n height: coord.height - height,\n width: coord.width,\n top: coord.top + height,\n left: coord.left\n };\n ans.dim = math.min(ans.width, ans.height);\n if (ans.dim != ans.width) {\n this.layoutChange();\n }\n return ans;\n },\n _totalArea: function (items) {\n var total = 0;\n for (var i = 0; i < items.length; i++) {\n total += items[i].area;\n }\n return total;\n }\n });\n var SquarifiedView = Class.extend({\n init: function (treeMap, options) {\n this.options = deepExtend({}, this.options, options);\n this.treeMap = treeMap;\n this.element = $(treeMap.element);\n this.offset = 0;\n },\n titleSize: function (item, element) {\n var text = element.children('.k-treemap-title');\n return text.height() || 0;\n },\n htmlSize: function (root) {\n var rootElement = this._getByUid(root.dataItem.uid);\n var htmlSize = { text: 0 };\n if (root.children) {\n this._clean(rootElement);\n var text = this._getText(root);\n if (text) {\n var title = this._createTitle(root);\n rootElement.append(title);\n this._compile(title, root.dataItem);\n htmlSize.text = title.height();\n }\n rootElement.append(this._createWrap());\n this.offset = (outerWidth(rootElement) - rootElement.innerWidth()) / 2;\n }\n return htmlSize;\n },\n _compile: function (element, dataItem) {\n this.treeMap.angular('compile', function () {\n return {\n elements: element,\n data: [{ dataItem: dataItem }]\n };\n });\n },\n _getByUid: function (uid) {\n return this.element.find('.k-treemap-tile[' + kendo.attr('uid') + '=\\'' + uid + '\\']');\n },\n render: function (root) {\n var rootElement = this._getByUid(root.dataItem.uid);\n var children = root.children;\n if (children) {\n var rootWrap = rootElement.find('.k-treemap-wrap');\n for (var i = 0; i < children.length; i++) {\n var leaf = children[i];\n var htmlElement = this._createLeaf(leaf);\n rootWrap.append(htmlElement);\n this._compile(htmlElement.children(), leaf.dataItem);\n this.treeMap.trigger(ITEM_CREATED, { element: htmlElement });\n }\n }\n },\n createRoot: function (root) {\n var htmlElement = this._createLeaf(root);\n this.element.append(htmlElement);\n this._compile(htmlElement.children(), root.dataItem);\n this.treeMap.trigger(ITEM_CREATED, { element: htmlElement });\n },\n _clean: function (root) {\n this.treeMap.angular('cleanup', function () {\n return { elements: root.children(':not(.k-treemap-wrap)') };\n });\n root.css('background-color', '');\n root.removeClass('k-leaf');\n root.removeClass('k-inverse');\n root.empty();\n },\n _createLeaf: function (item) {\n return this._createTile(item).css('background-color', item.color).addClass('k-leaf').toggleClass('k-inverse', this._tileColorBrightness(item) > 180).toggle(item.value !== 0).append($('
        ').html(this._getText(item)));\n },\n _createTile: function (item) {\n var tile = $('
        ');\n this.setItemSize(item, tile);\n if (defined(item.dataItem) && defined(item.dataItem.uid)) {\n tile.attr(kendo.attr('uid'), item.dataItem.uid);\n }\n return tile;\n },\n _itemCoordinates: function (item) {\n var coordinates = {\n width: item.coord.width,\n height: item.coord.height,\n left: item.coord.left,\n top: item.coord.top\n };\n if (coordinates.left && this.offset) {\n coordinates.width += this.offset * 2;\n } else {\n coordinates.width += this.offset;\n }\n if (coordinates.top) {\n coordinates.height += this.offset * 2;\n } else {\n coordinates.height += this.offset;\n }\n return coordinates;\n },\n setItemSize: function (item, element) {\n var coordinates = this._itemCoordinates(item);\n element.css({\n width: coordinates.width,\n height: coordinates.height,\n left: coordinates.left,\n top: coordinates.top\n });\n },\n _getText: function (item) {\n var text = item.text;\n if (this.options.template) {\n text = this._renderTemplate(item);\n }\n return text;\n },\n _renderTemplate: function (item) {\n var titleTemplate = template(this.options.template);\n return titleTemplate({\n dataItem: item.dataItem,\n text: item.text\n });\n },\n _createTitle: function (item) {\n return $('
        ').append($('
        ').html(this._getText(item)));\n },\n _createWrap: function () {\n return $('
        ');\n },\n _tileColorBrightness: function (item) {\n return colorBrightness(item.color);\n }\n });\n var SliceAndDice = Class.extend({\n createRoot: function (root, width, height, vertical) {\n root.coord = {\n width: width,\n height: height,\n top: 0,\n left: 0\n };\n root.vertical = vertical;\n },\n init: function (vertical) {\n this.vertical = vertical;\n this.quotient = vertical ? 1 : 0;\n },\n compute: function (children, rootCoord, htmlSize) {\n if (children.length > 0) {\n var width = rootCoord.width;\n var height = rootCoord.height;\n if (this.vertical) {\n height -= htmlSize.text;\n } else {\n width -= htmlSize.text;\n }\n var newRootCoord = {\n width: width,\n height: height,\n top: 0,\n left: 0\n };\n this.layoutChildren(children, newRootCoord);\n }\n },\n layoutChildren: function (items, coord) {\n var parentArea = coord.width * coord.height;\n var totalArea = 0;\n var itemsArea = [];\n var i;\n for (i = 0; i < items.length; i++) {\n var item = items[i];\n itemsArea[i] = parseFloat(items[i].value);\n totalArea += itemsArea[i];\n item.vertical = this.vertical;\n }\n for (i = 0; i < itemsArea.length; i++) {\n items[i].area = parentArea * itemsArea[i] / totalArea;\n }\n this.sliceAndDice(items, coord);\n },\n sliceAndDice: function (items, coord) {\n var totalArea = this._totalArea(items);\n if (items[0].level % 2 === this.quotient) {\n this.layoutHorizontal(items, coord, totalArea);\n } else {\n this.layoutVertical(items, coord, totalArea);\n }\n },\n layoutHorizontal: function (items, coord, totalArea) {\n var left = 0;\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n var width = item.area / (totalArea / coord.width);\n item.coord = {\n height: coord.height,\n width: width,\n top: coord.top,\n left: coord.left + left\n };\n left += width;\n }\n },\n layoutVertical: function (items, coord, totalArea) {\n var top = 0;\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n var height = item.area / (totalArea / coord.height);\n item.coord = {\n height: height,\n width: coord.width,\n top: coord.top + top,\n left: coord.left\n };\n top += height;\n }\n },\n _totalArea: function (items) {\n var total = 0;\n for (var i = 0; i < items.length; i++) {\n total += items[i].area;\n }\n return total;\n }\n });\n var SliceAndDiceView = SquarifiedView.extend({\n htmlSize: function (root) {\n var rootElement = this._getByUid(root.dataItem.uid);\n var htmlSize = {\n text: 0,\n offset: 0\n };\n if (root.children) {\n this._clean(rootElement);\n var text = this._getText(root);\n if (text) {\n var title = this._createTitle(root);\n rootElement.append(title);\n this._compile(title, root.dataItem);\n if (root.vertical) {\n htmlSize.text = title.height();\n } else {\n htmlSize.text = title.width();\n }\n }\n rootElement.append(this._createWrap());\n this.offset = (outerWidth(rootElement) - rootElement.innerWidth()) / 2;\n }\n return htmlSize;\n },\n titleSize: function (item, element) {\n var size;\n if (item.vertical) {\n size = element.children('.k-treemap-title').height();\n } else {\n size = element.children('.k-treemap-title-vertical').width();\n }\n return size || 0;\n },\n _createTitle: function (item) {\n var title;\n if (item.vertical) {\n title = $('
        ');\n } else {\n title = $('
        ');\n }\n return title.append($('
        ').html(this._getText(item)));\n }\n });\n function getField(field, row) {\n if (row === null) {\n return row;\n }\n var get = getter(field, true);\n return get(row);\n }\n function defined(value) {\n return typeof value !== UNDEFINED;\n }\n function colorsByLength(min, max, length) {\n var minRGBtoDecimal = rgbToDecimal(min);\n var maxRGBtoDecimal = rgbToDecimal(max);\n var isDarker = colorBrightness(min) - colorBrightness(max) < 0;\n var colors = [];\n colors.push(min);\n for (var i = 0; i < length; i++) {\n var rgbColor = {\n r: colorByIndex(minRGBtoDecimal.r, maxRGBtoDecimal.r, i, length, isDarker),\n g: colorByIndex(minRGBtoDecimal.g, maxRGBtoDecimal.g, i, length, isDarker),\n b: colorByIndex(minRGBtoDecimal.b, maxRGBtoDecimal.b, i, length, isDarker)\n };\n colors.push(buildColorFromRGB(rgbColor));\n }\n colors.push(max);\n return colors;\n }\n function colorByIndex(min, max, index, length, isDarker) {\n var minColor = math.min(math.abs(min), math.abs(max));\n var maxColor = math.max(math.abs(min), math.abs(max));\n var step = (maxColor - minColor) / (length + 1);\n var currentStep = step * (index + 1);\n var color;\n if (isDarker) {\n color = minColor + currentStep;\n } else {\n color = maxColor - currentStep;\n }\n return color;\n }\n function buildColorFromRGB(color) {\n return '#' + decimalToRgb(color.r) + decimalToRgb(color.g) + decimalToRgb(color.b);\n }\n function rgbToDecimal(color) {\n color = color.replace('#', '');\n var rgbColor = colorToRGB(color);\n return {\n r: rgbToHex(rgbColor.r),\n g: rgbToHex(rgbColor.g),\n b: rgbToHex(rgbColor.b)\n };\n }\n function decimalToRgb(number) {\n var result = math.round(number).toString(16).toUpperCase();\n if (result.length === 1) {\n result = '0' + result;\n }\n return result;\n }\n function colorToRGB(color) {\n var colorLength = color.length;\n var rgbColor = {};\n if (colorLength === 3) {\n rgbColor.r = color[0];\n rgbColor.g = color[1];\n rgbColor.b = color[2];\n } else {\n rgbColor.r = color.substring(0, 2);\n rgbColor.g = color.substring(2, 4);\n rgbColor.b = color.substring(4, 6);\n }\n return rgbColor;\n }\n function rgbToHex(rgb) {\n return parseInt(rgb.toString(16), 16);\n }\n function colorBrightness(color) {\n var brightness = 0;\n if (color) {\n color = rgbToDecimal(color);\n brightness = math.sqrt(0.241 * color.r * color.r + 0.691 * color.g * color.g + 0.068 * color.b * color.b);\n }\n return brightness;\n }\n function round(value) {\n var power = math.pow(10, 4);\n return math.round(value * power) / power;\n }\n dataviz.ui.plugin(TreeMap);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.angular', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'angular',\n name: 'AngularJS Directives',\n category: 'framework',\n description: 'Adds Kendo UI for AngularJS directives',\n depends: ['core'],\n defer: true\n };\n (function ($, angular, undefined) {\n 'use strict';\n if (!angular || !angular.injector) {\n return;\n }\n var module = angular.module('kendo.directives', []), $injector = angular.injector(['ng']), $parse = $injector.get('$parse'), $timeout = $injector.get('$timeout'), $defaultCompile, $log = $injector.get('$log');\n function withoutTimeout(f) {\n var save = $timeout;\n try {\n $timeout = function (f) {\n return f();\n };\n return f();\n } finally {\n $timeout = save;\n }\n }\n var OPTIONS_NOW;\n var createDataSource = function () {\n var types = {\n TreeList: 'TreeListDataSource',\n TreeView: 'HierarchicalDataSource',\n Scheduler: 'SchedulerDataSource',\n PivotGrid: 'PivotDataSource',\n PivotConfigurator: 'PivotDataSource',\n PanelBar: 'HierarchicalDataSource',\n Menu: '$PLAIN',\n ContextMenu: '$PLAIN'\n };\n var toDataSource = function (dataSource, type) {\n if (type == '$PLAIN') {\n return dataSource;\n }\n return kendo.data[type].create(dataSource);\n };\n return function (scope, element, role, source) {\n var type = types[role] || 'DataSource';\n var current = scope.$eval(source);\n var ds = toDataSource(current, type);\n scope.$watch(source, function (mew) {\n var widget = kendoWidgetInstance(element);\n if (widget && typeof widget.setDataSource == 'function') {\n if (mew !== current && mew !== widget.dataSource) {\n var ds = toDataSource(mew, type);\n widget.setDataSource(ds);\n current = mew;\n }\n }\n });\n return ds;\n };\n }();\n var ignoredAttributes = {\n kDataSource: true,\n kOptions: true,\n kRebind: true,\n kNgModel: true,\n kNgDelay: true\n };\n var ignoredOwnProperties = {\n name: true,\n title: true,\n style: true\n };\n function createWidget(scope, element, attrs, widget, origAttr, controllers) {\n if (!(element instanceof jQuery)) {\n throw new Error('The Kendo UI directives require jQuery to be available before AngularJS. Please include jquery before angular in the document.');\n }\n var kNgDelay = attrs.kNgDelay, delayValue = scope.$eval(kNgDelay);\n controllers = controllers || [];\n var ngModel = controllers[0], ngForm = controllers[1];\n var ctor = $(element)[widget];\n if (!ctor) {\n window.console.error('Could not find: ' + widget);\n return null;\n }\n var parsed = parseOptions(scope, element, attrs, widget, ctor);\n var options = parsed.options;\n if (parsed.unresolved.length) {\n var promises = [];\n for (var i = 0, len = parsed.unresolved.length; i < len; i++) {\n var unresolved = parsed.unresolved[i];\n var promise = $.Deferred(function (d) {\n var unwatch = scope.$watch(unresolved.path, function (newValue) {\n if (newValue !== undefined) {\n unwatch();\n d.resolve();\n }\n });\n }).promise();\n promises.push(promise);\n }\n $.when.apply(null, promises).then(createIt);\n return;\n }\n if (kNgDelay && !delayValue) {\n var root = scope.$root || scope;\n var register = function () {\n var unregister = scope.$watch(kNgDelay, function (newValue) {\n if (newValue !== undefined) {\n unregister();\n element.removeAttr(attrs.$attr.kNgDelay);\n kNgDelay = null;\n $timeout(createIt);\n }\n });\n };\n if (/^\\$(digest|apply)$/.test(root.$$phase)) {\n register();\n } else {\n scope.$apply(register);\n }\n return;\n } else {\n return createIt();\n }\n function createIt() {\n var originalElement;\n if (attrs.kRebind) {\n originalElement = $($(element)[0].cloneNode(true));\n }\n options = parseOptions(scope, element, attrs, widget, ctor).options;\n if (element.is('select')) {\n (function (options) {\n if (options.length > 0) {\n var first = $(options[0]);\n if (!/\\S/.test(first.text()) && /^\\?/.test(first.val())) {\n first.remove();\n }\n for (var i = 0; i < options.length; i++) {\n $(options[i]).off('$destroy');\n }\n }\n }(element[0].options));\n }\n var object = ctor.call(element, OPTIONS_NOW = options).data(widget);\n exposeWidget(object, scope, attrs, widget, origAttr);\n scope.$emit('kendoWidgetCreated', object);\n var destroyRegister = destroyWidgetOnScopeDestroy(scope, object);\n if (attrs.kRebind) {\n setupRebind(object, scope, element, originalElement, attrs.kRebind, destroyRegister, attrs);\n }\n if (attrs.kNgDisabled) {\n var kNgDisabled = attrs.kNgDisabled;\n var isDisabled = scope.$eval(kNgDisabled);\n if (isDisabled) {\n object.enable(!isDisabled);\n }\n bindToKNgDisabled(object, scope, element, kNgDisabled);\n }\n if (attrs.kNgReadonly) {\n var kNgReadonly = attrs.kNgReadonly;\n var isReadonly = scope.$eval(kNgReadonly);\n if (isReadonly) {\n object.readonly(isReadonly);\n }\n bindToKNgReadonly(object, scope, element, kNgReadonly);\n }\n if (attrs.kNgModel) {\n bindToKNgModel(object, scope, attrs.kNgModel);\n }\n if (ngModel) {\n bindToNgModel(object, scope, element, ngModel, ngForm);\n }\n if (object) {\n propagateClassToWidgetWrapper(object, element);\n }\n return object;\n }\n }\n function parseOptions(scope, element, attrs, widget, ctor) {\n var role = widget.replace(/^kendo/, '');\n var unresolved = [];\n var optionsPath = attrs.kOptions || attrs.options;\n var optionsValue = scope.$eval(optionsPath);\n if (optionsPath && optionsValue === undefined) {\n unresolved.push({\n option: 'options',\n path: optionsPath\n });\n }\n var options = angular.extend({}, attrs.defaultOptions, optionsValue);\n function addOption(name, value) {\n var scopeValue = angular.copy(scope.$eval(value));\n if (scopeValue === undefined) {\n unresolved.push({\n option: name,\n path: value\n });\n } else {\n options[name] = scopeValue;\n }\n }\n var widgetOptions = ctor.widget.prototype.options;\n var widgetEvents = ctor.widget.prototype.events;\n $.each(attrs, function (name, value) {\n if (name === 'source' || name === 'kDataSource' || name === 'kScopeField' || name === 'scopeField') {\n return;\n }\n var dataName = 'data' + name.charAt(0).toUpperCase() + name.slice(1);\n if (name.indexOf('on') === 0) {\n var eventKey = name.replace(/^on./, function (prefix) {\n return prefix.charAt(2).toLowerCase();\n });\n if (widgetEvents.indexOf(eventKey) > -1) {\n options[eventKey] = value;\n }\n }\n if (widgetOptions.hasOwnProperty(dataName)) {\n addOption(dataName, value);\n } else if (widgetOptions.hasOwnProperty(name) && !ignoredOwnProperties[name]) {\n addOption(name, value);\n } else if (!ignoredAttributes[name]) {\n var match = name.match(/^k(On)?([A-Z].*)/);\n if (match) {\n var optionName = match[2].charAt(0).toLowerCase() + match[2].slice(1);\n if (match[1] && name != 'kOnLabel') {\n options[optionName] = value;\n } else {\n if (name == 'kOnLabel') {\n optionName = 'onLabel';\n }\n addOption(optionName, value);\n }\n }\n }\n });\n var dataSource = attrs.kDataSource || attrs.source;\n if (dataSource) {\n options.dataSource = createDataSource(scope, element, role, dataSource);\n }\n options.$angular = [scope];\n return {\n options: options,\n unresolved: unresolved\n };\n }\n function bindToKNgDisabled(widget, scope, element, kNgDisabled) {\n if (kendo.ui.PanelBar && widget instanceof kendo.ui.PanelBar || kendo.ui.Menu && widget instanceof kendo.ui.Menu) {\n $log.warn('k-ng-disabled specified on a widget that does not have the enable() method: ' + widget.options.name);\n return;\n }\n scope.$watch(kNgDisabled, function (newValue, oldValue) {\n if (newValue != oldValue) {\n widget.enable(!newValue);\n }\n });\n }\n function bindToKNgReadonly(widget, scope, element, kNgReadonly) {\n if (typeof widget.readonly != 'function') {\n $log.warn('k-ng-readonly specified on a widget that does not have the readonly() method: ' + widget.options.name);\n return;\n }\n scope.$watch(kNgReadonly, function (newValue, oldValue) {\n if (newValue != oldValue) {\n widget.readonly(newValue);\n }\n });\n }\n function exposeWidget(widget, scope, attrs, kendoWidget, origAttr) {\n if (attrs[origAttr]) {\n var set = $parse(attrs[origAttr]).assign;\n if (set) {\n set(scope, widget);\n } else {\n throw new Error(origAttr + ' attribute used but expression in it is not assignable: ' + attrs[kendoWidget]);\n }\n }\n }\n function formValue(element) {\n if (/checkbox|radio/i.test(element.attr('type'))) {\n return element.prop('checked');\n }\n return element.val();\n }\n var formRegExp = /^(input|select|textarea)$/i;\n function isForm(element) {\n return formRegExp.test(element[0].tagName);\n }\n function bindToNgModel(widget, scope, element, ngModel, ngForm) {\n if (!widget.value) {\n return;\n }\n var value;\n var haveChangeOnElement = false;\n if (isForm(element)) {\n value = function () {\n return formValue(element);\n };\n } else {\n value = function () {\n return widget.value();\n };\n }\n var viewRender = function () {\n var val = ngModel.$viewValue;\n if (val === undefined) {\n val = ngModel.$modelValue;\n }\n if (val === undefined) {\n val = null;\n }\n haveChangeOnElement = true;\n setTimeout(function () {\n haveChangeOnElement = false;\n if (widget) {\n var kNgModel = scope[widget.element.attr('k-ng-model')];\n if (kNgModel) {\n val = kNgModel;\n }\n if (widget.options.autoBind === false && !widget.listView.bound()) {\n if (val) {\n widget.value(val);\n }\n } else {\n widget.value(val);\n }\n }\n }, 0);\n };\n ngModel.$render = viewRender;\n setTimeout(function () {\n if (ngModel.$render !== viewRender) {\n ngModel.$render = viewRender;\n ngModel.$render();\n }\n });\n if (isForm(element)) {\n element.on('change', function () {\n haveChangeOnElement = true;\n });\n }\n var onChange = function (pristine) {\n return function () {\n var formPristine;\n if (haveChangeOnElement && !element.is('select')) {\n return;\n }\n if (pristine && ngForm) {\n formPristine = ngForm.$pristine;\n }\n ngModel.$setViewValue(value());\n if (pristine) {\n ngModel.$setPristine();\n if (formPristine) {\n ngForm.$setPristine();\n }\n }\n digest(scope);\n };\n };\n widget.first('change', onChange(false));\n widget.first('spin', onChange(false));\n if (!(kendo.ui.AutoComplete && widget instanceof kendo.ui.AutoComplete)) {\n widget.first('dataBound', onChange(true));\n }\n var currentVal = value();\n if (!isNaN(ngModel.$viewValue) && currentVal != ngModel.$viewValue) {\n if (!ngModel.$isEmpty(ngModel.$viewValue)) {\n widget.value(ngModel.$viewValue);\n } else if (currentVal != null && currentVal !== '' && currentVal != ngModel.$viewValue) {\n ngModel.$setViewValue(currentVal);\n }\n }\n ngModel.$setPristine();\n }\n function bindToKNgModel(widget, scope, kNgModel) {\n if (typeof widget.value != 'function') {\n $log.warn('k-ng-model specified on a widget that does not have the value() method: ' + widget.options.name);\n return;\n }\n var form = $(widget.element).parents('ng-form, form').first();\n var ngForm = kendo.getter(form.attr('name'), true)(scope);\n var getter = $parse(kNgModel);\n var setter = getter.assign;\n var updating = false;\n var valueIsCollection = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect || kendo.ui.RangeSlider && widget instanceof kendo.ui.RangeSlider;\n var length = function (value) {\n return value && valueIsCollection ? value.length : 0;\n };\n var currentValueLength = length(getter(scope));\n widget.$angular_setLogicValue(getter(scope));\n var watchHandler = function (newValue, oldValue) {\n if (newValue === undefined) {\n newValue = null;\n }\n if (updating || newValue == oldValue && length(newValue) == currentValueLength) {\n return;\n }\n currentValueLength = length(newValue);\n widget.$angular_setLogicValue(newValue);\n };\n if (valueIsCollection) {\n scope.$watchCollection(kNgModel, watchHandler);\n } else {\n scope.$watch(kNgModel, watchHandler);\n }\n var changeHandler = function () {\n updating = true;\n if (ngForm && ngForm.$pristine) {\n ngForm.$setDirty();\n }\n digest(scope, function () {\n setter(scope, widget.$angular_getLogicValue());\n currentValueLength = length(getter(scope));\n });\n updating = false;\n };\n widget.first('change', changeHandler);\n widget.first('spin', changeHandler);\n }\n function destroyWidgetOnScopeDestroy(scope, widget) {\n var deregister = scope.$on('$destroy', function () {\n deregister();\n if (widget) {\n kendo.destroy(widget.element);\n widget = null;\n }\n });\n return deregister;\n }\n function propagateClassToWidgetWrapper(widget, element) {\n if (!(window.MutationObserver && widget.wrapper)) {\n return;\n }\n var prevClassList = [].slice.call($(element)[0].classList);\n var mo = new MutationObserver(function (changes) {\n suspend();\n if (!widget) {\n return;\n }\n changes.forEach(function (chg) {\n var w = $(widget.wrapper)[0];\n switch (chg.attributeName) {\n case 'class':\n var currClassList = [].slice.call(chg.target.classList);\n currClassList.forEach(function (cls) {\n if (prevClassList.indexOf(cls) < 0) {\n w.classList.add(cls);\n if (kendo.ui.ComboBox && widget instanceof kendo.ui.ComboBox) {\n widget.input[0].classList.add(cls);\n }\n }\n });\n prevClassList.forEach(function (cls) {\n if (currClassList.indexOf(cls) < 0) {\n w.classList.remove(cls);\n if (kendo.ui.ComboBox && widget instanceof kendo.ui.ComboBox) {\n widget.input[0].classList.remove(cls);\n }\n }\n });\n prevClassList = currClassList;\n break;\n case 'disabled':\n if (typeof widget.enable == 'function' && !widget.element.attr('readonly')) {\n widget.enable(!$(chg.target).attr('disabled'));\n }\n break;\n case 'readonly':\n if (typeof widget.readonly == 'function' && !widget.element.attr('disabled')) {\n widget.readonly(!!$(chg.target).attr('readonly'));\n }\n break;\n }\n });\n resume();\n });\n function suspend() {\n mo.disconnect();\n }\n function resume() {\n mo.observe($(element)[0], { attributes: true });\n }\n resume();\n widget.first('destroy', suspend);\n }\n function setupRebind(widget, scope, element, originalElement, rebindAttr, destroyRegister, attrs) {\n var unregister = scope.$watch(rebindAttr, function (newValue, oldValue) {\n if (!widget._muteRebind && newValue !== oldValue) {\n unregister();\n if (attrs._cleanUp) {\n attrs._cleanUp();\n }\n var templateOptions = WIDGET_TEMPLATE_OPTIONS[widget.options.name];\n if (templateOptions) {\n templateOptions.forEach(function (name) {\n var templateContents = scope.$eval(attrs['k' + name]);\n if (templateContents) {\n originalElement.append($(templateContents).attr(kendo.toHyphens('k' + name), ''));\n }\n });\n }\n var _wrapper = $(widget.wrapper)[0];\n var _element = $(widget.element)[0];\n var isUpload = widget.options.name === 'Upload';\n if (isUpload) {\n element = $(_element);\n }\n var compile = element.injector().get('$compile');\n widget._destroy();\n if (destroyRegister) {\n destroyRegister();\n }\n widget = null;\n if (_element) {\n if (_wrapper) {\n _wrapper.parentNode.replaceChild(_element, _wrapper);\n }\n $(element).replaceWith(originalElement);\n }\n compile(originalElement)(scope);\n }\n }, true);\n digest(scope);\n }\n function bind(f, obj) {\n return function (a, b) {\n return f.call(obj, a, b);\n };\n }\n function setTemplate(key, value) {\n this[key] = kendo.stringify(value);\n }\n module.factory('directiveFactory', [\n '$compile',\n function (compile) {\n var kendoRenderedTimeout;\n var RENDERED = false;\n $defaultCompile = compile;\n var create = function (role, origAttr) {\n return {\n restrict: 'AC',\n require: [\n '?ngModel',\n '^?form'\n ],\n scope: false,\n controller: [\n '$scope',\n '$attrs',\n '$element',\n function ($scope, $attrs) {\n this.template = bind(setTemplate, $attrs);\n $attrs._cleanUp = bind(function () {\n this.template = null;\n $attrs._cleanUp = null;\n }, this);\n }\n ],\n link: function (scope, element, attrs, controllers) {\n var $element = $(element);\n var roleattr = role.replace(/([A-Z])/g, '-$1');\n $element.attr(roleattr, $element.attr('data-' + roleattr));\n $element[0].removeAttribute('data-' + roleattr);\n var widget = createWidget(scope, element, attrs, role, origAttr, controllers);\n if (!widget) {\n return;\n }\n if (kendoRenderedTimeout) {\n clearTimeout(kendoRenderedTimeout);\n }\n kendoRenderedTimeout = setTimeout(function () {\n scope.$emit('kendoRendered');\n if (!RENDERED) {\n RENDERED = true;\n $('form').each(function () {\n var form = $(this).controller('form');\n if (form) {\n form.$setPristine();\n }\n });\n }\n });\n }\n };\n };\n return { create: create };\n }\n ]);\n var TAGNAMES = {\n Editor: 'textarea',\n NumericTextBox: 'input',\n DatePicker: 'input',\n DateTimePicker: 'input',\n TimePicker: 'input',\n AutoComplete: 'input',\n ColorPicker: 'input',\n MaskedTextBox: 'input',\n MultiSelect: 'input',\n Upload: 'input',\n Validator: 'form',\n Button: 'button',\n MobileButton: 'a',\n MobileBackButton: 'a',\n MobileDetailButton: 'a',\n ListView: 'ul',\n MobileListView: 'ul',\n ScrollView: 'div',\n PanelBar: 'ul',\n TreeView: 'ul',\n Menu: 'ul',\n ContextMenu: 'ul',\n ActionSheet: 'ul',\n Switch: 'input'\n };\n var SKIP_SHORTCUTS = [\n 'MobileView',\n 'MobileDrawer',\n 'MobileLayout',\n 'MobileSplitView',\n 'MobilePane',\n 'MobileModalView'\n ];\n var MANUAL_DIRECTIVES = [\n 'MobileApplication',\n 'MobileView',\n 'MobileModalView',\n 'MobileLayout',\n 'MobileActionSheet',\n 'MobileDrawer',\n 'MobileSplitView',\n 'MobilePane',\n 'MobileScrollView',\n 'MobilePopOver'\n ];\n angular.forEach([\n 'MobileNavBar',\n 'MobileButton',\n 'MobileBackButton',\n 'MobileDetailButton',\n 'MobileTabStrip',\n 'MobileScrollView',\n 'MobileScroller'\n ], function (widget) {\n MANUAL_DIRECTIVES.push(widget);\n widget = 'kendo' + widget;\n module.directive(widget, function () {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n createWidget(scope, element, attrs, widget, widget);\n }\n };\n });\n });\n function createDirectives(klass, isMobile) {\n function make(directiveName, widgetName) {\n module.directive(directiveName, [\n 'directiveFactory',\n function (directiveFactory) {\n return directiveFactory.create(widgetName, directiveName);\n }\n ]);\n }\n var name = isMobile ? 'Mobile' : '';\n name += klass.fn.options.name;\n var className = name;\n var shortcut = 'kendo' + name.charAt(0) + name.substr(1).toLowerCase();\n name = 'kendo' + name;\n var dashed = name.replace(/([A-Z])/g, '-$1');\n if (SKIP_SHORTCUTS.indexOf(name.replace('kendo', '')) == -1) {\n var names = name === shortcut ? [name] : [\n name,\n shortcut\n ];\n angular.forEach(names, function (directiveName) {\n module.directive(directiveName, function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element, attributes) {\n var tag = TAGNAMES[className] || 'div';\n var scopeField = attributes.kScopeField || attributes.scopeField;\n return '<' + tag + ' ' + dashed + (scopeField ? '=\"' + scopeField + '\"' : '') + '>' + element.html() + '';\n }\n };\n });\n });\n }\n if (MANUAL_DIRECTIVES.indexOf(name.replace('kendo', '')) > -1) {\n return;\n }\n make(name, name);\n if (shortcut != name) {\n make(shortcut, name);\n }\n }\n function kendoWidgetInstance(el) {\n el = $(el);\n return kendo.widgetInstance(el, kendo.ui) || kendo.widgetInstance(el, kendo.mobile.ui) || kendo.widgetInstance(el, kendo.dataviz.ui);\n }\n function digest(scope, func) {\n var root = scope.$root || scope;\n var isDigesting = /^\\$(digest|apply)$/.test(root.$$phase);\n if (func) {\n if (isDigesting) {\n func();\n } else {\n root.$apply(func);\n }\n } else if (!isDigesting) {\n root.$digest();\n }\n }\n function destroyScope(scope, el) {\n scope.$destroy();\n if (el) {\n $(el).removeData('$scope').removeData('$$kendoScope').removeData('$isolateScope').removeData('$isolateScopeNoTemplate').removeClass('ng-scope');\n }\n }\n var encode = kendo.htmlEncode;\n var open = /{{/g;\n var close = /}}/g;\n var encOpen = '{​{';\n var encClose = '}​}';\n kendo.htmlEncode = function (str) {\n return encode(str).replace(open, encOpen).replace(close, encClose);\n };\n var pendingPatches = [];\n function defadvice(klass, methodName, func) {\n if ($.isArray(klass)) {\n return angular.forEach(klass, function (klass) {\n defadvice(klass, methodName, func);\n });\n }\n if (typeof klass == 'string') {\n var a = klass.split('.');\n var x = kendo;\n while (x && a.length > 0) {\n x = x[a.shift()];\n }\n if (!x) {\n pendingPatches.push([\n klass,\n methodName,\n func\n ]);\n return false;\n }\n klass = x.prototype;\n }\n var origMethod = klass[methodName];\n klass[methodName] = function () {\n var self = this, args = arguments;\n return func.apply({\n self: self,\n next: function () {\n return origMethod.apply(self, arguments.length > 0 ? arguments : args);\n }\n }, args);\n };\n return true;\n }\n kendo.onWidgetRegistered(function (entry) {\n pendingPatches = $.grep(pendingPatches, function (args) {\n return !defadvice.apply(null, args);\n });\n createDirectives(entry.widget, entry.prefix == 'Mobile');\n });\n defadvice([\n 'ui.Widget',\n 'mobile.ui.Widget'\n ], 'angular', function (cmd, arg) {\n var self = this.self;\n if (cmd == 'init') {\n if (!arg && OPTIONS_NOW) {\n arg = OPTIONS_NOW;\n }\n OPTIONS_NOW = null;\n if (arg && arg.$angular) {\n self.$angular_scope = arg.$angular[0];\n self.$angular_init(self.element, arg);\n }\n return;\n }\n var scope = self.$angular_scope;\n if (scope) {\n withoutTimeout(function () {\n var x = arg(), elements = x.elements, data = x.data;\n if (elements.length > 0) {\n switch (cmd) {\n case 'cleanup':\n angular.forEach(elements, function (el) {\n var itemScope = $(el).data('$$kendoScope');\n if (itemScope && itemScope !== scope && itemScope.$$kendoScope) {\n destroyScope(itemScope, el);\n }\n });\n break;\n case 'compile':\n var injector = self.element.injector();\n var compile = injector ? injector.get('$compile') : $defaultCompile;\n angular.forEach(elements, function (el, i) {\n var itemScope;\n if (x.scopeFrom) {\n itemScope = x.scopeFrom;\n } else {\n var vars = data && data[i];\n if (vars !== undefined) {\n itemScope = $.extend(scope.$new(), vars);\n itemScope.$$kendoScope = true;\n } else {\n itemScope = scope;\n }\n }\n $(el).data('$$kendoScope', itemScope);\n compile(el)(itemScope);\n });\n digest(scope);\n break;\n }\n }\n });\n }\n });\n defadvice('ui.Widget', '$angular_getLogicValue', function () {\n return this.self.value();\n });\n defadvice('ui.Widget', '$angular_setLogicValue', function (val) {\n this.self.value(val);\n });\n defadvice('ui.Select', '$angular_getLogicValue', function () {\n var item = this.self.dataItem(), valueField = this.self.options.dataValueField;\n if (item) {\n if (this.self.options.valuePrimitive) {\n if (!!valueField) {\n return item[valueField];\n } else {\n return item;\n }\n } else {\n return item.toJSON();\n }\n } else {\n return null;\n }\n });\n defadvice('ui.Select', '$angular_setLogicValue', function (val) {\n var self = this.self;\n var options = self.options;\n var valueField = options.dataValueField;\n var text = options.text || '';\n if (val === undefined) {\n val = '';\n }\n if (valueField && !options.valuePrimitive && val) {\n text = val[options.dataTextField] || '';\n val = val[valueField || options.dataTextField];\n }\n if (self.options.autoBind === false && !self.listView.bound()) {\n if (!text && val && options.valuePrimitive) {\n self.value(val);\n } else {\n self._preselect(val, text);\n }\n } else {\n self.value(val);\n }\n });\n defadvice('ui.MultiSelect', '$angular_getLogicValue', function () {\n var value = this.self.dataItems().slice(0);\n var valueField = this.self.options.dataValueField;\n if (valueField && this.self.options.valuePrimitive) {\n value = $.map(value, function (item) {\n return item[valueField];\n });\n }\n return value;\n });\n defadvice('ui.MultiSelect', '$angular_setLogicValue', function (val) {\n if (val == null) {\n val = [];\n }\n var self = this.self;\n var options = self.options;\n var valueField = options.dataValueField;\n var data = val;\n if (valueField && !options.valuePrimitive) {\n val = $.map(val, function (item) {\n return item[valueField];\n });\n }\n if (options.autoBind === false && !options.valuePrimitive && !self.listView.bound()) {\n self._preselect(data, val);\n } else {\n self.value(val);\n }\n });\n defadvice('ui.Widget', '$angular_init', function (element, options) {\n var self = this.self;\n if (options && !$.isArray(options)) {\n var scope = self.$angular_scope;\n for (var i = self.events.length; --i >= 0;) {\n var event = self.events[i];\n var handler = options[event];\n if (handler && typeof handler == 'string') {\n options[event] = self.$angular_makeEventHandler(event, scope, handler);\n }\n }\n }\n });\n defadvice('ui.Widget', '$angular_makeEventHandler', function (event, scope, handler) {\n handler = $parse(handler);\n return function (e) {\n digest(scope, function () {\n handler(scope, { kendoEvent: e });\n });\n };\n });\n defadvice([\n 'ui.Grid',\n 'ui.ListView',\n 'ui.TreeView',\n 'ui.PanelBar'\n ], '$angular_makeEventHandler', function (event, scope, handler) {\n if (event != 'change') {\n return this.next();\n }\n handler = $parse(handler);\n return function (ev) {\n var widget = ev.sender;\n var options = widget.options;\n var cell, multiple, locals = { kendoEvent: ev }, elems, items, columns, colIdx;\n if (angular.isString(options.selectable)) {\n cell = options.selectable.indexOf('cell') !== -1;\n multiple = options.selectable.indexOf('multiple') !== -1;\n }\n if (widget._checkBoxSelection) {\n multiple = true;\n }\n elems = locals.selected = this.select();\n items = locals.data = [];\n columns = locals.columns = [];\n for (var i = 0; i < elems.length; i++) {\n var item = cell ? elems[i].parentNode : elems[i];\n var dataItem = widget.dataItem(item);\n if (cell) {\n if (angular.element.inArray(dataItem, items) < 0) {\n items.push(dataItem);\n }\n colIdx = angular.element(elems[i]).index();\n if (angular.element.inArray(colIdx, columns) < 0) {\n columns.push(colIdx);\n }\n } else {\n items.push(dataItem);\n }\n }\n if (!multiple) {\n locals.dataItem = locals.data = items[0];\n locals.angularDataItem = kendo.proxyModelSetters(locals.dataItem);\n locals.selected = elems[0];\n }\n digest(scope, function () {\n handler(scope, locals);\n });\n };\n });\n defadvice('ui.Grid', '$angular_init', function (element, options) {\n this.next();\n if (options.columns) {\n var settings = $.extend({}, kendo.Template, options.templateSettings);\n angular.forEach(options.columns, function (col) {\n if (col.field && !col.template && !col.format && !col.values && (col.encoded === undefined || col.encoded)) {\n col.template = '#: ' + kendo.expr(col.field, settings.paramName) + '#';\n }\n });\n }\n });\n {\n defadvice('mobile.ui.ButtonGroup', 'value', function (mew) {\n var self = this.self;\n if (mew != null) {\n self.select(self.element.children('li.km-button').eq(mew));\n self.trigger('change');\n self.trigger('select', { index: self.selectedIndex });\n }\n return self.selectedIndex;\n });\n defadvice('mobile.ui.ButtonGroup', '_select', function () {\n this.next();\n this.self.trigger('change');\n });\n }\n module.directive('kendoMobileApplication', function () {\n return {\n terminal: true,\n link: function (scope, element, attrs) {\n createWidget(scope, element, attrs, 'kendoMobileApplication', 'kendoMobileApplication');\n }\n };\n }).directive('kendoMobileView', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileView', 'kendoMobileView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileDrawer', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileDrawer', 'kendoMobileDrawer');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileModalView', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileModalView', 'kendoMobileModalView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileSplitView', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileSplitView', 'kendoMobileSplitView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n }\n }\n };\n }).directive('kendoMobilePane', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n createWidget(scope, element, attrs, 'kendoMobilePane', 'kendoMobilePane');\n }\n }\n };\n }).directive('kendoMobileLayout', function () {\n return {\n link: {\n pre: function (scope, element, attrs) {\n createWidget(scope, element, attrs, 'kendoMobileLayout', 'kendoMobileLayout');\n }\n }\n };\n }).directive('kendoMobileActionSheet', function () {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n element.find('a[k-action]').each(function () {\n $(this).attr('data-' + kendo.ns + 'action', $(this).attr('k-action'));\n });\n createWidget(scope, element, attrs, 'kendoMobileActionSheet', 'kendoMobileActionSheet');\n }\n };\n }).directive('kendoMobilePopOver', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n createWidget(scope, element, attrs, 'kendoMobilePopOver', 'kendoMobilePopOver');\n }\n }\n };\n }).directive('kendoViewTitle', function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element) {\n return '' + element.html() + '';\n }\n };\n }).directive('kendoMobileHeader', function () {\n return {\n restrict: 'E',\n link: function (scope, element) {\n element.addClass('km-header').attr('data-role', 'header');\n }\n };\n }).directive('kendoMobileFooter', function () {\n return {\n restrict: 'E',\n link: function (scope, element) {\n element.addClass('km-footer').attr('data-role', 'footer');\n }\n };\n }).directive('kendoMobileScrollViewPage', function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element) {\n return '
        ' + element.html() + '
        ';\n }\n };\n });\n angular.forEach([\n 'align',\n 'icon',\n 'rel',\n 'transition',\n 'actionsheetContext'\n ], function (attr) {\n var kAttr = 'k' + attr.slice(0, 1).toUpperCase() + attr.slice(1);\n module.directive(kAttr, function () {\n return {\n restrict: 'A',\n priority: 2,\n link: function (scope, element, attrs) {\n element.attr(kendo.attr(kendo.toHyphens(attr)), scope.$eval(attrs[kAttr]));\n }\n };\n });\n });\n var WIDGET_TEMPLATE_OPTIONS = {\n 'TreeMap': ['Template'],\n 'MobileListView': [\n 'HeaderTemplate',\n 'Template'\n ],\n 'MobileScrollView': [\n 'EmptyTemplate',\n 'Template'\n ],\n 'Grid': [\n 'AltRowTemplate',\n 'DetailTemplate',\n 'RowTemplate'\n ],\n 'ListView': [\n 'EditTemplate',\n 'Template',\n 'AltTemplate'\n ],\n 'Pager': [\n 'SelectTemplate',\n 'LinkTemplate'\n ],\n 'PivotGrid': [\n 'ColumnHeaderTemplate',\n 'DataCellTemplate',\n 'RowHeaderTemplate'\n ],\n 'Scheduler': [\n 'AllDayEventTemplate',\n 'DateHeaderTemplate',\n 'EventTemplate',\n 'MajorTimeHeaderTemplate',\n 'MinorTimeHeaderTemplate'\n ],\n 'ScrollView': ['Template'],\n 'PanelBar': ['Template'],\n 'TreeView': ['Template'],\n 'Validator': ['ErrorTemplate']\n };\n (function () {\n var templateDirectives = {};\n angular.forEach(WIDGET_TEMPLATE_OPTIONS, function (templates, widget) {\n angular.forEach(templates, function (template) {\n if (!templateDirectives[template]) {\n templateDirectives[template] = [];\n }\n templateDirectives[template].push('?^^kendo' + widget);\n });\n });\n angular.forEach(templateDirectives, function (parents, directive) {\n var templateName = 'k' + directive;\n var attrName = kendo.toHyphens(templateName);\n module.directive(templateName, function () {\n return {\n restrict: 'A',\n require: parents,\n terminal: true,\n compile: function ($element, $attrs) {\n if ($attrs[templateName] !== '') {\n return;\n }\n $element.removeAttr(attrName);\n var template = $element[0].outerHTML;\n return function (scope, element, attrs, controllers) {\n var controller;\n while (!controller && controllers.length) {\n controller = controllers.shift();\n }\n if (!controller) {\n $log.warn(attrName + ' without a matching parent widget found. It can be one of the following: ' + parents.join(', '));\n } else {\n controller.template(templateName, template);\n element.remove();\n }\n };\n }\n };\n });\n });\n }());\n }(window.kendo.jQuery, window.angular));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz', [\n 'kendo.core',\n 'kendo.fx',\n 'kendo.router',\n 'kendo.view',\n 'kendo.data.odata',\n 'kendo.data.xml',\n 'kendo.data',\n 'kendo.data.signalr',\n 'kendo.binder',\n 'kendo.userevents',\n 'kendo.draganddrop',\n 'kendo.mobile.scroller',\n 'kendo.popup',\n 'kendo.tooltip',\n 'kendo.drawing',\n 'kendo.dataviz.core',\n 'kendo.dataviz.themes',\n 'kendo.dataviz.chart',\n 'kendo.dataviz.gauge',\n 'kendo.dataviz.barcode',\n 'kendo.dataviz.qrcode',\n 'kendo.dataviz.stock',\n 'kendo.dataviz.sparkline',\n 'kendo.dataviz.map',\n 'kendo.dataviz.diagram',\n 'kendo.dataviz.treemap',\n 'kendo.angular'\n ], f);\n}(function () {\n 'bundle all';\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.touch', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'touch',\n name: 'Touch',\n category: 'mobile',\n description: 'The kendo Touch widget provides a cross-platform compatible API for handling user-initiated touch events, multi-touch gestures and event sequences (drag, swipe, etc.). ',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, proxy = $.proxy, abs = Math.abs, MAX_DOUBLE_TAP_DISTANCE = 20;\n var Touch = 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.element;\n that.wrapper = element;\n function eventProxy(name) {\n return function (e) {\n that._triggerTouch(name, e);\n };\n }\n function gestureEventProxy(name) {\n return function (e) {\n that.trigger(name, {\n touches: e.touches,\n distance: e.distance,\n center: e.center,\n event: e.event\n });\n };\n }\n that.events = new kendo.UserEvents(element, {\n filter: options.filter,\n surface: options.surface,\n minHold: options.minHold,\n multiTouch: options.multiTouch,\n allowSelection: true,\n fastTap: options.fastTap,\n press: eventProxy('touchstart'),\n hold: eventProxy('hold'),\n tap: proxy(that, '_tap'),\n gesturestart: gestureEventProxy('gesturestart'),\n gesturechange: gestureEventProxy('gesturechange'),\n gestureend: gestureEventProxy('gestureend')\n });\n if (options.enableSwipe) {\n that.events.bind('start', proxy(that, '_swipestart'));\n that.events.bind('move', proxy(that, '_swipemove'));\n } else {\n that.events.bind('start', proxy(that, '_dragstart'));\n that.events.bind('move', eventProxy('drag'));\n that.events.bind('end', eventProxy('dragend'));\n }\n kendo.notify(that);\n },\n events: [\n 'touchstart',\n 'dragstart',\n 'drag',\n 'dragend',\n 'tap',\n 'doubletap',\n 'hold',\n 'swipe',\n 'gesturestart',\n 'gesturechange',\n 'gestureend'\n ],\n options: {\n name: 'Touch',\n surface: null,\n global: false,\n fastTap: false,\n filter: null,\n multiTouch: false,\n enableSwipe: false,\n minXDelta: 30,\n maxYDelta: 20,\n maxDuration: 1000,\n minHold: 800,\n doubleTapTimeout: 800\n },\n cancel: function () {\n this.events.cancel();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.events.destroy();\n },\n _triggerTouch: function (type, e) {\n if (this.trigger(type, {\n touch: e.touch,\n event: e.event\n })) {\n e.preventDefault();\n }\n },\n _tap: function (e) {\n var that = this, lastTap = that.lastTap, touch = e.touch;\n if (lastTap && touch.endTime - lastTap.endTime < that.options.doubleTapTimeout && kendo.touchDelta(touch, lastTap).distance < MAX_DOUBLE_TAP_DISTANCE) {\n that._triggerTouch('doubletap', e);\n that.lastTap = null;\n } else {\n that._triggerTouch('tap', e);\n that.lastTap = touch;\n }\n },\n _dragstart: function (e) {\n this._triggerTouch('dragstart', e);\n },\n _swipestart: function (e) {\n if (abs(e.x.velocity) * 2 >= abs(e.y.velocity)) {\n e.sender.capture();\n }\n },\n _swipemove: function (e) {\n var that = this, options = that.options, touch = e.touch, duration = e.event.timeStamp - touch.startTime, direction = touch.x.initialDelta > 0 ? 'right' : 'left';\n if (abs(touch.x.initialDelta) >= options.minXDelta && abs(touch.y.initialDelta) < options.maxYDelta && duration < options.maxDuration) {\n that.trigger('swipe', {\n direction: direction,\n touch: e.touch\n });\n touch.cancel();\n }\n }\n });\n kendo.ui.plugin(Touch);\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.view', [\n 'kendo.core',\n 'kendo.fx',\n 'kendo.mobile.scroller',\n 'kendo.view'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.view',\n name: 'View',\n category: 'mobile',\n description: 'Mobile View',\n depends: [\n 'core',\n 'fx',\n 'mobile.scroller',\n 'view'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, attr = kendo.attr, Widget = ui.Widget, ViewClone = kendo.ViewClone, INIT = 'init', UI_OVERLAY = '
        ', BEFORE_SHOW = 'beforeShow', SHOW = 'show', AFTER_SHOW = 'afterShow', BEFORE_HIDE = 'beforeHide', TRANSITION_END = 'transitionEnd', TRANSITION_START = 'transitionStart', HIDE = 'hide', DESTROY = 'destroy', attrValue = kendo.attrValue, roleSelector = kendo.roleSelector, directiveSelector = kendo.directiveSelector, compileMobileDirective = kendo.compileMobileDirective;\n function initPopOvers(element) {\n var popovers = element.find(roleSelector('popover')), idx, length, roles = ui.roles;\n for (idx = 0, length = popovers.length; idx < length; idx++) {\n kendo.initWidget(popovers[idx], {}, roles);\n }\n }\n function preventScrollIfNotInput(e) {\n if (!kendo.triggeredByInput(e)) {\n e.preventDefault();\n }\n }\n var View = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this.params = {};\n $.extend(this, options);\n this.transition = this.transition || this.defaultTransition;\n this._id();\n if (!this.options.$angular) {\n this._layout();\n this._overlay();\n this._scroller();\n this._model();\n } else {\n this._overlay();\n }\n },\n events: [\n INIT,\n BEFORE_SHOW,\n SHOW,\n AFTER_SHOW,\n BEFORE_HIDE,\n HIDE,\n DESTROY,\n TRANSITION_START,\n TRANSITION_END\n ],\n options: {\n name: 'View',\n title: '',\n layout: null,\n getLayout: $.noop,\n reload: false,\n transition: '',\n defaultTransition: '',\n useNativeScrolling: false,\n stretch: false,\n zoom: false,\n model: null,\n modelScope: window,\n scroller: {},\n initWidgets: true\n },\n enable: function (enable) {\n if (typeof enable == 'undefined') {\n enable = true;\n }\n if (enable) {\n this.overlay.hide();\n } else {\n this.overlay.show();\n }\n },\n destroy: function () {\n if (this.layout) {\n this.layout.detach(this);\n }\n this.trigger(DESTROY);\n Widget.fn.destroy.call(this);\n if (this.scroller) {\n this.scroller.destroy();\n }\n if (this.options.$angular) {\n this.element.scope().$destroy();\n }\n kendo.destroy(this.element);\n },\n purge: function () {\n this.destroy();\n this.element.remove();\n },\n triggerBeforeShow: function () {\n if (this.trigger(BEFORE_SHOW, { view: this })) {\n return false;\n }\n return true;\n },\n triggerBeforeHide: function () {\n if (this.trigger(BEFORE_HIDE, { view: this })) {\n return false;\n }\n return true;\n },\n showStart: function () {\n var element = this.element;\n element.css('display', '');\n if (!this.inited) {\n this.inited = true;\n this.trigger(INIT, { view: this });\n } else {\n this._invokeNgController();\n }\n if (this.layout) {\n this.layout.attach(this);\n }\n this._padIfNativeScrolling();\n this.trigger(SHOW, { view: this });\n kendo.resize(element);\n },\n showEnd: function () {\n this.trigger(AFTER_SHOW, { view: this });\n this._padIfNativeScrolling();\n },\n hideEnd: function () {\n var that = this;\n that.element.hide();\n that.trigger(HIDE, { view: that });\n if (that.layout) {\n that.layout.trigger(HIDE, {\n view: that,\n layout: that.layout\n });\n }\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 _padIfNativeScrolling: function () {\n if (mobile.appLevelNativeScrolling()) {\n var isAndroid = kendo.support.mobileOS && kendo.support.mobileOS.android, skin = mobile.application.skin() || '', isAndroidForced = mobile.application.os.android || skin.indexOf('android') > -1, hasPlatformIndependentSkin = skin === 'flat' || skin.indexOf('material') > -1, topContainer = (isAndroid || isAndroidForced) && !hasPlatformIndependentSkin ? 'footer' : 'header', bottomContainer = (isAndroid || isAndroidForced) && !hasPlatformIndependentSkin ? 'header' : 'footer';\n this.content.css({\n paddingTop: this[topContainer].height(),\n paddingBottom: this[bottomContainer].height()\n });\n }\n },\n contentElement: function () {\n var that = this;\n return that.options.stretch ? that.content : that.scrollerContent;\n },\n clone: function () {\n return new ViewClone(this);\n },\n _scroller: function () {\n var that = this;\n if (mobile.appLevelNativeScrolling()) {\n return;\n }\n if (that.options.stretch) {\n that.content.addClass('km-stretched-view');\n } else {\n that.content.kendoMobileScroller($.extend(that.options.scroller, {\n zoom: that.options.zoom,\n useNative: that.options.useNativeScrolling\n }));\n that.scroller = that.content.data('kendoMobileScroller');\n that.scrollerContent = that.scroller.scrollElement;\n }\n if (kendo.support.kineticScrollNeeded) {\n $(that.element).on('touchmove', '.km-header', preventScrollIfNotInput);\n if (!that.options.useNativeScrolling && !that.options.stretch) {\n $(that.element).on('touchmove', '.km-content', preventScrollIfNotInput);\n }\n }\n },\n _model: function () {\n var that = this, element = that.element, model = that.options.model;\n if (typeof model === 'string') {\n model = kendo.getter(model)(that.options.modelScope);\n }\n that.model = model;\n initPopOvers(element);\n that.element.css('display', '');\n if (that.options.initWidgets) {\n if (model) {\n kendo.bind(element, model, ui, kendo.ui, kendo.dataviz.ui);\n } else {\n mobile.init(element.children());\n }\n }\n that.element.css('display', 'none');\n },\n _id: function () {\n var element = this.element, idAttrValue = element.attr('id') || '';\n this.id = attrValue(element, 'url') || '#' + idAttrValue;\n if (this.id == '#') {\n this.id = kendo.guid();\n element.attr('id', this.id);\n }\n },\n _layout: function () {\n var contentSelector = roleSelector('content'), element = this.element;\n element.addClass('km-view');\n this.header = element.children(roleSelector('header')).addClass('km-header');\n this.footer = element.children(roleSelector('footer')).addClass('km-footer');\n if (!element.children(contentSelector)[0]) {\n element.wrapInner('
        ');\n }\n this.content = element.children(roleSelector('content')).addClass('km-content');\n this.element.prepend(this.header).append(this.footer);\n this.layout = this.options.getLayout(this.layout);\n if (this.layout) {\n this.layout.setup(this);\n }\n },\n _overlay: function () {\n this.overlay = $(UI_OVERLAY).appendTo(this.element);\n },\n _invokeNgController: function () {\n var controller, scope;\n if (this.options.$angular) {\n controller = this.element.controller();\n scope = this.options.$angular[0];\n if (controller) {\n var callback = $.proxy(this, '_callController', controller, scope);\n if (/^\\$(digest|apply)$/.test(scope.$$phase)) {\n callback();\n } else {\n scope.$apply(callback);\n }\n }\n }\n },\n _callController: function (controller, scope) {\n this.element.injector().invoke(controller.constructor, controller, { $scope: scope });\n }\n });\n function initWidgets(collection) {\n collection.each(function () {\n kendo.initWidget($(this), {}, ui.roles);\n });\n }\n var Layout = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n element = this.element;\n this.header = element.children(this._locate('header')).addClass('km-header');\n this.footer = element.children(this._locate('footer')).addClass('km-footer');\n this.elements = this.header.add(this.footer);\n initPopOvers(element);\n if (!this.options.$angular) {\n kendo.mobile.init(this.element.children());\n }\n this.element.detach();\n this.trigger(INIT, { layout: this });\n },\n _locate: function (selectors) {\n return this.options.$angular ? directiveSelector(selectors) : roleSelector(selectors);\n },\n options: {\n name: 'Layout',\n id: null,\n platform: null\n },\n events: [\n INIT,\n SHOW,\n HIDE\n ],\n setup: function (view) {\n if (!view.header[0]) {\n view.header = this.header;\n }\n if (!view.footer[0]) {\n view.footer = this.footer;\n }\n },\n detach: function (view) {\n var that = this;\n if (view.header === that.header && that.header[0]) {\n view.element.prepend(that.header.detach()[0].cloneNode(true));\n }\n if (view.footer === that.footer && that.footer.length) {\n view.element.append(that.footer.detach()[0].cloneNode(true));\n }\n },\n attach: function (view) {\n var that = this, previousView = that.currentView;\n if (previousView) {\n that.detach(previousView);\n }\n if (view.header === that.header) {\n that.header.detach();\n view.element.children(roleSelector('header')).remove();\n view.element.prepend(that.header);\n }\n if (view.footer === that.footer) {\n that.footer.detach();\n view.element.children(roleSelector('footer')).remove();\n view.element.append(that.footer);\n }\n that.trigger(SHOW, {\n layout: that,\n view: view\n });\n that.currentView = view;\n }\n });\n var Observable = kendo.Observable, bodyRegExp = /]*>(([\\u000a\\u000d\\u2028\\u2029]|.)*)<\\/body>/i, LOAD_START = 'loadStart', LOAD_COMPLETE = 'loadComplete', SHOW_START = 'showStart', SAME_VIEW_REQUESTED = 'sameViewRequested', VIEW_SHOW = 'viewShow', VIEW_TYPE_DETERMINED = 'viewTypeDetermined', AFTER = 'after';\n var ViewEngine = Observable.extend({\n init: function (options) {\n var that = this, views, errorMessage, container, collection;\n Observable.fn.init.call(that);\n $.extend(that, options);\n that.sandbox = $('
        ');\n container = that.container;\n views = that._hideViews(container);\n that.rootView = views.first();\n if (!that.rootView[0] && options.rootNeeded) {\n if (container[0] == kendo.mobile.application.element[0]) {\n errorMessage = 'Your kendo mobile application element does not contain any direct child elements with data-role=\"view\" attribute set. Make sure that you instantiate the mobile application using the correct container.';\n } else {\n errorMessage = 'Your pane element does not contain any direct child elements with data-role=\"view\" attribute set.';\n }\n throw new Error(errorMessage);\n }\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.getLayoutProxy = $.proxy(this, '_getLayout');\n that._setupLayouts(container);\n collection = container.children(that._locate('modalview drawer'));\n if (that.$angular) {\n that.$angular[0].viewOptions = {\n defaultTransition: that.transition,\n loader: that.loader,\n container: that.container,\n getLayout: that.getLayoutProxy\n };\n collection.each(function (idx, element) {\n compileMobileDirective($(element), options.$angular[0]);\n });\n } else {\n initWidgets(collection);\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 kendo.destroy(this.container);\n for (var id in this.layouts) {\n this.layouts[id].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, showClosure = function (view) {\n return that.viewContainer.show(view, transition, url);\n }, 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 showClosure(view);\n } else {\n if (this.serverNavigation) {\n location.href = url;\n } else {\n that._loadView(url, showClosure);\n }\n return true;\n }\n },\n append: function (html, url) {\n var sandbox = this.sandbox, urlPath = (url || '').split('?')[0], container = this.container, views, modalViews, view;\n if (bodyRegExp.test(html)) {\n html = RegExp.$1;\n }\n sandbox[0].innerHTML = html;\n container.append(sandbox.children('script, style'));\n views = this._hideViews(sandbox);\n view = views.first();\n if (!view.length) {\n views = view = sandbox.wrapInner('
        ').children();\n }\n if (urlPath) {\n view.hide().attr(attr('url'), urlPath);\n }\n this._setupLayouts(sandbox);\n modalViews = sandbox.children(this._locate('modalview drawer'));\n container.append(sandbox.children(this._locate('layout modalview drawer')).add(views));\n initWidgets(modalViews);\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 return element;\n },\n _createView: function (element) {\n if (this.$angular) {\n return compileMobileDirective(element, this.$angular[0]);\n } else {\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 },\n _getLayout: function (name) {\n if (name === '') {\n return null;\n }\n return name ? this.layouts[name] : this.layouts[this.layout];\n },\n _loadView: function (url, callback) {\n if (this._xhr) {\n this._xhr.abort();\n }\n this.trigger(LOAD_START);\n this._xhr = $.get(kendo.absoluteURL(url, this.remoteViewURLPrefix), 'html').always($.proxy(this, '_xhrComplete', callback, url));\n },\n _xhrComplete: function (callback, url, response) {\n var success = true;\n if (typeof response === 'object') {\n if (response.status === 0) {\n if (response.responseText && response.responseText.length > 0) {\n success = true;\n response = response.responseText;\n } else {\n return;\n }\n }\n }\n this.trigger(LOAD_COMPLETE);\n if (success) {\n callback(this.append(response, url));\n }\n },\n _hideViews: function (container) {\n return container.children(this._locate('view splitview')).hide();\n },\n _setupLayouts: function (element) {\n var that = this, layout;\n element.children(that._locate('layout')).each(function () {\n if (that.$angular) {\n layout = compileMobileDirective($(this), that.$angular[0]);\n } else {\n layout = kendo.initWidget($(this), {}, ui.roles);\n }\n var platform = layout.options.platform;\n if (!platform || platform === mobile.application.os.name) {\n that.layouts[layout.options.id] = layout;\n } else {\n layout.destroy();\n }\n });\n }\n });\n kendo.mobile.ViewEngine = ViewEngine;\n ui.plugin(View);\n ui.plugin(Layout);\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.loader', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.loader',\n name: 'Loader',\n category: 'mobile',\n description: 'Mobile Loader',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, CAPTURE_EVENTS = $.map(kendo.eventMap, function (value) {\n return value;\n }).join(' ').split(' ');\n var Loader = Widget.extend({\n init: function (container, options) {\n var that = this, element = $('
        ');\n Widget.fn.init.call(that, element, options);\n that.container = container;\n that.captureEvents = false;\n that._attachCapture();\n element.append(that.options.loading).hide().appendTo(container);\n },\n options: {\n name: 'Loader',\n loading: '

        Loading...

        ',\n timeout: 100\n },\n show: function () {\n var that = this;\n clearTimeout(that._loading);\n if (that.options.loading === false) {\n return;\n }\n that.captureEvents = true;\n that._loading = setTimeout(function () {\n that.element.show();\n }, that.options.timeout);\n },\n hide: function () {\n this.captureEvents = false;\n clearTimeout(this._loading);\n this.element.hide();\n },\n changeMessage: function (message) {\n this.options.loading = message;\n this.element.find('>h1').html(message);\n },\n transition: function () {\n this.captureEvents = true;\n this.container.css('pointer-events', 'none');\n },\n transitionDone: function () {\n this.captureEvents = false;\n this.container.css('pointer-events', '');\n },\n _attachCapture: function () {\n var that = this;\n that.captureEvents = false;\n function capture(e) {\n if (that.captureEvents) {\n e.preventDefault();\n }\n }\n for (var i = 0; i < CAPTURE_EVENTS.length; i++) {\n that.container[0].addEventListener(CAPTURE_EVENTS[i], capture, true);\n }\n }\n });\n ui.plugin(Loader);\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.pane', [\n 'kendo.mobile.view',\n 'kendo.mobile.loader'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.pane',\n name: 'Pane',\n category: 'mobile',\n description: 'Mobile Pane',\n depends: [\n 'mobile.view',\n 'mobile.loader'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, roleSelector = kendo.roleSelector, ui = mobile.ui, Widget = ui.Widget, ViewEngine = mobile.ViewEngine, View = ui.View, Loader = mobile.ui.Loader, EXTERNAL = 'external', HREF = 'href', DUMMY_HREF = '#!', NAVIGATE = 'navigate', VIEW_SHOW = 'viewShow', SAME_VIEW_REQUESTED = 'sameViewRequested', OS = kendo.support.mobileOS, SKIP_TRANSITION_ON_BACK_BUTTON = OS.ios && !OS.appMode && OS.flatVersion >= 700, WIDGET_RELS = /popover|actionsheet|modalview|drawer/, BACK = '#:back', attrValue = kendo.attrValue;\n var Pane = 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.element;\n element.addClass('km-pane');\n if (that.options.collapsible) {\n element.addClass('km-collapsible-pane');\n }\n this.history = [];\n this.historyCallback = function (url, params, backButtonPressed) {\n var transition = that.transition;\n that.transition = null;\n if (SKIP_TRANSITION_ON_BACK_BUTTON && backButtonPressed) {\n transition = 'none';\n }\n return that.viewEngine.showView(url, transition, params);\n };\n this._historyNavigate = function (url) {\n if (url === BACK) {\n if (that.history.length === 1) {\n return;\n }\n that.history.pop();\n url = that.history[that.history.length - 1];\n } else {\n that.history.push(url);\n }\n that.historyCallback(url, kendo.parseQueryStringParams(url));\n };\n this._historyReplace = function (url) {\n var params = kendo.parseQueryStringParams(url);\n that.history[that.history.length - 1] = url;\n that.historyCallback(url, params);\n };\n that.loader = new Loader(element, { loading: that.options.loading });\n that.viewEngine = new ViewEngine({\n container: element,\n transition: options.transition,\n modelScope: options.modelScope,\n rootNeeded: !options.initial,\n serverNavigation: options.serverNavigation,\n remoteViewURLPrefix: options.root || '',\n layout: options.layout,\n $angular: options.$angular,\n loader: that.loader,\n showStart: function () {\n that.loader.transition();\n that.closeActiveDialogs();\n },\n after: function () {\n that.loader.transitionDone();\n },\n viewShow: function (e) {\n that.trigger(VIEW_SHOW, e);\n },\n loadStart: function () {\n that.loader.show();\n },\n loadComplete: function () {\n that.loader.hide();\n },\n sameViewRequested: function () {\n that.trigger(SAME_VIEW_REQUESTED);\n },\n viewTypeDetermined: function (e) {\n if (!e.remote || !that.options.serverNavigation) {\n that.trigger(NAVIGATE, { url: e.url });\n }\n }\n });\n this._setPortraitWidth();\n kendo.onResize(function () {\n that._setPortraitWidth();\n });\n that._setupAppLinks();\n },\n closeActiveDialogs: function () {\n var dialogs = this.element.find(roleSelector('actionsheet popover modalview')).filter(':visible');\n dialogs.each(function () {\n kendo.widgetInstance($(this), ui).close();\n });\n },\n navigateToInitial: function () {\n var initial = this.options.initial;\n if (initial) {\n this.navigate(initial);\n }\n return initial;\n },\n options: {\n name: 'Pane',\n portraitWidth: '',\n transition: '',\n layout: '',\n collapsible: false,\n initial: null,\n modelScope: window,\n loading: '

        Loading...

        '\n },\n events: [\n NAVIGATE,\n VIEW_SHOW,\n SAME_VIEW_REQUESTED\n ],\n append: function (html) {\n return this.viewEngine.append(html);\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.viewEngine.destroy();\n this.userEvents.destroy();\n },\n navigate: function (url, transition) {\n if (url instanceof View) {\n url = url.id;\n }\n this.transition = transition;\n this._historyNavigate(url);\n },\n replace: function (url, transition) {\n if (url instanceof View) {\n url = url.id;\n }\n this.transition = transition;\n this._historyReplace(url);\n },\n bindToRouter: function (router) {\n var that = this, history = this.history, viewEngine = this.viewEngine;\n router.bind('init', function (e) {\n var url = e.url, attrUrl = router.pushState ? url : '/';\n viewEngine.rootView.attr(kendo.attr('url'), attrUrl);\n var length = history.length;\n if (url === '/' && length) {\n router.navigate(history[length - 1], true);\n e.preventDefault();\n }\n });\n router.bind('routeMissing', function (e) {\n if (!that.historyCallback(e.url, e.params, e.backButtonPressed)) {\n e.preventDefault();\n }\n });\n router.bind('same', function () {\n that.trigger(SAME_VIEW_REQUESTED);\n });\n that._historyNavigate = function (url) {\n router.navigate(url);\n };\n that._historyReplace = function (url) {\n router.replace(url);\n };\n },\n hideLoading: function () {\n this.loader.hide();\n },\n showLoading: function () {\n this.loader.show();\n },\n changeLoadingMessage: function (message) {\n this.loader.changeMessage(message);\n },\n view: function () {\n return this.viewEngine.view();\n },\n _setPortraitWidth: function () {\n var width, portraitWidth = this.options.portraitWidth;\n if (portraitWidth) {\n width = kendo.mobile.application.element.is('.km-vertical') ? portraitWidth : 'auto';\n this.element.css('width', width);\n }\n },\n _setupAppLinks: function () {\n var that = this, linkRoles = 'tab', pressedButtonSelector = '[data-' + kendo.ns + 'navigate-on-press]', buttonSelectors = $.map([\n 'button',\n 'backbutton',\n 'detailbutton',\n 'listview-link'\n ], function (role) {\n return roleSelector(role) + ':not(' + pressedButtonSelector + ')';\n }).join(',');\n this.element.handler(this).on('down', roleSelector(linkRoles) + ',' + pressedButtonSelector, '_mouseup').on('click', roleSelector(linkRoles) + ',' + buttonSelectors + ',' + pressedButtonSelector, '_appLinkClick');\n this.userEvents = new kendo.UserEvents(this.element, {\n fastTap: true,\n filter: buttonSelectors,\n tap: function (e) {\n e.event.currentTarget = e.touch.currentTarget;\n that._mouseup(e.event);\n }\n });\n this.element.css('-ms-touch-action', '');\n },\n _appLinkClick: function (e) {\n var href = $(e.currentTarget).attr('href');\n var remote = href && href[0] !== '#' && this.options.serverNavigation;\n if (!remote && attrValue($(e.currentTarget), 'rel') != EXTERNAL) {\n e.preventDefault();\n }\n },\n _mouseup: function (e) {\n if (e.which > 1 || e.isDefaultPrevented()) {\n return;\n }\n var pane = this, link = $(e.currentTarget), transition = attrValue(link, 'transition'), rel = attrValue(link, 'rel') || '', target = attrValue(link, 'target'), href = link.attr(HREF), delayedTouchEnd = SKIP_TRANSITION_ON_BACK_BUTTON && link[0].offsetHeight === 0, remote = href && href[0] !== '#' && this.options.serverNavigation;\n if (delayedTouchEnd || remote || rel === EXTERNAL || typeof href === 'undefined' || href === DUMMY_HREF) {\n return;\n }\n link.attr(HREF, DUMMY_HREF);\n setTimeout(function () {\n link.attr(HREF, href);\n });\n if (rel.match(WIDGET_RELS)) {\n kendo.widgetInstance($(href), ui).openFor(link);\n if (rel === 'actionsheet' || rel === 'drawer') {\n e.stopPropagation();\n }\n } else {\n if (target === '_top') {\n pane = mobile.application.pane;\n } else if (target) {\n pane = $('#' + target).data('kendoMobilePane');\n }\n pane.navigate(href, transition);\n }\n e.preventDefault();\n }\n });\n Pane.wrap = function (element) {\n if (!element.is(roleSelector('view'))) {\n element = element.wrap('
        ').parent();\n }\n var paneContainer = element.wrap('
        ').parent(), pane = new Pane(paneContainer);\n pane.navigate('');\n return pane;\n };\n ui.plugin(Pane);\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.popover', [\n 'kendo.popup',\n 'kendo.mobile.pane'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.popover',\n name: 'PopOver',\n category: 'mobile',\n description: 'The mobile PopOver widget represents a transient view which is displayed when the user taps on a navigational widget or area on the screen. ',\n depends: [\n 'popup',\n 'mobile.pane'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, HIDE = 'hide', OPEN = 'open', CLOSE = 'close', WRAPPER = '
        ', ARROW = '
        ', OVERLAY = '
        ', DIRECTION_CLASSES = 'km-up km-down km-left km-right', Widget = ui.Widget, DIRECTIONS = {\n 'down': {\n origin: 'bottom center',\n position: 'top center'\n },\n 'up': {\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 }, ANIMATION = {\n animation: {\n open: {\n effects: 'fade:in',\n duration: 0\n },\n close: {\n effects: 'fade:out',\n duration: 400\n }\n }\n }, DIMENSIONS = {\n 'horizontal': {\n offset: 'top',\n size: 'height'\n },\n 'vertical': {\n offset: 'left',\n size: 'width'\n }\n }, REVERSE = {\n 'up': 'down',\n 'down': 'up',\n 'left': 'right',\n 'right': 'left'\n };\n var Popup = Widget.extend({\n init: function (element, options) {\n var that = this, containerPopup = element.closest('.km-modalview-wrapper'), viewport = element.closest('.km-root').children('.km-pane').first(), container = containerPopup[0] ? containerPopup : viewport, popupOptions, axis;\n if (options.viewport) {\n viewport = options.viewport;\n } else if (!viewport[0]) {\n viewport = window;\n }\n if (options.container) {\n container = options.container;\n } else if (!container[0]) {\n container = document.body;\n }\n popupOptions = {\n viewport: viewport,\n copyAnchorStyles: false,\n autosize: true,\n open: function () {\n that.overlay.show();\n },\n activate: $.proxy(that._activate, that),\n deactivate: function () {\n that.overlay.hide();\n if (!that._apiCall) {\n that.trigger(HIDE);\n }\n that._apiCall = false;\n }\n };\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n element.wrap(WRAPPER).addClass('km-popup').show();\n axis = that.options.direction.match(/left|right/) ? 'horizontal' : 'vertical';\n that.dimensions = DIMENSIONS[axis];\n that.wrapper = element.parent().css({\n width: options.width,\n height: options.height\n }).addClass('km-popup-wrapper km-' + options.direction).hide();\n that.arrow = $(ARROW).prependTo(that.wrapper).hide();\n that.overlay = $(OVERLAY).appendTo(container).hide();\n popupOptions.appendTo = that.overlay;\n if (options.className) {\n that.overlay.addClass(options.className);\n }\n that.popup = new kendo.ui.Popup(that.wrapper, $.extend(true, popupOptions, ANIMATION, DIRECTIONS[options.direction]));\n },\n options: {\n name: 'Popup',\n width: 240,\n height: '',\n direction: 'down',\n container: null,\n viewport: null\n },\n events: [HIDE],\n show: function (target) {\n this.popup.options.anchor = $(target);\n this.popup.open();\n },\n hide: function () {\n this._apiCall = true;\n this.popup.close();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.popup.destroy();\n this.overlay.remove();\n },\n target: function () {\n return this.popup.options.anchor;\n },\n _activate: function () {\n var that = this, direction = that.options.direction, dimensions = that.dimensions, offset = dimensions.offset, popup = that.popup, anchor = popup.options.anchor, anchorOffset = $(anchor).offset(), elementOffset = $(popup.element).offset(), cssClass = popup.flipped ? REVERSE[direction] : direction, min = that.arrow[dimensions.size]() * 2, max = that.element[dimensions.size]() - that.arrow[dimensions.size](), size = $(anchor)[dimensions.size](), offsetAmount = anchorOffset[offset] - elementOffset[offset] + size / 2;\n if (offsetAmount < min) {\n offsetAmount = min;\n }\n if (offsetAmount > max) {\n offsetAmount = max;\n }\n that.wrapper.removeClass(DIRECTION_CLASSES).addClass('km-' + cssClass);\n that.arrow.css(offset, offsetAmount).show();\n }\n });\n var PopOver = Widget.extend({\n init: function (element, options) {\n var that = this, popupOptions;\n that.initialOpen = false;\n Widget.fn.init.call(that, element, options);\n popupOptions = $.extend({\n className: 'km-popover-root',\n hide: function () {\n that.trigger(CLOSE);\n }\n }, this.options.popup);\n that.popup = new Popup(that.element, popupOptions);\n that.popup.overlay.on('move', function (e) {\n if (e.target == that.popup.overlay[0]) {\n e.preventDefault();\n }\n });\n that.pane = new ui.Pane(that.element, $.extend(this.options.pane, { $angular: this.options.$angular }));\n kendo.notify(that, ui);\n },\n options: {\n name: 'PopOver',\n popup: {},\n pane: {}\n },\n events: [\n OPEN,\n CLOSE\n ],\n open: function (target) {\n this.popup.show(target);\n if (!this.initialOpen) {\n if (!this.pane.navigateToInitial()) {\n this.pane.navigate('');\n }\n this.popup.popup._position();\n this.initialOpen = true;\n } else {\n this.pane.view()._invokeNgController();\n }\n },\n openFor: function (target) {\n this.open(target);\n this.trigger(OPEN, { target: this.popup.target() });\n },\n close: function () {\n this.popup.hide();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.pane.destroy();\n this.popup.destroy();\n kendo.destroy(this.element);\n }\n });\n ui.plugin(Popup);\n ui.plugin(PopOver);\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.shim', ['kendo.popup'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.shim',\n name: 'Shim',\n category: 'mobile',\n description: 'Mobile Shim',\n depends: ['popup'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Popup = kendo.ui.Popup, SHIM = '
        ', HIDE = 'hide', Widget = ui.Widget;\n var Shim = Widget.extend({\n init: function (element, options) {\n var that = this, app = kendo.mobile.application, os = kendo.support.mobileOS, osname = app ? app.os.name : os ? os.name : 'ios', ioswp = osname === 'ios' || osname === 'wp' || (app ? app.os.skin : false), bb = osname === 'blackberry', align = options.align || (ioswp ? 'bottom center' : bb ? 'center right' : 'center center'), position = options.position || (ioswp ? 'bottom center' : bb ? 'center right' : 'center center'), effect = options.effect || (ioswp ? 'slideIn:up' : bb ? 'slideIn:left' : 'fade:in'), shim = $(SHIM).handler(that).hide();\n Widget.fn.init.call(that, element, options);\n that.shim = shim;\n element = that.element;\n options = that.options;\n if (options.className) {\n that.shim.addClass(options.className);\n }\n if (!options.modal) {\n that.shim.on('down', '_hide');\n }\n (app ? app.element : $(document.body)).append(shim);\n that.popup = new Popup(that.element, {\n anchor: shim,\n modal: true,\n appendTo: shim,\n origin: align,\n position: position,\n animation: {\n open: {\n effects: effect,\n duration: options.duration\n },\n close: { duration: options.duration }\n },\n close: function (e) {\n var prevented = false;\n if (!that._apiCall) {\n prevented = that.trigger(HIDE);\n }\n if (prevented) {\n e.preventDefault();\n }\n that._apiCall = false;\n },\n deactivate: function () {\n shim.hide();\n },\n open: function () {\n shim.show();\n }\n });\n kendo.notify(that);\n },\n events: [HIDE],\n options: {\n name: 'Shim',\n modal: false,\n align: undefined,\n position: undefined,\n effect: undefined,\n duration: 200\n },\n show: function () {\n this.popup.open();\n },\n hide: function () {\n this._apiCall = true;\n this.popup.close();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.shim.kendoDestroy();\n this.popup.destroy();\n this.shim.remove();\n },\n _hide: function (e) {\n if (!e || !$.contains(this.shim.children().children('.k-popup')[0], e.target)) {\n this.popup.close();\n }\n }\n });\n ui.plugin(Shim);\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.modalview', [\n 'kendo.mobile.shim',\n 'kendo.mobile.view'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.modalview',\n name: 'ModalView',\n category: 'mobile',\n description: 'The Kendo ModalView is used to present self-contained functionality in the context of the current task.',\n depends: [\n 'mobile.shim',\n 'mobile.view'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Shim = ui.Shim, Widget = ui.Widget, BEFORE_OPEN = 'beforeOpen', OPEN = 'open', CLOSE = 'close', INIT = 'init', WRAP = '
        ';\n var ModalView = ui.View.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that._id();\n that._wrap();\n that._shim();\n if (!this.options.$angular) {\n that._layout();\n that._scroller();\n that._model();\n }\n that.element.css('display', '');\n that.trigger(INIT);\n },\n events: [\n INIT,\n BEFORE_OPEN,\n OPEN,\n CLOSE\n ],\n options: {\n name: 'ModalView',\n modal: true,\n width: null,\n height: null\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.shim.destroy();\n },\n open: function (target) {\n var that = this;\n that.target = $(target);\n that.shim.show();\n that._invokeNgController();\n that.trigger('show', { view: that });\n },\n openFor: function (target) {\n if (!this.trigger(BEFORE_OPEN, { target: target })) {\n this.open(target);\n this.trigger(OPEN, { target: target });\n }\n },\n close: function () {\n if (this.element.is(':visible') && !this.trigger(CLOSE)) {\n this.shim.hide();\n }\n },\n _wrap: function () {\n var that = this, element = that.element, options = that.options, width, height;\n width = element[0].style.width || 'auto';\n height = element[0].style.height || 'auto';\n element.addClass('km-modalview').wrap(WRAP);\n that.wrapper = element.parent().css({\n width: options.width || width || 300,\n height: options.height || height || 300\n }).addClass(height == 'auto' ? ' km-auto-height' : '');\n element.css({\n width: '',\n height: ''\n });\n },\n _shim: function () {\n var that = this;\n that.shim = new Shim(that.wrapper, {\n modal: that.options.modal,\n position: 'center center',\n align: 'center center',\n effect: 'fade:in',\n className: 'km-modalview-root',\n hide: function (e) {\n if (that.trigger(CLOSE)) {\n e.preventDefault();\n }\n }\n });\n }\n });\n ui.plugin(ModalView);\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.drawer', [\n 'kendo.mobile.view',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.drawer',\n name: 'Drawer',\n category: 'mobile',\n description: 'The Kendo Mobile Drawer widget provides slide to reveal global application toolbox',\n depends: [\n 'mobile.view',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, os = kendo.support.mobileOS, Transition = kendo.effects.Transition, roleSelector = kendo.roleSelector, AXIS = 'x', ui = mobile.ui, SWIPE_TO_OPEN = !(os.ios && os.majorVersion == 7 && !os.appMode), BEFORE_SHOW = 'beforeShow', INIT = 'init', SHOW = 'show', HIDE = 'hide', AFTER_HIDE = 'afterHide', NULL_VIEW = { enable: $.noop };\n var Drawer = ui.View.extend({\n init: function (element, options) {\n $(element).parent().prepend(element);\n mobile.ui.Widget.fn.init.call(this, element, options);\n if (!this.options.$angular) {\n this._layout();\n this._scroller();\n }\n this._model();\n var pane = this.element.closest(roleSelector('pane')).data('kendoMobilePane'), userEvents;\n if (pane) {\n this.pane = pane;\n this.pane.bind('viewShow', function (e) {\n drawer._viewShow(e);\n });\n this.pane.bind('sameViewRequested', function () {\n drawer.hide();\n });\n userEvents = this.userEvents = new kendo.UserEvents(pane.element, {\n fastTap: true,\n filter: roleSelector('view splitview'),\n allowSelection: true\n });\n } else {\n this.currentView = NULL_VIEW;\n var container = $(this.options.container);\n if (!container) {\n throw new Error('The drawer needs a container configuration option set.');\n }\n userEvents = this.userEvents = new kendo.UserEvents(container, {\n fastTap: true,\n allowSelection: true\n });\n this._attachTransition(container);\n }\n var drawer = this;\n var hide = function (e) {\n if (drawer.visible) {\n drawer.hide();\n e.preventDefault();\n }\n };\n if (this.options.swipeToOpen && SWIPE_TO_OPEN) {\n userEvents.bind('press', function () {\n drawer.transition.cancel();\n });\n userEvents.bind('start', function (e) {\n drawer._start(e);\n });\n userEvents.bind('move', function (e) {\n drawer._update(e);\n });\n userEvents.bind('end', function (e) {\n drawer._end(e);\n });\n userEvents.bind('tap', hide);\n } else {\n userEvents.bind('press', hide);\n }\n this.leftPositioned = this.options.position === 'left';\n this.visible = false;\n this.element.hide().addClass('km-drawer').addClass(this.leftPositioned ? 'km-left-drawer' : 'km-right-drawer');\n this.trigger(INIT);\n },\n options: {\n name: 'Drawer',\n position: 'left',\n views: [],\n swipeToOpenViews: [],\n swipeToOpen: true,\n title: '',\n container: null\n },\n events: [\n BEFORE_SHOW,\n HIDE,\n AFTER_HIDE,\n INIT,\n SHOW\n ],\n show: function () {\n if (this._activate()) {\n this._show();\n }\n },\n hide: function () {\n if (!this.currentView) {\n return;\n }\n this.currentView.enable();\n Drawer.current = null;\n this._moveViewTo(0);\n this.trigger(HIDE, { view: this });\n },\n openFor: function () {\n if (this.visible) {\n this.hide();\n } else {\n this.show();\n }\n },\n destroy: function () {\n ui.View.fn.destroy.call(this);\n this.userEvents.destroy();\n },\n _activate: function () {\n if (this.visible) {\n return true;\n }\n var visibleOnCurrentView = this._currentViewIncludedIn(this.options.views);\n if (!visibleOnCurrentView || this.trigger(BEFORE_SHOW, { view: this })) {\n return false;\n }\n this._setAsCurrent();\n this.element.show();\n this.trigger(SHOW, { view: this });\n this._invokeNgController();\n return true;\n },\n _currentViewIncludedIn: function (views) {\n if (!this.pane || !views.length) {\n return true;\n }\n var view = this.pane.view();\n return $.inArray(view.id.replace('#', ''), views) > -1 || $.inArray(view.element.attr('id'), views) > -1;\n },\n _show: function () {\n this.currentView.enable(false);\n this.visible = true;\n var offset = this.element.width();\n if (!this.leftPositioned) {\n offset = -offset;\n }\n this._moveViewTo(offset);\n },\n _setAsCurrent: function () {\n if (Drawer.last !== this) {\n if (Drawer.last) {\n Drawer.last.element.hide();\n }\n this.element.show();\n }\n Drawer.last = this;\n Drawer.current = this;\n },\n _moveViewTo: function (offset) {\n this.userEvents.cancel();\n this.transition.moveTo({\n location: offset,\n duration: 400,\n ease: Transition.easeOutExpo\n });\n },\n _viewShow: function (e) {\n if (this.currentView) {\n this.currentView.enable();\n }\n if (this.currentView === e.view) {\n this.hide();\n return;\n }\n this.currentView = e.view;\n this._attachTransition(e.view.element);\n },\n _attachTransition: function (element) {\n var that = this, movable = this.movable, currentOffset = movable && movable.x;\n if (this.transition) {\n this.transition.cancel();\n this.movable.moveAxis('x', 0);\n }\n movable = this.movable = new kendo.ui.Movable(element);\n this.transition = new Transition({\n axis: AXIS,\n movable: this.movable,\n onEnd: function () {\n if (movable[AXIS] === 0) {\n element[0].style.cssText = '';\n that.element.hide();\n that.trigger(AFTER_HIDE);\n that.visible = false;\n }\n }\n });\n if (currentOffset) {\n element.addClass('k-fx-hidden');\n kendo.animationFrame(function () {\n element.removeClass('k-fx-hidden');\n that.movable.moveAxis(AXIS, currentOffset);\n that.hide();\n });\n }\n },\n _start: function (e) {\n var userEvents = e.sender;\n if (Math.abs(e.x.velocity) < Math.abs(e.y.velocity) || kendo.triggeredByInput(e.event) || !this._currentViewIncludedIn(this.options.swipeToOpenViews)) {\n userEvents.cancel();\n return;\n }\n var leftPositioned = this.leftPositioned, visible = this.visible, canMoveLeft = leftPositioned && visible || !leftPositioned && !Drawer.current, canMoveRight = !leftPositioned && visible || leftPositioned && !Drawer.current, leftSwipe = e.x.velocity < 0;\n if (canMoveLeft && leftSwipe || canMoveRight && !leftSwipe) {\n if (this._activate()) {\n userEvents.capture();\n return;\n }\n }\n userEvents.cancel();\n },\n _update: function (e) {\n var movable = this.movable, newPosition = movable.x + e.x.delta, limitedPosition;\n if (this.leftPositioned) {\n limitedPosition = Math.min(Math.max(0, newPosition), this.element.width());\n } else {\n limitedPosition = Math.max(Math.min(0, newPosition), -this.element.width());\n }\n this.movable.moveAxis(AXIS, limitedPosition);\n e.event.preventDefault();\n e.event.stopPropagation();\n },\n _end: function (e) {\n var velocity = e.x.velocity, pastHalf = Math.abs(this.movable.x) > this.element.width() / 2, velocityThreshold = 0.8, shouldShow;\n if (this.leftPositioned) {\n shouldShow = velocity > -velocityThreshold && (velocity > velocityThreshold || pastHalf);\n } else {\n shouldShow = velocity < velocityThreshold && (velocity < -velocityThreshold || pastHalf);\n }\n if (shouldShow) {\n this._show();\n } else {\n this.hide();\n }\n }\n });\n ui.plugin(Drawer);\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.splitview', ['kendo.mobile.pane'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.splitview',\n name: 'SplitView',\n category: 'mobile',\n description: 'The mobile SplitView is a tablet-specific view that consists of two or more mobile Pane widgets.',\n depends: ['mobile.pane']\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, EXPANED_PANE_SHIM = '
        ', View = ui.View;\n var SplitView = View.extend({\n init: function (element, options) {\n var that = this, pane, modalViews;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n $.extend(that, options);\n that._id();\n if (!that.options.$angular) {\n that._layout();\n that._overlay();\n } else {\n that._overlay();\n }\n that._style();\n modalViews = element.children(that._locate('modalview'));\n if (!that.options.$angular) {\n kendo.mobile.init(modalViews);\n } else {\n modalViews.each(function (idx, element) {\n kendo.compileMobileDirective($(element), options.$angular[0]);\n });\n }\n that.panes = [];\n that._paramsHistory = [];\n if (!that.options.$angular) {\n that.content.children(kendo.roleSelector('pane')).each(function () {\n pane = kendo.initWidget(this, {}, ui.roles);\n that.panes.push(pane);\n });\n } else {\n that.element.children(kendo.directiveSelector('pane')).each(function () {\n pane = kendo.compileMobileDirective($(this), options.$angular[0]);\n that.panes.push(pane);\n });\n that.element.children(kendo.directiveSelector('header footer')).each(function () {\n kendo.compileMobileDirective($(this), options.$angular[0]);\n });\n }\n that.expandedPaneShim = $(EXPANED_PANE_SHIM).appendTo(that.element);\n that._shimUserEvents = new kendo.UserEvents(that.expandedPaneShim, {\n fastTap: true,\n tap: function () {\n that.collapsePanes();\n }\n });\n },\n _locate: function (selectors) {\n return this.options.$angular ? kendo.directiveSelector(selectors) : kendo.roleSelector(selectors);\n },\n options: {\n name: 'SplitView',\n style: 'horizontal'\n },\n expandPanes: function () {\n this.element.addClass('km-expanded-splitview');\n },\n collapsePanes: function () {\n this.element.removeClass('km-expanded-splitview');\n },\n _layout: function () {\n var that = this, element = that.element;\n that.transition = kendo.attrValue(element, 'transition');\n kendo.mobile.ui.View.prototype._layout.call(this);\n kendo.mobile.init(this.header.add(this.footer));\n that.element.addClass('km-splitview');\n that.content.addClass('km-split-content');\n },\n _style: function () {\n var style = this.options.style, element = this.element, styles;\n if (style) {\n styles = style.split(' ');\n $.each(styles, function () {\n element.addClass('km-split-' + this);\n });\n }\n },\n showStart: function () {\n var that = this;\n that.element.css('display', '');\n if (!that.inited) {\n that.inited = true;\n $.each(that.panes, function () {\n if (this.options.initial) {\n this.navigateToInitial();\n } else {\n this.navigate('');\n }\n });\n that.trigger('init', { view: that });\n } else {\n this._invokeNgController();\n }\n that.trigger('show', { view: that });\n }\n });\n ui.plugin(SplitView);\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.application', [\n 'kendo.mobile.pane',\n 'kendo.router'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.application',\n name: 'Application',\n category: 'mobile',\n description: 'The Mobile application provides a framework to build native looking web applications on mobile devices.',\n depends: [\n 'mobile.pane',\n 'router'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, support = kendo.support, Widget = mobile.ui.Widget, Pane = mobile.ui.Pane, DEFAULT_OS = 'ios7', OS = support.mobileOS, BERRYPHONEGAP = OS.device == 'blackberry' && OS.flatVersion >= 600 && OS.flatVersion < 1000 && OS.appMode, FONT_SIZE_COEF = 0.93, VERTICAL = 'km-vertical', CHROME = OS.browser === 'chrome', BROKEN_WEBVIEW_RESIZE = OS.ios && OS.flatVersion >= 700 && OS.flatVersion < 800 && (OS.appMode || CHROME), INITIALLY_HORIZONTAL = Math.abs(window.orientation) / 90 == 1, HORIZONTAL = 'km-horizontal', MOBILE_PLATFORMS = {\n ios7: {\n ios: true,\n browser: 'default',\n device: 'iphone',\n flatVersion: '700',\n majorVersion: '7',\n minorVersion: '0.0',\n name: 'ios',\n tablet: false\n },\n ios: {\n ios: true,\n browser: 'default',\n device: 'iphone',\n flatVersion: '612',\n majorVersion: '6',\n minorVersion: '1.2',\n name: 'ios',\n tablet: false\n },\n android: {\n android: true,\n browser: 'default',\n device: 'android',\n flatVersion: '442',\n majorVersion: '4',\n minorVersion: '4.2',\n name: 'android',\n tablet: false\n },\n blackberry: {\n blackberry: true,\n browser: 'default',\n device: 'blackberry',\n flatVersion: '710',\n majorVersion: '7',\n minorVersion: '1.0',\n name: 'blackberry',\n tablet: false\n },\n meego: {\n meego: true,\n browser: 'default',\n device: 'meego',\n flatVersion: '850',\n majorVersion: '8',\n minorVersion: '5.0',\n name: 'meego',\n tablet: false\n },\n wp: {\n wp: true,\n browser: 'default',\n device: 'wp',\n flatVersion: '800',\n majorVersion: '8',\n minorVersion: '0.0',\n name: 'wp',\n tablet: false\n }\n }, viewportTemplate = kendo.template('', { usedWithBlock: false }), systemMeta = kendo.template(' ' + ' ' + ' ', { usedWithBlock: false }), clipTemplate = kendo.template('', { usedWithBlock: false }), ENABLE_CLIP = OS.android && OS.browser != 'chrome' || OS.blackberry, iconMeta = kendo.template('', { usedWithBlock: false }), HIDEBAR = (OS.device == 'iphone' || OS.device == 'ipod') && OS.majorVersion < 7, SUPPORT_SWIPE_TO_GO_BACK = (OS.device == 'iphone' || OS.device == 'ipod') && OS.majorVersion >= 7, HISTORY_TRANSITION = SUPPORT_SWIPE_TO_GO_BACK ? 'none' : null, BARCOMPENSATION = OS.browser == 'mobilesafari' ? 60 : 0, STATUS_BAR_HEIGHT = 20, WINDOW = $(window), SCREEN = window.screen, HEAD = $('head'), INIT = 'init', proxy = $.proxy;\n function osCssClass(os, options) {\n var classes = [];\n if (OS) {\n classes.push('km-on-' + OS.name);\n }\n if (os.skin) {\n classes.push('km-' + os.skin);\n } else {\n if (os.name == 'ios' && os.majorVersion > 6) {\n classes.push('km-ios7');\n } else {\n classes.push('km-' + os.name);\n }\n }\n if (os.name == 'ios' && os.majorVersion < 7 || os.name != 'ios') {\n classes.push('km-' + os.name + os.majorVersion);\n }\n classes.push('km-' + os.majorVersion);\n classes.push('km-m' + (os.minorVersion ? os.minorVersion[0] : 0));\n if (os.variant && (os.skin && os.skin === os.name || !os.skin || os.setDefaultPlatform === false)) {\n classes.push('km-' + (os.skin ? os.skin : os.name) + '-' + os.variant);\n }\n if (os.cordova) {\n classes.push('km-cordova');\n }\n if (os.appMode) {\n classes.push('km-app');\n } else {\n classes.push('km-web');\n }\n if (options && options.statusBarStyle) {\n classes.push('km-' + options.statusBarStyle + '-status-bar');\n }\n return classes.join(' ');\n }\n function wp8Background(os) {\n return 'km-wp-' + (os.noVariantSet ? parseInt($('
        ').css('background-color').split(',')[1], 10) === 0 ? 'dark' : 'light' : os.variant + ' km-wp-' + os.variant + '-force');\n }\n function isOrientationHorizontal(element) {\n return OS.wp ? element.css('animation-name') == '-kendo-landscape' : Math.abs(window.orientation) / 90 == 1;\n }\n function getOrientationClass(element) {\n return isOrientationHorizontal(element) ? HORIZONTAL : VERTICAL;\n }\n function setMinimumHeight(pane) {\n pane.parent().addBack().css('min-height', window.innerHeight);\n }\n function applyViewportHeight() {\n $('meta[name=viewport]').remove();\n HEAD.append(viewportTemplate({ height: ', width=device-width' + (isOrientationHorizontal() ? ', height=' + window.innerHeight + 'px' : support.mobileOS.flatVersion >= 600 && support.mobileOS.flatVersion < 700 ? ', height=' + window.innerWidth + 'px' : ', height=device-height') }));\n }\n var Application = Widget.extend({\n init: function (element, options) {\n mobile.application = this;\n $($.proxy(this, 'bootstrap', element, options));\n },\n bootstrap: function (element, options) {\n element = $(element);\n if (!element[0]) {\n element = $(document.body);\n }\n Widget.fn.init.call(this, element, options);\n this.element.removeAttr('data-' + kendo.ns + 'role');\n this._setupPlatform();\n this._attachMeta();\n this._setupElementClass();\n this._attachHideBarHandlers();\n var paneOptions = $.extend({}, this.options);\n delete paneOptions.name;\n var that = this, startHistory = function () {\n that.pane = new Pane(that.element, paneOptions);\n that.pane.navigateToInitial();\n if (that.options.updateDocumentTitle) {\n that._setupDocumentTitle();\n }\n that._startHistory();\n that.trigger(INIT);\n };\n if (this.options.$angular) {\n setTimeout(startHistory);\n } else {\n startHistory();\n }\n },\n options: {\n name: 'Application',\n hideAddressBar: true,\n browserHistory: true,\n historyTransition: HISTORY_TRANSITION,\n modelScope: window,\n statusBarStyle: 'black',\n transition: '',\n retina: false,\n platform: null,\n skin: null,\n updateDocumentTitle: true,\n useNativeScrolling: false\n },\n events: [INIT],\n navigate: function (url, transition) {\n this.pane.navigate(url, transition);\n },\n replace: function (url, transition) {\n this.pane.replace(url, transition);\n },\n scroller: function () {\n return this.view().scroller;\n },\n hideLoading: function () {\n if (this.pane) {\n this.pane.hideLoading();\n } else {\n throw new Error('The mobile application instance is not fully instantiated. Please consider activating loading in the application init event handler.');\n }\n },\n showLoading: function () {\n if (this.pane) {\n this.pane.showLoading();\n } else {\n throw new Error('The mobile application instance is not fully instantiated. Please consider activating loading in the application init event handler.');\n }\n },\n changeLoadingMessage: function (message) {\n if (this.pane) {\n this.pane.changeLoadingMessage(message);\n } else {\n throw new Error('The mobile application instance is not fully instantiated. Please consider changing the message in the application init event handler.');\n }\n },\n view: function () {\n return this.pane.view();\n },\n skin: function (skin) {\n var that = this;\n if (!arguments.length) {\n return that.options.skin;\n }\n that.options.skin = skin || '';\n that.element[0].className = 'km-pane';\n that._setupPlatform();\n that._setupElementClass();\n return that.options.skin;\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.pane.destroy();\n if (this.options.browserHistory) {\n this.router.destroy();\n }\n },\n _setupPlatform: function () {\n var that = this, platform = that.options.platform, skin = that.options.skin, split = [], os = OS || MOBILE_PLATFORMS[DEFAULT_OS];\n if (platform) {\n os.setDefaultPlatform = true;\n if (typeof platform === 'string') {\n split = platform.split('-');\n os = $.extend({ variant: split[1] }, os, MOBILE_PLATFORMS[split[0]]);\n } else {\n os = platform;\n }\n }\n if (skin) {\n split = skin.split('-');\n if (!OS) {\n os.setDefaultPlatform = false;\n }\n os = $.extend({}, os, {\n skin: split[0],\n variant: split[1]\n });\n }\n if (!os.variant) {\n os.noVariantSet = true;\n os.variant = 'dark';\n }\n that.os = os;\n that.osCssClass = osCssClass(that.os, that.options);\n if (os.name == 'wp') {\n if (!that.refreshBackgroundColorProxy) {\n that.refreshBackgroundColorProxy = $.proxy(function () {\n if (that.os.variant && (that.os.skin && that.os.skin === that.os.name) || !that.os.skin) {\n that.element.removeClass('km-wp-dark km-wp-light km-wp-dark-force km-wp-light-force').addClass(wp8Background(that.os));\n }\n }, that);\n }\n $(document).off('visibilitychange', that.refreshBackgroundColorProxy);\n $(document).off('resume', that.refreshBackgroundColorProxy);\n if (!os.skin) {\n that.element.parent().css('overflow', 'hidden');\n $(document).on('visibilitychange', that.refreshBackgroundColorProxy);\n $(document).on('resume', that.refreshBackgroundColorProxy);\n that.refreshBackgroundColorProxy();\n }\n }\n },\n _startHistory: function () {\n if (this.options.browserHistory) {\n this.router = new kendo.Router({\n pushState: this.options.pushState,\n root: this.options.root,\n hashBang: this.options.hashBang\n });\n this.pane.bindToRouter(this.router);\n this.router.start();\n } else {\n if (!this.options.initial) {\n this.pane.navigate('');\n }\n }\n },\n _resizeToScreenHeight: function () {\n var includeStatusBar = $('meta[name=apple-mobile-web-app-status-bar-style]').attr('content').match(/black-translucent|hidden/), element = this.element, height;\n if (CHROME) {\n height = window.innerHeight;\n } else {\n if (isOrientationHorizontal(element)) {\n if (includeStatusBar) {\n if (INITIALLY_HORIZONTAL) {\n height = SCREEN.availWidth + STATUS_BAR_HEIGHT;\n } else {\n height = SCREEN.availWidth;\n }\n } else {\n if (INITIALLY_HORIZONTAL) {\n height = SCREEN.availWidth;\n } else {\n height = SCREEN.availWidth - STATUS_BAR_HEIGHT;\n }\n }\n } else {\n if (includeStatusBar) {\n if (INITIALLY_HORIZONTAL) {\n height = SCREEN.availHeight;\n } else {\n height = SCREEN.availHeight + STATUS_BAR_HEIGHT;\n }\n } else {\n if (INITIALLY_HORIZONTAL) {\n height = SCREEN.availHeight - STATUS_BAR_HEIGHT;\n } else {\n height = SCREEN.availHeight;\n }\n }\n }\n }\n element.height(height);\n },\n _setupElementClass: function () {\n var that = this, size, element = that.element;\n element.parent().addClass('km-root km-' + (that.os.tablet ? 'tablet' : 'phone'));\n element.addClass(that.osCssClass + ' ' + getOrientationClass(element));\n if (this.options.useNativeScrolling) {\n element.parent().addClass('km-native-scrolling');\n }\n if (CHROME) {\n element.addClass('km-ios-chrome');\n }\n if (support.wpDevicePixelRatio) {\n element.parent().css('font-size', support.wpDevicePixelRatio + 'em');\n }\n if (this.options.retina) {\n element.parent().addClass('km-retina');\n element.parent().css('font-size', support.devicePixelRatio * FONT_SIZE_COEF + 'em');\n }\n if (BERRYPHONEGAP) {\n applyViewportHeight();\n }\n if (that.options.useNativeScrolling) {\n element.parent().addClass('km-native-scrolling');\n } else if (ENABLE_CLIP) {\n size = (screen.availWidth > screen.availHeight ? screen.availWidth : screen.availHeight) + 200;\n $(clipTemplate({\n width: size,\n height: size\n })).appendTo(HEAD);\n }\n if (BROKEN_WEBVIEW_RESIZE) {\n that._resizeToScreenHeight();\n }\n kendo.onResize(function () {\n element.removeClass('km-horizontal km-vertical').addClass(getOrientationClass(element));\n if (that.options.useNativeScrolling) {\n setMinimumHeight(element);\n }\n if (BROKEN_WEBVIEW_RESIZE) {\n that._resizeToScreenHeight();\n }\n if (BERRYPHONEGAP) {\n applyViewportHeight();\n }\n kendo.resize(element);\n });\n },\n _clearExistingMeta: function () {\n HEAD.find('meta').filter('[name|=\\'apple-mobile-web-app\\'],[name|=\\'msapplication-tap\\'],[name=\\'viewport\\']').remove();\n },\n _attachMeta: function () {\n var options = this.options, icon = options.icon, size;\n this._clearExistingMeta();\n if (!BERRYPHONEGAP) {\n HEAD.prepend(viewportTemplate({\n height: '',\n scale: this.options.retina ? 1 / support.devicePixelRatio : '1.0'\n }));\n }\n HEAD.prepend(systemMeta(options));\n if (icon) {\n if (typeof icon === 'string') {\n icon = { '': icon };\n }\n for (size in icon) {\n HEAD.prepend(iconMeta({\n icon: icon[size],\n size: size\n }));\n }\n }\n if (options.useNativeScrolling) {\n setMinimumHeight(this.element);\n }\n },\n _attachHideBarHandlers: function () {\n var that = this, hideBar = proxy(that, '_hideBar');\n if (support.mobileOS.appMode || !that.options.hideAddressBar || !HIDEBAR || that.options.useNativeScrolling) {\n return;\n }\n that._initialHeight = {};\n WINDOW.on('load', hideBar);\n kendo.onResize(function () {\n setTimeout(window.scrollTo, 0, 0, 1);\n });\n },\n _setupDocumentTitle: function () {\n var that = this, defaultTitle = document.title;\n that.pane.bind('viewShow', function (e) {\n var title = e.view.title;\n document.title = title !== undefined ? title : defaultTitle;\n });\n },\n _hideBar: function () {\n var that = this, element = that.element;\n element.height(kendo.support.transforms.css + 'calc(100% + ' + BARCOMPENSATION + 'px)');\n $(window).trigger(kendo.support.resize);\n }\n });\n kendo.mobile.Application = Application;\n kendo.ui.plugin(Application, kendo.mobile, 'Mobile');\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.actionsheet', [\n 'kendo.mobile.popover',\n 'kendo.mobile.shim'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.actionsheet',\n name: 'ActionSheet',\n category: 'mobile',\n description: 'The mobile ActionSheet widget displays a set of choices related to a task the user initiates.',\n depends: [\n 'mobile.popover',\n 'mobile.shim'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, ui = kendo.mobile.ui, Shim = ui.Shim, Popup = ui.Popup, Widget = ui.Widget, OPEN = 'open', CLOSE = 'close', COMMAND = 'command', BUTTONS = 'li>a', CONTEXT_DATA = 'actionsheetContext', WRAP = '
        ', cancelTemplate = kendo.template('
      • #:cancel#
      • ');\n var ActionSheet = Widget.extend({\n init: function (element, options) {\n var that = this, ShimClass, tablet, type, os = support.mobileOS;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n type = options.type;\n element = that.element;\n if (type === 'auto') {\n tablet = os && os.tablet;\n } else {\n tablet = type === 'tablet';\n }\n ShimClass = tablet ? Popup : Shim;\n if (options.cancelTemplate) {\n cancelTemplate = kendo.template(options.cancelTemplate);\n }\n element.addClass('km-actionsheet').append(cancelTemplate({ cancel: that.options.cancel })).wrap(WRAP).on('up', BUTTONS, '_click').on('click', BUTTONS, kendo.preventDefault);\n that.view().bind('destroy', function () {\n that.destroy();\n });\n that.wrapper = element.parent().addClass(type ? ' km-actionsheet-' + type : '');\n that.shim = new ShimClass(that.wrapper, $.extend({\n modal: os.ios && os.majorVersion < 7,\n className: 'km-actionsheet-root'\n }, that.options.popup));\n that._closeProxy = $.proxy(that, '_close');\n that._shimHideProxy = $.proxy(that, '_shimHide');\n that.shim.bind('hide', that._shimHideProxy);\n if (tablet) {\n kendo.onResize(that._closeProxy);\n }\n kendo.notify(that, ui);\n },\n events: [\n OPEN,\n CLOSE,\n COMMAND\n ],\n options: {\n name: 'ActionSheet',\n cancel: 'Cancel',\n type: 'auto',\n popup: { height: 'auto' }\n },\n open: function (target, context) {\n var that = this;\n that.target = $(target);\n that.context = context;\n that.shim.show(target);\n },\n close: function () {\n this.context = this.target = null;\n this.shim.hide();\n },\n openFor: function (target) {\n var that = this, context = target.data(CONTEXT_DATA);\n that.open(target, context);\n that.trigger(OPEN, {\n target: target,\n context: context\n });\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.unbindResize(this._closeProxy);\n this.shim.destroy();\n },\n _click: function (e) {\n if (e.isDefaultPrevented()) {\n return;\n }\n var currentTarget = $(e.currentTarget);\n var action = currentTarget.data('action');\n if (action) {\n var actionData = {\n target: this.target,\n context: this.context\n }, $angular = this.options.$angular;\n if ($angular) {\n this.element.injector().get('$parse')(action)($angular[0])(actionData);\n } else {\n kendo.getter(action)(window)(actionData);\n }\n }\n this.trigger(COMMAND, {\n target: this.target,\n context: this.context,\n currentTarget: currentTarget\n });\n e.preventDefault();\n this._close();\n },\n _shimHide: function (e) {\n if (!this.trigger(CLOSE)) {\n this.context = this.target = null;\n } else {\n e.preventDefault();\n }\n },\n _close: function (e) {\n if (!this.trigger(CLOSE)) {\n this.close();\n } else {\n e.preventDefault();\n }\n }\n });\n ui.plugin(ActionSheet);\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.button', ['kendo.userevents'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.button',\n name: 'Button',\n category: 'mobile',\n description: 'The Button widget navigates between mobile Application views when pressed.',\n depends: ['userevents']\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, Widget = ui.Widget, support = kendo.support, os = support.mobileOS, ANDROID3UP = os.android && os.flatVersion >= 300, CLICK = 'click', DISABLED = 'disabled', DISABLEDSTATE = 'km-state-disabled';\n function highlightButton(widget, event, highlight) {\n $(event.target).closest('.km-button,.km-detail').toggleClass('km-state-active', highlight);\n if (ANDROID3UP && widget.deactivateTimeoutID) {\n clearTimeout(widget.deactivateTimeoutID);\n widget.deactivateTimeoutID = 0;\n }\n }\n function createBadge(value) {\n return $('' + value + '');\n }\n var Button = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n var useTap = that.options.clickOn === 'up';\n that._wrap();\n that._style();\n if (!useTap) {\n that.element.attr('data-navigate-on-press', true);\n }\n that.options.enable = that.options.enable && !that.element.attr(DISABLED);\n that.enable(that.options.enable);\n that._userEvents = new kendo.UserEvents(that.element, {\n allowSelection: !useTap,\n fastTap: true,\n press: function (e) {\n that._activate(e);\n },\n release: function (e) {\n highlightButton(that, e, false);\n if (!useTap) {\n e.event.stopPropagation();\n }\n }\n });\n that._userEvents.bind(useTap ? 'tap' : 'press', function (e) {\n that._release(e);\n });\n if (ANDROID3UP) {\n that.element.on('move', function (e) {\n that._timeoutDeactivate(e);\n });\n }\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this._userEvents.destroy();\n },\n events: [CLICK],\n options: {\n name: 'Button',\n icon: '',\n style: '',\n badge: '',\n clickOn: 'up',\n enable: true\n },\n badge: function (value) {\n var badge = this.badgeElement = this.badgeElement || createBadge(value).appendTo(this.element);\n if (value || value === 0) {\n badge.html(value);\n return this;\n }\n if (value === false) {\n badge.empty().remove();\n this.badgeElement = false;\n return this;\n }\n return badge.html();\n },\n enable: function (enable) {\n var element = this.element;\n if (typeof enable == 'undefined') {\n enable = true;\n }\n this.options.enable = enable;\n if (enable) {\n element.removeAttr(DISABLED);\n } else {\n element.attr(DISABLED, DISABLED);\n }\n element.toggleClass(DISABLEDSTATE, !enable);\n },\n _timeoutDeactivate: function (e) {\n if (!this.deactivateTimeoutID) {\n this.deactivateTimeoutID = setTimeout(highlightButton, 500, this, e, false);\n }\n },\n _activate: function (e) {\n var activeElement = document.activeElement, nodeName = activeElement ? activeElement.nodeName : '';\n if (this.options.enable) {\n highlightButton(this, e, true);\n if (nodeName == 'INPUT' || nodeName == 'TEXTAREA') {\n activeElement.blur();\n }\n }\n },\n _release: function (e) {\n var that = this;\n if (e.which > 1) {\n return;\n }\n if (!that.options.enable) {\n e.preventDefault();\n return;\n }\n if (that.trigger(CLICK, {\n target: $(e.target),\n button: that.element\n })) {\n e.preventDefault();\n }\n },\n _style: function () {\n var style = this.options.style, element = this.element, styles;\n if (style) {\n styles = style.split(' ');\n $.each(styles, function () {\n element.addClass('km-' + this);\n });\n }\n },\n _wrap: function () {\n var that = this, icon = that.options.icon, badge = that.options.badge, iconSpan = '').children('span.km-text');\n }\n if (!image[0] && icon) {\n if (!span[0]) {\n iconSpan += ' km-notext';\n }\n that.iconElement = element.prepend($(iconSpan + '\" />'));\n }\n if (badge || badge === 0) {\n that.badgeElement = createBadge(badge).appendTo(element);\n }\n }\n });\n var BackButton = Button.extend({\n options: {\n name: 'BackButton',\n style: 'back'\n },\n init: function (element, options) {\n var that = this;\n Button.fn.init.call(that, element, options);\n if (typeof that.element.attr('href') === 'undefined') {\n that.element.attr('href', '#:back');\n }\n }\n });\n var DetailButton = Button.extend({\n options: {\n name: 'DetailButton',\n style: ''\n },\n init: function (element, options) {\n Button.fn.init.call(this, element, options);\n },\n _style: function () {\n var style = this.options.style + ' detail', element = this.element;\n if (style) {\n var styles = style.split(' ');\n $.each(styles, function () {\n element.addClass('km-' + this);\n });\n }\n },\n _wrap: function () {\n var that = this, icon = that.options.icon, iconSpan = ''));\n }\n }\n });\n ui.plugin(Button);\n ui.plugin(BackButton);\n ui.plugin(DetailButton);\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.buttongroup', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.buttongroup',\n name: 'ButtonGroup',\n category: 'mobile',\n description: 'The Kendo mobile ButtonGroup widget is a linear set of grouped buttons.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, ACTIVE = 'state-active', DISABLE = 'state-disabled', SELECT = 'select', SELECTOR = 'li:not(.km-' + ACTIVE + ')';\n function className(name) {\n return 'k-' + name + ' km-' + name;\n }\n function createBadge(value) {\n return $('' + value + '');\n }\n var ButtonGroup = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.element.addClass('km-buttongroup k-widget k-button-group').find('li').each(that._button);\n that.element.on(that.options.selectOn, SELECTOR, '_select');\n that._enable = true;\n that.select(that.options.index);\n if (!that.options.enable) {\n that._enable = false;\n that.wrapper.addClass(className(DISABLE));\n }\n },\n events: [SELECT],\n options: {\n name: 'ButtonGroup',\n selectOn: 'down',\n index: -1,\n enable: true\n },\n current: function () {\n return this.element.find('.km-' + ACTIVE);\n },\n select: function (li) {\n var that = this, index = -1;\n if (li === undefined || li === -1 || !that._enable || $(li).is('.km-' + DISABLE)) {\n return;\n }\n that.current().removeClass(className(ACTIVE));\n if (typeof li === 'number') {\n index = li;\n li = $(that.element[0].children[li]);\n } else if (li.nodeType) {\n li = $(li);\n index = li.index();\n }\n li.addClass(className(ACTIVE));\n that.selectedIndex = index;\n },\n badge: function (item, value) {\n var buttongroup = this.element, badge;\n if (!isNaN(item)) {\n item = buttongroup.children().get(item);\n }\n item = buttongroup.find(item);\n badge = $(item.children('.km-badge')[0] || createBadge(value).appendTo(item));\n if (value || value === 0) {\n badge.html(value);\n return this;\n }\n if (value === false) {\n badge.empty().remove();\n return this;\n }\n return badge.html();\n },\n enable: function (enable) {\n if (typeof enable == 'undefined') {\n enable = true;\n }\n this.wrapper.toggleClass(className(DISABLE), !enable);\n this._enable = this.options.enable = enable;\n },\n _button: function () {\n var button = $(this).addClass(className('button')), icon = kendo.attrValue(button, 'icon'), badge = kendo.attrValue(button, 'badge'), span = button.children('span'), image = button.find('img').addClass(className('image'));\n if (!span[0]) {\n span = button.wrapInner('').children('span');\n }\n span.addClass(className('text'));\n if (!image[0] && icon) {\n button.prepend($(''));\n }\n if (badge || badge === 0) {\n createBadge(badge).appendTo(button);\n }\n },\n _select: function (e) {\n if (e.which > 1 || e.isDefaultPrevented() || !this._enable) {\n return;\n }\n this.select(e.currentTarget);\n this.trigger(SELECT, { index: this.selectedIndex });\n }\n });\n ui.plugin(ButtonGroup);\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.collapsible', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.collapsible',\n name: 'Collapsible',\n category: 'mobile',\n description: 'The Kendo mobile Collapsible widget provides ability for creating collapsible blocks of content.',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, COLLAPSIBLE = 'km-collapsible', HEADER = 'km-collapsible-header', CONTENT = 'km-collapsible-content', INSET = 'km-collapsibleinset', HEADER_WRAPPER = '
        ', CONTENT_WRAPPER = '
        ', COLLAPSED = 'km-collapsed', EXPANDED = 'km-expanded', ANIMATED = 'km-animated', LEFT = 'left', EXAPND = 'expand', COLLAPSE = 'collapse';\n var Collapsible = Widget.extend({\n init: function (element, options) {\n var that = this, container = $(element);\n Widget.fn.init.call(that, container, options);\n container.addClass(COLLAPSIBLE);\n that._buildHeader();\n that.content = container.children().not(that.header).wrapAll(CONTENT_WRAPPER).parent();\n that._userEvents = new kendo.UserEvents(that.header, {\n fastTap: true,\n tap: function () {\n that.toggle();\n }\n });\n container.addClass(that.options.collapsed ? COLLAPSED : EXPANDED);\n if (that.options.inset) {\n container.addClass(INSET);\n }\n if (that.options.animation) {\n that.content.addClass(ANIMATED);\n that.content.height(0);\n if (that.options.collapsed) {\n that.content.hide();\n }\n } else if (that.options.collapsed) {\n that.content.hide();\n }\n },\n events: [\n EXAPND,\n COLLAPSE\n ],\n options: {\n name: 'Collapsible',\n collapsed: true,\n collapseIcon: 'arrow-n',\n expandIcon: 'arrow-s',\n iconPosition: LEFT,\n animation: true,\n inset: false\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this._userEvents.destroy();\n },\n expand: function (instant) {\n var icon = this.options.collapseIcon, content = this.content, ios = kendo.support.mobileOS.ios;\n if (!this.trigger(EXAPND)) {\n if (icon) {\n this.header.find('.km-icon').removeClass().addClass('km-icon km-' + icon);\n }\n this.element.removeClass(COLLAPSED).addClass(EXPANDED);\n if (this.options.animation && !instant) {\n content.off('transitionend');\n content.show();\n if (ios) {\n content.removeClass(ANIMATED);\n }\n content.height(this._getContentHeight());\n if (ios) {\n content.addClass(ANIMATED);\n }\n kendo.resize(content);\n } else {\n content.show();\n }\n }\n },\n collapse: function (instant) {\n var icon = this.options.expandIcon, content = this.content;\n if (!this.trigger(COLLAPSE)) {\n if (icon) {\n this.header.find('.km-icon').removeClass().addClass('km-icon km-' + icon);\n }\n this.element.removeClass(EXPANDED).addClass(COLLAPSED);\n if (this.options.animation && !instant) {\n content.one('transitionend', function () {\n content.hide();\n });\n content.height(0);\n } else {\n content.hide();\n }\n }\n },\n toggle: function (instant) {\n if (this.isCollapsed()) {\n this.expand(instant);\n } else {\n this.collapse(instant);\n }\n },\n isCollapsed: function () {\n return this.element.hasClass(COLLAPSED);\n },\n resize: function () {\n if (!this.isCollapsed() && this.options.animation) {\n this.content.height(this._getContentHeight());\n }\n },\n _buildHeader: function () {\n var header = this.element.children(':header').wrapAll(HEADER_WRAPPER), iconSpan = $(''), icon = this.options.collapsed ? this.options.expandIcon : this.options.collapseIcon, iconPosition = this.options.iconPosition;\n if (icon) {\n header.prepend(iconSpan);\n iconSpan.addClass('km-' + icon);\n }\n this.header = header.parent();\n this.header.addClass('km-icon-' + iconPosition);\n },\n _getContentHeight: function () {\n var style = this.content.attr('style'), height;\n this.content.css({\n position: 'absolute',\n visibility: 'hidden',\n height: 'auto'\n });\n height = this.content.height();\n this.content.attr('style', style ? style : '');\n return height;\n }\n });\n ui.plugin(Collapsible);\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.listview', [\n 'kendo.data',\n 'kendo.userevents',\n 'kendo.mobile.button'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.listview',\n name: 'ListView',\n category: 'mobile',\n description: 'The Kendo Mobile ListView widget is used to display flat or grouped list of items.',\n depends: [\n 'data',\n 'userevents',\n 'mobile.button'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Node = window.Node, mobile = kendo.mobile, ui = mobile.ui, outerHeight = kendo._outerHeight, DataSource = kendo.data.DataSource, Widget = ui.DataBoundWidget, ITEM_SELECTOR = '.km-list > li, > li:not(.km-group-container)', HIGHLIGHT_SELECTOR = '.km-listview-link, .km-listview-label', ICON_SELECTOR = '[' + kendo.attr('icon') + ']', proxy = $.proxy, attrValue = kendo.attrValue, GROUP_CLASS = 'km-group-title', ACTIVE_CLASS = 'km-state-active', GROUP_WRAPPER = '
        ', GROUP_TEMPLATE = kendo.template('
      • #= this.headerTemplate(data) #
          #= kendo.render(this.template, data.items)#
      • '), WRAPPER = '
        ', SEARCH_TEMPLATE = kendo.template(''), NS = '.kendoMobileListView', STYLED = 'styled', DATABOUND = 'dataBound', DATABINDING = 'dataBinding', ITEM_CHANGE = 'itemChange', CLICK = 'click', CHANGE = 'change', PROGRESS = 'progress', FUNCTION = 'function', whitespaceRegExp = /^\\s+$/, buttonRegExp = /button/;\n function whitespace() {\n return this.nodeType === Node.TEXT_NODE && this.nodeValue.match(whitespaceRegExp);\n }\n function addIcon(item, icon) {\n if (icon && !item[0].querySelector('.km-icon')) {\n item.prepend('');\n }\n }\n function enhanceItem(item) {\n addIcon(item, attrValue(item, 'icon'));\n addIcon(item, attrValue(item.children(ICON_SELECTOR), 'icon'));\n }\n function enhanceLinkItem(item) {\n var parent = item.parent(), itemAndDetailButtons = item.add(parent.children(kendo.roleSelector('detailbutton'))), otherNodes = parent.contents().not(itemAndDetailButtons).not(whitespace);\n if (otherNodes.length) {\n return;\n }\n item.addClass('km-listview-link').attr(kendo.attr('role'), 'listview-link');\n addIcon(item, attrValue(parent, 'icon'));\n addIcon(item, attrValue(item, 'icon'));\n }\n function enhanceCheckBoxItem(label) {\n if (!label[0].querySelector('input[type=checkbox],input[type=radio]')) {\n return;\n }\n var item = label.parent();\n if (item.contents().not(label).not(function () {\n return this.nodeType == 3;\n })[0]) {\n return;\n }\n label.addClass('km-listview-label');\n label.children('[type=checkbox],[type=radio]').addClass('km-widget km-icon km-check');\n }\n function putAt(element, top) {\n $(element).css('transform', 'translate3d(0px, ' + top + 'px, 0px)');\n }\n var HeaderFixer = kendo.Class.extend({\n init: function (listView) {\n var scroller = listView.scroller();\n if (!scroller) {\n return;\n }\n this.options = listView.options;\n this.element = listView.element;\n this.scroller = listView.scroller();\n this._shouldFixHeaders();\n var headerFixer = this;\n var cacheHeaders = function () {\n headerFixer._cacheHeaders();\n };\n listView.bind('resize', cacheHeaders);\n listView.bind(STYLED, cacheHeaders);\n listView.bind(DATABOUND, cacheHeaders);\n this._scrollHandler = function (e) {\n headerFixer._fixHeader(e);\n };\n scroller.bind('scroll', this._scrollHandler);\n },\n destroy: function () {\n var that = this;\n if (that.scroller) {\n that.scroller.unbind('scroll', that._scrollHandler);\n }\n },\n _fixHeader: function (e) {\n if (!this.fixedHeaders) {\n return;\n }\n var i = 0, scroller = this.scroller, headers = this.headers, scrollTop = e.scrollTop, headerPair, offset, header;\n do {\n headerPair = headers[i++];\n if (!headerPair) {\n header = $('
        ');\n break;\n }\n offset = headerPair.offset;\n header = headerPair.header;\n } while (offset + 1 > scrollTop);\n if (this.currentHeader != i) {\n scroller.fixedContainer.html(header.clone());\n this.currentHeader = i;\n }\n },\n _shouldFixHeaders: function () {\n this.fixedHeaders = this.options.type === 'group' && this.options.fixedHeaders;\n },\n _cacheHeaders: function () {\n this._shouldFixHeaders();\n if (!this.fixedHeaders) {\n return;\n }\n var headers = [], offset = this.scroller.scrollTop;\n this.element.find('.' + GROUP_CLASS).each(function (_, header) {\n header = $(header);\n headers.unshift({\n offset: header.position().top + offset,\n header: header\n });\n });\n this.headers = headers;\n this._fixHeader({ scrollTop: offset });\n }\n });\n var DEFAULT_PULL_PARAMETERS = function () {\n return { page: 1 };\n };\n var RefreshHandler = kendo.Class.extend({\n init: function (listView) {\n var handler = this, options = listView.options, scroller = listView.scroller(), pullParameters = options.pullParameters || DEFAULT_PULL_PARAMETERS;\n this.listView = listView;\n this.scroller = scroller;\n listView.bind('_dataSource', function (e) {\n handler.setDataSource(e.dataSource);\n });\n scroller.setOptions({\n pullToRefresh: true,\n pull: function () {\n if (!handler._pulled) {\n handler._pulled = true;\n handler.dataSource.read(pullParameters.call(listView, handler._first));\n }\n },\n messages: {\n pullTemplate: options.messages.pullTemplate,\n releaseTemplate: options.messages.releaseTemplate,\n refreshTemplate: options.messages.refreshTemplate\n }\n });\n },\n setDataSource: function (dataSource) {\n var handler = this;\n this._first = dataSource.view()[0];\n this.dataSource = dataSource;\n dataSource.bind('change', function () {\n handler._change();\n });\n dataSource.bind('error', function () {\n handler._change();\n });\n },\n _change: function () {\n var scroller = this.scroller, dataSource = this.dataSource;\n if (this._pulled) {\n scroller.pullHandled();\n }\n if (this._pulled || !this._first) {\n var view = dataSource.view();\n if (view[0]) {\n this._first = view[0];\n }\n }\n this._pulled = false;\n }\n });\n var VirtualList = kendo.Observable.extend({\n init: function (options) {\n var list = this;\n kendo.Observable.fn.init.call(list);\n list.buffer = options.buffer;\n list.height = options.height;\n list.item = options.item;\n list.items = [];\n list.footer = options.footer;\n list.buffer.bind('reset', function () {\n list.refresh();\n });\n },\n refresh: function () {\n var buffer = this.buffer, items = this.items, endReached = false;\n while (items.length) {\n items.pop().destroy();\n }\n this.offset = buffer.offset;\n var itemConstructor = this.item, prevItem, item;\n for (var idx = 0; idx < buffer.viewSize; idx++) {\n if (idx === buffer.total()) {\n endReached = true;\n break;\n }\n item = itemConstructor(this.content(this.offset + items.length));\n item.below(prevItem);\n prevItem = item;\n items.push(item);\n }\n this.itemCount = items.length;\n this.trigger('reset');\n this._resize();\n if (endReached) {\n this.trigger('endReached');\n }\n },\n totalHeight: function () {\n if (!this.items[0]) {\n return 0;\n }\n var list = this, items = list.items, top = items[0].top, bottom = items[items.length - 1].bottom, averageItemHeight = (bottom - top) / list.itemCount, remainingItemsCount = list.buffer.length - list.offset - list.itemCount;\n return (this.footer ? this.footer.height : 0) + bottom + remainingItemsCount * averageItemHeight;\n },\n batchUpdate: function (top) {\n var height = this.height(), items = this.items, item, initialOffset = this.offset;\n if (!items[0]) {\n return;\n }\n if (this.lastDirection) {\n while (items[items.length - 1].bottom > top + height * 2) {\n if (this.offset === 0) {\n break;\n }\n this.offset--;\n item = items.pop();\n item.update(this.content(this.offset));\n item.above(items[0]);\n items.unshift(item);\n }\n } else {\n while (items[0].top < top - height) {\n var nextIndex = this.offset + this.itemCount;\n if (nextIndex === this.buffer.total()) {\n this.trigger('endReached');\n break;\n }\n if (nextIndex === this.buffer.length) {\n break;\n }\n item = items.shift();\n item.update(this.content(this.offset + this.itemCount));\n item.below(items[items.length - 1]);\n items.push(item);\n this.offset++;\n }\n }\n if (initialOffset !== this.offset) {\n this._resize();\n }\n },\n update: function (top) {\n var list = this, items = this.items, item, firstItem, lastItem, height = this.height(), itemCount = this.itemCount, padding = height / 2, up = (this.lastTop || 0) > top, topBorder = top - padding, bottomBorder = top + height + padding;\n if (!items[0]) {\n return;\n }\n this.lastTop = top;\n this.lastDirection = up;\n if (up) {\n if (items[0].top > topBorder && items[items.length - 1].bottom > bottomBorder + padding && this.offset > 0) {\n this.offset--;\n item = items.pop();\n firstItem = items[0];\n item.update(this.content(this.offset));\n items.unshift(item);\n item.above(firstItem);\n list._resize();\n }\n } else {\n if (items[items.length - 1].bottom < bottomBorder && items[0].top < topBorder - padding) {\n var nextIndex = this.offset + itemCount;\n if (nextIndex === this.buffer.total()) {\n this.trigger('endReached');\n } else if (nextIndex !== this.buffer.length) {\n item = items.shift();\n lastItem = items[items.length - 1];\n items.push(item);\n item.update(this.content(this.offset + this.itemCount));\n list.offset++;\n item.below(lastItem);\n list._resize();\n }\n }\n }\n },\n content: function (index) {\n return this.buffer.at(index);\n },\n destroy: function () {\n this.unbind();\n },\n _resize: function () {\n var items = this.items, top = 0, bottom = 0, firstItem = items[0], lastItem = items[items.length - 1];\n if (firstItem) {\n top = firstItem.top;\n bottom = lastItem.bottom;\n }\n this.trigger('resize', {\n top: top,\n bottom: bottom\n });\n if (this.footer) {\n this.footer.below(lastItem);\n }\n }\n });\n kendo.mobile.ui.VirtualList = VirtualList;\n var VirtualListViewItem = kendo.Class.extend({\n init: function (listView, dataItem) {\n var element = listView.append([dataItem], true)[0], height = element.offsetHeight;\n $.extend(this, {\n top: 0,\n element: element,\n listView: listView,\n height: height,\n bottom: height\n });\n },\n update: function (dataItem) {\n this.element = this.listView.setDataItem(this.element, dataItem);\n },\n above: function (item) {\n if (item) {\n this.height = this.element.offsetHeight;\n this.top = item.top - this.height;\n this.bottom = item.top;\n putAt(this.element, this.top);\n }\n },\n below: function (item) {\n if (item) {\n this.height = this.element.offsetHeight;\n this.top = item.bottom;\n this.bottom = this.top + this.height;\n putAt(this.element, this.top);\n }\n },\n destroy: function () {\n kendo.destroy(this.element);\n $(this.element).remove();\n }\n });\n var LOAD_ICON = '
        ';\n var VirtualListViewLoadingIndicator = kendo.Class.extend({\n init: function (listView) {\n this.element = $('
      • ').appendTo(listView.element);\n this._loadIcon = $(LOAD_ICON).appendTo(this.element);\n },\n enable: function () {\n this.element.show();\n this.height = outerHeight(this.element, true);\n },\n disable: function () {\n this.element.hide();\n this.height = 0;\n },\n below: function (item) {\n if (item) {\n this.top = item.bottom;\n this.bottom = this.height + this.top;\n putAt(this.element, this.top);\n }\n }\n });\n var VirtualListViewPressToLoadMore = VirtualListViewLoadingIndicator.extend({\n init: function (listView, buffer) {\n this._loadIcon = $(LOAD_ICON).hide();\n this._loadButton = $('' + listView.options.messages.loadMoreText + '').hide();\n this.element = $('
      • ').append(this._loadIcon).append(this._loadButton).appendTo(listView.element);\n var loadMore = this;\n this._loadButton.kendoMobileButton().data('kendoMobileButton').bind('click', function () {\n loadMore._hideShowButton();\n buffer.next();\n });\n buffer.bind('resize', function () {\n loadMore._showLoadButton();\n });\n this.height = outerHeight(this.element, true);\n this.disable();\n },\n _hideShowButton: function () {\n this._loadButton.hide();\n this.element.addClass('km-scroller-refresh');\n this._loadIcon.css('display', 'block');\n },\n _showLoadButton: function () {\n this._loadButton.show();\n this.element.removeClass('km-scroller-refresh');\n this._loadIcon.hide();\n }\n });\n var VirtualListViewItemBinder = kendo.Class.extend({\n init: function (listView) {\n var binder = this;\n this.chromeHeight = outerHeight(listView.wrapper.children().not(listView.element));\n this.listView = listView;\n this.scroller = listView.scroller();\n this.options = listView.options;\n listView.bind('_dataSource', function (e) {\n binder.setDataSource(e.dataSource, e.empty);\n });\n listView.bind('resize', function () {\n if (!binder.list.items.length) {\n return;\n }\n binder.scroller.reset();\n binder.buffer.range(0);\n binder.list.refresh();\n });\n this.scroller.makeVirtual();\n this._scroll = function (e) {\n binder.list.update(e.scrollTop);\n };\n this.scroller.bind('scroll', this._scroll);\n this._scrollEnd = function (e) {\n binder.list.batchUpdate(e.scrollTop);\n };\n this.scroller.bind('scrollEnd', this._scrollEnd);\n },\n destroy: function () {\n this.list.unbind();\n this.buffer.unbind();\n this.scroller.unbind('scroll', this._scroll);\n this.scroller.unbind('scrollEnd', this._scrollEnd);\n },\n setDataSource: function (dataSource, empty) {\n var binder = this, options = this.options, listView = this.listView, scroller = listView.scroller(), pressToLoadMore = options.loadMore, pageSize, buffer, footer;\n this.dataSource = dataSource;\n pageSize = dataSource.pageSize() || options.virtualViewSize;\n if (!pageSize && !empty) {\n throw new Error('the DataSource does not have page size configured. Page Size setting is mandatory for the mobile listview virtual scrolling to work as expected.');\n }\n if (this.buffer) {\n this.buffer.destroy();\n }\n buffer = new kendo.data.Buffer(dataSource, Math.floor(pageSize / 2), pressToLoadMore);\n if (pressToLoadMore) {\n footer = new VirtualListViewPressToLoadMore(listView, buffer);\n } else {\n footer = new VirtualListViewLoadingIndicator(listView);\n }\n if (this.list) {\n this.list.destroy();\n }\n var list = new VirtualList({\n buffer: buffer,\n footer: footer,\n item: function (dataItem) {\n return new VirtualListViewItem(listView, dataItem);\n },\n height: function () {\n return scroller.height();\n }\n });\n list.bind('resize', function () {\n binder.updateScrollerSize();\n listView.updateSize();\n });\n list.bind('reset', function () {\n binder.footer.enable();\n });\n list.bind('endReached', function () {\n footer.disable();\n binder.updateScrollerSize();\n });\n buffer.bind('expand', function () {\n list.lastDirection = false;\n list.batchUpdate(scroller.scrollTop);\n });\n $.extend(this, {\n buffer: buffer,\n scroller: scroller,\n list: list,\n footer: footer\n });\n },\n updateScrollerSize: function () {\n this.scroller.virtualSize(0, this.list.totalHeight() + this.chromeHeight);\n },\n refresh: function () {\n this.list.refresh();\n },\n reset: function () {\n this.buffer.range(0);\n this.list.refresh();\n }\n });\n var ListViewItemBinder = kendo.Class.extend({\n init: function (listView) {\n var binder = this;\n this.listView = listView;\n this.options = listView.options;\n var itemBinder = this;\n this._refreshHandler = function (e) {\n itemBinder.refresh(e);\n };\n this._progressHandler = function () {\n listView.showLoading();\n };\n listView.bind('_dataSource', function (e) {\n binder.setDataSource(e.dataSource);\n });\n },\n destroy: function () {\n this._unbindDataSource();\n },\n reset: function () {\n },\n refresh: function (e) {\n var action = e && e.action, dataItems = e && e.items, listView = this.listView, dataSource = this.dataSource, prependOnRefresh = this.options.appendOnRefresh, view = dataSource.view(), groups = dataSource.group(), groupedMode = groups && groups[0], item;\n if (action === 'itemchange') {\n if (!listView._hasBindingTarget()) {\n item = listView.findByDataItem(dataItems)[0];\n if (item) {\n listView.setDataItem(item, dataItems[0]);\n }\n }\n return;\n }\n var removedItems, addedItems, addedDataItems;\n var adding = action === 'add' && !groupedMode || prependOnRefresh && !listView._filter;\n var removing = action === 'remove' && !groupedMode;\n if (adding) {\n removedItems = [];\n } else if (removing) {\n removedItems = listView.findByDataItem(dataItems);\n }\n if (listView.trigger(DATABINDING, {\n action: action || 'rebind',\n items: dataItems,\n removedItems: removedItems,\n index: e && e.index\n })) {\n if (this._shouldShowLoading()) {\n listView.hideLoading();\n }\n return;\n }\n if (action === 'add' && !groupedMode) {\n var index = view.indexOf(dataItems[0]);\n if (index > -1) {\n addedItems = listView.insertAt(dataItems, index);\n addedDataItems = dataItems;\n }\n } else if (action === 'remove' && !groupedMode) {\n addedItems = [];\n listView.remove(dataItems);\n } else if (groupedMode) {\n listView.replaceGrouped(view);\n } else if (prependOnRefresh && !listView._filter) {\n addedItems = listView.prepend(view);\n addedDataItems = view;\n } else {\n listView.replace(view);\n }\n if (this._shouldShowLoading()) {\n listView.hideLoading();\n }\n listView.trigger(DATABOUND, {\n ns: ui,\n addedItems: addedItems,\n addedDataItems: addedDataItems\n });\n },\n setDataSource: function (dataSource) {\n if (this.dataSource) {\n this._unbindDataSource();\n }\n this.dataSource = dataSource;\n dataSource.bind(CHANGE, this._refreshHandler);\n if (this._shouldShowLoading()) {\n this.dataSource.bind(PROGRESS, this._progressHandler);\n }\n },\n _unbindDataSource: function () {\n this.dataSource.unbind(CHANGE, this._refreshHandler).unbind(PROGRESS, this._progressHandler);\n },\n _shouldShowLoading: function () {\n var options = this.options;\n return !options.pullToRefresh && !options.loadMore && !options.endlessScroll;\n }\n });\n var ListViewFilter = kendo.Class.extend({\n init: function (listView) {\n var filter = this, filterable = listView.options.filterable, events = 'change paste', that = this;\n this.listView = listView;\n this.options = filterable;\n listView.element.before(SEARCH_TEMPLATE({ placeholder: filterable.placeholder || 'Search...' }));\n if (filterable.autoFilter !== false) {\n events += ' keyup';\n }\n this.element = listView.wrapper.find('.km-search-form');\n this.searchInput = listView.wrapper.find('input[type=search]').closest('form').on('submit' + NS, function (e) {\n e.preventDefault();\n }).end().on('focus' + NS, function () {\n filter._oldFilter = filter.searchInput.val();\n }).on(events.split(' ').join(NS + ' ') + NS, proxy(this._filterChange, this));\n this.clearButton = listView.wrapper.find('.km-filter-reset').on(CLICK, proxy(this, '_clearFilter')).hide();\n this._dataSourceChange = $.proxy(this._refreshInput, this);\n listView.bind('_dataSource', function (e) {\n e.dataSource.bind('change', that._dataSourceChange);\n });\n },\n _refreshInput: function () {\n var appliedFilters = this.listView.dataSource.filter();\n var searchInput = this.listView._filter.searchInput;\n if (!appliedFilters || appliedFilters.filters[0].field !== this.listView.options.filterable.field) {\n searchInput.val('');\n } else {\n searchInput.val(appliedFilters.filters[0].value);\n }\n },\n _search: function (expr) {\n this._filter = true;\n this.clearButton[expr ? 'show' : 'hide']();\n this.listView.dataSource.filter(expr);\n },\n _filterChange: function (e) {\n var filter = this;\n if (e.type == 'paste' && this.options.autoFilter !== false) {\n setTimeout(function () {\n filter._applyFilter();\n }, 1);\n } else {\n this._applyFilter();\n }\n },\n _applyFilter: function () {\n var options = this.options, value = this.searchInput.val(), expr = value.length ? {\n field: options.field,\n operator: options.operator || 'startswith',\n ignoreCase: options.ignoreCase,\n value: value\n } : null;\n if (value === this._oldFilter) {\n return;\n }\n this._oldFilter = value;\n this._search(expr);\n },\n _clearFilter: function (e) {\n this.searchInput.val('');\n this._search(null);\n e.preventDefault();\n }\n });\n var ListView = Widget.extend({\n init: function (element, options) {\n var listView = this;\n Widget.fn.init.call(this, element, options);\n element = this.element;\n options = this.options;\n if (options.scrollTreshold) {\n options.scrollThreshold = options.scrollTreshold;\n }\n element.on('down', HIGHLIGHT_SELECTOR, '_highlight').on('move up cancel', HIGHLIGHT_SELECTOR, '_dim');\n this._userEvents = new kendo.UserEvents(element, {\n fastTap: true,\n filter: ITEM_SELECTOR,\n allowSelection: true,\n tap: function (e) {\n listView._click(e);\n }\n });\n element.css('-ms-touch-action', 'auto');\n element.wrap(WRAPPER);\n this.wrapper = this.element.parent();\n this._headerFixer = new HeaderFixer(this);\n this._itemsCache = {};\n this._templates();\n this.virtual = options.endlessScroll || options.loadMore;\n this._style();\n if (this.options.$angular && (this.virtual || this.options.pullToRefresh)) {\n setTimeout($.proxy(this, '_start'));\n } else {\n this._start();\n }\n },\n _start: function () {\n var options = this.options;\n if (this.options.filterable) {\n this._filter = new ListViewFilter(this);\n }\n if (this.virtual) {\n this._itemBinder = new VirtualListViewItemBinder(this);\n } else {\n this._itemBinder = new ListViewItemBinder(this);\n }\n if (this.options.pullToRefresh) {\n this._pullToRefreshHandler = new RefreshHandler(this);\n }\n this.setDataSource(options.dataSource);\n this._enhanceItems(this.items());\n kendo.notify(this, ui);\n },\n events: [\n CLICK,\n DATABINDING,\n DATABOUND,\n ITEM_CHANGE\n ],\n options: {\n name: 'ListView',\n style: '',\n type: 'flat',\n autoBind: true,\n fixedHeaders: false,\n template: '#:data#',\n headerTemplate: '#:value#',\n appendOnRefresh: false,\n loadMore: false,\n endlessScroll: false,\n scrollThreshold: 30,\n pullToRefresh: false,\n messages: {\n loadMoreText: 'Press to load more',\n pullTemplate: 'Pull to refresh',\n releaseTemplate: 'Release to refresh',\n refreshTemplate: 'Refreshing'\n },\n pullOffset: 140,\n filterable: false,\n virtualViewSize: null\n },\n refresh: function () {\n this._itemBinder.refresh();\n },\n reset: function () {\n this._itemBinder.reset();\n },\n setDataSource: function (dataSource) {\n var emptyDataSource = !dataSource;\n this.dataSource = DataSource.create(dataSource);\n this.trigger('_dataSource', {\n dataSource: this.dataSource,\n empty: emptyDataSource\n });\n if (this.options.autoBind && !emptyDataSource) {\n this.items().remove();\n this.dataSource.fetch();\n }\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.destroy(this.element);\n this._userEvents.destroy();\n if (this._itemBinder) {\n this._itemBinder.destroy();\n }\n if (this._headerFixer) {\n this._headerFixer.destroy();\n }\n this.element.unwrap();\n delete this.element;\n delete this.wrapper;\n delete this._userEvents;\n },\n items: function () {\n if (this.options.type === 'group') {\n return this.element.find('.km-list').children();\n } else {\n return this.element.children().not('.km-load-more');\n }\n },\n scroller: function () {\n if (!this._scrollerInstance) {\n this._scrollerInstance = this.element.closest('.km-scroll-wrapper').data('kendoMobileScroller');\n }\n return this._scrollerInstance;\n },\n showLoading: function () {\n var view = this.view();\n if (view && view.loader) {\n view.loader.show();\n }\n },\n hideLoading: function () {\n var view = this.view();\n if (view && view.loader) {\n view.loader.hide();\n }\n },\n insertAt: function (dataItems, index, triggerChange) {\n var listView = this;\n return listView._renderItems(dataItems, function (items) {\n if (index === 0) {\n listView.element.prepend(items);\n } else if (index === -1) {\n listView.element.append(items);\n } else {\n listView.items().eq(index - 1).after(items);\n }\n if (triggerChange) {\n for (var i = 0; i < items.length; i++) {\n listView.trigger(ITEM_CHANGE, {\n item: items.eq(i),\n data: dataItems[i],\n ns: ui\n });\n }\n }\n });\n },\n append: function (dataItems, triggerChange) {\n return this.insertAt(dataItems, -1, triggerChange);\n },\n prepend: function (dataItems, triggerChange) {\n return this.insertAt(dataItems, 0, triggerChange);\n },\n replace: function (dataItems) {\n this.options.type = 'flat';\n this._angularItems('cleanup');\n kendo.destroy(this.element.children());\n this.element.empty();\n this._userEvents.cancel();\n this._style();\n return this.insertAt(dataItems, 0);\n },\n replaceGrouped: function (groups) {\n this.options.type = 'group';\n this._angularItems('cleanup');\n this.element.empty();\n var items = $(kendo.render(this.groupTemplate, groups));\n this._enhanceItems(items.children('ul').children('li'));\n this.element.append(items);\n mobile.init(items);\n this._style();\n this._angularItems('compile');\n },\n remove: function (dataItems) {\n var items = this.findByDataItem(dataItems);\n this.angular('cleanup', function () {\n return { elements: items };\n });\n kendo.destroy(items);\n items.remove();\n },\n findByDataItem: function (dataItems) {\n var selectors = [];\n for (var idx = 0, length = dataItems.length; idx < length; idx++) {\n selectors[idx] = '[data-' + kendo.ns + 'uid=' + dataItems[idx].uid + ']';\n }\n return this.element.find(selectors.join(','));\n },\n setDataItem: function (item, dataItem) {\n var listView = this, replaceItem = function (items) {\n var newItem = $(items[0]);\n kendo.destroy(item);\n listView.angular('cleanup', function () {\n return { elements: [$(item)] };\n });\n $(item).replaceWith(newItem);\n listView.trigger(ITEM_CHANGE, {\n item: newItem,\n data: dataItem,\n ns: ui\n });\n };\n return this._renderItems([dataItem], replaceItem)[0];\n },\n updateSize: function () {\n this._size = this.getSize();\n },\n _renderItems: function (dataItems, callback) {\n var items = $(kendo.render(this.template, dataItems));\n callback(items);\n this.angular('compile', function () {\n return {\n elements: items,\n data: dataItems.map(function (data) {\n return { dataItem: data };\n })\n };\n });\n mobile.init(items);\n this._enhanceItems(items);\n return items;\n },\n _dim: function (e) {\n this._toggle(e, false);\n },\n _highlight: function (e) {\n this._toggle(e, true);\n },\n _toggle: function (e, highlight) {\n if (e.which > 1) {\n return;\n }\n var clicked = $(e.currentTarget), item = clicked.parent(), role = attrValue(clicked, 'role') || '', plainItem = !role.match(buttonRegExp), prevented = e.isDefaultPrevented();\n if (plainItem) {\n item.toggleClass(ACTIVE_CLASS, highlight && !prevented);\n }\n },\n _templates: function () {\n var template = this.options.template, headerTemplate = this.options.headerTemplate, dataIDAttribute = ' data-uid=\"#=arguments[0].uid || \"\"#\"', templateProxy = {}, groupTemplateProxy = {};\n if (typeof template === FUNCTION) {\n templateProxy.template = template;\n template = '#=this.template(data)#';\n }\n this.template = proxy(kendo.template('' + template + ''), templateProxy);\n groupTemplateProxy.template = this.template;\n if (typeof headerTemplate === FUNCTION) {\n groupTemplateProxy._headerTemplate = headerTemplate;\n headerTemplate = '#=this._headerTemplate(data)#';\n }\n groupTemplateProxy.headerTemplate = kendo.template(headerTemplate);\n this.groupTemplate = proxy(GROUP_TEMPLATE, groupTemplateProxy);\n },\n _click: function (e) {\n if (e.event.which > 1 || e.event.isDefaultPrevented()) {\n return;\n }\n var dataItem, item = e.target, target = $(e.event.target), buttonElement = target.closest(kendo.roleSelector('button', 'detailbutton', 'backbutton')), button = kendo.widgetInstance(buttonElement, ui), id = item.attr(kendo.attr('uid'));\n if (id) {\n dataItem = this.dataSource.getByUid(id);\n }\n if (this.trigger(CLICK, {\n target: target,\n item: item,\n dataItem: dataItem,\n button: button\n })) {\n e.preventDefault();\n }\n },\n _styleGroups: function () {\n var rootItems = this.element.children();\n rootItems.children('ul').addClass('km-list');\n rootItems.each(function () {\n var li = $(this), groupHeader = li.contents().first();\n li.addClass('km-group-container');\n if (!groupHeader.is('ul') && !groupHeader.is('div.' + GROUP_CLASS)) {\n groupHeader.wrap(GROUP_WRAPPER);\n }\n });\n },\n _style: function () {\n var options = this.options, grouped = options.type === 'group', element = this.element, inset = options.style === 'inset';\n element.addClass('km-listview').toggleClass('km-list', !grouped).toggleClass('km-virtual-list', this.virtual).toggleClass('km-listinset', !grouped && inset).toggleClass('km-listgroup', grouped && !inset).toggleClass('km-listgroupinset', grouped && inset);\n if (!element.parents('.km-listview')[0]) {\n element.closest('.km-content').toggleClass('km-insetcontent', inset);\n }\n if (grouped) {\n this._styleGroups();\n }\n this.trigger(STYLED);\n },\n _enhanceItems: function (items) {\n items.each(function () {\n var item = $(this), child, enhanced = false;\n item.children().each(function () {\n child = $(this);\n if (child.is('a')) {\n enhanceLinkItem(child);\n enhanced = true;\n } else if (child.is('label')) {\n enhanceCheckBoxItem(child);\n enhanced = true;\n }\n });\n if (!enhanced) {\n enhanceItem(item);\n }\n });\n }\n });\n ui.plugin(ListView);\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.navbar', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.navbar',\n name: 'NavBar',\n category: 'mobile',\n description: 'The Kendo mobile NavBar widget is used inside a mobile View or Layout Header element to display an application navigation bar.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, Widget = ui.Widget;\n function createContainer(align, element) {\n var items = element.find('[' + kendo.attr('align') + '=' + align + ']');\n if (items[0]) {\n return $('
        ').append(items).prependTo(element);\n }\n }\n function toggleTitle(centerElement) {\n var siblings = centerElement.siblings(), noTitle = !!centerElement.children('ul')[0], showTitle = !!siblings[0] && $.trim(centerElement.text()) === '', android = !!(kendo.mobile.application && kendo.mobile.application.element.is('.km-android'));\n centerElement.prevAll().toggleClass('km-absolute', noTitle);\n centerElement.toggleClass('km-show-title', showTitle);\n centerElement.toggleClass('km-fill-title', showTitle && !$.trim(centerElement.html()));\n centerElement.toggleClass('km-no-title', noTitle);\n centerElement.toggleClass('km-hide-title', android && !siblings.children().is(':visible'));\n }\n var NavBar = 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.container().bind('show', $.proxy(this, 'refresh'));\n element.addClass('km-navbar').wrapInner($('
        '));\n that.leftElement = createContainer('left', element);\n that.rightElement = createContainer('right', element);\n that.centerElement = element.find('.km-view-title');\n },\n options: { name: 'NavBar' },\n title: function (value) {\n this.element.find(kendo.roleSelector('view-title')).text(value);\n toggleTitle(this.centerElement);\n },\n refresh: function (e) {\n var view = e.view;\n this.title(view.options.title);\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.destroy(this.element);\n }\n });\n ui.plugin(NavBar);\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.scrollview', [\n 'kendo.fx',\n 'kendo.data',\n 'kendo.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.scrollview',\n name: 'ScrollView',\n category: 'mobile',\n description: 'The Kendo Mobile ScrollView widget is used to scroll content wider than the device screen.',\n depends: [\n 'fx',\n 'data',\n 'draganddrop'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, proxy = $.proxy, Transition = kendo.effects.Transition, Pane = kendo.ui.Pane, PaneDimensions = kendo.ui.PaneDimensions, Widget = ui.DataBoundWidget, DataSource = kendo.data.DataSource, Buffer = kendo.data.Buffer, BatchBuffer = kendo.data.BatchBuffer, math = Math, abs = math.abs, ceil = math.ceil, round = math.round, max = math.max, min = math.min, floor = math.floor, CHANGE = 'change', CHANGING = 'changing', REFRESH = 'refresh', CURRENT_PAGE_CLASS = 'current-page', VIRTUAL_PAGE_CLASS = 'virtual-page', FUNCTION = 'function', ITEM_CHANGE = 'itemChange', CLEANUP = 'cleanup', VIRTUAL_PAGE_COUNT = 3, LEFT_PAGE = -1, CETER_PAGE = 0, RIGHT_PAGE = 1, LEFT_SWIPE = -1, NUDGE = 0, RIGHT_SWIPE = 1;\n function className(name) {\n return 'k-' + name + ' km-' + name;\n }\n var Pager = kendo.Class.extend({\n init: function (scrollView) {\n var that = this, element = $('
          ');\n scrollView.element.append(element);\n this._changeProxy = proxy(that, '_change');\n this._refreshProxy = proxy(that, '_refresh');\n scrollView.bind(CHANGE, this._changeProxy);\n scrollView.bind(REFRESH, this._refreshProxy);\n $.extend(that, {\n element: element,\n scrollView: scrollView\n });\n },\n items: function () {\n return this.element.children();\n },\n _refresh: function (e) {\n var pageHTML = '';\n for (var idx = 0; idx < e.pageCount; idx++) {\n pageHTML += '
        1. ';\n }\n this.element.html(pageHTML);\n this.items().eq(e.page).addClass(className(CURRENT_PAGE_CLASS));\n },\n _change: function (e) {\n this.items().removeClass(className(CURRENT_PAGE_CLASS)).eq(e.page).addClass(className(CURRENT_PAGE_CLASS));\n },\n destroy: function () {\n this.scrollView.unbind(CHANGE, this._changeProxy);\n this.scrollView.unbind(REFRESH, this._refreshProxy);\n this.element.remove();\n }\n });\n kendo.mobile.ui.ScrollViewPager = Pager;\n var TRANSITION_END = 'transitionEnd', DRAG_START = 'dragStart', DRAG_END = 'dragEnd';\n var ElasticPane = kendo.Observable.extend({\n init: function (element, options) {\n var that = this;\n kendo.Observable.fn.init.call(this);\n this.element = element;\n this.container = element.parent();\n var movable, transition, userEvents, dimensions, dimension, pane;\n movable = new kendo.ui.Movable(that.element);\n transition = new Transition({\n axis: 'x',\n movable: movable,\n onEnd: function () {\n that.trigger(TRANSITION_END);\n }\n });\n userEvents = new kendo.UserEvents(element, {\n fastTap: true,\n start: function (e) {\n if (abs(e.x.velocity) * 2 >= abs(e.y.velocity)) {\n userEvents.capture();\n } else {\n userEvents.cancel();\n }\n that.trigger(DRAG_START, e);\n transition.cancel();\n },\n allowSelection: true,\n end: function (e) {\n that.trigger(DRAG_END, e);\n }\n });\n dimensions = new PaneDimensions({\n element: that.element,\n container: that.container\n });\n dimension = dimensions.x;\n dimension.bind(CHANGE, function () {\n that.trigger(CHANGE);\n });\n pane = new Pane({\n dimensions: dimensions,\n userEvents: userEvents,\n movable: movable,\n elastic: true\n });\n $.extend(that, {\n duration: options && options.duration || 1,\n movable: movable,\n transition: transition,\n userEvents: userEvents,\n dimensions: dimensions,\n dimension: dimension,\n pane: pane\n });\n this.bind([\n TRANSITION_END,\n DRAG_START,\n DRAG_END,\n CHANGE\n ], options);\n },\n size: function () {\n return {\n width: this.dimensions.x.getSize(),\n height: this.dimensions.y.getSize()\n };\n },\n total: function () {\n return this.dimension.getTotal();\n },\n offset: function () {\n return -this.movable.x;\n },\n updateDimension: function () {\n this.dimension.update(true);\n },\n refresh: function () {\n this.dimensions.refresh();\n },\n moveTo: function (offset) {\n this.movable.moveAxis('x', -offset);\n },\n transitionTo: function (offset, ease, instant) {\n if (instant) {\n this.moveTo(-offset);\n } else {\n this.transition.moveTo({\n location: offset,\n duration: this.duration,\n ease: ease\n });\n }\n }\n });\n kendo.mobile.ui.ScrollViewElasticPane = ElasticPane;\n var ScrollViewContent = kendo.Observable.extend({\n init: function (element, pane, options) {\n var that = this;\n kendo.Observable.fn.init.call(this);\n that.element = element;\n that.pane = pane;\n that._getPages();\n this.page = 0;\n this.pageSize = options.pageSize || 1;\n this.contentHeight = options.contentHeight;\n this.enablePager = options.enablePager;\n this.pagerOverlay = options.pagerOverlay;\n },\n scrollTo: function (page, instant) {\n this.page = page;\n this.pane.transitionTo(-page * this.pane.size().width, Transition.easeOutExpo, instant);\n },\n paneMoved: function (swipeType, bounce, callback, instant) {\n var that = this, pane = that.pane, width = pane.size().width * that.pageSize, approx = round, ease = bounce ? Transition.easeOutBack : Transition.easeOutExpo, snap, nextPage;\n if (swipeType === LEFT_SWIPE) {\n approx = ceil;\n } else if (swipeType === RIGHT_SWIPE) {\n approx = floor;\n }\n nextPage = approx(pane.offset() / width);\n snap = max(that.minSnap, min(-nextPage * width, that.maxSnap));\n if (nextPage != that.page) {\n if (callback && callback({\n currentPage: that.page,\n nextPage: nextPage\n })) {\n snap = -that.page * pane.size().width;\n }\n }\n pane.transitionTo(snap, ease, instant);\n },\n updatePage: function () {\n var pane = this.pane, page = round(pane.offset() / pane.size().width);\n if (page != this.page) {\n this.page = page;\n return true;\n }\n return false;\n },\n forcePageUpdate: function () {\n return this.updatePage();\n },\n resizeTo: function (size) {\n var pane = this.pane, width = size.width;\n this.pageElements.width(width);\n if (this.contentHeight === '100%') {\n var containerHeight = this.element.parent().height();\n if (this.enablePager === true) {\n var pager = this.element.parent().find('ol.km-pages');\n if (!this.pagerOverlay && pager.length) {\n containerHeight -= kendo._outerHeight(pager, true);\n }\n }\n this.element.css('height', containerHeight);\n this.pageElements.css('height', containerHeight);\n }\n pane.updateDimension();\n if (!this._paged) {\n this.page = floor(pane.offset() / width);\n }\n this.scrollTo(this.page, true);\n this.pageCount = ceil(pane.total() / width);\n this.minSnap = -(this.pageCount - 1) * width;\n this.maxSnap = 0;\n },\n _getPages: function () {\n this.pageElements = this.element.find(kendo.roleSelector('page'));\n this._paged = this.pageElements.length > 0;\n }\n });\n kendo.mobile.ui.ScrollViewContent = ScrollViewContent;\n var VirtualScrollViewContent = kendo.Observable.extend({\n init: function (element, pane, options) {\n var that = this;\n kendo.Observable.fn.init.call(this);\n that.element = element;\n that.pane = pane;\n that.options = options;\n that._templates();\n that.page = options.page || 0;\n that.pages = [];\n that._initPages();\n that.resizeTo(that.pane.size());\n that.pane.dimension.forceEnabled();\n },\n setDataSource: function (dataSource) {\n this.dataSource = DataSource.create(dataSource);\n this._buffer();\n this._pendingPageRefresh = false;\n this._pendingWidgetRefresh = false;\n },\n _viewShow: function () {\n var that = this;\n if (that._pendingWidgetRefresh) {\n setTimeout(function () {\n that._resetPages();\n }, 0);\n that._pendingWidgetRefresh = false;\n }\n },\n _buffer: function () {\n var itemsPerPage = this.options.itemsPerPage;\n if (this.buffer) {\n this.buffer.destroy();\n }\n if (itemsPerPage > 1) {\n this.buffer = new BatchBuffer(this.dataSource, itemsPerPage);\n } else {\n this.buffer = new Buffer(this.dataSource, itemsPerPage * 3);\n }\n this._resizeProxy = proxy(this, '_onResize');\n this._resetProxy = proxy(this, '_onReset');\n this._endReachedProxy = proxy(this, '_onEndReached');\n this.buffer.bind({\n 'resize': this._resizeProxy,\n 'reset': this._resetProxy,\n 'endreached': this._endReachedProxy\n });\n },\n _templates: function () {\n var template = this.options.template, emptyTemplate = this.options.emptyTemplate, templateProxy = {}, emptyTemplateProxy = {};\n if (typeof template === FUNCTION) {\n templateProxy.template = template;\n template = '#=this.template(data)#';\n }\n this.template = proxy(kendo.template(template), templateProxy);\n if (typeof emptyTemplate === FUNCTION) {\n emptyTemplateProxy.emptyTemplate = emptyTemplate;\n emptyTemplate = '#=this.emptyTemplate(data)#';\n }\n this.emptyTemplate = proxy(kendo.template(emptyTemplate), emptyTemplateProxy);\n },\n _initPages: function () {\n var pages = this.pages, element = this.element, page;\n for (var i = 0; i < VIRTUAL_PAGE_COUNT; i++) {\n page = new Page(element);\n pages.push(page);\n }\n this.pane.updateDimension();\n },\n resizeTo: function (size) {\n var pages = this.pages, pane = this.pane;\n for (var i = 0; i < pages.length; i++) {\n pages[i].setWidth(size.width);\n }\n if (this.options.contentHeight === 'auto') {\n this.element.css('height', this.pages[1].element.height());\n } else if (this.options.contentHeight === '100%') {\n var containerHeight = this.element.parent().height();\n if (this.options.enablePager === true) {\n var pager = this.element.parent().find('ol.km-pages');\n if (!this.options.pagerOverlay && pager.length) {\n containerHeight -= kendo._outerHeight(pager, true);\n }\n }\n this.element.css('height', containerHeight);\n pages[0].element.css('height', containerHeight);\n pages[1].element.css('height', containerHeight);\n pages[2].element.css('height', containerHeight);\n }\n pane.updateDimension();\n this._repositionPages();\n this.width = size.width;\n },\n scrollTo: function (page) {\n var buffer = this.buffer, dataItem;\n buffer.syncDataSource();\n dataItem = buffer.at(page);\n if (!dataItem) {\n return;\n }\n this._updatePagesContent(page);\n this.page = page;\n },\n paneMoved: function (swipeType, bounce, callback, instant) {\n var that = this, pane = that.pane, width = pane.size().width, offset = pane.offset(), thresholdPassed = Math.abs(offset) >= width / 3, ease = bounce ? kendo.effects.Transition.easeOutBack : kendo.effects.Transition.easeOutExpo, isEndReached = that.page + 2 > that.buffer.total(), nextPage, delta = 0;\n if (swipeType === RIGHT_SWIPE) {\n if (that.page !== 0) {\n delta = -1;\n }\n } else if (swipeType === LEFT_SWIPE && !isEndReached) {\n delta = 1;\n } else if (offset > 0 && (thresholdPassed && !isEndReached)) {\n delta = 1;\n } else if (offset < 0 && thresholdPassed) {\n if (that.page !== 0) {\n delta = -1;\n }\n }\n nextPage = that.page;\n if (delta) {\n nextPage = delta > 0 ? nextPage + 1 : nextPage - 1;\n }\n if (callback && callback({\n currentPage: that.page,\n nextPage: nextPage\n })) {\n delta = 0;\n }\n if (delta === 0) {\n that._cancelMove(ease, instant);\n } else if (delta === -1) {\n that._moveBackward(instant);\n } else if (delta === 1) {\n that._moveForward(instant);\n }\n },\n updatePage: function () {\n var pages = this.pages;\n if (this.pane.offset() === 0) {\n return false;\n }\n if (this.pane.offset() > 0) {\n pages.push(this.pages.shift());\n this.page++;\n this.setPageContent(pages[2], this.page + 1);\n } else {\n pages.unshift(this.pages.pop());\n this.page--;\n this.setPageContent(pages[0], this.page - 1);\n }\n this._repositionPages();\n this._resetMovable();\n return true;\n },\n forcePageUpdate: function () {\n var offset = this.pane.offset(), threshold = this.pane.size().width * 3 / 4;\n if (abs(offset) > threshold) {\n return this.updatePage();\n }\n return false;\n },\n _resetMovable: function () {\n this.pane.moveTo(0);\n },\n _moveForward: function (instant) {\n this.pane.transitionTo(-this.width, kendo.effects.Transition.easeOutExpo, instant);\n },\n _moveBackward: function (instant) {\n this.pane.transitionTo(this.width, kendo.effects.Transition.easeOutExpo, instant);\n },\n _cancelMove: function (ease, instant) {\n this.pane.transitionTo(0, ease, instant);\n },\n _resetPages: function () {\n this.page = this.options.page || 0;\n this._updatePagesContent(this.page);\n this._repositionPages();\n this.trigger('reset');\n },\n _onResize: function () {\n this.pageCount = ceil(this.dataSource.total() / this.options.itemsPerPage);\n if (this._pendingPageRefresh) {\n this._updatePagesContent(this.page);\n this._pendingPageRefresh = false;\n }\n this.trigger('resize');\n },\n _onReset: function () {\n this.pageCount = ceil(this.dataSource.total() / this.options.itemsPerPage);\n this._resetPages();\n },\n _onEndReached: function () {\n this._pendingPageRefresh = true;\n },\n _repositionPages: function () {\n var pages = this.pages;\n pages[0].position(LEFT_PAGE);\n pages[1].position(CETER_PAGE);\n pages[2].position(RIGHT_PAGE);\n },\n _updatePagesContent: function (offset) {\n var pages = this.pages, currentPage = offset || 0;\n this.setPageContent(pages[0], currentPage - 1);\n this.setPageContent(pages[1], currentPage);\n this.setPageContent(pages[2], currentPage + 1);\n },\n setPageContent: function (page, index) {\n var buffer = this.buffer, template = this.template, emptyTemplate = this.emptyTemplate, view = null;\n if (index >= 0) {\n view = buffer.at(index);\n if ($.isArray(view) && !view.length) {\n view = null;\n }\n }\n this.trigger(CLEANUP, { item: page.element });\n if (view !== null) {\n page.content(template(view));\n } else {\n page.content(emptyTemplate({}));\n }\n kendo.mobile.init(page.element);\n this.trigger(ITEM_CHANGE, {\n item: page.element,\n data: view,\n ns: kendo.mobile.ui\n });\n }\n });\n kendo.mobile.ui.VirtualScrollViewContent = VirtualScrollViewContent;\n var Page = kendo.Class.extend({\n init: function (container) {\n this.element = $('
          ');\n this.width = container.width();\n this.element.width(this.width);\n container.append(this.element);\n },\n content: function (theContent) {\n this.element.html(theContent);\n },\n position: function (position) {\n this.element.css('transform', 'translate3d(' + this.width * position + 'px, 0, 0)');\n },\n setWidth: function (width) {\n this.width = width;\n this.element.width(width);\n }\n });\n kendo.mobile.ui.VirtualPage = Page;\n var ScrollView = 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.element;\n kendo.stripWhitespace(element[0]);\n element.wrapInner('
          ').addClass('k-widget ' + className('scrollview'));\n if (this.options.enablePager) {\n this.pager = new Pager(this);\n if (this.options.pagerOverlay) {\n element.addClass(className('scrollview-overlay'));\n }\n }\n that.inner = element.children().first();\n that.page = 0;\n that.inner.css('height', options.contentHeight);\n that.pane = new ElasticPane(that.inner, {\n duration: this.options.duration,\n transitionEnd: proxy(this, '_transitionEnd'),\n dragStart: proxy(this, '_dragStart'),\n dragEnd: proxy(this, '_dragEnd'),\n change: proxy(this, REFRESH)\n });\n that.bind('resize', function () {\n that.pane.refresh();\n });\n that.page = options.page;\n var empty = this.inner.children().length === 0;\n var content = empty ? new VirtualScrollViewContent(that.inner, that.pane, options) : new ScrollViewContent(that.inner, that.pane, options);\n content.page = that.page;\n content.bind('reset', function () {\n this._pendingPageRefresh = false;\n that._syncWithContent();\n that.trigger(REFRESH, {\n pageCount: content.pageCount,\n page: content.page\n });\n });\n content.bind('resize', function () {\n that.trigger(REFRESH, {\n pageCount: content.pageCount,\n page: content.page\n });\n });\n content.bind(ITEM_CHANGE, function (e) {\n that.trigger(ITEM_CHANGE, e);\n that.angular('compile', function () {\n return {\n elements: e.item,\n data: [{ dataItem: e.data }]\n };\n });\n });\n content.bind(CLEANUP, function (e) {\n that.angular('cleanup', function () {\n return { elements: e.item };\n });\n });\n that._content = content;\n that.setDataSource(options.dataSource);\n var mobileContainer = that.container();\n if (mobileContainer.nullObject) {\n that.viewInit();\n that.viewShow();\n } else {\n mobileContainer.bind('show', proxy(this, 'viewShow')).bind('init', proxy(this, 'viewInit'));\n }\n },\n options: {\n name: 'ScrollView',\n page: 0,\n duration: 400,\n velocityThreshold: 0.8,\n contentHeight: 'auto',\n pageSize: 1,\n itemsPerPage: 1,\n bounceVelocityThreshold: 1.6,\n enablePager: true,\n pagerOverlay: false,\n autoBind: true,\n template: '',\n emptyTemplate: ''\n },\n events: [\n CHANGING,\n CHANGE,\n REFRESH\n ],\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.destroy(this.element);\n },\n viewInit: function () {\n if (this.options.autoBind) {\n this._content.scrollTo(this._content.page, true);\n }\n },\n viewShow: function () {\n this.pane.refresh();\n },\n refresh: function () {\n var content = this._content;\n content.resizeTo(this.pane.size());\n this.page = content.page;\n this.trigger(REFRESH, {\n pageCount: content.pageCount,\n page: content.page\n });\n },\n content: function (html) {\n this.element.children().first().html(html);\n this._content._getPages();\n this.pane.refresh();\n },\n value: function (item) {\n var dataSource = this.dataSource;\n if (item) {\n this.scrollTo(dataSource.indexOf(item), true);\n } else {\n return dataSource.at(this.page);\n }\n },\n scrollTo: function (page, instant) {\n this._content.scrollTo(page, instant);\n this._syncWithContent();\n },\n prev: function () {\n var that = this, prevPage = that.page - 1;\n if (that._content instanceof VirtualScrollViewContent) {\n that._content.paneMoved(RIGHT_SWIPE, undefined, function (eventData) {\n return that.trigger(CHANGING, eventData);\n });\n } else if (prevPage > -1) {\n that.scrollTo(prevPage);\n }\n },\n next: function () {\n var that = this, nextPage = that.page + 1;\n if (that._content instanceof VirtualScrollViewContent) {\n that._content.paneMoved(LEFT_SWIPE, undefined, function (eventData) {\n return that.trigger(CHANGING, eventData);\n });\n } else if (nextPage < that._content.pageCount) {\n that.scrollTo(nextPage);\n }\n },\n setDataSource: function (dataSource) {\n if (!(this._content instanceof VirtualScrollViewContent)) {\n return;\n }\n var emptyDataSource = !dataSource;\n this.dataSource = DataSource.create(dataSource);\n this._content.setDataSource(this.dataSource);\n if (this.options.autoBind && !emptyDataSource) {\n this.dataSource.fetch();\n }\n },\n items: function () {\n return this.element.find('.km-' + VIRTUAL_PAGE_CLASS);\n },\n _syncWithContent: function () {\n var pages = this._content.pages, buffer = this._content.buffer, data, element;\n this.page = this._content.page;\n data = buffer ? buffer.at(this.page) : undefined;\n if (!(data instanceof Array)) {\n data = [data];\n }\n element = pages ? pages[1].element : undefined;\n this.trigger(CHANGE, {\n page: this.page,\n element: element,\n data: data\n });\n },\n _dragStart: function () {\n if (this._content.forcePageUpdate()) {\n this._syncWithContent();\n }\n },\n _dragEnd: function (e) {\n var that = this, velocity = e.x.velocity, velocityThreshold = this.options.velocityThreshold, swipeType = NUDGE, bounce = abs(velocity) > this.options.bounceVelocityThreshold;\n if (velocity > velocityThreshold) {\n swipeType = RIGHT_SWIPE;\n } else if (velocity < -velocityThreshold) {\n swipeType = LEFT_SWIPE;\n }\n this._content.paneMoved(swipeType, bounce, function (eventData) {\n return that.trigger(CHANGING, eventData);\n });\n },\n _transitionEnd: function () {\n if (this._content.updatePage()) {\n this._syncWithContent();\n }\n }\n });\n ui.plugin(ScrollView);\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.switch', [\n 'kendo.fx',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.switch',\n name: 'Switch',\n category: 'mobile',\n description: 'The mobile Switch widget is used to display two exclusive choices.',\n depends: [\n 'fx',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, outerWidth = kendo._outerWidth, Widget = ui.Widget, support = kendo.support, CHANGE = 'change', SWITCHON = 'switch-on', SWITCHOFF = 'switch-off', MARGINLEFT = 'margin-left', ACTIVE_STATE = 'state-active', DISABLED_STATE = 'state-disabled', DISABLED = 'disabled', RESOLVEDPREFIX = support.transitions.css === undefined ? '' : support.transitions.css, TRANSFORMSTYLE = RESOLVEDPREFIX + 'transform', proxy = $.proxy;\n function className(name) {\n return 'km-' + name;\n }\n function limitValue(value, minLimit, maxLimit) {\n return Math.max(minLimit, Math.min(maxLimit, value));\n }\n var SWITCH_MARKUP = ' {0} {1} ';\n var Switch = Widget.extend({\n init: function (element, options) {\n var that = this, checked;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n that.wrapper = $(kendo.format(SWITCH_MARKUP, options.onLabel, options.offLabel));\n that.handle = that.wrapper.find('.km-switch-handle');\n that.background = that.wrapper.find('.km-switch-background');\n that.wrapper.insertBefore(that.element).prepend(that.element);\n that._drag();\n that.origin = parseInt(that.background.css(MARGINLEFT), 10);\n that.constrain = 0;\n that.snapPoint = 0;\n element = that.element[0];\n element.type = 'checkbox';\n that._animateBackground = true;\n checked = that.options.checked;\n if (checked === null) {\n checked = element.checked;\n }\n that.check(checked);\n that.options.enable = that.options.enable && !that.element.attr(DISABLED);\n that.enable(that.options.enable);\n that.refresh();\n kendo.notify(that, kendo.mobile.ui);\n },\n refresh: function () {\n var that = this, handleWidth = outerWidth(that.handle, true);\n that.width = that.wrapper.width();\n that.constrain = that.width - handleWidth;\n that.snapPoint = that.constrain / 2;\n if (typeof that.origin != 'number') {\n that.origin = parseInt(that.background.css(MARGINLEFT), 10);\n }\n that.background.data('origin', that.origin);\n that.check(that.element[0].checked);\n },\n events: [CHANGE],\n options: {\n name: 'Switch',\n onLabel: 'on',\n offLabel: 'off',\n checked: null,\n enable: true\n },\n check: function (check) {\n var that = this, element = that.element[0];\n if (check === undefined) {\n return element.checked;\n }\n that._position(check ? that.constrain : 0);\n element.checked = check;\n that.wrapper.toggleClass(className(SWITCHON), check).toggleClass(className(SWITCHOFF), !check);\n },\n value: function () {\n return this.check.apply(this, arguments);\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.userEvents.destroy();\n },\n toggle: function () {\n var that = this;\n that.check(!that.element[0].checked);\n },\n enable: function (enable) {\n var element = this.element, wrapper = this.wrapper;\n if (typeof enable == 'undefined') {\n enable = true;\n }\n this.options.enable = enable;\n if (enable) {\n element.removeAttr(DISABLED);\n } else {\n element.attr(DISABLED, DISABLED);\n }\n wrapper.toggleClass(className(DISABLED_STATE), !enable);\n },\n _resize: function () {\n this.refresh();\n },\n _move: function (e) {\n var that = this;\n e.preventDefault();\n that._position(limitValue(that.position + e.x.delta, 0, that.width - outerWidth(that.handle, true)));\n },\n _position: function (position) {\n var that = this;\n that.position = position;\n that.handle.css(TRANSFORMSTYLE, 'translatex(' + position + 'px)');\n if (that._animateBackground) {\n that.background.css(MARGINLEFT, that.origin + position);\n }\n },\n _start: function () {\n if (!this.options.enable) {\n this.userEvents.cancel();\n } else {\n this.userEvents.capture();\n this.handle.addClass(className(ACTIVE_STATE));\n }\n },\n _stop: function () {\n var that = this;\n that.handle.removeClass(className(ACTIVE_STATE));\n that._toggle(that.position > that.snapPoint);\n },\n _toggle: function (checked) {\n var that = this, handle = that.handle, element = that.element[0], value = element.checked, duration = kendo.mobile.application && kendo.mobile.application.os.wp ? 100 : 200, distance;\n that.wrapper.toggleClass(className(SWITCHON), checked).toggleClass(className(SWITCHOFF), !checked);\n that.position = distance = checked * that.constrain;\n if (that._animateBackground) {\n that.background.kendoStop(true, true).kendoAnimate({\n effects: 'slideMargin',\n offset: distance,\n reset: true,\n reverse: !checked,\n axis: 'left',\n duration: duration\n });\n }\n handle.kendoStop(true, true).kendoAnimate({\n effects: 'slideTo',\n duration: duration,\n offset: distance + 'px,0',\n reset: true,\n complete: function () {\n if (value !== checked) {\n element.checked = checked;\n that.trigger(CHANGE, { checked: checked });\n }\n }\n });\n },\n _drag: function () {\n var that = this;\n that.userEvents = new kendo.UserEvents(that.wrapper, {\n fastTap: true,\n tap: function () {\n if (that.options.enable) {\n that._toggle(!that.element[0].checked);\n }\n },\n start: proxy(that._start, that),\n move: proxy(that._move, that),\n end: proxy(that._stop, that)\n });\n }\n });\n ui.plugin(Switch);\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.tabstrip', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.tabstrip',\n name: 'TabStrip',\n category: 'mobile',\n description: 'The mobile TabStrip widget is used inside a mobile view or layout footer element to display an application-wide group of navigation buttons.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, ACTIVE_STATE_CLASS = 'km-state-active', SELECT = 'select';\n function createBadge(value) {\n return $('' + value + '');\n }\n var TabStrip = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.container().bind('show', $.proxy(this, 'refresh'));\n that.element.addClass('km-tabstrip').find('a').each(that._buildButton).eq(that.options.selectedIndex).addClass(ACTIVE_STATE_CLASS);\n that.element.on('down', 'a', '_release');\n },\n events: [SELECT],\n switchTo: function (url) {\n var tabs = this.element.find('a'), tab, path, idx = 0, length = tabs.length;\n if (isNaN(url)) {\n for (; idx < length; idx++) {\n tab = tabs[idx];\n path = tab.href.replace(/(\\#.+)(\\?.+)$/, '$1');\n if (path.indexOf(url, path.length - url.length) !== -1) {\n this._setActiveItem($(tab));\n return true;\n }\n }\n } else {\n this._setActiveItem(tabs.eq(url));\n return true;\n }\n return false;\n },\n switchByFullUrl: function (url) {\n var tab;\n tab = this.element.find('a[href$=\\'' + url + '\\']');\n this._setActiveItem(tab);\n },\n clear: function () {\n this.currentItem().removeClass(ACTIVE_STATE_CLASS);\n },\n currentItem: function () {\n return this.element.children('.' + ACTIVE_STATE_CLASS);\n },\n badge: function (item, value) {\n var tabstrip = this.element, badge;\n if (!isNaN(item)) {\n item = tabstrip.children().get(item);\n }\n item = tabstrip.find(item);\n badge = $(item.find('.km-badge')[0] || createBadge(value).insertAfter(item.children('.km-icon')));\n if (value || value === 0) {\n badge.html(value);\n return this;\n }\n if (value === false) {\n badge.empty().remove();\n return this;\n }\n return badge.html();\n },\n _release: function (e) {\n if (e.which > 1) {\n return;\n }\n var that = this, item = $(e.currentTarget);\n if (item[0] === that.currentItem()[0]) {\n return;\n }\n if (that.trigger(SELECT, { item: item })) {\n e.preventDefault();\n } else {\n that._setActiveItem(item);\n }\n },\n _setActiveItem: function (item) {\n if (!item[0]) {\n return;\n }\n this.clear();\n item.addClass(ACTIVE_STATE_CLASS);\n },\n _buildButton: function () {\n var button = $(this), icon = kendo.attrValue(button, 'icon'), badge = kendo.attrValue(button, 'badge'), image = button.find('img'), iconSpan = $('');\n button.addClass('km-button').attr(kendo.attr('role'), 'tab').contents().not(image).wrapAll('');\n if (image[0]) {\n image.addClass('km-image').prependTo(button);\n } else {\n button.prepend(iconSpan);\n if (icon) {\n iconSpan.addClass('km-' + icon);\n if (badge || badge === 0) {\n createBadge(badge).insertAfter(iconSpan);\n }\n }\n }\n },\n refresh: function (e) {\n var url = e.view.id;\n if (url && !this.switchTo(e.view.id)) {\n this.switchTo(url);\n }\n },\n options: {\n name: 'TabStrip',\n selectedIndex: 0,\n enable: true\n }\n });\n ui.plugin(TabStrip);\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', [\n 'kendo.core',\n 'kendo.fx',\n 'kendo.data.odata',\n 'kendo.data.xml',\n 'kendo.data',\n 'kendo.data.signalr',\n 'kendo.binder',\n 'kendo.validator',\n 'kendo.router',\n 'kendo.view',\n 'kendo.userevents',\n 'kendo.draganddrop',\n 'kendo.popup',\n 'kendo.touch',\n 'kendo.mobile.popover',\n 'kendo.mobile.loader',\n 'kendo.mobile.scroller',\n 'kendo.mobile.shim',\n 'kendo.mobile.view',\n 'kendo.mobile.modalview',\n 'kendo.mobile.drawer',\n 'kendo.mobile.splitview',\n 'kendo.mobile.pane',\n 'kendo.mobile.application',\n 'kendo.mobile.actionsheet',\n 'kendo.mobile.button',\n 'kendo.mobile.buttongroup',\n 'kendo.mobile.collapsible',\n 'kendo.mobile.listview',\n 'kendo.mobile.navbar',\n 'kendo.mobile.scrollview',\n 'kendo.mobile.switch',\n 'kendo.mobile.tabstrip',\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}));\n(function (f, define) {\n define('kendo.dataviz.mobile', [\n 'kendo.dataviz',\n 'kendo.mobile'\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}));"]}