{"version":3,"file":"kendo.dataviz.mobile.min.js","names":["factory","define","amd","packageMetadata","name","productName","productCodes","publishDate","version","replace","licensingDocsUrl","$","window","undefined$1","Template","kendo","cultures","extend","each","isArray","Array","noop","math","Math","JSON","support","percentRegExp","formatRegExp","boxShadowRegExp","numberRegExp","FUNCTION","STRING","NUMBER","OBJECT","NULL","BOOLEAN","UNDEFINED","ARIA_LABELLEDBY","ARIA_LABEL","getterCache","setterCache","slice","cssPropertiesNames","noDepricateExtend","src","copyIsArray","copy","options","clone","arguments$1","arguments","target","i","length","deep","this","jQuery","isPlainObject","Class","proto","member","fn","base","that","subclass","init","apply","prototype","constructor","Object","_initOptions","deepExtend","isFunction","preventDefault","_defaultPrevented","isDefaultPrevented","Observable","_events","bind","eventName","handlers","one","idx","original","handler","eventNames","handlersIsFunction","unbind","push","first","unshift","trigger","e","events","sender","call","splice","compilePart","part","stringPart","split","join","charAt","rest","substring","argumentNameRegExp","encodeRegExp","escapedCurlyRegExp","curlyRegExp","escapedSharpRegExp","sharpRegExp","zeros","pad","number","digits","end","wrapResize","element","autosize","outerWidth","_outerWidth","outerHeight","_outerHeight","wrapper","parent","wrapperStyle","style","is","css","display","position","test","width","height","boxSizing","mozBoxSizing","webkitBoxSizing","destination","deepExtendOne","source","property","propValue","propType","propInit","destProp","ObservableArray","data","LazyObservableArray","DataSource","HierarchicalDataSource","RegExp","ArrayBuffer","HTMLElement","Date","getTime","testRx","agent","rxs","dflt","rx","hasOwnProperty","toCamelCase","str","strMatch","g1","toUpperCase","getComputedStyles","properties","computedStyle","styles","document","defaultView","getComputedStyle","value","getPropertyValue","currentStyle","size","paramName","useWithBlock","render","template","html","compile","parts","settings","argumentName","match","functionBody","Function","_slotCount","floor","Error","format","gap","indent","rep","escapable","meta","toString","quote","string","lastIndex","a","c","charCodeAt","key","holder","k","v","partial","type","mind","toJSON","isFinite","String","valueOf","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Number","Boolean","stringify","replacer","space","dateFormatRegExp","standardFormatRegExp","literalRegExp","commaRegExp","EMPTY","POINT","SHARP","ZERO","EN","objectToString","findCulture","culture","numberFormat","getCulture","current","pattern","decimals","groupSize","percent","symbol","currency","abbr","calendars","standard","days","names","namesAbbr","namesShort","months","AM","PM","patterns","d","D","F","g","G","m","M","s","t","T","u","y","Y","firstDay","twoDigitYearMax","cultureName","calendar","groupInteger","start","integer","integerLength","newGroupSize","decimalIndex","indexOf","groupSizes","shift","reverse","round","precision","negative","toFixed","min","fmt","date","minutes","result","sign","getDate","getDay","getMonth","getFullYear","getHours","getMinutes","getSeconds","getMilliseconds","getTimezoneOffset","abs","formatDate","isCurrency","isPercent","customPrecision","formatAndPrecision","fraction","ch","hasGroup","hasNegativeFormat","sharpIndex","zeroIndex","hasZero","hasSharp","currencyIndex","decimal","literals","replacement","toLocaleString","exec","toLowerCase","toExponential","quoteChar","literal","lastIndexOf","rounded","max","formatNumber","values","index","placeholderFormat","parseInt","_extractFormat","_activeElement","activeElement","documentElement","_round","includeMargin","nonBreakingSpaceRegExp","spaceRegExp","exponentRegExp","shortTimeZoneRegExp","longTimeZoneRegExp","dateRegExp","offsetRegExp","FORMATS_SEQUENCE","STANDARD_FORMATS","outOfRange","designatorPredicate","designator","mapDesignators","designators","map","lowerArray","array","lowerLocalInfo","localInfo","newLocalInfo","parseExact","strict","count","pmHour","UTC","matches","amDesignators","pmDesignators","hoursOffset","minutesOffset","lookAhead","getNumber","rg","substr","valueIdx","getIndexByName","lower","nameLength","subValue","matchLength","matchIdx","checkLiteral","year","month","day","hours","seconds","milliseconds","defaultYear","_lowerDays","_lowerMonths","parseFloat","isNaN","setHours","adjustDST","setFullYear","internalParseDate","formats","tzoffset","offset","timezone","convert","cultureFormats","formatIdx","concat","getDefaultFormats","parseDate","parseExactDate","percentSymbol","_scrollbar","scrollbar","refresh","div","createElement","cssText","innerHTML","body","appendChild","offsetWidth","scrollWidth","removeChild","isRtl","closest","table","tbodyInnerHtml","touch","docStyle","transitions","transforms","elementProto","hasHW3D","WebKitCSSMatrix","cssFlexbox","prefix","hasTransitions","lowPrefix","event","devicePixelRatio","screenWidth","screen","availWidth","innerWidth","screenHeight","availHeight","innerHeight","e$1","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","chrome","webkit","navigator","device","browser","majorVersion","flatVersion","cordova","PhoneGap","appMode","standalone","location","protocol","mobileOS","userAgent","wpDevicePixelRatio","hasNativeScrolling","delayedClick","attr","mouseAndTouchPresent","detectBrowser","edge","safari","opera","msie","mozilla","documentMode","chromiumEdge","detectClipboardAccess","commands","queryCommandSupported","cut","paste","clipboard","zoomLevel","ie11WidthCorrection","docEl","scrollHeight","clientHeight","clientWidth","top","cssClass","docElement","addClass","eventCapture","addEventListener","input","placeholder","propertyChangeEvent","types","setAttribute","cssFloat","stableSort","sorted","field","sort","b","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","selector","nodeList","querySelectorAll","parentNode","matchMedia","pushState","history","hashChange","customElements","mobileChrome","crios","msPointers","MSPointerEvent","pointers","PointerEvent","kineticScrollNeeded","effects","prepareAnimationOptions","duration","complete","teardown","hide","completeCallback","animate","instance","queue","promise","enabled","Element","dequeue","disable","promiseShim","enable","animatedPromise","kendoStop","clearQueue","gotoEnd","stop","kendoAnimate","kendoAddClass","classes","toggleClass","kendoRemoveClass","kendoToggleClass","toggle","ampRegExp","ltRegExp","quoteRegExp","aposRegExp","gtRegExp","eventTarget","touches","originalEvent","changedTouches","elementFromPoint","clientX","clientY","callback","on","mousedown","mouseup","mousemove","mousecancel","click","resize","localUrlRe","widgets","_widgetRegisteredCallbacks","ui","fx","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","ns","getShadows","shadow","radius","blur","left","right","bottom","wrap","percentage","windowOuterWidth","removeClass","hasClass","percentWidth","percentHeight","forceWidth","isScrollable","dataset","className","overflow","scrollLeft","el","mozila","browserVersion","obj","toHyphens","getOffset","positioned","pageYOffset","pageXOffset","parseEffects","add","directions","down","up","in","out","htmlEncode","unescape","decodeURIComponent","error","_","m1","m2","fromCharCode","isLocalUrl","url","expr","expression","safe","members","wrapExpression","getter","setter","accessor","get","set","guid","random","id","chars","roleSelector","role","directiveSelector","directives","selectors","triggeredByInput","tagName","onWidgetRegistered","len","logToConsole","message","console","suppressLog","log","Widget","KendoLicensing","validatePackage","angular","props","dataSource","componentTypes","componentType","defaults","_hasBindingTarget","kendoBindingTarget","_tabindex","TABINDEX","tabindex","removeAttr","setOptions","_clearCssClasses","_setEvents","_applyCssClasses","force","getSize","currentSize","_size","_resize","dimensions","setSize","destroy","removeData","_destroy","_muteAngularRebind","_muteRebind","prop","validFill","widgetName","protoOptions","__proto__","cssProperties","propertyDictionary","_altname","getValidClass","widget","propName","fillMode","fill","_ariaLabel","labelId","inputElm","inputId","labelElm","ariaLabel","ariaLabelledBy","_generateLabelId","newOptions","currentOptions","themeColor","label","DataBoundWidget","dataItems","flatView","_angularItems","cmd","elements","items","dataItem","domElement","offsetHeight","notify","templateRegExp","jsonRegExp","jsonFormatRegExp","dashRegExp","parseOption","option","getAttribute","parseOptions","containmentComparer","contains","resizableWidget","inArray","initWidget","roles","fullPath","widgetKeyRegExp","nodeType","widgetKey","isEmptyObject","rolesFromNamespaces","namespaces","find","addBack","filter","widgetsArray","makeArray","widgetInstance","progress","container","leftRight","webkitCorrection","containerScrollLeft","mask","scrollTop","opacity","loading","prependTo","remove","plugin","register","widgetEntry","args","method","ContainerNullObject","nullObject","MobileWidget","autoApplyNS","kendoDestroy","view","viewElement","viewHasNativeScrolling","useNativeScrolling","eq","focusable","isTabIndexNotNaN","nodeName","disabled","href","pseudos","visible","parents","appLevelNativeScrolling","application","themes","views","touchScroller","useNative","Scroller","kendoMobileScroller","suites","elementData","editorToolbar","onResize","setTimeout","unbindResize","off","attrValue","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","kendoFocusable","MOUSE_EVENTS","MouseEventNormalizer","setupMouseMute","mouseTrap","bustClick","captureMouse","stopPropagation","muteMouse","clearTimeout","mouseTrapTimeoutID","unMuteMouse","eventMap","move","cancel","MSPointerEnter","MSPointerLeave","orig","fix","special","delegateType","bindType","handle","ret","related","relatedTarget","handleObj","origType","getEventMap","eventRegEx","applyEventMap","keyDownHandler","kendoKeydown","preventKendoKeydown","kendoJQuery","context","rootjQuery","pop","search","touchstart","touchend","keyDownCallBack","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","Sun","Mon","Tue","Wed","Thu","Fri","Sat","ruleToDate","rule","targetDay","ourDay","time","cache","getUTCDay","setUTCDate","findRule","utcTime","rules","zone","grep","from","to","zoneAndRule","zones","zoneRules","until","findZone","info","fromOffset","toOffset","diff","tempToOffset","fromLocalOffset","toLocalOffset","toLocalDate","MS_PER_MINUTE","MS_PER_DAY","setDayOfWeek","dir","setDate","dayOfWeek","firstDayOfMonth","calcWeekInYear","weekStartDay","firstWeekInYear","newDate","addDays","moveDateToWeekStart","diffInMS","toInvariantTime","setTime","ignoreDST","difference","today","staticDate","addYear","currentDate","isInDateRange","msValue","msMin","msMax","isInTimeRange","isToday","nextDay","previousDay","toUtcTime","MS_PER_HOUR","lastDayOfMonth","last","timeOffset","weekInYear","prevWeekDate","nextWeekDate","weekNumber","firstDayOfYear","lastDayOfYear","nextYear","previousYear","stripWhitespace","createNodeIterator","iterator","NodeFilter","SHOW_TEXT","node","FILTER_ACCEPT","FILTER_REJECT","nextNode","referenceNode","textContent","trim","childNodes","child","nodeValue","animationFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","animationQueue","queueAnimation","runNextAnimation","parseQueryStringParams","params","paramParts","elementUnderCursor","x","client","wheelDeltaY","jQueryEvent","delta","deltaY","wheelDelta","detail","axis","VERTICAL_AXIS","throttle","delay","timeout","lastExecTime","throttled","elapsed","caret","rangeElement","isPosition","selectionStart","focus","setSelectionRange","selectionEnd","selection","createTextRange","collapse","moveStart","moveEnd","select","rangeDuplicated","duplicate","moveToBookmark","createRange","getBookmark","setEndPoint","text","compileMobileDirective","scope","injector","invoke","$compile","$$phase","$digest","antiForgeryTokens","tokens","csrf_token","csrf_param","cycleForm","form","firstElement","lastElement","keyCode","shiftKey","focusElement","scrollTopPositions","scrollableParents","parentsUntil","setActive","focusNextElement","focussable","getWidgetFocusableElement","nextFocusable","addAttribute","attribute","removeAttribute","toggleAttribute","matchesMedia","mediaQuery","media","_bootstrapToMedia","bootstrapMedia","xs","sm","md","lg","xl","fileGroupMap","audio","video","image","txt","presentation","programming","pdf","config","zip","getFileGroup","extension","withPrefix","fileTypeMap","groups","getFileSizeMessage","pow","selectorFromClasses","themeColorValues","fillValues","shapeValues","sizeValues","roundedValues","positionModeValues","resizeValues","overflowValues","defaultValues","registerCssClass","shorthand","registerCssClasses","arr","fillModeValues","registerValues","j","newValues","currentValue","dict","widgetValues","validValue","widgetProperties","registerPrefix","propertyToCssClassMap","getValidCssClass","whenAll","resolveValues","remaining","deferred","Deferred","failed","rejectContexts","rejectValues","resolveContexts","updateFunc","contexts","notifyWith","done","fail","resolveWith","postToProxy","dataURI","fileName","proxyURL","proxyTarget","action","contentType","base64","appendTo","submit","fileSaver","downloadAttribute","saveAsBlob","blob","atob","Uint8Array","Blob","buffer","msSaveBlob","saveAsDataURI","URL","createObjectURL","download","createEvent","initMouseEvent","dispatchEvent","revokeObjectURL","saveAs","save","forceProxy","proxyModelSetters","observable","forEach","defineProperty","dirty","getSeriesColors","series","colors","item","isElement","HTMLDocument","setDefaults","path","curr","class2type","_i","setScriptKey","scaleProperties","scale","scalex","scaley","scale3d","translateProperties","translate","translatex","translatey","translate3d","hasZoom","zoom","matrix3dRegExp","cssParamsRegExp","translateXRegExp","oldEffectsRegExp","singleEffectRegExp","unitRegExp","transformProps","transform2d","transform2units","rotate","skew","cssPrefix","PX","AUTO","WIDTH","HEIGHT","HIDDEN","ORIGIN","ABORT_ID","OVERFLOW","TRANSLATE","POSITION","COMPLETE_CALLBACK","TRANSITION","TRANSFORM","BACKFACE","PERSPECTIVE","DEFAULT_PERSPECTIVE","TRANSFORM_PERSPECTIVE","transition","vertical","modifier","horizontal","stopQueue","val","animationProperty","transformValue","step","elem","now","curProxy","cur","parseInteger","parseCSS","strip3DTransforms","normalizeCSS","lowerKey","isTransformed","transformation","cssValues","transform","computed","atan2","exclusive","ease","mirror","redirectedEffect","effect","$1","$2","direction","effectBody","timeoutID","oldKeys","stopTransitionCalled","stopTransition","speeds","merge","acc","propertyName","uniqueSort","unique","taskKeys","retainPosition","EffectSet","restore","run","jdx","children","childrenLength","setReverse","addRestoreProperties","prepare","effectName","reset","setup","resolve","restoreCallback","effectClass","effectSet","parsedEffects","capitalize","useTransition","show","multiple","single","isFixed","originalPosition","dX","dY","marginLeft","marginTop","Effect","_direction","_additionalEffects","_reverse","play","additional","_duration","compositeRun","_complete","shouldHide","word","createEffect","definition","opt1","opt2","opt3","theDirection","FOUR_DIRECTIONS","IN_OUT","createToggleEffect","defaultStart","defaultEnd","startValue","_startValue","endValue","_endValue","_shouldHide","startDataValue","divisor","tmp","previous","previousDivisor","slideIn","margin","origin","setLength","oldLength","realLength","TRANSFER_START_STATE","outerBox","box","innerBox","currentScale","fillScale","transformOrigin","CLIPS","ROTATIONS","clipInHalf","_container","rotation","zIndex","_clipInHalf","clip","append","face","_face","temporary","back","temp","reverseDirection","faceClone","backClone","staticPage","turningPage","transformStyle","RESTORE_OVERFLOW","_before","_after","transitionClass","_previous","_transitionClass","beforeTransition","afterTransition","_both","_element","_containerClass","containerClass","completeProxy","isAbsolute","both","Animation","_tickProxy","_tick","_started","tick","onEnd","onCancel","Transition","timePassed","startDate","moveTo","movable","initial","_easeProxy","moveAxis","easeOutExpo","easeOutBack","inner","outer","fitScale","CHANGE","SAME","BROKEN_BACK_NAV","hashStrip","absoluteURL","pathPrefix","host","hashDelimiter","bang","locationHash","stripRoot","root","HistoryAdapter","forward","replaceLocation","PushStateAdapter","navigate","title","replaceState","normalize","pathname","change","normalizeCurrent","fixedUrl","hash","hashBang","fixHash","fixBang","HashAdapter","_id","_interval","setInterval","clearInterval","History","adapter","createAdapter","historyLength","locations","_checkUrl","silent","_navigate","backCalled","decode","newLength","navigatingInExisting","prev","backButtonPressed","INIT","ROUTE_MISSING","BACK","optionalParam","namedParam","splatParam","escapeRegExp","namedParamReplace","optional","stripUrl","Route","route","ignoreCase","routeToRegExp","_callback","queryStringParams","_back","worksWith","Router","routes","_urlChangedProxy","_sameProxy","_backProxy","backProxy","urlChangedProxy","_urlChanged","same","_same","initEventObject","NEWLINE","DOUBLELINE","odataFilters","neq","gt","gte","lt","lte","doesnotcontain","endswith","startswith","isnull","isnotnull","isnullorempty","isnotnullorempty","isempty","isnotempty","odataFiltersVersionFour","mappers","pageSize","page","useVersionFour","toOdataFilter","$filter","orderby","order","$orderby","skip","$skip","take","$top","defaultDataType","read","dataType","useOdataFour","operator","logic","filters","stripMetadata","hex16","createBoundary","createDelimeter","boundary","close","createCommand","transport","httpVerb","command","transportUrl","commandPrefix","getOperationHeader","changeset","changeId","header","processCollection","colection","skipContent","requestBody","getBoundary","collection","content","getOperations","schemas","odata","results","total","transports","jsonp","update","create","parameterMap","$inlinecount","$format","batch","$count","colections","batchURL","headers","updated","destroyed","created","createBatchRequest","collections","ajax","success","response","responses","responseText","changeBody","status","code","marker","jsonModel","responseMarkers","markerIndex","models","passed","parse","parseBatchResponse","XmlDataReader","model","errors","serialize","modelBase","Model","fields","idField","xpathToMember","modelInstance","evaluate","record","_parse","xmlParse","xml","parseDOM","parsedNode","attributes","attributeCount","firstChild","nextSibling","intermediateResult","tree","parseXML","raw","readers","CREATE","READ","UPDATE","DESTROY","SYNC","GET","ERROR","REQUESTSTART","PROGRESS","REQUESTEND","ITEMSLOADED","ITEMLOAD","crud","identity","o","objectKeys","ObservableObject","wrapAll","_loadPromises","_loadedNodes","at","serializeFunctions","json","object","isGroup","_loading","nodes","omitChangeEvent","howMany","thisArg","reduce","reduceRight","every","some","empty","Symbol","_parent","eventHandler","_notifyChange","ownKeys","ignoreObjectKeys","filteredObjectKeys","protoKeys","getPrototypeOf","isPrimitiveType","getOwnPropertyNames","_handlers","uid","shouldSerialize","f","_set","composite","paths","isSetPrevented","isObservableArray","isDataSource","equal","xtype","parsers","boolean","default","_initializers","dirtyFields","_defaultId","fieldName","getFieldByName","editable","accept","isNew","originalName","functionFields","nullable","defaultValue","Comparer","compare","localeCompare","combine","comparers","StableComparer","asc","valueA","valueB","__position","desc","operators","textOp","impl","ignore","accentFoldingFiltering","toLocaleLowerCase","op","getMatchRegexp","esc","doesnotstartwith","doesnotendwith","doesnotmatch","Query","normalizeSort","descriptor","descriptors","sortFields","sorts","sortObject","filterExpr","expressions","fieldFunctions","operatorFunctions","and","or","operatorMap","equals","isequalto","equalto","ne","notequals","isnotequalto","notequalto","notequal","islessthan","lessthan","less","le","islessthanorequalto","lessthanequal","isgreaterthan","greaterthan","greater","isgreaterthanorequalto","greaterthanequal","ge","notsubstringof","normalizeOperator","normalizeFilter","compareDescriptor","f1","f2","normalizeDescriptor","fieldComparer","normalizeGroup","skipItemSorting","aggregates","normalizeGroupWithoutCompare","groupValueComparer","calculateAggregate","accumulator","state","aggr","functionName","aggregate","functions","compareFilters","expr1","expr2","filters1","filters2","toArray","range","inPlace","orderBy","orderByDescending","comparer","compiled","predicate","group","allData","groupPaging","groupAllData","hasSubgroups","itemCount","subgroupCount","groupBy","_sortForGrouping","groupValue","_sortGroups","sum","isNumber","average","isDate","process","groupDescriptorsWithoutSort","customGroupSort","groupDescriptors","anyGroupDescriptorHasCompare","query","groupDescriptorsWithoutCompare","normalizedSort","filterCallback","flatGroups","groupDescriptor","virtual","LocalTransport","RemoteTransport","Cache","parameters","operation","_store","clear","serializeRecords","getters","originalFieldNames","fieldNames","setters","convertRecords","convertGroup","wrapDataAccess","originalFunction","converter","wrapDataAccessBase","store","inmemory","DataReader","schema","dataFunction","_dataAccessFunction","groupsFunction","serializeFunction","serializeGetters","fromName","_wrapDataAccessBase","fillLastGroup","originalGroup","newGroup","currOriginal","currentNew","mergeGroups","dest","indexFunction","groupsLength","indexFn","groupIndex","itemIndex","flattenGroups","wrapGroupItems","eachGroupItems","func","replaceInRanges","ranges","replaceInRange","replaceWithObservable","serverGrouping","viewIndex","indexOfPristineModel","indexOfModel","fieldNameFromModel","convertFilterDescriptorsField","convertDescriptorsField","_map","_prefetch","_data","_pristineData","_ranges","_view","_pristineTotal","_destroyed","_pageSize","_page","_sort","_sortFields","_filter","_group","_aggregate","_total","_groupPaging","_groupsState","_shouldDetachObservableParents","Transport","pushCreate","_pushCreate","pushUpdate","_pushUpdate","pushDestroy","_pushDestroy","offlineStorage","_storage","getItem","localStorage","setItem","reader","_detachObservableParents","_observe","_online","serverSorting","serverPaging","serverFiltering","serverAggregates","inPlaceSort","online","sync","offlineData","_isGrouped","_isServerGrouped","_isServerGroupPaged","_isGroupPaged","_push","_readData","_flatData","useRanges","getByUid","_getByUid","_storeData","_addRange","_process","_observeView","insert","_createNewModel","_wrapInEmptyGroup","_insertModelInRange","pushInsert","rangeSpan","_getCurrentRangeSpan","pushed","autoSync","pristine","pristineData","_updatePristineForModel","_removeItems","removePristine","shouldRemovePristine","found","_eachItem","_removePristineForModel","pushMove","_moveItems","moved","hasGroups","_pushInDestroyed","removeModel","_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","_serverGroupsTotal","_aggregateResult","itemIds","_skip","endless","_changeHandler","updatePristine","timestamp","_timeStamp","outerStart","outerEnd","_sortRanges","_groupsFlat","_appendToGroupsFlat","_updateOuterRangesLength","_getGroupByUid","xhr","errorThrown","_requestInProgress","_pending","_shouldWrap","_updateTotalForAction","_calculateAggregates","_take","currentRangeStart","_clearEmptyGroups","_queryProcess","dataToAggregate","_setView","_setFilterTotal","_mergeState","_currentRangeStart","moreItemsCount","_hasExpandedSubGroups","_findGroupedRange","itemsLength","groupCount","itemsToSkip","taken","_fetchGroupItems","_fetchingGroupItems","skipped","includeParents","excludeHeader","currentItems","_expandedSubGroupItemsCount","includeCurrentItems","subGroup","endSpecified","groupItemsSkip","firstItem","lastItem","expandedSubGroupItemsCount","groupItemCount","getGroupItems","notFetched","subgroups","_composeItemsFilter","findSubgroups","_timeout","_groupItemsSuccessHandler","totalField","totalCount","_updateRangePristineData","countAdded","_currentRequestTimeStamp","_skipRequestsInProgress","indexOfCurrentGroup","currentGroup","dataLength","indexes","rangesLength","_containsSubGroup","_cloneGroup","subgroup","currentSubGroup","filterTotal","setDefaultValue","fetch","_query","next","totalPages","_pageableQueryOptions","getGroupsFlat","groupsTotal","includeExpanded","_calculateGroupsTotal","itemsField","ignoreState","_groupsTotal","countGroupRange","_emptyAggregates","ceil","inRange","_findRange","lastRange","firstItemUid","enableRequestsInProgress","pageSkip","_processRangeData","_originalPageSkip","_originalSize","_adjustPageSkip","_groupRangeExists","_rangeExists","prefetch","skipIdx","takeIdx","startIndex","endIndex","rangeData","rangeEnd","processed","flatData","prevRangeEnd","remote","groupMapOptions","isGroupPaged","startField","endField","_mergeGroups","_getRangesMismatch","mismatch","prevGroup","eventData","_omitPrefetch","paging","sorting","filtering","_prefetchSuccessHandler","_multiplePrefetch","prevRange","_getPrevRange","_getNextRange","availableItemsCount","_removeModelFromRange","_updateRangesLength","mismatchFound","mismatchLength","lengthDifference","rangeLength","transportOptions","fieldIndex","cells","cell","tbody","tBodies","rows","fieldCount","inferTable","optgroup","firstField","secondField","specified","inferSelect","Node","hasChildren","childrenField","childrenOptions","hasChildrenObject","_childrenOptions","_initChildren","_loaded","_updateChildrenField","loaded","level","_childrenLoaded","load","_matchFilter","dataMethod","_attachBubbleHandlers","_hierarchicalFilter","_childrenLoading","isLoading","_markHierarchicalQuery","_updateHierarchicalFilter","_find","inferList","list","textChild","textField","urlField","spriteCssClassField","imageUrlField","_dataSource","Buffer","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","BatchBuffer","batchSize","batchBuffer","endreached","prefetching","prefetched","binders","VALUE","SOURCE","EVENTS","CHECKED","deleteExpando","Binding","dependencies","_access","_parents","dependency","currentSource","EventBinding","TemplateBinding","Binder","bindings","binding","TypedBinder","parsedValue","_parseValue","dataSourceBinding","bindingName","_dataBinding","dataBinding","_dataBound","dataBound","_itemChange","itemChange","bindElement","_ns","removedItems","unbindElementTree","all","addedItems","hds","addedDataItems","multiselect","Select","MultiSelect","DropDownTree","treeview","retrievePrimitiveValues","dataValueField","readonly","dataFormat","invisible","valueUpdate","_initChange","autoBind","valueField","cloneNode","reference","insertBefore","unbindElementChildren","checked","selectedIndex","selected","valueIndex","valuePrimitive","sourceValue","optionIndex","optionValue","check","_range","floatingLabel","_valueIsObservableObject","_valueIsObservableArray","_source","valueLength","sourceItem","dataTextField","isObservableObject","cascadeFrom","listView","bound","_preselect","dropdowntree","oldValues","selectedNode","nonPrimitiveValues","_isMultipleSelection","_getAllChecked","removeIndex","newValue","old","arraySplice","selectedValue","gantt","_isBound","scheduler","grid","badge","addLength","shifted","shiftedLength","BindingTarget","toDestroy","hasValue","hasSource","hasEvents","hasChecked","hasCss","widgetBinding","WidgetBindingTarget","specificBinders","applyBinding","binder","keyValueRegExp","whiteSpaceRegExp","parseBindings","token","colonIndex","createBindings","childrenCopy","unbindElement","bindingTargetForRole","dom","destroyWidget","bindingTarget","destroyWidgets","namespace","observableHierarchy","recursiveRead","TRANSITION_START","TRANSITION_END","SHOW","HIDE","sizzleErrorRegExp","bodyRegExp","SHOW_START","SAME_VIEW_REQUESTED","VIEW_SHOW","VIEW_TYPE_DETERMINED","AFTER","classNames","View","renderOnInit","_createElement","wrapInSections","_renderSections","_wrap","_evalTemplate","evalTemplate","_useWithBlock","_fragments","detachOnHide","detachOnDestroy","notInitialized","_eachFragment","ViewClone","triggerBeforeShow","triggerBeforeHide","showStart","showEnd","hideEnd","detach","purge","fragments","methodName","getElementById","contents","replaceWith","_wrapper","_createContent","_createHeader","_createFooter","contentSelector","contentElement","footer","Layout","containers","_createContainer","showIn","ViewContainer","Fragment","attach","transitionRegExp","running","after","locationID","theTransition","transitionData","parseTransition","ViewEngine","sandbox","_hideViews","rootView","layouts","viewContainer","showView","remoteViewURLPrefix","_findViewElement","reload","_createView","urlPath","wrapInner","_locate","$angular","_findViewElementById","_createSpaView","_createMobileView","defaultTransition","loader","getLayout","getLayoutProxy","modelScope","viewOptions","isJQueryPromise","isNativePromise","catch","signalr","hub","callbacks","_crud","server","OS","invalidZeroEvents","DEFAULT_MIN_HOLD","DEFAULT_THRESHOLD","PRESS","HOLD","SELECT","START","MOVE","CANCEL","TAP","DOUBLETAP","RELEASE","GESTURECHANGE","GESTUREEND","GESTURETAP","THRESHOLD","api","mouse","pointer","ENABLE_GLOBAL_SURFACE","touchDelta","touch1","touch2","x1","y1","x2","y2","dx","dy","center","distance","sqrt","getTouches","currentTarget","identifier","pointerId","TouchAxis","_updateLocationData","startLocation","velocity","timeStamp","timeDelta","initialDelta","Touch","userEvents","touchInfo","useClickAsTap","threshold","initialTouch","pressEvent","_clicks","supportDoubleTap","_moved","_finished","press","_holdTimeout","_hold","minHold","_trigger","_tap","_clickTimeout","preventMove","_shouldNotMove","_withinIgnoreThreshold","UserEvents","dispose","_start","endTime","activeTouches","isMoved","startTime","xDelta","yDelta","withEachUpEvent","downEvents","_maxTouches","multiTouch","allowSelection","captureUpIfMoved","fastTap","eventNS","surface","global","ownerDocument","pressed","defaultAction","touchAction","preventDragEvent","surfaceElement","preventIfMovingProxy","preventIfMoving","_isMoved","removeEventListener","_disposeAll","capture","_isMultiTouch","_apiCall","_maxTouchesReached","_select","which","_move","_eachTouch","_end","_click","pageX","pageY","matchingTouch","defaultThreshold","lastDropTarget","$window","draggables","dropTargets","dropAreas","KEYUP","DRAGSTART","DRAG","DRAGEND","DRAGCANCEL","HINTDESTROYED","DRAGENTER","DRAGLEAVE","DROP","numericCssPropery","within","containerBoundaries","minX","minY","TapCapture","_press","_release","attachEvent","captureNext","cancelCapture","PaneDimension","forcedEnabled","measure","scrollSize","makeVirtual","_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","previousGesture","previousCenter","scaleDelta","offsetX","offsetY","scaleWith","TRANSFORM_STYLE","Movable","webkitTransformOrigin","_saveCoordinates","by","scaleTo","newCoordinates","destroyDroppable","groupName","droppables","DropTarget","draggable","dropTarget","_over","_out","_drop","dropped","destroyGroup","_cache","DropTargetArea","Draggable","_activated","hold","_drag","_cancel","_afterEndHandler","_afterEnd","_captureEscape","cursorOffset","holdToDrag","autoScroll","cancelHold","_updateHint","boundaries","hintOffset","hint","_shouldIgnoreTarget","ignoreSelector","currentTargetOffset","scopeTarget","scopeFrom","cursorElement","_elementUnderCursor","_cursorElement","_scrollableParent","findScrollableParent","_lastEvent","_processMovement","autoScrollVelocity","scrollableViewPort","_scrollCompenstation","_scrollVelocity","_scrollInterval","_autoScroll","_withDropTarget","targetElement","compensation","yIsScrollable","xIsScrollable","isRootNode","scrollableRoot","yInBounds","xInBounds","initialTarget","targets","areas","theTarget","theFilter","targetLen","areaLen","checkTarget","mouseX","mouseY","rect","AUTO_SCROLL_AREA","utils","RELEASECLASS","REFRESHCLASS","SCROLL","ZoomSnapBack","tapCapture","DragInertia","freeze","_moveTo","paneAxis","_snapBack","velocityMultiplier","friction","snapBack","AnimatedScroller","_updateCoordinates","setCoordinates","setCallback","ScrollBar","controlsId","elementSize","scrollMovable","alwaysVisible","paneSize","sizeRatio","_ariaValue","visibility","_native","prepend","scrollElement","fixedContainer","avoidScrolling","velocityX","velocityY","horizontalSwipe","verticalSwipe","pane","zoomSnapBack","animatedScroller","scrollTo","mousewheelScrolling","_wheelScroll","pulled","_initAxis","_wheelEnd","_wheel","_wheelY","pullToRefresh","_initPullToRefresh","ctrlKey","_wheelTimeout","pullOffset","visibleScrollHints","pullTemplate","releaseTemplate","refreshTemplate","contentResized","_scale","zoomOut","animatedScrollTo","pullHandled","refreshHint","hintContainer","yinertia","xinertia","_paneChange","_dragEnd","scrollBar","elementId","OPEN","CLOSE","DEACTIVATE","ACTIVATE","CENTER","TOP","BOTTOM","ABSOLUTE","BODY","LOCATION","VISIBLE","EFFECTS","ACTIVE","ACTIVEBORDER","ACTIVEBORDERREGEXP","ACTIVECHILDREN","DOCUMENT_ELEMENT","WINDOW","NS","Popup","parentPopup","collisions","collision","downEvent","anchor","_hovered","scrollArea","animation","open","_animationClose","_mousedownProxy","_mousedown","_resizeProxy","toggleTarget","toggleEvent","viewport","copyAnchorStyles","modal","adjustSize","omitOriginOffsets","_hideDirClass","_closing","_toggleResize","fixed","listbox","flipped","_position","_openAnimation","_showDirClass","_location","dirClass","skipEffects","openEffects","closeEffects","popup","ev","_resizeTimeout","_scrollableParents","_fit","viewPortSize","output","_flip","anchorSize","boxSize","siblingContainer","parentZIndex","viewportOffset","viewportWidth","viewportHeight","isWindow","origins","positions","siblings","_align","pos","offsetParent","offsets","flipPos","elementHeight","wrapperHeight","appendToOffset","verticalOrigin","horizontalOrigin","verticalPosition","horizontalPosition","anchorOffset","anchorWidth","anchorHeight","tabKeyTrapNS","TabKeyTrap","trap","_keepInTrap","removeTrap","shouldTrap","_focusableElements","sortedElements","_sortFocusableElements","_nextFocusable","_focus","tabIndex","attrName","_haveSelectionRange","contentWindow","elementType","DOCUMENT","ARIAIDSUFFIX","DESCRIBEDBY","CONTENTLOAD","KCONTENTFRAME","IFRAMETEMPLATE","POSITIONS","REVERSE","DIRCLASSES","DIMENSIONS","restoreTitle","restoreTitleAttributeForElement","saveTitleAttributeForElement","saveTitleAttributes","TooltipBase","_isShownOnMouseEnter","_showOn","showOn","_keydown","showAfter","hideAfter","callout","_saveTitle","_show","_isShownOnClick","_isShownOnFocus","_positionCallout","elementOffset","offsetAmount","_offset","arrow","arrowWidth","isTopLeft","isFlipped","marginRule","_addDescribedBy","ariaId","describedBy","_removeDescribedBy","arrayAttr","finalArray","finalDescribedbyAttr","tooltipId","currentDescribedBy","_openPopup","Tooltip","_documentKeyDownHandler","_documentKeyDown","_mouseenter","autoHide","_mouseleave","_blur","_appendContent","iframe","contentOptions","showIframe","_ajaxRequest","_initPopup","activate","_closeButtonClick","_closePopup","util","createPromise","promiseAll","extendStatic","namedColors","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","matchNamedColor","color","colorNames","regexp","BaseColor","toHSV","toRGB","toHex","toBytes","toCss","toCssRgba","rgb","toDisplay","parseColor","other","NaN","c1","c2","r","Bytes","RGB","h","ref","HSV","toHSL","l","HSL","hex","alpha","n","p","q","hue2rgb","alphaFromHex","Color","this$1$1","resolvedColor","resolveColor","formatRegex","re","processor","channels","normalizeByte","padDigit","brightness","percBrightness","isDark","fromBytes","fromRGB","fromHSV","fromHSL","LRUCache","_length","put","entry","_head","_tail","newer","older","REPLACE_REGEX","normalizeText","objectKey","hashKey","defaultMeasureBox","DEFAULT_OPTIONS","baselineMarkerSize","TextMetrics","baseline","cacheKey","cachedResult","measureBox","baselineMarker","_baselineMarker","textStr","offsetTop","measureText","kendoDrawingUtil","kendoUtil","supportBrowser","HasObservers","Class$$1","observers","_observers","addObserver","removeObserver","_suspended","observer","optionsChange","geometryChange","suspend","resume","_observerField","append$1$1","second","arabicToRoman","roman","defined","defId","definitionId","DEG_TO_RAD","PI","MAX_NUM","MAX_VALUE","MIN_NUM","deg","radians","KEY_STR","encodeBase64","utfInput","hi","low","encodeUTF8","chr1","chr2","chr3","enc1","enc2","enc3","enc4","eventCoordinates","eventElement","isTransparent","limitValue","mergeSort","cmp","ai","bi","rad","degrees","power","valueOrDefault","bindEvents","getBoundingClientRect","clientTop","clientLeft","elementStyles","stylesArray","getPixels","size$1","unbindEvents","elementPadding","paddingLeft","paddingTop","Matrix","multiplyCopy","matrix","invert","det","separator","unit","angle","cos","sin","scaleX","scaleY","IDENTITY","matrixRegexp","transformMatrix","matrixString","parseMatrix","elementScale","parentElement","parentMatrix","toString$1","OptionsStore","HasObservers$$1","parentObj","_clear","wrapped","setAccessor","getAccessor","withAccessors","TBase","capitalized","defineAccessors","toMatrix","Point","superclass","staticAccessors","originPoint","translateWith","point","scaleCopy","transformCopy","distanceTo","doRound","arg0","arg1","maxX","maxY","minPoint","maxPoint","defineProperties","Size","Rect","cornerRadius","setOrigin","setCornerRadius","getOrigin","getCornerRadius","topLeft","bottomRight","topRight","bottomLeft","bbox","tl","tr","br","bl","fromPoints","expand","expandCopy","containsPoint","_isOnPath","rectOuter","rectInner","union","intersect","rect1","rect2","Transformation","_matrix","_optionsChange","multiply","transform$1","Element$1","prototypeAccessors","parentTransform","currentTransform","combinedMatrix","elementMatrix","clippedBBox","_clippedBBox","transformedPoint","_hasFill","_containsPoint","_hasStroke","stroke","ellipseExtremeAngles","ry","extremeX","extremeY","PI_DIV_2","Circle$2","Circle","setCenter","setRadius","getCenter","pointAt","_pointAt","extremeAngles","currentPointX","currentPointY","currentPoint","pointDistance","paintable","anonymous","newFill","IDENTITY_MATRIX_HASH","measurable","matrixHash","_bboxCache","_matrixHash","_bbox","strokeWidth","geometryAccessor","withGeometry","defineGeometryAccessors","geometry","rawBBox","_geometry","PRECISION","close$1","tolerance","closeOrLess","pow$1","Arc$2","Arc","radiusX","radiusY","startAngle","endAngle","anticlockwise","xRotation","radian","curvePoints","interval","_arcInterval","intervalAngle","subIntervalsCount","subIntervalAngle","currentAngle","nextAngle","points","_intervalCurvePoints","cp1","cp2","p2","endPoint","currentAngleX","bboxStartAngle","currentAngleY","oldStart","p1","p1Derivative","_derivativeAt","p2Derivative","angleRad","pointRadius","startPoint","intersection","p0","p3","s1x","s2x","s1y","s2y","nx","ny","lineIntersection","calculateAngle","inAngleRange","largeArc","swipe","arcParameters","cosine","sine","xT","yT","xt2","yt2","rx2","ry2","constT","cxT","cyT","cx","cy","uX","uY","vX","vY","acos","angleCosine","signEndAngle","normalizeArcParameters","ElementsArray","_splice","_add","_remove","_clearObserver","_setObserver","GeometryElementsArray","ElementsArray$$1","isOutOfEndPoint","controlPoint","calculateCurveAt","t1","toCubicPolynomial","ComplexNumber","real","img","cNumber","addConstant","negate","multiplyConstant","nthRoot","rad$$1","nthR","isReal","numberSign$1","solveCubicEquation","squareRoot","solveQuadraticEquation","y3","z1","z2","Q","b3a","hasRootsInRange","rootField","polynomial","roots","lineIntersectionsCount","intersects","pointAccessor","withPoints","definePointAccessors","Segment","controlIn","controlOut","bboxTo","toSegment","segmentAnchor","toSegmentAnchor","_curveBoundingBox","_lineBoundingBox","extremesX","_curveExtremesFor","extremesY","xLimits","arrayLimits","yLimits","extremes","_curveExtremes","x3","x4","t2","_intersectionsTo","segment","intersectionsCount","rayIntersection","curveIntersectionsCount","_isOnCurveTo","endSegment","p4","rotatedPoints","_isOnLineTo","_isOnPathTo","X","removeDuplicates","lineFunction","getControlPoints","tangent","xField","yField","restrict","switchOrientation","calculateFunction","isLine","getTangent","monotonic","isMonotonicByField","invertAxis","numberSign","secondCP","secondControlPoint","oldXField","firstCP","firstControlPoint","restrictControlPoint","cp","xValue","yValue","ShapeMap","isRelative","lineTo","curveTo","toLineParamaters","arcTo","lastControlIn","previousCommand","segments","reflectionPoint","cubicControlPoints","quadraticToCubicControlPoints","isVertical","insertPosition","third","scaledPoint","SEGMENT_REGEX","SPLIT_REGEX","parsePath","pathInstance","closePath","parseParameters","elementsBoundingBox","applyTransform","boundingBox","elementBoundingBox","elementsClippedBoundingBox","SPACE","Path","lineJoin","point$$1","lastSegment","arc","_addArcSegments","closed","segmentStart","segmentEnd","currentType","print","pathWidth","segmentBox","MultiPath","fromRect","curveFromPoints","pointsIn","initialControlPoint","lastControlPoint","controlPoints","cp0","controlPoints$1","controlPoints$2","tangent$2","pointsToCurve","fromArc","prototypeAccessors$1","toPath","Text","font","Image$1","Image","_rect","traversable","traverse","Group","childrenChange","_reparent","insertAt","removeAt","newParent","translateToPoint","transofrm","alignStart","align","sizeField","alignStartReverse","alignContent","justifyContent","alignItems","spacing","orientation","lineSpacing","revers","forEachReverse","Group$$1","_fieldMap","_initMap","fieldMap","groupsSizeField","groupAxis","groupsAxis","justifyAlign","reflow","elementStart","groupBox","_initGroups","groupsSize","ref$1","groupOrigin","elementOrigin","groupStart","arrangeElements","groupIdx","lineSize","bboxes","scaledStart","newStart","_newGroup","addGroup","_addToGroup","Rect$2","Rect$$1","alignElements","alignment","stackElements","stackAxis","otherAxis","previousBBox","createStackElements","wrapElements","stacks","maxSize","stack","stackSize","addElementToStack","getStacks","startElement","elementIdx","StopsArray","optionsAccessor","GradientStop","arg","defineOptionsAccessors","Gradient","stops","_createStops","_userSpace","userSpace","addStop","removeStop","LinearGradient","RadialGradient","_radius","_fallbackFill","fallbackFill","instance$1","easingFunctions","swing","linear","easeOutElastic","asin","AnimationFactory","_items","_options","easing","finish","abort","loop","_stopped","wallTime","easingPosition","PathParser","BaseNode","srcElement","observe","removeSelf","invalidate","Surface$2","Observable$$1","Surface","_kendoExportVisual","exportVisual","_handler","_mousemove","_visual","_enableTracking","draw","domNode","_kendoNode","suspendTracking","_suspendedTracking","resumeTracking","_elementOffset","padding","_surfacePoint","coord","inverseTransform","renderAttr","renderAllAttr","attrs","renderStyle","NODE_MAP","SVG_NS","NONE","renderSVG","svg","testContainer","hasParser","DOMParser","namespaceURI","chartDoc","parseFromString","importedDoc","adoptNode","renderSVG$1","DefinitionMap","isDefinition","BaseNode$$1","definitions","clearDefinitions","childNode","createDefinitions","attachTo","setElement","childElement","renderChildren","updateDefinition","allAttr","allCss","mapTransform","renderTransform","transformChange","mapStyle","cursor","renderOpacity","renderId","hasDefinitions","definitionChange","refUrl","renderDefinitions","mapDefinitions","skipBaseHref","baseHref","baseUrl","getElementsByTagName","hashIndex","GradientStopNode","Node$$1","renderOffset","GradientNode","loadStops","stopNode","mapCoordinates","renderCoordinates","mapSpace","LinearGradientNode","GradientNode$$1","RadialGradientNode","ClipNode","DefinitionNode","definitionMap","addDefinitions","removeDefinitions","createDefinition","addDefinition","mapItem","removeDefinition","RootNode","defs","firstElementChild","DASH_ARRAYS","dot","dash","longdash","dashdot","longdashdot","longdashdotdot","SOLID","BUTT","ATTRIBUTE_MAP","PathNode","renderData","mapFill","mapStroke","undefined","renderLinecap","dashType","renderDashType","renderStroke","dashArray","lineCap","renderFill","ArcNode","PathNode$$1","CircleNode","GroupNode","ImageNode","mapPosition","mapSource","renderPosition","encode","renderSource","MultiPathNode","RectNode","ENTITY_REGEX","decodeEntities","innerText","TextNode","setY","renderContent","renderTextAnchor","rtl","Surface$3","BaseSurface","_root","_template","_rootElement","ctm","getScreenCTM","alignToScreen","mouseover","mouseout","viewBox","visual","NODE_MAP$2","renderPath","ctx","prevOut","bezierCurveTo","Node$2","initClip","clearClip","setClip","beginPath","setTransform","loadElements","cors","setOpacity","globalAlpha","opactity","GroupNode$2","renderTo","RootNode$2","canvas","getContext","invalidateHandler","_invalidate","_rescale","_devicePixelRatio","fixedScale","clearRect","QuadRoot","shapes","shape","_quadNode","pointShapes","QuadNode","QuadRoot$$1","inBounds","nodeRect","nodeBottomRight","inserted","halfWidth","halfHeight","ROOT_SIZE","ShapesQuadTree","initRoots","rootMap","rootElements","pointShape","sectorRoot","assignZindex","zIndexComparer","levelWeight","_zIndex","bboxChange","_insertShape","elementsArray","_insert","sectors","getSectors","inRoot","bottomX","bottomY","SurfaceCursor","_resetCursor","_shapeCursor","_current","_defaultCursor","_getCursor","_setCursor","PathNode$2","renderPoints","setLineDash","setLineCap","setLineJoin","setFill","setStroke","hasFill","setGradientFill","fillStyle","gradient","createLinearGradient","createRadialGradient","addColorStop","addGradientStops","strokeStyle","lineWidth","mozDash","webkitLineDash","ArcNode$2","CircleNode$2","ImageNode$2","onLoad","onError","crossOrigin","onload","onerror","drawImage","MultiPathNode$2","RectNode$2","TextNode$2","textAlign","fillText","strokeText","instance$2","support$1","Surface$4","_mouseTrackHandler","_trackMouse","_searchTree","_cursor","rootElement","loadingStates","resolveDataURL","toDataURL","currentShape","_currentShape","hasDocument","SurfaceFactory","implementation","hasFeature","preferred","exportGroup","rootGroup","exportRoot","svg$1","slice$1$1","thing","KENDO_PSEUDO_ELEMENT","IMAGE_CACHE","nodeInfo","microsoft","TextRect","Text$$1","_pdfRect","setCSS","cloneNodes","$el","$clone","dive","canvases","canvas$$1","parseBackgroundImage","tok_linear_gradient","tok_percent","tok_length","tok_keyword","tok_angle","tok_whitespace","tok_popen","tok_pclose","tok_comma","tok_url","tok_content","cache1","cache2","tok","skip_ws","read_stop","to1","to2","num","parseAngle","read_linear_gradient","read_url","splitProperty","last$$1","in_paren","in_string","looking_at","getFontURL","getFontHeight","getFontFaces","doc","styleSheets","doStylesheet","ss","cssRules","ex","styleSheet","family","bold","italic","findFonts","addRule","addRules","incCounter","inc","resetCounter","doCounters","def","updateCounters","counterReset","counterIncrement","parseColor$1","whenImagesAreActuallyLoaded","pending","images","cacheImages","urls","getComputedStyle$1","bg","alphaNumeral","pushNodeInfo","decoration","createsStackingContext","_stackingContext","popNodeInfo","updateClipbox","_clipbox","pseudoElt","defa","pleaseSetPropertyValue","important","setProperty","getBorder","side","saveStyle","getBorderRadius","sanitizeRadius","getContentBox","wt","wr","wb","wl","radiansToDegrees","setTransform$1","setClipping","clipPath","addArcToPath","adjustBorderRadiusForBox","rTL","rTR","rBR","rBL","tl_x","tl_y","tr_x","tr_y","br_x","br_y","bl_x","bl_y","elementRoundBox","bt","bb","pt","pr","pb","pl","roundBox","rTL0","rTR0","rBR0","rBL0","formatCounter","evalPseudoElementContent","displayCounter","getAllCounters","getCounter","getCssText","_renderWithPseudoElements","fake","pseudo","saveClass","_renderElement","kind","place","psel","backgroundColor","textOverflow","saveTextOverflow","backgroundImage","backgroundRepeat","backgroundPosition","backgroundOrigin","backgroundSize","boxes","innerbox","getClientRects","tableBorderLeft","tableBorderTop","tableBox","firstCellBox","adjustBoxes","drawOneBox","_avoidLinks","selectNodeContents","_pdfLink","listStyleType","listStylePosition","_drawBullet","bullet","renderElement","elementIndex","fontSize","lineHeight","paddingRight","fontFamily","disc","circle","square","drawBullet","clipit","isFormField","exportDOMVisual","wrap$$1","maybeRenderWidget","renderContents","drawEdge","Wtop","Wleft","Wright","rl","rr","transform$$1","drawRoundCorner","ri","drawOneBackground","background","drawBackgroundImage","pxlen","scaledAngle","atan","implicit","img_width","img_height","renderBG","aspect_ratio","orgBox","rewX","rewY","repeatX","isFirst","isLast","drawBackground","shouldDrawLeft","shouldDrawRight","inv","renderImage","zIndexSort","sa","sb","za","zb","pa","renderFormField","tag","renderCheckbox","whiteSpace","selectedOptions","getSelectedOption","serializer","XMLSerializer","serializeToString","svg$$1","serializeSVG","floats","renderText","floating","cb","isJustified","columnCount","textTransform","estimateLineLength","prevLineBottom","underline","lineThrough","overline","hasDecoration","doChunk","selectNode","line","ypos","actuallyGetRangeBoundingRect","rectangles","Infinity","origStart","setStart","setEnd","findEOL","eol","startOffset","cc","drawText","getTransform","main","_dom_zIndex","groupInStackingContext","mmul","a1","b1","d1","e1","a2","b2","d2","exportImage","surfaceOptions","exportSVG","vAlign","vStack","vWrap","fit","rectSize","drawDOM","defineFont","doOne","cls","avoidLinks","classList","forceBreak","forcePageBreak","hasPaperSize","paperSize","paperOptions","getPaperOptions","pageWidth","pageHeight","hasMargin","multiPage","_ignoreMargin","makeTemplate","pages","_destructive","adjust","tfoot","ol","li","beforePageBreak","doPageBreak","splitElement","makePage","pageNum","keepTogether","tableLayout","bottomPadding","bottomBorder","saveAdjust","breakAtElement","fall","fallsOnMargin","splitText","firstInParent","colgroup","thead","gridHead","querySelector","repeatHeaders","setStartBefore","setEndBefore","extractContents","preventBulletOnListItem","pageClassName","available","nextnode","findEOP","endOffset","handlePageBreaks","canceled","SurfaceTooltip","_tooltipOptions","popupOptions","_openPopupHandler","_bindEvents","hideDelay","_showHandler","_showEvent","_surfaceLeaveHandler","_surfaceLeave","_mouseleaveHandler","_mousemoveHandler","_hideClick","_tooltipLeave","getPopup","shared","_tooltipShape","tooltip","_updateContent","tooltipOffset","_instance","surfaceOffset","_showTimeout","_autoHide","_measure","_closeButton","_popupRelatedTarget","DrawingSurface","_triggerInstanceHandler","_triggerInstanceEvent","_bindHandler","hideTooltip","_tooltip","showTooltip","geometryTransform","__common_getter_js","ARC","AXIS_LABEL_CLICK","BLACK","CIRCLE","CROSS","DATE","DEFAULT_FONT","DEFAULT_PRECISION","FORMAT_REGEX","INSIDE","MIN_VALUE","NOTE_CLICK","NOTE_HOVER","NOTE_LEAVE","OUTSIDE","ROUNDED_RECT","TRIANGLE","WHITE","constants","COORD_PRECISION","DEFAULT_HEIGHT","DEFAULT_WIDTH","HIGHLIGHT_ZINDEX","DEFAULT_SERIES_OPACITY","SPACE_REGEX","alignPathToPixel","clockwise","angle1","angle2","isString","isObject","styleValue","SIZE_STYLES_REGEX","isSizeField","getSpacing","defaultSpacing","TemplateService","getTemplate","userImplementation","HashMap","_key","TRIGGER","InstanceObserver","handlerMap","callObserver","fnName","requiresHandlers","FontLoader","setDefaultOptions","sparseArrayLimits","fetchFonts","fonts","depth","loadFonts","Promise","preloadFonts","DELETED","LegacySet","_index","_values","has","delete","SetWrapper","Set","autoMajorUnit","relativeValue","theta","cosT","sinT","onCircle","Box","targetBox","wrapPoint","arrayPoint","snapTo","alignTo","targetCenter","shrink","dw","dh","unpad","getHash","overlaps","r1","rotatePoint","r2","r3","r4","toRect","hasSize","sizeFunc","Ring","innerRadius","middle","newRadius","radianAngle","ax","ay","adjacentBox","sector","midAndle","midPoint","hw","hh","ca","vector","startVector","endVector","dist","getBBox","angles","allAngles","numericComparer","startAngleIndex","endAngleIndex","Sector","ShapeBuilder","createRing","innerEnd","ChartElement","initUserOptions","currentChild","getRoot","getSender","service","getService","chartService","translateChildren","childrenCount","renderVisual","createVisual","addVisual","createAnimation","renderComplete","chartElement","appendVisual","childVisual","noclip","clipRoot","stackRoot","stackVisual","isStackRoot","visuals","sibling","matched","hasHighlight","highlight","createHighlight","toggleHighlight","customVisual","_highlight","highlightOptions","highlightVisualArgs","category","runningTotal","createGradientOverlay","gradientOptions","overlay","createGradient","supportsPointInactiveOpacity","BoxElement","shrinkToFit","hasSetSize","borderWidth","border","reflowPaddingBox","paddingBox","contentBox","hasBox","visualStyle","ShapeElement","pointData","getElement","borderRadius","visualOptions","RADIAL","GRADIENTS","glass","sharpBevel","roundedBevel","roundedGlass","supportVML","sharpGlass","bubbleShadow","boxDiff","RootElement","rootOptions","gradients","currentBox","createBackground","drawingGradient","hashCode","usedSpace","currentStops","currentStop","innerRadialStops","cleanGradients","FloatElement","_initDirection","elementAxis","groupSizeField","elementSizeField","groupSpacing","elementSpacing","vSpacing","reflowChildren","groupOptions","maxGroupElementsSize","groupsCount","groupsStart","groupElements","groupElementsCount","elementSize$$1","groupElementStart","elementBox","groupElementsSize","DrawingText","rectToBox","ROWS_SPLIT_REGEX","TextBox","_initContainer","_autoReflow","floatElement","textOptions","rowIdx","visualFn","_boxReflow","visualBox","visualContext","normalBox","rotatedBox","rotationTransform","getDefaultVisual","boxCenter","Title","_textBox","collapseVerticalMargins","prevBox","buildTitle","defaultOptions","titleOptions","orderTitles","titles","AxisLabel","alignRotation","rotationMatrix","rotationOrigin","alignAxis","distanceAxis","axisAnchor","alignEnd","distanceLeft","distanceRight","alignCenter","Note","icon","childAlias","noteTemplate","auto","aliasFor","wrapperBox","lineStart","linePoints","createLine","defaultVisual","eventArgs","over","current$1","IntlService","FORMAT_REPLACE_REGEX","FormatService","intlService","_intlService","formatString","intl","localeAuto","locale","current$2","ChartService","chart","isPannable","pannable","lock","DomEventsBuilder","services","createAxisTick","tickOptions","tickX","tickY","createAxisGridLine","gridLine","lineEnd","Axis","labels","majorTickSize","minorTickSize","minorTicks","minorTickType","majorTicks","majorTickType","initFields","_deferLabels","createLabels","createTitle","createNotes","labelsRange","labelsCount","normalizeLabelRotation","labelOptions","clearLabels","autoRotateLabels","labelContext","createAxisLabel","clearTitle","lineBox","axisX","axisY","visualSize","notes","parseNoteValue","note","createPlotBands","gridLinesVisual","gridLines","_gridLines","createTicks","lineGroup","majorUnit","tickLineOptions","tickPositions","skipUnit","getMajorTickPositions","getMinorTickPositions","minorUnit","_alignLines","_lineGroup","getActualTickSize","tickSize","_backgroundPath","plotBands","plotArea","_plotbandGroup","altAxis","axes","slotX","slotY","getSlot","createPlotBandLabel","bandRect","textbox","labelTemplate","createGridLines","minorGridLines","majorGridLines","axisLineVisible","linePos","lineOptions","sizeFn","titleSize","maxLabelSize","labelSize","arrangeTitle","arrangeLabels","arrangeNotes","getLabelsTickPositions","labelTickIndex","labelsBetweenTicks","tickIx","firstTickPosition","nextTickPosition","positionStart","positionEnd","positionLabel","labelBox","labelOffset","labelX","labelY","autoRotateLabelAngle","slotWidth","limit","labelAngle","idx$1","slot","shouldRenderNote","noteSlot","secondAxis","axisLabelText","tmpl","defaultText","maxLabelOffset","lastLabel","offsetField","startPosition","endPosition","maxStartOffset","maxEndOffset","startTick","endTick","limitRange","rangeSize","minValue","maxValue","valueRange","seriesMin","seriesMax","lineDir","lineInfo","axisDir","axisOrigin","pointOffset","scaleToDelta","rawScale","justified","prepareUserOptions","axisCrossingValue","MILLISECONDS","SECONDS","MINUTES","HOURS","DAYS","WEEKS","MONTHS","YEARS","TIME_PER_SECOND","TIME_PER_MINUTE","TIME_PER_HOUR","TIME_PER_DAY","TIME_PER_WEEK","TIME_PER_MONTH","TIME_PER_YEAR","TIME_PER_UNIT","years","weeks","absoluteDateDiff","addTicks","ticks","toDate","startOfWeek","daysToSubtract","addDuration","dateValue","roundedDate","setMinutes","tzDiff","addHours","setSeconds","setMilliseconds","floorDate","ceilDate","dateComparer","dateDiff","toTime","dateEquals","timeIndex","baseUnit","dateIndex","baseUnitStep","parseDates","dates","CategoryAxis","_ticks","categoriesHash","categories","srcCategories","definedMin","definedMax","rangeIndices","totalRange","totalRangeIndices","roundedRange","_seriesMax","scaleOptions","hideOutOfRangeLabels","valueAxis","firstLabel","getTicks","labelTicks","tickIndices","stepSize","indices","getTickPositions","_hash","hasMinor","filterOutOfRangePositions","slotBox","singleSlot","limitSlot","limittedSlot","categoryIndex","pointCategoryIndex","getCategory","totalIndex","categoryAt","categoriesCount","translateRange","scaleRange","minDelta","maxDelta","zoomRange","totalMin","totalMax","hideOutOfRangeNotes","pan","pointsRange","diffStart","diffEnd","rangeMin","rangeMax","_categoriesMap","currentRangeIndices","mapCategories","map$$1","COORDINATE_LIMIT","DateLabelFormats","BASE_UNITS","FIT","categoryRange","EmptyDateRange","displayIndices","displayRange","valuesCount","dateAt","DateRange","roundToBaseUnit","lowerEnd","roundToTotalStep","expandEnd","justifyEnd","valueStart","displayStart","valueEnd","displayEnd","_indices","minIdx","maxIdx","upper","roundedStep","autoBaseUnit","startUnit","startStep","unitSteps","nextStep","categoryLimits","span","autoBaseUnitSteps","maxDateGroups","autoUnit","autoUnitIx","units","totalUnits","initUnit","lastCategory","minDiff","categoryIx","defaultBaseUnit","DateCategoryAxis","dataRange","_parsed","panning","userSetBaseUnit","userSetBaseUnitStep","maxDivisions","divisionOptions","dataRangeOptions","divisionRange","rangeLabels","isEmpty","totalLimits","panRange","datesRange","indicesRange","autoBaseUnitStep","maxDiff","rangeDiff","baseUnitIndex","stepIndex","createRangeLabels","arrangeRangeLabels","position$1","autoRotateRangeLabels","hideOverlappingLabels","firstRangeLabel","lastRangeLabel","i$1","rangeLabel","unitFormat","dateFormats","createLabel","rotateLabel","dateRange","limitCoordinate","MIN_VALUE_RANGE$1","NumericAxis","autoOptions","narrowRange","autoMin","narrow","axisMin","autoAxisMin","autoMax","axisMax","autoAxisMax","roundToMajorUnit","remainderClose","autoAxisOptions","totalOptions","totalAxisOptions","userOptions","userSetMin","userSetMax","clearNullValues","userSetLimits","axisOptions","totalMajorUnit","getDivisions","stepValue","divisions","skipStep","getValue","isValidRange","ratio","remainder","DateValueAxis","timeUnits","baseUnitTime","actualUnits","unitsToAdd","head","tail","applyDefaults","axisCrossingValues","limittedRange","MIN_VALUE_RANGE$2","LogarithmicAxis","logMaxRemainder","autoAxisMax$1","autoAxisMin$1","throwNegativeValuesError","initRange","logMin","logMax","floorMax","traverseMajorTicksPositions","tickPosition","traverseMinorTicksPositions","minorOptions","_minorIntervalOptions","minorStep","GridLinesMixin","majorAngles","minorAngles","skipMajor","majorGridLineAngles","renderMajorGridLines","minorGridLineAngles","renderMinorGridLines","renderGridLines","radiusCallback","gridLineAngles","skipAngles","divs","intervals","altAxisVisible","RadarCategoryAxis","reflowLabels","skipOption","stepOption","divCount","divAngle","majorIntervals","minorIntervals","minorAngle","minorRadius","band","plotBandSlot","ring","totalDivs","slotAngle","fromValue","slotStart","PolarAxis","instanceOptions","RadarNumericAxisMixin","polarAxis","bandStyle","plotBandPoints","innerPoints","outerPoints","innerCircle","outerCircle","radarMajorGridLinePositions","radarMinorGridLinePositions","tickRadius","angleIx","angularDistance","gamma","beta","axisType","RadarNumericAxis","minorSkipStep","RadarLogarithmicAxis","CurveProcessor","dataPoints","tangent$1","Gradients","classArray","convertableToNumber","field$1","hasClasses","interpolateValue","mousewheelDelta","autoTextColor","createHashSet","supported","defaultErrorHandler","lteDateIndex","sortedDates","high","SASS_THEMES","ExportMixin","skipLegacy","exportPDF","imageDataURL","Point2D","Box2D","mwDelta","BAR_GAP","BAR_SPACING","SANS","SANS12","SANS16","TRANSPARENT","boxPlotSeries","outliersField","meanField","_brightness","downColor","whiskers","mean","median","bulletSeries","waterfallSeries","seriesDefaults","area","markers","rangeArea","verticalRangeArea","bar","boxPlot","bubble","candlestick","column","heatmap","pie","donut","funnel","horizontalWaterfall","ohlc","radarArea","radarLine","polarArea","polarLine","rangeBar","rangeColumn","scatterLine","verticalArea","verticalBoxPlot","verticalBullet","verticalLine","waterfall","chartBaseTheme","axisDefaults","categoryAxis","subtitle","legend","autoTheme","unsetColor","theme","hook","seriesTemplate","mapColor","varName","queryStyle","setInactiveOpacity","seriesTypes","inactiveOpacity","defaultFont","titleFont","paneTitleFont","labelFont","seriesPos","TEXT","SERIES","gaugeBaseTheme","diagramBaseTheme","shapeDefaults","hover","handles","selectable","connectionDefaults","tools","registerTheme","themeName","gauge","diagram","treeMap","fuse","arr1","arr2","inactiveItems","errorBars","scatter","chartArea","seriesColors","crosshair","rangePlaceholderColor","connectorDefaults","thumb","connectors","INACTIVE","INACTIVE_SHAPE","AXIS","PRIMARY","DIAGRAM_HOVER","noteStyle","sass","datavizConstants","GeometryPoint","ChartAxis","_axis","findAxisByName","ChartPane","chartsVisual","chartContainer","_pane","ChartPlotArea","_plotArea","backgroundVisual","_bgVisual","countNumbers","Aggregates","sumOrNull","avg","getField","row","SeriesBinder","_valueFields","_otherFields","_nullValue","_undefinedValue","valueFields","otherFields","_makeValue","canonicalFields","bindPoint","pointIx","fieldData","_bindFromArray","srcValueFields","sourceFields","srcPointFields","_bindFromObject","initialValue","srcFields","srcFieldName","sourceFieldName","percentRegex","standardDeviationRegex","ErrorRangeCalculator","errorValue","initGlobalRanges","deviationMatch","valueGetter","createValueGetter","getAverage","deviation","getStandardDeviation","errorRange","globalRange","standardError","getStandardError","getErrorRange","pointValue","percentValue","isSample","squareDifferenceSum","INITIAL_ANIMATION_DURATION","FADEIN","BORDER_BRIGHTNESS","START_SCALE","ERROR_LOW_FIELD","ERROR_HIGH_FIELD","X_ERROR_LOW_FIELD","X_ERROR_HIGH_FIELD","Y_ERROR_LOW_FIELD","Y_ERROR_HIGH_FIELD","INTERPOLATE","GAP","ABOVE","BELOW","SMOOTH","STEP","AREA","BAR","BOX_PLOT","BUBBLE","BULLET","CANDLESTICK","COLUMN","DONUT","FUNNEL","HEATMAP","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","GLASS","TOOLTIP_OFFSET","LINE_MARKER_SIZE","MOUSEWHEEL_ZOOM_RATE","ErrorBarBase","endCaps","valueBox","getAxis","centerBox","capsWidth","getCapsWidth","capValue","capStart","capEnd","createDefaultVisual","CategoricalErrorBar","seriesValueAxis","evalOptions","dryRun","needsEval","excluded","seriesCount","CategoricalChart","seriesCategoryAxis","valueAxisRanges","categoryPoints","seriesPoints","seriesOptions","_evalSeries","traverseDataPoints","addValue","pointOptions","seriesIx","pointType","invertAxes","plotValue","isStacked100","otherValues","categorySum","otherStack","plotRange","isStacked","positive","prevValue","isStackedBar","otherValue","categoryAxisCrossingValue","stackLimits","axisName","stackName","pIx","updateStackRange","chartSeries","limitsCache","limits","errorTotals","addErrorBar","lowValue","highValue","seriesErrorRanges","addPointErrorBar","stackedErrorRange","updateRange","errorBar","createPoint","owner","noteText","evalPointOptions","_defaults","doEval","axisRange","namedValueAxes","categorySlots","chartPoints","currentSeries","categorySlot","valueSlot","pointSlot","aboveAxis","stackValue","reflowPoint","reflowCategories","limitPoints","limitPoint","axisIndex","_outOfRangeCallback","seriesIx$1","currentCategory","_bindPoint","seriesIx$2","outOfRangePoint","_bindCache","bindCache","formatPointValue","PointEventsMixin","NoteMixin","createNote","LinePoint","tooltipTracking","_rendered","createMarker","labelText","formatValue","markerBorder","markerBox","_childBox","childBox","reflowLabel","noteTargetBox","defaultColor","highlightVisual","halfSize","tooltipAnchor","clipBox","verticalAlign","horizontalAlign","overlapsBox","unclipElements","LineSegment","toGeometryPoints","segmentVisual","coords","getNearestPoint","StepLineMixin","calculateStepPoints","stepAxis","stepDir","previousPoint","toGeometryPoint","stepPoint","lintPoint","StepLineSegment","SplineSegment","curve","LineChartMixin","renderSegments","_segments","sortedPoints","sortPoints","pointCount","seriesMissingValues","createSegment","_addSegment","missingValues","nearestPoint","allPoints","nearestPointDistance","ClipAnimation","_setEnd","setX","anyHasZIndex","ClipAnimationMixin","_setChildrenAnimation","animationPoints","LineChart","AreaSegment","prevSegment","stackPoints","createFill","createStroke","strokeSegments","_strokeSegments","createStrokeSegments","segmentsFromPoints","stackSegments","createStackSegments","hasStackSegment","fillSegments","hasStackSegments","fillToAxes","fillPath","crossingValue","endSlot","firstPoint","lastPoint","StepAreaSegment","SplineAreaSegment","curveProcessor","AreaChart","previousSegment","_gapStackPoints","_stackPoints","stackPoint","startIdx","endIdx","_outOfRangeMinPoint","currentSeriesIx","_previousSegmentPoint","gapStackPoint","_createGapStackPoint","segmentIx","seriesIdx","AxisGroupRangeTracker","axisRanges","chartAxisRanges","chartRange","BarLabel","textBox","alignToClipBox","parentBox","hasGradientOverlay","Bar","rectVisual","createRect","strokeOpacity","getBorderColor","baseColor","borderColor","ClusterLayout","slots","slotSize","StackWrap","positionAxis","BarChart","clusterType","stackType","negativeColor","cluster","getStackWrap","stackWrap","stackGroup","wraps","_stackGroup","zeroSlot","_setAnimationOptions","pointVisual","Candlestick","ocSlot","lhSlot","realBody","mid","lines","reflowNote","_mainVisual","mainVisual","createOverlay","createBody","createLines","drawLines","lineStyle","normalColor","areNumbers","CandlestickChart","splitValue","BoxPlot","whiskerSlot","boxSlot","q1","q3","reflowBoxSlot","reflowWhiskerSlot","medianSlot","meanSlot","meanPoints","calcMeanPoints","whiskerPoints","calcWhiskerPoints","medianPoints","calcMedianPoints","renderOutliers","outliers","outerFence","outlierValue","markersBorder","reflowOutliers","VerticalBoxPlot","BoxPlotChart","filterOutliers","ScatterErrorBar","seriesAxes","ScatterChart","_initFields","xAxisRanges","yAxisRanges","valueErrorField","lowField","highField","createMissingValue","xAxisName","xAxis","yAxisName","yAxis","xAxisRange","yAxisRange","namedXAxes","namedYAxes","Bubble","highlightGroup","BubbleChart","_maxSize","negativeValues","updateBubblesSize","pointsCount","animationOptions","minR","minSize","maxR","minArea","areaRatio","Target","Bullet","targetValueSlot","targetSlotX","targetSlotY","targetSlot","bodyVisual","BulletChart","seriesItem","wrapData","bulletOptions","BaseTooltip","getStyle","pointColor","paddingBottom","tooltipOptions","CrosshairTooltip","formatService","initAxisName","showAt","stickyMode","formattedValue","getAnchor","ref_options","Crosshair","moveLine","getBox","dim","axisLineBox","currentAxis","ChartContainer","shouldClip","_clipBox","chartsBox","clipRect","unclipLabels","charts","ID","appendAxis","appendAxisAt","appendChart","removeAxis","removeChart","allAxes","vGridLines","hGridLines","notifyRender","axisValueField","length$1","axis$1","lineBox$1","paneIndex","appendIfNotNull","segmentVisible","pointVisibility","bindSegments","equalsIgnoreCase","filterSeriesByType","getDateField","isDateAxis","sampleCategory","dateCategory","singleItemOrArray","AREA_REGEX","hasValue$1","findNext","pointHasValue","outPoint","getter$$1","hasItem","createOutOfRangePoints","hasMinPoint","hasMaxPoint","_outOfRangeMaxPoint","PlotAreaBase","initSeries","crosshairs","originalOptions","createPanes","createCrosshairs","paneDefaults","paneOptions","panes","panesLength","currentPane","crosshairOptions","currentCrosshair","removeCrosshairs","hideCrosshairs","findPane","matchingPane","findPointPane","axisToRemove","filteredAxes","chartToRemove","filteredCharts","addToLegend","inactiveItemsLabels","seriesVisible","visibleInLegend","itemLabelOptions","markerColor","active","groupAxes","xAxes","yAxes","paneIx","paneAxes","axisIx","any","groupSeriesByPane","seriesByPane","seriesPaneName","filterVisibleSeries","reflowPanes","detachLabels","reflowAxes","reflowCharts","redraw","panesArray","crossingAxes","crossingValues","valuesToAdd","alignAxisTo","targetAxis","targetCrossingValue","slotEdge","targetEdge","axisBox","alignAxes","xAnchor","yAnchor","xAnchorCrossings","yAnchorCrossings","leftAnchors","rightAnchors","topAnchors","bottomAnchors","paneId","paneAnchor","anchorCrossings","_overlap","_mirrored","pane$1","paneId$1","visible$1","anchor$1","anchorCrossings$1","shrinkAxisWidth","axisGroupBox","overflowX","shrinkAxisHeight","shrinked","overflowY","fitAxes","paneBox","currentAxis$1","reflowPaneAxes","autoRotateAxisLabels","groupedAxes","rotated","allPaneAxes","chartPane","remainingHeight","autoHeightPanes","percents","currentPane$1","i$2","currentPane$2","backgroundBox","axesCount","axisA","axisB","chartsBoxes","addBackgroundPaths","multipath","backgroundContainsPoint","pointsByCategoryIndex","pointsBySeriesIndex","seriesIndex","filterPoints","pointsBySeriesName","findPoint","paneByPoint","detachAxisGroupLabels","labelAxisCount","labelAxis","createLabelAxis","onAxis","isSingleAxis","PlotAreaEventsMixin","_dispatchEvent","SeriesAggregator","defaultAggregates","seriesFields","_seriesFields","rootAggregate","_series","_binder","fieldAggregate","canonicalName","aggregatePoints","srcPoints","_bindPoints","firstDataItem","srcValues","_bindField","setValue","DefaultAggregates","seriesType","RangeBar","fromOptions","toOptions","labelFrom","_createLabel","labelTo","RangeBarChart","plotLimits","RangeLinePoint","RangeAreaPoint","initLabelsFormat","fromPoint","toPoint","copyFields","fromBox","toBox","positionLabels","fromLabelPosition","toLabelPosition","RangeAreaSegment","toPoints","fromSegments","fromPath","SplineRangeAreaSegment","createCurveSegments","StepRangeAreaSegment","RangeAreaChart","fromSlot","toSlot","OHLCPoint","oPoints","cPoints","lhPoints","oSlot","cSlot","OHLCChart","WaterfallSegment","WaterfallChart","createSegments","totalCategories","summary","prevPoint","AREA_SERIES","OUT_OF_RANGE_SERIES","CategoricalPlotArea","namedCategoryAxes","valueAxisRangeTracker","stack100","createCategoryAxes","aggregateCategories","createCategoryAxesLabels","createCharts","createValueAxes","paneSeries","visibleSeries","groupSeriesByCategoryAxis","groupIx","createChartGroup","createAreaChart","createRangeAreaChart","createBarChart","createRangeBarChart","createBulletChart","createCandlestickChart","createBoxPlotChart","createOHLCChart","createWaterfallChart","createLineChart","srcSeries","processedSeries","_currentPointsCache","_seriesPointsCache","axisPane","categoryField","aggregateSeries","filterSeries","outOfRangePoints","clearSeriesPointsCache","seriesSourcePoints","dateAxis","srcData","getFn","aggregator","categoryItem","categoryIdx","categoriesToAdd","defaultPaneName","stackableChartOptions","firstSeries","categoryAxes","axisSeries","groupSeries","barChart","rangeColumnChart","bulletChart","lineChart","areaChart","rangeAreaChart","waterfallChart","axisRequiresRounding","categoryAxisName","categoryAxisIndex","centeredSeries","seriesAxis","aggregatedAxis","primaryAxis","tracker","defaultRange","baseOptions","defaultAxisRange","eventType","_eventCoordinates","pointPane","updateAxisOptions","targetOptions","axesOptions","Highlight","_points","arrayPoints","togglePointHighlight","toggleHandler","isHighlighted","acceptKey","mouseKey","altKey","toChartAxisRanges","Pannable","_active","_panAxes","updatedAxes","ZoomSelection","marquee","_marquee","marqueeColor","removeElement","setStyles","zoomPane","_zoomPane","_zoomPaneClipBox","_selectionPosition","elementOffset$$1","selectionPosition","_updateAxisRanges","limitValue$1","MousewheelZoom","rate","updateRanges","LegendLayout","legendItem","LegendItem","createContainer","markerOptions","eventSink","_itemOverlay","_legendItemHover","pointIndex","_unsetActivePoint","HORIZONTAL","CUSTOM","Legend","createContainers","createLegendTitle","createItems","userAlign","hasTitle","itemsContainer","innerElement","hasItems","legendBox","containerCustomReflow","containerReflow","alignTarget","containerBox","createTitleLayout","appendTitleLayoutContent","layout","PlotAreaFactory","_registry","registry","createDiv","closestHandle","Selection","_dateAxis","initOptions","createElements","onPane","leftMask","rightMask","leftHandle","rightHandle","selectionStyles","leftHandleHeight","rightHandleHeight","borderLeftWidth","borderRightWidth","mousewheel","_mousewheelHandler","_mousewheel","_domEvents","tap","_gesturestart","_gesturechange","gestureend","_gestureend","_mwTimeout","_state","_rangeEventArgs","_value","moveTarget","oldRange","rightClick","_toModelCoordinates","_slot","leftMaskWidth","rightMaskWidth","toValue","zDir","relative","SharedTooltip","tooltipPoints","_slotAnchor","_defaultAnchor","categoryText","categoryFormat","slotCenter","BarChartAnimation","fromScale","BubbleAnimation","FadeInAnimation","fadeTo","PieAnimation","ScatterLineChart","missingValue","XYPlotArea","xAxisRangeTracker","yAxisRangeTracker","filteredSeries","createScatterChart","createScatterLineChart","createBubbleChart","createAxes","xAxisOptions","yAxisOptions","createXYAxis","inferredDate","namedAxes","isLog","typeSamples","seriesAxisName","firstPointValue","xAxesOptions","yAxesOptions","axisPane$1","xValues","yValues","updateAxisOptions$1","PieSegment","themeLabels","animationDelay","labelsOptions","labelsDistance","lp","labelHeight","labelWidth","createSegmentVisual","borderOptions","singleSegment","tooltipAlignment","RAD_30","RAD_60","PieChartMixin","createLegendItem","legendOptions","pointVisible","legendItems","PieChart","colorsCount","anglePerValue","constantAngle","explode","evalSegmentOptions","segmentOptions","seriesConfigs","minWidth","halfMinWidth","defaultPadding","newBox","newBoxCenter","leftSideLabels","rightSideLabels","seriesConfig","labelComparator","leftLabelsReflow","rightLabelsReflow","distances","distanceBetweenLabels","distributeLabels","lr","firstBox","secondBox","_takeDistance","amount","boxX","labelDistance","boxY","hAlignLabel","_connectorLines","connectorsColor","connectorLine","centerPoint","sr","crossing","pointInCircle","autoFit","pieCenter","bboxBottom","reverseValue","originalX","sector_center","uat","ub","PiePlotArea","createPieChart","pieChart","DonutSegment","DonutChart","holeSize","totalSize","seriesWithoutSize","currentSeries$1","DonutPlotArea","createDonutChart","donutChart","PolarPlotAreaBase","createPolarAxis","createValueAxis","axisDefaultRange","valueAxisOptions","valueAxisBox","heightDiff","PolarScatterChart","valueRadius","PolarLineChart","SplinePolarAreaSegment","_polarAxisCenter","PolarAreaSegment","centerSegment","PolarAreaChart","_hasMissingValuesGap","xComparer","PolarPlotArea","scatterChart","RadarLineChart","seriesSegments","groupBySeriesIx","isFirstDataPoint","isLastDataPoint","SplineRadarAreaSegment","RadarAreaSegment","RadarAreaChart","RadarSegment","RadarClusterLayout","slotSector","RadarStackLayout","childSector","RadarBarChart","RadarPlotArea","_hasBarCharts","_isStacked100","chartOptions","FunnelSegment","chartBox","createPath","FunnelChart","labelPadding","dynamicSlopeReflow","totalHeight","firstSegment","maxSegment","lastUpperSide","previousOffset","previousHeight","nextSegment","nextPercentage","segmentSpacing","constantSlopeReflow","decreasingWidth","neckRatio","finalNarrow","dynamicSlope","dynamicHeight","FunnelPlotArea","createFunnelChart","funnelChart","HeatmapPoint","labelColor","isRoundRect","halfBorderWidth","HeatmapChart","setRange","minLightnessOffset","hsl","colorScale","indexX","indexY","xRange","yRange","ref$2","xIndex","yIndex","xIn","yIn","HeatmapPlotArea","bindCategories","createAxisLabels","xCategories","yCategories","createHeatmapChart","firstCategory","updateAxisOptions$2","COLOR","FIRST","MAX","MIN","NOTE_TEXT","errorLow","errorHigh","AXIS_NAMES","Chart","themeOptions","_initElement","_originalOptions","_theme","_initTheme","_initHandlers","_initSurface","fontLoaded","_redraw","_attachEvents","_setElementClass","seriesCopies","aliases","alias","resolveAxisAliases","applySeriesColors","_selections","_destroySelections","_setupSelection","_noTransitionsRedraw","paneName","_model","findPaneByName","findPaneByIndex","seriesName","categoryName","pointByCategoryName","togglePointsHighlight","_sharedTooltip","_surfaceWrap","renderAs","_destroySurface","_surfaceMouseenterHandler","_surfaceMouseleaveHandler","_getModel","_destroyView","_createTooltip","_createPannable","_createZoomSelection","_createMousewheelZoom","triggerPaneRender","_navState","_cancelDomEvents","exportOptions","clearMissingValues","_pannable","zoomable","_zoomSelection","_mousewheelZoom","_toggleDragZoomEvents","allowDrag","allowZoom","_dragZoomEnabled","_touchAction","_toggleDomEvents","drag","domEvents","toggleDrag","toggleZoom","_createSharedTooltip","themeAxisDefaults","mapAxisOptions","axisColor","applyAxisDefaults","seriesLength","commonDefaults","themeSeriesDefaults","commonThemeDefaults","cleanupNestedSeriesDefaults","applySeriesDefaults","seriesColor","_createPlotArea","_modelOptions","skipSeries","selections","_selectStart","_selectEnd","_clickHandler","_mouseover","_mouseout","_toDocumentCoordinates","obj$1","_shouldAttachMouseMove","_hoveredPoint","hovered","_stopChartHandlers","_gestureDistance","_zooming","mousewheelZoom","previousGestureDistance","_drawingChartElement","leave","_startNavigation","_suppressHover","ranges$1","_endNavigation","_mousewheelZoomRate","totalDelta","chartEvent","_getChartElement","_elementPadding","_padding","drawingElement","sharedTooltip","_startHover","_trackSharedTooltip","_propagateClick","handlingTap","activePoint","_activePoint","multipleSeries","hasInactiveOpacity","_hasInactiveOpacity","_updateHoveredPoint","_displayTooltip","_displayInactiveOpacity","_activeChartInstance","_updateSeriesOpacity","_applySeriesOpacity","highlightPoints","chartInstance","_chartInstanceFromPoint","inactivePoints","_getInactivePoints","_getInactiveOpacityForSeries","_getAllPointsOfType","hoveredPoint","resetOpacity","currSeries","defaultOpacity","_getDefaultOpacityForSeries","activeSeries","hasDefaultInactiveOpacity","defaultInactiveOpacity","_mouseMoveTrackHandler","_mouseMoveTracking","seriesPoint","_trackCrosshairs","overPlotArea","_tooltipCategoryIx","_sharedHighlight","pointArgs","hoverArgs","hideElements","keepTooltipOpen","_deferRedraw","_clearRedrawTimeout","_redrawTimeout","bindCategoryAxisFromSeries","uniqueCategories","bindable","dataIx","dataRow","srcDates","sortDates","uniqueDates","rowCount","rowIx","colCount","colIx","transpose","_isBindable","transitionsState","updateMouseMoveHandler","applyOptions","setDirection","setIntlService","noTransitionsRedraw","DATA_FIELDS","fieldValue","originalValue","nullValue","KendoChart","MOUSELEAVE_NS","DATABOUND","LEAVE","ChartInstanceObserver","legendItemClick","_seriesVisibility","SeriesVisibilityState","_initDataSource","_bindSeries","_bindCategories","_getThemeOptions","_sourceSeries","setDataSource","_hasDataSource","_onDataChanged","_dataChangeHandler","_hasData","_destroyCrosshairTooltips","findSeries","ChartSeries","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","_groupIx","categoriesData","_bindCategoryAxis","proxyMembers","createProxyMember","nameTemplate","seriesClone","legacyTemplate","groupNameTemplate","_groupValue","PDFMixin","persistSeriesVisibility","saveState","geom","mobileScrollerSelector","_mobileScroller","_closeTooltipHandler","_closeTooltip","_clearShowTimeout","sharedTemplate","_ensureElement","showTimeout","normalizeStyle","_sharedContent","_pointContent","forceHide","_hideElement","nameColumn","colorMarker","colspan","fadeOut","always","tooltipTemplate","xLow","xHigh","yLow","yHigh","_chart","_filterPoints","_clearFields","toggleVisibility","_filterData","DrawingGroup","DrawingPath","ANGULAR_SPEED","ARROW_POINTER","BAR_POINTER","DEFAULT_LINE_WIDTH","DEGREE","LINEAR","RADIAL_POINTER","RADIAL_RANGE_POINTER","Path$1","buildLabelElement","styleGeometry","styleBox","getRange","Gauge","contextService","pointerValue","_setValueOptions","_draw","_visuals","allValues","arrayValues","_toggleTransitions","_surfaceSize","gaugeArea","_createGaugeArea","_createModel","_gaugeAreaMargin","currentTheme","areaGeometry","_surfaceElement","_getSize","defaultSize","_defaultSize","Path$2","Group$2","renderAxisTick","tickRenderOptions","renderTicks","tickGroup","LinearScale","renderLabels","scaleLine","renderLine","scaleTicks","renderRanges","linePath","Pointer","_oldValue","repaint","LinearPointer","track","pointerBox","pointerRangeBox","trackBox","trackSize","pointerHalfSize","getElementOptions","_margin","ArrowLinearPointerAnimation","toScale","translateX","translateY","Point$1","Path$3","ArrowLinearPointer","pointerShape","elementOptions","BarLinearPointerAnimation","newPoints","oldPoints","speed","Group$3","Path$4","BarLinearPointer","minSlot","sizeAxis","pointerPath","oldShape","renderTrack","trackOptions","Group$1","LinearGauge","bboxX","bboxY","_shrinkScaleWidth","_getBox","_alignElements","_shrinkElements","_buildVisual","scaleElements","pointerType","plotAreaBox","scaleBox","GEO_ARC_ADJUST_ANGLE","Path$5","Group$5","drawTicks","tickAngles","getRadiusX","tickStart","tickEnd","rangeSegment","RadialScale","renderArc","labelElements","repositionRanges","hasRanges","ticksSize","labelsGroup","rangeDistance","isInside","hasLabelElements","setRadiusX","setRadiusY","paddingWidth","paddingHeight","labelPos","labelElement","prevLabelPos","labelTransform","rangeRadius","getRangeRadius","rangeSegments","segmentsCount","rangeGeom","tickArc","majorTickAngles","allTicks","_tickDifference","minorTickAngles","normalizeTickAngles","tickCount","repositionTicks","minor","newPoint","xDiff","yDiff","RadialPointerAnimation","newAngle","oldAngle","Group$6","Path$6","RadialPointer","setAngle","_renderNeedle","_renderCap","capSize","cap","needleColor","needlePath","capColor","Group$4","RadialGauge","_initialPlotArea","alignScale","_buildPointers","midDiff","oldDiff","getDiff","staleFlag","getPlotBox","scaleArc","plotBbox","plotBox","plotBoxCenter","paddingX","paddingY","pointersArr","ArcScale","rangeLineCap","placeholderRangeAngle","geometry$$1","setEndAngle","setStartAngle","addRange","RangePointerAnimation","startColor","currentColor","RangePointer","rangeColor","ArcGauge","centerLabelPosition","yLimit","CircularGauge","lowerName","_createInstance","_copyFields","gaugeType","_gaugeType","RadialGaugeWidget","LinearGaugeWidget","ArcGaugeWidget","_centerTemplate","_centerElement","centerTemplate","centerElement","_getCenterElement","CircularGaugeWidget","createExportMethod","exportMethods","numberRegex","alphanumericRegex","getNext","Encoding","quietZoneLength","addQuietZone","initValue","addData","addCheckSum","invalidCharacterError","character","encodings","code39Base","minBaseUnitLength","addStart","addCharacter","pushCheckSum","prepareValues","charData","characterMap","addBase","code39ExtendedBase","addExtended","extendedMappings","shiftCharacters","dataCharacter","specialAsciiCodes","shiftValuesAsciiCodes","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","TERMINATION_BAR","checkValues","_getCheckValues","checksum","_findCharacterByValue","cValue","wightedSum","weightedValue","code93extended","state128","encoding","state128AB","FNC4","states","_initMoves","isCode","encodingState","_moves","maxLength","numberMatch","_moveFNC","_shiftState","_moveState","fnc","previousState","SHIFT","states128","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","code128Base","_initStates","checkSum","getNextState","STOP","code128a","code128b","code128c","code128","msiBase","checkSumLength","checkSums","checkSumType","Modulo10","evenSum","oddSum","odd","Modulo11","checkValue","weightedSum","Modulo11Modulo10","mod11Value","Modulo10Modulo10","mod10Value","msimod10","msimod11","msimod1110","msimod1010","code11","kCheckSumMinLength","DASH_VALUE","DASH","getWeightedSum","kValue","postnet","VALID_CODE_LENGTHS","DIGIT_SEPARATOR","baseHeight","ean13","calculateChecksum","leftKey","leftPart","rightPart","addPieces","addSide","keyTable","arrToAdd","limitedHeight","even","ean8","Barcode","surfaceWrap","_setOptions","_render","textToDisplay","textMargin","barHeight","_getBackground","_getText","_bandsGroup","_getBands","_textbox","terminator","NUMERIC","ALPHA_NUMERIC","BYTE","powersOfTwo","powersOfTwoResult","generatorPolynomials","irregularAlignmentPatternsStartDistance","versionsCodewordsInformation","totalDataCodewords","errorCodewordsPerBlock","finderPattern","alignmentPattern","errorCorrectionPatterns","paddingCodewords","maskPatternConditions","alphaRegex","alphaNumericRegex","byteRegex","crossPattern","squarePattern","toDecimal","toBitsString","splitInto","QRDataMode","getVersionIndex","getBitsCharacterCount","bitsInCharacterCount","getModeCountString","modeIndicator","getStringBitsLength","modes","inputLength","mod3","characters","mode","modeInstances","FreeCellVisitor","startColumn","getNextCell","getNextRemainderCell","fillFunctionCell","matrices","bit","fillDataCell","fillData","blocks","block","codewordIdx","cellVisitor","blockIdx","padDataString","dataString","dataBitsCount","terminatorIndex","paddingCodewordIndex","xorPolynomials","multiplyPolynomials","multiplyByConstant","generatePowersOfTwo","firstPolynomial","secondPolynomial","generateGeneratorPolynomials","generateErrorCodewords","errorCodewordsCount","generator","generatorPolynomial","steps","errorCodewords","getBlocks","dataStream","versionCodewordsInformation","dataBlock","blockCodewordsCount","groupBlocksCount","messagePolynomial","codeword","codewordStart","dataBlocks","errorBlocks","versionGroups","chooseMode","minNumericBeforeAlpha","minNumericBeforeByte","minAlphaBeforeByte","previousMode","modeString","numeric","numericMatch","alphaMatch","alphaNumeric","alphaNumericMatch","getModes","nextMode","getDataCodewordsCount","getVersion","dataCodewordsCount","errorCorrectionLevel","getDataString","encodeFormatInformation","encodedString","encodeBCH","codeLength","generatorNumber","polynomialLength","valueNumber","valueString","dividePolynomials","numberX","numberY","yLength","xLength","getNumberAt","initMatrices","modules","addFormatInformation","encodeVersionInformation","addVersionInformation","quotient","mod","addCentricPattern","addFinderSeparator","nextX","nextY","addFinderPatterns","addAlignmentPatterns","startDistance","addTimingFunctions","scoreMaskMatrixes","scores","previousBits","darkModules","adjacentSameBits","scoreFinderPatternOccurance","scoreAdjacentSameBits","calculateDarkModulesRatioScore","rowColumn","adjacentBits","mod5","EncodingResult","IsoEncoder","getEncodingResult","inputString","UTF8Encoder","encodingMode","utfBOM","initialModeCountStringLength","encodeCharacter","bytesCount","getBytesCount","bc","significantOnes","QRCodeDataEncoder","encodeData","encodingResult","versionInformation","optimalMatrix","QRCodeDefaults","DEFAULT_SIZE","QUIET_ZONE_LENGTH","DEFAULT_ERROR_CORRECTION_LEVEL","DEFAULT_BACKGROUND","DEFAULT_DARK_MODULE_COLOR","MIN_BASE_UNIT_SIZE","QRCode","quietZoneSize","contentSize","errorCorrection","_calculateBaseUnit","_renderBackground","_renderMatrix","_hasCustomLogo","_renderLogo","_isSwiss","_renderSwissCode","qrSize","imageRect","logoSize","_getLogoSize","logoUrl","imageUrl","crossSize","crossOffset","_renderShape","matrixSize","defautLogoSize","QRCodeFunctions","QRCodeFields","FadeOutAnimation","_initialOpacity","NavigatorHint","chartPadding","scroll","minPos","clearHideTimeout","_visible","tooltipStyle","borderTopWidth","_hideTimeout","_hideAnimation","NAVIGATOR_PANE","NAVIGATOR_AXIS","Navigator","chartObserver","clean","_redrawSelf","initSelection","mainAxis","axisClone","ClonedObject","selectStart","selectEnd","filterAxes","redrawSlaves","slavePanes","navigatorAxis","naviRange","inNavigator","liveDrag","showHint","readSelection","ref_selection_options","_zoom","fromIx","toIx","_zoomEnd","__navi","naviOptions","attachAxes","attachSeries","valueAxes","justifyAxis","_collapse","autoBindElements","user","navigatorSeries","dateField","StockChart","stockDefaults","destroyNavigator","_fullRedraw","_dirty","partialRedraw","_seriesCount","copyNavigatorCategories","KendoStockChart","StockInstanceObserver","navigatorFilter","navigatorCreated","_initNavigatorOptions","navigatorOptions","isTouch","isFirefox","hasServerFiltering","hasSelect","dummyAxis","buildFilter","_onNavigatorCreated","_navigator","_initNavigatorDataSource","dsOptions","_navigatorDataChangedHandler","_onNavigatorDataChanged","_navigatorDataSource","_bindNavigatorSeries","naviCategories","axesLength","_removeNavigatorDataSource","_onNavigatorFilter","navigatorDataSource","SharedTooltip$1","NO_CROSSHAIR","wrapNumber","Sparkline","_initialWidth","stage","displayState","_autoWidth","inline","_calculateWidth","currentChart","pointWidth","normalizeOptions","KendoSparkline","SparklineTooltip","renderPos","renderSize","sqr","romanToArabic","memoize","isUnicodeLetter","RX_UNICODE_LETTER","withExit","Return","Location","lat","lng","DISTANCE_ITERATIONS","DISTANCE_CONVERGENCE","DISTANCE_PRECISION","FORMAT","loc","datum","greatCircleTo","bearing","datums","WGS84","fromLat","fromLng","dToR","azimuthFrom","azimuthTo","prevLambda","sinLambda","cosLambda","sino","cosA2","coso","cos2om","sigma","U1","sinU1","cosU1","U2","sinU2","cosU2","lambda","converged","sinA","u2","deltao","fromLngLat","ll","fromLatLng","Extent","nw","se","containsAny","locs","include","includeAll","edges","sw","extent","World","Attribution","itemTemplate","_extent","_itemText","inZoomLevel","_inZoomLevel","minZoom","maxZoom","inArea","_inArea","button","BUTTONS","_keyroot","panStep","_pan","iconClass","ZoomControl","zoomStep","exp","PI_DIV_4","Mercator","MAX_LNG","MAX_LAT","INVERSE_ITERATIONS","INVERSE_CONVERGENCE","centralMeridian","clamp","proj","lng0","_projectLat","ecc","ts","con","inverse","_inverseY","ecch","phi","dphi","SphericalMercator","Equirectangular","EPSG3857","_proj","_tm","_itm","toLocation","crs","EPSG3395","EPSG4326","projections","layers","Layer","_beforeReset","_panEnd","_activate","_updateAttribution","_deactivate","_applyExtent","_setVisibility","matchMinZoom","matchMaxZoom","inside","attribution","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","_domain","domainRange","outputRange","_ratio","rel","geo","drawingUtil","TileLayer","subdomains","viewType","_viewType","locationToLayer","viewOrigin","tileTitle","_updateView","TileView","extentToPoint","pool","TilePool","tileSize","urlTemplate","_center","_viewOrigin","pointToTileIndex","tileCount","firstTileIndex","indexToPoint","subdomainText","subdomainIndex","_tileTitle","tile","createTile","currentIndex","tileOptions","wrapIndex","roundPoint","subdomain","errorUrlTemplate","wrapValue","ImageTile","errorUrl","urlResult","urlOptions","z","quadkey","_create","maxDist","BingLayer","_scheme","_onMetadata","_fetchMetadata","imagerySet","uriScheme","resourceSets","resource","resources","imageUrlSubdomains","zoomMin","zoomMax","_addAttribution","BingView","imageryProviders","coverageAreas","tileQuadKey","digit","quadKey","bing","MarkerLayer","_markerClick","titleField","_addOne","Marker","addTo","getLocation","getTitle","renderTooltip","contentTemplate","contentUrl","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","fromZoom","Utils","isNearZero","isDefined","isUndefined","isBoolean","isType","simpleExtend","initArray","serializePoints","res","deserializePoints","randomInteger","DFT","getMatrixAngle","getMatrixScaling","findAngle","sngXComp","sngYComp","findRadian","thisRef","what","fold","constraint","bisort","sortfunc","Easing","Ticker","adapters","lastTime","_this","timerDelegate","onTimerEvent","addAdapter","onComplete","removeHandler","caller","onStep","seekTo","seekFromTo","intervalId","initState","propagate","movement","Range","rangeIntegerScale","plus","minus","times","lengthSquared","middleOf","toPolar","useDegrees","factor","halfpi","Polar","isOnLine","o1","u1","inflate","xy","PathDefiner","rotatedBounds","delimiter","staicPoint","adornerCenter","thisCenter","scaled","rectBottomRight","intersectLine","start1","end1","start2","end2","isSegment","tangensdiff","Empty","Intersect","rectWithLine","rects","reverseAngle","RectAlign","alignValues","_singleAlign","_left","_right","stretch","_stretch","_top","_middle","_bottom","alignCalc","applyRect","fromSVGMatrix","vm","fromMatrixVector","fromList","translation","scaling","nums","MatrixVector","fromMatrix","randomId","Geometry","_distanceToLineSquared","pt1","pt2","vx","vy","distanceToLine","distanceToPolyline","minimum","HashTable","_buckets","_createGetBucket","_bucketExists","containsKey","hashId","hashes","_hashes","bucket","ht","_hashString","_objectHashId","_hashId","Dictionary","dictionary","_hashTable","forEachValue","forEachKey","Queue","enqueue","kv","links","outgoing","incoming","weight","associatedShape","shortForm","isVirtual","isIsolated","isLinkedTo","link","getComplement","getChildren","getParents","balance","adjacentTo","removeLink","hasLinkTo","degree","incidentWith","getLinksWith","getNeighbors","neighbors","Link","connection","sourceFound","targetFound","associatedConnection","getCommonNode","isBridging","v1","v2","getNodes","changeSource","changeTarget","changesNodes","oldSource","oldTarget","directTo","createReverseEdge","reversed","Graph","idOrDiagram","_nodeMap","_hasCachedRelationships","cacheRelationships","forceRebuild","assignLevels","startNode","visited","getConnectedComponents","componentIndex","setItemIndices","componentId","_collectConnectedNodes","components","addNodeAndOutgoings","setIds","nodeIndex","nextId","calcBounds","getSpanningTree","_addNode","levelCount","ni","cn","newLink","addLink","treeLevels","takeRandomNode","excludedNodes","incidenceLessThan","isHealthy","hasNode","sourceOrLink","addExistingLink","foundSource","getNode","addNode","foundTarget","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","oneNode","rev","intensityCatalog","flowIntensity","catalogEqualIntensity","intensity","sourceStack","targetStack","targetLink","sources","si","sourceLink","ril","vertexOrder","kk","reversedEdges","Predefined","EightGraph","Mindmap","ThreeGraph","BinaryTree","levels","createBalancedTree","Linear","Tree","siblingsCount","Forest","trees","createBalancedForest","Workflow","Grid","graphString","previousLink","graph","lin","_addShape","kendoDiagram","undoable","addShape","_addConnection","connect","createDiagramFromGraph","doLayout","randomSize","gli","sourceShape","targetShape","SpringLayout","layoutGraph","limitToView","shi","news","counter","lastAdded","treeCount","createRandomConnectedGraph","nodeCount","maxIncidence","isTree","poolNode","randomAdditions","randomDiagram","shapeCount","normalVariable","Markers","none","arrowStart","filledCircle","arrowEnd","diffNumericOptions","Scale","Translation","toMatrixVector","Length","Rotation","CompositeTransform","_transform","_renderTransform","rotateMatrix","scaleMatrix","translatePoint","AutoSizeableMixin","_setScale","originWidth","_originWidth","originHeight","_originHeight","_setTranslate","_initSize","autoSize","_updateSize","_diffNumericOptions","_originSize","drawingContainer","_hover","_measured","_boundingBox","VisualBase","normalizeDrawingOptions","_fill","getColor","_stroke","strokeOptions","fillOptions","GradientClass","TextBlock","_textColor","_font","_initText","fontOptions","fontStyle","fontWeight","sizeChanged","Rectangle","_initPath","_setPosition","_drawPath","sizeOptions","sizeOptionsOrDefault","MarkerBase","_transformToPath","CircleMarker","positionMarker","targetSegment","ArrowMarker","_linePoints","MarkerPathMixin","_getPath","_normalizeMarkerOptions","startCap","endCap","_removeMarker","_createMarkers","markerType","_positionMarker","_capMap","_redrawMarker","pathChange","pathOptions","pathCapType","optionsCap","_redrawMarkers","_createElements","_setData","Line","Polyline","_updatePath","_pointsDiffer","currentPoints","differ","_initImage","_childrenChange","toFront","toBack","_reorderChildren","toIndex","drawingChildren","fixedPosition","childBoundingBox","_includeInBBox","toDrawingRect","drawingRect","_initCircle","circleOptions","_circle","Canvas","_translate","_viewBox","clearHtml","drawingOptions","Cursors","grip","cross","south","east","west","north","rowresize","colresize","HIT_TEST_DISTANCE","ITEMBOUNDSCHANGE","ROTATED","TARGET","HANDLE_NAMES","PositionAdapter","layoutState","froms","tos","subjects","getShapeById","LayoutUndoUnit","initialState","finalState","_initialState","_finalState","undo","setState","redo","conn","ticker","CompositeUnit","undoUnit","ConnectionEditUnit","redoSource","redoTarget","_redoSource","_redoTarget","_undoSource","_undoTarget","_updateConnector","updateModel","ConnectionEditUndoUnit","undoSource","undoTarget","DeleteConnectionUnit","targetConnector","DeleteShapeUnit","TransformUnit","undoStates","adorner","redoStates","refreshBounds","AddConnectionUnit","AddShapeUnit","deselect","PanUndoUnit","initialPosition","finalPosition","finalPos","RotateUnit","undoRotates","redoRotates","redoAngle","_angle","_innerBounds","_initialize","ToFrontUnit","initialIndices","_toIndex","ToBackUnit","UndoRedoService","capacity","begin","commit","execute","_restart","addCompositeItem","EmptyTool","toolService","tryActivate","getCursor","ScrollerTool","tool","scrollable","movableCanvas","virtualScroll","noMeta","hoveredItem","hoveredAdorner","_hoveredConnector","scrollPos","_storePan","PointerTool","selectSingle","_hitTest","_resizingAdorner","isDragHandle","connections","undoRedoService","SelectionTool","isSelected","selectArea","ConnectionTool","connector","_createConnection","_c","canDrag","connectionHandle","_connectionManipulation","_removeHover","activeConnection","_cachedTouchTarget","cachedTouchTarget","sourceConnector","Shape","getConnector","_syncConnectionChanges","_connectorsAdorner","ConnectionEditTool","isActive","handleName","testKey","ToolService","activeTool","_updateHoveredItem","_activateTool","_updateCursor","updateHovered","keyDown","metaKey","toRemove","_triggerRemove","_syncChanges","_destroyToolBar","_discardNewConnection","selectAll","wheel","zoomRate","zoomOptions","setTool","addToSelection","newConnection","disabledShape","hit","selectedConnections","_selectedItems","Connection","_hitTestItems","_hitTestElements","shapeHit","connectionHit","hitTestShapeConnectors","mainLayer","ConnectionRouterBase","LinearConnectionRouter","hitTest","getBounds","PolylineRouter","CascadingRouter","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","AdornerBase","_adorners","ConnectionEditAdorner","_ts","sp","tp","spVisual","epVisual","_initialSource","_initialTarget","sourcePointDistance","targetPointDistance","sourceHandle","targetHandle","modelToLayer","ConnectorsAdorner","_refreshHandler","ctr","_clearVisual","ConnectorVisual","_keepCachedTouchTarget","visualChildren","ResizingAdorner","_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","dtl","dbr","changed","_truncateAngle","_rotating","shouldSnap","thr","_truncateDistance","hitToOppositeSide","_displaceBounds","newCenter","oldBounds","_truncatePositionToGuides","ruler","truncatePositionToGuides","_truncateSizeToGuides","truncateSizeToGuides","snap","snapOptions","snapAngle","snapSize","_diffStates","_syncShapeChanges","rotationThumb","_rotationThumbBounds","Selector","_ep","_adorn","visualBounds","modelToView","_visualBounds","HyperTree","EPSILON","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","resultLinkSet","resultNodeSet","moveToOffset","boundingRect","currentHeight","currentWidth","deltax","deltay","nodeBounds","newpoints","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","areConnectedAlready","newEdge","finalNodeSet","LayoutState","initialTemperature","temperature","guessBounds","_expectedBounds","refineStage","_repulsion","_attraction","_shake","rho","_InverseSquareForce","wn","hn","wm","hm","_SquareForce","squareSize","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","basevalue","nl","normalizeAngle","col","deltaTheta","deltaThetaHalf","parentSector","childAngleFraction","setPolarLocation","BoundingRectangle","includeStart","rootDirection","rootLayout","childrenLayout","givenSize","shapeWidth","shapeHeight","AngleToParent","SectorAngle","pp","childrenwidth","selfLocation","male","female","leftcount","tipOverTreeStartLevel","TreeLayout","layoutComponents","getTree","getTreeForRoot","LayeredLayout","_initRuntimeProperties","downstreamLinkCount","upstreamLinkCount","uBaryCenter","dBaryCenter","upstreamPriority","downstreamPriority","gridPosition","_prepare","targetLayer","layerMap","layerCount","sortedNodes","o2","o1layer","o2layer","minLayer","linksTo","_dummify","_optimizeCrossings","_swapPairs","arrangeNodes","_moveThingsAround","_dedummify","setMinDist","minDist","layerIndex","minDistances","getMinDist","i1","i2","placeLeftToRight","leftClasses","leftPos","classNodes","placeLeft","POSITIVE_INFINITY","rightSibling","nodeLeftClass","upNodes","downNodes","neighbor","intDiv","placeRightToLeft","rightClasses","rightPos","placeRight","NEGATIVE_INFINITY","leftSibling","nodeRightClass","_getLeftWing","leftWing","computeClasses","_getRightWing","rightWing","wingPair","currentWing","wing","ndsinl","_nodesInLink","vnode","wings","classIndex","_isVerticalLayout","_isHorizontalLayout","_isIncreasingLayout","_gridPositionComparer","currentNode","currDown","downNode","placed","sequenceStart","virtualStartIndex","_firstVirtualNode","virtualStart","sequence","_sequencer","virtualEnd","nextVirtualNode","virtualEndIndex","adjustDirections","fromLayerIndex","layerIncrement","maximumHeight","prevBridge","prevBridgeTarget","nextBridge","nextBridgeTarget","getNeighborOnLayer","clayer","j1","j2","_sequenceSingle","combineSequences","pair","leftHeap","_positionDescendingComparer","rightHeap","_positionAscendingComparer","leftRes","rightRes","leftClass","_getComposite","rightClass","it","layoutLayer","gridPos","iconsidered","considered","n1Priority","n2Priority","nodeGridPos","nodeBaryCenter","calcBaryCenter","nodePriority","moveRight","moveLeft","calcDownData","calcUpData","priority","rightNode","rightNodePriority","leftNode","leftNodePriority","mapVirtualNode","nodeToLinkMap","linkToNodeMap","addLinkBetweenLayers","upLayer","downLayer","oLayer","dLayer","oPos","dPos","depthOfDumminess","dedum","prevLink","moves","iter","optimizeLayerCrossings","presorted","n1BaryCenter","n2BaryCenter","compareByIndex","compareValue","inode","maxIterations","downwards","secondPass","hasSwapped","calcCrossings","memCrossings","crossBefore","countLinksCrossingBetweenTwoLayers","node1","node2","node1GridPos","node2GridPos","crossAfter","ulayer","dlayer","link1","link2","n11","n12","n21","n22","l1","l2","crossings","n11gp","n12gp","numerator","denominator","graphOrNodes","diagramOrGraphOrNodes","GraphAdapter","HTMLBase","stylingOptions","_addClasses","previouslyAddedClasses","outerHTML","KBUTTONICON","HTMLButton","iconElement","_textElement","spriteCssClass","newSpan","renderButton","DOT","NEXT","DISABLEDSTATE","ARIA_DISABLED","CLICK","MENU_CLICK","KEYDOWN","FOCUS","cssClasses","baseItem","hidden","IMAGE_TEMPLATE","SPRITE_TEMPLATE","ICON_TEMPLATE","TEXT_TEMPLATE","ITEM_TEMPLATE","LINK_TEMPLATE","findFocusableSibling","getSibling","candidate","ButtonMenu","mainButton","_clickHandlers","_renderList","_renderListItem","menuItem","_renderItemButton","_hide","_popup","_popupOpenHandler","_popupCloseHandler","_popupExpandHandler","adjustPopupWidth","listItemKeydown","destroyPopup","ARIA_EXPANDED","DISABLED","FOCUSSTATE","SplitButton","_renderButtons","_renderMenu","_enable","_aria","arrowIcon","labelSuffix","wrapperId","arrowButton","_getAppearanceClasses","_mainButton","_arrowButton","menu","kendoButtonMenu","menuOpen","menuOpenHandler","menuClose","menuCloseHandler","menuClick","computedWidth","soft","DropDownButton","KBUTTON","OVERFLOW_BUTTON","TOGGLE_BUTTON","BUTTON_GROUP","SPLIT_BUTTON","MENU_BUTTON","KSEPARATOR","SPACER_CLASS","STATE_SELECTED","STATE_DISABLED","STATE_HIDDEN","FORCE_HIDDEN","OVERFLOW_HIDDEN","OVERFLOW_ANCHOR","OVERFLOW_CONTAINER","FIRST_TOOLBAR_VISIBLE","LAST_TOOLBAR_VISIBLE","SPLIT_BUTTON_ARROW","TEMPLATE_ITEM","DROPDOWNLIST","COLORPICKER","INPUT_BUTTON","KFOCUS","ARIA_LEBEL","TOGGLE","SPACER","BOTH","ROLE","BUTTON","SPLITBUTTON","DROPDOWNBUTTON","SEPARATOR","TEMPLATE","INPUT","GROUP","KENDO_FOCUSABLE","OVERFLOW_OPEN","OVERFLOW_CLOSE","OVERFLOW_NEVER","OVERFLOW_AUTO","OPTION_LIST_SUFFIX","KENDO_UID_ATTR","NOTHING","TEXT_ITEM","COMMA","toolbar","overflowAnchor","overflowContainer","registerComponent","Item","addOverflowAttr","addUidAttr","addIdAttr","addOverflowIdAttr","class","overflowHidden","isEnabled","twin","splitContainerId","resizable","BareItem","Button","useButtonTag","primary","togglable","addToGroup","clickHandler","showIcon","showText","getParentGroup","isChild","ToolBarButton","OverflowButton","ButtonGroup","createButtons","buttonConstructor","buttons","ToolBarButtonGroup","buttonGroup","OverflowButtonGroup","ToolBarMenuButton","ToolBarSplitButton","splitButton","_extend","menuButtons","_buttonClick","_close","_open","addMenuAttributes","itemInstance","elmToRemove","OverflowSplitButton","ToolBarDropDownButton","dropDownButton","OverflowTextItem","textItem","OverflowDropDownButton","ToolBarSeparator","OverflowSeparator","ToolBarSpacer","TemplateItem","OverflowTemplateItem","toggleActive","preventClick","ToolBar","TOOLBAR","_groups","isMobile","_renderOverflow","overflowUserEvents","_toggleOverflow","_resizeHandler","_shrink","release","_focusIn","_focusOut","_toggleOverflowAnchor","_tabIndex","navigateOnTab","destroySplitButtons","destroyDropDownButtons","_getItem","overflowTool","inputsInTemplate","itemClasses","overflowTemplate","rootUid","toolbarItem","overflowItem","isResizable","buttonGroupInstance","getSelectedFromGroup","horizontalDirection","isComplexTool","paddingEnd","urlTarget","templateFocusable","_resetTabIndex","innerFocusable","innerWidget","_getItems","templateItem","_getNextElement","focusableItem","_toggle","containerWidth","_markVisibles","_childrenWidth","childrenWidth","commandElement","visibleCommands","_hideItem","hiddenCommands","_showItem","itemOuterWidth","overflowItems","toolbarItems","visibleOverflowItems","visibleToolbarItems","toFocus","focusableItems","firstFocusable","ToggleInputBase","_initSettings","RENDER_INPUT","inputMethod","HTMLInput","labelPosition","encoded","inputClass","labelEl","labelClass","optionalClass","optionalText","wrapperHtml","HTMLCheckBox","HTMLRadioButton","renderCheckBox","renderRadioButton","CheckBox","FOCUSED","STATEDISABLED","NOCLICKCLASS","STATEREADONLY","FloatingLabel","widgetWrapper","_editable","useReadOnlyClass","floatCheck","kendo$1","$$1","Label","_floatingLabel","_label","_unwrapFloating","_floatingLabelContainer","removeFloating","beforeElm","percentageUnitsRegex","HOVER","KSELECTED","LOADING","LIST_UL","FIXED_GROUP_HEADER","ITEMSELECTOR","CASCADE","MOUSEENTER","DATA_BINDING","DATA_BOUND","SELECTED_ITEM_CHANGE","SELECTED","HIDDENCLASS","isIE","quotRegExp","alternativeNames","ComboBox","DropDownList","MultiColumnComboBox","ARIA_ACTIVEDESCENDANT","ARIA_HIDDEN","ARIA_BUSY","ARIA_SELECTED","GROUP_ROW_SEL","List","_isSelect","_listSize","ul","columns","_columnsHeader","_header","_noData","_footer","_accessors","_initValue","footerTemplate","headerTemplate","noDataTemplate","noData","_renderFooter","_renderNoData","_inputLabel","_focused","_floatCheck","_refreshFloatingLabel","_angularElement","before","columnsHeader","colGroup","currentColumn","columnsHeaderTemplate","currentWidthInt","widthStyle","footerEl","_listOptions","changeEventOption","_listChange","listBoundHandler","_listBound","focusedElm","labelledBy","_activateItem","deactivate","_deactivateItem","groupTemplate","fixedGroupTemplate","listSize","_initList","listOptions","selectedItemChange","VirtualList","StaticList","_setListValue","_updateSelectionState","_listMousedown","filterInput","_isFilterEnabled","_hideClear","_showClear","_clearValue","_clearText","_accessor","_customOption","enforceMinLength","highlightFirst","_clearFilter","_filterSource","isMultiColumnFiltering","filterFields","resetPageSettings","removed","removeFiltersForField","_clearFilterExpressions","newExpression","_pushFilterExpression","isValidFilterExpr","_cascading","setDSFilter","dataSourceState","filtersToRemove","_toggleNoData","_toggleHeader","_allowOpening","_old","_ignoreCase","widgetOptions","fromFilter","_buildExpression","_clearButton","clearButton","_inputValue","_typingTimeout","minLength","_emptySearch","_searchByWord","_unbindDataSource","_form","_resetHandler","selectedDataItems","_text","autocomplete","suggest","_userTriggered","_isValueChanged","unifyType","_valueBeforeCascade","_oldIndex","isFiltered","_typing","typing","_dataValue","_offsetHeight","prevAll","_height","popups","isMccb","_openHandler","_adjustListWidth","autoWidth","_closeHandler","_focusItem","noFocusedItem","scrollToIndex","_calculateGroupPadding","groupHeader","_calculatePopupHeight","_calculateColumnsHeaderPadding","_refreshScroll","enableYScroll","_resizePopup","_toggleHover","preventFocus","touchEnabled","MSPointers","_prevent","_triggerCascade","_cascadeTriggered","_cascadedValue","userTriggered","_triggerChange","_requestStartHandler","_requestEndHandler","_errorHandler","requireValueMapper","valueMapper","_initial","_initialIndex","_parentWidget","_cascadeSelect","_cascadeValue","_accessorInput","_accessorSelect","_custom","_syncValueAndText","custom","_hideBusy","_busy","_arrowIcon","_showBusy","_request","_requestEnd","_firstItem","focusFirst","_lastItem","focusLast","_nextItem","focusNext","_prevItem","focusPrev","_getNormalizedDataItem","isIndex","hasOptionLabel","optionLabel","getElementIndex","dataItemByIndex","_getNormalizedSelectCandidate","normalizedCandidate","moveIndex","selectCandidate","_fetch","_get","activeFilter","shouldTrigger","_focusElement","focusout","scrollWith","_fetchData","dataText","dataValue","htmlElement","formId","_cascade","_cascadeHandlerProxy","_cascadeHandler","_cascadeFilterRequests","_selectedValue","_toggleCascadeOnFocus","valueBeforeCascade","_clearSelection","_cascadeChange","filterValue","cascadeFromParentField","cascadeFromField","currentHandler","STATIC_LIST_NS","MOUSELEAVE","_touchHandlers","_optionID","_selectedIndices","_dataItems","_getter","_templates","_createOnScrollProxy","_fixedHeader","startY","endY","itemSelector","tapPosition","_touchTriggered","_triggerClick","_scrollId","itemOffsetTop","itemOffsetHeight","contentScrollTop","contentOffsetHeight","bottomDistance","_getValues","_valueGetter","hasCandidate","focusIndex","skipUpdate","_skipUpdate","singleSelection","selectedIndices","uiSelectedIndices","added","filtered","_deselectFiltered","_deselect","_valueComparer","_valueDeferred","_valueIndices","_onScroll","_renderHeader","_valueExpr","normalized","_valueType","_dataItemPosition","valueExpr","templates","templateText","_normalizeIndices","newIndices","_firstVisibleItem","itemHeight","lastChild","previousSibling","isGrouped","visibleItem","_renderItem","notFirstItem","hasColumns","altRow","isLastGroupedItem","_renderColumns","dataContext","_selected","_lastDSFilter","skipUpdateOnBind","isItemChange","itemsToMatch","selectedLength","unchanged","mapChangedItems","_bound","LIST_ITEM","TABLE_ITEM","GROUPITEM","LISTBOUND","ITEMCHANGE","VIRTUAL_LIST_NS","lastFrom","isPrimitive","placeholderTemplate","renderColumns","webkitTransform","isActivePromise","mockList","contentClasses","_fetching","TABLE_LIST","_selectedDataItems","_selectedIndexes","_rangesList","_promisesList","_renderItems","_triggerListBound","_selectable","listScreens","oppositeBuffer","mapValueTo","itemClass","_selectProxy","_clean","_deferValueSet","mute","_selectingValue","_highlightSelectedItems","_getElementByDataItem","_mute","_createList","_removeSelectedDataItem","_forcePrefetch","_prefetchByValue","_checkValuesOrder","_removedAddedIndexes","dataView","_dataView","forSelection","mapValueToIndex","mapValueToDataItem","_getIndecies","deferredRange","existingRange","isEmptyList","_activeDeferred","_getSkip","_findDataItem","_getRange","triggerEvent","_getElementByIndex","_focusedIndex","_getElementLocation","_screenHeight","heightContainer","isAlreadySelected","prefetchStarted","_selectDeferred","_deselectCurrentValues","_listCreated","_lastScrollTop","hasData","setScreenHeight","yPosition","yDownPostion","screenEnd","_generateItems","_saveInitialRanges","reorder","_buildValueGetter","_setHeight","getList","_listItems","_whenChanged","_reorderList","padHeight","lastRequestedRange","lastRangeStart","rangeStart","flatGroup","groupLength","_getterDeferred","firstItemIndex","_indexConstraint","currentVisibleGroup","firstVisibleDataItemIndex","firstVisibleDataItem","firstVisibleGroup","fixedGroupText","_itemMapper","listType","_currentGroup","_getDataItemsCollection","lastScrollTop","_listIndex","theValidator","downThreshold","upThreshold","listValidator","theNew","currentOffset","list2","range2","reshift","_bufferSizes","opposite","buffers","selectedIndexes","removedindexesCounter","_deselectSingleItem","oldSkip","nsFocusEvent","READONLY","ARIA_READONLY","HOVEREVENTS","STATE_FILTER","STATE_ACCEPT","_focusHandler","_focusInputHandler","_focusInput","_optionLabel","_inputTemplate","_prev","_word","_span","_mobile","_filterHeader","_attachFocusHandlers","_attachAriaActiveDescendant","_textAccessor","_optionLabelText","valueTemplate","optionLabelTemplate","filterTitle","_arrow","_focusFilter","_resizeFilterInput","originalPrevent","isInputActive","_optionLabelDataItem","loweredText","_valueSetter","_assignInstance","_buildOptions","optionLabelValue","initialIndex","_presetValue","_selectValue","_filterPaste","_search","_focusinHandler","_focusoutHandler","isIFrame","self","_wrapperMousedown","_wrapperClick","dropDownWrapper","_keypress","handled","isPopupVisible","_getElementDataItem","_matchText","_shuffleData","splitIndex","optionDataItem","_selectNext","oldFocusedItem","isInLoop","sameCharsOnly","_last","normalizeIndex","charCode","_popupOpen","compareElement","jQueryCandidate","_resetOptionLabel","focusedItem","additionalClass","keepState","arrowBtn","SELECTOR","DOMelement","accesskey","unselectable","optionLabelText","getElements","assign","ARIASELECTED","SELECTABLE","UNSELECT","UNSELECTING","supportEventDelegation","Selectable","dragToSelect","_lastActive","inputSelectors","ignoreOverlapped","addIdToRanges","_isElement","selectedClass","whichCode","buttonCode","_allowSelection","_lastRange","compareElements","selectRange","_firstSelectee","_notify","_unselect","_downTarget","currentElement","useAllItems","_selectElement","_invalidateSelectables","rangeSelectedAttr","_currentlyActive","toSelect","_collidesWithActiveElement","marqueeRect","activeElementRect","activeElements","elemRect","tempRect","selectElement","selectedRanges","rangeId","mapLocation","selectedSingleItems","preventNotify","aria","resetTouchEvents","continuousItems","toCompare","elementPosition","firstRect","secondRect","selectableMode","asLowerString","extractFormat","transitionOrigin","cellTemplate","emptyCellTemplate","otherMonthCellTemplate","weekNumberTemplate","SLIDE","MONTH","CENTURY","NAVIGATE","OTHERMONTH","CELLSELECTOR","CELLSELECTORVALID","MOUSEENTER_WITH_NS","PREVARROW","NEXTARROW","decade","century","HEADERSELECTOR","Calendar","disableDates","getDisabledExpr","_viewWrapper","hasFooter","_today","mousetoggle","toDateObject","_focusView","focusOnNav","_setCurrent","_selectDates","restrictValue","_addClassProxy","_cell","todayString","toDateString","getToday","_cellByDate","_removeClassProxy","selectDates","weekColumnHeader","navigateTo","parentViews","classic","linksSelector","modern","_destroySelectable","_title","_table","_bindTable","_option","navigateToPast","navigateToFuture","navigateUp","navigateDown","isEqualDate","currentView","_oldTable","future","viewWrapper","_changeView","otherMonth","isWeekColumnVisible","addClassToViewContainer","_animate","_visualizeSelectedDatesInView","_selectCell","validSelectedDates","datesUnique","_validateValue","createDate","isInRange","selectedDates","selectableOptions","_onSelect","_onRelatedTarget","_toggleSelection","_cellsBySelector","_addSelectedCellsToArray","_rangeSelection","currentCell","toDateCell","daysDifference","fromDate","daysBetweenTwoDates","addDaysToArray","currentDateIndex","_dateInView","firstDateInView","_isNavigatable","cellIndex","isDisabled","prevent","_todayClick","_keyboardToggleSelection","focusedDate","_nextNavigatable","_keyboardRangeSelection","navigatableDate","insertAfter","_horizontal","viewWidth","_vertical","_selectedCell","actionAttr","isBigger","value1","value2","isEqualMonth","isTodayDisabled","todayClass","_todayClass","_updateAria","ariaTemplate","valueType","firstVisibleDay","calendarInfo","tzOffsetBefore","resultDATE","tzOffsetDiff","getCalendarInfo","navigateUrl","showHeader","hasUrl","currentCalendar","firstDayIdx","shiftArray","shortNames","perRow","build","linkClass","dateString","weekNumberBuild","date1","date2","month1","year1","month2","year2","calendarMonths","namesFull","setMonth","minYear","maxYear","modular","cellsPerRow","otherMonthTemplate","multiplier","endDate","fromDateUTC","endDateUTC","numberOfDays","dateObject","disabledDates","searchExpression","convertDatesArray","createDisabledExpr","oldValue","isEqualDatePart","viewsEnum","INPUT_EVENT_NAME","STATEINVALID","knownSymbols","DateInput","wrapperClass","skipWrapping","_validationIcon","weekday","hour","minute","dayperiod","_unbindInput","_bindInput","_updateElementValue","_formElement","_dateTime","getDateObject","customDateTime","stringAndFormat","toPair","_oldText","_format","_toggleDateMask","toShow","_paste","_input","_mouseUp","blinkInvalid","oldText","oldFormat","newText","oldTextSeparator","deletedSymbol","approximateStringMatching","navigationOnly","valid","parsePart","_selectSegment","difSym","_blinkInvalidState","_addInvalidState","_invalidStateTimeout","_removeInvalidState","_selectNearestSegment","newEvent","returnValue","modifyPart","keycode","initDate","initFormat","initCulture","initMessages","typedMonthPart","typedDayPeriodPart","placeholders","returnsFormat","matcher","mins","formatResult","generateMatcher","retFormat","setExisting","newMonth","currentChar","newHours","lastDateOfMonth","monthNames","newYear","newMinutes","newSeconds","sampleFormat","DIV","MOUSEDOWN","parseFormats","DateView","omitPopup","dateDiv","_dateViewID","_calendar","popupHovered","selectIsClicked","disabledDate","DatePicker","_initialOptions","dateView","_updateARIA","_icon","_createDateInput","_update","ARIATemplate","dateInput","_dateIcon","_dateInput","_navigateCalendarHandler","_navigateCalendar","dateChanged","valueUpdated","textFormatted","stopImmediatePropagation","_setCalendarAttribute","isSameType","optionsValue","_ariaTemplate","placeholderSupported","SPIN","INTEGER_REGEXP","NumericTextBox","inputType","isStep","_focusout","_arrows","_validation","_focusin","selectValue","restrictDecimals","spinners","selectOnFocus","upArrowText","downArrowText","_toggleText","_upArrowEventHandler","_downArrowEventHandler","_spin","_upArrow","_downArrow","_keyup","_inputHandler","_placeholder","_arrowsWrap","_adjust","arrows","_spinning","buttonHtml","_focusing","groupRegExp","extractRegExp","caretPosition","_getFactorValue","_culture","accessKey","_numPadDot","_cachedCaret","_step","decimalSeparator","minInvalid","_isPasted","_numericRegex","fractionRule","_separator","_floatRegExp","truncate","isNotNull","DOMElement","INVALIDMSG","invalidMsgRegExp","INVALIDINPUT","VALIDINPUT","VALIDATIONSUMMARY","INVALIDLABEL","MESSAGEBOX","ARIAINVALID","emailRegExp","urlRegExp","INPUTSELECTOR","CHECKBOXSELECTOR","NUMBERINPUTSELECTOR","BLUR","NAME","FORM","NOVALIDATE","VALIDATE","VALIDATE_INPUT","patternMatcher","hasAttribute","parseHtml","parseHTML","searchForMessageContainer","isLabelFor","validator","allowSubmit","validateOnInit","Validator","resolved","resolvers","ruleResolvers","resolveRules","validateAttributeSelector","_errorTemplate","errorTemplate","_summaryTemplate","validationSummary","_inputSelector","_checkboxSelector","_errors","_isValidated","_validateOnInit","required","email","dateCompare","captcha","noNameCheckbox","namedCheckbox","checkbox","radio","raise","isValidated","isValid","getCaptchaId","_validating","_checkElement","warn","validateOnBlur","_allowSubmit","validateInput","inputs","invalid","showValidationSummary","_checkValidity","lbl","_findMessageContainer","messageText","_extractMessage","messageLabel","wasValid","isInputInner","inputWrapper","lblId","_decorateMessageContainer","nextElement","prevElement","_inputWrapper","inputWrap","inputLabel","errorId","_associateMessageContainer","hideMessages","_disassociateMessageContainers","hideValidationSummary","locators","messageLocators","locate","decorate","ruleKey","nonDefaultMessage","customMessage","_getInputNames","_errorsByName","inputNames","_renderSummary","_summaryClick","errorsList","nameSpecialCharRegExp","EQUAL_SET","specialRules","fieldType","createAttributes","ruleName","validation","DATATYPE","BINDING","stringRule","attributeName","addIdAttribute","kendoEditors","editors","kendoNumericTextBox","kendoDatePicker","kendoTextBox","renderHiddenForMvcCheckbox","kendoCheckBox","convertItems","kendoEditor","editor","editorOptions","tagElement","checkboxes","getEditorTag","mobileEditors","addValidationRules","modelField","shouldRenderHidden","Editable","_isMobile","_validateProxy","_validate","clearContainer","skipFocus","isHidden","isCustomEditor","isKendoEditor","preventChangeTrigger","_validationEventInProgress","bindAttribute","bindingRegex","validatable","modelFields","bindAttr","isAntiForgeryToken","antiForgeryTokenName","convertToValueBinding","MODAL_NS","KWINDOW","KWINDOWTITLE","KWINDOWTITLEBAR","KWINDOWCONTENT","KWINDOWRESIZEHANDLES","KOVERLAY","KHOVERSTATE","KFOCUSEDSTATE","MAXIMIZEDSTATE","INLINE_FLEX","CURSOR","REFRESH","RESIZESTART","RESIZEEND","RESTORE","DATADOCOVERFLOWRULE","ZINDEX","MINIMIZE_MAXIMIZE","KPIN","KUNPIN","PIN_UNPIN","TITLEBAR_BUTTONS","REFRESHICON","WINDOWEVENTSHANDLED","zero","SIZE","small","medium","large","toInt","constrain","executableScript","getPosition","offsetLeft","parentOverflowX","parentOverflowY","Window","windowContent","globalWindow","suppressActions","actions","containment","_createWindow","_dimensions","minTop","minLeft","maxTop","maxLeft","_overlay","_buttonEnter","_buttonLeave","_windowActionHandler","_keydownContent","not","_draggable","pinned","pin","_onDocumentResize","_marker","_tabKeyTrap","maxHeight","sizeClass","contentBoxSizing","lrBorderWidth","tbBorderWidth","_isPinned","_updateBoundaries","containmentTop","containmentLeft","_animationOptions","resizing","toggleMaximization","resizeHandle","WindowResizing","WindowDragging","dragHandle","_actions","windowSpecificCommands","cachedOptions","_containerScrollTop","_containerScrollLeft","_enableDocumentScrolling","fade","autoFocus","isMaximized","isMinimized","_closable","newWidth","newHeight","unpin","maximize","minimize","preventScroll","_stopDocumentScrolling","_actionForIcon","_modals","windowInstance","windowElements","modals","_object","newTop","newLeft","documentWindow","_scrollIsAppended","titleBar","titleElement","titlebar","scrollContainer","otherModalsVisible","showOptions","Fade","overlayFx","fadeIn","_removeOverlay","suppressAnimation","hideOverlay","hideOptions","systemTriggered","defaultPrevented","lastModal","_actionable","_shouldFocus","avoidFocus","currentWindow","containmentContext","openAnimation","originalZIndex","windowObject","zIndexNew","windowTop","restoreOptions","_sizingAction","actionId","_storeOverflowRule","$body","$html","_restoreOverflowRule","$element","_isOverflowStored","overflowRule","win","wnd","contentFrame","_triggerRefresh","_ajaxComplete","_loadingIconTimeout","_ajaxError","_ajaxSuccess","_showLoading","iframeSrcAttributes","contentHtml","_preventDragging","dragstart","dragend","addOverlay","removeOverlay","dragcancel","resizeDirection","initialSize","containerOffset","wrapperPosition","relativeElMarginLeft","relativeElMarginTop","_relativeElMarginLeft","_relativeElMarginTop","windowBottom","windowRight","leftRtlOffset","scrollOffset","newWindowTop","initialWindowPosition","initialPointerPosition","_finishDrag","CASCADING","MAXINT","ITEMROTATE","PAN","TRANSFORMED","DefaultConnectors","defaultButtons","imageClass","isAutoConnector","closestConnector","resCtr","minimumDistance","indicesOfItems","extra","DiagramElement","serializable","_content","_contentVisual","_updateContentVisual","_createContentVisual","elementTemplate","_canSelect","Connector","shapeId","tempStr","updateOptionsFromModel","createShapeVisual","updateBounds","_createConnectors","_setOptionsFromModel","modelOptions","filterShapeDataItem","redrawVisual","_isEditable","_redrawVisual","syncChanges","_suspendModelRefresh","_resumeModelRefresh","_rotate","_alignContent","contentVisual","containerRect","aligner","contentBounds","contentRect","alignedBounds","_transformedBounds","_rotatedBounds","_setBounds","_triggerBoundsChange","_layouting","refreshConnections","cloneDataItem","deselected","_internalSelection","_selectionChanged","deltaAngle","newPosition","sc","cons","nameOrPoint","_transformPoint","boundsChange","shapeOptions","shapeVisual","_visualOptions","_updateConnectors","_showConnectors","rotatedPoint","visualTemplate","_initRouter","_sourcePoint","_targetPoint","_setSource","_setTarget","definers","fromConnector","toConnector","dataMap","_dataMap","fromX","fromY","toX","toY","filterConnectionDataItem","connectionsDataSource","clearField","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","router","passRoute","exclude","_getRouteExclude","_shapesQuadTree","hitTestRect","_isPointInsideShape","boundsX","boundsY","Diagram","_initElements","_extendLayoutOptions","_initDefaults","_interactionDefaults","_initCanvas","adornerLayer","_createHandlers","_clipboard","pauseMouseHandlers","_fetchFreshData","_createGlobalToolBar","_createOptionElements","toolBar","DiagramToolBar","_toolBarClick","createShape","createModel","_createShape","edit","createConnection","_connectionsDataMap","addConnection","editModel","editorType","cancelEdit","shapeEditors","shapeTemplate","connectionSelectorHandler","connectionSelector","connectionEditors","connectionTemplate","PopupEditor","_editArgs","_getEditDataSource","_destroyEditor","saveEdit","userShapeDefaults","copyDefaultOptions","canvasContainer","viewPort","_userEvents","_dragStart","_gestureStart","_gestureChange","_gestureEnd","doubleTap","_mouseMove","_mouseDown","_syncHandler","_pauseMouseHandlers","_eventPositions","_meta","_createToolBar","focused","ctrlPressed","origEvent","documentToModel","initialCenter","_gesture","_initialCenter","documentToView","updateZoom","_getValidZoom","zoomedPoint","_panTransform","_updateAdorners","pointPosition","shapesLength","_createShapes","_createConnections","_findConnectionTarget","destroyScroller","_destroyGlobalToolBar","_parseBounds","splitDiagramElements","_removeItem","_removeShapeDataItem","_removeConnectionDataItem","_getDiagramItems","_fixOrdering","bringIntoView","newPan","_zoomMainLayer","alignShapes","_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","singleToolBar","popupZIndex","popupWidth","popupHeight","connectionBounds","_normalizePointZoom","InactiveItemsCollection","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","createPopup","kendoPopup","getKendoPopup","_toolBar","kendoToolBar","getKendoToolBar","createTool","toolName","_setAttributes","editTool","deleteTool","rotateAnticlockwiseTool","_appendGroup","_rotateGroup","rotateClockwiseTool","createShapeTool","_createGroup","createConnectionTool","undoTool","_historyGroup","redoTool","_getAttributes","selectedElements","selectedElemens","rotateClockwise","rotateAnticlockwise","Editor","_getFields","createEditable","formContent","_renderTemplate","_renderFields","_cancelClick","_attachButtonEvents","_createButton","_cancelClickHandler","_updateClickHandler","_updateClick","_editUpdateClickHandler","kendoDropDownList","InactiveItem","deffered","_testRect","overlapsBounds","childIdx","shapeIdx","boundsChangeHandler","_boundsChange","rootSize","xIdx","yIdx","mainOptions","ITEM_CREATED","TreeMap","_setLayout","colorField","_layout","SliceAndDice","SliceAndDiceView","Squarified","SquarifiedView","_onDataChange","_wrapItem","htmlSize","compute","_setColors","_cleanItems","createRoot","_colorIdx","colorRange","minRGBtoDecimal","rgbToDecimal","maxRGBtoDecimal","isDarker","colorBrightness","rgbColor","colorByIndex","buildColorFromRGB","colorsByLength","leafNodes","_contentSize","renderHeight","findByUid","_removeActiveState","_resizeItems","setItemSize","leaf","layoutChildren","parentArea","totalArea","itemsArea","minimumSideValue","layoutHorizontal","squarify","initElement","computeDim","worstAspectRatio","newCoords","layoutRow","layoutLast","layoutV","layoutH","layoutVertical","layoutChange","areaSum","maxArea","rootCoord","newRootCoord","_totalArea","ans","_createTitle","_compile","_createWrap","rootWrap","_createLeaf","_createTile","_tileColorBrightness","_itemCoordinates","titleTemplate","sliceAndDice","minColor","maxColor","currentStep","decimalToRgb","colorLength","colorToRGB","rgbToHex","$defaultCompile","OPTIONS_NOW","toDataSource","module","$injector","$parse","$timeout","$log","createDataSource","TreeList","TreeView","Scheduler","PivotGrid","PivotConfigurator","PanelBar","Menu","ContextMenu","$eval","$watch","mew","ignoredAttributes","kDataSource","kOptions","kRebind","kNgModel","kNgDelay","ignoredOwnProperties","formRegExp","kendoRenderedTimeout","RENDERED","origAttr","require","controller","$scope","$attrs","setTemplate","_cleanUp","controllers","roleattr","createWidget","$emit","$setPristine","TAGNAMES","DateTimePicker","TimePicker","AutoComplete","ColorPicker","MaskedTextBox","Upload","MobileButton","MobileBackButton","MobileDetailButton","ListView","MobileListView","ScrollView","ActionSheet","Switch","SKIP_SHORTCUTS","MANUAL_DIRECTIVES","directive","pendingPatches","defadvice","klass","make","directiveName","directiveFactory","shortcut","dashed","scopeField","kScopeField","createDirectives","$angular_scope","$angular_init","withoutTimeout","itemScope","$$kendoScope","$destroy","destroyScope","vars","$new","digest","$angular_makeEventHandler","kendoEvent","elems","colIdx","locals","_checkBoxSelection","angularDataItem","templateSettings","terminal","pre","post","_scroller","kAttr","templateDirectives","WIDGET_TEMPLATE_OPTIONS","MobileScrollView","Pager","templateName","delayValue","ngModel","ngForm","ctor","parsed","unresolved","unwatch","createIt","$root","unregister","$attr","$apply","originalElement","kendoWidget","exposeWidget","destroyRegister","deregister","$on","destroyWidgetOnScopeDestroy","rebindAttr","templateOptions","templateContents","replaceChild","setupRebind","kNgDisabled","bindToKNgDisabled","kNgReadonly","isReadonly","bindToKNgReadonly","bindToKNgModel","haveChangeOnElement","isForm","formValue","viewRender","$viewValue","$modelValue","$render","onChange","formPristine","$pristine","$setViewValue","currentVal","$isEmpty","bindToNgModel","MutationObserver","prevClassList","mo","changes","chg","currClassList","disconnect","propagateClassToWidgetWrapper","optionsPath","addOption","scopeValue","widgetEvents","dataName","eventKey","optionName","DateRangePicker","rangePickerEndModel","rangePickerModels","rangePickerStartModel","_startDateInput","_endDateInput","updating","valueIsCollection","RangeSlider","currentValueLength","$angular_setLogicValue","watchHandler","$watchCollection","changeHandler","$setDirty","$angular_getLogicValue","isDigesting","origMethod","eventProxy","_triggerTouch","gestureEventProxy","enableSwipe","_swipestart","_swipemove","_dragstart","minXDelta","maxYDelta","maxDuration","doubleTapTimeout","lastTap","BEFORE_SHOW","AFTER_SHOW","BEFORE_HIDE","initPopOvers","popovers","preventScrollIfNotInput","initWidgets","inited","_invokeNgController","_padIfNativeScrolling","isAndroid","skin","isAndroidForced","hasPlatformIndependentSkin","topContainer","bottomContainer","scrollerContent","idAttrValue","_callController","platform","previousView","LOAD_START","LOAD_COMPLETE","errorMessage","rootNeeded","_getLayout","_setupLayouts","showClosure","serverNavigation","_loadView","modalViews","_xhr","_xhrComplete","CAPTURE_EVENTS","Loader","captureEvents","_attachCapture","changeMessage","transitionDone","EXTERNAL","HREF","SKIP_TRANSITION_ON_BACK_BUTTON","WIDGET_RELS","collapsible","historyCallback","viewEngine","_historyNavigate","_historyReplace","closeActiveDialogs","viewShow","loadStart","loadComplete","sameViewRequested","viewTypeDetermined","_setPortraitWidth","_setupAppLinks","navigateToInitial","portraitWidth","bindToRouter","attrUrl","hideLoading","showLoading","changeLoadingMessage","pressedButtonSelector","buttonSelectors","_mouseup","_appLinkClick","delayedTouchEnd","openFor","paneContainer","DIRECTIONS","ANIMATION","containerPopup","PopOver","initialOpen","Shim","app","osname","ioswp","shim","prevented","BEFORE_OPEN","ModalView","_shim","SWIPE_TO_OPEN","AFTER_HIDE","NULL_VIEW","Drawer","drawer","_viewShow","_attachTransition","swipeToOpen","leftPositioned","swipeToOpenViews","_moveViewTo","_currentViewIncludedIn","_setAsCurrent","canMoveLeft","canMoveRight","leftSwipe","limitedPosition","pastHalf","velocityThreshold","SplitView","_style","_paramsHistory","expandedPaneShim","_shimUserEvents","collapsePanes","expandPanes","BERRYPHONEGAP","CHROME","BROKEN_WEBVIEW_RESIZE","INITIALLY_HORIZONTAL","MOBILE_PLATFORMS","ios7","viewportTemplate","usedWithBlock","systemMeta","clipTemplate","ENABLE_CLIP","iconMeta","HIDEBAR","HISTORY_TRANSITION","BARCOMPENSATION","SCREEN","HEAD","isOrientationHorizontal","getOrientationClass","setMinimumHeight","applyViewportHeight","Application","bootstrap","_setupPlatform","_attachMeta","_setupElementClass","_attachHideBarHandlers","startHistory","updateDocumentTitle","_setupDocumentTitle","_startHistory","hideAddressBar","browserHistory","historyTransition","statusBarStyle","retina","setDefaultPlatform","variant","noVariantSet","osCssClass","refreshBackgroundColorProxy","wp8Background","_resizeToScreenHeight","includeStatusBar","_clearExistingMeta","hideBar","_hideBar","_initialHeight","defaultTitle","COMMAND","cancelTemplate","ShimClass","_closeProxy","_shimHideProxy","_shimHide","actionData","ANDROID3UP","highlightButton","deactivateTimeoutID","createBadge","useTap","clickOn","_timeoutDeactivate","badgeElement","iconSpan","BackButton","DetailButton","DISABLE","_button","selectOn","buttongroup","COLLAPSED","EXPANDED","ANIMATED","EXAPND","COLLAPSE","Collapsible","_buildHeader","collapsed","inset","collapseIcon","expandIcon","iconPosition","instant","_getContentHeight","HIGHLIGHT_SELECTOR","ICON_SELECTOR","GROUP_CLASS","GROUP_TEMPLATE","SEARCH_TEMPLATE","STYLED","DATABINDING","ITEM_CHANGE","whitespaceRegExp","buttonRegExp","whitespace","TEXT_NODE","addIcon","putAt","HeaderFixer","_shouldFixHeaders","headerFixer","cacheHeaders","_cacheHeaders","_scrollHandler","_fixHeader","fixedHeaders","headerPair","currentHeader","DEFAULT_PULL_PARAMETERS","RefreshHandler","pullParameters","pull","_pulled","_first","endReached","prevItem","itemConstructor","below","averageItemHeight","remainingItemsCount","batchUpdate","initialOffset","lastDirection","above","nextIndex","lastTop","topBorder","VirtualListViewItem","setDataItem","LOAD_ICON","VirtualListViewLoadingIndicator","_loadIcon","VirtualListViewPressToLoadMore","_loadButton","loadMoreText","loadMore","kendoMobileButton","_hideShowButton","_showLoadButton","VirtualListViewItemBinder","chromeHeight","pressToLoadMore","virtualViewSize","updateScrollerSize","updateSize","ListViewItemBinder","itemBinder","_progressHandler","prependOnRefresh","appendOnRefresh","groupedMode","findByDataItem","_shouldShowLoading","replaceGrouped","endlessScroll","ListViewFilter","filterable","autoFilter","searchInput","_oldFilter","_filterChange","_dataSourceChange","_refreshInput","appliedFilters","_applyFilter","scrollTreshold","scrollThreshold","_headerFixer","_itemsCache","_itemBinder","_pullToRefreshHandler","_enhanceItems","emptyDataSource","_scrollerInstance","triggerChange","newItem","_dim","clicked","plainItem","templateProxy","groupTemplateProxy","_headerTemplate","buttonElement","_styleGroups","rootItems","enhanced","itemAndDetailButtons","enhanceLinkItem","enhanceItem","NavBar","leftElement","rightElement","noTitle","showTitle","CHANGING","CURRENT_PAGE_CLASS","VIRTUAL_PAGE_CLASS","CLEANUP","scrollView","_changeProxy","_refreshProxy","pageHTML","pageCount","ScrollViewPager","ElasticPane","updateDimension","transitionTo","ScrollViewElasticPane","ScrollViewContent","_getPages","contentHeight","enablePager","pagerOverlay","paneMoved","swipeType","bounce","nextPage","approx","minSnap","maxSnap","currentPage","updatePage","forcePageUpdate","resizeTo","pageElements","containerHeight","pager","_paged","VirtualScrollViewContent","_initPages","_buffer","_pendingPageRefresh","_pendingWidgetRefresh","_resetPages","itemsPerPage","_onResize","_resetProxy","_onReset","_endReachedProxy","_onEndReached","emptyTemplate","emptyTemplateProxy","Page","setWidth","_repositionPages","_updatePagesContent","thresholdPassed","isEndReached","_cancelMove","_moveBackward","_moveForward","setPageContent","_resetMovable","theContent","VirtualPage","transitionEnd","_transitionEnd","dragStart","dragEnd","_syncWithContent","mobileContainer","viewInit","bounceVelocityThreshold","prevPage","SWITCHON","SWITCHOFF","MARGINLEFT","ACTIVE_STATE","TRANSFORMSTYLE","SWITCH_MARKUP","onLabel","offLabel","snapPoint","_animateBackground","handleWidth","minLimit","maxLimit","_stop","ACTIVE_STATE_CLASS","TabStrip","_buildButton","switchTo","tab","tabs","_setActiveItem","switchByFullUrl","currentItem","tabstrip"],"sources":["kendo.dataviz.mobile.js"],"mappings":"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","sourcesContent":["(function (factory) {\n typeof define === 'function' && define.amd ? define(['jquery'], factory) :\n factory();\n})((function () {\n var __meta__$14 = {\n id: \"core\",\n name: \"Core\",\n category: \"framework\",\n description: \"The core of the Kendo framework.\"\n };\n\n var packageMetadata = {\n name: '@progress/kendo-ui',\n productName: 'Kendo UI',\n productCodes: ['KENDOUICOMPLETE', 'KENDOUI', 'KENDOUI', 'KENDOUICOMPLETE'],\n publishDate: 0,\n version: '2022.3.1109'.replace(/^\\s+|\\s+$/g, ''),\n licensingDocsUrl: 'https://docs.telerik.com/kendo-ui/intro/installation/using-license-code'\n };\n\n\n (function($, window, undefined$1) {\n var kendo = window.kendo = window.kendo || { cultures: {} },\n extend = $.extend,\n each = $.each,\n isArray = Array.isArray,\n noop = $.noop,\n math = Math,\n Template,\n JSON = window.JSON || {},\n support = {},\n percentRegExp = /%/,\n formatRegExp = /\\{(\\d+)(:[^\\}]+)?\\}/g,\n boxShadowRegExp = /(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+)?/i,\n numberRegExp = /^(\\+|-?)\\d+(\\.?)\\d*$/,\n FUNCTION = \"function\",\n STRING = \"string\",\n NUMBER = \"number\",\n OBJECT = \"object\",\n NULL = \"null\",\n BOOLEAN = \"boolean\",\n UNDEFINED = \"undefined\",\n PREFIX = \"prefix\",\n ARIA_LABELLEDBY = \"aria-labelledby\",\n ARIA_LABEL = \"aria-label\",\n LABELIDPART = \"_label\",\n getterCache = {},\n setterCache = {},\n slice = [].slice,\n cssPropertiesNames = [ \"themeColor\", \"fillMode\", \"shape\", \"size\", \"rounded\", \"positionMode\" ],\n // avoid extending the depricated properties in latest verions of jQuery\n noDepricateExtend = function() {\n var arguments$1 = arguments;\n\n var src, copyIsArray, copy, name, options, clone,\n target = arguments[ 0 ] || {},\n i = 1,\n length = arguments.length,\n deep = false;\n\n // Handle a deep copy situation\n if ( typeof target === \"boolean\" ) {\n deep = target;\n\n // skip the boolean and the target\n target = arguments[ i ] || {};\n i++;\n }\n\n // Handle case when target is a string or something (possible in deep copy)\n if ( typeof target !== \"object\" && typeof target !== \"function\") {\n target = {};\n }\n\n // extend jQuery itself if only one argument is passed\n if ( i === length ) {\n target = this;\n i--;\n }\n\n for ( ; i < length; i++ ) {\n\n // Only deal with non-null/undefined values\n if ( ( options = arguments$1[ i ] ) != null ) {\n\n // Extend the base object\n for ( name in options ) {\n // filters, concat and : properties are depricated in the jQuery 3.3.0\n // accessing these properties throw a warning when jQuery migrate is included\n if (name == \"filters\" || name == \"concat\" || name == \":\") {\n continue;\n }\n src = target[ name ];\n copy = options[ name ];\n\n // Prevent never-ending loop\n if ( target === copy ) {\n continue;\n }\n\n // Recurse if we're merging plain objects or arrays\n if ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n ( copyIsArray = Array.isArray( copy ) ) ) ) {\n\n if ( copyIsArray ) {\n copyIsArray = false;\n clone = src && Array.isArray( src ) ? src : [];\n\n } else {\n clone = src && jQuery.isPlainObject( src ) ? src : {};\n }\n\n // Never move original objects, clone them\n target[ name ] = noDepricateExtend( deep, clone, copy );\n\n // Don't bring in undefined values\n } else if ( copy !== undefined$1 ) {\n target[ name ] = copy;\n }\n }\n }\n }\n\n // Return the modified object\n return target;\n };\n\n kendo.version = \"2022.3.1109\".replace(/^\\s+|\\s+$/g, '');\n\n function Class() {}\n\n Class.extend = function(proto) {\n var base = function() {},\n member,\n that = this,\n subclass = proto && proto.init ? proto.init : function() {\n that.apply(this, arguments);\n },\n fn;\n\n base.prototype = that.prototype;\n fn = subclass.fn = subclass.prototype = new base();\n\n for (member in proto) {\n if (proto[member] != null && proto[member].constructor === Object) {\n // Merge object members\n fn[member] = extend(true, {}, base.prototype[member], proto[member]);\n } else {\n fn[member] = proto[member];\n }\n }\n\n fn.constructor = subclass;\n subclass.extend = that.extend;\n\n return subclass;\n };\n\n Class.prototype._initOptions = function(options) {\n this.options = deepExtend({}, this.options, options);\n };\n\n var isFunction = kendo.isFunction = function(fn) {\n return typeof fn === \"function\";\n };\n\n var preventDefault = function() {\n this._defaultPrevented = true;\n };\n\n var isDefaultPrevented = function() {\n return this._defaultPrevented === true;\n };\n\n var Observable = Class.extend({\n init: function() {\n this._events = {};\n },\n\n bind: function(eventName, handlers, one) {\n var that = this,\n idx,\n eventNames = typeof eventName === STRING ? [eventName] : eventName,\n length,\n original,\n handler,\n handlersIsFunction = typeof handlers === FUNCTION,\n events;\n\n if (handlers === undefined$1) {\n for (idx in eventName) {\n that.bind(idx, eventName[idx]);\n }\n return that;\n }\n\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n eventName = eventNames[idx];\n\n handler = handlersIsFunction ? handlers : handlers[eventName];\n\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\n return that;\n },\n\n one: function(eventNames, handlers) {\n return this.bind(eventNames, handlers, true);\n },\n\n first: function(eventName, handlers) {\n var that = this,\n idx,\n eventNames = typeof eventName === STRING ? [eventName] : eventName,\n length,\n handler,\n handlersIsFunction = typeof handlers === FUNCTION,\n events;\n\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n eventName = eventNames[idx];\n\n handler = handlersIsFunction ? handlers : handlers[eventName];\n\n if (handler) {\n events = that._events[eventName] = that._events[eventName] || [];\n events.unshift(handler);\n }\n }\n\n return that;\n },\n\n trigger: function(eventName, e) {\n var that = this,\n events = that._events[eventName],\n idx,\n length;\n\n if (events) {\n e = e || {};\n\n e.sender = that;\n\n e._defaultPrevented = false;\n\n e.preventDefault = preventDefault;\n\n e.isDefaultPrevented = isDefaultPrevented;\n\n events = events.slice();\n\n for (idx = 0, length = events.length; idx < length; idx++) {\n events[idx].call(that, e);\n }\n\n return e._defaultPrevented === true;\n }\n\n return false;\n },\n\n unbind: function(eventName, handler) {\n var that = this,\n events = that._events[eventName],\n idx;\n\n if (eventName === undefined$1) {\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\n return that;\n }\n });\n\n\n function compilePart(part, stringPart) {\n if (stringPart) {\n return \"'\" +\n part.split(\"'\").join(\"\\\\'\")\n .split('\\\\\"').join('\\\\\\\\\\\\\"')\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/\\t/g, \"\\\\t\") + \"'\";\n } else {\n var first = part.charAt(0),\n rest = part.substring(1);\n\n if (first === \"=\") {\n return \"+(\" + rest + \")+\";\n } else if (first === \":\") {\n return \"+$kendoHtmlEncode(\" + rest + \")+\";\n } else {\n return \";\" + part + \";$kendoOutput+=\";\n }\n }\n }\n\n var argumentNameRegExp = /^\\w+/,\n encodeRegExp = /\\$\\{([^}]*)\\}/g,\n escapedCurlyRegExp = /\\\\\\}/g,\n curlyRegExp = /__CURLY__/g,\n escapedSharpRegExp = /\\\\#/g,\n sharpRegExp = /__SHARP__/g,\n zeros = [\"\", \"0\", \"00\", \"000\", \"0000\"];\n\n Template = {\n paramName: \"data\", // name of the parameter of the generated template\n useWithBlock: true, // whether to wrap the template in a with() block\n render: function(template, data) {\n var idx,\n length,\n html = \"\";\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n html += template(data[idx]);\n }\n\n return html;\n },\n compile: function(template, options) {\n var settings = extend({}, this, options),\n paramName = settings.paramName,\n argumentName = paramName.match(argumentNameRegExp)[0],\n useWithBlock = settings.useWithBlock,\n functionBody = \"var $kendoOutput, $kendoHtmlEncode = kendo.htmlEncode;\",\n fn,\n parts,\n idx;\n\n if (isFunction(template)) {\n return template;\n }\n\n functionBody += useWithBlock ? \"with(\" + paramName + \"){\" : \"\";\n\n functionBody += \"$kendoOutput=\";\n\n parts = template\n .replace(escapedCurlyRegExp, \"__CURLY__\")\n .replace(encodeRegExp, \"#=$kendoHtmlEncode($1)#\")\n .replace(curlyRegExp, \"}\")\n .replace(escapedSharpRegExp, \"__SHARP__\")\n .split(\"#\");\n\n for (idx = 0; idx < parts.length; idx ++) {\n functionBody += compilePart(parts[idx], idx % 2 === 0);\n }\n\n functionBody += useWithBlock ? \";}\" : \";\";\n\n functionBody += \"return $kendoOutput;\";\n\n functionBody = functionBody.replace(sharpRegExp, \"#\");\n\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\n function pad(number, digits, end) {\n number = number + \"\";\n digits = digits || 2;\n end = digits - number.length;\n\n if (end) {\n return zeros[digits].substring(0, end) + number;\n }\n\n return number;\n }\n\n //JSON stringify\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,\n gap,\n indent,\n meta = {\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": '\\\\\"',\n \"\\\\\": \"\\\\\\\\\"\n },\n rep,\n toString = {}.toString;\n\n\n if (typeof Date.prototype.toJSON !== FUNCTION) {\n\n Date.prototype.toJSON = function() {\n var that = this;\n\n return isFinite(that.valueOf()) ?\n pad(that.getUTCFullYear(), 4) + \"-\" +\n pad(that.getUTCMonth() + 1) + \"-\" +\n pad(that.getUTCDate()) + \"T\" +\n pad(that.getUTCHours()) + \":\" +\n pad(that.getUTCMinutes()) + \":\" +\n pad(that.getUTCSeconds()) + \"Z\" : null;\n };\n\n String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function() {\n return this.valueOf();\n };\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 :\n \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\" : \"\\\"\" + string + \"\\\"\";\n }\n\n function str(key, holder) {\n var i,\n k,\n v,\n length,\n mind = gap,\n partial,\n value = holder[key],\n type;\n\n if (value && typeof value === OBJECT && typeof value.toJSON === FUNCTION) {\n value = value.toJSON(key);\n }\n\n if (typeof rep === FUNCTION) {\n value = rep.call(holder, key, value);\n }\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 \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\" :\n \"[\" + 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\n v = partial.length === 0 ? \"{}\" : gap ?\n \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\" :\n \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n if (typeof JSON.stringify !== FUNCTION) {\n JSON.stringify = function(value, replacer, space) {\n var i;\n gap = \"\";\n indent = \"\";\n\n if (typeof space === NUMBER) {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n } else if (typeof space === STRING) {\n indent = space;\n }\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\n return str(\"\", { \"\": value });\n };\n }\n })();\n\n // Date and Number formatting\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,\n standardFormatRegExp = /^(n|c|p|e)(\\d*)$/i,\n literalRegExp = /(\\\\.)|(['][^']*[']?)|([\"][^\"]*[\"]?)/g,\n commaRegExp = /\\,/g,\n EMPTY = \"\",\n POINT = \".\",\n COMMA = \",\",\n SHARP = \"#\",\n ZERO = \"0\",\n PLACEHOLDER = \"??\",\n EN = \"en-US\",\n objectToString = {}.toString;\n\n //cultures\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 decimals: 2,\n \",\": \",\",\n \".\": \".\",\n groupSize: [3],\n symbol: \"%\"\n },\n currency: {\n name: \"US Dollar\",\n abbr: \"USD\",\n pattern: [\"($n)\", \"$n\"],\n decimals: 2,\n \",\": \",\",\n \".\": \".\",\n groupSize: [3],\n symbol: \"$\"\n }\n },\n calendars: {\n standard: {\n days: {\n names: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n namesAbbr: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n namesShort: [ \"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\" ]\n },\n months: {\n names: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n namesAbbr: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n },\n AM: [ \"AM\", \"am\", \"AM\" ],\n PM: [ \"PM\", \"pm\", \"PM\" ],\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\n\n function findCulture(culture) {\n if (culture) {\n if (culture.numberFormat) {\n return culture;\n }\n\n if (typeof culture === STRING) {\n var cultures = kendo.cultures;\n return cultures[culture] || cultures[culture.split(\"-\")[0]] || null;\n }\n\n return null;\n }\n\n return null;\n }\n\n function getCulture(culture) {\n if (culture) {\n culture = findCulture(culture);\n }\n\n return culture || kendo.cultures.current;\n }\n\n kendo.culture = function(cultureName) {\n var cultures = kendo.cultures, culture;\n\n if (cultureName !== undefined$1) {\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\n kendo.findCulture = findCulture;\n kendo.getCulture = getCulture;\n\n //set current culture to en-US.\n kendo.culture(EN);\n\n function formatDate(date, format, culture) {\n culture = getCulture(culture);\n\n var calendar = culture.calendars.standard,\n days = calendar.days,\n months = calendar.months;\n\n format = calendar.patterns[format] || format;\n\n return format.replace(dateFormatRegExp, function(match) {\n var minutes;\n var result;\n var sign;\n\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\n result = math.abs(minutes / 60).toString().split(\".\")[0];\n minutes = math.abs(minutes) - (result * 60);\n\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\n result = math.abs(result).toString().split(\".\")[0];\n result = (sign ? \"+\" : \"-\") + (match === \"zz\" ? pad(result) : result);\n }\n\n return result !== undefined$1 ? result : match.slice(1, match.length - 1);\n });\n }\n\n //number formatting\n function formatNumber(number, format, culture) {\n culture = getCulture(culture);\n\n var numberFormat = culture.numberFormat,\n decimal = numberFormat[POINT],\n precision = numberFormat.decimals,\n pattern = numberFormat.pattern[0],\n literals = [],\n symbol,\n isCurrency, isPercent,\n customPrecision,\n formatAndPrecision,\n negative = number < 0,\n integer,\n fraction,\n integerLength,\n fractionLength,\n replacement = EMPTY,\n value = EMPTY,\n idx,\n length,\n ch,\n hasGroup,\n hasNegativeFormat,\n decimalIndex,\n sharpIndex,\n zeroIndex,\n hasZero, hasSharp,\n percentIndex,\n currencyIndex,\n startZeroIndex,\n start = -1,\n end;\n\n //return empty string if no number\n if (number === undefined$1) {\n return EMPTY;\n }\n\n if (!isFinite(number)) {\n return number;\n }\n\n //if no format then return number.toString() or number.toLocaleString() if culture.name is not defined\n if (!format) {\n return culture.name.length ? number.toLocaleString() : number.toString();\n }\n\n formatAndPrecision = standardFormatRegExp.exec(format);\n\n // standard formatting\n if (formatAndPrecision) {\n format = formatAndPrecision[1].toLowerCase();\n\n isCurrency = format === \"c\";\n isPercent = format === \"p\";\n\n if (isCurrency || isPercent) {\n //get specific number format information if format is currency or percent\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\n customPrecision = formatAndPrecision[2];\n\n if (customPrecision) {\n precision = +customPrecision;\n }\n\n //return number in exponential format\n if (format === \"e\") {\n var exp = customPrecision ? number.toExponential(precision) : number.toExponential(); // toExponential() and toExponential(undefined) differ in FF #653438.\n\n return exp.replace(POINT, numberFormat[POINT]);\n }\n\n // multiply if format is percent\n if (isPercent) {\n number *= 100;\n }\n\n number = round(number, precision);\n negative = number < 0;\n number = number.split(POINT);\n\n integer = number[0];\n fraction = number[1];\n\n //exclude \"-\" if number is negative.\n if (negative) {\n integer = integer.substring(1);\n }\n\n value = groupInteger(integer, 0, integer.length, numberFormat);\n\n if (fraction) {\n value += decimal + fraction;\n }\n\n if (format === \"n\" && !negative) {\n return value;\n }\n\n number = EMPTY;\n\n for (idx = 0, length = pattern.length; idx < length; idx++) {\n ch = pattern.charAt(idx);\n\n if (ch === \"n\") {\n number += value;\n } else if (ch === \"$\" || ch === \"%\") {\n number += symbol;\n } else {\n number += ch;\n }\n }\n\n return number;\n }\n\n //custom formatting\n //\n //separate format by sections.\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(\"\\\\\", \"\"),\n literal = match.slice(1).replace(quoteChar, \"\");\n\n literals.push(literal);\n\n return PLACEHOLDER;\n });\n }\n\n format = format.split(\";\");\n if (negative && format[1]) {\n //get negative format\n format = format[1];\n hasNegativeFormat = true;\n } else if (number === 0 && format[2]) {\n //format for zeros\n format = format[2];\n if (format.indexOf(SHARP) == -1 && format.indexOf(ZERO) == -1) {\n //return format if it is string constant.\n return format;\n }\n } else {\n format = format[0];\n }\n\n percentIndex = format.indexOf(\"%\");\n currencyIndex = format.indexOf(\"$\");\n\n isPercent = percentIndex != -1;\n isCurrency = currencyIndex != -1;\n\n //multiply number if the format has percent\n if (isPercent) {\n number *= 100;\n }\n\n if (isCurrency && format[currencyIndex - 1] === \"\\\\\") {\n format = format.split(\"\\\\\").join(\"\");\n isCurrency = false;\n }\n\n if (isCurrency || isPercent) {\n //get specific number format information if format is currency or percent\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n decimal = numberFormat[POINT];\n precision = numberFormat.decimals;\n symbol = numberFormat.symbol;\n }\n\n hasGroup = format.indexOf(COMMA) > -1;\n if (hasGroup) {\n format = format.replace(commaRegExp, EMPTY);\n }\n\n decimalIndex = format.indexOf(POINT);\n length = format.length;\n\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\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\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\n while (rounded.charAt(rounded.length - 1) === ZERO && sharpIndex > 0 && sharpIndex > zeroIndex) {\n sharpIndex--;\n\n rounded = round(number, sharpIndex, negative);\n }\n\n idx = sharpIndex;\n } else if (hasZero && idx < zeroIndex) {\n idx = zeroIndex;\n }\n }\n }\n\n number = round(number, idx, negative);\n\n sharpIndex = format.indexOf(SHARP);\n startZeroIndex = zeroIndex = format.indexOf(ZERO);\n\n //define the index of the first digit placeholder\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\n sharpIndex = format.lastIndexOf(SHARP);\n zeroIndex = format.lastIndexOf(ZERO);\n\n //define the index of the last digit placeholder\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\n if (start == length) {\n end = start;\n }\n\n if (start != -1) {\n value = number.toString().split(POINT);\n integer = value[0];\n fraction = value[1] || EMPTY;\n\n integerLength = integer.length;\n fractionLength = fraction.length;\n\n if (negative && (number * -1) >= 0) {\n negative = false;\n }\n\n number = format.substring(0, start);\n\n if (negative && !hasNegativeFormat) {\n number += \"-\";\n }\n\n for (idx = start; idx < length; idx++) {\n ch = format.charAt(idx);\n\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\n if ((decimalIndex - idx) <= integerLength && decimalIndex - idx > -1) {\n number += integer;\n idx = decimalIndex;\n }\n\n if (decimalIndex === idx) {\n number += (fraction ? decimal : EMPTY) + fraction;\n idx += end - decimalIndex + 1;\n continue;\n }\n }\n\n if (ch === ZERO) {\n number += ch;\n replacement = ch;\n } else if (ch === SHARP) {\n number += replacement;\n }\n }\n\n if (hasGroup) {\n number = groupInteger(number, start + (negative && !hasNegativeFormat ? 1 : 0), Math.max(end, (integerLength + start)), numberFormat);\n }\n\n if (end >= start) {\n number += format.substring(end + 1);\n }\n\n //replace symbol placeholders\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\n length = literals.length;\n\n if (length) {\n for (idx = 0; idx < length; idx++) {\n number = number.replace(PLACEHOLDER, literals[idx]);\n }\n }\n }\n\n return number;\n }\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\n end = decimalIndex !== -1 ? decimalIndex : end + 1;\n\n integer = number.substring(start, end);\n integerLength = integer.length;\n\n if (integerLength >= groupSize) {\n idx = integerLength;\n parts = [];\n\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$1 ? newGroupSize : groupSize;\n\n if (groupSize === 0) {\n if (idx > 0) {\n parts.push(integer.substring(0, idx));\n }\n break;\n }\n }\n\n integer = parts.reverse().join(numberFormat[COMMA]);\n number = number.substring(0, start) + integer + number.substring(end);\n }\n\n return number;\n };\n\n var round = function(value, precision, negative) {\n precision = precision || 0;\n\n value = value.toString().split('e');\n value = Math.round(+(value[0] + 'e' + (value[1] ? (+value[1] + precision) : precision)));\n\n if (negative) {\n value = -value;\n }\n\n value = value.toString().split('e');\n value = +(value[0] + 'e' + (value[1] ? (+value[1] - precision) : -precision));\n\n return value.toFixed(Math.min(precision, 20));\n };\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\n return value !== undefined$1 ? value : \"\";\n };\n\n kendo.format = function(fmt) {\n var values = arguments;\n\n return fmt.replace(formatRegExp, function(match, index, placeholderFormat) {\n var value = values[parseInt(index, 10) + 1];\n\n return toString(value, placeholderFormat ? placeholderFormat.substring(1) : \"\");\n });\n };\n\n kendo._extractFormat = function(format) {\n if (format.slice(0,3) === \"{0:\") {\n format = format.slice(3, format.length - 1);\n }\n\n return format;\n };\n\n kendo._activeElement = function() {\n try {\n return document.activeElement;\n } catch (e) {\n return document.documentElement.activeElement;\n }\n };\n\n kendo._round = round;\n kendo._outerWidth = function(element, includeMargin) { return $(element).outerWidth(includeMargin || false) || 0; };\n kendo._outerHeight = function(element, includeMargin) { return $(element).outerHeight(includeMargin || false) || 0; };\n kendo.toString = toString;\n })();\n\n\n (function() {\n var nonBreakingSpaceRegExp = /\\u00A0/g,\n spaceRegExp = /\\s/g,\n exponentRegExp = /[eE][\\-+]?[0-9]+/,\n shortTimeZoneRegExp = /[+|\\-]\\d{1,2}/,\n longTimeZoneRegExp = /[+|\\-]\\d{1,2}:?\\d{2}/,\n dateRegExp = /^\\/Date\\((.*?)\\)\\/$/,\n offsetRegExp = /[+-]\\d*/,\n FORMATS_SEQUENCE = [ [], [ \"G\", \"g\", \"F\" ], [ \"D\", \"d\", \"y\", \"m\", \"T\", \"t\" ] ],\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 \"yyyy-MM-ddTHH:mm\",\n \"yyyy-MM-dd HH:mm\",\n \"yyyy/MM/dd HH:mm\"\n ], [\n \"yyyy/MM/dd\",\n \"yyyy-MM-dd\",\n \"HH:mm:ss\",\n \"HH:mm\"\n ]\n ],\n numberRegExp = {\n 2: /^\\d{1,2}/,\n 3: /^\\d{1,3}/,\n 4: /^\\d{4}/\n },\n objectToString = {}.toString;\n\n function outOfRange(value, start, end) {\n return !(value >= start && value <= end);\n }\n\n function designatorPredicate(designator) {\n return designator.charAt(0);\n }\n\n function mapDesignators(designators) {\n return $.map(designators, designatorPredicate);\n }\n\n //if date's day is different than the typed one - adjust\n function adjustDST(date, hours) {\n if (!hours && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n }\n }\n\n function lowerArray(data) {\n var idx = 0,\n length = data.length,\n array = [];\n\n for (; idx < length; idx++) {\n array[idx] = (data[idx] + \"\").toLowerCase();\n }\n\n return array;\n }\n\n function lowerLocalInfo(localInfo) {\n var newLocalInfo = {}, property;\n\n for (property in localInfo) {\n newLocalInfo[property] = lowerArray(localInfo[property]);\n }\n\n return newLocalInfo;\n }\n\n function parseExact(value, format, culture, strict) {\n if (!value) {\n return null;\n }\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 },\n getNumber = function(size) {\n var rg = numberRegExp[size] || new RegExp('^\\\\d{1,' + size + '}'),\n match = value.substr(valueIdx, size).match(rg);\n\n if (match) {\n match = match[0];\n valueIdx += match.length;\n return parseInt(match, 10);\n }\n return null;\n },\n getIndexByName = function(names, lower) {\n var i = 0,\n length = names.length,\n name, nameLength,\n matchLength = 0,\n matchIdx = 0,\n subValue;\n\n for (; i < length; i++) {\n name = names[i];\n nameLength = name.length;\n subValue = value.substr(valueIdx, nameLength);\n\n if (lower) {\n subValue = subValue.toLowerCase();\n }\n\n if (subValue == name && nameLength > matchLength) {\n matchLength = nameLength;\n matchIdx = i;\n }\n }\n\n if (matchLength) {\n valueIdx += matchLength;\n return matchIdx + 1;\n }\n\n return null;\n },\n checkLiteral = function() {\n var result = false;\n if (value.charAt(valueIdx) === format[idx]) {\n valueIdx++;\n result = true;\n }\n return result;\n },\n calendar = culture.calendars.standard,\n year = null,\n month = null,\n day = null,\n hours = null,\n minutes = null,\n seconds = null,\n milliseconds = null,\n idx = 0,\n valueIdx = 0,\n literal = false,\n date = new Date(),\n twoDigitYearMax = calendar.twoDigitYearMax || 2029,\n defaultYear = date.getFullYear(),\n ch, count, length, pattern,\n pmHour, UTC, matches,\n amDesignators, pmDesignators,\n hoursOffset, minutesOffset,\n hasTime, match;\n\n if (!format) {\n format = \"d\"; //shord date format\n }\n\n //if format is part of the patterns get real format\n pattern = calendar.patterns[format];\n if (pattern) {\n format = pattern;\n }\n\n format = format.split(\"\");\n length = format.length;\n\n for (; idx < length; idx++) {\n ch = format[idx];\n\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\n if (day !== null && count > 2) {\n continue;\n }\n\n day = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerDays[count == 3 ? \"namesAbbr\" : \"names\"], true);\n\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\n if (month === null || outOfRange(month, 1, 12)) {\n return null;\n }\n month -= 1; //because month is zero based\n } else if (ch === \"y\") {\n count = lookAhead(\"y\");\n year = getNumber(count);\n\n if (year === null) {\n return null;\n }\n\n if (count == 2) {\n if (typeof twoDigitYearMax === \"string\") {\n twoDigitYearMax = defaultYear + parseInt(twoDigitYearMax, 10);\n }\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\n match = value.substr(valueIdx, count).match(numberRegExp[3]);\n milliseconds = getNumber(count); //move value index position\n\n if (milliseconds !== null) {\n milliseconds = parseFloat(\"0.\" + match[0], 10);\n milliseconds = kendo._round(milliseconds, 3);\n milliseconds *= 1000;\n }\n\n if (milliseconds === null || outOfRange(milliseconds, 0, 999)) {\n return null;\n }\n\n } else if (ch === \"t\") {\n count = lookAhead(\"t\");\n amDesignators = calendar.AM;\n pmDesignators = calendar.PM;\n\n if (count === 1) {\n amDesignators = mapDesignators(amDesignators);\n pmDesignators = mapDesignators(pmDesignators);\n }\n\n pmHour = getIndexByName(pmDesignators);\n if (!pmHour && !getIndexByName(amDesignators)) {\n return null;\n }\n }\n else if (ch === \"z\") {\n UTC = true;\n count = lookAhead(\"z\");\n\n if (value.substr(valueIdx, 1) === \"Z\") {\n checkLiteral();\n continue;\n }\n\n matches = value.substr(valueIdx, 6)\n .match(count > 2 ? longTimeZoneRegExp : shortTimeZoneRegExp);\n\n if (!matches) {\n return null;\n }\n\n matches = matches[0].split(\":\");\n\n hoursOffset = matches[0];\n minutesOffset = matches[1];\n\n if (!minutesOffset && hoursOffset.length > 3) { //(+|-)[hh][mm] format is used\n valueIdx = hoursOffset.length - 2;\n minutesOffset = hoursOffset.substring(valueIdx);\n hoursOffset = hoursOffset.substring(0, valueIdx);\n }\n\n hoursOffset = parseInt(hoursOffset, 10);\n if (outOfRange(hoursOffset, -12, 13)) {\n return null;\n }\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\n // if more characters follow, assume wrong format\n // https://github.com/telerik/kendo-ui-core/issues/3476\n if (strict && !/^\\s*$/.test(value.substr(valueIdx))) {\n return null;\n }\n\n hasTime = hours !== null || minutes !== null || seconds || null;\n\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\n if (day === null) {\n day = 1;\n }\n }\n\n if (pmHour && hours < 12) {\n hours += 12;\n }\n\n if (UTC) {\n if (hoursOffset) {\n hours += -hoursOffset;\n }\n\n if (minutesOffset) {\n minutes += -minutesOffset;\n }\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\n if (year < 100) {\n value.setFullYear(year);\n }\n\n if (value.getDate() !== day && UTC === undefined$1) {\n return null;\n }\n\n return value;\n }\n\n function parseMicrosoftFormatOffset(offset) {\n var sign = offset.substr(0, 1) === \"-\" ? -1 : 1;\n\n offset = offset.substring(1);\n offset = (parseInt(offset.substr(0, 2), 10) * 60) + parseInt(offset.substring(2), 10);\n\n return sign * offset;\n }\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\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\n return formats;\n }\n\n function internalParseDate(value, formats, culture, strict) {\n if (objectToString.call(value) === \"[object Date]\") {\n return value;\n }\n\n var idx = 0;\n var date = null;\n var length;\n var tzoffset;\n\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\n date = new Date(parseInt(date, 10));\n\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\n return date;\n }\n }\n\n culture = kendo.getCulture(culture);\n\n if (!formats) {\n formats = getDefaultFormats(culture);\n }\n\n formats = isArray(formats) ? formats : [formats];\n length = formats.length;\n\n for (; idx < length; idx++) {\n date = parseExact(value, formats[idx], culture, strict);\n if (date) {\n return date;\n }\n }\n\n return date;\n }\n\n kendo.parseDate = function(value, formats, culture) {\n return internalParseDate(value, formats, culture, false);\n };\n\n kendo.parseExactDate = function(value, formats, culture) {\n return internalParseDate(value, formats, culture, true);\n };\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\n kendo.parseFloat = function(value, culture, format) {\n if (!value && value !== 0) {\n return null;\n }\n\n if (typeof value === NUMBER) {\n return value;\n }\n\n value = value.toString();\n culture = kendo.getCulture(culture);\n\n var number = culture.numberFormat,\n percent = number.percent,\n currency = number.currency,\n symbol = currency.symbol,\n percentSymbol = percent.symbol,\n negative = value.indexOf(\"-\"),\n parts, isPercent;\n\n //handle exponential number\n if (exponentRegExp.test(value)) {\n value = parseFloat(value.replace(number[\".\"], \".\"));\n if (isNaN(value)) {\n value = null;\n }\n return value;\n }\n\n if (negative > 0) {\n return null;\n } else {\n negative = negative > -1;\n }\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\n value = value.replace(\"-\", \"\")\n .replace(symbol, \"\")\n .replace(nonBreakingSpaceRegExp, \" \")\n .split(number[\",\"].replace(nonBreakingSpaceRegExp, \" \")).join(\"\")\n .replace(spaceRegExp, \"\")\n .replace(number[\".\"], \".\");\n\n value = parseFloat(value);\n\n if (isNaN(value)) {\n value = null;\n } else if (negative) {\n value *= -1;\n }\n\n if (value && isPercent) {\n value /= 100;\n }\n\n return value;\n };\n })();\n\n function getShadows(element) {\n var shadow = element.css(kendo.support.transitions.css + \"box-shadow\") || element.css(\"box-shadow\"),\n radius = shadow ? shadow.match(boxShadowRegExp) || [ 0, 0, 0, 0, 0 ] : [ 0, 0, 0, 0, 0 ],\n blur = math.max((+radius[3]), +(radius[4] || 0));\n\n return {\n left: (-radius[1]) + blur,\n right: (+radius[1]) + blur,\n bottom: (+radius[2]) + blur\n };\n }\n\n function wrap(element, autosize) {\n var percentage,\n outerWidth = kendo._outerWidth,\n outerHeight = kendo._outerHeight,\n parent = element.parent(),\n windowOuterWidth = outerWidth(window);\n\n parent.removeClass(\"k-animation-container-sm\");\n\n if (!parent.hasClass(\"k-animation-container\")) {\n var width = element[0].style.width,\n height = element[0].style.height,\n percentWidth = percentRegExp.test(width),\n percentHeight = percentRegExp.test(height),\n forceWidth = element.hasClass(\"k-tooltip\") || element.is(\".k-menu-horizontal.k-context-menu\");\n\n percentage = percentWidth || percentHeight;\n\n if (!percentWidth && (!autosize || (autosize && width) || forceWidth)) { width = autosize ? outerWidth(element) + 1 : outerWidth(element); }\n if (!percentHeight && (!autosize || (autosize && height)) || element.is(\".k-menu-horizontal.k-context-menu\")) { height = outerHeight(element); }\n\n element.wrap(\n $(\"
\")\n .addClass(\"k-animation-container\")\n .attr(\"role\", \"region\")\n .css({\n width: width,\n height: height\n }));\n parent = element.parent();\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 wrapResize(element, autosize);\n }\n\n if (windowOuterWidth < outerWidth(parent)) {\n parent.addClass(\"k-animation-container-sm\");\n\n wrapResize(element, autosize);\n }\n\n return parent;\n }\n\n function wrapResize(element, autosize) {\n var percentage,\n outerWidth = kendo._outerWidth,\n outerHeight = kendo._outerHeight,\n wrapper = element.parent(\".k-animation-container\"),\n wrapperStyle = wrapper[0].style;\n\n if (wrapper.is(\":hidden\")) {\n wrapper.css({\n display: \"\",\n position: \"\"\n });\n }\n\n percentage = percentRegExp.test(wrapperStyle.width) || percentRegExp.test(wrapperStyle.height);\n\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\n function deepExtend(destination) {\n var arguments$1 = arguments;\n\n var i = 1,\n length = arguments.length;\n\n for (i = 1; i < length; i++) {\n deepExtendOne(destination, arguments$1[i]);\n }\n\n return destination;\n }\n\n function deepExtendOne(destination, source) {\n var ObservableArray = kendo.data.ObservableArray,\n LazyObservableArray = kendo.data.LazyObservableArray,\n DataSource = kendo.data.DataSource,\n HierarchicalDataSource = kendo.data.HierarchicalDataSource,\n property,\n propValue,\n propType,\n propInit,\n destProp;\n\n for (property in source) {\n propValue = source[property];\n propType = typeof propValue;\n\n if (propType === OBJECT && propValue !== null) {\n propInit = propValue.constructor;\n } else {\n propInit = null;\n }\n\n if (propInit &&\n propInit !== Array && propInit !== ObservableArray && propInit !== LazyObservableArray &&\n propInit !== DataSource && propInit !== HierarchicalDataSource && propInit !== RegExp &&\n (!kendo.isFunction(window.ArrayBuffer) || propInit !== ArrayBuffer) && !(propValue instanceof HTMLElement)) {\n\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\n return destination;\n }\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$1 ? dflt : agent;\n }\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\n function toCamelCase(str) {\n return str.replace(/\\-(\\w)/g, function(strMatch, g1) {\n return g1.toUpperCase();\n });\n }\n\n function getComputedStyles(element, properties) {\n var styles = {}, computedStyle;\n\n if (document.defaultView && document.defaultView.getComputedStyle) {\n computedStyle = document.defaultView.getComputedStyle(element, \"\");\n\n if (properties) {\n $.each(properties, function(idx, value) {\n styles[value] = computedStyle.getPropertyValue(value);\n });\n }\n } else {\n computedStyle = element.currentStyle;\n\n if (properties) {\n $.each(properties, function(idx, value) {\n styles[value] = computedStyle[toCamelCase(value)];\n });\n }\n }\n\n if (!kendo.size(styles)) {\n styles = computedStyle;\n }\n\n return styles;\n }\n\n function isScrollable(element) {\n if (element.dataset[kendo.ns + \"scrollable\"] === \"false\") {\n return false;\n }\n\n if (element && element.className && typeof(element.className) === \"string\" && element.className.indexOf(\"k-auto-scrollable\") > -1) {\n return true;\n }\n\n var overflow = getComputedStyles(element, [\"overflow\"]).overflow;\n return overflow.indexOf(\"auto\") > -1 || overflow.indexOf(\"scroll\") > -1;\n }\n\n function scrollLeft(element, value) {\n var webkit = support.browser.webkit;\n var mozila = support.browser.mozilla;\n var browserVersion = support.browser.version;\n var el, isRtl;\n\n if (element instanceof $ && value !== undefined$1) {\n element.each(function(i, e) {\n scrollLeft(e, value);\n });\n\n return;\n } else {\n el = element instanceof $ ? element[0] : element;\n }\n\n if (!el) {\n return;\n }\n\n isRtl = support.isRtl(element);\n\n // After updating browser detection,\n // Test in which if should the Safari browsers go\n if (value !== undefined$1) {\n if (isRtl && webkit && (browserVersion < 85 || support.browser.safari)) {\n el.scrollLeft = el.scrollWidth - el.clientWidth - value;\n } else if (isRtl && (mozila || webkit) && value > 0) {\n el.scrollLeft = -value;\n } else {\n el.scrollLeft = value;\n }\n } else {\n if (isRtl && webkit && (browserVersion < 85 || support.browser.safari)) {\n return el.scrollWidth - el.clientWidth - el.scrollLeft;\n } else {\n return Math.abs(el.scrollLeft);\n }\n }\n }\n\n (function() {\n support._scrollbar = undefined$1;\n\n support.scrollbar = function(refresh) {\n if (!isNaN(support._scrollbar) && !refresh) {\n return support._scrollbar;\n } else {\n var div = document.createElement(\"div\"),\n result;\n\n div.style.cssText = \"overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block\";\n div.innerHTML = \" \";\n document.body.appendChild(div);\n\n support._scrollbar = result = div.offsetWidth - div.scrollWidth;\n\n document.body.removeChild(div);\n\n return result;\n }\n };\n\n support.isRtl = function(element) {\n return $(element).closest(\".k-rtl\").length > 0;\n };\n\n var table = document.createElement(\"table\");\n\n // Internet Explorer does not support setting the innerHTML of TBODY and TABLE elements\n try {\n table.innerHTML = \"\";\n\n support.tbodyInnerHtml = true;\n } catch (e) {\n support.tbodyInnerHtml = false;\n }\n\n support.touch = \"ontouchstart\" in window;\n\n var docStyle = document.documentElement.style;\n var transitions = support.transitions = false,\n transforms = support.transforms = false,\n elementProto = \"HTMLElement\" in window ? HTMLElement.prototype : [];\n\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\n each([ \"Moz\", \"webkit\", \"O\", \"ms\" ], function() {\n var prefix = this.toString(),\n hasTransitions = typeof table.style[prefix + \"Transition\"] === STRING;\n\n if (hasTransitions || typeof table.style[prefix + \"Transform\"] === STRING) {\n var lowPrefix = prefix.toLowerCase();\n\n transforms = {\n css: (lowPrefix != \"ms\") ? \"-\" + lowPrefix + \"-\" : \"\",\n prefix: prefix,\n event: (lowPrefix === \"o\" || lowPrefix === \"webkit\") ? lowPrefix : \"\"\n };\n\n if (hasTransitions) {\n transitions = transforms;\n transitions.event = transitions.event ? transitions.event + \"TransitionEnd\" : \"transitionend\";\n }\n\n return false;\n }\n });\n\n table = null;\n\n support.transforms = transforms;\n support.transitions = transitions;\n\n support.devicePixelRatio = window.devicePixelRatio === undefined$1 ? 1 : window.devicePixelRatio;\n\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$1) {\n //window.outerWidth throws error when in IE showModalDialog.\n support.screenWidth = window.screen.availWidth;\n support.screenHeight = window.screen.availHeight;\n }\n\n support.detectOS = function(ua) {\n var os = false, minorVersion, match = [],\n notAndroidPhone = !/mobile safari/i.test(ua),\n 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 },\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 },\n formFactorRxs = {\n tablet: /playbook|ipad|fire/i\n },\n 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\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) { return false; } // Break if not Metro/Mobile Windows\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; // Use file protocol to detect appModes.\n os.appMode = window.navigator.standalone || (/file|local|wmapp/).test(window.location.protocol) || os.cordova; // Use file protocol to detect appModes.\n\n if (os.android && (support.devicePixelRatio < 1.5 && os.flatVersion < 400 || notAndroidPhone) && (support.screenWidth > 800 || support.screenHeight > 800)) {\n os.tablet = agent;\n }\n\n break;\n }\n }\n }\n return os;\n };\n\n var mobileOS = support.mobileOS = support.detectOS(navigator.userAgent);\n\n support.wpDevicePixelRatio = mobileOS.wp ? screen.width / 320 : 0;\n\n support.hasNativeScrolling = false;\n\n if (mobileOS.ios || (mobileOS.android && mobileOS.majorVersion > 2) || mobileOS.wp) {\n support.hasNativeScrolling = mobileOS;\n }\n\n support.delayedClick = function() {\n\n // only the mobile devices with touch events do this.\n if (support.touch) {\n // All iOS devices so far (by the time I am writing this, iOS 9.0.2 is the latest),\n // delay their click events.\n if (mobileOS.ios) {\n return true;\n }\n\n if (mobileOS.android) {\n\n if (!support.browser.chrome) { // older webkits and webviews delay the click\n return true;\n }\n\n // from here on, we deal with Chrome on Android.\n if (support.browser.version < 32) {\n return false;\n }\n\n // Chrome 32+ does conditional fast clicks if the view port is not user scalable.\n return !($(\"meta[name=viewport]\").attr(\"content\") || \"\").match(/user-scalable=no/i);\n }\n }\n\n return false;\n };\n\n support.mouseAndTouchPresent = support.touch && !(support.mobileOS.ios || support.mobileOS.android);\n\n support.detectBrowser = function(ua) {\n var browser = false,\n match = [],\n chromiumEdgeMatch = [],\n 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\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\n if (browser.chrome) {\n chromiumEdgeMatch = ua.match(/(edg)[ \\/]([\\w.]+)/i);\n\n if (chromiumEdgeMatch) {\n browser.chromiumEdge = true;\n }\n }\n\n break;\n }\n }\n }\n\n return browser;\n };\n\n support.browser = support.detectBrowser(navigator.userAgent);\n\n if (!mobileOS && support.touch && support.browser.safari) {\n mobileOS = support.mobileOS = {\n ios: true,\n tablet: \"tablet\",\n device: \"ipad\"\n };\n }\n\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\n if (support.browser.chrome) {\n //not using queryCommandSupported due to chromium issues 476508 and 542948\n commands.paste = false;\n if (support.browser.version >= 43) {\n commands.copy = true;\n commands.cut = true;\n }\n }\n\n return commands;\n };\n\n support.clipboard = support.detectClipboardAccess();\n\n support.zoomLevel = function() {\n try {\n var browser = support.browser;\n var ie11WidthCorrection = 0;\n var docEl = document.documentElement;\n\n if (browser.msie && browser.version == 11 && docEl.scrollHeight > docEl.clientHeight && !support.touch) {\n ie11WidthCorrection = support.scrollbar();\n }\n\n return support.touch ? (docEl.clientWidth / window.innerWidth) :\n browser.msie && browser.version >= 10 ? (((top || window).document.documentElement.offsetWidth + ie11WidthCorrection) / (top || window).innerWidth) : 1;\n } catch (e) {\n return 1;\n }\n };\n\n (function(browser) {\n // add browser-specific CSS class\n var cssClass = \"\",\n docElement = $(document.documentElement),\n majorVersion = parseInt(browser.version, 10);\n\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\n if (cssClass) {\n cssClass = \"k-\" + cssClass + \" k-\" + cssClass + majorVersion;\n }\n if (support.mobileOS) {\n cssClass += \" k-mobile\";\n }\n\n if (!support.cssFlexbox) {\n cssClass += \" k-no-flexbox\";\n }\n\n docElement.addClass(cssClass);\n })(support.browser);\n\n support.eventCapture = document.documentElement.addEventListener;\n\n var input = document.createElement(\"input\");\n\n support.placeholder = \"placeholder\" in input;\n support.propertyChangeEvent = \"onpropertychange\" in input;\n\n support.input = (function() {\n var types = [\"number\", \"date\", \"time\", \"month\", \"week\", \"datetime\", \"datetime-local\"];\n var length = types.length;\n var value = \"test\";\n var result = {};\n var idx = 0;\n var type;\n\n for (;idx < length; idx++) {\n type = types[idx];\n input.setAttribute(\"type\", type);\n input.value = value;\n\n result[type.replace(\"-\", \"\")] = input.type !== \"text\" && input.value !== value;\n }\n\n return result;\n })();\n\n input.style.cssText = \"float:left;\";\n\n support.cssFloat = !!input.style.cssFloat;\n\n input = null;\n\n support.stableSort = (function() {\n // Chrome sort is not stable for more than *10* items\n // IE9+ sort is not stable for than *512* items\n var threshold = 513;\n\n var sorted = [{\n index: 0,\n field: \"b\"\n }];\n\n for (var i = 1; i < threshold; i++) {\n sorted.push({\n index: i,\n field: \"a\"\n });\n }\n\n sorted.sort(function(a, b) {\n return a.field > b.field ? 1 : (a.field < b.field ? -1 : 0);\n });\n\n return sorted[0].index === 1;\n })();\n\n support.matchesSelector = elementProto.webkitMatchesSelector || elementProto.mozMatchesSelector ||\n elementProto.msMatchesSelector || elementProto.oMatchesSelector ||\n elementProto.matchesSelector || elementProto.matches ||\n function( selector ) {\n var nodeList = document.querySelectorAll ? ( this.parentNode || document ).querySelectorAll( selector ) || [] : $(selector),\n i = nodeList.length;\n\n while (i--) {\n if (nodeList[i] == this) {\n return true;\n }\n }\n\n return false;\n };\n\n support.matchMedia = \"matchMedia\" in window;\n\n support.pushState = window.history && window.history.pushState;\n\n support.hashChange = \"onhashchange\" in window;\n\n support.customElements = \"registerElement\" in window.document;\n\n var chrome = support.browser.chrome,\n mobileChrome = support.browser.crios,\n mozilla = support.browser.mozilla,\n safari = support.browser.safari;\n support.msPointers = !chrome && window.MSPointerEvent;\n support.pointers = !chrome && !mobileChrome && !mozilla && !safari && window.PointerEvent;\n support.kineticScrollNeeded = mobileOS && (support.touch || support.msPointers || support.pointers);\n })();\n\n\n function size(obj) {\n var result = 0, key;\n for (key in obj) {\n if (obj.hasOwnProperty(key) && key != \"toJSON\") { // Ignore fake IE7 toJSON.\n result++;\n }\n }\n\n return result;\n }\n\n function getOffset(element, type, positioned) {\n if (!type) {\n type = \"offset\";\n }\n\n var offset = element[type]();\n // clone ClientRect object to JS object (jQuery3)\n var result = {\n top: offset.top,\n right: offset.right,\n bottom: offset.bottom,\n left: offset.left\n };\n\n // IE10 touch zoom is living in a separate viewport\n if (support.browser.msie && (support.pointers || support.msPointers) && !positioned) {\n var sign = support.isRtl(element) ? 1 : -1;\n\n result.top -= (window.pageYOffset - (document.documentElement.scrollTop));\n result.left -= (window.pageXOffset + (sign * document.documentElement.scrollLeft));\n }\n\n return result;\n }\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\n function parseEffects(input) {\n var effects = {};\n\n each((typeof input === \"string\" ? input.split(\" \") : input), function(idx) {\n effects[idx] = this;\n });\n\n return effects;\n }\n\n function fx(element) {\n return new kendo.effects.Element(element);\n }\n\n var effects = {};\n\n $.extend(effects, {\n enabled: true,\n Element: function(element) {\n this.element = $(element);\n },\n\n promise: function(element, options) {\n if (!element.is(\":visible\")) {\n element.css({ display: element.data(\"olddisplay\") || \"block\" }).css(\"display\");\n }\n\n if (options.hide) {\n element.data(\"olddisplay\", element.css(\"display\")).hide();\n }\n\n if (options.init) {\n options.init();\n }\n\n if (options.completeCallback) {\n options.completeCallback(element); // call the external complete callback with the element\n }\n\n element.dequeue();\n },\n\n disable: function() {\n this.enabled = false;\n this.promise = this.promiseShim;\n },\n\n enable: function() {\n this.enabled = true;\n this.promise = this.animatedPromise;\n }\n });\n\n effects.promiseShim = effects.promise;\n\n function prepareAnimationOptions(options, duration, reverse, complete) {\n if (typeof options === STRING) {\n // options is the list of effect names separated by space e.g. animate(element, \"fadeIn slideDown\")\n\n // only callback is provided e.g. animate(element, options, function() {});\n if (isFunction(duration)) {\n complete = duration;\n duration = 400;\n reverse = false;\n }\n\n if (isFunction(reverse)) {\n complete = reverse;\n reverse = false;\n }\n\n if (typeof duration === BOOLEAN) {\n reverse = duration;\n duration = 400;\n }\n\n options = {\n effects: options,\n duration: duration,\n reverse: reverse,\n complete: complete\n };\n }\n\n return extend({\n //default options\n effects: {},\n duration: 400, //jQuery default duration\n reverse: false,\n init: noop,\n teardown: noop,\n hide: false\n }, options, { completeCallback: options.complete, complete: noop }); // Move external complete callback, so deferred.resolve can be always executed.\n\n }\n\n function animate(element, options, duration, reverse, complete) {\n var idx = 0,\n length = element.length,\n instance;\n\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\n return element;\n }\n\n function toggleClass(element, classes, options, add) {\n if (classes) {\n classes = classes.split(\" \");\n\n each(classes, function(idx, value) {\n element.toggleClass(value, add);\n });\n }\n\n return element;\n }\n\n if (!(\"kendoAnimate\" in $.fn)) {\n extend($.fn, {\n kendoStop: function(clearQueue, gotoEnd) {\n return this.stop(clearQueue, gotoEnd);\n },\n\n kendoAnimate: function(options, duration, reverse, complete) {\n return animate(this, options, duration, reverse, complete);\n },\n\n kendoAddClass: function(classes, options) {\n return kendo.toggleClass(this, classes, options, true);\n },\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\n var ampRegExp = /&/g,\n ltRegExp = //g;\n function htmlEncode(value) {\n return (\"\" + value).replace(ampRegExp, \"&\").replace(ltRegExp, \"<\").replace(gtRegExp, \">\").replace(quoteRegExp, \""\").replace(aposRegExp, \"'\");\n }\n\n function unescape(value) {\n var template;\n\n try {\n template = window.decodeURIComponent(value);\n } catch (error) {\n // If the string contains Unicode characters\n // the decodeURIComponent() will throw an error.\n // Therefore: convert to UTF-8 character\n template = value.replace(/%u([\\dA-F]{4})|%([\\dA-F]{2})/gi, function(_, m1, m2) {\n return String.fromCharCode(parseInt(\"0x\" + (m1 || m2), 16));\n });\n }\n\n return template;\n }\n\n var eventTarget = function(e) {\n return e.target;\n };\n\n if (support.touch) {\n\n eventTarget = function(e) {\n var touches = \"originalEvent\" in e ? e.originalEvent.changedTouches : \"changedTouches\" in e ? e.changedTouches : null;\n\n return touches ? document.elementFromPoint(touches[0].clientX, touches[0].clientY) : e.target;\n };\n\n each([\"swipe\", \"swipeLeft\", \"swipeRight\", \"swipeUp\", \"swipeDown\", \"doubleTap\", \"tap\"], function(m, value) {\n $.fn[value] = function(callback) {\n return this.on(value, callback);\n };\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\n var wrapExpression = function(members, paramName) {\n var result = paramName || \"d\",\n index,\n idx,\n length,\n member,\n count = 1;\n\n for (idx = 0, length = members.length; idx < length; idx++) {\n member = members[idx];\n if (member !== \"\") {\n index = member.indexOf(\"[\");\n\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\n count++;\n result += member + ((idx < length - 1) ? \" || {})\" : \")\");\n }\n }\n return new Array(count).join(\"(\") + result;\n },\n localUrlRe = /^([a-z]+:)?\\/\\//i;\n\n extend(kendo, {\n widgets: [],\n _widgetRegisteredCallbacks: [],\n ui: kendo.ui || {},\n fx: kendo.fx || fx,\n effects: kendo.effects || effects,\n mobile: kendo.mobile || { },\n data: kendo.data || {},\n dataviz: kendo.dataviz || {},\n drawing: kendo.drawing || {},\n spreadsheet: { messages: {} },\n keys: {\n INSERT: 45,\n DELETE: 46,\n BACKSPACE: 8,\n TAB: 9,\n ENTER: 13,\n ESC: 27,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n END: 35,\n HOME: 36,\n SPACEBAR: 32,\n PAGEUP: 33,\n PAGEDOWN: 34,\n F2: 113,\n F10: 121,\n F12: 123,\n NUMPAD_PLUS: 107,\n NUMPAD_MINUS: 109,\n NUMPAD_DOT: 110\n },\n support: kendo.support || support,\n animate: kendo.animate || animate,\n ns: \"\",\n attr: function(value) {\n return \"data-\" + kendo.ns + value;\n },\n getShadows: getShadows,\n wrap: wrap,\n deepExtend: deepExtend,\n getComputedStyles: getComputedStyles,\n isScrollable: isScrollable,\n scrollLeft: scrollLeft,\n size: size,\n toCamelCase: toCamelCase,\n toHyphens: toHyphens,\n getOffset: kendo.getOffset || getOffset,\n parseEffects: kendo.parseEffects || parseEffects,\n toggleClass: kendo.toggleClass || toggleClass,\n directions: kendo.directions || directions,\n Observable: Observable,\n Class: Class,\n Template: Template,\n template: Template.compile.bind(Template),\n render: Template.render.bind(Template),\n stringify: JSON.stringify.bind(JSON),\n eventTarget: eventTarget,\n htmlEncode: htmlEncode,\n unescape: unescape,\n isLocalUrl: function(url) {\n return url && !localUrlRe.test(url);\n },\n\n expr: function(expression, safe, paramName) {\n expression = expression || \"\";\n\n if (typeof safe == STRING) {\n paramName = safe;\n safe = false;\n }\n\n paramName = paramName || \"d\";\n\n if (expression && expression.charAt(0) !== \"[\") {\n expression = \".\" + expression;\n }\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\n return expression;\n },\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\n setter: function(expression) {\n return setterCache[expression] = setterCache[expression] || new Function(\"d,value\", kendo.expr(expression) + \"=value\");\n },\n\n accessor: function(expression) {\n return {\n get: kendo.getter(expression),\n set: kendo.setter(expression)\n };\n },\n\n guid: function() {\n var id = \"\", i, random, chars = \"abcdef\";\n\n id += chars[Math.floor(Math.random() * Math.floor(chars.length))];\n\n for (i = 1; i < 32; i++) {\n random = math.random() * 16 | 0;\n\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\n return id;\n },\n\n roleSelector: function(role) {\n return role.replace(/(\\S+)/g, \"[\" + kendo.attr(\"role\") + \"=$1],\").slice(0, -1);\n },\n\n directiveSelector: function(directives) {\n var selectors = directives.split(\" \");\n\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\n return selectors.join(\" \").replace(/(\\S+)/g, \"kendo-mobile-$1,\").slice(0, -1);\n },\n\n triggeredByInput: function(e) {\n return (/^(label|input|textarea|select)$/i).test(e.target.tagName);\n },\n\n onWidgetRegistered: function(callback) {\n for (var i = 0, len = kendo.widgets.length; i < len; i++) {\n callback(kendo.widgets[i]);\n }\n\n kendo._widgetRegisteredCallbacks.push(callback);\n },\n\n logToConsole: function(message, type) {\n var console = window.console;\n\n if (!kendo.suppressLog && typeof(console) != \"undefined\" && console.log) {\n console[type || \"log\"](message);\n }\n }\n });\n\n var Widget = Observable.extend( {\n init: function(element, options) {\n var that = this;\n\n validatePackage();\n\n that.element = kendo.jQuery(element).handler(that);\n\n that.angular(\"init\", options);\n\n Observable.fn.init.call(that);\n\n var dataSource = options ? options.dataSource : null;\n var props;\n\n if (options) {\n props = (that.componentTypes || {})[(options || {}).componentType];\n }\n\n if (dataSource) {\n // avoid deep cloning the data source\n options = extend({}, options, { dataSource: {} });\n }\n\n options = that.options = extend(true, {}, that.options, that.defaults, props || {}, options);\n\n if (dataSource) {\n options.dataSource = dataSource;\n }\n\n if (!that.element.attr(kendo.attr(\"role\"))) {\n that.element.attr(kendo.attr(\"role\"), (options.name || \"\").toLowerCase());\n }\n\n that.element.data(\"kendo\" + options.prefix + options.name, that);\n\n that.bind(that.events, options);\n },\n\n events: [],\n\n options: {\n prefix: \"\"\n },\n\n _hasBindingTarget: function() {\n return !!this.element[0].kendoBindingTarget;\n },\n\n _tabindex: function(target) {\n target = target || this.wrapper;\n\n var element = this.element,\n TABINDEX = \"tabindex\",\n tabindex = target.attr(TABINDEX) || element.attr(TABINDEX);\n\n element.removeAttr(TABINDEX);\n\n target.attr(TABINDEX, !isNaN(tabindex) ? tabindex : 0);\n },\n\n setOptions: function(options) {\n this._clearCssClasses(options);\n this._setEvents(options);\n $.extend(this.options, options);\n this._applyCssClasses();\n },\n\n _setEvents: function(options) {\n var that = this,\n idx = 0,\n length = that.events.length,\n e;\n\n for (; idx < length; idx ++) {\n e = that.events[idx];\n if (that.options[e] && options[e]) {\n that.unbind(e, that.options[e]);\n if (that._events && that._events[e]) {\n delete that._events[e];\n }\n }\n }\n\n that.bind(that.events, options);\n },\n\n resize: function(force) {\n var size = this.getSize(),\n currentSize = this._size;\n\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\n getSize: function() {\n return kendo.dimensions(this.element);\n },\n\n size: function(size) {\n if (!size) {\n return this.getSize();\n } else {\n this.setSize(size);\n }\n },\n\n setSize: $.noop,\n _resize: $.noop,\n\n destroy: function() {\n var that = this;\n\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\n callback.call(this);\n\n this._muteRebind = false;\n },\n\n _applyCssClasses: function(element) {\n var protoOptions = this.__proto__.options,\n options = this.options,\n el = element || this.wrapper || this.element,\n classes = [],\n i, prop, validFill, widgetName;\n\n if (!kendo.cssProperties.propertyDictionary[protoOptions.name]) {\n return;\n }\n\n for (i = 0; i < cssPropertiesNames.length; i++) {\n prop = cssPropertiesNames[i];\n widgetName = this.options._altname || protoOptions.name;\n\n if (protoOptions.hasOwnProperty(prop)) {\n if (prop === \"themeColor\") {\n validFill = kendo.cssProperties.getValidClass({\n widget: widgetName,\n propName: \"fillMode\",\n value: options.fillMode\n });\n\n if (validFill && validFill.length) {\n classes.push(kendo.cssProperties.getValidClass({\n widget: widgetName,\n propName: prop,\n value: options[prop],\n fill: options.fillMode\n }));\n }\n } else {\n classes.push(kendo.cssProperties.getValidClass({\n widget: widgetName,\n propName: prop,\n value: options[prop]\n }));\n }\n }\n }\n\n el.addClass(classes.join(\" \"));\n },\n\n _ariaLabel: function(target) {\n var that = this,\n inputElm = that.element,\n inputId = inputElm.attr(\"id\"),\n labelElm = $(\"label[for=\\\"\" + inputId + \"\\\"]\"),\n ariaLabel = inputElm.attr(ARIA_LABEL),\n ariaLabelledBy = inputElm.attr(ARIA_LABELLEDBY),\n labelId;\n\n if (target[0] === inputElm[0]) {\n return;\n }\n\n if (ariaLabel) {\n target.attr(ARIA_LABEL, ariaLabel);\n } else if (ariaLabelledBy) {\n target.attr(ARIA_LABELLEDBY, ariaLabelledBy);\n } else if (labelElm.length) {\n labelId = labelElm.attr(\"id\") || that._generateLabelId(labelElm, inputId || kendo.guid());\n target.attr(ARIA_LABELLEDBY, labelId);\n }\n },\n\n _clearCssClasses: function(newOptions, element) {\n var protoOptions = this.__proto__.options,\n currentOptions = this.options,\n el = element || this.wrapper || this.element,\n i, prop, widgetName;\n\n if (!kendo.cssProperties.propertyDictionary[protoOptions.name]) {\n return;\n }\n\n for (i = 0; i < cssPropertiesNames.length; i++) {\n prop = cssPropertiesNames[i];\n widgetName = this.options._altname || protoOptions.name;\n\n if (protoOptions.hasOwnProperty(prop) && newOptions.hasOwnProperty(prop)) {\n if (prop === \"themeColor\") {\n el.removeClass(kendo.cssProperties.getValidClass({\n widget: widgetName,\n propName: prop,\n value: currentOptions[prop],\n fill: currentOptions.fillMode\n }));\n } else {\n if (prop === \"fillMode\") {\n el.removeClass(kendo.cssProperties.getValidClass({\n widget: widgetName,\n propName: \"themeColor\",\n value: currentOptions.themeColor,\n fill: currentOptions.fillMode\n }));\n }\n\n el.removeClass(kendo.cssProperties.getValidClass({\n widget: widgetName,\n propName: prop,\n value: currentOptions[prop]\n }));\n }\n }\n }\n },\n\n _generateLabelId: function(label, inputId) {\n var labelId = inputId + LABELIDPART;\n\n label.attr(\"id\", labelId);\n\n return labelId;\n },\n });\n\n var DataBoundWidget = Widget.extend({\n // Angular consumes these.\n dataItems: function() {\n return this.dataSource.flatView();\n },\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\n kendo.dimensions = function(element, dimensions) {\n var domElement = element[0];\n\n if (dimensions) {\n element.css(dimensions);\n }\n\n return { width: domElement.offsetWidth, height: domElement.offsetHeight };\n };\n\n kendo.notify = noop;\n\n var templateRegExp = /template$/i,\n jsonRegExp = /^\\s*(?:\\{(?:.|\\r\\n|\\n)*\\}|\\[(?:.|\\r\\n|\\n)*\\])\\s*$/,\n jsonFormatRegExp = /^\\{(\\d+)(:[^\\}]+)?\\}|^\\[[A-Za-z_]+\\]$/,\n dashRegExp = /([A-Z])/g;\n\n function parseOption(element, option) {\n var value;\n\n if (option.indexOf(\"data\") === 0) {\n option = option.substring(4);\n option = option.charAt(0).toLowerCase() + option.substring(1);\n }\n\n option = option.replace(dashRegExp, \"-$1\");\n value = element.getAttribute(\"data-\" + kendo.ns + option);\n\n if (value === null) {\n value = undefined$1;\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\" && option != \"format\") {\n value = parseFloat(value);\n } else if (jsonRegExp.test(value) && !jsonFormatRegExp.test(value)) {\n value = new Function(\"return (\" + value + \")\")();\n }\n\n return value;\n }\n\n function parseOptions(element, options, source) {\n var result = {},\n option,\n value,\n role = element.getAttribute(\"data-\" + kendo.ns + \"role\");\n\n for (option in options) {\n value = parseOption(element, option);\n\n if (value !== undefined$1) {\n\n if (templateRegExp.test(option) && role != \"drawer\") {\n if (typeof value === \"string\") {\n if ($(\"#\" + value).length) {\n value = kendo.template($(\"#\" + value).html());\n } else if (source) {\n value = kendo.template(source[value]);\n }\n } else {\n value = element.getAttribute(option);\n }\n }\n\n result[option] = value;\n }\n }\n\n return result;\n }\n\n kendo.initWidget = function(element, options, roles) {\n var result,\n option,\n widget,\n idx,\n length,\n role,\n value,\n dataSource,\n fullPath,\n widgetKeyRegExp;\n\n // Preserve backwards compatibility with (element, options, namespace) signature, where namespace was kendo.ui\n if (!roles) {\n roles = kendo.ui.roles;\n } else if (roles.roles) {\n roles = roles.roles;\n }\n\n element = element.nodeType ? element : element[0];\n\n role = element.getAttribute(\"data-\" + kendo.ns + \"role\");\n\n if (!role) {\n return;\n }\n\n fullPath = role.indexOf(\".\") === -1;\n\n // look for any widget that may be already instantiated based on this role.\n // The prefix used is unknown, hence the regexp\n //\n\n if (fullPath) {\n widget = roles[role];\n } else { // full namespace path - like kendo.ui.Widget\n widget = kendo.getter(role)(window);\n }\n\n var data = $(element).data(),\n widgetKey = widget ? \"kendo\" + widget.fn.options.prefix + widget.fn.options.name : \"\";\n\n if (fullPath) {\n widgetKeyRegExp = new RegExp(\"^kendo.*\" + role + \"$\", \"i\");\n } else { // full namespace path - like kendo.ui.Widget\n widgetKeyRegExp = new RegExp(\"^\" + widgetKey + \"$\", \"i\");\n }\n\n for (var key in data) {\n if (key.match(widgetKeyRegExp)) {\n // we have detected a widget of the same kind - save its reference, we will set its options\n if (key === widgetKey) {\n result = data[key];\n } else {\n return data[key];\n }\n }\n }\n\n if (!widget) {\n return;\n }\n\n dataSource = parseOption(element, \"dataSource\");\n\n options = $.extend({}, parseOptions(element, $.extend({}, widget.fn.options, widget.fn.defaults) ), options);\n\n if (dataSource) {\n if (typeof dataSource === STRING) {\n options.dataSource = kendo.getter(dataSource)(window);\n } else {\n options.dataSource = dataSource;\n }\n }\n\n for (idx = 0, length = widget.fn.events.length; idx < length; idx++) {\n option = widget.fn.events[idx];\n\n value = parseOption(element, option);\n\n if (value !== undefined$1) {\n options[option] = kendo.getter(value)(window);\n }\n }\n\n if (!result) {\n result = new widget(element, options);\n } else if (!$.isEmptyObject(options)) {\n result.setOptions(options);\n }\n\n return result;\n };\n\n kendo.rolesFromNamespaces = function(namespaces) {\n var roles = [],\n idx,\n length;\n\n if (!namespaces[0]) {\n namespaces = [kendo.ui, kendo.dataviz.ui];\n }\n\n for (idx = 0, length = namespaces.length; idx < length; idx ++) {\n roles[idx] = namespaces[idx].roles;\n }\n\n return extend.apply(null, [{}].concat(roles.reverse()));\n };\n\n kendo.init = function(element) {\n var roles = kendo.rolesFromNamespaces(slice.call(arguments, 1));\n\n $(element).find(\"[data-\" + kendo.ns + \"role]\").addBack().each(function() {\n kendo.initWidget(this, {}, roles);\n });\n };\n\n kendo.destroy = function(element) {\n $(element).find(\"[data-\" + kendo.ns + \"role]\").addBack().each(function() {\n var data = $(this).data();\n\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\n function containmentComparer(a, b) {\n return $.contains(a, b) ? -1 : 1;\n }\n\n function resizableWidget() {\n var widget = $(this);\n return ($.inArray(widget.attr(\"data-\" + kendo.ns + \"role\"), [\"slider\", \"rangeslider\", \"breadcrumb\"]) > -1) || widget.is(\":visible\");\n }\n\n kendo.resize = function(element, force) {\n var widgets = $(element).find(\"[data-\" + kendo.ns + \"role]\").addBack().filter(resizableWidget);\n\n if (!widgets.length) {\n return;\n }\n\n // sort widgets based on their parent-child relation\n var widgetsArray = $.makeArray(widgets);\n widgetsArray.sort(containmentComparer);\n\n // resize widgets\n $.each(widgetsArray, function() {\n var widget = kendo.widgetInstance($(this));\n if (widget) {\n widget.resize(force);\n }\n });\n };\n\n kendo.parseOptions = parseOptions;\n\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\"),\n support = kendo.support,\n browser = support.browser,\n isRtl, leftRight, webkitCorrection, containerScrollLeft, cssClass;\n\n options = $.extend({}, {\n width: \"100%\",\n height: \"100%\",\n top: container.scrollTop(),\n opacity: false\n }, options);\n\n cssClass = options.opacity ? 'k-loading-mask k-opaque' : 'k-loading-mask';\n\n if (toggle) {\n if (!mask.length) {\n isRtl = support.isRtl(container);\n leftRight = isRtl ? \"right\" : \"left\";\n containerScrollLeft = kendo.scrollLeft(container);\n webkitCorrection = browser.webkit ? (!isRtl ? 0 : container[0].scrollWidth - container.width() - 2 * containerScrollLeft) : 0;\n\n mask = $(kendo.format(\"
{1}
\", cssClass, kendo.ui.progress.messages.loading))\n .width(options.width).height(options.height)\n .css(\"top\", options.top)\n .css(leftRight, Math.abs(containerScrollLeft) + webkitCorrection)\n .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,\n getter;\n\n register = register || kendo.ui;\n prefix = prefix || \"\";\n\n register[name] = widget;\n\n register.roles[name.toLowerCase()] = widget;\n\n getter = \"getKendo\" + prefix + name;\n name = \"kendo\" + prefix + name;\n\n var widgetEntry = { name: name, widget: widget, prefix: prefix || \"\" };\n kendo.widgets.push(widgetEntry);\n\n for (var i = 0, len = kendo._widgetRegisteredCallbacks.length; i < len; i++) {\n kendo._widgetRegisteredCallbacks[i](widgetEntry);\n }\n\n $.fn[name] = function(options) {\n var value = this,\n args;\n\n if (typeof options === STRING) {\n args = slice.call(arguments, 1);\n\n this.each(function() {\n var widget = $.data(this, name),\n method,\n result;\n\n if (!widget) {\n throw new Error(kendo.format(\"Cannot call method '{0}' of {1} before it is initialized\", options, name));\n }\n\n method = widget[options];\n\n if (typeof method !== FUNCTION) {\n throw new Error(kendo.format(\"Cannot find method '{0}' of {1}\", options, name));\n }\n\n result = method.apply(widget, args);\n\n if (result !== undefined$1) {\n value = result;\n return false;\n }\n });\n } else {\n this.each(function() {\n return new widget(this, options);\n });\n }\n\n return value;\n };\n\n $.fn[name].widget = widget;\n\n $.fn[getter] = function() {\n return this.data(name);\n };\n }\n });\n\n kendo.ui.progress.messages = {\n loading: \"Loading...\"\n };\n\n var ContainerNullObject = { bind: function() { return this; }, nullObject: true, 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\n destroy: function() {\n Widget.fn.destroy.call(this);\n this.element.kendoDestroy();\n },\n\n options: {\n prefix: \"Mobile\"\n },\n\n events: [],\n\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\n viewHasNativeScrolling: function() {\n var view = this.view();\n return view && view.options.useNativeScrolling;\n },\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\n extend(kendo.mobile, {\n init: function(element) {\n kendo.init(element, kendo.mobile.ui, kendo.ui, kendo.dataviz.ui);\n },\n\n appLevelNativeScrolling: function() {\n return kendo.mobile.application && kendo.mobile.application.options && kendo.mobile.application.options.useNativeScrolling;\n },\n\n roles: {},\n\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\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\n kendo.touchScroller = function(elements, options) {\n // return the first touch scroller\n if (!options) { options = {}; }\n\n options.useNative = true;\n\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\n kendo.preventDefault = function(e) {\n e.preventDefault();\n };\n\n kendo.widgetInstance = function(element, suites) {\n var role = element.data(kendo.ns + \"role\"),\n widgets = [], i, length,\n elementData = element.data(\"kendoView\");\n\n if (role) {\n // HACK!!! mobile view scroller widgets are instantiated on data-role=\"content\" elements. We need to discover them when resizing.\n if (role === \"content\") {\n role = \"scroller\";\n }\n\n // kendoEditorToolbar is not a public plugin, thus it does not exist in kendo.ui.roles.\n // Therefore, this is needed in order to be resized when placed in Kendo Window.\n if (role === \"editortoolbar\") {\n var editorToolbar = element.data(\"kendoEditorToolbar\");\n if (editorToolbar) {\n return editorToolbar;\n }\n }\n\n // kendo.View is not a ui plugin\n\n if (role === \"view\" && elementData) {\n return elementData;\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 }\n else {\n widgets = [ kendo.ui.roles[role], kendo.dataviz.ui.roles[role], kendo.mobile.ui.roles[role] ];\n }\n\n if (role.indexOf(\".\") >= 0) {\n widgets = [ kendo.getter(role)(window) ];\n }\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\n kendo.onResize = function(callback) {\n var handler = callback;\n if (support.mobileOS.android) {\n handler = function() { setTimeout(callback, 600); };\n }\n\n $(window).on(support.resize, handler);\n return handler;\n };\n\n kendo.unbindResize = function(callback) {\n $(window).off(support.resize, callback);\n };\n\n kendo.attrValue = function(element, key) {\n return element.data(kendo.ns + key);\n };\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\n function focusable(element, isTabIndexNotNaN) {\n var nodeName = element.nodeName.toLowerCase();\n\n return (/input|select|textarea|button|object/.test(nodeName) ?\n !element.disabled :\n nodeName === \"a\" ?\n element.href || isTabIndexNotNaN :\n isTabIndexNotNaN\n ) &&\n visible(element);\n }\n\n function visible(element) {\n return $.expr.pseudos.visible(element) &&\n !$(element).parents().addBack().filter(function() {\n return $.css(this,\"visibility\") === \"hidden\";\n }).length;\n }\n\n $.extend($.expr.pseudos, {\n kendoFocusable: function(element) {\n var idx = $.attr(element, \"tabindex\");\n return focusable(element, !isNaN(idx) && idx > -1);\n }\n });\n\n var MOUSE_EVENTS = [\"mousedown\", \"mousemove\", \"mouseenter\", \"mouseleave\", \"mouseover\", \"mouseout\", \"mouseup\", \"click\"];\n var EXCLUDE_BUST_CLICK_SELECTOR = \"label, input, [data-rel=external]\";\n\n var MouseEventNormalizer = {\n setupMouseMute: function() {\n var idx = 0,\n length = MOUSE_EVENTS.length,\n element = document.documentElement;\n\n if (MouseEventNormalizer.mouseTrap || !support.eventCapture) {\n return;\n }\n\n MouseEventNormalizer.mouseTrap = true;\n\n MouseEventNormalizer.bustClick = false;\n MouseEventNormalizer.captureMouse = false;\n\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\n for (; idx < length; idx++) {\n element.addEventListener(MOUSE_EVENTS[idx], handler, true);\n }\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\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\n var eventMap = {\n down: \"touchstart mousedown\",\n move: \"mousemove touchmove\",\n up: \"mouseup touchend touchcancel\",\n cancel: \"mouseleave touchcancel\"\n };\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\n if (support.msPointers && !(\"onmspointerenter\" in window)) { // IE10\n // Create MSPointerEnter/MSPointerLeave events using mouseover/out and event-time checks\n $.each({\n MSPointerEnter: \"MSPointerOver\",\n MSPointerLeave: \"MSPointerOut\"\n }, function( orig, fix ) {\n $.event.special[ orig ] = {\n delegateType: fix,\n bindType: fix,\n\n handle: function( event ) {\n var ret,\n target = this,\n related = event.relatedTarget,\n handleObj = event.handleObj;\n\n // For mousenter/leave call the handler if related is outside the target.\n // NB: No relatedTarget if the mouse left/entered the browser window\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\n\n var getEventMap = function(e) { return (eventMap[e] || e); },\n eventRegEx = /([^ ]+)/g;\n\n kendo.applyEventMap = function(events, ns) {\n events = events.replace(eventRegEx, getEventMap);\n\n if (ns) {\n events = events.replace(eventRegEx, \"$1.\" + ns);\n }\n\n return events;\n };\n\n kendo.keyDownHandler = function(e, widget) {\n var events = widget._events.kendoKeydown;\n\n if (!events) {\n return true;\n }\n\n events = events.slice();\n e.sender = widget;\n e.preventKendoKeydown = false;\n for (var idx = 0, length = events.length; idx < length; idx++) {\n events[idx].call(widget, e);\n }\n\n return !e.preventKendoKeydown;\n };\n\n var on = $.fn.on;\n\n function kendoJQuery(selector, context) {\n return new kendoJQuery.fn.init(selector, context);\n }\n\n noDepricateExtend(true, kendoJQuery, $);\n\n kendoJQuery.fn = kendoJQuery.prototype = new $();\n\n kendoJQuery.fn.constructor = kendoJQuery;\n\n kendoJQuery.fn.init = function(selector, context) {\n if (context && context instanceof $ && !(context instanceof kendoJQuery)) {\n context = kendoJQuery(context);\n }\n\n return $.fn.init.call(this, selector, context, rootjQuery);\n };\n\n kendoJQuery.fn.init.prototype = kendoJQuery.fn;\n\n var rootjQuery = kendoJQuery(document);\n\n extend(kendoJQuery.fn, {\n handler: function(handler) {\n this.data(\"handler\", handler);\n return this;\n },\n\n autoApplyNS: function(ns) {\n this.data(\"kendoNS\", ns || kendo.guid());\n return this;\n },\n\n on: function() {\n var that = this,\n ns = that.data(\"kendoNS\");\n\n // support for event map signature\n if (arguments.length === 1) {\n return on.call(that, arguments[0]);\n }\n\n var context = that,\n args = slice.call(arguments);\n\n if (typeof args[args.length - 1] === UNDEFINED) {\n args.pop();\n }\n\n var callback = args[args.length - 1],\n events = kendo.applyEventMap(args[0], ns);\n\n // setup mouse trap\n if (support.mouseAndTouchPresent && events.search(/mouse|click/) > -1 && this[0] !== document.documentElement) {\n MouseEventNormalizer.setupMouseMute();\n\n var selector = args.length === 2 ? null : args[1],\n bustClick = events.indexOf(\"click\") > -1 && events.indexOf(\"touchend\") > -1;\n\n on.call(this,\n {\n touchstart: MouseEventNormalizer.muteMouse,\n touchend: MouseEventNormalizer.unMuteMouse\n },\n selector,\n {\n bustClick: bustClick\n });\n }\n\n if (arguments[0].indexOf(\"keydown\") !== -1 && args[1] && args[1].options) {\n args[0] = events;\n var widget = args[1];\n var keyDownCallBack = args[args.length - 1];\n args[args.length - 1] = function(e) {\n if (kendo.keyDownHandler(e, widget)) {\n return keyDownCallBack.apply(this, [e]);\n }\n };\n on.apply(that, args);\n return that;\n }\n\n if (typeof callback === STRING) {\n context = that.data(\"handler\");\n callback = context[callback];\n\n args[args.length - 1] = function(e) {\n callback.call(context, e);\n };\n }\n\n args[0] = events;\n\n on.apply(that, args);\n\n return that;\n },\n\n kendoDestroy: function(ns) {\n ns = ns || this.data(\"kendoNS\");\n\n if (ns) {\n this.off(\".\" + ns);\n }\n\n return this;\n }\n });\n\n kendo.jQuery = kendoJQuery;\n kendo.eventMap = eventMap;\n\n kendo.timezone = (function() {\n var months = { Jan: 0, Feb: 1, Mar: 2, Apr: 3, May: 4, Jun: 5, Jul: 6, Aug: 7, Sep: 8, Oct: 9, Nov: 10, Dec: 11 };\n var days = { Sun: 0, Mon: 1, Tue: 2, Wed: 3, Thu: 4, Fri: 5, 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\n if (!cache) {\n rule[8] = cache = {};\n }\n\n if (cache[year]) {\n return cache[year];\n }\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\n targetDay = days[on.substr(4, 3)];\n ourDay = date.getUTCDay();\n\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\n targetDay = days[on.substr(0, 3)];\n ourDay = date.getUTCDay();\n\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\n targetDay = days[on.substr(0, 3)];\n ourDay = date.getUTCDay();\n\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay - (targetDay > ourDay ? 7 : 0));\n }\n\n return cache[year] = date;\n }\n\n function findRule(utcTime, rules, zone) {\n rules = rules[zone];\n\n if (!rules) {\n var time = zone.split(\":\");\n var offset = 0;\n\n if (time.length > 1) {\n offset = time[0] * 60 + Number(time[1]);\n }\n\n return [-1000000, 'max', '-', 'Jan', 1, [0, 0, 0], offset, '-'];\n }\n\n var year = new Date(utcTime).getUTCFullYear();\n\n rules = jQuery.grep(rules, function(rule) {\n var from = rule[0];\n var to = rule[1];\n\n return from <= year && (to >= year || (from == year && to == \"only\") || to == \"max\");\n });\n\n rules.push(utcTime);\n\n rules.sort(function(a, b) {\n if (typeof a != \"number\") {\n a = Number(ruleToDate(year, a));\n }\n\n if (typeof b != \"number\") {\n b = Number(ruleToDate(year, b));\n }\n\n return a - b;\n });\n\n var rule = rules[jQuery.inArray(utcTime, rules) - 1] || rules[rules.length - 1];\n\n return isNaN(rule) ? rule : null;\n }\n\n function findZone(utcTime, zones, timezone) {\n var zoneRules = zones[timezone];\n\n if (typeof zoneRules === \"string\") {\n zoneRules = zones[zoneRules];\n }\n\n if (!zoneRules) {\n throw new Error('Timezone \"' + timezone + '\" is either incorrect, or kendo.timezones.min.js is not included.');\n }\n\n for (var idx = zoneRules.length - 1; idx >= 0; idx--) {\n var until = zoneRules[idx][3];\n\n if (until && utcTime > until) {\n break;\n }\n }\n\n var zone = zoneRules[idx + 1];\n\n if (!zone) {\n throw new Error('Timezone \"' + timezone + '\" not found on ' + utcTime + \".\");\n }\n\n return zone;\n }\n\n function zoneAndRule(utcTime, zones, rules, timezone) {\n if (typeof utcTime != NUMBER) {\n utcTime = Date.UTC(utcTime.getFullYear(), utcTime.getMonth(),\n utcTime.getDate(), utcTime.getHours(), utcTime.getMinutes(),\n utcTime.getSeconds(), utcTime.getMilliseconds());\n }\n\n var zone = findZone(utcTime, zones, timezone);\n\n return {\n zone: zone,\n rule: findRule(utcTime, rules, zone[1])\n };\n }\n\n function offset(utcTime, timezone) {\n if (timezone == \"Etc/UTC\" || timezone == \"Etc/GMT\") {\n return 0;\n }\n\n var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n var zone = info.zone;\n var rule = info.rule;\n\n return kendo.parseFloat(rule ? zone[0] - rule[6] : zone[0]);\n }\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\n var base = zone[2];\n\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\n return base;\n }\n\n function convert(date, fromOffset, toOffset) {\n var tempToOffset = toOffset;\n var diff;\n\n if (typeof fromOffset == STRING) {\n fromOffset = this.offset(date, fromOffset);\n }\n\n if (typeof toOffset == STRING) {\n toOffset = this.offset(date, toOffset);\n }\n\n var fromLocalOffset = date.getTimezoneOffset();\n\n date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\n\n var toLocalOffset = date.getTimezoneOffset();\n\n if (typeof tempToOffset == STRING) {\n tempToOffset = this.offset(date, tempToOffset);\n }\n\n diff = (toLocalOffset - fromLocalOffset) + (toOffset - tempToOffset);\n\n return new Date(date.getTime() + diff * 60000);\n }\n\n function apply(date, timezone) {\n return this.convert(date, date.getTimezoneOffset(), timezone);\n }\n\n function remove(date, timezone) {\n return this.convert(date, timezone, date.getTimezoneOffset());\n }\n\n function toLocalDate(time) {\n return this.apply(new Date(time), \"Etc/UTC\");\n }\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\n kendo.date = (function() {\n var MS_PER_MINUTE = 60000,\n MS_PER_DAY = 86400000;\n\n function adjustDST(date, hours) {\n if (hours === 0 && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n return true;\n }\n\n return false;\n }\n\n function setDayOfWeek(date, day, dir) {\n var hours = date.getHours();\n\n dir = dir || 1;\n day = ((day - date.getDay()) + (7 * dir)) % 7;\n\n date.setDate(date.getDate() + day);\n adjustDST(date, hours);\n }\n\n function dayOfWeek(date, day, dir) {\n date = new Date(date);\n setDayOfWeek(date, day, dir);\n return date;\n }\n\n function firstDayOfMonth(date) {\n return new Date(\n date.getFullYear(),\n date.getMonth(),\n 1\n );\n }\n\n function lastDayOfMonth(date) {\n var last = new Date(date.getFullYear(), date.getMonth() + 1, 0),\n first = firstDayOfMonth(date),\n timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n\n if (timeOffset) {\n last.setHours(first.getHours() + (timeOffset / 60));\n }\n\n return last;\n }\n\n function firstDayOfYear(date) {\n return new Date(date.getFullYear(), 0, 1);\n }\n\n function lastDayOfYear(date) {\n return new Date(date.getFullYear(), 11, 31);\n }\n\n function moveDateToWeekStart(date, weekStartDay) {\n if (weekStartDay !== 1) {\n return addDays(dayOfWeek(date, weekStartDay, -1), 4);\n }\n\n return addDays(date, (4 - (date.getDay() || 7)));\n }\n\n function calcWeekInYear(date, weekStartDay) {\n var firstWeekInYear = new Date(date.getFullYear(), 0, 1, -6);\n\n var newDate = moveDateToWeekStart(date, weekStartDay);\n\n var diffInMS = newDate.getTime() - firstWeekInYear.getTime();\n\n var days = Math.floor(diffInMS / MS_PER_DAY);\n\n return 1 + Math.floor(days / 7);\n }\n\n function weekInYear(date, weekStartDay) {\n if (weekStartDay === undefined$1) {\n weekStartDay = kendo.culture().calendar.firstDay;\n }\n\n var prevWeekDate = addDays(date, -7);\n var nextWeekDate = addDays(date, 7);\n\n var weekNumber = calcWeekInYear(date, weekStartDay);\n\n if (weekNumber === 0) {\n return calcWeekInYear(prevWeekDate, weekStartDay) + 1;\n }\n\n if (weekNumber === 53 && calcWeekInYear(nextWeekDate, weekStartDay) > 1) {\n return 1;\n }\n\n return weekNumber;\n }\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\n function toUtcTime(date) {\n return Date.UTC(date.getFullYear(), date.getMonth(),\n date.getDate(), date.getHours(), date.getMinutes(),\n date.getSeconds(), date.getMilliseconds());\n }\n\n function getMilliseconds(date) {\n return toInvariantTime(date).getTime() - getDate(toInvariantTime(date));\n }\n\n function isInTimeRange(value, min, max) {\n var msMin = getMilliseconds(min),\n msMax = getMilliseconds(max),\n msValue;\n\n if (!value || msMin == msMax) {\n return true;\n }\n\n if (min >= max) {\n max += MS_PER_DAY;\n }\n\n msValue = getMilliseconds(value);\n\n if (msMin > msValue) {\n msValue += MS_PER_DAY;\n }\n\n if (msMax < msMin) {\n msMax += MS_PER_DAY;\n }\n\n return msValue >= msMin && msValue <= msMax;\n }\n\n function isInDateRange(value, min, max) {\n var msMin = min.getTime(),\n msMax = max.getTime(),\n msValue;\n\n if (msMin >= msMax) {\n msMax += MS_PER_DAY;\n }\n\n msValue = value.getTime();\n\n return msValue >= msMin && msValue <= msMax;\n }\n\n function addDays(date, offset) {\n var hours = date.getHours();\n date = new Date(date);\n\n setTime(date, offset * MS_PER_DAY);\n adjustDST(date, hours);\n return date;\n }\n\n function setTime(date, milliseconds, ignoreDST) {\n var offset = date.getTimezoneOffset();\n var difference;\n\n date.setTime(date.getTime() + milliseconds);\n\n if (!ignoreDST) {\n difference = date.getTimezoneOffset() - offset;\n date.setTime(date.getTime() + difference * MS_PER_MINUTE);\n }\n }\n\n function setHours(date, time) {\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());\n adjustDST(date, time.getHours());\n return date;\n }\n\n function today() {\n return getDate(new Date());\n }\n\n function isToday(date) {\n return getDate(date).getTime() == today().getTime();\n }\n\n function toInvariantTime(date) {\n var staticDate = new Date(1980, 1, 1, 0, 0, 0);\n\n if (date) {\n staticDate.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n\n return staticDate;\n }\n\n function addYear(date, offset) {\n var currentDate = new Date(date);\n\n return new Date(currentDate.setFullYear(currentDate.getFullYear() + offset));\n }\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 firstDayOfYear: firstDayOfYear,\n lastDayOfYear: lastDayOfYear,\n nextYear: function(date) {\n return addYear(date, 1);\n },\n previousYear: function(date) {\n return addYear(date, -1);\n }\n };\n })();\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\n while (iterator.nextNode()) {\n if (iterator.referenceNode && !iterator.referenceNode.textContent.trim()) {\n iterator.referenceNode.parentNode.removeChild(iterator.referenceNode);\n }\n }\n } else { // IE7/8 support\n for (var i = 0; i < element.childNodes.length; i++) {\n var child = element.childNodes[i];\n\n if (child.nodeType == 3 && !/\\S/.test(child.nodeValue)) {\n element.removeChild(child);\n i--;\n }\n\n if (child.nodeType == 1) {\n kendo.stripWhitespace(child);\n }\n }\n }\n };\n\n var animationFrame = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.oRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function(callback) { setTimeout(callback, 1000 / 60); };\n\n kendo.animationFrame = function(callback) {\n animationFrame.call(window, callback);\n };\n\n var animationQueue = [];\n\n kendo.queueAnimation = function(callback) {\n animationQueue[animationQueue.length] = callback;\n if (animationQueue.length === 1) {\n kendo.runNextAnimation();\n }\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\n kendo.parseQueryStringParams = function(url) {\n var queryString = url.split('?')[1] || \"\",\n params = {},\n paramParts = queryString.split(/&|=/),\n length = paramParts.length,\n idx = 0;\n\n for (; idx < length; idx += 2) {\n if (paramParts[idx] !== \"\") {\n params[decodeURIComponent(paramParts[idx])] = decodeURIComponent(paramParts[idx + 1]);\n }\n }\n\n return params;\n };\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\n kendo.wheelDeltaY = function(jQueryEvent) {\n var e = jQueryEvent.originalEvent,\n deltaY = e.wheelDeltaY,\n delta;\n\n if (e.wheelDelta) { // Webkit and IE\n if (deltaY === undefined$1 || deltaY) { // IE does not have deltaY, thus always scroll (horizontal scrolling is treated as vertical)\n delta = e.wheelDelta;\n }\n } else if (e.detail && e.axis === e.VERTICAL_AXIS) { // Firefox and Opera\n delta = (-e.detail) * 10;\n }\n\n return delta;\n };\n\n kendo.throttle = function(fn, delay) {\n var timeout;\n var lastExecTime = 0;\n\n if (!delay || delay <= 0) {\n return fn;\n }\n\n var throttled = function() {\n var that = this;\n var elapsed = +new Date() - lastExecTime;\n var args = arguments;\n\n function exec() {\n fn.apply(that, args);\n lastExecTime = +new Date();\n }\n\n // first execution\n if (!lastExecTime) {\n return exec();\n }\n\n if (timeout) {\n clearTimeout(timeout);\n }\n\n if (elapsed > delay) {\n exec();\n } else {\n timeout = setTimeout(exec, delay - elapsed);\n }\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n };\n\n return throttled;\n };\n\n\n kendo.caret = function(element, start, end) {\n var rangeElement;\n var isPosition = start !== undefined$1;\n\n if (end === undefined$1) {\n end = start;\n }\n\n if (element[0]) {\n element = element[0];\n }\n\n if (isPosition && element.disabled) {\n return;\n }\n\n try {\n if (element.selectionStart !== undefined$1) {\n if (isPosition) {\n element.focus();\n var mobile = support.mobileOS;\n if (mobile.wp || mobile.android) {// without the timeout the caret is at the end of the input\n setTimeout(function() { element.setSelectionRange(start, end); }, 0);\n }\n else {\n element.setSelectionRange(start, end);\n }\n } else {\n start = [element.selectionStart, element.selectionEnd];\n }\n } else if (document.selection) {\n if ($(element).is(\":visible\")) {\n element.focus();\n }\n\n rangeElement = element.createTextRange();\n\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(),\n selectionStart, selectionEnd;\n\n rangeElement.moveToBookmark(document.selection.createRange().getBookmark());\n rangeDuplicated.setEndPoint('EndToStart', rangeElement);\n selectionStart = rangeDuplicated.text.length;\n selectionEnd = selectionStart + rangeElement.text.length;\n\n start = [selectionStart, selectionEnd];\n }\n }\n } catch (e) {\n /* element is not focused or it is not in the DOM */\n start = [];\n }\n\n return start;\n };\n\n kendo.compileMobileDirective = function(element, scope) {\n var angular = window.angular;\n\n element.attr(\"data-\" + kendo.ns + \"role\", element[0].tagName.toLowerCase().replace('kendo-mobile-', '').replace('-', ''));\n\n angular.element(element).injector().invoke([\"$compile\", function($compile) {\n $compile(element)(scope);\n\n if (!/^\\$(digest|apply)$/.test(scope.$$phase)) {\n scope.$digest();\n }\n }]);\n\n return kendo.widgetInstance(element, kendo.mobile.ui);\n };\n\n kendo.antiForgeryTokens = function() {\n var tokens = { },\n csrf_token = $(\"meta[name=csrf-token],meta[name=_csrf]\").attr(\"content\"),\n csrf_param = $(\"meta[name=csrf-param],meta[name=_csrf_header]\").attr(\"content\");\n\n $(\"input[name^='__RequestVerificationToken']\").each(function() {\n tokens[this.name] = this.value;\n });\n\n if (csrf_param !== undefined$1 && csrf_token !== undefined$1) {\n tokens[csrf_param] = csrf_token;\n }\n\n return tokens;\n };\n\n kendo.cycleForm = function(form) {\n var firstElement = form.find(\"input, .k-widget, .k-dropdownlist, .k-combobox\").first();\n var lastElement = form.find(\"button, .k-button\").last();\n\n function focus(el) {\n var widget = kendo.widgetInstance(el);\n\n if (widget && widget.focus) {\n widget.focus();\n } else {\n el.trigger(\"focus\");\n }\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\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\n kendo.focusElement = function(element) {\n var scrollTopPositions = [];\n var scrollableParents = element.parentsUntil(\"body\")\n .filter(function(index, element) {\n var computedStyle = kendo.getComputedStyles(element, [\"overflow\"]);\n return computedStyle.overflow !== \"visible\";\n })\n .add(window);\n\n scrollableParents.each(function(index, parent) {\n scrollTopPositions[index] = $(parent).scrollTop();\n });\n\n try {\n //The setActive method does not cause the document to scroll to the active object in the current page\n element[0].setActive();\n } catch (e) {\n element[0].focus();\n }\n\n scrollableParents.each(function(index, parent) {\n $(parent).scrollTop(scrollTopPositions[index]);\n });\n };\n\n kendo.focusNextElement = function() {\n if (document.activeElement) {\n var focussable = $(\":kendoFocusable\");\n var index = focussable.index(document.activeElement);\n\n if (index > -1) {\n var nextElement = focussable[index + 1] || focussable[0];\n nextElement.focus();\n }\n }\n };\n\n kendo.trim = function(value) {\n if (!!value) {\n return value.toString().trim();\n } else {\n return \"\";\n }\n };\n\n kendo.getWidgetFocusableElement = function(element) {\n var nextFocusable = element.closest(\":kendoFocusable\"),\n widgetInstance = kendo.widgetInstance(element),\n target;\n\n if (nextFocusable.length) {\n target = nextFocusable;\n } else if (widgetInstance) {\n target = widgetInstance.options.name === 'Editor' ?\n $(widgetInstance.body) :\n widgetInstance.wrapper.find(\":kendoFocusable\").first();\n } else {\n target = element;\n }\n\n return target;\n };\n\n kendo.addAttribute = function(element, attribute, value) {\n var current = element.attr(attribute) || \"\";\n\n if (current.indexOf(value) < 0) {\n element.attr(attribute, (current + \" \" + value).trim());\n }\n };\n\n kendo.removeAttribute = function(element, attribute, value) {\n var current = element.attr(attribute) || \"\";\n\n element.attr(attribute, current.replace(value, \"\").trim());\n };\n\n kendo.toggleAttribute = function(element, attribute, value) {\n var current = element.attr(attribute) || \"\";\n\n if (current.indexOf(value) < 0) {\n kendo.addAttribute(element, attribute, value);\n } else {\n kendo.removeAttribute(element, attribute, value);\n }\n };\n\n kendo.matchesMedia = function(mediaQuery) {\n var media = kendo._bootstrapToMedia(mediaQuery) || mediaQuery;\n return support.matchMedia && window.matchMedia(media).matches;\n };\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\n kendo.fileGroupMap = {\n audio: [\".aif\", \".iff\", \".m3u\", \".m4a\", \".mid\", \".mp3\", \".mpa\", \".wav\", \".wma\", \".ogg\", \".wav\", \".wma\", \".wpl\"],\n video: [\".3g2\", \".3gp\", \".avi\", \".asf\", \".flv\", \".m4u\", \".rm\", \".h264\", \".m4v\", \".mkv\", \".mov\", \".mp4\", \".mpg\",\n \".rm\", \".swf\", \".vob\", \".wmv\"],\n image: [\".ai\", \".dds\", \".heic\", \".jpe\", \"jfif\", \".jif\", \".jp2\", \".jps\", \".eps\", \".bmp\", \".gif\", \".jpeg\",\n \".jpg\", \".png\", \".ps\", \".psd\", \".svg\", \".svgz\", \".tif\", \".tiff\"],\n txt: [\".doc\", \".docx\", \".log\", \".pages\", \".tex\", \".wpd\", \".wps\", \".odt\", \".rtf\", \".text\", \".txt\", \".wks\"],\n presentation: [\".key\", \".odp\", \".pps\", \".ppt\", \".pptx\"],\n data: [\".xlr\", \".xls\", \".xlsx\"],\n programming: [\".tmp\", \".bak\", \".msi\", \".cab\", \".cpl\", \".cur\", \".dll\", \".dmp\", \".drv\", \".icns\", \".ico\", \".link\",\n \".sys\", \".cfg\", \".ini\", \".asp\", \".aspx\", \".cer\", \".csr\", \".css\", \".dcr\", \".htm\", \".html\", \".js\",\n \".php\", \".rss\", \".xhtml\"],\n pdf: [\".pdf\"],\n config: [\".apk\", \".app\", \".bat\", \".cgi\", \".com\", \".exe\", \".gadget\", \".jar\", \".wsf\"],\n zip: [\".7z\", \".cbr\", \".gz\", \".sitx\", \".arj\", \".deb\", \".pkg\", \".rar\", \".rpm\", \".tar.gz\", \".z\", \".zip\", \".zipx\"],\n \"disc-image\": [\".dmg\", \".iso\", \".toast\", \".vcd\", \".bin\", \".cue\", \".mdf\"]\n };\n\n kendo.getFileGroup = function(extension, withPrefix) {\n var fileTypeMap = kendo.fileGroupMap;\n var groups = Object.keys(fileTypeMap);\n var type = \"file\";\n\n if (extension === undefined$1 || !extension.length) {\n return type;\n }\n\n for (var i = 0; i < groups.length; i += 1) {\n var extensions = fileTypeMap[groups[i]];\n\n if (extensions.indexOf(extension.toLowerCase()) > -1) {\n return withPrefix ? \"file-\" + groups[i] : groups[i];\n }\n }\n\n return type;\n };\n\n kendo.getFileSizeMessage = function(size) {\n var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n\n if (size === 0) {\n return '0 Byte';\n }\n\n var i = parseInt(Math.floor(Math.log(size) / Math.log(1024)), 10);\n return Math.round(size / Math.pow(1024, i), 2) + ' ' + sizes[i];\n };\n\n kendo.selectorFromClasses = function(classes) {\n return \".\" + classes.split(\" \").join(\".\");\n };\n\n // Standardized Properties and CSS classes\n\n var themeColorValues = ['base', 'primary', 'secondary', 'tertiary', 'inherit', 'info', 'success', 'warning', 'error', 'dark', 'light', 'inverse'];\n var fillValues = ['solid', 'outline', 'flat'];\n //var postitionValues = ['edge', 'outside', 'inside'];\n var shapeValues = ['rectangle', 'square'];\n var sizeValues = [ ['small', 'sm'], ['medium', 'md'], ['large', 'lg'] ];\n var roundedValues = [ ['small', 'sm'], ['medium', 'md'], ['large', 'lg'] ];\n //var alignValues = [ ['top start', 'top-start'], ['top end', 'top-end'], ['bottom start', 'bottom-start'], ['bottom end', 'bottom-end'] ];\n var positionModeValues = [ 'fixed', 'static', 'sticky', 'absolute' ];\n var resizeValues = [ 'both', 'horizontal', 'vertical' ];\n var overflowValues = [ 'auto', 'hidden', 'visible', 'scroll', 'clip' ];\n\n kendo.cssProperties = (function() {\n var defaultValues = {},\n propertyDictionary = {};\n\n function registerPrefix(widget, prefix) {\n var dict = kendo.cssProperties.propertyDictionary;\n\n if (!dict[widget]) {\n dict[widget] = {};\n }\n\n dict[widget][PREFIX] = prefix;\n }\n\n function registerValues(widget, args) {\n var dict = kendo.cssProperties.propertyDictionary,\n i, j, prop, values, newValues, currentValue;\n\n for (i = 0; i < args.length; i++) {\n prop = args[i].prop;\n newValues = args[i].values;\n\n if (!dict[widget][prop]) {\n dict[widget][prop] = {};\n }\n\n values = dict[widget][prop];\n\n for (j = 0; j < newValues.length; j++) {\n currentValue = newValues[j];\n\n if (isArray(newValues[j])) {\n values[currentValue[0]] = currentValue[1];\n } else {\n values[currentValue] = currentValue;\n }\n }\n }\n }\n\n function registerCssClass(propName, value, shorthand) {\n if (!defaultValues[propName]) {\n defaultValues[propName] = {};\n }\n\n defaultValues[propName][value] = shorthand || value;\n }\n\n function registerCssClasses(propName, arr) {\n for (var i = 0; i < arr.length; i++) {\n if (isArray(arr[i])) {\n registerCssClass(propName, arr[i][0], arr[i][1]);\n } else {\n registerCssClass(propName, arr[i]);\n }\n }\n }\n\n function getValidClass(args) {\n var widget = args.widget,\n propName = args.propName,\n value = args.value,\n fill = args.fill,\n cssProperties = kendo.cssProperties,\n defaultValues = cssProperties.defaultValues[propName],\n widgetProperties = cssProperties.propertyDictionary[widget],\n widgetValues, validValue, prefix;\n\n if (!widgetProperties) {\n return \"\";\n }\n\n widgetValues = widgetProperties[propName];\n validValue = widgetValues ? widgetValues[value] || defaultValues[value] : defaultValues[value];\n\n if (validValue) {\n if (propName === \"themeColor\") {\n prefix = widgetProperties[PREFIX] + fill + \"-\";\n } else if (propName === \"positionMode\") {\n prefix = \"k-pos-\";\n } else if (propName === \"rounded\") {\n prefix = \"k-rounded-\";\n } else if (propName === \"resize\") {\n prefix = \"k-resize-\";\n } else if (propName === \"overflow\") {\n prefix = \"k-overflow-\";\n } else {\n prefix = widgetProperties[PREFIX];\n }\n\n return prefix + validValue;\n } else {\n return \"\";\n }\n }\n\n registerCssClasses(\"themeColor\", themeColorValues);\n registerCssClasses(\"fillMode\", fillValues);\n registerCssClasses(\"shape\", shapeValues);\n registerCssClasses(\"size\", sizeValues);\n registerCssClasses(\"positionMode\", positionModeValues);\n registerCssClasses(\"rounded\", roundedValues);\n registerCssClasses(\"resize\", resizeValues);\n registerCssClasses(\"overflow\", overflowValues);\n\n return {\n positionModeValues: positionModeValues,\n roundedValues: roundedValues,\n sizeValues: sizeValues,\n shapeValues: shapeValues,\n fillModeValues: fillValues,\n themeColorValues: themeColorValues,\n\n defaultValues: defaultValues,\n propertyDictionary: propertyDictionary,\n\n registerValues: registerValues,\n getValidClass: getValidClass,\n registerPrefix: registerPrefix\n };\n }());\n\n //To do: delete below after implementing new styles and classes for BottomNavigation\n kendo.registerCssClass = function(propName, value, shorthand) {\n if (!kendo.propertyToCssClassMap[propName]) {\n kendo.propertyToCssClassMap[propName] = {};\n }\n\n kendo.propertyToCssClassMap[propName][value] = shorthand || value;\n };\n\n kendo.registerCssClasses = function(propName, arr) {\n for (var i = 0; i < arr.length; i++) {\n if (isArray(arr[i])) {\n kendo.registerCssClass(propName, arr[i][0], arr[i][1]);\n } else {\n kendo.registerCssClass(propName, arr[i]);\n }\n }\n };\n\n kendo.getValidCssClass = function(prefix, propName, value) {\n var validValue = kendo.propertyToCssClassMap[propName][value];\n\n if (validValue) {\n return prefix + validValue;\n }\n };\n\n kendo.propertyToCssClassMap = {};\n\n kendo.registerCssClasses(\"themeColor\", themeColorValues);\n kendo.registerCssClasses(\"fill\", fillValues);\n //kendo.registerCssClasses(\"postition\", postitionValues);\n kendo.registerCssClasses(\"shape\", shapeValues);\n kendo.registerCssClasses(\"size\", sizeValues);\n //kendo.registerCssClasses(\"align\", alignValues);\n kendo.registerCssClasses(\"positionMode\", positionModeValues);\n\n // jQuery deferred helpers\n\n // influenced from: https://gist.github.com/fearphage/4341799\n kendo.whenAll = function(array) {\n var resolveValues = arguments.length == 1 && Array.isArray(array) ? array : Array.prototype.slice.call(arguments),\n length = resolveValues.length,\n remaining = length,\n deferred = $.Deferred(),\n i = 0,\n failed = 0,\n rejectContexts = Array(length),\n rejectValues = Array(length),\n resolveContexts = Array(length),\n value;\n\n function updateFunc(index, contexts, values) {\n return function() {\n if (values != resolveValues) {\n failed++;\n }\n\n deferred.notifyWith(\n contexts[index] = this,\n values[index] = Array.prototype.slice.call(arguments)\n );\n\n if (!(--remaining)) {\n deferred[(!failed ? 'resolve' : 'reject') + 'With'](contexts, values);\n }\n };\n }\n\n for (; i < length; i++) {\n if ((value = resolveValues[i]) && kendo.isFunction(value.promise)) {\n value.promise()\n .done(updateFunc(i, resolveContexts, resolveValues))\n .fail(updateFunc(i, rejectContexts, rejectValues));\n }\n\n else {\n deferred.notifyWith(this, value);\n --remaining;\n }\n }\n\n if (!remaining) {\n deferred.resolveWith(resolveContexts, resolveValues);\n }\n\n return deferred.promise();\n };\n\n // kendo.saveAs -----------------------------------------------\n (function() {\n function postToProxy(dataURI, fileName, proxyURL, proxyTarget) {\n var form = $(\"
\").attr({\n action: proxyURL,\n method: \"POST\",\n target: proxyTarget\n });\n\n var data = kendo.antiForgeryTokens();\n data.fileName = fileName;\n\n var parts = dataURI.split(\";base64,\");\n data.contentType = parts[0].replace(\"data:\", \"\");\n data.base64 = parts[1];\n\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\n form.appendTo(\"body\").submit().remove();\n }\n\n var fileSaver = document.createElement(\"a\");\n var downloadAttribute = \"download\" in fileSaver && !kendo.support.browser.edge;\n\n function saveAsBlob(dataURI, fileName) {\n var blob = dataURI; // could be a Blob object\n\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\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\n navigator.msSaveBlob(blob, fileName);\n }\n\n function saveAsDataURI(dataURI, fileName) {\n if (window.Blob && dataURI instanceof Blob) {\n dataURI = URL.createObjectURL(dataURI);\n }\n\n fileSaver.download = fileName;\n fileSaver.href = dataURI;\n\n var e = document.createEvent(\"MouseEvents\");\n e.initMouseEvent(\"click\", true, false, window,\n 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n\n fileSaver.dispatchEvent(e);\n setTimeout(function() {\n URL.revokeObjectURL(dataURI);\n });\n }\n\n kendo.saveAs = function(options) {\n var save = postToProxy;\n\n if (!options.forceProxy) {\n if (downloadAttribute) {\n save = saveAsDataURI;\n } else if (navigator.msSaveBlob) {\n save = saveAsBlob;\n }\n }\n\n save(options.dataURI, options.fileName, options.proxyURL, options.proxyTarget);\n };\n })();\n\n // kendo proxySetters\n kendo.proxyModelSetters = function proxyModelSetters(data) {\n var observable = {};\n\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\n return observable;\n };\n\n kendo.getSeriesColors = function() {\n var seriesColorsTemplate = '
' +\n '
' +\n '
' +\n '
' +\n '
' +\n '
',\n series = $(seriesColorsTemplate),\n colors = [];\n\n series.appendTo($('body'));\n\n series.each(function(i, item) {\n colors.push($(item).css(\"background-color\"));\n });\n\n series.remove();\n\n return colors;\n };\n\n kendo.isElement = function(element) {\n return element instanceof Element || element instanceof HTMLDocument;\n };\n\n // Kendo defaults\n (function() {\n\n kendo.defaults = kendo.defaults || {};\n kendo.setDefaults = function(key, value) {\n var path = key.split(\".\");\n var curr = kendo.defaults;\n\n key = path.pop();\n\n path.forEach(function(part) {\n if (curr[part] === undefined$1) {\n curr[part] = {};\n }\n\n curr = curr[part];\n });\n\n if (value.constructor === Object) {\n curr[key] = deepExtend({}, curr[key], value);\n } else {\n curr[key] = value;\n }\n };\n\n })();\n\n // Implement type() as it has been depricated in jQuery\n (function() {\n kendo.class2type = {};\n\n jQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n function( _i, name ) {\n kendo.class2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n } );\n\n kendo.type = function(obj) {\n if ( obj == null ) {\n return obj + \"\";\n }\n\n // Support: Android <=2.3 only (functionish RegExp)\n return typeof obj === \"object\" || typeof obj === \"function\" ?\n kendo.class2type[Object.prototype.toString.call(obj)] || \"object\" :\n typeof obj;\n };\n }());\n\n var KendoLicensing = { validatePackage: function() {},setScriptKey: function() {} };\n\n window.KendoLicensing = {\n setScriptKey: KendoLicensing.setScriptKey\n };\n\n function validatePackage() {\n KendoLicensing.validatePackage(packageMetadata);\n }\n\n })(jQuery, window);\n\n var __meta__$13 = {\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\n (function($, undefined$1) {\n var kendo = window.kendo,\n fx = kendo.effects,\n each = $.each,\n extend = $.extend,\n support = kendo.support,\n browser = support.browser,\n transforms = support.transforms,\n transitions = support.transitions,\n scaleProperties = { scale: 0, scalex: 0, scaley: 0, scale3d: 0 },\n translateProperties = { translate: 0, translatex: 0, translatey: 0, translate3d: 0 },\n hasZoom = (typeof document.documentElement.style.zoom !== \"undefined\") && !transforms,\n matrix3dRegExp = /matrix3?d?\\s*\\(.*,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?/i,\n cssParamsRegExp = /^(-?[\\d\\.\\-]+)?[\\w\\s]*,?\\s*(-?[\\d\\.\\-]+)?[\\w\\s]*/i,\n translateXRegExp = /translatex?$/i,\n oldEffectsRegExp = /(zoom|fade|expand)(\\w+)/,\n singleEffectRegExp = /(zoom|fade|expand)/,\n unitRegExp = /[xy]$/i,\n transformProps = [\"perspective\", \"rotate\", \"rotatex\", \"rotatey\", \"rotatez\", \"rotate3d\", \"scale\", \"scalex\", \"scaley\", \"scalez\", \"scale3d\", \"skew\", \"skewx\", \"skewy\", \"translate\", \"translatex\", \"translatey\", \"translatez\", \"translate3d\", \"matrix\", \"matrix3d\"],\n transform2d = [\"rotate\", \"scale\", \"scalex\", \"scaley\", \"skew\", \"skewx\", \"skewy\", \"translate\", \"translatex\", \"translatey\", \"matrix\"],\n transform2units = { \"rotate\": \"deg\", scale: \"\", skew: \"px\", translate: \"px\" },\n cssPrefix = transforms.css,\n round = Math.round,\n BLANK = \"\",\n PX = \"px\",\n NONE = \"none\",\n AUTO = \"auto\",\n WIDTH = \"width\",\n HEIGHT = \"height\",\n HIDDEN = \"hidden\",\n ORIGIN = \"origin\",\n ABORT_ID = \"abortId\",\n OVERFLOW = \"overflow\",\n TRANSLATE = \"translate\",\n POSITION = \"position\",\n COMPLETE_CALLBACK = \"completeCallback\",\n TRANSITION = cssPrefix + \"transition\",\n TRANSFORM = cssPrefix + \"transform\",\n BACKFACE = cssPrefix + \"backface-visibility\",\n PERSPECTIVE = cssPrefix + \"perspective\",\n DEFAULT_PERSPECTIVE = \"1500px\",\n TRANSFORM_PERSPECTIVE = \"perspective(\" + DEFAULT_PERSPECTIVE + \")\",\n 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: {\n reverse: \"bottom\"\n },\n bottom: {\n reverse: \"top\"\n },\n \"in\": {\n reverse: \"out\",\n modifier: -1\n },\n out: {\n reverse: \"in\",\n modifier: 1\n },\n\n vertical: {\n reverse: \"vertical\"\n },\n\n horizontal: {\n reverse: \"horizontal\"\n }\n };\n\n kendo.directions = directions;\n\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\n /* jQuery support for all transform animations (FF 3.5/3.6, Opera 10.x, IE9 */\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],\n transformValue = value + \"(\" + val + transform2units[value.replace(unitRegExp, \"\")] + \")\";\n\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\n $.fx.step[value] = function(fx) {\n $(fx.elem)[value](fx.now);\n };\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\n return curProxy.apply(this, arguments);\n };\n }\n\n kendo.toggleClass = function(element, classes, options, add) {\n if (classes) {\n classes = classes.split(\" \");\n\n if (transitions) {\n options = extend({\n exclusive: \"all\",\n duration: 400,\n ease: \"ease-out\"\n }, options);\n\n element.css(TRANSITION, options.exclusive + \" \" + options.duration + \"ms \" + options.ease);\n setTimeout(function() {\n element.css(TRANSITION, \"\").css(HEIGHT);\n }, options.duration); // TODO: this should fire a kendoAnimate session instead.\n }\n\n each(classes, function(idx, value) {\n element.toggleClass(value, add);\n });\n }\n\n return element;\n };\n\n kendo.parseEffects = function(input, mirror) {\n var effects = {};\n\n if (typeof input === \"string\") {\n each(input.split(\" \"), function(idx, value) {\n var redirectedEffect = !singleEffectRegExp.test(value),\n resolved = value.replace(oldEffectsRegExp, function(match, $1, $2) {\n return $1 + \":\" + $2.toLowerCase();\n }), // Support for old zoomIn/fadeOut style, now deprecated.\n effect = resolved.split(\":\"),\n direction = effect[1],\n effectBody = {};\n\n if (effect.length > 1) {\n effectBody.direction = (mirror && redirectedEffect ? directions[direction].reverse : direction);\n }\n\n effects[effect[0]] = effectBody;\n });\n } else {\n each(input, function(idx) {\n var direction = this.direction;\n\n if (direction && mirror && !singleEffectRegExp.test(idx)) {\n this.direction = directions[direction].reverse;\n }\n\n effects[idx] = this;\n });\n }\n\n return effects;\n };\n\n function parseInteger(value) {\n return parseInt(value, 10);\n }\n\n function parseCSS(element, property) {\n return parseInteger(element.css(property));\n }\n\n function keys(obj) {\n var acc = [];\n for (var propertyName in obj) {\n acc.push(propertyName);\n }\n return acc;\n }\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\n return properties;\n }\n\n function normalizeCSS(element, properties) {\n var transformation = [], cssValues = {}, lowerKey, key, value, isTransformed;\n\n for (key in properties) {\n lowerKey = key.toLowerCase();\n isTransformed = transforms && transformProps.indexOf(lowerKey) != -1;\n\n if (!support.hasHW3D && isTransformed && transform2d.indexOf(lowerKey) == -1) {\n delete properties[key];\n } else {\n value = properties[key];\n\n if (isTransformed) {\n transformation.push(key + \"(\" + value + \")\");\n } else {\n cssValues[key] = value;\n }\n }\n }\n\n if (transformation.length) {\n cssValues[TRANSFORM] = transformation.join(\" \");\n }\n\n return cssValues;\n }\n\n if (transitions) {\n extend(fx, {\n transition: function(element, properties, options) {\n var css,\n delay = 0,\n oldKeys = element.data(\"keys\") || [],\n timeoutID;\n\n options = extend({\n duration: 200,\n ease: \"ease-out\",\n complete: null,\n exclusive: \"all\"\n },\n options\n );\n\n var stopTransitionCalled = false;\n\n var stopTransition = function() {\n if (!stopTransitionCalled) {\n stopTransitionCalled = true;\n\n if (timeoutID) {\n clearTimeout(timeoutID);\n timeoutID = null;\n }\n\n element\n .removeData(ABORT_ID)\n .dequeue()\n .css(TRANSITION, \"\")\n .css(TRANSITION);\n\n options.complete.call(element);\n }\n };\n\n options.duration = $.fx ? $.fx.speeds[options.duration] || options.duration : options.duration;\n\n css = normalizeCSS(element, properties);\n\n $.merge(oldKeys, keys(css));\n\n if ($.hasOwnProperty(\"uniqueSort\")) {\n element\n .data(\"keys\", $.uniqueSort(oldKeys))\n .height();\n } else {\n element\n .data(\"keys\", $.unique(oldKeys))\n .height();\n }\n\n element.css(TRANSITION, options.exclusive + \" \" + options.duration + \"ms \" + options.ease).css(TRANSITION);\n element.css(css).css(TRANSFORM);\n\n /**\n * Use transitionEnd event for browsers who support it - but duplicate it with setTimeout, as the transitionEnd event will not be triggered if no CSS properties change.\n * This should be cleaned up at some point (widget by widget), and refactored to widgets not relying on the complete callback if no transition occurs.\n *\n * For IE9 and below, resort to setTimeout.\n */\n if (transitions.event) {\n element.one(transitions.event, stopTransition);\n if (options.duration !== 0) {\n delay = 500;\n }\n }\n\n timeoutID = setTimeout(stopTransition, options.duration + delay);\n element.data(ABORT_ID, timeoutID);\n element.data(COMPLETE_CALLBACK, stopTransition);\n },\n\n stopQueue: function(element, clearQueue, gotoEnd) {\n var cssValues,\n taskKeys = element.data(\"keys\"),\n retainPosition = (!gotoEnd && taskKeys),\n completeCallback = element.data(COMPLETE_CALLBACK);\n\n if (retainPosition) {\n cssValues = kendo.getComputedStyles(element[0], taskKeys);\n }\n\n if (completeCallback) {\n completeCallback();\n }\n\n if (retainPosition) {\n element.css(cssValues);\n }\n\n return element\n .removeData(\"keys\")\n .stop(clearQueue);\n }\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\n var match = transform.match(new RegExp(property + \"\\\\s*\\\\(([\\\\d\\\\w\\\\.]+)\")),\n computed = 0;\n\n if (match) {\n computed = parseInteger(match[1]);\n } else {\n match = transform.match(matrix3dRegExp) || [0, 0, 0, 0, 0];\n property = property.toLowerCase();\n\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\n return computed;\n } else {\n return parseFloat(element.css(property));\n }\n }\n\n var EffectSet = kendo.Class.extend({\n init: function(element, options) {\n var that = this;\n\n that.element = element;\n that.effects = [];\n that.options = options;\n that.restore = [];\n },\n\n run: function(effects) {\n var that = this,\n effect,\n idx, jdx,\n length = effects.length,\n element = that.element,\n options = that.options,\n deferred = $.Deferred(),\n start = {},\n end = {},\n target,\n children,\n childrenLength;\n\n that.effects = effects;\n\n deferred.done(that.complete.bind(that));\n\n element.data(\"animating\", true);\n\n for (idx = 0; idx < length; idx ++) {\n effect = effects[idx];\n\n effect.setReverse(options.reverse);\n effect.setOptions(options);\n\n that.addRestoreProperties(effect.restore);\n\n effect.prepare(start, end);\n\n children = effect.children();\n\n for (jdx = 0, childrenLength = children.length; jdx < childrenLength; jdx ++) {\n children[jdx].duration(options.duration).run();\n }\n }\n\n // legacy support for options.properties\n for (var effectName in options.effects) {\n extend(end, options.effects[effectName].properties);\n }\n\n // Show the element initially\n if (!element.is(\":visible\")) {\n extend(start, { display: element.data(\"olddisplay\") || \"block\" });\n }\n\n if (transforms && !options.reset) {\n target = element.data(\"targetTransform\");\n\n if (target) {\n start = extend(target, start);\n }\n }\n\n start = normalizeCSS(element, start);\n\n if (transforms && !transitions) {\n start = strip3DTransforms(start);\n }\n\n element.css(start)\n .css(TRANSFORM); // Nudge\n\n for (idx = 0; idx < length; idx ++) {\n effects[idx].setup();\n }\n\n if (options.init) {\n options.init();\n }\n\n element.data(\"targetTransform\", end);\n fx.animate(element, end, extend({}, options, { complete: deferred.resolve }));\n\n return deferred.promise();\n },\n\n stop: function() {\n $(this.element).kendoStop(true, true);\n },\n\n addRestoreProperties: function(restore) {\n var element = this.element,\n value,\n i = 0,\n length = restore.length;\n\n for (; i < length; i ++) {\n value = restore[i];\n\n this.restore.push(value);\n\n if (!element.data(value)) {\n element.data(value, element.css(value));\n }\n }\n },\n\n restoreCallback: function() {\n var element = this.element;\n\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\n complete: function() {\n var that = this,\n idx = 0,\n element = that.element,\n options = that.options,\n effects = that.effects,\n length = effects.length;\n\n element\n .removeData(\"animating\")\n .dequeue(); // call next animation from the queue\n\n if (options.hide) {\n element.data(\"olddisplay\", element.css(\"display\")).hide();\n }\n\n this.restoreCallback();\n\n if (hasZoom && !transforms) {\n setTimeout(this.restoreCallback.bind(this), 0); // Again jQuery callback in IE8-\n }\n\n for (; idx < length; idx ++) {\n effects[idx].teardown();\n }\n\n if (options.completeCallback) {\n options.completeCallback(element);\n }\n }\n });\n\n fx.promise = function(element, options) {\n var effects = [],\n effectClass,\n effectSet = new EffectSet(element, options),\n parsedEffects = kendo.parseEffects(options.effects),\n effect;\n\n options.effects = parsedEffects;\n\n for (var effectName in parsedEffects) {\n effectClass = fx[capitalize(effectName)];\n\n if (effectClass) {\n effect = new effectClass(element, parsedEffects[effectName].direction);\n effects.push(effect);\n }\n }\n\n if (effects[0]) {\n effectSet.run(effects);\n } else { // Not sure how would an fx promise reach this state - means that you call kendoAnimate with no valid effects? Why?\n if (!element.is(\":visible\")) {\n element.css({ display: element.data(\"olddisplay\") || \"block\" }).css(\"display\");\n }\n\n if (options.init) {\n options.init();\n }\n\n element.dequeue();\n effectSet.complete();\n }\n };\n\n extend(fx, {\n animate: function(elements, properties, options) {\n var useTransition = options.transition !== false;\n delete options.transition;\n\n if (transitions && \"transition\" in fx && useTransition) {\n fx.transition(elements, properties, options);\n } else {\n if (transforms) {\n elements.animate(strip3DTransforms(properties), { queue: false, show: false, hide: false, duration: options.duration, complete: options.complete }); // Stop animate from showing/hiding the element to be able to hide it later on.\n } else {\n elements.each(function() {\n var element = $(this),\n multiple = {};\n\n each(transformProps, function(idx, value) { // remove transforms to avoid IE and older browsers confusion\n var params,\n currentValue = properties ? properties[value] + \" \" : null; // We need to match\n\n if (currentValue) {\n var single = properties;\n\n if (value in scaleProperties && properties[value] !== undefined$1) {\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$1) {\n var position = element.css(POSITION),\n isFixed = (position == \"absolute\" || position == \"fixed\");\n\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\n var originalPosition = element.data(TRANSLATE);\n\n params = currentValue.match(cssParamsRegExp);\n if (params) {\n\n var dX = value == TRANSLATE + \"y\" ? +null : +params[1],\n dY = value == TRANSLATE + \"y\" ? +params[1] : +params[2];\n\n if (isFixed) {\n if (!isNaN(originalPosition.right)) {\n if (!isNaN(dX)) { extend(single, { right: originalPosition.right - dX }); }\n } else {\n if (!isNaN(dX)) { extend(single, { left: originalPosition.left + dX }); }\n }\n\n if (!isNaN(originalPosition.bottom)) {\n if (!isNaN(dY)) { extend(single, { bottom: originalPosition.bottom - dY }); }\n } else {\n if (!isNaN(dY)) { extend(single, { top: originalPosition.top + dY }); }\n }\n } else {\n if (!isNaN(dX)) { extend(single, { marginLeft: originalPosition.left + dX }); }\n if (!isNaN(dY)) { 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\n if (single) {\n extend(multiple, single);\n }\n }\n });\n\n if (browser.msie) {\n delete multiple.scale;\n }\n\n element.animate(multiple, { queue: false, show: false, hide: false, duration: options.duration, complete: options.complete }); // Stop animate from showing/hiding the element to be able to hide it later on.\n });\n }\n }\n }\n });\n\n fx.animatedPromise = fx.promise;\n\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\n if (!that.restore) {\n that.restore = [];\n }\n },\n\n // Public API\n reverse: function() {\n this._reverse = true;\n return this.run();\n },\n\n play: function() {\n this._reverse = false;\n return this.run();\n },\n\n add: function(additional) {\n this._additionalEffects.push(additional);\n return this;\n },\n\n direction: function(value) {\n this._direction = value;\n return this;\n },\n\n duration: function(duration) {\n this._duration = duration;\n return this;\n },\n\n compositeRun: function() {\n var that = this,\n effectSet = new EffectSet(that.element, { reverse: that._reverse, duration: that._duration }),\n effects = that._additionalEffects.concat([ that ]);\n\n return effectSet.run(effects);\n },\n\n run: function() {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n\n var that = this,\n element = that.element,\n idx = 0,\n restore = that.restore,\n length = restore.length,\n value,\n deferred = $.Deferred(),\n start = {},\n end = {},\n target,\n children = that.children(),\n childrenLength = children.length;\n\n deferred.done(that._complete.bind(that));\n\n element.data(\"animating\", true);\n\n for (idx = 0; idx < length; idx ++) {\n value = restore[idx];\n\n if (!element.data(value)) {\n element.data(value, element.css(value));\n }\n }\n\n for (idx = 0; idx < childrenLength; idx ++) {\n children[idx].duration(that._duration).run();\n }\n\n that.prepare(start, end);\n\n if (!element.is(\":visible\")) {\n extend(start, { display: element.data(\"olddisplay\") || \"block\" });\n }\n\n if (transforms) {\n target = element.data(\"targetTransform\");\n\n if (target) {\n start = extend(target, start);\n }\n }\n\n start = normalizeCSS(element, start);\n\n if (transforms && !transitions) {\n start = strip3DTransforms(start);\n }\n\n element.css(start).css(TRANSFORM); // Trick webkit into re-rendering\n\n that.setup();\n\n element.data(\"targetTransform\", end);\n fx.animate(element, end, { duration: that._duration, complete: deferred.resolve });\n\n return deferred.promise();\n },\n\n stop: function() {\n var idx = 0,\n children = this.children(),\n childrenLength = children.length;\n\n for (idx = 0; idx < childrenLength; idx ++) {\n children[idx].stop();\n }\n\n $(this.element).kendoStop(true, true);\n return this;\n },\n\n restoreCallback: function() {\n var element = this.element;\n\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\n _complete: function() {\n var that = this,\n element = that.element;\n\n element\n .removeData(\"animating\")\n .dequeue(); // call next animation from the queue\n\n that.restoreCallback();\n\n if (that.shouldHide()) {\n element.data(\"olddisplay\", element.css(\"display\")).hide();\n }\n\n if (hasZoom && !transforms) {\n setTimeout(that.restoreCallback.bind(that), 0); // Again jQuery callback in IE8-\n }\n\n that.teardown();\n },\n\n /////////////////////////// Support for kendo.animate;\n setOptions: function(options) {\n extend(true, this.options, options);\n },\n\n children: function() {\n return [];\n },\n\n shouldHide: $.noop,\n\n setup: $.noop,\n prepare: $.noop,\n teardown: $.noop,\n directions: [],\n\n setReverse: function(reverse) {\n this._reverse = reverse;\n return this;\n }\n });\n\n function capitalize(word) {\n return word.charAt(0).toUpperCase() + word.substring(1);\n }\n\n function createEffect(name, definition) {\n var effectClass = Effect.extend(definition),\n directions = effectClass.prototype.directions;\n\n fx[capitalize(name)] = effectClass;\n\n fx.Element.prototype[name] = function(direction, opt1, opt2, opt3) {\n return new effectClass(this.element, direction, opt1, opt2, opt3);\n };\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\n var FOUR_DIRECTIONS = [\"left\", \"right\", \"up\", \"down\"],\n IN_OUT = [\"in\", \"out\"];\n\n createEffect(\"slideIn\", {\n directions: FOUR_DIRECTIONS,\n\n divisor: function(value) {\n this.options.divisor = value;\n return this;\n },\n\n prepare: function(start, end) {\n var that = this,\n tmp,\n element = that.element,\n outerWidth = kendo._outerWidth,\n outerHeight = kendo._outerHeight,\n direction = directions[that._direction],\n offset = -direction.modifier * (direction.vertical ? outerHeight(element) : outerWidth(element)),\n startValue = offset / (that.options && that.options.divisor || 1) + PX,\n endValue = \"0px\";\n\n if (that._reverse) {\n tmp = start;\n start = end;\n end = tmp;\n }\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\n createEffect(\"tile\", {\n directions: FOUR_DIRECTIONS,\n\n init: function(element, direction, previous) {\n Effect.prototype.init.call(this, element, direction);\n this.options = { previous: previous };\n },\n\n previousDivisor: function(value) {\n this.options.previousDivisor = value;\n return this;\n },\n\n children: function() {\n var that = this,\n reverse = that._reverse,\n previous = that.options.previous,\n divisor = that.options.previousDivisor || 1,\n dir = that._direction;\n\n var children = [ kendo.fx(that.element).slideIn(dir).setReverse(reverse) ];\n\n if (previous) {\n children.push( kendo.fx(previous).slideIn(directions[dir].reverse).divisor(divisor).setReverse(!reverse) );\n }\n\n return children;\n }\n });\n\n function createToggleEffect(name, property, defaultStart, defaultEnd) {\n createEffect(name, {\n directions: IN_OUT,\n\n startValue: function(value) {\n this._startValue = value;\n return this;\n },\n\n endValue: function(value) {\n this._endValue = value;\n return this;\n },\n\n shouldHide: function() {\n return this._shouldHide;\n },\n\n prepare: function(start, end) {\n var that = this,\n startValue,\n endValue,\n out = this._direction === \"out\",\n startDataValue = that.element.data(property),\n startDataValueIsSet = !(isNaN(startDataValue) || startDataValue == defaultStart);\n\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\n if (typeof this._endValue !== \"undefined\") {\n endValue = this._endValue;\n } else {\n endValue = out ? defaultEnd : defaultStart;\n }\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\n that._shouldHide = end[property] === defaultEnd;\n }\n });\n }\n\n createToggleEffect(\"fade\", \"opacity\", 1, 0);\n createToggleEffect(\"zoom\", \"scale\", 1, 0.01);\n\n createEffect(\"slideMargin\", {\n prepare: function(start, end) {\n var that = this,\n element = that.element,\n options = that.options,\n origin = element.data(ORIGIN),\n offset = options.offset,\n margin,\n reverse = that._reverse;\n\n if (!reverse && origin === null) {\n element.data(ORIGIN, parseFloat(element.css(\"margin-\" + options.axis)));\n }\n\n margin = (element.data(ORIGIN) || 0);\n end[\"margin-\" + options.axis] = !reverse ? margin + offset : margin;\n }\n });\n\n createEffect(\"slideTo\", {\n prepare: function(start, end) {\n var that = this,\n element = that.element,\n options = that.options,\n offset = options.offset.split(\",\"),\n reverse = that._reverse;\n\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\n createEffect(\"expand\", {\n directions: [\"horizontal\", \"vertical\"],\n\n restore: [ OVERFLOW ],\n\n prepare: function(start, end) {\n var that = this,\n element = that.element,\n options = that.options,\n reverse = that._reverse,\n property = that._direction === \"vertical\" ? HEIGHT : WIDTH,\n setLength = element[0].style[property],\n oldLength = element.data(property),\n length = parseFloat(oldLength || setLength),\n realLength = round(element.css(property, AUTO)[property]());\n\n start.overflow = HIDDEN;\n\n length = (options && options.reset) ? realLength || length : length || realLength;\n\n end[property] = (reverse ? 0 : length) + PX;\n start[property] = (reverse ? length : 0) + PX;\n\n if (oldLength === undefined$1) {\n element.data(property, setLength);\n }\n },\n\n shouldHide: function() {\n return this._reverse;\n },\n\n teardown: function() {\n var that = this,\n element = that.element,\n property = that._direction === \"vertical\" ? HEIGHT : WIDTH,\n length = element.data(property);\n\n if (length == AUTO || length === BLANK) {\n setTimeout(function() { element.css(property, AUTO).css(property); }, 0); // jQuery animate complete callback in IE is called before the last animation step!\n }\n }\n });\n\n var TRANSFER_START_STATE = { position: \"absolute\", marginLeft: 0, marginTop: 0, scale: 1 };\n /**\n * Intersection point formulas are taken from here - http://zonalandeducation.com/mmts/intersections/intersectionOfTwoLines1/intersectionOfTwoLines1.html\n * Formula for a linear function from two points from here - http://demo.activemath.org/ActiveMath2/search/show.cmd?id=mbase://AC_UK_calculus/functions/ex_linear_equation_two_points\n * The transform origin point is the intersection point of the two lines from the top left corners/top right corners of the element and target.\n * The math and variables below MAY BE SIMPLIFIED (zeroes removed), but this would make the formula too cryptic.\n */\n createEffect(\"transfer\", {\n init: function(element, target) {\n this.element = element;\n this.options = { target: target };\n this.restore = [];\n },\n\n setup: function() {\n this.element.appendTo(document.body);\n },\n\n prepare: function(start, end) {\n var that = this,\n element = that.element,\n outerBox = fx.box(element),\n innerBox = fx.box(that.options.target),\n currentScale = animationProperty(element, \"scale\"),\n scale = fx.fillScale(innerBox, outerBox),\n transformOrigin = fx.transformOrigin(innerBox, outerBox);\n\n extend(start, TRANSFER_START_STATE);\n end.scale = 1;\n\n element.css(TRANSFORM, \"scale(1)\").css(TRANSFORM);\n element.css(TRANSFORM, \"scale(\" + currentScale + \")\");\n\n start.top = outerBox.top;\n start.left = outerBox.left;\n start.transformOrigin = transformOrigin.x + PX + \" \" + transformOrigin.y + PX;\n\n if (that._reverse) {\n start.scale = scale;\n } else {\n end.scale = scale;\n }\n }\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\n var ROTATIONS = {\n top: { start: \"rotatex(0deg)\", end: \"rotatex(180deg)\" },\n bottom: { start: \"rotatex(-180deg)\", end: \"rotatex(0deg)\" },\n left: { start: \"rotatey(0deg)\", end: \"rotatey(-180deg)\" },\n right: { start: \"rotatey(180deg)\", end: \"rotatey(0deg)\" }\n };\n\n function clipInHalf(container, direction) {\n var vertical = kendo.directions[direction].vertical,\n size = (container[vertical ? HEIGHT : WIDTH]() / 2) + \"px\";\n\n return CLIPS[direction].replace(\"$size\", size);\n }\n\n createEffect(\"turningPage\", {\n directions: FOUR_DIRECTIONS,\n\n init: function(element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n\n prepare: function(start, end) {\n var that = this,\n reverse = that._reverse,\n direction = reverse ? directions[that._direction].reverse : that._direction,\n rotation = ROTATIONS[direction];\n\n start.zIndex = 1;\n\n if (that._clipInHalf) {\n start.clip = clipInHalf(that._container, kendo.directions[direction].reverse);\n }\n\n start[BACKFACE] = HIDDEN;\n\n end[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.start : rotation.end);\n start[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.end : rotation.start);\n },\n\n setup: function() {\n this._container.append(this.element);\n },\n\n face: function(value) {\n this._face = value;\n return this;\n },\n\n shouldHide: function() {\n var that = this,\n reverse = that._reverse,\n face = that._face;\n\n return (reverse && !face) || (!reverse && face);\n },\n\n clipInHalf: function(value) {\n this._clipInHalf = value;\n return this;\n },\n\n temporary: function() {\n this.element.addClass('temp-page');\n return this;\n }\n });\n\n createEffect(\"staticPage\", {\n directions: FOUR_DIRECTIONS,\n\n init: function(element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n\n restore: [\"clip\"],\n\n prepare: function(start, end) {\n var that = this,\n direction = that._reverse ? directions[that._direction].reverse : that._direction;\n\n start.clip = clipInHalf(that._container, direction);\n start.opacity = 0.999;\n end.opacity = 1;\n },\n\n shouldHide: function() {\n var that = this,\n reverse = that._reverse,\n face = that._face;\n\n return (reverse && !face) || (!reverse && face);\n },\n\n face: function(value) {\n this._face = value;\n return this;\n }\n });\n\n createEffect(\"pageturn\", {\n directions: [\"horizontal\", \"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\n children: function() {\n var that = this,\n options = that.options,\n direction = that._direction === \"horizontal\" ? \"left\" : \"top\",\n reverseDirection = kendo.directions[direction].reverse,\n reverse = that._reverse,\n temp,\n faceClone = options.face.clone(true).removeAttr(\"id\"),\n backClone = options.back.clone(true).removeAttr(\"id\"),\n element = that.element;\n\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\n }\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\n prepare: function(start, end) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = \"preserve-3d\";\n // hack to trigger transition end.\n start.opacity = 0.999;\n end.opacity = 1;\n },\n\n teardown: function() {\n this.element.find(\".temp-page\").remove();\n }\n });\n\n createEffect(\"flip\", {\n directions: [\"horizontal\", \"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\n children: function() {\n var that = this,\n options = that.options,\n direction = that._direction === \"horizontal\" ? \"left\" : \"top\",\n reverseDirection = kendo.directions[direction].reverse,\n reverse = that._reverse,\n temp,\n element = that.element;\n\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\n }\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\n prepare: function(start) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = \"preserve-3d\";\n }\n });\n\n var RESTORE_OVERFLOW = !support.mobileOS.android;\n var IGNORE_TRANSITION_EVENT_SELECTOR = \".km-touch-scrollbar, .km-actionsheet-wrapper\";\n\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\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\n beforeTransition: function(callback) {\n this._before = callback;\n return this;\n },\n\n afterTransition: function(callback) {\n this._after = callback;\n return this;\n },\n\n _both: function() {\n return $().add(this._element).add(this._previous);\n },\n\n _containerClass: function() {\n var direction = this._direction,\n containerClass = \"k-fx k-fx-start k-fx-\" + this._transitionClass;\n\n if (direction) {\n containerClass += \" k-fx-\" + direction;\n }\n\n if (this._reverse) {\n containerClass += \" k-fx-reverse\";\n }\n\n return containerClass;\n },\n\n complete: function(e) {\n if (!this.deferred || (e && $(e.target).is(IGNORE_TRANSITION_EVENT_SELECTOR))) {\n return;\n }\n\n var container = this.container;\n\n container\n .removeClass(\"k-fx-end\")\n .removeClass(this._containerClass())\n .off(transitions.event, this.completeProxy);\n\n this._previous.hide().removeClass(\"k-fx-current\");\n this.element.removeClass(\"k-fx-next\");\n\n if (RESTORE_OVERFLOW) {\n container.css(OVERFLOW, \"\");\n }\n\n if (!this.isAbsolute) {\n this._both().css(POSITION, \"\");\n }\n\n this.deferred.resolve();\n delete this.deferred;\n },\n\n run: function() {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n\n var that = this,\n element = that.element,\n previous = that._previous,\n container = element.parents().filter(previous.parents()).first(),\n both = that._both(),\n deferred = $.Deferred(),\n originalPosition = element.css(POSITION),\n originalOverflow;\n\n // edge case for grid/scheduler, where the previous is already destroyed.\n if (!container.length) {\n container = element.parent();\n }\n\n this.container = container;\n this.deferred = deferred;\n this.isAbsolute = originalPosition == \"absolute\";\n\n if (!this.isAbsolute) {\n both.css(POSITION, \"absolute\");\n }\n\n if (RESTORE_OVERFLOW) {\n originalOverflow = container.css(OVERFLOW);\n container.css(OVERFLOW, \"hidden\");\n }\n\n if (!transitions) {\n this.complete();\n } else {\n element.addClass(\"k-fx-hidden\");\n\n container.addClass(this._containerClass());\n\n this.completeProxy = this.complete.bind(this);\n container.on(transitions.event, this.completeProxy);\n\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\n return deferred.promise();\n },\n\n stop: function() {\n this.complete();\n }\n });\n\n var Animation = kendo.Class.extend({\n init: function() {\n var that = this;\n that._tickProxy = that._tick.bind(that);\n that._started = false;\n },\n\n tick: $.noop,\n done: $.noop,\n onEnd: $.noop,\n onCancel: $.noop,\n\n start: function() {\n if (!this.enabled()) {\n return;\n }\n\n if (!this.done()) {\n this._started = true;\n kendo.animationFrame(this._tickProxy);\n } else {\n this.onEnd();\n }\n },\n\n enabled: function() {\n return true;\n },\n\n cancel: function() {\n this._started = false;\n this.onCancel();\n },\n\n _tick: function() {\n var that = this;\n if (!that._started) { return; }\n\n that.tick();\n\n if (!that.done()) {\n kendo.animationFrame(that._tickProxy);\n } else {\n that._started = false;\n that.onEnd();\n }\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\n done: function() {\n return this.timePassed() >= this.duration;\n },\n\n timePassed: function() {\n return Math.min(this.duration, (new Date()) - this.startDate);\n },\n\n moveTo: function(options) {\n var that = this,\n movable = that.movable;\n\n that.initial = movable[that.axis];\n that.delta = options.location - that.initial;\n\n that.duration = typeof options.duration == \"number\" ? options.duration : 300;\n\n that.tick = that._easeProxy(options.ease);\n\n that.startDate = new Date();\n that.start();\n },\n\n _easeProxy: function(ease) {\n var that = this;\n\n return function() {\n that.movable.moveAxis(that.axis, ease(that.timePassed(), that.initial, that.delta, that.duration));\n };\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\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\n fx.Animation = Animation;\n fx.Transition = Transition;\n fx.createEffect = createEffect;\n\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\n fx.transformOrigin = function(inner, outer) {\n var x = (inner.left - outer.left) * outer.width / (outer.width - inner.width),\n y = (inner.top - outer.top) * outer.height / (outer.height - inner.height);\n\n return {\n x: isNaN(x) ? 0 : x,\n y: isNaN(y) ? 0 : y\n };\n };\n\n fx.fillScale = function(inner, outer) {\n return Math.min(inner.width / outer.width, inner.height / outer.height);\n };\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\n var __meta__$12 = {\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\n (function($, undefined$1) {\n var kendo = window.kendo,\n CHANGE = \"change\",\n BACK = \"back\",\n SAME = \"same\",\n support = kendo.support,\n location = window.location,\n history = window.history,\n CHECK_URL_INTERVAL = 50,\n BROKEN_BACK_NAV = kendo.support.browser.msie,\n hashStrip = /^#*/,\n document = window.document;\n\n function absoluteURL(path, pathPrefix) {\n if (!pathPrefix) {\n return path;\n }\n\n if (path + \"/\" === pathPrefix) {\n path = pathPrefix;\n }\n\n var regEx = new RegExp(\"^\" + pathPrefix, \"i\");\n\n if (!regEx.test(path)) {\n path = pathPrefix + \"/\" + path;\n }\n\n return location.protocol + '//' + (location.host + \"/\" + path).replace(/\\/\\/+/g, '/');\n }\n\n function hashDelimiter(bang) {\n return bang ? \"#!\" : \"#\";\n }\n\n function locationHash(hashDelimiter) {\n var href = location.href;\n\n // ignore normal anchors if in hashbang mode - however, still return \"\" if no hash present\n if (hashDelimiter === \"#!\" && href.indexOf(\"#\") > -1 && href.indexOf(\"#!\") < 0) {\n return null;\n }\n\n return href.split(hashDelimiter)[1] || \"\";\n }\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\n var HistoryAdapter = kendo.Class.extend({\n back: function() {\n if (BROKEN_BACK_NAV) {\n setTimeout(function() { history.back(); });\n } else {\n history.back();\n }\n },\n\n forward: function() {\n if (BROKEN_BACK_NAV) {\n setTimeout(function() { history.forward(); });\n } else {\n history.forward();\n }\n },\n\n length: function() {\n return history.length;\n },\n\n replaceLocation: function(url) {\n location.replace(url);\n }\n });\n\n var PushStateAdapter = HistoryAdapter.extend({\n init: function(root) {\n this.root = root;\n },\n\n navigate: function(to) {\n history.pushState({}, document.title, absoluteURL(to, this.root));\n },\n\n replace: function(to) {\n history.replaceState({}, document.title, absoluteURL(to, this.root));\n },\n\n normalize: function(url) {\n return stripRoot(this.root, url);\n },\n\n current: function() {\n var current = location.pathname;\n\n if (location.search) {\n current += location.search;\n }\n\n return stripRoot(this.root, current);\n },\n\n change: function(callback) {\n $(window).bind(\"popstate.kendo\", callback);\n },\n\n stop: function() {\n $(window).unbind(\"popstate.kendo\");\n },\n\n normalizeCurrent: function(options) {\n var fixedUrl,\n root = options.root,\n pathname = location.pathname,\n hash = locationHash(hashDelimiter(options.hashBang));\n\n if (root === pathname + \"/\") {\n fixedUrl = root;\n }\n\n if (root === pathname && hash) {\n fixedUrl = absoluteURL(hash.replace(hashStrip, ''), root);\n }\n\n if (fixedUrl) {\n history.pushState({}, document.title, fixedUrl);\n }\n }\n });\n\n function fixHash(url) {\n return url.replace(/^(#)?/, \"#\");\n }\n\n function fixBang(url) {\n return url.replace(/^(#(!)?)?/, \"#!\");\n }\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\n navigate: function(to) {\n location.hash = this.fix(to);\n },\n\n replace: function(to) {\n this.replaceLocation(this.fix(to));\n },\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\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\n stop: function() {\n $(window).off(\"hashchange.\" + this._id);\n clearInterval(this._interval);\n },\n\n current: function() {\n return locationHash(this.prefix);\n },\n\n normalizeCurrent: function(options) {\n var pathname = location.pathname,\n root = options.root;\n\n if (options.pushState && root !== pathname) {\n this.replaceLocation(root + this.prefix + stripRoot(root, pathname));\n return true; // browser will reload at this point.\n }\n\n return false;\n }\n });\n\n var History = kendo.Observable.extend({\n start: function(options) {\n options = options || {};\n\n this.bind([CHANGE, BACK, SAME], options);\n\n if (this._started) {\n return;\n }\n\n this._started = true;\n\n options.root = options.root || \"/\";\n\n var adapter = this.createAdapter(options),\n current;\n\n // adapter may reload the document\n if (adapter.normalizeCurrent(options)) {\n return;\n }\n\n current = adapter.current();\n\n $.extend(this, {\n adapter: adapter,\n root: options.root,\n historyLength: adapter.length(),\n current: current,\n locations: [current]\n });\n\n adapter.change(this._checkUrl.bind(this));\n },\n\n createAdapter: function(options) {\n return support.pushState && options.pushState ? new PushStateAdapter(options.root) : new HashAdapter(options.hashBang);\n },\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\n change: function(callback) {\n this.bind(CHANGE, callback);\n },\n\n replace: function(to, silent) {\n\n this._navigate(to, silent, function(adapter) {\n adapter.replace(to);\n this.locations[this.locations.length - 1] = this.current;\n });\n },\n\n navigate: function(to, silent) {\n if (to === \"#:back\") {\n this.backCalled = true;\n this.adapter.back();\n return;\n }\n\n this._navigate(to, silent, function(adapter) {\n adapter.navigate(to);\n this.locations.push(this.current);\n });\n },\n\n _navigate: function(to, silent, callback) {\n var adapter = this.adapter;\n\n to = adapter.normalize(to);\n\n if (this.current === to || this.current === decodeURIComponent(to)) {\n this.trigger(SAME);\n return;\n }\n\n if (!silent) {\n if (this.trigger(CHANGE, { url: to, decode: false })) {\n return;\n }\n }\n\n this.current = to;\n\n callback.call(this, adapter);\n\n this.historyLength = adapter.length();\n },\n\n _checkUrl: function() {\n var adapter = this.adapter,\n current = adapter.current(),\n newLength = adapter.length(),\n navigatingInExisting = this.historyLength === newLength,\n back = current === this.locations[this.locations.length - 2] && navigatingInExisting,\n backCalled = this.backCalled,\n prev = this.current;\n\n if (current === null || this.current === current || this.current === decodeURIComponent(current)) {\n return true;\n }\n\n this.historyLength = newLength;\n this.backCalled = false;\n\n this.current = current;\n\n if (back && this.trigger(\"back\", { url: prev, to: current })) {\n adapter.forward();\n this.current = prev;\n return;\n }\n\n if (this.trigger(CHANGE, { url: current, backButtonPressed: !backCalled })) {\n if (back) {\n adapter.forward();\n } else {\n adapter.back();\n this.historyLength --;\n }\n this.current = prev;\n return;\n }\n\n if (back) {\n this.locations.pop();\n } else {\n this.locations.push(current);\n }\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\n (function() {\n var kendo = window.kendo,\n history = kendo.history,\n Observable = kendo.Observable,\n INIT = \"init\",\n ROUTE_MISSING = \"routeMissing\",\n CHANGE = \"change\",\n BACK = \"back\",\n SAME = \"same\",\n optionalParam = /\\((.*?)\\)/g,\n namedParam = /(\\(\\?)?:\\w+/g,\n splatParam = /\\*\\w+/g,\n escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n\n function namedParamReplace(match, optional) {\n return optional ? match : '([^\\/]+)';\n }\n\n function routeToRegExp(route, ignoreCase) {\n return new RegExp('^' + route\n .replace(escapeRegExp, '\\\\$&')\n .replace(optionalParam, '(?:$1)?')\n .replace(namedParam, namedParamReplace)\n .replace(splatParam, '(.*?)') + '$', ignoreCase ? \"i\" : \"\");\n }\n\n function stripUrl(url) {\n return url.replace(/(\\?.*)|(#.*)/g, \"\");\n }\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\n this.route = route;\n this._callback = callback;\n },\n\n callback: function(url, back, decode) {\n var params,\n idx = 0,\n length,\n queryStringParams = kendo.parseQueryStringParams(url);\n queryStringParams._back = back;\n\n url = stripUrl(url);\n params = this.route.exec(url).slice(1);\n length = params.length;\n\n if (decode) {\n for (; idx < length; idx ++) {\n if (typeof params[idx] !== 'undefined') {\n params[idx] = decodeURIComponent(params[idx]);\n }\n }\n }\n\n params.push(queryStringParams);\n\n this._callback.apply(null, params);\n },\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\n var Router = Observable.extend({\n init: function(options) {\n if (!options) {\n options = {};\n }\n\n Observable.fn.init.call(this);\n\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\n this.bind([INIT, ROUTE_MISSING, CHANGE, SAME, BACK], options);\n },\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\n start: function() {\n var that = this,\n sameProxy = function() { that._same(); },\n backProxy = function(e) { that._back(e); },\n urlChangedProxy = function(e) { 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\n // eslint-disable-next-line no-undef\n var initEventObject = { url: history.current || \"/\", preventDefault: $.noop };\n\n if (!that.trigger(INIT, initEventObject)) {\n that._urlChanged(initEventObject);\n }\n\n this._urlChangedProxy = urlChangedProxy;\n this._backProxy = backProxy;\n },\n\n route: function(route, callback) {\n this.routes.push(new Route(route, callback, this.ignoreCase));\n },\n\n navigate: function(url, silent) {\n kendo.history.navigate(url, silent);\n },\n\n replace: function(url, silent) {\n kendo.history.replace(url, silent);\n },\n\n _back: function(e) {\n if (this.trigger(BACK, { url: e.url, to: e.to })) {\n e.preventDefault();\n }\n },\n\n _same: function() {\n this.trigger(SAME);\n },\n\n _urlChanged: function(e) {\n var url = e.url;\n var decode = !!e.decode;\n var back = e.backButtonPressed;\n\n if (!url) {\n url = \"/\";\n }\n\n if (this.trigger(CHANGE, { url: e.url, params: kendo.parseQueryStringParams(e.url), backButtonPressed: back })) {\n e.preventDefault();\n return;\n }\n\n var idx = 0,\n routes = this.routes,\n route,\n length = routes.length;\n\n for (; idx < length; idx ++) {\n route = routes[idx];\n\n if (route.worksWith(url, back, decode)) {\n return;\n }\n }\n\n if (this.trigger(ROUTE_MISSING, { url: url, params: kendo.parseQueryStringParams(url), backButtonPressed: back })) {\n e.preventDefault();\n }\n }\n });\n\n kendo.Router = Router;\n })();\n\n var __meta__$11 = {\n id: \"data.odata\",\n name: \"OData\",\n category: \"framework\",\n depends: [ \"core\" ],\n hidden: true\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n extend = $.extend,\n NEWLINE = \"\\r\\n\",\n DOUBLELINE = \"\\r\\n\\r\\n\",\n isFunction = kendo.isFunction,\n 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 },\n odataFiltersVersionFour = extend({}, odataFilters, {\n contains: \"contains\"\n }),\n 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\n if (value.dir === \"desc\") {\n order += \" desc\";\n }\n\n return order;\n }).join(\",\");\n\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 },\n defaultDataType = {\n read: {\n dataType: \"jsonp\"\n }\n };\n\n function toOdataFilter(filter, useOdataFour) {\n var result = [],\n logic = filter.logic || \"and\",\n idx,\n length,\n field,\n type,\n format,\n operator,\n value,\n ignoreCase,\n filters = filter.filters;\n\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\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\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$1) {\n type = kendo.type(value);\n if (type === \"string\") {\n format = \"'{1}'\";\n value = value.replace(/'/g, \"''\");\n\n if (ignoreCase === true) {\n field = \"tolower(\" + field + \")\";\n }\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\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\n filter = kendo.format(format, filter, value, field);\n }\n }\n\n result.push(filter);\n }\n\n filter = result.join(\" \" + logic + \" \");\n\n if (result.length > 1) {\n filter = \"(\" + filter + \")\";\n }\n\n return filter;\n }\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\n function hex16() {\n return Math.floor((1 + Math.random()) * 0x10000).toString(16).substr(1);\n }\n\n function createBoundary(prefix) {\n return prefix + hex16() + '-' + hex16() + '-' + hex16();\n }\n\n function createDelimeter(boundary, close) {\n var result = NEWLINE + \"--\" + boundary;\n\n if (close) {\n result += \"--\";\n }\n\n return result;\n }\n\n function createCommand(transport, item, httpVerb, command) {\n var transportUrl = transport.options[command].url;\n var commandPrefix = kendo.format(\"{0} \", httpVerb);\n\n if (isFunction(transportUrl)) {\n return commandPrefix + transportUrl(item);\n } else {\n return commandPrefix + transportUrl;\n }\n }\n\n function getOperationHeader(changeset, changeId) {\n var header = \"\";\n\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\n return header;\n }\n\n function getOperationContent(item) {\n var content = \"\";\n\n content += NEWLINE + \"Content-Type: application/json;odata=minimalmetadata\";\n content += NEWLINE + \"Prefer: return=representation\";\n content += DOUBLELINE + kendo.stringify(item);\n\n return content;\n }\n\n function getOperations(collection, changeset, changeId, command, transport, skipContent) {\n var requestBody = \"\";\n\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\n return requestBody;\n }\n\n function processCollection(colection, boundary, changeset, changeId, transport, command, skipContent) {\n var requestBody = \"\";\n\n requestBody += getBoundary(boundary, changeset);\n requestBody += getOperations(colection, changeset, changeId, command, transport, skipContent);\n requestBody += createDelimeter(changeset, true);\n requestBody += NEWLINE;\n\n return requestBody;\n }\n\n function getBoundary(boundary,changeset) {\n var requestBody = \"\";\n\n requestBody += \"--\" + boundary + NEWLINE;\n requestBody += \"Content-Type: multipart/mixed; boundary=\" + changeset + NEWLINE;\n\n return requestBody;\n }\n\n function createBatchRequest(transport, colections) {\n \t\tvar options = extend({}, transport.options.batch);\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\n options.type = transport.options.batch.type;\n options.url = isFunction(batchURL) ? batchURL() : batchURL;\n \t\toptions.headers = extend(options.headers || {}, {\n \t\t\t\"Content-Type\": \"multipart/mixed; boundary=\" + boundary\n \t\t});\n\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\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\n if (colections.created.length) {\n requestBody += processCollection(colections.created, boundary, changeset, changeId, transport, \"create\", false);\n }\n\n requestBody += createDelimeter(boundary, true);\n\n options.data = requestBody;\n\n return options;\n }\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\n collections.push({ models: [], 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({ models: [], passed: true });\n }\n continue;\n }\n\n if (!markerIndex) {\n markerIndex = responseText.indexOf(marker);\n } else {\n markerIndex = responseText.indexOf(marker, markerIndex + marker.length);\n }\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\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 }\n\n return collections;\n }\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, // to prevent jQuery from adding cache buster\n dataType: \"jsonp\",\n jsonp: \"$callback\"\n },\n update: {\n cache: true,\n dataType: \"json\",\n contentType: \"application/json\", // to inform the server the the request body is JSON encoded\n type: \"PUT\" // can be PUT or MERGE\n },\n create: {\n cache: true,\n dataType: \"json\",\n contentType: \"application/json\",\n type: \"POST\" // must be POST to create new entity\n },\n destroy: {\n cache: true,\n dataType: \"json\",\n type: \"DELETE\"\n },\n parameterMap: function(options, type, useVersionFour) {\n var params,\n value,\n option,\n dataType;\n\n options = options || {};\n type = type || \"read\";\n dataType = (this.options || defaultDataType)[type];\n dataType = dataType ? dataType.dataType : \"json\";\n\n if (type === \"read\") {\n params = {\n $inlinecount: \"allpages\"\n };\n\n if (dataType != \"json\") {\n params.$format = \"json\";\n }\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\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\n params = kendo.stringify(options);\n }\n }\n\n return params;\n }\n }\n }\n });\n\n extend(true, kendo.data, {\n schemas: {\n \"odata-v4\": {\n type: \"json\",\n data: function(data) {\n if (Array.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\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: {\n type: \"POST\"\n },\n read: {\n cache: true, // to prevent jQuery from adding cache buster\n dataType: \"json\"\n },\n update: {\n cache: true,\n dataType: \"json\",\n contentType: \"application/json;IEEE754Compatible=true\", // to inform the server the the request body is JSON encoded\n type: \"PUT\" // can be PUT or MERGE\n },\n create: {\n cache: true,\n dataType: \"json\",\n contentType: \"application/json;IEEE754Compatible=true\",\n type: \"POST\" // must be POST to create new entity\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\n \t\t\t\t\tif (result && result.$filter) {\n \t\t\t\t\t\t// Remove the single quotation marks around the GUID (OData v4).\n \t\t\t\t\t\tresult.$filter = result.$filter.replace(/('[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')/ig, function(x) {\n \t\t\t\t\t\t\treturn x.substring(1, x.length - 1);\n \t\t\t\t\t\t});\n \t\t\t\t\t}\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\n if (!collections.updated.length && !collections.destroyed.length && !collections.created.length) {\n return;\n }\n\n $.ajax(extend(true, {}, {\n success: function(response) {\n var responses = parseBatchResponse(response);\n var index = 0;\n var current;\n\n if (collections.updated.length) {\n current = responses[index];\n if (current.passed) {\n // Pass either the obtained models or an empty array if only status codes are returned.\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 // For delete operations OData returns only status codes.\n // Passing empty array to datasource will force it to correctly remove the deleted items from the pristine collection.\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\n })(window.kendo.jQuery);\n\n var __meta__$10 = {\n id: \"data.xml\",\n name: \"XML\",\n category: \"framework\",\n depends: [ \"core\" ],\n hidden: true\n };\n\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n isArray = Array.isArray,\n isPlainObject = $.isPlainObject,\n map = $.map,\n each = $.each,\n extend = $.extend,\n getter = kendo.getter,\n Class = kendo.Class;\n\n var XmlDataReader = Class.extend({\n init: function(options) {\n var that = this,\n total = options.total,\n model = options.model,\n parse = options.parse,\n errors = options.errors,\n serialize = options.serialize,\n data = options.data;\n\n if (model) {\n if (isPlainObject(model)) {\n var base = options.modelBase || kendo.data.Model;\n\n if (model.fields) {\n each(model.fields, function(field, value) {\n if (isPlainObject(value) && value.field) {\n if (!kendo.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\n var id = model.id;\n if (id) {\n var idField = {};\n\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\n that.model = model;\n }\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\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\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),\n modelInstance;\n\n result = isArray(result) ? result : [result];\n\n if (that.model && model.fields) {\n modelInstance = new that.model();\n\n return map(result, function(value) {\n if (value) {\n var record = {}, field;\n\n for (field in model.fields) {\n record[field] = modelInstance._parse(field, model.fields[field].field(value));\n }\n\n return record;\n }\n });\n }\n\n return result;\n };\n } else if (typeof data == \"function\") {\n that.data = data;\n }\n }\n\n if (typeof parse == \"function\") {\n var xmlParse = that.parse;\n\n that.parse = function(data) {\n var xml = parse.call(that, data);\n return xmlParse.call(that, xml);\n };\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 = {},\n parsedNode,\n node,\n nodeType,\n nodeName,\n member,\n attribute,\n attributes = element.attributes,\n attributeCount = attributes.length,\n idx;\n\n for (idx = 0; idx < attributeCount; idx++) {\n attribute = attributes[idx];\n result[\"@\" + attribute.nodeName] = attribute.nodeValue;\n }\n\n for (node = element.firstChild; node; node = node.nextSibling) {\n nodeType = node.nodeType;\n\n if (nodeType === 3 || nodeType === 4) {\n // text nodes or CDATA are stored as #text field\n result[\"#text\"] = node.nodeValue;\n } else if (nodeType === 1) {\n // elements are stored as fields\n parsedNode = this.parseDOM(node);\n\n nodeName = node.nodeName;\n\n member = result[nodeName];\n\n if (isArray(member)) {\n // elements of same nodeName are stored as array\n member.push(parsedNode);\n } else if (member !== undefined$1) {\n member = [member, parsedNode];\n } else {\n member = parsedNode;\n }\n\n result[nodeName] = member;\n }\n }\n return result;\n },\n\n evaluate: function(value, expression) {\n var members = expression.split(\".\"),\n member,\n result,\n length,\n intermediateResult,\n idx;\n\n while (member = members.shift()) {\n value = value[member];\n\n if (isArray(value)) {\n result = [];\n expression = members.join(\".\");\n\n for (idx = 0, length = value.length; idx < length; idx++) {\n intermediateResult = this.evaluate(value[idx], expression);\n\n intermediateResult = isArray(intermediateResult) ? intermediateResult : [intermediateResult];\n\n result.push.apply(result, intermediateResult);\n }\n\n return result;\n }\n }\n\n return value;\n },\n\n parse: function(xml) {\n var documentElement,\n tree,\n result = {};\n\n documentElement = xml.documentElement || $.parseXML(xml).documentElement;\n\n tree = this.parseDOM(documentElement);\n\n result[documentElement.nodeName] = tree;\n\n return result;\n },\n\n xpathToMember: function(member, raw) {\n if (!member) {\n return \"\";\n }\n\n member = member.replace(/^\\//, \"\") // remove the first \"/\"\n .replace(/\\//g, \".\"); // replace all \"/\" with \".\"\n\n if (member.indexOf(\"@\") >= 0) {\n // replace @attribute with '[\"@attribute\"]'\n return member.replace(/\\.?(@.*)/, raw ? '$1' : '[\"$1\"]');\n }\n\n if (member.indexOf(\"text()\") >= 0) {\n // replace \".text()\" with '[\"#text\"]'\n return member.replace(/(\\.?text\\(\\))/, raw ? '#text' : '[\"#text\"]');\n }\n\n return member;\n },\n getter: function(member) {\n return getter(this.xpathToMember(member), true);\n }\n });\n\n $.extend(true, kendo.data, {\n XmlDataReader: XmlDataReader,\n readers: {\n xml: XmlDataReader\n }\n });\n })(window.kendo.jQuery);\n\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 id: \"data-odata\",\n name: \"OData\",\n description: \"Support for accessing Open Data Protocol (OData) services.\",\n depends: [ \"data.odata\" ]\n }, {\n id: \"data-signalr\",\n name: \"SignalR\",\n description: \"Support for binding to SignalR hubs.\",\n depends: [ \"data.signalr\" ]\n }, {\n id: \"data-XML\",\n name: \"XML\",\n description: \"Support for binding to XML.\",\n depends: [ \"data.xml\" ]\n }]\n };\n\n\n (function($, undefined$1) {\n var extend = $.extend,\n isPlainObject = $.isPlainObject,\n isEmptyObject = $.isEmptyObject,\n isArray = Array.isArray,\n grep = $.grep,\n ajax = $.ajax,\n map,\n each = $.each,\n noop = $.noop,\n kendo = window.kendo,\n isFunction = kendo.isFunction,\n Observable = kendo.Observable,\n Class = kendo.Class,\n STRING = \"string\",\n FUNCTION = \"function\",\n ASCENDING = \"asc\",\n CREATE = \"create\",\n READ = \"read\",\n UPDATE = \"update\",\n DESTROY = \"destroy\",\n CHANGE = \"change\",\n SYNC = \"sync\",\n GET = \"get\",\n ERROR = \"error\",\n REQUESTSTART = \"requestStart\",\n PROGRESS = \"progress\",\n REQUESTEND = \"requestEnd\",\n ITEMSLOADED = \"itemsLoaded\",\n ITEMLOAD = \"itemLoad\",\n crud = [CREATE, READ, UPDATE, DESTROY],\n identity = function(o) { return o; },\n getter = kendo.getter,\n stringify = kendo.stringify,\n math = Math,\n push = [].push,\n join = [].join,\n pop = [].pop,\n splice = [].splice,\n shift = [].shift,\n slice = [].slice,\n unshift = [].unshift,\n toString = {}.toString,\n stableSort = kendo.support.stableSort,\n dateRegExp = /^\\/Date\\((.*?)\\)\\/$/,\n objectKeys = [];\n\n var ObservableArray = Observable.extend({\n init: function(array, type) {\n var that = this;\n\n that.type = type || ObservableObject;\n\n Observable.fn.init.call(that);\n\n that.length = array.length;\n\n that.wrapAll(array, that);\n that._loadPromises = [];\n that._loadedNodes = [];\n },\n\n at: function(index) {\n return this[index];\n },\n\n toJSON: function(serializeFunctions) {\n var idx, length = this.length, value, json = new Array(length);\n\n for (idx = 0; idx < length; idx++) {\n value = this[idx];\n\n if (value instanceof ObservableObject) {\n value = value.toJSON(serializeFunctions);\n }\n\n json[idx] = value;\n }\n\n return json;\n },\n\n parent: noop,\n\n wrapAll: function(source, target) {\n var that = this,\n idx,\n length,\n parent = function() {\n return that;\n };\n\n target = target || [];\n\n for (idx = 0, length = source.length; idx < length; idx++) {\n target[idx] = that.wrap(source[idx], parent);\n }\n\n return target;\n },\n\n wrap: function(object, parent) {\n var that = this,\n observable;\n\n if (object !== null && toString.call(object) === \"[object Object]\") {\n observable = object instanceof that.type || object instanceof Model;\n\n if (!observable) {\n object = object instanceof ObservableObject ? object.toJSON() : object;\n object = new that.type(object);\n }\n\n object.parent = parent;\n\n object.bind(CHANGE, function(e) {\n var isGroup = object.hasOwnProperty(\"hasSubgroups\");\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 || isGroup ? (e.action || \"itemloaded\") : \"itemchange\"\n });\n });\n\n object.bind(ITEMLOAD, function(e) {\n that._loadPromises.push(e.promise);\n that._loading = true;\n\n e.promise.done(function() {\n that._loadedNodes.push(e.node);\n var index = that._loadPromises.indexOf(e.promise);\n that._loadPromises.splice(index, 1);\n\n if (!that._loadPromises.length) {\n that._loading = false;\n that.trigger(ITEMSLOADED, { collection: that, nodes: that._loadedNodes });\n that._loadedNodes = [];\n }\n });\n });\n }\n\n return object;\n },\n\n loading: function() {\n return this._loading;\n },\n\n push: function() {\n var index = this.length,\n items = this.wrapAll(arguments),\n result;\n\n result = push.apply(this, items);\n\n if (!this.omitChangeEvent) {\n this.trigger(CHANGE, {\n action: \"add\",\n index: index,\n items: items\n });\n }\n\n return result;\n },\n\n slice: slice,\n\n sort: [].sort,\n\n join: join,\n\n pop: function() {\n var length = this.length, result = pop.apply(this);\n\n if (length) {\n this.trigger(CHANGE, {\n action: \"remove\",\n index: length - 1,\n items: [result]\n });\n }\n\n return result;\n },\n\n splice: function(index, howMany, item) {\n var items = this.wrapAll(slice.call(arguments, 2)),\n result, i, len;\n\n result = splice.apply(this, [index, howMany].concat(items));\n\n if (result.length) {\n if (!this.omitChangeEvent) {\n this.trigger(CHANGE, {\n action: \"remove\",\n index: index,\n items: result\n });\n }\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\n if (item) {\n if (!this.omitChangeEvent) {\n this.trigger(CHANGE, {\n action: \"add\",\n index: index,\n items: items\n });\n }\n }\n return result;\n },\n\n shift: function() {\n var length = this.length, result = shift.apply(this);\n\n if (length) {\n this.trigger(CHANGE, {\n action: \"remove\",\n index: 0,\n items: [result]\n });\n }\n\n return result;\n },\n\n unshift: function() {\n var items = this.wrapAll(arguments),\n result;\n\n result = unshift.apply(this, items);\n\n this.trigger(CHANGE, {\n action: \"add\",\n index: 0,\n items: items\n });\n\n return result;\n },\n\n indexOf: function(item) {\n var that = this,\n idx,\n length;\n\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\n forEach: function(callback, thisArg) {\n var idx = 0;\n var length = this.length;\n var context = thisArg || window;\n\n for (; idx < length; idx++) {\n callback.call(context, this[idx], idx, this);\n }\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\n for (; idx < length; idx++) {\n result[idx] = callback.call(context, this[idx], idx, this);\n }\n\n return result;\n },\n\n reduce: function(callback) {\n var idx = 0,\n result,\n length = this.length;\n\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx < length) {\n result = this[idx++];\n }\n\n for (; idx < length; idx++) {\n result = callback(result, this[idx], idx, this);\n }\n\n return result;\n },\n\n reduceRight: function(callback) {\n var idx = this.length - 1,\n result;\n\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx > 0) {\n result = this[idx--];\n }\n\n for (; idx >= 0; idx--) {\n result = callback(result, this[idx], idx, this);\n }\n\n return result;\n },\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\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\n return result;\n },\n\n find: function(callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n return item;\n }\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\n for (; idx < length; idx++) {\n item = this[idx];\n if (!callback.call(context, item, idx, this)) {\n return false;\n }\n }\n\n return true;\n },\n\n some: function(callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n return true;\n }\n }\n\n return false;\n },\n\n // non-standard collection methods\n remove: function(item) {\n var idx = this.indexOf(item);\n\n if (idx !== -1) {\n this.splice(idx, 1);\n }\n },\n\n empty: function() {\n this.splice(0, this.length);\n }\n });\n\n // Polyfill for Symbol.iterator\n if (typeof Symbol !== \"undefined\" && Symbol.iterator && !ObservableArray.prototype[Symbol.iterator]) {\n ObservableArray.prototype[Symbol.iterator] = [][Symbol.iterator];\n }\n\n var LazyObservableArray = ObservableArray.extend({\n init: function(data, type, events) {\n var parentFn = function() { return this; };\n\n Observable.fn.init.call(this);\n\n this.type = type || ObservableObject;\n\n if (events) {\n this._events = events;\n }\n\n for (var idx = 0; idx < data.length; idx++) {\n this[idx] = data[idx];\n }\n\n this.length = idx;\n this._parent = parentFn.bind(this);\n },\n at: function(index) {\n var item = this[index];\n\n if (!(item instanceof this.type)) {\n item = this[index] = this.wrap(item, this._parent);\n } else {\n item.parent = this._parent;\n }\n\n return item;\n }\n });\n\n function eventHandler(context, type, field, prefix) {\n return function(e) {\n var event = {}, key;\n\n for (key in e) {\n event[key] = e[key];\n }\n\n if (prefix) {\n event.field = field + \".\" + e.field;\n } else {\n event.field = field;\n }\n\n if (type == CHANGE && context._notifyChange) {\n context._notifyChange(event);\n }\n\n context.trigger(type, event);\n };\n }\n\n function isPrimitiveType(value) {\n return (typeof value === \"object\" && Object.getPrototypeOf(value) === Object.getPrototypeOf({}))\n || Object.getPrototypeOf(value) === Object.getPrototypeOf(new Date())\n || typeof value !== \"object\";\n }\n\n function ownKeys(value, ignoreObjectKeys) {\n var props = [];\n var protoKeys = [];\n var keys, filteredObjectKeys;\n\n value = value || {};\n\n if (!isPrimitiveType(value)) {\n protoKeys = Object.getOwnPropertyNames(Object.getPrototypeOf(value));\n }\n\n keys = Object.getOwnPropertyNames(value).concat(protoKeys);\n\n filteredObjectKeys = objectKeys.filter(function(key) {\n return keys.indexOf(key) < 0;\n });\n\n while (value) {\n Object.getOwnPropertyNames(value).forEach(function(prop) {\n if (props.indexOf(prop) === -1 && (!ignoreObjectKeys || filteredObjectKeys.indexOf(prop) < 0)) {\n props.push(prop);\n }\n });\n value = Object.getPrototypeOf(value);\n }\n\n return props;\n }\n\n objectKeys = ownKeys({}, false);\n\n var ObservableObject = Observable.extend({\n init: function(value) {\n var that = this,\n member,\n keys = ownKeys(value, true),\n parent = function() {\n return that;\n };\n\n Observable.fn.init.call(this);\n\n this._handlers = {};\n\n keys.forEach(function(field) {\n member = value[field];\n\n if (typeof member === \"object\" && member && !member.getTime && field.charAt(0) != \"_\") {\n member = that.wrap(member, field, parent);\n }\n\n that[field] = member;\n });\n\n that.uid = kendo.guid();\n },\n\n shouldSerialize: function(field, serializeFunctions) {\n return this.hasOwnProperty(field) && field !== \"_handlers\" && field !== \"_events\" && ((serializeFunctions && serializeFunctions[field]) || typeof this[field] !== FUNCTION) && field !== \"uid\";\n },\n\n forEach: function(f) {\n for (var i in this) {\n if (this.shouldSerialize(i)) {\n f(this[i], i);\n }\n }\n },\n\n toJSON: function(serializeFunctions) {\n var result = {}, value, field;\n\n for (field in this) {\n if (this.shouldSerialize(field, serializeFunctions)) {\n value = this[field];\n\n if (value instanceof ObservableObject || value instanceof ObservableArray) {\n value = value.toJSON(serializeFunctions);\n }\n\n result[field] = value;\n }\n }\n\n return result;\n },\n\n get: function(field) {\n var that = this, result;\n\n that.trigger(GET, { field: field });\n\n if (field === \"this\") {\n result = that;\n } else {\n result = kendo.getter(field, true)(that);\n }\n\n return result;\n },\n\n _set: function(field, value) {\n var that = this;\n var composite = field.indexOf(\".\") >= 0;\n\n if (composite) {\n var paths = field.split(\".\"),\n path = \"\";\n\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\n kendo.setter(field)(that, value);\n\n return composite;\n },\n\n set: function(field, value) {\n var that = this,\n isSetPrevented = false,\n composite = field.indexOf(\".\") >= 0,\n current = kendo.getter(field, true)(that);\n\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\n isSetPrevented = that.trigger(\"set\", { field: field, value: value });\n\n if (!isSetPrevented) {\n if (!composite) {\n value = that.wrap(value, field, function() { return that; });\n }\n if (!that._set(field, value) || field.indexOf(\"(\") >= 0 || field.indexOf(\"[\") >= 0) {\n that.trigger(CHANGE, { field: field });\n }\n }\n }\n\n return isSetPrevented;\n },\n\n parent: noop,\n\n wrap: function(object, field, parent) {\n var that = this;\n var get;\n var change;\n var type = toString.call(object);\n\n if (object != null && (type === \"[object Object]\" || type === \"[object Array]\")) {\n var isObservableArray = object instanceof ObservableArray;\n var isDataSource = object instanceof DataSource;\n\n if (type === \"[object Object]\" && !isDataSource && !isObservableArray) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\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\n that._handlers[field] = { get: get, change: change };\n } else if (type === \"[object Array]\" || isObservableArray || isDataSource) {\n if (!isObservableArray && !isDataSource) {\n object = new ObservableArray(object);\n }\n\n change = eventHandler(that, CHANGE, field, false);\n\n object.bind(CHANGE, change);\n\n that._handlers[field] = { change: change };\n }\n\n object.parent = parent;\n }\n\n return object;\n }\n });\n\n function equal(x, y) {\n if (x === y) {\n return true;\n }\n\n var xtype = kendo.type(x), ytype = kendo.type(y), field;\n\n if (xtype !== ytype) {\n return false;\n }\n\n if (xtype === \"date\") {\n return x.getTime() === y.getTime();\n }\n\n if (xtype !== \"object\" && xtype !== \"array\") {\n return false;\n }\n\n for (field in x) {\n if (!equal(x[field], y[field])) {\n return false;\n }\n }\n\n return true;\n }\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\n \"date\": function(value) {\n if (typeof value === STRING && value.toLowerCase() === \"null\") {\n return null;\n }\n return kendo.parseDate(value);\n },\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\n \"string\": function(value) {\n if (typeof value === STRING && value.toLowerCase() === \"null\") {\n return null;\n }\n return value != null ? (value + \"\") : value;\n },\n\n \"default\": function(value) {\n return value;\n }\n };\n\n var defaultValues = {\n \"string\": \"\",\n \"number\": 0,\n \"date\": new Date(),\n \"boolean\": false,\n \"default\": \"\"\n };\n\n function getFieldByName(obj, name) {\n var field,\n fieldName;\n\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\n var Model = ObservableObject.extend({\n init: function(data) {\n var that = this;\n\n if (!data || $.isEmptyObject(data)) {\n data = $.extend({}, that.defaults, data);\n\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\n ObservableObject.fn.init.call(that, data);\n\n that.dirty = false;\n that.dirtyFields = {};\n\n if (that.idField) {\n that.id = that.get(that.idField);\n\n if (that.id === undefined$1) {\n that.id = that._defaultId;\n }\n }\n },\n\n shouldSerialize: function(field) {\n return ObservableObject.fn.shouldSerialize.call(this, field) &&\n field !== \"uid\" && !(this.idField !== \"id\" && field === \"id\") &&\n field !== \"dirty\" && field !== \"dirtyFields\" && field !== \"_accessors\";\n },\n\n _parse: function(field, value) {\n var that = this,\n fieldName = field,\n fields = (that.fields || {}),\n parse;\n\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\n return parse ? parse(value) : value;\n },\n\n _notifyChange: function(e) {\n var action = e.action;\n\n if (action == \"add\" || action == \"remove\") {\n this.dirty = true;\n this.dirtyFields[e.field] = true;\n }\n },\n\n editable: function(field) {\n field = (this.fields || {})[field];\n return field ? field.editable !== false : true;\n },\n\n set: function(field, value) {\n var that = this;\n var dirty = that.dirty;\n\n if (that.editable(field)) {\n value = that._parse(field, value);\n\n if (!equal(value, that.get(field))) {\n that.dirty = true;\n that.dirtyFields[field] = true;\n\n if (ObservableObject.fn.set.call(that, field, value) && !dirty) {\n that.dirty = dirty;\n\n if (!that.dirty) {\n that.dirtyFields[field] = false;\n }\n }\n } else {\n that.trigger(\"equalSet\", { field: field, value: value });\n }\n }\n },\n\n accept: function(data) {\n var that = this,\n parent = function() { return that; },\n field;\n\n for (field in data) {\n var value = data[field];\n\n if (field.charAt(0) != \"_\") {\n value = that.wrap(data[field], field, parent);\n }\n\n that._set(field, value);\n }\n\n if (that.idField) {\n that.id = that.get(that.idField);\n }\n\n that.dirty = false;\n that.dirtyFields = {};\n },\n\n isNew: function() {\n return this.id === this._defaultId;\n }\n });\n\n Model.define = function(base, options) {\n if (options === undefined$1) {\n options = base;\n base = Model;\n }\n\n var model,\n proto = extend({ defaults: {} }, options),\n name,\n field,\n type,\n value,\n idx,\n length,\n fields = {},\n originalName,\n id = proto.id,\n functionFields = [];\n\n if (id) {\n proto.idField = id;\n }\n\n if (proto.id) {\n delete proto.id;\n }\n\n if (id) {\n proto.defaults[id] = proto._defaultId = \"\";\n }\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\n for (name in proto.fields) {\n field = proto.fields[name];\n type = field.type || \"default\";\n value = null;\n originalName = name;\n\n name = typeof (field.field) === STRING ? field.field : name;\n\n if (!field.nullable) {\n value = proto.defaults[originalName !== name ? originalName : name] = field.defaultValue !== undefined$1 ? field.defaultValue : defaultValues[type.toLowerCase()];\n\n if (typeof value === \"function\") {\n functionFields.push(name);\n }\n }\n\n if (options.id === name) {\n proto._defaultId = value;\n }\n\n proto.defaults[originalName !== name ? originalName : name] = value;\n\n if ($.isPlainObject(field)) {\n field.parse = field.parse || parsers[type];\n } else {\n field = {\n parse: parsers[type]\n };\n }\n }\n\n if (functionFields.length > 0) {\n proto._initializers = functionFields;\n }\n\n model = base.extend(proto);\n model.define = function(options) {\n return Model.define(model, options);\n };\n\n if (proto.fields) {\n model.fields = proto.fields;\n model.idField = proto.idField;\n }\n\n return model;\n };\n\n var Comparer = {\n selector: function(field) {\n return isFunction(field) ? field : getter(field);\n },\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\n if (a == null && b == null) {\n return 0;\n }\n\n if (a == null) {\n return -1;\n }\n\n if (b == null) {\n return 1;\n }\n\n if (a.localeCompare) {\n return a.localeCompare(b);\n }\n\n return a > b ? 1 : (a < b ? -1 : 0);\n };\n },\n\n create: function(sort) {\n var compare = sort.compare || this.compare(sort.field);\n\n if (sort.dir == \"desc\") {\n return function(a, b) {\n return compare(b, a, true);\n };\n }\n\n return compare;\n },\n\n combine: function(comparers) {\n return function(a, b) {\n var result = comparers[0](a, b),\n idx,\n length;\n\n for (idx = 1, length = comparers.length; idx < length; idx ++) {\n result = result || comparers[idx](a, b);\n }\n\n return result;\n };\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\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n\n if (valueA == null) {\n return -1;\n }\n\n if (valueB == null) {\n return 1;\n }\n\n if (valueA.localeCompare) {\n return valueA.localeCompare(valueB);\n }\n\n return valueA > valueB ? 1 : -1;\n };\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\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n\n if (valueA == null) {\n return 1;\n }\n\n if (valueB == null) {\n return -1;\n }\n\n if (valueB.localeCompare) {\n return valueB.localeCompare(valueA);\n }\n\n return valueA < valueB ? 1 : -1;\n };\n },\n create: function(sort) {\n return this[sort.dir](sort.field);\n }\n });\n\n map = function(array, callback) {\n var idx, length = array.length, result = new Array(length);\n\n for (idx = 0; idx < length; idx++) {\n result[idx] = callback(array[idx], idx, array);\n }\n\n return result;\n };\n\n var operators = (function() {\n\n function quote(str) {\n if (typeof str == \"string\") {\n str = str.replace(/[\\r\\n]+/g, \"\");\n }\n return JSON.stringify(str);\n }\n\n function textOp(impl) {\n return function(a, b, ignore, accentFoldingFiltering) {\n b += \"\";\n if (ignore) {\n a = \"(\" + a + \" + '').toString()\" + ((accentFoldingFiltering) ? \".toLocaleLowerCase('\" + accentFoldingFiltering + \"')\" : \".toLowerCase()\");\n b = ((accentFoldingFiltering) ? b.toLocaleLowerCase(accentFoldingFiltering) : b.toLowerCase());\n }\n return impl(a, quote(b), ignore);\n };\n }\n\n function operator(op, a, b, ignore, accentFoldingFiltering) {\n if (b != null) {\n if (typeof b === STRING) {\n var date = dateRegExp.exec(b);\n if (date) {\n b = new Date(+date[1]);\n } else if (ignore) {\n b = quote(((accentFoldingFiltering) ? b.toLocaleLowerCase(accentFoldingFiltering) : b.toLowerCase()));\n a = \"((\" + a + \" || '')+'')\" + ((accentFoldingFiltering) ? \".toLocaleLowerCase('\" + accentFoldingFiltering + \"')\" : \".toLowerCase()\");\n } else {\n b = quote(b);\n }\n }\n\n if (b.getTime) {\n //b looks like a Date\n a = \"(\" + a + \"&&\" + a + \".getTime?\" + a + \".getTime():\" + a + \")\";\n b = b.getTime();\n }\n }\n\n return a + \" \" + op + \" \" + b;\n }\n\n function getMatchRegexp(pattern) {\n // take a pattern, as supported by Excel match filter, and\n // convert it to the equivalent JS regular expression.\n // Excel patterns support:\n //\n // * - match any sequence of characters\n // ? - match a single character\n //\n // to match a literal * or ?, they must be prefixed by a tilde (~)\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\n return {\n quote: function(value) {\n if (value && value.getTime) {\n return \"new Date(\" + value.getTime() + \")\";\n }\n return quote(value);\n },\n eq: function(a, b, ignore, accentFoldingFiltering) {\n return operator(\"==\", a, b, ignore, accentFoldingFiltering);\n },\n neq: function(a, b, ignore, accentFoldingFiltering) {\n return operator(\"!=\", a, b, ignore, accentFoldingFiltering);\n },\n gt: function(a, b, ignore) {\n return operator(\">\", a, b, ignore);\n },\n gte: function(a, b, ignore) {\n return operator(\">=\", a, b, ignore);\n },\n lt: function(a, b, ignore) {\n return operator(\"<\", a, b, ignore);\n },\n lte: function(a, b, ignore) {\n return operator(\"<=\", a, b, ignore);\n },\n startswith: textOp(function(a, b) {\n return a + \".lastIndexOf(\" + b + \", 0) == 0\";\n }),\n doesnotstartwith: textOp(function(a, b) {\n return a + \".lastIndexOf(\" + b + \", 0) == -1\";\n }),\n endswith: textOp(function(a, b) {\n var n = b ? b.length - 2 : 0;\n return a + \".indexOf(\" + b + \", \" + a + \".length - \" + n + \") >= 0\";\n }),\n doesnotendwith: textOp(function(a, b) {\n var n = b ? b.length - 2 : 0;\n return a + \".indexOf(\" + b + \", \" + a + \".length - \" + n + \") < 0\";\n }),\n contains: textOp(function(a, b) {\n return a + \".indexOf(\" + b + \") >= 0\";\n }),\n doesnotcontain: textOp(function(a, b) {\n return a + \".indexOf(\" + b + \") == -1\";\n }),\n matches: textOp(function(a, b) {\n b = b.substring(1, b.length - 1);\n return getMatchRegexp(b) + \".test(\" + a + \")\";\n }),\n doesnotmatch: textOp(function(a, b) {\n b = b.substring(1, b.length - 1);\n return \"!\" + getMatchRegexp(b) + \".test(\" + a + \")\";\n }),\n isempty: function(a) {\n return a + \" === ''\";\n },\n isnotempty: function(a) {\n return a + \" !== ''\";\n },\n isnull: function(a) {\n return \"(\" + a + \" == null)\";\n },\n isnotnull: function(a) {\n return \"(\" + a + \" != null)\";\n },\n isnullorempty: function(a) {\n return \"(\" + a + \" === null) || (\" + a + \" === '')\";\n },\n isnotnullorempty: function(a) {\n return \"(\" + a + \" !== null) && (\" + a + \" !== '')\";\n }\n };\n })();\n\n function Query(data) {\n this.data = data || [];\n }\n\n Query.filterExpr = function(expression) {\n var expressions = [],\n logic = { and: \" && \", or: \" || \" },\n idx,\n length,\n filter,\n expr,\n fieldFunctions = [],\n operatorFunctions = [],\n field,\n operator,\n filters = expression.filters;\n\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n operator = filter.operator;\n\n if (filter.filters) {\n expr = Query.filterExpr(filter);\n //Nested function fields or operators - update their index e.g. __o[0] -> __o[1]\n filter = expr.expression\n .replace(/__o\\[(\\d+)\\]/g, function(match, index) {\n index = +index;\n return \"__o[\" + (operatorFunctions.length + index) + \"]\";\n })\n .replace(/__f\\[(\\d+)\\]/g, function(match, index) {\n index = +index;\n return \"__f[\" + (fieldFunctions.length + index) + \"]\";\n });\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\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$1 ? filter.ignoreCase : true, expression.accentFoldingFiltering);\n }\n }\n\n expressions.push(filter);\n }\n\n return { expression: \"(\" + expressions.join(logic[expression.logic]) + \")\", fields: fieldFunctions, operators: operatorFunctions };\n };\n\n function normalizeSort(field, dir) {\n if (field) {\n var descriptor = typeof field === STRING ? { field: field, dir: dir } : field,\n descriptors = isArray(descriptor) ? descriptor : (descriptor !== undefined$1 ? [descriptor] : []);\n\n return grep(descriptors, function(d) { return !!d.dir; });\n }\n }\n\n function sortFields(sorts, dir) {\n var sortObject = {};\n\n if (sorts) {\n var descriptor = typeof sorts === STRING ? { field: sorts, dir: dir } : sorts,\n descriptors = isArray(descriptor) ? descriptor : (descriptor !== undefined$1 ? [descriptor] : []);\n\n for (var i = 0; i < descriptors.length; i++) {\n sortObject[descriptors[i].field] = { dir: descriptors[i].dir, index: i + 1 };\n }\n }\n\n return sortObject;\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\n function normalizeOperator(expression) {\n var idx,\n length,\n filter,\n operator,\n filters = expression.filters;\n\n if (filters) {\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n operator = filter.operator;\n\n if (operator && typeof operator === STRING) {\n filter.operator = operatorMap[operator.toLowerCase()] || operator;\n }\n\n normalizeOperator(filter);\n }\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\n normalizeOperator(expression);\n\n return expression;\n }\n }\n\n Query.normalizeFilter = normalizeFilter;\n\n function compareDescriptor(f1, f2) {\n if (f1.logic || f2.logic) {\n return false;\n }\n\n return f1.field === f2.field && f1.value === f2.value && f1.operator === f2.operator;\n }\n\n function normalizeDescriptor(filter) {\n filter = filter || {};\n\n if (isEmptyObject(filter)) {\n return { logic: \"and\", filters: [] };\n }\n\n return normalizeFilter(filter);\n }\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\n function compareFilters(expr1, expr2) {\n expr1 = normalizeDescriptor(expr1);\n expr2 = normalizeDescriptor(expr2);\n\n if (expr1.logic !== expr2.logic) {\n return false;\n }\n\n var f1, f2;\n var filters1 = (expr1.filters || []).slice();\n var filters2 = (expr2.filters || []).slice();\n\n if (filters1.length !== filters2.length) {\n return false;\n }\n\n filters1 = filters1.sort(fieldComparer);\n filters2 = filters2.sort(fieldComparer);\n\n for (var idx = 0; idx < filters1.length; idx++) {\n f1 = filters1[idx];\n f2 = filters2[idx];\n\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\n return true;\n }\n\n Query.compareFilters = compareFilters;\n\n function normalizeAggregate(expressions) {\n return isArray(expressions) ? expressions : [expressions];\n }\n\n function normalizeGroup(field, dir, compare, skipItemSorting) {\n var descriptor = typeof field === STRING ? { field: field, dir: dir, compare: compare, skipItemSorting: skipItemSorting } : field,\n descriptors = isArray(descriptor) ? descriptor : (descriptor !== undefined$1 ? [descriptor] : []);\n\n return map(descriptors, function(d) {\n return {\n field: d.field,\n dir: d.dir || \"asc\",\n aggregates: d.aggregates,\n compare: d.compare,\n skipItemSorting: d.skipItemSorting\n };\n });\n }\n\n function normalizeGroupWithoutCompare(field, dir, compare) {\n var descriptors = normalizeGroup(field, dir, compare);\n\n for (var i = 0; i < descriptors.length; i++) {\n delete descriptors[i].compare;\n }\n\n return descriptors;\n }\n\n function anyGroupDescriptorHasCompare(groupDescriptors) {\n var descriptors = isArray(groupDescriptors) ? groupDescriptors : [groupDescriptors];\n\n for (var i = 0; i < descriptors.length; i++) {\n if (descriptors[i] && isFunction(descriptors[i].compare)) {\n return true;\n }\n }\n\n return false;\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\n if (selector) {\n if (selector.compare) {\n sort.compare = selector.compare;\n } else {\n sort.field = selector;\n }\n }\n\n if (inPlace) {\n return new Query(this.data.sort(Comparer.create(sort)));\n }\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,\n length,\n descriptors = normalizeSort(field, dir),\n comparers = [];\n\n comparer = comparer || Comparer;\n\n if (descriptors.length) {\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\n comparers.push(comparer.create(descriptors[idx]));\n }\n\n return this.orderBy({ compare: comparer.combine(comparers) }, inPlace);\n }\n\n return this;\n },\n\n filter: function(expressions) {\n var idx,\n current,\n length,\n compiled,\n predicate,\n data = this.data,\n fields,\n operators,\n result = [],\n filter;\n\n expressions = normalizeFilter(expressions);\n\n if (!expressions || expressions.filters.length === 0) {\n return this;\n }\n\n compiled = Query.filterExpr(expressions);\n fields = compiled.fields;\n operators = compiled.operators;\n\n predicate = filter = new Function(\"d, __f, __o\", \"return \" + compiled.expression);\n\n if (fields.length || operators.length) {\n filter = function(d) {\n return predicate(d, fields, operators);\n };\n }\n\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n current = data[idx];\n\n if (filter(current)) {\n result.push(current);\n }\n }\n\n return new Query(result);\n },\n\n group: function(descriptors, allData, options) {\n descriptors = normalizeGroup(descriptors || []);\n allData = allData || this.data;\n\n var that = this,\n result = new Query(that.data),\n descriptor;\n\n if (descriptors.length > 0) {\n descriptor = descriptors[0];\n\n if (options && options.groupPaging) {\n result = new Query(allData).groupAllData(descriptor, allData).select(function(group) {\n var data = new Query(allData).filter([{\n field: group.field,\n operator: \"eq\",\n value: group.value,\n ignoreCase: false\n }]);\n var items = descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), data.toArray(), options).toArray() : group.items;\n return {\n field: group.field,\n value: group.value,\n hasSubgroups: descriptors.length > 1,\n items: items,\n aggregates: data.aggregate(descriptor.aggregates),\n uid: kendo.guid(),\n itemCount: items.length,\n subgroupCount: items.length\n };\n });\n\n } else {\n result = result.groupBy(descriptor).select(function(group) {\n var data = new Query(allData).filter([ { field: group.field, operator: \"eq\", value: group.value, ignoreCase: false } ]);\n return {\n field: group.field,\n value: group.value,\n items: descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), data.toArray()).toArray() : group.items,\n hasSubgroups: descriptors.length > 1,\n aggregates: data.aggregate(descriptor.aggregates)\n };\n });\n }\n }\n return result;\n },\n\n groupBy: function(descriptor) {\n var that = this;\n\n if (isEmptyObject(descriptor) || !this.data.length) {\n return new Query([]);\n }\n\n var field = descriptor.field,\n sorted = descriptor.skipItemSorting ? this.data : this._sortForGrouping(field, descriptor.dir || \"asc\"),\n accessor = kendo.accessor(field),\n item,\n groupValue = accessor.get(sorted[0], field),\n group = {\n field: field,\n value: groupValue,\n items: []\n },\n currentValue,\n idx,\n len,\n result = [group];\n\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\n result = that._sortGroups(result, descriptor);\n\n return new Query(result);\n },\n\n groupAllData: function(descriptor, allData) {\n if (isEmptyObject(descriptor) || this.data && !this.data.length) {\n return new Query([]);\n }\n\n var field = descriptor.field,\n sorted = descriptor.skipItemSorting ? allData : new Query(allData).sort(field, descriptor.dir || \"asc\", StableComparer).toArray(),\n accessor = kendo.accessor(field),\n item,\n groupValue = accessor.get(sorted[0], field),\n group = {\n field: field,\n value: groupValue,\n items: []\n },\n currentValue,\n idx,\n len,\n result = [group];\n\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\n result = this._sortGroups(result, descriptor);\n\n return new Query(result);\n },\n\n _sortForGrouping: function(field, dir) {\n var idx, length,\n data = this.data;\n\n if (!stableSort) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n data[idx].__position = idx;\n }\n\n data = new Query(data).sort(field, dir, StableComparer).toArray();\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n delete data[idx].__position;\n }\n return data;\n }\n\n return this.sort(field, dir).toArray();\n },\n\n _sortGroups: function(groups, descriptor) {\n var result = groups;\n\n if (descriptor && isFunction(descriptor.compare)) {\n result = new Query(result).order({ compare: descriptor.compare }, descriptor.dir || ASCENDING).toArray();\n }\n\n return result;\n },\n\n aggregate: function(aggregates) {\n var idx,\n len,\n result = {},\n state = {};\n\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\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\n function calculateAggregate(accumulator, aggregates, item, index, length, state) {\n aggregates = aggregates || [];\n var idx,\n aggr,\n functionName,\n len = aggregates.length;\n\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\n var functions = {\n sum: function(accumulator, item, accessor) {\n var value = accessor.get(item);\n\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\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\n if (state.count === undefined$1) {\n state.count = 0;\n }\n\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n\n if (isNumber(value)) {\n state.count++;\n }\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\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\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\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n\n if (accumulator > value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n }\n };\n\n function isNumber(val) {\n return typeof val === \"number\" && !isNaN(val);\n }\n\n function isDate(val) {\n return val && val.getTime;\n }\n\n function toJSON(array) {\n var idx, length = array.length, result = new Array(length);\n\n for (idx = 0; idx < length; idx++) {\n result[idx] = array[idx].toJSON();\n }\n\n return result;\n }\n\n Query.normalizeGroup = normalizeGroup;\n Query.normalizeSort = normalizeSort;\n\n Query.process = function(data, options, inPlace) {\n options = options || {};\n\n var group = options.group;\n var customGroupSort = anyGroupDescriptorHasCompare(normalizeGroup(group || []));\n var query = new Query(data),\n groupDescriptorsWithoutCompare = normalizeGroupWithoutCompare(group || []),\n normalizedSort = normalizeSort(options.sort || []),\n sort = customGroupSort ? normalizedSort : groupDescriptorsWithoutCompare.concat(normalizedSort),\n groupDescriptorsWithoutSort,\n total,\n filterCallback = options.filterCallback,\n filter = options.filter,\n skip = options.skip,\n take = options.take;\n\n if (sort && inPlace) {\n query = query.sort(sort, undefined$1, undefined$1, inPlace);\n }\n\n if (filter) {\n query = query.filter(filter);\n\n if (filterCallback) {\n query = filterCallback(query);\n }\n\n total = query.toArray().length;\n }\n\n if (sort) {\n if (!inPlace) {\n query = query.sort(sort);\n }\n\n if (group) {\n data = query.toArray();\n }\n }\n\n if (customGroupSort) {\n query = query.group(group, data, options);\n\n if (skip !== undefined$1 && take !== undefined$1 && !options.groupPaging) {\n query = new Query(flatGroups(query.toArray())).range(skip, take);\n\n groupDescriptorsWithoutSort = map(groupDescriptorsWithoutCompare, function(groupDescriptor) {\n return extend({}, groupDescriptor, {\n skipItemSorting: true\n });\n });\n\n query = query.group(groupDescriptorsWithoutSort, data, options);\n }\n } else {\n if (skip !== undefined$1 && take !== undefined$1) {\n total = query.data.length;\n\n if (skip + take > total && options.virtual) {\n skip -= skip + take - total;\n skip = skip < 0 ? 0 : skip;\n }\n query = query.range(skip, take);\n }\n\n if (group && (!isEmptyObject(group) || group.length !== 0)) {\n query = query.group(group, data, options);\n }\n }\n\n return {\n total: total,\n data: query.toArray()\n };\n };\n\n var LocalTransport = Class.extend({\n init: function(options) {\n this.data = options.data;\n },\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\n var RemoteTransport = Class.extend( {\n init: function(options) {\n var that = this, parameterMap;\n\n options = that.options = extend({}, that.options, options);\n\n each(crud, function(index, type) {\n if (typeof options[type] === STRING) {\n options[type] = {\n url: options[type]\n };\n }\n });\n\n that.cache = options.cache ? Cache.create(options.cache) : {\n find: noop,\n add: noop\n };\n\n parameterMap = options.parameterMap;\n\n if (options.submit) {\n that.submit = options.submit;\n }\n\n if (isFunction(options.push)) {\n that.push = options.push;\n }\n\n if (!that.push) {\n that.push = identity;\n }\n\n that.parameterMap = isFunction(parameterMap) ? parameterMap : function(options) {\n var result = {};\n\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\n result[option] = value;\n });\n\n return result;\n };\n },\n\n options: {\n parameterMap: identity\n },\n\n create: function(options) {\n return ajax(this.setup(options, CREATE));\n },\n\n read: function(options) {\n var that = this,\n success,\n error,\n result,\n cache = that.cache;\n\n options = that.setup(options, READ);\n\n success = options.success || noop;\n error = options.error || noop;\n\n result = cache.find(options.data);\n\n if (result !== undefined$1) {\n success(result);\n } else {\n options.success = function(result) {\n cache.add(options.data, result);\n\n success(result);\n };\n\n $.ajax(options);\n }\n },\n\n update: function(options) {\n return ajax(this.setup(options, UPDATE));\n },\n\n destroy: function(options) {\n return ajax(this.setup(options, DESTROY));\n },\n\n setup: function(options, type) {\n options = options || {};\n\n var that = this,\n parameters,\n operation = that.options[type],\n data = isFunction(operation.data) ? operation.data(options.data) : operation.data;\n\n options = extend(true, {}, operation, options);\n parameters = extend(true, {}, data, options.data);\n\n options.data = that.parameterMap(parameters, type);\n\n if (isFunction(options.url)) {\n options.url = options.url(parameters);\n }\n\n return options;\n }\n });\n\n var Cache = Class.extend({\n init: function() {\n this._store = {};\n },\n add: function(key, data) {\n if (key !== undefined$1) {\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\n Cache.create = function(options) {\n var store = {\n \"inmemory\": function() { return new Cache(); }\n };\n\n if (isPlainObject(options) && isFunction(options.find)) {\n return options;\n }\n\n if (options === true) {\n return new Cache();\n }\n\n return store[options]();\n };\n\n function serializeRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record,\n getter,\n originalName,\n idx,\n setters = {},\n length;\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n for (getter in getters) {\n originalName = fieldNames[getter];\n\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\n function convertRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record,\n getter,\n originalName,\n idx,\n length;\n\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\n originalName = fieldNames[getter];\n if (originalName && originalName !== getter) {\n delete record[originalName];\n }\n }\n }\n }\n\n function convertGroup(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record,\n idx,\n fieldName,\n length;\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n\n fieldName = originalFieldNames[record.field];\n if (fieldName && fieldName != record.field) {\n record.field = fieldName;\n }\n\n record.value = modelInstance._parse(record.field, record.value);\n\n if (record.items) {\n if (record.hasSubgroups) {\n convertGroup(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n } else {\n convertRecords(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n }\n }\n }\n }\n\n function wrapDataAccess(originalFunction, model, converter, getters, originalFieldNames, fieldNames) {\n return function(data) {\n data = originalFunction(data);\n\n return wrapDataAccessBase(model, converter, getters, originalFieldNames, fieldNames)(data);\n };\n }\n\n function wrapDataAccessBase(model, converter, getters, originalFieldNames, fieldNames) {\n return function(data) {\n\n if (data && !isEmptyObject(getters)) {\n if (toString.call(data) !== \"[object Array]\" && !(data instanceof ObservableArray)) {\n data = [data];\n }\n\n converter(data, getters, new model(), originalFieldNames, fieldNames);\n }\n\n return data || [];\n };\n }\n\n var DataReader = Class.extend({\n init: function(schema) {\n var that = this, member, get, model, base;\n\n schema = schema || {};\n\n for (member in schema) {\n get = schema[member];\n\n that[member] = typeof get === STRING ? getter(get) : get;\n }\n\n base = schema.modelBase || Model;\n\n if (isPlainObject(that.model)) {\n that.model = model = base.define(that.model);\n }\n\n var dataFunction = that.data.bind(that);\n\n that._dataAccessFunction = dataFunction;\n\n if (that.model) {\n var groupsFunction = that.groups.bind(that),\n serializeFunction = that.serialize.bind(that),\n originalFieldNames = {},\n getters = {},\n serializeGetters = {},\n fieldNames = {},\n shouldSerialize = false,\n fieldName,\n name;\n\n model = that.model;\n\n if (model.fields) {\n each(model.fields, function(field, value) {\n var fromName;\n\n fieldName = field;\n\n if (isPlainObject(value) && value.field) {\n fieldName = value.field;\n } else if (typeof value === STRING) {\n fieldName = value;\n }\n\n if (isPlainObject(value) && value.from) {\n fromName = value.from;\n }\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\n if (!schema.serialize && shouldSerialize) {\n that.serialize = wrapDataAccess(serializeFunction, model, serializeRecords, serializeGetters, originalFieldNames, fieldNames);\n }\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\n function fillLastGroup(originalGroup, newGroup) {\n var currOriginal;\n var currentNew;\n\n if (newGroup.items && newGroup.items.length) {\n for (var i = 0; i < newGroup.items.length; i++) {\n currOriginal = originalGroup.items[originalGroup.items.length - 1];\n currentNew = newGroup.items[i];\n if (currOriginal && currentNew) {\n if (currOriginal.hasSubgroups && currOriginal.value == currentNew.value) {\n fillLastGroup(currOriginal, currentNew);\n } else if (currOriginal.field && currOriginal.value == currentNew.value) {\n currOriginal.items.omitChangeEvent = true;\n currOriginal.items.push.apply(currOriginal.items, currentNew.items);\n currOriginal.items.omitChangeEvent = false;\n } else {\n originalGroup.items.omitChangeEvent = true;\n originalGroup.items.push.apply(originalGroup.items, [currentNew]);\n originalGroup.items.omitChangeEvent = false;\n }\n } else if (currentNew) {\n originalGroup.items.omitChangeEvent = true;\n originalGroup.items.push.apply(originalGroup.items, [currentNew]);\n originalGroup.items.omitChangeEvent = false;\n }\n }\n }\n }\n function mergeGroups(target, dest, skip, take) {\n var group,\n idx = 0,\n items;\n\n while (dest.length && take) {\n group = dest[idx];\n items = group.items;\n\n var length = items.length;\n\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\n if (!group.items.length) {\n dest.splice(idx--, 1);\n }\n }\n\n if (items.length === 0) {\n skip -= length;\n } else {\n skip = 0;\n take -= items.length;\n }\n\n if (++idx >= dest.length) {\n break;\n }\n }\n\n if (idx < dest.length) {\n dest.splice(idx, dest.length - idx);\n }\n }\n\n function flatGroups(groups, indexFunction) {\n var result = [];\n var groupsLength = (groups || []).length;\n var group;\n var items;\n var indexFn = isFunction(indexFunction) ? indexFunction : function(array, index) {\n return array[index];\n };\n\n for (var groupIndex = 0; groupIndex < groupsLength; groupIndex++) {\n group = indexFn(groups, groupIndex);\n\n if (group.hasSubgroups) {\n result = result.concat(flatGroups(group.items));\n } else {\n items = group.items;\n\n for (var itemIndex = 0; itemIndex < items.length; itemIndex++) {\n result.push(indexFn(items, itemIndex));\n }\n }\n }\n return result;\n }\n\n function flattenGroups(data) {\n var idx,\n result = [],\n length,\n items,\n itemIndex;\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n var group = data.at(idx);\n if (group.items) {\n if (group.hasSubgroups) {\n result = result.concat(flattenGroups(group.items));\n } else {\n items = group.items;\n for (itemIndex = 0; itemIndex < items.length; itemIndex++) {\n result.push(items.at(itemIndex));\n }\n }\n }\n }\n return result;\n }\n\n function wrapGroupItems(data, model) {\n var idx, length, group;\n if (model) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n group = data.at(idx);\n if (group.items) {\n if (group.hasSubgroups) {\n wrapGroupItems(group.items, model);\n } else {\n group.items = new LazyObservableArray(group.items, model, group.items._events);\n }\n }\n }\n }\n }\n\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\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\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\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\n if (!item || item instanceof type) {\n continue;\n }\n\n if (item.hasSubgroups !== undefined$1 && !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\n function removeModel(data, model) {\n if (!data) {\n return;\n }\n var length = data.length;\n var dataItem;\n var idx;\n\n for (idx = 0; idx < length; idx++) {\n dataItem = data[idx];\n\n if (dataItem.uid && dataItem.uid == model.uid) {\n data.splice(idx, 1);\n return dataItem;\n }\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\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\n function indexOf(data, comparer) {\n var idx, length;\n if (!data) {\n return;\n }\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (comparer(data[idx])) {\n return idx;\n }\n }\n\n return -1;\n }\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\n if (isFunction(fieldName)) {\n return name;\n }\n\n return fieldName;\n }\n return name;\n }\n\n function convertFilterDescriptorsField(descriptor, model) {\n var idx,\n length,\n target = {};\n\n for (var field in descriptor) {\n if (field !== \"filters\") {\n target[field] = descriptor[field];\n }\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\n function convertDescriptorsField(descriptors, model) {\n var idx,\n length,\n result = [],\n target,\n descriptor;\n\n for (idx = 0, length = descriptors.length; idx < length; idx ++) {\n target = {};\n\n descriptor = descriptors[idx];\n\n for (var field in descriptor) {\n target[field] = descriptor[field];\n }\n\n target.field = fieldNameFromModel(model.fields, target.field);\n\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\n var DataSource = Observable.extend({\n init: function(options) {\n var that = this, model, data;\n\n if (options) {\n data = options.data;\n }\n\n options = that.options = extend({}, that.options, options);\n\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$1);\n that._sort = normalizeSort(options.sort);\n that._sortFields = sortFields(options.sort);\n that._filter = normalizeFilter(options.filter);\n that._group = normalizeGroup(options.group);\n that._aggregate = options.aggregate;\n that._total = options.total;\n that._groupPaging = options.groupPaging;\n\n if (that._groupPaging) {\n that._groupsState = {};\n }\n that._shouldDetachObservableParents = true;\n\n Observable.fn.init.call(that);\n\n that.transport = Transport.create(options, data, that);\n\n if (isFunction(that.transport.push)) {\n that.transport.push({\n pushCreate: that._pushCreate.bind(that),\n pushUpdate: that._pushUpdate.bind(that),\n pushDestroy: that._pushDestroy.bind(that)\n });\n }\n\n if (options.offlineStorage != null) {\n if (typeof options.offlineStorage == \"string\") {\n var key = options.offlineStorage;\n\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\n that.reader = new kendo.data.readers[options.schema.type || \"json\" ](options.schema);\n\n model = that.reader.model || {};\n\n that._detachObservableParents();\n\n that._data = that._observe(that._data);\n that._online = true;\n\n that.bind([\"push\", ERROR, CHANGE, REQUESTSTART, SYNC, REQUESTEND, PROGRESS], options);\n },\n\n options: {\n data: null,\n schema: {\n modelBase: Model\n },\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\n clone: function() {\n return this;\n },\n\n online: function(value) {\n if (value !== undefined$1) {\n if (this._online != value) {\n this._online = value;\n\n if (value) {\n return this.sync();\n }\n }\n\n return $.Deferred().resolve().promise();\n } else {\n return this._online;\n }\n },\n\n offlineData: function(state) {\n if (this.options.offlineStorage == null) {\n return null;\n }\n\n if (state !== undefined$1) {\n return this._storage.setItem(state);\n }\n\n return this._storage.getItem() || [];\n },\n\n _isGrouped: function() {\n var group = this.group() || [];\n\n return group.length;\n },\n\n _isServerGrouped: function() {\n var group = this.group() || [];\n\n return this.options.serverGrouping && group.length;\n },\n\n _isServerGroupPaged: function() {\n return this._isServerGrouped() && this._groupPaging;\n },\n\n _isGroupPaged: function() {\n var group = this._group || [];\n\n return this._groupPaging && group.length;\n },\n\n _pushCreate: function(result) {\n this._push(result, \"pushCreate\");\n },\n\n _pushUpdate: function(result) {\n this._push(result, \"pushUpdate\");\n },\n\n _pushDestroy: function(result) {\n this._push(result, \"pushDestroy\");\n },\n\n _push: function(result, operation) {\n var data = this._readData(result);\n\n if (!data) {\n data = result;\n }\n\n this[operation](data);\n },\n\n _flatData: function(data, skip) {\n if (data) {\n if (this._isServerGrouped()) {\n return flattenGroups(data);\n }\n\n if (!skip) {\n for (var idx = 0; idx < data.length; idx++) {\n data.at(idx);\n }\n }\n }\n\n return data;\n },\n\n parent: noop,\n\n get: function(id) {\n var idx, length, data = this._flatData(this._data, this.options.useRanges);\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].id == id) {\n return data[idx];\n }\n }\n },\n\n getByUid: function(id) {\n return this._getByUid(id, this._data);\n },\n\n _getByUid: function(id, dataItems) {\n var idx, length, data = this._flatData(dataItems, this.options.useRanges);\n\n if (!data) {\n return;\n }\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\n indexOf: function(model) {\n return indexOfModel(this._data, model);\n },\n\n at: function(index) {\n return this._data.at(index);\n },\n\n data: function(value) {\n var that = this;\n if (value !== undefined$1) {\n that._detachObservableParents();\n that._data = this._observe(value);\n\n that._pristineData = value.slice(0);\n\n that._storeData();\n\n that._ranges = [];\n that.trigger(\"reset\");\n that._addRange(that._data);\n\n that._total = that._data.length;\n that._pristineTotal = that._total;\n\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\n return that._data;\n }\n },\n\n view: function(value) {\n if (value === undefined$1) {\n return this._view;\n } else {\n this._view = this._observeView(value);\n }\n },\n\n _observeView: function(data) {\n var that = this;\n replaceWithObservable(data, that._data, that._ranges, that.reader.model || ObservableObject, that._isServerGrouped());\n\n var view = new LazyObservableArray(data, that.reader.model);\n view.parent = function() { return that.parent(); };\n return view;\n },\n\n flatView: function() {\n var groups = this.group() || [];\n\n if (groups.length) {\n return flattenGroups(this._view);\n } else {\n return this._view;\n }\n },\n\n add: function(model) {\n return this.insert(this._data.length, model);\n },\n\n _createNewModel: function(model) {\n if (this.reader.model) {\n return new this.reader.model(model);\n }\n\n if (model instanceof ObservableObject) {\n return model;\n }\n\n return new ObservableObject(model);\n },\n\n insert: function(index, model) {\n if (!model) {\n model = index;\n index = 0;\n }\n\n if (!(model instanceof Model)) {\n model = this._createNewModel(model);\n }\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\n this._insertModelInRange(index, model);\n\n return model;\n },\n\n pushInsert: function(index, items) {\n var that = this;\n var rangeSpan = that._getCurrentRangeSpan();\n\n if (!items) {\n items = index;\n index = 0;\n }\n\n if (!isArray(items)) {\n items = [items];\n }\n\n var pushed = [];\n var autoSync = this.options.autoSync;\n this.options.autoSync = false;\n\n try {\n for (var idx = 0; idx < items.length; idx ++) {\n var item = items[idx];\n\n var result = this.insert(index, item);\n\n pushed.push(result);\n\n var pristine = result.toJSON();\n\n if (this._isServerGrouped()) {\n pristine = this._wrapInEmptyGroup(pristine);\n }\n\n this._pristineData.push(pristine);\n\n if (rangeSpan && rangeSpan.length) {\n $(rangeSpan).last()[0].pristineData.push(pristine);\n }\n\n index++;\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n\n if (pushed.length) {\n this.trigger(\"push\", {\n type: \"create\",\n items: pushed\n });\n }\n },\n\n pushCreate: function(items) {\n this.pushInsert(this._data.length, items);\n },\n\n pushUpdate: function(items) {\n if (!isArray(items)) {\n items = [items];\n }\n\n var pushed = [];\n\n for (var idx = 0; idx < items.length; idx ++) {\n var item = items[idx];\n var model = this._createNewModel(item);\n\n var target = this.get(model.id);\n\n if (target) {\n pushed.push(target);\n\n target.accept(item);\n\n target.trigger(CHANGE);\n\n this._updatePristineForModel(target, item);\n } else {\n this.pushCreate(item);\n }\n }\n\n if (pushed.length) {\n this.trigger(\"push\", {\n type: \"update\",\n items: pushed\n });\n }\n },\n\n pushDestroy: function(items) {\n var pushed = this._removeItems(items);\n\n if (pushed.length) {\n this.trigger(\"push\", {\n type: \"destroy\",\n items: pushed\n });\n }\n },\n\n _removeItems: function(items, removePristine) {\n if (!isArray(items)) {\n items = [items];\n }\n\n var shouldRemovePristine = typeof removePristine !== \"undefined\" ? removePristine : true;\n\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\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\n if (found && shouldRemovePristine) {\n this._removePristineForModel(model);\n this._destroyed.pop();\n }\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n\n return destroyed;\n },\n\n pushMove: function(index, items) {\n var pushed = this._moveItems(index, items);\n\n if (pushed.length) {\n this.trigger(\"push\", {\n type: \"update\",\n items: pushed\n });\n }\n },\n\n _moveItems: function(index, items) {\n if (!isArray(items)) {\n items = [items];\n }\n\n var moved = [];\n var autoSync = this.options.autoSync;\n this.options.autoSync = false;\n\n try {\n for (var i = 0; i < items.length; i ++) {\n var item = items[i];\n var model = this._createNewModel(item);\n\n this._eachItem(this._data, function(dataItems) {\n for (var idx = 0; idx < dataItems.length; idx++) {\n var dataItem = dataItems.at(idx);\n if (dataItem.id === model.id) {\n moved.push(dataItem);\n dataItems.splice(index >= idx ? --index : index, 0, dataItems.splice(idx, 1)[0]);\n index++;\n break;\n }\n }\n });\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n\n return moved;\n },\n\n remove: function(model) {\n var result,\n that = this,\n hasGroups = that._isServerGrouped();\n\n if (hasGroups && model.uid && (!model.isNew || !model.isNew())) {\n that._pushInDestroyed(model);\n }\n\n this._eachItem(that._data, function(items) {\n result = removeModel(items, model);\n\n if (result && hasGroups) {\n return true;\n }\n });\n\n this._removeModelFromRanges(model);\n\n return model;\n },\n\n destroyed: function() {\n return this._destroyed;\n },\n\n created: function() {\n var idx,\n length,\n result = [],\n data = this._flatData(this._data, this.options.useRanges);\n\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\n updated: function() {\n var idx,\n length,\n result = [],\n data = this._flatData(this._data, this.options.useRanges);\n\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\n sync: function() {\n var that = this,\n created = [],\n updated = [],\n destroyed = that._destroyed;\n\n var promise = $.Deferred().resolve().promise();\n\n if (that.online()) {\n\n if (!that.reader.model) {\n return promise;\n }\n\n created = that.created();\n updated = that.updated();\n\n var promises = [];\n\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\n promise = $.when\n .apply(null, promises)\n .then(function() {\n var arguments$1 = arguments;\n\n var idx, length;\n\n for (idx = 0, length = arguments.length; idx < length; idx++) {\n if (arguments$1[idx]) {\n that._accept(arguments$1[idx]);\n }\n }\n\n that._storeData(true);\n\n that._syncEnd();\n\n that._change({ action: \"sync\" });\n\n that.trigger(SYNC);\n\n if (that._isServerGroupPaged()) {\n that.read();\n }\n });\n } else {\n that._storeData(true);\n\n that._syncEnd();\n\n that._change({ action: \"sync\" });\n }\n\n return promise;\n },\n\n _syncEnd: noop,\n\n cancelChanges: function(model) {\n var that = this;\n\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\n that._ranges = [];\n that._addRange(that._data, 0);\n\n that._changesCanceled();\n\n that._change();\n\n that._markOfflineUpdatesAsDirty();\n\n if (that._isServerGrouped()) {\n that.read();\n }\n }\n },\n\n _changesCanceled: noop,\n\n _markOfflineUpdatesAsDirty: function() {\n var that = this;\n\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\n hasChanges: function() {\n var idx,\n length,\n data = this._flatData(this._data, this.options.useRanges);\n\n if (this._destroyed.length) {\n return true;\n }\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\n return false;\n },\n\n _accept: function(result) {\n var that = this,\n models = result.models,\n response = result.response,\n idx = 0,\n serverGroup = that._isServerGrouped(),\n pristine = that._pristineData,\n type = result.type,\n length;\n\n that.trigger(REQUESTEND, { response: response, type: type });\n\n if (response && !isEmptyObject(response)) {\n response = that.reader.parse(response);\n\n if (that._handleCustomErrors(response)) {\n return;\n }\n\n response = that.reader.data(response);\n\n if (!isArray(response)) {\n response = [response];\n }\n } else {\n response = $.map(models, function(model) { return model.toJSON(); } );\n }\n\n if (type === \"destroy\") {\n that._destroyed = [];\n }\n\n for (idx = 0, length = models.length; idx < length; idx++) {\n if (type !== \"destroy\") {\n models[idx].accept(response[idx]);\n\n if (type === \"create\") {\n pristine.push(serverGroup ? that._wrapInEmptyGroup(models[idx].toJSON()) : response[idx]);\n } else if (type === \"update\") {\n that._updatePristineForModel(models[idx], response[idx]);\n }\n } else {\n that._removePristineForModel(models[idx]);\n }\n }\n },\n\n _updatePristineForModel: function(model, values) {\n this._executeOnPristineForModel(model, function(index, items) {\n kendo.deepExtend(items[index], values);\n });\n },\n\n _executeOnPristineForModel: function(model, callback) {\n this._eachPristineItem(\n function(items) {\n var index = indexOfPristineModel(items, model);\n if (index > -1) {\n callback(index, items);\n return true;\n }\n });\n },\n\n _removePristineForModel: function(model) {\n this._executeOnPristineForModel(model, function(index, items) {\n items.splice(index, 1);\n });\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\n _eachPristineItem: function(callback) {\n var that = this;\n var options = that.options;\n var rangeSpan = that._getCurrentRangeSpan();\n\n that._eachItem(that._pristineData, callback);\n\n if (options.serverPaging && options.useRanges) {\n each(rangeSpan, function(i, range) {\n that._eachItem(range.pristineData, callback);\n });\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\n _pristineForModel: function(model) {\n var pristine,\n idx,\n callback = function(items) {\n idx = indexOfPristineModel(items, model);\n if (idx > -1) {\n pristine = items[idx];\n return true;\n }\n };\n\n this._eachPristineItem(callback);\n\n return pristine;\n },\n\n _cancelModel: function(model) {\n var that = this;\n var pristine = this._pristineForModel(model);\n\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\n if (pristine.__state__ == \"update\") {\n items[idx].dirty = true;\n }\n\n } else {\n that._modelCanceled(model);\n\n items.splice(idx, 1);\n\n that._removeModelFromRanges(model);\n }\n }\n });\n },\n\n _modelCanceled: noop,\n\n _submit: function(promises, data) {\n var that = this;\n\n that.trigger(REQUESTSTART, { type: \"submit\" });\n\n that.trigger(PROGRESS);\n\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\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\n that.error(response, status, error);\n }\n }, data));\n },\n\n _sendSubmit: function(created, updated, destroyed) {\n var that = this,\n promises = [];\n\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\n if (updated.length) {\n promises.push($.Deferred(function(deferred) {\n deferred.type = \"update\";\n deferred.models = updated;\n }));\n }\n\n if (destroyed.length) {\n promises.push($.Deferred(function(deferred) {\n deferred.type = \"destroy\";\n deferred.models = destroyed;\n }));\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\n return promises;\n },\n\n _promise: function(data, models, type) {\n var that = this;\n\n return $.Deferred(function(deferred) {\n that.trigger(REQUESTSTART, { type: type });\n\n that.trigger(PROGRESS);\n\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\n _send: function(method, data) {\n var that = this,\n idx,\n length,\n promises = [],\n converted = that.reader.serialize(toJSON(data));\n\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\n return promises;\n },\n\n read: function(data) {\n var that = this, params = that._params(data);\n var deferred = $.Deferred();\n\n that._queueRequest(params, function() {\n var isPrevented = that.trigger(REQUESTSTART, { type: \"read\" });\n if (!isPrevented) {\n that.trigger(PROGRESS);\n\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\n deferred.resolve();\n },\n error: function() {\n var args = slice.call(arguments);\n\n that.error.apply(that, args);\n\n deferred.reject.apply(deferred, args);\n }\n });\n } else if (that.options.offlineStorage != null) {\n that.success(that.offlineData(), params);\n\n deferred.resolve();\n }\n } else {\n that._dequeueRequest();\n\n deferred.resolve(isPrevented);\n }\n });\n\n return deferred.promise();\n },\n\n _readAggregates: function(data) {\n return this.reader.aggregates(data);\n },\n\n success: function(data) {\n var that = this,\n options = that.options,\n items,\n replaceSubset;\n\n that.trigger(REQUESTEND, { response: data, type: \"read\" });\n\n if (that.online()) {\n data = that.reader.parse(data);\n\n if (that._handleCustomErrors(data)) {\n that._dequeueRequest();\n return;\n }\n\n that._total = that.reader.total(data);\n\n if (that._isServerGroupPaged()) {\n that._serverGroupsTotal = that._total;\n }\n\n if (that._pageSize > that._total) {\n that._pageSize = that._total;\n if (that.options.pageSize && that.options.pageSize > that._pageSize) {\n that._pageSize = that.options.pageSize;\n }\n }\n\n if (that._aggregate && options.serverAggregates) {\n that._aggregateResult = that._readAggregates(data);\n }\n\n data = that._readData(data);\n\n that._destroyed = [];\n } else {\n data = that._readData(data);\n\n items = [];\n var itemIds = {};\n var model = that.reader.model;\n var idField = model ? model.idField : \"id\";\n var idx;\n\n for (idx = 0; idx < this._destroyed.length; idx++) {\n var id = this._destroyed[idx][idField];\n itemIds[id] = id;\n }\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._pushInDestroyed(this._createNewModel(item));\n }\n } else {\n items.push(item);\n }\n }\n\n data = items;\n\n that._total = data.length;\n }\n\n that._pristineTotal = that._total;\n replaceSubset = that._skip && that._data.length && that._skip < that._data.length;\n\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\n that._detachObservableParents();\n\n if (that.options.endless) {\n that._data.unbind(CHANGE, that._changeHandler);\n\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\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\n that._markOfflineUpdatesAsDirty();\n\n that._storeData();\n\n that._addRange(that._data);\n\n that._process(that._data);\n\n that._dequeueRequest();\n },\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\n _storeData: function(updatePristine) {\n var serverGrouping = this._isServerGrouped();\n var model = this.reader.model;\n\n function items(data) {\n var state = [];\n\n for (var idx = 0; idx < data.length; idx++) {\n var dataItem = data.at(idx);\n var item = dataItem.toJSON();\n\n if (serverGrouping && dataItem.items) {\n item.items = items(dataItem.items);\n } else {\n item.uid = dataItem.uid;\n\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\n return state;\n }\n\n if (this.options.offlineStorage != null) {\n var state = items(this._data);\n\n var destroyed = [];\n\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\n this.offlineData(state.concat(destroyed));\n\n if (updatePristine) {\n this._pristineData = this.reader.reader ? this.reader.reader._wrapDataAccessBase(state) : this.reader._wrapDataAccessBase(state);\n }\n }\n },\n\n _addRange: function(data, skip) {\n var that = this,\n start = typeof (skip) !== \"undefined\" ? skip : (that._skip || 0),\n end,\n range = {\n data: data,\n pristineData: data.toJSON(),\n timestamp: that._timeStamp()\n };\n\n if (this._isGroupPaged()) {\n end = start + data.length;\n range.outerStart = start;\n range.outerEnd = end;\n } else {\n end = start + that._flatData(data, true).length;\n }\n\n range.start = start;\n range.end = end;\n that._ranges.push(range);\n that._sortRanges();\n\n if (that._isGroupPaged()) {\n if (!that._groupsFlat) {\n that._groupsFlat = [];\n }\n that._appendToGroupsFlat(range.data);\n that._updateOuterRangesLength();\n }\n },\n\n _appendToGroupsFlat: function(data) {\n var length = data.length;\n\n for (var i = 0; i < length; i++) {\n this._groupsFlat.push(data[i]);\n }\n },\n\n _getGroupByUid: function(uid) {\n var length = this._groupsFlat.length;\n var group;\n\n for (var i = 0; i < length; i++) {\n group = this._groupsFlat[i];\n if (group.uid === uid) {\n return group;\n }\n }\n },\n\n _sortRanges: function() {\n this._ranges.sort(function(x, y) {\n return x.start - y.start;\n });\n },\n\n error: function(xhr, status, errorThrown) {\n this._dequeueRequest();\n this.trigger(REQUESTEND, { });\n this.trigger(ERROR, { xhr: xhr, status: status, errorThrown: errorThrown });\n },\n\n _params: function(data) {\n var that = this,\n options = extend({\n take: that.take(),\n skip: that.skip(),\n page: that.page(),\n pageSize: that.pageSize(),\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate,\n groupPaging: !!that._groupPaging\n }, data);\n\n if (!that.options.serverPaging) {\n delete options.take;\n delete options.skip;\n delete options.page;\n delete options.pageSize;\n }\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\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\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\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\n if (!that.options.groupPaging) {\n delete options.groupPaging;\n }\n\n return options;\n },\n\n _queueRequest: function(options, callback) {\n var that = this;\n if (!that._requestInProgress) {\n that._requestInProgress = true;\n that._pending = undefined$1;\n callback();\n } else {\n that._pending = { callback: callback.bind(that), 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\n _handleCustomErrors: function(response) {\n if (this.reader.errors) {\n var errors = this.reader.errors(response);\n if (errors) {\n this.trigger(ERROR, { xhr: null, status: \"customerror\", errorThrown: \"custom error\", errors: errors });\n return true;\n }\n }\n return false;\n },\n\n _shouldWrap: function(data) {\n var model = this.reader.model;\n\n if (model && data.length) {\n return !(data[0] instanceof model);\n }\n\n return false;\n },\n\n _observe: function(data) {\n var that = this,\n model = that.reader.model;\n\n that._shouldDetachObservableParents = true;\n\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() { return that.parent(); };\n }\n\n if (that._isServerGrouped()) {\n wrapGroupItems(data, model);\n }\n\n if (that._changeHandler && that._data && that._data instanceof ObservableArray &&\n !(that.options.useRanges && that.options.serverPaging)) {\n that._data.unbind(CHANGE, that._changeHandler);\n } else {\n that._changeHandler = that._change.bind(that);\n }\n\n return data.bind(CHANGE, that._changeHandler);\n },\n\n _updateTotalForAction: function(action, items) {\n var that = this;\n\n var total = parseInt(that._total, 10);\n\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\n that._total = total;\n },\n\n _pushInDestroyed: function(model) {\n var isPushed = this._destroyed.find(function(item) {\n return item.uid === model.uid;\n });\n if (!isPushed) {\n this._destroyed.push(model);\n }\n },\n\n _change: function(e) {\n var that = this, idx, length, action = e ? e.action : \"\";\n\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._pushInDestroyed(e.items[idx]);\n }\n }\n }\n\n if (that.options.autoSync && (action === \"add\" || action === \"remove\" || action === \"itemchange\")) {\n\n var handler = function(args) {\n if (args.action === \"sync\") {\n that.unbind(\"change\", handler);\n that._updateTotalForAction(action, e.items);\n }\n };\n\n that.first(\"change\", handler);\n\n that.sync();\n\n } else {\n that._updateTotalForAction(action, e ? e.items : []);\n\n that._process(that._data, e);\n }\n },\n\n _calculateAggregates: function(data, options) {\n options = options || {};\n\n var query = new Query(data),\n aggregates = options.aggregate,\n filter = options.filter;\n\n if (filter) {\n query = query.filter(filter);\n }\n\n return query.aggregate(aggregates);\n },\n\n _process: function(data, e) {\n var that = this,\n options = {},\n result;\n\n if (that.options.serverPaging !== true) {\n options.skip = that._skip;\n options.take = that._take || that._pageSize;\n\n if (options.skip === undefined$1 && that._page !== undefined$1 && that._pageSize !== undefined$1) {\n options.skip = (that._page - 1) * that._pageSize;\n }\n\n if (that.options.useRanges) {\n options.skip = that.currentRangeStart();\n }\n }\n\n if (that.options.serverSorting !== true) {\n options.sort = that._sort;\n }\n\n if (that.options.serverFiltering !== true) {\n options.filter = that._filter;\n }\n\n if (that.options.serverGrouping !== true) {\n options.group = that._group;\n }\n\n if (that.options.serverAggregates !== true) {\n options.aggregate = that._aggregate;\n }\n\n if (that.options.serverGrouping) {\n that._clearEmptyGroups(data);\n }\n\n options.groupPaging = that._groupPaging;\n\n if (that._isGroupPaged() && e && (e.action === \"page\" || e.action === \"expandGroup\" || e.action === \"collapseGroup\")) {\n result = that._queryProcess(data, {\n aggregate: that._aggregate\n });\n } else {\n result = that._queryProcess(data, options);\n }\n\n if (that._filter && e && e.action === \"add\") {\n var model = e.items[0],\n resultData = result.data;\n\n var modelIsInView = resultData.find(function(item) {\n return item.uid === model.uid;\n });\n\n if (!modelIsInView) {\n result.data.splice(model.index, 0, that._isGrouped() ? that._wrapInEmptyGroup(model) : model);\n result.total++;\n }\n }\n\n if (that.options.serverAggregates !== true) {\n // for performance reasons, calculate aggregates for part of the data only after query process\n // this is necessary in the TreeList when paging\n that._aggregateResult = that._calculateAggregates(result.dataToAggregate || data, options);\n }\n\n that._setView(result, options, e);\n\n that._setFilterTotal(result.total, false);\n\n e = e || {};\n\n e.items = e.items || that._view;\n\n that.trigger(CHANGE, e);\n },\n\n _setView: function(result, options, e) {\n var that = this;\n\n if (that._isGroupPaged() && !that._isServerGrouped()) {\n if (e && (e.action === \"page\" || e.action === \"expandGroup\" || e.action === \"collapseGroup\")) {\n that.view(result.data);\n that._updateOuterRangesLength();\n } else {\n that._ranges = [];\n var query = new Query(result.data);\n that._addRange(that._observe(result.data));\n\n if (options.skip + options.take > result.data.length) {\n options.skip = result.data.length - options.take;\n }\n\n that.view(query.range(options.skip, options.take).toArray());\n }\n\n } else {\n that.view(result.data);\n }\n },\n\n _clearEmptyGroups: function(data) {\n for (var idx = data.length - 1; idx >= 0; idx--) {\n var group = data[idx];\n if (group.hasSubgroups) {\n this._clearEmptyGroups(group.items);\n }\n\n if (group.items && !group.items.length && !group.itemCount) {\n splice.apply(group.parent(), [idx, 1]);\n }\n }\n },\n\n _queryProcess: function(data, options) {\n if (this.options.inPlaceSort) {\n return Query.process(data, options, this.options.inPlaceSort);\n }\n else {\n return Query.process(data, options);\n }\n },\n\n _mergeState: function(options) {\n var that = this;\n\n if (options !== undefined$1) {\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\n if (that._skip === undefined$1) {\n that._skip = that._currentRangeStart = that.skip();\n options.skip = that.skip();\n }\n\n if (that._take === undefined$1 && that._pageSize !== undefined$1) {\n that._take = that._pageSize;\n options.take = that._take;\n }\n\n if (that.options.virtual) {\n options.virtual = that.options.virtual;\n }\n\n if (options.sort) {\n that._sort = options.sort = normalizeSort(options.sort);\n that._sortFields = sortFields(options.sort);\n }\n\n if (options.filter) {\n that._filter = options.filter = (that.options.accentFoldingFiltering && !$.isEmptyObject(options.filter)) ? $.extend({}, normalizeFilter(options.filter), { accentFoldingFiltering: that.options.accentFoldingFiltering }) : normalizeFilter(options.filter);\n }\n\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\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\n if (remote || ((this._data === undefined$1 || 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\n var isPrevented = this.trigger(REQUESTSTART, { type: \"read\" });\n if (!isPrevented) {\n this.trigger(PROGRESS);\n if (options) {\n options.groupPaging = this._groupPaging;\n }\n result = this._queryProcess(this._data, this._mergeState(options));\n\n this._setFilterTotal(result.total, true);\n\n this._aggregateResult = this._calculateAggregates(result.dataToAggregate || this._data, options);\n this._setView(result, options);\n this.trigger(REQUESTEND, { type: \"read\" });\n this.trigger(CHANGE, { items: result.data, action: options ? options.action : \"\" });\n }\n\n return $.Deferred().resolve(isPrevented).promise();\n },\n\n _hasExpandedSubGroups: function(group) {\n var result = false;\n var length = group.items ? group.items.length : 0;\n\n if (!group.hasSubgroups) {\n return false;\n }\n\n for (var i = 0; i < length; i++) {\n if (this._groupsState[group.items[i].uid]) {\n result = true;\n break;\n }\n }\n return result;\n },\n\n _findGroupedRange: function(data, result, options, parents, callback) {\n var that = this;\n var length = data.length;\n var group;\n var current;\n var itemsLength;\n var groupCount;\n var itemsToSkip;\n\n for (var i = 0; i < length; i++) {\n group = data[i];\n\n if (options.taken >= options.take) {\n break;\n }\n\n if (!that._getGroupByUid(group.uid)) {\n that._groupsFlat.push(group);\n }\n\n if (that._groupsState[group.uid]) {\n if (that._isServerGroupPaged()) {\n if (that._fetchGroupItems(group, options, parents, callback)) {\n that._fetchingGroupItems = true;\n return;\n }\n groupCount = (group.subgroupCount || group.itemCount) + 1;\n itemsToSkip = options.skip - options.skipped;\n if (!that._hasExpandedSubGroups(group) && itemsToSkip > groupCount) {\n options.skipped += groupCount;\n continue;\n }\n }\n\n if (options.includeParents && options.skipped < options.skip) {\n options.skipped++;\n group.excludeHeader = true;\n } else if (options.includeParents) {\n options.taken++;\n group.excludeHeader = false;\n }\n\n if (group.hasSubgroups && group.items && group.items.length) {\n group.currentItems = [];\n\n if (!parents) {\n parents = [];\n }\n parents.push(group);\n\n that._findGroupedRange(group.items, group.currentItems, options, parents, callback);\n parents.pop();\n\n if (group.currentItems.length || options.taken > 0) {\n result.push(group);\n } else {\n group.excludeHeader = false;\n }\n } else {\n current = [];\n itemsLength = group.items.length;\n\n for (var j = 0; j < itemsLength; j++) {\n if (options.skipped < options.skip) {\n options.skipped++;\n continue;\n }\n\n if (options.taken >= options.take) {\n break;\n }\n current.push(group.items[j]);\n options.taken++;\n }\n\n if (current.length || options.taken > 0) {\n group.currentItems = current;\n result.push(group);\n } else {\n group.excludeHeader = false;\n }\n }\n } else {\n if (options.skipped < options.skip) {\n options.skipped++;\n continue;\n }\n result.push(group);\n options.taken++;\n }\n }\n },\n\n _expandedSubGroupItemsCount: function(group, end, includeCurrentItems) {\n var that = this;\n var result = 0;\n var subGroup;\n var endSpecified = typeof end === \"number\";\n var length = endSpecified ? end : group.subgroupCount;\n var temp;\n\n if (!group.hasSubgroups) {\n return result;\n }\n\n for (var i = 0; i < length; i++) {\n subGroup = group.items[i];\n\n if (!subGroup) {\n break;\n }\n\n if (subGroup.hasSubgroups && that._groupsState[group.uid]) {\n temp = that._expandedSubGroupItemsCount(subGroup, length, true);\n result += temp;\n\n if (endSpecified) {\n length -= temp;\n }\n } else if (!subGroup.hasSubgroups && that._groupsState[subGroup.uid]) {\n temp = subGroup.items ? subGroup.items.length : 0;\n result += temp;\n if (endSpecified) {\n length -= temp;\n }\n }\n\n if (includeCurrentItems) {\n result += 1;\n if (endSpecified) {\n length -= 1;\n }\n }\n\n if (endSpecified && result > length) {\n return result;\n }\n }\n\n return result;\n },\n\n _fetchGroupItems: function(group, options, parents, callback) {\n var that = this;\n var groupItemsSkip;\n var firstItem;\n var lastItem;\n var groupItemCount = group.hasSubgroups ? group.subgroupCount : group.itemCount;\n var take = options.take;\n var skipped = options.skipped;\n var pageSize = that.take();\n var expandedSubGroupItemsCount;\n\n if (options.includeParents) {\n if (skipped < options.skip) {\n skipped += 1;\n } else {\n take -= 1;\n }\n }\n\n if (!group.items || (group.items && !group.items.length)) {\n that.getGroupItems(group, options, parents, callback, 0);\n return true;\n } else {\n expandedSubGroupItemsCount = this._expandedSubGroupItemsCount(group, options.skip - skipped);\n groupItemsSkip = Math.max(options.skip - (skipped + expandedSubGroupItemsCount), 0);\n\n if (groupItemsSkip >= groupItemCount) {\n return false;\n }\n\n firstItem = group.items[groupItemsSkip];\n lastItem = group.items[Math.min(groupItemsSkip + take, groupItemCount - 1)];\n\n if (firstItem.notFetched) {\n that.getGroupItems(group, options, parents, callback, math.max(math.floor(groupItemsSkip / pageSize), 0) * pageSize, math.round((groupItemsSkip + pageSize) / pageSize));\n return true;\n }\n\n if (lastItem.notFetched) {\n that.getGroupItems(group, options, parents, callback, math.max(math.floor((groupItemsSkip + pageSize) / pageSize), 0) * pageSize, math.round((groupItemsSkip + pageSize) / pageSize));\n return true;\n }\n }\n },\n\n getGroupItems: function(group, options, parents, callback, groupItemsSkip, page) {\n var that = this;\n var take;\n var filter;\n var data;\n var subgroups;\n\n if (!group.items) {\n group.items = [];\n }\n\n take = that.take();\n filter = this._composeItemsFilter(group, parents);\n data = {\n page: page || 1,\n pageSize: take,\n skip: groupItemsSkip,\n take: take,\n filter: filter,\n aggregate: that._aggregate,\n sort: that._sort\n };\n subgroups = that.findSubgroups(group);\n\n if (subgroups && subgroups.length) {\n data.group = subgroups;\n data.groupPaging = true;\n }\n\n clearTimeout(that._timeout);\n that._timeout = setTimeout(function() {\n that._queueRequest(data, function() {\n if (!that.trigger(REQUESTSTART, {\n type: \"read\"\n })) {\n that.transport.read({\n data: data,\n success: that._groupItemsSuccessHandler(group, options.skip, that.take(), callback, groupItemsSkip),\n error: function() {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n }\n });\n } else {\n that._dequeueRequest();\n }\n });\n }, 100);\n },\n\n _groupItemsSuccessHandler: function(group, skip, take, callback, groupItemsSkip) {\n var that = this;\n var timestamp = that._timeStamp();\n callback = isFunction(callback) ? callback : noop;\n var totalField = that.options.schema && that.options.schema.total ? that.options.schema.total : \"Total\";\n\n return function(data) {\n var temp;\n var model = Model.define(that.options.schema.model);\n var totalCount;\n\n that._dequeueRequest();\n\n that.trigger(REQUESTEND, {\n response: data,\n type: \"read\"\n });\n\n if (isFunction(totalField)) {\n totalCount = totalField(data);\n } else {\n totalCount = data[totalField];\n }\n\n data = that.reader.parse(data);\n\n if (group.hasSubgroups) {\n temp = that.reader.groups(data);\n group.subgroupCount = totalCount;\n } else {\n temp = that.reader.data(data);\n temp = temp.map(function(item) {\n return new model(item);\n });\n }\n\n group.items.omitChangeEvent = true;\n for (var i = 0; i < totalCount; i++) {\n if (i >= groupItemsSkip && i < (groupItemsSkip + take) ) {\n group.items.splice(i, 1, temp[i - groupItemsSkip]);\n } else {\n if (!group.items[i]) {\n group.items.splice(i, 0, { notFetched: true });\n }\n }\n }\n group.items.omitChangeEvent = false;\n\n that._updateRangePristineData(group);\n that._fetchingGroupItems = false;\n\n if (!group.countAdded) {\n that._serverGroupsTotal += totalCount;\n group.countAdded = true;\n }\n\n that.range(skip, take, callback, \"expandGroup\");\n\n if (timestamp >= that._currentRequestTimeStamp || !that._skipRequestsInProgress) {\n that.trigger(CHANGE, {});\n }\n };\n },\n\n findSubgroups: function(group) {\n var indexOfCurrentGroup = this._group.map(function(g) {\n return g.field;\n }).indexOf(group.field);\n\n return this._group.slice(indexOfCurrentGroup + 1, this._group.length);\n },\n\n _composeItemsFilter: function(group, parents) {\n var filter = this.filter() || {\n logic: \"and\",\n filters: []\n };\n\n filter.logic = 'and';\n filter = extend(true, {}, filter);\n filter.filters.push({\n field: group.field,\n operator: \"eq\",\n value: group.value\n });\n\n if (parents) {\n for (var i = 0; i < parents.length; i++) {\n filter.filters.push({\n field: parents[i].field,\n operator: \"eq\",\n value: parents[i].value\n });\n }\n }\n\n return filter;\n },\n\n _updateRangePristineData: function(group) {\n var that = this;\n var ranges = that._ranges;\n var rangesLength = ranges.length;\n var temp;\n var currentGroup;\n var range;\n var dataLength;\n var indexes;\n var currIdx;\n\n for (var i = 0; i < rangesLength; i++) {\n range = ranges[i];\n dataLength = range.data.length;\n indexes = [];\n temp = null;\n\n for (var j = 0; j < dataLength; j++) {\n currentGroup = range.data[j];\n indexes.push(j);\n\n if ((currentGroup.uid === group.uid) || (currentGroup.hasSubgroups && currentGroup.items.length && that._containsSubGroup(currentGroup, group, indexes))) {\n break;\n }\n indexes.pop();\n }\n\n if (indexes.length) {\n temp = ranges[i].pristineData;\n\n while (indexes.length > 1) {\n currIdx = indexes.splice(0, 1)[0];\n temp = temp[currIdx].items;\n }\n temp[indexes[0]] = that._cloneGroup(group);\n break;\n }\n }\n },\n\n _containsSubGroup: function(group, subgroup, indexes) {\n var that = this;\n var length = group.items.length;\n var currentSubGroup;\n\n if (group.hasSubgroups && length) {\n for (var i = 0; i < length; i++) {\n currentSubGroup = group.items[i];\n indexes.push(i);\n if (currentSubGroup.uid === subgroup.uid ||\n (currentSubGroup.hasSubgroups &&\n currentSubGroup.items.length &&\n that._containsSubGroup(currentSubGroup, subgroup, indexes))) {\n return true;\n }\n indexes.pop();\n }\n }\n\n },\n\n _cloneGroup: function(group) {\n var that = this;\n group = typeof group.toJSON == \"function\" ? group.toJSON() : group;\n\n if (group.items && group.items.length) {\n group.items = group.items.map(function(item) {\n return that._cloneGroup(item);\n });\n }\n\n return group;\n },\n\n _setFilterTotal: function(filterTotal, setDefaultValue) {\n var that = this;\n\n if (!that.options.serverFiltering) {\n if (filterTotal !== undefined$1) {\n that._total = filterTotal;\n } else if (setDefaultValue) {\n that._total = that._data.length;\n }\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\n return this._query().done(fn);\n },\n\n _query: function(options) {\n var that = this;\n\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\n next: function(options) {\n var that = this,\n page = that.page(),\n total = that.total();\n\n options = options || {};\n\n if (!page || (total && page + 1 > that.totalPages())) {\n return;\n }\n\n that._skip = that._currentRangeStart = page * that.take();\n\n page += 1;\n options.page = page;\n\n that._query(options);\n\n return page;\n },\n\n prev: function(options) {\n var that = this,\n page = that.page();\n\n options = options || {};\n\n if (!page || page === 1) {\n return;\n }\n\n that._skip = that._currentRangeStart = that._skip - that.take();\n\n page -= 1;\n options.page = page;\n\n that._query(options);\n\n return page;\n },\n\n page: function(val) {\n var that = this,\n skip;\n\n if (val !== undefined$1) {\n val = math.max(math.min(math.max(val, 1), that.totalPages()), 1);\n var take = that.take();\n\n if (that._isGroupPaged()) {\n val -= 1;\n that.range(val * take, take, null, \"page\");\n return;\n }\n that._query(that._pageableQueryOptions({ page: val }));\n return;\n }\n skip = that.skip();\n\n return skip !== undefined$1 ? math.round((skip || 0) / (that.take() || 1)) + 1 : undefined$1;\n },\n\n pageSize: function(val) {\n var that = this;\n\n if (val !== undefined$1) {\n that._query(that._pageableQueryOptions({ pageSize: val, page: 1 }));\n return;\n }\n\n return that.take();\n },\n\n sort: function(val) {\n var that = this;\n\n if (val !== undefined$1) {\n that.trigger(\"sort\");\n that._query({ sort: val });\n return;\n }\n\n return that._sort;\n },\n\n filter: function(val) {\n var that = this;\n\n if (val === undefined$1) {\n return that._filter;\n }\n\n that.trigger(\"reset\");\n that._query({ filter: val, page: 1 });\n },\n\n group: function(val) {\n var that = this;\n var options = { group: val };\n\n if (that._groupPaging) {\n // clear ranges if ungrouping is performed\n if (val !== undefined$1 && (!val || !val.length) ) {\n that._ranges = [];\n }\n options.page = 1;\n }\n\n if (val !== undefined$1) {\n that._query(options);\n return;\n }\n\n return that._group;\n },\n\n getGroupsFlat: function(data) {\n var idx,\n result = [],\n length;\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n var group = data[idx];\n if (group.hasSubgroups) {\n result = result.concat(this.getGroupsFlat(group.items));\n }\n\n result.push(group);\n }\n\n return result;\n },\n\n total: function() {\n return parseInt(this._total || 0, 10);\n },\n\n groupsTotal: function(includeExpanded) {\n var that = this;\n\n if (!that._group.length) {\n return that.total();\n }\n\n if (that._isServerGrouped()) {\n if (that._serverGroupsTotal) {\n return that._serverGroupsTotal;\n }\n that._serverGroupsTotal = that.total();\n\n return that._serverGroupsTotal;\n }\n\n return that._calculateGroupsTotal(that._ranges.length ? that._ranges[0].data : [], includeExpanded);\n },\n\n _calculateGroupsTotal: function(groups, includeExpanded, itemsField, ignoreState) {\n var that = this;\n itemsField = itemsField || \"items\";\n var total;\n var length;\n\n if (that._group.length && groups) {\n total = 0;\n length = groups.length;\n\n for (var i = 0; i < length; i++) {\n total += that.groupCount(groups[i], includeExpanded, itemsField, ignoreState);\n }\n that._groupsTotal = total;\n return total;\n }\n\n that._groupsTotal = that._data.length;\n return that._groupsTotal;\n },\n\n groupCount: function(group, includeExpanded, itemsField, ignoreState) {\n var that = this;\n var total = 0;\n\n if (group.hasSubgroups && that._groupsState[group.uid]) {\n if (includeExpanded && !group.excludeHeader || ignoreState) {\n total += 1;\n }\n\n group[itemsField].forEach(function(subgroup) {\n total += that.groupCount(subgroup, includeExpanded, itemsField, ignoreState);\n });\n } else {\n if (that._groupsState[group.uid]) {\n if (includeExpanded && !group.excludeHeader || ignoreState) {\n total++;\n }\n total += group[itemsField] ? group[itemsField].length : 0;\n } else {\n total++;\n }\n }\n return total;\n },\n\n countGroupRange: function(range) {\n var total = 0;\n var length = range.length;\n\n for (var i = 0; i < length; i++) {\n total += this.groupCount(range[i], true);\n }\n\n return total;\n },\n\n aggregate: function(val) {\n var that = this;\n\n if (val !== undefined$1) {\n that._query({ aggregate: val });\n return;\n }\n\n return that._aggregate;\n },\n\n aggregates: function() {\n var result = this._aggregateResult;\n\n if (isEmptyObject(result)) {\n result = this._emptyAggregates(this.aggregate());\n }\n\n return result;\n },\n\n _emptyAggregates: function(aggregates) {\n var result = {};\n\n if (!isEmptyObject(aggregates)) {\n var aggregate = {};\n\n if (!isArray(aggregates)) {\n aggregates = [aggregates];\n }\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\n return result;\n },\n\n _pageableQueryOptions: function(options) {\n return options;\n },\n\n _wrapInEmptyGroup: function(model) {\n var groups = this.group(),\n parent,\n group,\n idx,\n length;\n\n for (idx = groups.length - 1, length = 0; idx >= length; idx--) {\n group = groups[idx];\n parent = {\n value: model.get ? model.get(group.field) : model[group.field],\n field: group.field,\n items: parent ? [parent] : [model],\n hasSubgroups: !!parent,\n aggregates: this._emptyAggregates(group.aggregates)\n };\n }\n\n return parent;\n },\n\n totalPages: function() {\n var that = this,\n pageSize = that.pageSize() || that.total(),\n total = that._isGroupPaged() ? that.groupsTotal(true) : that.total();\n\n return math.ceil((total || 0) / pageSize);\n },\n\n inRange: function(skip, take) {\n var that = this,\n end = math.min(skip + take, that.total());\n\n if (!that.options.serverPaging && that._data.length > 0) {\n return true;\n }\n\n return that._findRange(skip, end).length > 0;\n },\n\n lastRange: function() {\n var ranges = this._ranges;\n return ranges[ranges.length - 1] || { start: 0, end: 0, 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\n enableRequestsInProgress: function() {\n this._skipRequestsInProgress = false;\n },\n\n _timeStamp: function() {\n return new Date().getTime();\n },\n\n range: function(skip, take, callback, action) {\n this._currentRequestTimeStamp = this._timeStamp();\n this._skipRequestsInProgress = true;\n var total = this._isGroupPaged() ? this.groupsTotal(true) : this.total();\n\n if (action === \"expandGroup\" || action === \"collapseGroup\") {\n this._updateOuterRangesLength();\n }\n\n skip = math.min(skip || 0, total);\n callback = isFunction(callback) ? callback : noop;\n\n var that = this,\n pageSkip = math.max(math.floor(skip / take), 0) * take,\n size = math.min(pageSkip + take, total),\n data;\n\n data = that._findRange(skip, math.min(skip + take, total), callback);\n\n if ((data.length || total === 0) && !that._fetchingGroupItems) {\n that._processRangeData(data, skip, take, that._originalPageSkip || pageSkip, that._originalSize || size, {\n action: action\n });\n that._originalPageSkip = null;\n that._originalSize = null;\n callback();\n return;\n }\n\n if (that._isGroupPaged()) {\n that._originalPageSkip = pageSkip;\n that._originalSize = size;\n\n pageSkip = math.max(math.floor(that._adjustPageSkip(skip, take) / take), 0) * take;\n size = math.min(pageSkip + take, total);\n }\n\n if (take !== undefined$1 && !that._fetchingGroupItems) {\n if ((that._isGroupPaged() && !that._groupRangeExists(pageSkip, take)) || !that._rangeExists(pageSkip, size)) {\n that.prefetch(pageSkip, take, function() {\n if (skip > pageSkip && size < that.total() && !that._rangeExists(size, math.min(size + take, that.total()))) {\n that.prefetch(size, take, function() {\n that.range(skip, take, callback );\n });\n } else {\n that.range(skip, take, callback);\n }\n });\n } else if (pageSkip < skip) {\n that.prefetch(size, take, function() {\n that.range(skip, take, callback );\n });\n }\n }\n },\n\n _findRange: function(start, end, callback) {\n var that = this,\n ranges = that._ranges,\n range,\n data = [],\n skipIdx,\n takeIdx,\n startIndex,\n endIndex,\n rangeData,\n rangeEnd,\n processed,\n options = that.options,\n remote = options.serverSorting || options.serverPaging || options.serverFiltering || options.serverGrouping || options.serverAggregates,\n flatData,\n count,\n length,\n groupMapOptions = {\n take: end - start,\n skip: start,\n skipped: 0,\n taken: 0,\n includeParents: true\n },\n prevRangeEnd,\n isGroupPaged = that._isGroupPaged(),\n startField = isGroupPaged ? \"outerStart\" : \"start\",\n endField = isGroupPaged ? \"outerEnd\" : \"end\",\n currentDataLength;\n\n for (skipIdx = 0, length = ranges.length; skipIdx < length; skipIdx++) {\n range = ranges[skipIdx];\n\n if (isGroupPaged) {\n if (range.outerStart >= end) {\n return [];\n }\n\n if (start > range.outerEnd) {\n groupMapOptions.skipped += range.outerEnd - (prevRangeEnd || 0);\n prevRangeEnd = range.outerEnd;\n continue;\n }\n\n if (typeof prevRangeEnd !== \"undefined\" && prevRangeEnd != range.outerStart) {\n groupMapOptions.skipped += range.outerStart - prevRangeEnd;\n }\n\n if (groupMapOptions.skipped > groupMapOptions.skip) {\n return [];\n }\n\n if (typeof prevRangeEnd === \"undefined\" && start > 0 && range.start > 0) {\n groupMapOptions.skipped = range.outerStart;\n }\n\n takeIdx = skipIdx;\n while (true) {\n this._findGroupedRange(range.data, data, groupMapOptions, null, callback);\n currentDataLength = that._calculateGroupsTotal(data, true, \"currentItems\");\n\n if (currentDataLength >= groupMapOptions.take) {\n return data;\n }\n\n if (that._fetchingGroupItems) {\n return [];\n }\n takeIdx++;\n\n if (ranges[takeIdx] && ranges[takeIdx].outerStart === range.outerEnd) {\n range = ranges[takeIdx];\n } else {\n break;\n }\n }\n } else if (start >= range[startField] && start <= range[endField]) {\n count = 0;\n\n for (takeIdx = skipIdx; takeIdx < length; takeIdx++) {\n range = ranges[takeIdx];\n flatData = that._flatData(range.data, true);\n\n if (flatData.length && start + count >= range.start) {\n rangeData = range.data;\n rangeEnd = range.end;\n\n if (!remote) {\n if (options.inPlaceSort) {\n processed = that._queryProcess(range.data, { filter: that.filter() });\n } else {\n var sort = normalizeGroupWithoutCompare(that.group() || []).concat(normalizeSort(that.sort() || []));\n processed = that._queryProcess(range.data, { sort: sort, filter: that.filter() });\n }\n flatData = rangeData = processed.data;\n\n if (processed.total !== undefined$1) {\n rangeEnd = processed.total;\n }\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\n if (end <= range.end && count == end - start) {\n return data;\n }\n }\n }\n break;\n }\n prevRangeEnd = range.outerEnd;\n }\n return [];\n },\n\n _getRangesMismatch: function(pageSkip) {\n var that = this;\n var ranges = that._ranges;\n var mismatch = 0;\n var i = 0;\n\n while (true) {\n var range = ranges[i];\n if (!range || range.outerStart > pageSkip) {\n break;\n }\n\n if (range.outerEnd != range.end) {\n mismatch = range.outerEnd - range.end;\n }\n i++;\n }\n\n return mismatch;\n },\n\n _mergeGroups: function(data, range, skip, take) {\n if (this._isServerGrouped()) {\n var temp = range.toJSON(),\n prevGroup;\n\n if (data.length) {\n prevGroup = data[data.length - 1];\n }\n\n mergeGroups(prevGroup, temp, skip, take);\n\n return data.concat(temp);\n }\n return data.concat(range.slice(skip, take));\n },\n\n _processRangeData: function(data, skip, take, pageSkip, size, eventData) {\n var that = this;\n\n that._pending = undefined$1;\n\n that._skip = skip > that.skip() && !that._omitPrefetch ? math.min(size, (that.totalPages() - 1) * that.take()) : pageSkip;\n\n that._currentRangeStart = skip;\n\n that._take = take;\n\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\n if (paging) {\n that._detachObservableParents();\n that._data = data = that._observe(data);\n }\n that._process(data, eventData);\n } finally {\n that.options.serverPaging = paging;\n that.options.serverSorting = sorting;\n that.options.serverFiltering = filtering;\n that.options.serverAggregates = aggregates;\n }\n },\n\n skip: function() {\n var that = this;\n\n if (that._skip === undefined$1) {\n return (that._page !== undefined$1 ? (that._page - 1) * (that.take() || 1) : undefined$1);\n }\n return that._skip;\n },\n\n currentRangeStart: function() {\n return this._currentRangeStart || 0;\n },\n\n take: function() {\n return this._take || this._pageSize;\n },\n\n _prefetchSuccessHandler: function(skip, size, callback, force) {\n var that = this;\n var timestamp = that._timeStamp();\n\n return function(data) {\n var found = false,\n range = { start: skip, end: size, data: [], timestamp: that._timeStamp() },\n idx,\n length,\n temp;\n\n that._dequeueRequest();\n\n that.trigger(REQUESTEND, { response: data, type: \"read\" });\n\n data = that.reader.parse(data);\n\n temp = that._readData(data);\n\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\n if (!that._isGroupPaged()) {\n range.pristineData = temp;\n range.data = that._observe(temp);\n range.end = range.start + that._flatData(range.data, true).length;\n that._sortRanges();\n }\n\n break;\n }\n }\n\n if (!found) {\n that._addRange(that._observe(temp), skip);\n }\n }\n\n that._total = that.reader.total(data);\n\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\n prefetch: function(skip, take, callback) {\n var that = this,\n size = math.min(skip + take, that.total()),\n 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\n\n if ((that._isGroupPaged() && !that._isServerGrouped() && that._groupRangeExists(skip, size))) {\n if (callback) {\n callback();\n }\n return;\n }\n\n if ((that._isServerGroupPaged() && !that._groupRangeExists(skip, size)) || !that._rangeExists(skip, size)) {\n clearTimeout(that._timeout);\n\n that._timeout = setTimeout(function() {\n that._queueRequest(options, function() {\n if (!that.trigger(REQUESTSTART, { type: \"read\" })) {\n if (that._omitPrefetch) {\n that.trigger(PROGRESS);\n }\n that.transport.read({\n data: that._params(options),\n success: that._prefetchSuccessHandler(skip, size, callback),\n error: function() {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n }\n });\n } else {\n that._dequeueRequest();\n }\n });\n }, 100);\n } else if (callback) {\n callback();\n }\n },\n\n _multiplePrefetch: function(skip, take, callback) {\n var that = this,\n size = math.min(skip + take, that.total()),\n 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\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\n _adjustPageSkip: function(start, take) {\n var that = this;\n var prevRange = that._getPrevRange(start);\n var result;\n var total = that.total();\n var mismatch;\n\n if (prevRange) {\n mismatch = that._getRangesMismatch(start);\n\n if (!mismatch) {\n return start;\n }\n start -= mismatch;\n }\n result = math.max(math.floor(start / take), 0) * take;\n\n if (result > total) {\n while (true) {\n result -= take;\n if (result < total) {\n break;\n }\n }\n }\n return result;\n },\n\n _getNextRange: function(end) {\n var that = this,\n ranges = that._ranges,\n idx,\n length;\n\n for (idx = 0, length = ranges.length; idx < length; idx++) {\n if (ranges[idx].start <= end && ranges[idx].end >= end) {\n return ranges[idx];\n }\n }\n },\n\n _getPrevRange: function(start) {\n var that = this,\n ranges = that._ranges,\n idx,\n range,\n length = ranges.length;\n\n for (idx = length - 1; idx >= 0; idx--) {\n if (ranges[idx].outerStart <= start) {\n range = ranges[idx];\n break;\n }\n\n }\n\n return range;\n },\n\n _rangeExists: function(start, end) {\n var that = this,\n ranges = that._ranges,\n idx,\n length;\n\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\n return false;\n },\n\n _groupRangeExists: function(start, end) {\n var that = this,\n ranges = that._ranges,\n idx,\n length,\n availableItemsCount = 0,\n total = that.groupsTotal(true);\n\n if (end > total && !that._isServerGrouped()) {\n end = total;\n }\n\n for (idx = 0, length = ranges.length; idx < length; idx++) {\n var range = ranges[idx];\n if (range.outerStart <= start && range.outerEnd >= start) {\n availableItemsCount += range.outerEnd - start;\n } else if (range.outerStart <= end && range.outerEnd >= end) {\n availableItemsCount += end - range.outerStart;\n }\n }\n\n return availableItemsCount >= end - start;\n },\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\n for (idx = 0; idx < length; idx++) {\n range = ranges[idx];\n\n if ((range.start <= start && range.end >= start) || (range.start >= start && range.start <= end)) {\n rangeSpan.push(range);\n }\n }\n\n return rangeSpan;\n },\n\n _removeModelFromRanges: function(model) {\n var that = this;\n var range;\n\n for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\n range = this._ranges[idx];\n\n that._removeModelFromRange(range, model);\n }\n\n that._updateRangesLength();\n },\n\n _removeModelFromRange: function(range, model) {\n this._eachItem(range.data, function(data) {\n if (!data) {\n return;\n }\n for (var idx = 0; idx < data.length; idx++) {\n var dataItem = data[idx];\n\n if (dataItem.uid && dataItem.uid == model.uid) {\n [].splice.call(data, idx, 1);\n break;\n }\n }\n });\n },\n\n _insertModelInRange: function(index, model) {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var range;\n var i;\n\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n\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\n break;\n }\n }\n\n that._updateRangesLength();\n },\n\n _updateRangesLength: function() {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var mismatchFound = false;\n var mismatchLength = 0;\n var lengthDifference = 0;\n var rangeLength;\n var range;\n var i;\n\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n rangeLength = that._isGroupPaged() ? range.data.length : that._flatData(range.data, true).length;\n lengthDifference = rangeLength - math.abs(range.end - range.start);\n\n if (!mismatchFound && lengthDifference !== 0) {\n mismatchFound = true;\n mismatchLength = lengthDifference;\n range.end += mismatchLength;\n continue;\n }\n\n if (mismatchFound) {\n range.start += mismatchLength;\n range.end += mismatchLength;\n }\n }\n },\n\n _updateOuterRangesLength: function() {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var mismatchLength = 0;\n var range;\n var i;\n var prevRange;\n var rangeLength;\n\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n rangeLength = that._isGroupPaged() ? that._calculateGroupsTotal(range.data, true, \"items\", true) : that._flatData(range.data, true).length;\n\n if (prevRange) {\n if (prevRange.end != range.start) {\n mismatchLength = range.start - prevRange.end;\n }\n range.outerStart = prevRange.outerEnd + mismatchLength;\n mismatchLength = 0;\n } else {\n range.outerStart = range.start;\n }\n\n range.outerEnd = range.outerStart + rangeLength;\n prevRange = range;\n }\n }\n });\n\n var Transport = {};\n\n Transport.create = function(options, data, dataSource) {\n var transport,\n transportOptions = options.transport ? $.extend({}, options.transport) : null;\n\n if (transportOptions) {\n transportOptions.read = typeof transportOptions.read === STRING ? { url: transportOptions.read } : transportOptions.read;\n\n if (options.type === \"jsdo\") {\n transportOptions.dataSource = dataSource;\n }\n\n if (options.type) {\n kendo.data.transports = kendo.data.transports || {};\n kendo.data.schemas = kendo.data.schemas || {};\n\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\n options.schema = extend(true, {}, kendo.data.schemas[options.type], options.schema);\n }\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\n DataSource.create = function(options) {\n if (isArray(options) || options instanceof ObservableArray) {\n options = { data: options };\n }\n\n var dataSource = options || {},\n data = dataSource.data,\n fields = dataSource.fields,\n table = dataSource.table,\n select = dataSource.select,\n idx,\n length,\n model = {},\n field;\n\n if (!data && fields && !dataSource.transport) {\n if (table) {\n data = inferTable(table, fields);\n } else if (select) {\n data = inferSelect(select, fields);\n\n if (dataSource.group === undefined$1 && data[0] && data[0].optgroup !== undefined$1) {\n dataSource.group = \"optgroup\";\n }\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\n if (!isEmptyObject(model)) {\n dataSource.schema = extend(true, dataSource.schema, { model: { fields: model } });\n }\n }\n\n dataSource.data = data;\n\n select = null;\n dataSource.select = null;\n table = null;\n dataSource.table = null;\n\n return dataSource instanceof DataSource ? dataSource : new DataSource(dataSource);\n };\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\n var data = [];\n var idx, length;\n var optgroup;\n var option;\n var record;\n var value;\n\n for (idx = 0, length = options.length; idx < length; idx++) {\n record = {};\n option = options[idx];\n optgroup = option.parentNode;\n\n if (optgroup === select) {\n optgroup = null;\n }\n\n if (option.disabled || (optgroup && optgroup.disabled)) {\n continue;\n }\n\n if (optgroup) {\n record.optgroup = optgroup.label;\n }\n\n record[firstField.field] = option.text;\n\n value = option.attributes.value;\n\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n\n record[secondField.field] = value;\n\n data.push(record);\n }\n\n return data;\n }\n\n function inferTable(table, fields) {\n var tbody = $(table)[0].tBodies[0],\n rows = tbody ? tbody.rows : [],\n idx,\n length,\n fieldIndex,\n fieldCount = fields.length,\n data = [],\n cells,\n record,\n cell,\n empty;\n\n for (idx = 0, length = rows.length; idx < length; idx++) {\n record = {};\n empty = true;\n cells = rows[idx].cells;\n\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\n return data;\n }\n\n var Node = Model.define({\n idField: \"id\",\n\n init: function(value) {\n var that = this,\n hasChildren = that.hasChildren || value && value.hasChildren,\n childrenField = \"items\",\n childrenOptions = {};\n\n kendo.data.Model.fn.init.call(that, value);\n\n if (typeof that.children === STRING) {\n childrenField = that.children;\n }\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\n if (typeof that.children !== STRING) {\n extend(childrenOptions, that.children);\n }\n\n childrenOptions.data = value;\n\n if (!hasChildren) {\n hasChildren = childrenOptions.schema.data;\n }\n\n if (typeof hasChildren === STRING) {\n hasChildren = kendo.getter(hasChildren);\n }\n\n if (isFunction(hasChildren)) {\n var hasChildrenObject = hasChildren.call(that, that);\n\n if (hasChildrenObject && hasChildrenObject.length === 0) {\n that.hasChildren = false;\n } else {\n that.hasChildren = !!hasChildrenObject;\n }\n }\n\n that._childrenOptions = childrenOptions;\n\n if (that.hasChildren) {\n that._initChildren();\n }\n\n that._loaded = !!(value && value._loaded);\n },\n\n _initChildren: function() {\n var that = this;\n var children, transport, parameterMap;\n\n if (!(that.children instanceof HierarchicalDataSource)) {\n children = that.children = new HierarchicalDataSource(that._childrenOptions);\n\n transport = children.transport;\n parameterMap = transport.parameterMap;\n\n transport.parameterMap = function(data, type) {\n data[that.idField || \"id\"] = that.id;\n\n if (parameterMap) {\n data = parameterMap.call(that, data, type);\n }\n\n return data;\n };\n\n children.parent = function() {\n return that;\n };\n\n children.bind(CHANGE, function(e) {\n e.node = e.node || that;\n that.trigger(CHANGE, e);\n });\n\n children.bind(ERROR, function(e) {\n var collection = that.parent();\n\n if (collection) {\n e.node = e.node || that;\n collection.trigger(ERROR, e);\n }\n });\n\n children.bind(ITEMSLOADED, function(e) {\n var collection = that.parent();\n\n if (collection) {\n collection.trigger(ITEMSLOADED, e);\n }\n });\n\n that._updateChildrenField();\n }\n },\n\n append: function(model) {\n this._initChildren();\n this.loaded(true);\n this.children.add(model);\n },\n\n hasChildren: false,\n\n level: function() {\n var parentNode = this.parentNode(),\n level = 0;\n\n while (parentNode && parentNode.parentNode) {\n level++;\n parentNode = parentNode.parentNode ? parentNode.parentNode() : null;\n }\n\n return level;\n },\n\n _updateChildrenField: function() {\n var fieldName = this._childrenOptions.schema.data;\n\n this[fieldName || \"items\"] = this.children.data();\n },\n\n _childrenLoaded: function() {\n this._loaded = true;\n\n this._updateChildrenField();\n },\n\n load: function() {\n var options = {};\n var method = \"_query\";\n var children, promise;\n\n if (this.hasChildren) {\n this._initChildren();\n\n children = this.children;\n\n options[this.idField || \"id\"] = this.id;\n\n if (!this._loaded) {\n children._data = undefined$1;\n method = \"read\";\n }\n\n children.one(CHANGE, this._childrenLoaded.bind(this));\n\n if (this._matchFilter) {\n options.filter = { field: '_matchFilter', operator: 'eq', value: true };\n }\n\n promise = children[method](options);\n if (!this._loaded) {\n this.trigger(ITEMLOAD, { promise: promise, node: this });\n }\n } else {\n this.loaded(true);\n }\n\n return promise || $.Deferred().resolve().promise();\n },\n\n parentNode: function() {\n var array = this.parent();\n\n return array.parent();\n },\n\n loaded: function(value) {\n if (value !== undefined$1) {\n this._loaded = value;\n } else {\n return this._loaded;\n }\n },\n\n shouldSerialize: function(field) {\n return Model.fn.shouldSerialize.call(this, field) &&\n field !== \"children\" &&\n field !== \"_loaded\" &&\n field !== \"hasChildren\" &&\n field !== \"_childrenOptions\";\n }\n });\n\n function dataMethod(name) {\n return function() {\n var data = this._data,\n result = DataSource.fn[name].apply(this, slice.call(arguments));\n\n if (this._data != data) {\n this._attachBubbleHandlers();\n }\n\n return result;\n };\n }\n\n var HierarchicalDataSource = DataSource.extend({\n init: function(options) {\n var node = Node.define({\n children: options\n });\n\n if (options.filter && !options.serverFiltering) {\n this._hierarchicalFilter = options.filter;\n options.filter = null;\n }\n\n DataSource.fn.init.call(this, extend(true, {}, { schema: { modelBase: node, model: node } }, options));\n\n this._attachBubbleHandlers();\n },\n\n _attachBubbleHandlers: function() {\n var that = this;\n\n that._data.bind(ERROR, function(e) {\n that.trigger(ERROR, e);\n });\n\n that._data.bind(ITEMSLOADED, function(e) {\n that.trigger(ITEMSLOADED, e);\n });\n },\n\n loading: function() {\n if (this._data) {\n return this._data.loading() || this._childrenLoading();\n }\n return false;\n },\n\n _childrenLoading: function() {\n var isLoading = false;\n this._data.forEach(function(node) {\n if (node.hasChildren && node.children.loading()) {\n isLoading = true;\n }\n });\n return isLoading;\n },\n\n read: function(data) {\n var result = DataSource.fn.read.call(this, data);\n\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\n return result;\n },\n\n remove: function(node) {\n var parentNode = node.parentNode(),\n dataSource = this,\n result;\n\n if (parentNode && parentNode._initChildren) {\n dataSource = parentNode.children;\n }\n\n result = DataSource.fn.remove.call(dataSource, node);\n\n if (parentNode && !dataSource.data().length) {\n parentNode.hasChildren = false;\n }\n\n return result;\n },\n\n success: dataMethod(\"success\"),\n\n data: dataMethod(\"data\"),\n\n insert: function(index, model) {\n var parentNode = this.parent();\n\n if (parentNode && parentNode._initChildren) {\n parentNode.hasChildren = true;\n parentNode._initChildren();\n }\n\n return DataSource.fn.insert.call(this, index, model);\n },\n\n filter: function(val) {\n if (val === undefined$1) {\n return this._filter;\n }\n\n if (!this.options.serverFiltering && this._markHierarchicalQuery(val)) {\n val = { logic: \"or\", filters: [val, { field: '_matchFilter', operator: 'equals', value: true }] };\n }\n\n this.trigger(\"reset\");\n this._query({ filter: val, page: 1 });\n },\n\n _markHierarchicalQuery: function(expressions) {\n var compiled;\n var predicate;\n var fields;\n var operators;\n var filter;\n var accentFoldingFiltering = this.options.accentFoldingFiltering;\n\n expressions = accentFoldingFiltering ? $.extend({}, normalizeFilter(expressions), { accentFoldingFiltering: accentFoldingFiltering }) : normalizeFilter(expressions);\n\n if (!expressions || expressions.filters.length === 0) {\n this._updateHierarchicalFilter(function() {return true;});\n return false;\n }\n\n compiled = Query.filterExpr(expressions);\n fields = compiled.fields;\n operators = compiled.operators;\n\n predicate = filter = new Function(\"d, __f, __o\", \"return \" + compiled.expression);\n\n if (fields.length || operators.length) {\n filter = function(d) {\n return predicate(d, fields, operators);\n };\n }\n\n this._updateHierarchicalFilter(filter);\n return true;\n },\n\n _updateHierarchicalFilter: function(filter) {\n var current;\n var data = this._data;\n var result = false;\n\n for (var idx = 0; idx < data.length; idx++) {\n current = data[idx];\n\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\n if (current._matchFilter) {\n result = true;\n }\n }\n return result;\n },\n\n _find: function(method, value) {\n var idx, length, node, children;\n var data = this._data;\n\n if (!data) {\n return;\n }\n\n node = DataSource.fn[method].call(this, value);\n\n if (node) {\n return node;\n }\n\n data = this._flatData(this._data);\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n children = data[idx].children;\n\n if (!(children instanceof HierarchicalDataSource)) {\n continue;\n }\n\n node = children[method](value);\n\n if (node) {\n return node;\n }\n }\n },\n\n get: function(id) {\n return this._find(\"get\", id);\n },\n\n getByUid: function(uid) {\n return this._find(\"getByUid\", uid);\n }\n });\n\n function inferList(list, fields) {\n var items = $(list).children(),\n idx,\n length,\n data = [],\n record,\n textField = fields[0].field,\n urlField = fields[1] && fields[1].field,\n spriteCssClassField = fields[2] && fields[2].field,\n imageUrlField = fields[3] && fields[3].field,\n item,\n id,\n textChild,\n className,\n children;\n\n function elements(collection, tagName) {\n return collection.filter(tagName).add(collection.find(tagName));\n }\n\n for (idx = 0, length = items.length; idx < length; idx++) {\n record = { _loaded: true };\n item = items.eq(idx);\n\n textChild = item[0].firstChild;\n children = item.children();\n list = children.filter(\"ul\");\n children = children.filter(\":not(ul)\");\n\n id = item.attr(\"data-id\");\n\n if (id) {\n record.id = id;\n }\n\n if (textChild) {\n record[textField] = textChild.nodeType == 3 ? textChild.nodeValue : children.text();\n }\n\n if (urlField) {\n record[urlField] = elements(children, \"a\").attr(\"href\");\n }\n\n if (imageUrlField) {\n record[imageUrlField] = elements(children, \"img\").attr(\"src\");\n }\n\n if (spriteCssClassField) {\n className = elements(children, \".k-sprite\").prop(\"className\");\n record[spriteCssClassField] = className && kendo.trim(className.replace(\"k-sprite\", \"\"));\n }\n\n if (list.length) {\n record.items = inferList(list.eq(0), fields);\n }\n\n if (item.attr(\"data-hasChildren\") == \"true\") {\n record.hasChildren = true;\n }\n\n data.push(record);\n }\n\n return data;\n }\n\n HierarchicalDataSource.create = function(options) {\n options = options && options.push ? { data: options } : options;\n\n var dataSource = options || {},\n data = dataSource.data,\n fields = dataSource.fields,\n list = dataSource.list;\n\n if (data && data._dataSource) {\n return data._dataSource;\n }\n\n if (!data && fields && !dataSource.transport) {\n if (list) {\n data = inferList(list, fields);\n }\n }\n\n dataSource.data = data;\n\n return dataSource instanceof HierarchicalDataSource ? dataSource : new HierarchicalDataSource(dataSource);\n };\n\n var Buffer = kendo.Observable.extend({\n init: function(dataSource, viewSize, disablePrefetch) {\n kendo.Observable.fn.init.call(this);\n\n this._prefetching = false;\n this.dataSource = dataSource;\n this.prefetch = !disablePrefetch;\n\n var buffer = this;\n\n dataSource.bind(\"change\", function() {\n buffer._change();\n });\n\n dataSource.bind(\"reset\", function() {\n buffer._reset();\n });\n\n this._syncWithDataSource();\n\n this.setViewSize(viewSize);\n },\n\n setViewSize: function(viewSize) {\n this.viewSize = viewSize;\n this._recalculate();\n },\n\n at: function(index) {\n var pageSize = this.pageSize,\n itemPresent = true;\n\n if (index >= this.total()) {\n this.trigger(\"endreached\", { index: index });\n return null;\n }\n\n if (!this.useRanges) {\n return this.dataSource.view()[index];\n }\n if (this.useRanges) {\n // out of range request\n if (index < this.dataOffset || index >= this.skip + pageSize) {\n itemPresent = this.range(Math.floor(index / pageSize) * pageSize);\n }\n\n // prefetch\n if (index === this.prefetchThreshold) {\n this._prefetch();\n }\n\n // mid-range jump - prefetchThreshold and nextPageThreshold may be equal, do not change to else if\n if (index === this.midPageThreshold) {\n this.range(this.nextMidRange, true);\n }\n // next range jump\n else if (index === this.nextPageThreshold) {\n this.range(this.nextFullRange);\n }\n // pull-back\n else if (index === this.pullBackThreshold) {\n if (this.offset === this.skip) { // from full range to mid range\n this.range(this.previousMidRange);\n } else { // from mid range to full range\n this.range(this.previousFullRange);\n }\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\n indexOf: function(item) {\n return this.dataSource.data().indexOf(item) + this.dataOffset;\n },\n\n total: function() {\n return parseInt(this.dataSource.total(), 10);\n },\n\n next: function() {\n var buffer = this,\n pageSize = buffer.pageSize,\n offset = buffer.skip - buffer.viewSize + pageSize,\n pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize;\n\n this.offset = offset;\n this.dataSource.prefetch(pageSkip, pageSize, function() {\n buffer._goToRange(offset, true);\n });\n },\n\n range: function(offset, nextRange) {\n if (this.offset === offset) {\n return true;\n }\n\n var buffer = this,\n pageSize = this.pageSize,\n pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize,\n dataSource = this.dataSource;\n\n if (nextRange) {\n pageSkip += pageSize;\n }\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\n return true;\n },\n\n syncDataSource: function() {\n var offset = this.offset;\n this.offset = null;\n this.range(offset);\n },\n\n destroy: function() {\n this.unbind();\n },\n\n _prefetch: function() {\n var buffer = this,\n pageSize = this.pageSize,\n prefetchOffset = this.skip + pageSize,\n dataSource = this.dataSource;\n\n if (!dataSource.inRange(prefetchOffset, pageSize) && !this._prefetching && this.prefetch) {\n this._prefetching = true;\n this.trigger(\"prefetching\", { skip: prefetchOffset, take: pageSize });\n\n dataSource.prefetch(prefetchOffset, pageSize, function() {\n buffer._prefetching = false;\n buffer.trigger(\"prefetched\", { skip: prefetchOffset, take: pageSize });\n });\n }\n },\n\n _goToRange: function(offset, expanding) {\n if (this.offset !== offset) {\n return;\n }\n\n this.dataOffset = offset;\n this._expanding = expanding;\n this.dataSource.range(offset, this.pageSize);\n this.dataSource.enableRequestsInProgress();\n },\n\n _reset: function() {\n this._syncPending = true;\n },\n\n _change: function() {\n var dataSource = this.dataSource;\n\n this.length = this.useRanges ? dataSource.lastRange().end : dataSource.view().length;\n\n if (this._syncPending) {\n this._syncWithDataSource();\n this._recalculate();\n this._syncPending = false;\n this.trigger(\"reset\", { offset: this.offset });\n }\n\n this.trigger(\"resize\");\n\n if (this._expanding) {\n this.trigger(\"expand\");\n }\n\n delete this._expanding;\n },\n\n _syncWithDataSource: function() {\n var dataSource = this.dataSource;\n\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\n _recalculate: function() {\n var pageSize = this.pageSize,\n offset = this.offset,\n viewSize = this.viewSize,\n skip = Math.ceil(offset / pageSize) * pageSize;\n\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\n this.nextMidRange = skip + pageSize - viewSize;\n this.nextFullRange = skip;\n this.previousMidRange = offset - viewSize;\n this.previousFullRange = skip - pageSize;\n }\n });\n\n var BatchBuffer = kendo.Observable.extend({\n init: function(dataSource, batchSize) {\n var batchBuffer = this;\n\n kendo.Observable.fn.init.call(batchBuffer);\n\n this.dataSource = dataSource;\n this.batchSize = batchSize;\n this._total = 0;\n\n this.buffer = new Buffer(dataSource, batchSize * 3);\n\n this.buffer.bind({\n \"endreached\": function(e) {\n batchBuffer.trigger(\"endreached\", { index: e.index });\n },\n \"prefetching\": function(e) {\n batchBuffer.trigger(\"prefetching\", { skip: e.skip, take: e.take });\n },\n \"prefetched\": function(e) {\n batchBuffer.trigger(\"prefetched\", { skip: e.skip, take: e.take });\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\", { total: batchBuffer.total(), offset: this.offset });\n }\n });\n },\n\n syncDataSource: function() {\n this.buffer.syncDataSource();\n },\n\n at: function(index) {\n var buffer = this.buffer,\n skip = index * this.batchSize,\n take = this.batchSize,\n view = [],\n item;\n\n if (buffer.offset > skip) {\n buffer.at(buffer.offset - 1);\n }\n\n for (var i = 0; i < take; i++) {\n item = buffer.at(skip + i);\n\n if (item === null) {\n break;\n }\n\n view.push(item);\n }\n\n return view;\n },\n\n total: function() {\n return this._total;\n },\n\n destroy: function() {\n this.buffer.destroy();\n this.unbind();\n }\n });\n\n extend(true, kendo.data, {\n readers: {\n json: DataReader\n },\n Query: Query,\n DataSource: DataSource,\n HierarchicalDataSource: HierarchicalDataSource,\n Node: Node,\n Comparer: Comparer,\n ObservableObject: ObservableObject,\n ObservableArray: ObservableArray,\n LazyObservableArray: LazyObservableArray,\n LocalTransport: LocalTransport,\n RemoteTransport: RemoteTransport,\n Cache: Cache,\n DataReader: DataReader,\n Model: Model,\n Buffer: Buffer,\n BatchBuffer: BatchBuffer\n });\n })(window.kendo.jQuery);\n\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: [ \"core\", \"data\" ]\n };\n\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n Observable = kendo.Observable,\n ObservableObject = kendo.data.ObservableObject,\n ObservableArray = kendo.data.ObservableArray,\n toString = {}.toString,\n binders = {},\n Class = kendo.Class,\n VALUE = \"value\",\n SOURCE = \"source\",\n EVENTS = \"events\",\n CHECKED = \"checked\",\n CSS = \"css\",\n deleteExpando = true,\n FUNCTION = \"function\",\n CHANGE = \"change\";\n\n (function() {\n var a = document.createElement(\"a\");\n\n try {\n delete a.test;\n } catch (e) {\n deleteExpando = false;\n }\n })();\n\n var Binding = Observable.extend( {\n init: function(parents, path) {\n var that = this;\n\n Observable.fn.init.call(that);\n\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\n that._access = function(e) {\n that.dependencies[e.field] = true;\n };\n\n if (that.observable) {\n that._change = function(e) {\n that.change(e);\n };\n\n that.source.bind(CHANGE, that._change);\n }\n },\n\n _parents: function() {\n var parents = this.parents;\n var value = this.get();\n\n if (value && typeof value.parent == \"function\") {\n var parent = value.parent();\n\n if ($.inArray(parent, parents) < 0) {\n parents = [parent].concat(parents);\n }\n }\n\n return parents;\n },\n\n change: function(e) {\n var dependency,\n ch,\n field = e.field,\n that = this;\n\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\n if (!ch || ch === \".\" || ch === \"[\") {\n that.trigger(CHANGE, e);\n break;\n }\n }\n }\n }\n },\n\n start: function(source) {\n source.bind(\"get\", this._access);\n },\n\n stop: function(source) {\n source.unbind(\"get\", this._access);\n },\n\n get: function() {\n\n var that = this,\n source = that.source,\n index = 0,\n path = that.path,\n result = source;\n\n if (!that.observable) {\n return result;\n }\n\n that.start(that.source);\n\n result = source.get(path);\n\n // Traverse the observable hierarchy if the binding is not resolved at the current level.\n while (result === undefined$1 && source) {\n\n source = that.parents[++index];\n\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n\n // second pass try to get the parent from the object hierarchy\n if (result === undefined$1) {\n source = that.source; //get the initial source\n\n while (result === undefined$1 && source) {\n source = source.parent();\n\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n }\n\n // If the result is a function - invoke it\n if (typeof result === \"function\") {\n index = path.lastIndexOf(\".\");\n\n // If the function is a member of a nested observable object make that nested observable the context (this) of the function\n if (index > 0) {\n source = source.get(path.substring(0, index));\n }\n\n // Invoke the function\n that.start(source);\n\n if (source !== that.source) {\n result = result.call(source, that.source);\n } else {\n result = result.call(source);\n }\n\n that.stop(source);\n }\n\n // If the binding is resolved by a parent object\n if (source && source !== that.source) {\n\n that.currentSource = source; // save parent object\n\n // Listen for changes in the parent object\n source.unbind(CHANGE, that._change)\n .bind(CHANGE, that._change);\n }\n\n that.stop(that.source);\n\n return result;\n },\n\n set: function(value) {\n var source = this.currentSource || this.source;\n\n var field = kendo.getter(this.path)(source);\n\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\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\n this.unbind();\n }\n });\n\n var EventBinding = Binding.extend( {\n get: function() {\n var source = this.source,\n path = this.path,\n index = 0,\n handler;\n\n handler = source.get(path);\n\n while (!handler && source) {\n source = this.parents[++index];\n\n if (source instanceof ObservableObject) {\n handler = source.get(path);\n }\n }\n\n if (!handler) {\n return;\n }\n\n return handler.bind(source);\n }\n });\n\n var TemplateBinding = Binding.extend( {\n init: function(source, path, template) {\n var that = this;\n\n Binding.fn.init.call(that, source, path);\n\n that.template = template;\n },\n\n render: function(value) {\n var html;\n\n this.start(this.source);\n\n html = kendo.render(this.template, value);\n\n this.stop(this.source);\n\n return html;\n }\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\n bind: function(binding, attribute) {\n var that = this;\n\n binding = attribute ? binding[attribute] : binding;\n\n binding.bind(CHANGE, function(e) {\n that.refresh(attribute || e);\n });\n\n that.refresh(attribute);\n },\n\n destroy: function() {\n }\n });\n\n var TypedBinder = Binder.extend({\n dataType: function() {\n var dataType = this.element.getAttribute(\"data-\" + kendo.ns + \"type\") || this.element.type || \"text\";\n return dataType.toLowerCase();\n },\n\n parsedValue: function() {\n return this._parseValue(this.element.value, this.dataType());\n },\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, [\"yyyy-MM-ddTHH:mm:ss\", \"yyyy-MM-ddTHH:mm\"] );\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\n binders.attr = Binder.extend({\n refresh: function(key) {\n this.element.setAttribute(key, this.bindings.attr[key].get());\n }\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),\n binding = this.bindings.css[className],\n hasClass = this.classes[className] = binding.get();\n if (hasClass) {\n element.addClass(className);\n } else {\n element.removeClass(className);\n }\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\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\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\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\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\n refresh: function(key) {\n var element = $(this.element),\n binding = this.bindings.events[key],\n handler = this.handlers[key];\n\n if (handler) {\n element.off(key, handler);\n }\n\n handler = this.handlers[key] = binding.get();\n\n element.on(key, binding.source, handler);\n },\n\n destroy: function() {\n var element = $(this.element),\n handler;\n\n for (handler in this.handlers) {\n element.off(handler, this.handlers[handler]);\n }\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-\" + kendo.ns + \"format\") || \"\";\n if (text == null) {\n text = \"\";\n }\n\n $(this.element).text(kendo.toString(text, dataFormat));\n }\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\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\n binders.html = Binder.extend({\n refresh: function() {\n this.element.innerHTML = this.bindings.html.get();\n }\n });\n\n binders.value = TypedBinder.extend({\n init: function(element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n\n this._change = this.change.bind(this);\n this.eventName = options.valueUpdate || CHANGE;\n\n $(this.element).on(this.eventName, this._change);\n\n this._initChange = false;\n },\n\n change: function() {\n this._initChange = this.eventName != CHANGE;\n\n this.bindings[VALUE].set(this.parsedValue());\n\n this._initChange = false;\n },\n\n refresh: function() {\n if (!this._initChange) {\n var value = this.bindings[VALUE].get();\n\n if (value == null) {\n value = \"\";\n }\n\n var type = this.dataType();\n\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\n this.element.value = value;\n }\n\n this._initChange = false;\n },\n\n destroy: function() {\n $(this.element).off(this.eventName, this._change);\n }\n });\n\n binders.source = Binder.extend({\n init: function(element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n\n var source = this.bindings.source.get();\n\n if (source instanceof kendo.data.DataSource && options.autoBind !== false) {\n source.fetch();\n }\n },\n\n refresh: function(e) {\n var that = this,\n source = that.bindings.source.get();\n\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n\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\n container: function() {\n var element = this.element;\n\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\n return element;\n },\n\n template: function() {\n var options = this.options,\n template = options.template,\n nodeName = this.container().nodeName.toLowerCase();\n\n if (!template) {\n if (nodeName == \"select\") {\n if (options.valueField || options.textField) {\n template = kendo.format('',\n 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\n return template;\n },\n\n add: function(index, items) {\n var element = this.container(),\n parents,\n idx,\n length,\n child,\n clone = element.cloneNode(false),\n reference = element.children[index];\n\n $(clone).html(kendo.render(this.template(), items));\n\n if (clone.children.length) {\n parents = this.bindings.source._parents();\n\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\n remove: function(index, items) {\n var idx, element = this.container();\n\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\n render: function() {\n var source = this.bindings.source.get(),\n parents,\n idx,\n length,\n element = this.container(),\n template = this.template();\n\n if (source == null) {\n return;\n }\n\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n\n if (!(source instanceof ObservableArray) && toString.call(source) !== \"[object Array]\") {\n source = [source];\n }\n\n if (this.bindings.template) {\n unbindElementChildren(element, true);\n\n $(element).html(this.bindings.template.render(source));\n\n if (element.children.length) {\n parents = this.bindings.source._parents();\n\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\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 = this.change.bind(this);\n\n $(this.element).change(this._change);\n },\n\n change: function() {\n var element = this.element;\n var value = this.value();\n\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\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\n refresh: function() {\n var value = this.bindings[CHECKED].get(),\n source = value,\n type = this.dataType(),\n element = this.element;\n\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\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\n value: function() {\n var element = this.element,\n value = element.value;\n\n if (element.type == \"checkbox\") {\n value = element.checked;\n }\n\n return value;\n },\n destroy: function() {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n\n binders.select = {\n source: binders.source.extend({\n refresh: function(e) {\n var that = this,\n source = that.bindings.source.get();\n\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$1) {\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\n this._change = this.change.bind(this);\n $(this.element).change(this._change);\n },\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\n if (option.selected) {\n value = option.attributes.value;\n\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n\n values.push(this._parseValue(value, dataType));\n }\n }\n return values;\n },\n\n change: function() {\n var values = [],\n element = this.element,\n source,\n field = this.options.valueField || this.options.textField,\n valuePrimitive = this.options.valuePrimitive,\n option,\n valueIndex,\n value,\n idx,\n length;\n\n for (idx = 0, length = element.options.length; idx < length; idx++) {\n option = element.options[idx];\n\n if (option.selected) {\n value = option.attributes.value;\n\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n\n if (field) {\n values.push(value);\n } else {\n values.push(this._parseValue(value, this.dataType()));\n }\n\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\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\n value = this.bindings[VALUE].get();\n if (value instanceof ObservableArray) {\n value.splice.apply(value, [0, value.length].concat(values));\n } else if (!valuePrimitive && (value instanceof ObservableObject || value === null || value === undefined$1 || !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,\n element = this.element,\n options = element.options,\n value = this.bindings[VALUE].get(),\n values = value,\n field = this.options.valueField || this.options.textField,\n found = false,\n type = this.dataType(),\n optionValue;\n\n if (!(values instanceof ObservableArray)) {\n values = new ObservableArray([value]);\n }\n\n element.selectedIndex = -1;\n\n for (var valueIndex = 0; valueIndex < values.length; valueIndex++) {\n value = values[valueIndex];\n\n\n if (field && value instanceof ObservableObject) {\n value = value.get(field);\n }\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\n for (optionIndex = 0; optionIndex < options.length; optionIndex++) {\n optionValue = options[optionIndex].value;\n\n if (optionValue === \"\" && value !== \"\") {\n optionValue = options[optionIndex].text;\n }\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\n function dataSourceBinding(bindingName, fieldName, setter) {\n return Binder.extend({\n init: function(widget, bindings, options) {\n var that = this;\n\n Binder.fn.init.call(that, widget.element[0], bindings, options);\n\n that.widget = widget;\n that._dataBinding = that.dataBinding.bind(that);\n that._dataBound = that.dataBound.bind(that);\n that._itemChange = that.itemChange.bind(that);\n },\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\n dataBinding: function(e) {\n var idx,\n length,\n widget = this.widget,\n items = e.removedItems || widget.items();\n\n for (idx = 0, length = items.length; idx < length; idx++) {\n unbindElementTree(items[idx], false);\n }\n },\n\n _ns: function(ns) {\n ns = ns || kendo.ui;\n var all = [ kendo.ui, kendo.dataviz.ui, kendo.mobile.ui ];\n all.splice($.inArray(ns, all), 1);\n all.unshift(ns);\n\n return kendo.rolesFromNamespaces(all);\n },\n\n dataBound: function(e) {\n var idx,\n length,\n widget = this.widget,\n items = e.addedItems || widget.items(),\n dataSource = widget[fieldName],\n view,\n parents,\n hds = kendo.data.HierarchicalDataSource;\n\n if (hds && dataSource instanceof hds) {\n // suppress binding of HDS items, because calling view() on root\n // will return only root items, and widget.items() returns all items\n return;\n }\n\n if (items.length) {\n view = e.addedDataItems || dataSource.flatView();\n parents = this.bindings[bindingName]._parents();\n\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\n refresh: function(e) {\n var that = this,\n source,\n widget = that.widget,\n select, multiselect, dropdowntree;\n\n e = e || {};\n\n if (!e.action) {\n that.destroy();\n\n widget.bind(\"dataBinding\", that._dataBinding);\n widget.bind(\"dataBound\", that._dataBound);\n widget.bind(\"itemChange\", that._itemChange);\n\n source = that.bindings[bindingName].get();\n\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\n if (!dropdowntree) {\n widget[fieldName].data(source);\n } else {\n widget.treeview[fieldName].data(source);\n }\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\n destroy: function() {\n var widget = this.widget;\n\n widget.unbind(\"dataBinding\", this._dataBinding);\n widget.unbind(\"dataBound\", this._dataBound);\n widget.unbind(\"itemChange\", this._itemChange);\n }\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\n refresh: function(key) {\n var binding = this.bindings.events[key],\n handler = this.handlers[key];\n\n if (handler) {\n this.widget.unbind(key, handler);\n }\n\n handler = binding.get();\n\n this.handlers[key] = function(e) {\n e.data = binding.source;\n\n handler(e);\n\n if (e.data === binding.source) {\n delete e.data;\n }\n };\n\n this.widget.bind(key, this.handlers[key]);\n },\n\n destroy: function() {\n var handler;\n\n for (handler in this.handlers) {\n this.widget.unbind(handler, this.handlers[handler]);\n }\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\n this.widget = widget;\n this._change = this.change.bind(this);\n this.widget.bind(CHANGE, this._change);\n },\n change: function() {\n this.bindings[CHECKED].set(this.value());\n },\n\n refresh: function() {\n if (this.element.type === \"radio\") {\n this.widget.check(this.bindings[CHECKED].get().toString() === this.value());\n } else {\n this.widget.check(this.bindings[CHECKED].get() === true);\n }\n },\n\n value: function() {\n var element = this.element,\n value = element.value;\n\n if (value == \"on\" || value == \"off\" || this.element.type == \"checkbox\") {\n value = element.checked;\n }\n\n return value;\n },\n\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n\n start: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this._change = this.change.bind(this);\n this.widget = widget;\n this.widget.bind(CHANGE, this._change);\n },\n\n change: function() {\n this.bindings.start.set(this.widget.range().start);\n },\n\n refresh: function() {\n var that = this;\n var start = this.bindings.start.get();\n var end = that.widget._range ? that.widget._range.end : null;\n this.widget.range({ start: start, end: end });\n },\n\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n\n end: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this._change = this.change.bind(this);\n this.widget = widget;\n this.widget.bind(CHANGE, this._change);\n },\n\n change: function() {\n this.bindings.end.set(this.widget.range().end);\n },\n\n refresh: function() {\n var that = this;\n var end = this.bindings.end.get();\n var start = that.widget._range ? that.widget._range.start : null;\n this.widget.range({ start: start, end: end });\n },\n\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n\n visible: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n },\n\n refresh: function() {\n var visible = this.bindings.visible.get();\n this.widget.wrapper[0].style.display = visible ? \"\" : \"none\";\n }\n }),\n\n invisible: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n },\n\n refresh: function() {\n var invisible = this.bindings.invisible.get();\n this.widget.wrapper[0].style.display = invisible ? \"none\" : \"\";\n }\n }),\n\n floatingLabel: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n if (!widget.floatingLabel) {\n return;\n }\n\n widget.floatingLabel.refresh();\n }\n }),\n\n enabled: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n },\n\n refresh: function() {\n if (this.widget.enable) {\n this.widget.enable(this.bindings.enabled.get());\n }\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\n this.widget = widget;\n },\n\n refresh: function() {\n if (this.widget.enable) {\n this.widget.enable(!this.bindings.disabled.get());\n }\n }\n }),\n\n source: dataSourceBinding(\"source\", \"dataSource\", \"setDataSource\"),\n\n value: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n this._change = this.change.bind(this);\n this.widget.first(CHANGE, this._change);\n\n var value = this.bindings.value.get();\n\n this._valueIsObservableObject = !options.valuePrimitive && (value == null || value instanceof ObservableObject);\n this._valueIsObservableArray = value instanceof ObservableArray;\n this._initChange = false;\n },\n\n _source: function() {\n var source;\n\n if (this.widget.dataItem) {\n source = this.widget.dataItem();\n if (source && source instanceof ObservableObject) {\n return [source];\n }\n }\n\n if (this.bindings.source) {\n source = this.bindings.source.get();\n }\n\n if (!source || source instanceof kendo.data.DataSource) {\n source = this.widget.dataSource.flatView();\n }\n\n return source;\n },\n\n change: function() {\n var value = this.widget.value(),\n field = this.options.dataValueField || this.options.dataTextField,\n isArray = toString.call(value) === \"[object Array]\",\n isObservableObject = this._valueIsObservableObject,\n valueIndex, valueLength, values = [],\n sourceItem, sourceValue,\n idx, length, source;\n\n this._initChange = true;\n\n if (field) {\n\n if (value === \"\" && (isObservableObject || this.options.valuePrimitive)) {\n value = null;\n } else {\n source = this._source();\n\n if (isArray) {\n valueLength = value.length;\n values = value.slice(0);\n }\n\n for (idx = 0, length = source.length; idx < length; idx++) {\n sourceItem = source[idx];\n sourceValue = sourceItem.get(field);\n\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\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\n this.bindings.value.set(value);\n this._initChange = false;\n },\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\n if (value === undefined$1) {\n value = null;\n }\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\n if (options.autoBind === false && !options.cascadeFrom && widget.listView && !widget.listView.bound()) {\n if (textField === valueField && !text) {\n text = value;\n }\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\n this._initChange = false;\n },\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\n this.widget = widget;\n this._change = this.change.bind(this);\n this.widget.first(CHANGE, this._change);\n this._initChange = false;\n },\n\n change: function() {\n var that = this,\n oldValues = that.bindings[VALUE].get(),\n valuePrimitive = that.options.valuePrimitive,\n selectedNode = that.widget.treeview.select(),\n nonPrimitiveValues = that.widget._isMultipleSelection() ? that.widget._getAllChecked() : (that.widget.treeview.dataItem(selectedNode) || that.widget.value()),\n newValues = (valuePrimitive || that.widget.options.autoBind === false) ? that.widget.value() : nonPrimitiveValues;\n\n var field = this.options.dataValueField || this.options.dataTextField;\n\n newValues = newValues.slice ? newValues.slice(0) : newValues;\n\n that._initChange = true;\n\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\n while (old !== undefined$1) {\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\n newValue = newValue.get ? newValue.get(field) : newValue;\n same = newValue == (old.get ? old.get(field) : old);\n }\n\n if (same) {\n newValues.splice(j, 1);\n newLength -= 1;\n found = true;\n break;\n }\n }\n\n if (!found) {\n remove.push(old);\n arraySplice(oldValues, i, 1);\n removeIndex = i;\n } else {\n i += 1;\n }\n\n old = oldValues[i];\n }\n\n arraySplice(oldValues, oldValues.length, 0, newValues);\n\n if (remove.length) {\n oldValues.trigger(\"change\", {\n action: \"remove\",\n items: remove,\n index: removeIndex\n });\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\n that._initChange = false;\n },\n\n refresh: function() {\n if (!this._initChange) {\n var options = this.options,\n widget = this.widget,\n field = options.dataValueField || options.dataTextField,\n value = this.bindings.value.get(),\n data = value,\n idx = 0, length,\n values = [],\n selectedValue;\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) {\n widget._preselect(data, value);\n } else {\n widget.value(value);\n }\n }\n },\n\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\n })\n },\n gantt: {\n dependencies: dataSourceBinding(\"dependencies\", \"dependencies\", \"setDependenciesDataSource\")\n },\n\n multiselect: {\n value: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n this._change = this.change.bind(this);\n this.widget.first(CHANGE, this._change);\n this._initChange = false;\n },\n\n change: function() {\n var that = this,\n oldValues = that.bindings[VALUE].get(),\n valuePrimitive = that.options.valuePrimitive,\n newValues = valuePrimitive ? that.widget.value() : that.widget.dataItems();\n\n var field = this.options.dataValueField || this.options.dataTextField;\n\n newValues = newValues.slice(0);\n\n that._initChange = true;\n\n if (oldValues instanceof ObservableArray) {\n var remove = [];\n\n var newLength = newValues.length;\n\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\n while (old !== undefined$1) {\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\n newValue = newValue.get ? newValue.get(field) : newValue;\n same = newValue == (old.get ? old.get(field) : old);\n }\n\n if (same) {\n newValues.splice(j, 1);\n newLength -= 1;\n found = true;\n break;\n }\n }\n\n if (!found) {\n remove.push(old);\n arraySplice(oldValues, i, 1);\n removeIndex = i;\n } else {\n i += 1;\n }\n\n old = oldValues[i];\n }\n\n arraySplice(oldValues, oldValues.length, 0, newValues);\n\n if (remove.length) {\n oldValues.trigger(\"change\", {\n action: \"remove\",\n items: remove,\n index: removeIndex\n });\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\n that._initChange = false;\n },\n\n refresh: function() {\n if (!this._initChange) {\n var options = this.options,\n widget = this.widget,\n field = options.dataValueField || options.dataTextField,\n value = this.bindings.value.get(),\n data = value,\n idx = 0, length,\n values = [],\n selectedValue;\n\n if (value === undefined$1) {\n value = null;\n }\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\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\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\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\n if (elements.length) {\n data = e.addedDataItems || widget.dataItems();\n parents = this.bindings.source._parents();\n\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 grid: {\n source: dataSourceBinding(\"source\", \"dataSource\", \"setDataSource\").extend({\n dataBound: function(e) {\n var idx,\n length,\n widget = this.widget,\n elements = e.addedItems || widget.items(),\n parents,\n data;\n\n if (elements.length) {\n data = e.addedDataItems || widget.dataItems();\n parents = this.bindings.source._parents();\n\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 badge: {\n text: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n },\n refresh: function() {\n var text = this.bindings.text.get();\n\n if (text == null) {\n text = \"\";\n }\n this.widget.text(text);\n }\n })\n }\n };\n\n var arraySplice = function(arr, idx, remove, add) {\n add = add || [];\n remove = remove || 0;\n\n var addLength = add.length;\n var oldLength = arr.length;\n\n var shifted = [].slice.call(arr, idx + remove);\n var shiftedLength = shifted.length;\n var index;\n\n if (addLength) {\n addLength = idx + addLength;\n index = 0;\n\n for (; idx < addLength; idx++) {\n arr[idx] = add[index];\n index++;\n }\n\n arr.length = addLength;\n } else if (remove) {\n arr.length = idx;\n\n remove += idx;\n while (idx < remove) {\n delete arr[--remove];\n }\n }\n\n if (shiftedLength) {\n shiftedLength = idx + shiftedLength;\n index = 0;\n\n for (; idx < shiftedLength; idx++) {\n arr[idx] = shifted[index];\n index++;\n }\n\n arr.length = shiftedLength;\n }\n\n idx = arr.length;\n\n while (idx < oldLength) {\n delete arr[idx];\n idx++;\n }\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\n bind: function(bindings) {\n var key,\n hasValue,\n hasSource,\n hasEvents,\n hasChecked,\n hasCss,\n widgetBinding = this instanceof WidgetBindingTarget,\n specificBinders = this.binders();\n\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\n if (hasValue) {\n this.applyBinding(VALUE, bindings, specificBinders);\n }\n\n if (hasChecked) {\n this.applyBinding(CHECKED, bindings, specificBinders);\n }\n\n if (hasEvents && !widgetBinding) {\n this.applyBinding(EVENTS, bindings, specificBinders);\n }\n\n if (hasCss && !widgetBinding) {\n this.applyBinding(CSS, bindings, specificBinders);\n }\n\n if (widgetBinding && this.target && this.target.floatingLabel) {\n this.applyBinding(\"floatingLabel\", bindings, specificBinders);\n }\n },\n\n binders: function() {\n return binders[this.target.nodeName.toLowerCase()] || {};\n },\n\n applyBinding: function(name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders[name],\n toDestroy = this.toDestroy,\n attribute,\n binding = bindings[name];\n\n if (binder) {\n binder = new binder(this.target, bindings, this.options);\n\n toDestroy.push(binder);\n\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\n destroy: function() {\n var idx,\n length,\n toDestroy = this.toDestroy;\n\n for (idx = 0, length = toDestroy.length; idx < length; idx++) {\n toDestroy[idx].destroy();\n }\n }\n });\n\n var WidgetBindingTarget = BindingTarget.extend( {\n binders: function() {\n return binders.widget[this.target.options.name.toLowerCase()] || {};\n },\n\n applyBinding: function(name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders.widget[name],\n toDestroy = this.toDestroy,\n attribute,\n binding = bindings[name];\n\n if (binder) {\n binder = new binder(this.target, bindings, this.target.options);\n\n toDestroy.push(binder);\n\n\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\n function bindingTargetForRole(element, roles) {\n var widget = kendo.initWidget(element, {}, roles);\n\n if (widget) {\n return new WidgetBindingTarget(widget);\n }\n }\n\n var keyValueRegExp = /[A-Za-z0-9_\\-]+:(\\{([^}]*)\\}|[^,}]+)/g,\n whiteSpaceRegExp = /\\s/g;\n\n function parseBindings(bind) {\n var result = {},\n idx,\n length,\n token,\n colonIndex,\n key,\n value,\n tokens;\n\n tokens = bind.match(keyValueRegExp);\n\n for (idx = 0, length = tokens.length; idx < length; idx++) {\n token = tokens[idx];\n colonIndex = token.indexOf(\":\");\n\n key = token.substring(0, colonIndex);\n value = token.substring(colonIndex + 1);\n\n if (value.charAt(0) == \"{\") {\n value = parseBindings(value);\n }\n\n result[key] = value;\n }\n\n return result;\n }\n\n function createBindings(bindings, source, type) {\n var binding,\n result = {};\n\n for (binding in bindings) {\n result[binding] = new type(source, bindings[binding]);\n }\n\n return result;\n }\n\n function bindElement(element, source, roles, parents) {\n\n if (!element || element.getAttribute(\"data-\" + kendo.ns + \"stop\")) {\n return;\n }\n\n var role = element.getAttribute(\"data-\" + kendo.ns + \"role\"),\n idx,\n bind = element.getAttribute(\"data-\" + kendo.ns + \"bind\"),\n childrenCopy = [],\n deep = true,\n bindings,\n options = {},\n target;\n\n parents = parents || [source];\n\n if (role || bind) {\n unbindElement(element, false);\n }\n\n if (role) {\n target = bindingTargetForRole(element, roles);\n }\n\n if (bind) {\n bind = parseBindings(bind.replace(whiteSpaceRegExp, \"\"));\n\n if (!target) {\n options = kendo.parseOptions(element, { textField: \"\", valueField: \"\", template: \"\", valueUpdate: CHANGE, valuePrimitive: false, autoBind: true }, source);\n options.roles = roles;\n target = new BindingTarget(element, options);\n }\n\n target.source = source;\n\n bindings = createBindings(bind, parents, Binding);\n\n if (options.template) {\n bindings.template = new TemplateBinding(parents, \"\", options.template);\n }\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\n if (bindings.source) {\n deep = false;\n }\n\n if (bind.attr) {\n bindings.attr = createBindings(bind.attr, parents, Binding);\n }\n\n if (bind.style) {\n bindings.style = createBindings(bind.style, parents, Binding);\n }\n\n if (bind.events) {\n bindings.events = createBindings(bind.events, parents, EventBinding);\n }\n\n if (bind.css) {\n bindings.css = createBindings(bind.css, parents, Binding);\n }\n\n target.bind(bindings);\n }\n\n if (target) {\n element.kendoBindingTarget = target;\n }\n\n var children = element.children;\n if (deep && children && !element.getAttribute(\"data-\" + kendo.ns + \"stop\")) {\n // https://github.com/telerik/kendo/issues/1240 for the weirdness.\n for (idx = 0; idx < children.length; idx++) {\n childrenCopy[idx] = children[idx];\n }\n\n for (idx = 0; idx < childrenCopy.length; idx++) {\n bindElement(childrenCopy[idx], source, roles, parents);\n }\n }\n }\n\n function bind(dom, object) {\n var idx,\n length,\n node,\n roles = kendo.rolesFromNamespaces([].slice.call(arguments, 2));\n\n object = kendo.observable(object);\n dom = $(dom);\n\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\n function unbindElement(element, destroyWidget) {\n var bindingTarget = element.kendoBindingTarget;\n\n if (bindingTarget) {\n bindingTarget.destroy();\n\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\n if (destroyWidget) {\n var widget = kendo.widgetInstance($(element));\n if (widget && typeof widget.destroy === FUNCTION) {\n widget.destroy();\n }\n }\n }\n\n function unbindElementTree(element, destroyWidgets) {\n unbindElement(element, destroyWidgets);\n\n unbindElementChildren(element, destroyWidgets);\n }\n\n function unbindElementChildren(element, destroyWidgets) {\n var children = element.children;\n\n if (children) {\n for (var idx = 0, length = children.length; idx < length; idx++) {\n unbindElementTree(children[idx], destroyWidgets);\n }\n }\n }\n\n function unbind(dom) {\n var idx, length;\n\n dom = $(dom);\n\n for (idx = 0, length = dom.length; idx < length; idx++ ) {\n unbindElementTree(dom[idx], false);\n }\n }\n\n function notify(widget, namespace) {\n var element = widget.element,\n bindingTarget = element[0].kendoBindingTarget;\n\n if (bindingTarget) {\n bind(element, bindingTarget.source, namespace);\n }\n }\n\n function retrievePrimitiveValues(value, valueField) {\n var values = [];\n var idx = 0;\n var length;\n var item;\n\n if (!valueField) {\n return value;\n }\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\n return value;\n }\n\n kendo.unbind = unbind;\n kendo.bind = bind;\n kendo.data.binders = binders;\n kendo.data.Binder = Binder;\n kendo.notify = notify;\n\n kendo.observable = function(object) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n\n return object;\n };\n\n kendo.observableHierarchy = function(array) {\n var dataSource = kendo.data.HierarchicalDataSource.create(array);\n\n function recursiveRead(data) {\n var i, children;\n\n for (i = 0; i < data.length; i++) {\n data[i]._initChildren();\n\n children = data[i].children;\n\n children.fetch();\n\n data[i].items = children.data();\n\n recursiveRead(data[i].items);\n }\n }\n\n dataSource.fetch();\n\n recursiveRead(dataSource.data());\n\n dataSource._data._dataSource = dataSource;\n\n return dataSource._data;\n };\n\n })(window.kendo.jQuery);\n\n var __meta__$Z = {\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: [ \"core\", \"binder\", \"fx\" ],\n hidden: false\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n attr = kendo.attr,\n ui = kendo.ui,\n attrValue = kendo.attrValue,\n directiveSelector = kendo.directiveSelector,\n Observable = kendo.Observable,\n Widget = kendo.ui.Widget,\n roleSelector = kendo.roleSelector,\n\n SCRIPT = \"SCRIPT\",\n INIT = \"init\",\n TRANSITION_START = \"transitionStart\",\n TRANSITION_END = \"transitionEnd\",\n SHOW = \"show\",\n HIDE = \"hide\",\n ATTACH = \"attach\",\n DETACH = \"detach\",\n sizzleErrorRegExp = /unrecognized expression/;\n\n var bodyRegExp = /]*>(([\\u000a\\u000d\\u2028\\u2029]|.)*)<\\/body>/i;\n var LOAD_START = \"loadStart\";\n var LOAD_COMPLETE = \"loadComplete\";\n var SHOW_START = \"showStart\";\n var SAME_VIEW_REQUESTED = \"sameViewRequested\";\n var VIEW_SHOW = \"viewShow\";\n var VIEW_TYPE_DETERMINED = \"viewTypeDetermined\";\n var AFTER = \"after\";\n var classNames = {\n content: \"k-content\",\n view: \"k-view\",\n stretchedView: \"k-stretched-view\",\n widget: \"k-widget\",\n header: \"k-header\",\n footer: \"k-footer\"\n };\n\n var View = kendo.ui.Widget.extend({\n init: function(content, options) {\n var that = this;\n options = options || {};\n that.id = kendo.guid();\n\n Observable.fn.init.call(that);\n this.options = $.extend({}, this.options, options);\n\n that.content = content;\n\n if (that.options.renderOnInit) {\n Widget.fn.init.call(that, that._createElement(), options);\n }\n\n if (that.options.wrapInSections) {\n that._renderSections();\n }\n\n that.tagName = options.tagName || \"div\";\n that.model = options.model;\n that._wrap = options.wrap !== false;\n this._evalTemplate = options.evalTemplate || false;\n this._useWithBlock = options.useWithBlock;\n that._fragments = {};\n\n that.bind([ INIT, SHOW, HIDE, TRANSITION_START, TRANSITION_END ], options);\n },\n\n options: {\n name: \"View\",\n renderOnInit: false,\n wrapInSections: false,\n detachOnHide: true,\n detachOnDestroy: true\n },\n\n render: function(container) {\n var that = this,\n notInitialized = !that.element;\n\n // The order below matters - kendo.bind should happen when the element is in the DOM, and show should be triggered after init.\n\n if (notInitialized) {\n that.element = that._createElement();\n }\n\n if (container) {\n $(container).append(that.element);\n }\n\n if (notInitialized) {\n kendo.bind(that.element, that.model);\n that.trigger(INIT);\n }\n\n if (container) {\n that._eachFragment(ATTACH);\n that.trigger(SHOW);\n }\n\n return that.element;\n },\n\n clone: function() {\n return new ViewClone(this);\n },\n\n triggerBeforeShow: function() {\n return true;\n },\n\n triggerBeforeHide: function() {\n return true;\n },\n\n showStart: function() {\n var that = this;\n var element = that.render();\n\n if (element) {\n element.css(\"display\", \"\");\n }\n\n this.trigger(SHOW_START, { view: this });\n },\n\n showEnd: function() {\n },\n\n hideEnd: function() {\n this.hide();\n },\n\n beforeTransition: function(type) {\n this.trigger(TRANSITION_START, { type: type });\n },\n\n afterTransition: function(type) {\n this.trigger(TRANSITION_END, { type: type });\n },\n\n hide: function() {\n if (this.options.detachOnHide) {\n this._eachFragment(DETACH);\n $(this.element).detach();\n }\n\n this.trigger(HIDE);\n },\n\n destroy: function() {\n var that = this;\n var element = that.element;\n\n if (element) {\n Widget.fn.destroy.call(that);\n\n kendo.unbind(element);\n kendo.destroy(element);\n\n if (that.options.detachOnDestroy) {\n element.remove();\n }\n }\n },\n\n // ported from mobile view\n purge: function() {\n var that = this;\n\n that.destroy();\n $(that.element).add(that.content).add(that.wrapper).off().remove();\n },\n\n fragments: function(fragments) {\n $.extend(this._fragments, fragments);\n },\n\n _eachFragment: function(methodName) {\n for (var placeholder in this._fragments) {\n this._fragments[placeholder][methodName](this, placeholder);\n }\n },\n\n _createElement: function() {\n var that = this,\n wrapper = \"<\" + that.tagName + \">\",\n element,\n content;\n\n try {\n content = $(document.getElementById(that.content) || that.content); // support passing id without #\n\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\n if (typeof content === \"string\") {\n content = content.replace(/^\\s+|\\s+$/g, '');\n if (that._evalTemplate) {\n content = kendo.template(content, { useWithBlock: that._useWithBlock })(that.model || {});\n }\n\n element = $(wrapper).append(content);\n // drop the wrapper if asked - this seems like the easiest (although not very intuitive) way to avoid messing up templates with questionable content, like this one for instance:\n // \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(), { useWithBlock: that._useWithBlock })(that.model || {}));\n\n // template uses DOM\n if ($.contains(document, element[0])) {\n element.replaceWith(result);\n }\n\n element = result;\n }\n if (that._wrap) {\n element = element.wrapAll(wrapper).parent();\n }\n }\n\n return element;\n },\n\n _renderSections: function() {\n var that = this;\n\n if (that.options.wrapInSections) {\n that._wrapper();\n that._createContent();\n that._createHeader();\n that._createFooter();\n }\n },\n\n _wrapper: function() {\n var that = this;\n var content = that.content;\n\n if (content.is(roleSelector(\"view\"))) {\n that.wrapper = that.content;\n } else {\n that.wrapper = content\n .wrap('
    ')\n .parent();\n }\n\n var wrapper = that.wrapper;\n\n wrapper.attr(\"id\", that.id);\n\n wrapper.addClass(classNames.view);\n wrapper.addClass(classNames.widget);\n wrapper.attr(\"role\", \"view\");\n },\n\n _createContent: function() {\n var that = this;\n var wrapper = $(that.wrapper);\n var contentSelector = roleSelector(\"content\");\n\n if (!wrapper.children(contentSelector)[0]) {\n var ccontentElements = wrapper.children().filter(function() {\n var child = $(this);\n if (!child.is(roleSelector(\"header\")) && !child.is(roleSelector(\"footer\"))) {\n return child;\n }\n });\n\n ccontentElements.wrap(\"
    ');\n }\n\n // use contentElement instead of content as view.content can be a string\n this.contentElement = wrapper.children(roleSelector(\"content\"));\n\n this.contentElement\n .addClass(classNames.stretchedView)\n .addClass(classNames.content);\n },\n\n _createHeader: function() {\n var that = this;\n var wrapper = that.wrapper;\n\n this.header = wrapper.children(roleSelector(\"header\")).addClass(classNames.header);\n },\n\n _createFooter: function() {\n var that = this;\n var wrapper = that.wrapper;\n\n this.footer = wrapper.children(roleSelector(\"footer\")).addClass(classNames.footer);\n }\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\n view.element.parent().append(this.element);\n },\n\n hideEnd: function() {\n this.element.remove();\n },\n\n beforeTransition: $.noop,\n afterTransition: $.noop\n });\n\n var Layout = View.extend({\n init: function(content, options) {\n View.fn.init.call(this, content, options);\n this.containers = {};\n },\n\n container: function(selector) {\n var container = this.containers[selector];\n\n if (!container) {\n container = this._createContainer(selector);\n this.containers[selector] = container;\n }\n\n return container;\n },\n\n showIn: function(selector, view, transition) {\n this.container(selector).show(view, transition);\n },\n\n _createContainer: function(selector) {\n var root = this.render(),\n element = root.find(selector),\n container;\n\n if (!element.length && root.is(selector)) {\n if (root.is(selector)) {\n element = root;\n } else {\n\n throw new Error(\"can't find a container with the specified \" + selector + \" selector\");\n }\n }\n\n container = new ViewContainer(element);\n\n container.bind(\"accepted\", function(e) {\n e.view.render(element);\n });\n\n return container;\n }\n });\n\n var Fragment = View.extend({\n attach: function(view, placeholder) {\n view.element.find(placeholder).replaceWith(this.render());\n },\n\n detach: function() {\n }\n });\n\n var transitionRegExp = /^(\\w+)(:(\\w+))?( (\\w+))?$/;\n\n function parseTransition(transition) {\n if (!transition) {\n return {};\n }\n\n var matches = transition.match(transitionRegExp) || [];\n\n return {\n type: matches[1],\n direction: matches[3],\n reverse: matches[5] === \"reverse\"\n };\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\n after: function() {\n this.running = false;\n this.trigger(\"complete\", { view: this.view });\n this.trigger(\"after\");\n },\n\n end: function() {\n this.view.showEnd();\n this.previous.hideEnd();\n this.after();\n },\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\n locationID = locationID || view.id;\n\n var that = this,\n current = (view === that.view) ? view.clone() : that.view,\n history = that.history,\n previousEntry = history[history.length - 2] || {},\n back = previousEntry.id === locationID,\n // If explicit transition is set, it will be with highest priority\n // Next we will try using the history record transition or the view transition configuration\n theTransition = transition || ( back ? history[history.length - 1].transition : view.transition ),\n transitionData = parseTransition(theTransition);\n\n if (that.running) {\n that.effect.stop();\n }\n\n if (theTransition === \"none\") {\n theTransition = null;\n }\n\n that.trigger(\"accepted\", { view: view });\n that.view = view;\n that.previous = current;\n that.running = true;\n\n if (!back) {\n history.push({ id: locationID, transition: theTransition });\n } else {\n history.pop();\n }\n\n if (!current) {\n view.showStart();\n view.showEnd();\n that.after();\n return true;\n }\n\n if (!theTransition || !kendo.effects.enabled) {\n view.showStart();\n that.end();\n } else {\n // hide the view element before init/show - prevents blinks on iPad\n // the replace effect will remove this class\n view.element.addClass(\"k-fx-hidden\");\n view.showStart();\n // do not reverse the explicit transition\n if (back && !transition) {\n transitionData.reverse = !transitionData.reverse;\n }\n\n that.effect = kendo.fx(view.element).replace(current.element, transitionData.type)\n .beforeTransition(function() {\n view.beforeTransition(\"show\");\n current.beforeTransition(\"hide\");\n })\n .afterTransition(function() {\n view.afterTransition(\"show\");\n current.afterTransition(\"hide\");\n })\n .direction(transitionData.direction)\n .setReverse(transitionData.reverse);\n\n that.effect.run().then(function() { that.end(); });\n }\n\n return true;\n },\n\n destroy: function() {\n var that = this;\n var view = that.view;\n\n if (view && view.destroy) {\n view.destroy();\n }\n }\n });\n\n var ViewEngine = Observable.extend({\n init: function(options) {\n var that = this,\n views,\n container;\n\n Observable.fn.init.call(that);\n that.options = options;\n\n $.extend(that, options);\n that.sandbox = $(\"
    \");\n container = that.container;\n\n views = that._hideViews(container);\n that.rootView = views.first();\n that.layouts = {};\n\n that.viewContainer = new kendo.ViewContainer(that.container);\n\n that.viewContainer.bind(\"accepted\", function(e) {\n e.view.params = that.params;\n });\n\n that.viewContainer.bind(\"complete\", function(e) {\n that.trigger(VIEW_SHOW, { view: e.view });\n });\n\n that.viewContainer.bind(AFTER, function() {\n that.trigger(AFTER);\n });\n\n this.bind(this.events, options);\n },\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\n destroy: function() {\n var that = this;\n var viewContainer = that.viewContainer;\n\n kendo.destroy(that.container);\n\n for (var id in that.layouts) {\n this.layouts[id].destroy();\n }\n\n if (viewContainer) {\n viewContainer.destroy();\n }\n },\n\n view: function() {\n return this.viewContainer.view;\n },\n\n showView: function(url, transition, params) {\n url = url.replace(new RegExp(\"^\" + this.remoteViewURLPrefix), \"\");\n if (url === \"\" && this.remoteViewURLPrefix) {\n url = \"/\";\n }\n\n if (url.replace(/^#/, \"\") === this.url) {\n this.trigger(SAME_VIEW_REQUESTED);\n return false;\n }\n\n this.trigger(SHOW_START);\n\n var that = this,\n element = that._findViewElement(url),\n view = kendo.widgetInstance(element);\n\n that.url = url.replace(/^#/, \"\");\n\n that.params = params;\n\n if (view && view.reload) {\n view.purge();\n element = [];\n }\n\n this.trigger(VIEW_TYPE_DETERMINED, { remote: element.length === 0, url: url });\n\n if (element[0]) {\n if (!view) {\n view = that._createView(element);\n }\n\n return that.viewContainer.show(view, transition, url);\n } else {\n return true;\n }\n },\n\n append: function(html, url) {\n var sandbox = this.sandbox,\n urlPath = (url || \"\").split(\"?\")[0],\n container = this.container,\n views,\n view;\n\n if (bodyRegExp.test(html)) {\n html = RegExp.$1;\n }\n\n sandbox[0].innerHTML = html;\n\n container.append(sandbox.children(\"script, style\"));\n\n views = this._hideViews(sandbox);\n view = views.first();\n\n // Generic HTML content found as remote view - no remote view markers\n if (!view.length) {\n views = view = sandbox.wrapInner(\"
    \").children(); // one element\n }\n\n if (urlPath) {\n view.hide().attr(attr(\"url\"), urlPath);\n }\n\n container.append(views);\n\n return this._createView(view);\n },\n\n _locate: function(selectors) {\n return this.$angular ? directiveSelector(selectors) : roleSelector(selectors);\n },\n\n _findViewElement: function(url) {\n var element,\n urlPath = url.split(\"?\")[0];\n\n if (!urlPath) {\n return this.rootView;\n }\n\n element = this.container.children(\"[\" + attr(\"url\") + \"='\" + urlPath + \"']\");\n\n // do not try to search for \"#/foo/bar\" id, jQuery throws error\n if (!element[0] && urlPath.indexOf(\"/\") === -1) {\n element = this.container.children(urlPath.charAt(0) === \"#\" ? urlPath : \"#\" + urlPath);\n }\n\n if (!element[0]) {\n element = this._findViewElementById(url);\n }\n\n return element;\n },\n\n _findViewElementById: function(id) {\n var element = this.container.children(\"[id='\" + id + \"']\");\n return element;\n },\n\n _createView: function(element) {\n //return this._createMobileView(element);\n return this._createSpaView(element);\n },\n\n _createMobileView: function(element) {\n return kendo.initWidget(element, {\n defaultTransition: this.transition,\n loader: this.loader,\n container: this.container,\n getLayout: this.getLayoutProxy,\n modelScope: this.modelScope,\n reload: attrValue(element, \"reload\")\n }, ui.roles);\n },\n\n _createSpaView: function(element) {\n var viewOptions = (this.options || {}).viewOptions || {};\n return new kendo.View(element, {\n renderOnInit: viewOptions.renderOnInit,\n wrap: viewOptions.wrap || false,\n wrapInSections: viewOptions.wrapInSections,\n detachOnHide: viewOptions.detachOnHide,\n detachOnDestroy: viewOptions.detachOnDestroy\n });\n },\n\n _hideViews: function(container) {\n return container.children(this._locate(\"view\")).hide();\n }\n });\n\n kendo.ViewEngine = ViewEngine;\n\n kendo.ViewContainer = ViewContainer;\n kendo.Fragment = Fragment;\n kendo.Layout = Layout;\n kendo.View = View;\n kendo.ViewClone = ViewClone;\n\n })(window.kendo.jQuery);\n\n var __meta__$Y = {\n id: \"data.signalr\",\n name: \"SignalR\",\n category: \"framework\",\n depends: [ \"data\" ],\n hidden: true\n };\n\n (function($) {\n var kendo = window.kendo;\n var isFunction = kendo.isFunction;\n\n function isJQueryPromise(promise) {\n return promise && isFunction(promise.done) && isFunction(promise.fail);\n }\n\n function isNativePromise(promise) {\n return promise && isFunction(promise.then) && isFunction(promise.catch);\n }\n\n var transport = kendo.data.RemoteTransport.extend({\n init: function(options) {\n var signalr = options && options.signalr ? options.signalr : {};\n\n var promise = signalr.promise;\n\n if (!promise) {\n throw new Error('The \"promise\" option must be set.');\n }\n\n if (!isJQueryPromise(promise) && !isNativePromise(promise)) {\n throw new Error('The \"promise\" option must be a Promise.');\n }\n\n this.promise = promise;\n\n var hub = signalr.hub;\n\n if (!hub) {\n throw new Error('The \"hub\" option must be set.');\n }\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\n this.hub = hub;\n\n kendo.data.RemoteTransport.fn.init.call(this, options);\n },\n\n push: function(callbacks) {\n var client = this.options.signalr.client || {};\n\n if (client.create) {\n this.hub.on(client.create, callbacks.pushCreate);\n }\n\n if (client.update) {\n this.hub.on(client.update, callbacks.pushUpdate);\n }\n\n if (client.destroy) {\n this.hub.on(client.destroy, callbacks.pushDestroy);\n }\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\n if (!server || !server[type]) {\n throw new Error(kendo.format('The \"server.{0}\" option must be set.', type));\n }\n\n var args = [server[type]];\n\n var data = this.parameterMap(options.data, type);\n\n if (!$.isEmptyObject(data)) {\n args.push(data);\n }\n\n if (isJQueryPromise(promise)) {\n promise.done(function() {\n hub.invoke.apply(hub, args)\n .done(options.success)\n .fail(options.error);\n });\n } else if (isNativePromise(promise)) {\n promise.then(function() {\n hub.invoke.apply(hub, args)\n .then(options.success)\n .catch(options.error);\n });\n }\n },\n\n read: function(options) {\n this._crud(options, \"read\");\n },\n\n create: function(options) {\n this._crud(options, \"create\");\n },\n\n update: function(options) {\n this._crud(options, \"update\");\n },\n\n destroy: function(options) {\n this._crud(options, \"destroy\");\n }\n });\n\n $.extend(true, kendo.data, {\n transports: {\n signalr: transport\n }\n });\n\n })(window.kendo.jQuery);\n\n var __meta__$X = {\n id: \"userevents\",\n name: \"User Events\",\n category: \"framework\",\n depends: [ \"core\" ],\n hidden: true\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n support = kendo.support,\n Class = kendo.Class,\n Observable = kendo.Observable,\n now = Date.now,\n extend = $.extend,\n OS = support.mobileOS,\n invalidZeroEvents = OS && OS.android,\n DEFAULT_MIN_HOLD = 800,\n CLICK_DELAY = 300,\n DEFAULT_THRESHOLD = support.browser.msie ? 5 : 0, // WP8 and W8 are very sensitive and always report move.\n\n // UserEvents events\n PRESS = \"press\",\n HOLD = \"hold\",\n SELECT = \"select\",\n START = \"start\",\n MOVE = \"move\",\n END = \"end\",\n CANCEL = \"cancel\",\n TAP = \"tap\",\n DOUBLETAP = \"doubleTap\",\n RELEASE = \"release\",\n GESTURESTART = \"gesturestart\",\n GESTURECHANGE = \"gesturechange\",\n GESTUREEND = \"gestureend\",\n GESTURETAP = \"gesturetap\";\n\n var THRESHOLD = {\n \"api\": 0,\n \"touch\": 0,\n \"mouse\": 9,\n \"pointer\": 9\n };\n\n var ENABLE_GLOBAL_SURFACE = (!support.touch || support.mouseAndTouchPresent);\n\n function touchDelta(touch1, touch2) {\n var x1 = touch1.x.location,\n y1 = touch1.y.location,\n x2 = touch2.x.location,\n y2 = touch2.y.location,\n dx = x1 - x2,\n dy = y1 - y2;\n\n return {\n center: {\n x: (x1 + x2) / 2,\n y: (y1 + y2) / 2\n },\n\n distance: Math.sqrt(dx * dx + dy * dy)\n };\n }\n\n function getTouches(e) {\n var touches = [],\n originalEvent = e.originalEvent,\n currentTarget = e.currentTarget,\n idx = 0, length,\n changedTouches,\n touch;\n\n if (e.api) {\n touches.push({\n id: 2, // hardcoded ID for API call;\n event: e,\n target: e.target,\n currentTarget: e.target,\n location: e,\n type: \"api\"\n });\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 }\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, // hardcoded ID for mouse event;\n event: e,\n target: e.target,\n currentTarget: currentTarget,\n location: e,\n type: \"mouse\"\n });\n }\n\n return touches;\n }\n\n var TouchAxis = Class.extend({\n init: function(axis, location) {\n var that = this;\n\n that.axis = axis;\n\n that._updateLocationData(location);\n\n that.startLocation = that.location;\n that.velocity = that.delta = 0;\n that.timeStamp = now();\n },\n\n move: function(location) {\n var that = this,\n offset = location[\"page\" + that.axis],\n timeStamp = now(),\n timeDelta = (timeStamp - that.timeStamp) || 1; // Firing manually events in tests can make this 0;\n\n if (!offset && invalidZeroEvents) {\n return;\n }\n\n that.delta = offset - that.location;\n\n that._updateLocationData(location);\n\n that.initialDelta = offset - that.startLocation;\n that.velocity = that.delta / timeDelta;\n that.timeStamp = timeStamp;\n },\n\n _updateLocationData: function(location) {\n var that = this, axis = that.axis;\n\n that.location = location[\"page\" + axis];\n that.client = location[\"client\" + axis];\n that.screen = location[\"screen\" + axis];\n }\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\n press: function() {\n this._holdTimeout = setTimeout(this._hold.bind(this), this.userEvents.minHold);\n this._trigger(PRESS, this.pressEvent);\n },\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 }\n else {\n that._trigger(DOUBLETAP, touchInfo);\n }\n that.userEvents._clicks = 0;\n }, CLICK_DELAY);\n }\n },\n\n _hold: function() {\n this._trigger(HOLD, this.pressEvent);\n },\n\n move: function(touchInfo) {\n var that = this;\n var preventMove = touchInfo.type !== \"api\" && that.userEvents._shouldNotMove;\n\n if (that._finished || preventMove) { return; }\n\n that.x.move(touchInfo.location);\n that.y.move(touchInfo.location);\n\n if (!that._moved) {\n if (that._withinIgnoreThreshold()) {\n return;\n }\n\n if (!UserEvents.current || UserEvents.current === that.userEvents) {\n that._start(touchInfo);\n } else {\n return that.dispose();\n }\n }\n\n // Event handlers may cancel the drag in the START event handler, hence the double check for pressed.\n if (!that._finished) {\n that._trigger(MOVE, touchInfo);\n }\n },\n\n end: function(touchInfo) {\n this.endTime = now();\n\n if (this._finished) { return; }\n\n // Mark the object as finished if there are blocking operations in the event handlers (alert/confirm)\n this._finished = true;\n\n this._trigger(RELEASE, touchInfo); // Release should be fired before TAP (as click is after mouseup/touchend)\n\n if (this._moved) {\n this._trigger(END, touchInfo);\n } else {\n if (!this.useClickAsTap) {\n if (this.supportDoubleTap) {\n this._tap(touchInfo);\n }\n else {\n this._trigger(TAP, touchInfo);\n }\n }\n }\n\n clearTimeout(this._holdTimeout);\n\n this.dispose();\n },\n\n dispose: function() {\n var userEvents = this.userEvents,\n activeTouches = userEvents.touches;\n\n this._finished = true;\n this.pressEvent = null;\n clearTimeout(this._holdTimeout);\n\n activeTouches.splice($.inArray(this, activeTouches), 1);\n },\n\n skip: function() {\n this.dispose();\n },\n\n cancel: function() {\n this.dispose();\n },\n\n isMoved: function() {\n return this._moved;\n },\n\n _start: function(touchInfo) {\n clearTimeout(this._holdTimeout);\n\n this.startTime = now();\n this._moved = true;\n this._trigger(START, touchInfo);\n },\n\n _trigger: function(name, touchInfo) {\n var that = this,\n jQueryEvent = touchInfo.event,\n data = {\n touch: that,\n x: that.x,\n y: that.y,\n target: that.target,\n event: jQueryEvent\n };\n\n if (that.userEvents.notify(name, data)) {\n jQueryEvent.preventDefault();\n }\n },\n\n _withinIgnoreThreshold: function() {\n var xDelta = this.x.initialDelta,\n yDelta = this.y.initialDelta;\n\n return Math.sqrt(xDelta * xDelta + yDelta * yDelta) <= this.threshold;\n }\n });\n\n function withEachUpEvent(callback) {\n var downEvents = kendo.eventMap.up.split(\" \"),\n idx = 0,\n length = downEvents.length;\n\n for (; idx < length; idx ++) {\n callback(downEvents[idx]);\n }\n }\n\n var UserEvents = Observable.extend({\n init: function(element, options) {\n var that = this,\n filter,\n ns = kendo.guid();\n\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\n element = $(element).handler(that);\n Observable.fn.init.call(that);\n\n extend(that, {\n element: element,\n // the touch events lock to the element anyway, so no need for the global setting\n surface: options.global && ENABLE_GLOBAL_SURFACE ? $(element[0].ownerDocument.documentElement) : $(options.surface || element),\n stopPropagation: options.stopPropagation,\n pressed: false\n });\n\n that.surface.handler(that)\n .on(kendo.applyEventMap(\"move\", ns), \"_move\")\n .on(kendo.applyEventMap(\"up cancel\", ns), \"_end\");\n\n element.on(kendo.applyEventMap(\"down\", ns), filter, \"_start\");\n\n if (that.useClickAsTap) {\n element.on(kendo.applyEventMap(\"click\", ns), filter, \"_click\");\n }\n\n if (support.pointers || support.msPointers) {\n //touch-action:none will not work for IE10\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\n if (options.preventDragEvent) {\n element.on(kendo.applyEventMap(\"dragstart\", ns), kendo.preventDefault);\n }\n\n element.on(kendo.applyEventMap(\"mousedown\", ns), filter, { root: element }, \"_select\");\n\n if (that.captureUpIfMoved && support.eventCapture) {\n var surfaceElement = that.surface[0],\n preventIfMovingProxy = that.preventIfMoving.bind(that);\n\n withEachUpEvent(function(eventName) {\n surfaceElement.addEventListener(eventName, preventIfMovingProxy, true);\n });\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\n preventIfMoving: function(e) {\n if (this._isMoved()) {\n e.preventDefault();\n }\n },\n\n destroy: function() {\n var that = this;\n\n if (that._destroyed) {\n return;\n }\n\n that._destroyed = true;\n\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\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\n that.unbind();\n delete that.surface;\n delete that.element;\n delete that.currentTarget;\n },\n\n capture: function() {\n UserEvents.current = this;\n },\n\n cancel: function() {\n this._disposeAll();\n this.trigger(CANCEL);\n },\n\n notify: function(eventName, data) {\n var that = this,\n touches = that.touches;\n\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\n extend(data, { touches: touches }, touchDelta(touches[0], touches[1]));\n }\n\n return this.trigger(eventName, extend(data, { type: eventName }));\n },\n\n // API\n press: function(x, y, target) {\n this._apiCall(\"_start\", x, y, target);\n },\n\n move: function(x, y) {\n this._apiCall(\"_move\", x, y);\n },\n\n end: function(x, y) {\n this._apiCall(\"_end\", x, y);\n },\n\n _isMultiTouch: function() {\n return this.touches.length > 1;\n },\n\n _maxTouchesReached: function() {\n return this.touches.length >= this._maxTouches;\n },\n\n _disposeAll: function() {\n var touches = this.touches;\n while (touches.length > 0) {\n touches.pop().dispose();\n }\n },\n\n _isMoved: function() {\n return $.grep(this.touches, function(touch) {\n return touch.isMoved();\n }).length;\n },\n\n _select: function(e) {\n if (!this.allowSelection || this.trigger(SELECT, { event: e })) {\n e.preventDefault();\n }\n },\n\n _start: function(e) {\n var that = this,\n idx = 0,\n filter = that.filter,\n target,\n touches = getTouches(e),\n length = touches.length,\n touch,\n which = e.which;\n\n if ((which && which > 1) || (that._maxTouchesReached())) {\n return;\n }\n\n UserEvents.current = null;\n\n that.currentTarget = e.currentTarget;\n\n if (that.stopPropagation) {\n e.stopPropagation();\n }\n\n for (; idx < length; idx ++) {\n if (that._maxTouchesReached()) {\n break;\n }\n\n touch = touches[idx];\n\n if (filter) {\n target = $(touch.currentTarget); // target.is(filter) ? target : target.closest(filter, that.element);\n } else {\n target = that.element;\n }\n\n if (!target.length) {\n continue;\n }\n\n touch = new Touch(that, target, touch);\n that.touches.push(touch);\n touch.press();\n\n if (that._isMultiTouch()) {\n that.notify(\"gesturestart\", {});\n }\n }\n },\n\n _move: function(e) {\n this._eachTouch(\"move\", e);\n },\n\n _end: function(e) {\n this._eachTouch(\"end\", e);\n },\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\n if (this.trigger(\"tap\", data)) {\n e.preventDefault();\n }\n },\n\n _eachTouch: function(methodName, e) {\n var that = this,\n dict = {},\n touches = getTouches(e),\n activeTouches = that.touches,\n idx,\n touch,\n touchInfo,\n matchingTouch;\n\n for (idx = 0; idx < activeTouches.length; idx ++) {\n touch = activeTouches[idx];\n dict[touch.id] = touch;\n }\n\n for (idx = 0; idx < touches.length; idx ++) {\n touchInfo = touches[idx];\n matchingTouch = dict[touchInfo.id];\n\n if (matchingTouch) {\n matchingTouch[methodName](touchInfo);\n }\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\n UserEvents.defaultThreshold = function(value) {\n DEFAULT_THRESHOLD = value;\n };\n\n UserEvents.minHold = function(value) {\n DEFAULT_MIN_HOLD = value;\n };\n\n kendo.getTouches = getTouches;\n kendo.touchDelta = touchDelta;\n kendo.UserEvents = UserEvents;\n })(window.kendo.jQuery);\n\n var __meta__$W = {\n id: \"draganddrop\",\n name: \"Drag & drop\",\n category: \"framework\",\n description: \"Drag & drop functionality for any DOM element.\",\n depends: [ \"core\", \"userevents\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n support = kendo.support,\n document = window.document,\n $window = $(window),\n Class = kendo.Class,\n Widget = kendo.ui.Widget,\n Observable = kendo.Observable,\n UserEvents = kendo.UserEvents,\n extend = $.extend,\n getOffset = kendo.getOffset,\n draggables = {},\n dropTargets = {},\n dropAreas = {},\n lastDropTarget,\n elementUnderCursor = kendo.elementUnderCursor,\n KEYUP = \"keyup\",\n CHANGE = \"change\",\n\n // Draggable events\n DRAGSTART = \"dragstart\",\n HOLD = \"hold\",\n DRAG = \"drag\",\n DRAGEND = \"dragend\",\n DRAGCANCEL = \"dragcancel\",\n HINTDESTROYED = \"hintDestroyed\",\n\n // DropTarget events\n DRAGENTER = \"dragenter\",\n DRAGLEAVE = \"dragleave\",\n DROP = \"drop\";\n\n function contains(parent, child) {\n try {\n return $.contains(parent, child) || parent == child;\n } catch (e) {\n return false;\n }\n }\n\n function numericCssPropery(element, property) {\n return parseInt(element.css(property), 10) || 0;\n }\n\n function within(value, range) {\n return Math.min(Math.max(value, range.min), range.max);\n }\n\n function containerBoundaries(container, element) {\n var offset = getOffset(container),\n outerWidth = kendo._outerWidth,\n outerHeight = kendo._outerHeight,\n minX = offset.left + numericCssPropery(container, \"borderLeftWidth\") + numericCssPropery(container, \"paddingLeft\"),\n minY = offset.top + numericCssPropery(container, \"borderTopWidth\") + numericCssPropery(container, \"paddingTop\"),\n maxX = minX + container.width() - outerWidth(element, true),\n maxY = minY + container.height() - outerHeight(element, true);\n\n return {\n x: { min: minX, max: maxX },\n y: { min: minY, max: maxY }\n };\n }\n\n function checkTarget(target, targets, areas) {\n var theTarget, theFilter, i = 0,\n targetLen = targets && targets.length,\n areaLen = areas && areas.length;\n\n while (target && target.parentNode) {\n for (i = 0; i < targetLen; i ++) {\n theTarget = targets[i];\n if (theTarget.element[0] === target) {\n return { target: theTarget, 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 { target: theFilter, targetElement: target };\n }\n }\n\n target = target.parentNode;\n }\n\n return undefined$1;\n }\n\n var TapCapture = Observable.extend({\n init: function(element, options) {\n var that = this,\n domElement = element[0];\n\n that.capture = false;\n\n if (domElement.addEventListener) {\n $.each(kendo.eventMap.down.split(\" \"), function() {\n domElement.addEventListener(this, that._press.bind(that), true);\n });\n $.each(kendo.eventMap.up.split(\" \"), function() {\n domElement.addEventListener(this, that._release.bind(that), true);\n });\n } else {\n $.each(kendo.eventMap.down.split(\" \"), function() {\n domElement.attachEvent(this, that._press.bind(that));\n });\n $.each(kendo.eventMap.up.split(\" \"), function() {\n domElement.attachEvent(this, that._release.bind(that));\n });\n }\n\n Observable.fn.init.call(that);\n\n that.bind([\"press\", \"release\"], options || {});\n },\n\n captureNext: function() {\n this.capture = true;\n },\n\n cancelCapture: function() {\n this.capture = false;\n },\n\n _press: function(e) {\n var that = this;\n that.trigger(\"press\");\n if (that.capture) {\n e.preventDefault();\n }\n },\n\n _release: function(e) {\n var that = this;\n that.trigger(\"release\");\n\n if (that.capture) {\n e.preventDefault();\n that.cancelCapture();\n }\n }\n });\n\n var PaneDimension = Observable.extend({\n init: function(options) {\n var that = this;\n Observable.fn.init.call(that);\n\n that.forcedEnabled = false;\n\n $.extend(that, options);\n\n that.scale = 1;\n\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\n makeVirtual: function() {\n $.extend(this, {\n virtual: true,\n forcedEnabled: true,\n _virtualMin: 0,\n _virtualMax: 0\n });\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\n outOfBounds: function(offset) {\n return offset > this.max || offset < this.min;\n },\n\n forceEnabled: function() {\n this.forcedEnabled = true;\n },\n\n getSize: function() {\n return this.container[0][this.measure];\n },\n\n getTotal: function() {\n return this.element[0][this.scrollSize];\n },\n\n rescale: function(scale) {\n this.scale = scale;\n },\n\n update: function(silent) {\n var that = this,\n total = that.virtual ? that._virtualMax : that.getTotal(),\n scaledTotal = total * that.scale,\n size = that.getSize();\n\n if (total === 0 && !that.forcedEnabled) {\n return; // we are not visible.\n }\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\n that.enabled = that.forcedEnabled || (scaledTotal > size);\n\n if (!silent) {\n that.trigger(CHANGE, that);\n }\n }\n });\n\n var PaneDimensions = Observable.extend({\n init: function(options) {\n var that = this;\n\n Observable.fn.init.call(that);\n\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\n that.bind(CHANGE, options);\n },\n\n rescale: function(newScale) {\n this.x.rescale(newScale);\n this.y.rescale(newScale);\n this.refresh();\n },\n\n centerCoordinates: function() {\n return { x: Math.min(0, -this.x.centerOffset), 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\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\n outOfBounds: function() {\n return this.dimension.outOfBounds(this.movable[this.axis]);\n },\n\n dragMove: function(delta) {\n var that = this,\n dimension = that.dimension,\n axis = that.axis,\n movable = that.movable,\n position = movable[axis] + delta;\n\n if (!dimension.enabled) {\n return;\n }\n\n if ((position < dimension.min && delta < 0) || (position > dimension.max && delta > 0)) {\n delta *= that.resistance;\n }\n\n movable.translateAxis(axis, delta);\n that.trigger(CHANGE, that);\n }\n });\n\n var Pane = Class.extend({\n\n init: function(options) {\n var that = this,\n x,\n y,\n resistance,\n movable;\n\n extend(that, { elastic: true }, options);\n\n resistance = that.elastic ? 0.5 : 0;\n movable = that.movable;\n\n that.x = x = new PaneAxis({\n axis: \"x\",\n dimension: that.dimensions.x,\n resistance: resistance,\n movable: movable\n });\n\n that.y = y = new PaneAxis({\n axis: \"y\",\n dimension: that.dimensions.y,\n resistance: resistance,\n movable: movable\n });\n\n that.userEvents.bind([\"press\", \"move\", \"end\", \"gesturestart\", \"gesturechange\"], {\n gesturestart: function(e) {\n that.gesture = e;\n that.offset = that.dimensions.container.offset();\n },\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\n gesturechange: function(e) {\n var previousGesture = that.gesture,\n previousCenter = previousGesture.center,\n\n center = e.center,\n\n scaleDelta = e.distance / previousGesture.distance,\n\n minScale = that.dimensions.minScale,\n maxScale = that.dimensions.maxScale,\n coordinates;\n\n if (movable.scale <= minScale && scaleDelta < 1) {\n // Resist shrinking. Instead of shrinking from 1 to 0.5, it will shrink to 0.5 + (1 /* minScale */ - 0.5) * 0.8 = 0.9;\n scaleDelta += (1 - scaleDelta) * 0.8;\n }\n\n if (movable.scale * scaleDelta >= maxScale) {\n scaleDelta = maxScale / movable.scale;\n }\n\n var offsetX = movable.x + that.offset.left,\n offsetY = movable.y + that.offset.top;\n\n coordinates = {\n x: (offsetX - previousCenter.x) * scaleDelta + center.x - offsetX,\n y: (offsetY - previousCenter.y) * scaleDelta + center.y - offsetY\n };\n\n movable.scaleWith(scaleDelta);\n\n x.dragMove(coordinates.x);\n y.dragMove(coordinates.y);\n\n that.dimensions.rescale(movable.scale);\n that.gesture = e;\n e.preventDefault();\n },\n\n move: function(e) {\n if (e.event.target.tagName.match(/textarea|input/i)) {\n return;\n }\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\n end: function(e) {\n e.preventDefault();\n }\n });\n }\n });\n\n var TRANSFORM_STYLE = support.transitions.prefix + \"Transform\",\n translate;\n\n\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\n var Movable = Observable.extend({\n init: function(element) {\n var that = this;\n\n Observable.fn.init.call(that);\n\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\n translateAxis: function(axis, by) {\n this[axis] += by;\n this.refresh();\n },\n\n scaleTo: function(scale) {\n this.scale = scale;\n this.refresh();\n },\n\n scaleWith: function(scaleDelta) {\n this.scale *= scaleDelta;\n this.refresh();\n },\n\n translate: function(coordinates) {\n this.x += coordinates.x;\n this.y += coordinates.y;\n this.refresh();\n },\n\n moveAxis: function(axis, value) {\n this[axis] = value;\n this.refresh();\n },\n\n moveTo: function(coordinates) {\n extend(this, coordinates);\n this.refresh();\n },\n\n refresh: function() {\n var that = this,\n x = that.x,\n y = that.y,\n newCoordinates;\n\n if (that.round) {\n x = Math.round(x);\n y = Math.round(y);\n }\n\n newCoordinates = translate(x, y, that.scale);\n\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\n } else {\n that.element[0].style[TRANSFORM_STYLE] = newCoordinates;\n }\n that._saveCoordinates(newCoordinates);\n that.trigger(CHANGE);\n }\n },\n\n _saveCoordinates: function(coordinates) {\n this.coordinates = coordinates;\n }\n });\n\n function destroyDroppable(collection, widget) {\n var groupName = widget.options.group,\n droppables = collection[groupName],\n i;\n\n Widget.fn.destroy.call(widget);\n\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; // WTF, porting this from the previous destroyGroup\n delete collection[groupName];\n }\n }\n\n var DropTarget = Widget.extend({\n init: function(element, options) {\n var that = this;\n\n Widget.fn.init.call(that, element, options);\n\n var group = that.options.group;\n\n if (!(group in dropTargets)) {\n dropTargets[group] = [ that ];\n } else {\n dropTargets[group].push( that );\n }\n },\n\n events: [\n DRAGENTER,\n DRAGLEAVE,\n DROP\n ],\n\n options: {\n name: \"DropTarget\",\n group: \"default\"\n },\n\n destroy: function() {\n destroyDroppable(dropTargets, this);\n },\n\n _trigger: function(eventName, e) {\n var that = this,\n draggable = draggables[that.options.group];\n\n if (draggable) {\n return that.trigger(eventName, extend({}, e.event, {\n draggable: draggable,\n dropTarget: e.dropTarget\n }));\n }\n },\n\n _over: function(e) {\n this._trigger(DRAGENTER, e);\n },\n\n _out: function(e) {\n this._trigger(DRAGLEAVE, e);\n },\n\n _drop: function(e) {\n var that = this,\n draggable = draggables[that.options.group];\n\n if (draggable) {\n draggable.dropped = !that._trigger(DROP, e);\n }\n }\n });\n\n DropTarget.destroyGroup = function(groupName) {\n var group = dropTargets[groupName] || dropAreas[groupName],\n i;\n\n if (group) {\n for (i = 0; i < group.length; i++) {\n Widget.fn.destroy.call(group[i]);\n }\n\n group.length = 0;\n delete dropTargets[groupName];\n delete dropAreas[groupName];\n }\n };\n\n DropTarget._cache = dropTargets;\n\n var DropTargetArea = DropTarget.extend({\n init: function(element, options) {\n var that = this;\n\n Widget.fn.init.call(that, element, options);\n\n var group = that.options.group;\n\n if (!(group in dropAreas)) {\n dropAreas[group] = [ that ];\n } else {\n dropAreas[group].push( that );\n }\n },\n\n destroy: function() {\n destroyDroppable(dropAreas, this);\n },\n\n options: {\n name: \"DropTargetArea\",\n group: \"default\",\n filter: null\n }\n });\n\n var Draggable = Widget.extend({\n init: function(element, options) {\n var that = this;\n\n Widget.fn.init.call(that, element, options);\n\n that._activated = false;\n\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: that._start.bind(that),\n hold: that._hold.bind(that),\n move: that._drag.bind(that),\n end: that._end.bind(that),\n cancel: that._cancel.bind(that),\n select: that._select.bind(that)\n });\n\n if (kendo.support.touch) {\n that.element.find(that.options.filter).css('touch-action', 'none');\n }\n\n that._afterEndHandler = that._afterEnd.bind(that);\n that._captureEscape = that._captureEscape.bind(that);\n },\n\n events: [\n HOLD,\n DRAGSTART,\n DRAG,\n DRAGEND,\n DRAGCANCEL,\n HINTDESTROYED\n ],\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\n cancelHold: function() {\n this._activated = false;\n },\n\n _captureEscape: function(e) {\n var that = this;\n\n if (e.keyCode === kendo.keys.ESC) {\n that._trigger(DRAGCANCEL, { event: e });\n that.userEvents.cancel();\n }\n },\n\n _updateHint: function(e) {\n var that = this,\n coordinates,\n options = that.options,\n boundaries = that.boundaries,\n axis = options.axis,\n cursorOffset = that.options.cursorOffset;\n\n if (cursorOffset) {\n coordinates = { left: e.x.location + cursorOffset.left, top: e.y.location + cursorOffset.top };\n } else {\n that.hintOffset.left += e.x.delta;\n that.hintOffset.top += e.y.delta;\n coordinates = $.extend({}, that.hintOffset);\n }\n\n if (boundaries) {\n coordinates.top = within(coordinates.top, boundaries.y);\n coordinates.left = within(coordinates.left, boundaries.x);\n }\n\n if (axis === \"x\") {\n delete coordinates.top;\n } else if (axis === \"y\") {\n delete coordinates.left;\n }\n\n that.hint.css(coordinates);\n },\n\n _shouldIgnoreTarget: function(target) {\n var ignoreSelector = this.options.ignore;\n return ignoreSelector && $(target).is(ignoreSelector);\n },\n\n _select: function(e) {\n if (!this._shouldIgnoreTarget(e.event.target)) {\n e.preventDefault();\n }\n },\n\n _start: function(e) {\n var that = this,\n options = that.options,\n container = options.container ? $(options.container) : null,\n hint = options.hint;\n\n if (this._shouldIgnoreTarget(e.touch.initialTouch) || (options.holdToDrag && !that._activated)) {\n that.userEvents.cancel();\n return;\n }\n\n that.currentTarget = e.target;\n that.currentTargetOffset = getOffset(that.currentTarget);\n\n if (hint) {\n if (that.hint) {\n that.hint.stop(true, true).remove();\n }\n\n that.hint = kendo.isFunction(hint) ? $(hint.call(that, that.currentTarget)) : hint;\n\n var offset = getOffset(that.currentTarget);\n that.hintOffset = offset;\n\n that.hint.css( {\n position: \"absolute\",\n zIndex: 20000, // the Window's z-index is 10000 and can be raised because of z-stacking\n left: offset.left,\n top: offset.top\n })\n .appendTo(document.body);\n\n that.angular(\"compile\", function() {\n that.hint.removeAttr(\"ng-repeat\");\n var scopeTarget = $(e.target);\n\n while (!scopeTarget.data(\"$$kendoScope\") && scopeTarget.length) {\n scopeTarget = scopeTarget.parent();\n }\n\n return {\n elements: that.hint.get(),\n scopeFrom: scopeTarget.data(\"$$kendoScope\")\n };\n });\n }\n\n draggables[options.group] = that;\n\n that.dropped = false;\n\n if (container) {\n that.boundaries = containerBoundaries(container, that.hint);\n }\n\n $(document).on(KEYUP, that._captureEscape);\n\n if (that._trigger(DRAGSTART, e)) {\n that.userEvents.cancel();\n that._afterEnd();\n }\n\n that.userEvents.capture();\n },\n\n _hold: function(e) {\n this.currentTarget = e.target;\n\n if (this._trigger(HOLD, e)) {\n this.userEvents.cancel();\n } else {\n this._activated = true;\n }\n },\n\n _drag: function(e) {\n e.preventDefault();\n\n var cursorElement = this._elementUnderCursor(e);\n\n if (this.options.autoScroll && this._cursorElement !== cursorElement) {\n this._scrollableParent = findScrollableParent(cursorElement);\n this._cursorElement = cursorElement;\n }\n\n this._lastEvent = e;\n this._processMovement(e, cursorElement);\n\n if (this.options.autoScroll) {\n // chrome seems to trigger mousemove when mouse is moved outside of the window (over the Chrome), too.\n if (this._scrollableParent[0]) {\n var velocity = autoScrollVelocity(e.x.location, e.y.location, scrollableViewPort(this._scrollableParent));\n\n\n this._scrollCompenstation = $.extend({}, this.hintOffset);\n this._scrollVelocity = velocity;\n\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(this._autoScroll.bind(this), 50);\n }\n }\n }\n\n if (this.hint) {\n this._updateHint(e);\n }\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\n if (lastDropTarget) {\n if (targetElement === lastDropTarget.targetElement) {\n return;\n }\n\n lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\n }\n\n target._trigger(DRAGENTER, extend(e, { dropTarget: $(targetElement) }));\n lastDropTarget = extend(target, { targetElement: targetElement });\n });\n\n this._trigger(DRAG, extend(e, { dropTarget: lastDropTarget, elementUnderCursor: cursorElement }));\n },\n\n _autoScroll: function() {\n var parent = this._scrollableParent[0],\n velocity = this._scrollVelocity,\n compensation = this._scrollCompenstation;\n\n if (!parent) {\n return;\n }\n\n var cursorElement = this._elementUnderCursor(this._lastEvent);\n this._processMovement(this._lastEvent, cursorElement);\n\n var yIsScrollable, xIsScrollable;\n\n var isRootNode = parent === scrollableRoot()[0];\n\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\n var yDelta = parent.scrollTop + velocity.y;\n var yInBounds = yIsScrollable && yDelta > 0 && yDelta < parent.scrollHeight;\n\n var xDelta = parent.scrollLeft + velocity.x;\n var xInBounds = xIsScrollable && xDelta > 0 && xDelta < parent.scrollWidth;\n\n if (yInBounds) {\n parent.scrollTop += velocity.y;\n } else if (yIsScrollable && yDelta < 0) {\n parent.scrollTop = 0;\n }\n\n if (xInBounds) {\n parent.scrollLeft += velocity.x;\n } else if (xIsScrollable && xDelta < 0) {\n parent.scrollLeft = 0;\n }\n\n if (this.hint && isRootNode && (xInBounds || yInBounds)) {\n if (yInBounds) {\n compensation.top += velocity.y;\n }\n\n if (xInBounds) {\n compensation.left += velocity.x;\n }\n\n this.hint.css(compensation);\n }\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\n clearInterval(this._scrollInterval);\n this._scrollInterval = null;\n this._cancel(this._trigger(DRAGEND, e));\n },\n\n _cancel: function(isDefaultPrevented) {\n var that = this;\n\n that._scrollableParent = null;\n this._cursorElement = null;\n clearInterval(this._scrollInterval);\n that._activated = false;\n\n if (that.hint && !that.dropped) {\n setTimeout(function() {\n that.hint.stop(true, true);\n\n if (isDefaultPrevented) {\n that._afterEndHandler();\n } else {\n that.hint.animate(that.currentTargetOffset, \"fast\", that._afterEndHandler);\n }\n }, 0);\n\n } else {\n that._afterEnd();\n }\n },\n\n _trigger: function(eventName, e) {\n var that = this;\n\n return that.trigger(\n eventName, extend(\n {},\n e.event,\n {\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 },\n\n _elementUnderCursor: function(e) {\n var target = elementUnderCursor(e),\n hint = this.hint;\n\n if (hint && contains(hint[0], target)) {\n hint.hide();\n target = elementUnderCursor(e);\n // IE8 does not return the element in iframe from first attempt\n if (!target) {\n target = elementUnderCursor(e);\n }\n hint.show();\n }\n\n return target;\n },\n\n _withDropTarget: function(element, callback) {\n var result,\n group = this.options.group,\n targets = dropTargets[group],\n areas = dropAreas[group];\n\n if (targets && targets.length || areas && areas.length) {\n result = checkTarget(element, targets, areas);\n\n if (result) {\n callback(result.target, result.targetElement);\n } else {\n callback();\n }\n }\n },\n\n destroy: function() {\n var that = this;\n\n Widget.fn.destroy.call(that);\n\n that._afterEnd();\n\n that.userEvents.destroy();\n\n this._scrollableParent = null;\n this._cursorElement = null;\n clearInterval(this._scrollInterval);\n\n that.currentTarget = null;\n },\n\n _afterEnd: function() {\n var that = this;\n\n if (that.hint) {\n that.hint.remove();\n }\n\n delete draggables[that.options.group];\n\n that.trigger(\"destroy\");\n that.trigger(HINTDESTROYED);\n $(document).off(KEYUP, that._captureEscape);\n }\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\n extend(kendo.ui, {\n Pane: Pane,\n PaneDimensions: PaneDimensions,\n Movable: Movable\n });\n\n function scrollableViewPort(element) {\n var root = scrollableRoot()[0],\n offset,\n top,\n left;\n\n if (element[0] === root) {\n top = root.scrollTop;\n left = root.scrollLeft;\n\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\n function scrollableRoot() {\n return $(kendo.support.browser.edge || kendo.support.browser.safari ? document.body : document.documentElement);\n }\n\n function findScrollableParent(element) {\n var root = scrollableRoot();\n\n if (!element || element === document.body || element === document.documentElement) {\n return root;\n }\n\n var parent = $(element)[0];\n\n while (parent && !kendo.isScrollable(parent) && parent !== document.body) {\n parent = parent.parentNode;\n }\n\n if (parent === document.body) {\n return root;\n }\n\n return $(parent);\n }\n\n function autoScrollVelocity(mouseX, mouseY, rect) {\n var velocity = { x: 0, y: 0 };\n\n var AUTO_SCROLL_AREA = 50;\n\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\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\n return velocity;\n }\n\n // export for testing\n kendo.ui.Draggable.utils = {\n autoScrollVelocity: autoScrollVelocity,\n scrollableViewPort: scrollableViewPort,\n findScrollableParent: findScrollableParent\n };\n\n })(window.kendo.jQuery);\n\n var __meta__$V = {\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: [ \"fx\", \"draganddrop\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n mobile = kendo.mobile,\n fx = kendo.effects,\n ui = mobile.ui,\n extend = $.extend,\n Widget = ui.Widget,\n Class = kendo.Class,\n Movable = kendo.ui.Movable,\n Pane = kendo.ui.Pane,\n PaneDimensions = kendo.ui.PaneDimensions,\n Transition = fx.Transition,\n Animation = fx.Animation,\n abs = Math.abs,\n SNAPBACK_DURATION = 500,\n SCROLLBAR_OPACITY = 0.7,\n FRICTION = 0.96,\n VELOCITY_MULTIPLIER = 10,\n MAX_VELOCITY = 55,\n OUT_OF_BOUNDS_FRICTION = 0.5,\n ANIMATED_SCROLLER_PRECISION = 5,\n RELEASECLASS = \"km-scroller-release\",\n REFRESHCLASS = \"km-scroller-refresh\",\n PULL = \"pull\",\n CHANGE = \"change\",\n RESIZE = \"resize\",\n SCROLL = \"scroll\",\n MOUSE_WHEEL_ID = 2;\n\n var ZoomSnapBack = Animation.extend({\n init: function(options) {\n var that = this;\n Animation.fn.init.call(that);\n extend(that, options);\n\n that.userEvents.bind(\"gestureend\", that.start.bind(that));\n that.tapCapture.bind(\"press\", that.cancel.bind(that));\n },\n\n enabled: function() {\n return this.movable.scale < this.dimensions.minScale;\n },\n\n done: function() {\n return this.dimensions.minScale - this.movable.scale < 0.01;\n },\n\n tick: function() {\n var movable = this.movable;\n movable.scaleWith(1.1);\n this.dimensions.rescale(movable.scale);\n },\n\n onEnd: function() {\n var movable = this.movable;\n movable.scaleTo(this.dimensions.minScale);\n this.dimensions.rescale(movable.scale);\n }\n });\n\n var DragInertia = Animation.extend({\n init: function(options) {\n var that = this;\n\n Animation.fn.init.call(that);\n\n extend(that, options, {\n transition: new Transition({\n axis: options.axis,\n movable: options.movable,\n onEnd: function() { that._end(); }\n })\n });\n\n that.tapCapture.bind(\"press\", function() { that.cancel(); });\n that.userEvents.bind(\"end\", that.start.bind(that));\n that.userEvents.bind(\"gestureend\", that.start.bind(that));\n that.userEvents.bind(\"tap\", that.onEnd.bind(that));\n },\n\n onCancel: function() {\n this.transition.cancel();\n },\n\n freeze: function(location) {\n var that = this;\n that.cancel();\n that._moveTo(location);\n },\n\n onEnd: function() {\n var that = this;\n if (that.paneAxis.outOfBounds()) {\n that._snapBack();\n } else {\n that._end();\n }\n },\n\n done: function() {\n return abs(this.velocity) < 1;\n },\n\n start: function(e) {\n var that = this,\n velocity;\n\n if (!that.dimension.enabled) { return; }\n\n if (that.paneAxis.outOfBounds()) {\n if (that.transition._started) {\n that.transition.cancel();\n that.velocity = Math.min(e.touch[that.axis].velocity * that.velocityMultiplier, MAX_VELOCITY);\n\n Animation.fn.start.call(that);\n } else {\n that._snapBack();\n }\n } else {\n velocity = e.touch.id === MOUSE_WHEEL_ID ? 0 : e.touch[that.axis].velocity;\n that.velocity = Math.max(Math.min(velocity * that.velocityMultiplier, MAX_VELOCITY), -MAX_VELOCITY);\n\n that.tapCapture.captureNext();\n Animation.fn.start.call(that);\n }\n },\n\n tick: function() {\n var that = this,\n dimension = that.dimension,\n friction = that.paneAxis.outOfBounds() ? OUT_OF_BOUNDS_FRICTION : that.friction,\n delta = (that.velocity *= friction),\n location = that.movable[that.axis] + delta;\n\n if (!that.elastic && dimension.outOfBounds(location)) {\n location = Math.max(Math.min(location, dimension.max), dimension.min);\n that.velocity = 0;\n }\n\n that.movable.moveAxis(that.axis, location);\n },\n\n _end: function() {\n this.tapCapture.cancelCapture();\n this.end();\n },\n\n _snapBack: function() {\n var that = this,\n dimension = that.dimension,\n snapBack = that.movable[that.axis] > dimension.max ? dimension.max : dimension.min;\n that._moveTo(snapBack);\n },\n\n _moveTo: function(location) {\n this.transition.moveTo({ location: location, duration: SNAPBACK_DURATION, ease: Transition.easeOutExpo });\n }\n });\n\n var AnimatedScroller = Animation.extend({\n init: function(options) {\n var that = this;\n\n kendo.effects.Animation.fn.init.call(this);\n\n extend(that, options, {\n origin: {},\n destination: {},\n offset: {}\n });\n },\n\n tick: function() {\n this._updateCoordinates();\n this.moveTo(this.origin);\n },\n\n done: function() {\n return abs(this.offset.y) < ANIMATED_SCROLLER_PRECISION && abs(this.offset.x) < ANIMATED_SCROLLER_PRECISION;\n },\n\n onEnd: function() {\n this.moveTo(this.destination);\n if (this.callback) {\n this.callback.call();\n }\n },\n\n setCoordinates: function(from, to) {\n this.offset = {};\n this.origin = from;\n this.destination = to;\n },\n\n setCallback: function(callback) {\n if (callback && kendo.isFunction(callback)) {\n this.callback = callback;\n } else {\n callback = undefined$1;\n }\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\n this.origin = {\n y: this.origin.y + this.offset.y,\n x: this.origin.x + this.offset.x\n };\n }\n });\n\n var ScrollBar = Class.extend({\n init: function(options) {\n var that = this,\n horizontal = options.axis === \"x\",\n element = $('
    ');\n\n if (horizontal) {\n element.attr(\"aria-orientation\", \"horizontal\");\n }\n\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\n that.scrollMovable.bind(CHANGE, that.refresh.bind(that));\n that.container.append(element);\n if (options.alwaysVisible) {\n that.show();\n }\n },\n\n refresh: function() {\n var that = this,\n axis = that.axis,\n dimension = that.dimension,\n paneSize = dimension.size,\n scrollMovable = that.scrollMovable,\n sizeRatio = paneSize / dimension.total,\n position = Math.round(-scrollMovable[axis] * sizeRatio),\n size = Math.round(paneSize * sizeRatio);\n\n if (sizeRatio >= 1) {\n this.element.css(\"display\", \"none\");\n } else {\n this.element.css(\"display\", \"\");\n }\n\n if (position + size > paneSize) {\n size = paneSize - position;\n } else if (position < 0) {\n size += position;\n position = 0;\n }\n\n if (that.elementSize != size) {\n that.element.css(that.size, size + \"px\");\n that.elementSize = size;\n }\n\n that._ariaValue(position, dimension.size - that.elementSize);\n\n that.movable.moveAxis(axis, position);\n },\n\n show: function() {\n this.element.css({ opacity: SCROLLBAR_OPACITY, visibility: \"visible\" });\n },\n\n hide: function() {\n if (!this.alwaysVisible) {\n this.element.css({ opacity: 0 });\n }\n },\n\n _ariaValue: function(current, total) {\n var element = this.element;\n\n if (current > total) {\n current = total;\n }\n\n element.attr(\"aria-valuemax\", total);\n element.attr(\"aria-valuenow\", current);\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\n element = that.element;\n\n that._native = that.options.useNative && kendo.support.hasNativeScrolling;\n if (that._native) {\n element.addClass(\"km-native-scroller\")\n .prepend('
    ');\n\n extend(that, {\n scrollElement: element,\n fixedContainer: element.children().first()\n });\n\n return;\n }\n\n element\n .css(\"overflow\", \"hidden\")\n .addClass(\"km-scroll-wrapper\")\n .wrapInner('
    ')\n .prepend('
    ');\n\n var inner = element.children().eq(1),\n\n tapCapture = new kendo.TapCapture(element),\n\n movable = new Movable(inner),\n\n dimensions = new PaneDimensions({\n element: inner,\n container: element,\n forcedEnabled: that.options.zoom\n }),\n\n avoidScrolling = this.options.avoidScrolling,\n\n 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\n var velocityX = abs(e.x.velocity),\n velocityY = abs(e.y.velocity),\n horizontalSwipe = velocityX * 2 >= velocityY,\n originatedFromFixedContainer = $.contains(that.fixedContainer[0], e.event.target),\n verticalSwipe = velocityY * 2 >= velocityX;\n\n\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 }),\n\n pane = new Pane({\n movable: movable,\n dimensions: dimensions,\n userEvents: userEvents,\n elastic: that.options.elastic\n }),\n\n zoomSnapBack = new ZoomSnapBack({\n movable: movable,\n dimensions: dimensions,\n userEvents: userEvents,\n tapCapture: tapCapture\n }),\n\n animatedScroller = new AnimatedScroller({\n moveTo: function(coordinates) {\n that.scrollTo(coordinates.x, coordinates.y);\n }\n });\n\n movable.bind(CHANGE, function() {\n that.scrollTop = - movable.y;\n that.scrollLeft = - movable.x;\n\n that.trigger(SCROLL, {\n scrollTop: that.scrollTop,\n scrollLeft: that.scrollLeft\n });\n });\n\n if (that.options.mousewheelScrolling) {\n element.on(\"DOMMouseScroll mousewheel\", this._wheelScroll.bind(this));\n }\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\n that._initAxis(\"x\");\n that._initAxis(\"y\");\n\n // build closure\n that._wheelEnd = function() {\n that._wheel = false;\n that.userEvents.end(0, that._wheelY);\n };\n\n dimensions.refresh();\n\n if (that.options.pullToRefresh) {\n that._initPullToRefresh();\n }\n },\n\n _wheelScroll: function(e) {\n if (e.ctrlKey) {\n return;\n }\n\n if (!this._wheel) {\n this._wheel = true;\n this._wheelY = 0;\n this.userEvents.press(0, this._wheelY);\n }\n\n clearTimeout(this._wheelTimeout);\n this._wheelTimeout = setTimeout(this._wheelEnd, 50);\n\n var delta = kendo.wheelDeltaY(e);\n\n if (delta) {\n this._wheelY += delta;\n this.userEvents.move(0, this._wheelY);\n }\n\n e.preventDefault();\n },\n\n makeVirtual: function() {\n this.dimensions.y.makeVirtual();\n },\n\n virtualSize: function(min, max) {\n this.dimensions.y.virtualSize(min, max);\n },\n\n height: function() {\n return this.dimensions.y.size;\n },\n\n scrollHeight: function() {\n return this.scrollElement[0].scrollHeight;\n },\n\n scrollWidth: function() {\n return this.scrollElement[0].scrollWidth;\n },\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() { return false; },\n pullToRefresh: false,\n messages: {\n pullTemplate: \"Pull to refresh\",\n releaseTemplate: \"Release to refresh\",\n refreshTemplate: \"Refreshing\"\n }\n },\n\n events: [\n PULL,\n SCROLL,\n RESIZE\n ],\n\n _resize: function() {\n if (!this._native) {\n this.contentResized();\n }\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\n reset: function() {\n if (this._native) {\n this.scrollElement.scrollTop(0);\n } else {\n this.movable.moveTo({ x: 0, y: 0 });\n this._scale(1);\n }\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\n if (this.pane.y.outOfBounds()) {\n this.movable.moveAxis(\"y\", this.dimensions.y.min);\n }\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\n enable: function() {\n this.enabled = true;\n },\n\n disable: function() {\n this.enabled = false;\n },\n\n scrollTo: function(x, y) {\n if (this._native) {\n kendo.scrollLeft(this.scrollElement, abs(x));\n this.scrollElement.scrollTop(abs(y));\n } else {\n this.dimensions.refresh();\n this.movable.moveTo({ x: x, y: y });\n }\n },\n\n animatedScrollTo: function(x, y, callback) {\n var from,\n to;\n\n if (this._native) {\n this.scrollTo(x, y);\n } else {\n from = { x: this.movable.x, y: this.movable.y };\n to = { x: x, y: y };\n\n this.animatedScroller.setCoordinates(from, to);\n this.animatedScroller.setCallback(callback);\n this.animatedScroller.start();\n }\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\n destroy: function() {\n Widget.fn.destroy.call(this);\n if (this.userEvents) {\n this.userEvents.destroy();\n }\n },\n\n _scale: function(scale) {\n this.dimensions.rescale(scale);\n this.movable.scaleTo(scale);\n },\n\n _initPullToRefresh: function() {\n var that = this;\n\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\n that.scrollElement.prepend('' + that.pullTemplate({}) + '');\n that.refreshHint = that.scrollElement.children().first();\n that.hintContainer = that.refreshHint.children(\".km-template\");\n\n that.pane.y.bind(\"change\", that._paneChange.bind(that));\n that.userEvents.bind(\"end\", that._dragEnd.bind(that));\n },\n\n _dragEnd: function() {\n var that = this;\n\n if (!that.pulled) {\n return;\n }\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\n _paneChange: function() {\n var that = this;\n\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\n _initAxis: function(axis) {\n var that = this,\n elementId = that.element.attr(\"id\"),\n movable = that.movable,\n dimension = that.dimensions[axis],\n tapCapture = that.tapCapture,\n paneAxis = that.pane[axis],\n scrollBar;\n\n if (!elementId) {\n elementId = kendo.guid();\n that.element.attr(\"id\", elementId);\n }\n\n scrollBar = new ScrollBar({\n axis: axis,\n movable: movable,\n dimension: dimension,\n container: that.element,\n alwaysVisible: that.options.visibleScrollHints,\n controlsId: elementId\n });\n\n dimension.bind(CHANGE, function() {\n scrollBar.refresh();\n });\n\n paneAxis.bind(CHANGE, function() {\n scrollBar.show();\n });\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\n ui.plugin(Scroller);\n })(window.kendo.jQuery);\n\n var __meta__$U = {\n id: \"popup\",\n name: \"Pop-up\",\n category: \"framework\",\n depends: [ \"core\" ],\n advanced: true\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n ui = kendo.ui,\n Widget = ui.Widget,\n Class = kendo.Class,\n support = kendo.support,\n getOffset = kendo.getOffset,\n outerWidth = kendo._outerWidth,\n outerHeight = kendo._outerHeight,\n OPEN = \"open\",\n CLOSE = \"close\",\n DEACTIVATE = \"deactivate\",\n ACTIVATE = \"activate\",\n CENTER = \"center\",\n LEFT = \"left\",\n RIGHT = \"right\",\n TOP = \"top\",\n BOTTOM = \"bottom\",\n ABSOLUTE = \"absolute\",\n HIDDEN = \"hidden\",\n BODY = \"body\",\n LOCATION = \"location\",\n POSITION = \"position\",\n VISIBLE = \"visible\",\n EFFECTS = \"effects\",\n ACTIVE = \"k-active\",\n ACTIVEBORDER = \"k-state-border\",\n ACTIVEBORDERREGEXP = /k-state-border-(\\w+)/,\n ACTIVECHILDREN = \".k-picker-wrap, .k-dropdown-wrap, .k-link\",\n MOUSEDOWN = \"down\",\n DOCUMENT_ELEMENT = $(document.documentElement),\n WINDOW = $(window),\n SCROLL = \"scroll\",\n cssPrefix = support.transitions.css,\n TRANSFORM = cssPrefix + \"transform\",\n extend = $.extend,\n NS = \".kendoPopup\",\n styles = [\"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\n var Popup = Widget.extend({\n init: function(element, options) {\n var that = this, parentPopup;\n\n options = options || {};\n\n if (options.isRtl) {\n options.origin = options.origin || BOTTOM + \" \" + RIGHT;\n options.position = options.position || TOP + \" \" + RIGHT;\n }\n\n Widget.fn.init.call(that, element, options);\n\n element = that.element;\n options = that.options;\n\n that.collisions = options.collision ? options.collision.split(\" \") : [];\n that.downEvent = kendo.applyEventMap(MOUSEDOWN, kendo.guid());\n\n if (that.collisions.length === 1) {\n that.collisions.push(that.collisions[0]);\n }\n\n parentPopup = $(that.options.anchor).closest(\".k-popup,.k-group\").filter(\":not([class^=km-])\"); // When popup is in another popup, make it relative.\n\n options.appendTo = $($(options.appendTo)[0] || parentPopup[0] || document.body);\n\n that.element.hide()\n .addClass(\"k-popup k-group k-reset\")\n .toggleClass(\"k-rtl\", !!options.isRtl)\n .css({ position: ABSOLUTE })\n .appendTo(options.appendTo)\n .attr(\"aria-hidden\", true)\n .on(\"mouseenter\" + NS, function() {\n that._hovered = true;\n })\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) ||\n (scrollArea.scrollTop() === scrollArea.prop('scrollHeight') - scrollArea.prop('offsetHeight') && e.originalEvent.deltaY > 0))) {\n e.preventDefault();\n }\n })\n .on(\"mouseleave\" + NS, function() {\n that._hovered = false;\n });\n\n that.wrapper = $();\n\n if (options.animation === false) {\n options.animation = { open: { effects: {} }, close: { hide: true, effects: {} } };\n }\n\n extend(options.animation.open, {\n complete: function() {\n that.wrapper.css({ overflow: VISIBLE }); // Forcing refresh causes flickering in mobile.\n that._activated = true;\n that._trigger(ACTIVATE);\n }\n });\n\n extend(options.animation.close, {\n complete: function() {\n that._animationClose();\n }\n });\n\n that._mousedownProxy = function(e) {\n that._mousedown(e);\n };\n\n if (support.mobileOS.android) {\n that._resizeProxy = function(e) {\n setTimeout(function() {\n that._resize(e);\n }, 600); //Logic from kendo.onResize\n };\n } else {\n that._resizeProxy = function(e) {\n that._resize(e);\n };\n }\n\n if (options.toggleTarget) {\n $(options.toggleTarget).on(options.toggleEvent + NS, that.toggle.bind(that));\n }\n },\n\n events: [\n OPEN,\n ACTIVATE,\n CLOSE,\n DEACTIVATE\n ],\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: { // if close animation effects are defined, they will be used instead of open.reverse\n duration: 100,\n hide: true\n }\n },\n omitOriginOffsets: false\n },\n\n _animationClose: function() {\n var that = this;\n var location = that.wrapper.data(LOCATION);\n\n that.wrapper.hide();\n\n if (location) {\n that.wrapper.css(location);\n }\n\n if (that.options.anchor != BODY) {\n that._hideDirClass();\n }\n\n that._closing = false;\n that._trigger(DEACTIVATE);\n },\n\n destroy: function() {\n var that = this,\n options = that.options,\n element = that.element.off(NS),\n parent;\n\n Widget.fn.destroy.call(that);\n\n if (options.toggleTarget) {\n $(options.toggleTarget).off(NS);\n }\n\n if (!options.modal) {\n DOCUMENT_ELEMENT.off(that.downEvent, that._mousedownProxy);\n that._toggleResize(false);\n }\n\n kendo.destroy(that.element.children());\n element.removeData();\n\n if (options.appendTo[0] === document.body) {\n parent = element.parent(\".k-animation-container\");\n\n if (parent[0]) {\n parent.remove();\n } else {\n element.remove();\n }\n }\n },\n\n open: function(x, y) {\n var that = this,\n fixed = { isFixed: !isNaN(parseInt(y,10)), x: x, y: y },\n element = that.element,\n options = that.options,\n animation, wrapper,\n anchor = $(options.anchor),\n mobile = element[0] && element.hasClass(\"km-widget\"),\n listbox = element.find(\"[role='listbox']\");\n\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\n if (element.data(\"animating\") || that._trigger(OPEN)) {\n return;\n }\n\n that._activated = false;\n\n if (!options.modal) {\n DOCUMENT_ELEMENT.off(that.downEvent, that._mousedownProxy)\n .on(that.downEvent, that._mousedownProxy);\n\n // this binding hangs iOS in editor\n // all elements in IE7/8 fire resize event, causing mayhem\n that._toggleResize(false);\n that._toggleResize(true);\n }\n\n that.wrapper = wrapper = kendo.wrap(element, options.autosize)\n .css({\n overflow: HIDDEN,\n display: \"block\",\n position: ABSOLUTE\n })\n .attr(\"aria-hidden\", false);\n\n if (listbox.attr(\"aria-label\")) {\n wrapper.attr(\"aria-label\", listbox.attr(\"aria-label\"));\n } else if (listbox.attr(\"aria-labelledby\")) {\n wrapper.attr(\"aria-labelledby\", listbox.attr(\"aria-labelledby\"));\n }\n\n if (support.mobileOS.android) {\n wrapper.css(TRANSFORM, \"translatez(0)\"); // Android is VERY slow otherwise. Should be tested in other droids as well since it may cause blur.\n }\n\n wrapper.css(POSITION);\n\n if ($(options.appendTo)[0] == document.body) {\n wrapper.css(TOP, \"-10000px\");\n }\n\n that.flipped = that._position(fixed);\n animation = that._openAnimation();\n\n if (options.anchor != BODY) {\n that._showDirClass(animation);\n }\n\n if (!element.is(\":visible\") && element.data(\"olddisplay\") === undefined$1) {\n element.show();\n element.data(\"olddisplay\", element.css(\"display\"));\n element.hide();\n }\n\n element.data(EFFECTS, animation.effects)\n .kendoStop(true)\n .kendoAnimate(animation)\n .attr(\"aria-hidden\", false);\n }\n },\n\n _location: function(isFixed) {\n var that = this,\n element = that.element,\n options = that.options,\n wrapper,\n anchor = $(options.anchor),\n mobile = element[0] && element.hasClass(\"km-widget\");\n\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\n that.wrapper = wrapper = kendo.wrap(element, options.autosize)\n .css({\n overflow: HIDDEN,\n display: \"block\",\n position: ABSOLUTE\n });\n\n if (support.mobileOS.android) {\n wrapper.css(TRANSFORM, \"translatez(0)\"); // Android is VERY slow otherwise. Should be tested in other droids as well since it may cause blur.\n }\n\n wrapper.css(POSITION);\n\n if ($(options.appendTo)[0] == document.body) {\n wrapper.css(TOP, \"-10000px\");\n }\n\n that._position(isFixed || {});\n\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\n _openAnimation: function() {\n var animation = extend(true, {}, this.options.animation.open);\n animation.effects = kendo.parseEffects(animation.effects, this.flipped);\n\n return animation;\n },\n\n _hideDirClass: function() {\n var anchor = $(this.options.anchor);\n var direction = ((anchor.attr(\"class\") || \"\").match(ACTIVEBORDERREGEXP) || [\"\", \"down\"])[1];\n var dirClass = ACTIVEBORDER + \"-\" + direction;\n\n anchor\n .removeClass(dirClass)\n .children(ACTIVECHILDREN)\n .removeClass(ACTIVE)\n .removeClass(dirClass);\n\n this.element.removeClass(ACTIVEBORDER + \"-\" + kendo.directions[direction].reverse);\n },\n\n _showDirClass: function(animation) {\n var direction = animation.effects.slideIn ? animation.effects.slideIn.direction : \"down\";\n var dirClass = ACTIVEBORDER + \"-\" + direction;\n\n $(this.options.anchor)\n .addClass(dirClass)\n .children(ACTIVECHILDREN)\n .addClass(ACTIVE)\n .addClass(dirClass);\n\n this.element.addClass(ACTIVEBORDER + \"-\" + kendo.directions[direction].reverse);\n },\n\n position: function() {\n if (this.visible()) {\n this.flipped = this._position();\n //this._hideDirClass();\n //this._showDirClass(this._openAnimation());\n }\n },\n\n toggle: function() {\n var that = this;\n\n that[that.visible() ? CLOSE : OPEN]();\n },\n\n visible: function() {\n return this.element.is(\":\" + VISIBLE);\n },\n\n close: function(skipEffects) {\n var that = this,\n options = that.options, wrap,\n animation, openEffects, closeEffects;\n\n if (that.visible()) {\n wrap = (that.wrapper[0] ? that.wrapper : kendo.wrap(that.element).hide());\n\n that._toggleResize(false);\n\n if (that._closing || that._trigger(CLOSE)) {\n that._toggleResize(true);\n return;\n }\n\n // Close all inclusive popups.\n that.element.find(\".k-popup\").each(function() {\n var that = $(this),\n popup = that.data(\"kendoPopup\");\n\n if (popup) {\n popup.close(skipEffects);\n }\n });\n\n DOCUMENT_ELEMENT.off(that.downEvent, that._mousedownProxy);\n\n if (skipEffects) {\n animation = { hide: true, effects: {} };\n } else {\n animation = extend(true, {}, options.animation.close);\n openEffects = that.element.data(EFFECTS);\n closeEffects = animation.effects;\n\n if (!closeEffects && !kendo.size(closeEffects) && openEffects && kendo.size(openEffects)) {\n animation.effects = openEffects;\n animation.reverse = true;\n }\n\n that._closing = true;\n }\n\n that.element\n .kendoStop(true)\n .attr(\"aria-hidden\", true);\n wrap\n .css({ overflow: HIDDEN }) // stop callback will remove hidden overflow\n .attr(\"aria-hidden\", true);\n that.element.kendoAnimate(animation);\n\n if (skipEffects) {\n that._animationClose();\n }\n }\n },\n\n _trigger: function(ev) {\n return this.trigger(ev, { type: ev });\n },\n\n _resize: function(e) {\n var that = this;\n\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.find(\".k-list\").length > 0)) {\n that.close();\n }\n }\n },\n\n _toggleResize: function(toggle) {\n var method = toggle ? \"on\" : \"off\";\n var eventNames = support.resize;\n\n if (!(support.mobileOS.ios || support.mobileOS.android || support.browser.safari)) {\n eventNames += \" \" + SCROLL;\n }\n\n if (toggle && !this.scrollableParents) {\n this.scrollableParents = this._scrollableParents();\n }\n\n if (this.scrollableParents && this.scrollableParents.length) {\n this.scrollableParents[method](SCROLL, this._resizeProxy);\n }\n\n WINDOW[method](eventNames, this._resizeProxy);\n },\n\n _mousedown: function(e) {\n var that = this,\n container = that.element[0],\n options = that.options,\n anchor = $(options.anchor)[0],\n toggleTarget = options.toggleTarget,\n target = kendo.eventTarget(e),\n popup = $(target).closest(\".k-popup\"),\n mobile = popup.parent().parent(\".km-shim\").length;\n\n popup = popup[0];\n if (!mobile && popup && popup !== that.element[0]) {\n return;\n }\n\n // This MAY result in popup not closing in certain cases.\n if ($(e.target).closest(\"a\").data(\"rel\") === \"popover\") {\n return;\n }\n\n if (!contains(container, target) && !contains(anchor, target) && !(toggleTarget && contains($(toggleTarget)[0], target))) {\n that.close();\n }\n },\n\n _fit: function(position, size, viewPortSize) {\n var output = 0;\n\n if (position + size > viewPortSize) {\n output = viewPortSize - (position + size);\n }\n\n if (position < 0) {\n output = -position;\n }\n\n return output;\n },\n\n _flip: function(offset, size, anchorSize, viewPortSize, origin, position, boxSize) {\n var output = 0;\n boxSize = boxSize || size;\n\n if (position !== origin && position !== CENTER && origin !== CENTER) {\n if (offset + boxSize > viewPortSize) {\n output += -(anchorSize + size);\n }\n\n if (offset + output < 0) {\n output += anchorSize + size;\n }\n }\n return output;\n },\n\n _scrollableParents: function() {\n return $(this.options.anchor)\n .parentsUntil(\"body\")\n .filter(function(index, element) {\n return kendo.isScrollable(element);\n });\n },\n\n _position: function(fixed) {\n var that = this,\n //element = that.element.css(POSITION, \"\"), /* fixes telerik/kendo-ui-core#790, comes from telerik/kendo#615 */\n element = that.element,\n wrapper = that.wrapper,\n options = that.options,\n viewport = $(options.viewport),\n zoomLevel = support.zoomLevel(),\n isWindow = !!((viewport[0] == window) && window.innerWidth && (zoomLevel <= 1.02)),\n anchor = $(options.anchor),\n origins = options.origin.toLowerCase().split(\" \"),\n positions = options.position.toLowerCase().split(\" \"),\n collisions = that.collisions,\n siblingContainer, parents,\n parentZIndex, zIndex = 10002,\n idx = 0,\n docEl = document.documentElement,\n length, viewportOffset, viewportWidth, viewportHeight;\n\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\n if (isWindow) {\n viewportWidth = window.innerWidth;\n viewportHeight = window.innerHeight;\n } else {\n viewportWidth = viewport.width();\n viewportHeight = viewport.height();\n }\n\n if (isWindow && docEl.scrollHeight - docEl.clientHeight > 0) {\n var sign = options.isRtl ? -1 : 1;\n\n viewportWidth -= sign * kendo.support.scrollbar();\n }\n\n siblingContainer = anchor.parents().filter(wrapper.siblings());\n\n if (siblingContainer[0]) {\n parentZIndex = Math.max(Number(siblingContainer.css(\"zIndex\")), 0);\n\n // set z-index to be more than that of the container/sibling\n // compensate with more units for window z-stack\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\n wrapper.css(\"zIndex\", zIndex);\n\n if (fixed && fixed.isFixed) {\n wrapper.css({ left: fixed.x, top: fixed.y });\n } else {\n wrapper.css(that._align(origins, positions));\n }\n\n var pos = getOffset(wrapper, POSITION, anchor[0] === wrapper.offsetParent()[0]),\n offset = getOffset(wrapper),\n anchorParent = anchor.offsetParent().parent(\".k-animation-container,.k-popup,.k-group\"); // If the parent is positioned, get the current positions\n\n if (anchorParent.length) {\n pos = getOffset(wrapper, POSITION, true);\n offset = getOffset(wrapper);\n }\n\n offset.top -= viewportOffset.top;\n offset.left -= viewportOffset.left;\n\n if (!that.wrapper.data(LOCATION)) { // Needed to reset the popup location after every closure - fixes the resize bugs.\n wrapper.data(LOCATION, extend({}, pos));\n }\n\n var offsets = extend({}, offset),\n location = extend({}, pos),\n adjustSize = options.adjustSize;\n\n if (collisions[0] === \"fit\") {\n location.top += that._fit(offsets.top, outerHeight(wrapper) + adjustSize.height, viewportHeight / zoomLevel);\n }\n\n if (collisions[1] === \"fit\") {\n location.left += that._fit(offsets.left, outerWidth(wrapper) + adjustSize.width, viewportWidth / zoomLevel);\n }\n\n var flipPos = extend({}, location);\n var elementHeight = outerHeight(element);\n var wrapperHeight = outerHeight(wrapper);\n\n if (!wrapper.height() && elementHeight) {\n wrapperHeight = wrapperHeight + elementHeight;\n }\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\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\n element.css(POSITION, ABSOLUTE);\n wrapper.css(location);\n\n return (location.left != flipPos.left || location.top != flipPos.top);\n },\n\n _align: function(origin, position) {\n var that = this,\n element = that.wrapper,\n anchor = $(that.options.anchor),\n verticalOrigin = origin[0],\n horizontalOrigin = origin[1],\n verticalPosition = position[0],\n horizontalPosition = position[1],\n anchorOffset = getOffset(anchor),\n appendTo = $(that.options.appendTo),\n appendToOffset,\n width = outerWidth(element),\n height = outerHeight(element) || outerHeight(element.children().first()),\n anchorWidth = outerWidth(anchor),\n anchorHeight = outerHeight(anchor),\n top = that.options.omitOriginOffsets ? 0 : anchorOffset.top,\n left = that.options.omitOriginOffsets ? 0 : anchorOffset.left,\n round = Math.round;\n\n if (appendTo[0] != document.body) {\n appendToOffset = getOffset(appendTo);\n top -= appendToOffset.top;\n left -= appendToOffset.left;\n }\n\n\n if (verticalOrigin === BOTTOM) {\n top += anchorHeight;\n }\n\n if (verticalOrigin === CENTER) {\n top += round(anchorHeight / 2);\n }\n\n if (verticalPosition === BOTTOM) {\n top -= height;\n }\n\n if (verticalPosition === CENTER) {\n top -= round(height / 2);\n }\n\n if (horizontalOrigin === RIGHT) {\n left += anchorWidth;\n }\n\n if (horizontalOrigin === CENTER) {\n left += round(anchorWidth / 2);\n }\n\n if (horizontalPosition === RIGHT) {\n left -= width;\n }\n\n if (horizontalPosition === CENTER) {\n left -= round(width / 2);\n }\n\n return {\n top: top,\n left: left\n };\n }\n });\n\n ui.plugin(Popup);\n\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\n trap: function() {\n this.element.on(\"keydown\", this._keepInTrap.bind(this));\n },\n\n removeTrap: function() {\n this.element.kendoDestroy(tabKeyTrapNS);\n },\n\n destroy: function() {\n this.element.kendoDestroy(tabKeyTrapNS);\n this.element = undefined$1;\n },\n\n shouldTrap: function() {\n return true;\n },\n\n _keepInTrap: function(e) {\n if (e.which !== 9 || !this.shouldTrap() || e.isDefaultPrevented()) {\n return;\n }\n\n var elements = this._focusableElements();\n var sortedElements = this._sortFocusableElements(elements);\n var next = this._nextFocusable(e, sortedElements);\n\n this._focus(next);\n\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\n if (this.element.is(\"[tabindex]\")) {\n elements.push(this.element[0]);\n }\n\n return elements;\n },\n _sortFocusableElements: function(elements) {\n var sortedElements;\n\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\n sortedElements = elements.sort(function(prev, next) {\n return prev.tabIndex === next.tabIndex ?\n parseInt(prev.getAttribute(attrName), 10) - parseInt(next.getAttribute(attrName), 10) :\n prev.tabIndex - next.tabIndex;\n });\n\n elements.removeAttr(attrName);\n }\n\n return sortedElements;\n },\n _nextFocusable: function(e, elements) {\n var count = elements.length;\n var current = elements.index(e.target);\n\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\n element.focus();\n\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\n return elementType === \"text\" || elementType === \"search\" ||\n elementType === \"url\" || elementType === \"tel\" ||\n elementType === \"password\";\n }\n });\n ui.Popup.TabKeyTrap = TabKeyTrap;\n })(window.kendo.jQuery);\n\n var __meta__$T = {\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: [ \"core\", \"popup\" ],\n features: [ {\n id: \"tooltip-fx\",\n name: \"Animation\",\n description: \"Support for animation\",\n depends: [ \"fx\" ]\n } ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n Widget = kendo.ui.Widget,\n Popup = kendo.ui.Popup,\n isFunction = kendo.isFunction,\n isPlainObject = $.isPlainObject,\n extend = $.extend,\n DOCUMENT = $(document),\n isLocalUrl = kendo.isLocalUrl,\n ARIAIDSUFFIX = \"_tb_active\",\n DESCRIBEDBY = \"aria-describedby\",\n SHOW = \"show\",\n HIDE = \"hide\",\n ERROR = \"error\",\n CONTENTLOAD = \"contentLoad\",\n REQUESTSTART = \"requestStart\",\n KCONTENTFRAME = \"k-content-frame\",\n TEMPLATE = '
    ' +\n '
    ' +\n '#if (!autoHide) {#
    #}#' +\n '#if (callout){ #
    #}#' +\n '
    ',\n IFRAMETEMPLATE = kendo.template(\n \"\"\n ),\n NS = \".kendoTooltip\",\n 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 },\n REVERSE = {\n \"top\": \"bottom\",\n \"bottom\": \"top\",\n \"left\": \"right\",\n \"right\": \"left\",\n \"center\": \"center\"\n },\n DIRCLASSES = {\n bottom: \"n\",\n top: \"s\",\n left: \"e\",\n right: \"w\",\n center: \"n\"\n },\n DIMENSIONS = {\n \"horizontal\": { offset: \"top\", size: \"outerHeight\" },\n \"vertical\": { offset: \"left\", size: \"outerWidth\" }\n },\n DEFAULTCONTENT = function(e) {\n return e.target.data(kendo.ns + \"title\");\n };\n\n function restoreTitle(element) {\n while (element.length) {\n if (restoreTitleAttributeForElement(element)) {\n break;\n }\n element = element.parent();\n }\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\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\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\n var TooltipBase = Widget.extend({\n init: function(element, options) {\n var that = this,\n axis;\n\n Widget.fn.init.call(that, element, options);\n\n axis = that.options.position.match(/left|right/) ? \"horizontal\" : \"vertical\";\n\n that.dimensions = DIMENSIONS[axis];\n\n if (kendo.support.touch && this._isShownOnMouseEnter()) {\n that.element.on(kendo.support.mousedown + NS, that.options.filter, that._showOn.bind(that));\n }\n\n that.element.on(that.options.showOn + NS, that.options.filter, that._showOn.bind(that));\n\n if (that.options.showOn === \"click\") {\n that.element.on(\"keydown\" + NS, that.options.filter, that._keydown.bind(that));\n }\n },\n\n options: {\n name: \"TooltipBase\",\n filter: \"\",\n offset: 0,\n showAfter: 100,\n hideAfter: 100,\n callout: true,\n position: \"bottom\",\n showOn: \"mouseenter\",\n animation: {\n open: {\n effects: \"fade:in\",\n duration: 0\n },\n close: {\n duration: 40,\n hide: true\n }\n }\n },\n\n destroy: function() {\n var popup = this.popup;\n\n if (popup) {\n popup.element.off(NS);\n popup.destroy();\n }\n\n clearTimeout(this.timeout);\n\n Widget.fn.destroy.call(this);\n },\n\n hide: function() {\n if (this.popup) {\n this.popup.close();\n }\n },\n\n show: function(target) {\n target = target || this.element;\n\n this._saveTitle(target);\n this._show(target);\n },\n\n target: function() {\n if (this.popup) {\n return this.popup.options.anchor;\n }\n return null;\n },\n\n _keydown: function(e) {\n var currentTarget = $(e.currentTarget);\n\n if (e.keyCode == kendo.keys.ENTER) {\n this._show(currentTarget);\n }\n },\n\n _showOn: function(e) {\n var that = this;\n\n var currentTarget = $(e.currentTarget);\n if (that._isShownOnClick() && !that._isShownOnMouseEnter()) {\n that._show(currentTarget);\n } else if (that._isShownOnFocus()) {\n that._saveTitle(currentTarget);\n that._show(currentTarget);\n } else {\n clearTimeout(that.timeout);\n\n that.timeout = setTimeout(function() {\n that._show(currentTarget);\n }, that.options.showAfter);\n }\n },\n\n _isShownOnFocus: function() {\n return this.options.showOn && this.options.showOn.match(/focus/);\n },\n\n _isShownOnMouseEnter: function() {\n return this.options.showOn && this.options.showOn.match(/mouseenter/);\n },\n\n _isShownOnClick: function() {\n return this.options.showOn && this.options.showOn.match(/click/);\n },\n\n _positionCallout: function() {\n var that = this,\n position = that.options.position,\n dimensions = that.dimensions,\n offset = dimensions.offset,\n popup = that.popup,\n anchor = popup.options.anchor,\n anchorOffset = $(anchor).offset(),\n elementOffset = $(popup.element).offset(),\n cssClass = DIRCLASSES[popup.flipped ? REVERSE[position] : position],\n offsetAmount = anchorOffset[offset] - elementOffset[offset] + ($(anchor)[dimensions.size]() / 2);\n\n that._offset(position, that.options.offset);\n\n that.arrow\n .removeClass(\"k-callout-n k-callout-s k-callout-w k-callout-e\")\n .addClass(\"k-callout-\" + cssClass)\n .css(offset, offsetAmount);\n },\n\n _offset: function(position, offsetAmount, arrowWidth) {\n var that = this,\n isTopLeft = position == \"top\" || position == \"left\",\n isFlipped = that.popup.flipped,\n direction = (isTopLeft && isFlipped) || (!isTopLeft && !isFlipped) ? 1 : -1,\n marginRule = isTopLeft ? \"margin-\" + position : \"margin-\" + REVERSE[position],\n offset = ((arrowWidth || kendo._outerWidth(that.arrow)) / 2) + offsetAmount;\n\n that.popup.wrapper.css(marginRule, offset * direction + \"px\");\n },\n\n _addDescribedBy: function() {\n var that = this,\n anchor = that.popup.options.anchor,\n ariaId = anchor[0].id || that.element[0].id || kendo.guid(),\n describedBy = [];\n\n if (anchor.attr(DESCRIBEDBY)) {\n describedBy.push(anchor.attr(DESCRIBEDBY));\n }\n\n if (ariaId) {\n describedBy.push(ariaId + ARIAIDSUFFIX);\n anchor.attr(DESCRIBEDBY, describedBy.join(\" \"));\n that.popup.element.attr(\"id\", ariaId + ARIAIDSUFFIX);\n }\n\n },\n\n _removeDescribedBy: function(target) {\n var tooltipId = this.popup.element.attr(\"id\"),\n currentDescribedBy = target.attr(DESCRIBEDBY),\n arrayAttr, finalArray, finalDescribedbyAttr;\n\n if (!currentDescribedBy) {\n return;\n }\n\n arrayAttr = currentDescribedBy.split(\" \");\n\n if (arrayAttr && arrayAttr.length > 0) {\n finalArray = arrayAttr.filter(function(val) {\n return val !== tooltipId;\n });\n }\n\n if (finalArray && finalArray.length > 0) {\n finalDescribedbyAttr = finalArray.join(\" \");\n target.attr(DESCRIBEDBY, finalDescribedbyAttr);\n } else {\n target.removeAttr(DESCRIBEDBY);\n }\n },\n\n _openPopup: function() {\n if (!this.popup) {\n return;\n }\n\n this.popup._hovered = true;\n this.popup.open();\n }\n });\n kendo.ui.plugin(TooltipBase);\n\n var Tooltip = TooltipBase.extend({\n init: function(element, options) {\n var that = this,\n axis;\n\n TooltipBase.fn.init.call(that, element, options);\n\n axis = that.options.position.match(/left|right/) ? \"horizontal\" : \"vertical\";\n\n that.dimensions = DIMENSIONS[axis];\n\n that._documentKeyDownHandler = that._documentKeyDown.bind(that);\n\n if (this._isShownOnMouseEnter() || this._isShownOnClick()) {\n that.element.on(\"mouseenter\" + NS, that.options.filter, that._mouseenter.bind(that));\n }\n\n if (this.options.autoHide && this._isShownOnMouseEnter()) {\n that.element.on(\"mouseleave\" + NS, that.options.filter, that._mouseleave.bind(that));\n }\n\n if (this.options.autoHide && this._isShownOnFocus()) {\n that.element.on(\"blur\" + NS, that.options.filter, that._blur.bind(that));\n }\n\n if (kendo.support.touch) {\n that.element.on(kendo.support.mousedown + NS, that.options.filter, that._mouseenter.bind(that));\n }\n },\n\n options: {\n name: \"Tooltip\",\n filter: \"\",\n content: DEFAULTCONTENT,\n showAfter: 100,\n callout: true,\n offset: 0,\n position: \"bottom\",\n showOn: \"mouseenter\",\n autoHide: true,\n width: null,\n height: null,\n animation: {\n open: {\n effects: \"fade:in\",\n duration: 0\n },\n close: {\n duration: 40,\n hide: true\n }\n }\n },\n\n events: [ SHOW, HIDE, CONTENTLOAD, ERROR, REQUESTSTART ],\n\n _mouseenter: function(e) {\n saveTitleAttributes($(e.currentTarget));\n },\n\n _saveTitle: function(target) {\n saveTitleAttributes(target);\n },\n\n _appendContent: function(target) {\n var that = this,\n contentOptions = that.options.content,\n element = that.content,\n showIframe = that.options.iframe,\n iframe;\n\n if (isPlainObject(contentOptions) && contentOptions.url) {\n if (!(\"iframe\" in that.options)) {\n showIframe = !isLocalUrl(contentOptions.url);\n }\n\n that.trigger(REQUESTSTART, { options: contentOptions, target: target });\n\n if (!showIframe) {\n element.empty();\n kendo.ui.progress(element, true);\n\n // perform AJAX request\n that._ajaxRequest(contentOptions);\n } else {\n element.hide();\n\n iframe = element.find(\".\" + KCONTENTFRAME)[0];\n\n if (iframe) {\n // refresh existing iframe\n iframe.src = contentOptions.url || iframe.src;\n } else {\n element.html(IFRAMETEMPLATE({ content: contentOptions }));\n }\n\n element.find(\".\" + KCONTENTFRAME)\n .off(\"load\" + NS)\n .on(\"load\" + NS, function() {\n that.trigger(CONTENTLOAD);\n element.show();\n });\n }\n } else if (contentOptions && isFunction(contentOptions)) {\n contentOptions = contentOptions({ sender: this, target: target });\n element.html(contentOptions || \"\");\n } else {\n element.html(contentOptions);\n }\n\n that.angular(\"compile\", function() {\n return { elements: element };\n });\n },\n\n _ajaxRequest: function(options) {\n var that = this,\n successFn = function(data) {\n kendo.ui.progress(that.content, false);\n\n that.content.html(data);\n\n if (kendo._outerHeight(that.popup.element) > kendo._outerHeight(that.popup.wrapper)) {\n that.popup.wrapper.css(\"height\", kendo._outerHeight(that.popup.element) + \"px\");\n that.popup.position();\n that._positionCallout();\n }\n\n that.trigger(CONTENTLOAD);\n };\n\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\n that.trigger(ERROR, { status: status, xhr: xhr });\n },\n success: successFn.bind(that)\n }, options));\n },\n\n _documentKeyDown: function(e) {\n if (e.keyCode === kendo.keys.ESC) {\n this.hide();\n }\n },\n\n refresh: function() {\n var that = this,\n popup = that.popup;\n\n if (popup && popup.options.anchor) {\n that._appendContent(popup.options.anchor);\n }\n },\n\n _show: function(target) {\n var that = this,\n current = that.target();\n\n if (!that.popup) {\n that._initPopup();\n }\n\n if (current && current[0] != target[0]) {\n that.popup.close();\n that.popup.element.kendoStop(true, true);// animation can be too long to hide the element before it is shown again\n }\n\n if (!current || current[0] != target[0]) {\n that._appendContent(target);\n that.popup.options.anchor = target;\n }\n\n that.popup.one(\"deactivate\", function() {\n restoreTitle(target);\n\n that._removeDescribedBy(target);\n\n this.element\n .removeAttr(\"id\")\n .attr(\"aria-hidden\", true);\n\n DOCUMENT.off(\"keydown\" + NS, that._documentKeyDownHandler);\n });\n\n that._openPopup();\n },\n\n _initPopup: function() {\n var that = this,\n options = that.options,\n wrapper = $(kendo.template(TEMPLATE)({\n callout: options.callout && options.position !== \"center\",\n dir: DIRCLASSES[options.position],\n autoHide: options.autoHide\n }));\n\n that.popup = new Popup(wrapper, extend({\n autosize: true,\n activate: function() {\n that._addDescribedBy();\n\n if (options.callout) {\n that._positionCallout();\n } else {\n that._offset(that.options.position, that.options.offset);\n }\n\n this.element.removeAttr(\"aria-hidden\");\n\n DOCUMENT.on(\"keydown\" + NS, that._documentKeyDownHandler);\n\n that.trigger(SHOW);\n that.popup._hovered = undefined$1;\n },\n close: function() {\n that.trigger(HIDE);\n },\n copyAnchorStyles: false,\n animation: options.animation\n }, POSITIONS[options.position]));\n\n wrapper.css({\n width: options.width,\n height: options.height\n });\n\n that.content = wrapper.find(\".k-tooltip-content\");\n that.arrow = wrapper.find(\".k-callout\");\n\n if (options.autoHide && this._isShownOnMouseEnter()) {\n wrapper.on(\"mouseleave\" + NS, that._mouseleave.bind(that));\n } else {\n wrapper.on(\"click\" + NS, \".k-tooltip-button\", that._closeButtonClick.bind(that));\n }\n },\n\n _closeButtonClick: function(e) {\n e.preventDefault();\n this.hide();\n },\n\n _mouseleave: function(e) {\n var that = this;\n\n clearTimeout(that.timeout);\n\n that.timeout = setTimeout(function() {\n that._closePopup(e.currentTarget);\n }, that.options.hideAfter);\n },\n\n _blur: function(e) {\n this._closePopup(e.currentTarget);\n },\n\n _closePopup: function(target) {\n if (this.popup && !this.popup._hovered) {\n this.popup.close();\n } else {\n restoreTitle($(target));\n }\n },\n\n destroy: function() {\n this.element.off(NS);\n\n DOCUMENT.off(\"keydown\" + NS, this._documentKeyDownHandler);\n\n TooltipBase.fn.destroy.call(this);\n }\n });\n\n kendo.ui.plugin(Tooltip);\n })(window.kendo.jQuery);\n\n (function($) {\n\n function createPromise() {\n return $.Deferred();\n }\n\n function promiseAll(promises) {\n return $.when.apply($, promises);\n }\n\n function extendStatic(dest, src) {\n if (!src) {\n return;\n }\n\n if (typeof src.__proto__ === 'function') {\n dest.__proto__ = src;\n } else {\n for (var member in src) {\n if (src.hasOwnProperty(member)) {\n dest[member] = src[member];\n }\n }\n }\n }\n\n kendo.drawing.util = kendo.drawing.util || {};\n kendo.deepExtend(kendo.drawing.util, {\n createPromise: createPromise,\n promiseAll: promiseAll,\n extendStatic: extendStatic\n });\n\n })(window.kendo.jQuery);\n\n /***********************************************************************\n * WARNING: this file is auto-generated. If you change it directly,\n * your modifications will eventually be lost. The source code is in\n * `kendo-drawing` repository, you should make your changes there and\n * run `src-modules/sync.sh` in this repository.\n */\n /* eslint-disable space-before-blocks, space-before-function-paren, no-multi-spaces */\n\n var __meta__$S = {\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\n window.kendo = window.kendo || {};\n\n var Class = kendo.Class;\n var support = kendo.support;\n\n var namedColors = {\n aliceblue: \"f0f8ff\", antiquewhite: \"faebd7\", aqua: \"00ffff\",\n aquamarine: \"7fffd4\", azure: \"f0ffff\", beige: \"f5f5dc\",\n bisque: \"ffe4c4\", black: \"000000\", blanchedalmond: \"ffebcd\",\n blue: \"0000ff\", blueviolet: \"8a2be2\", brown: \"a52a2a\",\n burlywood: \"deb887\", cadetblue: \"5f9ea0\", chartreuse: \"7fff00\",\n chocolate: \"d2691e\", coral: \"ff7f50\", cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\", crimson: \"dc143c\", cyan: \"00ffff\",\n darkblue: \"00008b\", darkcyan: \"008b8b\", darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\", darkgrey: \"a9a9a9\", darkgreen: \"006400\",\n darkkhaki: \"bdb76b\", darkmagenta: \"8b008b\", darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\", darkorchid: \"9932cc\", darkred: \"8b0000\",\n darksalmon: \"e9967a\", darkseagreen: \"8fbc8f\", darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\", darkslategrey: \"2f4f4f\", darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\", deeppink: \"ff1493\", deepskyblue: \"00bfff\",\n dimgray: \"696969\", dimgrey: \"696969\", dodgerblue: \"1e90ff\",\n firebrick: \"b22222\", floralwhite: \"fffaf0\", forestgreen: \"228b22\",\n fuchsia: \"ff00ff\", gainsboro: \"dcdcdc\", ghostwhite: \"f8f8ff\",\n gold: \"ffd700\", goldenrod: \"daa520\", gray: \"808080\",\n grey: \"808080\", green: \"008000\", greenyellow: \"adff2f\",\n honeydew: \"f0fff0\", hotpink: \"ff69b4\", indianred: \"cd5c5c\",\n indigo: \"4b0082\", ivory: \"fffff0\", khaki: \"f0e68c\",\n lavender: \"e6e6fa\", lavenderblush: \"fff0f5\", lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\", lightblue: \"add8e6\", lightcoral: \"f08080\",\n lightcyan: \"e0ffff\", lightgoldenrodyellow: \"fafad2\", lightgray: \"d3d3d3\",\n lightgrey: \"d3d3d3\", lightgreen: \"90ee90\", lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\", lightseagreen: \"20b2aa\", lightskyblue: \"87cefa\",\n lightslategray: \"778899\", lightslategrey: \"778899\", lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\", lime: \"00ff00\", limegreen: \"32cd32\",\n linen: \"faf0e6\", magenta: \"ff00ff\", maroon: \"800000\",\n mediumaquamarine: \"66cdaa\", mediumblue: \"0000cd\", mediumorchid: \"ba55d3\",\n mediumpurple: \"9370d8\", mediumseagreen: \"3cb371\", mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\", mediumturquoise: \"48d1cc\", mediumvioletred: \"c71585\",\n midnightblue: \"191970\", mintcream: \"f5fffa\", mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\", navajowhite: \"ffdead\", navy: \"000080\",\n oldlace: \"fdf5e6\", olive: \"808000\", olivedrab: \"6b8e23\",\n orange: \"ffa500\", orangered: \"ff4500\", orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\", palegreen: \"98fb98\", paleturquoise: \"afeeee\",\n palevioletred: \"d87093\", papayawhip: \"ffefd5\", peachpuff: \"ffdab9\",\n peru: \"cd853f\", pink: \"ffc0cb\", plum: \"dda0dd\",\n powderblue: \"b0e0e6\", purple: \"800080\", red: \"ff0000\",\n rosybrown: \"bc8f8f\", royalblue: \"4169e1\", saddlebrown: \"8b4513\",\n salmon: \"fa8072\", sandybrown: \"f4a460\", seagreen: \"2e8b57\",\n seashell: \"fff5ee\", sienna: \"a0522d\", silver: \"c0c0c0\",\n skyblue: \"87ceeb\", slateblue: \"6a5acd\", slategray: \"708090\",\n slategrey: \"708090\", snow: \"fffafa\", springgreen: \"00ff7f\",\n steelblue: \"4682b4\", tan: \"d2b48c\", teal: \"008080\",\n thistle: \"d8bfd8\", tomato: \"ff6347\", turquoise: \"40e0d0\",\n violet: \"ee82ee\", wheat: \"f5deb3\", white: \"ffffff\",\n whitesmoke: \"f5f5f5\", yellow: \"ffff00\", yellowgreen: \"9acd32\"\n };\n\n var browser = support.browser;\n\n var matchNamedColor = function (color) {\n var colorNames = Object.keys(namedColors);\n colorNames.push(\"transparent\");\n\n var regexp = new RegExp(\"^(\" + colorNames.join(\"|\") + \")(\\\\W|$)\", \"i\");\n matchNamedColor = function (color) { return regexp.exec(color); };\n\n return regexp.exec(color);\n };\n\n var BaseColor = Class.extend({\n init: function() { },\n\n toHSV: function() { return this; },\n\n toRGB: function() { return this; },\n\n toHex: function(options) { return this.toBytes().toHex(options); },\n\n toBytes: function() { return this; },\n\n toCss: function(options) { return \"#\" + this.toHex(options); },\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\n toDisplay: function() {\n if (browser.msie && browser.version < 9) {\n return this.toCss(); // no RGBA support; does it support any opacity in colors?\n }\n return this.toCssRgba();\n },\n\n equals: function(c) {\n return c === this || ((c !== null && c !== undefined) && this.toCssRgba() === parseColor(c).toCssRgba());\n },\n\n diff: function(other) {\n if (other === null) {\n return NaN;\n }\n\n var c1 = this.toBytes();\n var c2 = other.toBytes();\n\n return Math.sqrt(Math.pow((c1.r - c2.r) * 0.30, 2) +\n Math.pow((c1.g - c2.g) * 0.59, 2) +\n Math.pow((c1.b - c2.b) * 0.11, 2));\n },\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\n return c;\n }\n });\n\n var RGB = BaseColor.extend({\n init: function(r, g, b, a) {\n BaseColor.fn.init.call(this);\n\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n },\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\n if (delta === 0) {\n return new HSV(0, 0, v, this.a);\n }\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\n h *= 60;\n if (h < 0) {\n h += 360;\n }\n } else {\n s = 0;\n h = -1;\n }\n\n return new HSV(h, s, v, this.a);\n },\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\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: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n default: break;\n }\n }\n\n return new HSL(h * 60, s * 100, l * 100, this.a);\n },\n\n toBytes: function() {\n return new Bytes(this.r * 255, this.g * 255, this.b * 255, this.a);\n }\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\n toRGB: function() {\n return new RGB(this.r / 255, this.g / 255, this.b / 255, this.a);\n },\n\n toHSV: function() {\n return this.toRGB().toHSV();\n },\n\n toHSL: function() {\n return this.toRGB().toHSL();\n },\n\n toHex: function(options) {\n var value = hex(this.r, 2) + hex(this.g, 2) + hex(this.b, 2);\n\n if (options && options.alpha) {\n value += hex(Math.round(this.a * 255), 2);\n }\n\n return value;\n },\n\n toBytes: function() {\n return this;\n }\n });\n\n function hex(n, width, pad) {\n if (pad === void 0) { pad = \"0\"; }\n\n var result = n.toString(16);\n while (width > result.length) {\n result = pad + result;\n }\n\n return result;\n }\n\n var HSV = BaseColor.extend({\n init: function(h, s, v, a) {\n BaseColor.fn.init.call(this);\n\n this.h = h;\n this.s = s;\n this.v = v;\n this.a = a;\n },\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\n if (s === 0) {\n r = g = b = v;\n } else {\n h /= 60;\n\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\n switch (i) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n default: r = v; g = p; b = q; break;\n }\n }\n\n return new RGB(r, g, b, this.a);\n },\n\n toHSL: function() {\n return this.toRGB().toHSL();\n },\n\n toBytes: function() {\n return this.toRGB().toBytes();\n }\n });\n\n var HSL = BaseColor.extend({\n init: function(h, s, l, a) {\n BaseColor.fn.init.call(this);\n\n this.h = h;\n this.s = s;\n this.l = l;\n this.a = a;\n },\n\n toRGB: function() {\n var h = this.h / 360;\n var s = this.s / 100;\n var l = this.l / 100;\n var r, g, b;\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return new RGB(r, g, b, this.a);\n },\n\n toHSV: function() {\n return this.toRGB().toHSV();\n },\n\n toBytes: function() {\n return this.toRGB().toBytes();\n }\n });\n\n function hue2rgb(p, q, s) {\n var t = s;\n\n if (t < 0) {\n t += 1;\n }\n\n if (t > 1) {\n t -= 1;\n }\n\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n\n if (t < 1 / 2) {\n return q;\n }\n\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n\n return p;\n }\n\n function alphaFromHex(a) {\n return parseFloat(parseFloat(parseInt(a, 16) / 255 ).toFixed(3));\n }\n\n function parseColor(value, safe) {\n var m, ret;\n\n if (value == null || value === \"none\") {\n return null;\n }\n\n if (value instanceof BaseColor) {\n return value;\n }\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),\n parseInt(m[2], 16),\n 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),\n parseInt(m[2] + m[2], 16),\n parseInt(m[3] + m[3], 16), 1);\n } else if ((m = /^#?([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])\\b/i.exec(color))) { // Parse 4 digit hex color\n ret = new Bytes(parseInt(m[1] + m[1], 16),\n parseInt(m[2] + m[2], 16),\n parseInt(m[3] + m[3], 16),\n alphaFromHex(m[4] + m[4]));\n } else if ((m = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})\\b/i.exec(color))) { // Parse 8 digit hex color\n ret = new Bytes(parseInt(m[1], 16),\n parseInt(m[2], 16),\n parseInt(m[3], 16),\n alphaFromHex(m[4]));\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),\n parseInt(m[2], 10),\n 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),\n parseInt(m[2], 10),\n 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,\n parseFloat(m[2]) / 100,\n 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,\n parseFloat(m[2]) / 100,\n parseFloat(m[3]) / 100, parseFloat(m[4]));\n }\n\n if (ret) {\n ret.match = m;\n } else if (!safe) {\n throw new Error(\"Cannot parse color: \" + color);\n }\n\n return ret;\n }\n\n var DARK_TRESHOLD = 180;\n\n var Color = Class.extend({\n init: function(value) {\n var this$1$1 = this;\n\n if (arguments.length === 1) {\n var formats = Color.formats;\n var resolvedColor = this.resolveColor(value);\n\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\n if (parts) {\n var channels = processor(parts);\n this$1$1.r = channels[0];\n this$1$1.g = channels[1];\n this$1$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\n this.r = this.normalizeByte(this.r);\n this.g = this.normalizeByte(this.g);\n this.b = this.normalizeByte(this.b);\n },\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\n return \"#\" + pad(r) + pad(g) + pad(b);\n },\n\n resolveColor: function(value) {\n var color = value || \"black\";\n\n if (color.charAt(0) === \"#\") {\n color = color.substr(1, 6);\n }\n\n color = color.replace(/ /g, \"\");\n color = color.toLowerCase();\n color = Color.namedColors[color] || color;\n\n return color;\n },\n\n normalizeByte: function(value) {\n if (value < 0 || isNaN(value)) {\n return 0;\n }\n\n return value > 255 ? 255 : value;\n },\n\n padDigit: function(value) {\n return (value.length === 1) ? \"0\" + value : value;\n },\n\n brightness: function(value) {\n var round = Math.round;\n\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\n return this;\n },\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 isDark: function() {\n return this.percBrightness() < DARK_TRESHOLD;\n }\n });\n\n Color.fromBytes = function(r, g, b, a) {\n return new Bytes(r, g, b, a != null ? a : 1);\n };\n\n Color.fromRGB = function(r, g, b, a) {\n return new RGB(r, g, b, a != null ? a : 1);\n };\n\n Color.fromHSV = function(h, s, v, a) {\n return new HSV(h, s, v, a != null ? a : 1);\n };\n\n Color.fromHSL = function(h, s, l, a) {\n return new HSL(h, s, l, a != null ? a : 1);\n };\n\n Color.formats = [ {\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), parseInt(parts[2], 10), parseInt(parts[3], 10)\n ];\n }\n }, {\n re: /^(\\w{2})(\\w{2})(\\w{2})$/,\n process: function(parts) {\n return [\n parseInt(parts[1], 16), parseInt(parts[2], 16), parseInt(parts[3], 16)\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\n kendo.deepExtend(kendo, {\n parseColor: parseColor,\n namedColors: namedColors,\n Color: Color\n });\n\n /***********************************************************************\n * WARNING: this file is auto-generated. If you change it directly,\n * your modifications will eventually be lost. The source code is in\n * `kendo-drawing` repository, you should make your changes there and\n * run `src-modules/sync.sh` in this repository.\n */\n\n (function($) {\n /* eslint-disable space-before-blocks, space-before-function-paren */\n\n window.kendo.util = window.kendo.util || {};\n\n var LRUCache = kendo.Class.extend({\n init: function(size) {\n\n this._size = size;\n this._length = 0;\n this._map = {};\n },\n\n put: function(key, value) {\n var map = this._map;\n var entry = { key: key, value: value };\n\n map[key] = entry;\n\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\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\n get: function(key) {\n var entry = this._map[key];\n\n if (entry) {\n if (entry === this._head && entry !== this._tail) {\n this._head = entry.newer;\n this._head.older = null;\n }\n\n if (entry !== this._tail) {\n if (entry.older) {\n entry.older.newer = entry.newer;\n entry.newer.older = entry.older;\n }\n\n entry.older = this._tail;\n entry.newer = null;\n\n this._tail.newer = entry;\n this._tail = entry;\n }\n\n return entry.value;\n }\n }\n });\n\n var REPLACE_REGEX = /\\r?\\n|\\r|\\t/g;\n var SPACE = ' ';\n\n function normalizeText(text) {\n return String(text).replace(REPLACE_REGEX, SPACE);\n }\n\n function objectKey(object) {\n var parts = [];\n for (var key in object) {\n parts.push(key + object[key]);\n }\n\n return parts.sort().join(\"\");\n }\n\n // Computes FNV-1 hash\n // See http://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function\n function hashKey(str) {\n // 32-bit FNV-1 offset basis\n // See http://isthe.com/chongo/tech/comp/fnv/#FNV-param\n var hash = 0x811C9DC5;\n\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\n return hash >>> 0;\n }\n\n function zeroSize() {\n return { width: 0, height: 0, baseline: 0 };\n }\n\n var DEFAULT_OPTIONS = {\n baselineMarkerSize: 1\n };\n\n var defaultMeasureBox;\n\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;\" +\n \"padding: 0 !important; margin: 0 !important; border: 0 !important;\" +\n \"line-height: normal !important; visibility: hidden !important; white-space: pre!important;\";\n }\n\n var TextMetrics = kendo.Class.extend({\n init: function(options) {\n\n this._cache = new LRUCache(1000);\n this.options = $.extend({}, DEFAULT_OPTIONS, options);\n },\n\n measure: function(text, style, options) {\n if (options === void 0) { options = {}; }\n\n if (typeof text === 'undefined' || text === null) {\n return zeroSize();\n }\n\n var styleKey = objectKey(style);\n var cacheKey = hashKey(text + styleKey);\n var cachedResult = this._cache.get(cacheKey);\n\n if (cachedResult) {\n return cachedResult;\n }\n\n var size = zeroSize();\n var measureBox = options.box || defaultMeasureBox;\n var baselineMarker = this._baselineMarker().cloneNode(false);\n\n for (var key in style) {\n var value = style[key];\n if (typeof value !== \"undefined\") {\n measureBox.style[key] = value;\n }\n }\n\n var textStr = options.normalizeText !== false ? normalizeText(text) : String(text);\n\n measureBox.textContent = textStr;\n measureBox.appendChild(baselineMarker);\n document.body.appendChild(measureBox);\n\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\n if (size.width > 0 && size.height > 0) {\n this._cache.put(cacheKey, size);\n }\n\n measureBox.parentNode.removeChild(measureBox);\n\n return size;\n },\n\n _baselineMarker: function() {\n var marker = document.createElement(\"div\");\n marker.style.cssText = \"display: inline-block; vertical-align: baseline;width: \" +\n this.options.baselineMarkerSize + \"px; height: \" + this.options.baselineMarkerSize + \"px;overflow: hidden;\";\n\n return marker;\n }\n });\n\n TextMetrics.current = new TextMetrics();\n\n function measureText(text, style, measureBox) {\n return TextMetrics.current.measure(text, style, measureBox);\n }\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\n })(window.kendo.jQuery);\n\n /***********************************************************************\n * WARNING: this file is auto-generated. If you change it directly,\n * your modifications will eventually be lost. The source code is in\n * `kendo-drawing` repository, you should make your changes there and\n * run `src-modules/sync.sh` in this repository.\n */\n\n (function($) {\n /* eslint-disable space-before-blocks, space-before-function-paren */\n\n window.kendo = window.kendo || {};\n var kendoDrawing = kendo.drawing;\n var kendoDrawingUtil = kendoDrawing.util;\n var extendStatic = kendoDrawingUtil.extendStatic;\n var Class = kendo.Class;\n var kendoUtil = kendo.util;\n var support = kendo.support;\n var supportBrowser = support.browser;\n\n var createPromise = kendoDrawingUtil.createPromise;\n var promiseAll = kendoDrawingUtil.promiseAll;\n\n var HasObservers = (function (Class$$1) {\n function HasObservers () {\n Class$$1.apply(this, arguments);\n }\n\n extendStatic(HasObservers, Class$$1);\n HasObservers.prototype = Object.create( Class$$1 && Class$$1.prototype );\n HasObservers.prototype.constructor = HasObservers;\n HasObservers.fn = HasObservers.prototype;\n HasObservers.fn.init = HasObservers.fn.constructor;\n\n HasObservers.prototype.observers = function observers () {\n this._observers = this._observers || [];\n return this._observers;\n };\n\n HasObservers.prototype.addObserver = function addObserver (element) {\n if (!this._observers) {\n this._observers = [ element ];\n } else {\n this._observers.push(element);\n }\n return this;\n };\n\n HasObservers.prototype.removeObserver = function removeObserver (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\n HasObservers.prototype.trigger = function trigger (methodName, event) {\n var observers = this._observers;\n\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\n HasObservers.prototype.optionsChange = function optionsChange (e) {\n if (e === void 0) { e = {}; }\n\n e.element = this;\n this.trigger(\"optionsChange\", e);\n };\n\n HasObservers.prototype.geometryChange = function geometryChange () {\n this.trigger(\"geometryChange\", {\n element: this\n });\n };\n\n HasObservers.prototype.suspend = function suspend () {\n this._suspended = (this._suspended || 0) + 1;\n return this;\n };\n\n HasObservers.prototype.resume = function resume () {\n this._suspended = Math.max((this._suspended || 0) - 1, 0);\n return this;\n };\n\n HasObservers.prototype._observerField = function _observerField (field, value) {\n if (this[field]) {\n this[field].removeObserver(this);\n }\n this[field] = value;\n value.addObserver(this);\n };\n\n return HasObservers;\n }(Class));\n\n function append$1$1(first, second) {\n first.push.apply(first, second);\n return first;\n }\n\n /* eslint-disable key-spacing,no-multi-spaces,no-param-reassign */\n\n var literals = {\n 1 : \"i\", 10 : \"x\", 100 : \"c\",\n 2 : \"ii\", 20 : \"xx\", 200 : \"cc\",\n 3 : \"iii\", 30 : \"xxx\", 300 : \"ccc\",\n 4 : \"iv\", 40 : \"xl\", 400 : \"cd\",\n 5 : \"v\", 50 : \"l\", 500 : \"d\",\n 6 : \"vi\", 60 : \"lx\", 600 : \"dc\",\n 7 : \"vii\", 70 : \"lxx\", 700 : \"dcc\",\n 8 : \"viii\", 80 : \"lxxx\", 800 : \"dccc\",\n 9 : \"ix\", 90 : \"xc\", 900 : \"cm\",\n 1000 : \"m\"\n };\n\n function arabicToRoman(n) {\n var values = [ 1000,\n 900 , 800, 700, 600, 500, 400, 300, 200, 100,\n 90 , 80 , 70 , 60 , 50 , 40 , 30 , 20 , 10 ,\n 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 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\n var UNDEFINED = \"undefined\";\n\n function defined(value) {\n return typeof value !== UNDEFINED;\n }\n\n var defId = 1;\n\n function definitionId() {\n return \"kdef\" + defId++;\n }\n\n var DEG_TO_RAD = Math.PI / 180;\n var MAX_NUM = Number.MAX_VALUE;\n var MIN_NUM = -Number.MAX_VALUE;\n\n function deg(radians) {\n return radians / DEG_TO_RAD;\n }\n\n var fromCharCode = String.fromCharCode;\n\n // Encodes a string as UTF-8\n function encodeUTF8(input) {\n var output = \"\";\n\n for (var i = 0; i < input.length; i++) {\n var code = input.charCodeAt(i);\n\n if (0xD800 <= code && code <= 0xDBFF) {\n var hi = code;\n var low = input.charCodeAt(++i);\n\n if (!isNaN(low)) {\n // Combine high and low surrogate\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt\n code = (hi - 0xD800) * 0x400 +\n (low - 0xDC00) + 0x10000;\n }\n }\n\n if (code < 0x80) {\n // One byte\n output += fromCharCode(code);\n } else if (code < 0x800) {\n // Two bytes\n output += fromCharCode(0xC0 | (code >>> 6));\n output += fromCharCode(0x80 | (code & 0x3f));\n } else if (code < 0x10000) {\n // Three bytes\n output += fromCharCode(0xE0 | (code >>> 12));\n output += fromCharCode(0x80 | (code >>> 6 & 0x3f));\n output += fromCharCode(0x80 | (code & 0x3f));\n } else if (code < 0x10FFFF) {\n // Four bytes\n output += fromCharCode(0xF0 | (code >>> 18));\n output += fromCharCode(0x80 | (code >>> 12 & 0x3f));\n output += fromCharCode(0x80 | (code >>> 6 & 0x3f));\n output += fromCharCode(0x80 | (code & 0x3f));\n }\n }\n\n return output;\n }\n\n // Encodes a string as UTF-16 big-endian\n\n var KEY_STR = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n function encodeBase64(input) {\n var output = \"\";\n var i = 0;\n\n var utfInput = encodeUTF8(input);\n\n while (i < utfInput.length) {\n var chr1 = utfInput.charCodeAt(i++);\n var chr2 = utfInput.charCodeAt(i++);\n var chr3 = utfInput.charCodeAt(i++);\n\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\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n\n output = output +\n KEY_STR.charAt(enc1) + KEY_STR.charAt(enc2) +\n KEY_STR.charAt(enc3) + KEY_STR.charAt(enc4);\n }\n\n return output;\n }\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\n return {\n x: e.pageX || e.clientX || 0,\n y: e.pageY || e.clientY || 0\n };\n }\n\n function eventElement(e) {\n if (e === void 0) { e = {}; }\n\n return e.touch ? e.touch.initialTouch : e.target;\n }\n\n function isTransparent(color) {\n return color === \"\" || color === null || color === \"none\" || color === \"transparent\" || !defined(color);\n }\n\n function last(array) {\n if (array) {\n return array[array.length - 1];\n }\n }\n\n function limitValue(value, min, max) {\n return Math.max(Math.min(value, max), min);\n }\n\n /* eslint-disable no-multi-spaces, key-spacing, indent, camelcase, space-before-blocks, eqeqeq, brace-style */\n /* eslint-disable space-infix-ops, space-before-function-paren, array-bracket-spacing, object-curly-spacing */\n /* eslint-disable no-nested-ternary, max-params, default-case, no-else-return, no-empty */\n /* eslint-disable no-param-reassign, no-var, block-scoped-var */\n\n // mergeSort is stable.\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\n var now = Date.now || function() {\n return new Date().getTime();\n };\n\n function rad(degrees) {\n return degrees * DEG_TO_RAD;\n }\n\n function pow(p) {\n if (p) {\n return Math.pow(10, p);\n }\n\n return 1;\n }\n\n function round(value, precision) {\n var power = pow(precision);\n return Math.round(value * power) / power;\n }\n\n function valueOrDefault(value, defaultValue) {\n return defined(value) ? value : defaultValue;\n }\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\n function elementOffset(element) {\n var box = element.getBoundingClientRect();\n\n var documentElement = document.documentElement;\n\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\n function elementStyles(element, styles) {\n var result = {};\n var style = window.getComputedStyle(element) || {};\n var stylesArray = Array.isArray(styles) ? styles : [ styles ];\n\n for (var idx = 0; idx < stylesArray.length; idx++) {\n var field = stylesArray[idx];\n result[field] = style[field];\n }\n\n return result;\n }\n\n function getPixels(value) {\n if (isNaN(value)) {\n return value;\n }\n return value + \"px\";\n }\n\n function elementSize(element, size) {\n if (size) {\n var width = size.width;\n var height = size.height;\n\n if (defined(width)) {\n element.style.width = getPixels(width);\n }\n\n if (defined(height)) {\n element.style.height = getPixels(height);\n }\n\n } else {\n var size$1 = elementStyles(element, [ 'width', 'height' ]);\n\n return {\n width: parseInt(size$1.width, 10),\n height: parseInt(size$1.height, 10)\n };\n }\n }\n\n function unbindEvents(element, events) {\n if (events === void 0) { 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\n function elementPadding(element) {\n var ref = elementStyles(element, [ \"paddingLeft\", \"paddingTop\" ]);\n var paddingLeft = ref.paddingLeft;\n var paddingTop = ref.paddingTop;\n return {\n top: parseFloat(paddingTop),\n left: parseFloat(paddingLeft)\n };\n }\n\n var Matrix = (function (Class$$1) {\n function Matrix(a, b, c, d, e, f) {\n if (a === void 0) { a = 0; }\n if (b === void 0) { b = 0; }\n if (c === void 0) { c = 0; }\n if (d === void 0) { d = 0; }\n if (e === void 0) { e = 0; }\n if (f === void 0) { f = 0; }\n\n Class$$1.call(this);\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\n extendStatic(Matrix, Class$$1);\n Matrix.prototype = Object.create( Class$$1 && Class$$1.prototype );\n Matrix.prototype.constructor = Matrix;\n Matrix.fn = Matrix.prototype;\n Matrix.fn.init = Matrix.fn.constructor;\n\n Matrix.prototype.multiplyCopy = function multiplyCopy (matrix) {\n return new Matrix(\n this.a * matrix.a + this.c * matrix.b,\n this.b * matrix.a + this.d * matrix.b,\n this.a * matrix.c + this.c * matrix.d,\n this.b * matrix.c + this.d * matrix.d,\n this.a * matrix.e + this.c * matrix.f + this.e,\n this.b * matrix.e + this.d * matrix.f + this.f\n );\n };\n\n Matrix.prototype.invert = function invert () {\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\n if (det === 0) {\n return null;\n }\n\n return new Matrix(e / det, -b / det, -d / det, a / det,\n (d * h - e * g) / det, (b * g - a * h) / det);\n };\n\n Matrix.prototype.clone = function clone () {\n return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);\n };\n\n Matrix.prototype.equals = function equals (other) {\n if (!other) {\n return false;\n }\n\n return this.a === other.a && this.b === other.b &&\n this.c === other.c && this.d === other.d &&\n this.e === other.e && this.f === other.f;\n };\n\n Matrix.prototype.round = function round$1 (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\n return this;\n };\n\n Matrix.prototype.toArray = function toArray (precision) {\n var result = [ this.a, this.b, this.c, this.d, this.e, 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\n return result;\n };\n\n Matrix.prototype.toString = function toString (precision, separator) {\n if (separator === void 0) { separator = \",\"; }\n\n return this.toArray(precision).join(separator);\n };\n\n Matrix.translate = function translate (x, y) {\n return new Matrix(1, 0, 0, 1, x, y);\n };\n\n Matrix.unit = function unit () {\n return new Matrix(1, 0, 0, 1, 0, 0);\n };\n\n Matrix.rotate = function rotate (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\n return matrix;\n };\n\n Matrix.scale = function scale (scaleX, scaleY) {\n return new Matrix(scaleX, 0, 0, scaleY, 0, 0);\n };\n\n return Matrix;\n }(Class));\n\n Matrix.IDENTITY = Matrix.unit();\n\n var matrixRegexp = /matrix\\((.*)\\)/;\n\n function parseMatrix(matrixString) {\n var match = matrixString.match(matrixRegexp);\n if (match === null || match.length !== 2) {\n return Matrix.unit();\n }\n\n var members = match[1].split(',').map(function (x) { return parseFloat(x); });\n return new (Function.prototype.bind.apply( Matrix, [ null ].concat( members) ));\n }\n\n function transformMatrix(element) {\n var transform = getComputedStyle(element).transform;\n\n if (transform === 'none') {\n return Matrix.unit();\n }\n\n return parseMatrix(transform);\n }\n\n function elementScale(element) {\n if (!element) {\n return Matrix.unit();\n }\n\n var matrix = transformMatrix(element);\n var parent = element.parentElement;\n while (parent) {\n var parentMatrix = transformMatrix(parent);\n matrix = matrix.multiplyCopy(parentMatrix);\n parent = parent.parentElement;\n }\n\n matrix.b = matrix.c = matrix.e = matrix.f = 0;\n return matrix;\n }\n\n var util = {\n \tappend: append$1$1,\n \tarabicToRoman: arabicToRoman,\n \tcreatePromise: createPromise,\n \tdefined: defined,\n \tdefinitionId: definitionId,\n \tdeg: deg,\n \tencodeBase64: encodeBase64,\n \teventCoordinates: eventCoordinates,\n \teventElement: eventElement,\n \tisTransparent: isTransparent,\n \tlast: last,\n \tlimitValue: limitValue,\n \tmergeSort: mergeSort,\n \tnow: now,\n \tpromiseAll: promiseAll,\n \trad: rad,\n \tround: round,\n \tvalueOrDefault: valueOrDefault,\n \tbindEvents: bindEvents,\n \telementOffset: elementOffset,\n \telementSize: elementSize,\n \telementStyles: elementStyles,\n \tunbindEvents: unbindEvents,\n \telementPadding: elementPadding,\n \telementScale: elementScale,\n \tDEG_TO_RAD: DEG_TO_RAD,\n \tMAX_NUM: MAX_NUM,\n \tMIN_NUM: MIN_NUM\n };\n\n var toString$1 = {}.toString;\n\n var OptionsStore = (function (HasObservers$$1) {\n function OptionsStore(options, prefix) {\n var this$1$1 = this;\n if (prefix === void 0) { prefix = \"\"; }\n\n HasObservers$$1.call(this);\n\n this.prefix = prefix;\n\n for (var field in options) {\n var member = options[field];\n member = this$1$1._wrap(member, field);\n this$1$1[field] = member;\n }\n }\n\n extendStatic(OptionsStore, HasObservers$$1);\n OptionsStore.prototype = Object.create( HasObservers$$1 && HasObservers$$1.prototype );\n OptionsStore.prototype.constructor = OptionsStore;\n OptionsStore.fn = OptionsStore.prototype;\n OptionsStore.fn.init = OptionsStore.fn.constructor;\n\n OptionsStore.prototype.get = function get (field) {\n var parts = field.split(\".\");\n var result = this;\n\n while (parts.length && result) {\n var part = parts.shift();\n result = result[part];\n }\n\n return result;\n };\n\n OptionsStore.prototype.set = function set (field, value) {\n var current = this.get(field);\n\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\n OptionsStore.prototype._set = function _set (field, value) {\n var this$1$1 = this;\n\n var composite = field.indexOf(\".\") >= 0;\n var parentObj = this;\n var fieldName = field;\n\n if (composite) {\n var parts = fieldName.split(\".\");\n var prefix = this.prefix;\n\n while (parts.length > 1) {\n fieldName = parts.shift();\n prefix += fieldName + \".\";\n\n var obj = parentObj[fieldName];\n\n if (!obj) {\n obj = new OptionsStore({}, prefix);\n obj.addObserver(this$1$1);\n parentObj[fieldName] = obj;\n }\n parentObj = obj;\n }\n fieldName = parts[0];\n }\n\n parentObj._clear(fieldName);\n parentObj[fieldName] = value;\n };\n\n OptionsStore.prototype._clear = function _clear (field) {\n var current = this[field];\n if (current && current.removeObserver) {\n current.removeObserver(this);\n }\n };\n\n OptionsStore.prototype._wrap = function _wrap (object, field) {\n var type = toString$1.call(object);\n var wrapped = object;\n\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\n wrapped.addObserver(this);\n }\n\n return wrapped;\n };\n\n return OptionsStore;\n }(HasObservers));\n\n function setAccessor(field) {\n return function(value) {\n if (this[field] !== value) {\n this[field] = value;\n this.geometryChange();\n }\n\n return this;\n };\n }\n\n function getAccessor(field) {\n return function() {\n return this[field];\n };\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() +\n name.substring(1, name.length);\n\n fn[\"set\" + capitalized] = setAccessor(name);\n fn[\"get\" + capitalized] = getAccessor(name);\n }\n }\n\n var withAccessors = function (TBase, names) {\n var result = (function (TBase) {\n function result () {\n TBase.apply(this, arguments);\n }extendStatic(result, TBase);\n result.prototype = Object.create( TBase && TBase.prototype );\n result.prototype.constructor = result;\n result.fn = result.prototype;\n result.fn.init = result.fn.constructor;\n\n return result;\n }(TBase));\n defineAccessors(result.prototype, names);\n\n return result;\n };\n\n function toMatrix(transformation) {\n if (transformation && typeof transformation.matrix === \"function\") {\n return transformation.matrix();\n }\n\n return transformation;\n }\n\n var Point = (function (superclass) {\n function Point(x, y) {\n superclass.call(this);\n\n this.x = x || 0;\n this.y = y || 0;\n }\n\n extendStatic(Point, superclass);\n Point.prototype = Object.create( superclass && superclass.prototype );\n Point.prototype.constructor = Point;\n Point.fn = Point.prototype;\n Point.fn.init = Point.fn.constructor;\n\n var staticAccessors = { ZERO: {} };\n\n Point.prototype.equals = function equals (other) {\n return other && other.x === this.x && other.y === this.y;\n };\n\n Point.prototype.clone = function clone () {\n return new Point(this.x, this.y);\n };\n\n Point.prototype.rotate = function rotate (angle, origin) {\n var originPoint = Point.create(origin) || Point.ZERO;\n\n return this.transform(Matrix.rotate(angle, originPoint.x, originPoint.y));\n };\n\n Point.prototype.translate = function translate (x, y) {\n this.x += x;\n this.y += y;\n\n this.geometryChange();\n\n return this;\n };\n\n Point.prototype.translateWith = function translateWith (point) {\n return this.translate(point.x, point.y);\n };\n\n Point.prototype.move = function move (x, y) {\n this.x = this.y = 0;\n return this.translate(x, y);\n };\n\n Point.prototype.scale = function scale (scaleX, scaleY) {\n if (scaleY === void 0) { scaleY = scaleX; }\n\n this.x *= scaleX;\n this.y *= scaleY;\n\n this.geometryChange();\n\n return this;\n };\n\n Point.prototype.scaleCopy = function scaleCopy (scaleX, scaleY) {\n return this.clone().scale(scaleX, scaleY);\n };\n\n Point.prototype.transform = function transform (transformation) {\n var matrix = toMatrix(transformation);\n var ref = this;\n var x = ref.x;\n var y = ref.y;\n\n this.x = matrix.a * x + matrix.c * y + matrix.e;\n this.y = matrix.b * x + matrix.d * y + matrix.f;\n\n this.geometryChange();\n\n return this;\n };\n\n Point.prototype.transformCopy = function transformCopy (transformation) {\n var point = this.clone();\n\n if (transformation) {\n point.transform(transformation);\n }\n\n return point;\n };\n\n Point.prototype.distanceTo = function distanceTo (point) {\n var dx = this.x - point.x;\n var dy = this.y - point.y;\n\n return Math.sqrt(dx * dx + dy * dy);\n };\n\n Point.prototype.round = function round$1 (digits) {\n this.x = round(this.x, digits);\n this.y = round(this.y, digits);\n\n this.geometryChange();\n\n return this;\n };\n\n Point.prototype.toArray = function toArray (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\n return [ x, y ];\n };\n\n Point.prototype.toString = function toString (digits, separator) {\n if (separator === void 0) { separator = \" \"; }\n\n var ref = this;\n var x = ref.x;\n var y = ref.y;\n\n if (defined(digits)) {\n x = round(x, digits);\n y = round(y, digits);\n }\n\n return x + separator + y;\n };\n\n Point.create = function create (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\n return new Point(arg0, arg1);\n }\n };\n\n Point.min = function min () {\n var arguments$1 = arguments;\n\n var minX = MAX_NUM;\n var minY = MAX_NUM;\n\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\n return new Point(minX, minY);\n };\n\n Point.max = function max () {\n var arguments$1 = arguments;\n\n var maxX = MIN_NUM;\n var maxY = MIN_NUM;\n\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\n return new Point(maxX, maxY);\n };\n\n Point.minPoint = function minPoint () {\n return new Point(MIN_NUM, MIN_NUM);\n };\n\n Point.maxPoint = function maxPoint () {\n return new Point(MAX_NUM, MAX_NUM);\n };\n\n staticAccessors.ZERO.get = function () {\n return new Point(0, 0);\n };\n\n Object.defineProperties( Point, staticAccessors );\n\n return Point;\n }(withAccessors(HasObservers, [ \"x\", \"y\" ])));\n\n var Size = (function (superclass) {\n function Size(width, height) {\n superclass.call(this);\n\n this.width = width || 0;\n this.height = height || 0;\n }\n\n extendStatic(Size, superclass);\n Size.prototype = Object.create( superclass && superclass.prototype );\n Size.prototype.constructor = Size;\n Size.fn = Size.prototype;\n Size.fn.init = Size.fn.constructor;\n\n var staticAccessors = { ZERO: {} };\n\n Size.prototype.equals = function equals (other) {\n return other && other.width === this.width && other.height === this.height;\n };\n\n Size.prototype.clone = function clone () {\n return new Size(this.width, this.height);\n };\n\n Size.prototype.toArray = function toArray (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\n return [ width, height ];\n };\n\n Size.create = function create (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\n return new Size(arg0, arg1);\n }\n };\n\n staticAccessors.ZERO.get = function () {\n return new Size(0, 0);\n };\n\n Object.defineProperties( Size, staticAccessors );\n\n return Size;\n }(withAccessors(HasObservers, [ \"width\", \"height\" ])));\n\n var Rect = (function (HasObservers$$1) {\n function Rect(origin, size, cornerRadius) {\n if (origin === void 0) { origin = new Point(); }\n if (size === void 0) { size = new Size(); }\n if (cornerRadius === void 0) { cornerRadius = 0; }\n\n HasObservers$$1.call(this);\n\n this.setOrigin(origin);\n this.setSize(size);\n this.setCornerRadius(cornerRadius);\n }\n\n extendStatic(Rect, HasObservers$$1);\n Rect.prototype = Object.create( HasObservers$$1 && HasObservers$$1.prototype );\n Rect.prototype.constructor = Rect;\n Rect.fn = Rect.prototype;\n Rect.fn.init = Rect.fn.constructor;\n\n Rect.prototype.clone = function clone () {\n return new Rect(\n this.origin.clone(),\n this.size.clone()\n );\n };\n\n Rect.prototype.equals = function equals (other) {\n return other &&\n other.origin.equals(this.origin) &&\n other.size.equals(this.size);\n };\n\n Rect.prototype.setOrigin = function setOrigin (value) {\n this._observerField(\"origin\", Point.create(value));\n this.geometryChange();\n return this;\n };\n\n Rect.prototype.getOrigin = function getOrigin () {\n return this.origin;\n };\n\n Rect.prototype.setCornerRadius = function setCornerRadius (radius) {\n this.cornerRadius = Array.isArray(radius) ? radius : [ radius, radius ];\n\n this.geometryChange();\n return this;\n };\n\n Rect.prototype.getCornerRadius = function getCornerRadius () {\n return this.cornerRadius;\n };\n\n Rect.prototype.setSize = function setSize (value) {\n this._observerField(\"size\", Size.create(value));\n this.geometryChange();\n return this;\n };\n\n Rect.prototype.getSize = function getSize () {\n return this.size;\n };\n\n Rect.prototype.width = function width () {\n return this.size.width;\n };\n\n Rect.prototype.height = function height () {\n return this.size.height;\n };\n\n Rect.prototype.topLeft = function topLeft () {\n return this.origin.clone();\n };\n\n Rect.prototype.bottomRight = function bottomRight () {\n return this.origin.clone().translate(this.width(), this.height());\n };\n\n Rect.prototype.topRight = function topRight () {\n return this.origin.clone().translate(this.width(), 0);\n };\n\n Rect.prototype.bottomLeft = function bottomLeft () {\n return this.origin.clone().translate(0, this.height());\n };\n\n Rect.prototype.center = function center () {\n return this.origin.clone().translate(this.width() / 2, this.height() / 2);\n };\n\n Rect.prototype.bbox = function bbox (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\n return Rect.fromPoints(tl, tr, br, bl);\n };\n\n Rect.prototype.transformCopy = function transformCopy (m) {\n return Rect.fromPoints(\n this.topLeft().transform(m),\n this.bottomRight().transform(m)\n );\n };\n\n Rect.prototype.expand = function expand (x, y) {\n if (y === void 0) { y = x; }\n\n this.size.width += 2 * x;\n this.size.height += 2 * y;\n\n this.origin.translate(-x, -y);\n\n return this;\n };\n\n Rect.prototype.expandCopy = function expandCopy (x, y) {\n return this.clone().expand(x, y);\n };\n\n Rect.prototype.containsPoint = function containsPoint (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\n Rect.prototype._isOnPath = function _isOnPath (point, width) {\n var rectOuter = this.expandCopy(width, width);\n var rectInner = this.expandCopy(-width, -width);\n\n return rectOuter.containsPoint(point) && !rectInner.containsPoint(point);\n };\n\n Rect.fromPoints = function fromPoints () {\n var topLeft = Point.min.apply(null, arguments);\n var bottomRight = Point.max.apply(null, arguments);\n var size = new Size(\n bottomRight.x - topLeft.x,\n bottomRight.y - topLeft.y\n );\n\n return new Rect(topLeft, size);\n };\n\n Rect.union = function union (a, b) {\n return Rect.fromPoints(\n Point.min(a.topLeft(), b.topLeft()),\n Point.max(a.bottomRight(), b.bottomRight())\n );\n };\n\n Rect.intersect = function intersect (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\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\n if (rect1.left <= rect2.right &&\n rect2.left <= rect1.right &&\n rect1.top <= rect2.bottom &&\n rect2.top <= rect1.bottom) {\n return Rect.fromPoints(\n new Point(Math.max(rect1.left, rect2.left), Math.max(rect1.top, rect2.top)),\n new Point(Math.min(rect1.right, rect2.right), Math.min(rect1.bottom, rect2.bottom))\n );\n }\n };\n\n return Rect;\n }(HasObservers));\n\n var Transformation = (function (HasObservers$$1) {\n function Transformation(matrix) {\n if (matrix === void 0) { matrix = Matrix.unit(); }\n\n HasObservers$$1.call(this);\n\n this._matrix = matrix;\n }\n\n extendStatic(Transformation, HasObservers$$1);\n Transformation.prototype = Object.create( HasObservers$$1 && HasObservers$$1.prototype );\n Transformation.prototype.constructor = Transformation;\n Transformation.fn = Transformation.prototype;\n Transformation.fn.init = Transformation.fn.constructor;\n\n Transformation.prototype.clone = function clone () {\n return new Transformation(\n this._matrix.clone()\n );\n };\n\n Transformation.prototype.equals = function equals (other) {\n return other &&\n other._matrix.equals(this._matrix);\n };\n\n Transformation.prototype.translate = function translate (x, y) {\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(x, y));\n\n this._optionsChange();\n return this;\n };\n\n Transformation.prototype.scale = function scale (scaleX, scaleY, origin) {\n if (scaleY === void 0) { scaleY = scaleX; }\n if (origin === void 0) { origin = null; }\n\n var originPoint = origin;\n\n if (originPoint) {\n originPoint = Point.create(originPoint);\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(originPoint.x, originPoint.y));\n }\n\n this._matrix = this._matrix.multiplyCopy(Matrix.scale(scaleX, scaleY));\n\n if (originPoint) {\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(-originPoint.x, -originPoint.y));\n }\n\n this._optionsChange();\n return this;\n };\n\n Transformation.prototype.rotate = function rotate (angle, origin) {\n var originPoint = Point.create(origin) || Point.ZERO;\n\n this._matrix = this._matrix.multiplyCopy(Matrix.rotate(angle, originPoint.x, originPoint.y));\n\n this._optionsChange();\n return this;\n };\n\n Transformation.prototype.multiply = function multiply (transformation) {\n var matrix = toMatrix(transformation);\n\n this._matrix = this._matrix.multiplyCopy(matrix);\n\n this._optionsChange();\n return this;\n };\n\n Transformation.prototype.matrix = function matrix (value) {\n if (value) {\n this._matrix = value;\n this._optionsChange();\n return this;\n }\n\n return this._matrix;\n };\n\n Transformation.prototype._optionsChange = function _optionsChange () {\n this.optionsChange({\n field: \"transform\",\n value: this\n });\n };\n\n return Transformation;\n }(HasObservers));\n\n function transform$1(matrix) {\n if (matrix === null) {\n return null;\n }\n\n if (matrix instanceof Transformation) {\n return matrix;\n }\n\n return new Transformation(matrix);\n }\n\n var Element$1 = (function (HasObservers$$1) {\n function Element(options) {\n HasObservers$$1.call(this);\n\n this._initOptions(options);\n }\n\n extendStatic(Element, HasObservers$$1);\n Element.prototype = Object.create( HasObservers$$1 && HasObservers$$1.prototype );\n Element.prototype.constructor = Element;\n Element.fn = Element.prototype;\n Element.fn.init = Element.fn.constructor;\n\n var prototypeAccessors = { nodeType: {} };\n\n prototypeAccessors.nodeType.get = function () {\n return \"Rect\";\n };\n\n Element.prototype._initOptions = function _initOptions (options) {\n if (options === void 0) { options = {}; }\n\n var clip = options.clip;\n var transform = options.transform;\n\n if (transform) {\n options.transform = transform$1(transform);\n }\n\n if (clip && !clip.id) {\n clip.id = definitionId();\n }\n\n this.options = new OptionsStore(options);\n this.options.addObserver(this);\n };\n\n Element.prototype.transform = function transform (value) {\n if (defined(value)) {\n this.options.set(\"transform\", transform$1(value));\n } else {\n return this.options.get(\"transform\");\n }\n };\n\n Element.prototype.parentTransform = function parentTransform () {\n var element = this;\n var parentMatrix;\n\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\n if (parentMatrix) {\n return transform$1(parentMatrix);\n }\n };\n\n Element.prototype.currentTransform = function currentTransform (parentTransform) {\n if (parentTransform === void 0) { parentTransform = this.parentTransform(); }\n\n var elementTransform = this.transform();\n var elementMatrix = toMatrix(elementTransform);\n\n var parentMatrix = toMatrix(parentTransform);\n var combinedMatrix;\n\n if (elementMatrix && parentMatrix) {\n combinedMatrix = parentMatrix.multiplyCopy(elementMatrix);\n } else {\n combinedMatrix = elementMatrix || parentMatrix;\n }\n\n if (combinedMatrix) {\n return transform$1(combinedMatrix);\n }\n };\n\n Element.prototype.visible = function visible (value) {\n if (defined(value)) {\n this.options.set(\"visible\", value);\n return this;\n }\n\n return this.options.get(\"visible\") !== false;\n };\n\n Element.prototype.clip = function clip (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\n return options.get(\"clip\");\n };\n\n Element.prototype.opacity = function opacity (value) {\n if (defined(value)) {\n this.options.set(\"opacity\", value);\n return this;\n }\n\n return valueOrDefault(this.options.get(\"opacity\"), 1);\n };\n\n Element.prototype.clippedBBox = function clippedBBox (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\n Element.prototype.containsPoint = function containsPoint (point, parentTransform) {\n if (this.visible()) {\n var transform = this.currentTransform(parentTransform);\n var transformedPoint = point;\n if (transform) {\n transformedPoint = point.transformCopy(transform.matrix().invert());\n }\n return (this._hasFill() && this._containsPoint(transformedPoint)) || (this._isOnPath && this._hasStroke() && this._isOnPath(transformedPoint));\n }\n return false;\n };\n\n Element.prototype._hasFill = function _hasFill () {\n var fill = this.options.fill;\n return fill && !isTransparent(fill.color);\n };\n\n Element.prototype._hasStroke = function _hasStroke () {\n var stroke = this.options.stroke;\n return stroke && stroke.width > 0 && !isTransparent(stroke.color);\n };\n\n Element.prototype._clippedBBox = function _clippedBBox (transformation) {\n return this.bbox(transformation);\n };\n\n Object.defineProperties( Element.prototype, prototypeAccessors );\n\n return Element;\n }(HasObservers));\n\n function ellipseExtremeAngles(center, rx, ry, matrix) {\n var extremeX = 0;\n var extremeY = 0;\n\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\n return {\n x: extremeX,\n y: extremeY\n };\n }\n\n var PI_DIV_2 = Math.PI / 2;\n\n var Circle$2 = (function (superclass) {\n function Circle(center, radius) {\n if (center === void 0) { center = new Point(); }\n if (radius === void 0) { radius = 0; }\n\n superclass.call(this);\n\n this.setCenter(center);\n this.setRadius(radius);\n }\n\n extendStatic(Circle, superclass);\n Circle.prototype = Object.create( superclass && superclass.prototype );\n Circle.prototype.constructor = Circle;\n Circle.fn = Circle.prototype;\n Circle.fn.init = Circle.fn.constructor;\n\n Circle.prototype.setCenter = function setCenter (value) {\n this._observerField(\"center\", Point.create(value));\n this.geometryChange();\n return this;\n };\n\n Circle.prototype.getCenter = function getCenter () {\n return this.center;\n };\n\n Circle.prototype.equals = function equals (other) {\n return other &&\n other.center.equals(this.center) &&\n other.radius === this.radius;\n };\n\n Circle.prototype.clone = function clone () {\n return new Circle(this.center.clone(), this.radius);\n };\n\n Circle.prototype.pointAt = function pointAt (angle) {\n return this._pointAt(rad(angle));\n };\n\n Circle.prototype.bbox = function bbox (matrix) {\n var this$1$1 = this;\n\n var extremeAngles = ellipseExtremeAngles(this.center, this.radius, this.radius, matrix);\n var minPoint = Point.maxPoint();\n var maxPoint = Point.minPoint();\n\n for (var i = 0; i < 4; i++) {\n var currentPointX = this$1$1._pointAt(extremeAngles.x + i * PI_DIV_2).transformCopy(matrix);\n var currentPointY = this$1$1._pointAt(extremeAngles.y + i * PI_DIV_2).transformCopy(matrix);\n var currentPoint = new Point(currentPointX.x, currentPointY.y);\n\n minPoint = Point.min(minPoint, currentPoint);\n maxPoint = Point.max(maxPoint, currentPoint);\n }\n\n return Rect.fromPoints(minPoint, maxPoint);\n };\n\n Circle.prototype._pointAt = function _pointAt (angle) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n\n return new Point(\n center.x + radius * Math.cos(angle),\n center.y + radius * Math.sin(angle)\n );\n };\n\n Circle.prototype.containsPoint = function containsPoint (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) +\n Math.pow(point.y - center.y, 2) <= Math.pow(radius, 2);\n return inCircle;\n };\n\n Circle.prototype._isOnPath = function _isOnPath (point, width) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n var pointDistance = center.distanceTo(point);\n\n return radius - width <= pointDistance && pointDistance <= radius + width;\n };\n\n return Circle;\n }(withAccessors(HasObservers, [ \"radius\" ])));\n\n var GRADIENT = \"Gradient\";\n\n var paintable = function (TBase) { return (\n (function (TBase) {\n function anonymous () {\n TBase.apply(this, arguments);\n }\n\n extendStatic(anonymous, TBase);\n anonymous.prototype = Object.create( TBase && TBase.prototype );\n anonymous.prototype.constructor = anonymous;\n anonymous.fn = anonymous.prototype;\n anonymous.fn.init = anonymous.fn.constructor;\n\n anonymous.prototype.fill = function fill (color, opacity) {\n var options = this.options;\n\n if (defined(color)) {\n if (color && color.nodeType !== GRADIENT) {\n var newFill = {\n color: color\n };\n if (defined(opacity)) {\n newFill.opacity = opacity;\n }\n options.set(\"fill\", newFill);\n } else {\n options.set(\"fill\", color);\n }\n\n return this;\n }\n\n return options.get(\"fill\");\n };\n\n anonymous.prototype.stroke = function stroke (color, width, opacity) {\n if (defined(color)) {\n this.options.set(\"stroke.color\", color);\n\n if (defined(width)) {\n this.options.set(\"stroke.width\", width);\n }\n\n if (defined(opacity)) {\n this.options.set(\"stroke.opacity\", opacity);\n }\n\n return this;\n }\n\n return this.options.get(\"stroke\");\n };\n\n return anonymous;\n }(TBase))\n ); };\n\n var IDENTITY_MATRIX_HASH = Matrix.IDENTITY.toString();\n\n var measurable = function (TBase) { return (\n (function (TBase) {\n function anonymous () {\n TBase.apply(this, arguments);\n }\n\n extendStatic(anonymous, TBase);\n anonymous.prototype = Object.create( TBase && TBase.prototype );\n anonymous.prototype.constructor = anonymous;\n anonymous.fn = anonymous.prototype;\n anonymous.fn.init = anonymous.fn.constructor;\n\n anonymous.prototype.bbox = function bbox (transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n var matrixHash = combinedMatrix ? combinedMatrix.toString() : IDENTITY_MATRIX_HASH;\n var bbox;\n\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\n var strokeWidth = this.options.get(\"stroke.width\");\n if (strokeWidth && bbox) {\n bbox.expand(strokeWidth / 2);\n }\n\n return bbox;\n };\n\n anonymous.prototype.geometryChange = function geometryChange () {\n delete this._bboxCache;\n this.trigger(\"geometryChange\", {\n element: this\n });\n };\n\n return anonymous;\n }(TBase))\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\n return this[fieldName];\n };\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\n var withGeometry = function (TBase, names) {\n if (names === void 0) { names = [ \"geometry\" ]; }\n\n var result = (function (TBase) {\n function result () {\n TBase.apply(this, arguments);\n }extendStatic(result, TBase);\n result.prototype = Object.create( TBase && TBase.prototype );\n result.prototype.constructor = result;\n result.fn = result.prototype;\n result.fn.init = result.fn.constructor;\n\n return result;\n }(TBase));\n defineGeometryAccessors(result.prototype, names);\n\n return result;\n };\n\n var DEFAULT_STROKE = \"#000\";\n\n var Circle = (function (superclass) {\n function Circle(geometry, options) {\n if (geometry === void 0) { geometry = new Circle$2(); }\n if (options === void 0) { options = {}; }\n\n superclass.call(this, options);\n\n this.geometry(geometry);\n\n if (!defined(this.options.stroke)) {\n this.stroke(DEFAULT_STROKE);\n }\n }\n\n extendStatic(Circle, superclass);\n Circle.prototype = Object.create( superclass && superclass.prototype );\n Circle.prototype.constructor = Circle;\n Circle.fn = Circle.prototype;\n Circle.fn.init = Circle.fn.constructor;\n\n var prototypeAccessors = { nodeType: {} };\n\n prototypeAccessors.nodeType.get = function () {\n return \"Circle\";\n };\n\n Circle.prototype.rawBBox = function rawBBox () {\n return this._geometry.bbox();\n };\n\n Circle.prototype._bbox = function _bbox (matrix) {\n return this._geometry.bbox(matrix);\n };\n\n Circle.prototype._containsPoint = function _containsPoint (point) {\n return this.geometry().containsPoint(point);\n };\n\n Circle.prototype._isOnPath = function _isOnPath (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n };\n\n Object.defineProperties( Circle.prototype, prototypeAccessors );\n\n return Circle;\n }(paintable(measurable(withGeometry(Element$1)))));\n\n var PRECISION = 10;\n\n function close$1(a, b, tolerance) {\n if (tolerance === void 0) { tolerance = PRECISION; }\n\n return round(Math.abs(a - b), tolerance) === 0;\n }\n\n function closeOrLess(a, b, tolerance) {\n return a < b || close$1(a, b, tolerance);\n }\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\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\n var MAX_INTERVAL = 45;\n var pow$1 = Math.pow;\n var accessors = [ \"radiusX\", \"radiusY\", \"startAngle\", \"endAngle\", \"anticlockwise\" ];\n\n var Arc$2 = (function (superclass) {\n function Arc(center, options) {\n if (center === void 0) { center = new Point(); }\n if (options === void 0) { options = {}; }\n\n superclass.call(this);\n\n this.setCenter(center);\n\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\n extendStatic(Arc, superclass);\n Arc.prototype = Object.create( superclass && superclass.prototype );\n Arc.prototype.constructor = Arc;\n Arc.fn = Arc.prototype;\n Arc.fn.init = Arc.fn.constructor;\n\n Arc.prototype.clone = function clone () {\n return new Arc(this.center, {\n radiusX: this.radiusX,\n radiusY: this.radiusY,\n startAngle: this.startAngle,\n endAngle: this.endAngle,\n anticlockwise: this.anticlockwise\n });\n };\n\n Arc.prototype.setCenter = function setCenter (value) {\n this._observerField(\"center\", Point.create(value));\n this.geometryChange();\n return this;\n };\n\n Arc.prototype.getCenter = function getCenter () {\n return this.center;\n };\n\n Arc.prototype.pointAt = function pointAt (angle) {\n var center = this.center;\n var radian = rad(angle);\n\n return new Point(\n center.x + this.radiusX * Math.cos(radian),\n center.y + this.radiusY * Math.sin(radian)\n );\n };\n\n Arc.prototype.curvePoints = function curvePoints () {\n var this$1$1 = this;\n\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$1().rotate(this.xRotation, this.center);\n }\n\n for (var i = 1; i <= subIntervalsCount; i++) {\n var nextAngle = currentAngle + dir * subIntervalAngle;\n var points = this$1$1._intervalCurvePoints(currentAngle, nextAngle, transformation);\n\n curvePoints.push(points.cp1, points.cp2, points.p2);\n currentAngle = nextAngle;\n }\n\n return curvePoints;\n };\n\n Arc.prototype.bbox = function bbox (matrix) {\n var this$1$1 = this;\n\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\n while (currentAngleX < endAngle || currentAngleY < endAngle) {\n var currentPointX = (void 0);\n if (currentAngleX < endAngle) {\n currentPointX = this$1$1.pointAt(currentAngleX).transformCopy(matrix);\n currentAngleX += 90;\n }\n\n var currentPointY = (void 0);\n if (currentAngleY < endAngle) {\n currentPointY = this$1$1.pointAt(currentAngleY).transformCopy(matrix);\n currentAngleY += 90;\n }\n\n currentPoint = new Point(currentPointX.x, currentPointY.y);\n minPoint = Point.min(minPoint, currentPoint);\n maxPoint = Point.max(maxPoint, currentPoint);\n }\n\n return Rect.fromPoints(minPoint, maxPoint);\n };\n\n Arc.prototype._arcInterval = function _arcInterval () {\n var ref = this;\n var startAngle = ref.startAngle;\n var endAngle = ref.endAngle;\n var anticlockwise = ref.anticlockwise;\n\n if (anticlockwise) {\n var oldStart = startAngle;\n startAngle = endAngle;\n endAngle = oldStart;\n }\n\n if (startAngle > endAngle || (anticlockwise && startAngle === endAngle)) {\n endAngle += 360;\n }\n\n return {\n startAngle: startAngle,\n endAngle: endAngle\n };\n };\n\n Arc.prototype._intervalCurvePoints = function _intervalCurvePoints (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\n return {\n p1: p1,\n cp1: cp1,\n cp2: cp2,\n p2: p2\n };\n };\n\n Arc.prototype._derivativeAt = function _derivativeAt (angle) {\n var radian = rad(angle);\n\n return new Point(-this.radiusX * Math.sin(radian), this.radiusY * Math.cos(radian));\n };\n\n Arc.prototype.containsPoint = function containsPoint (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) /\n 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\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\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\n Arc.prototype._isOnPath = function _isOnPath (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\n var inAngleRange = interval.startAngle <= angle && angle <= interval.endAngle;\n\n return inAngleRange && this.pointAt(angle).distanceTo(point) <= width;\n };\n\n Arc.fromPoints = function fromPoints (start, end, rx, ry, largeArc, swipe, rotation) {// eslint-disable-line max-params\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\n return new Arc(arcParameters.center, {\n startAngle: arcParameters.startAngle,\n endAngle: arcParameters.endAngle,\n radiusX: arcParameters.radiusX,\n radiusY: arcParameters.radiusY,\n xRotation: arcParameters.xRotation,\n anticlockwise: swipe === 0\n });\n };\n\n return Arc;\n }(withAccessors(HasObservers, accessors)));\n\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\n return round(deg(Math.atan2(sin, cos)));\n }\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; if (rotation === void 0) { rotation = 0; }\n\n var radians = rad(rotation);\n var cosine = Math.cos(radians);\n var sine = Math.sin(radians);\n\n var xT = cosine * (x1 - x2) / 2 + sine * (y1 - y2) / 2;\n var yT = -sine * (x1 - x2) / 2 + cosine * (y1 - y2) / 2;\n\n var sign = largeArc !== swipe ? 1 : -1;\n\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\n var delta = xt2 / rx2 + yt2 / ry2;\n\n if (delta > 1) {\n delta = Math.sqrt(xt2 / rx2 + yt2 / ry2);\n rx = delta * rx;\n rx2 = Math.pow(rx, 2);\n\n ry = delta * ry;\n ry2 = Math.pow(ry, 2);\n }\n\n var constT = sign * Math.sqrt((rx2 * ry2 - rx2 * yt2 - ry2 * xt2) / (rx2 * yt2 + ry2 * xt2));\n // due to rounding errors the value could become NaN even after radii correction\n if (isNaN(constT)) {\n constT = 0;\n }\n\n var cxT = constT * (rx * yT) / ry;\n var cyT = - constT * (ry * xT) / rx;\n\n var cx = cosine * cxT - sine * cyT + (x1 + x2) / 2;\n var cy = sine * cxT + cosine * cyT + (y1 + y2) / 2;\n\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\n var startAngle = (uY >= 0 ? 1 : -1) * deg(Math.acos(uX / Math.sqrt(uX * uX + uY * uY)));\n\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\n if (!swipe && angle > 0) {\n angle -= 360;\n }\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\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\n function bboxStartAngle(angle, start) {\n var startAngle = angle;\n\n while (startAngle < start) {\n startAngle += 90;\n }\n\n return startAngle;\n }\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\n var ElementsArray = (function (HasObservers$$1) {\n function ElementsArray(array) {\n if (array === void 0) { array = []; }\n\n HasObservers$$1.call(this);\n\n this.length = 0;\n this._splice(0, array.length, array);\n }\n\n extendStatic(ElementsArray, HasObservers$$1);\n ElementsArray.prototype = Object.create( HasObservers$$1 && HasObservers$$1.prototype );\n ElementsArray.prototype.constructor = ElementsArray;\n ElementsArray.fn = ElementsArray.prototype;\n ElementsArray.fn.init = ElementsArray.fn.constructor;\n\n ElementsArray.prototype.elements = function elements (value) {\n if (value) {\n this._splice(0, this.length, value);\n\n this._change();\n return this;\n }\n\n return this.slice(0);\n };\n\n ElementsArray.prototype.push = function push$1 () {\n var elements = arguments;\n var result = push.apply(this, elements);\n\n this._add(elements);\n\n return result;\n };\n\n ElementsArray.prototype.slice = function slice$1 () {\n return slice.call(this);\n };\n\n ElementsArray.prototype.pop = function pop$1 () {\n var length = this.length;\n var result = pop.apply(this);\n\n if (length) {\n this._remove([ result ]);\n }\n\n return result;\n };\n\n ElementsArray.prototype.splice = function splice$1 (index, howMany) {\n var elements = slice.call(arguments, 2);\n var result = this._splice(index, howMany, elements);\n\n this._change();\n\n return result;\n };\n\n ElementsArray.prototype.shift = function shift$1 () {\n var length = this.length;\n var result = shift.apply(this);\n\n if (length) {\n this._remove([ result ]);\n }\n\n return result;\n };\n\n ElementsArray.prototype.unshift = function unshift$1 () {\n var elements = arguments;\n var result = unshift.apply(this, elements);\n\n this._add(elements);\n\n return result;\n };\n\n ElementsArray.prototype.indexOf = function indexOf (element) {\n var this$1$1 = this;\n\n var length = this.length;\n\n for (var idx = 0; idx < length; idx++) {\n if (this$1$1[idx] === element) {\n return idx;\n }\n }\n return -1;\n };\n\n ElementsArray.prototype._splice = function _splice (index, howMany, elements) {\n var result = splice.apply(this, [ index, howMany ].concat(elements));\n\n this._clearObserver(result);\n this._setObserver(elements);\n\n return result;\n };\n\n ElementsArray.prototype._add = function _add (elements) {\n this._setObserver(elements);\n this._change();\n };\n\n ElementsArray.prototype._remove = function _remove (elements) {\n this._clearObserver(elements);\n this._change();\n };\n\n ElementsArray.prototype._setObserver = function _setObserver (elements) {\n var this$1$1 = this;\n\n for (var idx = 0; idx < elements.length; idx++) {\n elements[idx].addObserver(this$1$1);\n }\n };\n\n ElementsArray.prototype._clearObserver = function _clearObserver (elements) {\n var this$1$1 = this;\n\n for (var idx = 0; idx < elements.length; idx++) {\n elements[idx].removeObserver(this$1$1);\n }\n };\n\n ElementsArray.prototype._change = function _change () {};\n\n return ElementsArray;\n }(HasObservers));\n\n var GeometryElementsArray = (function (ElementsArray$$1) {\n function GeometryElementsArray () {\n ElementsArray$$1.apply(this, arguments);\n }\n\n extendStatic(GeometryElementsArray, ElementsArray$$1);\n GeometryElementsArray.prototype = Object.create( ElementsArray$$1 && ElementsArray$$1.prototype );\n GeometryElementsArray.prototype.constructor = GeometryElementsArray;\n GeometryElementsArray.fn = GeometryElementsArray.prototype;\n GeometryElementsArray.fn.init = GeometryElementsArray.fn.constructor;\n\n GeometryElementsArray.prototype._change = function _change () {\n this.geometryChange();\n };\n\n return GeometryElementsArray;\n }(ElementsArray));\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$1().rotate(-angle, endPoint));\n\n return rotatedPoint.x < endPoint.x;\n }\n\n function calculateCurveAt(t, field, points) {\n var t1 = 1 - t;\n return Math.pow(t1, 3) * points[0][field] +\n 3 * Math.pow(t1, 2) * t * points[1][field] +\n 3 * Math.pow(t, 2) * t1 * points[2][field] +\n Math.pow(t, 3) * points[3][field];\n }\n\n function toCubicPolynomial(points, field) {\n return [ -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\n var ComplexNumber = (function (Class$$1) {\n function ComplexNumber(real, img) {\n if (real === void 0) { real = 0; }\n if (img === void 0) { img = 0; }\n\n Class$$1.call(this);\n\n this.real = real;\n this.img = img;\n }\n\n extendStatic(ComplexNumber, Class$$1);\n ComplexNumber.prototype = Object.create( Class$$1 && Class$$1.prototype );\n ComplexNumber.prototype.constructor = ComplexNumber;\n ComplexNumber.fn = ComplexNumber.prototype;\n ComplexNumber.fn.init = ComplexNumber.fn.constructor;\n\n ComplexNumber.prototype.add = function add (cNumber) {\n return new ComplexNumber(round(this.real + cNumber.real, PRECISION), round(this.img + cNumber.img, PRECISION));\n };\n\n ComplexNumber.prototype.addConstant = function addConstant (value) {\n return new ComplexNumber(this.real + value, this.img);\n };\n\n ComplexNumber.prototype.negate = function negate () {\n return new ComplexNumber(-this.real, -this.img);\n };\n\n ComplexNumber.prototype.multiply = function multiply (cNumber) {\n return new ComplexNumber(this.real * cNumber.real - this.img * cNumber.img,\n this.real * cNumber.img + this.img * cNumber.real);\n };\n\n ComplexNumber.prototype.multiplyConstant = function multiplyConstant (value) {\n return new ComplexNumber(this.real * value, this.img * value);\n };\n\n ComplexNumber.prototype.nthRoot = function nthRoot (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\n return new ComplexNumber(nthR * Math.cos(rad$$1 / n), nthR * Math.sin(rad$$1 / n)); //Moivre's formula\n };\n\n ComplexNumber.prototype.equals = function equals (cNumber) {\n return this.real === cNumber.real && this.img === cNumber.img;\n };\n\n ComplexNumber.prototype.isReal = function isReal () {\n return this.img === 0;\n };\n\n return ComplexNumber;\n }(Class));\n\n function numberSign$1(x) {\n return x < 0 ? -1 : 1;\n }\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\n //Cardano's formula\n function solveCubicEquation(a, b, c, d) {\n if (a === 0) {\n return solveQuadraticEquation(b, c, d);\n }\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\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$1(x1) * Math.pow(Math.abs(x1), 1 / 3));\n x2 = -q / 2 - Math.sqrt(Q);\n x2 = new ComplexNumber(numberSign$1(x2) * Math.pow(Math.abs(x2), 1 / 3));\n }\n\n y1 = x1.add(x2);\n\n z1 = x1.add(x2).multiplyConstant(-1 / 2);\n z2 = x1.add(x2.negate()).multiplyConstant(Math.sqrt(3) / 2);\n\n y2 = z1.add(i.multiply(z2));\n y3 = z1.add(i.negate().multiply(z2));\n\n var result = [];\n\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\n return result;\n }\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\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\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$1(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\n return count;\n }\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\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\n return intersects ? 1 : 0;\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\n return this[fieldName];\n };\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\n var withPoints = function (TBase, names) {\n var result = (function (TBase) {\n function result () {\n TBase.apply(this, arguments);\n }extendStatic(result, TBase);\n result.prototype = Object.create( TBase && TBase.prototype );\n result.prototype.constructor = result;\n result.fn = result.prototype;\n result.fn.init = result.fn.constructor;\n\n return result;\n }(TBase));\n definePointAccessors(result.prototype, names);\n\n return result;\n };\n\n var points = [ \"anchor\", \"controlIn\", \"controlOut\" ];\n\n var Segment = (function (superclass) {\n function Segment(anchor, controlIn, controlOut) {\n superclass.call(this);\n\n this.anchor(anchor || new Point());\n this.controlIn(controlIn);\n this.controlOut(controlOut);\n }\n\n extendStatic(Segment, superclass);\n Segment.prototype = Object.create( superclass && superclass.prototype );\n Segment.prototype.constructor = Segment;\n Segment.fn = Segment.prototype;\n Segment.fn.init = Segment.fn.constructor;\n\n Segment.prototype.bboxTo = function bboxTo (toSegment, matrix) {\n var segmentAnchor = this.anchor().transformCopy(matrix);\n var toSegmentAnchor = toSegment.anchor().transformCopy(matrix);\n var rect;\n\n if (this.controlOut() && toSegment.controlIn()) {\n rect = this._curveBoundingBox(\n segmentAnchor, this.controlOut().transformCopy(matrix),\n toSegment.controlIn().transformCopy(matrix), toSegmentAnchor\n );\n } else {\n rect = this._lineBoundingBox(segmentAnchor, toSegmentAnchor);\n }\n\n return rect;\n };\n\n Segment.prototype._lineBoundingBox = function _lineBoundingBox (p1, p2) {\n return Rect.fromPoints(p1, p2);\n };\n\n Segment.prototype._curveBoundingBox = function _curveBoundingBox (p1, cp1, cp2, p2) {\n var points = [ p1, cp1, cp2, p2 ];\n var extremesX = this._curveExtremesFor(points, \"x\");\n var extremesY = this._curveExtremesFor(points, \"y\");\n var xLimits = arrayLimits([ extremesX.min, extremesX.max, p1.x, p2.x ]);\n var yLimits = arrayLimits([ extremesY.min, extremesY.max, p1.y, p2.y ]);\n\n return Rect.fromPoints(new Point(xLimits.min, yLimits.min), new Point(xLimits.max, yLimits.max));\n };\n\n Segment.prototype._curveExtremesFor = function _curveExtremesFor (points, field) {\n var extremes = this._curveExtremes(\n points[0][field], points[1][field],\n points[2][field], points[3][field]\n );\n\n return {\n min: calculateCurveAt(extremes.min, field, points),\n max: calculateCurveAt(extremes.max, field, points)\n };\n };\n\n Segment.prototype._curveExtremes = function _curveExtremes (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\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\n var min = Math.max(Math.min(t1, t2), 0);\n if (min < 0 || min > 1) {\n min = 0;\n }\n\n var max = Math.min(Math.max(t1, t2), 1);\n if (max > 1 || max < 0) {\n max = 1;\n }\n\n return {\n min: min,\n max: max\n };\n };\n\n Segment.prototype._intersectionsTo = function _intersectionsTo (segment, point) {\n var intersectionsCount;\n if (this.controlOut() && segment.controlIn()) {\n intersectionsCount = curveIntersectionsCount([ this.anchor(), this.controlOut(), segment.controlIn(), segment.anchor() ], point, this.bboxTo(segment));\n } else {\n intersectionsCount = lineIntersectionsCount(this.anchor(), segment.anchor(), point);\n }\n return intersectionsCount;\n };\n\n Segment.prototype._isOnCurveTo = function _isOnCurveTo (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\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\n //the approach is not entirely correct but is close and the alternatives are solving a 6th degree polynomial or testing the segment points\n var points = [ p1, p2, p3, p4 ];\n if (hasRootsInRange(points, point, \"x\", \"y\", width) || hasRootsInRange(points, point, \"y\", \"x\", width)) {\n return true;\n }\n var rotation = transform$1().rotate(45, point);\n var rotatedPoints = [ p1.transformCopy(rotation), p2.transformCopy(rotation), p3.transformCopy(rotation), p4.transformCopy(rotation) ];\n return hasRootsInRange(rotatedPoints, point, \"x\", \"y\", width) || hasRootsInRange(rotatedPoints, point, \"y\", \"x\", width);\n }\n };\n\n Segment.prototype._isOnLineTo = function _isOnLineTo (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([ p1.x, p1.y - width / 2 ], [ p1.distanceTo(p2), width ]);\n return rect.containsPoint(point.transformCopy(transform$1().rotate(-angle, p1)));\n };\n\n Segment.prototype._isOnPathTo = function _isOnPathTo (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 return Segment;\n }(withPoints(HasObservers, points)));\n\n function arrayLimits(arr) {\n var length = arr.length;\n var min = MAX_NUM;\n var max = MIN_NUM;\n\n for (var i = 0; i < length; i ++) {\n max = Math.max(max, arr[i]);\n min = Math.min(min, arr[i]);\n }\n\n return {\n min: min,\n max: max\n };\n }\n\n var geometry = {\n \tCircle: Circle$2,\n \tArc: Arc$2,\n \tRect: Rect,\n \tPoint: Point,\n \tSegment: Segment,\n \tMatrix: Matrix,\n \tSize: Size,\n \ttoMatrix: toMatrix,\n \tTransformation: Transformation,\n \ttransform: transform$1\n };\n\n var WEIGHT = 0.333;\n var EXTREMUM_ALLOWED_DEVIATION = 0.01;\n var X = \"x\";\n var Y = \"y\";\n\n function pointsToCurve(pointsIn, closed) {\n var points = pointsIn.slice(0);\n var segments = [];\n var length = points.length;\n\n if (length > 2) {\n removeDuplicates(0, points);\n length = points.length;\n }\n\n if (length < 2 || (length === 2 && points[0].equals(points[1]))) {\n return segments;\n }\n\n var p0 = points[0];\n var p1 = points[1];\n var p2 = points[2];\n\n segments.push(new Segment(p0));\n\n while (p0.equals(points[length - 1])) {\n closed = true;\n points.pop();\n length--;\n }\n\n if (length === 2) {\n var tangent = getTangent(p0,p1, X, Y);\n\n last(segments).controlOut(\n firstControlPoint(tangent, p0, p1, X, Y)\n );\n\n segments.push(new Segment(\n p1,\n secondControlPoint(tangent, p0, p1, X, Y)\n ));\n\n return segments;\n }\n\n var initialControlPoint, lastControlPoint;\n\n if (closed) {\n p0 = points[length - 1]; p1 = points[0]; p2 = points[1];\n var controlPoints = getControlPoints(p0, p1, p2);\n initialControlPoint = controlPoints[1];\n lastControlPoint = controlPoints[0];\n } else {\n var tangent$1 = getTangent(p0, p1, X,Y);\n initialControlPoint = firstControlPoint(tangent$1, p0, p1, X, Y);\n }\n\n var cp0 = initialControlPoint;\n for (var idx = 0; idx <= length - 3; idx++) {\n removeDuplicates(idx, points);\n length = points.length;\n if (idx + 3 <= length) {\n p0 = points[idx]; p1 = points[idx + 1]; p2 = points[idx + 2];\n var controlPoints$1 = getControlPoints(p0,p1,p2);\n\n last(segments).controlOut(cp0);\n cp0 = controlPoints$1[1];\n\n var cp1 = controlPoints$1[0];\n segments.push(new Segment(p1, cp1));\n }\n }\n\n if (closed) {\n p0 = points[length - 2]; p1 = points[length - 1]; p2 = points[0];\n var controlPoints$2 = getControlPoints(p0, p1, p2);\n\n last(segments).controlOut(cp0);\n segments.push(new Segment(\n p1,\n controlPoints$2[0]\n ));\n\n last(segments).controlOut(controlPoints$2[1]);\n segments.push(new Segment(\n p2,\n lastControlPoint\n ));\n } else {\n var tangent$2 = getTangent(p1, p2, X, Y);\n\n last(segments).controlOut(cp0);\n segments.push(new Segment(\n p2,\n secondControlPoint(tangent$2, p1, p2, X, Y)\n ));\n }\n\n return segments;\n }\n\n function removeDuplicates(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\n function invertAxis(p0, p1, p2) {\n var invertAxis = false;\n\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 = lineFunction(p0,p1);\n var y2 = calculateFunction(fn, p2.x);\n if (!(p0.y <= p1.y && p2.y <= y2) &&\n !(p1.y <= p0.y && p2.y >= y2)) {\n invertAxis = true;\n }\n }\n\n return invertAxis;\n }\n\n function isLine(p0, p1, p2) {\n var fn = lineFunction(p0, p1);\n var y2 = calculateFunction(fn, p2.x);\n\n return (p0.x === p1.x && p1.x === p2.x) || round(y2, 1) === round(p2.y, 1);\n }\n\n function lineFunction(p1, p2) {\n var a = (p2.y - p1.y) / (p2.x - p1.x);\n var b = p1.y - a * p1.x;\n\n return [ b, a ];\n }\n\n function getControlPoints(p0, p1, p2) {\n var xField = X;\n var yField = Y;\n var restrict = false;\n var switchOrientation = false;\n var tangent;\n\n if (isLine(p0, p1, p2)) {\n tangent = getTangent(p0, p1, X, Y);\n } else {\n var monotonic = {\n x: isMonotonicByField(p0, p1, p2, X),\n y: isMonotonicByField(p0, p1, p2, Y)\n };\n\n if (monotonic.x && monotonic.y) {\n tangent = getTangent(p0, p2, X, Y);\n restrict = true;\n } else {\n if (invertAxis(p0, p1, p2)) {\n xField = Y;\n yField = X;\n }\n\n if (monotonic[xField]) {\n tangent = 0;\n } else {\n var sign;\n if ((p2[yField] < p0[yField] && p0[yField] <= p1[yField]) ||\n (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\n tangent = EXTREMUM_ALLOWED_DEVIATION * sign;\n switchOrientation = true;\n }\n }\n }\n\n var secondCP = secondControlPoint(tangent, p0, p1, xField, yField);\n\n if (switchOrientation) {\n var oldXField = xField;\n xField = yField;\n yField = oldXField;\n }\n\n var firstCP = firstControlPoint(tangent, p1, p2, xField, yField);\n\n if (restrict) {\n restrictControlPoint(p0, p1, secondCP, tangent);\n restrictControlPoint(p1, p2, firstCP, tangent);\n }\n\n return [ secondCP, firstCP ];\n }\n\n function restrictControlPoint(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\n function getTangent(p0, p1, xField, yField) {\n var x = p1[xField] - p0[xField];\n var y = p1[yField] - p0[yField];\n var tangent;\n\n if (x === 0) {\n tangent = 0;\n } else {\n tangent = y / x;\n }\n\n return tangent;\n }\n\n function isMonotonicByField(p0, p1, p2, field) {\n return (p2[field] > p1[field] && p1[field] > p0[field]) ||\n (p2[field] < p1[field] && p1[field] < p0[field]);\n }\n\n function firstControlPoint(tangent, p0, p3, xField, yField) {\n var t1 = p0[xField];\n var t2 = p3[xField];\n var distance = (t2 - t1) * WEIGHT;\n\n return point(t1 + distance, p0[yField] + distance * tangent, xField, yField);\n }\n\n function secondControlPoint(tangent, p0, p3, xField, yField) {\n var t1 = p0[xField];\n var t2 = p3[xField];\n var distance = (t2 - t1) * WEIGHT;\n\n return point(t2 - distance, p3[yField] - distance * tangent, xField, yField);\n }\n\n function point(xValue, yValue, xField, yField) {\n var controlPoint = new Point();\n controlPoint[xField] = xValue;\n controlPoint[yField] = yValue;\n\n return controlPoint;\n }\n\n function calculateFunction(fn, x) {\n var length = fn.length;\n var result = 0;\n\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\n var ShapeMap = {\n l: function(path, options) {\n var parameters = options.parameters;\n var position = options.position;\n\n for (var i = 0; i < parameters.length; i += 2) {\n var point = new Point(parameters[i], parameters[i + 1]);\n\n if (options.isRelative) {\n point.translateWith(position);\n }\n\n path.lineTo(point.x, point.y);\n\n position.x = point.x;\n position.y = point.y;\n }\n },\n\n c: function(path, options) {\n var parameters = options.parameters;\n var position = options.position;\n\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\n path.curveTo(controlOut, controlIn, point);\n\n position.x = point.x;\n position.y = point.y;\n }\n },\n\n v: function(path, options) {\n var value = options.isRelative ? 0 : options.position.x;\n\n toLineParamaters(options.parameters, true, value);\n this.l(path, options);\n },\n\n h: function(path, options) {\n var value = options.isRelative ? 0 : options.position.y;\n\n toLineParamaters(options.parameters, false, value);\n this.l(path, options);\n },\n\n a: function(path, options) {\n var parameters = options.parameters;\n var position = options.position;\n\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\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\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\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\n if (previousCommand === \"s\" || previousCommand === \"c\") {\n lastControlIn = last(last(path.paths).segments).controlIn();\n }\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\n if (options.isRelative) {\n controlIn.translateWith(position);\n endPoint.translateWith(position);\n }\n\n if (lastControlIn) {\n controlOut = reflectionPoint(lastControlIn, position);\n } else {\n controlOut = position.clone();\n }\n\n lastControlIn = controlIn;\n\n path.curveTo(controlOut, controlIn, endPoint);\n\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n },\n\n q: function(path, options) {\n var parameters = options.parameters;\n var position = options.position;\n\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\n if (options.isRelative) {\n controlPoint.translateWith(position);\n endPoint.translateWith(position);\n }\n\n var cubicControlPoints = quadraticToCubicControlPoints(position, controlPoint, endPoint);\n\n path.curveTo(cubicControlPoints.controlOut, cubicControlPoints.controlIn, endPoint);\n\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\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\n if (previousCommand === \"q\" || previousCommand === \"t\") {\n var lastSegment = last(last(path.paths).segments);\n controlPoint = lastSegment.controlIn().clone()\n .translateWith(position.scaleCopy(-1 / 3))\n .scale(3 / 2);\n }\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\n if (controlPoint) {\n controlPoint = reflectionPoint(controlPoint, position);\n } else {\n controlPoint = position.clone();\n }\n\n var cubicControlPoints = quadraticToCubicControlPoints(position, controlPoint, endPoint);\n\n path.curveTo(cubicControlPoints.controlOut, cubicControlPoints.controlIn, endPoint);\n\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n }\n };\n\n function toLineParamaters(parameters, isVertical, value) {\n var insertPosition = isVertical ? 0 : 1;\n\n for (var i = 0; i < parameters.length; i += 2) {\n parameters.splice(i + insertPosition, 0, value);\n }\n }\n\n function reflectionPoint(point, center) {\n if (point && center) {\n return center.scaleCopy(2).translate(-point.x, -point.y);\n }\n }\n\n var third = 1 / 3;\n\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\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\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\n function parsePath(pathInstance, str) {\n var position = new Point();\n var previousCommand;\n\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\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\n pathInstance.moveTo(position.x, position.y);\n\n if (parameters.length > 2) {\n command = \"l\";\n parameters.splice(0, 2);\n }\n }\n\n if (ShapeMap[command]) {\n ShapeMap[command](\n pathInstance, {\n parameters: parameters,\n position: position,\n isRelative: isRelative,\n previousCommand: previousCommand\n }\n );\n\n if (closePath && closePath.toLowerCase() === CLOSE) {\n pathInstance.close();\n }\n } else if (command !== MOVE) {\n throw new Error(\"Error while parsing SVG path. Unsupported command: \" + command);\n }\n\n previousCommand = command;\n });\n\n return pathInstance;\n }\n\n function elementsBoundingBox(elements, applyTransform, transformation) {\n var boundingBox;\n\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\n return boundingBox;\n }\n\n function elementsClippedBoundingBox(elements, transformation) {\n var boundingBox;\n\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\n return boundingBox;\n }\n\n var SPACE = ' ';\n var printPoints = function (precision) { return function () {\n var arguments$1 = arguments;\n\n var points = [], len = arguments.length;\n while ( len-- ) { points[ len ] = arguments$1[ len ]; }\n\n return points.map(function (p) { return p.toString(precision); }).join(SPACE);\n } };\n var segmentType = function (segmentStart, segmentEnd) { return segmentStart.controlOut() && segmentEnd.controlIn() ? 'C' : 'L'; };\n\n var Path = (function (superclass) {\n function Path(options) {\n superclass.call(this, options);\n this.segments = new GeometryElementsArray();\n this.segments.addObserver(this);\n\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n\n if (!defined(this.options.stroke.lineJoin)) {\n this.options.set('stroke.lineJoin', 'miter');\n }\n }\n }\n\n extendStatic(Path, superclass);\n Path.prototype = Object.create( superclass && superclass.prototype );\n Path.prototype.constructor = Path;\n Path.fn = Path.prototype;\n Path.fn.init = Path.fn.constructor;\n\n var prototypeAccessors = { nodeType: {} };\n\n prototypeAccessors.nodeType.get = function () {\n return 'Path';\n };\n\n Path.prototype.moveTo = function moveTo (x, y) {\n this.suspend();\n this.segments.elements([]);\n this.resume();\n\n this.lineTo(x, y);\n\n return this;\n };\n\n Path.prototype.lineTo = function lineTo (x, y) {\n var point$$1 = defined(y) ? new Point(x, y) : x;\n var segment = new Segment(point$$1);\n\n this.segments.push(segment);\n\n return this;\n };\n\n Path.prototype.curveTo = function curveTo (controlOut, controlIn, point$$1) {\n if (this.segments.length > 0) {\n var lastSegment = last(this.segments);\n var segment = new Segment(point$$1, controlIn);\n this.suspend();\n lastSegment.controlOut(controlOut);\n this.resume();\n\n this.segments.push(segment);\n }\n\n return this;\n };\n\n Path.prototype.arc = function arc (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),\n 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\n this._addArcSegments(arc);\n }\n\n return this;\n };\n\n Path.prototype.arcTo = function arcTo (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, Point.create(end), rx, ry, largeArc, swipe, rotation);\n\n this._addArcSegments(arc);\n }\n return this;\n };\n\n Path.prototype._addArcSegments = function _addArcSegments (arc) {\n var this$1$1 = this;\n\n this.suspend();\n\n var curvePoints = arc.curvePoints();\n\n for (var i = 1; i < curvePoints.length; i += 3) {\n this$1$1.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\n }\n\n this.resume();\n this.geometryChange();\n };\n\n Path.prototype.close = function close () {\n this.options.closed = true;\n this.geometryChange();\n\n return this;\n };\n\n Path.prototype.rawBBox = function rawBBox () {\n return this._bbox();\n };\n\n Path.prototype.toString = function toString (digits) {\n var output = '';\n\n var segments = this.segments;\n var length = segments.length;\n if (length > 0) {\n var parts = [];\n var print = printPoints(digits);\n var currentType;\n\n for (var i = 1; i < length; i++) {\n var type = segmentType(segments[i - 1], segments[i]);\n if (type !== currentType) {\n currentType = type;\n parts.push(type);\n }\n\n if (type === 'L') {\n parts.push(print(segments[i].anchor()));\n } else {\n parts.push(print(\n segments[i - 1].controlOut(), segments[i].controlIn(), segments[i].anchor()\n ));\n }\n }\n\n output = 'M' + print(segments[0].anchor()) + SPACE + parts.join(SPACE);\n if (this.options.closed) {\n output += 'Z';\n }\n }\n\n return output;\n };\n\n Path.prototype._containsPoint = function _containsPoint (point$$1) {\n var segments = this.segments;\n var length = segments.length;\n var intersectionsCount = 0;\n var previous, current;\n\n for (var idx = 1; idx < length; idx++) {\n previous = segments[idx - 1];\n current = segments[idx];\n intersectionsCount += previous._intersectionsTo(current, point$$1);\n }\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$$1);\n }\n\n return intersectionsCount % 2 !== 0;\n };\n\n Path.prototype._isOnPath = function _isOnPath (point$$1, width) {\n var segments = this.segments;\n var length = segments.length;\n var pathWidth = width || this.options.stroke.width;\n\n if (length > 1) {\n if (segments[0]._isOnPathTo(segments[1], point$$1, pathWidth, 'start')) {\n return true;\n }\n\n for (var idx = 2; idx <= length - 2; idx++) {\n if (segments[idx - 1]._isOnPathTo(segments[idx], point$$1, pathWidth)) {\n return true;\n }\n }\n\n if (segments[length - 2]._isOnPathTo(segments[length - 1], point$$1, pathWidth, 'end')) {\n return true;\n }\n }\n return false;\n };\n\n Path.prototype._bbox = function _bbox (matrix) {\n var segments = this.segments;\n var length = segments.length;\n var boundingBox;\n\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\n return boundingBox;\n };\n\n Path.parse = function parse (str, options) {\n return MultiPath.parse(str, options);\n };\n\n Path.fromRect = function fromRect (rect, options) {\n var path = new Path(options);\n var ref = rect.cornerRadius;\n var rx = ref[0];\n var ry = ref[1];\n\n if (rx === 0 && ry === 0) {\n path.moveTo(rect.topLeft())\n .lineTo(rect.topRight())\n .lineTo(rect.bottomRight())\n .lineTo(rect.bottomLeft())\n .close();\n } else {\n var origin = rect.origin;\n var x = origin.x;\n var y = origin.y;\n var width = rect.width();\n var height = rect.height();\n rx = limitValue(rx, 0, width / 2);\n ry = limitValue(ry, 0, height / 2);\n\n path.moveTo(x + rx, y)\n .lineTo(x + width - rx, y)\n .arcTo([ x + width, y + ry ], rx, ry, false)\n .lineTo(x + width, y + height - ry)\n .arcTo([ x + width - rx, y + height ], rx, ry, false)\n .lineTo(x + rx, y + height)\n .arcTo([ x, y + height - ry ], rx, ry, false)\n .lineTo(x, y + ry)\n .arcTo([ x + rx, y ], rx, ry, false);\n }\n\n return path;\n };\n\n Path.fromPoints = function fromPoints (points, options) {\n if (points) {\n var path = new Path(options);\n\n for (var i = 0; i < points.length; i++) {\n var point$$1 = Point.create(points[i]);\n if (point$$1) {\n if (i === 0) {\n path.moveTo(point$$1);\n } else {\n path.lineTo(point$$1);\n }\n }\n }\n\n return path;\n }\n };\n\n Path.curveFromPoints = function curveFromPoints (points, options) {\n if (points) {\n var segments = pointsToCurve(points);\n var path = new Path(options);\n path.segments.push.apply(path.segments, segments);\n\n return path;\n }\n };\n\n Path.fromArc = function fromArc (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\n Object.defineProperties( Path.prototype, prototypeAccessors );\n\n return Path;\n }(paintable(measurable(Element$1))));\n\n var MultiPath = (function (superclass) {\n function MultiPath(options) {\n superclass.call(this, options);\n this.paths = new GeometryElementsArray();\n this.paths.addObserver(this);\n\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n }\n }\n\n extendStatic(MultiPath, superclass);\n MultiPath.prototype = Object.create( superclass && superclass.prototype );\n MultiPath.prototype.constructor = MultiPath;\n MultiPath.fn = MultiPath.prototype;\n MultiPath.fn.init = MultiPath.fn.constructor;\n\n var prototypeAccessors$1 = { nodeType: {} };\n\n MultiPath.parse = function parse (str, options) {\n var instance = new MultiPath(options);\n return parsePath(instance, str);\n };\n\n MultiPath.prototype.toString = function toString (digits) {\n var paths = this.paths;\n var output = '';\n\n if (paths.length > 0) {\n var result = [];\n\n for (var i = 0; i < paths.length; i++) {\n result.push(paths[i].toString(digits));\n }\n\n output = result.join(SPACE);\n }\n\n return output;\n };\n\n prototypeAccessors$1.nodeType.get = function () {\n return 'MultiPath';\n };\n\n MultiPath.prototype.moveTo = function moveTo (x, y) {\n var path = new Path();\n path.moveTo(x, y);\n\n this.paths.push(path);\n\n return this;\n };\n\n MultiPath.prototype.lineTo = function lineTo (x, y) {\n if (this.paths.length > 0) {\n last(this.paths).lineTo(x, y);\n }\n\n return this;\n };\n\n MultiPath.prototype.curveTo = function curveTo (controlOut, controlIn, point$$1) {\n if (this.paths.length > 0) {\n last(this.paths).curveTo(controlOut, controlIn, point$$1);\n }\n\n return this;\n };\n\n MultiPath.prototype.arc = function arc (startAngle, endAngle, radiusX, radiusY, anticlockwise) {\n if (this.paths.length > 0) {\n last(this.paths).arc(startAngle, endAngle, radiusX, radiusY, anticlockwise);\n }\n\n return this;\n };\n\n MultiPath.prototype.arcTo = function arcTo (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\n return this;\n };\n\n MultiPath.prototype.close = function close () {\n if (this.paths.length > 0) {\n last(this.paths).close();\n }\n\n return this;\n };\n\n MultiPath.prototype._bbox = function _bbox (matrix) {\n return elementsBoundingBox(this.paths, true, matrix);\n };\n\n MultiPath.prototype.rawBBox = function rawBBox () {\n return elementsBoundingBox(this.paths, false);\n };\n\n MultiPath.prototype._containsPoint = function _containsPoint (point$$1) {\n var paths = this.paths;\n\n for (var idx = 0; idx < paths.length; idx++) {\n if (paths[idx]._containsPoint(point$$1)) {\n return true;\n }\n }\n return false;\n };\n\n MultiPath.prototype._isOnPath = function _isOnPath (point$$1) {\n var paths = this.paths;\n var width = this.options.stroke.width;\n\n for (var idx = 0; idx < paths.length; idx++) {\n if (paths[idx]._isOnPath(point$$1, width)) {\n return true;\n }\n }\n return false;\n };\n\n MultiPath.prototype._clippedBBox = function _clippedBBox (transformation) {\n return elementsClippedBoundingBox(this.paths, this.currentTransform(transformation));\n };\n\n Object.defineProperties( MultiPath.prototype, prototypeAccessors$1 );\n\n return MultiPath;\n }(paintable(measurable(Element$1))));\n\n var DEFAULT_STROKE$1 = \"#000\";\n\n var Arc = (function (superclass) {\n function Arc(geometry, options) {\n if (geometry === void 0) { geometry = new Arc$2(); }\n if (options === void 0) { options = {}; }\n\n superclass.call(this, options);\n\n this.geometry(geometry);\n\n if (!defined(this.options.stroke)) {\n this.stroke(DEFAULT_STROKE$1);\n }\n }\n\n extendStatic(Arc, superclass);\n Arc.prototype = Object.create( superclass && superclass.prototype );\n Arc.prototype.constructor = Arc;\n Arc.fn = Arc.prototype;\n Arc.fn.init = Arc.fn.constructor;\n\n var prototypeAccessors = { nodeType: {} };\n\n prototypeAccessors.nodeType.get = function () {\n return \"Arc\";\n };\n\n Arc.prototype._bbox = function _bbox (matrix) {\n return this._geometry.bbox(matrix);\n };\n\n Arc.prototype.rawBBox = function rawBBox () {\n return this.geometry().bbox();\n };\n\n Arc.prototype.toPath = function toPath () {\n var path = new Path();\n var curvePoints = this.geometry().curvePoints();\n\n if (curvePoints.length > 0) {\n path.moveTo(curvePoints[0].x, curvePoints[0].y);\n\n for (var i = 1; i < curvePoints.length; i += 3) {\n path.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\n }\n }\n\n return path;\n };\n\n Arc.prototype._containsPoint = function _containsPoint (point) {\n return this.geometry().containsPoint(point);\n };\n\n Arc.prototype._isOnPath = function _isOnPath (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n };\n\n Object.defineProperties( Arc.prototype, prototypeAccessors );\n\n return Arc;\n }(paintable(measurable(withGeometry(Element$1)))));\n\n var DEFAULT_FONT = \"12px sans-serif\";\n var DEFAULT_FILL = \"#000\";\n\n var Text = (function (superclass) {\n function Text(content, position, options) {\n if (position === void 0) { position = new Point(); }\n if (options === void 0) { options = {}; }\n\n superclass.call(this, options);\n\n this.content(content);\n this.position(position);\n\n if (!this.options.font) {\n this.options.font = DEFAULT_FONT;\n }\n\n if (!defined(this.options.fill)) {\n this.fill(DEFAULT_FILL);\n }\n }\n\n extendStatic(Text, superclass);\n Text.prototype = Object.create( superclass && superclass.prototype );\n Text.prototype.constructor = Text;\n Text.fn = Text.prototype;\n Text.fn.init = Text.fn.constructor;\n\n var prototypeAccessors = { nodeType: {} };\n\n prototypeAccessors.nodeType.get = function () {\n return \"Text\";\n };\n\n Text.prototype.content = function content (value) {\n if (defined(value)) {\n this.options.set(\"content\", value);\n return this;\n }\n\n return this.options.get(\"content\");\n };\n\n Text.prototype.measure = function measure () {\n var metrics = kendoUtil.measureText(this.content(), {\n font: this.options.get(\"font\")\n });\n\n return metrics;\n };\n\n Text.prototype.rect = function rect () {\n var size = this.measure();\n var pos = this.position().clone();\n return new Rect(pos, [ size.width, size.height ]);\n };\n\n Text.prototype.bbox = function bbox (transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n return this.rect().bbox(combinedMatrix);\n };\n\n Text.prototype.rawBBox = function rawBBox () {\n return this.rect().bbox();\n };\n\n Text.prototype._containsPoint = function _containsPoint (point) {\n return this.rect().containsPoint(point);\n };\n\n Object.defineProperties( Text.prototype, prototypeAccessors );\n\n return Text;\n }(paintable(withPoints(Element$1, [ \"position\" ]))));\n\n var Image$1 = (function (superclass) {\n function Image(src, rect, options) {\n if (rect === void 0) { rect = new Rect(); }\n if (options === void 0) { options = {}; }\n\n superclass.call(this, options);\n\n this.src(src);\n this.rect(rect);\n }\n\n extendStatic(Image, superclass);\n Image.prototype = Object.create( superclass && superclass.prototype );\n Image.prototype.constructor = Image;\n Image.fn = Image.prototype;\n Image.fn.init = Image.fn.constructor;\n\n var prototypeAccessors = { nodeType: {} };\n\n prototypeAccessors.nodeType.get = function () {\n return \"Image\";\n };\n\n Image.prototype.src = function src (value) {\n if (defined(value)) {\n this.options.set(\"src\", value);\n return this;\n }\n\n return this.options.get(\"src\");\n };\n\n Image.prototype.bbox = function bbox (transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n return this._rect.bbox(combinedMatrix);\n };\n\n Image.prototype.rawBBox = function rawBBox () {\n return this._rect.bbox();\n };\n\n Image.prototype._containsPoint = function _containsPoint (point) {\n return this._rect.containsPoint(point);\n };\n\n Image.prototype._hasFill = function _hasFill () {\n return this.src();\n };\n\n Object.defineProperties( Image.prototype, prototypeAccessors );\n\n return Image;\n }(withGeometry(Element$1, [ \"rect\" ])));\n\n var traversable = function (TBase, childrenField) { return (\n (function (TBase) {\n function anonymous () {\n TBase.apply(this, arguments);\n }\n\n extendStatic(anonymous, TBase);\n anonymous.prototype = Object.create( TBase && TBase.prototype );\n anonymous.prototype.constructor = anonymous;\n anonymous.fn = anonymous.prototype;\n anonymous.fn.init = anonymous.fn.constructor;\n\n anonymous.prototype.traverse = function traverse (callback) {\n var children = this[childrenField];\n\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n\n if (child.traverse) {\n child.traverse(callback);\n } else {\n callback(child);\n }\n }\n\n return this;\n };\n\n return anonymous;\n }(TBase))\n ); };\n\n var Group = (function (superclass) {\n function Group(options) {\n superclass.call(this, options);\n this.children = [];\n }\n\n extendStatic(Group, superclass);\n Group.prototype = Object.create( superclass && superclass.prototype );\n Group.prototype.constructor = Group;\n Group.fn = Group.prototype;\n Group.fn.init = Group.fn.constructor;\n\n var prototypeAccessors = { nodeType: {} };\n\n prototypeAccessors.nodeType.get = function () {\n return \"Group\";\n };\n\n Group.prototype.childrenChange = function childrenChange (action, items, index) {\n this.trigger(\"childrenChange\",{\n action: action,\n items: items,\n index: index\n });\n };\n\n Group.prototype.append = function append$1 () {\n append$1$1(this.children, arguments);\n this._reparent(arguments, this);\n\n this.childrenChange(\"add\", arguments);\n\n return this;\n };\n\n Group.prototype.insert = function insert (index, element) {\n this.children.splice(index, 0, element);\n element.parent = this;\n\n this.childrenChange(\"add\", [ element ], index);\n\n return this;\n };\n\n Group.prototype.insertAt = function insertAt (element, index) {\n return this.insert(index, element);\n };\n\n Group.prototype.remove = function remove (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\n return this;\n };\n\n Group.prototype.removeAt = function removeAt (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\n return this;\n };\n\n Group.prototype.clear = function clear () {\n var items = this.children;\n this.children = [];\n this._reparent(items, null);\n\n this.childrenChange(\"remove\", items, 0);\n\n return this;\n };\n\n Group.prototype.bbox = function bbox (transformation) {\n return elementsBoundingBox(this.children, true, this.currentTransform(transformation));\n };\n\n Group.prototype.rawBBox = function rawBBox () {\n return elementsBoundingBox(this.children, false);\n };\n\n Group.prototype._clippedBBox = function _clippedBBox (transformation) {\n return elementsClippedBoundingBox(this.children, this.currentTransform(transformation));\n };\n\n Group.prototype.currentTransform = function currentTransform (transformation) {\n return Element$1.prototype.currentTransform.call(this, transformation) || null;\n };\n\n Group.prototype.containsPoint = function containsPoint (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\n Group.prototype._reparent = function _reparent (elements, newParent) {\n var this$1$1 = this;\n\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$1 && parent.remove) {\n parent.remove(child);\n }\n\n child.parent = newParent;\n }\n };\n\n Object.defineProperties( Group.prototype, prototypeAccessors );\n\n return Group;\n }(traversable(Element$1, \"children\")));\n\n function translateToPoint(point, bbox, element) {\n var transofrm = element.transform() || transform$1();\n var matrix = transofrm.matrix();\n matrix.e += point.x - bbox.origin.x;\n matrix.f += point.y - bbox.origin.y;\n\n transofrm.matrix(matrix);\n element.transform(transofrm);\n }\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\n return start;\n }\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\n return start;\n }\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\n var forEach = function (elements, callback) {\n elements.forEach(callback);\n };\n\n var forEachReverse = function (elements, callback) {\n var length = elements.length;\n\n for (var idx = length - 1; idx >= 0; idx--) {\n callback(elements[idx], idx);\n }\n };\n\n var Layout = (function (Group$$1) {\n function Layout(rect, options) {\n Group$$1.call(this, $.extend({}, DEFAULT_OPTIONS, options));\n this._rect = rect;\n this._fieldMap = {};\n }\n\n extendStatic(Layout, Group$$1);\n Layout.prototype = Object.create( Group$$1 && Group$$1.prototype );\n Layout.prototype.constructor = Layout;\n Layout.fn = Layout.prototype;\n Layout.fn.init = Layout.fn.constructor;\n\n Layout.prototype.rect = function rect (value) {\n if (value) {\n this._rect = value;\n return this;\n }\n\n return this._rect;\n };\n\n Layout.prototype._initMap = function _initMap () {\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\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\n Layout.prototype.reflow = function reflow () {\n var this$1$1 = this;\n\n if (!this._rect || this.children.length === 0) {\n return;\n }\n this._initMap();\n\n if (this.options.transform) {\n this.transform(null);\n }\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\n var arrangeElements = function (bbox, idx) {\n var element = group.elements[idx];\n\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\n for (var groupIdx = 0; groupIdx < groups.length; groupIdx++) {\n group = groups[groupIdx];\n groupOrigin[groupAxis] = elementStart = this$1$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$1.forEach(group.bboxes, arrangeElements);\n\n groupStart += group.lineSize + options.lineSpacing;\n }\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 = transform$1();\n if (groupAxis === \"x\") {\n transform.translate(rect.origin.x - scaledStart.x, newStart - scaledStart.y);\n } else {\n transform.translate(newStart - scaledStart.x, rect.origin.y - scaledStart.y);\n }\n transform.scale(scale, scale);\n\n this.transform(transform);\n }\n };\n\n Layout.prototype._initGroups = function _initGroups () {\n var this$1$1 = this;\n\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\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$1._rect.size[sizeField]) {\n if (group.bboxes.length === 0) {\n this$1$1._addToGroup(group, bbox, element);\n addGroup();\n group = this$1$1._newGroup();\n } else {\n addGroup();\n group = this$1$1._newGroup();\n this$1$1._addToGroup(group, bbox, element);\n }\n } else {\n this$1$1._addToGroup(group, bbox, element);\n }\n }\n }\n\n if (group.bboxes.length) {\n addGroup();\n }\n\n return {\n groups: groups,\n groupsSize: groupsSize\n };\n };\n\n Layout.prototype._addToGroup = function _addToGroup (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\n Layout.prototype._newGroup = function _newGroup () {\n return {\n lineSize: 0,\n size: -this.options.spacing,\n bboxes: [],\n elements: []\n };\n };\n\n return Layout;\n }(Group));\n\n var Rect$2 = (function (superclass) {\n function Rect$$1(geometry, options) {\n if (geometry === void 0) { geometry = new Rect(); }\n if (options === void 0) { options = {}; }\n\n superclass.call(this, options);\n\n this.geometry(geometry);\n\n if (!defined(this.options.stroke)) {\n this.stroke(\"#000\");\n }\n }\n\n extendStatic(Rect$$1, superclass);\n Rect$$1.prototype = Object.create( superclass && superclass.prototype );\n Rect$$1.prototype.constructor = Rect$$1;\n Rect$$1.fn = Rect$$1.prototype;\n Rect$$1.fn.init = Rect$$1.fn.constructor;\n\n var prototypeAccessors = { nodeType: {} };\n\n prototypeAccessors.nodeType.get = function () {\n return \"Rect\";\n };\n\n Rect$$1.prototype._bbox = function _bbox (matrix) {\n return this._geometry.bbox(matrix);\n };\n\n Rect$$1.prototype.rawBBox = function rawBBox () {\n return this._geometry.bbox();\n };\n\n Rect$$1.prototype._containsPoint = function _containsPoint (point) {\n return this._geometry.containsPoint(point);\n };\n\n Rect$$1.prototype._isOnPath = function _isOnPath (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n };\n\n Object.defineProperties( Rect$$1.prototype, prototypeAccessors );\n\n return Rect$$1;\n }(paintable(measurable(withGeometry(Element$1)))));\n\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\n function align(elements, rect, alignment) {\n alignElements(elements, rect, alignment, \"x\", \"width\");\n }\n\n function vAlign(elements, rect, alignment) {\n alignElements(elements, rect, alignment, \"y\", \"height\");\n }\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\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\n function createStackElements(elements) {\n var stackElements = [];\n\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\n return stackElements;\n }\n\n function stack(elements) {\n stackElements(createStackElements(elements), \"x\", \"y\", \"width\");\n }\n\n function vStack(elements) {\n stackElements(createStackElements(elements), \"y\", \"x\", \"height\");\n }\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\n var addElementToStack = function() {\n stack.push({\n element: element,\n bbox: bbox\n });\n };\n\n for (var idx = 0; idx < elements.length; idx++) {\n element = elements[idx];\n\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\n if (stack.length) {\n stacks.push(stack);\n }\n\n return stacks;\n }\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\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\n function wrap(elements, rect) {\n return wrapElements(elements, rect, \"x\", \"y\", \"width\");\n }\n\n function vWrap(elements, rect) {\n return wrapElements(elements, rect, \"y\", \"x\", \"height\");\n }\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 = element.transform() || transform$1();\n transform.scale(scale, scale);\n element.transform(transform);\n }\n }\n }\n\n var StopsArray = (function (ElementsArray$$1) {\n function StopsArray () {\n ElementsArray$$1.apply(this, arguments);\n }\n\n extendStatic(StopsArray, ElementsArray$$1);\n StopsArray.prototype = Object.create( ElementsArray$$1 && ElementsArray$$1.prototype );\n StopsArray.prototype.constructor = StopsArray;\n StopsArray.fn = StopsArray.prototype;\n StopsArray.fn.init = StopsArray.fn.constructor;\n\n StopsArray.prototype._change = function _change () {\n this.optionsChange({\n field: \"stops\"\n });\n };\n\n return StopsArray;\n }(ElementsArray));\n\n function optionsAccessor(name) {\n return function(value) {\n if (defined(value)) {\n this.options.set(name, value);\n return this;\n }\n\n return this.options.get(name);\n };\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\n var withOptions = function (TBase, names) {\n var result = (function (TBase) {\n function result () {\n TBase.apply(this, arguments);\n }extendStatic(result, TBase);\n result.prototype = Object.create( TBase && TBase.prototype );\n result.prototype.constructor = result;\n result.fn = result.prototype;\n result.fn.init = result.fn.constructor;\n\n return result;\n }(TBase));\n defineOptionsAccessors(result.prototype, names);\n\n return result;\n };\n\n var options = [ \"offset\", \"color\", \"opacity\" ];\n\n var GradientStop = (function (superclass) {\n function GradientStop(offset, color, opacity) {\n superclass.call(this);\n\n this.options = new OptionsStore({\n offset: offset,\n color: color,\n opacity: defined(opacity) ? opacity : 1\n });\n\n this.options.addObserver(this);\n }\n\n extendStatic(GradientStop, superclass);\n GradientStop.prototype = Object.create( superclass && superclass.prototype );\n GradientStop.prototype.constructor = GradientStop;\n GradientStop.fn = GradientStop.prototype;\n GradientStop.fn.init = GradientStop.fn.constructor;\n\n GradientStop.create = function create (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\n return stop;\n }\n };\n\n return GradientStop;\n }(withOptions(HasObservers, options)));\n\n var Gradient = (function (HasObservers$$1) {\n function Gradient(options) {\n if (options === void 0) { options = {}; }\n\n HasObservers$$1.call(this);\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\n extendStatic(Gradient, HasObservers$$1);\n Gradient.prototype = Object.create( HasObservers$$1 && HasObservers$$1.prototype );\n Gradient.prototype.constructor = Gradient;\n Gradient.fn = Gradient.prototype;\n Gradient.fn.init = Gradient.fn.constructor;\n\n var prototypeAccessors = { nodeType: {} };\n\n prototypeAccessors.nodeType.get = function () {\n return \"Gradient\";\n };\n\n Gradient.prototype.userSpace = function userSpace (value) {\n if (defined(value)) {\n this._userSpace = value;\n this.optionsChange();\n return this;\n }\n\n return this._userSpace;\n };\n\n Gradient.prototype._createStops = function _createStops (stops) {\n if (stops === void 0) { stops = []; }\n\n var result = [];\n for (var idx = 0; idx < stops.length; idx++) {\n result.push(GradientStop.create(stops[idx]));\n }\n\n return result;\n };\n\n Gradient.prototype.addStop = function addStop (offset, color, opacity) {\n this.stops.push(new GradientStop(offset, color, opacity));\n };\n\n Gradient.prototype.removeStop = function removeStop (stop) {\n var index = this.stops.indexOf(stop);\n if (index >= 0) {\n this.stops.splice(index, 1);\n }\n };\n\n Gradient.prototype.optionsChange = function optionsChange (e) {\n this.trigger(\"optionsChange\", {\n field: \"gradient\" + (e ? \".\" + e.field : \"\"),\n value: this\n });\n };\n\n Gradient.prototype.geometryChange = function geometryChange () {\n this.optionsChange();\n };\n\n Object.defineProperties( Gradient.prototype, prototypeAccessors );\n\n return Gradient;\n }(HasObservers));\n\n var points$1 = [ \"start\", \"end\" ];\n\n var LinearGradient = (function (superclass) {\n function LinearGradient(options) {\n if (options === void 0) { options = {}; }\n\n superclass.call(this, options);\n\n this.start(options.start || new Point());\n this.end(options.end || new Point(1, 0));\n }\n\n extendStatic(LinearGradient, superclass);\n LinearGradient.prototype = Object.create( superclass && superclass.prototype );\n LinearGradient.prototype.constructor = LinearGradient;\n LinearGradient.fn = LinearGradient.prototype;\n LinearGradient.fn.init = LinearGradient.fn.constructor;\n\n return LinearGradient;\n }(withPoints(Gradient, points$1)));\n\n var RadialGradient = (function (superclass) {\n function RadialGradient(options) {\n if (options === void 0) { options = {}; }\n\n superclass.call(this, options);\n\n this.center(options.center || new Point());\n this._radius = defined(options.radius) ? options.radius : 1;\n this._fallbackFill = options.fallbackFill;\n }\n\n extendStatic(RadialGradient, superclass);\n RadialGradient.prototype = Object.create( superclass && superclass.prototype );\n RadialGradient.prototype.constructor = RadialGradient;\n RadialGradient.fn = RadialGradient.prototype;\n RadialGradient.fn.init = RadialGradient.fn.constructor;\n\n RadialGradient.prototype.radius = function radius (value) {\n if (defined(value)) {\n this._radius = value;\n this.geometryChange();\n return this;\n }\n\n return this._radius;\n };\n\n RadialGradient.prototype.fallbackFill = function fallbackFill (value) {\n if (defined(value)) {\n this._fallbackFill = value;\n this.optionsChange();\n return this;\n }\n\n return this._fallbackFill;\n };\n\n return RadialGradient;\n }(withPoints(Gradient, [ \"center\" ])));\n\n function swing(position) {\n return 0.5 - Math.cos(position * Math.PI) / 2;\n }\n\n function linear(position) {\n return position;\n }\n\n function easeOutElastic(position, time, start, diff) {\n var s = 1.70158,\n p = 0,\n a = diff;\n\n if (position === 0) {\n return start;\n }\n\n if (position === 1) {\n return start + diff;\n }\n\n if (!p) {\n p = 0.5;\n }\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\n return a * Math.pow(2, -10 * position) *\n Math.sin((Number(position) - s) * (1.1 * Math.PI) / p) + diff + start;\n }\n\n var easingFunctions = {\n \tswing: swing,\n \tlinear: linear,\n \teaseOutElastic: easeOutElastic\n };\n\n var instance;\n\n var AnimationFactory = (function (Class$$1) {\n function AnimationFactory() {\n Class$$1.call(this);\n\n this._items = [];\n }\n\n extendStatic(AnimationFactory, Class$$1);\n AnimationFactory.prototype = Object.create( Class$$1 && Class$$1.prototype );\n AnimationFactory.prototype.constructor = AnimationFactory;\n AnimationFactory.fn = AnimationFactory.prototype;\n AnimationFactory.fn.init = AnimationFactory.fn.constructor;\n\n var staticAccessors = { current: {} };\n\n staticAccessors.current.get = function () {\n if (!instance) {\n instance = new AnimationFactory();\n }\n\n return instance;\n };\n\n AnimationFactory.prototype.register = function register (name, type) {\n this._items.push({\n name: name,\n type: type\n });\n };\n\n AnimationFactory.prototype.create = function create (element, options) {\n var items = this._items;\n var match;\n\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\n if (match) {\n return new match.type(element, options);\n }\n };\n\n Object.defineProperties( AnimationFactory, staticAccessors );\n\n return AnimationFactory;\n }(Class));\n\n var Animation = (function (Class$$1) {\n function Animation(element, options) {\n Class$$1.call(this);\n\n this.options = $.extend({}, this.options, options);\n this.element = element;\n }\n\n extendStatic(Animation, Class$$1);\n Animation.prototype = Object.create( Class$$1 && Class$$1.prototype );\n Animation.prototype.constructor = Animation;\n Animation.fn = Animation.prototype;\n Animation.fn.init = Animation.fn.constructor;\n\n var prototypeAccessors = { options: {} };\n\n Animation.create = function create (type, element, options) {\n return AnimationFactory.current.create(type, element, options);\n };\n\n prototypeAccessors.options.get = function () {\n return this._options || {\n duration: 500,\n easing: \"swing\"\n };\n };\n\n prototypeAccessors.options.set = function (value) {\n this._options = value;\n };\n\n Animation.prototype.setup = function setup () {};\n Animation.prototype.step = function step () {};\n\n Animation.prototype.play = function play () {\n var this$1$1 = this;\n\n var options = this.options;\n var duration = options.duration;\n var delay = options.delay; if (delay === void 0) { delay = 0; }\n var easing = easingFunctions[options.easing];\n var start = now() + delay;\n var finish = start + duration;\n\n if (duration === 0) {\n this.step(1);\n this.abort();\n } else {\n setTimeout(function () {\n var loop = function () {\n if (this$1$1._stopped) {\n return;\n }\n\n var wallTime = now();\n\n var time = limitValue(wallTime - start, 0, duration);\n var position = time / duration;\n var easingPosition = easing(position, time, 0, 1, duration);\n\n this$1$1.step(easingPosition);\n\n if (wallTime < finish) {\n kendo.animationFrame(loop);\n } else {\n this$1$1.abort();\n }\n };\n\n loop();\n }, delay);\n }\n };\n\n Animation.prototype.abort = function abort () {\n this._stopped = true;\n };\n\n Animation.prototype.destroy = function destroy () {\n this.abort();\n };\n\n Object.defineProperties( Animation.prototype, prototypeAccessors );\n\n return Animation;\n }(Class));\n\n var instance$1;\n\n var PathParser = (function (Class$$1) {\n function PathParser () {\n Class$$1.apply(this, arguments);\n }\n\n extendStatic(PathParser, Class$$1);\n PathParser.prototype = Object.create( Class$$1 && Class$$1.prototype );\n PathParser.prototype.constructor = PathParser;\n PathParser.fn = PathParser.prototype;\n PathParser.fn.init = PathParser.fn.constructor;\n\n var staticAccessors = { current: {} };\n\n staticAccessors.current.get = function () {\n if (!instance$1) {\n instance$1 = new PathParser();\n }\n\n return instance$1;\n };\n\n PathParser.prototype.parse = function parse (str, options) {\n var multiPath = new MultiPath(options);\n return parsePath(multiPath, str);\n };\n\n Object.defineProperties( PathParser, staticAccessors );\n\n return PathParser;\n }(Class));\n\n var BaseNode = (function (Class$$1) {\n function BaseNode(srcElement) {\n Class$$1.call(this);\n\n this.childNodes = [];\n this.parent = null;\n\n if (srcElement) {\n this.srcElement = srcElement;\n this.observe();\n }\n }\n\n extendStatic(BaseNode, Class$$1);\n BaseNode.prototype = Object.create( Class$$1 && Class$$1.prototype );\n BaseNode.prototype.constructor = BaseNode;\n BaseNode.fn = BaseNode.prototype;\n BaseNode.fn.init = BaseNode.fn.constructor;\n\n BaseNode.prototype.destroy = function destroy () {\n var this$1$1 = this;\n\n if (this.srcElement) {\n this.srcElement.removeObserver(this);\n }\n\n var children = this.childNodes;\n for (var i = 0; i < children.length; i++) {\n this$1$1.childNodes[i].destroy();\n }\n\n this.parent = null;\n };\n\n BaseNode.prototype.load = function load () {};\n\n BaseNode.prototype.observe = function observe () {\n if (this.srcElement) {\n this.srcElement.addObserver(this);\n }\n };\n\n BaseNode.prototype.append = function append (node) {\n this.childNodes.push(node);\n node.parent = this;\n };\n\n BaseNode.prototype.insertAt = function insertAt (node, pos) {\n this.childNodes.splice(pos, 0, node);\n node.parent = this;\n };\n\n BaseNode.prototype.remove = function remove (index, count) {\n var this$1$1 = this;\n\n var end = index + count;\n for (var i = index; i < end; i++) {\n this$1$1.childNodes[i].removeSelf();\n }\n this.childNodes.splice(index, count);\n };\n\n BaseNode.prototype.removeSelf = function removeSelf () {\n this.clear();\n this.destroy();\n };\n\n BaseNode.prototype.clear = function clear () {\n this.remove(0, this.childNodes.length);\n };\n\n BaseNode.prototype.invalidate = function invalidate () {\n if (this.parent) {\n this.parent.invalidate();\n }\n };\n\n BaseNode.prototype.geometryChange = function geometryChange () {\n this.invalidate();\n };\n\n BaseNode.prototype.optionsChange = function optionsChange () {\n this.invalidate();\n };\n\n BaseNode.prototype.childrenChange = function childrenChange (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\n this.invalidate();\n };\n\n return BaseNode;\n }(Class));\n\n var events = [\n \"click\",\n \"mouseenter\",\n \"mouseleave\",\n \"mousemove\",\n \"resize\"\n ];\n\n var Surface$2 = (function (Observable$$1) {\n function Surface(element, options) {\n Observable$$1.call(this);\n\n this.options = $.extend({}, options);\n this.element = element;\n this.element._kendoExportVisual = this.exportVisual.bind(this);\n\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\n this._visual = new Group();\n\n elementSize(element, this.options);\n\n this.bind(events, this.options);\n\n this._enableTracking();\n }\n\n extendStatic(Surface, Observable$$1);\n Surface.prototype = Object.create( Observable$$1 && Observable$$1.prototype );\n Surface.prototype.constructor = Surface;\n Surface.fn = Surface.prototype;\n Surface.fn.init = Surface.fn.constructor;\n\n Surface.prototype.draw = function draw (element) {\n this._visual.children.push(element);\n };\n\n Surface.prototype.clear = function clear () {\n this._visual.children = [];\n };\n\n Surface.prototype.destroy = function destroy () {\n this._visual = null;\n this.element._kendoExportVisual = null;\n this.unbind();\n };\n\n Surface.prototype.eventTarget = function eventTarget (e) {\n var this$1$1 = this;\n\n var domNode = eventElement(e);\n var node;\n\n while (!node && domNode) {\n node = domNode._kendoNode;\n if (domNode === this$1$1.element) {\n break;\n }\n\n domNode = domNode.parentElement;\n }\n\n if (node) {\n return node.srcElement;\n }\n };\n\n Surface.prototype.exportVisual = function exportVisual () {\n return this._visual;\n };\n\n Surface.prototype.getSize = function getSize () {\n return elementSize(this.element);\n };\n\n Surface.prototype.currentSize = function currentSize (size) {\n if (size) {\n this._size = size;\n } else {\n return this._size;\n }\n };\n\n Surface.prototype.setSize = function setSize (size) {\n elementSize(this.element, size);\n\n this.currentSize(size);\n this._resize();\n };\n\n Surface.prototype.resize = function resize (force) {\n var size = this.getSize();\n var currentSize = this.currentSize();\n\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\n Surface.prototype.size = function size (value) {\n if (!value) {\n return this.getSize();\n }\n\n this.setSize(value);\n };\n\n Surface.prototype.suspendTracking = function suspendTracking () {\n this._suspendedTracking = true;\n };\n\n Surface.prototype.resumeTracking = function resumeTracking () {\n this._suspendedTracking = false;\n };\n\n Surface.prototype._enableTracking = function _enableTracking () {};\n\n Surface.prototype._resize = function _resize () {};\n\n Surface.prototype._handler = function _handler (eventName) {\n var this$1$1 = this;\n\n return function (e) {\n var node = this$1$1.eventTarget(e);\n if (node && !this$1$1._suspendedTracking) {\n this$1$1.trigger(eventName, {\n element: node,\n originalEvent: e,\n type: eventName\n });\n }\n };\n };\n\n Surface.prototype._elementOffset = function _elementOffset () {\n var element = this.element;\n var padding = elementPadding(element);\n var ref = elementOffset(element);\n var left = ref.left;\n var top = ref.top;\n\n return {\n left: left + padding.left,\n top: top + padding.top\n };\n };\n\n Surface.prototype._surfacePoint = function _surfacePoint (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\n var inverseTransform = elementScale(this.element).invert();\n var point = new Point(\n x,\n y\n ).transform(inverseTransform);\n\n return point;\n };\n\n return Surface;\n }(kendo.Observable));\n\n function renderAttr(name, value) {\n return (defined(value) && value !== null) ? (\" \" + name + \"=\\\"\" + value + \"\\\" \") : \"\";\n }\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\n return output;\n }\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\n if (output !== \"\") {\n return output;\n }\n }\n\n var NODE_MAP = {};\n\n var SVG_NS = \"http://www.w3.org/2000/svg\";\n var NONE = \"none\";\n var POINT_DIGITS = 3;\n\n var renderSVG = function(container, svg) {\n container.innerHTML = svg;\n };\n\n if (typeof document !== \"undefined\") {\n var testFragment = \"\";\n var testContainer = document.createElement(\"div\");\n var hasParser = typeof DOMParser !== \"undefined\";\n\n testContainer.innerHTML = testFragment;\n\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\n container.innerHTML = \"\";\n container.appendChild(importedDoc);\n };\n }\n }\n\n var renderSVG$1 = renderSVG;\n\n var TRANSFORM = \"transform\";\n var DefinitionMap = {\n clip: \"clip-path\",\n fill: \"fill\"\n };\n\n function isDefinition(type, value) {\n return type === \"clip\" || (type === \"fill\" && (!value || value.nodeType === \"Gradient\"));\n }\n\n function baseUrl() {\n var base = document.getElementsByTagName(\"base\")[0];\n var href = document.location.href;\n var url = \"\";\n\n if (base && !(supportBrowser || {}).msie) {\n var hashIndex = href.indexOf(\"#\");\n if (hashIndex !== -1) {\n href = href.substring(0, hashIndex);\n }\n\n url = href;\n }\n\n return url;\n }\n\n var Node = (function (BaseNode$$1) {\n function Node(srcElement, options) {\n BaseNode$$1.call(this, srcElement);\n this.definitions = {};\n\n this.options = options;\n }\n\n extendStatic(Node, BaseNode$$1);\n Node.prototype = Object.create( BaseNode$$1 && BaseNode$$1.prototype );\n Node.prototype.constructor = Node;\n Node.fn = Node.prototype;\n Node.fn.init = Node.fn.constructor;\n\n Node.prototype.destroy = function destroy () {\n if (this.element) {\n this.element._kendoNode = null;\n this.element = null;\n }\n\n this.clearDefinitions();\n BaseNode$$1.prototype.destroy.call(this);\n };\n\n Node.prototype.load = function load (elements, pos) {\n var this$1$1 = this;\n\n for (var i = 0; i < elements.length; i++) {\n var srcElement = elements[i];\n var children = srcElement.children;\n\n var childNode = new NODE_MAP[srcElement.nodeType](srcElement, this$1$1.options);\n\n if (defined(pos)) {\n this$1$1.insertAt(childNode, pos);\n } else {\n this$1$1.append(childNode);\n }\n\n childNode.createDefinitions();\n\n if (children && children.length > 0) {\n childNode.load(children);\n }\n\n var element = this$1$1.element;\n if (element) {\n childNode.attachTo(element, pos);\n }\n }\n };\n\n Node.prototype.root = function root () {\n var root = this;\n\n while (root.parent) {\n root = root.parent;\n }\n\n return root;\n };\n\n Node.prototype.attachTo = function attachTo (domElement, pos) {\n var container = document.createElement(\"div\");\n renderSVG$1(container,\n \"\" +\n this.render() +\n \"\"\n );\n\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\n Node.prototype.setElement = function setElement (element) {\n if (this.element) {\n this.element._kendoNode = null;\n }\n\n this.element = element;\n this.element._kendoNode = this;\n\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\n Node.prototype.clear = function clear () {\n this.clearDefinitions();\n\n if (this.element) {\n this.element.innerHTML = \"\";\n }\n\n var children = this.childNodes;\n for (var i = 0; i < children.length; i++) {\n children[i].destroy();\n }\n\n this.childNodes = [];\n };\n\n Node.prototype.removeSelf = function removeSelf () {\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\n BaseNode$$1.prototype.removeSelf.call(this);\n };\n\n Node.prototype.template = function template () {\n return this.renderChildren();\n };\n\n Node.prototype.render = function render () {\n return this.template();\n };\n\n Node.prototype.renderChildren = function renderChildren () {\n var nodes = this.childNodes;\n var output = \"\";\n\n for (var i = 0; i < nodes.length; i++) {\n output += nodes[i].render();\n }\n\n return output;\n };\n\n Node.prototype.optionsChange = function optionsChange (e) {\n var field = e.field;\n var value = e.value;\n\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\n BaseNode$$1.prototype.optionsChange.call(this, e);\n };\n\n Node.prototype.attr = function attr (name, value) {\n if (this.element) {\n this.element.setAttribute(name, value);\n }\n };\n\n Node.prototype.allAttr = function allAttr (attrs) {\n var this$1$1 = this;\n\n for (var i = 0; i < attrs.length; i++) {\n this$1$1.attr(attrs[i][0], attrs[i][1]);\n }\n };\n\n Node.prototype.css = function css (name, value) {\n if (this.element) {\n this.element.style[name] = value;\n }\n };\n\n Node.prototype.allCss = function allCss (styles) {\n var this$1$1 = this;\n\n for (var i = 0; i < styles.length; i++) {\n this$1$1.css(styles[i][0], styles[i][1]);\n }\n };\n\n Node.prototype.removeAttr = function removeAttr (name) {\n if (this.element) {\n this.element.removeAttribute(name);\n }\n };\n\n Node.prototype.mapTransform = function mapTransform (transform) {\n var attrs = [];\n if (transform) {\n attrs.push([\n TRANSFORM,\n \"matrix(\" + transform.matrix().toString(6) + \")\"\n ]);\n }\n\n return attrs;\n };\n\n Node.prototype.renderTransform = function renderTransform () {\n return renderAllAttr(\n this.mapTransform(this.srcElement.transform())\n );\n };\n\n Node.prototype.transformChange = function transformChange (value) {\n if (value) {\n this.allAttr(this.mapTransform(value));\n } else {\n this.removeAttr(TRANSFORM);\n }\n };\n\n Node.prototype.mapStyle = function mapStyle () {\n var options = this.srcElement.options;\n var style = [ [ \"cursor\", options.cursor ] ];\n\n if (options.visible === false) {\n style.push([ \"display\", NONE ]);\n }\n\n return style;\n };\n\n Node.prototype.renderStyle = function renderStyle$1 () {\n return renderAttr(\"style\", renderStyle(this.mapStyle(true)));\n };\n\n Node.prototype.renderOpacity = function renderOpacity () {\n return renderAttr(\"opacity\", this.srcElement.options.opacity);\n };\n\n Node.prototype.renderId = function renderId () {\n return renderAttr(\"id\", this.srcElement.options.id);\n };\n\n Node.prototype.createDefinitions = function createDefinitions () {\n var srcElement = this.srcElement;\n var definitions = this.definitions;\n if (srcElement) {\n var options = srcElement.options;\n var hasDefinitions;\n\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\n Node.prototype.definitionChange = function definitionChange (e) {\n if (this.parent) {\n this.parent.definitionChange(e);\n }\n };\n\n Node.prototype.updateDefinition = function updateDefinition (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\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\n Node.prototype.clearDefinitions = function clearDefinitions () {\n var definitions = this.definitions;\n\n this.definitionChange({\n action: \"remove\",\n definitions: definitions\n });\n this.definitions = {};\n };\n\n Node.prototype.renderDefinitions = function renderDefinitions () {\n return renderAllAttr(this.mapDefinitions());\n };\n\n Node.prototype.mapDefinitions = function mapDefinitions () {\n var this$1$1 = this;\n\n var definitions = this.definitions;\n var attrs = [];\n\n for (var field in definitions) {\n attrs.push([ DefinitionMap[field], this$1$1.refUrl(definitions[field].id) ]);\n }\n\n return attrs;\n };\n\n Node.prototype.refUrl = function refUrl (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\n Node.prototype.baseUrl = function baseUrl$1 () {\n return baseUrl();\n };\n\n return Node;\n }(BaseNode));\n\n var GradientStopNode = (function (Node$$1) {\n function GradientStopNode () {\n Node$$1.apply(this, arguments);\n }\n\n extendStatic(GradientStopNode, Node$$1);\n GradientStopNode.prototype = Object.create( Node$$1 && Node$$1.prototype );\n GradientStopNode.prototype.constructor = GradientStopNode;\n GradientStopNode.fn = GradientStopNode.prototype;\n GradientStopNode.fn.init = GradientStopNode.fn.constructor;\n\n GradientStopNode.prototype.template = function template () {\n return (\"\");\n };\n\n GradientStopNode.prototype.renderOffset = function renderOffset () {\n return renderAttr(\"offset\", this.srcElement.offset());\n };\n\n GradientStopNode.prototype.mapStyle = function mapStyle () {\n var srcElement = this.srcElement;\n return [\n [ \"stop-color\", srcElement.color() ],\n [ \"stop-opacity\", srcElement.opacity() ]\n ];\n };\n\n GradientStopNode.prototype.optionsChange = function optionsChange (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 return GradientStopNode;\n }(Node));\n\n var GradientNode = (function (Node$$1) {\n function GradientNode(srcElement) {\n Node$$1.call(this, srcElement);\n\n this.id = srcElement.id;\n\n this.loadStops();\n }\n\n extendStatic(GradientNode, Node$$1);\n GradientNode.prototype = Object.create( Node$$1 && Node$$1.prototype );\n GradientNode.prototype.constructor = GradientNode;\n GradientNode.fn = GradientNode.prototype;\n GradientNode.fn.init = GradientNode.fn.constructor;\n\n GradientNode.prototype.loadStops = function loadStops () {\n var this$1$1 = this;\n\n var stops = this.srcElement.stops;\n var element = this.element;\n\n for (var idx = 0; idx < stops.length; idx++) {\n var stopNode = new GradientStopNode(stops[idx]);\n this$1$1.append(stopNode);\n if (element) {\n stopNode.attachTo(element);\n }\n }\n };\n\n GradientNode.prototype.optionsChange = function optionsChange (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\n GradientNode.prototype.renderCoordinates = function renderCoordinates () {\n return renderAllAttr(this.mapCoordinates());\n };\n\n GradientNode.prototype.mapSpace = function mapSpace () {\n return [ \"gradientUnits\", this.srcElement.userSpace() ? \"userSpaceOnUse\" : \"objectBoundingBox\" ];\n };\n\n return GradientNode;\n }(Node));\n\n var LinearGradientNode = (function (GradientNode$$1) {\n function LinearGradientNode () {\n GradientNode$$1.apply(this, arguments);\n }\n\n extendStatic(LinearGradientNode, GradientNode$$1);\n LinearGradientNode.prototype = Object.create( GradientNode$$1 && GradientNode$$1.prototype );\n LinearGradientNode.prototype.constructor = LinearGradientNode;\n LinearGradientNode.fn = LinearGradientNode.prototype;\n LinearGradientNode.fn.init = LinearGradientNode.fn.constructor;\n\n LinearGradientNode.prototype.template = function template () {\n return (\"\" + (this.renderChildren()) + \"\");\n };\n\n LinearGradientNode.prototype.mapCoordinates = function mapCoordinates () {\n var srcElement = this.srcElement;\n var start = srcElement.start();\n var end = srcElement.end();\n var attrs = [\n [ \"x1\", start.x ],\n [ \"y1\", start.y ],\n [ \"x2\", end.x ],\n [ \"y2\", end.y ],\n this.mapSpace()\n ];\n\n return attrs;\n };\n\n return LinearGradientNode;\n }(GradientNode));\n\n var RadialGradientNode = (function (GradientNode$$1) {\n function RadialGradientNode () {\n GradientNode$$1.apply(this, arguments);\n }\n\n extendStatic(RadialGradientNode, GradientNode$$1);\n RadialGradientNode.prototype = Object.create( GradientNode$$1 && GradientNode$$1.prototype );\n RadialGradientNode.prototype.constructor = RadialGradientNode;\n RadialGradientNode.fn = RadialGradientNode.prototype;\n RadialGradientNode.fn.init = RadialGradientNode.fn.constructor;\n\n RadialGradientNode.prototype.template = function template () {\n return (\"\" + (this.renderChildren()) + \"\");\n };\n\n RadialGradientNode.prototype.mapCoordinates = function mapCoordinates () {\n var srcElement = this.srcElement;\n var center = srcElement.center();\n var radius = srcElement.radius();\n var attrs = [\n [ \"cx\", center.x ],\n [ \"cy\", center.y ],\n [ \"r\", radius ],\n this.mapSpace()\n ];\n return attrs;\n };\n\n return RadialGradientNode;\n }(GradientNode));\n\n var ClipNode = (function (Node$$1) {\n function ClipNode(srcElement) {\n Node$$1.call(this);\n\n this.srcElement = srcElement;\n this.id = srcElement.id;\n\n this.load([ srcElement ]);\n }\n\n extendStatic(ClipNode, Node$$1);\n ClipNode.prototype = Object.create( Node$$1 && Node$$1.prototype );\n ClipNode.prototype.constructor = ClipNode;\n ClipNode.fn = ClipNode.prototype;\n ClipNode.fn.init = ClipNode.fn.constructor;\n\n ClipNode.prototype.template = function template () {\n return (\"\" + (this.renderChildren()) + \"\");\n };\n\n return ClipNode;\n }(Node));\n\n var DefinitionNode = (function (Node$$1) {\n function DefinitionNode() {\n Node$$1.call(this);\n this.definitionMap = {};\n }\n\n extendStatic(DefinitionNode, Node$$1);\n DefinitionNode.prototype = Object.create( Node$$1 && Node$$1.prototype );\n DefinitionNode.prototype.constructor = DefinitionNode;\n DefinitionNode.fn = DefinitionNode.prototype;\n DefinitionNode.fn.init = DefinitionNode.fn.constructor;\n\n DefinitionNode.prototype.attachTo = function attachTo (domElement) {\n this.element = domElement;\n };\n\n DefinitionNode.prototype.template = function template () {\n return (\"\" + (this.renderChildren()) + \"\");\n };\n\n DefinitionNode.prototype.definitionChange = function definitionChange (e) {\n var definitions = e.definitions;\n var action = e.action;\n\n if (action === \"add\") {\n this.addDefinitions(definitions);\n } else if (action === \"remove\") {\n this.removeDefinitions(definitions);\n }\n };\n\n DefinitionNode.prototype.createDefinition = function createDefinition (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\n DefinitionNode.prototype.addDefinitions = function addDefinitions (definitions) {\n var this$1$1 = this;\n\n for (var field in definitions) {\n this$1$1.addDefinition(field, definitions[field]);\n }\n };\n\n DefinitionNode.prototype.addDefinition = function addDefinition (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\n DefinitionNode.prototype.removeDefinitions = function removeDefinitions (definitions) {\n var this$1$1 = this;\n\n for (var field in definitions) {\n this$1$1.removeDefinition(definitions[field]);\n }\n };\n\n DefinitionNode.prototype.removeDefinition = function removeDefinition (srcElement) {\n var definitionMap = this.definitionMap;\n var id = srcElement.id;\n var mapItem = definitionMap[id];\n\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 return DefinitionNode;\n }(Node));\n\n var RootNode = (function (Node$$1) {\n function RootNode(options) {\n Node$$1.call(this);\n this.options = options;\n this.defs = new DefinitionNode();\n }\n\n extendStatic(RootNode, Node$$1);\n RootNode.prototype = Object.create( Node$$1 && Node$$1.prototype );\n RootNode.prototype.constructor = RootNode;\n RootNode.fn = RootNode.prototype;\n RootNode.fn.init = RootNode.fn.constructor;\n\n RootNode.prototype.attachTo = function attachTo (domElement) {\n this.element = domElement;\n this.defs.attachTo(domElement.firstElementChild);\n };\n\n RootNode.prototype.clear = function clear () {\n BaseNode.prototype.clear.call(this);\n };\n\n RootNode.prototype.template = function template () {\n return this.defs.render() + this.renderChildren();\n };\n\n RootNode.prototype.definitionChange = function definitionChange (e) {\n this.defs.definitionChange(e);\n };\n\n return RootNode;\n }(Node));\n\n var DASH_ARRAYS = {\n dot: [ 1.5, 3.5 ],\n dash: [ 4, 3.5 ],\n longdash: [ 8, 3.5 ],\n dashdot: [ 3.5, 3.5, 1.5, 3.5 ],\n longdashdot: [ 8, 3.5, 1.5, 3.5 ],\n longdashdotdot: [ 8, 3.5, 1.5, 3.5, 1.5, 3.5 ]\n };\n\n var SOLID = \"solid\";\n var BUTT = \"butt\";\n\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\n var PathNode = (function (Node$$1) {\n function PathNode () {\n Node$$1.apply(this, arguments);\n }\n\n extendStatic(PathNode, Node$$1);\n PathNode.prototype = Object.create( Node$$1 && Node$$1.prototype );\n PathNode.prototype.constructor = PathNode;\n PathNode.fn = PathNode.prototype;\n PathNode.fn.init = PathNode.fn.constructor;\n\n PathNode.prototype.geometryChange = function geometryChange () {\n this.attr(\"d\", this.renderData());\n this.invalidate();\n };\n\n PathNode.prototype.optionsChange = function optionsChange (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\n case \"fill.color\":\n this.allAttr(this.mapFill({ color: e.value }));\n break;\n\n case \"stroke\":\n if (e.value) {\n this.allAttr(this.mapStroke(e.value));\n } else {\n this.removeAttr(\"stroke\");\n }\n break;\n\n case \"transform\":\n this.transformChange(e.value);\n break;\n\n default:\n var name = ATTRIBUTE_MAP[e.field];\n if (name) {\n this.attr(name, e.value);\n }\n break;\n }\n\n Node$$1.prototype.optionsChange.call(this, e);\n };\n\n PathNode.prototype.content = function content () {\n if (this.element) {\n this.element.textContent = this.srcElement.content();\n }\n };\n\n PathNode.prototype.renderData = function renderData () {\n return this.srcElement.toString(POINT_DIGITS) || undefined;\n };\n\n PathNode.prototype.mapStroke = function mapStroke (stroke) {\n var attrs = [];\n\n if (stroke && !isTransparent(stroke.color)) {\n attrs.push([ \"stroke\", stroke.color ]);\n attrs.push([ \"stroke-width\", stroke.width ]);\n attrs.push([ \"stroke-linecap\", this.renderLinecap(stroke) ]);\n attrs.push([ \"stroke-linejoin\", stroke.lineJoin ]);\n\n if (defined(stroke.opacity)) {\n attrs.push([ \"stroke-opacity\", stroke.opacity ]);\n }\n\n if (defined(stroke.dashType)) {\n attrs.push([ \"stroke-dasharray\", this.renderDashType(stroke) ]);\n }\n } else {\n attrs.push([ \"stroke\", NONE ]);\n }\n\n return attrs;\n };\n\n PathNode.prototype.renderStroke = function renderStroke () {\n return renderAllAttr(\n this.mapStroke(this.srcElement.options.stroke)\n );\n };\n\n PathNode.prototype.renderDashType = function renderDashType (stroke) {\n var dashType = stroke.dashType;\n var width = stroke.width; if (width === void 0) { width = 1; }\n\n if (dashType && dashType !== SOLID) {\n var dashArray = DASH_ARRAYS[dashType.toLowerCase()];\n var result = [];\n\n for (var i = 0; i < dashArray.length; i++) {\n result.push(dashArray[i] * width);\n }\n\n return result.join(\" \");\n }\n };\n\n PathNode.prototype.renderLinecap = function renderLinecap (stroke) {\n var dashType = stroke.dashType;\n var lineCap = stroke.lineCap;\n\n return (dashType && dashType !== \"solid\") ? BUTT : lineCap;\n };\n\n PathNode.prototype.mapFill = function mapFill (fill) {\n var attrs = [];\n if (!(fill && fill.nodeType === \"Gradient\")) {\n if (fill && !isTransparent(fill.color)) {\n attrs.push([ \"fill\", fill.color ]);\n\n if (defined(fill.opacity)) {\n attrs.push([ \"fill-opacity\", fill.opacity ]);\n }\n } else {\n attrs.push([ \"fill\", NONE ]);\n }\n }\n\n return attrs;\n };\n\n PathNode.prototype.renderFill = function renderFill () {\n return renderAllAttr(\n this.mapFill(this.srcElement.options.fill)\n );\n };\n\n PathNode.prototype.template = function template () {\n return \"\";\n };\n\n return PathNode;\n }(Node));\n\n var ArcNode = (function (PathNode$$1) {\n function ArcNode () {\n PathNode$$1.apply(this, arguments);\n }\n\n extendStatic(ArcNode, PathNode$$1);\n ArcNode.prototype = Object.create( PathNode$$1 && PathNode$$1.prototype );\n ArcNode.prototype.constructor = ArcNode;\n ArcNode.fn = ArcNode.prototype;\n ArcNode.fn.init = ArcNode.fn.constructor;\n\n ArcNode.prototype.renderData = function renderData () {\n return this.srcElement.toPath().toString(POINT_DIGITS);\n };\n\n return ArcNode;\n }(PathNode));\n\n var CircleNode = (function (PathNode$$1) {\n function CircleNode () {\n PathNode$$1.apply(this, arguments);\n }\n\n extendStatic(CircleNode, PathNode$$1);\n CircleNode.prototype = Object.create( PathNode$$1 && PathNode$$1.prototype );\n CircleNode.prototype.constructor = CircleNode;\n CircleNode.fn = CircleNode.prototype;\n CircleNode.fn.init = CircleNode.fn.constructor;\n\n CircleNode.prototype.geometryChange = function geometryChange () {\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\n CircleNode.prototype.center = function center () {\n return this.srcElement.geometry().center;\n };\n\n CircleNode.prototype.radius = function radius () {\n return this.srcElement.geometry().radius;\n };\n\n CircleNode.prototype.template = function template () {\n return \"\";\n };\n\n return CircleNode;\n }(PathNode));\n\n var GroupNode = (function (Node$$1) {\n function GroupNode () {\n Node$$1.apply(this, arguments);\n }\n\n extendStatic(GroupNode, Node$$1);\n GroupNode.prototype = Object.create( Node$$1 && Node$$1.prototype );\n GroupNode.prototype.constructor = GroupNode;\n GroupNode.fn = GroupNode.prototype;\n GroupNode.fn.init = GroupNode.fn.constructor;\n\n GroupNode.prototype.template = function template () {\n return (\"\" + (this.renderChildren()) + \"\");\n };\n\n GroupNode.prototype.optionsChange = function optionsChange (e) {\n if (e.field === \"transform\") {\n this.transformChange(e.value);\n }\n\n Node$$1.prototype.optionsChange.call(this, e);\n };\n\n return GroupNode;\n }(Node));\n\n var ImageNode = (function (PathNode$$1) {\n function ImageNode () {\n PathNode$$1.apply(this, arguments);\n }\n\n extendStatic(ImageNode, PathNode$$1);\n ImageNode.prototype = Object.create( PathNode$$1 && PathNode$$1.prototype );\n ImageNode.prototype.constructor = ImageNode;\n ImageNode.fn = ImageNode.prototype;\n ImageNode.fn.init = ImageNode.fn.constructor;\n\n ImageNode.prototype.geometryChange = function geometryChange () {\n this.allAttr(this.mapPosition());\n this.invalidate();\n };\n\n ImageNode.prototype.optionsChange = function optionsChange (e) {\n if (e.field === \"src\") {\n this.allAttr(this.mapSource());\n }\n\n PathNode$$1.prototype.optionsChange.call(this, e);\n };\n\n ImageNode.prototype.mapPosition = function mapPosition () {\n var rect = this.srcElement.rect();\n var tl = rect.topLeft();\n\n return [\n [ \"x\", tl.x ],\n [ \"y\", tl.y ],\n [ \"width\", rect.width() + \"px\" ],\n [ \"height\", rect.height() + \"px\" ]\n ];\n };\n\n ImageNode.prototype.renderPosition = function renderPosition () {\n return renderAllAttr(this.mapPosition());\n };\n\n ImageNode.prototype.mapSource = function mapSource (encode) {\n var src = this.srcElement.src();\n\n if (encode) {\n src = kendo.htmlEncode(src);\n }\n\n return [ [ \"xlink:href\", src ] ];\n };\n\n ImageNode.prototype.renderSource = function renderSource () {\n return renderAllAttr(this.mapSource(true));\n };\n\n ImageNode.prototype.template = function template () {\n return \"\" +\n \"\";\n };\n\n return ImageNode;\n }(PathNode));\n\n var MultiPathNode = (function (PathNode$$1) {\n function MultiPathNode () {\n PathNode$$1.apply(this, arguments);\n }\n\n extendStatic(MultiPathNode, PathNode$$1);\n MultiPathNode.prototype = Object.create( PathNode$$1 && PathNode$$1.prototype );\n MultiPathNode.prototype.constructor = MultiPathNode;\n MultiPathNode.fn = MultiPathNode.prototype;\n MultiPathNode.fn.init = MultiPathNode.fn.constructor;\n\n MultiPathNode.prototype.renderData = function renderData () {\n return this.srcElement.toString(POINT_DIGITS) || 'undefined';\n };\n\n return MultiPathNode;\n }(PathNode));\n\n var RectNode = (function (PathNode$$1) {\n function RectNode () {\n PathNode$$1.apply(this, arguments);\n }\n\n extendStatic(RectNode, PathNode$$1);\n RectNode.prototype = Object.create( PathNode$$1 && PathNode$$1.prototype );\n RectNode.prototype.constructor = RectNode;\n RectNode.fn = RectNode.prototype;\n RectNode.fn.init = RectNode.fn.constructor;\n\n RectNode.prototype.geometryChange = function geometryChange () {\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.attr(\"rx\", geometry.cornerRadius[0]);\n this.attr(\"ry\", geometry.cornerRadius[1]);\n this.invalidate();\n };\n\n RectNode.prototype.size = function size () {\n return this.srcElement.geometry().size;\n };\n\n RectNode.prototype.origin = function origin () {\n return this.srcElement.geometry().origin;\n };\n\n RectNode.prototype.rx = function rx () {\n return this.srcElement.geometry().cornerRadius[0];\n };\n\n RectNode.prototype.ry = function ry () {\n return this.srcElement.geometry().cornerRadius[1];\n };\n\n RectNode.prototype.template = function template () {\n return \"\";\n };\n\n return RectNode;\n }(PathNode));\n\n var ENTITY_REGEX = /&(?:[a-zA-Z]+|#\\d+);/g;\n\n function decodeEntities(text) {\n if (!text || typeof text !== \"string\" || !ENTITY_REGEX.test(text)) {\n return text;\n }\n\n var element = decodeEntities._element;\n ENTITY_REGEX.lastIndex = 0;\n\n return text.replace(ENTITY_REGEX, function (match) {\n element.innerHTML = match;\n\n return element.textContent || element.innerText;\n });\n }\n\n if (typeof document !== \"undefined\") {\n decodeEntities._element = document.createElement(\"span\");\n }\n\n var TextNode = (function (PathNode$$1) {\n function TextNode () {\n PathNode$$1.apply(this, arguments);\n }\n\n extendStatic(TextNode, PathNode$$1);\n TextNode.prototype = Object.create( PathNode$$1 && PathNode$$1.prototype );\n TextNode.prototype.constructor = TextNode;\n TextNode.fn = TextNode.prototype;\n TextNode.fn.init = TextNode.fn.constructor;\n\n TextNode.prototype.geometryChange = function geometryChange () {\n var pos = this.pos();\n this.attr(\"x\", pos.x);\n this.attr(\"y\", pos.y);\n this.invalidate();\n };\n\n TextNode.prototype.optionsChange = function optionsChange (e) {\n if (e.field === \"font\") {\n this.attr(\"style\", renderStyle(this.mapStyle()));\n this.geometryChange();\n } else if (e.field === \"content\") {\n PathNode$$1.prototype.content.call(this, this.srcElement.content());\n }\n\n PathNode$$1.prototype.optionsChange.call(this, e);\n };\n\n TextNode.prototype.mapStyle = function mapStyle (encode) {\n var style = PathNode$$1.prototype.mapStyle.call(this, encode);\n var font = this.srcElement.options.font;\n\n if (encode) {\n font = kendo.htmlEncode(font);\n }\n\n style.push([ \"font\", font ], [ \"white-space\", \"pre\" ]);\n\n return style;\n };\n\n TextNode.prototype.pos = function pos () {\n var pos = this.srcElement.position();\n var size = this.srcElement.measure();\n return pos.clone().setY(pos.y + size.baseline);\n };\n\n TextNode.prototype.renderContent = function renderContent () {\n var content = this.srcElement.content();\n content = decodeEntities(content);\n content = kendo.htmlEncode(content);\n\n return kendoUtil.normalizeText(content);\n };\n\n TextNode.prototype.renderTextAnchor = function renderTextAnchor () {\n var anchor;\n\n if ((this.options || {}).rtl && !(supportBrowser.msie || supportBrowser.edge)) {\n anchor = 'end';\n }\n\n return renderAttr(\"text-anchor\", anchor);\n };\n\n TextNode.prototype.template = function template () {\n return \"\" + (this.renderContent()) + \"\";\n };\n\n return TextNode;\n }(PathNode));\n\n NODE_MAP.Arc = ArcNode;\n NODE_MAP.Circle = CircleNode;\n NODE_MAP.Group = GroupNode;\n NODE_MAP.Image = ImageNode;\n NODE_MAP.MultiPath = MultiPathNode;\n NODE_MAP.Path = PathNode;\n NODE_MAP.Rect = RectNode;\n NODE_MAP.Text = TextNode;\n\n var RTL = 'rtl';\n\n function alignToScreen(element) {\n var ctm;\n\n try {\n ctm = element.getScreenCTM ? element.getScreenCTM() : null;\n } catch (e) { } // eslint-disable-line no-empty\n\n if (ctm) {\n var left = - ctm.e % 1;\n var top = - ctm.f % 1;\n var style = element.style;\n\n if (left !== 0 || top !== 0) {\n style.left = left + \"px\";\n style.top = top + \"px\";\n }\n }\n }\n\n var Surface$3 = (function (BaseSurface) {\n function Surface(element, options) {\n BaseSurface.call(this, element, options);\n\n this._root = new RootNode($.extend({\n rtl: elementStyles(element, 'direction').direction === RTL\n }, this.options));\n\n renderSVG$1(this.element, this._template());\n\n this._rootElement = this.element.firstElementChild;\n\n alignToScreen(this._rootElement);\n\n this._root.attachTo(this._rootElement);\n\n bindEvents(this.element, {\n click: this._click,\n mouseover: this._mouseenter,\n mouseout: this._mouseleave,\n mousemove: this._mousemove\n });\n\n this.resize();\n }\n\n extendStatic(Surface, BaseSurface);\n Surface.prototype = Object.create( BaseSurface && BaseSurface.prototype );\n Surface.prototype.constructor = Surface;\n Surface.fn = Surface.prototype;\n Surface.fn.init = Surface.fn.constructor;\n\n var prototypeAccessors = { type: {} };\n\n prototypeAccessors.type.get = function () {\n return \"svg\";\n };\n\n Surface.prototype.destroy = function destroy () {\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\n BaseSurface.prototype.destroy.call(this);\n };\n\n Surface.prototype.translate = function translate (offset) {\n var viewBox = (Math.round(offset.x)) + \" \" + (Math.round(offset.y)) + \" \" + (this._size.width) + \" \" + (this._size.height);\n\n this._offset = offset;\n this._rootElement.setAttribute(\"viewBox\", viewBox);\n };\n\n Surface.prototype.draw = function draw (element) {\n BaseSurface.prototype.draw.call(this, element);\n this._root.load([ element ]);\n };\n\n Surface.prototype.clear = function clear () {\n BaseSurface.prototype.clear.call(this);\n this._root.clear();\n };\n\n Surface.prototype.svg = function svg () {\n return \"\" + this._template();\n };\n\n Surface.prototype.exportVisual = function exportVisual () {\n var ref = this;\n var visual = ref._visual;\n var offset = ref._offset;\n\n if (offset) {\n var wrap = new Group();\n wrap.children.push(visual);\n\n wrap.transform(\n transform$1().translate(-offset.x, -offset.y)\n );\n\n visual = wrap;\n }\n\n return visual;\n };\n\n Surface.prototype._resize = function _resize () {\n if (this._offset) {\n this.translate(this._offset);\n }\n };\n\n Surface.prototype._template = function _template () {\n return (\"\" + (this._root.render()) + \"\");\n };\n\n Object.defineProperties( Surface.prototype, prototypeAccessors );\n\n return Surface;\n }(Surface$2));\n\n var NODE_MAP$2 = {};\n\n function renderPath(ctx, path) {\n var segments = path.segments;\n\n if (segments.length === 0) {\n return;\n }\n\n var segment = segments[0];\n var anchor = segment.anchor();\n ctx.moveTo(anchor.x, anchor.y);\n\n for (var i = 1; i < segments.length; i++) {\n segment = segments[i];\n anchor = segment.anchor();\n\n var prevSeg = segments[i - 1];\n var prevOut = prevSeg.controlOut();\n var controlIn = segment.controlIn();\n\n if (prevOut && controlIn) {\n ctx.bezierCurveTo(prevOut.x, prevOut.y,\n controlIn.x, controlIn.y,\n anchor.x, anchor.y);\n } else {\n ctx.lineTo(anchor.x, anchor.y);\n }\n }\n\n if (path.options.closed) {\n ctx.closePath();\n }\n }\n\n var Node$2 = (function (BaseNode$$1) {\n function Node(srcElement) {\n BaseNode$$1.call(this, srcElement);\n if (srcElement) {\n this.initClip();\n }\n }\n\n extendStatic(Node, BaseNode$$1);\n Node.prototype = Object.create( BaseNode$$1 && BaseNode$$1.prototype );\n Node.prototype.constructor = Node;\n Node.fn = Node.prototype;\n Node.fn.init = Node.fn.constructor;\n\n Node.prototype.initClip = function initClip () {\n var clip = this.srcElement.clip();\n if (clip) {\n this.clip = clip;\n clip.addObserver(this);\n }\n };\n\n Node.prototype.clear = function clear () {\n if (this.srcElement) {\n this.srcElement.removeObserver(this);\n }\n\n this.clearClip();\n\n BaseNode$$1.prototype.clear.call(this);\n };\n\n Node.prototype.clearClip = function clearClip () {\n if (this.clip) {\n this.clip.removeObserver(this);\n delete this.clip;\n }\n };\n\n Node.prototype.setClip = function setClip (ctx) {\n if (this.clip) {\n ctx.beginPath();\n renderPath(ctx, this.clip);\n ctx.clip();\n }\n };\n\n Node.prototype.optionsChange = function optionsChange (e) {\n if (e.field === \"clip\") {\n this.clearClip();\n this.initClip();\n }\n\n BaseNode$$1.prototype.optionsChange.call(this, e);\n };\n\n Node.prototype.setTransform = function setTransform (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\n Node.prototype.loadElements = function loadElements (elements, pos, cors) {\n var this$1$1 = this;\n\n for (var i = 0; i < elements.length; i++) {\n var srcElement = elements[i];\n var children = srcElement.children;\n\n var childNode = new NODE_MAP$2[srcElement.nodeType](srcElement, cors);\n\n if (children && children.length > 0) {\n childNode.load(children, pos, cors);\n }\n\n if (defined(pos)) {\n this$1$1.insertAt(childNode, pos);\n } else {\n this$1$1.append(childNode);\n }\n }\n };\n\n Node.prototype.load = function load (elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n\n this.invalidate();\n };\n\n Node.prototype.setOpacity = function setOpacity (ctx) {\n if (this.srcElement) {\n var opacity = this.srcElement.opacity();\n if (defined(opacity)) {\n this.globalAlpha(ctx, opacity);\n }\n }\n };\n\n Node.prototype.globalAlpha = function globalAlpha (ctx, value) {\n var opactity = value;\n if (opactity && ctx.globalAlpha) {\n opactity *= ctx.globalAlpha;\n }\n ctx.globalAlpha = opactity;\n };\n\n Node.prototype.visible = function visible () {\n var src = this.srcElement;\n return !src || (src && src.options.visible !== false);\n };\n\n return Node;\n }(BaseNode));\n\n var GroupNode$2 = (function (superclass) {\n function GroupNode () {\n superclass.apply(this, arguments);\n }\n\n extendStatic(GroupNode, superclass);\n GroupNode.prototype = Object.create( superclass && superclass.prototype );\n GroupNode.prototype.constructor = GroupNode;\n GroupNode.fn = GroupNode.prototype;\n GroupNode.fn.init = GroupNode.fn.constructor;\n\n GroupNode.prototype.renderTo = function renderTo (ctx) {\n if (!this.visible()) {\n return;\n }\n\n ctx.save();\n\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n\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\n ctx.restore();\n };\n\n return GroupNode;\n }(traversable(Node$2, \"childNodes\")));\n\n var FRAME_DELAY = 1000 / 60;\n\n var RootNode$2 = (function (superclass) {\n function RootNode(canvas, size) {\n superclass.call(this);\n\n this.canvas = canvas;\n this.size = size;\n this.ctx = canvas.getContext(\"2d\");\n\n var invalidateHandler = this._invalidate.bind(this);\n this.invalidate = kendo.throttle(function () {\n kendo.animationFrame(invalidateHandler);\n }, FRAME_DELAY);\n }\n\n extendStatic(RootNode, superclass);\n RootNode.prototype = Object.create( superclass && superclass.prototype );\n RootNode.prototype.constructor = RootNode;\n RootNode.fn = RootNode.prototype;\n RootNode.fn.init = RootNode.fn.constructor;\n\n RootNode.prototype.destroy = function destroy () {\n superclass.prototype.destroy.call(this);\n this.canvas = null;\n this.ctx = null;\n };\n\n RootNode.prototype.load = function load (elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n this._invalidate();\n };\n\n RootNode.prototype._rescale = function _rescale (scale) {\n var ref = this;\n var canvas = ref.canvas;\n var size = ref.size;\n canvas.width = size.width * scale;\n canvas.height = size.height * scale;\n this.ctx.scale(scale, scale);\n };\n\n RootNode.prototype._devicePixelRatio = function _devicePixelRatio () {\n if (typeof window.devicePixelRatio === 'number') {\n return window.devicePixelRatio;\n }\n\n return 1;\n };\n\n RootNode.prototype._invalidate = function _invalidate (options) {\n if (!this.ctx) {\n return;\n }\n\n var fixedScale = options && options.fixedScale;\n var scale = fixedScale ? 1 : this._devicePixelRatio();\n this._rescale(scale);\n\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.renderTo(this.ctx);\n };\n\n return RootNode;\n }(traversable(GroupNode$2, \"childNodes\")));\n\n var QuadRoot = (function (Class$$1) {\n function QuadRoot() {\n Class$$1.call(this);\n\n this.shapes = [];\n }\n\n extendStatic(QuadRoot, Class$$1);\n QuadRoot.prototype = Object.create( Class$$1 && Class$$1.prototype );\n QuadRoot.prototype.constructor = QuadRoot;\n QuadRoot.fn = QuadRoot.prototype;\n QuadRoot.fn.init = QuadRoot.fn.constructor;\n\n QuadRoot.prototype._add = function _add (shape, bbox) {\n this.shapes.push({\n bbox: bbox,\n shape: shape\n });\n shape._quadNode = this;\n };\n\n QuadRoot.prototype.pointShapes = function pointShapes (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\n QuadRoot.prototype.insert = function insert (shape, bbox) {\n this._add(shape, bbox);\n };\n\n QuadRoot.prototype.remove = function remove (shape) {\n var shapes = this.shapes;\n var length = shapes.length;\n\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 return QuadRoot;\n }(Class));\n\n var QuadNode = (function (QuadRoot$$1) {\n function QuadNode(rect) {\n QuadRoot$$1.call(this);\n this.children = [];\n this.rect = rect;\n }\n\n extendStatic(QuadNode, QuadRoot$$1);\n QuadNode.prototype = Object.create( QuadRoot$$1 && QuadRoot$$1.prototype );\n QuadNode.prototype.constructor = QuadNode;\n QuadNode.fn = QuadNode.prototype;\n QuadNode.fn.init = QuadNode.fn.constructor;\n\n QuadNode.prototype.inBounds = function inBounds (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 &&\n bottomRight.y <= nodeBottomRight.y;\n return inBounds;\n };\n\n QuadNode.prototype.pointShapes = function pointShapes (point) {\n var children = this.children;\n var length = children.length;\n var result = QuadRoot$$1.prototype.pointShapes.call(this, point);\n for (var idx = 0; idx < length; idx++) {\n append$1$1(result, children[idx].pointShapes(point));\n }\n return result;\n };\n\n QuadNode.prototype.insert = function insert (shape, bbox) {\n var children = this.children;\n var inserted = false;\n\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\n for (var idx = 0; idx < children.length; idx++) {\n if (children[idx].insert(shape, bbox)) {\n inserted = true;\n break;\n }\n }\n\n if (!inserted) {\n this._add(shape, bbox);\n }\n }\n inserted = true;\n }\n\n return inserted;\n };\n\n QuadNode.prototype._initChildren = function _initChildren () {\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\n children.push(\n new QuadNode(new Rect([ rect.origin.x, rect.origin.y ], [ halfWidth, halfHeight ])),\n new QuadNode(new Rect([ center.x, rect.origin.y ], [ halfWidth, halfHeight ])),\n new QuadNode(new Rect([ rect.origin.x, center.y ], [ halfWidth, halfHeight ])),\n new QuadNode(new Rect([ center.x, center.y ], [ halfWidth, halfHeight ]))\n );\n };\n\n return QuadNode;\n }(QuadRoot));\n\n var ROOT_SIZE = 3000;\n var LEVEL_STEP = 10000;\n var MAX_LEVEL = 75;\n\n var ShapesQuadTree = (function (Class$$1) {\n function ShapesQuadTree() {\n Class$$1.call(this);\n\n this.initRoots();\n }\n\n extendStatic(ShapesQuadTree, Class$$1);\n ShapesQuadTree.prototype = Object.create( Class$$1 && Class$$1.prototype );\n ShapesQuadTree.prototype.constructor = ShapesQuadTree;\n ShapesQuadTree.fn = ShapesQuadTree.prototype;\n ShapesQuadTree.fn.init = ShapesQuadTree.fn.constructor;\n\n ShapesQuadTree.prototype.initRoots = function initRoots () {\n this.rootMap = {};\n this.root = new QuadRoot();\n this.rootElements = [];\n };\n\n ShapesQuadTree.prototype.clear = function clear () {\n var this$1$1 = this;\n\n var rootElements = this.rootElements;\n for (var idx = 0; idx < rootElements.length; idx++) {\n this$1$1.remove(rootElements[idx]);\n }\n this.initRoots();\n };\n\n ShapesQuadTree.prototype.pointShape = function pointShape (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\n if (sectorRoot) {\n result = result.concat(sectorRoot.pointShapes(point));\n }\n\n this.assignZindex(result);\n\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\n ShapesQuadTree.prototype.assignZindex = function assignZindex (elements) {\n var this$1$1 = this;\n\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\n while (element) {\n parents.push(element);\n element = element.parent;\n }\n\n while (parents.length) {\n element = parents.pop();\n zIndex += ((element.parent ? element.parent.children : this$1$1.rootElements).indexOf(element) + 1) * levelWeight;\n levelWeight /= LEVEL_STEP;\n }\n\n elements[idx]._zIndex = zIndex;\n }\n };\n\n ShapesQuadTree.prototype.optionsChange = function optionsChange (e) {\n if (e.field === \"transform\" || e.field === \"stroke.width\") {\n this.bboxChange(e.element);\n }\n };\n\n ShapesQuadTree.prototype.geometryChange = function geometryChange (e) {\n this.bboxChange(e.element);\n };\n\n ShapesQuadTree.prototype.bboxChange = function bboxChange (element) {\n var this$1$1 = this;\n\n if (element.nodeType === \"Group\") {\n for (var idx = 0; idx < element.children.length; idx++) {\n this$1$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\n ShapesQuadTree.prototype.add = function add (elements) {\n var elementsArray = Array.isArray(elements) ? elements.slice(0) : [ elements ];\n\n append$1$1(this.rootElements, elementsArray);\n this._insert(elementsArray);\n };\n\n ShapesQuadTree.prototype.childrenChange = function childrenChange (e) {\n var this$1$1 = this;\n\n if (e.action === \"remove\") {\n for (var idx = 0; idx < e.items.length; idx++) {\n this$1$1.remove(e.items[idx]);\n }\n } else {\n this._insert(Array.prototype.slice.call(e.items, 0));\n }\n };\n\n ShapesQuadTree.prototype._insert = function _insert (elements) {\n var this$1$1 = this;\n\n var element;\n\n while (elements.length > 0) {\n element = elements.pop();\n element.addObserver(this$1$1);\n if (element.nodeType === \"Group\") {\n append$1$1(elements, element.children);\n } else {\n this$1$1._insertShape(element);\n }\n }\n };\n\n ShapesQuadTree.prototype._insertShape = function _insertShape (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\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\n if (!rootMap[x][y]) {\n rootMap[x][y] = new QuadNode(\n new Rect([ x * ROOT_SIZE, y * ROOT_SIZE ], [ ROOT_SIZE, ROOT_SIZE ])\n );\n }\n\n rootMap[x][y].insert(shape, bbox);\n }\n }\n };\n\n ShapesQuadTree.prototype.remove = function remove (element) {\n var this$1$1 = this;\n\n element.removeObserver(this);\n\n if (element.nodeType === \"Group\") {\n var children = element.children;\n for (var idx = 0; idx < children.length; idx++) {\n this$1$1.remove(children[idx]);\n }\n } else if (element._quadNode) {\n element._quadNode.remove(element);\n delete element._quadNode;\n }\n };\n\n ShapesQuadTree.prototype.inRoot = function inRoot (sectors) {\n return sectors[0].length > 1 || sectors[1].length > 1;\n };\n\n ShapesQuadTree.prototype.getSectors = function getSectors (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 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 return ShapesQuadTree;\n }(Class));\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\n return 0;\n }\n\n var SurfaceCursor = function SurfaceCursor(surface) {\n surface.bind(\"mouseenter\", this._mouseenter.bind(this));\n surface.bind(\"mouseleave\", this._mouseleave.bind(this));\n\n this.element = surface.element;\n };\n\n SurfaceCursor.prototype.clear = function clear () {\n this._resetCursor();\n };\n\n SurfaceCursor.prototype.destroy = function destroy () {\n this._resetCursor();\n delete this.element;\n };\n\n SurfaceCursor.prototype._mouseenter = function _mouseenter (e) {\n var cursor = this._shapeCursor(e);\n\n if (!cursor) {\n this._resetCursor();\n } else {\n if (!this._current) {\n this._defaultCursor = this._getCursor();\n }\n\n this._setCursor(cursor);\n }\n };\n\n SurfaceCursor.prototype._mouseleave = function _mouseleave () {\n this._resetCursor();\n };\n\n SurfaceCursor.prototype._shapeCursor = function _shapeCursor (e) {\n var shape = e.element;\n\n while (shape && !defined(shape.options.cursor)) {\n shape = shape.parent;\n }\n\n if (shape) {\n return shape.options.cursor;\n }\n };\n\n SurfaceCursor.prototype._getCursor = function _getCursor () {\n if (this.element) {\n return this.element.style.cursor;\n }\n };\n\n SurfaceCursor.prototype._setCursor = function _setCursor (cursor) {\n if (this.element) {\n this.element.style.cursor = cursor;\n this._current = cursor;\n }\n };\n\n SurfaceCursor.prototype._resetCursor = function _resetCursor () {\n if (this._current) {\n this._setCursor(this._defaultCursor || \"\");\n delete this._current;\n }\n };\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\n color.a *= stop.opacity();\n\n gradient.addColorStop(stop.offset(), color.toCssRgba());\n }\n }\n\n var PathNode$2 = (function (Node) {\n function PathNode () {\n Node.apply(this, arguments);\n }\n\n extendStatic(PathNode, Node);\n PathNode.prototype = Object.create( Node && Node.prototype );\n PathNode.prototype.constructor = PathNode;\n PathNode.fn = PathNode.prototype;\n PathNode.fn.init = PathNode.fn.constructor;\n\n PathNode.prototype.renderTo = function renderTo (ctx) {\n ctx.save();\n\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n\n ctx.beginPath();\n\n this.renderPoints(ctx, this.srcElement);\n\n this.setLineDash(ctx);\n this.setLineCap(ctx);\n this.setLineJoin(ctx);\n\n this.setFill(ctx);\n this.setStroke(ctx);\n\n ctx.restore();\n };\n\n PathNode.prototype.setFill = function setFill (ctx) {\n var fill = this.srcElement.options.fill;\n var hasFill = false;\n\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\n ctx.save();\n this.globalAlpha(ctx, fill.opacity);\n ctx.fill();\n ctx.restore();\n\n hasFill = true;\n }\n }\n\n return hasFill;\n };\n\n PathNode.prototype.setGradientFill = function setGradientFill (ctx, fill) {\n var bbox = this.srcElement.rawBBox();\n var gradient;\n\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\n addGradientStops(gradient, fill.stops);\n\n ctx.save();\n\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\n ctx.restore();\n };\n\n PathNode.prototype.setStroke = function setStroke (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\n ctx.save();\n this.globalAlpha(ctx, stroke.opacity);\n ctx.stroke();\n ctx.restore();\n\n return true;\n }\n };\n\n PathNode.prototype.dashType = function dashType () {\n var stroke = this.srcElement.options.stroke;\n if (stroke && stroke.dashType) {\n return stroke.dashType.toLowerCase();\n }\n };\n\n PathNode.prototype.setLineDash = function setLineDash (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\n PathNode.prototype.setLineCap = function setLineCap (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\n PathNode.prototype.setLineJoin = function setLineJoin (ctx) {\n var stroke = this.srcElement.options.stroke;\n if (stroke && stroke.lineJoin) {\n ctx.lineJoin = stroke.lineJoin;\n }\n };\n\n PathNode.prototype.renderPoints = function renderPoints (ctx, path) {\n renderPath(ctx, path);\n };\n\n return PathNode;\n }(Node$2));\n\n var ArcNode$2 = (function (PathNode) {\n function ArcNode () {\n PathNode.apply(this, arguments);\n }\n\n extendStatic(ArcNode, PathNode);\n ArcNode.prototype = Object.create( PathNode && PathNode.prototype );\n ArcNode.prototype.constructor = ArcNode;\n ArcNode.fn = ArcNode.prototype;\n ArcNode.fn.init = ArcNode.fn.constructor;\n\n ArcNode.prototype.renderPoints = function renderPoints (ctx) {\n var path = this.srcElement.toPath();\n renderPath(ctx, path);\n };\n\n return ArcNode;\n }(PathNode$2));\n\n var CircleNode$2 = (function (PathNode) {\n function CircleNode () {\n PathNode.apply(this, arguments);\n }\n\n extendStatic(CircleNode, PathNode);\n CircleNode.prototype = Object.create( PathNode && PathNode.prototype );\n CircleNode.prototype.constructor = CircleNode;\n CircleNode.fn = CircleNode.prototype;\n CircleNode.fn.init = CircleNode.fn.constructor;\n\n CircleNode.prototype.renderPoints = function renderPoints (ctx) {\n var ref = this.srcElement.geometry();\n var center = ref.center;\n var radius = ref.radius;\n\n ctx.arc(center.x, center.y, radius, 0, Math.PI * 2);\n };\n\n return CircleNode;\n }(PathNode$2));\n\n var ImageNode$2 = (function (PathNode) {\n function ImageNode(srcElement, cors) {\n PathNode.call(this, srcElement);\n\n this.onLoad = this.onLoad.bind(this);\n this.onError = this.onError.bind(this);\n\n this.loading = createPromise();\n\n var img = this.img = new Image();\n var src = srcElement.src();\n\n if (cors && !(/^data:/i.test(src))) {\n img.crossOrigin = cors;\n }\n\n if (src) {\n img.src = src;\n }\n\n if (img.complete) {\n this.onLoad();\n } else {\n img.onload = this.onLoad;\n img.onerror = this.onError;\n }\n }\n\n extendStatic(ImageNode, PathNode);\n ImageNode.prototype = Object.create( PathNode && PathNode.prototype );\n ImageNode.prototype.constructor = ImageNode;\n ImageNode.fn = ImageNode.prototype;\n ImageNode.fn.init = ImageNode.fn.constructor;\n\n ImageNode.prototype.renderTo = function renderTo (ctx) {\n if (this.loading.state() === \"resolved\") {\n ctx.save();\n\n this.setTransform(ctx);\n this.setClip(ctx);\n\n this.drawImage(ctx);\n\n ctx.restore();\n }\n };\n\n ImageNode.prototype.optionsChange = function optionsChange (e) {\n if (e.field === \"src\") {\n this.loading = createPromise();\n this.img.src = this.srcElement.src();\n } else {\n PathNode.prototype.optionsChange.call(this, e);\n }\n };\n\n ImageNode.prototype.onLoad = function onLoad () {\n this.loading.resolve();\n this.invalidate();\n };\n\n ImageNode.prototype.onError = function onError () {\n this.loading.reject(new Error(\n \"Unable to load image '\" + this.img.src +\n \"'. Check for connectivity and verify CORS headers.\"\n ));\n };\n\n ImageNode.prototype.drawImage = function drawImage (ctx) {\n var rect = this.srcElement.rect();\n var topLeft = rect.topLeft();\n\n ctx.drawImage(\n this.img, topLeft.x, topLeft.y, rect.width(), rect.height()\n );\n };\n\n return ImageNode;\n }(PathNode$2));\n\n var MultiPathNode$2 = (function (PathNode) {\n function MultiPathNode () {\n PathNode.apply(this, arguments);\n }\n\n extendStatic(MultiPathNode, PathNode);\n MultiPathNode.prototype = Object.create( PathNode && PathNode.prototype );\n MultiPathNode.prototype.constructor = MultiPathNode;\n MultiPathNode.fn = MultiPathNode.prototype;\n MultiPathNode.fn.init = MultiPathNode.fn.constructor;\n\n MultiPathNode.prototype.renderPoints = function renderPoints (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 return MultiPathNode;\n }(PathNode$2));\n\n var RectNode$2 = (function (PathNode) {\n function RectNode () {\n PathNode.apply(this, arguments);\n }\n\n extendStatic(RectNode, PathNode);\n RectNode.prototype = Object.create( PathNode && PathNode.prototype );\n RectNode.prototype.constructor = RectNode;\n RectNode.fn = RectNode.prototype;\n RectNode.fn.init = RectNode.fn.constructor;\n\n RectNode.prototype.renderPoints = function renderPoints (ctx) {\n var geometry = this.srcElement.geometry();\n var ref = geometry.cornerRadius;\n var rx = ref[0];\n var ry = ref[1];\n\n if (rx === 0 && ry === 0) {\n var origin = geometry.origin;\n var size = geometry.size;\n ctx.rect(origin.x, origin.y, size.width, size.height);\n } else {\n PathNode.prototype.renderPoints.call(this, ctx, Path.fromRect(geometry));\n }\n };\n\n return RectNode;\n }(PathNode$2));\n\n var TextNode$2 = (function (PathNode) {\n function TextNode () {\n PathNode.apply(this, arguments);\n }\n\n extendStatic(TextNode, PathNode);\n TextNode.prototype = Object.create( PathNode && PathNode.prototype );\n TextNode.prototype.constructor = TextNode;\n TextNode.fn = TextNode.prototype;\n TextNode.fn.init = TextNode.fn.constructor;\n\n TextNode.prototype.renderTo = function renderTo (ctx) {\n var text = this.srcElement;\n var pos = text.position();\n var size = text.measure();\n\n ctx.save();\n\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n\n ctx.beginPath();\n\n ctx.font = text.options.font;\n ctx.textAlign = 'left';\n\n if (this.setFill(ctx)) {\n ctx.fillText(text.content(), pos.x, pos.y + size.baseline);\n }\n\n if (this.setStroke(ctx)) {\n this.setLineDash(ctx);\n ctx.strokeText(text.content(), pos.x, pos.y + size.baseline);\n }\n\n ctx.restore();\n };\n\n return TextNode;\n }(PathNode$2));\n\n NODE_MAP$2.Arc = ArcNode$2;\n NODE_MAP$2.Circle = CircleNode$2;\n NODE_MAP$2.Group = GroupNode$2;\n NODE_MAP$2.Image = ImageNode$2;\n NODE_MAP$2.MultiPath = MultiPathNode$2;\n NODE_MAP$2.Path = PathNode$2;\n NODE_MAP$2.Rect = RectNode$2;\n NODE_MAP$2.Text = TextNode$2;\n\n var Surface$4 = (function (BaseSurface) {\n function Surface(element, options) {\n BaseSurface.call(this, element, options);\n\n this.element.innerHTML = this._template(this);\n\n var canvas = this.element.firstElementChild;\n var size = elementSize(element);\n\n canvas.width = size.width;\n canvas.height = size.height;\n\n this._rootElement = canvas;\n\n this._root = new RootNode$2(canvas, size);\n\n this._mouseTrackHandler = this._trackMouse.bind(this);\n\n bindEvents(this.element, {\n click: this._mouseTrackHandler,\n mousemove: this._mouseTrackHandler\n });\n }\n\n extendStatic(Surface, BaseSurface);\n Surface.prototype = Object.create( BaseSurface && BaseSurface.prototype );\n Surface.prototype.constructor = Surface;\n Surface.fn = Surface.prototype;\n Surface.fn.init = Surface.fn.constructor;\n\n var prototypeAccessors = { type: {} };\n\n prototypeAccessors.type.get = function () {\n return \"canvas\";\n };\n\n Surface.prototype.destroy = function destroy () {\n BaseSurface.prototype.destroy.call(this);\n\n if (this._root) {\n this._root.destroy();\n this._root = null;\n }\n\n if (this._searchTree) {\n this._searchTree.clear();\n delete this._searchTree;\n }\n\n if (this._cursor) {\n this._cursor.destroy();\n delete this._cursor;\n }\n\n unbindEvents(this.element, {\n click: this._mouseTrackHandler,\n mousemove: this._mouseTrackHandler\n });\n };\n\n Surface.prototype.draw = function draw (element) {\n BaseSurface.prototype.draw.call(this, element);\n this._root.load([ element ], undefined, this.options.cors);\n\n if (this._searchTree) {\n this._searchTree.add([ element ]);\n }\n };\n\n Surface.prototype.clear = function clear () {\n BaseSurface.prototype.clear.call(this);\n this._root.clear();\n\n if (this._searchTree) {\n this._searchTree.clear();\n }\n\n if (this._cursor) {\n this._cursor.clear();\n }\n };\n\n Surface.prototype.eventTarget = function eventTarget (e) {\n if (this._searchTree) {\n var point = this._surfacePoint(e);\n var shape = this._searchTree.pointShape(point);\n return shape;\n }\n };\n\n Surface.prototype.image = function image () {\n var ref = this;\n var root = ref._root;\n var rootElement = ref._rootElement;\n var loadingStates = [];\n\n root.traverse(function (childNode) {\n if (childNode.loading) {\n loadingStates.push(childNode.loading);\n }\n });\n\n var promise = createPromise();\n var resolveDataURL = function () {\n root._invalidate({ fixedScale: true });\n\n try {\n var data = rootElement.toDataURL();\n promise.resolve(data);\n } catch (e) {\n promise.reject(e);\n }\n };\n\n promiseAll(loadingStates).then(resolveDataURL, resolveDataURL);\n\n return promise;\n };\n\n Surface.prototype.suspendTracking = function suspendTracking () {\n BaseSurface.prototype.suspendTracking.call(this);\n if (this._searchTree) {\n this._searchTree.clear();\n delete this._searchTree;\n }\n };\n\n Surface.prototype.resumeTracking = function resumeTracking () {\n BaseSurface.prototype.resumeTracking.call(this);\n if (!this._searchTree) {\n this._searchTree = new ShapesQuadTree();\n\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\n Surface.prototype._resize = function _resize () {\n this._rootElement.width = this._size.width;\n this._rootElement.height = this._size.height;\n\n this._root.size = this._size;\n this._root.invalidate();\n };\n\n Surface.prototype._template = function _template () {\n return \"\";\n };\n\n Surface.prototype._enableTracking = function _enableTracking () {\n this._searchTree = new ShapesQuadTree();\n this._cursor = new SurfaceCursor(this);\n\n BaseSurface.prototype._enableTracking.call(this);\n };\n\n Surface.prototype._trackMouse = function _trackMouse (e) {\n if (this._suspendedTracking) {\n return;\n }\n\n var shape = this.eventTarget(e);\n\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\n if (shape && currentShape !== shape) {\n this.trigger(\"mouseenter\", {\n element: shape,\n originalEvent: e,\n type: \"mouseenter\"\n });\n }\n\n this.trigger(\"mousemove\", {\n element: shape,\n originalEvent: e,\n type: \"mousemove\"\n });\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 Object.defineProperties( Surface.prototype, prototypeAccessors );\n\n return Surface;\n }(Surface$2));\n\n var instance$2;\n var support$1;\n\n var hasDocument = function () { return typeof document !== \"undefined\"; };\n\n var supportsCanvas = function () { return hasDocument() &&\n document.createElement(\"canvas\").getContext; };\n\n var supportsSVG = function () { return hasDocument() &&\n document.implementation.hasFeature(\"http://www.w3.org/TR/SVG11/feature#BasicStructure\", \"1.1\"); };\n\n var SurfaceFactory = (function (Class$$1) {\n function SurfaceFactory() {\n Class$$1.call(this);\n\n this._items = [ {\n name: \"svg\",\n type: Surface$3\n }, {\n name: \"canvas\",\n type: Surface$4\n } ];\n }\n\n extendStatic(SurfaceFactory, Class$$1);\n SurfaceFactory.prototype = Object.create( Class$$1 && Class$$1.prototype );\n SurfaceFactory.prototype.constructor = SurfaceFactory;\n SurfaceFactory.fn = SurfaceFactory.prototype;\n SurfaceFactory.fn.init = SurfaceFactory.fn.constructor;\n\n var staticAccessors = { support: {},current: {} };\n\n staticAccessors.support.get = function () {\n if (!support$1) {\n support$1 = {\n canvas: supportsCanvas(),\n svg: supportsSVG()\n };\n }\n\n return support$1;\n };\n\n staticAccessors.current.get = function () {\n if (!instance$2) {\n instance$2 = new SurfaceFactory();\n }\n\n return instance$2;\n };\n\n SurfaceFactory.prototype.create = function create (element, options) {\n var items = this._items;\n var match = items[0];\n\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\n if (match) {\n return new match.type(element, options);\n }\n\n kendo.logToConsole(\n \"Warning: Unable to create Kendo UI Drawing Surface. Possible causes:\\n\" +\n \"- The browser does not support SVG and Canvas. User agent: \" + (navigator.userAgent));\n };\n\n Object.defineProperties( SurfaceFactory, staticAccessors );\n\n return SurfaceFactory;\n }(Class));\n\n var Surface = (function (BaseSurface) {\n function Surface () {\n BaseSurface.apply(this, arguments);\n }\n\n extendStatic(Surface, BaseSurface);\n Surface.prototype = Object.create( BaseSurface && BaseSurface.prototype );\n Surface.prototype.constructor = Surface;\n Surface.fn = Surface.prototype;\n Surface.fn.init = Surface.fn.constructor;\n\n var staticAccessors = { support: {} };\n\n staticAccessors.support.get = function () {\n return SurfaceFactory.support;\n };\n\n Surface.create = function create (element, options) {\n return SurfaceFactory.current.create(element, options);\n };\n\n Object.defineProperties( Surface, staticAccessors );\n\n return Surface;\n }(Surface$2));\n\n function exportGroup(group) {\n var root = new RootNode({\n skipBaseHref: true\n });\n var bbox = group.clippedBBox();\n var rootGroup = group;\n\n if (bbox) {\n var origin = bbox.getOrigin();\n var exportRoot = new Group();\n exportRoot.transform(transform$1().translate(-origin.x, -origin.y));\n exportRoot.children.push(group);\n rootGroup = exportRoot;\n }\n\n root.load([ rootGroup ]);\n\n var svg = \"\" + (root.render()) + \"\";\n\n root.destroy();\n\n return svg;\n }\n\n var svg$1 = {\n \tSurface: Surface$3,\n \tRootNode: RootNode,\n \tNode: Node,\n \tGroupNode: GroupNode,\n \tArcNode: ArcNode,\n \tCircleNode: CircleNode,\n \tRectNode: RectNode,\n \tImageNode: ImageNode,\n \tTextNode: TextNode,\n \tPathNode: PathNode,\n \tMultiPathNode: MultiPathNode,\n \tDefinitionNode: DefinitionNode,\n \tClipNode: ClipNode,\n \tGradientStopNode: GradientStopNode,\n \tLinearGradientNode: LinearGradientNode,\n \tRadialGradientNode: RadialGradientNode,\n \texportGroup: exportGroup\n };\n\n var canvas = {\n \tSurface: Surface$4,\n \tRootNode: RootNode$2,\n \tNode: Node$2,\n \tGroupNode: GroupNode$2,\n \tArcNode: ArcNode$2,\n \tCircleNode: CircleNode$2,\n \tRectNode: RectNode$2,\n \tImageNode: ImageNode$2,\n \tTextNode: TextNode$2,\n \tPathNode: PathNode$2,\n \tMultiPathNode: MultiPathNode$2\n };\n\n function exportImage(group, options) {\n var defaults = {\n width: \"800px\", height: \"600px\",\n cors: \"Anonymous\"\n };\n\n var exportRoot = group;\n var bbox = group.clippedBBox();\n\n if (bbox) {\n var origin = bbox.getOrigin();\n exportRoot = new Group();\n exportRoot.transform(transform$1().translate(-origin.x, -origin.y));\n exportRoot.children.push(group);\n\n var size = bbox.getSize();\n defaults.width = size.width + \"px\";\n defaults.height = size.height + \"px\";\n }\n\n var surfaceOptions = $.extend(defaults, options);\n\n var container = document.createElement(\"div\");\n var style = container.style;\n\n style.display = \"none\";\n style.width = surfaceOptions.width;\n style.height = surfaceOptions.height;\n document.body.appendChild(container);\n\n var surface = new Surface$4(container, surfaceOptions);\n surface.suspendTracking();\n surface.draw(exportRoot);\n\n var promise = surface.image();\n var destroy = function () {\n surface.destroy();\n document.body.removeChild(container);\n };\n promise.then(destroy, destroy);\n\n return promise;\n }\n\n function exportSVG(group, options) {\n var svg = exportGroup(group);\n\n if (!options || !options.raw) {\n svg = \"data:image/svg+xml;base64,\" + encodeBase64(svg);\n }\n\n return createPromise().resolve(svg);\n }\n\n /* eslint-disable no-multi-spaces, key-spacing, indent, camelcase, space-before-blocks, eqeqeq, brace-style */\n /* eslint-disable space-infix-ops, space-before-function-paren, array-bracket-spacing, object-curly-spacing */\n /* eslint-disable no-nested-ternary, max-params, default-case, no-else-return, no-empty, yoda */\n /* eslint-disable no-param-reassign, no-var, block-scoped-var */\n\n var browser = supportBrowser || {};\n /*\n\n XXX: to test:\n\n - cloneNodes function:\n - drawing document containing canvas with page breaking\n - drawing document with named radio -s (should not clear selection)\n - IE9/IE10 don't support el.dataset; do they copy user data?\n\n - repeating table headers/footers on page breaking\n\n - forceBreak, keepTogether\n\n - avoidLinks\n\n */\n\n /* -----[ local vars ]----- */\n\n function slice$1$1(thing) {\n return Array.prototype.slice.call(thing);\n }\n\n var KENDO_PSEUDO_ELEMENT = \"KENDO-PSEUDO-ELEMENT\";\n\n var IMAGE_CACHE = {};\n\n var nodeInfo = {};\n nodeInfo._root = nodeInfo;\n\n /* -----[ Custom Text node to speed up rendering in kendo.pdf ]----- */\n\n var inBrowser = typeof window !== 'undefined';\n var microsoft = inBrowser ? browser.msie || browser.edge : false;\n\n var TextRect = (function (Text$$1) {\n function TextRect(str, rect, options) {\n Text$$1.call(this, str, rect.getOrigin(), options);\n this._pdfRect = rect;\n }\n\n extendStatic(TextRect, Text$$1);\n TextRect.prototype = Object.create( Text$$1 && Text$$1.prototype );\n TextRect.prototype.constructor = TextRect;\n TextRect.fn = TextRect.prototype;\n TextRect.fn.init = TextRect.fn.constructor;\n TextRect.prototype.rect = function rect () {\n // this is the crux of it: we can avoid a call to\n // measure(), which is what the base class does, since we\n // already know the rect. measure() is s-l-o-w.\n return this._pdfRect;\n };\n TextRect.prototype.rawBBox = function rawBBox () {\n // also let's avoid creating a new rectangle.\n return this._pdfRect;\n };\n\n return TextRect;\n }(Text));\n\n function addClass(el, cls) {\n if (el.classList) {\n el.classList.add(cls);\n } else {\n el.className += \" \" + cls;\n }\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\n function setCSS(el, styles) {\n Object.keys(styles).forEach(function(key){\n el.style[key] = styles[key];\n });\n }\n\n var matches = typeof Element !== \"undefined\" && Element.prototype && (function(p){\n if (p.matches) {\n return function(el, selector) { return el.matches(selector); };\n }\n if (p.webkitMatchesSelector) {\n return function(el, selector) { return el.webkitMatchesSelector(selector); };\n }\n if (p.mozMatchesSelector) {\n return function(el, selector) { return el.mozMatchesSelector(selector); };\n }\n if (p.msMatchesSelector) {\n return function(el, selector) { return el.msMatchesSelector(selector); };\n }\n return function(s) {\n \treturn [].indexOf.call(document.querySelectorAll(s), this) !== -1;\n };\n })(Element.prototype);\n\n function closest(el, selector) {\n if (el.closest) {\n return el.closest(selector);\n }\n // IE: stringifying rather than simply comparing with `document`,\n // which is not iframe-proof and fails in editor export —\n // https://github.com/telerik/kendo/issues/6721\n while (el && !/^\\[object (?:HTML)?Document\\]$/.test(String(el))) {\n if (el.nodeType == 1 /* Element */ && matches(el, selector)) {\n return el;\n }\n el = el.parentNode;\n }\n }\n\n // clone nodes ourselves, so that we redraw (DOM or\n // jQuery clone will not)\n var cloneNodes = (function($){\n if ($) {\n // if we have Kendo and jQuery, use this version as it will\n // maintain proper links between cloned element and Kendo\n // widgets (i.e. it clones jQuery data(), which isn't the same\n // as element's data attributes).\n // https://github.com/telerik/kendo-ui-core/issues/2750\n return function cloneNodes(el) {\n var clone = el.cloneNode(false);\n if (el.nodeType == 1 /* Element */) {\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 // drop the name attributes so that we don't affect the selection of the\n // original nodes (i.e. checked status of radio buttons) when we insert our copy\n // into the DOM. https://github.com/telerik/kendo/issues/5409\n clone.removeAttribute(\"id\");\n clone.removeAttribute(\"name\");\n if (!/^textarea$/i.test(el.tagName)) {\n clone.value = el.value;\n }\n clone.checked = el.checked;\n clone.selected = el.selected;\n }\n for (i = el.firstChild; i; i = i.nextSibling) {\n clone.appendChild(cloneNodes(i));\n }\n }\n return clone;\n };\n } else {\n // the no-jQuery version\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\n // re-draw canvases - https://github.com/telerik/kendo/issues/4872\n var canvases = el.querySelectorAll(\"canvas\");\n if (canvases.length) {\n slice$1$1(clone.querySelectorAll(\"canvas\")).forEach(function (canvas$$1, i) {\n canvas$$1.getContext(\"2d\").drawImage(canvases[i], 0, 0);\n });\n }\n\n // remove \"name\" attributes from elements -\n // https://github.com/telerik/kendo/issues/5409\n var orig = el.querySelectorAll(\"input, select, textarea, option\");\n slice$1$1(clone.querySelectorAll(\"input, select, textarea, option\")).forEach(function (el, i) {\n el.removeAttribute(\"id\");\n el.removeAttribute(\"name\");\n if (!/^textarea$/i.test(el.tagName)) {\n el.value = orig[i].value;\n }\n el.checked = orig[i].checked;\n el.selected = orig[i].selected;\n });\n\n return clone;\n };\n }\n })(typeof window !== \"undefined\" && window.kendo && window.kendo.jQuery);\n\n function getXY(thing) {\n if (typeof thing == \"number\") {\n return { x: thing, y: thing };\n }\n if (Array.isArray(thing)) {\n return { x: thing[0], y: thing[1] };\n }\n return { x: thing.x, y: thing.y };\n }\n\n function drawDOM(element, options) {\n if (!options) {\n options = {};\n }\n var promise = createPromise();\n\n if (!element) {\n return promise.reject(\"No element to export\");\n }\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\n kendo.pdf.defineFont(getFontFaces(element.ownerDocument));\n\n var scale = getXY(options.scale || 1);\n\n function doOne(element) {\n var group = new Group();\n\n // translate to start of page\n var pos = element.getBoundingClientRect();\n setTransform$1(group, [\n scale.x,\n 0,\n 0,\n scale.y,\n (-pos.left * scale.x),\n (-pos.top * scale.y)\n ]);\n\n nodeInfo._clipbox = false;\n nodeInfo._matrix = Matrix.unit();\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n\n if (options.avoidLinks === true) {\n nodeInfo._avoidLinks = \"a\";\n } else {\n nodeInfo._avoidLinks = options.avoidLinks;\n }\n\n addClass(element, \"k-pdf-export\");\n renderElement(element, group);\n removeClass(element, \"k-pdf-export\");\n\n return group;\n }\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 // PDF.getPaperOptions croaks on \"auto\", just pass dummy A4 as we might\n // still be interested in margins.\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 = { left: 0, top: 0, right: 0, bottom: 0 };\n }\n\n // we want paper size and margin to be unaffected by\n // scaling in the output, so we have to reverse-scale\n // before our calculations begin.\n if (pageWidth) { pageWidth /= scale.x; }\n if (pageHeight) { pageHeight /= scale.y; }\n margin.left /= scale.x;\n margin.right /= scale.x;\n margin.top /= scale.y;\n margin.bottom /= scale.y;\n\n var group = new Group({\n pdf: {\n multiPage : true,\n paperSize : hasPaperSize ? paperOptions.paperSize : \"auto\",\n _ignoreMargin : hasMargin // HACK! see exportPDF in pdf/drawing.js\n }\n });\n handlePageBreaks(\n 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 // XXX: should we also fail() the deferred object?\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 },\n element,\n forceBreak,\n pageWidth ? pageWidth - margin.left - margin.right : null,\n pageHeight ? pageHeight - margin.top - margin.bottom : null,\n margin,\n options\n );\n } else {\n promise.resolve(doOne(element));\n }\n });\n\n function makeTemplate(template) {\n if (template != null) {\n if (typeof template == \"string\") {\n template = kendo.template(template.replace(/^\\s+|\\s+$/g, \"\"));\n }\n if (typeof template == \"function\") {\n return function(data) {\n var el = template(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 // assumed DOM element\n return function() {\n return template.cloneNode(true);\n };\n }\n }\n\n function handlePageBreaks(callback, element, forceBreak, pageWidth, pageHeight, margin, options) {\n var template = 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\n // make sure elements are at the end (Grid widget\n // places TFOOT before TBODY, tricking our algorithm to\n // insert a page break right after the header).\n // https://github.com/telerik/kendo/issues/4699\n slice$1$1(copy.querySelectorAll(\"tfoot\")).forEach(function(tfoot){\n tfoot.parentNode.appendChild(tfoot);\n });\n\n // remember the index of each LI from an ordered list.\n // we'll use it to reconstruct the proper numbering.\n slice$1$1(copy.querySelectorAll(\"ol\")).forEach(function(ol){\n slice$1$1(ol.children).forEach(function(li, index){\n li.setAttribute(\"kendo-split-index\", index);\n });\n });\n\n setCSS(container, {\n display : \"block\",\n position : \"absolute\",\n boxSizing : \"content-box\",\n left : \"-10000px\",\n top : \"-10000px\"\n });\n\n if (pageWidth) {\n // subtle: if we don't set the width *and* margins here, the layout in this\n // container will be different from the one in our final page elements, and we'll\n // split at the wrong places.\n setCSS(container, {\n width : pageWidth + \"px\",\n paddingLeft : margin.left + \"px\",\n paddingRight : margin.right + \"px\"\n });\n\n // when the first element has a margin-top (i.e. a

    ) the page will be\n // inadvertently enlarged by that number (the browser will report the container's\n // bounding box top to start at the element's top, rather than including its\n // margin). Adding overflow: hidden seems to fix it.\n //\n // to understand the difference, try the following snippets in your browser:\n //\n // 1.
    \n //

    Foo

    \n //
    \n //\n // 2.
    \n //

    Foo

    \n //
    \n //\n // this detail is not important when automatic page breaking is not requested, hence\n // doing it only if pageWidth is defined.\n setCSS(copy, { overflow: \"hidden\" });\n }\n\n element.parentNode.insertBefore(container, element);\n container.appendChild(copy);\n\n // With cache disabled, images will still have height zero until their `complete` attribute\n // is true. `whenImagesAreActuallyLoaded` will wait for it.\n if (options.beforePageBreak) {\n whenImagesAreActuallyLoaded([ container ], function() {\n options.beforePageBreak(container, doPageBreak);\n });\n } else {\n whenImagesAreActuallyLoaded([ container ], doPageBreak);\n }\n\n function doPageBreak() {\n if (forceBreak != \"-\" || pageHeight) {\n splitElement(copy);\n }\n\n {\n var page = makePage();\n copy.parentNode.insertBefore(page, copy);\n page.appendChild(copy);\n }\n\n if (template) {\n pages.forEach(function(page, i){\n var el = template({\n element : page,\n pageNum : i + 1,\n totalPages : pages.length\n });\n if (el) {\n page.appendChild(el);\n }\n });\n }\n\n cacheImages(pages, callback.bind(null, { pages: pages, container: container }));\n }\n\n function keepTogether(el) {\n if (options.keepTogether && matches(el, options.keepTogether) && el.offsetHeight <= pageHeight - adjust) {\n return true;\n }\n\n var tag = el.tagName;\n if (/^h[1-6]$/i.test(tag) && el.offsetHeight >= pageHeight - adjust) {\n return false;\n }\n\n return (el.getAttribute(\"data-kendo-chart\") ||\n /^(?:img|tr|thead|th|tfoot|iframe|svg|object|canvas|input|textarea|select|video|h[1-6])/i.test(el.tagName));\n }\n\n function splitElement(element) {\n if (element.tagName == \"TABLE\") {\n setCSS(element, { tableLayout: \"fixed\" });\n }\n if (keepTogether(element)) {\n return;\n }\n var style = getComputedStyle$1(element);\n var bottomPadding = parseFloat(getPropertyValue(style, \"padding-bottom\"));\n var bottomBorder = parseFloat(getPropertyValue(style, \"border-bottom-width\"));\n var saveAdjust = adjust;\n adjust += bottomPadding + bottomBorder;\n var isFirst = true;\n for (var el = element.firstChild; el; el = el.nextSibling) {\n if (el.nodeType == 1 /* Element */) {\n isFirst = false;\n if (matches(el, forceBreak)) {\n breakAtElement(el);\n continue;\n }\n if (!pageHeight) {\n // we're in \"manual breaks mode\"\n splitElement(el);\n continue;\n }\n if (!/^(?:static|relative)$/.test(getPropertyValue(getComputedStyle$1(el), \"position\"))) {\n continue;\n }\n var fall = fallsOnMargin(el);\n if (fall == 1) {\n // element starts on next page, break before anyway.\n breakAtElement(el);\n }\n else if (fall) {\n // elements ends up on next page, or possibly doesn't fit on a page at\n // all. break before it anyway if it's an or , otherwise\n // attempt to split.\n if (keepTogether(el)) {\n breakAtElement(el);\n } else {\n splitElement(el);\n }\n }\n else {\n splitElement(el);\n }\n }\n else if (el.nodeType == 3 /* Text */ && pageHeight) {\n splitText(el, isFirst);\n isFirst = false;\n }\n }\n adjust = saveAdjust;\n }\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 /* comment */ ||\n first.nodeType == 8 /* processing instruction */) {\n return true;\n }\n if (first.nodeType == 3 /* text */) {\n // if whitespace only we can probably consider it's first\n return !/\\S/.test(first.data);\n }\n }\n return false;\n }\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\n // If we break page in a Kendo Grid, repeat its header. This ugly hack is\n // necessary because a scrollable grid will keep the header in a separate\n // element from its content.\n //\n // XXX: This is likely to break as soon as the widget HTML is modified.\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\"); // that's the
    on next page!\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\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 \" +\n margin.right + \"px \" +\n margin.bottom + \"px \" +\n margin.left + \"px\"),\n\n // allow absolutely positioned elements to be relative to current page\n position : \"relative\",\n\n // without the following we might affect layout of subsequent pages\n height : pageHeight ? (pageHeight + \"px\") : \"auto\",\n overflow : pageHeight || pageWidth ? \"hidden\" : \"visible\",\n clear : \"both\"\n });\n\n // debug\n // $(\"
    \").css({\n // position : \"absolute\",\n // left : margin.left,\n // top : margin.top,\n // width : pageWidth,\n // height : pageHeight,\n // boxSizing : \"border-box\",\n // background: \"rgba(255, 255, 0, 0.5)\"\n // //border : \"1px solid red\"\n // }).appendTo(page);\n\n if (options && options.pageClassName) {\n page.className = options.pageClassName;\n }\n pages.push(page);\n return page;\n }\n\n function fallsOnMargin(thing) {\n var box = thing.getBoundingClientRect();\n if (box.width === 0 || box.height === 0) {\n // I'd say an element with dimensions zero fits on current page.\n return 0;\n }\n var top = copy.getBoundingClientRect().top;\n var available = pageHeight - adjust;\n return (box.height > available) ? 3\n : (box.top - top > available) ? 1\n : (box.bottom - top > available) ? 2\n : 0;\n }\n\n function splitText(node, isFirst) {\n if (!/\\S/.test(node.data)) {\n return;\n }\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; // the whole text fits on current page\n }\n\n var nextnode = node;\n if (fall == 1) {\n // starts on next page, break before anyway.\n if (isFirst) {\n // avoid leaving an empty

    ,

  • , etc. on previous page.\n breakAtElement(node.parentNode);\n } else {\n breakAtElement(node);\n }\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\n if (!/\\S/.test(range.toString()) && isFirst) {\n // avoid leaving an empty

    ,

  • , etc. on previous page.\n breakAtElement(node.parentNode);\n } else {\n // This is only needed for IE, but it feels cleaner to do it anyway. Without\n // it, IE will truncate a very long text (playground/pdf-long-text-2.html).\n nextnode = node.splitText(range.endOffset);\n\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\n splitText(nextnode);\n }\n\n function preventBulletOnListItem(el) {\n // set a hint on continued LI elements, to tell the\n // renderer not to draw the bullet again.\n // https://github.com/telerik/kendo-ui-core/issues/2732\n var li = closest(el, \"li\");\n if (li) {\n li.setAttribute(\"kendo-no-bullet\", \"1\");\n preventBulletOnListItem(li.parentNode);\n }\n }\n }\n\n return promise;\n }\n\n // This is needed for the Spreadsheet print functionality. Since\n // there we only need to draw text, this cuts through the ceremony\n // of drawDOM/renderElement and renders the text node directly.\n function drawText(element) {\n var group = new Group();\n nodeInfo._clipbox = false;\n nodeInfo._matrix = Matrix.unit();\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n pushNodeInfo(element, getComputedStyle$1(element), group);\n if (element.firstChild.nodeType == 3 /* Text */) {\n // avoid the penalty of renderElement\n renderText(element, element.firstChild, group);\n } else {\n _renderElement(element, group);\n }\n popNodeInfo();\n return group;\n }\n\n var parseBackgroundImage = (function(){\n var tok_linear_gradient = /^((-webkit-|-moz-|-o-|-ms-)?linear-gradient\\s*)\\(/;\n //var tok_radial_gradient = /^((-webkit-|-moz-|-o-|-ms-)?radial-gradient\\s*)\\(/;\n var tok_percent = /^([-0-9.]+%)/;\n var tok_length = /^([-0-9.]+px)/;\n var tok_keyword = /^(left|right|top|bottom|to|center)\\W/;\n var tok_angle = /^([-0-9.]+(deg|grad|rad|turn)|0)/;\n var tok_whitespace = /^(\\s+)/;\n var tok_popen = /^(\\()/;\n var tok_pclose = /^(\\))/;\n var tok_comma = /^(,)/;\n var tok_url = /^(url)\\(/;\n var tok_content = /^(.*?)\\)/;\n\n var cache1 = {}, cache2 = {};\n\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\n function read_stop() {\n var color = kendo.parseColor(input, true);\n var length, percent;\n if (color) {\n var match =\n /^#[0-9a-f]+/i.exec(input) ||\n /^rgba?\\(.*?\\)/i.exec(input) ||\n /^..*?\\b/.exec(input); // maybe named color\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 { color: color, length: length, 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\n if (read(tok_popen)) {\n // 1. [ || to , ]?\n angle = read(tok_angle);\n if (angle == \"0\") {\n angle = \"0deg\"; // Edge\n }\n if (angle) {\n angle = parseAngle(angle);\n read(tok_comma);\n }\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\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\n // 2. color stops\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\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\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 { type: \"url\", url: url };\n }\n }\n\n var tok;\n\n if ((tok = read(tok_linear_gradient))) {\n tok = read_linear_gradient(tok);\n }\n else if ((tok = read(tok_url))) {\n tok = read_url();\n }\n\n return (cache1[orig] = tok || { type: \"none\" });\n }\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\n var splitProperty = (function(){\n var cache = {};\n return function(input, separator) {\n if (!separator) {\n separator = /^\\s*,\\s*/;\n }\n\n var cacheKey = input + separator;\n\n if (hasOwnProperty(cache, cacheKey)) {\n return cache[cacheKey];\n }\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\n function looking_at(rx) {\n return (m = rx.exec(input.substr(pos)));\n }\n\n function trim(str) {\n return str.replace(/^\\s+|\\s+$/g, \"\");\n }\n\n while (pos < input.length) {\n if (!in_string && looking_at(/^[\\(\\[\\{]/)) {\n in_paren++;\n pos++;\n }\n else if (!in_string && looking_at(/^[\\)\\]\\}]/)) {\n in_paren--;\n pos++;\n }\n else if (!in_string && looking_at(/^[\\\"\\']/)) {\n in_string = m[0];\n pos++;\n }\n else if (in_string == \"'\" && looking_at(/^\\\\\\'/)) {\n pos += 2;\n }\n else if (in_string == '\"' && looking_at(/^\\\\\\\"/)) {\n pos += 2;\n }\n else if (in_string == \"'\" && looking_at(/^\\'/)) {\n in_string = false;\n pos++;\n }\n else if (in_string == '\"' && looking_at(/^\\\"/)) {\n in_string = false;\n pos++;\n }\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 }\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\n var getFontURL = (function(cache){\n return function(el){\n // XXX: for IE we get here the whole cssText of the rule,\n // because the computedStyle.src is empty. Next time we need\n // to fix these regexps we better write a CSS parser. :-\\\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\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\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 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 // Internet Explorer\n // XXX: this is gross. should work though for valid CSS.\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: // CSSImportRule\n doStylesheet(r.styleSheet);\n break;\n case 5: // CSSFontFaceRule\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 // We get full resolved absolute URLs in Chrome, but sadly\n // not in Firefox.\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\"); // it's quoted\n if (bold) {\n name += \"|bold\";\n }\n if (italic) {\n name += \"|italic\";\n }\n result[name] = url;\n });\n }\n }\n\n function hasOwnProperty(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n }\n\n function getCounter(name) {\n name = \"_counter_\" + name;\n return nodeInfo[name];\n }\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\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\n function resetCounter(name, val) {\n name = \"_counter_\" + name;\n nodeInfo[name] = val == null ? 0 : val;\n }\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\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\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\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\n function cacheImages(elements, 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\n elements.forEach(function dive(element){\n if (/^img$/i.test(element.tagName)) {\n add(element.src);\n }\n parseBackgroundImage(\n getPropertyValue(\n getComputedStyle$1(element), \"background-image\"\n )\n ).forEach(function(bg){\n if (bg.type == \"url\") {\n add(bg.url);\n }\n });\n\n if (element.children) {\n slice$1$1(element.children).forEach(dive);\n }\n });\n\n var count = urls.length;\n function next() {\n if (--count <= 0) {\n // Even though we cached them, they simply won't be available immediately in the newly\n // created DOM. Previously we'd allow a 10ms timeout, but that's arbitrary and clearly\n // not working in all cases (https://github.com/telerik/kendo/issues/5399), so this\n // function will wait for their .complete attribute.\n whenImagesAreActuallyLoaded(elements, 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\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\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\n if (createsStackingContext(style)) {\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n }\n }\n\n function popNodeInfo() {\n nodeInfo = Object.getPrototypeOf(nodeInfo);\n }\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\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\n function createsStackingContext(style) {\n function prop(name) { return getPropertyValue(style, name); }\n if (prop(\"transform\") != \"none\" ||\n prop(\"position\") != \"static\" ||\n prop(\"z-index\") != \"auto\" ||\n prop(\"opacity\") < 1) {\n return true;\n }\n }\n\n function getComputedStyle$1(element, pseudoElt) {\n return window.getComputedStyle(element, pseudoElt || null);\n }\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\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\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\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\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({ x: r[0], 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\n function innerBox(box, prop, element) {\n var style, wt, wr, wb, wl;\n if (typeof prop == \"string\") {\n style = getComputedStyle$1(element);\n wt = parseFloat(getPropertyValue(style, prop.replace(\"*\", \"top\")));\n wr = parseFloat(getPropertyValue(style, prop.replace(\"*\", \"right\")));\n wb = parseFloat(getPropertyValue(style, prop.replace(\"*\", \"bottom\")));\n wl = parseFloat(getPropertyValue(style, prop.replace(\"*\", \"left\")));\n }\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\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\n function radiansToDegrees(radians) {\n return ((180 * radians) / Math.PI) % 360;\n }\n\n function parseAngle(angle) {\n var num = parseFloat(angle);\n if (/grad$/.test(angle)) {\n return Math.PI * num / 200;\n }\n else if (/rad$/.test(angle)) {\n return num;\n }\n else if (/turn$/.test(angle)) {\n return Math.PI * num * 2;\n }\n else if (/deg$/.test(angle)) {\n return Math.PI * num / 180;\n }\n }\n\n function setTransform$1(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\n function setClipping(shape, clipPath) {\n shape.clip(clipPath);\n }\n\n function addArcToPath(path, x, y, options) {\n var points = new Arc$2([ x, y ], options).curvePoints(), i = 1;\n while (i < points.length) {\n path.curveTo(points[i++], points[i++], points[i++]);\n }\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\n function adjustBorderRadiusForBox(box, rTL, rTR, rBR, rBL) {\n // adjust border radiuses such that the sum of adjacent\n // radiuses is not bigger than the length of the side.\n // seems the correct algorithm is variant (3) from here:\n // http://www.w3.org/Style/CSS/Tracker/issues/29?changelog\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\n var f = Math.min(\n box.width / (tl_x + tr_x),\n box.height / (tr_y + br_y),\n box.width / (br_x + bl_x),\n box.height / (bl_y + tl_y)\n );\n\n if (f < 1) {\n tl_x *= f; tl_y *= f;\n tr_x *= f; tr_y *= f;\n br_x *= f; br_y *= f;\n bl_x *= f; bl_y *= f;\n }\n\n return {\n tl: { x: tl_x, y: tl_y },\n tr: { x: tr_x, y: tr_y },\n br: { x: br_x, y: br_y },\n bl: { x: bl_x, y: bl_y }\n };\n }\n\n function elementRoundBox(element, box, type) {\n var style = getComputedStyle$1(element);\n\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\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; rTL.y -= bt.width;\n rTR.x -= br.width; rTR.y -= bt.width;\n rBR.x -= br.width; rBR.y -= bb.width;\n rBL.x -= bl.width; 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; rTL.y -= pt;\n rTR.x -= pr; rTR.y -= pt;\n rBR.x -= pr; rBR.y -= pb;\n rBL.x -= pl; rBL.y -= pb;\n }\n }\n\n if (typeof type == \"number\") {\n rTL.x -= type; rTL.y -= type;\n rTR.x -= type; rTR.y -= type;\n rBR.x -= type; rBR.y -= type;\n rBL.x -= type; rBL.y -= type;\n }\n\n return roundBox(box, rTL, rTR, rBR, rBL);\n }\n\n // Create a drawing.Path for a rounded rectangle. Receives the\n // bounding box and the border-radiuses in CSS order (top-left,\n // top-right, bottom-right, bottom-left). The radiuses must be\n // objects containing x (horiz. radius) and y (vertical radius).\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({ fill: null, stroke: null });\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\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\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 }\n else if ((m = /^\\s*counter\\((.*?)\\)\\s*$/.exec(el))) {\n tmp = splitProperty(m[1]);\n result.push(displayCounter(tmp[0], tmp[1]));\n }\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 }\n else if ((m = /^\\s*attr\\((.*?)\\)\\s*$/.exec(el))) {\n result.push(element.getAttribute(m[1]) || \"\");\n }\n else {\n result.push(el);\n }\n });\n return result.join(\"\");\n }\n\n function getCssText(style) {\n if (style.cssText) {\n return style.cssText;\n }\n // Status: NEW. Report year: 2002. Current year: 2014.\n // Nice played, Mozillians.\n // https://bugzilla.mozilla.org/show_bug.cgi?id=137687\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\n function _renderWithPseudoElements(element, group) {\n if (element.tagName == KENDO_PSEUDO_ELEMENT) {\n _renderElement(element, group);\n return;\n }\n var fake = [];\n function pseudo(kind, place) {\n var style = getComputedStyle$1(element, kind), content = style.content;\n updateCounters(style);\n if (content && content != \"normal\" && content != \"none\" && style.width != \"0px\") {\n var psel = element.ownerDocument.createElement(KENDO_PSEUDO_ELEMENT);\n psel.style.cssText = getCssText(style);\n psel.textContent = evalPseudoElementContent(element, content);\n element.insertBefore(psel, place);\n fake.push(psel);\n }\n }\n pseudo(\":before\", element.firstChild);\n pseudo(\":after\", null);\n if (fake.length > 0) {\n var saveClass = element.className;\n element.className += \" kendo-pdf-hide-pseudo-elements\";\n _renderElement(element, group);\n element.className = saveClass;\n fake.forEach(function(el){ element.removeChild(el); });\n } else {\n _renderElement(element, group);\n }\n }\n\n function _renderElement(element, group) {\n var style = getComputedStyle$1(element);\n\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\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\n var dir = getPropertyValue(style, \"direction\");\n\n var backgroundColor = getPropertyValue(style, \"background-color\");\n backgroundColor = parseColor$1(backgroundColor);\n\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\n // IE shrinks the text with text-overflow: ellipsis,\n // apparently because the returned bounding box for the range\n // is limited to the visible area minus space for the dots,\n // instead of being the full width of the text.\n //\n // https://github.com/telerik/kendo/issues/5232\n // https://github.com/telerik/kendo-ui-core/issues/1868\n //\n // We have to test it here rather than in renderText because\n // text-overflow: ellipsis could be set on a parent element (not\n // necessarily the one containing the text); in this case,\n // getComputedStyle(elementWithTheText) will return \"clip\", not\n // \"ellipsis\" (which is probably a bug, but oh well...)\n var textOverflow, saveTextOverflow;\n if (microsoft) {\n textOverflow = style.textOverflow; // computed style\n if (textOverflow == \"ellipsis\") {\n saveTextOverflow = element.style.textOverflow; // own style.\n element.style.textOverflow = \"clip\";\n }\n }\n\n if (browser.msie && browser.version < 10) {\n // IE9 hacks. getPropertyValue won't return the correct\n // value. Sucks that we have to do it here, I'd prefer to\n // move it in getPropertyValue, but we don't have the\n // element.\n backgroundPosition = splitProperty(element.currentStyle.backgroundPosition);\n }\n\n var innerbox = innerBox(element.getBoundingClientRect(), \"border-*-width\", element);\n\n // CSS \"clip\" property - if present, replace the group with a\n // new one which is clipped. This must happen before drawing\n // the borders and background.\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()\n .moveTo(left, top)\n .lineTo(right, top)\n .lineTo(right, bottom)\n .lineTo(left, bottom)\n .close();\n setClipping(tmp, clipPath);\n group.append(tmp);\n group = tmp;\n updateClipbox(clipPath);\n }\n })();\n\n var boxes, i, cells;\n var display = getPropertyValue(style, \"display\");\n\n if (display == \"table-row\") {\n // because of rowspan/colspan, we shouldn't draw background of table row elements on the\n // box given by its getBoundingClientRect, because if we do we risk overwritting a\n // previously rendered cell. https://github.com/telerik/kendo/issues/4881\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 // Workaround the missing borders in Chrome! getClientRects() boxes contains values\n // rounded to integer. getBoundingClientRect() appears to work fine. We still need\n // getClientRects() to support cases where there are more boxes (continued inline\n // elements that might have border/background).\n boxes = [ element.getBoundingClientRect() ];\n }\n }\n\n // This function workarounds another Chrome bug, where boxes returned for a table with\n // border-collapse: collapse will overlap the table border. Our rendering is not perfect in\n // such case anyway, but with this is better than without it.\n boxes = adjustBoxes(boxes);\n\n for (i = 0; i < boxes.length; ++i) {\n drawOneBox(boxes[i], i === 0, i == boxes.length - 1);\n }\n\n // Render links as separate groups. We can't use boxes returned by element's getClientRects\n // because if display type is \"inline\" (default for ), boxes will not include the height of\n // images inside. https://github.com/telerik/kendo-ui-core/issues/3359\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$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\n if (boxes.length > 0 && display == \"list-item\" && !element.getAttribute(\"kendo-no-bullet\")) {\n drawBullet(boxes[0]);\n }\n\n // overflow: hidden/auto - if present, replace the group with\n // a new one clipped by the inner box.\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\n if (!maybeRenderWidget(element, group)) {\n renderContents(element, group);\n }\n\n if (microsoft && textOverflow == \"ellipsis\") {\n element.style.textOverflow = saveTextOverflow;\n }\n\n return group; // only utility functions after this line.\n\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 // check if we need to adjust\n if (tableBorderLeft === 0 && tableBorderTop === 0) {\n return boxes; // nope\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$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\n // this function will be called to draw each border. it\n // draws starting at origin and the resulted path must be\n // translated/rotated to be placed in the proper position.\n //\n // arguments are named as if it draws the top border:\n //\n // - `len` the length of the edge\n // - `Wtop` the width of the edge (i.e. border-top-width)\n // - `Wleft` the width of the left edge (border-left-width)\n // - `Wright` the width of the right edge\n // - `rl` and `rl` -- the border radius on the left and right\n // (objects containing x and y, for horiz/vertical radius)\n // - `transform` -- transformation to apply\n //\n function drawEdge(color, len, Wtop, Wleft, Wright, rl, rr, transform$$1) {\n if (Wtop <= 0) {\n return;\n }\n\n var path, edge = new Group();\n setTransform$1(edge, transform$$1);\n group.append(edge);\n\n sanitizeRadius(rl);\n sanitizeRadius(rr);\n\n // draw main border. this is the area without the rounded corners\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)\n .lineTo(len - (rr.x ? Math.max(rr.x, Wright) : 0), 0)\n .lineTo(len - Math.max(rr.x, Wright), Wtop)\n .lineTo(Math.max(rl.x, Wleft), Wtop)\n .close();\n\n if (rl.x) {\n drawRoundCorner(Wleft, rl, [ -1, 0, 0, 1, rl.x, 0 ]);\n }\n\n if (rr.x) {\n drawRoundCorner(Wright, rr, [ 1, 0, 0, 1, len - rr.x, 0 ]);\n }\n\n // draws one round corner, starting at origin (needs to be\n // translated/rotated to be placed properly).\n function drawRoundCorner(Wright, r, transform$$1) {\n var angle = Math.PI/2 * Wright / (Wright + Wtop);\n\n // not sanitizing this one, because negative values\n // are useful to fill the box correctly.\n var ri = {\n x: r.x - Wright,\n y: r.y - Wtop\n };\n\n var path = new Path({\n fill: { color: color },\n stroke: null\n }).moveTo(0, 0);\n\n setTransform$1(path, transform$$1);\n\n addArcToPath(path, 0, r.y, {\n startAngle: -90,\n endAngle: -radiansToDegrees(angle),\n radiusX: r.x,\n radiusY: r.y\n });\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 }\n else if (ri.x > 0) {\n path.lineTo(ri.x, Wtop)\n .lineTo(0, Wtop);\n }\n else {\n path.lineTo(ri.x, Wtop)\n .lineTo(ri.x, 0);\n }\n\n edge.append(path.close());\n }\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\n if (backgroundColor) {\n var path = new Path({\n fill: { color: backgroundColor.toCssRgba() },\n stroke: null\n });\n path.moveTo(box.left, box.top)\n .lineTo(box.right, box.top)\n .lineTo(box.right, box.bottom)\n .lineTo(box.left, box.bottom)\n .close();\n background.append(path);\n }\n\n for (var i = backgroundImage.length; --i >= 0;) {\n drawOneBackground(\n background, box,\n backgroundImage[i],\n backgroundRepeat[i % backgroundRepeat.length],\n backgroundPosition[i % backgroundPosition.length],\n backgroundOrigin[i % backgroundOrigin.length],\n backgroundSize[i % backgroundSize.length]\n );\n }\n }\n\n function drawOneBackground(group, box, background, backgroundRepeat, backgroundPosition, backgroundOrigin, backgroundSize) {\n if (!background || (background == \"none\")) {\n return;\n }\n\n if (background.type == \"url\") {\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\n function drawBackgroundImage(group, box, img_width, img_height, renderBG) {\n var aspect_ratio = img_width / img_height, f;\n\n // for background-origin: border-box the box is already appropriate\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\n if (!/^\\s*auto(\\s+auto)?\\s*$/.test(backgroundSize)) {\n if (backgroundSize == \"contain\") {\n f = Math.min(orgBox.width / img_width,\n orgBox.height / img_height);\n img_width *= f;\n img_height *= f;\n }\n else if (backgroundSize == \"cover\") {\n f = Math.max(orgBox.width / img_width,\n orgBox.height / img_height);\n img_width *= f;\n img_height *= f;\n }\n else {\n var size = backgroundSize.split(/\\s+/g);\n // compute width\n if (/%$/.test(size[0])) {\n img_width = orgBox.width * parseFloat(size[0]) / 100;\n } else {\n img_width = parseFloat(size[0]);\n }\n // compute height\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\n var pos = String(backgroundPosition);\n\n // IE sometimes reports single-word positions\n // https://github.com/telerik/kendo-ui-core/issues/2786\n //\n // it seems to switch to percentages when the horizontal\n // position is not \"center\", therefore we don't handle\n // multi-word cases here. All other browsers return\n // percentages or pixels instead of keywords. At least\n // for now...\n switch (pos) {\n case \"bottom\" : pos = \"50% 100%\"; break;\n case \"top\" : pos = \"50% 0\"; break;\n case \"left\" : pos = \"0 50%\"; break;\n case \"right\" : pos = \"100% 50%\"; break;\n case \"center\" : pos = \"50% 50%\"; break;\n }\n\n pos = pos.split(/\\s+/);\n if (pos.length == 1) {\n pos[1] = \"50%\";\n }\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\n var rect = new Rect([ orgBox.left + pos[0], orgBox.top + pos[1] ], [ img_width, img_height ]);\n\n // XXX: background-repeat could be implemented more\n // efficiently as a fill pattern (at least for PDF\n // output, probably SVG too).\n\n function rewX() {\n while (rect.origin.x > box.left) {\n rect.origin.x -= img_width;\n }\n }\n\n function rewY() {\n while (rect.origin.y > box.top) {\n rect.origin.y -= img_height;\n }\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\n if (backgroundRepeat == \"no-repeat\") {\n renderBG(group, rect);\n }\n else if (backgroundRepeat == \"repeat-x\") {\n rewX();\n repeatX();\n }\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 }\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\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\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\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\n switch (listStyleType) {\n case \"circle\":\n case \"disc\":\n case \"square\":\n _drawBullet(function(bullet){\n // XXX: the science behind these values is called \"trial and error\".\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\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\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\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\n // draws a single border box\n function drawOneBox(box, isFirst, isLast) {\n if (box.width === 0 || box.height === 0) {\n return;\n }\n\n drawBackground(box);\n\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\n // The most general case is that the 4 borders have different widths and border\n // radiuses. The way that is handled is by drawing 3 Paths for each border: the\n // straight line, and two round corners which represent half of the entire rounded\n // corner. To simplify code those shapes are drawed at origin (by the drawEdge\n // function), then translated/rotated into the right position.\n //\n // However, this leads to poor results due to rounding in the simpler cases where\n // borders are straight lines. Therefore we handle a few such cases separately with\n // straight lines. C^wC^wC^w -- nope, scratch that. poor rendering was because of a bug\n // in Chrome (getClientRects() returns rounded integer values rather than exact floats.\n // web dev is still a ghetto.)\n\n // first, just in case there is no border...\n if (top.width === 0 && left.width === 0 && right.width === 0 && bottom.width === 0) {\n return;\n }\n\n // START paint borders\n // if all borders have equal colors...\n if (top.color == right.color && top.color == bottom.color && top.color == left.color) {\n\n // if same widths too, we can draw the whole border by stroking a single path.\n if (top.width == right.width && top.width == bottom.width && top.width == left.width)\n {\n if (shouldDrawLeft && shouldDrawRight) {\n // reduce box by half the border width, so we can draw it by stroking.\n box = innerBox(box, top.width/2);\n\n // adjust the border radiuses, again by top.width/2, and make the path element.\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\n // if border radiuses are zero and widths are at most one pixel, we can again use simple\n // paths.\n if (rTL0.x === 0 && rTR0.x === 0 && rBR0.x === 0 && rBL0.x === 0) {\n // alright, 1.9px will do as well. the difference in color blending should not be\n // noticeable.\n if (top.width < 2 && left.width < 2 && right.width < 2 && bottom.width < 2) {\n // top border\n if (top.width > 0) {\n group.append(\n new Path({\n stroke: { width: top.width, color: top.color }\n })\n .moveTo(box.left, box.top + top.width/2)\n .lineTo(box.right, box.top + top.width/2)\n );\n }\n\n // bottom border\n if (bottom.width > 0) {\n group.append(\n new Path({\n stroke: { width: bottom.width, color: bottom.color }\n })\n .moveTo(box.left, box.bottom - bottom.width/2)\n .lineTo(box.right, box.bottom - bottom.width/2)\n );\n }\n\n // left border\n if (shouldDrawLeft) {\n group.append(\n new Path({\n stroke: { width: left.width, color: left.color }\n })\n .moveTo(box.left + left.width/2, box.top)\n .lineTo(box.left + left.width/2, box.bottom)\n );\n }\n\n // right border\n if (shouldDrawRight) {\n group.append(\n new Path({\n stroke: { width: right.width, color: right.color }\n })\n .moveTo(box.right - right.width/2, box.top)\n .lineTo(box.right - right.width/2, box.bottom)\n );\n }\n\n return;\n }\n }\n // END paint borders\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\n // top border\n drawEdge(top.color,\n box.width, top.width, left.width, right.width,\n rTL, rTR,\n [ 1, 0, 0, 1, box.left, box.top ]);\n\n // bottom border\n drawEdge(bottom.color,\n box.width, bottom.width, right.width, left.width,\n rBR, rBL,\n [ -1, 0, 0, -1, box.right, box.bottom ]);\n\n // for left/right borders we need to invert the border-radiuses\n function inv(p) {\n return { x: p.y, y: p.x };\n }\n\n // left border\n drawEdge(left.color,\n box.height, left.width, bottom.width, top.width,\n inv(rBL), inv(rTL),\n [ 0, -1, 1, 0, box.left, box.bottom ]);\n\n // right border\n drawEdge(right.color,\n box.height, right.width, top.width, bottom.width,\n inv(rTR), inv(rBR),\n [ 0, 1, -1, 0, box.right, box.top ]);\n }\n }\n\n function gradientRenderer(gradient) {\n return function(group, rect) {\n var width = rect.width(), height = rect.height();\n\n switch (gradient.type) {\n case \"linear\":\n\n // figure out the angle.\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\": case \"left top\":\n angle = -Math.atan2(height, width);\n break;\n case \"top right\": case \"right top\":\n angle = Math.atan2(height, width);\n break;\n case \"bottom left\": case \"left bottom\":\n angle = Math.PI + Math.atan2(height, width);\n break;\n case \"bottom right\": case \"right bottom\":\n angle = Math.PI - Math.atan2(height, width);\n break;\n }\n\n if (gradient.reverse) {\n angle -= Math.PI;\n }\n\n // limit the angle between 0..2PI\n angle %= 2 * Math.PI;\n if (angle < 0) {\n angle += 2 * Math.PI;\n }\n\n // compute gradient's start/end points. here len is the length of the gradient line\n // and x,y is the end point relative to the center of the rectangle in conventional\n // (math) axis direction.\n\n // this is the original (unscaled) length of the gradient line. needed to deal with\n // absolutely positioned color stops. formula from the CSS spec:\n // http://dev.w3.org/csswg/css-images-3/#linear-gradient-syntax\n var pxlen = Math.abs(width * Math.sin(angle)) + Math.abs(height * Math.cos(angle));\n\n // The math below is pretty simple, but it took a while to figure out. We compute x\n // and y, the *end* of the gradient line. However, we want to transform them into\n // element-based coordinates (SVG's gradientUnits=\"objectBoundingBox\"). That means,\n // x=0 is the left edge, x=1 is the right edge, y=0 is the top edge and y=1 is the\n // bottom edge.\n //\n // A naive approach would use the original angle for these calculations. Say we'd\n // like to draw a gradient angled at 45deg in a 100x400 box. When we use\n // objectBoundingBox, the renderer will draw it in a 1x1 *square* box, and then\n // scale that to the desired dimensions. The 45deg angle will look more like 70deg\n // after scaling. SVG (http://www.w3.org/TR/SVG/pservers.html#LinearGradients) says\n // the following:\n //\n // When gradientUnits=\"objectBoundingBox\" and 'gradientTransform' is the\n // identity matrix, the normal of the linear gradient is perpendicular to the\n // gradient vector in object bounding box space (i.e., the abstract coordinate\n // system where (0,0) is at the top/left of the object bounding box and (1,1) is\n // at the bottom/right of the object bounding box). When the object's bounding\n // box is not square, the gradient normal which is initially perpendicular to\n // the gradient vector within object bounding box space may render\n // non-perpendicular relative to the gradient vector in user space. If the\n // gradient vector is parallel to one of the axes of the bounding box, the\n // gradient normal will remain perpendicular. This transformation is due to\n // application of the non-uniform scaling transformation from bounding box space\n // to user space.\n //\n // which is an extremely long and confusing way to tell what I just said above.\n //\n // For this reason we need to apply the reverse scaling to the original angle, so\n // that when it'll finally be rendered it'll actually be at the desired slope. Now\n // I'll let you figure out the math yourself.\n\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\n // Because of the arctangent, our scaledAngle ends up between -PI/2..PI/2, possibly\n // losing the intended direction of the gradient. The following fixes it.\n if (angle > Math.PI/2 && angle <= 3*Math.PI/2) {\n x = -x;\n y = -y;\n }\n\n // compute the color stops.\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 // fix implicit offsets\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({ left: right, stop: stop });\n }\n return stop;\n });\n\n var start = [ 0.5 - x, 0.5 + y ];\n var end = [ 0.5 + x, 0.5 - y ];\n\n // finally, draw it.\n group.append(\n Path.fromRect(rect)\n .stroke(null)\n .fill(new LinearGradient({\n start : start,\n end : end,\n stops : stops,\n userSpace : false\n }))\n );\n break;\n case \"radial\":\n // XXX:\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\n function maybeRenderWidget(element, group) {\n var visual;\n\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\n if (!visual) {\n return false;\n }\n\n var wrap$$1 = new Group();\n wrap$$1.children.push(visual);\n\n var bbox = element.getBoundingClientRect();\n wrap$$1.transform(transform$1().translate(bbox.left, bbox.top));\n\n group.append(wrap$$1);\n\n return true;\n }\n\n function renderImage(element, url, group) {\n var box = getContentBox(element);\n var rect = new Rect([ box.left, box.top ], [ box.width, box.height ]);\n var image = new Image$1(url, rect);\n setClipping(image, elementRoundBox(element, box, \"content\"));\n group.append(image);\n }\n\n function zIndexSort(a, b) {\n var sa = getComputedStyle$1(a);\n var sb = getComputedStyle$1(b);\n var za = parseFloat(getPropertyValue(sa, \"z-index\"));\n var zb = parseFloat(getPropertyValue(sb, \"z-index\"));\n var pa = getPropertyValue(sa, \"position\");\n var pb = getPropertyValue(sb, \"position\");\n if (isNaN(za) && isNaN(zb)) {\n if ((/static|absolute/.test(pa)) && (/static|absolute/.test(pb))) {\n return 0;\n }\n if (pa == \"static\") {\n return -1;\n }\n if (pb == \"static\") {\n return 1;\n }\n return 0;\n }\n if (isNaN(za)) {\n return zb === 0 ? 0 : zb > 0 ? -1 : 1;\n }\n if (isNaN(zb)) {\n return za === 0 ? 0 : za > 0 ? 1 : -1;\n }\n return parseFloat(za) - parseFloat(zb);\n }\n\n function isFormField(element) {\n return /^(?:textarea|select|input)$/i.test(element.tagName);\n }\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\n function renderCheckbox(element, group) {\n var style = getComputedStyle$1(element);\n var color = getPropertyValue(style, \"color\");\n var box = element.getBoundingClientRect();\n if (element.type == \"checkbox\") {\n group.append(\n Path.fromRect(\n new Rect([ box.left+1, box.top+1 ],\n [ box.width-2, box.height-2 ])\n ).stroke(color, 1)\n );\n if (element.checked) {\n // fill a rectangle inside? looks kinda ugly.\n // group.append(\n // Path.fromRect(\n // new geo.Rect([ box.left+4, box.top+4 ],\n // [ box.width-8, box.height-8])\n // ).fill(color).stroke(null)\n // );\n\n // let's draw a checkmark instead. artistic, eh?\n group.append(\n new Path()\n .stroke(color, 1.2)\n .moveTo(box.left + 0.22 * box.width,\n box.top + 0.55 * box.height)\n .lineTo(box.left + 0.45 * box.width,\n box.top + 0.75 * box.height)\n .lineTo(box.left + 0.78 * box.width,\n box.top + 0.22 * box.width)\n );\n }\n } else {\n group.append(\n new Circle(\n 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)\n ).stroke(color, 1)\n );\n if (element.checked) {\n group.append(\n new Circle(\n 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)\n ).fill(color).stroke(null)\n );\n }\n }\n }\n\n function renderFormField(element, group) {\n var tag = element.tagName.toLowerCase();\n if (tag == \"input\" && (element.type == \"checkbox\" || element.type == \"radio\")) {\n return renderCheckbox(element, group);\n }\n var p = element.parentNode;\n var doc = element.ownerDocument;\n var el = doc.createElement(KENDO_PSEUDO_ELEMENT);\n var option;\n el.style.cssText = getCssText(getComputedStyle$1(element));\n if (tag == \"input\") {\n el.style.whiteSpace = \"pre\";\n }\n if (tag == \"select\" || tag == \"textarea\") {\n el.style.overflow = \"auto\";\n }\n if (tag == \"select\") {\n if (element.multiple) {\n for (var i = 0; i < element.options.length; ++i) {\n option = doc.createElement(KENDO_PSEUDO_ELEMENT);\n option.style.cssText = getCssText(getComputedStyle$1(element.options[i]));\n option.style.display = \"block\"; // IE9 messes up without this\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\n // must temporarily hide the original element, otherwise it\n // may affect layout of the fake element we want to render.\n element.style.display = \"none\";\n\n renderContents(el, group);\n element.style.display = \"\";\n p.removeChild(el);\n }\n\n function serializeSVG(element) {\n var serializer = new window.XMLSerializer();\n var xml = serializer.serializeToString(element);\n\n if (browser.mozilla && !(element.getAttribute(\"width\") && element.getAttribute(\"height\"))) {\n var doc = new window.DOMParser().parseFromString(xml, \"image/svg+xml\");\n var svg$$1 = doc.documentElement;\n var box = getContentBox(element);\n svg$$1.setAttribute(\"width\", box.width);\n svg$$1.setAttribute(\"height\", box.height);\n xml = serializer.serializeToString(svg$$1);\n }\n\n return xml;\n }\n\n function renderContents(element, group) {\n if (nodeInfo._stackingContext.element === element) {\n // the group that was set in pushNodeInfo might have\n // changed due to clipping/transforms, update it here.\n nodeInfo._stackingContext.group = group;\n }\n switch (element.tagName.toLowerCase()) {\n case \"img\":\n renderImage(element, element.src, group);\n break;\n\n case \"svg\":\n var xml = serializeSVG(element);\n var dataURL = \"data:image/svg+xml;base64,\" + (encodeBase64(xml));\n renderImage(element, dataURL, group);\n break;\n\n case \"canvas\":\n try {\n renderImage(element, element.toDataURL(\"image/png\"), group);\n } catch (ex) {\n // tainted; can't draw it, ignore.\n }\n break;\n\n case \"textarea\":\n case \"input\":\n case \"select\":\n renderFormField(element, group);\n break;\n\n default:\n var children = [], floats = [], positioned = [];\n for (var i = element.firstChild; i; i = i.nextSibling) {\n switch (i.nodeType) {\n case 3: // Text\n if (/\\S/.test(i.data)) {\n renderText(element, i, group);\n }\n break;\n case 1: // Element\n var style = getComputedStyle$1(i);\n var floating = getPropertyValue(style, \"float\");\n var position = getPropertyValue(style, \"position\");\n if (position != \"static\") {\n positioned.push(i);\n }\n else if (floating != \"none\") {\n floats.push(i);\n } else {\n children.push(i);\n }\n break;\n }\n }\n\n mergeSort(children, zIndexSort).forEach(function(el){ renderElement(el, group); });\n mergeSort(floats, zIndexSort).forEach(function(el){ renderElement(el, group); });\n mergeSort(positioned, zIndexSort).forEach(function(el){ renderElement(el, group); });\n }\n }\n\n function renderText(element, node, group) {\n if (emptyClipbox()) {\n return;\n }\n var style = getComputedStyle$1(element);\n\n if (parseFloat(getPropertyValue(style, \"text-indent\")) < -500) {\n // assume it should not be displayed. the slider's\n // draggable handle displays a Drag text for some reason,\n // having text-indent: -3333px.\n return;\n }\n\n var text = node.data;\n var start = 0;\n var end = text.search(/\\S\\s*$/) + 1;\n\n if (!end) {\n return; // whitespace-only node\n }\n\n var fontSize = getPropertyValue(style, \"font-size\");\n var lineHeight = getPropertyValue(style, \"line-height\");\n\n // simply getPropertyValue(\"font\") doesn't work in Firefox :-\\\n var font = [\n getPropertyValue(style, \"font-style\"),\n getPropertyValue(style, \"font-variant\"),\n getPropertyValue(style, \"font-weight\"),\n fontSize, // no need for line height here; it breaks layout in FF\n getPropertyValue(style, \"font-family\")\n ].join(\" \");\n\n fontSize = parseFloat(fontSize);\n lineHeight = parseFloat(lineHeight);\n\n if (fontSize === 0) {\n return;\n }\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\n // A line of 500px, with a font of 12px, contains an average of 80 characters, but since we\n // err, we'd like to guess a bigger number rather than a smaller one. Multiplying by 5\n // seems to be a good option.\n var estimateLineLength = element.getBoundingClientRect().width / fontSize * 5;\n if (estimateLineLength === 0) {\n estimateLineLength = 500;\n }\n\n // we'll maintain this so we can workaround bugs in Chrome's Range.getClientRects\n // https://github.com/telerik/kendo/issues/5740\n var prevLineBottom = null;\n\n var underline = nodeInfo[\"underline\"];\n var lineThrough = nodeInfo[\"line-through\"];\n var overline = nodeInfo[\"overline\"];\n var hasDecoration = underline || lineThrough || overline;\n\n // doChunk returns true when all text has been rendered\n while (!doChunk()) {}\n\n if (hasDecoration) {\n range.selectNode(node);\n slice$1$1(range.getClientRects()).forEach(decorate);\n }\n\n return; // only function declarations after this line\n\n function actuallyGetRangeBoundingRect(range) {\n // XXX: to be revised when this Chrome bug is fixed:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=612459\n if (microsoft || browser.chrome || browser.safari) {\n // Workaround browser bugs: IE and Chrome would sometimes\n // return 0 or 1-width rectangles before or after the main\n // one. https://github.com/telerik/kendo/issues/4674\n\n // Actually Chrome 50 got worse, since the rectangles can now have the width of a\n // full character, making it hard to tell whether it's a bogus rectangle or valid\n // selection location. The workaround is to ignore rectangles that fall on the\n // previous line. https://github.com/telerik/kendo/issues/5740\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; // bogus rectangle\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\n // Render a chunk of text, typically one line (but for justified text we render each word as\n // a separate Text object, because spacing is variable). Returns true when it finished the\n // current node. After each chunk it updates `start` to just after the last rendered\n // character.\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\n // Select a single character to determine the height of a line of text. The box.bottom\n // will be essential for us to figure out where the next line begins.\n range.setStart(node, start);\n range.setEnd(node, start + 1);\n box = actuallyGetRangeBoundingRect(range);\n\n // for justified text we must split at each space, because space has variable width.\n var found = false;\n if (isJustified || columnCount > 1) {\n pos = text.substr(start).search(/\\s/);\n if (pos >= 0) {\n // we can only split there if it's on the same line, otherwise we'll fall back\n // to the default mechanism (see findEOL below).\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\n if (!found) {\n // This code does three things: (1) it selects one line of text in `range`, (2) it\n // leaves the bounding rect of that line in `box` and (3) it returns the position\n // just after the EOL. We know where the line starts (`start`) but we don't know\n // where it ends. To figure this out, we select a piece of text and look at the\n // bottom of the bounding box. If it changes, we have more than one line selected\n // and should retry with a smaller selection.\n //\n // To speed things up, we first try to select all text in the node (`start` ->\n // `end`). If there's more than one line there, then select only half of it. And\n // so on. When we find a value for `end` that fits in one line, we try increasing\n // it (also in halves) until we get to the next line. The algorithm stops when the\n // right side of the bounding box does not change.\n //\n // One more thing to note is that everything happens in a single Text DOM node.\n // There's no other tags inside it, therefore the left/top coordinates of the\n // bounding box will not change.\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\n if (pos == start) {\n // if EOL is at the start, then no more text fits on this line. Skip the\n // remainder of this node entirely to avoid a stack overflow.\n return true;\n }\n start = pos;\n\n pos = range.toString().search(/\\s+$/);\n if (pos === 0) {\n return false; // whitespace only; we should not get here.\n }\n if (pos > 0) {\n // eliminate trailing whitespace\n range.setEnd(node, range.startOffset + pos);\n box = actuallyGetRangeBoundingRect(range);\n }\n }\n\n // another workaround for IE: if we rely on getBoundingClientRect() we'll overlap with the bullet for LI\n // elements. Calling getClientRects() and using the *first* rect appears to give us the correct location.\n // Note: not to be used in Chrome as it randomly returns a zero-width rectangle from the previous line.\n if (microsoft) {\n box = range.getClientRects()[0];\n }\n\n var str = range.toString();\n if (!/^(?:pre|pre-wrap)$/i.test(whiteSpace)) {\n // node with non-significant space -- collapse whitespace.\n str = str.replace(/\\s+/g, \" \");\n }\n else if (/\\t/.test(str)) {\n // with significant whitespace we need to do something about literal TAB characters.\n // There's no TAB glyph in a font so they would be rendered in PDF as an empty box,\n // and the whole text will stretch to fill the original width. The core PDF lib\n // does not have sufficient context to deal with it.\n\n // calculate the starting column here, since we initially discarded any whitespace.\n var cc = 0;\n for (pos = origStart; pos < range.startOffset; ++pos) {\n var code = text.charCodeAt(pos);\n if (code == 9) {\n // when we meet a TAB we must round up to the next tab stop.\n // in all browsers TABs seem to be 8 characters.\n cc += 8 - cc % 8;\n } else if (code == 10 || code == 13) {\n // just in case we meet a newline we must restart.\n cc = 0;\n } else {\n // ordinary character --> advance one column\n cc++;\n }\n }\n\n // based on starting column, replace any TAB characters in the string we actually\n // have to display with spaces so that they align to columns multiple of 8.\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\n if (!found) {\n prevLineBottom = box.bottom;\n }\n drawText(str, box);\n }\n\n function drawText(str, box) {\n // In IE the box height will be approximately lineHeight, while in\n // other browsers it'll (correctly) be the height of the bounding\n // box for the current text/font. Which is to say, IE sucks again.\n // The only good solution I can think of is to measure the text\n // ourselves and center the bounding 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\n // var path = new Path({ stroke: { color: \"red\" }});\n // path.moveTo(box.left, box.top)\n // .lineTo(box.right, box.top)\n // .lineTo(box.right, box.bottom)\n // .lineTo(box.left, box.bottom)\n // .close();\n // group.append(path);\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) { return l.toUpperCase(); });\n break;\n }\n\n var text = new TextRect(\n str, new Rect([ box.left, box.top ],\n [ box.width, box.height ]),\n {\n font: font,\n fill: { color: color }\n }\n );\n group.append(text);\n }\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({ stroke: {\n width: width,\n color: color\n }});\n\n ypos -= width;\n path.moveTo(box.left, ypos)\n .lineTo(box.right, ypos);\n group.append(path);\n }\n }\n }\n }\n\n function groupInStackingContext(element, group, zIndex) {\n var main;\n if (zIndex != \"auto\") {\n // use the current stacking context\n main = nodeInfo._stackingContext.group;\n zIndex = parseFloat(zIndex);\n } else {\n // normal flow — use given container. we still have to\n // figure out where should we insert this element with the\n // assumption that its z-index is zero, as the group might\n // already contain elements with higher z-index.\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\n var tmp = new Group();\n main.insert(i, tmp);\n tmp._dom_zIndex = zIndex;\n\n if (main !== group) {\n // console.log(\"Placing\", element, \"in\", nodeInfo._stackingContext.element, \"at position\", i, \" / \", a.length);\n // console.log(a.slice(i+1));\n\n // if (nodeInfo._matrix) {\n // tmp.transform(nodeInfo._matrix);\n // }\n if (nodeInfo._clipbox) {\n var m = nodeInfo._matrix.invert();\n var r = nodeInfo._clipbox.transformCopy(m);\n setClipping(tmp, Path.fromRect(r));\n // console.log(r);\n // tmp.append(Path.fromRect(r));\n // tmp.append(new Text(element.className || element.id, r.topLeft()));\n }\n }\n\n return tmp;\n }\n\n function renderElement(element, container) {\n var style = getComputedStyle$1(element);\n\n updateCounters(style);\n\n if (/^(style|script|link|meta|iframe|col|colgroup)$/i.test(element.tagName)) {\n return;\n }\n\n if (nodeInfo._clipbox == null) {\n return;\n }\n\n var opacity = parseFloat(getPropertyValue(style, \"opacity\"));\n var visibility = getPropertyValue(style, \"visibility\");\n var display = getPropertyValue(style, \"display\");\n\n if (opacity === 0 || visibility == \"hidden\" || display == \"none\") {\n return;\n }\n\n var tr = getTransform(style);\n var group;\n\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\n // XXX: remove at some point\n // group._pdfElement = element;\n // group.options._pdfDebug = \"\";\n // if (element.id) {\n // group.options._pdfDebug = \"#\" + element.id;\n // }\n // if (element.className) {\n // group.options._pdfDebug += \".\" + element.className.split(\" \").join(\".\");\n // }\n\n if (opacity < 1) {\n group.opacity(opacity * group.opacity());\n }\n\n pushNodeInfo(element, style, group);\n\n if (!tr) {\n _renderWithPseudoElements(element, group);\n }\n else {\n saveStyle(element, function(){\n // must clear transform, so getBoundingClientRect returns correct values.\n pleaseSetPropertyValue(element.style, \"transform\", \"none\", \"important\");\n\n // must also clear transitions, so correct values are returned *immediately*\n pleaseSetPropertyValue(element.style, \"transition\", \"none\", \"important\");\n\n // the presence of any transform makes it behave like it had position: relative,\n // because why not.\n // http://meyerweb.com/eric/thoughts/2011/09/12/un-fixing-fixed-elements-with-css-transforms/\n if (getPropertyValue(style, \"position\") == \"static\") {\n // but only if it's not already positioned. :-/\n pleaseSetPropertyValue(element.style, \"position\", \"relative\", \"important\");\n }\n\n // must translate to origin before applying the CSS\n // transformation, then translate back.\n var bbox = element.getBoundingClientRect();\n var x = bbox.left + tr.origin[0];\n var y = bbox.top + tr.origin[1];\n var m = [ 1, 0, 0, 1, -x, -y ];\n m = mmul(m, tr.matrix);\n m = mmul(m, [ 1, 0, 0, 1, x, y ]);\n m = setTransform$1(group, m);\n\n nodeInfo._matrix = nodeInfo._matrix.multiplyCopy(m);\n\n _renderWithPseudoElements(element, group);\n });\n }\n\n popNodeInfo();\n\n //drawDebugBox(element.getBoundingClientRect(), container);\n }\n\n // function drawDebugBox(box, group, color) {\n // var path = Path.fromRect(new geo.Rect([ box.left, box.top ], [ box.width, box.height ]));\n // if (color) {\n // path.stroke(color);\n // }\n // group.append(path);\n // }\n\n // function dumpTextNode(node) {\n // var txt = node.data.replace(/^\\s+/, \"\");\n // if (txt.length < 100) {\n // console.log(node.data.length + \": |\" + txt);\n // } else {\n // console.log(node.data.length + \": |\" + txt.substr(0, 50) + \"|...|\" + txt.substr(-50));\n // }\n // }\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, a1*b2 + b1*d2,\n c1*a2 + d1*c2, c1*b2 + d1*d2,\n e1*a2 + f1*c2 + e2, e1*b2 + f1*d2 + f2\n ];\n }\n\n var drawing = {\n \tsvg: svg$1,\n \tcanvas: canvas,\n \tutil: util,\n \tHasObservers: HasObservers,\n \tPathParser: PathParser,\n \tparsePath: parsePath,\n \tBaseNode: BaseNode,\n \tOptionsStore: OptionsStore,\n \tSurface: Surface,\n \tSurfaceFactory: SurfaceFactory,\n \texportImage: exportImage,\n \texportSVG: exportSVG,\n \tQuadNode: QuadNode,\n \tShapesQuadTree: ShapesQuadTree,\n \tElement: Element$1,\n \tCircle: Circle,\n \tArc: Arc,\n \tPath: Path,\n \tMultiPath: MultiPath,\n \tText: Text,\n \tImage: Image$1,\n \tGroup: Group,\n \tLayout: Layout,\n \tRect: Rect$2,\n \talign: align,\n \tvAlign: vAlign,\n \tstack: stack,\n \tvStack: vStack,\n \twrap: wrap,\n \tvWrap: vWrap,\n \tfit: fit,\n \tLinearGradient: LinearGradient,\n \tRadialGradient: RadialGradient,\n \tGradientStop: GradientStop,\n \tGradient: Gradient,\n \tAnimation: Animation,\n \tAnimationFactory: AnimationFactory,\n \tdrawDOM: drawDOM,\n \tdrawText: drawText,\n \tgetFontFaces: getFontFaces\n };\n\n kendo.deepExtend(kendo, {\n drawing: drawing,\n geometry: geometry\n });\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\n })(window.kendo.jQuery);\n\n (function($) {\n\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\n var TOOLTIP_TEMPLATE = '
    ' +\n '
    ' +\n '
    ';\n var TOOLTIP_CLOSE_TEMPLATE = '
    ';\n\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\n options = options || {};\n\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\n this._openPopupHandler = this._openPopup.bind(this);\n\n this.surface = surface;\n this._bindEvents();\n },\n\n options: {\n position: \"top\",\n showOn: \"mouseenter\",\n offset: 7,\n autoHide: true,\n hideDelay: 0,\n showAfter: 100\n },\n\n _bindEvents: function() {\n this._showHandler = this._showEvent.bind(this);\n this._surfaceLeaveHandler = this._surfaceLeave.bind(this);\n this._mouseleaveHandler = this._mouseleave.bind(this);\n this._mousemoveHandler = this._mousemove.bind(this);\n\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\n this.surface.element.on(\"mouseleave\" + NS, this._surfaceLeaveHandler);\n\n this.element.on(\"click\" + NS, \".k-tooltip-button\", this._hideClick.bind(this));\n this.element.on(\"mouseleave\" + NS, this._tooltipLeave.bind(this));\n },\n\n getPopup: function() {\n if (!this.popup) {\n this.popup = new kendo.ui.Popup(this.element, this.popupOptions);\n }\n\n return this.popup;\n },\n\n destroy: function() {\n var popup = this.popup;\n\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\n this.surface.element.off(\"mouseleave\" + NS, this._surfaceLeaveHandler);\n this.element.off(\"click\" + NS);\n this.element.off(\"mouseleave\" + NS);\n\n if (popup) {\n popup.destroy();\n delete this.popup;\n }\n delete this.popupOptions;\n\n clearTimeout(this._timeout);\n\n delete this.element;\n delete this.content;\n delete this.surface;\n },\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\n _tooltipShape: function(shape) {\n while (shape && !shape.options.tooltip) {\n shape = shape.parent;\n }\n return shape;\n },\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\n if (content) {\n this.content.html(content);\n return true;\n }\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\n bbox.origin.translate(offset.left, offset.top);\n if (surfaceOffset) {\n bbox.origin.translate(-surfaceOffset.x, -surfaceOffset.y);\n }\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\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\n show: function(shape, options) {\n this._show(shape, shape, deepExtend({}, this.options, this._tooltipOptions(shape.options.tooltip), options));\n },\n\n hide: function() {\n var popup = this.popup;\n var current = this._current;\n\n delete this._current;\n clearTimeout(this._showTimeout);\n if (popup && popup.visible() && current &&\n !this.surface.trigger(\"tooltipClose\", { element: current.shape, target: current.target, popup: popup })) {\n popup.close();\n }\n },\n\n _hideClick: function(e) {\n e.preventDefault();\n this.hide();\n },\n\n _show: function(target, shape, options, event, delay) {\n var current = this._current;\n\n clearTimeout(this._timeout);\n\n if (current && ((current.shape === shape && options.shared) || current.target === target)) {\n return;\n }\n\n clearTimeout(this._showTimeout);\n\n var popup = this.getPopup();\n\n if (!this.surface.trigger(\"tooltipOpen\", { element: shape, target: target, popup: popup }) &&\n this._updateContent(target, shape, options)) {\n\n this._autoHide(options);\n var elementSize = this._measure(options);\n\n if (popup.visible()) {\n popup.close(true);\n }\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\n if (delay) {\n this._showTimeout = setTimeout(this._openPopupHandler, options.showAfter || 0);\n } else {\n this._openPopup();\n }\n }\n },\n\n _openPopup: function() {\n var current = this._current;\n var position = current.position;\n\n this.getPopup().open(position.left, position.top);\n },\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\n if (!options.autoHide && !this._closeButton) {\n this.element.addClass(\"k-tooltip-closable\");\n this._closeButton = $(TOOLTIP_CLOSE_TEMPLATE).appendTo(this.element);\n }\n },\n\n _showEvent: function(e) {\n var shape = this._tooltipShape(e.element);\n\n if (shape) {\n var options = deepExtend({}, this.options, this._tooltipOptions(shape.options.tooltip));\n\n if (options && options.showOn == e.type) {\n this._show(e.element, shape, options, e.originalEvent, true);\n }\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\n this.element.css({\n width: defined(options.width) ? options.width : \"auto\",\n height: defined(options.height) ? options.height : \"auto\"\n });\n\n width = outerWidth(this.element);\n height = outerHeight(this.element);\n\n if (!visible) {\n popup.wrapper.hide();\n }\n\n return {\n width: width,\n height: height\n };\n },\n\n _mouseleave: function(e) {\n if (this.popup && !this._popupRelatedTarget(e.originalEvent)) {\n var tooltip = this;\n var current = tooltip._current;\n\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\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({ left: position.left, 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\n _popupRelatedTarget: function(e) {\n return e.relatedTarget && $(e.relatedTarget).closest(this.popup.wrapper).length;\n },\n\n _tooltipLeave: function() {\n var tooltip = this;\n var current = tooltip._current;\n if (current && current.options.autoHide) {\n tooltip._timeout = setTimeout(function() {\n tooltip.hide();\n }, current.options.hideDelay || 0);\n }\n }\n });\n\n kendo.drawing.SurfaceTooltip = SurfaceTooltip;\n\n })(window.kendo.jQuery);\n\n (function($) {\n\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\n kendo.support.svg = DrawingSurface.support.svg;\n kendo.support.canvas = DrawingSurface.support.canvas;\n\n var Surface = Widget.extend({\n init: function(element, options) {\n Widget.fn.init.call(this, element, {});\n\n this.options = deepExtend({}, this.options, options);\n\n this._instance = DrawingSurface.create(this.element[0], options);\n if (this._instance.translate) {\n this.translate = translate;\n }\n\n this._triggerInstanceHandler = this._triggerInstanceEvent.bind(this);\n this._bindHandler(\"click\");\n this._bindHandler(\"mouseenter\");\n this._bindHandler(\"mouseleave\");\n this._bindHandler(\"mousemove\");\n\n this._enableTracking();\n },\n\n options: {\n name: \"Surface\",\n tooltip: {}\n },\n\n events: [\n \"click\",\n \"mouseenter\",\n \"mouseleave\",\n \"mousemove\",\n \"resize\",\n \"tooltipOpen\",\n \"tooltipClose\"\n ],\n\n _triggerInstanceEvent: function(e) {\n this.trigger(e.type, e);\n },\n\n _bindHandler: function(event) {\n this._instance.bind(event, this._triggerInstanceHandler);\n },\n\n draw: function(element) {\n this._instance.draw(element);\n },\n\n clear: function() {\n if (this._instance) {\n this._instance.clear();\n }\n this.hideTooltip();\n },\n\n destroy: function() {\n if (this._instance) {\n this._instance.destroy();\n delete this._instance;\n }\n\n if (this._tooltip) {\n this._tooltip.destroy();\n delete this._tooltip;\n }\n\n Widget.fn.destroy.call(this);\n },\n\n exportVisual: function() {\n return this._instance.exportVisual();\n },\n\n eventTarget: function(e) {\n return this._instance.eventTarget(e);\n },\n\n showTooltip: function(shape, options) {\n if (this._tooltip) {\n this._tooltip.show(shape, options);\n }\n },\n\n hideTooltip: function() {\n if (this._tooltip) {\n this._tooltip.hide();\n }\n },\n\n suspendTracking: function() {\n this._instance.suspendTracking();\n this.hideTooltip();\n },\n\n resumeTracking: function() {\n this._instance.resumeTracking();\n },\n\n getSize: function() {\n return {\n width: this.element.width(),\n height: this.element.height()\n };\n },\n\n setSize: function(size) {\n this.element.css({\n width: size.width,\n height: size.height\n });\n\n this._size = size;\n this._instance.currentSize(size);\n this._resize();\n },\n\n _resize: function() {\n this._instance.currentSize(this._size);\n this._instance._resize();\n },\n\n _enableTracking: function() {\n if (kendo.ui.Popup) {\n this._tooltip = new draw.SurfaceTooltip(this, this.options.tooltip || {});\n }\n }\n });\n\n kendo.ui.plugin(Surface);\n\n Surface.create = function(element, options) {\n return new Surface(element, options);\n };\n\n kendo.drawing.Surface = Surface;\n\n function translate(offset) {\n this._instance.translate(offset);\n }\n\n })(window.kendo.jQuery);\n\n (function($) {\n\n var kendo = window.kendo;\n var drawing = kendo.drawing;\n var drawDOM = drawing.drawDOM;\n\n drawing.drawDOM = function(element, options) {\n return drawDOM($(element)[0], options);\n };\n\n // Aliases used by spreadsheet/print.js\n drawing.drawDOM.drawText = drawing.drawText;\n drawing.drawDOM.getFontFaces = drawing.getFontFaces;\n\n })(window.kendo.jQuery);\n\n var __meta__$R = {\n id: \"drawing\",\n name: \"Drawing API\",\n category: \"framework\",\n description: \"The Kendo UI low-level drawing API\",\n depends: [ \"core\", \"color\", \"popup\" ]\n };\n\n /***********************************************************************\n * WARNING: this file is auto-generated. If you change it directly,\n * your modifications will eventually be lost. The source code is in\n * `kendo-charts` repository, you should make your changes there and\n * run `src-modules/sync.sh` in this repository.\n */\n\n (function($) {\n /* eslint-disable space-before-blocks, space-before-function-paren, curly */\n\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 support = kendo.support;\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\n var deepExtend = kendo.deepExtend;\n var isFunction = kendo.isFunction;\n var __common_getter_js = kendo.getter;\n\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 ROUNDED_RECT = \"roundedRect\";\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 DEFAULT_SERIES_OPACITY = 1;\n\n var constants = {\n \tARC: ARC,\n \tAXIS_LABEL_CLICK: AXIS_LABEL_CLICK,\n \tBLACK: BLACK,\n \tBOTTOM: BOTTOM,\n \tCENTER: CENTER,\n \tCIRCLE: CIRCLE,\n \tCOORD_PRECISION: COORD_PRECISION,\n \tCROSS: CROSS,\n \tDATE: DATE,\n \tDEFAULT_FONT: DEFAULT_FONT,\n \tDEFAULT_HEIGHT: DEFAULT_HEIGHT,\n \tDEFAULT_PRECISION: DEFAULT_PRECISION,\n \tDEFAULT_WIDTH: DEFAULT_WIDTH,\n \tEND: END,\n \tFORMAT_REGEX: FORMAT_REGEX,\n \tHEIGHT: HEIGHT,\n \tHIGHLIGHT_ZINDEX: HIGHLIGHT_ZINDEX,\n \tINSIDE: INSIDE,\n \tLEFT: LEFT,\n \tMAX_VALUE: MAX_VALUE,\n \tMIN_VALUE: MIN_VALUE,\n \tNONE: NONE,\n \tNOTE_CLICK: NOTE_CLICK,\n \tNOTE_HOVER: NOTE_HOVER,\n \tNOTE_LEAVE: NOTE_LEAVE,\n \tOBJECT: OBJECT,\n \tOUTSIDE: OUTSIDE,\n \tRIGHT: RIGHT,\n \tROUNDED_RECT: ROUNDED_RECT,\n \tSTART: START,\n \tSTRING: STRING,\n \tTOP: TOP,\n \tTRIANGLE: TRIANGLE,\n \tVALUE: VALUE,\n \tWHITE: WHITE,\n \tWIDTH: WIDTH,\n \tX: X,\n \tY: Y,\n \tDEFAULT_SERIES_OPACITY: DEFAULT_SERIES_OPACITY\n };\n\n function isArray(value) {\n return Array.isArray(value);\n }\n\n function addClass(element, classes) {\n var classArray = isArray(classes) ? classes : [ classes ];\n\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\n var SPACE_REGEX = /\\s+/g;\n\n function removeClass(element, className) {\n if (element && element.className) {\n element.className = element.className.replace(className, \"\").replace(SPACE_REGEX, \" \");\n }\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\n for (var i = 0; i < path.segments.length; i++) {\n path.segments[i].anchor().round(0).translate(offset, offset);\n }\n\n return path;\n }\n\n function clockwise(angle1, angle2) {\n // True if angle2 is clockwise of angle1\n // assuming angles grow in clock-wise direction\n // (as in the pie and radar charts)\n return -angle1.x * angle2.y + angle1.y * angle2.x < 0;\n }\n\n function isNumber(value) {\n return typeof value === \"number\" && !isNaN(value);\n }\n\n function isString(value) {\n return typeof value === STRING;\n }\n\n function convertableToNumber(value) {\n return isNumber(value) || (isString(value) && isFinite(value));\n }\n\n function isObject(value) {\n return typeof value === \"object\";\n }\n\n function styleValue(value) {\n if (isNumber(value)) {\n return value + \"px\";\n }\n return value;\n }\n\n var SIZE_STYLES_REGEX = /width|height|top|left|bottom|right/i;\n\n function isSizeField(field) {\n return SIZE_STYLES_REGEX.test(field);\n }\n\n function elementStyles(element, styles) {\n var stylesArray = isString(styles) ? [ styles ] : styles;\n\n if (isArray(stylesArray)) {\n var result = {};\n var style = window.getComputedStyle(element);\n\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\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\n function getSpacing(value, defaultSpacing) {\n if (defaultSpacing === void 0) { defaultSpacing = 0; }\n\n var spacing = { top: 0, right: 0, bottom: 0, 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\n return spacing;\n }\n\n var current = {\n compile: function(template) {\n return template;\n }\n };\n\n var TemplateService = Class.extend({\n\n });\n\n TemplateService.register = function(userImplementation) {\n current = userImplementation;\n };\n\n TemplateService.compile = function(template) {\n return current.compile(template);\n };\n\n function getTemplate(options) {\n if (options === void 0) { 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\n return template;\n }\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\n return result;\n }\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\n var HashMap = function HashMap() {\n this._map = {};\n };\n\n HashMap.prototype.get = function get (name) {\n return this._map[this._key(name)];\n };\n\n HashMap.prototype.set = function set (name, value) {\n this._map[this._key(name)] = value;\n };\n\n HashMap.prototype._key = function _key (name) {\n return name instanceof Date ? name.getTime() : name;\n };\n\n function inArray(value, array) {\n if (array) {\n return array.indexOf(value) !== -1;\n }\n }\n\n function interpolateValue(start, end, progress) {\n return kendo.drawing.util.round(start + (end - start) * progress, COORD_PRECISION);\n }\n\n var TRIGGER = 'trigger';\n\n var InstanceObserver = Class.extend({\n init: function(observer, handlers) {\n this.observer = observer;\n this.handlerMap = deepExtend({}, this.handlerMap, handlers);\n },\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\n return isDefaultPrevented;\n },\n\n callObserver: function(fnName) {\n var arguments$1 = arguments;\n\n var args = [], len = arguments.length - 1;\n while ( len-- > 0 ) { args[ len ] = arguments$1[ len + 1 ]; }\n\n return this.observer[fnName].apply(this.observer, args);\n },\n\n requiresHandlers: function(names) {\n var this$1$1 = this;\n\n if (this.observer.requiresHandlers) {\n return this.observer.requiresHandlers(names);\n }\n\n for (var idx = 0; idx < names.length; idx++) {\n if (this$1$1.handlerMap[names[idx]]) {\n return true;\n }\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\n var browser = support.browser || {};\n\n function mousewheelDelta(e) {\n var delta = 0;\n\n if (e.wheelDelta) {\n delta = -e.wheelDelta / 120;\n\n if (browser.webkit) {\n // Webkit browsers scale the delta by twice the device resolution.\n // Possibly related to https://bugs.webkit.org/show_bug.cgi?id=196339\n //\n // Low device resolutions (e.g. zoom-out to 30%) also behave strangely.\n delta = delta / (2 * Math.max(window.devicePixelRatio, 0.625));\n }\n } else if (e.detail) {\n delta = e.detail / 3;\n }\n\n delta = delta > 0 ? Math.ceil(delta) : Math.floor(delta);\n\n return delta;\n }\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 eventCoordinates = ref.eventCoordinates;\n var eventElement = ref.eventElement;\n var hashKey = ref.hashKey;\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\n var FontLoader = Class.extend({\n\n });\n\n FontLoader.fetchFonts = function(options, fonts, state) {\n if (state === void 0) { state = { depth: 0 }; }\n\n var MAX_DEPTH = 5;\n\n if (!options || state.depth > MAX_DEPTH || !document.fonts) {\n return;\n }\n\n Object.keys(options).forEach(function(key) {\n var value = options[key];\n if (key === \"dataSource\" || key[0] === \"$\" || !value) {\n return;\n }\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\n FontLoader.loadFonts = function(fonts, callback) {\n var promises = [];\n\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 // Silence font-loading errors\n kendo.logToConsole(e);\n }\n\n Promise.all(promises).then(callback, callback);\n } else {\n callback();\n }\n };\n\n FontLoader.preloadFonts = function(options, callback) {\n var fonts = [];\n FontLoader.fetchFonts(options, fonts);\n\n FontLoader.loadFonts(fonts, callback);\n };\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\n function sparseArrayLimits(arr) {\n var min = MAX_VALUE;\n var max = MIN_VALUE;\n\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\n return {\n min: min === MAX_VALUE ? undefined : min,\n max: max === MIN_VALUE ? undefined : max\n };\n }\n\n function find(array, predicate) {\n for (var i = 0; i < array.length; i++) {\n var item = array[i];\n if (predicate(item, i, array)) {\n return item;\n }\n }\n }\n\n var Matrix = geometry.Matrix;\n var matrixRegexp = /matrix\\((.*)\\)/;\n\n function parseMatrix(matrixString) {\n var match = matrixString.match(matrixRegexp);\n if (match === null || match.length !== 2) {\n return Matrix.unit();\n }\n\n var members = match[1].split(',').map(function (x) { return parseFloat(x); });\n return new (Function.prototype.bind.apply( Matrix, [ null ].concat( members) ));\n }\n\n function transformMatrix(element) {\n var transform = getComputedStyle(element).transform;\n\n if (transform === 'none') {\n return Matrix.unit();\n }\n\n return parseMatrix(transform);\n }\n\n function elementScale(element) {\n if (!element) {\n return Matrix.unit();\n }\n\n var matrix = transformMatrix(element);\n var parent = element.parentElement;\n while (parent) {\n var parentMatrix = transformMatrix(parent);\n matrix = matrix.multiplyCopy(parentMatrix);\n parent = parent.parentElement;\n }\n\n matrix.b = matrix.c = matrix.e = matrix.f = 0;\n return matrix;\n }\n\n function autoTextColor(color) {\n var isDark = new kendo.Color(color).isDark();\n if (isDark) {\n return WHITE;\n }\n\n return BLACK;\n }\n\n var DELETED = {};\n\n var LegacySet = Class.extend({\n init: function(values) {\n var this$1$1 = this;\n\n this._index = {};\n this._values = values ? values.slice(0) : [];\n\n for (var i = 0; i < this._values.length; i++) {\n this$1$1._index[this$1$1._values[i]] = i;\n }\n },\n\n values: function() {\n return this._values.filter(function (item) { return item !== DELETED; });\n },\n\n has: function(value) {\n return this._index[value] !== undefined;\n },\n\n add: function(value) {\n if (!this.has(value)) {\n this._index[value] = this._values.length;\n this._values.push(value);\n }\n },\n\n delete: function(value) {\n var index = this._index[value];\n if (index !== undefined) {\n this._values[index] = DELETED;\n delete this._index[value];\n }\n },\n\n clear: function() {\n this._index = {};\n this._values = [];\n }\n });\n\n if (Object.defineProperties) {\n Object.defineProperties(LegacySet.fn, {\n size: {\n get: function() {\n return this._values.length;\n }\n }\n });\n }\n\n var SetWrapper = Class.extend({\n init: function(values) {\n this._set = new Set(values);\n },\n\n values: function() {\n return Array.from(this._set);\n },\n\n has: function(value) {\n return this._set.has(value);\n },\n\n add: function(value) {\n this._set.add(value);\n },\n\n delete: function(value) {\n this._set.delete(value);\n },\n\n clear: function() {\n this._set.clear();\n }\n });\n\n if (Object.defineProperties) {\n Object.defineProperties(SetWrapper.fn, {\n size: {\n get: function() {\n return this._set.size;\n }\n }\n });\n }\n\n // TODO: Drop LegacySet when removing support for IE10\n var supportsSet = function () {\n var supported = false;\n\n if (typeof Set === 'function') {\n var set = new Set([1]);\n supported = set.has(1);\n }\n\n return supported;\n };\n\n function createHashSet(values) {\n if (supportsSet()) {\n return new SetWrapper(values);\n }\n\n return new LegacySet(values);\n }\n\n function defaultErrorHandler(error) {\n throw error;\n }\n\n var 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\n function autoMajorUnit(min, max) {\n var diff = round(max - min, DEFAULT_PRECISION - 1);\n\n if (diff === 0) {\n if (max === 0) {\n return 0.1;\n }\n\n diff = Math.abs(max);\n }\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\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\n return round(scale * scaleMultiplier, DEFAULT_PRECISION);\n }\n\n var Point = Class.extend({\n init: function(x, y) {\n\n this.x = x || 0;\n this.y = y || 0;\n },\n\n clone: function() {\n return new Point(this.x, this.y);\n },\n\n equals: function(point) {\n return point && this.x === point.x && this.y === point.y;\n },\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\n this.x = round(\n cx + (x - cx) * cosT + (y - cy) * sinT,\n COORD_PRECISION\n );\n\n this.y = round(\n cy + (y - cy) * cosT - (x - cx) * sinT,\n COORD_PRECISION\n );\n\n return this;\n },\n\n multiply: function(a) {\n\n this.x *= a;\n this.y *= a;\n\n return this;\n },\n\n distanceTo: function(point) {\n var dx = this.x - point.x;\n var dy = this.y - point.y;\n\n return Math.sqrt(dx * dx + dy * dy);\n }\n });\n\n Point.onCircle = function(center, angle, radius) {\n var radians = rad(angle);\n\n return new Point(\n center.x - radius * Math.cos(radians),\n center.y - radius * Math.sin(radians)\n );\n };\n\n var Box = Class.extend({\n init: function(x1, y1, x2, y2) {\n\n this.x1 = x1 || 0;\n this.y1 = y1 || 0;\n this.x2 = x2 || 0;\n this.y2 = y2 || 0;\n },\n\n equals: function(box) {\n return this.x1 === box.x1 && this.x2 === box.x2 &&\n this.y1 === box.y1 && this.y2 === box.y2;\n },\n\n width: function() {\n return this.x2 - this.x1;\n },\n\n height: function() {\n return this.y2 - this.y1;\n },\n\n translate: function(dx, dy) {\n this.x1 += dx;\n this.x2 += dx;\n this.y1 += dy;\n this.y2 += dy;\n\n return this;\n },\n\n move: function(x, y) {\n var height = this.height();\n var width = this.width();\n\n if (defined(x)) {\n this.x1 = x;\n this.x2 = this.x1 + width;\n }\n\n if (defined(y)) {\n this.y1 = y;\n this.y2 = this.y1 + height;\n }\n\n return this;\n },\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\n return this;\n },\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\n return this;\n },\n\n snapTo: function(targetBox, axis) {\n\n if (axis === X || !axis) {\n this.x1 = targetBox.x1;\n this.x2 = targetBox.x2;\n }\n\n if (axis === Y || !axis) {\n this.y1 = targetBox.y1;\n this.y2 = targetBox.y2;\n }\n\n return this;\n },\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\n if (anchor === CENTER) {\n var targetCenter = targetBox.center();\n var center = this.center();\n\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\n this.x2 = this.x1 + width;\n this.y2 = this.y1 + height;\n\n return this;\n },\n\n shrink: function(dw, dh) {\n\n this.x2 -= dw;\n this.y2 -= dh;\n\n return this;\n },\n\n expand: function(dw, dh) {\n this.shrink(-dw, -dh);\n return this;\n },\n\n pad: function(padding) {\n var spacing = getSpacing(padding);\n\n this.x1 -= spacing.left;\n this.x2 += spacing.right;\n this.y1 -= spacing.top;\n this.y2 += spacing.bottom;\n\n return this;\n },\n\n unpad: function(padding) {\n var spacing = getSpacing(padding);\n\n spacing.left = -spacing.left;\n spacing.top = -spacing.top;\n spacing.right = -spacing.right;\n spacing.bottom = -spacing.bottom;\n\n return this.pad(spacing);\n },\n\n clone: function() {\n return new Box(this.x1, this.y1, this.x2, this.y2);\n },\n\n center: function() {\n return new Point(\n this.x1 + this.width() / 2,\n this.y1 + this.height() / 2\n );\n },\n\n containsPoint: function(point) {\n\n return point.x >= this.x1 && point.x <= this.x2 &&\n point.y >= this.y1 && point.y <= this.y2;\n },\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\n getHash: function() {\n return [ this.x1, this.y1, this.x2, this.y2 ].join(\",\");\n },\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\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\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\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\n this.x2 = this.x1 + width;\n this.y2 = this.y1 + height;\n\n return this;\n },\n\n toRect: function() {\n return new Rect([ this.x1, this.y1 ], [ this.width(), this.height() ]);\n },\n\n hasSize: function() {\n return this.width() !== 0 && this.height() !== 0;\n },\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\n if (inArray(alignment, [ LEFT, TOP ])) {\n this[c1] = targetBox[c1];\n this[c2] = this[c1] + size;\n } else if (inArray(alignment, [ RIGHT, BOTTOM ])) {\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\n function rotatePoint(x, y, cx, cy, angle) {\n var theta = rad(angle);\n\n return new Point(\n cx + (x - cx) * Math.cos(theta) + (y - cy) * Math.sin(theta),\n cy - (x - cx) * Math.sin(theta) + (y - cy) * Math.cos(theta)\n );\n }\n\n var Ring = Class.extend({\n init: function(center, innerRadius, radius, startAngle, angle) {\n\n this.center = center;\n this.innerRadius = innerRadius;\n this.radius = radius;\n this.startAngle = startAngle;\n this.angle = angle;\n },\n\n clone: function() {\n return new Ring(this.center, this.innerRadius, this.radius, this.startAngle, this.angle);\n },\n\n middle: function() {\n return this.startAngle + this.angle / 2;\n },\n\n setRadius: function(newRadius, innerRadius) {\n if (innerRadius) {\n this.innerRadius = newRadius;\n } else {\n this.radius = newRadius;\n }\n\n return this;\n },\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\n return new Point(x, y);\n },\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\n if (Math.abs(sa) < 0.9) {\n x += hw * -ca / Math.abs(ca);\n }\n\n if (Math.abs(ca) < 0.9) {\n y += hh * -sa / Math.abs(sa);\n }\n\n return new Box(x, y, x + width, y + height);\n },\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\n return (startVector.equals(vector) || clockwise(startVector, vector)) &&\n !clockwise(endVector, vector) &&\n dist >= innerRadius * innerRadius && dist <= radius * radius;\n },\n\n getBBox: function() {\n var this$1$1 = this;\n\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 = [ 0, 90, 180, 270, startAngle, endAngle ].sort(numericComparer);\n var startAngleIndex = allAngles.indexOf(startAngle);\n var endAngleIndex = allAngles.indexOf(endAngle);\n var angles;\n\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(\n allAngles.slice(0, endAngleIndex + 1),\n allAngles.slice(startAngleIndex, allAngles.length)\n );\n }\n }\n\n for (var i = 0; i < angles.length; i++) {\n var point = this$1$1.point(angles[i]);\n box.wrapPoint(point);\n box.wrapPoint(point, innerRadius);\n }\n\n if (!innerRadius) {\n box.wrapPoint(this.center);\n }\n\n return box;\n },\n\n expand: function(value) {\n this.radius += value;\n return this;\n }\n });\n\n function numericComparer(a, b) {\n return a - b;\n }\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\n expand: function(value) {\n return Ring.fn.expand.call(this, value);\n },\n\n clone: function() {\n return new Sector(this.center, this.radius, this.startAngle, this.angle);\n },\n\n setRadius: function(newRadius) {\n this.radius = newRadius;\n\n return this;\n }\n });\n\n var DIRECTION_ANGLE = 0.001; //any value that will make the endAngle bigger than the start angle will work here.\n\n var ShapeBuilder = Class.extend({\n createRing: function(sector, options) {\n var startAngle = sector.startAngle + 180;\n var endAngle = sector.angle + startAngle;\n\n //required in order to avoid reversing the arc direction in cases like 0.000000000000001 + 100 === 100\n if (sector.angle > 0 && startAngle === endAngle) {\n endAngle += DIRECTION_ANGLE;\n }\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\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\n return path;\n }\n });\n\n ShapeBuilder.current = new ShapeBuilder();\n\n var ChartElement = Class.extend({\n init: function(options) {\n\n this.children = [];\n\n this.options = deepExtend({}, this.options, this.initUserOptions(options));\n },\n\n initUserOptions: function(options) {\n return options;\n },\n\n reflow: function(targetBox) {\n var children = this.children;\n var box;\n\n for (var i = 0; i < children.length; i++) {\n var currentChild = children[i];\n currentChild.reflow(targetBox);\n\n box = box ? box.wrap(currentChild.box) : currentChild.box.clone();\n }\n\n this.box = box || targetBox;\n },\n\n destroy: function() {\n var children = this.children;\n\n if (this.animation) {\n this.animation.destroy();\n }\n\n for (var i = 0; i < children.length; i++) {\n children[i].destroy();\n }\n },\n\n getRoot: function() {\n var parent = this.parent;\n\n return parent ? parent.getRoot() : null;\n },\n\n getSender: function() {\n var service = this.getService();\n if (service) {\n return service.sender;\n }\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\n translateChildren: function(dx, dy) {\n var children = this.children;\n var childrenCount = children.length;\n\n for (var i = 0; i < childrenCount; i++) {\n children[i].box.translate(dx, dy);\n }\n },\n\n append: function() {\n var arguments$1 = arguments;\n var this$1$1 = this;\n\n for (var i = 0; i < arguments.length; i++) {\n var item = arguments$1[i];\n this$1$1.children.push(item);\n item.parent = this$1$1;\n }\n },\n\n renderVisual: function() {\n if (this.options.visible === false) {\n return;\n }\n\n this.createVisual();\n\n this.addVisual();\n\n this.renderChildren();\n\n this.createAnimation();\n this.renderComplete();\n },\n\n addVisual: function() {\n if (this.visual) {\n this.visual.chartElement = this;\n\n if (this.parent) {\n this.parent.appendVisual(this.visual);\n }\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\n createVisual: function() {\n this.visual = new Group({\n zIndex: this.options.zIndex,\n visible: valueOrDefault(this.options.visible, true)\n });\n },\n\n createAnimation: function() {\n if (this.visual && this.options.animation) {\n this.animation = drawing.Animation.create(\n this.visual, this.options.animation\n );\n }\n },\n\n appendVisual: function(childVisual) {\n if (!childVisual.chartElement) {\n childVisual.chartElement = this;\n }\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 // Allow chart elements without visuals to\n // pass through child visuals\n this.parent.appendVisual(childVisual);\n }\n },\n\n clipRoot: function() {\n if (this.parent) {\n return this.parent.clipRoot();\n }\n\n return this;\n },\n\n stackRoot: function() {\n if (this.parent) {\n return this.parent.stackRoot();\n }\n\n return this;\n },\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\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\n this.visual.insert(pos, childVisual);\n },\n\n traverse: function(callback) {\n var children = this.children;\n var length = children.length;\n\n for (var i = 0; i < length; i++) {\n var child = children[i];\n\n callback(child);\n if (child.traverse) {\n child.traverse(callback);\n }\n }\n },\n\n closest: function(match) {\n var element = this;\n var matched = false;\n\n while (element && !matched) {\n matched = match(element);\n\n if (!matched) {\n element = element.parent;\n }\n }\n\n if (matched) {\n return element;\n }\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\n toggleHighlight: function(show, opacity) {\n var this$1$1 = this;\n\n var options = (this.options || {}).highlight || {};\n var customVisual = options.visual;\n var highlight = this._highlight;\n\n if (!highlight) {\n var highlightOptions = {\n fill: {\n color: WHITE,\n opacity: opacity || 0.2\n },\n stroke: {\n color: WHITE,\n width: 1,\n opacity: opacity || 0.2\n }\n };\n\n if (customVisual) {\n highlight = this._highlight = customVisual(\n $.extend(this.highlightVisualArgs(), {\n createVisual: function () { return this$1$1.createHighlight(highlightOptions); },\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 ));\n\n if (!highlight) {\n return;\n }\n } else {\n highlight = this._highlight = this.createHighlight(highlightOptions);\n }\n\n if (!defined(highlight.options.zIndex)) {\n highlight.options.zIndex = valueOrDefault(options.zIndex, this.options.zIndex);\n }\n\n this.appendVisual(highlight);\n }\n\n highlight.visible(show);\n },\n\n createGradientOverlay: function(element, options, gradientOptions) {\n var overlay = new Path($.extend({\n stroke: {\n color: \"none\"\n },\n fill: this.createGradient(gradientOptions),\n closed: element.options.closed\n }, options));\n\n overlay.segments.elements(element.segments.elements());\n\n return overlay;\n },\n\n createGradient: function(options) {\n if (this.parent) {\n return this.parent.createGradient(options);\n }\n },\n\n supportsPointInactiveOpacity: function() {\n return true;\n }\n });\n\n ChartElement.prototype.options = { };\n\n var BoxElement = ChartElement.extend({\n init: function(options) {\n ChartElement.fn.init.call(this, options);\n\n this.options.margin = getSpacing(this.options.margin);\n this.options.padding = getSpacing(this.options.padding);\n },\n\n reflow: function(targetBox) {\n var this$1$1 = this;\n\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\n var reflowPaddingBox = function () {\n this$1$1.align(targetBox, X, options.align);\n this$1$1.align(targetBox, Y, options.vAlign);\n this$1$1.paddingBox = box.clone().unpad(margin).unpad(borderWidth);\n };\n\n var contentBox = targetBox.clone();\n if (hasSetSize) {\n contentBox.x2 = contentBox.x1 + width;\n contentBox.y2 = contentBox.y1 + height;\n }\n\n if (shrinkToFit) {\n contentBox.unpad(margin).unpad(borderWidth).unpad(padding);\n }\n\n ChartElement.fn.reflow.call(this, contentBox);\n\n if (hasSetSize) {\n box = this.box = new Box(0, 0, width, height);\n } else {\n box = this.box;\n }\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\n this.translateChildren(\n box.x1 - contentBox.x1 + margin.left + borderWidth + padding.left,\n box.y1 - contentBox.y1 + margin.top + borderWidth + padding.top\n );\n\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\n align: function(targetBox, axis, alignment) {\n this.box.align(targetBox, axis, alignment);\n },\n\n hasBox: function() {\n var options = this.options;\n return options.border.width || options.background;\n },\n\n createVisual: function() {\n ChartElement.fn.createVisual.call(this);\n\n var options = this.options;\n if (options.visible && this.hasBox()) {\n this.visual.append(Path.fromRect(\n this.paddingBox.toRect(),\n this.visualStyle()\n ));\n }\n },\n\n visualStyle: function() {\n var options = this.options;\n var border = options.border || {};\n\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\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\n var ShapeElement = BoxElement.extend({\n init: function(options, pointData) {\n BoxElement.fn.init.call(this, options);\n\n this.pointData = pointData;\n },\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 var halfHeight = box.height() / 2;\n\n if (!options.visible || !this.hasBox()) {\n return null;\n }\n\n var style = this.visualStyle();\n var element;\n\n if (type === CIRCLE) {\n element = new drawing.Circle(\n new Circle([\n round(box.x1 + halfWidth, COORD_PRECISION),\n round(box.y1 + halfHeight, COORD_PRECISION)\n ], Math.min(halfWidth, halfHeight)),\n style\n );\n } else if (type === TRIANGLE) {\n element = Path.fromPoints([\n [ box.x1 + halfWidth, box.y1 ],\n [ box.x1, box.y2 ],\n [ box.x2, box.y2 ]\n ], style).close();\n } else if (type === CROSS) {\n element = new drawing.MultiPath(style);\n\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 var rect = box.toRect();\n if (type === ROUNDED_RECT) {\n var borderRadius = valueOrDefault(options.borderRadius, rect.width() / 5);\n rect.setCornerRadius(borderRadius);\n }\n\n element = Path.fromRect(rect, style);\n }\n\n if (rotation) {\n element.transform(geometryTransform()\n .rotate(-rotation, [ center.x, center.y ])\n );\n }\n\n element.options.zIndex = options.zIndex;\n\n return element;\n },\n\n createElement: function() {\n var this$1$1 = this;\n\n var customVisual = this.options.visual;\n var pointData = this.pointData || {};\n var visual;\n\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 () { return this$1$1.getElement(); }\n });\n } else {\n visual = this.getElement();\n }\n\n return visual;\n },\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\n createVisual: function() {\n this.visual = this.createElement();\n }\n });\n\n setDefaultOptions(ShapeElement, {\n type: CIRCLE,\n align: CENTER,\n vAlign: CENTER\n });\n\n var LINEAR = \"linear\";\n var RADIAL = \"radial\";\n\n var GRADIENTS = {\n glass: {\n type: LINEAR,\n rotation: 0,\n stops: [ {\n offset: 0,\n color: WHITE,\n opacity: 0\n }, {\n offset: 0.25,\n color: WHITE,\n opacity: 0.3\n }, {\n offset: 1,\n color: WHITE,\n opacity: 0\n } ]\n },\n sharpBevel: {\n type: RADIAL,\n stops: [ {\n offset: 0,\n color: WHITE,\n opacity: 0.55\n }, {\n offset: 0.65,\n color: WHITE,\n opacity: 0\n }, {\n offset: 0.95,\n color: WHITE,\n opacity: 0.25\n } ]\n },\n roundedBevel: {\n type: RADIAL,\n stops: [ {\n offset: 0.33,\n color: WHITE,\n opacity: 0.06\n }, {\n offset: 0.83,\n color: WHITE,\n opacity: 0.2\n }, {\n offset: 0.95,\n color: WHITE,\n opacity: 0\n } ]\n },\n roundedGlass: {\n type: RADIAL,\n supportVML: false,\n stops: [ {\n offset: 0,\n color: WHITE,\n opacity: 0\n }, {\n offset: 0.5,\n color: WHITE,\n opacity: 0.3\n }, {\n offset: 0.99,\n color: WHITE,\n opacity: 0\n } ]\n },\n sharpGlass: {\n type: RADIAL,\n supportVML: false,\n stops: [ {\n offset: 0,\n color: WHITE,\n opacity: 0.2\n }, {\n offset: 0.15,\n color: WHITE,\n opacity: 0.15\n }, {\n offset: 0.17,\n color: WHITE,\n opacity: 0.35\n }, {\n offset: 0.85,\n color: WHITE,\n opacity: 0.05\n }, {\n offset: 0.87,\n color: WHITE,\n opacity: 0.15\n }, {\n offset: 0.99,\n color: WHITE,\n opacity: 0\n } ]\n },\n bubbleShadow: {\n type: RADIAL,\n center: [ 0.5, 0.5 ],\n radius: 0.5\n }\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\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\n // X = intersection, 0-7 = possible difference areas\n // h +-+-+-+\n // . |5|6|7|\n // g +-+-+-+\n // . |3|X|4|\n // f +-+-+-+\n // . |0|1|2|\n // e +-+-+-+\n // . a b c d\n\n // we'll always have rectangles 1, 3, 4 and 6\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\n // decide which corners\n if (r.x1 === a && r.y1 === e || s.x1 === a && s.y1 === e) { // corners 0 and 7\n boxes[4] = new Box(a, e, b, f);\n boxes[5] = new Box(c, g, d, h);\n } else { // corners 2 and 5\n boxes[4] = new Box(c, e, d, f);\n boxes[5] = new Box(a, g, b, h);\n }\n\n return grep(boxes, function(box) {\n return box.height() > 0 && box.width() > 0;\n })[0];\n }\n\n var RootElement = ChartElement.extend({\n init: function(options) {\n ChartElement.fn.init.call(this, options);\n\n var rootOptions = this.options;\n rootOptions.width = parseInt(rootOptions.width, 10);\n rootOptions.height = parseInt(rootOptions.height, 10);\n\n this.gradients = {};\n },\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\n this.box = currentBox.unpad(options.margin);\n\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\n createVisual: function() {\n this.visual = new Group();\n this.createBackground();\n },\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\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\n this.visual.append(background);\n },\n\n getRoot: function() {\n return this;\n },\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\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\n return drawingGradient;\n },\n\n cleanGradients: function() {\n var gradients = this.gradients;\n for (var hashCode in gradients) {\n gradients[hashCode]._observers = [];//add clear observers method in drawing ObserversMixin\n }\n },\n\n size: function() {\n var options = this.options;\n return new Box(0, 0, options.width, options.height);\n }\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\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\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\n return currentStops;\n }\n\n var FloatElement = ChartElement.extend({\n init: function(options) {\n ChartElement.fn.init.call(this, options);\n this._initDirection();\n },\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\n reflow: function(targetBox) {\n this.box = targetBox.clone();\n this.reflowChildren();\n },\n\n reflowChildren: function() {\n var this$1$1 = this;\n\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\n if (groupsCount) {\n var groupStart = groupsStart;\n\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\n for (var idx = 0; idx < groupElementsCount; idx++) {\n var element = groupElements[idx];\n var elementSize$$1 = this$1$1.elementSize(element);\n var groupElementStart = groupStart + this$1$1.alignStart(elementSize$$1[groupSizeField], group.groupSize);\n\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\n element.reflow(elementBox);\n\n elementStart += elementSize$$1[elementSizeField] + this$1$1.elementSpacing;\n }\n groupStart += group.groupSize + this$1$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\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\n groupOptions: function() {\n var this$1$1 = this;\n\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\n var groupSize = 0;\n var groupElementsSize = 0;\n var groupsSize = 0;\n var maxGroupElementsSize = 0;\n var groupElements = [];\n\n for (var idx = 0; idx < childrenCount; idx++) {\n var element = children[idx];\n if (!element.box) {\n element.reflow(box);\n }\n\n var elementSize$$1 = this$1$1.elementSize(element);\n if (this$1$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\n groups.push({\n groupElements: groupElements,\n groupSize: groupSize,\n groupElementsSize: groupElementsSize\n });\n maxGroupElementsSize = Math.max(maxGroupElementsSize, groupElementsSize);\n groupsSize += groupSize;\n\n return {\n groups: groups,\n groupsSize: groupsSize,\n maxGroupElementsSize: maxGroupElementsSize\n };\n },\n\n elementSize: function(element) {\n return {\n width: element.box.width(),\n height: element.box.height()\n };\n },\n\n createVisual: function() {}\n });\n\n setDefaultOptions(FloatElement, {\n vertical: true,\n wrap: true,\n vSpacing: 0,\n spacing: 0\n });\n\n var DrawingText = drawing.Text;\n\n var Text = ChartElement.extend({\n init: function(content, options) {\n ChartElement.fn.init.call(this, options);\n\n this.content = content;\n\n // Calculate size\n this.reflow(new Box());\n },\n\n reflow: function(targetBox) {\n var options = this.options;\n var size = options.size = util.measureText(this.content, { font: options.font });\n\n this.baseline = size.baseline;\n\n this.box = new Box(targetBox.x1, targetBox.y1,\n targetBox.x1 + size.width, targetBox.y1 + size.height);\n },\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\n this.visual = new DrawingText(this.content, this.box.toRect().topLeft(), {\n font: font,\n fill: { color: color, opacity: opacity },\n cursor: cursor\n });\n }\n });\n\n setDefaultOptions(Text, {\n font: DEFAULT_FONT,\n color: BLACK\n });\n\n function rectToBox(rect) {\n var origin = rect.origin;\n var bottomRight = rect.bottomRight();\n\n return new Box(origin.x, origin.y, bottomRight.x, bottomRight.y);\n }\n\n var ROWS_SPLIT_REGEX = /\\n/m;\n\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\n this._initContainer();\n if (this.options._autoReflow !== false) {\n this.reflow(new Box());\n }\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({ vertical: true, align: options.align, wrap: false });\n var textOptions = deepExtend({ }, options, { opacity: 1, animation: null });\n\n this.container = floatElement;\n this.append(floatElement);\n\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\n reflow: function(targetBox) {\n var options = this.options;\n var visualFn = options.visual;\n this.container.options.align = options.align;\n\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\n if (visual) {\n visualBox = rectToBox(visual.clippedBBox() || new Rect());\n\n visual.options.zIndex = options.zIndex;\n }\n\n this.box = this.contentBox = this.paddingBox = visualBox;\n } else {\n BoxElement.fn.reflow.call(this, targetBox);\n\n if (options.rotation) {\n var margin = getSpacing(options.margin);\n var box = this.box.unpad(margin);\n\n this.targetBox = targetBox;\n this.normalBox = box.clone();\n\n box = this.rotate();\n box.translate(margin.left - margin.right, margin.top - margin.bottom);\n\n this.rotatedBox = box.clone();\n\n box.pad(margin);\n }\n }\n },\n\n createVisual: function() {\n var options = this.options;\n\n this.visual = new Group({\n transform: this.rotationTransform(),\n zIndex: options.zIndex,\n noclip: options.noclip\n });\n\n if (this.hasBox()) {\n var box = Path.fromRect(this.paddingBox.toRect(), this.visualStyle());\n this.visual.append(box);\n }\n },\n\n renderVisual: function() {\n if (!this.options.visible) {\n return;\n }\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\n visualContext: function(targetBox) {\n var this$1$1 = this;\n\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$1._boxReflow = true;\n this$1$1.reflow(targetBox);\n this$1$1._boxReflow = false;\n return this$1$1.getDefaultVisual();\n }\n };\n if (this.data) {\n $.extend(context, this.data);\n }\n\n return context;\n },\n\n getDefaultVisual: function() {\n this.createVisual();\n this.renderChildren();\n var visual = this.visual;\n delete this.visual;\n return visual;\n },\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\n rotationTransform: function() {\n var rotation = this.options.rotation;\n if (!rotation) {\n return null;\n }\n\n var ref = this.normalBox.center();\n var cx = ref.x;\n var cy = ref.y;\n var boxCenter = this.rotatedBox.center();\n\n return geometryTransform()\n .translate(boxCenter.x - cx, boxCenter.y - cy)\n .rotate(rotation, [ cx, cy ]);\n }\n });\n\n var Title = ChartElement.extend({\n init: function(options) {\n ChartElement.fn.init.call(this, options);\n\n this._textBox = new TextBox(this.options.text, $.extend({}, this.options, {\n vAlign: this.options.position\n }));\n\n this.append(this._textBox);\n },\n\n reflow: function(targetBox) {\n ChartElement.fn.reflow.call(this, targetBox);\n this.box.snapTo(targetBox, X);\n }\n });\n\n Title.buildTitle = function(options, defaultOptions) {\n var titleOptions = options;\n\n if (typeof options === \"string\") {\n titleOptions = { text: options };\n }\n\n titleOptions = $.extend({ visible: true }, defaultOptions, titleOptions);\n\n var title;\n if (titleOptions && titleOptions.visible && titleOptions.text) {\n title = new Title(titleOptions);\n }\n\n return title;\n };\n\n Title.orderTitles = function(titles) {\n var items = [].concat(titles);\n var top = items.filter(function (item) { return item && item.options.position !== BOTTOM; });\n var bottom = items.filter(function (item) { return item && item.options.position === BOTTOM; });\n\n collapseVerticalMargins(top);\n collapseVerticalMargins(bottom);\n\n bottom.reverse();\n return top.concat(bottom);\n };\n\n function collapseVerticalMargins(items) {\n for (var i = 1; i < items.length; i++) {\n var box = items[i]._textBox;\n var prevBox = items[i - 1]._textBox;\n prevBox.options.margin = $.extend(getSpacing(prevBox.options.margin), { bottom: 0 });\n box.options.margin = $.extend(getSpacing(box.options.margin), { top: 0 });\n }\n }\n\n setDefaultOptions(Title, {\n color: BLACK,\n position: TOP,\n align: CENTER,\n margin: getSpacing(5),\n padding: getSpacing(5)\n });\n\n var AxisLabel = TextBox.extend({\n init: function(value, text, index, dataItem, options) {\n TextBox.fn.init.call(this, text, options);\n\n this.text = text;\n this.value = value;\n this.index = index;\n this.dataItem = dataItem;\n this.reflow(new Box());\n },\n\n visualContext: function(targetBox) {\n var context = TextBox.fn.visualContext.call(this, targetBox);\n\n context.value = this.value;\n context.dataItem = this.dataItem;\n context.format = this.options.format;\n context.culture = this.options.culture;\n\n return context;\n },\n\n click: function(widget, e) {\n\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\n rotate: function() {\n if (this.options.alignRotation !== CENTER) {\n var box = this.normalBox.toRect();\n var transform = this.rotationTransform();\n\n this.box = rectToBox(box.bbox(transform.matrix()));\n } else {\n TextBox.fn.rotate.call(this);\n }\n\n return this.box;\n },\n\n rotationTransform: function() {\n var options = this.options;\n var rotation = options.rotation;\n if (!rotation) {\n return null;\n }\n\n if (options.alignRotation === CENTER) {\n return TextBox.fn.rotationTransform.call(this);\n }\n\n var rotationMatrix = geometryTransform().rotate(rotation).matrix();\n var box = this.normalBox.toRect();\n var rect = this.targetBox.toRect();\n\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\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\n var translate = {};\n translate[distanceAxis] = rect.origin[distanceAxis] - rotatedBox.origin[distanceAxis];\n\n var distanceLeft = Math.abs(topLeft[distanceAxis] + translate[distanceAxis] - axisAnchor[distanceAxis]);\n var distanceRight = Math.abs(topRight[distanceAxis] + translate[distanceAxis] - axisAnchor[distanceAxis]);\n\n var alignStart, alignEnd;\n\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\n var alignCenter = alignStart[alignAxis] + (alignEnd[alignAxis] - alignStart[alignAxis]) / 2;\n translate[alignAxis] = rect.center()[alignAxis] - alignCenter;\n\n return geometryTransform()\n .translate(translate.x, translate.y)\n .rotate(rotation);\n }\n });\n\n setDefaultOptions(AxisLabel, {\n _autoReflow: false\n });\n\n var DEFAULT_ICON_SIZE = 7;\n var DEFAULT_LABEL_COLOR = \"#fff\";\n\n var Note = BoxElement.extend({\n init: function(fields, options, chartService) {\n BoxElement.fn.init.call(this, options);\n\n this.fields = fields;\n this.chartService = chartService;\n\n this.render();\n },\n\n hide: function() {\n this.options.visible = false;\n },\n\n show: function() {\n this.options.visible = true;\n },\n\n render: function() {\n var this$1$1 = this;\n\n var options = this.options;\n\n if (options.visible) {\n var label = options.label;\n var icon = options.icon;\n var box = new Box();\n var childAlias = function () { return this$1$1; };\n var size = icon.size;\n var text = this.fields.text;\n var width, height;\n\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\n if (!label.color) {\n label.color = label.position === INSIDE ? DEFAULT_LABEL_COLOR : icon.background;\n }\n\n this.label = new TextBox(text, deepExtend({}, label));\n this.label.aliasFor = childAlias;\n\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\n icon.width = width || size || DEFAULT_ICON_SIZE;\n icon.height = height || size || DEFAULT_ICON_SIZE;\n\n var marker = new ShapeElement(deepExtend({}, icon));\n marker.aliasFor = childAlias;\n\n this.marker = marker;\n this.append(marker);\n\n if (this.label) {\n this.append(this.label);\n }\n\n marker.reflow(new Box());\n this.wrapperBox = box.wrap(marker.box);\n }\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\n // TODO: Review\n if (options.visible) {\n var lineStart, box, contentBox;\n\n if (inArray(position, [ LEFT, RIGHT ])) {\n if (position === LEFT) {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(-length, targetBox.center().y - wrapperBox.center().y);\n\n if (options.line.visible) {\n lineStart = [ targetBox.x1, center.y ];\n this.linePoints = [\n lineStart,\n [ contentBox.x2, center.y ]\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\n if (options.line.visible) {\n lineStart = [ targetBox.x2, center.y ];\n this.linePoints = [\n lineStart,\n [ contentBox.x1, center.y ]\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\n if (options.line.visible) {\n lineStart = [ center.x, targetBox.y2 ];\n this.linePoints = [\n lineStart,\n [ center.x, contentBox.y1 ]\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\n if (options.line.visible) {\n lineStart = [ center.x, targetBox.y1 ];\n this.linePoints = [\n lineStart,\n [ center.x, contentBox.y2 ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n }\n }\n\n if (marker) {\n marker.reflow(contentBox);\n }\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\n this.contentBox = contentBox;\n this.targetBox = targetBox;\n this.box = box || contentBox;\n }\n },\n\n createVisual: function() {\n BoxElement.fn.createVisual.call(this);\n this.visual.options.noclip = this.options.noclip;\n\n if (this.options.visible) {\n this.createLine();\n }\n },\n\n renderVisual: function() {\n var this$1$1 = this;\n\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$1.createVisual();\n this$1$1.renderChildren();\n var defaultVisual = this$1$1.visual;\n delete this$1$1.visual;\n return defaultVisual;\n }\n }));\n this.addVisual();\n } else {\n BoxElement.fn.renderVisual.call(this);\n }\n },\n\n createLine: function() {\n var options = this.options.line;\n\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\n alignPathToPixel(path);\n this.visual.append(path);\n }\n },\n\n click: function(widget, e) {\n var args = this.eventArgs(e);\n\n if (!widget.trigger(NOTE_CLICK, args)) {\n e.preventDefault();\n }\n },\n\n over: function(widget, e) {\n var args = this.eventArgs(e);\n\n if (!widget.trigger(NOTE_HOVER, args)) {\n e.preventDefault();\n }\n },\n\n out: function(widget, e) {\n var args = this.eventArgs(e);\n\n widget.trigger(NOTE_LEAVE, args);\n },\n\n eventArgs: function(e) {\n var options = this.options;\n\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\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: {\n visible: true\n },\n visible: true,\n position: TOP,\n zIndex: 2\n });\n\n var defaultImplementation = {\n format: function (format, value) { return value; },\n\n toString: function (value) { return value; },\n\n parseDate: function (value) { return new Date(value); },\n\n firstDay: function () { return 0; }\n };\n\n var current$1 = defaultImplementation;\n\n var IntlService = Class.extend({\n\n });\n\n IntlService.register = function(userImplementation) {\n current$1 = userImplementation;\n };\n\n if (Object.defineProperties) {\n Object.defineProperties(IntlService, {\n implementation: {\n get: function() {\n return current$1;\n }\n }\n });\n }\n\n var FORMAT_REPLACE_REGEX = /\\{(\\d+)(:[^\\}]+)?\\}/g;\n\n var FormatService = Class.extend({\n init: function(intlService) {\n this._intlService = intlService;\n },\n\n auto: function(formatString) {\n var arguments$1 = arguments;\n\n var values = [], len = arguments.length - 1;\n while ( len-- > 0 ) { values[ len ] = arguments$1[ len + 1 ]; }\n\n var intl = this.intl;\n\n if (isString(formatString) && formatString.match(FORMAT_REGEX)) {\n return intl.format.apply(intl, [ formatString ].concat( values ));\n }\n\n return intl.toString(values[0], formatString);\n },\n\n localeAuto: function(formatString, values, locale) {\n var intl = this.intl;\n var result;\n\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\n return intl.toString(value, placeholderFormat ? placeholderFormat.substring(1) : \"\", locale);\n });\n } else {\n result = intl.toString(values[0], formatString, locale);\n }\n\n return result;\n }\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\n var ChartService = Class.extend({\n init: function(chart, context) {\n if (context === void 0) { 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\n notify: function(name, args) {\n if (this.chart) {\n this.chart.trigger(name, args);\n }\n },\n\n isPannable: function(axis) {\n var pannable = ((this.chart || {}).options || {}).pannable;\n return pannable && pannable.lock !== axis;\n }\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\n var current$2;\n\n var DomEventsBuilder = Class.extend({\n\n });\n\n DomEventsBuilder.register = function(userImplementation) {\n current$2 = userImplementation;\n };\n\n DomEventsBuilder.create = function(element, events) {\n if (current$2) {\n return current$2.create(element, events);\n }\n };\n\n var services = {\n \tChartService: ChartService,\n \tDomEventsBuilder: DomEventsBuilder,\n \tFormatService: FormatService,\n \tIntlService: IntlService,\n \tTemplateService: TemplateService\n };\n\n function createAxisTick(options, tickOptions) {\n var tickX = options.tickX;\n var tickY = options.tickY;\n var position = options.position;\n\n var tick = new Path({\n stroke: {\n width: tickOptions.width,\n color: tickOptions.color\n }\n });\n\n if (options.vertical) {\n tick.moveTo(tickX, position)\n .lineTo(tickX + tickOptions.size, position);\n } else {\n tick.moveTo(position, tickY)\n .lineTo(position, tickY + tickOptions.size);\n }\n\n alignPathToPixel(tick);\n\n return tick;\n }\n\n function createAxisGridLine(options, gridLine) {\n var lineStart = options.lineStart;\n var lineEnd = options.lineEnd;\n var position = options.position;\n\n var line = new Path({\n stroke: {\n width: gridLine.width,\n color: gridLine.color,\n dashType: gridLine.dashType\n }\n });\n\n if (options.vertical) {\n line.moveTo(lineStart, position)\n .lineTo(lineEnd, position);\n } else {\n line.moveTo(position, lineStart)\n .lineTo(position, lineEnd);\n }\n\n alignPathToPixel(line);\n\n return line;\n }\n\n var Axis = ChartElement.extend({\n init: function(options, chartService) {\n if (chartService === void 0) { chartService = new ChartService(); }\n\n ChartElement.fn.init.call(this, options);\n\n this.chartService = chartService;\n\n if (!this.options.visible) {\n this.options = deepExtend({}, this.options, {\n labels: {\n visible: false\n },\n line: {\n visible: false\n },\n margin: 0,\n majorTickSize: 0,\n minorTickSize: 0\n });\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\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\n this.initFields();\n\n if (!this.options._deferLabels) {\n this.createLabels();\n }\n\n this.createTitle();\n this.createNotes();\n },\n\n initFields: function() {\n },\n\n labelsRange: function() {\n return {\n min: this.options.labels.skip,\n max: this.labelsCount()\n };\n },\n\n normalizeLabelRotation: function(labelOptions) {\n var rotation = labelOptions.rotation;\n\n if (isObject(rotation)) {\n labelOptions.alignRotation = rotation.align;\n labelOptions.rotation = rotation.angle;\n }\n },\n\n createLabels: function() {\n var this$1$1 = this;\n\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\n this.clearLabels();\n\n if (labelOptions.visible) {\n this.normalizeLabelRotation(labelOptions);\n if (labelOptions.rotation === \"auto\") {\n labelOptions.rotation = 0;\n options.autoRotateLabels = true;\n }\n\n var range = this.labelsRange();\n for (var idx = range.min; idx < range.max; idx += step) {\n var labelContext = { index: idx, count: range.max };\n var label = this$1$1.createAxisLabel(idx, labelOptions, labelContext);\n if (label) {\n this$1$1.append(label);\n this$1$1.labels.push(label);\n }\n }\n }\n },\n\n clearLabels: function() {\n this.children = grep(this.children, function (child) { return !(child instanceof AxisLabel); });\n this.labels = [];\n },\n\n clearTitle: function() {\n var this$1$1 = this;\n\n if (this.title) {\n this.children = grep(this.children, function (child) { return child !== this$1$1.title; });\n this.title = undefined;\n }\n },\n\n clear: function() {\n this.clearLabels();\n this.clearTitle();\n },\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\n return vertical ?\n new Box(axisX, box.y1, axisX, box.y2 - lineWidth) :\n new Box(box.x1, axisY, box.x2 - lineWidth, axisY);\n },\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\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\n createNotes: function() {\n var this$1$1 = this;\n\n var options = this.options;\n var notes = options.notes;\n var items = notes.data || [];\n\n this.notes = [];\n\n for (var i = 0; i < items.length; i++) {\n var item = deepExtend({}, notes, items[i]);\n item.value = this$1$1.parseNoteValue(item.value);\n\n var note = new Note({\n value: item.value,\n text: item.label.text,\n dataItem: item\n }, item, this$1$1.chartService);\n\n if (note.options.visible) {\n if (defined(note.options.position)) {\n if (options.vertical && !inArray(note.options.position, [ LEFT, RIGHT ])) {\n note.options.position = options.reverse ? LEFT : RIGHT;\n } else if (!options.vertical && !inArray(note.options.position, [ TOP, BOTTOM ])) {\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$1.append(note);\n this$1$1.notes.push(note);\n }\n }\n },\n\n parseNoteValue: function(value) {\n return value;\n },\n\n renderVisual: function() {\n ChartElement.fn.renderVisual.call(this);\n\n this.createPlotBands();\n },\n\n createVisual: function() {\n ChartElement.fn.createVisual.call(this);\n\n this.createBackground();\n this.createLine();\n },\n\n gridLinesVisual: function() {\n var gridLines = this._gridLines;\n if (!gridLines) {\n gridLines = this._gridLines = new Group({\n zIndex: -2\n });\n this.appendVisual(this._gridLines);\n }\n\n return gridLines;\n },\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 = {\n // TODO\n // _alignLines: options._alignLines,\n vertical: options.vertical\n };\n\n function render(tickPositions, tickOptions, skipUnit) {\n var count = tickPositions.length;\n var step = Math.max(1, tickOptions.step);\n\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\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\n lineGroup.append(createAxisTick(tickLineOptions, tickOptions));\n }\n }\n }\n\n render(this.getMajorTickPositions(), options.majorTicks);\n render(this.getMinorTickPositions(), options.minorTicks, majorUnit / options.minorUnit);\n },\n\n createLine: function() {\n var options = this.options;\n var line = options.line;\n var lineBox = this.lineBox();\n\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 /* TODO\n zIndex: line.zIndex,\n */\n });\n\n path.moveTo(lineBox.x1, lineBox.y1)\n .lineTo(lineBox.x2, lineBox.y2);\n\n if (options._alignLines) {\n alignPathToPixel(path);\n }\n\n var group = this._lineGroup = new Group();\n group.append(path);\n\n this.visual.append(group);\n this.createTicks(group);\n }\n },\n\n getActualTickSize: function() {\n var options = this.options;\n var tickSize = 0;\n\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\n return tickSize;\n },\n\n createBackground: function() {\n var ref = this;\n var options = ref.options;\n var box = ref.box;\n var background = options.background;\n\n if (background) {\n this._backgroundPath = Path.fromRect(box.toRect(), {\n fill: {\n color: background\n },\n stroke: null\n });\n\n this.visual.append(this._backgroundPath);\n }\n },\n\n createPlotBands: function() {\n var this$1$1 = this;\n\n var options = this.options;\n var plotBands = options.plotBands || [];\n var vertical = options.vertical;\n var plotArea = this.plotArea;\n\n if (plotBands.length === 0) {\n return;\n }\n\n var group = this._plotbandGroup = new Group({\n zIndex: -1\n });\n\n var altAxis = grep(this.pane.axes, function (axis) { return axis.options.vertical !== this$1$1.options.vertical; })[0];\n\n for (var idx = 0; idx < plotBands.length; idx++) {\n var item = plotBands[idx];\n var slotX = (void 0), slotY = (void 0);\n var labelOptions = item.label;\n var label = (void 0);\n\n if (vertical) {\n slotX = (altAxis || plotArea.axisX).lineBox();\n slotY = this$1$1.getSlot(item.from, item.to, true);\n } else {\n slotX = this$1$1.getSlot(item.from, item.to, true);\n slotY = (altAxis || plotArea.axisY).lineBox();\n }\n\n if (labelOptions) {\n labelOptions.vAlign = labelOptions.position || LEFT;\n label = this$1$1.createPlotBandLabel(\n labelOptions,\n item,\n new Box(\n slotX.x1,\n slotY.y1,\n slotX.x2,\n slotY.y2\n )\n\n );\n }\n\n if (slotX.width() !== 0 && slotY.height() !== 0) {\n var bandRect = new Rect(\n [ slotX.x1, slotY.y1 ],\n [ slotX.width(), slotY.height() ]\n );\n\n var path = Path.fromRect(bandRect, {\n fill: {\n color: item.color,\n opacity: item.opacity\n },\n stroke: null\n });\n\n group.append(path);\n if (label) {\n group.append(label);\n }\n }\n }\n\n this.appendVisual(group);\n },\n\n createPlotBandLabel: function(label, item, box) {\n\n if (label.visible === false) {\n return null;\n }\n\n var text = label.text;\n var textbox;\n\n if (defined(label) && label.visible) {\n var labelTemplate = getTemplate(label);\n if (labelTemplate) {\n text = labelTemplate({ text: text, item: item });\n } else if (label.format) {\n text = this.chartService.format.auto(label.format, text);\n }\n\n if (!label.color) {\n label.color = this.options.labels.color;\n }\n }\n\n textbox = new TextBox(text, label);\n textbox.reflow(box);\n textbox.renderVisual();\n\n return textbox.visual;\n },\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\n var container = this.gridLinesVisual();\n\n function render(tickPositions, gridLine, skipUnit) {\n var count = tickPositions.length;\n var step = Math.max(1, gridLine.step);\n\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\n majorTicks.push(pos);\n }\n }\n }\n }\n }\n\n render(this.getMajorTickPositions(), majorGridLines);\n render(this.getMinorTickPositions(), minorGridLines, majorUnit / minorUnit);\n\n return container.children;\n },\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\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\n if (vertical) {\n this.box = new Box(\n box.x1, box.y1,\n box.x1 + maxLabelSize + space, box.y2\n );\n } else {\n this.box = new Box(\n box.x1, box.y1,\n box.x2, box.y1 + maxLabelSize + space\n );\n }\n\n this.arrangeTitle();\n this.arrangeLabels();\n this.arrangeNotes();\n },\n\n getLabelsTickPositions: function() {\n return this.getMajorTickPositions();\n },\n\n labelTickIndex: function(label) {\n return label.index;\n },\n\n arrangeLabels: function() {\n var this$1$1 = this;\n\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 mirror = options.labels.mirror;\n var tickPositions = this.getLabelsTickPositions();\n\n for (var idx = 0; idx < labels.length; idx++) {\n var label = labels[idx];\n var tickIx = this$1$1.labelTickIndex(label);\n var labelSize = vertical ? label.box.height() : label.box.width();\n var firstTickPosition = tickPositions[tickIx];\n var nextTickPosition = tickPositions[tickIx + 1];\n var positionStart = (void 0), positionEnd = (void 0);\n\n if (vertical) {\n if (labelsBetweenTicks) {\n var middle = firstTickPosition + (nextTickPosition - firstTickPosition) / 2;\n positionStart = middle - (labelSize / 2);\n } else {\n positionStart = firstTickPosition - (labelSize / 2);\n }\n\n positionEnd = positionStart;\n } else {\n if (labelsBetweenTicks) {\n positionStart = firstTickPosition;\n positionEnd = nextTickPosition;\n } else {\n positionStart = firstTickPosition - (labelSize / 2);\n positionEnd = positionStart + labelSize;\n }\n }\n\n this$1$1.positionLabel(label, mirror, positionStart, positionEnd);\n }\n },\n\n positionLabel: function(label, mirror, positionStart, positionEnd) {\n if (positionEnd === void 0) { positionEnd = positionStart; }\n\n var options = this.options;\n var vertical = options.vertical;\n var lineBox = this.lineBox();\n var labelOffset = this.getActualTickSize() + options.margin;\n var labelBox;\n\n if (vertical) {\n var labelX = lineBox.x2;\n\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\n labelBox = label.box.move(labelX, positionStart);\n } else {\n var labelY = lineBox.y1;\n\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\n labelBox = new Box(\n positionStart, labelY,\n positionEnd, labelY + label.box.height()\n );\n }\n\n label.reflow(labelBox);\n },\n\n autoRotateLabelAngle: function(labelBox, slotWidth) {\n if (labelBox.width() < slotWidth) {\n return 0;\n }\n\n if (labelBox.height() > slotWidth) {\n return -90;\n }\n\n return -45;\n },\n\n autoRotateLabels: function() {\n var this$1$1 = this;\n\n if (!this.options.autoRotateLabels || this.options.vertical) {\n return false;\n }\n\n var tickPositions = this.getMajorTickPositions();\n var labels = this.labels;\n var limit = Math.min(labels.length, tickPositions.length - 1);\n var angle = 0;\n\n for (var idx = 0; idx < limit; idx++) {\n var width = Math.abs(tickPositions[idx + 1] - tickPositions[idx]);\n var labelBox = labels[idx].box;\n var labelAngle = this$1$1.autoRotateLabelAngle(labelBox, width);\n\n if (labelAngle !== 0) {\n angle = labelAngle;\n }\n\n if (angle === -90) {\n break;\n }\n }\n\n if (angle !== 0) {\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\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\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\n title.reflow(this.box);\n }\n },\n\n arrangeNotes: function() {\n var this$1$1 = this;\n\n for (var idx = 0; idx < this.notes.length; idx++) {\n var item = this$1$1.notes[idx];\n var value = item.options.value;\n var slot = (void 0);\n\n if (defined(value)) {\n if (this$1$1.shouldRenderNote(value)) {\n item.show();\n } else {\n item.hide();\n }\n\n slot = this$1$1.noteSlot(value);\n } else {\n item.hide();\n }\n\n item.reflow(slot || this$1$1.lineBox());\n }\n },\n\n noteSlot: function(value) {\n return this.getSlot(value);\n },\n\n alignTo: function(secondAxis) {\n var lineBox = secondAxis.lineBox();\n var vertical = this.options.vertical;\n var pos = vertical ? Y : X;\n\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\n axisLabelText: function(value, options, context) {\n var this$1$1 = this;\n\n var text;\n var tmpl = getTemplate(options);\n var defaultText = function () {\n if (!options.format) {\n return value;\n }\n\n return this$1$1.chartService.format.localeAuto(\n options.format, [ value ], options.culture\n );\n };\n\n if (tmpl) {\n var templateContext = $.extend({}, context, {\n get text() { return defaultText(); },\n value: value,\n format: options.format,\n culture: options.culture\n });\n\n text = tmpl(templateContext);\n } else {\n text = defaultText();\n }\n\n return text;\n },\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\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\n return box;\n },\n\n maxLabelOffset: function() {\n var this$1$1 = this;\n\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\n for (var idx = 0; idx < labels.length; idx++) {\n var label = labels[idx];\n var tickIx = this$1$1.labelTickIndex(label);\n var startTick = (void 0), endTick = (void 0);\n\n if (labelsBetweenTicks) {\n startTick = tickPositions[tickIx + startPosition];\n endTick = tickPositions[tickIx + endPosition];\n } else {\n startTick = endTick = tickPositions[tickIx];\n }\n\n maxStartOffset = Math.max(maxStartOffset, startTick - label.box[offsetField + 1]);\n maxEndOffset = Math.max(maxEndOffset, label.box[offsetField + 2] - endTick);\n }\n\n return {\n start: maxStartOffset,\n end: maxEndOffset\n };\n },\n\n limitRange: function(from, to, min, max, offset) {\n var options = this.options;\n\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\n if ((to < min && offset > 0) || (max < from && offset < 0)) {\n return {\n min: from,\n max: to\n };\n }\n\n var rangeSize = to - from;\n var minValue = from;\n var maxValue = to;\n\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\n return {\n min: minValue,\n max: maxValue\n };\n },\n\n valueRange: function() {\n return {\n min: this.seriesMin,\n max: this.seriesMax\n };\n },\n\n lineDir: function() {\n /*\n * Axis line direction:\n * * Vertical: up.\n * * Horizontal: right.\n */\n\n var ref = this.options;\n var vertical = ref.vertical;\n var reverse = ref.reverse;\n return (vertical ? -1 : 1) * (reverse ? -1 : 1);\n },\n\n lineInfo: function() {\n var ref = this.options;\n var vertical = ref.vertical;\n var lineBox = this.lineBox();\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var axis = vertical ? Y : X;\n var axisDir = this.lineDir();\n var startEdge = axisDir === 1 ? 1 : 2;\n var axisOrigin = axis + startEdge.toString();\n var lineStart = lineBox[axisOrigin];\n\n return {\n axis: axis,\n axisOrigin: axisOrigin,\n axisDir: axisDir,\n lineBox: lineBox,\n lineSize: lineSize,\n lineStart: lineStart\n };\n },\n\n pointOffset: function(point) {\n var ref = this.lineInfo();\n var axis = ref.axis;\n var axisDir = ref.axisDir;\n var axisOrigin = ref.axisOrigin;\n var lineBox = ref.lineBox;\n var lineSize = ref.lineSize;\n var relative = axisDir > 0 ? point[axis] - lineBox[axisOrigin] : lineBox[axisOrigin] - point[axis];\n var offset = relative / lineSize;\n\n return offset;\n },\n\n scaleToDelta: function(rawScale, range) {\n // Scale >= 1 would result in axis range of 0.\n // Scale <= -1 would reverse the scale direction.\n var MAX_SCALE = 0.999;\n var scale = limitValue(rawScale, -MAX_SCALE, MAX_SCALE);\n\n var delta;\n if (scale > 0) {\n delta = range * Math.min(1, scale);\n } else {\n delta = range - (range / (1 + scale));\n }\n\n return delta;\n },\n\n labelsBetweenTicks: function() {\n return !this.options.justified;\n },\n\n prepareUserOptions: function() {\n }\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 // TODO: Move to line or labels options\n margin: 5,\n visible: true,\n reverse: false,\n justified: true,\n notes: {\n label: {\n text: \"\"\n }\n },\n\n _alignLines: true,\n _deferLabels: false\n });\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\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\n function absoluteDateDiff(a, b) {\n var diff = a.getTime() - b;\n var offsetDiff = a.getTimezoneOffset() - b.getTimezoneOffset();\n\n return diff - (offsetDiff * TIME_PER_MINUTE);\n }\n\n function addTicks(date, ticks) {\n return new Date(date.getTime() + ticks);\n }\n\n function toDate(value) {\n var result;\n\n if (value instanceof Date) {\n result = value;\n } else if (value) {\n result = new Date(value);\n }\n\n return result;\n }\n\n function startOfWeek(date, weekStartDay) {\n if (weekStartDay === void 0) { weekStartDay = 0; }\n\n var daysToSubtract = 0;\n var day = date.getDay();\n\n if (!isNaN(day)) {\n while (day !== weekStartDay) {\n if (day === 0) {\n day = 6;\n } else {\n day--;\n }\n\n daysToSubtract++;\n }\n }\n\n return addTicks(date, -daysToSubtract * TIME_PER_DAY);\n }\n\n function adjustDST(date, hours) {\n if (hours === 0 && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n return true;\n }\n\n return false;\n }\n\n function addHours(date, hours) {\n var roundedDate = new Date(date);\n\n roundedDate.setMinutes(0, 0, 0);\n\n var tzDiff = (date.getTimezoneOffset() - roundedDate.getTimezoneOffset()) * TIME_PER_MINUTE;\n\n return addTicks(roundedDate, tzDiff + hours * TIME_PER_HOUR);\n }\n\n function addDuration(dateValue, value, unit, weekStartDay) {\n var result = dateValue;\n\n if (dateValue) {\n var date = toDate(dateValue);\n var hours = date.getHours();\n\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\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\n if (unit !== MILLISECONDS && result.getMilliseconds() > 0) {\n result.setMilliseconds(0);\n }\n }\n\n return result;\n }\n\n function floorDate(date, unit, weekStartDay) {\n return addDuration(toDate(date), 0, unit, weekStartDay);\n }\n\n function ceilDate(dateValue, unit, weekStartDay) {\n var date = toDate(dateValue);\n\n if (date && floorDate(date, unit, weekStartDay).getTime() === date.getTime()) {\n return date;\n }\n\n return addDuration(date, 1, unit, weekStartDay);\n }\n\n function dateComparer(a, b) {\n if (a && b) {\n return a.getTime() - b.getTime();\n }\n\n return -1;\n }\n\n function dateDiff(a, b) {\n return a.getTime() - b;\n }\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\n return result;\n } else if (value) {\n return toDate(value).getTime();\n }\n }\n\n function dateEquals(a, b) {\n if (a && b) {\n return toTime(a) === toTime(b);\n }\n\n return a === b;\n }\n\n function timeIndex(date, start, baseUnit) {\n return absoluteDateDiff(date, start) / TIME_PER_UNIT[baseUnit];\n }\n\n function dateIndex(value, start, baseUnit, baseUnitStep) {\n var date = toDate(value);\n var startDate = toDate(start);\n var index;\n\n if (baseUnit === MONTHS) {\n index = (date.getMonth() - startDate.getMonth() + (date.getFullYear() - startDate.getFullYear()) * 12) +\n 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\n return index / baseUnitStep;\n }\n\n function duration(a, b, unit) {\n var diff;\n\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\n return diff;\n }\n\n function lteDateIndex(date, sortedDates) {\n var low = 0;\n var high = sortedDates.length - 1;\n var index;\n\n while (low <= high) {\n index = Math.floor((low + high) / 2);\n var currentDate = sortedDates[index];\n\n if (currentDate < date) {\n low = index + 1;\n continue;\n }\n\n if (currentDate > date) {\n high = index - 1;\n continue;\n }\n\n while (dateEquals(sortedDates[index - 1], date)) {\n index--;\n }\n\n return index;\n }\n\n if (sortedDates[index] <= date) {\n return index;\n }\n\n return index - 1;\n }\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\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\n return result;\n }\n\n return parseDate(intlService, dates);\n }\n\n function firstDay(options, intlService) {\n if (isNumber(options.weekStartDay)) {\n return options.weekStartDay;\n }\n\n if (intlService && intlService.firstDay) {\n return intlService.firstDay();\n }\n\n return 0;\n }\n\n var MIN_CATEGORY_POINTS_RANGE = 0.01;\n var MIN_CATEGORY_RANGE = 0.1;\n\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\n return -1;\n }\n\n return arr.indexOf(value);\n }\n\n var CategoryAxis = Axis.extend({\n initFields: function() {\n this._ticks = {};\n },\n\n categoriesHash: function() {\n return \"\";\n },\n\n clone: function() {\n var copy = new CategoryAxis($.extend({}, this.options, {\n categories: this.options.srcCategories\n }), this.chartService);\n copy.createLabels();\n\n return copy;\n },\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\n if ((definedMin || definedMax) && categories.length) {\n var min = definedMin ? Math.floor(options.min) : 0;\n var max;\n\n if (definedMax) {\n max = options.justified ? Math.floor(options.max) + 1 : Math.ceil(options.max);\n } else {\n max = categories.length;\n }\n\n options.categories = options.categories.slice(min, max);\n }\n\n return options;\n },\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\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\n return {\n min: min,\n max: max\n };\n },\n\n totalRangeIndices: function(limit) {\n var options = this.options;\n var min = isNumber(options.min) ? options.min : 0;\n var max;\n\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\n if (limit) {\n var totalRange = this.totalRange();\n min = limitValue(min, 0, totalRange.max);\n max = limitValue(max, 0, totalRange.max);\n }\n\n return {\n min: min,\n max: max\n };\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\n return {\n min: min,\n max: max\n };\n },\n\n roundedRange: function() {\n return this.range();\n },\n\n totalRange: function() {\n var options = this.options;\n return { min: 0, 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\n return {\n scale: scale * (this.options.reverse ? -1 : 1),\n box: lineBox,\n min: min,\n max: max\n };\n },\n\n arrangeLabels: function() {\n Axis.fn.arrangeLabels.call(this);\n this.hideOutOfRangeLabels();\n },\n\n hideOutOfRangeLabels: function() {\n var ref = this;\n var box = ref.box;\n var labels = ref.labels;\n\n if (labels.length > 0) {\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\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\n getMajorTickPositions: function() {\n return this.getTicks().majorTicks;\n },\n\n getMinorTickPositions: function() {\n return this.getTicks().minorTicks;\n },\n\n getLabelsTickPositions: function() {\n return this.getTicks().labelTicks;\n },\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\n while (current <= limit) {\n indices.push(current);\n current += stepSize;\n }\n\n return indices;\n },\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\n for (var idx = 0; idx < indices.length; idx++) {\n positions.push(pos + round(scale * (indices[idx] - min), COORD_PRECISION));\n }\n\n return positions;\n },\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\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\n return cache;\n },\n\n filterOutOfRangePositions: function(positions, lineBox) {\n if (!positions.length) {\n return positions;\n }\n\n var axis = this.options.vertical ? Y : X;\n var inRange = function (position) { 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\n var endIndex = end;\n\n while (!inRange(positions[endIndex]) && endIndex >= 0) {\n endIndex--;\n }\n\n return positions.slice(startIndex, endIndex + 1);\n },\n\n lineInfo: function() {\n var ref = this.options;\n var vertical = ref.vertical;\n var reverse = ref.reverse;\n var lineBox = this.lineBox();\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var axis = vertical ? Y : X;\n var axisDir = reverse ? -1 : 1;\n var startEdge = axisDir === 1 ? 1 : 2;\n var axisOrigin = axis + startEdge.toString();\n var lineStart = lineBox[axisOrigin];\n\n return {\n axis: axis,\n axisOrigin: axisOrigin,\n axisDir: axisDir,\n lineBox: lineBox,\n lineSize: lineSize,\n lineStart: lineStart\n };\n },\n\n lineDir: function() {\n /*\n * Category axis line direction:\n * * Vertical: down.\n * * Horizontal: right.\n */\n\n var ref = this.options;\n var reverse = ref.reverse;\n return reverse ? -1 : 1;\n },\n\n getSlot: function(from, to, limit) {\n var options = this.options;\n var reverse = options.reverse;\n var justified = options.justified;\n var ref = this.scaleOptions();\n var scale = ref.scale;\n var box = ref.box;\n var min = ref.min;\n var ref$1 = this.lineInfo();\n var valueAxis = ref$1.axis;\n var lineStart = ref$1.lineStart;\n\n var slotBox = box.clone();\n var singleSlot = !defined(to);\n\n var start = valueOrDefault(from, 0);\n var end = valueOrDefault(to, start);\n end = Math.max(end - 1, start);\n\n // Fixes transient bug caused by iOS 6.0 JIT\n // (one can never be too sure)\n end = Math.max(start, end);\n\n var p1 = lineStart + (start - min) * scale;\n var p2 = lineStart + (end + 1 - min) * scale;\n\n if (singleSlot && justified) {\n p2 = p1;\n }\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\n slotBox[valueAxis + 1] = reverse ? p2 : p1;\n slotBox[valueAxis + 2] = reverse ? p1 : p2;\n\n return slotBox;\n },\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\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\n return limittedSlot;\n },\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\n if (typeof start === \"string\") {\n start = this.categoryIndex(start);\n } else if (isNumber(start)) {\n start -= min;\n }\n\n if (typeof end === \"string\") {\n end = this.categoryIndex(end);\n } else if (isNumber(end)) {\n end -= min;\n }\n\n return Axis.fn.slot.call(this, start, end, limit);\n },\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\n if (pos < lineStart || pos > lineEnd) {\n return null;\n }\n\n var value = startValue + (pos - lineStart) / scale;\n var diff = value % 1;\n\n if (justified) {\n value = Math.round(value);\n } else if (diff === 0 && value > 0) {\n value--;\n }\n\n return Math.floor(value);\n },\n\n getCategory: function(point) {\n var index = this.pointCategoryIndex(point);\n\n if (index === null) {\n return null;\n }\n\n return this.options.categories[index];\n },\n\n categoryIndex: function(value) {\n return this.totalIndex(value) - Math.floor(this.options.min || 0);\n },\n\n categoryAt: function(index, total) {\n var options = this.options;\n\n return (total ? options.srcCategories : options.categories)[index];\n },\n\n categoriesCount: function() {\n return (this.options.categories || []).length;\n },\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\n return {\n min: offset,\n max: range + offset\n };\n },\n\n scaleRange: function(scale, cursor) {\n var position = Math.abs(this.pointOffset(cursor));\n var rangeIndices = this.totalRangeIndices();\n var range = rangeIndices.max - rangeIndices.min;\n var delta = this.scaleToDelta(scale, range);\n var minDelta = position * delta;\n var maxDelta = (1 - position) * delta;\n var min = rangeIndices.min + minDelta;\n var max = rangeIndices.max - maxDelta;\n\n if (max - min < MIN_CATEGORY_RANGE) {\n max = min + MIN_CATEGORY_RANGE;\n }\n\n return {\n min: min,\n max: max\n };\n },\n\n zoomRange: function(scale, cursor) {\n var ref = this.totalRange();\n var totalMin = ref.min;\n var totalMax = ref.max;\n var range = this.scaleRange(scale, cursor);\n\n return {\n min: limitValue(range.min, totalMin, totalMax),\n max: limitValue(range.max, totalMin, totalMax)\n };\n },\n\n labelsCount: function() {\n var labelsRange = this.labelsRange();\n\n return labelsRange.max - labelsRange.min;\n },\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\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\n var skip;\n\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\n return {\n min: skip - start,\n max: (options.categories.length ? max + (justified ? 1 : 0) : 0) - start\n };\n },\n\n createAxisLabel: function(index, labelOptions, labelContext) {\n var options = this.options;\n var dataItem = options.dataItems ? options.dataItems[index] : null;\n var category = valueOrDefault(options.categories[index], \"\");\n\n labelContext.dataItem = dataItem;\n var text = this.axisLabelText(category, labelOptions, labelContext);\n\n return new AxisLabel(category, text, index, dataItem, labelOptions);\n },\n\n shouldRenderNote: function(value) {\n var range = this.totalRangeIndices();\n\n return Math.floor(range.min) <= value && value <= Math.ceil(range.max);\n },\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\n arrangeNotes: function() {\n Axis.fn.arrangeNotes.call(this);\n this.hideOutOfRangeNotes();\n },\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\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\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\n return this.limitRange(min, max, 0, totalRange.max, offset);\n },\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\n var diffStart = start[valueAxis] - lineStart;\n var diffEnd = end[valueAxis] - lineStart;\n\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\n if (rangeMax - rangeMin >= MIN_CATEGORY_POINTS_RANGE) {\n return {\n min: rangeMin,\n max: rangeMax\n };\n }\n },\n\n valueRange: function() {\n return this.range();\n },\n\n totalIndex: function(value) {\n var options = this.options;\n var index = this._categoriesMap ?\n this._categoriesMap.get(value) : indexOf(value, options.srcCategories);\n\n return index;\n },\n\n currentRangeIndices: function() {\n var options = this.options;\n var min = 0;\n\n if (isNumber(options.min)) {\n min = Math.floor(options.min);\n }\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\n return {\n min: min,\n max: max\n };\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\n totalCount: function() {\n return Math.max(this.options.srcCategories.length, this._seriesMax || 0);\n }\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: {\n zIndex: 1\n },\n justified: false,\n _deferLabels: true\n });\n\n var COORDINATE_LIMIT = 300000;\n\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\n var ZERO_THRESHOLD = 0.2;\n\n var AUTO = \"auto\";\n var BASE_UNITS = [\n MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS, WEEKS, MONTHS, YEARS\n ];\n var FIT = \"fit\";\n\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\n return range;\n }\n\n var EmptyDateRange = Class.extend({\n init: function(options) {\n this.options = options;\n },\n\n displayIndices: function() {\n return {\n min: 0,\n max: 1\n };\n },\n\n displayRange: function() {\n return {};\n },\n\n total: function() {\n return {};\n },\n\n valueRange: function() {\n return {};\n },\n\n valueIndex: function() {\n return -1;\n },\n\n values: function() {\n return [];\n },\n\n totalIndex: function() {\n return -1;\n },\n\n valuesCount: function() {\n return 0;\n },\n\n totalCount: function() {\n return 0;\n },\n\n dateAt: function() {\n return null;\n }\n });\n\n var DateRange = Class.extend({\n init: function(start, end, options) {\n this.options = options;\n options.baseUnitStep = options.baseUnitStep || 1;\n\n var roundToBaseUnit = options.roundToBaseUnit;\n var justified = options.justified;\n\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\n this.end = this.roundToTotalStep(end, !justified, expandEnd ? 1 : 0);\n\n var min = options.min || start;\n this.valueStart = this.roundToTotalStep(min);\n this.displayStart = roundToBaseUnit ? this.valueStart : min;\n\n var max = options.max;\n if (!max) {\n this.valueEnd = lowerEnd;\n this.displayEnd = roundToBaseUnit || expandEnd ? this.end : end;\n } else {\n var next = !justified && dateEquals(max, this.roundToTotalStep(max)) ? -1 : 0;\n this.valueEnd = this.roundToTotalStep(max, false, next);\n this.displayEnd = roundToBaseUnit ? this.roundToTotalStep(max, !justified) : options.max;\n }\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\n displayRange: function() {\n return {\n min: this.displayStart,\n max: this.displayEnd\n };\n },\n\n displayIndices: function() {\n if (!this._indices) {\n var options = this.options;\n\n var baseUnit = options.baseUnit;\n var baseUnitStep = options.baseUnitStep;\n\n var minIdx = dateIndex(this.displayStart, this.valueStart, baseUnit, baseUnitStep);\n var maxIdx = dateIndex(this.displayEnd, this.valueStart, baseUnit, baseUnitStep);\n\n this._indices = { min: minIdx, max: maxIdx };\n }\n\n return this._indices;\n },\n\n total: function() {\n return {\n min: this.start,\n max: this.end\n };\n },\n\n totalCount: function() {\n var last$$1 = this.totalIndex(this.end);\n\n return last$$1 + (this.options.justified ? 1 : 0);\n },\n\n valueRange: function() {\n return {\n min: this.valueStart,\n max: this.valueEnd\n };\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\n totalIndex: function(value) {\n var options = this.options;\n return Math.floor(dateIndex(value, this.start, options.baseUnit, options.baseUnitStep));\n },\n\n dateIndex: function(value) {\n var options = this.options;\n return dateIndex(value, this.valueStart, options.baseUnit, options.baseUnitStep);\n },\n\n valuesCount: function() {\n var maxIdx = this.valueIndex(this.valueEnd);\n\n return maxIdx + 1;\n },\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\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\n return values;\n },\n\n dateAt: function(index, total) {\n var options = this.options;\n\n return addDuration(total ? this.start : this.valueStart, options.baseUnitStep * index, options.baseUnit, options.weekStartDay);\n },\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\n var step = dateIndex(value, start, baseUnit, baseUnitStep);\n var roundedStep = upper ? Math.ceil(step) : Math.floor(step);\n\n if (next) {\n roundedStep += next;\n }\n\n return addDuration(start, roundedStep * baseUnitStep, baseUnit, weekStartDay);\n }\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\n while (!step || units >= maxDateGroups) {\n unitSteps = unitSteps || autoBaseUnitSteps[baseUnit].slice(0);\n\n do {\n nextStep = unitSteps.shift();\n } while (nextStep && startUnit === baseUnit && nextStep < startStep);\n\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\n options.baseUnitStep = step;\n options.baseUnit = baseUnit;\n }\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\n for (var categoryIx = 0; categoryIx < count; categoryIx++) {\n var category = categories[categoryIx];\n\n if (category && lastCategory) {\n var diff = absoluteDateDiff(category, lastCategory);\n if (diff > 0) {\n minDiff = Math.min(minDiff, diff);\n\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\n lastCategory = category;\n }\n\n options.baseUnit = unit || DAYS;\n }\n\n function initUnit(options) {\n var baseUnit = (options.baseUnit || \"\").toLowerCase();\n var useDefault = baseUnit !== FIT && !inArray(baseUnit, BASE_UNITS);\n\n if (useDefault) {\n defaultBaseUnit(options);\n }\n\n if (baseUnit === FIT || options.baseUnitStep === AUTO) {\n autoBaseUnit(options);\n }\n\n return options;\n }\n\n var DateCategoryAxis = CategoryAxis.extend({\n clone: function() {\n var copy = new DateCategoryAxis($.extend({}, this.options), this.chartService);\n copy.createLabels();\n\n return copy;\n },\n\n categoriesHash: function() {\n var start = this.dataRange.total().min;\n return this.options.baseUnit + this.options.baseUnitStep + start;\n },\n\n initUserOptions: function(options) {\n return options;\n },\n\n initFields: function() {\n CategoryAxis.fn.initFields.call(this);\n\n var chartService = this.chartService;\n var intlService = chartService.intl;\n var options = this.options;\n\n var categories = options.categories || [];\n if (!categories._parsed) {\n categories = parseDates(intlService, categories);\n categories._parsed = true;\n }\n\n options = deepExtend({\n roundToBaseUnit: true\n }, options, {\n categories: categories,\n min: parseDate(intlService, options.min),\n max: parseDate(intlService, options.max),\n weekStartDay: firstDay(options, intlService)\n });\n\n if (chartService.panning && chartService.isPannable(options.vertical ? Y : X)) {\n options.roundToBaseUnit = false;\n }\n\n options.userSetBaseUnit = options.userSetBaseUnit || options.baseUnit;\n options.userSetBaseUnitStep = options.userSetBaseUnitStep || options.baseUnitStep;\n\n this.options = options;\n options.srcCategories = categories;\n\n if (categories.length > 0) {\n var range = categoryRange(categories);\n var maxDivisions = options.maxDivisions;\n\n this.dataRange = new DateRange(range.min, range.max, initUnit(options));\n\n if (maxDivisions) {\n var dataRange = this.dataRange.displayRange();\n\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\n var dataRangeOptions = this.dataRange.options;\n\n autoBaseUnit(divisionOptions, dataRangeOptions.baseUnit, dataRangeOptions.baseUnitStep);\n\n this.divisionRange = new DateRange(range.min, range.max, divisionOptions);\n } else {\n this.divisionRange = this.dataRange;\n }\n\n } else {\n options.baseUnit = options.baseUnit || DAYS;\n this.dataRange = this.divisionRange = new EmptyDateRange(options);\n }\n\n this.rangeLabels = [];\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\n if (!this.options.maxDivisions || !valuesCount) {\n return CategoryAxis.fn.tickIndices.call(this, stepSize);\n }\n\n var indices = [];\n var values = divisionRange.values();\n var offset = 0;\n\n if (!this.options.justified) {\n values = values.concat(divisionRange.dateAt(valuesCount));\n offset = 0.5;//align ticks to the center of not justified categories\n }\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\n return indices;\n },\n\n shouldRenderNote: function(value) {\n var range = this.range();\n var categories = this.options.categories || [];\n\n return dateComparer(value, range.min) >= 0 && dateComparer(value, range.max) <= 0 && categories.length;\n },\n\n parseNoteValue: function(value) {\n return parseDate(this.chartService.intl, value);\n },\n\n noteSlot: function(value) {\n return this.getSlot(value);\n },\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\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\n range = {\n min: addDuration(from, 0, baseUnit, weekStartDay),\n max: addDuration(to, 0, baseUnit, weekStartDay)\n };\n }\n\n return range;\n },\n\n labelsRange: function() {\n return {\n min: this.options.labels.skip,\n max: this.divisionRange.valuesCount()\n };\n },\n\n pan: function(delta) {\n if (this.isEmpty()) {\n return null;\n }\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\n var panRange = this.limitRange(toTime(from), toTime(to), toTime(totalLimits.min), toTime(totalLimits.max), offset);\n\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\n return panRange;\n }\n },\n\n pointsRange: function(start, end) {\n if (this.isEmpty()) {\n return null;\n }\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\n var min = addTicks(datesRange.min, pointsRange.min * scale);\n var max = addTicks(datesRange.min, pointsRange.max * scale);\n\n return {\n min: min,\n max: max,\n baseUnit: options.userSetBaseUnit || options.baseUnit,\n baseUnitStep: options.userSetBaseUnitStep || options.baseUnitStep\n };\n },\n\n scaleRange: function(scale, cursor) {\n if (this.isEmpty()) {\n return {};\n }\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\n var position = Math.abs(this.pointOffset(cursor));\n var range = rangeMax - rangeMin;\n var delta = this.scaleToDelta(scale, range);\n var minDelta = Math.round(position * delta);\n var maxDelta = Math.round((1 - position) * delta);\n\n var ref$1 = this.dataRange.options;\n var baseUnit = ref$1.baseUnit;\n var min = new Date(rangeMin.getTime() + minDelta);\n var max = new Date(rangeMax.getTime() - maxDelta);\n\n if (fit) {\n var autoBaseUnitSteps = options.autoBaseUnitSteps;\n var maxDateGroups = options.maxDateGroups;\n\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\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\n } else if (diff > maxDiff && baseUnit !== YEARS) {\n var stepIndex = 0;\n\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\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\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\n zoomRange: function(scale, cursor) {\n var totalLimits = this.dataRange.total();\n var range = this.scaleRange(scale, cursor);\n\n if (range) {\n if (range.min < totalLimits.min) {\n range.min = totalLimits.min;\n }\n if (range.max > totalLimits.max) {\n range.max = totalLimits.max;\n }\n }\n\n return range;\n },\n\n range: function() {\n return this.dataRange.displayRange();\n },\n\n createLabels: function() {\n CategoryAxis.fn.createLabels.call(this);\n this.createRangeLabels();\n },\n\n clearLabels: function() {\n CategoryAxis.fn.clearLabels.call(this);\n this.rangeLabels = [];\n },\n\n arrangeLabels: function() {\n this.arrangeRangeLabels();\n CategoryAxis.fn.arrangeLabels.call(this);\n },\n\n arrangeRangeLabels: function() {\n var ref = this;\n var options = ref.options;\n var rangeLabels = ref.rangeLabels;\n if (rangeLabels.length === 0) {\n return;\n }\n\n var lineBox = this.lineBox();\n var vertical = options.vertical;\n var mirror = options.rangeLabels.mirror || options.labels.mirror;\n\n var firstLabel = rangeLabels[0];\n if (firstLabel) {\n var position = vertical ? lineBox.y1 - (firstLabel.box.height() / 2) : lineBox.x1;\n this.positionLabel(firstLabel, mirror, position);\n }\n\n var lastLabel = rangeLabels[1];\n if (lastLabel) {\n var position$1 = vertical ? lineBox.y2 - (lastLabel.box.height() / 2) : lineBox.x2;\n this.positionLabel(lastLabel, mirror, position$1);\n }\n },\n\n autoRotateLabels: function() {\n CategoryAxis.fn.autoRotateLabels.call(this);\n this.autoRotateRangeLabels();\n },\n\n hideOutOfRangeLabels: function() {\n CategoryAxis.fn.hideOutOfRangeLabels.call(this);\n this.hideOverlappingLabels();\n },\n\n hideOverlappingLabels: function() {\n var ref = this;\n var rangeLabels = ref.rangeLabels;\n var labels = ref.labels;\n if (rangeLabels.length === 0) {\n return;\n }\n\n function clip(rangeLabel, label) {\n if (!label.options.visible || label.box.overlaps(rangeLabel.box)) {\n label.options.visible = false;\n return true;\n }\n\n return false;\n }\n\n var firstRangeLabel = rangeLabels[0];\n if (firstRangeLabel && firstRangeLabel.options.visible) {\n for (var i = 0; i < labels.length; i++) {\n var overlaps = clip(firstRangeLabel, labels[i]);\n if (!overlaps) {\n break;\n }\n }\n }\n\n var lastRangeLabel = rangeLabels[1];\n if (lastRangeLabel && lastRangeLabel.options.visible) {\n for (var i$1 = labels.length - 1; i$1 > 0; --i$1) {\n var overlaps$1 = clip(lastRangeLabel, labels[i$1]);\n if (!overlaps$1) {\n break;\n }\n }\n }\n },\n\n contentBox: function() {\n var box = CategoryAxis.fn.contentBox.call(this);\n var rangeLabels = this.rangeLabels;\n\n for (var i = 0; i < rangeLabels.length; i++) {\n var label = rangeLabels[i];\n if (label.options.visible) {\n box.wrap(label.box);\n }\n }\n\n return box;\n },\n\n createAxisLabel: function(index, labelOptions, labelContext) {\n if (labelContext === void 0) { labelContext = {}; }\n\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\n labelOptions.format = labelOptions.format || unitFormat;\n labelContext.dataItem = dataItem;\n\n var text = this.axisLabelText(date, labelOptions, labelContext);\n if (text) {\n return new AxisLabel(date, text, index, dataItem, labelOptions);\n }\n },\n\n createRangeLabels: function() {\n var this$1$1 = this;\n\n var ref = this.divisionRange;\n var displayStart = ref.displayStart;\n var displayEnd = ref.displayEnd;\n var options = this.options;\n var labelOptions = $.extend({}, options.labels, options.rangeLabels, {\n align: CENTER,\n zIndex: options.zIndex\n });\n\n if (labelOptions.visible !== true) {\n return;\n }\n\n this.normalizeLabelRotation(labelOptions);\n labelOptions.alignRotation = CENTER;\n\n if (labelOptions.rotation === \"auto\") {\n labelOptions.rotation = 0;\n options.autoRotateRangeLabels = true;\n }\n\n var unitFormat = labelOptions.dateFormats[this.divisionRange.options.baseUnit];\n labelOptions.format = labelOptions.format || unitFormat;\n\n var createLabel = function (index, date, text) {\n if (text) {\n var label = new AxisLabel(date, text, index, null, labelOptions);\n this$1$1.append(label);\n this$1$1.rangeLabels.push(label);\n }\n };\n\n var startText = this.axisLabelText(displayStart, labelOptions, { index: 0, count: 2 });\n createLabel(0, displayStart, startText);\n\n var endText = this.axisLabelText(displayEnd, labelOptions, { index: 1, count: 2 });\n createLabel(1, displayEnd, endText);\n },\n\n autoRotateRangeLabels: function() {\n var this$1$1 = this;\n\n var labels = this.rangeLabels;\n if (!this.options.autoRotateRangeLabels || this.options.vertical || labels.length !== 2) {\n return;\n }\n\n var rotateLabel = function (label, tickPositions, index) {\n var width = Math.abs(tickPositions[index + 1] - tickPositions[index]) * 2;\n var angle = this$1$1.autoRotateLabelAngle(label.box, width);\n if (angle !== 0) {\n label.options.rotation = angle;\n label.reflow(new Box());\n }\n };\n\n var tickPositions = this.getMajorTickPositions();\n rotateLabel(labels[0], tickPositions, 0);\n rotateLabel(labels[1], tickPositions, tickPositions.length - 2);\n },\n\n categoryIndex: function(value) {\n return this.dataRange.valueIndex(value);\n },\n\n slot: function(from, to, limit) {\n var dateRange = this.dataRange;\n var start = from;\n var end = to;\n\n if (start instanceof Date) {\n start = dateRange.dateIndex(start);\n }\n\n if (end instanceof Date) {\n end = dateRange.dateIndex(end);\n }\n\n var slot = this.getSlot(start, end, limit);\n if (slot) {\n return slot.toRect();\n }\n },\n\n getSlot: function(a, b, limit) {\n var start = a;\n var end = b;\n\n if (typeof start === OBJECT) {\n start = this.categoryIndex(start);\n }\n\n if (typeof end === OBJECT) {\n end = this.categoryIndex(end);\n }\n\n return CategoryAxis.fn.getSlot.call(this, start, end, limit);\n },\n\n valueRange: function() {\n var options = this.options;\n var range = categoryRange(options.srcCategories);\n\n return {\n min: toDate(range.min),\n max: toDate(range.max)\n };\n },\n\n categoryAt: function(index, total) {\n return this.dataRange.dateAt(index, total);\n },\n\n categoriesCount: function() {\n return this.dataRange.valuesCount();\n },\n\n rangeIndices: function() {\n return this.dataRange.displayIndices();\n },\n\n labelsBetweenTicks: function() {\n return !this.divisionRange.options.justified;\n },\n\n prepareUserOptions: function() {\n if (this.isEmpty()) {\n return;\n }\n\n this.options.categories = this.dataRange.values();\n },\n\n getCategory: function(point) {\n var index = this.pointCategoryIndex(point);\n\n if (index === null) {\n return null;\n }\n\n return this.dataRange.dateAt(index);\n },\n\n totalIndex: function(value) {\n return this.dataRange.totalIndex(value);\n },\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\n totalRange: function() {\n return this.dataRange.total();\n },\n\n totalCount: function() {\n return this.dataRange.totalCount();\n },\n\n isEmpty: function() {\n return !this.options.srcCategories.length;\n },\n\n roundedRange: function() {\n if (this.options.roundToBaseUnit !== false || this.isEmpty()) {\n return this.range();\n }\n\n var options = this.options;\n var datesRange = categoryRange(options.srcCategories);\n\n var dateRange = new DateRange(datesRange.min, datesRange.max, $.extend({}, options, {\n justified: false,\n roundToBaseUnit: true,\n justifyEnd: options.justified\n }));\n\n return dateRange.displayRange();\n }\n });\n\n setDefaultOptions(DateCategoryAxis, {\n type: DATE,\n labels: {\n dateFormats: DateLabelFormats\n },\n rangeLabels: {\n visible: false\n },\n autoBaseUnitSteps: {\n milliseconds: [ 1, 10, 100 ],\n seconds: [ 1, 2, 5, 15, 30 ],\n minutes: [ 1, 2, 5, 15, 30 ],\n hours: [ 1, 2, 3 ],\n days: [ 1, 2, 3 ],\n weeks: [ 1, 2 ],\n months: [ 1, 2, 3, 6 ],\n years: [ 1, 2, 3, 5, 10, 25, 50 ]\n },\n maxDateGroups: 10\n });\n\n function autoAxisMin(min, max, narrow) {\n if (!min && !max) {\n return 0;\n }\n\n var axisMin;\n\n if (min >= 0 && max >= 0) {\n var minValue = min === max ? 0 : min;\n\n var diff = (max - minValue) / max;\n if (narrow === false || (!narrow && diff > ZERO_THRESHOLD)) {\n return 0;\n }\n\n axisMin = Math.max(0, minValue - ((max - minValue) / 2));\n } else {\n axisMin = min;\n }\n\n return axisMin;\n }\n\n function autoAxisMax(min, max, narrow) {\n if (!min && !max) {\n return 1;\n }\n\n var axisMax;\n\n if (min <= 0 && max <= 0) {\n var maxValue = min === max ? 0 : max;\n\n var diff = Math.abs((maxValue - min) / maxValue);\n if (narrow === false || (!narrow && diff > ZERO_THRESHOLD)) {\n return 0;\n }\n\n axisMax = Math.min(0, maxValue - ((min - maxValue) / 2));\n } else {\n axisMax = max;\n }\n\n return axisMax;\n }\n\n function floor(value, step) {\n return round(Math.floor(value / step) * step, DEFAULT_PRECISION);\n }\n\n function ceil(value, step) {\n return round(Math.ceil(value / step) * step, DEFAULT_PRECISION);\n }\n\n function limitCoordinate(value) {\n return Math.max(Math.min(value, COORDINATE_LIMIT), -COORDINATE_LIMIT);\n }\n\n var MIN_VALUE_RANGE$1 = Math.pow(10, -DEFAULT_PRECISION + 1);\n\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\n initUserOptions: function(options) {\n var autoOptions = autoAxisOptions(options.seriesMin, options.seriesMax, options);\n this.totalOptions = totalAxisOptions(autoOptions, options);\n\n return axisOptions(autoOptions, options);\n },\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\n clone: function() {\n return new NumericAxis(\n this.seriesMin,\n this.seriesMax,\n $.extend({}, this.options),\n this.chartService\n );\n },\n\n startValue: function() {\n return 0;\n },\n\n range: function() {\n var options = this.options;\n return { min: options.min, max: options.max };\n },\n\n getDivisions: function(stepValue) {\n if (stepValue === 0) {\n return 1;\n }\n\n var options = this.options;\n var range = options.max - options.min;\n\n return Math.floor(round(range / stepValue, COORD_PRECISION)) + 1;\n },\n\n getTickPositions: function(unit, skipUnit) {\n var options = this.options;\n var ref = this.lineInfo();\n var axisDir = ref.axisDir;\n var axisOrigin = ref.axisOrigin;\n var lineBox = ref.lineBox;\n var lineSize = ref.lineSize;\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 positions = [];\n var pos = lineBox[axisOrigin];\n var skipStep = 0;\n\n if (skipUnit) {\n skipStep = skipUnit / unit;\n }\n\n for (var idx = 0; idx < divisions; idx++) {\n if (idx % skipStep !== 0) {\n positions.push(round(pos, COORD_PRECISION));\n }\n\n pos = pos + step * axisDir;\n }\n\n return positions;\n },\n\n getMajorTickPositions: function() {\n return this.getTickPositions(this.options.majorUnit);\n },\n\n getMinorTickPositions: function() {\n return this.getTickPositions(this.options.minorUnit);\n },\n\n getSlot: function(a, b, limit) {\n if (limit === void 0) { limit = false; }\n\n var options = this.options;\n var ref = this.lineInfo();\n var axis = ref.axis;\n var axisDir = ref.axisDir;\n var lineBox = ref.lineBox;\n var lineSize = ref.lineSize;\n var lineStart = ref.lineStart;\n var step = axisDir * (lineSize / (options.max - options.min));\n\n var start = valueOrDefault(a, b || 0);\n var end = valueOrDefault(b, a || 0);\n\n if (limit) {\n start = limitValue(start, options.min, options.max);\n end = limitValue(end, options.min, options.max);\n }\n\n var p1 = Math.min(start, end) - options.min;\n var p2 = Math.max(start, end) - options.min;\n\n var slotBox = new Box(lineBox.x1, lineBox.y1, lineBox.x1, lineBox.y1);\n slotBox[axis + 1] = limitCoordinate(lineStart + step * (axisDir > 0 ? p1 : p2));\n slotBox[axis + 2] = limitCoordinate(lineStart + step * (axisDir > 0 ? p2 : p1));\n\n return slotBox;\n },\n\n getValue: function(point) {\n var options = this.options;\n var max = Number(options.max);\n var min = Number(options.min);\n var offset = this.pointOffset(point);\n var valueOffset = offset * (max - min);\n\n if (offset < 0 || offset > 1) {\n return null;\n }\n\n var value = min + valueOffset;\n return round(value, DEFAULT_PRECISION);\n },\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 ref = this.lineInfo();\n var lineSize = ref.lineSize;\n var range = max - min;\n var scale = lineSize / range;\n var offset = round(delta / scale, DEFAULT_PRECISION);\n\n if ((vertical || reverse) && !(vertical && reverse )) {\n offset = -offset;\n }\n\n return {\n min: min + offset,\n max: max + offset,\n offset: offset\n };\n },\n\n labelsCount: function() {\n return this.getDivisions(this.options.majorUnit);\n },\n\n createAxisLabel: function(index, labelOptions, labelContext) {\n var options = this.options;\n var value = round(options.min + (index * options.majorUnit), DEFAULT_PRECISION);\n var text = this.axisLabelText(value, labelOptions, labelContext);\n\n return new AxisLabel(value, text, index, null, labelOptions);\n },\n\n shouldRenderNote: function(value) {\n var range = this.range();\n return range.min <= value && value <= range.max;\n },\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\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\n if (this.isValidRange(min, max)) {\n return {\n min: min,\n max: max\n };\n }\n },\n\n scaleRange: function(scale, cursor) {\n var position = Math.abs(this.pointOffset(cursor));\n var range = this.options.max - this.options.min;\n var delta = this.scaleToDelta(scale, range);\n var minDelta = position * delta;\n var maxDelta = (1 - position) * delta;\n var min = round(this.options.min + minDelta, DEFAULT_PRECISION);\n var max = round(this.options.max - maxDelta, DEFAULT_PRECISION);\n\n if (max - min < MIN_VALUE_RANGE$1) {\n max = min + MIN_VALUE_RANGE$1;\n }\n\n return {\n min: min,\n max: max\n };\n },\n\n zoomRange: function(scale, cursor) {\n var ref = this;\n var totalMin = ref.totalMin;\n var totalMax = ref.totalMax;\n var range = this.scaleRange(scale, cursor);\n\n return {\n min: limitValue(range.min, totalMin, totalMax),\n max: limitValue(range.max, totalMin, totalMax),\n narrowRange: false\n };\n },\n\n isValidRange: function(min, max) {\n return max - min > MIN_VALUE_RANGE$1;\n }\n });\n\n function autoAxisOptions(seriesMin, seriesMax, options) {\n var narrowRange = options.narrowRange;\n\n var autoMin = autoAxisMin(seriesMin, seriesMax, narrowRange);\n var autoMax = autoAxisMax(seriesMin, seriesMax, narrowRange);\n\n var majorUnit = autoMajorUnit(autoMin, autoMax);\n var autoOptions = {\n majorUnit: majorUnit\n };\n\n if (options.roundToMajorUnit !== false) {\n if (autoMin < 0 && remainderClose(autoMin, majorUnit, 1 / 3)) {\n autoMin -= majorUnit;\n }\n\n if (autoMax > 0 && remainderClose(autoMax, majorUnit, 1 / 3)) {\n autoMax += majorUnit;\n }\n }\n\n autoOptions.min = floor(autoMin, majorUnit);\n autoOptions.max = ceil(autoMax, majorUnit);\n\n return autoOptions;\n }\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\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\n function axisOptions(autoOptions, userOptions) {\n var options = userOptions;\n var userSetMin, userSetMax;\n\n if (userOptions) {\n clearNullValues(userOptions, [ 'min', 'max' ]);\n\n userSetMin = defined(userOptions.min);\n userSetMax = defined(userOptions.max);\n\n var userSetLimits = userSetMin || userSetMax;\n\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\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\n // Determine an auto major unit after min/max have been set\n autoOptions.majorUnit = autoMajorUnit(options.min, options.max);\n }\n }\n\n autoOptions.minorUnit = (options.majorUnit || autoOptions.majorUnit) / 5;\n\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\n return result;\n }\n\n function remainderClose(value, divisor, ratio) {\n var remainder = round(Math.abs(value % divisor), DEFAULT_PRECISION);\n var threshold = divisor * (1 - ratio);\n\n return remainder === 0 || remainder > threshold;\n }\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: {\n format: \"#.####################\"\n },\n zIndex: 1\n });\n\n var MIN_VALUE_RANGE = 1000;\n\n var DateValueAxis = Axis.extend({\n init: function(seriesMin, seriesMax, axisOptions, chartService) {\n var min = toDate(seriesMin);\n var max = toDate(seriesMax);\n\n var intlService = chartService.intl;\n var options = axisOptions || {};\n options = deepExtend(options || {}, {\n min: parseDate(intlService, options.min),\n max: parseDate(intlService, options.max),\n axisCrossingValue: parseDates(intlService, options.axisCrossingValues || options.axisCrossingValue),\n weekStartDay: firstDay(options, intlService)\n });\n options = applyDefaults(min, max, options);\n\n Axis.fn.init.call(this, options, chartService);\n\n this.intlService = intlService;\n this.seriesMin = min;\n this.seriesMax = max;\n\n var weekStartDay = options.weekStartDay || 0;\n this.totalMin = toTime(floorDate(toTime(min) - 1, options.baseUnit, weekStartDay));\n this.totalMax = toTime(ceilDate(toTime(max) + 1, options.baseUnit, weekStartDay));\n },\n\n clone: function() {\n return new DateValueAxis(this.seriesMin, this.seriesMax, $.extend({}, this.options), this.chartService);\n },\n\n range: function() {\n var options = this.options;\n return { min: options.min, max: options.max };\n },\n\n getDivisions: function(stepValue) {\n var options = this.options;\n\n return Math.floor(\n duration(options.min, options.max, options.baseUnit) / stepValue + 1\n );\n },\n\n getTickPositions: function(step) {\n var options = this.options;\n var ref = this.lineInfo();\n var dir = ref.axisDir;\n var lineSize = ref.lineSize;\n var start = ref.lineStart;\n var divisions = this.getDivisions(step);\n var timeRange = dateDiff(options.max, options.min);\n var scale = lineSize / timeRange;\n var weekStartDay = options.weekStartDay || 0;\n\n var positions = [ start ];\n for (var i = 1; i < divisions; i++) {\n var date = addDuration(options.min, i * step, options.baseUnit, weekStartDay);\n var pos = start + dateDiff(date, options.min) * scale * dir;\n\n positions.push(round(pos, COORD_PRECISION));\n }\n\n return positions;\n },\n\n getMajorTickPositions: function() {\n return this.getTickPositions(this.options.majorUnit);\n },\n\n getMinorTickPositions: function() {\n return this.getTickPositions(this.options.minorUnit);\n },\n\n getSlot: function(a, b, limit) {\n return NumericAxis.prototype.getSlot.call(\n this, parseDate(this.intlService, a), parseDate(this.intlService, b), limit\n );\n },\n\n getValue: function(point) {\n var value = NumericAxis.prototype.getValue.call(this, point);\n\n return value !== null ? toDate(value) : null;\n },\n\n labelsCount: function() {\n return this.getDivisions(this.options.majorUnit);\n },\n\n createAxisLabel: function(index, labelOptions, labelContext) {\n var options = this.options;\n var offset = index * options.majorUnit;\n var weekStartDay = options.weekStartDay || 0;\n var date = options.min;\n\n if (offset > 0) {\n date = addDuration(date, offset, options.baseUnit, weekStartDay);\n }\n\n var unitFormat = labelOptions.dateFormats[options.baseUnit];\n labelOptions.format = labelOptions.format || unitFormat;\n\n var text = this.axisLabelText(date, labelOptions, labelContext);\n return new AxisLabel(date, text, index, null, labelOptions);\n },\n\n translateRange: function(delta) {\n var options = this.options;\n var lineBox = this.lineBox();\n var vertical = options.vertical;\n var reverse = options.reverse;\n var size = vertical ? lineBox.height() : lineBox.width();\n var range = this.range();\n var scale = size / dateDiff(range.max, range.min);\n\n var offset = round(delta / scale, DEFAULT_PRECISION);\n if ((vertical || reverse) && !(vertical && reverse )) {\n offset = -offset;\n }\n\n var from = addTicks(options.min, offset);\n var to = addTicks(options.max, offset);\n\n return {\n min: from,\n max: to,\n offset: offset\n };\n },\n\n shouldRenderNote: function(value) {\n var range = this.range();\n\n return dateComparer(value, range.min) >= 0 && dateComparer(value, range.max) <= 0;\n },\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\n if (limittedRange) {\n return {\n min: toDate(limittedRange.min),\n max: toDate(limittedRange.max)\n };\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\n return {\n min: toDate(min),\n max: toDate(max)\n };\n },\n\n scaleRange: function(scale, cursor) {\n var position = Math.abs(this.pointOffset(cursor));\n var range = this.options.max - this.options.min;\n var delta = this.scaleToDelta(scale, range);\n var minDelta = position * delta;\n var maxDelta = (1 - position) * delta;\n var min = toDate(toTime(this.options.min) + minDelta);\n var max = toDate(toTime(this.options.max) - maxDelta);\n\n if (max - min < MIN_VALUE_RANGE) {\n max = toDate(toTime(min) + MIN_VALUE_RANGE);\n }\n\n return {\n min: min,\n max: max\n };\n },\n\n zoomRange: function(scale, cursor) {\n var range = this.scaleRange(scale, cursor);\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\n return {\n min: min,\n max: max\n };\n }\n });\n\n function timeUnits(delta) {\n var unit = HOURS;\n\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\n return unit;\n }\n\n function applyDefaults(seriesMin, seriesMax, options) {\n var min = options.min || seriesMin;\n var max = options.max || seriesMax;\n var baseUnit = options.baseUnit || (max && min ? timeUnits(absoluteDateDiff(max, min)) : HOURS);\n var baseUnitTime = TIME_PER_UNIT[baseUnit];\n var weekStartDay = options.weekStartDay || 0;\n var autoMin = floorDate(toTime(min) - 1, baseUnit, weekStartDay) || toDate(max);\n var autoMax = ceilDate(toTime(max) + 1, baseUnit, weekStartDay);\n var userMajorUnit = options.majorUnit ? options.majorUnit : undefined;\n var majorUnit = userMajorUnit || ceil(\n autoMajorUnit(autoMin.getTime(), autoMax.getTime()),\n baseUnitTime\n ) / 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\n if (!options.baseUnit) {\n delete options.baseUnit;\n }\n\n options.baseUnit = options.baseUnit || baseUnit;\n options.min = options.min || addDuration(autoMin, -head, baseUnit, weekStartDay);\n options.max = options.max || addDuration(autoMax, tail, baseUnit, weekStartDay);\n options.minorUnit = options.minorUnit || majorUnit / 5;\n options.majorUnit = majorUnit;\n\n return options;\n }\n\n setDefaultOptions(DateValueAxis, {\n type: DATE,\n majorGridLines: {\n visible: true,\n width: 1,\n color: BLACK\n },\n labels: {\n dateFormats: DateLabelFormats\n }\n });\n\n var DEFAULT_MAJOR_UNIT = 10;\n var MIN_VALUE_RANGE$2 = 1e-6;\n\n var LogarithmicAxis = Axis.extend({\n init: function(seriesMin, seriesMax, options, chartService) {\n\n var axisOptions = deepExtend({ majorUnit: DEFAULT_MAJOR_UNIT, min: seriesMin, max: seriesMax }, 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\n axisOptions.max = range.max;\n axisOptions.min = range.min;\n axisOptions.minorUnit = options.minorUnit || round(base - 1, DEFAULT_PRECISION);\n\n Axis.fn.init.call(this, axisOptions, chartService);\n\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\n this.createLabels();\n },\n\n clone: function() {\n return new LogarithmicAxis(\n this.seriesMin,\n this.seriesMax,\n $.extend({}, this.options),\n this.chartService\n );\n },\n\n startValue: function() {\n return this.options.min;\n },\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 base = options.majorUnit;\n var min = options.min;\n var max = options.max;\n var ref$1 = this.lineInfo();\n var axis = ref$1.axis;\n var axisDir = ref$1.axisDir;\n var lineBox = ref$1.lineBox;\n var lineSize = ref$1.lineSize;\n var lineStart = ref$1.lineStart;\n var step = axisDir * (lineSize / (logMax - logMin));\n var start = valueOrDefault(a, b || 1);\n var end = valueOrDefault(b, a || 1);\n\n if (start <= 0 || end <= 0) {\n return null;\n }\n\n if (limit) {\n start = limitValue(start, min, max);\n end = limitValue(end, min, max);\n }\n\n start = log(start, base);\n end = log(end, base);\n\n var p1 = Math.min(start, end) - logMin;\n var p2 = Math.max(start, end) - logMin;\n\n var slotBox = new Box(lineBox.x1, lineBox.y1, lineBox.x1, lineBox.y1);\n slotBox[axis + 1] = limitCoordinate(lineStart + step * (axisDir > 0 ? p1 : p2));\n slotBox[axis + 2] = limitCoordinate(lineStart + step * (axisDir > 0 ? p2 : p1));\n\n return slotBox;\n },\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 base = options.majorUnit;\n var ref$1 = this.lineInfo();\n var axis = ref$1.axis;\n var axisDir = ref$1.axisDir;\n var lineStart = ref$1.lineStart;\n var lineSize = ref$1.lineSize;\n var step = ((logMax - logMin) / lineSize);\n var offset = axisDir * (point[axis] - lineStart);\n var valueOffset = offset * step;\n\n if (offset < 0 || offset > lineSize) {\n return null;\n }\n\n var value = logMin + valueOffset;\n\n return round(Math.pow(base, value), DEFAULT_PRECISION);\n },\n\n range: function() {\n var options = this.options;\n return { min: options.min, max: options.max };\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\n if ((vertical || reverse) && !(vertical && reverse )) {\n offset = -offset;\n }\n\n return {\n min: Math.pow(base, logMin + offset),\n max: Math.pow(base, logMax + offset),\n offset: offset\n };\n },\n\n labelsCount: function() {\n var floorMax = Math.floor(this.logMax);\n var count = Math.floor(floorMax - this.logMin) + 1;\n\n return count;\n },\n\n getMajorTickPositions: function() {\n var ticks = [];\n\n this.traverseMajorTicksPositions(function (position) {\n ticks.push(position);\n }, { step: 1, skip: 0 });\n\n return ticks;\n },\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 = {\n // TODO\n // _alignLines: options._alignLines,\n vertical: vertical\n };\n\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\n lineGroup.append(createAxisTick(tickLineOptions, tickOptions));\n }\n\n if (majorTicks.visible) {\n this.traverseMajorTicksPositions(render, majorTicks);\n }\n\n if (minorTicks.visible) {\n this.traverseMinorTicksPositions(render, minorTicks);\n }\n\n return ticks;\n },\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\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\n majorTicks.push(tickPosition);\n }\n }\n\n if (majorGridLines.visible) {\n this.traverseMajorTicksPositions(render, majorGridLines);\n }\n\n if (minorGridLines.visible) {\n this.traverseMinorTicksPositions(render, minorGridLines);\n }\n\n return container.children;\n },\n\n traverseMajorTicksPositions: function(callback, tickOptions) {\n var ref = this.lineInfo();\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\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\n traverseMinorTicksPositions: function(callback, tickOptions) {\n var this$1$1 = this;\n\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.lineInfo();\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\n for (var power = start; power < logMax; power++) {\n var minorOptions = this$1$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\n createAxisLabel: function(index, labelOptions, labelContext) {\n var power = Math.ceil(this.logMin + index);\n var value = Math.pow(this.options.majorUnit, power);\n var text = this.axisLabelText(value, labelOptions, labelContext);\n\n return new AxisLabel(value, text, index, null, labelOptions);\n },\n\n shouldRenderNote: function(value) {\n var range = this.range();\n return range.min <= value && value <= range.max;\n },\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\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\n return {\n min: min,\n max: max\n };\n },\n\n scaleRange: function(scale, cursor) {\n var ref = this.options;\n var base = ref.majorUnit;\n var logMin = log(this.options.min, base);\n var logMax = log(this.options.max, base);\n var position = Math.abs(this.pointOffset(cursor));\n var range = logMax - logMin;\n var delta = this.scaleToDelta(scale, range);\n var min = Math.pow(base, logMin + position * delta);\n var max = Math.pow(base, logMax - (1 - position) * delta);\n\n if (max - min < MIN_VALUE_RANGE$2) {\n max = min + MIN_VALUE_RANGE$2;\n }\n\n return {\n min: min,\n max: max\n };\n },\n\n zoomRange: function(scale, cursor) {\n var range = this.scaleRange(scale, cursor);\n var ref = this;\n var totalMin = ref.totalMin;\n var totalMax = ref.totalMax;\n\n return {\n min: limitValue(range.min, totalMin, totalMax),\n max: limitValue(range.max, totalMin, totalMax)\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\n return {\n value: value,\n minorStep: minorStep\n };\n },\n\n lineInfo: function() {\n var info = Axis.fn.lineInfo.call(this);\n info.step = info.axisDir * (info.lineSize / (this.logMax - this.logMin));\n\n return info;\n }\n });\n\n function initRange(autoMin, autoMax, axisOptions, options) {\n var min = axisOptions.min;\n var max = axisOptions.max;\n\n if (defined(axisOptions.axisCrossingValue) && axisOptions.axisCrossingValue <= 0) {\n throwNegativeValuesError();\n }\n\n if (!defined(options.max)) {\n max = autoMax;\n } else if (options.max <= 0) {\n throwNegativeValuesError();\n }\n\n if (!defined(options.min)) {\n min = autoMin;\n } else if (options.min <= 0) {\n throwNegativeValuesError();\n }\n\n return {\n min: min,\n max: max\n };\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\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\n return autoMax;\n }\n\n function throwNegativeValuesError() {\n throw new Error(\"Non positive values cannot be used for a logarithmic axis\");\n }\n\n function log(x, base) {\n return Math.log(x) / Math.log(base);\n }\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\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\n if (options.majorGridLines.visible) {\n majorAngles = this.majorGridLineAngles(altAxis);\n skipMajor = true;\n\n gridLines = this.renderMajorGridLines(\n majorAngles, radius, options.majorGridLines\n );\n }\n\n if (options.minorGridLines.visible) {\n minorAngles = this.minorGridLineAngles(altAxis, skipMajor);\n\n append(gridLines, this.renderMinorGridLines(\n minorAngles, radius, options.minorGridLines, altAxis, skipMajor\n ));\n }\n\n return gridLines;\n },\n\n renderMajorGridLines: function(angles, radius, options) {\n return this.renderGridLines(angles, radius, options);\n },\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\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\n var center = this.box.center();\n var circle = new Circle([ center.x, center.y ], radius);\n var container = this.gridLinesVisual();\n\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\n line.moveTo(circle.center)\n .lineTo(circle.pointAt(angles[i] + 180));\n\n container.append(line);\n }\n\n return container.children;\n },\n\n gridLineAngles: function(altAxis, size, skip, step, skipAngles) {\n var this$1$1 = this;\n\n var divs = this.intervals(size, skip, step, skipAngles);\n var options = altAxis.options;\n var altAxisVisible = options.visible && (options.line || {}).visible !== false;\n\n return map(divs, function (d) {\n var alpha = this$1$1.intervalAngle(d);\n\n if (!altAxisVisible || alpha !== 90) {\n return alpha;\n }\n });\n }\n };\n\n var RadarCategoryAxis = CategoryAxis.extend({\n range: function() {\n return { min: 0, max: this.options.categories.length };\n },\n\n reflow: function(box) {\n this.box = box;\n this.reflowLabels();\n },\n\n lineBox: function() {\n return this.box;\n },\n\n reflowLabels: function() {\n var this$1$1 = this;\n\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\n for (var i = 0; i < labels.length; i++) {\n labels[i].reflow(measureBox);\n var labelBox = labels[i].box;\n\n labels[i].reflow(this$1$1.getSlot(skip + i * step).adjacentBox(\n 0, labelBox.width(), labelBox.height()\n ));\n }\n },\n\n intervals: function(size, skipOption, stepOption, skipAngles) {\n if (skipAngles === void 0) { 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\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\n angle = round(angle, COORD_PRECISION) % 360;\n\n if (!(skipAngles && inArray(angle, skipAngles))) {\n divs.push(angle);\n }\n }\n\n return divs;\n },\n\n majorIntervals: function() {\n return this.intervals(1);\n },\n\n minorIntervals: function() {\n return this.intervals(0.5);\n },\n\n intervalAngle: function(interval) {\n return (360 + interval + this.options.startAngle) % 360;\n },\n\n majorAngles: function() {\n var this$1$1 = this;\n\n return map(this.majorIntervals(), function (interval) { return this$1$1.intervalAngle(interval); });\n },\n\n createLine: function() {\n return [];\n },\n\n majorGridLineAngles: function(altAxis) {\n var majorGridLines = this.options.majorGridLines;\n return this.gridLineAngles(altAxis, 1, majorGridLines.skip, majorGridLines.step);\n },\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\n return this.gridLineAngles(altAxis, 0.5, minorGridLines.skip, minorGridLines.step, majorGridLineAngles);\n },\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\n var radiusCallback = function(angle) {\n if (!skipMajor && inArray(angle, majorAngles)) {\n return radius;\n }\n\n return minorRadius;\n };\n return radiusCallback;\n }\n },\n\n createPlotBands: function() {\n var this$1$1 = this;\n\n var plotBands = this.options.plotBands || [];\n\n var group = this._plotbandGroup = new Group({\n zIndex: -1\n });\n\n for (var i = 0; i < plotBands.length; i++) {\n var band = plotBands[i];\n var slot = this$1$1.plotBandSlot(band);\n var singleSlot = this$1$1.getSlot(band.from);\n\n var head = band.from - Math.floor(band.from);\n slot.startAngle += head * singleSlot.angle;\n\n var tail = Math.ceil(band.to) - band.to;\n slot.angle -= (tail + head) * singleSlot.angle;\n\n var ring = ShapeBuilder.current.createRing(slot, {\n fill: {\n color: band.color,\n opacity: band.opacity\n },\n stroke: {\n opacity: band.opacity\n }\n });\n group.append(ring);\n }\n\n this.appendVisual(group);\n },\n\n plotBandSlot: function(band) {\n return this.getSlot(band.from, band.to - 1);\n },\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\n if (options.reverse && !justified) {\n fromValue = (fromValue + 1) % totalDivs;\n }\n\n fromValue = limitValue(Math.floor(fromValue), 0, totalDivs - 1);\n var slotStart = divs[fromValue];\n\n if (justified) {\n slotStart = slotStart - slotAngle / 2;\n\n if (slotStart < 0) {\n slotStart += 360;\n }\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\n return new Ring(box.center(), 0, box.height() / 2, slotStart, angle);\n },\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\n return new geometry.Arc([ slot.center.x, slot.center.y ], {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: slot.radius,\n radiusY: slot.radius\n });\n },\n\n pointCategoryIndex: function(point) {\n var this$1$1 = this;\n\n var length = this.options.categories.length;\n var index = null;\n\n for (var i = 0; i < length; i++) {\n var slot = this$1$1.getSlot(i);\n if (slot.containsPoint(point)) {\n index = i;\n break;\n }\n }\n\n return index;\n }\n });\n\n setDefaultOptions(RadarCategoryAxis, {\n startAngle: 90,\n labels: {\n margin: getSpacing(10)\n },\n majorGridLines: {\n visible: true\n },\n justified: true\n });\n deepExtend(RadarCategoryAxis.prototype, GridLinesMixin);\n\n var PolarAxis = Axis.extend({\n init: function(options, chartService) {\n Axis.fn.init.call(this, options, chartService);\n\n var instanceOptions = this.options;\n\n instanceOptions.minorUnit = instanceOptions.minorUnit || instanceOptions.majorUnit / 2;\n },\n\n getDivisions: function(stepValue) {\n return NumericAxis.prototype.getDivisions.call(this, stepValue) - 1;\n },\n\n reflow: function(box) {\n this.box = box;\n this.reflowLabels();\n },\n\n reflowLabels: function() {\n var this$1$1 = this;\n\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\n var measureBox = new Box();\n var divs = this.intervals(options.majorUnit, skip, step);\n\n for (var i = 0; i < labels.length; i++) {\n labels[i].reflow(measureBox);\n var labelBox = labels[i].box;\n\n labels[i].reflow(this$1$1.getSlot(divs[i]).adjacentBox(0, labelBox.width(), labelBox.height()));\n }\n },\n\n lineBox: function() {\n return this.box;\n },\n\n intervals: function(size, skipOption, stepOption, skipAngles) {\n if (skipAngles === void 0) { 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\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\n return divs;\n },\n\n majorIntervals: function() {\n return this.intervals(this.options.majorUnit);\n },\n\n minorIntervals: function() {\n return this.intervals(this.options.minorUnit);\n },\n\n intervalAngle: function(i) {\n return (540 - i - this.options.startAngle) % 360;\n },\n\n createLine: function() {\n return [];\n },\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\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\n return this.gridLineAngles(altAxis, options.minorUnit, minorGridLines.skip, minorGridLines.step, majorGridLineAngles);\n },\n\n plotBandSlot: function(band) {\n return this.getSlot(band.from, band.to);\n },\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\n if (options.reverse) {\n start *= -1;\n end *= -1;\n }\n\n start = (540 - start - startAngle) % 360;\n end = (540 - end - startAngle) % 360;\n\n if (end < start) {\n var tmp = start;\n start = end;\n end = tmp;\n }\n\n return new Ring(box.center(), 0, box.height() / 2, start, end - start);\n },\n\n slot: function(from, to) {\n if (to === void 0) { 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\n if (options.reverse) {\n startAngle = min;\n endAngle = max;\n } else {\n startAngle = 360 - max;\n endAngle = 360 - min;\n }\n\n startAngle = (startAngle + start) % 360;\n endAngle = (endAngle + start) % 360;\n\n return new geometry.Arc([ slot.center.x, slot.center.y ], {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: slot.radius,\n radiusY: slot.radius\n });\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\n if (!options.reverse) {\n theta *= -1;\n start *= -1;\n }\n\n return (theta + start + 360) % 360;\n },\n\n valueRange: function() {\n return {\n min: 0,\n max: Math.PI * 2\n };\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: {\n margin: getSpacing(10)\n },\n majorGridLines: {\n color: BLACK,\n visible: true,\n width: 1\n },\n minorGridLines: {\n color: \"#aaa\"\n }\n });\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\n var RadarNumericAxisMixin = {\n options: {\n majorGridLines: {\n visible: true\n }\n },\n\n createPlotBands: function() {\n var this$1$1 = this;\n\n var ref = this.options;\n var type = ref.majorGridLines.type;\n var plotBands = ref.plotBands; if (plotBands === void 0) { plotBands = []; }\n var altAxis = this.plotArea.polarAxis;\n var majorAngles = altAxis.majorAngles();\n var center = altAxis.box.center();\n var group = this._plotbandGroup = new Group({\n zIndex: -1\n });\n\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: {\n opacity: band.opacity\n }\n };\n\n var slot = this$1$1.getSlot(band.from, band.to, true);\n var ring = new Ring(center, center.y - slot.y2, center.y - slot.y1, 0, 360);\n\n var shape = (void 0);\n if (type === ARC) {\n shape = ShapeBuilder.current.createRing(ring, bandStyle);\n } else {\n shape = Path.fromPoints(this$1$1.plotBandPoints(ring, majorAngles), bandStyle).close();\n }\n\n group.append(shape);\n }\n\n this.appendVisual(group);\n },\n\n plotBandPoints: function(ring, angles) {\n var innerPoints = [];\n var outerPoints = [];\n var center = [ ring.center.x, ring.center.y ];\n var innerCircle = new Circle(center, ring.innerRadius);\n var outerCircle = new Circle(center, ring.radius);\n\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\n innerPoints.reverse();\n innerPoints.push(innerPoints[0]);\n outerPoints.push(outerPoints[0]);\n\n return outerPoints.concat(innerPoints);\n },\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\n if (options.majorGridLines.visible) {\n gridLines = this.renderGridLines(\n center, majorTicks, majorAngles, options.majorGridLines\n );\n }\n\n if (options.minorGridLines.visible) {\n var minorTicks = this.radarMinorGridLinePositions();\n append(gridLines, this.renderGridLines(\n center, minorTicks, majorAngles, options.minorGridLines\n ));\n }\n\n return gridLines;\n },\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; if (skip === void 0) { skip = 0; }\n var step = options.step; if (step === void 0) { step = 0; }\n var container = this.gridLinesVisual();\n\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([ center.x, center.y ], 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\n line.close();\n container.append(line);\n }\n }\n }\n\n return container.children;\n },\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\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\n majorAngles.sort(function(a, b) {\n return angularDistance(a, theta) - angularDistance(b, theta);\n });\n\n // Solve triangle (center, point, axis X) using one side (radius) and two angles.\n // Angles are derived from triangle (center, point, gridline X)\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\n distance = radius * (Math.sin(rad(beta)) / Math.sin(rad(gamma)));\n }\n\n return this.axisType().prototype.getValue.call(\n this, new Point(lineBox.x1, lineBox.y2 - distance)\n );\n }\n };\n\n function angularDistance(a, b) {\n return 180 - Math.abs(Math.abs(a - b) - 180);\n }\n\n var RadarNumericAxis = NumericAxis.extend({\n radarMajorGridLinePositions: function() {\n return this.getTickPositions(this.options.majorUnit);\n },\n\n radarMinorGridLinePositions: function() {\n var options = this.options;\n var minorSkipStep = 0;\n\n if (options.majorGridLines.visible) {\n minorSkipStep = options.majorUnit;\n }\n return this.getTickPositions(options.minorUnit, minorSkipStep);\n },\n\n axisType: function() {\n return NumericAxis;\n }\n });\n\n deepExtend(RadarNumericAxis.prototype, RadarNumericAxisMixin);\n\n var RadarLogarithmicAxis = LogarithmicAxis.extend({\n radarMajorGridLinePositions: function() {\n var positions = [];\n\n this.traverseMajorTicksPositions(function(position) {\n positions.push(position);\n }, this.options.majorGridLines);\n\n return positions;\n },\n\n radarMinorGridLinePositions: function() {\n var positions = [];\n\n this.traverseMinorTicksPositions(function(position) {\n positions.push(position);\n }, this.options.minorGridLines);\n\n return positions;\n },\n\n axisType: function() {\n return LogarithmicAxis;\n }\n });\n\n deepExtend(RadarLogarithmicAxis.prototype, RadarNumericAxisMixin);\n\n var WEIGHT = 0.333;\n var EXTREMUM_ALLOWED_DEVIATION = 0.01;\n\n var CurveProcessor = Class.extend({\n init: function(closed) {\n\n this.closed = closed;\n },\n\n process: function(dataPoints) {\n var this$1$1 = this;\n\n var points = dataPoints.slice(0);\n var segments = [];\n var closed = this.closed;\n var length = points.length;\n\n if (length > 2) {\n this.removeDuplicates(0, points);\n length = points.length;\n }\n\n if (length < 2 || (length === 2 && points[0].equals(points[1]))) {\n return segments;\n }\n\n var p0 = points[0];\n var p1 = points[1];\n var p2 = points[2];\n\n segments.push(new Segment(p0));\n\n while (p0.equals(points[length - 1])) {\n closed = true;\n points.pop();\n length--;\n }\n\n if (length === 2) {\n var tangent = this.tangent(p0,p1, X, Y);\n\n last(segments).controlOut(\n this.firstControlPoint(tangent, p0, p1, X, Y)\n );\n\n segments.push(new Segment(\n p1,\n this.secondControlPoint(tangent, p0, p1, X, Y)\n ));\n\n return segments;\n }\n\n var initialControlPoint, lastControlPoint;\n\n if (closed) {\n p0 = points[length - 1]; p1 = points[0]; 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\n var cp0 = initialControlPoint;\n for (var idx = 0; idx <= length - 3; idx++) {\n this$1$1.removeDuplicates(idx, points);\n length = points.length;\n if (idx + 3 <= length) {\n p0 = points[idx]; p1 = points[idx + 1]; p2 = points[idx + 2];\n var controlPoints$1 = this$1$1.controlPoints(p0,p1,p2);\n\n last(segments).controlOut(cp0);\n cp0 = controlPoints$1[1];\n\n var cp1 = controlPoints$1[0];\n segments.push(new Segment(p1, cp1));\n }\n }\n\n if (closed) {\n p0 = points[length - 2]; p1 = points[length - 1]; p2 = points[0];\n var controlPoints$2 = this.controlPoints(p0, p1, p2);\n\n last(segments).controlOut(cp0);\n segments.push(new Segment(\n p1,\n controlPoints$2[0]\n ));\n\n last(segments).controlOut(controlPoints$2[1]);\n segments.push(new Segment(\n p2,\n lastControlPoint\n ));\n } else {\n var tangent$2 = this.tangent(p1, p2, X, Y);\n\n last(segments).controlOut(cp0);\n segments.push(new Segment(\n p2,\n this.secondControlPoint(tangent$2, p1, p2, X, Y)\n ));\n }\n\n return segments;\n },\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\n invertAxis: function(p0, p1, p2) {\n var invertAxis = false;\n\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) &&\n !(p1.y <= p0.y && p2.y >= y2)) {\n invertAxis = true;\n }\n }\n\n return invertAxis;\n },\n\n isLine: function(p0, p1, p2) {\n var fn = this.lineFunction(p0, p1);\n var y2 = this.calculateFunction(fn, p2.x);\n\n return (p0.x === p1.x && p1.x === p2.x) || round(y2, 1) === round(p2.y, 1);\n },\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\n return [ b, 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\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\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\n if (monotonic[xField]) {\n tangent = 0;\n } else {\n var sign;\n if ((p2[yField] < p0[yField] && p0[yField] <= p1[yField]) ||\n (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\n tangent = EXTREMUM_ALLOWED_DEVIATION * sign;\n switchOrientation = true;\n }\n }\n }\n\n var secondControlPoint = this.secondControlPoint(tangent, p0, p1, xField, yField);\n\n if (switchOrientation) {\n var oldXField = xField;\n xField = yField;\n yField = oldXField;\n }\n\n var firstControlPoint = this.firstControlPoint(tangent, p1, p2, xField, yField);\n\n if (restrict) {\n this.restrictControlPoint(p0, p1, secondControlPoint, tangent);\n this.restrictControlPoint(p1, p2, firstControlPoint, tangent);\n }\n\n return [ secondControlPoint, 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\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\n if (x === 0) {\n tangent = 0;\n } else {\n tangent = y / x;\n }\n\n return tangent;\n },\n\n isMonotonicByField: function(p0, p1, p2, field) {\n return (p2[field] > p1[field] && p1[field] > p0[field]) ||\n (p2[field] < p1[field] && p1[field] < p0[field]);\n },\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\n return this.point(t1 + distance, p0[yField] + distance * tangent, xField, yField);\n },\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\n return this.point(t2 - distance, p3[yField] - distance * tangent, xField, yField);\n },\n\n point: function(xValue, yValue, xField, yField) {\n var controlPoint = new geometry.Point();\n controlPoint[xField] = xValue;\n controlPoint[yField] = yValue;\n\n return controlPoint;\n },\n\n calculateFunction: function(fn, x) {\n var length = fn.length;\n var result = 0;\n\n for (var i = 0; i < length; i++) {\n result += Math.pow(x,i) * fn[i];\n }\n return result;\n }\n });\n\n function numberSign(value) {\n return value <= 0 ? -1 : 1;\n }\n\n dataviz.Gradients = GRADIENTS;\n\n kendo.deepExtend(kendo.dataviz, {\n constants: constants,\n services: services,\n autoMajorUnit: autoMajorUnit,\n Point: Point,\n Box: Box,\n Ring: Ring,\n Sector: Sector,\n ShapeBuilder: ShapeBuilder,\n ShapeElement: ShapeElement,\n ChartElement: ChartElement,\n BoxElement: BoxElement,\n RootElement: RootElement,\n FloatElement: FloatElement,\n Text: Text,\n TextBox: TextBox,\n Title: Title,\n AxisLabel: AxisLabel,\n Axis: Axis,\n Note: Note,\n CategoryAxis: CategoryAxis,\n DateCategoryAxis: DateCategoryAxis,\n DateValueAxis: DateValueAxis,\n NumericAxis: NumericAxis,\n LogarithmicAxis: LogarithmicAxis,\n PolarAxis: PolarAxis,\n RadarCategoryAxis: RadarCategoryAxis,\n RadarNumericAxis: RadarNumericAxis,\n RadarLogarithmicAxis: RadarLogarithmicAxis,\n CurveProcessor: CurveProcessor,\n rectToBox: rectToBox,\n addClass: addClass,\n removeClass: removeClass,\n alignPathToPixel: alignPathToPixel,\n clockwise: clockwise,\n convertableToNumber: convertableToNumber,\n deepExtend: deepExtend,\n elementStyles: elementStyles,\n getSpacing: getSpacing,\n getTemplate: getTemplate,\n getter: __common_getter_js,\n grep: grep,\n hasClasses: hasClasses,\n HashMap: HashMap,\n inArray: inArray,\n interpolateValue: interpolateValue,\n InstanceObserver: InstanceObserver,\n isArray: isArray,\n isFunction: isFunction,\n isNumber: isNumber,\n isObject: isObject,\n isString: isString,\n map: map,\n mousewheelDelta: mousewheelDelta,\n FontLoader: FontLoader,\n setDefaultOptions: setDefaultOptions,\n sparseArrayLimits: sparseArrayLimits,\n styleValue: styleValue,\n find: find,\n elementScale: elementScale,\n autoTextColor: autoTextColor,\n createHashSet: createHashSet,\n defaultErrorHandler: defaultErrorHandler,\n keys: keys,\n append: append,\n bindEvents: bindEvents,\n Class: Class,\n defined: defined,\n deg: deg,\n elementOffset: elementOffset,\n elementSize: elementSize,\n eventCoordinates: eventCoordinates,\n eventElement: eventElement,\n hashKey: hashKey,\n last: last,\n limitValue: limitValue,\n logToConsole: kendo.logToConsole,\n objectKey: objectKey,\n rad: rad,\n round: round,\n unbindEvents: unbindEvents,\n valueOrDefault: valueOrDefault,\n absoluteDateDiff: absoluteDateDiff,\n addDuration: addDuration,\n addTicks: addTicks,\n ceilDate: ceilDate,\n dateComparer: dateComparer,\n dateDiff: dateDiff,\n dateEquals: dateEquals,\n dateIndex: dateIndex,\n duration: duration,\n floorDate: floorDate,\n lteDateIndex: lteDateIndex,\n startOfWeek: startOfWeek,\n toDate: toDate,\n parseDate: parseDate,\n parseDates: parseDates,\n toTime: toTime,\n firstDay: firstDay\n });\n\n })(window.kendo.jQuery);\n\n (function($) {\n\n var dataviz = kendo.dataviz;\n var services = dataviz.services;\n var draw = kendo.drawing;\n\n dataviz.SASS_THEMES = [\"sass\", \"default-v2\", \"bootstrap-v4\", \"material-v2\"];\n\n dataviz.ExportMixin = {\n extend: function(proto, skipLegacy) {\n if (!proto.exportVisual) {\n throw new Error(\"Mixin target has no exportVisual method defined.\");\n }\n\n proto.exportSVG = this.exportSVG;\n proto.exportImage = this.exportImage;\n proto.exportPDF = this.exportPDF;\n\n if (!skipLegacy) {\n proto.svg = this.svg;\n proto.imageDataURL = this.imageDataURL;\n }\n },\n\n exportSVG: function(options) {\n return draw.exportSVG(this.exportVisual(), options);\n },\n\n exportImage: function(options) {\n return draw.exportImage(this.exportVisual(options), options);\n },\n\n exportPDF: function(options) {\n return draw.exportPDF(this.exportVisual(), options);\n },\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\n imageDataURL: function() {\n if (!kendo.support.canvas) {\n return null;\n }\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\n var surface = new draw.canvas.Surface(container[0]);\n surface.draw(this.exportVisual());\n var image = surface._rootElement.toDataURL();\n\n surface.destroy();\n container.remove();\n\n return image;\n } else {\n throw new Error(\"Image Export failed. Unable to export instantiate kendo.drawing.canvas.Surface\");\n }\n }\n };\n\n services.IntlService.register({\n format: function(format) {\n return kendo.format.apply(null, [format].concat(Array.prototype.slice.call(arguments, 1)));\n },\n toString: kendo.toString,\n parseDate: kendo.parseDate,\n firstDay: function() {\n return kendo.culture().calendars.standard.firstDay;\n }\n });\n\n services.TemplateService.register({\n compile: kendo.template\n });\n\n dataviz.Point2D = dataviz.Point;\n dataviz.Box2D = dataviz.Box;\n dataviz.mwDelta = function(e) {\n return dataviz.mousewheelDelta(e.originalEvent);\n };\n\n })(window.kendo.jQuery);\n\n var __meta__$Q = {\n id: \"dataviz.core\",\n name: \"Core\",\n description: \"The DataViz core functions\",\n category: \"dataviz\",\n depends: [ \"core\", \"drawing\" ],\n hidden: true\n };\n\n /***********************************************************************\n * WARNING: this file is auto-generated. If you change it directly,\n * your modifications will eventually be lost. The source code is in\n * `kendo-charts` repository, you should make your changes there and\n * run `src-modules/sync.sh` in this repository.\n */\n\n (function() {\n /* eslint-disable space-before-blocks, space-before-function-paren */\n\n window.kendo.dataviz = window.kendo.dataviz || {};\n\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\n var notes = function () { return ({\n icon: {\n border: {\n width: 1\n }\n },\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 () { return ({\n labels: {\n font: SANS12\n },\n notes: notes(),\n title: {\n font: SANS16,\n margin: 5\n }\n }); };\n\n var areaSeries = function () { return ({\n highlight: {\n markers: {\n border: {}\n }\n },\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 () { return ({\n highlight: {\n markers: {\n border: {}\n }\n },\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 () { return ({\n gap: BAR_GAP,\n spacing: BAR_SPACING\n }); };\n\n var boxPlotSeries = function () { 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: {\n width: 3\n },\n mean: {\n width: 2\n },\n median: {\n width: 2\n }\n },\n mean: {\n width: 2\n },\n median: {\n width: 2\n },\n spacing: 0.3,\n whiskers: {\n width: 2\n }\n }); };\n\n var bubbleSeries = function () { return ({\n border: {\n width: 0\n },\n labels: {\n background: TRANSPARENT\n },\n opacity: 0.6\n }); };\n\n var bulletSeries = function () { return ({\n gap: BAR_GAP,\n spacing: BAR_SPACING,\n target: {\n color: \"#ff0000\"\n }\n }); };\n\n var candlestickSeries = function () { 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: {\n width: 2\n }\n },\n line: {\n color: BLACK,\n width: 1\n },\n spacing: 0.3\n }); };\n\n var columnSeries = function () { return ({\n gap: BAR_GAP,\n spacing: BAR_SPACING\n }); };\n\n var donutSeries = function () { return ({\n margin: 1\n }); };\n\n var lineSeries = function () { return ({\n width: 2\n }); };\n\n var ohlcSeries = function () { return ({\n gap: 1,\n highlight: {\n line: {\n opacity: 1,\n width: 3\n }\n },\n line: {\n width: 1\n },\n spacing: 0.3\n }); };\n\n var radarAreaSeries = function () { 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 () { return ({\n markers: {\n visible: false\n },\n width: 2\n }); };\n\n var rangeBarSeries = function () { return ({\n gap: BAR_GAP,\n spacing: BAR_SPACING\n }); };\n\n var rangeColumnSeries = function () { return ({\n gap: BAR_GAP,\n spacing: BAR_SPACING\n }); };\n\n var scatterLineSeries = function () { return ({\n width: 1\n }); };\n\n var waterfallSeries = function () { return ({\n gap: 0.5,\n line: {\n color: BLACK,\n width: 1\n },\n spacing: BAR_SPACING\n }); };\n\n var pieSeries = function () { 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 () { 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 heatmapSeries = function () { return ({\n labels: {\n color: '',\n background: TRANSPARENT,\n visible: true\n },\n highlight: {\n border: {\n width: 0\n }\n }\n }); };\n\n var seriesDefaults = function (options) { return ({\n visible: true,\n labels: {\n font: SANS11\n },\n overlay: options.gradients ? {} : {\n gradient: \"none\"\n },\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 heatmap: heatmapSeries(),\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 () { return ({\n font: SANS16\n }); };\n\n var subtitle = function () { return ({\n font: SANS12\n }); };\n\n var legend = function () { return ({\n labels: {\n font: SANS12\n }\n }); };\n\n var baseTheme = function (options) {\n if (options === void 0) { options = {}; }\n\n return ({\n axisDefaults: axisDefaults(),\n categoryAxis: {\n majorGridLines: {\n visible: true\n }\n },\n navigator: {\n pane: {\n height: 90,\n margin: {\n top: 10\n }\n }\n },\n seriesDefaults: seriesDefaults(options),\n title: title(),\n subtitle: subtitle(),\n legend: legend()\n });\n };\n\n kendo.deepExtend(kendo.dataviz, {\n chartBaseTheme: baseTheme\n });\n\n })();\n\n (function($) {\n var cache;\n var SERIES_COLORS = 30;\n\n function seriesTemplate() {\n var template =\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ';\n\n for (var i = 0; i < SERIES_COLORS; i++) {\n template += '
    ';\n }\n\n return template;\n }\n\n function autoTheme(force) {\n if (!force && cache) {\n return cache;\n }\n\n var theme = { chart: kendo.dataviz.chartBaseTheme() };\n var hook = $(\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n seriesTemplate() +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ').appendTo(document.body);\n\n function mapColor(key, varName) {\n set(key, queryStyle(varName, \"backgroundColor\"));\n }\n\n function queryStyle(varName, prop) {\n return hook.find(\".k-var--\" + varName).css(prop);\n }\n\n function set(path, value) {\n var store = theme;\n var parts = path.split('.');\n var key = parts.shift();\n\n while (parts.length > 0) {\n store = store[key] = store[key] || {};\n key = parts.shift();\n }\n\n store[key] = value;\n }\n\n function setInactiveOpacity(seriesTypes, selector) {\n var inactiveOpacity = parseFloat(queryStyle(selector, \"opacity\"));\n if (!isNaN(inactiveOpacity) && inactiveOpacity < 1) {\n seriesTypes.forEach(function(type) {\n set(\"chart.seriesDefaults.\" + type + \".highlight.inactiveOpacity\", inactiveOpacity);\n });\n }\n }\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 mapColor(\"chart.subtitle.color\", \"normal-text-color\");\n\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\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 var opacity = parseFloat(queryStyle(\"chart-area-opacity\", \"opacity\"));\n if (!isNaN(opacity)) {\n set(\"chart.seriesDefaults.area.opacity\", opacity);\n set(\"chart.seriesDefaults.radarArea.opacity\", opacity);\n set(\"chart.seriesDefaults.verticalArea.opacity\", opacity);\n set(\"chart.seriesDefaults.labels.opacity\", opacity);\n }\n\n setInactiveOpacity([\"area\", \"verticalArea\"], \"chart-area-inactive-opacity\");\n setInactiveOpacity([\"line\", \"verticalLine\"], \"chart-line-inactive-opacity\");\n })();\n\n (function setSizes() {\n set(\"diagram.connectionDefaults.selection.handles.width\", 8);\n set(\"diagram.connectionDefaults.selection.handles.height\", 8);\n })();\n\n (function setFonts() {\n function font(varName) {\n return queryStyle(varName, \"fontWeight\") + \" \" +\n queryStyle(varName, \"fontSize\") + \" \" +\n queryStyle(varName, \"fontFamily\");\n }\n\n var defaultFont = font(\"chart-font\");\n var titleFont = font(\"chart-title-font\");\n var paneTitleFont = font(\"chart-pane-title-font\");\n var labelFont = font(\"chart-label-font\");\n\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 set(\"chart.subtitle.font\", paneTitleFont);\n set(\"chart.paneDefaults.title.font\", paneTitleFont);\n })();\n\n (function setSeriesColors() {\n function letterPos(letter) {\n return letter.toLowerCase().charCodeAt(0) - \"a\".charCodeAt(0);\n }\n\n function seriesPos(name) {\n var alpha = name.match(/series-([a-z])$/);\n if (alpha !== null) {\n return letterPos(alpha[1]);\n }\n\n var num = name.split('--series-')[1];\n return parseInt(num, 10) - 1;\n }\n\n var series = $(\".k-var--series div\").toArray();\n var unsetColor = $('.k-var--series-unset').css(\"backgroundColor\");\n var seriesColors = series.reduce(\n function(arr, el) {\n var pos = seriesPos(el.className);\n var color = $(el).css(\"backgroundColor\");\n\n if (color !== unsetColor) {\n arr[pos] = color;\n }\n\n return arr;\n },\n [] // Will populate the series colors in this array\n );\n\n set(\"chart.seriesColors\", seriesColors);\n })();\n\n hook.remove();\n\n cache = theme;\n\n return theme;\n }\n\n kendo.dataviz.autoTheme = autoTheme;\n })(window.kendo.jQuery);\n\n (function($) {\n\n // Imports ================================================================\n var kendo = window.kendo,\n ui = kendo.dataviz.ui,\n deepExtend = kendo.deepExtend;\n\n // Constants ==============================================================\n var BLACK = \"#000\",\n SANS = \"Arial,Helvetica,sans-serif\",\n SANS12 = \"12px \" + SANS,\n WHITE = \"#fff\";\n\n var chartBaseTheme = kendo.dataviz.chartBaseTheme({\n gradients: true\n });\n\n var gaugeBaseTheme = {\n scale: {\n labels: {\n font: SANS12\n }\n }\n };\n\n var diagramBaseTheme = {\n shapeDefaults: {\n hover: {\n opacity: 0.2\n },\n stroke: {\n width: 0\n }\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: {\n width: 2\n },\n selection: {\n handles: {\n width: 8,\n height: 8\n }\n },\n editable: {\n tools: [\"edit\", \"delete\"]\n }\n }\n };\n\n var themes = ui.themes,\n registerTheme = ui.registerTheme = function(themeName, options) {\n var result = {};\n // Apply base theme\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\n // Copy the line/area chart settings for their vertical counterparts\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\n themes[themeName] = result;\n };\n\n registerTheme(\"black\", {\n chart: {\n title: {\n color: WHITE\n },\n subtitle: {\n color: WHITE\n },\n legend: {\n labels: {\n color: WHITE\n },\n inactiveItems: {\n labels: {\n color: \"#919191\"\n },\n markers: {\n color: \"#919191\"\n }\n }\n },\n seriesDefaults: {\n labels: {\n color: WHITE\n },\n errorBars: {\n color: WHITE\n },\n notes: {\n icon: {\n background: \"#3b3b3b\",\n border: {\n color: \"#8e8e8e\"\n }\n },\n label: {\n color: WHITE\n },\n line: {\n color: \"#8e8e8e\"\n }\n },\n pie: {\n overlay: {\n gradient: \"sharpBevel\"\n }\n },\n donut: {\n overlay: {\n gradient: \"sharpGlass\"\n }\n },\n line: {\n markers: {\n background: \"#3d3d3d\"\n }\n },\n scatter: {\n markers: {\n background: \"#3d3d3d\"\n }\n },\n scatterLine: {\n markers: {\n background: \"#3d3d3d\"\n }\n },\n waterfall: {\n line: {\n color: \"#8e8e8e\"\n }\n },\n horizontalWaterfall: {\n line: {\n color: \"#8e8e8e\"\n }\n },\n candlestick: {\n downColor: \"#555\",\n line: {\n color: WHITE\n },\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: {\n line: {\n color: WHITE\n }\n }\n },\n chartArea: {\n background: \"#3d3d3d\"\n },\n seriesColors: [\"#0081da\", \"#3aafff\", \"#99c900\", \"#ffeb3d\", \"#b20753\", \"#ff4195\"],\n axisDefaults: {\n line: {\n color: \"#8e8e8e\"\n },\n labels: {\n color: WHITE\n },\n majorGridLines: {\n color: \"#545454\"\n },\n minorGridLines: {\n color: \"#454545\"\n },\n title: {\n color: WHITE\n },\n crosshair: {\n color: \"#8e8e8e\"\n },\n notes: {\n icon: {\n background: \"#3b3b3b\",\n border: {\n color: \"#8e8e8e\"\n }\n },\n label: {\n color: WHITE\n },\n line: {\n color: \"#8e8e8e\"\n }\n }\n }\n },\n gauge: {\n pointer: {\n color: \"#0070e4\"\n },\n scale: {\n rangePlaceholderColor: \"#1d1d1d\",\n labels: {\n color: WHITE\n },\n minorTicks: {\n color: WHITE\n },\n majorTicks: {\n color: WHITE\n },\n line: {\n color: WHITE\n }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: {\n color: \"#0066cc\"\n },\n connectorDefaults: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#384049\"\n },\n hover: {\n fill: {\n color: \"#3d3d3d\"\n },\n stroke: {\n color: \"#efefef\"\n }\n }\n },\n content: {\n color: WHITE\n }\n },\n editable: {\n resize: {\n handles: {\n fill: {\n color: \"#3d3d3d\"\n },\n stroke: {\n color: WHITE\n },\n hover: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: WHITE\n }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: {\n color: WHITE\n },\n fill: {\n color: WHITE\n }\n }\n }\n },\n selectable: {\n stroke: {\n color: WHITE\n }\n },\n connectionDefaults: {\n stroke: {\n color: WHITE\n },\n content: {\n color: WHITE\n },\n selection: {\n handles: {\n fill: {\n color: \"#3d3d3d\"\n },\n stroke: {\n color: \"#efefef\"\n }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\"#0081da\", \"#314b5c\"],\n [\"#3aafff\", \"#3c5464\"],\n [\"#99c900\", \"#4f5931\"],\n [\"#ffeb3d\", \"#64603d\"],\n [\"#b20753\", \"#543241\"],\n [\"#ff4195\", \"#643e4f\"]]\n }\n });\n\n registerTheme(\"blueopal\", {\n chart: {\n title: {\n color: \"#293135\"\n },\n subtitle: {\n color: \"#293135\"\n },\n legend: {\n labels: {\n color: \"#293135\"\n },\n inactiveItems: {\n labels: {\n color: \"#27A5BA\"\n },\n markers: {\n color: \"#27A5BA\"\n }\n }\n },\n seriesDefaults: {\n labels: {\n color: BLACK,\n background: WHITE,\n opacity: 0.5\n },\n errorBars: {\n color: \"#293135\"\n },\n candlestick: {\n downColor: \"#c4d0d5\",\n line: {\n color: \"#9aabb2\"\n }\n },\n waterfall: {\n line: {\n color: \"#9aabb2\"\n }\n },\n horizontalWaterfall: {\n line: {\n color: \"#9aabb2\"\n }\n },\n notes: {\n icon: {\n background: \"transparent\",\n border: {\n color: \"#9aabb2\"\n }\n },\n label: {\n color: \"#293135\"\n },\n line: {\n color: \"#9aabb2\"\n }\n }\n },\n seriesColors: [\"#0069a5\", \"#0098ee\", \"#7bd2f6\", \"#ffb800\", \"#ff8517\", \"#e34a00\"],\n axisDefaults: {\n line: {\n color: \"#9aabb2\"\n },\n labels: {\n color: \"#293135\"\n },\n majorGridLines: {\n color: \"#c4d0d5\"\n },\n minorGridLines: {\n color: \"#edf1f2\"\n },\n title: {\n color: \"#293135\"\n },\n crosshair: {\n color: \"#9aabb2\"\n },\n notes: {\n icon: {\n background: \"transparent\",\n border: {\n color: \"#9aabb2\"\n }\n },\n label: {\n color: \"#293135\"\n },\n line: {\n color: \"#9aabb2\"\n }\n }\n }\n },\n gauge: {\n pointer: {\n color: \"#005c83\"\n },\n scale: {\n rangePlaceholderColor: \"#daecf4\",\n\n labels: {\n color: \"#293135\"\n },\n minorTicks: {\n color: \"#293135\"\n },\n majorTicks: {\n color: \"#293135\"\n },\n line: {\n color: \"#293135\"\n }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: {\n color: \"#7ec6e3\"\n },\n connectorDefaults: {\n fill: {\n color: \"#003f59\"\n },\n stroke: {\n color: WHITE\n },\n hover: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#003f59\"\n }\n }\n },\n content: {\n color: \"#293135\"\n }\n },\n editable: {\n resize: {\n handles: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#003f59\"\n },\n hover: {\n fill: {\n color: \"#003f59\"\n },\n stroke: {\n color: \"#003f59\"\n }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: {\n color: \"#003f59\"\n },\n fill: {\n color: \"#003f59\"\n }\n }\n }\n },\n selectable: {\n stroke: {\n color: \"#003f59\"\n }\n },\n connectionDefaults: {\n stroke: {\n color: \"#003f59\"\n },\n content: {\n color: \"#293135\"\n },\n selection: {\n handles: {\n fill: {\n color: \"#3d3d3d\"\n },\n stroke: {\n color: \"#efefef\"\n }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\"#0069a5\", \"#bad7e7\"],\n [\"#0098ee\", \"#b9e0f5\"],\n [\"#7bd2f6\", \"#ceeaf6\"],\n [\"#ffb800\", \"#e6e3c4\"],\n [\"#ff8517\", \"#e4d8c8\"],\n [\"#e34a00\", \"#ddccc2\"]\n ]\n }\n });\n\n registerTheme(\"highcontrast\", {\n chart: {\n title: {\n color: \"#ffffff\"\n },\n subtitle: {\n color: \"#ffffff\"\n },\n legend: {\n labels: {\n color: \"#ffffff\"\n },\n inactiveItems: {\n labels: {\n color: \"#66465B\"\n },\n markers: {\n color: \"#66465B\"\n }\n }\n },\n seriesDefaults: {\n labels: {\n color: \"#ffffff\"\n },\n errorBars: {\n color: \"#ffffff\"\n },\n notes: {\n icon: {\n background: \"transparent\",\n border: {\n color: \"#ffffff\"\n }\n },\n label: {\n color: \"#ffffff\"\n },\n line: {\n color: \"#ffffff\"\n }\n },\n pie: {\n overlay: {\n gradient: \"sharpGlass\"\n }\n },\n donut: {\n overlay: {\n gradient: \"sharpGlass\"\n }\n },\n line: {\n markers: {\n background: \"#2c232b\"\n }\n },\n scatter: {\n markers: {\n background: \"#2c232b\"\n }\n },\n scatterLine: {\n markers: {\n background: \"#2c232b\"\n }\n },\n area: {\n opacity: 0.5\n },\n waterfall: {\n line: {\n color: \"#ffffff\"\n }\n },\n horizontalWaterfall: {\n line: {\n color: \"#ffffff\"\n }\n },\n candlestick: {\n downColor: \"#664e62\",\n line: {\n color: \"#ffffff\"\n },\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: {\n line: {\n color: \"#ffffff\"\n }\n }\n },\n chartArea: {\n background: \"#2c232b\"\n },\n seriesColors: [\"#a7008f\", \"#ffb800\", \"#3aafff\", \"#99c900\", \"#b20753\", \"#ff4195\"],\n axisDefaults: {\n line: {\n color: \"#ffffff\"\n },\n labels: {\n color: \"#ffffff\"\n },\n majorGridLines: {\n color: \"#664e62\"\n },\n minorGridLines: {\n color: \"#4f394b\"\n },\n title: {\n color: \"#ffffff\"\n },\n crosshair: {\n color: \"#ffffff\"\n },\n notes: {\n icon: {\n background: \"transparent\",\n border: {\n color: \"#ffffff\"\n }\n },\n label: {\n color: \"#ffffff\"\n },\n line: {\n color: \"#ffffff\"\n }\n }\n }\n },\n gauge: {\n pointer: {\n color: \"#a7008f\"\n },\n scale: {\n rangePlaceholderColor: \"#2c232b\",\n\n labels: {\n color: \"#ffffff\"\n },\n minorTicks: {\n color: \"#2c232b\"\n },\n majorTicks: {\n color: \"#664e62\"\n },\n line: {\n color: \"#ffffff\"\n }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: {\n color: \"#a7018f\"\n },\n connectorDefaults: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#2c232b\"\n },\n hover: {\n fill: {\n color: \"#2c232b\"\n },\n stroke: {\n color: WHITE\n }\n }\n },\n content: {\n color: WHITE\n }\n },\n editable: {\n resize: {\n handles: {\n fill: {\n color: \"#2c232b\"\n },\n stroke: {\n color: WHITE\n },\n hover: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: WHITE\n }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: {\n color: WHITE\n },\n fill: {\n color: WHITE\n }\n }\n }\n },\n selectable: {\n stroke: {\n color: WHITE\n }\n },\n connectionDefaults: {\n stroke: {\n color: WHITE\n },\n content: {\n color: WHITE\n },\n selection: {\n handles: {\n fill: {\n color: \"#2c232b\"\n },\n stroke: {\n color: WHITE\n }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\"#a7008f\", \"#451c3f\"],\n [\"#ffb800\", \"#564122\"],\n [\"#3aafff\", \"#2f3f55\"],\n [\"#99c900\", \"#424422\"],\n [\"#b20753\", \"#471d33\"],\n [\"#ff4195\", \"#562940\"]\n ]\n }\n });\n\n registerTheme(\"default\", {\n chart: {\n title: {\n color: \"#8e8e8e\"\n },\n subtitle: {\n color: \"#8e8e8e\"\n },\n legend: {\n labels: {\n color: \"#232323\"\n },\n inactiveItems: {\n labels: {\n color: \"#919191\"\n },\n markers: {\n color: \"#919191\"\n }\n }\n },\n seriesDefaults: {\n labels: {\n color: BLACK,\n background: WHITE,\n opacity: 0.5\n },\n errorBars: {\n color: \"#232323\"\n },\n candlestick: {\n downColor: \"#dedede\",\n line: {\n color: \"#8d8d8d\"\n }\n },\n waterfall: {\n line: {\n color: \"#8e8e8e\"\n }\n },\n horizontalWaterfall: {\n line: {\n color: \"#8e8e8e\"\n }\n },\n notes: {\n icon: {\n background: \"transparent\",\n border: {\n color: \"#8e8e8e\"\n }\n },\n label: {\n color: \"#232323\"\n },\n line: {\n color: \"#8e8e8e\"\n }\n }\n },\n seriesColors: [\"#ff6800\", \"#a0a700\", \"#ff8d00\", \"#678900\", \"#ffb53c\", \"#396000\"],\n axisDefaults: {\n line: {\n color: \"#8e8e8e\"\n },\n labels: {\n color: \"#232323\"\n },\n minorGridLines: {\n color: \"#f0f0f0\"\n },\n majorGridLines: {\n color: \"#dfdfdf\"\n },\n title: {\n color: \"#232323\"\n },\n crosshair: {\n color: \"#8e8e8e\"\n },\n notes: {\n icon: {\n background: \"transparent\",\n border: {\n color: \"#8e8e8e\"\n }\n },\n label: {\n color: \"#232323\"\n },\n line: {\n color: \"#8e8e8e\"\n }\n }\n }\n },\n gauge: {\n pointer: {\n color: \"#ea7001\"\n },\n scale: {\n rangePlaceholderColor: \"#dedede\",\n\n labels: {\n color: \"#2e2e2e\"\n },\n minorTicks: {\n color: \"#2e2e2e\"\n },\n majorTicks: {\n color: \"#2e2e2e\"\n },\n line: {\n color: \"#2e2e2e\"\n }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: {\n color: \"#e15613\"\n },\n connectorDefaults: {\n fill: {\n color: \"#282828\"\n },\n stroke: {\n color: WHITE\n },\n hover: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#282828\"\n }\n }\n },\n content: {\n color: \"#2e2e2e\"\n }\n },\n editable: {\n resize: {\n handles: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#282828\"\n },\n hover: {\n fill: {\n color: \"#282828\"\n },\n stroke: {\n color: \"#282828\"\n }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: {\n color: \"#282828\"\n },\n fill: {\n color: \"#282828\"\n }\n }\n }\n },\n selectable: {\n stroke: {\n color: \"#a7018f\"\n }\n },\n connectionDefaults: {\n stroke: {\n color: \"#282828\"\n },\n content: {\n color: \"#2e2e2e\"\n },\n selection: {\n handles: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#282828\"\n }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\"#ff6800\", \"#edcfba\"],\n [\"#a0a700\", \"#dadcba\"],\n [\"#ff8d00\", \"#edd7ba\"],\n [\"#678900\", \"#cfd6ba\"],\n [\"#ffb53c\", \"#eddfc6\"],\n [\"#396000\", \"#c6ceba\"]\n ]\n }\n });\n\n registerTheme(\"silver\", {\n chart: {\n title: {\n color: \"#4e5968\"\n },\n subtitle: {\n color: \"#4e5968\"\n },\n legend: {\n labels: {\n color: \"#4e5968\"\n },\n inactiveItems: {\n labels: {\n color: \"#B1BCC8\"\n },\n markers: {\n color: \"#B1BCC8\"\n }\n }\n },\n seriesDefaults: {\n labels: {\n color: \"#293135\",\n background: \"#eaeaec\",\n opacity: 0.5\n },\n errorBars: {\n color: \"#4e5968\"\n },\n notes: {\n icon: {\n background: \"transparent\",\n border: {\n color: \"#4e5968\"\n }\n },\n label: {\n color: \"#4e5968\"\n },\n line: {\n color: \"#4e5968\"\n }\n },\n line: {\n markers: {\n background: \"#eaeaec\"\n }\n },\n scatter: {\n markers: {\n background: \"#eaeaec\"\n }\n },\n scatterLine: {\n markers: {\n background: \"#eaeaec\"\n }\n },\n pie: {\n connectors: {\n color: \"#A6B1C0\"\n }\n },\n donut: {\n connectors: {\n color: \"#A6B1C0\"\n }\n },\n waterfall: {\n line: {\n color: \"#a6b1c0\"\n }\n },\n horizontalWaterfall: {\n line: {\n color: \"#a6b1c0\"\n }\n },\n candlestick: {\n downColor: \"#a6afbe\"\n }\n },\n chartArea: {\n background: \"#eaeaec\"\n },\n seriesColors: [\"#007bc3\", \"#76b800\", \"#ffae00\", \"#ef4c00\", \"#a419b7\", \"#430B62\"],\n axisDefaults: {\n line: {\n color: \"#a6b1c0\"\n },\n labels: {\n color: \"#4e5968\"\n },\n majorGridLines: {\n color: \"#dcdcdf\"\n },\n minorGridLines: {\n color: \"#eeeeef\"\n },\n title: {\n color: \"#4e5968\"\n },\n crosshair: {\n color: \"#a6b1c0\"\n },\n notes: {\n icon: {\n background: \"transparent\",\n border: {\n color: \"#4e5968\"\n }\n },\n label: {\n color: \"#4e5968\"\n },\n line: {\n color: \"#4e5968\"\n }\n }\n }\n },\n gauge: {\n pointer: {\n color: \"#0879c0\"\n },\n scale: {\n rangePlaceholderColor: \"#f3f3f4\",\n\n labels: {\n color: \"#515967\"\n },\n minorTicks: {\n color: \"#515967\"\n },\n majorTicks: {\n color: \"#515967\"\n },\n line: {\n color: \"#515967\"\n }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: {\n color: \"#1c82c2\"\n },\n connectorDefaults: {\n fill: {\n color: \"#515967\"\n },\n stroke: {\n color: WHITE\n },\n hover: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#282828\"\n }\n }\n },\n content: {\n color: \"#515967\"\n }\n },\n editable: {\n resize: {\n handles: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#515967\"\n },\n hover: {\n fill: {\n color: \"#515967\"\n },\n stroke: {\n color: \"#515967\"\n }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: {\n color: \"#515967\"\n },\n fill: {\n color: \"#515967\"\n }\n }\n }\n },\n selectable: {\n stroke: {\n color: \"#515967\"\n }\n },\n connectionDefaults: {\n stroke: {\n color: \"#515967\"\n },\n content: {\n color: \"#515967\"\n },\n selection: {\n handles: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#515967\"\n }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\"#007bc3\", \"#c2dbea\"],\n [\"#76b800\", \"#dae7c3\"],\n [\"#ffae00\", \"#f5e5c3\"],\n [\"#ef4c00\", \"#f2d2c3\"],\n [\"#a419b7\", \"#e3c7e8\"],\n [\"#430b62\", \"#d0c5d7\"]\n ]\n }\n });\n\n registerTheme(\"metro\", {\n chart: {\n title: {\n color: \"#777777\"\n },\n subtitle: {\n color: \"#777777\"\n },\n legend: {\n labels: {\n color: \"#777777\"\n },\n inactiveItems: {\n labels: {\n color: \"#CBCBCB\"\n },\n markers: {\n color: \"#CBCBCB\"\n }\n }\n },\n seriesDefaults: {\n labels: {\n color: BLACK\n },\n errorBars: {\n color: \"#777777\"\n },\n notes: {\n icon: {\n background: \"transparent\",\n border: {\n color: \"#777777\"\n }\n },\n label: {\n color: \"#777777\"\n },\n line: {\n color: \"#777777\"\n }\n },\n candlestick: {\n downColor: \"#c7c7c7\",\n line: {\n color: \"#787878\"\n }\n },\n waterfall: {\n line: {\n color: \"#c7c7c7\"\n }\n },\n horizontalWaterfall: {\n line: {\n color: \"#c7c7c7\"\n }\n },\n overlay: {\n gradient: \"none\"\n },\n border: {\n _brightness: 1\n }\n },\n seriesColors: [\"#8ebc00\", \"#309b46\", \"#25a0da\", \"#ff6900\", \"#e61e26\", \"#d8e404\", \"#16aba9\", \"#7e51a1\", \"#313131\", \"#ed1691\"],\n axisDefaults: {\n line: {\n color: \"#c7c7c7\"\n },\n labels: {\n color: \"#777777\"\n },\n minorGridLines: {\n color: \"#c7c7c7\"\n },\n majorGridLines: {\n color: \"#c7c7c7\"\n },\n title: {\n color: \"#777777\"\n },\n crosshair: {\n color: \"#c7c7c7\"\n },\n notes: {\n icon: {\n background: \"transparent\",\n border: {\n color: \"#777777\"\n }\n },\n label: {\n color: \"#777777\"\n },\n line: {\n color: \"#777777\"\n }\n }\n }\n },\n gauge: {\n pointer: {\n color: \"#8ebc00\"\n },\n scale: {\n rangePlaceholderColor: \"#e6e6e6\",\n\n labels: {\n color: \"#777\"\n },\n minorTicks: {\n color: \"#777\"\n },\n majorTicks: {\n color: \"#777\"\n },\n line: {\n color: \"#777\"\n }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: {\n color: \"#8ebc00\"\n },\n connectorDefaults: {\n fill: {\n color: BLACK\n },\n stroke: {\n color: WHITE\n },\n hover: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: BLACK\n }\n }\n },\n content: {\n color: \"#777\"\n }\n },\n editable: {\n resize: {\n handles: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#787878\"\n },\n hover: {\n fill: {\n color: \"#787878\"\n },\n stroke: {\n color: \"#787878\"\n }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: {\n color: \"#787878\"\n },\n fill: {\n color: \"#787878\"\n }\n }\n }\n },\n selectable: {\n stroke: {\n color: \"#515967\"\n }\n },\n connectionDefaults: {\n stroke: {\n color: \"#787878\"\n },\n content: {\n color: \"#777\"\n },\n selection: {\n handles: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#787878\"\n }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\"#8ebc00\", \"#e8f2cc\"],\n [\"#309b46\", \"#d6ebda\"],\n [\"#25a0da\", \"#d3ecf8\"],\n [\"#ff6900\", \"#ffe1cc\"],\n [\"#e61e26\", \"#fad2d4\"],\n [\"#d8e404\", \"#f7facd\"],\n [\"#16aba9\", \"#d0eeee\"],\n [\"#7e51a1\", \"#e5dcec\"],\n [\"#313131\", \"#d6d6d6\"],\n [\"#ed1691\", \"#fbd0e9\"]\n ]\n }\n });\n\n registerTheme(\"metroblack\", {\n chart: {\n title: {\n color: \"#ffffff\"\n },\n subtitle: {\n color: \"#ffffff\"\n },\n legend: {\n labels: {\n color: \"#ffffff\"\n },\n inactiveItems: {\n labels: {\n color: \"#797979\"\n },\n markers: {\n color: \"#797979\"\n }\n }\n },\n seriesDefaults: {\n border: {\n _brightness: 1\n },\n labels: {\n color: \"#ffffff\"\n },\n errorBars: {\n color: \"#ffffff\"\n },\n notes: {\n icon: {\n background: \"transparent\",\n border: {\n color: \"#cecece\"\n }\n },\n label: {\n color: \"#ffffff\"\n },\n line: {\n color: \"#cecece\"\n }\n },\n line: {\n markers: {\n background: \"#0e0e0e\"\n }\n },\n bubble: {\n opacity: 0.6\n },\n scatter: {\n markers: {\n background: \"#0e0e0e\"\n }\n },\n scatterLine: {\n markers: {\n background: \"#0e0e0e\"\n }\n },\n candlestick: {\n downColor: \"#828282\",\n line: {\n color: \"#ffffff\"\n }\n },\n waterfall: {\n line: {\n color: \"#cecece\"\n }\n },\n horizontalWaterfall: {\n line: {\n color: \"#cecece\"\n }\n },\n overlay: {\n gradient: \"none\"\n }\n },\n chartArea: {\n background: \"#0e0e0e\"\n },\n seriesColors: [\"#00aba9\", \"#309b46\", \"#8ebc00\", \"#ff6900\", \"#e61e26\", \"#d8e404\", \"#25a0da\", \"#7e51a1\", \"#313131\", \"#ed1691\"],\n axisDefaults: {\n line: {\n color: \"#cecece\"\n },\n labels: {\n color: \"#ffffff\"\n },\n minorGridLines: {\n color: \"#2d2d2d\"\n },\n majorGridLines: {\n color: \"#333333\"\n },\n title: {\n color: \"#ffffff\"\n },\n crosshair: {\n color: \"#cecece\"\n },\n notes: {\n icon: {\n background: \"transparent\",\n border: {\n color: \"#cecece\"\n }\n },\n label: {\n color: \"#ffffff\"\n },\n line: {\n color: \"#cecece\"\n }\n }\n }\n },\n gauge: {\n pointer: {\n color: \"#00aba9\"\n },\n scale: {\n rangePlaceholderColor: \"#2d2d2d\",\n\n labels: {\n color: \"#ffffff\"\n },\n minorTicks: {\n color: \"#333333\"\n },\n majorTicks: {\n color: \"#cecece\"\n },\n line: {\n color: \"#cecece\"\n }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: {\n color: \"#00aba9\"\n },\n connectorDefaults: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#0e0e0e\"\n },\n hover: {\n fill: {\n color: \"#0e0e0e\"\n },\n stroke: {\n color: WHITE\n }\n }\n },\n content: {\n color: WHITE\n }\n },\n editable: {\n resize: {\n handles: {\n fill: {\n color: \"#0e0e0e\"\n },\n stroke: {\n color: \"#787878\"\n },\n hover: {\n fill: {\n color: \"#787878\"\n },\n stroke: {\n color: \"#787878\"\n }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: {\n color: WHITE\n },\n fill: {\n color: WHITE\n }\n }\n }\n },\n selectable: {\n stroke: {\n color: \"#787878\"\n }\n },\n connectionDefaults: {\n stroke: {\n color: WHITE\n },\n content: {\n color: WHITE\n },\n selection: {\n handles: {\n fill: {\n color: \"#0e0e0e\"\n },\n stroke: {\n color: WHITE\n }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\"#00aba9\", \"#0b2d2d\"],\n [\"#309b46\", \"#152a19\"],\n [\"#8ebc00\", \"#28310b\"],\n [\"#ff6900\", \"#3e200b\"],\n [\"#e61e26\", \"#391113\"],\n [\"#d8e404\", \"#36390c\"],\n [\"#25a0da\", \"#132b37\"],\n [\"#7e51a1\", \"#241b2b\"],\n [\"#313131\", \"#151515\"],\n [\"#ed1691\", \"#3b1028\"]\n ]\n }\n });\n\n registerTheme(\"moonlight\", {\n chart: {\n title: {\n color: \"#ffffff\"\n },\n subtitle: {\n color: \"#ffffff\"\n },\n legend: {\n labels: {\n color: \"#ffffff\"\n },\n inactiveItems: {\n labels: {\n color: \"#A1A7AB\"\n },\n markers: {\n color: \"#A1A7AB\"\n }\n }\n },\n seriesDefaults: {\n labels: {\n color: \"#ffffff\"\n },\n errorBars: {\n color: \"#ffffff\"\n },\n notes: {\n icon: {\n background: \"transparent\",\n border: {\n color: \"#8c909e\"\n }\n },\n label: {\n color: \"#ffffff\"\n },\n line: {\n color: \"#8c909e\"\n }\n },\n pie: {\n overlay: {\n gradient: \"sharpBevel\"\n }\n },\n donut: {\n overlay: {\n gradient: \"sharpGlass\"\n }\n },\n line: {\n markers: {\n background: \"#212a33\"\n }\n },\n bubble: {\n opacity: 0.6\n },\n scatter: {\n markers: {\n background: \"#212a33\"\n }\n },\n scatterLine: {\n markers: {\n background: \"#212a33\"\n }\n },\n area: {\n opacity: 0.3\n },\n candlestick: {\n downColor: \"#757d87\",\n line: {\n color: \"#ea9d06\"\n },\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: {\n line: {\n color: \"#8c909e\"\n }\n },\n horizontalWaterfall: {\n line: {\n color: \"#8c909e\"\n }\n },\n ohlc: {\n line: {\n color: \"#ea9d06\"\n }\n }\n },\n chartArea: {\n background: \"#212a33\"\n },\n seriesColors: [\"#ffca08\", \"#ff710f\", \"#ed2e24\", \"#ff9f03\", \"#e13c02\", \"#a00201\"],\n axisDefaults: {\n line: {\n color: \"#8c909e\"\n },\n minorTicks: {\n color: \"#8c909e\"\n },\n majorTicks: {\n color: \"#8c909e\"\n },\n labels: {\n color: \"#ffffff\"\n },\n majorGridLines: {\n color: \"#3e424d\"\n },\n minorGridLines: {\n color: \"#2f3640\"\n },\n title: {\n color: \"#ffffff\"\n },\n crosshair: {\n color: \"#8c909e\"\n },\n notes: {\n icon: {\n background: \"transparent\",\n border: {\n color: \"#8c909e\"\n }\n },\n label: {\n color: \"#ffffff\"\n },\n line: {\n color: \"#8c909e\"\n }\n }\n }\n },\n gauge: {\n pointer: {\n color: \"#f4af03\"\n },\n scale: {\n rangePlaceholderColor: \"#2f3640\",\n\n labels: {\n color: WHITE\n },\n minorTicks: {\n color: \"#8c909e\"\n },\n majorTicks: {\n color: \"#8c909e\"\n },\n line: {\n color: \"#8c909e\"\n }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: {\n color: \"#f3ae03\"\n },\n connectorDefaults: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#414550\"\n },\n hover: {\n fill: {\n color: \"#414550\"\n },\n stroke: {\n color: WHITE\n }\n }\n },\n content: {\n color: WHITE\n }\n },\n editable: {\n resize: {\n handles: {\n fill: {\n color: \"#414550\"\n },\n stroke: {\n color: WHITE\n },\n hover: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: WHITE\n }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: {\n color: WHITE\n },\n fill: {\n color: WHITE\n }\n }\n }\n },\n selectable: {\n stroke: {\n color: WHITE\n }\n },\n connectionDefaults: {\n stroke: {\n color: WHITE\n },\n content: {\n color: WHITE\n },\n selection: {\n handles: {\n fill: {\n color: \"#414550\"\n },\n stroke: {\n color: WHITE\n }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\"#ffca08\", \"#4e4b2b\"],\n [\"#ff710f\", \"#4e392d\"],\n [\"#ed2e24\", \"#4b2c31\"],\n [\"#ff9f03\", \"#4e422a\"],\n [\"#e13c02\", \"#482e2a\"],\n [\"#a00201\", \"#3b232a\"]\n ]\n }\n });\n\n registerTheme(\"uniform\", {\n chart: {\n title: {\n color: \"#686868\"\n },\n subtitle: {\n color: \"#686868\"\n },\n legend: {\n labels: {\n color: \"#686868\"\n },\n inactiveItems: {\n labels: {\n color: \"#B6B6B6\"\n },\n markers: {\n color: \"#B6B6B6\"\n }\n }\n },\n seriesDefaults: {\n labels: {\n color: \"#686868\"\n },\n errorBars: {\n color: \"#686868\"\n },\n notes: {\n icon: {\n background: \"transparent\",\n border: {\n color: \"#9e9e9e\"\n }\n },\n label: {\n color: \"#686868\"\n },\n line: {\n color: \"#9e9e9e\"\n }\n },\n pie: {\n overlay: {\n gradient: \"sharpBevel\"\n }\n },\n donut: {\n overlay: {\n gradient: \"sharpGlass\"\n }\n },\n line: {\n markers: {\n background: \"#ffffff\"\n }\n },\n bubble: {\n opacity: 0.6\n },\n scatter: {\n markers: {\n background: \"#ffffff\"\n }\n },\n scatterLine: {\n markers: {\n background: \"#ffffff\"\n }\n },\n area: {\n opacity: 0.3\n },\n candlestick: {\n downColor: \"#cccccc\",\n line: {\n color: \"#cccccc\"\n },\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: {\n line: {\n color: \"#9e9e9e\"\n }\n },\n horizontalWaterfall: {\n line: {\n color: \"#9e9e9e\"\n }\n },\n ohlc: {\n line: {\n color: \"#cccccc\"\n }\n }\n },\n chartArea: {\n background: \"#ffffff\"\n },\n seriesColors: [\"#527aa3\", \"#6f91b3\", \"#8ca7c2\", \"#a8bdd1\", \"#c5d3e0\", \"#e2e9f0\"],\n axisDefaults: {\n line: {\n color: \"#9e9e9e\"\n },\n minorTicks: {\n color: \"#aaaaaa\"\n },\n majorTicks: {\n color: \"#888888\"\n },\n labels: {\n color: \"#686868\"\n },\n majorGridLines: {\n color: \"#dadada\"\n },\n minorGridLines: {\n color: \"#e7e7e7\"\n },\n title: {\n color: \"#686868\"\n },\n crosshair: {\n color: \"#9e9e9e\"\n },\n notes: {\n icon: {\n background: \"transparent\",\n border: {\n color: \"#9e9e9e\"\n }\n },\n label: {\n color: \"#686868\"\n },\n line: {\n color: \"#9e9e9e\"\n }\n }\n }\n },\n gauge: {\n pointer: {\n color: \"#527aa3\"\n },\n scale: {\n rangePlaceholderColor: \"#e7e7e7\",\n\n labels: {\n color: \"#686868\"\n },\n minorTicks: {\n color: \"#aaaaaa\"\n },\n majorTicks: {\n color: \"#888888\"\n },\n line: {\n color: \"#9e9e9e\"\n }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: {\n color: \"#d1d1d1\"\n },\n connectorDefaults: {\n fill: {\n color: \"#686868\"\n },\n stroke: {\n color: WHITE\n },\n hover: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#686868\"\n }\n }\n },\n content: {\n color: \"#686868\"\n }\n },\n editable: {\n resize: {\n handles: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#686868\"\n },\n hover: {\n fill: {\n color: \"#686868\"\n },\n stroke: {\n color: \"#686868\"\n }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: {\n color: \"#686868\"\n },\n fill: {\n color: \"#686868\"\n }\n }\n }\n },\n selectable: {\n stroke: {\n color: \"#686868\"\n }\n },\n connectionDefaults: {\n stroke: {\n color: \"#686868\"\n },\n content: {\n color: \"#686868\"\n },\n selection: {\n handles: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#686868\"\n }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\"#527aa3\", \"#d0d8e1\"],\n [\"#6f91b3\", \"#d6dde4\"],\n [\"#8ca7c2\", \"#dce1e7\"],\n [\"#a8bdd1\", \"#e2e6ea\"],\n [\"#c5d3e0\", \"#e7eaed\"],\n [\"#e2e9f0\", \"#edeff0\"]\n ]\n }\n });\n\n registerTheme(\"bootstrap\", {\n chart: {\n title: {\n color: \"#333333\"\n },\n subtitle: {\n color: \"#333333\"\n },\n legend: {\n labels: {\n color: \"#333333\"\n },\n inactiveItems: {\n labels: {\n color: \"#999999\"\n },\n markers: {\n color: \"#9A9A9A\"\n }\n }\n },\n seriesDefaults: {\n labels: {\n color: \"#333333\"\n },\n overlay: {\n gradient: \"none\"\n },\n errorBars: {\n color: \"#343434\"\n },\n notes: {\n icon: {\n background: \"#000000\",\n border: {\n color: \"#000000\"\n }\n },\n label: {\n color: \"#333333\"\n },\n line: {\n color: \"#000000\"\n }\n },\n pie: {\n overlay: {\n gradient: \"none\"\n }\n },\n donut: {\n overlay: {\n gradient: \"none\"\n }\n },\n line: {\n markers: {\n background: \"#ffffff\"\n }\n },\n bubble: {\n opacity: 0.6\n },\n scatter: {\n markers: {\n background: \"#ffffff\"\n }\n },\n scatterLine: {\n markers: {\n background: \"#ffffff\"\n }\n },\n area: {\n opacity: 0.8\n },\n candlestick: {\n downColor: \"#d0d0d0\",\n line: {\n color: \"#333333\"\n },\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: {\n line: {\n color: \"#cccccc\"\n }\n },\n horizontalWaterfall: {\n line: {\n color: \"#cccccc\"\n }\n },\n ohlc: {\n line: {\n color: \"#333333\"\n }\n }\n },\n chartArea: {\n background: \"#ffffff\"\n },\n seriesColors: [\"#428bca\", \"#5bc0de\", \"#5cb85c\", \"#f2b661\", \"#e67d4a\", \"#da3b36\"],\n axisDefaults: {\n line: {\n color: \"#cccccc\"\n },\n minorTicks: {\n color: \"#ebebeb\"\n },\n majorTicks: {\n color: \"#cccccc\"\n },\n labels: {\n color: \"#333333\"\n },\n majorGridLines: {\n color: \"#cccccc\"\n },\n minorGridLines: {\n color: \"#ebebeb\"\n },\n title: {\n color: \"#333333\"\n },\n crosshair: {\n color: \"#000000\"\n },\n notes: {\n icon: {\n background: \"#000000\",\n border: {\n color: \"#000000\"\n }\n },\n label: {\n color: \"#ffffff\"\n },\n line: {\n color: \"#000000\"\n }\n }\n }\n },\n gauge: {\n pointer: {\n color: \"#428bca\"\n },\n scale: {\n rangePlaceholderColor: \"#cccccc\",\n labels: {\n color: \"#333333\"\n },\n minorTicks: {\n color: \"#ebebeb\"\n },\n majorTicks: {\n color: \"#cccccc\"\n },\n line: {\n color: \"#cccccc\"\n }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: {\n color: \"#428bca\"\n },\n connectorDefaults: {\n fill: {\n color: \"#333333\"\n },\n stroke: {\n color: WHITE\n },\n hover: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#333333\"\n }\n }\n },\n content: {\n color: \"#333333\"\n }\n },\n editable: {\n resize: {\n handles: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#333333\"\n },\n hover: {\n fill: {\n color: \"#333333\"\n },\n stroke: {\n color: \"#333333\"\n }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: {\n color: \"#333333\"\n },\n fill: {\n color: \"#333333\"\n }\n }\n }\n },\n selectable: {\n stroke: {\n color: \"#333333\"\n }\n },\n connectionDefaults: {\n stroke: {\n color: \"#c4c4c4\"\n },\n content: {\n color: \"#333333\"\n },\n selection: {\n handles: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#333333\"\n }\n },\n stroke: {\n color: \"#333333\"\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\"#428bca\", \"#d1e0ec\"],\n [\"#5bc0de\", \"#d6eaf0\"],\n [\"#5cb85c\", \"#d6e9d6\"],\n [\"#5cb85c\", \"#f4e8d7\"],\n [\"#e67d4a\", \"#f2ddd3\"],\n [\"#da3b36\", \"#f0d0cf\"]\n ]\n }\n });\n\n registerTheme(\"flat\", {\n chart: {\n title: {\n color: \"#4c5356\"\n },\n subtitle: {\n color: \"#4c5356\"\n },\n legend: {\n labels: {\n color: \"#4c5356\"\n },\n inactiveItems: {\n labels: {\n color: \"#CBCBCB\"\n },\n markers: {\n color: \"#CBCBCB\"\n }\n }\n },\n seriesDefaults: {\n labels: {\n color: \"#4c5356\"\n },\n errorBars: {\n color: \"#4c5356\"\n },\n notes: {\n icon: {\n background: \"transparent\",\n border: {\n color: \"#cdcdcd\"\n }\n },\n label: {\n color: \"#4c5356\"\n },\n line: {\n color: \"#cdcdcd\"\n }\n },\n candlestick: {\n downColor: \"#c7c7c7\",\n line: {\n color: \"#787878\"\n }\n },\n area: {\n opacity: 0.9\n },\n waterfall: {\n line: {\n color: \"#cdcdcd\"\n }\n },\n horizontalWaterfall: {\n line: {\n color: \"#cdcdcd\"\n }\n },\n overlay: {\n gradient: \"none\"\n },\n border: {\n _brightness: 1\n }\n },\n seriesColors: [\"#10c4b2\", \"#ff7663\", \"#ffb74f\", \"#a2df53\", \"#1c9ec4\", \"#ff63a5\", \"#1cc47b\"],\n axisDefaults: {\n line: {\n color: \"#cdcdcd\"\n },\n labels: {\n color: \"#4c5356\"\n },\n minorGridLines: {\n color: \"#cdcdcd\"\n },\n majorGridLines: {\n color: \"#cdcdcd\"\n },\n title: {\n color: \"#4c5356\"\n },\n crosshair: {\n color: \"#cdcdcd\"\n },\n notes: {\n icon: {\n background: \"transparent\",\n border: {\n color: \"#cdcdcd\"\n }\n },\n label: {\n color: \"#4c5356\"\n },\n line: {\n color: \"#cdcdcd\"\n }\n }\n }\n },\n gauge: {\n pointer: {\n color: \"#10c4b2\"\n },\n scale: {\n rangePlaceholderColor: \"#cdcdcd\",\n\n labels: {\n color: \"#4c5356\"\n },\n minorTicks: {\n color: \"#4c5356\"\n },\n majorTicks: {\n color: \"#4c5356\"\n },\n line: {\n color: \"#4c5356\"\n }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: {\n color: \"#10c4b2\"\n },\n connectorDefaults: {\n fill: {\n color: \"#363940\"\n },\n stroke: {\n color: WHITE\n },\n hover: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#363940\"\n }\n }\n },\n content: {\n color: \"#4c5356\"\n }\n },\n editable: {\n resize: {\n handles: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#363940\"\n },\n hover: {\n fill: {\n color: \"#363940\"\n },\n stroke: {\n color: \"#363940\"\n }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: {\n color: \"#363940\"\n },\n fill: {\n color: \"#363940\"\n }\n }\n }\n },\n selectable: {\n stroke: {\n color: \"#363940\"\n }\n },\n connectionDefaults: {\n stroke: {\n color: \"#cdcdcd\"\n },\n content: {\n color: \"#4c5356\"\n },\n selection: {\n handles: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#363940\"\n }\n },\n stroke: {\n color: \"#363940\"\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\"#10c4b2\", \"#cff3f0\"],\n [\"#ff7663\", \"#ffe4e0\"],\n [\"#ffb74f\", \"#fff1dc\"],\n [\"#a2df53\", \"#ecf9dd\"],\n [\"#1c9ec4\", \"#d2ecf3\"],\n [\"#ff63a5\", \"#ffe0ed\"],\n [\"#1cc47b\", \"#d2f3e5\"]\n ]\n }\n });\n\n\n registerTheme(\"material\", {\n chart: {\n title: {\n color: \"#444444\"\n },\n subtitle: {\n color: \"#444444\"\n },\n legend: {\n labels: {\n color: \"#444444\"\n },\n inactiveItems: {\n labels: {\n color: \"#CBCBCB\"\n },\n markers: {\n color: \"#CBCBCB\"\n }\n }\n },\n seriesDefaults: {\n labels: {\n color: \"#444444\"\n },\n errorBars: {\n color: \"#444444\"\n },\n notes: {\n icon: {\n background: \"transparent\",\n border: {\n color: \"#e5e5e5\"\n }\n },\n label: {\n color: \"#444444\"\n },\n line: {\n color: \"#e5e5e5\"\n }\n },\n candlestick: {\n downColor: \"#c7c7c7\",\n line: {\n color: \"#787878\"\n }\n },\n area: {\n opacity: 0.9\n },\n waterfall: {\n line: {\n color: \"#e5e5e5\"\n }\n },\n horizontalWaterfall: {\n line: {\n color: \"#e5e5e5\"\n }\n },\n overlay: {\n gradient: \"none\"\n },\n border: {\n _brightness: 1\n }\n },\n seriesColors: [\"#3f51b5\", \"#03a9f4\", \"#4caf50\", \"#f9ce1d\", \"#ff9800\", \"#ff5722\"],\n axisDefaults: {\n line: {\n color: \"#e5e5e5\"\n },\n labels: {\n color: \"#444444\"\n },\n minorGridLines: {\n color: \"#e5e5e5\"\n },\n majorGridLines: {\n color: \"#e5e5e5\"\n },\n title: {\n color: \"#444444\"\n },\n crosshair: {\n color: \"#7f7f7f\"\n },\n notes: {\n icon: {\n background: \"transparent\",\n border: {\n color: \"#e5e5e5\"\n }\n },\n label: {\n color: \"#444444\"\n },\n line: {\n color: \"#e5e5e5\"\n }\n }\n }\n },\n gauge: {\n pointer: {\n color: \"#3f51b5\"\n },\n scale: {\n rangePlaceholderColor: \"#e5e5e5\",\n\n labels: {\n color: \"#444444\"\n },\n minorTicks: {\n color: \"#444444\"\n },\n majorTicks: {\n color: \"#444444\"\n },\n line: {\n color: \"#444444\"\n }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: {\n color: \"#3f51b5\"\n },\n connectorDefaults: {\n fill: {\n color: \"#7f7f7f\"\n },\n stroke: {\n color: WHITE\n },\n hover: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#7f7f7f\"\n }\n }\n },\n content: {\n color: \"#444444\"\n }\n },\n editable: {\n resize: {\n handles: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#444444\"\n },\n hover: {\n fill: {\n color: \"#444444\"\n },\n stroke: {\n color: \"#444444\"\n }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: {\n color: \"#444444\"\n },\n fill: {\n color: \"#444444\"\n }\n }\n }\n },\n selectable: {\n stroke: {\n color: \"#444444\"\n }\n },\n connectionDefaults: {\n stroke: {\n color: \"#7f7f7f\"\n },\n content: {\n color: \"#444444\"\n },\n selection: {\n handles: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#444444\"\n }\n },\n stroke: {\n color: \"#444444\"\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\"#3f51b5\", \"#cff3f0\"],\n [\"#03a9f4\", \"#e5f6fe\"],\n [\"#4caf50\", \"#edf7ed\"],\n [\"#f9ce1d\", \"#fefae8\"],\n [\"#ff9800\", \"#fff4e5\"],\n [\"#ff5722\", \"#ffeee8\"]\n ]\n }\n });\n\n registerTheme(\"materialblack\", {\n chart: {\n title: {\n color: \"#fff\"\n },\n subtitle: {\n color: \"#fff\"\n },\n legend: {\n labels: {\n color: \"#fff\"\n },\n inactiveItems: {\n labels: {\n color: \"#CBCBCB\"\n },\n markers: {\n color: \"#CBCBCB\"\n }\n }\n },\n seriesDefaults: {\n labels: {\n color: \"#fff\"\n },\n errorBars: {\n color: \"#fff\"\n },\n notes: {\n icon: {\n background: \"transparent\",\n border: {\n color: \"#e5e5e5\"\n }\n },\n label: {\n color: \"#fff\"\n },\n line: {\n color: \"#e5e5e5\"\n }\n },\n candlestick: {\n downColor: \"#c7c7c7\",\n line: {\n color: \"#787878\"\n }\n },\n area: {\n opacity: 0.9\n },\n waterfall: {\n line: {\n color: \"#4d4d4d\"\n }\n },\n horizontalWaterfall: {\n line: {\n color: \"#4d4d4d\"\n }\n },\n overlay: {\n gradient: \"none\"\n },\n border: {\n _brightness: 1\n }\n },\n chartArea: {\n background: \"#1c1c1c\"\n },\n seriesColors: [\"#3f51b5\", \"#03a9f4\", \"#4caf50\", \"#f9ce1d\", \"#ff9800\", \"#ff5722\"],\n axisDefaults: {\n line: {\n color: \"#4d4d4d\"\n },\n labels: {\n color: \"#fff\"\n },\n minorGridLines: {\n color: \"#4d4d4d\"\n },\n majorGridLines: {\n color: \"#4d4d4d\"\n },\n title: {\n color: \"#fff\"\n },\n crosshair: {\n color: \"#7f7f7f\"\n },\n notes: {\n icon: {\n background: \"transparent\",\n border: {\n color: \"#4d4d4d\"\n }\n },\n label: {\n color: \"#fff\"\n },\n line: {\n color: \"#4d4d4d\"\n }\n }\n }\n },\n gauge: {\n pointer: {\n color: \"#3f51b5\"\n },\n scale: {\n rangePlaceholderColor: \"#4d4d4d\",\n\n labels: {\n color: \"#fff\"\n },\n minorTicks: {\n color: \"#fff\"\n },\n majorTicks: {\n color: \"#fff\"\n },\n line: {\n color: \"#fff\"\n }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: {\n color: \"#3f51b5\"\n },\n connectorDefaults: {\n fill: {\n color: \"#7f7f7f\"\n },\n stroke: {\n color: WHITE\n },\n hover: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#7f7f7f\"\n }\n }\n },\n content: {\n color: \"#fff\"\n }\n },\n editable: {\n resize: {\n handles: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#fff\"\n },\n hover: {\n fill: {\n color: \"#fff\"\n },\n stroke: {\n color: \"#fff\"\n }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: {\n color: \"#fff\"\n },\n fill: {\n color: \"#fff\"\n }\n }\n }\n },\n selectable: {\n stroke: {\n color: \"#fff\"\n }\n },\n connectionDefaults: {\n stroke: {\n color: \"#7f7f7f\"\n },\n content: {\n color: \"#fff\"\n },\n selection: {\n handles: {\n fill: {\n color: WHITE\n },\n stroke: {\n color: \"#fff\"\n }\n },\n stroke: {\n color: \"#fff\"\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\"#3f51b5\", \"#cff3f0\"],\n [\"#03a9f4\", \"#e5f6fe\"],\n [\"#4caf50\", \"#edf7ed\"],\n [\"#f9ce1d\", \"#fefae8\"],\n [\"#ff9800\", \"#fff4e5\"],\n [\"#ff5722\", \"#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 = [\"#008fd3\", \"#99d101\", \"#f39b02\", \"#f05662\", \"#c03c53\", \"#acacac\"];\n var SERIES_LIGHT = [\"#cbe8f5\", \"#eaf5cb\", \"#fceacc\", \"#fbdcdf\", \"#f2d7dc\", \"#eeeeee\"];\n var PRIMARY = SERIES[0];\n var DIAGRAM_HOVER = WHITE;\n\n function noteStyle() {\n return {\n icon: {\n background: \"#007cc0\",\n border: {\n color: \"#007cc0\"\n }\n },\n label: {\n color: \"#ffffff\"\n },\n line: {\n color: AXIS\n }\n };\n }\n\n registerTheme(\"fiori\", {\n chart: {\n title: {\n color: TEXT\n },\n subtitle: {\n color: TEXT\n },\n legend: {\n labels: {\n color: TEXT\n },\n inactiveItems: {\n labels: {\n color: INACTIVE\n },\n markers: {\n color: INACTIVE\n }\n }\n },\n seriesDefaults: {\n labels: {\n color: TEXT\n },\n errorBars: {\n color: TEXT\n },\n notes: noteStyle(),\n candlestick: {\n downColor: AXIS,\n line: {\n color: INACTIVE_SHAPE\n }\n },\n area: {\n opacity: 0.8\n },\n waterfall: {\n line: {\n color: AXIS\n }\n },\n horizontalWaterfall: {\n line: {\n color: AXIS\n }\n },\n overlay: {\n gradient: \"none\"\n },\n border: {\n _brightness: 1\n }\n },\n seriesColors: SERIES,\n axisDefaults: {\n line: {\n color: AXIS\n },\n labels: {\n color: TEXT\n },\n minorGridLines: {\n color: AXIS_MINOR\n },\n majorGridLines: {\n color: AXIS\n },\n title: {\n color: TEXT\n },\n crosshair: {\n color: INACTIVE\n },\n notes: noteStyle()\n }\n },\n gauge: {\n pointer: {\n color: PRIMARY\n },\n scale: {\n rangePlaceholderColor: AXIS,\n labels: {\n color: TEXT\n },\n minorTicks: {\n color: TEXT\n },\n majorTicks: {\n color: TEXT\n },\n line: {\n color: TEXT\n }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: {\n color: PRIMARY\n },\n connectorDefaults: {\n fill: {\n color: TEXT\n },\n stroke: {\n color: DIAGRAM_HOVER\n },\n hover: {\n fill: {\n color: DIAGRAM_HOVER\n },\n stroke: {\n color: TEXT\n }\n }\n },\n content: {\n color: TEXT\n }\n },\n editable: {\n resize: {\n handles: {\n fill: {\n color: DIAGRAM_HOVER\n },\n stroke: {\n color: INACTIVE_SHAPE\n },\n hover: {\n fill: {\n color: INACTIVE_SHAPE\n },\n stroke: {\n color: INACTIVE_SHAPE\n }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: {\n color: INACTIVE_SHAPE\n },\n fill: {\n color: INACTIVE_SHAPE\n }\n }\n }\n },\n selectable: {\n stroke: {\n color: INACTIVE_SHAPE\n }\n },\n connectionDefaults: {\n stroke: {\n color: INACTIVE_SHAPE\n },\n content: {\n color: INACTIVE_SHAPE\n },\n selection: {\n handles: {\n fill: {\n color: DIAGRAM_HOVER\n },\n stroke: {\n color: INACTIVE_SHAPE\n }\n },\n stroke: {\n color: INACTIVE_SHAPE\n }\n }\n }\n },\n treeMap: {\n colors: fuse(SERIES, SERIES_LIGHT)\n }\n });\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 = [\"#0072c6\", \"#5db2ff\", \"#008a17\", \"#82ba00\", \"#ff8f32\", \"#ac193d\"];\n var SERIES_LIGHT = [\"#cbe2f3\", \"#deeffe\", \"#cbe7d0\", \"#e5f0cb\", \"#fee8d5\", \"#eed0d7\"];\n var PRIMARY = SERIES[0];\n var DIAGRAM_HOVER = WHITE;\n\n function noteStyle() {\n return {\n icon: {\n background: \"#00b0ff\",\n border: {\n color: \"#00b0ff\"\n }\n },\n label: {\n color: \"#ffffff\"\n },\n line: {\n color: AXIS\n }\n };\n }\n\n registerTheme(\"office365\", {\n chart: {\n title: {\n color: TEXT\n },\n subtitle: {\n color: TEXT\n },\n legend: {\n labels: {\n color: TEXT\n },\n inactiveItems: {\n labels: {\n color: INACTIVE\n },\n markers: {\n color: INACTIVE\n }\n }\n },\n seriesDefaults: {\n labels: {\n color: TEXT\n },\n errorBars: {\n color: TEXT\n },\n notes: noteStyle(),\n candlestick: {\n downColor: AXIS,\n line: {\n color: INACTIVE_SHAPE\n }\n },\n area: {\n opacity: 0.8\n },\n waterfall: {\n line: {\n color: AXIS\n }\n },\n horizontalWaterfall: {\n line: {\n color: AXIS\n }\n },\n overlay: {\n gradient: \"none\"\n },\n border: {\n _brightness: 1\n }\n },\n seriesColors: SERIES,\n axisDefaults: {\n line: {\n color: AXIS\n },\n labels: {\n color: TEXT\n },\n minorGridLines: {\n color: AXIS_MINOR\n },\n majorGridLines: {\n color: AXIS\n },\n title: {\n color: TEXT\n },\n crosshair: {\n color: INACTIVE\n },\n notes: noteStyle()\n }\n },\n gauge: {\n pointer: {\n color: PRIMARY\n },\n scale: {\n rangePlaceholderColor: AXIS,\n labels: {\n color: TEXT\n },\n minorTicks: {\n color: TEXT\n },\n majorTicks: {\n color: TEXT\n },\n line: {\n color: TEXT\n }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: {\n color: PRIMARY\n },\n connectorDefaults: {\n fill: {\n color: TEXT\n },\n stroke: {\n color: DIAGRAM_HOVER\n },\n hover: {\n fill: {\n color: DIAGRAM_HOVER\n },\n stroke: {\n color: TEXT\n }\n }\n },\n content: {\n color: TEXT\n }\n },\n editable: {\n resize: {\n handles: {\n fill: {\n color: DIAGRAM_HOVER\n },\n stroke: {\n color: INACTIVE_SHAPE\n },\n hover: {\n fill: {\n color: INACTIVE_SHAPE\n },\n stroke: {\n color: INACTIVE_SHAPE\n }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: {\n color: INACTIVE_SHAPE\n },\n fill: {\n color: INACTIVE_SHAPE\n }\n }\n }\n },\n selectable: {\n stroke: {\n color: INACTIVE_SHAPE\n }\n },\n connectionDefaults: {\n stroke: {\n color: INACTIVE_SHAPE\n },\n content: {\n color: INACTIVE_SHAPE\n },\n selection: {\n handles: {\n fill: {\n color: DIAGRAM_HOVER\n },\n stroke: {\n color: INACTIVE_SHAPE\n }\n },\n stroke: {\n color: INACTIVE_SHAPE\n }\n }\n }\n },\n treeMap: {\n colors: fuse(SERIES, SERIES_LIGHT)\n }\n });\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 = [\"#ff4350\", \"#ff9ea5\", \"#00acc1\", \"#80deea\", \"#ffbf46\", \"#ffd78c\"];\n var SERIES_LIGHT = [\"#ffd9dc\", \"#ffeced\", \"#cceef3\", \"#e6f8fb\", \"#fff2da\", \"#fff7e8\"];\n var PRIMARY = SERIES[0];\n var DIAGRAM_HOVER = WHITE;\n\n function noteStyle() {\n return {\n icon: {\n background: \"#007cc0\",\n border: {\n color: \"#007cc0\"\n }\n },\n label: {\n color: \"#ffffff\"\n },\n line: {\n color: AXIS\n }\n };\n }\n\n registerTheme(\"nova\", {\n chart: {\n title: {\n color: TEXT\n },\n subtitle: {\n color: TEXT\n },\n legend: {\n labels: {\n color: TEXT\n },\n inactiveItems: {\n labels: {\n color: INACTIVE\n },\n markers: {\n color: INACTIVE\n }\n }\n },\n seriesDefaults: {\n labels: {\n color: TEXT\n },\n errorBars: {\n color: TEXT\n },\n notes: noteStyle(),\n candlestick: {\n downColor: AXIS,\n line: {\n color: INACTIVE_SHAPE\n }\n },\n area: {\n opacity: 0.8\n },\n waterfall: {\n line: {\n color: AXIS\n }\n },\n horizontalWaterfall: {\n line: {\n color: AXIS\n }\n },\n overlay: {\n gradient: \"none\"\n },\n border: {\n _brightness: 1\n }\n },\n seriesColors: SERIES,\n axisDefaults: {\n line: {\n color: AXIS\n },\n labels: {\n color: TEXT\n },\n minorGridLines: {\n color: AXIS_MINOR\n },\n majorGridLines: {\n color: AXIS\n },\n title: {\n color: TEXT\n },\n crosshair: {\n color: TEXT\n },\n notes: noteStyle()\n }\n },\n gauge: {\n pointer: {\n color: PRIMARY\n },\n scale: {\n rangePlaceholderColor: AXIS,\n labels: {\n color: TEXT\n },\n minorTicks: {\n color: TEXT\n },\n majorTicks: {\n color: TEXT\n },\n line: {\n color: TEXT\n }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: {\n color: PRIMARY\n },\n connectorDefaults: {\n fill: {\n color: TEXT\n },\n stroke: {\n color: DIAGRAM_HOVER\n },\n hover: {\n fill: {\n color: DIAGRAM_HOVER\n },\n stroke: {\n color: TEXT\n }\n }\n },\n content: {\n color: TEXT\n }\n },\n editable: {\n resize: {\n handles: {\n fill: {\n color: DIAGRAM_HOVER\n },\n stroke: {\n color: INACTIVE_SHAPE\n },\n hover: {\n fill: {\n color: INACTIVE_SHAPE\n },\n stroke: {\n color: INACTIVE_SHAPE\n }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: {\n color: INACTIVE_SHAPE\n },\n fill: {\n color: INACTIVE_SHAPE\n }\n }\n }\n },\n selectable: {\n stroke: {\n color: INACTIVE_SHAPE\n }\n },\n connectionDefaults: {\n stroke: {\n color: INACTIVE_SHAPE\n },\n content: {\n color: INACTIVE_SHAPE\n },\n selection: {\n handles: {\n fill: {\n color: DIAGRAM_HOVER\n },\n stroke: {\n color: INACTIVE_SHAPE\n }\n },\n stroke: {\n color: INACTIVE_SHAPE\n }\n }\n }\n },\n treeMap: {\n colors: fuse(SERIES, SERIES_LIGHT)\n }\n });\n })();\n\n (function() {\n var SERIES = [\"#ff6358\", \"#ffd246\", \"#78d237\", \"#28b4c8\", \"#2d73f5\", \"#aa46be\"];\n var SERIES_LIGHT = [\"#ffd9dc\", \"#ffeced\", \"#cceef3\", \"#e6f8fb\", \"#fff2da\", \"#fff7e8\"];\n\n registerTheme(\"default-v2\", {\n chart: { /* read from DOM */ },\n gauge: { /* read from DOM */ },\n diagram: { /* read from DOM */ },\n treeMap: {\n colors: fuse(SERIES, SERIES_LIGHT)\n }\n });\n\n themes.sass = themes[\"default-v2\"];\n })();\n\n\n (function() {\n var TEXT = \"#292b2c\";\n var AXIS = \"rgba(0, 0, 0, .04)\";\n var SERIES = [\"#0275d8\", \"#5bc0de\", \"#5cb85c\", \"#f0ad4e\", \"#e67d4a\", \"#d9534f\"];\n var SERIES_LIGHT = [\"#ffd9dc\", \"#ffeced\", \"#cceef3\", \"#e6f8fb\", \"#fff2da\", \"#fff7e8\"];\n var PRIMARY = SERIES[0];\n\n registerTheme(\"bootstrap-v4\", {\n chart: { /* read from DOM */ },\n gauge: {\n pointer: {\n color: PRIMARY\n },\n scale: {\n rangePlaceholderColor: AXIS,\n labels: {\n color: TEXT\n },\n minorTicks: {\n color: TEXT\n },\n majorTicks: {\n color: TEXT\n },\n line: {\n color: TEXT\n }\n }\n },\n diagram: { /* read from DOM */ },\n treeMap: {\n colors: fuse(SERIES, SERIES_LIGHT)\n }\n });\n })();\n\n function fuse(arr1, arr2) {\n return $.map(arr1, function(item, index) {\n return [\n [item, arr2[index]]\n ];\n });\n }\n\n })(window.kendo.jQuery);\n\n var __meta__$P = {\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\n /***********************************************************************\n * WARNING: this file is auto-generated. If you change it directly,\n * your modifications will eventually be lost. The source code is in\n * `kendo-charts` repository, you should make your changes there and\n * run `src-modules/sync.sh` in this repository.\n */\n\n (function($) {\n /* eslint-disable space-before-blocks, space-before-function-paren, curly */\n\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 Title = dataviz.Title;\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\n var ChartAxis = Class.extend({\n init: function(axis) {\n\n this._axis = axis;\n this.options = axis.options;\n },\n\n value: function(point) {\n var axis = this._axis;\n var value = axis.getCategory ? axis.getCategory(point) : axis.getValue(point);\n\n return value;\n },\n\n slot: function(from, to, limit) {\n if (limit === void 0) { limit = true; }\n\n return this._axis.slot(from, to, limit);\n },\n\n range: function() {\n return this._axis.range();\n },\n\n valueRange: function() {\n return this._axis.valueRange();\n }\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\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\n findAxisByName: function(name) {\n return findAxisByName(name, this._pane.axes);\n }\n });\n\n var ChartPlotArea = Class.extend({\n init: function(plotArea) {\n\n this._plotArea = plotArea;\n this.visual = plotArea.visual;\n this.backgroundVisual = plotArea._bgVisual;\n }\n });\n\n function countNumbers(values) {\n var length = values.length;\n var count = 0;\n\n for (var i = 0; i < length; i++) {\n var num = values[i];\n if (isNumber(num)) {\n count++;\n }\n }\n\n return count;\n }\n\n var Aggregates = {\n min: function(values) {\n var length = values.length;\n var min = MAX_VALUE;\n\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\n return min === MAX_VALUE ? values[0] : min;\n },\n\n max: function(values) {\n var length = values.length;\n var max = MIN_VALUE;\n\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\n return max === MIN_VALUE ? values[0] : max;\n },\n\n sum: function(values) {\n var length = values.length;\n var sum = 0;\n\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (isNumber(value)) {\n sum += value;\n }\n }\n\n return sum;\n },\n\n sumOrNull: function(values) {\n var result = null;\n\n if (countNumbers(values)) {\n result = Aggregates.sum(values);\n }\n\n return result;\n },\n\n count: function(values) {\n var length = values.length;\n var count = 0;\n\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (value !== null && defined(value)) {\n count++;\n }\n }\n\n return count;\n },\n\n avg: function(values) {\n var count = countNumbers(values);\n var result = values[0];\n\n if (count > 0) {\n result = Aggregates.sum(values) / count;\n }\n\n return result;\n },\n\n first: function(values) {\n var length = values.length;\n\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\n return values[0];\n }\n };\n\n function getField(field, row) {\n if (row === null) {\n return row;\n }\n\n var get = getter(field, true);\n return get(row);\n }\n\n var SeriesBinder = Class.extend({\n init: function() {\n\n this._valueFields = {};\n this._otherFields = {};\n this._nullValue = {};\n this._undefinedValue = {};\n },\n\n register: function(seriesTypes, valueFields, otherFields) {\n var this$1$1 = this;\n if (valueFields === void 0) { valueFields = [ VALUE ]; }\n if (otherFields === void 0) { otherFields = {}; }\n\n for (var i = 0; i < seriesTypes.length; i++) {\n var type = seriesTypes[i];\n\n this$1$1._valueFields[type] = valueFields;\n this$1$1._otherFields[type] = otherFields;\n this$1$1._nullValue[type] = this$1$1._makeValue(valueFields, null);\n this$1$1._undefinedValue[type] = this$1$1._makeValue(valueFields, undefined);\n }\n },\n\n canonicalFields: function(series) {\n return this.valueFields(series).concat(this.otherFields(series));\n },\n\n valueFields: function(series) {\n return this._valueFields[series.type] || [ VALUE ];\n },\n\n otherFields: function(series) {\n return this._otherFields[series.type] || [ VALUE ];\n },\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\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\n value = this._bindFromObject(pointData, valueFields, srcValueFields);\n fields = this._bindFromObject(pointData, otherFields, srcPointFields);\n }\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\n result.fields = fields || {};\n\n return result;\n },\n\n _makeValue: function(fields, initialValue) {\n var value = {};\n var length = fields.length;\n\n for (var i = 0; i < length; i++) {\n var fieldName = fields[i];\n value[fieldName] = initialValue;\n }\n\n return value;\n },\n\n _bindFromArray: function(array, fields) {\n var value = {};\n\n if (fields) {\n var length = Math.min(fields.length, array.length);\n\n for (var i = 0; i < length; i++) {\n value[fields[i]] = array[i];\n }\n }\n\n return value;\n },\n\n _bindFromObject: function(object, fields, srcFields) {\n if (srcFields === void 0) { srcFields = fields; }\n\n var value = {};\n\n if (fields) {\n var length = fields.length;\n\n for (var i = 0; i < length; i++) {\n var fieldName = fields[i];\n var srcFieldName = srcFields[i];\n if (srcFieldName !== null) {\n value[fieldName] = getField(srcFieldName, object);\n }\n }\n }\n\n return value;\n },\n\n sourceFields: function(series, canonicalFields) {\n var sourceFields = [];\n\n if (canonicalFields) {\n var length = canonicalFields.length;\n\n for (var i = 0; i < length; i++) {\n var fieldName = canonicalFields[i];\n var sourceFieldName = fieldName === VALUE ? \"field\" : fieldName + \"Field\";\n\n sourceFields.push(series[sourceFieldName] !== null ? (series[sourceFieldName] || fieldName) : null);\n }\n }\n\n return sourceFields;\n }\n });\n\n SeriesBinder.current = new SeriesBinder();\n\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\n var ErrorRangeCalculator = Class.extend({\n init: function(errorValue, series, field) {\n\n this.initGlobalRanges(errorValue, series, field);\n },\n\n initGlobalRanges: function(errorValue, series, field) {\n var data = series.data;\n var deviationMatch = standardDeviationRegex.exec(errorValue);\n\n if (deviationMatch) {\n this.valueGetter = this.createValueGetter(series, field);\n\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 = { low: average.value - deviation * multiple, 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\n this.globalRange = function(value) {\n return { low: value - standardError, 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\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\n return valueGetter;\n },\n\n getErrorRange: function(pointValue, errorValue) {\n var low, high, value;\n\n if (!defined(errorValue)) {\n return null;\n }\n\n if (this.globalRange) {\n return this.globalRange(pointValue);\n }\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\n return { low: low, high: high };\n },\n\n getStandardError: function(data, average) {\n return this.getStandardDeviation(data, average, true) / Math.sqrt(average.count);\n },\n\n getStandardDeviation: function(data, average, isSample) {\n var this$1$1 = this;\n\n var length = data.length;\n var total = isSample ? average.count - 1 : average.count;\n var squareDifferenceSum = 0;\n\n for (var idx = 0; idx < length; idx++) {\n var value = this$1$1.valueGetter(data[idx]);\n if (isNumber(value)) {\n squareDifferenceSum += Math.pow(value - average.value, 2);\n }\n }\n\n return Math.sqrt(squareDifferenceSum / total);\n },\n\n getAverage: function(data) {\n var this$1$1 = this;\n\n var length = data.length;\n var sum = 0;\n var count = 0;\n\n for (var idx = 0; idx < length; idx++) {\n var value = this$1$1.valueGetter(data[idx]);\n if (isNumber(value)) {\n sum += value;\n count++;\n }\n }\n\n return {\n value: sum / count,\n count: count\n };\n }\n });\n\n var browser = support.browser || {};\n\n var INITIAL_ANIMATION_DURATION = 600;\n var FADEIN = \"fadeIn\";\n\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\n var SMOOTH = \"smooth\";\n var STEP = \"step\";\n\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 HEATMAP = \"heatmap\";\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, COLUMN, OHLC, CANDLESTICK, BOX_PLOT, VERTICAL_BOX_PLOT,\n BULLET, RANGE_COLUMN, RANGE_BAR, WATERFALL, HORIZONTAL_WATERFALL\n ];\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\n var LOGARITHMIC = \"log\";\n var CATEGORY = \"category\";\n\n var INSIDE_END = \"insideEnd\";\n var INSIDE_BASE = \"insideBase\";\n var OUTSIDE_END = \"outsideEnd\";\n\n var MOUSEWHEEL = \"DOMMouseScroll mousewheel\";\n var MOUSEWHEEL_DELAY = 150;\n var MOUSEWHEEL_ZOOM_RATE = 0.3;\n\n var constants = {\n \tINITIAL_ANIMATION_DURATION: INITIAL_ANIMATION_DURATION,\n \tFADEIN: FADEIN,\n \tLEGEND_ITEM_CLICK: LEGEND_ITEM_CLICK,\n \tLEGEND_ITEM_HOVER: LEGEND_ITEM_HOVER,\n \tLEGEND_ITEM_LEAVE: LEGEND_ITEM_LEAVE,\n \tSERIES_CLICK: SERIES_CLICK,\n \tSERIES_HOVER: SERIES_HOVER,\n \tSERIES_OVER: SERIES_OVER,\n \tSERIES_LEAVE: SERIES_LEAVE,\n \tGLASS: GLASS,\n \tBORDER_BRIGHTNESS: BORDER_BRIGHTNESS,\n \tTOOLTIP_OFFSET: TOOLTIP_OFFSET,\n \tSTART_SCALE: START_SCALE,\n \tERROR_LOW_FIELD: ERROR_LOW_FIELD,\n \tERROR_HIGH_FIELD: ERROR_HIGH_FIELD,\n \tX_ERROR_LOW_FIELD: X_ERROR_LOW_FIELD,\n \tX_ERROR_HIGH_FIELD: X_ERROR_HIGH_FIELD,\n \tY_ERROR_LOW_FIELD: Y_ERROR_LOW_FIELD,\n \tY_ERROR_HIGH_FIELD: Y_ERROR_HIGH_FIELD,\n \tLINE_MARKER_SIZE: LINE_MARKER_SIZE,\n \tINTERPOLATE: INTERPOLATE,\n \tZERO: ZERO,\n \tSMOOTH: SMOOTH,\n \tSTEP: STEP,\n \tCATEGORY: CATEGORY,\n \tFUNNEL: FUNNEL,\n \tBAR: BAR,\n \tCANDLESTICK: CANDLESTICK,\n \tPIE: PIE,\n \tCOLUMN: COLUMN,\n \tAREA: AREA,\n \tVERTICAL_BULLET: VERTICAL_BULLET,\n \tBOX_PLOT: BOX_PLOT,\n \tOHLC: OHLC,\n \tWATERFALL: WATERFALL,\n \tLINE: LINE,\n \tBULLET: BULLET,\n \tVERTICAL_LINE: VERTICAL_LINE,\n \tVERTICAL_AREA: VERTICAL_AREA,\n \tRANGE_AREA: RANGE_AREA,\n \tVERTICAL_RANGE_AREA: VERTICAL_RANGE_AREA,\n \tRANGE_COLUMN: RANGE_COLUMN,\n \tVERTICAL_BOX_PLOT: VERTICAL_BOX_PLOT,\n \tRANGE_BAR: RANGE_BAR,\n \tHORIZONTAL_WATERFALL: HORIZONTAL_WATERFALL,\n \tSCATTER: SCATTER,\n \tSCATTER_LINE: SCATTER_LINE,\n \tBUBBLE: BUBBLE,\n \tRADAR_AREA: RADAR_AREA,\n \tRADAR_LINE: RADAR_LINE,\n \tRADAR_COLUMN: RADAR_COLUMN,\n \tPOLAR_LINE: POLAR_LINE,\n \tPOLAR_AREA: POLAR_AREA,\n \tPOLAR_SCATTER: POLAR_SCATTER,\n \tRENDER: RENDER,\n \tPLOT_AREA_CLICK: PLOT_AREA_CLICK,\n \tPLOT_AREA_HOVER: PLOT_AREA_HOVER,\n \tPLOT_AREA_LEAVE: PLOT_AREA_LEAVE,\n \tLOGARITHMIC: LOGARITHMIC,\n \tDRAG: DRAG,\n \tDRAG_START: DRAG_START,\n \tDRAG_END: DRAG_END,\n \tZOOM_START: ZOOM_START,\n \tZOOM: ZOOM,\n \tZOOM_END: ZOOM_END,\n \tSELECT_START: SELECT_START,\n \tSELECT: SELECT,\n \tSELECT_END: SELECT_END,\n \tPANE_RENDER: PANE_RENDER,\n \tGAP: GAP,\n \tDONUT: DONUT,\n \tINSIDE_END: INSIDE_END,\n \tINSIDE_BASE: INSIDE_BASE,\n \tOUTSIDE_END: OUTSIDE_END,\n \tMOUSEWHEEL: MOUSEWHEEL,\n \tMOUSEWHEEL_DELAY: MOUSEWHEEL_DELAY,\n \tMOUSEWHEEL_ZOOM_RATE: MOUSEWHEEL_ZOOM_RATE,\n \tSHOW_TOOLTIP: SHOW_TOOLTIP,\n \tHIDE_TOOLTIP: HIDE_TOOLTIP,\n \tEQUALLY_SPACED_SERIES: EQUALLY_SPACED_SERIES,\n \tABOVE: ABOVE,\n \tBELOW: BELOW,\n \tHEATMAP: HEATMAP\n };\n\n var DEFAULT_ERROR_BAR_WIDTH = 4;\n\n var ErrorBarBase = ChartElement.extend({\n init: function(low, high, isVertical, chart, series, options) {\n ChartElement.fn.init.call(this, options);\n\n this.low = low;\n this.high = high;\n this.isVertical = isVertical;\n this.chart = chart;\n this.series = series;\n },\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\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),\n new Point(capEnd, valueBox.y1),\n new Point(capStart, valueBox.y2),\n 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),\n new Point(valueBox.x1, capEnd),\n new Point(valueBox.x2, capStart),\n new Point(valueBox.x2, capEnd));\n }\n this.box = new Box(valueBox.x1, capStart, valueBox.x2, capEnd);\n }\n\n this.linePoints = linePoints;\n },\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\n return capsWidth;\n },\n\n createVisual: function() {\n var this$1$1 = this;\n\n var options = this.options;\n var visual = options.visual;\n\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$1.createDefaultVisual();\n var defaultVisual = this$1$1.visual;\n delete this$1$1.visual;\n return defaultVisual;\n }\n });\n } else {\n this.createDefaultVisual();\n }\n },\n\n createDefaultVisual: function() {\n var this$1$1 = this;\n\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\n ChartElement.fn.createVisual.call(this);\n\n for (var idx = 0; idx < linePoints.length; idx += 2) {\n var line = new Path(lineOptions)\n .moveTo(linePoints[idx].x, linePoints[idx].y)\n .lineTo(linePoints[idx + 1].x, linePoints[idx + 1].y);\n\n alignPathToPixel(line);\n this$1$1.visual.append(line);\n }\n }\n });\n\n setDefaultOptions(ErrorBarBase, {\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n },\n endCaps: true,\n line: {\n width: 2\n },\n zIndex: 1\n });\n\n var CategoricalErrorBar = ErrorBarBase.extend({\n getAxis: function() {\n var axis = this.chart.seriesValueAxis(this.series);\n\n return axis;\n }\n });\n\n var MAX_EXPAND_DEPTH = 5;\n\n function evalOptions(options, context, state, dryRun) {\n if (state === void 0) { state = {}; }\n if (dryRun === void 0) { dryRun = false; }\n\n var defaults = state.defaults = state.defaults || {};\n var depth = state.depth = state.depth || 0;\n var needsEval = false;\n\n state.excluded = state.excluded || [];\n\n if (depth > MAX_EXPAND_DEPTH) {\n return null;\n }\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\n return needsEval;\n }\n\n function categoriesCount(series) {\n var seriesCount = series.length;\n var categories = 0;\n\n for (var i = 0; i < seriesCount; i++) {\n categories = Math.max(categories, series[i].data.length);\n }\n\n return categories;\n }\n\n var CategoricalChart = ChartElement.extend({\n init: function(plotArea, options) {\n ChartElement.fn.init.call(this, options);\n\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this.categoryAxis = plotArea.seriesCategoryAxis(options.series[0]);\n\n // Value axis ranges grouped by axis name, e.g.:\n // primary: { min: 0, max: 1 }\n this.valueAxisRanges = {};\n\n this.points = [];\n this.categoryPoints = [];\n this.seriesPoints = [];\n this.seriesOptions = [];\n this._evalSeries = [];\n\n this.render();\n },\n\n render: function() {\n this.traverseDataPoints(this.addValue.bind(this));\n },\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 vertical: !this.options.invertAxes\n }, series);\n }\n\n return options;\n },\n\n plotValue: function(point) {\n if (!point) {\n return 0;\n }\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\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\n if ((stack && otherStack) && stack.group !== otherStack.group) {\n continue;\n }\n\n if (isNumber(other.value)) {\n categorySum += Math.abs(other.value);\n otherValues.push(Math.abs(other.value));\n }\n }\n }\n\n if (categorySum > 0) {\n return point.value / categorySum;\n }\n }\n\n return point.value;\n },\n\n plotRange: function(point, startValue) {\n var this$1$1 = this;\n if (startValue === void 0) { startValue = 0; }\n\n var categoryPoints = this.categoryPoints[point.categoryIx];\n\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\n for (var i = 0; i < categoryPoints.length; i++) {\n var other = categoryPoints[i];\n\n if (point === other) {\n break;\n }\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\n if (stack.group && stack.group !== otherStack.group) {\n continue;\n }\n }\n\n var otherValue = this$1$1.plotValue(other);\n if ((otherValue >= 0 && positive) ||\n (otherValue < 0 && !positive)) {\n prevValue += otherValue;\n plotValue += otherValue;\n isStackedBar = true;\n\n if (this$1$1.options.isStacked100) {\n plotValue = Math.min(plotValue, 1);\n }\n }\n }\n\n if (isStackedBar) {\n prevValue -= startValue;\n }\n\n return [ prevValue, plotValue ];\n }\n\n var series = point.series;\n var valueAxis = this.seriesValueAxis(series);\n var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n\n return [ axisCrossingValue, dataviz.convertableToNumber(point.value) ? point.value : axisCrossingValue ];\n },\n\n stackLimits: function(axisName, stackName) {\n var this$1$1 = this;\n\n var min = MAX_VALUE;\n var max = MIN_VALUE;\n\n for (var i = 0; i < this.categoryPoints.length; i++) {\n var categoryPoints = this$1$1.categoryPoints[i];\n if (!categoryPoints) {\n continue;\n }\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$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\n return { min: min, max: max };\n },\n\n updateStackRange: function() {\n var this$1$1 = this;\n\n var ref = this.options;\n var isStacked = ref.isStacked;\n var chartSeries = ref.series;\n var limitsCache = {};\n\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\n var limits = limitsCache[key];\n if (!limits) {\n limits = this$1$1.stackLimits(axisName, series.stack);\n\n var errorTotals = this$1$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\n if (limits.min !== MAX_VALUE || limits.max !== MIN_VALUE) {\n limitsCache[key] = limits;\n } else {\n limits = null;\n }\n }\n\n if (limits) {\n this$1$1.valueAxisRanges[axisName] = limits;\n }\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\n if (isNumber(lowValue) && isNumber(highValue)) {\n errorRange = { low: lowValue, high: highValue };\n } else if (errorBars && defined(errorBars.value)) {\n this.seriesErrorRanges = this.seriesErrorRanges || [];\n this.seriesErrorRanges[seriesIx] = this.seriesErrorRanges[seriesIx] ||\n new ErrorRangeCalculator(errorBars.value, series, VALUE);\n\n errorRange = this.seriesErrorRanges[seriesIx].getErrorRange(value, errorBars.value);\n }\n\n if (errorRange) {\n point.low = errorRange.low;\n point.high = errorRange.high;\n this.addPointErrorBar(point, categoryIx);\n }\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\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 = { categoryIx: categoryIx, series: series };\n this.updateRange({ value: low }, fields);\n this.updateRange({ value: high }, fields);\n }\n\n var errorBar = new CategoricalErrorBar(low, high, isVertical, this, series, options);\n point.errorBars = [ errorBar ];\n point.append(errorBar);\n },\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\n this.errorTotals = this.errorTotals || { positive: [], negative: [] };\n\n if (low < 0) {\n this.errorTotals.negative[categoryIx] = Math.min(this.errorTotals.negative[categoryIx] || 0, low);\n }\n\n if (high > 0) {\n this.errorTotals.positive[categoryIx] = Math.max(this.errorTotals.positive[categoryIx] || 0, high);\n }\n\n return { low: low, 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\n var categoryPoints = this.categoryPoints[categoryIx];\n if (!categoryPoints) {\n this.categoryPoints[categoryIx] = categoryPoints = [];\n }\n\n var seriesPoints = this.seriesPoints[seriesIx];\n if (!seriesPoints) {\n this.seriesPoints[seriesIx] = seriesPoints = [];\n }\n\n var point = this.createPoint(data, fields);\n if (point) {\n $.extend(point, fields);\n\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\n this.points.push(point);\n seriesPoints.push(point);\n categoryPoints.push(point);\n\n this.updateRange(data.valueFields, fields);\n },\n\n evalPointOptions: function(options, value, category, categoryIx, series, seriesIx) {\n var state = { defaults: series._defaults, excluded: [ \"data\", \"aggregate\", \"_events\", \"tooltip\", \"content\", \"template\", \"visual\", \"toggle\", \"_outOfRangeMinPoint\", \"_outOfRangeMaxPoint\" ] };\n\n var doEval = this._evalSeries[seriesIx];\n if (!defined(doEval)) {\n this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\n }\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\n return pointOptions;\n },\n\n updateRange: function(data, fields) {\n var axisName = fields.series.axis;\n var value = data.value;\n var axisRange = this.valueAxisRanges[axisName];\n\n if (isFinite(value) && value !== null) {\n axisRange = this.valueAxisRanges[axisName] =\n axisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n axisRange.min = Math.min(axisRange.min, value);\n axisRange.max = Math.max(axisRange.max, value);\n }\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\n if (!axis) {\n throw new Error(\"Unable to locate value axis with name \" + axisName);\n }\n\n return axis;\n },\n\n reflow: function(targetBox) {\n var this$1$1 = this;\n\n var categorySlots = this.categorySlots = [];\n var chartPoints = this.points;\n var categoryAxis = this.categoryAxis;\n var pointIx = 0;\n\n this.traverseDataPoints(function (data, fields) {\n var categoryIx = fields.categoryIx;\n var currentSeries = fields.series;\n\n var valueAxis = this$1$1.seriesValueAxis(currentSeries);\n var point = chartPoints[pointIx++];\n\n var categorySlot = categorySlots[categoryIx];\n if (!categorySlot) {\n categorySlots[categoryIx] = categorySlot =\n this$1$1.categorySlot(categoryAxis, categoryIx, valueAxis);\n }\n\n if (point) {\n var plotRange = this$1$1.plotRange(point, valueAxis.startValue());\n var valueSlot = this$1$1.valueSlot(valueAxis, plotRange);\n if (valueSlot) {\n var pointSlot = this$1$1.pointSlot(categorySlot, valueSlot);\n\n point.aboveAxis = this$1$1.aboveAxis(point, valueAxis);\n point.stackValue = plotRange[1];\n\n if (this$1$1.options.isStacked100) {\n point.percentage = this$1$1.plotValue(point);\n }\n\n this$1$1.reflowPoint(point, pointSlot);\n } else {\n point.visible = false;\n }\n }\n });\n\n this.reflowCategories(categorySlots);\n if (!this.options.clip && this.options.limitPoints && this.points.length) {\n this.limitPoints();\n }\n\n this.box = targetBox;\n },\n\n valueSlot: function(valueAxis, plotRange) {\n return valueAxis.getSlot(plotRange[0], plotRange[1], !this.options.clip);\n },\n\n limitPoints: function() {\n var this$1$1 = this;\n\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$1.limitPoint(points[idx]);\n }\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\n aboveAxis: function(point, valueAxis) {\n var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n var value = point.value;\n\n return valueAxis.options.reverse ?\n value < axisCrossingValue : value >= axisCrossingValue;\n },\n\n categoryAxisCrossingValue: function(valueAxis) {\n var categoryAxis = this.categoryAxis;\n var options = valueAxis.options;\n var crossingValues = [].concat(\n options.axisCrossingValues || options.axisCrossingValue\n );\n\n return crossingValues[categoryAxis.axisIndex || 0] || 0;\n },\n\n reflowPoint: function(point, pointSlot) {\n point.reflow(pointSlot);\n },\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\n return new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\n },\n\n categorySlot: function(categoryAxis, categoryIx) {\n return categoryAxis.getSlot(categoryIx);\n },\n\n traverseDataPoints: function(callback) {\n var this$1$1 = this;\n\n var series = this.options.series;\n var count = categoriesCount(series);\n var seriesCount = series.length;\n\n for (var seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n this$1$1._outOfRangeCallback(series[seriesIx], \"_outOfRangeMinPoint\", seriesIx, callback);\n }\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$1.categoryAxis.categoryAt(categoryIx);\n var pointData = this$1$1._bindPoint(currentSeries, seriesIx$1, categoryIx);\n\n callback(pointData, {\n category: currentCategory,\n categoryIx: categoryIx,\n categoriesCount: count,\n series: currentSeries,\n seriesIx: seriesIx$1\n });\n }\n }\n\n for (var seriesIx$2 = 0; seriesIx$2 < seriesCount; seriesIx$2++) {\n this$1$1._outOfRangeCallback(series[seriesIx$2], \"_outOfRangeMaxPoint\", seriesIx$2, callback);\n }\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\n callback(pointData, {\n category: outOfRangePoint.category,\n categoryIx: categoryIx,\n series: series,\n seriesIx: seriesIx,\n dataItem: outOfRangePoint.item\n });\n }\n },\n\n _bindPoint: function(series, seriesIx, categoryIx, item) {\n if (!this._bindCache) {\n this._bindCache = [];\n }\n\n var bindCache = this._bindCache[seriesIx];\n if (!bindCache) {\n bindCache = this._bindCache[seriesIx] = [];\n }\n\n var data = bindCache[categoryIx];\n if (!data) {\n data = bindCache[categoryIx] = SeriesBinder.current.bindPoint(series, categoryIx, item);\n }\n\n return data;\n },\n\n formatPointValue: function(point, format) {\n if (point.value === null) {\n return \"\";\n }\n\n return this.chartService.format.auto(format, point.value);\n },\n\n pointValue: function(data) {\n return data.valueFields.value;\n }\n });\n\n setDefaultOptions(CategoricalChart, {\n series: [],\n invertAxes: false,\n isStacked: false,\n clip: true,\n limitPoints: true\n });\n\n var PointEventsMixin = {\n click: function(chart, e) {\n return chart.trigger(\n SERIES_CLICK,\n this.eventArgs(e)\n );\n },\n\n hover: function(chart, e) {\n return chart.trigger(\n SERIES_HOVER,\n this.eventArgs(e)\n );\n },\n\n over: function(chart, e) {\n return chart.trigger(\n SERIES_OVER,\n this.eventArgs(e)\n );\n },\n\n out: function(chart, e) {\n return chart.trigger(\n SERIES_LEAVE,\n this.eventArgs(e)\n );\n },\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\n var NoteMixin = {\n createNote: function() {\n var options = this.options.notes;\n var text = this.noteText || options.label.text;\n\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\n this.append(this.note);\n }\n }\n };\n\n var LinePoint = ChartElement.extend({\n init: function(value, options) {\n ChartElement.fn.init.call(this);\n\n this.value = value;\n this.options = options;\n this.aboveAxis = valueOrDefault(this.options.aboveAxis, true);\n this.tooltipTracking = true;\n },\n\n render: function() {\n var ref = this.options;\n var markers = ref.markers;\n var labels = ref.labels;\n\n if (this._rendered) {\n return;\n }\n\n this._rendered = true;\n\n if (markers.visible && markers.size) {\n this.marker = this.createMarker();\n this.append(this.marker);\n }\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,\n 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),\n pointData\n );\n this.append(this.label);\n }\n\n this.createNote();\n\n if (this.errorBar) {\n this.append(this.errorBar);\n }\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\n if (!defined(border.color)) {\n border.color = new Color(background).brightness(BORDER_BRIGHTNESS).toHex();\n }\n\n return border;\n },\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: this.series.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\n return marker;\n },\n\n markerBox: function() {\n if (!this.marker) {\n this.marker = this.createMarker();\n this.marker.reflow(this._childBox);\n }\n\n return this.marker.box;\n },\n\n reflow: function(targetBox) {\n var this$1$1 = this;\n\n var ref = this;\n var options = ref.options;\n var aboveAxis = ref.aboveAxis;\n var vertical = options.vertical;\n\n this.render();\n\n this.box = targetBox;\n var childBox = targetBox.clone();\n\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\n this._childBox = childBox;\n if (this.marker) {\n this.marker.reflow(childBox);\n }\n\n this.reflowLabel(childBox);\n\n if (this.errorBars) {\n for (var i = 0; i < this.errorBars.length; i++) {\n this$1$1.errorBars[i].reflow(childBox);\n }\n }\n\n if (this.note) {\n var noteTargetBox = this.markerBox();\n\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\n this.note.reflow(noteTargetBox);\n }\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\n if (label) {\n anchor = anchor === ABOVE ? TOP : anchor;\n anchor = anchor === BELOW ? BOTTOM : anchor;\n\n label.reflow(box);\n label.box.alignTo(this.markerBox(), anchor);\n label.reflow(label.box);\n }\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\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\n return shadow.getElement();\n },\n\n highlightVisual: function() {\n return (this.marker || {}).visual;\n },\n\n highlightVisualArgs: function() {\n var marker = this.marker;\n var visual, rect;\n\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([ center.x - halfSize, center.y - halfSize ], [ size, size ]);\n }\n\n return {\n options: this.options,\n rect: rect,\n visual: visual\n };\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\n if (showTooltip) {\n var x = markerBox.x2 + TOOLTIP_OFFSET;\n var horizontalAlign = LEFT;\n var y, verticalAlign;\n\n if (this.aboveAxis) {\n y = markerBox.y1;\n verticalAlign = BOTTOM;\n } else {\n y = markerBox.y2;\n verticalAlign = TOP;\n }\n\n return {\n point: new Point(x, y),\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n }\n },\n\n formatValue: function(format) {\n return this.owner.formatPointValue(this, format);\n },\n\n overlapsBox: function(box) {\n var markerBox = this.markerBox();\n return markerBox.overlaps(box);\n },\n\n unclipElements: function() {\n if (this.label) {\n this.label.options.noclip = true;\n }\n\n if (this.note) {\n this.note.options.noclip = true;\n }\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\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: {\n width: 2\n },\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: {\n label: {}\n },\n highlight: {\n markers: {\n border: {\n color: \"#fff\",\n width: 2\n }\n },\n zIndex: datavizConstants.HIGHLIGHT_ZINDEX\n },\n errorBars: {\n line: {\n width: 1\n }\n }\n };\n\n deepExtend(LinePoint.prototype, PointEventsMixin);\n deepExtend(LinePoint.prototype, NoteMixin);\n\n var LineSegment = ChartElement.extend({\n init: function(linePoints, series, seriesIx) {\n ChartElement.fn.init.call(this);\n\n this.linePoints = linePoints;\n this.series = series;\n this.seriesIx = seriesIx;\n },\n\n points: function() {\n return this.toGeometryPoints(this.linePoints);\n },\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\n return result;\n },\n\n createVisual: function() {\n var this$1$1 = this;\n\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$1.segmentVisual();\n\n return this$1$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\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\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\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\n if (options.closed) {\n line.close();\n }\n\n this.visual = line;\n },\n\n aliasFor: function(e, coords) {\n return this.parent.getNearestPoint(coords.x, coords.y, this.seriesIx);\n }\n });\n\n setDefaultOptions(LineSegment, {\n closed: false\n });\n\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\n var stepAxis = vertical ? X : Y;\n var axis = vertical ? Y : X;\n var stepDir = reverse ? 2 : 1;\n var dir = stepDir;\n\n var previousPoint = toGeometryPoint(points[0], stepAxis, stepDir, axis, dir);\n var result = [ previousPoint ];\n\n for (var idx = 1; idx < points.length; idx++) {\n var point = toGeometryPoint(points[idx], stepAxis, stepDir, axis, dir);\n\n if (previousPoint[stepAxis] !== point[stepAxis]) {\n var stepPoint = new GeometryPoint();\n stepPoint[stepAxis] = previousPoint[stepAxis];\n stepPoint[axis] = point[axis];\n\n result.push(stepPoint, point);\n }\n\n previousPoint = point;\n }\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\n return result;\n\n }\n };\n\n function toGeometryPoint(lintPoint, stepAxis, stepDir, axis, dir) {\n var box = lintPoint.box;\n var result = new GeometryPoint();\n\n result[stepAxis] = box[stepAxis + stepDir];\n result[axis] = box[axis + dir];\n\n return result;\n }\n\n var StepLineSegment = LineSegment.extend({\n points: function() {\n return this.calculateStepPoints(this.linePoints);\n }\n });\n\n deepExtend(StepLineSegment.prototype, StepLineMixin);\n\n var SplineSegment = LineSegment.extend({\n segmentVisual: function() {\n var series = this.series;\n var defaults = series._defaults;\n var color = series.color;\n\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\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\n curve.segments.push.apply(curve.segments, segments);\n\n this.visual = curve;\n }\n });\n\n var LineChartMixin = {\n renderSegments: function() {\n var this$1$1 = this;\n\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\n this._segments = [];\n\n for (var seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n var currentSeries = series[seriesIx];\n var sortedPoints = this$1$1.sortPoints(seriesPoints[seriesIx]);\n var pointCount = sortedPoints.length;\n var linePoints = [];\n\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$1.seriesMissingValues(currentSeries) !== INTERPOLATE) {\n if (linePoints.length > 1) {\n lastSegment = this$1$1.createSegment(\n linePoints, currentSeries, seriesIx, lastSegment\n );\n this$1$1._addSegment(lastSegment);\n }\n linePoints = [];\n }\n }\n\n if (linePoints.length > 1) {\n lastSegment = this$1$1.createSegment(\n linePoints, currentSeries, seriesIx, lastSegment\n );\n this$1$1._addSegment(lastSegment);\n }\n }\n\n this.children.unshift.apply(this.children, this._segments);\n },\n\n _addSegment: function(segment) {\n this._segments.push(segment);\n segment.parent = this;\n },\n\n sortPoints: function(points) {\n return points;\n },\n\n seriesMissingValues: function(series) {\n var missingValues = series.missingValues;\n var assumeZero = !missingValues && this.options.isStacked;\n\n return assumeZero ? ZERO : missingValues || INTERPOLATE;\n },\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\n for (var i = 0; i < allPoints.length; i++) {\n var point = allPoints[i];\n\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\n if (pointDistance < nearestPointDistance) {\n nearestPoint = point;\n nearestPointDistance = pointDistance;\n }\n }\n }\n\n return nearestPoint;\n }\n };\n\n var ClipAnimation = Animation.extend({\n setup: function() {\n this._setEnd(this.options.box.x1);\n },\n\n step: function(pos) {\n var box = this.options.box;\n this._setEnd(dataviz.interpolateValue(box.x1, box.x2, pos));\n },\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\n element.suspend();\n topRight.setX(x);\n element.resume();\n bottomRight.setX(x);\n }\n });\n\n setDefaultOptions(ClipAnimation, {\n duration: INITIAL_ANIMATION_DURATION\n });\n\n AnimationFactory.current.register(\"clip\", ClipAnimation);\n\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\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, {\n box: box\n });\n if (anyHasZIndex(this.options.series)) {\n this._setChildrenAnimation(clipPath);\n }\n }\n },\n\n _setChildrenAnimation: function(clipPath) {\n var points = this.animationPoints();\n\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\n var LineChart = CategoricalChart.extend({\n render: function() {\n\n CategoricalChart.fn.render.call(this);\n\n this.updateStackRange();\n this.renderSegments();\n },\n\n pointType: function() {\n return LinePoint;\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 missingValues = this.seriesMissingValues(series);\n var value = data.valueFields.value;\n\n if (!defined(value) || value === null) {\n if (missingValues === ZERO) {\n value = 0;\n } else {\n return null;\n }\n }\n\n var pointOptions = this.pointOptions(series, seriesIx);\n pointOptions = this.evalPointOptions(\n pointOptions, value, category, categoryIx, series, seriesIx\n );\n\n var color = data.fields.color || series.color;\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n\n var point = new LinePoint(value, pointOptions);\n point.color = color;\n\n this.append(point);\n\n return point;\n },\n\n plotRange: function(point) {\n var this$1$1 = this;\n\n var plotValue = this.plotValue(point);\n\n if (this.options.isStacked) {\n var categoryIx = point.categoryIx;\n var categoryPoints = this.categoryPoints[categoryIx];\n\n for (var i = 0; i < categoryPoints.length; i++) {\n var other = categoryPoints[i];\n\n if (point === other) {\n break;\n }\n\n plotValue += this$1$1.plotValue(other);\n\n if (this$1$1.options.isStacked100) {\n plotValue = Math.min(plotValue, 1);\n }\n }\n\n }\n\n return [ plotValue, plotValue ];\n },\n\n createSegment: function(linePoints, currentSeries, seriesIx) {\n var style = currentSeries.style;\n var pointType;\n\n if (style === STEP) {\n pointType = StepLineSegment;\n } else if (style === SMOOTH) {\n pointType = SplineSegment;\n } else {\n pointType = LineSegment;\n }\n\n return new pointType(linePoints, currentSeries, seriesIx);\n },\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 supportsPointInactiveOpacity: function() {\n return false;\n }\n });\n\n deepExtend(LineChart.prototype, LineChartMixin, ClipAnimationMixin);\n\n var AreaSegment = LineSegment.extend({\n init: function(linePoints, currentSeries, seriesIx, prevSegment, stackPoints) {\n LineSegment.fn.init.call(this, linePoints, currentSeries, seriesIx);\n\n this.prevSegment = prevSegment;\n this.stackPoints = stackPoints;\n },\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\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n\n this.visual = new Group({\n zIndex: series.zIndex\n });\n\n this.createFill({\n fill: {\n color: color,\n opacity: series.opacity\n },\n stroke: null\n });\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\n strokeSegments: function() {\n var segments = this._strokeSegments;\n\n if (!segments) {\n segments = this._strokeSegments = this.createStrokeSegments();\n }\n\n return segments;\n },\n\n createStrokeSegments: function() {\n return this.segmentsFromPoints(this.points());\n },\n\n stackSegments: function() {\n if (this.prevSegment) {\n return this.prevSegment.createStackSegments(this.stackPoints);\n }\n\n return this.createStackSegments(this.stackPoints);\n },\n\n createStackSegments: function(stackPoints) {\n return this.segmentsFromPoints(this.toGeometryPoints(stackPoints)).reverse();\n },\n\n segmentsFromPoints: function(points) {\n return points.map(function (point) { 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\n this.visual.append(stroke);\n },\n\n hasStackSegment: function() {\n return this.prevSegment || (this.stackPoints && this.stackPoints.length);\n },\n\n createFill: function(style) {\n var strokeSegments = this.strokeSegments();\n var fillSegments = strokeSegments.slice(0);\n var hasStackSegments = this.hasStackSegment();\n\n if (hasStackSegments) {\n var stackSegments = this.stackSegments();\n\n append(fillSegments, stackSegments);\n }\n\n var fill = new Path(style);\n fill.segments.push.apply(fill.segments, fillSegments);\n\n if (!hasStackSegments && strokeSegments.length > 1) {\n this.fillToAxes(fill);\n }\n\n this.visual.append(fill);\n },\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\n if (invertAxes) {\n fillPath.lineTo(end, lastPoint.y)\n .lineTo(end, firstPoint.y);\n } else {\n fillPath.lineTo(lastPoint.x, end)\n .lineTo(firstPoint.x, end);\n }\n }\n });\n\n var StepAreaSegment = AreaSegment.extend({\n createStrokeSegments: function() {\n return this.segmentsFromPoints(this.calculateStepPoints(this.linePoints));\n },\n\n createStackSegments: function(stackPoints) {\n return this.segmentsFromPoints(this.calculateStepPoints(stackPoints)).reverse();\n }\n });\n\n deepExtend(StepAreaSegment.prototype, StepLineMixin);\n\n var SplineAreaSegment = AreaSegment.extend({\n createStrokeSegments: function() {\n var curveProcessor = new CurveProcessor(this.options.closed);\n var linePoints = this.points();\n\n return curveProcessor.process(linePoints);\n },\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(\n segment.anchor(),\n segment.controlOut(),\n segment.controlIn()\n ));\n }\n\n return stackSegments;\n }\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\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\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\n return new pointType(linePoints, currentSeries, seriesIx, previousSegment, stackPoints);\n },\n\n reflow: function(targetBox) {\n var this$1$1 = this;\n\n LineChart.fn.reflow.call(this, targetBox);\n\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$1.categoryAxis.getSlot(stackPoint.categoryIx);\n stackPoint.reflow(pointSlot);\n }\n }\n },\n\n _gapStackPoints: function(linePoints, seriesIx, style) {\n var this$1$1 = this;\n\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\n var endIdx = startIdx + length;\n var pointOffset = this.seriesOptions[0]._outOfRangeMinPoint ? 1 : 0;\n var stackPoints = [];\n\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\n do {\n currentSeriesIx--;\n point = seriesPoints[currentSeriesIx][pointIx];\n } while (currentSeriesIx > 0 && !point);\n\n if (point) {\n if (style !== STEP && categoryIx > startIdx && !seriesPoints[currentSeriesIx][pointIx - 1]) {\n stackPoints.push(this$1$1._previousSegmentPoint(categoryIx, pointIx, pointIx - 1, currentSeriesIx));\n }\n\n stackPoints.push(point);\n\n if (style !== STEP && categoryIx + 1 < endIdx && !seriesPoints[currentSeriesIx][pointIx + 1]) {\n stackPoints.push(this$1$1._previousSegmentPoint(categoryIx, pointIx, pointIx + 1, currentSeriesIx));\n }\n } else {\n var gapStackPoint = this$1$1._createGapStackPoint(categoryIx);\n this$1$1._stackPoints.push(gapStackPoint);\n stackPoints.push(gapStackPoint);\n }\n }\n\n return stackPoints;\n },\n\n _previousSegmentPoint: function(categoryIx, pointIx, segmentIx, seriesIdx) {\n var seriesPoints = this.seriesPoints;\n var index = seriesIdx;\n var point;\n\n while (index > 0 && !point) {\n index--;\n point = seriesPoints[index][segmentIx];\n }\n\n if (!point) {\n point = this._createGapStackPoint(categoryIx);\n this._stackPoints.push(point);\n } else {\n point = seriesPoints[index][pointIx];\n }\n\n return point;\n },\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\n return point;\n },\n\n seriesMissingValues: function(series) {\n return series.missingValues || ZERO;\n },\n\n supportsPointInactiveOpacity: function() {\n return false;\n }\n });\n\n var AxisGroupRangeTracker = Class.extend({\n init: function() {\n\n this.axisRanges = {};\n },\n\n update: function(chartAxisRanges) {\n var axisRanges = this.axisRanges;\n\n for (var axisName in chartAxisRanges) {\n var chartRange = chartAxisRanges[axisName];\n var range = axisRanges[axisName];\n axisRanges[axisName] = range = range || { min: MAX_VALUE, 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\n reset: function(axisName) {\n this.axisRanges[axisName] = undefined;\n },\n\n query: function(axisName) {\n return this.axisRanges[axisName];\n }\n });\n\n var BarLabel = ChartElement.extend({\n init: function(content, options, pointData) {\n ChartElement.fn.init.call(this, options);\n\n this.textBox = new TextBox(content, this.options, pointData);\n this.append(this.textBox);\n },\n\n createVisual: function() {\n this.textBox.options.noclip = this.options.noclip;\n },\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\n textOptions.align = vertical ? CENTER : LEFT;\n textOptions.vAlign = vertical ? TOP : CENTER;\n\n if (options.position === INSIDE_END) {\n if (vertical) {\n textOptions.vAlign = TOP;\n\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(\n targetBox.x1, targetBox.y1 - box.height(),\n targetBox.x2, targetBox.y1\n );\n } else {\n labelBox = new Box(\n targetBox.x1, targetBox.y2,\n targetBox.x2, targetBox.y2 + box.height()\n );\n }\n } else {\n textOptions.align = CENTER;\n if (aboveAxis) {\n labelBox = new Box(\n targetBox.x2, targetBox.y1,\n targetBox.x2 + box.width(), targetBox.y2\n );\n } else {\n labelBox = new Box(\n targetBox.x1 - box.width(), targetBox.y1,\n targetBox.x1, targetBox.y2\n );\n }\n }\n }\n\n if (!options.rotation) {\n if (vertical) {\n padding.left = padding.right =\n (labelBox.width() - text.contentBox.width()) / 2;\n } else {\n padding.top = padding.bottom =\n (labelBox.height() - text.contentBox.height()) / 2;\n }\n }\n\n text.reflow(labelBox);\n },\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\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\n this.reflow(targetBox);\n }\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\n function hasGradientOverlay(options) {\n var overlay = options.overlay;\n\n return overlay && overlay.gradient && overlay.gradient !== \"none\";\n }\n\n var BAR_ALIGN_MIN_WIDTH = 6;\n\n var Bar = ChartElement.extend({\n init: function(value, options) {\n ChartElement.fn.init.call(this);\n\n this.options = options;\n this.color = options.color || WHITE;\n this.aboveAxis = valueOrDefault(this.options.aboveAxis, true);\n this.value = value;\n },\n\n render: function() {\n if (this._rendered) {\n return;\n }\n\n this._rendered = true;\n\n this.createLabel();\n this.createNote();\n\n if (this.errorBar) {\n this.append(this.errorBar);\n }\n },\n\n createLabel: function() {\n var options = this.options;\n var labels = options.labels;\n\n if (labels.visible) {\n var pointData = this.pointData();\n var labelTemplate = getTemplate(labels);\n var labelText;\n\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else {\n labelText = this.formatValue(labels.format);\n }\n\n this.label = new BarLabel(labelText,\n deepExtend({\n vertical: options.vertical\n },\n labels\n ), pointData);\n this.append(this.label);\n }\n },\n\n formatValue: function(format) {\n return this.owner.formatPointValue(this, format);\n },\n\n reflow: function(targetBox) {\n var this$1$1 = this;\n\n this.render();\n\n var label = this.label;\n\n this.box = targetBox;\n\n if (label) {\n label.options.aboveAxis = this.aboveAxis;\n label.reflow(targetBox);\n }\n\n if (this.note) {\n this.note.reflow(targetBox);\n }\n\n if (this.errorBars) {\n for (var i = 0; i < this.errorBars.length; i++) {\n this$1$1.errorBars[i].reflow(targetBox);\n }\n }\n },\n\n createVisual: function() {\n var this$1$1 = this;\n\n var ref = this;\n var box = ref.box;\n var options = ref.options;\n var customVisual = options.visual;\n\n if (this.visible !== false) {\n ChartElement.fn.createVisual.call(this);\n\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$1.createRect(group);\n return group;\n },\n options: options\n });\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\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\n rect.size.width = Math.round(rect.size.width);\n\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\n var width = this.box.width();\n var height = this.box.height();\n\n var size = options.vertical ? width : height;\n\n if (size > BAR_ALIGN_MIN_WIDTH) {\n alignPathToPixel(path);\n\n // Fixes lineJoin issue in firefox when the joined lines are parallel\n if (width < 1 || height < 1) {\n path.options.stroke.lineJoin = \"round\";\n }\n }\n\n visual.append(path);\n\n if (hasGradientOverlay(options)) {\n var overlay = this.createGradientOverlay(path, { baseColor: this.color }, deepExtend({\n end: !options.vertical ? [ 0, 1 ] : undefined\n }, options.overlay));\n\n visual.append(overlay);\n }\n },\n\n createHighlight: function(style) {\n var highlight = Path.fromRect(this.box.toRect(), style);\n\n return alignPathToPixel(highlight);\n },\n\n highlightVisual: function() {\n return this.rectVisual;\n },\n\n highlightVisualArgs: function() {\n return {\n options: this.options,\n rect: this.box.toRect(),\n visual: this.rectVisual\n };\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\n if (!defined(borderColor)) {\n borderColor = new Color(color).brightness(brightness).toHex();\n }\n\n return borderColor;\n },\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\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\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\n return {\n point: new Point(x, y),\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n },\n\n overlapsBox: function(box) {\n return this.box.overlaps(box);\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 runningTotal: this.runningTotal,\n total: this.total,\n series: this.series\n };\n }\n });\n\n deepExtend(Bar.prototype, PointEventsMixin);\n deepExtend(Bar.prototype, NoteMixin);\n\n Bar.prototype.defaults = {\n border: {\n width: 1\n },\n vertical: true,\n overlay: {\n gradient: \"glass\"\n },\n labels: {\n visible: false,\n format: \"{0}\"\n },\n opacity: 1,\n notes: {\n label: {}\n }\n };\n\n function forEach(elements, callback) {\n elements.forEach(callback);\n }\n\n function forEachReverse(elements, callback) {\n var length = elements.length;\n\n for (var idx = length - 1; idx >= 0; idx--) {\n callback(elements[idx], idx - length - 1);\n }\n }\n\n var ClusterLayout = ChartElement.extend({\n init: function(options) {\n ChartElement.fn.init.call(this, options);\n\n this.forEach = options.rtl ? forEachReverse : forEach;\n },\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\n this.forEach(children, function (child, idx) {\n var childBox = (child.box || box).clone();\n\n childBox[axis + 1] = position;\n childBox[axis + 2] = position + slotSize;\n\n child.reflow(childBox);\n if (idx < count - 1) {\n position += (slotSize * spacing);\n }\n\n position += slotSize;\n });\n }\n });\n\n setDefaultOptions(ClusterLayout, {\n vertical: false,\n gap: 0,\n spacing: 0\n });\n\n var StackWrap = ChartElement.extend({\n reflow: function(targetBox) {\n var this$1$1 = this;\n\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\n for (var i = 0; i < childrenCount; i++) {\n var currentChild = children[i];\n\n if (currentChild.visible !== false) {\n var childBox = currentChild.box.clone();\n childBox.snapTo(targetBox, positionAxis);\n\n if (i === 0) {\n box = this$1$1.box = childBox.clone();\n }\n\n currentChild.reflow(childBox);\n box.wrap(childBox);\n }\n }\n }\n });\n\n setDefaultOptions(StackWrap, {\n vertical: true\n });\n\n var BarChart = CategoricalChart.extend({\n render: function() {\n CategoricalChart.fn.render.call(this);\n this.updateStackRange();\n },\n\n pointType: function() {\n return Bar;\n },\n\n clusterType: function() {\n return ClusterLayout;\n },\n\n stackType: function() {\n return StackWrap;\n },\n\n stackLimits: function(axisName, stackName) {\n var limits = CategoricalChart.fn.stackLimits.call(this, axisName, stackName);\n\n return limits;\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 isStacked = options.isStacked;\n var value = this.pointValue(data);\n var pointOptions = this.pointOptions(series, seriesIx);\n\n var labelOptions = pointOptions.labels;\n if (isStacked) {\n if (labelOptions.position === OUTSIDE_END) {\n labelOptions.position = INSIDE_END;\n }\n }\n\n pointOptions.isStacked = isStacked;\n\n var color = data.fields.color || series.color;\n if (value < 0 && pointOptions.negativeColor) {\n color = pointOptions.negativeColor;\n }\n\n pointOptions = this.evalPointOptions(\n pointOptions, value, category, categoryIx, series, seriesIx\n );\n\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n\n var pointType = this.pointType();\n var point = new pointType(value, pointOptions);\n point.color = color;\n\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\n if (isStacked) {\n var stackWrap = this.getStackWrap(series, cluster);\n stackWrap.append(point);\n } else {\n cluster.append(point);\n }\n\n return point;\n },\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\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\n if (!stackWrap) {\n var stackType = this.stackType();\n stackWrap = new stackType({\n vertical: !this.options.invertAxes\n });\n stackWrap._stackGroup = stackGroup;\n cluster.append(stackWrap);\n }\n\n return stackWrap;\n },\n\n categorySlot: function(categoryAxis, categoryIx, valueAxis) {\n var options = this.options;\n var categorySlot = categoryAxis.getSlot(categoryIx);\n var startValue = valueAxis.startValue();\n\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\n return categorySlot;\n },\n\n reflowCategories: function(categorySlots) {\n var children = this.children;\n var childrenLength = children.length;\n\n for (var i = 0; i < childrenLength; i++) {\n children[i].reflow(categorySlots[i]);\n }\n },\n\n createAnimation: function() {\n this._setAnimationOptions();\n CategoricalChart.fn.createAnimation.call(this);\n\n if (anyHasZIndex(this.options.series)) {\n this._setChildrenAnimation();\n }\n },\n\n _setChildrenAnimation: function() {\n var this$1$1 = this;\n\n var points = this.points;\n\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$1.options.animation;\n point.createAnimation();\n }\n }\n },\n\n _setAnimationOptions: function() {\n var options = this.options;\n var animation = options.animation || {};\n var origin;\n\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\n animation.origin = new GeometryPoint(origin.x1, origin.y1);\n animation.vertical = !options.invertAxes;\n }\n });\n\n setDefaultOptions(BarChart, {\n animation: {\n type: BAR\n }\n });\n\n var Candlestick = ChartElement.extend({\n init: function(value, options) {\n ChartElement.fn.init.call(this, options);\n this.value = value;\n },\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\n ocSlot.x1 = lhSlot.x1 = box.x1;\n ocSlot.x2 = lhSlot.x2 = box.x2;\n\n this.realBody = ocSlot;\n\n var mid = lhSlot.center().x;\n var points = [];\n\n points.push([ [ mid, lhSlot.y1 ], [ mid, ocSlot.y1 ] ]);\n points.push([ [ mid, ocSlot.y2 ], [ mid, lhSlot.y2 ] ]);\n\n this.lines = points;\n\n this.box = lhSlot.clone().wrap(ocSlot);\n\n if (!this._rendered) {\n this._rendered = true;\n this.createNote();\n }\n\n this.reflowNote();\n },\n\n reflowNote: function() {\n if (this.note) {\n this.note.reflow(this.box);\n }\n },\n\n createVisual: function() {\n ChartElement.fn.createVisual.call(this);\n this._mainVisual = this.mainVisual(this.options);\n this.visual.append(\n this._mainVisual\n );\n\n this.createOverlay();\n },\n\n mainVisual: function(options) {\n var group = new Group();\n\n this.createBody(group, options);\n this.createLines(group, options);\n\n return group;\n },\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\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\n alignPathToPixel(body);\n container.append(body);\n\n if (hasGradientOverlay(options)) {\n container.append(this.createGradientOverlay(body, { baseColor: this.color }, deepExtend({\n end: !options.vertical ? [ 0, 1 ] : undefined\n }, options.overlay)));\n }\n },\n\n createLines: function(container, options) {\n this.drawLines(container, options, this.lines, options.line);\n },\n\n drawLines: function(container, options, lines, lineOptions) {\n if (!lines) {\n return;\n }\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\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\n getBorderColor: function() {\n var border = this.options.border;\n var borderColor = border.color;\n\n if (!defined(borderColor)) {\n borderColor = new Color(this.color).brightness(border._brightness).toHex();\n }\n\n return borderColor;\n },\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\n this.visual.append(overlay);\n },\n\n createHighlight: function() {\n var highlight = this.options.highlight;\n var normalColor = this.color;\n\n this.color = highlight.color || this.color;\n var overlay = this.mainVisual(\n deepExtend({}, this.options, {\n line: {\n color: this.getBorderColor()\n }\n }, highlight)\n );\n this.color = normalColor;\n\n return overlay;\n },\n\n highlightVisual: function() {\n return this._mainVisual;\n },\n\n highlightVisualArgs: function() {\n return {\n options: this.options,\n rect: this.box.toRect(),\n visual: this._mainVisual\n };\n },\n\n tooltipAnchor: function() {\n var box = this.box;\n var clipBox = this.owner.pane.clipBox() || box;\n\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\n formatValue: function(format) {\n return this.owner.formatPointValue(this, format);\n },\n\n overlapsBox: function(box) {\n return this.box.overlaps(box);\n }\n });\n\n setDefaultOptions(Candlestick, {\n vertical: true,\n border: {\n _brightness: 0.8\n },\n line: {\n width: 2\n },\n overlay: {\n gradient: \"glass\"\n },\n tooltip: {\n format: \"
  • \" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"
    {4:d}
    Open:{0:C}
    High:{1:C}
    Low:{2:C}
    Close:{3:C}
    \"\n },\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\n deepExtend(Candlestick.prototype, PointEventsMixin);\n deepExtend(Candlestick.prototype, NoteMixin);\n\n function areNumbers(values) {\n return countNumbers(values) === values.length;\n }\n\n var CandlestickChart = CategoricalChart.extend({\n reflowCategories: function(categorySlots) {\n var children = this.children;\n var childrenLength = children.length;\n\n for (var i = 0; i < childrenLength; i++) {\n children[i].reflow(categorySlots[i]);\n }\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\n if (!categoryPoints) {\n this.categoryPoints[categoryIx] = categoryPoints = [];\n }\n\n if (hasValue) {\n point = this.createPoint(data, fields);\n }\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\n if (point) {\n this.updateRange(value, fields);\n\n cluster.append(point);\n\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\n this.points.push(point);\n categoryPoints.push(point);\n },\n\n pointType: function() {\n return Candlestick;\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 pointType = this.pointType();\n var value = data.valueFields;\n var pointOptions = deepExtend({}, series);\n var color = data.fields.color || series.color;\n\n pointOptions = this.evalPointOptions(\n pointOptions, value, category, categoryIx, series, seriesIx\n );\n\n if (series.type === CANDLESTICK) {\n if (value.open > value.close) {\n color = data.fields.downColor || series.downColor || series.color;\n }\n }\n\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n\n pointOptions.vertical = !this.options.invertAxes;\n\n var point = new pointType(value, pointOptions);\n point.color = color;\n\n return point;\n },\n\n splitValue: function(value) {\n return [ value.low, value.open, value.close, 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\n axisRange = this.valueAxisRanges[axisName] =\n axisRange || { min: MAX_VALUE, 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\n formatPointValue: function(point, format) {\n var value = point.value;\n\n return this.chartService.format.auto(format,\n value.open, value.high,\n value.low, value.close, point.category\n );\n },\n\n animationPoints: function() {\n return this.points;\n }\n });\n\n deepExtend(CandlestickChart.prototype, ClipAnimationMixin);\n\n var BoxPlot = Candlestick.extend({\n init: function(value, options) {\n Candlestick.fn.init.call(this, value, options);\n\n this.createNote();\n },\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\n this.boxSlot = boxSlot = valueAxis.getSlot(value.q1, value.q3);\n this.realBody = boxSlot;\n this.reflowBoxSlot(box);\n\n this.whiskerSlot = whiskerSlot = valueAxis.getSlot(value.lower, value.upper);\n this.reflowWhiskerSlot(box);\n\n var medianSlot = valueAxis.getSlot(value.median);\n\n if (value.mean) {\n var meanSlot = valueAxis.getSlot(value.mean);\n this.meanPoints = this.calcMeanPoints(box, meanSlot);\n }\n\n this.whiskerPoints = this.calcWhiskerPoints(boxSlot, whiskerSlot);\n this.medianPoints = this.calcMedianPoints(box, medianSlot);\n\n this.box = whiskerSlot.clone().wrap(boxSlot);\n this.reflowNote();\n },\n\n reflowBoxSlot: function(box) {\n this.boxSlot.x1 = box.x1;\n this.boxSlot.x2 = box.x2;\n },\n\n reflowWhiskerSlot: function(box) {\n this.whiskerSlot.x1 = box.x1;\n this.whiskerSlot.x2 = box.x2;\n },\n\n calcMeanPoints: function(box, meanSlot) {\n return [\n [ [ box.x1, meanSlot.y1 ], [ box.x2, meanSlot.y1 ] ]\n ];\n },\n\n calcWhiskerPoints: function(boxSlot, whiskerSlot) {\n var mid = whiskerSlot.center().x;\n return [ [\n [ mid - 5, whiskerSlot.y1 ], [ mid + 5, whiskerSlot.y1 ],\n [ mid, whiskerSlot.y1 ], [ mid, boxSlot.y1 ]\n ], [\n [ mid - 5, whiskerSlot.y2 ], [ mid + 5, whiskerSlot.y2 ],\n [ mid, whiskerSlot.y2 ], [ mid, boxSlot.y2 ]\n ] ];\n },\n\n calcMedianPoints: function(box, medianSlot) {\n return [\n [ [ box.x1, medianSlot.y1 ], [ box.x2, medianSlot.y1 ] ]\n ];\n },\n\n renderOutliers: function(options) {\n var this$1$1 = this;\n\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\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\n if (!defined(markersBorder.color)) {\n if (defined(this$1$1.color)) {\n markersBorder.color = this$1$1.color;\n } else {\n markersBorder.color =\n new Color(markers.background).brightness(BORDER_BRIGHTNESS).toHex();\n }\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\n shape.value = outlierValue;\n\n elements.push(shape);\n }\n\n this.reflowOutliers(elements);\n return elements;\n },\n\n reflowOutliers: function(outliers) {\n var this$1$1 = this;\n\n var valueAxis = this.owner.seriesValueAxis(this.options);\n var center = this.box.center();\n\n for (var i = 0; i < outliers.length; i++) {\n var outlierValue = outliers[i].value;\n var markerBox = valueAxis.getSlot(outlierValue);\n\n if (this$1$1.options.vertical) {\n markerBox.move(center.x);\n } else {\n markerBox.move(undefined, center.y);\n }\n\n this$1$1.box = this$1$1.box.wrap(markerBox);\n outliers[i].reflow(markerBox);\n }\n },\n\n mainVisual: function(options) {\n var group = Candlestick.fn.mainVisual.call(this, options);\n var outliers = this.renderOutliers(options);\n\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\n return group;\n },\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\n getBorderColor: function() {\n if ((this.options.border || {}).color) {\n return this.options.border.color;\n }\n\n if (this.color) {\n return this.color;\n }\n\n return Candlestick.fn.getBorderColor.call(this);\n }\n });\n\n setDefaultOptions(BoxPlot, {\n border: {\n _brightness: 0.8\n },\n line: {\n width: 2\n },\n median: {\n color: \"#f6f6f6\"\n },\n mean: {\n width: 2,\n dashType: \"dash\",\n color: \"#f6f6f6\"\n },\n overlay: {\n gradient: \"glass\"\n },\n tooltip: {\n format: \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"
    {6:d}
    Lower:{0:C}
    Q1:{1:C}
    Median:{2:C}
    Mean:{5:C}
    Q3:{3:C}
    Upper:{4:C}
    \"\n },\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\n deepExtend(BoxPlot.prototype, PointEventsMixin);\n\n var VerticalBoxPlot = BoxPlot.extend({\n reflowBoxSlot: function(box) {\n this.boxSlot.y1 = box.y1;\n this.boxSlot.y2 = box.y2;\n },\n\n reflowWhiskerSlot: function(box) {\n this.whiskerSlot.y1 = box.y1;\n this.whiskerSlot.y2 = box.y2;\n },\n\n calcMeanPoints: function(box, meanSlot) {\n return [\n [ [ meanSlot.x1, box.y1 ], [ meanSlot.x1, box.y2 ] ]\n ];\n },\n\n calcWhiskerPoints: function(boxSlot, whiskerSlot) {\n var mid = whiskerSlot.center().y;\n return [ [\n [ whiskerSlot.x1, mid - 5 ], [ whiskerSlot.x1, mid + 5 ],\n [ whiskerSlot.x1, mid ], [ boxSlot.x1, mid ]\n ], [\n [ whiskerSlot.x2, mid - 5 ], [ whiskerSlot.x2, mid + 5 ],\n [ whiskerSlot.x2, mid ], [ boxSlot.x2, mid ]\n ] ];\n },\n\n calcMedianPoints: function(box, medianSlot) {\n return [\n [ [ medianSlot.x1, box.y1 ], [ medianSlot.x1, 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\n if (!categoryPoints) {\n this.categoryPoints[categoryIx] = categoryPoints = [];\n }\n\n if (hasValue) {\n point = this.createPoint(data, fields);\n }\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\n if (point) {\n this.updateRange(value, fields);\n\n cluster.append(point);\n\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\n this.points.push(point);\n categoryPoints.push(point);\n },\n\n pointType: function() {\n if (this.options.invertAxes) {\n return VerticalBoxPlot;\n }\n\n return BoxPlot;\n },\n\n splitValue: function(value) {\n return [\n value.lower, value.q1, value.median,\n value.q3, value.upper\n ];\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\n if (defined(value.mean)) {\n parts = parts.concat(value.mean);\n }\n\n axisRange = this.valueAxisRanges[axisName] =\n axisRange || { min: MAX_VALUE, 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\n formatPointValue: function(point, format) {\n var value = point.value;\n\n return this.chartService.format.auto(format,\n value.lower, value.q1, value.median,\n value.q3, value.upper, value.mean, point.category\n );\n },\n\n filterOutliers: function(items) {\n var length = (items || []).length;\n var result = [];\n\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\n return result;\n },\n\n supportsPointInactiveOpacity: function() {\n return false;\n }\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\n return axis;\n }\n });\n\n function hasValue(value) {\n return defined(value) && value !== null;\n }\n\n var ScatterChart = ChartElement.extend({\n init: function(plotArea, options) {\n\n ChartElement.fn.init.call(this, options);\n\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this._initFields();\n\n this.render();\n },\n\n _initFields: function() {\n // X and Y axis ranges grouped by name, e.g.:\n // primary: { min: 0, max: 1 }\n this.xAxisRanges = {};\n this.yAxisRanges = {};\n\n this.points = [];\n this.seriesPoints = [];\n this.seriesOptions = [];\n this._evalSeries = [];\n },\n\n render: function() {\n this.traverseDataPoints(this.addValue.bind(this));\n },\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\n if (isNumber(value)) {\n var errorRange;\n if (isNumber(lowValue) && isNumber(highValue)) {\n errorRange = { low: lowValue, high: highValue };\n }\n\n if (errorBars && defined(errorBars[valueErrorField])) {\n this.seriesErrorRanges = this.seriesErrorRanges || { x: [], y: [] };\n this.seriesErrorRanges[field][seriesIx] = this.seriesErrorRanges[field][seriesIx] ||\n new ErrorRangeCalculator(errorBars[valueErrorField], series, field);\n\n errorRange = this.seriesErrorRanges[field][seriesIx].getErrorRange(value, errorBars[valueErrorField]);\n }\n\n if (errorRange) {\n this.addPointErrorBar(errorRange, point, field);\n }\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\n point[field + \"Low\"] = low;\n point[field + \"High\"] = high;\n\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\n item[field] = low;\n this.updateRange(item, series);\n item[field] = high;\n this.updateRange(item, series);\n },\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\n var pointValue = value;\n if (!(hasValue(x) && hasValue(y))) {\n pointValue = this.createMissingValue(pointValue, missingValues);\n }\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\n this.points.push(point);\n seriesPoints.push(point);\n },\n\n seriesMissingValues: function(series) {\n return series.missingValues;\n },\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\n if (hasValue(x)) {\n xAxisRange = this.xAxisRanges[xAxisName] =\n xAxisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n if (isString(x)) {\n x = parseDate(intlService, x);\n }\n\n xAxisRange.min = Math.min(xAxisRange.min, x);\n xAxisRange.max = Math.max(xAxisRange.max, x);\n }\n\n if (hasValue(y)) {\n yAxisRange = this.yAxisRanges[yAxisName] =\n yAxisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n if (isString(y)) {\n y = parseDate(intlService, y);\n }\n\n yAxisRange.min = Math.min(yAxisRange.min, y);\n yAxisRange.max = Math.max(yAxisRange.max, y);\n }\n },\n\n evalPointOptions: function(options, value, fields) {\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var state = { defaults: series._defaults, excluded: [ \"data\", \"tooltip\", \"content\", \"template\", \"visual\", \"toggle\", \"_outOfRangeMinPoint\", \"_outOfRangeMaxPoint\" ] };\n\n var doEval = this._evalSeries[seriesIx];\n if (!defined(doEval)) {\n this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\n }\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\n return pointOptions;\n },\n\n pointType: function() {\n return LinePoint;\n },\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: {\n opacity: series.opacity\n },\n tooltip: {\n format: this.options.tooltip.format\n },\n labels: {\n format: this.options.labels.format\n }\n }, series);\n }\n\n return options;\n },\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\n pointOptions = this.evalPointOptions(pointOptions, value, fields);\n\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n\n var point = new LinePoint(value, pointOptions);\n point.color = color;\n\n this.append(point);\n\n return point;\n },\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\n if (!xAxis) {\n throw new Error(\"Unable to locate X axis with name \" + xAxisName);\n }\n\n if (!yAxis) {\n throw new Error(\"Unable to locate Y axis with name \" + yAxisName);\n }\n\n return {\n x: xAxis,\n y: yAxis\n };\n },\n\n reflow: function(targetBox) {\n var this$1$1 = this;\n\n var chartPoints = this.points;\n var limit = !this.options.clip;\n var pointIx = 0;\n\n this.traverseDataPoints(function (value, fields) {\n var point = chartPoints[pointIx++];\n var seriesAxes = this$1$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\n if (point) {\n if (slotX && slotY) {\n var pointSlot = this$1$1.pointSlot(slotX, slotY);\n point.reflow(pointSlot);\n } else {\n point.visible = false;\n }\n }\n });\n\n this.box = targetBox;\n },\n\n pointSlot: function(slotX, slotY) {\n return new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\n },\n\n traverseDataPoints: function(callback) {\n var this$1$1 = this;\n\n var ref = this;\n var series = ref.options.series;\n var seriesPoints = ref.seriesPoints;\n\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\n for (var pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\n var ref$1 = this$1$1._bindPoint(currentSeries, seriesIx, pointIx);\n var value = ref$1.valueFields;\n var fields = ref$1.fields;\n\n callback(value, deepExtend({\n pointIx: pointIx,\n series: currentSeries,\n seriesIx: seriesIx,\n dataItem: currentSeries.data[pointIx],\n owner: this$1$1\n }, fields));\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);\n },\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: {\n format: \"{0}, {1}\"\n },\n labels: {\n format: \"{0}, {1}\"\n },\n clip: true\n });\n deepExtend(ScatterChart.prototype, ClipAnimationMixin, {\n _bindPoint: CategoricalChart.prototype._bindPoint\n });\n\n var Bubble = LinePoint.extend({\n init: function(value, options) {\n LinePoint.fn.init.call(this, value, options);\n\n this.category = value.category;\n },\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([ center.x, center.y + radius / 5 + border.width / 2 ], radius + border.width / 2), {\n stroke: {\n color: 'none'\n },\n fill: this.createGradient({\n gradient: 'bubbleShadow',\n color: markers.background,\n stops: [ {\n offset: 0,\n color: markers.background,\n opacity: 0.3\n }, {\n offset: 1,\n color: markers.background,\n opacity: 0\n } ]\n })\n });\n var overlay = new drawing.Circle(new geometry.Circle([ center.x, center.y ], radius), {\n stroke: {\n color: border.color ||\n 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\n highlightGroup.append(shadow, overlay);\n\n return highlightGroup;\n }\n });\n\n Bubble.prototype.defaults = deepExtend({}, Bubble.prototype.defaults, {\n labels: {\n position: CENTER\n },\n highlight: {\n opacity: 1,\n border: {\n color: \"#fff\",\n width: 2,\n opacity: 1\n }\n }\n });\n\n Bubble.prototype.defaults.highlight.zIndex = undefined;\n\n var BubbleChart = ScatterChart.extend({\n _initFields: function() {\n this._maxSize = MIN_VALUE;\n ScatterChart.fn._initFields.call(this);\n },\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\n reflow: function(box) {\n this.updateBubblesSize(box);\n ScatterChart.fn.reflow.call(this, box);\n },\n\n pointType: function() {\n return Bubble;\n },\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\n var color = fields.color || series.color;\n if (value.size < 0 && series.negativeValues.visible) {\n color = valueOrDefault(\n series.negativeValues.color, color\n );\n }\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\n pointOptions = this.evalPointOptions(pointOptions, value, fields);\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n\n pointOptions.markers.background = color;\n\n var point = new Bubble(value, pointOptions);\n point.color = color;\n\n this.append(point);\n\n return point;\n },\n\n updateBubblesSize: function(box) {\n var this$1$1 = this;\n\n var ref = this;\n var series = ref.options.series;\n var boxSize = Math.min(box.width(), box.height());\n\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var seriesPoints = this$1$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$1._maxSize;\n\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\n deepExtend(point.options, {\n zIndex: zIndex,\n markers: {\n size: radius * 2,\n zIndex: zIndex\n },\n labels: {\n zIndex: zIndex + 1\n }\n });\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\n createAnimation: function() {},\n\n createVisual: function() {}\n });\n\n setDefaultOptions(BubbleChart, {\n tooltip: {\n format: \"{3}\"\n },\n labels: {\n format: \"{3}\"\n }\n });\n\n var Target = ShapeElement.extend({\n\n });\n\n deepExtend(Target.prototype, PointEventsMixin);\n\n var Bullet = ChartElement.extend({\n init: function(value, options) {\n ChartElement.fn.init.call(this, options);\n\n this.aboveAxis = this.options.aboveAxis;\n this.color = options.color || WHITE;\n this.value = value;\n },\n\n render: function() {\n var options = this.options;\n\n if (!this._rendered) {\n this._rendered = true;\n\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\n this.target.value = this.value;\n this.target.dataItem = this.dataItem;\n this.target.series = this.series;\n\n this.append(this.target);\n }\n\n this.createLabel();\n this.createNote();\n }\n },\n\n createLabel: function() {\n var options = this.options;\n var labels = options.labels;\n\n if (labels.visible) {\n var pointData = this.pointData();\n var labelTemplate = getTemplate(labels);\n var labelText;\n\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else {\n labelText = this.formatValue(labels.format);\n }\n\n this.label = new BarLabel(labelText, labels, pointData);\n this.append(this.label);\n }\n },\n\n reflow: function(box) {\n this.render();\n\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\n if (target) {\n var targetSlot = new Box(\n targetSlotX.x1, targetSlotY.y1,\n targetSlotX.x2, targetSlotY.y2\n );\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\n var label = this.label;\n if (label) {\n label.options.aboveAxis = this.aboveAxis;\n label.reflow(box);\n }\n\n if (this.note) {\n this.note.reflow(box);\n }\n\n this.box = box;\n },\n\n createVisual: function() {\n ChartElement.fn.createVisual.call(this);\n\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\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\n this.bodyVisual = body;\n\n alignPathToPixel(body);\n this.visual.append(body);\n },\n\n createAnimation: function() {\n if (this.bodyVisual) {\n this.animation = Animation.create(\n this.bodyVisual, this.options.animation\n );\n }\n },\n\n createHighlight: function(style) {\n return Path.fromRect(this.box.toRect(), style);\n },\n\n highlightVisual: function() {\n return this.bodyVisual;\n },\n\n highlightVisualArgs: function() {\n return {\n rect: this.box.toRect(),\n visual: this.bodyVisual,\n options: this.options\n };\n },\n\n formatValue: function(format) {\n return this.owner.formatPointValue(this, format);\n },\n\n pointData: function() {\n return {\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n series: this.series\n };\n },\n\n overlapsBox: function(box) {\n return this.box.overlaps(box);\n }\n });\n\n Bullet.prototype.tooltipAnchor = Bar.prototype.tooltipAnchor;\n\n setDefaultOptions(Bullet, {\n border: {\n width: 1\n },\n vertical: false,\n opacity: 1,\n target: {\n shape: \"\",\n border: {\n width: 0,\n color: \"green\"\n },\n line: {\n width: 2\n }\n },\n labels: {\n visible: false\n },\n tooltip: {\n format: \"Current: {0}
    Target: {1}\"\n },\n notes: {\n label: {}\n }\n });\n\n deepExtend(Bullet.prototype, PointEventsMixin);\n deepExtend(Bullet.prototype, NoteMixin);\n\n var BulletChart = CategoricalChart.extend({\n init: function(plotArea, options) {\n\n wrapData(options);\n\n CategoricalChart.fn.init.call(this, plotArea, options);\n },\n\n reflowCategories: function(categorySlots) {\n var children = this.children;\n var childrenLength = children.length;\n\n for (var i = 0; i < childrenLength; i++) {\n children[i].reflow(categorySlots[i]);\n }\n },\n\n plotRange: function(point) {\n var series = point.series;\n var valueAxis = this.seriesValueAxis(series);\n var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n\n return [ axisCrossingValue, 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\n var bulletOptions = deepExtend({\n vertical: !options.invertAxes,\n overlay: series.overlay,\n categoryIx: categoryIx,\n invertAxes: options.invertAxes\n }, series);\n\n var color = data.fields.color || series.color;\n bulletOptions = this.evalPointOptions(\n bulletOptions, value, category, categoryIx, series, seriesIx\n );\n\n if (isFunction(series.color)) {\n color = bulletOptions.color;\n }\n\n var bullet = new Bullet(value, bulletOptions);\n bullet.color = color;\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\n cluster.append(bullet);\n\n return bullet;\n },\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\n if (defined(current) && !isNaN(current) && defined(target && !isNaN(target))) {\n axisRange = this.valueAxisRanges[axisName] =\n axisRange || { min: MAX_VALUE, 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\n formatPointValue: function(point, format) {\n return this.chartService.format.auto(format, point.value.current, point.value.target);\n },\n\n pointValue: function(data) {\n return data.valueFields.current;\n },\n\n aboveAxis: function(point) {\n var value = point.value.current;\n\n return value > 0;\n },\n\n createAnimation: function() {\n var this$1$1 = this;\n\n var points = this.points;\n\n this._setAnimationOptions();\n\n for (var idx = 0; idx < points.length; idx++) {\n var point = points[idx];\n point.options.animation = this$1$1.options.animation;\n point.createAnimation();\n }\n }\n });\n\n BulletChart.prototype._setAnimationOptions = BarChart.prototype._setAnimationOptions;\n\n setDefaultOptions(BulletChart, {\n animation: {\n type: BAR\n }\n });\n\n function wrapData(options) {\n var series = options.series;\n\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\n var BaseTooltip = Class.extend({\n init: function(chartService, options) {\n\n this.chartService = chartService;\n this.options = deepExtend({}, this.options, options);\n },\n\n getStyle: function(options, point) {\n var background = options.background;\n var border = options.border.color;\n\n if (point) {\n var pointColor = point.color || point.options.color;\n background = valueOrDefault(background, pointColor);\n border = valueOrDefault(border, pointColor);\n }\n\n var padding = getSpacing(options.padding || {}, \"auto\");\n\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\n show: function(options, tooltipOptions, point) {\n options.format = tooltipOptions.format;\n\n var style = this.getStyle(tooltipOptions, point);\n options.style = style;\n\n var background = new Color(style.backgroundColor);\n if (!defined(tooltipOptions.color) && !background.isDark()) {\n options.className = \"k-chart-tooltip-inverse\";\n }\n\n this.chartService.notify(SHOW_TOOLTIP, options);\n\n this.visible = true;\n },\n\n hide: function() {\n if (this.chartService) {\n this.chartService.notify(HIDE_TOOLTIP);\n }\n\n this.visible = false;\n },\n\n destroy: function() {\n delete this.chartService;\n }\n });\n\n setDefaultOptions(BaseTooltip, {\n border: {\n width: 1\n },\n opacity: 1\n });\n\n var CrosshairTooltip = BaseTooltip.extend({\n init: function(chartService, crosshair, options) {\n BaseTooltip.fn.init.call(this, chartService, options);\n\n this.crosshair = crosshair;\n this.formatService = chartService.format;\n this.initAxisName();\n },\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\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\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\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\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\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\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\n return {\n point: point,\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n }\n });\n\n setDefaultOptions(CrosshairTooltip, {\n padding: 10\n });\n\n var Crosshair = ChartElement.extend({\n init: function(chartService, axis, options) {\n ChartElement.fn.init.call(this, options);\n\n this.axis = axis;\n this.stickyMode = axis instanceof CategoryAxis;\n\n var tooltipOptions = this.options.tooltip;\n\n if (tooltipOptions.visible) {\n this.tooltip = new CrosshairTooltip(chartService, this,\n deepExtend({}, tooltipOptions, { stickyMode: this.stickyMode })\n );\n }\n },\n\n showAt: function(point) {\n this.point = point;\n this.moveLine();\n this.line.visible(true);\n\n if (this.tooltip) {\n this.tooltip.showAt(point);\n }\n },\n\n hide: function() {\n this.line.visible(false);\n\n if (this.tooltip) {\n this.tooltip.hide();\n }\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\n if (vertical) {\n lineEnd = new GeometryPoint(box.x2, box.y1);\n } else {\n lineEnd = new GeometryPoint(box.x1, box.y2);\n }\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\n this.box = box;\n\n this.line.moveTo(lineStart).lineTo(lineEnd);\n },\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\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\n box[dim + 1] = axisLineBox[dim + 1];\n box[dim + 2] = axisLineBox[dim + 2];\n\n return box;\n },\n\n createVisual: function() {\n ChartElement.fn.createVisual.call(this);\n\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\n this.moveLine();\n this.visual.append(this.line);\n },\n\n destroy: function() {\n if (this.tooltip) {\n this.tooltip.destroy();\n }\n\n ChartElement.fn.destroy.call(this);\n }\n });\n\n setDefaultOptions(Crosshair, {\n color: BLACK,\n width: 2,\n zIndex: -1,\n tooltip: {\n visible: false\n }\n });\n\n var ChartContainer = ChartElement.extend({\n init: function(options, pane) {\n ChartElement.fn.init.call(this, options);\n this.pane = pane;\n },\n\n shouldClip: function() {\n var children = this.children;\n var length = children.length;\n\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\n _clipBox: function() {\n return this.pane.chartsBox();\n },\n\n createVisual: function() {\n this.visual = new Group({\n zIndex: 0\n });\n\n if (this.shouldClip()) {\n var clipBox = this.clipBox = this._clipBox();\n var clipRect = clipBox.toRect();\n var clipPath = Path.fromRect(clipRect);\n alignPathToPixel(clipPath);\n\n this.visual.clip(clipPath);\n this.unclipLabels();\n }\n },\n\n stackRoot: function() {\n return this;\n },\n\n unclipLabels: function() {\n var ref = this;\n var charts = ref.children;\n var clipBox = ref.clipBox;\n\n for (var i = 0; i < charts.length; i++) {\n var points = charts[i].points || {};\n var length = points.length;\n\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\n if (label && label.options.visible) {\n if (label.alignToClipBox) {\n label.alignToClipBox(clipBox);\n }\n label.options.noclip = true;\n }\n\n if (note && note.options.visible) {\n note.options.noclip = true;\n }\n }\n }\n }\n }\n },\n\n destroy: function() {\n ChartElement.fn.destroy.call(this);\n\n delete this.parent;\n }\n });\n\n ChartContainer.prototype.isStackRoot = true;\n\n var Pane = BoxElement.extend({\n init: function(options) {\n BoxElement.fn.init.call(this, options);\n\n this.id = paneID();\n\n this.createTitle();\n\n this.content = new ChartElement();\n\n this.chartContainer = new ChartContainer({}, this);\n this.append(this.content);\n\n this.axes = [];\n this.charts = [];\n },\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\n this.title = Title.buildTitle(titleOptions, Pane.prototype.options.title);\n if (this.title) {\n this.append(this.title);\n }\n },\n\n appendAxis: function(axis) {\n this.content.append(axis);\n this.axes.push(axis);\n axis.pane = this;\n },\n\n appendAxisAt: function(axis, pos) {\n this.content.append(axis);\n this.axes.splice(pos, 0, axis);\n axis.pane = this;\n },\n\n appendChart: function(chart) {\n if (this.chartContainer.parent !== this.content) {\n this.content.append(this.chartContainer);\n }\n\n this.charts.push(chart);\n this.chartContainer.append(chart);\n chart.pane = this;\n },\n\n empty: function() {\n var this$1$1 = this;\n\n var plotArea = this.parent;\n\n if (plotArea) {\n for (var i = 0; i < this.axes.length; i++) {\n plotArea.removeAxis(this$1$1.axes[i]);\n }\n\n for (var i$1 = 0; i$1 < this.charts.length; i$1++) {\n plotArea.removeChart(this$1$1.charts[i$1]);\n }\n }\n\n this.axes = [];\n this.charts = [];\n\n this.content.destroy();\n this.content.children = [];\n this.chartContainer.children = [];\n },\n\n reflow: function(targetBox) {\n // Content (such as charts) is rendered, but excluded from reflows\n var content;\n if (last(this.children) === this.content) {\n content = this.children.pop();\n }\n\n BoxElement.fn.reflow.call(this, targetBox);\n\n if (content) {\n this.children.push(content);\n }\n\n if (this.title) {\n this.contentBox.y1 += this.title.box.height();\n }\n },\n\n visualStyle: function() {\n var style = BoxElement.fn.visualStyle.call(this);\n style.zIndex = -10;\n\n return style;\n },\n\n renderComplete: function() {\n if (this.options.visible) {\n this.createGridLines();\n }\n },\n\n stackRoot: function() {\n return this;\n },\n\n clipRoot: function() {\n return this;\n },\n\n createGridLines: function() {\n var axes = this.axes;\n var allAxes = axes.concat(this.parent.axes);\n var vGridLines = [];\n var hGridLines = [];\n\n // TODO\n // Is full combination really necessary?\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\n refresh: function() {\n this.visual.clear();\n\n this.content.parent = null;\n this.content.createGradient = this.createGradient.bind(this);\n this.content.renderVisual();\n this.content.parent = this;\n\n if (this.title) {\n this.visual.append(this.title.visual);\n }\n\n this.visual.append(this.content.visual);\n\n this.renderComplete();\n this.notifyRender();\n },\n\n chartsBox: function() {\n var axes = this.axes;\n var length = axes.length;\n var chartsBox = new Box();\n\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\n if (chartsBox.x2 === 0) {\n var allAxes = this.parent.axes;\n var length$1 = allAxes.length;\n\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\n clipBox: function() {\n return this.chartContainer.clipBox;\n },\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\n var ID = 1;\n\n function paneID() {\n return \"pane\" + ID++;\n }\n\n Pane.prototype.isStackRoot = true;\n\n setDefaultOptions(Pane, {\n zIndex: -1,\n shrinkToFit: true,\n title: {\n align: LEFT\n },\n visible: true\n });\n\n function appendIfNotNull(array, element) {\n if (element !== null) {\n array.push(element);\n }\n }\n\n function segmentVisible(series, fields, index) {\n var visible = fields.visible;\n if (defined(visible)) {\n return visible;\n }\n\n var pointVisibility = series.pointVisibility;\n if (pointVisibility) {\n return pointVisibility[index];\n }\n }\n\n function bindSegments(series) {\n var data = series.data;\n var points = [];\n var sum = 0;\n var count = 0;\n\n for (var idx = 0; idx < data.length; idx++) {\n var pointData = SeriesBinder.current.bindPoint(series, idx);\n var value = pointData.valueFields.value;\n\n if (isString(value)) {\n value = parseFloat(value);\n }\n\n if (isNumber(value)) {\n pointData.visible = segmentVisible(series, pointData.fields, idx) !== false;\n\n pointData.value = Math.abs(value);\n points.push(pointData);\n\n if (pointData.visible) {\n sum += pointData.value;\n }\n\n if (value !== 0) {\n count++;\n }\n } else {\n points.push(null);\n }\n }\n\n return {\n total: sum,\n points: points,\n count: count\n };\n }\n\n function equalsIgnoreCase(a, b) {\n if (a && b) {\n return a.toLowerCase() === b.toLowerCase();\n }\n\n return a === b;\n }\n\n function filterSeriesByType(series, types) {\n var result = [];\n\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\n return result;\n }\n\n function getDateField(field, row, intlService) {\n if (row === null) {\n return row;\n }\n\n var key = \"_date_\" + field;\n var value = row[key];\n\n if (!value) {\n value = parseDate(intlService, getter(field, true)(row));\n row[key] = value;\n }\n\n return value;\n }\n\n function isDateAxis(axisOptions, sampleCategory) {\n var type = axisOptions.type;\n var dateCategory = sampleCategory instanceof Date;\n\n return (!type && dateCategory) || equalsIgnoreCase(type, DATE);\n }\n\n function singleItemOrArray(array) {\n return array.length === 1 ? array[0] : array;\n }\n\n var AREA_REGEX = /area/i;\n\n function seriesMissingValues(series) {\n if (series.missingValues) {\n return series.missingValues;\n }\n\n return AREA_REGEX.test(series.type) || series.stack ? ZERO : INTERPOLATE;\n }\n\n function hasValue$1(series, item) {\n var fields = SeriesBinder.current.bindPoint(series, null, item);\n var valueFields = fields.valueFields;\n\n for (var field in valueFields) {\n if (dataviz.convertableToNumber(valueFields[field])) {\n return true;\n }\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\n var pointHasValue, outPoint;\n var idx = start;\n do {\n idx += dir;\n //aggregating and binding the item takes too much time for large number of categories\n //will assume that if the aggregation does not create value for a missing item for one it will not create for others\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\n if (pointHasValue) {\n return outPoint;\n }\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\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\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\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\n if (minPoint) {\n series._outOfRangeMinPoint = minPoint;\n }\n\n if (maxPoint) {\n series._outOfRangeMaxPoint = maxPoint;\n }\n }\n }\n\n var PlotAreaBase = ChartElement.extend({\n init: function(series, options, chartService) {\n ChartElement.fn.init.call(this, options);\n\n this.initFields(series, options);\n this.series = series;\n this.initSeries();\n this.charts = [];\n this.options.legend = this.options.legend || {};\n this.options.legend.items = [];\n this.axes = [];\n this.crosshairs = [];\n this.chartService = chartService;\n this.originalOptions = options;\n\n this.createPanes();\n this.render();\n this.createCrosshairs();\n },\n\n initFields: function() { },\n\n initSeries: function() {\n var series = this.series;\n\n for (var i = 0; i < series.length; i++) {\n series[i].index = i;\n }\n },\n\n createPanes: function() {\n var this$1$1 = this;\n\n var titleOptions = this.options.title || {};\n var paneDefaults = this.options.paneDefaults;\n var paneOptions = this.options.panes || [];\n var panesLength = Math.max(paneOptions.length, 1);\n var panes = [];\n\n var defaults = deepExtend({\n title: {\n color: titleOptions.color\n }\n }, paneDefaults);\n\n for (var i = 0; i < panesLength; i++) {\n var options = deepExtend({}, defaults, paneOptions[i]);\n if (isString(options.title)) {\n options.title = deepExtend({ text: options.title }, defaults.title);\n }\n\n var currentPane = new Pane(options);\n currentPane.paneIndex = i;\n\n panes.push(currentPane);\n this$1$1.append(currentPane);\n }\n\n this.panes = panes;\n },\n\n crosshairOptions: function(axis) {\n return axis.options.crosshair;\n },\n\n createCrosshairs: function(panes) {\n var this$1$1 = this;\n if (panes === void 0) { 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 var options = this$1$1.crosshairOptions(axis);\n if (options && options.visible) {\n var currentCrosshair = new Crosshair(this$1$1.chartService, axis, options);\n\n this$1$1.crosshairs.push(currentCrosshair);\n pane.content.append(currentCrosshair);\n }\n }\n }\n },\n\n removeCrosshairs: function(pane) {\n var crosshairs = this.crosshairs;\n var axes = pane.axes;\n\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\n hideCrosshairs: function() {\n var crosshairs = this.crosshairs;\n for (var idx = 0; idx < crosshairs.length; idx++) {\n crosshairs[idx].hide();\n }\n },\n\n findPane: function(name) {\n var panes = this.panes;\n var matchingPane;\n\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\n return matchingPane || panes[0];\n },\n\n findPointPane: function(point) {\n var panes = this.panes;\n var matchingPane;\n\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\n return matchingPane;\n },\n\n appendAxis: function(axis) {\n var pane = this.findPane(axis.options.pane);\n\n pane.appendAxis(axis);\n this.axes.push(axis);\n axis.plotArea = this;\n },\n\n removeAxis: function(axisToRemove) {\n var this$1$1 = this;\n\n var filteredAxes = [];\n\n for (var i = 0; i < this.axes.length; i++) {\n var axis = this$1$1.axes[i];\n if (axisToRemove !== axis) {\n filteredAxes.push(axis);\n } else {\n axis.destroy();\n }\n }\n\n this.axes = filteredAxes;\n },\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\n removeChart: function(chartToRemove) {\n var this$1$1 = this;\n\n var filteredCharts = [];\n\n for (var i = 0; i < this.charts.length; i++) {\n var chart = this$1$1.charts[i];\n if (chart !== chartToRemove) {\n filteredCharts.push(chart);\n } else {\n chart.destroy();\n }\n }\n\n this.charts = filteredCharts;\n },\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\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\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\n var defaults = currentSeries._defaults;\n var color = currentSeries.color;\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\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\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\n append(legend.items, data);\n },\n\n groupAxes: function(panes) {\n var xAxes = [];\n var yAxes = [];\n\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\n return { x: xAxes, y: yAxes, any: xAxes.concat(yAxes) };\n },\n\n groupSeriesByPane: function() {\n var this$1$1 = this;\n\n var series = this.series;\n var seriesByPane = {};\n\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n var pane = this$1$1.seriesPaneName(currentSeries);\n\n if (seriesByPane[pane]) {\n seriesByPane[pane].push(currentSeries);\n } else {\n seriesByPane[pane] = [ currentSeries ];\n }\n }\n\n return seriesByPane;\n },\n\n filterVisibleSeries: function(series) {\n var result = [];\n\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\n return result;\n },\n\n reflow: function(targetBox) {\n var options = this.options.plotArea;\n var panes = this.panes;\n var margin = getSpacing(options.margin);\n\n this.box = targetBox.clone().unpad(margin);\n this.reflowPanes();\n\n this.detachLabels();\n this.reflowAxes(panes);\n this.reflowCharts(panes);\n },\n\n redraw: function(panes) {\n var this$1$1 = this;\n\n var panesArray = [].concat(panes);\n this.initSeries();\n\n //prevents leak during partial redraws. the cached gradients observers retain reference to the destroyed elements.\n var root = this.getRoot();\n if (root) {\n root.cleanGradients();\n }\n\n for (var i = 0; i < panesArray.length; i++) {\n this$1$1.removeCrosshairs(panesArray[i]);\n panesArray[i].empty();\n }\n\n this.render(panesArray);\n this.detachLabels();\n this.reflowAxes(this.panes);\n this.reflowCharts(panesArray);\n\n this.createCrosshairs(panesArray);\n\n for (var i$1 = 0; i$1 < panesArray.length; i$1++) {\n panesArray[i$1].refresh();\n }\n },\n\n axisCrossingValues: function(axis, crossingAxes) {\n var options = axis.options;\n var crossingValues = [].concat(\n options.axisCrossingValues || options.axisCrossingValue\n );\n var valuesToAdd = crossingAxes.length - crossingValues.length;\n var defaultValue = crossingValues[0] || 0;\n\n for (var i = 0; i < valuesToAdd; i++) {\n crossingValues.push(defaultValue);\n }\n\n return crossingValues;\n },\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(\n targetSlot[X + targetEdge] - slot[X + slotEdge],\n targetSlot[Y + targetEdge] - slot[Y + slotEdge]\n );\n\n if (axis.pane !== targetAxis.pane) {\n axisBox.translate(0, axis.pane.box.y1 - targetAxis.pane.box.y1);\n }\n\n axis.reflow(axisBox);\n },\n\n alignAxes: function(xAxes, yAxes) {\n var this$1$1 = this;\n\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\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\n // Locate pane anchor, if any, and use its axisCrossingValues\n var anchor = paneAnchor(xAxes, pane) || xAnchor;\n var anchorCrossings = xAnchorCrossings;\n\n if (anchor !== xAnchor) {\n anchorCrossings = this$1$1.axisCrossingValues(anchor, yAxes);\n }\n\n this$1$1.alignAxisTo(axis, anchor, yAnchorCrossings[i], anchorCrossings[i]);\n\n if (axis.options._overlap) {\n continue;\n }\n\n if (round(axis.lineBox().x1) === round(anchor.lineBox().x1)) {\n // Push the axis to the left the previous y-axis so they don't overlap\n if (leftAnchors[paneId]) {\n axis.reflow(axis.box\n .alignTo(leftAnchors[paneId].box, LEFT)\n .translate(-axis.options.margin, 0)\n );\n }\n\n if (visible) {\n leftAnchors[paneId] = axis;\n }\n }\n\n if (round(axis.lineBox().x2) === round(anchor.lineBox().x2)) {\n // Flip the labels on the right if we're at the right end of the pane\n if (!axis._mirrored) {\n axis.options.labels.mirror = !axis.options.labels.mirror;\n axis._mirrored = true;\n }\n\n this$1$1.alignAxisTo(axis, anchor, yAnchorCrossings[i], anchorCrossings[i]);\n\n // Push the axis to the right the previous y-axis so they don't overlap\n if (rightAnchors[paneId]) {\n axis.reflow(axis.box\n .alignTo(rightAnchors[paneId].box, RIGHT)\n .translate(axis.options.margin, 0)\n );\n }\n\n if (visible) {\n rightAnchors[paneId] = axis;\n }\n }\n\n if (i !== 0 && yAnchor.pane === axis.pane) {\n axis.alignTo(yAnchor);\n axis.reflow(axis.box);\n }\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\n // Locate pane anchor and use its axisCrossingValues\n var anchor$1 = paneAnchor(yAxes, pane$1) || yAnchor;\n var anchorCrossings$1 = yAnchorCrossings;\n if (anchor$1 !== yAnchor) {\n anchorCrossings$1 = this$1$1.axisCrossingValues(anchor$1, xAxes);\n }\n\n this$1$1.alignAxisTo(axis$1, anchor$1, xAnchorCrossings[i$1], anchorCrossings$1[i$1]);\n\n if (axis$1.options._overlap) {\n continue;\n }\n\n if (round(axis$1.lineBox().y1) === round(anchor$1.lineBox().y1)) {\n // Flip the labels on top if we're at the top of the pane\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$1.alignAxisTo(axis$1, anchor$1, xAnchorCrossings[i$1], anchorCrossings$1[i$1]);\n\n // Push the axis above the previous x-axis so they don't overlap\n if (topAnchors[paneId$1]) {\n axis$1.reflow(axis$1.box\n .alignTo(topAnchors[paneId$1].box, TOP)\n .translate(0, -axis$1.options.margin)\n );\n }\n\n if (visible$1) {\n topAnchors[paneId$1] = axis$1;\n }\n }\n\n if (round(axis$1.lineBox().y2, datavizConstants.COORD_PRECISION) === round(anchor$1.lineBox().y2, datavizConstants.COORD_PRECISION)) {\n // Push the axis below the previous x-axis so they don't overlap\n if (bottomAnchors[paneId$1]) {\n axis$1.reflow(axis$1.box\n .alignTo(bottomAnchors[paneId$1].box, BOTTOM)\n .translate(0, axis$1.options.margin)\n );\n }\n\n if (visible$1) {\n bottomAnchors[paneId$1] = axis$1;\n }\n }\n\n if (i$1 !== 0) {\n axis$1.alignTo(xAnchor);\n axis$1.reflow(axis$1.box);\n }\n }\n },\n\n shrinkAxisWidth: function(panes) {\n var axes = this.groupAxes(panes).any;\n var axisBox = axisGroupBox(axes);\n var overflowX = 0;\n\n for (var i = 0; i < panes.length; i++) {\n var currentPane = panes[i];\n\n if (currentPane.axes.length > 0) {\n overflowX = Math.max(\n overflowX,\n axisBox.width() - currentPane.contentBox.width()\n );\n }\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\n if (!currentAxis.options.vertical) {\n currentAxis.reflow(currentAxis.box.shrink(overflowX, 0));\n }\n }\n }\n },\n\n shrinkAxisHeight: function(panes) {\n var shrinked;\n\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\n if (overflowY !== 0) {\n for (var j = 0; j < axes.length; j++) {\n var currentAxis = axes[j];\n\n if (currentAxis.options.vertical) {\n currentAxis.reflow(\n currentAxis.box.shrink(0, overflowY)\n );\n }\n }\n shrinked = true;\n }\n }\n\n return shrinked;\n },\n\n fitAxes: function(panes) {\n var axes = this.groupAxes(panes).any;\n var offsetX = 0;\n\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\n if (paneAxes.length > 0) {\n var axisBox = axisGroupBox(paneAxes);\n // OffsetY is calculated and applied per pane\n var offsetY = Math.max(paneBox.y1 - axisBox.y1, paneBox.y2 - axisBox.y2);\n\n // OffsetX is calculated and applied globally\n offsetX = Math.max(offsetX, paneBox.x1 - axisBox.x1);\n\n for (var j = 0; j < paneAxes.length; j++) {\n var currentAxis = paneAxes[j];\n\n currentAxis.reflow(\n currentAxis.box.translate(0, offsetY)\n );\n }\n }\n }\n\n for (var i$1 = 0; i$1 < axes.length; i$1++) {\n var currentAxis$1 = axes[i$1];\n\n currentAxis$1.reflow(\n currentAxis$1.box.translate(offsetX, 0)\n );\n }\n },\n\n reflowAxes: function(panes) {\n var this$1$1 = this;\n\n var axes = this.groupAxes(panes);\n\n for (var i = 0; i < panes.length; i++) {\n this$1$1.reflowPaneAxes(panes[i]);\n }\n\n if (axes.x.length > 0 && axes.y.length > 0) {\n this.alignAxes(axes.x, axes.y);\n this.shrinkAxisWidth(panes);\n\n this.autoRotateAxisLabels(axes);\n\n this.alignAxes(axes.x, axes.y);\n if (this.shrinkAxisWidth(panes)) {\n this.alignAxes(axes.x, axes.y);\n }\n\n this.shrinkAxisHeight(panes);\n this.alignAxes(axes.x, axes.y);\n\n if (this.shrinkAxisHeight(panes)) {\n this.alignAxes(axes.x, axes.y);\n }\n\n this.fitAxes(panes);\n }\n },\n\n autoRotateAxisLabels: function(groupedAxes) {\n var this$1$1 = this;\n\n var ref = this;\n var panes = ref.panes;\n var axes = allPaneAxes(panes);\n var rotated;\n\n for (var idx = 0; idx < axes.length; idx++) {\n var axis = axes[idx];\n if (axis.autoRotateLabels()) {\n rotated = true;\n }\n }\n\n if (rotated) {\n for (var idx$1 = 0; idx$1 < panes.length; idx$1++) {\n this$1$1.reflowPaneAxes(panes[idx$1]);\n }\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\n reflowPaneAxes: function(pane) {\n var axes = pane.axes;\n var length = axes.length;\n\n if (length > 0) {\n for (var i = 0; i < length; i++) {\n axes[i].reflow(pane.contentBox);\n }\n }\n },\n\n reflowCharts: function(panes) {\n var charts = this.charts;\n var count = charts.length;\n var box = this.box;\n\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\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\n for (var i = 0; i < panesLength; i++) {\n var currentPane = panes[i];\n var height = currentPane.options.height;\n\n currentPane.options.width = box.width();\n\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\n currentPane.reflow(box.clone());\n\n remainingHeight -= currentPane.options.height;\n }\n }\n\n for (var i$1 = 0; i$1 < panesLength; i$1++) {\n var currentPane$1 = panes[i$1];\n\n if (!currentPane$1.options.height) {\n currentPane$1.options.height = remainingHeight / autoHeightPanes;\n }\n }\n\n for (var i$2 = 0; i$2 < panesLength; i$2++) {\n var currentPane$2 = panes[i$2];\n var paneBox = box\n .clone()\n .move(box.x1, top);\n\n currentPane$2.reflow(paneBox);\n\n remainingPanes--;\n top += currentPane$2.options.height;\n }\n },\n\n backgroundBox: function() {\n var axes = this.axes;\n var axesCount = axes.length;\n var box;\n\n for (var i = 0; i < axesCount; i++) {\n var axisA = axes[i];\n\n for (var j = 0; j < axesCount; j++) {\n var axisB = axes[j];\n\n if (axisA.options.vertical !== axisB.options.vertical) {\n var lineBox = axisA.lineBox().clone().wrap(axisB.lineBox());\n\n if (!box) {\n box = lineBox;\n } else {\n box = box.wrap(lineBox);\n }\n }\n }\n }\n\n return box || this.box;\n },\n\n chartsBoxes: function() {\n var panes = this.panes;\n var boxes = [];\n\n for (var idx = 0; idx < panes.length; idx++) {\n boxes.push(panes[idx].chartsBox());\n }\n\n return boxes;\n },\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\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\n createVisual: function() {\n ChartElement.fn.createVisual.call(this);\n\n var options = this.options.plotArea;\n var opacity = options.opacity;\n var background = options.background;\n var border = options.border; if (border === void 0) { border = {}; }\n if (isTransparent(background)) {\n background = WHITE;\n opacity = 0;\n }\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\n this.addBackgroundPaths(bg);\n\n this.appendVisual(bg);\n },\n\n pointsByCategoryIndex: function(categoryIndex) {\n var charts = this.charts;\n var result = [];\n\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\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\n return result;\n },\n\n pointsBySeriesIndex: function(seriesIndex) {\n return this.filterPoints(function(point) {\n return point.series.index === seriesIndex;\n });\n },\n\n pointsBySeriesName: function(name) {\n return this.filterPoints(function(point) {\n return point.series.name === name;\n });\n },\n\n filterPoints: function(callback) {\n var charts = this.charts;\n var result = [];\n\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\n return result;\n },\n\n findPoint: function(callback) {\n var charts = this.charts;\n\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\n paneByPoint: function(point) {\n var panes = this.panes;\n\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\n detachLabels: function() {\n var axes = this.groupAxes(this.panes);\n var xAxes = axes.x;\n var yAxes = axes.y;\n\n this.detachAxisGroupLabels(yAxes, xAxes);\n this.detachAxisGroupLabels(xAxes, yAxes);\n },\n\n detachAxisGroupLabels: function(axes, crossingAxes) {\n var this$1$1 = this;\n\n var labelAxisCount = 0;\n\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$1.createLabelAxis(axis, axisIndex, anchor);\n\n if (labelAxis) {\n labelAxisCount++;\n\n var pos = pane.axes.indexOf(axis) + labelAxisCount;\n pane.appendAxisAt(labelAxis, pos);\n }\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\n if (onAxis || visible === false) {\n return null;\n }\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\n if (crossingValue - edge === 0) {\n return null;\n }\n\n anchorCrossings.splice(axisIndex + 1, 0, edge);\n anchor.options.axisCrossingValues = anchorCrossings;\n\n var labelAxis = axis.clone();\n axis.clear();\n\n labelAxis.options.name = undefined;\n labelAxis.options.line.visible = false;\n\n labelAxis.options.crosshair = undefined;\n labelAxis.options.notes = undefined;\n labelAxis.options.plotBands = undefined;\n\n return labelAxis;\n }\n });\n\n function isSingleAxis(axis) {\n return !axis.pane.axes.some(function (a) { return a.options.vertical === axis.options.vertical && a !== axis && a.options.visible !== false; }\n );\n }\n\n function axisGroupBox(axes) {\n var length = axes.length;\n var box;\n\n for (var i = 0; i < length; i++) {\n var axis = axes[i];\n var visible = axis.options.visible !== false;\n if (visible || isSingleAxis(axis)) {\n var axisBox = visible ? axis.contentBox() : axis.lineBox();\n\n if (!box) {\n box = axisBox.clone();\n } else {\n box.wrap(axisBox);\n }\n }\n }\n\n return box || new Box();\n }\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\n function isTransparent(color) {\n return color === \"\" || color === null || color === \"none\" || color === \"transparent\" || !defined(color);\n }\n\n var allPaneAxes = function (panes) { return panes.reduce(function (acc, pane) { return acc.concat(pane.axes); }, []); };\n\n setDefaultOptions(PlotAreaBase, {\n series: [],\n plotArea: {\n margin: {}\n },\n background: \"\",\n border: {\n color: BLACK,\n width: 0\n },\n paneDefaults: {\n title: {}\n },\n legend: {\n inactiveItems: {\n labels: {\n color: \"#919191\"\n },\n markers: {\n color: \"#919191\"\n }\n }\n }\n });\n\n var PlotAreaEventsMixin = {\n hover: function(chart, e) {\n this._dispatchEvent(chart, e, PLOT_AREA_HOVER);\n },\n\n click: function(chart, e) {\n this._dispatchEvent(chart, e, PLOT_AREA_CLICK);\n }\n };\n\n var SeriesAggregator = Class.extend({\n init: function(series, binder, defaultAggregates) {\n\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\n this._series = series;\n this._binder = binder;\n\n for (var i = 0; i < canonicalFields.length; i++) {\n var field = canonicalFields[i];\n var fieldAggregate = (void 0);\n\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\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\n aggregatePoints: function(srcPoints, group) {\n var this$1$1 = this;\n\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\n if (firstDataItem && !isNumber(firstDataItem) && !isArray(firstDataItem)) {\n var fn = function() {};\n fn.prototype = firstDataItem;\n result = new fn();\n }\n\n for (var i = 0; i < seriesFields.length; i++) {\n var field = seriesFields[i];\n var srcValues = this$1$1._bindField(data.values, field.canonicalName);\n var value = field.transform(srcValues, series, data.dataItems, group);\n\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\n return result;\n },\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\n for (var i = 0; i < points.length; i++) {\n var pointIx = points[i];\n\n values.push(binder.bindPoint(series, pointIx));\n dataItems.push(series.data[pointIx]);\n }\n\n return {\n values: values,\n dataItems: dataItems\n };\n },\n\n _bindField: function(data, field) {\n var values = [];\n var count = data.length;\n\n for (var i = 0; i < count; i++) {\n var item = data[i];\n var valueFields = item.valueFields;\n var value = (void 0);\n\n if (defined(valueFields[field])) {\n value = valueFields[field];\n } else {\n value = item.fields[field];\n }\n\n values.push(value);\n }\n\n return values;\n }\n });\n\n function setValue(fieldName, target, value) {\n var parentObj = target;\n var field = fieldName;\n\n if (fieldName.indexOf(\".\") > -1) {\n var parts = fieldName.split(\".\");\n\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\n parentObj[field] = value;\n }\n\n var DefaultAggregates = Class.extend({\n init: function() {\n\n this._defaults = {};\n },\n\n register: function(seriesTypes, aggregates) {\n var this$1$1 = this;\n\n for (var i = 0; i < seriesTypes.length; i++) {\n this$1$1._defaults[seriesTypes[i]] = aggregates;\n }\n },\n\n query: function(seriesType) {\n return this._defaults[seriesType];\n }\n });\n\n DefaultAggregates.current = new DefaultAggregates();\n\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\n if (fromOptions.visible) {\n this.labelFrom = this._createLabel(fromOptions);\n this.append(this.labelFrom);\n }\n\n if (toOptions.visible) {\n this.labelTo = this._createLabel(toOptions);\n this.append(this.labelTo);\n }\n },\n\n _createLabel: function(options) {\n var labelTemplate = getTemplate(options);\n var pointData = this.pointData();\n\n var labelText;\n\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else {\n labelText = this.formatValue(options.format);\n }\n\n return new BarLabel(labelText,\n deepExtend({\n vertical: this.options.vertical\n },\n options\n ), pointData);\n },\n\n reflow: function(targetBox) {\n this.render();\n\n var ref = this;\n var labelFrom = ref.labelFrom;\n var labelTo = ref.labelTo;\n var value = ref.value;\n\n this.box = targetBox;\n\n if (labelFrom) {\n labelFrom.options.aboveAxis = value.from > value.to;\n labelFrom.reflow(targetBox);\n }\n\n if (labelTo) {\n labelTo.options.aboveAxis = value.to > value.from;\n labelTo.reflow(targetBox);\n }\n\n if (this.note) {\n this.note.reflow(targetBox);\n }\n }\n });\n\n RangeBar.prototype.defaults = deepExtend({}, RangeBar.prototype.defaults, {\n labels: {\n format: \"{0} - {1}\"\n },\n tooltip: {\n format: \"{1}\"\n }\n });\n\n var RangeBarChart = BarChart.extend({\n pointType: function() {\n return RangeBar;\n },\n\n pointValue: function(data) {\n return data.valueFields;\n },\n\n formatPointValue: function(point, format) {\n if (point.value.from === null && point.value.to === null) {\n return \"\";\n }\n\n return this.chartService.format.auto(format, point.value.from, point.value.to);\n },\n\n plotRange: function(point) {\n if (!point) {\n return 0;\n }\n\n return [ point.value.from, 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\n if (value !== null && isNumber(from) && isNumber(to)) {\n axisRange = this.valueAxisRanges[axisName] = axisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n axisRange.min = Math.min(axisRange.min, from);\n axisRange.max = Math.max(axisRange.max, from);\n\n axisRange.min = Math.min(axisRange.min, to);\n axisRange.max = Math.max(axisRange.max, to);\n }\n },\n\n aboveAxis: function(point) {\n var value = point.value;\n return value.from < value.to;\n }\n });\n\n RangeBarChart.prototype.plotLimits = CategoricalChart.prototype.plotLimits;\n\n var RangeLinePoint = LinePoint.extend({\n aliasFor: function() {\n return this.parent;\n }\n });\n\n var AUTO = 'auto';\n var DEFAULT_FROM_FORMAT = '{0}';\n var DEFAULT_TO_FORMAT = '{1}';\n\n var RangeAreaPoint = ChartElement.extend({\n init: function(value, options) {\n ChartElement.fn.init.call(this);\n\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\n render: function() {\n if (this._rendered) {\n return;\n }\n\n this._rendered = true;\n\n var ref = this.options;\n var markers = ref.markers;\n var labels = ref.labels;\n var value = this.value;\n\n var fromPoint = this.fromPoint = new RangeLinePoint(value, deepExtend({}, this.options, {\n labels: labels.from,\n markers: markers.from\n }));\n\n var toPoint = this.toPoint = new RangeLinePoint(value, deepExtend({}, this.options, {\n labels: labels.to,\n markers: markers.to\n }));\n\n this.copyFields(fromPoint);\n this.copyFields(toPoint);\n\n this.append(fromPoint);\n this.append(toPoint);\n },\n\n reflow: function(targetBox) {\n this.render();\n\n var fromBox = targetBox.from;\n var toBox = targetBox.to;\n\n this.positionLabels(fromBox, toBox);\n\n this.fromPoint.reflow(fromBox);\n this.toPoint.reflow(toBox);\n\n this.box = this.fromPoint.markerBox().clone().wrap(this.toPoint.markerBox());\n },\n\n createHighlight: function() {\n var group = new Group();\n group.append(this.fromPoint.createHighlight());\n group.append(this.toPoint.createHighlight());\n\n return group;\n },\n\n highlightVisual: function() {\n return this.visual;\n },\n\n highlightVisualArgs: function() {\n return {\n options: this.options,\n from: this.fromPoint.highlightVisualArgs(),\n to: this.toPoint.highlightVisualArgs()\n };\n },\n\n tooltipAnchor: function() {\n var clipBox = this.owner.pane.clipBox();\n var showTooltip = !clipBox || clipBox.overlaps(this.box);\n\n if (showTooltip) {\n var box = this.box;\n var center = box.center();\n var horizontalAlign = LEFT;\n var x, y, verticalAlign;\n\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\n return {\n point: new Point(x, y),\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n }\n },\n\n formatValue: function(format) {\n return this.owner.formatPointValue(this, format);\n },\n\n overlapsBox: function(box) {\n return this.box.overlaps(box);\n },\n\n unclipElements: function() {\n this.fromPoint.unclipElements();\n this.toPoint.unclipElements();\n },\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, {\n format: DEFAULT_FROM_FORMAT\n });\n }\n\n if (!labels.to || !labels.to.format) {\n labels.to = $.extend({}, labels.to, {\n format: DEFAULT_TO_FORMAT\n });\n }\n }\n },\n\n positionLabels: function(fromBox, toBox) {\n var ref = this.options;\n var labels = ref.labels;\n var vertical = ref.vertical;\n\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\n if (!labels.from || !labels.from.position) {\n this.fromPoint.options.labels.position = fromLabelPosition;\n }\n\n if (!labels.to || !labels.to.position) {\n this.toPoint.options.labels.position = toLabelPosition;\n }\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\n deepExtend(RangeAreaPoint.prototype, PointEventsMixin);\n deepExtend(RangeAreaPoint.prototype, NoteMixin);\n\n RangeAreaPoint.prototype.defaults = {\n markers: {\n visible: false,\n background: WHITE,\n size: LINE_MARKER_SIZE,\n type: CIRCLE,\n border: {\n width: 2\n },\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: {\n label: {}\n },\n highlight: {\n markers: {\n border: {\n color: WHITE,\n width: 2\n }\n },\n zIndex: datavizConstants.HIGHLIGHT_ZINDEX\n },\n tooltip: {\n format: '{0} - {1}'\n }\n };\n\n var RangeAreaSegment = AreaSegment.extend({\n createStrokeSegments: function() {\n return this.segmentsFromPoints(this.toGeometryPoints(this.toPoints()));\n },\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\n return fromSegments;\n },\n\n createStroke: function(style) {\n var toPath = new Path(style);\n var fromPath = new Path(style);\n\n toPath.segments.push.apply(toPath.segments, this.strokeSegments());\n fromPath.segments.push.apply(fromPath.segments, this.stackSegments());\n\n this.visual.append(toPath);\n this.visual.append(fromPath);\n },\n\n hasStackSegment: function() {\n return true;\n },\n\n fromPoints: function() {\n return this.linePoints.map(function (point) { return point.fromPoint; });\n },\n\n toPoints: function() {\n return this.linePoints.map(function (point) { return point.toPoint; });\n }\n });\n\n var SplineRangeAreaSegment = RangeAreaSegment.extend({\n createStrokeSegments: function() {\n return this.createCurveSegments(this.toPoints());\n },\n\n stackSegments: function() {\n var fromSegments = this.fromSegments;\n if (!this.fromSegments) {\n fromSegments = this.fromSegments = this.createCurveSegments(this.fromPoints().reverse());\n }\n\n return fromSegments;\n },\n\n createCurveSegments: function(points) {\n var curveProcessor = new CurveProcessor();\n\n return curveProcessor.process(this.toGeometryPoints(points));\n }\n });\n\n var StepRangeAreaSegment = RangeAreaSegment.extend({\n createStrokeSegments: function() {\n return this.segmentsFromPoints(this.calculateStepPoints(this.toPoints()));\n },\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\n return fromSegments;\n }\n });\n\n deepExtend(StepRangeAreaSegment.prototype, StepLineMixin);\n\n var RangeAreaChart = CategoricalChart.extend({\n render: function() {\n CategoricalChart.fn.render.call(this);\n\n this.renderSegments();\n },\n\n pointType: function() {\n return RangeAreaPoint;\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 value = data.valueFields;\n\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\n var pointOptions = this.pointOptions(series, seriesIx);\n pointOptions = this.evalPointOptions(\n pointOptions, value, category, categoryIx, series, seriesIx\n );\n\n var color = data.fields.color || series.color;\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n\n var point = new RangeAreaPoint(value, pointOptions);\n point.color = color;\n\n this.append(point);\n\n return point;\n },\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\n return new segmentType(linePoints, currentSeries, seriesIx);\n },\n\n plotRange: function(point, startValue) {\n if (!point) {\n return [ startValue, startValue ];\n }\n\n return [ point.value.from, 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\n pointSlot: function(categorySlot, valueSlot) {\n var from = valueSlot.from;\n var to = valueSlot.to;\n var fromSlot, toSlot;\n\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\n return {\n from: fromSlot,\n to: toSlot\n };\n },\n\n addValue: function(data, fields) {\n var valueFields = data.valueFields;\n if (!isNumber(valueFields.from)) {\n valueFields.from = valueFields.to;\n }\n\n if (!isNumber(valueFields.to)) {\n valueFields.to = valueFields.from;\n }\n\n CategoricalChart.fn.addValue.call(this, data, fields);\n },\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] || { min: MAX_VALUE, max: MIN_VALUE };\n var from = value.from;\n var to = value.to;\n\n axisRange.min = Math.min(axisRange.min, from, to);\n axisRange.max = Math.max(axisRange.max, from, to);\n }\n },\n\n formatPointValue: function(point, format) {\n var value = point.value;\n\n return this.chartService.format.auto(format, value.from, value.to);\n },\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\n return result.concat(this._segments);\n }\n });\n\n deepExtend(RangeAreaChart.prototype, LineChartMixin, ClipAnimationMixin);\n\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\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\n oSlot.x1 = cSlot.x1 = lhSlot.x1 = box.x1;\n oSlot.x2 = cSlot.x2 = lhSlot.x2 = box.x2;\n\n var mid = lhSlot.center().x;\n\n oPoints.push([ oSlot.x1, oSlot.y1 ]);\n oPoints.push([ mid, oSlot.y1 ]);\n cPoints.push([ mid, cSlot.y1 ]);\n cPoints.push([ cSlot.x2, cSlot.y1 ]);\n lhPoints.push([ mid, lhSlot.y1 ]);\n lhPoints.push([ mid, lhSlot.y2 ]);\n\n this.lines = [\n oPoints, cPoints, lhPoints\n ];\n\n this.box = lhSlot.clone().wrap(oSlot.clone().wrap(cSlot));\n\n this.reflowNote();\n },\n\n createBody: function() {}\n });\n\n var OHLCChart = CandlestickChart.extend({\n pointType: function() {\n return OHLCPoint;\n }\n });\n\n var WaterfallSegment = ChartElement.extend({\n init: function(from, to, series) {\n ChartElement.fn.init.call(this);\n\n this.from = from;\n this.to = to;\n this.series = series;\n },\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\n if (from.isVertical) {\n var y = from.aboveAxis ? fromBox.y1 : fromBox.y2;\n points.push(\n [ fromBox.x1, y ],\n [ toBox.x2, y ]\n );\n } else {\n var x = from.aboveAxis ? fromBox.x2 : fromBox.x1;\n points.push(\n [ x, fromBox.y1 ],\n [ x, toBox.y2 ]\n );\n }\n\n return points;\n },\n\n createVisual: function() {\n ChartElement.fn.createVisual.call(this);\n\n var line = this.series.line || {};\n\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\n alignPathToPixel(path);\n this.visual.append(path);\n }\n });\n\n setDefaultOptions(WaterfallSegment, {\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n }\n });\n\n var WaterfallChart = BarChart.extend({\n render: function() {\n BarChart.fn.render.call(this);\n this.createSegments();\n },\n\n traverseDataPoints: function(callback) {\n var this$1$1 = this;\n\n var series = this.options.series;\n var totalCategories = categoriesCount(series);\n var isVertical = !this.options.invertAxes;\n\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var total = 0;\n var runningTotal = 0;\n\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\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\n callback(data, {\n category: this$1$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\n updateRange: function(value, fields) {\n BarChart.fn.updateRange.call(this, { value: fields.to }, fields);\n },\n\n aboveAxis: function(point) {\n return point.value >= 0;\n },\n\n plotRange: function(point) {\n return [ point.from, point.to ];\n },\n\n createSegments: function() {\n var this$1$1 = this;\n\n var series = this.options.series;\n var seriesPoints = this.seriesPoints;\n var segments = this.segments = [];\n\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var points = seriesPoints[seriesIx];\n\n if (points) {\n var prevPoint = (void 0);\n for (var pointIx = 0; pointIx < points.length; pointIx++) {\n var point = points[pointIx];\n\n if (point && prevPoint) {\n var segment = new WaterfallSegment(prevPoint, point, currentSeries);\n segments.push(segment);\n this$1$1.append(segment);\n }\n\n prevPoint = point;\n }\n }\n }\n }\n });\n\n var AREA_SERIES = [ AREA, VERTICAL_AREA, RANGE_AREA, VERTICAL_RANGE_AREA ];\n var OUT_OF_RANGE_SERIES = [ LINE, VERTICAL_LINE ].concat(AREA_SERIES);\n\n var CategoricalPlotArea = PlotAreaBase.extend({\n initFields: function(series) {\n var this$1$1 = this;\n\n this.namedCategoryAxes = {};\n this.namedValueAxes = {};\n this.valueAxisRangeTracker = new AxisGroupRangeTracker();\n\n if (series.length > 0) {\n this.invertAxes = inArray(\n series[0].type, [ BAR, BULLET, VERTICAL_LINE, VERTICAL_AREA, VERTICAL_RANGE_AREA,\n RANGE_BAR, HORIZONTAL_WATERFALL, VERTICAL_BOX_PLOT ]\n );\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$1.stack100 = true;\n break;\n }\n }\n }\n\n },\n\n render: function(panes) {\n if (panes === void 0) { 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\n removeAxis: function(axis) {\n var axisName = axis.options.name;\n\n PlotAreaBase.fn.removeAxis.call(this, axis);\n\n if (axis instanceof CategoryAxis) {\n delete this.namedCategoryAxes[axisName];\n } else {\n this.valueAxisRangeTracker.reset(axisName);\n delete this.namedValueAxes[axisName];\n }\n\n if (axis === this.categoryAxis) {\n delete this.categoryAxis;\n }\n\n if (axis === this.valueAxis) {\n delete this.valueAxis;\n }\n },\n\n createCharts: function(panes) {\n var this$1$1 = this;\n\n var seriesByPane = this.groupSeriesByPane();\n\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$1.addToLegend(paneSeries);\n\n var visibleSeries = this$1$1.filterVisibleSeries(paneSeries);\n if (!visibleSeries) {\n continue;\n }\n\n var groups = this$1$1.groupSeriesByCategoryAxis(visibleSeries);\n for (var groupIx = 0; groupIx < groups.length; groupIx++) {\n this$1$1.createChartGroup(groups[groupIx], pane);\n }\n }\n },\n\n createChartGroup: function(series, pane) {\n this.createAreaChart(\n filterSeriesByType(series, [ AREA, VERTICAL_AREA ]), pane\n );\n\n this.createRangeAreaChart(\n filterSeriesByType(series, [ RANGE_AREA, VERTICAL_RANGE_AREA ]), pane\n );\n\n this.createBarChart(\n filterSeriesByType(series, [ COLUMN, BAR ]), pane\n );\n\n this.createRangeBarChart(\n filterSeriesByType(series, [ RANGE_COLUMN, RANGE_BAR ]), pane\n );\n\n this.createBulletChart(\n filterSeriesByType(series, [ BULLET, VERTICAL_BULLET ]), pane\n );\n\n this.createCandlestickChart(\n filterSeriesByType(series, CANDLESTICK), pane\n );\n\n this.createBoxPlotChart(\n filterSeriesByType(series, [ BOX_PLOT, VERTICAL_BOX_PLOT ]), pane\n );\n\n this.createOHLCChart(\n filterSeriesByType(series, OHLC), pane\n );\n\n this.createWaterfallChart(\n filterSeriesByType(series, [ WATERFALL, HORIZONTAL_WATERFALL ]), pane\n );\n\n this.createLineChart(\n filterSeriesByType(series, [ LINE, VERTICAL_LINE ]), pane\n );\n },\n\n aggregateCategories: function(panes) {\n var this$1$1 = this;\n\n var series = this.srcSeries || this.series;\n var processedSeries = [];\n this._currentPointsCache = {};\n this._seriesPointsCache = this._seriesPointsCache || {};\n\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n var categoryAxis = this$1$1.seriesCategoryAxis(currentSeries);\n var axisPane = this$1$1.findPane(categoryAxis.options.pane);\n var dateAxis = equalsIgnoreCase(categoryAxis.options.type, DATE);\n\n if ((dateAxis || currentSeries.categoryField) && inArray(axisPane, panes)) {\n currentSeries = this$1$1.aggregateSeries(currentSeries, categoryAxis);\n } else {\n currentSeries = this$1$1.filterSeries(currentSeries, categoryAxis);\n }\n\n processedSeries.push(currentSeries);\n }\n\n this._seriesPointsCache = this._currentPointsCache;\n this._currentPointsCache = null;\n\n this.srcSeries = series;\n this.series = processedSeries;\n },\n\n filterSeries: function(series, categoryAxis) {\n var dataLength = (series.data || {}).length;\n categoryAxis._seriesMax = Math.max(categoryAxis._seriesMax || 0, dataLength);\n\n if (!(isNumber(categoryAxis.options.min) || isNumber(categoryAxis.options.max))) {\n return series;\n }\n\n var range = categoryAxis.currentRangeIndices();\n var outOfRangePoints = inArray(series.type, OUT_OF_RANGE_SERIES);\n var currentSeries = deepExtend({}, series);\n\n currentSeries.data = (currentSeries.data || []).slice(range.min, range.max + 1);\n\n if (outOfRangePoints) {\n createOutOfRangePoints(currentSeries, range, dataLength, function (idx) { return ({\n item: series.data[idx],\n category: categoryAxis.categoryAt(idx, true),\n categoryIx: idx - range.min\n }); }, function (idx) { return defined(series.data[idx]); });\n }\n\n return currentSeries;\n },\n\n clearSeriesPointsCache: function() {\n this._seriesPointsCache = {};\n },\n\n seriesSourcePoints: function(series, categoryAxis) {\n var this$1$1 = this;\n\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\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();//fixes major performance issue caused by searching for the index for large data\n }\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$1.chartService.intl);\n } else {\n category = srcCategories[idx];\n }\n\n if (defined(category) && category !== null) {\n var categoryIx = categoryAxis.totalIndex(category);\n result[categoryIx] = result[categoryIx] || { items: [], category: category };\n result[categoryIx].items.push(idx);\n }\n }\n\n this._currentPointsCache[key] = result;\n\n return result;\n },\n\n aggregateSeries: function(series, categoryAxis) {\n var srcData = series.data;\n if (!srcData.length) {\n return series;\n }\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\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\n point.categoryIx = categoryIdx;\n\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\n return point;\n };\n\n for (var idx = range.min; idx <= range.max; idx++) {\n var point = categoryItem(idx);\n data[point.categoryIx] = point.item;\n\n if (point.items && point.items.length) {\n dataItems[point.categoryIx] = point.item;\n }\n }\n\n if (inArray(result.type, OUT_OF_RANGE_SERIES)) {\n createOutOfRangePoints(result, range, categoryAxis.totalCount(), categoryItem, function (idx) { return srcPoints[idx]; });\n }\n\n categoryAxis.options.dataItems = dataItems;\n\n return result;\n },\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\n if (categoriesToAdd > 0) {//consider setting an option to axis instead of adding fake categories\n categories = categoryAxis.options.categories = categoryAxis.options.categories.slice(0);\n while (categoriesToAdd--) {\n categories.push(\"\");\n }\n }\n\n this.valueAxisRangeTracker.update(chart.valueAxisRanges);\n\n PlotAreaBase.fn.appendChart.call(this, chart, pane);\n },\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) { return a.name === axisName; })[0];\n var panes = options.panes || [ {} ];\n var defaultPaneName = (panes[0] || {}).name || \"default\";\n var paneName = (axis || {}).pane || defaultPaneName;\n\n return paneName;\n },\n\n seriesCategoryAxis: function(series) {\n var axisName = series.categoryAxis;\n var axis = axisName ? this.namedCategoryAxes[axisName] : this.categoryAxis;\n\n if (!axis) {\n throw new Error(\"Unable to locate category axis with name \" + axisName);\n }\n\n return axis;\n },\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\n return {\n isStacked: stack,\n isStacked100: isStacked100,\n clip: clip\n };\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\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\n groups.push(axisSeries);\n }\n\n return groups;\n },\n\n createBarChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\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\n this.appendChart(barChart, pane);\n },\n\n createRangeBarChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\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\n this.appendChart(rangeColumnChart, pane);\n },\n\n createBulletChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\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\n this.appendChart(bulletChart, pane);\n },\n\n createLineChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\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\n this.appendChart(lineChart, pane);\n },\n\n createAreaChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\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\n this.appendChart(areaChart, pane);\n },\n\n createRangeAreaChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n var rangeAreaChart = new RangeAreaChart(this, {\n invertAxes: this.invertAxes,\n series: series,\n clip: pane.options.clip\n });\n\n this.appendChart(rangeAreaChart, pane);\n },\n\n createOHLCChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\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\n this.appendChart(chart, pane);\n },\n\n createCandlestickChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\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\n this.appendChart(chart, pane);\n },\n\n createBoxPlotChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\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\n this.appendChart(chart, pane);\n },\n\n createWaterfallChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\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\n this.appendChart(waterfallChart, pane);\n },\n\n axisRequiresRounding: function(categoryAxisName, categoryAxisIndex) {\n var this$1$1 = this;\n\n var centeredSeries = filterSeriesByType(this.series, EQUALLY_SPACED_SERIES);\n\n for (var seriesIx = 0; seriesIx < this.series.length; seriesIx++) {\n var currentSeries = this$1$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\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\n aggregatedAxis: function(categoryAxisName, categoryAxisIndex) {\n var series = this.series;\n\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\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\n createCategoryAxes: function(panes) {\n var this$1$1 = this;\n\n var invertAxes = this.invertAxes;\n var definitions = [].concat(this.options.categoryAxis);\n var axes = [];\n\n for (var i = 0; i < definitions.length; i++) {\n var axisOptions = definitions[i];\n var axisPane = this$1$1.findPane(axisOptions.pane);\n\n if (inArray(axisPane, panes)) {\n var name = axisOptions.name;\n var categories = axisOptions.categories; if (categories === void 0) { categories = []; }\n axisOptions = deepExtend({\n vertical: invertAxes,\n reverse: !invertAxes && this$1$1.chartService.rtl,\n axisCrossingValue: invertAxes ? MAX_VALUE : 0\n }, axisOptions);\n\n if (!defined(axisOptions.justified)) {\n axisOptions.justified = this$1$1.isJustified();\n }\n\n if (this$1$1.axisRequiresRounding(name, i)) {\n axisOptions.justified = false;\n }\n\n var categoryAxis = (void 0);\n\n if (isDateAxis(axisOptions, categories[0])) {\n categoryAxis = new dataviz.DateCategoryAxis(axisOptions, this$1$1.chartService);\n } else {\n categoryAxis = new CategoryAxis(axisOptions, this$1$1.chartService);\n }\n\n definitions[i].categories = categoryAxis.options.srcCategories;\n\n if (name) {\n if (this$1$1.namedCategoryAxes[name]) {\n throw new Error((\"Category axis with name \" + name + \" is already defined\"));\n }\n this$1$1.namedCategoryAxes[name] = categoryAxis;\n }\n\n categoryAxis.axisIndex = i;\n axes.push(categoryAxis);\n this$1$1.appendAxis(categoryAxis);\n }\n }\n\n var primaryAxis = this.categoryAxis || axes[0];\n this.categoryAxis = primaryAxis;\n\n if (invertAxes) {\n this.axisY = primaryAxis;\n } else {\n this.axisX = primaryAxis;\n }\n },\n\n isJustified: function() {\n var series = this.series;\n\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\n return true;\n },\n\n createValueAxes: function(panes) {\n var this$1$1 = this;\n\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 = { vertical: !invertAxes, reverse: invertAxes && this.chartService.rtl };\n var axes = [];\n\n if (this.stack100) {\n baseOptions.roundToMajorUnit = false;\n baseOptions.labels = { format: \"P0\" };\n }\n\n for (var i = 0; i < definitions.length; i++) {\n var axisOptions = definitions[i];\n var axisPane = this$1$1.findPane(axisOptions.pane);\n\n if (inArray(axisPane, panes)) {\n var name = axisOptions.name;\n var defaultAxisRange = equalsIgnoreCase(axisOptions.type, LOGARITHMIC) ? { min: 0.1, max: 1 } : { min: 0, max: 1 };\n var range = tracker.query(name) || defaultRange || defaultAxisRange;\n\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\n var axisType = (void 0);\n if (equalsIgnoreCase(axisOptions.type, LOGARITHMIC)) {\n axisType = dataviz.LogarithmicAxis;\n } else {\n axisType = dataviz.NumericAxis;\n }\n\n var valueAxis = new axisType(range.min, range.max,\n deepExtend({}, baseOptions, axisOptions),\n this$1$1.chartService\n );\n\n if (name) {\n if (this$1$1.namedValueAxes[name]) {\n throw new Error((\"Value axis with name \" + name + \" is already defined\"));\n }\n this$1$1.namedValueAxes[name] = valueAxis;\n }\n valueAxis.axisIndex = i;\n\n axes.push(valueAxis);\n this$1$1.appendAxis(valueAxis);\n }\n }\n\n var primaryAxis = this.valueAxis || axes[0];\n this.valueAxis = primaryAxis;\n\n if (invertAxes) {\n this.axisX = primaryAxis;\n } else {\n this.axisY = primaryAxis;\n }\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\n if (!pane) {\n return;\n }\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\n if (categories.length === 0) {\n appendIfNotNull(categories, this.categoryAxis.getCategory(point));\n }\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\n pointPane: function(point) {\n var panes = this.panes;\n\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\n updateAxisOptions: function(axis, options) {\n updateAxisOptions(this.options, axis, options);\n updateAxisOptions(this.originalOptions, axis, options);\n }\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\n function groupSeries(series, axis, axisIx) {\n return grep(series, function(s) {\n return (axisIx === 0 && !s.categoryAxis) || (s.categoryAxis === axis);\n });\n }\n\n setDefaultOptions(CategoricalPlotArea, {\n categoryAxis: {},\n valueAxis: {}\n });\n\n deepExtend(CategoricalPlotArea.prototype, PlotAreaEventsMixin);\n\n var Highlight = Class.extend({\n init: function() {\n\n this._points = [];\n },\n\n destroy: function() {\n this._points = [];\n },\n\n show: function(points, opacity) {\n var this$1$1 = this;\n\n var arrayPoints = [].concat(points);\n this.hide();\n\n for (var i = 0; i < arrayPoints.length; i++) {\n var point = arrayPoints[i];\n if (point && point.toggleHighlight && point.hasHighlight()) {\n this$1$1.togglePointHighlight(point, true, opacity);\n this$1$1._points.push(point);\n }\n }\n },\n\n togglePointHighlight: function(point, show, opacity) {\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, opacity);\n }\n } else {\n point.toggleHighlight(show, opacity);\n }\n },\n\n hide: function() {\n var this$1$1 = this;\n\n var points = this._points;\n while (points.length) {\n this$1$1.togglePointHighlight(points.pop(), false);\n }\n },\n\n isHighlighted: function(element) {\n var points = this._points;\n\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n if (element === point) {\n return true;\n }\n }\n\n return false;\n }\n });\n\n function preventDefault() {\n this._defaultPrevented = true;\n }\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\n return accept;\n }\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\n var Pannable = Class.extend({\n init: function(plotArea, options) {\n\n this.plotArea = plotArea;\n this.options = deepExtend({}, this.options, options);\n },\n\n start: function(e) {\n this._active = acceptKey(e, this.options.key);\n return this._active;\n },\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\n end: function() {\n var active = this._active;\n this._active = false;\n\n return active;\n },\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\n destroy: function() {\n delete this.plotArea;\n },\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\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\n if (position === X && !axis.options.vertical || position === Y && axis.options.vertical) {\n var range = axis.pan(delta);\n\n if (range) {\n range.limitRange = true;\n updatedAxes.push({\n axis: axis,\n range: range\n });\n }\n }\n }\n }\n\n return updatedAxes;\n }\n });\n\n Pannable.prototype.options = {\n key: \"none\",\n lock: \"none\"\n };\n\n var ZoomSelection = Class.extend({\n init: function(chart, options) {\n\n this.chart = chart;\n this.options = deepExtend({}, this.options, options);\n this.createElement();\n },\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\n removeElement: function() {\n if (this._marquee.parentNode) {\n this._marquee.parentNode.removeChild(this._marquee);\n }\n },\n\n setStyles: function(styles) {\n elementStyles(this._marquee, styles);\n },\n\n start: function(e) {\n if (acceptKey(e, this.options.key)) {\n var chart = this.chart;\n var point = chart._eventCoordinates(e);\n var zoomPane = this._zoomPane = chart._plotArea.paneByPoint(point);\n var clipBox = zoomPane ? zoomPane.chartsBox().clone() : null;\n\n if (zoomPane && clipBox) {\n var offset = this._elementOffset();\n\n clipBox.translate(offset.left, offset.top);\n this._zoomPaneClipBox = clipBox;\n\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\n return true;\n }\n }\n return false;\n },\n\n _elementOffset: function() {\n var chartElement = this.chart.element;\n var ref = elementStyles(chartElement, [ \"paddingLeft\", \"paddingTop\" ]);\n var paddingLeft = ref.paddingLeft;\n var paddingTop = ref.paddingTop;\n var offset = dataviz.elementOffset(chartElement);\n\n return {\n left: paddingLeft + offset.left,\n top: paddingTop + offset.top\n };\n },\n\n move: function(e) {\n var zoomPane = this._zoomPane;\n if (zoomPane) {\n this.setStyles(this._selectionPosition(e));\n }\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\n var start = { x: selectionPosition.left, y: selectionPosition.top };\n var end = { x: selectionPosition.left + selectionPosition.width, y: selectionPosition.top + selectionPosition.height };\n this._updateAxisRanges(start, end);\n\n this.removeElement();\n delete this._zoomPane;\n\n return toChartAxisRanges(this.axisRanges);\n }\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\n destroy: function() {\n this.removeElement();\n delete this._marquee;\n delete this.chart;\n },\n\n _updateAxisRanges: function(start, end) {\n var lock = (this.options.lock || \"\").toLowerCase();\n var axisRanges = [];\n\n var axes = this._zoomPane.axes;\n for (var idx = 0; idx < axes.length; idx++) {\n var axis = axes[idx];\n var vertical = axis.options.vertical;\n if (!(lock === X && !vertical) && !(lock === Y && vertical) && defined(axis.axisIndex)) {\n var range = axis.pointsRange(start, end);\n if (range) {\n axisRanges.push({\n axis: axis,\n range: range\n });\n }\n }\n }\n\n this.axisRanges = axisRanges;\n },\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\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\n if (pageX > clipBox.x2) {\n width = clipBox.x2 - startLocation.x;\n }\n\n if (pageX < clipBox.x1) {\n width = startLocation.x - clipBox.x1;\n }\n\n if (pageY > clipBox.y2) {\n height = clipBox.y2 - startLocation.y;\n }\n\n if (pageY < clipBox.y1) {\n height = startLocation.y - clipBox.y1;\n }\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\n ZoomSelection.prototype.options = {\n key: \"shift\",\n lock: \"none\"\n };\n\n var ref = drawing.util;\n var limitValue$1 = ref.limitValue;\n\n // Limit the zoom rate between 1% and 90% per mousewheel event.\n // At zoom rates close to 100% the axis range quickly becomes 0.\n var MIN_RATE = 0.01;\n var MAX_RATE = 0.9;\n var DEFAULT_RATE = 0.3;\n\n var MousewheelZoom = Class.extend({\n init: function(chart, options) {\n\n this.chart = chart;\n this.options = deepExtend({\n rate: DEFAULT_RATE\n }, this.options, options);\n },\n\n updateRanges: function(delta, coords) {\n var this$1$1 = this;\n\n var lock = (this.options.lock || \"\").toLowerCase();\n var axisRanges = [];\n var axes = this.chart._plotArea.axes;\n\n for (var idx = 0; idx < axes.length; idx++) {\n var axis = axes[idx];\n var vertical = axis.options.vertical;\n\n if (!(lock === X && !vertical) && !(lock === Y && vertical) && axis.zoomRange) {\n var rate = limitValue$1(this$1$1.options.rate, MIN_RATE, MAX_RATE);\n var range = axis.zoomRange(-delta * rate, coords);\n\n if (range) {\n axisRanges.push({\n axis: axis,\n range: range\n });\n }\n }\n }\n\n this.axisRanges = axisRanges;\n return toChartAxisRanges(axisRanges);\n },\n\n zoom: function() {\n var axisRanges = this.axisRanges;\n var plotArea = this.chart._plotArea;\n\n if (axisRanges && axisRanges.length && plotArea.updateAxisOptions) {\n for (var idx = 0; idx < axisRanges.length; idx++) {\n var axisRange = axisRanges[idx];\n plotArea.updateAxisOptions(axisRange.axis, axisRange.range);\n }\n plotArea.redraw(plotArea.panes);\n }\n },\n\n destroy: function() {\n delete this.chart;\n }\n });\n\n var LegendLayout = ChartElement.extend({\n init: function(options, chartService) {\n ChartElement.fn.init.call(this, options);\n\n this.chartService = chartService;\n },\n\n render: function() {\n var ref = this;\n var children = ref.children;\n var options = ref.options;\n var vertical = options.vertical;\n\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\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\n reflow: function(box) {\n this.visual.rect(box.toRect());\n this.visual.reflow();\n var bbox = this.visual.clippedBBox();\n\n if (bbox) {\n this.box = dataviz.rectToBox(bbox);\n } else {\n this.box = new Box();\n }\n },\n\n renderVisual: function() {\n this.addVisual();\n },\n\n createVisual: function() {}\n });\n\n var LegendItem = BoxElement.extend({\n init: function(options) {\n BoxElement.fn.init.call(this, options);\n\n this.createContainer();\n if (!options.rtl) {\n this.createMarker();\n this.createLabel();\n } else {\n this.createLabel();\n this.createMarker();\n }\n },\n\n createContainer: function() {\n this.container = new dataviz.FloatElement({ vertical: false, wrap: false, align: CENTER, spacing: this.options.spacing });\n this.append(this.container);\n },\n\n createMarker: function() {\n this.container.append(new ShapeElement(this.markerOptions()));\n },\n\n markerOptions: function() {\n var options = this.options;\n var markerColor = options.markerColor;\n return deepExtend({}, options.markers, {\n background: markerColor,\n border: {\n color: markerColor\n }\n });\n },\n\n createLabel: function() {\n var options = this.options;\n var labelOptions = deepExtend({}, options.labels);\n\n this.container.append(new TextBox(options.text, labelOptions));\n },\n\n renderComplete: function() {\n BoxElement.fn.renderComplete.call(this);\n\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\n this.appendVisual(eventSink);\n },\n\n click: function(widget, e) {\n var args = this.eventArgs(e);\n\n if (!widget.trigger(LEGEND_ITEM_CLICK, args) && e && e.type === 'contextmenu') {\n e.preventDefault();\n }\n },\n\n over: function(widget, e) {\n var args = this.eventArgs(e);\n\n if (!widget.trigger(LEGEND_ITEM_HOVER, args)) {\n widget._legendItemHover(args.seriesIndex, args.pointIndex);\n }\n\n // Don't trigger point hover for legend items\n return true;\n },\n\n out: function(widget, e) {\n widget._unsetActivePoint();\n\n widget.trigger(LEGEND_ITEM_LEAVE, this.eventArgs(e));\n },\n\n eventArgs: function(e) {\n var options = this.options;\n\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\n renderVisual: function() {\n var this$1$1 = this;\n\n var options = this.options;\n var customVisual = options.visual;\n\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$1.createVisual();\n this$1$1.renderChildren();\n this$1$1.renderComplete();\n\n var defaultVisual = this$1$1.visual;\n\n delete this$1$1.visual;\n\n return defaultVisual;\n }\n });\n this.addVisual();\n } else {\n BoxElement.fn.renderVisual.call(this);\n }\n }\n });\n\n var HORIZONTAL = \"horizontal\";\n var POINTER = \"pointer\";\n var CUSTOM = \"custom\";\n\n var Legend = ChartElement.extend({\n init: function(options, chartService) {\n if (chartService === void 0) { chartService = {}; }\n\n ChartElement.fn.init.call(this, options);\n\n this.chartService = chartService;\n\n if (!inArray(this.options.position, [ TOP, RIGHT, BOTTOM, LEFT, CUSTOM ])) {\n this.options.position = RIGHT;\n }\n\n this.createContainers();\n\n this.createLegendTitle(options.title);\n\n this.createItems();\n },\n\n createContainers: function() {\n var options = this.options;\n var position = options.position;\n var userAlign = options.align;\n var align = position;\n var vAlign = CENTER;\n\n if (position === CUSTOM) {\n align = LEFT;\n } else if (inArray(position, [ TOP, BOTTOM ])) {\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\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\n if (this.hasTitle()) {\n this.itemsContainer = new BoxElement({\n vAlign: vAlign,\n align: align,\n zIndex: options.zIndex,\n shrinkToFit: true\n });\n } else {\n this.itemsContainer = this.container;\n }\n\n this.append(this.container);\n },\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\n if (options.reverse) {\n items = items.slice(0).reverse();\n }\n\n var count = items.length;\n\n for (var i = 0; i < count; i++) {\n var item = items[i];\n\n innerElement.append(new LegendItem(deepExtend({}, {\n markers: options.markers,\n labels: options.labels,\n rtl: chartService.rtl\n }, options.item, item)));\n }\n\n innerElement.render();\n this.itemsContainer.append(innerElement);\n },\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) ||\n (defined(orientation) ? orientation !== HORIZONTAL : inArray(position, [ LEFT, RIGHT ]));\n\n return vertical;\n },\n\n hasItems: function() {\n return this.container.children[0].children.length > 0;\n },\n\n reflow: function(targetBox) {\n var options = this.options;\n var legendBox = targetBox.clone();\n\n if (!this.hasItems()) {\n this.box = legendBox;\n return;\n }\n\n if (options.position === CUSTOM) {\n this.containerCustomReflow(legendBox);\n this.box = legendBox;\n } else {\n this.containerReflow(legendBox);\n }\n\n if (this.hasTitle()) {\n this.title.reflow(new Box(this.container.box.x1, this.title.box.y1, this.container.box.x2, this.title.box.y2));\n }\n },\n\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\n if (position === LEFT || position === RIGHT) {\n containerBox.y1 = alignTarget.y1 = 0;\n }\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\n container.reflow(containerBox);\n containerBox = container.box;\n\n var box = containerBox.clone();\n\n if (options.offsetX || options.offsetY) {\n containerBox.translate(options.offsetX, options.offsetY);\n container.reflow(containerBox);\n }\n\n box[pos + 1] = targetBox[pos + 1];\n box[pos + 2] = targetBox[pos + 2];\n\n this.box = box;\n },\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\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\n container.reflow(new Box(\n offsetX, offsetY,\n offsetX + containerBox.width(), offsetY + containerBox.height()\n ));\n },\n\n renderVisual: function() {\n if (this.hasItems()) {\n ChartElement.fn.renderVisual.call(this);\n }\n },\n\n createLegendTitle: function(title) {\n var titleOptions = deepExtend({}, {\n color: BLACK,\n position: TOP,\n align: CENTER\n }, title);\n var text = titleOptions.text;\n\n if (!title || title.visible === false) {\n return;\n }\n\n if (defined(titleOptions) && titleOptions.visible) {\n var labelTemplate = getTemplate(titleOptions);\n if (labelTemplate) {\n text = labelTemplate({ text: text });\n } else if (titleOptions.format) {\n text = this.chartService.format.auto(titleOptions.format, text);\n }\n }\n\n this.title = new TextBox(text, titleOptions);\n\n this.createTitleLayout();\n\n this.appendTitleLayoutContent();\n },\n\n createTitleLayout: function() {\n this.layout = new dataviz.FloatElement({\n vertical: true,\n wrap: false\n });\n\n this.container.append(this.layout);\n },\n\n hasTitle: function() {\n return Boolean(this.options.title && this.options.title.visible !== false);\n },\n\n appendTitleLayoutContent: function() {\n var options = this.options;\n\n if (options.title.position === BOTTOM) {\n this.layout.append(this.itemsContainer);\n this.layout.append(this.title);\n } else {\n this.layout.append(this.title);\n this.layout.append(this.itemsContainer);\n }\n }\n });\n\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: {\n width: 0\n },\n width: 15,\n height: 3,\n type: \"rect\",\n align: LEFT,\n vAlign: CENTER\n }\n });\n\n var PlotAreaFactory = Class.extend({\n init: function() {\n\n this._registry = [];\n },\n\n register: function(type, seriesTypes) {\n this._registry.push({\n type: type,\n seriesTypes: seriesTypes\n });\n },\n\n create: function(srcSeries, options, chartService) {\n var registry = this._registry;\n var match = registry[0];\n var series;\n\n for (var idx = 0; idx < registry.length; idx++) {\n var entry = registry[idx];\n series = filterSeriesByType(srcSeries, entry.seriesTypes);\n\n if (series.length > 0) {\n match = entry;\n break;\n }\n }\n\n return new match.type(series, options, chartService);\n }\n });\n\n PlotAreaFactory.current = new PlotAreaFactory();\n\n var ZOOM_ACCELERATION = 3;\n var SELECTOR_HEIGHT_ADJUST = 0.1;\n\n function createDiv(className) {\n var element = document.createElement(\"div\");\n if (className) {\n element.className = className;\n }\n\n return element;\n }\n\n function closestHandle(element) {\n var current = element;\n while (current && !hasClasses(current, \"k-handle\")) {\n current = current.parentNode;\n }\n\n return current;\n }\n\n var Selection = Class.extend({\n init: function(chart, categoryAxis, options, observer) {\n\n var chartElement = chart.element;\n\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\n this.initOptions();\n\n this.visible = this.options.visible && chartElement.offsetHeight;\n\n if (this.visible) {\n this.createElements();\n\n this.set(this._index(this.options.from), this._index(this.options.to));\n\n this.bindEvents();\n }\n },\n\n onPane: function(pane) {\n return this.categoryAxis.pane === pane;\n },\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\n wrapper.appendChild(this.leftMask);\n wrapper.appendChild(this.rightMask);\n wrapper.appendChild(selection);\n\n selection.appendChild(createDiv(\"k-selection-bg\"));\n\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\n selection.appendChild(leftHandle);\n selection.appendChild(rightHandle);\n\n this.chartElement.appendChild(wrapper);\n var selectionStyles = elementStyles(selection, [ \"borderLeftWidth\", \"borderRightWidth\", \"height\" ]);\n var leftHandleHeight = elementStyles(leftHandle, \"height\").height;\n var rightHandleHeight = elementStyles(rightHandle, \"height\").height;\n\n options.selection = {\n border: {\n left: selectionStyles.borderLeftWidth,\n right: selectionStyles.borderRightWidth\n }\n };\n\n elementStyles(leftHandle, {\n top: (selectionStyles.height - leftHandleHeight) / 2\n });\n\n elementStyles(rightHandle, {\n top: (selectionStyles.height - rightHandleHeight) / 2\n });\n\n wrapper.style.cssText = wrapper.style.cssText;\n },\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\n this._domEvents = services.DomEventsBuilder.create(this.wrapper, {\n stopPropagation: true, // applicable for the jQuery UserEvents\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\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\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\n var ref$1 = elementStyles(this.chartElement, [ \"paddingLeft\", \"paddingTop\" ]);\n var paddingLeft = ref$1.paddingLeft;\n var paddingTop = ref$1.paddingTop;\n\n this.options = deepExtend({}, {\n width: box.width(),\n height: box.height() + SELECTOR_HEIGHT_ADJUST, //workaround for sub-pixel hover on the paths in chrome\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\n destroy: function() {\n if (this._domEvents) {\n this._domEvents.destroy();\n delete this._domEvents;\n }\n\n clearTimeout(this._mwTimeout);\n this._state = null;\n\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\n _rangeEventArgs: function(range) {\n\n return {\n axis: this.categoryAxis.options,\n from: this._value(range.from),\n to: this._value(range.to)\n };\n },\n\n _start: function(e) {\n var options = this.options;\n var target = eventElement(e);\n\n if (this._state || !target) {\n return;\n }\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\n var args = this._rangeEventArgs({\n from: this._index(options.from),\n to: this._index(options.to)\n });\n\n if (this.trigger(SELECT_START, args)) {\n this._state = null;\n }\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\n _move: function(e) {\n if (!this._state) {\n return;\n }\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 = { from: range.from, to: range.to };\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\n if (!target) {\n return;\n }\n\n var leftHandle = hasClasses(target, \"k-left-handle\");\n var rightHandle = hasClasses(target, \"k-right-handle\");\n\n if (hasClasses(target, \"k-selection k-selection-bg\")) {\n range.from = Math.min(\n Math.max(min, from - offset),\n max - span\n );\n range.to = Math.min(\n range.from + span,\n max\n );\n } else if ((leftHandle && !reverse) || (rightHandle && reverse)) {\n range.from = Math.min(\n Math.max(min, from - offset),\n max - 1\n );\n range.to = Math.max(range.from + 1, range.to);\n } else if ((leftHandle && reverse) || (rightHandle && !reverse)) {\n range.to = Math.min(\n Math.max(min + 1, to - offset),\n max\n );\n range.from = Math.min(range.to - 1, range.from);\n }\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\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\n var range = this._state.range;\n this.set(range.from, range.to);\n this.trigger(SELECT_END, this._rangeEventArgs(range));\n\n delete this._state;\n }\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\n if (this._state || rightClick) {\n return;\n }\n\n this.chart._unsetActivePoint();\n\n if (!categoryAxis.options.justified) {\n offset--;\n }\n\n range.from = Math.min(\n Math.max(min, from - offset),\n max - span\n );\n\n range.to = Math.min(range.from + span, max);\n\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\n _mousewheel: function(e) {\n var this$1$1 = this;\n\n var delta = dataviz.mousewheelDelta(e);\n\n this._start({ target: this.selection });\n\n if (this._state) {\n var range = this._state.range;\n\n e.preventDefault();\n e.stopPropagation();\n\n if (Math.abs(delta) > 1) {\n delta *= ZOOM_ACCELERATION;\n }\n\n if (this.options.mousewheel.reverse) {\n delta *= -1;\n }\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\n if (this._mwTimeout) {\n clearTimeout(this._mwTimeout);\n }\n\n this._mwTimeout = setTimeout(function () {\n this$1$1._end();\n }, MOUSEWHEEL_DELAY);\n }\n },\n\n _gesturestart: function(e) {\n var options = this.options;\n\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\n if (this.trigger(SELECT_START, args)) {\n this._state = null;\n } else {\n e.preventDefault();\n }\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\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\n e.preventDefault();\n\n range.from = categoryAxis.pointCategoryIndex(new Point(left)) || options.min;\n\n range.to = categoryAxis.pointCategoryIndex(new Point(right)) || options.max;\n\n this.move(range.from, range.to);\n\n this.trigger(SELECT, this._rangeEventArgs(range));\n },\n\n _index: function(value) {\n var index = value;\n\n if (value instanceof Date) {\n index = this.categoryAxis.categoryIndex(value);\n }\n\n return index;\n },\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\n return value;\n },\n\n _slot: function(value) {\n var categoryAxis = this.categoryAxis;\n var index = this._index(value);\n\n return categoryAxis.getSlot(index, index, true);\n },\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\n var box = this._slot(left);\n var leftMaskWidth = round(box[edge] - offset.left + padding.left);\n\n elementStyles(this.leftMask, {\n width: leftMaskWidth\n });\n elementStyles(this.selection, {\n left: leftMaskWidth\n });\n\n box = this._slot(right);\n\n var rightMaskWidth = round(options.width - (box[edge] - offset.left + padding.left));\n elementStyles(this.rightMask, {\n width: rightMaskWidth\n });\n\n var distance = options.width - rightMaskWidth;\n if (distance !== options.width) {\n distance += border.right;\n }\n\n elementStyles(this.rightMask, {\n left: distance\n });\n elementStyles(this.selection, {\n width: Math.max(options.width - (leftMaskWidth + rightMaskWidth) - border.right, 0)\n });\n },\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\n if (options.visible) {\n this.move(fromValue, toValue);\n }\n\n options.from = this._value(fromValue);\n options.to = this._value(toValue);\n },\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 = { from: from, to: to };\n var oldRange = deepExtend({}, range);\n\n if (this._state) {\n range = this._state.range;\n }\n\n if (zDir !== RIGHT) {\n range.from = limitValue(\n limitValue(from - delta, 0, to - 1),\n min, max\n );\n }\n\n if (zDir !== LEFT) {\n range.to = limitValue(\n limitValue(to + delta, range.from + 1, max),\n min,\n max\n );\n }\n\n if (range.from !== oldRange.from || range.to !== oldRange.to) {\n this.set(range.from, range.to);\n return true;\n }\n },\n\n zoom: function(delta, coords) {\n var options = this.options;\n var min = this._index(options.min);\n var max = this._index(options.max);\n var from = this._index(options.from);\n var to = this._index(options.to);\n var range = { from: from, to: to };\n var oldRange = deepExtend({}, range);\n\n var ref = this.categoryAxis.options;\n var reverse = ref.reverse;\n var origin = X + (reverse ? '2' : '1');\n var lineBox = this.categoryAxis.lineBox();\n var relative = Math.abs(lineBox[origin] - coords[X]);\n var size = lineBox.width();\n var position = round(relative / size, 2);\n var minDelta = round(position * delta);\n var maxDelta = round((1 - position) * delta);\n\n if (this._state) {\n range = this._state.range;\n }\n\n range.from = limitValue(\n limitValue(from - minDelta, 0, to - 1),\n min, max\n );\n\n range.to = limitValue(\n limitValue(to + maxDelta, range.from + 1, max),\n min,\n max\n );\n\n if (range.from !== oldRange.from || range.to !== oldRange.to) {\n this.set(range.from, range.to);\n return true;\n }\n },\n\n trigger: function(name, args) {\n return (this.observer || this.chart).trigger(name, args);\n }\n });\n\n setDefaultOptions(Selection, {\n visible: true,\n mousewheel: {\n zoom: \"both\"\n },\n min: MIN_VALUE,\n max: MAX_VALUE\n });\n\n var Tooltip = BaseTooltip.extend({\n show: function(point) {\n if (!point || !point.tooltipAnchor || (this._current && this._current === point)) {\n return;\n }\n\n var options = deepExtend({}, this.options, point.options.tooltip);\n var anchor = point.tooltipAnchor();\n\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\n hide: function() {\n delete this._current;\n BaseTooltip.fn.hide.call(this);\n }\n });\n\n var SharedTooltip = BaseTooltip.extend({\n init: function(plotArea, options) {\n BaseTooltip.fn.init.call(this, plotArea.chartService, options);\n\n this.plotArea = plotArea;\n this.formatService = plotArea.chartService.format;\n },\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\n return !excluded;\n });\n\n if (tooltipPoints.length > 0) {\n var point = tooltipPoints[0];\n var slot = this.plotArea.categoryAxis.getSlot(point.categoryIx);\n\n var anchor = coords ? this._slotAnchor(coords, slot) : this._defaultAnchor(point, slot);\n\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\n _slotAnchor: function(point, slot) {\n var axis = this.plotArea.categoryAxis;\n var align = {\n horizontal: \"left\",\n vertical: \"center\"\n };\n\n if (!axis.options.vertical) {\n point.x = slot.center().x;\n }\n\n return {\n point: point,\n align: align\n };\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\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\n return {\n point: centerPoint,\n align: align\n };\n }\n });\n\n setDefaultOptions(SharedTooltip, {\n categoryFormat: '{0:d}'\n });\n\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\n if (bbox) {\n this.origin = options.origin;\n var axis = options.vertical ? Y : X;\n\n var fromScale = this.fromScale = new GeometryPoint(1, 1);\n fromScale[axis] = START_SCALE;\n\n element.transform(transform()\n .scale(fromScale.x, fromScale.y)\n );\n } else {\n this.abort();\n }\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\n this.element.transform(transform()\n .scale(scaleX, scaleY, this.origin)\n );\n },\n\n abort: function() {\n Animation.fn.abort.call(this);\n this.element.transform(null);\n }\n });\n\n setDefaultOptions(BarChartAnimation, {\n duration: INITIAL_ANIMATION_DURATION\n });\n\n AnimationFactory.current.register(BAR, BarChartAnimation);\n\n var BubbleAnimation = Animation.extend({\n setup: function() {\n var center = this.center = this.element.bbox().center();\n this.element.transform(transform()\n .scale(START_SCALE, START_SCALE, center)\n );\n },\n\n step: function(pos) {\n this.element.transform(transform()\n .scale(pos, pos, this.center)\n );\n }\n });\n\n setDefaultOptions(BubbleAnimation, {\n easing: \"easeOutElastic\"\n });\n\n AnimationFactory.current.register(BUBBLE, BubbleAnimation);\n\n var FadeInAnimation = Animation.extend({\n setup: function() {\n this.fadeTo = this.element.opacity();\n this.element.opacity(0);\n },\n\n step: function(pos) {\n this.element.opacity(pos * this.fadeTo);\n }\n });\n\n setDefaultOptions(FadeInAnimation, {\n duration: 200,\n easing: \"linear\"\n });\n\n AnimationFactory.current.register(FADEIN, FadeInAnimation);\n\n var PieAnimation = Animation.extend({\n setup: function() {\n this.element.transform(transform()\n .scale(START_SCALE, START_SCALE, this.options.center)\n );\n },\n\n step: function(pos) {\n this.element.transform(transform()\n .scale(pos, pos, this.options.center)\n );\n }\n });\n\n setDefaultOptions(PieAnimation, {\n easing: \"easeOutElastic\",\n duration: INITIAL_ANIMATION_DURATION\n });\n\n AnimationFactory.current.register(PIE, PieAnimation);\n\n var ScatterLineChart = ScatterChart.extend({\n render: function() {\n ScatterChart.fn.render.call(this);\n\n this.renderSegments();\n },\n\n createSegment: function(linePoints, currentSeries, seriesIx) {\n var style = currentSeries.style;\n var pointType;\n\n if (style === SMOOTH) {\n pointType = SplineSegment;\n } else {\n pointType = LineSegment;\n }\n\n return new pointType(linePoints, currentSeries, seriesIx);\n },\n\n animationPoints: function() {\n var points = ScatterChart.fn.animationPoints.call(this);\n return points.concat(this._segments);\n },\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\n deepExtend(ScatterLineChart.prototype, LineChartMixin);\n\n var XYPlotArea = PlotAreaBase.extend({\n initFields: function() {\n this.namedXAxes = {};\n this.namedYAxes = {};\n\n this.xAxisRangeTracker = new AxisGroupRangeTracker();\n this.yAxisRangeTracker = new AxisGroupRangeTracker();\n },\n\n render: function(panes) {\n var this$1$1 = this;\n if (panes === void 0) { panes = this.panes; }\n\n var seriesByPane = this.groupSeriesByPane();\n\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$1.addToLegend(paneSeries);\n var filteredSeries = this$1$1.filterVisibleSeries(paneSeries);\n\n if (!filteredSeries) {\n continue;\n }\n\n this$1$1.createScatterChart(\n filterSeriesByType(filteredSeries, SCATTER),\n pane\n );\n\n this$1$1.createScatterLineChart(\n filterSeriesByType(filteredSeries, SCATTER_LINE),\n pane\n );\n\n this$1$1.createBubbleChart(\n filterSeriesByType(filteredSeries, BUBBLE),\n pane\n );\n }\n\n this.createAxes(panes);\n },\n\n appendChart: function(chart, pane) {\n this.xAxisRangeTracker.update(chart.xAxisRanges);\n this.yAxisRangeTracker.update(chart.yAxisRanges);\n\n PlotAreaBase.fn.appendChart.call(this, chart, pane);\n },\n\n removeAxis: function(axis) {\n var axisName = axis.options.name;\n\n PlotAreaBase.fn.removeAxis.call(this, axis);\n\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\n if (axis === this.axisX) {\n delete this.axisX;\n }\n\n if (axis === this.axisY) {\n delete this.axisY;\n }\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) { return a.name === xAxisName; })[0];\n var yAxisName = series.yAxis;\n var yAxisOptions = [].concat(options.yAxis);\n var yAxis = grep(yAxisOptions, function(a) { return a.name === yAxisName; })[0];\n var panes = options.panes || [ {} ];\n var defaultPaneName = panes[0].name || \"default\";\n var paneName = (xAxis || {}).pane || (yAxis || {}).pane || defaultPaneName;\n\n return paneName;\n },\n\n createScatterChart: function(series, pane) {\n if (series.length > 0) {\n this.appendChart(\n new ScatterChart(this, { series: series, clip: pane.options.clip }),\n pane\n );\n }\n },\n\n createScatterLineChart: function(series, pane) {\n if (series.length > 0) {\n this.appendChart(\n new ScatterLineChart(this, { series: series, clip: pane.options.clip }),\n pane\n );\n }\n },\n\n createBubbleChart: function(series, pane) {\n if (series.length > 0) {\n this.appendChart(\n new BubbleChart(this, { series: series, clip: pane.options.clip }),\n pane\n );\n }\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 ? { min: 0.1, max: 1 } : { min: 0, max: 1 };\n var range = tracker.query(axisName) || defaultRange || defaultAxisRange;\n var typeSamples = [ axisOptions.min, axisOptions.max ];\n var series = this.series;\n\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\n break;\n }\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\n var inferredDate;\n\n for (var i = 0; i < typeSamples.length; i++) {\n if (typeSamples[i] instanceof Date) {\n inferredDate = true;\n break;\n }\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\n var axis = new axisType(range.min, range.max, axisOptions, this.chartService);\n axis.axisIndex = axisIndex;\n\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\n this.appendAxis(axis);\n\n return axis;\n },\n\n createAxes: function(panes) {\n var this$1$1 = this;\n\n var options = this.options;\n var xAxesOptions = [].concat(options.xAxis);\n var xAxes = [];\n var yAxesOptions = [].concat(options.yAxis);\n var yAxes = [];\n\n for (var idx = 0; idx < xAxesOptions.length; idx++) {\n var axisPane = this$1$1.findPane(xAxesOptions[idx].pane);\n if (inArray(axisPane, panes)) {\n xAxes.push(this$1$1.createXYAxis(xAxesOptions[idx], false, idx));\n }\n }\n\n for (var idx$1 = 0; idx$1 < yAxesOptions.length; idx$1++) {\n var axisPane$1 = this$1$1.findPane(yAxesOptions[idx$1].pane);\n if (inArray(axisPane$1, panes)) {\n yAxes.push(this$1$1.createXYAxis(yAxesOptions[idx$1], true, idx$1));\n }\n }\n\n this.axisX = this.axisX || xAxes[0];\n this.axisY = this.axisY || yAxes[0];\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 allAxes = this.axes;\n var length = allAxes.length;\n var xValues = [];\n var yValues = [];\n\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\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\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\n updateAxisOptions$1(this.options, index, vertical, options);\n updateAxisOptions$1(this.originalOptions, index, vertical, options);\n }\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\n setDefaultOptions(XYPlotArea, {\n xAxis: {},\n yAxis: {}\n });\n\n deepExtend(XYPlotArea.prototype, PlotAreaEventsMixin);\n\n var PieSegment = ChartElement.extend({\n init: function(value, sector, options) {\n ChartElement.fn.init.call(this, options);\n\n this.value = value;\n this.sector = sector;\n },\n\n render: function() {\n var labels = this.options.labels;\n var chartService = this.owner.chartService;\n var labelText = this.value;\n\n if (this._rendered || this.visible === false) {\n return;\n }\n this._rendered = true;\n\n var labelTemplate = getTemplate(labels);\n var pointData = this.pointData();\n\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else if (labels.format) {\n labelText = chartService.format.auto(labels.format, labelText);\n }\n\n if (labels.visible && (labelText || labelText === 0)) {\n if (labels.position === CENTER || labels.position === INSIDE_END) {\n if (!labels.color) {\n labels.color = dataviz.autoTextColor(this.options.color);\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\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\n this.append(this.label);\n }\n },\n\n reflow: function(targetBox) {\n this.render();\n this.box = targetBox;\n this.reflowLabel();\n },\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\n if (label) {\n var labelHeight = label.box.height();\n var labelWidth = label.box.width();\n var lp;\n\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\n createVisual: function() {\n var this$1$1 = this;\n\n var ref = this;\n var sector = ref.sector;\n var options = ref.options;\n\n ChartElement.fn.createVisual.call(this);\n\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$1.createSegmentVisual(group);\n\n return group;\n }\n });\n\n if (visual) {\n this.visual.append(visual);\n }\n } else {\n this.createSegmentVisual(this.visual);\n }\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: {\n opacity: options.opacity\n },\n zIndex: options.zIndex\n }, border));\n\n group.append(visual);\n\n if (hasGradientOverlay(options)) {\n group.append(this.createGradientOverlay(visual, {\n baseColor: color,\n fallbackFill: fill\n }, deepExtend({\n center: [ sector.center.x, sector.center.y ],\n innerRadius: sector.innerRadius,\n radius: sector.radius,\n userSpace: true\n }, options.overlay)));\n }\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\n return dataviz.ShapeBuilder.current.createRing(sector, options);\n },\n\n createAnimation: function() {\n var ref = this;\n var options = ref.options;\n var center = ref.sector.center;\n\n deepExtend(options, {\n animation: {\n center: [ center.x, center.y ],\n delay: this.animationDelay\n }\n });\n\n ChartElement.fn.createAnimation.call(this);\n },\n\n createHighlight: function(options) {\n var highlight = this.options.highlight || {};\n var border = highlight.border || {};\n\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\n highlightVisual: function() {\n return this.visual.children[0];\n },\n\n highlightVisualArgs: function() {\n var sector = this.sector;\n\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\n tooltipAnchor: function() {\n var sector = this.sector.clone().expand(TOOLTIP_OFFSET);\n var midAndle = sector.middle();\n var midPoint = sector.point(midAndle);\n\n return {\n point: midPoint,\n align: tooltipAlignment(midAndle + 180)\n };\n },\n\n formatValue: function(format) {\n return this.owner.formatPointValue(this, format);\n },\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\n var RAD_30 = round(dataviz.rad(30), DEFAULT_PRECISION);\n var RAD_60 = round(dataviz.rad(60), DEFAULT_PRECISION);\n\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\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\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\n return {\n horizontal: horizontal,\n vertical: vertical\n };\n }\n\n setDefaultOptions(PieSegment, {\n color: WHITE,\n overlay: {\n gradient: \"roundedBevel\"\n },\n border: {\n width: 0.5\n },\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: {\n type: PIE\n },\n highlight: {\n visible: true,\n border: {\n width: 1\n }\n },\n visible: true\n });\n\n deepExtend(PieSegment.prototype, PointEventsMixin);\n\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\n if (options && options.visibleInLegend !== false) {\n var pointVisible = options.visible !== false;\n var labelTemplate = pointVisible ? getTemplate(labelsOptions) :\n getTemplate(inactiveItemsLabels) || getTemplate(labelsOptions);\n var text = options.category;\n\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\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\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\n var PIE_SECTOR_ANIM_DELAY = 70;\n\n var PieChart = ChartElement.extend({\n init: function(plotArea, options) {\n ChartElement.fn.init.call(this, options);\n\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this.points = [];\n this.legendItems = [];\n this.render();\n },\n\n render: function() {\n this.traverseDataPoints(this.addValue.bind(this));\n },\n\n traverseDataPoints: function(callback) {\n var this$1$1 = this;\n\n var ref = this;\n var options = ref.options;\n var seriesColors = ref.plotArea.options.seriesColors; if (seriesColors === void 0) { seriesColors = []; }\n var colorsCount = seriesColors.length;\n var series = options.series;\n var seriesCount = series.length;\n\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\n if (defined(currentSeries.startAngle)) {\n currentAngle = currentSeries.startAngle;\n } else {\n currentAngle = options.startAngle;\n }\n\n if (seriesIx !== seriesCount - 1) {\n if (currentSeries.labels.position === OUTSIDE_END) {\n currentSeries.labels.position = CENTER;\n }\n }\n\n for (var i = 0; i < points.length; i++) {\n var pointData = points[i];\n if (!pointData) {\n continue;\n }\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\n if (!isFunction(currentSeries.color)) {\n currentSeries.color = fields.color || seriesColors[i % colorsCount];\n }\n\n callback(value, new dataviz.Ring(null, 0, 0, currentAngle, angle), {\n owner: this$1$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$1.animationDelay(i, seriesIx, seriesCount)\n });\n\n if (visible !== false) {\n currentAngle += angle;\n }\n }\n }\n },\n\n evalSegmentOptions: function(options, value, fields) {\n var series = fields.series;\n\n evalOptions(options, {\n value: value,\n series: series,\n dataItem: fields.dataItem,\n category: fields.category,\n percentage: fields.percentage\n }, { defaults: series._defaults, excluded: [ \"data\", \"content\", \"template\", \"visual\", \"toggle\" ] });\n },\n\n addValue: function(value, sector, fields) {\n var segmentOptions = deepExtend({}, fields.series, { index: fields.index });\n this.evalSegmentOptions(segmentOptions, value, fields);\n\n this.createLegendItem(value, segmentOptions, fields);\n\n if (fields.visible === false) {\n return;\n }\n\n var segment = new PieSegment(value, sector, segmentOptions);\n $.extend(segment, fields);\n this.append(segment);\n this.points.push(segment);\n },\n\n reflow: function(targetBox) {\n var ref = this;\n var options = ref.options;\n var points = ref.points;\n var seriesConfigs = ref.seriesConfigs; if (seriesConfigs === void 0) { seriesConfigs = []; }\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\n this.targetBox = targetBox;\n\n padding = padding > halfMinWidth - space ? halfMinWidth - space : padding;\n newBox.translate(boxCenter.x - newBoxCenter.x, boxCenter.y - newBoxCenter.y);\n\n var radius = halfMinWidth - padding;\n var center = new Point(\n radius + newBox.x1 + padding,\n radius + newBox.y1 + padding\n );\n\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\n if (seriesConfigs.length) {\n var seriesConfig = seriesConfigs[seriesIndex];\n sector.innerRadius = seriesConfig.innerRadius;\n sector.radius = seriesConfig.radius;\n }\n\n if (seriesIndex === seriesCount - 1 && segment.explode) {\n sector.center = sector.clone().setRadius(sector.radius * 0.15).point(sector.middle());\n }\n\n segment.reflow(newBox);\n\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\n if (leftSideLabels.length > 0) {\n leftSideLabels.sort(this.labelComparator(true));\n this.leftLabelsReflow(leftSideLabels);\n }\n\n if (rightSideLabels.length > 0) {\n rightSideLabels.sort(this.labelComparator(false));\n this.rightLabelsReflow(rightSideLabels);\n }\n\n this.box = newBox;\n },\n\n leftLabelsReflow: function(labels) {\n var distances = this.distanceBetweenLabels(labels);\n\n this.distributeLabels(distances, labels);\n },\n\n rightLabelsReflow: function(labels) {\n var distances = this.distanceBetweenLabels(labels);\n\n this.distributeLabels(distances, labels);\n },\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\n distances.push(distance);\n\n for (var i = 0; i < count; i++) {\n var secondBox = labels[i + 1].box;\n\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\n return distances;\n },\n\n distributeLabels: function(distances, labels) {\n var this$1$1 = this;\n\n var count = distances.length;\n var left, right, remaining;\n\n for (var i = 0; i < count; i++) {\n remaining = -distances[i];\n left = right = i;\n\n while (remaining > 0 && (left >= 0 || right < count)) {\n remaining = this$1$1._takeDistance(distances, i, --left, remaining);\n remaining = this$1$1._takeDistance(distances, i, ++right, remaining);\n }\n }\n\n this.reflowLabels(distances, labels);\n },\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\n return result;\n },\n\n reflowLabels: function(distances, labels) {\n var this$1$1 = this;\n\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\n distances[0] += 2;\n for (var i = 0; i < labelsCount; i++) {\n var label = labels[i];\n var box = label.box;\n\n boxY += distances[i];\n boxX = this$1$1.hAlignLabel(\n box.x2,\n sector.clone().expand(labelDistance),\n boxY,\n boxY + box.height(),\n label.orientation === RIGHT);\n\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\n boxY += box.height();\n }\n },\n\n createVisual: function() {\n var this$1$1 = this;\n\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\n ChartElement.fn.createVisual.call(this);\n\n this._connectorLines = [];\n\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\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\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\n start = sector.clone().expand(connectors.padding).point(angle);\n connectorLine.moveTo(start.x, start.y);\n // TODO: Extract into a method to remove duplication\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\n if (this$1$1.pointInCircle(crossing, sector.center, sector.radius + space) ||\n 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\n if (this$1$1.pointInCircle(crossing, sector.center, sector.radius + space) ||\n 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\n connectorLine.lineTo(end.x, end.y);\n\n this$1$1._connectorLines.push(connectorLine);\n this$1$1.visual.append(connectorLine);\n }\n }\n }\n },\n\n renderVisual: function() {\n ChartElement.fn.renderVisual.call(this);\n\n if (dataviz.find(this.options.series, function (options) { return options.autoFit; })) {\n var targetBox = this.targetBox;\n var pieCenter = this.box.center();\n var bbox = this.visual.bbox();\n if (!bbox) {\n return;\n }\n\n var bboxBottom = bbox.bottomRight();\n\n var scale = Math.min(\n (pieCenter.y - targetBox.y1) / (pieCenter.y - bbox.origin.y),\n (targetBox.y2 - pieCenter.y) / (bboxBottom.y - pieCenter.y),\n (pieCenter.x - targetBox.x1) / (pieCenter.x - bbox.origin.x),\n (targetBox.x2 - pieCenter.x) / (bboxBottom.x - pieCenter.x)\n );\n\n if (scale < 1) {\n this.visual.transform(transform().scale(scale, scale, [ pieCenter.x, pieCenter.y ]));\n }\n }\n },\n\n labelComparator: function(reverse) {\n var reverseValue = reverse ? -1 : 1;\n\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\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\n if (t > radius) {\n return originalX;\n }\n\n return cx + Math.sqrt((radius * radius) - (t * t)) * (direction ? 1 : -1);\n },\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\n formatPointValue: function(point, format) {\n return this.chartService.format.auto(format, point.value);\n },\n\n animationDelay: function(categoryIndex) {\n return categoryIndex * PIE_SECTOR_ANIM_DELAY;\n },\n\n stackRoot: function() {\n return this;\n }\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\n var result;\n if (ub !== 0) {\n var ua = (uat / ub);\n\n result = new Point(\n a1.x + ua * (a2.x - a1.x),\n a1.y + ua * (a2.y - a1.y)\n );\n }\n\n return result;\n }\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\n deepExtend(PieChart.prototype, PieChartMixin);\n\n PieChart.prototype.isStackRoot = true;\n\n var PiePlotArea = PlotAreaBase.extend({\n render: function() {\n this.createPieChart(this.series);\n },\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\n this.appendChart(pieChart);\n },\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\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\n if (label) {\n var labelHeight = label.box.height();\n if (labelsOptions.position === CENTER) {\n sector.radius -= (sector.radius - sector.innerRadius) / 2;\n\n var lp = sector.point(angle);\n\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\n createSegment: function(sector, options) {\n return dataviz.ShapeBuilder.current.createRing(sector, options);\n }\n });\n\n setDefaultOptions(DonutSegment, {\n overlay: {\n gradient: \"roundedGlass\"\n },\n labels: {\n position: CENTER\n },\n animation: {\n type: PIE\n }\n });\n\n deepExtend(DonutSegment.prototype, PointEventsMixin);\n\n var DONUT_SECTOR_ANIM_DELAY = 50;\n\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\n this.createLegendItem(value, segmentOptions, fields);\n\n if (fields.visible === false) {\n return;\n }\n\n var segment = new DonutSegment(value, sector, segmentOptions);\n\n $.extend(segment, fields);\n this.append(segment);\n this.points.push(segment);\n },\n\n reflow: function(targetBox) {\n var this$1$1 = this;\n\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\n var padding = valueOrDefault(options.padding, defaultPadding);\n padding = padding > halfMinWidth - space ? halfMinWidth - space : padding;\n\n var totalSize = halfMinWidth - padding;\n var seriesWithoutSize = 0;\n var holeSize;\n\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\n if (defined(currentSeries.size)) {\n totalSize -= currentSeries.size;\n } else {\n seriesWithoutSize++;\n }\n\n if (defined(currentSeries.margin) && i !== seriesCount - 1) {\n totalSize -= currentSeries.margin;\n }\n }\n\n if (!defined(holeSize)) {\n var currentSize = (halfMinWidth - padding) / (seriesCount + 0.75);\n holeSize = currentSize * 0.75;\n totalSize -= holeSize;\n }\n\n var innerRadius = holeSize;\n var margin = 0;\n var size, radius;\n\n this.seriesConfigs = [];\n\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$1.seriesConfigs.push({ innerRadius: innerRadius, radius: radius });\n margin = currentSeries$1.margin || 0;\n innerRadius = radius;\n }\n\n PieChart.fn.reflow.call(this, targetBox);\n },\n\n animationDelay: function(categoryIndex, seriesIndex, seriesCount) {\n return categoryIndex * DONUT_SECTOR_ANIM_DELAY +\n (INITIAL_ANIMATION_DURATION * (seriesIndex + 1) / (seriesCount + 1));\n }\n });\n\n setDefaultOptions(DonutChart, {\n startAngle: 90,\n connectors: {\n width: 2,\n color: \"#939393\",\n padding: 8\n }\n });\n\n var DonutPlotArea = PiePlotArea.extend({\n render: function() {\n this.createDonutChart(this.series);\n },\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\n this.appendChart(donutChart);\n }\n });\n\n var DEFAULT_PADDING = 0.15;\n\n var PolarPlotAreaBase = PlotAreaBase.extend({\n initFields: function() {\n this.valueAxisRangeTracker = new AxisGroupRangeTracker();\n },\n\n render: function() {\n this.addToLegend(this.series);\n this.createPolarAxis();\n this.createCharts();\n this.createValueAxis();\n },\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(\n center.x - slot.x1,\n center.y - slot.y1\n );\n\n axis.reflow(axisBox);\n },\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\n if (axisOptions.type === LOGARITHMIC) {\n axisType = dataviz.RadarLogarithmicAxis;\n axisDefaultRange = { min: 0.1, max: 1 };\n } else {\n axisType = dataviz.RadarNumericAxis;\n axisDefaultRange = { min: 0, max: 1 };\n }\n\n var range = tracker.query(name) || defaultRange || axisDefaultRange;\n\n if (range && defaultRange) {\n range.min = Math.min(range.min, defaultRange.min);\n range.max = Math.max(range.max, defaultRange.max);\n }\n\n var valueAxis = new axisType(\n range.min, range.max,\n axisOptions,\n this.chartService\n );\n\n this.valueAxis = valueAxis;\n this.appendAxis(valueAxis);\n },\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\n axisBox.y2 = axisBox.y1 + Math.min(axisBox.width(), axisBox.height());\n axisBox.align(paddingBox, Y, CENTER);\n\n var valueAxisBox = axisBox.clone().shrink(0, axisBox.height() / 2);\n\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\n this.axisBox = axisBox;\n this.alignAxes(axisBox);\n },\n\n backgroundBox: function() {\n return this.box;\n },\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\n return new Box(slot.x, slot.y, slot.x, slot.y);\n }\n });\n\n setDefaultOptions(PolarScatterChart, {\n clip: false\n });\n\n var PolarLineChart = ScatterLineChart.extend({\n\n });\n\n PolarLineChart.prototype.pointSlot = PolarScatterChart.prototype.pointSlot;\n\n setDefaultOptions(PolarLineChart, {\n clip: false\n });\n\n var SplinePolarAreaSegment = SplineAreaSegment.extend({\n fillToAxes: function(fillPath) {\n var center = this._polarAxisCenter();\n fillPath.lineTo(center.x, center.y);\n },\n\n _polarAxisCenter: function() {\n var polarAxis = this.parent.plotArea.polarAxis;\n var center = polarAxis.box.center();\n return center;\n },\n\n strokeSegments: function() {\n var segments = this._strokeSegments;\n\n if (!segments) {\n var center = this._polarAxisCenter();\n var curveProcessor = new CurveProcessor(false);\n var linePoints = this.points();\n\n linePoints.push(center);\n segments = this._strokeSegments = curveProcessor.process(linePoints);\n segments.pop();\n }\n\n return segments;\n }\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([ center.x, center.y ]);\n\n fillPath.segments.unshift(centerSegment);\n fillPath.segments.push(centerSegment);\n }\n });\n\n var PolarAreaChart = PolarLineChart.extend({\n createSegment: function(linePoints, currentSeries, seriesIx) {\n var style = (currentSeries.line || {}).style;\n var segment;\n\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\n createMissingValue: function(value, missingValues) {\n var missingValue;\n\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\n return missingValue;\n },\n\n seriesMissingValues: function(series) {\n return series.missingValues || ZERO;\n },\n\n _hasMissingValuesGap: function() {\n var this$1$1 = this;\n\n var series = this.options.series;\n\n for (var idx = 0; idx < series.length; idx++) {\n if (this$1$1.seriesMissingValues(series[idx]) === GAP) {\n return true;\n }\n }\n },\n\n sortPoints: function(points) {\n var this$1$1 = this;\n\n points.sort(xComparer);\n\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$1.seriesMissingValues(point.series) === GAP) {\n delete points[idx];\n }\n }\n }\n }\n\n return points;\n }\n });\n\n function xComparer(a, b) {\n return a.value.x - b.value.x;\n }\n\n var PolarPlotArea = PolarPlotAreaBase.extend({\n createPolarAxis: function() {\n var polarAxis = new dataviz.PolarAxis(this.options.xAxis, this.chartService);\n\n this.polarAxis = polarAxis;\n this.axisX = polarAxis;\n this.appendAxis(polarAxis);\n },\n\n valueAxisOptions: function(defaults) {\n return deepExtend(defaults, {\n majorGridLines: { type: ARC },\n minorGridLines: { type: ARC }\n }, this.options.yAxis);\n },\n\n createValueAxis: function() {\n PolarPlotAreaBase.fn.createValueAxis.call(this);\n this.axisY = this.valueAxis;\n },\n\n appendChart: function(chart, pane) {\n this.valueAxisRangeTracker.update(chart.yAxisRanges);\n\n PlotAreaBase.prototype.appendChart.call(this, chart, pane);\n },\n\n createCharts: function() {\n var series = this.filterVisibleSeries(this.series);\n var pane = this.panes[0];\n\n this.createLineChart(\n filterSeriesByType(series, [ POLAR_LINE ]),\n pane\n );\n\n this.createScatterChart(\n filterSeriesByType(series, [ POLAR_SCATTER ]),\n pane\n );\n\n this.createAreaChart(\n filterSeriesByType(series, [ POLAR_AREA ]),\n pane\n );\n },\n\n createLineChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n var lineChart = new PolarLineChart(this, { series: series });\n\n this.appendChart(lineChart, pane);\n },\n\n createScatterChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n var scatterChart = new PolarScatterChart(this, { series: series });\n\n this.appendChart(scatterChart, pane);\n },\n\n createAreaChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n var areaChart = new PolarAreaChart(this, { series: series });\n\n this.appendChart(areaChart, pane);\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 xValue = this.axisX.getValue(point);\n var yValue = this.axisY.getValue(point);\n\n if (xValue !== null && yValue !== null) {\n chart.trigger(eventType, {\n element: eventElement(e),\n x: xValue,\n y: yValue\n });\n }\n },\n\n createCrosshairs: function() {}\n });\n\n setDefaultOptions(PolarPlotArea, {\n xAxis: {},\n yAxis: {}\n });\n\n deepExtend(PolarPlotArea.prototype, PlotAreaEventsMixin);\n\n function groupBySeriesIx(segments) {\n var seriesSegments = [];\n for (var idx = 0; idx < segments.length; idx++) {\n var segment = segments[idx];\n seriesSegments[segment.seriesIx] = seriesSegments[segment.seriesIx] || [];\n seriesSegments[segment.seriesIx].push(segment);\n }\n\n return seriesSegments;\n }\n\n var RadarLineChart = LineChart.extend({\n pointSlot: function(categorySlot, valueSlot) {\n var valueRadius = categorySlot.center.y - valueSlot.y1;\n var slot = Point.onCircle(categorySlot.center, categorySlot.middle(), valueRadius);\n\n return new Box(slot.x, slot.y, slot.x, slot.y);\n },\n\n renderSegments: function() {\n LineChart.fn.renderSegments.call(this);\n\n if (this._segments && this._segments.length > 1) {\n var seriesSegments = groupBySeriesIx(this._segments);\n\n for (var idx = 0; idx < seriesSegments.length; idx++) {\n var segments = seriesSegments[idx];\n if (segments && segments.length > 1) {\n var firstPoint = segments[0].linePoints[0];\n var lastSegment = last(segments);\n var lastPoint = last(lastSegment.linePoints);\n var isFirstDataPoint = firstPoint.categoryIx === 0;\n var isLastDataPoint = lastPoint.categoryIx === lastPoint.categoriesCount - 1;\n if (isFirstDataPoint && isLastDataPoint) {\n last(segments).linePoints.push(firstPoint);\n }\n }\n }\n }\n },\n\n createSegment: function(linePoints, currentSeries, seriesIx) {\n var style = currentSeries.style;\n var pointType;\n\n if (style === SMOOTH) {\n pointType = SplineSegment;\n } else {\n pointType = LineSegment;\n }\n\n var segment = new pointType(linePoints, currentSeries, seriesIx);\n var missingValues = this.seriesMissingValues(currentSeries);\n\n if (linePoints.length === currentSeries.data.length || missingValues === INTERPOLATE) {\n segment.options.closed = true;\n }\n\n return segment;\n }\n });\n\n setDefaultOptions(RadarLineChart, {\n clip: false,\n limitPoints: false\n });\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\n if (isStacked && seriesIx > 0 && prevSegment) {\n stackPoints = prevSegment.linePoints.slice(0);\n previousSegment = prevSegment;\n }\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\n return segment;\n },\n\n seriesMissingValues: function(series) {\n return series.missingValues || ZERO;\n }\n });\n\n var RadarSegment = DonutSegment.extend({\n init: function(value, options) {\n DonutSegment.fn.init.call(this, value, null, options);\n }\n });\n\n setDefaultOptions(RadarSegment, {\n overlay: {\n gradient: \"none\"\n },\n labels: {\n distance: 10\n }\n });\n\n var RadarClusterLayout = ChartElement.extend({\n init: function(options) {\n ChartElement.fn.init.call(this, options);\n\n this.forEach = options.rtl ? forEachReverse : forEach;\n },\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\n this.forEach(children, function (child) {\n var slotSector = sector.clone();\n slotSector.startAngle = angle;\n slotSector.angle = slotAngle;\n\n if (child.sector) {\n slotSector.radius = child.sector.radius;\n }\n\n child.reflow(slotSector);\n child.sector = slotSector;\n\n angle += slotAngle + (slotAngle * spacing);\n });\n }\n });\n\n setDefaultOptions(RadarClusterLayout, {\n gap: 1,\n spacing: 0\n });\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\n this.box = new Box();\n\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\n var RadarBarChart = BarChart.extend({\n pointType: function() {\n return RadarSegment;\n },\n\n clusterType: function() {\n return RadarClusterLayout;\n },\n\n stackType: function() {\n return RadarStackLayout;\n },\n\n categorySlot: function(categoryAxis, categoryIx) {\n return categoryAxis.getSlot(categoryIx);\n },\n\n pointSlot: function(categorySlot, valueSlot) {\n var slot = categorySlot.clone();\n var y = categorySlot.center.y;\n\n slot.radius = y - valueSlot.y1;\n slot.innerRadius = y - valueSlot.y2;\n\n return slot;\n },\n\n reflowPoint: function(point, pointSlot) {\n point.sector = pointSlot;\n point.reflow();\n },\n\n createAnimation: function() {\n this.options.animation.center = this.box.toRect().center();\n BarChart.fn.createAnimation.call(this);\n }\n });\n\n RadarBarChart.prototype.reflow = CategoricalChart.prototype.reflow;\n\n setDefaultOptions(RadarBarChart, {\n clip: false,\n limitPoints: false,\n animation: {\n type: \"pie\"\n }\n });\n\n var RadarPlotArea = PolarPlotAreaBase.extend({\n createPolarAxis: function() {\n var categoryAxis = new dataviz.RadarCategoryAxis(this.options.categoryAxis, this.chartService);\n\n this.polarAxis = categoryAxis;\n this.categoryAxis = categoryAxis;\n this.appendAxis(categoryAxis);\n this.aggregateCategories();\n this.createCategoryAxesLabels();\n },\n\n valueAxisOptions: function(defaults) {\n if (this._hasBarCharts) {\n deepExtend(defaults, {\n majorGridLines: { type: ARC },\n minorGridLines: { type: ARC }\n });\n }\n\n if (this._isStacked100) {\n deepExtend(defaults, {\n roundToMajorUnit: false,\n labels: { format: \"P0\" }\n });\n }\n\n return deepExtend(defaults, this.options.valueAxis);\n },\n\n aggregateCategories: function() {\n // No separate panes in radar charts\n CategoricalPlotArea.prototype.aggregateCategories.call(this, this.panes);\n },\n\n createCategoryAxesLabels: function() {\n CategoricalPlotArea.prototype.createCategoryAxesLabels.call(this, this.panes);\n },\n\n filterSeries: function(currentSeries) {\n // Not supported for radar charts\n return currentSeries;\n },\n\n createCharts: function() {\n var series = this.filterVisibleSeries(this.series);\n var pane = this.panes[0];\n\n this.createAreaChart(\n filterSeriesByType(series, [ RADAR_AREA ]),\n pane\n );\n\n this.createLineChart(\n filterSeriesByType(series, [ RADAR_LINE ]),\n pane\n );\n\n this.createBarChart(\n filterSeriesByType(series, [ RADAR_COLUMN ]),\n pane\n );\n },\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\n if (options.isStacked100) {\n this._isStacked100 = true;\n }\n }\n\n return options;\n },\n\n createAreaChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n var areaChart = new RadarAreaChart(this, this.chartOptions(series));\n this.appendChart(areaChart, pane);\n },\n\n createLineChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n var lineChart = new RadarLineChart(this, this.chartOptions(series));\n this.appendChart(lineChart, pane);\n },\n\n createBarChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n var firstSeries = series[0];\n var options = this.chartOptions(series);\n options.gap = firstSeries.gap;\n options.spacing = firstSeries.spacing;\n\n var barChart = new RadarBarChart(this, options);\n this.appendChart(barChart, pane);\n\n this._hasBarCharts = true;\n },\n\n seriesCategoryAxis: function() {\n return this.categoryAxis;\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 category = this.categoryAxis.getCategory(point);\n var value = this.valueAxis.getValue(point);\n\n if (category !== null && value !== null) {\n chart.trigger(eventType, {\n element: eventElement(e),\n category: category,\n value: value\n });\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\n setDefaultOptions(RadarPlotArea, {\n categoryAxis: {\n categories: []\n },\n valueAxis: {}\n });\n\n var FunnelSegment = ChartElement.extend({\n init: function(value, options, segmentOptions) {\n ChartElement.fn.init.call(this, options);\n\n this.value = value;\n this.options.index = segmentOptions.index;\n },\n\n reflow: function(chartBox) {\n var points = this.points;\n var label = this.children[0];\n\n this.box = new Box(points[0].x, points[0].y, points[1].x, points[2].y);\n\n if (label) {\n label.reflow(new Box(chartBox.x1, points[0].y, chartBox.x2, points[2].y));\n }\n },\n\n createVisual: function() {\n var this$1$1 = this;\n\n var options = this.options;\n var visual;\n\n ChartElement.fn.createVisual.call(this);\n\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 () { return this$1$1.createPath(); }\n });\n } else {\n visual = this.createPath();\n }\n\n if (visual) {\n this.visual.append(visual);\n }\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\n return path;\n },\n\n createHighlight: function(style) {\n return Path.fromPoints(this.points, style);\n },\n\n highlightVisual: function() {\n return this.visual.children[0];\n },\n\n highlightVisualArgs: function() {\n var path = Path.fromPoints(this.points).close();\n\n return {\n options: this.options,\n path: path\n };\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\n formatValue: function(format) {\n var point = this;\n return point.owner.formatPointValue(point, format);\n }\n });\n\n setDefaultOptions(FunnelSegment, {\n color: WHITE,\n border: {\n width: 1\n }\n });\n\n deepExtend(FunnelSegment.prototype, PointEventsMixin);\n\n var FunnelChart = ChartElement.extend({\n init: function(plotArea, options) {\n ChartElement.fn.init.call(this, options);\n\n this.plotArea = plotArea;\n this.points = [];\n this.labels = [];\n this.legendItems = [];\n this.render();\n },\n\n formatPointValue: function(point, format) {\n return this.chartService.format.auto(format,point.value);\n },\n\n render: function() {\n var this$1$1 = this;\n\n var ref = this;\n var options = ref.options;\n var seriesColors = ref.plotArea.options.seriesColors; if (seriesColors === void 0) { seriesColors = []; }\n var series = options.series[0];\n var data = series.data;\n\n if (!data) {\n return;\n }\n\n var ref$1 = bindSegments(series);\n var total = ref$1.total;\n var points = ref$1.points;\n\n for (var i = 0; i < points.length; i++) {\n var pointData = points[i];\n\n if (!pointData) {\n continue;\n }\n\n var fields = pointData.fields;\n\n if (!isFunction(series.color)) {\n series.color = fields.color || seriesColors[i % seriesColors.length];\n }\n\n fields = deepExtend({\n index: i,\n owner: this$1$1,\n series: series,\n dataItem: data[i],\n percentage: pointData.value / total\n }, fields, { visible: pointData.visible });\n\n var value = pointData.valueFields.value;\n var segment = this$1$1.createSegment(value, fields);\n var label = this$1$1.createLabel(value, fields);\n\n if (segment && label) {\n segment.append(label);\n }\n }\n },\n\n evalSegmentOptions: function(options, value, fields) {\n var series = fields.series;\n\n evalOptions(options, {\n value: value,\n series: series,\n dataItem: fields.dataItem,\n index: fields.index\n }, { defaults: series._defaults, excluded: [ \"data\", \"content\", \"template\", \"toggle\", \"visual\" ] });\n },\n\n createSegment: function(value, fields) {\n var seriesOptions = deepExtend({}, fields.series);\n this.evalSegmentOptions(seriesOptions, value, fields);\n\n this.createLegendItem(value, seriesOptions, fields);\n\n if (fields.visible !== false) {\n\n var segment = new FunnelSegment(value, seriesOptions, fields);\n $.extend(segment, fields);\n\n this.append(segment);\n this.points.push(segment);\n\n return segment;\n }\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\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\n if (!labels.color) {\n labels.color = dataviz.autoTextColor(series.color);\n if (!labels.background) {\n labels.background = series.color;\n }\n }\n\n this.evalSegmentOptions(labels, value, fields);\n var textBox = new TextBox(text, deepExtend({\n vAlign: labels.position\n }, labels), data);\n\n this.labels.push(textBox);\n\n return textBox;\n }\n },\n\n labelPadding: function() {\n var labels = this.labels;\n var padding = { left: 0, 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\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\n return padding;\n },\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\n for (var idx = 0; idx < segments.length; idx++) {\n if (segments[idx].percentage > maxSegment.percentage) {\n maxSegment = segments[idx];\n }\n }\n\n var lastUpperSide = (firstSegment.percentage / maxSegment.percentage) * width;\n var previousOffset = (width - lastUpperSide) / 2;\n var previousHeight = 0;\n\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\n if (!percentage) {\n offset = nextPercentage ? 0 : width / 2;\n } else {\n offset = (width - lastUpperSide * (nextPercentage / percentage)) / 2;\n }\n\n offset = limitValue(offset, 0, width);\n\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\n previousOffset = offset;\n previousHeight += height + options.segmentSpacing;\n lastUpperSide = limitValue(width - 2 * offset, 0, width);\n }\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\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\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\n reflow: function(chartBox) {\n var points = this.points;\n var count = points.length;\n\n if (!count) {\n return;\n }\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\n if (options.dynamicSlope) {\n this.dynamicSlopeReflow(box, width, totalHeight);\n } else {\n this.constantSlopeReflow(box, width, totalHeight);\n }\n\n for (var idx = 0; idx < count; idx++) {\n points[idx].reflow(chartBox);\n }\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\n deepExtend(FunnelChart.prototype, PieChartMixin);\n\n var FunnelPlotArea = PlotAreaBase.extend({\n render: function() {\n this.createFunnelChart(this.series);\n },\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\n this.appendChart(funnelChart);\n },\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\n // Linear color scale from the given color to white minus minimum lightness offset.\n var colorScale = function (color, minLightnessOffset) {\n if (minLightnessOffset === void 0) { minLightnessOffset = 0.05; }\n\n var baseColor = kendo.parseColor(color);\n var offset = 1 - minLightnessOffset;\n\n return function (value) {\n var hsl = baseColor.toHSL();\n var range = 100 - hsl.l;\n var point = offset - value;\n hsl.l += Math.min(point * range, range);\n\n return hsl.toCss();\n };\n };\n\n var HeatmapPoint = ChartElement.extend({\n init: function(value, options) {\n ChartElement.fn.init.call(this);\n\n this.options = options;\n this.color = options.color || WHITE;\n this.value = value;\n },\n\n render: function() {\n if (this._rendered) {\n return;\n }\n\n this._rendered = true;\n\n this.createMarker();\n this.createLabel();\n this.createNote();\n },\n\n createLabel: function() {\n var options = this.options;\n var labels = options.labels;\n\n if (labels.visible) {\n var pointData = this.pointData();\n var labelTemplate = getTemplate(labels);\n var labelText;\n var labelColor = labels.color;\n\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else {\n labelText = this.formatValue(labels.format);\n }\n\n if (!labelColor) {\n labelColor = dataviz.autoTextColor(this.color);\n }\n\n this.label = new TextBox(labelText,\n 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 },\n labels, {\n color: labelColor\n }),\n pointData\n );\n this.append(this.label);\n }\n },\n\n formatValue: function(format) {\n return this.owner.formatPointValue(this, format);\n },\n\n reflow: function(targetBox) {\n this.render();\n\n var label = this.label;\n\n this.box = targetBox;\n\n if (label) {\n label.reflow(this.markerBox());\n }\n\n if (this.note) {\n this.note.reflow(targetBox);\n }\n\n this.marker.reflow(this.markerBox());\n },\n\n markerBox: function() {\n var options = this.options;\n var markers = options.markers;\n var border = markers.border;\n var rect = this.box.toRect();\n var type = valueOrDefault(markers.type, 'rect');\n var isRoundRect = type === datavizConstants.ROUNDED_RECT;\n var borderWidth = valueOrDefault(border.width, isRoundRect ? 1 : 0);\n var halfBorderWidth = Math.round(borderWidth / 2);\n\n if (markers.size) {\n var center = rect.center();\n rect.size.width = rect.size.height = markers.size;\n rect.origin.x = Math.round(center.x - rect.size.width / 2);\n rect.origin.y = Math.round(center.y - rect.size.height / 2);\n }\n\n rect.size.width -= borderWidth;\n rect.size.height -= borderWidth;\n rect.origin.y += halfBorderWidth + 0.5;\n rect.origin.x += halfBorderWidth + 0.5;\n\n return dataviz.rectToBox(rect);\n },\n\n markerBorder: function() {\n var options = this.options;\n var markers = options.markers;\n var border = markers.border;\n var opacity = valueOrDefault(border.opacity, options.opacity);\n\n return {\n color: border.color || this.color,\n width: border.width,\n opacity: opacity,\n dashType: border.dashType\n };\n },\n\n createMarker: function() {\n var options = this.options;\n var markerOptions = options.markers;\n var marker = new ShapeElement({\n type: valueOrDefault(markerOptions.type, 'rect'),\n width: markerOptions.size,\n height: markerOptions.size,\n rotation: markerOptions.rotation,\n background: this.color,\n border: this.markerBorder(),\n borderRadius: markerOptions.borderRadius,\n opacity: this.series.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\n this.marker = marker;\n this.append(marker);\n },\n\n createHighlight: function(style) {\n var options = this.options;\n var markerOptions = this.options.highlight.markers || this.options.markers;\n\n var highlight = new ShapeElement({\n type: valueOrDefault(markerOptions.type, 'rect'),\n width: markerOptions.size,\n height: markerOptions.size,\n rotation: markerOptions.rotation,\n background: markerOptions.color || this.color,\n border: this.markerBorder(),\n borderRadius: markerOptions.borderRadius,\n opacity: this.series.opacity || options.opacity,\n zIndex: valueOrDefault(options.zIndex, this.series.zIndex)\n });\n\n highlight.reflow(this.markerBox());\n var visual = highlight.getElement();\n\n visual.options.fill = style.fill;\n visual.options.stroke = style.stroke;\n\n return visual;\n },\n\n highlightVisual: function() {\n return this.rectVisual;\n },\n\n highlightVisualArgs: function() {\n return {\n options: this.options,\n rect: this.box.toRect(),\n visual: this.rectVisual\n };\n },\n\n tooltipAnchor: function() {\n var left = this.box.center().x;\n var top = this.box.y1 - TOOLTIP_OFFSET;\n\n return {\n point: new Point(left, top),\n align: {\n horizontal: CENTER,\n vertical: BOTTOM\n }\n };\n },\n\n overlapsBox: function(box) {\n return this.box.overlaps(box);\n },\n\n unclipElements: function() {\n /* noop, clip labels */\n },\n\n pointData: function() {\n return {\n x: this.value.x,\n y: this.value.y,\n value: this.value.value,\n dataItem: this.dataItem,\n series: this.series\n };\n }\n });\n\n deepExtend(HeatmapPoint.prototype, PointEventsMixin);\n deepExtend(HeatmapPoint.prototype, NoteMixin);\n\n HeatmapPoint.prototype.defaults = {\n markers: {\n type: 'rect',\n borderRadius: 4,\n border: {\n color: 'transparent'\n }\n },\n padding: { top: 1 },\n labels: {\n visible: false,\n padding: 3\n },\n opacity: 1,\n notes: {\n label: {}\n }\n };\n\n var HeatmapChart = ChartElement.extend({\n init: function(plotArea, options) {\n ChartElement.fn.init.call(this, options);\n\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this._initFields();\n\n this.render();\n },\n\n _initFields: function() {\n this.points = [];\n this.seriesOptions = [];\n this.valueRange = { min: MAX_VALUE, max: MIN_VALUE };\n this._evalSeries = [];\n },\n\n render: function() {\n this.setRange();\n this.traverseDataPoints(this.addValue.bind(this));\n },\n\n setRange: function() {\n var this$1$1 = this;\n\n var ref = this;\n var series = ref.options.series;\n\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n\n for (var pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\n var ref$1 = this$1$1._bindPoint(currentSeries, seriesIx, pointIx);\n var valueFields = ref$1.valueFields;\n if (defined(valueFields.value) && valueFields.value !== null) {\n this$1$1.valueRange.min = Math.min(this$1$1.valueRange.min, valueFields.value);\n this$1$1.valueRange.max = Math.max(this$1$1.valueRange.max, valueFields.value);\n }\n }\n }\n },\n\n addValue: function(value, fields) {\n var point;\n if (value && defined(value.value) && value.value !== null) {\n point = this.createPoint(value, fields);\n if (point) {\n $.extend(point, fields);\n }\n }\n\n this.points.push(point);\n },\n\n evalPointOptions: function(options, value, fields) {\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var state = { defaults: series._defaults, excluded: [ \"data\", \"tooltip\", \"content\", \"template\", \"visual\", \"toggle\" ] };\n\n var doEval = this._evalSeries[seriesIx];\n if (!defined(doEval)) {\n this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\n }\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 min: this.valueRange.min,\n max: this.valueRange.max\n }, state);\n }\n\n return pointOptions;\n },\n\n pointType: function() {\n return HeatmapPoint;\n },\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: {\n opacity: series.opacity\n },\n tooltip: {\n format: this.options.tooltip.format\n },\n labels: {\n format: this.options.labels.format\n }\n }, series);\n }\n\n return options;\n },\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\n pointOptions = this.evalPointOptions(pointOptions, value, fields);\n\n if (isFunction(series.color)) {\n color = pointOptions.color;\n } else if (this.valueRange.max !== 0) {\n var scale = colorScale(color);\n color = scale(value.value / this.valueRange.max);\n }\n\n var point = new HeatmapPoint(value, pointOptions);\n point.color = color;\n\n this.append(point);\n\n return point;\n },\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\n if (!xAxis) {\n throw new Error(\"Unable to locate X axis with name \" + xAxisName);\n }\n\n if (!yAxis) {\n throw new Error(\"Unable to locate Y axis with name \" + yAxisName);\n }\n\n return { xAxis: xAxis, yAxis: yAxis };\n },\n\n reflow: function(targetBox) {\n var this$1$1 = this;\n\n var chartPoints = this.points;\n var limit = !this.options.clip;\n var pointIx = 0;\n\n this.traverseDataPoints(function (value, fields) {\n var point = chartPoints[pointIx++];\n var ref = this$1$1.seriesAxes(fields.series);\n var xAxis = ref.xAxis;\n var yAxis = ref.yAxis;\n var indexX = xAxis.categoryIndex(value.x);\n var indexY = yAxis.categoryIndex(value.y);\n var slotX = xAxis.getSlot(indexX, indexX, limit);\n var slotY = yAxis.getSlot(indexY, indexY, limit);\n\n if (point) {\n if (slotX && slotY) {\n var pointSlot = this$1$1.pointSlot(slotX, slotY);\n point.reflow(pointSlot);\n } else {\n point.visible = false;\n }\n }\n });\n\n this.box = targetBox;\n },\n\n pointSlot: function(slotX, slotY) {\n return new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\n },\n\n traverseDataPoints: function(callback) {\n var this$1$1 = this;\n\n var ref = this;\n var series = ref.options.series;\n\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var ref$1 = this$1$1.seriesAxes(currentSeries);\n var xAxis = ref$1.xAxis;\n var yAxis = ref$1.yAxis;\n var xRange = xAxis.currentRangeIndices();\n var yRange = yAxis.currentRangeIndices();\n\n for (var pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\n var ref$2 = this$1$1._bindPoint(currentSeries, seriesIx, pointIx);\n var value = ref$2.valueFields;\n var fields = ref$2.fields;\n var xIndex = xAxis.totalIndex(value.x);\n var yIndex = yAxis.totalIndex(value.y);\n var xIn = xRange.min <= xIndex && xIndex <= xRange.max;\n var yIn = yRange.min <= yIndex && yIndex <= yRange.max;\n\n if (xIn && yIn) {\n callback(value, deepExtend({\n pointIx: pointIx,\n series: currentSeries,\n seriesIx: seriesIx,\n dataItem: currentSeries.data[pointIx],\n owner: this$1$1\n }, fields));\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.value);\n },\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(HeatmapChart, {\n series: [],\n tooltip: {\n format: \"{0}, {1}: {2}\"\n },\n labels: {\n format: \"{2}\"\n },\n clip: true\n });\n deepExtend(HeatmapChart.prototype, {\n _bindPoint: CategoricalChart.prototype._bindPoint\n });\n\n var HeatmapPlotArea = PlotAreaBase.extend({\n initFields: function() {\n this.namedXAxes = {};\n this.namedYAxes = {};\n },\n\n render: function(panes) {\n if (panes === void 0) { panes = this.panes; }\n\n this.bindCategories();\n this.createAxes(panes);\n this.createCharts(panes);\n this.createAxisLabels();\n },\n\n bindCategories: function() {\n var this$1$1 = this;\n\n var series = this.srcSeries || this.series;\n\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n var data = currentSeries.data || [];\n var ref = this$1$1.seriesAxes(currentSeries);\n var xAxis = ref.xAxis;\n var yAxis = ref.yAxis;\n\n var xCategories = dataviz.createHashSet(xAxis.categories || []);\n var yCategories = dataviz.createHashSet(yAxis.categories || []);\n\n for (var pointIndex = 0; pointIndex < data.length; pointIndex++) {\n var ref$1 = SeriesBinder.current.bindPoint(currentSeries, pointIndex).valueFields;\n var x = ref$1.x;\n var y = ref$1.y;\n\n if (!xCategories.has(x)) {\n xCategories.add(x);\n }\n\n if (!yCategories.has(y)) {\n yCategories.add(y);\n }\n }\n\n xAxis.categories = xCategories.values();\n yAxis.categories = yCategories.values();\n }\n },\n\n createCharts: function(panes) {\n var this$1$1 = this;\n\n var seriesByPane = this.groupSeriesByPane();\n\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$1.addToLegend(paneSeries);\n var filteredSeries = this$1$1.filterVisibleSeries(paneSeries);\n\n if (!filteredSeries) {\n continue;\n }\n\n this$1$1.createHeatmapChart(\n filterSeriesByType(filteredSeries, [ HEATMAP ]),\n pane\n );\n }\n },\n\n createHeatmapChart: function(series, pane) {\n var chart = new HeatmapChart(this, {\n series: series\n });\n\n this.appendChart(chart, pane);\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) { return a.name === xAxisName; })[0];\n var yAxisName = series.yAxis;\n var yAxisOptions = [].concat(options.yAxis);\n var yAxis = grep(yAxisOptions, function(a) { return a.name === yAxisName; })[0];\n var panes = options.panes || [ {} ];\n var defaultPaneName = panes[0].name || \"default\";\n var paneName = (xAxis || {}).pane || (yAxis || {}).pane || defaultPaneName;\n\n return paneName;\n },\n\n seriesAxes: function(series) {\n var xAxis;\n var yAxis;\n\n var options = this.options;\n\n var xAxisOptions = [].concat(options.xAxis);\n var xAxisName = series.xAxis;\n if (xAxisName) {\n xAxis = xAxisOptions.find(function (axis) { return axis.name === xAxisName; });\n } else {\n xAxis = xAxisOptions[0];\n }\n\n var yAxisOptions = [].concat(options.yAxis);\n var yAxisName = series.yAxis;\n if (yAxisName) {\n yAxis = yAxisOptions.find(function (axis) { return axis.name === yAxisName; });\n } else {\n yAxis = yAxisOptions[0];\n }\n\n if (!xAxis) {\n throw new Error(\"Unable to locate X axis with name \" + xAxisName);\n }\n\n if (!yAxis) {\n throw new Error(\"Unable to locate Y axis with name \" + yAxisName);\n }\n\n return { xAxis: xAxis, yAxis: yAxis };\n },\n\n createAxisLabels: function() {\n var axes = this.axes;\n for (var i = 0; i < axes.length; i++) {\n axes[i].createLabels();\n }\n },\n\n createXYAxis: function(options, vertical, axisIndex) {\n var axisName = options.name;\n var namedAxes = vertical ? this.namedYAxes : this.namedXAxes;\n var axisOptions = $.extend({\n axisCrossingValue: 0\n }, options, {\n vertical: vertical,\n reverse: (vertical || this.chartService.rtl) ? !options.reverse : options.reverse,\n justified: false\n });\n var firstCategory = axisOptions.categories ? axisOptions.categories[0] : null;\n var typeSamples = [ axisOptions.min, axisOptions.max, firstCategory ];\n var series = this.series;\n\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\n break;\n }\n }\n\n var inferredDate;\n\n for (var i = 0; i < typeSamples.length; i++) {\n if (typeSamples[i] instanceof Date) {\n inferredDate = true;\n break;\n }\n }\n\n var axisType;\n if (equalsIgnoreCase(axisOptions.type, DATE) || (!axisOptions.type && inferredDate)) {\n axisType = dataviz.DateCategoryAxis;\n } else {\n axisType = CategoryAxis;\n }\n\n var axis = new axisType(axisOptions, this.chartService);\n axis.axisIndex = axisIndex;\n\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\n this.appendAxis(axis);\n axis.mapCategories();\n\n return axis;\n },\n\n createAxes: function(panes) {\n var this$1$1 = this;\n\n var options = this.options;\n var xAxesOptions = [].concat(options.xAxis);\n var xAxes = [];\n var yAxesOptions = [].concat(options.yAxis);\n var yAxes = [];\n\n for (var idx = 0; idx < xAxesOptions.length; idx++) {\n var axisPane = this$1$1.findPane(xAxesOptions[idx].pane);\n if (inArray(axisPane, panes)) {\n xAxes.push(this$1$1.createXYAxis(xAxesOptions[idx], false, idx));\n }\n }\n\n for (var idx$1 = 0; idx$1 < yAxesOptions.length; idx$1++) {\n var axisPane$1 = this$1$1.findPane(yAxesOptions[idx$1].pane);\n if (inArray(axisPane$1, panes)) {\n yAxes.push(this$1$1.createXYAxis(yAxesOptions[idx$1], true, idx$1));\n }\n }\n\n this.axisX = this.axisX || xAxes[0];\n this.axisY = this.axisY || yAxes[0];\n },\n\n removeAxis: function(axis) {\n var axisName = axis.options.name;\n\n PlotAreaBase.fn.removeAxis.call(this, axis);\n\n if (axis.options.vertical) {\n delete this.namedYAxes[axisName];\n } else {\n delete this.namedXAxes[axisName];\n }\n\n if (axis === this.axisX) {\n delete this.axisX;\n }\n\n if (axis === this.axisY) {\n delete this.axisY;\n }\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 allAxes = this.axes;\n var length = allAxes.length;\n var xValues = [];\n var yValues = [];\n\n for (var i = 0; i < length; i++) {\n var axis = allAxes[i];\n var values = axis.options.vertical ? yValues : xValues;\n appendIfNotNull(values, axis.getCategory(point));\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\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\n updateAxisOptions$2(this.options, index, vertical, options);\n updateAxisOptions$2(this.originalOptions, index, vertical, options);\n },\n\n crosshairOptions: function(axis) {\n // Stack the crosshair above the series points.\n return $.extend({}, axis.options.crosshair, { zIndex: 0 });\n }\n });\n\n function updateAxisOptions$2(targetOptions, axisIndex, vertical, options) {\n var axisOptions = ([].concat(vertical ? targetOptions.yAxis : targetOptions.xAxis))[axisIndex];\n deepExtend(axisOptions, options);\n }\n\n setDefaultOptions(HeatmapPlotArea, {\n xAxis: {},\n yAxis: {}\n });\n\n deepExtend(HeatmapPlotArea.prototype, PlotAreaEventsMixin);\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\n PlotAreaFactory.current.register(CategoricalPlotArea, [\n BAR, COLUMN, LINE, VERTICAL_LINE, AREA, VERTICAL_AREA,\n CANDLESTICK, OHLC, BULLET, VERTICAL_BULLET, BOX_PLOT, VERTICAL_BOX_PLOT,\n RANGE_COLUMN, RANGE_BAR, WATERFALL, HORIZONTAL_WATERFALL, RANGE_AREA, VERTICAL_RANGE_AREA\n ]);\n\n PlotAreaFactory.current.register(XYPlotArea, [\n SCATTER, SCATTER_LINE, BUBBLE\n ]);\n\n PlotAreaFactory.current.register(PiePlotArea, [ PIE ]);\n PlotAreaFactory.current.register(DonutPlotArea, [ DONUT ]);\n PlotAreaFactory.current.register(FunnelPlotArea, [ FUNNEL ]);\n\n PlotAreaFactory.current.register(PolarPlotArea, [ POLAR_AREA, POLAR_LINE, POLAR_SCATTER ]);\n PlotAreaFactory.current.register(RadarPlotArea, [ RADAR_AREA, RADAR_COLUMN, RADAR_LINE ]);\n\n PlotAreaFactory.current.register(HeatmapPlotArea, [ HEATMAP ]);\n\n SeriesBinder.current.register(\n [ BAR, COLUMN, LINE, VERTICAL_LINE, AREA, VERTICAL_AREA ],\n [ VALUE ], [ CATEGORY, COLOR, NOTE_TEXT, ERROR_LOW_FIELD, ERROR_HIGH_FIELD ]\n );\n\n SeriesBinder.current.register(\n [ RANGE_COLUMN, RANGE_BAR, RANGE_AREA, VERTICAL_RANGE_AREA ],\n [ FROM, TO ], [ CATEGORY, COLOR, NOTE_TEXT ]\n );\n\n SeriesBinder.current.register(\n [ WATERFALL, HORIZONTAL_WATERFALL ],\n [ VALUE ], [ CATEGORY, COLOR, NOTE_TEXT, SUMMARY_FIELD ]\n );\n\n SeriesBinder.current.register([ POLAR_AREA, POLAR_LINE, POLAR_SCATTER ], [ X, Y ], [ COLOR ]);\n SeriesBinder.current.register([ RADAR_AREA, RADAR_COLUMN, RADAR_LINE ], [ VALUE ], [ COLOR ]);\n\n SeriesBinder.current.register(\n [ FUNNEL ],\n [ VALUE ], [ CATEGORY, COLOR, \"visibleInLegend\", \"visible\" ]\n );\n\n DefaultAggregates.current.register(\n [ BAR, COLUMN, LINE, VERTICAL_LINE, AREA, VERTICAL_AREA, WATERFALL, HORIZONTAL_WATERFALL ],\n { value: MAX, color: FIRST, noteText: FIRST, errorLow: MIN, errorHigh: MAX }\n );\n\n DefaultAggregates.current.register(\n [ RANGE_COLUMN, RANGE_BAR, RANGE_AREA, VERTICAL_RANGE_AREA ],\n { from: MIN, to: MAX, color: FIRST, noteText: FIRST }\n );\n\n DefaultAggregates.current.register(\n [ RADAR_AREA, RADAR_COLUMN, RADAR_LINE ],\n { value: MAX, color: FIRST }\n );\n\n SeriesBinder.current.register(\n [ SCATTER, SCATTER_LINE, BUBBLE ],\n [ X, Y ], [ COLOR, NOTE_TEXT, X_ERROR_LOW_FIELD, X_ERROR_HIGH_FIELD, Y_ERROR_LOW_FIELD, Y_ERROR_HIGH_FIELD ]\n );\n\n SeriesBinder.current.register(\n [ BUBBLE ], [ X, Y, \"size\" ], [ COLOR, CATEGORY, NOTE_TEXT ]\n );\n\n SeriesBinder.current.register(\n [ HEATMAP ],\n [ X, Y, VALUE ], [ COLOR, NOTE_TEXT ]\n );\n\n SeriesBinder.current.register(\n [ CANDLESTICK, OHLC ],\n [ \"open\", \"high\", \"low\", \"close\" ], [ CATEGORY, COLOR, \"downColor\", NOTE_TEXT ]\n );\n\n DefaultAggregates.current.register(\n [ CANDLESTICK, OHLC ],\n { open: MAX, high: MAX, low: MIN, close: MAX,\n color: FIRST, downColor: FIRST, noteText: FIRST }\n );\n\n SeriesBinder.current.register(\n [ BOX_PLOT, VERTICAL_BOX_PLOT ],\n [ \"lower\", \"q1\", \"median\", \"q3\", \"upper\", \"mean\", \"outliers\" ], [ CATEGORY, COLOR, NOTE_TEXT ]\n );\n\n DefaultAggregates.current.register(\n [ BOX_PLOT, VERTICAL_BOX_PLOT ],\n { lower: MAX, q1: MAX, median: MAX, q3: MAX, upper: MAX, mean: MAX, outliers: FIRST,\n color: FIRST, noteText: FIRST }\n );\n\n SeriesBinder.current.register(\n [ BULLET, VERTICAL_BULLET ],\n [ \"current\", \"target\" ], [ CATEGORY, COLOR, \"visibleInLegend\", NOTE_TEXT ]\n );\n\n DefaultAggregates.current.register(\n [ BULLET, VERTICAL_BULLET ],\n { current: MAX, target: MAX, color: FIRST, noteText: FIRST }\n );\n\n SeriesBinder.current.register(\n [ PIE, DONUT ],\n [ VALUE ], [ CATEGORY, COLOR, \"explode\", \"visibleInLegend\", \"visible\" ]\n );\n\n var AXIS_NAMES = [ CATEGORY, VALUE, X, Y ];\n\n var MOUSEMOVE = \"mousemove\";\n var CONTEXTMENU = \"contextmenu\";\n var MOUSELEAVE = \"mouseleave\";\n var MOUSEMOVE_DELAY = 20;\n\n var Chart = Class.extend({\n init: function(element, userOptions, themeOptions, context) {\n var this$1$1 = this;\n if (context === void 0) { context = {}; }\n\n this.observers = [];\n this.addObserver(context.observer);\n this.chartService = new services.ChartService(this, context);\n this.chartService.theme = themeOptions;\n\n this._initElement(element);\n\n var options = deepExtend({}, this.options, userOptions);\n this._originalOptions = deepExtend({}, options);\n this._theme = themeOptions;\n this._initTheme(options, themeOptions);\n\n this._initHandlers();\n this._initSurface();\n\n this.bindCategories();\n dataviz.FontLoader.preloadFonts(userOptions, function () {\n this$1$1.fontLoaded = true;\n if (!this$1$1._destroyed) {\n this$1$1.trigger('init');\n this$1$1._redraw();\n this$1$1._attachEvents();\n }\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\n _setElementClass: function(element) {\n dataviz.addClass(element, \"k-chart\");\n },\n\n _initTheme: function(options, themeOptions) {\n var seriesCopies = [];\n var series = options.series || [];\n\n for (var i = 0; i < series.length; i++) {\n seriesCopies.push($.extend({}, series[i]));\n }\n options.series = seriesCopies;\n\n resolveAxisAliases(options);\n this.applyDefaults(options, themeOptions);\n\n // Clean up default if not overriden by data attributes\n if (options.seriesColors === null) {\n delete options.seriesColors;\n }\n\n this.options = deepExtend({}, themeOptions, options);\n this.applySeriesColors();\n },\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\n return {\n width: width,\n height: height\n };\n },\n\n resize: function(force) {\n var size = this.getSize();\n var currentSize = this._size;\n var hasSize = size.width > 0 || size.height > 0;\n\n if (force || hasSize && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this._size = size;\n this._resize(size, force);\n this.trigger(\"resize\", size);\n } else if (hasSize && this._selections && dataviz.find(this._selections, function (s) { return !s.visible; })) {\n this._destroySelections();\n this._setupSelection();\n }\n },\n\n _resize: function() {\n this._noTransitionsRedraw();\n },\n\n redraw: function(paneName) {\n this.applyDefaults(this.options);\n this.applySeriesColors();\n\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\n getAxis: function(name) {\n return findAxisByName(name, this._plotArea.axes);\n },\n\n findAxisByName: function(name) {\n return this.getAxis(name);\n },\n\n findPaneByName: function(name) {\n var panes = this._plotArea.panes;\n\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\n findPaneByIndex: function(idx) {\n var panes = this._plotArea.panes;\n if (panes[idx]) {\n return new ChartPane(panes[idx]);\n }\n },\n\n plotArea: function() {\n return new ChartPlotArea(this._plotArea);\n },\n\n toggleHighlight: function(show, filter) {\n var plotArea = this._plotArea;\n var firstSeries = (plotArea.srcSeries || plotArea.series || [])[0];\n var points;\n\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\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\n if (points) {\n this.togglePointsHighlight(show, points);\n }\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\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\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\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\n hideTooltip: function() {\n this._tooltip.hide();\n },\n\n _initSurface: function() {\n var surface = this.surface;\n var wrap = this._surfaceWrap();\n\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\n if (!surface || surface.options.type !== this.options.renderAs) {\n this._destroySurface();\n\n this.surface = drawing.Surface.create(wrap, {\n type: this.options.renderAs\n });\n\n this.surface.bind(\"mouseenter\", this._surfaceMouseenterHandler);\n this.surface.bind(\"mouseleave\", this._surfaceMouseleaveHandler);\n\n } else {\n this.surface.clear();\n this.surface.resize();\n }\n },\n\n _surfaceWrap: function() {\n return this.element;\n },\n\n _redraw: function() {\n var model = this._getModel();\n this._size = {\n width: model.options.width,\n height: model.options.height\n };\n\n this._destroyView();\n\n this._model = model;\n this._plotArea = model._plotArea;\n\n model.renderVisual();\n\n if (this.options.transitions !== false) {\n model.traverse(function(element) {\n if (element.animation) {\n element.animation.setup();\n }\n });\n }\n\n this._initSurface();\n this.surface.draw(model.visual);\n\n if (this.options.transitions !== false) {\n model.traverse(function(element) {\n if (element.animation) {\n element.animation.play();\n }\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\n this.trigger(RENDER);\n triggerPaneRender(this._plotArea.panes);\n\n if (!this._navState) {\n this._cancelDomEvents();\n }\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\n clearMissingValues(this._originalOptions, options);\n this.options = deepExtend({}, this._originalOptions, options);\n this._initTheme(this.options, this._theme);\n this.bindCategories();\n\n var model = this._getModel();\n\n model.renderVisual();\n triggerPaneRender(model._plotArea.panes);\n\n visual = model.visual;\n\n this.options = currentOptions;\n } else {\n visual = this.surface.exportVisual();\n }\n\n return visual;\n },\n\n _sharedTooltip: function() {\n return this._plotArea instanceof CategoricalPlotArea && this.options.tooltip && this.options.tooltip.shared;\n },\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\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\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\n _toggleDragZoomEvents: function() {\n var pannable = this.options.pannable;\n var zoomable = this.options.zoomable;\n var selection = (zoomable || {}).selection;\n var mousewheel = (zoomable || {}).mousewheel;\n var allowDrag = !pannable && (zoomable === false || selection === false) && !this.requiresHandlers([ DRAG_START, DRAG, DRAG_END ]);\n var allowZoom = (zoomable === false || mousewheel === false) && !this.requiresHandlers([ ZOOM_START, ZOOM, ZOOM_END ]);\n var element = this.element;\n\n if (this._dragZoomEnabled && allowDrag && allowZoom) {\n element.style.touchAction = this._touchAction || '';\n this._dragZoomEnabled = false;\n } else if (!this._dragZoomEnabled && !(allowDrag && allowZoom)) {\n element.style.touchAction = \"none\";\n\n this._dragZoomEnabled = true;\n }\n\n this._toggleDomEvents(!allowDrag, !allowZoom);\n },\n\n _toggleDomEvents: function(drag, zoom) {\n var domEvents = this.domEvents;\n if (!domEvents) {\n return;\n }\n\n if (domEvents.toggleDrag) {\n domEvents.toggleDrag(drag);\n }\n\n if (domEvents.toggleZoom) {\n domEvents.toggleZoom(zoom);\n }\n },\n\n _createTooltip: function() {\n var ref = this;\n var tooltipOptions = ref.options.tooltip;\n var tooltip;\n\n if (this._sharedTooltip()) {\n tooltip = this._createSharedTooltip(tooltipOptions);\n } else {\n tooltip = new Tooltip(this.chartService, tooltipOptions);\n }\n\n return tooltip;\n },\n\n _createSharedTooltip: function(options) {\n return new SharedTooltip(this._plotArea, options);\n },\n\n applyDefaults: function(options, themeOptions) {\n applyAxisDefaults(options, themeOptions);\n applySeriesDefaults(options, themeOptions);\n },\n\n applySeriesColors: function() {\n var options = this.options;\n var series = options.series;\n var colors = options.seriesColors || [];\n\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\n currentSeries.color = currentSeries.color || seriesColor;\n if (defaults) {\n defaults.color = defaults.color || seriesColor;\n }\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\n var title = Title.buildTitle(options.title);\n var subtitle = Title.buildTitle(options.subtitle, {\n align: options.title.align,\n position: options.title.position\n });\n model.append.apply(model, Title.orderTitles([title, subtitle]));\n\n if (options.legend && options.legend.visible) {\n model.append(new Legend(plotArea.options.legend, this.chartService));\n }\n model.append(plotArea);\n model.reflow();\n\n return model;\n },\n\n _modelOptions: function() {\n var options = this.options;\n var size = this.getSize();\n\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\n _createPlotArea: function(skipSeries) {\n var options = this.options;\n\n var plotArea = PlotAreaFactory.current.create(skipSeries ? [] : options.series, options, this.chartService);\n\n return plotArea;\n },\n\n _setupSelection: function() {\n var this$1$1 = this;\n\n var ref = this;\n var axes = ref._plotArea.axes;\n var selections = this._selections = [];\n\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\n var selection = new Selection(this$1$1, axis,\n deepExtend({ min: range.min, max: range.max }, options.select)\n );\n\n selections.push(selection);\n }\n }\n },\n\n _selectStart: function(e) {\n return this.trigger(SELECT_START, e);\n },\n\n _select: function(e) {\n return this.trigger(SELECT, e);\n },\n\n _selectEnd: function(e) {\n return this.trigger(SELECT_END, e);\n },\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\n this._mousemove = kendo.throttle(\n this._mousemove.bind(this),\n MOUSEMOVE_DELAY\n );\n },\n\n addObserver: function(observer) {\n if (observer) {\n this.observers.push(observer);\n }\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\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\n trigger: function(name, args) {\n if (args === void 0) { args = {}; }\n\n if (name === SHOW_TOOLTIP) {\n args.anchor.point = this._toDocumentCoordinates(args.anchor.point);\n }\n args.sender = this;\n\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\n return isDefaultPrevented;\n },\n\n _attachEvents: function() {\n var element = this.element;\n\n this._touchAction = element.style.touchAction;\n\n var obj;\n bindEvents(element, ( obj = {}, obj[ CONTEXTMENU ] = this._clickHandler, obj[ MOUSEWHEEL ] = this._mousewheelHandler, obj[ MOUSELEAVE ] = this._mouseleaveHandler, obj ));\n\n if (this._shouldAttachMouseMove()) {\n var obj$1;\n bindEvents(element, ( obj$1 = {}, obj$1[ MOUSEMOVE ] = this._mousemove, obj$1 ));\n }\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\n this._toggleDragZoomEvents();\n },\n\n _mouseleave: function(e) {\n if (this._hoveredPoint) {\n this._hoveredPoint.out(this, e);\n this._hoveredPoint = null;\n }\n\n if (this._plotArea.hovered) {\n this.trigger(PLOT_AREA_LEAVE);\n this._plotArea.hovered = false;\n }\n },\n\n _cancelDomEvents: function() {\n if (this.domEvents && this.domEvents.cancel) {\n this.domEvents.cancel();\n }\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\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\n _gesturechange: function(e) {\n var mousewheelZoom = this._mousewheelZoom;\n\n if (mousewheelZoom && !this._stopChartHandlers(e)) {\n e.preventDefault();\n var previousGestureDistance = this._gestureDistance;\n var scaleDelta = -e.distance / previousGestureDistance + 1;\n\n if (Math.abs(scaleDelta) >= 0.1) {\n scaleDelta = Math.round(scaleDelta * 10);\n\n this._gestureDistance = e.distance;\n var args = { delta: scaleDelta, axisRanges: axisRanges(this._plotArea.axes), originalEvent: e };\n if (this._zooming || !this.trigger(ZOOM_START, args)) {\n var coords = this._eventCoordinates(e);\n\n if (!this._zooming) {\n this._zooming = true;\n }\n\n var ranges = args.axisRanges = mousewheelZoom.updateRanges(scaleDelta, coords);\n if (ranges && !this.trigger(ZOOM, args)) {\n mousewheelZoom.zoom();\n }\n }\n }\n }\n },\n\n _mouseout: function(e) {\n if (e.element) {\n var element = this._drawingChartElement(e.element, e);\n\n if (element && element.leave) {\n element.leave(this, e.originalEvent);\n }\n }\n },\n\n _start: function(e) {\n var coords = this._eventCoordinates(e);\n\n if (this._stopChartHandlers(e) || !this._plotArea.backgroundContainsPoint(coords)) {\n return;\n }\n\n if (this.requiresHandlers([ DRAG_START, DRAG, DRAG_END ])) {\n this._startNavigation(e, coords, DRAG_START);\n }\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\n if (this._zoomSelection) {\n if (this._zoomSelection.start(e)) {\n this.trigger(ZOOM_START, { axisRanges: axisRanges(this._plotArea.axes), 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\n if (this._stopChartHandlers(e)) {\n return;\n }\n\n if (pannable) {\n var ranges = pannable.move(e);\n\n if (ranges && !this.trigger(DRAG, { axisRanges: ranges, originalEvent: e })) {\n pannable.pan();\n }\n } else if (state) {\n var ranges$1 = {};\n var axes = state.axes;\n\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\n if (delta !== 0) {\n ranges$1[currentAxis.options.name] = currentAxis.translateRange(delta);\n }\n }\n }\n\n state.axisRanges = ranges$1;\n this.trigger(DRAG, {\n axisRanges: ranges$1,\n originalEvent: e\n });\n }\n\n if (this._zoomSelection) {\n this._zoomSelection.move(e);\n }\n },\n\n _end: function(e) {\n if (this._stopChartHandlers(e)) {\n return;\n }\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\n if (this._zoomSelection) {\n var ranges = this._zoomSelection.end(e);\n if (ranges && !this.trigger(ZOOM, { axisRanges: ranges, originalEvent: e })) {\n this._zoomSelection.zoom();\n this.trigger(ZOOM_END, { axisRanges: ranges, originalEvent: e });\n }\n }\n },\n\n _stopChartHandlers: function(e) {\n var selections = this._selections || [];\n if (!selections.length) {\n return false;\n }\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\n _mousewheelZoomRate: function() {\n var zoomable = this.options.zoomable;\n var mousewheel = (zoomable || {}).mousewheel || {};\n return valueOrDefault(mousewheel.rate, MOUSEWHEEL_ZOOM_RATE);\n },\n\n _mousewheel: function(e) {\n var this$1$1 = this;\n\n var delta = dataviz.mousewheelDelta(e);\n var mousewheelZoom = this._mousewheelZoom;\n var coords = this._eventCoordinates(e);\n\n if (this._stopChartHandlers(e) || !this._plotArea.backgroundContainsPoint(coords)) {\n return;\n }\n\n if (mousewheelZoom) {\n var args = { delta: delta, axisRanges: axisRanges(this._plotArea.axes), originalEvent: e };\n if (this._zooming || !this.trigger(ZOOM_START, args)) {\n e.preventDefault();\n\n if (!this._zooming) {\n this._unsetActivePoint();\n this.surface.suspendTracking();\n this._zooming = true;\n }\n\n if (this._mwTimeout) {\n clearTimeout(this._mwTimeout);\n }\n\n args.axisRanges = mousewheelZoom.updateRanges(delta, coords);\n if (args.axisRanges && !this.trigger(ZOOM, args)) {\n mousewheelZoom.zoom();\n }\n\n this._mwTimeout = setTimeout(function () {\n this$1$1.trigger(ZOOM_END, args);\n this$1$1._zooming = false;\n if (this$1$1.surface) {\n this$1$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\n if (state) {\n var totalDelta = state.totalDelta || delta;\n state.totalDelta = totalDelta + delta;\n\n var axes = this._navState.axes;\n var ranges = {};\n\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 * this$1$1._mousewheelZoomRate(), coords);\n }\n }\n\n this.trigger(ZOOM, {\n delta: delta,\n axisRanges: ranges,\n originalEvent: e\n });\n\n if (this._mwTimeout) {\n clearTimeout(this._mwTimeout);\n }\n\n this._mwTimeout = setTimeout(function () {\n this$1$1._endNavigation(e, ZOOM_END);\n }, MOUSEWHEEL_DELAY);\n }\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\n if (!pane) {\n return;\n }\n\n var ranges = axisRanges(axes);\n\n var prevented = this.trigger(chartEvent, {\n axisRanges: ranges,\n originalEvent: e\n });\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\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\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\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\n if (chartElement) {\n if (chartElement.aliasFor) {\n chartElement = chartElement.aliasFor(e, this._eventCoordinates(e));\n }\n\n if (match) {\n chartElement = chartElement.closest(match);\n if (chartElement && chartElement.aliasFor) {\n chartElement = chartElement.aliasFor();\n }\n }\n\n return chartElement;\n }\n },\n\n _eventCoordinates: function(e) {\n var coordinates = dataviz.eventCoordinates(e);\n return this._toModelCoordinates(coordinates.x, coordinates.y);\n },\n\n _elementPadding: function() {\n if (!this._padding) {\n var ref = elementStyles(this.element, [ \"paddingLeft\", \"paddingTop\" ]);\n var paddingLeft = ref.paddingLeft;\n var paddingTop = ref.paddingTop;\n this._padding = {\n top: paddingTop,\n left: paddingLeft\n };\n }\n\n return this._padding;\n },\n\n _toDocumentCoordinates: function(point) {\n var padding = this._elementPadding();\n var offset = dataviz.elementOffset(this.element);\n\n return {\n left: round(point.x + padding.left + offset.left),\n top: round(point.y + padding.top + offset.top)\n };\n },\n\n _toModelCoordinates: function(clientX, clientY) {\n var element = this.element;\n var offset = dataviz.elementOffset(element);\n var padding = this._elementPadding();\n var inverseTransform = dataviz.elementScale(element).invert();\n var point = new GeometryPoint(\n clientX - offset.left - padding.left,\n clientY - offset.top - padding.top\n ).transform(inverseTransform);\n\n return new Point(point.x, point.y);\n },\n\n _tap: function(e) {\n var this$1$1 = this;\n\n var drawingElement = this.surface.eventTarget(e);\n var element = this._drawingChartElement(drawingElement, e);\n var sharedTooltip = this._sharedTooltip();\n\n if (!this._startHover(drawingElement, e) && !sharedTooltip) {\n this._unsetActivePoint();\n }\n\n if (sharedTooltip) {\n this._trackSharedTooltip(this._eventCoordinates(e), e, true);\n }\n\n this._propagateClick(element, e);\n\n //part of fix for hover issue on windows touch\n this.handlingTap = true;\n setTimeout(function () {\n this$1$1.handlingTap = false;\n }, 0);\n },\n\n _click: function(e) {\n var element = this._getChartElement(e);\n this._propagateClick(element, e);\n },\n\n _propagateClick: function(element, e) {\n var this$1$1 = this;\n\n var current = element;\n while (current) {\n if (current.click) {\n current.click(this$1$1, e);\n }\n\n current = current.parent;\n }\n },\n\n _startHover: function(element, e) {\n if (this._suppressHover) {\n return false;\n }\n\n var point = this._drawingChartElement(element, e, function(element) {\n return (element.hover || element.over) && !(element instanceof PlotAreaBase);\n });\n\n var activePoint = this._activePoint;\n var multipleSeries = this._plotArea.series.length > 1;\n var hasInactiveOpacity = this._hasInactiveOpacity();\n\n this._updateHoveredPoint(point, e);\n\n if (point && activePoint !== point && point.hover) {\n this._activePoint = point;\n\n if (!this._sharedTooltip() && !point.hover(this, e)) {\n this._displayTooltip(point);\n\n if (hasInactiveOpacity) {\n this._displayInactiveOpacity(point, multipleSeries);\n } else {\n this._highlight.show(point);\n }\n }\n } else if (!point && hasInactiveOpacity) {\n if (multipleSeries && this._activeChartInstance) {\n this._updateSeriesOpacity(point, true);\n this._applySeriesOpacity(this._activeChartInstance.children, null, true);\n this._activeChartInstance = null;\n }\n this._highlight && this._highlight.hide();\n this._activePoint = null;\n }\n\n return point;\n },\n\n _displayTooltip: function(point) {\n var tooltipOptions = deepExtend({}, this.options.tooltip, point.options.tooltip);\n if (tooltipOptions.visible) {\n this._tooltip.show(point);\n }\n },\n\n _displayInactiveOpacity: function(activePoint, multipleSeries, highlightPoints) {\n var chartInstance = this._activeChartInstance = this._chartInstanceFromPoint(activePoint);\n if (!chartInstance) {\n return;\n }\n\n if (multipleSeries) {\n this._updateSeriesOpacity(activePoint);\n this._applySeriesOpacity(chartInstance.children, null, true);\n this._applySeriesOpacity(chartInstance.children, activePoint.series);\n this._highlight.show(highlightPoints || activePoint);\n } else {\n var inactivePoints;\n\n if (!chartInstance.supportsPointInactiveOpacity()) {\n this._highlight.show(activePoint);\n return;\n }\n\n inactivePoints = this._getInactivePoints(activePoint, chartInstance);\n\n if (inactivePoints && inactivePoints.length) {\n this._highlight.show(inactivePoints, 1 - this._getInactiveOpacityForSeries(activePoint.series));\n }\n }\n },\n\n _getInactivePoints: function(activePoint, chartInstance) {\n var allPoints = this._getAllPointsOfType(chartInstance, activePoint.constructor);\n\n return allPoints.filter(function (point) { return point !== activePoint; });\n },\n\n _getAllPointsOfType: function(container, type) {\n var this$1$1 = this;\n\n var points = [];\n\n for (var i = 0; i < container.children.length; i++) {\n var element = container.children[i];\n\n if (element.constructor === type) {\n points.push(element);\n } else if (element.children && element.children.length) {\n points = points.concat(this$1$1._getAllPointsOfType(element, type));\n }\n }\n\n return points;\n },\n\n _updateHoveredPoint: function(point, e) {\n var hoveredPoint = this._hoveredPoint;\n\n if (hoveredPoint && hoveredPoint !== point) {\n hoveredPoint.out(this, e);\n this._hoveredPoint = null;\n }\n\n if (point && hoveredPoint !== point && point.over) {\n this._hoveredPoint = point;\n point.over(this, e);\n }\n },\n\n _updateSeriesOpacity: function(point, resetOpacity) {\n var this$1$1 = this;\n\n var plotArea = this._plotArea;\n var length = plotArea.series.length;\n\n for (var i = 0; i < length; i++) {\n var currSeries = plotArea.series[i];\n var defaultOpacity = this$1$1._getDefaultOpacityForSeries(currSeries);\n var inactiveOpacity = this$1$1._getInactiveOpacityForSeries(currSeries);\n\n if (!resetOpacity && currSeries !== point.series) {\n currSeries.defaultOpacity = defaultOpacity;\n currSeries.opacity = inactiveOpacity;\n\n if (currSeries.line) {\n currSeries.line.opacity = inactiveOpacity;\n }\n } else {\n currSeries.opacity = defaultOpacity;\n\n if (currSeries.line) {\n currSeries.line.opacity = defaultOpacity;\n }\n }\n }\n },\n\n _applySeriesOpacity: function(elements, activeSeries, reset, series) {\n var this$1$1 = this;\n\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n var currSeries = element.series || series;\n var shouldHighlight = currSeries && (currSeries.highlight || {}).visible;\n\n if (shouldHighlight && element.visual) {\n var opacity = series ? series.opacity : element.series.opacity;\n if (currSeries !== activeSeries || reset) {\n element.visual.opacity(reset ? 1 : opacity);\n }\n }\n\n if (element.children && element.children.length) {\n this$1$1._applySeriesOpacity(element.children, activeSeries, reset, element.series);\n }\n }\n },\n\n _chartInstanceFromPoint: function(point) {\n var chartInstance = point.parent;\n\n while (chartInstance && !chartInstance.plotArea) {\n chartInstance = chartInstance.parent;\n }\n\n return chartInstance;\n },\n\n _hasInactiveOpacity: function() {\n var hasDefaultInactiveOpacity = this.options.seriesDefaults.highlight.inactiveOpacity !== undefined;\n var hasInactiveOpacity = this.options.series.filter(function (s) { return s.highlight.inactiveOpacity !== undefined; } ).length > 0;\n return hasDefaultInactiveOpacity || hasInactiveOpacity;\n },\n\n _getInactiveOpacityForSeries: function(series) {\n var defaultInactiveOpacity = this.options.seriesDefaults.highlight.inactiveOpacity;\n var seriesInactiveOpacity = series.highlight.inactiveOpacity;\n return seriesInactiveOpacity || defaultInactiveOpacity || series.opacity || datavizConstants.DEFAULT_SERIES_OPACITY;\n },\n\n _getDefaultOpacityForSeries: function(series) {\n return series.defaultOpacity || series.opacity || datavizConstants.DEFAULT_SERIES_OPACITY;\n },\n\n _mouseover: function(e) {\n var point = this._startHover(e.element, e.originalEvent);\n\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\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\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\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\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\n _mousemove: function(e) {\n var coords = this._eventCoordinates(e);\n var plotArea = this._plotArea;\n\n this._trackCrosshairs(coords);\n\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\n if (this._sharedTooltip()) {\n this._trackSharedTooltip(coords, e);\n }\n },\n\n _trackCrosshairs: function(coords) {\n var crosshairs = this._plotArea.crosshairs;\n\n for (var i = 0; i < crosshairs.length; i++) {\n var current = crosshairs[i];\n\n if (current.box.containsPoint(coords)) {\n current.showAt(coords);\n } else {\n current.hide();\n }\n }\n },\n\n _trackSharedTooltip: function(coords, e, toggle) {\n if (this._suppressHover) {\n return;\n }\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\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\n if (points.length > 0 && !this.trigger(SERIES_HOVER, hoverArgs)) {\n if (tooltipOptions.visible) {\n tooltip.showAt(points, coords);\n }\n\n highlight.show(points);\n\n this._sharedHighlight = true;\n } else {\n tooltip.hide();\n }\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\n hideElements: function(options) {\n var plotArea = this._plotArea;\n this._mousemove.cancel();\n\n plotArea.hideCrosshairs();\n\n this._unsetActivePoint(options);\n },\n\n _unsetActivePoint: function(options) {\n var ref = this;\n var tooltip = ref._tooltip;\n var highlight = ref._highlight;\n\n this._activePoint = null;\n this._hoveredPoint = null;\n\n if (tooltip && !(options && options.keepTooltipOpen)) {\n tooltip.hide();\n }\n\n this._tooltipCategoryIx = null;\n this._sharedHighlight = false;\n\n if (highlight) {\n highlight.hide();\n }\n },\n\n _deferRedraw: function() {\n this._redraw();\n },\n\n _clearRedrawTimeout: function() {\n if (this._redrawTimeout) {\n clearInterval(this._redrawTimeout);\n this._redrawTimeout = null;\n }\n },\n\n bindCategories: function() {\n var this$1$1 = this;\n\n var options = this.options;\n var definitions = [].concat(options.categoryAxis);\n\n for (var axisIx = 0; axisIx < definitions.length; axisIx++) {\n var axis = definitions[axisIx];\n if (axis.autoBind !== false) {\n this$1$1.bindCategoryAxisFromSeries(axis, axisIx);\n }\n }\n },\n\n bindCategoryAxisFromSeries: function(axis, axisIx) {\n var this$1$1 = this;\n\n var series = this.options.series;\n var seriesLength = series.length;\n var uniqueCategories = new dataviz.HashMap();//perf improvement in case type category with dates\n var items = [];\n var bindable = false;\n var dateAxis;\n\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\n if (bind && dataLength > 0) {\n dateAxis = isDateAxis(axis, getField(s.categoryField, data[0]));\n\n var getFn = dateAxis ? getDateField : getField;\n\n for (var dataIx = 0; dataIx < dataLength; dataIx++) {\n var dataRow = data[dataIx];\n var category = getFn(s.categoryField, dataRow, this$1$1.chartService.intl);\n\n if (dateAxis || !uniqueCategories.get(category)) {\n items.push([ category, dataRow ]);\n\n if (!dateAxis) {\n uniqueCategories.set(category, true);\n }\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\n var result = transpose(items);\n axis.categories = result[0];\n } else if (bindable) {\n axis.categories = [];\n }\n },\n\n _isBindable: function(series) {\n var valueFields = SeriesBinder.current.valueFields(series);\n var result = true;\n\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\n if (!defined(series[field])) {\n result = false;\n break;\n }\n }\n\n return result;\n },\n\n _noTransitionsRedraw: function() {\n var options = this.options;\n var transitionsState;\n\n if (options.transitions !== false) {\n options.transitions = false;\n transitionsState = true;\n }\n\n this._redraw();\n\n if (transitionsState) {\n options.transitions = true;\n }\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\n if (inArray(currentSeries.type, [ PIE, DONUT, FUNNEL ])) {\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\n if (this._hasInactiveOpacity() && currentSeries.visible && items) {\n var multipleSeries = plotArea.series.length > 1;\n var point = items.length ? items[0] : items;\n\n this._displayInactiveOpacity(point, multipleSeries, items);\n } else {\n highlight.show(items);\n }\n },\n\n _shouldAttachMouseMove: function() {\n return this._plotArea.crosshairs.length || (this._tooltip && this._sharedTooltip()) || this.requiresHandlers([ PLOT_AREA_HOVER, PLOT_AREA_LEAVE ]);\n },\n\n updateMouseMoveHandler: function() {\n var obj;\n unbindEvents(this.element, ( obj = {}, obj[ MOUSEMOVE ] = this._mousemove, obj ));\n\n if (this._shouldAttachMouseMove()) {\n var obj$1;\n bindEvents(this.element, ( obj$1 = {}, obj$1[ MOUSEMOVE ] = this._mousemove, obj$1 ));\n }\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\n if (theme) {\n this._theme = theme;\n this.chartService.theme = theme;\n }\n this._initTheme(this.options, this._theme);\n\n this._toggleDragZoomEvents();\n },\n\n setOptions: function(options, theme) {\n this.applyOptions(options, theme);\n this.bindCategories();\n this.redraw();\n this.updateMouseMoveHandler();\n },\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\n setIntlService: function(intl) {\n this.chartService.intl = intl;\n },\n\n noTransitionsRedraw: function() {\n this._noTransitionsRedraw();\n },\n\n destroy: function() {\n this._destroyed = true;\n\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\n if (this.domEvents) {\n this.domEvents.destroy();\n delete this.domEvents;\n }\n\n if (this._mouseMoveTrackHandler) {\n var obj$1;\n unbindEvents(document, ( obj$1 = {}, obj$1[ MOUSEMOVE ] = this._mouseMoveTrackHandler, obj$1 ));\n }\n\n this._destroyView();\n\n this._destroySurface();\n\n this._clearRedrawTimeout();\n },\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\n this.surface = null;\n }\n },\n\n _destroySelections: function() {\n var selections = this._selections;\n\n if (selections) {\n while (selections.length > 0) {\n selections.shift().destroy();\n }\n }\n },\n\n _destroyView: function() {\n var model = this._model;\n\n if (model) {\n model.destroy();\n this._model = null;\n }\n\n this._unsetActivePoint();\n\n this._destroySelections();\n\n if (this._tooltip) {\n this._tooltip.destroy();\n }\n\n if (this._highlight) {\n this._highlight.destroy();\n }\n\n if (this._zoomSelection) {\n this._zoomSelection.destroy();\n delete this._zoomSelection;\n }\n\n if (this._pannable) {\n this._pannable.destroy();\n delete this._pannable;\n }\n\n if (this._mousewheelZoom) {\n this._mousewheelZoom.destroy();\n delete this._mousewheelZoom;\n }\n }\n });\n\n function resolveAxisAliases(options) {\n var aliases = AXIS_NAMES;\n\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\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\n function applyAxisDefaults(options, themeOptions) {\n var themeAxisDefaults = ((themeOptions || {}).axisDefaults) || {};\n var axisName, axisDefaults, axes;\n\n function mapAxisOptions(axisOptions) {\n var axisColor = (axisOptions || {}).color || axisDefaults.color;\n var result = deepExtend({},\n themeAxisDefaults,\n themeAxisDefaults[axisName],\n axisDefaults,\n axisDefaults[axisName], {\n line: { color: axisColor },\n labels: { color: axisColor },\n title: { color: axisColor }\n },\n axisOptions\n );\n\n delete result[axisName];\n\n return result;\n }\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\n axes = axes.map(mapAxisOptions);\n\n options[axisName] = axes.length > 1 ? axes : axes[0];\n }\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\n cleanupNestedSeriesDefaults(commonDefaults);\n cleanupNestedSeriesDefaults(commonThemeDefaults);\n\n for (var i = 0; i < seriesLength; i++) {\n var seriesType = series[i].type || options.seriesDefaults.type;\n\n var baseOptions = deepExtend(\n { data: [] },\n commonThemeDefaults,\n themeSeriesDefaults[seriesType],\n { tooltip: options.tooltip },\n commonDefaults,\n seriesDefaults[seriesType]\n );\n\n series[i]._defaults = baseOptions;\n series[i] = deepExtend({}, baseOptions, series[i]);\n series[i].data = series[i].data || [];\n }\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\n function axisRanges(axes) {\n var ranges = {};\n\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\n return ranges;\n }\n\n function sortDates(dates, comparer) {\n if (comparer === void 0) { 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\n return dates;\n }\n\n function uniqueDates(srcDates, comparer) {\n if (comparer === void 0) { comparer = dataviz.dateComparer; }\n\n var dates = sortDates(srcDates, comparer);\n var length = dates.length;\n var result = length > 0 ? [ dates[0] ] : [];\n\n for (var i = 1; i < length; i++) {\n if (comparer(dates[i], last(result)) !== 0) {\n result.push(dates[i]);\n }\n }\n\n return result;\n }\n\n function transpose(rows) {\n var rowCount = rows.length;\n var result = [];\n\n for (var rowIx = 0; rowIx < rowCount; rowIx++) {\n var row = rows[rowIx];\n var colCount = row.length;\n\n for (var colIx = 0; colIx < colCount; colIx++) {\n result[colIx] = result[colIx] || [];\n result[colIx].push(row[colIx]);\n }\n }\n\n return result;\n }\n\n var DATA_FIELDS = [ 'data', '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\n function triggerPaneRender(panes) {\n for (var idx = 0; idx < panes.length; idx++) {\n panes[idx].notifyRender();\n }\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: {\n visible: true\n },\n labels: {},\n negativeValues: {\n visible: false\n }\n },\n series: [],\n seriesColors: null,\n tooltip: {\n visible: false\n },\n transitions: true,\n valueAxis: {},\n plotArea: {},\n title: {},\n xAxis: {},\n yAxis: {},\n panes: [ {} ],\n pannable: false,\n zoomable: false\n });\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\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n\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 isArray = Array.isArray;\n var extend = $.extend;\n var template = kendo.template;\n\n var MOUSELEAVE_NS = \"mouseleave\" + NS;\n var AXIS_LABEL_CLICK = constants.AXIS_LABEL_CLICK;\n var LEGEND_ITEM_CLICK = constants.LEGEND_ITEM_CLICK;\n var LEGEND_ITEM_HOVER = constants.LEGEND_ITEM_HOVER;\n var LEGEND_ITEM_LEAVE = constants.LEGEND_ITEM_LEAVE;\n var SERIES_CLICK = constants.SERIES_CLICK;\n var SERIES_HOVER = constants.SERIES_HOVER;\n var SERIES_OVER = constants.SERIES_OVER;\n var SERIES_LEAVE = constants.SERIES_LEAVE;\n var PANE_RENDER = constants.PANE_RENDER;\n var PLOT_AREA_CLICK = constants.PLOT_AREA_CLICK;\n var PLOT_AREA_HOVER = constants.PLOT_AREA_HOVER;\n var PLOT_AREA_LEAVE = constants.PLOT_AREA_LEAVE;\n var DRAG = constants.DRAG;\n var DRAG_END = constants.DRAG_END;\n var DRAG_START = constants.DRAG_START;\n var ZOOM_START = constants.ZOOM_START;\n var ZOOM = constants.ZOOM;\n var ZOOM_END = constants.ZOOM_END;\n var SELECT_START = constants.SELECT_START;\n var SELECT = constants.SELECT;\n var SELECT_END = constants.SELECT_END;\n var RENDER = constants.RENDER;\n var NOTE_CLICK = constants.NOTE_CLICK;\n var NOTE_HOVER = constants.NOTE_HOVER;\n var NOTE_LEAVE = constants.NOTE_LEAVE;\n var DOCUMENT_ELEMENT = $(document.documentElement);\n\n var CHANGE = \"change\";\n var DATABOUND = \"dataBound\";\n var LEAVE = \"leave\";\n var MOUSEDOWN = \"down\";\n\n var VALUE = constants.VALUE;\n var PIE = constants.PIE;\n var DONUT = constants.DONUT;\n var FUNNEL = constants.FUNNEL;\n\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\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\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\n var Chart = Widget.extend({\n init: function(element, userOptions) {\n var dataSource;\n\n kendo.destroy(element);\n\n Widget.fn.init.call(this, element);\n\n if (userOptions) {\n dataSource = userOptions.dataSource;\n delete userOptions.dataSource;\n }\n\n this.options = deepExtend({}, this.options, userOptions);\n\n this.wrapper = this.element;\n this._attachEvents();\n\n if (userOptions) {\n userOptions.dataSource = dataSource;\n }\n\n this._seriesVisibility = new SeriesVisibilityState();\n\n this.bind(this.events, this.options);\n this._initDataSource(userOptions);\n\n kendo.notify(this, dataviz.ui);\n },\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\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\n items: function() {\n return $();\n },\n\n refresh: function() {\n var chart = this;\n var instance = chart._instance;\n instance.applyDefaults(chart.options);\n instance.applySeriesColors();\n\n chart._bindSeries();\n chart._bindCategories();\n\n chart.trigger(DATABOUND);\n chart._redraw();\n },\n\n getSize: function() {\n return kendo.dimensions(this.element);\n },\n\n redraw: function(paneName) {\n this._size = null;\n this._instance.redraw(paneName);\n },\n\n setOptions: function(options) {\n var chart = this,\n dataSource = options.dataSource;\n\n delete options.dataSource;\n\n Widget.fn._setEvents.call(chart, options);\n\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\n if (dataSource) {\n chart.setDataSource(dataSource);\n }\n\n if (chart._hasDataSource) {\n chart._onDataChanged();\n } else {\n chart._bindCategories();\n chart.redraw();\n }\n\n chart._instance.updateMouseMoveHandler();\n\n },\n\n setDataSource: function(dataSource) {\n var chart = this;\n\n chart.dataSource.unbind(CHANGE, chart._dataChangeHandler);\n chart.dataSource = dataSource = DataSource.create(dataSource);\n chart._hasDataSource = true;\n chart._hasData = false;\n\n dataSource.bind(CHANGE, chart._dataChangeHandler);\n\n if (chart.options.autoBind) {\n dataSource.fetch();\n }\n },\n\n destroy: function() {\n var chart = this,\n dataSource = chart.dataSource;\n\n chart.element.off(NS);\n\n if (dataSource) {\n dataSource.unbind(CHANGE, chart._dataChangeHandler);\n }\n\n if (chart._instance) {\n chart._instance.destroy();\n delete this._instance;\n }\n\n if (this._tooltip) {\n this._tooltip.destroy();\n delete this._tooltip;\n }\n\n this._destroyCrosshairTooltips();\n\n Widget.fn.destroy.call(chart);\n },\n\n findPaneByName: function(name) {\n var panes = this._plotArea.panes;\n\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\n findPaneByIndex: function(idx) {\n var panes = this._plotArea.panes;\n if (panes[idx]) {\n return new ChartPane(this, panes[idx]);\n }\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\n findSeriesByName: function(name) {\n return this._createSeries({ name: name });\n },\n\n findSeriesByIndex: function(index) {\n return this._createSeries({ index: index });\n },\n\n exportVisual: function(options) {\n var instance = this._instance;\n if (!instance) {\n return;\n }\n\n var visual;\n\n //TO DO: support for setting any options. already available in kendo-charts\n if (options && (options.width || options.height)) {\n var chartArea = instance.options.chartArea;\n var originalChartArea = instance._originalOptions.chartArea;\n\n deepExtend(chartArea, options);\n\n var model = instance._getModel();\n\n chartArea.width = originalChartArea.width;\n chartArea.height = originalChartArea.height;\n\n model.renderVisual();\n\n triggerPaneRender(model._plotArea.panes);\n\n visual = model.visual;\n } else {\n visual = instance.exportVisual();\n }\n\n return visual;\n },\n\n _createSeries: function(options) {\n var seriesOptions = this._seriesOptions(options);\n if (seriesOptions) {\n return new ChartSeries(this, seriesOptions);\n }\n },\n\n _seriesOptions: function(options) {\n var plotArea = this._plotArea;\n var series = plotArea.srcSeries || plotArea.series;\n var seriesOptions;\n\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\n return seriesOptions;\n },\n\n _attachEvents: function() {\n this.element.on(MOUSELEAVE_NS, this._mouseleave.bind(this));\n },\n\n _mouseleave: function(e) {\n var instance = this._instance;\n var tooltip = this._tooltip;\n var target = e.relatedTarget;\n\n if (!(target && $(target).closest(tooltip.element).length) && instance && !instance.handlingTap) {\n instance.hideElements({\n keepTooltipOpen: !tooltip.options.autoHide\n });\n }\n },\n\n _getThemeOptions: function(userOptions) {\n var themeName = (userOptions || {}).theme;\n\n if (themeName && dataviz.SASS_THEMES.indexOf(themeName.toLowerCase()) !== -1) {\n return dataviz.autoTheme().chart;\n }\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\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\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\n _onInit: function(e) {\n this._instance = e.sender;\n },\n\n _initDataSource: function(userOptions) {\n var chart = this,\n dataSource = (userOptions || {}).dataSource;\n\n chart._dataChangeHandler = chart._onDataChanged.bind(chart);\n\n chart.dataSource = DataSource\n .create(dataSource)\n .bind(\"change\", chart._dataChangeHandler);\n\n chart._bindCategories();\n\n if (dataSource) {\n chart._hasDataSource = true;\n }\n\n this._initChart();\n this._initTooltip();\n\n if (dataSource) {\n if (chart.options.autoBind) {\n chart.dataSource.fetch();\n }\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\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\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\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();\n }\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\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\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\n _initTooltip: function() {\n this._tooltip = this._createTooltip();\n\n this._tooltip.bind(LEAVE, this._tooltipleave.bind(this));\n },\n\n _onLegendItemClick: function(e) {\n if (!this.trigger(LEGEND_ITEM_CLICK, e)) {\n this._legendItemClick(e.seriesIndex, e.pointIndex);\n }\n },\n\n _legendItemClick: function(seriesIndex, pointIndex) {\n var chart = this._instance,\n plotArea = chart._plotArea,\n currentSeries = (plotArea.srcSeries || plotArea.series)[seriesIndex];\n\n if (chart._hasInactiveOpacity() && chart._activeChartInstance) {\n chart._updateSeriesOpacity(null, true);\n chart._applySeriesOpacity(chart._activeChartInstance.children, null, true);\n chart._activeChartInstance = null;\n }\n\n if ($.inArray(currentSeries.type, [PIE, DONUT, FUNNEL]) >= 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\n chart._noTransitionsRedraw();\n },\n\n _createTooltip: function() {\n return new Tooltip(this.element, extend({}, this.options.tooltip, {\n rtl: this._isRtl()\n }));\n },\n\n _tooltipleave: function() {\n if (this._instance) {\n this._instance.hideElements();\n }\n },\n\n _bindData: function(e) {\n var chart = this,\n options = chart.options,\n series = chart._sourceSeries || options.series,\n seriesIx,\n seriesLength = series.length,\n data = chart.dataSource.view(),\n grouped = (chart.dataSource.group() || []).length > 0,\n processedSeries = [],\n seriesVisibility = this._seriesVisibility,\n currentSeries,\n groupedSeries;\n\n seriesVisibility.read();\n\n for (seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\n currentSeries = series[seriesIx];\n\n if (chart._isBindable(currentSeries) && grouped) {\n groupedSeries = groupSeries(currentSeries, data);\n processedSeries = processedSeries.concat(groupedSeries);\n\n seriesVisibility.applyByGroup(groupedSeries, e);\n } else {\n currentSeries = extend({}, currentSeries);\n processedSeries.push(currentSeries);\n\n seriesVisibility.applyByIndex(currentSeries, e);\n }\n }\n\n chart._sourceSeries = series;\n options.series = processedSeries;\n this._instance.applySeriesColors();\n\n chart._bindSeries();\n chart._bindCategories();\n\n this._hasData = true;\n },\n\n _onDataChanged: function(e) {\n this._bindData(e);\n\n this.trigger(DATABOUND);\n if (this._instance && this._instance.fontLoaded) {\n this._redraw();\n }\n },\n\n _bindSeries: function() {\n var chart = this,\n data = chart.dataSource.view(),\n series = chart.options.series,\n seriesIx,\n seriesLength = series.length,\n currentSeries,\n groupIx,\n seriesData;\n\n for (seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\n currentSeries = series[seriesIx];\n\n if (chart._isBindable(currentSeries)) {\n groupIx = currentSeries._groupIx;\n seriesData = defined(groupIx) ? (data[groupIx] || {}).items : data;\n\n if (currentSeries.autoBind !== false) {\n currentSeries.data = seriesData;\n }\n }\n }\n },\n\n _bindCategories: function() {\n var chart = this,\n data = chart.dataSource.view() || [],\n grouped = (chart.dataSource.group() || []).length > 0,\n categoriesData = data,\n options = chart.options,\n definitions = [].concat(options.categoryAxis),\n axisIx,\n axis;\n\n if (grouped) {\n if (data.length) {\n categoriesData = data[0].items;\n }\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\n _bindCategoryAxis: function(axis, data, axisIx) {\n var count = (data || []).length,\n categoryIx,\n category,\n row;\n\n if (axis.field) {\n axis.categories = [];\n for (categoryIx = 0; categoryIx < count; categoryIx++) {\n row = data[categoryIx];\n\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\n _isBindable: function(series) {\n var valueFields = SeriesBinder.current.valueFields(series),\n result = true,\n field, i;\n\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\n if (!defined(series[field])) {\n result = false;\n break;\n }\n }\n\n return result;\n },\n\n _isRtl: function() {\n return kendo.support.isRtl(this.element) && this.element.css(\"direction\") === RTL;\n }\n });\n\n var proxyMembers = [\"getAxis\", \"findAxisByName\", \"plotArea\", \"toggleHighlight\", \"showTooltip\",\n \"hideTooltip\", \"_resize\", \"_redraw\", \"_noTransitionsRedraw\", \"_legendItemHover\", \"_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\n for (var idx = 0; idx < proxyMembers.length; idx++) {\n createProxyMember(proxyMembers[idx]);\n }\n\n function groupSeries(series, data) {\n var result = [],\n nameTemplate,\n legacyTemplate = series.groupNameTemplate,\n groupIx,\n dataLength = data.length,\n seriesClone;\n\n if (dataLength === 0) {\n seriesClone = deepExtend({}, series);\n seriesClone.visibleInLegend = false;\n return [seriesClone];\n }\n\n if (defined(legacyTemplate)) {\n kendo.logToConsole(\n \"'groupNameTemplate' is obsolete and will be removed in future versions. \" +\n \"Specify the group name template as 'series.name'\"\n );\n\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) ?\n \"#= group.value #: #= series.name #\" :\n \"#= group.value #\"\n );\n }\n }\n\n for (groupIx = 0; groupIx < dataLength; groupIx++) {\n seriesClone = deepExtend({}, series);\n\n if (!kendo.isFunction(seriesClone.color)) {\n seriesClone.color = undefined$1;\n }\n\n seriesClone._groupIx = groupIx;\n seriesClone._groupValue = data[groupIx].value;\n result.push(seriesClone);\n\n if (nameTemplate) {\n seriesClone.name = nameTemplate({\n series: seriesClone, group: data[groupIx]\n });\n }\n }\n\n return result;\n }\n\n dataviz.ExportMixin.extend(Chart.fn);\n\n if (kendo.PDFMixin) {\n kendo.PDFMixin.extend(Chart.fn);\n }\n\n dataviz.ui.plugin(Chart);\n\n var SeriesVisibilityState = Class.extend({\n init: function() {\n this.groups = {};\n this.index = {};\n this.options = {};\n },\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\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\n save: function(series) {\n if (!series) {\n return;\n }\n\n if (this.options.persistSeriesVisibility) {\n this.options.series[series.index].visible = series.visible;\n } else {\n this.saveState(series);\n }\n },\n\n setOptions: function(options) {\n this.options = options;\n this.groups = {};\n this.index = {};\n },\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\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\n var geom = kendo.geometry;\n\n function normalizeStyle(style) {\n for (var field in style) {\n if (style[field] === undefined$1) {\n style[field] = '';\n }\n }\n\n return style;\n }\n\n var Tooltip = Observable.extend({\n init: function(chartElement, options) {\n var tooltip = this;\n\n Observable.fn.init.call(tooltip);\n\n this.setOptions(options);\n\n tooltip.chartElement = chartElement;\n\n tooltip.template = Tooltip.template;\n if (!tooltip.template) {\n tooltip.template = Tooltip.template = kendo.template(\n \"
    \" +\n '
    ' +\n '#if (!d.autoHide) {#
    #}#' +\n \"
    \", { useWithBlock: false, paramName: \"d\" });\n }\n\n tooltip.element = $(tooltip.template(tooltip.options));\n\n tooltip.move = tooltip.move.bind(tooltip);\n tooltip._mouseleave = tooltip._mouseleave.bind(tooltip);\n\n var mobileScrollerSelector = kendo.format(\"[{0}='content'],[{0}='scroller']\", kendo.attr(\"role\"));\n tooltip._mobileScroller = chartElement.closest(mobileScrollerSelector).data(\"kendoMobileScroller\");\n tooltip.downEvent = kendo.applyEventMap(MOUSEDOWN, kendo.guid());\n tooltip._closeTooltipHandler = tooltip._closeTooltip.bind(tooltip);\n },\n\n destroy: function() {\n var tooltip = this;\n\n this._clearShowTimeout();\n DOCUMENT_ELEMENT.off(tooltip.downEvent, tooltip._closeTooltipHandler);\n if (this.element) {\n this.element.off(MOUSELEAVE_NS).remove();\n this.element = null;\n }\n },\n\n setOptions: function(options) {\n this.options = deepExtend({}, this.options, options);\n },\n\n options: {\n opacity: 1,\n animation: {\n duration: TOOLTIP_ANIMATION_DURATION\n },\n sharedTemplate:\n \"\" +\n \"\" +\n \"# for(var i = 0; i < points.length; i++) { #\" +\n \"# var point = points[i]; #\" +\n \"\" +\n \"# if(colorMarker) { # \" +\n \"\" +\n \"# } #\" +\n \"# if(nameColumn) { # \" +\n \"\" +\n \"# } #\" +\n \"\" +\n \"\" +\n \"# } #\" +\n \"
    #= categoryText #
    #if (point.series.name) {# #: point.series.name #: #} else {#   #}##= content(point) #
    \",\n categoryFormat: \"{0:d}\",\n autoHide: true\n },\n\n move: function() {\n var tooltip = this,\n options = tooltip.options,\n element = tooltip.element,\n offset;\n\n if (!tooltip.anchor || !tooltip.element) {\n return;\n }\n\n offset = tooltip._offset();\n if (!tooltip.visible) {\n element.css({ top: offset.top, left: offset.left });\n }\n\n tooltip.visible = true;\n tooltip._ensureElement(document.body);\n element\n .stop(true, true)\n .show()\n .animate({\n left: offset.left,\n top: offset.top\n }, options.animation.duration);\n },\n\n _clearShowTimeout: function() {\n if (this.showTimeout) {\n clearTimeout(this.showTimeout);\n this.showTimeout = null;\n }\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\n if (align.vertical === \"center\") {\n y -= size.height / 2;\n } else if (align.vertical === \"bottom\") {\n y -= size.height;\n }\n\n return {\n x: x,\n y: y\n };\n },\n\n _offset: function() {\n var tooltip = this,\n size = tooltip._measure(),\n anchor = tooltip.getAnchor(size),\n top = anchor.y,\n left = anchor.x,\n zoomLevel = kendo.support.zoomLevel(),\n viewport = $(window),\n scrollTop = window.pageYOffset || document.documentElement.scrollTop || 0,\n scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || 0,\n movable = (this._mobileScroller || {}).movable;\n\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, [movable.x, movable.y]);\n var point = new geom.Point(left, top).transform(transform);\n left = point.x;\n top = point.y;\n }\n\n return {\n top: top,\n left: left\n };\n },\n\n show: function(e) {\n var tooltip = this;\n\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\n var content = e.shared ? this._sharedContent(e) : this._pointContent(e.point);\n this.element.find('.k-tooltip-content').html(content);\n\n if (!tooltip.options.autoHide) {\n tooltip.element.off(\"click\" + NS).on(\"click\" + NS, \".k-tooltip-button\", tooltip._closeTooltipHandler);\n DOCUMENT_ELEMENT.off(tooltip.downEvent, tooltip._closeTooltipHandler)\n .on(tooltip.downEvent, tooltip._closeTooltipHandler);\n }\n\n this._clearShowTimeout();\n this.showTimeout = setTimeout(this.move, TOOLTIP_SHOW_DELAY);\n },\n\n hide: function(forceHide) {\n var tooltip = this;\n\n if (!tooltip.options.autoHide && !forceHide) {\n return;\n }\n\n clearTimeout(tooltip.showTimeout);\n tooltip._hideElement();\n\n if (tooltip.visible) {\n tooltip.point = null;\n tooltip.visible = false;\n tooltip.index = null;\n DOCUMENT_ELEMENT.off(tooltip.downEvent, tooltip._closeTooltipHandler);\n }\n },\n\n _closeTooltip: function(e) {\n var target = $(e.target);\n\n if (!target.is(\".k-chart-tooltip, .k-tooltip-content\")) {\n e.preventDefault();\n this.chartElement.data(\"kendoChart\")._instance.hideElements();\n this.hide(true);\n }\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\n var colorMarker = e.series.length > 1;\n var colspan = 1;\n if (nameColumn) {\n colspan++;\n }\n if (colorMarker) {\n colspan++;\n }\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\n return content;\n },\n\n _measure: function() {\n this._ensureElement();\n\n var size = {\n width: outerWidth(this.element),\n height: outerHeight(this.element)\n };\n\n return size;\n },\n\n _ensureElement: function() {\n if (this.element) {\n this.element\n .appendTo(document.body)\n .on(MOUSELEAVE_NS, this._mouseleave);\n }\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\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\n _pointContent: function(point) {\n var tooltip = this,\n options = deepExtend({}, tooltip.options, point.options.tooltip),\n content, tooltipTemplate;\n\n if (defined(point.value)) {\n content = point.value.toString();\n }\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\n return content;\n },\n\n _fit: function(offset, size, viewPortSize) {\n var output = 0;\n\n if (offset + size > viewPortSize) {\n output = viewPortSize - (offset + size);\n }\n\n if (offset < 0) {\n output = -offset;\n }\n\n return output;\n }\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\n show: function(e) {\n var element = this.element;\n\n if (element) {\n this.anchor = e.anchor;\n this.element.css(e.style);\n this.element.html(this.content(e));\n\n this.move();\n }\n },\n\n move: function() {\n var tooltip = this,\n element = tooltip.element,\n offset = tooltip._offset();\n\n tooltip._ensureElement();\n element.css({ top: offset.top, left: offset.left }).show();\n },\n\n content: function(e) {\n var content = e.value,\n options = e.crosshair.options.tooltip;\n\n if (options.template) {\n content = template(options.template)({\n value: content\n });\n }\n\n return content;\n },\n\n hide: function() {\n this.element.hide();\n }\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\n series: function() {\n var chart = this._chart;\n var seriesByPane = chart._plotArea.groupSeriesByPane();\n var series = seriesByPane[this.name || \"default\"];\n\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\n return result;\n }\n });\n\n var ChartSeries = Class.extend({\n init: function(chart, options) {\n this._chart = chart;\n this._options = options;\n },\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\n\n return points;\n },\n\n data: function(data) {\n var series = this._seriesOptions();\n if (data) {\n var chart = this._chart;\n var plotArea = chart._plotArea;\n\n series.data = data;\n\n if (series.categoryField) {\n var axis = plotArea.seriesCategoryAxis(series);\n var options = [].concat(chart.options.categoryAxis);\n\n chart._instance.bindCategoryAxisFromSeries(options[axis.axisIndex], axis.axisIndex);\n }\n\n chart._noTransitionsRedraw();\n this._clearFields();\n }\n\n return series.data;\n },\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\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\n this._chart._instance.togglePointsHighlight(show, elements);\n },\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, [PIE, DONUT, FUNNEL])) {\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\n chart._noTransitionsRedraw();\n\n this._clearFields();\n },\n\n _filterData: function(filter) {\n var data = this._seriesOptions().data;\n var length = data.length;\n var result = [];\n\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\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\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\n _clearFields: function() {\n delete this._points;\n delete this._series;\n }\n });\n\n function triggerPaneRender(panes) {\n for (var idx = 0; idx < panes.length; idx++) {\n panes[idx].notifyRender();\n }\n }\n\n dataviz.Tooltip = Tooltip;\n dataviz.CrosshairTooltip = CrosshairTooltip;\n dataviz.ChartInstanceObserver = ChartInstanceObserver;\n dataviz.ChartPane = ChartPane;\n dataviz.ChartSeries = ChartSeries;\n\n })(window.kendo.jQuery);\n\n var __meta__$O = {\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: [ \"data\", \"userevents\", \"drawing\", \"dataviz.core\", \"dataviz.themes\" ],\n features: [{\n id: \"dataviz.chart-pdf-export\",\n name: \"PDF export\",\n description: \"Export Chart as PDF\",\n depends: [ \"pdf\" ]\n }]\n };\n\n /***********************************************************************\n * WARNING: this file is auto-generated. If you change it directly,\n * your modifications will eventually be lost. The source code is in\n * `kendo-charts` repository, you should make your changes there and\n * run `src-modules/sync.sh` in this repository.\n */\n\n (function($) {\n /* eslint-disable space-before-blocks, space-before-function-paren */\n\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\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\n function pad(bbox, value) {\n var origin = bbox.getOrigin();\n var size = bbox.getSize();\n var spacing = getSpacing(value);\n\n bbox.setOrigin([ origin.x - spacing.left, origin.y - spacing.top ]);\n bbox.setSize([ size.width + (spacing.left + spacing.right), size.height + (spacing.top + spacing.bottom) ]);\n\n return bbox;\n }\n\n var Group = DrawingGroup;\n var Path$1 = DrawingPath;\n var Text = drawing.Text;\n\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\n var wrapper = Path$1.fromRect(new Rect([ labelBox.x1, labelBox.y1 ], [ labelBox.width(), labelBox.height() ]), {\n stroke: {}\n });\n\n var text = new Text(label.text, new GeometryPoint(textBox.x1, textBox.y1), {\n font: options.font,\n fill: { color: options.color }\n });\n\n var styleGeometry = pad(text.bbox().clone(), options.padding);\n\n var styleBox = Path$1.fromRect(styleGeometry, {\n stroke: {\n color: border.width ? border.color : \"\",\n width: border.width,\n opacity: border.opacity,\n dashType: border.dashType,\n lineJoin: \"round\",\n lineCap: \"round\"\n },\n fill: {\n color: background\n }\n });\n\n var elements = new Group();\n elements.append(wrapper);\n elements.append(styleBox);\n elements.append(text);\n\n return elements;\n }\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\n range.from = Math.max(Math.min(to, from), min);\n range.to = Math.min(Math.max(to, from), max);\n\n return range;\n }\n\n function unpad(bbox, value) {\n var spacing = getSpacing(value);\n\n spacing.left = -spacing.left; spacing.top = -spacing.top;\n spacing.right = -spacing.right; spacing.bottom = -spacing.bottom;\n\n return pad(bbox, spacing);\n }\n\n var DEFAULT_MARGIN = 5;\n var Path = DrawingPath;\n var Surface = drawing.Surface;\n\n var Gauge = dataviz.Class.extend({\n init: function(element, userOptions, theme, context) {\n if (context === void 0) { 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\n this.redraw();\n },\n\n destroy: function() {\n if (this.surface) {\n this.surface.destroy();\n this.surface = null;\n }\n\n delete this.element;\n delete this.surfaceElement;\n },\n\n value: function(pointerValue) {\n var pointer = this.pointers[0];\n\n if (arguments.length === 0) {\n return pointer.value();\n }\n\n pointer.value(pointerValue);\n this._setValueOptions(pointerValue);\n },\n\n _draw: function() {\n var surface = this.surface;\n\n surface.clear();\n surface.draw(this._visuals);\n },\n\n exportVisual: function() {\n return this._visuals;\n },\n\n allValues: function(values) {\n var pointers = this.pointers;\n var allValues = [];\n\n if (arguments.length === 0) {\n for (var i = 0; i < pointers.length; i++) {\n allValues.push(pointers[i].value());\n }\n\n return allValues;\n }\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\n this._setValueOptions(values);\n },\n\n _setValueOptions: function(values) {\n var pointers = [].concat(this.options.pointer);\n var arrayValues = [].concat(values);\n\n for (var i = 0; i < arrayValues.length; i++) {\n pointers[i].value = arrayValues[i];\n }\n },\n\n resize: function() {\n this.noTransitionsRedraw();\n },\n\n noTransitionsRedraw: function() {\n var transitions = this.options.transitions;\n\n this._toggleTransitions(false);\n\n this.redraw();\n\n this._toggleTransitions(transitions);\n },\n\n redraw: function() {\n var size = this._surfaceSize();\n var wrapper = new Rect([ 0, 0 ], [ size.width, size.height ]);\n\n this._initSurface();\n\n this.gaugeArea = this._createGaugeArea();\n\n this._createModel();\n\n var bbox = unpad(wrapper.bbox(), this._gaugeAreaMargin);\n this.reflow(bbox);\n },\n\n setOptions: function(options, theme) {\n this._originalOptions = deepExtend(this._originalOptions, options);\n this.options = deepExtend({}, this._originalOptions);\n\n this._initTheme(theme);\n\n this.redraw();\n },\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\n setIntlService: function(intl) {\n this.contextService.intl = intl;\n },\n\n _initTheme: function(theme) {\n var currentTheme = theme || this.theme || {};\n this.theme = currentTheme;\n\n this.options = deepExtend({}, currentTheme, this.options);\n var options = this.options;\n var pointer = options.pointer;\n\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\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([ 0, 0 ], [ size.width, size.height ]);\n\n this._gaugeAreaMargin = options.margin || DEFAULT_MARGIN;\n\n if (border.width > 0) {\n areaGeometry = unpad(areaGeometry, border.width);\n }\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: {\n color: options.background\n }\n });\n\n return gaugeArea;\n },\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\n dataviz.elementSize(element, size);\n\n if (!surface || surface.options.type !== options.renderAs) {\n if (surface) {\n surface.destroy();\n }\n\n this.surface = Surface.create(element, {\n type: options.renderAs\n });\n } else {\n this.surface.clear();\n this.surface.resize();\n }\n },\n\n _surfaceSize: function() {\n var options = this.options;\n var size = this._getSize();\n\n if (options.gaugeArea) {\n deepExtend(size, options.gaugeArea);\n }\n\n return size;\n },\n\n _surfaceElement: function() {\n if (!this.surfaceElement) {\n this.surfaceElement = document.createElement('div');\n this.element.appendChild(this.surfaceElement);\n }\n\n return this.surfaceElement;\n },\n\n getSize: function() {\n return this._getSize();\n },\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\n if (!width) {\n width = defaultSize.width;\n }\n\n if (!height) {\n height = defaultSize.height;\n }\n\n return { width: width, height: height };\n },\n\n _defaultSize: function() {\n return {\n width: DEFAULT_WIDTH,\n height: DEFAULT_HEIGHT\n };\n },\n\n _toggleTransitions: function(value) {\n var this$1$1 = this;\n\n this.options.transitions = value;\n for (var i = 0; i < this.pointers.length; i++) {\n this$1$1.pointers[i].options.animation.transitions = value;\n }\n }\n });\n\n setDefaultOptions(Gauge, {\n plotArea: {},\n theme: \"default\",\n renderAs: \"\",\n pointer: {},\n scale: {},\n gaugeArea: {}\n });\n\n var Path$2 = DrawingPath;\n var Group$2 = DrawingGroup;\n var Point = GeometryPoint;\n\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\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\n var tickPath = new Path$2({\n stroke: {\n color: tickOptions.color,\n width: tickOptions.width\n }\n }).moveTo(start).lineTo(end);\n\n return tickPath;\n }\n\n function renderTicks(tickGroup, tickPositions, tickRenderOptions, tickOptions) {\n var count = tickPositions.length;\n\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\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\n tickGroup.append(renderAxisTick(tickRenderOptions, tickOptions));\n }\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, {\n reverse: true\n });\n }\n\n NumericAxis.fn.init.call(this, 0, 1, scaleOptions, service);\n\n this.options.minorUnit = this.options.minorUnit || this.options.majorUnit / 10;\n },\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\n return scaleOptions;\n },\n\n initFields: function() {\n },\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\n elements.append(scaleLine, labels, scaleTicks, ranges);\n\n return elements;\n },\n\n renderRanges: function() {\n var this$1$1 = this;\n\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\n for (var i = 0; i < count; i++) {\n var range = getRange(ranges[i], min, max);\n var slot = this$1$1.getSlot(range.from, range.to);\n var slotX = vertical ? this$1$1.lineBox() : slot;\n var slotY = vertical ? slot : this$1$1.lineBox();\n if (vertical) {\n slotX.x1 -= rangeSize * (mirror ? -1 : 1);\n } else {\n slotY.y2 += rangeSize * (mirror ? -1 : 1);\n }\n\n elements.append(Path$2.fromRect(new Rect([ slotX.x1, slotY.y1 ], [ slotX.x2 - slotX.x1, slotY.y2 - slotY.y1 ]), {\n fill: { color: range.color, opacity: range.opacity },\n stroke: { }\n }));\n }\n\n return elements;\n },\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\n for (var i = 0; i < labels.length; i++) {\n elements.append(buildLabelElement(labels[i], options.labels));\n }\n\n return elements;\n },\n\n renderLine: function() {\n var line = this.options.line;\n var lineBox = this.lineBox();\n var elements = new Group$2();\n\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\n linePath.moveTo(lineBox.x1, lineBox.y1).lineTo(lineBox.x2, lineBox.y2);\n elements.append(linePath);\n }\n\n return elements;\n },\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\n renderTicks(ticks, this.getMajorTickPositions(), tickRenderOptions, options.majorTicks);\n renderTicks(ticks, this.getMinorTickPositions(), tickRenderOptions, deepExtend({}, {\n skipUnit: majorUnit / options.minorUnit\n }, options.minorTicks));\n\n return ticks;\n }\n });\n\n setDefaultOptions(LinearScale, {\n min: 0,\n max: 50,\n\n majorTicks: {\n size: 15,\n align: INSIDE,\n color: BLACK,\n width: DEFAULT_LINE_WIDTH,\n visible: true\n },\n\n minorTicks: {\n size: 10,\n align: INSIDE,\n color: BLACK,\n width: DEFAULT_LINE_WIDTH,\n visible: true\n },\n\n line: {\n width: DEFAULT_LINE_WIDTH\n },\n\n labels: {\n position: INSIDE,\n padding: 2\n },\n mirror: false,\n _alignLines: false\n });\n\n var Pointer = dataviz.Class.extend({\n init: function(scale, userOptions) {\n\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\n options.fill = options.color;\n\n this.scale = scale;\n\n if (defined(options.value)) {\n options.value = limitValue(options.value, min, max);\n } else {\n options.value = min;\n }\n },\n\n value: function(newValue) {\n var options = this.options;\n var value = options.value;\n\n if (arguments.length === 0) {\n return value;\n }\n\n var ref = this.scale.options;\n var min = ref.min;\n var max = ref.max;\n\n options._oldValue = defined(options._oldValue) ? options.value : min;\n options.value = limitValue(newValue, min, max);\n\n if (this.elements) {\n this.repaint();\n }\n }\n });\n\n setDefaultOptions(Pointer, {\n color: BLACK\n });\n\n var LinearPointer = Pointer.extend({\n init: function(scale, options) {\n Pointer.fn.init.call(this, scale, options);\n\n this.options = deepExtend({\n track: {\n visible: defined(options.track)\n }\n }, this.options);\n },\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 ?\n margin[mirror ? \"left\" : \"right\"] :\n margin[mirror ? \"bottom\" : \"top\"];\n var pointerBox, pointerRangeBox, trackBox;\n\n space = mirror ? -space : space;\n\n if (vertical) {\n trackBox = new Box(\n scaleLine.x1 + space, scaleLine.y1,\n scaleLine.x1 + space, scaleLine.y2);\n\n if (mirror) {\n trackBox.x1 -= trackSize;\n } else {\n trackBox.x2 += trackSize;\n }\n\n if (options.shape !== BAR_POINTER) {\n pointerRangeBox = new Box(\n scaleLine.x2 + space, scaleLine.y1 - pointerHalfSize,\n scaleLine.x2 + space, scaleLine.y2 + pointerHalfSize\n );\n pointerBox = pointerRangeBox;\n }\n } else {\n trackBox = new Box(\n scaleLine.x1, scaleLine.y1 - space,\n scaleLine.x2, scaleLine.y1 - space);\n\n if (mirror) {\n trackBox.y2 += trackSize;\n } else {\n trackBox.y1 -= trackSize;\n }\n\n if (options.shape !== BAR_POINTER) {\n pointerRangeBox = new Box(\n scaleLine.x1 - pointerHalfSize, scaleLine.y1 - space,\n scaleLine.x2 + pointerHalfSize, scaleLine.y1 - space\n );\n pointerBox = pointerRangeBox;\n }\n }\n\n this.trackBox = trackBox;\n this.pointerRangeBox = pointerRangeBox;\n this.box = pointerBox || trackBox.clone().pad(options.border.width);\n },\n\n getElementOptions: function() {\n var options = this.options;\n\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\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\n var space = vertical ?\n margin[mirror ? \"left\" : \"right\"] :\n margin[mirror ? \"bottom\" : \"top\"];\n\n return space;\n }\n });\n\n setDefaultOptions(LinearPointer, {\n shape: BAR_POINTER,\n\n track: {\n border: {\n width: 1\n }\n },\n\n color: BLACK,\n border: {\n width: 1\n },\n opacity: 1,\n\n margin: getSpacing(3),\n animation: {\n type: BAR_POINTER\n },\n visible: true\n });\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\n if (options.mirror === vertical) {\n from[axis] -= margin; to[axis] -= margin;\n } else {\n from[axis] += margin; to[axis] += margin;\n }\n\n var fromScale = this.fromScale = new GeometryPoint(from.x1, from.y1);\n var toScale = this.toScale = new GeometryPoint(to.x1, to.y1);\n\n if (options.duration !== 0) {\n options.duration = Math.max((fromScale.distanceTo(toScale) / options.duration) * 1000, 1);\n }\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\n this.element.transform(transform().translate(translateX, translateY));\n }\n });\n\n setDefaultOptions(ArrowLinearPointerAnimation, {\n easing: LINEAR,\n duration: LINEAR_SPEED\n });\n\n AnimationFactory.current.register(ARROW_POINTER, ArrowLinearPointerAnimation);\n\n var Point$1 = GeometryPoint;\n var Path$3 = DrawingPath;\n\n var ArrowLinearPointer = LinearPointer.extend({\n init: function(scale, options) {\n LinearPointer.fn.init.call(this, scale, options);\n\n if (!defined(this.options.size)) {\n this.options.size = this.scale.options.majorTicks.size * 0.6;\n }\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\n if (scale.options.vertical) {\n shape = [\n new Point$1(0, 0 - halfSize), new Point$1(0 - sign * size, 0), new Point$1(0, 0 + halfSize)\n ];\n } else {\n shape = [\n new Point$1(0 - halfSize, 0), new Point$1(0, 0 + sign * size), new Point$1(0 + halfSize, 0)\n ];\n }\n\n return shape;\n },\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\n if (options.animation.transitions === false) {\n animation.options.duration = 0;\n }\n\n animation.setup();\n animation.play();\n },\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\n options.animation.type = ARROW_POINTER;\n\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\n var slot = scale.getSlot(options.value);\n elements.transform(transform().translate(slot.x1, slot.y1));\n\n this.elements = elements;\n\n return elements;\n }\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\n if (options.duration !== 0) {\n options.duration = Math.max((Math.abs(to - from) / options.speed) * 1000, 1);\n }\n\n this._set(from);\n },\n\n step: function(pos) {\n var value = interpolateValue(this.from, this.to, pos);\n this._set(value);\n },\n\n _set: function(value) {\n var setter = \"set\" + this.axis.toUpperCase();\n var points = this.options.newPoints;\n\n points[0][setter](value);\n points[1][setter](value);\n }\n });\n\n setDefaultOptions(BarLinearPointerAnimation, {\n easing: LINEAR,\n speed: LINEAR_SPEED\n });\n\n AnimationFactory.current.register(BAR_POINTER, BarLinearPointerAnimation);\n\n var Group$3 = DrawingGroup;\n var Path$4 = DrawingPath;\n\n var BarLinearPointer = LinearPointer.extend({\n init: function(scale, options) {\n LinearPointer.fn.init.call(this, scale, options);\n\n if (!defined(this.options.size)) {\n this.options.size = this.scale.options.majorTicks.size * 0.3;\n }\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\n var p1 = new GeometryPoint();\n p1[axis] = minSlot[axis + \"1\"];\n p1[sizeAxis] = minSlot[sizeAxis + \"1\"];\n\n var p2 = new GeometryPoint();\n p2[axis] = slot[axis + \"1\"];\n p2[sizeAxis] = slot[sizeAxis + \"1\"];\n\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\n var p3 = p2.clone();\n var p4 = p1.clone();\n\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\n return [ p1, p2, p3, p4 ];\n },\n\n repaint: function() {\n var ref = this;\n var scale = ref.scale;\n var options = ref.options;\n var shape = this.pointerShape(options.value);\n var pointerPath = this.pointerPath;\n var oldShape = this.pointerShape(options._oldValue);\n\n pointerPath.moveTo(shape[0]).lineTo(shape[1]).lineTo(shape[2]).lineTo(shape[3]).close();\n\n var animation = new BarLinearPointerAnimation(pointerPath, deepExtend(options.animation, {\n reverse: scale.options.reverse,\n vertical: scale.options.vertical,\n oldPoints: [ oldShape[1], oldShape[2] ],\n newPoints: [ shape[1], shape[2] ]\n }));\n\n if (options.animation.transitions === false) {\n animation.options.duration = 0;\n }\n\n animation.setup();\n animation.play();\n },\n\n render: function() {\n var group = new Group$3();\n var elementOptions = this.getElementOptions();\n\n if (this.options.track.visible) {\n group.append(this.renderTrack());\n }\n\n var pointer = this.pointerPath = new Path$4({\n stroke: elementOptions.stroke,\n fill: elementOptions.fill\n });\n\n group.append(pointer);\n\n this.elements = group;\n\n return group;\n },\n\n renderTrack: function() {\n var trackOptions = this.options.track;\n var border = trackOptions.border || {};\n var trackBox = this.trackBox.clone().pad(border.width || 0);\n\n return new Path$4.fromRect(trackBox.toRect(), {\n fill: {\n color: trackOptions.color,\n opacity: trackOptions.opacity\n },\n stroke: {\n color: border.width ? border.color || trackOptions.color : \"\",\n width: border.width,\n dashType: border.dashType\n }\n });\n }\n });\n\n var DEFAULT_MIN_WIDTH = 60;\n var DEFAULT_MIN_HEIGHT = 60;\n\n var Group$1 = DrawingGroup;\n\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\n var box = new Box(bboxX, bboxY, bboxX + bbox.width(), bboxY + bbox.height());\n\n this.scale.reflow(box);\n this._shrinkScaleWidth(box);\n\n for (var i = 0; i < pointers.length; i++) {\n pointers[i].reflow();\n }\n\n this.bbox = this._getBox(box);\n this._alignElements();\n this._shrinkElements();\n this._buildVisual();\n this._draw();\n },\n\n _buildVisual: function() {\n var visuals = new Group$1();\n var scaleElements = this.scale.render();\n var pointers = this.pointers;\n\n visuals.append(this.gaugeArea);\n visuals.append(scaleElements);\n\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\n this._visuals = visuals;\n },\n\n _createModel: function() {\n var this$1$1 = this;\n\n var options = this.options;\n var scale = this.scale = new LinearScale(options.scale, this.contextService);\n\n this.pointers = [];\n\n var pointers = options.pointer;\n pointers = isArray(pointers) ? pointers : [ pointers ];\n\n for (var i = 0; i < pointers.length; i++) {\n var currentOptions = deepExtend({}, pointers[i], {\n animation: {\n transitions: options.transitions\n }\n });\n var pointerType = currentOptions.shape === ARROW ? ArrowLinearPointer : BarLinearPointer;\n\n this$1$1.pointers.push(new pointerType(scale, currentOptions));\n }\n },\n\n _defaultSize: function() {\n var vertical = this.options.scale.vertical;\n\n return {\n width: vertical ? DEFAULT_MIN_WIDTH : DEFAULT_WIDTH,\n height: vertical ? DEFAULT_HEIGHT : DEFAULT_MIN_HEIGHT\n };\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\n for (var i = 0; i < pointers.length; i++) {\n plotAreaBox.wrap(pointers[i].box.clone());\n }\n\n var size;\n if (scale.options.vertical) {\n size = plotAreaBox.width() / 2;\n plotAreaBox = new Box(\n boxCenter.x - size, box.y1,\n boxCenter.x + size, box.y2\n );\n } else {\n size = plotAreaBox.height() / 2;\n plotAreaBox = new Box(\n box.x1, boxCenter.y - size,\n box.x2, boxCenter.y + size\n );\n }\n\n return plotAreaBox;\n },\n\n _alignElements: function() {\n var this$1$1 = this;\n\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\n for (var i = 0; i < pointers.length; i++) {\n box.wrap(pointers[i].box.clone());\n }\n\n var diff;\n if (scale.options.vertical) {\n diff = plotAreaBox.center().x - box.center().x;\n scale.reflow(new Box(\n scaleBox.x1 + diff, plotAreaBox.y1,\n scaleBox.x2 + diff, plotAreaBox.y2\n ));\n } else {\n diff = plotAreaBox.center().y - box.center().y;\n scale.reflow(new Box(\n scaleBox.x1, scaleBox.y1 + diff,\n scaleBox.x2, scaleBox.y2 + diff\n ));\n }\n\n for (var i$1 = 0; i$1 < pointers.length; i$1++) {\n pointers[i$1].reflow(this$1$1.bbox);\n }\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\n _shrinkElements: function() {\n var this$1$1 = this;\n\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\n for (var i = 0; i < pointers.length; i++) {\n pointerBox.wrap(pointers[i].box.clone());\n }\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\n scale.reflow(scaleBox);\n\n for (var i$1 = 0; i$1 < pointers.length; i$1++) {\n pointers[i$1].reflow(this$1$1.bbox);\n }\n }\n });\n\n setDefaultOptions(LinearGauge, {\n transitions: true,\n gaugeArea: {\n background: \"\"\n },\n scale: {\n vertical: true\n }\n });\n\n var GEO_ARC_ADJUST_ANGLE = 180;\n\n var Arc = drawing.Arc;\n var Path$5 = DrawingPath;\n var Group$5 = DrawingGroup;\n\n function drawTicks(arc, tickAngles, unit, tickOptions) {\n var ticks = new Group$5();\n var center = arc.center;\n var radius = arc.getRadiusX();\n\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\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\n return ticks;\n }\n\n function rangeSegment(from, to, color, opacity) {\n return { from: from, to: to, color: color, 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\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\n return scaleOptions;\n },\n\n initFields: function() {\n },\n\n render: function(center, radius) {\n var arc = this.renderArc(center, radius);\n\n this.bbox = arc.bbox();\n this.labelElements = this.renderLabels();\n this.ticks = this.renderTicks();\n this.ranges = this.renderRanges();\n },\n\n reflow: function(bbox) {\n var center = bbox.center();\n var radius = Math.min(bbox.height(), bbox.width()) / 2;\n\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\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\n if (reverse) {\n result = endAngle - (value - min) / (max - min) * angle;\n } else {\n result = ((value - min) / (max - min) * angle) + startAngle;\n }\n\n return result + GEO_ARC_ADJUST_ANGLE;\n },\n\n hasRanges: function() {\n var ranges = this.options.ranges;\n\n return ranges && ranges.length;\n },\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\n if (minorTicks.visible) {\n size = Math.max(minorTicks.size, size);\n }\n\n return size;\n },\n\n labelsCount: function() {\n var count = NumericAxis.fn.labelsCount.call(this);\n var options = this.options;\n var angle = options.endAngle - options.startAngle;\n\n if (angle >= 360 && (options.max % options.majorUnit === 0)) {\n count -= 1;\n }\n\n return count;\n },\n\n renderLabels: function() {\n var this$1$1 = this;\n\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\n var rangeDistance = radius * 0.05;\n if (defined(options.rangeDistance)) {\n rangeDistance = options.rangeDistance;\n } else {\n options.rangeDistance = rangeDistance;\n }\n\n var labelsOptions = options.labels;\n var isInside = labelsOptions.position === INSIDE;\n var hasLabelElements = defined(this.labelElements);\n\n if (isInside) {\n radius -= this.ticksSize();\n\n if (this.hasRanges() && !hasLabelElements) {\n radius -= rangeSize + rangeDistance;\n }\n arc.setRadiusX(radius).setRadiusY(radius);\n }\n\n var labels = this.labels;\n var count = labels.length;\n var padding = getSpacing(labelsOptions.padding);\n var paddingWidth = (padding.left + padding.right) / 2;\n var paddingHeight = (padding.top + padding.bottom) / 2;\n\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\n var lp = arc.pointAt(angle);\n var cx = lp.x + (Math.cos(labelAngle) * (halfWidth + paddingWidth) * (isInside ? 1 : -1));\n var cy = lp.y + (Math.sin(labelAngle) * (halfHeight + paddingHeight) * (isInside ? 1 : -1));\n\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\n var labelElement = (void 0);\n if (!hasLabelElements) {\n labelElement = buildLabelElement(label, options.labels);\n labelsGroup.append(labelElement);\n } else {\n labelElement = this$1$1.labelElements.children[i];\n var prevLabelPos = labelElement.bbox().origin;\n\n var labelTransform = labelElement.transform() || transform();\n labelTransform.translate(labelPos.x - prevLabelPos.x, labelPos.y - prevLabelPos.y);\n labelElement.transform(labelTransform);\n }\n\n this$1$1.bbox = Rect.union(this$1$1.bbox, labelElement.bbox());\n }\n\n return labelsGroup;\n },\n\n repositionRanges: function() {\n var ranges = this.ranges.children;\n\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\n if (this.options.labels.position === INSIDE) {\n rangeRadius += rangeSize + rangeDistance;\n }\n\n var newRadius = rangeRadius + (rangeSize / 2);\n\n for (var i = 0; i < ranges.length; i++) {\n ranges[i]._geometry.setRadiusX(newRadius).setRadiusY(newRadius);\n }\n\n this.bbox = Rect.union(this.bbox, this.ranges.bbox());\n }\n },\n\n renderRanges: function() {\n var this$1$1 = this;\n\n var segments = this.rangeSegments();\n var segmentsCount = segments.length;\n var result = new Group$5();\n\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\n // move the ticks with a range distance and a range size\n this.radius(this.radius() - rangeSize - rangeDistance);\n\n for (var i = 0; i < segmentsCount; i++) {\n var segment = segments[i];\n var from = this$1$1.slotAngle(segment[reverse ? \"to\" : \"from\"]);\n var to = this$1$1.slotAngle(segment[!reverse ? \"to\" : \"from\"]);\n\n if (to - from !== 0) {\n result.append(this$1$1.createRange(from, to, rangeRadius, segment));\n }\n }\n }\n\n return result;\n },\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\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\n rangeSegments: function() {\n var options = this.options;\n var ranges = options.ranges || [];\n var count = ranges.length;\n var segments = [];\n\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\n for (var i = 0; i < count; i++) {\n var range = getRange(ranges[i], min, max);\n var segmentsCount = segments.length;\n\n for (var j = 0; j < segmentsCount; j++) {\n var segment = segments[j];\n\n if (segment.from <= range.from && range.from <= segment.to) {\n segments.push(rangeSegment(range.from, range.to, range.color, range.opacity));\n\n if (segment.from <= range.to && range.to <= segment.to) {\n segments.push(rangeSegment(range.to, segment.to, defaultColor, range.opacity));\n }\n\n segment.to = range.from;\n\n break;\n }\n }\n }\n }\n\n return segments;\n },\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\n if (options.labels.position === OUTSIDE) {\n radius = arc.getRadiusX() - majorTickSize - rangeDistance - rangeSize;\n } else {\n radius = arc.getRadiusX() - rangeSize;\n }\n\n return radius;\n },\n\n renderArc: function(center, radius) {\n var options = this.options;\n\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\n return arc;\n },\n\n renderTicks: function() {\n var ref = this;\n var arc = ref.arc;\n var options = ref.options;\n var tickArc = arc.clone();\n\n this.majorTickAngles = this.tickAngles(arc, options.majorUnit);\n this.majorTicks = drawTicks(tickArc, this.majorTickAngles, options.majorUnit, options.majorTicks);\n\n var allTicks = new Group$5();\n allTicks.append(this.majorTicks);\n\n var majorTickSize = options.majorTicks.size;\n var minorTickSize = options.minorTicks.size;\n\n this._tickDifference = majorTickSize - minorTickSize;\n\n if (options.labels.position === OUTSIDE) {\n var radius = tickArc.getRadiusX();\n tickArc.setRadiusX(radius - majorTickSize + minorTickSize)\n .setRadiusY(radius - majorTickSize + minorTickSize);\n }\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\n return allTicks;\n },\n\n normalizeTickAngles: function(angles) {\n var options = this.options;\n var skip = options.majorUnit / options.minorUnit;\n\n for (var i = angles.length - 1; i >= 0; i--) {\n if (i % skip === 0) {\n angles.splice(i, 1);\n }\n }\n\n return angles;\n },\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\n if (reverse) {\n pos += angle;\n step = -step;\n }\n\n if (angle >= 360 && (options.max % stepValue === 0)) {\n tickCount -= 1;\n }\n\n var positions = [];\n for (var i = 0; i < tickCount; i++) {\n positions.push(round(pos, COORD_PRECISION));\n pos += step;\n }\n\n if (round(pos) <= ring.endAngle) {\n positions.push(pos);\n }\n\n return positions;\n },\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\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\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\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\n ticks[i].transform(new transform().translate(xDiff, yDiff));\n }\n }\n });\n\n setDefaultOptions(RadialScale, {\n min: 0,\n max: 100,\n\n majorTicks: {\n size: 15,\n align: INSIDE,\n color: BLACK,\n width: DEFAULT_LINE_WIDTH,\n visible: true\n },\n\n minorTicks: {\n size: 10,\n align: INSIDE,\n color: BLACK,\n width: DEFAULT_LINE_WIDTH,\n visible: true\n },\n\n startAngle: -30,\n endAngle: 210,\n\n labels: {\n position: INSIDE,\n padding: 2\n }\n });\n\n var RadialPointerAnimation = Animation.extend({\n init: function(element, options) {\n Animation.fn.init.call(this, element, options);\n\n var animationOptions = this.options;\n\n animationOptions.duration = Math.max((Math.abs(animationOptions.newAngle - animationOptions.oldAngle) / animationOptions.duration) * 1000, 1);\n },\n\n step: function(pos) {\n var options = this.options;\n var angle = interpolateValue(options.oldAngle, options.newAngle, pos);\n\n this.element.transform(transform().rotate(angle, options.center));\n }\n });\n\n setDefaultOptions(RadialPointerAnimation, {\n easing: LINEAR,\n duration: ANGULAR_SPEED\n });\n\n AnimationFactory.current.register(RADIAL_POINTER, RadialPointerAnimation);\n\n var CAP_SIZE = 0.05;\n var Circle = drawing.Circle;\n var Group$6 = DrawingGroup;\n var Path$6 = DrawingPath;\n\n var RadialPointer = Pointer.extend({\n setAngle: function(angle) {\n this.elements.transform(transform().rotate(angle, this.center));\n },\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\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\n render: function() {\n var ref = this;\n var scale = ref.scale;\n var options = ref.options;\n var elements = new Group$6();\n\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\n elements.append(this._renderNeedle(), this._renderCap());\n\n this.elements = elements;\n this.setAngle(DEGREE);\n\n return elements;\n },\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\n this.bbox = Rect.fromPoints(new GeometryPoint(center.x - capSize, center.y - capSize),\n new GeometryPoint(center.x + capSize, center.y + capSize));\n },\n\n _renderNeedle: function() {\n var minorTickSize = this.scale.options.minorTicks.size;\n var center = this.center;\n var needleColor = this.options.color;\n\n var needlePath = new Path$6({\n fill: { color: needleColor },\n stroke: { color: needleColor, width: DEFAULT_LINE_WIDTH }\n });\n\n needlePath.moveTo(center.x + this.radius - minorTickSize, center.y)\n .lineTo(center.x, center.y - (this.capSize / 2))\n .lineTo(center.x, center.y + (this.capSize / 2))\n .close();\n\n return needlePath;\n },\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\n var cap = new Circle(circle, {\n fill: { color: capColor },\n stroke: { color: capColor }\n });\n\n return cap;\n }\n });\n\n setDefaultOptions(RadialPointer, {\n cap: {\n size: CAP_SIZE\n },\n arrow: {\n width: 16,\n height: 14\n },\n animation: {\n type: RADIAL_POINTER,\n duration: ANGULAR_SPEED\n }\n });\n\n var Group$4 = DrawingGroup;\n\n var RadialGauge = Gauge.extend({\n reflow: function(bbox) {\n var this$1$1 = this;\n\n var pointers = this.pointers;\n this.scale.reflow(bbox);\n this._initialPlotArea = this.scale.bbox;\n\n for (var i = 0; i < pointers.length; i++) {\n pointers[i].reflow(this$1$1.scale.arc);\n this$1$1._initialPlotArea = Rect.union(this$1$1._initialPlotArea, pointers[i].bbox);\n }\n\n this.fitScale(bbox);\n this.alignScale(bbox);\n this._buildVisual(this.gaugeArea, pointers, this.scale);\n this._draw();\n },\n\n _buildVisual: function(gaugeArea, pointers, scale) {\n var visuals = this._visuals = new Group$4();\n\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\n _buildPointers: function(pointers) {\n var this$1$1 = this;\n\n for (var i = 0; i < pointers.length; i++) {\n var current = pointers[i];\n current.render();\n this$1$1._visuals.append(current.elements);\n\n current.value(current.options.value);\n }\n },\n\n fitScale: function(bbox) {\n var this$1$1 = this;\n\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\n while (i++ < 100) {\n staleFlag = (oldDiff === maxDiff) ? (staleFlag + 1) : 0;\n\n if (staleFlag > 5) {\n break;\n }\n\n if (min !== mid) {\n minDiff = this$1$1.getPlotBox(min, bbox, arc);\n if (0 <= minDiff && minDiff <= 2) {\n break;\n }\n }\n\n if (max !== mid) {\n maxDiff = this$1$1.getPlotBox(max, bbox, arc);\n if (0 <= maxDiff && maxDiff <= 2) {\n break;\n }\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\n midDiff = this$1$1.getPlotBox(mid, bbox, arc);\n if (0 <= midDiff && midDiff <= 2) {\n break;\n }\n\n oldDiff = maxDiff;\n\n if (midDiff > 0) {\n max = mid;\n maxDiff = midDiff;\n } else {\n min = mid;\n minDiff = midDiff;\n }\n }\n },\n\n getPlotBox: function(step, bbox, arc) {\n var this$1$1 = this;\n\n var scale = this.scale;\n var pointers = this.pointers;\n var radius = arc.getRadiusX();\n var scaleArc = arc.clone();\n\n scaleArc.setRadiusX(radius + step).setRadiusY(radius + step);\n\n scale.arc = scaleArc;\n scale.reflow(bbox);\n this.plotBbox = scale.bbox;\n\n for (var i = 0; i < pointers.length; i++) {\n pointers[i].reflow(scaleArc);\n this$1$1.plotBbox = Rect.union(this$1$1.plotBbox, pointers[i].bbox);\n }\n\n return this.getDiff(this.plotBbox, bbox);\n },\n\n getDiff: function(plotBox, box) {\n return Math.min(box.width() - plotBox.width(), box.height() - plotBox.height());\n },\n\n alignScale: function(bbox) {\n var this$1$1 = this;\n\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\n scale.arc.center.x -= paddingX;\n scale.arc.center.y -= paddingY;\n\n scale.reflow(bbox);\n\n for (var i = 0; i < pointers.length; i++) {\n pointers[i].reflow(scale.arc);\n this$1$1.plotBbox = Rect.union(scale.bbox, pointers[i].bbox);\n }\n },\n\n _createModel: function() {\n var this$1$1 = this;\n\n var options = this.options;\n var pointers = options.pointer;\n var scale = this.scale = new RadialScale(options.scale, this.contextService);\n\n this.pointers = [];\n\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], {\n animation: {\n transitions: options.transitions\n }\n }));\n\n this$1$1.pointers.push(current);\n }\n }\n });\n\n setDefaultOptions(RadialGauge, {\n transitions: true,\n gaugeArea: {\n background: \"\"\n }\n });\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\n return [ { from: min, to: max, color: rangePlaceholderColor, lineCap: rangeLineCap } ];\n },\n\n hasRanges: function() {\n return true;\n },\n\n placeholderRangeAngle: function(angle) {\n var geometry$$1 = this.ranges.children[0].geometry();\n\n if (this.options.reverse) {\n geometry$$1.setEndAngle(angle);\n } else {\n geometry$$1.setStartAngle(angle);\n }\n },\n\n addRange: function(from, to, options) {\n var reverse = this.options.reverse;\n\n var startAngle = this.slotAngle(reverse ? to : from);\n var endAngle = this.slotAngle(reverse ? from : to);\n\n var range = this.createRange(startAngle, endAngle, this.getRangeRadius(), options);\n\n this.ranges.append(range);\n\n return range;\n }\n });\n\n setDefaultOptions(ArcScale, {\n min: 0,\n max: 100,\n\n majorTicks: {\n visible: false\n },\n\n minorTicks: {\n visible: false\n },\n\n labels: {\n visible: false\n },\n\n startAngle: 0,\n endAngle: 180,\n rangeLineCap: 'round'\n });\n\n var MAX_DURATION = 800;\n\n var RangePointerAnimation = Animation.extend({\n init: function(element, options) {\n Animation.fn.init.call(this, element, options);\n\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\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\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\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\n this.element.stroke(new kendo.Color(r, g, b).toHex());\n }\n }\n });\n\n setDefaultOptions(RangePointerAnimation, {\n easing: LINEAR,\n duration: ANGULAR_SPEED\n });\n\n AnimationFactory.current.register(RADIAL_RANGE_POINTER, RangePointerAnimation);\n\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\n if (this.animation) {\n this.animation.abort();\n }\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\n this.animation.play();\n }\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\n stroke: function(value) {\n this.elements.stroke(value);\n },\n\n render: function() {\n if (this.elements) {\n return;\n }\n\n var ref = this;\n var scale = ref.scale;\n var options = ref.options;\n\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\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\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\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; if (from === void 0) { from = min; }\n var to = ref$2.to; if (to === void 0) { to = max; }\n\n if (from <= currentValue && currentValue <= to) {\n return rangeColor;\n }\n }\n }\n\n return color;\n },\n\n reflow: function() {\n this.render();\n\n this.bbox = this.elements.bbox();\n }\n });\n\n setDefaultOptions(RangePointer, {\n animation: {\n type: RADIAL_RANGE_POINTER,\n duration: ANGULAR_SPEED\n }\n });\n\n var ArcGauge = RadialGauge.extend({\n _initTheme: function(theme) {\n RadialGauge.fn._initTheme.call(this, theme);\n\n this.options.color = this.options.color || (this.theme.pointer || {}).color;\n },\n\n _createModel: function() {\n var options = this.options;\n var scale = this.scale = new ArcScale(options.scale, this.contextService);\n\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: {\n transitions: options.transitions\n }\n }));\n\n this.pointers = [ pointer ];\n },\n\n _buildPointers: function(pointers) {\n for (var i = 0; i < pointers.length; i++) {\n var current = pointers[i];\n current.render();\n\n current.value(current.options.value);\n }\n },\n\n _setValueOptions: function(value) {\n this.options.value = value;\n },\n\n currentColor: function() {\n var pointer = this.pointers[0];\n if (pointer) {\n return pointer.currentColor();\n }\n },\n\n centerLabelPosition: function(width, height) {\n var size = this.getSize();\n var center = this.scale.arc.center;\n\n var left = center.x - width / 2;\n var top = center.y - height / 2;\n\n if (width < size.width) {\n var right = left + width;\n\n left = Math.max(left, 0);\n\n if (right > size.width) {\n left -= right - size.width;\n }\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\n top = Math.max(top, bbox.origin.y);\n\n if (bottom > yLimit) {\n top -= bottom - yLimit;\n }\n }\n\n return {\n left: left,\n top: top\n };\n }\n });\n\n var defaultStartAngle = 90;\n\n var CircularGauge = ArcGauge.extend({\n _createModel: function() {\n var scaleOptions = this.options.scale;\n if (typeof scaleOptions.startAngle !== 'number') {\n scaleOptions.startAngle = defaultStartAngle;\n }\n\n scaleOptions.endAngle = scaleOptions.startAngle + 360;\n\n ArcGauge.fn._createModel.call(this);\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 CircularGauge: CircularGauge\n });\n\n })(window.kendo.jQuery);\n\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 CircularGauge = dataviz.CircularGauge;\n var draw = kendo.drawing;\n\n function themeOptions(options) {\n var themes = dataviz.ui.themes || {};\n var themeName = options.theme || \"\";\n var lowerName = themeName.toLowerCase();\n\n if (dataviz.SASS_THEMES.indexOf(lowerName) != -1) {\n return dataviz.autoTheme().gauge;\n }\n\n return (themes[themeName] || themes[lowerName] || {}).gauge;\n }\n\n var Gauge = Widget.extend({\n init: function(element, userOptions) {\n kendo.destroy(element);\n $(element).empty();\n\n Widget.fn.init.call(this, element);\n\n this.options = kendo.deepExtend(this.options, userOptions);\n\n this.wrapper = this.element;\n this._createInstance();\n\n this.element.addClass('k-gauge');\n\n kendo.notify(this, dataviz.ui);\n },\n\n options: {\n theme: \"default\",\n renderAs: \"\",\n pointer: {},\n scale: {},\n gaugeArea: {\n background: \"\"\n },\n transitions: true\n },\n\n setOptions: function(options) {\n this._instance.setOptions(options, themeOptions(options));\n\n this._copyFields();\n },\n\n redraw: function() {\n this._instance.redraw();\n this._copyFields();\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n this._instance.destroy();\n },\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\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\n _resize: function() {\n this._instance.resize();\n }\n });\n\n var proxyMembers = [\"getSize\", \"value\", \"allValues\", \"exportVisual\"];\n\n function createProxyMember(name) {\n Gauge.fn[name] = function() {\n return this._instance[name].apply(this._instance, arguments);\n };\n }\n\n for (var idx = 0; idx < proxyMembers.length; idx++) {\n createProxyMember(proxyMembers[idx]);\n }\n\n dataviz.ExportMixin.extend(Gauge.fn);\n\n var RadialGaugeWidget = Gauge.extend({\n\n options: {\n name: \"RadialGauge\"\n },\n\n _gaugeType: function() {\n return RadialGauge;\n }\n });\n\n var LinearGaugeWidget = Gauge.extend({\n\n options: {\n name: \"LinearGauge\",\n scale: {\n vertical: true\n }\n },\n\n _gaugeType: function() {\n return LinearGauge;\n }\n });\n\n var ArcGaugeWidget = Gauge.extend({\n init: function(element, userOptions) {\n Gauge.fn.init.call(this, element, userOptions);\n\n this.element.css('position', 'relative');\n this.element.addClass('k-arcgauge');\n\n this._centerTemplate();\n },\n\n options: {\n name: \"ArcGauge\"\n },\n\n setOptions: function(options) {\n Gauge.fn.setOptions.call(this, options);\n this._centerTemplate();\n },\n\n redraw: function() {\n Gauge.fn.redraw.call(this);\n this._centerTemplate();\n },\n\n value: function(value) {\n var instance = this._instance;\n if (arguments.length === 0) {\n return instance.value();\n }\n\n instance.value(value);\n\n this._centerTemplate();\n },\n\n destroy: function() {\n Gauge.fn.destroy.call(this);\n delete this._centerElement;\n },\n\n exportVisual: function() {\n if (this._centerElement) {\n return false;\n }\n\n return Gauge.fn.exportVisual.call(this);\n },\n\n _resize: function() {\n this._instance.resize();\n\n this._centerTemplate();\n },\n\n _centerTemplate: function() {\n if (this.options.centerTemplate) {\n var template = kendo.template(this.options.centerTemplate);\n\n var instance = this._instance;\n var centerElement = this._getCenterElement();\n\n centerElement.html(template({ color: instance.currentColor(), value: instance.value() }));\n\n var position = instance.centerLabelPosition(centerElement.width(), centerElement.height());\n\n centerElement.css(position);\n } else if (this._centerElement) {\n this._centerElement.remove();\n this._centerElement = null;\n }\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\n return centerElement;\n },\n\n _gaugeType: function() {\n return ArcGauge;\n }\n });\n\n var CircularGaugeWidget = ArcGaugeWidget.extend({\n options: {\n name: \"CircularGauge\"\n },\n\n _gaugeType: function() {\n return CircularGauge;\n }\n });\n\n function createExportMethod(name) {\n ArcGaugeWidget.fn[name] = function(options) {\n var gauge = this;\n var method = draw[name];\n\n if (!gauge._centerElement) {\n return method(gauge.exportVisual(), options);\n }\n\n return draw.drawDOM(gauge.element).then(function(visual) {\n return method(visual, options);\n });\n };\n }\n\n var exportMethods = ['exportSVG', 'exportImage', 'exportPDF'];\n\n for (idx = 0; idx < exportMethods.length; idx++) {\n createExportMethod(exportMethods[idx]);\n }\n\n dataviz.ui.plugin(LinearGaugeWidget);\n dataviz.ui.plugin(RadialGaugeWidget);\n dataviz.ui.plugin(ArcGaugeWidget);\n dataviz.ui.plugin(CircularGaugeWidget);\n\n kendo.deepExtend(dataviz, {\n Gauge: Gauge,\n LinearGauge: LinearGaugeWidget,\n RadialGauge: RadialGaugeWidget,\n ArcGauge: ArcGaugeWidget,\n CircularGauge: CircularGaugeWidget\n });\n\n })(window.kendo.jQuery);\n\n var __meta__$N = {\n id: \"dataviz.gauge\",\n name: \"Gauge\",\n category: \"dataviz\",\n description: \"Linear, Radial and Arc gauges.\",\n depends: [ \"dataviz.core\", \"dataviz.themes\" ]\n };\n\n var __meta__$M = {\n id: \"dataviz.barcode\",\n name: \"Barcode\",\n category: \"dataviz\",\n description: \"Barcode widget\",\n depends: [ \"dataviz.core\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n Widget = kendo.ui.Widget,\n\n extend = $.extend,\n deepExtend = kendo.deepExtend,\n inArray = $.inArray,\n isPlainObject = $.isPlainObject,\n\n draw = kendo.drawing,\n geom = kendo.geometry,\n util = kendo.drawing.util,\n defined = util.defined,\n dataviz = kendo.dataviz,\n Box2D = dataviz.Box2D,\n TextBox = dataviz.TextBox,\n DEFAULT_WIDTH = 300,\n DEFAULT_HEIGHT = 100,\n DEFAULT_QUIETZONE_LENGTH = 10,\n numberRegex = /^\\d+$/,\n alphanumericRegex = /^[a-z0-9]+$/i,\n InvalidCharacterErrorTemplate = \"Character '{0}' is not valid for symbology {1}\";\n\n function getNext(value, index, count) {\n return value.substring(index, index + count);\n }\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\n that.initValue(value, width, height);\n\n if (that.options.addQuietZone) {\n that.addQuietZone();\n }\n\n that.addData();\n\n if (that.options.addQuietZone) {\n that.addQuietZone();\n }\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 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\n var encodings = {};\n\n var code39Base = Encoding.extend({\n minBaseUnitLength: 0.7,\n addData: function() {\n var that = this,\n value = that.value;\n\n that.addStart();\n\n for (var idx = 0; idx < value.length; idx++) {\n that.addCharacter(value.charAt(idx));\n }\n\n if (that.options.addCheckSum) {\n that.pushCheckSum();\n }\n\n that.addStop();\n that.prepareValues();\n },\n addCharacter: function(character) {\n var that = this,\n 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 }\n else if (character.charCodeAt(0) > 127) {\n that.invalidCharacterError(character);\n }\n else {\n that.addExtended(character.charCodeAt(0));\n }\n },\n addExtended: function(code) {\n var that = this,\n 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 [that.characterMap[that.shiftCharacters[0]], that.characterMap[String.fromCharCode(code - 32)]];\n }\n },\n function(code) {\n if (33 <= code && code <= 58) {\n var that = this;\n return [that.characterMap[that.shiftCharacters[1]], that.characterMap[String.fromCharCode(code + 32)]];\n }\n },\n function(code) {\n if (1 <= code && code <= 26) {\n var that = this;\n return [that.characterMap[that.shiftCharacters[2]], that.characterMap[String.fromCharCode(code + 64)]];\n }\n },\n function(code) {\n var that = this,\n result,\n dataCharacter;\n if (!that.specialAsciiCodes[code]) {\n dataCharacter = Math.floor(code / 32) * 6 + (code - 27) % 32 + 64;\n result = [that.characterMap[that.shiftCharacters[3]], 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\n return result;\n }\n ],\n specialAsciiCodes: {\n \"0\": [\"U\"],\n \"64\": [\"V\"],\n \"96\": [\"W\"],\n \"127\": [\"T\",\"X\",\"Y\",\"Z\"]\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: [\"SHIFT0\", \"SHIFT1\", \"SHIFT2\", \"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,\n baseUnit,\n minBaseUnit = that.minBaseUnitLength,\n ratio = that.maxRatio,\n minRatio = that.minRatio,\n 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\n while ((baseUnit = that.getBaseUnit(ratio)) < minBaseUnit && ratio > minRatio) {\n ratio = parseFloat((ratio - 0.1).toFixed(1));\n }\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\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,\n 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\": { \"pattern\": \"bwbWBwBwb\",\"value\": 0 },\n \"1\": { \"pattern\": \"BwbWbwbwB\",\"value\": 1 },\n \"2\": { \"pattern\": \"bwBWbwbwB\",\"value\": 2 },\n \"3\": { \"pattern\": \"BwBWbwbwb\",\"value\": 3 },\n \"4\": { \"pattern\": \"bwbWBwbwB\",\"value\": 4 },\n \"5\": { \"pattern\": \"BwbWBwbwb\",\"value\": 5 },\n \"6\": { \"pattern\": \"bwBWBwbwb\",\"value\": 6 },\n \"7\": { \"pattern\": \"bwbWbwBwB\",\"value\": 7 },\n \"8\": { \"pattern\": \"BwbWbwBwb\",\"value\": 8 },\n \"9\": { \"pattern\": \"bwBWbwBwb\",\"value\": 9 },\n \"A\": { \"pattern\": \"BwbwbWbwB\",\"value\": 10 },\n \"B\": { \"pattern\": \"bwBwbWbwB\",\"value\": 11 },\n \"C\": { \"pattern\": \"BwBwbWbwb\",\"value\": 12 },\n \"D\": { \"pattern\": \"bwbwBWbwB\",\"value\": 13 },\n \"E\": { \"pattern\": \"BwbwBWbwb\",\"value\": 14 },\n \"F\": { \"pattern\": \"bwBwBWbwb\",\"value\": 15 },\n \"G\": { \"pattern\": \"bwbwbWBwB\",\"value\": 16 },\n \"H\": { \"pattern\": \"BwbwbWBwb\",\"value\": 17 },\n \"I\": { \"pattern\": \"bwBwbWBwb\",\"value\": 18 },\n \"J\": { \"pattern\": \"bwbwBWBwb\",\"value\": 19 },\n \"K\": { \"pattern\": \"BwbwbwbWB\",\"value\": 20 },\n \"L\": { \"pattern\": \"bwBwbwbWB\",\"value\": 21 },\n \"M\": { \"pattern\": \"BwBwbwbWb\",\"value\": 22 },\n \"N\": { \"pattern\": \"bwbwBwbWB\",\"value\": 23 },\n \"O\": { \"pattern\": \"BwbwBwbWb\",\"value\": 24 },\n \"P\": { \"pattern\": \"bwBwBwbWb\",\"value\": 25 },\n \"Q\": { \"pattern\": \"bwbwbwBWB\",\"value\": 26 },\n \"R\": { \"pattern\": \"BwbwbwBWb\",\"value\": 27 },\n \"S\": { \"pattern\": \"bwBwbwBWb\",\"value\": 28 },\n \"T\": { \"pattern\": \"bwbwBwBWb\",\"value\": 29 },\n \"U\": { \"pattern\": \"BWbwbwbwB\",\"value\": 30 },\n \"V\": { \"pattern\": \"bWBwbwbwB\",\"value\": 31 },\n \"W\": { \"pattern\": \"BWBwbwbwb\",\"value\": 32 },\n \"X\": { \"pattern\": \"bWbwBwbwB\",\"value\": 33 },\n \"Y\": { \"pattern\": \"BWbwBwbwb\",\"value\": 34 },\n \"Z\": { \"pattern\": \"bWBwBwbwb\",\"value\": 35 },\n \"-\": { \"pattern\": \"bWbwbwBwB\",\"value\": 36 },\n \".\": { \"pattern\": \"BWbwbwBwb\",\"value\": 37 },\n \" \": { \"pattern\": \"bWBwbwBwb\",\"value\": 38 },\n \"$\": { \"pattern\": \"bWbWbWbwb\",\"value\": 39 },\n \"/\": { \"pattern\": \"bWbWbwbWb\",\"value\": 40 },\n \"+\": { \"pattern\": \"bWbwbWbWb\",\"value\": 41 },\n \"%\": { \"pattern\": \"bwbWbWbWb\",\"value\": 42 },\n START: { pattern: \"bWbwBwBwb\" }\n },\n options: {\n addCheckSum: false\n }\n });\n\n encodings.code39extended = encodings.code39.extend(deepExtend({}, code39ExtendedBase, {\n name: \"Code 39 extended\",\n characterMap: {\n SHIFT0: { \"pattern\": \"bWbwbWbWb\",\"value\": 41 },\n SHIFT1: { \"pattern\": \"bWbWbwbWb\",\"value\": 40 },\n SHIFT2: { \"pattern\": \"bWbWbWbwb\",\"value\": 39 },\n SHIFT3: { \"pattern\": \"bwbWbWbWb\",\"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,\n minHeight = Math.max(0.15 * that.width, 24);\n if (that.height < minHeight) {\n throw new Error(\"Insufficient Height\");\n }\n\n that.setBaseUnit();\n\n if (that.baseUnit < that.minBaseUnitLength) {\n throw new Error(\"Insufficient Width\");\n }\n },\n setBaseUnit: function() {\n var that = this,\n 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,\n checkValues = that._getCheckValues(),\n charData;\n\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,\n values = that.values,\n length = values.length,\n wightedSum = 0,\n cValue,\n kValue,\n idx;\n\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\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\n kValue = wightedSum % that.checkSumMod;\n return [cValue, kValue];\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\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\": { \"pattern\": \"131112\",\"value\": 0 },\n \"1\": { \"pattern\": \"111213\",\"value\": 1 },\n \"2\": { \"pattern\": \"111312\",\"value\": 2 },\n \"3\": { \"pattern\": \"111411\",\"value\": 3 },\n \"4\": { \"pattern\": \"121113\",\"value\": 4 },\n \"5\": { \"pattern\": \"121212\",\"value\": 5 },\n \"6\": { \"pattern\": \"121311\",\"value\": 6 },\n \"7\": { \"pattern\": \"111114\",\"value\": 7 },\n \"8\": { \"pattern\": \"131211\",\"value\": 8 },\n \"9\": { \"pattern\": \"141111\",\"value\": 9 },\n \"A\": { \"pattern\": \"211113\",\"value\": 10 },\n \"B\": { \"pattern\": \"211212\",\"value\": 11 },\n \"C\": { \"pattern\": \"211311\",\"value\": 12 },\n \"D\": { \"pattern\": \"221112\",\"value\": 13 },\n \"E\": { \"pattern\": \"221211\",\"value\": 14 },\n \"F\": { \"pattern\": \"231111\",\"value\": 15 },\n \"G\": { \"pattern\": \"112113\",\"value\": 16 },\n \"H\": { \"pattern\": \"112212\",\"value\": 17 },\n \"I\": { \"pattern\": \"112311\",\"value\": 18 },\n \"J\": { \"pattern\": \"122112\",\"value\": 19 },\n \"K\": { \"pattern\": \"132111\",\"value\": 20 },\n \"L\": { \"pattern\": \"111123\",\"value\": 21 },\n \"M\": { \"pattern\": \"111222\",\"value\": 22 },\n \"N\": { \"pattern\": \"111321\",\"value\": 23 },\n \"O\": { \"pattern\": \"121122\",\"value\": 24 },\n \"P\": { \"pattern\": \"131121\",\"value\": 25 },\n \"Q\": { \"pattern\": \"212112\",\"value\": 26 },\n \"R\": { \"pattern\": \"212211\",\"value\": 27 },\n \"S\": { \"pattern\": \"211122\",\"value\": 28 },\n \"T\": { \"pattern\": \"211221\",\"value\": 29 },\n \"U\": { \"pattern\": \"221121\",\"value\": 30 },\n \"V\": { \"pattern\": \"222111\",\"value\": 31 },\n \"W\": { \"pattern\": \"112122\",\"value\": 32 },\n \"X\": { \"pattern\": \"112221\",\"value\": 33 },\n \"Y\": { \"pattern\": \"122121\",\"value\": 34 },\n \"Z\": { \"pattern\": \"123111\",\"value\": 35 },\n \"-\": { \"pattern\": \"121131\",\"value\": 36 },\n \".\": { \"pattern\": \"311112\",\"value\": 37 },\n \" \": { \"pattern\": \"311211\",\"value\": 38 },\n \"$\": { \"pattern\": \"321111\",\"value\": 39 },\n \"/\": { \"pattern\": \"112131\",\"value\": 40 },\n \"+\": { \"pattern\": \"113121\",\"value\": 41 },\n \"%\": { \"pattern\": \"211131\",\"value\": 42 },\n SHIFT0: { \"pattern\": \"122211\",\"value\": 46 },\n SHIFT1: { \"pattern\": \"311121\",\"value\": 45 },\n SHIFT2: { \"pattern\": \"121221\",\"value\": 43 },\n SHIFT3: { \"pattern\": \"312111\",\"value\": 44 },\n START: { \"pattern\": \"111141\" },\n TERMINATION_BAR: \"1\"\n }\n });\n\n encodings.code93extended = encodings.code93.extend(deepExtend({}, code39ExtendedBase, {\n name: \"Code 93 extended\",\n pushCheckSum: function() {\n var that = this,\n checkValues = that._getCheckValues(),\n value;\n\n that.checksum = checkValues.join(\"\");\n\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 }\n else {\n that.addPattern(that.characterMap[that._findCharacterByValue(value)].pattern);\n }\n }\n }\n }));\n\n var state128 = kendo.Class.extend({\n init: function(encoding) {\n this.encoding = encoding;\n },\n addStart: function() {},\n is: function() {},\n move: function() {},\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,\n idx = 0;\n\n while (!that._moves[idx].call(that, encodingState) && idx < that._moves.length) {\n idx++;\n }\n },\n pushState: function(encodingState) {\n var that = this,\n states = that.states,\n value = encodingState.value,\n maxLength = value.length,\n code;\n\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\n while ((code = encodingState.value.charCodeAt(encodingState.index)) >= 0 &&\n 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\n if (inArray(that.FNC4, states) >= 0) {\n that._moves.push(that._moveFNC);\n }\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 &&\n (encodingState.index + 1 >= encodingState.value.length ||\n 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\n var states128 = {};\n\n states128.A = state128AB.extend({\n key: \"A\",\n shiftKey: \"B\",\n isCode: function(code) {\n return code >= 0 && code < 96;\n },\n getValue: function(code) {\n if (code < 32) {\n return code + 64;\n }\n\n return code - 32;\n },\n MOVE: 101,\n START: 103\n });\n\n states128.B = state128AB.extend({\n key: \"B\",\n shiftKey: \"A\",\n isCode: function(code) {\n return code >= 32 && code < 128;\n },\n getValue: function(code) {\n return code - 32;\n },\n MOVE: 100,\n START: 104\n });\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)) &&\n numberRegex.test(code) && code.length == 2)\n {\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\n states128.FNC4 = state128.extend({\n key: \"FNC4\",\n dependentStates: [\"A\",\"B\"],\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,\n subState = this._getSubState(code);\n\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 code >= 128 && code < 256;\n },\n pushState: function(encodingState) {\n var that = this,\n subState = that._initSubState(encodingState),\n encoding = that.encoding,\n length = subState.value.length;\n encodingState.index += length;\n\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 }\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\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,\n 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 ?\n 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,\n result = \"\";\n while ((code = value.charCodeAt(index++)) && this.isCode(code)) {\n result += String.fromCharCode(code - 128);\n }\n return result;\n }\n });\n\n states128.FNC1 = state128.extend({\n key: \"FNC1\",\n startState: \"C\",\n dependentStates: [\"C\",\"B\"],\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,\n encoding = that.encoding,\n value = encodingState.value.replace(/\\s/g, \"\"),\n regexSeparators = new RegExp(\"[\" + that.startAI + that.endAI + \"]\", \"g\"),\n index = encodingState.index,\n subState = {\n state: that.startState\n },\n current,\n nextStart,\n separatorLength;\n\n encoding.addPattern(that.START);\n\n while (true) {\n subState.index = 0;\n\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 }\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\n encoding.pushData(subState, that.dependentStates);\n\n if (nextStart >= value.length) {\n break;\n }\n\n index = nextStart;\n\n if (subState.state != that.startState) {\n encoding[that.startState].move(subState);\n subState.state = that.startState;\n }\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),\n 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\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\n if (ai.length && ai.length !== code.length) {\n throw new Error(\"Application identifier \" + current.id + \" must be \" + ai.length + \" characters long.\");\n }\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\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,\n id,\n 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,\n start = value.indexOf(that.startAI, index),\n end = value.indexOf(that.endAI, start),\n id = value.substring(start + 1,end),\n ai = that.getAI(id) || that.getAI(id.substr(id.length - 1));\n if (!ai) {\n that.unsupportedAIError(id);\n }\n\n return {\n ai: ai,\n id: id\n };\n },\n getAI: function(id) {\n var ai = this.applicationIdentifiers,\n multiKey = ai.multiKey;\n if (ai[id]) {\n return ai[id];\n }\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 }\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\": { max: 29, type: \"alphanumeric\" },\n \"402\": { length: 17 },\n \"7004\": { max: 4, type: \"alphanumeric\" },\n \"242\": { max: 6, type: \"alphanumeric\" },\n \"8020\": { max: 25, type: \"alphanumeric\" },\n \"703\": { min: 3, max: 30, type: \"alphanumeric\" },\n \"8008\": { min: 8, max: 12, type: \"alphanumeric\" },\n \"253\": { min: 13, max: 17, type: \"alphanumeric\" },\n \"8003\": { min: 14, max: 30, type: \"alphanumeric\" },\n multiKey: [{\n ids: [\"15\", \"17\", \"8005\", \"8100\"],\n ranges: [\n [11, 13],\n [310, 316],\n [320, 336],\n [340, 369]\n ],\n type: { length: 6 }\n },{\n ids: [\"240\", \"241\", \"250\", \"251\", \"400\", \"401\", \"403\", \"7002\", \"8004\", \"8007\", \"8110\"],\n ranges: [[90 - 99]],\n type: { max: 30, type: \"alphanumeric\" }\n },{\n ids: [\"7001\"],\n ranges: [[410, 414]],\n type: { length: 13 }\n },{\n ids: [\"10\",\"21\", \"254\", \"420\", \"8002\"],\n type: { max: 20, type: \"alphanumeric\" }\n },{\n ids: [\"00\", \"8006\", \"8017\", \"8018\"],\n type: { length: 18 }\n },{\n ids: [\"01\", \"02\", \"8001\"],\n type: { length: 14 }\n },{\n ids: [\"422\"],\n ranges: [\n [424, 426]\n ],\n type: { length: 3 }\n },{\n ids: [\"20\", \"8102\"],\n type: { length: 2 }\n },{\n ids: [\"30\",\"37\"],\n type: { max: 8, type: \"alphanumeric\" }\n },{\n ids: [\"390\",\"392\"],\n type: { max: 15, type: \"alphanumeric\" }\n },{\n ids: [\"421\", \"423\"],\n type: { min: 3, max: 15, type: \"alphanumeric\" }\n }, {\n ids: [\"391\", \"393\"],\n type: { min: 3, max: 18, type: \"alphanumeric\" }\n },{\n ids: [\"7003\", \"8101\"],\n type: { length: 10 }\n }]\n },\n START: 102\n });\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,\n encodingState = {\n value: that.value,\n index: 0,\n state: \"\"\n };\n if (that.value.length === 0) {\n return;\n }\n\n encodingState.state =\n encodingState.previousState = that.getNextState(encodingState, that.states);\n\n that.addStart(encodingState);\n\n that.pushData(encodingState, that.states);\n\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\n if (!encodingState.shifted) {\n encodingState.previousState = encodingState.state;\n encodingState.state = that.getNextState(encodingState, states);\n that[encodingState.state].move(encodingState);\n }\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\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,\n pattern = that.characterMap[code].toString(),\n value;\n\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,222122,222221,121223,121322,131222,122213,122312,132212,221213,\n 221312,231212,112232,122132,122231,113222,123122,123221,223211,221132,\n 221231,213212,223112,312131,311222,321122,321221,312212,322112,322211,\n 212123,212321,232121,111323,131123,131321,112313,132113,132311,211313,\n 231113,231311,112133,112331,132131,113123,113321,133121,313121,211331,\n 231131,213113,213311,213131,311123,311321,331121,312113,312311,332111,\n 314111,221411,431111,111224,111422,121124,121421,141122,141221,112214,\n 112412,122114,122411,142112,142211,241211,221114,413111,241112,134111,\n 111242,121142,121241,114212,124112,124211,411212,421112,421211,212141,\n 214121,412121,111143,111341,131141,114113,114311,411113,411311,113141,\n 114131,311141,411131,211412,211214,211232,2331112\n ],\n STOP: 106\n });\n\n encodings.code128a = code128Base.extend({\n name: \"Code 128 A\",\n states: [\"A\"]\n });\n\n\n encodings.code128b = code128Base.extend({\n name: \"Code 128 B\",\n states: [\"B\"]\n });\n\n encodings.code128c = code128Base.extend({\n name: \"Code 128 C\",\n states: [\"C\"]\n });\n\n encodings.code128 = code128Base.extend({\n name: \"Code 128\",\n states: [\"C\", \"B\", \"A\", \"FNC4\"]\n });\n\n encodings[\"gs1-128\"] = code128Base.extend({\n name: \"Code GS1-128\",\n states: [\"FNC1\", \"C\", \"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,\n startStopLength = 7;\n\n that.baseUnit = that.width /\n ( 12 * (that.value.length + that.checkSumLength) + that.quietZoneLength + startStopLength);\n },\n addData: function() {\n var that = this,\n value = that.value;\n that.addPattern(that.START);\n\n for (var i = 0; i < value.length; i++) {\n that.addCharacter(value.charAt(i));\n }\n\n if (that.options.addCheckSum) {\n that.addCheckSum();\n }\n\n that.addPattern(that.STOP);\n that.setBaseUnit();\n },\n addCharacter: function(character) {\n var that = this,\n 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,\n checkSumFunction = that.checkSums[that.checkSumType],\n checkValues;\n\n checkValues = checkSumFunction.call(that.checkSums, that.value);\n\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 = [0, \"\"],\n odd = value.length % 2,\n idx,\n evenSum,\n oddSum;\n\n for (idx = 0; idx < value.length; idx++) {\n checkValues[(idx + odd) % 2] += parseInt(value.charAt(idx),10);\n }\n\n oddSum = checkValues[0];\n evenSum = (checkValues[1] * 2).toString();\n\n for (idx = 0; idx < evenSum.length; idx++) {\n oddSum += parseInt(evenSum.charAt(idx),10);\n }\n\n return [(10 - (oddSum % 10)) % 10];\n },\n Modulo11: function(value) {\n var weightedSum = 0,\n mod = 11,\n length = value.length,\n weight,\n checkValue;\n\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 [1, 0];\n },\n Modulo11Modulo10: function(value) {\n var checkValues = this.Modulo11(value),\n mod11Value;\n mod11Value = value + checkValues[0];\n\n return checkValues.concat(this.Modulo10(mod11Value));\n },\n Modulo10Modulo10: function(value) {\n var checkValues = this.Modulo10(value),\n mod10Value;\n mod10Value = value + checkValues[0];\n\n return checkValues.concat(this.Modulo10(mod10Value));\n }\n },\n characterMap: [\"12121212\", \"12121221\",\"12122112\", \"12122121\", \"12211212\", \"12211221\", \"12212112\", \"12212121\", \"21121212\", \"21121221\"],\n START: \"21\",\n STOP: \"121\",\n checkSumType: \"\"\n });\n\n encodings.msimod10 = msiBase.extend({\n name: \"MSI Modulo10\",\n checkSumType: \"Modulo10\"\n });\n\n encodings.msimod11 = msiBase.extend({\n name: \"MSI Modulo11\",\n checkSumType: \"Modulo11\"\n });\n\n encodings.msimod1110 = msiBase.extend({\n name: \"MSI Modulo11 Modulo10\",\n checkSumType: \"Modulo11Modulo10\"\n });\n\n encodings.msimod1010 = msiBase.extend({\n name: \"MSI Modulo10 Modulo10\",\n checkSumType: \"Modulo10Modulo10\"\n });\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\n for (var i = 0; i < value.length; i++) {\n that.addCharacter(value.charAt(i));\n }\n\n if (that.options.addCheckSum) {\n that.addCheckSum();\n }\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,\n value = that.value,\n length = value.length,\n cValue;\n\n cValue = that.getWeightedSum(value, length, that.cCheckSumTotal) % that.checkSumMod;\n that.checksum = cValue + \"\";\n that.addPattern(that.characterMap[cValue]);\n\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\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 }\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,\n value = that.getValue(character),\n 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: [\"111121\", \"211121\", \"121121\", \"221111\", \"112121\", \"212111\", \"122111\", \"111221\", \"211211\", \"211111\", \"112111\"],\n options: {\n addCheckSum: true\n }\n });\n\n encodings.postnet = Encoding.extend({\n name: \"Postnet\",\n START: \"2\",\n VALID_CODE_LENGTHS: [5,9, 11],\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,\n value = that.value;\n that.addPattern(that.START);\n\n for (var i = 0; i < value.length; i++) {\n that.addCharacter(value.charAt(i));\n }\n\n if (that.options.addCheckSum) {\n that.addCheckSum();\n }\n\n that.addPattern(that.START);\n that.pattern.pop();\n },\n addCharacter: function(character) {\n var that = this,\n 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,\n 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\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,\n y1;\n for (var i = 0; i < pattern.length; i++) {\n y1 = that.height - that.baseHeight * pattern.charAt(i);\n that.pattern.push({ width: 1, y1: y1, y2: that.height });\n that.pattern.push(1);\n }\n },\n characterMap: [\"22111\", \"11122\", \"11212\", \"11221\", \"12112\", \"12121\", \"12211\", \"21112\", \"21121\", \"21211\"]\n });\n\n encodings.ean13 = Encoding.extend({\n initValue: function(value, width, height) {\n value += \"\";\n\n if (value.length != 12 || /\\D/.test(value)) {\n throw new Error('The value of the \"EAN13\" encoding should be 12 symbols');\n }\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,\n even = 0,\n 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 }\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 [3,2,1,1],\n [2,2,2,1],\n [2,1,2,2],\n [1,4,1,1],\n [1,1,3,2],\n [1,2,3,1],\n [1,1,1,4],\n [1,3,1,2],\n [1,2,1,3],\n [3,1,1,2]\n ],\n start: [1,1,1],\n middle: [1,1,1,1,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\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, {\n type: that.options.renderAs\n });\n that._setOptions(options);\n if (options && defined(options.value)) {\n that.redraw();\n }\n },\n\n setOptions: function(options) {\n this._setOptions(options);\n this.redraw();\n },\n\n redraw: function() {\n var size = this._getSize();\n\n this.surface.clear();\n this.surface.setSize({\n width: size.width,\n height: size.height\n });\n\n this.createVisual();\n this.surface.draw(this.visual);\n },\n\n getSize: function() {\n return kendo.dimensions(this.element);\n },\n\n _resize: function() {\n this.redraw();\n },\n\n createVisual: function() {\n this.visual = this._render();\n },\n\n _render: function() {\n var that = this,\n options = that.options,\n value = options.value,\n textOptions = options.text,\n textMargin = dataviz.getSpacing(textOptions.margin),\n size = that._getSize(),\n border = options.border || {},\n encoding = that.encoding,\n contentBox = new Box2D(0, 0, size.width, size.height).unpad(border.width).unpad(options.padding),\n barHeight = contentBox.height(),\n result, textToDisplay,\n textHeight;\n\n var visual = new draw.Group();\n\n that.contentBox = contentBox;\n visual.append(that._getBackground(size));\n\n if (textOptions.visible) {\n textHeight = draw.util.measureText(value, { font: textOptions.font }).height;\n barHeight -= textHeight + textMargin.top + textMargin.bottom;\n }\n\n result = encoding.encode(value, contentBox.width(), barHeight);\n\n if (textOptions.visible) {\n textToDisplay = value;\n if (options.checksum && defined(encoding.checksum)) {\n textToDisplay += \" \" + encoding.checksum;\n }\n\n visual.append(that._getText(textToDisplay));\n }\n\n that.barHeight = barHeight;\n this._bandsGroup = this._getBands(result.pattern, result.baseUnit);\n visual.append(this._bandsGroup);\n\n return visual;\n },\n\n exportVisual: function() {\n return this._render();\n },\n\n _getSize: function() {\n var that = this,\n element = that.element,\n size = new geom.Size(DEFAULT_WIDTH, DEFAULT_HEIGHT);\n\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\n return size;\n },\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\n _getBands: function(pattern, baseUnit) {\n var that = this,\n contentBox = that.contentBox,\n position = contentBox.x1,\n step,\n item;\n\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\n step = item.width * baseUnit;\n\n if (i % 2) {\n var rect = geom.Rect.fromPoints(\n new geom.Point(position, item.y1 + contentBox.y1),\n new geom.Point(position + step, item.y2 + contentBox.y1)\n );\n\n var path = draw.Path.fromRect(rect, {\n fill: {\n color: that.options.color\n },\n stroke: null\n });\n\n group.append(path);\n }\n\n position += step;\n }\n\n return group;\n },\n\n _getBackground: function(size) {\n var that = this,\n options = that.options,\n border = options.border || {};\n\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: {\n color: options.background\n },\n stroke: {\n color: border.width ? border.color : \"\",\n width: border.width,\n dashType: border.dashType\n }\n });\n\n return path;\n },\n\n _getText: function(value) {\n var that = this,\n textOptions = that.options.text,\n 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\n text.reflow(that.contentBox);\n text.renderVisual();\n\n return text.visual;\n },\n\n _setOptions: function(options) {\n var that = this;\n that.type = (options.type || that.options.type).toLowerCase();\n\n if (that.type == \"upca\") { //extend instead\n that.type = \"ean13\";\n options.value = '0' + options.value;\n }\n\n if (that.type == \"upce\") {\n that.type = \"ean8\";\n options.value = '0' + options.value;\n }\n\n if (!encodings[that.type]) {\n throw new Error('Encoding ' + that.type + 'is not supported.');\n }\n\n that.encoding = new encodings[that.type]();\n\n that.options = extend(true, that.options, options);\n },\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\n dataviz.ui.plugin(Barcode);\n\n kendo.deepExtend(dataviz, {\n encodings: encodings,\n Encoding: Encoding\n });\n\n })(window.kendo.jQuery);\n\n var __meta__$L = {\n id: \"dataviz.qrcode\",\n name: \"QRCode\",\n category: \"dataviz\",\n description: \"QRCode widget.\",\n depends: [ \"dataviz.core\", \"drawing\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n extend = $.extend,\n draw = kendo.drawing,\n dataviz = kendo.dataviz,\n Widget = kendo.ui.Widget,\n Box2D = dataviz.Box2D,\n terminator = \"0000\",\n NUMERIC = \"numeric\",\n ALPHA_NUMERIC = \"alphanumeric\",\n BYTE = \"byte\",\n powersOfTwo = { \"1\": 0 },\n powersOfTwoResult = { \"0\": 1 },\n generatorPolynomials = [[1,0],[1,25,0]],\n irregularAlignmentPatternsStartDistance = { 15: 20,16: 20,18: 24,19: 24,22: 20,24: 22,26: 24,28: 20,30: 20,31: 24,32: 28,33: 24,36: 18,37: 22,39: 20,40: 24 },\n versionsCodewordsInformation = [{ L: { groups: [[1,19]],totalDataCodewords: 19,errorCodewordsPerBlock: 7 },M: { groups: [[1,16]],totalDataCodewords: 16,errorCodewordsPerBlock: 10 },Q: { groups: [[1,13]],totalDataCodewords: 13,errorCodewordsPerBlock: 13 },H: { groups: [[1,9]],totalDataCodewords: 9,errorCodewordsPerBlock: 17 } },{ L: { groups: [[1,34]],totalDataCodewords: 34,errorCodewordsPerBlock: 10 },M: { groups: [[1,28]],totalDataCodewords: 28,errorCodewordsPerBlock: 16 },Q: { groups: [[1,22]],totalDataCodewords: 22,errorCodewordsPerBlock: 22 },H: { groups: [[1,16]],totalDataCodewords: 16,errorCodewordsPerBlock: 28 } },{ L: { groups: [[1,55]],totalDataCodewords: 55,errorCodewordsPerBlock: 15 },M: { groups: [[1,44]],totalDataCodewords: 44,errorCodewordsPerBlock: 26 },Q: { groups: [[2,17]],totalDataCodewords: 34,errorCodewordsPerBlock: 18 },H: { groups: [[2,13]],totalDataCodewords: 26,errorCodewordsPerBlock: 22 } },{ L: { groups: [[1,80]],totalDataCodewords: 80,errorCodewordsPerBlock: 20 },M: { groups: [[2,32]],totalDataCodewords: 64,errorCodewordsPerBlock: 18 },Q: { groups: [[2,24]],totalDataCodewords: 48,errorCodewordsPerBlock: 26 },H: { groups: [[4,9]],totalDataCodewords: 36,errorCodewordsPerBlock: 16 } },{ L: { groups: [[1,108]],totalDataCodewords: 108,errorCodewordsPerBlock: 26 },M: { groups: [[2,43]],totalDataCodewords: 86,errorCodewordsPerBlock: 24 },Q: { groups: [[2,15],[2,16]],totalDataCodewords: 62,errorCodewordsPerBlock: 18 },H: { groups: [[2,11],[2,12]],totalDataCodewords: 46,errorCodewordsPerBlock: 22 } },{ L: { groups: [[2,68]],totalDataCodewords: 136,errorCodewordsPerBlock: 18 },M: { groups: [[4,27]],totalDataCodewords: 108,errorCodewordsPerBlock: 16 },Q: { groups: [[4,19]],totalDataCodewords: 76,errorCodewordsPerBlock: 24 },H: { groups: [[4,15]],totalDataCodewords: 60,errorCodewordsPerBlock: 28 } },{ L: { groups: [[2,78]],totalDataCodewords: 156,errorCodewordsPerBlock: 20 },M: { groups: [[4,31]],totalDataCodewords: 124,errorCodewordsPerBlock: 18 },Q: { groups: [[2,14],[4,15]],totalDataCodewords: 88,errorCodewordsPerBlock: 18 },H: { groups: [[4,13],[1,14]],totalDataCodewords: 66,errorCodewordsPerBlock: 26 } },{ L: { groups: [[2,97]],totalDataCodewords: 194,errorCodewordsPerBlock: 24 },M: { groups: [[2,38],[2,39]],totalDataCodewords: 154,errorCodewordsPerBlock: 22 },Q: { groups: [[4,18],[2,19]],totalDataCodewords: 110,errorCodewordsPerBlock: 22 },H: { groups: [[4,14],[2,15]],totalDataCodewords: 86,errorCodewordsPerBlock: 26 } },{ L: { groups: [[2,116]],totalDataCodewords: 232,errorCodewordsPerBlock: 30 },M: { groups: [[3,36],[2,37]],totalDataCodewords: 182,errorCodewordsPerBlock: 22 },Q: { groups: [[4,16],[4,17]],totalDataCodewords: 132,errorCodewordsPerBlock: 20 },H: { groups: [[4,12],[4,13]],totalDataCodewords: 100,errorCodewordsPerBlock: 24 } },{ L: { groups: [[2,68],[2,69]],totalDataCodewords: 274,errorCodewordsPerBlock: 18 },M: { groups: [[4,43],[1,44]],totalDataCodewords: 216,errorCodewordsPerBlock: 26 },Q: { groups: [[6,19],[2,20]],totalDataCodewords: 154,errorCodewordsPerBlock: 24 },H: { groups: [[6,15],[2,16]],totalDataCodewords: 122,errorCodewordsPerBlock: 28 } },{ L: { groups: [[4,81]],totalDataCodewords: 324,errorCodewordsPerBlock: 20 },M: { groups: [[1,50],[4,51]],totalDataCodewords: 254,errorCodewordsPerBlock: 30 },Q: { groups: [[4,22],[4,23]],totalDataCodewords: 180,errorCodewordsPerBlock: 28 },H: { groups: [[3,12],[8,13]],totalDataCodewords: 140,errorCodewordsPerBlock: 24 } },{ L: { groups: [[2,92],[2,93]],totalDataCodewords: 370,errorCodewordsPerBlock: 24 },M: { groups: [[6,36],[2,37]],totalDataCodewords: 290,errorCodewordsPerBlock: 22 },Q: { groups: [[4,20],[6,21]],totalDataCodewords: 206,errorCodewordsPerBlock: 26 },H: { groups: [[7,14],[4,15]],totalDataCodewords: 158,errorCodewordsPerBlock: 28 } },{ L: { groups: [[4,107]],totalDataCodewords: 428,errorCodewordsPerBlock: 26 },M: { groups: [[8,37],[1,38]],totalDataCodewords: 334,errorCodewordsPerBlock: 22 },Q: { groups: [[8,20],[4,21]],totalDataCodewords: 244,errorCodewordsPerBlock: 24 },H: { groups: [[12,11],[4,12]],totalDataCodewords: 180,errorCodewordsPerBlock: 22 } },{ L: { groups: [[3,115],[1,116]],totalDataCodewords: 461,errorCodewordsPerBlock: 30 },M: { groups: [[4,40],[5,41]],totalDataCodewords: 365,errorCodewordsPerBlock: 24 },Q: { groups: [[11,16],[5,17]],totalDataCodewords: 261,errorCodewordsPerBlock: 20 },H: { groups: [[11,12],[5,13]],totalDataCodewords: 197,errorCodewordsPerBlock: 24 } },{ L: { groups: [[5,87],[1,88]],totalDataCodewords: 523,errorCodewordsPerBlock: 22 },M: { groups: [[5,41],[5,42]],totalDataCodewords: 415,errorCodewordsPerBlock: 24 },Q: { groups: [[5,24],[7,25]],totalDataCodewords: 295,errorCodewordsPerBlock: 30 },H: { groups: [[11,12],[7,13]],totalDataCodewords: 223,errorCodewordsPerBlock: 24 } },{ L: { groups: [[5,98],[1,99]],totalDataCodewords: 589,errorCodewordsPerBlock: 24 },M: { groups: [[7,45],[3,46]],totalDataCodewords: 453,errorCodewordsPerBlock: 28 },Q: { groups: [[15,19],[2,20]],totalDataCodewords: 325,errorCodewordsPerBlock: 24 },H: { groups: [[3,15],[13,16]],totalDataCodewords: 253,errorCodewordsPerBlock: 30 } },{ L: { groups: [[1,107],[5,108]],totalDataCodewords: 647,errorCodewordsPerBlock: 28 },M: { groups: [[10,46],[1,47]],totalDataCodewords: 507,errorCodewordsPerBlock: 28 },Q: { groups: [[1,22],[15,23]],totalDataCodewords: 367,errorCodewordsPerBlock: 28 },H: { groups: [[2,14],[17,15]],totalDataCodewords: 283,errorCodewordsPerBlock: 28 } },{ L: { groups: [[5,120],[1,121]],totalDataCodewords: 721,errorCodewordsPerBlock: 30 },M: { groups: [[9,43],[4,44]],totalDataCodewords: 563,errorCodewordsPerBlock: 26 },Q: { groups: [[17,22],[1,23]],totalDataCodewords: 397,errorCodewordsPerBlock: 28 },H: { groups: [[2,14],[19,15]],totalDataCodewords: 313,errorCodewordsPerBlock: 28 } },{ L: { groups: [[3,113],[4,114]],totalDataCodewords: 795,errorCodewordsPerBlock: 28 },M: { groups: [[3,44],[11,45]],totalDataCodewords: 627,errorCodewordsPerBlock: 26 },Q: { groups: [[17,21],[4,22]],totalDataCodewords: 445,errorCodewordsPerBlock: 26 },H: { groups: [[9,13],[16,14]],totalDataCodewords: 341,errorCodewordsPerBlock: 26 } },{ L: { groups: [[3,107],[5,108]],totalDataCodewords: 861,errorCodewordsPerBlock: 28 },M: { groups: [[3,41],[13,42]],totalDataCodewords: 669,errorCodewordsPerBlock: 26 },Q: { groups: [[15,24],[5,25]],totalDataCodewords: 485,errorCodewordsPerBlock: 30 },H: { groups: [[15,15],[10,16]],totalDataCodewords: 385,errorCodewordsPerBlock: 28 } },{ L: { groups: [[4,116],[4,117]],totalDataCodewords: 932,errorCodewordsPerBlock: 28 },M: { groups: [[17,42]],totalDataCodewords: 714,errorCodewordsPerBlock: 26 },Q: { groups: [[17,22],[6,23]],totalDataCodewords: 512,errorCodewordsPerBlock: 28 },H: { groups: [[19,16],[6,17]],totalDataCodewords: 406,errorCodewordsPerBlock: 30 } },{ L: { groups: [[2,111],[7,112]],totalDataCodewords: 1006,errorCodewordsPerBlock: 28 },M: { groups: [[17,46]],totalDataCodewords: 782,errorCodewordsPerBlock: 28 },Q: { groups: [[7,24],[16,25]],totalDataCodewords: 568,errorCodewordsPerBlock: 30 },H: { groups: [[34,13]],totalDataCodewords: 442,errorCodewordsPerBlock: 24 } },{ L: { groups: [[4,121],[5,122]],totalDataCodewords: 1094,errorCodewordsPerBlock: 30 },M: { groups: [[4,47],[14,48]],totalDataCodewords: 860,errorCodewordsPerBlock: 28 },Q: { groups: [[11,24],[14,25]],totalDataCodewords: 614,errorCodewordsPerBlock: 30 },H: { groups: [[16,15],[14,16]],totalDataCodewords: 464,errorCodewordsPerBlock: 30 } },{ L: { groups: [[6,117],[4,118]],totalDataCodewords: 1174,errorCodewordsPerBlock: 30 },M: { groups: [[6,45],[14,46]],totalDataCodewords: 914,errorCodewordsPerBlock: 28 },Q: { groups: [[11,24],[16,25]],totalDataCodewords: 664,errorCodewordsPerBlock: 30 },H: { groups: [[30,16],[2,17]],totalDataCodewords: 514,errorCodewordsPerBlock: 30 } },{ L: { groups: [[8,106],[4,107]],totalDataCodewords: 1276,errorCodewordsPerBlock: 26 },M: { groups: [[8,47],[13,48]],totalDataCodewords: 1000,errorCodewordsPerBlock: 28 },Q: { groups: [[7,24],[22,25]],totalDataCodewords: 718,errorCodewordsPerBlock: 30 },H: { groups: [[22,15],[13,16]],totalDataCodewords: 538,errorCodewordsPerBlock: 30 } },{ L: { groups: [[10,114],[2,115]],totalDataCodewords: 1370,errorCodewordsPerBlock: 28 },M: { groups: [[19,46],[4,47]],totalDataCodewords: 1062,errorCodewordsPerBlock: 28 },Q: { groups: [[28,22],[6,23]],totalDataCodewords: 754,errorCodewordsPerBlock: 28 },H: { groups: [[33,16],[4,17]],totalDataCodewords: 596,errorCodewordsPerBlock: 30 } },{ L: { groups: [[8,122],[4,123]],totalDataCodewords: 1468,errorCodewordsPerBlock: 30 },M: { groups: [[22,45],[3,46]],totalDataCodewords: 1128,errorCodewordsPerBlock: 28 },Q: { groups: [[8,23],[26,24]],totalDataCodewords: 808,errorCodewordsPerBlock: 30 },H: { groups: [[12,15],[28,16]],totalDataCodewords: 628,errorCodewordsPerBlock: 30 } },{ L: { groups: [[3,117],[10,118]],totalDataCodewords: 1531,errorCodewordsPerBlock: 30 },M: { groups: [[3,45],[23,46]],totalDataCodewords: 1193,errorCodewordsPerBlock: 28 },Q: { groups: [[4,24],[31,25]],totalDataCodewords: 871,errorCodewordsPerBlock: 30 },H: { groups: [[11,15],[31,16]],totalDataCodewords: 661,errorCodewordsPerBlock: 30 } },{ L: { groups: [[7,116],[7,117]],totalDataCodewords: 1631,errorCodewordsPerBlock: 30 },M: { groups: [[21,45],[7,46]],totalDataCodewords: 1267,errorCodewordsPerBlock: 28 },Q: { groups: [[1,23],[37,24]],totalDataCodewords: 911,errorCodewordsPerBlock: 30 },H: { groups: [[19,15],[26,16]],totalDataCodewords: 701,errorCodewordsPerBlock: 30 } },{ L: { groups: [[5,115],[10,116]],totalDataCodewords: 1735,errorCodewordsPerBlock: 30 },M: { groups: [[19,47],[10,48]],totalDataCodewords: 1373,errorCodewordsPerBlock: 28 },Q: { groups: [[15,24],[25,25]],totalDataCodewords: 985,errorCodewordsPerBlock: 30 },H: { groups: [[23,15],[25,16]],totalDataCodewords: 745,errorCodewordsPerBlock: 30 } },{ L: { groups: [[13,115],[3,116]],totalDataCodewords: 1843,errorCodewordsPerBlock: 30 },M: { groups: [[2,46],[29,47]],totalDataCodewords: 1455,errorCodewordsPerBlock: 28 },Q: { groups: [[42,24],[1,25]],totalDataCodewords: 1033,errorCodewordsPerBlock: 30 },H: { groups: [[23,15],[28,16]],totalDataCodewords: 793,errorCodewordsPerBlock: 30 } },{ L: { groups: [[17,115]],totalDataCodewords: 1955,errorCodewordsPerBlock: 30 },M: { groups: [[10,46],[23,47]],totalDataCodewords: 1541,errorCodewordsPerBlock: 28 },Q: { groups: [[10,24],[35,25]],totalDataCodewords: 1115,errorCodewordsPerBlock: 30 },H: { groups: [[19,15],[35,16]],totalDataCodewords: 845,errorCodewordsPerBlock: 30 } },{ L: { groups: [[17,115],[1,116]],totalDataCodewords: 2071,errorCodewordsPerBlock: 30 },M: { groups: [[14,46],[21,47]],totalDataCodewords: 1631,errorCodewordsPerBlock: 28 },Q: { groups: [[29,24],[19,25]],totalDataCodewords: 1171,errorCodewordsPerBlock: 30 },H: { groups: [[11,15],[46,16]],totalDataCodewords: 901,errorCodewordsPerBlock: 30 } },{ L: { groups: [[13,115],[6,116]],totalDataCodewords: 2191,errorCodewordsPerBlock: 30 },M: { groups: [[14,46],[23,47]],totalDataCodewords: 1725,errorCodewordsPerBlock: 28 },Q: { groups: [[44,24],[7,25]],totalDataCodewords: 1231,errorCodewordsPerBlock: 30 },H: { groups: [[59,16],[1,17]],totalDataCodewords: 961,errorCodewordsPerBlock: 30 } },{ L: { groups: [[12,121],[7,122]],totalDataCodewords: 2306,errorCodewordsPerBlock: 30 },M: { groups: [[12,47],[26,48]],totalDataCodewords: 1812,errorCodewordsPerBlock: 28 },Q: { groups: [[39,24],[14,25]],totalDataCodewords: 1286,errorCodewordsPerBlock: 30 },H: { groups: [[22,15],[41,16]],totalDataCodewords: 986,errorCodewordsPerBlock: 30 } },{ L: { groups: [[6,121],[14,122]],totalDataCodewords: 2434,errorCodewordsPerBlock: 30 },M: { groups: [[6,47],[34,48]],totalDataCodewords: 1914,errorCodewordsPerBlock: 28 },Q: { groups: [[46,24],[10,25]],totalDataCodewords: 1354,errorCodewordsPerBlock: 30 },H: { groups: [[2,15],[64,16]],totalDataCodewords: 1054,errorCodewordsPerBlock: 30 } },{ L: { groups: [[17,122],[4,123]],totalDataCodewords: 2566,errorCodewordsPerBlock: 30 },M: { groups: [[29,46],[14,47]],totalDataCodewords: 1992,errorCodewordsPerBlock: 28 },Q: { groups: [[49,24],[10,25]],totalDataCodewords: 1426,errorCodewordsPerBlock: 30 },H: { groups: [[24,15],[46,16]],totalDataCodewords: 1096,errorCodewordsPerBlock: 30 } },{ L: { groups: [[4,122],[18,123]],totalDataCodewords: 2702,errorCodewordsPerBlock: 30 },M: { groups: [[13,46],[32,47]],totalDataCodewords: 2102,errorCodewordsPerBlock: 28 },Q: { groups: [[48,24],[14,25]],totalDataCodewords: 1502,errorCodewordsPerBlock: 30 },H: { groups: [[42,15],[32,16]],totalDataCodewords: 1142,errorCodewordsPerBlock: 30 } },{ L: { groups: [[20,117],[4,118]],totalDataCodewords: 2812,errorCodewordsPerBlock: 30 },M: { groups: [[40,47],[7,48]],totalDataCodewords: 2216,errorCodewordsPerBlock: 28 },Q: { groups: [[43,24],[22,25]],totalDataCodewords: 1582,errorCodewordsPerBlock: 30 },H: { groups: [[10,15],[67,16]],totalDataCodewords: 1222,errorCodewordsPerBlock: 30 } },{ L: { groups: [[19,118],[6,119]],totalDataCodewords: 2956,errorCodewordsPerBlock: 30 },M: { groups: [[18,47],[31,48]],totalDataCodewords: 2334,errorCodewordsPerBlock: 28 },Q: { groups: [[34,24],[34,25]],totalDataCodewords: 1666,errorCodewordsPerBlock: 30 },H: { groups: [[20,15],[61,16]],totalDataCodewords: 1276,errorCodewordsPerBlock: 30 } }],\n finderPattern = [1,0,1,1,1],\n alignmentPattern = [1,0,1],\n errorCorrectionPatterns = { L: \"01\", M: \"00\", Q: \"11\", H: \"10\" },\n formatMaskPattern = \"101010000010010\",\n formatGeneratorPolynomial = \"10100110111\",\n versionGeneratorPolynomial = \"1111100100101\",\n paddingCodewords = [\"11101100\", \"00010001\"],\n finderPatternValue = 93,\n maskPatternConditions = [\n function(row,column) {return (row + column) % 2 === 0;},\n function(row) {return row % 2 === 0;},\n function(row,column) {return column % 3 === 0;},\n function(row,column) {return (row + column) % 3 === 0;},\n function(row,column) {return (Math.floor(row / 2) + Math.floor(column / 3)) % 2 === 0;},\n function(row,column) {return ((row * column) % 2) + ((row * column) % 3) === 0;},\n function(row,column) {return (((row * column) % 2) + ((row * column) % 3)) % 2 === 0;},\n function(row,column) {return (((row + column) % 2) + ((row * column) % 3)) % 2 === 0;}\n ],\n numberRegex = /^\\d+/,\n alphaPattern = \"A-Z0-9 $%*+./:-\",\n alphaExclusiveSet = \"A-Z $%*+./:-\",\n alphaRegex = new RegExp(\"^[\" + alphaExclusiveSet + \"]+\"),\n alphaNumericRegex = new RegExp(\"^[\" + alphaPattern + \"]+\"),\n byteRegex = new RegExp(\"^[^\" + alphaPattern + \"]+\"),\n initMinNumericBeforeAlpha = 8,\n initMinNumericBeforeByte = 5,\n initMinAlphaBeforeByte = 8,\n minNumericBeforeAlpha = 17,\n minNumericBeforeByte = 9,\n minAlphaBeforeByte = 16,\n round = Math.round,\n IMAGE = \"image\",\n SWISS_QR = \"swiss\",\n crossPattern = [[0,1],[1,1],[1,2],[2,2],[2,1],[3,1],[3,0],[2,0],[2,-1],[1,-1],[1,0]],\n squarePattern = [[0,1],[1,1],[1,0]],\n DEFAULT_LOGO_SIZE = 7;\n\n function toDecimal(value) {\n return parseInt(value, 2);\n }\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\n function splitInto(str, n) {\n var result = [],\n idx = 0;\n while (idx < str.length) {\n result.push(str.substring(idx, idx + n));\n idx += n;\n }\n return result;\n }\n\n var QRDataMode = kendo.Class.extend({\n getVersionIndex: function(version) {\n if (version < 10) {\n return 0;\n }\n else if (version > 26) {\n return 2;\n }\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 getStringBitsLength: function() {},\n getValue: function() {},\n modeIndicator: \"\",\n bitsInCharacterCount: []\n });\n\n var modes = {};\n modes[NUMERIC] = QRDataMode.extend({\n bitsInCharacterCount: [10, 12, 14],\n modeIndicator: \"0001\",\n getValue: function(character) {\n return parseInt(character, 10);\n },\n encode: function(str, version) {\n var mode = this,\n parts = splitInto(str, 3),\n result = mode.getModeCountString(str.length, version);\n\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\n modes[ALPHA_NUMERIC] = QRDataMode.extend({\n characters: { \"0\": 0,\"1\": 1,\"2\": 2,\"3\": 3,\"4\": 4,\"5\": 5,\"6\": 6,\"7\": 7,\"8\": 8,\"9\": 9,\"A\": 10,\"B\": 11,\"C\": 12,\"D\": 13,\"E\": 14,\"F\": 15,\"G\": 16,\"H\": 17,\"I\": 18,\"J\": 19,\"K\": 20,\"L\": 21,\"M\": 22,\"N\": 23,\"O\": 24,\"P\": 25,\"Q\": 26,\"R\": 27,\"S\": 28,\"T\": 29,\"U\": 30,\"V\": 31,\"W\": 32,\"X\": 33,\"Y\": 34,\"Z\": 35,\" \": 36,\"$\": 37,\"%\": 38,\"*\": 39,\"+\": 40,\"-\": 41,\".\": 42,\"/\": 43,\":\": 44 },\n bitsInCharacterCount: [9,11,13],\n modeIndicator: \"0010\",\n getValue: function(character) {\n return this.characters[character];\n },\n encode: function(str, version) {\n var mode = this,\n parts = splitInto(str, 2),\n result = mode.getModeCountString(str.length, version),\n 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 ?\n 45 * mode.getValue(parts[i].charAt(0)) + mode.getValue(parts[i].charAt(1)) :\n 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\n modes[BYTE] = QRDataMode.extend({\n bitsInCharacterCount: [8,16,16],\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 }\n else {\n throw new Error(\"Unsupported character: \" + character);\n }\n },\n encode: function(str, version) {\n var mode = this,\n result = mode.getModeCountString(str.length, version);\n\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\n var modeInstances = {};\n for (var mode in modes) {\n modeInstances[mode] = new modes[mode]();\n }\n\n var FreeCellVisitor = function(matrix) {\n var that = this,\n row = matrix.length - 1,\n column = matrix.length - 1,\n startColumn = column,\n dir = -1,\n 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$1) {\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 { row: row, column: column };\n };\n that.getNextRemainderCell = function() {\n that.move();\n if (matrix[row][column] === undefined$1) {\n return { row: row, 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\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\n var fillData = function(matrices, blocks) {\n var cellVisitor = new FreeCellVisitor(matrices[0]),\n block,\n codewordIdx,\n cell;\n\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\n codewordIdx++;\n while (block[0] && codewordIdx == block[0].length) {\n block.splice(0,1);\n }\n }\n }\n\n while ((cell = cellVisitor.getNextRemainderCell())) {\n fillDataCell(matrices, 0, cell.row, cell.column);\n }\n };\n\n var padDataString = function(dataString, totalDataCodewords) {\n var dataBitsCount = totalDataCodewords * 8,\n terminatorIndex = 0,\n paddingCodewordIndex = 0;\n while (dataString.length < dataBitsCount && terminatorIndex < terminator.length) {\n dataString += terminator.charAt(terminatorIndex++);\n }\n\n if (dataString.length % 8 !== 0) {\n dataString += new Array(9 - dataString.length % 8).join(\"0\");\n }\n\n while (dataString.length < dataBitsCount) {\n dataString += paddingCodewords[paddingCodewordIndex];\n paddingCodewordIndex ^= 1;\n }\n return dataString;\n };\n\n function generatePowersOfTwo() {\n var result;\n for (var power = 1; power < 255; power++) {\n\n result = powersOfTwoResult[power - 1] * 2;\n if (result > 255) {\n result = result ^ 285;\n }\n\n powersOfTwoResult[power] = result;\n powersOfTwo[result] = power;\n }\n\n result = (powersOfTwoResult[power - 1] * 2) ^ 285;\n powersOfTwoResult[power] = result;\n powersOfTwoResult[-1] = 0;\n }\n\n var xorPolynomials = function(x,y) {\n var result = [],\n idx = x.length - 2;\n for (var i = idx; i >= 0; i--) {\n result[i] = x[i] ^ y[i];\n }\n\n return result;\n };\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$1) {\n result[i + j] = (x[i] + (y[j] >= 0 ? y[j] : 0)) % 255;\n }\n else {\n result[i + j] = powersOfTwo[powersOfTwoResult[result[i + j]] ^ powersOfTwoResult[(x[i] + y[j]) % 255]];\n }\n }\n }\n\n return result;\n };\n\n function generateGeneratorPolynomials() {\n var maxErrorCorrectionCodeWordsCount = 68;\n for (var idx = 2; idx <= maxErrorCorrectionCodeWordsCount; idx++) {\n var firstPolynomial = generatorPolynomials[idx - 1],\n secondPolynomial = [idx, 0];\n generatorPolynomials[idx] = multiplyPolynomials(firstPolynomial, secondPolynomial);\n }\n }\n\n //possibly generate on demand\n generatePowersOfTwo();\n generateGeneratorPolynomials();\n\n function multiplyByConstant(polynomial, power) {\n var result = [],\n idx = polynomial.length - 1;\n do {\n result[idx] = powersOfTwoResult[(polynomial[idx] + power) % 255];\n idx--;\n } while (polynomial[idx] !== undefined$1);\n\n return result;\n }\n\n var generateErrorCodewords = function(data, errorCodewordsCount) {\n var generator = generatorPolynomials[errorCodewordsCount - 1],\n result = new Array(errorCodewordsCount).concat(data),\n generatorPolynomial = new Array(result.length - generator.length).concat(generator),\n steps = data.length,\n errorCodewords = [],\n divisor,\n idx;\n\n for (idx = 0; idx < steps; idx++) {\n divisor = multiplyByConstant(generatorPolynomial, powersOfTwo[result[result.length - 1]]);\n generatorPolynomial.splice(0,1);\n\n result = xorPolynomials(divisor, result);\n }\n\n for (idx = result.length - 1; idx >= 0; idx--) {\n errorCodewords[errorCodewordsCount - 1 - idx] = toBitsString(result[idx], 8);\n }\n\n return errorCodewords;\n };\n\n var getBlocks = function(dataStream, versionCodewordsInformation) {\n var codewordStart = 0,\n dataBlocks = [],\n errorBlocks = [],\n dataBlock,\n versionGroups = versionCodewordsInformation.groups,\n blockCodewordsCount,\n groupBlocksCount,\n messagePolynomial,\n codeword;\n\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,\n versionCodewordsInformation.errorCodewordsPerBlock));\n }\n }\n return [dataBlocks, errorBlocks];\n };\n\n var chooseMode = function(str, minNumericBeforeAlpha, minNumericBeforeByte, minAlphaBeforeByte, previousMode) {\n var numeric = numberRegex.exec(str),\n numericMatch = numeric ? numeric[0] : \"\",\n alpha = alphaRegex.exec(str),\n alphaMatch = alpha ? alpha[0] : \"\",\n alphaNumeric = alphaNumericRegex.exec(str),\n alphaNumericMatch = alphaNumeric ? alphaNumeric[0] : \"\",\n mode,\n modeString;\n\n if (numericMatch && (numericMatch.length >= minNumericBeforeAlpha ||\n str.length == numericMatch.length || (numericMatch.length >= minNumericBeforeByte &&\n !alphaNumericRegex.test(str.charAt(numericMatch.length))))) {\n mode = NUMERIC;\n modeString = numericMatch;\n }\n else if (alphaNumericMatch && (str.length == alphaNumericMatch.length ||\n alphaNumericMatch.length >= minAlphaBeforeByte || previousMode == ALPHA_NUMERIC)) {\n mode = ALPHA_NUMERIC;\n modeString = numericMatch || alphaMatch;\n }\n else {\n mode = BYTE;\n if (alphaNumericMatch) {\n modeString = alphaNumericMatch + byteRegex.exec(str.substring(alphaNumericMatch.length))[0];\n }\n else {\n modeString = byteRegex.exec(str)[0];\n }\n }\n\n return {\n mode: mode,\n modeString: modeString\n };\n };\n\n var getModes = function(str) {\n var modes = [],\n previousMode,\n 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\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 }\n else {\n modes[idx].modeString += nextMode.modeString;\n }\n str = str.substr(nextMode.modeString.length);\n }\n\n return modes;\n };\n\n var getDataCodewordsCount = function(modes) {\n var length = 0,\n 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\n return Math.ceil(length / 8);\n };\n\n var getVersion = function(dataCodewordsCount, errorCorrectionLevel) {\n var x = 0,\n y = versionsCodewordsInformation.length - 1,\n version = Math.floor(versionsCodewordsInformation.length / 2);\n\n do {\n if (dataCodewordsCount < versionsCodewordsInformation[version][errorCorrectionLevel].totalDataCodewords) {\n y = version;\n }\n else {\n x = version;\n }\n version = x + Math.floor((y - x) / 2);\n\n } while (y - x > 1);\n\n if (dataCodewordsCount <= versionsCodewordsInformation[x][errorCorrectionLevel].totalDataCodewords) {\n return version + 1;\n }\n return y + 1;\n };\n\n var getDataString = function(modes, version) {\n var dataString = \"\",\n 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\n return dataString;\n };\n\n //fix case all zeros\n var encodeFormatInformation = function(format) {\n var formatNumber = toDecimal(format),\n encodedString,\n result = \"\";\n if (formatNumber === 0) {\n return \"101010000010010\";\n }\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\n return result;\n };\n\n var encodeBCH = function(value, generatorPolynomial, codeLength) {\n var generatorNumber = toDecimal(generatorPolynomial),\n polynomialLength = generatorPolynomial.length - 1,\n valueNumber = value << polynomialLength,\n length = codeLength - polynomialLength,\n valueString = toBitsString(value, length),\n result = dividePolynomials(valueNumber, generatorNumber);\n result = valueString + toBitsString(result, polynomialLength);\n return result;\n };\n\n var dividePolynomials = function(numberX,numberY) {\n var yLength = numberY.toString(2).length,\n xLength = numberX.toString(2).length;\n do {\n numberX ^= numberY << xLength - yLength;\n xLength = numberX.toString(2).length;\n }\n while (xLength >= yLength);\n\n return numberX;\n };\n\n function getNumberAt(str, idx) {\n return parseInt(str.charAt(idx), 10);\n }\n\n var initMatrices = function(version) {\n var matrices = [],\n 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\n return matrices;\n };\n\n var addFormatInformation = function(matrices, formatString) {\n var matrix = matrices[0],\n x,\n y,\n idx = 0,\n length = formatString.length;\n\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\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\n fillFunctionCell(matrices, 1, matrix.length - 8, 8);\n\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\n var encodeVersionInformation = function(version) {\n return encodeBCH(version, versionGeneratorPolynomial, 18);\n };\n\n var addVersionInformation = function(matrices, dataString) {\n var matrix = matrices[0],\n modules = matrix.length,\n x1 = 0,\n y1 = modules - 11,\n x2 = modules - 11,\n y2 = 0,\n quotient,\n mod,\n value;\n\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\n var addCentricPattern = function(matrices, pattern, x, y) {\n var size = pattern.length + 2,\n length = pattern.length + 1,\n value;\n\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\n var addFinderSeparator = function(matrices, direction, x, y) {\n var nextX = x,\n nextY = y,\n 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 }\n while (nextX >= 0 && nextX < matrix.length);\n };\n\n var addFinderPatterns = function(matrices) {\n var modules = matrices[0].length;\n addCentricPattern(matrices, finderPattern, 0, 0);\n addFinderSeparator(matrices, [-1,-1], 7,7);\n addCentricPattern(matrices, finderPattern, modules - 7, 0);\n addFinderSeparator(matrices, [1,-1], modules - 8, 7);\n addCentricPattern(matrices, finderPattern, 0 , modules - 7);\n addFinderSeparator(matrices, [-1,1],7, modules - 8);\n };\n\n var addAlignmentPatterns = function(matrices, version) {\n if (version < 2) {\n return;\n }\n\n var matrix = matrices[0],\n modules = matrix.length,\n pointsCount = Math.floor(version / 7),\n points = [6],\n startDistance,\n distance,\n idx = 0;\n\n if ((startDistance = irregularAlignmentPatternsStartDistance[version])) {\n distance = (modules - 13 - startDistance) / pointsCount;\n }\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$1) {\n addCentricPattern(matrices, alignmentPattern, points[i] - 2, points[j] - 2);\n }\n }\n }\n };\n\n var addTimingFunctions = function(matrices) {\n var row = 6,\n column = 6,\n value = 1,\n 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\n var scoreMaskMatrixes = function(matrices) {\n var scores = [],\n previousBits = [],\n darkModules = [],\n patterns = [],\n adjacentSameBits = [],\n matrix,\n i,\n row = 0,\n column = 1,\n modules = matrices[0].length;\n\n\n for (i = 0; i < matrices.length; i++) {\n scores[i] = 0;\n darkModules[i] = 0;\n adjacentSameBits[i] = [0,0];\n patterns[i] = [0, 0];\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 &&\n 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,\n minIdx,\n min = Number.MAX_VALUE;\n\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\n return minIdx;\n };\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\n function scoreAdjacentSameBits(idx, scores, previousBits, bit, adjacentBits, rowColumn) {\n if (previousBits[idx][rowColumn] == bit) {\n adjacentBits[idx][rowColumn]++;\n }\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\n function calculateDarkModulesRatioScore(darkModules, total) {\n var percent = Math.floor((darkModules / total) * 100),\n mod5 = percent % 5,\n previous = Math.abs(percent - mod5 - 50),\n next = Math.abs(percent + 5 - mod5 - 50),\n score = 10 * Math.min(previous / 5, next / 5);\n return score;\n }\n\n var EncodingResult = function(dataString, version) {\n this.dataString = dataString;\n this.version = version;\n };\n\n var IsoEncoder = function() {\n this.getEncodingResult = function(inputString, errorCorrectionLevel) {\n var modes = getModes(inputString),\n dataCodewordsCount = getDataCodewordsCount(modes),\n version = getVersion(dataCodewordsCount, errorCorrectionLevel),\n dataString = getDataString(modes, version);\n\n return new EncodingResult(dataString, version);\n };\n };\n\n var UTF8Encoder = function() {\n this.mode = modeInstances[this.encodingMode];\n };\n\n UTF8Encoder.fn = UTF8Encoder.prototype = {\n encodingMode: BYTE,\n utfBOM: \"111011111011101110111111\",\n initialModeCountStringLength: 20,\n getEncodingResult: function(inputString, errorCorrectionLevel) {\n var that = this,\n data = that.encode(inputString),\n dataCodewordsCount = that.getDataCodewordsCount(data),\n version = getVersion(dataCodewordsCount, errorCorrectionLevel),\n dataString = that.mode.getModeCountString(data.length / 8, version) + data;\n\n return new EncodingResult(dataString, version);\n },\n getDataCodewordsCount: function(data) {\n var that = this,\n dataLength = data.length,\n dataCodewordsCount = Math.ceil(( that.initialModeCountStringLength + dataLength) / 8);\n\n return dataCodewordsCount;\n },\n encode: function(str) {\n var that = this,\n 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),\n bc = bytesCount - 1,\n result = \"\";\n\n if (bytesCount == 1) {\n result = toBitsString(code, 8);\n }\n else {\n var significantOnes = 8 - bytesCount;\n\n for (var i = 0; i < bc; i++) {\n result = toBitsString(code >> (i * 6) & 63 | 128, 8) + result;\n }\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: [128,2048,65536,2097152,67108864]\n };\n\n var QRCodeDataEncoder = function(encoding) {\n if (encoding && encoding.toLowerCase().indexOf(\"utf_8\") >= 0) {\n return new UTF8Encoder();\n }\n else {\n return new IsoEncoder();\n }\n };\n\n var encodeData = function(inputString, errorCorrectionLevel, encoding) {\n var encoder = new QRCodeDataEncoder(encoding),\n encodingResult = encoder.getEncodingResult(inputString, errorCorrectionLevel),\n version = encodingResult.version,\n versionInformation = versionsCodewordsInformation[version - 1][errorCorrectionLevel],\n dataString = padDataString(encodingResult.dataString, versionInformation.totalDataCodewords),\n blocks = getBlocks(dataString, versionInformation),\n matrices = initMatrices(version);\n\n addFinderPatterns(matrices);\n addAlignmentPatterns(matrices, version);\n addTimingFunctions(matrices);\n\n if (version >= 7) {\n addVersionInformation(matrices, toBitsString(0, 18));\n }\n\n addFormatInformation(matrices, toBitsString(0, 15));\n fillData(matrices, blocks);\n\n var minIdx = scoreMaskMatrixes(matrices),\n optimalMatrix = matrices[minIdx];\n\n if (version >= 7) {\n addVersionInformation([optimalMatrix], encodeVersionInformation(version));\n }\n\n var formatString = errorCorrectionPatterns[errorCorrectionLevel] + toBitsString(minIdx, 3);\n addFormatInformation([optimalMatrix], encodeFormatInformation(formatString));\n\n return optimalMatrix;\n };\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\n var QRCode = Widget.extend({\n init: function(element, options) {\n var that = this;\n\n Widget.fn.init.call(that, element, options);\n\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, {\n type: that.options.renderAs\n });\n that.setOptions(options);\n },\n\n redraw: function() {\n var size = this._getSize();\n\n this.surfaceWrap.css({\n width: size,\n height: size\n });\n this.surface.clear();\n this.surface.resize();\n\n this.createVisual();\n this.surface.draw(this.visual);\n },\n\n getSize: function() {\n return kendo.dimensions(this.element);\n },\n\n _resize: function() {\n this.redraw();\n },\n\n createVisual: function() {\n this.visual = this._render();\n },\n\n exportVisual: function() {\n return this._render();\n },\n\n _render: function() {\n var that = this,\n value = that._value,\n baseUnit,\n border = that.options.border || {},\n padding = that.options.padding || 0,\n borderWidth = border.width || 0,\n quietZoneSize,\n matrix,\n size,\n dataSize,\n contentSize;\n\n border.width = borderWidth;\n\n var visual = new draw.Group();\n\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\n visual.append(that._renderBackground(size, border));\n visual.append(that._renderMatrix(matrix, baseUnit, quietZoneSize));\n if (that._hasCustomLogo()) {\n visual.append(that._renderLogo(size, baseUnit));\n } else if (that._isSwiss()) {\n visual.append(that._renderSwissCode(size, baseUnit));\n }\n }\n\n return visual;\n },\n\n _renderLogo: function name(qrSize, baseUnit) {\n var image;\n var imageRect;\n var center = round(qrSize / 2);\n var logoSize = this._getLogoSize(baseUnit * DEFAULT_LOGO_SIZE);\n var logoUrl = this.options.overlay.imageUrl;\n var position = {\n x: center - logoSize.width / 2,\n y: center - logoSize.height / 2\n };\n\n imageRect = new kendo.geometry.Rect(\n new kendo.geometry.Point(position.x, position.y),\n new kendo.geometry.Size(logoSize.width, logoSize.height)\n );\n\n image = new draw.Image(logoUrl, imageRect);\n return image;\n },\n\n _renderSwissCode: function(qrSize, baseUnit) {\n var logoSize = this._getLogoSize(baseUnit * DEFAULT_LOGO_SIZE);\n logoSize = Math.max(logoSize.width, logoSize.height);\n var crossSize = logoSize / 4;\n var crossOffset = crossSize / 2;\n var center = qrSize / 2;\n var start = {};\n var visual = new draw.Group();\n\n start.x = start.y = Math.ceil(center - baseUnit - logoSize / 2);\n visual.append(this._renderShape(start, Math.ceil(logoSize + baseUnit * 2), squarePattern, \"#fff\"));\n\n start.x = start.y = center - logoSize / 2;\n visual.append(this._renderShape(start, logoSize, squarePattern, this.options.color));\n\n start.x = center + crossOffset - logoSize / 2;\n start.y = center + crossOffset + crossSize - logoSize / 2;\n visual.append(this._renderShape(start, crossSize, crossPattern, \"#fff\"));\n\n return visual;\n },\n\n _renderShape: function(start, step, pattern, color) {\n var path = new draw.MultiPath({\n fill: {\n color: color\n },\n stroke: null\n });\n\n path.moveTo(start.x, start.y);\n for (var i = 0; i < pattern.length; i++) {\n path.lineTo(start.x + step * pattern[i][0], start.y + step * pattern[i][1]);\n }\n path.close();\n\n return path;\n },\n\n _getSize: function() {\n var that = this,\n size;\n\n if (that.options.size) {\n size = parseInt(that.options.size, 10);\n } else {\n var element = that.element,\n min = Math.min(element.width(), element.height());\n\n if (min > 0) {\n size = min;\n } else {\n size = QRCodeDefaults.DEFAULT_SIZE;\n }\n }\n\n return size;\n },\n\n _calculateBaseUnit: function(size, matrixSize) {\n var baseUnit = Math.floor(size / matrixSize);\n\n if (baseUnit < QRCodeDefaults.MIN_BASE_UNIT_SIZE) {\n throw new Error(\"Insufficient size.\");\n }\n\n if (baseUnit * matrixSize >= size &&\n baseUnit - 1 >= QRCodeDefaults.MIN_BASE_UNIT_SIZE) {\n baseUnit--;\n }\n\n return baseUnit;\n },\n\n _renderMatrix: function(matrix, baseUnit, quietZoneSize) {\n var path = new draw.MultiPath({\n fill: {\n color: this.options.color\n },\n stroke: null\n });\n\n for (var row = 0; row < matrix.length; row++) {\n var y = quietZoneSize + row * baseUnit;\n var column = 0;\n\n while (column < matrix.length) {\n while (matrix[row][column] === 0 && column < matrix.length) {\n column++;\n }\n\n if (column < matrix.length) {\n var x = column;\n while (matrix[row][column] == 1) {\n column++;\n }\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\n path.moveTo(x1, y1)\n .lineTo(x1, y2)\n .lineTo(x2, y2)\n .lineTo(x2, y1)\n .close();\n }\n }\n }\n\n return path;\n },\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: {\n color: this.options.background\n },\n stroke: {\n color: border.color,\n width: border.width\n }\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$1) {\n that._value = that.options.value + \"\";\n }\n that.redraw();\n },\n value: function(value) {\n var that = this;\n if (value === undefined$1) {\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 overlay: {\n type: IMAGE,\n imageUrl: \"\",\n width: 0,\n height: 0\n }\n },\n\n _hasCustomLogo: function() {\n return !!this.options.overlay.imageUrl;\n },\n\n _isSwiss: function() {\n return this.options.overlay.type === SWISS_QR;\n },\n\n _getLogoSize: function(defautLogoSize) {\n var width = this.options.overlay.width;\n var height = this.options.overlay.height;\n\n if (!width && !height) {\n width = height = defautLogoSize;\n } else if (width && !height) {\n height = width;\n } else if (!width && height) {\n width = height;\n }\n\n return {\n width: width,\n height: height\n };\n }\n });\n\n dataviz.ExportMixin.extend(QRCode.fn);\n dataviz.ui.plugin(QRCode);\n\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\n })(window.kendo.jQuery);\n\n /***********************************************************************\n * WARNING: this file is auto-generated. If you change it directly,\n * your modifications will eventually be lost. The source code is in\n * `kendo-charts` repository, you should make your changes there and\n * run `src-modules/sync.sh` in this repository.\n */\n\n (function() {\n /* eslint-disable space-before-blocks, space-before-function-paren */\n\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\n var FadeOutAnimation = drawing.Animation.extend({\n setup: function() {\n this._initialOpacity = parseFloat(elementStyles(this.element, 'opacity').opacity);\n },\n\n step: function(pos) {\n elementStyles(this.element, {\n opacity: String(dataviz.interpolateValue(this._initialOpacity, 0, pos))\n });\n },\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\n cancel: function() {\n drawing.Animation.fn.abort.call(this);\n elementStyles(this.element, {\n opacity: String(this._initialOpacity)\n });\n }\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\n return div;\n }\n\n var NavigatorHint = dataviz.Class.extend({\n init: function(container, chartService, options) {\n\n this.options = deepExtend({}, this.options, options);\n this.container = container;\n this.chartService = chartService;\n\n var padding = elementStyles(container, [ \"paddingLeft\", \"paddingTop\" ]);\n this.chartPadding = {\n top: padding.paddingTop,\n left: padding.paddingLeft\n };\n\n this.createElements();\n container.appendChild(this.element);\n },\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\n tooltip.innerHTML = ' ';\n\n element.appendChild(tooltip);\n element.appendChild(scroll);\n },\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\n this.clearHideTimeout();\n\n if (!this._visible) {\n elementStyles(element, {\n visibility: 'hidden',\n display: 'block'\n });\n this._visible = true;\n }\n\n if (template) {\n text = template({\n from: from,\n to: to\n });\n }\n\n tooltip.innerHTML = text;\n elementStyles(tooltip, {\n left: bbox.center().x - tooltip.offsetWidth / 2,\n top: bbox.y1\n });\n\n var tooltipStyle = elementStyles(tooltip, [ 'marginTop', 'borderTopWidth', '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\n elementStyles(element, {\n visibility: 'visible'\n });\n },\n\n clearHideTimeout: function() {\n if (this._hideTimeout) {\n clearTimeout(this._hideTimeout);\n }\n\n if (this._hideAnimation) {\n this._hideAnimation.cancel();\n }\n },\n\n hide: function() {\n var this$1$1 = this;\n\n this.clearHideTimeout();\n\n this._hideTimeout = setTimeout(function () {\n this$1$1._visible = false;\n this$1$1._hideAnimation = new FadeOutAnimation(this$1$1.element);\n this$1$1._hideAnimation.setup();\n this$1$1._hideAnimation.play();\n }, this.options.hideDelay);\n },\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\n dataviz.setDefaultOptions(NavigatorHint, {\n format: \"{0:d} - {1:d}\",\n hideDelay: 500\n });\n\n var NAVIGATOR_PANE = \"_navigator\";\n var NAVIGATOR_AXIS = NAVIGATOR_PANE;\n\n var constants = {\n \tNAVIGATOR_AXIS: NAVIGATOR_AXIS,\n \tNAVIGATOR_PANE: NAVIGATOR_PANE\n };\n\n var ZOOM_ACCELERATION = 3;\n\n var Navigator = dataviz.Class.extend({\n init: function(chart) {\n\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\n if (!dataviz.defined(options.hint.visible)) {\n options.hint.visible = options.visible;\n }\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\n parseDate: function(value) {\n return dataviz.parseDate(this.chart.chartService.intl, value);\n },\n\n clean: function() {\n if (this.selection) {\n this.selection.destroy();\n this.selection = null;\n }\n\n if (this.hint) {\n this.hint.destroy();\n this.hint = null;\n }\n },\n\n destroy: function() {\n if (this.chart) {\n this.chart.removeObserver(this.chartObserver);\n delete this.chart;\n }\n\n this.clean();\n },\n\n redraw: function() {\n this._redrawSelf();\n this.initSelection();\n },\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\n if (axis.categoriesCount() === 0) {\n return;\n }\n\n this.clean();\n\n // \"Freeze\" the selection axis position until the next redraw\n axisClone.box = axis.box;\n\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\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\n setRange: function() {\n var plotArea = this.chart._createPlotArea(true);\n var axis = plotArea.namedCategoryAxes[NAVIGATOR_AXIS];\n\n var ref = axis.roundedRange();\n var min = ref.min;\n var max = ref.max;\n\n var select = this.options.select || {};\n var from = select.from || min;\n if (from < min) {\n from = min;\n }\n\n var to = select.to || max;\n if (to > max) {\n to = max;\n }\n\n this.options.select = deepExtend({}, select, {\n from: from,\n to: to\n });\n\n this.filterAxes();\n },\n\n _redrawSelf: function(silent) {\n var plotArea = this.chart._plotArea;\n\n if (plotArea) {\n plotArea.redraw(dataviz.last(plotArea.panes), silent);\n }\n },\n\n redrawSlaves: function() {\n var chart = this.chart;\n var plotArea = chart._plotArea;\n var slavePanes = plotArea.panes.slice(0, -1);\n\n // Update the original series and categoryAxis before partial refresh.\n plotArea.srcSeries = chart.options.series;\n plotArea.options.categoryAxis = chart.options.categoryAxis;\n plotArea.clearSeriesPointsCache();\n\n plotArea.redraw(slavePanes);\n },\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\n if (!range || inNavigator || !selection) {\n return;\n }\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\n var from = dataviz.toDate(dataviz.limitValue(\n toTime(range.min),\n naviRange.min, toTime(naviRange.max) - duration\n ));\n\n var to = dataviz.toDate(dataviz.limitValue(\n toTime(from) + duration,\n toTime(naviRange.min) + duration, naviRange.max\n ));\n\n this.options.select = { from: from, to: to };\n\n if (this.options.liveDrag) {\n this.filterAxes();\n this.redrawSlaves();\n }\n\n selection.set(from, to);\n\n this.showHint(from, to);\n },\n\n _dragEnd: function() {\n this.filterAxes();\n this.filter();\n this.redrawSlaves();\n\n if (this.hint) {\n this.hint.hide();\n }\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\n select.from = from;\n select.to = to;\n },\n\n filterAxes: function() {\n var ref = this;\n var select = ref.options.select; if (select === void 0) { select = { }; }\n var chart = ref.chart;\n var allAxes = chart.options.categoryAxis;\n var from = select.from;\n var to = select.to;\n\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\n filter: function() {\n var ref = this;\n var chart = ref.chart;\n var select = ref.options.select;\n\n if (!chart.requiresHandlers([ \"navigatorFilter\" ])) {\n return;\n }\n\n var mainAxis = this.mainAxis();\n var args = {\n from: select.from,\n to: select.to\n };\n\n if (mainAxis.options.type !== 'category') {\n var axisOptions = new dataviz.DateCategoryAxis(deepExtend({\n baseUnit: \"fit\"\n }, chart.options.categoryAxis[0], {\n categories: [ select.from, select.to ]\n }), chart.chartService).options;\n\n args.from = dataviz.addDuration(axisOptions.min, -axisOptions.baseUnitStep, axisOptions.baseUnit);\n args.to = dataviz.addDuration(axisOptions.max, axisOptions.baseUnitStep, axisOptions.baseUnit);\n }\n\n this.chart.trigger(\"navigatorFilter\", args);\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\n if (!selection) {\n return;\n }\n\n var fromIx = mainAxis.categoryIndex(selection.options.from);\n var toIx = mainAxis.categoryIndex(selection.options.to);\n var coords = this.chart._eventCoordinates(e.originalEvent);\n\n e.originalEvent.preventDefault();\n\n if (Math.abs(delta) > 1) {\n delta *= ZOOM_ACCELERATION;\n }\n\n if (toIx - fromIx > 1) {\n selection.zoom(delta, coords);\n this.readSelection();\n } else {\n axis.options.min = select.from;\n select.from = axis.scaleRange(-e.delta * this.chart._mousewheelZoomRate(), coords).min;\n }\n\n if (liveDrag) {\n this.filterAxes();\n this.redrawSlaves();\n }\n\n selection.set(select.from, select.to);\n\n this.showHint(this.options.select.from, this.options.select.to);\n },\n\n _zoomEnd: function(e) {\n this._dragEnd(e);\n },\n\n showHint: function(from, to) {\n var plotArea = this.chart._plotArea;\n\n if (this.hint) {\n this.hint.show(from, to, plotArea.backgroundBox());\n }\n },\n\n _selectStart: function(e) {\n return this.chart._selectStart(e);\n },\n\n _select: function(e) {\n this.showHint(e.from, e.to);\n\n return this.chart._select(e);\n },\n\n _selectEnd: function(e) {\n if (this.hint) {\n this.hint.hide();\n }\n\n this.readSelection();\n this.filterAxes();\n this.filter();\n this.redrawSlaves();\n\n return this.chart._selectEnd(e);\n },\n\n mainAxis: function() {\n var plotArea = this.chart._plotArea;\n\n if (plotArea) {\n return plotArea.namedCategoryAxes[NAVIGATOR_AXIS];\n }\n },\n\n select: function(from, to) {\n var select = this.options.select;\n\n if (from && to) {\n select.from = this.parseDate(from);\n select.to = this.parseDate(to);\n\n this.filterAxes();\n this.filter();\n this.redrawSlaves();\n\n this.selection.set(from, to);\n }\n\n return {\n from: select.from,\n to: select.to\n };\n }\n });\n\n Navigator.setup = function(options, themeOptions) {\n if (options === void 0) { options = {}; }\n if (themeOptions === void 0) { themeOptions = {}; }\n\n if (options.__navi) {\n return;\n }\n options.__navi = true;\n\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\n if (!naviOptions.visible) {\n paneOptions.visible = false;\n paneOptions.height = 0.1;\n }\n\n panes.push(paneOptions);\n\n Navigator.attachAxes(options, naviOptions);\n Navigator.attachSeries(options, naviOptions, themeOptions);\n };\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\n var equallySpacedSeries = dataviz.filterSeriesByType(series, datavizConstants.EQUALLY_SPACED_SERIES);\n var justifyAxis = equallySpacedSeries.length === 0;\n\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: [ 1, 2 ],\n days: [ 1, 2 ],\n weeks: [],\n months: [ 1 ],\n years: [ 1 ]\n }\n });\n var user = naviOptions.categoryAxis;\n\n categoryAxes.push(\n deepExtend({}, base, {\n maxDateGroups: 200\n }, 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: {\n minutes: []\n },\n _overlap: true\n }), deepExtend({}, base, user, {\n name: NAVIGATOR_AXIS + \"_ticks\",\n maxDateGroups: 200,\n majorTicks: {\n width: 0.5\n },\n plotBands: [],\n title: null,\n labels: { visible: false, mirror: true },\n _overlap: true\n })\n );\n\n valueAxes.push(deepExtend({\n name: NAVIGATOR_AXIS,\n pane: NAVIGATOR_PANE,\n majorGridLines: {\n visible: false\n },\n visible: false\n }, naviOptions.valueAxis));\n };\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\n for (var idx = 0; idx < navigatorSeries.length; idx++) {\n series.push(\n deepExtend({\n color: seriesColors[idx % seriesColors.length],\n categoryField: naviOptions.dateField,\n visibleInLegend: false,\n tooltip: {\n visible: false\n }\n }, defaults, navigatorSeries[idx], {\n axis: NAVIGATOR_AXIS,\n categoryAxis: NAVIGATOR_AXIS,\n autoBind: naviOptions.autoBindElements\n })\n );\n }\n };\n\n function ClonedObject() { }\n function clone(obj) {\n ClonedObject.prototype = obj;\n return new ClonedObject();\n }\n\n var AUTO_CATEGORY_WIDTH = 28;\n\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\n var stockDefaults = {\n seriesDefaults: {\n categoryField: options.dateField\n },\n axisDefaults: {\n categoryAxis: {\n name: \"default\",\n majorGridLines: {\n visible: false\n },\n labels: {\n step: 2\n },\n majorTicks: {\n visible: false\n },\n maxDateGroups: Math.floor(width / AUTO_CATEGORY_WIDTH)\n }\n }\n };\n\n if (theme) {\n theme = deepExtend({}, theme, stockDefaults);\n }\n\n Navigator.setup(options, theme);\n\n Chart.fn.applyDefaults.call(this, options, theme);\n },\n\n _setElementClass: function(element) {\n dataviz.addClass(element, 'k-chart k-stockchart');\n },\n\n setOptions: function(options) {\n this.destroyNavigator();\n Chart.fn.setOptions.call(this, options);\n },\n\n noTransitionsRedraw: function() {\n var transitions = this.options.transitions;\n\n this.options.transitions = false;\n this._fullRedraw();\n this.options.transitions = transitions;\n },\n\n _resize: function() {\n this.noTransitionsRedraw();\n },\n\n _redraw: function() {\n var navigator = this.navigator;\n\n if (!this._dirty() && navigator && navigator.options.partialRedraw) {\n navigator.redrawSlaves();\n } else {\n this._fullRedraw();\n }\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) { return s && s.visible; }).length;\n var dirty = this._seriesCount !== seriesCount;\n this._seriesCount = seriesCount;\n\n return dirty;\n },\n\n _fullRedraw: function() {\n var navigator = this.navigator;\n\n if (!navigator) {\n navigator = this.navigator = new Navigator(this);\n this.trigger(\"navigatorCreated\", { navigator: navigator });\n }\n\n navigator.clean();\n navigator.setRange();\n\n Chart.fn._redraw.call(this);\n\n navigator.initSelection();\n },\n\n _trackSharedTooltip: function(coords) {\n var plotArea = this._plotArea;\n var pane = plotArea.paneByPoint(coords);\n\n if (pane && pane.options.name === NAVIGATOR_PANE) {\n this._unsetActivePoint();\n } else {\n Chart.fn._trackSharedTooltip.call(this, coords);\n }\n },\n\n bindCategories: function() {\n Chart.fn.bindCategories.call(this);\n this.copyNavigatorCategories();\n },\n\n copyNavigatorCategories: function() {\n var definitions = [].concat(this.options.categoryAxis);\n var categories;\n\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\n destroyNavigator: function() {\n if (this.navigator) {\n this.navigator.destroy();\n this.navigator = null;\n }\n },\n\n destroy: function() {\n this.destroyNavigator();\n Chart.fn.destroy.call(this);\n },\n\n _stopChartHandlers: function(e) {\n var coords = this._eventCoordinates(e);\n var pane = this._plotArea.paneByPoint(coords);\n\n return Chart.fn._stopChartHandlers.call(this, e) || (pane && pane.options.name === NAVIGATOR_PANE);\n },\n\n _toggleDragZoomEvents: function() {\n if (!this._dragZoomEnabled) {\n this.element.style.touchAction = \"none\";\n\n this._dragZoomEnabled = true;\n }\n }\n });\n\n dataviz.setDefaultOptions(StockChart, {\n dateField: \"date\",\n axisDefaults: {\n categoryAxis: {\n type: \"date\",\n baseUnit: \"fit\",\n justified: true\n },\n valueAxis: {\n narrowRange: true,\n labels: {\n format: \"C\"\n }\n }\n },\n navigator: {\n select: {},\n seriesDefaults: {\n markers: {\n visible: false\n },\n tooltip: {\n visible: true\n },\n line: {\n width: 2\n }\n },\n hint: {},\n visible: true\n },\n tooltip: {\n visible: true\n },\n legend: {\n visible: false\n }\n });\n\n kendo.deepExtend(kendo.dataviz, {\n constants: constants,\n Navigator: Navigator,\n NavigatorHint: NavigatorHint,\n StockChart: StockChart\n });\n\n })();\n\n (function($) {\n\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\n var CHANGE = \"change\";\n\n var StockInstanceObserver = ChartInstanceObserver.extend({\n handlerMap: {\n navigatorFilter: '_onNavigatorFilter',\n navigatorCreated: '_onNavigatorCreated'\n }\n });\n\n var StockChart = Chart.extend({\n\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: {\n format: \"C\"\n }\n }\n },\n navigator: {\n select: {},\n seriesDefaults: {\n markers: {\n visible: false\n },\n tooltip: {\n visible: true,\n template: \"#= kendo.toString(category, 'd') #\"\n },\n line: {\n width: 2\n }\n },\n hint: {},\n visible: true\n },\n tooltip: {\n visible: true\n },\n legend: {\n visible: false\n },\n persistSeriesVisibility: true\n },\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\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\n deepExtend(navigatorOptions, {\n autoBindElements: !navigatorOptions.dataSource,\n partialRedraw: navigatorOptions.dataSource,\n liveDrag: !isTouch && !isFirefox\n });\n },\n\n _initDataSource: function(userOptions) {\n var options = userOptions || {},\n dataSource = options.dataSource,\n hasServerFiltering = dataSource && dataSource.serverFiltering,\n mainAxis = [].concat(options.categoryAxis)[0],\n naviOptions = options.navigator || {},\n select = naviOptions.select,\n hasSelect = select && select.from && select.to;\n\n if (hasServerFiltering && hasSelect) {\n var filter = [].concat(dataSource.filter || []);\n\n var from = kendo.parseDate(select.from);\n var to = kendo.parseDate(select.to);\n var dummyAxis = new dataviz.DateCategoryAxis(deepExtend({\n baseUnit: \"fit\"\n }, mainAxis, {\n categories: [from, to]\n }), kendo);\n\n dataSource.filter = buildFilter(dummyAxis.range().min, to).concat(filter);\n }\n\n Chart.fn._initDataSource.call(this, userOptions);\n },\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\n _initNavigatorDataSource: function() {\n var navigatorOptions = this.options.navigator;\n var autoBind = navigatorOptions.autoBind;\n var dsOptions = navigatorOptions.dataSource;\n\n if (dsOptions) {\n this._navigatorDataChangedHandler = this._navigatorDataChangedHandler || this._onNavigatorDataChanged.bind(this);\n this._navigatorDataSource = kendo.data.DataSource\n .create(dsOptions)\n .bind(CHANGE, this._navigatorDataChangedHandler);\n\n if (!defined(autoBind)) {\n autoBind = this.options.autoBind;\n }\n\n if (autoBind) {\n this._navigatorDataSource.fetch();\n }\n }\n },\n\n _bindNavigatorSeries: function(series, data) {\n var seriesIx, currentSeries,\n seriesLength = series.length;\n\n for (seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\n currentSeries = series[seriesIx];\n\n if (currentSeries.axis == NAVIGATOR_AXIS && this._isBindable(currentSeries)) {\n currentSeries.data = data;\n }\n }\n },\n\n _onNavigatorDataChanged: function() {\n var chart = this,\n instance = chart._instance,\n categoryAxes = chart.options.categoryAxis,\n axisIx,\n axesLength = categoryAxes.length,\n data = chart._navigatorDataSource.view(),\n currentAxis,\n naviCategories;\n\n this._bindNavigatorSeries(chart.options.series, data);\n if (chart._sourceSeries) {\n this._bindNavigatorSeries(chart._sourceSeries, data);\n }\n\n for (axisIx = 0; axisIx < axesLength; axisIx++) {\n currentAxis = categoryAxes[axisIx];\n\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\n if (instance._model) {\n var navigator = this.navigator;\n navigator.redraw();\n navigator.setRange();\n\n if (!chart.options.dataSource || (chart.options.dataSource && chart._dataBound)) {\n navigator.redrawSlaves();\n }\n }\n },\n\n _bindCategories: function() {\n Chart.fn._bindCategories.call(this);\n if (this._instance) {\n this._instance.copyNavigatorCategories();\n }\n },\n\n _onDataChanged: function() {\n Chart.fn._onDataChanged.call(this);\n\n this._dataBound = true;\n },\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\n _onNavigatorFilter: function(e) {\n this.dataSource.filter(buildFilter(e.from, e.to));\n },\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\n return Chart.fn.requiresHandlers.call(this, names);\n },\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\n destroy: function() {\n Chart.fn.destroy.call(this);\n this._removeNavigatorDataSource();\n }\n });\n\n dataviz.ui.plugin(StockChart);\n\n function buildFilter(from, to) {\n return [{\n field: \"Date\", operator: \"gte\", value: from\n }, {\n field: \"Date\", operator: \"lt\", value: to\n }];\n }\n\n })(window.kendo.jQuery);\n\n var __meta__$K = {\n id: \"dataviz.stockchart\",\n name: \"StockChart\",\n category: \"dataviz\",\n description: \"StockChart widget and associated financial series.\",\n depends: [ \"dataviz.chart\" ]\n };\n\n /***********************************************************************\n * WARNING: this file is auto-generated. If you change it directly,\n * your modifications will eventually be lost. The source code is in\n * `kendo-charts` repository, you should make your changes there and\n * run `src-modules/sync.sh` in this repository.\n */\n\n (function() {\n /* eslint-disable space-before-blocks, space-before-function-paren */\n\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\n var TOP_OFFSET = -2;\n\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\n var point;\n\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\n return {\n point: point,\n align: align\n };\n },\n\n _defaultAnchor: function(point, slot) {\n return this._slotAnchor({}, slot);\n }\n });\n\n var DEAULT_BAR_WIDTH = 150;\n var DEAULT_BULLET_WIDTH = 150;\n var NO_CROSSHAIR = [ constants.BAR, 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\n return state;\n }\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\n function wrapNumber(value) {\n return dataviz.isNumber(value) ? [ value ] : value;\n }\n\n var Sparkline = Chart.extend({\n _setElementClass: function(element) {\n dataviz.addClass(element, 'k-sparkline');\n },\n\n _initElement: function(element) {\n Chart.fn._initElement.call(this, element);\n\n this._initialWidth = Math.floor(elementSize(element).width);\n },\n\n _resize: function() {\n var element = this.element;\n var state = hide(element.childNodes);\n\n this._initialWidth = Math.floor(elementSize(element).width);\n\n show(element.childNodes, state);\n\n Chart.fn._resize.call(this);\n },\n\n _modelOptions: function() {\n var chartOptions = this.options;\n var stage = this._surfaceWrap();\n var displayState = hide(stage.childNodes);\n\n var space = document.createElement('span');\n space.innerHTML = ' ';\n\n stage.appendChild(space);\n\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\n elementSize(stage, {\n width: options.width,\n height: options.height\n });\n\n stage.removeChild(space);\n\n show(stage.childNodes, displayState);\n\n if (this.surface) {\n this.surface.resize();\n }\n\n return options;\n },\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\n _createPlotArea: function(skipSeries) {\n var plotArea = Chart.fn._createPlotArea.call(this, skipSeries);\n this._autoWidth = this._initialWidth || this._calculateWidth(plotArea);\n\n return plotArea;\n },\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\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\n if (firstSeries.type === constants.BAR) {\n return DEAULT_BAR_WIDTH;\n }\n\n if (firstSeries.type === constants.BULLET) {\n return DEAULT_BULLET_WIDTH;\n }\n\n if (firstSeries.type === constants.PIE) {\n return elementSize(stage).height;\n }\n\n var categoryAxis = currentChart.categoryAxis;\n if (categoryAxis) {\n var pointsCount = categoryAxis.categoriesCount() *\n (!currentChart.options.isStacked && dataviz.inArray(firstSeries.type, [ constants.COLUMN, constants.VERTICAL_BULLET ]) ? currentChart.seriesOptions.length : 1);\n\n total = Math.max(total, pointsCount);\n }\n }\n\n var size = total * options.pointWidth;\n if (size > 0) {\n size += margin.left + margin.right;\n }\n\n return size;\n },\n\n _createSharedTooltip: function(options) {\n return new SharedTooltip$1(this._plotArea, options);\n }\n });\n\n Sparkline.normalizeOptions = function(userOptions) {\n var options = wrapNumber(userOptions);\n\n if (dataviz.isArray(options)) {\n options = { seriesDefaults: { data: options } };\n } else {\n options = deepExtend({}, options);\n }\n\n if (!options.series) {\n options.series = [ { data: wrapNumber(options.data) } ];\n }\n\n deepExtend(options, {\n seriesDefaults: {\n type: options.type\n }\n });\n\n if (dataviz.inArray(options.series[0].type, NO_CROSSHAIR) ||\n dataviz.inArray(options.seriesDefaults.type, NO_CROSSHAIR)) {\n options = deepExtend({}, {\n categoryAxis: {\n crosshair: {\n visible: false\n }\n }\n }, options);\n }\n\n return options;\n };\n\n dataviz.setDefaultOptions(Sparkline, {\n chartArea: {\n margin: 2\n },\n axisDefaults: {\n visible: false,\n majorGridLines: {\n visible: false\n },\n valueAxis: {\n narrowRange: true\n }\n },\n seriesDefaults: {\n type: \"line\",\n area: {\n line: {\n width: 0.5\n }\n },\n bar: {\n stack: true\n },\n padding: 2,\n width: 0.5,\n overlay: {\n gradient: null\n },\n highlight: {\n visible: false\n },\n border: {\n width: 0\n },\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: {\n visible: false\n }\n }\n },\n legend: {\n visible: false\n },\n transitions: false,\n\n pointWidth: 5,\n\n panes: [ { clip: false } ]\n });\n\n kendo.deepExtend(kendo.dataviz, {\n Sparkline: Sparkline\n });\n\n })();\n\n (function($) {\n\n var dataviz = kendo.dataviz;\n var Chart = dataviz.ui.Chart;\n var KendoSparkline = dataviz.Sparkline;\n var ChartInstanceObserver = dataviz.ChartInstanceObserver;\n\n var extend = $.extend;\n\n var Sparkline = Chart.extend({\n\n init: function(element, userOptions) {\n var options = userOptions;\n if (options instanceof kendo.data.ObservableArray) {\n options = { seriesDefaults: { data: options } };\n }\n\n Chart.fn.init.call(this, element, KendoSparkline.normalizeOptions(options));\n },\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\n _createTooltip: function() {\n return new SparklineTooltip(this.element, extend({}, this.options.tooltip, {\n rtl: this._isRtl()\n }));\n },\n\n options: {\n name: \"Sparkline\",\n chartArea: {\n margin: 2\n },\n axisDefaults: {\n visible: false,\n majorGridLines: {\n visible: false\n },\n valueAxis: {\n narrowRange: true\n }\n },\n seriesDefaults: {\n type: \"line\",\n area: {\n line: {\n width: 0.5\n }\n },\n bar: {\n stack: true\n },\n padding: 2,\n width: 0.5,\n overlay: {\n gradient: null\n },\n highlight: {\n visible: false\n },\n border: {\n width: 0\n },\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: {\n visible: false\n }\n }\n },\n legend: {\n visible: false\n },\n transitions: false,\n\n pointWidth: 5,\n\n panes: [{\n clip: false\n }]\n }\n });\n\n dataviz.ui.plugin(Sparkline);\n\n var SparklineTooltip = dataviz.Tooltip.extend({\n options: {\n animation: {\n duration: 0\n }\n },\n\n _hideElement: function() {\n if (this.element) {\n this.element.hide().remove();\n }\n }\n });\n\n dataviz.SparklineTooltip = SparklineTooltip;\n\n })(window.kendo.jQuery);\n\n var __meta__$J = {\n id: \"dataviz.sparkline\",\n name: \"Sparkline\",\n category: \"dataviz\",\n description: \"Sparkline widgets.\",\n depends: [ \"dataviz.chart\" ]\n };\n\n (function () {\r\n // Imports ================================================================\r\n var kendo = window.kendo,\r\n deepExtend = kendo.deepExtend;\r\n\r\n function sqr(value) {\r\n return value * value;\r\n }\r\n\r\n var now = Date.now;\r\n if (!now) {\r\n now = function() {\r\n return new Date().getTime();\r\n };\r\n }\r\n\r\n // Template helpers =======================================================\r\n\r\n function renderSize(size) {\r\n if (typeof size !== \"string\") {\r\n size += \"px\";\r\n }\r\n\r\n return size;\r\n }\r\n\r\n function renderPos(pos) {\r\n var result = [];\r\n\r\n if (pos) {\r\n var parts = kendo.toHyphens(pos).split(\"-\");\r\n\r\n for (var i = 0; i < parts.length; i++) {\r\n result.push(\"k-pos-\" + parts[i]);\r\n }\r\n }\r\n\r\n return result.join(\" \");\r\n }\r\n\r\n function arabicToRoman(n) {\r\n var literals = {\r\n 1 : \"i\", 10 : \"x\", 100 : \"c\",\r\n 2 : \"ii\", 20 : \"xx\", 200 : \"cc\",\r\n 3 : \"iii\", 30 : \"xxx\", 300 : \"ccc\",\r\n 4 : \"iv\", 40 : \"xl\", 400 : \"cd\",\r\n 5 : \"v\", 50 : \"l\", 500 : \"d\",\r\n 6 : \"vi\", 60 : \"lx\", 600 : \"dc\",\r\n 7 : \"vii\", 70 : \"lxx\", 700 : \"dcc\",\r\n 8 : \"viii\", 80 : \"lxxx\", 800 : \"dccc\",\r\n 9 : \"ix\", 90 : \"xc\", 900 : \"cm\",\r\n 1000 : \"m\"\r\n };\r\n var values = [ 1000,\r\n 900 , 800, 700, 600, 500, 400, 300, 200, 100,\r\n 90 , 80 , 70 , 60 , 50 , 40 , 30 , 20 , 10 ,\r\n 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 ];\r\n var roman = \"\";\r\n while (n > 0) {\r\n if (n < values[0]) {\r\n values.shift();\r\n } else {\r\n roman += literals[values[0]];\r\n n -= values[0];\r\n }\r\n }\r\n return roman;\r\n }\r\n\r\n function romanToArabic(r) {\r\n r = r.toLowerCase();\r\n var digits = {\r\n i: 1,\r\n v: 5,\r\n x: 10,\r\n l: 50,\r\n c: 100,\r\n d: 500,\r\n m: 1000\r\n };\r\n var value = 0, prev = 0;\r\n for (var i = 0; i < r.length; ++i) {\r\n var v = digits[r.charAt(i)];\r\n if (!v) {\r\n return null;\r\n }\r\n value += v;\r\n if (v > prev) {\r\n value -= 2 * prev;\r\n }\r\n prev = v;\r\n }\r\n return value;\r\n }\r\n\r\n function memoize(f) {\r\n var cache = Object.create(null);\r\n return function() {\n var arguments$1 = arguments;\n\r\n var id = \"\";\r\n for (var i = arguments.length; --i >= 0;) {\r\n id += \":\" + arguments$1[i];\r\n }\r\n return id in cache ? cache[id] : (cache[id] = f.apply(this, arguments));\r\n };\r\n }\r\n\r\n function isUnicodeLetter(ch) {\r\n return RX_UNICODE_LETTER.test(ch);\r\n }\r\n\r\n function withExit(f, obj) {\r\n try {\r\n return f.call(obj, function(value){\r\n throw new Return(value);\r\n });\r\n } catch(ex) {\r\n if (ex instanceof Return) {\r\n return ex.value;\r\n }\r\n throw ex;\r\n }\r\n function Return(value) {\r\n this.value = value;\r\n }\r\n }\r\n\r\n // Exports ================================================================\r\n deepExtend(kendo, {\r\n util: {\r\n now: now,\r\n renderPos: renderPos,\r\n renderSize: renderSize,\r\n sqr: sqr,\r\n romanToArabic: romanToArabic,\r\n arabicToRoman: arabicToRoman,\r\n memoize: memoize,\r\n isUnicodeLetter: isUnicodeLetter,\r\n withExit: withExit\r\n }\r\n });\r\n\r\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]\");\r\n\r\n })();\n\n (function($, undefined$1) {\n // Imports ================================================================\n var math = Math,\n abs = math.abs,\n atan = math.atan,\n atan2 = math.atan2,\n cos = math.cos,\n max = math.max,\n min = math.min,\n sin = math.sin,\n tan = math.tan,\n\n kendo = window.kendo,\n Class = kendo.Class,\n\n dataviz = kendo.dataviz,\n deepExtend = kendo.deepExtend,\n\n util = kendo.drawing.util,\n defined = util.defined,\n deg = util.deg,\n rad = util.rad,\n round = util.round,\n valueOrDefault = util.valueOrDefault,\n\n sqr = kendo.util.sqr;\n\n // Implementation =========================================================\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\n DISTANCE_ITERATIONS: 100,\n DISTANCE_CONVERGENCE: 1e-12,\n DISTANCE_PRECISION: 2,\n FORMAT: \"{0:N6},{1:N6}\",\n\n toArray: function() {\n return [this.lat, this.lng];\n },\n\n equals: function(loc) {\n return loc && loc.lat === this.lat && loc.lng === this.lng;\n },\n\n clone: function() {\n return new Location(this.lat, this.lng);\n },\n\n round: function(precision) {\n this.lng = round(this.lng, precision);\n this.lat = round(this.lat, precision);\n return this;\n },\n\n wrap: function() {\n this.lng = this.lng % 180;\n this.lat = this.lat % 90;\n return this;\n },\n\n distanceTo: function(dest, datum) {\n return this.greatCircleTo(dest, datum).distance;\n },\n\n destination: function(distance, bearing, datum) {\n bearing = rad(bearing);\n datum = datum || dataviz.map.datums.WGS84;\n\n var fromLat = rad(this.lat);\n var fromLng = rad(this.lng);\n var dToR = distance / kendo.dataviz.map.datums.WGS84.a;\n\n var lat = math.asin(sin(fromLat) * cos(dToR) +\n cos(fromLat) * sin(dToR) * cos(bearing));\n\n var lng = fromLng + atan2(sin(bearing) * sin(dToR) * cos(fromLat),\n cos(dToR) - sin(fromLat) * sin(lat));\n\n return new Location(deg(lat), deg(lng));\n },\n\n greatCircleTo: function(dest, datum) {\n dest = Location.create(dest);\n datum = datum || dataviz.map.datums.WGS84;\n\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\n // See http://en.wikipedia.org/wiki/Vincenty's_formulae#Notation\n // o == sigma\n // A == alpha\n var a = datum.a;\n var b = datum.b;\n var f = datum.f;\n\n var L = rad(dest.lng - this.lng);\n\n var U1 = atan((1 - f) * tan(rad(this.lat)));\n var sinU1 = sin(U1);\n var cosU1 = cos(U1);\n\n var U2 = atan((1 - f) * tan(rad(dest.lat)));\n var sinU2 = sin(U2);\n var cosU2 = cos(U2);\n\n var lambda = L;\n var prevLambda;\n\n var i = this.DISTANCE_ITERATIONS;\n var converged = false;\n\n var sinLambda;\n var cosLambda;\n var sino;\n var cosA2;\n var coso;\n var cos2om;\n var sigma;\n\n while (!converged && i-- > 0) {\n sinLambda = sin(lambda);\n cosLambda = cos(lambda);\n sino = math.sqrt(\n sqr(cosU2 * sinLambda) + sqr(cosU1 * sinU2 - sinU1 * cosU2 * cosLambda)\n );\n\n coso = sinU1 * sinU2 + cosU1 * cosU2 * cosLambda;\n sigma = atan2(sino, coso);\n\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\n prevLambda = lambda;\n var C = f / 16 * cosA2 * (4 + f * (4 - 3 * cosA2));\n lambda = L + (1 - C) * f * sinA * (\n sigma + C * sino * (cos2om + C * coso * (-1 + 2 * sqr(cos2om)))\n );\n\n converged = abs(lambda - prevLambda) <= this.DISTANCE_CONVERGENCE;\n }\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 * (\n coso * (-1 + 2 * sqr(cos2om)) - B / 6 * cos2om * (-3 + 4 * sqr(sino)) * (-3 + 4 * sqr(cos2om))\n ));\n\n var azimuthFrom = atan2(cosU2 * sinLambda, cosU1 * sinU2 - sinU1 * cosU2 * cosLambda);\n var azimuthTo = atan2(cosU1 * sinLambda, -sinU1 * cosU2 + cosU1 * sinU2 * cosLambda);\n\n return {\n distance: round(b * A * (sigma - deltao), this.DISTANCE_PRECISION),\n azimuthFrom: deg(azimuthFrom),\n azimuthTo: deg(azimuthTo)\n };\n }\n });\n\n // IE < 9 doesn't allow to override toString on definition\n Location.fn.toString = function() {\n return kendo.format(this.FORMAT, this.lat, this.lng);\n };\n\n Location.fromLngLat = function(ll) {\n return new Location(ll[1], ll[0]);\n };\n\n Location.fromLatLng = function(ll) {\n return new Location(ll[0], ll[1]);\n };\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\n var Extent = Class.extend({\n init: function(nw, se) {\n nw = Location.create(nw);\n se = Location.create(se);\n\n if (nw.lng + 180 > se.lng + 180 &&\n 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\n contains: function(loc) {\n var nw = this.nw,\n se = this.se,\n lng = valueOrDefault(loc.lng, loc[1]),\n lat = valueOrDefault(loc.lat, loc[0]);\n\n return loc &&\n lng + 180 >= nw.lng + 180 &&\n lng + 180 <= se.lng + 180 &&\n lat + 90 >= se.lat + 90 &&\n lat + 90 <= nw.lat + 90;\n },\n\n center: function() {\n var nw = this.nw;\n var se = this.se;\n\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\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\n return result;\n },\n\n include: function(loc) {\n var nw = this.nw,\n se = this.se,\n lng = valueOrDefault(loc.lng, loc[1]),\n lat = valueOrDefault(loc.lat, loc[0]);\n\n nw.lng = min(nw.lng, lng);\n nw.lat = max(nw.lat, lat);\n\n se.lng = max(se.lng, lng);\n se.lat = min(se.lat, lat);\n },\n\n includeAll: function(locs) {\n for (var i = 0; i < locs.length; i++) {\n this.include(locs[i]);\n }\n },\n\n edges: function() {\n var nw = this.nw,\n se = this.se;\n\n return { nw: this.nw, ne: new Location(nw.lat, se.lng),\n se: this.se, sw: new Location(se.lat, nw.lng) };\n },\n\n toArray: function() {\n var nw = this.nw,\n se = this.se;\n\n return [nw, new Location(nw.lat, se.lng),\n se, new Location(se.lat, nw.lng)];\n },\n\n overlaps: function(extent) {\n return this.containsAny(extent.toArray()) ||\n extent.containsAny(this.toArray());\n }\n });\n\n Extent.World = new Extent([90, -180], [-90, 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([a[0], a[1]], [a[2], a[3]]);\n }\n };\n\n // Exports ================================================================\n deepExtend(dataviz, {\n map: {\n Extent: Extent,\n Location: Location\n }\n });\n\n })(window.kendo.jQuery);\n\n (function() {\n var kendo = window.kendo,\n Widget = kendo.ui.Widget,\n template = kendo.template,\n\n util = kendo.drawing.util,\n valueOrDefault = util.valueOrDefault,\n defined = util.defined;\n\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\n options: {\n name: \"Attribution\",\n separator: \" | \",\n itemTemplate: \"#= text #\"\n },\n\n filter: function(extent, zoom) {\n this._extent = extent;\n this._zoom = zoom;\n this._render();\n },\n\n add: function(item) {\n if (defined(item)) {\n if (typeof item === \"string\") {\n item = { text: item };\n }\n\n this.items.push(item);\n this._render();\n }\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\n this.items = result;\n\n this._render();\n },\n\n clear: function() {\n this.items = [];\n this.element.empty();\n },\n\n _render: function() {\n var result = [];\n var itemTemplate = template(this.options.itemTemplate);\n\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({\n text: text\n }));\n }\n }\n\n if (result.length > 0) {\n this.element.empty()\n .append(result.join(this.options.separator))\n .show();\n } else {\n this.element.hide();\n }\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\n if (inZoomLevel && inArea) {\n text += item.text;\n }\n\n return text;\n },\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\n result = this._zoom > min && this._zoom < max;\n\n return result;\n },\n\n _inArea: function(area) {\n var result = true;\n\n if (area) {\n result = area.contains(this._extent);\n }\n\n return result;\n }\n });\n\n kendo.dataviz.ui.plugin(Attribution);\n })(window.kendo.jQuery);\n\n (function($) {\n var kendo = window.kendo;\n var Widget = kendo.ui.Widget;\n var keys = kendo.keys;\n\n var NS = \".kendoNavigator\";\n\n // Helper functions =======================================================\n function button(dir) {\n return kendo.format(\n '', dir);\n }\n\n var BUTTONS = button(\"up\") + button(\"right\") + button(\"down\") + button(\"left\");\n\n var Navigator = Widget.extend({\n init: function(element, options) {\n Widget.fn.init.call(this, element, options);\n this._initOptions(options);\n\n this.element.addClass(\"k-widget k-navigator\")\n .append(BUTTONS)\n .on(\"click\" + NS, \".k-button\", this._click.bind(this));\n\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\n this._keydown = this._keydown.bind(this);\n this._keyroot.on(\"keydown\", this._keydown);\n },\n\n options: {\n name: \"Navigator\",\n panStep: 1\n },\n\n events: [\n \"pan\"\n ],\n\n dispose: function() {\n this._keyroot.off(\"keydown\", this._keydown);\n },\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\n _click: function(e) {\n var x = 0;\n var y = 0;\n var button = $(e.currentTarget);\n\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\n this._pan(x, y);\n e.preventDefault();\n },\n\n _keydown: function(e) {\n switch (e.which) {\n case keys.UP:\n this._pan(0, 1);\n e.preventDefault();\n break;\n\n case keys.DOWN:\n this._pan(0, -1);\n e.preventDefault();\n break;\n\n case keys.RIGHT:\n this._pan(1, 0);\n e.preventDefault();\n break;\n\n case keys.LEFT:\n this._pan(-1, 0);\n e.preventDefault();\n break;\n }\n }\n });\n\n // Exports ================================================================\n kendo.dataviz.ui.plugin(Navigator);\n\n })(window.kendo.jQuery);\n\n (function($) {\n var kendo = window.kendo;\n var Widget = kendo.ui.Widget;\n var keys = kendo.keys;\n\n // Helper functions =======================================================\n function button(dir, iconClass) {\n return kendo.format(\n '',\n dir, iconClass);\n }\n\n var NS = \".kendoZoomControl\";\n var BUTTONS = button(\"in\", \"k-i-plus\") + button(\"out\", \"k-i-minus\");\n\n var PLUS = 187;\n var MINUS = 189;\n var FF_PLUS = 61;\n var FF_MINUS = 173;\n\n\n var ZoomControl = Widget.extend({\n init: function(element, options) {\n Widget.fn.init.call(this, element, options);\n this._initOptions(options);\n\n this.element.addClass(\"k-widget k-zoom-control k-button-group k-group-horizontal\")\n .append(BUTTONS)\n .on(\"click\" + NS, \".k-button\", this._click.bind(this));\n\n var parentElement = this.element.parent().closest(\"[\" + kendo.attr(\"role\") + \"]\");\n this._keyroot = parentElement.length > 0 ? parentElement : this.element;\n\n this._tabindex(this._keyroot);\n\n this._keydown = this._keydown.bind(this);\n this._keyroot.on(\"keydown\", this._keydown);\n },\n\n options: {\n name: \"ZoomControl\",\n zoomStep: 1\n },\n\n events: [\n \"change\"\n ],\n\n _change: function(dir) {\n var zoomStep = this.options.zoomStep;\n this.trigger(\"change\", {\n delta: dir * zoomStep\n });\n },\n\n _click: function(e) {\n var button = $(e.currentTarget);\n var dir = 1;\n\n if (button.is(\".k-zoom-out\")) {\n dir = -1;\n }\n\n this._change(dir);\n e.preventDefault();\n },\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\n case keys.NUMPAD_MINUS:\n case MINUS:\n case FF_MINUS:\n this._change(-1);\n break;\n }\n }\n });\n\n\n // Exports ================================================================\n kendo.dataviz.ui.plugin(ZoomControl);\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n // Imports ================================================================\n var math = Math,\n atan = math.atan,\n exp = math.exp,\n pow = math.pow,\n sin = math.sin,\n log = math.log,\n tan = math.tan,\n\n kendo = window.kendo,\n Class = kendo.Class,\n\n dataviz = kendo.dataviz,\n deepExtend = kendo.deepExtend,\n\n g = kendo.geometry,\n Point = g.Point,\n\n map = dataviz.map,\n Location = map.Location,\n\n util = kendo.drawing.util,\n rad = util.rad,\n deg = util.deg,\n limit = util.limitValue;\n\n // Constants ==============================================================\n var PI = math.PI,\n PI_DIV_2 = PI / 2,\n PI_DIV_4 = PI / 4,\n DEG_TO_RAD = PI / 180;\n\n // Coordinate reference systems ===========================================\n var WGS84 = {\n a: 6378137, // Semi-major radius\n b: 6356752.314245179, // Semi-minor radius\n f: 0.0033528106647474805, // Flattening\n e: 0.08181919084262149 // Eccentricity\n };\n\n // WGS 84 / World Mercator\n var Mercator = Class.extend({\n init: function(options) {\n this._initOptions(options);\n },\n\n MAX_LNG: 180,\n MAX_LAT: 85.0840590501,\n INVERSE_ITERATIONS: 15,\n INVERSE_CONVERGENCE: 1e-12,\n\n options: {\n centralMeridian: 0,\n datum: WGS84\n },\n\n forward: function(loc, clamp) {\n var proj = this,\n options = proj.options,\n datum = options.datum,\n r = datum.a,\n lng0 = options.centralMeridian,\n lat = limit(loc.lat, -proj.MAX_LAT, proj.MAX_LAT),\n lng = clamp ? limit(loc.lng, -proj.MAX_LNG, proj.MAX_LNG) : loc.lng,\n x = rad(lng - lng0) * r,\n y = proj._projectLat(lat);\n\n return new Point(x, y);\n },\n\n _projectLat: function(lat) {\n var datum = this.options.datum,\n ecc = datum.e,\n r = datum.a,\n y = rad(lat),\n ts = tan(PI_DIV_4 + y / 2),\n con = ecc * sin(y),\n p = pow((1 - con) / (1 + con), ecc / 2);\n\n // See:\n // http://en.wikipedia.org/wiki/Mercator_projection#Generalization_to_the_ellipsoid\n return r * log(ts * p);\n },\n\n inverse: function(point, clamp) {\n var proj = this,\n options = proj.options,\n datum = options.datum,\n r = datum.a,\n lng0 = options.centralMeridian,\n lng = point.x / (DEG_TO_RAD * r) + lng0,\n lat = limit(proj._inverseY(point.y), -proj.MAX_LAT, proj.MAX_LAT);\n\n if (clamp) {\n lng = limit(lng, -proj.MAX_LNG, proj.MAX_LNG);\n }\n\n return new Location(lat, lng);\n },\n\n _inverseY: function(y) {\n var proj = this,\n datum = proj.options.datum,\n r = datum.a,\n ecc = datum.e,\n ecch = ecc / 2,\n ts = exp(-y / r),\n phi = PI_DIV_2 - 2 * atan(ts),\n i;\n\n for (i = 0; i <= proj.INVERSE_ITERATIONS; i++) {\n var con = ecc * sin(phi),\n p = pow((1 - con) / (1 + con), ecch),\n dphi = PI_DIV_2 - 2 * atan(ts * p) - phi;\n\n phi += dphi;\n\n if (math.abs(dphi) <= proj.INVERSE_CONVERGENCE) {\n break;\n }\n }\n\n return deg(phi);\n }\n });\n\n // WGS 84 / Pseudo-Mercator\n // Used by Google Maps, Bing, OSM, etc.\n // Spherical projection of ellipsoidal coordinates.\n var SphericalMercator = Mercator.extend({\n MAX_LAT: 85.0511287798,\n\n _projectLat: function(lat) {\n var r = this.options.datum.a,\n y = rad(lat),\n ts = tan(PI_DIV_4 + y / 2);\n\n return r * log(ts);\n },\n\n _inverseY: function(y) {\n var r = this.options.datum.a,\n ts = exp(-y / r);\n\n return deg(PI_DIV_2 - (2 * atan(ts)));\n }\n });\n\n var Equirectangular = Class.extend({\n forward: function(loc) {\n return new Point(loc.lng, loc.lat);\n },\n\n inverse: function(point) {\n return new Location(point.y, point.x);\n }\n });\n\n // TODO: Better (less cryptic name) for this class(es)\n var EPSG3857 = Class.extend({\n init: function() {\n var crs = this,\n proj = crs._proj = new SphericalMercator();\n\n var c = this.c = 2 * PI * proj.options.datum.a;\n\n // Scale circumference to 1, mirror Y and shift origin to top left\n this._tm = g.transform().translate(0.5, 0.5).scale(1 / c, -1 / c);\n\n // Inverse transform matrix\n this._itm = g.transform().scale(c, -c).translate(-0.5, -0.5);\n },\n\n // Location <-> Point (screen coordinates for a given scale)\n toPoint: function(loc, scale, clamp) {\n var point = this._proj.forward(loc, clamp);\n\n return point\n .transform(this._tm)\n .scale(scale || 1);\n },\n\n toLocation: function(point, scale, clamp) {\n point = point\n .clone()\n .scale(1 / (scale || 1))\n .transform(this._itm);\n\n return this._proj.inverse(point, clamp);\n }\n });\n\n var EPSG3395 = Class.extend({\n init: function() {\n this._proj = new Mercator();\n },\n\n toPoint: function(loc) {\n return this._proj.forward(loc);\n },\n\n toLocation: function(point) {\n return this._proj.inverse(point);\n }\n });\n\n // WGS 84\n var EPSG4326 = Class.extend({\n init: function() {\n this._proj = new Equirectangular();\n },\n\n toPoint: function(loc) {\n return this._proj.forward(loc);\n },\n\n toLocation: function(point) {\n return this._proj.inverse(point);\n }\n });\n\n // Exports ================================================================\n deepExtend(dataviz, {\n map: {\n crs: {\n EPSG3395: EPSG3395,\n EPSG3857: EPSG3857,\n EPSG4326: EPSG4326\n },\n datums: {\n WGS84: WGS84\n },\n projections: {\n Equirectangular: Equirectangular,\n Mercator: Mercator,\n SphericalMercator: SphericalMercator\n }\n }\n });\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n // Imports ================================================================\n var kendo = window.kendo,\n Class = kendo.Class,\n\n dataviz = kendo.dataviz,\n deepExtend = kendo.deepExtend,\n\n Extent = dataviz.map.Extent,\n\n util = kendo.drawing.util,\n defined = util.defined;\n\n // Implementation =========================================================\n var Layer = Class.extend({\n init: function(map, options) {\n this._initOptions(options);\n this.map = map;\n\n this.element = $(\"
    \")\n .css({\n \"zIndex\": this.options.zIndex,\n \"opacity\": this.options.opacity\n })\n .appendTo(map.scrollElement);\n\n this._beforeReset = this._beforeReset.bind(this);\n this._reset = this._reset.bind(this);\n this._resize = this._resize.bind(this);\n this._panEnd = this._panEnd.bind(this);\n this._activate();\n\n this._updateAttribution();\n },\n\n destroy: function() {\n this._deactivate();\n },\n\n show: function() {\n this.reset();\n this._activate();\n this._applyExtent(true);\n },\n\n hide: function() {\n this._deactivate();\n this._setVisibility(false);\n },\n\n reset: function() {\n this._beforeReset();\n this._reset();\n },\n\n _reset: function() {\n this._applyExtent();\n },\n\n _beforeReset: $.noop,\n\n _resize: $.noop,\n\n _panEnd: function() {\n this._applyExtent();\n },\n\n _applyExtent: function() {\n var options = this.options;\n\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\n var extent = Extent.create(options.extent);\n var inside = !extent || extent.overlaps(this.map.extent());\n\n this._setVisibility(matchMinZoom && matchMaxZoom && inside);\n },\n\n _setVisibility: function(visible) {\n this.element.css(\"display\", visible ? \"\" : \"none\");\n },\n\n _activate: function() {\n var map = this.map;\n this._deactivate();\n map.bind(\"beforeReset\", this._beforeReset);\n map.bind(\"reset\", this._reset);\n map.bind(\"resize\", this._resize);\n map.bind(\"panEnd\", this._panEnd);\n },\n\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\n _updateAttribution: function() {\n var attr = this.map.attribution;\n\n if (attr) {\n attr.add(this.options.attribution);\n }\n }\n });\n\n // Exports ================================================================\n deepExtend(dataviz, {\n map: {\n layers: {\n Layer: Layer\n }\n }\n });\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n // Imports ================================================================\n var kendo = window.kendo,\n Class = kendo.Class,\n DataSource = kendo.data.DataSource,\n\n dataviz = kendo.dataviz,\n deepExtend = kendo.deepExtend,\n\n g = kendo.geometry,\n\n d = kendo.drawing,\n Group = d.Group,\n\n last = d.util.last,\n defined = d.util.defined,\n\n map = dataviz.map,\n Location = map.Location,\n Layer = map.layers.Layer;\n\n // Implementation =========================================================\n var ShapeLayer = Layer.extend({\n init: function(map, options) {\n\n this._pan = this._pan.bind(this);\n\n Layer.fn.init.call(this, map, options);\n\n this.surface = d.Surface.create(this.element, {\n width: map.scrollElement.width(),\n height: map.scrollElement.height()\n });\n\n this._initRoot();\n\n this.movable = new kendo.ui.Movable(this.surface.element);\n this._markers = [];\n\n this._click = this._handler(\"shapeClick\");\n this.surface.bind(\"click\", this._click);\n\n this._mouseenter = this._handler(\"shapeMouseEnter\");\n this.surface.bind(\"mouseenter\", this._mouseenter);\n\n this._mouseleave = this._handler(\"shapeMouseLeave\");\n this.surface.bind(\"mouseleave\", this._mouseleave);\n\n this._initDataSource();\n },\n\n options: {\n autoBind: true\n },\n\n destroy: function() {\n Layer.fn.destroy.call(this);\n\n this.surface.destroy();\n this.dataSource.unbind(\"change\", this._dataChange);\n },\n\n setDataSource: function(dataSource) {\n if (this.dataSource) {\n this.dataSource.unbind(\"change\", this._dataChange);\n }\n\n this.dataSource = kendo.data.DataSource.create(dataSource);\n this.dataSource.bind(\"change\", this._dataChange);\n\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n\n _reset: function() {\n Layer.fn._reset.call(this);\n this._translateSurface();\n\n if (this._data) {\n this._load(this._data);\n }\n },\n\n _initRoot: function() {\n this._root = new Group();\n this.surface.draw(this._root);\n },\n\n _beforeReset: function() {\n this.surface.clear();\n this._initRoot();\n },\n\n _resize: function() {\n this.surface.size(this.map.size());\n },\n\n _initDataSource: function() {\n var dsOptions = this.options.dataSource;\n this._dataChange = this._dataChange.bind(this);\n this.dataSource = DataSource\n .create(dsOptions)\n .bind(\"change\", this._dataChange);\n\n if (dsOptions && this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n\n _dataChange: function(e) {\n this._data = e.sender.view();\n this._load(this._data);\n },\n\n _load: function(data) {\n this._clearMarkers();\n\n if (!this._loader) {\n this._loader = new GeoJSONLoader(this.map, this.options.style, this);\n }\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\n this._root.clear();\n this._root.append(container);\n },\n\n shapeCreated: function(shape) {\n var cancelled = false;\n if (shape instanceof d.Circle) {\n cancelled = defined(this._createMarker(shape));\n }\n\n if (!cancelled) {\n var args = { layer: this, shape: shape };\n cancelled = this.map.trigger(\"shapeCreated\", args);\n }\n\n return cancelled;\n },\n\n featureCreated: function(e) {\n e.layer = this;\n this.map.trigger(\"shapeFeatureCreated\", e);\n },\n\n _createMarker: function(shape) {\n var marker = this.map.markers.bind({\n location: shape.location\n }, shape.dataItem);\n\n if (marker) {\n this._markers.push(marker);\n }\n\n return marker;\n },\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\n _pan: function() {\n if (!this._panning) {\n this._panning = true;\n this.surface.suspendTracking();\n }\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\n _translateSurface: function() {\n var map = this.map;\n var nw = map.locationToView(map.extent().nw);\n\n if (this.surface.translate) {\n this.surface.translate(nw);\n this.movable.moveTo({ x: nw.x, 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\n layer.map.trigger(event, args);\n }\n };\n },\n\n _activate: function() {\n Layer.fn._activate.call(this);\n\n this.map.bind(\"pan\", this._pan);\n },\n\n _deactivate: function() {\n Layer.fn._deactivate.call(this);\n\n this.map.unbind(\"pan\", this._pan);\n }\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\n parse: function(item) {\n var root = new Group();\n var unwrap = true;\n\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\n if (unwrap && root.children.length < 2) {\n root = root.children[0];\n }\n\n return root;\n },\n\n _shapeCreated: function(shape) {\n var cancelled = false;\n\n if (this.observer && this.observer.shapeCreated) {\n cancelled = this.observer.shapeCreated(shape);\n }\n\n return cancelled;\n },\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\n _loadGeometryTo: function(container, geometry, dataItem) {\n var coords = geometry.coordinates;\n var i;\n var path;\n\n switch (geometry.type) {\n case \"LineString\":\n path = this._loadPolygon(container, [coords], dataItem);\n this._setLineFill(path);\n break;\n\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\n case \"Polygon\":\n this._loadPolygon(container, coords, dataItem);\n break;\n\n case \"MultiPolygon\":\n for (i = 0; i < coords.length; i++) {\n this._loadPolygon(container, coords[i], dataItem);\n }\n break;\n\n case \"Point\":\n this._loadPoint(container, coords, dataItem);\n break;\n\n case \"MultiPoint\":\n for (i = 0; i < coords.length; i++) {\n this._loadPoint(container, coords[i], dataItem);\n }\n break;\n }\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\n _loadShape: function(container, shape) {\n if (!this._shapeCreated(shape)) {\n container.append(shape);\n }\n\n return shape;\n },\n\n _loadPolygon: function(container, rings, dataItem) {\n var shape = this._buildPolygon(rings);\n shape.dataItem = dataItem;\n\n return this._loadShape(container, shape);\n },\n\n _buildPolygon: function(rings) {\n var type = rings.length > 1 ? d.MultiPath : d.Path;\n var path = new type(this.style);\n\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(\n Location.fromLngLat(rings[i][j])\n );\n\n if (j === 0) {\n path.moveTo(point.x, point.y);\n } else {\n path.lineTo(point.x, point.y);\n }\n }\n }\n\n return path;\n },\n\n _loadPoint: function(container, coords, dataItem) {\n var location = Location.fromLngLat(coords);\n var point = this.locator.locationToView(location);\n\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\n return this._loadShape(container, shape);\n }\n });\n\n // Exports ================================================================\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\n if (data.type === \"GeometryCollection\") {\n return data.geometries;\n }\n\n return data;\n }\n }\n },\n transports: {\n geojson: {\n read: {\n dataType: \"json\"\n }\n }\n }\n });\n\n deepExtend(dataviz, {\n map: {\n layers: {\n shape: ShapeLayer,\n ShapeLayer: ShapeLayer\n },\n GeoJSONLoader: GeoJSONLoader\n }\n });\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n // Imports ================================================================\n var kendo = window.kendo,\n getter = kendo.getter,\n\n dataviz = kendo.dataviz,\n deepExtend = kendo.deepExtend,\n\n g = kendo.geometry,\n d = kendo.drawing,\n\n util = d.util,\n defined = util.defined,\n\n map = dataviz.map,\n Location = map.Location,\n ShapeLayer = map.layers.ShapeLayer;\n\n // Implementation =========================================================\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\n _load: function(data) {\n this.surface.clear();\n\n if (data.length === 0) {\n return;\n }\n\n var opt = this.options;\n var getValue = getter(opt.valueField);\n\n data = data.slice(0);\n data.sort(function(a, b) {\n return getValue(b) - getValue(a);\n });\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\n if (defined(location) && defined(value)) {\n if (!scale) {\n scale = new scaleType([0, value], [opt.minSize, opt.maxSize]);\n }\n\n location = Location.create(location);\n var center = this.map.locationToView(location);\n var size = scale.map(value);\n\n var symbol = this._createSymbol({\n center: center,\n size: size,\n style: opt.style,\n dataItem: dataItem,\n location: location\n });\n\n symbol.dataItem = dataItem;\n symbol.location = location;\n symbol.value = value;\n\n this._drawSymbol(symbol);\n }\n }\n },\n\n _scaleType: function() {\n var scale = this.options.scale;\n\n if (kendo.isFunction(scale)) {\n return scale;\n }\n\n return dataviz.map.scales[scale];\n },\n\n _createSymbol: function(args) {\n var symbol = this.options.symbol;\n if (!kendo.isFunction(symbol)) {\n symbol = dataviz.map.symbols[symbol];\n }\n\n return symbol(args);\n },\n\n _drawSymbol: function(shape) {\n var args = { layer: this, shape: shape };\n var cancelled = this.map.trigger(\"shapeCreated\", args);\n if (!cancelled) {\n this.surface.draw(shape);\n }\n }\n });\n\n var SqrtScale = kendo.Class.extend({\n init: function(domain, range) {\n this._domain = domain;\n this._range = range;\n\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\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\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\n square: function(args) {\n var path = new d.Path(args.style);\n var halfSize = args.size / 2;\n var center = args.center;\n\n path.moveTo(center.x - halfSize, center.y - halfSize)\n .lineTo(center.x + halfSize, center.y - halfSize)\n .lineTo(center.x + halfSize, center.y + halfSize)\n .lineTo(center.x - halfSize, center.y + halfSize)\n .close();\n\n return path;\n }\n };\n\n // Exports ================================================================\n deepExtend(dataviz, {\n map: {\n layers: {\n bubble: BubbleLayer,\n BubbleLayer: BubbleLayer\n },\n scales: {\n sqrt: SqrtScale\n },\n symbols: Symbols\n }\n });\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n // Imports ================================================================\n var math = Math,\n\n kendo = window.kendo,\n Class = kendo.Class,\n template = kendo.template,\n\n dataviz = kendo.dataviz,\n deepExtend = kendo.deepExtend,\n\n g = kendo.geometry,\n Point = g.Point,\n\n Layer = dataviz.map.layers.Layer,\n\n util = kendo.util,\n renderSize = util.renderSize,\n\n drawingUtil = kendo.drawing.util,\n round = drawingUtil.round,\n limit = drawingUtil.limitValue;\n\n // Image tile layer =============================================================\n var TileLayer = Layer.extend({\n init: function(map, options) {\n Layer.fn.init.call(this, map, options);\n\n if (typeof this.options.subdomains === \"string\") {\n this.options.subdomains = this.options.subdomains.split(\"\");\n }\n\n var viewType = this._viewType();\n this._view = new viewType(this.element, this.options);\n },\n\n destroy: function() {\n Layer.fn.destroy.call(this);\n\n this._view.destroy();\n this._view = null;\n },\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\n _reset: function(e) {\n var tileTitle;\n\n if (e) {\n tileTitle = e.tileTitle;\n } else {\n tileTitle = \"\";\n }\n\n Layer.fn._reset.call(this);\n this._updateView();\n this._view.reset(tileTitle);\n },\n\n _viewType: function() {\n return TileView;\n },\n\n _activate: function() {\n Layer.fn._activate.call(this);\n\n if (!kendo.support.mobileOS) {\n if (!this._pan) {\n this._pan = kendo.throttle(\n this._render.bind(this),\n 100\n );\n }\n\n this.map.bind(\"pan\", this._pan);\n }\n },\n\n _deactivate: function() {\n Layer.fn._deactivate.call(this);\n\n if (this._pan) {\n this.map.unbind(\"pan\", this._pan);\n }\n },\n\n _updateView: function() {\n var view = this._view,\n map = this.map,\n extent = map.extent(),\n extentToPoint = {\n nw: map.locationToLayer(extent.nw).round(),\n se: map.locationToLayer(extent.se).round()\n };\n\n view.center(map.locationToLayer(map.center()));\n view.extent(extentToPoint);\n view.zoom(map.zoom());\n },\n\n _resize: function() {\n this._render();\n },\n\n _panEnd: function(e) {\n Layer.fn._panEnd.call(this, e);\n this._render();\n },\n\n _render: function() {\n this._updateView();\n this._view.render();\n }\n });\n\n var TileView = Class.extend({\n init: function(element, options) {\n this.element = element;\n this._initOptions(options);\n\n this.pool = new TilePool();\n },\n\n options: {\n tileSize: 256,\n subdomains: [\"a\", \"b\", \"c\"],\n urlTemplate: \"\"\n },\n\n center: function(center) {\n this._center = center;\n },\n\n extent: function(extent) {\n this._extent = extent;\n },\n\n viewOrigin: function(origin) {\n this._viewOrigin = origin;\n },\n\n zoom: function(zoom) {\n this._zoom = zoom;\n },\n\n pointToTileIndex: function(point) {\n return new Point(\n math.floor(point.x / this.options.tileSize),\n math.floor(point.y / this.options.tileSize)\n );\n },\n\n tileCount: function() {\n var size = this.size(),\n firstTileIndex = this.pointToTileIndex(this._extent.nw),\n nw = this._extent.nw,\n point = this.indexToPoint(firstTileIndex).translate(-nw.x, -nw.y);\n\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\n size: function() {\n var nw = this._extent.nw,\n se = this._extent.se,\n diff = se.clone().translate(-nw.x, -nw.y);\n\n return {\n width: diff.x,\n height: diff.y\n };\n },\n\n indexToPoint: function(index) {\n var x = index.x, y = index.y;\n\n return new Point(\n x * this.options.tileSize,\n y * this.options.tileSize\n );\n },\n\n subdomainText: function() {\n var subdomains = this.options.subdomains;\n\n return subdomains[this.subdomainIndex++ % subdomains.length];\n },\n\n destroy: function() {\n this.element.empty();\n this.pool.empty();\n },\n\n reset: function(tileTitle) {\n this._tileTitle = tileTitle;\n this.pool.reset();\n this.subdomainIndex = 0;\n this.render();\n },\n\n render: function() {\n var size = this.tileCount(),\n firstTileIndex = this.pointToTileIndex(this._extent.nw),\n tile, x, y;\n\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\n if (!tile.visible) {\n tile.show();\n }\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\n return tile;\n },\n\n tileOptions: function(currentIndex) {\n var index = this.wrapIndex(currentIndex),\n point = this.indexToPoint(currentIndex),\n origin = this._viewOrigin,\n offset = point.clone().translate(-origin.x, -origin.y);\n\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 tileTitle: this._tileTitle\n };\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\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\n return value;\n }\n });\n\n var ImageTile = Class.extend({\n init: function(id, options) {\n this.id = id;\n this.visible = true;\n\n this._initOptions(options);\n this.createElement();\n this.show();\n },\n\n options: {\n urlTemplate: \"\",\n errorUrlTemplate: \"\"\n },\n\n createElement: function() {\n this.element = $(\"\" + this.options.tileTitle + \"\")\n .css({ width: this.options.size, height: this.options.size })\n .on(\"error\", (function(e) {\n if (this.errorUrl()) {\n e.target.setAttribute(\"src\", this.errorUrl());\n } else {\n e.target.removeAttribute(\"src\");\n }\n }).bind(this));\n },\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\n var url = this.url();\n if (url) {\n element.setAttribute(\"src\", url);\n }\n\n element.style.visibility = \"visible\";\n this.visible = true;\n },\n\n hide: function() {\n this.element[0].style.visibility = \"hidden\";\n this.visible = false;\n },\n\n url: function() {\n var urlResult = template(this.options.urlTemplate);\n\n return urlResult(this.urlOptions());\n },\n\n errorUrl: function() {\n var urlResult = template(this.options.errorUrlTemplate);\n\n return urlResult(this.urlOptions());\n },\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\n destroy: function() {\n if (this.element) {\n this.element.remove();\n this.element = null;\n }\n }\n });\n\n var TilePool = Class.extend({\n init: function() {\n this._items = [];\n },\n\n options: {\n maxSize: 100\n },\n\n get: function(center, options) {\n if (this._items.length >= this.options.maxSize) {\n this._remove(center);\n }\n\n return this._create(options);\n },\n\n empty: function() {\n var items = this._items;\n for (var i = 0; i < items.length; i++) {\n items[i].destroy();\n }\n\n this._items = [];\n },\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\n _create: function(options) {\n var items = this._items;\n var tile;\n\n // Build an unique token for the image\n // This normally would be the URL, but we don't care about subdomains\n var id = util.hashKey(\n options.point.toString() +\n options.offset.toString() +\n options.zoom +\n options.urlTemplate\n );\n\n for (var i = 0; i < items.length; i++) {\n if (items[i].id === id) {\n tile = items[i];\n break;\n }\n }\n\n if (tile) {\n tile.show();\n } else {\n tile = new ImageTile(id, options);\n this._items.push(tile);\n }\n\n return tile;\n },\n\n _remove: function(center) {\n var items = this._items;\n var maxDist = -1;\n var index = -1;\n\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\n if (index !== -1) {\n items[index].destroy();\n items.splice(index, 1);\n }\n }\n });\n\n // Methods ================================================================\n function roundPoint(point) {\n return new Point(round(point.x), round(point.y));\n }\n\n // Exports ================================================================\n deepExtend(dataviz, {\n map: {\n layers: {\n tile: TileLayer,\n TileLayer: TileLayer,\n\n ImageTile: ImageTile,\n TilePool: TilePool,\n TileView: TileView\n }\n }\n });\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n // Imports ================================================================\n var kendo = window.kendo,\n\n dataviz = kendo.dataviz,\n deepExtend = kendo.deepExtend,\n defined = kendo.drawing.util.defined,\n\n Extent = dataviz.map.Extent,\n Location = dataviz.map.Location,\n TileLayer = dataviz.map.layers.TileLayer,\n TileView = dataviz.map.layers.TileView;\n\n // Bing tile layer =============================================================\n var BingLayer = TileLayer.extend({\n init: function(map, options) {\n this.options.baseUrl =\n this._scheme() +\n \"://dev.virtualearth.net/REST/v1/Imagery/Metadata/\";\n\n TileLayer.fn.init.call(this, map, options);\n\n this._onMetadata = this._onMetadata.bind(this);\n this._fetchMetadata();\n },\n\n options: {\n imagerySet: \"road\"\n },\n\n _fetchMetadata: function() {\n var options = this.options;\n\n if (!options.key) {\n throw new Error(\"Bing tile layer: API key is required\");\n }\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\n _scheme: function(proto) {\n proto = proto || window.location.protocol;\n return proto.replace(\":\", \"\") === \"https\" ? \"https\" : \"http\";\n },\n\n _onMetadata: function(data) {\n if (data && data.resourceSets.length) {\n var resource = this.resource = data.resourceSets[0].resources[0];\n\n deepExtend(this._view.options, {\n urlTemplate: resource.imageUrl\n .replace(\"{subdomain}\", \"#= subdomain #\")\n .replace(\"{quadkey}\", \"#= quadkey #\")\n .replace(\"{culture}\", \"#= culture #\"),\n subdomains: resource.imageUrlSubdomains\n });\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\n this._addAttribution();\n\n if (this.element.css(\"display\") !== \"none\") {\n this._reset();\n }\n }\n },\n\n _viewType: function() {\n return BingView;\n },\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(\n new Location(area.bbox[2], area.bbox[1]),\n new Location(area.bbox[0], area.bbox[3])\n )\n });\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\n var BingView = TileView.extend({\n options: {\n culture: \"en-US\"\n },\n\n tileOptions: function(currentIndex) {\n var options = TileView.fn.tileOptions.call(this, currentIndex);\n\n options.culture = this.options.culture;\n options.quadkey = this.tileQuadKey(this.wrapIndex(currentIndex));\n\n return options;\n },\n\n tileQuadKey: function(index) {\n var quadKey = \"\",\n digit, mask, i;\n\n for (i = this._zoom; i > 0; i--) {\n digit = 0;\n mask = 1 << (i - 1);\n\n if ((index.x & mask) !== 0) {\n digit++;\n }\n\n if ((index.y & mask) !== 0) {\n digit += 2;\n }\n\n quadKey += digit;\n }\n\n return quadKey;\n }\n });\n\n // Exports ================================================================\n deepExtend(dataviz, {\n map: {\n layers: {\n bing: BingLayer,\n BingLayer: BingLayer,\n BingView: BingView\n }\n }\n });\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n // Imports ================================================================\n var doc = document,\n math = Math,\n indexOf = $.inArray,\n\n kendo = window.kendo,\n Class = kendo.Class,\n DataSource = kendo.data.DataSource,\n Tooltip = kendo.ui.Tooltip,\n\n dataviz = kendo.dataviz,\n deepExtend = kendo.deepExtend,\n\n map = dataviz.map,\n Location = map.Location,\n Layer = map.layers.Layer;\n\n // Implementation =========================================================\n var MarkerLayer = Layer.extend({\n init: function(map, options) {\n Layer.fn.init.call(this, map, options);\n\n this._markerClick = this._markerClick.bind(this);\n this.element.on(\"click\", \".k-marker\", this._markerClick);\n\n this.items = [];\n this._initDataSource();\n },\n\n destroy: function() {\n Layer.fn.destroy.call(this);\n\n this.element.off(\"click\", \".k-marker\", this._markerClick);\n\n this.dataSource.unbind(\"change\", this._dataChange);\n this.clear();\n },\n\n options: {\n zIndex: 1000,\n autoBind: true,\n dataSource: {},\n locationField: \"location\",\n titleField: \"title\"\n },\n\n add: function(arg) {\n if (Array.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\n remove: function(marker) {\n marker.destroy();\n\n var index = indexOf(marker, this.items);\n if (index > -1) {\n this.items.splice(index, 1);\n }\n },\n\n clear: function() {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].destroy();\n }\n\n this.items = [];\n },\n\n update: function(marker) {\n var loc = marker.location();\n if (loc) {\n marker.showAt(this.map.locationToView(loc));\n\n var args = { marker: marker, layer: this };\n this.map.trigger(\"markerActivate\", args);\n }\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\n bind: function(options, dataItem) {\n var marker = map.Marker.create(options, this.options);\n marker.dataItem = dataItem;\n\n var args = { marker: marker, layer: this };\n var cancelled = this.map.trigger(\"markerCreated\", args);\n if (!cancelled) {\n this.add(marker);\n return marker;\n }\n },\n\n setDataSource: function(dataSource) {\n if (this.dataSource) {\n this.dataSource.unbind(\"change\", this._dataChange);\n }\n\n this.dataSource = kendo.data.DataSource.create(dataSource);\n this.dataSource.bind(\"change\", this._dataChange);\n\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n\n _addOne: function(arg) {\n var marker = Marker.create(arg, this.options);\n marker.addTo(this);\n\n return marker;\n },\n\n _initDataSource: function() {\n var dsOptions = this.options.dataSource;\n this._dataChange = this._dataChange.bind(this);\n this.dataSource = DataSource\n .create(dsOptions)\n .bind(\"change\", this._dataChange);\n\n if (dsOptions && this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n\n _dataChange: function(e) {\n this._load(e.sender.view());\n },\n\n _load: function(data) {\n this._data = data;\n this.clear();\n\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\n _markerClick: function(e) {\n var args = { marker: $(e.target).data(\"kendoMarker\"), layer: this };\n this.map.trigger(\"markerClick\", args);\n }\n });\n\n var Marker = Class.extend({\n init: function(options) {\n this.options = options || {};\n },\n\n addTo: function(parent) {\n this.layer = parent.markers || parent;\n this.layer.items.push(this);\n this.layer.update(this);\n },\n\n location: function(value) {\n if (value) {\n this.options.location = Location.create(value).toArray();\n\n if (this.layer) {\n this.layer.update(this);\n }\n\n return this;\n } else {\n return Location.create(this.options.location);\n }\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\n if (this.tooltip && this.tooltip.popup) {\n // TODO: Expose popup/tooltip updatePosition? method\n this.tooltip.popup._position();\n }\n },\n\n hide: function() {\n if (this.element) {\n this.element.remove();\n this.element = null;\n }\n\n if (this.tooltip) {\n this.tooltip.destroy();\n this.tooltip = null;\n }\n },\n\n destroy: function() {\n this.layer = null;\n this.hide();\n },\n\n render: function() {\n if (!this.element) {\n var options = this.options;\n var layer = this.layer;\n\n this.element = $(doc.createElement(\"span\"))\n .addClass(\"k-marker k-icon k-i-marker-\" + kendo.toHyphens(options.shape || \"pin\"))\n .attr(\"title\", options.title)\n .attr(options.attributes || {})\n .data(\"kendoMarker\", this)\n .css(\"zIndex\", options.zIndex);\n\n if (layer) {\n layer.element.append(this.element);\n }\n\n this.renderTooltip();\n }\n },\n\n renderTooltip: function() {\n var marker = this;\n var title = marker.options.title;\n var options = marker.options.tooltip || {};\n\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\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\n Marker.create = function(arg, defaults) {\n if (arg instanceof Marker) {\n return arg;\n }\n\n return new Marker(deepExtend({}, defaults, arg));\n };\n\n // Exports ================================================================\n deepExtend(dataviz, {\n map: {\n layers: {\n marker: MarkerLayer,\n MarkerLayer: MarkerLayer\n },\n Marker: Marker\n }\n });\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n // Imports ================================================================\n var doc = document,\n math = Math,\n min = math.min,\n pow = math.pow,\n\n kendo = window.kendo,\n Widget = kendo.ui.Widget,\n deepExtend = kendo.deepExtend,\n\n dataviz = kendo.dataviz,\n ui = dataviz.ui,\n\n g = kendo.geometry,\n Point = g.Point,\n\n map = dataviz.map,\n Extent = map.Extent,\n Location = map.Location,\n EPSG3857 = map.crs.EPSG3857,\n\n util = kendo.util,\n renderPos = util.renderPos,\n\n drawingUtil = kendo.drawing.util,\n\n defined = drawingUtil.defined,\n limit = drawingUtil.limitValue,\n valueOrDefault = drawingUtil.valueOrDefault;\n\n // Constants ==============================================================\n var CSS_PREFIX = \"k-\",\n FRICTION = 0.90,\n FRICTION_MOBILE = 0.93,\n MOUSEWHEEL = \"DOMMouseScroll mousewheel\",\n VELOCITY_MULTIPLIER = 5,\n DEFAULT_ZOOM_RATE = 1;\n\n // Map widget =============================================================\n var Map = Widget.extend({\n init: function(element, options) {\n kendo.destroy(element);\n Widget.fn.init.call(this, element);\n\n this._initOptions(options);\n this.bind(this.events, options);\n\n this.crs = new EPSG3857();\n\n this.element\n .addClass(CSS_PREFIX + this.options.name.toLowerCase())\n .css(\"position\", \"relative\")\n .empty()\n .append(doc.createElement(\"div\"));\n\n this._viewOrigin = this._getOrigin();\n this._initScroller();\n this._initMarkers();\n this._initControls();\n this._initLayers();\n this._reset();\n\n this._mousewheel = this._mousewheel.bind(this);\n this.element.on(MOUSEWHEEL, this._mousewheel);\n },\n\n options: {\n name: \"Map\",\n controls: {\n attribution: true,\n navigator: {\n panStep: 100\n },\n zoom: true\n },\n layers: [],\n layerDefaults: {\n shape: {\n style: {\n fill: {\n color: \"#fff\"\n },\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: {\n position: \"top\"\n }\n }\n },\n center: [0, 0],\n zoom: 3,\n minSize: 256,\n minZoom: 1,\n maxZoom: 19,\n markers: [],\n markerDefaults: {\n shape: \"pinTarget\",\n tooltip: {\n position: \"top\"\n }\n },\n wraparound: true,\n messages: {\n tileTitle: \"Map tile\"\n }\n },\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\n destroy: function() {\n this.scroller.destroy();\n\n if (this.navigator) {\n this.navigator.destroy();\n }\n\n if (this.attribution) {\n this.attribution.destroy();\n }\n\n if (this.zoomControl) {\n this.zoomControl.destroy();\n }\n\n this.markers.destroy();\n\n for (var i = 0; i < this.layers.length; i++) {\n this.layers[i].destroy();\n }\n\n Widget.fn.destroy.call(this);\n },\n\n zoom: function(level) {\n var options = this.options;\n\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\n return this;\n } else {\n return options.zoom;\n }\n },\n\n center: function(center) {\n if (center) {\n this.options.center = Location.create(center).toArray();\n this._reset();\n\n return this;\n } else {\n return Location.create(this.options.center);\n }\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\n setOptions: function(options) {\n Widget.fn.setOptions.call(this, options);\n this._reset();\n },\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\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\n locationToView: function(location) {\n location = Location.create(location);\n var origin = this.locationToLayer(this._viewOrigin);\n var point = this.locationToLayer(location);\n\n return point.translateWith(origin.scale(-1));\n },\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\n eventOffset: function(e) {\n var point;\n var x;\n var y;\n var offset = this.element.offset();\n\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\n return point;\n },\n\n eventToView: function(e) {\n var cursor = this.eventOffset(e);\n return this.locationToView(this.viewToLocation(cursor));\n },\n\n eventToLayer: function(e) {\n return this.locationToLayer(this.eventToLocation(e));\n },\n\n eventToLocation: function(e) {\n var cursor = this.eventOffset(e);\n return this.viewToLocation(cursor);\n },\n\n viewSize: function() {\n var element = this.element;\n var scale = this._layerSize();\n var width = element.width();\n\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\n exportVisual: function() {\n this._reset();\n return false;\n },\n\n _setOrigin: function(origin, zoom) {\n var size = this.viewSize(),\n topLeft;\n\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\n this.options.center = this.layerToLocation(topLeft, zoom).toArray();\n\n return this;\n },\n\n _getOrigin: function(invalidate) {\n var size = this.viewSize(),\n topLeft;\n\n if (invalidate || !this._origin) {\n topLeft = this.locationToLayer(this.center());\n topLeft.x -= size.width / 2;\n topLeft.y -= size.height / 2;\n\n this._origin = this.layerToLocation(topLeft);\n }\n\n return this._origin;\n },\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\n extent = new Extent(raw.nw, se);\n this.center(extent.center());\n\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\n var layerWidth = math.abs(bottomRight.x - topLeft.x);\n var layerHeight = math.abs(bottomRight.y - topLeft.y);\n\n if (layerWidth <= width && layerHeight <= height) {\n break;\n }\n }\n\n this.zoom(zoom);\n },\n\n _getExtent: function() {\n var nw = this._getOrigin();\n var bottomRight = this.locationToLayer(nw);\n var size = this.viewSize();\n\n bottomRight.x += size.width;\n bottomRight.y += size.height;\n\n var se = this.layerToLocation(bottomRight);\n return new Extent(nw, se);\n },\n\n _zoomAround: function(pivot, level) {\n this._setOrigin(this.layerToLocation(pivot, level), level);\n this.zoom(level);\n },\n\n _initControls: function() {\n var controls = this.options.controls;\n\n if (ui.Attribution && controls.attribution) {\n this._createAttribution(controls.attribution);\n }\n\n if (!kendo.support.mobileOS) {\n if (ui.Navigator && controls.navigator) {\n this._createNavigator(controls.navigator);\n }\n\n if (ui.ZoomControl && controls.zoom) {\n this._createZoomControl(controls.zoom);\n }\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 = $(\"
    \")\n .addClass(\"k-map-controls \" + renderPos(pos))\n .appendTo(this.element);\n }\n\n return $(\"
    \").appendTo(wrap);\n },\n\n _createAttribution: function(options) {\n var element = this._createControlElement(options, \"bottomRight\");\n this.attribution = new ui.Attribution(element, options);\n },\n\n _createNavigator: function(options) {\n var element = this._createControlElement(options, \"topLeft\");\n var navigator = this.navigator = new ui.Navigator(element, options);\n\n this._navigatorPan = this._navigatorPan.bind(this);\n navigator.bind(\"pan\", this._navigatorPan);\n\n this._navigatorCenter = this._navigatorCenter.bind(this);\n navigator.bind(\"center\", this._navigatorCenter);\n },\n\n _navigatorPan: function(e) {\n var map = this;\n var scroller = map.scroller;\n\n var x = scroller.scrollLeft + e.x;\n var y = scroller.scrollTop - e.y;\n\n var bounds = this._virtualSize;\n var height = this.element.height();\n var width = this.element.width();\n\n // TODO: Move limits in scroller\n x = limit(x, bounds.x.min, bounds.x.max - width);\n y = limit(y, bounds.y.min, bounds.y.max - height);\n\n map.scroller.one(\"scroll\", function(e) { map._scrollEnd(e); });\n map.scroller.scrollTo(-x, -y);\n },\n\n _navigatorCenter: function() {\n this.center(this.options.center);\n },\n\n _createZoomControl: function(options) {\n var element = this._createControlElement(options, \"topLeft\");\n var zoomControl = this.zoomControl = new ui.ZoomControl(element, options);\n\n this._zoomControlChange = this._zoomControlChange.bind(this);\n zoomControl.bind(\"change\", this._zoomControlChange);\n },\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\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(\n this.element.children(0), {\n friction: friction,\n velocityMultiplier: VELOCITY_MULTIPLIER,\n zoom: zoomable,\n mousewheelScrolling: false,\n supportDoubleTap: true\n });\n\n scroller.bind(\"scroll\", this._scroll.bind(this));\n scroller.bind(\"scrollEnd\", this._scrollEnd.bind(this));\n scroller.userEvents.bind(\"gesturestart\", this._scaleStart.bind(this));\n scroller.userEvents.bind(\"gestureend\", this._scale.bind(this));\n scroller.userEvents.bind(\"doubleTap\", this._doubleTap.bind(this));\n scroller.userEvents.bind(\"tap\", this._tap.bind(this));\n\n this.scrollElement = scroller.scrollElement;\n },\n\n _initLayers: function() {\n var defs = this.options.layers,\n layers = this.layers = [];\n\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\n layers.push(new impl(this, deepExtend({}, defaults, options)));\n }\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\n _scroll: function(e) {\n var origin = this.locationToLayer(this._viewOrigin).round();\n var movable = e.sender.movable;\n\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\n this._scrollOffset = offset;\n\n this._setOrigin(this.layerToLocation(origin));\n this.trigger(\"pan\", {\n originalEvent: e,\n origin: this._getOrigin(),\n center: this.center()\n });\n },\n\n _scrollEnd: function(e) {\n if (!this._scrollOffset || !this._panComplete()) {\n return;\n }\n\n this._scrollOffset = null;\n this._panEndTS = new Date();\n\n this.trigger(\"panEnd\", {\n originalEvent: e,\n origin: this._getOrigin(),\n center: this.center()\n });\n },\n\n _panComplete: function() {\n return new Date() - (this._panEndTS || 0) > 50;\n },\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\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\n this._zoomAround(originPoint, zoom);\n this.trigger(\"zoomEnd\", { originalEvent: e });\n },\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\n return math.round(zoom);\n },\n\n _reset: function() {\n if (this.attribution) {\n this.attribution.filter(this.center(), this.zoom());\n }\n\n this._viewOrigin = this._getOrigin(true);\n this._resetScroller();\n this.trigger(\"beforeReset\");\n this.trigger(\"reset\", {\n tileTitle: this.options.messages.tileTitle\n });\n },\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\n scroller.movable.round = true;\n scroller.reset();\n scroller.userEvents.cancel();\n\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\n var xBounds = { min: -topLeft.x, max: scale - topLeft.x };\n var yBounds = { min: -topLeft.y, max: scale - topLeft.y };\n\n if (this.options.wraparound) {\n xBounds.max = 20 * scale;\n xBounds.min = -xBounds.max;\n }\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\n x.makeVirtual();\n y.makeVirtual();\n x.virtualSize(xBounds.min, xBounds.max);\n y.virtualSize(yBounds.min, yBounds.max);\n\n this._virtualSize = { x: xBounds, y: yBounds };\n },\n\n _renderLayers: function() {\n var defs = this.options.layers,\n layers = this.layers = [],\n scrollWrap = this.scrollWrap;\n\n scrollWrap.empty();\n\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\n layers.push(new impl(this, deepExtend({}, defaults, options)));\n }\n },\n\n _layerSize: function(zoom) {\n zoom = valueOrDefault(zoom, this.options.zoom);\n return this.options.minSize * pow(2, zoom);\n },\n\n _tap: function(e) {\n if (!this._panComplete()) {\n return;\n }\n\n var cursor = this.eventOffset(e);\n this.trigger(\"click\", {\n originalEvent: e,\n location: this.viewToLocation(cursor)\n });\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\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\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\n this.trigger(\"zoomEnd\", { originalEvent: e });\n }\n }\n }\n });\n\n // Exports ================================================================\n dataviz.ui.plugin(Map);\n\n })(window.kendo.jQuery);\n\n var __meta__$I = {\n id: \"dataviz.map\",\n name: \"Map\",\n category: \"dataviz\",\n description: \"The Kendo DataViz Map displays spatial data\",\n depends: [ \"data\", \"userevents\", \"tooltip\", \"dataviz.core\", \"drawing\", \"mobile.scroller\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n diagram = kendo.dataviz.diagram = {},\n deepExtend = kendo.deepExtend,\n isArray = Array.isArray,\n EPSILON = 1e-06;\n\n /*-------------------Diverse utilities----------------------------*/\n var Utils = {\n };\n\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\n isUndefined: function(obj) {\n return (typeof obj === 'undefined') || obj === null;\n },\n /**\n * Returns whether the given object is an object or a value.\n */\n isObject: function(obj) {\n return obj === Object(obj);\n },\n /**\n * Returns whether the object has a property with the given name.\n */\n has: function(obj, key) {\n return Object.hasOwnProperty.call(obj, key);\n },\n /**\n * Returns whether the given object is a string.\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 /**\n * Returns whether the given object is a number.\n */\n isNumber: function(obj) {\n return !isNaN(parseFloat(obj)) && isFinite(obj);\n },\n /**\n * Return whether the given object (array or dictionary).\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\n for (var name in source) {\n destination[name] = source[name];\n }\n },\n /**\n * Returns an array of the specified size and with each entry set to the given value.\n * @param size\n * @param value\n * @returns {Array}\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(\n parseInt(v[i], 10),\n parseInt(v[i + 1], 10)\n ));\n }\n return points;\n },\n /**\n * Returns an integer within the given bounds.\n * @param lower The inclusive lower bound.\n * @param upper The exclusive upper bound.\n * @returns {number}\n */\n randomInteger: function(lower, upper) {\n return parseInt(Math.floor(Math.random() * upper) + lower, 10);\n } ,\n /*\n Depth-first traversal of the given node.\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 /*\n Returns the angle in degrees for the given matrix\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\n /*\n Returns the scaling factors for the given matrix.\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 [sX, sY];\n }\n\n });\n\n /**\n * The Range defines an array of equally separated numbers.\n * @param start The start-value of the Range.\n * @param stop The end-value of the Range.\n * @param step The separation between the values (default:1).\n * @returns {Array}\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\n function rangeIntegerScale(x) {\n var k = 1;\n while (x * k % 1) {\n k *= 10;\n }\n return k;\n }\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 }\n else {\n while ((j = start + step * ++i) <= stop) {\n range.push(j / k);\n }\n }\n return range;\n }\n\n /*-------------------Diverse math functions----------------------------*/\n\n function findRadian(start, end) {\n if (start == end) {\n return 0;\n }\n var sngXComp = end.x - start.x,\n sngYComp = start.y - end.y,\n 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\n Utils.sign = function(number) {\n return number ? number < 0 ? -1 : 1 : 0;\n };\n\n Utils.findAngle = function(center, end) {\n return findRadian(center, end) * 180 / Math.PI;\n };\n\n /*-------------------Array Helpers ----------------------------*/\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\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\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\n Utils.contains = function(arr, obj) {\n return Utils.indexOf(arr, obj) !== -1;\n };\n\n Utils.indexOf = function(arr, what) {\n return $.inArray(what, arr);\n };\n\n Utils.fold = function(list, iterator, acc, context) {\n var initial = arguments.length > 2;\n\n for (var i = 0; i < list.length; i++) {\n var value = list[i];\n if (!initial) {\n acc = value;\n initial = true;\n }\n else {\n acc = iterator.call(context, acc, value, i, list);\n }\n }\n\n if (!initial) {\n throw 'Reduce of empty array with no initial value';\n }\n\n return acc;\n };\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\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\n return Utils.find(arr, constraint, context);\n };\n\n /**\n * Inserts the given element at the specified position and returns the result.\n */\n Utils.insert = function(arr, element, position) {\n arr.splice(position, 0, element);\n return arr;\n };\n\n Utils.all = function(arr, iterator, context) {\n var result = true;\n var value;\n\n for (var i = 0; i < arr.length; i++) {\n value = arr[i];\n result = result && iterator.call(context, value, i, arr);\n\n if (!result) {\n break;\n }\n }\n\n return result;\n };\n\n Utils.clear = function(arr) {\n arr.splice(0, arr.length);\n };\n\n /**\n * Sort the arrays on the basis of the first one (considered as keys and the other array as values).\n * @param a\n * @param b\n * @param sortfunc (optiona) sorting function for the values in the first array\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\n var all = [], i;\n\n for (i = 0; i < a.length; i++) {\n all.push({ 'x': a[i], 'y': b[i] });\n }\n if (Utils.isUndefined(sortfunc)) {\n all.sort(function(m, n) {\n return m.x - n.x;\n });\n }\n else {\n all.sort(function(m, n) {\n return sortfunc(m.x, n.x);\n });\n }\n\n Utils.clear(a);\n Utils.clear(b);\n\n for (i = 0; i < all.length; i++) {\n a.push(all[i].x);\n b.push(all[i].y);\n }\n };\n\n Utils.addRange = function(arr, range) {\n arr.push.apply(arr, range);\n };\n\n var Easing = {\n easeInOut: function(pos) {\n return ((-Math.cos(pos * Math.PI) / 2) + 0.5);\n }\n };\n\n /**\n * An animation ticker driving an adapter which sets a particular\n * property in function of the tick.\n * @type {*}\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\n //this.trigger.call(this);\n this.trigger();\n // this.next();\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\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\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\n kendo.deepExtend(diagram, {\n init: function(element) {\n kendo.init(element, diagram.ui);\n },\n\n Utils: Utils,\n Range: Range,\n Ticker: Ticker\n });\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n // Imports ================================================================\n var kendo = window.kendo,\n diagram = kendo.dataviz.diagram,\n Class = kendo.Class,\n deepExtend = kendo.deepExtend,\n dataviz = kendo.dataviz,\n Utils = diagram.Utils,\n Point = dataviz.Point2D,\n isFunction = kendo.isFunction,\n contains = Utils.contains,\n map = $.map;\n\n // Constants ==============================================================\n var HITTESTAREA = 3,\n EPSILON = 1e-06;\n\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 // note that the angle goes down and not the usual mathematical convention\n\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 }\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 }\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) { // from must be the leftmost point\n var temp = to;\n to = from;\n from = temp;\n }\n var r1 = new Rect(from.x, from.y).inflate(HITTESTAREA, HITTESTAREA),\n 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 }\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 }\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\n deepExtend(Point, {\n parse: function(str) {\n var tempStr = str.slice(1, str.length - 1),\n xy = tempStr.split(\",\"),\n x = parseInt(xy[0], 10),\n y = parseInt(xy[1], 10);\n if (!isNaN(x) && !isNaN(y)) {\n return new Point(x, y);\n }\n }\n });\n\n /**\n * Structure combining a Point with two additional points representing the handles or tangents attached to the first point.\n * If the additional points are null or equal to the first point the path will be sharp.\n * Left and right correspond to the direction of the underlying path.\n */\n var PathDefiner = Class.extend(\n {\n init: function(p, left, right) {\n this.point = p;\n this.left = left;\n this.right = right;\n }\n }\n );\n\n /**\n * Defines a rectangular region.\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$1) {\n dy = dx;\n }\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(),\n points = this.rotatedPoints(angle),\n tl = points[0],\n tr = points[1],\n br = points[2],\n bl = points[3];\n\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\n return rect;\n },\n rotatedPoints: function(angle) {\n var rect = this,\n c = rect.center(),\n br = rect.bottomRight().rotate(c, 360 - angle),\n tl = rect.topLeft().rotate(c, 360 - angle),\n tr = rect.topRight().rotate(c, 360 - angle),\n bl = rect.bottomLeft().rotate(c, 360 - angle);\n\n return [tl, tr, br, bl];\n },\n toString: function(delimiter) {\n delimiter = delimiter || \" \";\n\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\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\n this.x = tl.x;\n this.y = tl.y;\n\n this.width *= scaleX;\n this.height *= scaleY;\n },\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\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 ||\n rectBottomRight.x < this.x || rectBottomRight.y < this.y);\n return overlaps;\n }\n });\n\n var Size = Class.extend({\n init: function(width, height) {\n this.width = width;\n this.height = height;\n }\n });\n\n Size.prototype.Empty = new Size(0, 0);\n\n Rect.toRect = function(rect) {\n if (!(rect instanceof Rect)) {\n rect = new Rect(rect.x, rect.y, rect.width, rect.height);\n }\n\n return rect;\n };\n\n Rect.empty = function() {\n return new Rect(0, 0, 0, 0);\n };\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\n function isNearZero(num) {\n return Math.abs(num) < EPSILON;\n }\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 //parallel lines\n return;\n }\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\n if (isSegment && (r < 0 || r > 1 || s < 0 || s > 1)) {\n //r < 0 => line 1 is below line 2\n //r > 1 => line 1 is above line 2\n //s < 0 => line 2 is below line 1\n //s > 1 => line 2 is above line 1\n return;\n }\n\n return new Point(start1.x + (r * (end1.x - start1.x)), start1.y + (r * (end1.y - start1.y)));\n }\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()) ||\n Intersect.segments(start, end, rect.topRight(), rect.bottomRight()) ||\n Intersect.segments(start, end, rect.bottomLeft(), rect.bottomRight()) ||\n Intersect.segments(start, end, rect.topLeft(), rect.bottomLeft());\n },\n rects: function(rect1, rect2, angle) {\n var tl = rect2.topLeft(),\n tr = rect2.topRight(),\n bl = rect2.bottomLeft(),\n 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\n var intersect = rect1.contains(tl) ||\n rect1.contains(tr) ||\n rect1.contains(bl) ||\n rect1.contains(br) ||\n Intersect.rectWithLine(rect1, tl, tr) ||\n Intersect.rectWithLine(rect1, tl, bl) ||\n Intersect.rectWithLine(rect1, tr, br) ||\n Intersect.rectWithLine(rect1, bl, br);\n\n if (!intersect) {//last possible case is rect1 to be completely within rect2\n tl = rect1.topLeft();\n tr = rect1.topRight();\n bl = rect1.bottomLeft();\n br = rect1.bottomRight();\n\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\n intersect = rect2.contains(tl) ||\n rect2.contains(tr) ||\n rect2.contains(bl) ||\n rect2.contains(br);\n }\n\n return intersect;\n }\n };\n\n /**\n * Aligns two rectangles, where one is the container and the other is content.\n */\n var RectAlign = Class.extend({\n init: function(container) {\n this.container = Rect.toRect(container);\n },\n\n align: function(content, alignment) {\n var alignValues = alignment.toLowerCase().split(\" \");\n\n for (var i = 0; i < alignValues.length; i++) {\n content = this._singleAlign(content, alignValues[i]);\n }\n\n return content;\n },\n _singleAlign: function(content, alignment) {\n if (isFunction(this[alignment])) {\n return this[alignment](content);\n }\n else {\n return content;\n }\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\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\n return content;\n }\n });\n\n var Polar = Class.extend({\n init: function(r, a) {\n this.r = r;\n this.angle = a;\n }\n });\n\n /**\n * SVG transformation matrix.\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(\n this.a * m.a + this.c * m.b,\n this.b * m.a + this.d * m.b,\n this.a * m.c + this.c * m.d,\n this.b * m.c + this.d * m.d,\n this.a * m.e + this.c * m.f + this.e,\n this.b * m.e + this.d * m.f + this.f\n );\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\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 // of the form \"matrix(...)\"\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 // of the form \"(...)\"\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\n /**\n * SVG transformation represented as a vector.\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\n /**\n * Returns a value with Gaussian (normal) distribution.\n * @param mean The mean value of the distribution.\n * @param deviation The deviation (spreading at half-height) of the distribution.\n * @returns {number}\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 }\n while (!r || r > 1);\n return mean + deviation * x * Math.sqrt(-2 * Math.log(r) / r);\n }\n\n /**\n * Returns a random identifier which can be used as an ID of objects, eventually augmented with a prefix.\n * @returns {string}\n */\n function randomId(length) {\n if (Utils.isUndefined(length)) {\n length = 10;\n }\n // old version return Math.floor((1 + Math.random()) * 0x1000000).toString(16).substring(1);\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\n var Geometry = {\n\n /**\n * Returns the squared distance to the line defined by the two given Points.\n * @param p An arbitrary Point.\n * @param a An endpoint of the line or segment.\n * @param b The complementary endpoint of the line or segment.\n */\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\n if (a === b) { // returns the distance of p to a\n return d2(p, a);\n }\n\n var vx = b.x - a.x,\n vy = b.y - a.y,\n dot = (p.x - a.x) * vx + (p.y - a.y) * vy;\n if (dot < 0) {\n return d2(a, p); // sits on side of a\n }\n\n dot = (b.x - p.x) * vx + (b.y - p.y) * vy;\n if (dot < 0) {\n return d2(b, p); // sits on side of b\n }\n // regular case, use crossproduct to get the sine out\n dot = (b.x - p.x) * vy - (b.y - p.y) * vx;\n return dot * dot / (vx * vx + vy * vy);\n },\n\n /**\n * Returns the distance to the line defined by the two given Points.\n * @param p An arbitrary Point.\n * @param a An endpoint of the line or segment.\n * @param b The complementary endpoint of the line or segment.\n */\n distanceToLine: function(p, a, b) {\n return Math.sqrt(this._distanceToLineSquared(p, a, b));\n },\n\n /**\n * Returns the distance of the given points to the polyline defined by the points.\n * @param p An arbitrary point.\n * @param points The points defining the polyline.\n * @returns {Number}\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\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\n /*---------------The HashTable structure--------------------------------*/\n\n /**\n * Represents a collection of key-value pairs that are organized based on the hash code of the key.\n * _buckets[hashId] = {key: key, value:...}\n * Important: do not use the standard Array access method, use the get/set methods instead.\n * See http://en.wikipedia.org/wiki/Hash_table\n */\n var HashTable = kendo.Class.extend({\n init: function() {\n this._buckets = [];\n this.length = 0;\n },\n\n /**\n * Adds the literal object with the given key (of the form {key: key,....}).\n */\n add: function(key, value) {\n\n var obj = this._createGetBucket(key);\n if (Utils.isDefined(value)) {\n obj.value = value;\n }\n return obj;\n },\n\n /**\n * Gets the literal object with the given key.\n */\n get: function(key) {\n if (this._bucketExists(key)) {\n return this._createGetBucket(key);\n }\n return null;\n },\n\n /**\n * Set the key-value pair.\n * @param key The key of the entry.\n * @param value The value to set. If the key already exists the value will be overwritten.\n */\n set: function(key, value) {\n this.add(key, value);\n },\n\n /**\n * Determines whether the HashTable contains a specific key.\n */\n containsKey: function(key) {\n return this._bucketExists(key);\n },\n\n /**\n * Removes the element with the specified key from the hashtable.\n * Returns the removed bucket.\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\n /**\n * Foreach with an iterator working on the key-value pairs.\n * @param func\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\n /**\n * Returns a (shallow) clone of the current HashTable.\n * @returns {HashTable}\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\n /**\n * Returns the hashes of the buckets.\n * @returns {Array}\n * @private\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\n _bucketExists: function(key) {\n var hashId = this._hash(key);\n return Utils.isDefined(this._buckets[hashId]);\n },\n\n /**\n * Returns-adds the createGetBucket with the given key. If not present it will\n * be created and returned.\n * A createGetBucket is a literal object of the form {key: key, ...}.\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\n /**\n * Hashing of the given key.\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\n /**\n * Hashing of a string.\n */\n _hashString: function(s) {\n // see for example http://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript-jquery\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\n /**\n * Returns the unique identifier for an object. This is automatically assigned and add on the object.\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\n /*---------------The Dictionary structure--------------------------------*/\n\n /**\n * Represents a collection of key-value pairs.\n * Important: do not use the standard Array access method, use the get/Set methods instead.\n */\n var Dictionary = kendo.Observable.extend({\n /**\n * Initializes a new instance of the Dictionary class.\n * @param dictionary Loads the content of the given dictionary into this new one.\n */\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 (Array.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\n /**\n * Adds a key-value to the dictionary.\n * If the key already exists this will assign the given value to the existing entry.\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\n /**\n * Set the key-value pair.\n * @param key The key of the entry.\n * @param value The value to set. If the key already exists the value will be overwritten.\n */\n set: function(key, value) {\n this.add(key, value);\n },\n\n /**\n * Gets the value associated with the given key in the dictionary.\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\n /**\n * Returns whether the dictionary contains the given key.\n */\n containsKey: function(key) {\n return this._hashTable.containsKey(key);\n },\n\n /**\n * Removes the element with the specified key from the dictionary.\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\n /**\n * The functional gets the key and value as parameters.\n */\n forEach: function(func, thisRef) {\n this._hashTable.forEach(function(entry) {\n func.call(thisRef, entry.key, entry.value);\n });\n },\n\n /**\n * Same as forEach except that only the value is passed to the functional.\n */\n forEachValue: function(func, thisRef) {\n this._hashTable.forEach(function(entry) {\n func.call(thisRef, entry.value);\n });\n },\n\n /**\n * Calls a defined callback function for each key in the dictionary.\n */\n forEachKey: function(func, thisRef) {\n this._hashTable.forEach(function(entry) {\n func.call(thisRef, entry.key);\n });\n },\n\n /**\n * Gets an array with all keys in the dictionary.\n */\n keys: function() {\n var keys = [];\n this.forEachKey(function(key) {\n keys.push(key);\n });\n return keys;\n }\n });\n\n /*---------------Queue structure--------------------------------*/\n\n var Queue = kendo.Class.extend({\n\n init: function() {\n this._tail = null;\n this._head = null;\n this.length = 0;\n },\n\n /**\n * Enqueues an object to the end of the queue.\n */\n enqueue: function(value) {\n var entry = { value: value, next: null };\n if (!this._head) {\n this._head = entry;\n this._tail = this._head;\n }\n else {\n this._tail.next = entry;\n this._tail = this._tail.next;\n }\n this.length++;\n },\n\n /**\n * Removes and returns the object at top of the queue.\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\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\n\n /**\n * While other data structures can have multiple times the same item a Set owns only\n * once a particular item.\n * @type {*}\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 }\n else if (resource instanceof Dictionary) {\n resource.forEach(function(k, v) {\n this.add({ key: k, value: v });\n }, this);\n }\n }\n },\n\n contains: function(item) {\n return this._hashTable.containsKey(item);\n },\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\n get: function(item) {\n if (this.contains(item)) {\n return this._hashTable.get(item).value;\n }\n else {\n return null;\n }\n },\n\n /**\n * Returns the hash of the item.\n * @param item\n * @returns {*}\n */\n hash: function(item) {\n return this._hashTable._hash(item);\n },\n\n /**\n * Removes the given item from the set. No exception is thrown if the item is not in the Set.\n * @param 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 /**\n * Foreach with an iterator working on the key-value pairs.\n * @param func\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\n /*----------------Node-------------------------------*/\n\n /**\n * Defines the node (vertex) of a Graph.\n */\n var Node = kendo.Class.extend({\n\n init: function(id, shape) {\n\n /**\n * Holds all the links incident with the current node.\n * Do not use this property to manage the incoming links, use the appropriate add/remove methods instead.\n */\n this.links = [];\n\n /**\n * Holds the links from the current one to another Node .\n * Do not use this property to manage the incoming links, use the appropriate add/remove methods instead.\n */\n this.outgoing = [];\n\n /**\n * Holds the links from another Node to the current one.\n * Do not use this property to manage the incoming links, use the appropriate add/remove methods instead.\n */\n this.incoming = [];\n\n /**\n * Holds the weight of this Node.\n */\n this.weight = 1;\n\n if (Utils.isDefined(id)) {\n this.id = id;\n }\n else {\n this.id = randomId();\n }\n if (Utils.isDefined(shape)) {\n this.associatedShape = shape;\n // transfer the shape's bounds to the runtime props\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 }\n else {\n this.associatedShape = null;\n }\n /**\n * The payload of the node.\n * @type {null}\n */\n this.data = null;\n this.type = \"Node\";\n this.shortForm = \"Node '\" + this.id + \"'\";\n /**\n * Whether this is an injected node during the analysis or layout process.\n * @type {boolean}\n */\n this.isVirtual = false;\n },\n\n /**\n * Returns whether this node has no links attached.\n */\n isIsolated: function() {\n return Utils.isEmpty(this.links);\n },\n\n /**\n * Gets or sets the bounding rectangle of this node.\n * This should be considered as runtime data, the property is not hotlinked to a SVG item.\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\n this.x = r.x;\n this.y = r.y;\n this.width = r.width;\n this.height = r.height;\n },\n\n /**\n * Returns whether there is at least one link with the given (complementary) node. This can be either an\n * incoming or outgoing link.\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\n /**\n * Gets the children of this node, defined as the adjacent nodes with a link from this node to the adjacent one.\n * @returns {Array}\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\n /**\n * Gets the parents of this node, defined as the adjacent nodes with a link from the adjacent node to this one.\n * @returns {Array}\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\n /**\n * Returns a clone of the Node. Note that the identifier is not cloned since it's a different Node instance.\n * @returns {Node}\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\n /**\n * Returns whether there is a link from the current node to the given node.\n */\n adjacentTo: function(node) {\n return this.isLinkedTo(node) !== null;\n },\n\n /**\n * Removes the given link from the link collection this node owns.\n * @param link\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\n if (link.target === this) {\n Utils.remove(this.links, link);\n Utils.remove(this.incoming, link);\n link.target = null;\n }\n },\n\n /**\n * Returns whether there is a (outgoing) link from the current node to the given one.\n */\n hasLinkTo: function(node) {\n return Utils.any(this.outgoing, function(link) {\n return link.target === node;\n });\n },\n\n /**\n * Returns the degree of this node, i.e. the sum of incoming and outgoing links.\n */\n degree: function() {\n return this.links.length;\n },\n\n /**\n * Returns whether this node is either the source or the target of the given link.\n */\n incidentWith: function(link) {\n return contains(this.links, link);\n },\n\n /**\n * Returns the links between this node and the given one.\n */\n getLinksWith: function(node) {\n return Utils.all(this.links, function(link) {\n return link.getComplement(this) === node;\n }, this);\n },\n\n /**\n * Returns the nodes (either parent or child) which are linked to the current one.\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\n /**\n * Defines a directed link (edge, connection) of a Graph.\n */\n var Link = kendo.Class.extend({\n\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 }\n else {\n sourceFound = source;\n }\n if (Utils.isString(target)) {\n targetFound = new Node(target);\n }\n else {\n targetFound = target;\n }\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 }\n else {\n this.id = randomId();\n }\n if (Utils.isDefined(connection)) {\n this.associatedConnection = connection;\n }\n else {\n this.associatedConnection = null;\n }\n this.type = \"Link\";\n this.shortForm = \"Link '\" + this.source.id + \"->\" + this.target.id + \"'\";\n },\n\n /**\n * Returns the complementary node of the given one, if any.\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\n /**\n * Returns the overlap of the current link with the given one, if any.\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\n /**\n * Returns whether the current link is bridging the given nodes.\n */\n isBridging: function(v1, v2) {\n return this.source === v1 && this.target === v2 || this.source === v2 && this.target === v1;\n },\n\n /**\n * Returns the source and target of this link as a tuple.\n */\n getNodes: function() {\n return [this.source, this.target];\n },\n\n /**\n * Returns whether the given node is either the source or the target of the current link.\n */\n incidentWith: function(node) {\n return this.source === node || this.target === node;\n },\n\n /**\n * Returns whether the given link is a continuation of the current one. This can be both\n * via an incoming or outgoing link.\n */\n adjacentTo: function(link) {\n return contains(this.source.links, link) || contains(this.target.links, link);\n },\n\n /**\n * Changes the source-node of this link.\n */\n changeSource: function(node) {\n Utils.remove(this.source.links, this);\n Utils.remove(this.source.outgoing, this);\n\n node.links.push(this);\n node.outgoing.push(this);\n\n this.source = node;\n },\n\n /**\n * Changes the target-node of this link.\n * @param node\n */\n changeTarget: function(node) {\n Utils.remove(this.target.links, this);\n Utils.remove(this.target.incoming, this);\n\n node.links.push(this);\n node.incoming.push(this);\n\n this.target = node;\n },\n\n /**\n * Changes both the source and the target nodes of this link.\n */\n changesNodes: function(v, w) {\n if (this.source === v) {\n this.changeSource(w);\n }\n else if (this.target === v) {\n this.changeTarget(w);\n }\n },\n\n /**\n * Reverses the direction of this link.\n */\n reverse: function() {\n var oldSource = this.source;\n var oldTarget = this.target;\n\n this.source = oldTarget;\n Utils.remove(oldSource.outgoing, this);\n this.source.outgoing.push(this);\n\n this.target = oldSource;\n Utils.remove(oldTarget.incoming, this);\n this.target.incoming.push(this);\n return this;\n },\n\n /**\n * Ensures that the given target defines the endpoint of this link.\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\n /**\n * Returns a reversed clone of this link.\n */\n createReverseEdge: function() {\n var r = this.clone();\n r.reverse();\n r.reversed = true;\n return r;\n },\n\n /**\n * Returns a clone of this link.\n */\n clone: function() {\n var clone = new Link(this.source, this.target);\n return clone;\n }\n });\n\n /*--------------Graph structure---------------------------------*/\n /**\n * Defines a directed graph structure.\n * Note that the incidence structure resides in the nodes through the incoming and outgoing links collection, rahter than\n * inside the Graph.\n */\n var Graph = kendo.Class.extend({\n init: function(idOrDiagram) {\n /**\n * The links or edge collection of this Graph.\n * @type {Array}\n */\n this.links = [];\n /**\n * The node or vertex collection of this Graph.\n * @type {Array}\n */\n this.nodes = [];\n\n this._nodeMap = new Dictionary();\n /**\n * The optional reference to the Diagram on which this Graph is based.\n * @type {null}\n */\n this.diagram = null;\n\n /**\n * The root of this Graph. If not set explicitly the first Node with zero incoming links will be taken.\n * @type {null}\n * @private\n */\n this._root = null;\n if (Utils.isDefined(idOrDiagram)) {\n if (Utils.isString(idOrDiagram)) {\n this.id = idOrDiagram;\n }\n else {\n this.diagram = idOrDiagram;\n this.id = idOrDiagram.id;\n }\n }\n else {\n this.id = randomId();\n }\n\n /**\n * The bounds of this graph if the nodes have spatial extension defined.\n * @type {Rect}\n */\n this.bounds = new Rect();\n // keeps track whether the children & parents have been created\n this._hasCachedRelationships = false;\n this.type = \"Graph\";\n },\n /**\n * Caches the relational information of parents and children in the 'parents' and 'children'\n * properties.\n * @param forceRebuild If set to true the relational info will be rebuild even if already present.\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\n /**\n * Assigns tree-levels to the nodes assuming this is a tree graph.\n * If not connected or not a tree the process will succeed but\n * will have little meaning.\n * @param startNode The node from where the level numbering starts, usually the root of the tree.\n * @param visited The collection of visited nodes.\n * @param offset The offset or starting counter of the level info.\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 // if not done before, cache the parents and children\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\n /**\n * Gets or set the root of this graph.\n * If not set explicitly the first Node with zero incoming links will be taken.\n * @param value\n * @returns {*}\n */\n root: function(value) {\n if (Utils.isUndefined(value)) {\n if (!this._root) {\n // TODO: better to use the longest path for the most probable 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 }\n else {\n return this._root;\n }\n }\n else {\n this._root = value;\n }\n },\n\n /**\n * Returns the connected components of this graph.\n * Note that the returned graphs are made up of the nodes and links of this graph, i.e. a pointer to the items of this graph.\n * If you alter the items of the components you'll alter the original graph and vice versa.\n * @returns {Array}\n */\n getConnectedComponents: function() {\n this.componentIndex = 0;\n this.setItemIndices();\n var componentId = Utils.initArray(this.nodes.length, -1);\n\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\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 // sorting the components in decreasing order of node count\n components.sort(function(a, b) {\n return b.nodes.length - a.nodes.length;\n });\n return components;\n },\n\n _collectConnectedNodes: function(setIds, nodeIndex) {\n setIds[nodeIndex] = this.componentIndex; // part of the current component\n var node = this.nodes[nodeIndex];\n Utils.forEach(node.links,\n 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\n /**\n * Calculates the bounds of this Graph if the Nodes have spatial dimensions defined.\n * @returns {Rect}\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 }\n else {\n b = b.union(node.bounds());\n }\n }\n this.bounds = b;\n return this.bounds;\n },\n\n /**\n * Creates a spanning tree for the current graph.\n * Important: this will not return a spanning forest if the graph is disconnected.\n * Prim's algorithm finds a minimum-cost spanning tree of an edge-weighted, connected, undirected graph;\n * see http://en.wikipedia.org/wiki/Prim%27s_algorithm .\n * @param root The root of the spanning tree.\n * @returns {Graph}\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\n var visited = [];\n var remaining = [];\n tree._addNode(tree.root);\n visited.push(root);\n remaining.push(root);\n\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\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 }\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 }\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 }\n\n var treeLevels = [];\n for (var i = 0; i < levelCount; i++) {\n treeLevels.push([]);\n }\n\n Utils.forEach(tree.nodes, function(node) {\n treeLevels[node.level].push(node);\n });\n\n tree.treeLevels = treeLevels;\n tree.cacheRelationships();\n return tree;\n },\n\n /**\n * Returns a random node in this graph.\n * @param excludedNodes The collection of nodes which should not be considered.\n * @param incidenceLessThan The maximum degree or incidence the random node should have.\n * @returns {*}\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\n /**\n * Returns whether this is an empty graph.\n */\n isEmpty: function() {\n return Utils.isEmpty(this.nodes);\n },\n\n /**\n * Checks whether the endpoints of the links are all in the nodes collection.\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\n /**\n * Gets the parents of this node, defined as the adjacent nodes with a link from the adjacent node to this one.\n * @returns {Array}\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\n /**\n * Gets the children of this node, defined as the adjacent nodes with a link from this node to the adjacent one.\n * @returns {Array}\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\n /**\n * Adds a new link to the graph between the given nodes.\n */\n addLink: function(sourceOrLink, target, owner) {\n\n if (Utils.isUndefined(sourceOrLink)) {\n throw \"The source of the link is not defined.\";\n }\n if (Utils.isUndefined(target)) {\n // can only be undefined if the first one is a Link\n if (Utils.isDefined(sourceOrLink.type) && sourceOrLink.type === \"Link\") {\n this.addExistingLink(sourceOrLink);\n return;\n }\n else {\n throw \"The target of the link is not defined.\";\n }\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\n var newLink = new Link(foundSource, foundTarget);\n\n if (Utils.isDefined(owner)) {\n newLink.owner = owner;\n }\n\n /*newLink.source.outgoing.push(newLink);\n newLink.source.links.push(newLink);\n newLink.target.incoming.push(newLink);\n newLink.target.links.push(newLink);*/\n\n this.links.push(newLink);\n\n return newLink;\n },\n\n /**\n * Removes all the links in this graph.\n */\n removeAllLinks: function() {\n while (this.links.length > 0) {\n var link = this.links[0];\n this.removeLink(link);\n }\n },\n\n /**\n * Adds the given link to the current graph.\n */\n addExistingLink: function(link) {\n\n if (this.hasLink(link)) {\n return;\n }\n this.links.push(link);\n if (this.hasNode(link.source.id)) {\n // priority to the existing node with the id even if other props are different\n var s = this.getNode(link.source.id);\n link.changeSource(s);\n }\n else {\n this.addNode(link.source);\n }\n\n if (this.hasNode(link.target.id)) {\n var t = this.getNode(link.target.id);\n link.changeTarget(t);\n }\n else {\n this.addNode(link.target);\n }\n\n /* if (!link.source.outgoing.contains(link)) {\n link.source.outgoing.push(link);\n }\n if (!link.source.links.contains(link)) {\n link.source.links.push(link);\n }\n if (!link.target.incoming.contains(link)) {\n link.target.incoming.push(link);\n }\n if (!link.target.links.contains(link)) {\n link.target.links.push(link);\n }*/\n },\n\n /**\n * Returns whether the given identifier or Link is part of this graph.\n * @param linkOrId An identifier or a Link object.\n * @returns {*}\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 /**\n * Gets the node with the specified Id or null if not part of this graph.\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\n /**\n * Returns whether the given node or node Id is part of this graph.\n */\n hasNode: function(nodeOrId) {\n var id = nodeOrId.id || nodeOrId;\n return this._nodeMap.containsKey(id);\n },\n\n _addNode: function(node) {\n this.nodes.push(node);\n this._nodeMap.add(node.id, node);\n },\n\n _removeNode: function(node) {\n Utils.remove(this.nodes, node);\n this._nodeMap.remove(node.id);\n },\n\n /**\n * Removes the given node from this graph.\n * The node can be specified as an object or as an identifier (string).\n */\n removeNode: function(nodeOrId) {\n var n = nodeOrId;\n if (Utils.isString(nodeOrId)) {\n n = this.getNode(nodeOrId);\n }\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 }\n else {\n throw \"The identifier should be a Node or the Id (string) of a node.\";\n }\n },\n\n /**\n * Returns whether the given nodes are connected with a least one link independently of the direction.\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\n /**\n * Removes the given link from this graph.\n */\n removeLink: function(link) {\n /* if (!this.links.contains(link)) {\n throw \"The given link is not part of the Graph.\";\n }\n */\n Utils.remove(this.links, link);\n\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\n /**\n * Adds a new node to this graph, if not already present.\n * The node can be an existing Node or the identifier of a new node.\n * No error is thrown if the node is already there and the existing one is returned.\n */\n addNode: function(nodeOrId, layoutRect, owner) {\n\n var newNode = null;\n\n if (!Utils.isDefined(nodeOrId)) {\n throw \"No Node or identifier for a new Node is given.\";\n }\n\n if (Utils.isString(nodeOrId)) {\n if (this.hasNode(nodeOrId)) {\n return this.getNode(nodeOrId);\n }\n newNode = new Node(nodeOrId);\n }\n else {\n if (this.hasNode(nodeOrId)) {\n return this.getNode(nodeOrId);\n }\n // todo: ensure that the param is a Node?\n newNode = nodeOrId;\n }\n\n if (Utils.isDefined(layoutRect)) {\n newNode.bounds(layoutRect);\n }\n\n if (Utils.isDefined(owner)) {\n newNode.owner = owner;\n }\n this._addNode(newNode);\n return newNode;\n },\n\n /**\n * Adds the given Node and its outgoing links.\n */\n addNodeAndOutgoings: function(node) {\n if (!this.hasNode(node)) {\n this._addNode(node);\n }\n\n var newLinks = node.outgoing;\n node.outgoing = [];\n Utils.forEach(newLinks, function(link) {\n this.addExistingLink(link);\n }, this);\n },\n\n /**\n * Sets the 'index' property on the links and nodes of this graph.\n */\n setItemIndices: function() {\n var i;\n for (i = 0; i < this.nodes.length; ++i) {\n this.nodes[i].index = i;\n }\n\n for (i = 0; i < this.links.length; ++i) {\n this.links[i].index = i;\n }\n },\n\n /**\n * Returns a clone of this graph.\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 // we need a map even if the saveMapping is not set\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\n if (save) {\n copy.nodeMap.set(nCopy, nOriginal);\n }\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\n return copy;\n },\n\n /**\n * The parsing allows a quick way to create graphs.\n * - [\"n1->n2\", \"n2->n3\"]: creates the three nodes and adds the links\n * - [\"n1->n2\", {id: \"QSDF\"}, \"n2->n3\"]: same as previous but also performs a deep extend of the link between n1 and n2 with the given object.\n */\n linearize: function(addIds) {\n return Graph.Utils.linearize(this, addIds);\n },\n\n /**\n * Performs a depth-first traversal starting at the given node.\n * @param startNode a node or id of a node in this graph\n * @param action\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);// case the given one is an Id\n var visited = [];\n this._dftIterator(foundNode, action, visited);\n },\n\n _dftIterator: function(node, action, visited) {\n\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\n /**\n * Performs a breadth-first traversal starting at the given node.\n * @param startNode a node or id of a node in this graph\n * @param action\n */\n breadthFirstTraversal: function(startNode, action) {\n\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\n if (!this.hasNode(startNode)) {\n throw \"The given start-node is not part of this graph\";\n }\n var foundNode = this.getNode(startNode);// case the given one is an Id\n var queue = new Queue();\n var visited = [];\n queue.enqueue(foundNode);\n\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\n /**\n * This is the classic Tarjan algorithm for strongly connected components.\n * See e.g. http://en.wikipedia.org/wiki/Tarjan's_strongly_connected_components_algorithm\n * @param excludeSingleItems Whether isolated nodes should be excluded from the analysis.\n * @param node The start node from which the analysis starts.\n * @param indices Numbers the nodes consecutively in the order in which they are discovered.\n * @param lowLinks The smallest index of any node known to be reachable from the node, including the node itself\n * @param connected The current component.\n * @param stack The bookkeeping stack of things to visit.\n * @param index The counter of visited nodes used to assign the indices.\n * @private\n */\n _stronglyConnectedComponents: function(excludeSingleItems, node, indices, lowLinks, connected, stack, index) {\n indices.add(node, index);\n lowLinks.add(node, index);\n index++;\n\n stack.push(node);\n\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 }\n else if (contains(stack, next)) {\n lowLinks.add(node, Math.min(lowLinks.get(node), indices.get(next)));\n }\n }\n // If v is a root node, pop the stack and generate a strong component\n if (lowLinks.get(node) === indices.get(node)) {\n var component = [];\n do {\n next = stack.pop();\n component.push(next);\n }\n while (next !== node);\n if (!excludeSingleItems || (component.length > 1)) {\n connected.push(component);\n }\n }\n },\n\n /**\n * Returns the cycles found in this graph.\n * The returned arrays consist of the nodes which are strongly coupled.\n * @param excludeSingleItems Whether isolated nodes should be excluded.\n * @returns {Array} The array of cycles found.\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\n /**\n * Returns whether this graph is acyclic.\n * @returns {*}\n */\n isAcyclic: function() {\n return Utils.isEmpty(this.findCycles());\n },\n\n /**\n * Returns whether the given graph is a subgraph of this one.\n * @param other Another graph instance.\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\n /**\n * Makes an acyclic graph from the current (connected) one.\n * * @returns {Array} The reversed links.\n */\n makeAcyclic: function() {\n // if empty or almost empty\n if (this.isEmpty() || this.nodes.length <= 1 || this.links.length <= 1) {\n return [];\n }\n // singular case of just two nodes\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\n var copy = this.clone(true); // copy.nodeMap tells you the mapping\n var N = this.nodes.length;\n\n var intensityCatalog = new Dictionary();\n\n /**\n * If there are both incoming and outgoing links this will return the flow intensity (out-in).\n * Otherwise the node acts as a flow source with N specifying the (equal) intensity.\n * @param node\n * @returns {number}\n */\n var flowIntensity = function(node) {\n if (node.outgoing.length === 0) {\n return (2 - N);\n }\n else if (node.incoming.length === 0) {\n return (N - 2);\n }\n else {\n return node.outgoing.length - node.incoming.length;\n }\n };\n\n /**\n * Collects the nodes with the same intensity.\n * @param node\n * @param intensityCatalog\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\n Utils.forEach(copy.nodes, function(v) {\n catalogEqualIntensity(v, intensityCatalog);\n });\n\n var sourceStack = [];\n var targetStack = [];\n\n while (copy.nodes.length > 0) {\n var source, target, intensity;\n if (intensityCatalog.containsKey(2 - N)) {\n var targets = intensityCatalog.get(2 - N); // nodes without outgoings\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\n // move sources to sourceStack\n if (intensityCatalog.containsKey(N - 2)) {\n var sources = intensityCatalog.get(N - 2); // nodes without incomings\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\n if (copy.nodes.length > 0) {\n for (var k = N - 3; k > 2 - N; k--) {\n if (intensityCatalog.containsKey(k) &&\n 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\n sourceStack = sourceStack.concat(targetStack);\n\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\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\n /**\n * A collection of predefined graphs for demo and testing purposes.\n */\n Graph.Predefined = {\n /**\n * Eight-shapes graph all connected in a cycle.\n * @returns {*}\n * @constructor\n */\n EightGraph: function() {\n return Graph.Utils.parse([ \"1->2\", \"2->3\", \"3->4\", \"4->1\", \"3->5\", \"5->6\", \"6->7\", \"7->3\"]);\n },\n\n /**\n * Creates a typical mindmap diagram.\n * @returns {*}\n * @constructor\n */\n Mindmap: function() {\n return Graph.Utils.parse([\"0->1\", \"0->2\", \"0->3\", \"0->4\", \"0->5\", \"1->6\", \"1->7\", \"7->8\", \"2->9\", \"9->10\", \"9->11\", \"3->12\",\n \"12->13\", \"13->14\", \"4->15\", \"4->16\", \"15->17\", \"15->18\", \"18->19\", \"18->20\", \"14->21\", \"14->22\", \"5->23\", \"23->24\", \"23->25\", \"6->26\"]);\n },\n\n /**\n * Three nodes connected in a cycle.\n * @returns {*}\n * @constructor\n */\n ThreeGraph: function() {\n return Graph.Utils.parse([ \"1->2\", \"2->3\", \"3->1\"]);\n },\n\n /**\n * A tree with each node having two children.\n * @param levels How many levels the binary tree should have.\n * @returns {diagram.Graph}\n * @constructor\n */\n BinaryTree: function(levels) {\n if (Utils.isUndefined(levels)) {\n levels = 5;\n }\n return Graph.Utils.createBalancedTree(levels, 2);\n },\n\n /**\n * A linear graph (discrete line segment).\n * @param length How many segments (the node count is hence (length+1)).\n * @returns {diagram.Graph}\n * @constructor\n */\n Linear: function(length) {\n if (Utils.isUndefined(length)) {\n length = 10;\n }\n return Graph.Utils.createBalancedTree(length, 1);\n },\n\n /**\n * A standard tree-graph with the specified levels and children (siblings) count.\n * Note that for a balanced tree of level N and sibling count s, counting the root as level zero:\n * - NodeCount = (1-s^(N+1))/(1-s)]\n * - LinkCount = s.(1-s^N)/(1-s)\n * @param levels How many levels the tree should have.\n * @param siblingsCount How many siblings each level should have.\n * @returns {diagram.Graph}\n * @constructor\n */\n Tree: function(levels, siblingsCount) {\n return Graph.Utils.createBalancedTree(levels, siblingsCount);\n },\n\n /**\n * Creates a forest.\n * Note that for a balanced forest of level N, sibling count s and tree count t, counting the root as level zero:\n * - NodeCount = t.(1-s^(N+1))/(1-s)]\n * - LinkCount = t.s.(1-s^N)/(1-s)\n * @param levels How many levels the tree should have.\n * @param siblingsCount How many siblings each level should have.\n * @param trees The amount of trees the forest should have.\n * @returns {diagram.Graph}\n * @constructor\n */\n Forest: function(levels, siblingsCount, trees) {\n return Graph.Utils.createBalancedForest(levels, siblingsCount, trees);\n },\n\n /**\n * A workflow-like graph with cycles.\n * @returns {*}\n * @constructor\n */\n Workflow: function() {\n return Graph.Utils.parse(\n [\"0->1\", \"1->2\", \"2->3\", \"1->4\", \"4->3\", \"3->5\", \"5->6\", \"6->3\", \"6->7\", \"5->4\"]\n );\n },\n\n /**\n * A grid graph with the direction of the links avoiding cycles.\n * Node count: (n+1).(m+1)\n * Link count: n.(m+1) + m.(n+1)\n * @param n Horizontal count of grid cells. If zero this will result in a linear graph.\n * @param m Vertical count of grid cells. If zero this will result in a linear graph.\n * @constructor\n */\n Grid: function(n, m) {\n var g = new diagram.Graph();\n if (n <= 0 && m <= 0) {\n return g;\n }\n\n for (var i = 0; i < n + 1; i++) {\n var previous = null;\n for (var j = 0; j < m + 1; j++) {\n // using x-y coordinates to name the nodes\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 };\n\n /**\n * Graph generation and other utilities.\n */\n Graph.Utils = {\n /**\n * The parsing allows a quick way to create graphs.\n * - [\"n1->n2\", \"n2->n3\"]: creates the three nodes and adds the links\n * - [\"n1->n2\", {id: \"id177\"}, \"n2->n3\"]: same as previous but also performs a deep extend of the link between n1 and n2 with the given object.\n */\n parse: function(graphString) {\n\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)) // link spec\n {\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\n /**\n * Returns a linearized representation of the given Graph.\n * See also the Graph.Utils.parse method for the inverse operation.\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\n /**\n * The method used by the diagram creation to instantiate a shape.\n * @param kendoDiagram The Kendo diagram where the diagram will be created.\n * @param p The position at which to place the shape.\n * @param shapeDefaults Optional Shape options.\n * @param id Optional identifier of the shape.\n * @returns {*}\n * @private\n */\n _addShape: function(kendoDiagram, p, id, shapeDefaults) {\n if (Utils.isUndefined(p)) {\n p = new diagram.Point(0, 0);\n }\n\n if (Utils.isUndefined(id)) {\n id = randomId();\n }\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\n return kendoDiagram.addShape(shapeDefaults);\n },\n /**\n * The method used by the diagram creation to instantiate a connection.\n * @param diagram he Kendo diagram where the diagram will be created.\n * @param from The source shape.\n * @param to The target shape.\n * @param options Optional Connection options.\n * @returns {*}\n * @private\n */\n _addConnection: function(diagram, from, to, options) {\n return diagram.connect(from, to, options);\n },\n\n /**\n * Creates a diagram from the given Graph.\n * @param diagram The Kendo diagram where the diagram will be created.\n * @param graph The graph structure defining the diagram.\n */\n createDiagramFromGraph: function(diagram, graph, doLayout, randomSize) {\n\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\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 }\n else {\n p = new Point(Utils.randomInteger(10, width - 20), Utils.randomInteger(10, height - 20));\n }\n }\n var opt = {};\n\n if (node.id === \"0\") {\n /* kendo.deepExtend(opt,\n {\n fill: \"Orange\",\n data: 'circle',\n width: 100,\n height: 100,\n center: new Point(50, 50)\n });*/\n }\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: {\n color: \"#778899\"\n }\n });\n }\n\n shape = this._addShape(diagram, p, node.id, opt);\n //shape.content(node.id);\n\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 }\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\n /**\n * Creates a balanced tree with the specified number of levels and siblings count.\n * Note that for a balanced tree of level N and sibling count s, counting the root as level zero:\n * - NodeCount = (1-s^(N+1))/(1-s)]\n * - LinkCount = s.(1-s^N)/(1-s)\n * @param levels How many levels the tree should have.\n * @param siblingsCount How many siblings each level should have.\n * @returns {diagram.Graph}\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\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\n /**\n * Creates a balanced tree with the specified number of levels and siblings count.\n * Note that for a balanced forest of level N, sibling count s and tree count t, counting the root as level zero:\n * - NodeCount = t.(1-s^(N+1))/(1-s)]\n * - LinkCount = t.s.(1-s^N)/(1-s)\n * @param levels How many levels the tree should have.\n * @param siblingsCount How many siblings each level should have.\n * @returns {diagram.Graph}\n * @param treeCount The number of trees the forest should have.\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\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\n /**\n * Creates a random graph (uniform distribution) with the specified amount of nodes.\n * @param nodeCount The amount of nodes the random graph should have.\n * @param maxIncidence The maximum allowed degree of the nodes.\n * @param isTree Whether the return graph should be a tree (default: false).\n * @returns {diagram.Graph}\n */\n createRandomConnectedGraph: function(nodeCount, maxIncidence, isTree) {\n\n /* Swa's Mathematica export of random Bernoulli graphs\n gr[n_,p_]:=Module[{g=RandomGraph[BernoulliGraphDistribution[n,p],VertexLabels->\"Name\",DirectedEdges->True]},\n While[Not[ConnectedGraphQ[g]],g=RandomGraph[BernoulliGraphDistribution[n,p],VertexLabels->\"Name\",DirectedEdges->True]];g];\n project[a_]:=(\"\\\"\"<>ToString[Part[#,1]]<>\"->\"<>ToString[Part[#,2]]<>\"\\\"\")& @ a;\n export[g_]:=project/@ EdgeList[g]\n g = gr[12,.1]\n export [g]\n */\n\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\n var g = new diagram.Graph(), counter = -1;\n if (nodeCount <= 0) {\n return g;\n }\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 // random tree\n for (var i = 1; i < nodeCount; i++) {\n var poolNode = g.takeRandomNode([], maxIncidence);\n if (!poolNode) {\n //failed to find one so the graph will have less nodes than specified\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\n /**\n * Generates a random diagram.\n * @param diagram The host diagram.\n * @param shapeCount The number of shapes the random diagram should contain.\n * @param maxIncidence The maximum degree the shapes can have.\n * @param isTree Whether the generated diagram should be a tree\n * @param layoutType The optional layout type to apply after the diagram is generated.\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\n kendo.deepExtend(diagram, {\n init: function(element) {\n kendo.init(element, diagram.ui);\n },\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\n (function($, undefined$1) {\n // Imports ================================================================\n var kendo = window.kendo,\n diagram = kendo.dataviz.diagram,\n Class = kendo.Class,\n deepExtend = kendo.deepExtend,\n Point = diagram.Point,\n Rect = diagram.Rect,\n Matrix = diagram.Matrix,\n Utils = diagram.Utils,\n isNumber = Utils.isNumber,\n isString = Utils.isString,\n MatrixVector = diagram.MatrixVector,\n\n g = kendo.geometry,\n d = kendo.drawing,\n\n defined = d.util.defined,\n\n inArray = $.inArray;\n\n // Constants ==============================================================\n var TRANSPARENT = \"transparent\",\n Markers = {\n none: \"none\",\n arrowStart: \"ArrowStart\",\n filledCircle: \"FilledCircle\",\n arrowEnd: \"ArrowEnd\"\n },\n FULL_CIRCLE_ANGLE = 360,\n START = \"start\",\n END = \"end\",\n WIDTH = \"width\",\n HEIGHT = \"height\",\n X = \"x\",\n Y = \"y\";\n\n diagram.Markers = Markers;\n\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\n return hasChanges;\n }\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\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\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); // T*R*T^-1\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\n Rotation.ZERO = new Rotation(0);\n\n Rotation.create = function(rotation) {\n return new Rotation(rotation.angle, rotation.x, rotation.y);\n };\n\n Rotation.parse = function(str) {\n var values = str.slice(1, str.length - 1).split(\",\"),\n angle = values[0],\n x = values[1],\n y = values[2];\n var rotation = new Rotation(angle, x, y);\n return rotation;\n };\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$1 && scaleY !== undefined$1) {\n this.scale = new Scale(scaleX, scaleY);\n }\n if (angle !== undefined$1) {\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\n return toString(this.translate) +\n toString(this.rotate) +\n toString(this.scale);\n },\n\n render: function(visual) {\n visual._transform = this;\n visual._renderTransform();\n },\n\n toMatrix: function() {\n var m = Matrix.unit();\n\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$1,\n rotateMatrix = rotate ? rotate.toMatrix() : Matrix.unit(),\n scale = this.scale ? this.scale.invert() : undefined$1,\n scaleMatrix = scale ? scale.toMatrix() : Matrix.unit();\n\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\n var transform = new CompositeTransform();\n transform.translate = translate;\n transform.rotate = rotate;\n transform.scale = scale;\n\n return transform;\n }\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\n if (!isNumber(scaleX)) {\n scaleX = 1;\n }\n if (!isNumber(scaleY)) {\n scaleY = 1;\n }\n\n this._transform.scale = new Scale(scaleX, scaleY);\n },\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\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\n if (defined(options.x) || defined(options.y)) {\n this._setTranslate();\n transform = true;\n }\n\n if (transform) {\n this._renderTransform();\n }\n },\n\n _updateSize: function(options) {\n var update = false;\n\n if (this.options.autoSize !== false && this._diffNumericOptions(options, [WIDTH, HEIGHT])) {\n update = true;\n this._measure(true);\n this._setScale();\n }\n\n if (this._diffNumericOptions(options, [X, Y])) {\n update = true;\n this._setTranslate();\n }\n\n if (update) {\n this._renderTransform();\n }\n\n return update;\n }\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\n visible: function(value) {\n return this.drawingContainer().visible(value);\n },\n\n redraw: function(options) {\n if (options && options.id) {\n this.id = options.id;\n }\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\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\n this._transform.translate = new Translation(options.x, options.y);\n this._renderTransform();\n },\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\n drawingContainer: function() {\n return this.drawingElement;\n },\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\n _hover: function() {},\n\n _diffNumericOptions: diffNumericOptions,\n\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\n _boundingBox: function() {\n return this.drawingElement.rawBBox();\n }\n });\n\n var VisualBase = Element.extend({\n init: function(options) {\n Element.fn.init.call(this, options);\n\n options = this.options;\n options.fill = normalizeDrawingOptions(options.fill);\n options.stroke = normalizeDrawingOptions(options.stroke);\n },\n\n options: {\n stroke: {\n color: \"gray\",\n width: 1\n },\n fill: {\n color: TRANSPARENT\n }\n },\n\n fill: function(color, opacity) {\n this._fill({\n color: getColor(color),\n opacity: opacity\n });\n },\n\n stroke: function(color, width, opacity) {\n this._stroke({\n color: getColor(color),\n width: width,\n opacity: opacity\n });\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\n Element.fn.redraw.call(this, options);\n }\n },\n\n _hover: function(show) {\n var drawingElement = this.drawingElement;\n var options = this.options;\n var hover = options.hover;\n\n if (hover && hover.fill) {\n var fill = show ? normalizeDrawingOptions(hover.fill) : options.fill;\n drawingElement.fill(fill.color, fill.opacity);\n }\n },\n\n _stroke: function(strokeOptions) {\n var options = this.options;\n deepExtend(options, {\n stroke: strokeOptions\n });\n\n strokeOptions = options.stroke;\n\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\n this.drawingElement.options.set(\"stroke\", stroke);\n },\n\n _fill: function(fillOptions) {\n var options = this.options;\n deepExtend(options, {\n fill: fillOptions || {}\n });\n var fill = options.fill;\n\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\n var TextBlock = VisualBase.extend({\n init: function(options) {\n options = this._textColor(options);\n VisualBase.fn.init.call(this, options);\n\n this._font();\n this._initText();\n this._initSize();\n },\n\n options: {\n fontSize: 15,\n fontFamily: \"sans-serif\",\n stroke: {\n width: 0\n },\n fill: {\n color: \"black\"\n },\n autoSize: true\n },\n\n _initText: function() {\n var options = this.options;\n\n this.drawingElement = new d.Text(defined(options.text) ? options.text : \"\", new g.Point(), {\n font: options.font\n });\n\n this._fill();\n this._stroke();\n },\n\n _textColor: function(options) {\n if (options && options.color) {\n options = deepExtend({}, options, {\n fill: {\n color: options.color\n }\n });\n }\n return options;\n },\n\n _font: function() {\n var options = this.options;\n if (options.fontFamily && defined(options.fontSize)) {\n var fontOptions = [];\n\n if (options.fontStyle) {\n fontOptions.push(options.fontStyle);\n }\n\n if (options.fontWeight) {\n fontOptions.push(options.fontWeight);\n }\n\n fontOptions.push(options.fontSize + (isNumber(options.fontSize) ? \"px\" : \"\"));\n fontOptions.push(options.fontFamily);\n\n options.font = fontOptions.join(\" \");\n } else {\n delete options.font;\n }\n },\n\n content: function(text) {\n return this.drawingElement.content(text);\n },\n\n redraw: function(options) {\n if (options) {\n var sizeChanged = false;\n var textOptions = this.options;\n\n options = this._textColor(options);\n\n VisualBase.fn.redraw.call(this, options);\n\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\n if (options.text) {\n this.content(options.text);\n sizeChanged = true;\n }\n\n if (!this._updateSize(options) && sizeChanged) {\n this._initSize();\n }\n }\n }\n });\n\n deepExtend(TextBlock.fn, AutoSizeableMixin);\n\n var Rectangle = VisualBase.extend({\n init: function(options) {\n VisualBase.fn.init.call(this, options);\n this._initPath();\n this._setPosition();\n },\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\n redraw: function(options) {\n if (options) {\n VisualBase.fn.redraw.call(this, options);\n if (this._diffNumericOptions(options, [WIDTH, HEIGHT])) {\n this._drawPath();\n }\n if (this._diffNumericOptions(options, [X, Y])) {\n this._setPosition();\n }\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\n this._fill();\n this._drawPath();\n },\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\n drawingElement.segments.elements([\n createSegment(0, 0),\n createSegment(width, 0),\n createSegment(width, height),\n createSegment(0, height)\n ]);\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\n options: {\n stroke: {\n color: TRANSPARENT,\n width: 0\n },\n fill: {\n color: \"black\"\n }\n },\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\n redraw: function(options) {\n if (options) {\n if (options.position) {\n this.options.position = options.position;\n }\n\n VisualBase.fn.redraw.call(this, options);\n }\n }\n });\n\n var CircleMarker = MarkerBase.extend({\n options: {\n radius: 4,\n anchor: {\n x: 0,\n y: 0\n }\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\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\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\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\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\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\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\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\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\n _normalizeMarkerOptions: function(options) {\n var startCap = options.startCap;\n var endCap = options.endCap;\n\n if (isString(startCap)) {\n options.startCap = {\n type: startCap\n };\n }\n\n if (isString(endCap)) {\n options.endCap = {\n type: endCap\n };\n }\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\n _createMarkers: function() {\n var options = this.options;\n this._normalizeMarkerOptions(options);\n\n this._markers = {};\n this._markers[START] = this._createMarker(options.startCap, START);\n this._markers[END] = this._createMarker(options.endCap, END);\n },\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\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, {\n position: position\n }));\n marker.positionMarker(path);\n this.drawingContainer().append(marker.drawingElement);\n\n return marker;\n }\n },\n\n _positionMarker: function(position) {\n var marker = this._markers[position];\n\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\n _capMap: {\n start: \"startCap\",\n end: \"endCap\"\n },\n\n _redrawMarker: function(pathChange, position, options) {\n this._normalizeMarkerOptions(options);\n\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\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\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\n options: {\n autoSize: true\n },\n\n drawingContainer: function() {\n return this.container;\n },\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\n redraw: function(options) {\n if (options) {\n VisualBase.fn.redraw.call(this, options);\n\n var pathOptions = this.options;\n var data = options.data;\n\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\n _createElements: function() {\n var options = this.options;\n\n this.drawingElement = d.Path.parse(options.data || \"\", {\n stroke: options.stroke\n });\n\n this._fill();\n this.container.append(this.drawingElement);\n this._createMarkers();\n },\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\n deepExtend(Path.fn, AutoSizeableMixin);\n deepExtend(Path.fn, MarkerPathMixin);\n\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\n drawingContainer: function() {\n return this.container;\n },\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\n if (to) {\n this.options.to = to;\n }\n\n if (from || to) {\n this._drawPath();\n this._redrawMarkers(true, options);\n } else {\n this._redrawMarkers(false, options);\n }\n\n VisualBase.fn.redraw.call(this, options);\n }\n },\n\n _initPath: function() {\n var options = this.options;\n var drawingElement = this.drawingElement = new d.Path({\n stroke: options.stroke\n });\n\n this._fill();\n this._drawPath();\n this.container.append(drawingElement);\n },\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\n drawingElement.segments.elements([\n createSegment(from.x, from.y),\n createSegment(to.x, to.y)\n ]);\n }\n });\n\n deepExtend(Line.fn, MarkerPathMixin);\n\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\n drawingContainer: function() {\n return this.container;\n },\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\n redraw: function(options) {\n if (options) {\n var points = options.points;\n VisualBase.fn.redraw.call(this, options);\n\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\n _initPath: function() {\n var options = this.options;\n this.drawingElement = new d.Path({\n stroke: options.stroke\n });\n\n this._fill();\n this.container.append(this.drawingElement);\n\n if (options.points) {\n this._updatePath();\n }\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\n return differ;\n },\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\n drawingElement.segments.elements(segments);\n },\n\n options: {\n points: []\n }\n });\n\n deepExtend(Polyline.fn, MarkerPathMixin);\n\n var Image = Element.extend({\n init: function(options) {\n Element.fn.init.call(this, options);\n\n this._initImage();\n },\n\n redraw: function(options) {\n if (options) {\n if (options.source) {\n this.drawingElement.src(options.source);\n }\n\n if (this._diffNumericOptions(options, [WIDTH, HEIGHT, X, Y])) {\n this.drawingElement.rect(this._rect());\n }\n\n Element.fn.redraw.call(this, options);\n }\n },\n\n _initImage: function() {\n var options = this.options;\n var rect = this._rect();\n\n this.drawingElement = new d.Image(options.source, rect, {});\n },\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\n return new g.Rect(origin, size);\n }\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\n options: {\n autoSize: false\n },\n\n append: function(visual) {\n this.drawingElement.append(visual.drawingContainer());\n this.children.push(visual);\n this._childrenChange = true;\n },\n\n remove: function(visual) {\n if (this._remove(visual)) {\n this._childrenChange = true;\n }\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\n clear: function() {\n this.drawingElement.clear();\n this.children = [];\n this._childrenChange = true;\n },\n\n toFront: function(visuals) {\n var visual;\n\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 //TO DO: add drawing group support for moving and inserting children\n toBack: function(visuals) {\n this._reorderChildren(visuals, 0);\n },\n\n toIndex: function(visuals, indices) {\n this._reorderChildren(visuals, indices);\n },\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\n for (i = 0; i < visuals.length; i++) {\n visual = visuals[i];\n drawingElement = visual.drawingContainer();\n\n index = inArray(visual, children);\n if (index >= 0) {\n drawingChildren.splice(index, 1);\n children.splice(index, 1);\n\n toIndex = fixedPosition ? indices : indices[i];\n\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\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\n Element.fn.redraw.call(this, options);\n }\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\n return boundingBox;\n }\n });\n\n deepExtend(Group.fn, AutoSizeableMixin);\n\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\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\n reflow: function() {\n this.drawingElement.reflow();\n },\n\n redraw: function(options) {\n kendo.deepExtend(this.drawingElement.options, options);\n Group.fn.redraw.call(this, options);\n }\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\n redraw: function(options) {\n if (options) {\n var circleOptions = this.options;\n\n if (options.center) {\n deepExtend(circleOptions, {\n center: options.center\n });\n this._center.move(circleOptions.center.x, circleOptions.center.y);\n }\n\n if (this._diffNumericOptions(options, [\"radius\"])) {\n this._circle.setRadius(circleOptions.radius);\n }\n\n this._updateSize(options);\n\n VisualBase.fn.redraw.call(this, options);\n }\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\n var center = options.center || { x: radius, y: radius };\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, {\n stroke: options.stroke\n });\n\n this._fill();\n }\n });\n deepExtend(Circle.fn, AutoSizeableMixin);\n\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\n this.drawingElement = new d.Group();\n this._viewBox = new Rect(0, 0, options.width, options.height);\n this.size(this._viewBox);\n },\n\n bounds: function() {\n var box = this.drawingElement.clippedBBox();\n return new Rect(0, 0, box.width(), box.height());\n },\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\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({ x: x, y: y });\n }\n return {\n x: viewBox.x,\n y: viewBox.y\n };\n },\n\n draw: function() {\n this.surface.draw(this.drawingElement);\n },\n\n append: function(visual) {\n this.drawingElement.append(visual.drawingContainer());\n return this;\n },\n\n remove: function(visual) {\n this.drawingElement.remove(visual.drawingContainer());\n },\n\n insertBefore: function() {\n\n },\n\n clear: function() {\n this.drawingElement.clear();\n },\n\n destroy: function(clearHtml) {\n this.surface.destroy();\n if (clearHtml) {\n $(this.element).remove();\n }\n }\n });\n\n // Helper functions ===========================================\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\n function normalizeDrawingOptions(options) {\n if (options) {\n var drawingOptions = options;\n\n if (isString(drawingOptions)) {\n drawingOptions = {\n color: drawingOptions\n };\n }\n\n if (drawingOptions.color) {\n drawingOptions.color = getColor(drawingOptions.color);\n }\n return drawingOptions;\n }\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\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\n function createSegment(x, y) {\n return new d.Segment(new g.Point(x, y));\n }\n\n function toDrawingRect(rect) {\n if (rect) {\n return new g.Rect([rect.x, rect.y], [rect.width, rect.height]);\n }\n }\n\n // Exports ================================================================\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\n (function($, undefined$1) {\n // Imports ================================================================\n var kendo = window.kendo,\n dataviz = kendo.dataviz,\n diagram = dataviz.diagram,\n Class = kendo.Class,\n Group = diagram.Group,\n Rect = diagram.Rect,\n Rectangle = diagram.Rectangle,\n Utils = diagram.Utils,\n isUndefined = Utils.isUndefined,\n Point = diagram.Point,\n Circle = diagram.Circle,\n Ticker = diagram.Ticker,\n deepExtend = kendo.deepExtend,\n Movable = kendo.ui.Movable,\n util = kendo.drawing.util,\n defined = util.defined,\n inArray = $.inArray;\n\n // Constants ==============================================================\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 },\n HIT_TEST_DISTANCE = 10,\n AUTO = \"Auto\",\n TOP = \"Top\",\n RIGHT = \"Right\",\n LEFT = \"Left\",\n BOTTOM = \"Bottom\",\n DEFAULT_SNAP_SIZE = 10,\n DEFAULT_SNAP_ANGLE = 10,\n DRAG_START = \"dragStart\",\n DRAG = \"drag\",\n DRAG_END = \"dragEnd\",\n ITEMROTATE = \"itemRotate\",\n ITEMBOUNDSCHANGE = \"itemBoundsChange\",\n MIN_SNAP_SIZE = 5,\n MIN_SNAP_ANGLE = 5,\n MOUSE_ENTER = \"mouseEnter\",\n MOUSE_LEAVE = \"mouseLeave\",\n ZOOM_START = \"zoomStart\",\n ZOOM_END = \"zoomEnd\",\n SCROLL_MIN = -20000,\n SCROLL_MAX = 20000,\n FRICTION = 0.90,\n FRICTION_MOBILE = 0.93,\n VELOCITY_MULTIPLIER = 5,\n TRANSPARENT = \"transparent\",\n PAN = \"pan\",\n ROTATED = \"rotated\",\n SOURCE = \"source\",\n TARGET = \"target\",\n HANDLE_NAMES = {\n \"-1\": SOURCE,\n \"1\": TARGET\n };\n\n diagram.Cursors = Cursors;\n\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\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 //todo: define a Lerp function instead\n this.subjects[i].position(\n 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 });\n\n var LayoutUndoUnit = Class.extend({\n init: function(initialState, finalState, animate) {\n if (isUndefined(animate)) {\n this.animate = false;\n }\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(\n function(id, points) {\n var conn = diagram.getShapeById(id);\n conn.visible(false);\n if (conn) {\n conn.points(points);\n }\n }\n );\n var ticker = new Ticker();\n ticker.addAdapter(new PositionAdapter(state));\n ticker.onComplete(function() {\n state.linkMap.forEach(\n function(id) {\n var conn = diagram.getShapeById(id);\n conn.visible(true);\n }\n );\n });\n ticker.play();\n }\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(\n function(id, points) {\n var conn = diagram.getShapeById(id);\n if (conn) {\n conn.points(points);\n }\n }\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$1) {\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\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\n if (defined(redoTarget)) {\n this._undoTarget = item.target();\n }\n this.title = \"Connection Editing\";\n },\n undo: function() {\n if (this._undoSource !== undefined$1) {\n this.item._updateConnector(this._undoSource, \"source\");\n }\n\n if (this._undoTarget !== undefined$1) {\n this.item._updateConnector(this._undoTarget, \"target\");\n }\n\n this.item.updateModel();\n },\n redo: function() {\n if (this._redoSource !== undefined$1) {\n this.item._updateConnector(this._redoSource, \"source\");\n }\n\n if (this._redoTarget !== undefined$1) {\n this.item._updateConnector(this._redoTarget, \"target\");\n }\n\n this.item.updateModel();\n }\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\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\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 /**\n * Holds the undoredo state when performing a rotation, translation or scaling. The adorner is optional.\n * @type {*}\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 // the 'layout' property, if implemented, lets the shape itself work out what to do with the new bounds\n if (shape.hasOwnProperty(\"layout\")) {\n shape.layout(shape, this.undoStates[i], this.redoStates[i]);\n }\n shape.updateModel();\n }\n\n if (this.adorner) {\n this.adorner.refreshBounds();\n this.adorner.refresh();\n }\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\n undo: function() {\n this.diagram.remove(this.connection, false);\n },\n\n redo: function() {\n this.diagram._addConnection(this.connection, false);\n }\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\n undo: function() {\n this.diagram.deselect();\n this.diagram.remove(this.shape, false);\n },\n\n redo: function() {\n this.diagram._addShape(this.shape, false);\n }\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\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\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\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\n /**\n * Undo-redo service.\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\n events: [\"undone\", \"redone\"],\n\n /**\n * Starts the collection of units. Add those with\n * the addCompositeItem method and call commit. Or cancel to forget about it.\n */\n begin: function() {\n this.composite = new CompositeUnit();\n },\n\n /**\n * Cancels the collection process of unit started with 'begin'.\n */\n cancel: function() {\n this.composite = undefined$1;\n },\n\n /**\n * Commits a batch of units.\n */\n commit: function(execute) {\n if (this.composite.units.length > 0) {\n this._restart(this.composite, execute);\n }\n this.composite = undefined$1;\n },\n\n /**\n * Adds a unit as part of the begin-commit batch.\n * @param undoUnit\n */\n addCompositeItem: function(undoUnit) {\n if (this.composite) {\n this.composite.add(undoUnit);\n } else {\n this.add(undoUnit);\n }\n },\n\n /**\n * Standard addition of a unit. See also the batch version; begin-addCompositeUnit-commit methods.\n * @param undoUnit The unit to be added.\n * @param execute If false, the unit will be added but not executed.\n */\n add: function(undoUnit, execute) {\n this._restart(undoUnit, execute);\n },\n\n /**\n * Returns the number of undoable unit in the stack.\n * @returns {Number}\n */\n\n pop: function() {\n if (this.index > 0) {\n this.stack.pop();\n this.index--;\n }\n },\n\n count: function() {\n return this.stack.length;\n },\n\n /**\n * Rollback of the unit on top of the stack.\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\n /**\n * Redo of the last undone action.\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\n _restart: function(composite, execute) {\n // throw away anything beyond this point if this is a new branch\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 // check the capacity\n if (this.stack.length > this.capacity) {\n this.stack.splice(0, this.stack.length - this.capacity);\n this.index = this.capacity; //points to the end of the stack\n }\n },\n\n /**\n * Clears the stack.\n */\n clear: function() {\n this.stack = [];\n this.index = 0;\n }\n });\n\n // Tools =========================================\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\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\n var diagram = tool.toolService.diagram,\n canvas = diagram.canvas;\n\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: tool._move.bind(tool)\n }).data(\"kendoMobileScroller\");\n\n if (canvas.translate) {\n tool.movableCanvas = new Movable(canvas.element);\n }\n\n var virtualScroll = function(dimension, min, max) {\n dimension.makeVirtual();\n dimension.virtualSize(min || SCROLL_MIN, max || SCROLL_MAX);\n };\n\n virtualScroll(scroller.dimensions.x);\n virtualScroll(scroller.dimensions.y);\n scroller.disable();\n },\n\n tryActivate: function(p, meta) {\n var toolService = this.toolService;\n var options = toolService.diagram.options.pannable;\n var enabled = meta.ctrlKey;\n\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\n return options !== false && enabled && !defined(toolService.hoveredAdorner) && !defined(toolService._hoveredConnector);\n },\n\n start: function() {\n this.scroller.enable();\n },\n move: function() {\n },//the tool itself should not handle the scrolling. Let kendo scroller take care of this part. Check _move\n _move: function(args) {\n var tool = this,\n diagram = tool.toolService.diagram,\n canvas = diagram.canvas,\n scrollPos = new Point(args.scrollLeft, args.scrollTop);\n\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\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\n /**\n * The tool handling the transformations via the adorner.\n * @type {*}\n */\n var PointerTool = Class.extend({\n init: function(toolService) {\n this.toolService = toolService;\n },\n tryActivate: function() {\n return true; // the pointer tool is last and handles all others requests.\n },\n start: function(p, meta) {\n var toolService = this.toolService,\n diagram = toolService.diagram,\n hoveredItem = toolService.hoveredItem;\n\n if (hoveredItem) {\n toolService.selectSingle(hoveredItem, meta);\n if (hoveredItem.adorner) { //connection\n this.adorner = hoveredItem.adorner;\n this.handle = this.adorner._hitTest(p);\n }\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\n if (this.adorner) {\n if (!this.adorner.isDragHandle(this.handle) || !diagram.trigger(DRAG_START, { shapes: this.adorner.shapes, connections: [] })) {\n this.adorner.start(p);\n } else {\n toolService.startPoint = p;\n toolService.end(p);\n }\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, { shapes: this.adorner.shapes, connections: [] });\n }\n }\n },\n\n end: function() {\n var diagram = this.toolService.diagram,\n adorner = this.adorner,\n unit;\n\n if (adorner) {\n if (!adorner.isDragHandle(this.handle) || !diagram.trigger(DRAG_END, { shapes: adorner.shapes, connections: [] })) {\n unit = adorner.stop();\n if (unit) {\n diagram.undoRedoService.add(unit, false);\n }\n } else {\n adorner.cancel();\n }\n }\n\n this.adorner = undefined$1;\n this.handle = undefined$1;\n },\n getCursor: function(p) {\n return this.toolService.hoveredItem ? this.toolService.hoveredItem._getCursor(p) : Cursors.arrow;\n }\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\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\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\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,\n diagram = toolService.diagram,\n connector = toolService._hoveredConnector,\n connection = diagram._createConnection({}, connector._c, p);\n\n if (canDrag(connection) && !diagram.trigger(DRAG_START, { shapes: [], connections: [connection], connectionHandle: TARGET }) && 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\n move: function(p) {\n var toolService = this.toolService;\n var connection = toolService.activeConnection;\n\n connection.target(p);\n toolService.diagram.trigger(DRAG, { shapes: [], connections: [connection], connectionHandle: TARGET });\n return true;\n },\n\n end: function(p) {\n var toolService = this.toolService,\n d = toolService.diagram,\n connection = toolService.activeConnection,\n hoveredItem = toolService.hoveredItem,\n connector = toolService._hoveredConnector,\n target,\n cachedTouchTarget = d._cachedTouchTarget;\n\n if (!connection) {\n return;\n }\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\n connection.target(target);\n\n if (!d.trigger(DRAG_END, { shapes: [], connections: [connection], connectionHandle: TARGET })) {\n connection.updateModel();\n d._syncConnectionChanges();\n } else {\n d.remove(connection, false);\n d.undoRedoService.pop();\n }\n toolService._connectionManipulation();\n\n if (cachedTouchTarget) {\n d._connectorsAdorner.visual.remove(cachedTouchTarget);\n d._cachedTouchTarget = null;\n }\n },\n\n getCursor: function() {\n return Cursors.arrow;\n }\n });\n\n var ConnectionEditTool = Class.extend({\n init: function(toolService) {\n this.toolService = toolService;\n this.type = \"ConnectionTool\";\n },\n\n tryActivate: function(p, meta) {\n var toolService = this.toolService,\n diagram = toolService.diagram,\n selectable = diagram.options.selectable,\n item = toolService.hoveredItem,\n isActive = selectable !== false &&\n item && item.path && !(item.isSelected && meta.ctrlKey);\n\n if (isActive) {\n this._c = item;\n }\n\n return isActive;\n },\n\n start: function(p, meta) {\n var toolService = this.toolService;\n var connection = this._c;\n\n toolService.selectSingle(connection, meta);\n\n var adorner = connection.adorner;\n\n var handle, name;\n if (adorner) {\n handle = adorner._hitTest(p);\n name = HANDLE_NAMES[handle];\n }\n\n if (canDrag(connection) && adorner && !toolService.diagram.trigger(DRAG_START, { shapes: [], connections: [connection], connectionHandle: name })) {\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\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, { shapes: [], connections: [this._c], connectionHandle: this.handleName });\n\n return true;\n }\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\n if (adorner) {\n if (canDrag(connection)) {\n var unit = adorner.stop(p);\n if (!diagram.trigger(DRAG_END, { shapes: [], connections: [connection], connectionHandle: this.handleName })) {\n diagram.undoRedoService.add(unit, false);\n connection.updateModel();\n diagram._syncConnectionChanges();\n } else {\n unit.undo();\n }\n }\n }\n },\n\n getCursor: function() {\n return Cursors.move;\n }\n });\n\n function testKey(key, str) {\n return str.charCodeAt(0) == key || str.toUpperCase().charCodeAt(0) == key;\n }\n\n /**\n * The service managing the tools.\n * @type {*}\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 ]; // the order matters.\n\n this.activeTool = undefined$1;\n },\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\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\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$1;\n this._updateCursor(p);\n return true;\n },\n\n keyDown: function(key, meta) {\n var diagram = this.diagram;\n meta = deepExtend({ ctrlKey: false, metaKey: false, altKey: false }, meta);\n if ((meta.ctrlKey || meta.metaKey) && !meta.altKey) {// ctrl or option\n if (testKey(key, \"a\")) {// A: select all\n diagram.selectAll();\n diagram._destroyToolBar();\n return true;\n } else if (testKey(key, \"z\")) {// Z: undo\n diagram.undo();\n diagram._destroyToolBar();\n return true;\n } else if (testKey(key, \"y\")) {// y: redo\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) {// del: deletion\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\n return true;\n } else if (key === 27) {// ESC: stop any action\n this._discardNewConnection();\n diagram.deselect();\n diagram._destroyToolBar();\n return true;\n }\n\n },\n wheel: function(p, meta) {\n var diagram = this.diagram,\n delta = meta.delta,\n z = diagram.zoom(),\n options = diagram.options,\n zoomRate = options.zoomRate,\n zoomOptions = { point: p, meta: meta, zoom: z };\n\n if (diagram.trigger(ZOOM_START, zoomOptions)) {\n return;\n }\n\n if (delta < 0) {\n z += zoomRate;\n } else {\n z -= zoomRate;\n }\n\n z = kendo.dataviz.round(Math.max(options.zoomMin, Math.min(options.zoomMax, z)), 2);\n zoomOptions.zoom = z;\n\n diagram.zoom(z, zoomOptions);\n diagram.trigger(ZOOM_END, zoomOptions);\n\n return true;\n },\n setTool: function(tool, index) {\n tool.toolService = this;\n this.tools[index] = tool;\n },\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\n _discardNewConnection: function() {\n if (this.newConnection) {\n this.diagram.remove(this.newConnection);\n this.newConnection = undefined$1;\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; // activating the first available tool in the loop.\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\n element.css({ cursor: cursor });\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$1;\n }\n },\n _updateHoveredItem: function(p) {\n var hit = this._hitTest(p);\n var diagram = this.diagram;\n\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\n if (hit && hit.options.enable) {\n diagram.trigger(MOUSE_ENTER, { item: hit });\n\n this.hoveredItem = hit; // Shape, connection or connector\n this.hoveredItem._hover(true);\n } else {\n this.hoveredItem = undefined$1;\n }\n }\n },\n _removeHover: function() {\n if (this.hoveredItem) {\n this.hoveredItem._hover(false);\n this.hoveredItem = undefined$1;\n }\n },\n _hitTest: function(point) {\n var hit, d = this.diagram, item, i;\n\n // connectors\n if (this._hoveredConnector) {\n this._hoveredConnector._hover(false);\n this._hoveredConnector = undefined$1;\n }\n if (d._connectorsAdorner._visible) {\n hit = d._connectorsAdorner._hitTest(point);\n if (hit) {\n return hit;\n }\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) { // hit testing for resizers or rotator, otherwise if (0,0) than pass through.\n return;\n }\n hit = undefined$1;\n } else {\n this.hoveredAdorner = undefined$1;\n }\n\n if (!this.activeTool || this.activeTool.type !== \"ConnectionTool\") {\n var selectedConnections = []; // only the connections should have higher presence because the connection edit point is on top of connector.\n // TODO: This should be reworked. The connection adorner should be one for all selected connections and should be hit tested prior the connections and shapes itself.\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\n return hit || this._hitTestElements(point);\n },\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\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\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\n // Routing =========================================\n\n /**\n * Base class for connection routers.\n */\n var ConnectionRouterBase = kendo.Class.extend({\n init: function() {\n }\n /*route: function (connection) {\n },\n hitTest: function (p) {\n\n },\n getBounds: function () {\n\n }*/\n });\n\n /**\n * Base class for polyline and cascading routing.\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 /**\n * Hit testing for polyline paths.\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\n /**\n * Bounds of a polyline.\n * @returns {kendo.dataviz.diagram.Rect}\n */\n getBounds: function() {\n var points = this.connection.allPoints(),\n s = points[0],\n e = points[points.length - 1],\n right = Math.max(s.x, e.x),\n left = Math.min(s.x, e.x),\n top = Math.min(s.y, e.y),\n bottom = Math.max(s.y, e.y);\n\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\n return new Rect(left, top, right - left, bottom - top);\n }\n });\n\n /**\n * A simple poly-linear routing which does not alter the intermediate points.\n * Does hold the underlying hit, bounds....logic.\n * @type {*|Object|void|extend|Zepto.extend|b.extend}\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 // just keep the points as is\n }\n });\n\n var CascadingRouter = LinearConnectionRouter.extend({\n SAME_SIDE_DISTANCE_RATIO: 5,\n\n init: function(connection) {\n var that = this;\n LinearConnectionRouter.fn.init.call(that);\n this.connection = connection;\n },\n\n routePoints: function(start, end, sourceConnector, targetConnector) {\n var result;\n\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\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\n _connectorSides: [{\n name: \"Top\",\n axis: \"y\",\n boundsPoint: \"topLeft\",\n secondarySign: 1\n }, {\n name: \"Left\",\n axis: \"x\",\n boundsPoint: \"topLeft\",\n secondarySign: 1\n }, {\n name: \"Bottom\",\n axis: \"y\",\n boundsPoint: \"bottomRight\",\n secondarySign: -1\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 &&\n (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\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\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\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 = [new Point(start.x, pointY), new Point(end.x, pointY)];\n } else {\n result = [new Point(start.x, start.y + deltaY / 2), new Point(end.x, start.y + deltaY / 2)];\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 = [new Point(pointX, start.y), new Point(pointX, end.y)];\n } else {\n result = [new Point(start.x + deltaX / 2, start.y), new Point(start.x + deltaX / 2, start.y + deltaY)];\n }\n } else {\n result = [new Point(end.x, start.y)];\n }\n }\n return result;\n },\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 = [start, start, end, end];\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\n // note that this is more generic than needed for only two intermediate points.\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 }\n else {\n shiftX = 0;\n shiftY = deltaY / ((length - 1) / 2);\n }\n }\n else {\n if (idx % 2 !== 0) {\n shiftX = 0;\n shiftY = deltaY / (length / 2);\n }\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 // need to fix the wrong 1.5 factor of the last intermediate point\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\n return [points[1], 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\n return horizontal;\n }\n });\n\n // Adorners =========================================\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 });\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\n options: {\n handles: {}\n },\n\n _getCursor: function() {\n return Cursors.move;\n },\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\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\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\n if (this.handle === -1) {\n this.connection.source(target);\n } else if (this.handle === 1) {\n this.connection.target(target);\n }\n\n this.handle = undefined$1;\n this._ts._connectionManipulation();\n return new ConnectionEditUndoUnit(this.connection, this._initialSource, this._initialTarget);\n },\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\n if (sourceHandle && (!targetHandle || sourcePointDistance < targetPointDistance)) {\n handle = -1;\n } else if (targetHandle && (!sourceHandle || targetPointDistance < sourcePointDistance)) {\n handle = 1;\n }\n\n return handle;\n },\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\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\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\n _clearVisual: function() {\n var that = this;\n if (that.diagram._cachedTouchTarget) {\n that._keepCachedTouchTarget();\n } else {\n that.visual.clear();\n }\n },\n\n _keepCachedTouchTarget: function() {\n var that = this,\n 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\n destroy: function() {\n var that = this;\n that.diagram.unbind(ITEMBOUNDSCHANGE, that._refreshHandler);\n that.shape = undefined$1;\n that._visible = undefined$1;\n that.visual.visible(false);\n },\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\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\n function hitToOppositeSide(hit, bounds) {\n var result;\n\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\n return result;\n }\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\n that._initSelection();\n that._createHandles();\n that.redraw();\n that.diagram.bind(\"select\", function(e) {\n that._initialize(e.selected);\n });\n\n that._refreshHandler = function() {\n if (!that._internalChange) {\n that.refreshBounds();\n that.refresh();\n }\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\n that.diagram.bind(ITEMBOUNDSCHANGE, that._refreshHandler).bind(ITEMROTATE, that._rotatedHandler);\n that.refreshBounds();\n that.refresh();\n },\n\n options: {\n handles: {\n fill: {\n color: \"#fff\"\n },\n stroke: {\n color: \"#282828\"\n },\n height: 7,\n width: 7,\n hover: {\n fill: {\n color: \"#282828\"\n },\n stroke: {\n color: \"#282828\"\n }\n }\n },\n selectable: {\n stroke: {\n color: \"#778899\",\n width: 1,\n dashType: \"dash\"\n },\n fill: {\n color: TRANSPARENT\n }\n },\n offset: 10\n },\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\n _resizable: function() {\n return this.options.editable && this.options.editable.resize !== false;\n },\n\n _handleOptions: function() {\n return (this.options.editable.resize || {}).handles || this.options.handles;\n },\n\n _createHandles: function() {\n var handles, item, y, x;\n\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)) { // (0, 0) element, (-1, -1) top-left, (+1, +1) bottom-right\n item = new Rectangle(handles);\n item.drawingElement._hover = this._hover.bind(this);\n this.map.push({ x: x, y: y, visual: item });\n this.visual.append(item);\n }\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\n _hitTest: function(p) {\n var tp = this.diagram.modelToLayer(p),\n i, hit, handleBounds, handlesCount = this.map.length, handle;\n\n if (this._angle) {\n tp = tp.clone().rotate(this._bounds.center(), this._angle);\n }\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); //local coordinates\n handleBounds.offset(this._bounds.x, this._bounds.y);\n if (handleBounds.contains(tp)) {\n return hit;\n }\n }\n }\n\n if (this._bounds.contains(tp)) {\n return new Point(0, 0);\n }\n },\n\n _getHandleBounds: function(p) {\n if (this._resizable()) {\n var handles = this._handleOptions(),\n w = handles.width,\n h = handles.height,\n r = new Rect(0, 0, w, h);\n\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.0 - w / 2;\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.0 - h / 2;\n }\n\n return r;\n }\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\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\n _initialize: function() {\n var that = this, i, item,\n items = that.diagram.select();\n\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\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\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\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\n _hover: function(value, element) {\n if (this._resizable()) {\n var handleOptions = this._handleOptions(),\n hover = handleOptions.hover,\n stroke = handleOptions.stroke,\n fill = handleOptions.fill;\n\n if (value && Utils.isDefined(hover.stroke)) {\n stroke = deepExtend({}, stroke, hover.stroke);\n }\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\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\n redraw: function() {\n var i, handle,\n visibleHandles = this._resizable();\n\n for (i = 0; i < this.map.length; i++) {\n handle = this.map[i];\n handle.visual.visible(visibleHandles);\n }\n },\n\n angle: function(value) {\n if (defined(value)) {\n this._angle = value;\n }\n\n return this._angle;\n },\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\n move: function(handle, p) {\n var delta, dragging,\n dtl = new Point(),\n dbr = new Point(),\n bounds, center, shape,\n i, angle, newBounds,\n changed = 0, staticPoint,\n scaleX, scaleY;\n\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 // threshold\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\n if (this.isDragHandle(handle)) {\n dbr = dtl = delta; // dragging\n dragging = true;\n } else {\n if (this._angle) { // adjust the delta so that resizers resize in the correct direction after rotation.\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\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\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(); // fixes the new rotation 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) { // if we up-size very small shape\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); // forces the rotation to update it's rotation center\n }\n changed += 1;\n }\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\n this._positions();\n }\n\n this._cp = p;\n },\n\n isDragHandle: function(handle) {\n return handle.x === 0 && handle.y === 0;\n },\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$1;\n this._internalChange = undefined$1;\n this._rotating = undefined$1;\n },\n\n _truncatePositionToGuides: function(bounds) {\n if (this.diagram.ruler) {\n return this.diagram.ruler.truncatePositionToGuides(bounds);\n }\n return bounds;\n },\n\n _truncateSizeToGuides: function(bounds) {\n if (this.diagram.ruler) {\n return this.diagram.ruler.truncateSizeToGuides(bounds);\n }\n return bounds;\n },\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\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\n snapOptions: function() {\n var editable = this.diagram.options.editable;\n var snap = ((editable || {}).drag || {}).snap || {};\n return snap;\n },\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\n _displaceBounds: function(bounds, dtl, dbr, dragging) {\n var tl = bounds.topLeft().plus(dtl),\n br = bounds.bottomRight().plus(dbr),\n newBounds = Rect.fromPoints(tl, br),\n 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\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\n this._manipulating = undefined$1;\n this._internalChange = undefined$1;\n this._rotating = undefined$1;\n return unit;\n },\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\n refreshBounds: function() {\n var bounds = this.shapes.length == 1 ?\n this.shapes[0].bounds().clone() :\n this.diagram.boundingBox(this.shapes, true);\n\n this.bounds(bounds);\n },\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\n var center = new Point(bounds.width / 2, bounds.height / 2);\n this.visual.rotate(this._angle, center);\n this.rect.redraw({ width: bounds.width, height: bounds.height });\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\n var Selector = Class.extend({\n init: function(diagram) {\n var selectable = diagram.options.selectable;\n this.options = deepExtend({}, this.options, selectable);\n\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: {\n color: TRANSPARENT\n }\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$1;\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({ height: visualBounds.height + 1, 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,\n hover = options.hover,\n stroke = options.stroke,\n fill = options.fill;\n\n if (value && Utils.isDefined(hover.stroke)) {\n stroke = deepExtend({}, stroke, hover.stroke);\n }\n\n if (value && Utils.isDefined(hover.fill)) {\n fill = hover.fill;\n }\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()),\n relative = p.minus(this._c.shape.bounds(\"transformed\").topLeft()),\n 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\n function canDrag(element) {\n var editable = element.options.editable;\n return editable && editable.drag !== false;\n }\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\n function noMeta(meta) {\n return meta.ctrlKey === false && meta.altKey === false && meta.shiftKey === false;\n }\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\n (function($, undefined$1) {\n var kendo = window.kendo,\n diagram = kendo.dataviz.diagram,\n Graph = diagram.Graph,\n Node = diagram.Node,\n Link = diagram.Link,\n deepExtend = kendo.deepExtend,\n Size = diagram.Size,\n Rect = diagram.Rect,\n Dictionary = diagram.Dictionary,\n Set = diagram.Set,\n HyperTree = diagram.Graph,\n Utils = diagram.Utils,\n Point = diagram.Point,\n EPSILON = 1e-06,\n DEG_TO_RAD = Math.PI / 180,\n contains = Utils.contains,\n grep = $.grep;\n\n /**\n * Base class for layout algorithms.\n * @type {*}\n */\n var LayoutBase = kendo.Class.extend({\n defaultOptions: {\n type: \"Tree\",\n subtype: \"Down\",\n roots: null,\n animate: false,\n //-------------------------------------------------------------------\n /**\n * Force-directed option: whether the motion of the nodes should be limited by the boundaries of the diagram surface.\n */\n limitToView: false,\n /**\n * Force-directed option: the amount of friction applied to the motion of the nodes.\n */\n friction: 0.9,\n /**\n * Force-directed option: the optimal distance between nodes (minimum energy).\n */\n nodeDistance: 50,\n /**\n * Force-directed option: the number of time things are being calculated.\n */\n iterations: 300,\n //-------------------------------------------------------------------\n /**\n * Tree option: the separation in one direction (depends on the subtype what direction this is).\n */\n horizontalSeparation: 90,\n /**\n * Tree option: the separation in the complementary direction (depends on the subtype what direction this is).\n */\n verticalSeparation: 50,\n\n //-------------------------------------------------------------------\n /**\n * Tip-over tree option: children-to-parent vertical distance.\n */\n underneathVerticalTopOffset: 15,\n /**\n * Tip-over tree option: children-to-parent horizontal distance.\n */\n underneathHorizontalOffset: 15,\n /**\n * Tip-over tree option: leaf-to-next-branch vertical distance.\n */\n underneathVerticalSeparation: 15,\n //-------------------------------------------------------------------\n /**\n * Settings object to organize the different components of the diagram in a grid layout structure\n */\n grid: {\n /**\n * The width of the grid in which components are arranged. Beyond this width a component will be on the next row.\n */\n width: 1500,\n /**\n * The left offset of the grid.\n */\n offsetX: 50,\n /**\n * The top offset of the grid.\n */\n offsetY: 50,\n /**\n * The horizontal padding within a cell of the grid where a single component resides.\n */\n componentSpacingX: 20,\n /**\n * The vertical padding within a cell of the grid where a single component resides.\n */\n componentSpacingY: 20\n },\n\n //-------------------------------------------------------------------\n /**\n * Layered option: the separation height/width between the layers.\n */\n layerSeparation: 50,\n /**\n * Layered option: how many rounds of shifting and fine-tuning.\n */\n layeredIterations: 2,\n /**\n * Tree-radial option: the angle at which the layout starts.\n */\n startRadialAngle: 0,\n /**\n * Tree-radial option: the angle at which the layout starts.\n */\n endRadialAngle: 360,\n /**\n * Tree-radial option: the separation between levels.\n */\n radialSeparation: 150,\n /**\n * Tree-radial option: the separation between the root and the first level.\n */\n radialFirstLevelSeparation: 200,\n /**\n * Tree-radial option: whether a virtual roots bing the components in one radial layout.\n */\n keepComponentsInOneRadialLayout: false,\n //-------------------------------------------------------------------\n\n // TODO: ensure to change this to false when containers are around\n ignoreContainers: true,\n layoutContainerChildren: false,\n ignoreInvisible: true,\n animateTransitions: false\n },\n init: function() {\n },\n\n /**\n * Organizes the components in a grid.\n * Returns the final set of nodes (not the Graph).\n * @param components\n */\n gridLayoutComponents: function(components) {\n if (!components) {\n throw \"No components supplied.\";\n }\n\n // calculate and cache the bounds of the components\n Utils.forEach(components, function(c) {\n c.calcBounds();\n });\n\n // order by decreasing width\n components.sort(function(a, b) {\n return b.bounds.width - a.bounds.width;\n });\n\n var maxWidth = this.options.grid.width,\n offsetX = this.options.grid.componentSpacingX,\n offsetY = this.options.grid.componentSpacingY,\n height = 0,\n startX = this.options.grid.offsetX,\n startY = this.options.grid.offsetY,\n x = startX,\n y = startY,\n i,\n resultLinkSet = [],\n resultNodeSet = [];\n\n while (components.length > 0) {\n if (x >= maxWidth) {\n // start a new row\n x = startX;\n y += height + offsetY;\n // reset the row height\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]); // to be returned in the end\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\n if (currentHeight >= height) {\n height = currentHeight;\n }\n x += currentWidth + offsetX;\n }\n\n return {\n nodes: resultNodeSet,\n links: resultLinkSet\n };\n },\n\n moveToOffset: function(component, p) {\n var i, j,\n bounds = component.bounds,\n deltax = p.x - bounds.x,\n deltay = p.y - bounds.y;\n\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\n transferOptions: function(options) {\n\n // Size options lead to stackoverflow and need special handling\n\n this.options = kendo.deepExtend({}, this.defaultOptions);\n if (Utils.isUndefined(options)) {\n return;\n }\n\n this.options = kendo.deepExtend(this.options, options || {});\n }\n });\n\n /**\n * The data bucket a hypertree holds in its nodes. *\n * @type {*}\n */\n /* var ContainerGraph = kendo.Class.extend({\n init: function (diagram) {\n this.diagram = diagram;\n this.graph = new Graph(diagram);\n this.container = null;\n this.containerNode = null;\n }\n\n });*/\n\n /**\n * Adapter between the diagram control and the graph representation. It converts shape and connections to nodes and edges taking into the containers and their collapsef state,\n * the visibility of items and more. If the layoutContainerChildren is true a hypertree is constructed which holds the hierarchy of containers and many conditions are analyzed\n * to investigate how the effective graph structure looks like and how the layout has to be performed.\n * @type {*}\n */\n var DiagramToHyperTreeAdapter = kendo.Class.extend({\n init: function(diagram) {\n\n /**\n * The mapping to/from the original nodes.\n * @type {Dictionary}\n */\n this.nodeMap = new Dictionary();\n\n /**\n * Gets the mapping of a shape to a container in case the shape sits in a collapsed container.\n * @type {Dictionary}\n */\n this.shapeMap = new Dictionary();\n\n /**\n * The nodes being mapped.\n * @type {Dictionary}\n */\n this.nodes = [];\n\n /**\n * The connections being mapped.\n * @type {Dictionary}\n */\n this.edges = [];\n\n // the mapping from an edge to all the connections it represents, this can be both because of multiple connections between\n // two shapes or because a container holds multiple connections to another shape or container.\n this.edgeMap = new Dictionary();\n\n /**\n * The resulting set of Nodes when the analysis has finished.\n * @type {Array}\n */\n this.finalNodes = [];\n\n /**\n * The resulting set of Links when the analysis has finished.\n * @type {Array}\n */\n this.finalLinks = [];\n\n /**\n * The items being omitted because of multigraph edges.\n * @type {Array}\n */\n this.ignoredConnections = [];\n\n /**\n * The items being omitted because of containers, visibility and other factors.\n * @type {Array}\n */\n this.ignoredShapes = [];\n\n /**\n * The map from a node to the partition/hypernode in which it sits. This hyperMap is null if 'options.layoutContainerChildren' is false.\n * @type {Dictionary}\n */\n this.hyperMap = new Dictionary();\n\n /**\n * The hypertree contains the hierarchy defined by the containers.\n * It's in essence a Graph of Graphs with a tree structure defined by the hierarchy of containers.\n * @type {HyperTree}\n */\n this.hyperTree = new Graph();\n\n /**\n * The resulting graph after conversion. Note that this does not supply the information contained in the\n * ignored connection and shape collections.\n * @type {null}\n */\n this.finalGraph = null;\n\n this.diagram = diagram;\n },\n\n /**\n * The hyperTree is used when the 'options.layoutContainerChildren' is true. It contains the hierarchy of containers whereby each node is a ContainerGraph.\n * This type of node has a Container reference to the container which holds the Graph items. There are three possible situations during the conversion process:\n * - Ignore the containers: the container are non-existent and only normal shapes are mapped. If a shape has a connection to a container it will be ignored as well\n * since there is no node mapped for the container.\n * - Do not ignore the containers and leave the content of the containers untouched: the top-level elements are being mapped and the children within a container are not altered.\n * - Do not ignore the containers and organize the content of the containers as well: the hypertree is constructed and there is a partitioning of all nodes and connections into the hypertree.\n * The only reason a connection or node is not being mapped might be due to the visibility, which includes the visibility change through a collapsed parent container.\n * @param options\n */\n convert: function(options) {\n\n if (Utils.isUndefined(this.diagram)) {\n throw \"No diagram to convert.\";\n }\n\n this.options = kendo.deepExtend({\n ignoreInvisible: true,\n ignoreContainers: true,\n layoutContainerChildren: false\n },\n options || {}\n );\n\n this.clear();\n // create the nodes which participate effectively in the graph analysis\n this._renormalizeShapes();\n\n // recreate the incoming and outgoing collections of each and every node\n this._renormalizeConnections();\n\n // export the resulting graph\n this.finalNodes = new Dictionary(this.nodes);\n this.finalLinks = new Dictionary(this.edges);\n\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\n /**\n * Maps the specified connection to an edge of the graph deduced from the given diagram.\n * @param connection\n * @returns {*}\n */\n mapConnection: function(connection) {\n return this.edgeMap.get(connection.id);\n },\n\n /**\n * Maps the specified shape to a node of the graph deduced from the given diagram.\n * @param shape\n * @returns {*}\n */\n mapShape: function(shape) {\n return this.nodeMap.get(shape.id);\n },\n\n /**\n * Gets the edge, if any, between the given nodes.\n * @param a\n * @param b\n */\n getEdge: function(a, b) {\n return Utils.first(a.links, function(link) {\n return link.getComplement(a) === b;\n });\n },\n\n /**\n * Clears all the collections used by the conversion process.\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\n /**\n * The path from a given ContainerGraph to the root (container).\n * @param containerGraph\n * @returns {Array}\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\n firstNonIgnorableContainer: function(shape) {\n\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\n /**\n * Returns true if the given shape is a direct child or a nested container child of the given container.\n * If the given container and shape are the same this will return false since a shape cannot be its own child.\n * @param scope\n * @param a\n * @returns {boolean}\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\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 }\n else {\n return shape.isCollapsed && !this._isTop(shape);\n }\n },\n\n /**\n * Determines whether the shape is or needs to be mapped to another shape. This occurs essentially when the shape sits in\n * a collapsed container hierarchy and an external connection needs a node endpoint. This node then corresponds to the mapped shape and is\n * necessarily a container in the parent hierarchy of the shape.\n * @param shape\n */\n isShapeMapped: function(shape) {\n return shape.isCollapsed && !this._isVisible(shape) && !this._isTop(shape);\n },\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\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 }\n else {\n return grep(this.hyperTree.nodes, function(n) {\n return n.data.container === found;\n });\n }\n },\n /**\n * Determines whether the specified item is a top-level shape or container.\n * @param item\n * @returns {boolean}\n * @private\n */\n _isTop: function(item) {\n return !item.parentContainer;\n },\n\n /**\n * Determines iteratively (by walking up the container stack) whether the specified shape is visible.\n * This does NOT tell whether the item is not visible due to an explicit Visibility change or due to a collapse state.\n * @param shape\n * @returns {*}\n * @private\n */\n _isVisible: function(shape) {\n\n if (!shape.visible()) {\n return false;\n }\n return !shape.parentContainer ? shape.visible() : this._isVisible(shape.parentContainer);\n },\n\n _isCollapsed: function(shape) {\n\n if (shape.isContainer && shape.isCollapsed) {\n return true;\n }\n return shape.parentContainer && this._isCollapsed(shape.parentContainer);\n },\n\n /**\n * First part of the graph creation; analyzing the shapes and containers and deciding whether they should be mapped to a Node.\n * @private\n */\n _renormalizeShapes: function() {\n // add the nodes, the adjacency structure will be reconstructed later on\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\n // if not visible (and ignoring the invisible ones) or a container we skip\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\n // the mapping will always contain singletons and the hyperTree will be null\n this.nodeMap.add(shape.id, node);\n this.nodes.push(node);\n }\n }\n else {\n throw \"Containers are not supported yet, but stay tuned.\";\n }\n },\n\n /**\n * Second part of the graph creation; analyzing the connections and deciding whether they should be mapped to an edge.\n * @private\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\n if (this.isIgnorableItem(conn)) {\n this.ignoredConnections.push(conn);\n continue;\n }\n\n var source = !conn.sourceConnector ? null : conn.sourceConnector.shape;\n var sink = !conn.targetConnector ? null : conn.targetConnector.shape;\n\n // no layout for floating connections\n if (!source || !sink) {\n this.ignoredConnections.push(conn);\n continue;\n }\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\n // if the endpoint sits in a collapsed container we need the container rather than the shape itself\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\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\n if (sourceNode === null || sinkNode === null) {\n throw \"A shape was not mapped to a node.\";\n }\n if (this.options.ignoreContainers) {\n // much like a floating connection here since at least one end is attached to a container\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\n this.edgeMap.add(conn.id, newEdge);\n this.edges.push(newEdge);\n }\n else {\n throw \"Containers are not supported yet, but stay tuned.\";\n }\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 /**\n * Depth-first traversal of the given container.\n * @param container\n * @param action\n * @param includeStart\n * @private\n */\n /* _visitContainer: function (container, action, includeStart) {\n\n *//*if (container == null) throw new ArgumentNullException(\"container\");\n if (action == null) throw new ArgumentNullException(\"action\");\n if (includeStart) action(container);\n if (container.children.isEmpty()) return;\n foreach(\n var item\n in\n container.children.OfType < IShape > ()\n )\n {\n var childContainer = item\n as\n IContainerShape;\n if (childContainer != null) this.VisitContainer(childContainer, action);\n else action(item);\n }*//*\n }*/\n\n\n });\n\n /**\n * The classic spring-embedder (aka force-directed, Fruchterman-Rheingold, barycentric) algorithm.\n * http://en.wikipedia.org/wiki/Force-directed_graph_drawing\n * - Chapter 12 of Tamassia et al. \"Handbook of graph drawing and visualization\".\n * - Kobourov on preprint arXiv; http://arxiv.org/pdf/1201.3011.pdf\n * - Fruchterman and Rheingold in SOFTWARE-PRACTICE AND EXPERIENCE, VOL. 21(1 1), 1129-1164 (NOVEMBER 1991)\n * @type {*}\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\n layout: function(options) {\n\n this.transferOptions(options);\n\n var adapter = new DiagramToHyperTreeAdapter(this.diagram);\n var graph = adapter.convert(options);\n if (graph.isEmpty()) {\n return;\n }\n // split into connected components\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\n layoutGraph: function(graph, options) {\n\n if (Utils.isDefined(options)) {\n this.transferOptions(options);\n }\n this.graph = graph;\n\n var initialTemperature = this.options.nodeDistance * 9;\n this.temperature = initialTemperature;\n\n var guessBounds = this._expectedBounds();\n this.width = guessBounds.width;\n this.height = guessBounds.height;\n\n for (var step = 0; step < this.options.iterations; step++) {\n this.refineStage = step >= this.options.iterations * 5 / 6;\n this.tick();\n // exponential cooldown\n this.temperature = this.refineStage ?\n initialTemperature / 30 :\n initialTemperature * (1 - step / (2 * this.options.iterations ));\n }\n },\n\n /**\n * Single iteration of the simulation.\n */\n tick: function() {\n var i;\n // collect the repulsive forces on each node\n for (i = 0; i < this.graph.nodes.length; i++) {\n this._repulsion(this.graph.nodes[i]);\n }\n\n // collect the attractive forces on each node\n for (i = 0; i < this.graph.links.length; i++) {\n this._attraction(this.graph.links[i]);\n }\n // update the positions\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\n /**\n * Shakes the node away from its current position to escape the deadlock.\n * @param node A Node.\n * @private\n */\n _shake: function(node) {\n // just a simple polar neighborhood\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\n /**\n * The typical Coulomb-Newton force law F=k/r^2\n * @remark This only works in dimensions less than three.\n * @param d\n * @param n A Node.\n * @param m Another Node.\n * @returns {number}\n * @private\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 }\n else {\n var deltax = n.x - m.x;\n var deltay = n.y - m.y;\n\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\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\n /**\n * The typical Hooke force law F=kr^2\n * @param d\n * @param n\n * @param m\n * @returns {number}\n * @private\n */\n _SquareForce: function(d, n, m) {\n return 1 / this._InverseSquareForce(d, n, m);\n },\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 // loops induce endless shakes\n return;\n }\n while (s.x === t.x && s.y === t.y) {\n this._shake(t);\n }\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\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\n /**\n * Calculates the expected bounds after layout.\n * @returns {*}\n * @private\n */\n _expectedBounds: function() {\n\n var size, N = this.graph.nodes.length, /*golden ration optimal?*/ 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 { width: width * multiplier, height: height * multiplier };\n }\n\n });\n\n var TreeLayoutProcessor = kendo.Class.extend({\n\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\n if (!contains(this.graph.nodes, root)) {\n throw \"The given root is not in the graph.\";\n }\n\n this.center = root;\n this.graph.cacheRelationships();\n /* var nonull = this.graph.nodes.where(function (n) {\n return n.associatedShape != null;\n });*/\n\n // transfer the rects\n /*nonull.forEach(function (n) {\n n.Location = n.associatedShape.Position;\n n.NodeSize = n.associatedShape.ActualBounds.ToSize();\n }\n\n );*/\n\n // caching the children\n /* nonull.forEach(function (n) {\n n.children = n.getChildren();\n });*/\n\n this.layoutSwitch();\n\n // apply the layout to the actual visuals\n // nonull.ForEach(n => n.associatedShape.Position = n.Location);\n },\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\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\n this.arrange(node, p);\n y += node.Size.height + this.options.verticalSeparation;\n }\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\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\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\n w -= this.options.horizontalSeparation;\n var x = this.center.x + (this.center.width / 2) - (w / 2);\n\n // y = this.center.y -verticalSeparation -this.center.height/2 - h;\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\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\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\n layoutRadialTree: function() {\n // var rmax = children.Aggregate(0D, (current, node) => Math.max(node.SectorAngle, current));\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\n this.maxDepth = 0;\n this.origin = new Point(this.center.x, this.center.y);\n this.calculateAngularWidth(this.center, 0);\n\n // perform the layout\n if (this.maxDepth > 0) {\n this.radialLayout(this.center, this.options.radialFirstLevelSeparation, startAngle, endAngle);\n }\n\n // update properties of the root node\n this.center.Angle = endAngle - startAngle;\n },\n\n tipOverTree: function(down, startFromLevel) {\n if (Utils.isUndefined(startFromLevel)) {\n startFromLevel = 0;\n }\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\n // if (node.IsSpecial) continue;\n node.TreeDirection = \"Down\";\n var s = this.measure(node, Size.Empty);\n w += s.width + this.options.horizontalSeparation;\n }\n\n w -= this.options.horizontalSeparation;\n\n // putting the root in the center with respect to the whole diagram is not a nice result, let's put it with respect to the first level only\n w -= down[down.length - 1].width;\n w += down[down.length - 1].associatedShape.bounds().width;\n\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 // if (node.IsSpecial) continue;\n var p = new Point(x, y);\n this.arrange(node, p);\n x += node.Size.width + this.options.horizontalSeparation;\n }\n\n /*//let's place the special node, assuming there is only one\n if (down.Count(n => n.IsSpecial) > 0)\n {\n var special = (from n in down where n.IsSpecial select n).First();\n if (special.Children.Count > 0)\n throw new DiagramException(\"The 'special' element should not have children.\");\n special.Data.Location = new Point(Center.Data.Location.X + Center.AssociatedShape.BoundingRectangle.Width + this.options.HorizontalSeparation, Center.Data.Location.Y);\n }*/\n },\n calculateAngularWidth: function(n, d) {\n if (d > this.maxDepth) {\n this.maxDepth = d;\n }\n\n var aw = 0, w = 1000, h = 1000, diameter = d === 0 ? 0 : Math.sqrt((w * w) + (h * h)) / d;\n\n if (n.children.length > 0) {\n // eventually with n.IsExpanded\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 }\n else {\n aw = diameter;\n }\n\n n.sectorAngle = aw;\n return aw;\n },\n sortChildren: function(n) {\n var basevalue = 0, i;\n\n // update basevalue angle for node ordering\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\n var count = n.children.length;\n if (count === 0) {\n return null;\n }\n\n var angle = [];\n var idx = [];\n\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\n Utils.bisort(angle, idx);\n var col = []; // list of nodes\n var children = n.children;\n for (i = 0; i < count; ++i) {\n col.push(children[idx[i]]);\n }\n\n return col;\n },\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.0;\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,\n radius + this.options.radialSeparation,\n startAngle + (fraction * deltaTheta),\n startAngle + ((fraction + childAngleFraction) * deltaTheta));\n }\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\n /**\n * Sets the children direction recursively.\n * @param node\n * @param direction\n * @param includeStart\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\n /**\n * Sets the children layout recursively.\n * @param node\n * @param layout\n * @param includeStart\n * @param startFromLevel\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 // assign levels to the Node.Level property\n this.graph.assignLevels(node);\n\n // assign the layout on the condition that the level is at least the 'startFromLevel'\n this.graph.depthFirstTraversal(\n node, function(s) {\n if (s.level >= startFromLevel + 1) {\n s.childrenLayout = layout;\n }\n }\n );\n }\n else {\n this.graph.depthFirstTraversal(node, function(s) {\n s.childrenLayout = layout;\n });\n\n // if the start should not be affected we put the state back\n if (!includeStart) {\n node.childrenLayout = rootLayout;\n }\n }\n },\n\n /**\n * Returns the actual size of the node. The given size is the allowed space wherein the node can lay out itself.\n * @param node\n * @param givenSize\n * @returns {Size}\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\n var parent = node.parents[0];\n if (node.treeDirection === \"Undefined\") {\n node.treeDirection = parent.treeDirection;\n }\n\n if (Utils.isEmpty(node.children)) {\n result = new Size(\n Math.abs(shapeWidth) < EPSILON ? 50 : shapeWidth,\n Math.abs(shapeHeight) < EPSILON ? 25 : shapeHeight);\n }\n else if (node.children.length === 1) {\n switch (node.treeDirection) {\n case \"Radial\":\n s = this.measure(node.children[0], givenSize); // child size\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\n case \"TopAlignedWithParent\":\n break;\n\n case \"BottomAlignedWithParent\":\n break;\n\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\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\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\n case \"TopAlignedWithParent\":\n case \"BottomAlignedWithParent\":\n break;\n\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\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\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\n result = new Size(w, h);\n }\n else {\n var i, childNode;\n switch (node.treeDirection) {\n case \"Left\":\n case \"Right\":\n switch (node.childrenLayout) {\n\n case \"TopAlignedWithParent\":\n case \"BottomAlignedWithParent\":\n break;\n\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\n h -= this.options.underneathVerticalSeparation;\n break;\n\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\n default:\n throw \"Unhandled TreeDirection in the Right layout measuring.\";\n }\n\n break;\n case \"Up\":\n case \"Down\":\n\n switch (node.childrenLayout) {\n\n case \"TopAlignedWithParent\":\n case \"BottomAlignedWithParent\":\n break;\n\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\n h -= this.options.underneathVerticalSeparation;\n break;\n\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\n w -= this.options.horizontalSeparation;\n break;\n\n default:\n throw \"Unhandled TreeDirection in the Down layout measuring.\";\n }\n\n break;\n default:\n throw \"Unhandled TreeDirection in the layout measuring.\";\n }\n\n result = new Size(w, h);\n }\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 }\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\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\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; // alignment of children\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\n default:\n throw \"Unsupported TreeDirection\";\n }\n\n break;\n case \"Right\":\n switch (n.childrenLayout) {\n case \"TopAlignedWithParent\":\n case \"BottomAlignedWithParent\":\n break;\n\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\n // alignment of children left-underneath the parent\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\n break;\n\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; // alignment of children\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\n default:\n throw \"Unsupported TreeDirection\";\n }\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 // means there is an aberration due to the oversized Element with respect to the children\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 }\n else {\n x = p.x;\n }\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\n case \"Down\":\n\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; // alignment of children left-underneath the parent\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\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 // means there is an aberration due to the oversized Element with respect to the children\n for (i = 0; i < n.children.length; i++) {\n child = n.children[i];\n childrenwidth += child.Size.width + this.options.horizontalSeparation;\n }\n\n childrenwidth -= this.options.horizontalSeparation;\n x = p.x + ((shapeWidth - childrenwidth) / 2);\n }\n else {\n x = p.x;\n }\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\n default:\n throw \"Unsupported TreeDirection\";\n }\n break;\n\n case \"None\":\n break;\n\n default:\n throw \"Unsupported TreeDirection\";\n }\n }\n },\n layoutSwitch: function() {\n if (!this.center) {\n return;\n }\n\n if (Utils.isEmpty(this.center.children)) {\n return;\n }\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\n case \"mindmaphorizontal\":\n case \"mindmap\":\n single = this.center.children;\n\n if (this.center.children.length === 1) {\n this.layoutRight(single);\n }\n else {\n // odd number will give one more at the right\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\n this.layoutLeft(male);\n this.layoutRight(female);\n }\n break;\n\n case \"mindmapvertical\":\n single = this.center.children;\n\n if (this.center.children.length === 1) {\n this.layoutDown(single);\n }\n else {\n // odd number will give one more at the right\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\n case \"right\":\n this.layoutRight(this.center.children);\n break;\n\n case \"left\":\n this.layoutLeft(this.center.children);\n break;\n\n case \"up\":\n case \"bottom\":\n this.layoutUp(this.center.children);\n break;\n\n case \"down\":\n case \"top\":\n this.layoutDown(this.center.children);\n break;\n\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\n case \"undefined\":\n case \"none\":\n break;\n }\n }\n });\n\n /**\n * The various tree layout algorithms.\n * @type {*}\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\n /**\n * Arranges the diagram in a tree-layout with the specified options and tree subtype.\n */\n layout: function(options) {\n\n this.transferOptions(options);\n\n // transform the diagram into a Graph\n var adapter = new DiagramToHyperTreeAdapter(this.diagram);\n\n /**\n * The Graph reduction from the given diagram.\n * @type {*}\n */\n this.graph = adapter.convert();\n\n var finalNodeSet = this.layoutComponents();\n\n // note that the graph contains the original data and\n // the components are another instance of nodes referring to the same set of shapes\n return new diagram.LayoutState(this.diagram, finalNodeSet);\n },\n\n layoutComponents: function() {\n if (this.graph.isEmpty()) {\n return;\n }\n\n // split into connected components\n var components = this.graph.getConnectedComponents();\n if (Utils.isEmpty(components)) {\n return;\n }\n\n var layout = new TreeLayoutProcessor(this.options);\n var trees = [];\n // find a spanning tree for each component\n for (var i = 0; i < components.length; i++) {\n var component = components[i];\n\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\n trees.push(tree);\n }\n\n return this.gridLayoutComponents(trees);\n\n },\n\n /**\n * Gets a spanning tree (and root) for the given graph.\n * Ensure that the given graph is connected!\n * @param graph\n * @returns {*} A literal object consisting of the found root and the spanning tree.\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 // finds the most probable root on the basis of the longest path in the component\n root = graph.root();\n // should not happen really\n if (!root) {\n throw \"Unable to find a root for the tree.\";\n }\n }\n return this.getTreeForRoot(graph, root);\n },\n\n getTreeForRoot: function(graph, root) {\n\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 });\n\n /**\n * The Sugiyama aka layered layout algorithm.\n * @type {*}\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\n layout: function(options) {\n\n this.transferOptions(options);\n\n var adapter = new DiagramToHyperTreeAdapter(this.diagram);\n var graph = adapter.convert(options);\n if (graph.isEmpty()) {\n return;\n }\n // split into connected components\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 },\n\n /**\n * Initializes the runtime data properties of the layout.\n * @private\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\n node.isVirtual = false;\n\n node.uBaryCenter = 0.0;\n node.dBaryCenter = 0.0;\n\n node.upstreamPriority = 0;\n node.downstreamPriority = 0;\n\n node.gridPosition = 0;\n }\n },\n _prepare: function(graph) {\n var current = [], i, l, link;\n\n // defines a mapping of a node to the layer index\n var layerMap = new Dictionary();\n var layerCount = 0;\n var targetLayer, next, target;\n\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\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\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\n if (!contains(current, target)) {\n current.push(target);\n }\n }\n }\n\n var sortedNodes = layerMap.keys();\n\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\n for (var n = 0; n < sortedNodes.length; ++n) {\n var node = sortedNodes[n];\n var minLayer = Number.MAX_VALUE;\n\n if (node.outgoing.length === 0) {\n continue;\n }\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\n if (minLayer > 1) {\n layerMap.set(node, minLayer - 1);\n }\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\n layerMap.forEach(function(node, layer) {\n node.layer = layer;\n this.layers[layer].push(node);\n }, this);\n\n // set initial grid positions\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 /**\n * Performs the layout of a single component.\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\n // sets unique indices on the nodes\n graph.setItemIndices();\n\n // ensures no cycles present for this layout\n var reversedEdges = graph.makeAcyclic();\n\n // define the runtime props being used by the layout algorithm\n this._initRuntimeProperties();\n\n this._prepare(graph, options);\n\n this._dummify();\n\n this._optimizeCrossings();\n\n this._swapPairs();\n\n this.arrangeNodes();\n\n this._moveThingsAround();\n\n this._dedummify();\n\n // re-reverse the links which were switched earlier\n Utils.forEach(reversedEdges, function(e) {\n if (e.points) {\n e.points.reverse();\n }\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\n getMinDist: function(m, n) {\n var dist = 0,\n i1 = m.layerIndex,\n i2 = n.layerIndex,\n l = m.layer,\n min = Math.min(i1, i2),\n max = Math.max(i1, i2);\n // use Sum()?\n for (var k = min; k < max; ++k) {\n dist += this.minDistances[l][k];\n }\n return dist;\n },\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\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\n // adjust class\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\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 }\n else if (D.length % 2 === 1) {\n d = D[this.intDiv(D.length, 2)];\n }\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\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\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\n // adjust class\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\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 }\n else if (D.length % 2 === 1) {\n d = D[this.intDiv(D.length, 2)];\n }\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\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\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\n computeClasses: function(wingPair, d) {\n var currentWing = 0,\n wing = wingPair.value = new Dictionary();\n\n for (var l = 0; l < this.layers.length; ++l) {\n currentWing = l;\n\n var layer = this.layers[l];\n for (var n = d === 1 ? 0 : layer.length - 1; n >= 0 && 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 }\n else {\n currentWing = wing.get(node);\n }\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\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\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 // meaning that the visiting of the layers goes in the natural order of increasing layer index\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 // sort the layers by their grid position\n for (l = 0; l < this.layers.length; ++l) {\n layer = this.layers[l];\n layer.sort(this._gridPositionComparer);\n }\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 }\n else {\n this.minDistances[l][n] += (node.height + layer[n + 1].height) / 2;\n }\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 }\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\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\n var currDown = this.downNodes.get(currentNode)[0];\n if (!currDown.isVirtual) {\n continue;\n }\n\n for (n = w + 1; n < layer.length; ++n) {\n node = layer[n];\n if (!node.isVirtual) {\n continue;\n }\n\n var downNode = this.downNodes.get(node)[0];\n if (!downNode.isVirtual) {\n continue;\n }\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\n\n var leftClasses = this._getLeftWing();\n var rightClasses = this._getRightWing();\n\n\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\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 }\n else if (sequenceStart === n - 1) {\n sequenceStart = n;\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 }\n else {\n placed.set(layer[sequenceStart], false);\n }\n sequenceStart = n;\n }\n }\n }\n }\n var directions = [1, -1];\n Utils.forEach(directions, function(d) {\n var start = d === 1 ? 0 : this.layers.length - 1;\n for (var l = start; l >= 0 && 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 }\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\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 }\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\n\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 }\n else {\n return k >= 0;\n }\n };\n var layerIncrement = this._isIncreasingLayout() ? +1 : -1, offset = 0;\n\n /**\n * Calcs the max height of the given layer.\n */\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 }\n else {\n height = Math.max(height, node.width);\n }\n }\n return height;\n }\n\n for (i = fromLayerIndex; reachedFinalLayerIndex(i, this); i += layerIncrement) {\n layer = this.layers[i];\n var height = maximumHeight(layer, this);\n\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 }\n else {\n node.x = offset + height / 2;\n node.y = x.get(node);\n }\n }\n\n offset += this.options.layerSeparation + height;\n }\n },\n\n adjustDirections: function(l, d, order, placed) {\n if (l + d < 0 || l + d >= this.layers.length) {\n return;\n }\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\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\n _sequencer: function(x, virtualStart, virtualEnd, dir, sequence) {\n if (sequence.length === 1) {\n this._sequenceSingle(x, virtualStart, virtualEnd, dir, sequence[0]);\n }\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\n _sequenceSingle: function(x, virtualStart, virtualEnd, dir, node) {\n var neighbors = dir === -1 ? this.downNodes.get(node) : this.upNodes.get(node);\n\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 }\n else {\n x.set(node, (x.get(neighbors[this.intDiv(n, 2) - 1]) + x.get(neighbors[this.intDiv(n, 2)])) / 2);\n }\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\n combineSequences: function(x, virtualStart, virtualEnd, dir, sequence) {\n var r = sequence.length, t = this.intDiv(r, 2);\n\n // collect left changes\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 }\n else {\n c--;\n leftHeap.push({ k: x.get(neighbor) + this.getMinDist(sequence[i], sequence[t - 1]), v: 2 });\n }\n }\n leftHeap.push({ k: x.get(sequence[i]) + this.getMinDist(sequence[i], sequence[t - 1]), v: c });\n }\n if (virtualStart) {\n leftHeap.push({ k: x.get(virtualStart) + this.getMinDist(virtualStart, sequence[t - 1]), v: Number.MAX_VALUE });\n }\n leftHeap.sort(this._positionDescendingComparer);\n\n // collect right changes\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 }\n else {\n c--;\n rightHeap.push({ k: x.get(neighbor) - this.getMinDist(sequence[i], sequence[t]), v: 2 });\n }\n }\n rightHeap.push({ k: x.get(sequence[i]) - this.getMinDist(sequence[i], sequence[t]), v: c });\n }\n if (virtualEnd) {\n rightHeap.push({ k: x.get(virtualEnd) - this.getMinDist(virtualEnd, sequence[t]), v: Number.MAX_VALUE });\n }\n rightHeap.sort(this._positionAscendingComparer);\n\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 }\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 }\n else {\n if (rightHeap.length === 0) {\n x.set(sequence[t], x.get(sequence[t - 1]) + m);\n break;\n }\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\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\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\n leftSibling: function(node) {\n var layer = this.layers[node.layer],\n layerIndex = node.layerIndex;\n return layerIndex === 0 ? null : layer[layerIndex - 1];\n },\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 },\n\n _getComposite: function(node) {\n return node.isVirtual ? this._nodesInLink(node) : [node];\n },\n\n arrangeNodes: function() {\n var i, l, ni, layer, node;\n // Initialize node's base priority\n for (l = 0; l < this.layers.length; l++) {\n layer = this.layers[l];\n\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\n // Layout is invoked after MinimizeCrossings\n // so we may assume node's barycenters are initially correct\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\n for (i = 0; i < this.layers.length - 1; i++) {\n this.layoutLayer(true, i);\n }\n }\n\n // Offset the whole structure so that there are no gridPositions < 0\n var gridPos = Number.MAX_VALUE;\n for (l = 0; l < this.layers.length; l++) {\n layer = this.layers[l];\n\n for (ni = 0; ni < layer.length; ni++) {\n node = layer[ni];\n gridPos = Math.min(gridPos, node.gridPosition);\n }\n }\n\n if (gridPos < 0) {\n for (l = 0; l < this.layers.length; l++) {\n layer = this.layers[l];\n\n for (ni = 0; ni < layer.length; ni++) {\n node = layer[ni];\n node.gridPosition = node.gridPosition - gridPos;\n }\n }\n }\n },\n\n /// \n /// Layout of a single layer.\n /// \n /// The layer to organize.\n /// If set to true we move down in the layer stack.\n /// \n layoutLayer: function(down, layer) {\n var iconsidered;\n var considered;\n\n if (down) {\n considered = this.layers[iconsidered = layer + 1];\n }\n else {\n considered = this.layers[iconsidered = layer - 1];\n }\n\n // list containing the nodes in the considered layer sorted by priority\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\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\n // each node strives for its barycenter; high priority nodes start first\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\n if (Math.abs(nodeGridPos - nodeBaryCenter) < 0.0001) {\n // This node is exactly at its barycenter -> perfect\n return;\n }\n\n if (Math.abs(nodeGridPos - nodeBaryCenter) < 0.25 + 0.0001) {\n // This node is close enough to the barycenter -> should work\n return;\n }\n\n if (nodeGridPos < nodeBaryCenter) {\n // Try to move the node to the right in an\n // attempt to reach its barycenter\n while (nodeGridPos < nodeBaryCenter) {\n if (!this.moveRight(node, considered, nodePriority)) {\n break;\n }\n\n nodeGridPos = node.gridPosition;\n }\n }\n else {\n // Try to move the node to the left in an\n // attempt to reach its barycenter\n while (nodeGridPos > nodeBaryCenter) {\n if (!this.moveLeft(node, considered, nodePriority)) {\n break;\n }\n\n nodeGridPos = node.gridPosition;\n }\n }\n }, this);\n\n // after the layer has been rearranged we need to recalculate the barycenters\n // of the nodes in the surrounding layers\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\n /// \n /// Moves the node to the right and returns true if this was possible.\n /// \n /// The node.\n /// The layer.\n /// Returns true if the shift was possible, otherwise false.\n moveRight: function(node, layer, priority) {\n var index = Utils.indexOf(layer, node);\n if (index === layer.length - 1) {\n // this is the last node in the layer, so we can move to the right without troubles\n node.gridPosition = node.gridPosition + 0.5;\n return true;\n }\n\n var rightNode = layer[index + 1];\n var rightNodePriority = (rightNode.upstreamPriority + rightNode.downstreamPriority) / 2;\n\n // check if there is space between the right and the current node\n if (rightNode.gridPosition > node.gridPosition + 1) {\n node.gridPosition = node.gridPosition + 0.5;\n return true;\n }\n\n // we have reached a node with higher priority; no movement is allowed\n if (rightNodePriority > priority ||\n Math.abs(rightNodePriority - priority) < 0.0001) {\n return false;\n }\n\n // the right node has lower priority - try to move it\n if (this.moveRight(rightNode, layer, priority)) {\n node.gridPosition = node.gridPosition + 0.5;\n return true;\n }\n\n return false;\n },\n\n /// \n /// Moves the node to the left and returns true if this was possible.\n /// \n /// The node.\n /// The layer.\n /// Returns true if the shift was possible, otherwise false.\n moveLeft: function(node, layer, priority) {\n var index = Utils.indexOf(layer, node);\n if (index === 0) {\n // this is the last node in the layer, so we can move to the left without troubles\n node.gridPosition = node.gridPosition - 0.5;\n return true;\n }\n\n var leftNode = layer[index - 1];\n var leftNodePriority = (leftNode.upstreamPriority + leftNode.downstreamPriority) / 2;\n\n // check if there is space between the left and the current node\n if (leftNode.gridPosition < node.gridPosition - 1) {\n node.gridPosition = node.gridPosition - 0.5;\n return true;\n }\n\n // we have reached a node with higher priority; no movement is allowed\n if (leftNodePriority > priority ||\n Math.abs(leftNodePriority - priority) < 0.0001) {\n return false;\n }\n\n // The left node has lower priority - try to move it\n if (this.moveLeft(leftNode, layer, priority)) {\n node.gridPosition = node.gridPosition - 0.5;\n return true;\n }\n\n return false;\n },\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\n _nodesInLink: function(node) {\n return this.linkToNodeMap.get(this.nodeToLinkMap.get(node));\n },\n\n /// \n /// Inserts dummy nodes to break long links.\n /// \n _dummify: function() {\n this.linkToNodeMap = new Dictionary();\n this.nodeToLinkMap = new Dictionary();\n\n var layer, pos, newNode, node, r, newLink, i, l, links = this.graph.links.slice(0);\n var layers = this.layers;\n\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\n for (l = 0; l < links.length; l++) {\n var link = links[l];\n var o = link.source;\n var d = link.target;\n\n var oLayer = o.layer;\n var dLayer = d.layer;\n var oPos = o.gridPosition;\n var dPos = d.gridPosition;\n\n var step = (dPos - oPos) / Math.abs(dLayer - oLayer);\n\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\n layer = layers[i];\n pos = (i - dLayer) * step + oPos;\n if (pos > layer.length) {\n pos = layer.length;\n }\n\n // check if origin and dest are both last\n if (oPos >= layers[oLayer].length - 1 &&\n dPos >= layers[dLayer].length - 1) {\n pos = layer.length;\n }\n\n // check if origin and destination are both first\n else if (oPos === 0 && dPos === 0) {\n pos = 0;\n }\n\n newNode.layer = i;\n newNode.uBaryCenter = 0.0;\n newNode.dBaryCenter = 0.0;\n newNode.upstreamLinkCount = 0;\n newNode.downstreamLinkCount = 0;\n newNode.gridPosition = pos;\n newNode.isVirtual = true;\n\n Utils.insert(layer, newNode, pos);\n\n // translate rightwards nodes' positions\n for (r = pos + 1; r < layer.length; r++) {\n node = layer[r];\n node.gridPosition = node.gridPosition + 1;\n }\n\n newLink = new Link(p, newNode);\n newLink.depthOfDumminess = 0;\n\n addLinkBetweenLayers(i - 1, i, newLink);\n\n p = newNode;\n\n // add the new node and the new link to the graph\n this.graph._addNode(newNode);\n this.graph.addLink(newLink);\n\n newNode.index = this.graph.nodes.length - 1;\n this.mapVirtualNode(newNode, link);\n }\n\n // set the origin of the real arrow to the last dummy\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\n layer = layers[i];\n pos = (i - oLayer) * step + oPos;\n if (pos > layer.length) {\n pos = layer.length;\n }\n\n // check if origin and dest are both last\n if (oPos >= layers[oLayer].length - 1 &&\n dPos >= layers[dLayer].length - 1) {\n pos = layer.length;\n }\n\n // check if origin and destination are both first\n else if (oPos === 0 && dPos === 0) {\n pos = 0;\n }\n\n newNode.layer = i;\n newNode.uBaryCenter = 0.0;\n newNode.dBaryCenter = 0.0;\n newNode.upstreamLinkCount = 0;\n newNode.downstreamLinkCount = 0;\n newNode.gridPosition = pos;\n newNode.isVirtual = true;\n\n pos &= pos; // truncates to int\n Utils.insert(layer, newNode, pos);\n\n // translate rightwards nodes' positions\n for (r = pos + 1; r < layer.length; r++) {\n node = layer[r];\n node.gridPosition = node.gridPosition + 1;\n }\n\n newLink = new Link(p, newNode);\n newLink.depthOfDumminess = 0;\n addLinkBetweenLayers(i - 1, i, newLink);\n\n p = newNode;\n\n // add the new node and the new link to the graph\n this.graph._addNode(newNode);\n this.graph.addLink(newLink);\n\n newNode.index = this.graph.nodes.length - 1;\n this.mapVirtualNode(newNode, link);\n }\n addLinkBetweenLayers(dLayer - 1, dLayer, link);\n\n // Set the origin of the real arrow to the last dummy\n link.changeSource(p);\n link.depthOfDumminess = dLayer - oLayer - 1;\n } else {\n addLinkBetweenLayers(oLayer, dLayer, link);\n }\n }\n },\n\n /// \n /// Removes the dummy nodes inserted earlier to break long links.\n /// \n /// The virtual nodes are effectively turned into intermediate connection points.\n _dedummify: function() {\n var dedum = true;\n while (dedum) {\n dedum = false;\n\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\n var points = [];\n\n // add points in reverse order\n points.unshift({ x: link.target.x, y: link.target.y });\n points.unshift({ x: link.source.x, y: link.source.y });\n\n // _dedummify the link\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\n points.unshift({ x: prevLink.source.x, y: prevLink.source.y });\n\n temp = prevLink;\n }\n\n // restore the original link origin\n link.changeSource(temp.source);\n\n // reset dummification flag\n link.depthOfDumminess = 0;\n\n // note that we only need the intermediate points, floating links have been dropped in the analysis\n if (points.length > 2) {\n // first and last are the endpoints\n points.splice(0, 1);\n points.splice(points.length - 1);\n link.points = points;\n }\n else {\n link.points = [];\n }\n\n // we are not going to delete the dummy elements;\n // they won't be needed anymore anyway.\n\n dedum = true;\n break;\n }\n }\n },\n\n /// \n /// Optimizes/reduces the crossings between the layers by turning the crossing problem into a (combinatorial) number ordering problem.\n /// \n _optimizeCrossings: function() {\n var moves = -1, i;\n var maxIterations = 3;\n var iter = 0;\n\n while (moves !== 0) {\n if (iter++ > maxIterations) {\n break;\n }\n\n moves = 0;\n\n for (i = this.layers.length - 1; i >= 1; i--) {\n moves += this.optimizeLayerCrossings(false, i);\n }\n\n for (i = 0; i < this.layers.length - 1; i++) {\n moves += this.optimizeLayerCrossings(true, i);\n }\n }\n },\n\n calcUpData: function(layer) {\n if (layer === 0) {\n return;\n }\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\n for (i = 0; i < considered.length; i++) {\n var node = considered[i];\n\n // calculate barycenter\n var sum = 0;\n var total = 0;\n\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\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\n if (total > 0) {\n node.uBaryCenter = sum / total;\n node.upstreamLinkCount = total;\n }\n else {\n node.uBaryCenter = i;\n node.upstreamLinkCount = 0;\n }\n }\n },\n\n calcDownData: function(layer) {\n if (layer === this.layers.length - 1) {\n return;\n }\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\n for (i = 0; i < considered.length; i++) {\n var node = considered[i];\n\n // calculate barycenter\n var sum = 0;\n var total = 0;\n\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\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\n if (total > 0) {\n node.dBaryCenter = sum / total;\n node.downstreamLinkCount = total;\n }\n else {\n node.dBaryCenter = i;\n node.downstreamLinkCount = 0;\n }\n }\n },\n\n /// \n /// Optimizes the crossings.\n /// \n /// The big trick here is the usage of weights or values attached to connected nodes which turn a problem of crossing links\n /// to an a problem of ordering numbers.\n /// The layer index.\n /// If set to true we move down in the layer stack.\n /// The number of nodes having moved, i.e. the number of crossings reduced.\n optimizeLayerCrossings: function(down, layer) {\n var iconsidered;\n var considered;\n\n if (down) {\n considered = this.layers[iconsidered = layer + 1];\n }\n else {\n considered = this.layers[iconsidered = layer - 1];\n }\n\n // remember what it was\n var presorted = considered.slice(0);\n\n // calculate barycenters for all nodes in the considered layer\n if (down) {\n this.calcUpData(iconsidered);\n }\n else {\n this.calcDownData(iconsidered);\n }\n\n var that = this;\n // sort nodes within this layer according to the barycenters\n considered.sort(function(n1, n2) {\n var n1BaryCenter = that.calcBaryCenter(n1),\n n2BaryCenter = that.calcBaryCenter(n2);\n if (Math.abs(n1BaryCenter - n2BaryCenter) < 0.0001) {\n // in case of coinciding barycenters compare by the count of in/out links\n if (n1.degree() === n2.degree()) {\n return that.compareByIndex(n1, n2);\n }\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 }\n else if (compareValue < 0) {\n return 1;\n }\n return that.compareByIndex(n1, n2);\n });\n\n // count relocations\n var i, moves = 0;\n for (i = 0; i < considered.length; i++) {\n if (considered[i] !== presorted[i]) {\n moves++;\n }\n }\n\n if (moves > 0) {\n // now that the boxes have been arranged, update their grid positions\n var inode = 0;\n for (i = 0; i < considered.length; i++) {\n var node = considered[i];\n node.gridPosition = inode++;\n }\n }\n\n return moves;\n },\n\n /// \n /// Swaps a pair of nodes in a layer.\n /// \n /// Index of the layer.\n /// The Nth node in the layer.\n _swapPairs: function() {\n var maxIterations = this.options.layeredIterations;\n var iter = 0;\n\n while (true) {\n if (iter++ > maxIterations) {\n break;\n }\n\n var downwards = (iter % 4 <= 1);\n var secondPass = (iter % 4 === 1);\n\n for (var l = (downwards ? 0 : this.layers.length - 1);\n downwards ? l <= this.layers.length - 1 : l >= 0; l += (downwards ? 1 : -1)) {\n var layer = this.layers[l];\n var hasSwapped = false;\n\n // there is no need to recalculate crossings if they were calculated\n // on the previous step and nothing has changed\n var calcCrossings = true;\n var memCrossings = 0;\n\n for (var n = 0; n < layer.length - 1; n++) {\n // count crossings\n var up = 0;\n var down = 0;\n var crossBefore = 0;\n\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 }\n else {\n down *= 2;\n }\n\n crossBefore = up + down;\n }\n else {\n crossBefore = memCrossings;\n }\n\n if (crossBefore === 0) {\n continue;\n }\n\n // Swap nodes\n var node1 = layer[n];\n var node2 = layer[n + 1];\n\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\n // count crossings again and if worse than before, restore swapping\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 }\n else {\n down *= 2;\n }\n var crossAfter = up + down;\n\n var revert = false;\n if (secondPass) {\n revert = crossAfter >= crossBefore;\n }\n else {\n revert = crossAfter > crossBefore;\n }\n\n if (revert) {\n node1 = layer[n];\n node2 = layer[n + 1];\n\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\n // nothing has changed, remember the crossings so that\n // they are not calculated again on the next step\n memCrossings = crossBefore;\n calcCrossings = false;\n }\n else {\n hasSwapped = true;\n calcCrossings = true;\n }\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\n /// \n /// Counts the number of links crossing between two layers.\n /// \n /// The layer index.\n /// Another layer index.\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\n for (l1 = 0; l1 < length; l1++) {\n link1 = links[l1];\n for (l2 = l1 + 1; l2 < length; l2++) {\n\n link2 = links[l2];\n\n if (link1.target.layer === dlayer) {\n n11 = link1.source;\n n12 = link1.target;\n }\n else {\n n11 = link1.target;\n n12 = link1.source;\n }\n\n if (link2.target.layer === dlayer) {\n n21 = link2.source;\n n22 = link2.target;\n }\n else {\n n21 = link2.target;\n n22 = link2.source;\n }\n\n var n11gp = n11.gridPosition;\n var n12gp = n12.gridPosition;\n var n21gp = n21.gridPosition;\n var n22gp = n22.gridPosition;\n\n if ((n11gp - n21gp) * (n12gp - n22gp) < 0) {\n crossings++;\n }\n }\n }\n\n return crossings;\n },\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\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\n return 0;\n },\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\n _positionAscendingComparer: function(x, y) {\n return x.k < y.k ? -1 : x.k > y.k ? 1 : 0;\n },\n\n _positionDescendingComparer: function(x, y) {\n return x.k < y.k ? 1 : x.k > y.k ? -1 : 0;\n },\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\n compareByIndex: function(o1, o2) {\n var i1 = o1.index;\n var i2 = o2.index;\n\n if (i1 < i2) {\n return 1;\n }\n\n if (i1 > i2) {\n return -1;\n }\n\n return 0;\n },\n\n intDiv: function(numerator, denominator) {\n return (numerator - numerator % denominator) / denominator;\n },\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 });\n\n /**\n * Captures the state of a diagram; node positions, link points and so on.\n * @type {*}\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\n /**\n * Will capture either\n * - the state of the shapes and the intermediate points of the connections in the diagram\n * - the bounds of the nodes contained in the Graph together with the intermediate points of the links in the Graph\n * - the bounds of the nodes in the Array\n * - the links points and node bounds in the literal object\n * @param diagramOrGraphOrNodes\n */\n capture: function(diagramOrGraphOrNodes) {\n var node,\n nodes,\n shape,\n i,\n conn,\n link,\n links;\n\n if (diagramOrGraphOrNodes instanceof diagram.Graph) {\n\n for (i = 0; i < diagramOrGraphOrNodes.nodes.length; i++) {\n node = diagramOrGraphOrNodes.nodes[i];\n shape = node.associatedShape;\n //shape.bounds(new Rect(node.x, node.y, node.width, node.height));\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 }\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 }\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 }\n else { // capture the diagram\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\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\n var __meta__$H = {\n id: \"html.base\",\n name: \"Html.Base\",\n category: \"web\",\n description: \"\",\n depends: [\"core\"],\n features: []\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n Class = kendo.Class;\n\n kendo.html = kendo.html || {};\n\n var HTMLBase = Class.extend({\n init: function(element, options) {\n var that = this;\n that.element = $(element);\n options = options || {};\n delete options.name;\n that._initOptions(options);\n },\n options: {\n stylingOptions: []\n },\n _addClasses: function() {\n var that = this,\n options = that.options,\n stylingOptions = options.stylingOptions,\n previouslyAddedClasses = that.wrapper.data(\"added-classes\");\n\n stylingOptions = stylingOptions.map(function(option) {\n var validFill;\n\n if (option === \"themeColor\") {\n validFill = kendo.cssProperties.getValidClass({\n widget: options.name,\n propName: \"fillMode\",\n value: options.fillMode\n });\n\n if (!validFill || validFill.length === 0) {\n return \"\";\n }\n }\n\n return kendo.cssProperties.getValidClass({\n widget: options.name,\n propName: option,\n value: options[option],\n fill: options.fillMode\n });\n });\n\n if (previouslyAddedClasses) {\n that.wrapper.removeClass(previouslyAddedClasses.join(\" \"));\n }\n\n that.wrapper.data(\"added-classes\", stylingOptions);\n that.wrapper.addClass(stylingOptions.join(\" \"));\n },\n html: function() {\n var that = this;\n\n return that.wrapper[0].outerHTML;\n }\n });\n\n $.extend(kendo.html, {\n HTMLBase: HTMLBase\n });\n\n })(window.kendo.jQuery);\n\n var __meta__$G = {\n id: \"html.button\",\n name: \"Html.Button\",\n category: \"web\",\n description: \"HTML rendering utility for Kendo UI for jQuery.\",\n depends: [ \"html.base\" ],\n features: []\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n HTMLBase = kendo.html.HTMLBase,\n\n KBUTTON = \"k-button\",\n KBUTTONICON = \"k-button-icon\",\n KBUTTONTEXT = \"k-button-text\";\n\n var renderButton = function(element, options) {\n if (arguments[0] === undefined$1 || $.isPlainObject(arguments[0])) {\n options = element;\n element = $(\"\");\n }\n\n return (new HTMLButton(element, options)).html();\n };\n\n var HTMLButton = HTMLBase.extend({\n init: function(element, options) {\n var that = this;\n HTMLBase.fn.init.call(that, element, options);\n that.wrapper = that.element.addClass(KBUTTON);\n\n if (!that.element.attr(\"type\")) {\n that.element.attr(\"type\", that.options.type);\n }\n\n that._addClasses();\n that.iconElement();\n that._textElement();\n },\n options: {\n name: \"HTMLButton\",\n type: \"button\",\n icon: \"\",\n iconClass: \"\",\n spriteCssClass: \"\",\n imageUrl: \"\",\n size: \"medium\",\n rounded: \"medium\",\n fillMode: \"solid\",\n themeColor: \"base\",\n stylingOptions: [ \"size\", \"rounded\", \"fillMode\", \"themeColor\" ]\n },\n iconElement: function() {\n var that = this,\n element = that.element,\n options = that.options,\n icon = options.icon,\n iconClass = options.iconClass,\n spriteCssClass = options.spriteCssClass,\n imageUrl = options.imageUrl,\n span, img, isEmpty;\n\n if (spriteCssClass || imageUrl || icon || iconClass) {\n isEmpty = true;\n\n element.contents().filter(function() {\n return (!$(this).hasClass(\"k-sprite\") && !$(this).hasClass(\"k-icon\") && !$(this).hasClass(\"k-image\"));\n }).each(function(idx, el) {\n if (el.nodeType == 1 || el.nodeType == 3 && kendo.trim(el.nodeValue).length > 0) {\n isEmpty = false;\n }\n });\n }\n\n if (isEmpty) {\n that.element.addClass(\"k-icon-button\");\n }\n\n 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 img.addClass(KBUTTONICON);\n } else if (icon || iconClass) {\n span = element.children(\"span.k-icon\").first();\n if (!span[0]) {\n span = $('').prependTo(element);\n }\n span.attr(\"class\", icon ? \"k-icon k-i-\" + icon : iconClass);\n span.addClass(KBUTTONICON);\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 + \" \" + KBUTTONICON);\n }\n },\n _textElement: function() {\n var element = this.element;\n\n element.contents().filter(function() {\n return (!$(this).hasClass(KBUTTONICON) && !$(this).hasClass(\"k-sprite\") && !$(this).hasClass(\"k-icon\") && !$(this).hasClass(\"k-image\"));\n }).each(function(idx, el) {\n if (el.nodeType == 1 || el.nodeType == 3 && kendo.trim(el.nodeValue).length > 0) {\n if (el.nodeType === 3) {\n var newSpan = document.createElement('span');\n\n el.parentNode.insertBefore(newSpan, el);\n newSpan.appendChild(el);\n el = newSpan;\n }\n\n el.classList.add(KBUTTONTEXT);\n }\n });\n }\n });\n\n $.extend(kendo.html, {\n renderButton: renderButton,\n HTMLButton: HTMLButton\n });\n\n kendo.cssProperties.registerPrefix(\"HTMLButton\", \"k-button-\");\n\n kendo.cssProperties.registerValues(\"HTMLButton\", [{\n prop: \"fillMode\",\n values: kendo.cssProperties.fillModeValues.concat([\"link\"])\n }, {\n prop: \"rounded\",\n values: kendo.cssProperties.roundedValues.concat([['full', 'full']])\n }]);\n\n })(window.kendo.jQuery);\n\n var __meta__$F = {\n id: \"button.menu\",\n name: \"ButtonMenu\",\n category: \"web\",\n description: \"The popup Menu list part of the SplitButton and the DropDownButton\",\n depends: [\"core\", \"popup\"]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n Widget = kendo.ui.Widget,\n NS = \".kendoButtonMenu\",\n ui = kendo.ui,\n keys = kendo.keys,\n extend = $.extend,\n\n DOT = \".\",\n ID = \"id\",\n NEXT = \"next\",\n PREV = \"prev\",\n DISABLEDSTATE = \"k-disabled\",\n HIDDEN = \"k-hidden\",\n\n ARIA_DISABLED = \"aria-disabled\",\n ROLE_MENU = \"menu\",\n ROLE_MENU_ITEM = \"menuitem\",\n TABINDEX = \"tabindex\",\n\n CLICK = \"click\",\n MENU_CLICK = \"menuClick\",\n OPEN = \"menuOpen\",\n CLOSE = \"menuClose\",\n KEYDOWN = \"keydown\",\n\n FOCUS = \"focus\";\n\n var cssClasses = {\n popup: \"k-menu-popup\",\n list: \"k-group k-menu-group k-reset\",\n listItem: \"k-item k-menu-item\",\n menuItem: \"k-menu-item\",\n itemText: \"k-menu-link-text\",\n item: \"k-link k-menu-link\",\n sprite: \"k-sprite\",\n image: \"k-image\",\n icon: \"k-icon\"\n };\n\n var baseItem = {\n text: null,\n icon: null,\n url: null,\n attributes: null,\n enabled: true,\n hidden: false,\n id: null,\n imageUrl: null,\n spriteCssClass: null\n };\n\n var IMAGE_TEMPLATE = \"#if(imageUrl){#\\\"icon\\\"#}#\";\n var SPRITE_TEMPLATE = \"#if(spriteCssClass){##}#\";\n var ICON_TEMPLATE = \"#if(icon){##}#\";\n var TEXT_TEMPLATE = \"#if(text){##:text##}#\";\n\n var ITEM_TEMPLATE = \"\" + IMAGE_TEMPLATE + SPRITE_TEMPLATE + ICON_TEMPLATE + TEXT_TEMPLATE + \"\";\n\n var LINK_TEMPLATE = \"\" + IMAGE_TEMPLATE + SPRITE_TEMPLATE + ICON_TEMPLATE + TEXT_TEMPLATE + \"\";\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 var focusable = \":kendoFocusable\";\n\n if (!candidate.length) {\n candidate = getter.call(element.parent().find(DOT + cssClasses.menuItem));\n }\n\n if (candidate.is(focusable) || !candidate.length) {\n return candidate;\n }\n\n if (candidate.find(focusable).length) {\n return getter.call(candidate.find(focusable));\n }\n\n return findFocusableSibling(candidate, dir);\n }\n\n var ButtonMenu = Widget.extend({\n init: function(element, options) {\n var that = this;\n\n\n Widget.fn.init.call(that, element, options);\n\n that.mainButton = options.mainButton;\n that._clickHandlers = {};\n\n that._renderList();\n\n that._initPopup();\n\n that._attachEvents();\n\n that._applyCssClasses(that.list);\n },\n\n options: {\n name: \"ButtonMenu\",\n element: null,\n items: [],\n size: \"medium\",\n },\n\n events: [\n MENU_CLICK,\n OPEN,\n CLOSE\n ],\n\n _renderList: function() {\n var that = this,\n items = that.options.items,\n popup = that.element.addClass(cssClasses.popup),\n id = that.mainButton.attr(ID) || kendo.guid(),\n list = $(\"
      \").addClass(cssClasses.list);\n\n that.list = list.appendTo(popup);\n\n that.list.attr(ID, id + \"_buttonmenu\");\n\n items.forEach(that._renderListItem.bind(that));\n },\n\n _renderListItem: function(item) {\n var that = this,\n id, menuItem;\n\n item = extend({}, baseItem, item, {\n enabled: item.enable && item.enabled // backward compatibility: support both enable and enabled options.\n });\n\n id = item.id || kendo.guid();\n menuItem = $(\"
    • \" + that._renderItemButton(item) + \"
    • \");\n\n if (item.click) {\n that._clickHandlers[id] = item.click;\n }\n\n if (item.attributes) {\n menuItem.attr(item.attributes);\n }\n\n if (item.data && kendo.isFunction(item.data)) {\n menuItem.data(item.data(item));\n }\n\n that.list.append(menuItem);\n\n that.enable(item.enabled, menuItem);\n that._hide(item.hidden, menuItem);\n },\n\n _renderItemButton: function(item) {\n var that = this,\n options = that.options;\n\n if (options.itemTemplate) {\n return kendo.template(options.itemTemplate)(item);\n }\n\n if (item.url) {\n return kendo.template(LINK_TEMPLATE)(item);\n } else {\n return kendo.template(ITEM_TEMPLATE)(item);\n }\n },\n\n _initPopup: function() {\n var that = this,\n options = that.options;\n\n that._popup = new ui.Popup(that.element, extend({}, options.popup, {\n anchor: that.mainButton,\n isRtl: that._isRtl,\n toggleTarget: options.toggleTarget,\n copyAnchorStyles: false,\n animation: options.animation,\n open: that._popupOpenHandler.bind(that),\n close: that._popupCloseHandler.bind(that),\n activate: that._popupExpandHandler.bind(that)\n }));\n },\n\n _popupOpenHandler: function(ev) {\n var that = this;\n\n var isDefaultPrevented = that.trigger(OPEN);\n\n if (isDefaultPrevented) {\n ev.preventDefault();\n return;\n }\n\n that.list.find(DOT + cssClasses.menuItem).attr(TABINDEX, 0);\n },\n\n _popupCloseHandler: function(ev) {\n var that = this,\n isDefaultPrevented = that.trigger(CLOSE);\n\n if (isDefaultPrevented) {\n ev.preventDefault();\n }\n\n that.list.find(DOT + cssClasses.menuItem).attr(TABINDEX, -1);\n },\n\n _popupExpandHandler: function() {\n var that = this;\n\n that.list.find(\":kendoFocusable\").first().trigger(FOCUS);\n },\n\n adjustPopupWidth: function(width) {\n var that = this;\n\n that.element.addClass(\"k-split-wrapper\");\n\n that.element.css({\n \"min-width\": width\n });\n },\n\n _attachEvents: function() {\n var that = this;\n\n that.list\n .on(CLICK + NS, DOT + cssClasses.menuItem, that._click.bind(that))\n .on(KEYDOWN + NS, DOT + cssClasses.menuItem, that.listItemKeydown.bind(that));\n\n that.mainButton\n .on(KEYDOWN + NS, that._keydown.bind(that));\n },\n\n _keydown: function(ev) {\n var that = this;\n\n if ($(ev.target).is(DOT + DISABLEDSTATE) || $(ev.target).parents(DOT + DISABLEDSTATE).length) {\n return;\n }\n\n if (ev.altKey && ev.keyCode === keys.DOWN) {\n that._popup.open();\n ev.preventDefault();\n return;\n }\n },\n\n listItemKeydown: function(ev) {\n var that = this,\n li = $(ev.target);\n\n ev.preventDefault();\n\n if (ev.keyCode === keys.ESC || ev.keyCode === keys.TAB || (ev.altKey && ev.keyCode === keys.UP)) {\n that._popup.close();\n that.mainButton.trigger(FOCUS);\n } else if (ev.keyCode === keys.DOWN) {\n findFocusableSibling(li, NEXT).trigger(FOCUS);\n } else if (ev.keyCode === keys.UP) {\n findFocusableSibling(li, PREV).trigger(FOCUS);\n } else if (!li.is(DOT + DISABLEDSTATE) && (ev.keyCode === keys.SPACEBAR || ev.keyCode === keys.ENTER)) {\n li.trigger(CLICK);\n } else if (ev.keyCode === keys.HOME) {\n that.list.find(\":kendoFocusable\")\n .filter(DOT + cssClasses.menuItem)\n .first().trigger(FOCUS);\n } else if (ev.keyCode === keys.END) {\n that.list.find(\":kendoFocusable\")\n .filter(DOT + cssClasses.menuItem)\n .last().trigger(FOCUS);\n }\n },\n\n _click: function(ev) {\n var that = this,\n target = $(ev.target).closest(DOT + cssClasses.menuItem),\n id = target.attr(ID);\n\n if (that._clickHandlers[id]) {\n that._clickHandlers[id](ev);\n }\n\n that.trigger(MENU_CLICK, { id: id, target: target, type: \"menu-click\", originalEvent: ev });\n },\n\n toggle: function() {\n this._popup.toggle();\n },\n\n enable: function(enable, items) {\n var that = this;\n\n if (!items || !items.length) {\n items = that.items();\n } else {\n items = that.list.find(items);\n }\n\n items.toggleClass(DISABLEDSTATE, !enable);\n\n if (enable) {\n items.removeAttr(ARIA_DISABLED);\n } else {\n items.attr(ARIA_DISABLED, !enable);\n }\n },\n\n\n _hide: function(hidden, items) {\n var that = this;\n\n if (!items || !items.length) {\n items = that.items();\n } else {\n items = that.list.find(items);\n }\n\n items.toggleClass(HIDDEN, hidden);\n },\n\n hide: function(items) {\n this._hide(true, items);\n },\n\n show: function(items) {\n this._hide(false, items);\n },\n\n close: function() {\n this._popup.close();\n },\n\n items: function() {\n return this.list.children(DOT + cssClasses.menuItem);\n },\n\n destroyPopup: function() {\n var that = this;\n\n if (that._popup) {\n that._popup.destroy();\n that._popup = null;\n\n that.list.off(NS);\n that.list.remove();\n that.list = null;\n }\n },\n\n destroy: function() {\n var that = this;\n\n delete that._clickHandlers;\n\n that.destroyPopup();\n that.mainButton.off(NS);\n Widget.fn.destroy.call(that);\n }\n });\n\n kendo.cssProperties.registerPrefix(\"ButtonMenu\", \"k-menu-group-\");\n\n ui.plugin(ButtonMenu);\n\n })(window.kendo.jQuery);\n\n var __meta__$E = {\n id: \"splitbutton\",\n name: \"SplitButton\",\n category: \"web\",\n description: \"The SplitButton allows the user to execute a default action which is bound to a Button or to choose a predefined action from a drop-down list.\",\n depends: [\"button.menu\", \"html.button\"]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n Widget = kendo.ui.Widget,\n NS = \".kendoSplitButton\",\n ui = kendo.ui,\n extend = $.extend,\n html = kendo.html,\n outerWidth = kendo._outerWidth,\n keys = kendo.keys,\n\n DOT = \".\",\n ID = \"id\",\n\n ARIA_HASPOPUP = \"aria-haspopup\",\n ARIA_DISABLED = \"aria-disabled\",\n ARIA_CONTROLS = \"aria-controls\",\n ARIA_LABEL = \"aria-label\",\n ARIA_EXPANDED = \"aria-expanded\",\n\n DISABLED = \"disabled\",\n DISABLEDSTATE = \"k-disabled\",\n FOCUSSTATE = \"k-focus\",\n\n CLICK = \"click\",\n KEYDOWN = \"keydown\",\n OPEN = \"open\",\n CLOSE = \"close\",\n\n FOCUS = \"focus\",\n BLUR = \"blur\";\n\n var cssClasses = {\n widget: \"k-split-button k-button-group\"\n };\n\n var SplitButton = Widget.extend({\n init: function(element, options) {\n var that = this;\n\n options.enabled = options.enabled !== false && !$(element).prop(DISABLED);\n Widget.fn.init.call(that, element, options);\n\n that._wrapper();\n that._renderButtons();\n that._renderMenu();\n\n that._enable(that.options.enabled);\n\n that._aria();\n\n that._attachEvents();\n\n kendo.notify(that);\n\n that._applyCssClasses();\n },\n\n options: {\n name: \"SplitButton\",\n enabled: true,\n items: [],\n rounded: \"medium\",\n size: \"medium\",\n fillMode: \"solid\",\n themeColor: \"base\",\n icon: null,\n popup: null,\n arrowIcon: \"arrow-s\",\n messages: {\n labelSuffix: \"splitbutton\"\n }\n },\n\n events: [\n CLICK,\n OPEN,\n CLOSE\n ],\n\n _wrapper: function() {\n var that = this,\n id = that.element.attr(ID) || kendo.guid(),\n wrapperId = id + \"_wrapper\";\n\n that.wrapper = that.element\n .wrap(\"
      \")\n .parent(\".k-split-button\");\n\n that.arrowButton = $(\"\").appendTo(that.wrapper);\n },\n\n _applyCssClasses: function() {\n var that = this;\n\n that.wrapper.addClass(that._getAppearanceClasses());\n },\n\n _clearCssClasses: function() {\n var that = this;\n\n that.wrapper.removeClass(that._getAppearanceClasses());\n },\n\n _getAppearanceClasses: function() {\n var that = this,\n widgetName = that.__proto__.options.name,\n roundedClass = kendo.cssProperties.getValidClass({\n widget: widgetName,\n propName: \"rounded\",\n value: that.options.rounded\n });\n\n return roundedClass;\n },\n\n _renderButtons: function() {\n var that = this;\n\n that._mainButton();\n that._arrowButton();\n },\n\n _mainButton: function() {\n var that = this,\n options = extend({}, that.options, {\n type: that.element.attr(\"type\") || \"button\"\n });\n\n delete options.click;\n\n html.renderButton(that.element, options);\n },\n\n _arrowButton: function() {\n var that = this,\n options = extend({}, that.options, {\n type: \"button\",\n icon: that.options.arrowIcon,\n });\n\n delete options.text;\n delete options.imageUrl;\n delete options.click;\n\n html.renderButton(that.arrowButton, options);\n },\n\n _aria: function() {\n var that = this,\n element = that.element,\n menu = that.menu;\n\n element.attr(ARIA_HASPOPUP, menu ? \"menu\" : null);\n element.attr(ARIA_EXPANDED, menu ? false : null);\n element.attr(ARIA_CONTROLS, menu ? menu.list.attr(ID) : null);\n\n if (!element.attr(ARIA_LABEL)) {\n element.attr(ARIA_LABEL, element.text() + \" \" + that.options.messages.labelSuffix);\n }\n },\n\n _renderMenu: function() {\n var that = this,\n options = extend({}, that.options),\n menu = $(\"
      \");\n\n delete options.click;\n delete options.name;\n\n if (!options.items.length) {\n return;\n }\n\n that.menu = menu.appendTo(that.wrapper).kendoButtonMenu(extend({\n mainButton: that.element,\n toggleTarget: that.arrowButton,\n menuOpen: that.menuOpenHandler.bind(that),\n menuClose: that.menuCloseHandler.bind(that),\n menuClick: that._click.bind(that)\n }, options)).data(\"kendoButtonMenu\");\n },\n\n menuOpenHandler: function(ev) {\n var that = this,\n computedWidth = outerWidth(that.wrapper);\n\n var isDefaultPrevented = that.trigger(OPEN, { target: that.element });\n if (isDefaultPrevented) {\n ev.preventDefault();\n return;\n }\n\n ev.sender.adjustPopupWidth(computedWidth);\n that.element.attr(ARIA_EXPANDED, true);\n },\n\n menuCloseHandler: function(ev) {\n var that = this,\n isDefaultPrevented = that.trigger(CLOSE, { target: that.element });\n\n if (isDefaultPrevented) {\n ev.preventDefault();\n return;\n }\n\n that.element.attr(ARIA_EXPANDED, false);\n that.element.trigger(FOCUS);\n },\n\n _attachEvents: function() {\n var that = this;\n\n that.element.on(CLICK + NS, that._click.bind(that));\n that.element.on(KEYDOWN + NS, that._keydown.bind(that));\n that.element.on(FOCUS + NS, that._focus.bind(that));\n that.element.on(BLUR + NS, that._blur.bind(that));\n },\n\n _focus: function() {\n this.wrapper.addClass(FOCUSSTATE);\n },\n\n _blur: function() {\n this.wrapper.removeClass(FOCUSSTATE);\n },\n\n _click: function(ev) {\n var that = this,\n target = $(ev.target).closest(\".k-button\"),\n id = target.attr(ID),\n originalEvent = ev;\n\n if (ev.type === \"menu-click\") {\n id = ev.id;\n target = ev.target;\n originalEvent = ev.originalEvent;\n }\n\n that.menu.close();\n\n that.trigger(CLICK, { id: id, target: target, originalEvent: originalEvent });\n },\n\n _keydown: function(ev) {\n var that = this;\n\n if (that.element.is(DOT + DISABLEDSTATE) && (ev.keyCode === keys.ENTER || ev.keyCode === keys.SPACEBAR)) {\n ev.preventDefault();\n }\n },\n\n focus: function() {\n var that = this;\n that.element.trigger(FOCUS);\n },\n\n _enable: function(enable, soft) {\n this.element.add(this.arrowButton)\n .toggleClass(DISABLEDSTATE, !enable);\n\n if (enable) {\n this.element.removeAttr(ARIA_DISABLED);\n } else {\n this.element.attr(ARIA_DISABLED, !enable);\n }\n\n if (!soft) {\n this.element.attr(DISABLED, !enable);\n }\n\n this.arrowButton.attr(DISABLED, !enable);\n },\n\n enable: function(enable, menuItem, soft) {\n var that = this;\n\n if (enable === undefined$1) {\n enable = true;\n }\n\n if (menuItem && menuItem.length) {\n that.menu.enable(enable, menuItem);\n return;\n }\n\n that.options.enabled = enable;\n\n that._enable(enable, soft);\n that.menu.enable(enable);\n },\n\n hide: function(menuItem) {\n var that = this;\n\n if (menuItem && menuItem.length) {\n that.menu.hide(menuItem);\n }\n },\n\n show: function(menuItem) {\n var that = this;\n\n if (menuItem && menuItem.length) {\n that.menu.show(menuItem);\n }\n },\n\n open: function() {\n this.menu._popup.open();\n },\n\n close: function() {\n this.menu._popup.close();\n },\n\n items: function() {\n return this.menu.items();\n },\n\n setOptions: function(options) {\n var that = this;\n\n Widget.fn.setOptions.call(that, options);\n\n if (options.popup || options.items || options.size) {\n that.menu.destroy();\n that._renderMenu();\n }\n\n that._renderButtons();\n\n that._aria();\n },\n\n destroy: function() {\n var that = this;\n\n that.menu.destroy();\n\n that.element.off(NS);\n\n Widget.fn.destroy.call(that);\n }\n });\n\n kendo.cssProperties.registerPrefix(\"SplitButton\", \"k-splitbutton-\");\n\n kendo.cssProperties.registerValues(\"SplitButton\", [{\n prop: \"rounded\",\n values: kendo.cssProperties.roundedValues.concat([[\"full\", \"full\"]])\n }]);\n\n ui.plugin(SplitButton);\n\n })(window.kendo.jQuery);\n\n var __meta__$D = {\n id: \"dropdownbutton\",\n name: \"DropDownButton\",\n category: \"web\",\n description: \"The DropDownButton allows the user to execute an action from a drop-down list.\",\n depends: [\"button.menu\", \"html.button\"]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n Widget = kendo.ui.Widget,\n NS = \".kendoDropDownButton\",\n ui = kendo.ui,\n keys = kendo.keys,\n extend = $.extend,\n html = kendo.html,\n outerWidth = kendo._outerWidth,\n\n DOT = \".\",\n ID = \"id\",\n\n ARIA_HASPOPUP = \"aria-haspopup\",\n ARIA_DISABLED = \"aria-disabled\",\n ARIA_CONTROLS = \"aria-controls\",\n ARIA_LABEL = \"aria-label\",\n ARIA_EXPANDED = \"aria-expanded\",\n\n DISABLED = \"disabled\",\n DISABLEDSTATE = \"k-disabled\",\n\n CLICK = \"click\",\n KEYDOWN = \"keydown\",\n OPEN = \"open\",\n CLOSE = \"close\",\n\n FOCUS = \"focus\";\n\n var cssClasses = {\n menuButton: \"k-menu-button\"\n };\n\n var DropDownButton = Widget.extend({\n init: function(element, options) {\n var that = this;\n\n options.enabled = options.enabled !== false && !$(element).prop(DISABLED);\n Widget.fn.init.call(that, element, options);\n\n that.wrapper = that.element;\n\n that._mainButton();\n that._renderMenu();\n\n that._enable(that.options.enabled);\n\n that._aria();\n\n that._attachEvents();\n\n kendo.notify(that);\n\n that._applyCssClasses();\n },\n\n options: {\n name: \"DropDownButton\",\n enabled: true,\n items: [],\n rounded: \"medium\",\n size: \"medium\",\n fillMode: \"solid\",\n themeColor: \"base\",\n icon: null,\n popup: null,\n messages: {\n labelSuffix: \"dropdownbutton\"\n }\n },\n\n events: [\n CLICK,\n OPEN,\n CLOSE\n ],\n\n _mainButton: function() {\n var that = this,\n options = extend({}, that.options, {\n type: that.element.attr(\"type\") || \"button\"\n });\n\n delete options.click;\n\n that.element.addClass(cssClasses.menuButton);\n\n html.renderButton(that.element, options);\n },\n\n _aria: function() {\n var that = this,\n element = that.element,\n menu = that.menu;\n\n element.attr(ARIA_HASPOPUP, menu ? \"menu\" : null);\n element.attr(ARIA_EXPANDED, menu ? false : null);\n element.attr(ARIA_CONTROLS, menu ? menu.list.attr(ID) : null);\n\n if (!element.attr(ARIA_LABEL)) {\n element.attr(ARIA_LABEL, element.text() + \" \" + that.options.messages.labelSuffix);\n }\n },\n\n _renderMenu: function() {\n var that = this,\n options = extend({}, that.options),\n menu = $(\"
      \");\n\n delete options.click;\n delete options.name;\n\n if (!options.items.length) {\n return;\n }\n\n that.menu = menu.appendTo(document.body).kendoButtonMenu(extend({\n mainButton: that.element,\n toggleTarget: that.element,\n menuOpen: that.menuOpenHandler.bind(that),\n menuClose: that.menuCloseHandler.bind(that),\n menuClick: that._click.bind(that)\n }, options)).data(\"kendoButtonMenu\");\n },\n\n menuOpenHandler: function(ev) {\n var that = this,\n computedWidth = outerWidth(that.element);\n\n var isDefaultPrevented = that.trigger(OPEN, { target: that.element });\n if (isDefaultPrevented) {\n ev.preventDefault();\n return;\n }\n\n ev.sender.adjustPopupWidth(computedWidth);\n that.element.attr(ARIA_EXPANDED, true);\n },\n\n menuCloseHandler: function(ev) {\n var that = this,\n isDefaultPrevented = that.trigger(CLOSE, { target: that.element });\n\n if (isDefaultPrevented) {\n ev.preventDefault();\n return;\n }\n\n that.element.attr(ARIA_EXPANDED, false);\n that.element.trigger(FOCUS);\n },\n\n _attachEvents: function() {\n var that = this;\n\n that.element.on(KEYDOWN + NS, that._keydown.bind(that));\n },\n\n _click: function(ev) {\n var that = this,\n id = ev.id,\n target = ev.target,\n originalEvent = ev.originalEvent;\n\n that.menu.close();\n\n that.trigger(CLICK, { id: id, target: target, originalEvent: originalEvent });\n },\n\n _keydown: function(ev) {\n var that = this;\n\n if (that.element.is(DOT + DISABLEDSTATE) && (ev.keyCode === keys.ENTER || ev.keyCode === keys.SPACEBAR)) {\n ev.preventDefault();\n }\n },\n\n focus: function() {\n var that = this;\n that.element.trigger(FOCUS);\n },\n\n _enable: function(enable, soft) {\n this.element\n .toggleClass(DISABLEDSTATE, !enable);\n\n if (enable) {\n this.element.removeAttr(ARIA_DISABLED);\n } else {\n this.element.attr(ARIA_DISABLED, !enable);\n }\n\n if (!soft) {\n this.element.attr(DISABLED, !enable);\n }\n },\n\n enable: function(enable, menuItem, soft) {\n var that = this;\n\n if (enable === undefined$1) {\n enable = true;\n }\n\n if (menuItem && menuItem.length) {\n that.menu.enable(enable, menuItem);\n return;\n }\n\n that.options.enabled = enable;\n\n that._enable(enable, soft);\n that.menu.enable(enable);\n },\n\n hide: function(menuItem) {\n var that = this;\n\n if (menuItem && menuItem.length) {\n that.menu.hide(menuItem);\n }\n },\n\n show: function(menuItem) {\n var that = this;\n\n if (menuItem && menuItem.length) {\n that.menu.show(menuItem);\n }\n },\n\n open: function() {\n this.menu._popup.open();\n },\n\n close: function() {\n this.menu._popup.close();\n },\n\n items: function() {\n return this.menu.items();\n },\n\n setOptions: function(options) {\n var that = this;\n\n Widget.fn.setOptions.call(that, options);\n\n if (options.popup || options.items || options.size) {\n that.menu.destroy();\n that._renderMenu();\n }\n\n that._mainButton();\n\n that._aria();\n },\n\n destroy: function() {\n var that = this;\n\n that.menu.destroy();\n\n that.element.off(NS);\n\n Widget.fn.destroy.call(that);\n }\n });\n\n ui.plugin(DropDownButton);\n\n })(window.kendo.jQuery);\n\n var __meta__$C = {\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\", \"html.button\", \"splitbutton\", \"dropdownbutton\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n Class = kendo.Class,\n ui = kendo.ui,\n Widget = ui.Widget,\n isFunction = kendo.isFunction,\n keys = kendo.keys,\n outerWidth = kendo._outerWidth,\n ns = \".kendoToolBar\",\n TOOLBAR = \"k-toolbar\",\n KBUTTON = \"k-button\",\n OVERFLOW_BUTTON = \"k-overflow-button\",\n TOGGLE_BUTTON = \"k-toggle-button\",\n BUTTON_GROUP = \"k-button-group\",\n SPLIT_BUTTON = \"k-split-button\",\n MENU_BUTTON = \"k-menu-button\",\n KSEPARATOR = \"k-separator\",\n SPACER_CLASS = \"k-spacer\",\n POPUP = \"k-popup\",\n RESIZABLE_TOOLBAR = \"k-toolbar-resizable\",\n STATE_SELECTED = \"k-selected\",\n STATE_DISABLED = \"k-disabled\",\n STATE_HIDDEN = \"k-hidden\",\n FORCE_HIDDEN = \"k-force-hidden\",\n GROUP_START = \"k-group-start\",\n GROUP_END = \"k-group-end\",\n MENU_LINK = \"k-menu-link\",\n MENU_ITEM = \"k-menu-item\",\n OVERFLOW_GROUP = \"k-overflow-group\",\n OVERFLOW_HIDDEN = \"k-overflow-hidden\",\n OVERFLOW_ANCHOR = \"k-overflow-anchor\",\n OVERFLOW_CONTAINER = \"k-overflow-container\",\n OVERFLOW_WRAPPER = \"k-overflow-wrapper\",\n FIRST_TOOLBAR_VISIBLE = \"k-toolbar-first-visible\",\n LAST_TOOLBAR_VISIBLE = \"k-toolbar-last-visible\",\n SPLIT_BUTTON_ARROW = \"k-split-button-arrow\",\n TEMPLATE_ITEM = \"k-toolbar-item\",\n DROPDOWNLIST = \"k-dropdownlist\",\n COLORPICKER = \"k-colorpicker\",\n INPUT_BUTTON = \"k-input-button\",\n KFOCUS = \"k-focus\",\n\n ARIA_DISABLED = \"aria-disabled\",\n ARIA_PRESSED = \"aria-pressed\",\n ARIA_LEBEL = \"aria-label\",\n\n CLICK = \"click\",\n TOGGLE = \"toggle\",\n OPEN = \"open\",\n CLOSE = \"close\",\n FOCUS = \"focus\",\n KEYDOWN = \"keydown\",\n TAP = \"tap\",\n\n SPACER = \"spacer\",\n BOTH = \"both\",\n PRIMARY = \"primary\",\n HREF = \"href\",\n ROLE = \"role\",\n BUTTON = \"button\",\n SPLITBUTTON = \"splitButton\",\n DROPDOWNBUTTON = \"dropDownButton\",\n SEPARATOR = \"separator\",\n OVERFLOW = \"overflow\",\n NEXT = \"next\",\n PREV = \"prev\",\n TABINDEX = \"tabindex\",\n TEMPLATE = \"template\",\n INPUT = \"input\",\n SELECT = \"select\",\n CHECKBOX = \"checkbox\",\n HIDDEN = \"hidden\",\n GROUP = \"group\",\n\n KENDO_FOCUSABLE = \":kendoFocusable\",\n\n OVERFLOW_OPEN = \"overflowOpen\",\n OVERFLOW_CLOSE = \"overflowClose\",\n OVERFLOW_NEVER = \"never\",\n OVERFLOW_AUTO = \"auto\",\n OVERFLOW_ALWAYS = \"always\",\n\n OPTION_LIST_SUFFIX = \"_optionlist\",\n\n KENDO_UID_ATTR = kendo.attr(\"uid\"),\n\n POPUP_ITEM_TEMPLATE = '
    • ',\n\n MENU_LINK_SPAN = '' +\n '#:text#' +\n '',\n\n MENU_LINK_A = '' +\n '#:text#' +\n '',\n\n EMPTY = \" \",\n NOTHING = \"\",\n TEXT_ITEM = \"textItem\",\n DOT = \".\",\n COMMA = \",\",\n ID = \"id\",\n UID = \"uid\";\n\n kendo.toolbar = {};\n\n var components = {\n overflowAnchor: '
      ',\n overflowContainer: '
        '\n };\n\n kendo.toolbar.registerComponent = function(name, toolbar, overflow) {\n components[name] = {\n toolbar: toolbar,\n overflow: overflow\n };\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\n addUidAttr: function() {\n this.element.attr(KENDO_UID_ATTR, this.options.uid);\n },\n\n addIdAttr: function() {\n if (this.options.id) {\n this.element.attr(ID, this.options.id);\n }\n },\n\n addOverflowIdAttr: function() {\n if (this.options.id) {\n this.element.attr(ID, this.options.id + \"_overflow\");\n }\n },\n\n attributes: function() {\n var attributes = this.options.attributes,\n classes;\n\n if (attributes) {\n if (attributes.class) {\n classes = attributes.class;\n\n this.element.addClass(classes);\n\n delete attributes.class;\n }\n\n this.element.attr(attributes);\n\n attributes.class = classes;\n }\n },\n\n show: function() {\n this.element.removeClass(STATE_HIDDEN);\n this.element.removeClass(FORCE_HIDDEN);\n this.options.hidden = false;\n },\n\n hide: function() {\n this.element.addClass(STATE_HIDDEN);\n this.element.addClass(FORCE_HIDDEN);\n\n if (this.overflow && this.overflowHidden) {\n this.overflowHidden();\n }\n this.options.hidden = true;\n },\n\n remove: function() {\n this.element.remove();\n },\n\n enable: function(isEnabled) {\n if (isEnabled === undefined$1) {\n isEnabled = true;\n }\n this.element.toggleClass(STATE_DISABLED, !isEnabled);\n this.element.attr(ARIA_DISABLED, !isEnabled);\n\n this.options.enable = isEnabled;\n },\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)\n .find(\"[\" + KENDO_UID_ATTR + \"='\" + uid + \"']\")\n .data(this.options.type);\n } else if (this.overflow) {\n return this.toolbar\n .element\n .find(\"[\" + KENDO_UID_ATTR + \"='\" + uid + \"']\")\n .data(this.options.type);\n } else if (this.toolbar.options.resizable) {\n return this.toolbar\n .popup.element\n .find(\"[\" + KENDO_UID_ATTR + \"='\" + uid + \"']\")\n .data(this.options.type);\n }\n }\n });\n\n kendo.toolbar.Item = Item;\n\n var BareItem = Item.extend({\n init: function(options, toolbar) {\n this.options = $.extend({}, this.options, options);\n this.toolbar = toolbar;\n }\n });\n\n kendo.toolbar.BareItem = BareItem;\n\n var Button = Item.extend({\n init: function(options, toolbar) {\n var element = options.useButtonTag ? $('') : $('');\n\n this.element = element;\n this.options = $.extend({}, this.options, options);\n this.toolbar = toolbar;\n\n this.attributes();\n\n if (options.primary) {\n this.options.themeColor = PRIMARY;\n }\n\n if (options.togglable) {\n element.addClass(TOGGLE_BUTTON);\n this.toggle(options.selected);\n }\n\n if (options.url !== undefined$1 && !options.useButtonTag) {\n element.attr(HREF, options.url);\n if (options.mobile) {\n element.attr(kendo.attr(ROLE), BUTTON);\n }\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\n if (!options.togglable && options.click && isFunction(options.click)) {\n this.clickHandler = options.click;\n }\n\n if (options.togglable && options.toggle && isFunction(options.toggle)) {\n this.toggleHandler = options.toggle;\n }\n },\n\n options: {\n showIcon: BOTH,\n showText: BOTH\n },\n\n toggle: function(state, propagate) {\n state = !!state;\n\n if (this.group && state) {\n this.group.select(this);\n } else if (!this.group) {\n this.select(state);\n }\n\n if (propagate && this.twin()) {\n this.twin().toggle(state);\n }\n },\n\n getParentGroup: function() {\n if (this.options.isChild) {\n return this.element.closest(DOT + BUTTON_GROUP).data(\"buttonGroup\");\n }\n }\n });\n\n kendo.toolbar.Button = Button;\n\n var ToolBarButton = Button.extend({\n init: function(options, toolbar) {\n Button.fn.init.call(this, options, toolbar);\n\n var element = this.element;\n options = this.options;\n\n element.addClass(KBUTTON);\n\n this.addIdAttr();\n\n if (options.align) {\n element.addClass(\"k-align-\" + options.align);\n }\n\n if (!!options.text && (options.showText == \"toolbar\" || options.showText == BOTH)) {\n if (options.mobile) {\n element.html('' + options.text + \"\");\n } else {\n element.html(options.text);\n }\n } else if (!!options.text) {\n element.attr(ARIA_LEBEL, options.text);\n }\n\n if (options.icon || options.spriteCssClass || options.imageUrl) {\n if (options.showIcon !== \"toolbar\" && options.showIcon !== BOTH) {\n options.icon = null;\n options.spriteCssClass = null;\n options.imageUrl = null;\n }\n }\n\n kendo.html.renderButton(element, options);\n\n this.addUidAttr();\n this.addOverflowAttr();\n this.enable(options.enable);\n\n if (options.hidden) {\n this.hide();\n }\n\n this.element.data({\n type: BUTTON,\n button: this\n });\n },\n\n select: function(selected) {\n if (selected === undefined$1) {\n selected = false;\n }\n\n if (this.options.togglable) {\n this.element.attr(ARIA_PRESSED, selected);\n }\n\n this.element.toggleClass(STATE_SELECTED, selected);\n this.options.selected = selected;\n }\n });\n\n kendo.toolbar.ToolBarButton = ToolBarButton;\n\n var OverflowButton = Button.extend({\n init: function(options, toolbar) {\n this.overflow = true;\n\n Button.fn.init.call(this, $.extend({}, options), toolbar);\n\n var element = this.element;\n options = this.options;\n\n if (!!options.text && (options.showText == OVERFLOW || options.showText == BOTH)) {\n if (options.mobile) {\n element.html('' + options.text + \"\");\n } else {\n element.html(options.text);\n }\n } else if (!!options.text) {\n element.attr(ARIA_LEBEL, options.text);\n }\n\n if (options.icon || options.spriteCssClass || options.imageUrl) {\n if (options.showIcon !== OVERFLOW && options.showIcon !== BOTH) {\n options.icon = null;\n options.spriteCssClass = null;\n options.imageUrl = null;\n }\n }\n\n kendo.html.renderButton(element, options);\n\n if (!options.isChild) {\n this._wrap();\n }\n\n this.addOverflowIdAttr();\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.enable(options.enable);\n\n element.addClass(OVERFLOW_BUTTON + EMPTY + KBUTTON);\n\n if (options.hidden) {\n this.hide();\n }\n\n if (options.togglable) {\n this.toggle(options.selected);\n }\n\n this.element.data({\n type: BUTTON,\n button: this\n });\n },\n\n _wrap: function() {\n this.element = this.element.wrap(POPUP_ITEM_TEMPLATE).parent();\n },\n\n overflowHidden: function() {\n this.element.addClass(OVERFLOW_HIDDEN);\n },\n\n select: function(selected) {\n if (selected === undefined$1) {\n selected = false;\n }\n\n if (this.options.isChild) {\n this.element.toggleClass(STATE_SELECTED, selected);\n } else {\n this.element.find(DOT + KBUTTON).toggleClass(STATE_SELECTED, selected);\n }\n this.options.selected = selected;\n }\n });\n\n kendo.toolbar.OverflowButton = OverflowButton;\n kendo.toolbar.registerComponent(BUTTON, ToolBarButton, OverflowButton);\n\n var ButtonGroup = Item.extend({\n createButtons: function(buttonConstructor) {\n var options = this.options;\n var items = options.buttons || [];\n var item;\n\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({ mobile: options.mobile, isChild: true, type: BUTTON }, items[i]), this.toolbar);\n item.element.appendTo(this.element);\n }\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\n kendo.toolbar.ButtonGroup = ButtonGroup;\n\n var ToolBarButtonGroup = ButtonGroup.extend({\n init: function(options, toolbar) {\n var element = this.element = $('
        ');\n this.options = options;\n this.toolbar = toolbar;\n\n this.addIdAttr();\n\n if (options.align) {\n element.addClass(\"k-align-\" + options.align);\n }\n\n this.createButtons(ToolBarButton);\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.refresh();\n\n element.addClass(BUTTON_GROUP);\n\n if (options.hidden) {\n this.hide();\n }\n\n this.element.data({\n type: \"buttonGroup\",\n buttonGroup: this\n });\n }\n });\n\n kendo.toolbar.ToolBarButtonGroup = ToolBarButtonGroup;\n\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\n this.addOverflowIdAttr();\n\n this.createButtons(OverflowButton);\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.refresh();\n\n element.addClass((options.mobile ? NOTHING : BUTTON_GROUP) + EMPTY + OVERFLOW_GROUP);\n\n this.element.data({\n type: \"buttonGroup\",\n buttonGroup: this\n });\n },\n\n overflowHidden: function() {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n\n kendo.toolbar.OverflowButtonGroup = OverflowButtonGroup;\n kendo.toolbar.registerComponent(\"buttonGroup\", ToolBarButtonGroup, OverflowButtonGroup);\n\n var ToolBarMenuButton = ToolBarButton.extend({\n init: function(options, toolbar) {\n var element, img, span;\n\n options = this.options = $.extend({}, this.options, options);\n\n if (options.url !== undefined$1) {\n element = $(kendo.template(MENU_LINK_A)({\n href: options.url,\n text: options.text\n }));\n } else {\n element = $(kendo.template(MENU_LINK_SPAN)({\n text: options.text\n }));\n }\n\n this.element = element;\n this.toolbar = toolbar;\n\n if (options.click && isFunction(options.click)) {\n this.clickHandler = options.click;\n }\n\n if (options.togglable && options.toggle && isFunction(options.toggle)) {\n this.toggleHandler = options.toggle;\n }\n\n if (options.imageUrl) {\n img = $('\"icon\"').prependTo(element);\n img.attr(\"src\", options.imageUrl);\n } else if (options.icon) {\n span = $('').prependTo(element);\n span.attr(\"class\", \"k-icon k-i-\" + options.icon);\n } else if (options.spriteCssClass) {\n span = $('').prependTo(element);\n span.addClass(options.spriteCssClass);\n }\n\n this.addIdAttr();\n this.addUidAttr();\n this.addOverflowAttr();\n this.attributes();\n this.enable(options.enable);\n\n if (options.group) {\n element.attr(kendo.attr(GROUP), options.group);\n this.group = this.toolbar.addToGroup(this, options.group);\n }\n\n if (options.hidden) {\n this.hide();\n }\n\n this.element.data({\n type: BUTTON,\n button: this\n });\n }\n });\n\n kendo.toolbar.ToolBarMenuButton = ToolBarMenuButton;\n\n var ToolBarSplitButton = Item.extend({\n init: function(options, toolbar) {\n var that = this;\n\n that.options = $.extend({\n id: options.id || options.uid,\n enable: true\n }, options, {\n togglable: false // disable togglable for splitbutton\n });\n\n if (options.primary) {\n that.options.themeColor = PRIMARY;\n }\n\n if (options.showIcon === OVERFLOW) {\n that.options.icon = null;\n }\n\n if (options.showText === OVERFLOW) {\n that.options.text = \"\";\n }\n\n that.toolbar = toolbar;\n\n that.splitButton = new ui.SplitButton($(\"\"),\n $.extend({}, that.options, {\n items: that._extend(options.menuButtons),\n }), toolbar.options);\n that.element = that.splitButton.wrapper;\n\n that.splitButton.bind(CLICK, toolbar._buttonClick.bind(toolbar));\n that.splitButton.bind(CLOSE, that._close.bind(that));\n that.splitButton.bind(OPEN, that._open.bind(that));\n\n that.splitButton.element.data({\n type: SPLITBUTTON,\n button: that,\n splitButton: that\n });\n\n that.splitButton.wrapper.data({\n type: SPLITBUTTON,\n button: that,\n splitButton: that\n });\n\n that.addOverflowAttr();\n that.addUidAttr();\n that.attributes();\n that.addMenuAttributes();\n\n if (that.options.enable === false) {\n that.enable(this.options.enable);\n }\n\n if (that.options.hidden) {\n that.hide();\n }\n },\n _open: function(ev) {\n var that = this;\n var isDefaultPrevented = that.toolbar.trigger(OPEN, { target: that.element });\n if (isDefaultPrevented) {\n ev.preventDefault();\n }\n },\n _close: function(ev) {\n var that = this;\n var isDefaultPrevented = that.toolbar.trigger(CLOSE, { target: that.element });\n if (isDefaultPrevented) {\n ev.preventDefault();\n }\n that.splitButton.element.trigger(FOCUS);\n },\n _extend: function(items) {\n var that = this;\n return items.map(function(item) {\n var itemInstance = new BareItem(item, that.toolbar);\n return $.extend({}, item, {\n togglable: false,\n data: function() {\n return {\n type: BUTTON,\n button: itemInstance,\n splitButton: that\n };\n }\n });\n });\n },\n addMenuAttributes: function() {\n var that = this,\n items = that.splitButton.items(),\n itemInstance;\n\n items.each(function(index, item) {\n item = $(item);\n itemInstance = item.data(BUTTON);\n itemInstance.element = item;\n itemInstance.options = $.extend({\n type: BUTTON,\n enable: true\n }, itemInstance.options);\n\n itemInstance.addOverflowAttr();\n itemInstance.addUidAttr();\n });\n },\n remove: function() {\n var elmToRemove = this.splitButton.wrapper;\n this.splitButton.destroy();\n elmToRemove.remove();\n },\n enable: function(enable, item) {\n this.splitButton.enable(enable, item, true);\n\n if (this.twin()) {\n this.twin().enable(enable);\n }\n },\n attributes: function() {\n var that = this,\n mainButton = that.splitButton.element,\n attributes = this.options.attributes,\n classes;\n\n if (attributes) {\n if (attributes.class) {\n classes = attributes.class;\n\n mainButton.addClass(classes);\n\n delete attributes.class;\n }\n\n mainButton.attr(attributes);\n\n attributes.class = classes;\n }\n },\n });\n\n kendo.toolbar.ToolBarSplitButton = ToolBarSplitButton;\n\n var OverflowSplitButton = Item.extend({\n init: function(options, toolbar) {\n var element = this.element = $('
      • '),\n items = options.menuButtons,\n item, splitContainerId;\n\n this.options = $.extend({}, options, { togglable: false });\n this.toolbar = toolbar;\n this.overflow = true;\n splitContainerId = (options.id || options.uid) + OPTION_LIST_SUFFIX;\n\n this.mainButton = new OverflowButton($.extend({ isChild: true }, options, { togglable: false }));\n this.mainButton.element.appendTo(element);\n\n for (var i = 0; i < items.length; i++) {\n item = new OverflowButton($.extend({ mobile: options.mobile, type: BUTTON, splitContainerId: splitContainerId, isChild: true }, items[i], { click: options.click }), this.toolbar);\n item.element.appendTo(element);\n }\n\n this.addUidAttr();\n this.addOverflowAttr();\n\n this.mainButton.main = true;\n\n if (this.options.enable === false) {\n this.enable(this.options.enable);\n }\n\n element.data({\n type: SPLITBUTTON,\n splitButton: this\n });\n },\n\n enable: function(isEnabled) {\n var elements = this.element.add(this.element.find(DOT + OVERFLOW_BUTTON));\n\n if (isEnabled === undefined$1) {\n isEnabled = true;\n }\n\n elements.toggleClass(STATE_DISABLED, !isEnabled);\n elements.attr(ARIA_DISABLED, !isEnabled);\n\n this.options.enable = isEnabled;\n },\n\n overflowHidden: function() {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n\n kendo.toolbar.OverflowSplitButton = OverflowSplitButton;\n kendo.toolbar.registerComponent(SPLITBUTTON, ToolBarSplitButton, OverflowSplitButton);\n\n var ToolBarDropDownButton = Item.extend({\n init: function(options, toolbar) {\n var that = this;\n\n that.options = $.extend({\n id: options.id || options.uid,\n enable: true\n }, options, {\n togglable: false // disable togglable for dropdownbutton\n });\n\n if (options.primary) {\n that.options.themeColor = PRIMARY;\n }\n\n if (options.showIcon === OVERFLOW) {\n that.options.icon = null;\n }\n\n if (options.showText === OVERFLOW) {\n that.options.text = \"\";\n }\n\n that.toolbar = toolbar;\n\n that.dropDownButton = new ui.DropDownButton($(\"\"),\n $.extend({}, that.options, {\n items: that._extend(options.menuButtons)\n }), toolbar.options);\n that.element = that.dropDownButton.element;\n\n that.dropDownButton.bind(CLICK, toolbar._buttonClick.bind(toolbar));\n that.dropDownButton.bind(CLOSE, that._close.bind(that));\n that.dropDownButton.bind(OPEN, that._open.bind(that));\n\n that.dropDownButton.element.data({\n type: DROPDOWNBUTTON,\n button: that,\n dropDownButton: that\n });\n\n that.addOverflowAttr();\n that.addUidAttr();\n that.attributes();\n that.addMenuAttributes();\n\n if (that.options.enable === false) {\n that.enable(this.options.enable);\n }\n\n if (that.options.hidden) {\n that.hide();\n }\n },\n _open: function(ev) {\n var that = this;\n var isDefaultPrevented = that.toolbar.trigger(OPEN, { target: that.element });\n if (isDefaultPrevented) {\n ev.preventDefault();\n }\n },\n _close: function(ev) {\n var that = this;\n var isDefaultPrevented = that.toolbar.trigger(CLOSE, { target: that.element });\n if (isDefaultPrevented) {\n ev.preventDefault();\n }\n that.dropDownButton.element.trigger(FOCUS);\n },\n _extend: function(items) {\n var that = this;\n return items.map(function(item) {\n var itemInstance = new BareItem(item, that.toolbar);\n return $.extend({}, item, {\n data: function() {\n return {\n type: BUTTON,\n button: itemInstance,\n dropDownButton: that\n };\n }\n });\n });\n },\n addMenuAttributes: function() {\n var that = this,\n items = that.dropDownButton.items(),\n itemInstance;\n\n items.each(function(index, item) {\n item = $(item);\n itemInstance = item.data(BUTTON);\n itemInstance.element = item;\n itemInstance.options = $.extend({\n type: BUTTON,\n enable: true\n }, itemInstance.options);\n\n itemInstance.addOverflowAttr();\n itemInstance.addUidAttr();\n });\n },\n remove: function() {\n var elmToRemove = this.dropDownButton.element;\n this.dropDownButton.destroy();\n elmToRemove.remove();\n },\n enable: function(enable, item) {\n this.dropDownButton.enable(enable, item, true);\n\n if (this.twin()) {\n this.twin().enable(enable);\n }\n },\n attributes: function() {\n var that = this,\n mainButton = that.element,\n attributes = this.options.attributes,\n classes;\n\n if (attributes) {\n if (attributes.class) {\n classes = attributes.class;\n\n mainButton.addClass(classes);\n\n delete attributes.class;\n }\n\n mainButton.attr(attributes);\n\n attributes.class = classes;\n }\n },\n });\n\n kendo.toolbar.ToolBarSplitButton = ToolBarSplitButton;\n\n var OverflowTextItem = Item.extend({\n init: function(options, toolbar) {\n var element = this.element = $('');\n\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n this.overflow = true;\n\n this.attributes();\n this.addUidAttr();\n this.addOverflowIdAttr();\n\n if (options.icon && (!options.showIcon || options.showIcon !== \"toolbar\")) {\n element.append(\"\");\n }\n\n if (options.showText !== \"toolbar\") {\n element.append(\"\" + this.options.text + \"\");\n }\n\n element.data({\n type: TEXT_ITEM,\n textItem: this\n });\n },\n\n overflowHidden: function() {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n\n var OverflowDropDownButton = Item.extend({\n init: function(options, toolbar) {\n var element = this.element = $('
      • '),\n items = options.menuButtons,\n item, splitContainerId;\n\n this.options = $.extend({}, options, { togglable: false });\n this.toolbar = toolbar;\n this.overflow = true;\n splitContainerId = (options.id || options.uid) + OPTION_LIST_SUFFIX;\n\n this.mainButton = new OverflowTextItem($.extend({ isChild: true }, options, { togglable: false }));\n this.mainButton.element.appendTo(element);\n\n for (var i = 0; i < items.length; i++) {\n item = new OverflowButton($.extend({ mobile: options.mobile, type: BUTTON, splitContainerId: splitContainerId, isChild: true }, items[i], { click: options.click }), this.toolbar);\n item.element.appendTo(element);\n }\n\n this.addUidAttr();\n this.addOverflowAttr();\n\n this.mainButton.main = true;\n\n if (this.options.enable === false) {\n this.enable(this.options.enable);\n }\n\n element.data({\n type: DROPDOWNBUTTON,\n dropDownButton: this\n });\n },\n\n enable: function(isEnabled) {\n var elements = this.element.add(this.element.find(DOT + OVERFLOW_BUTTON));\n\n if (isEnabled === undefined$1) {\n isEnabled = true;\n }\n\n elements.toggleClass(STATE_DISABLED, !isEnabled);\n elements.attr(ARIA_DISABLED, !isEnabled);\n\n this.options.enable = isEnabled;\n },\n\n overflowHidden: function() {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n\n kendo.toolbar.OverflowSplitButton = OverflowDropDownButton;\n kendo.toolbar.registerComponent(DROPDOWNBUTTON, ToolBarDropDownButton, OverflowDropDownButton);\n\n var ToolBarSeparator = Item.extend({\n init: function(options, toolbar) {\n var element = this.element = $('
         
        ');\n\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n\n this.attributes();\n this.addIdAttr();\n this.addUidAttr();\n this.addOverflowAttr();\n\n element.addClass(KSEPARATOR);\n element.attr(ROLE, SEPARATOR);\n\n element.data({\n type: SEPARATOR,\n separator: this\n });\n }\n });\n\n var OverflowSeparator = Item.extend({\n init: function(options, toolbar) {\n var element = this.element = $('
      •  
      • ');\n\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n this.overflow = true;\n\n this.attributes();\n this.addUidAttr();\n this.addOverflowIdAttr();\n\n element.addClass(KSEPARATOR);\n element.attr(ROLE, SEPARATOR);\n\n element.data({\n type: SEPARATOR,\n separator: this\n });\n },\n\n overflowHidden: function() {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n\n kendo.toolbar.registerComponent(\"separator\", ToolBarSeparator, OverflowSeparator);\n\n var ToolBarSpacer = Item.extend({\n init: function(options, toolbar) {\n var element = this.element = $('
         
        ');\n\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n\n element.addClass(SPACER_CLASS);\n\n element.data({\n type: SPACER\n });\n this.addOverflowAttr();\n }\n });\n\n kendo.toolbar.registerComponent(SPACER, ToolBarSpacer);\n\n var TemplateItem = Item.extend({\n init: function(template, options, toolbar) {\n var element = isFunction(template) ? template(options) : template;\n\n if (!(element instanceof jQuery)) {\n element = $(\"
        \").html(element);\n } else {\n element = element.wrap(\"
        \").parent();\n }\n\n this.element = element;\n this.options = options;\n this.options.type = options.type || TEMPLATE;\n this.toolbar = toolbar;\n\n this.attributes();\n this.addUidAttr();\n this.addIdAttr();\n this.addOverflowAttr();\n\n if (options.hidden) {\n this.hide();\n }\n\n element.data({\n type: TEMPLATE,\n template: this\n });\n }\n });\n\n kendo.toolbar.TemplateItem = TemplateItem;\n\n var OverflowTemplateItem = Item.extend({\n init: function(template, options, toolbar) {\n var element = isFunction(template) ? $(template(options)) : $(template);\n\n if (!(element instanceof jQuery)) {\n element = $(\"
      • \").html(element);\n } else {\n element = element.wrap(\"
      • \").parent();\n }\n\n this.element = element;\n this.options = options;\n this.options.type = TEMPLATE;\n this.toolbar = toolbar;\n this.overflow = true;\n\n this.attributes();\n this.addUidAttr();\n this.addOverflowIdAttr();\n this.addOverflowAttr();\n\n element.data({\n type: TEMPLATE,\n template: this\n });\n },\n\n overflowHidden: function() {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n\n kendo.toolbar.OverflowTemplateItem = OverflowTemplateItem;\n\n function toggleActive(e) {\n if (!e.target.is(\".k-toggle-button\")) {\n e.target.toggleClass(STATE_SELECTED, e.type == \"press\");\n }\n }\n\n function actionSheetWrap(element) {\n element = $(element);\n\n return element.hasClass(\"km-actionsheet\") ? element.closest(\".km-popup-wrapper\") : element.addClass(\"km-widget km-actionsheet\")\n .wrap('
        ').parent()\n .wrap('
        ').parent();\n }\n\n function preventClick(e) {\n if ($(e.target).closest(\"a.k-button\").length) {\n e.preventDefault();\n }\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\n if (!candidate.length && element.is(DOT + OVERFLOW_ANCHOR)) {\n return element;\n }\n\n if (candidate.is(KENDO_FOCUSABLE) || !candidate.length) {\n return candidate;\n }\n\n if (candidate.find(KENDO_FOCUSABLE).length) {\n return getter.call(candidate.find(KENDO_FOCUSABLE));\n }\n\n return findFocusableSibling(candidate, dir);\n }\n\n var Group = Class.extend({\n init: function(name) {\n this.name = name;\n this.buttons = [];\n },\n\n add: function(button) {\n this.buttons[this.buttons.length] = button;\n },\n\n remove: function(button) {\n var index = $.inArray(button, this.buttons);\n this.buttons.splice(index, 1);\n },\n\n select: function(button) {\n var tmp;\n for (var i = 0; i < this.buttons.length; i ++) {\n tmp = this.buttons[i];\n\n tmp.select(false);\n }\n\n button.select(true);\n if (button.twin()) {\n button.twin().select(true);\n }\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\n options = that.options;\n element = that.wrapper = that.element;\n\n element.addClass(TOOLBAR + \" k-widget\");\n element.attr(ROLE, \"toolbar\");\n\n this.uid = kendo.guid();\n this._isRtl = kendo.support.isRtl(element);\n this._groups = {};\n element.attr(KENDO_UID_ATTR, this.uid);\n\n that.isMobile = (typeof options.mobile === \"boolean\") ? options.mobile : that.element.closest(\".km-root\")[0];\n that.animation = that.isMobile ? { open: { effects: \"fade\" } } : {};\n\n if (that.isMobile) {\n element.addClass(\"km-widget\");\n KBUTTON = \"km-button\";\n BUTTON_GROUP = \"km-buttongroup\";\n STATE_SELECTED = \"km-state-active\";\n STATE_DISABLED = \"km-state-disabled\";\n }\n\n if (options.resizable) {\n that._renderOverflow();\n element.addClass(RESIZABLE_TOOLBAR);\n\n that.overflowUserEvents = new kendo.UserEvents(that.element, {\n threshold: 5,\n allowSelection: true,\n filter: DOT + OVERFLOW_ANCHOR,\n tap: that._toggleOverflow.bind(that)\n });\n\n that._resizeHandler = kendo.onResize(function() {\n that.resize();\n });\n } else {\n that.popup = { element: $([]) };\n }\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\n if (options.resizable) {\n that._shrink(that.element.innerWidth());\n }\n }\n\n that.userEvents = new kendo.UserEvents(document.documentElement, {\n threshold: 5,\n allowSelection: true,\n filter:\n \"[\" + KENDO_UID_ATTR + \"=\" + that.uid + \"] a.\" + KBUTTON + COMMA + EMPTY +\n \"[\" + KENDO_UID_ATTR + \"=\" + that.uid + \"] .\" + OVERFLOW_ANCHOR + COMMA + EMPTY +\n \"[\" + KENDO_UID_ATTR + \"=\" + that.uid + \"] .\" + SPLIT_BUTTON_ARROW + COMMA + EMPTY +\n \"[\" + KENDO_UID_ATTR + \"=\" + that.uid + \"] .\" + TEMPLATE_ITEM + COMMA + EMPTY +\n \"[\" + KENDO_UID_ATTR + \"=\" + that.uid + \"] .\" + MENU_BUTTON,\n tap: that._buttonClick.bind(that),\n press: toggleActive,\n release: toggleActive\n });\n\n that.element.on(CLICK + ns, \"a.k-button\", preventClick)\n .on(KEYDOWN + ns, that._keydown.bind(that))\n .on(\"focusin\" + ns, that._focusIn.bind(that))\n .on(\"focusout\" + ns, that._focusOut.bind(that));\n\n if (that.options.resizable) {\n that.popup.element.on(CLICK + ns, + \"a.k-button\", preventClick);\n }\n\n if (options.resizable) {\n that.overflowAnchor.appendTo(that.wrapper);\n this._toggleOverflowAnchor();\n }\n\n that._tabIndex();\n\n kendo.notify(that);\n },\n\n events: [\n CLICK,\n TOGGLE,\n OPEN,\n CLOSE,\n OVERFLOW_OPEN,\n OVERFLOW_CLOSE\n ],\n\n options: {\n name: \"ToolBar\",\n items: [],\n resizable: true,\n mobile: null,\n navigateOnTab: false\n },\n\n addToGroup: function(button, groupName) {\n var group;\n\n if (!this._groups[groupName]) {\n group = this._groups[groupName] = new Group();\n } else {\n group = this._groups[groupName];\n }\n\n group.add(button);\n return group;\n },\n\n destroy: function() {\n var that = this;\n\n that.destroySplitButtons();\n that.destroyDropDownButtons();\n\n that.element.off(ns, \"a.k-button\");\n\n that.userEvents.destroy();\n\n if (that.options.resizable) {\n kendo.unbindResize(that._resizeHandler);\n that.overflowUserEvents.destroy();\n that.popup.element.off(ns, \"a.k-button\");\n that.popup.destroy();\n }\n\n Widget.fn.destroy.call(that);\n },\n\n destroySplitButtons: function() {\n var that = this,\n splitButtonWrappers = that.element.find(DOT + SPLIT_BUTTON),\n item;\n\n\n splitButtonWrappers.each(function(idx, element) {\n item = that._getItem(element);\n\n if (item && item.type === SPLITBUTTON) {\n item = item.toolbar;\n }\n\n if (item && item.splitButton && item.splitButton.destroy) {\n item.splitButton.destroy();\n $(element).remove();\n }\n });\n },\n\n destroyDropDownButtons: function() {\n var that = this,\n dropDownButtons = that.element.find(DOT + MENU_BUTTON),\n item;\n\n\n dropDownButtons.each(function(idx, element) {\n item = that._getItem(element);\n\n if (item && item.type === DROPDOWNBUTTON) {\n item = item.toolbar;\n }\n\n if (item && item.dropDownButton && item.dropDownButton.destroy) {\n item.dropDownButton.destroy();\n $(element).remove();\n }\n });\n },\n\n add: function(options) {\n var component = components[options.type],\n template = options.template,\n tool, that = this,\n itemClasses = that.isMobile ? NOTHING : \"k-item\",\n overflowTemplate = options.overflowTemplate,\n overflowTool, inputsInTemplate;\n\n $.extend(options, {\n uid: kendo.guid(),\n animation: that.animation,\n mobile: that.isMobile,\n rootUid: that.uid\n });\n\n if (options.menuButtons) {\n for (var i = 0; i < options.menuButtons.length; i++) {\n $.extend(options.menuButtons[i], {\n uid: kendo.guid()\n });\n }\n }\n\n if ((template && !overflowTemplate) || options.type === SPACER) {\n options.overflow = OVERFLOW_NEVER;\n } else if (!options.overflow) {\n options.overflow = OVERFLOW_AUTO;\n }\n\n //add the command in the overflow popup\n if (options.overflow !== OVERFLOW_NEVER && that.options.resizable) {\n if (overflowTemplate) { //template command\n overflowTool = new OverflowTemplateItem(overflowTemplate, options, that);\n } else if (component) { //build-in command\n overflowTool = new component.overflow(options, that);\n overflowTool.element.addClass(itemClasses);\n }\n\n if (overflowTool) {\n if (options.overflow === OVERFLOW_AUTO) {\n overflowTool.overflowHidden();\n }\n\n overflowTool.element.appendTo(that.popup.container);\n that.angular(\"compile\", function() {\n return { elements: overflowTool.element.get() };\n });\n }\n }\n\n //add the command in the toolbar container\n if (options.overflow !== OVERFLOW_ALWAYS) {\n if (template) { //template command\n tool = new TemplateItem(template, options, that);\n inputsInTemplate = tool.element.find(INPUT + COMMA + SELECT);\n\n if (!this.options.navigateOnTab && inputsInTemplate.length > 0) {\n tool.element.attr(TABINDEX, 0);\n inputsInTemplate.attr(TABINDEX, -1);\n }\n } else if (component) { //build-in command\n tool = new component.toolbar(options, that);\n }\n\n if (tool) {\n tool.element.appendTo(that.element);\n\n that.angular(\"compile\", function() {\n return { elements: tool.element.get() };\n });\n }\n }\n },\n\n _getItem: function(candidate) {\n var element,\n toolbarItem,\n overflowItem,\n isResizable = this.options.resizable,\n type;\n\n //find toolbar item\n element = this.element.find(candidate);\n\n if (!element.length) {\n element = $(\"[data-role=\\\"buttonmenu\\\"]\").find(candidate);\n }\n\n type = element.length ? element.data(\"type\") : NOTHING;\n toolbarItem = element.data(type);\n\n if (toolbarItem && isResizable) {\n\n overflowItem = toolbarItem.twin();\n } else if (isResizable) { //find overflow item\n element = this.popup.element.find(candidate);\n type = element.length ? element.data(\"type\") : NOTHING;\n overflowItem = element.data(type);\n\n if (type === TEXT_ITEM) {\n element = element.parent(DOT + MENU_BUTTON);\n type = \"dropDownButton\";\n overflowItem = element.data(type);\n }\n\n if (overflowItem && overflowItem.main && type !== TEXT_ITEM) {\n element = element.parent(DOT + SPLIT_BUTTON);\n type = \"splitButton\";\n overflowItem = element.data(type);\n }\n }\n\n return {\n type: type,\n toolbar: toolbarItem,\n overflow: overflowItem\n };\n },\n\n remove: function(candidate) {\n var item = this._getItem(candidate);\n\n if (item.toolbar) { item.toolbar.remove(); }\n if (item.overflow) { item.overflow.remove(); }\n\n this.resize(true);\n },\n\n hide: function(candidate) {\n var item = this._getItem(candidate);\n var buttonGroupInstance;\n\n if (item.toolbar) {\n if (item.toolbar.options.type === BUTTON && item.toolbar.options.isChild) {\n buttonGroupInstance = item.toolbar.getParentGroup();\n\n item.toolbar.hide();\n\n if (buttonGroupInstance) {\n buttonGroupInstance.refresh();\n }\n } else if (!item.toolbar.options.hidden) {\n item.toolbar.hide();\n }\n }\n\n if (item.overflow) {\n if (item.overflow.options.type === BUTTON && item.overflow.options.isChild) {\n buttonGroupInstance = item.overflow.getParentGroup();\n\n item.overflow.hide();\n\n if (buttonGroupInstance) {\n buttonGroupInstance.refresh();\n }\n } else if (!item.overflow.options.hidden) {\n item.overflow.hide();\n }\n }\n\n this.resize(true);\n },\n\n show: function(candidate) {\n var item = this._getItem(candidate);\n var buttonGroupInstance;\n\n if (item.toolbar) {\n if (item.toolbar.options.type === BUTTON && item.toolbar.options.isChild) {\n buttonGroupInstance = item.toolbar.getParentGroup();\n item.toolbar.show();\n\n if (buttonGroupInstance) {\n buttonGroupInstance.refresh();\n }\n } else if (item.toolbar.options.hidden) {\n item.toolbar.show();\n }\n }\n\n if (item.overflow) {\n if (item.overflow.options.type === BUTTON && item.overflow.options.isChild) {\n buttonGroupInstance = item.overflow.getParentGroup();\n\n item.toolbar.show();\n\n if (buttonGroupInstance) {\n buttonGroupInstance.refresh();\n }\n } else if (item.overflow.options.hidden) {\n item.overflow.show();\n }\n }\n\n this.resize(true);\n },\n\n enable: function(element, enable) {\n var item = this._getItem(element);\n\n if (typeof enable == \"undefined\") {\n enable = true;\n }\n\n if (item.toolbar) { item.toolbar.enable(enable, item.element); }\n if (item.overflow) { item.overflow.enable(enable); }\n },\n\n getSelectedFromGroup: function(groupName) {\n return this.element.find(DOT + TOGGLE_BUTTON + \"[data-group='\" + groupName + \"']\").filter(DOT + STATE_SELECTED);\n },\n\n toggle: function(button, checked) {\n var element = $(button),\n item = element.data(BUTTON);\n\n if (item.options.togglable) {\n if (checked === undefined$1) {\n checked = true;\n }\n\n item.toggle(checked, true);\n }\n },\n\n _renderOverflow: function() {\n var that = this,\n overflowContainer = components.overflowContainer,\n isRtl = that._isRtl,\n horizontalDirection = isRtl ? \"left\" : \"right\";\n\n that.overflowAnchor = $(components.overflowAnchor).addClass(KBUTTON);\n\n that.element.append(that.overflowAnchor);\n\n if (that.isMobile) {\n that.overflowAnchor.append('');\n overflowContainer = actionSheetWrap(overflowContainer);\n } else {\n that.overflowAnchor.append('');\n }\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)\n .addClass(OVERFLOW_WRAPPER);\n\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\n if (that.trigger(OVERFLOW_OPEN)) {\n e.preventDefault();\n }\n },\n activate: function() {\n this.element.find(KENDO_FOCUSABLE).first().trigger(FOCUS);\n },\n close: function(e) {\n if (that.trigger(OVERFLOW_CLOSE)) {\n e.preventDefault();\n }\n\n this.element.trigger(FOCUS);\n }\n });\n\n that.popup.element.on(KEYDOWN + ns, DOT + KBUTTON, function(e) {\n var target = $(e.target),\n li = target.parent(),\n isComplexTool = li.is(DOT + BUTTON_GROUP) || li.is(DOT + SPLIT_BUTTON),\n element;\n\n e.preventDefault();\n\n if (e.keyCode === keys.ESC || e.keyCode === keys.TAB || (e.altKey && e.keyCode === keys.UP)) {\n that._toggleOverflow();\n that.overflowAnchor.trigger(FOCUS);\n } else if (e.keyCode === keys.DOWN) {\n element = !isComplexTool || (isComplexTool && target.is(\":last-child\")) || (isComplexTool && !target.next().is(KENDO_FOCUSABLE)) ? li : target;\n findFocusableSibling(element, NEXT).trigger(FOCUS);\n } else if (e.keyCode === keys.UP) {\n element = !isComplexTool || (isComplexTool && target.is(\":first-child\")) || (isComplexTool && !target.prev().is(KENDO_FOCUSABLE)) ? li : target;\n findFocusableSibling(element, PREV).trigger(FOCUS);\n } else if ((e.keyCode === keys.SPACEBAR || e.keyCode === keys.ENTER) && !$(e.target).is(DOT + STATE_DISABLED)) {\n that.userEvents.trigger(TAP, { target: $(e.target) });\n that.overflowAnchor.trigger(FOCUS);\n } else if (e.keyCode === keys.HOME) {\n li.parent().find(KENDO_FOCUSABLE).first().trigger(FOCUS);\n } else if (e.keyCode === keys.END) {\n li.parent().find(KENDO_FOCUSABLE).last().trigger(FOCUS);\n }\n });\n\n if (that.isMobile) {\n that.popup.container = that.popup.element.find(DOT + OVERFLOW_CONTAINER);\n } else {\n that.popup.container = that.popup.element;\n }\n\n that.popup.container.attr(KENDO_UID_ATTR, this.uid);\n },\n\n _toggleOverflowAnchor: function() {\n var hasVisibleChildren = false;\n var paddingEnd = this._isRtl ? \"padding-left\" : \"padding-right\";\n\n if (this.options.mobile) {\n hasVisibleChildren = this.popup.element.find(DOT + 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\n if (hasVisibleChildren) {\n this.overflowAnchor.css({\n visibility: \"visible\",\n width: NOTHING\n });\n this.wrapper.css(paddingEnd, this.overflowAnchor.outerWidth(true));\n } else {\n this.overflowAnchor.css({\n visibility: HIDDEN,\n width: \"1px\"\n });\n this.wrapper.css(paddingEnd, NOTHING);\n }\n },\n\n _buttonClick: function(e) {\n var that = this,\n target = $(e.target),\n item, handler, eventData, urlTarget,\n templateFocusable;\n\n if (target.closest(DOT + TEMPLATE_ITEM).length === 0) {\n e.preventDefault();\n }\n\n if (target.hasClass(MENU_BUTTON) || target.hasClass(OVERFLOW_ANCHOR)) {\n that._resetTabIndex(target);\n return;\n } else if (target.hasClass(SPLIT_BUTTON_ARROW)) {\n that._resetTabIndex(target.prev());\n return;\n } else if (target.hasClass(TEMPLATE_ITEM)) {\n templateFocusable = target.find(INPUT + COMMA + SELECT + COMMA + DOT + DROPDOWNLIST);\n\n if (templateFocusable.length > 0) {\n that._resetTabIndex(templateFocusable.first());\n }\n\n return;\n }\n\n if (!target.data(SPLITBUTTON)) {\n target = $(e.target).closest(DOT + KBUTTON + COMMA + DOT + MENU_LINK, that.element);\n }\n\n item = target.data(BUTTON);\n\n if (item && !target.hasClass(MENU_ITEM)) {\n that._resetTabIndex(target);\n }\n\n if (!item && that.popup) {\n target = $(e.target).closest(DOT + OVERFLOW_BUTTON, that.popup.container);\n item = target.parent(\"li\").data(BUTTON);\n }\n\n if (!item || !item.options.enable) {\n return;\n }\n\n if (item.options.togglable) {\n handler = isFunction(item.toggleHandler) ? item.toggleHandler : null;\n\n item.toggle(!item.options.selected, true);\n eventData = { target: target, group: item.options.group, checked: item.options.selected, id: item.options.id, item: item };\n\n if (handler) { handler.call(that, eventData); }\n that.trigger(TOGGLE, eventData);\n } else {\n handler = isFunction(item.clickHandler) ? item.clickHandler : null;\n eventData = { sender: that, target: target, id: item.options.id, item: item };\n\n if (handler) { handler.call(that, eventData); }\n that.trigger(CLICK, eventData);\n }\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\n if (target.hasClass(OVERFLOW_BUTTON)) {\n that.popup.close();\n }\n },\n\n _focusOut: function(e) {\n this.wrapper.find(DOT + KBUTTON + DOT + KFOCUS).removeClass(KFOCUS);\n },\n\n _focusIn: function(e) {\n var target = $(e.target);\n\n if (target.closest(DOT + KBUTTON).length > 0) {\n target.closest(DOT + KBUTTON).addClass(KFOCUS);\n }\n },\n\n _keydown: function(e) {\n var target = $(e.target),\n keyCode = e.keyCode,\n items = this._getItems(),\n direction = this._isRtl ? -1 : 1,\n templateItem = target.closest(DOT + TEMPLATE_ITEM),\n last, next, innerFocusable, innerWidget, widgetInstance;\n\n if (e.altKey && keyCode === keys.DOWN) {\n var isOverflowAnchor = $(document.activeElement).is(DOT + OVERFLOW_ANCHOR);\n\n if (isOverflowAnchor) {\n this._toggleOverflow();\n }\n\n return;\n }\n\n if (!this.options.navigateOnTab && keyCode === keys.ENTER && target.hasClass(TEMPLATE_ITEM)) {\n innerFocusable = target.find(KENDO_FOCUSABLE + \":not('\" + DOT + INPUT_BUTTON + \"')\" + COMMA + DOT + DROPDOWNLIST);\n\n if (innerFocusable.length > 0) {\n target.attr(TABINDEX, -1);\n\n innerFocusable.attr(TABINDEX, 0);\n innerFocusable.first().trigger(FOCUS);\n }\n\n return;\n } else if (!this.options.navigateOnTab && keyCode === keys.ESC && templateItem.length > 0) {\n innerWidget = templateItem.find(\"[data-role]\");\n innerFocusable = templateItem.find(KENDO_FOCUSABLE + \":not('\" + DOT + INPUT_BUTTON + \"')\" + COMMA + DOT + DROPDOWNLIST);\n\n if (innerWidget.length > 0) {\n widgetInstance = kendo.widgetInstance(innerWidget);\n\n if (widgetInstance) {\n if (widgetInstance.popup && widgetInstance.popup.visible()) {\n return;\n } else {\n templateItem.attr(TABINDEX, 0);\n templateItem.trigger(FOCUS);\n templateItem.find(KENDO_FOCUSABLE).attr(TABINDEX, -1);\n }\n }\n }\n\n if (innerFocusable.length > 0) {\n templateItem.attr(TABINDEX, 0);\n templateItem.trigger(FOCUS);\n innerFocusable.attr(TABINDEX, -1);\n }\n\n return;\n } else if ((keyCode === keys.SPACEBAR || keyCode === keys.ENTER) && !target.is(INPUT + COMMA + CHECKBOX + COMMA + BUTTON)) {\n if (keyCode === keys.SPACEBAR) {\n e.preventDefault(); //prevent spacebar to scroll the page down\n this.userEvents.trigger(TAP, { target: target });\n }\n\n return;\n }\n\n if (keyCode === keys.HOME) {\n if (target.is(DOT + DROPDOWNLIST) || target.is(INPUT)) {\n return;\n }\n\n this._resetTabIndex(items.first());\n items.first().trigger(FOCUS);\n e.preventDefault();\n } else if (keyCode === keys.END) {\n if (target.is(DOT + DROPDOWNLIST) || target.is(INPUT)) {\n return;\n }\n\n last = items.last();\n\n if (last.width() === 0) {\n last = items.eq(items.length - 2);\n }\n\n this._resetTabIndex(last);\n last.trigger(FOCUS);\n e.preventDefault();\n } else if (!this.options.navigateOnTab &&\n keyCode === keys.RIGHT &&\n !target.is(INPUT + \":not([type=file])\" + COMMA + SELECT + COMMA + DOT + DROPDOWNLIST + COMMA + DOT + COLORPICKER) &&\n this._getNextElement(e.target, 1 * direction)) {\n next = $(this._getNextElement(e.target, 1 * direction));\n this._resetTabIndex(next);\n next.trigger(FOCUS);\n\n e.preventDefault();\n } else if (!this.options.navigateOnTab &&\n keyCode === keys.LEFT &&\n !target.is(INPUT + \":not([type=file])\" + COMMA + SELECT + COMMA + EMPTY + DOT + DROPDOWNLIST + COMMA + DOT + COLORPICKER) &&\n this._getNextElement(e.target, -1 * direction)) {\n next = $(this._getNextElement(e.target, -1 * direction));\n this._resetTabIndex(next);\n next.trigger(FOCUS);\n\n e.preventDefault();\n }\n },\n\n _getNextElement: function(item, direction) {\n var items = this._getItems(),\n itemIndex = items.index(item) === -1 ? items.index(item.parentElement) : items.index(item),\n focusableItem = items[itemIndex + direction];\n\n if (!focusableItem) {\n if (direction === -1) {\n focusableItem = items.last();\n } else {\n focusableItem = items.first();\n }\n }\n\n return focusableItem;\n },\n\n _getItems: function() {\n return this.wrapper.find(KENDO_FOCUSABLE + COMMA + DOT + TEMPLATE_ITEM + COMMA + DOT + OVERFLOW_ANCHOR + COMMA + DOT + \"k-switch\").filter(function() {\n var current = $(this);\n\n if (current.hasClass(\"k-hidden\")) {\n return false;\n } else if (current.hasClass(OVERFLOW_ANCHOR) && current.css(\"visibility\") === HIDDEN) {\n return false;\n } else if (current.hasClass(TEMPLATE_ITEM) && current.find(\"input:visible\" + COMMA + DOT + \"k-picker\" + COMMA + DOT + \"k-input\").length === 0) {\n return false;\n } else if (!current.hasClass(TEMPLATE_ITEM) && current.closest(DOT + TEMPLATE_ITEM).length > 0) {\n return false;\n } else if (current.hasClass(INPUT_BUTTON) || current.hasClass(SPLIT_BUTTON_ARROW)) {\n return false;\n }\n\n return true;\n });\n },\n\n _toggle: function(e) {\n var splitButton = $(e.target).closest(DOT + SPLIT_BUTTON).data(\"splitButton\");\n\n e.preventDefault();\n\n if (!splitButton.options.enable) {\n return;\n }\n\n splitButton.toggle();\n },\n\n _toggleOverflow: function() {\n this.popup.toggle();\n },\n\n _resize: function(e) {\n var containerWidth = e.width;\n\n if (!this.options.resizable) {\n return;\n }\n\n this.popup.close();\n\n this._shrink(containerWidth);\n this._stretch(containerWidth);\n\n this._markVisibles();\n\n this._toggleOverflowAnchor();\n },\n\n _childrenWidth: function() {\n var childrenWidth = 0;\n var gap = parseInt(this.element.css('gap'), 10) || 0;\n\n this.element.children(\":visible:not(\" + DOT + SPACER_CLASS + \")\").each(function() {\n childrenWidth += outerWidth($(this), true) + gap;\n });\n\n return Math.ceil(childrenWidth);\n },\n\n _shrink: function(containerWidth) {\n var commandElement,\n visibleCommands,\n activeElement;\n\n if (containerWidth < this._childrenWidth()) {\n visibleCommands = this.element.children(\":visible:not([data-overflow='never'], .\" + OVERFLOW_ANCHOR + \")\");\n\n for (var i = visibleCommands.length - 1; i >= 0; i--) {\n commandElement = visibleCommands.eq(i);\n\n if (containerWidth > this._childrenWidth()) {\n break;\n } else {\n activeElement = commandElement.find(\"[tabindex=0]\");\n\n if (activeElement.length > 0) {\n activeElement.attr(TABINDEX, -1);\n this.element.children(DOT + OVERFLOW_ANCHOR).attr(TABINDEX, 0);\n }\n\n this._hideItem(commandElement);\n }\n }\n }\n },\n\n _stretch: function(containerWidth) {\n var commandElement,\n hiddenCommands;\n\n if (containerWidth > this._childrenWidth()) {\n hiddenCommands = this.element.children(DOT + STATE_HIDDEN + \":not(\" + DOT + FORCE_HIDDEN + \")\");\n\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\n _hideItem: function(item) {\n item.addClass(STATE_HIDDEN);\n\n if (this.popup) {\n this.popup.container\n .find(\">li[data-uid='\" + item.data(UID) + \"']\")\n .removeClass(OVERFLOW_HIDDEN);\n }\n },\n\n _showItem: function(item, containerWidth) {\n var gap = parseInt(this.element.css('gap'), 10) || 0;\n // From jquery.outerWidth docs:\n // > jQuery will attempt to temporarily show and then re-hide an element\n // > in order to measure its dimensions, but this is unreliable\n // Thus we show and hide the item\n item.removeClass(STATE_HIDDEN);\n var itemOuterWidth = outerWidth(item, true) + gap;\n item.addClass(STATE_HIDDEN);\n\n if (item.length && containerWidth > this._childrenWidth() + itemOuterWidth) {\n item.removeClass(STATE_HIDDEN);\n\n if (this.options.navigateOnTab !== true) {\n item.find(KENDO_FOCUSABLE).attr(TABINDEX, -1);\n }\n\n if (this.popup) {\n this.popup.container\n .find(\">li[data-uid='\" + item.data(UID) + \"']\")\n .addClass(OVERFLOW_HIDDEN);\n }\n\n return true;\n }\n\n return false;\n },\n\n _markVisibles: function() {\n var overflowItems = this.popup.container.children(),\n toolbarItems = this.element.children(\":not(\" + DOT + OVERFLOW_ANCHOR + \")\"),\n visibleOverflowItems = overflowItems.filter(\":not(\" + DOT + OVERFLOW_HIDDEN + \")\"),\n visibleToolbarItems = toolbarItems.filter(\":visible\");\n\n overflowItems.add(toolbarItems).removeClass(FIRST_TOOLBAR_VISIBLE + EMPTY + 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 _resetTabIndex: function(toFocus) {\n if (this.options.navigateOnTab !== true) {\n this.wrapper.find(KENDO_FOCUSABLE).attr(TABINDEX, -1);\n toFocus.attr(TABINDEX, 0);\n }\n },\n\n _tabIndex: function() {\n var focusableItems = this.wrapper.find(KENDO_FOCUSABLE + \":not('[tabindex=-1]')\"),\n firstFocusable = focusableItems.first();\n\n if (this.options.navigateOnTab !== true) {\n focusableItems.attr(TABINDEX, -1);\n firstFocusable.attr(TABINDEX, 0);\n }\n }\n });\n\n kendo.ui.plugin(ToolBar);\n })(window.kendo.jQuery);\n\n var __meta__$B = {\n id: \"toggleinputbase\",\n name: \"ToggleInputBase\",\n category: \"web\",\n description: \"The ToggleInputBase component.\",\n depends: [ \"core\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n ui = kendo.ui,\n Widget = ui.Widget,\n CHANGE = \"change\",\n DISABLED = \"disabled\",\n CHECKED = \"checked\";\n\n var ToggleInputBase = Widget.extend({\n init: function(element, options) {\n var that = this;\n\n Widget.fn.init.call(that, element, options);\n\n that._wrapper();\n\n that._initSettings();\n\n that._attachEvents();\n\n kendo.notify(that, kendo.ui);\n },\n\n events: [\n CHANGE\n ],\n\n options: {\n name: \"ToggleInputBase\"\n },\n\n NS: \".kendoToggleInputBase\",\n RENDER_INPUT: $.noop,\n\n check: function(checked) {\n var that = this,\n element = that.element[0];\n\n if (checked === undefined$1) {\n return element.checked;\n }\n\n if (element.checked !== checked) {\n that.options.checked = element.checked = checked;\n }\n\n if (checked) {\n that.element.attr(CHECKED, CHECKED);\n } else {\n that.element.prop(CHECKED, false);\n }\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n this.wrapper.off(this.NS);\n },\n\n enable: function(enable) {\n var element = this.element;\n\n if (typeof enable == \"undefined\") {\n enable = true;\n }\n\n this.options.enabled = enable;\n\n if (enable) {\n element.prop(DISABLED, false);\n } else {\n element.attr(DISABLED, DISABLED);\n }\n },\n\n toggle: function() {\n var that = this;\n\n that.check(!that.element[0].checked);\n },\n\n _attachEvents: function() {\n this.element.on(CHANGE + this.NS, this._change.bind(this));\n },\n\n _change: function() {\n var checked = this.element[0].checked;\n\n this.trigger(CHANGE, { checked: checked });\n },\n\n _initSettings: function() {\n var that = this,\n element = that.element[0],\n options = that.options;\n\n if (options.checked === null) {\n options.checked = element.checked;\n }\n\n that.check(options.checked);\n\n options.enabled = options.enabled && !that.element.attr(DISABLED);\n that.enable(options.enabled);\n },\n\n _wrapper: function() {\n var that = this,\n options = that.options,\n inputMethod = that.RENDER_INPUT;\n\n\n inputMethod(that.element, $.extend({}, options));\n that.element.removeClass('input-validation-error');\n\n that.wrapper = that.element;\n }\n });\n\n ui.plugin(ToggleInputBase);\n })(window.kendo.jQuery);\n\n var __meta__$A = {\n id: \"html.input\",\n name: \"Html.Input\",\n category: \"web\",\n description: \"HTML rendering utility for Kendo UI for jQuery.\",\n depends: [ \"html.base\" ],\n features: []\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n HTMLBase = kendo.html.HTMLBase;\n\n var renderCheckBox = function(element, options) {\n if (arguments[0] === undefined$1 || $.isPlainObject(arguments[0])) {\n options = element;\n element = $(\"\");\n }\n\n return (new HTMLCheckBox(element, options)).html();\n };\n\n var renderRadioButton = function(element, options) {\n if (arguments[0] === undefined$1 || $.isPlainObject(arguments[0])) {\n options = element;\n element = $(\"\");\n }\n\n return (new HTMLRadioButton(element, options)).html();\n };\n\n var HTMLInput = HTMLBase.extend({\n init: function(element, options) {\n var that = this;\n HTMLBase.fn.init.call(that, element, options);\n that._wrapper();\n that._addClasses();\n },\n options: {\n label: null,\n labelPosition: \"after\",\n labelId: null,\n encoded: true\n },\n _wrapper: function() {\n var that = this,\n element = that.element[0],\n options = that.options,\n elementId = element.id;\n\n that.wrapper = that.element\n .addClass(options.inputClass)\n .prop(\"type\", options.type);\n\n if (!elementId && !!options.label) {\n element.id = elementId = kendo.guid();\n }\n\n if (!!options.label) {\n that.labelEl = $(\"