{"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","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","lowerLocalInfo","localInfo","newLocalInfo","parseExact","strict","count","pmHour","UTC","matches","amDesignators","pmDesignators","hoursOffset","minutesOffset","hasTime","lookAhead","getNumber","rg","substr","valueIdx","getIndexByName","lower","nameLength","subValue","matchLength","matchIdx","checkLiteral","year","month","day","seconds","milliseconds","defaultYear","_lowerDays","_lowerMonths","longTimeZoneRegExp","shortTimeZoneRegExp","isNaN","setFullYear","parseMicrosoftFormatOffset","getDefaultFormats","cultureFormats","formatIdx","FORMATS_SEQUENCE","STANDARD_FORMATS","formats","concat","internalParseDate","tzoffset","dateRegExp","offsetRegExp","timezone","convert","nonBreakingSpaceRegExp","exponentRegExp","2","3","4","parseDate","parseExactDate","percentSymbol","table","docStyle","transforms","elementProto","mobileOS","documentMode","chrome","_scrollbar","scrollbar","refresh","div","createElement","cssText","innerHTML","body","appendChild","offsetWidth","removeChild","closest","tbodyInnerHtml","touch","HTMLElement","hasHW3D","WebKitCSSMatrix","cssFlexbox","lowPrefix","prefix","hasTransitions","event","devicePixelRatio","screenWidth","screen","availWidth","innerWidth","screenHeight","availHeight","innerHeight","detectOS","ua","minorVersion","os","notAndroidPhone","agentRxs","wp","fire","android","iphone","ipad","meego","webos","blackberry","playbook","windows","tizen","sailfish","ffos","osRxs","ios","flat","formFactorRxs","tablet","browserRxs","omini","omobile","firefox","mobilesafari","ie","navigator","device","majorVersion","flatVersion","cordova","PhoneGap","appMode","standalone","location","protocol","userAgent","wpDevicePixelRatio","hasNativeScrolling","delayedClick","mouseAndTouchPresent","detectBrowser","edge","safari","opera","detectClipboardAccess","commands","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","webComponents","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","info","fromOffset","toOffset","diff","fromLocalOffset","toLocalOffset","tempToOffset","toLocalDate","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","Sun","Mon","Tue","Wed","Thu","Fri","Sat","setDayOfWeek","dir","setDate","dayOfWeek","firstDayOfMonth","lastDayOfMonth","last","timeOffset","moveDateToWeekStart","weekStartDay","addDays","calcWeekInYear","firstWeekInYear","newDate","diffInMS","MS_PER_DAY","weekInYear","prevWeekDate","nextWeekDate","weekNumber","toUtcTime","toInvariantTime","isInTimeRange","msValue","msMin","msMax","isInDateRange","setTime","ignoreDST","difference","MS_PER_MINUTE","today","isToday","staticDate","nextDay","previousDay","MS_PER_HOUR","stripWhitespace","iterator","child","createNodeIterator","NodeFilter","SHOW_TEXT","node","FILTER_ACCEPT","FILTER_REJECT","nextNode","referenceNode","textContent","trim","childNodes","nodeValue","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","queueAnimation","runNextAnimation","parseQueryStringParams","queryString","params","paramParts","decodeURIComponent","elementUnderCursor","x","client","wheelDeltaY","jQueryEvent","delta","deltaY","wheelDelta","detail","axis","VERTICAL_AXIS","throttle","delay","timeout","throttled","lastExecTime","elapsed","caret","rangeElement","rangeDuplicated","selectionStart","selectionEnd","isPosition","focus","setSelectionRange","selection","createTextRange","collapse","moveStart","moveEnd","select","duplicate","moveToBookmark","createRange","getBookmark","setEndPoint","text","compileMobileDirective","scope","injector","invoke","$compile","$$phase","$digest","antiForgeryTokens","tokens","csrf_token","csrf_param","cycleForm","form","firstElement","lastElement","keyCode","shiftKey","focusElement","scrollTopPositions","scrollableParents","parentsUntil","setActive","matchesMedia","mediaQuery","media","_bootstrapToMedia","bootstrapMedia","xs","sm","md","lg","xl","postToProxy","dataURI","fileName","proxyURL","proxyTarget","action","contentType","base64","appendTo","submit","saveAsBlob","blob","atob","Uint8Array","Blob","buffer","msSaveBlob","saveAsDataURI","URL","createObjectURL","fileSaver","download","createEvent","initMouseEvent","dispatchEvent","revokeObjectURL","downloadAttribute","saveAs","save","forceProxy","proxyModelSetters","observable","forEach","defineProperty","dirty","amd","a1","a2","a3","parseInteger","parseCSS","propertyName","acc","strip3DTransforms","transformProps","transform2d","normalizeCSS","lowerKey","isTransformed","transformation","cssValues","TRANSFORM","animationProperty","transform","computed","NONE","matrix3dRegExp","translateXRegExp","atan2","capitalize","word","createEffect","definition","effectClass","Effect","direction","opt1","opt2","opt3","theDirection","createToggleEffect","defaultStart","defaultEnd","IN_OUT","startValue","_startValue","endValue","_endValue","shouldHide","_shouldHide","prepare","_direction","startDataValue","startDataValueIsSet","_reverse","clipInHalf","vertical","HEIGHT","WIDTH","CLIPS","curProxy","EffectSet","FOUR_DIRECTIONS","TRANSFER_START_STATE","ROTATIONS","RESTORE_OVERFLOW","IGNORE_TRANSITION_EVENT_SELECTOR","Animation","Transition","scaleProperties","scale","scalex","scaley","scale3d","translateProperties","translate","translatex","translatey","translate3d","hasZoom","cssParamsRegExp","oldEffectsRegExp","singleEffectRegExp","unitRegExp","transform2units","rotate","skew","cssPrefix","BLANK","PX","AUTO","HIDDEN","ORIGIN","ABORT_ID","OVERFLOW","TRANSLATE","POSITION","COMPLETE_CALLBACK","TRANSITION","BACKFACE","PERSPECTIVE","DEFAULT_PERSPECTIVE","TRANSFORM_PERSPECTIVE","transition","modifier","horizontal","stopQueue","val","transformValue","step","elem","now","cur","prop","exclusive","ease","mirror","redirectedEffect","resolved","$1","$2","effect","effectBody","timeoutID","stopTransitionCalled","stopTransition","oldKeys","speeds","merge","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","aggregates","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","flattenGroups","itemIndex","at","wrapGroupItems","eachGroupItems","func","replaceInRanges","ranges","replaceInRange","replaceWithObservable","serverGrouping","viewIndex","removeModel","uid","indexOfPristineModel","_defaultId","indexOfModel","comparer","fieldNameFromModel","convertFilterDescriptorsField","convertDescriptorsField","inferSelect","firstField","secondField","optgroup","label","specified","inferTable","fieldIndex","cells","cell","empty","tbody","tBodies","rows","fieldCount","dataMethod","_data","_attachBubbleHandlers","inferList","list","textChild","textField","urlField","spriteCssClassField","imageUrlField","_loaded","hasChildren","ObservableObject","parsers","defaultValues","Comparer","StableComparer","operators","LocalTransport","RemoteTransport","Cache","DataReader","Transport","Node","Buffer","BatchBuffer","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","compare","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","_sortForGrouping","groupValue","sum","average","process","query","filterCallback","parameters","operation","_store","clear","store","inmemory","schema","dataFunction","groupsFunction","serializeFunction","serializeGetters","_dataAccessFunction","groups","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","_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","touchInfo","useClickAsTap","initialTouch","pressEvent","_clicks","supportDoubleTap","_moved","_finished","press","_holdTimeout","minHold","_trigger","_tap","_clickTimeout","_hold","_withinIgnoreThreshold","UserEvents","dispose","_start","endTime","activeTouches","isMoved","startTime","xDelta","yDelta","defaultAction","surfaceElement","preventIfMovingProxy","_maxTouches","multiTouch","allowSelection","captureUpIfMoved","fastTap","eventNS","surface","global","ownerDocument","pressed","touchAction","preventDragEvent","preventIfMoving","_isMoved","removeEventListener","_disposeAll","capture","_isMultiTouch","_apiCall","_maxTouchesReached","_select","which","_move","_eachTouch","_end","_click","pageX","pageY","matchingTouch","dict","defaultThreshold","numericCssPropery","within","containerBoundaries","minX","minY","maxX","maxY","checkTarget","targets","areas","theTarget","theFilter","targetLen","areaLen","targetElement","destroyDroppable","groupName","droppables","scrollableViewPort","scrollableRoot","$window","findScrollableParent","autoScrollVelocity","mouseX","mouseY","rect","AUTO_SCROLL_AREA","lastDropTarget","Movable","DropTarget","DropTargetArea","Draggable","draggables","dropTargets","dropAreas","KEYUP","DRAGSTART","DRAG","DRAGEND","DRAGCANCEL","HINTDESTROYED","DRAGENTER","DRAGLEAVE","DROP","TapCapture","_press","_release","attachEvent","captureNext","cancelCapture","PaneDimension","forcedEnabled","measure","scrollSize","makeVirtual","virtual","_virtualMin","_virtualMax","virtualSize","outOfBounds","forceEnabled","getTotal","rescale","scaledTotal","minScale","centerOffset","PaneDimensions","forcedMinScale","maxScale","newScale","centerCoordinates","PaneAxis","dimension","dragMove","resistance","translateAxis","Pane","elastic","gesturestart","gesture","gesturechange","coordinates","offsetX","offsetY","previousGesture","previousCenter","scaleDelta","scaleWith","TRANSFORM_STYLE","webkitTransformOrigin","_saveCoordinates","by","scaleTo","newCoordinates","draggable","dropTarget","_over","_out","_drop","dropped","destroyGroup","_cache","_activated","hold","_drag","_cancel","_afterEndHandler","_afterEnd","_captureEscape","cursorOffset","holdToDrag","autoScroll","cancelHold","_updateHint","boundaries","hintOffset","hint","_shouldIgnoreTarget","ignoreSelector","currentTargetOffset","scopeTarget","scopeFrom","cursorElement","_elementUnderCursor","_cursorElement","_scrollableParent","_lastEvent","_processMovement","_scrollCompenstation","_scrollVelocity","_scrollInterval","_withDropTarget","_autoScroll","yIsScrollable","xIsScrollable","isRootNode","yInBounds","xInBounds","compensation","initialTarget","utils","SNAPBACK_DURATION","SCROLLBAR_OPACITY","FRICTION","VELOCITY_MULTIPLIER","MAX_VELOCITY","OUT_OF_BOUNDS_FRICTION","ANIMATED_SCROLLER_PRECISION","RELEASECLASS","REFRESHCLASS","PULL","RESIZE","SCROLL","MOUSE_WHEEL_ID","ZoomSnapBack","tapCapture","DragInertia","freeze","_moveTo","paneAxis","_snapBack","velocityMultiplier","friction","snapBack","AnimatedScroller","_updateCoordinates","setCoordinates","setCallback","ScrollBar","elementSize","scrollMovable","alwaysVisible","paneSize","sizeRatio","visibility","avoidScrolling","pane","zoomSnapBack","animatedScroller","_native","prepend","scrollElement","fixedContainer","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","_isShownOnFocus","_mouseenter","autoHide","_mouseleave","_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","nodeInfo","_clipbox","_matrix","Matrix","unit","_stackingContext","_avoidLinks","avoidLinks","renderElement","makeTemplate","template$$1","firstElementChild","handlePageBreaks","forceBreak","pageWidth","pageHeight","doPageBreak","splitElement","makePage","pages","pageNum","cacheImages","whenImagesAreActuallyLoaded","keepTogether","adjust","tag","bottomPadding","bottomBorder","saveAdjust","isFirst","fall","tableLayout","breakAtElement","fallsOnMargin","splitText","firstInParent","colgroup","thead","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","pushNodeInfo","decoration","createsStackingContext","popNodeInfo","updateClipbox","intersect","emptyClipbox","cb","pseudoElt","defa","microsoft","pleaseSetPropertyValue","important","setProperty","getBorder","side","saveStyle","getBorderRadius","sanitizeRadius","getContentBox","wt","wr","wb","wl","getTransform","radiansToDegrees","parseAngle","num","shape","setClipping","clipPath","addArcToPath","Arc$2","curvePoints","curveTo","adjustBorderRadiusForBox","rTL","rTR","rBR","rBL","tl_x","tl_y","tr_x","tr_y","br_x","br_y","bl_x","bl_y","tl","tr","br","bl","elementRoundBox","bt","bb","pt","pr","pb","pl","roundBox","rTL0","rTR0","rBR0","rBL0","Path","fill","stroke","formatCounter","evalPseudoElementContent","displayCounter","separator","getCssText","_renderWithPseudoElements","pseudo","kind","place","psel","KENDO_PSEUDO_ELEMENT","fake","saveClass","_renderElement","adjustBoxes","boxes","tableBorderLeft","tableBorderTop","tableBox","firstCell","firstCellBox","drawEdge","Wtop","Wleft","Wright","rl","rr","drawRoundCorner","ri","anticlockwise","drawBackground","background","backgroundColor","backgroundImage","drawOneBackground","backgroundRepeat","backgroundPosition","backgroundOrigin","backgroundSize","drawBackgroundImage","img_width","img_height","renderBG","rewX","rewY","repeatX","aspect_ratio","orgBox","Image$1","gradientRenderer","drawBullet","_drawBullet","bullet","listStylePosition","textAlign","elementIndex","listStyleType","fontSize","lineHeight","fontFamily","disc","circle","square","drawOneBox","isLast","inv","shouldDrawLeft","shouldDrawRight","innerbox","getClientRects","_pdfLink","clipit","isFormField","maybeRenderWidget","renderContents","pxlen","scaledAngle","implicit","atan","fromRect","LinearGradient","userSpace","visual","wrap$$1","_kendoExportVisual","exportDOMVisual","exportVisual","renderImage","zIndexSort","sa","sb","za","zb","pa","getSelectedOption","selectedOptions","renderCheckbox","Circle","Circle$2","renderFormField","whiteSpace","floats","floating","toDataURL","renderText","actuallyGetRangeBoundingRect","rectangles","Infinity","prevLineBottom","doChunk","cc","origStart","setStart","isJustified","columnCount","findEOL","eol","estimateLineLength","startOffset","drawText","getFontHeight","textTransform","TextRect","decorate","line","ypos","underline","lineThrough","overline","align$$1","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","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","_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","roundedRange","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","inferredDate","namedAxes","isLog","typeSamples","axisPane$1","xAxesOptions","yAxesOptions","xValues","yValues","brightnessValue","themeLabels","animationDelay","labelHeight","labelWidth","lp","labelsOptions","labelsDistance","createSegmentVisual","borderOptions","singleSegment","createLegendItem","pointVisible","legendOptions","legendItems","colorsCount","anglePerValue","constantAngle","explode","evalSegmentOptions","segmentOptions","minWidth","halfMinWidth","defaultPadding","newBox","newBoxCenter","leftSideLabels","rightSideLabels","seriesConfig","seriesConfigs","labelComparator","leftLabelsReflow","rightLabelsReflow","distances","distanceBetweenLabels","distributeLabels","secondBox","lr","firstBox","remaining","_takeDistance","amount","boxX","labelDistance","boxY","hAlignLabel","connectorsColor","connectorLine","sr","crossing","_connectorLines","pointInCircle","reverseValue","originalX","sector_center","createPieChart","pieChart","totalSize","seriesWithoutSize","holeSize","currentSeries$1","createDonutChart","donutChart","createPolarAxis","createValueAxis","axisDefaultRange","valueAxisOptions","valueAxisBox","heightDiff","valueRadius","_polarAxisCenter","centerSegment","_hasMissingValuesGap","scatterChart","slotSector","childSector","_hasBarCharts","_isStacked100","chartOptions","chartBox","createPath","labelPadding","dynamicSlopeReflow","totalHeight","lastUpperSide","previousOffset","previousHeight","nextSegment","nextPercentage","firstSegment","maxSegment","dynamicHeight","segmentSpacing","constantSlopeReflow","decreasingWidth","neckRatio","topMostWidth","finalNarrow","dynamicSlope","createFunnelChart","funnelChart","errorLow","errorHigh","_initElement","_originalOptions","_theme","_initTheme","_initHandlers","_initSurface","bindCategories","_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","_toggleDomDrag","domEvents","toggleDrag","_mousewheelZoom","_toggleDomZoom","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","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","encodeFormatInformation","encodeBCH","dividePolynomials","initMatrices","addFormatInformation","encodeVersionInformation","addVersionInformation","addCentricPattern","addFinderSeparator","addFinderPatterns","addAlignmentPatterns","addTimingFunctions","scoreMaskMatrixes","EncodingResult","IsoEncoder","UTF8Encoder","QRCodeDataEncoder","encodeData","QRCodeDefaults","QRCode","terminator","NUMERIC","ALPHA_NUMERIC","BYTE","irregularAlignmentPatternsStartDistance","15","16","18","19","24","26","28","31","32","33","36","37","versionsCodewordsInformation","totalDataCodewords","errorCodewordsPerBlock","finderPattern","alignmentPattern","errorCorrectionPatterns","formatMaskPattern","formatGeneratorPolynomial","versionGeneratorPolynomial","paddingCodewords","alphaPattern","alphaExclusiveSet","alphaRegex","alphaNumericRegex","byteRegex","initMinNumericBeforeAlpha","initMinNumericBeforeByte","initMinAlphaBeforeByte","minNumericBeforeAlpha","minNumericBeforeByte","minAlphaBeforeByte","QRDataMode","getVersionIndex","getBitsCharacterCount","bitsInCharacterCount","getModeCountString","modeIndicator","getStringBitsLength","modes","inputLength","mod3","characters","*","startColumn","getNextCell","getNextRemainderCell","blocks","block","codewordIdx","blockIdx","cellVisitor","dataString","dataBitsCount","terminatorIndex","paddingCodewordIndex","errorCodewordsCount","generator","generatorPolynomial","steps","errorCodewords","dataStream","versionCodewordsInformation","dataBlock","blockCodewordsCount","groupBlocksCount","messagePolynomial","codeword","codewordStart","dataBlocks","errorBlocks","versionGroups","previousMode","modeString","numeric","numericMatch","alphaMatch","alphaNumeric","alphaNumericMatch","nextMode","dataCodewordsCount","errorCorrectionLevel","encodedString","codeLength","generatorNumber","polynomialLength","valueNumber","valueString","numberX","numberY","yLength","xLength","modules","quotient","nextX","nextY","startDistance","adjacentSameBits","getEncodingResult","inputString","encodingMode","utfBOM","initialModeCountStringLength","encodeCharacter","significantOnes","bytesCount","getBytesCount","bc","optimalMatrix","encoder","encodingResult","versionInformation","DEFAULT_SIZE","QUIET_ZONE_LENGTH","DEFAULT_ERROR_CORRECTION_LEVEL","DEFAULT_BACKGROUND","DEFAULT_DARK_MODULE_COLOR","MIN_BASE_UNIT_SIZE","quietZoneSize","dataSize","contentSize","errorCorrection","_calculateBaseUnit","_renderBackground","_renderMatrix","matrixSize","QRCodeFunctions","QRCodeFields","ClonedObject","FadeOutAnimation","NavigatorHint","NAVIGATOR_PANE","NAVIGATOR_AXIS","Navigator","AUTO_CATEGORY_WIDTH","StockChart","_initialOpacity","chartPadding","scroll","tooltipStyle","minPos","maxPos","posRange","clearHideTimeout","_visible","borderTopWidth","_hideTimeout","_hideAnimation","chartObserver","clean","_redrawSelf","initSelection","mainAxis","axisClone","selectStart","selectEnd","setRange","filterAxes","redrawSlaves","slavePanes","navigatorAxis","naviRange","inNavigator","liveDrag","showHint","readSelection","ref_selection_options","_zoom","fromIx","toIx","_zoomEnd","naviOptions","__navi","attachAxes","attachSeries","valueAxes","equallySpacedSeries","justifyAxis","_collapse","autoBindElements","user","navigatorSeries","dateField","stockDefaults","destroyNavigator","_fullRedraw","_dirty","partialRedraw","_seriesCount","copyNavigatorCategories","buildFilter","KendoStockChart","StockInstanceObserver","navigatorFilter","navigatorCreated","_initNavigatorOptions","navigatorOptions","isTouch","isFirefox","dummyAxis","hasServerFiltering","hasSelect","_onNavigatorCreated","_navigator","_initNavigatorDataSource","dsOptions","_navigatorDataChangedHandler","_onNavigatorDataChanged","_navigatorDataSource","_bindNavigatorSeries","naviCategories","axesLength","_removeNavigatorDataSource","_onNavigatorFilter","navigatorDataSource","wrapNumber","TOP_OFFSET","SharedTooltip$1","DEAULT_BAR_WIDTH","DEAULT_BULLET_WIDTH","NO_CROSSHAIR","Sparkline","_initialWidth","stage","displayState","_autoWidth","inline","_calculateWidth","currentChart","pointWidth","normalizeOptions","SparklineTooltip","KendoSparkline","sqr","renderSize","renderPos","romanToArabic","memoize","isUnicodeLetter","RX_UNICODE_LETTER","withExit","Return","Extent","Location","lat","lng","DISTANCE_ITERATIONS","DISTANCE_CONVERGENCE","DISTANCE_PRECISION","FORMAT","loc","datum","greatCircleTo","bearing","fromLat","fromLng","dToR","datums","WGS84","U1","sinU1","cosU1","U2","sinU2","cosU2","lambda","prevLambda","converged","sinLambda","cosLambda","sino","cosA2","coso","cos2om","sigma","sinA","u2","deltao","azimuthFrom","azimuthTo","fromLngLat","ll","fromLatLng","nw","se","containsAny","locs","include","includeAll","edges","sw","extent","World","Attribution","itemTemplate","_extent","_itemText","inZoomLevel","_inZoomLevel","minZoom","maxZoom","inArea","_inArea","button","BUTTONS","_keyroot","_keydown","panStep","_pan","iconClass","PLUS","MINUS","FF_PLUS","FF_MINUS","ZoomControl","zoomStep","PI_DIV_4","Mercator","MAX_LNG","MAX_LAT","INVERSE_ITERATIONS","INVERSE_CONVERGENCE","centralMeridian","clamp","proj","lng0","_projectLat","ecc","ts","con","inverse","_inverseY","dphi","ecch","phi","SphericalMercator","Equirectangular","EPSG3857","crs","_proj","_tm","_itm","toLocation","EPSG3395","EPSG4326","projections","Layer","_beforeReset","_panEnd","_activate","_updateAttribution","_deactivate","_applyExtent","_setVisibility","matchMinZoom","matchMaxZoom","inside","attribution","layers","ShapeLayer","_initRoot","_markers","_dataChange","_translateSurface","_load","_clearMarkers","_loader","GeoJSONLoader","shapeCreated","cancelled","_createMarker","layer","featureCreated","_panning","locationToView","locator","defaultStyle","unwrap","_loadGeometryTo","_featureCreated","_shapeCreated","_loadPolygon","_setLineFill","_loadPoint","_loadShape","rings","_buildPolygon","geojson","features","geometries","BubbleLayer","locationField","opt","scaleType","_scaleType","_createSymbol","_drawSymbol","scales","symbols","SqrtScale","domain","domainRange","outputRange","_domain","_ratio","rel","Symbols","geo","roundPoint","drawingUtil","TileLayer","subdomains","viewType","_viewType","locationToLayer","viewOrigin","_updateView","TileView","extentToPoint","pool","TilePool","tileSize","urlTemplate","_center","_viewOrigin","pointToTileIndex","tileCount","firstTileIndex","indexToPoint","subdomainText","subdomainIndex","tile","createTile","currentIndex","tileOptions","wrapIndex","subdomain","errorUrlTemplate","wrapValue","ImageTile","errorUrl","urlResult","urlOptions","z","quadkey","_create","maxDist","BingLayer","_scheme","_onMetadata","_fetchMetadata","imagerySet","uriScheme","resource","resourceSets","resources","imageUrl","imageUrlSubdomains","zoomMin","zoomMax","_addAttribution","BingView","imageryProviders","coverageAreas","tileQuadKey","digit","quadKey","bing","MarkerLayer","_markerClick","titleField","_addOne","Marker","addTo","getLocation","getTitle","renderTooltip","contentTemplate","contentUrl","CSS_PREFIX","FRICTION_MOBILE","DEFAULT_ZOOM_RATE","Map","_getOrigin","_initScroller","_initMarkers","_initControls","_initLayers","controls","layerDefaults","markerDefaults","wraparound","scroller","zoomControl","_setExtent","_getExtent","_layerSize","layerToLocation","viewToLocation","eventOffset","eventToView","eventToLayer","eventToLocation","_setOrigin","_origin","layerWidth","layerHeight","_zoomAround","pivot","_createAttribution","_createNavigator","_createZoomControl","_createControlElement","defaultPos","posSelector","_navigatorPan","_navigatorCenter","bounds","_virtualSize","_scrollEnd","_zoomControlChange","_scroll","_scaleStart","_doubleTap","_scrollOffset","_panComplete","_panEndTS","_scaleToZoom","gestureCenter","centerLocation","tiles","_resetScroller","xBounds","yBounds","_renderLayers","scrollWrap","toZoom","postZoom","fromZoom","Range","rangeIntegerScale","Utils","findRadian","sngXComp","sngYComp","Easing","Ticker","EPSILON","isNearZero","isDefined","isUndefined","has","isBoolean","isType","simpleExtend","initArray","serializePoints","res","deserializePoints","randomInteger","DFT","getMatrixAngle","getMatrixScaling","sX","sY","findAngle","thisRef","what","fold","constraint","bisort","sortfunc","easeInOut","adapters","lastTime","_this","timerDelegate","onTimerEvent","addAdapter","onComplete","removeHandler","caller","onStep","seekTo","seekFromTo","intervalId","initState","propagate","movement","intersectLine","start1","end1","start2","end2","isSegment","num1","num2","tangensdiff","normalVariable","randomId","chars","PathDefiner","Intersect","RectAlign","Polar","MatrixVector","Geometry","HashTable","Dictionary","Queue","Set","Link","Graph","HITTESTAREA","plus","minus","times","lengthSquared","middleOf","toPolar","useDegrees","halfpi","factor","isOnLine","o1","u1","inflate","tempStr","xy","rotatedBounds","delimiter","staicPoint","adornerCenter","scaled","thisCenter","rectBottomRight","Empty","rectWithLine","rects","reverseAngle","alignValues","_singleAlign","_left","_right","stretch","_stretch","_top","_middle","_bottom","alignCalc","applyRect","fromSVGMatrix","vm","fromMatrixVector","fromList","translation","scaling","nums","fromMatrix","_distanceToLineSquared","pt1","pt2","vx","vy","distanceToLine","distanceToPolyline","minimum","_buckets","_createGetBucket","_bucketExists","containsKey","hashId","bucket","hashes","_hashes","ht","_hashString","_objectHashId","_hashId","dictionary","_hashTable","forEachValue","forEachKey","enqueue","kv","links","outgoing","incoming","associatedShape","shortForm","isVirtual","isIsolated","isLinkedTo","link","getComplement","getChildren","getParents","balance","adjacentTo","removeLink","hasLinkTo","degree","incidentWith","getLinksWith","getNeighbors","neighbors","connection","sourceFound","targetFound","associatedConnection","getCommonNode","isBridging","v1","v2","getNodes","changeSource","changeTarget","changesNodes","oldSource","oldTarget","directTo","createReverseEdge","reversed","idOrDiagram","_nodeMap","_hasCachedRelationships","cacheRelationships","forceRebuild","assignLevels","startNode","visited","getConnectedComponents","componentId","components","graph","componentIndex","setItemIndices","_collectConnectedNodes","addNodeAndOutgoings","setIds","nodeIndex","nextId","calcBounds","getSpanningTree","levelCount","ni","cn","newLink","treeLevels","_addNode","addLink","takeRandomNode","excludedNodes","incidenceLessThan","isHealthy","hasNode","sourceOrLink","foundSource","foundTarget","addExistingLink","getNode","addNode","removeAllLinks","hasLink","linkOrId","nodeOrId","_removeNode","removeNode","areConnected","n1","n2","layoutRect","newNode","newLinks","saveMapping","nodeMap","linkMap","nOriginal","nCopy","linkOriginal","linkCopy","linearize","addIds","depthFirstTraversal","foundNode","_dftIterator","breadthFirstTraversal","_stronglyConnectedComponents","excludeSingleItems","lowLinks","connected","component","findCycles","isAcyclic","isSubGraph","otherArray","thisArray","makeAcyclic","oneLink","oneNode","rev","intensityCatalog","flowIntensity","catalogEqualIntensity","sourceStack","targetStack","intensity","targetLink","sources","si","sourceLink","maxdiff","ril","vertexOrder","kk","reversedEdges","Predefined","EightGraph","Mindmap","ThreeGraph","BinaryTree","levels","createBalancedTree","Linear","Tree","siblingsCount","Forest","trees","createBalancedForest","Workflow","Grid","graphString","previousLink","lin","_addShape","kendoDiagram","undoable","addShape","_addConnection","connect","createDiagramFromGraph","doLayout","randomSize","gli","sourceShape","targetShape","shi","SpringLayout","layoutGraph","limitToView","counter","lastAdded","news","treeCount","createRandomConnectedGraph","nodeCount","maxIncidence","isTree","poolNode","randomAdditions","randomDiagram","shapeCount","diffNumericOptions","sizeOptionsOrDefault","normalizeDrawingOptions","drawingOptions","getColor","lineAngle","toDrawingRect","Scale","Translation","Rotation","CompositeTransform","AutoSizeableMixin","VisualBase","TextBlock","Rectangle","MarkerBase","CircleMarker","ArrowMarker","MarkerPathMixin","Line","Polyline","Canvas","Markers","none","arrowStart","filledCircle","arrowEnd","FULL_CIRCLE_ANGLE","toMatrixVector","Length","_transform","_renderTransform","rotateMatrix","scaleMatrix","translatePoint","_setScale","originWidth","_originWidth","originHeight","_originHeight","_setTranslate","_initSize","autoSize","_updateSize","_diffNumericOptions","_originSize","drawingContainer","_hover","_measured","_boundingBox","_fill","_stroke","strokeOptions","fillOptions","GradientClass","_textColor","_font","_initText","fontOptions","fontStyle","fontWeight","sizeChanged","_initPath","_setPosition","_drawPath","sizeOptions","_transformToPath","positionMarker","targetSegment","_linePoints","_getPath","_normalizeMarkerOptions","startCap","endCap","_removeMarker","_createMarkers","markerType","_positionMarker","_capMap","_redrawMarker","pathChange","pathOptions","pathCapType","optionsCap","_redrawMarkers","_createElements","_setData","_updatePath","_pointsDiffer","currentPoints","differ","_initImage","_childrenChange","toFront","toBack","_reorderChildren","toIndex","drawingChildren","fixedPosition","childBoundingBox","_includeInBBox","drawingRect","_initCircle","circleOptions","_circle","_translate","_viewBox","clearHtml","testKey","hitToOppositeSide","hit","canDrag","drag","hitTestShapeConnectors","connector","HIT_TEST_DISTANCE","noMeta","PositionAdapter","LayoutUndoUnit","CompositeUnit","ConnectionEditUnit","ConnectionEditUndoUnit","DeleteConnectionUnit","DeleteShapeUnit","TransformUnit","AddConnectionUnit","AddShapeUnit","PanUndoUnit","RotateUnit","ToFrontUnit","ToBackUnit","UndoRedoService","EmptyTool","ScrollerTool","PointerTool","SelectionTool","ConnectionTool","ConnectionEditTool","ToolService","ConnectionRouterBase","LinearConnectionRouter","PolylineRouter","CascadingRouter","AdornerBase","ConnectionEditAdorner","ConnectorsAdorner","ResizingAdorner","Selector","ConnectorVisual","Cursors","grip","cross","south","east","west","north","rowresize","colresize","DEFAULT_SNAP_SIZE","DEFAULT_SNAP_ANGLE","ITEMROTATE","ITEMBOUNDSCHANGE","MIN_SNAP_SIZE","MIN_SNAP_ANGLE","MOUSE_ENTER","MOUSE_LEAVE","SCROLL_MIN","SCROLL_MAX","PAN","ROTATED","TARGET","HANDLE_NAMES","-1","layoutState","pusher","getShapeById","subjects","froms","tos","initialState","finalState","_initialState","_finalState","undo","setState","redo","ticker","conn","undoUnit","redoSource","redoTarget","_redoSource","_redoTarget","_undoSource","_undoTarget","_updateConnector","updateModel","undoSource","undoTarget","targetConnector","undoStates","adorner","redoStates","layout","refreshBounds","deselect","initialPosition","finalPosition","finalPos","undoRotates","redoRotates","redoAngle","_angle","_innerBounds","_initialize","initialIndices","_toIndex","capacity","begin","commit","execute","_restart","addCompositeItem","toolService","tryActivate","getCursor","virtualScroll","tool","scrollable","movableCanvas","hoveredItem","hoveredAdorner","_hoveredConnector","scrollPos","_storePan","selectSingle","_hitTest","_resizingAdorner","isDragHandle","connections","undoRedoService","isSelected","selectArea","_createConnection","_c","connectionHandle","_connectionManipulation","_removeHover","activeConnection","_cachedTouchTarget","cachedTouchTarget","sourceConnector","Shape","getConnector","_syncConnectionChanges","_connectorsAdorner","isActive","handleName","activeTool","_updateHoveredItem","_activateTool","_updateCursor","updateHovered","keyDown","toRemove","metaKey","_triggerRemove","_syncChanges","_destroyToolBar","_discardNewConnection","selectAll","wheel","zoomRate","zoomOptions","setTool","addToSelection","newConnection","disabledShape","selectedConnections","_selectedItems","Connection","_hitTestItems","_hitTestElements","mainLayer","shapeIdx","connectionIdx","shapeHit","connectionHit","hitTest","rec","getBounds","SAME_SIDE_DISTANCE_RATIO","routePoints","_connectorPoints","_floatingPoints","_resolvedSourceConnector","_resolvedTargetConnector","sourcePoint","targetPoint","_connectorSides","boundsPoint","secondarySign","_connectorSide","sideDistance","minSide","shapeBounds","sides","_sameSideDistance","pointX","pointY","sourceConnectorSide","targetConnectorSide","deltaX","sameSideDistance","shiftX","shiftY","cascadeStartHorizontal","_startHorizontal","sourceSide","_adorners","sp","tp","_ts","spVisual","epVisual","_initialSource","_initialTarget","sourcePointDistance","targetPointDistance","sourceHandle","targetHandle","modelToLayer","_refreshHandler","ctr","_clearVisual","_keepCachedTouchTarget","visualChildren","_manipulating","_initSelection","_createHandles","_internalChange","_rotatedHandler","_resizable","_handleOptions","_bounds","handleBounds","handlesCount","_getHandleBounds","_rotationOffset","_startAngle","_rotates","_positions","initialRotates","initialStates","handleOptions","_sp","_cp","_lp","shapeStates","visibleHandles","dragging","newBounds","staticPoint","thr","newCenter","oldBounds","dtl","dbr","changed","_truncateAngle","_rotating","shouldSnap","_truncateDistance","_displaceBounds","_truncatePositionToGuides","ruler","truncatePositionToGuides","_truncateSizeToGuides","truncateSizeToGuides","snap","snapOptions","snapAngle","snapSize","_diffStates","_syncShapeChanges","rotationThumb","_rotationThumbBounds","_ep","_adorn","visualBounds","modelToView","relative","_visualBounds","HyperTree","LayoutBase","subtype","nodeDistance","iterations","horizontalSeparation","verticalSeparation","underneathVerticalTopOffset","underneathHorizontalOffset","underneathVerticalSeparation","componentSpacingX","componentSpacingY","layerSeparation","layeredIterations","startRadialAngle","endRadialAngle","radialSeparation","radialFirstLevelSeparation","keepComponentsInOneRadialLayout","ignoreContainers","layoutContainerChildren","ignoreInvisible","animateTransitions","gridLayoutComponents","maxWidth","startX","startY","resultLinkSet","resultNodeSet","boundingRect","currentHeight","currentWidth","moveToOffset","nodeBounds","newpoints","deltax","deltay","currentHorizontalOffset","transferOptions","DiagramToHyperTreeAdapter","shapeMap","edgeMap","finalNodes","finalLinks","ignoredConnections","ignoredShapes","hyperMap","hyperTree","finalGraph","_renormalizeShapes","_renormalizeConnections","mapConnection","mapShape","getEdge","listToRoot","containerGraph","parentContainer","firstNonIgnorableContainer","isContainer","_isIgnorableItem","isContainerConnection","isDescendantOf","isIgnorableItem","isCollapsed","_isVisible","_isTop","isShapeMapped","leastCommonAncestor","al","xa","xb","_isCollapsed","sink","sourceNode","sinkNode","newEdge","areConnectedAlready","finalNodeSet","LayoutState","initialTemperature","guessBounds","temperature","_expectedBounds","refineStage","_repulsion","_attraction","_shake","rho","_InverseSquareForce","wn","hn","wm","hm","_SquareForce","av","squareSize","multiplier","TreeLayoutProcessor","treeGraph","layoutSwitch","layoutLeft","setChildrenDirection","setChildrenLayout","TreeDirection","Width","arrange","layoutRight","layoutUp","layoutDown","treeDirection","layoutRadialTree","previousRoot","maxDepth","calculateAngularWidth","radialLayout","Angle","tipOverTree","startFromLevel","aw","diameter","sectorAngle","sortChildren","nl","col","basevalue","normalizeAngle","childAngleFraction","deltaTheta","deltaThetaHalf","parentSector","setPolarLocation","BoundingRectangle","includeStart","rootDirection","rootLayout","childrenLayout","givenSize","shapeWidth","shapeHeight","AngleToParent","SectorAngle","pp","childrenwidth","selfLocation","male","female","leftcount","tipOverTreeStartLevel","TreeLayout","layoutComponents","getTree","givenRootShape","getTreeForRoot","LayeredLayout","_initRuntimeProperties","downstreamLinkCount","upstreamLinkCount","uBaryCenter","dBaryCenter","upstreamPriority","downstreamPriority","gridPosition","_prepare","targetLayer","sortedNodes","minLayer","layerMap","layerCount","o2","o1layer","o2layer","linksTo","_dummify","_optimizeCrossings","_swapPairs","arrangeNodes","_moveThingsAround","_dedummify","setMinDist","minDist","layerIndex","minDistances","getMinDist","i1","i2","placeLeftToRight","leftClasses","classNodes","rightSibling","neighbor","leftPos","placeLeft","POSITIVE_INFINITY","nodeLeftClass","upNodes","downNodes","intDiv","placeRightToLeft","rightClasses","leftSibling","rightPos","placeRight","NEGATIVE_INFINITY","nodeRightClass","_getLeftWing","leftWing","computeClasses","_getRightWing","rightWing","wingPair","ndsinl","vnode","wings","currentWing","wing","_nodesInLink","classIndex","_isVerticalLayout","_isHorizontalLayout","_isIncreasingLayout","maximumHeight","currentNode","currDown","downNode","placed","sequenceStart","sequenceEnd","fromLayerIndex","reachedFinalLayerIndex","layerIncrement","_gridPositionComparer","virtualStartIndex","virtualStart","sequence","virtualEnd","virtualEndIndex","_firstVirtualNode","_sequencer","nextVirtualNode","adjustDirections","prevBridge","prevBridgeTarget","nextBridge","nextBridgeTarget","clayer","j1","j2","getNeighborOnLayer","_sequenceSingle","combineSequences","pair","rightHeap","leftRes","rightRes","leftHeap","_positionDescendingComparer","_positionAscendingComparer","leftClass","_getComposite","rightClass","maxLayoutIterations","it","gridPos","layoutLayer","iconsidered","considered","n1Priority","n2Priority","nodeGridPos","nodeBaryCenter","calcBaryCenter","nodePriority","moveRight","moveLeft","calcDownData","calcUpData","priority","rightNode","rightNodePriority","leftNode","leftNodePriority","mapVirtualNode","nodeToLinkMap","linkToNodeMap","addLinkBetweenLayers","oLayer","dLayer","oPos","dPos","upLayer","downLayer","depthOfDumminess","prevLink","dedum","moves","maxIterations","iter","optimizeLayerCrossings","presorted","inode","compareValue","n1BaryCenter","n2BaryCenter","compareByIndex","downwards","secondPass","hasSwapped","calcCrossings","memCrossings","crossBefore","node1","node2","node1GridPos","node2GridPos","crossAfter","revert","countLinksCrossingBetweenTwoLayers","ulayer","dlayer","link1","link2","n11","n12","n21","n22","l1","l2","n11gp","n12gp","n21gp","n22gp","crossings","numerator","denominator","graphOrNodes","diagramOrGraphOrNodes","GraphAdapter","toggleActive","STATE_ACTIVE","actionSheetWrap","preventClick","findFocusableSibling","getSibling","candidate","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_ANCHOR","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","getSelectedFromGroup","horizontalDirection","isComplexTool","hasVisibleChildren","splitContainer","eventData","urlTarget","isSplitButtonArrow","_toggle","lastHasFocus","firstHasFocus","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","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","weekNumberTemplate","cellTemplate","emptyCellTemplate","createDate","disableDates","isInRange","date1","date2","year1","getToday","restrictValue","shiftArray","daysBetweenTwoDates","endDate","fromDateUTC","endDateUTC","addDaysToArray","numberOfDays","fromDate","mousetoggle","HOVER","MOUSEENTER","FOCUS","prevent","dateObject","getCalendarInfo","extractFormat","MONTH","makeUnselectable","isIE8","addClassToViewContainer","currentView","isEqualDatePart","value1","value2","isEqualMonth","getDisabledExpr","createDisabledExpr","convertDatesArray","disabledDates","searchExpression","isEqualDate","oldValue","transitionOrigin","KEYDOWN_NS","SLIDE","CENTURY","NAVIGATE","DISABLED","FOCUSED","OTHERMONTH","OTHERMONTHCLASS","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","_footer","footer","_toDateObject","_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","insertAfter","_horizontal","viewWidth","float","margin-left","_vertical","disabledDate","firstDayCurrentMonth","isBigger","isTodayDisabled","_todayClick","footerTemplate","firstVisibleDay","calendarInfo","tzOffsetBefore","resultDATE","tzOffsetDiff","navigateUrl","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","_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","_inputWrapper","_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","_initialTitle","_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","_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","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","contentBoxSizing","lrBorderWidth","tbBorderWidth","_isPinned","_updateBoundaries","_animationOptions","basicAnimation","resizing","toggleMaximization","templates","resizeHandle","_actions","titlebar","windowSpecificCommands","cachedOptions","fade","autoFocus","isMaximized","isMinimized","_closable","newWidth","newHeight","_close","unpin","maximize","minimize","_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","_stopDocumentScrolling","_removeOverlay","suppressAnimation","modals","hideOverlay","hideOptions","systemTriggered","defaultPrevented","userTriggered","_enableDocumentScrolling","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","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","flatGroups","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","ActionSheet","$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","ScrollView","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","Switch","onLabel","offLabel","snapPoint","_animateBackground","handleWidth","_stop","ACTIVE_STATE_CLASS","TabStrip","_buildButton","switchTo","tab","tabs","_setActiveItem","switchByFullUrl","currentItem","tabstrip"],"mappings":"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GAAM,EAAGA,EAAM6vJ,EAAM71J,OAAQgG,IAClC6vJ,EAAM7vJ,GAAK8vJ,eAh+WtB,GAEO7rI,GACAhrB,GACAghD,GACA81G,GACA/3C,GACAyc,GACAp8D,GACAkc,GACAC,GACAC,GACA7vD,GACA85G,GACAb,GACAc,GACA9qH,GACAiR,GACA84G,GACAG,GACAlJ,GACA6I,GACAhyC,GACA1lE,GACA5d,GACA03H,GACAhwC,GACAolC,GACA/B,GACAoB,GACAjvH,GACA/G,GACAgvF,GACAkmC,GACAx2H,GACAm1B,GACAy6D,GACAmnC,GACAwM,GACAR,GACAlM,GACAqO,GACAx6F,GACA4rF,GACAj6G,GACAo6G,GACAuN,GACAlB,GACA/tH,GACA+6E,GACAp9D,GACAi+D,GACAsmC,GACA1mC,GACA6xC,GACArxC,GACAzzF,GACA2pB,GACA+iF,GACA7mE,GACAqyE,GACA/Y,GACArb,GACAm2B,GACA+0C,GACA/rH,GACAirH,GA+BAuH,GAUAC,GAkBAC,GA8EA/F,GA+GAgG,GACAC,GACAC,GACAC,GACAC,GA2GA50J,GACA60J,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACA7+I,GACA24I,GACAmG,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GAaAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAtrF,GACAurF,GACAC,GACAC,GACAC,GACAC,GACAC,GACApzF,GACAqzF,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAx2B,GAmFAy2B,GACAC,GAqGAC,GAMAtM,GA2CAuM,GAmdAC,GA6BAC,GAgBAC,GA8Q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EAAU1G,GAAAA,EAAKm/L,aAAa31J,EAC7C,KAASt1C,EAAI,EAAGA,EAAIwS,EAAQ3V,OAAQmD,IAChC8C,EAAQ2U,SAASjF,EAAQlW,OAAO0D,GAAI,IACpC8L,EAAK0G,QAAQxF,KAAKlK,GAClBgJ,EAAK+wH,YAAc/5H,CAEvBgJ,GAAK+mM,UAAYv9J,EAAOxpC,EAAK5M,YAEjC4zM,aAAc,SAAU9C,EAAeH,GACnC,IAAK,GAAI7vM,GAAI,EAAGA,EAAI6vM,EAAOhzM,OAAQmD,IAC/B,GAAIkF,KAAK2qM,EAAO7vM,IAAIhB,GAAGgxM,EAAcltM,MAAOktM,EAAcz4L,OACtD,MAAOs4L,GAAO7vM,EAGtBkF,MAAKqlM,sBAAsByF,EAAcltM,MAAMxG,OAAO0zM,EAAcz4L,SAExE0zL,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,EAAY9jM,QAC7B0O,KAAM,aACNu7L,QAAS,OAEbpF,EAAUwI,SAAWvJ,EAAY9jM,QAC7B0O,KAAM,aACNu7L,QAAS,OAEbpF,EAAUyI,SAAWxJ,EAAY9jM,QAC7B0O,KAAM,aACNu7L,QAAS,OAEbpF,EAAU0I,QAAUzJ,EAAY9jM,QAC5B0O,KAAM,WAC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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 = '2018.3.1017'.replace(/^\\s+|\\s+$/g, '');\n function Class() {\n }\n Class.extend = function (proto) {\n var base = function () {\n }, member, that = this, subclass = proto && proto.init ? proto.init : function () {\n that.apply(this, arguments);\n }, fn;\n base.prototype = that.prototype;\n fn = subclass.fn = subclass.prototype = new base();\n for (member in proto) {\n if (proto[member] != null && proto[member].constructor === Object) {\n fn[member] = extend(true, {}, base.prototype[member], proto[member]);\n } else {\n fn[member] = proto[member];\n }\n }\n fn.constructor = subclass;\n subclass.extend = that.extend;\n return subclass;\n };\n Class.prototype._initOptions = function (options) {\n this.options = deepExtend({}, this.options, options);\n };\n var isFunction = kendo.isFunction = function (fn) {\n return typeof fn === 'function';\n };\n var preventDefault = function () {\n this._defaultPrevented = true;\n };\n var isDefaultPrevented = function () {\n return this._defaultPrevented === true;\n };\n var Observable = Class.extend({\n init: function () {\n this._events = {};\n },\n bind: function (eventName, handlers, one) {\n var that = this, idx, eventNames = typeof eventName === STRING ? [eventName] : eventName, length, original, handler, handlersIsFunction = typeof handlers === FUNCTION, events;\n if (handlers === undefined) {\n for (idx in eventName) {\n that.bind(idx, eventName[idx]);\n }\n return that;\n }\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n eventName = eventNames[idx];\n handler = handlersIsFunction ? handlers : handlers[eventName];\n if (handler) {\n if (one) {\n original = handler;\n handler = function () {\n that.unbind(eventName, handler);\n original.apply(that, arguments);\n };\n handler.original = original;\n }\n events = that._events[eventName] = that._events[eventName] || [];\n events.push(handler);\n }\n }\n return that;\n },\n one: function (eventNames, handlers) {\n return this.bind(eventNames, handlers, true);\n },\n first: function (eventName, handlers) {\n var that = this, idx, eventNames = typeof eventName === STRING ? [eventName] : eventName, length, handler, handlersIsFunction = typeof handlers === FUNCTION, events;\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n eventName = eventNames[idx];\n handler = handlersIsFunction ? handlers : handlers[eventName];\n if (handler) {\n events = that._events[eventName] = that._events[eventName] || [];\n events.unshift(handler);\n }\n }\n return that;\n },\n trigger: function (eventName, e) {\n var that = this, events = that._events[eventName], idx, length;\n if (events) {\n e = e || {};\n e.sender = that;\n e._defaultPrevented = false;\n e.preventDefault = preventDefault;\n e.isDefaultPrevented = isDefaultPrevented;\n events = events.slice();\n for (idx = 0, length = events.length; idx < length; idx++) {\n events[idx].call(that, e);\n }\n return e._defaultPrevented === true;\n }\n return false;\n },\n unbind: function (eventName, handler) {\n var that = this, events = that._events[eventName], idx;\n if (eventName === undefined) {\n that._events = {};\n } else if (events) {\n if (handler) {\n for (idx = events.length - 1; idx >= 0; idx--) {\n if (events[idx] === handler || events[idx].original === handler) {\n events.splice(idx, 1);\n }\n }\n } else {\n that._events[eventName] = [];\n }\n }\n return that;\n }\n });\n function compilePart(part, stringPart) {\n if (stringPart) {\n return '\\'' + part.split('\\'').join('\\\\\\'').split('\\\\\"').join('\\\\\\\\\\\\\"').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/\\t/g, '\\\\t') + '\\'';\n } else {\n var first = part.charAt(0), rest = part.substring(1);\n if (first === '=') {\n return '+(' + rest + ')+';\n } else if (first === ':') {\n return '+$kendoHtmlEncode(' + rest + ')+';\n } else {\n return ';' + part + ';$kendoOutput+=';\n }\n }\n }\n var argumentNameRegExp = /^\\w+/, encodeRegExp = /\\$\\{([^}]*)\\}/g, escapedCurlyRegExp = /\\\\\\}/g, curlyRegExp = /__CURLY__/g, escapedSharpRegExp = /\\\\#/g, sharpRegExp = /__SHARP__/g, zeros = [\n '',\n '0',\n '00',\n '000',\n '0000'\n ];\n Template = {\n paramName: 'data',\n useWithBlock: true,\n render: function (template, data) {\n var idx, length, html = '';\n for (idx = 0, length = data.length; idx < length; idx++) {\n html += template(data[idx]);\n }\n return html;\n },\n compile: function (template, options) {\n var settings = extend({}, this, options), paramName = settings.paramName, argumentName = paramName.match(argumentNameRegExp)[0], useWithBlock = settings.useWithBlock, functionBody = 'var $kendoOutput, $kendoHtmlEncode = kendo.htmlEncode;', fn, parts, idx;\n if (isFunction(template)) {\n return template;\n }\n functionBody += useWithBlock ? 'with(' + paramName + '){' : '';\n functionBody += '$kendoOutput=';\n parts = template.replace(escapedCurlyRegExp, '__CURLY__').replace(encodeRegExp, '#=$kendoHtmlEncode($1)#').replace(curlyRegExp, '}').replace(escapedSharpRegExp, '__SHARP__').split('#');\n for (idx = 0; idx < parts.length; idx++) {\n functionBody += compilePart(parts[idx], idx % 2 === 0);\n }\n functionBody += useWithBlock ? ';}' : ';';\n functionBody += 'return $kendoOutput;';\n functionBody = functionBody.replace(sharpRegExp, '#');\n try {\n fn = new Function(argumentName, functionBody);\n fn._slotCount = Math.floor(parts.length / 2);\n return fn;\n } catch (e) {\n throw new Error(kendo.format('Invalid template:\\'{0}\\' Generated code:\\'{1}\\'', template, functionBody));\n }\n }\n };\n function pad(number, digits, end) {\n number = number + '';\n digits = digits || 2;\n end = digits - number.length;\n if (end) {\n return zeros[digits].substring(0, end) + number;\n }\n return number;\n }\n (function () {\n var escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g, gap, indent, meta = {\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\'\n }, rep, toString = {}.toString;\n if (typeof Date.prototype.toJSON !== FUNCTION) {\n Date.prototype.toJSON = function () {\n var that = this;\n return isFinite(that.valueOf()) ? pad(that.getUTCFullYear(), 4) + '-' + pad(that.getUTCMonth() + 1) + '-' + pad(that.getUTCDate()) + 'T' + pad(that.getUTCHours()) + ':' + pad(that.getUTCMinutes()) + ':' + pad(that.getUTCSeconds()) + 'Z' : null;\n };\n String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function () {\n return this.valueOf();\n };\n }\n function quote(string) {\n escapable.lastIndex = 0;\n return escapable.test(string) ? '\"' + string.replace(escapable, function (a) {\n var c = meta[a];\n return typeof c === STRING ? c : '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' : '\"' + string + '\"';\n }\n function str(key, holder) {\n var i, k, v, length, mind = gap, partial, value = holder[key], type;\n if (value && typeof value === OBJECT && typeof value.toJSON === FUNCTION) {\n value = value.toJSON(key);\n }\n if (typeof rep === FUNCTION) {\n value = rep.call(holder, key, value);\n }\n type = typeof value;\n if (type === STRING) {\n return quote(value);\n } else if (type === NUMBER) {\n return isFinite(value) ? String(value) : NULL;\n } else if (type === BOOLEAN || type === NULL) {\n return String(value);\n } else if (type === OBJECT) {\n if (!value) {\n return NULL;\n }\n gap += indent;\n partial = [];\n if (toString.apply(value) === '[object Array]') {\n length = value.length;\n for (i = 0; i < length; i++) {\n partial[i] = str(i, value) || NULL;\n }\n v = partial.length === 0 ? '[]' : gap ? '[\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + ']' : '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n if (rep && typeof rep === OBJECT) {\n length = rep.length;\n for (i = 0; i < length; i++) {\n if (typeof rep[i] === STRING) {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n } else {\n for (k in value) {\n if (Object.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n }\n v = partial.length === 0 ? '{}' : gap ? '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n }\n if (typeof JSON.stringify !== FUNCTION) {\n JSON.stringify = function (value, replacer, space) {\n var i;\n gap = '';\n indent = '';\n if (typeof space === NUMBER) {\n for (i = 0; i < space; i += 1) {\n indent += ' ';\n }\n } else if (typeof space === STRING) {\n indent = space;\n }\n rep = replacer;\n if (replacer && typeof replacer !== FUNCTION && (typeof replacer !== OBJECT || typeof replacer.length !== NUMBER)) {\n throw new Error('JSON.stringify');\n }\n return str('', { '': value });\n };\n }\n }());\n (function () {\n var dateFormatRegExp = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|HH|H|hh|h|mm|m|fff|ff|f|tt|ss|s|zzz|zz|z|\"[^\"]*\"|'[^']*'/g, standardFormatRegExp = /^(n|c|p|e)(\\d*)$/i, literalRegExp = /(\\\\.)|(['][^']*[']?)|([\"][^\"]*[\"]?)/g, commaRegExp = /\\,/g, EMPTY = '', POINT = '.', COMMA = ',', SHARP = '#', ZERO = '0', PLACEHOLDER = '??', EN = 'en-US', objectToString = {}.toString;\n kendo.cultures['en-US'] = {\n name: EN,\n numberFormat: {\n pattern: ['-n'],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n percent: {\n pattern: [\n '-n %',\n 'n %'\n ],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n symbol: '%'\n },\n currency: {\n name: 'US Dollar',\n abbr: 'USD',\n pattern: [\n '($n)',\n '$n'\n ],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n symbol: '$'\n }\n },\n calendars: {\n standard: {\n days: {\n names: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday'\n ],\n namesAbbr: [\n 'Sun',\n 'Mon',\n 'Tue',\n 'Wed',\n 'Thu',\n 'Fri',\n 'Sat'\n ],\n namesShort: [\n 'Su',\n 'Mo',\n 'Tu',\n 'We',\n 'Th',\n 'Fr',\n 'Sa'\n ]\n },\n months: {\n names: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ],\n namesAbbr: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ]\n },\n AM: [\n 'AM',\n 'am',\n 'AM'\n ],\n PM: [\n 'PM',\n 'pm',\n 'PM'\n ],\n patterns: {\n d: 'M/d/yyyy',\n D: 'dddd, MMMM dd, yyyy',\n F: 'dddd, MMMM dd, yyyy h:mm:ss tt',\n g: 'M/d/yyyy h:mm tt',\n G: 'M/d/yyyy h:mm:ss tt',\n m: 'MMMM dd',\n M: 'MMMM dd',\n s: 'yyyy\\'-\\'MM\\'-\\'ddTHH\\':\\'mm\\':\\'ss',\n t: 'h:mm tt',\n T: 'h:mm:ss tt',\n u: 'yyyy\\'-\\'MM\\'-\\'dd HH\\':\\'mm\\':\\'ss\\'Z\\'',\n y: 'MMMM, yyyy',\n Y: 'MMMM, yyyy'\n },\n '/': '/',\n ':': ':',\n firstDay: 0,\n twoDigitYearMax: 2029\n }\n }\n };\n function findCulture(culture) {\n if (culture) {\n if (culture.numberFormat) {\n return culture;\n }\n if (typeof culture === STRING) {\n var cultures = kendo.cultures;\n return cultures[culture] || cultures[culture.split('-')[0]] || null;\n }\n return null;\n }\n return null;\n }\n function getCulture(culture) {\n if (culture) {\n culture = findCulture(culture);\n }\n return culture || kendo.cultures.current;\n }\n kendo.culture = function (cultureName) {\n var cultures = kendo.cultures, culture;\n if (cultureName !== undefined) {\n culture = findCulture(cultureName) || cultures[EN];\n culture.calendar = culture.calendars.standard;\n cultures.current = culture;\n } else {\n return cultures.current;\n }\n };\n kendo.findCulture = findCulture;\n kendo.getCulture = getCulture;\n kendo.culture(EN);\n function formatDate(date, format, culture) {\n culture = getCulture(culture);\n var calendar = culture.calendars.standard, days = calendar.days, months = calendar.months;\n format = calendar.patterns[format] || format;\n return format.replace(dateFormatRegExp, function (match) {\n var minutes;\n var result;\n var sign;\n if (match === 'd') {\n result = date.getDate();\n } else if (match === 'dd') {\n result = pad(date.getDate());\n } else if (match === 'ddd') {\n result = days.namesAbbr[date.getDay()];\n } else if (match === 'dddd') {\n result = days.names[date.getDay()];\n } else if (match === 'M') {\n result = date.getMonth() + 1;\n } else if (match === 'MM') {\n result = pad(date.getMonth() + 1);\n } else if (match === 'MMM') {\n result = months.namesAbbr[date.getMonth()];\n } else if (match === 'MMMM') {\n result = months.names[date.getMonth()];\n } else if (match === 'yy') {\n result = pad(date.getFullYear() % 100);\n } else if (match === 'yyyy') {\n result = pad(date.getFullYear(), 4);\n } else if (match === 'h') {\n result = date.getHours() % 12 || 12;\n } else if (match === 'hh') {\n result = pad(date.getHours() % 12 || 12);\n } else if (match === 'H') {\n result = date.getHours();\n } else if (match === 'HH') {\n result = pad(date.getHours());\n } else if (match === 'm') {\n result = date.getMinutes();\n } else if (match === 'mm') {\n result = pad(date.getMinutes());\n } else if (match === 's') {\n result = date.getSeconds();\n } else if (match === 'ss') {\n result = pad(date.getSeconds());\n } else if (match === 'f') {\n result = math.floor(date.getMilliseconds() / 100);\n } else if (match === 'ff') {\n result = date.getMilliseconds();\n if (result > 99) {\n result = math.floor(result / 10);\n }\n result = pad(result);\n } else if (match === 'fff') {\n result = pad(date.getMilliseconds(), 3);\n } else if (match === 'tt') {\n result = date.getHours() < 12 ? calendar.AM[0] : calendar.PM[0];\n } else if (match === 'zzz') {\n minutes = date.getTimezoneOffset();\n sign = minutes < 0;\n result = math.abs(minutes / 60).toString().split('.')[0];\n minutes = math.abs(minutes) - result * 60;\n result = (sign ? '+' : '-') + pad(result);\n result += ':' + pad(minutes);\n } else if (match === 'zz' || match === 'z') {\n result = date.getTimezoneOffset() / 60;\n sign = result < 0;\n result = math.abs(result).toString().split('.')[0];\n result = (sign ? '+' : '-') + (match === 'zz' ? pad(result) : result);\n }\n return result !== undefined ? result : match.slice(1, match.length - 1);\n });\n }\n function formatNumber(number, format, culture) {\n culture = getCulture(culture);\n var numberFormat = culture.numberFormat, decimal = numberFormat[POINT], precision = numberFormat.decimals, pattern = numberFormat.pattern[0], literals = [], symbol, isCurrency, isPercent, customPrecision, formatAndPrecision, negative = number < 0, integer, fraction, integerLength, fractionLength, replacement = EMPTY, value = EMPTY, idx, length, ch, hasGroup, hasNegativeFormat, decimalIndex, sharpIndex, zeroIndex, hasZero, hasSharp, percentIndex, currencyIndex, startZeroIndex, start = -1, end;\n if (number === undefined) {\n return EMPTY;\n }\n if (!isFinite(number)) {\n return number;\n }\n if (!format) {\n return culture.name.length ? number.toLocaleString() : number.toString();\n }\n formatAndPrecision = standardFormatRegExp.exec(format);\n if (formatAndPrecision) {\n format = formatAndPrecision[1].toLowerCase();\n isCurrency = format === 'c';\n isPercent = format === 'p';\n if (isCurrency || isPercent) {\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n decimal = numberFormat[POINT];\n precision = numberFormat.decimals;\n symbol = numberFormat.symbol;\n pattern = numberFormat.pattern[negative ? 0 : 1];\n }\n customPrecision = formatAndPrecision[2];\n if (customPrecision) {\n precision = +customPrecision;\n }\n if (format === 'e') {\n var exp = customPrecision ? number.toExponential(precision) : number.toExponential();\n return exp.replace(POINT, numberFormat[POINT]);\n }\n if (isPercent) {\n number *= 100;\n }\n number = round(number, precision);\n negative = number < 0;\n number = number.split(POINT);\n integer = number[0];\n fraction = number[1];\n if (negative) {\n integer = integer.substring(1);\n }\n value = groupInteger(integer, 0, integer.length, numberFormat);\n if (fraction) {\n value += decimal + fraction;\n }\n if (format === 'n' && !negative) {\n return value;\n }\n number = EMPTY;\n for (idx = 0, length = pattern.length; idx < length; idx++) {\n ch = pattern.charAt(idx);\n if (ch === 'n') {\n number += value;\n } else if (ch === '$' || ch === '%') {\n number += symbol;\n } else {\n number += ch;\n }\n }\n return number;\n }\n if (format.indexOf('\\'') > -1 || format.indexOf('\"') > -1 || format.indexOf('\\\\') > -1) {\n format = format.replace(literalRegExp, function (match) {\n var quoteChar = match.charAt(0).replace('\\\\', ''), literal = match.slice(1).replace(quoteChar, '');\n literals.push(literal);\n return PLACEHOLDER;\n });\n }\n format = format.split(';');\n if (negative && format[1]) {\n format = format[1];\n hasNegativeFormat = true;\n } else if (number === 0 && format[2]) {\n format = format[2];\n if (format.indexOf(SHARP) == -1 && format.indexOf(ZERO) == -1) {\n return format;\n }\n } else {\n format = format[0];\n }\n percentIndex = format.indexOf('%');\n currencyIndex = format.indexOf('$');\n isPercent = percentIndex != -1;\n isCurrency = currencyIndex != -1;\n if (isPercent) {\n number *= 100;\n }\n if (isCurrency && format[currencyIndex - 1] === '\\\\') {\n format = format.split('\\\\').join('');\n isCurrency = false;\n }\n if (isCurrency || isPercent) {\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n decimal = numberFormat[POINT];\n precision = numberFormat.decimals;\n symbol = numberFormat.symbol;\n }\n hasGroup = format.indexOf(COMMA) > -1;\n if (hasGroup) {\n format = format.replace(commaRegExp, EMPTY);\n }\n decimalIndex = format.indexOf(POINT);\n length = format.length;\n if (decimalIndex != -1) {\n fraction = number.toString().split('e');\n if (fraction[1]) {\n fraction = round(number, Math.abs(fraction[1]));\n } else {\n fraction = fraction[0];\n }\n fraction = fraction.split(POINT)[1] || EMPTY;\n zeroIndex = format.lastIndexOf(ZERO) - decimalIndex;\n sharpIndex = format.lastIndexOf(SHARP) - decimalIndex;\n hasZero = zeroIndex > -1;\n hasSharp = sharpIndex > -1;\n idx = fraction.length;\n if (!hasZero && !hasSharp) {\n format = format.substring(0, decimalIndex) + format.substring(decimalIndex + 1);\n length = format.length;\n decimalIndex = -1;\n idx = 0;\n }\n if (hasZero && zeroIndex > sharpIndex) {\n idx = zeroIndex;\n } else if (sharpIndex > zeroIndex) {\n if (hasSharp && idx > sharpIndex) {\n var rounded = round(number, sharpIndex, negative);\n while (rounded.charAt(rounded.length - 1) === ZERO && sharpIndex > 0 && sharpIndex > zeroIndex) {\n sharpIndex--;\n rounded = round(number, sharpIndex, negative);\n }\n idx = sharpIndex;\n } else if (hasZero && idx < zeroIndex) {\n idx = zeroIndex;\n }\n }\n }\n number = round(number, idx, negative);\n sharpIndex = format.indexOf(SHARP);\n startZeroIndex = zeroIndex = format.indexOf(ZERO);\n if (sharpIndex == -1 && zeroIndex != -1) {\n start = zeroIndex;\n } else if (sharpIndex != -1 && zeroIndex == -1) {\n start = sharpIndex;\n } else {\n start = sharpIndex > zeroIndex ? zeroIndex : sharpIndex;\n }\n sharpIndex = format.lastIndexOf(SHARP);\n zeroIndex = format.lastIndexOf(ZERO);\n if (sharpIndex == -1 && zeroIndex != -1) {\n end = zeroIndex;\n } else if (sharpIndex != -1 && zeroIndex == -1) {\n end = sharpIndex;\n } else {\n end = sharpIndex > zeroIndex ? sharpIndex : zeroIndex;\n }\n if (start == length) {\n end = start;\n }\n if (start != -1) {\n value = number.toString().split(POINT);\n integer = value[0];\n fraction = value[1] || EMPTY;\n integerLength = integer.length;\n fractionLength = fraction.length;\n if (negative && number * -1 >= 0) {\n negative = false;\n }\n number = format.substring(0, start);\n if (negative && !hasNegativeFormat) {\n number += '-';\n }\n for (idx = start; idx < length; idx++) {\n ch = format.charAt(idx);\n if (decimalIndex == -1) {\n if (end - idx < integerLength) {\n number += integer;\n break;\n }\n } else {\n if (zeroIndex != -1 && zeroIndex < idx) {\n replacement = EMPTY;\n }\n if (decimalIndex - idx <= integerLength && decimalIndex - idx > -1) {\n number += integer;\n idx = decimalIndex;\n }\n if (decimalIndex === idx) {\n number += (fraction ? decimal : EMPTY) + fraction;\n idx += end - decimalIndex + 1;\n continue;\n }\n }\n if (ch === ZERO) {\n number += ch;\n replacement = ch;\n } else if (ch === SHARP) {\n number += replacement;\n }\n }\n if (hasGroup) {\n number = groupInteger(number, start + (negative && !hasNegativeFormat ? 1 : 0), Math.max(end, integerLength + start), numberFormat);\n }\n if (end >= start) {\n number += format.substring(end + 1);\n }\n if (isCurrency || isPercent) {\n value = EMPTY;\n for (idx = 0, length = number.length; idx < length; idx++) {\n ch = number.charAt(idx);\n value += ch === '$' || ch === '%' ? symbol : ch;\n }\n number = value;\n }\n length = literals.length;\n if (length) {\n for (idx = 0; idx < length; idx++) {\n number = number.replace(PLACEHOLDER, literals[idx]);\n }\n }\n }\n return number;\n }\n var groupInteger = function (number, start, end, numberFormat) {\n var decimalIndex = number.indexOf(numberFormat[POINT]);\n var groupSizes = numberFormat.groupSize.slice();\n var groupSize = groupSizes.shift();\n var integer, integerLength;\n var idx, parts, value;\n var newGroupSize;\n end = decimalIndex !== -1 ? decimalIndex : end + 1;\n integer = number.substring(start, end);\n integerLength = integer.length;\n if (integerLength >= groupSize) {\n idx = integerLength;\n parts = [];\n while (idx > -1) {\n value = integer.substring(idx - groupSize, idx);\n if (value) {\n parts.push(value);\n }\n idx -= groupSize;\n newGroupSize = groupSizes.shift();\n groupSize = newGroupSize !== undefined ? newGroupSize : groupSize;\n if (groupSize === 0) {\n if (idx > 0) {\n parts.push(integer.substring(0, idx));\n }\n break;\n }\n }\n integer = parts.reverse().join(numberFormat[COMMA]);\n number = number.substring(0, start) + integer + number.substring(end);\n }\n return number;\n };\n var round = function (value, precision, negative) {\n precision = precision || 0;\n value = value.toString().split('e');\n value = Math.round(+(value[0] + 'e' + (value[1] ? +value[1] + precision : precision)));\n if (negative) {\n value = -value;\n }\n value = value.toString().split('e');\n value = +(value[0] + 'e' + (value[1] ? +value[1] - precision : -precision));\n return value.toFixed(Math.min(precision, 20));\n };\n var toString = function (value, fmt, culture) {\n if (fmt) {\n if (objectToString.call(value) === '[object Date]') {\n return formatDate(value, fmt, culture);\n } else if (typeof value === NUMBER) {\n return formatNumber(value, fmt, culture);\n }\n }\n return value !== undefined ? value : '';\n };\n kendo.format = function (fmt) {\n var values = arguments;\n return fmt.replace(formatRegExp, function (match, index, placeholderFormat) {\n var value = values[parseInt(index, 10) + 1];\n return toString(value, placeholderFormat ? placeholderFormat.substring(1) : '');\n });\n };\n kendo._extractFormat = function (format) {\n if (format.slice(0, 3) === '{0:') {\n format = format.slice(3, format.length - 1);\n }\n return format;\n };\n kendo._activeElement = function () {\n try {\n return document.activeElement;\n } catch (e) {\n return document.documentElement.activeElement;\n }\n };\n kendo._round = round;\n kendo._outerWidth = function (element, includeMargin) {\n return $(element).outerWidth(includeMargin || false) || 0;\n };\n kendo._outerHeight = function (element, includeMargin) {\n return $(element).outerHeight(includeMargin || false) || 0;\n };\n kendo.toString = toString;\n }());\n (function () {\n var nonBreakingSpaceRegExp = /\\u00A0/g, exponentRegExp = /[eE][\\-+]?[0-9]+/, shortTimeZoneRegExp = /[+|\\-]\\d{1,2}/, longTimeZoneRegExp = /[+|\\-]\\d{1,2}:?\\d{2}/, dateRegExp = /^\\/Date\\((.*?)\\)\\/$/, offsetRegExp = /[+-]\\d*/, FORMATS_SEQUENCE = [\n [],\n [\n 'G',\n 'g',\n 'F'\n ],\n [\n 'D',\n 'd',\n 'y',\n 'm',\n 'T',\n 't'\n ]\n ], STANDARD_FORMATS = [\n [\n 'yyyy-MM-ddTHH:mm:ss.fffffffzzz',\n 'yyyy-MM-ddTHH:mm:ss.fffffff',\n 'yyyy-MM-ddTHH:mm:ss.fffzzz',\n 'yyyy-MM-ddTHH:mm:ss.fff',\n 'ddd MMM dd yyyy HH:mm:ss',\n 'yyyy-MM-ddTHH:mm:sszzz',\n 'yyyy-MM-ddTHH:mmzzz',\n 'yyyy-MM-ddTHH:mmzz',\n 'yyyy-MM-ddTHH:mm:ss',\n 'yyyy-MM-dd HH:mm:ss',\n 'yyyy/MM/dd HH:mm:ss'\n ],\n [\n 'yyyy-MM-ddTHH:mm',\n 'yyyy-MM-dd HH:mm',\n 'yyyy/MM/dd HH:mm'\n ],\n [\n 'yyyy/MM/dd',\n 'yyyy-MM-dd',\n 'HH:mm:ss',\n 'HH:mm'\n ]\n ], numberRegExp = {\n 2: /^\\d{1,2}/,\n 3: /^\\d{1,3}/,\n 4: /^\\d{4}/\n }, objectToString = {}.toString;\n function outOfRange(value, start, end) {\n return !(value >= start && value <= end);\n }\n function designatorPredicate(designator) {\n return designator.charAt(0);\n }\n function mapDesignators(designators) {\n return $.map(designators, designatorPredicate);\n }\n function adjustDST(date, hours) {\n if (!hours && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n }\n }\n function lowerArray(data) {\n var idx = 0, length = data.length, array = [];\n for (; idx < length; idx++) {\n array[idx] = (data[idx] + '').toLowerCase();\n }\n return array;\n }\n function lowerLocalInfo(localInfo) {\n var newLocalInfo = {}, property;\n for (property in localInfo) {\n newLocalInfo[property] = lowerArray(localInfo[property]);\n }\n return newLocalInfo;\n }\n function parseExact(value, format, culture, strict) {\n if (!value) {\n return null;\n }\n var lookAhead = function (match) {\n var i = 0;\n while (format[idx] === match) {\n i++;\n idx++;\n }\n if (i > 0) {\n idx -= 1;\n }\n return i;\n }, getNumber = function (size) {\n var rg = numberRegExp[size] || new RegExp('^\\\\d{1,' + size + '}'), match = value.substr(valueIdx, size).match(rg);\n if (match) {\n match = match[0];\n valueIdx += match.length;\n return parseInt(match, 10);\n }\n return null;\n }, getIndexByName = function (names, lower) {\n var i = 0, length = names.length, name, nameLength, matchLength = 0, matchIdx = 0, subValue;\n for (; i < length; i++) {\n name = names[i];\n nameLength = name.length;\n subValue = value.substr(valueIdx, nameLength);\n if (lower) {\n subValue = subValue.toLowerCase();\n }\n if (subValue == name && nameLength > matchLength) {\n matchLength = nameLength;\n matchIdx = i;\n }\n }\n if (matchLength) {\n valueIdx += matchLength;\n return matchIdx + 1;\n }\n return null;\n }, checkLiteral = function () {\n var result = false;\n if (value.charAt(valueIdx) === format[idx]) {\n valueIdx++;\n result = true;\n }\n return result;\n }, calendar = culture.calendars.standard, year = null, month = null, day = null, hours = null, minutes = null, seconds = null, milliseconds = null, idx = 0, valueIdx = 0, literal = false, date = new Date(), twoDigitYearMax = calendar.twoDigitYearMax || 2029, defaultYear = date.getFullYear(), ch, count, length, pattern, pmHour, UTC, matches, amDesignators, pmDesignators, hoursOffset, minutesOffset, hasTime, match;\n if (!format) {\n format = 'd';\n }\n pattern = calendar.patterns[format];\n if (pattern) {\n format = pattern;\n }\n format = format.split('');\n length = format.length;\n for (; idx < length; idx++) {\n ch = format[idx];\n if (literal) {\n if (ch === '\\'') {\n literal = false;\n } else {\n checkLiteral();\n }\n } else {\n if (ch === 'd') {\n count = lookAhead('d');\n if (!calendar._lowerDays) {\n calendar._lowerDays = lowerLocalInfo(calendar.days);\n }\n if (day !== null && count > 2) {\n continue;\n }\n day = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerDays[count == 3 ? 'namesAbbr' : 'names'], true);\n if (day === null || outOfRange(day, 1, 31)) {\n return null;\n }\n } else if (ch === 'M') {\n count = lookAhead('M');\n if (!calendar._lowerMonths) {\n calendar._lowerMonths = lowerLocalInfo(calendar.months);\n }\n month = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerMonths[count == 3 ? 'namesAbbr' : 'names'], true);\n if (month === null || outOfRange(month, 1, 12)) {\n return null;\n }\n month -= 1;\n } else if (ch === 'y') {\n count = lookAhead('y');\n year = getNumber(count);\n if (year === null) {\n return null;\n }\n if (count == 2) {\n if (typeof twoDigitYearMax === 'string') {\n twoDigitYearMax = defaultYear + parseInt(twoDigitYearMax, 10);\n }\n year = defaultYear - defaultYear % 100 + year;\n if (year > twoDigitYearMax) {\n year -= 100;\n }\n }\n } else if (ch === 'h') {\n lookAhead('h');\n hours = getNumber(2);\n if (hours == 12) {\n hours = 0;\n }\n if (hours === null || outOfRange(hours, 0, 11)) {\n return null;\n }\n } else if (ch === 'H') {\n lookAhead('H');\n hours = getNumber(2);\n if (hours === null || outOfRange(hours, 0, 23)) {\n return null;\n }\n } else if (ch === 'm') {\n lookAhead('m');\n minutes = getNumber(2);\n if (minutes === null || outOfRange(minutes, 0, 59)) {\n return null;\n }\n } else if (ch === 's') {\n lookAhead('s');\n seconds = getNumber(2);\n if (seconds === null || outOfRange(seconds, 0, 59)) {\n return null;\n }\n } else if (ch === 'f') {\n count = lookAhead('f');\n match = value.substr(valueIdx, count).match(numberRegExp[3]);\n milliseconds = getNumber(count);\n if (milliseconds !== null) {\n milliseconds = parseFloat('0.' + match[0], 10);\n milliseconds = kendo._round(milliseconds, 3);\n milliseconds *= 1000;\n }\n if (milliseconds === null || outOfRange(milliseconds, 0, 999)) {\n return null;\n }\n } else if (ch === 't') {\n count = lookAhead('t');\n amDesignators = calendar.AM;\n pmDesignators = calendar.PM;\n if (count === 1) {\n amDesignators = mapDesignators(amDesignators);\n pmDesignators = mapDesignators(pmDesignators);\n }\n pmHour = getIndexByName(pmDesignators);\n if (!pmHour && !getIndexByName(amDesignators)) {\n return null;\n }\n } else if (ch === 'z') {\n UTC = true;\n count = lookAhead('z');\n if (value.substr(valueIdx, 1) === 'Z') {\n checkLiteral();\n continue;\n }\n matches = value.substr(valueIdx, 6).match(count > 2 ? longTimeZoneRegExp : shortTimeZoneRegExp);\n if (!matches) {\n return null;\n }\n matches = matches[0].split(':');\n hoursOffset = matches[0];\n minutesOffset = matches[1];\n if (!minutesOffset && hoursOffset.length > 3) {\n valueIdx = hoursOffset.length - 2;\n minutesOffset = hoursOffset.substring(valueIdx);\n hoursOffset = hoursOffset.substring(0, valueIdx);\n }\n hoursOffset = parseInt(hoursOffset, 10);\n if (outOfRange(hoursOffset, -12, 13)) {\n return null;\n }\n if (count > 2) {\n minutesOffset = matches[0][0] + minutesOffset;\n minutesOffset = parseInt(minutesOffset, 10);\n if (isNaN(minutesOffset) || outOfRange(minutesOffset, -59, 59)) {\n return null;\n }\n }\n } else if (ch === '\\'') {\n literal = true;\n checkLiteral();\n } else if (!checkLiteral()) {\n return null;\n }\n }\n }\n if (strict && !/^\\s*$/.test(value.substr(valueIdx))) {\n return null;\n }\n hasTime = hours !== null || minutes !== null || seconds || null;\n if (year === null && month === null && day === null && hasTime) {\n year = defaultYear;\n month = date.getMonth();\n day = date.getDate();\n } else {\n if (year === null) {\n year = defaultYear;\n }\n if (day === null) {\n day = 1;\n }\n }\n if (pmHour && hours < 12) {\n hours += 12;\n }\n if (UTC) {\n if (hoursOffset) {\n hours += -hoursOffset;\n }\n if (minutesOffset) {\n minutes += -minutesOffset;\n }\n value = new Date(Date.UTC(year, month, day, hours, minutes, seconds, milliseconds));\n } else {\n value = new Date(year, month, day, hours, minutes, seconds, milliseconds);\n adjustDST(value, hours);\n }\n if (year < 100) {\n value.setFullYear(year);\n }\n if (value.getDate() !== day && UTC === undefined) {\n return null;\n }\n return value;\n }\n function parseMicrosoftFormatOffset(offset) {\n var sign = offset.substr(0, 1) === '-' ? -1 : 1;\n offset = offset.substring(1);\n offset = parseInt(offset.substr(0, 2), 10) * 60 + parseInt(offset.substring(2), 10);\n return sign * offset;\n }\n function getDefaultFormats(culture) {\n var length = math.max(FORMATS_SEQUENCE.length, STANDARD_FORMATS.length);\n var calendar = culture.calendar || culture.calendars.standard;\n var patterns = calendar.patterns;\n var cultureFormats, formatIdx, idx;\n var formats = [];\n for (idx = 0; idx < length; idx++) {\n cultureFormats = FORMATS_SEQUENCE[idx];\n for (formatIdx = 0; formatIdx < cultureFormats.length; formatIdx++) {\n formats.push(patterns[cultureFormats[formatIdx]]);\n }\n formats = formats.concat(STANDARD_FORMATS[idx]);\n }\n return formats;\n }\n function internalParseDate(value, formats, culture, strict) {\n if (objectToString.call(value) === '[object Date]') {\n return value;\n }\n var idx = 0;\n var date = null;\n var length;\n var tzoffset;\n if (value && value.indexOf('/D') === 0) {\n date = dateRegExp.exec(value);\n if (date) {\n date = date[1];\n tzoffset = offsetRegExp.exec(date.substring(1));\n date = new Date(parseInt(date, 10));\n if (tzoffset) {\n tzoffset = parseMicrosoftFormatOffset(tzoffset[0]);\n date = kendo.timezone.apply(date, 0);\n date = kendo.timezone.convert(date, 0, -1 * tzoffset);\n }\n return date;\n }\n }\n culture = kendo.getCulture(culture);\n if (!formats) {\n formats = getDefaultFormats(culture);\n }\n formats = isArray(formats) ? formats : [formats];\n length = formats.length;\n for (; idx < length; idx++) {\n date = parseExact(value, formats[idx], culture, strict);\n if (date) {\n return date;\n }\n }\n return date;\n }\n kendo.parseDate = function (value, formats, culture) {\n return internalParseDate(value, formats, culture, false);\n };\n kendo.parseExactDate = function (value, formats, culture) {\n return internalParseDate(value, formats, culture, true);\n };\n kendo.parseInt = function (value, culture) {\n var result = kendo.parseFloat(value, culture);\n if (result) {\n result = result | 0;\n }\n return result;\n };\n kendo.parseFloat = function (value, culture, format) {\n if (!value && value !== 0) {\n return null;\n }\n if (typeof value === NUMBER) {\n return value;\n }\n value = value.toString();\n culture = kendo.getCulture(culture);\n var number = culture.numberFormat, percent = number.percent, currency = number.currency, symbol = currency.symbol, percentSymbol = percent.symbol, negative = value.indexOf('-'), parts, isPercent;\n if (exponentRegExp.test(value)) {\n value = parseFloat(value.replace(number['.'], '.'));\n if (isNaN(value)) {\n value = null;\n }\n return value;\n }\n if (negative > 0) {\n return null;\n } else {\n negative = negative > -1;\n }\n if (value.indexOf(symbol) > -1 || format && format.toLowerCase().indexOf('c') > -1) {\n number = currency;\n parts = number.pattern[0].replace('$', symbol).split('n');\n if (value.indexOf(parts[0]) > -1 && value.indexOf(parts[1]) > -1) {\n value = value.replace(parts[0], '').replace(parts[1], '');\n negative = true;\n }\n } else if (value.indexOf(percentSymbol) > -1) {\n isPercent = true;\n number = percent;\n symbol = percentSymbol;\n }\n value = value.replace('-', '').replace(symbol, '').replace(nonBreakingSpaceRegExp, ' ').split(number[','].replace(nonBreakingSpaceRegExp, ' ')).join('').replace(number['.'], '.');\n value = parseFloat(value);\n if (isNaN(value)) {\n value = null;\n } else if (negative) {\n value *= -1;\n }\n if (value && isPercent) {\n value /= 100;\n }\n return value;\n };\n }());\n function getShadows(element) {\n var shadow = element.css(kendo.support.transitions.css + 'box-shadow') || element.css('box-shadow'), radius = shadow ? shadow.match(boxShadowRegExp) || [\n 0,\n 0,\n 0,\n 0,\n 0\n ] : [\n 0,\n 0,\n 0,\n 0,\n 0\n ], blur = math.max(+radius[3], +(radius[4] || 0));\n return {\n left: -radius[1] + blur,\n right: +radius[1] + blur,\n bottom: +radius[2] + blur\n };\n }\n function wrap(element, autosize) {\n var browser = support.browser, percentage, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight;\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);\n percentage = percentWidth || percentHeight;\n if (!percentWidth && (!autosize || autosize && width)) {\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 webComponents: kendo.webComponents || [],\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 info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n var zone = info.zone;\n var rule = info.rule;\n return kendo.parseFloat(rule ? zone[0] - rule[6] : zone[0]);\n }\n function abbr(utcTime, timezone) {\n var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n var zone = info.zone;\n var rule = info.rule;\n var base = zone[2];\n if (base.indexOf('/') >= 0) {\n return base.split('/')[rule && +rule[6] ? 1 : 0];\n } else if (base.indexOf('%s') >= 0) {\n return base.replace('%s', !rule || rule[7] == '-' ? '' : rule[7]);\n }\n return base;\n }\n function convert(date, fromOffset, toOffset) {\n var tempToOffset = toOffset;\n var diff;\n if (typeof fromOffset == STRING) {\n fromOffset = this.offset(date, fromOffset);\n }\n if (typeof toOffset == STRING) {\n toOffset = this.offset(date, toOffset);\n }\n var fromLocalOffset = date.getTimezoneOffset();\n date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\n var toLocalOffset = date.getTimezoneOffset();\n if (typeof tempToOffset == STRING) {\n tempToOffset = this.offset(date, tempToOffset);\n }\n diff = toLocalOffset - fromLocalOffset + (toOffset - tempToOffset);\n return new Date(date.getTime() + diff * 60000);\n }\n function apply(date, timezone) {\n return this.convert(date, date.getTimezoneOffset(), timezone);\n }\n function remove(date, timezone) {\n return this.convert(date, timezone, date.getTimezoneOffset());\n }\n function toLocalDate(time) {\n return this.apply(new Date(time), 'Etc/UTC');\n }\n return {\n zones: {},\n rules: {},\n offset: offset,\n convert: convert,\n apply: apply,\n remove: remove,\n abbr: abbr,\n toLocalDate: toLocalDate\n };\n }();\n kendo.date = function () {\n var MS_PER_MINUTE = 60000, MS_PER_DAY = 86400000;\n function adjustDST(date, hours) {\n if (hours === 0 && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n return true;\n }\n return false;\n }\n function setDayOfWeek(date, day, dir) {\n var hours = date.getHours();\n dir = dir || 1;\n day = (day - date.getDay() + 7 * dir) % 7;\n date.setDate(date.getDate() + day);\n adjustDST(date, hours);\n }\n function dayOfWeek(date, day, dir) {\n date = new Date(date);\n setDayOfWeek(date, day, dir);\n return date;\n }\n function firstDayOfMonth(date) {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n }\n function lastDayOfMonth(date) {\n var last = new Date(date.getFullYear(), date.getMonth() + 1, 0), first = firstDayOfMonth(date), timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n if (timeOffset) {\n last.setHours(first.getHours() + timeOffset / 60);\n }\n return last;\n }\n function moveDateToWeekStart(date, weekStartDay) {\n if (weekStartDay !== 1) {\n return addDays(dayOfWeek(date, weekStartDay, -1), 4);\n }\n return addDays(date, 4 - (date.getDay() || 7));\n }\n function calcWeekInYear(date, weekStartDay) {\n var firstWeekInYear = new Date(date.getFullYear(), 0, 1, -6);\n var newDate = moveDateToWeekStart(date, weekStartDay);\n var diffInMS = newDate.getTime() - firstWeekInYear.getTime();\n var days = Math.floor(diffInMS / MS_PER_DAY);\n return 1 + Math.floor(days / 7);\n }\n function weekInYear(date, weekStartDay) {\n if (weekStartDay === undefined) {\n weekStartDay = kendo.culture().calendar.firstDay;\n }\n var prevWeekDate = addDays(date, -7);\n var nextWeekDate = addDays(date, 7);\n var weekNumber = calcWeekInYear(date, weekStartDay);\n if (weekNumber === 0) {\n return calcWeekInYear(prevWeekDate, weekStartDay) + 1;\n }\n if (weekNumber === 53 && calcWeekInYear(nextWeekDate, weekStartDay) > 1) {\n return 1;\n }\n return weekNumber;\n }\n function getDate(date) {\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n adjustDST(date, 0);\n return date;\n }\n function toUtcTime(date) {\n return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n function getMilliseconds(date) {\n return toInvariantTime(date).getTime() - getDate(toInvariantTime(date));\n }\n function isInTimeRange(value, min, max) {\n var msMin = getMilliseconds(min), msMax = getMilliseconds(max), msValue;\n if (!value || msMin == msMax) {\n return true;\n }\n if (min >= max) {\n max += MS_PER_DAY;\n }\n msValue = getMilliseconds(value);\n if (msMin > msValue) {\n msValue += MS_PER_DAY;\n }\n if (msMax < msMin) {\n msMax += MS_PER_DAY;\n }\n return msValue >= msMin && msValue <= msMax;\n }\n function isInDateRange(value, min, max) {\n var msMin = min.getTime(), msMax = max.getTime(), msValue;\n if (msMin >= msMax) {\n msMax += MS_PER_DAY;\n }\n msValue = value.getTime();\n return msValue >= msMin && msValue <= msMax;\n }\n function addDays(date, offset) {\n var hours = date.getHours();\n date = new Date(date);\n setTime(date, offset * MS_PER_DAY);\n adjustDST(date, hours);\n return date;\n }\n function setTime(date, milliseconds, ignoreDST) {\n var offset = date.getTimezoneOffset();\n var difference;\n date.setTime(date.getTime() + milliseconds);\n if (!ignoreDST) {\n difference = date.getTimezoneOffset() - offset;\n date.setTime(date.getTime() + difference * MS_PER_MINUTE);\n }\n }\n function setHours(date, time) {\n date = new Date(kendo.date.getDate(date).getTime() + kendo.date.getMilliseconds(time));\n adjustDST(date, time.getHours());\n return date;\n }\n function today() {\n return getDate(new Date());\n }\n function isToday(date) {\n return getDate(date).getTime() == today().getTime();\n }\n function toInvariantTime(date) {\n var staticDate = new Date(1980, 1, 1, 0, 0, 0);\n if (date) {\n staticDate.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n return staticDate;\n }\n return {\n adjustDST: adjustDST,\n dayOfWeek: dayOfWeek,\n setDayOfWeek: setDayOfWeek,\n getDate: getDate,\n isInDateRange: isInDateRange,\n isInTimeRange: isInTimeRange,\n isToday: isToday,\n nextDay: function (date) {\n return addDays(date, 1);\n },\n previousDay: function (date) {\n return addDays(date, -1);\n },\n toUtcTime: toUtcTime,\n MS_PER_DAY: MS_PER_DAY,\n MS_PER_HOUR: 60 * MS_PER_MINUTE,\n MS_PER_MINUTE: MS_PER_MINUTE,\n setTime: setTime,\n setHours: setHours,\n addDays: addDays,\n today: today,\n toInvariantTime: toInvariantTime,\n firstDayOfMonth: firstDayOfMonth,\n lastDayOfMonth: lastDayOfMonth,\n weekInYear: weekInYear,\n getMilliseconds: getMilliseconds\n };\n }();\n kendo.stripWhitespace = function (element) {\n if (document.createNodeIterator) {\n var iterator = document.createNodeIterator(element, NodeFilter.SHOW_TEXT, function (node) {\n return node.parentNode == element ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n }, false);\n while (iterator.nextNode()) {\n if (iterator.referenceNode && !iterator.referenceNode.textContent.trim()) {\n iterator.referenceNode.parentNode.removeChild(iterator.referenceNode);\n }\n }\n } else {\n for (var i = 0; i < element.childNodes.length; i++) {\n var child = element.childNodes[i];\n if (child.nodeType == 3 && !/\\S/.test(child.nodeValue)) {\n element.removeChild(child);\n i--;\n }\n if (child.nodeType == 1) {\n kendo.stripWhitespace(child);\n }\n }\n }\n };\n var animationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n setTimeout(callback, 1000 / 60);\n };\n kendo.animationFrame = function (callback) {\n animationFrame.call(window, callback);\n };\n var animationQueue = [];\n kendo.queueAnimation = function (callback) {\n animationQueue[animationQueue.length] = callback;\n if (animationQueue.length === 1) {\n kendo.runNextAnimation();\n }\n };\n kendo.runNextAnimation = function () {\n kendo.animationFrame(function () {\n if (animationQueue[0]) {\n animationQueue.shift()();\n if (animationQueue[0]) {\n kendo.runNextAnimation();\n }\n }\n });\n };\n kendo.parseQueryStringParams = function (url) {\n var queryString = url.split('?')[1] || '', params = {}, paramParts = queryString.split(/&|=/), length = paramParts.length, idx = 0;\n for (; idx < length; idx += 2) {\n if (paramParts[idx] !== '') {\n params[decodeURIComponent(paramParts[idx])] = decodeURIComponent(paramParts[idx + 1]);\n }\n }\n return params;\n };\n kendo.elementUnderCursor = function (e) {\n if (typeof e.x.client != 'undefined') {\n return document.elementFromPoint(e.x.client, e.y.client);\n }\n };\n kendo.wheelDeltaY = function (jQueryEvent) {\n var e = jQueryEvent.originalEvent, deltaY = e.wheelDeltaY, delta;\n if (e.wheelDelta) {\n if (deltaY === undefined || deltaY) {\n delta = e.wheelDelta;\n }\n } else if (e.detail && e.axis === e.VERTICAL_AXIS) {\n delta = -e.detail * 10;\n }\n return delta;\n };\n kendo.throttle = function (fn, delay) {\n var timeout;\n var lastExecTime = 0;\n if (!delay || delay <= 0) {\n return fn;\n }\n var throttled = function () {\n var that = this;\n var elapsed = +new Date() - lastExecTime;\n var args = arguments;\n function exec() {\n fn.apply(that, args);\n lastExecTime = +new Date();\n }\n if (!lastExecTime) {\n return exec();\n }\n if (timeout) {\n clearTimeout(timeout);\n }\n if (elapsed > delay) {\n exec();\n } else {\n timeout = setTimeout(exec, delay - elapsed);\n }\n };\n throttled.cancel = function () {\n clearTimeout(timeout);\n };\n return throttled;\n };\n kendo.caret = function (element, start, end) {\n var rangeElement;\n var isPosition = start !== undefined;\n if (end === undefined) {\n end = start;\n }\n if (element[0]) {\n element = element[0];\n }\n if (isPosition && element.disabled) {\n return;\n }\n try {\n if (element.selectionStart !== undefined) {\n if (isPosition) {\n element.focus();\n var mobile = support.mobileOS;\n if (mobile.wp || mobile.android) {\n setTimeout(function () {\n element.setSelectionRange(start, end);\n }, 0);\n } else {\n element.setSelectionRange(start, end);\n }\n } else {\n start = [\n element.selectionStart,\n element.selectionEnd\n ];\n }\n } else if (document.selection) {\n if ($(element).is(':visible')) {\n element.focus();\n }\n rangeElement = element.createTextRange();\n if (isPosition) {\n rangeElement.collapse(true);\n rangeElement.moveStart('character', start);\n rangeElement.moveEnd('character', end - start);\n rangeElement.select();\n } else {\n var rangeDuplicated = rangeElement.duplicate(), selectionStart, selectionEnd;\n rangeElement.moveToBookmark(document.selection.createRange().getBookmark());\n rangeDuplicated.setEndPoint('EndToStart', rangeElement);\n selectionStart = rangeDuplicated.text.length;\n selectionEnd = selectionStart + rangeElement.text.length;\n start = [\n selectionStart,\n selectionEnd\n ];\n }\n }\n } catch (e) {\n start = [];\n }\n return start;\n };\n kendo.compileMobileDirective = function (element, scope) {\n var angular = window.angular;\n element.attr('data-' + kendo.ns + 'role', element[0].tagName.toLowerCase().replace('kendo-mobile-', '').replace('-', ''));\n angular.element(element).injector().invoke([\n '$compile',\n function ($compile) {\n $compile(element)(scope);\n if (!/^\\$(digest|apply)$/.test(scope.$$phase)) {\n scope.$digest();\n }\n }\n ]);\n return kendo.widgetInstance(element, kendo.mobile.ui);\n };\n kendo.antiForgeryTokens = function () {\n var tokens = {}, csrf_token = $('meta[name=csrf-token],meta[name=_csrf]').attr('content'), csrf_param = $('meta[name=csrf-param],meta[name=_csrf_header]').attr('content');\n $('input[name^=\\'__RequestVerificationToken\\']').each(function () {\n tokens[this.name] = this.value;\n });\n if (csrf_param !== undefined && csrf_token !== undefined) {\n tokens[csrf_param] = csrf_token;\n }\n return tokens;\n };\n kendo.cycleForm = function (form) {\n var firstElement = form.find('input, .k-widget').first();\n var lastElement = form.find('button, .k-button').last();\n function focus(el) {\n var widget = kendo.widgetInstance(el);\n if (widget && widget.focus) {\n widget.focus();\n } else {\n el.focus();\n }\n }\n lastElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && !e.shiftKey) {\n e.preventDefault();\n focus(firstElement);\n }\n });\n firstElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && e.shiftKey) {\n e.preventDefault();\n focus(lastElement);\n }\n });\n };\n kendo.focusElement = function (element) {\n var scrollTopPositions = [];\n var scrollableParents = element.parentsUntil('body').filter(function (index, element) {\n var computedStyle = kendo.getComputedStyles(element, ['overflow']);\n return computedStyle.overflow !== 'visible';\n }).add(window);\n scrollableParents.each(function (index, parent) {\n scrollTopPositions[index] = $(parent).scrollTop();\n });\n try {\n element[0].setActive();\n } catch (e) {\n element[0].focus();\n }\n scrollableParents.each(function (index, parent) {\n $(parent).scrollTop(scrollTopPositions[index]);\n });\n };\n kendo.matchesMedia = function (mediaQuery) {\n var media = kendo._bootstrapToMedia(mediaQuery) || mediaQuery;\n return support.matchMedia && window.matchMedia(media).matches;\n };\n kendo._bootstrapToMedia = function (bootstrapMedia) {\n return {\n 'xs': '(max-width: 576px)',\n 'sm': '(min-width: 576px)',\n 'md': '(min-width: 768px)',\n 'lg': '(min-width: 992px)',\n 'xl': '(min-width: 1200px)'\n }[bootstrapMedia];\n };\n (function () {\n function postToProxy(dataURI, fileName, proxyURL, proxyTarget) {\n var form = $('
').attr({\n action: proxyURL,\n method: 'POST',\n target: proxyTarget\n });\n var data = kendo.antiForgeryTokens();\n data.fileName = fileName;\n var parts = dataURI.split(';base64,');\n data.contentType = parts[0].replace('data:', '');\n data.base64 = parts[1];\n for (var name in data) {\n if (data.hasOwnProperty(name)) {\n $('').attr({\n value: data[name],\n name: name,\n type: 'hidden'\n }).appendTo(form);\n }\n }\n form.appendTo('body').submit().remove();\n }\n var fileSaver = document.createElement('a');\n var downloadAttribute = 'download' in fileSaver && !kendo.support.browser.edge;\n function saveAsBlob(dataURI, fileName) {\n var blob = dataURI;\n if (typeof dataURI == 'string') {\n var parts = dataURI.split(';base64,');\n var contentType = parts[0];\n var base64 = atob(parts[1]);\n var array = new Uint8Array(base64.length);\n for (var idx = 0; idx < base64.length; idx++) {\n array[idx] = base64.charCodeAt(idx);\n }\n blob = new Blob([array.buffer], { type: contentType });\n }\n navigator.msSaveBlob(blob, fileName);\n }\n function saveAsDataURI(dataURI, fileName) {\n if (window.Blob && dataURI instanceof Blob) {\n dataURI = URL.createObjectURL(dataURI);\n }\n fileSaver.download = fileName;\n fileSaver.href = dataURI;\n var e = document.createEvent('MouseEvents');\n e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n fileSaver.dispatchEvent(e);\n setTimeout(function () {\n URL.revokeObjectURL(dataURI);\n });\n }\n kendo.saveAs = function (options) {\n var save = postToProxy;\n if (!options.forceProxy) {\n if (downloadAttribute) {\n save = saveAsDataURI;\n } else if (navigator.msSaveBlob) {\n save = saveAsBlob;\n }\n }\n save(options.dataURI, options.fileName, options.proxyURL, options.proxyTarget);\n };\n }());\n kendo.proxyModelSetters = function proxyModelSetters(data) {\n var observable = {};\n Object.keys(data || {}).forEach(function (property) {\n Object.defineProperty(observable, property, {\n get: function () {\n return data[property];\n },\n set: function (value) {\n data[property] = value;\n data.dirty = true;\n }\n });\n });\n return observable;\n };\n }(jQuery, window));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.fx', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'fx',\n name: 'Effects',\n category: 'framework',\n description: 'Required for animation effects in all Kendo UI widgets.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, fx = kendo.effects, each = $.each, extend = $.extend, proxy = $.proxy, support = kendo.support, browser = support.browser, transforms = support.transforms, transitions = support.transitions, scaleProperties = {\n scale: 0,\n scalex: 0,\n scaley: 0,\n scale3d: 0\n }, translateProperties = {\n translate: 0,\n translatex: 0,\n translatey: 0,\n translate3d: 0\n }, hasZoom = typeof document.documentElement.style.zoom !== 'undefined' && !transforms, matrix3dRegExp = /matrix3?d?\\s*\\(.*,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?/i, cssParamsRegExp = /^(-?[\\d\\.\\-]+)?[\\w\\s]*,?\\s*(-?[\\d\\.\\-]+)?[\\w\\s]*/i, translateXRegExp = /translatex?$/i, oldEffectsRegExp = /(zoom|fade|expand)(\\w+)/, singleEffectRegExp = /(zoom|fade|expand)/, unitRegExp = /[xy]$/i, transformProps = [\n 'perspective',\n 'rotate',\n 'rotatex',\n 'rotatey',\n 'rotatez',\n 'rotate3d',\n 'scale',\n 'scalex',\n 'scaley',\n 'scalez',\n 'scale3d',\n 'skew',\n 'skewx',\n 'skewy',\n 'translate',\n 'translatex',\n 'translatey',\n 'translatez',\n 'translate3d',\n 'matrix',\n 'matrix3d'\n ], transform2d = [\n 'rotate',\n 'scale',\n 'scalex',\n 'scaley',\n 'skew',\n 'skewx',\n 'skewy',\n 'translate',\n 'translatex',\n 'translatey',\n 'matrix'\n ], transform2units = {\n 'rotate': 'deg',\n scale: '',\n skew: 'px',\n translate: 'px'\n }, cssPrefix = transforms.css, round = Math.round, BLANK = '', PX = 'px', NONE = 'none', AUTO = 'auto', WIDTH = 'width', HEIGHT = 'height', HIDDEN = 'hidden', ORIGIN = 'origin', ABORT_ID = 'abortId', OVERFLOW = 'overflow', TRANSLATE = 'translate', POSITION = 'position', COMPLETE_CALLBACK = 'completeCallback', TRANSITION = cssPrefix + 'transition', TRANSFORM = cssPrefix + 'transform', BACKFACE = cssPrefix + 'backface-visibility', PERSPECTIVE = cssPrefix + 'perspective', DEFAULT_PERSPECTIVE = '1500px', TRANSFORM_PERSPECTIVE = 'perspective(' + DEFAULT_PERSPECTIVE + ')', directions = {\n left: {\n reverse: 'right',\n property: 'left',\n transition: 'translatex',\n vertical: false,\n modifier: -1\n },\n right: {\n reverse: 'left',\n property: 'left',\n transition: 'translatex',\n vertical: false,\n modifier: 1\n },\n down: {\n reverse: 'up',\n property: 'top',\n transition: 'translatey',\n vertical: true,\n modifier: 1\n },\n up: {\n reverse: 'down',\n property: 'top',\n transition: 'translatey',\n vertical: true,\n modifier: -1\n },\n top: { reverse: 'bottom' },\n bottom: { reverse: 'top' },\n 'in': {\n reverse: 'out',\n modifier: -1\n },\n out: {\n reverse: 'in',\n modifier: 1\n },\n vertical: { reverse: 'vertical' },\n horizontal: { reverse: 'horizontal' }\n };\n kendo.directions = directions;\n extend($.fn, {\n kendoStop: function (clearQueue, gotoEnd) {\n if (transitions) {\n return fx.stopQueue(this, clearQueue || false, gotoEnd || false);\n } else {\n return this.stop(clearQueue, gotoEnd);\n }\n }\n });\n if (transforms && !transitions) {\n each(transform2d, function (idx, value) {\n $.fn[value] = function (val) {\n if (typeof val == 'undefined') {\n return animationProperty(this, value);\n } else {\n var that = $(this)[0], transformValue = value + '(' + val + transform2units[value.replace(unitRegExp, '')] + ')';\n if (that.style.cssText.indexOf(TRANSFORM) == -1) {\n $(this).css(TRANSFORM, transformValue);\n } else {\n that.style.cssText = that.style.cssText.replace(new RegExp(value + '\\\\(.*?\\\\)', 'i'), transformValue);\n }\n }\n return this;\n };\n $.fx.step[value] = function (fx) {\n $(fx.elem)[value](fx.now);\n };\n });\n var curProxy = $.fx.prototype.cur;\n $.fx.prototype.cur = function () {\n if (transform2d.indexOf(this.prop) != -1) {\n return parseFloat($(this.elem)[this.prop]());\n }\n return curProxy.apply(this, arguments);\n };\n }\n kendo.toggleClass = function (element, classes, options, add) {\n if (classes) {\n classes = classes.split(' ');\n if (transitions) {\n options = extend({\n exclusive: 'all',\n duration: 400,\n ease: 'ease-out'\n }, options);\n element.css(TRANSITION, options.exclusive + ' ' + options.duration + 'ms ' + options.ease);\n setTimeout(function () {\n element.css(TRANSITION, '').css(HEIGHT);\n }, options.duration);\n }\n each(classes, function (idx, value) {\n element.toggleClass(value, add);\n });\n }\n return element;\n };\n kendo.parseEffects = function (input, mirror) {\n var effects = {};\n if (typeof input === 'string') {\n each(input.split(' '), function (idx, value) {\n var redirectedEffect = !singleEffectRegExp.test(value), resolved = value.replace(oldEffectsRegExp, function (match, $1, $2) {\n return $1 + ':' + $2.toLowerCase();\n }), effect = resolved.split(':'), direction = effect[1], effectBody = {};\n if (effect.length > 1) {\n effectBody.direction = mirror && redirectedEffect ? directions[direction].reverse : direction;\n }\n effects[effect[0]] = effectBody;\n });\n } else {\n each(input, function (idx) {\n var direction = this.direction;\n if (direction && mirror && !singleEffectRegExp.test(idx)) {\n this.direction = directions[direction].reverse;\n }\n effects[idx] = this;\n });\n }\n return effects;\n };\n function parseInteger(value) {\n return parseInt(value, 10);\n }\n function parseCSS(element, property) {\n return parseInteger(element.css(property));\n }\n function keys(obj) {\n var acc = [];\n for (var propertyName in obj) {\n acc.push(propertyName);\n }\n return acc;\n }\n function strip3DTransforms(properties) {\n for (var key in properties) {\n if (transformProps.indexOf(key) != -1 && transform2d.indexOf(key) == -1) {\n delete properties[key];\n }\n }\n return properties;\n }\n function normalizeCSS(element, properties) {\n var transformation = [], cssValues = {}, lowerKey, key, value, isTransformed;\n for (key in properties) {\n lowerKey = key.toLowerCase();\n isTransformed = transforms && transformProps.indexOf(lowerKey) != -1;\n if (!support.hasHW3D && isTransformed && transform2d.indexOf(lowerKey) == -1) {\n delete properties[key];\n } else {\n value = properties[key];\n if (isTransformed) {\n transformation.push(key + '(' + value + ')');\n } else {\n cssValues[key] = value;\n }\n }\n }\n if (transformation.length) {\n cssValues[TRANSFORM] = transformation.join(' ');\n }\n return cssValues;\n }\n if (transitions) {\n extend(fx, {\n transition: function (element, properties, options) {\n var css, delay = 0, oldKeys = element.data('keys') || [], timeoutID;\n options = extend({\n duration: 200,\n ease: 'ease-out',\n complete: null,\n exclusive: 'all'\n }, options);\n var stopTransitionCalled = false;\n var stopTransition = function () {\n if (!stopTransitionCalled) {\n stopTransitionCalled = true;\n if (timeoutID) {\n clearTimeout(timeoutID);\n timeoutID = null;\n }\n element.removeData(ABORT_ID).dequeue().css(TRANSITION, '').css(TRANSITION);\n options.complete.call(element);\n }\n };\n options.duration = $.fx ? $.fx.speeds[options.duration] || options.duration : options.duration;\n css = normalizeCSS(element, properties);\n $.merge(oldKeys, keys(css));\n element.data('keys', $.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 ], 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', 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) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir\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 };\n });\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 if (isEmptyObject(descriptor) || !this.data.length) {\n return new Query([]);\n }\n var field = descriptor.field, sorted = 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 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 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 query = new Query(data), group = options.group, sort = normalizeGroup(group || []).concat(normalizeSort(options.sort || [])), 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 (skip !== undefined && take !== undefined) {\n query = query.range(skip, take);\n }\n if (group) {\n query = query.group(group, data);\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 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]) : 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) {\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().then(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(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 = normalizeGroup(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 result, range;\n for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\n range = this._ranges[idx];\n this._eachItem(range.data, function (items) {\n result = removeModel(items, model);\n });\n if (result) {\n break;\n }\n }\n that._updateRangesLength();\n },\n _insertModelInRange: function (index, model) {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var range;\n var i;\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n if (range.start <= index && range.end >= index) {\n if (!that._getByUid(model.uid, range.data)) {\n if (that._isServerGrouped()) {\n range.data.splice(index, 0, that._wrapInEmptyGroup(model));\n } else {\n range.data.splice(index, 0, model);\n }\n }\n break;\n }\n }\n that._updateRangesLength();\n },\n _updateRangesLength: function () {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var mismatchFound = false;\n var mismatchLength = 0;\n var lengthDifference = 0;\n var range;\n var i;\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n lengthDifference = that._flatData(range.data, true).length - math.abs(range.end - range.start);\n if (!mismatchFound && lengthDifference !== 0) {\n mismatchFound = true;\n mismatchLength = lengthDifference;\n range.end += mismatchLength;\n continue;\n }\n if (mismatchFound) {\n range.start += mismatchLength;\n range.end += mismatchLength;\n }\n }\n }\n });\n var Transport = {};\n Transport.create = function (options, data, dataSource) {\n var transport, transportOptions = options.transport ? $.extend({}, options.transport) : null;\n if (transportOptions) {\n transportOptions.read = typeof transportOptions.read === STRING ? { url: transportOptions.read } : transportOptions.read;\n if (options.type === 'jsdo') {\n transportOptions.dataSource = dataSource;\n }\n if (options.type) {\n kendo.data.transports = kendo.data.transports || {};\n kendo.data.schemas = kendo.data.schemas || {};\n if (!kendo.data.transports[options.type]) {\n kendo.logToConsole('Unknown DataSource transport type \\'' + options.type + '\\'.\\nVerify that registration scripts for this type are included after Kendo UI on the page.', 'warn');\n } else if (!isPlainObject(kendo.data.transports[options.type])) {\n transport = new kendo.data.transports[options.type](extend(transportOptions, { data: data }));\n } else {\n transportOptions = extend(true, {}, kendo.data.transports[options.type], transportOptions);\n }\n options.schema = extend(true, {}, kendo.data.schemas[options.type], options.schema);\n }\n if (!transport) {\n transport = isFunction(transportOptions.read) ? transportOptions : new RemoteTransport(transportOptions);\n }\n } else {\n transport = new LocalTransport({ data: options.data || [] });\n }\n return transport;\n };\n DataSource.create = function (options) {\n if (isArray(options) || options instanceof ObservableArray) {\n options = { data: options };\n }\n var dataSource = options || {}, data = dataSource.data, fields = dataSource.fields, table = dataSource.table, select = dataSource.select, idx, length, model = {}, field;\n if (!data && fields && !dataSource.transport) {\n if (table) {\n data = inferTable(table, fields);\n } else if (select) {\n data = inferSelect(select, fields);\n if (dataSource.group === undefined && data[0] && data[0].optgroup !== undefined) {\n dataSource.group = 'optgroup';\n }\n }\n }\n if (kendo.data.Model && fields && (!dataSource.schema || !dataSource.schema.model)) {\n for (idx = 0, length = fields.length; idx < length; idx++) {\n field = fields[idx];\n if (field.type) {\n model[field.field] = field;\n }\n }\n if (!isEmptyObject(model)) {\n dataSource.schema = extend(true, dataSource.schema, { model: { fields: model } });\n }\n }\n dataSource.data = data;\n select = null;\n dataSource.select = null;\n table = null;\n dataSource.table = null;\n return dataSource instanceof DataSource ? dataSource : new DataSource(dataSource);\n };\n function inferSelect(select, fields) {\n select = $(select)[0];\n var options = select.options;\n var firstField = fields[0];\n var secondField = fields[1];\n var data = [];\n var idx, length;\n var optgroup;\n var option;\n var record;\n var value;\n for (idx = 0, length = options.length; idx < length; idx++) {\n record = {};\n option = options[idx];\n optgroup = option.parentNode;\n if (optgroup === select) {\n optgroup = null;\n }\n if (option.disabled || optgroup && optgroup.disabled) {\n continue;\n }\n if (optgroup) {\n record.optgroup = optgroup.label;\n }\n record[firstField.field] = option.text;\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n record[secondField.field] = value;\n data.push(record);\n }\n return data;\n }\n function inferTable(table, fields) {\n var tbody = $(table)[0].tBodies[0], rows = tbody ? tbody.rows : [], idx, length, fieldIndex, fieldCount = fields.length, data = [], cells, record, cell, empty;\n for (idx = 0, length = rows.length; idx < length; idx++) {\n record = {};\n empty = true;\n cells = rows[idx].cells;\n for (fieldIndex = 0; fieldIndex < fieldCount; fieldIndex++) {\n cell = cells[fieldIndex];\n if (cell.nodeName.toLowerCase() !== 'th') {\n empty = false;\n record[fields[fieldIndex].field] = cell.innerHTML;\n }\n }\n if (!empty) {\n data.push(record);\n }\n }\n return data;\n }\n var Node = Model.define({\n idField: 'id',\n init: function (value) {\n var that = this, hasChildren = that.hasChildren || value && value.hasChildren, childrenField = 'items', childrenOptions = {};\n kendo.data.Model.fn.init.call(that, value);\n if (typeof that.children === STRING) {\n childrenField = that.children;\n }\n childrenOptions = {\n schema: {\n data: childrenField,\n model: {\n hasChildren: hasChildren,\n id: that.idField,\n fields: that.fields\n }\n }\n };\n if (typeof that.children !== STRING) {\n extend(childrenOptions, that.children);\n }\n childrenOptions.data = value;\n if (!hasChildren) {\n hasChildren = childrenOptions.schema.data;\n }\n if (typeof hasChildren === STRING) {\n hasChildren = kendo.getter(hasChildren);\n }\n if (isFunction(hasChildren)) {\n var hasChildrenObject = hasChildren.call(that, that);\n if (hasChildrenObject && hasChildrenObject.length === 0) {\n that.hasChildren = false;\n } else {\n that.hasChildren = !!hasChildrenObject;\n }\n }\n that._childrenOptions = childrenOptions;\n if (that.hasChildren) {\n that._initChildren();\n }\n that._loaded = !!(value && value._loaded);\n },\n _initChildren: function () {\n var that = this;\n var children, transport, parameterMap;\n if (!(that.children instanceof HierarchicalDataSource)) {\n children = that.children = new HierarchicalDataSource(that._childrenOptions);\n transport = children.transport;\n parameterMap = transport.parameterMap;\n transport.parameterMap = function (data, type) {\n data[that.idField || 'id'] = that.id;\n if (parameterMap) {\n data = parameterMap(data, type);\n }\n return data;\n };\n children.parent = function () {\n return that;\n };\n children.bind(CHANGE, function (e) {\n e.node = e.node || that;\n that.trigger(CHANGE, e);\n });\n children.bind(ERROR, function (e) {\n var collection = that.parent();\n if (collection) {\n e.node = e.node || that;\n collection.trigger(ERROR, e);\n }\n });\n that._updateChildrenField();\n }\n },\n append: function (model) {\n this._initChildren();\n this.loaded(true);\n this.children.add(model);\n },\n hasChildren: false,\n level: function () {\n var parentNode = this.parentNode(), level = 0;\n while (parentNode && parentNode.parentNode) {\n level++;\n parentNode = parentNode.parentNode ? parentNode.parentNode() : null;\n }\n return level;\n },\n _updateChildrenField: function () {\n var fieldName = this._childrenOptions.schema.data;\n this[fieldName || 'items'] = this.children.data();\n },\n _childrenLoaded: function () {\n this._loaded = true;\n this._updateChildrenField();\n },\n load: function () {\n var options = {};\n var method = '_query';\n var children, promise;\n if (this.hasChildren) {\n this._initChildren();\n children = this.children;\n options[this.idField || 'id'] = this.id;\n if (!this._loaded) {\n children._data = undefined;\n method = 'read';\n }\n children.one(CHANGE, proxy(this._childrenLoaded, this));\n if (this._matchFilter) {\n options.filter = {\n field: '_matchFilter',\n operator: 'eq',\n value: true\n };\n }\n promise = children[method](options);\n } else {\n this.loaded(true);\n }\n return promise || $.Deferred().resolve().promise();\n },\n parentNode: function () {\n var array = this.parent();\n return array.parent();\n },\n loaded: function (value) {\n if (value !== undefined) {\n this._loaded = value;\n } else {\n return this._loaded;\n }\n },\n shouldSerialize: function (field) {\n return Model.fn.shouldSerialize.call(this, field) && field !== 'children' && field !== '_loaded' && field !== 'hasChildren' && field !== '_childrenOptions';\n }\n });\n function dataMethod(name) {\n return function () {\n var data = this._data, result = DataSource.fn[name].apply(this, slice.call(arguments));\n if (this._data != data) {\n this._attachBubbleHandlers();\n }\n return result;\n };\n }\n var HierarchicalDataSource = DataSource.extend({\n init: function (options) {\n var node = Node.define({ children: options });\n if (options.filter && !options.serverFiltering) {\n this._hierarchicalFilter = options.filter;\n options.filter = null;\n }\n DataSource.fn.init.call(this, extend(true, {}, {\n schema: {\n modelBase: node,\n model: node\n }\n }, options));\n this._attachBubbleHandlers();\n },\n _attachBubbleHandlers: function () {\n var that = this;\n that._data.bind(ERROR, function (e) {\n that.trigger(ERROR, e);\n });\n },\n read: function (data) {\n var result = DataSource.fn.read.call(this, data);\n if (this._hierarchicalFilter) {\n if (this._data && this._data.length > 0) {\n this.filter(this._hierarchicalFilter);\n } else {\n this.options.filter = this._hierarchicalFilter;\n this._filter = normalizeFilter(this.options.filter);\n this._hierarchicalFilter = null;\n }\n }\n return result;\n },\n remove: function (node) {\n var parentNode = node.parentNode(), dataSource = this, result;\n if (parentNode && parentNode._initChildren) {\n dataSource = parentNode.children;\n }\n result = DataSource.fn.remove.call(dataSource, node);\n if (parentNode && !dataSource.data().length) {\n parentNode.hasChildren = false;\n }\n return result;\n },\n success: dataMethod('success'),\n data: dataMethod('data'),\n insert: function (index, model) {\n var parentNode = this.parent();\n if (parentNode && parentNode._initChildren) {\n parentNode.hasChildren = true;\n parentNode._initChildren();\n }\n return DataSource.fn.insert.call(this, index, model);\n },\n filter: function (val) {\n if (val === undefined) {\n return this._filter;\n }\n if (!this.options.serverFiltering && this._markHierarchicalQuery(val)) {\n val = {\n logic: 'or',\n filters: [\n val,\n {\n field: '_matchFilter',\n operator: 'equals',\n value: true\n }\n ]\n };\n }\n this.trigger('reset');\n this._query({\n filter: val,\n page: 1\n });\n },\n _markHierarchicalQuery: function (expressions) {\n var compiled;\n var predicate;\n var fields;\n var operators;\n var filter;\n 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 inferList(list, fields) {\n var items = $(list).children(), idx, length, data = [], record, textField = fields[0].field, urlField = fields[1] && fields[1].field, spriteCssClassField = fields[2] && fields[2].field, imageUrlField = fields[3] && fields[3].field, item, id, textChild, className, children;\n function elements(collection, tagName) {\n return collection.filter(tagName).add(collection.find(tagName));\n }\n for (idx = 0, length = items.length; idx < length; idx++) {\n record = { _loaded: true };\n item = items.eq(idx);\n textChild = item[0].firstChild;\n children = item.children();\n list = children.filter('ul');\n children = children.filter(':not(ul)');\n id = item.attr('data-id');\n if (id) {\n record.id = id;\n }\n if (textChild) {\n record[textField] = textChild.nodeType == 3 ? textChild.nodeValue : children.text();\n }\n if (urlField) {\n record[urlField] = elements(children, 'a').attr('href');\n }\n if (imageUrlField) {\n record[imageUrlField] = elements(children, 'img').attr('src');\n }\n if (spriteCssClassField) {\n className = elements(children, '.k-sprite').prop('className');\n record[spriteCssClassField] = className && $.trim(className.replace('k-sprite', ''));\n }\n if (list.length) {\n record.items = inferList(list.eq(0), fields);\n }\n if (item.attr('data-hasChildren') == 'true') {\n record.hasChildren = true;\n }\n data.push(record);\n }\n return data;\n }\n HierarchicalDataSource.create = function (options) {\n options = options && options.push ? { data: options } : options;\n var dataSource = options || {}, data = dataSource.data, fields = dataSource.fields, list = dataSource.list;\n if (data && data._dataSource) {\n return data._dataSource;\n }\n if (!data && fields && !dataSource.transport) {\n if (list) {\n data = inferList(list, fields);\n }\n }\n dataSource.data = data;\n return dataSource instanceof HierarchicalDataSource ? dataSource : new HierarchicalDataSource(dataSource);\n };\n var Buffer = kendo.Observable.extend({\n init: function (dataSource, viewSize, disablePrefetch) {\n kendo.Observable.fn.init.call(this);\n this._prefetching = false;\n this.dataSource = dataSource;\n this.prefetch = !disablePrefetch;\n var buffer = this;\n dataSource.bind('change', function () {\n buffer._change();\n });\n dataSource.bind('reset', function () {\n buffer._reset();\n });\n this._syncWithDataSource();\n this.setViewSize(viewSize);\n },\n setViewSize: function (viewSize) {\n this.viewSize = viewSize;\n this._recalculate();\n },\n at: function (index) {\n var pageSize = this.pageSize, itemPresent = true;\n if (index >= this.total()) {\n this.trigger('endreached', { index: index });\n return null;\n }\n if (!this.useRanges) {\n return this.dataSource.view()[index];\n }\n if (this.useRanges) {\n if (index < this.dataOffset || index >= this.skip + pageSize) {\n itemPresent = this.range(Math.floor(index / pageSize) * pageSize);\n }\n if (index === this.prefetchThreshold) {\n this._prefetch();\n }\n if (index === this.midPageThreshold) {\n this.range(this.nextMidRange, true);\n } else if (index === this.nextPageThreshold) {\n this.range(this.nextFullRange);\n } else if (index === this.pullBackThreshold) {\n if (this.offset === this.skip) {\n this.range(this.previousMidRange);\n } else {\n this.range(this.previousFullRange);\n }\n }\n if (itemPresent) {\n return this.dataSource.at(index - this.dataOffset);\n } else {\n this.trigger('endreached', { index: index });\n return null;\n }\n }\n },\n indexOf: function (item) {\n return this.dataSource.data().indexOf(item) + this.dataOffset;\n },\n total: function () {\n return parseInt(this.dataSource.total(), 10);\n },\n next: function () {\n var buffer = this, pageSize = buffer.pageSize, offset = buffer.skip - buffer.viewSize + pageSize, pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize;\n this.offset = offset;\n this.dataSource.prefetch(pageSkip, pageSize, function () {\n buffer._goToRange(offset, true);\n });\n },\n range: function (offset, nextRange) {\n if (this.offset === offset) {\n return true;\n }\n var buffer = this, pageSize = this.pageSize, pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize, dataSource = this.dataSource;\n if (nextRange) {\n pageSkip += pageSize;\n }\n if (dataSource.inRange(offset, pageSize)) {\n this.offset = offset;\n this._recalculate();\n this._goToRange(offset);\n return true;\n } else if (this.prefetch) {\n dataSource.prefetch(pageSkip, pageSize, function () {\n buffer.offset = offset;\n buffer._recalculate();\n buffer._goToRange(offset, true);\n });\n return false;\n }\n return true;\n },\n syncDataSource: function () {\n var offset = this.offset;\n this.offset = null;\n this.range(offset);\n },\n destroy: function () {\n this.unbind();\n },\n _prefetch: function () {\n var buffer = this, pageSize = this.pageSize, prefetchOffset = this.skip + pageSize, dataSource = this.dataSource;\n if (!dataSource.inRange(prefetchOffset, pageSize) && !this._prefetching && this.prefetch) {\n this._prefetching = true;\n this.trigger('prefetching', {\n skip: prefetchOffset,\n take: pageSize\n });\n dataSource.prefetch(prefetchOffset, pageSize, function () {\n buffer._prefetching = false;\n buffer.trigger('prefetched', {\n skip: prefetchOffset,\n take: pageSize\n });\n });\n }\n },\n _goToRange: function (offset, expanding) {\n if (this.offset !== offset) {\n return;\n }\n this.dataOffset = offset;\n this._expanding = expanding;\n this.dataSource.range(offset, this.pageSize);\n this.dataSource.enableRequestsInProgress();\n },\n _reset: function () {\n this._syncPending = true;\n },\n _change: function () {\n var dataSource = this.dataSource;\n this.length = this.useRanges ? dataSource.lastRange().end : dataSource.view().length;\n if (this._syncPending) {\n this._syncWithDataSource();\n this._recalculate();\n this._syncPending = false;\n this.trigger('reset', { offset: this.offset });\n }\n this.trigger('resize');\n if (this._expanding) {\n this.trigger('expand');\n }\n delete this._expanding;\n },\n _syncWithDataSource: function () {\n var dataSource = this.dataSource;\n this._firstItemUid = dataSource.firstItemUid();\n this.dataOffset = this.offset = dataSource.skip() || 0;\n this.pageSize = dataSource.pageSize();\n this.useRanges = dataSource.options.serverPaging;\n },\n _recalculate: function () {\n var pageSize = this.pageSize, offset = this.offset, viewSize = this.viewSize, skip = Math.ceil(offset / pageSize) * pageSize;\n this.skip = skip;\n this.midPageThreshold = skip + pageSize - 1;\n this.nextPageThreshold = skip + viewSize - 1;\n this.prefetchThreshold = skip + Math.floor(pageSize / 3 * 2);\n this.pullBackThreshold = this.offset - 1;\n this.nextMidRange = skip + pageSize - viewSize;\n this.nextFullRange = skip;\n this.previousMidRange = offset - viewSize;\n this.previousFullRange = skip - pageSize;\n }\n });\n var BatchBuffer = kendo.Observable.extend({\n init: function (dataSource, batchSize) {\n var batchBuffer = this;\n kendo.Observable.fn.init.call(batchBuffer);\n this.dataSource = dataSource;\n this.batchSize = batchSize;\n this._total = 0;\n this.buffer = new Buffer(dataSource, batchSize * 3);\n this.buffer.bind({\n 'endreached': function (e) {\n batchBuffer.trigger('endreached', { index: e.index });\n },\n 'prefetching': function (e) {\n batchBuffer.trigger('prefetching', {\n skip: e.skip,\n take: e.take\n });\n },\n 'prefetched': function (e) {\n batchBuffer.trigger('prefetched', {\n skip: e.skip,\n take: e.take\n });\n },\n 'reset': function () {\n batchBuffer._total = 0;\n batchBuffer.trigger('reset');\n },\n 'resize': function () {\n batchBuffer._total = Math.ceil(this.length / batchBuffer.batchSize);\n batchBuffer.trigger('resize', {\n total: batchBuffer.total(),\n offset: this.offset\n });\n }\n });\n },\n syncDataSource: function () {\n this.buffer.syncDataSource();\n },\n at: function (index) {\n var buffer = this.buffer, skip = index * this.batchSize, take = this.batchSize, view = [], item;\n if (buffer.offset > skip) {\n buffer.at(buffer.offset - 1);\n }\n for (var i = 0; i < take; i++) {\n item = buffer.at(skip + i);\n if (item === null) {\n break;\n }\n view.push(item);\n }\n return view;\n },\n total: function () {\n return this._total;\n },\n destroy: function () {\n this.buffer.destroy();\n this.unbind();\n }\n });\n extend(true, kendo.data, {\n readers: { json: DataReader },\n Query: Query,\n DataSource: DataSource,\n HierarchicalDataSource: HierarchicalDataSource,\n Node: Node,\n ObservableObject: ObservableObject,\n ObservableArray: ObservableArray,\n LazyObservableArray: LazyObservableArray,\n LocalTransport: LocalTransport,\n RemoteTransport: RemoteTransport,\n Cache: Cache,\n DataReader: DataReader,\n Model: Model,\n Buffer: Buffer,\n BatchBuffer: BatchBuffer\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.binder', [\n 'kendo.core',\n 'kendo.data'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'binder',\n name: 'MVVM',\n category: 'framework',\n description: 'Model View ViewModel (MVVM) is a design pattern which helps developers separate the Model (the data) from the View (the UI).',\n depends: [\n 'core',\n 'data'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Observable = kendo.Observable, ObservableObject = kendo.data.ObservableObject, ObservableArray = kendo.data.ObservableArray, toString = {}.toString, binders = {}, Class = kendo.Class, proxy = $.proxy, VALUE = 'value', SOURCE = 'source', EVENTS = 'events', CHECKED = 'checked', CSS = 'css', deleteExpando = true, FUNCTION = 'function', CHANGE = 'change';\n (function () {\n var a = document.createElement('a');\n try {\n delete a.test;\n } catch (e) {\n deleteExpando = false;\n }\n }());\n var Binding = Observable.extend({\n init: function (parents, path) {\n var that = this;\n Observable.fn.init.call(that);\n that.source = parents[0];\n that.parents = parents;\n that.path = path;\n that.dependencies = {};\n that.dependencies[path] = true;\n that.observable = that.source instanceof Observable;\n that._access = function (e) {\n that.dependencies[e.field] = true;\n };\n if (that.observable) {\n that._change = function (e) {\n that.change(e);\n };\n that.source.bind(CHANGE, that._change);\n }\n },\n _parents: function () {\n var parents = this.parents;\n var value = this.get();\n if (value && typeof value.parent == 'function') {\n var parent = value.parent();\n if ($.inArray(parent, parents) < 0) {\n parents = [parent].concat(parents);\n }\n }\n return parents;\n },\n change: function (e) {\n var dependency, ch, field = e.field, that = this;\n if (that.path === 'this') {\n that.trigger(CHANGE, e);\n } else {\n for (dependency in that.dependencies) {\n if (dependency.indexOf(field) === 0) {\n ch = dependency.charAt(field.length);\n if (!ch || ch === '.' || ch === '[') {\n that.trigger(CHANGE, e);\n break;\n }\n }\n }\n }\n },\n start: function (source) {\n source.bind('get', this._access);\n },\n stop: function (source) {\n source.unbind('get', this._access);\n },\n get: function () {\n var that = this, source = that.source, index = 0, path = that.path, result = source;\n if (!that.observable) {\n return result;\n }\n that.start(that.source);\n result = source.get(path);\n while (result === undefined && source) {\n source = that.parents[++index];\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n if (result === undefined) {\n source = that.source;\n while (result === undefined && source) {\n source = source.parent();\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n }\n if (typeof result === 'function') {\n index = path.lastIndexOf('.');\n if (index > 0) {\n source = source.get(path.substring(0, index));\n }\n that.start(source);\n if (source !== that.source) {\n result = result.call(source, that.source);\n } else {\n result = result.call(source);\n }\n that.stop(source);\n }\n if (source && source !== that.source) {\n that.currentSource = source;\n source.unbind(CHANGE, that._change).bind(CHANGE, that._change);\n }\n that.stop(that.source);\n return result;\n },\n set: function (value) {\n var source = this.currentSource || this.source;\n var field = kendo.getter(this.path)(source);\n if (typeof field === 'function') {\n if (source !== this.source) {\n field.call(source, this.source, value);\n } else {\n field.call(source, value);\n }\n } else {\n source.set(this.path, value);\n }\n },\n destroy: function () {\n if (this.observable) {\n this.source.unbind(CHANGE, this._change);\n if (this.currentSource) {\n this.currentSource.unbind(CHANGE, this._change);\n }\n }\n this.unbind();\n }\n });\n var EventBinding = Binding.extend({\n get: function () {\n var source = this.source, path = this.path, index = 0, handler;\n handler = source.get(path);\n while (!handler && source) {\n source = this.parents[++index];\n if (source instanceof ObservableObject) {\n handler = source.get(path);\n }\n }\n return proxy(handler, source);\n }\n });\n var TemplateBinding = Binding.extend({\n init: function (source, path, template) {\n var that = this;\n Binding.fn.init.call(that, source, path);\n that.template = template;\n },\n render: function (value) {\n var html;\n this.start(this.source);\n html = kendo.render(this.template, value);\n this.stop(this.source);\n return html;\n }\n });\n var Binder = Class.extend({\n init: function (element, bindings, options) {\n this.element = element;\n this.bindings = bindings;\n this.options = options;\n },\n bind: function (binding, attribute) {\n var that = this;\n binding = attribute ? binding[attribute] : binding;\n binding.bind(CHANGE, function (e) {\n that.refresh(attribute || e);\n });\n that.refresh(attribute);\n },\n destroy: function () {\n }\n });\n var TypedBinder = Binder.extend({\n dataType: function () {\n var dataType = this.element.getAttribute('data-type') || this.element.type || 'text';\n return dataType.toLowerCase();\n },\n parsedValue: function () {\n return this._parseValue(this.element.value, this.dataType());\n },\n _parseValue: function (value, dataType) {\n if (dataType == 'date') {\n value = kendo.parseDate(value, 'yyyy-MM-dd');\n } else if (dataType == 'datetime-local') {\n value = kendo.parseDate(value, [\n 'yyyy-MM-ddTHH:mm:ss',\n 'yyyy-MM-ddTHH:mm'\n ]);\n } else if (dataType == 'number') {\n value = kendo.parseFloat(value);\n } else if (dataType == 'boolean') {\n value = value.toLowerCase();\n if (kendo.parseFloat(value) !== null) {\n value = Boolean(kendo.parseFloat(value));\n } else {\n value = value.toLowerCase() === 'true';\n }\n }\n return value;\n }\n });\n binders.attr = Binder.extend({\n refresh: function (key) {\n this.element.setAttribute(key, this.bindings.attr[key].get());\n }\n });\n binders.css = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.classes = {};\n },\n refresh: function (className) {\n var element = $(this.element), binding = this.bindings.css[className], hasClass = this.classes[className] = binding.get();\n if (hasClass) {\n element.addClass(className);\n } else {\n element.removeClass(className);\n }\n }\n });\n binders.style = Binder.extend({\n refresh: function (key) {\n this.element.style[key] = this.bindings.style[key].get() || '';\n }\n });\n binders.enabled = Binder.extend({\n refresh: function () {\n if (this.bindings.enabled.get()) {\n this.element.removeAttribute('disabled');\n } else {\n this.element.setAttribute('disabled', 'disabled');\n }\n }\n });\n binders.readonly = Binder.extend({\n refresh: function () {\n if (this.bindings.readonly.get()) {\n this.element.setAttribute('readonly', 'readonly');\n } else {\n this.element.removeAttribute('readonly');\n }\n }\n });\n binders.disabled = Binder.extend({\n refresh: function () {\n if (this.bindings.disabled.get()) {\n this.element.setAttribute('disabled', 'disabled');\n } else {\n this.element.removeAttribute('disabled');\n }\n }\n });\n binders.events = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.handlers = {};\n },\n refresh: function (key) {\n var element = $(this.element), binding = this.bindings.events[key], handler = this.handlers[key];\n if (handler) {\n element.off(key, handler);\n }\n handler = this.handlers[key] = binding.get();\n element.on(key, binding.source, handler);\n },\n destroy: function () {\n var element = $(this.element), handler;\n for (handler in this.handlers) {\n element.off(handler, this.handlers[handler]);\n }\n }\n });\n binders.text = Binder.extend({\n refresh: function () {\n var text = this.bindings.text.get();\n var dataFormat = this.element.getAttribute('data-format') || '';\n if (text == null) {\n text = '';\n }\n $(this.element).text(kendo.toString(text, dataFormat));\n }\n });\n binders.visible = Binder.extend({\n refresh: function () {\n if (this.bindings.visible.get()) {\n this.element.style.display = '';\n } else {\n this.element.style.display = 'none';\n }\n }\n });\n binders.invisible = Binder.extend({\n refresh: function () {\n if (!this.bindings.invisible.get()) {\n this.element.style.display = '';\n } else {\n this.element.style.display = 'none';\n }\n }\n });\n binders.html = Binder.extend({\n refresh: function () {\n this.element.innerHTML = this.bindings.html.get();\n }\n });\n binders.value = TypedBinder.extend({\n init: function (element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = proxy(this.change, this);\n this.eventName = options.valueUpdate || CHANGE;\n $(this.element).on(this.eventName, this._change);\n this._initChange = false;\n },\n change: function () {\n this._initChange = this.eventName != CHANGE;\n this.bindings[VALUE].set(this.parsedValue());\n this._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var value = this.bindings[VALUE].get();\n if (value == null) {\n value = '';\n }\n var type = this.dataType();\n if (type == 'date') {\n value = kendo.toString(value, 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(value, 'yyyy-MM-ddTHH:mm:ss');\n }\n this.element.value = value;\n }\n this._initChange = false;\n },\n destroy: function () {\n $(this.element).off(this.eventName, this._change);\n }\n });\n binders.source = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n var source = this.bindings.source.get();\n if (source instanceof kendo.data.DataSource && options.autoBind !== false) {\n source.fetch();\n }\n },\n refresh: function (e) {\n var that = this, source = that.bindings.source.get();\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n if (e.action == 'add') {\n that.add(e.index, e.items);\n } else if (e.action == 'remove') {\n that.remove(e.index, e.items);\n } else if (e.action != 'itemchange') {\n that.render();\n }\n } else {\n that.render();\n }\n },\n container: function () {\n var element = this.element;\n if (element.nodeName.toLowerCase() == 'table') {\n if (!element.tBodies[0]) {\n element.appendChild(document.createElement('tbody'));\n }\n element = element.tBodies[0];\n }\n return element;\n },\n template: function () {\n var options = this.options, template = options.template, nodeName = this.container().nodeName.toLowerCase();\n if (!template) {\n if (nodeName == 'select') {\n if (options.valueField || options.textField) {\n template = kendo.format('', options.valueField || options.textField, options.textField || options.valueField);\n } else {\n template = '';\n }\n } else if (nodeName == 'tbody') {\n template = '#:data#';\n } else if (nodeName == 'ul' || nodeName == 'ol') {\n template = '
  • #:data#
  • ';\n } else {\n template = '#:data#';\n }\n template = kendo.template(template);\n }\n return template;\n },\n add: function (index, items) {\n var element = this.container(), parents, idx, length, child, clone = element.cloneNode(false), reference = element.children[index];\n $(clone).html(kendo.render(this.template(), items));\n if (clone.children.length) {\n parents = this.bindings.source._parents();\n for (idx = 0, length = items.length; idx < length; idx++) {\n child = clone.children[0];\n element.insertBefore(child, reference || null);\n bindElement(child, items[idx], this.options.roles, [items[idx]].concat(parents));\n }\n }\n },\n remove: function (index, items) {\n var idx, element = this.container();\n for (idx = 0; idx < items.length; idx++) {\n var child = element.children[index];\n unbindElementTree(child, true);\n if (child.parentNode == element) {\n element.removeChild(child);\n }\n }\n },\n render: function () {\n var source = this.bindings.source.get(), parents, idx, length, element = this.container(), template = this.template();\n if (source == null) {\n return;\n }\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n if (!(source instanceof ObservableArray) && toString.call(source) !== '[object Array]') {\n source = [source];\n }\n if (this.bindings.template) {\n unbindElementChildren(element, true);\n $(element).html(this.bindings.template.render(source));\n if (element.children.length) {\n parents = this.bindings.source._parents();\n for (idx = 0, length = source.length; idx < length; idx++) {\n bindElement(element.children[idx], source[idx], this.options.roles, [source[idx]].concat(parents));\n }\n }\n } else {\n $(element).html(kendo.render(template, source));\n }\n }\n });\n binders.input = {\n checked: TypedBinder.extend({\n init: function (element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = proxy(this.change, this);\n $(this.element).change(this._change);\n },\n change: function () {\n var element = this.element;\n var value = this.value();\n if (element.type == 'radio') {\n value = this.parsedValue();\n this.bindings[CHECKED].set(value);\n } else if (element.type == 'checkbox') {\n var source = this.bindings[CHECKED].get();\n var index;\n if (source instanceof ObservableArray) {\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n if (index > -1) {\n source.splice(index, 1);\n } else {\n source.push(value);\n }\n } else {\n this.bindings[CHECKED].set(value);\n }\n }\n },\n refresh: function () {\n var value = this.bindings[CHECKED].get(), source = value, type = this.dataType(), element = this.element;\n if (element.type == 'checkbox') {\n if (source instanceof ObservableArray) {\n var index = -1;\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n element.checked = index >= 0;\n } else {\n element.checked = source;\n }\n } else if (element.type == 'radio') {\n if (type == 'date') {\n value = kendo.toString(value, 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(value, 'yyyy-MM-ddTHH:mm:ss');\n }\n if (value !== null && typeof value !== 'undefined' && element.value === value.toString()) {\n element.checked = true;\n } else {\n element.checked = false;\n }\n }\n },\n value: function () {\n var element = this.element, value = element.value;\n if (element.type == 'checkbox') {\n value = element.checked;\n }\n return value;\n },\n destroy: function () {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n binders.select = {\n source: binders.source.extend({\n refresh: function (e) {\n var that = this, source = that.bindings.source.get();\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n if (e.action == 'add') {\n that.add(e.index, e.items);\n } else if (e.action == 'remove') {\n that.remove(e.index, e.items);\n } else if (e.action == 'itemchange' || e.action === undefined) {\n that.render();\n if (that.bindings.value) {\n if (that.bindings.value) {\n var val = retrievePrimitiveValues(that.bindings.value.get(), $(that.element).data('valueField'));\n if (val === null) {\n that.element.selectedIndex = -1;\n } else {\n that.element.value = val;\n }\n }\n }\n }\n } else {\n that.render();\n }\n }\n }),\n value: TypedBinder.extend({\n init: function (target, bindings, options) {\n TypedBinder.fn.init.call(this, target, bindings, options);\n this._change = proxy(this.change, this);\n $(this.element).change(this._change);\n },\n parsedValue: function () {\n var dataType = this.dataType();\n var values = [];\n var value, option, idx, length;\n for (idx = 0, length = this.element.options.length; idx < length; idx++) {\n option = this.element.options[idx];\n if (option.selected) {\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n values.push(this._parseValue(value, dataType));\n }\n }\n return values;\n },\n change: function () {\n var values = [], element = this.element, source, field = this.options.valueField || this.options.textField, valuePrimitive = this.options.valuePrimitive, option, valueIndex, value, idx, length;\n for (idx = 0, length = element.options.length; idx < length; idx++) {\n option = element.options[idx];\n if (option.selected) {\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n if (field) {\n values.push(value);\n } else {\n values.push(this._parseValue(value, this.dataType()));\n }\n }\n }\n if (field) {\n source = this.bindings.source.get();\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n for (valueIndex = 0; valueIndex < values.length; valueIndex++) {\n for (idx = 0, length = source.length; idx < length; idx++) {\n var sourceValue = source[idx].get(field);\n var match = String(sourceValue) === values[valueIndex];\n if (match) {\n values[valueIndex] = source[idx];\n break;\n }\n }\n }\n }\n value = this.bindings[VALUE].get();\n if (value instanceof ObservableArray) {\n value.splice.apply(value, [\n 0,\n value.length\n ].concat(values));\n } else if (!valuePrimitive && (value instanceof ObservableObject || value === null || value === undefined || !field)) {\n this.bindings[VALUE].set(values[0]);\n } else {\n this.bindings[VALUE].set(values[0].get(field));\n }\n },\n refresh: function () {\n var optionIndex, element = this.element, options = element.options, value = this.bindings[VALUE].get(), values = value, field = this.options.valueField || this.options.textField, found = false, type = this.dataType(), optionValue;\n if (!(values instanceof ObservableArray)) {\n values = new ObservableArray([value]);\n }\n element.selectedIndex = -1;\n for (var valueIndex = 0; valueIndex < values.length; valueIndex++) {\n value = values[valueIndex];\n if (field && value instanceof ObservableObject) {\n value = value.get(field);\n }\n if (type == 'date') {\n value = kendo.toString(values[valueIndex], 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(values[valueIndex], 'yyyy-MM-ddTHH:mm:ss');\n }\n for (optionIndex = 0; optionIndex < options.length; optionIndex++) {\n optionValue = options[optionIndex].value;\n if (optionValue === '' && value !== '') {\n optionValue = options[optionIndex].text;\n }\n if (value != null && optionValue == value.toString()) {\n options[optionIndex].selected = true;\n found = true;\n }\n }\n }\n },\n destroy: function () {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n function dataSourceBinding(bindingName, fieldName, setter) {\n return Binder.extend({\n init: function (widget, bindings, options) {\n var that = this;\n Binder.fn.init.call(that, widget.element[0], bindings, options);\n that.widget = widget;\n that._dataBinding = proxy(that.dataBinding, that);\n that._dataBound = proxy(that.dataBound, that);\n that._itemChange = proxy(that.itemChange, that);\n },\n itemChange: function (e) {\n bindElement(e.item[0], e.data, this._ns(e.ns), [e.data].concat(this.bindings[bindingName]._parents()));\n },\n dataBinding: function (e) {\n var idx, length, widget = this.widget, items = e.removedItems || widget.items();\n for (idx = 0, length = items.length; idx < length; idx++) {\n unbindElementTree(items[idx], false);\n }\n },\n _ns: function (ns) {\n ns = ns || kendo.ui;\n var all = [\n kendo.ui,\n kendo.dataviz.ui,\n kendo.mobile.ui\n ];\n all.splice($.inArray(ns, all), 1);\n all.unshift(ns);\n return kendo.rolesFromNamespaces(all);\n },\n dataBound: function (e) {\n var idx, length, widget = this.widget, items = e.addedItems || widget.items(), dataSource = widget[fieldName], view, parents, hds = kendo.data.HierarchicalDataSource;\n if (hds && dataSource instanceof hds) {\n return;\n }\n if (items.length) {\n view = e.addedDataItems || dataSource.flatView();\n parents = this.bindings[bindingName]._parents();\n for (idx = 0, length = view.length; idx < length; idx++) {\n if (items[idx]) {\n bindElement(items[idx], view[idx], this._ns(e.ns), [view[idx]].concat(parents));\n }\n }\n }\n },\n refresh: function (e) {\n var that = this, source, widget = that.widget, select, multiselect, dropdowntree;\n e = e || {};\n if (!e.action) {\n that.destroy();\n widget.bind('dataBinding', that._dataBinding);\n widget.bind('dataBound', that._dataBound);\n widget.bind('itemChange', that._itemChange);\n source = that.bindings[bindingName].get();\n if (widget[fieldName] instanceof kendo.data.DataSource && widget[fieldName] != source) {\n if (source instanceof kendo.data.DataSource) {\n widget[setter](source);\n } else if (source && source._dataSource) {\n widget[setter](source._dataSource);\n } else {\n select = kendo.ui.Select && widget instanceof kendo.ui.Select;\n multiselect = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect;\n dropdowntree = kendo.ui.DropDownTree && widget instanceof kendo.ui.DropDownTree;\n if (!dropdowntree) {\n widget[fieldName].data(source);\n } else {\n widget.treeview[fieldName].data(source);\n }\n if (that.bindings.value && (select || multiselect)) {\n widget.value(retrievePrimitiveValues(that.bindings.value.get(), widget.options.dataValueField));\n }\n }\n }\n }\n },\n destroy: function () {\n var widget = this.widget;\n widget.unbind('dataBinding', this._dataBinding);\n widget.unbind('dataBound', this._dataBound);\n widget.unbind('itemChange', this._itemChange);\n }\n });\n }\n binders.widget = {\n events: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this.handlers = {};\n },\n refresh: function (key) {\n var binding = this.bindings.events[key], handler = this.handlers[key];\n if (handler) {\n this.widget.unbind(key, handler);\n }\n handler = binding.get();\n this.handlers[key] = function (e) {\n e.data = binding.source;\n handler(e);\n if (e.data === binding.source) {\n delete e.data;\n }\n };\n this.widget.bind(key, this.handlers[key]);\n },\n destroy: function () {\n var handler;\n for (handler in this.handlers) {\n this.widget.unbind(handler, this.handlers[handler]);\n }\n }\n }),\n checked: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = proxy(this.change, this);\n this.widget.bind(CHANGE, this._change);\n },\n change: function () {\n this.bindings[CHECKED].set(this.value());\n },\n refresh: function () {\n this.widget.check(this.bindings[CHECKED].get() === true);\n },\n value: function () {\n var element = this.element, value = element.value;\n if (value == 'on' || value == 'off') {\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, touchInfo) {\n extend(this, {\n x: new TouchAxis('X', touchInfo.location),\n y: new TouchAxis('Y', touchInfo.location),\n type: touchInfo.type,\n useClickAsTap: userEvents.useClickAsTap,\n threshold: userEvents.threshold || THRESHOLD[touchInfo.type],\n userEvents: userEvents,\n target: target,\n currentTarget: touchInfo.currentTarget,\n initialTouch: touchInfo.target,\n id: touchInfo.id,\n pressEvent: touchInfo,\n _clicks: userEvents._clicks,\n supportDoubleTap: userEvents.supportDoubleTap,\n _moved: false,\n _finished: false\n });\n },\n press: function () {\n this._holdTimeout = setTimeout($.proxy(this, '_hold'), this.userEvents.minHold);\n this._trigger(PRESS, this.pressEvent);\n },\n _tap: function (touchInfo) {\n var that = this;\n that.userEvents._clicks++;\n if (that.userEvents._clicks == 1) {\n that._clickTimeout = setTimeout(function () {\n if (that.userEvents._clicks == 1) {\n that._trigger(TAP, touchInfo);\n } else {\n that._trigger(DOUBLETAP, touchInfo);\n }\n that.userEvents._clicks = 0;\n }, CLICK_DELAY);\n }\n },\n _hold: function () {\n this._trigger(HOLD, this.pressEvent);\n },\n move: function (touchInfo) {\n var that = this;\n if (that._finished) {\n return;\n }\n that.x.move(touchInfo.location);\n that.y.move(touchInfo.location);\n if (!that._moved) {\n if (that._withinIgnoreThreshold()) {\n return;\n }\n if (!UserEvents.current || UserEvents.current === that.userEvents) {\n that._start(touchInfo);\n } else {\n return that.dispose();\n }\n }\n if (!that._finished) {\n that._trigger(MOVE, touchInfo);\n }\n },\n end: function (touchInfo) {\n this.endTime = now();\n if (this._finished) {\n return;\n }\n this._finished = true;\n this._trigger(RELEASE, touchInfo);\n if (this._moved) {\n this._trigger(END, touchInfo);\n } else {\n if (!this.useClickAsTap) {\n if (this.supportDoubleTap) {\n this._tap(touchInfo);\n } else {\n this._trigger(TAP, touchInfo);\n }\n }\n }\n clearTimeout(this._holdTimeout);\n this.dispose();\n },\n dispose: function () {\n var userEvents = this.userEvents, activeTouches = userEvents.touches;\n this._finished = true;\n this.pressEvent = null;\n clearTimeout(this._holdTimeout);\n activeTouches.splice($.inArray(this, activeTouches), 1);\n },\n skip: function () {\n this.dispose();\n },\n cancel: function () {\n this.dispose();\n },\n isMoved: function () {\n return this._moved;\n },\n _start: function (touchInfo) {\n clearTimeout(this._holdTimeout);\n this.startTime = now();\n this._moved = true;\n this._trigger(START, touchInfo);\n },\n _trigger: function (name, touchInfo) {\n var that = this, jQueryEvent = touchInfo.event, data = {\n touch: that,\n x: that.x,\n y: that.y,\n target: that.target,\n event: jQueryEvent\n };\n if (that.userEvents.notify(name, data)) {\n jQueryEvent.preventDefault();\n }\n },\n _withinIgnoreThreshold: function () {\n var xDelta = this.x.initialDelta, yDelta = this.y.initialDelta;\n return Math.sqrt(xDelta * xDelta + yDelta * yDelta) <= this.threshold;\n }\n });\n function withEachUpEvent(callback) {\n var downEvents = kendo.eventMap.up.split(' '), idx = 0, length = downEvents.length;\n for (; idx < length; idx++) {\n callback(downEvents[idx]);\n }\n }\n var UserEvents = Observable.extend({\n init: function (element, options) {\n var that = this, filter, ns = kendo.guid();\n options = options || {};\n filter = that.filter = options.filter;\n that.threshold = options.threshold || DEFAULT_THRESHOLD;\n that.minHold = options.minHold || DEFAULT_MIN_HOLD;\n that.touches = [];\n that._maxTouches = options.multiTouch ? 2 : 1;\n that.allowSelection = options.allowSelection;\n that.captureUpIfMoved = options.captureUpIfMoved;\n that.useClickAsTap = !options.fastTap && !support.delayedClick();\n that.eventNS = ns;\n that._clicks = 0;\n that.supportDoubleTap = options.supportDoubleTap;\n element = $(element).handler(that);\n Observable.fn.init.call(that);\n extend(that, {\n element: element,\n surface: options.global && ENABLE_GLOBAL_SURFACE ? $(element[0].ownerDocument.documentElement) : $(options.surface || element),\n stopPropagation: options.stopPropagation,\n pressed: false\n });\n that.surface.handler(that).on(kendo.applyEventMap('move', ns), '_move').on(kendo.applyEventMap('up cancel', ns), '_end');\n element.on(kendo.applyEventMap('down', ns), filter, '_start');\n if (that.useClickAsTap) {\n element.on(kendo.applyEventMap('click', ns), filter, '_click');\n }\n if (support.pointers || support.msPointers) {\n if (support.browser.version < 11) {\n var defaultAction = 'pinch-zoom double-tap-zoom';\n element.css('-ms-touch-action', options.touchAction && options.touchAction != 'none' ? defaultAction + ' ' + options.touchAction : defaultAction);\n } else {\n element.css('touch-action', options.touchAction || 'none');\n }\n }\n if (options.preventDragEvent) {\n element.on(kendo.applyEventMap('dragstart', ns), kendo.preventDefault);\n }\n element.on(kendo.applyEventMap('mousedown', ns), filter, { root: element }, '_select');\n if (that.captureUpIfMoved && support.eventCapture) {\n var surfaceElement = that.surface[0], preventIfMovingProxy = $.proxy(that.preventIfMoving, that);\n withEachUpEvent(function (eventName) {\n surfaceElement.addEventListener(eventName, preventIfMovingProxy, true);\n });\n }\n that.bind([\n PRESS,\n HOLD,\n TAP,\n DOUBLETAP,\n START,\n MOVE,\n END,\n RELEASE,\n CANCEL,\n GESTURESTART,\n GESTURECHANGE,\n GESTUREEND,\n GESTURETAP,\n SELECT\n ], options);\n },\n preventIfMoving: function (e) {\n if (this._isMoved()) {\n e.preventDefault();\n }\n },\n destroy: function () {\n var that = this;\n if (that._destroyed) {\n return;\n }\n that._destroyed = true;\n if (that.captureUpIfMoved && support.eventCapture) {\n var surfaceElement = that.surface[0];\n withEachUpEvent(function (eventName) {\n surfaceElement.removeEventListener(eventName, that.preventIfMoving);\n });\n }\n that.element.kendoDestroy(that.eventNS);\n that.surface.kendoDestroy(that.eventNS);\n that.element.removeData('handler');\n that.surface.removeData('handler');\n that._disposeAll();\n that.unbind();\n delete that.surface;\n delete that.element;\n delete that.currentTarget;\n },\n capture: function () {\n UserEvents.current = this;\n },\n cancel: function () {\n this._disposeAll();\n this.trigger(CANCEL);\n },\n notify: function (eventName, data) {\n var that = this, touches = that.touches;\n if (this._isMultiTouch()) {\n switch (eventName) {\n case MOVE:\n eventName = GESTURECHANGE;\n break;\n case END:\n eventName = GESTUREEND;\n break;\n case TAP:\n eventName = GESTURETAP;\n break;\n }\n extend(data, { touches: touches }, touchDelta(touches[0], touches[1]));\n }\n return this.trigger(eventName, extend(data, { type: eventName }));\n },\n press: function (x, y, target) {\n this._apiCall('_start', x, y, target);\n },\n move: function (x, y) {\n this._apiCall('_move', x, y);\n },\n end: function (x, y) {\n this._apiCall('_end', x, y);\n },\n _isMultiTouch: function () {\n return this.touches.length > 1;\n },\n _maxTouchesReached: function () {\n return this.touches.length >= this._maxTouches;\n },\n _disposeAll: function () {\n var touches = this.touches;\n while (touches.length > 0) {\n touches.pop().dispose();\n }\n },\n _isMoved: function () {\n return $.grep(this.touches, function (touch) {\n return touch.isMoved();\n }).length;\n },\n _select: function (e) {\n if (!this.allowSelection || this.trigger(SELECT, { event: e })) {\n e.preventDefault();\n }\n },\n _start: function (e) {\n var that = this, idx = 0, filter = that.filter, target, touches = getTouches(e), length = touches.length, touch, which = e.which;\n if (which && which > 1 || that._maxTouchesReached()) {\n return;\n }\n UserEvents.current = null;\n that.currentTarget = e.currentTarget;\n if (that.stopPropagation) {\n e.stopPropagation();\n }\n for (; idx < length; idx++) {\n if (that._maxTouchesReached()) {\n break;\n }\n touch = touches[idx];\n if (filter) {\n target = $(touch.currentTarget);\n } else {\n target = that.element;\n }\n if (!target.length) {\n continue;\n }\n touch = new Touch(that, target, touch);\n that.touches.push(touch);\n touch.press();\n if (that._isMultiTouch()) {\n that.notify('gesturestart', {});\n }\n }\n },\n _move: function (e) {\n this._eachTouch('move', e);\n },\n _end: function (e) {\n this._eachTouch('end', e);\n },\n _click: function (e) {\n var data = {\n touch: {\n initialTouch: e.target,\n target: $(e.currentTarget),\n endTime: now(),\n x: {\n location: e.pageX,\n client: e.clientX\n },\n y: {\n location: e.pageY,\n client: e.clientY\n }\n },\n x: e.pageX,\n y: e.pageY,\n target: $(e.currentTarget),\n event: e,\n type: 'tap'\n };\n if (this.trigger('tap', data)) {\n e.preventDefault();\n }\n },\n _eachTouch: function (methodName, e) {\n var that = this, dict = {}, touches = getTouches(e), activeTouches = that.touches, idx, touch, touchInfo, matchingTouch;\n for (idx = 0; idx < activeTouches.length; idx++) {\n touch = activeTouches[idx];\n dict[touch.id] = touch;\n }\n for (idx = 0; idx < touches.length; idx++) {\n touchInfo = touches[idx];\n matchingTouch = dict[touchInfo.id];\n if (matchingTouch) {\n matchingTouch[methodName](touchInfo);\n }\n }\n },\n _apiCall: function (type, x, y, target) {\n this[type]({\n api: true,\n pageX: x,\n pageY: y,\n clientX: x,\n clientY: y,\n target: $(target || this.element)[0],\n stopPropagation: $.noop,\n preventDefault: $.noop\n });\n }\n });\n UserEvents.defaultThreshold = function (value) {\n DEFAULT_THRESHOLD = value;\n };\n UserEvents.minHold = function (value) {\n DEFAULT_MIN_HOLD = value;\n };\n kendo.getTouches = getTouches;\n kendo.touchDelta = touchDelta;\n kendo.UserEvents = UserEvents;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.draganddrop', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'draganddrop',\n name: 'Drag & drop',\n category: 'framework',\n description: 'Drag & drop functionality for any DOM element.',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, document = window.document, $window = $(window), Class = kendo.Class, Widget = kendo.ui.Widget, Observable = kendo.Observable, UserEvents = kendo.UserEvents, proxy = $.proxy, extend = $.extend, getOffset = kendo.getOffset, draggables = {}, dropTargets = {}, dropAreas = {}, lastDropTarget, elementUnderCursor = kendo.elementUnderCursor, KEYUP = 'keyup', CHANGE = 'change', DRAGSTART = 'dragstart', HOLD = 'hold', DRAG = 'drag', DRAGEND = 'dragend', DRAGCANCEL = 'dragcancel', HINTDESTROYED = 'hintDestroyed', DRAGENTER = 'dragenter', DRAGLEAVE = 'dragleave', DROP = 'drop';\n function contains(parent, child) {\n try {\n return $.contains(parent, child) || parent == child;\n } catch (e) {\n return false;\n }\n }\n function numericCssPropery(element, property) {\n return parseInt(element.css(property), 10) || 0;\n }\n function within(value, range) {\n return Math.min(Math.max(value, range.min), range.max);\n }\n function containerBoundaries(container, element) {\n var offset = getOffset(container), outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, minX = offset.left + numericCssPropery(container, 'borderLeftWidth') + numericCssPropery(container, 'paddingLeft'), minY = offset.top + numericCssPropery(container, 'borderTopWidth') + numericCssPropery(container, 'paddingTop'), maxX = minX + container.width() - outerWidth(element, true), maxY = minY + container.height() - outerHeight(element, true);\n return {\n x: {\n min: minX,\n max: maxX\n },\n y: {\n min: minY,\n max: maxY\n }\n };\n }\n function checkTarget(target, targets, areas) {\n var theTarget, theFilter, i = 0, targetLen = targets && targets.length, areaLen = areas && areas.length;\n while (target && target.parentNode) {\n for (i = 0; i < targetLen; i++) {\n theTarget = targets[i];\n if (theTarget.element[0] === target) {\n return {\n target: theTarget,\n targetElement: target\n };\n }\n }\n for (i = 0; i < areaLen; i++) {\n theFilter = areas[i];\n if ($.contains(theFilter.element[0], target) && support.matchesSelector.call(target, theFilter.options.filter)) {\n return {\n target: theFilter,\n targetElement: target\n };\n }\n }\n target = target.parentNode;\n }\n return undefined;\n }\n var TapCapture = Observable.extend({\n init: function (element, options) {\n var that = this, domElement = element[0];\n that.capture = false;\n if (domElement.addEventListener) {\n $.each(kendo.eventMap.down.split(' '), function () {\n domElement.addEventListener(this, proxy(that._press, that), true);\n });\n $.each(kendo.eventMap.up.split(' '), function () {\n domElement.addEventListener(this, proxy(that._release, that), true);\n });\n } else {\n $.each(kendo.eventMap.down.split(' '), function () {\n domElement.attachEvent(this, proxy(that._press, that));\n });\n $.each(kendo.eventMap.up.split(' '), function () {\n domElement.attachEvent(this, proxy(that._release, that));\n });\n }\n Observable.fn.init.call(that);\n that.bind([\n 'press',\n 'release'\n ], options || {});\n },\n captureNext: function () {\n this.capture = true;\n },\n cancelCapture: function () {\n this.capture = false;\n },\n _press: function (e) {\n var that = this;\n that.trigger('press');\n if (that.capture) {\n e.preventDefault();\n }\n },\n _release: function (e) {\n var that = this;\n that.trigger('release');\n if (that.capture) {\n e.preventDefault();\n that.cancelCapture();\n }\n }\n });\n var PaneDimension = Observable.extend({\n init: function (options) {\n var that = this;\n Observable.fn.init.call(that);\n that.forcedEnabled = false;\n $.extend(that, options);\n that.scale = 1;\n if (that.horizontal) {\n that.measure = 'offsetWidth';\n that.scrollSize = 'scrollWidth';\n that.axis = 'x';\n } else {\n that.measure = 'offsetHeight';\n that.scrollSize = 'scrollHeight';\n that.axis = 'y';\n }\n },\n makeVirtual: function () {\n $.extend(this, {\n virtual: true,\n forcedEnabled: true,\n _virtualMin: 0,\n _virtualMax: 0\n });\n },\n virtualSize: function (min, max) {\n if (this._virtualMin !== min || this._virtualMax !== max) {\n this._virtualMin = min;\n this._virtualMax = max;\n this.update();\n }\n },\n outOfBounds: function (offset) {\n return offset > this.max || offset < this.min;\n },\n forceEnabled: function () {\n this.forcedEnabled = true;\n },\n getSize: function () {\n return this.container[0][this.measure];\n },\n getTotal: function () {\n return this.element[0][this.scrollSize];\n },\n rescale: function (scale) {\n this.scale = scale;\n },\n update: function (silent) {\n var that = this, total = that.virtual ? that._virtualMax : that.getTotal(), scaledTotal = total * that.scale, size = that.getSize();\n if (total === 0 && !that.forcedEnabled) {\n return;\n }\n that.max = that.virtual ? -that._virtualMin : 0;\n that.size = size;\n that.total = scaledTotal;\n that.min = Math.min(that.max, size - scaledTotal);\n that.minScale = size / total;\n that.centerOffset = (scaledTotal - size) / 2;\n that.enabled = that.forcedEnabled || scaledTotal > size;\n if (!silent) {\n that.trigger(CHANGE, that);\n }\n }\n });\n var PaneDimensions = Observable.extend({\n init: function (options) {\n var that = this;\n Observable.fn.init.call(that);\n that.x = new PaneDimension(extend({ horizontal: true }, options));\n that.y = new PaneDimension(extend({ horizontal: false }, options));\n that.container = options.container;\n that.forcedMinScale = options.minScale;\n that.maxScale = options.maxScale || 100;\n that.bind(CHANGE, options);\n },\n rescale: function (newScale) {\n this.x.rescale(newScale);\n this.y.rescale(newScale);\n this.refresh();\n },\n centerCoordinates: function () {\n return {\n x: Math.min(0, -this.x.centerOffset),\n y: Math.min(0, -this.y.centerOffset)\n };\n },\n refresh: function () {\n var that = this;\n that.x.update();\n that.y.update();\n that.enabled = that.x.enabled || that.y.enabled;\n that.minScale = that.forcedMinScale || Math.min(that.x.minScale, that.y.minScale);\n that.fitScale = Math.max(that.x.minScale, that.y.minScale);\n that.trigger(CHANGE);\n }\n });\n var PaneAxis = Observable.extend({\n init: function (options) {\n var that = this;\n extend(that, options);\n Observable.fn.init.call(that);\n },\n outOfBounds: function () {\n return this.dimension.outOfBounds(this.movable[this.axis]);\n },\n dragMove: function (delta) {\n var that = this, dimension = that.dimension, axis = that.axis, movable = that.movable, position = movable[axis] + delta;\n if (!dimension.enabled) {\n return;\n }\n if (position < dimension.min && delta < 0 || position > dimension.max && delta > 0) {\n delta *= that.resistance;\n }\n movable.translateAxis(axis, delta);\n that.trigger(CHANGE, that);\n }\n });\n var Pane = Class.extend({\n init: function (options) {\n var that = this, x, y, resistance, movable;\n extend(that, { elastic: true }, options);\n resistance = that.elastic ? 0.5 : 0;\n movable = that.movable;\n that.x = x = new PaneAxis({\n axis: 'x',\n dimension: that.dimensions.x,\n resistance: resistance,\n movable: movable\n });\n that.y = y = new PaneAxis({\n axis: 'y',\n dimension: that.dimensions.y,\n resistance: resistance,\n movable: movable\n });\n that.userEvents.bind([\n 'press',\n 'move',\n 'end',\n 'gesturestart',\n 'gesturechange'\n ], {\n gesturestart: function (e) {\n that.gesture = e;\n that.offset = that.dimensions.container.offset();\n },\n press: function (e) {\n if ($(e.event.target).closest('a').is('[data-navigate-on-press=true]')) {\n e.sender.cancel();\n }\n },\n gesturechange: function (e) {\n var previousGesture = that.gesture, previousCenter = previousGesture.center, center = e.center, scaleDelta = e.distance / previousGesture.distance, minScale = that.dimensions.minScale, maxScale = that.dimensions.maxScale, coordinates;\n if (movable.scale <= minScale && scaleDelta < 1) {\n scaleDelta += (1 - scaleDelta) * 0.8;\n }\n if (movable.scale * scaleDelta >= maxScale) {\n scaleDelta = maxScale / movable.scale;\n }\n var offsetX = movable.x + that.offset.left, offsetY = movable.y + that.offset.top;\n coordinates = {\n x: (offsetX - previousCenter.x) * scaleDelta + center.x - offsetX,\n y: (offsetY - previousCenter.y) * scaleDelta + center.y - offsetY\n };\n movable.scaleWith(scaleDelta);\n x.dragMove(coordinates.x);\n y.dragMove(coordinates.y);\n that.dimensions.rescale(movable.scale);\n that.gesture = e;\n e.preventDefault();\n },\n move: function (e) {\n if (e.event.target.tagName.match(/textarea|input/i)) {\n return;\n }\n if (x.dimension.enabled || y.dimension.enabled) {\n x.dragMove(e.x.delta);\n y.dragMove(e.y.delta);\n e.preventDefault();\n } else {\n e.touch.skip();\n }\n },\n end: function (e) {\n e.preventDefault();\n }\n });\n }\n });\n var TRANSFORM_STYLE = support.transitions.prefix + 'Transform', translate;\n if (support.hasHW3D) {\n translate = function (x, y, scale) {\n return 'translate3d(' + x + 'px,' + y + 'px,0) scale(' + scale + ')';\n };\n } else {\n translate = function (x, y, scale) {\n return 'translate(' + x + 'px,' + y + 'px) scale(' + scale + ')';\n };\n }\n var Movable = Observable.extend({\n init: function (element) {\n var that = this;\n Observable.fn.init.call(that);\n that.element = $(element);\n that.element[0].style.webkitTransformOrigin = 'left top';\n that.x = 0;\n that.y = 0;\n that.scale = 1;\n that._saveCoordinates(translate(that.x, that.y, that.scale));\n },\n translateAxis: function (axis, by) {\n this[axis] += by;\n this.refresh();\n },\n scaleTo: function (scale) {\n this.scale = scale;\n this.refresh();\n },\n scaleWith: function (scaleDelta) {\n this.scale *= scaleDelta;\n this.refresh();\n },\n translate: function (coordinates) {\n this.x += coordinates.x;\n this.y += coordinates.y;\n this.refresh();\n },\n moveAxis: function (axis, value) {\n this[axis] = value;\n this.refresh();\n },\n moveTo: function (coordinates) {\n extend(this, coordinates);\n this.refresh();\n },\n refresh: function () {\n var that = this, x = that.x, y = that.y, newCoordinates;\n if (that.round) {\n x = Math.round(x);\n y = Math.round(y);\n }\n newCoordinates = translate(x, y, that.scale);\n if (newCoordinates != that.coordinates) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n that.element[0].style.position = 'absolute';\n that.element[0].style.left = that.x + 'px';\n that.element[0].style.top = that.y + 'px';\n } else {\n that.element[0].style[TRANSFORM_STYLE] = newCoordinates;\n }\n that._saveCoordinates(newCoordinates);\n that.trigger(CHANGE);\n }\n },\n _saveCoordinates: function (coordinates) {\n this.coordinates = coordinates;\n }\n });\n function destroyDroppable(collection, widget) {\n var groupName = widget.options.group, droppables = collection[groupName], i;\n Widget.fn.destroy.call(widget);\n if (droppables.length > 1) {\n for (i = 0; i < droppables.length; i++) {\n if (droppables[i] == widget) {\n droppables.splice(i, 1);\n break;\n }\n }\n } else {\n droppables.length = 0;\n delete collection[groupName];\n }\n }\n var DropTarget = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n var group = that.options.group;\n if (!(group in dropTargets)) {\n dropTargets[group] = [that];\n } else {\n dropTargets[group].push(that);\n }\n },\n events: [\n DRAGENTER,\n DRAGLEAVE,\n DROP\n ],\n options: {\n name: 'DropTarget',\n group: 'default'\n },\n destroy: function () {\n destroyDroppable(dropTargets, this);\n },\n _trigger: function (eventName, e) {\n var that = this, draggable = draggables[that.options.group];\n if (draggable) {\n return that.trigger(eventName, extend({}, e.event, {\n draggable: draggable,\n dropTarget: e.dropTarget\n }));\n }\n },\n _over: function (e) {\n this._trigger(DRAGENTER, e);\n },\n _out: function (e) {\n this._trigger(DRAGLEAVE, e);\n },\n _drop: function (e) {\n var that = this, draggable = draggables[that.options.group];\n if (draggable) {\n draggable.dropped = !that._trigger(DROP, e);\n }\n }\n });\n DropTarget.destroyGroup = function (groupName) {\n var group = dropTargets[groupName] || dropAreas[groupName], i;\n if (group) {\n for (i = 0; i < group.length; i++) {\n Widget.fn.destroy.call(group[i]);\n }\n group.length = 0;\n delete dropTargets[groupName];\n delete dropAreas[groupName];\n }\n };\n DropTarget._cache = dropTargets;\n var DropTargetArea = DropTarget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n var group = that.options.group;\n if (!(group in dropAreas)) {\n dropAreas[group] = [that];\n } else {\n dropAreas[group].push(that);\n }\n },\n destroy: function () {\n destroyDroppable(dropAreas, this);\n },\n options: {\n name: 'DropTargetArea',\n group: 'default',\n filter: null\n }\n });\n var Draggable = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that._activated = false;\n that.userEvents = new UserEvents(that.element, {\n global: true,\n allowSelection: true,\n filter: that.options.filter,\n threshold: that.options.distance,\n start: proxy(that._start, that),\n hold: proxy(that._hold, that),\n move: proxy(that._drag, that),\n end: proxy(that._end, that),\n cancel: proxy(that._cancel, that),\n select: proxy(that._select, that)\n });\n that._afterEndHandler = proxy(that._afterEnd, that);\n that._captureEscape = proxy(that._captureEscape, that);\n },\n events: [\n HOLD,\n DRAGSTART,\n DRAG,\n DRAGEND,\n DRAGCANCEL,\n HINTDESTROYED\n ],\n options: {\n name: 'Draggable',\n distance: kendo.support.touch ? 0 : 5,\n group: 'default',\n cursorOffset: null,\n axis: null,\n container: null,\n filter: null,\n ignore: null,\n holdToDrag: false,\n autoScroll: false,\n dropped: false\n },\n cancelHold: function () {\n this._activated = false;\n },\n _captureEscape: function (e) {\n var that = this;\n if (e.keyCode === kendo.keys.ESC) {\n that._trigger(DRAGCANCEL, { event: e });\n that.userEvents.cancel();\n }\n },\n _updateHint: function (e) {\n var that = this, coordinates, options = that.options, boundaries = that.boundaries, axis = options.axis, cursorOffset = that.options.cursorOffset;\n if (cursorOffset) {\n coordinates = {\n left: e.x.location + cursorOffset.left,\n top: e.y.location + cursorOffset.top\n };\n } else {\n that.hintOffset.left += e.x.delta;\n that.hintOffset.top += e.y.delta;\n coordinates = $.extend({}, that.hintOffset);\n }\n if (boundaries) {\n coordinates.top = within(coordinates.top, boundaries.y);\n coordinates.left = within(coordinates.left, boundaries.x);\n }\n if (axis === 'x') {\n delete coordinates.top;\n } else if (axis === 'y') {\n delete coordinates.left;\n }\n that.hint.css(coordinates);\n },\n _shouldIgnoreTarget: function (target) {\n var ignoreSelector = this.options.ignore;\n return ignoreSelector && $(target).is(ignoreSelector);\n },\n _select: function (e) {\n if (!this._shouldIgnoreTarget(e.event.target)) {\n e.preventDefault();\n }\n },\n _start: function (e) {\n var that = this, options = that.options, container = options.container ? $(options.container) : null, hint = options.hint;\n if (this._shouldIgnoreTarget(e.touch.initialTouch) || options.holdToDrag && !that._activated) {\n that.userEvents.cancel();\n return;\n }\n that.currentTarget = e.target;\n that.currentTargetOffset = getOffset(that.currentTarget);\n if (hint) {\n if (that.hint) {\n that.hint.stop(true, true).remove();\n }\n that.hint = kendo.isFunction(hint) ? $(hint.call(that, that.currentTarget)) : hint;\n var offset = getOffset(that.currentTarget);\n that.hintOffset = offset;\n that.hint.css({\n position: 'absolute',\n zIndex: 20000,\n left: offset.left,\n top: offset.top\n }).appendTo(document.body);\n that.angular('compile', function () {\n that.hint.removeAttr('ng-repeat');\n var scopeTarget = $(e.target);\n while (!scopeTarget.data('$$kendoScope') && scopeTarget.length) {\n scopeTarget = scopeTarget.parent();\n }\n return {\n elements: that.hint.get(),\n scopeFrom: scopeTarget.data('$$kendoScope')\n };\n });\n }\n draggables[options.group] = that;\n that.dropped = false;\n if (container) {\n that.boundaries = containerBoundaries(container, that.hint);\n }\n $(document).on(KEYUP, that._captureEscape);\n if (that._trigger(DRAGSTART, e)) {\n that.userEvents.cancel();\n that._afterEnd();\n }\n that.userEvents.capture();\n },\n _hold: function (e) {\n this.currentTarget = e.target;\n if (this._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._isShownOnFocus()) {\n that.element.on('mouseenter' + NS, that.options.filter, proxy(that._mouseenter, that));\n }\n if (this.options.autoHide && !this._isShownOnFocus()) {\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 _mouseenter: function (e) {\n saveTitleAttributes($(e.currentTarget));\n },\n _showOn: function (e) {\n var that = this;\n var currentTarget = $(e.currentTarget);\n if (that.options.showOn && that.options.showOn.match(/click/)) {\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 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._isShownOnFocus()) {\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 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 h *= 60;\n s *= 100;\n l *= 100;\n }\n return new HSL(h, s, l, 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 ref = this;\n var h = ref.h;\n var s = ref.s;\n var l = ref.l;\n var r, g, b;\n if (s === 0) {\n r = g = b = l / 100;\n } else {\n h /= 360;\n s /= 100;\n l /= 100;\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n return new RGB(r, g, b, this.a);\n },\n toHSV: function () {\n return this.toRGB().toHSV();\n },\n toBytes: function () {\n return this.toRGB().toBytes();\n }\n });\n function hue2rgb(p, q, s) {\n var t = s;\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n }\n function parseColor(value, safe) {\n var m, ret;\n if (value == null || value === 'none') {\n return null;\n }\n if (value instanceof BaseColor) {\n return value;\n }\n var color = value.toLowerCase();\n if (m = matchNamedColor(color)) {\n if (m[1] === 'transparent') {\n color = new RGB(1, 1, 1, 0);\n } else {\n color = parseColor(namedColors[m[1]], safe);\n }\n color.match = [m[1]];\n return color;\n }\n if (m = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})\\b/i.exec(color)) {\n ret = new Bytes(parseInt(m[1], 16), parseInt(m[2], 16), parseInt(m[3], 16), 1);\n } else if (m = /^#?([0-9a-f])([0-9a-f])([0-9a-f])\\b/i.exec(color)) {\n ret = new Bytes(parseInt(m[1] + m[1], 16), parseInt(m[2] + m[2], 16), parseInt(m[3] + m[3], 16), 1);\n } else if (m = /^rgb\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/.exec(color)) {\n ret = new Bytes(parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10), 1);\n } else if (m = /^rgba\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9.]+)\\s*\\)/.exec(color)) {\n ret = new Bytes(parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10), parseFloat(m[4]));\n } else if (m = /^rgb\\(\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*\\)/.exec(color)) {\n ret = new RGB(parseFloat(m[1]) / 100, parseFloat(m[2]) / 100, parseFloat(m[3]) / 100, 1);\n } else if (m = /^rgba\\(\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9.]+)\\s*\\)/.exec(color)) {\n ret = new RGB(parseFloat(m[1]) / 100, parseFloat(m[2]) / 100, parseFloat(m[3]) / 100, parseFloat(m[4]));\n }\n if (ret) {\n ret.match = m;\n } else if (!safe) {\n throw new Error('Cannot parse color: ' + color);\n }\n return ret;\n }\n var Color = Class.extend({\n init: function (value) {\n var this$1 = this;\n if (arguments.length === 1) {\n var formats = Color.formats;\n var resolvedColor = this.resolveColor(value);\n for (var idx = 0; idx < formats.length; idx++) {\n var formatRegex = formats[idx].re;\n var processor = formats[idx].process;\n var parts = formatRegex.exec(resolvedColor);\n if (parts) {\n var channels = processor(parts);\n this$1.r = channels[0];\n this$1.g = channels[1];\n this$1.b = channels[2];\n }\n }\n } else {\n this.r = arguments[0];\n this.g = arguments[1];\n this.b = arguments[2];\n }\n this.r = this.normalizeByte(this.r);\n this.g = this.normalizeByte(this.g);\n this.b = this.normalizeByte(this.b);\n },\n toHex: function () {\n var pad = this.padDigit;\n var r = this.r.toString(16);\n var g = this.g.toString(16);\n var b = this.b.toString(16);\n return '#' + pad(r) + pad(g) + pad(b);\n },\n resolveColor: function (value) {\n var color = value || 'black';\n if (color.charAt(0) === '#') {\n color = color.substr(1, 6);\n }\n color = color.replace(/ /g, '');\n color = color.toLowerCase();\n color = Color.namedColors[color] || color;\n return color;\n },\n normalizeByte: function (value) {\n if (value < 0 || isNaN(value)) {\n return 0;\n }\n return value > 255 ? 255 : value;\n },\n padDigit: function (value) {\n return value.length === 1 ? '0' + value : value;\n },\n brightness: function (value) {\n var round = Math.round;\n this.r = round(this.normalizeByte(this.r * value));\n this.g = round(this.normalizeByte(this.g * value));\n this.b = round(this.normalizeByte(this.b * value));\n return this;\n },\n percBrightness: function () {\n return Math.sqrt(0.241 * this.r * this.r + 0.691 * this.g * this.g + 0.068 * this.b * this.b);\n }\n });\n Color.fromBytes = function (r, g, b, a) {\n return new Bytes(r, g, b, a != null ? a : 1);\n };\n Color.fromRGB = function (r, g, b, a) {\n return new RGB(r, g, b, a != null ? a : 1);\n };\n Color.fromHSV = function (h, s, v, a) {\n return new HSV(h, s, v, a != null ? a : 1);\n };\n Color.fromHSL = function (h, s, l, a) {\n return new HSL(h, s, l, a != null ? a : 1);\n };\n Color.formats = [\n {\n re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n process: function (parts) {\n return [\n parseInt(parts[1], 10),\n parseInt(parts[2], 10),\n parseInt(parts[3], 10)\n ];\n }\n },\n {\n re: /^(\\w{2})(\\w{2})(\\w{2})$/,\n process: function (parts) {\n return [\n parseInt(parts[1], 16),\n parseInt(parts[2], 16),\n parseInt(parts[3], 16)\n ];\n }\n },\n {\n re: /^(\\w{1})(\\w{1})(\\w{1})$/,\n process: function (parts) {\n return [\n parseInt(parts[1] + parts[1], 16),\n parseInt(parts[2] + parts[2], 16),\n parseInt(parts[3] + parts[3], 16)\n ];\n }\n }\n ];\n Color.namedColors = namedColors;\n kendo.deepExtend(kendo, {\n parseColor: parseColor,\n Color: Color\n });\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('util/text-metrics', ['kendo.core'], f);\n}(function () {\n (function ($) {\n window.kendo.util = window.kendo.util || {};\n var LRUCache = kendo.Class.extend({\n init: function (size) {\n this._size = size;\n this._length = 0;\n this._map = {};\n },\n put: function (key, value) {\n var map = this._map;\n var entry = {\n key: key,\n value: value\n };\n map[key] = entry;\n if (!this._head) {\n this._head = this._tail = entry;\n } else {\n this._tail.newer = entry;\n entry.older = this._tail;\n this._tail = entry;\n }\n if (this._length >= this._size) {\n map[this._head.key] = null;\n this._head = this._head.newer;\n this._head.older = null;\n } else {\n this._length++;\n }\n },\n get: function (key) {\n var entry = this._map[key];\n if (entry) {\n if (entry === this._head && entry !== this._tail) {\n this._head = entry.newer;\n this._head.older = null;\n }\n if (entry !== this._tail) {\n if (entry.older) {\n entry.older.newer = entry.newer;\n entry.newer.older = entry.older;\n }\n entry.older = this._tail;\n entry.newer = null;\n this._tail.newer = entry;\n this._tail = entry;\n }\n return entry.value;\n }\n }\n });\n var REPLACE_REGEX = /\\r?\\n|\\r|\\t/g;\n var SPACE = ' ';\n function normalizeText(text) {\n return String(text).replace(REPLACE_REGEX, SPACE);\n }\n function objectKey(object) {\n var parts = [];\n for (var key in object) {\n parts.push(key + object[key]);\n }\n return parts.sort().join('');\n }\n function hashKey(str) {\n var hash = 2166136261;\n for (var i = 0; i < str.length; ++i) {\n hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);\n hash ^= str.charCodeAt(i);\n }\n return hash >>> 0;\n }\n function zeroSize() {\n return {\n width: 0,\n height: 0,\n baseline: 0\n };\n }\n var DEFAULT_OPTIONS = { baselineMarkerSize: 1 };\n var defaultMeasureBox;\n if (typeof document !== 'undefined') {\n defaultMeasureBox = document.createElement('div');\n defaultMeasureBox.style.cssText = 'position: absolute !important; top: -4000px !important; width: auto !important; height: auto !important;' + 'padding: 0 !important; margin: 0 !important; border: 0 !important;' + 'line-height: normal !important; visibility: hidden !important; white-space: pre!important;';\n }\n var TextMetrics = kendo.Class.extend({\n init: function (options) {\n this._cache = new LRUCache(1000);\n this.options = $.extend({}, DEFAULT_OPTIONS, options);\n },\n measure: function (text, style, options) {\n if (options === void 0) {\n options = {};\n }\n if (!text) {\n return zeroSize();\n }\n var styleKey = objectKey(style);\n var cacheKey = hashKey(text + styleKey);\n var cachedResult = this._cache.get(cacheKey);\n if (cachedResult) {\n return cachedResult;\n }\n var size = zeroSize();\n var measureBox = options.box || defaultMeasureBox;\n var baselineMarker = this._baselineMarker().cloneNode(false);\n for (var key in style) {\n var value = style[key];\n if (typeof value !== 'undefined') {\n measureBox.style[key] = value;\n }\n }\n var textStr = options.normalizeText !== false ? normalizeText(text) : String(text);\n measureBox.textContent = textStr;\n measureBox.appendChild(baselineMarker);\n document.body.appendChild(measureBox);\n if (textStr.length) {\n size.width = measureBox.offsetWidth - this.options.baselineMarkerSize;\n size.height = measureBox.offsetHeight;\n size.baseline = baselineMarker.offsetTop + this.options.baselineMarkerSize;\n }\n if (size.width > 0 && size.height > 0) {\n this._cache.put(cacheKey, size);\n }\n measureBox.parentNode.removeChild(measureBox);\n return size;\n },\n _baselineMarker: function () {\n var marker = document.createElement('div');\n marker.style.cssText = 'display: inline-block; vertical-align: baseline;width: ' + this.options.baselineMarkerSize + 'px; height: ' + this.options.baselineMarkerSize + 'px;overflow: hidden;';\n return marker;\n }\n });\n TextMetrics.current = new TextMetrics();\n function measureText(text, style, measureBox) {\n return TextMetrics.current.measure(text, style, measureBox);\n }\n kendo.deepExtend(kendo.util, {\n LRUCache: LRUCache,\n TextMetrics: TextMetrics,\n measureText: measureText,\n objectKey: objectKey,\n hashKey: hashKey,\n normalizeText: normalizeText\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/kendo-drawing', [\n 'drawing/util',\n 'kendo.color',\n 'util/text-metrics'\n ], f);\n}(function () {\n (function ($) {\n window.kendo = window.kendo || {};\n var kendoDrawing = kendo.drawing;\n var kendoDrawingUtil = kendoDrawing.util;\n var Class = kendo.Class;\n var kendoUtil = kendo.util;\n var support = kendo.support;\n var supportBrowser = support.browser;\n var createPromise = kendoDrawingUtil.createPromise;\n var promiseAll = kendoDrawingUtil.promiseAll;\n var ObserversMixin = {\n extend: function (proto) {\n var this$1 = this;\n for (var method in this) {\n if (method !== 'extend') {\n proto[method] = this$1[method];\n }\n }\n },\n observers: function () {\n this._observers = this._observers || [];\n return this._observers;\n },\n addObserver: function (element) {\n if (!this._observers) {\n this._observers = [element];\n } else {\n this._observers.push(element);\n }\n return this;\n },\n removeObserver: function (element) {\n var observers = this.observers();\n var index = observers.indexOf(element);\n if (index !== -1) {\n observers.splice(index, 1);\n }\n return this;\n },\n trigger: function (methodName, event) {\n var observers = this._observers;\n if (observers && !this._suspended) {\n for (var idx = 0; idx < observers.length; idx++) {\n var observer = observers[idx];\n if (observer[methodName]) {\n observer[methodName](event);\n }\n }\n }\n return this;\n },\n optionsChange: function (e) {\n if (e === void 0) {\n e = {};\n }\n e.element = this;\n this.trigger('optionsChange', e);\n },\n geometryChange: function () {\n this.trigger('geometryChange', { element: this });\n },\n suspend: function () {\n this._suspended = (this._suspended || 0) + 1;\n return this;\n },\n resume: function () {\n this._suspended = Math.max((this._suspended || 0) - 1, 0);\n return this;\n },\n _observerField: function (field, value) {\n if (this[field]) {\n this[field].removeObserver(this);\n }\n this[field] = value;\n value.addObserver(this);\n }\n };\n function append(first, second) {\n first.push.apply(first, second);\n return first;\n }\n var literals = {\n 1: 'i',\n 10: 'x',\n 100: 'c',\n 2: 'ii',\n 20: 'xx',\n 200: 'cc',\n 3: 'iii',\n 30: 'xxx',\n 300: 'ccc',\n 4: 'iv',\n 40: 'xl',\n 400: 'cd',\n 5: 'v',\n 50: 'l',\n 500: 'd',\n 6: 'vi',\n 60: 'lx',\n 600: 'dc',\n 7: 'vii',\n 70: 'lxx',\n 700: 'dcc',\n 8: 'viii',\n 80: 'lxxx',\n 800: 'dccc',\n 9: 'ix',\n 90: 'xc',\n 900: 'cm',\n 1000: 'm'\n };\n function arabicToRoman(n) {\n var values = [\n 1000,\n 900,\n 800,\n 700,\n 600,\n 500,\n 400,\n 300,\n 200,\n 100,\n 90,\n 80,\n 70,\n 60,\n 50,\n 40,\n 30,\n 20,\n 10,\n 9,\n 8,\n 7,\n 6,\n 5,\n 4,\n 3,\n 2,\n 1\n ];\n var roman = '';\n while (n > 0) {\n if (n < values[0]) {\n values.shift();\n } else {\n roman += literals[values[0]];\n n -= values[0];\n }\n }\n return roman;\n }\n var UNDEFINED = 'undefined';\n function defined(value) {\n return typeof value !== UNDEFINED;\n }\n var defId = 1;\n function definitionId() {\n return 'kdef' + defId++;\n }\n var DEG_TO_RAD = Math.PI / 180;\n var MAX_NUM = Number.MAX_VALUE;\n var MIN_NUM = -Number.MAX_VALUE;\n function deg(radians) {\n return radians / DEG_TO_RAD;\n }\n var KEY_STR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var fromCharCode = String.fromCharCode;\n function encodeUTF8(input) {\n var output = '';\n for (var i = 0; i < input.length; i++) {\n var c = input.charCodeAt(i);\n if (c < 128) {\n output += fromCharCode(c);\n } else if (c < 2048) {\n output += fromCharCode(192 | c >>> 6);\n output += fromCharCode(128 | c & 63);\n } else if (c < 65536) {\n output += fromCharCode(224 | c >>> 12);\n output += fromCharCode(128 | c >>> 6 & 63);\n output += fromCharCode(128 | c & 63);\n }\n }\n return output;\n }\n function encodeBase64(input) {\n var output = '';\n var i = 0;\n var utfInput = encodeUTF8(input);\n while (i < utfInput.length) {\n var chr1 = utfInput.charCodeAt(i++);\n var chr2 = utfInput.charCodeAt(i++);\n var chr3 = utfInput.charCodeAt(i++);\n var enc1 = chr1 >> 2;\n var enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n var enc3 = (chr2 & 15) << 2 | chr3 >> 6;\n var enc4 = chr3 & 63;\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n output = output + KEY_STR.charAt(enc1) + KEY_STR.charAt(enc2) + KEY_STR.charAt(enc3) + KEY_STR.charAt(enc4);\n }\n return output;\n }\n function eventCoordinates(e) {\n if (defined((e.x || {}).location)) {\n return {\n x: e.x.location,\n y: e.y.location\n };\n }\n return {\n x: e.pageX || e.clientX || 0,\n y: e.pageY || e.clientY || 0\n };\n }\n function eventElement(e) {\n if (e === void 0) {\n e = {};\n }\n return e.touch ? e.touch.initialTouch : e.target;\n }\n function isTransparent(color) {\n return color === '' || color === null || color === 'none' || color === 'transparent' || !defined(color);\n }\n function last(array) {\n if (array) {\n return array[array.length - 1];\n }\n }\n function limitValue(value, min, max) {\n return Math.max(Math.min(value, max), min);\n }\n function mergeSort(a, cmp) {\n if (a.length < 2) {\n return a.slice();\n }\n function merge(a, b) {\n var r = [], ai = 0, bi = 0, i = 0;\n while (ai < a.length && bi < b.length) {\n if (cmp(a[ai], b[bi]) <= 0) {\n r[i++] = a[ai++];\n } else {\n r[i++] = b[bi++];\n }\n }\n if (ai < a.length) {\n r.push.apply(r, a.slice(ai));\n }\n if (bi < b.length) {\n r.push.apply(r, b.slice(bi));\n }\n return r;\n }\n return function sort(a) {\n if (a.length <= 1) {\n return a;\n }\n var m = Math.floor(a.length / 2);\n var left = a.slice(0, m);\n var right = a.slice(m);\n left = sort(left);\n right = sort(right);\n return merge(left, right);\n }(a);\n }\n function rad(degrees) {\n return degrees * DEG_TO_RAD;\n }\n function pow(p) {\n if (p) {\n return Math.pow(10, p);\n }\n return 1;\n }\n function round(value, precision) {\n var power = pow(precision);\n return Math.round(value * power) / power;\n }\n function valueOrDefault(value, defaultValue) {\n return defined(value) ? value : defaultValue;\n }\n function bindEvents(element, events) {\n for (var eventName in events) {\n var eventNames = eventName.trim().split(' ');\n for (var idx = 0; idx < eventNames.length; idx++) {\n element.addEventListener(eventNames[idx], events[eventName], false);\n }\n }\n }\n function elementOffset(element) {\n var box = element.getBoundingClientRect();\n var documentElement = document.documentElement;\n return {\n top: box.top + (window.pageYOffset || documentElement.scrollTop) - (documentElement.clientTop || 0),\n left: box.left + (window.pageXOffset || documentElement.scrollLeft) - (documentElement.clientLeft || 0)\n };\n }\n function elementStyles(element, styles) {\n var result = {};\n var style = window.getComputedStyle(element) || {};\n var stylesArray = Array.isArray(styles) ? styles : [styles];\n for (var idx = 0; idx < stylesArray.length; idx++) {\n var field = stylesArray[idx];\n result[field] = style[field];\n }\n return result;\n }\n function getPixels(value) {\n if (isNaN(value)) {\n return value;\n }\n return value + 'px';\n }\n function elementSize(element, size) {\n if (size) {\n var width = size.width;\n var height = size.height;\n if (defined(width)) {\n element.style.width = getPixels(width);\n }\n if (defined(height)) {\n element.style.height = getPixels(height);\n }\n } else {\n var size$1 = elementStyles(element, [\n 'width',\n 'height'\n ]);\n return {\n width: parseInt(size$1.width, 10),\n height: parseInt(size$1.height, 10)\n };\n }\n }\n function unbindEvents(element, events) {\n if (events === void 0) {\n events = {};\n }\n for (var name in events) {\n var eventNames = name.trim().split(' ');\n for (var idx = 0; idx < eventNames.length; idx++) {\n element.removeEventListener(eventNames[idx], events[name], false);\n }\n }\n }\n var util = {\n append: append,\n arabicToRoman: arabicToRoman,\n createPromise: createPromise,\n defined: defined,\n definitionId: definitionId,\n deg: deg,\n encodeBase64: encodeBase64,\n eventCoordinates: eventCoordinates,\n eventElement: eventElement,\n isTransparent: isTransparent,\n last: last,\n limitValue: limitValue,\n mergeSort: mergeSort,\n promiseAll: promiseAll,\n rad: rad,\n round: round,\n valueOrDefault: valueOrDefault,\n bindEvents: bindEvents,\n elementOffset: elementOffset,\n elementSize: elementSize,\n elementStyles: elementStyles,\n unbindEvents: unbindEvents,\n DEG_TO_RAD: DEG_TO_RAD,\n MAX_NUM: MAX_NUM,\n MIN_NUM: MIN_NUM\n };\n var toString = {}.toString;\n var OptionsStore = Class.extend({\n init: function (options, prefix) {\n var this$1 = this;\n if (prefix === void 0) {\n prefix = '';\n }\n this.prefix = prefix;\n for (var field in options) {\n var member = options[field];\n member = this$1._wrap(member, field);\n this$1[field] = member;\n }\n },\n get: function (field) {\n var parts = field.split('.');\n var result = this;\n while (parts.length && result) {\n var part = parts.shift();\n result = result[part];\n }\n return result;\n },\n set: function (field, value) {\n var current = this.get(field);\n if (current !== value) {\n this._set(field, this._wrap(value, field));\n this.optionsChange({\n field: this.prefix + field,\n value: value\n });\n }\n },\n _set: function (field, value) {\n var this$1 = this;\n var composite = field.indexOf('.') >= 0;\n var parentObj = this;\n var fieldName = field;\n if (composite) {\n var parts = fieldName.split('.');\n var prefix = this.prefix;\n while (parts.length > 1) {\n fieldName = parts.shift();\n prefix += fieldName + '.';\n var obj = parentObj[fieldName];\n if (!obj) {\n obj = new OptionsStore({}, prefix);\n obj.addObserver(this$1);\n parentObj[fieldName] = obj;\n }\n parentObj = obj;\n }\n fieldName = parts[0];\n }\n parentObj._clear(fieldName);\n parentObj[fieldName] = value;\n },\n _clear: function (field) {\n var current = this[field];\n if (current && current.removeObserver) {\n current.removeObserver(this);\n }\n },\n _wrap: function (object, field) {\n var type = toString.call(object);\n var wrapped = object;\n if (wrapped !== null && defined(wrapped) && type === '[object Object]') {\n if (!(object instanceof OptionsStore) && !(object instanceof Class)) {\n wrapped = new OptionsStore(wrapped, this.prefix + field + '.');\n }\n wrapped.addObserver(this);\n }\n return wrapped;\n }\n });\n ObserversMixin.extend(OptionsStore.prototype);\n function setAccessor(field) {\n return function (value) {\n if (this[field] !== value) {\n this[field] = value;\n this.geometryChange();\n }\n return this;\n };\n }\n function getAccessor(field) {\n return function () {\n return this[field];\n };\n }\n function defineAccessors(fn, fields) {\n for (var i = 0; i < fields.length; i++) {\n var name = fields[i];\n var capitalized = name.charAt(0).toUpperCase() + name.substring(1, name.length);\n fn['set' + capitalized] = setAccessor(name);\n fn['get' + capitalized] = getAccessor(name);\n }\n }\n var Matrix = Class.extend({\n init: function (a, b, c, d, e, f) {\n if (a === void 0) {\n a = 0;\n }\n if (b === void 0) {\n b = 0;\n }\n if (c === void 0) {\n c = 0;\n }\n if (d === void 0) {\n d = 0;\n }\n if (e === void 0) {\n e = 0;\n }\n if (f === void 0) {\n f = 0;\n }\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n },\n multiplyCopy: function (matrix) {\n return new Matrix(this.a * matrix.a + this.c * matrix.b, this.b * matrix.a + this.d * matrix.b, this.a * matrix.c + this.c * matrix.d, this.b * matrix.c + this.d * matrix.d, this.a * matrix.e + this.c * matrix.f + this.e, this.b * matrix.e + this.d * matrix.f + this.f);\n },\n invert: function () {\n var ref = this;\n var a = ref.a;\n var b = ref.b;\n var d = ref.c;\n var e = ref.d;\n var g = ref.e;\n var h = ref.f;\n var det = a * e - b * d;\n if (det === 0) {\n return null;\n }\n return new Matrix(e / det, -b / det, -d / det, a / det, (d * h - e * g) / det, (b * g - a * h) / det);\n },\n clone: function () {\n return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);\n },\n equals: function (other) {\n if (!other) {\n return false;\n }\n return this.a === other.a && this.b === other.b && this.c === other.c && this.d === other.d && this.e === other.e && this.f === other.f;\n },\n round: function (precision) {\n this.a = round(this.a, precision);\n this.b = round(this.b, precision);\n this.c = round(this.c, precision);\n this.d = round(this.d, precision);\n this.e = round(this.e, precision);\n this.f = round(this.f, precision);\n return this;\n },\n toArray: function (precision) {\n var result = [\n this.a,\n this.b,\n this.c,\n this.d,\n this.e,\n this.f\n ];\n if (defined(precision)) {\n for (var i = 0; i < result.length; i++) {\n result[i] = round(result[i], precision);\n }\n }\n return result;\n },\n toString: function (precision, separator) {\n if (separator === void 0) {\n separator = ',';\n }\n return this.toArray(precision).join(separator);\n }\n });\n Matrix.translate = function (x, y) {\n return new Matrix(1, 0, 0, 1, x, y);\n };\n Matrix.unit = function () {\n return new Matrix(1, 0, 0, 1, 0, 0);\n };\n Matrix.rotate = function (angle, x, y) {\n var matrix = new Matrix();\n matrix.a = Math.cos(rad(angle));\n matrix.b = Math.sin(rad(angle));\n matrix.c = -matrix.b;\n matrix.d = matrix.a;\n matrix.e = x - x * matrix.a + y * matrix.b || 0;\n matrix.f = y - y * matrix.a - x * matrix.b || 0;\n return matrix;\n };\n Matrix.scale = function (scaleX, scaleY) {\n return new Matrix(scaleX, 0, 0, scaleY, 0, 0);\n };\n Matrix.IDENTITY = Matrix.unit();\n function toMatrix(transformation) {\n if (transformation && typeof transformation.matrix === 'function') {\n return transformation.matrix();\n }\n return transformation;\n }\n var Point = Class.extend({\n init: function (x, y) {\n this.x = x || 0;\n this.y = y || 0;\n },\n equals: function (other) {\n return other && other.x === this.x && other.y === this.y;\n },\n clone: function () {\n return new Point(this.x, this.y);\n },\n rotate: function (angle, origin) {\n var originPoint = Point.create(origin) || Point.ZERO;\n return this.transform(Matrix.rotate(angle, originPoint.x, originPoint.y));\n },\n translate: function (x, y) {\n this.x += x;\n this.y += y;\n this.geometryChange();\n return this;\n },\n translateWith: function (point) {\n return this.translate(point.x, point.y);\n },\n move: function (x, y) {\n this.x = this.y = 0;\n return this.translate(x, y);\n },\n scale: function (scaleX, scaleY) {\n if (scaleY === void 0) {\n scaleY = scaleX;\n }\n this.x *= scaleX;\n this.y *= scaleY;\n this.geometryChange();\n return this;\n },\n scaleCopy: function (scaleX, scaleY) {\n return this.clone().scale(scaleX, scaleY);\n },\n transform: function (transformation) {\n var matrix = toMatrix(transformation);\n var ref = this;\n var x = ref.x;\n var y = ref.y;\n this.x = matrix.a * x + matrix.c * y + matrix.e;\n this.y = matrix.b * x + matrix.d * y + matrix.f;\n this.geometryChange();\n return this;\n },\n transformCopy: function (transformation) {\n var point = this.clone();\n if (transformation) {\n point.transform(transformation);\n }\n return point;\n },\n distanceTo: function (point) {\n var dx = this.x - point.x;\n var dy = this.y - point.y;\n return Math.sqrt(dx * dx + dy * dy);\n },\n round: function (digits) {\n this.x = round(this.x, digits);\n this.y = round(this.y, digits);\n this.geometryChange();\n return this;\n },\n toArray: function (digits) {\n var doRound = defined(digits);\n var x = doRound ? round(this.x, digits) : this.x;\n var y = doRound ? round(this.y, digits) : this.y;\n return [\n x,\n y\n ];\n },\n toString: function (digits, separator) {\n if (separator === void 0) {\n separator = ' ';\n }\n var ref = this;\n var x = ref.x;\n var y = ref.y;\n if (defined(digits)) {\n x = round(x, digits);\n y = round(y, digits);\n }\n return x + separator + y;\n }\n });\n Point.create = function (arg0, arg1) {\n if (defined(arg0)) {\n if (arg0 instanceof Point) {\n return arg0;\n } else if (arguments.length === 1 && arg0.length === 2) {\n return new Point(arg0[0], arg0[1]);\n }\n return new Point(arg0, arg1);\n }\n };\n Point.min = function () {\n var arguments$1 = arguments;\n var minX = MAX_NUM;\n var minY = MAX_NUM;\n for (var i = 0; i < arguments.length; i++) {\n var point = arguments$1[i];\n minX = Math.min(point.x, minX);\n minY = Math.min(point.y, minY);\n }\n return new Point(minX, minY);\n };\n Point.max = function () {\n var arguments$1 = arguments;\n var maxX = MIN_NUM;\n var maxY = MIN_NUM;\n for (var i = 0; i < arguments.length; i++) {\n var point = arguments$1[i];\n maxX = Math.max(point.x, maxX);\n maxY = Math.max(point.y, maxY);\n }\n return new Point(maxX, maxY);\n };\n Point.minPoint = function () {\n return new Point(MIN_NUM, MIN_NUM);\n };\n Point.maxPoint = function () {\n return new Point(MAX_NUM, MAX_NUM);\n };\n if (Object.defineProperties) {\n Object.defineProperties(Point, {\n ZERO: {\n get: function () {\n return new Point(0, 0);\n }\n }\n });\n }\n defineAccessors(Point.prototype, [\n 'x',\n 'y'\n ]);\n ObserversMixin.extend(Point.prototype);\n var Size = Class.extend({\n init: function (width, height) {\n this.width = width || 0;\n this.height = height || 0;\n },\n equals: function (other) {\n return other && other.width === this.width && other.height === this.height;\n },\n clone: function () {\n return new Size(this.width, this.height);\n },\n toArray: function (digits) {\n var doRound = defined(digits);\n var width = doRound ? round(this.width, digits) : this.width;\n var height = doRound ? round(this.height, digits) : this.height;\n return [\n width,\n height\n ];\n }\n });\n Size.create = function (arg0, arg1) {\n if (defined(arg0)) {\n if (arg0 instanceof Size) {\n return arg0;\n } else if (arguments.length === 1 && arg0.length === 2) {\n return new Size(arg0[0], arg0[1]);\n }\n return new Size(arg0, arg1);\n }\n };\n if (Object.defineProperties) {\n Object.defineProperties(Size, {\n ZERO: {\n get: function () {\n return new Size(0, 0);\n }\n }\n });\n }\n defineAccessors(Size.prototype, [\n 'width',\n 'height'\n ]);\n ObserversMixin.extend(Size.prototype);\n var Rect = Class.extend({\n init: function (origin, size) {\n if (origin === void 0) {\n origin = new Point();\n }\n if (size === void 0) {\n size = new Size();\n }\n this.setOrigin(origin);\n this.setSize(size);\n },\n clone: function () {\n return new Rect(this.origin.clone(), this.size.clone());\n },\n equals: function (other) {\n return other && other.origin.equals(this.origin) && other.size.equals(this.size);\n },\n setOrigin: function (value) {\n this._observerField('origin', Point.create(value));\n this.geometryChange();\n return this;\n },\n getOrigin: function () {\n return this.origin;\n },\n setSize: function (value) {\n this._observerField('size', Size.create(value));\n this.geometryChange();\n return this;\n },\n getSize: function () {\n return this.size;\n },\n width: function () {\n return this.size.width;\n },\n height: function () {\n return this.size.height;\n },\n topLeft: function () {\n return this.origin.clone();\n },\n bottomRight: function () {\n return this.origin.clone().translate(this.width(), this.height());\n },\n topRight: function () {\n return this.origin.clone().translate(this.width(), 0);\n },\n bottomLeft: function () {\n return this.origin.clone().translate(0, this.height());\n },\n center: function () {\n return this.origin.clone().translate(this.width() / 2, this.height() / 2);\n },\n bbox: function (matrix) {\n var tl = this.topLeft().transformCopy(matrix);\n var tr = this.topRight().transformCopy(matrix);\n var br = this.bottomRight().transformCopy(matrix);\n var bl = this.bottomLeft().transformCopy(matrix);\n return Rect.fromPoints(tl, tr, br, bl);\n },\n transformCopy: function (m) {\n return Rect.fromPoints(this.topLeft().transform(m), this.bottomRight().transform(m));\n },\n expand: function (x, y) {\n if (y === void 0) {\n y = x;\n }\n this.size.width += 2 * x;\n this.size.height += 2 * y;\n this.origin.translate(-x, -y);\n return this;\n },\n expandCopy: function (x, y) {\n return this.clone().expand(x, y);\n },\n containsPoint: function (point) {\n var origin = this.origin;\n var bottomRight = this.bottomRight();\n return !(point.x < origin.x || point.y < origin.y || bottomRight.x < point.x || bottomRight.y < point.y);\n },\n _isOnPath: function (point, width) {\n var rectOuter = this.expandCopy(width, width);\n var rectInner = this.expandCopy(-width, -width);\n return rectOuter.containsPoint(point) && !rectInner.containsPoint(point);\n }\n });\n Rect.fromPoints = function () {\n var topLeft = Point.min.apply(null, arguments);\n var bottomRight = Point.max.apply(null, arguments);\n var size = new Size(bottomRight.x - topLeft.x, bottomRight.y - topLeft.y);\n return new Rect(topLeft, size);\n };\n Rect.union = function (a, b) {\n return Rect.fromPoints(Point.min(a.topLeft(), b.topLeft()), Point.max(a.bottomRight(), b.bottomRight()));\n };\n Rect.intersect = function (a, b) {\n var rect1 = {\n left: a.topLeft().x,\n top: a.topLeft().y,\n right: a.bottomRight().x,\n bottom: a.bottomRight().y\n };\n var rect2 = {\n left: b.topLeft().x,\n top: b.topLeft().y,\n right: b.bottomRight().x,\n bottom: b.bottomRight().y\n };\n if (rect1.left <= rect2.right && rect2.left <= rect1.right && rect1.top <= rect2.bottom && rect2.top <= rect1.bottom) {\n return Rect.fromPoints(new Point(Math.max(rect1.left, rect2.left), Math.max(rect1.top, rect2.top)), new Point(Math.min(rect1.right, rect2.right), Math.min(rect1.bottom, rect2.bottom)));\n }\n };\n ObserversMixin.extend(Rect.prototype);\n var Transformation = Class.extend({\n init: function (matrix) {\n if (matrix === void 0) {\n matrix = Matrix.unit();\n }\n this._matrix = matrix;\n },\n clone: function () {\n return new Transformation(this._matrix.clone());\n },\n equals: function (other) {\n return other && other._matrix.equals(this._matrix);\n },\n translate: function (x, y) {\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(x, y));\n this._optionsChange();\n return this;\n },\n scale: function (scaleX, scaleY, origin) {\n if (scaleY === void 0) {\n scaleY = scaleX;\n }\n if (origin === void 0) {\n origin = null;\n }\n var originPoint = origin;\n if (originPoint) {\n originPoint = Point.create(originPoint);\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(originPoint.x, originPoint.y));\n }\n this._matrix = this._matrix.multiplyCopy(Matrix.scale(scaleX, scaleY));\n if (originPoint) {\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(-originPoint.x, -originPoint.y));\n }\n this._optionsChange();\n return this;\n },\n rotate: function (angle, origin) {\n var originPoint = Point.create(origin) || Point.ZERO;\n this._matrix = this._matrix.multiplyCopy(Matrix.rotate(angle, originPoint.x, originPoint.y));\n this._optionsChange();\n return this;\n },\n multiply: function (transformation) {\n var matrix = toMatrix(transformation);\n this._matrix = this._matrix.multiplyCopy(matrix);\n this._optionsChange();\n return this;\n },\n matrix: function (value) {\n if (value) {\n this._matrix = value;\n this._optionsChange();\n return this;\n }\n return this._matrix;\n },\n _optionsChange: function () {\n this.optionsChange({\n field: 'transform',\n value: this\n });\n }\n });\n ObserversMixin.extend(Transformation.prototype);\n function transform(matrix) {\n if (matrix === null) {\n return null;\n }\n if (matrix instanceof Transformation) {\n return matrix;\n }\n return new Transformation(matrix);\n }\n var Element$1 = Class.extend({\n init: function (options) {\n this._initOptions(options);\n },\n _initOptions: function (options) {\n if (options === void 0) {\n options = {};\n }\n var clip = options.clip;\n var transform$$1 = options.transform;\n if (transform$$1) {\n options.transform = transform(transform$$1);\n }\n if (clip && !clip.id) {\n clip.id = definitionId();\n }\n this.options = new OptionsStore(options);\n this.options.addObserver(this);\n },\n transform: function (value) {\n if (defined(value)) {\n this.options.set('transform', transform(value));\n } else {\n return this.options.get('transform');\n }\n },\n parentTransform: function () {\n var element = this;\n var parentMatrix;\n while (element.parent) {\n element = element.parent;\n var transformation = element.transform();\n if (transformation) {\n parentMatrix = transformation.matrix().multiplyCopy(parentMatrix || Matrix.unit());\n }\n }\n if (parentMatrix) {\n return transform(parentMatrix);\n }\n },\n currentTransform: function (parentTransform) {\n if (parentTransform === void 0) {\n parentTransform = this.parentTransform();\n }\n var elementTransform = this.transform();\n var elementMatrix = toMatrix(elementTransform);\n var parentMatrix = toMatrix(parentTransform);\n var combinedMatrix;\n if (elementMatrix && parentMatrix) {\n combinedMatrix = parentMatrix.multiplyCopy(elementMatrix);\n } else {\n combinedMatrix = elementMatrix || parentMatrix;\n }\n if (combinedMatrix) {\n return transform(combinedMatrix);\n }\n },\n visible: function (value) {\n if (defined(value)) {\n this.options.set('visible', value);\n return this;\n }\n return this.options.get('visible') !== false;\n },\n clip: function (value) {\n var options = this.options;\n if (defined(value)) {\n if (value && !value.id) {\n value.id = definitionId();\n }\n options.set('clip', value);\n return this;\n }\n return options.get('clip');\n },\n opacity: function (value) {\n if (defined(value)) {\n this.options.set('opacity', value);\n return this;\n }\n return valueOrDefault(this.options.get('opacity'), 1);\n },\n clippedBBox: function (transformation) {\n var bbox = this._clippedBBox(transformation);\n if (bbox) {\n var clip = this.clip();\n return clip ? Rect.intersect(bbox, clip.bbox(transformation)) : bbox;\n }\n },\n containsPoint: function (point, parentTransform) {\n if (this.visible()) {\n var transform$$1 = this.currentTransform(parentTransform);\n var transformedPoint = point;\n if (transform$$1) {\n transformedPoint = point.transformCopy(transform$$1.matrix().invert());\n }\n return this._hasFill() && this._containsPoint(transformedPoint) || this._isOnPath && this._hasStroke() && this._isOnPath(transformedPoint);\n }\n return false;\n },\n _hasFill: function () {\n var fill = this.options.fill;\n return fill && !isTransparent(fill.color);\n },\n _hasStroke: function () {\n var stroke = this.options.stroke;\n return stroke && stroke.width > 0 && !isTransparent(stroke.color);\n },\n _clippedBBox: function (transformation) {\n return this.bbox(transformation);\n }\n });\n Element$1.prototype.nodeType = 'Element';\n ObserversMixin.extend(Element$1.prototype);\n function ellipseExtremeAngles(center, rx, ry, matrix) {\n var extremeX = 0;\n var extremeY = 0;\n if (matrix) {\n extremeX = Math.atan2(matrix.c * ry, matrix.a * rx);\n if (matrix.b !== 0) {\n extremeY = Math.atan2(matrix.d * ry, matrix.b * rx);\n }\n }\n return {\n x: extremeX,\n y: extremeY\n };\n }\n var PI_DIV_2 = Math.PI / 2;\n var Circle$2 = Class.extend({\n init: function (center, radius) {\n if (center === void 0) {\n center = new Point();\n }\n if (radius === void 0) {\n radius = 0;\n }\n this.setCenter(center);\n this.setRadius(radius);\n },\n setCenter: function (value) {\n this._observerField('center', Point.create(value));\n this.geometryChange();\n return this;\n },\n getCenter: function () {\n return this.center;\n },\n equals: function (other) {\n return other && other.center.equals(this.center) && other.radius === this.radius;\n },\n clone: function () {\n return new Circle$2(this.center.clone(), this.radius);\n },\n pointAt: function (angle) {\n return this._pointAt(rad(angle));\n },\n bbox: function (matrix) {\n var this$1 = this;\n var extremeAngles = ellipseExtremeAngles(this.center, this.radius, this.radius, matrix);\n var minPoint = Point.maxPoint();\n var maxPoint = Point.minPoint();\n for (var i = 0; i < 4; i++) {\n var currentPointX = this$1._pointAt(extremeAngles.x + i * PI_DIV_2).transformCopy(matrix);\n var currentPointY = this$1._pointAt(extremeAngles.y + i * PI_DIV_2).transformCopy(matrix);\n var currentPoint = new Point(currentPointX.x, currentPointY.y);\n minPoint = Point.min(minPoint, currentPoint);\n maxPoint = Point.max(maxPoint, currentPoint);\n }\n return Rect.fromPoints(minPoint, maxPoint);\n },\n _pointAt: function (angle) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n return new Point(center.x + radius * Math.cos(angle), center.y + radius * Math.sin(angle));\n },\n containsPoint: function (point) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n var inCircle = Math.pow(point.x - center.x, 2) + Math.pow(point.y - center.y, 2) <= Math.pow(radius, 2);\n return inCircle;\n },\n _isOnPath: function (point, width) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n var pointDistance = center.distanceTo(point);\n return radius - width <= pointDistance && pointDistance <= radius + width;\n }\n });\n defineAccessors(Circle$2.prototype, ['radius']);\n ObserversMixin.extend(Circle$2.prototype);\n var GRADIENT = 'Gradient';\n var Paintable = {\n extend: function (proto) {\n proto.fill = this.fill;\n proto.stroke = this.stroke;\n },\n fill: function (color, opacity) {\n var options = this.options;\n if (defined(color)) {\n if (color && color.nodeType !== GRADIENT) {\n var newFill = { color: color };\n if (defined(opacity)) {\n newFill.opacity = opacity;\n }\n options.set('fill', newFill);\n } else {\n options.set('fill', color);\n }\n return this;\n }\n return options.get('fill');\n },\n stroke: function (color, width, opacity) {\n if (defined(color)) {\n this.options.set('stroke.color', color);\n if (defined(width)) {\n this.options.set('stroke.width', width);\n }\n if (defined(opacity)) {\n this.options.set('stroke.opacity', opacity);\n }\n return this;\n }\n return this.options.get('stroke');\n }\n };\n var IDENTITY_MATRIX_HASH = Matrix.IDENTITY.toString();\n var Measurable = {\n extend: function (proto) {\n proto.bbox = this.bbox;\n proto.geometryChange = this.geometryChange;\n },\n bbox: function (transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n var matrixHash = combinedMatrix ? combinedMatrix.toString() : IDENTITY_MATRIX_HASH;\n var bbox;\n if (this._bboxCache && this._matrixHash === matrixHash) {\n bbox = this._bboxCache.clone();\n } else {\n bbox = this._bbox(combinedMatrix);\n this._bboxCache = bbox ? bbox.clone() : null;\n this._matrixHash = matrixHash;\n }\n var strokeWidth = this.options.get('stroke.width');\n if (strokeWidth && bbox) {\n bbox.expand(strokeWidth / 2);\n }\n return bbox;\n },\n geometryChange: function () {\n delete this._bboxCache;\n this.trigger('geometryChange', { element: this });\n }\n };\n function geometryAccessor(name) {\n var fieldName = '_' + name;\n return function (value) {\n if (defined(value)) {\n this._observerField(fieldName, value);\n this.geometryChange();\n return this;\n }\n return this[fieldName];\n };\n }\n function defineGeometryAccessors(fn, names) {\n for (var i = 0; i < names.length; i++) {\n fn[names[i]] = geometryAccessor(names[i]);\n }\n }\n var DEFAULT_STROKE = '#000';\n var Circle = Element$1.extend({\n init: function (geometry, options) {\n if (geometry === void 0) {\n geometry = new Circle$2();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke(DEFAULT_STROKE);\n }\n },\n rawBBox: function () {\n return this._geometry.bbox();\n },\n _bbox: function (matrix) {\n return this._geometry.bbox(matrix);\n },\n _containsPoint: function (point) {\n return this.geometry().containsPoint(point);\n },\n _isOnPath: function (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n });\n Circle.prototype.nodeType = 'Circle';\n Paintable.extend(Circle.prototype);\n Measurable.extend(Circle.prototype);\n defineGeometryAccessors(Circle.prototype, ['geometry']);\n var PRECISION = 10;\n function close(a, b, tolerance) {\n if (tolerance === void 0) {\n tolerance = PRECISION;\n }\n return round(Math.abs(a - b), tolerance) === 0;\n }\n function closeOrLess(a, b, tolerance) {\n return a < b || close(a, b, tolerance);\n }\n function lineIntersection(p0, p1, p2, p3) {\n var s1x = p1.x - p0.x;\n var s2x = p3.x - p2.x;\n var s1y = p1.y - p0.y;\n var s2y = p3.y - p2.y;\n var nx = p0.x - p2.x;\n var ny = p0.y - p2.y;\n var d = s1x * s2y - s2x * s1y;\n var s = (s1x * ny - s1y * nx) / d;\n var t = (s2x * ny - s2y * nx) / d;\n if (s >= 0 && s <= 1 && t >= 0 && t <= 1) {\n return new Point(p0.x + t * s1x, p0.y + t * s1y);\n }\n }\n var MAX_INTERVAL = 45;\n var pow$1 = Math.pow;\n var Arc$2 = Class.extend({\n init: function (center, options) {\n if (center === void 0) {\n center = new Point();\n }\n if (options === void 0) {\n options = {};\n }\n this.setCenter(center);\n this.radiusX = options.radiusX;\n this.radiusY = options.radiusY || options.radiusX;\n this.startAngle = options.startAngle;\n this.endAngle = options.endAngle;\n this.anticlockwise = options.anticlockwise || false;\n this.xRotation = options.xRotation;\n },\n clone: function () {\n return new Arc$2(this.center, {\n radiusX: this.radiusX,\n radiusY: this.radiusY,\n startAngle: this.startAngle,\n endAngle: this.endAngle,\n anticlockwise: this.anticlockwise\n });\n },\n setCenter: function (value) {\n this._observerField('center', Point.create(value));\n this.geometryChange();\n return this;\n },\n getCenter: function () {\n return this.center;\n },\n pointAt: function (angle) {\n var center = this.center;\n var radian = rad(angle);\n return new Point(center.x + this.radiusX * Math.cos(radian), center.y + this.radiusY * Math.sin(radian));\n },\n curvePoints: function () {\n var this$1 = this;\n var startAngle = this.startAngle;\n var dir = this.anticlockwise ? -1 : 1;\n var curvePoints = [this.pointAt(startAngle)];\n var interval = this._arcInterval();\n var intervalAngle = interval.endAngle - interval.startAngle;\n var subIntervalsCount = Math.ceil(intervalAngle / MAX_INTERVAL);\n var subIntervalAngle = intervalAngle / subIntervalsCount;\n var currentAngle = startAngle;\n var transformation;\n if (this.xRotation) {\n transformation = transform().rotate(this.xRotation, this.center);\n }\n for (var i = 1; i <= subIntervalsCount; i++) {\n var nextAngle = currentAngle + dir * subIntervalAngle;\n var points = this$1._intervalCurvePoints(currentAngle, nextAngle, transformation);\n curvePoints.push(points.cp1, points.cp2, points.p2);\n currentAngle = nextAngle;\n }\n return curvePoints;\n },\n bbox: function (matrix) {\n var this$1 = this;\n var interval = this._arcInterval();\n var startAngle = interval.startAngle;\n var endAngle = interval.endAngle;\n var extremeAngles = ellipseExtremeAngles(this.center, this.radiusX, this.radiusY, matrix);\n var extremeX = deg(extremeAngles.x);\n var extremeY = deg(extremeAngles.y);\n var endPoint = this.pointAt(endAngle).transformCopy(matrix);\n var currentAngleX = bboxStartAngle(extremeX, startAngle);\n var currentAngleY = bboxStartAngle(extremeY, startAngle);\n var currentPoint = this.pointAt(startAngle).transformCopy(matrix);\n var minPoint = Point.min(currentPoint, endPoint);\n var maxPoint = Point.max(currentPoint, endPoint);\n while (currentAngleX < endAngle || currentAngleY < endAngle) {\n var currentPointX = void 0;\n if (currentAngleX < endAngle) {\n currentPointX = this$1.pointAt(currentAngleX).transformCopy(matrix);\n currentAngleX += 90;\n }\n var currentPointY = void 0;\n if (currentAngleY < endAngle) {\n currentPointY = this$1.pointAt(currentAngleY).transformCopy(matrix);\n currentAngleY += 90;\n }\n currentPoint = new Point(currentPointX.x, currentPointY.y);\n minPoint = Point.min(minPoint, currentPoint);\n maxPoint = Point.max(maxPoint, currentPoint);\n }\n return Rect.fromPoints(minPoint, maxPoint);\n },\n _arcInterval: function () {\n var ref = this;\n var startAngle = ref.startAngle;\n var endAngle = ref.endAngle;\n var anticlockwise = ref.anticlockwise;\n if (anticlockwise) {\n var oldStart = startAngle;\n startAngle = endAngle;\n endAngle = oldStart;\n }\n if (startAngle > endAngle || anticlockwise && startAngle === endAngle) {\n endAngle += 360;\n }\n return {\n startAngle: startAngle,\n endAngle: endAngle\n };\n },\n _intervalCurvePoints: function (startAngle, endAngle, transformation) {\n var p1 = this.pointAt(startAngle);\n var p2 = this.pointAt(endAngle);\n var p1Derivative = this._derivativeAt(startAngle);\n var p2Derivative = this._derivativeAt(endAngle);\n var t = (rad(endAngle) - rad(startAngle)) / 3;\n var cp1 = new Point(p1.x + t * p1Derivative.x, p1.y + t * p1Derivative.y);\n var cp2 = new Point(p2.x - t * p2Derivative.x, p2.y - t * p2Derivative.y);\n if (transformation) {\n p1.transform(transformation);\n p2.transform(transformation);\n cp1.transform(transformation);\n cp2.transform(transformation);\n }\n return {\n p1: p1,\n cp1: cp1,\n cp2: cp2,\n p2: p2\n };\n },\n _derivativeAt: function (angle) {\n var radian = rad(angle);\n return new Point(-this.radiusX * Math.sin(radian), this.radiusY * Math.cos(radian));\n },\n containsPoint: function (point) {\n var interval = this._arcInterval();\n var intervalAngle = interval.endAngle - interval.startAngle;\n var ref = this;\n var center = ref.center;\n var radiusX = ref.radiusX;\n var radiusY = ref.radiusY;\n var distance = center.distanceTo(point);\n var angleRad = Math.atan2(point.y - center.y, point.x - center.x);\n var pointRadius = radiusX * radiusY / Math.sqrt(pow$1(radiusX, 2) * pow$1(Math.sin(angleRad), 2) + pow$1(radiusY, 2) * pow$1(Math.cos(angleRad), 2));\n var startPoint = this.pointAt(this.startAngle).round(PRECISION);\n var endPoint = this.pointAt(this.endAngle).round(PRECISION);\n var intersection = lineIntersection(center, point.round(PRECISION), startPoint, endPoint);\n var containsPoint;\n if (intervalAngle < 180) {\n containsPoint = intersection && closeOrLess(center.distanceTo(intersection), distance) && closeOrLess(distance, pointRadius);\n } else {\n var angle = calculateAngle(center.x, center.y, radiusX, radiusY, point.x, point.y);\n if (angle !== 360) {\n angle = (360 + angle) % 360;\n }\n var inAngleRange = interval.startAngle <= angle && angle <= interval.endAngle;\n containsPoint = inAngleRange && closeOrLess(distance, pointRadius) || !inAngleRange && (!intersection || intersection.equals(point));\n }\n return containsPoint;\n },\n _isOnPath: function (point, width) {\n var interval = this._arcInterval();\n var center = this.center;\n var angle = calculateAngle(center.x, center.y, this.radiusX, this.radiusY, point.x, point.y);\n if (angle !== 360) {\n angle = (360 + angle) % 360;\n }\n var inAngleRange = interval.startAngle <= angle && angle <= interval.endAngle;\n return inAngleRange && this.pointAt(angle).distanceTo(point) <= width;\n }\n });\n Arc$2.fromPoints = function (start, end, rx, ry, largeArc, swipe, rotation) {\n var arcParameters = normalizeArcParameters({\n x1: start.x,\n y1: start.y,\n x2: end.x,\n y2: end.y,\n rx: rx,\n ry: ry,\n largeArc: largeArc,\n swipe: swipe,\n rotation: rotation\n });\n return new Arc$2(arcParameters.center, {\n startAngle: arcParameters.startAngle,\n endAngle: arcParameters.endAngle,\n radiusX: arcParameters.radiusX,\n radiusY: arcParameters.radiusY,\n xRotation: arcParameters.xRotation,\n anticlockwise: swipe === 0\n });\n };\n defineAccessors(Arc$2.prototype, [\n 'radiusX',\n 'radiusY',\n 'startAngle',\n 'endAngle',\n 'anticlockwise'\n ]);\n ObserversMixin.extend(Arc$2.prototype);\n function calculateAngle(cx, cy, rx, ry, x, y) {\n var cos = round((x - cx) / rx, 3);\n var sin = round((y - cy) / ry, 3);\n return round(deg(Math.atan2(sin, cos)));\n }\n function normalizeArcParameters(parameters) {\n var x1 = parameters.x1;\n var y1 = parameters.y1;\n var x2 = parameters.x2;\n var y2 = parameters.y2;\n var rx = parameters.rx;\n var ry = parameters.ry;\n var largeArc = parameters.largeArc;\n var swipe = parameters.swipe;\n var rotation = parameters.rotation;\n if (rotation === void 0) {\n rotation = 0;\n }\n var radians = rad(rotation);\n var cosine = Math.cos(radians);\n var sine = Math.sin(radians);\n var xT = cosine * (x1 - x2) / 2 + sine * (y1 - y2) / 2;\n var yT = -sine * (x1 - x2) / 2 + cosine * (y1 - y2) / 2;\n var sign = largeArc !== swipe ? 1 : -1;\n var xt2 = Math.pow(xT, 2);\n var yt2 = Math.pow(yT, 2);\n var rx2 = Math.pow(rx, 2);\n var ry2 = Math.pow(ry, 2);\n var delta = xt2 / rx2 + yt2 / ry2;\n if (delta > 1) {\n delta = Math.sqrt(xt2 / rx2 + yt2 / ry2);\n rx = delta * rx;\n rx2 = Math.pow(rx, 2);\n ry = delta * ry;\n ry2 = Math.pow(ry, 2);\n }\n var constT = sign * Math.sqrt((rx2 * ry2 - rx2 * yt2 - ry2 * xt2) / (rx2 * yt2 + ry2 * xt2));\n if (isNaN(constT)) {\n constT = 0;\n }\n var cxT = constT * (rx * yT) / ry;\n var cyT = -constT * (ry * xT) / rx;\n var cx = cosine * cxT - sine * cyT + (x1 + x2) / 2;\n var cy = sine * cxT + cosine * cyT + (y1 + y2) / 2;\n var uX = (xT - cxT) / rx;\n var uY = (yT - cyT) / ry;\n var vX = -(xT + cxT) / rx;\n var vY = -(yT + cyT) / ry;\n var startAngle = (uY >= 0 ? 1 : -1) * deg(Math.acos(uX / Math.sqrt(uX * uX + uY * uY)));\n var angleCosine = round((uX * vX + uY * vY) / (Math.sqrt(uX * uX + uY * uY) * Math.sqrt(vX * vX + vY * vY)), 10);\n var angle = (uX * vY - uY * vX >= 0 ? 1 : -1) * deg(Math.acos(angleCosine));\n if (!swipe && angle > 0) {\n angle -= 360;\n }\n if (swipe && angle < 0) {\n angle += 360;\n }\n var endAngle = startAngle + angle;\n var signEndAngle = endAngle >= 0 ? 1 : -1;\n endAngle = Math.abs(endAngle) % 360 * signEndAngle;\n return {\n center: new Point(cx, cy),\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: rx,\n radiusY: ry,\n xRotation: rotation\n };\n }\n function bboxStartAngle(angle, start) {\n var startAngle = angle;\n while (startAngle < start) {\n startAngle += 90;\n }\n return startAngle;\n }\n var push = [].push;\n var pop = [].pop;\n var splice = [].splice;\n var shift = [].shift;\n var slice = [].slice;\n var unshift = [].unshift;\n var ElementsArray = Class.extend({\n init: function (array) {\n if (array === void 0) {\n array = [];\n }\n this.length = 0;\n this._splice(0, array.length, array);\n },\n elements: function (value) {\n if (value) {\n this._splice(0, this.length, value);\n this._change();\n return this;\n }\n return this.slice(0);\n },\n push: function () {\n var elements = arguments;\n var result = push.apply(this, elements);\n this._add(elements);\n return result;\n },\n slice: function () {\n return slice.call(this);\n },\n pop: function () {\n var length = this.length;\n var result = pop.apply(this);\n if (length) {\n this._remove([result]);\n }\n return result;\n },\n splice: function (index, howMany) {\n var elements = slice.call(arguments, 2);\n var result = this._splice(index, howMany, elements);\n this._change();\n return result;\n },\n shift: function () {\n var length = this.length;\n var result = shift.apply(this);\n if (length) {\n this._remove([result]);\n }\n return result;\n },\n unshift: function () {\n var elements = arguments;\n var result = unshift.apply(this, elements);\n this._add(elements);\n return result;\n },\n indexOf: function (element) {\n var this$1 = this;\n var length = this.length;\n for (var idx = 0; idx < length; idx++) {\n if (this$1[idx] === element) {\n return idx;\n }\n }\n return -1;\n },\n _splice: function (index, howMany, elements) {\n var result = splice.apply(this, [\n index,\n howMany\n ].concat(elements));\n this._clearObserver(result);\n this._setObserver(elements);\n return result;\n },\n _add: function (elements) {\n this._setObserver(elements);\n this._change();\n },\n _remove: function (elements) {\n this._clearObserver(elements);\n this._change();\n },\n _setObserver: function (elements) {\n var this$1 = this;\n for (var idx = 0; idx < elements.length; idx++) {\n elements[idx].addObserver(this$1);\n }\n },\n _clearObserver: function (elements) {\n var this$1 = this;\n for (var idx = 0; idx < elements.length; idx++) {\n elements[idx].removeObserver(this$1);\n }\n },\n _change: function () {\n }\n });\n ObserversMixin.extend(ElementsArray.prototype);\n var GeometryElementsArray = ElementsArray.extend({\n _change: function () {\n this.geometryChange();\n }\n });\n function pointAccessor(name) {\n var fieldName = '_' + name;\n return function (value) {\n if (defined(value)) {\n this._observerField(fieldName, Point.create(value));\n this.geometryChange();\n return this;\n }\n return this[fieldName];\n };\n }\n function definePointAccessors(fn, names) {\n for (var i = 0; i < names.length; i++) {\n fn[names[i]] = pointAccessor(names[i]);\n }\n }\n function isOutOfEndPoint(endPoint, controlPoint, point) {\n var angle = deg(Math.atan2(controlPoint.y - endPoint.y, controlPoint.x - endPoint.x));\n var rotatedPoint = point.transformCopy(transform().rotate(-angle, endPoint));\n return rotatedPoint.x < endPoint.x;\n }\n function calculateCurveAt(t, field, points) {\n var t1 = 1 - t;\n return Math.pow(t1, 3) * points[0][field] + 3 * Math.pow(t1, 2) * t * points[1][field] + 3 * Math.pow(t, 2) * t1 * points[2][field] + Math.pow(t, 3) * points[3][field];\n }\n function toCubicPolynomial(points, field) {\n return [\n -points[0][field] + 3 * points[1][field] - 3 * points[2][field] + points[3][field],\n 3 * (points[0][field] - 2 * points[1][field] + points[2][field]),\n 3 * (-points[0][field] + points[1][field]),\n points[0][field]\n ];\n }\n var ComplexNumber = Class.extend({\n init: function (real, img) {\n if (real === void 0) {\n real = 0;\n }\n if (img === void 0) {\n img = 0;\n }\n this.real = real;\n this.img = img;\n },\n add: function (cNumber) {\n return new ComplexNumber(round(this.real + cNumber.real, PRECISION), round(this.img + cNumber.img, PRECISION));\n },\n addConstant: function (value) {\n return new ComplexNumber(this.real + value, this.img);\n },\n negate: function () {\n return new ComplexNumber(-this.real, -this.img);\n },\n multiply: function (cNumber) {\n return new ComplexNumber(this.real * cNumber.real - this.img * cNumber.img, this.real * cNumber.img + this.img * cNumber.real);\n },\n multiplyConstant: function (value) {\n return new ComplexNumber(this.real * value, this.img * value);\n },\n nthRoot: function (n) {\n var rad$$1 = Math.atan2(this.img, this.real);\n var r = Math.sqrt(Math.pow(this.img, 2) + Math.pow(this.real, 2));\n var nthR = Math.pow(r, 1 / n);\n return new ComplexNumber(nthR * Math.cos(rad$$1 / n), nthR * Math.sin(rad$$1 / n));\n },\n equals: function (cNumber) {\n return this.real === cNumber.real && this.img === cNumber.img;\n },\n isReal: function () {\n return this.img === 0;\n }\n });\n function numberSign(x) {\n return x < 0 ? -1 : 1;\n }\n function solveQuadraticEquation(a, b, c) {\n var squareRoot = Math.sqrt(Math.pow(b, 2) - 4 * a * c);\n return [\n (-b + squareRoot) / (2 * a),\n (-b - squareRoot) / (2 * a)\n ];\n }\n function solveCubicEquation(a, b, c, d) {\n if (a === 0) {\n return solveQuadraticEquation(b, c, d);\n }\n var p = (3 * a * c - Math.pow(b, 2)) / (3 * Math.pow(a, 2));\n var q = (2 * Math.pow(b, 3) - 9 * a * b * c + 27 * Math.pow(a, 2) * d) / (27 * Math.pow(a, 3));\n var Q = Math.pow(p / 3, 3) + Math.pow(q / 2, 2);\n var i = new ComplexNumber(0, 1);\n var b3a = -b / (3 * a);\n var x1, x2, y1, y2, y3, z1, z2;\n if (Q < 0) {\n x1 = new ComplexNumber(-q / 2, Math.sqrt(-Q)).nthRoot(3);\n x2 = new ComplexNumber(-q / 2, -Math.sqrt(-Q)).nthRoot(3);\n } else {\n x1 = -q / 2 + Math.sqrt(Q);\n x1 = new ComplexNumber(numberSign(x1) * Math.pow(Math.abs(x1), 1 / 3));\n x2 = -q / 2 - Math.sqrt(Q);\n x2 = new ComplexNumber(numberSign(x2) * Math.pow(Math.abs(x2), 1 / 3));\n }\n y1 = x1.add(x2);\n z1 = x1.add(x2).multiplyConstant(-1 / 2);\n z2 = x1.add(x2.negate()).multiplyConstant(Math.sqrt(3) / 2);\n y2 = z1.add(i.multiply(z2));\n y3 = z1.add(i.negate().multiply(z2));\n var result = [];\n if (y1.isReal()) {\n result.push(round(y1.real + b3a, PRECISION));\n }\n if (y2.isReal()) {\n result.push(round(y2.real + b3a, PRECISION));\n }\n if (y3.isReal()) {\n result.push(round(y3.real + b3a, PRECISION));\n }\n return result;\n }\n function hasRootsInRange(points, point, field, rootField, range) {\n var polynomial = toCubicPolynomial(points, rootField);\n var roots = solveCubicEquation(polynomial[0], polynomial[1], polynomial[2], polynomial[3] - point[rootField]);\n var intersection;\n for (var idx = 0; idx < roots.length; idx++) {\n if (0 <= roots[idx] && roots[idx] <= 1) {\n intersection = calculateCurveAt(roots[idx], field, points);\n if (Math.abs(intersection - point[field]) <= range) {\n return true;\n }\n }\n }\n }\n function curveIntersectionsCount(points, point, bbox) {\n var polynomial = toCubicPolynomial(points, 'x');\n var roots = solveCubicEquation(polynomial[0], polynomial[1], polynomial[2], polynomial[3] - point.x);\n var rayIntersection, intersectsRay;\n var count = 0;\n for (var i = 0; i < roots.length; i++) {\n rayIntersection = calculateCurveAt(roots[i], 'y', points);\n intersectsRay = close(rayIntersection, point.y) || rayIntersection > point.y;\n if (intersectsRay && ((roots[i] === 0 || roots[i] === 1) && bbox.bottomRight().x > point.x || 0 < roots[i] && roots[i] < 1)) {\n count++;\n }\n }\n return count;\n }\n function lineIntersectionsCount(a, b, point) {\n var intersects;\n if (a.x !== b.x) {\n var minX = Math.min(a.x, b.x);\n var maxX = Math.max(a.x, b.x);\n var minY = Math.min(a.y, b.y);\n var maxY = Math.max(a.y, b.y);\n var inRange = minX <= point.x && point.x < maxX;\n if (minY === maxY) {\n intersects = point.y <= minY && inRange;\n } else {\n intersects = inRange && (maxY - minY) * ((a.x - b.x) * (a.y - b.y) > 0 ? point.x - minX : maxX - point.x) / (maxX - minX) + minY - point.y >= 0;\n }\n }\n return intersects ? 1 : 0;\n }\n var Segment = Class.extend({\n init: function (anchor, controlIn, controlOut) {\n this.anchor(anchor || new Point());\n this.controlIn(controlIn);\n this.controlOut(controlOut);\n },\n bboxTo: function (toSegment, matrix) {\n var segmentAnchor = this.anchor().transformCopy(matrix);\n var toSegmentAnchor = toSegment.anchor().transformCopy(matrix);\n var rect;\n if (this.controlOut() && toSegment.controlIn()) {\n rect = this._curveBoundingBox(segmentAnchor, this.controlOut().transformCopy(matrix), toSegment.controlIn().transformCopy(matrix), toSegmentAnchor);\n } else {\n rect = this._lineBoundingBox(segmentAnchor, toSegmentAnchor);\n }\n return rect;\n },\n _lineBoundingBox: function (p1, p2) {\n return Rect.fromPoints(p1, p2);\n },\n _curveBoundingBox: function (p1, cp1, cp2, p2) {\n var points = [\n p1,\n cp1,\n cp2,\n p2\n ];\n var extremesX = this._curveExtremesFor(points, 'x');\n var extremesY = this._curveExtremesFor(points, 'y');\n var xLimits = arrayLimits([\n extremesX.min,\n extremesX.max,\n p1.x,\n p2.x\n ]);\n var yLimits = arrayLimits([\n extremesY.min,\n extremesY.max,\n p1.y,\n p2.y\n ]);\n return Rect.fromPoints(new Point(xLimits.min, yLimits.min), new Point(xLimits.max, yLimits.max));\n },\n _curveExtremesFor: function (points, field) {\n var extremes = this._curveExtremes(points[0][field], points[1][field], points[2][field], points[3][field]);\n return {\n min: calculateCurveAt(extremes.min, field, points),\n max: calculateCurveAt(extremes.max, field, points)\n };\n },\n _curveExtremes: function (x1, x2, x3, x4) {\n var a = x1 - 3 * x2 + 3 * x3 - x4;\n var b = -2 * (x1 - 2 * x2 + x3);\n var c = x1 - x2;\n var sqrt = Math.sqrt(b * b - 4 * a * c);\n var t1 = 0;\n var t2 = 1;\n if (a === 0) {\n if (b !== 0) {\n t1 = t2 = -c / b;\n }\n } else if (!isNaN(sqrt)) {\n t1 = (-b + sqrt) / (2 * a);\n t2 = (-b - sqrt) / (2 * a);\n }\n var min = Math.max(Math.min(t1, t2), 0);\n if (min < 0 || min > 1) {\n min = 0;\n }\n var max = Math.min(Math.max(t1, t2), 1);\n if (max > 1 || max < 0) {\n max = 1;\n }\n return {\n min: min,\n max: max\n };\n },\n _intersectionsTo: function (segment, point) {\n var intersectionsCount;\n if (this.controlOut() && segment.controlIn()) {\n intersectionsCount = curveIntersectionsCount([\n this.anchor(),\n this.controlOut(),\n segment.controlIn(),\n segment.anchor()\n ], point, this.bboxTo(segment));\n } else {\n intersectionsCount = lineIntersectionsCount(this.anchor(), segment.anchor(), point);\n }\n return intersectionsCount;\n },\n _isOnCurveTo: function (segment, point, width, endSegment) {\n var bbox = this.bboxTo(segment).expand(width, width);\n if (bbox.containsPoint(point)) {\n var p1 = this.anchor();\n var p2 = this.controlOut();\n var p3 = segment.controlIn();\n var p4 = segment.anchor();\n if (endSegment === 'start' && p1.distanceTo(point) <= width) {\n return !isOutOfEndPoint(p1, p2, point);\n } else if (endSegment === 'end' && p4.distanceTo(point) <= width) {\n return !isOutOfEndPoint(p4, p3, point);\n }\n var points = [\n p1,\n p2,\n p3,\n p4\n ];\n if (hasRootsInRange(points, point, 'x', 'y', width) || hasRootsInRange(points, point, 'y', 'x', width)) {\n return true;\n }\n var rotation = transform().rotate(45, point);\n var rotatedPoints = [\n p1.transformCopy(rotation),\n p2.transformCopy(rotation),\n p3.transformCopy(rotation),\n p4.transformCopy(rotation)\n ];\n return hasRootsInRange(rotatedPoints, point, 'x', 'y', width) || hasRootsInRange(rotatedPoints, point, 'y', 'x', width);\n }\n },\n _isOnLineTo: function (segment, point, width) {\n var p1 = this.anchor();\n var p2 = segment.anchor();\n var angle = deg(Math.atan2(p2.y - p1.y, p2.x - p1.x));\n var rect = new Rect([\n p1.x,\n p1.y - width / 2\n ], [\n p1.distanceTo(p2),\n width\n ]);\n return rect.containsPoint(point.transformCopy(transform().rotate(-angle, p1)));\n },\n _isOnPathTo: function (segment, point, width, endSegment) {\n var isOnPath;\n if (this.controlOut() && segment.controlIn()) {\n isOnPath = this._isOnCurveTo(segment, point, width / 2, endSegment);\n } else {\n isOnPath = this._isOnLineTo(segment, point, width);\n }\n return isOnPath;\n }\n });\n definePointAccessors(Segment.prototype, [\n 'anchor',\n 'controlIn',\n 'controlOut'\n ]);\n ObserversMixin.extend(Segment.prototype);\n function arrayLimits(arr) {\n var length = arr.length;\n var min = MAX_NUM;\n var max = MIN_NUM;\n for (var i = 0; i < length; i++) {\n max = Math.max(max, arr[i]);\n min = Math.min(min, arr[i]);\n }\n return {\n min: min,\n max: max\n };\n }\n function elementsBoundingBox(elements, applyTransform, transformation) {\n var boundingBox;\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n if (element.visible()) {\n var elementBoundingBox = applyTransform ? element.bbox(transformation) : element.rawBBox();\n if (elementBoundingBox) {\n if (boundingBox) {\n boundingBox = Rect.union(boundingBox, elementBoundingBox);\n } else {\n boundingBox = elementBoundingBox;\n }\n }\n }\n }\n return boundingBox;\n }\n function elementsClippedBoundingBox(elements, transformation) {\n var boundingBox;\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n if (element.visible()) {\n var elementBoundingBox = element.clippedBBox(transformation);\n if (elementBoundingBox) {\n if (boundingBox) {\n boundingBox = Rect.union(boundingBox, elementBoundingBox);\n } else {\n boundingBox = elementBoundingBox;\n }\n }\n }\n }\n return boundingBox;\n }\n var MultiPath = Element$1.extend({\n init: function (options) {\n Element$1.fn.init.call(this, options);\n this.paths = new GeometryElementsArray();\n this.paths.addObserver(this);\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n }\n },\n moveTo: function (x, y) {\n var path = new Path();\n path.moveTo(x, y);\n this.paths.push(path);\n return this;\n },\n lineTo: function (x, y) {\n if (this.paths.length > 0) {\n last(this.paths).lineTo(x, y);\n }\n return this;\n },\n curveTo: function (controlOut, controlIn, point) {\n if (this.paths.length > 0) {\n last(this.paths).curveTo(controlOut, controlIn, point);\n }\n return this;\n },\n arc: function (startAngle, endAngle, radiusX, radiusY, anticlockwise) {\n if (this.paths.length > 0) {\n last(this.paths).arc(startAngle, endAngle, radiusX, radiusY, anticlockwise);\n }\n return this;\n },\n arcTo: function (end, rx, ry, largeArc, swipe, rotation) {\n if (this.paths.length > 0) {\n last(this.paths).arcTo(end, rx, ry, largeArc, swipe, rotation);\n }\n return this;\n },\n close: function () {\n if (this.paths.length > 0) {\n last(this.paths).close();\n }\n return this;\n },\n _bbox: function (matrix) {\n return elementsBoundingBox(this.paths, true, matrix);\n },\n rawBBox: function () {\n return elementsBoundingBox(this.paths, false);\n },\n _containsPoint: function (point) {\n var paths = this.paths;\n for (var idx = 0; idx < paths.length; idx++) {\n if (paths[idx]._containsPoint(point)) {\n return true;\n }\n }\n return false;\n },\n _isOnPath: function (point) {\n var paths = this.paths;\n var width = this.options.stroke.width;\n for (var idx = 0; idx < paths.length; idx++) {\n if (paths[idx]._isOnPath(point, width)) {\n return true;\n }\n }\n return false;\n },\n _clippedBBox: function (transformation) {\n return elementsClippedBoundingBox(this.paths, this.currentTransform(transformation));\n }\n });\n MultiPath.prototype.nodeType = 'MultiPath';\n Paintable.extend(MultiPath.prototype);\n Measurable.extend(MultiPath.prototype);\n var ShapeMap = {\n l: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n for (var i = 0; i < parameters.length; i += 2) {\n var point = new Point(parameters[i], parameters[i + 1]);\n if (options.isRelative) {\n point.translateWith(position);\n }\n path.lineTo(point.x, point.y);\n position.x = point.x;\n position.y = point.y;\n }\n },\n c: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n for (var i = 0; i < parameters.length; i += 6) {\n var controlOut = new Point(parameters[i], parameters[i + 1]);\n var controlIn = new Point(parameters[i + 2], parameters[i + 3]);\n var point = new Point(parameters[i + 4], parameters[i + 5]);\n if (options.isRelative) {\n controlIn.translateWith(position);\n controlOut.translateWith(position);\n point.translateWith(position);\n }\n path.curveTo(controlOut, controlIn, point);\n position.x = point.x;\n position.y = point.y;\n }\n },\n v: function (path, options) {\n var value = options.isRelative ? 0 : options.position.x;\n toLineParamaters(options.parameters, true, value);\n this.l(path, options);\n },\n h: function (path, options) {\n var value = options.isRelative ? 0 : options.position.y;\n toLineParamaters(options.parameters, false, value);\n this.l(path, options);\n },\n a: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n for (var i = 0; i < parameters.length; i += 7) {\n var radiusX = parameters[i];\n var radiusY = parameters[i + 1];\n var rotation = parameters[i + 2];\n var largeArc = parameters[i + 3];\n var swipe = parameters[i + 4];\n var endPoint = new Point(parameters[i + 5], parameters[i + 6]);\n if (options.isRelative) {\n endPoint.translateWith(position);\n }\n if (position.x !== endPoint.x || position.y !== endPoint.y) {\n path.arcTo(endPoint, radiusX, radiusY, largeArc, swipe, rotation);\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n }\n },\n s: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n var previousCommand = options.previousCommand;\n var lastControlIn;\n if (previousCommand === 's' || previousCommand === 'c') {\n lastControlIn = last(last(path.paths).segments).controlIn();\n }\n for (var i = 0; i < parameters.length; i += 4) {\n var controlIn = new Point(parameters[i], parameters[i + 1]);\n var endPoint = new Point(parameters[i + 2], parameters[i + 3]);\n var controlOut = void 0;\n if (options.isRelative) {\n controlIn.translateWith(position);\n endPoint.translateWith(position);\n }\n if (lastControlIn) {\n controlOut = reflectionPoint(lastControlIn, position);\n } else {\n controlOut = position.clone();\n }\n lastControlIn = controlIn;\n path.curveTo(controlOut, controlIn, endPoint);\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n },\n q: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n for (var i = 0; i < parameters.length; i += 4) {\n var controlPoint = new Point(parameters[i], parameters[i + 1]);\n var endPoint = new Point(parameters[i + 2], parameters[i + 3]);\n if (options.isRelative) {\n controlPoint.translateWith(position);\n endPoint.translateWith(position);\n }\n var cubicControlPoints = quadraticToCubicControlPoints(position, controlPoint, endPoint);\n path.curveTo(cubicControlPoints.controlOut, cubicControlPoints.controlIn, endPoint);\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n },\n t: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n var previousCommand = options.previousCommand;\n var controlPoint;\n if (previousCommand === 'q' || previousCommand === 't') {\n var lastSegment = last(last(path.paths).segments);\n controlPoint = lastSegment.controlIn().clone().translateWith(position.scaleCopy(-1 / 3)).scale(3 / 2);\n }\n for (var i = 0; i < parameters.length; i += 2) {\n var endPoint = new Point(parameters[i], parameters[i + 1]);\n if (options.isRelative) {\n endPoint.translateWith(position);\n }\n if (controlPoint) {\n controlPoint = reflectionPoint(controlPoint, position);\n } else {\n controlPoint = position.clone();\n }\n var cubicControlPoints = quadraticToCubicControlPoints(position, controlPoint, endPoint);\n path.curveTo(cubicControlPoints.controlOut, cubicControlPoints.controlIn, endPoint);\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n }\n };\n function toLineParamaters(parameters, isVertical, value) {\n var insertPosition = isVertical ? 0 : 1;\n for (var i = 0; i < parameters.length; i += 2) {\n parameters.splice(i + insertPosition, 0, value);\n }\n }\n function reflectionPoint(point, center) {\n if (point && center) {\n return center.scaleCopy(2).translate(-point.x, -point.y);\n }\n }\n var third = 1 / 3;\n function quadraticToCubicControlPoints(position, controlPoint, endPoint) {\n var scaledPoint = controlPoint.clone().scale(2 / 3);\n return {\n controlOut: scaledPoint.clone().translateWith(position.scaleCopy(third)),\n controlIn: scaledPoint.translateWith(endPoint.scaleCopy(third))\n };\n }\n var SEGMENT_REGEX = /([a-df-z]{1})([^a-df-z]*)(z)?/gi;\n var SPLIT_REGEX = /[,\\s]?([+\\-]?(?:\\d*\\.\\d+|\\d+)(?:[eE][+\\-]?\\d+)?)/g;\n var MOVE = 'm';\n var CLOSE = 'z';\n function parseParameters(str) {\n var parameters = [];\n str.replace(SPLIT_REGEX, function (match, number) {\n parameters.push(parseFloat(number));\n });\n return parameters;\n }\n var PathParser = Class.extend({\n parse: function (str, options) {\n var multiPath = new MultiPath(options);\n var position = new Point();\n var previousCommand;\n str.replace(SEGMENT_REGEX, function (match, element, params, closePath) {\n var command = element.toLowerCase();\n var isRelative = command === element;\n var parameters = parseParameters(params.trim());\n if (command === MOVE) {\n if (isRelative) {\n position.x += parameters[0];\n position.y += parameters[1];\n } else {\n position.x = parameters[0];\n position.y = parameters[1];\n }\n multiPath.moveTo(position.x, position.y);\n if (parameters.length > 2) {\n command = 'l';\n parameters.splice(0, 2);\n }\n }\n if (ShapeMap[command]) {\n ShapeMap[command](multiPath, {\n parameters: parameters,\n position: position,\n isRelative: isRelative,\n previousCommand: previousCommand\n });\n if (closePath && closePath.toLowerCase() === CLOSE) {\n multiPath.close();\n }\n } else if (command !== MOVE) {\n throw new Error('Error while parsing SVG path. Unsupported command: ' + command);\n }\n previousCommand = command;\n });\n return multiPath;\n }\n });\n PathParser.current = new PathParser();\n var Path = Element$1.extend({\n init: function (options) {\n Element$1.fn.init.call(this, options);\n this.segments = new GeometryElementsArray();\n this.segments.addObserver(this);\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n if (!defined(this.options.stroke.lineJoin)) {\n this.options.set('stroke.lineJoin', 'miter');\n }\n }\n },\n moveTo: function (x, y) {\n this.suspend();\n this.segments.elements([]);\n this.resume();\n this.lineTo(x, y);\n return this;\n },\n lineTo: function (x, y) {\n var point = defined(y) ? new Point(x, y) : x;\n var segment = new Segment(point);\n this.segments.push(segment);\n return this;\n },\n curveTo: function (controlOut, controlIn, point) {\n if (this.segments.length > 0) {\n var lastSegment = last(this.segments);\n var segment = new Segment(point, controlIn);\n this.suspend();\n lastSegment.controlOut(controlOut);\n this.resume();\n this.segments.push(segment);\n }\n return this;\n },\n arc: function (startAngle, endAngle, radiusX, radiusY, anticlockwise) {\n if (this.segments.length > 0) {\n var lastSegment = last(this.segments);\n var anchor = lastSegment.anchor();\n var start = rad(startAngle);\n var center = new Point(anchor.x - radiusX * Math.cos(start), anchor.y - radiusY * Math.sin(start));\n var arc = new Arc$2(center, {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: radiusX,\n radiusY: radiusY,\n anticlockwise: anticlockwise\n });\n this._addArcSegments(arc);\n }\n return this;\n },\n arcTo: function (end, rx, ry, largeArc, swipe, rotation) {\n if (this.segments.length > 0) {\n var lastSegment = last(this.segments);\n var anchor = lastSegment.anchor();\n var arc = Arc$2.fromPoints(anchor, end, rx, ry, largeArc, swipe, rotation);\n this._addArcSegments(arc);\n }\n return this;\n },\n _addArcSegments: function (arc) {\n var this$1 = this;\n this.suspend();\n var curvePoints = arc.curvePoints();\n for (var i = 1; i < curvePoints.length; i += 3) {\n this$1.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\n }\n this.resume();\n this.geometryChange();\n },\n close: function () {\n this.options.closed = true;\n this.geometryChange();\n return this;\n },\n rawBBox: function () {\n return this._bbox();\n },\n _containsPoint: function (point) {\n var segments = this.segments;\n var length = segments.length;\n var intersectionsCount = 0;\n var previous, current;\n for (var idx = 1; idx < length; idx++) {\n previous = segments[idx - 1];\n current = segments[idx];\n intersectionsCount += previous._intersectionsTo(current, point);\n }\n if (this.options.closed || !segments[0].anchor().equals(segments[length - 1].anchor())) {\n intersectionsCount += lineIntersectionsCount(segments[0].anchor(), segments[length - 1].anchor(), point);\n }\n return intersectionsCount % 2 !== 0;\n },\n _isOnPath: function (point, width) {\n var segments = this.segments;\n var length = segments.length;\n var pathWidth = width || this.options.stroke.width;\n if (length > 1) {\n if (segments[0]._isOnPathTo(segments[1], point, pathWidth, 'start')) {\n return true;\n }\n for (var idx = 2; idx <= length - 2; idx++) {\n if (segments[idx - 1]._isOnPathTo(segments[idx], point, pathWidth)) {\n return true;\n }\n }\n if (segments[length - 2]._isOnPathTo(segments[length - 1], point, pathWidth, 'end')) {\n return true;\n }\n }\n return false;\n },\n _bbox: function (matrix) {\n var segments = this.segments;\n var length = segments.length;\n var boundingBox;\n if (length === 1) {\n var anchor = segments[0].anchor().transformCopy(matrix);\n boundingBox = new Rect(anchor, Size.ZERO);\n } else if (length > 0) {\n for (var i = 1; i < length; i++) {\n var segmentBox = segments[i - 1].bboxTo(segments[i], matrix);\n if (boundingBox) {\n boundingBox = Rect.union(boundingBox, segmentBox);\n } else {\n boundingBox = segmentBox;\n }\n }\n }\n return boundingBox;\n }\n });\n Path.fromRect = function (rect, options) {\n return new Path(options).moveTo(rect.topLeft()).lineTo(rect.topRight()).lineTo(rect.bottomRight()).lineTo(rect.bottomLeft()).close();\n };\n Path.fromPoints = function (points, options) {\n if (points) {\n var path = new Path(options);\n for (var i = 0; i < points.length; i++) {\n var point = Point.create(points[i]);\n if (point) {\n if (i === 0) {\n path.moveTo(point);\n } else {\n path.lineTo(point);\n }\n }\n }\n return path;\n }\n };\n Path.fromArc = function (arc, options) {\n var path = new Path(options);\n var startAngle = arc.startAngle;\n var start = arc.pointAt(startAngle);\n path.moveTo(start.x, start.y);\n path.arc(startAngle, arc.endAngle, arc.radiusX, arc.radiusY, arc.anticlockwise);\n return path;\n };\n Path.prototype.nodeType = 'Path';\n Paintable.extend(Path.prototype);\n Measurable.extend(Path.prototype);\n Path.parse = function (str, options) {\n return PathParser.current.parse(str, options);\n };\n var DEFAULT_STROKE$1 = '#000';\n var Arc = Element$1.extend({\n init: function (geometry, options) {\n if (geometry === void 0) {\n geometry = new Arc$2();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke(DEFAULT_STROKE$1);\n }\n },\n _bbox: function (matrix) {\n return this._geometry.bbox(matrix);\n },\n rawBBox: function () {\n return this.geometry().bbox();\n },\n toPath: function () {\n var path = new Path();\n var curvePoints = this.geometry().curvePoints();\n if (curvePoints.length > 0) {\n path.moveTo(curvePoints[0].x, curvePoints[0].y);\n for (var i = 1; i < curvePoints.length; i += 3) {\n path.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\n }\n }\n return path;\n },\n _containsPoint: function (point) {\n return this.geometry().containsPoint(point);\n },\n _isOnPath: function (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n });\n Arc.prototype.nodeType = 'Arc';\n Paintable.extend(Arc.prototype);\n Measurable.extend(Arc.prototype);\n defineGeometryAccessors(Arc.prototype, ['geometry']);\n var DEFAULT_FONT = '12px sans-serif';\n var DEFAULT_FILL = '#000';\n var Text = Element$1.extend({\n init: function (content, position, options) {\n if (position === void 0) {\n position = new Point();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.content(content);\n this.position(position);\n if (!this.options.font) {\n this.options.font = DEFAULT_FONT;\n }\n if (!defined(this.options.fill)) {\n this.fill(DEFAULT_FILL);\n }\n },\n content: function (value) {\n if (defined(value)) {\n this.options.set('content', value);\n return this;\n }\n return this.options.get('content');\n },\n measure: function () {\n var metrics = kendoUtil.measureText(this.content(), { font: this.options.get('font') });\n return metrics;\n },\n rect: function () {\n var size = this.measure();\n var pos = this.position().clone();\n return new Rect(pos, [\n size.width,\n size.height\n ]);\n },\n bbox: function (transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n return this.rect().bbox(combinedMatrix);\n },\n rawBBox: function () {\n return this.rect().bbox();\n },\n _containsPoint: function (point) {\n return this.rect().containsPoint(point);\n }\n });\n Text.prototype.nodeType = 'Text';\n Paintable.extend(Text.prototype);\n definePointAccessors(Text.prototype, ['position']);\n var Image$1 = Element$1.extend({\n init: function (src, rect, options) {\n if (rect === void 0) {\n rect = new Rect();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.src(src);\n this.rect(rect);\n },\n src: function (value) {\n if (defined(value)) {\n this.options.set('src', value);\n return this;\n }\n return this.options.get('src');\n },\n bbox: function (transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n return this._rect.bbox(combinedMatrix);\n },\n rawBBox: function () {\n return this._rect.bbox();\n },\n _containsPoint: function (point) {\n return this._rect.containsPoint(point);\n },\n _hasFill: function () {\n return this.src();\n }\n });\n Image$1.prototype.nodeType = 'Image';\n defineGeometryAccessors(Image$1.prototype, ['rect']);\n var Traversable = {\n extend: function (proto, childrenField) {\n proto.traverse = function (callback) {\n var children = this[childrenField];\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if (child.traverse) {\n child.traverse(callback);\n } else {\n callback(child);\n }\n }\n return this;\n };\n }\n };\n var Group = Element$1.extend({\n init: function (options) {\n Element$1.fn.init.call(this, options);\n this.children = [];\n },\n childrenChange: function (action, items, index) {\n this.trigger('childrenChange', {\n action: action,\n items: items,\n index: index\n });\n },\n append: function () {\n append(this.children, arguments);\n this._reparent(arguments, this);\n this.childrenChange('add', arguments);\n return this;\n },\n insert: function (index, element) {\n this.children.splice(index, 0, element);\n element.parent = this;\n this.childrenChange('add', [element], index);\n return this;\n },\n insertAt: function (element, index) {\n return this.insert(index, element);\n },\n remove: function (element) {\n var index = this.children.indexOf(element);\n if (index >= 0) {\n this.children.splice(index, 1);\n element.parent = null;\n this.childrenChange('remove', [element], index);\n }\n return this;\n },\n removeAt: function (index) {\n if (0 <= index && index < this.children.length) {\n var element = this.children[index];\n this.children.splice(index, 1);\n element.parent = null;\n this.childrenChange('remove', [element], index);\n }\n return this;\n },\n clear: function () {\n var items = this.children;\n this.children = [];\n this._reparent(items, null);\n this.childrenChange('remove', items, 0);\n return this;\n },\n bbox: function (transformation) {\n return elementsBoundingBox(this.children, true, this.currentTransform(transformation));\n },\n rawBBox: function () {\n return elementsBoundingBox(this.children, false);\n },\n _clippedBBox: function (transformation) {\n return elementsClippedBoundingBox(this.children, this.currentTransform(transformation));\n },\n currentTransform: function (transformation) {\n return Element$1.prototype.currentTransform.call(this, transformation) || null;\n },\n containsPoint: function (point, parentTransform) {\n if (this.visible()) {\n var children = this.children;\n var transform = this.currentTransform(parentTransform);\n for (var idx = 0; idx < children.length; idx++) {\n if (children[idx].containsPoint(point, transform)) {\n return true;\n }\n }\n }\n return false;\n },\n _reparent: function (elements, newParent) {\n var this$1 = this;\n for (var i = 0; i < elements.length; i++) {\n var child = elements[i];\n var parent = child.parent;\n if (parent && parent !== this$1 && parent.remove) {\n parent.remove(child);\n }\n child.parent = newParent;\n }\n }\n });\n Group.prototype.nodeType = 'Group';\n Traversable.extend(Group.prototype, 'children');\n function translateToPoint(point, bbox, element) {\n var transofrm = element.transform() || transform();\n var matrix = transofrm.matrix();\n matrix.e += point.x - bbox.origin.x;\n matrix.f += point.y - bbox.origin.y;\n transofrm.matrix(matrix);\n element.transform(transofrm);\n }\n function alignStart(size, rect, align, axis, sizeField) {\n var start;\n if (align === 'start') {\n start = rect.origin[axis];\n } else if (align === 'end') {\n start = rect.origin[axis] + rect.size[sizeField] - size;\n } else {\n start = rect.origin[axis] + (rect.size[sizeField] - size) / 2;\n }\n return start;\n }\n function alignStartReverse(size, rect, align, axis, sizeField) {\n var start;\n if (align === 'start') {\n start = rect.origin[axis] + rect.size[sizeField] - size;\n } else if (align === 'end') {\n start = rect.origin[axis];\n } else {\n start = rect.origin[axis] + (rect.size[sizeField] - size) / 2;\n }\n return start;\n }\n var DEFAULT_OPTIONS = {\n alignContent: 'start',\n justifyContent: 'start',\n alignItems: 'start',\n spacing: 0,\n orientation: 'horizontal',\n lineSpacing: 0,\n wrap: true,\n revers: false\n };\n var forEach = function (elements, callback) {\n elements.forEach(callback);\n };\n var forEachReverse = function (elements, callback) {\n var length = elements.length;\n for (var idx = length - 1; idx >= 0; idx--) {\n callback(elements[idx], idx);\n }\n };\n var Layout = Group.extend({\n init: function (rect, options) {\n Group.fn.init.call(this, $.extend({}, DEFAULT_OPTIONS, options));\n this._rect = rect;\n this._fieldMap = {};\n },\n rect: function (value) {\n if (value) {\n this._rect = value;\n return this;\n }\n return this._rect;\n },\n _initMap: function () {\n var options = this.options;\n var fieldMap = this._fieldMap;\n if (options.orientation === 'horizontal') {\n fieldMap.sizeField = 'width';\n fieldMap.groupsSizeField = 'height';\n fieldMap.groupAxis = 'x';\n fieldMap.groupsAxis = 'y';\n } else {\n fieldMap.sizeField = 'height';\n fieldMap.groupsSizeField = 'width';\n fieldMap.groupAxis = 'y';\n fieldMap.groupsAxis = 'x';\n }\n if (options.reverse) {\n this.forEach = forEachReverse;\n this.justifyAlign = alignStartReverse;\n } else {\n this.forEach = forEach;\n this.justifyAlign = alignStart;\n }\n },\n reflow: function () {\n var this$1 = this;\n if (!this._rect || this.children.length === 0) {\n return;\n }\n this._initMap();\n if (this.options.transform) {\n this.transform(null);\n }\n var options = this.options;\n var rect = this._rect;\n var ref = this._initGroups();\n var groups = ref.groups;\n var groupsSize = ref.groupsSize;\n var ref$1 = this._fieldMap;\n var sizeField = ref$1.sizeField;\n var groupsSizeField = ref$1.groupsSizeField;\n var groupAxis = ref$1.groupAxis;\n var groupsAxis = ref$1.groupsAxis;\n var groupOrigin = new Point();\n var elementOrigin = new Point();\n var size = new Size();\n var groupStart = alignStart(groupsSize, rect, options.alignContent, groupsAxis, groupsSizeField);\n var elementStart, group, groupBox;\n var arrangeElements = function (bbox, idx) {\n var element = group.elements[idx];\n elementOrigin[groupAxis] = elementStart;\n elementOrigin[groupsAxis] = alignStart(bbox.size[groupsSizeField], groupBox, options.alignItems, groupsAxis, groupsSizeField);\n translateToPoint(elementOrigin, bbox, element);\n elementStart += bbox.size[sizeField] + options.spacing;\n };\n for (var groupIdx = 0; groupIdx < groups.length; groupIdx++) {\n group = groups[groupIdx];\n groupOrigin[groupAxis] = elementStart = this$1.justifyAlign(group.size, rect, options.justifyContent, groupAxis, sizeField);\n groupOrigin[groupsAxis] = groupStart;\n size[sizeField] = group.size;\n size[groupsSizeField] = group.lineSize;\n groupBox = new Rect(groupOrigin, size);\n this$1.forEach(group.bboxes, arrangeElements);\n groupStart += group.lineSize + options.lineSpacing;\n }\n if (!options.wrap && group.size > rect.size[sizeField]) {\n var scale = rect.size[sizeField] / groupBox.size[sizeField];\n var scaledStart = groupBox.topLeft().scale(scale, scale);\n var scaledSize = groupBox.size[groupsSizeField] * scale;\n var newStart = alignStart(scaledSize, rect, options.alignContent, groupsAxis, groupsSizeField);\n var transform$$1 = transform();\n if (groupAxis === 'x') {\n transform$$1.translate(rect.origin.x - scaledStart.x, newStart - scaledStart.y);\n } else {\n transform$$1.translate(newStart - scaledStart.x, rect.origin.y - scaledStart.y);\n }\n transform$$1.scale(scale, scale);\n this.transform(transform$$1);\n }\n },\n _initGroups: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var children = ref.children;\n var lineSpacing = options.lineSpacing;\n var wrap = options.wrap;\n var spacing = options.spacing;\n var sizeField = this._fieldMap.sizeField;\n var group = this._newGroup();\n var groups = [];\n var addGroup = function () {\n groups.push(group);\n groupsSize += group.lineSize + lineSpacing;\n };\n var groupsSize = -lineSpacing;\n for (var idx = 0; idx < children.length; idx++) {\n var element = children[idx];\n var bbox = children[idx].clippedBBox();\n if (element.visible() && bbox) {\n if (wrap && group.size + bbox.size[sizeField] + spacing > this$1._rect.size[sizeField]) {\n if (group.bboxes.length === 0) {\n this$1._addToGroup(group, bbox, element);\n addGroup();\n group = this$1._newGroup();\n } else {\n addGroup();\n group = this$1._newGroup();\n this$1._addToGroup(group, bbox, element);\n }\n } else {\n this$1._addToGroup(group, bbox, element);\n }\n }\n }\n if (group.bboxes.length) {\n addGroup();\n }\n return {\n groups: groups,\n groupsSize: groupsSize\n };\n },\n _addToGroup: function (group, bbox, element) {\n group.size += bbox.size[this._fieldMap.sizeField] + this.options.spacing;\n group.lineSize = Math.max(bbox.size[this._fieldMap.groupsSizeField], group.lineSize);\n group.bboxes.push(bbox);\n group.elements.push(element);\n },\n _newGroup: function () {\n return {\n lineSize: 0,\n size: -this.options.spacing,\n bboxes: [],\n elements: []\n };\n }\n });\n var Rect$2 = Element$1.extend({\n init: function (geometry, options) {\n if (geometry === void 0) {\n geometry = new Rect();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n }\n },\n _bbox: function (matrix) {\n return this._geometry.bbox(matrix);\n },\n rawBBox: function () {\n return this._geometry.bbox();\n },\n _containsPoint: function (point) {\n return this._geometry.containsPoint(point);\n },\n _isOnPath: function (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n });\n Rect$2.prototype.nodeType = 'Rect';\n Paintable.extend(Rect$2.prototype);\n Measurable.extend(Rect$2.prototype);\n defineGeometryAccessors(Rect$2.prototype, ['geometry']);\n function alignElements(elements, rect, alignment, axis, sizeField) {\n for (var idx = 0; idx < elements.length; idx++) {\n var bbox = elements[idx].clippedBBox();\n if (bbox) {\n var point = bbox.origin.clone();\n point[axis] = alignStart(bbox.size[sizeField], rect, alignment || 'start', axis, sizeField);\n translateToPoint(point, bbox, elements[idx]);\n }\n }\n }\n function align(elements, rect, alignment) {\n alignElements(elements, rect, alignment, 'x', 'width');\n }\n function vAlign(elements, rect, alignment) {\n alignElements(elements, rect, alignment, 'y', 'height');\n }\n function stackElements(elements, stackAxis, otherAxis, sizeField) {\n if (elements.length > 1) {\n var origin = new Point();\n var previousBBox = elements[0].bbox;\n for (var idx = 1; idx < elements.length; idx++) {\n var element = elements[idx].element;\n var bbox = elements[idx].bbox;\n origin[stackAxis] = previousBBox.origin[stackAxis] + previousBBox.size[sizeField];\n origin[otherAxis] = bbox.origin[otherAxis];\n translateToPoint(origin, bbox, element);\n bbox.origin[stackAxis] = origin[stackAxis];\n previousBBox = bbox;\n }\n }\n }\n function createStackElements(elements) {\n var stackElements = [];\n for (var idx = 0; idx < elements.length; idx++) {\n var element = elements[idx];\n var bbox = element.clippedBBox();\n if (bbox) {\n stackElements.push({\n element: element,\n bbox: bbox\n });\n }\n }\n return stackElements;\n }\n function stack(elements) {\n stackElements(createStackElements(elements), 'x', 'y', 'width');\n }\n function vStack(elements) {\n stackElements(createStackElements(elements), 'y', 'x', 'height');\n }\n function getStacks(elements, rect, sizeField) {\n var maxSize = rect.size[sizeField];\n var stacks = [];\n var stack = [];\n var stackSize = 0;\n var element, bbox;\n var addElementToStack = function () {\n stack.push({\n element: element,\n bbox: bbox\n });\n };\n for (var idx = 0; idx < elements.length; idx++) {\n element = elements[idx];\n bbox = element.clippedBBox();\n if (bbox) {\n var size = bbox.size[sizeField];\n if (stackSize + size > maxSize) {\n if (stack.length) {\n stacks.push(stack);\n stack = [];\n addElementToStack();\n stackSize = size;\n } else {\n addElementToStack();\n stacks.push(stack);\n stack = [];\n stackSize = 0;\n }\n } else {\n addElementToStack();\n stackSize += size;\n }\n }\n }\n if (stack.length) {\n stacks.push(stack);\n }\n return stacks;\n }\n function wrapElements(elements, rect, axis, otherAxis, sizeField) {\n var stacks = getStacks(elements, rect, sizeField);\n var origin = rect.origin.clone();\n var result = [];\n for (var idx = 0; idx < stacks.length; idx++) {\n var stack = stacks[idx];\n var startElement = stack[0];\n origin[otherAxis] = startElement.bbox.origin[otherAxis];\n translateToPoint(origin, startElement.bbox, startElement.element);\n startElement.bbox.origin[axis] = origin[axis];\n stackElements(stack, axis, otherAxis, sizeField);\n result.push([]);\n for (var elementIdx = 0; elementIdx < stack.length; elementIdx++) {\n result[idx].push(stack[elementIdx].element);\n }\n }\n return result;\n }\n function wrap(elements, rect) {\n return wrapElements(elements, rect, 'x', 'y', 'width');\n }\n function vWrap(elements, rect) {\n return wrapElements(elements, rect, 'y', 'x', 'height');\n }\n function fit(element, rect) {\n var bbox = element.clippedBBox();\n if (bbox) {\n var elementSize = bbox.size;\n var rectSize = rect.size;\n if (rectSize.width < elementSize.width || rectSize.height < elementSize.height) {\n var scale = Math.min(rectSize.width / elementSize.width, rectSize.height / elementSize.height);\n var transform$$1 = element.transform() || transform();\n transform$$1.scale(scale, scale);\n element.transform(transform$$1);\n }\n }\n }\n var StopsArray = ElementsArray.extend({\n _change: function () {\n this.optionsChange({ field: 'stops' });\n }\n });\n function optionsAccessor(name) {\n return function (value) {\n if (defined(value)) {\n this.options.set(name, value);\n return this;\n }\n return this.options.get(name);\n };\n }\n function defineOptionsAccessors(fn, names) {\n for (var i = 0; i < names.length; i++) {\n fn[names[i]] = optionsAccessor(names[i]);\n }\n }\n var GradientStop = Class.extend({\n init: function (offset, color, opacity) {\n this.options = new OptionsStore({\n offset: offset,\n color: color,\n opacity: defined(opacity) ? opacity : 1\n });\n this.options.addObserver(this);\n }\n });\n GradientStop.create = function (arg) {\n if (defined(arg)) {\n var stop;\n if (arg instanceof GradientStop) {\n stop = arg;\n } else if (arg.length > 1) {\n stop = new GradientStop(arg[0], arg[1], arg[2]);\n } else {\n stop = new GradientStop(arg.offset, arg.color, arg.opacity);\n }\n return stop;\n }\n };\n defineOptionsAccessors(GradientStop.prototype, [\n 'offset',\n 'color',\n 'opacity'\n ]);\n ObserversMixin.extend(GradientStop.prototype);\n var Gradient = Class.extend({\n init: function (options) {\n if (options === void 0) {\n options = {};\n }\n this.stops = new StopsArray(this._createStops(options.stops));\n this.stops.addObserver(this);\n this._userSpace = options.userSpace;\n this.id = definitionId();\n },\n userSpace: function (value) {\n if (defined(value)) {\n this._userSpace = value;\n this.optionsChange();\n return this;\n }\n return this._userSpace;\n },\n _createStops: function (stops) {\n if (stops === void 0) {\n stops = [];\n }\n var result = [];\n for (var idx = 0; idx < stops.length; idx++) {\n result.push(GradientStop.create(stops[idx]));\n }\n return result;\n },\n addStop: function (offset, color, opacity) {\n this.stops.push(new GradientStop(offset, color, opacity));\n },\n removeStop: function (stop) {\n var index = this.stops.indexOf(stop);\n if (index >= 0) {\n this.stops.splice(index, 1);\n }\n }\n });\n Gradient.prototype.nodeType = 'Gradient';\n ObserversMixin.extend(Gradient.prototype);\n $.extend(Gradient.prototype, {\n optionsChange: function (e) {\n this.trigger('optionsChange', {\n field: 'gradient' + (e ? '.' + e.field : ''),\n value: this\n });\n },\n geometryChange: function () {\n this.optionsChange();\n }\n });\n var LinearGradient = Gradient.extend({\n init: function (options) {\n if (options === void 0) {\n options = {};\n }\n Gradient.fn.init.call(this, options);\n this.start(options.start || new Point());\n this.end(options.end || new Point(1, 0));\n }\n });\n definePointAccessors(LinearGradient.prototype, [\n 'start',\n 'end'\n ]);\n var RadialGradient = Gradient.extend({\n init: function (options) {\n if (options === void 0) {\n options = {};\n }\n Gradient.fn.init.call(this, options);\n this.center(options.center || new Point());\n this._radius = defined(options.radius) ? options.radius : 1;\n this._fallbackFill = options.fallbackFill;\n },\n radius: function (value) {\n if (defined(value)) {\n this._radius = value;\n this.geometryChange();\n return this;\n }\n return this._radius;\n },\n fallbackFill: function (value) {\n if (defined(value)) {\n this._fallbackFill = value;\n this.optionsChange();\n return this;\n }\n return this._fallbackFill;\n }\n });\n definePointAccessors(RadialGradient.prototype, ['center']);\n function swing(position) {\n return 0.5 - Math.cos(position * Math.PI) / 2;\n }\n function linear(position) {\n return position;\n }\n function easeOutElastic(position, time, start, diff) {\n var s = 1.70158, p = 0, a = diff;\n if (position === 0) {\n return start;\n }\n if (position === 1) {\n return start + diff;\n }\n if (!p) {\n p = 0.5;\n }\n if (a < Math.abs(diff)) {\n a = diff;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(diff / a);\n }\n return a * Math.pow(2, -10 * position) * Math.sin((Number(position) - s) * (1.1 * Math.PI) / p) + diff + start;\n }\n var easingFunctions = {\n swing: swing,\n linear: linear,\n easeOutElastic: easeOutElastic\n };\n var AnimationFactory = Class.extend({\n init: function () {\n this._items = [];\n },\n register: function (name, type) {\n this._items.push({\n name: name,\n type: type\n });\n },\n create: function (element, options) {\n var items = this._items;\n var match;\n if (options && options.type) {\n var type = options.type.toLowerCase();\n for (var i = 0; i < items.length; i++) {\n if (items[i].name.toLowerCase() === type) {\n match = items[i];\n break;\n }\n }\n }\n if (match) {\n return new match.type(element, options);\n }\n }\n });\n AnimationFactory.current = new AnimationFactory();\n var now = Date.now || function () {\n return new Date().getTime();\n };\n var Animation = Class.extend({\n init: function (element, options) {\n this.options = $.extend({}, this.options, options);\n this.element = element;\n },\n setup: function () {\n },\n step: function () {\n },\n play: function () {\n var this$1 = this;\n var options = this.options;\n var duration = options.duration;\n var delay = options.delay;\n if (delay === void 0) {\n delay = 0;\n }\n var easing = easingFunctions[options.easing];\n var start = now() + delay;\n var finish = start + duration;\n if (duration === 0) {\n this.step(1);\n this.abort();\n } else {\n setTimeout(function () {\n var loop = function () {\n if (this$1._stopped) {\n return;\n }\n var wallTime = now();\n var time = limitValue(wallTime - start, 0, duration);\n var position = time / duration;\n var easingPosition = easing(position, time, 0, 1, duration);\n this$1.step(easingPosition);\n if (wallTime < finish) {\n kendo.animationFrame(loop);\n } else {\n this$1.abort();\n }\n };\n loop();\n }, delay);\n }\n },\n abort: function () {\n this._stopped = true;\n },\n destroy: function () {\n this.abort();\n }\n });\n Animation.prototype.options = {\n duration: 500,\n easing: 'swing'\n };\n Animation.create = function (type, element, options) {\n return AnimationFactory.current.create(type, element, options);\n };\n var SurfaceFactory = Class.extend({\n init: function () {\n this._items = [];\n },\n register: function (name, type, order) {\n var items = this._items;\n var first = items[0];\n var entry = {\n name: name,\n type: type,\n order: order\n };\n if (!first || order < first.order) {\n items.unshift(entry);\n } else {\n items.push(entry);\n }\n },\n create: function (element, options) {\n var items = this._items;\n var match = items[0];\n if (options && options.type) {\n var preferred = options.type.toLowerCase();\n for (var i = 0; i < items.length; i++) {\n if (items[i].name === preferred) {\n match = items[i];\n break;\n }\n }\n }\n if (match) {\n return new match.type(element, options);\n }\n kendo.logToConsole('Warning: Unable to create Kendo UI Drawing Surface. Possible causes:\\n' + '- The browser does not support SVG and Canvas. User agent: ' + navigator.userAgent);\n }\n });\n SurfaceFactory.current = new SurfaceFactory();\n var events = [\n 'click',\n 'mouseenter',\n 'mouseleave',\n 'mousemove',\n 'resize'\n ];\n var Surface = kendo.Observable.extend({\n init: function (element, options) {\n kendo.Observable.fn.init.call(this);\n this.options = $.extend({}, options);\n this.element = element;\n this.element._kendoExportVisual = this.exportVisual.bind(this);\n this._click = this._handler('click');\n this._mouseenter = this._handler('mouseenter');\n this._mouseleave = this._handler('mouseleave');\n this._mousemove = this._handler('mousemove');\n this._visual = new Group();\n elementSize(element, this.options);\n this.bind(events, this.options);\n this._enableTracking();\n },\n draw: function (element) {\n this._visual.children.push(element);\n },\n clear: function () {\n this._visual.children = [];\n },\n destroy: function () {\n this._visual = null;\n this.element._kendoExportVisual = null;\n this.unbind();\n },\n eventTarget: function (e) {\n var this$1 = this;\n var domNode = eventElement(e);\n var node;\n while (!node && domNode) {\n node = domNode._kendoNode;\n if (domNode === this$1.element) {\n break;\n }\n domNode = domNode.parentElement;\n }\n if (node) {\n return node.srcElement;\n }\n },\n exportVisual: function () {\n return this._visual;\n },\n getSize: function () {\n return elementSize(this.element);\n },\n currentSize: function (size) {\n if (size) {\n this._size = size;\n } else {\n return this._size;\n }\n },\n setSize: function (size) {\n elementSize(this.element, size);\n this.currentSize(size);\n this._resize();\n },\n resize: function (force) {\n var size = this.getSize();\n var currentSize = this.currentSize();\n if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this.currentSize(size);\n this._resize(size, force);\n this.trigger('resize', size);\n }\n },\n size: function (value) {\n if (!value) {\n return this.getSize();\n }\n this.setSize(value);\n },\n suspendTracking: function () {\n this._suspendedTracking = true;\n },\n resumeTracking: function () {\n this._suspendedTracking = false;\n },\n _enableTracking: function () {\n },\n _resize: function () {\n },\n _handler: function (eventName) {\n var this$1 = this;\n return function (e) {\n var node = this$1.eventTarget(e);\n if (node && !this$1._suspendedTracking) {\n this$1.trigger(eventName, {\n element: node,\n originalEvent: e,\n type: eventName\n });\n }\n };\n },\n _elementOffset: function () {\n var element = this.element;\n var ref = elementStyles(element, [\n 'paddingLeft',\n 'paddingTop'\n ]);\n var paddingLeft = ref.paddingLeft;\n var paddingTop = ref.paddingTop;\n var ref$1 = elementOffset(element);\n var left = ref$1.left;\n var top = ref$1.top;\n return {\n left: left + parseInt(paddingLeft, 10),\n top: top + parseInt(paddingTop, 10)\n };\n },\n _surfacePoint: function (e) {\n var offset = this._elementOffset();\n var coord = eventCoordinates(e);\n var x = coord.x - offset.left;\n var y = coord.y - offset.top;\n return new Point(x, y);\n }\n });\n Surface.create = function (element, options) {\n return SurfaceFactory.current.create(element, options);\n };\n Surface.support = {};\n var BaseNode = Class.extend({\n init: function (srcElement) {\n this.childNodes = [];\n this.parent = null;\n if (srcElement) {\n this.srcElement = srcElement;\n this.observe();\n }\n },\n destroy: function () {\n var this$1 = this;\n if (this.srcElement) {\n this.srcElement.removeObserver(this);\n }\n var children = this.childNodes;\n for (var i = 0; i < children.length; i++) {\n this$1.childNodes[i].destroy();\n }\n this.parent = null;\n },\n load: function () {\n },\n observe: function () {\n if (this.srcElement) {\n this.srcElement.addObserver(this);\n }\n },\n append: function (node) {\n this.childNodes.push(node);\n node.parent = this;\n },\n insertAt: function (node, pos) {\n this.childNodes.splice(pos, 0, node);\n node.parent = this;\n },\n remove: function (index, count) {\n var this$1 = this;\n var end = index + count;\n for (var i = index; i < end; i++) {\n this$1.childNodes[i].removeSelf();\n }\n this.childNodes.splice(index, count);\n },\n removeSelf: function () {\n this.clear();\n this.destroy();\n },\n clear: function () {\n this.remove(0, this.childNodes.length);\n },\n invalidate: function () {\n if (this.parent) {\n this.parent.invalidate();\n }\n },\n geometryChange: function () {\n this.invalidate();\n },\n optionsChange: function () {\n this.invalidate();\n },\n childrenChange: function (e) {\n if (e.action === 'add') {\n this.load(e.items, e.index);\n } else if (e.action === 'remove') {\n this.remove(e.index, e.items.length);\n }\n this.invalidate();\n }\n });\n function renderAttr(name, value) {\n return defined(value) && value !== null ? ' ' + name + '=\"' + value + '\" ' : '';\n }\n function renderAllAttr(attrs) {\n var output = '';\n for (var i = 0; i < attrs.length; i++) {\n output += renderAttr(attrs[i][0], attrs[i][1]);\n }\n return output;\n }\n function renderStyle(attrs) {\n var output = '';\n for (var i = 0; i < attrs.length; i++) {\n var value = attrs[i][1];\n if (defined(value)) {\n output += attrs[i][0] + ':' + value + ';';\n }\n }\n if (output !== '') {\n return output;\n }\n }\n var NODE_MAP = {};\n var SVG_NS = 'http://www.w3.org/2000/svg';\n var NONE = 'none';\n var renderSVG = function (container, svg) {\n container.innerHTML = svg;\n };\n if (typeof document !== 'undefined') {\n var testFragment = '';\n var testContainer = document.createElement('div');\n var hasParser = typeof DOMParser !== 'undefined';\n testContainer.innerHTML = testFragment;\n if (hasParser && testContainer.firstChild.namespaceURI !== SVG_NS) {\n renderSVG = function (container, svg) {\n var parser = new DOMParser();\n var chartDoc = parser.parseFromString(svg, 'text/xml');\n var importedDoc = document.adoptNode(chartDoc.documentElement);\n container.innerHTML = '';\n container.appendChild(importedDoc);\n };\n }\n }\n var renderSVG$1 = renderSVG;\n var TRANSFORM = 'transform';\n var DefinitionMap = {\n clip: 'clip-path',\n fill: 'fill'\n };\n function isDefinition(type, value) {\n return type === 'clip' || type === 'fill' && (!value || value.nodeType === 'Gradient');\n }\n function baseUrl() {\n var base = document.getElementsByTagName('base')[0];\n var href = document.location.href;\n var url = '';\n if (base && !supportBrowser.msie) {\n var hashIndex = href.indexOf('#');\n if (hashIndex !== -1) {\n href = href.substring(0, hashIndex);\n }\n url = href;\n }\n return url;\n }\n var Node = BaseNode.extend({\n init: function (srcElement, options) {\n BaseNode.fn.init.call(this, srcElement);\n this.definitions = {};\n this.options = options;\n },\n destroy: function () {\n if (this.element) {\n this.element._kendoNode = null;\n this.element = null;\n }\n this.clearDefinitions();\n BaseNode.fn.destroy.call(this);\n },\n load: function (elements, pos) {\n var this$1 = this;\n for (var i = 0; i < elements.length; i++) {\n var srcElement = elements[i];\n var children = srcElement.children;\n var childNode = new NODE_MAP[srcElement.nodeType](srcElement, this$1.options);\n if (defined(pos)) {\n this$1.insertAt(childNode, pos);\n } else {\n this$1.append(childNode);\n }\n childNode.createDefinitions();\n if (children && children.length > 0) {\n childNode.load(children);\n }\n var element = this$1.element;\n if (element) {\n childNode.attachTo(element, pos);\n }\n }\n },\n root: function () {\n var root = this;\n while (root.parent) {\n root = root.parent;\n }\n return root;\n },\n attachTo: function (domElement, pos) {\n var container = document.createElement('div');\n renderSVG$1(container, '' + this.render() + '');\n var element = container.firstChild.firstChild;\n if (element) {\n if (defined(pos)) {\n domElement.insertBefore(element, domElement.childNodes[pos] || null);\n } else {\n domElement.appendChild(element);\n }\n this.setElement(element);\n }\n },\n setElement: function (element) {\n if (this.element) {\n this.element._kendoNode = null;\n }\n this.element = element;\n this.element._kendoNode = this;\n var nodes = this.childNodes;\n for (var i = 0; i < nodes.length; i++) {\n var childElement = element.childNodes[i];\n nodes[i].setElement(childElement);\n }\n },\n clear: function () {\n this.clearDefinitions();\n if (this.element) {\n this.element.innerHTML = '';\n }\n var children = this.childNodes;\n for (var i = 0; i < children.length; i++) {\n children[i].destroy();\n }\n this.childNodes = [];\n },\n removeSelf: function () {\n if (this.element) {\n var parentNode = this.element.parentNode;\n if (parentNode) {\n parentNode.removeChild(this.element);\n }\n this.element = null;\n }\n BaseNode.fn.removeSelf.call(this);\n },\n template: function () {\n return this.renderChildren();\n },\n render: function () {\n return this.template();\n },\n renderChildren: function () {\n var nodes = this.childNodes;\n var output = '';\n for (var i = 0; i < nodes.length; i++) {\n output += nodes[i].render();\n }\n return output;\n },\n optionsChange: function (e) {\n var field = e.field;\n var value = e.value;\n if (field === 'visible') {\n this.css('display', value ? '' : NONE);\n } else if (DefinitionMap[field] && isDefinition(field, value)) {\n this.updateDefinition(field, value);\n } else if (field === 'opacity') {\n this.attr('opacity', value);\n } else if (field === 'cursor') {\n this.css('cursor', value);\n } else if (field === 'id') {\n if (value) {\n this.attr('id', value);\n } else {\n this.removeAttr('id');\n }\n }\n BaseNode.fn.optionsChange.call(this, e);\n },\n attr: function (name, value) {\n if (this.element) {\n this.element.setAttribute(name, value);\n }\n },\n allAttr: function (attrs) {\n var this$1 = this;\n for (var i = 0; i < attrs.length; i++) {\n this$1.attr(attrs[i][0], attrs[i][1]);\n }\n },\n css: function (name, value) {\n if (this.element) {\n this.element.style[name] = value;\n }\n },\n allCss: function (styles) {\n var this$1 = this;\n for (var i = 0; i < styles.length; i++) {\n this$1.css(styles[i][0], styles[i][1]);\n }\n },\n removeAttr: function (name) {\n if (this.element) {\n this.element.removeAttribute(name);\n }\n },\n mapTransform: function (transform) {\n var attrs = [];\n if (transform) {\n attrs.push([\n TRANSFORM,\n 'matrix(' + transform.matrix().toString(6) + ')'\n ]);\n }\n return attrs;\n },\n renderTransform: function () {\n return renderAllAttr(this.mapTransform(this.srcElement.transform()));\n },\n transformChange: function (value) {\n if (value) {\n this.allAttr(this.mapTransform(value));\n } else {\n this.removeAttr(TRANSFORM);\n }\n },\n mapStyle: function () {\n var options = this.srcElement.options;\n var style = [[\n 'cursor',\n options.cursor\n ]];\n if (options.visible === false) {\n style.push([\n 'display',\n NONE\n ]);\n }\n return style;\n },\n renderStyle: function () {\n return renderAttr('style', renderStyle(this.mapStyle(true)));\n },\n renderOpacity: function () {\n return renderAttr('opacity', this.srcElement.options.opacity);\n },\n renderId: function () {\n return renderAttr('id', this.srcElement.options.id);\n },\n createDefinitions: function () {\n var srcElement = this.srcElement;\n var definitions = this.definitions;\n if (srcElement) {\n var options = srcElement.options;\n var hasDefinitions;\n for (var field in DefinitionMap) {\n var definition = options.get(field);\n if (definition && isDefinition(field, definition)) {\n definitions[field] = definition;\n hasDefinitions = true;\n }\n }\n if (hasDefinitions) {\n this.definitionChange({\n action: 'add',\n definitions: definitions\n });\n }\n }\n },\n definitionChange: function (e) {\n if (this.parent) {\n this.parent.definitionChange(e);\n }\n },\n updateDefinition: function (type, value) {\n var definitions = this.definitions;\n var current = definitions[type];\n var attr = DefinitionMap[type];\n var definition = {};\n if (current) {\n definition[type] = current;\n this.definitionChange({\n action: 'remove',\n definitions: definition\n });\n delete definitions[type];\n }\n if (!value) {\n if (current) {\n this.removeAttr(attr);\n }\n } else {\n definition[type] = value;\n this.definitionChange({\n action: 'add',\n definitions: definition\n });\n definitions[type] = value;\n this.attr(attr, this.refUrl(value.id));\n }\n },\n clearDefinitions: function () {\n var definitions = this.definitions;\n this.definitionChange({\n action: 'remove',\n definitions: definitions\n });\n this.definitions = {};\n },\n renderDefinitions: function () {\n return renderAllAttr(this.mapDefinitions());\n },\n mapDefinitions: function () {\n var this$1 = this;\n var definitions = this.definitions;\n var attrs = [];\n for (var field in definitions) {\n attrs.push([\n DefinitionMap[field],\n this$1.refUrl(definitions[field].id)\n ]);\n }\n return attrs;\n },\n refUrl: function (id) {\n var skipBaseHref = (this.options || {}).skipBaseHref;\n var baseHref = this.baseUrl().replace(/'/g, '\\\\\\'');\n var base = skipBaseHref ? '' : baseHref;\n return 'url(' + base + '#' + id + ')';\n },\n baseUrl: function () {\n return baseUrl();\n }\n });\n var GradientStopNode = Node.extend({\n template: function () {\n return '';\n },\n renderOffset: function () {\n return renderAttr('offset', this.srcElement.offset());\n },\n mapStyle: function () {\n var srcElement = this.srcElement;\n return [\n [\n 'stop-color',\n srcElement.color()\n ],\n [\n 'stop-opacity',\n srcElement.opacity()\n ]\n ];\n },\n optionsChange: function (e) {\n if (e.field === 'offset') {\n this.attr(e.field, e.value);\n } else if (e.field === 'color' || e.field === 'opacity') {\n this.css('stop-' + e.field, e.value);\n }\n }\n });\n var GradientNode = Node.extend({\n init: function (srcElement) {\n Node.fn.init.call(this, srcElement);\n this.id = srcElement.id;\n this.loadStops();\n },\n loadStops: function () {\n var this$1 = this;\n var stops = this.srcElement.stops;\n var element = this.element;\n for (var idx = 0; idx < stops.length; idx++) {\n var stopNode = new GradientStopNode(stops[idx]);\n this$1.append(stopNode);\n if (element) {\n stopNode.attachTo(element);\n }\n }\n },\n optionsChange: function (e) {\n if (e.field === 'gradient.stops') {\n BaseNode.prototype.clear.call(this);\n this.loadStops();\n } else if (e.field === 'gradient') {\n this.allAttr(this.mapCoordinates());\n }\n },\n renderCoordinates: function () {\n return renderAllAttr(this.mapCoordinates());\n },\n mapSpace: function () {\n return [\n 'gradientUnits',\n this.srcElement.userSpace() ? 'userSpaceOnUse' : 'objectBoundingBox'\n ];\n }\n });\n var LinearGradientNode = GradientNode.extend({\n template: function () {\n return '' + this.renderChildren() + '';\n },\n mapCoordinates: function () {\n var srcElement = this.srcElement;\n var start = srcElement.start();\n var end = srcElement.end();\n var attrs = [\n [\n 'x1',\n start.x\n ],\n [\n 'y1',\n start.y\n ],\n [\n 'x2',\n end.x\n ],\n [\n 'y2',\n end.y\n ],\n this.mapSpace()\n ];\n return attrs;\n }\n });\n var RadialGradientNode = GradientNode.extend({\n template: function () {\n return '' + this.renderChildren() + '';\n },\n mapCoordinates: function () {\n var srcElement = this.srcElement;\n var center = srcElement.center();\n var radius = srcElement.radius();\n var attrs = [\n [\n 'cx',\n center.x\n ],\n [\n 'cy',\n center.y\n ],\n [\n 'r',\n radius\n ],\n this.mapSpace()\n ];\n return attrs;\n }\n });\n var ClipNode = Node.extend({\n init: function (srcElement) {\n Node.fn.init.call(this);\n this.srcElement = srcElement;\n this.id = srcElement.id;\n this.load([srcElement]);\n },\n template: function () {\n return '' + this.renderChildren() + '';\n }\n });\n var DefinitionNode = Node.extend({\n init: function () {\n Node.fn.init.call(this);\n this.definitionMap = {};\n },\n attachTo: function (domElement) {\n this.element = domElement;\n },\n template: function () {\n return '' + this.renderChildren() + '';\n },\n definitionChange: function (e) {\n var definitions = e.definitions;\n var action = e.action;\n if (action === 'add') {\n this.addDefinitions(definitions);\n } else if (action === 'remove') {\n this.removeDefinitions(definitions);\n }\n },\n createDefinition: function (type, item) {\n var nodeType;\n if (type === 'clip') {\n nodeType = ClipNode;\n } else if (type === 'fill') {\n if (item instanceof LinearGradient) {\n nodeType = LinearGradientNode;\n } else if (item instanceof RadialGradient) {\n nodeType = RadialGradientNode;\n }\n }\n return new nodeType(item);\n },\n addDefinitions: function (definitions) {\n var this$1 = this;\n for (var field in definitions) {\n this$1.addDefinition(field, definitions[field]);\n }\n },\n addDefinition: function (type, srcElement) {\n var ref = this;\n var element = ref.element;\n var definitionMap = ref.definitionMap;\n var id = srcElement.id;\n var mapItem = definitionMap[id];\n if (!mapItem) {\n var node = this.createDefinition(type, srcElement);\n definitionMap[id] = {\n element: node,\n count: 1\n };\n this.append(node);\n if (element) {\n node.attachTo(this.element);\n }\n } else {\n mapItem.count++;\n }\n },\n removeDefinitions: function (definitions) {\n var this$1 = this;\n for (var field in definitions) {\n this$1.removeDefinition(definitions[field]);\n }\n },\n removeDefinition: function (srcElement) {\n var definitionMap = this.definitionMap;\n var id = srcElement.id;\n var mapItem = definitionMap[id];\n if (mapItem) {\n mapItem.count--;\n if (mapItem.count === 0) {\n this.remove(this.childNodes.indexOf(mapItem.element), 1);\n delete definitionMap[id];\n }\n }\n }\n });\n var RootNode = Node.extend({\n init: function (options) {\n Node.fn.init.call(this);\n this.options = options;\n this.defs = new DefinitionNode();\n },\n attachTo: function (domElement) {\n this.element = domElement;\n this.defs.attachTo(domElement.firstElementChild);\n },\n clear: function () {\n BaseNode.prototype.clear.call(this);\n },\n template: function () {\n return this.defs.render() + this.renderChildren();\n },\n definitionChange: function (e) {\n this.defs.definitionChange(e);\n }\n });\n var RTL = 'rtl';\n function alignToScreen(element) {\n var ctm;\n try {\n ctm = element.getScreenCTM ? element.getScreenCTM() : null;\n } catch (e) {\n }\n if (ctm) {\n var left = -ctm.e % 1;\n var top = -ctm.f % 1;\n var style = element.style;\n if (left !== 0 || top !== 0) {\n style.left = left + 'px';\n style.top = top + 'px';\n }\n }\n }\n var Surface$1 = Surface.extend({\n init: function (element, options) {\n Surface.fn.init.call(this, element, options);\n this._root = new RootNode($.extend({ rtl: elementStyles(element, 'direction').direction === RTL }, this.options));\n renderSVG$1(this.element, this._template());\n this._rootElement = this.element.firstElementChild;\n alignToScreen(this._rootElement);\n this._root.attachTo(this._rootElement);\n bindEvents(this.element, {\n click: this._click,\n mouseover: this._mouseenter,\n mouseout: this._mouseleave,\n mousemove: this._mousemove\n });\n this.resize();\n },\n destroy: function () {\n if (this._root) {\n this._root.destroy();\n this._root = null;\n this._rootElement = null;\n unbindEvents(this.element, {\n click: this._click,\n mouseover: this._mouseenter,\n mouseout: this._mouseleave,\n mousemove: this._mousemove\n });\n }\n Surface.fn.destroy.call(this);\n },\n translate: function (offset) {\n var viewBox = Math.round(offset.x) + ' ' + Math.round(offset.y) + ' ' + this._size.width + ' ' + this._size.height;\n this._offset = offset;\n this._rootElement.setAttribute('viewBox', viewBox);\n },\n draw: function (element) {\n Surface.fn.draw.call(this, element);\n this._root.load([element]);\n },\n clear: function () {\n Surface.fn.clear.call(this);\n this._root.clear();\n },\n svg: function () {\n return '' + this._template();\n },\n exportVisual: function () {\n var ref = this;\n var visual = ref._visual;\n var offset = ref._offset;\n if (offset) {\n var wrap = new Group();\n wrap.children.push(visual);\n wrap.transform(transform().translate(-offset.x, -offset.y));\n visual = wrap;\n }\n return visual;\n },\n _resize: function () {\n if (this._offset) {\n this.translate(this._offset);\n }\n },\n _template: function () {\n return '' + this._root.render() + '';\n }\n });\n Surface$1.prototype.type = 'svg';\n if (typeof document !== 'undefined' && document.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')) {\n Surface.support.svg = true;\n SurfaceFactory.current.register('svg', Surface$1, 10);\n }\n var GroupNode = Node.extend({\n template: function () {\n return '' + this.renderChildren() + '';\n },\n optionsChange: function (e) {\n if (e.field === 'transform') {\n this.transformChange(e.value);\n }\n Node.fn.optionsChange.call(this, e);\n }\n });\n NODE_MAP.Group = GroupNode;\n var DASH_ARRAYS = {\n dot: [\n 1.5,\n 3.5\n ],\n dash: [\n 4,\n 3.5\n ],\n longdash: [\n 8,\n 3.5\n ],\n dashdot: [\n 3.5,\n 3.5,\n 1.5,\n 3.5\n ],\n longdashdot: [\n 8,\n 3.5,\n 1.5,\n 3.5\n ],\n longdashdotdot: [\n 8,\n 3.5,\n 1.5,\n 3.5,\n 1.5,\n 3.5\n ]\n };\n var SOLID = 'solid';\n var BUTT = 'butt';\n var ATTRIBUTE_MAP = {\n 'fill.opacity': 'fill-opacity',\n 'stroke.color': 'stroke',\n 'stroke.width': 'stroke-width',\n 'stroke.opacity': 'stroke-opacity'\n };\n var SPACE = ' ';\n var PathNode = Node.extend({\n geometryChange: function () {\n this.attr('d', this.renderData());\n this.invalidate();\n },\n optionsChange: function (e) {\n switch (e.field) {\n case 'fill':\n if (e.value) {\n this.allAttr(this.mapFill(e.value));\n } else {\n this.removeAttr('fill');\n }\n break;\n case 'fill.color':\n this.allAttr(this.mapFill({ color: e.value }));\n break;\n case 'stroke':\n if (e.value) {\n this.allAttr(this.mapStroke(e.value));\n } else {\n this.removeAttr('stroke');\n }\n break;\n case 'transform':\n this.transformChange(e.value);\n break;\n default:\n var name = ATTRIBUTE_MAP[e.field];\n if (name) {\n this.attr(name, e.value);\n }\n break;\n }\n Node.fn.optionsChange.call(this, e);\n },\n content: function () {\n if (this.element) {\n this.element.textContent = this.srcElement.content();\n }\n },\n renderData: function () {\n return this.printPath(this.srcElement);\n },\n printPath: function (path) {\n var this$1 = this;\n var segments = path.segments;\n var length = segments.length;\n if (length > 0) {\n var parts = [];\n var output, currentType;\n for (var i = 1; i < length; i++) {\n var segmentType = this$1.segmentType(segments[i - 1], segments[i]);\n if (segmentType !== currentType) {\n currentType = segmentType;\n parts.push(segmentType);\n }\n if (segmentType === 'L') {\n parts.push(this$1.printPoints(segments[i].anchor()));\n } else {\n parts.push(this$1.printPoints(segments[i - 1].controlOut(), segments[i].controlIn(), segments[i].anchor()));\n }\n }\n output = 'M' + this.printPoints(segments[0].anchor()) + SPACE + parts.join(SPACE);\n if (path.options.closed) {\n output += 'Z';\n }\n return output;\n }\n },\n printPoints: function () {\n var points = arguments;\n var length = points.length;\n var result = [];\n for (var i = 0; i < length; i++) {\n result.push(points[i].toString(3));\n }\n return result.join(' ');\n },\n segmentType: function (segmentStart, segmentEnd) {\n return segmentStart.controlOut() && segmentEnd.controlIn() ? 'C' : 'L';\n },\n mapStroke: function (stroke) {\n var attrs = [];\n if (stroke && !isTransparent(stroke.color)) {\n attrs.push([\n 'stroke',\n stroke.color\n ]);\n attrs.push([\n 'stroke-width',\n stroke.width\n ]);\n attrs.push([\n 'stroke-linecap',\n this.renderLinecap(stroke)\n ]);\n attrs.push([\n 'stroke-linejoin',\n stroke.lineJoin\n ]);\n if (defined(stroke.opacity)) {\n attrs.push([\n 'stroke-opacity',\n stroke.opacity\n ]);\n }\n if (defined(stroke.dashType)) {\n attrs.push([\n 'stroke-dasharray',\n this.renderDashType(stroke)\n ]);\n }\n } else {\n attrs.push([\n 'stroke',\n NONE\n ]);\n }\n return attrs;\n },\n renderStroke: function () {\n return renderAllAttr(this.mapStroke(this.srcElement.options.stroke));\n },\n renderDashType: function (stroke) {\n var dashType = stroke.dashType;\n var width = stroke.width;\n if (width === void 0) {\n width = 1;\n }\n if (dashType && dashType !== SOLID) {\n var dashArray = DASH_ARRAYS[dashType.toLowerCase()];\n var result = [];\n for (var i = 0; i < dashArray.length; i++) {\n result.push(dashArray[i] * width);\n }\n return result.join(' ');\n }\n },\n renderLinecap: function (stroke) {\n var dashType = stroke.dashType;\n var lineCap = stroke.lineCap;\n return dashType && dashType !== 'solid' ? BUTT : lineCap;\n },\n mapFill: function (fill) {\n var attrs = [];\n if (!(fill && fill.nodeType === 'Gradient')) {\n if (fill && !isTransparent(fill.color)) {\n attrs.push([\n 'fill',\n fill.color\n ]);\n if (defined(fill.opacity)) {\n attrs.push([\n 'fill-opacity',\n fill.opacity\n ]);\n }\n } else {\n attrs.push([\n 'fill',\n NONE\n ]);\n }\n }\n return attrs;\n },\n renderFill: function () {\n return renderAllAttr(this.mapFill(this.srcElement.options.fill));\n },\n template: function () {\n return '';\n }\n });\n NODE_MAP.Path = PathNode;\n var ArcNode = PathNode.extend({\n renderData: function () {\n return this.printPath(this.srcElement.toPath());\n }\n });\n NODE_MAP.Arc = ArcNode;\n var CircleNode = PathNode.extend({\n geometryChange: function () {\n var center = this.center();\n this.attr('cx', center.x);\n this.attr('cy', center.y);\n this.attr('r', this.radius());\n this.invalidate();\n },\n center: function () {\n return this.srcElement.geometry().center;\n },\n radius: function () {\n return this.srcElement.geometry().radius;\n },\n template: function () {\n return '';\n }\n });\n NODE_MAP.Circle = CircleNode;\n var RectNode = PathNode.extend({\n geometryChange: function () {\n var geometry = this.srcElement.geometry();\n this.attr('x', geometry.origin.x);\n this.attr('y', geometry.origin.y);\n this.attr('width', geometry.size.width);\n this.attr('height', geometry.size.height);\n this.invalidate();\n },\n size: function () {\n return this.srcElement.geometry().size;\n },\n origin: function () {\n return this.srcElement.geometry().origin;\n },\n template: function () {\n return '';\n }\n });\n NODE_MAP.Rect = RectNode;\n var ImageNode = PathNode.extend({\n geometryChange: function () {\n this.allAttr(this.mapPosition());\n this.invalidate();\n },\n optionsChange: function (e) {\n if (e.field === 'src') {\n this.allAttr(this.mapSource());\n }\n PathNode.fn.optionsChange.call(this, e);\n },\n mapPosition: function () {\n var rect = this.srcElement.rect();\n var tl = rect.topLeft();\n return [\n [\n 'x',\n tl.x\n ],\n [\n 'y',\n tl.y\n ],\n [\n 'width',\n rect.width() + 'px'\n ],\n [\n 'height',\n rect.height() + 'px'\n ]\n ];\n },\n renderPosition: function () {\n return renderAllAttr(this.mapPosition());\n },\n mapSource: function (encode) {\n var src = this.srcElement.src();\n if (encode) {\n src = kendo.htmlEncode(src);\n }\n return [[\n 'xlink:href',\n src\n ]];\n },\n renderSource: function () {\n return renderAllAttr(this.mapSource(true));\n },\n template: function () {\n return '' + '';\n }\n });\n NODE_MAP.Image = ImageNode;\n var ENTITY_REGEX = /&(?:[a-zA-Z]+|#\\d+);/g;\n function decodeEntities(text) {\n if (!text || typeof text !== 'string' || !ENTITY_REGEX.test(text)) {\n return text;\n }\n var element = decodeEntities._element;\n ENTITY_REGEX.lastIndex = 0;\n return text.replace(ENTITY_REGEX, function (match) {\n element.innerHTML = match;\n return element.textContent || element.innerText;\n });\n }\n if (typeof document !== 'undefined') {\n decodeEntities._element = document.createElement('span');\n }\n var TextNode = PathNode.extend({\n geometryChange: function () {\n var pos = this.pos();\n this.attr('x', pos.x);\n this.attr('y', pos.y);\n this.invalidate();\n },\n optionsChange: function (e) {\n if (e.field === 'font') {\n this.attr('style', renderStyle(this.mapStyle()));\n this.geometryChange();\n } else if (e.field === 'content') {\n PathNode.fn.content.call(this, this.srcElement.content());\n }\n PathNode.fn.optionsChange.call(this, e);\n },\n mapStyle: function (encode) {\n var style = PathNode.fn.mapStyle.call(this, encode);\n var font = this.srcElement.options.font;\n if (encode) {\n font = kendo.htmlEncode(font);\n }\n style.push([\n 'font',\n font\n ], [\n 'white-space',\n 'pre'\n ]);\n return style;\n },\n pos: function () {\n var pos = this.srcElement.position();\n var size = this.srcElement.measure();\n return pos.clone().setY(pos.y + size.baseline);\n },\n renderContent: function () {\n var content = this.srcElement.content();\n content = decodeEntities(content);\n content = kendo.htmlEncode(content);\n return kendoUtil.normalizeText(content);\n },\n renderTextAnchor: function () {\n var anchor;\n if ((this.options || {}).rtl && !(supportBrowser.msie || supportBrowser.edge)) {\n anchor = 'end';\n }\n return renderAttr('text-anchor', anchor);\n },\n template: function () {\n return '' + this.renderContent() + '';\n }\n });\n NODE_MAP.Text = TextNode;\n var MultiPathNode = PathNode.extend({\n renderData: function () {\n var this$1 = this;\n var paths = this.srcElement.paths;\n if (paths.length > 0) {\n var result = [];\n for (var i = 0; i < paths.length; i++) {\n result.push(this$1.printPath(paths[i]));\n }\n return result.join(' ');\n }\n }\n });\n NODE_MAP.MultiPath = MultiPathNode;\n var geometry = {\n Circle: Circle$2,\n Arc: Arc$2,\n Rect: Rect,\n Point: Point,\n Segment: Segment,\n Matrix: Matrix,\n Size: Size,\n toMatrix: toMatrix,\n Transformation: Transformation,\n transform: transform\n };\n function exportGroup(group) {\n var root = new RootNode({ skipBaseHref: true });\n var bbox = group.clippedBBox();\n var rootGroup = group;\n if (bbox) {\n var origin = bbox.getOrigin();\n var exportRoot = new Group();\n exportRoot.transform(transform().translate(-origin.x, -origin.y));\n exportRoot.children.push(group);\n rootGroup = exportRoot;\n }\n root.load([rootGroup]);\n var svg = '' + root.render() + '';\n root.destroy();\n return svg;\n }\n var svg = {\n Surface: Surface$1,\n RootNode: RootNode,\n Node: Node,\n GroupNode: GroupNode,\n ArcNode: ArcNode,\n CircleNode: CircleNode,\n RectNode: RectNode,\n ImageNode: ImageNode,\n TextNode: TextNode,\n PathNode: PathNode,\n MultiPathNode: MultiPathNode,\n DefinitionNode: DefinitionNode,\n ClipNode: ClipNode,\n GradientStopNode: GradientStopNode,\n LinearGradientNode: LinearGradientNode,\n RadialGradientNode: RadialGradientNode,\n exportGroup: exportGroup\n };\n var NODE_MAP$2 = {};\n function renderPath(ctx, path) {\n var segments = path.segments;\n if (segments.length === 0) {\n return;\n }\n var segment = segments[0];\n var anchor = segment.anchor();\n ctx.moveTo(anchor.x, anchor.y);\n for (var i = 1; i < segments.length; i++) {\n segment = segments[i];\n anchor = segment.anchor();\n var prevSeg = segments[i - 1];\n var prevOut = prevSeg.controlOut();\n var controlIn = segment.controlIn();\n if (prevOut && controlIn) {\n ctx.bezierCurveTo(prevOut.x, prevOut.y, controlIn.x, controlIn.y, anchor.x, anchor.y);\n } else {\n ctx.lineTo(anchor.x, anchor.y);\n }\n }\n if (path.options.closed) {\n ctx.closePath();\n }\n }\n var Node$2 = BaseNode.extend({\n init: function (srcElement) {\n BaseNode.fn.init.call(this, srcElement);\n if (srcElement) {\n this.initClip();\n }\n },\n initClip: function () {\n var clip = this.srcElement.clip();\n if (clip) {\n this.clip = clip;\n clip.addObserver(this);\n }\n },\n clear: function () {\n if (this.srcElement) {\n this.srcElement.removeObserver(this);\n }\n this.clearClip();\n BaseNode.fn.clear.call(this);\n },\n clearClip: function () {\n if (this.clip) {\n this.clip.removeObserver(this);\n delete this.clip;\n }\n },\n setClip: function (ctx) {\n if (this.clip) {\n ctx.beginPath();\n renderPath(ctx, this.clip);\n ctx.clip();\n }\n },\n optionsChange: function (e) {\n if (e.field === 'clip') {\n this.clearClip();\n this.initClip();\n }\n BaseNode.fn.optionsChange.call(this, e);\n },\n setTransform: function (ctx) {\n if (this.srcElement) {\n var transform = this.srcElement.transform();\n if (transform) {\n ctx.transform.apply(ctx, transform.matrix().toArray(6));\n }\n }\n },\n loadElements: function (elements, pos, cors) {\n var this$1 = this;\n for (var i = 0; i < elements.length; i++) {\n var srcElement = elements[i];\n var children = srcElement.children;\n var childNode = new NODE_MAP$2[srcElement.nodeType](srcElement, cors);\n if (children && children.length > 0) {\n childNode.load(children, pos, cors);\n }\n if (defined(pos)) {\n this$1.insertAt(childNode, pos);\n } else {\n this$1.append(childNode);\n }\n }\n },\n load: function (elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n this.invalidate();\n },\n setOpacity: function (ctx) {\n if (this.srcElement) {\n var opacity = this.srcElement.opacity();\n if (defined(opacity)) {\n this.globalAlpha(ctx, opacity);\n }\n }\n },\n globalAlpha: function (ctx, value) {\n var opactity = value;\n if (opactity && ctx.globalAlpha) {\n opactity *= ctx.globalAlpha;\n }\n ctx.globalAlpha = opactity;\n },\n visible: function () {\n var src = this.srcElement;\n return !src || src && src.options.visible !== false;\n }\n });\n var GroupNode$2 = Node$2.extend({\n renderTo: function (ctx) {\n if (!this.visible()) {\n return;\n }\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n var childNodes = this.childNodes;\n for (var i = 0; i < childNodes.length; i++) {\n var child = childNodes[i];\n if (child.visible()) {\n child.renderTo(ctx);\n }\n }\n ctx.restore();\n }\n });\n Traversable.extend(GroupNode$2.prototype, 'childNodes');\n NODE_MAP$2.Group = GroupNode$2;\n var FRAME_DELAY = 1000 / 60;\n var RootNode$2 = GroupNode$2.extend({\n init: function (canvas) {\n GroupNode$2.fn.init.call(this);\n this.canvas = canvas;\n this.ctx = canvas.getContext('2d');\n var invalidateHandler = this._invalidate.bind(this);\n this.invalidate = kendo.throttle(function () {\n kendo.animationFrame(invalidateHandler);\n }, FRAME_DELAY);\n },\n destroy: function () {\n GroupNode$2.fn.destroy.call(this);\n this.canvas = null;\n this.ctx = null;\n },\n load: function (elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n this._invalidate();\n },\n _invalidate: function () {\n if (!this.ctx) {\n return;\n }\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.renderTo(this.ctx);\n }\n });\n Traversable.extend(RootNode$2.prototype, 'childNodes');\n var QuadRoot = Class.extend({\n init: function () {\n this.shapes = [];\n },\n _add: function (shape, bbox) {\n this.shapes.push({\n bbox: bbox,\n shape: shape\n });\n shape._quadNode = this;\n },\n pointShapes: function (point) {\n var shapes = this.shapes;\n var length = shapes.length;\n var result = [];\n for (var idx = 0; idx < length; idx++) {\n if (shapes[idx].bbox.containsPoint(point)) {\n result.push(shapes[idx].shape);\n }\n }\n return result;\n },\n insert: function (shape, bbox) {\n this._add(shape, bbox);\n },\n remove: function (shape) {\n var shapes = this.shapes;\n var length = shapes.length;\n for (var idx = 0; idx < length; idx++) {\n if (shapes[idx].shape === shape) {\n shapes.splice(idx, 1);\n break;\n }\n }\n }\n });\n var QuadNode = QuadRoot.extend({\n init: function (rect) {\n QuadRoot.fn.init.call(this);\n this.children = [];\n this.rect = rect;\n },\n inBounds: function (rect) {\n var nodeRect = this.rect;\n var nodeBottomRight = nodeRect.bottomRight();\n var bottomRight = rect.bottomRight();\n var inBounds = nodeRect.origin.x <= rect.origin.x && nodeRect.origin.y <= rect.origin.y && bottomRight.x <= nodeBottomRight.x && bottomRight.y <= nodeBottomRight.y;\n return inBounds;\n },\n pointShapes: function (point) {\n var children = this.children;\n var length = children.length;\n var result = QuadRoot.fn.pointShapes.call(this, point);\n for (var idx = 0; idx < length; idx++) {\n append(result, children[idx].pointShapes(point));\n }\n return result;\n },\n insert: function (shape, bbox) {\n var children = this.children;\n var inserted = false;\n if (this.inBounds(bbox)) {\n if (this.shapes.length < 4) {\n this._add(shape, bbox);\n } else {\n if (!children.length) {\n this._initChildren();\n }\n for (var idx = 0; idx < children.length; idx++) {\n if (children[idx].insert(shape, bbox)) {\n inserted = true;\n break;\n }\n }\n if (!inserted) {\n this._add(shape, bbox);\n }\n }\n inserted = true;\n }\n return inserted;\n },\n _initChildren: function () {\n var ref = this;\n var rect = ref.rect;\n var children = ref.children;\n var center = rect.center();\n var halfWidth = rect.width() / 2;\n var halfHeight = rect.height() / 2;\n children.push(new QuadNode(new Rect([\n rect.origin.x,\n rect.origin.y\n ], [\n halfWidth,\n halfHeight\n ])), new QuadNode(new Rect([\n center.x,\n rect.origin.y\n ], [\n halfWidth,\n halfHeight\n ])), new QuadNode(new Rect([\n rect.origin.x,\n center.y\n ], [\n halfWidth,\n halfHeight\n ])), new QuadNode(new Rect([\n center.x,\n center.y\n ], [\n halfWidth,\n halfHeight\n ])));\n }\n });\n var ROOT_SIZE = 3000;\n var LEVEL_STEP = 10000;\n var MAX_LEVEL = 75;\n var ShapesQuadTree = Class.extend({\n init: function () {\n this.initRoots();\n },\n initRoots: function () {\n this.rootMap = {};\n this.root = new QuadRoot();\n this.rootElements = [];\n },\n clear: function () {\n var this$1 = this;\n var rootElements = this.rootElements;\n for (var idx = 0; idx < rootElements.length; idx++) {\n this$1.remove(rootElements[idx]);\n }\n this.initRoots();\n },\n pointShape: function (point) {\n var sectorRoot = (this.rootMap[Math.floor(point.x / ROOT_SIZE)] || {})[Math.floor(point.y / ROOT_SIZE)];\n var result = this.root.pointShapes(point);\n if (sectorRoot) {\n result = result.concat(sectorRoot.pointShapes(point));\n }\n this.assignZindex(result);\n result.sort(zIndexComparer);\n for (var idx = 0; idx < result.length; idx++) {\n if (result[idx].containsPoint(point)) {\n return result[idx];\n }\n }\n },\n assignZindex: function (elements) {\n var this$1 = this;\n for (var idx = 0; idx < elements.length; idx++) {\n var element = elements[idx];\n var zIndex = 0;\n var levelWeight = Math.pow(LEVEL_STEP, MAX_LEVEL);\n var parents = [];\n while (element) {\n parents.push(element);\n element = element.parent;\n }\n while (parents.length) {\n element = parents.pop();\n zIndex += ((element.parent ? element.parent.children : this$1.rootElements).indexOf(element) + 1) * levelWeight;\n levelWeight /= LEVEL_STEP;\n }\n elements[idx]._zIndex = zIndex;\n }\n },\n optionsChange: function (e) {\n if (e.field === 'transform' || e.field === 'stroke.width') {\n this.bboxChange(e.element);\n }\n },\n geometryChange: function (e) {\n this.bboxChange(e.element);\n },\n bboxChange: function (element) {\n var this$1 = this;\n if (element.nodeType === 'Group') {\n for (var idx = 0; idx < element.children.length; idx++) {\n this$1.bboxChange(element.children[idx]);\n }\n } else {\n if (element._quadNode) {\n element._quadNode.remove(element);\n }\n this._insertShape(element);\n }\n },\n add: function (elements) {\n var elementsArray = Array.isArray(elements) ? elements.slice(0) : [elements];\n append(this.rootElements, elementsArray);\n this._insert(elementsArray);\n },\n childrenChange: function (e) {\n var this$1 = this;\n if (e.action === 'remove') {\n for (var idx = 0; idx < e.items.length; idx++) {\n this$1.remove(e.items[idx]);\n }\n } else {\n this._insert(Array.prototype.slice.call(e.items, 0));\n }\n },\n _insert: function (elements) {\n var this$1 = this;\n var element;\n while (elements.length > 0) {\n element = elements.pop();\n element.addObserver(this$1);\n if (element.nodeType === 'Group') {\n append(elements, element.children);\n } else {\n this$1._insertShape(element);\n }\n }\n },\n _insertShape: function (shape) {\n var bbox = shape.bbox();\n if (bbox) {\n var sectors = this.getSectors(bbox);\n var x = sectors[0][0];\n var y = sectors[1][0];\n if (this.inRoot(sectors)) {\n this.root.insert(shape, bbox);\n } else {\n var rootMap = this.rootMap;\n if (!rootMap[x]) {\n rootMap[x] = {};\n }\n if (!rootMap[x][y]) {\n rootMap[x][y] = new QuadNode(new Rect([\n x * ROOT_SIZE,\n y * ROOT_SIZE\n ], [\n ROOT_SIZE,\n ROOT_SIZE\n ]));\n }\n rootMap[x][y].insert(shape, bbox);\n }\n }\n },\n remove: function (element) {\n var this$1 = this;\n element.removeObserver(this);\n if (element.nodeType === 'Group') {\n var children = element.children;\n for (var idx = 0; idx < children.length; idx++) {\n this$1.remove(children[idx]);\n }\n } else if (element._quadNode) {\n element._quadNode.remove(element);\n delete element._quadNode;\n }\n },\n inRoot: function (sectors) {\n return sectors[0].length > 1 || sectors[1].length > 1;\n },\n getSectors: function (rect) {\n var bottomRight = rect.bottomRight();\n var bottomX = Math.floor(bottomRight.x / ROOT_SIZE);\n var bottomY = Math.floor(bottomRight.y / ROOT_SIZE);\n var sectors = [\n [],\n []\n ];\n for (var x = Math.floor(rect.origin.x / ROOT_SIZE); x <= bottomX; x++) {\n sectors[0].push(x);\n }\n for (var y = Math.floor(rect.origin.y / ROOT_SIZE); y <= bottomY; y++) {\n sectors[1].push(y);\n }\n return sectors;\n }\n });\n function zIndexComparer(x1, x2) {\n if (x1._zIndex < x2._zIndex) {\n return 1;\n }\n if (x1._zIndex > x2._zIndex) {\n return -1;\n }\n return 0;\n }\n var SurfaceCursor = Class.extend({\n init: function (surface) {\n surface.bind('mouseenter', this._mouseenter.bind(this));\n surface.bind('mouseleave', this._mouseleave.bind(this));\n this.element = surface.element;\n },\n clear: function () {\n this._resetCursor();\n },\n destroy: function () {\n this._resetCursor();\n delete this.element;\n },\n _mouseenter: function (e) {\n var cursor = this._shapeCursor(e);\n if (!cursor) {\n this._resetCursor();\n } else {\n if (!this._current) {\n this._defaultCursor = this._getCursor();\n }\n this._setCursor(cursor);\n }\n },\n _mouseleave: function () {\n this._resetCursor();\n },\n _shapeCursor: function (e) {\n var shape = e.element;\n while (shape && !defined(shape.options.cursor)) {\n shape = shape.parent;\n }\n if (shape) {\n return shape.options.cursor;\n }\n },\n _getCursor: function () {\n if (this.element) {\n return this.element.style.cursor;\n }\n },\n _setCursor: function (cursor) {\n if (this.element) {\n this.element.style.cursor = cursor;\n this._current = cursor;\n }\n },\n _resetCursor: function () {\n if (this._current) {\n this._setCursor(this._defaultCursor || '');\n delete this._current;\n }\n }\n });\n var Surface$3 = Surface.extend({\n init: function (element, options) {\n Surface.fn.init.call(this, element, options);\n this.element.innerHTML = this._template(this);\n var canvas = this.element.firstElementChild;\n var size = elementSize(element);\n canvas.width = size.width;\n canvas.height = size.height;\n this._rootElement = canvas;\n this._root = new RootNode$2(canvas);\n this._mouseTrackHandler = this._trackMouse.bind(this);\n bindEvents(this.element, {\n click: this._mouseTrackHandler,\n mousemove: this._mouseTrackHandler\n });\n },\n destroy: function () {\n Surface.fn.destroy.call(this);\n if (this._root) {\n this._root.destroy();\n this._root = null;\n }\n if (this._searchTree) {\n this._searchTree.clear();\n delete this._searchTree;\n }\n if (this._cursor) {\n this._cursor.destroy();\n delete this._cursor;\n }\n unbindEvents(this.element, {\n click: this._mouseTrackHandler,\n mousemove: this._mouseTrackHandler\n });\n },\n draw: function (element) {\n Surface.fn.draw.call(this, element);\n this._root.load([element], undefined, this.options.cors);\n if (this._searchTree) {\n this._searchTree.add([element]);\n }\n },\n clear: function () {\n Surface.fn.clear.call(this);\n this._root.clear();\n if (this._searchTree) {\n this._searchTree.clear();\n }\n if (this._cursor) {\n this._cursor.clear();\n }\n },\n eventTarget: function (e) {\n if (this._searchTree) {\n var point = this._surfacePoint(e);\n var shape = this._searchTree.pointShape(point);\n return shape;\n }\n },\n image: function () {\n var ref = this;\n var root = ref._root;\n var rootElement = ref._rootElement;\n var loadingStates = [];\n root.traverse(function (childNode) {\n if (childNode.loading) {\n loadingStates.push(childNode.loading);\n }\n });\n var promise = createPromise();\n var resolveDataURL = function () {\n root._invalidate();\n try {\n var data = rootElement.toDataURL();\n promise.resolve(data);\n } catch (e) {\n promise.reject(e);\n }\n };\n promiseAll(loadingStates).then(resolveDataURL, resolveDataURL);\n return promise;\n },\n suspendTracking: function () {\n Surface.fn.suspendTracking.call(this);\n if (this._searchTree) {\n this._searchTree.clear();\n delete this._searchTree;\n }\n },\n resumeTracking: function () {\n Surface.fn.resumeTracking.call(this);\n if (!this._searchTree) {\n this._searchTree = new ShapesQuadTree();\n var childNodes = this._root.childNodes;\n var rootElements = [];\n for (var idx = 0; idx < childNodes.length; idx++) {\n rootElements.push(childNodes[idx].srcElement);\n }\n this._searchTree.add(rootElements);\n }\n },\n _resize: function () {\n this._rootElement.width = this._size.width;\n this._rootElement.height = this._size.height;\n this._root.invalidate();\n },\n _template: function () {\n return '';\n },\n _enableTracking: function () {\n this._searchTree = new ShapesQuadTree();\n this._cursor = new SurfaceCursor(this);\n Surface.fn._enableTracking.call(this);\n },\n _trackMouse: function (e) {\n if (this._suspendedTracking) {\n return;\n }\n var shape = this.eventTarget(e);\n if (e.type !== 'click') {\n var currentShape = this._currentShape;\n if (currentShape && currentShape !== shape) {\n this.trigger('mouseleave', {\n element: currentShape,\n originalEvent: e,\n type: 'mouseleave'\n });\n }\n if (shape && currentShape !== shape) {\n this.trigger('mouseenter', {\n element: shape,\n originalEvent: e,\n type: 'mouseenter'\n });\n }\n this.trigger('mousemove', {\n element: shape,\n originalEvent: e,\n type: 'mousemove'\n });\n this._currentShape = shape;\n } else if (shape) {\n this.trigger('click', {\n element: shape,\n originalEvent: e,\n type: 'click'\n });\n }\n }\n });\n Surface$3.prototype.type = 'canvas';\n if (typeof document !== 'undefined' && document.createElement('canvas').getContext) {\n Surface.support.canvas = true;\n SurfaceFactory.current.register('canvas', Surface$3, 20);\n }\n function addGradientStops(gradient, stops) {\n for (var idx = 0; idx < stops.length; idx++) {\n var stop = stops[idx];\n var color = kendo.parseColor(stop.color());\n color.a *= stop.opacity();\n gradient.addColorStop(stop.offset(), color.toCssRgba());\n }\n }\n var PathNode$2 = Node$2.extend({\n renderTo: function (ctx) {\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n ctx.beginPath();\n this.renderPoints(ctx, this.srcElement);\n this.setLineDash(ctx);\n this.setLineCap(ctx);\n this.setLineJoin(ctx);\n this.setFill(ctx);\n this.setStroke(ctx);\n ctx.restore();\n },\n setFill: function (ctx) {\n var fill = this.srcElement.options.fill;\n var hasFill = false;\n if (fill) {\n if (fill.nodeType === 'Gradient') {\n this.setGradientFill(ctx, fill);\n hasFill = true;\n } else if (!isTransparent(fill.color)) {\n ctx.fillStyle = fill.color;\n ctx.save();\n this.globalAlpha(ctx, fill.opacity);\n ctx.fill();\n ctx.restore();\n hasFill = true;\n }\n }\n return hasFill;\n },\n setGradientFill: function (ctx, fill) {\n var bbox = this.srcElement.rawBBox();\n var gradient;\n if (fill instanceof LinearGradient) {\n var start = fill.start();\n var end = fill.end();\n gradient = ctx.createLinearGradient(start.x, start.y, end.x, end.y);\n } else if (fill instanceof RadialGradient) {\n var center = fill.center();\n gradient = ctx.createRadialGradient(center.x, center.y, 0, center.x, center.y, fill.radius());\n }\n addGradientStops(gradient, fill.stops);\n ctx.save();\n if (!fill.userSpace()) {\n ctx.transform(bbox.width(), 0, 0, bbox.height(), bbox.origin.x, bbox.origin.y);\n }\n ctx.fillStyle = gradient;\n ctx.fill();\n ctx.restore();\n },\n setStroke: function (ctx) {\n var stroke = this.srcElement.options.stroke;\n if (stroke && !isTransparent(stroke.color) && stroke.width > 0) {\n ctx.strokeStyle = stroke.color;\n ctx.lineWidth = valueOrDefault(stroke.width, 1);\n ctx.save();\n this.globalAlpha(ctx, stroke.opacity);\n ctx.stroke();\n ctx.restore();\n return true;\n }\n },\n dashType: function () {\n var stroke = this.srcElement.options.stroke;\n if (stroke && stroke.dashType) {\n return stroke.dashType.toLowerCase();\n }\n },\n setLineDash: function (ctx) {\n var dashType = this.dashType();\n if (dashType && dashType !== SOLID) {\n var dashArray = DASH_ARRAYS[dashType];\n if (ctx.setLineDash) {\n ctx.setLineDash(dashArray);\n } else {\n ctx.mozDash = dashArray;\n ctx.webkitLineDash = dashArray;\n }\n }\n },\n setLineCap: function (ctx) {\n var dashType = this.dashType();\n var stroke = this.srcElement.options.stroke;\n if (dashType && dashType !== SOLID) {\n ctx.lineCap = BUTT;\n } else if (stroke && stroke.lineCap) {\n ctx.lineCap = stroke.lineCap;\n }\n },\n setLineJoin: function (ctx) {\n var stroke = this.srcElement.options.stroke;\n if (stroke && stroke.lineJoin) {\n ctx.lineJoin = stroke.lineJoin;\n }\n },\n renderPoints: function (ctx, path) {\n renderPath(ctx, path);\n }\n });\n NODE_MAP$2.Path = PathNode$2;\n var ArcNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var path = this.srcElement.toPath();\n renderPath(ctx, path);\n }\n });\n NODE_MAP$2.Arc = ArcNode$2;\n var CircleNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var ref = this.srcElement.geometry();\n var center = ref.center;\n var radius = ref.radius;\n ctx.arc(center.x, center.y, radius, 0, Math.PI * 2);\n }\n });\n NODE_MAP$2.Circle = CircleNode$2;\n var RectNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var ref = this.srcElement.geometry();\n var origin = ref.origin;\n var size = ref.size;\n ctx.rect(origin.x, origin.y, size.width, size.height);\n }\n });\n NODE_MAP$2.Rect = RectNode$2;\n var ImageNode$2 = PathNode$2.extend({\n init: function (srcElement, cors) {\n PathNode$2.fn.init.call(this, srcElement);\n this.onLoad = this.onLoad.bind(this);\n this.onError = this.onError.bind(this);\n this.loading = createPromise();\n var img = this.img = new Image();\n if (cors && !/^data:/i.test(srcElement.src())) {\n img.crossOrigin = cors;\n }\n img.src = srcElement.src();\n if (img.complete) {\n this.onLoad();\n } else {\n img.onload = this.onLoad;\n img.onerror = this.onError;\n }\n },\n renderTo: function (ctx) {\n if (this.loading.state() === 'resolved') {\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.drawImage(ctx);\n ctx.restore();\n }\n },\n optionsChange: function (e) {\n if (e.field === 'src') {\n this.loading = createPromise();\n this.img.src = this.srcElement.src();\n } else {\n PathNode$2.fn.optionsChange.call(this, e);\n }\n },\n onLoad: function () {\n this.loading.resolve();\n this.invalidate();\n },\n onError: function () {\n this.loading.reject(new Error('Unable to load image \\'' + this.img.src + '\\'. Check for connectivity and verify CORS headers.'));\n },\n drawImage: function (ctx) {\n var rect = this.srcElement.rect();\n var topLeft = rect.topLeft();\n ctx.drawImage(this.img, topLeft.x, topLeft.y, rect.width(), rect.height());\n }\n });\n NODE_MAP$2.Image = ImageNode$2;\n var TextNode$2 = PathNode$2.extend({\n renderTo: function (ctx) {\n var text = this.srcElement;\n var pos = text.position();\n var size = text.measure();\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n ctx.beginPath();\n ctx.font = text.options.font;\n ctx.textAlign = 'left';\n if (this.setFill(ctx)) {\n ctx.fillText(text.content(), pos.x, pos.y + size.baseline);\n }\n if (this.setStroke(ctx)) {\n this.setLineDash(ctx);\n ctx.strokeText(text.content(), pos.x, pos.y + size.baseline);\n }\n ctx.restore();\n }\n });\n NODE_MAP$2.Text = TextNode$2;\n var MultiPathNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var paths = this.srcElement.paths;\n for (var i = 0; i < paths.length; i++) {\n renderPath(ctx, paths[i]);\n }\n }\n });\n NODE_MAP$2.MultiPath = MultiPathNode$2;\n var canvas = {\n Surface: Surface$3,\n RootNode: RootNode$2,\n Node: Node$2,\n GroupNode: GroupNode$2,\n ArcNode: ArcNode$2,\n CircleNode: CircleNode$2,\n RectNode: RectNode$2,\n ImageNode: ImageNode$2,\n TextNode: TextNode$2,\n PathNode: PathNode$2,\n MultiPathNode: MultiPathNode$2\n };\n function exportImage(group, options) {\n var defaults = {\n width: '800px',\n height: '600px',\n cors: 'Anonymous'\n };\n var exportRoot = group;\n var bbox = group.clippedBBox();\n if (bbox) {\n var origin = bbox.getOrigin();\n exportRoot = new Group();\n exportRoot.transform(transform().translate(-origin.x, -origin.y));\n exportRoot.children.push(group);\n var size = bbox.getSize();\n defaults.width = size.width + 'px';\n defaults.height = size.height + 'px';\n }\n var surfaceOptions = $.extend(defaults, options);\n var container = document.createElement('div');\n var style = container.style;\n style.display = 'none';\n style.width = surfaceOptions.width;\n style.height = surfaceOptions.height;\n document.body.appendChild(container);\n var surface = new Surface$3(container, surfaceOptions);\n surface.suspendTracking();\n surface.draw(exportRoot);\n var promise = surface.image();\n var destroy = function () {\n surface.destroy();\n document.body.removeChild(container);\n };\n promise.then(destroy, destroy);\n return promise;\n }\n function exportSVG(group, options) {\n var svg = exportGroup(group);\n if (!options || !options.raw) {\n svg = 'data:image/svg+xml;base64,' + encodeBase64(svg);\n }\n return createPromise().resolve(svg);\n }\n var browser = supportBrowser;\n function slice$1(thing) {\n return Array.prototype.slice.call(thing);\n }\n var KENDO_PSEUDO_ELEMENT = 'KENDO-PSEUDO-ELEMENT';\n var IMAGE_CACHE = {};\n var nodeInfo = {};\n nodeInfo._root = nodeInfo;\n var inBrowser = typeof window !== 'undefined';\n var microsoft = inBrowser ? browser.msie || browser.edge : false;\n var TextRect = Text.extend({\n init: function (str, rect, options) {\n Text.fn.init.call(this, str, rect.getOrigin(), options);\n this._pdfRect = rect;\n },\n rect: function () {\n return this._pdfRect;\n },\n rawBBox: function () {\n return this._pdfRect;\n }\n });\n function addClass(el, cls) {\n if (el.classList) {\n el.classList.add(cls);\n } else {\n el.className += ' ' + cls;\n }\n }\n function removeClass(el, cls) {\n if (el.classList) {\n el.classList.remove(cls);\n } else {\n el.className = el.className.split(/\\s+/).reduce(function (a, word) {\n if (word != cls) {\n a.push(word);\n }\n return a;\n }, []).join(' ');\n }\n }\n function setCSS(el, styles) {\n Object.keys(styles).forEach(function (key) {\n el.style[key] = styles[key];\n });\n }\n var matches = typeof Element !== 'undefined' && Element.prototype && function (p) {\n if (p.matches) {\n return function (el, selector) {\n return el.matches(selector);\n };\n }\n if (p.webkitMatchesSelector) {\n return function (el, selector) {\n return el.webkitMatchesSelector(selector);\n };\n }\n if (p.mozMatchesSelector) {\n return function (el, selector) {\n return el.mozMatchesSelector(selector);\n };\n }\n if (p.msMatchesSelector) {\n return function (el, selector) {\n return el.msMatchesSelector(selector);\n };\n }\n return function (s) {\n return [].indexOf.call(document.querySelectorAll(s), this) !== -1;\n };\n }(Element.prototype);\n function closest(el, selector) {\n if (el.closest) {\n return el.closest(selector);\n }\n while (el && !/^\\[object (?:HTML)?Document\\]$/.test(String(el))) {\n if (el.nodeType == 1 && matches(el, selector)) {\n return el;\n }\n el = el.parentNode;\n }\n }\n var cloneNodes = function ($) {\n if ($) {\n return function cloneNodes(el) {\n var clone = el.cloneNode(false);\n if (el.nodeType == 1) {\n var $el = $(el), $clone = $(clone), i;\n var data = $el.data();\n for (i in data) {\n $clone.data(i, data[i]);\n }\n if (/^canvas$/i.test(el.tagName)) {\n clone.getContext('2d').drawImage(el, 0, 0);\n } else if (/^(?:input|select|textarea|option)$/i.test(el.tagName)) {\n clone.removeAttribute('id');\n clone.removeAttribute('name');\n clone.value = el.value;\n clone.checked = el.checked;\n clone.selected = el.selected;\n }\n for (i = el.firstChild; i; i = i.nextSibling) {\n clone.appendChild(cloneNodes(i));\n }\n }\n return clone;\n };\n } else {\n return function cloneNodes(el) {\n var clone = function dive(node) {\n var clone = node.cloneNode(false);\n if (node._kendoExportVisual) {\n clone._kendoExportVisual = node._kendoExportVisual;\n }\n for (var i = node.firstChild; i; i = i.nextSibling) {\n clone.appendChild(dive(i));\n }\n return clone;\n }(el);\n var canvases = el.querySelectorAll('canvas');\n if (canvases.length) {\n slice$1(clone.querySelectorAll('canvas')).forEach(function (canvas$$1, i) {\n canvas$$1.getContext('2d').drawImage(canvases[i], 0, 0);\n });\n }\n var orig = el.querySelectorAll('input, select, textarea, option');\n slice$1(clone.querySelectorAll('input, select, textarea, option')).forEach(function (el, i) {\n el.removeAttribute('id');\n el.removeAttribute('name');\n el.value = orig[i].value;\n el.checked = orig[i].checked;\n el.selected = orig[i].selected;\n });\n return clone;\n };\n }\n }(typeof window !== 'undefined' && window.kendo && window.kendo.jQuery);\n function getXY(thing) {\n if (typeof thing == 'number') {\n return {\n x: thing,\n y: thing\n };\n }\n if (Array.isArray(thing)) {\n return {\n x: thing[0],\n y: thing[1]\n };\n }\n return {\n x: thing.x,\n y: thing.y\n };\n }\n function drawDOM(element, options) {\n if (!options) {\n options = {};\n }\n var promise = createPromise();\n if (!element) {\n return promise.reject('No element to export');\n }\n if (typeof window.getComputedStyle != 'function') {\n throw new Error('window.getComputedStyle is missing. You are using an unsupported browser, or running in IE8 compatibility mode. Drawing HTML is supported in Chrome, Firefox, Safari and IE9+.');\n }\n kendo.pdf.defineFont(getFontFaces(element.ownerDocument));\n var scale = getXY(options.scale || 1);\n function doOne(element) {\n var group = new Group();\n var pos = element.getBoundingClientRect();\n setTransform(group, [\n scale.x,\n 0,\n 0,\n scale.y,\n -pos.left * scale.x,\n -pos.top * scale.y\n ]);\n nodeInfo._clipbox = false;\n nodeInfo._matrix = Matrix.unit();\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n if (options.avoidLinks === true) {\n nodeInfo._avoidLinks = 'a';\n } else {\n nodeInfo._avoidLinks = options.avoidLinks;\n }\n addClass(element, 'k-pdf-export');\n renderElement(element, group);\n removeClass(element, 'k-pdf-export');\n return group;\n }\n cacheImages(element, function () {\n var forceBreak = options && options.forcePageBreak;\n var hasPaperSize = options && options.paperSize && options.paperSize != 'auto';\n var paperOptions = kendo.pdf.getPaperOptions(function (key, def) {\n if (key == 'paperSize') {\n return hasPaperSize ? options[key] : 'A4';\n }\n return key in options ? options[key] : def;\n });\n var pageWidth = hasPaperSize && paperOptions.paperSize[0];\n var pageHeight = hasPaperSize && paperOptions.paperSize[1];\n var margin = options.margin && paperOptions.margin;\n var hasMargin = Boolean(margin);\n if (forceBreak || pageHeight) {\n if (!margin) {\n margin = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n }\n if (pageWidth) {\n pageWidth /= scale.x;\n }\n if (pageHeight) {\n pageHeight /= scale.y;\n }\n margin.left /= scale.x;\n margin.right /= scale.x;\n margin.top /= scale.y;\n margin.bottom /= scale.y;\n var group = new Group({\n pdf: {\n multiPage: true,\n paperSize: hasPaperSize ? paperOptions.paperSize : 'auto',\n _ignoreMargin: hasMargin\n }\n });\n handlePageBreaks(function (x) {\n if (options.progress) {\n var canceled = false, pageNum = 0;\n (function next() {\n if (pageNum < x.pages.length) {\n var page = doOne(x.pages[pageNum]);\n group.append(page);\n options.progress({\n page: page,\n pageNum: ++pageNum,\n totalPages: x.pages.length,\n cancel: function () {\n canceled = true;\n }\n });\n if (!canceled) {\n setTimeout(next);\n } else {\n x.container.parentNode.removeChild(x.container);\n }\n } else {\n x.container.parentNode.removeChild(x.container);\n promise.resolve(group);\n }\n }());\n } else {\n x.pages.forEach(function (page) {\n group.append(doOne(page));\n });\n x.container.parentNode.removeChild(x.container);\n promise.resolve(group);\n }\n }, element, forceBreak, pageWidth ? pageWidth - margin.left - margin.right : null, pageHeight ? pageHeight - margin.top - margin.bottom : null, margin, options);\n } else {\n promise.resolve(doOne(element));\n }\n });\n function makeTemplate(template$$1) {\n if (template$$1 != null) {\n if (typeof template$$1 == 'string') {\n template$$1 = kendo.template(template$$1.replace(/^\\s+|\\s+$/g, ''));\n }\n if (typeof template$$1 == 'function') {\n return function (data) {\n var el = template$$1(data);\n if (el && typeof el == 'string') {\n var div = document.createElement('div');\n div.innerHTML = el;\n el = div.firstElementChild;\n }\n return el;\n };\n }\n return function () {\n return template$$1.cloneNode(true);\n };\n }\n }\n function handlePageBreaks(callback, element, forceBreak, pageWidth, pageHeight, margin, options) {\n var template$$1 = makeTemplate(options.template);\n var doc = element.ownerDocument;\n var pages = [];\n var copy = options._destructive ? element : cloneNodes(element);\n var container = doc.createElement('KENDO-PDF-DOCUMENT');\n var adjust = 0;\n slice$1(copy.querySelectorAll('tfoot')).forEach(function (tfoot) {\n tfoot.parentNode.appendChild(tfoot);\n });\n slice$1(copy.querySelectorAll('ol')).forEach(function (ol) {\n slice$1(ol.children).forEach(function (li, index) {\n li.setAttribute('kendo-split-index', index);\n });\n });\n setCSS(container, {\n display: 'block',\n position: 'absolute',\n boxSizing: 'content-box',\n left: '-10000px',\n top: '-10000px'\n });\n if (pageWidth) {\n setCSS(container, {\n width: pageWidth + 'px',\n paddingLeft: margin.left + 'px',\n paddingRight: margin.right + 'px'\n });\n setCSS(copy, { overflow: 'hidden' });\n }\n element.parentNode.insertBefore(container, element);\n container.appendChild(copy);\n if (options.beforePageBreak) {\n setTimeout(function () {\n options.beforePageBreak(container, doPageBreak);\n }, 15);\n } else {\n setTimeout(doPageBreak, 15);\n }\n function doPageBreak() {\n if (forceBreak != '-' || pageHeight) {\n splitElement(copy);\n }\n {\n var page = makePage();\n copy.parentNode.insertBefore(page, copy);\n page.appendChild(copy);\n }\n if (template$$1) {\n pages.forEach(function (page, i) {\n var el = template$$1({\n element: page,\n pageNum: i + 1,\n totalPages: pages.length\n });\n if (el) {\n page.appendChild(el);\n }\n });\n }\n cacheImages(pages, function () {\n whenImagesAreActuallyLoaded(pages, function () {\n callback({\n pages: pages,\n container: container\n });\n });\n });\n }\n function keepTogether(el) {\n if (options.keepTogether && matches(el, options.keepTogether) && el.offsetHeight <= pageHeight - adjust) {\n return true;\n }\n var tag = el.tagName;\n if (/^h[1-6]$/i.test(tag) && el.offsetHeight >= pageHeight - adjust) {\n return false;\n }\n return el.getAttribute('data-kendo-chart') || /^(?:img|tr|thead|th|tfoot|iframe|svg|object|canvas|input|textarea|select|video|h[1-6])/i.test(el.tagName);\n }\n function splitElement(element) {\n if (element.tagName == 'TABLE') {\n setCSS(element, { tableLayout: 'fixed' });\n }\n if (keepTogether(element)) {\n return;\n }\n var style = getComputedStyle(element);\n var bottomPadding = parseFloat(getPropertyValue(style, 'padding-bottom'));\n var bottomBorder = parseFloat(getPropertyValue(style, 'border-bottom-width'));\n var saveAdjust = adjust;\n adjust += bottomPadding + bottomBorder;\n var isFirst = true;\n for (var el = element.firstChild; el; el = el.nextSibling) {\n if (el.nodeType == 1) {\n isFirst = false;\n if (matches(el, forceBreak)) {\n breakAtElement(el);\n continue;\n }\n if (!pageHeight) {\n splitElement(el);\n continue;\n }\n if (!/^(?:static|relative)$/.test(getPropertyValue(getComputedStyle(el), 'position'))) {\n continue;\n }\n var fall = fallsOnMargin(el);\n if (fall == 1) {\n breakAtElement(el);\n } else if (fall) {\n if (keepTogether(el)) {\n breakAtElement(el);\n } else {\n splitElement(el);\n }\n } else {\n splitElement(el);\n }\n } else if (el.nodeType == 3 && pageHeight) {\n splitText(el, isFirst);\n isFirst = false;\n }\n }\n adjust = saveAdjust;\n }\n function firstInParent(el) {\n var p = el.parentNode, first = p.firstChild;\n if (el === first) {\n return true;\n }\n if (el === p.children[0]) {\n if (first.nodeType == 7 || first.nodeType == 8) {\n return true;\n }\n if (first.nodeType == 3) {\n return !/\\S/.test(first.data);\n }\n }\n return false;\n }\n function breakAtElement(el) {\n if (el.nodeType == 1 && el !== copy && firstInParent(el)) {\n return breakAtElement(el.parentNode);\n }\n var table, colgroup, thead, grid, gridHead;\n table = closest(el, 'table');\n colgroup = table && table.querySelector('colgroup');\n if (options.repeatHeaders) {\n thead = table && table.querySelector('thead');\n grid = closest(el, '.k-grid.k-widget');\n if (grid && grid.querySelector('.k-auto-scrollable')) {\n gridHead = grid.querySelector('.k-grid-header');\n }\n }\n var page = makePage();\n var range = doc.createRange();\n range.setStartBefore(copy);\n range.setEndBefore(el);\n page.appendChild(range.extractContents());\n copy.parentNode.insertBefore(page, copy);\n preventBulletOnListItem(el.parentNode);\n if (table) {\n table = closest(el, 'table');\n if (options.repeatHeaders && thead) {\n table.insertBefore(thead.cloneNode(true), table.firstChild);\n }\n if (colgroup) {\n table.insertBefore(colgroup.cloneNode(true), table.firstChild);\n }\n }\n if (options.repeatHeaders && gridHead) {\n grid = closest(el, '.k-grid.k-widget');\n grid.insertBefore(gridHead.cloneNode(true), grid.firstChild);\n }\n }\n function makePage() {\n var page = doc.createElement('KENDO-PDF-PAGE');\n setCSS(page, {\n display: 'block',\n boxSizing: 'content-box',\n width: pageWidth ? pageWidth + 'px' : 'auto',\n padding: margin.top + 'px ' + margin.right + 'px ' + margin.bottom + 'px ' + margin.left + 'px',\n position: 'relative',\n height: pageHeight ? pageHeight + 'px' : 'auto',\n overflow: pageHeight || pageWidth ? 'hidden' : 'visible',\n clear: 'both'\n });\n if (options && options.pageClassName) {\n page.className = options.pageClassName;\n }\n pages.push(page);\n return page;\n }\n function fallsOnMargin(thing) {\n var box = thing.getBoundingClientRect();\n if (box.width === 0 || box.height === 0) {\n return 0;\n }\n var top = copy.getBoundingClientRect().top;\n var available = pageHeight - adjust;\n return box.height > available ? 3 : box.top - top > available ? 1 : box.bottom - top > available ? 2 : 0;\n }\n function splitText(node, isFirst) {\n if (!/\\S/.test(node.data)) {\n return;\n }\n var len = node.data.length;\n var range = doc.createRange();\n range.selectNodeContents(node);\n var fall = fallsOnMargin(range);\n if (!fall) {\n return;\n }\n var nextnode = node;\n if (fall == 1) {\n if (isFirst) {\n breakAtElement(node.parentNode);\n } else {\n breakAtElement(node);\n }\n } else {\n (function findEOP(min, pos, max) {\n range.setEnd(node, pos);\n if (min == pos || pos == max) {\n return pos;\n }\n if (fallsOnMargin(range)) {\n return findEOP(min, min + pos >> 1, pos);\n } else {\n return findEOP(pos, pos + max >> 1, max);\n }\n }(0, len >> 1, len));\n if (!/\\S/.test(range.toString()) && isFirst) {\n breakAtElement(node.parentNode);\n } else {\n nextnode = node.splitText(range.endOffset);\n var page = makePage();\n range.setStartBefore(copy);\n page.appendChild(range.extractContents());\n copy.parentNode.insertBefore(page, copy);\n preventBulletOnListItem(nextnode.parentNode);\n }\n }\n splitText(nextnode);\n }\n function preventBulletOnListItem(el) {\n var li = closest(el, 'li');\n if (li) {\n li.setAttribute('kendo-no-bullet', '1');\n preventBulletOnListItem(li.parentNode);\n }\n }\n }\n return promise;\n }\n drawDOM.getFontFaces = getFontFaces;\n drawDOM.drawText = function (element) {\n var group = new Group();\n nodeInfo._clipbox = false;\n nodeInfo._matrix = Matrix.unit();\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n pushNodeInfo(element, getComputedStyle(element), group);\n if (element.firstChild.nodeType == 3) {\n renderText(element, element.firstChild, group);\n } else {\n _renderElement(element, group);\n }\n popNodeInfo();\n return group;\n };\n var parseBackgroundImage = function () {\n var tok_linear_gradient = /^((-webkit-|-moz-|-o-|-ms-)?linear-gradient\\s*)\\(/;\n var tok_percent = /^([-0-9.]+%)/;\n var tok_length = /^([-0-9.]+px)/;\n var tok_keyword = /^(left|right|top|bottom|to|center)\\W/;\n var tok_angle = /^([-0-9.]+(deg|grad|rad|turn))/;\n var tok_whitespace = /^(\\s+)/;\n var tok_popen = /^(\\()/;\n var tok_pclose = /^(\\))/;\n var tok_comma = /^(,)/;\n var tok_url = /^(url)\\(/;\n var tok_content = /^(.*?)\\)/;\n var cache1 = {}, cache2 = {};\n function parse(input) {\n var orig = input;\n if (hasOwnProperty(cache1, orig)) {\n return cache1[orig];\n }\n function skip_ws() {\n var m = tok_whitespace.exec(input);\n if (m) {\n input = input.substr(m[1].length);\n }\n }\n function read(token) {\n skip_ws();\n var m = token.exec(input);\n if (m) {\n input = input.substr(m[1].length);\n return m[1];\n }\n }\n function read_stop() {\n var color = kendo.parseColor(input, true);\n var length, percent;\n if (color) {\n var match = /^#[0-9a-f]+/i.exec(input) || /^rgba?\\(.*?\\)/i.exec(input) || /^..*?\\b/.exec(input);\n input = input.substr(match[0].length);\n color = color.toRGB();\n if (!(length = read(tok_length))) {\n percent = read(tok_percent);\n }\n return {\n color: color,\n length: length,\n percent: percent\n };\n }\n }\n function read_linear_gradient(propName) {\n var angle;\n var to1, to2;\n var stops = [];\n var reverse = false;\n if (read(tok_popen)) {\n angle = read(tok_angle);\n if (angle) {\n angle = parseAngle(angle);\n read(tok_comma);\n } else {\n to1 = read(tok_keyword);\n if (to1 == 'to') {\n to1 = read(tok_keyword);\n } else if (to1 && /^-/.test(propName)) {\n reverse = true;\n }\n to2 = read(tok_keyword);\n read(tok_comma);\n }\n if (/-moz-/.test(propName) && angle == null && to1 == null) {\n var x = read(tok_percent), y = read(tok_percent);\n reverse = true;\n if (x == '0%') {\n to1 = 'left';\n } else if (x == '100%') {\n to1 = 'right';\n }\n if (y == '0%') {\n to2 = 'top';\n } else if (y == '100%') {\n to2 = 'bottom';\n }\n read(tok_comma);\n }\n while (input && !read(tok_pclose)) {\n var stop = read_stop();\n if (!stop) {\n break;\n }\n stops.push(stop);\n read(tok_comma);\n }\n return {\n type: 'linear',\n angle: angle,\n to: to1 && to2 ? to1 + ' ' + to2 : to1 ? to1 : to2 ? to2 : null,\n stops: stops,\n reverse: reverse\n };\n }\n }\n function read_url() {\n if (read(tok_popen)) {\n var url = read(tok_content);\n url = url.replace(/^['\"]+|[\"']+$/g, '');\n read(tok_pclose);\n return {\n type: 'url',\n url: url\n };\n }\n }\n var tok;\n if (tok = read(tok_linear_gradient)) {\n tok = read_linear_gradient(tok);\n } else if (tok = read(tok_url)) {\n tok = read_url();\n }\n return cache1[orig] = tok || { type: 'none' };\n }\n return function (input) {\n if (hasOwnProperty(cache2, input)) {\n return cache2[input];\n }\n return cache2[input] = splitProperty(input).map(parse);\n };\n }();\n var splitProperty = function () {\n var cache = {};\n return function (input, separator) {\n if (!separator) {\n separator = /^\\s*,\\s*/;\n }\n var cacheKey = input + separator;\n if (hasOwnProperty(cache, cacheKey)) {\n return cache[cacheKey];\n }\n var ret = [];\n var last$$1 = 0, pos = 0;\n var in_paren = 0;\n var in_string = false;\n var m;\n function looking_at(rx) {\n return m = rx.exec(input.substr(pos));\n }\n function trim(str) {\n return str.replace(/^\\s+|\\s+$/g, '');\n }\n while (pos < input.length) {\n if (!in_string && looking_at(/^[\\(\\[\\{]/)) {\n in_paren++;\n pos++;\n } else if (!in_string && looking_at(/^[\\)\\]\\}]/)) {\n in_paren--;\n pos++;\n } else if (!in_string && looking_at(/^[\\\"\\']/)) {\n in_string = m[0];\n pos++;\n } else if (in_string == '\\'' && looking_at(/^\\\\\\'/)) {\n pos += 2;\n } else if (in_string == '\"' && looking_at(/^\\\\\\\"/)) {\n pos += 2;\n } else if (in_string == '\\'' && looking_at(/^\\'/)) {\n in_string = false;\n pos++;\n } else if (in_string == '\"' && looking_at(/^\\\"/)) {\n in_string = false;\n pos++;\n } else if (looking_at(separator)) {\n if (!in_string && !in_paren && pos > last$$1) {\n ret.push(trim(input.substring(last$$1, pos)));\n last$$1 = pos + m[0].length;\n }\n pos += m[0].length;\n } else {\n pos++;\n }\n }\n if (last$$1 < pos) {\n ret.push(trim(input.substring(last$$1, pos)));\n }\n return cache[cacheKey] = ret;\n };\n }();\n var getFontURL = function (cache) {\n return function (el) {\n var url = cache[el];\n if (!url) {\n var m;\n if (m = /url\\((['\"]?)([^'\")]*?)\\1\\)\\s+format\\((['\"]?)truetype\\3\\)/.exec(el)) {\n url = cache[el] = m[2];\n } else if (m = /url\\((['\"]?)([^'\")]*?\\.ttf)\\1\\)/.exec(el)) {\n url = cache[el] = m[2];\n }\n }\n return url;\n };\n }(Object.create ? Object.create(null) : {});\n var getFontHeight = function (cache) {\n return function (font) {\n var height = cache[font];\n if (height == null) {\n height = cache[font] = kendoUtil.measureText('Mapq', { font: font }).height;\n }\n return height;\n };\n }(Object.create ? Object.create(null) : {});\n function getFontFaces(doc) {\n if (doc == null) {\n doc = document;\n }\n var result = {};\n for (var i = 0; i < doc.styleSheets.length; ++i) {\n doStylesheet(doc.styleSheets[i]);\n }\n return result;\n function doStylesheet(ss) {\n if (ss) {\n var rules = null;\n try {\n rules = ss.cssRules;\n } catch (ex) {\n }\n if (rules) {\n addRules(ss, rules);\n }\n }\n }\n function findFonts(rule) {\n var src = getPropertyValue(rule.style, 'src');\n if (src) {\n return splitProperty(src).reduce(function (a, el) {\n var font = getFontURL(el);\n if (font) {\n a.push(font);\n }\n return a;\n }, []);\n } else {\n var font = getFontURL(rule.cssText);\n return font ? [font] : [];\n }\n }\n function addRules(styleSheet, rules) {\n for (var i = 0; i < rules.length; ++i) {\n var r = rules[i];\n switch (r.type) {\n case 3:\n doStylesheet(r.styleSheet);\n break;\n case 5:\n var style = r.style;\n var family = splitProperty(getPropertyValue(style, 'font-family'));\n var bold = /^([56789]00|bold)$/i.test(getPropertyValue(style, 'font-weight'));\n var italic = 'italic' == getPropertyValue(style, 'font-style');\n var src = findFonts(r);\n if (src.length > 0) {\n addRule(styleSheet, family, bold, italic, src[0]);\n }\n }\n }\n }\n function addRule(styleSheet, names, bold, italic, url) {\n if (!/^data:/i.test(url)) {\n if (!(/^[^\\/:]+:\\/\\//.test(url) || /^\\//.test(url))) {\n url = String(styleSheet.href).replace(/[^\\/]*$/, '') + url;\n }\n }\n names.forEach(function (name) {\n name = name.replace(/^(['\"]?)(.*?)\\1$/, '$2');\n if (bold) {\n name += '|bold';\n }\n if (italic) {\n name += '|italic';\n }\n result[name] = url;\n });\n }\n }\n function hasOwnProperty(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n }\n function getCounter(name) {\n name = '_counter_' + name;\n return nodeInfo[name];\n }\n function getAllCounters(name) {\n var values = [], p = nodeInfo;\n name = '_counter_' + name;\n while (p) {\n if (hasOwnProperty(p, name)) {\n values.push(p[name]);\n }\n p = Object.getPrototypeOf(p);\n }\n return values.reverse();\n }\n function incCounter(name, inc) {\n var p = nodeInfo;\n name = '_counter_' + name;\n while (p && !hasOwnProperty(p, name)) {\n p = Object.getPrototypeOf(p);\n }\n if (!p) {\n p = nodeInfo._root;\n }\n p[name] = (p[name] || 0) + (inc == null ? 1 : inc);\n }\n function resetCounter(name, val) {\n name = '_counter_' + name;\n nodeInfo[name] = val == null ? 0 : val;\n }\n function doCounters(a, f, def) {\n for (var i = 0; i < a.length;) {\n var name = a[i++];\n var val = parseFloat(a[i]);\n if (isNaN(val)) {\n f(name, def);\n } else {\n f(name, val);\n ++i;\n }\n }\n }\n function updateCounters(style) {\n var counterReset = getPropertyValue(style, 'counter-reset');\n if (counterReset) {\n doCounters(splitProperty(counterReset, /^\\s+/), resetCounter, 0);\n }\n var counterIncrement = getPropertyValue(style, 'counter-increment');\n if (counterIncrement) {\n doCounters(splitProperty(counterIncrement, /^\\s+/), incCounter, 1);\n }\n }\n function parseColor$1(str, css) {\n var color = kendo.parseColor(str, true);\n if (color) {\n color = color.toRGB();\n if (css) {\n color = color.toCssRgba();\n } else if (color.a === 0) {\n color = null;\n }\n }\n return color;\n }\n function whenImagesAreActuallyLoaded(elements, callback) {\n var pending = 0;\n elements.forEach(function (el) {\n var images = el.querySelectorAll('img');\n for (var i = 0; i < images.length; ++i) {\n var img = images[i];\n if (!img.complete) {\n pending++;\n img.onload = img.onerror = next;\n }\n }\n });\n if (!pending) {\n next();\n }\n function next() {\n if (--pending <= 0) {\n callback();\n }\n }\n }\n function cacheImages(element, callback) {\n var urls = [];\n function add(url) {\n if (!IMAGE_CACHE[url]) {\n IMAGE_CACHE[url] = true;\n urls.push(url);\n }\n }\n function dive(element) {\n if (/^img$/i.test(element.tagName)) {\n add(element.src);\n }\n parseBackgroundImage(getPropertyValue(getComputedStyle(element), 'background-image')).forEach(function (bg) {\n if (bg.type == 'url') {\n add(bg.url);\n }\n });\n if (element.children) {\n slice$1(element.children).forEach(dive);\n }\n }\n if (Array.isArray(element)) {\n element.forEach(dive);\n } else {\n dive(element);\n }\n var count = urls.length;\n function next() {\n if (--count <= 0) {\n callback();\n }\n }\n if (count === 0) {\n next();\n }\n urls.forEach(function (url) {\n var img = IMAGE_CACHE[url] = new window.Image();\n if (!/^data:/i.test(url)) {\n img.crossOrigin = 'Anonymous';\n }\n img.src = url;\n if (img.complete) {\n next();\n } else {\n img.onload = next;\n img.onerror = function () {\n IMAGE_CACHE[url] = null;\n next();\n };\n }\n });\n }\n function alphaNumeral(n) {\n var result = '';\n do {\n var r = n % 26;\n result = String.fromCharCode(97 + r) + result;\n n = Math.floor(n / 26);\n } while (n > 0);\n return result;\n }\n function pushNodeInfo(element, style, group) {\n nodeInfo = Object.create(nodeInfo);\n nodeInfo[element.tagName.toLowerCase()] = {\n element: element,\n style: style\n };\n var decoration = getPropertyValue(style, 'text-decoration');\n if (decoration && decoration != 'none') {\n var color = getPropertyValue(style, 'color');\n decoration.split(/\\s+/g).forEach(function (name) {\n if (!nodeInfo[name]) {\n nodeInfo[name] = color;\n }\n });\n }\n if (createsStackingContext(style)) {\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n }\n }\n function popNodeInfo() {\n nodeInfo = Object.getPrototypeOf(nodeInfo);\n }\n function updateClipbox(path) {\n if (nodeInfo._clipbox != null) {\n var box = path.bbox(nodeInfo._matrix);\n if (nodeInfo._clipbox) {\n nodeInfo._clipbox = Rect.intersect(nodeInfo._clipbox, box);\n } else {\n nodeInfo._clipbox = box;\n }\n }\n }\n function emptyClipbox() {\n var cb = nodeInfo._clipbox;\n if (cb == null) {\n return true;\n }\n if (cb) {\n return cb.width() === 0 || cb.height() === 0;\n }\n }\n function createsStackingContext(style) {\n function prop(name) {\n return getPropertyValue(style, name);\n }\n if (prop('transform') != 'none' || prop('position') != 'static' || prop('z-index') != 'auto' || prop('opacity') < 1) {\n return true;\n }\n }\n function getComputedStyle(element, pseudoElt) {\n return window.getComputedStyle(element, pseudoElt || null);\n }\n function getPropertyValue(style, prop, defa) {\n var val = style.getPropertyValue(prop);\n if (val == null || val === '') {\n if (browser.webkit) {\n val = style.getPropertyValue('-webkit-' + prop);\n } else if (browser.mozilla) {\n val = style.getPropertyValue('-moz-' + prop);\n } else if (browser.opera) {\n val = style.getPropertyValue('-o-' + prop);\n } else if (microsoft) {\n val = style.getPropertyValue('-ms-' + prop);\n }\n }\n if (arguments.length > 2 && (val == null || val === '')) {\n return defa;\n } else {\n return val;\n }\n }\n function pleaseSetPropertyValue(style, prop, value, important) {\n style.setProperty(prop, value, important);\n if (browser.webkit) {\n style.setProperty('-webkit-' + prop, value, important);\n } else if (browser.mozilla) {\n style.setProperty('-moz-' + prop, value, important);\n } else if (browser.opera) {\n style.setProperty('-o-' + prop, value, important);\n } else if (microsoft) {\n style.setProperty('-ms-' + prop, value, important);\n prop = 'ms' + prop.replace(/(^|-)([a-z])/g, function (s, p1, p2) {\n return p1 + p2.toUpperCase();\n });\n style[prop] = value;\n }\n }\n function getBorder(style, side) {\n side = 'border-' + side;\n return {\n width: parseFloat(getPropertyValue(style, side + '-width')),\n style: getPropertyValue(style, side + '-style'),\n color: parseColor$1(getPropertyValue(style, side + '-color'), true)\n };\n }\n function saveStyle(element, func) {\n var prev = element.style.cssText;\n var result = func();\n element.style.cssText = prev;\n return result;\n }\n function getBorderRadius(style, side) {\n var r = getPropertyValue(style, 'border-' + side + '-radius').split(/\\s+/g).map(parseFloat);\n if (r.length == 1) {\n r.push(r[0]);\n }\n return sanitizeRadius({\n x: r[0],\n y: r[1]\n });\n }\n function getContentBox(element) {\n var box = element.getBoundingClientRect();\n box = innerBox(box, 'border-*-width', element);\n box = innerBox(box, 'padding-*', element);\n return box;\n }\n function innerBox(box, prop, element) {\n var style, wt, wr, wb, wl;\n if (typeof prop == 'string') {\n style = getComputedStyle(element);\n wt = parseFloat(getPropertyValue(style, prop.replace('*', 'top')));\n wr = parseFloat(getPropertyValue(style, prop.replace('*', 'right')));\n wb = parseFloat(getPropertyValue(style, prop.replace('*', 'bottom')));\n wl = parseFloat(getPropertyValue(style, prop.replace('*', 'left')));\n } else if (typeof prop == 'number') {\n wt = wr = wb = wl = prop;\n }\n return {\n top: box.top + wt,\n right: box.right - wr,\n bottom: box.bottom - wb,\n left: box.left + wl,\n width: box.right - box.left - wr - wl,\n height: box.bottom - box.top - wb - wt\n };\n }\n function getTransform(style) {\n var transform$$1 = getPropertyValue(style, 'transform');\n if (transform$$1 == 'none') {\n return null;\n }\n var matrix = /^\\s*matrix\\(\\s*(.*?)\\s*\\)\\s*$/.exec(transform$$1);\n if (matrix) {\n var origin = getPropertyValue(style, 'transform-origin');\n matrix = matrix[1].split(/\\s*,\\s*/g).map(parseFloat);\n origin = origin.split(/\\s+/g).map(parseFloat);\n return {\n matrix: matrix,\n origin: origin\n };\n }\n }\n function radiansToDegrees(radians) {\n return 180 * radians / Math.PI % 360;\n }\n function parseAngle(angle) {\n var num = parseFloat(angle);\n if (/grad$/.test(angle)) {\n return Math.PI * num / 200;\n } else if (/rad$/.test(angle)) {\n return num;\n } else if (/turn$/.test(angle)) {\n return Math.PI * num * 2;\n } else if (/deg$/.test(angle)) {\n return Math.PI * num / 180;\n }\n }\n function setTransform(shape, m) {\n m = new Matrix(m[0], m[1], m[2], m[3], m[4], m[5]);\n shape.transform(m);\n return m;\n }\n function setClipping(shape, clipPath) {\n shape.clip(clipPath);\n }\n function addArcToPath(path, x, y, options) {\n var points = new Arc$2([\n x,\n y\n ], options).curvePoints(), i = 1;\n while (i < points.length) {\n path.curveTo(points[i++], points[i++], points[i++]);\n }\n }\n function sanitizeRadius(r) {\n if (r.x <= 0 || r.y <= 0) {\n r.x = r.y = 0;\n }\n return r;\n }\n function adjustBorderRadiusForBox(box, rTL, rTR, rBR, rBL) {\n var tl_x = Math.max(0, rTL.x), tl_y = Math.max(0, rTL.y);\n var tr_x = Math.max(0, rTR.x), tr_y = Math.max(0, rTR.y);\n var br_x = Math.max(0, rBR.x), br_y = Math.max(0, rBR.y);\n var bl_x = Math.max(0, rBL.x), bl_y = Math.max(0, rBL.y);\n var f = Math.min(box.width / (tl_x + tr_x), box.height / (tr_y + br_y), box.width / (br_x + bl_x), box.height / (bl_y + tl_y));\n if (f < 1) {\n tl_x *= f;\n tl_y *= f;\n tr_x *= f;\n tr_y *= f;\n br_x *= f;\n br_y *= f;\n bl_x *= f;\n bl_y *= f;\n }\n return {\n tl: {\n x: tl_x,\n y: tl_y\n },\n tr: {\n x: tr_x,\n y: tr_y\n },\n br: {\n x: br_x,\n y: br_y\n },\n bl: {\n x: bl_x,\n y: bl_y\n }\n };\n }\n function elementRoundBox(element, box, type) {\n var style = getComputedStyle(element);\n var rTL = getBorderRadius(style, 'top-left');\n var rTR = getBorderRadius(style, 'top-right');\n var rBL = getBorderRadius(style, 'bottom-left');\n var rBR = getBorderRadius(style, 'bottom-right');\n if (type == 'padding' || type == 'content') {\n var bt = getBorder(style, 'top');\n var br = getBorder(style, 'right');\n var bb = getBorder(style, 'bottom');\n var bl = getBorder(style, 'left');\n rTL.x -= bl.width;\n rTL.y -= bt.width;\n rTR.x -= br.width;\n rTR.y -= bt.width;\n rBR.x -= br.width;\n rBR.y -= bb.width;\n rBL.x -= bl.width;\n rBL.y -= bb.width;\n if (type == 'content') {\n var pt = parseFloat(getPropertyValue(style, 'padding-top'));\n var pr = parseFloat(getPropertyValue(style, 'padding-right'));\n var pb = parseFloat(getPropertyValue(style, 'padding-bottom'));\n var pl = parseFloat(getPropertyValue(style, 'padding-left'));\n rTL.x -= pl;\n rTL.y -= pt;\n rTR.x -= pr;\n rTR.y -= pt;\n rBR.x -= pr;\n rBR.y -= pb;\n rBL.x -= pl;\n rBL.y -= pb;\n }\n }\n if (typeof type == 'number') {\n rTL.x -= type;\n rTL.y -= type;\n rTR.x -= type;\n rTR.y -= type;\n rBR.x -= type;\n rBR.y -= type;\n rBL.x -= type;\n rBL.y -= type;\n }\n return roundBox(box, rTL, rTR, rBR, rBL);\n }\n function roundBox(box, rTL0, rTR0, rBR0, rBL0) {\n var tmp = adjustBorderRadiusForBox(box, rTL0, rTR0, rBR0, rBL0);\n var rTL = tmp.tl;\n var rTR = tmp.tr;\n var rBR = tmp.br;\n var rBL = tmp.bl;\n var path = new Path({\n fill: null,\n stroke: null\n });\n path.moveTo(box.left, box.top + rTL.y);\n if (rTL.x) {\n addArcToPath(path, box.left + rTL.x, box.top + rTL.y, {\n startAngle: -180,\n endAngle: -90,\n radiusX: rTL.x,\n radiusY: rTL.y\n });\n }\n path.lineTo(box.right - rTR.x, box.top);\n if (rTR.x) {\n addArcToPath(path, box.right - rTR.x, box.top + rTR.y, {\n startAngle: -90,\n endAngle: 0,\n radiusX: rTR.x,\n radiusY: rTR.y\n });\n }\n path.lineTo(box.right, box.bottom - rBR.y);\n if (rBR.x) {\n addArcToPath(path, box.right - rBR.x, box.bottom - rBR.y, {\n startAngle: 0,\n endAngle: 90,\n radiusX: rBR.x,\n radiusY: rBR.y\n });\n }\n path.lineTo(box.left + rBL.x, box.bottom);\n if (rBL.x) {\n addArcToPath(path, box.left + rBL.x, box.bottom - rBL.y, {\n startAngle: 90,\n endAngle: 180,\n radiusX: rBL.x,\n radiusY: rBL.y\n });\n }\n return path.close();\n }\n function formatCounter(val, style) {\n var str = String(parseFloat(val));\n switch (style) {\n case 'decimal-leading-zero':\n if (str.length < 2) {\n str = '0' + str;\n }\n return str;\n case 'lower-roman':\n return arabicToRoman(val).toLowerCase();\n case 'upper-roman':\n return arabicToRoman(val).toUpperCase();\n case 'lower-latin':\n case 'lower-alpha':\n return alphaNumeral(val - 1);\n case 'upper-latin':\n case 'upper-alpha':\n return alphaNumeral(val - 1).toUpperCase();\n default:\n return str;\n }\n }\n function evalPseudoElementContent(element, content) {\n function displayCounter(name, style, separator) {\n if (!separator) {\n return formatCounter(getCounter(name) || 0, style);\n }\n separator = separator.replace(/^\\s*([\"'])(.*)\\1\\s*$/, '$2');\n return getAllCounters(name).map(function (val) {\n return formatCounter(val, style);\n }).join(separator);\n }\n var a = splitProperty(content, /^\\s+/);\n var result = [], m;\n a.forEach(function (el) {\n var tmp;\n if (m = /^\\s*([\"'])(.*)\\1\\s*$/.exec(el)) {\n result.push(m[2].replace(/\\\\([0-9a-f]{4})/gi, function (s, p) {\n return String.fromCharCode(parseInt(p, 16));\n }));\n } else if (m = /^\\s*counter\\((.*?)\\)\\s*$/.exec(el)) {\n tmp = splitProperty(m[1]);\n result.push(displayCounter(tmp[0], tmp[1]));\n } else if (m = /^\\s*counters\\((.*?)\\)\\s*$/.exec(el)) {\n tmp = splitProperty(m[1]);\n result.push(displayCounter(tmp[0], tmp[2], tmp[1]));\n } else if (m = /^\\s*attr\\((.*?)\\)\\s*$/.exec(el)) {\n result.push(element.getAttribute(m[1]) || '');\n } else {\n result.push(el);\n }\n });\n return result.join('');\n }\n function getCssText(style) {\n if (style.cssText) {\n return style.cssText;\n }\n var result = [];\n for (var i = 0; i < style.length; ++i) {\n result.push(style[i] + ': ' + getPropertyValue(style, style[i]));\n }\n return result.join(';\\n');\n }\n function _renderWithPseudoElements(element, group) {\n if (element.tagName == KENDO_PSEUDO_ELEMENT) {\n _renderElement(element, group);\n return;\n }\n var fake = [];\n function pseudo(kind, place) {\n var style = getComputedStyle(element, kind), content = style.content;\n updateCounters(style);\n if (content && content != 'normal' && content != 'none' && style.width != '0px') {\n var psel = element.ownerDocument.createElement(KENDO_PSEUDO_ELEMENT);\n psel.style.cssText = getCssText(style);\n psel.textContent = evalPseudoElementContent(element, content);\n element.insertBefore(psel, place);\n fake.push(psel);\n }\n }\n pseudo(':before', element.firstChild);\n pseudo(':after', null);\n if (fake.length > 0) {\n var saveClass = element.className;\n element.className += ' kendo-pdf-hide-pseudo-elements';\n _renderElement(element, group);\n element.className = saveClass;\n fake.forEach(function (el) {\n element.removeChild(el);\n });\n } else {\n _renderElement(element, group);\n }\n }\n function _renderElement(element, group) {\n var style = getComputedStyle(element);\n var top = getBorder(style, 'top');\n var right = getBorder(style, 'right');\n var bottom = getBorder(style, 'bottom');\n var left = getBorder(style, 'left');\n var rTL0 = getBorderRadius(style, 'top-left');\n var rTR0 = getBorderRadius(style, 'top-right');\n var rBL0 = getBorderRadius(style, 'bottom-left');\n var rBR0 = getBorderRadius(style, 'bottom-right');\n var dir = getPropertyValue(style, 'direction');\n var backgroundColor = getPropertyValue(style, 'background-color');\n backgroundColor = parseColor$1(backgroundColor);\n var backgroundImage = parseBackgroundImage(getPropertyValue(style, 'background-image'));\n var backgroundRepeat = splitProperty(getPropertyValue(style, 'background-repeat'));\n var backgroundPosition = splitProperty(getPropertyValue(style, 'background-position'));\n var backgroundOrigin = splitProperty(getPropertyValue(style, 'background-origin'));\n var backgroundSize = splitProperty(getPropertyValue(style, 'background-size'));\n if (browser.msie && browser.version < 10) {\n backgroundPosition = splitProperty(element.currentStyle.backgroundPosition);\n }\n var innerbox = innerBox(element.getBoundingClientRect(), 'border-*-width', element);\n (function () {\n var clip = getPropertyValue(style, 'clip');\n var m = /^\\s*rect\\((.*)\\)\\s*$/.exec(clip);\n if (m) {\n var a = m[1].split(/[ ,]+/g);\n var top = a[0] == 'auto' ? innerbox.top : parseFloat(a[0]) + innerbox.top;\n var right = a[1] == 'auto' ? innerbox.right : parseFloat(a[1]) + innerbox.left;\n var bottom = a[2] == 'auto' ? innerbox.bottom : parseFloat(a[2]) + innerbox.top;\n var left = a[3] == 'auto' ? innerbox.left : parseFloat(a[3]) + innerbox.left;\n var tmp = new Group();\n var clipPath = new Path().moveTo(left, top).lineTo(right, top).lineTo(right, bottom).lineTo(left, bottom).close();\n setClipping(tmp, clipPath);\n group.append(tmp);\n group = tmp;\n updateClipbox(clipPath);\n }\n }());\n var boxes, i, cells;\n var display = getPropertyValue(style, 'display');\n if (display == 'table-row') {\n boxes = [];\n for (i = 0, cells = element.children; i < cells.length; ++i) {\n boxes.push(cells[i].getBoundingClientRect());\n }\n } else {\n boxes = element.getClientRects();\n if (boxes.length == 1) {\n boxes = [element.getBoundingClientRect()];\n }\n }\n boxes = adjustBoxes(boxes);\n for (i = 0; i < boxes.length; ++i) {\n drawOneBox(boxes[i], i === 0, i == boxes.length - 1);\n }\n if (element.tagName == 'A' && element.href && !/^#?$/.test(element.getAttribute('href'))) {\n if (!nodeInfo._avoidLinks || !matches(element, nodeInfo._avoidLinks)) {\n var r = document.createRange();\n r.selectNodeContents(element);\n slice$1(r.getClientRects()).forEach(function (box) {\n var g = new Group();\n g._pdfLink = {\n url: element.href,\n top: box.top,\n right: box.right,\n bottom: box.bottom,\n left: box.left\n };\n group.append(g);\n });\n }\n }\n if (boxes.length > 0 && display == 'list-item' && !element.getAttribute('kendo-no-bullet')) {\n drawBullet(boxes[0]);\n }\n (function () {\n function clipit() {\n var clipPath = elementRoundBox(element, innerbox, 'padding');\n var tmp = new Group();\n setClipping(tmp, clipPath);\n group.append(tmp);\n group = tmp;\n updateClipbox(clipPath);\n }\n if (isFormField(element)) {\n clipit();\n } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, 'overflow'))) {\n clipit();\n } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, 'overflow-x'))) {\n clipit();\n } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, 'overflow-y'))) {\n clipit();\n }\n }());\n if (!maybeRenderWidget(element, group)) {\n renderContents(element, group);\n }\n return group;\n function adjustBoxes(boxes) {\n if (/^td$/i.test(element.tagName)) {\n var table = nodeInfo.table;\n if (table && getPropertyValue(table.style, 'border-collapse') == 'collapse') {\n var tableBorderLeft = getBorder(table.style, 'left').width;\n var tableBorderTop = getBorder(table.style, 'top').width;\n if (tableBorderLeft === 0 && tableBorderTop === 0) {\n return boxes;\n }\n var tableBox = table.element.getBoundingClientRect();\n var firstCell = table.element.rows[0].cells[0];\n var firstCellBox = firstCell.getBoundingClientRect();\n if (firstCellBox.top == tableBox.top || firstCellBox.left == tableBox.left) {\n return slice$1(boxes).map(function (box) {\n return {\n left: box.left + tableBorderLeft,\n top: box.top + tableBorderTop,\n right: box.right + tableBorderLeft,\n bottom: box.bottom + tableBorderTop,\n height: box.height,\n width: box.width\n };\n });\n }\n }\n }\n return boxes;\n }\n function drawEdge(color, len, Wtop, Wleft, Wright, rl, rr, transform$$1) {\n if (Wtop <= 0) {\n return;\n }\n var path, edge = new Group();\n setTransform(edge, transform$$1);\n group.append(edge);\n sanitizeRadius(rl);\n sanitizeRadius(rr);\n path = new Path({\n fill: { color: color },\n stroke: null\n });\n edge.append(path);\n path.moveTo(rl.x ? Math.max(rl.x, Wleft) : 0, 0).lineTo(len - (rr.x ? Math.max(rr.x, Wright) : 0), 0).lineTo(len - Math.max(rr.x, Wright), Wtop).lineTo(Math.max(rl.x, Wleft), Wtop).close();\n if (rl.x) {\n drawRoundCorner(Wleft, rl, [\n -1,\n 0,\n 0,\n 1,\n rl.x,\n 0\n ]);\n }\n if (rr.x) {\n drawRoundCorner(Wright, rr, [\n 1,\n 0,\n 0,\n 1,\n len - rr.x,\n 0\n ]);\n }\n function drawRoundCorner(Wright, r, transform$$1) {\n var angle = Math.PI / 2 * Wright / (Wright + Wtop);\n var ri = {\n x: r.x - Wright,\n y: r.y - Wtop\n };\n var path = new Path({\n fill: { color: color },\n stroke: null\n }).moveTo(0, 0);\n setTransform(path, transform$$1);\n addArcToPath(path, 0, r.y, {\n startAngle: -90,\n endAngle: -radiansToDegrees(angle),\n radiusX: r.x,\n radiusY: r.y\n });\n if (ri.x > 0 && ri.y > 0) {\n path.lineTo(ri.x * Math.cos(angle), r.y - ri.y * Math.sin(angle));\n addArcToPath(path, 0, r.y, {\n startAngle: -radiansToDegrees(angle),\n endAngle: -90,\n radiusX: ri.x,\n radiusY: ri.y,\n anticlockwise: true\n });\n } else if (ri.x > 0) {\n path.lineTo(ri.x, Wtop).lineTo(0, Wtop);\n } else {\n path.lineTo(ri.x, Wtop).lineTo(ri.x, 0);\n }\n edge.append(path.close());\n }\n }\n function drawBackground(box) {\n var background = new Group();\n setClipping(background, roundBox(box, rTL0, rTR0, rBR0, rBL0));\n group.append(background);\n if (backgroundColor) {\n var path = new Path({\n fill: { color: backgroundColor.toCssRgba() },\n stroke: null\n });\n path.moveTo(box.left, box.top).lineTo(box.right, box.top).lineTo(box.right, box.bottom).lineTo(box.left, box.bottom).close();\n background.append(path);\n }\n for (var i = backgroundImage.length; --i >= 0;) {\n drawOneBackground(background, box, backgroundImage[i], backgroundRepeat[i % backgroundRepeat.length], backgroundPosition[i % backgroundPosition.length], backgroundOrigin[i % backgroundOrigin.length], backgroundSize[i % backgroundSize.length]);\n }\n }\n function drawOneBackground(group, box, background, backgroundRepeat, backgroundPosition, backgroundOrigin, backgroundSize) {\n if (!background || background == 'none') {\n return;\n }\n if (background.type == 'url') {\n if (/^url\\(\\\"data:image\\/svg/i.test(background.url)) {\n return;\n }\n var img = IMAGE_CACHE[background.url];\n if (img && img.width > 0 && img.height > 0) {\n drawBackgroundImage(group, box, img.width, img.height, function (group, rect) {\n group.append(new Image$1(background.url, rect));\n });\n }\n } else if (background.type == 'linear') {\n drawBackgroundImage(group, box, box.width, box.height, gradientRenderer(background));\n } else {\n return;\n }\n function drawBackgroundImage(group, box, img_width, img_height, renderBG) {\n var aspect_ratio = img_width / img_height, f;\n var orgBox = box;\n if (backgroundOrigin == 'content-box') {\n orgBox = innerBox(orgBox, 'border-*-width', element);\n orgBox = innerBox(orgBox, 'padding-*', element);\n } else if (backgroundOrigin == 'padding-box') {\n orgBox = innerBox(orgBox, 'border-*-width', element);\n }\n if (!/^\\s*auto(\\s+auto)?\\s*$/.test(backgroundSize)) {\n if (backgroundSize == 'contain') {\n f = Math.min(orgBox.width / img_width, orgBox.height / img_height);\n img_width *= f;\n img_height *= f;\n } else if (backgroundSize == 'cover') {\n f = Math.max(orgBox.width / img_width, orgBox.height / img_height);\n img_width *= f;\n img_height *= f;\n } else {\n var size = backgroundSize.split(/\\s+/g);\n if (/%$/.test(size[0])) {\n img_width = orgBox.width * parseFloat(size[0]) / 100;\n } else {\n img_width = parseFloat(size[0]);\n }\n if (size.length == 1 || size[1] == 'auto') {\n img_height = img_width / aspect_ratio;\n } else if (/%$/.test(size[1])) {\n img_height = orgBox.height * parseFloat(size[1]) / 100;\n } else {\n img_height = parseFloat(size[1]);\n }\n }\n }\n var pos = String(backgroundPosition);\n switch (pos) {\n case 'bottom':\n pos = '50% 100%';\n break;\n case 'top':\n pos = '50% 0';\n break;\n case 'left':\n pos = '0 50%';\n break;\n case 'right':\n pos = '100% 50%';\n break;\n case 'center':\n pos = '50% 50%';\n break;\n }\n pos = pos.split(/\\s+/);\n if (pos.length == 1) {\n pos[1] = '50%';\n }\n if (/%$/.test(pos[0])) {\n pos[0] = parseFloat(pos[0]) / 100 * (orgBox.width - img_width);\n } else {\n pos[0] = parseFloat(pos[0]);\n }\n if (/%$/.test(pos[1])) {\n pos[1] = parseFloat(pos[1]) / 100 * (orgBox.height - img_height);\n } else {\n pos[1] = parseFloat(pos[1]);\n }\n var rect = new Rect([\n orgBox.left + pos[0],\n orgBox.top + pos[1]\n ], [\n img_width,\n img_height\n ]);\n function rewX() {\n while (rect.origin.x > box.left) {\n rect.origin.x -= img_width;\n }\n }\n function rewY() {\n while (rect.origin.y > box.top) {\n rect.origin.y -= img_height;\n }\n }\n function repeatX() {\n while (rect.origin.x < box.right) {\n renderBG(group, rect.clone());\n rect.origin.x += img_width;\n }\n }\n if (backgroundRepeat == 'no-repeat') {\n renderBG(group, rect);\n } else if (backgroundRepeat == 'repeat-x') {\n rewX();\n repeatX();\n } else if (backgroundRepeat == 'repeat-y') {\n rewY();\n while (rect.origin.y < box.bottom) {\n renderBG(group, rect.clone());\n rect.origin.y += img_height;\n }\n } else if (backgroundRepeat == 'repeat') {\n rewX();\n rewY();\n var origin = rect.origin.clone();\n while (rect.origin.y < box.bottom) {\n rect.origin.x = origin.x;\n repeatX();\n rect.origin.y += img_height;\n }\n }\n }\n }\n function drawBullet() {\n var listStyleType = getPropertyValue(style, 'list-style-type');\n if (listStyleType == 'none') {\n return;\n }\n var listStylePosition = getPropertyValue(style, 'list-style-position');\n function _drawBullet(f) {\n saveStyle(element, function () {\n element.style.position = 'relative';\n var bullet = element.ownerDocument.createElement(KENDO_PSEUDO_ELEMENT);\n bullet.style.position = 'absolute';\n bullet.style.boxSizing = 'border-box';\n if (listStylePosition == 'outside') {\n bullet.style.width = '6em';\n bullet.style.left = '-6.8em';\n bullet.style.textAlign = 'right';\n } else {\n bullet.style.left = '0px';\n }\n f(bullet);\n element.insertBefore(bullet, element.firstChild);\n renderElement(bullet, group);\n element.removeChild(bullet);\n });\n }\n function elementIndex(f) {\n var a = element.parentNode.children;\n var k = element.getAttribute('kendo-split-index');\n if (k != null) {\n return f(k | 0, a.length);\n }\n for (var i = 0; i < a.length; ++i) {\n if (a[i] === element) {\n return f(i, a.length);\n }\n }\n }\n switch (listStyleType) {\n case 'circle':\n case 'disc':\n case 'square':\n _drawBullet(function (bullet) {\n bullet.style.fontSize = '60%';\n bullet.style.lineHeight = '200%';\n bullet.style.paddingRight = '0.5em';\n bullet.style.fontFamily = 'DejaVu Serif';\n bullet.innerHTML = {\n 'disc': '\\u25CF',\n 'circle': '\\u25EF',\n 'square': '\\u25A0'\n }[listStyleType];\n });\n break;\n case 'decimal':\n case 'decimal-leading-zero':\n _drawBullet(function (bullet) {\n elementIndex(function (idx) {\n ++idx;\n if (listStyleType == 'decimal-leading-zero' && idx < 10) {\n idx = '0' + idx;\n }\n bullet.innerHTML = idx + '.';\n });\n });\n break;\n case 'lower-roman':\n case 'upper-roman':\n _drawBullet(function (bullet) {\n elementIndex(function (idx) {\n idx = arabicToRoman(idx + 1);\n if (listStyleType == 'upper-roman') {\n idx = idx.toUpperCase();\n }\n bullet.innerHTML = idx + '.';\n });\n });\n break;\n case 'lower-latin':\n case 'lower-alpha':\n case 'upper-latin':\n case 'upper-alpha':\n _drawBullet(function (bullet) {\n elementIndex(function (idx) {\n idx = alphaNumeral(idx);\n if (/^upper/i.test(listStyleType)) {\n idx = idx.toUpperCase();\n }\n bullet.innerHTML = idx + '.';\n });\n });\n break;\n }\n }\n function drawOneBox(box, isFirst, isLast) {\n if (box.width === 0 || box.height === 0) {\n return;\n }\n drawBackground(box);\n var shouldDrawLeft = left.width > 0 && (isFirst && dir == 'ltr' || isLast && dir == 'rtl');\n var shouldDrawRight = right.width > 0 && (isLast && dir == 'ltr' || isFirst && dir == 'rtl');\n if (top.width === 0 && left.width === 0 && right.width === 0 && bottom.width === 0) {\n return;\n }\n if (top.color == right.color && top.color == bottom.color && top.color == left.color) {\n if (top.width == right.width && top.width == bottom.width && top.width == left.width) {\n if (shouldDrawLeft && shouldDrawRight) {\n box = innerBox(box, top.width / 2);\n var path = elementRoundBox(element, box, top.width / 2);\n path.options.stroke = {\n color: top.color,\n width: top.width\n };\n group.append(path);\n return;\n }\n }\n }\n if (rTL0.x === 0 && rTR0.x === 0 && rBR0.x === 0 && rBL0.x === 0) {\n if (top.width < 2 && left.width < 2 && right.width < 2 && bottom.width < 2) {\n if (top.width > 0) {\n group.append(new Path({\n stroke: {\n width: top.width,\n color: top.color\n }\n }).moveTo(box.left, box.top + top.width / 2).lineTo(box.right, box.top + top.width / 2));\n }\n if (bottom.width > 0) {\n group.append(new Path({\n stroke: {\n width: bottom.width,\n color: bottom.color\n }\n }).moveTo(box.left, box.bottom - bottom.width / 2).lineTo(box.right, box.bottom - bottom.width / 2));\n }\n if (shouldDrawLeft) {\n group.append(new Path({\n stroke: {\n width: left.width,\n color: left.color\n }\n }).moveTo(box.left + left.width / 2, box.top).lineTo(box.left + left.width / 2, box.bottom));\n }\n if (shouldDrawRight) {\n group.append(new Path({\n stroke: {\n width: right.width,\n color: right.color\n }\n }).moveTo(box.right - right.width / 2, box.top).lineTo(box.right - right.width / 2, box.bottom));\n }\n return;\n }\n }\n var tmp = adjustBorderRadiusForBox(box, rTL0, rTR0, rBR0, rBL0);\n var rTL = tmp.tl;\n var rTR = tmp.tr;\n var rBR = tmp.br;\n var rBL = tmp.bl;\n drawEdge(top.color, box.width, top.width, left.width, right.width, rTL, rTR, [\n 1,\n 0,\n 0,\n 1,\n box.left,\n box.top\n ]);\n drawEdge(bottom.color, box.width, bottom.width, right.width, left.width, rBR, rBL, [\n -1,\n 0,\n 0,\n -1,\n box.right,\n box.bottom\n ]);\n function inv(p) {\n return {\n x: p.y,\n y: p.x\n };\n }\n drawEdge(left.color, box.height, left.width, bottom.width, top.width, inv(rBL), inv(rTL), [\n 0,\n -1,\n 1,\n 0,\n box.left,\n box.bottom\n ]);\n drawEdge(right.color, box.height, right.width, top.width, bottom.width, inv(rTR), inv(rBR), [\n 0,\n 1,\n -1,\n 0,\n box.right,\n box.top\n ]);\n }\n }\n function gradientRenderer(gradient) {\n return function (group, rect) {\n var width = rect.width(), height = rect.height();\n switch (gradient.type) {\n case 'linear':\n var angle = gradient.angle != null ? gradient.angle : Math.PI;\n switch (gradient.to) {\n case 'top':\n angle = 0;\n break;\n case 'left':\n angle = -Math.PI / 2;\n break;\n case 'bottom':\n angle = Math.PI;\n break;\n case 'right':\n angle = Math.PI / 2;\n break;\n case 'top left':\n case 'left top':\n angle = -Math.atan2(height, width);\n break;\n case 'top right':\n case 'right top':\n angle = Math.atan2(height, width);\n break;\n case 'bottom left':\n case 'left bottom':\n angle = Math.PI + Math.atan2(height, width);\n break;\n case 'bottom right':\n case 'right bottom':\n angle = Math.PI - Math.atan2(height, width);\n break;\n }\n if (gradient.reverse) {\n angle -= Math.PI;\n }\n angle %= 2 * Math.PI;\n if (angle < 0) {\n angle += 2 * Math.PI;\n }\n var pxlen = Math.abs(width * Math.sin(angle)) + Math.abs(height * Math.cos(angle));\n var scaledAngle = Math.atan(width * Math.tan(angle) / height);\n var sin = Math.sin(scaledAngle), cos = Math.cos(scaledAngle);\n var len = Math.abs(sin) + Math.abs(cos);\n var x = len / 2 * sin;\n var y = len / 2 * cos;\n if (angle > Math.PI / 2 && angle <= 3 * Math.PI / 2) {\n x = -x;\n y = -y;\n }\n var implicit = [], right = 0;\n var stops = gradient.stops.map(function (s, i) {\n var offset = s.percent;\n if (offset) {\n offset = parseFloat(offset) / 100;\n } else if (s.length) {\n offset = parseFloat(s.length) / pxlen;\n } else if (i === 0) {\n offset = 0;\n } else if (i == gradient.stops.length - 1) {\n offset = 1;\n }\n var stop = {\n color: s.color.toCssRgba(),\n offset: offset\n };\n if (offset != null) {\n right = offset;\n implicit.forEach(function (s, i) {\n var stop = s.stop;\n stop.offset = s.left + (right - s.left) * (i + 1) / (implicit.length + 1);\n });\n implicit = [];\n } else {\n implicit.push({\n left: right,\n stop: stop\n });\n }\n return stop;\n });\n var start = [\n 0.5 - x,\n 0.5 + y\n ];\n var end = [\n 0.5 + x,\n 0.5 - y\n ];\n group.append(Path.fromRect(rect).stroke(null).fill(new LinearGradient({\n start: start,\n end: end,\n stops: stops,\n userSpace: false\n })));\n break;\n case 'radial':\n if (window.console && window.console.log) {\n window.console.log('Radial gradients are not yet supported in HTML renderer');\n }\n break;\n }\n };\n }\n function maybeRenderWidget(element, group) {\n var visual;\n if (element._kendoExportVisual) {\n visual = element._kendoExportVisual();\n } else if (window.kendo && window.kendo.jQuery && element.getAttribute(window.kendo.attr('role'))) {\n var widget = window.kendo.widgetInstance(window.kendo.jQuery(element));\n if (widget && (widget.exportDOMVisual || widget.exportVisual)) {\n if (widget.exportDOMVisual) {\n visual = widget.exportDOMVisual();\n } else {\n visual = widget.exportVisual();\n }\n }\n }\n if (!visual) {\n return false;\n }\n var wrap$$1 = new Group();\n wrap$$1.children.push(visual);\n var bbox = element.getBoundingClientRect();\n wrap$$1.transform(transform().translate(bbox.left, bbox.top));\n group.append(wrap$$1);\n return true;\n }\n function renderImage(element, url, group) {\n var box = getContentBox(element);\n var rect = new Rect([\n box.left,\n box.top\n ], [\n box.width,\n box.height\n ]);\n var image = new Image$1(url, rect);\n setClipping(image, elementRoundBox(element, box, 'content'));\n group.append(image);\n }\n function zIndexSort(a, b) {\n var sa = getComputedStyle(a);\n var sb = getComputedStyle(b);\n var za = parseFloat(getPropertyValue(sa, 'z-index'));\n var zb = parseFloat(getPropertyValue(sb, 'z-index'));\n var pa = getPropertyValue(sa, 'position');\n var pb = getPropertyValue(sb, 'position');\n if (isNaN(za) && isNaN(zb)) {\n if (/static|absolute/.test(pa) && /static|absolute/.test(pb)) {\n return 0;\n }\n if (pa == 'static') {\n return -1;\n }\n if (pb == 'static') {\n return 1;\n }\n return 0;\n }\n if (isNaN(za)) {\n return zb === 0 ? 0 : zb > 0 ? -1 : 1;\n }\n if (isNaN(zb)) {\n return za === 0 ? 0 : za > 0 ? 1 : -1;\n }\n return parseFloat(za) - parseFloat(zb);\n }\n function isFormField(element) {\n return /^(?:textarea|select|input)$/i.test(element.tagName);\n }\n function getSelectedOption(element) {\n if (element.selectedOptions && element.selectedOptions.length > 0) {\n return element.selectedOptions[0];\n }\n return element.options[element.selectedIndex];\n }\n function renderCheckbox(element, group) {\n var style = getComputedStyle(element);\n var color = getPropertyValue(style, 'color');\n var box = element.getBoundingClientRect();\n if (element.type == 'checkbox') {\n group.append(Path.fromRect(new Rect([\n box.left + 1,\n box.top + 1\n ], [\n box.width - 2,\n box.height - 2\n ])).stroke(color, 1));\n if (element.checked) {\n group.append(new Path().stroke(color, 1.2).moveTo(box.left + 0.22 * box.width, box.top + 0.55 * box.height).lineTo(box.left + 0.45 * box.width, box.top + 0.75 * box.height).lineTo(box.left + 0.78 * box.width, box.top + 0.22 * box.width));\n }\n } else {\n group.append(new Circle(new Circle$2([\n (box.left + box.right) / 2,\n (box.top + box.bottom) / 2\n ], Math.min(box.width - 2, box.height - 2) / 2)).stroke(color, 1));\n if (element.checked) {\n group.append(new Circle(new Circle$2([\n (box.left + box.right) / 2,\n (box.top + box.bottom) / 2\n ], Math.min(box.width - 8, box.height - 8) / 2)).fill(color).stroke(null));\n }\n }\n }\n function renderFormField(element, group) {\n var tag = element.tagName.toLowerCase();\n if (tag == 'input' && (element.type == 'checkbox' || element.type == 'radio')) {\n return renderCheckbox(element, group);\n }\n var p = element.parentNode;\n var doc = element.ownerDocument;\n var el = doc.createElement(KENDO_PSEUDO_ELEMENT);\n var option;\n el.style.cssText = getCssText(getComputedStyle(element));\n if (tag == 'input') {\n el.style.whiteSpace = 'pre';\n }\n if (tag == 'select' || tag == 'textarea') {\n el.style.overflow = 'auto';\n }\n if (tag == 'select') {\n if (element.multiple) {\n for (var i = 0; i < element.options.length; ++i) {\n option = doc.createElement(KENDO_PSEUDO_ELEMENT);\n option.style.cssText = getCssText(getComputedStyle(element.options[i]));\n option.style.display = 'block';\n option.textContent = element.options[i].textContent;\n el.appendChild(option);\n }\n } else {\n option = getSelectedOption(element);\n if (option) {\n el.textContent = option.textContent;\n }\n }\n } else {\n el.textContent = element.value;\n }\n p.insertBefore(el, element);\n el.scrollLeft = element.scrollLeft;\n el.scrollTop = element.scrollTop;\n element.style.display = 'none';\n renderContents(el, group);\n element.style.display = '';\n p.removeChild(el);\n }\n function renderContents(element, group) {\n if (nodeInfo._stackingContext.element === element) {\n nodeInfo._stackingContext.group = group;\n }\n switch (element.tagName.toLowerCase()) {\n case 'img':\n renderImage(element, element.src, group);\n break;\n case 'canvas':\n try {\n renderImage(element, element.toDataURL('image/png'), group);\n } catch (ex) {\n }\n break;\n case 'textarea':\n case 'input':\n case 'select':\n renderFormField(element, group);\n break;\n default:\n var children = [], floats = [], positioned = [];\n for (var i = element.firstChild; i; i = i.nextSibling) {\n switch (i.nodeType) {\n case 3:\n if (/\\S/.test(i.data)) {\n renderText(element, i, group);\n }\n break;\n case 1:\n var style = getComputedStyle(i);\n var floating = getPropertyValue(style, 'float');\n var position = getPropertyValue(style, 'position');\n if (position != 'static') {\n positioned.push(i);\n } else if (floating != 'none') {\n floats.push(i);\n } else {\n children.push(i);\n }\n break;\n }\n }\n mergeSort(children, zIndexSort).forEach(function (el) {\n renderElement(el, group);\n });\n mergeSort(floats, zIndexSort).forEach(function (el) {\n renderElement(el, group);\n });\n mergeSort(positioned, zIndexSort).forEach(function (el) {\n renderElement(el, group);\n });\n }\n }\n function renderText(element, node, group) {\n if (emptyClipbox()) {\n return;\n }\n var style = getComputedStyle(element);\n if (parseFloat(getPropertyValue(style, 'text-indent')) < -500) {\n return;\n }\n var text = node.data;\n var start = 0;\n var end = text.search(/\\S\\s*$/) + 1;\n if (!end) {\n return;\n }\n var fontSize = getPropertyValue(style, 'font-size');\n var lineHeight = getPropertyValue(style, 'line-height');\n var font = [\n getPropertyValue(style, 'font-style'),\n getPropertyValue(style, 'font-variant'),\n getPropertyValue(style, 'font-weight'),\n fontSize,\n getPropertyValue(style, 'font-family')\n ].join(' ');\n fontSize = parseFloat(fontSize);\n lineHeight = parseFloat(lineHeight);\n if (fontSize === 0) {\n return;\n }\n var color = getPropertyValue(style, 'color');\n var range = element.ownerDocument.createRange();\n var align$$1 = getPropertyValue(style, 'text-align');\n var isJustified = align$$1 == 'justify';\n var columnCount = getPropertyValue(style, 'column-count', 1);\n var whiteSpace = getPropertyValue(style, 'white-space');\n var textTransform = getPropertyValue(style, 'text-transform');\n var 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 = nodeInfo['underline'];\n var lineThrough = nodeInfo['line-through'];\n var overline = nodeInfo['overline'];\n var hasDecoration = underline || lineThrough || overline;\n while (!doChunk()) {\n }\n if (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: Infinity,\n right: -Infinity,\n bottom: -Infinity,\n left: Infinity\n }, done = false;\n for (var i = 0; i < rectangles.length; ++i) {\n var b = rectangles[i];\n if (b.width <= 1 || b.bottom === prevLineBottom) {\n continue;\n }\n box.left = Math.min(b.left, box.left);\n box.top = Math.min(b.top, box.top);\n box.right = Math.max(b.right, box.right);\n box.bottom = Math.max(b.bottom, box.bottom);\n done = true;\n }\n if (!done) {\n return range.getBoundingClientRect();\n }\n box.width = box.right - box.left;\n box.height = box.bottom - box.top;\n return box;\n }\n return range.getBoundingClientRect();\n }\n function doChunk() {\n var origStart = start;\n var box, pos = text.substr(start).search(/\\S/);\n start += pos;\n if (pos < 0 || start >= end) {\n return true;\n }\n range.setStart(node, start);\n range.setEnd(node, start + 1);\n box = actuallyGetRangeBoundingRect(range);\n var found = false;\n if (isJustified || columnCount > 1) {\n pos = text.substr(start).search(/\\s/);\n if (pos >= 0) {\n range.setEnd(node, start + pos);\n var r = actuallyGetRangeBoundingRect(range);\n if (r.bottom == box.bottom) {\n box = r;\n found = true;\n start += pos;\n }\n }\n }\n if (!found) {\n pos = function findEOL(min, eol, max) {\n range.setEnd(node, eol);\n var r = actuallyGetRangeBoundingRect(range);\n if (r.bottom != box.bottom && min < eol) {\n return findEOL(min, min + eol >> 1, eol);\n } else if (r.right != box.right) {\n box = r;\n if (eol < max) {\n return findEOL(eol, eol + max >> 1, max);\n } else {\n return eol;\n }\n } else {\n return eol;\n }\n }(start, Math.min(end, start + estimateLineLength), end);\n if (pos == start) {\n return true;\n }\n start = pos;\n pos = range.toString().search(/\\s+$/);\n if (pos === 0) {\n return false;\n }\n if (pos > 0) {\n range.setEnd(node, range.startOffset + pos);\n box = actuallyGetRangeBoundingRect(range);\n }\n }\n if (microsoft) {\n box = range.getClientRects()[0];\n }\n var str = range.toString();\n if (!/^(?:pre|pre-wrap)$/i.test(whiteSpace)) {\n str = str.replace(/\\s+/g, ' ');\n } else if (/\\t/.test(str)) {\n var cc = 0;\n for (pos = origStart; pos < range.startOffset; ++pos) {\n var code = text.charCodeAt(pos);\n if (code == 9) {\n cc += 8 - cc % 8;\n } else if (code == 10 || code == 13) {\n cc = 0;\n } else {\n cc++;\n }\n }\n while ((pos = str.search('\\t')) >= 0) {\n var indent = ' '.substr(0, 8 - (cc + pos) % 8);\n str = str.substr(0, pos) + indent + str.substr(pos + 1);\n }\n }\n if (!found) {\n prevLineBottom = box.bottom;\n }\n drawText(str, box);\n }\n function drawText(str, box) {\n if (microsoft && !isNaN(lineHeight)) {\n var height = getFontHeight(font);\n var top = (box.top + box.bottom - height) / 2;\n box = {\n top: top,\n right: box.right,\n bottom: top + height,\n left: box.left,\n height: height,\n width: box.right - box.left\n };\n }\n switch (textTransform) {\n case 'uppercase':\n str = str.toUpperCase();\n break;\n case 'lowercase':\n str = str.toLowerCase();\n break;\n case 'capitalize':\n str = str.replace(/(?:^|\\s)\\S/g, function (l) {\n return l.toUpperCase();\n });\n break;\n }\n var text = new TextRect(str, new Rect([\n box.left,\n box.top\n ], [\n box.width,\n box.height\n ]), {\n font: font,\n fill: { color: color }\n });\n group.append(text);\n }\n function decorate(box) {\n line(underline, box.bottom);\n line(lineThrough, box.bottom - box.height / 2.7);\n line(overline, box.top);\n function line(color, ypos) {\n if (color) {\n var width = fontSize / 12;\n var path = new Path({\n stroke: {\n width: width,\n color: color\n }\n });\n ypos -= width;\n path.moveTo(box.left, ypos).lineTo(box.right, ypos);\n group.append(path);\n }\n }\n }\n }\n function groupInStackingContext(element, group, zIndex) {\n var main;\n if (zIndex != 'auto') {\n main = nodeInfo._stackingContext.group;\n zIndex = parseFloat(zIndex);\n } else {\n main = group;\n zIndex = 0;\n }\n var a = main.children;\n for (var i = 0; i < a.length; ++i) {\n if (a[i]._dom_zIndex != null && a[i]._dom_zIndex > zIndex) {\n break;\n }\n }\n var tmp = new Group();\n main.insert(i, tmp);\n tmp._dom_zIndex = zIndex;\n if (main !== group) {\n if (nodeInfo._clipbox) {\n var m = nodeInfo._matrix.invert();\n var r = nodeInfo._clipbox.transformCopy(m);\n setClipping(tmp, Path.fromRect(r));\n }\n }\n return tmp;\n }\n function renderElement(element, container) {\n var style = getComputedStyle(element);\n updateCounters(style);\n if (/^(style|script|link|meta|iframe|svg|col|colgroup)$/i.test(element.tagName)) {\n return;\n }\n if (nodeInfo._clipbox == null) {\n return;\n }\n var opacity = parseFloat(getPropertyValue(style, 'opacity'));\n var visibility = getPropertyValue(style, 'visibility');\n var display = getPropertyValue(style, 'display');\n if (opacity === 0 || visibility == 'hidden' || display == 'none') {\n return;\n }\n var tr = getTransform(style);\n var group;\n var zIndex = getPropertyValue(style, 'z-index');\n if ((tr || opacity < 1) && zIndex == 'auto') {\n zIndex = 0;\n }\n group = groupInStackingContext(element, container, zIndex);\n if (opacity < 1) {\n group.opacity(opacity * group.opacity());\n }\n pushNodeInfo(element, style, group);\n if (!tr) {\n _renderWithPseudoElements(element, group);\n } else {\n saveStyle(element, function () {\n pleaseSetPropertyValue(element.style, 'transform', 'none', 'important');\n pleaseSetPropertyValue(element.style, 'transition', 'none', 'important');\n if (getPropertyValue(style, 'position') == 'static') {\n pleaseSetPropertyValue(element.style, 'position', 'relative', 'important');\n }\n var bbox = element.getBoundingClientRect();\n var x = bbox.left + tr.origin[0];\n var y = bbox.top + tr.origin[1];\n var m = [\n 1,\n 0,\n 0,\n 1,\n -x,\n -y\n ];\n m = mmul(m, tr.matrix);\n m = mmul(m, [\n 1,\n 0,\n 0,\n 1,\n x,\n y\n ]);\n m = setTransform(group, m);\n nodeInfo._matrix = nodeInfo._matrix.multiplyCopy(m);\n _renderWithPseudoElements(element, group);\n });\n }\n popNodeInfo();\n }\n function mmul(a, b) {\n var a1 = a[0], b1 = a[1], c1 = a[2], d1 = a[3], e1 = a[4], f1 = a[5];\n var a2 = b[0], b2 = b[1], c2 = b[2], d2 = b[3], e2 = b[4], f2 = b[5];\n return [\n a1 * a2 + b1 * c2,\n a1 * b2 + b1 * d2,\n c1 * a2 + d1 * c2,\n c1 * b2 + d1 * d2,\n e1 * a2 + f1 * c2 + e2,\n e1 * b2 + f1 * d2 + f2\n ];\n }\n var drawing = {\n svg: svg,\n canvas: canvas,\n util: util,\n PathParser: PathParser,\n Surface: Surface,\n BaseNode: BaseNode,\n SurfaceFactory: SurfaceFactory,\n OptionsStore: OptionsStore,\n exportImage: exportImage,\n exportSVG: exportSVG,\n QuadNode: QuadNode,\n ShapesQuadTree: ShapesQuadTree,\n ObserversMixin: ObserversMixin,\n Element: Element$1,\n Circle: Circle,\n Arc: Arc,\n Path: Path,\n MultiPath: MultiPath,\n Text: Text,\n Image: Image$1,\n Group: Group,\n Layout: Layout,\n Rect: Rect$2,\n align: align,\n vAlign: vAlign,\n stack: stack,\n vStack: vStack,\n wrap: wrap,\n vWrap: vWrap,\n fit: fit,\n LinearGradient: LinearGradient,\n RadialGradient: RadialGradient,\n GradientStop: GradientStop,\n Gradient: Gradient,\n Animation: Animation,\n AnimationFactory: AnimationFactory,\n drawDOM: drawDOM\n };\n kendo.deepExtend(kendo, {\n drawing: drawing,\n geometry: geometry\n });\n kendo.drawing.Segment = kendo.geometry.Segment;\n kendo.dataviz.drawing = kendo.drawing;\n kendo.dataviz.geometry = kendo.geometry;\n kendo.drawing.util.measureText = kendo.util.measureText;\n kendo.drawing.util.objectKey = kendo.util.objectKey;\n kendo.drawing.Color = kendo.Color;\n kendo.util.encodeBase64 = kendo.drawing.util.encodeBase64;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/surface-tooltip', [\n 'kendo.popup',\n 'drawing/kendo-drawing'\n ], f);\n}(function () {\n (function ($) {\n var NS = '.kendo';\n var kendo = window.kendo;\n var deepExtend = kendo.deepExtend;\n var utils = kendo.drawing.util;\n var defined = utils.defined;\n var limitValue = utils.limitValue;\n var eventCoordinates = utils.eventCoordinates;\n var outerWidth = kendo._outerWidth;\n var outerHeight = kendo._outerHeight;\n var proxy = $.proxy;\n var TOOLTIP_TEMPLATE = '
    ' + '
    ' + '
    ';\n var TOOLTIP_CLOSE_TEMPLATE = '';\n var SurfaceTooltip = kendo.Class.extend({\n init: function (surface, options) {\n this.element = $(TOOLTIP_TEMPLATE);\n this.content = this.element.children('.k-tooltip-content');\n options = options || {};\n this.options = deepExtend({}, this.options, this._tooltipOptions(options));\n this.popupOptions = {\n appendTo: options.appendTo,\n animation: options.animation,\n copyAnchorStyles: false,\n collision: 'fit fit'\n };\n this._openPopupHandler = $.proxy(this._openPopup, this);\n this.surface = surface;\n this._bindEvents();\n },\n options: {\n position: 'top',\n showOn: 'mouseenter',\n offset: 7,\n autoHide: true,\n hideDelay: 0,\n showAfter: 100\n },\n _bindEvents: function () {\n this._showHandler = proxy(this._showEvent, this);\n this._surfaceLeaveHandler = proxy(this._surfaceLeave, this);\n this._mouseleaveHandler = proxy(this._mouseleave, this);\n this._mousemoveHandler = proxy(this._mousemove, this);\n this.surface.bind('click', this._showHandler);\n this.surface.bind('mouseenter', this._showHandler);\n this.surface.bind('mouseleave', this._mouseleaveHandler);\n this.surface.bind('mousemove', this._mousemoveHandler);\n this.surface.element.on('mouseleave' + NS, this._surfaceLeaveHandler);\n this.element.on('click' + NS, '.k-tooltip-button', proxy(this._hideClick, this));\n },\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 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 });\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 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 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}, 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 value[fieldName] = getField(srcFieldName, object);\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] || fieldName);\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.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 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 if (zoomPane && zoomPane.clipBox()) {\n var clipBox = zoomPane.clipBox().clone();\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 inferredDate;\n for (var i = 0; i < typeSamples.length; i++) {\n if (typeSamples[i] instanceof Date) {\n inferredDate = true;\n break;\n }\n }\n var axisType;\n if (equalsIgnoreCase(axisOptions.type, DATE) || !axisOptions.type && inferredDate) {\n axisType = dataviz.DateValueAxis;\n } else if (isLog) {\n axisType = dataviz.LogarithmicAxis;\n } else {\n axisType = dataviz.NumericAxis;\n }\n var axis = new axisType(range.min, range.max, axisOptions, this.chartService);\n axis.axisIndex = axisIndex;\n if (axisName) {\n if (namedAxes[axisName]) {\n throw new Error((vertical ? 'Y' : 'X') + ' axis with name ' + axisName + ' is already defined');\n }\n namedAxes[axisName] = axis;\n }\n this.appendAxis(axis);\n return axis;\n },\n createAxes: function (panes) {\n var this$1 = this;\n var options = this.options;\n var xAxesOptions = [].concat(options.xAxis);\n var xAxes = [];\n var yAxesOptions = [].concat(options.yAxis);\n var yAxes = [];\n for (var idx = 0; idx < xAxesOptions.length; idx++) {\n var axisPane = this$1.findPane(xAxesOptions[idx].pane);\n if (inArray(axisPane, panes)) {\n xAxes.push(this$1.createXYAxis(xAxesOptions[idx], false, idx));\n }\n }\n for (var idx$1 = 0; idx$1 < yAxesOptions.length; idx$1++) {\n var axisPane$1 = this$1.findPane(yAxesOptions[idx$1].pane);\n if (inArray(axisPane$1, panes)) {\n yAxes.push(this$1.createXYAxis(yAxesOptions[idx$1], true, idx$1));\n }\n }\n this.axisX = this.axisX || xAxes[0];\n this.axisY = this.axisY || yAxes[0];\n },\n _dispatchEvent: function (chart, e, eventType) {\n var coords = chart._eventCoordinates(e);\n var point = new Point(coords.x, coords.y);\n var allAxes = this.axes;\n var length = allAxes.length;\n var xValues = [];\n var yValues = [];\n for (var i = 0; i < length; i++) {\n var axis = allAxes[i];\n var values = axis.options.vertical ? yValues : xValues;\n var currentValue = axis.getValue(point);\n if (currentValue !== null) {\n values.push(currentValue);\n }\n }\n if (xValues.length > 0 && yValues.length > 0) {\n chart.trigger(eventType, {\n element: eventElement(e),\n originalEvent: e,\n x: singleItemOrArray(xValues),\n y: singleItemOrArray(yValues)\n });\n }\n },\n updateAxisOptions: function (axis, options) {\n var vertical = axis.options.vertical;\n var axes = this.groupAxes(this.panes);\n var index = (vertical ? axes.y : axes.x).indexOf(axis);\n updateAxisOptions$1(this.options, index, vertical, options);\n updateAxisOptions$1(this.originalOptions, index, vertical, options);\n }\n });\n function updateAxisOptions$1(targetOptions, axisIndex, vertical, options) {\n var axisOptions = [].concat(vertical ? targetOptions.yAxis : targetOptions.xAxis)[axisIndex];\n deepExtend(axisOptions, options);\n }\n setDefaultOptions(XYPlotArea, {\n xAxis: {},\n yAxis: {}\n });\n deepExtend(XYPlotArea.prototype, PlotAreaEventsMixin);\n var PieSegment = ChartElement.extend({\n init: function (value, sector, options) {\n ChartElement.fn.init.call(this, options);\n this.value = value;\n this.sector = sector;\n },\n render: function () {\n var labels = this.options.labels;\n var chartService = this.owner.chartService;\n var labelText = this.value;\n if (this._rendered || this.visible === false) {\n return;\n }\n this._rendered = true;\n var labelTemplate = getTemplate(labels);\n var pointData = this.pointData();\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else if (labels.format) {\n labelText = chartService.format.auto(labels.format, labelText);\n }\n if (labels.visible && (labelText || labelText === 0)) {\n if (labels.position === CENTER || labels.position === INSIDE_END) {\n if (!labels.color) {\n var brightnessValue = new Color(this.options.color).percBrightness();\n if (brightnessValue > 180) {\n labels.color = BLACK;\n } else {\n labels.color = WHITE;\n }\n }\n if (!labels.background) {\n labels.background = this.options.color;\n }\n } else {\n var themeLabels = chartService.theme.seriesDefaults.labels;\n labels.color = labels.color || themeLabels.color;\n labels.background = labels.background || themeLabels.background;\n }\n this.label = new TextBox(labelText, deepExtend({}, labels, {\n align: CENTER,\n vAlign: '',\n animation: {\n type: FADEIN,\n delay: this.animationDelay\n }\n }), pointData);\n this.append(this.label);\n }\n },\n reflow: function (targetBox) {\n this.render();\n this.box = targetBox;\n this.reflowLabel();\n },\n reflowLabel: function () {\n var ref = this;\n var labelsOptions = ref.options.labels;\n var label = ref.label;\n var sector = this.sector.clone();\n var labelsDistance = labelsOptions.distance;\n var angle = sector.middle();\n if (label) {\n var labelHeight = label.box.height();\n var labelWidth = label.box.width();\n var lp;\n if (labelsOptions.position === CENTER) {\n sector.radius = Math.abs((sector.radius - labelHeight) / 2) + labelHeight;\n lp = sector.point(angle);\n label.reflow(new Box(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\n } else if (labelsOptions.position === INSIDE_END) {\n sector.radius = sector.radius - labelHeight / 2;\n lp = sector.point(angle);\n label.reflow(new Box(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\n } else {\n var x1;\n lp = sector.clone().expand(labelsDistance).point(angle);\n if (lp.x >= sector.center.x) {\n x1 = lp.x + labelWidth;\n label.orientation = RIGHT;\n } else {\n x1 = lp.x - labelWidth;\n label.orientation = LEFT;\n }\n label.reflow(new Box(x1, lp.y - labelHeight, lp.x, lp.y));\n }\n }\n },\n createVisual: function () {\n var this$1 = this;\n var ref = this;\n var sector = ref.sector;\n var options = ref.options;\n ChartElement.fn.createVisual.call(this);\n if (this.value) {\n if (options.visual) {\n var startAngle = (sector.startAngle + 180) % 360;\n var visual = options.visual({\n category: this.category,\n dataItem: this.dataItem,\n value: this.value,\n series: this.series,\n percentage: this.percentage,\n center: new GeometryPoint(sector.center.x, sector.center.y),\n radius: sector.radius,\n innerRadius: sector.innerRadius,\n startAngle: startAngle,\n endAngle: startAngle + sector.angle,\n options: options,\n sender: this.getSender(),\n createVisual: function () {\n var group = new Group();\n this$1.createSegmentVisual(group);\n return group;\n }\n });\n if (visual) {\n this.visual.append(visual);\n }\n } else {\n this.createSegmentVisual(this.visual);\n }\n }\n },\n createSegmentVisual: function (group) {\n var ref = this;\n var sector = ref.sector;\n var options = ref.options;\n var borderOptions = options.border || {};\n var border = borderOptions.width > 0 ? {\n stroke: {\n color: borderOptions.color,\n width: borderOptions.width,\n opacity: borderOptions.opacity,\n dashType: borderOptions.dashType\n }\n } : {};\n var color = options.color;\n var fill = {\n color: color,\n opacity: options.opacity\n };\n var visual = this.createSegment(sector, deepExtend({\n fill: fill,\n stroke: { opacity: options.opacity },\n zIndex: options.zIndex\n }, border));\n group.append(visual);\n if (hasGradientOverlay(options)) {\n group.append(this.createGradientOverlay(visual, {\n baseColor: color,\n fallbackFill: fill\n }, deepExtend({\n center: [\n sector.center.x,\n sector.center.y\n ],\n innerRadius: sector.innerRadius,\n radius: sector.radius,\n userSpace: true\n }, options.overlay)));\n }\n },\n createSegment: function (sector, options) {\n if (options.singleSegment) {\n return new drawing.Circle(new geometry.Circle(new GeometryPoint(sector.center.x, sector.center.y), sector.radius), options);\n }\n return dataviz.ShapeBuilder.current.createRing(sector, options);\n },\n createAnimation: function () {\n var ref = this;\n var options = ref.options;\n var center = ref.sector.center;\n deepExtend(options, {\n animation: {\n center: [\n center.x,\n center.y\n ],\n delay: this.animationDelay\n }\n });\n ChartElement.fn.createAnimation.call(this);\n },\n createHighlight: function (options) {\n var highlight = this.options.highlight || {};\n var border = highlight.border || {};\n return this.createSegment(this.sector, deepExtend({}, options, {\n fill: {\n color: highlight.color,\n opacity: highlight.opacity\n },\n stroke: {\n opacity: border.opacity,\n width: border.width,\n color: border.color\n }\n }));\n },\n highlightVisual: function () {\n return this.visual.children[0];\n },\n highlightVisualArgs: function () {\n var sector = this.sector;\n return {\n options: this.options,\n radius: sector.radius,\n innerRadius: sector.innerRadius,\n center: new GeometryPoint(sector.center.x, sector.center.y),\n startAngle: sector.startAngle,\n endAngle: sector.angle + sector.startAngle,\n visual: this.visual\n };\n },\n tooltipAnchor: function () {\n var sector = this.sector.clone().expand(TOOLTIP_OFFSET);\n var midAndle = sector.middle();\n var midPoint = sector.point(midAndle);\n return {\n point: midPoint,\n align: tooltipAlignment(midAndle + 180)\n };\n },\n formatValue: function (format) {\n return this.owner.formatPointValue(this, format);\n },\n pointData: function () {\n return {\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n series: this.series,\n percentage: this.percentage\n };\n }\n });\n var RAD_30 = round(dataviz.rad(30), DEFAULT_PRECISION);\n var RAD_60 = round(dataviz.rad(60), DEFAULT_PRECISION);\n function tooltipAlignment(angle) {\n var radians = dataviz.rad(angle);\n var sine = round(Math.sin(radians), DEFAULT_PRECISION);\n var cosine = round(Math.cos(radians), DEFAULT_PRECISION);\n var horizontal;\n if (Math.abs(sine) > RAD_60) {\n horizontal = CENTER;\n } else if (cosine < 0) {\n horizontal = RIGHT;\n } else {\n horizontal = LEFT;\n }\n var vertical;\n if (Math.abs(sine) < RAD_30) {\n vertical = CENTER;\n } else if (sine < 0) {\n vertical = BOTTOM;\n } else {\n vertical = TOP;\n }\n return {\n horizontal: horizontal,\n vertical: vertical\n };\n }\n setDefaultOptions(PieSegment, {\n color: WHITE,\n overlay: { gradient: 'roundedBevel' },\n border: { width: 0.5 },\n labels: {\n visible: false,\n distance: 35,\n font: datavizConstants.DEFAULT_FONT,\n margin: getSpacing(0.5),\n align: CIRCLE,\n zIndex: 1,\n position: OUTSIDE_END\n },\n animation: { type: PIE },\n highlight: {\n visible: true,\n border: { width: 1 }\n },\n visible: true\n });\n deepExtend(PieSegment.prototype, PointEventsMixin);\n var PieChartMixin = {\n createLegendItem: function (value, point, options) {\n var legendOptions = this.options.legend || {};\n var labelsOptions = legendOptions.labels || {};\n var inactiveItems = legendOptions.inactiveItems || {};\n var inactiveItemsLabels = inactiveItems.labels || {};\n if (options && options.visibleInLegend !== false) {\n var pointVisible = options.visible !== false;\n var labelTemplate = pointVisible ? getTemplate(labelsOptions) : getTemplate(inactiveItemsLabels) || getTemplate(labelsOptions);\n var text = options.category;\n if (labelTemplate) {\n text = labelTemplate({\n text: text,\n series: options.series,\n dataItem: options.dataItem,\n percentage: options.percentage,\n value: value\n });\n }\n var itemLabelOptions, markerColor;\n if (pointVisible) {\n itemLabelOptions = {};\n markerColor = point.color;\n } else {\n itemLabelOptions = {\n color: inactiveItemsLabels.color,\n font: inactiveItemsLabels.font\n };\n markerColor = (inactiveItems.markers || {}).color;\n }\n if (hasValue(text) && text !== '') {\n this.legendItems.push({\n active: pointVisible,\n pointIndex: options.index,\n text: text,\n series: options.series,\n markerColor: markerColor,\n labels: itemLabelOptions\n });\n }\n }\n }\n };\n var PIE_SECTOR_ANIM_DELAY = 70;\n var PieChart = ChartElement.extend({\n init: function (plotArea, options) {\n ChartElement.fn.init.call(this, options);\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this.points = [];\n this.legendItems = [];\n this.render();\n },\n render: function () {\n this.traverseDataPoints(this.addValue.bind(this));\n },\n traverseDataPoints: function (callback) {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var seriesColors = ref.plotArea.options.seriesColors;\n if (seriesColors === void 0) {\n seriesColors = [];\n }\n var colorsCount = seriesColors.length;\n var series = options.series;\n var seriesCount = series.length;\n for (var seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n var currentSeries = series[seriesIx];\n var data = currentSeries.data;\n var ref$1 = bindSegments(currentSeries);\n var total = ref$1.total;\n var points = ref$1.points;\n var count = ref$1.count;\n var anglePerValue = 360 / total;\n var constantAngle = void 0;\n if (!isFinite(anglePerValue)) {\n constantAngle = 360 / count;\n }\n var currentAngle = void 0;\n if (defined(currentSeries.startAngle)) {\n currentAngle = currentSeries.startAngle;\n } else {\n currentAngle = options.startAngle;\n }\n if (seriesIx !== seriesCount - 1) {\n if (currentSeries.labels.position === OUTSIDE_END) {\n currentSeries.labels.position = CENTER;\n }\n }\n for (var i = 0; i < points.length; i++) {\n var pointData = points[i];\n if (!pointData) {\n continue;\n }\n var fields = pointData.fields;\n var value = pointData.value;\n var visible = pointData.visible;\n var angle = value !== 0 ? constantAngle || value * anglePerValue : 0;\n var explode = data.length !== 1 && Boolean(fields.explode);\n if (!isFunction(currentSeries.color)) {\n currentSeries.color = fields.color || seriesColors[i % colorsCount];\n }\n callback(pointData.valueFields.value, new dataviz.Ring(null, 0, 0, currentAngle, angle), {\n owner: this$1,\n category: defined(fields.category) ? fields.category : '',\n index: i,\n series: currentSeries,\n seriesIx: seriesIx,\n dataItem: data[i],\n percentage: total !== 0 ? value / total : 0,\n explode: explode,\n visibleInLegend: fields.visibleInLegend,\n visible: visible,\n zIndex: seriesCount - seriesIx,\n animationDelay: this$1.animationDelay(i, seriesIx, seriesCount)\n });\n if (visible !== false) {\n currentAngle += angle;\n }\n }\n }\n },\n evalSegmentOptions: function (options, value, fields) {\n var series = fields.series;\n evalOptions(options, {\n value: value,\n series: series,\n dataItem: fields.dataItem,\n category: fields.category,\n percentage: fields.percentage\n }, {\n defaults: series._defaults,\n excluded: [\n 'data',\n 'content',\n 'template',\n 'visual',\n 'toggle'\n ]\n });\n },\n addValue: function (value, sector, fields) {\n var segmentOptions = deepExtend({}, fields.series, { index: fields.index });\n this.evalSegmentOptions(segmentOptions, value, fields);\n this.createLegendItem(value, segmentOptions, fields);\n if (fields.visible === false) {\n return;\n }\n var segment = new PieSegment(value, sector, segmentOptions);\n $.extend(segment, fields);\n this.append(segment);\n this.points.push(segment);\n },\n reflow: function (targetBox) {\n var ref = this;\n var options = ref.options;\n var points = ref.points;\n var seriesConfigs = ref.seriesConfigs;\n if (seriesConfigs === void 0) {\n seriesConfigs = [];\n }\n var count = points.length;\n var box = targetBox.clone();\n var space = 5;\n var minWidth = Math.min(box.width(), box.height());\n var halfMinWidth = minWidth / 2;\n var defaultPadding = minWidth - minWidth * 0.85;\n var newBox = new Box(box.x1, box.y1, box.x1 + minWidth, box.y1 + minWidth);\n var newBoxCenter = newBox.center();\n var boxCenter = box.center();\n var seriesCount = options.series.length;\n var leftSideLabels = [];\n var rightSideLabels = [];\n var padding = valueOrDefault(options.padding, defaultPadding);\n padding = padding > halfMinWidth - space ? halfMinWidth - space : padding;\n newBox.translate(boxCenter.x - newBoxCenter.x, boxCenter.y - newBoxCenter.y);\n var radius = halfMinWidth - padding;\n var center = new Point(radius + newBox.x1 + padding, radius + newBox.y1 + padding);\n for (var i = 0; i < count; i++) {\n var segment = points[i];\n var sector = segment.sector;\n var seriesIndex = segment.seriesIx;\n sector.radius = radius;\n sector.center = center;\n if (seriesConfigs.length) {\n var seriesConfig = seriesConfigs[seriesIndex];\n sector.innerRadius = seriesConfig.innerRadius;\n sector.radius = seriesConfig.radius;\n }\n if (seriesIndex === seriesCount - 1 && segment.explode) {\n sector.center = sector.clone().setRadius(sector.radius * 0.15).point(sector.middle());\n }\n segment.reflow(newBox);\n var label = segment.label;\n if (label) {\n if (label.options.position === OUTSIDE_END) {\n if (seriesIndex === seriesCount - 1) {\n if (label.orientation === RIGHT) {\n rightSideLabels.push(label);\n } else {\n leftSideLabels.push(label);\n }\n }\n }\n }\n }\n if (leftSideLabels.length > 0) {\n leftSideLabels.sort(this.labelComparator(true));\n this.leftLabelsReflow(leftSideLabels);\n }\n if (rightSideLabels.length > 0) {\n rightSideLabels.sort(this.labelComparator(false));\n this.rightLabelsReflow(rightSideLabels);\n }\n this.box = newBox;\n },\n leftLabelsReflow: function (labels) {\n var distances = this.distanceBetweenLabels(labels);\n this.distributeLabels(distances, labels);\n },\n rightLabelsReflow: function (labels) {\n var distances = this.distanceBetweenLabels(labels);\n this.distributeLabels(distances, labels);\n },\n distanceBetweenLabels: function (labels) {\n var segment = last(this.points);\n var sector = segment.sector;\n var count = labels.length - 1;\n var lr = sector.radius + segment.options.labels.distance;\n var distances = [];\n var firstBox = labels[0].box;\n var distance = round(firstBox.y1 - (sector.center.y - lr - firstBox.height() - firstBox.height() / 2));\n distances.push(distance);\n for (var i = 0; i < count; i++) {\n var secondBox = labels[i + 1].box;\n firstBox = labels[i].box;\n distance = round(secondBox.y1 - firstBox.y2);\n distances.push(distance);\n }\n distance = round(sector.center.y + lr - labels[count].box.y2 - labels[count].box.height() / 2);\n distances.push(distance);\n return distances;\n },\n distributeLabels: function (distances, labels) {\n var this$1 = this;\n var count = distances.length;\n var left, right, remaining;\n for (var i = 0; i < count; i++) {\n remaining = -distances[i];\n left = right = i;\n while (remaining > 0 && (left >= 0 || right < count)) {\n remaining = this$1._takeDistance(distances, i, --left, remaining);\n remaining = this$1._takeDistance(distances, i, ++right, remaining);\n }\n }\n this.reflowLabels(distances, labels);\n },\n _takeDistance: function (distances, anchor, position, amount) {\n var result = amount;\n if (distances[position] > 0) {\n var available = Math.min(distances[position], result);\n result -= available;\n distances[position] -= available;\n distances[anchor] += available;\n }\n return result;\n },\n reflowLabels: function (distances, labels) {\n var this$1 = this;\n var segment = last(this.points);\n var sector = segment.sector;\n var labelOptions = segment.options.labels;\n var labelsCount = labels.length;\n var labelDistance = labelOptions.distance;\n var boxY = sector.center.y - (sector.radius + labelDistance) - labels[0].box.height();\n var boxX;\n distances[0] += 2;\n for (var i = 0; i < labelsCount; i++) {\n var label = labels[i];\n var box = label.box;\n boxY += distances[i];\n boxX = this$1.hAlignLabel(box.x2, sector.clone().expand(labelDistance), boxY, boxY + box.height(), label.orientation === RIGHT);\n if (label.orientation === RIGHT) {\n if (labelOptions.align !== CIRCLE) {\n boxX = sector.radius + sector.center.x + labelDistance;\n }\n label.reflow(new Box(boxX + box.width(), boxY, boxX, boxY));\n } else {\n if (labelOptions.align !== CIRCLE) {\n boxX = sector.center.x - sector.radius - labelDistance;\n }\n label.reflow(new Box(boxX - box.width(), boxY, boxX, boxY));\n }\n boxY += box.height();\n }\n },\n createVisual: function () {\n var this$1 = this;\n var ref = this;\n var connectors = ref.options.connectors;\n var points = ref.points;\n var count = points.length;\n var space = 4;\n ChartElement.fn.createVisual.call(this);\n this._connectorLines = [];\n for (var i = 0; i < count; i++) {\n var segment = points[i];\n var sector = segment.sector;\n var label = segment.label;\n var angle = sector.middle();\n var connectorsColor = (segment.options.connectors || {}).color || connectors.color;\n if (label) {\n var connectorLine = new Path({\n stroke: {\n color: connectorsColor,\n width: connectors.width\n },\n animation: {\n type: FADEIN,\n delay: segment.animationDelay\n }\n });\n if (label.options.position === OUTSIDE_END) {\n var box = label.box;\n var centerPoint = sector.center;\n var start = sector.point(angle);\n var middle = new Point(box.x1, box.center().y);\n var sr = void 0, end = void 0, crossing = void 0;\n start = sector.clone().expand(connectors.padding).point(angle);\n connectorLine.moveTo(start.x, start.y);\n if (label.orientation === RIGHT) {\n end = new Point(box.x1 - connectors.padding, box.center().y);\n crossing = intersection(centerPoint, start, middle, end);\n middle = new Point(end.x - space, end.y);\n crossing = crossing || middle;\n crossing.x = Math.min(crossing.x, middle.x);\n if (this$1.pointInCircle(crossing, sector.center, sector.radius + space) || crossing.x < sector.center.x) {\n sr = sector.center.x + sector.radius + space;\n if (segment.options.labels.align !== COLUMN) {\n if (sr < middle.x) {\n connectorLine.lineTo(sr, start.y);\n } else {\n connectorLine.lineTo(start.x + space * 2, start.y);\n }\n } else {\n connectorLine.lineTo(sr, start.y);\n }\n connectorLine.lineTo(middle.x, end.y);\n } else {\n crossing.y = end.y;\n connectorLine.lineTo(crossing.x, crossing.y);\n }\n } else {\n end = new Point(box.x2 + connectors.padding, box.center().y);\n crossing = intersection(centerPoint, start, middle, end);\n middle = new Point(end.x + space, end.y);\n crossing = crossing || middle;\n crossing.x = Math.max(crossing.x, middle.x);\n if (this$1.pointInCircle(crossing, sector.center, sector.radius + space) || crossing.x > sector.center.x) {\n sr = sector.center.x - sector.radius - space;\n if (segment.options.labels.align !== COLUMN) {\n if (sr > middle.x) {\n connectorLine.lineTo(sr, start.y);\n } else {\n connectorLine.lineTo(start.x - space * 2, start.y);\n }\n } else {\n connectorLine.lineTo(sr, start.y);\n }\n connectorLine.lineTo(middle.x, end.y);\n } else {\n crossing.y = end.y;\n connectorLine.lineTo(crossing.x, crossing.y);\n }\n }\n connectorLine.lineTo(end.x, end.y);\n this$1._connectorLines.push(connectorLine);\n this$1.visual.append(connectorLine);\n }\n }\n }\n },\n labelComparator: function (reverse) {\n var reverseValue = reverse ? -1 : 1;\n return function (a, b) {\n var first = (a.parent.sector.middle() + 270) % 360;\n var second = (b.parent.sector.middle() + 270) % 360;\n return (first - second) * reverseValue;\n };\n },\n hAlignLabel: function (originalX, sector, y1, y2, direction) {\n var radius = sector.radius;\n var sector_center = sector.center;\n var cx = sector_center.x;\n var cy = sector_center.y;\n var t = Math.min(Math.abs(cy - y1), Math.abs(cy - y2));\n if (t > radius) {\n return originalX;\n }\n return cx + Math.sqrt(radius * radius - t * t) * (direction ? 1 : -1);\n },\n pointInCircle: function (point, center, radius) {\n return Math.pow(center.x - point.x, 2) + Math.pow(center.y - point.y, 2) < Math.pow(radius, 2);\n },\n formatPointValue: function (point, format) {\n return this.chartService.format.auto(format, point.value);\n },\n animationDelay: function (categoryIndex) {\n return categoryIndex * PIE_SECTOR_ANIM_DELAY;\n }\n });\n function intersection(a1, a2, b1, b2) {\n var uat = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x);\n var ub = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y);\n var result;\n if (ub !== 0) {\n var ua = uat / ub;\n result = new Point(a1.x + ua * (a2.x - a1.x), a1.y + ua * (a2.y - a1.y));\n }\n return result;\n }\n setDefaultOptions(PieChart, {\n startAngle: 90,\n connectors: {\n width: 2,\n color: '#939393',\n padding: 8\n },\n inactiveItems: {\n markers: {},\n labels: {}\n }\n });\n deepExtend(PieChart.prototype, PieChartMixin);\n var PiePlotArea = PlotAreaBase.extend({\n render: function () {\n this.createPieChart(this.series);\n },\n createPieChart: function (series) {\n var firstSeries = series[0];\n var pieChart = new PieChart(this, {\n series: series,\n padding: firstSeries.padding,\n startAngle: firstSeries.startAngle,\n connectors: firstSeries.connectors,\n legend: this.options.legend\n });\n this.appendChart(pieChart);\n },\n appendChart: function (chart, pane) {\n PlotAreaBase.fn.appendChart.call(this, chart, pane);\n append(this.options.legend.items, chart.legendItems);\n }\n });\n var DonutSegment = PieSegment.extend({\n reflowLabel: function () {\n var ref = this;\n var labelsOptions = ref.options.labels;\n var label = ref.label;\n var sector = this.sector.clone();\n var angle = sector.middle();\n if (label) {\n var labelHeight = label.box.height();\n if (labelsOptions.position === CENTER) {\n sector.radius -= (sector.radius - sector.innerRadius) / 2;\n var lp = sector.point(angle);\n label.reflow(new Box(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\n } else {\n PieSegment.fn.reflowLabel.call(this);\n }\n }\n },\n createSegment: function (sector, options) {\n return dataviz.ShapeBuilder.current.createRing(sector, options);\n }\n });\n setDefaultOptions(DonutSegment, {\n overlay: { gradient: 'roundedGlass' },\n labels: { position: CENTER },\n animation: { type: PIE }\n });\n deepExtend(DonutSegment.prototype, PointEventsMixin);\n var DONUT_SECTOR_ANIM_DELAY = 50;\n var DonutChart = PieChart.extend({\n addValue: function (value, sector, fields) {\n var segmentOptions = deepExtend({}, fields.series, { index: fields.index });\n this.evalSegmentOptions(segmentOptions, value, fields);\n this.createLegendItem(value, segmentOptions, fields);\n if (!value || fields.visible === false) {\n return;\n }\n var segment = new DonutSegment(value, sector, segmentOptions);\n $.extend(segment, fields);\n this.append(segment);\n this.points.push(segment);\n },\n reflow: function (targetBox) {\n var this$1 = this;\n var options = this.options;\n var box = targetBox.clone();\n var space = 5;\n var minWidth = Math.min(box.width(), box.height());\n var halfMinWidth = minWidth / 2;\n var defaultPadding = minWidth - minWidth * 0.85;\n var series = options.series;\n var seriesCount = series.length;\n var padding = valueOrDefault(options.padding, defaultPadding);\n padding = padding > halfMinWidth - space ? halfMinWidth - space : padding;\n var totalSize = halfMinWidth - padding;\n var seriesWithoutSize = 0;\n var holeSize;\n for (var i = 0; i < seriesCount; i++) {\n var currentSeries = series[i];\n if (i === 0) {\n if (defined(currentSeries.holeSize)) {\n holeSize = currentSeries.holeSize;\n totalSize -= currentSeries.holeSize;\n }\n }\n if (defined(currentSeries.size)) {\n totalSize -= currentSeries.size;\n } else {\n seriesWithoutSize++;\n }\n if (defined(currentSeries.margin) && i !== seriesCount - 1) {\n totalSize -= currentSeries.margin;\n }\n }\n if (!defined(holeSize)) {\n var currentSize = (halfMinWidth - padding) / (seriesCount + 0.75);\n holeSize = currentSize * 0.75;\n totalSize -= holeSize;\n }\n var innerRadius = holeSize;\n var margin = 0;\n var size, radius;\n this.seriesConfigs = [];\n for (var i$1 = 0; i$1 < seriesCount; i$1++) {\n var currentSeries$1 = series[i$1];\n size = valueOrDefault(currentSeries$1.size, totalSize / seriesWithoutSize);\n innerRadius += margin;\n radius = innerRadius + size;\n this$1.seriesConfigs.push({\n innerRadius: innerRadius,\n radius: radius\n });\n margin = currentSeries$1.margin || 0;\n innerRadius = radius;\n }\n PieChart.fn.reflow.call(this, targetBox);\n },\n animationDelay: function (categoryIndex, seriesIndex, seriesCount) {\n return categoryIndex * DONUT_SECTOR_ANIM_DELAY + INITIAL_ANIMATION_DURATION * (seriesIndex + 1) / (seriesCount + 1);\n }\n });\n setDefaultOptions(DonutChart, {\n startAngle: 90,\n connectors: {\n width: 2,\n color: '#939393',\n padding: 8\n }\n });\n var DonutPlotArea = PiePlotArea.extend({\n render: function () {\n this.createDonutChart(this.series);\n },\n createDonutChart: function (series) {\n var firstSeries = series[0];\n var donutChart = new DonutChart(this, {\n series: series,\n padding: firstSeries.padding,\n connectors: firstSeries.connectors,\n legend: this.options.legend\n });\n this.appendChart(donutChart);\n }\n });\n var DEFAULT_PADDING = 0.15;\n var PolarPlotAreaBase = PlotAreaBase.extend({\n initFields: function () {\n this.valueAxisRangeTracker = new AxisGroupRangeTracker();\n },\n render: function () {\n this.addToLegend(this.series);\n this.createPolarAxis();\n this.createCharts();\n this.createValueAxis();\n },\n alignAxes: function () {\n var axis = this.valueAxis;\n var range = axis.range();\n var crossingValue = axis.options.reverse ? range.max : range.min;\n var slot = axis.getSlot(crossingValue);\n var center = this.polarAxis.getSlot(0).center;\n var axisBox = axis.box.translate(center.x - slot.x1, center.y - slot.y1);\n axis.reflow(axisBox);\n },\n createValueAxis: function () {\n var tracker = this.valueAxisRangeTracker;\n var defaultRange = tracker.query();\n var axisOptions = this.valueAxisOptions({\n roundToMajorUnit: false,\n zIndex: -1\n });\n var axisType, axisDefaultRange;\n if (axisOptions.type === LOGARITHMIC) {\n axisType = dataviz.RadarLogarithmicAxis;\n axisDefaultRange = {\n min: 0.1,\n max: 1\n };\n } else {\n axisType = dataviz.RadarNumericAxis;\n axisDefaultRange = {\n min: 0,\n max: 1\n };\n }\n var range = tracker.query(name) || defaultRange || axisDefaultRange;\n if (range && defaultRange) {\n range.min = Math.min(range.min, defaultRange.min);\n range.max = Math.max(range.max, defaultRange.max);\n }\n var valueAxis = new axisType(range.min, range.max, axisOptions, this.chartService);\n this.valueAxis = valueAxis;\n this.appendAxis(valueAxis);\n },\n reflowAxes: function () {\n var ref = this;\n var options = ref.options.plotArea;\n var valueAxis = ref.valueAxis;\n var polarAxis = ref.polarAxis;\n var box = ref.box;\n var defaultPadding = Math.min(box.width(), box.height()) * DEFAULT_PADDING;\n var padding = getSpacing(options.padding || {}, defaultPadding);\n var paddingBox = box.clone().unpad(padding);\n var axisBox = paddingBox.clone();\n axisBox.y2 = axisBox.y1 + Math.min(axisBox.width(), axisBox.height());\n axisBox.align(paddingBox, Y, CENTER);\n var valueAxisBox = axisBox.clone().shrink(0, axisBox.height() / 2);\n polarAxis.reflow(axisBox);\n valueAxis.reflow(valueAxisBox);\n var heightDiff = valueAxis.lineBox().height() - valueAxis.box.height();\n valueAxis.reflow(valueAxis.box.unpad({ top: heightDiff }));\n this.axisBox = axisBox;\n this.alignAxes(axisBox);\n },\n backgroundBox: function () {\n return this.box;\n },\n detachLabels: function () {\n }\n });\n var PolarScatterChart = ScatterChart.extend({\n pointSlot: function (slotX, slotY) {\n var valueRadius = slotX.center.y - slotY.y1;\n var slot = Point.onCircle(slotX.center, slotX.startAngle, valueRadius);\n return new Box(slot.x, slot.y, slot.x, slot.y);\n }\n });\n setDefaultOptions(PolarScatterChart, { clip: false });\n var PolarLineChart = ScatterLineChart.extend({});\n PolarLineChart.prototype.pointSlot = PolarScatterChart.prototype.pointSlot;\n setDefaultOptions(PolarLineChart, { clip: false });\n var SplinePolarAreaSegment = SplineAreaSegment.extend({\n fillToAxes: function (fillPath) {\n var center = this._polarAxisCenter();\n fillPath.lineTo(center.x, center.y);\n },\n _polarAxisCenter: function () {\n var polarAxis = this.parent.plotArea.polarAxis;\n var center = polarAxis.box.center();\n return center;\n },\n strokeSegments: function () {\n var segments = this._strokeSegments;\n if (!segments) {\n var center = this._polarAxisCenter();\n var curveProcessor = new CurveProcessor(false);\n var linePoints = this.points();\n linePoints.push(center);\n segments = this._strokeSegments = curveProcessor.process(linePoints);\n segments.pop();\n }\n return segments;\n }\n });\n var PolarAreaSegment = AreaSegment.extend({\n fillToAxes: function (fillPath) {\n var polarAxis = this.parent.plotArea.polarAxis;\n var center = polarAxis.box.center();\n var centerSegment = new geometry.Segment([\n center.x,\n center.y\n ]);\n fillPath.segments.unshift(centerSegment);\n fillPath.segments.push(centerSegment);\n }\n });\n var PolarAreaChart = PolarLineChart.extend({\n createSegment: function (linePoints, currentSeries, seriesIx) {\n var style = (currentSeries.line || {}).style;\n var segment;\n if (style === SMOOTH) {\n segment = new SplinePolarAreaSegment(linePoints, currentSeries, seriesIx);\n } else {\n segment = new PolarAreaSegment(linePoints, currentSeries, seriesIx);\n }\n return segment;\n },\n createMissingValue: function (value, missingValues) {\n var missingValue;\n if (hasValue(value.x) && missingValues !== INTERPOLATE) {\n missingValue = {\n x: value.x,\n y: value.y\n };\n if (missingValues === ZERO) {\n missingValue.y = 0;\n }\n }\n return missingValue;\n },\n seriesMissingValues: function (series) {\n return series.missingValues || ZERO;\n },\n _hasMissingValuesGap: function () {\n var this$1 = this;\n var series = this.options.series;\n for (var idx = 0; idx < series.length; idx++) {\n if (this$1.seriesMissingValues(series[idx]) === GAP) {\n return true;\n }\n }\n },\n sortPoints: function (points) {\n var this$1 = this;\n points.sort(xComparer);\n if (this._hasMissingValuesGap()) {\n for (var idx = 0; idx < points.length; idx++) {\n var point = points[idx];\n if (point) {\n var value = point.value;\n if (!hasValue(value.y) && this$1.seriesMissingValues(point.series) === GAP) {\n delete points[idx];\n }\n }\n }\n }\n return points;\n }\n });\n function xComparer(a, b) {\n return a.value.x - b.value.x;\n }\n var PolarPlotArea = PolarPlotAreaBase.extend({\n createPolarAxis: function () {\n var polarAxis = new dataviz.PolarAxis(this.options.xAxis, this.chartService);\n this.polarAxis = polarAxis;\n this.axisX = polarAxis;\n this.appendAxis(polarAxis);\n },\n valueAxisOptions: function (defaults) {\n return deepExtend(defaults, {\n majorGridLines: { type: ARC },\n minorGridLines: { type: ARC }\n }, this.options.yAxis);\n },\n createValueAxis: function () {\n PolarPlotAreaBase.fn.createValueAxis.call(this);\n this.axisY = this.valueAxis;\n },\n appendChart: function (chart, pane) {\n this.valueAxisRangeTracker.update(chart.yAxisRanges);\n PlotAreaBase.prototype.appendChart.call(this, chart, pane);\n },\n createCharts: function () {\n var series = this.filterVisibleSeries(this.series);\n var pane = this.panes[0];\n this.createLineChart(filterSeriesByType(series, [POLAR_LINE]), pane);\n this.createScatterChart(filterSeriesByType(series, [POLAR_SCATTER]), pane);\n this.createAreaChart(filterSeriesByType(series, [POLAR_AREA]), pane);\n },\n createLineChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var lineChart = new PolarLineChart(this, { series: series });\n this.appendChart(lineChart, pane);\n },\n createScatterChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var scatterChart = new PolarScatterChart(this, { series: series });\n this.appendChart(scatterChart, pane);\n },\n createAreaChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var areaChart = new PolarAreaChart(this, { series: series });\n this.appendChart(areaChart, pane);\n },\n _dispatchEvent: function (chart, e, eventType) {\n var coords = chart._eventCoordinates(e);\n var point = new Point(coords.x, coords.y);\n var xValue = this.axisX.getValue(point);\n var yValue = this.axisY.getValue(point);\n if (xValue !== null && yValue !== null) {\n chart.trigger(eventType, {\n element: eventElement(e),\n x: xValue,\n y: yValue\n });\n }\n },\n createCrosshairs: function () {\n }\n });\n setDefaultOptions(PolarPlotArea, {\n xAxis: {},\n yAxis: {}\n });\n deepExtend(PolarPlotArea.prototype, PlotAreaEventsMixin);\n var RadarLineChart = LineChart.extend({\n pointSlot: function (categorySlot, valueSlot) {\n var valueRadius = categorySlot.center.y - valueSlot.y1;\n var slot = Point.onCircle(categorySlot.center, categorySlot.middle(), valueRadius);\n return new Box(slot.x, slot.y, slot.x, slot.y);\n },\n createSegment: function (linePoints, currentSeries, seriesIx) {\n var style = currentSeries.style;\n var pointType;\n if (style === SMOOTH) {\n pointType = SplineSegment;\n } else {\n pointType = LineSegment;\n }\n var segment = new pointType(linePoints, currentSeries, seriesIx);\n if (linePoints.length === currentSeries.data.length) {\n segment.options.closed = true;\n }\n return segment;\n }\n });\n setDefaultOptions(RadarLineChart, {\n clip: false,\n limitPoints: false\n });\n var SplineRadarAreaSegment = SplineAreaSegment.extend({\n fillToAxes: function () {\n }\n });\n var RadarAreaSegment = AreaSegment.extend({\n fillToAxes: function () {\n }\n });\n var RadarAreaChart = RadarLineChart.extend({\n createSegment: function (linePoints, currentSeries, seriesIx, prevSegment) {\n var isStacked = this.options.isStacked;\n var style = (currentSeries.line || {}).style;\n var previousSegment;\n var stackPoints;\n var segment;\n if (isStacked && seriesIx > 0 && prevSegment) {\n stackPoints = prevSegment.linePoints.slice(0);\n previousSegment = prevSegment;\n }\n if (style === SMOOTH) {\n segment = new SplineRadarAreaSegment(linePoints, currentSeries, seriesIx, previousSegment, stackPoints);\n segment.options.closed = true;\n } else {\n linePoints.push(linePoints[0]);\n segment = new RadarAreaSegment(linePoints, currentSeries, seriesIx, previousSegment, stackPoints);\n }\n return segment;\n },\n seriesMissingValues: function (series) {\n return series.missingValues || ZERO;\n }\n });\n var RadarSegment = DonutSegment.extend({\n init: function (value, options) {\n DonutSegment.fn.init.call(this, value, null, options);\n }\n });\n setDefaultOptions(RadarSegment, {\n overlay: { gradient: 'none' },\n labels: { distance: 10 }\n });\n var RadarClusterLayout = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n this.forEach = options.rtl ? forEachReverse : forEach;\n },\n reflow: function (sector) {\n var ref = this;\n var options = ref.options;\n var children = ref.children;\n var gap = options.gap;\n var spacing = options.spacing;\n var count = children.length;\n var slots = count + gap + spacing * (count - 1);\n var slotAngle = sector.angle / slots;\n var angle = sector.startAngle + slotAngle * (gap / 2);\n this.forEach(children, function (child) {\n var slotSector = sector.clone();\n slotSector.startAngle = angle;\n slotSector.angle = slotAngle;\n if (child.sector) {\n slotSector.radius = child.sector.radius;\n }\n child.reflow(slotSector);\n child.sector = slotSector;\n angle += slotAngle + slotAngle * spacing;\n });\n }\n });\n setDefaultOptions(RadarClusterLayout, {\n gap: 1,\n spacing: 0\n });\n var RadarStackLayout = ChartElement.extend({\n reflow: function (sector) {\n var ref = this;\n var reverse = ref.options.reverse;\n var children = ref.children;\n var childrenCount = children.length;\n var first = reverse ? childrenCount - 1 : 0;\n var step = reverse ? -1 : 1;\n this.box = new Box();\n for (var i = first; i >= 0 && i < childrenCount; i += step) {\n var childSector = children[i].sector;\n childSector.startAngle = sector.startAngle;\n childSector.angle = sector.angle;\n }\n }\n });\n var RadarBarChart = BarChart.extend({\n pointType: function () {\n return RadarSegment;\n },\n clusterType: function () {\n return RadarClusterLayout;\n },\n stackType: function () {\n return RadarStackLayout;\n },\n categorySlot: function (categoryAxis, categoryIx) {\n return categoryAxis.getSlot(categoryIx);\n },\n pointSlot: function (categorySlot, valueSlot) {\n var slot = categorySlot.clone();\n var y = categorySlot.center.y;\n slot.radius = y - valueSlot.y1;\n slot.innerRadius = y - valueSlot.y2;\n return slot;\n },\n reflowPoint: function (point, pointSlot) {\n point.sector = pointSlot;\n point.reflow();\n },\n createAnimation: function () {\n this.options.animation.center = this.box.toRect().center();\n BarChart.fn.createAnimation.call(this);\n }\n });\n RadarBarChart.prototype.reflow = CategoricalChart.prototype.reflow;\n setDefaultOptions(RadarBarChart, {\n clip: false,\n limitPoints: false,\n animation: { type: 'pie' }\n });\n var RadarPlotArea = PolarPlotAreaBase.extend({\n createPolarAxis: function () {\n var categoryAxis = new dataviz.RadarCategoryAxis(this.options.categoryAxis, this.chartService);\n this.polarAxis = categoryAxis;\n this.categoryAxis = categoryAxis;\n this.appendAxis(categoryAxis);\n this.aggregateCategories();\n this.createCategoryAxesLabels();\n },\n valueAxisOptions: function (defaults) {\n if (this._hasBarCharts) {\n deepExtend(defaults, {\n majorGridLines: { type: ARC },\n minorGridLines: { type: ARC }\n });\n }\n if (this._isStacked100) {\n deepExtend(defaults, {\n roundToMajorUnit: false,\n labels: { format: 'P0' }\n });\n }\n return deepExtend(defaults, this.options.valueAxis);\n },\n aggregateCategories: function () {\n CategoricalPlotArea.prototype.aggregateCategories.call(this, this.panes);\n },\n createCategoryAxesLabels: function () {\n CategoricalPlotArea.prototype.createCategoryAxesLabels.call(this, this.panes);\n },\n filterSeries: function (currentSeries) {\n return currentSeries;\n },\n createCharts: function () {\n var series = this.filterVisibleSeries(this.series);\n var pane = this.panes[0];\n this.createAreaChart(filterSeriesByType(series, [RADAR_AREA]), pane);\n this.createLineChart(filterSeriesByType(series, [RADAR_LINE]), pane);\n this.createBarChart(filterSeriesByType(series, [RADAR_COLUMN]), pane);\n },\n chartOptions: function (series) {\n var options = { series: series };\n var firstSeries = series[0];\n if (firstSeries) {\n var filteredSeries = this.filterVisibleSeries(series);\n var stack = firstSeries.stack;\n options.isStacked = stack && filteredSeries.length > 1;\n options.isStacked100 = stack && stack.type === '100%' && filteredSeries.length > 1;\n if (options.isStacked100) {\n this._isStacked100 = true;\n }\n }\n return options;\n },\n createAreaChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var areaChart = new RadarAreaChart(this, this.chartOptions(series));\n this.appendChart(areaChart, pane);\n },\n createLineChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var lineChart = new RadarLineChart(this, this.chartOptions(series));\n this.appendChart(lineChart, pane);\n },\n createBarChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var options = this.chartOptions(series);\n options.gap = firstSeries.gap;\n options.spacing = firstSeries.spacing;\n var barChart = new RadarBarChart(this, options);\n this.appendChart(barChart, pane);\n this._hasBarCharts = true;\n },\n seriesCategoryAxis: function () {\n return this.categoryAxis;\n },\n _dispatchEvent: function (chart, e, eventType) {\n var coords = chart._eventCoordinates(e);\n var point = new Point(coords.x, coords.y);\n var category = this.categoryAxis.getCategory(point);\n var value = this.valueAxis.getValue(point);\n if (category !== null && value !== null) {\n chart.trigger(eventType, {\n element: eventElement(e),\n category: category,\n value: value\n });\n }\n },\n createCrosshairs: function () {\n }\n });\n deepExtend(RadarPlotArea.prototype, PlotAreaEventsMixin, {\n appendChart: CategoricalPlotArea.prototype.appendChart,\n aggregateSeries: CategoricalPlotArea.prototype.aggregateSeries,\n seriesSourcePoints: CategoricalPlotArea.prototype.seriesSourcePoints\n });\n setDefaultOptions(RadarPlotArea, {\n categoryAxis: { categories: [] },\n valueAxis: {}\n });\n var FunnelSegment = ChartElement.extend({\n init: function (value, options, segmentOptions) {\n ChartElement.fn.init.call(this, options);\n this.value = value;\n this.options.index = segmentOptions.index;\n },\n reflow: function (chartBox) {\n var points = this.points;\n var label = this.children[0];\n this.box = new Box(points[0].x, points[0].y, points[1].x, points[2].y);\n if (label) {\n label.reflow(new Box(chartBox.x1, points[0].y, chartBox.x2, points[2].y));\n }\n },\n createVisual: function () {\n var this$1 = this;\n var options = this.options;\n var visual;\n ChartElement.fn.createVisual.call(this);\n if (options.visual) {\n visual = options.visual({\n category: this.category,\n dataItem: this.dataItem,\n value: this.value,\n series: this.series,\n percentage: this.percentage,\n points: this.points,\n options: options,\n sender: this.getSender(),\n createVisual: function () {\n return this$1.createPath();\n }\n });\n } else {\n visual = this.createPath();\n }\n if (visual) {\n this.visual.append(visual);\n }\n },\n createPath: function () {\n var options = this.options;\n var border = options.border;\n var path = Path.fromPoints(this.points, {\n fill: {\n color: options.color,\n opacity: options.opacity\n },\n stroke: {\n color: border.color,\n opacity: border.opacity,\n width: border.width\n }\n }).close();\n return path;\n },\n createHighlight: function (style) {\n return Path.fromPoints(this.points, style);\n },\n highlightVisual: function () {\n return this.visual.children[0];\n },\n highlightVisualArgs: function () {\n var path = Path.fromPoints(this.points).close();\n return {\n options: this.options,\n path: path\n };\n },\n tooltipAnchor: function () {\n var box = this.box;\n return {\n point: new Point(box.center().x, box.y1),\n align: {\n horizontal: 'center',\n vertical: 'top'\n }\n };\n },\n formatValue: function (format) {\n var point = this;\n return point.owner.formatPointValue(point, format);\n }\n });\n setDefaultOptions(FunnelSegment, {\n color: WHITE,\n border: { width: 1 }\n });\n deepExtend(FunnelSegment.prototype, PointEventsMixin);\n var FunnelChart = ChartElement.extend({\n init: function (plotArea, options) {\n ChartElement.fn.init.call(this, options);\n this.plotArea = plotArea;\n this.points = [];\n this.labels = [];\n this.legendItems = [];\n this.render();\n },\n formatPointValue: function (point, format) {\n return this.chartService.format.auto(format, point.value);\n },\n render: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var seriesColors = ref.plotArea.options.seriesColors;\n if (seriesColors === void 0) {\n seriesColors = [];\n }\n var series = options.series[0];\n var data = series.data;\n if (!data) {\n return;\n }\n var ref$1 = bindSegments(series);\n var total = ref$1.total;\n var points = ref$1.points;\n for (var i = 0; i < points.length; i++) {\n var pointData = points[i];\n if (!pointData) {\n continue;\n }\n var fields = pointData.fields;\n if (!isFunction(series.color)) {\n series.color = fields.color || seriesColors[i % seriesColors.length];\n }\n fields = deepExtend({\n index: i,\n owner: this$1,\n series: series,\n dataItem: data[i],\n percentage: pointData.value / total\n }, fields, { visible: pointData.visible });\n var value = pointData.valueFields.value;\n var segment = this$1.createSegment(value, fields);\n var label = this$1.createLabel(value, fields);\n if (segment && label) {\n segment.append(label);\n }\n }\n },\n evalSegmentOptions: function (options, value, fields) {\n var series = fields.series;\n evalOptions(options, {\n value: value,\n series: series,\n dataItem: fields.dataItem,\n index: fields.index\n }, {\n defaults: series._defaults,\n excluded: [\n 'data',\n 'content',\n 'template',\n 'toggle',\n 'visual'\n ]\n });\n },\n createSegment: function (value, fields) {\n var seriesOptions = deepExtend({}, fields.series);\n this.evalSegmentOptions(seriesOptions, value, fields);\n this.createLegendItem(value, seriesOptions, fields);\n if (fields.visible !== false) {\n var segment = new FunnelSegment(value, seriesOptions, fields);\n $.extend(segment, fields);\n this.append(segment);\n this.points.push(segment);\n return segment;\n }\n },\n createLabel: function (value, fields) {\n var series = fields.series;\n var dataItem = fields.dataItem;\n var labels = deepExtend({}, this.options.labels, series.labels);\n var text = value;\n if (labels.visible) {\n var labelTemplate = getTemplate(labels);\n var data = {\n dataItem: dataItem,\n value: value,\n percentage: fields.percentage,\n category: fields.category,\n series: series\n };\n if (labelTemplate) {\n text = labelTemplate(data);\n } else if (labels.format) {\n text = this.plotArea.chartService.format.auto(labels.format, text);\n }\n if (!labels.color) {\n var brightnessValue = new Color(series.color).percBrightness();\n if (brightnessValue > 180) {\n labels.color = BLACK;\n } else {\n labels.color = WHITE;\n }\n if (!labels.background) {\n labels.background = series.color;\n }\n }\n this.evalSegmentOptions(labels, value, fields);\n var textBox = new TextBox(text, deepExtend({ vAlign: labels.position }, labels), data);\n this.labels.push(textBox);\n return textBox;\n }\n },\n labelPadding: function () {\n var labels = this.labels;\n var padding = {\n left: 0,\n right: 0\n };\n for (var i = 0; i < labels.length; i++) {\n var label = labels[i];\n var align = label.options.align;\n if (align !== CENTER) {\n var width = labels[i].box.width();\n if (align === LEFT) {\n padding.left = Math.max(padding.left, width);\n } else {\n padding.right = Math.max(padding.right, width);\n }\n }\n }\n return padding;\n },\n dynamicSlopeReflow: function (box, width, totalHeight) {\n var ref = this;\n var options = ref.options;\n var segments = ref.points;\n var count = segments.length;\n var firstSegment = segments[0];\n var maxSegment = firstSegment;\n for (var idx = 0; idx < segments.length; idx++) {\n if (segments[idx].percentage > maxSegment.percentage) {\n maxSegment = segments[idx];\n }\n }\n var lastUpperSide = firstSegment.percentage / maxSegment.percentage * width;\n var previousOffset = (width - lastUpperSide) / 2;\n var previousHeight = 0;\n for (var idx$1 = 0; idx$1 < count; idx$1++) {\n var percentage = segments[idx$1].percentage;\n var nextSegment = segments[idx$1 + 1];\n var nextPercentage = nextSegment ? nextSegment.percentage : percentage;\n var points = segments[idx$1].points = [];\n var height = options.dynamicHeight ? totalHeight * percentage : totalHeight / count;\n var offset = void 0;\n if (!percentage) {\n offset = nextPercentage ? 0 : width / 2;\n } else {\n offset = (width - lastUpperSide * (nextPercentage / percentage)) / 2;\n }\n offset = limitValue(offset, 0, width);\n points.push(new GeometryPoint(box.x1 + previousOffset, box.y1 + previousHeight));\n points.push(new GeometryPoint(box.x1 + width - previousOffset, box.y1 + previousHeight));\n points.push(new GeometryPoint(box.x1 + width - offset, box.y1 + height + previousHeight));\n points.push(new GeometryPoint(box.x1 + offset, box.y1 + height + previousHeight));\n previousOffset = offset;\n previousHeight += height + options.segmentSpacing;\n lastUpperSide = limitValue(width - 2 * offset, 0, width);\n }\n },\n constantSlopeReflow: function (box, width, totalHeight) {\n var ref = this;\n var options = ref.options;\n var segments = ref.points;\n var count = segments.length;\n var decreasingWidth = options.neckRatio <= 1;\n var neckRatio = decreasingWidth ? options.neckRatio * width : width;\n var previousOffset = decreasingWidth ? 0 : (width - width / options.neckRatio) / 2;\n var topMostWidth = decreasingWidth ? width : width - previousOffset * 2;\n var finalNarrow = (topMostWidth - neckRatio) / 2;\n var previousHeight = 0;\n for (var idx = 0; idx < count; idx++) {\n var points = segments[idx].points = [];\n var percentage = segments[idx].percentage;\n var offset = options.dynamicHeight ? finalNarrow * percentage : finalNarrow / count;\n var height = options.dynamicHeight ? totalHeight * percentage : totalHeight / count;\n points.push(new GeometryPoint(box.x1 + previousOffset, box.y1 + previousHeight));\n points.push(new GeometryPoint(box.x1 + width - previousOffset, box.y1 + previousHeight));\n points.push(new GeometryPoint(box.x1 + width - previousOffset - offset, box.y1 + height + previousHeight));\n points.push(new GeometryPoint(box.x1 + previousOffset + offset, box.y1 + height + previousHeight));\n previousOffset += offset;\n previousHeight += height + options.segmentSpacing;\n }\n },\n reflow: function (chartBox) {\n var points = this.points;\n var count = points.length;\n if (!count) {\n return;\n }\n var options = this.options;\n var box = chartBox.clone().unpad(this.labelPadding());\n var totalHeight = box.height() - options.segmentSpacing * (count - 1);\n var width = box.width();\n if (options.dynamicSlope) {\n this.dynamicSlopeReflow(box, width, totalHeight);\n } else {\n this.constantSlopeReflow(box, width, totalHeight);\n }\n for (var idx = 0; idx < count; idx++) {\n points[idx].reflow(chartBox);\n }\n }\n });\n setDefaultOptions(FunnelChart, {\n neckRatio: 0.3,\n width: 300,\n dynamicSlope: false,\n dynamicHeight: true,\n segmentSpacing: 0,\n labels: {\n visible: false,\n align: CENTER,\n position: CENTER,\n zIndex: 1\n }\n });\n deepExtend(FunnelChart.prototype, PieChartMixin);\n var FunnelPlotArea = PlotAreaBase.extend({\n render: function () {\n this.createFunnelChart(this.series);\n },\n createFunnelChart: function (series) {\n var firstSeries = series[0];\n var funnelChart = new FunnelChart(this, {\n series: series,\n legend: this.options.legend,\n neckRatio: firstSeries.neckRatio,\n dynamicHeight: firstSeries.dynamicHeight,\n dynamicSlope: firstSeries.dynamicSlope,\n segmentSpacing: firstSeries.segmentSpacing,\n highlight: firstSeries.highlight\n });\n this.appendChart(funnelChart);\n },\n appendChart: function (chart, pane) {\n PlotAreaBase.fn.appendChart.call(this, chart, pane);\n append(this.options.legend.items, chart.legendItems);\n }\n });\n var COLOR = 'color';\n var FIRST = 'first';\n var FROM = 'from';\n var MAX = 'max';\n var MIN = 'min';\n var NOTE_TEXT = 'noteText';\n var SUMMARY_FIELD = 'summary';\n var TO = 'to';\n PlotAreaFactory.current.register(CategoricalPlotArea, [\n BAR,\n COLUMN,\n LINE,\n VERTICAL_LINE,\n AREA,\n VERTICAL_AREA,\n CANDLESTICK,\n OHLC,\n BULLET,\n VERTICAL_BULLET,\n BOX_PLOT,\n VERTICAL_BOX_PLOT,\n RANGE_COLUMN,\n RANGE_BAR,\n WATERFALL,\n HORIZONTAL_WATERFALL,\n RANGE_AREA,\n VERTICAL_RANGE_AREA\n ]);\n PlotAreaFactory.current.register(XYPlotArea, [\n SCATTER,\n SCATTER_LINE,\n BUBBLE\n ]);\n PlotAreaFactory.current.register(PiePlotArea, [PIE]);\n PlotAreaFactory.current.register(DonutPlotArea, [DONUT]);\n PlotAreaFactory.current.register(FunnelPlotArea, [FUNNEL]);\n PlotAreaFactory.current.register(PolarPlotArea, [\n POLAR_AREA,\n POLAR_LINE,\n POLAR_SCATTER\n ]);\n PlotAreaFactory.current.register(RadarPlotArea, [\n RADAR_AREA,\n RADAR_COLUMN,\n RADAR_LINE\n ]);\n SeriesBinder.current.register([\n BAR,\n COLUMN,\n LINE,\n VERTICAL_LINE,\n AREA,\n VERTICAL_AREA\n ], [VALUE], [\n CATEGORY,\n COLOR,\n NOTE_TEXT,\n ERROR_LOW_FIELD,\n ERROR_HIGH_FIELD\n ]);\n SeriesBinder.current.register([\n RANGE_COLUMN,\n RANGE_BAR,\n RANGE_AREA,\n VERTICAL_RANGE_AREA\n ], [\n FROM,\n TO\n ], [\n CATEGORY,\n COLOR,\n NOTE_TEXT\n ]);\n SeriesBinder.current.register([\n WATERFALL,\n HORIZONTAL_WATERFALL\n ], [VALUE], [\n CATEGORY,\n COLOR,\n NOTE_TEXT,\n SUMMARY_FIELD\n ]);\n SeriesBinder.current.register([\n POLAR_AREA,\n POLAR_LINE,\n POLAR_SCATTER\n ], [\n X,\n Y\n ], [COLOR]);\n SeriesBinder.current.register([\n RADAR_AREA,\n RADAR_COLUMN,\n RADAR_LINE\n ], [VALUE], [COLOR]);\n SeriesBinder.current.register([FUNNEL], [VALUE], [\n CATEGORY,\n COLOR,\n 'visibleInLegend',\n 'visible'\n ]);\n DefaultAggregates.current.register([\n BAR,\n COLUMN,\n LINE,\n VERTICAL_LINE,\n AREA,\n VERTICAL_AREA,\n WATERFALL,\n HORIZONTAL_WATERFALL\n ], {\n value: MAX,\n color: FIRST,\n noteText: FIRST,\n errorLow: MIN,\n errorHigh: MAX\n });\n DefaultAggregates.current.register([\n RANGE_COLUMN,\n RANGE_BAR,\n RANGE_AREA,\n VERTICAL_RANGE_AREA\n ], {\n from: MIN,\n to: MAX,\n color: FIRST,\n noteText: FIRST\n });\n DefaultAggregates.current.register([\n RADAR_AREA,\n RADAR_COLUMN,\n RADAR_LINE\n ], {\n value: MAX,\n color: FIRST\n });\n SeriesBinder.current.register([\n SCATTER,\n SCATTER_LINE,\n BUBBLE\n ], [\n X,\n Y\n ], [\n COLOR,\n NOTE_TEXT,\n X_ERROR_LOW_FIELD,\n X_ERROR_HIGH_FIELD,\n Y_ERROR_LOW_FIELD,\n Y_ERROR_HIGH_FIELD\n ]);\n SeriesBinder.current.register([BUBBLE], [\n X,\n Y,\n 'size'\n ], [\n COLOR,\n CATEGORY,\n NOTE_TEXT\n ]);\n SeriesBinder.current.register([\n CANDLESTICK,\n OHLC\n ], [\n 'open',\n 'high',\n 'low',\n 'close'\n ], [\n CATEGORY,\n COLOR,\n 'downColor',\n NOTE_TEXT\n ]);\n DefaultAggregates.current.register([\n CANDLESTICK,\n OHLC\n ], {\n open: MAX,\n high: MAX,\n low: MIN,\n close: MAX,\n color: FIRST,\n downColor: FIRST,\n noteText: FIRST\n });\n SeriesBinder.current.register([\n BOX_PLOT,\n VERTICAL_BOX_PLOT\n ], [\n 'lower',\n 'q1',\n 'median',\n 'q3',\n 'upper',\n 'mean',\n 'outliers'\n ], [\n CATEGORY,\n COLOR,\n NOTE_TEXT\n ]);\n DefaultAggregates.current.register([\n BOX_PLOT,\n VERTICAL_BOX_PLOT\n ], {\n lower: MAX,\n q1: MAX,\n median: MAX,\n q3: MAX,\n upper: MAX,\n mean: MAX,\n outliers: FIRST,\n color: FIRST,\n noteText: FIRST\n });\n SeriesBinder.current.register([\n BULLET,\n VERTICAL_BULLET\n ], [\n 'current',\n 'target'\n ], [\n CATEGORY,\n COLOR,\n 'visibleInLegend',\n NOTE_TEXT\n ]);\n DefaultAggregates.current.register([\n BULLET,\n VERTICAL_BULLET\n ], {\n current: MAX,\n target: MAX,\n color: FIRST,\n noteText: FIRST\n });\n SeriesBinder.current.register([\n PIE,\n DONUT\n ], [VALUE], [\n CATEGORY,\n COLOR,\n 'explode',\n 'visibleInLegend',\n 'visible'\n ]);\n var AXIS_NAMES = [\n CATEGORY,\n VALUE,\n X,\n Y\n ];\n var MOUSEMOVE = 'mousemove';\n var CONTEXTMENU = 'contextmenu';\n var MOUSELEAVE = 'mouseleave';\n var MOUSEMOVE_DELAY = 20;\n var Chart = Class.extend({\n init: function (element, userOptions, themeOptions, context) {\n var this$1 = this;\n if (context === void 0) {\n context = {};\n }\n this.observers = [];\n this.addObserver(context.observer);\n this.chartService = new services.ChartService(this, context);\n this.chartService.theme = themeOptions;\n this._initElement(element);\n var options = deepExtend({}, this.options, userOptions);\n this._originalOptions = deepExtend({}, options);\n this._theme = themeOptions;\n this._initTheme(options, themeOptions);\n this._initHandlers();\n this._initSurface();\n this.bindCategories();\n dataviz.FontLoader.preloadFonts(userOptions, function () {\n 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 _toggleDomDrag: function () {\n if (!this.domEvents || !this.domEvents.toggleDrag) {\n return;\n }\n var pannable = this.options.pannable;\n var zoomable = this.options.zoomable;\n var selection = (zoomable || {}).selection;\n if (!pannable && (zoomable === false || selection === false) && !this.requiresHandlers([\n DRAG_START,\n DRAG,\n DRAG_END\n ])) {\n this.domEvents.toggleDrag(false);\n } else {\n this.domEvents.toggleDrag(true);\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 _toggleDomZoom: function () {\n if (!this.domEvents || !this.domEvents.toggleZoom) {\n return;\n }\n var zoomable = this.options.zoomable;\n var mousewheel = (zoomable || {}).mousewheel;\n if ((zoomable === false || mousewheel === false) && !this.requiresHandlers([\n ZOOM_START,\n ZOOM,\n ZOOM_END\n ])) {\n this.domEvents.toggleZoom(false);\n } else {\n this.domEvents.toggleZoom(true);\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 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._toggleDomDrag();\n this._toggleDomZoom();\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 },\n setOptions: function (options, theme) {\n this.applyOptions(options, theme);\n this.bindCategories();\n this.redraw();\n this.updateMouseMoveHandler();\n this._toggleDomDrag();\n this._toggleDomZoom();\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 }\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 this._redraw();\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}, 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.elements.children[0];\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 var pointer = 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 });\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 }, versionsCodewordsInformation = [\n {\n L: {\n groups: [[\n 1,\n 19\n ]],\n totalDataCodewords: 19,\n errorCodewordsPerBlock: 7\n },\n M: {\n groups: [[\n 1,\n 16\n ]],\n totalDataCodewords: 16,\n errorCodewordsPerBlock: 10\n },\n Q: {\n groups: [[\n 1,\n 13\n ]],\n totalDataCodewords: 13,\n errorCodewordsPerBlock: 13\n },\n H: {\n groups: [[\n 1,\n 9\n ]],\n totalDataCodewords: 9,\n errorCodewordsPerBlock: 17\n }\n },\n {\n L: {\n groups: [[\n 1,\n 34\n ]],\n totalDataCodewords: 34,\n errorCodewordsPerBlock: 10\n },\n M: {\n groups: [[\n 1,\n 28\n ]],\n totalDataCodewords: 28,\n errorCodewordsPerBlock: 16\n },\n Q: {\n groups: [[\n 1,\n 22\n ]],\n totalDataCodewords: 22,\n errorCodewordsPerBlock: 22\n },\n H: {\n groups: [[\n 1,\n 16\n ]],\n totalDataCodewords: 16,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [[\n 1,\n 55\n ]],\n totalDataCodewords: 55,\n errorCodewordsPerBlock: 15\n },\n M: {\n groups: [[\n 1,\n 44\n ]],\n totalDataCodewords: 44,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [[\n 2,\n 17\n ]],\n totalDataCodewords: 34,\n errorCodewordsPerBlock: 18\n },\n H: {\n groups: [[\n 2,\n 13\n ]],\n totalDataCodewords: 26,\n errorCodewordsPerBlock: 22\n }\n },\n {\n L: {\n groups: [[\n 1,\n 80\n ]],\n totalDataCodewords: 80,\n errorCodewordsPerBlock: 20\n },\n M: {\n groups: [[\n 2,\n 32\n ]],\n totalDataCodewords: 64,\n errorCodewordsPerBlock: 18\n },\n Q: {\n groups: [[\n 2,\n 24\n ]],\n totalDataCodewords: 48,\n errorCodewordsPerBlock: 26\n },\n H: {\n groups: [[\n 4,\n 9\n ]],\n totalDataCodewords: 36,\n errorCodewordsPerBlock: 16\n }\n },\n {\n L: {\n groups: [[\n 1,\n 108\n ]],\n totalDataCodewords: 108,\n errorCodewordsPerBlock: 26\n },\n M: {\n groups: [[\n 2,\n 43\n ]],\n totalDataCodewords: 86,\n errorCodewordsPerBlock: 24\n },\n Q: {\n groups: [\n [\n 2,\n 15\n ],\n [\n 2,\n 16\n ]\n ],\n totalDataCodewords: 62,\n errorCodewordsPerBlock: 18\n },\n H: {\n groups: [\n [\n 2,\n 11\n ],\n [\n 2,\n 12\n ]\n ],\n totalDataCodewords: 46,\n errorCodewordsPerBlock: 22\n }\n },\n {\n L: {\n groups: [[\n 2,\n 68\n ]],\n totalDataCodewords: 136,\n errorCodewordsPerBlock: 18\n },\n M: {\n groups: [[\n 4,\n 27\n ]],\n totalDataCodewords: 108,\n errorCodewordsPerBlock: 16\n },\n Q: {\n groups: [[\n 4,\n 19\n ]],\n totalDataCodewords: 76,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [[\n 4,\n 15\n ]],\n totalDataCodewords: 60,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [[\n 2,\n 78\n ]],\n totalDataCodewords: 156,\n errorCodewordsPerBlock: 20\n },\n M: {\n groups: [[\n 4,\n 31\n ]],\n totalDataCodewords: 124,\n errorCodewordsPerBlock: 18\n },\n Q: {\n groups: [\n [\n 2,\n 14\n ],\n [\n 4,\n 15\n ]\n ],\n totalDataCodewords: 88,\n errorCodewordsPerBlock: 18\n },\n H: {\n groups: [\n [\n 4,\n 13\n ],\n [\n 1,\n 14\n ]\n ],\n totalDataCodewords: 66,\n errorCodewordsPerBlock: 26\n }\n },\n {\n L: {\n groups: [[\n 2,\n 97\n ]],\n totalDataCodewords: 194,\n errorCodewordsPerBlock: 24\n },\n M: {\n groups: [\n [\n 2,\n 38\n ],\n [\n 2,\n 39\n ]\n ],\n totalDataCodewords: 154,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [\n 4,\n 18\n ],\n [\n 2,\n 19\n ]\n ],\n totalDataCodewords: 110,\n errorCodewordsPerBlock: 22\n },\n H: {\n groups: [\n [\n 4,\n 14\n ],\n [\n 2,\n 15\n ]\n ],\n totalDataCodewords: 86,\n errorCodewordsPerBlock: 26\n }\n },\n {\n L: {\n groups: [[\n 2,\n 116\n ]],\n totalDataCodewords: 232,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 3,\n 36\n ],\n [\n 2,\n 37\n ]\n ],\n totalDataCodewords: 182,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [\n 4,\n 16\n ],\n [\n 4,\n 17\n ]\n ],\n totalDataCodewords: 132,\n errorCodewordsPerBlock: 20\n },\n H: {\n groups: [\n [\n 4,\n 12\n ],\n [\n 4,\n 13\n ]\n ],\n totalDataCodewords: 100,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 2,\n 68\n ],\n [\n 2,\n 69\n ]\n ],\n totalDataCodewords: 274,\n errorCodewordsPerBlock: 18\n },\n M: {\n groups: [\n [\n 4,\n 43\n ],\n [\n 1,\n 44\n ]\n ],\n totalDataCodewords: 216,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 6,\n 19\n ],\n [\n 2,\n 20\n ]\n ],\n totalDataCodewords: 154,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [\n [\n 6,\n 15\n ],\n [\n 2,\n 16\n ]\n ],\n totalDataCodewords: 122,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [[\n 4,\n 81\n ]],\n totalDataCodewords: 324,\n errorCodewordsPerBlock: 20\n },\n M: {\n groups: [\n [\n 1,\n 50\n ],\n [\n 4,\n 51\n ]\n ],\n totalDataCodewords: 254,\n errorCodewordsPerBlock: 30\n },\n Q: {\n groups: [\n [\n 4,\n 22\n ],\n [\n 4,\n 23\n ]\n ],\n totalDataCodewords: 180,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 3,\n 12\n ],\n [\n 8,\n 13\n ]\n ],\n totalDataCodewords: 140,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 2,\n 92\n ],\n [\n 2,\n 93\n ]\n ],\n totalDataCodewords: 370,\n errorCodewordsPerBlock: 24\n },\n M: {\n groups: [\n [\n 6,\n 36\n ],\n [\n 2,\n 37\n ]\n ],\n totalDataCodewords: 290,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [\n 4,\n 20\n ],\n [\n 6,\n 21\n ]\n ],\n totalDataCodewords: 206,\n errorCodewordsPerBlock: 26\n },\n H: {\n groups: [\n [\n 7,\n 14\n ],\n [\n 4,\n 15\n ]\n ],\n totalDataCodewords: 158,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [[\n 4,\n 107\n ]],\n totalDataCodewords: 428,\n errorCodewordsPerBlock: 26\n },\n M: {\n groups: [\n [\n 8,\n 37\n ],\n [\n 1,\n 38\n ]\n ],\n totalDataCodewords: 334,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [\n 8,\n 20\n ],\n [\n 4,\n 21\n ]\n ],\n totalDataCodewords: 244,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [\n [\n 12,\n 11\n ],\n [\n 4,\n 12\n ]\n ],\n totalDataCodewords: 180,\n errorCodewordsPerBlock: 22\n }\n },\n {\n L: {\n groups: [\n [\n 3,\n 115\n ],\n [\n 1,\n 116\n ]\n ],\n totalDataCodewords: 461,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 4,\n 40\n ],\n [\n 5,\n 41\n ]\n ],\n totalDataCodewords: 365,\n errorCodewordsPerBlock: 24\n },\n Q: {\n groups: [\n [\n 11,\n 16\n ],\n [\n 5,\n 17\n ]\n ],\n totalDataCodewords: 261,\n errorCodewordsPerBlock: 20\n },\n H: {\n groups: [\n [\n 11,\n 12\n ],\n [\n 5,\n 13\n ]\n ],\n totalDataCodewords: 197,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 5,\n 87\n ],\n [\n 1,\n 88\n ]\n ],\n totalDataCodewords: 523,\n errorCodewordsPerBlock: 22\n },\n M: {\n groups: [\n [\n 5,\n 41\n ],\n [\n 5,\n 42\n ]\n ],\n totalDataCodewords: 415,\n errorCodewordsPerBlock: 24\n },\n Q: {\n groups: [\n [\n 5,\n 24\n ],\n [\n 7,\n 25\n ]\n ],\n totalDataCodewords: 295,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 11,\n 12\n ],\n [\n 7,\n 13\n ]\n ],\n totalDataCodewords: 223,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 5,\n 98\n ],\n [\n 1,\n 99\n ]\n ],\n totalDataCodewords: 589,\n errorCodewordsPerBlock: 24\n },\n M: {\n groups: [\n [\n 7,\n 45\n ],\n [\n 3,\n 46\n ]\n ],\n totalDataCodewords: 453,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 15,\n 19\n ],\n [\n 2,\n 20\n ]\n ],\n totalDataCodewords: 325,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [\n [\n 3,\n 15\n ],\n [\n 13,\n 16\n ]\n ],\n totalDataCodewords: 253,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 1,\n 107\n ],\n [\n 5,\n 108\n ]\n ],\n totalDataCodewords: 647,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [\n 10,\n 46\n ],\n [\n 1,\n 47\n ]\n ],\n totalDataCodewords: 507,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 1,\n 22\n ],\n [\n 15,\n 23\n ]\n ],\n totalDataCodewords: 367,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 2,\n 14\n ],\n [\n 17,\n 15\n ]\n ],\n totalDataCodewords: 283,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [\n [\n 5,\n 120\n ],\n [\n 1,\n 121\n ]\n ],\n totalDataCodewords: 721,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 9,\n 43\n ],\n [\n 4,\n 44\n ]\n ],\n totalDataCodewords: 563,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 17,\n 22\n ],\n [\n 1,\n 23\n ]\n ],\n totalDataCodewords: 397,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 2,\n 14\n ],\n [\n 19,\n 15\n ]\n ],\n totalDataCodewords: 313,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [\n [\n 3,\n 113\n ],\n [\n 4,\n 114\n ]\n ],\n totalDataCodewords: 795,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [\n 3,\n 44\n ],\n [\n 11,\n 45\n ]\n ],\n totalDataCodewords: 627,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 17,\n 21\n ],\n [\n 4,\n 22\n ]\n ],\n totalDataCodewords: 445,\n errorCodewordsPerBlock: 26\n },\n H: {\n groups: [\n [\n 9,\n 13\n ],\n [\n 16,\n 14\n ]\n ],\n totalDataCodewords: 341,\n errorCodewordsPerBlock: 26\n }\n },\n {\n L: {\n groups: [\n [\n 3,\n 107\n ],\n [\n 5,\n 108\n ]\n ],\n totalDataCodewords: 861,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [\n 3,\n 41\n ],\n [\n 13,\n 42\n ]\n ],\n totalDataCodewords: 669,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 15,\n 24\n ],\n [\n 5,\n 25\n ]\n ],\n totalDataCodewords: 485,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 15,\n 15\n ],\n [\n 10,\n 16\n ]\n ],\n totalDataCodewords: 385,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [\n [\n 4,\n 116\n ],\n [\n 4,\n 117\n ]\n ],\n totalDataCodewords: 932,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [[\n 17,\n 42\n ]],\n totalDataCodewords: 714,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 17,\n 22\n ],\n [\n 6,\n 23\n ]\n ],\n totalDataCodewords: 512,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 19,\n 16\n ],\n [\n 6,\n 17\n ]\n ],\n totalDataCodewords: 406,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 2,\n 111\n ],\n [\n 7,\n 112\n ]\n ],\n totalDataCodewords: 1006,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [[\n 17,\n 46\n ]],\n totalDataCodewords: 782,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 7,\n 24\n ],\n [\n 16,\n 25\n ]\n ],\n totalDataCodewords: 568,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [[\n 34,\n 13\n ]],\n totalDataCodewords: 442,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 4,\n 121\n ],\n [\n 5,\n 122\n ]\n ],\n totalDataCodewords: 1094,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 4,\n 47\n ],\n [\n 14,\n 48\n ]\n ],\n totalDataCodewords: 860,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 11,\n 24\n ],\n [\n 14,\n 25\n ]\n ],\n totalDataCodewords: 614,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 16,\n 15\n ],\n [\n 14,\n 16\n ]\n ],\n totalDataCodewords: 464,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 6,\n 117\n ],\n [\n 4,\n 118\n ]\n ],\n totalDataCodewords: 1174,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 6,\n 45\n ],\n [\n 14,\n 46\n ]\n ],\n totalDataCodewords: 914,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 11,\n 24\n ],\n [\n 16,\n 25\n ]\n ],\n totalDataCodewords: 664,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 30,\n 16\n ],\n [\n 2,\n 17\n ]\n ],\n totalDataCodewords: 514,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 8,\n 106\n ],\n [\n 4,\n 107\n ]\n ],\n totalDataCodewords: 1276,\n errorCodewordsPerBlock: 26\n },\n M: {\n groups: [\n [\n 8,\n 47\n ],\n [\n 13,\n 48\n ]\n ],\n totalDataCodewords: 1000,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 7,\n 24\n ],\n [\n 22,\n 25\n ]\n ],\n totalDataCodewords: 718,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 22,\n 15\n ],\n [\n 13,\n 16\n ]\n ],\n totalDataCodewords: 538,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 10,\n 114\n ],\n [\n 2,\n 115\n ]\n ],\n totalDataCodewords: 1370,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [\n 19,\n 46\n ],\n [\n 4,\n 47\n ]\n ],\n totalDataCodewords: 1062,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 28,\n 22\n ],\n [\n 6,\n 23\n ]\n ],\n totalDataCodewords: 754,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 33,\n 16\n ],\n [\n 4,\n 17\n ]\n ],\n totalDataCodewords: 596,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 8,\n 122\n ],\n [\n 4,\n 123\n ]\n ],\n totalDataCodewords: 1468,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 22,\n 45\n ],\n [\n 3,\n 46\n ]\n ],\n totalDataCodewords: 1128,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 8,\n 23\n ],\n [\n 26,\n 24\n ]\n ],\n totalDataCodewords: 808,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 12,\n 15\n ],\n [\n 28,\n 16\n ]\n ],\n totalDataCodewords: 628,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 3,\n 117\n ],\n [\n 10,\n 118\n ]\n ],\n totalDataCodewords: 1531,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 3,\n 45\n ],\n [\n 23,\n 46\n ]\n ],\n totalDataCodewords: 1193,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 4,\n 24\n ],\n [\n 31,\n 25\n ]\n ],\n totalDataCodewords: 871,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 11,\n 15\n ],\n [\n 31,\n 16\n ]\n ],\n totalDataCodewords: 661,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 7,\n 116\n ],\n [\n 7,\n 117\n ]\n ],\n totalDataCodewords: 1631,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 21,\n 45\n ],\n [\n 7,\n 46\n ]\n ],\n totalDataCodewords: 1267,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 1,\n 23\n ],\n [\n 37,\n 24\n ]\n ],\n totalDataCodewords: 911,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 19,\n 15\n ],\n [\n 26,\n 16\n ]\n ],\n totalDataCodewords: 701,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 5,\n 115\n ],\n [\n 10,\n 116\n ]\n ],\n totalDataCodewords: 1735,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 19,\n 47\n ],\n [\n 10,\n 48\n ]\n ],\n totalDataCodewords: 1373,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 15,\n 24\n ],\n [\n 25,\n 25\n ]\n ],\n totalDataCodewords: 985,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 23,\n 15\n ],\n [\n 25,\n 16\n ]\n ],\n totalDataCodewords: 745,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 13,\n 115\n ],\n [\n 3,\n 116\n ]\n ],\n totalDataCodewords: 1843,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 2,\n 46\n ],\n [\n 29,\n 47\n ]\n ],\n totalDataCodewords: 1455,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 42,\n 24\n ],\n [\n 1,\n 25\n ]\n ],\n totalDataCodewords: 1033,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 23,\n 15\n ],\n [\n 28,\n 16\n ]\n ],\n totalDataCodewords: 793,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [[\n 17,\n 115\n ]],\n totalDataCodewords: 1955,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 10,\n 46\n ],\n [\n 23,\n 47\n ]\n ],\n totalDataCodewords: 1541,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 10,\n 24\n ],\n [\n 35,\n 25\n ]\n ],\n totalDataCodewords: 1115,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 19,\n 15\n ],\n [\n 35,\n 16\n ]\n ],\n totalDataCodewords: 845,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 17,\n 115\n ],\n [\n 1,\n 116\n ]\n ],\n totalDataCodewords: 2071,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 14,\n 46\n ],\n [\n 21,\n 47\n ]\n ],\n totalDataCodewords: 1631,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 29,\n 24\n ],\n [\n 19,\n 25\n ]\n ],\n totalDataCodewords: 1171,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 11,\n 15\n ],\n [\n 46,\n 16\n ]\n ],\n totalDataCodewords: 901,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 13,\n 115\n ],\n [\n 6,\n 116\n ]\n ],\n totalDataCodewords: 2191,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 14,\n 46\n ],\n [\n 23,\n 47\n ]\n ],\n totalDataCodewords: 1725,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 44,\n 24\n ],\n [\n 7,\n 25\n ]\n ],\n totalDataCodewords: 1231,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 59,\n 16\n ],\n [\n 1,\n 17\n ]\n ],\n totalDataCodewords: 961,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 12,\n 121\n ],\n [\n 7,\n 122\n ]\n ],\n totalDataCodewords: 2306,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 12,\n 47\n ],\n [\n 26,\n 48\n ]\n ],\n totalDataCodewords: 1812,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 39,\n 24\n ],\n [\n 14,\n 25\n ]\n ],\n totalDataCodewords: 1286,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 22,\n 15\n ],\n [\n 41,\n 16\n ]\n ],\n totalDataCodewords: 986,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 6,\n 121\n ],\n [\n 14,\n 122\n ]\n ],\n totalDataCodewords: 2434,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 6,\n 47\n ],\n [\n 34,\n 48\n ]\n ],\n totalDataCodewords: 1914,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 46,\n 24\n ],\n [\n 10,\n 25\n ]\n ],\n totalDataCodewords: 1354,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 2,\n 15\n ],\n [\n 64,\n 16\n ]\n ],\n totalDataCodewords: 1054,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 17,\n 122\n ],\n [\n 4,\n 123\n ]\n ],\n totalDataCodewords: 2566,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 29,\n 46\n ],\n [\n 14,\n 47\n ]\n ],\n totalDataCodewords: 1992,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 49,\n 24\n ],\n [\n 10,\n 25\n ]\n ],\n totalDataCodewords: 1426,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 24,\n 15\n ],\n [\n 46,\n 16\n ]\n ],\n totalDataCodewords: 1096,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 4,\n 122\n ],\n [\n 18,\n 123\n ]\n ],\n totalDataCodewords: 2702,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 13,\n 46\n ],\n [\n 32,\n 47\n ]\n ],\n totalDataCodewords: 2102,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 48,\n 24\n ],\n [\n 14,\n 25\n ]\n ],\n totalDataCodewords: 1502,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 42,\n 15\n ],\n [\n 32,\n 16\n ]\n ],\n totalDataCodewords: 1142,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 20,\n 117\n ],\n [\n 4,\n 118\n ]\n ],\n totalDataCodewords: 2812,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 40,\n 47\n ],\n [\n 7,\n 48\n ]\n ],\n totalDataCodewords: 2216,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 43,\n 24\n ],\n [\n 22,\n 25\n ]\n ],\n totalDataCodewords: 1582,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 10,\n 15\n ],\n [\n 67,\n 16\n ]\n ],\n totalDataCodewords: 1222,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 19,\n 118\n ],\n [\n 6,\n 119\n ]\n ],\n totalDataCodewords: 2956,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 18,\n 47\n ],\n [\n 31,\n 48\n ]\n ],\n totalDataCodewords: 2334,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 34,\n 24\n ],\n [\n 34,\n 25\n ]\n ],\n totalDataCodewords: 1666,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 20,\n 15\n ],\n [\n 61,\n 16\n ]\n ],\n totalDataCodewords: 1276,\n errorCodewordsPerBlock: 30\n }\n }\n ], finderPattern = [\n 1,\n 0,\n 1,\n 1,\n 1\n ], alignmentPattern = [\n 1,\n 0,\n 1\n ], errorCorrectionPatterns = {\n L: '01',\n M: '00',\n Q: '11',\n H: '10'\n }, formatMaskPattern = '101010000010010', formatGeneratorPolynomial = '10100110111', versionGeneratorPolynomial = '1111100100101', paddingCodewords = [\n '11101100',\n '00010001'\n ], finderPatternValue = 93, maskPatternConditions = [\n function (row, column) {\n return (row + column) % 2 === 0;\n },\n function (row) {\n return row % 2 === 0;\n },\n function (row, column) {\n return column % 3 === 0;\n },\n function (row, column) {\n return (row + column) % 3 === 0;\n },\n function (row, column) {\n return (Math.floor(row / 2) + Math.floor(column / 3)) % 2 === 0;\n },\n function (row, column) {\n return row * column % 2 + row * column % 3 === 0;\n },\n function (row, column) {\n return (row * column % 2 + row * column % 3) % 2 === 0;\n },\n function (row, column) {\n return ((row + column) % 2 + row * column % 3) % 2 === 0;\n }\n ], numberRegex = /^\\d+/, alphaPattern = 'A-Z0-9 $%*+./:-', alphaExclusiveSet = 'A-Z $%*+./:-', alphaRegex = new RegExp('^[' + alphaExclusiveSet + ']+'), alphaNumericRegex = new RegExp('^[' + alphaPattern + ']+'), byteRegex = new RegExp('^[^' + alphaPattern + ']+'), initMinNumericBeforeAlpha = 8, initMinNumericBeforeByte = 5, initMinAlphaBeforeByte = 8, minNumericBeforeAlpha = 17, minNumericBeforeByte = 9, minAlphaBeforeByte = 16, round = Math.round;\n function toDecimal(value) {\n return parseInt(value, 2);\n }\n function toBitsString(value, length) {\n var result = Number(value).toString(2);\n if (result.length < length) {\n result = new Array(length - result.length + 1).join(0) + result;\n }\n return result;\n }\n function splitInto(str, n) {\n var result = [], idx = 0;\n while (idx < str.length) {\n result.push(str.substring(idx, idx + n));\n idx += n;\n }\n return result;\n }\n var QRDataMode = kendo.Class.extend({\n getVersionIndex: function (version) {\n if (version < 10) {\n return 0;\n } else if (version > 26) {\n return 2;\n }\n return 1;\n },\n getBitsCharacterCount: function (version) {\n var mode = this;\n return mode.bitsInCharacterCount[mode.getVersionIndex(version || 40)];\n },\n getModeCountString: function (length, version) {\n var mode = this;\n return mode.modeIndicator + toBitsString(length, mode.getBitsCharacterCount(version));\n },\n encode: function () {\n },\n getStringBitsLength: function () {\n },\n getValue: function () {\n },\n modeIndicator: '',\n bitsInCharacterCount: []\n });\n var modes = {};\n modes[NUMERIC] = QRDataMode.extend({\n bitsInCharacterCount: [\n 10,\n 12,\n 14\n ],\n modeIndicator: '0001',\n getValue: function (character) {\n return parseInt(character, 10);\n },\n encode: function (str, version) {\n var mode = this, parts = splitInto(str, 3), result = mode.getModeCountString(str.length, version);\n for (var i = 0; i < parts.length - 1; i++) {\n result += toBitsString(parts[i], 10);\n }\n return result + toBitsString(parts[i], 1 + 3 * parts[i].length);\n },\n getStringBitsLength: function (inputLength, version) {\n var mod3 = inputLength % 3;\n return 4 + this.getBitsCharacterCount(version) + 10 * Math.floor(inputLength / 3) + 3 * mod3 + (mod3 === 0 ? 0 : 1);\n }\n });\n modes[ALPHA_NUMERIC] = QRDataMode.extend({\n characters: {\n '0': 0,\n '1': 1,\n '2': 2,\n '3': 3,\n '4': 4,\n '5': 5,\n '6': 6,\n '7': 7,\n '8': 8,\n '9': 9,\n 'A': 10,\n 'B': 11,\n 'C': 12,\n 'D': 13,\n 'E': 14,\n 'F': 15,\n 'G': 16,\n 'H': 17,\n 'I': 18,\n 'J': 19,\n 'K': 20,\n 'L': 21,\n 'M': 22,\n 'N': 23,\n 'O': 24,\n 'P': 25,\n 'Q': 26,\n 'R': 27,\n 'S': 28,\n 'T': 29,\n 'U': 30,\n 'V': 31,\n 'W': 32,\n 'X': 33,\n 'Y': 34,\n 'Z': 35,\n ' ': 36,\n '$': 37,\n '%': 38,\n '*': 39,\n '+': 40,\n '-': 41,\n '.': 42,\n '/': 43,\n ':': 44\n },\n bitsInCharacterCount: [\n 9,\n 11,\n 13\n ],\n modeIndicator: '0010',\n getValue: function (character) {\n return this.characters[character];\n },\n encode: function (str, version) {\n var mode = this, parts = splitInto(str, 2), result = mode.getModeCountString(str.length, version), value;\n for (var i = 0; i < parts.length - 1; i++) {\n value = 45 * mode.getValue(parts[i].charAt(0)) + mode.getValue(parts[i].charAt(1));\n result += toBitsString(value, 11);\n }\n value = parts[i].length == 2 ? 45 * mode.getValue(parts[i].charAt(0)) + mode.getValue(parts[i].charAt(1)) : mode.getValue(parts[i].charAt(0));\n return result + toBitsString(value, 1 + 5 * parts[i].length);\n },\n getStringBitsLength: function (inputLength, version) {\n return 4 + this.getBitsCharacterCount(version) + 11 * Math.floor(inputLength / 2) + 6 * (inputLength % 2);\n }\n });\n modes[BYTE] = QRDataMode.extend({\n bitsInCharacterCount: [\n 8,\n 16,\n 16\n ],\n modeIndicator: '0100',\n getValue: function (character) {\n var code = character.charCodeAt(0);\n if (code <= 127 || 160 <= code && code <= 255) {\n return code;\n } else {\n throw new Error('Unsupported character: ' + character);\n }\n },\n encode: function (str, version) {\n var mode = this, result = mode.getModeCountString(str.length, version);\n for (var i = 0; i < str.length; i++) {\n result += toBitsString(mode.getValue(str.charAt(i)), 8);\n }\n return result;\n },\n getStringBitsLength: function (inputLength, version) {\n return 4 + this.getBitsCharacterCount(version) + 8 * inputLength;\n }\n });\n var modeInstances = {};\n for (var mode in modes) {\n modeInstances[mode] = new modes[mode]();\n }\n var FreeCellVisitor = function (matrix) {\n var that = this, row = matrix.length - 1, column = matrix.length - 1, startColumn = column, dir = -1, c = 0;\n that.move = function () {\n row += dir * c;\n c ^= 1;\n column = startColumn - c;\n };\n that.getNextCell = function () {\n while (matrix[row][column] !== undefined) {\n that.move();\n if (row < 0 || row >= matrix.length) {\n dir = -dir;\n startColumn -= startColumn != 8 ? 2 : 3;\n column = startColumn;\n row = dir < 0 ? matrix.length - 1 : 0;\n }\n }\n return {\n row: row,\n column: column\n };\n };\n that.getNextRemainderCell = function () {\n that.move();\n if (matrix[row][column] === undefined) {\n return {\n row: row,\n column: column\n };\n }\n };\n };\n function fillFunctionCell(matrices, bit, x, y) {\n for (var i = 0; i < matrices.length; i++) {\n matrices[i][x][y] = bit;\n }\n }\n function fillDataCell(matrices, bit, x, y) {\n for (var i = 0; i < maskPatternConditions.length; i++) {\n matrices[i][x][y] = maskPatternConditions[i](x, y) ? bit ^ 1 : parseInt(bit, 10);\n }\n }\n var fillData = function (matrices, blocks) {\n var cellVisitor = new FreeCellVisitor(matrices[0]), block, codewordIdx, cell;\n for (var blockIdx = 0; blockIdx < blocks.length; blockIdx++) {\n block = blocks[blockIdx];\n codewordIdx = 0;\n while (block.length > 0) {\n for (var i = 0; i < block.length; i++) {\n for (var j = 0; j < 8; j++) {\n cell = cellVisitor.getNextCell();\n fillDataCell(matrices, block[i][codewordIdx].charAt(j), cell.row, cell.column);\n }\n }\n codewordIdx++;\n while (block[0] && codewordIdx == block[0].length) {\n block.splice(0, 1);\n }\n }\n }\n while (cell = cellVisitor.getNextRemainderCell()) {\n fillDataCell(matrices, 0, cell.row, cell.column);\n }\n };\n var padDataString = function (dataString, totalDataCodewords) {\n var dataBitsCount = totalDataCodewords * 8, terminatorIndex = 0, paddingCodewordIndex = 0;\n while (dataString.length < dataBitsCount && terminatorIndex < terminator.length) {\n dataString += terminator.charAt(terminatorIndex++);\n }\n if (dataString.length % 8 !== 0) {\n dataString += new Array(9 - dataString.length % 8).join('0');\n }\n while (dataString.length < dataBitsCount) {\n dataString += paddingCodewords[paddingCodewordIndex];\n paddingCodewordIndex ^= 1;\n }\n return dataString;\n };\n function generatePowersOfTwo() {\n var result;\n for (var power = 1; power < 255; power++) {\n result = powersOfTwoResult[power - 1] * 2;\n if (result > 255) {\n result = result ^ 285;\n }\n powersOfTwoResult[power] = result;\n powersOfTwo[result] = power;\n }\n result = powersOfTwoResult[power - 1] * 2 ^ 285;\n powersOfTwoResult[power] = result;\n powersOfTwoResult[-1] = 0;\n }\n var xorPolynomials = function (x, y) {\n var result = [], idx = x.length - 2;\n for (var i = idx; i >= 0; i--) {\n result[i] = x[i] ^ y[i];\n }\n return result;\n };\n var multiplyPolynomials = function (x, y) {\n var result = [];\n for (var i = 0; i < x.length; i++) {\n for (var j = 0; j < y.length; j++) {\n if (result[i + j] === undefined) {\n result[i + j] = (x[i] + (y[j] >= 0 ? y[j] : 0)) % 255;\n } else {\n result[i + j] = powersOfTwo[powersOfTwoResult[result[i + j]] ^ powersOfTwoResult[(x[i] + y[j]) % 255]];\n }\n }\n }\n return result;\n };\n function generateGeneratorPolynomials() {\n var maxErrorCorrectionCodeWordsCount = 68;\n for (var idx = 2; idx <= maxErrorCorrectionCodeWordsCount; idx++) {\n var firstPolynomial = generatorPolynomials[idx - 1], secondPolynomial = [\n idx,\n 0\n ];\n generatorPolynomials[idx] = multiplyPolynomials(firstPolynomial, secondPolynomial);\n }\n }\n generatePowersOfTwo();\n generateGeneratorPolynomials();\n function multiplyByConstant(polynomial, power) {\n var result = [], idx = polynomial.length - 1;\n do {\n result[idx] = powersOfTwoResult[(polynomial[idx] + power) % 255];\n idx--;\n } while (polynomial[idx] !== undefined);\n return result;\n }\n var generateErrorCodewords = function (data, errorCodewordsCount) {\n var generator = generatorPolynomials[errorCodewordsCount - 1], result = new Array(errorCodewordsCount).concat(data), generatorPolynomial = new Array(result.length - generator.length).concat(generator), steps = data.length, errorCodewords = [], divisor, idx;\n for (idx = 0; idx < steps; idx++) {\n divisor = multiplyByConstant(generatorPolynomial, powersOfTwo[result[result.length - 1]]);\n generatorPolynomial.splice(0, 1);\n result = xorPolynomials(divisor, result);\n }\n for (idx = result.length - 1; idx >= 0; idx--) {\n errorCodewords[errorCodewordsCount - 1 - idx] = toBitsString(result[idx], 8);\n }\n return errorCodewords;\n };\n var getBlocks = function (dataStream, versionCodewordsInformation) {\n var codewordStart = 0, dataBlocks = [], errorBlocks = [], dataBlock, versionGroups = versionCodewordsInformation.groups, blockCodewordsCount, groupBlocksCount, messagePolynomial, codeword;\n for (var groupIdx = 0; groupIdx < versionGroups.length; groupIdx++) {\n groupBlocksCount = versionGroups[groupIdx][0];\n for (var blockIdx = 0; blockIdx < groupBlocksCount; blockIdx++) {\n blockCodewordsCount = versionGroups[groupIdx][1];\n dataBlock = [];\n messagePolynomial = [];\n for (var codewordIdx = 1; codewordIdx <= blockCodewordsCount; codewordIdx++) {\n codeword = dataStream.substring(codewordStart, codewordStart + 8);\n dataBlock.push(codeword);\n messagePolynomial[blockCodewordsCount - codewordIdx] = toDecimal(codeword);\n codewordStart += 8;\n }\n dataBlocks.push(dataBlock);\n errorBlocks.push(generateErrorCodewords(messagePolynomial, versionCodewordsInformation.errorCodewordsPerBlock));\n }\n }\n return [\n dataBlocks,\n errorBlocks\n ];\n };\n var chooseMode = function (str, minNumericBeforeAlpha, minNumericBeforeByte, minAlphaBeforeByte, previousMode) {\n var numeric = numberRegex.exec(str), numericMatch = numeric ? numeric[0] : '', alpha = alphaRegex.exec(str), alphaMatch = alpha ? alpha[0] : '', alphaNumeric = alphaNumericRegex.exec(str), alphaNumericMatch = alphaNumeric ? alphaNumeric[0] : '', mode, modeString;\n if (numericMatch && (numericMatch.length >= minNumericBeforeAlpha || str.length == numericMatch.length || numericMatch.length >= minNumericBeforeByte && !alphaNumericRegex.test(str.charAt(numericMatch.length)))) {\n mode = NUMERIC;\n modeString = numericMatch;\n } else if (alphaNumericMatch && (str.length == alphaNumericMatch.length || alphaNumericMatch.length >= minAlphaBeforeByte || previousMode == ALPHA_NUMERIC)) {\n mode = ALPHA_NUMERIC;\n modeString = numericMatch || alphaMatch;\n } else {\n mode = BYTE;\n if (alphaNumericMatch) {\n modeString = alphaNumericMatch + byteRegex.exec(str.substring(alphaNumericMatch.length))[0];\n } else {\n modeString = byteRegex.exec(str)[0];\n }\n }\n return {\n mode: mode,\n modeString: modeString\n };\n };\n var getModes = function (str) {\n var modes = [], previousMode, idx = 0;\n modes.push(chooseMode(str, initMinNumericBeforeAlpha, initMinNumericBeforeByte, initMinAlphaBeforeByte, previousMode));\n previousMode = modes[0].mode;\n str = str.substr(modes[0].modeString.length);\n while (str.length > 0) {\n var nextMode = chooseMode(str, minNumericBeforeAlpha, minNumericBeforeByte, minAlphaBeforeByte, previousMode);\n if (nextMode.mode != previousMode) {\n previousMode = nextMode.mode;\n modes.push(nextMode);\n idx++;\n } else {\n modes[idx].modeString += nextMode.modeString;\n }\n str = str.substr(nextMode.modeString.length);\n }\n return modes;\n };\n var getDataCodewordsCount = function (modes) {\n var length = 0, mode;\n for (var i = 0; i < modes.length; i++) {\n mode = modeInstances[modes[i].mode];\n length += mode.getStringBitsLength(modes[i].modeString.length);\n }\n return Math.ceil(length / 8);\n };\n var getVersion = function (dataCodewordsCount, errorCorrectionLevel) {\n var x = 0, y = versionsCodewordsInformation.length - 1, version = Math.floor(versionsCodewordsInformation.length / 2);\n do {\n if (dataCodewordsCount < versionsCodewordsInformation[version][errorCorrectionLevel].totalDataCodewords) {\n y = version;\n } else {\n x = version;\n }\n version = x + Math.floor((y - x) / 2);\n } while (y - x > 1);\n if (dataCodewordsCount <= versionsCodewordsInformation[x][errorCorrectionLevel].totalDataCodewords) {\n return version + 1;\n }\n return y + 1;\n };\n var getDataString = function (modes, version) {\n var dataString = '', mode;\n for (var i = 0; i < modes.length; i++) {\n mode = modeInstances[modes[i].mode];\n dataString += mode.encode(modes[i].modeString, version);\n }\n return dataString;\n };\n var encodeFormatInformation = function (format) {\n var formatNumber = toDecimal(format), encodedString, result = '';\n if (formatNumber === 0) {\n return '101010000010010';\n } else {\n encodedString = encodeBCH(toDecimal(format), formatGeneratorPolynomial, 15);\n }\n for (var i = 0; i < encodedString.length; i++) {\n result += encodedString.charAt(i) ^ formatMaskPattern.charAt(i);\n }\n return result;\n };\n var encodeBCH = function (value, generatorPolynomial, codeLength) {\n var generatorNumber = toDecimal(generatorPolynomial), polynomialLength = generatorPolynomial.length - 1, valueNumber = value << polynomialLength, length = codeLength - polynomialLength, valueString = toBitsString(value, length), result = dividePolynomials(valueNumber, generatorNumber);\n result = valueString + toBitsString(result, polynomialLength);\n return result;\n };\n var dividePolynomials = function (numberX, numberY) {\n var yLength = numberY.toString(2).length, xLength = numberX.toString(2).length;\n do {\n numberX ^= numberY << xLength - yLength;\n xLength = numberX.toString(2).length;\n } while (xLength >= yLength);\n return numberX;\n };\n function getNumberAt(str, idx) {\n return parseInt(str.charAt(idx), 10);\n }\n var initMatrices = function (version) {\n var matrices = [], modules = 17 + 4 * version;\n for (var i = 0; i < maskPatternConditions.length; i++) {\n matrices[i] = new Array(modules);\n for (var j = 0; j < modules; j++) {\n matrices[i][j] = new Array(modules);\n }\n }\n return matrices;\n };\n var addFormatInformation = function (matrices, formatString) {\n var matrix = matrices[0], x, y, idx = 0, length = formatString.length;\n for (x = 0, y = 8; x <= 8; x++) {\n if (x !== 6) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n }\n for (x = 8, y = 7; y >= 0; y--) {\n if (y !== 6) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n }\n idx = 0;\n for (y = matrix.length - 1, x = 8; y >= matrix.length - 8; y--) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n fillFunctionCell(matrices, 1, matrix.length - 8, 8);\n for (x = matrix.length - 7, y = 8; x < matrix.length; x++) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n };\n var encodeVersionInformation = function (version) {\n return encodeBCH(version, versionGeneratorPolynomial, 18);\n };\n var addVersionInformation = function (matrices, dataString) {\n var matrix = matrices[0], modules = matrix.length, x1 = 0, y1 = modules - 11, x2 = modules - 11, y2 = 0, quotient, mod, value;\n for (var idx = 0; idx < dataString.length; idx++) {\n quotient = Math.floor(idx / 3);\n mod = idx % 3;\n value = getNumberAt(dataString, dataString.length - idx - 1);\n fillFunctionCell(matrices, value, x1 + quotient, y1 + mod);\n fillFunctionCell(matrices, value, x2 + mod, y2 + quotient);\n }\n };\n var addCentricPattern = function (matrices, pattern, x, y) {\n var size = pattern.length + 2, length = pattern.length + 1, value;\n for (var i = 0; i < pattern.length; i++) {\n for (var j = i; j < size - i; j++) {\n value = pattern[i];\n fillFunctionCell(matrices, value, x + j, y + i);\n fillFunctionCell(matrices, value, x + i, y + j);\n fillFunctionCell(matrices, value, x + length - j, y + length - i);\n fillFunctionCell(matrices, value, x + length - i, y + length - j);\n }\n }\n };\n var addFinderSeparator = function (matrices, direction, x, y) {\n var nextX = x, nextY = y, matrix = matrices[0];\n do {\n fillFunctionCell(matrices, 0, nextX, y);\n fillFunctionCell(matrices, 0, x, nextY);\n nextX += direction[0];\n nextY += direction[1];\n } while (nextX >= 0 && nextX < matrix.length);\n };\n var addFinderPatterns = function (matrices) {\n var modules = matrices[0].length;\n addCentricPattern(matrices, finderPattern, 0, 0);\n addFinderSeparator(matrices, [\n -1,\n -1\n ], 7, 7);\n addCentricPattern(matrices, finderPattern, modules - 7, 0);\n addFinderSeparator(matrices, [\n 1,\n -1\n ], modules - 8, 7);\n addCentricPattern(matrices, finderPattern, 0, modules - 7);\n addFinderSeparator(matrices, [\n -1,\n 1\n ], 7, modules - 8);\n };\n var addAlignmentPatterns = function (matrices, version) {\n if (version < 2) {\n return;\n }\n var matrix = matrices[0], modules = matrix.length, pointsCount = Math.floor(version / 7), points = [6], startDistance, distance, idx = 0;\n if (startDistance = irregularAlignmentPatternsStartDistance[version]) {\n distance = (modules - 13 - startDistance) / pointsCount;\n } else {\n startDistance = distance = (modules - 13) / (pointsCount + 1);\n }\n points.push(points[idx++] + startDistance);\n while (points[idx] + distance < modules) {\n points.push(points[idx++] + distance);\n }\n for (var i = 0; i < points.length; i++) {\n for (var j = 0; j < points.length; j++) {\n if (matrix[points[i]][points[j]] === undefined) {\n addCentricPattern(matrices, alignmentPattern, points[i] - 2, points[j] - 2);\n }\n }\n }\n };\n var addTimingFunctions = function (matrices) {\n var row = 6, column = 6, value = 1, modules = matrices[0].length;\n for (var i = 8; i < modules - 8; i++) {\n fillFunctionCell(matrices, value, row, i);\n fillFunctionCell(matrices, value, i, column);\n value ^= 1;\n }\n };\n var scoreMaskMatrixes = function (matrices) {\n var scores = [], previousBits = [], darkModules = [], patterns = [], adjacentSameBits = [], matrix, i, row = 0, column = 1, modules = matrices[0].length;\n for (i = 0; i < matrices.length; i++) {\n scores[i] = 0;\n darkModules[i] = 0;\n adjacentSameBits[i] = [\n 0,\n 0\n ];\n patterns[i] = [\n 0,\n 0\n ];\n previousBits[i] = [];\n }\n for (i = 0; i < modules; i++) {\n for (var j = 0; j < modules; j++) {\n for (var k = 0; k < matrices.length; k++) {\n matrix = matrices[k];\n darkModules[k] += parseInt(matrix[i][j], 10);\n if (previousBits[k][row] === matrix[i][j] && i + 1 < modules && j - 1 >= 0 && matrix[i + 1][j] == previousBits[k][row] && matrix[i + 1][j - 1] == previousBits[k][row]) {\n scores[k] += 3;\n }\n scoreFinderPatternOccurance(k, patterns, scores, row, matrix[i][j]);\n scoreFinderPatternOccurance(k, patterns, scores, column, matrix[j][i]);\n scoreAdjacentSameBits(k, scores, previousBits, matrix[i][j], adjacentSameBits, row);\n scoreAdjacentSameBits(k, scores, previousBits, matrix[j][i], adjacentSameBits, column);\n }\n }\n }\n var total = modules * modules, minIdx, min = Number.MAX_VALUE;\n for (i = 0; i < scores.length; i++) {\n scores[i] += calculateDarkModulesRatioScore(darkModules[i], total);\n if (scores[i] < min) {\n min = scores[i];\n minIdx = i;\n }\n }\n return minIdx;\n };\n function scoreFinderPatternOccurance(idx, patterns, scores, rowColumn, bit) {\n patterns[idx][rowColumn] = (patterns[idx][rowColumn] << 1 ^ bit) % 128;\n if (patterns[idx][rowColumn] == finderPatternValue) {\n scores[idx] += 40;\n }\n }\n function scoreAdjacentSameBits(idx, scores, previousBits, bit, adjacentBits, rowColumn) {\n if (previousBits[idx][rowColumn] == bit) {\n adjacentBits[idx][rowColumn]++;\n } else {\n previousBits[idx][rowColumn] = bit;\n if (adjacentBits[idx][rowColumn] >= 5) {\n scores[idx] += 3 + adjacentBits[idx][rowColumn] - 5;\n }\n adjacentBits[idx][rowColumn] = 1;\n }\n }\n function calculateDarkModulesRatioScore(darkModules, total) {\n var percent = Math.floor(darkModules / total * 100), mod5 = percent % 5, previous = Math.abs(percent - mod5 - 50), next = Math.abs(percent + 5 - mod5 - 50), score = 10 * Math.min(previous / 5, next / 5);\n return score;\n }\n var EncodingResult = function (dataString, version) {\n this.dataString = dataString;\n this.version = version;\n };\n var IsoEncoder = function () {\n this.getEncodingResult = function (inputString, errorCorrectionLevel) {\n var modes = getModes(inputString), dataCodewordsCount = getDataCodewordsCount(modes), version = getVersion(dataCodewordsCount, errorCorrectionLevel), dataString = getDataString(modes, version);\n return new EncodingResult(dataString, version);\n };\n };\n var UTF8Encoder = function () {\n this.mode = modeInstances[this.encodingMode];\n };\n UTF8Encoder.fn = UTF8Encoder.prototype = {\n encodingMode: BYTE,\n utfBOM: '111011111011101110111111',\n initialModeCountStringLength: 20,\n getEncodingResult: function (inputString, errorCorrectionLevel) {\n var that = this, data = that.encode(inputString), dataCodewordsCount = that.getDataCodewordsCount(data), version = getVersion(dataCodewordsCount, errorCorrectionLevel), dataString = that.mode.getModeCountString(data.length / 8, version) + data;\n return new EncodingResult(dataString, version);\n },\n getDataCodewordsCount: function (data) {\n var that = this, dataLength = data.length, dataCodewordsCount = Math.ceil((that.initialModeCountStringLength + dataLength) / 8);\n return dataCodewordsCount;\n },\n encode: function (str) {\n var that = this, result = that.utfBOM;\n for (var i = 0; i < str.length; i++) {\n result += that.encodeCharacter(str.charCodeAt(i));\n }\n return result;\n },\n encodeCharacter: function (code) {\n var bytesCount = this.getBytesCount(code), bc = bytesCount - 1, result = '';\n if (bytesCount == 1) {\n result = toBitsString(code, 8);\n } else {\n var significantOnes = 8 - bytesCount;\n for (var i = 0; i < bc; i++) {\n result = toBitsString(code >> i * 6 & 63 | 128, 8) + result;\n }\n result = (code >> bc * 6 | 255 >> significantOnes << significantOnes).toString(2) + result;\n }\n return result;\n },\n getBytesCount: function (code) {\n var ranges = this.ranges;\n for (var i = 0; i < ranges.length; i++) {\n if (code < ranges[i]) {\n return i + 1;\n }\n }\n },\n ranges: [\n 128,\n 2048,\n 65536,\n 2097152,\n 67108864\n ]\n };\n var QRCodeDataEncoder = function (encoding) {\n if (encoding && encoding.toLowerCase().indexOf('utf_8') >= 0) {\n return new UTF8Encoder();\n } else {\n return new IsoEncoder();\n }\n };\n var encodeData = function (inputString, errorCorrectionLevel, encoding) {\n var encoder = new QRCodeDataEncoder(encoding), encodingResult = encoder.getEncodingResult(inputString, errorCorrectionLevel), version = encodingResult.version, versionInformation = versionsCodewordsInformation[version - 1][errorCorrectionLevel], dataString = padDataString(encodingResult.dataString, versionInformation.totalDataCodewords), blocks = getBlocks(dataString, versionInformation), matrices = initMatrices(version);\n addFinderPatterns(matrices);\n addAlignmentPatterns(matrices, version);\n addTimingFunctions(matrices);\n if (version >= 7) {\n addVersionInformation(matrices, toBitsString(0, 18));\n }\n addFormatInformation(matrices, toBitsString(0, 15));\n fillData(matrices, blocks);\n var minIdx = scoreMaskMatrixes(matrices), optimalMatrix = matrices[minIdx];\n if (version >= 7) {\n addVersionInformation([optimalMatrix], encodeVersionInformation(version));\n }\n var formatString = errorCorrectionPatterns[errorCorrectionLevel] + toBitsString(minIdx, 3);\n addFormatInformation([optimalMatrix], encodeFormatInformation(formatString));\n return optimalMatrix;\n };\n var QRCodeDefaults = {\n DEFAULT_SIZE: 200,\n QUIET_ZONE_LENGTH: 4,\n DEFAULT_ERROR_CORRECTION_LEVEL: 'L',\n DEFAULT_BACKGROUND: '#fff',\n DEFAULT_DARK_MODULE_COLOR: '#000',\n MIN_BASE_UNIT_SIZE: 1\n };\n var QRCode = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.element = $(element);\n that.wrapper = that.element;\n that.element.addClass('k-qrcode');\n that.surfaceWrap = $('
    ').css('position', 'relative').appendTo(this.element);\n that.surface = draw.Surface.create(that.surfaceWrap, { type: that.options.renderAs });\n that.setOptions(options);\n },\n redraw: function () {\n var size = this._getSize();\n this.surfaceWrap.css({\n width: size,\n height: size\n });\n this.surface.clear();\n this.createVisual();\n this.surface.draw(this.visual);\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n _resize: function () {\n this.redraw();\n },\n createVisual: function () {\n this.visual = this._render();\n },\n exportVisual: function () {\n return this._render();\n },\n _render: function () {\n var that = this, value = that._value, baseUnit, border = that.options.border || {}, padding = that.options.padding || 0, borderWidth = border.width || 0, quietZoneSize, matrix, size, dataSize, contentSize;\n border.width = borderWidth;\n var visual = new draw.Group();\n if (value) {\n matrix = encodeData(value, that.options.errorCorrection, that.options.encoding);\n size = that._getSize();\n contentSize = size - 2 * (borderWidth + padding);\n baseUnit = that._calculateBaseUnit(contentSize, matrix.length);\n dataSize = matrix.length * baseUnit;\n quietZoneSize = borderWidth + padding + (contentSize - dataSize) / 2;\n visual.append(that._renderBackground(size, border));\n visual.append(that._renderMatrix(matrix, baseUnit, quietZoneSize));\n }\n return visual;\n },\n _getSize: function () {\n var that = this, size;\n if (that.options.size) {\n size = parseInt(that.options.size, 10);\n } else {\n var element = that.element, min = Math.min(element.width(), element.height());\n if (min > 0) {\n size = min;\n } else {\n size = QRCodeDefaults.DEFAULT_SIZE;\n }\n }\n return size;\n },\n _calculateBaseUnit: function (size, matrixSize) {\n var baseUnit = Math.floor(size / matrixSize);\n if (baseUnit < QRCodeDefaults.MIN_BASE_UNIT_SIZE) {\n throw new Error('Insufficient size.');\n }\n if (baseUnit * matrixSize >= size && baseUnit - 1 >= QRCodeDefaults.MIN_BASE_UNIT_SIZE) {\n baseUnit--;\n }\n return baseUnit;\n },\n _renderMatrix: function (matrix, baseUnit, quietZoneSize) {\n var path = new draw.MultiPath({\n fill: { color: this.options.color },\n stroke: null\n });\n for (var row = 0; row < matrix.length; row++) {\n var y = quietZoneSize + row * baseUnit;\n var column = 0;\n while (column < matrix.length) {\n while (matrix[row][column] === 0 && column < matrix.length) {\n column++;\n }\n if (column < matrix.length) {\n var x = column;\n while (matrix[row][column] == 1) {\n column++;\n }\n var x1 = round(quietZoneSize + x * baseUnit);\n var y1 = round(y);\n var x2 = round(quietZoneSize + column * baseUnit);\n var y2 = round(y + baseUnit);\n path.moveTo(x1, y1).lineTo(x1, y2).lineTo(x2, y2).lineTo(x2, y1).close();\n }\n }\n }\n return path;\n },\n _renderBackground: function (size, border) {\n var box = new Box2D(0, 0, size, size).unpad(border.width / 2);\n return draw.Path.fromRect(box.toRect(), {\n fill: { color: this.options.background },\n stroke: {\n color: border.color,\n width: border.width\n }\n });\n },\n setOptions: function (options) {\n var that = this;\n options = options || {};\n that.options = extend(that.options, options);\n if (options.value !== undefined) {\n that._value = that.options.value + '';\n }\n that.redraw();\n },\n value: function (value) {\n var that = this;\n if (value === undefined) {\n return that._value;\n }\n that._value = value + '';\n that.redraw();\n },\n options: {\n name: 'QRCode',\n renderAs: 'svg',\n encoding: 'ISO_8859_1',\n value: '',\n errorCorrection: QRCodeDefaults.DEFAULT_ERROR_CORRECTION_LEVEL,\n background: QRCodeDefaults.DEFAULT_BACKGROUND,\n color: QRCodeDefaults.DEFAULT_DARK_MODULE_COLOR,\n size: '',\n padding: 0,\n border: {\n color: '',\n width: 0\n }\n }\n });\n dataviz.ExportMixin.extend(QRCode.fn);\n dataviz.ui.plugin(QRCode);\n kendo.deepExtend(dataviz, {\n QRCode: QRCode,\n QRCodeDefaults: QRCodeDefaults,\n QRCodeFunctions: {\n FreeCellVisitor: FreeCellVisitor,\n fillData: fillData,\n padDataString: padDataString,\n generateErrorCodewords: generateErrorCodewords,\n xorPolynomials: xorPolynomials,\n getBlocks: getBlocks,\n multiplyPolynomials: multiplyPolynomials,\n chooseMode: chooseMode,\n getModes: getModes,\n getDataCodewordsCount: getDataCodewordsCount,\n getVersion: getVersion,\n getDataString: getDataString,\n encodeFormatInformation: encodeFormatInformation,\n encodeBCH: encodeBCH,\n dividePolynomials: dividePolynomials,\n initMatrices: initMatrices,\n addFormatInformation: addFormatInformation,\n encodeVersionInformation: encodeVersionInformation,\n addVersionInformation: addVersionInformation,\n addCentricPattern: addCentricPattern,\n addFinderSeparator: addFinderSeparator,\n addFinderPatterns: addFinderPatterns,\n addAlignmentPatterns: addAlignmentPatterns,\n addTimingFunctions: addTimingFunctions,\n scoreMaskMatrixes: scoreMaskMatrixes,\n encodeData: encodeData,\n UTF8Encoder: UTF8Encoder\n },\n QRCodeFields: {\n modes: modeInstances,\n powersOfTwo: powersOfTwo,\n powersOfTwoResult: powersOfTwoResult,\n generatorPolynomials: generatorPolynomials\n }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/stock/kendo-stock-chart', ['kendo.dataviz.chart'], f);\n}(function () {\n (function () {\n window.kendo.dataviz = window.kendo.dataviz || {};\n var dataviz = kendo.dataviz;\n var elementStyles = dataviz.elementStyles;\n var deepExtend = dataviz.deepExtend;\n var toTime = dataviz.toTime;\n var datavizConstants = dataviz.constants;\n var Chart = dataviz.Chart;\n var drawing = kendo.drawing;\n var FadeOutAnimation = drawing.Animation.extend({\n setup: function () {\n this._initialOpacity = parseFloat(elementStyles(this.element, 'opacity').opacity);\n },\n step: function (pos) {\n elementStyles(this.element, { opacity: String(dataviz.interpolateValue(this._initialOpacity, 0, pos)) });\n },\n abort: function () {\n drawing.Animation.fn.abort.call(this);\n elementStyles(this.element, {\n display: 'none',\n opacity: String(this._initialOpacity)\n });\n },\n cancel: function () {\n drawing.Animation.fn.abort.call(this);\n elementStyles(this.element, { opacity: String(this._initialOpacity) });\n }\n });\n function createDiv(className, style) {\n var div = document.createElement('div');\n div.className = className;\n if (style) {\n div.style.cssText = style;\n }\n return div;\n }\n var NavigatorHint = dataviz.Class.extend({\n init: function (container, chartService, options) {\n this.options = deepExtend({}, this.options, options);\n this.container = container;\n this.chartService = chartService;\n var padding = elementStyles(container, [\n 'paddingLeft',\n 'paddingTop'\n ]);\n this.chartPadding = {\n top: padding.paddingTop,\n left: padding.paddingLeft\n };\n this.createElements();\n container.appendChild(this.element);\n },\n createElements: function () {\n var element = this.element = createDiv('k-navigator-hint', 'display: none; position: absolute; top: 1px; left: 1px;');\n var tooltip = this.tooltip = createDiv('k-tooltip k-chart-tooltip');\n var scroll = this.scroll = createDiv('k-scroll');\n tooltip.innerHTML = ' ';\n element.appendChild(tooltip);\n element.appendChild(scroll);\n },\n show: function (from, to, bbox) {\n var ref = this;\n var element = ref.element;\n var options = ref.options;\n var scroll = ref.scroll;\n var tooltip = ref.tooltip;\n var middle = dataviz.toDate(toTime(from) + toTime(to - from) / 2);\n var scrollWidth = bbox.width() * 0.4;\n var minPos = bbox.center().x - scrollWidth;\n var maxPos = bbox.center().x;\n var posRange = maxPos - minPos;\n var range = options.max - options.min;\n var scale = posRange / range;\n var offset = middle - options.min;\n var text = this.chartService.intl.format(options.format, from, to);\n var template = dataviz.getTemplate(options);\n this.clearHideTimeout();\n if (!this._visible) {\n elementStyles(element, {\n visibility: 'hidden',\n display: 'block'\n });\n this._visible = true;\n }\n if (template) {\n text = template({\n from: from,\n to: to\n });\n }\n tooltip.innerHTML = text;\n elementStyles(tooltip, {\n left: bbox.center().x - tooltip.offsetWidth / 2,\n top: bbox.y1\n });\n var tooltipStyle = elementStyles(tooltip, [\n 'marginTop',\n 'borderTopWidth',\n 'height'\n ]);\n elementStyles(scroll, {\n width: scrollWidth,\n left: minPos + offset * scale,\n top: bbox.y1 + tooltipStyle.marginTop + tooltipStyle.borderTopWidth + tooltipStyle.height / 2\n });\n elementStyles(element, { visibility: 'visible' });\n },\n clearHideTimeout: function () {\n if (this._hideTimeout) {\n clearTimeout(this._hideTimeout);\n }\n if (this._hideAnimation) {\n this._hideAnimation.cancel();\n }\n },\n hide: function () {\n var this$1 = this;\n this.clearHideTimeout();\n this._hideTimeout = setTimeout(function () {\n this$1._visible = false;\n this$1._hideAnimation = new FadeOutAnimation(this$1.element);\n this$1._hideAnimation.setup();\n this$1._hideAnimation.play();\n }, this.options.hideDelay);\n },\n destroy: function () {\n this.clearHideTimeout();\n if (this.container) {\n this.container.removeChild(this.element);\n }\n delete this.container;\n delete this.chartService;\n delete this.element;\n delete this.tooltip;\n delete this.scroll;\n }\n });\n dataviz.setDefaultOptions(NavigatorHint, {\n format: '{0:d} - {1:d}',\n hideDelay: 500\n });\n var NAVIGATOR_PANE = '_navigator';\n var NAVIGATOR_AXIS = NAVIGATOR_PANE;\n var constants = {\n NAVIGATOR_AXIS: NAVIGATOR_AXIS,\n NAVIGATOR_PANE: NAVIGATOR_PANE\n };\n var ZOOM_ACCELERATION = 3;\n var Navigator = dataviz.Class.extend({\n init: function (chart) {\n this.chart = chart;\n var options = this.options = deepExtend({}, this.options, chart.options.navigator);\n var select = options.select;\n if (select) {\n select.from = this.parseDate(select.from);\n select.to = this.parseDate(select.to);\n }\n if (!dataviz.defined(options.hint.visible)) {\n options.hint.visible = options.visible;\n }\n var obj;\n this.chartObserver = new dataviz.InstanceObserver(this, (obj = {}, obj[datavizConstants.DRAG] = '_drag', obj[datavizConstants.DRAG_END] = '_dragEnd', obj[datavizConstants.ZOOM] = '_zoom', obj[datavizConstants.ZOOM_END] = '_zoomEnd', obj));\n chart.addObserver(this.chartObserver);\n },\n parseDate: function (value) {\n return dataviz.parseDate(this.chart.chartService.intl, value);\n },\n clean: function () {\n if (this.selection) {\n this.selection.destroy();\n this.selection = null;\n }\n if (this.hint) {\n this.hint.destroy();\n this.hint = null;\n }\n },\n destroy: function () {\n if (this.chart) {\n this.chart.removeObserver(this.chartObserver);\n delete this.chart;\n }\n this.clean();\n },\n redraw: function () {\n this._redrawSelf();\n this.initSelection();\n },\n initSelection: function () {\n var ref = this;\n var chart = ref.chart;\n var options = ref.options;\n var axis = this.mainAxis();\n var ref$1 = axis.roundedRange();\n var min = ref$1.min;\n var max = ref$1.max;\n var ref$2 = options.select;\n var from = ref$2.from;\n var to = ref$2.to;\n var mousewheel = ref$2.mousewheel;\n var axisClone = clone(axis);\n if (axis.categoriesCount() === 0) {\n return;\n }\n this.clean();\n axisClone.box = axis.box;\n this.selection = new dataviz.Selection(chart, axisClone, {\n min: min,\n max: max,\n from: from || min,\n to: to || max,\n mousewheel: dataviz.valueOrDefault(mousewheel, { zoom: 'left' }),\n visible: options.visible\n }, new dataviz.InstanceObserver(this, {\n selectStart: '_selectStart',\n select: '_select',\n selectEnd: '_selectEnd'\n }));\n if (options.hint.visible) {\n this.hint = new NavigatorHint(chart.element, chart.chartService, {\n min: min,\n max: max,\n template: dataviz.getTemplate(options.hint),\n format: options.hint.format\n });\n }\n },\n setRange: function () {\n var plotArea = this.chart._createPlotArea(true);\n var axis = plotArea.namedCategoryAxes[NAVIGATOR_AXIS];\n var ref = axis.roundedRange();\n var min = ref.min;\n var max = ref.max;\n var select = this.options.select || {};\n var from = select.from || min;\n if (from < min) {\n from = min;\n }\n var to = select.to || max;\n if (to > max) {\n to = max;\n }\n this.options.select = deepExtend({}, select, {\n from: from,\n to: to\n });\n this.filterAxes();\n },\n _redrawSelf: function (silent) {\n var plotArea = this.chart._plotArea;\n if (plotArea) {\n plotArea.redraw(dataviz.last(plotArea.panes), silent);\n }\n },\n redrawSlaves: function () {\n var chart = this.chart;\n var plotArea = chart._plotArea;\n var slavePanes = plotArea.panes.slice(0, -1);\n plotArea.srcSeries = chart.options.series;\n plotArea.options.categoryAxis = chart.options.categoryAxis;\n plotArea.clearSeriesPointsCache();\n plotArea.redraw(slavePanes);\n },\n _drag: function (e) {\n var ref = this;\n var chart = ref.chart;\n var selection = ref.selection;\n var coords = chart._eventCoordinates(e.originalEvent);\n var navigatorAxis = this.mainAxis();\n var naviRange = navigatorAxis.roundedRange();\n var inNavigator = navigatorAxis.pane.box.containsPoint(coords);\n var axis = chart._plotArea.categoryAxis;\n var range = e.axisRanges[axis.options.name];\n var select = this.options.select;\n var duration;\n if (!range || inNavigator || !selection) {\n return;\n }\n if (select.from && select.to) {\n duration = toTime(select.to) - toTime(select.from);\n } else {\n duration = toTime(selection.options.to) - toTime(selection.options.from);\n }\n var from = dataviz.toDate(dataviz.limitValue(toTime(range.min), naviRange.min, toTime(naviRange.max) - duration));\n var to = dataviz.toDate(dataviz.limitValue(toTime(from) + duration, toTime(naviRange.min) + duration, naviRange.max));\n this.options.select = {\n from: from,\n to: to\n };\n if (this.options.liveDrag) {\n this.filterAxes();\n this.redrawSlaves();\n }\n selection.set(from, to);\n this.showHint(from, to);\n },\n _dragEnd: function () {\n this.filterAxes();\n this.filter();\n this.redrawSlaves();\n if (this.hint) {\n this.hint.hide();\n }\n },\n readSelection: function () {\n var ref = this;\n var ref_selection_options = ref.selection.options;\n var from = ref_selection_options.from;\n var to = ref_selection_options.to;\n var select = ref.options.select;\n select.from = from;\n select.to = to;\n },\n filterAxes: function () {\n var ref = this;\n var select = ref.options.select;\n if (select === void 0) {\n select = {};\n }\n var chart = ref.chart;\n var allAxes = chart.options.categoryAxis;\n var from = select.from;\n var to = select.to;\n for (var idx = 0; idx < allAxes.length; idx++) {\n var axis = allAxes[idx];\n if (axis.pane !== NAVIGATOR_PANE) {\n axis.min = from;\n axis.max = to;\n }\n }\n },\n filter: function () {\n var ref = this;\n var chart = ref.chart;\n var select = ref.options.select;\n if (chart.requiresHandlers(['navigatorFilter'])) {\n 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 this.chart.trigger('navigatorFilter', {\n from: dataviz.addDuration(axisOptions.min, -axisOptions.baseUnitStep, axisOptions.baseUnit),\n to: dataviz.addDuration(axisOptions.max, axisOptions.baseUnitStep, axisOptions.baseUnit)\n });\n }\n },\n _zoom: function (e) {\n var ref = this;\n var axis = ref.chart._plotArea.categoryAxis;\n var selection = ref.selection;\n var ref_options = ref.options;\n var select = ref_options.select;\n var liveDrag = ref_options.liveDrag;\n var mainAxis = this.mainAxis();\n var delta = e.delta;\n if (!selection) {\n return;\n }\n var fromIx = mainAxis.categoryIndex(selection.options.from);\n var toIx = mainAxis.categoryIndex(selection.options.to);\n e.originalEvent.preventDefault();\n if (Math.abs(delta) > 1) {\n delta *= ZOOM_ACCELERATION;\n }\n if (toIx - fromIx > 1) {\n selection.expand(delta);\n this.readSelection();\n } else {\n axis.options.min = select.from;\n select.from = axis.scaleRange(-e.delta).min;\n }\n if (liveDrag) {\n this.filterAxes();\n this.redrawSlaves();\n }\n selection.set(select.from, select.to);\n this.showHint(this.options.select.from, this.options.select.to);\n },\n _zoomEnd: function (e) {\n this._dragEnd(e);\n },\n showHint: function (from, to) {\n var plotArea = this.chart._plotArea;\n if (this.hint) {\n this.hint.show(from, to, plotArea.backgroundBox());\n }\n },\n _selectStart: function (e) {\n return this.chart._selectStart(e);\n },\n _select: function (e) {\n this.showHint(e.from, e.to);\n return this.chart._select(e);\n },\n _selectEnd: function (e) {\n if (this.hint) {\n this.hint.hide();\n }\n this.readSelection();\n this.filterAxes();\n this.filter();\n this.redrawSlaves();\n return this.chart._selectEnd(e);\n },\n mainAxis: function () {\n var plotArea = this.chart._plotArea;\n if (plotArea) {\n return plotArea.namedCategoryAxes[NAVIGATOR_AXIS];\n }\n },\n select: function (from, to) {\n var select = this.options.select;\n if (from && to) {\n select.from = this.parseDate(from);\n select.to = this.parseDate(to);\n this.filterAxes();\n this.filter();\n this.redrawSlaves();\n this.selection.set(from, to);\n }\n return {\n from: select.from,\n to: select.to\n };\n }\n });\n Navigator.setup = function (options, themeOptions) {\n if (options === void 0) {\n options = {};\n }\n if (themeOptions === void 0) {\n themeOptions = {};\n }\n if (options.__navi) {\n return;\n }\n options.__navi = true;\n var naviOptions = deepExtend({}, themeOptions.navigator, options.navigator);\n var panes = options.panes = [].concat(options.panes);\n var paneOptions = deepExtend({}, naviOptions.pane, { name: NAVIGATOR_PANE });\n if (!naviOptions.visible) {\n paneOptions.visible = false;\n paneOptions.height = 0.1;\n }\n panes.push(paneOptions);\n Navigator.attachAxes(options, naviOptions);\n Navigator.attachSeries(options, naviOptions, themeOptions);\n };\n Navigator.attachAxes = function (options, naviOptions) {\n var series = naviOptions.series || [];\n var categoryAxes = options.categoryAxis = [].concat(options.categoryAxis);\n var valueAxes = options.valueAxis = [].concat(options.valueAxis);\n var equallySpacedSeries = dataviz.filterSeriesByType(series, datavizConstants.EQUALLY_SPACED_SERIES);\n var justifyAxis = equallySpacedSeries.length === 0;\n var base = deepExtend({\n type: 'date',\n pane: NAVIGATOR_PANE,\n roundToBaseUnit: !justifyAxis,\n justified: justifyAxis,\n _collapse: false,\n majorTicks: { visible: true },\n tooltip: { visible: false },\n labels: { step: 1 },\n autoBind: naviOptions.autoBindElements,\n autoBaseUnitSteps: {\n minutes: [1],\n hours: [\n 1,\n 2\n ],\n days: [\n 1,\n 2\n ],\n weeks: [],\n months: [1],\n years: [1]\n }\n });\n var user = naviOptions.categoryAxis;\n categoryAxes.push(deepExtend({}, base, { maxDateGroups: 200 }, user, {\n name: NAVIGATOR_AXIS,\n title: null,\n baseUnit: 'fit',\n baseUnitStep: 'auto',\n labels: { visible: false },\n majorTicks: { visible: false }\n }), deepExtend({}, base, user, {\n name: NAVIGATOR_AXIS + '_labels',\n maxDateGroups: 20,\n baseUnitStep: 'auto',\n labels: { position: '' },\n plotBands: [],\n autoBaseUnitSteps: { minutes: [] },\n _overlap: true\n }), deepExtend({}, base, user, {\n name: NAVIGATOR_AXIS + '_ticks',\n maxDateGroups: 200,\n majorTicks: { width: 0.5 },\n plotBands: [],\n title: null,\n labels: {\n visible: false,\n mirror: true\n },\n _overlap: true\n }));\n valueAxes.push(deepExtend({\n name: NAVIGATOR_AXIS,\n pane: NAVIGATOR_PANE,\n majorGridLines: { visible: false },\n visible: false\n }, naviOptions.valueAxis));\n };\n Navigator.attachSeries = function (options, naviOptions, themeOptions) {\n var series = options.series = options.series || [];\n var navigatorSeries = [].concat(naviOptions.series || []);\n var seriesColors = themeOptions.seriesColors;\n var defaults = naviOptions.seriesDefaults;\n for (var idx = 0; idx < navigatorSeries.length; idx++) {\n series.push(deepExtend({\n color: seriesColors[idx % seriesColors.length],\n categoryField: naviOptions.dateField,\n visibleInLegend: false,\n tooltip: { visible: false }\n }, defaults, navigatorSeries[idx], {\n axis: NAVIGATOR_AXIS,\n categoryAxis: NAVIGATOR_AXIS,\n autoBind: naviOptions.autoBindElements\n }));\n }\n };\n function ClonedObject() {\n }\n function clone(obj) {\n ClonedObject.prototype = obj;\n return new ClonedObject();\n }\n var AUTO_CATEGORY_WIDTH = 28;\n var StockChart = Chart.extend({\n applyDefaults: function (options, themeOptions) {\n var width = dataviz.elementSize(this.element).width || datavizConstants.DEFAULT_WIDTH;\n var theme = themeOptions;\n var stockDefaults = {\n seriesDefaults: { categoryField: options.dateField },\n axisDefaults: {\n categoryAxis: {\n name: 'default',\n majorGridLines: { visible: false },\n labels: { step: 2 },\n majorTicks: { visible: false },\n maxDateGroups: Math.floor(width / AUTO_CATEGORY_WIDTH)\n }\n }\n };\n if (theme) {\n theme = deepExtend({}, theme, stockDefaults);\n }\n Navigator.setup(options, theme);\n Chart.fn.applyDefaults.call(this, options, theme);\n },\n _setElementClass: function (element) {\n dataviz.addClass(element, 'k-chart k-stockchart');\n },\n setOptions: function (options) {\n this.destroyNavigator();\n Chart.fn.setOptions.call(this, options);\n },\n noTransitionsRedraw: function () {\n var transitions = this.options.transitions;\n this.options.transitions = false;\n this._fullRedraw();\n this.options.transitions = transitions;\n },\n _resize: function () {\n this.noTransitionsRedraw();\n },\n _redraw: function () {\n var navigator = this.navigator;\n if (!this._dirty() && navigator && navigator.options.partialRedraw) {\n navigator.redrawSlaves();\n } else {\n this._fullRedraw();\n }\n },\n _dirty: function () {\n var options = this.options;\n var series = [].concat(options.series, options.navigator.series);\n var seriesCount = dataviz.grep(series, function (s) {\n return s && s.visible;\n }).length;\n var dirty = this._seriesCount !== seriesCount;\n this._seriesCount = seriesCount;\n return dirty;\n },\n _fullRedraw: function () {\n var navigator = this.navigator;\n if (!navigator) {\n navigator = this.navigator = new Navigator(this);\n this.trigger('navigatorCreated', { navigator: navigator });\n }\n navigator.clean();\n navigator.setRange();\n Chart.fn._redraw.call(this);\n navigator.initSelection();\n },\n _trackSharedTooltip: function (coords) {\n var plotArea = this._plotArea;\n var pane = plotArea.paneByPoint(coords);\n if (pane && pane.options.name === NAVIGATOR_PANE) {\n this._unsetActivePoint();\n } else {\n Chart.fn._trackSharedTooltip.call(this, coords);\n }\n },\n bindCategories: function () {\n Chart.fn.bindCategories.call(this);\n this.copyNavigatorCategories();\n },\n copyNavigatorCategories: function () {\n var definitions = [].concat(this.options.categoryAxis);\n var categories;\n for (var axisIx = 0; axisIx < definitions.length; axisIx++) {\n var axis = definitions[axisIx];\n if (axis.name === NAVIGATOR_AXIS) {\n categories = axis.categories;\n } else if (categories && axis.pane === NAVIGATOR_PANE) {\n axis.categories = categories;\n }\n }\n },\n destroyNavigator: function () {\n if (this.navigator) {\n this.navigator.destroy();\n this.navigator = null;\n }\n },\n destroy: function () {\n this.destroyNavigator();\n Chart.fn.destroy.call(this);\n },\n _stopChartHandlers: function (e) {\n var coords = this._eventCoordinates(e);\n var pane = this._plotArea.paneByPoint(coords);\n return Chart.fn._stopChartHandlers.call(this, e) || pane && pane.options.name === NAVIGATOR_PANE;\n }\n });\n dataviz.setDefaultOptions(StockChart, {\n dateField: 'date',\n axisDefaults: {\n categoryAxis: {\n type: 'date',\n baseUnit: 'fit',\n justified: true\n },\n valueAxis: {\n narrowRange: true,\n labels: { format: 'C' }\n }\n },\n navigator: {\n select: {},\n seriesDefaults: {\n markers: { visible: false },\n tooltip: { visible: true },\n line: { width: 2 }\n },\n hint: {},\n visible: true\n },\n tooltip: { visible: true },\n legend: { visible: false }\n });\n kendo.deepExtend(kendo.dataviz, {\n constants: constants,\n Navigator: Navigator,\n NavigatorHint: NavigatorHint,\n StockChart: StockChart\n });\n }());\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/stock/stock-chart', ['dataviz/stock/kendo-stock-chart'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var dataviz = kendo.dataviz;\n var ChartInstanceObserver = dataviz.ChartInstanceObserver;\n var Chart = dataviz.ui.Chart;\n var KendoStockChart = dataviz.StockChart;\n var constants = dataviz.constants;\n var NAVIGATOR_AXIS = constants.NAVIGATOR_AXIS;\n var NAVIGATOR_PANE = constants.NAVIGATOR_PANE;\n var deepExtend = kendo.deepExtend;\n var defined = dataviz.defined;\n var proxy = $.proxy;\n var CHANGE = 'change';\n var StockInstanceObserver = ChartInstanceObserver.extend({\n handlerMap: {\n navigatorFilter: '_onNavigatorFilter',\n navigatorCreated: '_onNavigatorCreated'\n }\n });\n var StockChart = Chart.extend({\n options: {\n name: 'StockChart',\n dateField: 'date',\n axisDefaults: {\n categoryAxis: {\n type: 'date',\n baseUnit: 'fit',\n justified: true\n },\n valueAxis: {\n narrowRange: true,\n labels: { format: 'C' }\n }\n },\n navigator: {\n select: {},\n seriesDefaults: {\n markers: { visible: false },\n tooltip: {\n visible: true,\n template: '#= kendo.toString(category, \\'d\\') #'\n },\n line: { width: 2 }\n },\n hint: {},\n visible: true\n },\n tooltip: { visible: true },\n legend: { visible: false },\n persistSeriesVisibility: true\n },\n _createChart: function (options, themeOptions) {\n this._initNavigatorOptions(options);\n this._instance = new KendoStockChart(this.element[0], options, themeOptions, {\n observer: new StockInstanceObserver(this),\n sender: this,\n rtl: this._isRtl()\n });\n },\n _initNavigatorOptions: function (options) {\n var navigatorOptions = options.navigator || {};\n var support = kendo.support;\n var isTouch = support.touch;\n var isFirefox = support.browser.mozilla;\n deepExtend(navigatorOptions, {\n autoBindElements: !navigatorOptions.dataSource,\n partialRedraw: navigatorOptions.dataSource,\n liveDrag: !isTouch && !isFirefox\n });\n },\n _initDataSource: function (userOptions) {\n var options = userOptions || {}, dataSource = options.dataSource, hasServerFiltering = dataSource && dataSource.serverFiltering, mainAxis = [].concat(options.categoryAxis)[0], naviOptions = options.navigator || {}, select = naviOptions.select, hasSelect = select && select.from && select.to;\n if (hasServerFiltering && hasSelect) {\n var filter = [].concat(dataSource.filter || []);\n var from = kendo.parseDate(select.from);\n var to = kendo.parseDate(select.to);\n var dummyAxis = new dataviz.DateCategoryAxis(deepExtend({ baseUnit: 'fit' }, mainAxis, {\n categories: [\n from,\n to\n ]\n }), kendo);\n dataSource.filter = buildFilter(dummyAxis.range().min, to).concat(filter);\n }\n Chart.fn._initDataSource.call(this, userOptions);\n },\n _onNavigatorCreated: function (e) {\n this._instance = e.sender;\n this.options = e.sender.options;\n this._navigator = this.navigator = e.navigator;\n this._initNavigatorDataSource();\n },\n _initNavigatorDataSource: function () {\n var navigatorOptions = this.options.navigator;\n var autoBind = navigatorOptions.autoBind;\n var dsOptions = navigatorOptions.dataSource;\n if (dsOptions) {\n this._navigatorDataChangedHandler = this._navigatorDataChangedHandler || proxy(this._onNavigatorDataChanged, this);\n this._navigatorDataSource = kendo.data.DataSource.create(dsOptions).bind(CHANGE, this._navigatorDataChangedHandler);\n if (!defined(autoBind)) {\n autoBind = this.options.autoBind;\n }\n if (autoBind) {\n this._navigatorDataSource.fetch();\n }\n }\n },\n _bindNavigatorSeries: function (series, data) {\n var seriesIx, currentSeries, seriesLength = series.length;\n for (seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\n currentSeries = series[seriesIx];\n if (currentSeries.axis == NAVIGATOR_AXIS && this._isBindable(currentSeries)) {\n currentSeries.data = data;\n }\n }\n },\n _onNavigatorDataChanged: function () {\n var chart = this, instance = chart._instance, categoryAxes = chart.options.categoryAxis, axisIx, axesLength = categoryAxes.length, data = chart._navigatorDataSource.view(), currentAxis, naviCategories;\n this._bindNavigatorSeries(chart.options.series, data);\n if (chart._sourceSeries) {\n this._bindNavigatorSeries(chart._sourceSeries, data);\n }\n for (axisIx = 0; axisIx < axesLength; axisIx++) {\n currentAxis = categoryAxes[axisIx];\n if (currentAxis.pane == NAVIGATOR_PANE) {\n if (currentAxis.name == NAVIGATOR_AXIS) {\n chart._bindCategoryAxis(currentAxis, data, axisIx);\n naviCategories = currentAxis.categories;\n } else {\n currentAxis.categories = naviCategories;\n }\n }\n }\n if (instance._model) {\n var navigator = this.navigator;\n navigator.redraw();\n navigator.setRange();\n if (!chart.options.dataSource || chart.options.dataSource && chart._dataBound) {\n navigator.redrawSlaves();\n }\n }\n },\n _bindCategories: function () {\n Chart.fn._bindCategories.call(this);\n if (this._instance) {\n this._instance.copyNavigatorCategories();\n }\n },\n _onDataChanged: function () {\n Chart.fn._onDataChanged.call(this);\n this._dataBound = true;\n },\n setOptions: function (options) {\n this._removeNavigatorDataSource();\n this._initNavigatorOptions(options);\n this._instance.destroyNavigator();\n Chart.fn.setOptions.call(this, options);\n },\n _onNavigatorFilter: function (e) {\n this.dataSource.filter(buildFilter(e.from, e.to));\n },\n requiresHandlers: function (names) {\n if (dataviz.inArray('navigatorFilter', names)) {\n var dataSource = this.dataSource;\n var hasServerFiltering = dataSource && dataSource.options.serverFiltering;\n return hasServerFiltering && this.options.navigator.dataSource;\n }\n return Chart.fn.requiresHandlers.call(this, names);\n },\n _removeNavigatorDataSource: function () {\n var navigatorDataSource = this._navigatorDataSource;\n if (navigatorDataSource) {\n navigatorDataSource.unbind(CHANGE, this._navigatorDataChangedHandler);\n delete this._navigatorDataSource;\n }\n },\n destroy: function () {\n Chart.fn.destroy.call(this);\n this._removeNavigatorDataSource();\n }\n });\n dataviz.ui.plugin(StockChart);\n function buildFilter(from, to) {\n return [\n {\n field: 'Date',\n operator: 'gte',\n value: from\n },\n {\n field: 'Date',\n operator: 'lt',\n value: to\n }\n ];\n }\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.stock', [\n 'dataviz/stock/kendo-stock-chart',\n 'dataviz/stock/stock-chart'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.stockchart',\n name: 'StockChart',\n category: 'dataviz',\n description: 'StockChart widget and associated financial series.',\n depends: ['dataviz.chart']\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/sparkline/kendo-sparkline', ['kendo.dataviz.chart'], f);\n}(function () {\n (function () {\n window.kendo.dataviz = window.kendo.dataviz || {};\n var dataviz = kendo.dataviz;\n var constants = dataviz.constants;\n var Chart = dataviz.Chart;\n var elementSize = dataviz.elementSize;\n var deepExtend = dataviz.deepExtend;\n var TOP_OFFSET = -2;\n var SharedTooltip$1 = dataviz.SharedTooltip.extend({\n _slotAnchor: function (coords, slot) {\n var axis = this.plotArea.categoryAxis;\n var vertical = axis.options.vertical;\n var align = vertical ? {\n horizontal: 'left',\n vertical: 'center'\n } : {\n horizontal: 'center',\n vertical: 'bottom'\n };\n var point;\n if (vertical) {\n point = new dataviz.Point(this.plotArea.box.x2, slot.center().y);\n } else {\n point = new dataviz.Point(slot.center().x, TOP_OFFSET);\n }\n return {\n point: point,\n align: align\n };\n },\n _defaultAnchor: function (point, slot) {\n return this._slotAnchor({}, slot);\n }\n });\n var DEAULT_BAR_WIDTH = 150;\n var DEAULT_BULLET_WIDTH = 150;\n var NO_CROSSHAIR = [\n constants.BAR,\n constants.BULLET\n ];\n function hide(children) {\n var state = [];\n for (var idx = 0; idx < children.length; idx++) {\n var child = children[idx];\n state[idx] = child.style.display;\n child.style.display = 'none';\n }\n return state;\n }\n function show(children, state) {\n for (var idx = 0; idx < children.length; idx++) {\n children[idx].style.display = state[idx];\n }\n }\n function wrapNumber(value) {\n return dataviz.isNumber(value) ? [value] : value;\n }\n var Sparkline = Chart.extend({\n _setElementClass: function (element) {\n dataviz.addClass(element, 'k-sparkline');\n },\n _initElement: function (element) {\n Chart.fn._initElement.call(this, element);\n this._initialWidth = Math.floor(elementSize(element).width);\n },\n _resize: function () {\n var element = this.element;\n var state = hide(element.childNodes);\n this._initialWidth = Math.floor(elementSize(element).width);\n show(element.childNodes, state);\n Chart.fn._resize.call(this);\n },\n _modelOptions: function () {\n var chartOptions = this.options;\n var stage = this._surfaceWrap();\n var displayState = hide(stage.childNodes);\n var space = document.createElement('span');\n space.innerHTML = ' ';\n stage.appendChild(space);\n var options = deepExtend({\n width: this._autoWidth,\n height: elementSize(stage).height,\n transitions: chartOptions.transitions\n }, chartOptions.chartArea, {\n inline: true,\n align: false\n });\n elementSize(stage, {\n width: options.width,\n height: options.height\n });\n stage.removeChild(space);\n show(stage.childNodes, displayState);\n if (this.surface) {\n this.surface.resize();\n }\n return options;\n },\n _surfaceWrap: function () {\n if (!this.stage) {\n var stage = this.stage = document.createElement('span');\n this.element.appendChild(stage);\n }\n return this.stage;\n },\n _createPlotArea: function (skipSeries) {\n var plotArea = Chart.fn._createPlotArea.call(this, skipSeries);\n this._autoWidth = this._initialWidth || this._calculateWidth(plotArea);\n return plotArea;\n },\n _calculateWidth: function (plotArea) {\n var options = this.options;\n var margin = dataviz.getSpacing(options.chartArea.margin);\n var charts = plotArea.charts;\n var stage = this._surfaceWrap();\n var total = 0;\n for (var i = 0; i < charts.length; i++) {\n var currentChart = charts[i];\n var firstSeries = (currentChart.options.series || [])[0];\n if (!firstSeries) {\n continue;\n }\n if (firstSeries.type === constants.BAR) {\n return DEAULT_BAR_WIDTH;\n }\n if (firstSeries.type === constants.BULLET) {\n return DEAULT_BULLET_WIDTH;\n }\n if (firstSeries.type === constants.PIE) {\n return elementSize(stage).height;\n }\n var categoryAxis = currentChart.categoryAxis;\n if (categoryAxis) {\n var pointsCount = categoryAxis.categoriesCount() * (!currentChart.options.isStacked && dataviz.inArray(firstSeries.type, [\n constants.COLUMN,\n constants.VERTICAL_BULLET\n ]) ? currentChart.seriesOptions.length : 1);\n total = Math.max(total, pointsCount);\n }\n }\n var size = total * options.pointWidth;\n if (size > 0) {\n size += margin.left + margin.right;\n }\n return size;\n },\n _createSharedTooltip: function (options) {\n return new SharedTooltip$1(this._plotArea, options);\n }\n });\n Sparkline.normalizeOptions = function (userOptions) {\n var options = wrapNumber(userOptions);\n if (dataviz.isArray(options)) {\n options = { seriesDefaults: { data: options } };\n } else {\n options = deepExtend({}, options);\n }\n if (!options.series) {\n options.series = [{ data: wrapNumber(options.data) }];\n }\n deepExtend(options, { seriesDefaults: { type: options.type } });\n if (dataviz.inArray(options.series[0].type, NO_CROSSHAIR) || dataviz.inArray(options.seriesDefaults.type, NO_CROSSHAIR)) {\n options = deepExtend({}, { categoryAxis: { crosshair: { visible: false } } }, options);\n }\n return options;\n };\n dataviz.setDefaultOptions(Sparkline, {\n chartArea: { margin: 2 },\n axisDefaults: {\n visible: false,\n majorGridLines: { visible: false },\n valueAxis: { narrowRange: true }\n },\n seriesDefaults: {\n type: 'line',\n area: { line: { width: 0.5 } },\n bar: { stack: true },\n padding: 2,\n width: 0.5,\n overlay: { gradient: null },\n highlight: { visible: false },\n border: { width: 0 },\n markers: {\n size: 2,\n visible: false\n }\n },\n tooltip: {\n visible: true,\n shared: true\n },\n categoryAxis: {\n crosshair: {\n visible: true,\n tooltip: { visible: false }\n }\n },\n legend: { visible: false },\n transitions: false,\n pointWidth: 5,\n panes: [{ clip: false }]\n });\n kendo.deepExtend(kendo.dataviz, { Sparkline: Sparkline });\n }());\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/sparkline/sparkline', ['dataviz/sparkline/kendo-sparkline'], f);\n}(function () {\n (function ($) {\n var dataviz = kendo.dataviz;\n var Chart = dataviz.ui.Chart;\n var KendoSparkline = dataviz.Sparkline;\n var ChartInstanceObserver = dataviz.ChartInstanceObserver;\n var extend = $.extend;\n var Sparkline = Chart.extend({\n init: function (element, userOptions) {\n var options = userOptions;\n if (options instanceof kendo.data.ObservableArray) {\n options = { seriesDefaults: { data: options } };\n }\n Chart.fn.init.call(this, element, KendoSparkline.normalizeOptions(options));\n },\n _createChart: function (options, themeOptions) {\n this._instance = new KendoSparkline(this.element[0], options, themeOptions, {\n observer: new ChartInstanceObserver(this),\n sender: this,\n rtl: this._isRtl()\n });\n },\n _createTooltip: function () {\n return new SparklineTooltip(this.element, extend({}, this.options.tooltip, { rtl: this._isRtl() }));\n },\n options: {\n name: 'Sparkline',\n chartArea: { margin: 2 },\n axisDefaults: {\n visible: false,\n majorGridLines: { visible: false },\n valueAxis: { narrowRange: true }\n },\n seriesDefaults: {\n type: 'line',\n area: { line: { width: 0.5 } },\n bar: { stack: true },\n padding: 2,\n width: 0.5,\n overlay: { gradient: null },\n highlight: { visible: false },\n border: { width: 0 },\n markers: {\n size: 2,\n visible: false\n }\n },\n tooltip: {\n visible: true,\n shared: true\n },\n categoryAxis: {\n crosshair: {\n visible: true,\n tooltip: { visible: false }\n }\n },\n legend: { visible: false },\n transitions: false,\n pointWidth: 5,\n panes: [{ clip: false }]\n }\n });\n dataviz.ui.plugin(Sparkline);\n var SparklineTooltip = dataviz.Tooltip.extend({\n options: { animation: { duration: 0 } },\n _hideElement: function () {\n if (this.element) {\n this.element.hide().remove();\n }\n }\n });\n dataviz.SparklineTooltip = SparklineTooltip;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.sparkline', [\n 'dataviz/sparkline/kendo-sparkline',\n 'dataviz/sparkline/sparkline'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.sparkline',\n name: 'Sparkline',\n category: 'dataviz',\n description: 'Sparkline widgets.',\n depends: ['dataviz.chart']\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('util/main', ['kendo.core'], f);\n}(function () {\n (function () {\n var kendo = window.kendo, deepExtend = kendo.deepExtend;\n function sqr(value) {\n return value * value;\n }\n var now = Date.now;\n if (!now) {\n now = function () {\n return new Date().getTime();\n };\n }\n function renderSize(size) {\n if (typeof size !== 'string') {\n size += 'px';\n }\n return size;\n }\n function renderPos(pos) {\n var result = [];\n if (pos) {\n var parts = kendo.toHyphens(pos).split('-');\n for (var i = 0; i < parts.length; i++) {\n result.push('k-pos-' + parts[i]);\n }\n }\n return result.join(' ');\n }\n function arabicToRoman(n) {\n var literals = {\n 1: 'i',\n 10: 'x',\n 100: 'c',\n 2: 'ii',\n 20: 'xx',\n 200: 'cc',\n 3: 'iii',\n 30: 'xxx',\n 300: 'ccc',\n 4: 'iv',\n 40: 'xl',\n 400: 'cd',\n 5: 'v',\n 50: 'l',\n 500: 'd',\n 6: 'vi',\n 60: 'lx',\n 600: 'dc',\n 7: 'vii',\n 70: 'lxx',\n 700: 'dcc',\n 8: 'viii',\n 80: 'lxxx',\n 800: 'dccc',\n 9: 'ix',\n 90: 'xc',\n 900: 'cm',\n 1000: 'm'\n };\n var values = [\n 1000,\n 900,\n 800,\n 700,\n 600,\n 500,\n 400,\n 300,\n 200,\n 100,\n 90,\n 80,\n 70,\n 60,\n 50,\n 40,\n 30,\n 20,\n 10,\n 9,\n 8,\n 7,\n 6,\n 5,\n 4,\n 3,\n 2,\n 1\n ];\n var roman = '';\n while (n > 0) {\n if (n < values[0]) {\n values.shift();\n } else {\n roman += literals[values[0]];\n n -= values[0];\n }\n }\n return roman;\n }\n function romanToArabic(r) {\n r = r.toLowerCase();\n var digits = {\n i: 1,\n v: 5,\n x: 10,\n l: 50,\n c: 100,\n d: 500,\n m: 1000\n };\n var value = 0, prev = 0;\n for (var i = 0; i < r.length; ++i) {\n var v = digits[r.charAt(i)];\n if (!v) {\n return null;\n }\n value += v;\n if (v > prev) {\n value -= 2 * prev;\n }\n prev = v;\n }\n return value;\n }\n function memoize(f) {\n var cache = Object.create(null);\n return function () {\n var id = '';\n for (var i = arguments.length; --i >= 0;) {\n id += ':' + arguments[i];\n }\n return id in cache ? cache[id] : cache[id] = f.apply(this, arguments);\n };\n }\n function isUnicodeLetter(ch) {\n return RX_UNICODE_LETTER.test(ch);\n }\n function withExit(f, obj) {\n try {\n return f.call(obj, function (value) {\n throw new Return(value);\n });\n } catch (ex) {\n if (ex instanceof Return) {\n return ex.value;\n }\n throw ex;\n }\n function Return(value) {\n this.value = value;\n }\n }\n deepExtend(kendo, {\n util: {\n now: now,\n renderPos: renderPos,\n renderSize: renderSize,\n sqr: sqr,\n romanToArabic: romanToArabic,\n arabicToRoman: arabicToRoman,\n memoize: memoize,\n isUnicodeLetter: isUnicodeLetter,\n withExit: withExit\n }\n });\n var RX_UNICODE_LETTER = new RegExp('[\\\\u0041-\\\\u005A\\\\u0061-\\\\u007A\\\\u00AA\\\\u00B5\\\\u00BA\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B2\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]');\n }());\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/location', [\n 'kendo.drawing',\n 'util/main'\n ], f);\n}(function () {\n (function ($, undefined) {\n var math = Math, abs = math.abs, atan = math.atan, atan2 = math.atan2, cos = math.cos, max = math.max, min = math.min, sin = math.sin, tan = math.tan, kendo = window.kendo, Class = kendo.Class, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, util = kendo.drawing.util, defined = util.defined, deg = util.deg, rad = util.rad, round = util.round, valueOrDefault = util.valueOrDefault, sqr = kendo.util.sqr;\n var Location = Class.extend({\n init: function (lat, lng) {\n if (arguments.length === 1) {\n this.lat = lat[0];\n this.lng = lat[1];\n } else {\n this.lat = lat;\n this.lng = lng;\n }\n },\n DISTANCE_ITERATIONS: 100,\n DISTANCE_CONVERGENCE: 1e-12,\n DISTANCE_PRECISION: 2,\n FORMAT: '{0:N6},{1:N6}',\n toArray: function () {\n return [\n this.lat,\n this.lng\n ];\n },\n equals: function (loc) {\n return loc && loc.lat === this.lat && loc.lng === this.lng;\n },\n clone: function () {\n return new Location(this.lat, this.lng);\n },\n round: function (precision) {\n this.lng = round(this.lng, precision);\n this.lat = round(this.lat, precision);\n return this;\n },\n wrap: function () {\n this.lng = this.lng % 180;\n this.lat = this.lat % 90;\n return this;\n },\n distanceTo: function (dest, datum) {\n return this.greatCircleTo(dest, datum).distance;\n },\n destination: function (distance, bearing, datum) {\n bearing = rad(bearing);\n datum = datum || dataviz.map.datums.WGS84;\n var fromLat = rad(this.lat);\n var fromLng = rad(this.lng);\n var dToR = distance / kendo.dataviz.map.datums.WGS84.a;\n var lat = math.asin(sin(fromLat) * cos(dToR) + cos(fromLat) * sin(dToR) * cos(bearing));\n var lng = fromLng + atan2(sin(bearing) * sin(dToR) * cos(fromLat), cos(dToR) - sin(fromLat) * sin(lat));\n return new Location(deg(lat), deg(lng));\n },\n greatCircleTo: function (dest, datum) {\n dest = Location.create(dest);\n datum = datum || dataviz.map.datums.WGS84;\n if (!dest || this.clone().round(8).equals(dest.clone().round(8))) {\n return {\n distance: 0,\n azimuthFrom: 0,\n azimuthTo: 0\n };\n }\n var a = datum.a;\n var b = datum.b;\n var f = datum.f;\n var L = rad(dest.lng - this.lng);\n var U1 = atan((1 - f) * tan(rad(this.lat)));\n var sinU1 = sin(U1);\n var cosU1 = cos(U1);\n var U2 = atan((1 - f) * tan(rad(dest.lat)));\n var sinU2 = sin(U2);\n var cosU2 = cos(U2);\n var lambda = L;\n var prevLambda;\n var i = this.DISTANCE_ITERATIONS;\n var converged = false;\n var sinLambda;\n var cosLambda;\n var sino;\n var cosA2;\n var coso;\n var cos2om;\n var sigma;\n while (!converged && i-- > 0) {\n sinLambda = sin(lambda);\n cosLambda = cos(lambda);\n sino = math.sqrt(sqr(cosU2 * sinLambda) + sqr(cosU1 * sinU2 - sinU1 * cosU2 * cosLambda));\n coso = sinU1 * sinU2 + cosU1 * cosU2 * cosLambda;\n sigma = atan2(sino, coso);\n var sinA = cosU1 * cosU2 * sinLambda / sino;\n cosA2 = 1 - sqr(sinA);\n cos2om = 0;\n if (cosA2 !== 0) {\n cos2om = coso - 2 * sinU1 * sinU2 / cosA2;\n }\n prevLambda = lambda;\n var C = f / 16 * cosA2 * (4 + f * (4 - 3 * cosA2));\n lambda = L + (1 - C) * f * sinA * (sigma + C * sino * (cos2om + C * coso * (-1 + 2 * sqr(cos2om))));\n converged = abs(lambda - prevLambda) <= this.DISTANCE_CONVERGENCE;\n }\n var u2 = cosA2 * (sqr(a) - sqr(b)) / sqr(b);\n var A = 1 + u2 / 16384 * (4096 + u2 * (-768 + u2 * (320 - 175 * u2)));\n var B = u2 / 1024 * (256 + u2 * (-128 + u2 * (74 - 47 * u2)));\n var deltao = B * sino * (cos2om + B / 4 * (coso * (-1 + 2 * sqr(cos2om)) - B / 6 * cos2om * (-3 + 4 * sqr(sino)) * (-3 + 4 * sqr(cos2om))));\n var azimuthFrom = atan2(cosU2 * sinLambda, cosU1 * sinU2 - sinU1 * cosU2 * cosLambda);\n var azimuthTo = atan2(cosU1 * sinLambda, -sinU1 * cosU2 + cosU1 * sinU2 * cosLambda);\n return {\n distance: round(b * A * (sigma - deltao), this.DISTANCE_PRECISION),\n azimuthFrom: deg(azimuthFrom),\n azimuthTo: deg(azimuthTo)\n };\n }\n });\n Location.fn.toString = function () {\n return kendo.format(this.FORMAT, this.lat, this.lng);\n };\n Location.fromLngLat = function (ll) {\n return new Location(ll[1], ll[0]);\n };\n Location.fromLatLng = function (ll) {\n return new Location(ll[0], ll[1]);\n };\n Location.create = function (a, b) {\n if (defined(a)) {\n if (a instanceof Location) {\n return a.clone();\n } else if (arguments.length === 1 && a.length === 2) {\n return Location.fromLatLng(a);\n } else {\n return new Location(a, b);\n }\n }\n };\n var Extent = Class.extend({\n init: function (nw, se) {\n nw = Location.create(nw);\n se = Location.create(se);\n if (nw.lng + 180 > se.lng + 180 && nw.lat + 90 < se.lat + 90) {\n this.se = nw;\n this.nw = se;\n } else {\n this.se = se;\n this.nw = nw;\n }\n },\n contains: function (loc) {\n var nw = this.nw, se = this.se, lng = valueOrDefault(loc.lng, loc[1]), lat = valueOrDefault(loc.lat, loc[0]);\n return loc && lng + 180 >= nw.lng + 180 && lng + 180 <= se.lng + 180 && lat + 90 >= se.lat + 90 && lat + 90 <= nw.lat + 90;\n },\n center: function () {\n var nw = this.nw;\n var se = this.se;\n var lng = nw.lng + (se.lng - nw.lng) / 2;\n var lat = nw.lat + (se.lat - nw.lat) / 2;\n return new Location(lat, lng);\n },\n containsAny: function (locs) {\n var result = false;\n for (var i = 0; i < locs.length; i++) {\n result = result || this.contains(locs[i]);\n }\n return result;\n },\n include: function (loc) {\n var nw = this.nw, se = this.se, lng = valueOrDefault(loc.lng, loc[1]), lat = valueOrDefault(loc.lat, loc[0]);\n nw.lng = min(nw.lng, lng);\n nw.lat = max(nw.lat, lat);\n se.lng = max(se.lng, lng);\n se.lat = min(se.lat, lat);\n },\n includeAll: function (locs) {\n for (var i = 0; i < locs.length; i++) {\n this.include(locs[i]);\n }\n },\n edges: function () {\n var nw = this.nw, se = this.se;\n return {\n nw: this.nw,\n ne: new Location(nw.lat, se.lng),\n se: this.se,\n sw: new Location(se.lat, nw.lng)\n };\n },\n toArray: function () {\n var nw = this.nw, se = this.se;\n return [\n nw,\n new Location(nw.lat, se.lng),\n se,\n new Location(se.lat, nw.lng)\n ];\n },\n overlaps: function (extent) {\n return this.containsAny(extent.toArray()) || extent.containsAny(this.toArray());\n }\n });\n Extent.World = new Extent([\n 90,\n -180\n ], [\n -90,\n 180\n ]);\n Extent.create = function (a, b) {\n if (a instanceof Extent) {\n return a;\n } else if (a && b) {\n return new Extent(a, b);\n } else if (a && a.length === 4 && !b) {\n return new Extent([\n a[0],\n a[1]\n ], [\n a[2],\n a[3]\n ]);\n }\n };\n deepExtend(dataviz, {\n map: {\n Extent: Extent,\n Location: Location\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/attribution', ['kendo.drawing'], f);\n}(function () {\n (function () {\n var kendo = window.kendo, Widget = kendo.ui.Widget, template = kendo.template, util = kendo.drawing.util, valueOrDefault = util.valueOrDefault, defined = util.defined;\n var Attribution = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this._initOptions(options);\n this.items = [];\n this.element.addClass('k-widget k-attribution');\n },\n options: {\n name: 'Attribution',\n separator: ' | ',\n itemTemplate: '#= text #'\n },\n filter: function (extent, zoom) {\n this._extent = extent;\n this._zoom = zoom;\n this._render();\n },\n add: function (item) {\n if (defined(item)) {\n if (typeof item === 'string') {\n item = { text: item };\n }\n this.items.push(item);\n this._render();\n }\n },\n remove: function (text) {\n var result = [];\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n if (item.text !== text) {\n result.push(item);\n }\n }\n this.items = result;\n this._render();\n },\n clear: function () {\n this.items = [];\n this.element.empty();\n },\n _render: function () {\n var result = [];\n var itemTemplate = template(this.options.itemTemplate);\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n var text = this._itemText(item);\n if (text !== '') {\n result.push(itemTemplate({ text: text }));\n }\n }\n if (result.length > 0) {\n this.element.empty().append(result.join(this.options.separator)).show();\n } else {\n this.element.hide();\n }\n },\n _itemText: function (item) {\n var text = '';\n var inZoomLevel = this._inZoomLevel(item.minZoom, item.maxZoom);\n var inArea = this._inArea(item.extent);\n if (inZoomLevel && inArea) {\n text += item.text;\n }\n return text;\n },\n _inZoomLevel: function (min, max) {\n var result = true;\n min = valueOrDefault(min, -Number.MAX_VALUE);\n max = valueOrDefault(max, Number.MAX_VALUE);\n result = this._zoom > min && this._zoom < max;\n return result;\n },\n _inArea: function (area) {\n var result = true;\n if (area) {\n result = area.contains(this._extent);\n }\n return result;\n }\n });\n kendo.dataviz.ui.plugin(Attribution);\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/navigator', ['kendo.core'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var Widget = kendo.ui.Widget;\n var keys = kendo.keys;\n var proxy = $.proxy;\n var NS = '.kendoNavigator';\n function button(dir) {\n return kendo.format('', dir);\n }\n var BUTTONS = button('up') + button('right') + button('down') + button('left');\n var Navigator = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this._initOptions(options);\n this.element.addClass('k-widget k-header k-shadow k-navigator').append(BUTTONS).on('click' + NS, '.k-button', proxy(this, '_click'));\n var parentElement = this.element.parent().closest('[' + kendo.attr('role') + ']');\n this._keyroot = parentElement.length > 0 ? parentElement : this.element;\n this._tabindex(this._keyroot);\n this._keydown = proxy(this._keydown, this);\n this._keyroot.on('keydown', this._keydown);\n },\n options: {\n name: 'Navigator',\n panStep: 1\n },\n events: ['pan'],\n dispose: function () {\n this._keyroot.off('keydown', this._keydown);\n },\n _pan: function (x, y) {\n var panStep = this.options.panStep;\n this.trigger('pan', {\n x: x * panStep,\n y: y * panStep\n });\n },\n _click: function (e) {\n var x = 0;\n var y = 0;\n var button = $(e.currentTarget);\n if (button.is('.k-navigator-up')) {\n y = 1;\n } else if (button.is('.k-navigator-down')) {\n y = -1;\n } else if (button.is('.k-navigator-right')) {\n x = 1;\n } else if (button.is('.k-navigator-left')) {\n x = -1;\n }\n this._pan(x, y);\n e.preventDefault();\n },\n _keydown: function (e) {\n switch (e.which) {\n case keys.UP:\n this._pan(0, 1);\n e.preventDefault();\n break;\n case keys.DOWN:\n this._pan(0, -1);\n e.preventDefault();\n break;\n case keys.RIGHT:\n this._pan(1, 0);\n e.preventDefault();\n break;\n case keys.LEFT:\n this._pan(-1, 0);\n e.preventDefault();\n break;\n }\n }\n });\n kendo.dataviz.ui.plugin(Navigator);\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/zoom', ['kendo.core'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var Widget = kendo.ui.Widget;\n var keys = kendo.keys;\n var proxy = $.proxy;\n function button(dir, iconClass) {\n return kendo.format('', dir, iconClass);\n }\n var NS = '.kendoZoomControl';\n var BUTTONS = button('in', 'k-i-plus') + button('out', 'k-i-minus');\n var PLUS = 187;\n var MINUS = 189;\n var FF_PLUS = 61;\n var FF_MINUS = 173;\n var ZoomControl = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this._initOptions(options);\n this.element.addClass('k-widget k-zoom-control k-button-wrap k-buttons-horizontal k-button-group k-group-horizontal').append(BUTTONS).on('click' + NS, '.k-button', proxy(this, '_click'));\n var parentElement = this.element.parent().closest('[' + kendo.attr('role') + ']');\n this._keyroot = parentElement.length > 0 ? parentElement : this.element;\n this._tabindex(this._keyroot);\n this._keydown = proxy(this._keydown, this);\n this._keyroot.on('keydown', this._keydown);\n },\n options: {\n name: 'ZoomControl',\n zoomStep: 1\n },\n events: ['change'],\n _change: function (dir) {\n var zoomStep = this.options.zoomStep;\n this.trigger('change', { delta: dir * zoomStep });\n },\n _click: function (e) {\n var button = $(e.currentTarget);\n var dir = 1;\n if (button.is('.k-zoom-out')) {\n dir = -1;\n }\n this._change(dir);\n e.preventDefault();\n },\n _keydown: function (e) {\n switch (e.which) {\n case keys.NUMPAD_PLUS:\n case PLUS:\n case FF_PLUS:\n this._change(1);\n break;\n case keys.NUMPAD_MINUS:\n case MINUS:\n case FF_MINUS:\n this._change(-1);\n break;\n }\n }\n });\n kendo.dataviz.ui.plugin(ZoomControl);\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/crs', [\n 'dataviz/map/location',\n 'kendo.drawing'\n ], f);\n}(function () {\n (function ($, undefined) {\n var math = Math, atan = math.atan, exp = math.exp, pow = math.pow, sin = math.sin, log = math.log, tan = math.tan, kendo = window.kendo, Class = kendo.Class, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, g = kendo.geometry, Point = g.Point, map = dataviz.map, Location = map.Location, util = kendo.drawing.util, rad = util.rad, deg = util.deg, limit = util.limitValue;\n var PI = math.PI, PI_DIV_2 = PI / 2, PI_DIV_4 = PI / 4, DEG_TO_RAD = PI / 180;\n var WGS84 = {\n a: 6378137,\n b: 6356752.314245179,\n f: 0.0033528106647474805,\n e: 0.08181919084262149\n };\n var Mercator = Class.extend({\n init: function (options) {\n this._initOptions(options);\n },\n MAX_LNG: 180,\n MAX_LAT: 85.0840590501,\n INVERSE_ITERATIONS: 15,\n INVERSE_CONVERGENCE: 1e-12,\n options: {\n centralMeridian: 0,\n datum: WGS84\n },\n forward: function (loc, clamp) {\n var proj = this, options = proj.options, datum = options.datum, r = datum.a, lng0 = options.centralMeridian, lat = limit(loc.lat, -proj.MAX_LAT, proj.MAX_LAT), lng = clamp ? limit(loc.lng, -proj.MAX_LNG, proj.MAX_LNG) : loc.lng, x = rad(lng - lng0) * r, y = proj._projectLat(lat);\n return new Point(x, y);\n },\n _projectLat: function (lat) {\n var datum = this.options.datum, ecc = datum.e, r = datum.a, y = rad(lat), ts = tan(PI_DIV_4 + y / 2), con = ecc * sin(y), p = pow((1 - con) / (1 + con), ecc / 2);\n return r * log(ts * p);\n },\n inverse: function (point, clamp) {\n var proj = this, options = proj.options, datum = options.datum, r = datum.a, lng0 = options.centralMeridian, lng = point.x / (DEG_TO_RAD * r) + lng0, lat = limit(proj._inverseY(point.y), -proj.MAX_LAT, proj.MAX_LAT);\n if (clamp) {\n lng = limit(lng, -proj.MAX_LNG, proj.MAX_LNG);\n }\n return new Location(lat, lng);\n },\n _inverseY: function (y) {\n var proj = this, datum = proj.options.datum, r = datum.a, ecc = datum.e, ecch = ecc / 2, ts = exp(-y / r), phi = PI_DIV_2 - 2 * atan(ts), i;\n for (i = 0; i <= proj.INVERSE_ITERATIONS; i++) {\n var con = ecc * sin(phi), p = pow((1 - con) / (1 + con), ecch), dphi = PI_DIV_2 - 2 * atan(ts * p) - phi;\n phi += dphi;\n if (math.abs(dphi) <= proj.INVERSE_CONVERGENCE) {\n break;\n }\n }\n return deg(phi);\n }\n });\n var SphericalMercator = Mercator.extend({\n MAX_LAT: 85.0511287798,\n _projectLat: function (lat) {\n var r = this.options.datum.a, y = rad(lat), ts = tan(PI_DIV_4 + y / 2);\n return r * log(ts);\n },\n _inverseY: function (y) {\n var r = this.options.datum.a, ts = exp(-y / r);\n return deg(PI_DIV_2 - 2 * atan(ts));\n }\n });\n var Equirectangular = Class.extend({\n forward: function (loc) {\n return new Point(loc.lng, loc.lat);\n },\n inverse: function (point) {\n return new Location(point.y, point.x);\n }\n });\n var EPSG3857 = Class.extend({\n init: function () {\n var crs = this, proj = crs._proj = new SphericalMercator();\n var c = this.c = 2 * PI * proj.options.datum.a;\n this._tm = g.transform().translate(0.5, 0.5).scale(1 / c, -1 / c);\n this._itm = g.transform().scale(c, -c).translate(-0.5, -0.5);\n },\n toPoint: function (loc, scale, clamp) {\n var point = this._proj.forward(loc, clamp);\n return point.transform(this._tm).scale(scale || 1);\n },\n toLocation: function (point, scale, clamp) {\n point = point.clone().scale(1 / (scale || 1)).transform(this._itm);\n return this._proj.inverse(point, clamp);\n }\n });\n var EPSG3395 = Class.extend({\n init: function () {\n this._proj = new Mercator();\n },\n toPoint: function (loc) {\n return this._proj.forward(loc);\n },\n toLocation: function (point) {\n return this._proj.inverse(point);\n }\n });\n var EPSG4326 = Class.extend({\n init: function () {\n this._proj = new Equirectangular();\n },\n toPoint: function (loc) {\n return this._proj.forward(loc);\n },\n toLocation: function (point) {\n return this._proj.inverse(point);\n }\n });\n deepExtend(dataviz, {\n map: {\n crs: {\n EPSG3395: EPSG3395,\n EPSG3857: EPSG3857,\n EPSG4326: EPSG4326\n },\n datums: { WGS84: WGS84 },\n projections: {\n Equirectangular: Equirectangular,\n Mercator: Mercator,\n SphericalMercator: SphericalMercator\n }\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/base', [\n 'kendo.core',\n 'dataviz/map/location'\n ], f);\n}(function () {\n (function ($, undefined) {\n var proxy = $.proxy, kendo = window.kendo, Class = kendo.Class, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, Extent = dataviz.map.Extent, util = kendo.drawing.util, defined = util.defined;\n var Layer = Class.extend({\n init: function (map, options) {\n this._initOptions(options);\n this.map = map;\n this.element = $('
    ').css({\n 'zIndex': this.options.zIndex,\n 'opacity': this.options.opacity\n }).appendTo(map.scrollElement);\n this._beforeReset = proxy(this._beforeReset, this);\n this._reset = proxy(this._reset, this);\n this._resize = proxy(this._resize, this);\n this._panEnd = proxy(this._panEnd, this);\n this._activate();\n this._updateAttribution();\n },\n destroy: function () {\n this._deactivate();\n },\n show: function () {\n this.reset();\n this._activate();\n this._applyExtent(true);\n },\n hide: function () {\n this._deactivate();\n this._setVisibility(false);\n },\n reset: function () {\n this._beforeReset();\n this._reset();\n },\n _reset: function () {\n this._applyExtent();\n },\n _beforeReset: $.noop,\n _resize: $.noop,\n _panEnd: function () {\n this._applyExtent();\n },\n _applyExtent: function () {\n var options = this.options;\n var zoom = this.map.zoom();\n var matchMinZoom = !defined(options.minZoom) || zoom >= options.minZoom;\n var matchMaxZoom = !defined(options.maxZoom) || zoom <= options.maxZoom;\n var extent = Extent.create(options.extent);\n var inside = !extent || extent.overlaps(this.map.extent());\n this._setVisibility(matchMinZoom && matchMaxZoom && inside);\n },\n _setVisibility: function (visible) {\n this.element.css('display', visible ? '' : 'none');\n },\n _activate: function () {\n var map = this.map;\n map.bind('beforeReset', this._beforeReset);\n map.bind('reset', this._reset);\n map.bind('resize', this._resize);\n map.bind('panEnd', this._panEnd);\n },\n _deactivate: function () {\n var map = this.map;\n map.unbind('beforeReset', this._beforeReset);\n map.unbind('reset', this._reset);\n map.unbind('resize', this._resize);\n map.unbind('panEnd', this._panEnd);\n },\n _updateAttribution: function () {\n var attr = this.map.attribution;\n if (attr) {\n attr.add(this.options.attribution);\n }\n }\n });\n deepExtend(dataviz, { map: { layers: { Layer: Layer } } });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/shape', [\n 'dataviz/map/layers/base',\n 'dataviz/map/location'\n ], f);\n}(function () {\n (function ($, undefined) {\n var proxy = $.proxy, kendo = window.kendo, Class = kendo.Class, DataSource = kendo.data.DataSource, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, g = kendo.geometry, d = kendo.drawing, Group = d.Group, last = d.util.last, defined = d.util.defined, map = dataviz.map, Location = map.Location, Layer = map.layers.Layer;\n var ShapeLayer = Layer.extend({\n init: function (map, options) {\n this._pan = proxy(this._pan, this);\n Layer.fn.init.call(this, map, options);\n this.surface = d.Surface.create(this.element, {\n width: map.scrollElement.width(),\n height: map.scrollElement.height()\n });\n this._initRoot();\n this.movable = new kendo.ui.Movable(this.surface.element);\n this._markers = [];\n this._click = this._handler('shapeClick');\n this.surface.bind('click', this._click);\n this._mouseenter = this._handler('shapeMouseEnter');\n this.surface.bind('mouseenter', this._mouseenter);\n this._mouseleave = this._handler('shapeMouseLeave');\n this.surface.bind('mouseleave', this._mouseleave);\n this._initDataSource();\n },\n options: { autoBind: true },\n destroy: function () {\n Layer.fn.destroy.call(this);\n this.surface.destroy();\n this.dataSource.unbind('change', this._dataChange);\n },\n setDataSource: function (dataSource) {\n if (this.dataSource) {\n this.dataSource.unbind('change', this._dataChange);\n }\n this.dataSource = kendo.data.DataSource.create(dataSource);\n this.dataSource.bind('change', this._dataChange);\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _reset: function () {\n Layer.fn._reset.call(this);\n this._translateSurface();\n if (this._data) {\n this._load(this._data);\n }\n },\n _initRoot: function () {\n this._root = new Group();\n this.surface.draw(this._root);\n },\n _beforeReset: function () {\n this.surface.clear();\n this._initRoot();\n },\n _resize: function () {\n this.surface.size(this.map.size());\n },\n _initDataSource: function () {\n var dsOptions = this.options.dataSource;\n this._dataChange = proxy(this._dataChange, this);\n this.dataSource = DataSource.create(dsOptions).bind('change', this._dataChange);\n if (dsOptions && this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _dataChange: function (e) {\n this._data = e.sender.view();\n this._load(this._data);\n },\n _load: function (data) {\n this._clearMarkers();\n if (!this._loader) {\n this._loader = new GeoJSONLoader(this.map, this.options.style, this);\n }\n var container = new Group();\n for (var i = 0; i < data.length; i++) {\n var shape = this._loader.parse(data[i]);\n if (shape) {\n container.append(shape);\n }\n }\n this._root.clear();\n this._root.append(container);\n },\n shapeCreated: function (shape) {\n var cancelled = false;\n if (shape instanceof d.Circle) {\n cancelled = defined(this._createMarker(shape));\n }\n if (!cancelled) {\n var args = {\n layer: this,\n shape: shape\n };\n cancelled = this.map.trigger('shapeCreated', args);\n }\n return cancelled;\n },\n featureCreated: function (e) {\n e.layer = this;\n this.map.trigger('shapeFeatureCreated', e);\n },\n _createMarker: function (shape) {\n var marker = this.map.markers.bind({ location: shape.location }, shape.dataItem);\n if (marker) {\n this._markers.push(marker);\n }\n return marker;\n },\n _clearMarkers: function () {\n for (var i = 0; i < this._markers.length; i++) {\n this.map.markers.remove(this._markers[i]);\n }\n this._markers = [];\n },\n _pan: function () {\n if (!this._panning) {\n this._panning = true;\n this.surface.suspendTracking();\n }\n },\n _panEnd: function (e) {\n Layer.fn._panEnd.call(this, e);\n this._translateSurface();\n this.surface.resumeTracking();\n this._panning = false;\n },\n _translateSurface: function () {\n var map = this.map;\n var nw = map.locationToView(map.extent().nw);\n if (this.surface.translate) {\n this.surface.translate(nw);\n this.movable.moveTo({\n x: nw.x,\n y: nw.y\n });\n }\n },\n _handler: function (event) {\n var layer = this;\n return function (e) {\n if (e.element) {\n var args = {\n layer: layer,\n shape: e.element,\n originalEvent: e.originalEvent\n };\n layer.map.trigger(event, args);\n }\n };\n },\n _activate: function () {\n Layer.fn._activate.call(this);\n this.map.bind('pan', this._pan);\n },\n _deactivate: function () {\n Layer.fn._deactivate.call(this);\n this.map.unbind('pan', this._pan);\n }\n });\n var GeoJSONLoader = Class.extend({\n init: function (locator, defaultStyle, observer) {\n this.observer = observer;\n this.locator = locator;\n this.style = defaultStyle;\n },\n parse: function (item) {\n var root = new Group();\n var unwrap = true;\n if (item.type === 'Feature') {\n unwrap = false;\n this._loadGeometryTo(root, item.geometry, item);\n this._featureCreated(root, item);\n } else {\n this._loadGeometryTo(root, item, item);\n }\n if (unwrap && root.children.length < 2) {\n root = root.children[0];\n }\n return root;\n },\n _shapeCreated: function (shape) {\n var cancelled = false;\n if (this.observer && this.observer.shapeCreated) {\n cancelled = this.observer.shapeCreated(shape);\n }\n return cancelled;\n },\n _featureCreated: function (group, dataItem) {\n if (this.observer && this.observer.featureCreated) {\n this.observer.featureCreated({\n group: group,\n dataItem: dataItem,\n properties: dataItem.properties\n });\n }\n },\n _loadGeometryTo: function (container, geometry, dataItem) {\n var coords = geometry.coordinates;\n var i;\n var path;\n switch (geometry.type) {\n case 'LineString':\n path = this._loadPolygon(container, [coords], dataItem);\n this._setLineFill(path);\n break;\n case 'MultiLineString':\n for (i = 0; i < coords.length; i++) {\n path = this._loadPolygon(container, [coords[i]], dataItem);\n this._setLineFill(path);\n }\n break;\n case 'Polygon':\n this._loadPolygon(container, coords, dataItem);\n break;\n case 'MultiPolygon':\n for (i = 0; i < coords.length; i++) {\n this._loadPolygon(container, coords[i], dataItem);\n }\n break;\n case 'Point':\n this._loadPoint(container, coords, dataItem);\n break;\n case 'MultiPoint':\n for (i = 0; i < coords.length; i++) {\n this._loadPoint(container, coords[i], dataItem);\n }\n break;\n }\n },\n _setLineFill: function (path) {\n var segments = path.segments;\n if (segments.length < 4 || !segments[0].anchor().equals(last(segments).anchor())) {\n path.options.fill = null;\n }\n },\n _loadShape: function (container, shape) {\n if (!this._shapeCreated(shape)) {\n container.append(shape);\n }\n return shape;\n },\n _loadPolygon: function (container, rings, dataItem) {\n var shape = this._buildPolygon(rings);\n shape.dataItem = dataItem;\n return this._loadShape(container, shape);\n },\n _buildPolygon: function (rings) {\n var type = rings.length > 1 ? d.MultiPath : d.Path;\n var path = new type(this.style);\n for (var i = 0; i < rings.length; i++) {\n for (var j = 0; j < rings[i].length; j++) {\n var point = this.locator.locationToView(Location.fromLngLat(rings[i][j]));\n if (j === 0) {\n path.moveTo(point.x, point.y);\n } else {\n path.lineTo(point.x, point.y);\n }\n }\n }\n return path;\n },\n _loadPoint: function (container, coords, dataItem) {\n var location = Location.fromLngLat(coords);\n var point = this.locator.locationToView(location);\n var circle = new g.Circle(point, 10);\n var shape = new d.Circle(circle, this.style);\n shape.dataItem = dataItem;\n shape.location = location;\n return this._loadShape(container, shape);\n }\n });\n deepExtend(kendo.data, {\n schemas: {\n geojson: {\n type: 'json',\n data: function (data) {\n if (data.type === 'FeatureCollection') {\n return data.features;\n }\n if (data.type === 'GeometryCollection') {\n return data.geometries;\n }\n return data;\n }\n }\n },\n transports: { geojson: { read: { dataType: 'json' } } }\n });\n deepExtend(dataviz, {\n map: {\n layers: {\n shape: ShapeLayer,\n ShapeLayer: ShapeLayer\n },\n GeoJSONLoader: GeoJSONLoader\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/bubble', ['dataviz/map/layers/shape'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, getter = kendo.getter, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, g = kendo.geometry, d = kendo.drawing, util = d.util, defined = util.defined, map = dataviz.map, Location = map.Location, ShapeLayer = map.layers.ShapeLayer;\n var BubbleLayer = ShapeLayer.extend({\n options: {\n autoBind: true,\n locationField: 'location',\n valueField: 'value',\n minSize: 0,\n maxSize: 100,\n scale: 'sqrt',\n symbol: 'circle'\n },\n _load: function (data) {\n this.surface.clear();\n if (data.length === 0) {\n return;\n }\n var opt = this.options;\n var getValue = getter(opt.valueField);\n data = data.slice(0);\n data.sort(function (a, b) {\n return getValue(b) - getValue(a);\n });\n var scaleType = this._scaleType();\n var scale;\n for (var i = 0; i < data.length; i++) {\n var dataItem = data[i];\n var location = getter(opt.locationField)(dataItem);\n var value = getter(opt.valueField)(dataItem);\n if (defined(location) && defined(value)) {\n if (!scale) {\n scale = new scaleType([\n 0,\n value\n ], [\n opt.minSize,\n opt.maxSize\n ]);\n }\n location = Location.create(location);\n var center = this.map.locationToView(location);\n var size = scale.map(value);\n var symbol = this._createSymbol({\n center: center,\n size: size,\n style: opt.style,\n dataItem: dataItem,\n location: location\n });\n symbol.dataItem = dataItem;\n symbol.location = location;\n symbol.value = value;\n this._drawSymbol(symbol);\n }\n }\n },\n _scaleType: function () {\n var scale = this.options.scale;\n if (kendo.isFunction(scale)) {\n return scale;\n }\n return dataviz.map.scales[scale];\n },\n _createSymbol: function (args) {\n var symbol = this.options.symbol;\n if (!kendo.isFunction(symbol)) {\n symbol = dataviz.map.symbols[symbol];\n }\n return symbol(args);\n },\n _drawSymbol: function (shape) {\n var args = {\n layer: this,\n shape: shape\n };\n var cancelled = this.map.trigger('shapeCreated', args);\n if (!cancelled) {\n this.surface.draw(shape);\n }\n }\n });\n var SqrtScale = kendo.Class.extend({\n init: function (domain, range) {\n this._domain = domain;\n this._range = range;\n var domainRange = Math.sqrt(domain[1]) - Math.sqrt(domain[0]);\n var outputRange = range[1] - range[0];\n this._ratio = outputRange / domainRange;\n },\n map: function (value) {\n var rel = (Math.sqrt(value) - Math.sqrt(this._domain[0])) * this._ratio;\n return this._range[0] + rel;\n }\n });\n var Symbols = {\n circle: function (args) {\n var geo = new g.Circle(args.center, args.size / 2);\n return new d.Circle(geo, args.style);\n },\n square: function (args) {\n var path = new d.Path(args.style);\n var halfSize = args.size / 2;\n var center = args.center;\n path.moveTo(center.x - halfSize, center.y - halfSize).lineTo(center.x + halfSize, center.y - halfSize).lineTo(center.x + halfSize, center.y + halfSize).lineTo(center.x - halfSize, center.y + halfSize).close();\n return path;\n }\n };\n deepExtend(dataviz, {\n map: {\n layers: {\n bubble: BubbleLayer,\n BubbleLayer: BubbleLayer\n },\n scales: { sqrt: SqrtScale },\n symbols: Symbols\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/tile', [\n 'dataviz/map/layers/base',\n 'dataviz/map/location'\n ], f);\n}(function () {\n (function ($, undefined) {\n var math = Math, proxy = $.proxy, kendo = window.kendo, Class = kendo.Class, template = kendo.template, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, g = kendo.geometry, Point = g.Point, Layer = dataviz.map.layers.Layer, util = kendo.util, renderSize = util.renderSize, drawingUtil = kendo.drawing.util, round = drawingUtil.round, limit = drawingUtil.limitValue;\n var TileLayer = Layer.extend({\n init: function (map, options) {\n Layer.fn.init.call(this, map, options);\n if (typeof this.options.subdomains === 'string') {\n this.options.subdomains = this.options.subdomains.split('');\n }\n var viewType = this._viewType();\n this._view = new viewType(this.element, this.options);\n },\n destroy: function () {\n Layer.fn.destroy.call(this);\n this._view.destroy();\n this._view = null;\n },\n _beforeReset: function () {\n var map = this.map;\n var origin = map.locationToLayer(map.extent().nw).round();\n this._view.viewOrigin(origin);\n },\n _reset: function () {\n Layer.fn._reset.call(this);\n this._updateView();\n this._view.reset();\n },\n _viewType: function () {\n return TileView;\n },\n _activate: function () {\n Layer.fn._activate.call(this);\n if (!kendo.support.mobileOS) {\n if (!this._pan) {\n this._pan = kendo.throttle(proxy(this._render, this), 100);\n }\n this.map.bind('pan', this._pan);\n }\n },\n _deactivate: function () {\n Layer.fn._deactivate.call(this);\n if (this._pan) {\n this.map.unbind('pan', this._pan);\n }\n },\n _updateView: function () {\n var view = this._view, map = this.map, extent = map.extent(), extentToPoint = {\n nw: map.locationToLayer(extent.nw).round(),\n se: map.locationToLayer(extent.se).round()\n };\n view.center(map.locationToLayer(map.center()));\n view.extent(extentToPoint);\n view.zoom(map.zoom());\n },\n _resize: function () {\n this._render();\n },\n _panEnd: function (e) {\n Layer.fn._panEnd.call(this, e);\n this._render();\n },\n _render: function () {\n this._updateView();\n this._view.render();\n }\n });\n var TileView = Class.extend({\n init: function (element, options) {\n this.element = element;\n this._initOptions(options);\n this.pool = new TilePool();\n },\n options: {\n tileSize: 256,\n subdomains: [\n 'a',\n 'b',\n 'c'\n ],\n urlTemplate: ''\n },\n center: function (center) {\n this._center = center;\n },\n extent: function (extent) {\n this._extent = extent;\n },\n viewOrigin: function (origin) {\n this._viewOrigin = origin;\n },\n zoom: function (zoom) {\n this._zoom = zoom;\n },\n pointToTileIndex: function (point) {\n return new Point(math.floor(point.x / this.options.tileSize), math.floor(point.y / this.options.tileSize));\n },\n tileCount: function () {\n var size = this.size(), firstTileIndex = this.pointToTileIndex(this._extent.nw), nw = this._extent.nw, point = this.indexToPoint(firstTileIndex).translate(-nw.x, -nw.y);\n return {\n x: math.ceil((math.abs(point.x) + size.width) / this.options.tileSize),\n y: math.ceil((math.abs(point.y) + size.height) / this.options.tileSize)\n };\n },\n size: function () {\n var nw = this._extent.nw, se = this._extent.se, diff = se.clone().translate(-nw.x, -nw.y);\n return {\n width: diff.x,\n height: diff.y\n };\n },\n indexToPoint: function (index) {\n var x = index.x, y = index.y;\n return new Point(x * this.options.tileSize, y * this.options.tileSize);\n },\n subdomainText: function () {\n var subdomains = this.options.subdomains;\n return subdomains[this.subdomainIndex++ % subdomains.length];\n },\n destroy: function () {\n this.element.empty();\n this.pool.empty();\n },\n reset: function () {\n this.pool.reset();\n this.subdomainIndex = 0;\n this.render();\n },\n render: function () {\n var size = this.tileCount(), firstTileIndex = this.pointToTileIndex(this._extent.nw), tile, x, y;\n for (x = 0; x < size.x; x++) {\n for (y = 0; y < size.y; y++) {\n tile = this.createTile({\n x: firstTileIndex.x + x,\n y: firstTileIndex.y + y\n });\n if (!tile.visible) {\n tile.show();\n }\n }\n }\n },\n createTile: function (currentIndex) {\n var options = this.tileOptions(currentIndex);\n var tile = this.pool.get(this._center, options);\n if (tile.element.parent().length === 0) {\n this.element.append(tile.element);\n }\n return tile;\n },\n tileOptions: function (currentIndex) {\n var index = this.wrapIndex(currentIndex), point = this.indexToPoint(currentIndex), origin = this._viewOrigin, offset = point.clone().translate(-origin.x, -origin.y);\n return {\n index: index,\n currentIndex: currentIndex,\n point: point,\n offset: roundPoint(offset),\n zoom: this._zoom,\n size: this.options.tileSize,\n subdomain: this.subdomainText(),\n urlTemplate: this.options.urlTemplate,\n errorUrlTemplate: this.options.errorUrlTemplate\n };\n },\n wrapIndex: function (index) {\n var boundary = math.pow(2, this._zoom);\n return {\n x: this.wrapValue(index.x, boundary),\n y: limit(index.y, 0, boundary - 1)\n };\n },\n wrapValue: function (value, boundary) {\n var remainder = math.abs(value) % boundary;\n if (value >= 0) {\n value = remainder;\n } else {\n value = boundary - (remainder === 0 ? boundary : remainder);\n }\n return value;\n }\n });\n var ImageTile = Class.extend({\n init: function (id, options) {\n this.id = id;\n this.visible = true;\n this._initOptions(options);\n this.createElement();\n this.show();\n },\n options: {\n urlTemplate: '',\n errorUrlTemplate: ''\n },\n createElement: function () {\n this.element = $('\\'\\'').css({\n width: this.options.size,\n height: this.options.size\n }).on('error', proxy(function (e) {\n if (this.errorUrl()) {\n e.target.setAttribute('src', this.errorUrl());\n } else {\n e.target.removeAttribute('src');\n }\n }, this));\n },\n show: function () {\n var element = this.element[0];\n element.style.top = renderSize(this.options.offset.y);\n element.style.left = renderSize(this.options.offset.x);\n var url = this.url();\n if (url) {\n element.setAttribute('src', url);\n }\n element.style.visibility = 'visible';\n this.visible = true;\n },\n hide: function () {\n this.element[0].style.visibility = 'hidden';\n this.visible = false;\n },\n url: function () {\n var urlResult = template(this.options.urlTemplate);\n return urlResult(this.urlOptions());\n },\n errorUrl: function () {\n var urlResult = template(this.options.errorUrlTemplate);\n return urlResult(this.urlOptions());\n },\n urlOptions: function () {\n var options = this.options;\n return {\n zoom: options.zoom,\n subdomain: options.subdomain,\n z: options.zoom,\n x: options.index.x,\n y: options.index.y,\n s: options.subdomain,\n quadkey: options.quadkey,\n q: options.quadkey,\n culture: options.culture,\n c: options.culture\n };\n },\n destroy: function () {\n if (this.element) {\n this.element.remove();\n this.element = null;\n }\n }\n });\n var TilePool = Class.extend({\n init: function () {\n this._items = [];\n },\n options: { maxSize: 100 },\n get: function (center, options) {\n if (this._items.length >= this.options.maxSize) {\n this._remove(center);\n }\n return this._create(options);\n },\n empty: function () {\n var items = this._items;\n for (var i = 0; i < items.length; i++) {\n items[i].destroy();\n }\n this._items = [];\n },\n reset: function () {\n var items = this._items;\n for (var i = 0; i < items.length; i++) {\n items[i].hide();\n }\n },\n _create: function (options) {\n var items = this._items;\n var tile;\n var id = util.hashKey(options.point.toString() + options.offset.toString() + options.zoom + options.urlTemplate);\n for (var i = 0; i < items.length; i++) {\n if (items[i].id === id) {\n tile = items[i];\n break;\n }\n }\n if (tile) {\n tile.show();\n } else {\n tile = new ImageTile(id, options);\n this._items.push(tile);\n }\n return tile;\n },\n _remove: function (center) {\n var items = this._items;\n var maxDist = -1;\n var index = -1;\n for (var i = 0; i < items.length; i++) {\n var dist = items[i].options.point.distanceTo(center);\n if (dist > maxDist && !items[i].visible) {\n index = i;\n maxDist = dist;\n }\n }\n if (index !== -1) {\n items[index].destroy();\n items.splice(index, 1);\n }\n }\n });\n function roundPoint(point) {\n return new Point(round(point.x), round(point.y));\n }\n deepExtend(dataviz, {\n map: {\n layers: {\n tile: TileLayer,\n TileLayer: TileLayer,\n ImageTile: ImageTile,\n TilePool: TilePool,\n TileView: TileView\n }\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/bing', ['dataviz/map/layers/tile'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, defined = kendo.drawing.util.defined, Extent = dataviz.map.Extent, Location = dataviz.map.Location, TileLayer = dataviz.map.layers.TileLayer, TileView = dataviz.map.layers.TileView;\n var BingLayer = TileLayer.extend({\n init: function (map, options) {\n this.options.baseUrl = this._scheme() + '://dev.virtualearth.net/REST/v1/Imagery/Metadata/';\n TileLayer.fn.init.call(this, map, options);\n this._onMetadata = $.proxy(this._onMetadata, this);\n this._fetchMetadata();\n },\n options: { imagerySet: 'road' },\n _fetchMetadata: function () {\n var options = this.options;\n if (!options.key) {\n throw new Error('Bing tile layer: API key is required');\n }\n $.ajax({\n url: options.baseUrl + options.imagerySet,\n data: {\n output: 'json',\n include: 'ImageryProviders',\n key: options.key,\n uriScheme: this._scheme()\n },\n type: 'get',\n dataType: 'jsonp',\n jsonp: 'jsonp',\n success: this._onMetadata\n });\n },\n _scheme: function (proto) {\n proto = proto || window.location.protocol;\n return proto.replace(':', '') === 'https' ? 'https' : 'http';\n },\n _onMetadata: function (data) {\n if (data && data.resourceSets.length) {\n var resource = this.resource = data.resourceSets[0].resources[0];\n deepExtend(this._view.options, {\n urlTemplate: resource.imageUrl.replace('{subdomain}', '#= subdomain #').replace('{quadkey}', '#= quadkey #').replace('{culture}', '#= culture #'),\n subdomains: resource.imageUrlSubdomains\n });\n var options = this.options;\n if (!defined(options.minZoom)) {\n options.minZoom = resource.zoomMin;\n }\n if (!defined(options.maxZoom)) {\n options.maxZoom = resource.zoomMax;\n }\n this._addAttribution();\n if (this.element.css('display') !== 'none') {\n this._reset();\n }\n }\n },\n _viewType: function () {\n return BingView;\n },\n _addAttribution: function () {\n var attr = this.map.attribution;\n if (attr) {\n var items = this.resource.imageryProviders;\n if (items) {\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n for (var y = 0; y < item.coverageAreas.length; y++) {\n var area = item.coverageAreas[y];\n attr.add({\n text: item.attribution,\n minZoom: area.zoomMin,\n maxZoom: area.zoomMax,\n extent: new Extent(new Location(area.bbox[2], area.bbox[1]), new Location(area.bbox[0], area.bbox[3]))\n });\n }\n }\n }\n }\n },\n imagerySet: function (value) {\n if (value) {\n this.options.imagerySet = value;\n this.map.attribution.clear();\n this._fetchMetadata();\n } else {\n return this.options.imagerySet;\n }\n }\n });\n var BingView = TileView.extend({\n options: { culture: 'en-US' },\n tileOptions: function (currentIndex) {\n var options = TileView.fn.tileOptions.call(this, currentIndex);\n options.culture = this.options.culture;\n options.quadkey = this.tileQuadKey(this.wrapIndex(currentIndex));\n return options;\n },\n tileQuadKey: function (index) {\n var quadKey = '', digit, mask, i;\n for (i = this._zoom; i > 0; i--) {\n digit = 0;\n mask = 1 << i - 1;\n if ((index.x & mask) !== 0) {\n digit++;\n }\n if ((index.y & mask) !== 0) {\n digit += 2;\n }\n quadKey += digit;\n }\n return quadKey;\n }\n });\n deepExtend(dataviz, {\n map: {\n layers: {\n bing: BingLayer,\n BingLayer: BingLayer,\n BingView: BingView\n }\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/marker', [\n 'dataviz/map/layers/base',\n 'dataviz/map/location',\n 'kendo.data',\n 'kendo.tooltip'\n ], f);\n}(function () {\n (function ($, undefined) {\n var doc = document, math = Math, indexOf = $.inArray, proxy = $.proxy, kendo = window.kendo, Class = kendo.Class, DataSource = kendo.data.DataSource, Tooltip = kendo.ui.Tooltip, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, map = dataviz.map, Location = map.Location, Layer = map.layers.Layer;\n var MarkerLayer = Layer.extend({\n init: function (map, options) {\n Layer.fn.init.call(this, map, options);\n this._markerClick = proxy(this._markerClick, this);\n this.element.on('click', '.k-marker', this._markerClick);\n this.items = [];\n this._initDataSource();\n },\n destroy: function () {\n Layer.fn.destroy.call(this);\n this.element.off('click', '.k-marker', this._markerClick);\n this.dataSource.unbind('change', this._dataChange);\n this.clear();\n },\n options: {\n zIndex: 1000,\n autoBind: true,\n dataSource: {},\n locationField: 'location',\n titleField: 'title'\n },\n add: function (arg) {\n if ($.isArray(arg)) {\n for (var i = 0; i < arg.length; i++) {\n this._addOne(arg[i]);\n }\n } else {\n return this._addOne(arg);\n }\n },\n remove: function (marker) {\n marker.destroy();\n var index = indexOf(marker, this.items);\n if (index > -1) {\n this.items.splice(index, 1);\n }\n },\n clear: function () {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].destroy();\n }\n this.items = [];\n },\n update: function (marker) {\n var loc = marker.location();\n if (loc) {\n marker.showAt(this.map.locationToView(loc));\n var args = {\n marker: marker,\n layer: this\n };\n this.map.trigger('markerActivate', args);\n }\n },\n _reset: function () {\n Layer.fn._reset.call(this);\n var items = this.items;\n for (var i = 0; i < items.length; i++) {\n this.update(items[i]);\n }\n },\n bind: function (options, dataItem) {\n var marker = map.Marker.create(options, this.options);\n marker.dataItem = dataItem;\n var args = {\n marker: marker,\n layer: this\n };\n var cancelled = this.map.trigger('markerCreated', args);\n if (!cancelled) {\n this.add(marker);\n return marker;\n }\n },\n setDataSource: function (dataSource) {\n if (this.dataSource) {\n this.dataSource.unbind('change', this._dataChange);\n }\n this.dataSource = kendo.data.DataSource.create(dataSource);\n this.dataSource.bind('change', this._dataChange);\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _addOne: function (arg) {\n var marker = Marker.create(arg, this.options);\n marker.addTo(this);\n return marker;\n },\n _initDataSource: function () {\n var dsOptions = this.options.dataSource;\n this._dataChange = proxy(this._dataChange, this);\n this.dataSource = DataSource.create(dsOptions).bind('change', this._dataChange);\n if (dsOptions && this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _dataChange: function (e) {\n this._load(e.sender.view());\n },\n _load: function (data) {\n this._data = data;\n this.clear();\n var getLocation = kendo.getter(this.options.locationField);\n var getTitle = kendo.getter(this.options.titleField);\n for (var i = 0; i < data.length; i++) {\n var dataItem = data[i];\n this.bind({\n location: getLocation(dataItem),\n title: getTitle(dataItem)\n }, dataItem);\n }\n },\n _markerClick: function (e) {\n var args = {\n marker: $(e.target).data('kendoMarker'),\n layer: this\n };\n this.map.trigger('markerClick', args);\n }\n });\n var Marker = Class.extend({\n init: function (options) {\n this.options = options || {};\n },\n addTo: function (parent) {\n this.layer = parent.markers || parent;\n this.layer.items.push(this);\n this.layer.update(this);\n },\n location: function (value) {\n if (value) {\n this.options.location = Location.create(value).toArray();\n if (this.layer) {\n this.layer.update(this);\n }\n return this;\n } else {\n return Location.create(this.options.location);\n }\n },\n showAt: function (point) {\n this.render();\n this.element.css({\n left: math.round(point.x),\n top: math.round(point.y)\n });\n if (this.tooltip && this.tooltip.popup) {\n this.tooltip.popup._position();\n }\n },\n hide: function () {\n if (this.element) {\n this.element.remove();\n this.element = null;\n }\n if (this.tooltip) {\n this.tooltip.destroy();\n this.tooltip = null;\n }\n },\n destroy: function () {\n this.layer = null;\n this.hide();\n },\n render: function () {\n if (!this.element) {\n var options = this.options;\n var layer = this.layer;\n this.element = $(doc.createElement('span')).addClass('k-marker k-icon k-i-marker-' + kendo.toHyphens(options.shape || 'pin')).attr('title', options.title).attr(options.attributes || {}).data('kendoMarker', this).css('zIndex', options.zIndex);\n if (layer) {\n layer.element.append(this.element);\n }\n this.renderTooltip();\n }\n },\n renderTooltip: function () {\n var marker = this;\n var title = marker.options.title;\n var options = marker.options.tooltip || {};\n if (options && Tooltip) {\n var template = options.template;\n if (template) {\n var contentTemplate = kendo.template(template);\n options.content = function (e) {\n e.location = marker.location();\n e.marker = marker;\n return contentTemplate(e);\n };\n }\n if (title || options.content || options.contentUrl) {\n this.tooltip = new Tooltip(this.element, options);\n this.tooltip.marker = this;\n }\n }\n }\n });\n Marker.create = function (arg, defaults) {\n if (arg instanceof Marker) {\n return arg;\n }\n return new Marker(deepExtend({}, defaults, arg));\n };\n deepExtend(dataviz, {\n map: {\n layers: {\n marker: MarkerLayer,\n MarkerLayer: MarkerLayer\n },\n Marker: Marker\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/main', [\n 'dataviz/map/crs',\n 'dataviz/map/location'\n ], f);\n}(function () {\n (function ($, undefined) {\n var doc = document, math = Math, min = math.min, pow = math.pow, proxy = $.proxy, kendo = window.kendo, Widget = kendo.ui.Widget, deepExtend = kendo.deepExtend, dataviz = kendo.dataviz, ui = dataviz.ui, g = kendo.geometry, Point = g.Point, map = dataviz.map, Extent = map.Extent, Location = map.Location, EPSG3857 = map.crs.EPSG3857, util = kendo.util, renderPos = util.renderPos, drawingUtil = kendo.drawing.util, defined = drawingUtil.defined, limit = drawingUtil.limitValue, valueOrDefault = drawingUtil.valueOrDefault;\n var CSS_PREFIX = 'k-', FRICTION = 0.9, FRICTION_MOBILE = 0.93, MOUSEWHEEL = 'DOMMouseScroll mousewheel', VELOCITY_MULTIPLIER = 5, DEFAULT_ZOOM_RATE = 1;\n var Map = Widget.extend({\n init: function (element, options) {\n kendo.destroy(element);\n Widget.fn.init.call(this, element);\n this._initOptions(options);\n this.bind(this.events, options);\n this.crs = new EPSG3857();\n this.element.addClass(CSS_PREFIX + this.options.name.toLowerCase()).css('position', 'relative').empty().append(doc.createElement('div'));\n this._viewOrigin = this._getOrigin();\n this._initScroller();\n this._initMarkers();\n this._initControls();\n this._initLayers();\n this._reset();\n this._mousewheel = proxy(this._mousewheel, this);\n this.element.bind(MOUSEWHEEL, this._mousewheel);\n },\n options: {\n name: 'Map',\n controls: {\n attribution: true,\n navigator: { panStep: 100 },\n zoom: true\n },\n layers: [],\n layerDefaults: {\n shape: {\n style: {\n fill: { color: '#fff' },\n stroke: {\n color: '#aaa',\n width: 0.5\n }\n }\n },\n bubble: {\n style: {\n fill: {\n color: '#fff',\n opacity: 0.5\n },\n stroke: {\n color: '#aaa',\n width: 0.5\n }\n }\n },\n marker: {\n shape: 'pinTarget',\n tooltip: { position: 'top' }\n }\n },\n center: [\n 0,\n 0\n ],\n zoom: 3,\n minSize: 256,\n minZoom: 1,\n maxZoom: 19,\n markers: [],\n markerDefaults: {\n shape: 'pinTarget',\n tooltip: { position: 'top' }\n },\n wraparound: true\n },\n events: [\n 'beforeReset',\n 'click',\n 'markerActivate',\n 'markerClick',\n 'markerCreated',\n 'pan',\n 'panEnd',\n 'reset',\n 'shapeClick',\n 'shapeCreated',\n 'shapeFeatureCreated',\n 'shapeMouseEnter',\n 'shapeMouseLeave',\n 'zoomEnd',\n 'zoomStart'\n ],\n destroy: function () {\n this.scroller.destroy();\n if (this.navigator) {\n this.navigator.destroy();\n }\n if (this.attribution) {\n this.attribution.destroy();\n }\n if (this.zoomControl) {\n this.zoomControl.destroy();\n }\n this.markers.destroy();\n for (var i = 0; i < this.layers.length; i++) {\n this.layers[i].destroy();\n }\n Widget.fn.destroy.call(this);\n },\n zoom: function (level) {\n var options = this.options;\n if (defined(level)) {\n level = math.round(limit(level, options.minZoom, options.maxZoom));\n if (options.zoom !== level) {\n options.zoom = level;\n this._reset();\n }\n return this;\n } else {\n return options.zoom;\n }\n },\n center: function (center) {\n if (center) {\n this.options.center = Location.create(center).toArray();\n this._reset();\n return this;\n } else {\n return Location.create(this.options.center);\n }\n },\n extent: function (extent) {\n if (extent) {\n this._setExtent(extent);\n return this;\n } else {\n return this._getExtent();\n }\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n this._reset();\n },\n locationToLayer: function (location, zoom) {\n var clamp = !this.options.wraparound;\n location = Location.create(location);\n return this.crs.toPoint(location, this._layerSize(zoom), clamp);\n },\n layerToLocation: function (point, zoom) {\n var clamp = !this.options.wraparound;\n point = Point.create(point);\n return this.crs.toLocation(point, this._layerSize(zoom), clamp);\n },\n locationToView: function (location) {\n location = Location.create(location);\n var origin = this.locationToLayer(this._viewOrigin);\n var point = this.locationToLayer(location);\n return point.translateWith(origin.scale(-1));\n },\n viewToLocation: function (point, zoom) {\n var origin = this.locationToLayer(this._getOrigin(), zoom);\n point = Point.create(point);\n point = point.clone().translateWith(origin);\n return this.layerToLocation(point, zoom);\n },\n eventOffset: function (e) {\n var point;\n var x;\n var y;\n var offset = this.element.offset();\n if (e.x || e.y) {\n var field = 'location';\n x = e.x[field] - offset.left;\n y = e.y[field] - offset.top;\n point = new g.Point(x, y);\n } else {\n var event = e.originalEvent || e;\n x = valueOrDefault(event.pageX, event.clientX) - offset.left;\n y = valueOrDefault(event.pageY, event.clientY) - offset.top;\n point = new g.Point(x, y);\n }\n return point;\n },\n eventToView: function (e) {\n var cursor = this.eventOffset(e);\n return this.locationToView(this.viewToLocation(cursor));\n },\n eventToLayer: function (e) {\n return this.locationToLayer(this.eventToLocation(e));\n },\n eventToLocation: function (e) {\n var cursor = this.eventOffset(e);\n return this.viewToLocation(cursor);\n },\n viewSize: function () {\n var element = this.element;\n var scale = this._layerSize();\n var width = element.width();\n if (!this.options.wraparound) {\n width = min(scale, width);\n }\n return {\n width: width,\n height: min(scale, element.height())\n };\n },\n exportVisual: function () {\n this._reset();\n return false;\n },\n _setOrigin: function (origin, zoom) {\n var size = this.viewSize(), topLeft;\n origin = this._origin = Location.create(origin);\n topLeft = this.locationToLayer(origin, zoom);\n topLeft.x += size.width / 2;\n topLeft.y += size.height / 2;\n this.options.center = this.layerToLocation(topLeft, zoom).toArray();\n return this;\n },\n _getOrigin: function (invalidate) {\n var size = this.viewSize(), topLeft;\n if (invalidate || !this._origin) {\n topLeft = this.locationToLayer(this.center());\n topLeft.x -= size.width / 2;\n topLeft.y -= size.height / 2;\n this._origin = this.layerToLocation(topLeft);\n }\n return this._origin;\n },\n _setExtent: function (extent) {\n var raw = Extent.create(extent);\n var se = raw.se.clone();\n if (this.options.wraparound && se.lng < 0 && extent.nw.lng > 0) {\n se.lng = 180 + (180 + se.lng);\n }\n extent = new Extent(raw.nw, se);\n this.center(extent.center());\n var width = this.element.width();\n var height = this.element.height();\n for (var zoom = this.options.maxZoom; zoom >= this.options.minZoom; zoom--) {\n var topLeft = this.locationToLayer(extent.nw, zoom);\n var bottomRight = this.locationToLayer(extent.se, zoom);\n var layerWidth = math.abs(bottomRight.x - topLeft.x);\n var layerHeight = math.abs(bottomRight.y - topLeft.y);\n if (layerWidth <= width && layerHeight <= height) {\n break;\n }\n }\n this.zoom(zoom);\n },\n _getExtent: function () {\n var nw = this._getOrigin();\n var bottomRight = this.locationToLayer(nw);\n var size = this.viewSize();\n bottomRight.x += size.width;\n bottomRight.y += size.height;\n var se = this.layerToLocation(bottomRight);\n return new Extent(nw, se);\n },\n _zoomAround: function (pivot, level) {\n this._setOrigin(this.layerToLocation(pivot, level), level);\n this.zoom(level);\n },\n _initControls: function () {\n var controls = this.options.controls;\n if (ui.Attribution && controls.attribution) {\n this._createAttribution(controls.attribution);\n }\n if (!kendo.support.mobileOS) {\n if (ui.Navigator && controls.navigator) {\n this._createNavigator(controls.navigator);\n }\n if (ui.ZoomControl && controls.zoom) {\n this._createZoomControl(controls.zoom);\n }\n }\n },\n _createControlElement: function (options, defaultPos) {\n var pos = options.position || defaultPos;\n var posSelector = '.' + renderPos(pos).replace(' ', '.');\n var wrap = $('.k-map-controls' + posSelector, this.element);\n if (wrap.length === 0) {\n wrap = $('
    ').addClass('k-map-controls ' + renderPos(pos)).appendTo(this.element);\n }\n return $('
    ').appendTo(wrap);\n },\n _createAttribution: function (options) {\n var element = this._createControlElement(options, 'bottomRight');\n this.attribution = new ui.Attribution(element, options);\n },\n _createNavigator: function (options) {\n var element = this._createControlElement(options, 'topLeft');\n var navigator = this.navigator = new ui.Navigator(element, options);\n this._navigatorPan = proxy(this._navigatorPan, this);\n navigator.bind('pan', this._navigatorPan);\n this._navigatorCenter = proxy(this._navigatorCenter, this);\n navigator.bind('center', this._navigatorCenter);\n },\n _navigatorPan: function (e) {\n var map = this;\n var scroller = map.scroller;\n var x = scroller.scrollLeft + e.x;\n var y = scroller.scrollTop - e.y;\n var bounds = this._virtualSize;\n var height = this.element.height();\n var width = this.element.width();\n x = limit(x, bounds.x.min, bounds.x.max - width);\n y = limit(y, bounds.y.min, bounds.y.max - height);\n map.scroller.one('scroll', function (e) {\n map._scrollEnd(e);\n });\n map.scroller.scrollTo(-x, -y);\n },\n _navigatorCenter: function () {\n this.center(this.options.center);\n },\n _createZoomControl: function (options) {\n var element = this._createControlElement(options, 'topLeft');\n var zoomControl = this.zoomControl = new ui.ZoomControl(element, options);\n this._zoomControlChange = proxy(this._zoomControlChange, this);\n zoomControl.bind('change', this._zoomControlChange);\n },\n _zoomControlChange: function (e) {\n if (!this.trigger('zoomStart', { originalEvent: e })) {\n this.zoom(this.zoom() + e.delta);\n this.trigger('zoomEnd', { originalEvent: e });\n }\n },\n _initScroller: function () {\n var friction = kendo.support.mobileOS ? FRICTION_MOBILE : FRICTION;\n var zoomable = this.options.zoomable !== false;\n var scroller = this.scroller = new kendo.mobile.ui.Scroller(this.element.children(0), {\n friction: friction,\n velocityMultiplier: VELOCITY_MULTIPLIER,\n zoom: zoomable,\n mousewheelScrolling: false,\n supportDoubleTap: true\n });\n scroller.bind('scroll', proxy(this._scroll, this));\n scroller.bind('scrollEnd', proxy(this._scrollEnd, this));\n scroller.userEvents.bind('gesturestart', proxy(this._scaleStart, this));\n scroller.userEvents.bind('gestureend', proxy(this._scale, this));\n scroller.userEvents.bind('doubleTap', proxy(this._doubleTap, this));\n scroller.userEvents.bind('tap', proxy(this._tap, this));\n this.scrollElement = scroller.scrollElement;\n },\n _initLayers: function () {\n var defs = this.options.layers, layers = this.layers = [];\n for (var i = 0; i < defs.length; i++) {\n var options = defs[i];\n var type = options.type || 'shape';\n var defaults = this.options.layerDefaults[type];\n var impl = dataviz.map.layers[type];\n layers.push(new impl(this, deepExtend({}, defaults, options)));\n }\n },\n _initMarkers: function () {\n this.markers = new map.layers.MarkerLayer(this, this.options.markerDefaults);\n this.markers.add(this.options.markers);\n },\n _scroll: function (e) {\n var origin = this.locationToLayer(this._viewOrigin).round();\n var movable = e.sender.movable;\n var offset = new g.Point(movable.x, movable.y).scale(-1).scale(1 / movable.scale);\n origin.x += offset.x;\n origin.y += offset.y;\n this._scrollOffset = offset;\n this._setOrigin(this.layerToLocation(origin));\n this.trigger('pan', {\n originalEvent: e,\n origin: this._getOrigin(),\n center: this.center()\n });\n },\n _scrollEnd: function (e) {\n if (!this._scrollOffset || !this._panComplete()) {\n return;\n }\n this._scrollOffset = null;\n this._panEndTS = new Date();\n this.trigger('panEnd', {\n originalEvent: e,\n origin: this._getOrigin(),\n center: this.center()\n });\n },\n _panComplete: function () {\n return new Date() - (this._panEndTS || 0) > 50;\n },\n _scaleStart: function (e) {\n if (this.trigger('zoomStart', { originalEvent: e })) {\n var touch = e.touches[1];\n if (touch) {\n touch.cancel();\n }\n }\n },\n _scale: function (e) {\n var scale = this.scroller.movable.scale;\n var zoom = this._scaleToZoom(scale);\n var gestureCenter = new g.Point(e.center.x, e.center.y);\n var centerLocation = this.viewToLocation(gestureCenter, zoom);\n var centerPoint = this.locationToLayer(centerLocation, zoom);\n var originPoint = centerPoint.translate(-gestureCenter.x, -gestureCenter.y);\n this._zoomAround(originPoint, zoom);\n this.trigger('zoomEnd', { originalEvent: e });\n },\n _scaleToZoom: function (scaleDelta) {\n var scale = this._layerSize() * scaleDelta;\n var tiles = scale / this.options.minSize;\n var zoom = math.log(tiles) / math.log(2);\n return math.round(zoom);\n },\n _reset: function () {\n if (this.attribution) {\n this.attribution.filter(this.center(), this.zoom());\n }\n this._viewOrigin = this._getOrigin(true);\n this._resetScroller();\n this.trigger('beforeReset');\n this.trigger('reset');\n },\n _resetScroller: function () {\n var scroller = this.scroller;\n var x = scroller.dimensions.x;\n var y = scroller.dimensions.y;\n var scale = this._layerSize();\n var nw = this.extent().nw;\n var topLeft = this.locationToLayer(nw).round();\n scroller.movable.round = true;\n scroller.reset();\n scroller.userEvents.cancel();\n var zoom = this.zoom();\n scroller.dimensions.forcedMinScale = pow(2, this.options.minZoom - zoom);\n scroller.dimensions.maxScale = pow(2, this.options.maxZoom - zoom);\n var xBounds = {\n min: -topLeft.x,\n max: scale - topLeft.x\n };\n var yBounds = {\n min: -topLeft.y,\n max: scale - topLeft.y\n };\n if (this.options.wraparound) {\n xBounds.max = 20 * scale;\n xBounds.min = -xBounds.max;\n }\n if (this.options.pannable === false) {\n var viewSize = this.viewSize();\n xBounds.min = yBounds.min = 0;\n xBounds.max = viewSize.width;\n yBounds.max = viewSize.height;\n }\n x.makeVirtual();\n y.makeVirtual();\n x.virtualSize(xBounds.min, xBounds.max);\n y.virtualSize(yBounds.min, yBounds.max);\n this._virtualSize = {\n x: xBounds,\n y: yBounds\n };\n },\n _renderLayers: function () {\n var defs = this.options.layers, layers = this.layers = [], scrollWrap = this.scrollWrap;\n scrollWrap.empty();\n for (var i = 0; i < defs.length; i++) {\n var options = defs[i];\n var type = options.type || 'shape';\n var defaults = this.options.layerDefaults[type];\n var impl = dataviz.map.layers[type];\n layers.push(new impl(this, deepExtend({}, defaults, options)));\n }\n },\n _layerSize: function (zoom) {\n zoom = valueOrDefault(zoom, this.options.zoom);\n return this.options.minSize * pow(2, zoom);\n },\n _tap: function (e) {\n if (!this._panComplete()) {\n return;\n }\n var cursor = this.eventOffset(e);\n this.trigger('click', {\n originalEvent: e,\n location: this.viewToLocation(cursor)\n });\n },\n _doubleTap: function (e) {\n var options = this.options;\n if (options.zoomable !== false) {\n if (!this.trigger('zoomStart', { originalEvent: e })) {\n var toZoom = this.zoom() + DEFAULT_ZOOM_RATE;\n var cursor = this.eventOffset(e);\n var location = this.viewToLocation(cursor);\n var postZoom = this.locationToLayer(location, toZoom);\n var origin = postZoom.translate(-cursor.x, -cursor.y);\n this._zoomAround(origin, toZoom);\n this.trigger('zoomEnd', { originalEvent: e });\n }\n }\n },\n _mousewheel: function (e) {\n e.preventDefault();\n var delta = dataviz.mwDelta(e) > 0 ? -1 : 1;\n var options = this.options;\n var fromZoom = this.zoom();\n var toZoom = limit(fromZoom + delta, options.minZoom, options.maxZoom);\n if (options.zoomable !== false && toZoom !== fromZoom) {\n if (!this.trigger('zoomStart', { originalEvent: e })) {\n var cursor = this.eventOffset(e);\n var location = this.viewToLocation(cursor);\n var postZoom = this.locationToLayer(location, toZoom);\n var origin = postZoom.translate(-cursor.x, -cursor.y);\n this._zoomAround(origin, toZoom);\n this.trigger('zoomEnd', { originalEvent: e });\n }\n }\n }\n });\n dataviz.ui.plugin(Map);\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.map', [\n 'kendo.data',\n 'kendo.userevents',\n 'kendo.tooltip',\n 'kendo.mobile.scroller',\n 'kendo.draganddrop',\n 'kendo.dataviz.core',\n 'dataviz/map/location',\n 'dataviz/map/attribution',\n 'dataviz/map/navigator',\n 'dataviz/map/zoom',\n 'dataviz/map/crs',\n 'dataviz/map/layers/base',\n 'dataviz/map/layers/shape',\n 'dataviz/map/layers/bubble',\n 'dataviz/map/layers/tile',\n 'dataviz/map/layers/bing',\n 'dataviz/map/layers/marker',\n 'dataviz/map/main'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.map',\n name: 'Map',\n category: 'dataviz',\n description: 'The Kendo DataViz Map displays spatial data',\n depends: [\n 'data',\n 'userevents',\n 'tooltip',\n 'dataviz.core',\n 'drawing',\n 'mobile.scroller'\n ]\n };\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/diagram/utils', ['kendo.core'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, diagram = kendo.dataviz.diagram = {}, deepExtend = kendo.deepExtend, isArray = $.isArray, EPSILON = 0.000001;\n var Utils = {};\n deepExtend(Utils, {\n isNearZero: function (num) {\n return Math.abs(num) < EPSILON;\n },\n isDefined: function (obj) {\n return typeof obj !== 'undefined';\n },\n isUndefined: function (obj) {\n return typeof obj === 'undefined' || obj === null;\n },\n isObject: function (obj) {\n return obj === Object(obj);\n },\n has: function (obj, key) {\n return Object.hasOwnProperty.call(obj, key);\n },\n isString: function (obj) {\n return Object.prototype.toString.call(obj) == '[object String]';\n },\n isBoolean: function (obj) {\n return Object.prototype.toString.call(obj) == '[object Boolean]';\n },\n isType: function (obj, type) {\n return Object.prototype.toString.call(obj) == '[object ' + type + ']';\n },\n isNumber: function (obj) {\n return !isNaN(parseFloat(obj)) && isFinite(obj);\n },\n isEmpty: function (obj) {\n if (obj === null) {\n return true;\n }\n if (isArray(obj) || Utils.isString(obj)) {\n return obj.length === 0;\n }\n for (var key in obj) {\n if (Utils.has(obj, key)) {\n return false;\n }\n }\n return true;\n },\n simpleExtend: function (destination, source) {\n if (!Utils.isObject(source)) {\n return;\n }\n for (var name in source) {\n destination[name] = source[name];\n }\n },\n initArray: function createIdArray(size, value) {\n var array = [];\n for (var i = 0; i < size; ++i) {\n array[i] = value;\n }\n return array;\n },\n serializePoints: function (points) {\n var res = [];\n for (var i = 0; i < points.length; i++) {\n var p = points[i];\n res.push(p.x + ';' + p.y);\n }\n return res.join(';');\n },\n deserializePoints: function (s) {\n var v = s.split(';'), points = [];\n if (v.length % 2 !== 0) {\n throw 'Not an array of points.';\n }\n for (var i = 0; i < v.length; i += 2) {\n points.push(new diagram.Point(parseInt(v[i], 10), parseInt(v[i + 1], 10)));\n }\n return points;\n },\n randomInteger: function (lower, upper) {\n return parseInt(Math.floor(Math.random() * upper) + lower, 10);\n },\n DFT: function (el, func) {\n func(el);\n if (el.childNodes) {\n for (var i = 0; i < el.childNodes.length; i++) {\n var item = el.childNodes[i];\n this.DFT(item, func);\n }\n }\n },\n getMatrixAngle: function (m) {\n if (m === null || m.d === 0) {\n return 0;\n }\n return Math.atan2(m.b, m.d) * 180 / Math.PI;\n },\n getMatrixScaling: function (m) {\n var sX = Math.sqrt(m.a * m.a + m.c * m.c);\n var sY = Math.sqrt(m.b * m.b + m.d * m.d);\n return [\n sX,\n sY\n ];\n }\n });\n function Range(start, stop, step) {\n if (typeof start == 'undefined' || typeof stop == 'undefined') {\n return [];\n }\n if (step && Utils.sign(stop - start) != Utils.sign(step)) {\n throw 'The sign of the increment should allow to reach the stop-value.';\n }\n step = step || 1;\n start = start || 0;\n stop = stop || start;\n if ((stop - start) / step === Infinity) {\n throw 'Infinite range defined.';\n }\n var range = [], i = -1, j;\n function rangeIntegerScale(x) {\n var k = 1;\n while (x * k % 1) {\n k *= 10;\n }\n return k;\n }\n var k = rangeIntegerScale(Math.abs(step));\n start *= k;\n stop *= k;\n step *= k;\n if (start > stop && step > 0) {\n step = -step;\n }\n if (step < 0) {\n while ((j = start + step * ++i) >= stop) {\n range.push(j / k);\n }\n } else {\n while ((j = start + step * ++i) <= stop) {\n range.push(j / k);\n }\n }\n return range;\n }\n function findRadian(start, end) {\n if (start == end) {\n return 0;\n }\n var sngXComp = end.x - start.x, sngYComp = start.y - end.y, atan = Math.atan(sngXComp / sngYComp);\n if (sngYComp >= 0) {\n return sngXComp < 0 ? atan + 2 * Math.PI : atan;\n }\n return atan + Math.PI;\n }\n Utils.sign = function (number) {\n return number ? number < 0 ? -1 : 1 : 0;\n };\n Utils.findAngle = function (center, end) {\n return findRadian(center, end) * 180 / Math.PI;\n };\n Utils.forEach = function (arr, iterator, thisRef) {\n for (var i = 0; i < arr.length; i++) {\n iterator.call(thisRef, arr[i], i, arr);\n }\n };\n Utils.any = function (arr, predicate) {\n for (var i = 0; i < arr.length; ++i) {\n if (predicate(arr[i])) {\n return arr[i];\n }\n }\n return null;\n };\n Utils.remove = function (arr, what) {\n var ax;\n while ((ax = Utils.indexOf(arr, what)) !== -1) {\n arr.splice(ax, 1);\n }\n return arr;\n };\n Utils.contains = function (arr, obj) {\n return Utils.indexOf(arr, obj) !== -1;\n };\n Utils.indexOf = function (arr, what) {\n return $.inArray(what, arr);\n };\n Utils.fold = function (list, iterator, acc, context) {\n var initial = arguments.length > 2;\n for (var i = 0; i < list.length; i++) {\n var value = list[i];\n if (!initial) {\n acc = value;\n initial = true;\n } else {\n acc = iterator.call(context, acc, value, i, list);\n }\n }\n if (!initial) {\n throw 'Reduce of empty array with no initial value';\n }\n return acc;\n };\n Utils.find = function (arr, iterator, context) {\n var result;\n Utils.any(arr, function (value, index, list) {\n if (iterator.call(context, value, index, list)) {\n result = value;\n return true;\n }\n return false;\n });\n return result;\n };\n Utils.first = function (arr, constraint, context) {\n if (arr.length === 0) {\n return null;\n }\n if (Utils.isUndefined(constraint)) {\n return arr[0];\n }\n return Utils.find(arr, constraint, context);\n };\n Utils.insert = function (arr, element, position) {\n arr.splice(position, 0, element);\n return arr;\n };\n Utils.all = function (arr, iterator, context) {\n var result = true;\n var value;\n for (var i = 0; i < arr.length; i++) {\n value = arr[i];\n result = result && iterator.call(context, value, i, arr);\n if (!result) {\n break;\n }\n }\n return result;\n };\n Utils.clear = function (arr) {\n arr.splice(0, arr.length);\n };\n Utils.bisort = function (a, b, sortfunc) {\n if (Utils.isUndefined(a)) {\n throw 'First array is not specified.';\n }\n if (Utils.isUndefined(b)) {\n throw 'Second array is not specified.';\n }\n if (a.length != b.length) {\n throw 'The two arrays should have equal length';\n }\n var all = [], i;\n for (i = 0; i < a.length; i++) {\n all.push({\n 'x': a[i],\n 'y': b[i]\n });\n }\n if (Utils.isUndefined(sortfunc)) {\n all.sort(function (m, n) {\n return m.x - n.x;\n });\n } else {\n all.sort(function (m, n) {\n return sortfunc(m.x, n.x);\n });\n }\n Utils.clear(a);\n Utils.clear(b);\n for (i = 0; i < all.length; i++) {\n a.push(all[i].x);\n b.push(all[i].y);\n }\n };\n Utils.addRange = function (arr, range) {\n arr.push.apply(arr, range);\n };\n var Easing = {\n easeInOut: function (pos) {\n return -Math.cos(pos * Math.PI) / 2 + 0.5;\n }\n };\n var Ticker = kendo.Class.extend({\n init: function () {\n this.adapters = [];\n this.target = 0;\n this.tick = 0;\n this.interval = 20;\n this.duration = 800;\n this.lastTime = null;\n this.handlers = [];\n var _this = this;\n this.transition = Easing.easeInOut;\n this.timerDelegate = function () {\n _this.onTimerEvent();\n };\n },\n addAdapter: function (a) {\n this.adapters.push(a);\n },\n onComplete: function (handler) {\n this.handlers.push(handler);\n },\n removeHandler: function (handler) {\n this.handlers = $.grep(this.handlers, function (h) {\n return h !== handler;\n });\n },\n trigger: function () {\n var _this = this;\n if (this.handlers) {\n Utils.forEach(this.handlers, function (h) {\n return h.call(_this.caller !== null ? _this.caller : _this);\n });\n }\n },\n onStep: function () {\n },\n seekTo: function (to) {\n this.seekFromTo(this.tick, to);\n },\n seekFromTo: function (from, to) {\n this.target = Math.max(0, Math.min(1, to));\n this.tick = Math.max(0, Math.min(1, from));\n this.lastTime = new Date().getTime();\n if (!this.intervalId) {\n this.intervalId = window.setInterval(this.timerDelegate, this.interval);\n }\n },\n stop: function () {\n if (this.intervalId) {\n window.clearInterval(this.intervalId);\n this.intervalId = null;\n this.trigger();\n }\n },\n play: function (origin) {\n if (this.adapters.length === 0) {\n return;\n }\n if (origin !== null) {\n this.caller = origin;\n }\n this.initState();\n this.seekFromTo(0, 1);\n },\n reverse: function () {\n this.seekFromTo(1, 0);\n },\n initState: function () {\n if (this.adapters.length === 0) {\n return;\n }\n for (var i = 0; i < this.adapters.length; i++) {\n this.adapters[i].initState();\n }\n },\n propagate: function () {\n var value = this.transition(this.tick);\n for (var i = 0; i < this.adapters.length; i++) {\n this.adapters[i].update(value);\n }\n },\n onTimerEvent: function () {\n var now = new Date().getTime();\n var timePassed = now - this.lastTime;\n this.lastTime = now;\n var movement = timePassed / this.duration * (this.tick < this.target ? 1 : -1);\n if (Math.abs(movement) >= Math.abs(this.tick - this.target)) {\n this.tick = this.target;\n } else {\n this.tick += movement;\n }\n try {\n this.propagate();\n } finally {\n this.onStep.call(this);\n if (this.target == this.tick) {\n this.stop();\n }\n }\n }\n });\n kendo.deepExtend(diagram, {\n init: function (element) {\n kendo.init(element, diagram.ui);\n },\n Utils: Utils,\n Range: Range,\n Ticker: Ticker\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/diagram/math', [\n 'dataviz/diagram/utils',\n 'kendo.dataviz.core'\n ], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, diagram = kendo.dataviz.diagram, Class = kendo.Class, deepExtend = kendo.deepExtend, dataviz = kendo.dataviz, Utils = diagram.Utils, Point = dataviz.Point2D, isFunction = kendo.isFunction, contains = Utils.contains, map = $.map;\n var HITTESTAREA = 3, EPSILON = 0.000001;\n deepExtend(Point.fn, {\n plus: function (p) {\n return new Point(this.x + p.x, this.y + p.y);\n },\n minus: function (p) {\n return new Point(this.x - p.x, this.y - p.y);\n },\n offset: function (value) {\n return new Point(this.x - value, this.y - value);\n },\n times: function (s) {\n return new Point(this.x * s, this.y * s);\n },\n normalize: function () {\n if (this.length() === 0) {\n return new Point();\n }\n return this.times(1 / this.length());\n },\n length: function () {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n },\n toString: function () {\n return '(' + this.x + ',' + this.y + ')';\n },\n lengthSquared: function () {\n return this.x * this.x + this.y * this.y;\n },\n middleOf: function MiddleOf(p, q) {\n return new Point(q.x - p.x, q.y - p.y).times(0.5).plus(p);\n },\n toPolar: function (useDegrees) {\n var factor = 1;\n if (useDegrees) {\n factor = 180 / Math.PI;\n }\n var a = Math.atan2(Math.abs(this.y), Math.abs(this.x));\n var halfpi = Math.PI / 2;\n var len = this.length();\n if (this.x === 0) {\n if (this.y === 0) {\n return new Polar(0, 0);\n }\n if (this.y > 0) {\n return new Polar(len, factor * halfpi);\n }\n if (this.y < 0) {\n return new Polar(len, factor * 3 * halfpi);\n }\n } else if (this.x > 0) {\n if (this.y === 0) {\n return new Polar(len, 0);\n }\n if (this.y > 0) {\n return new Polar(len, factor * a);\n }\n if (this.y < 0) {\n return new Polar(len, factor * (4 * halfpi - a));\n }\n } else {\n if (this.y === 0) {\n return new Polar(len, 2 * halfpi);\n }\n if (this.y > 0) {\n return new Polar(len, factor * (2 * halfpi - a));\n }\n if (this.y < 0) {\n return new Polar(len, factor * (2 * halfpi + a));\n }\n }\n },\n isOnLine: function (from, to) {\n if (from.x > to.x) {\n var temp = to;\n to = from;\n from = temp;\n }\n var r1 = new Rect(from.x, from.y).inflate(HITTESTAREA, HITTESTAREA), r2 = new Rect(to.x, to.y).inflate(HITTESTAREA, HITTESTAREA), o1, u1;\n if (r1.union(r2).contains(this)) {\n if (from.x === to.x || from.y === to.y) {\n return true;\n } else if (from.y < to.y) {\n o1 = r1.x + (r2.x - r1.x) * (this.y - (r1.y + r1.height)) / (r2.y + r2.height - (r1.y + r1.height));\n u1 = r1.x + r1.width + (r2.x + r2.width - (r1.x + r1.width)) * (this.y - r1.y) / (r2.y - r1.y);\n } else {\n o1 = r1.x + (r2.x - r1.x) * (this.y - r1.y) / (r2.y - r1.y);\n u1 = r1.x + r1.width + (r2.x + r2.width - (r1.x + r1.width)) * (this.y - (r1.y + r1.height)) / (r2.y + r2.height - (r1.y + r1.height));\n }\n return this.x > o1 && this.x < u1;\n }\n return false;\n }\n });\n deepExtend(Point, {\n parse: function (str) {\n var tempStr = str.slice(1, str.length - 1), xy = tempStr.split(','), x = parseInt(xy[0], 10), y = parseInt(xy[1], 10);\n if (!isNaN(x) && !isNaN(y)) {\n return new Point(x, y);\n }\n }\n });\n var PathDefiner = Class.extend({\n init: function (p, left, right) {\n this.point = p;\n this.left = left;\n this.right = right;\n }\n });\n var Rect = Class.extend({\n init: function (x, y, width, height) {\n this.x = x || 0;\n this.y = y || 0;\n this.width = width || 0;\n this.height = height || 0;\n },\n contains: function (point) {\n return point.x >= this.x && point.x <= this.x + this.width && point.y >= this.y && point.y <= this.y + this.height;\n },\n inflate: function (dx, dy) {\n if (dy === undefined) {\n dy = dx;\n }\n this.x -= dx;\n this.y -= dy;\n this.width += 2 * dx + 1;\n this.height += 2 * dy + 1;\n return this;\n },\n offset: function (dx, dy) {\n var x = dx, y = dy;\n if (dx instanceof Point) {\n x = dx.x;\n y = dx.y;\n }\n this.x += x;\n this.y += y;\n return this;\n },\n union: function (r) {\n var x1 = Math.min(this.x, r.x);\n var y1 = Math.min(this.y, r.y);\n var x2 = Math.max(this.x + this.width, r.x + r.width);\n var y2 = Math.max(this.y + this.height, r.y + r.height);\n return new Rect(x1, y1, x2 - x1, y2 - y1);\n },\n center: function () {\n return new Point(this.x + this.width / 2, this.y + this.height / 2);\n },\n top: function () {\n return new Point(this.x + this.width / 2, this.y);\n },\n right: function () {\n return new Point(this.x + this.width, this.y + this.height / 2);\n },\n bottom: function () {\n return new Point(this.x + this.width / 2, this.y + this.height);\n },\n left: function () {\n return new Point(this.x, this.y + this.height / 2);\n },\n topLeft: function () {\n return new Point(this.x, this.y);\n },\n topRight: function () {\n return new Point(this.x + this.width, this.y);\n },\n bottomLeft: function () {\n return new Point(this.x, this.y + this.height);\n },\n bottomRight: function () {\n return new Point(this.x + this.width, this.y + this.height);\n },\n clone: function () {\n return new Rect(this.x, this.y, this.width, this.height);\n },\n isEmpty: function () {\n return !this.width && !this.height;\n },\n equals: function (rect) {\n return this.x === rect.x && this.y === rect.y && this.width === rect.width && this.height === rect.height;\n },\n rotatedBounds: function (angle) {\n var rect = this.clone(), points = this.rotatedPoints(angle), tl = points[0], tr = points[1], br = points[2], bl = points[3];\n rect.x = Math.min(br.x, tl.x, tr.x, bl.x);\n rect.y = Math.min(br.y, tl.y, tr.y, bl.y);\n rect.width = Math.max(br.x, tl.x, tr.x, bl.x) - rect.x;\n rect.height = Math.max(br.y, tl.y, tr.y, bl.y) - rect.y;\n return rect;\n },\n rotatedPoints: function (angle) {\n var rect = this, c = rect.center(), br = rect.bottomRight().rotate(c, 360 - angle), tl = rect.topLeft().rotate(c, 360 - angle), tr = rect.topRight().rotate(c, 360 - angle), bl = rect.bottomLeft().rotate(c, 360 - angle);\n return [\n tl,\n tr,\n br,\n bl\n ];\n },\n toString: function (delimiter) {\n delimiter = delimiter || ' ';\n return this.x + delimiter + this.y + delimiter + this.width + delimiter + this.height;\n },\n scale: function (scaleX, scaleY, staicPoint, adornerCenter, angle) {\n var tl = this.topLeft();\n var thisCenter = this.center();\n tl.rotate(thisCenter, 360 - angle).rotate(adornerCenter, angle);\n var delta = staicPoint.minus(tl);\n var scaled = new Point(delta.x * scaleX, delta.y * scaleY);\n var position = delta.minus(scaled);\n tl = tl.plus(position);\n tl.rotate(adornerCenter, 360 - angle).rotate(thisCenter, angle);\n this.x = tl.x;\n this.y = tl.y;\n this.width *= scaleX;\n this.height *= scaleY;\n },\n zoom: function (zoom) {\n this.x *= zoom;\n this.y *= zoom;\n this.width *= zoom;\n this.height *= zoom;\n return this;\n },\n overlaps: function (rect) {\n var bottomRight = this.bottomRight();\n var rectBottomRight = rect.bottomRight();\n var overlaps = !(bottomRight.x < rect.x || bottomRight.y < rect.y || rectBottomRight.x < this.x || rectBottomRight.y < this.y);\n return overlaps;\n }\n });\n var Size = Class.extend({\n init: function (width, height) {\n this.width = width;\n this.height = height;\n }\n });\n Size.prototype.Empty = new Size(0, 0);\n Rect.toRect = function (rect) {\n if (!(rect instanceof Rect)) {\n rect = new Rect(rect.x, rect.y, rect.width, rect.height);\n }\n return rect;\n };\n Rect.empty = function () {\n return new Rect(0, 0, 0, 0);\n };\n Rect.fromPoints = function (p, q) {\n if (isNaN(p.x) || isNaN(p.y) || isNaN(q.x) || isNaN(q.y)) {\n throw 'Some values are NaN.';\n }\n return new Rect(Math.min(p.x, q.x), Math.min(p.y, q.y), Math.abs(p.x - q.x), Math.abs(p.y - q.y));\n };\n function isNearZero(num) {\n return Math.abs(num) < EPSILON;\n }\n function intersectLine(start1, end1, start2, end2, isSegment) {\n var tangensdiff = (end1.x - start1.x) * (end2.y - start2.y) - (end1.y - start1.y) * (end2.x - start2.x);\n if (isNearZero(tangensdiff)) {\n return;\n }\n var num1 = (start1.y - start2.y) * (end2.x - start2.x) - (start1.x - start2.x) * (end2.y - start2.y);\n var num2 = (start1.y - start2.y) * (end1.x - start1.x) - (start1.x - start2.x) * (end1.y - start1.y);\n var r = num1 / tangensdiff;\n var s = num2 / tangensdiff;\n if (isSegment && (r < 0 || r > 1 || s < 0 || s > 1)) {\n return;\n }\n return new Point(start1.x + r * (end1.x - start1.x), start1.y + r * (end1.y - start1.y));\n }\n var Intersect = {\n lines: function (start1, end1, start2, end2) {\n return intersectLine(start1, end1, start2, end2);\n },\n segments: function (start1, end1, start2, end2) {\n return intersectLine(start1, end1, start2, end2, true);\n },\n rectWithLine: function (rect, start, end) {\n return Intersect.segments(start, end, rect.topLeft(), rect.topRight()) || Intersect.segments(start, end, rect.topRight(), rect.bottomRight()) || Intersect.segments(start, end, rect.bottomLeft(), rect.bottomRight()) || Intersect.segments(start, end, rect.topLeft(), rect.bottomLeft());\n },\n rects: function (rect1, rect2, angle) {\n var tl = rect2.topLeft(), tr = rect2.topRight(), bl = rect2.bottomLeft(), br = rect2.bottomRight();\n var center = rect2.center();\n if (angle) {\n tl = tl.rotate(center, angle);\n tr = tr.rotate(center, angle);\n bl = bl.rotate(center, angle);\n br = br.rotate(center, angle);\n }\n var intersect = rect1.contains(tl) || rect1.contains(tr) || rect1.contains(bl) || rect1.contains(br) || Intersect.rectWithLine(rect1, tl, tr) || Intersect.rectWithLine(rect1, tl, bl) || Intersect.rectWithLine(rect1, tr, br) || Intersect.rectWithLine(rect1, bl, br);\n if (!intersect) {\n tl = rect1.topLeft();\n tr = rect1.topRight();\n bl = rect1.bottomLeft();\n br = rect1.bottomRight();\n if (angle) {\n var reverseAngle = 360 - angle;\n tl = tl.rotate(center, reverseAngle);\n tr = tr.rotate(center, reverseAngle);\n bl = bl.rotate(center, reverseAngle);\n br = br.rotate(center, reverseAngle);\n }\n intersect = rect2.contains(tl) || rect2.contains(tr) || rect2.contains(bl) || rect2.contains(br);\n }\n return intersect;\n }\n };\n var RectAlign = Class.extend({\n init: function (container) {\n this.container = Rect.toRect(container);\n },\n align: function (content, alignment) {\n var alignValues = alignment.toLowerCase().split(' ');\n for (var i = 0; i < alignValues.length; i++) {\n content = this._singleAlign(content, alignValues[i]);\n }\n return content;\n },\n _singleAlign: function (content, alignment) {\n if (isFunction(this[alignment])) {\n return this[alignment](content);\n } else {\n return content;\n }\n },\n left: function (content) {\n return this._align(content, this._left);\n },\n center: function (content) {\n return this._align(content, this._center);\n },\n right: function (content) {\n return this._align(content, this._right);\n },\n stretch: function (content) {\n return this._align(content, this._stretch);\n },\n top: function (content) {\n return this._align(content, this._top);\n },\n middle: function (content) {\n return this._align(content, this._middle);\n },\n bottom: function (content) {\n return this._align(content, this._bottom);\n },\n _left: function (container, content) {\n content.x = container.x;\n },\n _center: function (container, content) {\n content.x = (container.width - content.width) / 2 || 0;\n },\n _right: function (container, content) {\n content.x = container.width - content.width;\n },\n _top: function (container, content) {\n content.y = container.y;\n },\n _middle: function (container, content) {\n content.y = (container.height - content.height) / 2 || 0;\n },\n _bottom: function (container, content) {\n content.y = container.height - content.height;\n },\n _stretch: function (container, content) {\n content.x = 0;\n content.y = 0;\n content.height = container.height;\n content.width = container.width;\n },\n _align: function (content, alignCalc) {\n content = Rect.toRect(content);\n alignCalc(this.container, content);\n return content;\n }\n });\n var Polar = Class.extend({\n init: function (r, a) {\n this.r = r;\n this.angle = a;\n }\n });\n var Matrix = Class.extend({\n init: function (a, b, c, d, e, f) {\n this.a = a || 0;\n this.b = b || 0;\n this.c = c || 0;\n this.d = d || 0;\n this.e = e || 0;\n this.f = f || 0;\n },\n plus: function (m) {\n this.a += m.a;\n this.b += m.b;\n this.c += m.c;\n this.d += m.d;\n this.e += m.e;\n this.f += m.f;\n },\n minus: function (m) {\n this.a -= m.a;\n this.b -= m.b;\n this.c -= m.c;\n this.d -= m.d;\n this.e -= m.e;\n this.f -= m.f;\n },\n times: function (m) {\n return new Matrix(this.a * m.a + this.c * m.b, this.b * m.a + this.d * m.b, this.a * m.c + this.c * m.d, this.b * m.c + this.d * m.d, this.a * m.e + this.c * m.f + this.e, this.b * m.e + this.d * m.f + this.f);\n },\n apply: function (p) {\n return new Point(this.a * p.x + this.c * p.y + this.e, this.b * p.x + this.d * p.y + this.f);\n },\n applyRect: function (r) {\n return Rect.fromPoints(this.apply(r.topLeft()), this.apply(r.bottomRight()));\n },\n toString: function () {\n return 'matrix(' + this.a + ' ' + this.b + ' ' + this.c + ' ' + this.d + ' ' + this.e + ' ' + this.f + ')';\n }\n });\n deepExtend(Matrix, {\n fromSVGMatrix: function (vm) {\n var m = new Matrix();\n m.a = vm.a;\n m.b = vm.b;\n m.c = vm.c;\n m.d = vm.d;\n m.e = vm.e;\n m.f = vm.f;\n return m;\n },\n fromMatrixVector: function (v) {\n var m = new Matrix();\n m.a = v.a;\n m.b = v.b;\n m.c = v.c;\n m.d = v.d;\n m.e = v.e;\n m.f = v.f;\n return m;\n },\n fromList: function (v) {\n if (v.length !== 6) {\n throw 'The given list should consist of six elements.';\n }\n var m = new Matrix();\n m.a = v[0];\n m.b = v[1];\n m.c = v[2];\n m.d = v[3];\n m.e = v[4];\n m.f = v[5];\n return m;\n },\n translation: function (x, y) {\n var m = new Matrix();\n m.a = 1;\n m.b = 0;\n m.c = 0;\n m.d = 1;\n m.e = x;\n m.f = y;\n return m;\n },\n unit: function () {\n return new Matrix(1, 0, 0, 1, 0, 0);\n },\n rotation: function (angle, x, y) {\n var m = new Matrix();\n m.a = Math.cos(angle * Math.PI / 180);\n m.b = Math.sin(angle * Math.PI / 180);\n m.c = -m.b;\n m.d = m.a;\n m.e = x - x * m.a + y * m.b || 0;\n m.f = y - y * m.a - x * m.b || 0;\n return m;\n },\n scaling: function (scaleX, scaleY) {\n var m = new Matrix();\n m.a = scaleX;\n m.b = 0;\n m.c = 0;\n m.d = scaleY;\n m.e = 0;\n m.f = 0;\n return m;\n },\n parse: function (v) {\n var parts, nums;\n if (v) {\n v = v.trim();\n if (v.slice(0, 6).toLowerCase() === 'matrix') {\n nums = v.slice(7, v.length - 1).trim();\n parts = nums.split(',');\n if (parts.length === 6) {\n return Matrix.fromList(map(parts, function (p) {\n return parseFloat(p);\n }));\n }\n parts = nums.split(' ');\n if (parts.length === 6) {\n return Matrix.fromList(map(parts, function (p) {\n return parseFloat(p);\n }));\n }\n }\n if (v.slice(0, 1) === '(' && v.slice(v.length - 1) === ')') {\n v = v.substr(1, v.length - 1);\n }\n if (v.indexOf(',') > 0) {\n parts = v.split(',');\n if (parts.length === 6) {\n return Matrix.fromList(map(parts, function (p) {\n return parseFloat(p);\n }));\n }\n }\n if (v.indexOf(' ') > 0) {\n parts = v.split(' ');\n if (parts.length === 6) {\n return Matrix.fromList(map(parts, function (p) {\n return parseFloat(p);\n }));\n }\n }\n }\n return parts;\n }\n });\n var MatrixVector = Class.extend({\n init: function (a, b, c, d, e, f) {\n this.a = a || 0;\n this.b = b || 0;\n this.c = c || 0;\n this.d = d || 0;\n this.e = e || 0;\n this.f = f || 0;\n },\n fromMatrix: function FromMatrix(m) {\n var v = new MatrixVector();\n v.a = m.a;\n v.b = m.b;\n v.c = m.c;\n v.d = m.d;\n v.e = m.e;\n v.f = m.f;\n return v;\n }\n });\n function normalVariable(mean, deviation) {\n var x, y, r;\n do {\n x = Math.random() * 2 - 1;\n y = Math.random() * 2 - 1;\n r = x * x + y * y;\n } while (!r || r > 1);\n return mean + deviation * x * Math.sqrt(-2 * Math.log(r) / r);\n }\n function randomId(length) {\n if (Utils.isUndefined(length)) {\n length = 10;\n }\n var result = '';\n var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n for (var i = length; i > 0; --i) {\n result += chars.charAt(Math.round(Math.random() * (chars.length - 1)));\n }\n return result;\n }\n var Geometry = {\n _distanceToLineSquared: function (p, a, b) {\n function d2(pt1, pt2) {\n return (pt1.x - pt2.x) * (pt1.x - pt2.x) + (pt1.y - pt2.y) * (pt1.y - pt2.y);\n }\n if (a === b) {\n return d2(p, a);\n }\n var vx = b.x - a.x, vy = b.y - a.y, dot = (p.x - a.x) * vx + (p.y - a.y) * vy;\n if (dot < 0) {\n return d2(a, p);\n }\n dot = (b.x - p.x) * vx + (b.y - p.y) * vy;\n if (dot < 0) {\n return d2(b, p);\n }\n dot = (b.x - p.x) * vy - (b.y - p.y) * vx;\n return dot * dot / (vx * vx + vy * vy);\n },\n distanceToLine: function (p, a, b) {\n return Math.sqrt(this._distanceToLineSquared(p, a, b));\n },\n distanceToPolyline: function (p, points) {\n var minimum = Number.MAX_VALUE;\n if (Utils.isUndefined(points) || points.length === 0) {\n return Number.MAX_VALUE;\n }\n for (var s = 0; s < points.length - 1; s++) {\n var p1 = points[s];\n var p2 = points[s + 1];\n var d = this._distanceToLineSquared(p, p1, p2);\n if (d < minimum) {\n minimum = d;\n }\n }\n return Math.sqrt(minimum);\n }\n };\n var HashTable = kendo.Class.extend({\n init: function () {\n this._buckets = [];\n this.length = 0;\n },\n add: function (key, value) {\n var obj = this._createGetBucket(key);\n if (Utils.isDefined(value)) {\n obj.value = value;\n }\n return obj;\n },\n get: function (key) {\n if (this._bucketExists(key)) {\n return this._createGetBucket(key);\n }\n return null;\n },\n set: function (key, value) {\n this.add(key, value);\n },\n containsKey: function (key) {\n return this._bucketExists(key);\n },\n remove: function (key) {\n if (this._bucketExists(key)) {\n var hashId = this._hash(key);\n delete this._buckets[hashId];\n this.length--;\n return key;\n }\n },\n forEach: function (func) {\n var hashes = this._hashes();\n for (var i = 0, len = hashes.length; i < len; i++) {\n var hash = hashes[i];\n var bucket = this._buckets[hash];\n if (Utils.isUndefined(bucket)) {\n continue;\n }\n func(bucket);\n }\n },\n clone: function () {\n var ht = new HashTable();\n var hashes = this._hashes();\n for (var i = 0, len = hashes.length; i < len; i++) {\n var hash = hashes[i];\n var bucket = this._buckets[hash];\n if (Utils.isUndefined(bucket)) {\n continue;\n }\n ht.add(bucket.key, bucket.value);\n }\n return ht;\n },\n _hashes: function () {\n var hashes = [];\n for (var hash in this._buckets) {\n if (this._buckets.hasOwnProperty(hash)) {\n hashes.push(hash);\n }\n }\n return hashes;\n },\n _bucketExists: function (key) {\n var hashId = this._hash(key);\n return Utils.isDefined(this._buckets[hashId]);\n },\n _createGetBucket: function (key) {\n var hashId = this._hash(key);\n var bucket = this._buckets[hashId];\n if (Utils.isUndefined(bucket)) {\n bucket = { key: key };\n this._buckets[hashId] = bucket;\n this.length++;\n }\n return bucket;\n },\n _hash: function (key) {\n if (Utils.isNumber(key)) {\n return key;\n }\n if (Utils.isString(key)) {\n return this._hashString(key);\n }\n if (Utils.isObject(key)) {\n return this._objectHashId(key);\n }\n throw 'Unsupported key type.';\n },\n _hashString: function (s) {\n var result = 0;\n if (s.length === 0) {\n return result;\n }\n for (var i = 0; i < s.length; i++) {\n var ch = s.charCodeAt(i);\n result = result * 32 - result + ch;\n }\n return result;\n },\n _objectHashId: function (key) {\n var id = key._hashId;\n if (Utils.isUndefined(id)) {\n id = randomId();\n key._hashId = id;\n }\n return id;\n }\n });\n var Dictionary = kendo.Observable.extend({\n init: function (dictionary) {\n var that = this;\n kendo.Observable.fn.init.call(that);\n this._hashTable = new HashTable();\n this.length = 0;\n if (Utils.isDefined(dictionary)) {\n if ($.isArray(dictionary)) {\n for (var i = 0; i < dictionary.length; i++) {\n this.add(dictionary[i]);\n }\n } else {\n dictionary.forEach(function (k, v) {\n this.add(k, v);\n }, this);\n }\n }\n },\n add: function (key, value) {\n var entry = this._hashTable.get(key);\n if (!entry) {\n entry = this._hashTable.add(key);\n this.length++;\n this.trigger('changed');\n }\n entry.value = value;\n },\n set: function (key, value) {\n this.add(key, value);\n },\n get: function (key) {\n var entry = this._hashTable.get(key);\n if (entry) {\n return entry.value;\n }\n throw new Error('Cannot find key ' + key);\n },\n containsKey: function (key) {\n return this._hashTable.containsKey(key);\n },\n remove: function (key) {\n if (this.containsKey(key)) {\n this.trigger('changed');\n this.length--;\n return this._hashTable.remove(key);\n }\n },\n forEach: function (func, thisRef) {\n this._hashTable.forEach(function (entry) {\n func.call(thisRef, entry.key, entry.value);\n });\n },\n forEachValue: function (func, thisRef) {\n this._hashTable.forEach(function (entry) {\n func.call(thisRef, entry.value);\n });\n },\n forEachKey: function (func, thisRef) {\n this._hashTable.forEach(function (entry) {\n func.call(thisRef, entry.key);\n });\n },\n keys: function () {\n var keys = [];\n this.forEachKey(function (key) {\n keys.push(key);\n });\n return keys;\n }\n });\n var Queue = kendo.Class.extend({\n init: function () {\n this._tail = null;\n this._head = null;\n this.length = 0;\n },\n enqueue: function (value) {\n var entry = {\n value: value,\n next: null\n };\n if (!this._head) {\n this._head = entry;\n this._tail = this._head;\n } else {\n this._tail.next = entry;\n this._tail = this._tail.next;\n }\n this.length++;\n },\n dequeue: function () {\n if (this.length < 1) {\n throw new Error('The queue is empty.');\n }\n var value = this._head.value;\n this._head = this._head.next;\n this.length--;\n return value;\n },\n contains: function (item) {\n var current = this._head;\n while (current) {\n if (current.value === item) {\n return true;\n }\n current = current.next;\n }\n return false;\n }\n });\n var Set = kendo.Observable.extend({\n init: function (resource) {\n var that = this;\n kendo.Observable.fn.init.call(that);\n this._hashTable = new HashTable();\n this.length = 0;\n if (Utils.isDefined(resource)) {\n if (resource instanceof HashTable) {\n resource.forEach(function (d) {\n this.add(d);\n });\n } else if (resource instanceof Dictionary) {\n resource.forEach(function (k, v) {\n this.add({\n key: k,\n value: v\n });\n }, this);\n }\n }\n },\n contains: function (item) {\n return this._hashTable.containsKey(item);\n },\n add: function (item) {\n var entry = this._hashTable.get(item);\n if (!entry) {\n this._hashTable.add(item, item);\n this.length++;\n this.trigger('changed');\n }\n },\n get: function (item) {\n if (this.contains(item)) {\n return this._hashTable.get(item).value;\n } else {\n return null;\n }\n },\n hash: function (item) {\n return this._hashTable._hash(item);\n },\n remove: function (item) {\n if (this.contains(item)) {\n this._hashTable.remove(item);\n this.length--;\n this.trigger('changed');\n }\n },\n forEach: function (func, context) {\n this._hashTable.forEach(function (kv) {\n func(kv.value);\n }, context);\n },\n toArray: function () {\n var r = [];\n this.forEach(function (d) {\n r.push(d);\n });\n return r;\n }\n });\n var Node = kendo.Class.extend({\n init: function (id, shape) {\n this.links = [];\n this.outgoing = [];\n this.incoming = [];\n this.weight = 1;\n if (Utils.isDefined(id)) {\n this.id = id;\n } else {\n this.id = randomId();\n }\n if (Utils.isDefined(shape)) {\n this.associatedShape = shape;\n var b = shape.bounds();\n this.width = b.width;\n this.height = b.height;\n this.x = b.x;\n this.y = b.y;\n } else {\n this.associatedShape = null;\n }\n this.data = null;\n this.type = 'Node';\n this.shortForm = 'Node \\'' + this.id + '\\'';\n this.isVirtual = false;\n },\n isIsolated: function () {\n return Utils.isEmpty(this.links);\n },\n bounds: function (r) {\n if (!Utils.isDefined(r)) {\n return new diagram.Rect(this.x, this.y, this.width, this.height);\n }\n this.x = r.x;\n this.y = r.y;\n this.width = r.width;\n this.height = r.height;\n },\n isLinkedTo: function (node) {\n var that = this;\n return Utils.any(that.links, function (link) {\n return link.getComplement(that) === node;\n });\n },\n getChildren: function () {\n if (this.outgoing.length === 0) {\n return [];\n }\n var children = [];\n for (var i = 0, len = this.outgoing.length; i < len; i++) {\n var link = this.outgoing[i];\n children.push(link.getComplement(this));\n }\n return children;\n },\n getParents: function () {\n if (this.incoming.length === 0) {\n return [];\n }\n var parents = [];\n for (var i = 0, len = this.incoming.length; i < len; i++) {\n var link = this.incoming[i];\n parents.push(link.getComplement(this));\n }\n return parents;\n },\n clone: function () {\n var copy = new Node();\n if (Utils.isDefined(this.weight)) {\n copy.weight = this.weight;\n }\n if (Utils.isDefined(this.balance)) {\n copy.balance = this.balance;\n }\n if (Utils.isDefined(this.owner)) {\n copy.owner = this.owner;\n }\n copy.associatedShape = this.associatedShape;\n copy.x = this.x;\n copy.y = this.y;\n copy.width = this.width;\n copy.height = this.height;\n return copy;\n },\n adjacentTo: function (node) {\n return this.isLinkedTo(node) !== null;\n },\n removeLink: function (link) {\n if (link.source === this) {\n Utils.remove(this.links, link);\n Utils.remove(this.outgoing, link);\n link.source = null;\n }\n if (link.target === this) {\n Utils.remove(this.links, link);\n Utils.remove(this.incoming, link);\n link.target = null;\n }\n },\n hasLinkTo: function (node) {\n return Utils.any(this.outgoing, function (link) {\n return link.target === node;\n });\n },\n degree: function () {\n return this.links.length;\n },\n incidentWith: function (link) {\n return contains(this.links, link);\n },\n getLinksWith: function (node) {\n return Utils.all(this.links, function (link) {\n return link.getComplement(this) === node;\n }, this);\n },\n getNeighbors: function () {\n var neighbors = [];\n Utils.forEach(this.incoming, function (e) {\n neighbors.push(e.getComplement(this));\n }, this);\n Utils.forEach(this.outgoing, function (e) {\n neighbors.push(e.getComplement(this));\n }, this);\n return neighbors;\n }\n });\n var Link = kendo.Class.extend({\n init: function (source, target, id, connection) {\n if (Utils.isUndefined(source)) {\n throw 'The source of the new link is not set.';\n }\n if (Utils.isUndefined(target)) {\n throw 'The target of the new link is not set.';\n }\n var sourceFound, targetFound;\n if (Utils.isString(source)) {\n sourceFound = new Node(source);\n } else {\n sourceFound = source;\n }\n if (Utils.isString(target)) {\n targetFound = new Node(target);\n } else {\n targetFound = target;\n }\n this.source = sourceFound;\n this.target = targetFound;\n this.source.links.push(this);\n this.target.links.push(this);\n this.source.outgoing.push(this);\n this.target.incoming.push(this);\n if (Utils.isDefined(id)) {\n this.id = id;\n } else {\n this.id = randomId();\n }\n if (Utils.isDefined(connection)) {\n this.associatedConnection = connection;\n } else {\n this.associatedConnection = null;\n }\n this.type = 'Link';\n this.shortForm = 'Link \\'' + this.source.id + '->' + this.target.id + '\\'';\n },\n getComplement: function (node) {\n if (this.source !== node && this.target !== node) {\n throw 'The given node is not incident with this link.';\n }\n return this.source === node ? this.target : this.source;\n },\n getCommonNode: function (link) {\n if (this.source === link.source || this.source === link.target) {\n return this.source;\n }\n if (this.target === link.source || this.target === link.target) {\n return this.target;\n }\n return null;\n },\n isBridging: function (v1, v2) {\n return this.source === v1 && this.target === v2 || this.source === v2 && this.target === v1;\n },\n getNodes: function () {\n return [\n this.source,\n this.target\n ];\n },\n incidentWith: function (node) {\n return this.source === node || this.target === node;\n },\n adjacentTo: function (link) {\n return contains(this.source.links, link) || contains(this.target.links, link);\n },\n changeSource: function (node) {\n Utils.remove(this.source.links, this);\n Utils.remove(this.source.outgoing, this);\n node.links.push(this);\n node.outgoing.push(this);\n this.source = node;\n },\n changeTarget: function (node) {\n Utils.remove(this.target.links, this);\n Utils.remove(this.target.incoming, this);\n node.links.push(this);\n node.incoming.push(this);\n this.target = node;\n },\n changesNodes: function (v, w) {\n if (this.source === v) {\n this.changeSource(w);\n } else if (this.target === v) {\n this.changeTarget(w);\n }\n },\n reverse: function () {\n var oldSource = this.source;\n var oldTarget = this.target;\n this.source = oldTarget;\n Utils.remove(oldSource.outgoing, this);\n this.source.outgoing.push(this);\n this.target = oldSource;\n Utils.remove(oldTarget.incoming, this);\n this.target.incoming.push(this);\n return this;\n },\n directTo: function (target) {\n if (this.source !== target && this.target !== target) {\n throw 'The given node is not incident with this link.';\n }\n if (this.target !== target) {\n this.reverse();\n }\n },\n createReverseEdge: function () {\n var r = this.clone();\n r.reverse();\n r.reversed = true;\n return r;\n },\n clone: function () {\n var clone = new Link(this.source, this.target);\n return clone;\n }\n });\n var Graph = kendo.Class.extend({\n init: function (idOrDiagram) {\n this.links = [];\n this.nodes = [];\n this._nodeMap = new Dictionary();\n this.diagram = null;\n this._root = null;\n if (Utils.isDefined(idOrDiagram)) {\n if (Utils.isString(idOrDiagram)) {\n this.id = idOrDiagram;\n } else {\n this.diagram = idOrDiagram;\n this.id = idOrDiagram.id;\n }\n } else {\n this.id = randomId();\n }\n this.bounds = new Rect();\n this._hasCachedRelationships = false;\n this.type = 'Graph';\n },\n cacheRelationships: function (forceRebuild) {\n if (Utils.isUndefined(forceRebuild)) {\n forceRebuild = false;\n }\n if (this._hasCachedRelationships && !forceRebuild) {\n return;\n }\n for (var i = 0, len = this.nodes.length; i < len; i++) {\n var node = this.nodes[i];\n node.children = this.getChildren(node);\n node.parents = this.getParents(node);\n }\n this._hasCachedRelationships = true;\n },\n assignLevels: function (startNode, offset, visited) {\n if (!startNode) {\n throw 'Start node not specified.';\n }\n if (Utils.isUndefined(offset)) {\n offset = 0;\n }\n this.cacheRelationships();\n if (Utils.isUndefined(visited)) {\n visited = new Dictionary();\n Utils.forEach(this.nodes, function (n) {\n visited.add(n, false);\n });\n }\n visited.set(startNode, true);\n startNode.level = offset;\n var children = startNode.children;\n for (var i = 0, len = children.length; i < len; i++) {\n var child = children[i];\n if (!child || visited.get(child)) {\n continue;\n }\n this.assignLevels(child, offset + 1, visited);\n }\n },\n root: function (value) {\n if (Utils.isUndefined(value)) {\n if (!this._root) {\n var found = Utils.first(this.nodes, function (n) {\n return n.incoming.length === 0;\n });\n if (found) {\n return found;\n }\n return Utils.first(this.nodes);\n } else {\n return this._root;\n }\n } else {\n this._root = value;\n }\n },\n getConnectedComponents: function () {\n this.componentIndex = 0;\n this.setItemIndices();\n var componentId = Utils.initArray(this.nodes.length, -1);\n for (var v = 0; v < this.nodes.length; v++) {\n if (componentId[v] === -1) {\n this._collectConnectedNodes(componentId, v);\n this.componentIndex++;\n }\n }\n var components = [], i;\n for (i = 0; i < this.componentIndex; ++i) {\n components[i] = new Graph();\n }\n for (i = 0; i < componentId.length; ++i) {\n var graph = components[componentId[i]];\n graph.addNodeAndOutgoings(this.nodes[i]);\n }\n components.sort(function (a, b) {\n return b.nodes.length - a.nodes.length;\n });\n return components;\n },\n _collectConnectedNodes: function (setIds, nodeIndex) {\n setIds[nodeIndex] = this.componentIndex;\n var node = this.nodes[nodeIndex];\n Utils.forEach(node.links, function (link) {\n var next = link.getComplement(node);\n var nextId = next.index;\n if (setIds[nextId] === -1) {\n this._collectConnectedNodes(setIds, nextId);\n }\n }, this);\n },\n calcBounds: function () {\n if (this.isEmpty()) {\n this.bounds = new Rect();\n return this.bounds;\n }\n var b = null;\n for (var i = 0, len = this.nodes.length; i < len; i++) {\n var node = this.nodes[i];\n if (!b) {\n b = node.bounds();\n } else {\n b = b.union(node.bounds());\n }\n }\n this.bounds = b;\n return this.bounds;\n },\n getSpanningTree: function (root) {\n var tree = new Graph();\n var map = new Dictionary(), source, target;\n tree.root = root.clone();\n tree.root.level = 0;\n tree.root.id = root.id;\n map.add(root, tree.root);\n root.level = 0;\n var visited = [];\n var remaining = [];\n tree._addNode(tree.root);\n visited.push(root);\n remaining.push(root);\n var levelCount = 1;\n while (remaining.length > 0) {\n var next = remaining.pop();\n for (var ni = 0; ni < next.links.length; ni++) {\n var link = next.links[ni];\n var cn = link.getComplement(next);\n if (contains(visited, cn)) {\n continue;\n }\n cn.level = next.level + 1;\n if (levelCount < cn.level + 1) {\n levelCount = cn.level + 1;\n }\n if (!contains(remaining, cn)) {\n remaining.push(cn);\n }\n if (!contains(visited, cn)) {\n visited.push(cn);\n }\n if (map.containsKey(next)) {\n source = map.get(next);\n } else {\n source = next.clone();\n source.level = next.level;\n source.id = next.id;\n map.add(next, source);\n }\n if (map.containsKey(cn)) {\n target = map.get(cn);\n } else {\n target = cn.clone();\n target.level = cn.level;\n target.id = cn.id;\n map.add(cn, target);\n }\n var newLink = new Link(source, target);\n tree.addLink(newLink);\n }\n }\n var treeLevels = [];\n for (var i = 0; i < levelCount; i++) {\n treeLevels.push([]);\n }\n Utils.forEach(tree.nodes, function (node) {\n treeLevels[node.level].push(node);\n });\n tree.treeLevels = treeLevels;\n tree.cacheRelationships();\n return tree;\n },\n takeRandomNode: function (excludedNodes, incidenceLessThan) {\n if (Utils.isUndefined(excludedNodes)) {\n excludedNodes = [];\n }\n if (Utils.isUndefined(incidenceLessThan)) {\n incidenceLessThan = 4;\n }\n if (this.nodes.length === 0) {\n return null;\n }\n if (this.nodes.length === 1) {\n return contains(excludedNodes, this.nodes[0]) ? null : this.nodes[0];\n }\n var pool = $.grep(this.nodes, function (node) {\n return !contains(excludedNodes, node) && node.degree() <= incidenceLessThan;\n });\n if (Utils.isEmpty(pool)) {\n return null;\n }\n return pool[Utils.randomInteger(0, pool.length)];\n },\n isEmpty: function () {\n return Utils.isEmpty(this.nodes);\n },\n isHealthy: function () {\n return Utils.all(this.links, function (link) {\n return contains(this.nodes, link.source) && contains(this.nodes, link.target);\n }, this);\n },\n getParents: function (n) {\n if (!this.hasNode(n)) {\n throw 'The given node is not part of this graph.';\n }\n return n.getParents();\n },\n getChildren: function (n) {\n if (!this.hasNode(n)) {\n throw 'The given node is not part of this graph.';\n }\n return n.getChildren();\n },\n addLink: function (sourceOrLink, target, owner) {\n if (Utils.isUndefined(sourceOrLink)) {\n throw 'The source of the link is not defined.';\n }\n if (Utils.isUndefined(target)) {\n if (Utils.isDefined(sourceOrLink.type) && sourceOrLink.type === 'Link') {\n this.addExistingLink(sourceOrLink);\n return;\n } else {\n throw 'The target of the link is not defined.';\n }\n }\n var foundSource = this.getNode(sourceOrLink);\n if (Utils.isUndefined(foundSource)) {\n foundSource = this.addNode(sourceOrLink);\n }\n var foundTarget = this.getNode(target);\n if (Utils.isUndefined(foundTarget)) {\n foundTarget = this.addNode(target);\n }\n var newLink = new Link(foundSource, foundTarget);\n if (Utils.isDefined(owner)) {\n newLink.owner = owner;\n }\n this.links.push(newLink);\n return newLink;\n },\n removeAllLinks: function () {\n while (this.links.length > 0) {\n var link = this.links[0];\n this.removeLink(link);\n }\n },\n addExistingLink: function (link) {\n if (this.hasLink(link)) {\n return;\n }\n this.links.push(link);\n if (this.hasNode(link.source.id)) {\n var s = this.getNode(link.source.id);\n link.changeSource(s);\n } else {\n this.addNode(link.source);\n }\n if (this.hasNode(link.target.id)) {\n var t = this.getNode(link.target.id);\n link.changeTarget(t);\n } else {\n this.addNode(link.target);\n }\n },\n hasLink: function (linkOrId) {\n if (Utils.isString(linkOrId)) {\n return Utils.any(this.links, function (link) {\n return link.id === linkOrId;\n });\n }\n if (linkOrId.type === 'Link') {\n return contains(this.links, linkOrId);\n }\n throw 'The given object is neither an identifier nor a Link.';\n },\n getNode: function (nodeOrId) {\n var id = nodeOrId.id || nodeOrId;\n if (this._nodeMap.containsKey(id)) {\n return this._nodeMap.get(id);\n }\n },\n hasNode: function (nodeOrId) {\n var id = nodeOrId.id || nodeOrId;\n return this._nodeMap.containsKey(id);\n },\n _addNode: function (node) {\n this.nodes.push(node);\n this._nodeMap.add(node.id, node);\n },\n _removeNode: function (node) {\n Utils.remove(this.nodes, node);\n this._nodeMap.remove(node.id);\n },\n removeNode: function (nodeOrId) {\n var n = nodeOrId;\n if (Utils.isString(nodeOrId)) {\n n = this.getNode(nodeOrId);\n }\n if (Utils.isDefined(n)) {\n var links = n.links;\n n.links = [];\n for (var i = 0, len = links.length; i < len; i++) {\n var link = links[i];\n this.removeLink(link);\n }\n this._removeNode(n);\n } else {\n throw 'The identifier should be a Node or the Id (string) of a node.';\n }\n },\n areConnected: function (n1, n2) {\n return Utils.any(this.links, function (link) {\n return link.source == n1 && link.target == n2 || link.source == n2 && link.target == n1;\n });\n },\n removeLink: function (link) {\n Utils.remove(this.links, link);\n Utils.remove(link.source.outgoing, link);\n Utils.remove(link.source.links, link);\n Utils.remove(link.target.incoming, link);\n Utils.remove(link.target.links, link);\n },\n addNode: function (nodeOrId, layoutRect, owner) {\n var newNode = null;\n if (!Utils.isDefined(nodeOrId)) {\n throw 'No Node or identifier for a new Node is given.';\n }\n if (Utils.isString(nodeOrId)) {\n if (this.hasNode(nodeOrId)) {\n return this.getNode(nodeOrId);\n }\n newNode = new Node(nodeOrId);\n } else {\n if (this.hasNode(nodeOrId)) {\n return this.getNode(nodeOrId);\n }\n newNode = nodeOrId;\n }\n if (Utils.isDefined(layoutRect)) {\n newNode.bounds(layoutRect);\n }\n if (Utils.isDefined(owner)) {\n newNode.owner = owner;\n }\n this._addNode(newNode);\n return newNode;\n },\n addNodeAndOutgoings: function (node) {\n if (!this.hasNode(node)) {\n this._addNode(node);\n }\n var newLinks = node.outgoing;\n node.outgoing = [];\n Utils.forEach(newLinks, function (link) {\n this.addExistingLink(link);\n }, this);\n },\n setItemIndices: function () {\n var i;\n for (i = 0; i < this.nodes.length; ++i) {\n this.nodes[i].index = i;\n }\n for (i = 0; i < this.links.length; ++i) {\n this.links[i].index = i;\n }\n },\n clone: function (saveMapping) {\n var copy = new Graph();\n var save = Utils.isDefined(saveMapping) && saveMapping === true;\n if (save) {\n copy.nodeMap = new Dictionary();\n copy.linkMap = new Dictionary();\n }\n var map = new Dictionary();\n Utils.forEach(this.nodes, function (nOriginal) {\n var nCopy = nOriginal.clone();\n map.set(nOriginal, nCopy);\n copy._addNode(nCopy);\n if (save) {\n copy.nodeMap.set(nCopy, nOriginal);\n }\n });\n Utils.forEach(this.links, function (linkOriginal) {\n if (map.containsKey(linkOriginal.source) && map.containsKey(linkOriginal.target)) {\n var linkCopy = copy.addLink(map.get(linkOriginal.source), map.get(linkOriginal.target));\n if (save) {\n copy.linkMap.set(linkCopy, linkOriginal);\n }\n }\n });\n return copy;\n },\n linearize: function (addIds) {\n return Graph.Utils.linearize(this, addIds);\n },\n depthFirstTraversal: function (startNode, action) {\n if (Utils.isUndefined(startNode)) {\n throw 'You need to supply a starting node.';\n }\n if (Utils.isUndefined(action)) {\n throw 'You need to supply an action.';\n }\n if (!this.hasNode(startNode)) {\n throw 'The given start-node is not part of this graph';\n }\n var foundNode = this.getNode(startNode);\n var visited = [];\n this._dftIterator(foundNode, action, visited);\n },\n _dftIterator: function (node, action, visited) {\n action(node);\n visited.push(node);\n var children = node.getChildren();\n for (var i = 0, len = children.length; i < len; i++) {\n var child = children[i];\n if (contains(visited, child)) {\n continue;\n }\n this._dftIterator(child, action, visited);\n }\n },\n breadthFirstTraversal: function (startNode, action) {\n if (Utils.isUndefined(startNode)) {\n throw 'You need to supply a starting node.';\n }\n if (Utils.isUndefined(action)) {\n throw 'You need to supply an action.';\n }\n if (!this.hasNode(startNode)) {\n throw 'The given start-node is not part of this graph';\n }\n var foundNode = this.getNode(startNode);\n var queue = new Queue();\n var visited = [];\n queue.enqueue(foundNode);\n while (queue.length > 0) {\n var node = queue.dequeue();\n action(node);\n visited.push(node);\n var children = node.getChildren();\n for (var i = 0, len = children.length; i < len; i++) {\n var child = children[i];\n if (contains(visited, child) || contains(queue, child)) {\n continue;\n }\n queue.enqueue(child);\n }\n }\n },\n _stronglyConnectedComponents: function (excludeSingleItems, node, indices, lowLinks, connected, stack, index) {\n indices.add(node, index);\n lowLinks.add(node, index);\n index++;\n stack.push(node);\n var children = node.getChildren(), next;\n for (var i = 0, len = children.length; i < len; i++) {\n next = children[i];\n if (!indices.containsKey(next)) {\n this._stronglyConnectedComponents(excludeSingleItems, next, indices, lowLinks, connected, stack, index);\n lowLinks.add(node, Math.min(lowLinks.get(node), lowLinks.get(next)));\n } else if (contains(stack, next)) {\n lowLinks.add(node, Math.min(lowLinks.get(node), indices.get(next)));\n }\n }\n if (lowLinks.get(node) === indices.get(node)) {\n var component = [];\n do {\n next = stack.pop();\n component.push(next);\n } while (next !== node);\n if (!excludeSingleItems || component.length > 1) {\n connected.push(component);\n }\n }\n },\n findCycles: function (excludeSingleItems) {\n if (Utils.isUndefined(excludeSingleItems)) {\n excludeSingleItems = true;\n }\n var indices = new Dictionary();\n var lowLinks = new Dictionary();\n var connected = [];\n var stack = [];\n for (var i = 0, len = this.nodes.length; i < len; i++) {\n var node = this.nodes[i];\n if (indices.containsKey(node)) {\n continue;\n }\n this._stronglyConnectedComponents(excludeSingleItems, node, indices, lowLinks, connected, stack, 0);\n }\n return connected;\n },\n isAcyclic: function () {\n return Utils.isEmpty(this.findCycles());\n },\n isSubGraph: function (other) {\n var otherArray = other.linearize();\n var thisArray = this.linearize();\n return Utils.all(otherArray, function (s) {\n return contains(thisArray, s);\n });\n },\n makeAcyclic: function () {\n if (this.isEmpty() || this.nodes.length <= 1 || this.links.length <= 1) {\n return [];\n }\n if (this.nodes.length == 2) {\n var result = [];\n if (this.links.length > 1) {\n var oneLink = this.links[0];\n var oneNode = oneLink.source;\n for (var i = 0, len = this.links.length; i < len; i++) {\n var link = this.links[i];\n if (link.source == oneNode) {\n continue;\n }\n var rev = link.reverse();\n result.push(rev);\n }\n }\n return result;\n }\n var copy = this.clone(true);\n var N = this.nodes.length;\n var intensityCatalog = new Dictionary();\n var flowIntensity = function (node) {\n if (node.outgoing.length === 0) {\n return 2 - N;\n } else if (node.incoming.length === 0) {\n return N - 2;\n } else {\n return node.outgoing.length - node.incoming.length;\n }\n };\n var catalogEqualIntensity = function (node, intensityCatalog) {\n var intensity = flowIntensity(node, N);\n if (!intensityCatalog.containsKey(intensity)) {\n intensityCatalog.set(intensity, []);\n }\n intensityCatalog.get(intensity).push(node);\n };\n Utils.forEach(copy.nodes, function (v) {\n catalogEqualIntensity(v, intensityCatalog);\n });\n var sourceStack = [];\n var targetStack = [];\n while (copy.nodes.length > 0) {\n var source, target, intensity;\n if (intensityCatalog.containsKey(2 - N)) {\n var targets = intensityCatalog.get(2 - N);\n while (targets.length > 0) {\n target = targets.pop();\n for (var li = 0; li < target.links.length; li++) {\n var targetLink = target.links[li];\n source = targetLink.getComplement(target);\n intensity = flowIntensity(source, N);\n Utils.remove(intensityCatalog.get(intensity), source);\n source.removeLink(targetLink);\n catalogEqualIntensity(source, intensityCatalog);\n }\n copy._removeNode(target);\n targetStack.unshift(target);\n }\n }\n if (intensityCatalog.containsKey(N - 2)) {\n var sources = intensityCatalog.get(N - 2);\n while (sources.length > 0) {\n source = sources.pop();\n for (var si = 0; si < source.links.length; si++) {\n var sourceLink = source.links[si];\n target = sourceLink.getComplement(source);\n intensity = flowIntensity(target, N);\n Utils.remove(intensityCatalog.get(intensity), target);\n target.removeLink(sourceLink);\n catalogEqualIntensity(target, intensityCatalog);\n }\n sourceStack.push(source);\n copy._removeNode(source);\n }\n }\n if (copy.nodes.length > 0) {\n for (var k = N - 3; k > 2 - N; k--) {\n if (intensityCatalog.containsKey(k) && intensityCatalog.get(k).length > 0) {\n var maxdiff = intensityCatalog.get(k);\n var v = maxdiff.pop();\n for (var ri = 0; ri < v.links.length; ri++) {\n var ril = v.links[ri];\n var u = ril.getComplement(v);\n intensity = flowIntensity(u, N);\n Utils.remove(intensityCatalog.get(intensity), u);\n u.removeLink(ril);\n catalogEqualIntensity(u, intensityCatalog);\n }\n sourceStack.push(v);\n copy._removeNode(v);\n break;\n }\n }\n }\n }\n sourceStack = sourceStack.concat(targetStack);\n var vertexOrder = new Dictionary();\n for (var kk = 0; kk < this.nodes.length; kk++) {\n vertexOrder.set(copy.nodeMap.get(sourceStack[kk]), kk);\n }\n var reversedEdges = [];\n Utils.forEach(this.links, function (link) {\n if (vertexOrder.get(link.source) > vertexOrder.get(link.target)) {\n link.reverse();\n reversedEdges.push(link);\n }\n });\n return reversedEdges;\n }\n });\n Graph.Predefined = {\n EightGraph: function () {\n return Graph.Utils.parse([\n '1->2',\n '2->3',\n '3->4',\n '4->1',\n '3->5',\n '5->6',\n '6->7',\n '7->3'\n ]);\n },\n Mindmap: function () {\n return Graph.Utils.parse([\n '0->1',\n '0->2',\n '0->3',\n '0->4',\n '0->5',\n '1->6',\n '1->7',\n '7->8',\n '2->9',\n '9->10',\n '9->11',\n '3->12',\n '12->13',\n '13->14',\n '4->15',\n '4->16',\n '15->17',\n '15->18',\n '18->19',\n '18->20',\n '14->21',\n '14->22',\n '5->23',\n '23->24',\n '23->25',\n '6->26'\n ]);\n },\n ThreeGraph: function () {\n return Graph.Utils.parse([\n '1->2',\n '2->3',\n '3->1'\n ]);\n },\n BinaryTree: function (levels) {\n if (Utils.isUndefined(levels)) {\n levels = 5;\n }\n return Graph.Utils.createBalancedTree(levels, 2);\n },\n Linear: function (length) {\n if (Utils.isUndefined(length)) {\n length = 10;\n }\n return Graph.Utils.createBalancedTree(length, 1);\n },\n Tree: function (levels, siblingsCount) {\n return Graph.Utils.createBalancedTree(levels, siblingsCount);\n },\n Forest: function (levels, siblingsCount, trees) {\n return Graph.Utils.createBalancedForest(levels, siblingsCount, trees);\n },\n Workflow: function () {\n return Graph.Utils.parse([\n '0->1',\n '1->2',\n '2->3',\n '1->4',\n '4->3',\n '3->5',\n '5->6',\n '6->3',\n '6->7',\n '5->4'\n ]);\n },\n Grid: function (n, m) {\n var g = new diagram.Graph();\n if (n <= 0 && m <= 0) {\n return g;\n }\n for (var i = 0; i < n + 1; i++) {\n var previous = null;\n for (var j = 0; j < m + 1; j++) {\n var node = new Node(i.toString() + '.' + j.toString());\n g.addNode(node);\n if (previous) {\n g.addLink(previous, node);\n }\n if (i > 0) {\n var left = g.getNode((i - 1).toString() + '.' + j.toString());\n g.addLink(left, node);\n }\n previous = node;\n }\n }\n return g;\n }\n };\n Graph.Utils = {\n parse: function (graphString) {\n var previousLink, graph = new diagram.Graph(), parts = graphString.slice();\n for (var i = 0, len = parts.length; i < len; i++) {\n var part = parts[i];\n if (Utils.isString(part)) {\n if (part.indexOf('->') < 0) {\n throw 'The link should be specified as \\'a->b\\'.';\n }\n var p = part.split('->');\n if (p.length != 2) {\n throw 'The link should be specified as \\'a->b\\'.';\n }\n previousLink = new Link(p[0], p[1]);\n graph.addLink(previousLink);\n }\n if (Utils.isObject(part)) {\n if (!previousLink) {\n throw 'Specification found before Link definition.';\n }\n kendo.deepExtend(previousLink, part);\n }\n }\n return graph;\n },\n linearize: function (graph, addIds) {\n if (Utils.isUndefined(graph)) {\n throw 'Expected an instance of a Graph object in slot one.';\n }\n if (Utils.isUndefined(addIds)) {\n addIds = false;\n }\n var lin = [];\n for (var i = 0, len = graph.links.length; i < len; i++) {\n var link = graph.links[i];\n lin.push(link.source.id + '->' + link.target.id);\n if (addIds) {\n lin.push({ id: link.id });\n }\n }\n return lin;\n },\n _addShape: function (kendoDiagram, p, id, shapeDefaults) {\n if (Utils.isUndefined(p)) {\n p = new diagram.Point(0, 0);\n }\n if (Utils.isUndefined(id)) {\n id = randomId();\n }\n shapeDefaults = kendo.deepExtend({\n width: 20,\n height: 20,\n id: id,\n radius: 10,\n fill: '#778899',\n data: 'circle',\n undoable: false,\n x: p.x,\n y: p.y\n }, shapeDefaults);\n return kendoDiagram.addShape(shapeDefaults);\n },\n _addConnection: function (diagram, from, to, options) {\n return diagram.connect(from, to, options);\n },\n createDiagramFromGraph: function (diagram, graph, doLayout, randomSize) {\n if (Utils.isUndefined(diagram)) {\n throw 'The diagram surface is undefined.';\n }\n if (Utils.isUndefined(graph)) {\n throw 'No graph specification defined.';\n }\n if (Utils.isUndefined(doLayout)) {\n doLayout = true;\n }\n if (Utils.isUndefined(randomSize)) {\n randomSize = false;\n }\n var width = diagram.element.clientWidth || 200;\n var height = diagram.element.clientHeight || 200;\n var map = [], node, shape;\n for (var i = 0, len = graph.nodes.length; i < len; i++) {\n node = graph.nodes[i];\n var p = node.position;\n if (Utils.isUndefined(p)) {\n if (Utils.isDefined(node.x) && Utils.isDefined(node.y)) {\n p = new Point(node.x, node.y);\n } else {\n p = new Point(Utils.randomInteger(10, width - 20), Utils.randomInteger(10, height - 20));\n }\n }\n var opt = {};\n if (node.id === '0') {\n } else if (randomSize) {\n kendo.deepExtend(opt, {\n width: Math.random() * 150 + 20,\n height: Math.random() * 80 + 50,\n data: 'rectangle',\n fill: { color: '#778899' }\n });\n }\n shape = this._addShape(diagram, p, node.id, opt);\n var bounds = shape.bounds();\n if (Utils.isDefined(bounds)) {\n node.x = bounds.x;\n node.y = bounds.y;\n node.width = bounds.width;\n node.height = bounds.height;\n }\n map[node.id] = shape;\n }\n for (var gli = 0; gli < graph.links.length; gli++) {\n var link = graph.links[gli];\n var sourceShape = map[link.source.id];\n if (Utils.isUndefined(sourceShape)) {\n continue;\n }\n var targetShape = map[link.target.id];\n if (Utils.isUndefined(targetShape)) {\n continue;\n }\n this._addConnection(diagram, sourceShape, targetShape, { id: link.id });\n }\n if (doLayout) {\n var l = new diagram.SpringLayout(diagram);\n l.layoutGraph(graph, { limitToView: false });\n for (var shi = 0; shi < graph.nodes.length; shi++) {\n node = graph.nodes[shi];\n shape = map[node.id];\n shape.bounds(new Rect(node.x, node.y, node.width, node.height));\n }\n }\n },\n createBalancedTree: function (levels, siblingsCount) {\n if (Utils.isUndefined(levels)) {\n levels = 3;\n }\n if (Utils.isUndefined(siblingsCount)) {\n siblingsCount = 3;\n }\n var g = new diagram.Graph(), counter = -1, lastAdded = [], news;\n if (levels <= 0 || siblingsCount <= 0) {\n return g;\n }\n var root = new Node((++counter).toString());\n g.addNode(root);\n g.root = root;\n lastAdded.push(root);\n for (var i = 0; i < levels; i++) {\n news = [];\n for (var j = 0; j < lastAdded.length; j++) {\n var parent = lastAdded[j];\n for (var k = 0; k < siblingsCount; k++) {\n var item = new Node((++counter).toString());\n g.addLink(parent, item);\n news.push(item);\n }\n }\n lastAdded = news;\n }\n return g;\n },\n createBalancedForest: function (levels, siblingsCount, treeCount) {\n if (Utils.isUndefined(levels)) {\n levels = 3;\n }\n if (Utils.isUndefined(siblingsCount)) {\n siblingsCount = 3;\n }\n if (Utils.isUndefined(treeCount)) {\n treeCount = 5;\n }\n var g = new diagram.Graph(), counter = -1, lastAdded = [], news;\n if (levels <= 0 || siblingsCount <= 0 || treeCount <= 0) {\n return g;\n }\n for (var t = 0; t < treeCount; t++) {\n var root = new Node((++counter).toString());\n g.addNode(root);\n lastAdded = [root];\n for (var i = 0; i < levels; i++) {\n news = [];\n for (var j = 0; j < lastAdded.length; j++) {\n var parent = lastAdded[j];\n for (var k = 0; k < siblingsCount; k++) {\n var item = new Node((++counter).toString());\n g.addLink(parent, item);\n news.push(item);\n }\n }\n lastAdded = news;\n }\n }\n return g;\n },\n createRandomConnectedGraph: function (nodeCount, maxIncidence, isTree) {\n if (Utils.isUndefined(nodeCount)) {\n nodeCount = 40;\n }\n if (Utils.isUndefined(maxIncidence)) {\n maxIncidence = 4;\n }\n if (Utils.isUndefined(isTree)) {\n isTree = false;\n }\n var g = new diagram.Graph(), counter = -1;\n if (nodeCount <= 0) {\n return g;\n }\n var root = new Node((++counter).toString());\n g.addNode(root);\n if (nodeCount === 1) {\n return g;\n }\n if (nodeCount > 1) {\n for (var i = 1; i < nodeCount; i++) {\n var poolNode = g.takeRandomNode([], maxIncidence);\n if (!poolNode) {\n break;\n }\n var newNode = g.addNode(i.toString());\n g.addLink(poolNode, newNode);\n }\n if (!isTree && nodeCount > 1) {\n var randomAdditions = Utils.randomInteger(1, nodeCount);\n for (var ri = 0; ri < randomAdditions; ri++) {\n var n1 = g.takeRandomNode([], maxIncidence);\n var n2 = g.takeRandomNode([], maxIncidence);\n if (n1 && n2 && !g.areConnected(n1, n2)) {\n g.addLink(n1, n2);\n }\n }\n }\n return g;\n }\n },\n randomDiagram: function (diagram, shapeCount, maxIncidence, isTree, randomSize) {\n var g = kendo.dataviz.diagram.Graph.Utils.createRandomConnectedGraph(shapeCount, maxIncidence, isTree);\n Graph.Utils.createDiagramFromGraph(diagram, g, false, randomSize);\n }\n };\n kendo.deepExtend(diagram, {\n init: function (element) {\n kendo.init(element, diagram.ui);\n },\n Point: Point,\n Intersect: Intersect,\n Geometry: Geometry,\n Rect: Rect,\n Size: Size,\n RectAlign: RectAlign,\n Matrix: Matrix,\n MatrixVector: MatrixVector,\n normalVariable: normalVariable,\n randomId: randomId,\n Dictionary: Dictionary,\n HashTable: HashTable,\n Queue: Queue,\n Set: Set,\n Node: Node,\n Link: Link,\n Graph: Graph,\n PathDefiner: PathDefiner\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/diagram/svg', [\n 'kendo.drawing',\n 'dataviz/diagram/math'\n ], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, diagram = kendo.dataviz.diagram, Class = kendo.Class, deepExtend = kendo.deepExtend, Point = diagram.Point, Rect = diagram.Rect, Matrix = diagram.Matrix, Utils = diagram.Utils, isNumber = Utils.isNumber, isString = Utils.isString, MatrixVector = diagram.MatrixVector, g = kendo.geometry, d = kendo.drawing, defined = d.util.defined, inArray = $.inArray;\n var TRANSPARENT = 'transparent', Markers = {\n none: 'none',\n arrowStart: 'ArrowStart',\n filledCircle: 'FilledCircle',\n arrowEnd: 'ArrowEnd'\n }, FULL_CIRCLE_ANGLE = 360, START = 'start', END = 'end', WIDTH = 'width', HEIGHT = 'height', X = 'x', Y = 'y';\n diagram.Markers = Markers;\n function diffNumericOptions(options, fields) {\n var elementOptions = this.options;\n var hasChanges = false;\n var value, field;\n for (var i = 0; i < fields.length; i++) {\n field = fields[i];\n value = options[field];\n if (isNumber(value) && elementOptions[field] !== value) {\n elementOptions[field] = value;\n hasChanges = true;\n }\n }\n return hasChanges;\n }\n var Scale = Class.extend({\n init: function (x, y) {\n this.x = x;\n this.y = y;\n },\n toMatrix: function () {\n return Matrix.scaling(this.x, this.y);\n },\n toString: function () {\n return kendo.format('scale({0},{1})', this.x, this.y);\n },\n invert: function () {\n return new Scale(1 / this.x, 1 / this.y);\n }\n });\n var Translation = Class.extend({\n init: function (x, y) {\n this.x = x;\n this.y = y;\n },\n toMatrixVector: function () {\n return new MatrixVector(0, 0, 0, 0, this.x, this.y);\n },\n toMatrix: function () {\n return Matrix.translation(this.x, this.y);\n },\n toString: function () {\n return kendo.format('translate({0},{1})', this.x, this.y);\n },\n plus: function (delta) {\n this.x += delta.x;\n this.y += delta.y;\n },\n times: function (factor) {\n this.x *= factor;\n this.y *= factor;\n },\n length: function () {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n },\n normalize: function () {\n if (this.Length === 0) {\n return;\n }\n this.times(1 / this.length());\n },\n invert: function () {\n return new Translation(-this.x, -this.y);\n }\n });\n var Rotation = Class.extend({\n init: function (angle, x, y) {\n this.x = x || 0;\n this.y = y || 0;\n this.angle = angle;\n },\n toString: function () {\n if (this.x && this.y) {\n return kendo.format('rotate({0},{1},{2})', this.angle, this.x, this.y);\n } else {\n return kendo.format('rotate({0})', this.angle);\n }\n },\n toMatrix: function () {\n return Matrix.rotation(this.angle, this.x, this.y);\n },\n center: function () {\n return new Point(this.x, this.y);\n },\n invert: function () {\n return new Rotation(FULL_CIRCLE_ANGLE - this.angle, this.x, this.y);\n }\n });\n Rotation.ZERO = new Rotation(0);\n Rotation.create = function (rotation) {\n return new Rotation(rotation.angle, rotation.x, rotation.y);\n };\n Rotation.parse = function (str) {\n var values = str.slice(1, str.length - 1).split(','), angle = values[0], x = values[1], y = values[2];\n var rotation = new Rotation(angle, x, y);\n return rotation;\n };\n var CompositeTransform = Class.extend({\n init: function (x, y, scaleX, scaleY, angle, center) {\n this.translate = new Translation(x, y);\n if (scaleX !== undefined && scaleY !== undefined) {\n this.scale = new Scale(scaleX, scaleY);\n }\n if (angle !== undefined) {\n this.rotate = center ? new Rotation(angle, center.x, center.y) : new Rotation(angle);\n }\n },\n toString: function () {\n var toString = function (transform) {\n return transform ? transform.toString() : '';\n };\n return toString(this.translate) + toString(this.rotate) + toString(this.scale);\n },\n render: function (visual) {\n visual._transform = this;\n visual._renderTransform();\n },\n toMatrix: function () {\n var m = Matrix.unit();\n if (this.translate) {\n m = m.times(this.translate.toMatrix());\n }\n if (this.rotate) {\n m = m.times(this.rotate.toMatrix());\n }\n if (this.scale) {\n m = m.times(this.scale.toMatrix());\n }\n return m;\n },\n invert: function () {\n var rotate = this.rotate ? this.rotate.invert() : undefined, rotateMatrix = rotate ? rotate.toMatrix() : Matrix.unit(), scale = this.scale ? this.scale.invert() : undefined, scaleMatrix = scale ? scale.toMatrix() : Matrix.unit();\n var translatePoint = new Point(-this.translate.x, -this.translate.y);\n translatePoint = rotateMatrix.times(scaleMatrix).apply(translatePoint);\n var translate = new Translation(translatePoint.x, translatePoint.y);\n var transform = new CompositeTransform();\n transform.translate = translate;\n transform.rotate = rotate;\n transform.scale = scale;\n return transform;\n }\n });\n var AutoSizeableMixin = {\n _setScale: function () {\n var options = this.options;\n var originWidth = this._originWidth;\n var originHeight = this._originHeight;\n var scaleX = options.width / originWidth;\n var scaleY = options.height / originHeight;\n if (!isNumber(scaleX)) {\n scaleX = 1;\n }\n if (!isNumber(scaleY)) {\n scaleY = 1;\n }\n this._transform.scale = new Scale(scaleX, scaleY);\n },\n _setTranslate: function () {\n var options = this.options;\n var x = options.x || 0;\n var y = options.y || 0;\n this._transform.translate = new Translation(x, y);\n },\n _initSize: function () {\n var options = this.options;\n var transform = false;\n if (options.autoSize !== false && (defined(options.width) || defined(options.height))) {\n this._measure(true);\n this._setScale();\n transform = true;\n }\n if (defined(options.x) || defined(options.y)) {\n this._setTranslate();\n transform = true;\n }\n if (transform) {\n this._renderTransform();\n }\n },\n _updateSize: function (options) {\n var update = false;\n if (this.options.autoSize !== false && this._diffNumericOptions(options, [\n WIDTH,\n HEIGHT\n ])) {\n update = true;\n this._measure(true);\n this._setScale();\n }\n if (this._diffNumericOptions(options, [\n X,\n Y\n ])) {\n update = true;\n this._setTranslate();\n }\n if (update) {\n this._renderTransform();\n }\n return update;\n }\n };\n var Element = Class.extend({\n init: function (options) {\n var element = this;\n element.options = deepExtend({}, element.options, options);\n element.id = element.options.id;\n element._originSize = Rect.empty();\n element._transform = new CompositeTransform();\n },\n visible: function (value) {\n return this.drawingContainer().visible(value);\n },\n redraw: function (options) {\n if (options && options.id) {\n this.id = options.id;\n }\n },\n position: function (x, y) {\n var options = this.options;\n if (!defined(x)) {\n return new Point(options.x, options.y);\n }\n if (defined(y)) {\n options.x = x;\n options.y = y;\n } else if (x instanceof Point) {\n options.x = x.x;\n options.y = x.y;\n }\n this._transform.translate = new Translation(options.x, options.y);\n this._renderTransform();\n },\n rotate: function (angle, center) {\n if (defined(angle)) {\n this._transform.rotate = new Rotation(angle, center.x, center.y);\n this._renderTransform();\n }\n return this._transform.rotate || Rotation.ZERO;\n },\n drawingContainer: function () {\n return this.drawingElement;\n },\n _renderTransform: function () {\n var matrix = this._transform.toMatrix();\n this.drawingContainer().transform(new g.Matrix(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f));\n },\n _hover: function () {\n },\n _diffNumericOptions: diffNumericOptions,\n _measure: function (force) {\n var rect;\n if (!this._measured || force) {\n var box = this._boundingBox() || new g.Rect();\n var startPoint = box.topLeft();\n rect = new Rect(startPoint.x, startPoint.y, box.width(), box.height());\n this._originSize = rect;\n this._originWidth = rect.width;\n this._originHeight = rect.height;\n this._measured = true;\n } else {\n rect = this._originSize;\n }\n return rect;\n },\n _boundingBox: function () {\n return this.drawingElement.rawBBox();\n }\n });\n var VisualBase = Element.extend({\n init: function (options) {\n Element.fn.init.call(this, options);\n options = this.options;\n options.fill = normalizeDrawingOptions(options.fill);\n options.stroke = normalizeDrawingOptions(options.stroke);\n },\n options: {\n stroke: {\n color: 'gray',\n width: 1\n },\n fill: { color: TRANSPARENT }\n },\n fill: function (color, opacity) {\n this._fill({\n color: getColor(color),\n opacity: opacity\n });\n },\n stroke: function (color, width, opacity) {\n this._stroke({\n color: getColor(color),\n width: width,\n opacity: opacity\n });\n },\n redraw: function (options) {\n if (options) {\n var stroke = options.stroke;\n var fill = options.fill;\n if (stroke) {\n this._stroke(normalizeDrawingOptions(stroke));\n }\n if (fill) {\n this._fill(normalizeDrawingOptions(fill));\n }\n Element.fn.redraw.call(this, options);\n }\n },\n _hover: function (show) {\n var drawingElement = this.drawingElement;\n var options = this.options;\n var hover = options.hover;\n if (hover && hover.fill) {\n var fill = show ? normalizeDrawingOptions(hover.fill) : options.fill;\n drawingElement.fill(fill.color, fill.opacity);\n }\n },\n _stroke: function (strokeOptions) {\n var options = this.options;\n deepExtend(options, { stroke: strokeOptions });\n strokeOptions = options.stroke;\n var stroke = null;\n if (strokeOptions.width > 0) {\n stroke = {\n color: strokeOptions.color,\n width: strokeOptions.width,\n opacity: strokeOptions.opacity,\n dashType: strokeOptions.dashType\n };\n }\n this.drawingElement.options.set('stroke', stroke);\n },\n _fill: function (fillOptions) {\n var options = this.options;\n deepExtend(options, { fill: fillOptions || {} });\n var fill = options.fill;\n if (fill.gradient) {\n var gradient = fill.gradient;\n var GradientClass = gradient.type === 'radial' ? d.RadialGradient : d.LinearGradient;\n this.drawingElement.fill(new GradientClass(gradient));\n } else {\n this.drawingElement.fill(fill.color, fill.opacity);\n }\n }\n });\n var TextBlock = VisualBase.extend({\n init: function (options) {\n options = this._textColor(options);\n VisualBase.fn.init.call(this, options);\n this._font();\n this._initText();\n this._initSize();\n },\n options: {\n fontSize: 15,\n fontFamily: 'sans-serif',\n stroke: { width: 0 },\n fill: { color: 'black' },\n autoSize: true\n },\n _initText: function () {\n var options = this.options;\n this.drawingElement = new d.Text(defined(options.text) ? options.text : '', new g.Point(), { font: options.font });\n this._fill();\n this._stroke();\n },\n _textColor: function (options) {\n if (options && options.color) {\n options = deepExtend({}, options, { fill: { color: options.color } });\n }\n return options;\n },\n _font: function () {\n var options = this.options;\n if (options.fontFamily && defined(options.fontSize)) {\n var fontOptions = [];\n if (options.fontStyle) {\n fontOptions.push(options.fontStyle);\n }\n if (options.fontWeight) {\n fontOptions.push(options.fontWeight);\n }\n fontOptions.push(options.fontSize + (isNumber(options.fontSize) ? 'px' : ''));\n fontOptions.push(options.fontFamily);\n options.font = fontOptions.join(' ');\n } else {\n delete options.font;\n }\n },\n content: function (text) {\n return this.drawingElement.content(text);\n },\n redraw: function (options) {\n if (options) {\n var sizeChanged = false;\n var textOptions = this.options;\n options = this._textColor(options);\n VisualBase.fn.redraw.call(this, options);\n if (options.fontFamily || defined(options.fontSize) || options.fontStyle || options.fontWeight) {\n deepExtend(textOptions, {\n fontFamily: options.fontFamily,\n fontSize: options.fontSize,\n fontStyle: options.fontStyle,\n fontWeight: options.fontWeight\n });\n this._font();\n this.drawingElement.options.set('font', textOptions.font);\n sizeChanged = true;\n }\n if (options.text) {\n this.content(options.text);\n sizeChanged = true;\n }\n if (!this._updateSize(options) && sizeChanged) {\n this._initSize();\n }\n }\n }\n });\n deepExtend(TextBlock.fn, AutoSizeableMixin);\n var Rectangle = VisualBase.extend({\n init: function (options) {\n VisualBase.fn.init.call(this, options);\n this._initPath();\n this._setPosition();\n },\n _setPosition: function () {\n var options = this.options;\n var x = options.x;\n var y = options.y;\n if (defined(x) || defined(y)) {\n this.position(x || 0, y || 0);\n }\n },\n redraw: function (options) {\n if (options) {\n VisualBase.fn.redraw.call(this, options);\n if (this._diffNumericOptions(options, [\n WIDTH,\n HEIGHT\n ])) {\n this._drawPath();\n }\n if (this._diffNumericOptions(options, [\n X,\n Y\n ])) {\n this._setPosition();\n }\n }\n },\n _initPath: function () {\n var options = this.options;\n this.drawingElement = new d.Path({\n stroke: options.stroke,\n closed: true\n });\n this._fill();\n this._drawPath();\n },\n _drawPath: function () {\n var drawingElement = this.drawingElement;\n var sizeOptions = sizeOptionsOrDefault(this.options);\n var width = sizeOptions.width;\n var height = sizeOptions.height;\n drawingElement.segments.elements([\n createSegment(0, 0),\n createSegment(width, 0),\n createSegment(width, height),\n createSegment(0, height)\n ]);\n }\n });\n var MarkerBase = VisualBase.extend({\n init: function (options) {\n VisualBase.fn.init.call(this, options);\n var anchor = this.options.anchor;\n this.anchor = new g.Point(anchor.x, anchor.y);\n this.createElement();\n },\n options: {\n stroke: {\n color: TRANSPARENT,\n width: 0\n },\n fill: { color: 'black' }\n },\n _transformToPath: function (point, path) {\n var transform = path.transform();\n if (point && transform) {\n point = point.transformCopy(transform);\n }\n return point;\n },\n redraw: function (options) {\n if (options) {\n if (options.position) {\n this.options.position = options.position;\n }\n VisualBase.fn.redraw.call(this, options);\n }\n }\n });\n var CircleMarker = MarkerBase.extend({\n options: {\n radius: 4,\n anchor: {\n x: 0,\n y: 0\n }\n },\n createElement: function () {\n var options = this.options;\n this.drawingElement = new d.Circle(new g.Circle(this.anchor, options.radius), {\n fill: options.fill,\n stroke: options.stroke\n });\n },\n positionMarker: function (path) {\n var options = this.options;\n var position = options.position;\n var segments = path.segments;\n var targetSegment;\n var point;\n if (position == START) {\n targetSegment = segments[0];\n } else {\n targetSegment = segments[segments.length - 1];\n }\n if (targetSegment) {\n point = this._transformToPath(targetSegment.anchor(), path);\n this.drawingElement.transform(g.transform().translate(point.x, point.y));\n }\n }\n });\n var ArrowMarker = MarkerBase.extend({\n options: {\n path: 'M 0 0 L 10 5 L 0 10 L 3 5 z',\n anchor: {\n x: 10,\n y: 5\n }\n },\n createElement: function () {\n var options = this.options;\n this.drawingElement = d.Path.parse(options.path, {\n fill: options.fill,\n stroke: options.stroke\n });\n },\n positionMarker: function (path) {\n var points = this._linePoints(path);\n var start = points.start;\n var end = points.end;\n var transform = g.transform();\n if (start) {\n transform.rotate(lineAngle(start, end), end);\n }\n if (end) {\n var anchor = this.anchor;\n var translate = end.clone().translate(-anchor.x, -anchor.y);\n transform.translate(translate.x, translate.y);\n }\n this.drawingElement.transform(transform);\n },\n _linePoints: function (path) {\n var options = this.options;\n var segments = path.segments;\n var startPoint, endPoint, targetSegment;\n if (options.position == START) {\n targetSegment = segments[0];\n if (targetSegment) {\n endPoint = targetSegment.anchor();\n startPoint = targetSegment.controlOut();\n var nextSegment = segments[1];\n if (!startPoint && nextSegment) {\n startPoint = nextSegment.anchor();\n }\n }\n } else {\n targetSegment = segments[segments.length - 1];\n if (targetSegment) {\n endPoint = targetSegment.anchor();\n startPoint = targetSegment.controlIn();\n var prevSegment = segments[segments.length - 2];\n if (!startPoint && prevSegment) {\n startPoint = prevSegment.anchor();\n }\n }\n }\n if (endPoint) {\n return {\n start: this._transformToPath(startPoint, path),\n end: this._transformToPath(endPoint, path)\n };\n }\n }\n });\n var MarkerPathMixin = {\n _getPath: function (position) {\n var path = this.drawingElement;\n if (path instanceof d.MultiPath) {\n if (position == START) {\n path = path.paths[0];\n } else {\n path = path.paths[path.paths.length - 1];\n }\n }\n if (path && path.segments.length) {\n return path;\n }\n },\n _normalizeMarkerOptions: function (options) {\n var startCap = options.startCap;\n var endCap = options.endCap;\n if (isString(startCap)) {\n options.startCap = { type: startCap };\n }\n if (isString(endCap)) {\n options.endCap = { type: endCap };\n }\n },\n _removeMarker: function (position) {\n var marker = this._markers[position];\n if (marker) {\n this.drawingContainer().remove(marker.drawingElement);\n delete this._markers[position];\n }\n },\n _createMarkers: function () {\n var options = this.options;\n this._normalizeMarkerOptions(options);\n this._markers = {};\n this._markers[START] = this._createMarker(options.startCap, START);\n this._markers[END] = this._createMarker(options.endCap, END);\n },\n _createMarker: function (options, position) {\n var type = (options || {}).type;\n var path = this._getPath(position);\n var markerType, marker;\n if (!path) {\n this._removeMarker(position);\n return;\n }\n if (type == Markers.filledCircle) {\n markerType = CircleMarker;\n } else if (type == Markers.arrowStart || type == Markers.arrowEnd) {\n markerType = ArrowMarker;\n } else {\n this._removeMarker(position);\n }\n if (markerType) {\n marker = new markerType(deepExtend({}, options, { position: position }));\n marker.positionMarker(path);\n this.drawingContainer().append(marker.drawingElement);\n return marker;\n }\n },\n _positionMarker: function (position) {\n var marker = this._markers[position];\n if (marker) {\n var path = this._getPath(position);\n if (path) {\n marker.positionMarker(path);\n } else {\n this._removeMarker(position);\n }\n }\n },\n _capMap: {\n start: 'startCap',\n end: 'endCap'\n },\n _redrawMarker: function (pathChange, position, options) {\n this._normalizeMarkerOptions(options);\n var pathOptions = this.options;\n var cap = this._capMap[position];\n var pathCapType = (pathOptions[cap] || {}).type;\n var optionsCap = options[cap];\n var created = false;\n if (optionsCap) {\n pathOptions[cap] = deepExtend({}, pathOptions[cap], optionsCap);\n if (optionsCap.type && pathCapType != optionsCap.type) {\n this._removeMarker(position);\n this._markers[position] = this._createMarker(pathOptions[cap], position);\n created = true;\n } else if (this._markers[position]) {\n this._markers[position].redraw(optionsCap);\n }\n } else if (pathChange && !this._markers[position] && pathOptions[cap]) {\n this._markers[position] = this._createMarker(pathOptions[cap], position);\n created = true;\n }\n return created;\n },\n _redrawMarkers: function (pathChange, options) {\n if (!this._redrawMarker(pathChange, START, options) && pathChange) {\n this._positionMarker(START);\n }\n if (!this._redrawMarker(pathChange, END, options) && pathChange) {\n this._positionMarker(END);\n }\n }\n };\n var Path = VisualBase.extend({\n init: function (options) {\n VisualBase.fn.init.call(this, options);\n this.container = new d.Group();\n this._createElements();\n this._initSize();\n },\n options: { autoSize: true },\n drawingContainer: function () {\n return this.container;\n },\n data: function (value) {\n var options = this.options;\n if (value) {\n if (options.data != value) {\n options.data = value;\n this._setData(value);\n this._initSize();\n this._redrawMarkers(true, {});\n }\n } else {\n return options.data;\n }\n },\n redraw: function (options) {\n if (options) {\n VisualBase.fn.redraw.call(this, options);\n var pathOptions = this.options;\n var data = options.data;\n if (defined(data) && pathOptions.data != data) {\n pathOptions.data = data;\n this._setData(data);\n if (!this._updateSize(options)) {\n this._initSize();\n }\n this._redrawMarkers(true, options);\n } else {\n this._updateSize(options);\n this._redrawMarkers(false, options);\n }\n }\n },\n _createElements: function () {\n var options = this.options;\n this.drawingElement = d.Path.parse(options.data || '', { stroke: options.stroke });\n this._fill();\n this.container.append(this.drawingElement);\n this._createMarkers();\n },\n _setData: function (data) {\n var drawingElement = this.drawingElement;\n var multipath = d.Path.parse(data || '');\n var paths = multipath.paths.slice(0);\n multipath.paths.elements([]);\n drawingElement.paths.elements(paths);\n }\n });\n deepExtend(Path.fn, AutoSizeableMixin);\n deepExtend(Path.fn, MarkerPathMixin);\n var Line = VisualBase.extend({\n init: function (options) {\n VisualBase.fn.init.call(this, options);\n this.container = new d.Group();\n this._initPath();\n this._createMarkers();\n },\n drawingContainer: function () {\n return this.container;\n },\n redraw: function (options) {\n if (options) {\n options = options || {};\n var from = options.from;\n var to = options.to;\n if (from) {\n this.options.from = from;\n }\n if (to) {\n this.options.to = to;\n }\n if (from || to) {\n this._drawPath();\n this._redrawMarkers(true, options);\n } else {\n this._redrawMarkers(false, options);\n }\n VisualBase.fn.redraw.call(this, options);\n }\n },\n _initPath: function () {\n var options = this.options;\n var drawingElement = this.drawingElement = new d.Path({ stroke: options.stroke });\n this._fill();\n this._drawPath();\n this.container.append(drawingElement);\n },\n _drawPath: function () {\n var options = this.options;\n var drawingElement = this.drawingElement;\n var from = options.from || new Point();\n var to = options.to || new Point();\n drawingElement.segments.elements([\n createSegment(from.x, from.y),\n createSegment(to.x, to.y)\n ]);\n }\n });\n deepExtend(Line.fn, MarkerPathMixin);\n var Polyline = VisualBase.extend({\n init: function (options) {\n VisualBase.fn.init.call(this, options);\n this.container = new d.Group();\n this._initPath();\n this._createMarkers();\n },\n drawingContainer: function () {\n return this.container;\n },\n points: function (points) {\n var options = this.options;\n if (points) {\n options.points = points;\n this._updatePath();\n } else {\n return options.points;\n }\n },\n redraw: function (options) {\n if (options) {\n var points = options.points;\n VisualBase.fn.redraw.call(this, options);\n if (points && this._pointsDiffer(points)) {\n this.points(points);\n this._redrawMarkers(true, options);\n } else {\n this._redrawMarkers(false, options);\n }\n }\n },\n _initPath: function () {\n var options = this.options;\n this.drawingElement = new d.Path({ stroke: options.stroke });\n this._fill();\n this.container.append(this.drawingElement);\n if (options.points) {\n this._updatePath();\n }\n },\n _pointsDiffer: function (points) {\n var currentPoints = this.options.points;\n var differ = currentPoints.length !== points.length;\n if (!differ) {\n for (var i = 0; i < points.length; i++) {\n if (currentPoints[i].x !== points[i].x || currentPoints[i].y !== points[i].y) {\n differ = true;\n break;\n }\n }\n }\n return differ;\n },\n _updatePath: function () {\n var drawingElement = this.drawingElement;\n var options = this.options;\n var points = options.points;\n var segments = [];\n var point;\n for (var i = 0; i < points.length; i++) {\n point = points[i];\n segments.push(createSegment(point.x, point.y));\n }\n drawingElement.segments.elements(segments);\n },\n options: { points: [] }\n });\n deepExtend(Polyline.fn, MarkerPathMixin);\n var Image = Element.extend({\n init: function (options) {\n Element.fn.init.call(this, options);\n this._initImage();\n },\n redraw: function (options) {\n if (options) {\n if (options.source) {\n this.drawingElement.src(options.source);\n }\n if (this._diffNumericOptions(options, [\n WIDTH,\n HEIGHT,\n X,\n Y\n ])) {\n this.drawingElement.rect(this._rect());\n }\n Element.fn.redraw.call(this, options);\n }\n },\n _initImage: function () {\n var options = this.options;\n var rect = this._rect();\n this.drawingElement = new d.Image(options.source, rect, {});\n },\n _rect: function () {\n var sizeOptions = sizeOptionsOrDefault(this.options);\n var origin = new g.Point(sizeOptions.x, sizeOptions.y);\n var size = new g.Size(sizeOptions.width, sizeOptions.height);\n return new g.Rect(origin, size);\n }\n });\n var Group = Element.extend({\n init: function (options) {\n this.children = [];\n Element.fn.init.call(this, options);\n this.drawingElement = new d.Group();\n this._initSize();\n },\n options: { autoSize: false },\n append: function (visual) {\n this.drawingElement.append(visual.drawingContainer());\n this.children.push(visual);\n this._childrenChange = true;\n },\n remove: function (visual) {\n if (this._remove(visual)) {\n this._childrenChange = true;\n }\n },\n _remove: function (visual) {\n var index = inArray(visual, this.children);\n if (index >= 0) {\n this.drawingElement.removeAt(index);\n this.children.splice(index, 1);\n return true;\n }\n },\n clear: function () {\n this.drawingElement.clear();\n this.children = [];\n this._childrenChange = true;\n },\n toFront: function (visuals) {\n var visual;\n for (var i = 0; i < visuals.length; i++) {\n visual = visuals[i];\n if (this._remove(visual)) {\n this.append(visual);\n }\n }\n },\n toBack: function (visuals) {\n this._reorderChildren(visuals, 0);\n },\n toIndex: function (visuals, indices) {\n this._reorderChildren(visuals, indices);\n },\n _reorderChildren: function (visuals, indices) {\n var group = this.drawingElement;\n var drawingChildren = group.children.slice(0);\n var children = this.children;\n var fixedPosition = isNumber(indices);\n var i, index, toIndex, drawingElement, visual;\n for (i = 0; i < visuals.length; i++) {\n visual = visuals[i];\n drawingElement = visual.drawingContainer();\n index = inArray(visual, children);\n if (index >= 0) {\n drawingChildren.splice(index, 1);\n children.splice(index, 1);\n toIndex = fixedPosition ? indices : indices[i];\n drawingChildren.splice(toIndex, 0, drawingElement);\n children.splice(toIndex, 0, visual);\n }\n }\n group.clear();\n group.append.apply(group, drawingChildren);\n },\n redraw: function (options) {\n if (options) {\n if (this._childrenChange) {\n this._childrenChange = false;\n if (!this._updateSize(options)) {\n this._initSize();\n }\n } else {\n this._updateSize(options);\n }\n Element.fn.redraw.call(this, options);\n }\n },\n _boundingBox: function () {\n var children = this.children;\n var boundingBox;\n var visual, childBoundingBox;\n for (var i = 0; i < children.length; i++) {\n visual = children[i];\n if (visual.visible() && visual._includeInBBox !== false) {\n childBoundingBox = visual.drawingContainer().clippedBBox(null);\n if (childBoundingBox) {\n if (boundingBox) {\n boundingBox = g.Rect.union(boundingBox, childBoundingBox);\n } else {\n boundingBox = childBoundingBox;\n }\n }\n }\n }\n return boundingBox;\n }\n });\n deepExtend(Group.fn, AutoSizeableMixin);\n var Layout = Group.extend({\n init: function (rect, options) {\n this.children = [];\n Element.fn.init.call(this, options);\n this.drawingElement = new d.Layout(toDrawingRect(rect), options);\n this._initSize();\n },\n rect: function (rect) {\n if (rect) {\n this.drawingElement.rect(toDrawingRect(rect));\n } else {\n var drawingRect = this.drawingElement.rect();\n if (drawingRect) {\n return new Rect(drawingRect.origin.x, drawingRect.origin.y, drawingRect.size.width, drawingRect.size.height);\n }\n }\n },\n reflow: function () {\n this.drawingElement.reflow();\n },\n redraw: function (options) {\n kendo.deepExtend(this.drawingElement.options, options);\n Group.fn.redraw.call(this, options);\n }\n });\n var Circle = VisualBase.extend({\n init: function (options) {\n VisualBase.fn.init.call(this, options);\n this._initCircle();\n this._initSize();\n },\n redraw: function (options) {\n if (options) {\n var circleOptions = this.options;\n if (options.center) {\n deepExtend(circleOptions, { center: options.center });\n this._center.move(circleOptions.center.x, circleOptions.center.y);\n }\n if (this._diffNumericOptions(options, ['radius'])) {\n this._circle.setRadius(circleOptions.radius);\n }\n this._updateSize(options);\n VisualBase.fn.redraw.call(this, options);\n }\n },\n _initCircle: function () {\n var options = this.options;\n var width = options.width;\n var height = options.height;\n var radius = options.radius;\n if (!defined(radius)) {\n if (!defined(width)) {\n width = height;\n }\n if (!defined(height)) {\n height = width;\n }\n options.radius = radius = Math.min(width, height) / 2;\n }\n var center = options.center || {\n x: radius,\n y: radius\n };\n this._center = new g.Point(center.x, center.y);\n this._circle = new g.Circle(this._center, radius);\n this.drawingElement = new d.Circle(this._circle, { stroke: options.stroke });\n this._fill();\n }\n });\n deepExtend(Circle.fn, AutoSizeableMixin);\n var Canvas = Class.extend({\n init: function (element, options) {\n options = options || {};\n this.element = element;\n this.surface = d.Surface.create(element, options);\n if (kendo.isFunction(this.surface.translate)) {\n this.translate = this._translate;\n }\n this.drawingElement = new d.Group();\n this._viewBox = new Rect(0, 0, options.width, options.height);\n this.size(this._viewBox);\n },\n bounds: function () {\n var box = this.drawingElement.clippedBBox();\n return new Rect(0, 0, box.width(), box.height());\n },\n size: function (size) {\n var viewBox = this._viewBox;\n if (defined(size)) {\n viewBox.width = size.width;\n viewBox.height = size.height;\n this.surface.setSize(size);\n }\n return {\n width: viewBox.width,\n height: viewBox.height\n };\n },\n _translate: function (x, y) {\n var viewBox = this._viewBox;\n if (defined(x) && defined(y)) {\n viewBox.x = x;\n viewBox.y = y;\n this.surface.translate({\n x: x,\n y: y\n });\n }\n return {\n x: viewBox.x,\n y: viewBox.y\n };\n },\n draw: function () {\n this.surface.draw(this.drawingElement);\n },\n append: function (visual) {\n this.drawingElement.append(visual.drawingContainer());\n return this;\n },\n remove: function (visual) {\n this.drawingElement.remove(visual.drawingContainer());\n },\n insertBefore: function () {\n },\n clear: function () {\n this.drawingElement.clear();\n },\n destroy: function (clearHtml) {\n this.surface.destroy();\n if (clearHtml) {\n $(this.element).remove();\n }\n }\n });\n function sizeOptionsOrDefault(options) {\n return {\n x: options.x || 0,\n y: options.y || 0,\n width: options.width || 0,\n height: options.height || 0\n };\n }\n function normalizeDrawingOptions(options) {\n if (options) {\n var drawingOptions = options;\n if (isString(drawingOptions)) {\n drawingOptions = { color: drawingOptions };\n }\n if (drawingOptions.color) {\n drawingOptions.color = getColor(drawingOptions.color);\n }\n return drawingOptions;\n }\n }\n function getColor(value) {\n var color;\n if (value != TRANSPARENT) {\n color = new d.Color(value).toHex();\n } else {\n color = value;\n }\n return color;\n }\n function lineAngle(p1, p2) {\n var xDiff = p2.x - p1.x;\n var yDiff = p2.y - p1.y;\n var angle = d.util.deg(Math.atan2(yDiff, xDiff));\n return angle;\n }\n function createSegment(x, y) {\n return new d.Segment(new g.Point(x, y));\n }\n function toDrawingRect(rect) {\n if (rect) {\n return new g.Rect([\n rect.x,\n rect.y\n ], [\n rect.width,\n rect.height\n ]);\n }\n }\n kendo.deepExtend(diagram, {\n init: function (element) {\n kendo.init(element, diagram.ui);\n },\n diffNumericOptions: diffNumericOptions,\n Element: Element,\n Scale: Scale,\n Translation: Translation,\n Rotation: Rotation,\n Circle: Circle,\n Group: Group,\n Rectangle: Rectangle,\n Canvas: Canvas,\n Path: Path,\n Layout: Layout,\n Line: Line,\n MarkerBase: MarkerBase,\n ArrowMarker: ArrowMarker,\n CircleMarker: CircleMarker,\n Polyline: Polyline,\n CompositeTransform: CompositeTransform,\n TextBlock: TextBlock,\n Image: Image,\n VisualBase: VisualBase\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/diagram/services', [\n 'kendo.drawing',\n 'dataviz/diagram/svg'\n ], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, dataviz = kendo.dataviz, diagram = dataviz.diagram, Class = kendo.Class, Group = diagram.Group, Rect = diagram.Rect, Rectangle = diagram.Rectangle, Utils = diagram.Utils, isUndefined = Utils.isUndefined, Point = diagram.Point, Circle = diagram.Circle, Ticker = diagram.Ticker, deepExtend = kendo.deepExtend, Movable = kendo.ui.Movable, browser = kendo.support.browser, util = kendo.drawing.util, defined = util.defined, inArray = $.inArray, proxy = $.proxy;\n var Cursors = {\n arrow: 'default',\n grip: 'pointer',\n cross: 'pointer',\n add: 'pointer',\n move: 'move',\n select: 'pointer',\n south: 's-resize',\n east: 'e-resize',\n west: 'w-resize',\n north: 'n-resize',\n rowresize: 'row-resize',\n colresize: 'col-resize'\n }, HIT_TEST_DISTANCE = 10, AUTO = 'Auto', TOP = 'Top', RIGHT = 'Right', LEFT = 'Left', BOTTOM = 'Bottom', DEFAULT_SNAP_SIZE = 10, DEFAULT_SNAP_ANGLE = 10, DRAG_START = 'dragStart', DRAG = 'drag', DRAG_END = 'dragEnd', ITEMROTATE = 'itemRotate', ITEMBOUNDSCHANGE = 'itemBoundsChange', MIN_SNAP_SIZE = 5, MIN_SNAP_ANGLE = 5, MOUSE_ENTER = 'mouseEnter', MOUSE_LEAVE = 'mouseLeave', ZOOM_START = 'zoomStart', ZOOM_END = 'zoomEnd', SCROLL_MIN = -20000, SCROLL_MAX = 20000, FRICTION = 0.9, FRICTION_MOBILE = 0.93, VELOCITY_MULTIPLIER = 5, TRANSPARENT = 'transparent', PAN = 'pan', ROTATED = 'rotated', SOURCE = 'source', TARGET = 'target', HANDLE_NAMES = {\n '-1': SOURCE,\n '1': TARGET\n };\n diagram.Cursors = Cursors;\n var PositionAdapter = kendo.Class.extend({\n init: function (layoutState) {\n this.layoutState = layoutState;\n this.diagram = layoutState.diagram;\n },\n initState: function () {\n this.froms = [];\n this.tos = [];\n this.subjects = [];\n function pusher(id, bounds) {\n var shape = this.diagram.getShapeById(id);\n if (shape) {\n this.subjects.push(shape);\n this.froms.push(shape.bounds().topLeft());\n this.tos.push(bounds.topLeft());\n }\n }\n this.layoutState.nodeMap.forEach(pusher, this);\n },\n update: function (tick) {\n if (this.subjects.length <= 0) {\n return;\n }\n for (var i = 0; i < this.subjects.length; i++) {\n this.subjects[i].position(new Point(this.froms[i].x + (this.tos[i].x - this.froms[i].x) * tick, this.froms[i].y + (this.tos[i].y - this.froms[i].y) * tick));\n }\n }\n });\n var LayoutUndoUnit = Class.extend({\n init: function (initialState, finalState, animate) {\n if (isUndefined(animate)) {\n this.animate = false;\n } else {\n this.animate = animate;\n }\n this._initialState = initialState;\n this._finalState = finalState;\n this.title = 'Diagram layout';\n },\n undo: function () {\n this.setState(this._initialState);\n },\n redo: function () {\n this.setState(this._finalState);\n },\n setState: function (state) {\n var diagram = state.diagram;\n if (this.animate) {\n state.linkMap.forEach(function (id, points) {\n var conn = diagram.getShapeById(id);\n conn.visible(false);\n if (conn) {\n conn.points(points);\n }\n });\n var ticker = new Ticker();\n ticker.addAdapter(new PositionAdapter(state));\n ticker.onComplete(function () {\n state.linkMap.forEach(function (id) {\n var conn = diagram.getShapeById(id);\n conn.visible(true);\n });\n });\n ticker.play();\n } else {\n state.nodeMap.forEach(function (id, bounds) {\n var shape = diagram.getShapeById(id);\n if (shape) {\n shape.position(bounds.topLeft());\n }\n });\n state.linkMap.forEach(function (id, points) {\n var conn = diagram.getShapeById(id);\n if (conn) {\n conn.points(points);\n }\n });\n }\n }\n });\n var CompositeUnit = Class.extend({\n init: function (unit) {\n this.units = [];\n this.title = 'Composite unit';\n if (unit !== undefined) {\n this.units.push(unit);\n }\n },\n add: function (undoUnit) {\n this.units.push(undoUnit);\n },\n undo: function () {\n for (var i = 0; i < this.units.length; i++) {\n this.units[i].undo();\n }\n },\n redo: function () {\n for (var i = 0; i < this.units.length; i++) {\n this.units[i].redo();\n }\n }\n });\n var ConnectionEditUnit = Class.extend({\n init: function (item, redoSource, redoTarget) {\n this.item = item;\n this._redoSource = redoSource;\n this._redoTarget = redoTarget;\n if (defined(redoSource)) {\n this._undoSource = item.source();\n }\n if (defined(redoTarget)) {\n this._undoTarget = item.target();\n }\n this.title = 'Connection Editing';\n },\n undo: function () {\n if (this._undoSource !== undefined) {\n this.item._updateConnector(this._undoSource, 'source');\n }\n if (this._undoTarget !== undefined) {\n this.item._updateConnector(this._undoTarget, 'target');\n }\n this.item.updateModel();\n },\n redo: function () {\n if (this._redoSource !== undefined) {\n this.item._updateConnector(this._redoSource, 'source');\n }\n if (this._redoTarget !== undefined) {\n this.item._updateConnector(this._redoTarget, 'target');\n }\n this.item.updateModel();\n }\n });\n var ConnectionEditUndoUnit = Class.extend({\n init: function (item, undoSource, undoTarget) {\n this.item = item;\n this._undoSource = undoSource;\n this._undoTarget = undoTarget;\n this._redoSource = item.source();\n this._redoTarget = item.target();\n this.title = 'Connection Editing';\n },\n undo: function () {\n this.item._updateConnector(this._undoSource, 'source');\n this.item._updateConnector(this._undoTarget, 'target');\n this.item.updateModel();\n },\n redo: function () {\n this.item._updateConnector(this._redoSource, 'source');\n this.item._updateConnector(this._redoTarget, 'target');\n this.item.updateModel();\n }\n });\n var DeleteConnectionUnit = Class.extend({\n init: function (connection) {\n this.connection = connection;\n this.diagram = connection.diagram;\n this.targetConnector = connection.targetConnector;\n this.title = 'Delete connection';\n },\n undo: function () {\n this.diagram._addConnection(this.connection, false);\n },\n redo: function () {\n this.diagram.remove(this.connection, false);\n }\n });\n var DeleteShapeUnit = Class.extend({\n init: function (shape) {\n this.shape = shape;\n this.diagram = shape.diagram;\n this.title = 'Deletion';\n },\n undo: function () {\n this.diagram._addShape(this.shape, false);\n this.shape.select(false);\n },\n redo: function () {\n this.shape.select(false);\n this.diagram.remove(this.shape, false);\n }\n });\n var TransformUnit = Class.extend({\n init: function (shapes, undoStates, adorner) {\n this.shapes = shapes;\n this.undoStates = undoStates;\n this.title = 'Transformation';\n this.redoStates = [];\n this.adorner = adorner;\n for (var i = 0; i < this.shapes.length; i++) {\n var shape = this.shapes[i];\n this.redoStates.push(shape.bounds());\n }\n },\n undo: function () {\n for (var i = 0; i < this.shapes.length; i++) {\n var shape = this.shapes[i];\n shape.bounds(this.undoStates[i]);\n if (shape.hasOwnProperty('layout')) {\n shape.layout(shape, this.redoStates[i], this.undoStates[i]);\n }\n shape.updateModel();\n }\n if (this.adorner) {\n this.adorner.refreshBounds();\n this.adorner.refresh();\n }\n },\n redo: function () {\n for (var i = 0; i < this.shapes.length; i++) {\n var shape = this.shapes[i];\n shape.bounds(this.redoStates[i]);\n if (shape.hasOwnProperty('layout')) {\n shape.layout(shape, this.undoStates[i], this.redoStates[i]);\n }\n shape.updateModel();\n }\n if (this.adorner) {\n this.adorner.refreshBounds();\n this.adorner.refresh();\n }\n }\n });\n var AddConnectionUnit = Class.extend({\n init: function (connection, diagram) {\n this.connection = connection;\n this.diagram = diagram;\n this.title = 'New connection';\n },\n undo: function () {\n this.diagram.remove(this.connection, false);\n },\n redo: function () {\n this.diagram._addConnection(this.connection, false);\n }\n });\n var AddShapeUnit = Class.extend({\n init: function (shape, diagram) {\n this.shape = shape;\n this.diagram = diagram;\n this.title = 'New shape';\n },\n undo: function () {\n this.diagram.deselect();\n this.diagram.remove(this.shape, false);\n },\n redo: function () {\n this.diagram._addShape(this.shape, false);\n }\n });\n var PanUndoUnit = Class.extend({\n init: function (initialPosition, finalPosition, diagram) {\n this.initial = initialPosition;\n this.finalPos = finalPosition;\n this.diagram = diagram;\n this.title = 'Pan Unit';\n },\n undo: function () {\n this.diagram.pan(this.initial);\n },\n redo: function () {\n this.diagram.pan(this.finalPos);\n }\n });\n var RotateUnit = Class.extend({\n init: function (adorner, shapes, undoRotates) {\n this.shapes = shapes;\n this.undoRotates = undoRotates;\n this.title = 'Rotation';\n this.redoRotates = [];\n this.redoAngle = adorner._angle;\n this.adorner = adorner;\n this.center = adorner._innerBounds.center();\n for (var i = 0; i < this.shapes.length; i++) {\n var shape = this.shapes[i];\n this.redoRotates.push(shape.rotate().angle);\n }\n },\n undo: function () {\n var i, shape;\n for (i = 0; i < this.shapes.length; i++) {\n shape = this.shapes[i];\n shape.rotate(this.undoRotates[i], this.center, false);\n if (shape.hasOwnProperty('layout')) {\n shape.layout(shape);\n }\n shape.updateModel();\n }\n if (this.adorner) {\n this.adorner._initialize();\n this.adorner.refresh();\n }\n },\n redo: function () {\n var i, shape;\n for (i = 0; i < this.shapes.length; i++) {\n shape = this.shapes[i];\n shape.rotate(this.redoRotates[i], this.center, false);\n if (shape.hasOwnProperty('layout')) {\n shape.layout(shape);\n }\n shape.updateModel();\n }\n if (this.adorner) {\n this.adorner._initialize();\n this.adorner.refresh();\n }\n }\n });\n var ToFrontUnit = Class.extend({\n init: function (diagram, items, initialIndices) {\n this.diagram = diagram;\n this.indices = initialIndices;\n this.items = items;\n this.title = 'Rotate Unit';\n },\n undo: function () {\n this.diagram._toIndex(this.items, this.indices);\n },\n redo: function () {\n this.diagram.toFront(this.items, false);\n }\n });\n var ToBackUnit = Class.extend({\n init: function (diagram, items, initialIndices) {\n this.diagram = diagram;\n this.indices = initialIndices;\n this.items = items;\n this.title = 'Rotate Unit';\n },\n undo: function () {\n this.diagram._toIndex(this.items, this.indices);\n },\n redo: function () {\n this.diagram.toBack(this.items, false);\n }\n });\n var UndoRedoService = kendo.Observable.extend({\n init: function (options) {\n kendo.Observable.fn.init.call(this, options);\n this.bind(this.events, options);\n this.stack = [];\n this.index = 0;\n this.capacity = 100;\n },\n events: [\n 'undone',\n 'redone'\n ],\n begin: function () {\n this.composite = new CompositeUnit();\n },\n cancel: function () {\n this.composite = undefined;\n },\n commit: function (execute) {\n if (this.composite.units.length > 0) {\n this._restart(this.composite, execute);\n }\n this.composite = undefined;\n },\n addCompositeItem: function (undoUnit) {\n if (this.composite) {\n this.composite.add(undoUnit);\n } else {\n this.add(undoUnit);\n }\n },\n add: function (undoUnit, execute) {\n this._restart(undoUnit, execute);\n },\n pop: function () {\n if (this.index > 0) {\n this.stack.pop();\n this.index--;\n }\n },\n count: function () {\n return this.stack.length;\n },\n undo: function () {\n if (this.index > 0) {\n this.index--;\n this.stack[this.index].undo();\n this.trigger('undone');\n }\n },\n redo: function () {\n if (this.stack.length > 0 && this.index < this.stack.length) {\n this.stack[this.index].redo();\n this.index++;\n this.trigger('redone');\n }\n },\n _restart: function (composite, execute) {\n this.stack.splice(this.index, this.stack.length - this.index);\n this.stack.push(composite);\n if (execute !== false) {\n this.redo();\n } else {\n this.index++;\n }\n if (this.stack.length > this.capacity) {\n this.stack.splice(0, this.stack.length - this.capacity);\n this.index = this.capacity;\n }\n },\n clear: function () {\n this.stack = [];\n this.index = 0;\n }\n });\n var EmptyTool = Class.extend({\n init: function (toolService) {\n this.toolService = toolService;\n },\n start: function () {\n },\n move: function () {\n },\n end: function () {\n },\n tryActivate: function () {\n return false;\n },\n getCursor: function () {\n return Cursors.arrow;\n }\n });\n var ScrollerTool = EmptyTool.extend({\n init: function (toolService) {\n var tool = this;\n var friction = kendo.support.mobileOS ? FRICTION_MOBILE : FRICTION;\n EmptyTool.fn.init.call(tool, toolService);\n var diagram = tool.toolService.diagram, canvas = diagram.canvas;\n var scroller = diagram.scroller = tool.scroller = $(diagram.scrollable).kendoMobileScroller({\n friction: friction,\n velocityMultiplier: VELOCITY_MULTIPLIER,\n mousewheelScrolling: false,\n zoom: false,\n scroll: proxy(tool._move, tool)\n }).data('kendoMobileScroller');\n if (canvas.translate) {\n tool.movableCanvas = new Movable(canvas.element);\n }\n var virtualScroll = function (dimension, min, max) {\n dimension.makeVirtual();\n dimension.virtualSize(min || SCROLL_MIN, max || SCROLL_MAX);\n };\n virtualScroll(scroller.dimensions.x);\n virtualScroll(scroller.dimensions.y);\n scroller.disable();\n },\n tryActivate: function (p, meta) {\n var toolService = this.toolService;\n var options = toolService.diagram.options.pannable;\n var enabled = meta.ctrlKey;\n if (defined(options.key)) {\n if (!options.key || options.key == 'none') {\n enabled = noMeta(meta) && !defined(toolService.hoveredItem);\n } else {\n enabled = meta[options.key + 'Key'];\n }\n }\n return options !== false && enabled && !defined(toolService.hoveredAdorner) && !defined(toolService._hoveredConnector);\n },\n start: function () {\n this.scroller.enable();\n },\n move: function () {\n },\n _move: function (args) {\n var tool = this, diagram = tool.toolService.diagram, canvas = diagram.canvas, scrollPos = new Point(args.scrollLeft, args.scrollTop);\n if (canvas.translate) {\n diagram._storePan(scrollPos.times(-1));\n tool.movableCanvas.moveTo(scrollPos);\n canvas.translate(scrollPos.x, scrollPos.y);\n } else {\n scrollPos = scrollPos.plus(diagram._pan.times(-1));\n }\n diagram.trigger(PAN, { pan: scrollPos });\n },\n end: function () {\n this.scroller.disable();\n },\n getCursor: function () {\n return Cursors.move;\n }\n });\n var PointerTool = Class.extend({\n init: function (toolService) {\n this.toolService = toolService;\n },\n tryActivate: function () {\n return true;\n },\n start: function (p, meta) {\n var toolService = this.toolService, diagram = toolService.diagram, hoveredItem = toolService.hoveredItem;\n if (hoveredItem) {\n toolService.selectSingle(hoveredItem, meta);\n if (hoveredItem.adorner) {\n this.adorner = hoveredItem.adorner;\n this.handle = this.adorner._hitTest(p);\n }\n }\n if (!this.handle) {\n this.handle = diagram._resizingAdorner._hitTest(p);\n if (this.handle) {\n this.adorner = diagram._resizingAdorner;\n }\n }\n if (this.adorner) {\n if (!this.adorner.isDragHandle(this.handle) || !diagram.trigger(DRAG_START, {\n shapes: this.adorner.shapes,\n connections: []\n })) {\n this.adorner.start(p);\n } else {\n toolService.startPoint = p;\n toolService.end(p);\n }\n }\n },\n move: function (p) {\n if (this.adorner) {\n this.adorner.move(this.handle, p);\n if (this.adorner.isDragHandle(this.handle)) {\n this.toolService.diagram.trigger(DRAG, {\n shapes: this.adorner.shapes,\n connections: []\n });\n }\n }\n },\n end: function () {\n var diagram = this.toolService.diagram, adorner = this.adorner, unit;\n if (adorner) {\n if (!adorner.isDragHandle(this.handle) || !diagram.trigger(DRAG_END, {\n shapes: adorner.shapes,\n connections: []\n })) {\n unit = adorner.stop();\n if (unit) {\n diagram.undoRedoService.add(unit, false);\n }\n } else {\n adorner.cancel();\n }\n }\n this.adorner = undefined;\n this.handle = undefined;\n },\n getCursor: function (p) {\n return this.toolService.hoveredItem ? this.toolService.hoveredItem._getCursor(p) : Cursors.arrow;\n }\n });\n var SelectionTool = Class.extend({\n init: function (toolService) {\n this.toolService = toolService;\n },\n tryActivate: function (p, meta) {\n var toolService = this.toolService;\n var selectable = toolService.diagram.options.selectable;\n var enabled = selectable && selectable.multiple !== false;\n if (enabled) {\n if (selectable.key && selectable.key != 'none') {\n enabled = meta[selectable.key + 'Key'];\n } else {\n enabled = noMeta(meta);\n }\n }\n return enabled && !defined(toolService.hoveredItem) && !defined(toolService.hoveredAdorner);\n },\n start: function (p) {\n var diagram = this.toolService.diagram;\n diagram.deselect();\n diagram.selector.start(p);\n },\n move: function (p) {\n var diagram = this.toolService.diagram;\n diagram.selector.move(p);\n },\n end: function (p, meta) {\n var diagram = this.toolService.diagram, hoveredItem = this.toolService.hoveredItem;\n var rect = diagram.selector.bounds();\n if ((!hoveredItem || !hoveredItem.isSelected) && !meta.ctrlKey) {\n diagram.deselect();\n }\n if (!rect.isEmpty()) {\n diagram.selectArea(rect);\n }\n diagram.selector.end();\n },\n getCursor: function () {\n return Cursors.arrow;\n }\n });\n var ConnectionTool = Class.extend({\n init: function (toolService) {\n this.toolService = toolService;\n this.type = 'ConnectionTool';\n },\n tryActivate: function () {\n return this.toolService._hoveredConnector;\n },\n start: function (p, meta) {\n var toolService = this.toolService, diagram = toolService.diagram, connector = toolService._hoveredConnector, connection = diagram._createConnection({}, connector._c, p);\n if (canDrag(connection) && !diagram.trigger(DRAG_START, {\n shapes: [],\n connections: [connection],\n connectionHandle: TARGET\n }) && diagram._addConnection(connection)) {\n toolService._connectionManipulation(connection, connector._c.shape, true);\n toolService._removeHover();\n toolService.selectSingle(toolService.activeConnection, meta);\n if (meta.type == 'touchmove') {\n diagram._cachedTouchTarget = connector.visual;\n }\n } else {\n connection.source(null);\n toolService.end(p);\n }\n },\n move: function (p) {\n var toolService = this.toolService;\n var connection = toolService.activeConnection;\n connection.target(p);\n toolService.diagram.trigger(DRAG, {\n shapes: [],\n connections: [connection],\n connectionHandle: TARGET\n });\n return true;\n },\n end: function (p) {\n var toolService = this.toolService, d = toolService.diagram, connection = toolService.activeConnection, hoveredItem = toolService.hoveredItem, connector = toolService._hoveredConnector, target, cachedTouchTarget = d._cachedTouchTarget;\n if (!connection) {\n return;\n }\n if (connector && connector._c != connection.sourceConnector) {\n target = connector._c;\n } else if (hoveredItem && hoveredItem instanceof diagram.Shape) {\n target = hoveredItem.getConnector(AUTO) || hoveredItem.getConnector(p);\n } else {\n target = p;\n }\n connection.target(target);\n if (!d.trigger(DRAG_END, {\n shapes: [],\n connections: [connection],\n connectionHandle: TARGET\n })) {\n connection.updateModel();\n d._syncConnectionChanges();\n } else {\n d.remove(connection, false);\n d.undoRedoService.pop();\n }\n toolService._connectionManipulation();\n if (cachedTouchTarget) {\n d._connectorsAdorner.visual.remove(cachedTouchTarget);\n d._cachedTouchTarget = null;\n }\n },\n getCursor: function () {\n return Cursors.arrow;\n }\n });\n var ConnectionEditTool = Class.extend({\n init: function (toolService) {\n this.toolService = toolService;\n this.type = 'ConnectionTool';\n },\n tryActivate: function (p, meta) {\n var toolService = this.toolService, diagram = toolService.diagram, selectable = diagram.options.selectable, item = toolService.hoveredItem, isActive = selectable !== false && item && item.path && !(item.isSelected && meta.ctrlKey);\n if (isActive) {\n this._c = item;\n }\n return isActive;\n },\n start: function (p, meta) {\n var toolService = this.toolService;\n var connection = this._c;\n toolService.selectSingle(connection, meta);\n var adorner = connection.adorner;\n var handle, name;\n if (adorner) {\n handle = adorner._hitTest(p);\n name = HANDLE_NAMES[handle];\n }\n if (canDrag(connection) && adorner && !toolService.diagram.trigger(DRAG_START, {\n shapes: [],\n connections: [connection],\n connectionHandle: name\n })) {\n this.handle = handle;\n this.handleName = name;\n adorner.start(p);\n } else {\n toolService.startPoint = p;\n toolService.end(p);\n }\n },\n move: function (p) {\n var adorner = this._c.adorner;\n if (canDrag(this._c) && adorner) {\n adorner.move(this.handle, p);\n this.toolService.diagram.trigger(DRAG, {\n shapes: [],\n connections: [this._c],\n connectionHandle: this.handleName\n });\n return true;\n }\n },\n end: function (p) {\n var connection = this._c;\n var adorner = connection.adorner;\n var toolService = this.toolService;\n var diagram = toolService.diagram;\n if (adorner) {\n if (canDrag(connection)) {\n var unit = adorner.stop(p);\n if (!diagram.trigger(DRAG_END, {\n shapes: [],\n connections: [connection],\n connectionHandle: this.handleName\n })) {\n diagram.undoRedoService.add(unit, false);\n connection.updateModel();\n diagram._syncConnectionChanges();\n } else {\n unit.undo();\n }\n }\n }\n },\n getCursor: function () {\n return Cursors.move;\n }\n });\n function testKey(key, str) {\n return str.charCodeAt(0) == key || str.toUpperCase().charCodeAt(0) == key;\n }\n var ToolService = Class.extend({\n init: function (diagram) {\n this.diagram = diagram;\n this.tools = [\n new ScrollerTool(this),\n new ConnectionEditTool(this),\n new ConnectionTool(this),\n new SelectionTool(this),\n new PointerTool(this)\n ];\n this.activeTool = undefined;\n },\n start: function (p, meta) {\n meta = deepExtend({}, meta);\n if (this.activeTool) {\n this.activeTool.end(p, meta);\n }\n this._updateHoveredItem(p);\n this._activateTool(p, meta);\n this.activeTool.start(p, meta);\n this._updateCursor(p);\n this.diagram.focus();\n this.diagram.canvas.surface.suspendTracking();\n this.startPoint = p;\n return true;\n },\n move: function (p, meta) {\n meta = deepExtend({}, meta);\n var updateHovered = true;\n if (this.activeTool) {\n updateHovered = this.activeTool.move(p, meta);\n }\n if (updateHovered) {\n this._updateHoveredItem(p);\n }\n this._updateCursor(p);\n return true;\n },\n end: function (p, meta) {\n meta = deepExtend({}, meta);\n if (this.activeTool) {\n this.activeTool.end(p, meta);\n }\n this.diagram.canvas.surface.resumeTracking();\n this.activeTool = undefined;\n this._updateCursor(p);\n return true;\n },\n keyDown: function (key, meta) {\n var diagram = this.diagram;\n meta = deepExtend({\n ctrlKey: false,\n metaKey: false,\n altKey: false\n }, meta);\n if ((meta.ctrlKey || meta.metaKey) && !meta.altKey) {\n if (testKey(key, 'a')) {\n diagram.selectAll();\n diagram._destroyToolBar();\n return true;\n } else if (testKey(key, 'z')) {\n diagram.undo();\n diagram._destroyToolBar();\n return true;\n } else if (testKey(key, 'y')) {\n diagram.redo();\n diagram._destroyToolBar();\n return true;\n } else if (testKey(key, 'c')) {\n diagram.copy();\n diagram._destroyToolBar();\n } else if (testKey(key, 'x')) {\n diagram.cut();\n diagram._destroyToolBar();\n } else if (testKey(key, 'v')) {\n diagram.paste();\n diagram._destroyToolBar();\n } else if (testKey(key, 'l')) {\n diagram.layout();\n diagram._destroyToolBar();\n } else if (testKey(key, 'd')) {\n diagram._destroyToolBar();\n diagram.copy();\n diagram.paste();\n }\n } else if (key === 46 || key === 8) {\n var toRemove = this.diagram._triggerRemove(diagram.select());\n if (toRemove.length) {\n this.diagram.remove(toRemove, true);\n this.diagram._syncChanges();\n this.diagram._destroyToolBar();\n }\n return true;\n } else if (key === 27) {\n this._discardNewConnection();\n diagram.deselect();\n diagram._destroyToolBar();\n return true;\n }\n },\n wheel: function (p, meta) {\n var diagram = this.diagram, delta = meta.delta, z = diagram.zoom(), options = diagram.options, zoomRate = options.zoomRate, zoomOptions = {\n point: p,\n meta: meta,\n zoom: z\n };\n if (diagram.trigger(ZOOM_START, zoomOptions)) {\n return;\n }\n if (delta < 0) {\n z += zoomRate;\n } else {\n z -= zoomRate;\n }\n z = kendo.dataviz.round(Math.max(options.zoomMin, Math.min(options.zoomMax, z)), 2);\n zoomOptions.zoom = z;\n diagram.zoom(z, zoomOptions);\n diagram.trigger(ZOOM_END, zoomOptions);\n return true;\n },\n setTool: function (tool, index) {\n tool.toolService = this;\n this.tools[index] = tool;\n },\n selectSingle: function (item, meta) {\n var diagram = this.diagram;\n var selectable = diagram.options.selectable;\n if (selectable && !item.isSelected && item.options.selectable !== false) {\n var addToSelection = meta.ctrlKey && selectable.multiple !== false;\n diagram.select(item, { addToSelection: addToSelection });\n }\n },\n _discardNewConnection: function () {\n if (this.newConnection) {\n this.diagram.remove(this.newConnection);\n this.newConnection = undefined;\n }\n },\n _activateTool: function (p, meta) {\n for (var i = 0; i < this.tools.length; i++) {\n var tool = this.tools[i];\n if (tool.tryActivate(p, meta)) {\n this.activeTool = tool;\n break;\n }\n }\n },\n _updateCursor: function (p) {\n var element = this.diagram.element;\n var cursor = this.activeTool ? this.activeTool.getCursor(p) : this.hoveredAdorner ? this.hoveredAdorner._getCursor(p) : this.hoveredItem ? this.hoveredItem._getCursor(p) : Cursors.arrow;\n element.css({ cursor: cursor });\n if (browser.msie && browser.version == 7) {\n element[0].style.cssText = element[0].style.cssText;\n }\n },\n _connectionManipulation: function (connection, disabledShape, isNew) {\n this.activeConnection = connection;\n this.disabledShape = disabledShape;\n if (isNew) {\n this.newConnection = this.activeConnection;\n } else {\n this.newConnection = undefined;\n }\n },\n _updateHoveredItem: function (p) {\n var hit = this._hitTest(p);\n var diagram = this.diagram;\n if (hit != this.hoveredItem && (!this.disabledShape || hit != this.disabledShape)) {\n if (this.hoveredItem) {\n diagram.trigger(MOUSE_LEAVE, { item: this.hoveredItem });\n this.hoveredItem._hover(false);\n }\n if (hit && hit.options.enable) {\n diagram.trigger(MOUSE_ENTER, { item: hit });\n this.hoveredItem = hit;\n this.hoveredItem._hover(true);\n } else {\n this.hoveredItem = undefined;\n }\n }\n },\n _removeHover: function () {\n if (this.hoveredItem) {\n this.hoveredItem._hover(false);\n this.hoveredItem = undefined;\n }\n },\n _hitTest: function (point) {\n var hit, d = this.diagram, item, i;\n if (this._hoveredConnector) {\n this._hoveredConnector._hover(false);\n this._hoveredConnector = undefined;\n }\n if (d._connectorsAdorner._visible) {\n hit = d._connectorsAdorner._hitTest(point);\n if (hit) {\n return hit;\n }\n }\n hit = this.diagram._resizingAdorner._hitTest(point);\n if (hit) {\n this.hoveredAdorner = d._resizingAdorner;\n if (hit.x !== 0 || hit.y !== 0) {\n return;\n }\n hit = undefined;\n } else {\n this.hoveredAdorner = undefined;\n }\n if (!this.activeTool || this.activeTool.type !== 'ConnectionTool') {\n var selectedConnections = [];\n for (i = 0; i < d._selectedItems.length; i++) {\n item = d._selectedItems[i];\n if (item instanceof diagram.Connection) {\n selectedConnections.push(item);\n }\n }\n hit = this._hitTestItems(selectedConnections, point);\n }\n return hit || this._hitTestElements(point);\n },\n _hitTestElements: function (point) {\n var diagram = this.diagram;\n var shapeHit = this._hitTestItems(diagram.shapes, point);\n var connectionHit = this._hitTestItems(diagram.connections, point);\n var hit;\n if ((!this.activeTool || this.activeTool.type != 'ConnectionTool') && shapeHit && connectionHit && !hitTestShapeConnectors(shapeHit, point)) {\n var mainLayer = diagram.mainLayer;\n var shapeIdx = inArray(shapeHit.visual, mainLayer.children);\n var connectionIdx = inArray(connectionHit.visual, mainLayer.children);\n hit = shapeIdx > connectionIdx ? shapeHit : connectionHit;\n }\n return hit || shapeHit || connectionHit;\n },\n _hitTestItems: function (array, point) {\n var i, item, hit;\n for (i = array.length - 1; i >= 0; i--) {\n item = array[i];\n hit = item._hitTest(point);\n if (hit) {\n return hit;\n }\n }\n }\n });\n var ConnectionRouterBase = kendo.Class.extend({\n init: function () {\n }\n });\n var LinearConnectionRouter = ConnectionRouterBase.extend({\n init: function (connection) {\n var that = this;\n ConnectionRouterBase.fn.init.call(that);\n this.connection = connection;\n },\n hitTest: function (p) {\n var rec = this.getBounds().inflate(HIT_TEST_DISTANCE);\n if (!rec.contains(p)) {\n return false;\n }\n return diagram.Geometry.distanceToPolyline(p, this.connection.allPoints()) < HIT_TEST_DISTANCE;\n },\n getBounds: function () {\n var points = this.connection.allPoints(), s = points[0], e = points[points.length - 1], right = Math.max(s.x, e.x), left = Math.min(s.x, e.x), top = Math.min(s.y, e.y), bottom = Math.max(s.y, e.y);\n for (var i = 1; i < points.length - 1; ++i) {\n right = Math.max(right, points[i].x);\n left = Math.min(left, points[i].x);\n top = Math.min(top, points[i].y);\n bottom = Math.max(bottom, points[i].y);\n }\n return new Rect(left, top, right - left, bottom - top);\n }\n });\n var PolylineRouter = LinearConnectionRouter.extend({\n init: function (connection) {\n var that = this;\n LinearConnectionRouter.fn.init.call(that);\n this.connection = connection;\n },\n route: function () {\n }\n });\n var CascadingRouter = LinearConnectionRouter.extend({\n SAME_SIDE_DISTANCE_RATIO: 5,\n init: function (connection) {\n var that = this;\n LinearConnectionRouter.fn.init.call(that);\n this.connection = connection;\n },\n routePoints: function (start, end, sourceConnector, targetConnector) {\n var result;\n if (sourceConnector && targetConnector) {\n result = this._connectorPoints(start, end, sourceConnector, targetConnector);\n } else {\n result = this._floatingPoints(start, end, sourceConnector);\n }\n return result;\n },\n route: function () {\n var sourceConnector = this.connection._resolvedSourceConnector;\n var targetConnector = this.connection._resolvedTargetConnector;\n var start = this.connection.sourcePoint();\n var end = this.connection.targetPoint();\n var points = this.routePoints(start, end, sourceConnector, targetConnector);\n this.connection.points(points);\n },\n _connectorSides: [\n {\n name: 'Top',\n axis: 'y',\n boundsPoint: 'topLeft',\n secondarySign: 1\n },\n {\n name: 'Left',\n axis: 'x',\n boundsPoint: 'topLeft',\n secondarySign: 1\n },\n {\n name: 'Bottom',\n axis: 'y',\n boundsPoint: 'bottomRight',\n secondarySign: -1\n },\n {\n name: 'Right',\n axis: 'x',\n boundsPoint: 'bottomRight',\n secondarySign: -1\n }\n ],\n _connectorSide: function (connector, targetPoint) {\n var position = connector.position();\n var shapeBounds = connector.shape.bounds(ROTATED);\n var bounds = {\n topLeft: shapeBounds.topLeft(),\n bottomRight: shapeBounds.bottomRight()\n };\n var sides = this._connectorSides;\n var min = util.MAX_NUM;\n var sideDistance;\n var minSide;\n var axis;\n var side;\n for (var idx = 0; idx < sides.length; idx++) {\n side = sides[idx];\n axis = side.axis;\n sideDistance = Math.round(Math.abs(position[axis] - bounds[side.boundsPoint][axis]));\n if (sideDistance < min) {\n min = sideDistance;\n minSide = side;\n } else if (sideDistance === min && (position[axis] - targetPoint[axis]) * side.secondarySign > (position[minSide.axis] - targetPoint[minSide.axis]) * minSide.secondarySign) {\n minSide = side;\n }\n }\n return minSide.name;\n },\n _sameSideDistance: function (connector) {\n var bounds = connector.shape.bounds(ROTATED);\n return Math.min(bounds.width, bounds.height) / this.SAME_SIDE_DISTANCE_RATIO;\n },\n _connectorPoints: function (start, end, sourceConnector, targetConnector) {\n var sourceConnectorSide = this._connectorSide(sourceConnector, end);\n var targetConnectorSide = this._connectorSide(targetConnector, start);\n var deltaX = end.x - start.x;\n var deltaY = end.y - start.y;\n var sameSideDistance = this._sameSideDistance(sourceConnector);\n var result = [];\n var pointX, pointY;\n if (sourceConnectorSide === TOP || sourceConnectorSide == BOTTOM) {\n if (targetConnectorSide == TOP || targetConnectorSide == BOTTOM) {\n if (sourceConnectorSide == targetConnectorSide) {\n if (sourceConnectorSide == TOP) {\n pointY = Math.min(start.y, end.y) - sameSideDistance;\n } else {\n pointY = Math.max(start.y, end.y) + sameSideDistance;\n }\n result = [\n new Point(start.x, pointY),\n new Point(end.x, pointY)\n ];\n } else {\n result = [\n new Point(start.x, start.y + deltaY / 2),\n new Point(end.x, start.y + deltaY / 2)\n ];\n }\n } else {\n result = [new Point(start.x, end.y)];\n }\n } else {\n if (targetConnectorSide == LEFT || targetConnectorSide == RIGHT) {\n if (sourceConnectorSide == targetConnectorSide) {\n if (sourceConnectorSide == LEFT) {\n pointX = Math.min(start.x, end.x) - sameSideDistance;\n } else {\n pointX = Math.max(start.x, end.x) + sameSideDistance;\n }\n result = [\n new Point(pointX, start.y),\n new Point(pointX, end.y)\n ];\n } else {\n result = [\n new Point(start.x + deltaX / 2, start.y),\n new Point(start.x + deltaX / 2, start.y + deltaY)\n ];\n }\n } else {\n result = [new Point(end.x, start.y)];\n }\n }\n return result;\n },\n _floatingPoints: function (start, end, sourceConnector) {\n var sourceConnectorSide = sourceConnector ? this._connectorSide(sourceConnector, end) : null;\n var cascadeStartHorizontal = this._startHorizontal(start, end, sourceConnectorSide);\n var points = [\n start,\n start,\n end,\n end\n ];\n var deltaX = end.x - start.x;\n var deltaY = end.y - start.y;\n var length = points.length;\n var shiftX;\n var shiftY;\n for (var idx = 1; idx < length - 1; ++idx) {\n if (cascadeStartHorizontal) {\n if (idx % 2 !== 0) {\n shiftX = deltaX / (length / 2);\n shiftY = 0;\n } else {\n shiftX = 0;\n shiftY = deltaY / ((length - 1) / 2);\n }\n } else {\n if (idx % 2 !== 0) {\n shiftX = 0;\n shiftY = deltaY / (length / 2);\n } else {\n shiftX = deltaX / ((length - 1) / 2);\n shiftY = 0;\n }\n }\n points[idx] = new Point(points[idx - 1].x + shiftX, points[idx - 1].y + shiftY);\n }\n idx--;\n if (cascadeStartHorizontal && idx % 2 !== 0 || !cascadeStartHorizontal && idx % 2 === 0) {\n points[length - 2] = new Point(points[length - 1].x, points[length - 2].y);\n } else {\n points[length - 2] = new Point(points[length - 2].x, points[length - 1].y);\n }\n return [\n points[1],\n points[2]\n ];\n },\n _startHorizontal: function (start, end, sourceSide) {\n var horizontal;\n if (sourceSide !== null && (sourceSide === RIGHT || sourceSide === LEFT)) {\n horizontal = true;\n } else {\n horizontal = Math.abs(start.x - end.x) > Math.abs(start.y - end.y);\n }\n return horizontal;\n }\n });\n var AdornerBase = Class.extend({\n init: function (diagram, options) {\n var that = this;\n that.diagram = diagram;\n that.options = deepExtend({}, that.options, options);\n that.visual = new Group();\n that.diagram._adorners.push(that);\n },\n refresh: function () {\n }\n });\n var ConnectionEditAdorner = AdornerBase.extend({\n init: function (connection, options) {\n var that = this, diagram;\n that.connection = connection;\n diagram = that.connection.diagram;\n that._ts = diagram.toolService;\n AdornerBase.fn.init.call(that, diagram, options);\n var sp = that.connection.sourcePoint();\n var tp = that.connection.targetPoint();\n that.spVisual = new Circle(deepExtend(that.options.handles, { center: sp }));\n that.epVisual = new Circle(deepExtend(that.options.handles, { center: tp }));\n that.visual.append(that.spVisual);\n that.visual.append(that.epVisual);\n },\n options: { handles: {} },\n _getCursor: function () {\n return Cursors.move;\n },\n start: function (p) {\n this.handle = this._hitTest(p);\n this.startPoint = p;\n this._initialSource = this.connection.source();\n this._initialTarget = this.connection.target();\n switch (this.handle) {\n case -1:\n if (this.connection.targetConnector) {\n this._ts._connectionManipulation(this.connection, this.connection.targetConnector.shape);\n }\n break;\n case 1:\n if (this.connection.sourceConnector) {\n this._ts._connectionManipulation(this.connection, this.connection.sourceConnector.shape);\n }\n break;\n }\n },\n move: function (handle, p) {\n switch (handle) {\n case -1:\n this.connection.source(p);\n break;\n case 1:\n this.connection.target(p);\n break;\n default:\n var delta = p.minus(this.startPoint);\n this.startPoint = p;\n if (!this.connection.sourceConnector) {\n this.connection.source(this.connection.sourcePoint().plus(delta));\n }\n if (!this.connection.targetConnector) {\n this.connection.target(this.connection.targetPoint().plus(delta));\n }\n break;\n }\n this.refresh();\n return true;\n },\n stop: function (p) {\n var ts = this.diagram.toolService, item = ts.hoveredItem, target;\n if (ts._hoveredConnector) {\n target = ts._hoveredConnector._c;\n } else if (item && item instanceof diagram.Shape) {\n target = item.getConnector(AUTO) || item.getConnector(p);\n } else {\n target = p;\n }\n if (this.handle === -1) {\n this.connection.source(target);\n } else if (this.handle === 1) {\n this.connection.target(target);\n }\n this.handle = undefined;\n this._ts._connectionManipulation();\n return new ConnectionEditUndoUnit(this.connection, this._initialSource, this._initialTarget);\n },\n _hitTest: function (point) {\n var sourcePoint = this.connection.sourcePoint();\n var targetPoint = this.connection.targetPoint();\n var radiusX = this.options.handles.width / 2 + HIT_TEST_DISTANCE;\n var radiusY = this.options.handles.height / 2 + HIT_TEST_DISTANCE;\n var sourcePointDistance = sourcePoint.distanceTo(point);\n var targetPointDistance = targetPoint.distanceTo(point);\n var sourceHandle = new Rect(sourcePoint.x, sourcePoint.y).inflate(radiusX, radiusY).contains(point);\n var targetHandle = new Rect(targetPoint.x, targetPoint.y).inflate(radiusX, radiusY).contains(point);\n var handle = 0;\n if (sourceHandle && (!targetHandle || sourcePointDistance < targetPointDistance)) {\n handle = -1;\n } else if (targetHandle && (!sourceHandle || targetPointDistance < sourcePointDistance)) {\n handle = 1;\n }\n return handle;\n },\n refresh: function () {\n this.spVisual.redraw({ center: this.diagram.modelToLayer(this.connection.sourcePoint()) });\n this.epVisual.redraw({ center: this.diagram.modelToLayer(this.connection.targetPoint()) });\n }\n });\n var ConnectorsAdorner = AdornerBase.extend({\n init: function (diagram, options) {\n var that = this;\n AdornerBase.fn.init.call(that, diagram, options);\n that._refreshHandler = function (e) {\n if (e.item == that.shape) {\n that.refresh();\n }\n };\n },\n show: function (shape) {\n var that = this, len, i, ctr;\n that._visible = true;\n that.shape = shape;\n that.diagram.bind(ITEMBOUNDSCHANGE, that._refreshHandler);\n len = shape.connectors.length;\n that.connectors = [];\n that._clearVisual();\n for (i = 0; i < len; i++) {\n ctr = new ConnectorVisual(shape.connectors[i]);\n that.connectors.push(ctr);\n that.visual.append(ctr.visual);\n }\n that.visual.visible(true);\n that.refresh();\n },\n _clearVisual: function () {\n var that = this;\n if (that.diagram._cachedTouchTarget) {\n that._keepCachedTouchTarget();\n } else {\n that.visual.clear();\n }\n },\n _keepCachedTouchTarget: function () {\n var that = this, visualChildren = that.visual.children;\n var childrenCount = visualChildren.length;\n var index = inArray(that.diagram._cachedTouchTarget, visualChildren);\n for (var i = childrenCount - 1; i >= 0; i--) {\n if (i == index) {\n continue;\n }\n that.visual.remove(visualChildren[i]);\n }\n },\n destroy: function () {\n var that = this;\n that.diagram.unbind(ITEMBOUNDSCHANGE, that._refreshHandler);\n that.shape = undefined;\n that._visible = undefined;\n that.visual.visible(false);\n },\n _hitTest: function (p) {\n var ctr, i;\n for (i = 0; i < this.connectors.length; i++) {\n ctr = this.connectors[i];\n if (ctr._hitTest(p)) {\n ctr._hover(true);\n this.diagram.toolService._hoveredConnector = ctr;\n break;\n }\n }\n },\n refresh: function () {\n if (this.shape) {\n var bounds = this.shape.bounds();\n bounds = this.diagram.modelToLayer(bounds);\n this.visual.position(bounds.topLeft());\n $.each(this.connectors, function () {\n this.refresh();\n });\n }\n }\n });\n function hitToOppositeSide(hit, bounds) {\n var result;\n if (hit.x == -1 && hit.y == -1) {\n result = bounds.bottomRight();\n } else if (hit.x == 1 && hit.y == 1) {\n result = bounds.topLeft();\n } else if (hit.x == -1 && hit.y == 1) {\n result = bounds.topRight();\n } else if (hit.x == 1 && hit.y == -1) {\n result = bounds.bottomLeft();\n } else if (hit.x === 0 && hit.y == -1) {\n result = bounds.bottom();\n } else if (hit.x === 0 && hit.y == 1) {\n result = bounds.top();\n } else if (hit.x == 1 && hit.y === 0) {\n result = bounds.left();\n } else if (hit.x == -1 && hit.y === 0) {\n result = bounds.right();\n }\n return result;\n }\n var ResizingAdorner = AdornerBase.extend({\n init: function (diagram, options) {\n var that = this;\n AdornerBase.fn.init.call(that, diagram, options);\n that._manipulating = false;\n that.map = [];\n that.shapes = [];\n that._initSelection();\n that._createHandles();\n that.redraw();\n that.diagram.bind('select', function (e) {\n that._initialize(e.selected);\n });\n that._refreshHandler = function () {\n if (!that._internalChange) {\n that.refreshBounds();\n that.refresh();\n }\n };\n that._rotatedHandler = function () {\n if (that.shapes.length == 1) {\n that._angle = that.shapes[0].rotate().angle;\n }\n that._refreshHandler();\n };\n that.diagram.bind(ITEMBOUNDSCHANGE, that._refreshHandler).bind(ITEMROTATE, that._rotatedHandler);\n that.refreshBounds();\n that.refresh();\n },\n options: {\n handles: {\n fill: { color: '#fff' },\n stroke: { color: '#282828' },\n height: 7,\n width: 7,\n hover: {\n fill: { color: '#282828' },\n stroke: { color: '#282828' }\n }\n },\n selectable: {\n stroke: {\n color: '#778899',\n width: 1,\n dashType: 'dash'\n },\n fill: { color: TRANSPARENT }\n },\n offset: 10\n },\n _initSelection: function () {\n var that = this;\n var diagram = that.diagram;\n var selectable = diagram.options.selectable;\n var options = deepExtend({}, that.options.selectable, selectable);\n that.rect = new Rectangle(options);\n that.visual.append(that.rect);\n },\n _resizable: function () {\n return this.options.editable && this.options.editable.resize !== false;\n },\n _handleOptions: function () {\n return (this.options.editable.resize || {}).handles || this.options.handles;\n },\n _createHandles: function () {\n var handles, item, y, x;\n if (this._resizable()) {\n handles = this._handleOptions();\n for (x = -1; x <= 1; x++) {\n for (y = -1; y <= 1; y++) {\n if (x !== 0 || y !== 0) {\n item = new Rectangle(handles);\n item.drawingElement._hover = proxy(this._hover, this);\n this.map.push({\n x: x,\n y: y,\n visual: item\n });\n this.visual.append(item);\n }\n }\n }\n }\n },\n bounds: function (value) {\n if (value) {\n this._innerBounds = value.clone();\n this._bounds = this.diagram.modelToLayer(value).inflate(this.options.offset, this.options.offset);\n } else {\n return this._bounds;\n }\n },\n _hitTest: function (p) {\n var tp = this.diagram.modelToLayer(p), i, hit, handleBounds, handlesCount = this.map.length, handle;\n if (this._angle) {\n tp = tp.clone().rotate(this._bounds.center(), this._angle);\n }\n if (this._resizable()) {\n for (i = 0; i < handlesCount; i++) {\n handle = this.map[i];\n hit = new Point(handle.x, handle.y);\n handleBounds = this._getHandleBounds(hit);\n handleBounds.offset(this._bounds.x, this._bounds.y);\n if (handleBounds.contains(tp)) {\n return hit;\n }\n }\n }\n if (this._bounds.contains(tp)) {\n return new Point(0, 0);\n }\n },\n _getHandleBounds: function (p) {\n if (this._resizable()) {\n var handles = this._handleOptions(), w = handles.width, h = handles.height, r = new Rect(0, 0, w, h);\n if (p.x < 0) {\n r.x = -w / 2;\n } else if (p.x === 0) {\n r.x = Math.floor(this._bounds.width / 2) - w / 2;\n } else if (p.x > 0) {\n r.x = this._bounds.width + 1 - w / 2;\n }\n if (p.y < 0) {\n r.y = -h / 2;\n } else if (p.y === 0) {\n r.y = Math.floor(this._bounds.height / 2) - h / 2;\n } else if (p.y > 0) {\n r.y = this._bounds.height + 1 - h / 2;\n }\n return r;\n }\n },\n _getCursor: function (point) {\n var hit = this._hitTest(point);\n if (hit && hit.x >= -1 && hit.x <= 1 && hit.y >= -1 && hit.y <= 1 && this._resizable()) {\n var angle = this._angle;\n if (angle) {\n angle = 360 - angle;\n hit.rotate(new Point(0, 0), angle);\n hit = new Point(Math.round(hit.x), Math.round(hit.y));\n }\n if (hit.x == -1 && hit.y == -1) {\n return 'nw-resize';\n }\n if (hit.x == 1 && hit.y == 1) {\n return 'se-resize';\n }\n if (hit.x == -1 && hit.y == 1) {\n return 'sw-resize';\n }\n if (hit.x == 1 && hit.y == -1) {\n return 'ne-resize';\n }\n if (hit.x === 0 && hit.y == -1) {\n return 'n-resize';\n }\n if (hit.x === 0 && hit.y == 1) {\n return 's-resize';\n }\n if (hit.x == 1 && hit.y === 0) {\n return 'e-resize';\n }\n if (hit.x == -1 && hit.y === 0) {\n return 'w-resize';\n }\n }\n return this._manipulating ? Cursors.move : Cursors.select;\n },\n _initialize: function () {\n var that = this, i, item, items = that.diagram.select();\n that.shapes = [];\n for (i = 0; i < items.length; i++) {\n item = items[i];\n if (item instanceof diagram.Shape) {\n that.shapes.push(item);\n item._rotationOffset = new Point();\n }\n }\n that._angle = that.shapes.length == 1 ? that.shapes[0].rotate().angle : 0;\n that._startAngle = that._angle;\n that._rotates();\n that._positions();\n that.refreshBounds();\n that.refresh();\n that.redraw();\n },\n _rotates: function () {\n var that = this, i, shape;\n that.initialRotates = [];\n for (i = 0; i < that.shapes.length; i++) {\n shape = that.shapes[i];\n that.initialRotates.push(shape.rotate().angle);\n }\n },\n _positions: function () {\n var that = this, i, shape;\n that.initialStates = [];\n for (i = 0; i < that.shapes.length; i++) {\n shape = that.shapes[i];\n that.initialStates.push(shape.bounds());\n }\n },\n _hover: function (value, element) {\n if (this._resizable()) {\n var handleOptions = this._handleOptions(), hover = handleOptions.hover, stroke = handleOptions.stroke, fill = handleOptions.fill;\n if (value && Utils.isDefined(hover.stroke)) {\n stroke = deepExtend({}, stroke, hover.stroke);\n }\n if (value && Utils.isDefined(hover.fill)) {\n fill = hover.fill;\n }\n element.stroke(stroke.color, stroke.width, stroke.opacity);\n element.fill(fill.color, fill.opacity);\n }\n },\n start: function (p) {\n this._sp = p;\n this._cp = p;\n this._lp = p;\n this._manipulating = true;\n this._internalChange = true;\n this.shapeStates = [];\n for (var i = 0; i < this.shapes.length; i++) {\n var shape = this.shapes[i];\n this.shapeStates.push(shape.bounds());\n }\n },\n redraw: function () {\n var i, handle, visibleHandles = this._resizable();\n for (i = 0; i < this.map.length; i++) {\n handle = this.map[i];\n handle.visual.visible(visibleHandles);\n }\n },\n angle: function (value) {\n if (defined(value)) {\n this._angle = value;\n }\n return this._angle;\n },\n rotate: function () {\n var center = this._innerBounds.center();\n var currentAngle = this.angle();\n this._internalChange = true;\n for (var i = 0; i < this.shapes.length; i++) {\n var shape = this.shapes[i];\n currentAngle = (currentAngle + this.initialRotates[i] - this._startAngle) % 360;\n shape.rotate(currentAngle, center);\n }\n this.refresh();\n },\n move: function (handle, p) {\n var delta, dragging, dtl = new Point(), dbr = new Point(), bounds, center, shape, i, angle, newBounds, changed = 0, staticPoint, scaleX, scaleY;\n if (handle.y === -2 && handle.x === -1) {\n center = this._innerBounds.center();\n this._angle = this._truncateAngle(Utils.findAngle(center, p));\n for (i = 0; i < this.shapes.length; i++) {\n shape = this.shapes[i];\n angle = (this._angle + this.initialRotates[i] - this._startAngle) % 360;\n shape.rotate(angle, center);\n if (shape.hasOwnProperty('layout')) {\n shape.layout(shape);\n }\n this._rotating = true;\n }\n this.refresh();\n } else {\n if (this.shouldSnap()) {\n var thr = this._truncateDistance(p.minus(this._lp));\n if (thr.x === 0 && thr.y === 0) {\n this._cp = p;\n return;\n }\n delta = thr;\n this._lp = new Point(this._lp.x + thr.x, this._lp.y + thr.y);\n } else {\n delta = p.minus(this._cp);\n }\n if (this.isDragHandle(handle)) {\n dbr = dtl = delta;\n dragging = true;\n } else {\n if (this._angle) {\n delta.rotate(new Point(0, 0), this._angle);\n }\n if (handle.x == -1) {\n dtl.x = delta.x;\n } else if (handle.x == 1) {\n dbr.x = delta.x;\n }\n if (handle.y == -1) {\n dtl.y = delta.y;\n } else if (handle.y == 1) {\n dbr.y = delta.y;\n }\n }\n if (!dragging) {\n staticPoint = hitToOppositeSide(handle, this._innerBounds);\n scaleX = (this._innerBounds.width + delta.x * handle.x) / this._innerBounds.width;\n scaleY = (this._innerBounds.height + delta.y * handle.y) / this._innerBounds.height;\n }\n for (i = 0; i < this.shapes.length; i++) {\n shape = this.shapes[i];\n bounds = shape.bounds();\n if (dragging) {\n if (!canDrag(shape)) {\n continue;\n }\n newBounds = this._displaceBounds(bounds, dtl, dbr, dragging);\n } else {\n newBounds = bounds.clone();\n newBounds.scale(scaleX, scaleY, staticPoint, this._innerBounds.center(), shape.rotate().angle);\n var newCenter = newBounds.center();\n newCenter.rotate(bounds.center(), -this._angle);\n newBounds = new Rect(newCenter.x - newBounds.width / 2, newCenter.y - newBounds.height / 2, newBounds.width, newBounds.height);\n }\n if (newBounds.width >= shape.options.minWidth && newBounds.height >= shape.options.minHeight) {\n var oldBounds = bounds;\n shape.bounds(newBounds);\n if (shape.hasOwnProperty('layout')) {\n shape.layout(shape, oldBounds, newBounds);\n }\n if (oldBounds.width !== newBounds.width || oldBounds.height !== newBounds.height) {\n shape.rotate(shape.rotate().angle);\n }\n changed += 1;\n }\n }\n if (changed) {\n if (changed == i) {\n newBounds = this._displaceBounds(this._innerBounds, dtl, dbr, dragging);\n this.bounds(newBounds);\n } else {\n this.refreshBounds();\n }\n this.refresh();\n }\n this._positions();\n }\n this._cp = p;\n },\n isDragHandle: function (handle) {\n return handle.x === 0 && handle.y === 0;\n },\n cancel: function () {\n var shapes = this.shapes;\n var states = this.shapeStates;\n for (var idx = 0; idx < shapes.length; idx++) {\n shapes[idx].bounds(states[idx]);\n }\n this.refreshBounds();\n this.refresh();\n this._manipulating = undefined;\n this._internalChange = undefined;\n this._rotating = undefined;\n },\n _truncatePositionToGuides: function (bounds) {\n if (this.diagram.ruler) {\n return this.diagram.ruler.truncatePositionToGuides(bounds);\n }\n return bounds;\n },\n _truncateSizeToGuides: function (bounds) {\n if (this.diagram.ruler) {\n return this.diagram.ruler.truncateSizeToGuides(bounds);\n }\n return bounds;\n },\n _truncateAngle: function (a) {\n var snap = this.snapOptions();\n var snapAngle = Math.max(snap.angle || DEFAULT_SNAP_ANGLE, MIN_SNAP_ANGLE);\n return snap ? Math.floor(a % 360 / snapAngle) * snapAngle : a % 360;\n },\n _truncateDistance: function (d) {\n if (d instanceof diagram.Point) {\n return new diagram.Point(this._truncateDistance(d.x), this._truncateDistance(d.y));\n } else {\n var snap = this.snapOptions() || {};\n var snapSize = Math.max(snap.size || DEFAULT_SNAP_SIZE, MIN_SNAP_SIZE);\n return snap ? Math.floor(d / snapSize) * snapSize : d;\n }\n },\n snapOptions: function () {\n var editable = this.diagram.options.editable;\n var snap = ((editable || {}).drag || {}).snap || {};\n return snap;\n },\n shouldSnap: function () {\n var editable = this.diagram.options.editable;\n var drag = (editable || {}).drag;\n var snap = (drag || {}).snap;\n return editable !== false && drag !== false && snap !== false;\n },\n _displaceBounds: function (bounds, dtl, dbr, dragging) {\n var tl = bounds.topLeft().plus(dtl), br = bounds.bottomRight().plus(dbr), newBounds = Rect.fromPoints(tl, br), newCenter;\n if (!dragging) {\n newCenter = newBounds.center();\n newCenter.rotate(bounds.center(), -this._angle);\n newBounds = new Rect(newCenter.x - newBounds.width / 2, newCenter.y - newBounds.height / 2, newBounds.width, newBounds.height);\n }\n return newBounds;\n },\n stop: function () {\n var unit, i, shape;\n if (this._cp != this._sp) {\n if (this._rotating) {\n unit = new RotateUnit(this, this.shapes, this.initialRotates);\n this._rotating = false;\n } else if (this._diffStates()) {\n if (this.diagram.ruler) {\n for (i = 0; i < this.shapes.length; i++) {\n shape = this.shapes[i];\n var bounds = shape.bounds();\n bounds = this._truncateSizeToGuides(this._truncatePositionToGuides(bounds));\n shape.bounds(bounds);\n this.refreshBounds();\n this.refresh();\n }\n }\n for (i = 0; i < this.shapes.length; i++) {\n shape = this.shapes[i];\n shape.updateModel();\n }\n unit = new TransformUnit(this.shapes, this.shapeStates, this);\n this.diagram._syncShapeChanges();\n }\n }\n this._manipulating = undefined;\n this._internalChange = undefined;\n this._rotating = undefined;\n return unit;\n },\n _diffStates: function () {\n var shapes = this.shapes;\n var states = this.shapeStates;\n for (var idx = 0; idx < shapes.length; idx++) {\n if (!shapes[idx].bounds().equals(states[idx])) {\n return true;\n }\n }\n return false;\n },\n refreshBounds: function () {\n var bounds = this.shapes.length == 1 ? this.shapes[0].bounds().clone() : this.diagram.boundingBox(this.shapes, true);\n this.bounds(bounds);\n },\n refresh: function () {\n var that = this, b, bounds;\n if (this.shapes.length > 0) {\n bounds = this.bounds();\n this.visual.visible(true);\n this.visual.position(bounds.topLeft());\n $.each(this.map, function () {\n b = that._getHandleBounds(new Point(this.x, this.y));\n this.visual.position(b.topLeft());\n });\n this.visual.position(bounds.topLeft());\n var center = new Point(bounds.width / 2, bounds.height / 2);\n this.visual.rotate(this._angle, center);\n this.rect.redraw({\n width: bounds.width,\n height: bounds.height\n });\n if (this.rotationThumb) {\n var thumb = this.options.editable.rotate.thumb;\n this._rotationThumbBounds = new Rect(bounds.center().x, bounds.y + thumb.y, 0, 0).inflate(thumb.width);\n this.rotationThumb.redraw({ x: bounds.width / 2 - thumb.width / 2 });\n }\n } else {\n this.visual.visible(false);\n }\n }\n });\n var Selector = Class.extend({\n init: function (diagram) {\n var selectable = diagram.options.selectable;\n this.options = deepExtend({}, this.options, selectable);\n this.visual = new Rectangle(this.options);\n this.diagram = diagram;\n },\n options: {\n stroke: {\n color: '#778899',\n width: 1,\n dashType: 'dash'\n },\n fill: { color: TRANSPARENT }\n },\n start: function (p) {\n this._sp = this._ep = p;\n this.refresh();\n this.diagram._adorn(this, true);\n },\n end: function () {\n this._sp = this._ep = undefined;\n this.diagram._adorn(this, false);\n },\n bounds: function (value) {\n if (value) {\n this._bounds = value;\n }\n return this._bounds;\n },\n move: function (p) {\n this._ep = p;\n this.refresh();\n },\n refresh: function () {\n if (this._sp) {\n var visualBounds = Rect.fromPoints(this.diagram.modelToLayer(this._sp), this.diagram.modelToLayer(this._ep));\n this.bounds(Rect.fromPoints(this._sp, this._ep));\n this.visual.position(visualBounds.topLeft());\n this.visual.redraw({\n height: visualBounds.height + 1,\n width: visualBounds.width + 1\n });\n }\n }\n });\n var ConnectorVisual = Class.extend({\n init: function (connector) {\n this.options = deepExtend({}, connector.options);\n this._c = connector;\n this.visual = new Circle(this.options);\n this.refresh();\n },\n _hover: function (value) {\n var options = this.options, hover = options.hover, stroke = options.stroke, fill = options.fill;\n if (value && Utils.isDefined(hover.stroke)) {\n stroke = deepExtend({}, stroke, hover.stroke);\n }\n if (value && Utils.isDefined(hover.fill)) {\n fill = hover.fill;\n }\n this.visual.redraw({\n stroke: stroke,\n fill: fill\n });\n },\n refresh: function () {\n var p = this._c.shape.diagram.modelToView(this._c.position()), relative = p.minus(this._c.shape.bounds('transformed').topLeft()), value = new Rect(p.x, p.y, 0, 0);\n value.inflate(this.options.width / 2, this.options.height / 2);\n this._visualBounds = value;\n this.visual.redraw({ center: new Point(relative.x, relative.y) });\n },\n _hitTest: function (p) {\n var tp = this._c.shape.diagram.modelToView(p);\n return this._visualBounds.contains(tp);\n }\n });\n function canDrag(element) {\n var editable = element.options.editable;\n return editable && editable.drag !== false;\n }\n function hitTestShapeConnectors(shape, point) {\n var connector, position, rect;\n for (var idx = 0; idx < shape.connectors.length; idx++) {\n connector = shape.connectors[idx];\n position = connector.position();\n rect = new Rect(position.x, position.y);\n rect.inflate(HIT_TEST_DISTANCE, HIT_TEST_DISTANCE);\n if (rect.contains(point)) {\n return connector;\n }\n }\n }\n function noMeta(meta) {\n return meta.ctrlKey === false && meta.altKey === false && meta.shiftKey === false;\n }\n deepExtend(diagram, {\n CompositeUnit: CompositeUnit,\n TransformUnit: TransformUnit,\n PanUndoUnit: PanUndoUnit,\n AddShapeUnit: AddShapeUnit,\n AddConnectionUnit: AddConnectionUnit,\n DeleteShapeUnit: DeleteShapeUnit,\n DeleteConnectionUnit: DeleteConnectionUnit,\n ConnectionEditAdorner: ConnectionEditAdorner,\n ConnectionTool: ConnectionTool,\n ConnectorVisual: ConnectorVisual,\n UndoRedoService: UndoRedoService,\n ResizingAdorner: ResizingAdorner,\n Selector: Selector,\n ToolService: ToolService,\n ConnectorsAdorner: ConnectorsAdorner,\n LayoutUndoUnit: LayoutUndoUnit,\n ConnectionEditUnit: ConnectionEditUnit,\n ToFrontUnit: ToFrontUnit,\n ToBackUnit: ToBackUnit,\n ConnectionRouterBase: ConnectionRouterBase,\n PolylineRouter: PolylineRouter,\n CascadingRouter: CascadingRouter,\n SelectionTool: SelectionTool,\n ScrollerTool: ScrollerTool,\n PointerTool: PointerTool,\n ConnectionEditTool: ConnectionEditTool,\n RotateUnit: RotateUnit\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/diagram/layout', ['dataviz/diagram/math'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, diagram = kendo.dataviz.diagram, Graph = diagram.Graph, Node = diagram.Node, Link = diagram.Link, deepExtend = kendo.deepExtend, Size = diagram.Size, Rect = diagram.Rect, Dictionary = diagram.Dictionary, Set = diagram.Set, HyperTree = diagram.Graph, Utils = diagram.Utils, Point = diagram.Point, EPSILON = 0.000001, DEG_TO_RAD = Math.PI / 180, contains = Utils.contains, grep = $.grep;\n var LayoutBase = kendo.Class.extend({\n defaultOptions: {\n type: 'Tree',\n subtype: 'Down',\n roots: null,\n animate: false,\n limitToView: false,\n friction: 0.9,\n nodeDistance: 50,\n iterations: 300,\n horizontalSeparation: 90,\n verticalSeparation: 50,\n underneathVerticalTopOffset: 15,\n underneathHorizontalOffset: 15,\n underneathVerticalSeparation: 15,\n grid: {\n width: 1500,\n offsetX: 50,\n offsetY: 50,\n componentSpacingX: 20,\n componentSpacingY: 20\n },\n layerSeparation: 50,\n layeredIterations: 2,\n startRadialAngle: 0,\n endRadialAngle: 360,\n radialSeparation: 150,\n radialFirstLevelSeparation: 200,\n keepComponentsInOneRadialLayout: false,\n ignoreContainers: true,\n layoutContainerChildren: false,\n ignoreInvisible: true,\n animateTransitions: false\n },\n init: function () {\n },\n gridLayoutComponents: function (components) {\n if (!components) {\n throw 'No components supplied.';\n }\n Utils.forEach(components, function (c) {\n c.calcBounds();\n });\n components.sort(function (a, b) {\n return b.bounds.width - a.bounds.width;\n });\n var maxWidth = this.options.grid.width, offsetX = this.options.grid.componentSpacingX, offsetY = this.options.grid.componentSpacingY, height = 0, startX = this.options.grid.offsetX, startY = this.options.grid.offsetY, x = startX, y = startY, i, resultLinkSet = [], resultNodeSet = [];\n while (components.length > 0) {\n if (x >= maxWidth) {\n x = startX;\n y += height + offsetY;\n height = 0;\n }\n var component = components.pop();\n this.moveToOffset(component, new Point(x, y));\n for (i = 0; i < component.nodes.length; i++) {\n resultNodeSet.push(component.nodes[i]);\n }\n for (i = 0; i < component.links.length; i++) {\n resultLinkSet.push(component.links[i]);\n }\n var boundingRect = component.bounds;\n var currentHeight = boundingRect.height;\n if (currentHeight <= 0 || isNaN(currentHeight)) {\n currentHeight = 0;\n }\n var currentWidth = boundingRect.width;\n if (currentWidth <= 0 || isNaN(currentWidth)) {\n currentWidth = 0;\n }\n if (currentHeight >= height) {\n height = currentHeight;\n }\n x += currentWidth + offsetX;\n }\n return {\n nodes: resultNodeSet,\n links: resultLinkSet\n };\n },\n moveToOffset: function (component, p) {\n var i, j, bounds = component.bounds, deltax = p.x - bounds.x, deltay = p.y - bounds.y;\n for (i = 0; i < component.nodes.length; i++) {\n var node = component.nodes[i];\n var nodeBounds = node.bounds();\n if (nodeBounds.width === 0 && nodeBounds.height === 0 && nodeBounds.x === 0 && nodeBounds.y === 0) {\n nodeBounds = new Rect(0, 0, 0, 0);\n }\n nodeBounds.x += deltax;\n nodeBounds.y += deltay;\n node.bounds(nodeBounds);\n }\n for (i = 0; i < component.links.length; i++) {\n var link = component.links[i];\n if (link.points) {\n var newpoints = [];\n var points = link.points;\n for (j = 0; j < points.length; j++) {\n var pt = points[j];\n pt.x += deltax;\n pt.y += deltay;\n newpoints.push(pt);\n }\n link.points = newpoints;\n }\n }\n this.currentHorizontalOffset += bounds.width + this.options.grid.offsetX;\n return new Point(deltax, deltay);\n },\n transferOptions: function (options) {\n this.options = kendo.deepExtend({}, this.defaultOptions);\n if (Utils.isUndefined(options)) {\n return;\n }\n this.options = kendo.deepExtend(this.options, options || {});\n }\n });\n var DiagramToHyperTreeAdapter = kendo.Class.extend({\n init: function (diagram) {\n this.nodeMap = new Dictionary();\n this.shapeMap = new Dictionary();\n this.nodes = [];\n this.edges = [];\n this.edgeMap = new Dictionary();\n this.finalNodes = [];\n this.finalLinks = [];\n this.ignoredConnections = [];\n this.ignoredShapes = [];\n this.hyperMap = new Dictionary();\n this.hyperTree = new Graph();\n this.finalGraph = null;\n this.diagram = diagram;\n },\n convert: function (options) {\n if (Utils.isUndefined(this.diagram)) {\n throw 'No diagram to convert.';\n }\n this.options = kendo.deepExtend({\n ignoreInvisible: true,\n ignoreContainers: true,\n layoutContainerChildren: false\n }, options || {});\n this.clear();\n this._renormalizeShapes();\n this._renormalizeConnections();\n this.finalNodes = new Dictionary(this.nodes);\n this.finalLinks = new Dictionary(this.edges);\n this.finalGraph = new Graph();\n this.finalNodes.forEach(function (n) {\n this.finalGraph.addNode(n);\n }, this);\n this.finalLinks.forEach(function (l) {\n this.finalGraph.addExistingLink(l);\n }, this);\n return this.finalGraph;\n },\n mapConnection: function (connection) {\n return this.edgeMap.get(connection.id);\n },\n mapShape: function (shape) {\n return this.nodeMap.get(shape.id);\n },\n getEdge: function (a, b) {\n return Utils.first(a.links, function (link) {\n return link.getComplement(a) === b;\n });\n },\n clear: function () {\n this.finalGraph = null;\n this.hyperTree = !this.options.ignoreContainers && this.options.layoutContainerChildren ? new HyperTree() : null;\n this.hyperMap = !this.options.ignoreContainers && this.options.layoutContainerChildren ? new Dictionary() : null;\n this.nodeMap = new Dictionary();\n this.shapeMap = new Dictionary();\n this.nodes = [];\n this.edges = [];\n this.edgeMap = new Dictionary();\n this.ignoredConnections = [];\n this.ignoredShapes = [];\n this.finalNodes = [];\n this.finalLinks = [];\n },\n listToRoot: function (containerGraph) {\n var list = [];\n var s = containerGraph.container;\n if (!s) {\n return list;\n }\n list.push(s);\n while (s.parentContainer) {\n s = s.parentContainer;\n list.push(s);\n }\n list.reverse();\n return list;\n },\n firstNonIgnorableContainer: function (shape) {\n if (shape.isContainer && !this._isIgnorableItem(shape)) {\n return shape;\n }\n return !shape.parentContainer ? null : this.firstNonIgnorableContainer(shape.parentContainer);\n },\n isContainerConnection: function (a, b) {\n if (a.isContainer && this.isDescendantOf(a, b)) {\n return true;\n }\n return b.isContainer && this.isDescendantOf(b, a);\n },\n isDescendantOf: function (scope, a) {\n if (!scope.isContainer) {\n throw 'Expecting a container.';\n }\n if (scope === a) {\n return false;\n }\n if (contains(scope.children, a)) {\n return true;\n }\n var containers = [];\n for (var i = 0, len = scope.children.length; i < len; i++) {\n var c = scope.children[i];\n if (c.isContainer && this.isDescendantOf(c, a)) {\n containers.push(c);\n }\n }\n return containers.length > 0;\n },\n isIgnorableItem: function (shape) {\n if (this.options.ignoreInvisible) {\n if (shape.isCollapsed && this._isVisible(shape)) {\n return false;\n }\n if (!shape.isCollapsed && this._isVisible(shape)) {\n return false;\n }\n return true;\n } else {\n return shape.isCollapsed && !this._isTop(shape);\n }\n },\n isShapeMapped: function (shape) {\n return shape.isCollapsed && !this._isVisible(shape) && !this._isTop(shape);\n },\n leastCommonAncestor: function (a, b) {\n if (!a) {\n throw 'Parameter should not be null.';\n }\n if (!b) {\n throw 'Parameter should not be null.';\n }\n if (!this.hyperTree) {\n throw 'No hypertree available.';\n }\n var al = this.listToRoot(a);\n var bl = this.listToRoot(b);\n var found = null;\n if (Utils.isEmpty(al) || Utils.isEmpty(bl)) {\n return this.hyperTree.root.data;\n }\n var xa = al[0];\n var xb = bl[0];\n var i = 0;\n while (xa === xb) {\n found = al[i];\n i++;\n if (i >= al.length || i >= bl.length) {\n break;\n }\n xa = al[i];\n xb = bl[i];\n }\n if (!found) {\n return this.hyperTree.root.data;\n } else {\n return grep(this.hyperTree.nodes, function (n) {\n return n.data.container === found;\n });\n }\n },\n _isTop: function (item) {\n return !item.parentContainer;\n },\n _isVisible: function (shape) {\n if (!shape.visible()) {\n return false;\n }\n return !shape.parentContainer ? shape.visible() : this._isVisible(shape.parentContainer);\n },\n _isCollapsed: function (shape) {\n if (shape.isContainer && shape.isCollapsed) {\n return true;\n }\n return shape.parentContainer && this._isCollapsed(shape.parentContainer);\n },\n _renormalizeShapes: function () {\n if (this.options.ignoreContainers) {\n for (var i = 0, len = this.diagram.shapes.length; i < len; i++) {\n var shape = this.diagram.shapes[i];\n if (this.options.ignoreInvisible && !this._isVisible(shape) || shape.isContainer) {\n this.ignoredShapes.push(shape);\n continue;\n }\n var node = new Node(shape.id, shape);\n node.isVirtual = false;\n this.nodeMap.add(shape.id, node);\n this.nodes.push(node);\n }\n } else {\n throw 'Containers are not supported yet, but stay tuned.';\n }\n },\n _renormalizeConnections: function () {\n if (this.diagram.connections.length === 0) {\n return;\n }\n for (var i = 0, len = this.diagram.connections.length; i < len; i++) {\n var conn = this.diagram.connections[i];\n if (this.isIgnorableItem(conn)) {\n this.ignoredConnections.push(conn);\n continue;\n }\n var source = !conn.sourceConnector ? null : conn.sourceConnector.shape;\n var sink = !conn.targetConnector ? null : conn.targetConnector.shape;\n if (!source || !sink) {\n this.ignoredConnections.push(conn);\n continue;\n }\n if (contains(this.ignoredShapes, source) && !this.shapeMap.containsKey(source)) {\n this.ignoredConnections.push(conn);\n continue;\n }\n if (contains(this.ignoredShapes, sink) && !this.shapeMap.containsKey(sink)) {\n this.ignoredConnections.push(conn);\n continue;\n }\n if (this.shapeMap.containsKey(source)) {\n source = this.shapeMap[source];\n }\n if (this.shapeMap.containsKey(sink)) {\n sink = this.shapeMap[sink];\n }\n var sourceNode = this.mapShape(source);\n var sinkNode = this.mapShape(sink);\n if (sourceNode === sinkNode || this.areConnectedAlready(sourceNode, sinkNode)) {\n this.ignoredConnections.push(conn);\n continue;\n }\n if (sourceNode === null || sinkNode === null) {\n throw 'A shape was not mapped to a node.';\n }\n if (this.options.ignoreContainers) {\n if (sourceNode.isVirtual || sinkNode.isVirtual) {\n this.ignoredConnections.push(conn);\n continue;\n }\n var newEdge = new Link(sourceNode, sinkNode, conn.id, conn);\n this.edgeMap.add(conn.id, newEdge);\n this.edges.push(newEdge);\n } else {\n throw 'Containers are not supported yet, but stay tuned.';\n }\n }\n },\n areConnectedAlready: function (n, m) {\n return Utils.any(this.edges, function (l) {\n return l.source === n && l.target === m || l.source === m && l.target === n;\n });\n }\n });\n var SpringLayout = LayoutBase.extend({\n init: function (diagram) {\n var that = this;\n LayoutBase.fn.init.call(that);\n if (Utils.isUndefined(diagram)) {\n throw 'Diagram is not specified.';\n }\n this.diagram = diagram;\n },\n layout: function (options) {\n this.transferOptions(options);\n var adapter = new DiagramToHyperTreeAdapter(this.diagram);\n var graph = adapter.convert(options);\n if (graph.isEmpty()) {\n return;\n }\n var components = graph.getConnectedComponents();\n if (Utils.isEmpty(components)) {\n return;\n }\n for (var i = 0; i < components.length; i++) {\n var component = components[i];\n this.layoutGraph(component, options);\n }\n var finalNodeSet = this.gridLayoutComponents(components);\n return new diagram.LayoutState(this.diagram, finalNodeSet);\n },\n layoutGraph: function (graph, options) {\n if (Utils.isDefined(options)) {\n this.transferOptions(options);\n }\n this.graph = graph;\n var initialTemperature = this.options.nodeDistance * 9;\n this.temperature = initialTemperature;\n var guessBounds = this._expectedBounds();\n this.width = guessBounds.width;\n this.height = guessBounds.height;\n for (var step = 0; step < this.options.iterations; step++) {\n this.refineStage = step >= this.options.iterations * 5 / 6;\n this.tick();\n this.temperature = this.refineStage ? initialTemperature / 30 : initialTemperature * (1 - step / (2 * this.options.iterations));\n }\n },\n tick: function () {\n var i;\n for (i = 0; i < this.graph.nodes.length; i++) {\n this._repulsion(this.graph.nodes[i]);\n }\n for (i = 0; i < this.graph.links.length; i++) {\n this._attraction(this.graph.links[i]);\n }\n for (i = 0; i < this.graph.nodes.length; i++) {\n var node = this.graph.nodes[i];\n var offset = Math.sqrt(node.dx * node.dx + node.dy * node.dy);\n if (offset === 0) {\n return;\n }\n node.x += Math.min(offset, this.temperature) * node.dx / offset;\n node.y += Math.min(offset, this.temperature) * node.dy / offset;\n if (this.options.limitToView) {\n node.x = Math.min(this.width, Math.max(node.width / 2, node.x));\n node.y = Math.min(this.height, Math.max(node.height / 2, node.y));\n }\n }\n },\n _shake: function (node) {\n var rho = Math.random() * this.options.nodeDistance / 4;\n var alpha = Math.random() * 2 * Math.PI;\n node.x += rho * Math.cos(alpha);\n node.y -= rho * Math.sin(alpha);\n },\n _InverseSquareForce: function (d, n, m) {\n var force;\n if (!this.refineStage) {\n force = Math.pow(d, 2) / Math.pow(this.options.nodeDistance, 2);\n } else {\n var deltax = n.x - m.x;\n var deltay = n.y - m.y;\n var wn = n.width / 2;\n var hn = n.height / 2;\n var wm = m.width / 2;\n var hm = m.height / 2;\n force = Math.pow(deltax, 2) / Math.pow(wn + wm + this.options.nodeDistance, 2) + Math.pow(deltay, 2) / Math.pow(hn + hm + this.options.nodeDistance, 2);\n }\n return force * 4 / 3;\n },\n _SquareForce: function (d, n, m) {\n return 1 / this._InverseSquareForce(d, n, m);\n },\n _repulsion: function (n) {\n n.dx = 0;\n n.dy = 0;\n Utils.forEach(this.graph.nodes, function (m) {\n if (m === n) {\n return;\n }\n while (n.x === m.x && n.y === m.y) {\n this._shake(m);\n }\n var vx = n.x - m.x;\n var vy = n.y - m.y;\n var distance = Math.sqrt(vx * vx + vy * vy);\n var r = this._SquareForce(distance, n, m) * 2;\n n.dx += vx / distance * r;\n n.dy += vy / distance * r;\n }, this);\n },\n _attraction: function (link) {\n var t = link.target;\n var s = link.source;\n if (s === t) {\n return;\n }\n while (s.x === t.x && s.y === t.y) {\n this._shake(t);\n }\n var vx = s.x - t.x;\n var vy = s.y - t.y;\n var distance = Math.sqrt(vx * vx + vy * vy);\n var a = this._InverseSquareForce(distance, s, t) * 5;\n var dx = vx / distance * a;\n var dy = vy / distance * a;\n t.dx += dx;\n t.dy += dy;\n s.dx -= dx;\n s.dy -= dy;\n },\n _expectedBounds: function () {\n var size, N = this.graph.nodes.length, ratio = 1.5, multiplier = 4;\n if (N === 0) {\n return size;\n }\n size = Utils.fold(this.graph.nodes, function (s, node) {\n var area = node.width * node.height;\n if (area > 0) {\n s += Math.sqrt(area);\n return s;\n }\n return 0;\n }, 0, this);\n var av = size / N;\n var squareSize = av * Math.ceil(Math.sqrt(N));\n var width = squareSize * Math.sqrt(ratio);\n var height = squareSize / Math.sqrt(ratio);\n return {\n width: width * multiplier,\n height: height * multiplier\n };\n }\n });\n var TreeLayoutProcessor = kendo.Class.extend({\n init: function (options) {\n this.center = null;\n this.options = options;\n },\n layout: function (treeGraph, root) {\n this.graph = treeGraph;\n if (!this.graph.nodes || this.graph.nodes.length === 0) {\n return;\n }\n if (!contains(this.graph.nodes, root)) {\n throw 'The given root is not in the graph.';\n }\n this.center = root;\n this.graph.cacheRelationships();\n this.layoutSwitch();\n },\n layoutLeft: function (left) {\n this.setChildrenDirection(this.center, 'Left', false);\n this.setChildrenLayout(this.center, 'Default', false);\n var h = 0, w = 0, y, i, node;\n for (i = 0; i < left.length; i++) {\n node = left[i];\n node.TreeDirection = 'Left';\n var s = this.measure(node, Size.Empty);\n w = Math.max(w, s.Width);\n h += s.height + this.options.verticalSeparation;\n }\n h -= this.options.verticalSeparation;\n var x = this.center.x - this.options.horizontalSeparation;\n y = this.center.y + (this.center.height - h) / 2;\n for (i = 0; i < left.length; i++) {\n node = left[i];\n var p = new Point(x - node.Size.width, y);\n this.arrange(node, p);\n y += node.Size.height + this.options.verticalSeparation;\n }\n },\n layoutRight: function (right) {\n this.setChildrenDirection(this.center, 'Right', false);\n this.setChildrenLayout(this.center, 'Default', false);\n var h = 0, w = 0, y, i, node;\n for (i = 0; i < right.length; i++) {\n node = right[i];\n node.TreeDirection = 'Right';\n var s = this.measure(node, Size.Empty);\n w = Math.max(w, s.Width);\n h += s.height + this.options.verticalSeparation;\n }\n h -= this.options.verticalSeparation;\n var x = this.center.x + this.options.horizontalSeparation + this.center.width;\n y = this.center.y + (this.center.height - h) / 2;\n for (i = 0; i < right.length; i++) {\n node = right[i];\n var p = new Point(x, y);\n this.arrange(node, p);\n y += node.Size.height + this.options.verticalSeparation;\n }\n },\n layoutUp: function (up) {\n this.setChildrenDirection(this.center, 'Up', false);\n this.setChildrenLayout(this.center, 'Default', false);\n var w = 0, y, node, i;\n for (i = 0; i < up.length; i++) {\n node = up[i];\n node.TreeDirection = 'Up';\n var s = this.measure(node, Size.Empty);\n w += s.width + this.options.horizontalSeparation;\n }\n w -= this.options.horizontalSeparation;\n var x = this.center.x + this.center.width / 2 - w / 2;\n for (i = 0; i < up.length; i++) {\n node = up[i];\n y = this.center.y - this.options.verticalSeparation - node.Size.height;\n var p = new Point(x, y);\n this.arrange(node, p);\n x += node.Size.width + this.options.horizontalSeparation;\n }\n },\n layoutDown: function (down) {\n var node, i;\n this.setChildrenDirection(this.center, 'Down', false);\n this.setChildrenLayout(this.center, 'Default', false);\n var w = 0, y;\n for (i = 0; i < down.length; i++) {\n node = down[i];\n node.treeDirection = 'Down';\n var s = this.measure(node, Size.Empty);\n w += s.width + this.options.horizontalSeparation;\n }\n w -= this.options.horizontalSeparation;\n var x = this.center.x + this.center.width / 2 - w / 2;\n y = this.center.y + this.options.verticalSeparation + this.center.height;\n for (i = 0; i < down.length; i++) {\n node = down[i];\n var p = new Point(x, y);\n this.arrange(node, p);\n x += node.Size.width + this.options.horizontalSeparation;\n }\n },\n layoutRadialTree: function () {\n this.setChildrenDirection(this.center, 'Radial', false);\n this.setChildrenLayout(this.center, 'Default', false);\n this.previousRoot = null;\n var startAngle = this.options.startRadialAngle * DEG_TO_RAD;\n var endAngle = this.options.endRadialAngle * DEG_TO_RAD;\n if (endAngle <= startAngle) {\n throw 'Final angle should not be less than the start angle.';\n }\n this.maxDepth = 0;\n this.origin = new Point(this.center.x, this.center.y);\n this.calculateAngularWidth(this.center, 0);\n if (this.maxDepth > 0) {\n this.radialLayout(this.center, this.options.radialFirstLevelSeparation, startAngle, endAngle);\n }\n this.center.Angle = endAngle - startAngle;\n },\n tipOverTree: function (down, startFromLevel) {\n if (Utils.isUndefined(startFromLevel)) {\n startFromLevel = 0;\n }\n this.setChildrenDirection(this.center, 'Down', false);\n this.setChildrenLayout(this.center, 'Default', false);\n this.setChildrenLayout(this.center, 'Underneath', false, startFromLevel);\n var w = 0, y, node, i;\n for (i = 0; i < down.length; i++) {\n node = down[i];\n node.TreeDirection = 'Down';\n var s = this.measure(node, Size.Empty);\n w += s.width + this.options.horizontalSeparation;\n }\n w -= this.options.horizontalSeparation;\n w -= down[down.length - 1].width;\n w += down[down.length - 1].associatedShape.bounds().width;\n var x = this.center.x + this.center.width / 2 - w / 2;\n y = this.center.y + this.options.verticalSeparation + this.center.height;\n for (i = 0; i < down.length; i++) {\n node = down[i];\n var p = new Point(x, y);\n this.arrange(node, p);\n x += node.Size.width + this.options.horizontalSeparation;\n }\n },\n calculateAngularWidth: function (n, d) {\n if (d > this.maxDepth) {\n this.maxDepth = d;\n }\n var aw = 0, w = 1000, h = 1000, diameter = d === 0 ? 0 : Math.sqrt(w * w + h * h) / d;\n if (n.children.length > 0) {\n for (var i = 0, len = n.children.length; i < len; i++) {\n var child = n.children[i];\n aw += this.calculateAngularWidth(child, d + 1);\n }\n aw = Math.max(diameter, aw);\n } else {\n aw = diameter;\n }\n n.sectorAngle = aw;\n return aw;\n },\n sortChildren: function (n) {\n var basevalue = 0, i;\n if (n.parents.length > 1) {\n throw 'Node is not part of a tree.';\n }\n var p = n.parents[0];\n if (p) {\n var pl = new Point(p.x, p.y);\n var nl = new Point(n.x, n.y);\n basevalue = this.normalizeAngle(Math.atan2(pl.y - nl.y, pl.x - nl.x));\n }\n var count = n.children.length;\n if (count === 0) {\n return null;\n }\n var angle = [];\n var idx = [];\n for (i = 0; i < count; ++i) {\n var c = n.children[i];\n var l = new Point(c.x, c.y);\n idx[i] = i;\n angle[i] = this.normalizeAngle(-basevalue + Math.atan2(l.y - l.y, l.x - l.x));\n }\n Utils.bisort(angle, idx);\n var col = [];\n var children = n.children;\n for (i = 0; i < count; ++i) {\n col.push(children[idx[i]]);\n }\n return col;\n },\n normalizeAngle: function (angle) {\n while (angle > Math.PI * 2) {\n angle -= 2 * Math.PI;\n }\n while (angle < 0) {\n angle += Math.PI * 2;\n }\n return angle;\n },\n radialLayout: function (node, radius, startAngle, endAngle) {\n var deltaTheta = endAngle - startAngle;\n var deltaThetaHalf = deltaTheta / 2;\n var parentSector = node.sectorAngle;\n var fraction = 0;\n var sorted = this.sortChildren(node);\n for (var i = 0, len = sorted.length; i < len; i++) {\n var childNode = sorted[i];\n var cp = childNode;\n var childAngleFraction = cp.sectorAngle / parentSector;\n if (childNode.children.length > 0) {\n this.radialLayout(childNode, radius + this.options.radialSeparation, startAngle + fraction * deltaTheta, startAngle + (fraction + childAngleFraction) * deltaTheta);\n }\n this.setPolarLocation(childNode, radius, startAngle + fraction * deltaTheta + childAngleFraction * deltaThetaHalf);\n cp.angle = childAngleFraction * deltaTheta;\n fraction += childAngleFraction;\n }\n },\n setPolarLocation: function (node, radius, angle) {\n node.x = this.origin.x + radius * Math.cos(angle);\n node.y = this.origin.y + radius * Math.sin(angle);\n node.BoundingRectangle = new Rect(node.x, node.y, node.width, node.height);\n },\n setChildrenDirection: function (node, direction, includeStart) {\n var rootDirection = node.treeDirection;\n this.graph.depthFirstTraversal(node, function (n) {\n n.treeDirection = direction;\n });\n if (!includeStart) {\n node.treeDirection = rootDirection;\n }\n },\n setChildrenLayout: function (node, layout, includeStart, startFromLevel) {\n if (Utils.isUndefined(startFromLevel)) {\n startFromLevel = 0;\n }\n var rootLayout = node.childrenLayout;\n if (startFromLevel > 0) {\n this.graph.assignLevels(node);\n this.graph.depthFirstTraversal(node, function (s) {\n if (s.level >= startFromLevel + 1) {\n s.childrenLayout = layout;\n }\n });\n } else {\n this.graph.depthFirstTraversal(node, function (s) {\n s.childrenLayout = layout;\n });\n if (!includeStart) {\n node.childrenLayout = rootLayout;\n }\n }\n },\n measure: function (node, givenSize) {\n var w = 0, h = 0, s;\n var result = new Size(0, 0);\n if (!node) {\n throw '';\n }\n var b = node.associatedShape.bounds();\n var shapeWidth = b.width;\n var shapeHeight = b.height;\n if (node.parents.length !== 1) {\n throw 'Node not in a spanning tree.';\n }\n var parent = node.parents[0];\n if (node.treeDirection === 'Undefined') {\n node.treeDirection = parent.treeDirection;\n }\n if (Utils.isEmpty(node.children)) {\n result = new Size(Math.abs(shapeWidth) < EPSILON ? 50 : shapeWidth, Math.abs(shapeHeight) < EPSILON ? 25 : shapeHeight);\n } else if (node.children.length === 1) {\n switch (node.treeDirection) {\n case 'Radial':\n s = this.measure(node.children[0], givenSize);\n w = shapeWidth + this.options.radialSeparation * Math.cos(node.AngleToParent) + s.width;\n h = shapeHeight + Math.abs(this.options.radialSeparation * Math.sin(node.AngleToParent)) + s.height;\n break;\n case 'Left':\n case 'Right':\n switch (node.childrenLayout) {\n case 'TopAlignedWithParent':\n break;\n case 'BottomAlignedWithParent':\n break;\n case 'Underneath':\n s = this.measure(node.children[0], givenSize);\n w = shapeWidth + s.width + this.options.underneathHorizontalOffset;\n h = shapeHeight + this.options.underneathVerticalTopOffset + s.height;\n break;\n case 'Default':\n s = this.measure(node.children[0], givenSize);\n w = shapeWidth + this.options.horizontalSeparation + s.width;\n h = Math.max(shapeHeight, s.height);\n break;\n default:\n throw 'Unhandled TreeDirection in the Radial layout measuring.';\n }\n break;\n case 'Up':\n case 'Down':\n switch (node.childrenLayout) {\n case 'TopAlignedWithParent':\n case 'BottomAlignedWithParent':\n break;\n case 'Underneath':\n s = this.measure(node.children[0], givenSize);\n w = Math.max(shapeWidth, s.width + this.options.underneathHorizontalOffset);\n h = shapeHeight + this.options.underneathVerticalTopOffset + s.height;\n break;\n case 'Default':\n s = this.measure(node.children[0], givenSize);\n h = shapeHeight + this.options.verticalSeparation + s.height;\n w = Math.max(shapeWidth, s.width);\n break;\n default:\n throw 'Unhandled TreeDirection in the Down layout measuring.';\n }\n break;\n default:\n throw 'Unhandled TreeDirection in the layout measuring.';\n }\n result = new Size(w, h);\n } else {\n var i, childNode;\n switch (node.treeDirection) {\n case 'Left':\n case 'Right':\n switch (node.childrenLayout) {\n case 'TopAlignedWithParent':\n case 'BottomAlignedWithParent':\n break;\n case 'Underneath':\n w = shapeWidth;\n h = shapeHeight + this.options.underneathVerticalTopOffset;\n for (i = 0; i < node.children.length; i++) {\n childNode = node.children[i];\n s = this.measure(childNode, givenSize);\n w = Math.max(w, s.width + this.options.underneathHorizontalOffset);\n h += s.height + this.options.underneathVerticalSeparation;\n }\n h -= this.options.underneathVerticalSeparation;\n break;\n case 'Default':\n w = shapeWidth;\n h = 0;\n for (i = 0; i < node.children.length; i++) {\n childNode = node.children[i];\n s = this.measure(childNode, givenSize);\n w = Math.max(w, shapeWidth + this.options.horizontalSeparation + s.width);\n h += s.height + this.options.verticalSeparation;\n }\n h -= this.options.verticalSeparation;\n break;\n default:\n throw 'Unhandled TreeDirection in the Right layout measuring.';\n }\n break;\n case 'Up':\n case 'Down':\n switch (node.childrenLayout) {\n case 'TopAlignedWithParent':\n case 'BottomAlignedWithParent':\n break;\n case 'Underneath':\n w = shapeWidth;\n h = shapeHeight + this.options.underneathVerticalTopOffset;\n for (i = 0; i < node.children.length; i++) {\n childNode = node.children[i];\n s = this.measure(childNode, givenSize);\n w = Math.max(w, s.width + this.options.underneathHorizontalOffset);\n h += s.height + this.options.underneathVerticalSeparation;\n }\n h -= this.options.underneathVerticalSeparation;\n break;\n case 'Default':\n w = 0;\n h = 0;\n for (i = 0; i < node.children.length; i++) {\n childNode = node.children[i];\n s = this.measure(childNode, givenSize);\n w += s.width + this.options.horizontalSeparation;\n h = Math.max(h, s.height + this.options.verticalSeparation + shapeHeight);\n }\n w -= this.options.horizontalSeparation;\n break;\n default:\n throw 'Unhandled TreeDirection in the Down layout measuring.';\n }\n break;\n default:\n throw 'Unhandled TreeDirection in the layout measuring.';\n }\n result = new Size(w, h);\n }\n node.SectorAngle = Math.sqrt(w * w / 4 + h * h / 4);\n node.Size = result;\n return result;\n },\n arrange: function (n, p) {\n var i, pp, child, node, childrenwidth, b = n.associatedShape.bounds();\n var shapeWidth = b.width;\n var shapeHeight = b.height;\n if (Utils.isEmpty(n.children)) {\n n.x = p.x;\n n.y = p.y;\n n.BoundingRectangle = new Rect(p.x, p.y, shapeWidth, shapeHeight);\n } else {\n var x, y;\n var selfLocation;\n switch (n.treeDirection) {\n case 'Left':\n switch (n.childrenLayout) {\n case 'TopAlignedWithParent':\n case 'BottomAlignedWithParent':\n break;\n case 'Underneath':\n selfLocation = p;\n n.x = selfLocation.x;\n n.y = selfLocation.y;\n n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n y = p.y + shapeHeight + this.options.underneathVerticalTopOffset;\n for (i = 0; i < node.children.length; i++) {\n node = node.children[i];\n x = selfLocation.x - node.associatedShape.width - this.options.underneathHorizontalOffset;\n pp = new Point(x, y);\n this.arrange(node, pp);\n y += node.Size.height + this.options.underneathVerticalSeparation;\n }\n break;\n case 'Default':\n selfLocation = new Point(p.x + n.Size.width - shapeWidth, p.y + (n.Size.height - shapeHeight) / 2);\n n.x = selfLocation.x;\n n.y = selfLocation.y;\n n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n x = selfLocation.x - this.options.horizontalSeparation;\n y = p.y;\n for (i = 0; i < n.children.length; i++) {\n node = n.children[i];\n pp = new Point(x - node.Size.width, y);\n this.arrange(node, pp);\n y += node.Size.height + this.options.verticalSeparation;\n }\n break;\n default:\n throw 'Unsupported TreeDirection';\n }\n break;\n case 'Right':\n switch (n.childrenLayout) {\n case 'TopAlignedWithParent':\n case 'BottomAlignedWithParent':\n break;\n case 'Underneath':\n selfLocation = p;\n n.x = selfLocation.x;\n n.y = selfLocation.y;\n n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n x = p.x + shapeWidth + this.options.underneathHorizontalOffset;\n y = p.y + shapeHeight + this.options.underneathVerticalTopOffset;\n for (i = 0; i < n.children.length; i++) {\n node = n.children[i];\n pp = new Point(x, y);\n this.arrange(node, pp);\n y += node.Size.height + this.options.underneathVerticalSeparation;\n }\n break;\n case 'Default':\n selfLocation = new Point(p.x, p.y + (n.Size.height - shapeHeight) / 2);\n n.x = selfLocation.x;\n n.y = selfLocation.y;\n n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n x = p.x + shapeWidth + this.options.horizontalSeparation;\n y = p.y;\n for (i = 0; i < n.children.length; i++) {\n node = n.children[i];\n pp = new Point(x, y);\n this.arrange(node, pp);\n y += node.Size.height + this.options.verticalSeparation;\n }\n break;\n default:\n throw 'Unsupported TreeDirection';\n }\n break;\n case 'Up':\n selfLocation = new Point(p.x + (n.Size.width - shapeWidth) / 2, p.y + n.Size.height - shapeHeight);\n n.x = selfLocation.x;\n n.y = selfLocation.y;\n n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n if (Math.abs(selfLocation.x - p.x) < EPSILON) {\n childrenwidth = 0;\n for (i = 0; i < n.children.length; i++) {\n child = n.children[i];\n childrenwidth += child.Size.width + this.options.horizontalSeparation;\n }\n childrenwidth -= this.options.horizontalSeparation;\n x = p.x + (shapeWidth - childrenwidth) / 2;\n } else {\n x = p.x;\n }\n for (i = 0; i < n.children.length; i++) {\n node = n.children[i];\n y = selfLocation.y - this.options.verticalSeparation - node.Size.height;\n pp = new Point(x, y);\n this.arrange(node, pp);\n x += node.Size.width + this.options.horizontalSeparation;\n }\n break;\n case 'Down':\n switch (n.childrenLayout) {\n case 'TopAlignedWithParent':\n case 'BottomAlignedWithParent':\n break;\n case 'Underneath':\n selfLocation = p;\n n.x = selfLocation.x;\n n.y = selfLocation.y;\n n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n x = p.x + this.options.underneathHorizontalOffset;\n y = p.y + shapeHeight + this.options.underneathVerticalTopOffset;\n for (i = 0; i < n.children.length; i++) {\n node = n.children[i];\n pp = new Point(x, y);\n this.arrange(node, pp);\n y += node.Size.height + this.options.underneathVerticalSeparation;\n }\n break;\n case 'Default':\n selfLocation = new Point(p.x + (n.Size.width - shapeWidth) / 2, p.y);\n n.x = selfLocation.x;\n n.y = selfLocation.y;\n n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n if (Math.abs(selfLocation.x - p.x) < EPSILON) {\n childrenwidth = 0;\n for (i = 0; i < n.children.length; i++) {\n child = n.children[i];\n childrenwidth += child.Size.width + this.options.horizontalSeparation;\n }\n childrenwidth -= this.options.horizontalSeparation;\n x = p.x + (shapeWidth - childrenwidth) / 2;\n } else {\n x = p.x;\n }\n for (i = 0; i < n.children.length; i++) {\n node = n.children[i];\n y = selfLocation.y + this.options.verticalSeparation + shapeHeight;\n pp = new Point(x, y);\n this.arrange(node, pp);\n x += node.Size.width + this.options.horizontalSeparation;\n }\n break;\n default:\n throw 'Unsupported TreeDirection';\n }\n break;\n case 'None':\n break;\n default:\n throw 'Unsupported TreeDirection';\n }\n }\n },\n layoutSwitch: function () {\n if (!this.center) {\n return;\n }\n if (Utils.isEmpty(this.center.children)) {\n return;\n }\n var type = this.options.subtype;\n if (Utils.isUndefined(type)) {\n type = 'Down';\n }\n var single, male, female, leftcount;\n var children = this.center.children;\n switch (type.toLowerCase()) {\n case 'radial':\n case 'radialtree':\n this.layoutRadialTree();\n break;\n case 'mindmaphorizontal':\n case 'mindmap':\n single = this.center.children;\n if (this.center.children.length === 1) {\n this.layoutRight(single);\n } else {\n leftcount = children.length / 2;\n male = grep(this.center.children, function (n) {\n return Utils.indexOf(children, n) < leftcount;\n });\n female = grep(this.center.children, function (n) {\n return Utils.indexOf(children, n) >= leftcount;\n });\n this.layoutLeft(male);\n this.layoutRight(female);\n }\n break;\n case 'mindmapvertical':\n single = this.center.children;\n if (this.center.children.length === 1) {\n this.layoutDown(single);\n } else {\n leftcount = children.length / 2;\n male = grep(this.center.children, function (n) {\n return Utils.indexOf(children, n) < leftcount;\n });\n female = grep(this.center.children, function (n) {\n return Utils.indexOf(children, n) >= leftcount;\n });\n this.layoutUp(male);\n this.layoutDown(female);\n }\n break;\n case 'right':\n this.layoutRight(this.center.children);\n break;\n case 'left':\n this.layoutLeft(this.center.children);\n break;\n case 'up':\n case 'bottom':\n this.layoutUp(this.center.children);\n break;\n case 'down':\n case 'top':\n this.layoutDown(this.center.children);\n break;\n case 'tipover':\n case 'tipovertree':\n if (this.options.tipOverTreeStartLevel < 0) {\n throw 'The tip-over level should be a positive integer.';\n }\n this.tipOverTree(this.center.children, this.options.tipOverTreeStartLevel);\n break;\n case 'undefined':\n case 'none':\n break;\n }\n }\n });\n var TreeLayout = LayoutBase.extend({\n init: function (diagram) {\n var that = this;\n LayoutBase.fn.init.call(that);\n if (Utils.isUndefined(diagram)) {\n throw 'No diagram specified.';\n }\n this.diagram = diagram;\n },\n layout: function (options) {\n this.transferOptions(options);\n var adapter = new DiagramToHyperTreeAdapter(this.diagram);\n this.graph = adapter.convert();\n var finalNodeSet = this.layoutComponents();\n return new diagram.LayoutState(this.diagram, finalNodeSet);\n },\n layoutComponents: function () {\n if (this.graph.isEmpty()) {\n return;\n }\n var components = this.graph.getConnectedComponents();\n if (Utils.isEmpty(components)) {\n return;\n }\n var layout = new TreeLayoutProcessor(this.options);\n var trees = [];\n for (var i = 0; i < components.length; i++) {\n var component = components[i];\n var treeGraph = this.getTree(component);\n if (!treeGraph) {\n throw 'Failed to find a spanning tree for the component.';\n }\n var root = treeGraph.root;\n var tree = treeGraph.tree;\n layout.layout(tree, root);\n trees.push(tree);\n }\n return this.gridLayoutComponents(trees);\n },\n getTree: function (graph) {\n var root = null;\n if (this.options.roots && this.options.roots.length > 0) {\n for (var i = 0, len = graph.nodes.length; i < len; i++) {\n var node = graph.nodes[i];\n for (var j = 0; j < this.options.roots.length; j++) {\n var givenRootShape = this.options.roots[j];\n if (givenRootShape === node.associatedShape) {\n root = node;\n break;\n }\n }\n }\n }\n if (!root) {\n root = graph.root();\n if (!root) {\n throw 'Unable to find a root for the tree.';\n }\n }\n return this.getTreeForRoot(graph, root);\n },\n getTreeForRoot: function (graph, root) {\n var tree = graph.getSpanningTree(root);\n if (Utils.isUndefined(tree) || tree.isEmpty()) {\n return null;\n }\n return {\n tree: tree,\n root: tree.root\n };\n }\n });\n var LayeredLayout = LayoutBase.extend({\n init: function (diagram) {\n var that = this;\n LayoutBase.fn.init.call(that);\n if (Utils.isUndefined(diagram)) {\n throw 'Diagram is not specified.';\n }\n this.diagram = diagram;\n },\n layout: function (options) {\n this.transferOptions(options);\n var adapter = new DiagramToHyperTreeAdapter(this.diagram);\n var graph = adapter.convert(options);\n if (graph.isEmpty()) {\n return;\n }\n var components = graph.getConnectedComponents();\n if (Utils.isEmpty(components)) {\n return;\n }\n for (var i = 0; i < components.length; i++) {\n var component = components[i];\n this.layoutGraph(component, options);\n }\n var finalNodeSet = this.gridLayoutComponents(components);\n return new diagram.LayoutState(this.diagram, finalNodeSet);\n },\n _initRuntimeProperties: function () {\n for (var k = 0; k < this.graph.nodes.length; k++) {\n var node = this.graph.nodes[k];\n node.layer = -1;\n node.downstreamLinkCount = 0;\n node.upstreamLinkCount = 0;\n node.isVirtual = false;\n node.uBaryCenter = 0;\n node.dBaryCenter = 0;\n node.upstreamPriority = 0;\n node.downstreamPriority = 0;\n node.gridPosition = 0;\n }\n },\n _prepare: function (graph) {\n var current = [], i, l, link;\n var layerMap = new Dictionary();\n var layerCount = 0;\n var targetLayer, next, target;\n Utils.forEach(graph.nodes, function (node) {\n if (node.incoming.length === 0) {\n layerMap.set(node, 0);\n current.push(node);\n }\n });\n while (current.length > 0) {\n next = current.shift();\n for (i = 0; i < next.outgoing.length; i++) {\n link = next.outgoing[i];\n target = link.target;\n if (layerMap.containsKey(target)) {\n targetLayer = Math.max(layerMap.get(next) + 1, layerMap.get(target));\n } else {\n targetLayer = layerMap.get(next) + 1;\n }\n layerMap.set(target, targetLayer);\n if (targetLayer > layerCount) {\n layerCount = targetLayer;\n }\n if (!contains(current, target)) {\n current.push(target);\n }\n }\n }\n var sortedNodes = layerMap.keys();\n sortedNodes.sort(function (o1, o2) {\n var o1layer = layerMap.get(o1);\n var o2layer = layerMap.get(o2);\n return Utils.sign(o2layer - o1layer);\n });\n for (var n = 0; n < sortedNodes.length; ++n) {\n var node = sortedNodes[n];\n var minLayer = Number.MAX_VALUE;\n if (node.outgoing.length === 0) {\n continue;\n }\n for (l = 0; l < node.outgoing.length; ++l) {\n link = node.outgoing[l];\n minLayer = Math.min(minLayer, layerMap.get(link.target));\n }\n if (minLayer > 1) {\n layerMap.set(node, minLayer - 1);\n }\n }\n this.layers = [];\n var layer;\n for (i = 0; i < layerCount + 1; i++) {\n layer = [];\n layer.linksTo = {};\n this.layers.push(layer);\n }\n layerMap.forEach(function (node, layer) {\n node.layer = layer;\n this.layers[layer].push(node);\n }, this);\n for (l = 0; l < this.layers.length; l++) {\n layer = this.layers[l];\n for (i = 0; i < layer.length; i++) {\n layer[i].gridPosition = i;\n }\n }\n },\n layoutGraph: function (graph, options) {\n if (Utils.isUndefined(graph)) {\n throw 'No graph given or graph analysis of the diagram failed.';\n }\n if (Utils.isDefined(options)) {\n this.transferOptions(options);\n }\n this.graph = graph;\n graph.setItemIndices();\n var reversedEdges = graph.makeAcyclic();\n this._initRuntimeProperties();\n this._prepare(graph, options);\n this._dummify();\n this._optimizeCrossings();\n this._swapPairs();\n this.arrangeNodes();\n this._moveThingsAround();\n this._dedummify();\n Utils.forEach(reversedEdges, function (e) {\n if (e.points) {\n e.points.reverse();\n }\n });\n },\n setMinDist: function (m, n, minDist) {\n var l = m.layer;\n var i = m.layerIndex;\n this.minDistances[l][i] = minDist;\n },\n getMinDist: function (m, n) {\n var dist = 0, i1 = m.layerIndex, i2 = n.layerIndex, l = m.layer, min = Math.min(i1, i2), max = Math.max(i1, i2);\n for (var k = min; k < max; ++k) {\n dist += this.minDistances[l][k];\n }\n return dist;\n },\n placeLeftToRight: function (leftClasses) {\n var leftPos = new Dictionary(), n, node;\n for (var c = 0; c < this.layers.length; ++c) {\n var classNodes = leftClasses[c];\n if (!classNodes) {\n continue;\n }\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n if (!leftPos.containsKey(node)) {\n this.placeLeft(node, leftPos, c);\n }\n }\n var d = Number.POSITIVE_INFINITY;\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n var rightSibling = this.rightSibling(node);\n if (rightSibling && this.nodeLeftClass.get(rightSibling) !== c) {\n d = Math.min(d, leftPos.get(rightSibling) - leftPos.get(node) - this.getMinDist(node, rightSibling));\n }\n }\n if (d === Number.POSITIVE_INFINITY) {\n var D = [];\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n var neighbors = [];\n Utils.addRange(neighbors, this.upNodes.get(node));\n Utils.addRange(neighbors, this.downNodes.get(node));\n for (var e = 0; e < neighbors.length; e++) {\n var neighbor = neighbors[e];\n if (this.nodeLeftClass.get(neighbor) < c) {\n D.push(leftPos.get(neighbor) - leftPos.get(node));\n }\n }\n }\n D.sort();\n if (D.length === 0) {\n d = 0;\n } else if (D.length % 2 === 1) {\n d = D[this.intDiv(D.length, 2)];\n } else {\n d = (D[this.intDiv(D.length, 2) - 1] + D[this.intDiv(D.length, 2)]) / 2;\n }\n }\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n leftPos.set(node, leftPos.get(node) + d);\n }\n }\n return leftPos;\n },\n placeRightToLeft: function (rightClasses) {\n var rightPos = new Dictionary(), n, node;\n for (var c = 0; c < this.layers.length; ++c) {\n var classNodes = rightClasses[c];\n if (!classNodes) {\n continue;\n }\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n if (!rightPos.containsKey(node)) {\n this.placeRight(node, rightPos, c);\n }\n }\n var d = Number.NEGATIVE_INFINITY;\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n var leftSibling = this.leftSibling(node);\n if (leftSibling && this.nodeRightClass.get(leftSibling) !== c) {\n d = Math.max(d, rightPos.get(leftSibling) - rightPos.get(node) + this.getMinDist(leftSibling, node));\n }\n }\n if (d === Number.NEGATIVE_INFINITY) {\n var D = [];\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n var neighbors = [];\n Utils.addRange(neighbors, this.upNodes.get(node));\n Utils.addRange(neighbors, this.downNodes.get(node));\n for (var e = 0; e < neighbors.length; e++) {\n var neighbor = neighbors[e];\n if (this.nodeRightClass.get(neighbor) < c) {\n D.push(rightPos.get(node) - rightPos.get(neighbor));\n }\n }\n }\n D.sort();\n if (D.length === 0) {\n d = 0;\n } else if (D.length % 2 === 1) {\n d = D[this.intDiv(D.length, 2)];\n } else {\n d = (D[this.intDiv(D.length, 2) - 1] + D[this.intDiv(D.length, 2)]) / 2;\n }\n }\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n rightPos.set(node, rightPos.get(node) + d);\n }\n }\n return rightPos;\n },\n _getLeftWing: function () {\n var leftWing = { value: null };\n var result = this.computeClasses(leftWing, 1);\n this.nodeLeftClass = leftWing.value;\n return result;\n },\n _getRightWing: function () {\n var rightWing = { value: null };\n var result = this.computeClasses(rightWing, -1);\n this.nodeRightClass = rightWing.value;\n return result;\n },\n computeClasses: function (wingPair, d) {\n var currentWing = 0, wing = wingPair.value = new Dictionary();\n for (var l = 0; l < this.layers.length; ++l) {\n currentWing = l;\n var layer = this.layers[l];\n for (var n = d === 1 ? 0 : layer.length - 1; 0 <= n && n < layer.length; n += d) {\n var node = layer[n];\n if (!wing.containsKey(node)) {\n wing.set(node, currentWing);\n if (node.isVirtual) {\n var ndsinl = this._nodesInLink(node);\n for (var kk = 0; kk < ndsinl.length; kk++) {\n var vnode = ndsinl[kk];\n wing.set(vnode, currentWing);\n }\n }\n } else {\n currentWing = wing.get(node);\n }\n }\n }\n var wings = [];\n for (var i = 0; i < this.layers.length; i++) {\n wings.push(null);\n }\n wing.forEach(function (node, classIndex) {\n if (wings[classIndex] === null) {\n wings[classIndex] = [];\n }\n wings[classIndex].push(node);\n });\n return wings;\n },\n _isVerticalLayout: function () {\n return this.options.subtype.toLowerCase() === 'up' || this.options.subtype.toLowerCase() === 'down' || this.options.subtype.toLowerCase() === 'vertical';\n },\n _isHorizontalLayout: function () {\n return this.options.subtype.toLowerCase() === 'right' || this.options.subtype.toLowerCase() === 'left' || this.options.subtype.toLowerCase() === 'horizontal';\n },\n _isIncreasingLayout: function () {\n return this.options.subtype.toLowerCase() === 'right' || this.options.subtype.toLowerCase() === 'down';\n },\n _moveThingsAround: function () {\n var i, l, node, layer, n, w;\n for (l = 0; l < this.layers.length; ++l) {\n layer = this.layers[l];\n layer.sort(this._gridPositionComparer);\n }\n this.minDistances = [];\n for (l = 0; l < this.layers.length; ++l) {\n layer = this.layers[l];\n this.minDistances[l] = [];\n for (n = 0; n < layer.length; ++n) {\n node = layer[n];\n node.layerIndex = n;\n this.minDistances[l][n] = this.options.nodeDistance;\n if (n < layer.length - 1) {\n if (this._isVerticalLayout()) {\n this.minDistances[l][n] += (node.width + layer[n + 1].width) / 2;\n } else {\n this.minDistances[l][n] += (node.height + layer[n + 1].height) / 2;\n }\n }\n }\n }\n this.downNodes = new Dictionary();\n this.upNodes = new Dictionary();\n Utils.forEach(this.graph.nodes, function (node) {\n this.downNodes.set(node, []);\n this.upNodes.set(node, []);\n }, this);\n Utils.forEach(this.graph.links, function (link) {\n var origin = link.source;\n var dest = link.target;\n var down = null, up = null;\n if (origin.layer > dest.layer) {\n down = link.source;\n up = link.target;\n } else {\n up = link.source;\n down = link.target;\n }\n this.downNodes.get(up).push(down);\n this.upNodes.get(down).push(up);\n }, this);\n this.downNodes.forEachValue(function (list) {\n list.sort(this._gridPositionComparer);\n }, this);\n this.upNodes.forEachValue(function (list) {\n list.sort(this._gridPositionComparer);\n }, this);\n for (l = 0; l < this.layers.length - 1; ++l) {\n layer = this.layers[l];\n for (w = 0; w < layer.length - 1; w++) {\n var currentNode = layer[w];\n if (!currentNode.isVirtual) {\n continue;\n }\n var currDown = this.downNodes.get(currentNode)[0];\n if (!currDown.isVirtual) {\n continue;\n }\n for (n = w + 1; n < layer.length; ++n) {\n node = layer[n];\n if (!node.isVirtual) {\n continue;\n }\n var downNode = this.downNodes.get(node)[0];\n if (!downNode.isVirtual) {\n continue;\n }\n if (currDown.gridPosition > downNode.gridPosition) {\n var pos = currDown.gridPosition;\n currDown.gridPosition = downNode.gridPosition;\n downNode.gridPosition = pos;\n var i1 = currDown.layerIndex;\n var i2 = downNode.layerIndex;\n this.layers[l + 1][i1] = downNode;\n this.layers[l + 1][i2] = currDown;\n currDown.layerIndex = i2;\n downNode.layerIndex = i1;\n }\n }\n }\n }\n var leftClasses = this._getLeftWing();\n var rightClasses = this._getRightWing();\n var leftPos = this.placeLeftToRight(leftClasses);\n var rightPos = this.placeRightToLeft(rightClasses);\n var x = new Dictionary();\n Utils.forEach(this.graph.nodes, function (node) {\n x.set(node, (leftPos.get(node) + rightPos.get(node)) / 2);\n });\n var order = new Dictionary();\n var placed = new Dictionary();\n for (l = 0; l < this.layers.length; ++l) {\n layer = this.layers[l];\n var sequenceStart = -1, sequenceEnd = -1;\n for (n = 0; n < layer.length; ++n) {\n node = layer[n];\n order.set(node, 0);\n placed.set(node, false);\n if (node.isVirtual) {\n if (sequenceStart === -1) {\n sequenceStart = n;\n } else if (sequenceStart === n - 1) {\n sequenceStart = n;\n } else {\n sequenceEnd = n;\n order.set(layer[sequenceStart], 0);\n if (x.get(node) - x.get(layer[sequenceStart]) === this.getMinDist(layer[sequenceStart], node)) {\n placed.set(layer[sequenceStart], true);\n } else {\n placed.set(layer[sequenceStart], false);\n }\n sequenceStart = n;\n }\n }\n }\n }\n var directions = [\n 1,\n -1\n ];\n Utils.forEach(directions, function (d) {\n var start = d === 1 ? 0 : this.layers.length - 1;\n for (var l = start; 0 <= l && l < this.layers.length; l += d) {\n var layer = this.layers[l];\n var virtualStartIndex = this._firstVirtualNode(layer);\n var virtualStart = null;\n var sequence = null;\n if (virtualStartIndex !== -1) {\n virtualStart = layer[virtualStartIndex];\n sequence = [];\n for (i = 0; i < virtualStartIndex; i++) {\n sequence.push(layer[i]);\n }\n } else {\n virtualStart = null;\n sequence = layer;\n }\n if (sequence.length > 0) {\n this._sequencer(x, null, virtualStart, d, sequence);\n for (i = 0; i < sequence.length - 1; ++i) {\n this.setMinDist(sequence[i], sequence[i + 1], x.get(sequence[i + 1]) - x.get(sequence[i]));\n }\n if (virtualStart) {\n this.setMinDist(sequence[sequence.length - 1], virtualStart, x.get(virtualStart) - x.get(sequence[sequence.length - 1]));\n }\n }\n while (virtualStart) {\n var virtualEnd = this.nextVirtualNode(layer, virtualStart);\n if (!virtualEnd) {\n virtualStartIndex = virtualStart.layerIndex;\n sequence = [];\n for (i = virtualStartIndex + 1; i < layer.length; i++) {\n sequence.push(layer[i]);\n }\n if (sequence.length > 0) {\n this._sequencer(x, virtualStart, null, d, sequence);\n for (i = 0; i < sequence.length - 1; ++i) {\n this.setMinDist(sequence[i], sequence[i + 1], x.get(sequence[i + 1]) - x.get(sequence[i]));\n }\n this.setMinDist(virtualStart, sequence[0], x.get(sequence[0]) - x.get(virtualStart));\n }\n } else if (order.get(virtualStart) === d) {\n virtualStartIndex = virtualStart.layerIndex;\n var virtualEndIndex = virtualEnd.layerIndex;\n sequence = [];\n for (i = virtualStartIndex + 1; i < virtualEndIndex; i++) {\n sequence.push(layer[i]);\n }\n if (sequence.length > 0) {\n this._sequencer(x, virtualStart, virtualEnd, d, sequence);\n }\n placed.set(virtualStart, true);\n }\n virtualStart = virtualEnd;\n }\n this.adjustDirections(l, d, order, placed);\n }\n }, this);\n var fromLayerIndex = this._isIncreasingLayout() ? 0 : this.layers.length - 1;\n var reachedFinalLayerIndex = function (k, ctx) {\n if (ctx._isIncreasingLayout()) {\n return k < ctx.layers.length;\n } else {\n return k >= 0;\n }\n };\n var layerIncrement = this._isIncreasingLayout() ? +1 : -1, offset = 0;\n function maximumHeight(layer, ctx) {\n var height = Number.MIN_VALUE;\n for (var n = 0; n < layer.length; ++n) {\n var node = layer[n];\n if (ctx._isVerticalLayout()) {\n height = Math.max(height, node.height);\n } else {\n height = Math.max(height, node.width);\n }\n }\n return height;\n }\n for (i = fromLayerIndex; reachedFinalLayerIndex(i, this); i += layerIncrement) {\n layer = this.layers[i];\n var height = maximumHeight(layer, this);\n for (n = 0; n < layer.length; ++n) {\n node = layer[n];\n if (this._isVerticalLayout()) {\n node.x = x.get(node);\n node.y = offset + height / 2;\n } else {\n node.x = offset + height / 2;\n node.y = x.get(node);\n }\n }\n offset += this.options.layerSeparation + height;\n }\n },\n adjustDirections: function (l, d, order, placed) {\n if (l + d < 0 || l + d >= this.layers.length) {\n return;\n }\n var prevBridge = null, prevBridgeTarget = null;\n var layer = this.layers[l + d];\n for (var n = 0; n < layer.length; ++n) {\n var nextBridge = layer[n];\n if (nextBridge.isVirtual) {\n var nextBridgeTarget = this.getNeighborOnLayer(nextBridge, l);\n if (nextBridgeTarget.isVirtual) {\n if (prevBridge) {\n var p = placed.get(prevBridgeTarget);\n var clayer = this.layers[l];\n var i1 = prevBridgeTarget.layerIndex;\n var i2 = nextBridgeTarget.layerIndex;\n for (var i = i1 + 1; i < i2; ++i) {\n if (clayer[i].isVirtual) {\n p = p && placed.get(clayer[i]);\n }\n }\n if (p) {\n order.set(prevBridge, d);\n var j1 = prevBridge.layerIndex;\n var j2 = nextBridge.layerIndex;\n for (var j = j1 + 1; j < j2; ++j) {\n if (layer[j].isVirtual) {\n order.set(layer[j], d);\n }\n }\n }\n }\n prevBridge = nextBridge;\n prevBridgeTarget = nextBridgeTarget;\n }\n }\n }\n },\n getNeighborOnLayer: function (node, l) {\n var neighbor = this.upNodes.get(node)[0];\n if (neighbor.layer === l) {\n return neighbor;\n }\n neighbor = this.downNodes.get(node)[0];\n if (neighbor.layer === l) {\n return neighbor;\n }\n return null;\n },\n _sequencer: function (x, virtualStart, virtualEnd, dir, sequence) {\n if (sequence.length === 1) {\n this._sequenceSingle(x, virtualStart, virtualEnd, dir, sequence[0]);\n }\n if (sequence.length > 1) {\n var r = sequence.length, t = this.intDiv(r, 2);\n this._sequencer(x, virtualStart, virtualEnd, dir, sequence.slice(0, t));\n this._sequencer(x, virtualStart, virtualEnd, dir, sequence.slice(t));\n this.combineSequences(x, virtualStart, virtualEnd, dir, sequence);\n }\n },\n _sequenceSingle: function (x, virtualStart, virtualEnd, dir, node) {\n var neighbors = dir === -1 ? this.downNodes.get(node) : this.upNodes.get(node);\n var n = neighbors.length;\n if (n !== 0) {\n if (n % 2 === 1) {\n x.set(node, x.get(neighbors[this.intDiv(n, 2)]));\n } else {\n x.set(node, (x.get(neighbors[this.intDiv(n, 2) - 1]) + x.get(neighbors[this.intDiv(n, 2)])) / 2);\n }\n if (virtualStart) {\n x.set(node, Math.max(x.get(node), x.get(virtualStart) + this.getMinDist(virtualStart, node)));\n }\n if (virtualEnd) {\n x.set(node, Math.min(x.get(node), x.get(virtualEnd) - this.getMinDist(node, virtualEnd)));\n }\n }\n },\n combineSequences: function (x, virtualStart, virtualEnd, dir, sequence) {\n var r = sequence.length, t = this.intDiv(r, 2);\n var leftHeap = [], i, c, n, neighbors, neighbor, pair;\n for (i = 0; i < t; ++i) {\n c = 0;\n neighbors = dir === -1 ? this.downNodes.get(sequence[i]) : this.upNodes.get(sequence[i]);\n for (n = 0; n < neighbors.length; ++n) {\n neighbor = neighbors[n];\n if (x.get(neighbor) >= x.get(sequence[i])) {\n c++;\n } else {\n c--;\n leftHeap.push({\n k: x.get(neighbor) + this.getMinDist(sequence[i], sequence[t - 1]),\n v: 2\n });\n }\n }\n leftHeap.push({\n k: x.get(sequence[i]) + this.getMinDist(sequence[i], sequence[t - 1]),\n v: c\n });\n }\n if (virtualStart) {\n leftHeap.push({\n k: x.get(virtualStart) + this.getMinDist(virtualStart, sequence[t - 1]),\n v: Number.MAX_VALUE\n });\n }\n leftHeap.sort(this._positionDescendingComparer);\n var rightHeap = [];\n for (i = t; i < r; ++i) {\n c = 0;\n neighbors = dir === -1 ? this.downNodes.get(sequence[i]) : this.upNodes.get(sequence[i]);\n for (n = 0; n < neighbors.length; ++n) {\n neighbor = neighbors[n];\n if (x.get(neighbor) <= x.get(sequence[i])) {\n c++;\n } else {\n c--;\n rightHeap.push({\n k: x.get(neighbor) - this.getMinDist(sequence[i], sequence[t]),\n v: 2\n });\n }\n }\n rightHeap.push({\n k: x.get(sequence[i]) - this.getMinDist(sequence[i], sequence[t]),\n v: c\n });\n }\n if (virtualEnd) {\n rightHeap.push({\n k: x.get(virtualEnd) - this.getMinDist(virtualEnd, sequence[t]),\n v: Number.MAX_VALUE\n });\n }\n rightHeap.sort(this._positionAscendingComparer);\n var leftRes = 0, rightRes = 0;\n var m = this.getMinDist(sequence[t - 1], sequence[t]);\n while (x.get(sequence[t]) - x.get(sequence[t - 1]) < m) {\n if (leftRes < rightRes) {\n if (leftHeap.length === 0) {\n x.set(sequence[t - 1], x.get(sequence[t]) - m);\n break;\n } else {\n pair = leftHeap.shift();\n leftRes = leftRes + pair.v;\n x.set(sequence[t - 1], pair.k);\n x.set(sequence[t - 1], Math.max(x.get(sequence[t - 1]), x.get(sequence[t]) - m));\n }\n } else {\n if (rightHeap.length === 0) {\n x.set(sequence[t], x.get(sequence[t - 1]) + m);\n break;\n } else {\n pair = rightHeap.shift();\n rightRes = rightRes + pair.v;\n x.set(sequence[t], pair.k);\n x.set(sequence[t], Math.min(x.get(sequence[t]), x.get(sequence[t - 1]) + m));\n }\n }\n }\n for (i = t - 2; i >= 0; i--) {\n x.set(sequence[i], Math.min(x.get(sequence[i]), x.get(sequence[t - 1]) - this.getMinDist(sequence[i], sequence[t - 1])));\n }\n for (i = t + 1; i < r; i++) {\n x.set(sequence[i], Math.max(x.get(sequence[i]), x.get(sequence[t]) + this.getMinDist(sequence[i], sequence[t])));\n }\n },\n placeLeft: function (node, leftPos, leftClass) {\n var pos = Number.NEGATIVE_INFINITY;\n Utils.forEach(this._getComposite(node), function (v) {\n var leftSibling = this.leftSibling(v);\n if (leftSibling && this.nodeLeftClass.get(leftSibling) === this.nodeLeftClass.get(v)) {\n if (!leftPos.containsKey(leftSibling)) {\n this.placeLeft(leftSibling, leftPos, leftClass);\n }\n pos = Math.max(pos, leftPos.get(leftSibling) + this.getMinDist(leftSibling, v));\n }\n }, this);\n if (pos === Number.NEGATIVE_INFINITY) {\n pos = 0;\n }\n Utils.forEach(this._getComposite(node), function (v) {\n leftPos.set(v, pos);\n });\n },\n placeRight: function (node, rightPos, rightClass) {\n var pos = Number.POSITIVE_INFINITY;\n Utils.forEach(this._getComposite(node), function (v) {\n var rightSibling = this.rightSibling(v);\n if (rightSibling && this.nodeRightClass.get(rightSibling) === this.nodeRightClass.get(v)) {\n if (!rightPos.containsKey(rightSibling)) {\n this.placeRight(rightSibling, rightPos, rightClass);\n }\n pos = Math.min(pos, rightPos.get(rightSibling) - this.getMinDist(v, rightSibling));\n }\n }, this);\n if (pos === Number.POSITIVE_INFINITY) {\n pos = 0;\n }\n Utils.forEach(this._getComposite(node), function (v) {\n rightPos.set(v, pos);\n });\n },\n leftSibling: function (node) {\n var layer = this.layers[node.layer], layerIndex = node.layerIndex;\n return layerIndex === 0 ? null : layer[layerIndex - 1];\n },\n rightSibling: function (node) {\n var layer = this.layers[node.layer];\n var layerIndex = node.layerIndex;\n return layerIndex === layer.length - 1 ? null : layer[layerIndex + 1];\n },\n _getComposite: function (node) {\n return node.isVirtual ? this._nodesInLink(node) : [node];\n },\n arrangeNodes: function () {\n var i, l, ni, layer, node;\n for (l = 0; l < this.layers.length; l++) {\n layer = this.layers[l];\n for (ni = 0; ni < layer.length; ni++) {\n node = layer[ni];\n node.upstreamPriority = node.upstreamLinkCount;\n node.downstreamPriority = node.downstreamLinkCount;\n }\n }\n var maxLayoutIterations = 2;\n for (var it = 0; it < maxLayoutIterations; it++) {\n for (i = this.layers.length - 1; i >= 1; i--) {\n this.layoutLayer(false, i);\n }\n for (i = 0; i < this.layers.length - 1; i++) {\n this.layoutLayer(true, i);\n }\n }\n var gridPos = Number.MAX_VALUE;\n for (l = 0; l < this.layers.length; l++) {\n layer = this.layers[l];\n for (ni = 0; ni < layer.length; ni++) {\n node = layer[ni];\n gridPos = Math.min(gridPos, node.gridPosition);\n }\n }\n if (gridPos < 0) {\n for (l = 0; l < this.layers.length; l++) {\n layer = this.layers[l];\n for (ni = 0; ni < layer.length; ni++) {\n node = layer[ni];\n node.gridPosition = node.gridPosition - gridPos;\n }\n }\n }\n },\n layoutLayer: function (down, layer) {\n var iconsidered;\n var considered;\n if (down) {\n considered = this.layers[iconsidered = layer + 1];\n } else {\n considered = this.layers[iconsidered = layer - 1];\n }\n var sorted = [];\n for (var n = 0; n < considered.length; n++) {\n sorted.push(considered[n]);\n }\n sorted.sort(function (n1, n2) {\n var n1Priority = (n1.upstreamPriority + n1.downstreamPriority) / 2;\n var n2Priority = (n2.upstreamPriority + n2.downstreamPriority) / 2;\n if (Math.abs(n1Priority - n2Priority) < 0.0001) {\n return 0;\n }\n if (n1Priority < n2Priority) {\n return 1;\n }\n return -1;\n });\n Utils.forEach(sorted, function (node) {\n var nodeGridPos = node.gridPosition;\n var nodeBaryCenter = this.calcBaryCenter(node);\n var nodePriority = (node.upstreamPriority + node.downstreamPriority) / 2;\n if (Math.abs(nodeGridPos - nodeBaryCenter) < 0.0001) {\n return;\n }\n if (Math.abs(nodeGridPos - nodeBaryCenter) < 0.25 + 0.0001) {\n return;\n }\n if (nodeGridPos < nodeBaryCenter) {\n while (nodeGridPos < nodeBaryCenter) {\n if (!this.moveRight(node, considered, nodePriority)) {\n break;\n }\n nodeGridPos = node.gridPosition;\n }\n } else {\n while (nodeGridPos > nodeBaryCenter) {\n if (!this.moveLeft(node, considered, nodePriority)) {\n break;\n }\n nodeGridPos = node.gridPosition;\n }\n }\n }, this);\n if (iconsidered > 0) {\n this.calcDownData(iconsidered - 1);\n }\n if (iconsidered < this.layers.length - 1) {\n this.calcUpData(iconsidered + 1);\n }\n },\n moveRight: function (node, layer, priority) {\n var index = Utils.indexOf(layer, node);\n if (index === layer.length - 1) {\n node.gridPosition = node.gridPosition + 0.5;\n return true;\n }\n var rightNode = layer[index + 1];\n var rightNodePriority = (rightNode.upstreamPriority + rightNode.downstreamPriority) / 2;\n if (rightNode.gridPosition > node.gridPosition + 1) {\n node.gridPosition = node.gridPosition + 0.5;\n return true;\n }\n if (rightNodePriority > priority || Math.abs(rightNodePriority - priority) < 0.0001) {\n return false;\n }\n if (this.moveRight(rightNode, layer, priority)) {\n node.gridPosition = node.gridPosition + 0.5;\n return true;\n }\n return false;\n },\n moveLeft: function (node, layer, priority) {\n var index = Utils.indexOf(layer, node);\n if (index === 0) {\n node.gridPosition = node.gridPosition - 0.5;\n return true;\n }\n var leftNode = layer[index - 1];\n var leftNodePriority = (leftNode.upstreamPriority + leftNode.downstreamPriority) / 2;\n if (leftNode.gridPosition < node.gridPosition - 1) {\n node.gridPosition = node.gridPosition - 0.5;\n return true;\n }\n if (leftNodePriority > priority || Math.abs(leftNodePriority - priority) < 0.0001) {\n return false;\n }\n if (this.moveLeft(leftNode, layer, priority)) {\n node.gridPosition = node.gridPosition - 0.5;\n return true;\n }\n return false;\n },\n mapVirtualNode: function (node, link) {\n this.nodeToLinkMap.set(node, link);\n if (!this.linkToNodeMap.containsKey(link)) {\n this.linkToNodeMap.set(link, []);\n }\n this.linkToNodeMap.get(link).push(node);\n },\n _nodesInLink: function (node) {\n return this.linkToNodeMap.get(this.nodeToLinkMap.get(node));\n },\n _dummify: function () {\n this.linkToNodeMap = new Dictionary();\n this.nodeToLinkMap = new Dictionary();\n var layer, pos, newNode, node, r, newLink, i, l, links = this.graph.links.slice(0);\n var layers = this.layers;\n var addLinkBetweenLayers = function (upLayer, downLayer, link) {\n layers[upLayer].linksTo[downLayer] = layers[upLayer].linksTo[downLayer] || [];\n layers[upLayer].linksTo[downLayer].push(link);\n };\n for (l = 0; l < links.length; l++) {\n var link = links[l];\n var o = link.source;\n var d = link.target;\n var oLayer = o.layer;\n var dLayer = d.layer;\n var oPos = o.gridPosition;\n var dPos = d.gridPosition;\n var step = (dPos - oPos) / Math.abs(dLayer - oLayer);\n var p = o;\n if (oLayer - dLayer > 1) {\n for (i = oLayer - 1; i > dLayer; i--) {\n newNode = new Node();\n newNode.x = o.x;\n newNode.y = o.y;\n newNode.width = o.width / 100;\n newNode.height = o.height / 100;\n layer = layers[i];\n pos = (i - dLayer) * step + oPos;\n if (pos > layer.length) {\n pos = layer.length;\n }\n if (oPos >= layers[oLayer].length - 1 && dPos >= layers[dLayer].length - 1) {\n pos = layer.length;\n } else if (oPos === 0 && dPos === 0) {\n pos = 0;\n }\n newNode.layer = i;\n newNode.uBaryCenter = 0;\n newNode.dBaryCenter = 0;\n newNode.upstreamLinkCount = 0;\n newNode.downstreamLinkCount = 0;\n newNode.gridPosition = pos;\n newNode.isVirtual = true;\n Utils.insert(layer, newNode, pos);\n for (r = pos + 1; r < layer.length; r++) {\n node = layer[r];\n node.gridPosition = node.gridPosition + 1;\n }\n newLink = new Link(p, newNode);\n newLink.depthOfDumminess = 0;\n addLinkBetweenLayers(i - 1, i, newLink);\n p = newNode;\n this.graph._addNode(newNode);\n this.graph.addLink(newLink);\n newNode.index = this.graph.nodes.length - 1;\n this.mapVirtualNode(newNode, link);\n }\n addLinkBetweenLayers(dLayer - 1, dLayer, newLink);\n link.changeSource(p);\n link.depthOfDumminess = oLayer - dLayer - 1;\n } else if (oLayer - dLayer < -1) {\n for (i = oLayer + 1; i < dLayer; i++) {\n newNode = new Node();\n newNode.x = o.x;\n newNode.y = o.y;\n newNode.width = o.width / 100;\n newNode.height = o.height / 100;\n layer = layers[i];\n pos = (i - oLayer) * step + oPos;\n if (pos > layer.length) {\n pos = layer.length;\n }\n if (oPos >= layers[oLayer].length - 1 && dPos >= layers[dLayer].length - 1) {\n pos = layer.length;\n } else if (oPos === 0 && dPos === 0) {\n pos = 0;\n }\n newNode.layer = i;\n newNode.uBaryCenter = 0;\n newNode.dBaryCenter = 0;\n newNode.upstreamLinkCount = 0;\n newNode.downstreamLinkCount = 0;\n newNode.gridPosition = pos;\n newNode.isVirtual = true;\n pos &= pos;\n Utils.insert(layer, newNode, pos);\n for (r = pos + 1; r < layer.length; r++) {\n node = layer[r];\n node.gridPosition = node.gridPosition + 1;\n }\n newLink = new Link(p, newNode);\n newLink.depthOfDumminess = 0;\n addLinkBetweenLayers(i - 1, i, newLink);\n p = newNode;\n this.graph._addNode(newNode);\n this.graph.addLink(newLink);\n newNode.index = this.graph.nodes.length - 1;\n this.mapVirtualNode(newNode, link);\n }\n addLinkBetweenLayers(dLayer - 1, dLayer, link);\n link.changeSource(p);\n link.depthOfDumminess = dLayer - oLayer - 1;\n } else {\n addLinkBetweenLayers(oLayer, dLayer, link);\n }\n }\n },\n _dedummify: function () {\n var dedum = true;\n while (dedum) {\n dedum = false;\n for (var l = 0; l < this.graph.links.length; l++) {\n var link = this.graph.links[l];\n if (!link.depthOfDumminess) {\n continue;\n }\n var points = [];\n points.unshift({\n x: link.target.x,\n y: link.target.y\n });\n points.unshift({\n x: link.source.x,\n y: link.source.y\n });\n var temp = link;\n var depthOfDumminess = link.depthOfDumminess;\n for (var d = 0; d < depthOfDumminess; d++) {\n var node = temp.source;\n var prevLink = node.incoming[0];\n points.unshift({\n x: prevLink.source.x,\n y: prevLink.source.y\n });\n temp = prevLink;\n }\n link.changeSource(temp.source);\n link.depthOfDumminess = 0;\n if (points.length > 2) {\n points.splice(0, 1);\n points.splice(points.length - 1);\n link.points = points;\n } else {\n link.points = [];\n }\n dedum = true;\n break;\n }\n }\n },\n _optimizeCrossings: function () {\n var moves = -1, i;\n var maxIterations = 3;\n var iter = 0;\n while (moves !== 0) {\n if (iter++ > maxIterations) {\n break;\n }\n moves = 0;\n for (i = this.layers.length - 1; i >= 1; i--) {\n moves += this.optimizeLayerCrossings(false, i);\n }\n for (i = 0; i < this.layers.length - 1; i++) {\n moves += this.optimizeLayerCrossings(true, i);\n }\n }\n },\n calcUpData: function (layer) {\n if (layer === 0) {\n return;\n }\n var considered = this.layers[layer], i, l, link;\n var upLayer = new Set();\n var temp = this.layers[layer - 1];\n for (i = 0; i < temp.length; i++) {\n upLayer.add(temp[i]);\n }\n for (i = 0; i < considered.length; i++) {\n var node = considered[i];\n var sum = 0;\n var total = 0;\n for (l = 0; l < node.incoming.length; l++) {\n link = node.incoming[l];\n if (upLayer.contains(link.source)) {\n total++;\n sum += link.source.gridPosition;\n }\n }\n for (l = 0; l < node.outgoing.length; l++) {\n link = node.outgoing[l];\n if (upLayer.contains(link.target)) {\n total++;\n sum += link.target.gridPosition;\n }\n }\n if (total > 0) {\n node.uBaryCenter = sum / total;\n node.upstreamLinkCount = total;\n } else {\n node.uBaryCenter = i;\n node.upstreamLinkCount = 0;\n }\n }\n },\n calcDownData: function (layer) {\n if (layer === this.layers.length - 1) {\n return;\n }\n var considered = this.layers[layer], i, l, link;\n var downLayer = new Set();\n var temp = this.layers[layer + 1];\n for (i = 0; i < temp.length; i++) {\n downLayer.add(temp[i]);\n }\n for (i = 0; i < considered.length; i++) {\n var node = considered[i];\n var sum = 0;\n var total = 0;\n for (l = 0; l < node.incoming.length; l++) {\n link = node.incoming[l];\n if (downLayer.contains(link.source)) {\n total++;\n sum += link.source.gridPosition;\n }\n }\n for (l = 0; l < node.outgoing.length; l++) {\n link = node.outgoing[l];\n if (downLayer.contains(link.target)) {\n total++;\n sum += link.target.gridPosition;\n }\n }\n if (total > 0) {\n node.dBaryCenter = sum / total;\n node.downstreamLinkCount = total;\n } else {\n node.dBaryCenter = i;\n node.downstreamLinkCount = 0;\n }\n }\n },\n optimizeLayerCrossings: function (down, layer) {\n var iconsidered;\n var considered;\n if (down) {\n considered = this.layers[iconsidered = layer + 1];\n } else {\n considered = this.layers[iconsidered = layer - 1];\n }\n var presorted = considered.slice(0);\n if (down) {\n this.calcUpData(iconsidered);\n } else {\n this.calcDownData(iconsidered);\n }\n var that = this;\n considered.sort(function (n1, n2) {\n var n1BaryCenter = that.calcBaryCenter(n1), n2BaryCenter = that.calcBaryCenter(n2);\n if (Math.abs(n1BaryCenter - n2BaryCenter) < 0.0001) {\n if (n1.degree() === n2.degree()) {\n return that.compareByIndex(n1, n2);\n } else if (n1.degree() < n2.degree()) {\n return 1;\n }\n return -1;\n }\n var compareValue = (n2BaryCenter - n1BaryCenter) * 1000;\n if (compareValue > 0) {\n return -1;\n } else if (compareValue < 0) {\n return 1;\n }\n return that.compareByIndex(n1, n2);\n });\n var i, moves = 0;\n for (i = 0; i < considered.length; i++) {\n if (considered[i] !== presorted[i]) {\n moves++;\n }\n }\n if (moves > 0) {\n var inode = 0;\n for (i = 0; i < considered.length; i++) {\n var node = considered[i];\n node.gridPosition = inode++;\n }\n }\n return moves;\n },\n _swapPairs: function () {\n var maxIterations = this.options.layeredIterations;\n var iter = 0;\n while (true) {\n if (iter++ > maxIterations) {\n break;\n }\n var downwards = iter % 4 <= 1;\n var secondPass = iter % 4 === 1;\n for (var l = downwards ? 0 : this.layers.length - 1; downwards ? l <= this.layers.length - 1 : l >= 0; l += downwards ? 1 : -1) {\n var layer = this.layers[l];\n var hasSwapped = false;\n var calcCrossings = true;\n var memCrossings = 0;\n for (var n = 0; n < layer.length - 1; n++) {\n var up = 0;\n var down = 0;\n var crossBefore = 0;\n if (calcCrossings) {\n if (l !== 0) {\n up = this.countLinksCrossingBetweenTwoLayers(l - 1, l);\n }\n if (l !== this.layers.length - 1) {\n down = this.countLinksCrossingBetweenTwoLayers(l, l + 1);\n }\n if (downwards) {\n up *= 2;\n } else {\n down *= 2;\n }\n crossBefore = up + down;\n } else {\n crossBefore = memCrossings;\n }\n if (crossBefore === 0) {\n continue;\n }\n var node1 = layer[n];\n var node2 = layer[n + 1];\n var node1GridPos = node1.gridPosition;\n var node2GridPos = node2.gridPosition;\n layer[n] = node2;\n layer[n + 1] = node1;\n node1.gridPosition = node2GridPos;\n node2.gridPosition = node1GridPos;\n up = 0;\n if (l !== 0) {\n up = this.countLinksCrossingBetweenTwoLayers(l - 1, l);\n }\n down = 0;\n if (l !== this.layers.length - 1) {\n down = this.countLinksCrossingBetweenTwoLayers(l, l + 1);\n }\n if (downwards) {\n up *= 2;\n } else {\n down *= 2;\n }\n var crossAfter = up + down;\n var revert = false;\n if (secondPass) {\n revert = crossAfter >= crossBefore;\n } else {\n revert = crossAfter > crossBefore;\n }\n if (revert) {\n node1 = layer[n];\n node2 = layer[n + 1];\n node1GridPos = node1.gridPosition;\n node2GridPos = node2.gridPosition;\n layer[n] = node2;\n layer[n + 1] = node1;\n node1.gridPosition = node2GridPos;\n node2.gridPosition = node1GridPos;\n memCrossings = crossBefore;\n calcCrossings = false;\n } else {\n hasSwapped = true;\n calcCrossings = true;\n }\n }\n if (hasSwapped) {\n if (l !== this.layers.length - 1) {\n this.calcUpData(l + 1);\n }\n if (l !== 0) {\n this.calcDownData(l - 1);\n }\n }\n }\n }\n },\n countLinksCrossingBetweenTwoLayers: function (ulayer, dlayer) {\n var links = this.layers[ulayer].linksTo[dlayer];\n var link1, link2, n11, n12, n21, n22, l1, l2;\n var crossings = 0;\n var length = links.length;\n for (l1 = 0; l1 < length; l1++) {\n link1 = links[l1];\n for (l2 = l1 + 1; l2 < length; l2++) {\n link2 = links[l2];\n if (link1.target.layer === dlayer) {\n n11 = link1.source;\n n12 = link1.target;\n } else {\n n11 = link1.target;\n n12 = link1.source;\n }\n if (link2.target.layer === dlayer) {\n n21 = link2.source;\n n22 = link2.target;\n } else {\n n21 = link2.target;\n n22 = link2.source;\n }\n var n11gp = n11.gridPosition;\n var n12gp = n12.gridPosition;\n var n21gp = n21.gridPosition;\n var n22gp = n22.gridPosition;\n if ((n11gp - n21gp) * (n12gp - n22gp) < 0) {\n crossings++;\n }\n }\n }\n return crossings;\n },\n calcBaryCenter: function (node) {\n var upstreamLinkCount = node.upstreamLinkCount;\n var downstreamLinkCount = node.downstreamLinkCount;\n var uBaryCenter = node.uBaryCenter;\n var dBaryCenter = node.dBaryCenter;\n if (upstreamLinkCount > 0 && downstreamLinkCount > 0) {\n return (uBaryCenter + dBaryCenter) / 2;\n }\n if (upstreamLinkCount > 0) {\n return uBaryCenter;\n }\n if (downstreamLinkCount > 0) {\n return dBaryCenter;\n }\n return 0;\n },\n _gridPositionComparer: function (x, y) {\n if (x.gridPosition < y.gridPosition) {\n return -1;\n }\n if (x.gridPosition > y.gridPosition) {\n return 1;\n }\n return 0;\n },\n _positionAscendingComparer: function (x, y) {\n return x.k < y.k ? -1 : x.k > y.k ? 1 : 0;\n },\n _positionDescendingComparer: function (x, y) {\n return x.k < y.k ? 1 : x.k > y.k ? -1 : 0;\n },\n _firstVirtualNode: function (layer) {\n for (var c = 0; c < layer.length; c++) {\n if (layer[c].isVirtual) {\n return c;\n }\n }\n return -1;\n },\n compareByIndex: function (o1, o2) {\n var i1 = o1.index;\n var i2 = o2.index;\n if (i1 < i2) {\n return 1;\n }\n if (i1 > i2) {\n return -1;\n }\n return 0;\n },\n intDiv: function (numerator, denominator) {\n return (numerator - numerator % denominator) / denominator;\n },\n nextVirtualNode: function (layer, node) {\n var nodeIndex = node.layerIndex;\n for (var i = nodeIndex + 1; i < layer.length; ++i) {\n if (layer[i].isVirtual) {\n return layer[i];\n }\n }\n return null;\n }\n });\n var LayoutState = kendo.Class.extend({\n init: function (diagram, graphOrNodes) {\n if (Utils.isUndefined(diagram)) {\n throw 'No diagram given';\n }\n this.diagram = diagram;\n this.nodeMap = new Dictionary();\n this.linkMap = new Dictionary();\n this.capture(graphOrNodes ? graphOrNodes : diagram);\n },\n capture: function (diagramOrGraphOrNodes) {\n var node, nodes, shape, i, conn, link, links;\n if (diagramOrGraphOrNodes instanceof diagram.Graph) {\n for (i = 0; i < diagramOrGraphOrNodes.nodes.length; i++) {\n node = diagramOrGraphOrNodes.nodes[i];\n shape = node.associatedShape;\n this.nodeMap.set(shape.visual.id, new Rect(node.x, node.y, node.width, node.height));\n }\n for (i = 0; i < diagramOrGraphOrNodes.links.length; i++) {\n link = diagramOrGraphOrNodes.links[i];\n conn = link.associatedConnection;\n this.linkMap.set(conn.visual.id, link.points());\n }\n } else if (diagramOrGraphOrNodes instanceof Array) {\n nodes = diagramOrGraphOrNodes;\n for (i = 0; i < nodes.length; i++) {\n node = nodes[i];\n shape = node.associatedShape;\n if (shape) {\n this.nodeMap.set(shape.visual.id, new Rect(node.x, node.y, node.width, node.height));\n }\n }\n } else if (diagramOrGraphOrNodes.hasOwnProperty('links') && diagramOrGraphOrNodes.hasOwnProperty('nodes')) {\n nodes = diagramOrGraphOrNodes.nodes;\n links = diagramOrGraphOrNodes.links;\n for (i = 0; i < nodes.length; i++) {\n node = nodes[i];\n shape = node.associatedShape;\n if (shape) {\n this.nodeMap.set(shape.visual.id, new Rect(node.x, node.y, node.width, node.height));\n }\n }\n for (i = 0; i < links.length; i++) {\n link = links[i];\n conn = link.associatedConnection;\n if (conn) {\n this.linkMap.set(conn.visual.id, link.points);\n }\n }\n } else {\n var shapes = this.diagram.shapes;\n var connections = this.diagram.connections;\n for (i = 0; i < shapes.length; i++) {\n shape = shapes[i];\n this.nodeMap.set(shape.visual.id, shape.bounds());\n }\n for (i = 0; i < connections.length; i++) {\n conn = connections[i];\n this.linkMap.set(conn.visual.id, conn.points());\n }\n }\n }\n });\n deepExtend(diagram, {\n init: function (element) {\n kendo.init(element, diagram.ui);\n },\n SpringLayout: SpringLayout,\n TreeLayout: TreeLayout,\n GraphAdapter: DiagramToHyperTreeAdapter,\n LayeredLayout: LayeredLayout,\n LayoutBase: LayoutBase,\n LayoutState: LayoutState\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.toolbar', [\n 'kendo.core',\n 'kendo.userevents',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'toolbar',\n name: 'ToolBar',\n category: 'web',\n description: 'The ToolBar widget displays one or more command buttons divided into groups.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Class = kendo.Class, Widget = kendo.ui.Widget, proxy = $.proxy, isFunction = kendo.isFunction, keys = kendo.keys, outerWidth = kendo._outerWidth, TOOLBAR = 'k-toolbar', BUTTON = 'k-button', OVERFLOW_BUTTON = 'k-overflow-button', TOGGLE_BUTTON = 'k-toggle-button', BUTTON_GROUP = 'k-button-group', SPLIT_BUTTON = 'k-split-button', SEPARATOR = 'k-separator', 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.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 km-widget';\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 if (item.toolbar) {\n if (item.toolbar.options.type === 'button' && item.toolbar.options.isChild) {\n item.toolbar.hide();\n item.toolbar.getParentGroup().refresh();\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 item.overflow.hide();\n item.overflow.getParentGroup().refresh();\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 element[0].focus();\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;\n if (!element.length) {\n element = target;\n }\n if (element.is('.' + OVERFLOW_ANCHOR)) {\n if (e.shiftKey) {\n e.preventDefault();\n }\n if (items.last().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') {\n e.preventDefault();\n this.overflowAnchor.focus();\n }\n if (firstHasFocus) {\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', 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', 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: [CHANGE],\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 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 }), weekNumberTemplate = template('#= data.weekNumber #', { useWithBlock: false }), browser = kendo.support.browser, isIE8 = browser.msie && browser.version < 9, outerHeight = kendo._outerHeight, 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 + '\"', TODAY = 'k-nav-today', CELLSELECTOR = 'td:has(.k-link)', CELLSELECTORVALID = 'td:has(.k-link):not(.' + DISABLED + ')', 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._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 = that._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 = that._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._footer(that.footer);\n that._index = views[that.options.start];\n that.navigate();\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 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 = that._toDateObject(target.find('a'));\n that._class(FOCUSED, that._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 = that._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(that._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 = that._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 || that._toDateObject(that.selectable.value().first().find('a')), toDate = that._toDateObject(toDateCell.find('a')), daysDifference;\n if (that.selectable._lastActive || that._value) {\n fromDate = that.selectable._lastActive ? that._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 = that._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 = that._toDateObject(that._cellsBySelector(CELLSELECTOR + ':first').find('a')), lastDateInView = that._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 = that._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(that._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 ? that._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, from = options.from, to = options.to, active = that._active;\n if (!from) {\n to.insertAfter(that.element[0].firstChild);\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 to.insertAfter(that.element[0].firstChild);\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.css({\n position: 'absolute',\n top: outerHeight(from.prev()),\n left: 0\n }).insertBefore(from);\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 to.css({\n position: 'static',\n top: 0,\n left: 0\n });\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 = that._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 _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)').has('.k-link').first();\n currentValue = that._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 _toDateObject: function (link) {\n var value = $(link).attr(kendo.attr(VALUE)).split('/');\n value = createDate(value[0], value[1], value[2]);\n return value;\n },\n _templates: function () {\n var that = this, options = that.options, footer = options.footer, month = options.month, content = month.content, weekNumber = month.weekNumber, empty = month.empty, footerTemplate = '#= kendo.toString(data,\"D\",\"' + options.culture + '\") #';\n that.month = {\n content: template('' + (content || '#=data.value#') + '', { useWithBlock: !!content }),\n empty: template('' + (empty || ' ') + '', { useWithBlock: !!empty }),\n weekNumber: template('' + (weekNumber || '#= data.weekNumber #') + '', { useWithBlock: !!weekNumber })\n };\n if (footer && footer !== true) {\n footerTemplate = footer;\n }\n that.footer = footer !== false ? template(footerTemplate, { useWithBlock: false }) : null;\n }\n });\n ui.plugin(Calendar);\n var calendar = {\n firstDayOfMonth: function (date) {\n return createDate(date.getFullYear(), date.getMonth(), 1);\n },\n firstVisibleDay: function (date, calendarInfo) {\n calendarInfo = calendarInfo || kendo.culture().calendar;\n var firstDay = calendarInfo.firstDay, firstVisibleDay = new DATE(date.getFullYear(), date.getMonth(), 1, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n firstVisibleDay.setFullYear(date.getFullYear());\n while (firstVisibleDay.getDay() != firstDay) {\n calendar.setTime(firstVisibleDay, -1 * MS_PER_DAY);\n }\n return firstVisibleDay;\n },\n setTime: function (date, time) {\n var tzOffsetBefore = date.getTimezoneOffset(), resultDATE = new DATE(date.getTime() + time), tzOffsetDiff = resultDATE.getTimezoneOffset() - tzOffsetBefore;\n date.setTime(resultDATE.getTime() + tzOffsetDiff * MS_PER_MINUTE);\n },\n views: [\n {\n name: MONTH,\n title: function (date, min, max, culture) {\n return getCalendarInfo(culture).months.names[date.getMonth()] + ' ' + date.getFullYear();\n },\n content: function (options) {\n var that = this, idx = 0, min = options.min, max = options.max, date = options.date, dates = options.dates, format = options.format, culture = options.culture, navigateUrl = options.url, isWeekColumnVisible = options.isWeekColumnVisible, hasUrl = navigateUrl && dates[0], currentCalendar = getCalendarInfo(culture), firstDayIdx = currentCalendar.firstDay, days = currentCalendar.days, names = shiftArray(days.names, firstDayIdx), shortNames = shiftArray(days.namesShort, firstDayIdx), start = calendar.firstVisibleDay(date, currentCalendar), firstDayOfMonth = that.first(date), lastDayOfMonth = that.last(date), toDateString = that.toDateString, today = getToday(), html = '';\n if (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 content: options.content,\n empty: options.empty,\n setter: that.setDate,\n disableDates: options.disableDates,\n build: function (date, idx, disableDates) {\n var cssClass = [], day = date.getDay(), linkClass = '', url = '#';\n if (date < firstDayOfMonth || date > lastDayOfMonth) {\n cssClass.push(OTHERMONTH);\n }\n if (disableDates(date)) {\n cssClass.push(DISABLED);\n }\n if (+date === today) {\n cssClass.push('k-today');\n }\n if (day === 0 || day === 6) {\n cssClass.push('k-weekend');\n }\n if (hasUrl && inArray(+date, dates)) {\n url = navigateUrl.replace('{0}', kendo.toString(date, format, culture));\n linkClass = ' k-action-link';\n }\n return {\n date: date,\n dates: dates,\n ns: kendo.ns,\n title: kendo.toString(date, 'D', culture),\n value: date.getDate(),\n dateString: toDateString(date),\n cssClass: cssClass[0] ? ' class=\"' + cssClass.join(' ') + '\"' : '',\n linkClass: linkClass,\n url: url\n };\n },\n weekNumberBuild: function (date) {\n return {\n weekNumber: weekInYear(date, kendo.culture().calendar.firstDay),\n currentDate: date\n };\n }\n });\n },\n first: function (date) {\n return calendar.firstDayOfMonth(date);\n },\n last: function (date) {\n var last = createDate(date.getFullYear(), date.getMonth() + 1, 0), first = calendar.firstDayOfMonth(date), timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n if (timeOffset) {\n last.setHours(first.getHours() + timeOffset / 60);\n }\n return last;\n },\n compare: function (date1, date2) {\n var result, month1 = date1.getMonth(), year1 = date1.getFullYear(), month2 = date2.getMonth(), year2 = date2.getFullYear();\n if (year1 > year2) {\n result = 1;\n } else if (year1 < year2) {\n result = -1;\n } else {\n result = month1 == month2 ? 0 : month1 > month2 ? 1 : -1;\n }\n return result;\n },\n setDate: function (date, value) {\n var hours = date.getHours();\n if (value instanceof DATE) {\n date.setFullYear(value.getFullYear(), value.getMonth(), value.getDate());\n } else {\n calendar.setTime(date, value * MS_PER_DAY);\n }\n adjustDST(date, hours);\n },\n toDateString: function (date) {\n return date.getFullYear() + '/' + date.getMonth() + '/' + date.getDate();\n }\n },\n {\n name: 'year',\n title: function (date) {\n return date.getFullYear();\n },\n content: function (options) {\n var namesAbbr = getCalendarInfo(options.culture).months.namesAbbr, toDateString = this.toDateString, min = options.min, max = options.max;\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 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;\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 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;\n minYear = minYear - minYear % 10;\n maxYear = maxYear - maxYear % 10;\n if (maxYear - minYear < 10) {\n maxYear = minYear + 9;\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 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, weekNumber = options.weekNumber || weekNumberTemplate, content = options.content || cellTemplate, empty = options.empty || emptyCellTemplate, html = options.html || '
        ' + options.messages.weekColumnHeader + '' + shortNames[idx] + '
        ';\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 += weekNumber(weekNumberBuild(start));\n }\n }\n start = createDate(start.getFullYear(), start.getMonth(), start.getDate());\n adjustDST(start, 0);\n data = build(start, idx, options.disableDates);\n html += isInRange(start, min, max) ? content(data) : empty(data);\n setter(start, 1);\n }\n return html + '
        ';\n }\n function compare(date1, date2, modifier) {\n var year1 = date1.getFullYear(), start = date2.getFullYear(), end = start, result = 0;\n if (modifier) {\n start = start - start % modifier;\n end = start - start % modifier + modifier - 1;\n }\n if (year1 > end) {\n result = 1;\n } else if (year1 < start) {\n result = -1;\n }\n return result;\n }\n function getToday() {\n var today = new DATE();\n return new DATE(today.getFullYear(), today.getMonth(), today.getDate());\n }\n function restrictValue(value, min, max) {\n var today = getToday();\n if (value) {\n today = new DATE(+value);\n }\n if (min > today) {\n today = new DATE(+min);\n } else if (max < today) {\n today = new DATE(+max);\n }\n return today;\n }\n function isInRange(date, min, max) {\n return +date >= +min && +date <= +max;\n }\n function shiftArray(array, idx) {\n return array.slice(idx).concat(array.slice(0, idx));\n }\n function setDate(date, value, multiplier) {\n value = value instanceof DATE ? value.getFullYear() : date.getFullYear() + multiplier * value;\n date.setFullYear(value);\n }\n function daysBetweenTwoDates(startDate, endDate) {\n if (+endDate < +startDate) {\n var temp = +startDate;\n calendar.views[0].setDate(startDate, endDate);\n calendar.views[0].setDate(endDate, new Date(temp));\n }\n var fromDateUTC = Date.UTC(startDate.getFullYear(), startDate.getMonth(), startDate.getDate());\n var endDateUTC = Date.UTC(endDate.getFullYear(), endDate.getMonth(), endDate.getDate());\n return Math.ceil((+endDateUTC - +fromDateUTC) / kendo.date.MS_PER_DAY);\n }\n function addDaysToArray(array, numberOfDays, fromDate, disableDates) {\n for (var i = 0; i <= numberOfDays; i++) {\n var nextDay = new Date(fromDate.getTime());\n nextDay = new Date(nextDay.setDate(nextDay.getDate() + i));\n if (!disableDates(nextDay)) {\n array.push(nextDay);\n }\n }\n }\n function mousetoggle(e) {\n var disabled = $(this).hasClass('k-state-disabled');\n if (!disabled) {\n $(this).toggleClass(HOVER, MOUSEENTER.indexOf(e.type) > -1 || e.type == FOCUS);\n }\n }\n function prevent(e) {\n e.preventDefault();\n }\n function createDate(year, month, date) {\n var dateObject = new DATE(year, month, date);\n dateObject.setFullYear(year, month, date);\n return dateObject;\n }\n function getCalendarInfo(culture) {\n return getCulture(culture).calendars.standard;\n }\n function normalize(options) {\n var start = views[options.start], depth = views[options.depth], culture = getCulture(options.culture);\n options.format = extractFormat(options.format || culture.calendars.standard.patterns.d);\n if (isNaN(start)) {\n start = 0;\n options.start = MONTH;\n }\n if (depth === undefined || depth > start) {\n options.depth = MONTH;\n }\n if (options.dates === null) {\n options.dates = [];\n }\n }\n function makeUnselectable(element) {\n if (isIE8) {\n element.find('*').attr('unselectable', 'on');\n }\n }\n function addClassToViewContainer(element, currentView) {\n element.addClass('k-' + currentView);\n }\n function inArray(date, dates) {\n for (var i = 0, length = dates.length; i < length; i++) {\n if (date === +dates[i]) {\n return true;\n }\n }\n return false;\n }\n function isEqualDatePart(value1, value2) {\n if (value1) {\n return value1.getFullYear() === value2.getFullYear() && value1.getMonth() === value2.getMonth() && value1.getDate() === value2.getDate();\n }\n return false;\n }\n function isEqualMonth(value1, value2) {\n if (value1) {\n return value1.getFullYear() === value2.getFullYear() && value1.getMonth() === value2.getMonth();\n }\n return false;\n }\n function getDisabledExpr(option) {\n if (kendo.isFunction(option)) {\n return option;\n }\n if ($.isArray(option)) {\n return createDisabledExpr(option);\n }\n return $.noop;\n }\n function convertDatesArray(dates) {\n var result = [];\n for (var i = 0; i < dates.length; i++) {\n result.push(dates[i].setHours(0, 0, 0, 0));\n }\n return result;\n }\n function createDisabledExpr(dates) {\n var body, callback, disabledDates = [], days = [\n 'su',\n 'mo',\n 'tu',\n 'we',\n 'th',\n 'fr',\n 'sa'\n ], searchExpression = 'if (found) {' + ' return true ' + '} else {' + 'return false' + '}';\n if (dates[0] instanceof DATE) {\n disabledDates = convertDatesArray(dates);\n body = 'var found = date && window.kendo.jQuery.inArray(date.setHours(0, 0, 0, 0),[' + disabledDates + ']) > -1;' + searchExpression;\n } else {\n for (var i = 0; i < dates.length; i++) {\n var day = dates[i].slice(0, 2).toLowerCase();\n var index = $.inArray(day, days);\n if (index > -1) {\n disabledDates.push(index);\n }\n }\n body = 'var found = date && window.kendo.jQuery.inArray(date.getDay(),[' + disabledDates + ']) > -1;' + searchExpression;\n }\n callback = new Function('date', body);\n return callback;\n }\n function isEqualDate(oldValue, newValue) {\n if (oldValue instanceof Date && newValue instanceof Date) {\n oldValue = oldValue.getTime();\n newValue = newValue.getTime();\n }\n return oldValue === newValue;\n }\n 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 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 $('').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.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 k-header').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 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 that._initialTitle = element.title;\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._initialTitle || 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 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 k-header').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 PanelBar: 'ul',\n TreeView: 'ul',\n Menu: 'ul',\n ContextMenu: 'ul',\n ActionSheet: 'ul'\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 '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 'k-' + name + ' 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}));"]}