{"version":3,"file":"kendo.mobile.min.js","names":["global","factory","exports","module","require","define","amd","globalThis","self","kendomobile","js","this","breakpoints","EVENT","defaultBreakpoints","small","medium","large","mediaQuery","query","Object","assign","kendo","defaults","mediaQueryList","window","matchMedia","onEnterCallbacks","onLeaveCallbacks","onChangeHandlers","kendoMediaQuery","onChangeHandler","ev","forEach","cb","matches","addEventListener","onChange","push","onEnter","media","MediaQueryListEvent","onLeave","destroy","removeEventListener","createMediaQuery","packageMetadata","name","productName","productCodes","publishDate","version","replace","licensingDocsUrl","$","undefined$1","Template","cultures","extend","each","isArray","Array","noop","math","Math","JSON","support","percentRegExp","formatRegExp","boxShadowRegExp","numberRegExp","MONTH","HOUR","ZONE","WEEKDAY","QUARTER","DATE_FIELD_MAP","G","y","q","Q","M","L","d","E","c","e","h","H","k","K","m","s","a","t","x","X","z","Z","NAME_TYPES","month","type","minLength","standAlone","quarter","weekday","dayperiod","era","FUNCTION","STRING","NUMBER","OBJECT","NULL","BOOLEAN","UNDEFINED","PREFIX","ARIA_LABELLEDBY","ARIA_LABEL","getterCache","setterCache","slice","cssPropertiesNames","noDepricateExtend","src","copyIsArray","copy","options","clone","target","arguments","i","length","deep","jQuery","isPlainObject","Class","proto","member","fn","base","that","subclass","init","apply","prototype","constructor","_initOptions","deepExtend","isPresent","value","isBlank","isString","isNumeric","isNaN","parseFloat","isDate","getTime","isFunction","preventDefault","_defaultPrevented","isDefaultPrevented","Observable","_events","bind","eventName","handlers","one","idx","original","handler","eventNames","handlersIsFunction","unbind","first","unshift","trigger","events","sender","call","splice","compilePart","part","stringPart","split","join","charAt","rest","substring","argumentNameRegExp","encodeRegExp","escapedCurlyRegExp","curlyRegExp","escapedSharpRegExp","sharpRegExp","zeros","pad","number","digits","end","getHiddenDimensions","element","includeMargin","width","height","css","appendTo","outerWidth","outerHeight","remove","wrapResize","autosize","shouldCorrectWidth","_outerWidth","_outerHeight","parent","wrapper","closest","calculateFromHidden","hasClass","visible","is","wrapperStyle","style","elementHeight","display","position","test","add","show","hide","destination","deepExtendOne","source","property","propValue","propType","propInit","destProp","ObservableArray","data","LazyObservableArray","DataSource","HierarchicalDataSource","RegExp","ArrayBuffer","HTMLElement","Date","testRx","agent","rxs","dflt","rx","hasOwnProperty","toCamelCase","str","strMatch","g1","toUpperCase","getComputedStyles","properties","computedStyle","styles","document","defaultView","getComputedStyle","getPropertyValue","currentStyle","size","paramName","useWithBlock","render","template","html","compile","parts","settings","argumentName","match","functionBody","Function","_slotCount","floor","debugTemplates","Error","format","console","warn","gap","indent","rep","escapable","meta","toString","quote","string","lastIndex","charCodeAt","key","holder","v","partial","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","F","g","T","u","Y","firstDay","twoDigitYearMax","cultureName","indexOf","calendar","groupInteger","start","integer","integerLength","newGroupSize","decimalIndex","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","nonBreakingSpaceRegExp","spaceRegExp","exponentRegExp","shortTimeZoneRegExp","longTimeZoneRegExp","dateRegExp","offsetRegExp","FORMATS_SEQUENCE","STANDARD_FORMATS","exact3","outOfRange","designatorPredicate","designator","mapDesignators","designators","map","lowerArray","array","lowerLocalInfo","localInfo","newLocalInfo","parseExact","strict","shouldUnpadZeros","count","pmHour","UTC","amDesignators","pmDesignators","hoursOffset","minutesOffset","lookAhead","longestDesignatorLength","from","sort","b","getNumber","rg","valueIdx","isInteger","unpadZero","substr","getIndexByName","lower","subLength","nameLength","subValue","matchLength","matchIdx","checkLiteral","year","day","hours","seconds","milliseconds","defaultYear","_lowerDays","_lowerMonths","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","table","tbodyInnerHtml","touch","docStyle","transitions","transforms","elementProto","hasHW3D","WebKitCSSMatrix","cssFlexbox","prefix","hasTransitions","lowPrefix","event","devicePixelRatio","screenWidth","screen","availWidth","innerWidth","screenHeight","availHeight","innerHeight","detectOS","ua","minorVersion","os","notAndroidPhone","agentRxs","wp","fire","android","iphone","ipad","meego","webos","blackberry","playbook","windows","tizen","sailfish","ffos","osRxs","ios","flat","formFactorRxs","tablet","browserRxs","omini","omobile","firefox","mobilesafari","ie","chrome","webkit","navigator","device","browser","majorVersion","flatVersion","cordova","PhoneGap","appMode","standalone","location","protocol","cssClass","docElement","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","addClass","eventCapture","input","placeholder","propertyChangeEvent","types","setAttribute","cssFloat","stableSort","sorted","field","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","selector","nodeList","querySelectorAll","parentNode","pushState","history","hashChange","customElements","mobileChrome","crios","msPointers","MSPointerEvent","pointers","PointerEvent","kineticScrollNeeded","effects","prepareAnimationOptions","duration","complete","teardown","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","autowidth","percentage","windowOuterWidth","removeClass","percentWidth","percentHeight","forceDimensions","isScrollable","dataset","className","overflow","scrollLeft","el","mozila","browserVersion","obj","toHyphens","getOffset","positioned","pageYOffset","pageXOffset","parseEffects","directions","down","up","in","out","htmlEncode","unescape","decodeURIComponent","error","_","m1","m2","fromCharCode","isLocalUrl","url","expr","expression","safe","members","wrapExpression","exprToArray","filter","getter","fields","setter","innerSetter","val","prop","props","pop","accessor","get","set","guid","random","id","chars","roleSelector","role","directiveSelector","directives","selectors","triggeredByInput","tagName","onWidgetRegistered","len","logToConsole","message","suppressLog","log","Widget","KendoLicensing","validatePackage","_showWatermarkOverlay","addWatermarkOverlay","dataSource","componentTypes","componentType","_hasBindingTarget","kendoBindingTarget","_tabindex","TABINDEX","tabindex","removeAttr","setOptions","_clearCssClasses","_setEvents","_applyCssClasses","force","getSize","currentSize","_size","_resize","dimensions","setSize","removeData","_destroy","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","domElement","offsetHeight","notify","templateRegExp","jsonRegExp","jsonFormatRegExp","dashRegExp","parseOption","option","getAttribute","parse","parseOptions","containmentComparer","contains","resizableWidget","inArray","initWidget","roles","fullPath","widgetKeyRegExp","nodeType","widgetKey","isEmptyObject","rolesFromNamespaces","namespaces","find","addBack","widgetsArray","makeArray","widgetInstance","progress","container","leftRight","webkitCorrection","containerScrollLeft","mask","scrollTop","opacity","loading","prependTo","plugin","register","widgetEntry","args","method","ContainerNullObject","nullObject","MobileWidget","autoApplyNS","kendoDestroy","view","viewElement","viewHasNativeScrolling","useNativeScrolling","eq","focusable","isTabIndexNotNaN","nodeName","disabled","href","pseudos","parents","themes","views","touchScroller","elements","useNative","Scroller","kendoMobileScroller","suites","elementData","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","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","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","addLiteral","lastPart","isHour12","startsWith","text","searchString","isInDateRange","msValue","msMin","msMax","isInTimeRange","isToday","nextDay","previousDay","toUtcTime","MS_PER_HOUR","splitDateFormat","specifier","patternLength","formatLength","nameType","datePattern","replaceAll","hour12","dateFieldName","dateFields","dateFormatNames","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","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","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","_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","layoutFlowValues","defaultValues","registerCssClass","shorthand","registerCssClasses","arr","fillModeValues","registerValues","j","newValues","currentValue","dict","widgetValues","validValue","widgetProperties","overridePrefix","registerPrefix","propertyToCssClassMap","getValidCssClass","applyStylesFromKendoAttributes","styleProps","styleProp","currentElement","$currentElement","kendoAttr","whenAll","resolveValues","remaining","deferred","Deferred","failed","rejectContexts","rejectValues","resolveContexts","updateFunc","contexts","notifyWith","done","fail","resolveWith","postToProxy","dataURI","fileName","proxyURL","proxyTarget","action","contentType","base64","submit","fileSaver","downloadAttribute","saveAsBlob","blob","atob","Uint8Array","Blob","buffer","msSaveBlob","saveAsDataURI","URL","createObjectURL","download","createEvent","initMouseEvent","dispatchEvent","revokeObjectURL","saveAs","save","forceProxy","proxyModelSetters","observable","defineProperty","dirty","getSeriesColors","series","colors","item","isElement","HTMLDocument","setDefaults","path","curr","DEBUG_KENDO_TEMPLATES","class2type","_i","setScriptKey","showBanner","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","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","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","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","ignoreCase","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","parseBatchResponse","XmlDataReader","model","errors","serialize","modelBase","Model","idField","xpathToMember","modelInstance","evaluate","record","_parse","xmlParse","xml","parseDOM","parsedNode","attributes","attributeCount","firstChild","nextSibling","intermediateResult","tree","parseXML","raw","readers","or","identity","and","operatorsMap","doesnotendwith","doesnotstartwith","transformFilter","accentFoldingFiltering","itemProp","toLocaleLowerCase","typedGetter","convertValue","op","transformCompositeFilter","combiner","extendAccentFolding","reduce","CREATE","READ","UPDATE","DESTROY","CHANGE","SYNC","GET","ERROR","REQUESTSTART","PROGRESS","REQUESTEND","ITEMSLOADED","ITEMLOAD","crud","o","objectKeys","ObservableObject","wrapAll","_loadPromises","_loadedNodes","at","serializeFunctions","json","object","isGroup","items","_loading","nodes","omitChangeEvent","howMany","omitCache","thisArg","reduceRight","every","some","empty","Symbol","_parent","eventHandler","_notifyChange","ownKeys","ignoreObjectKeys","filteredObjectKeys","protoKeys","getPrototypeOf","isPrimitiveType","getOwnPropertyNames","f","_handlers","uid","shouldSerialize","_set","composite","paths","isSetPrevented","change","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","getMatchRegexp","esc","doesnotmatch","Query","normalizeSort","descriptor","descriptors","sortFields","sorts","sortObject","filterExpr","noEval","filterExprNoEval","expressions","fieldFunctions","operatorFunctions","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","group","allData","getFilteredData","groupPaging","groupAllData","cachedFilteredData","hasSubgroups","itemCount","subgroupCount","groupBy","_sortForGrouping","groupValue","_sortGroups","sum","isNumber","average","process","groupDescriptorsWithoutSort","customGroupSort","groupDescriptors","anyGroupDescriptorHasCompare","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","itemsToRemove","removePristine","shouldRemovePristine","found","_eachItem","_removePristineForModel","pushMove","_moveItems","moved","dataItem","hasGroups","_pushInDestroyed","removeModel","_removeModelFromRanges","notFetched","promises","_sendSubmit","_send","when","then","changedItems","_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","isExcelExportRequest","_requestInProgress","_pending","_shouldWrap","_updateTotalForAction","_operationsForUpdatedFields","updatedFields","_updatedFields","operations","stringified","partialUpdate","_preventPartialUpdate","_calculateAggregates","_take","currentRangeStart","_clearEmptyGroups","_queryProcess","resultData","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","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","prev","_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","isJQueryPromise","isNativePromise","catch","signalr","hub","invoke","callbacks","_crud","server","encode","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","valueAttr","innerText","cloneNode","reference","insertBefore","unbindElementChildren","checked","selectedIndex","selected","valueIndex","valuePrimitive","sourceValue","optionIndex","optionValue","check","_range","floatingLabel","readOnly","_valueIsObservableObject","_valueIsObservableArray","_source","valueLength","sourceItem","dataTextField","isObservableObject","cascadeFrom","listView","bound","_preselect","dropdowntree","oldValues","selectedNode","nonPrimitiveValues","_isMultipleSelection","_getAllChecked","removeIndex","newValue","newLength","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","NS","INVALIDMSG","invalidMsgRegExp","INVALIDINPUT","VALIDINPUT","VALIDATIONSUMMARY","INVALIDLABEL","MESSAGEBOX","ARIAINVALID","emailRegExp","ALLOWED_URL_PROTOCOLS","INPUTSELECTOR","CHECKBOXSELECTOR","NUMBERINPUTSELECTOR","BLUR","NAME","FORM","NOVALIDATE","VALIDATE","VALIDATE_INPUT","patternMatcher","hasAttribute","parseHtml","parseHTML","searchForMessageContainer","containers","isLabelFor","validator","allowSubmit","validateOnInit","SUMMARYTEMPLATE","Validator","resolved","resolvers","ruleResolvers","resolveRules","validateAttributeSelector","_errorTemplate","errorTemplate","_summaryTemplate","validationSummary","_inputSelector","_checkboxSelector","_errors","_attachEvents","_isValidated","_validateOnInit","validate","required","email","dateCompare","captcha","noNameCheckbox","namedCheckbox","checkbox","radio","raise","matcher","includes","isValidated","isValid","getCaptchaId","_validating","_checkElement","validateOnBlur","_allowSubmit","stopImmediatePropagation","validateInput","inputs","invalid","showValidationSummary","valid","_checkValidity","lbl","_findMessageContainer","messageText","_extractMessage","messageLabel","wasValid","isInputInner","inputWrapper","lblId","_decorateMessageContainer","replaceWith","parentElement","nextElement","prevElement","insertAfter","_inputWrapper","inputWrap","inputLabel","_inputLabel","errorId","_associateMessageContainer","hideMessages","_disassociateMessageContainers","labels","hideValidationSummary","locators","messageLocators","getElementsByTagName","locate","decorate","ruleKey","nonDefaultMessage","customMessage","_getInputNames","_errorsByName","inputNames","_renderSummary","_summaryClick","link","errorsList","summary","SAME","BROKEN_BACK_NAV","hashStrip","absoluteURL","pathPrefix","host","hashDelimiter","bang","locationHash","stripRoot","root","HistoryAdapter","forward","replaceLocation","PushStateAdapter","navigate","title","replaceState","normalize","pathname","normalizeCurrent","fixedUrl","hash","hashBang","fixHash","fixBang","HashAdapter","_id","_interval","setInterval","clearInterval","History","adapter","createAdapter","historyLength","locations","_checkUrl","silent","_navigate","backCalled","decode","navigatingInExisting","backButtonPressed","INIT","ROUTE_MISSING","BACK","optionalParam","namedParam","splatParam","escapeRegExp","namedParamReplace","optional","stripUrl","Route","route","routeToRegExp","_callback","queryStringParams","_back","worksWith","Router","routes","_urlChangedProxy","_sameProxy","_backProxy","backProxy","urlChangedProxy","_urlChanged","same","_same","initEventObject","TRANSITION_START","TRANSITION_END","SHOW","HIDE","sizzleErrorRegExp","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","_wrapper","_createContent","_createHeader","_createFooter","contentSelector","contentElement","footer","Layout","_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","_findViewElementById","_createSpaView","_createMobileView","defaultTransition","loader","getLayout","getLayoutProxy","modelScope","viewOptions","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","ownerDocument","pressed","defaultAction","touchAction","preventDragEvent","surfaceElement","preventIfMovingProxy","preventIfMoving","_isMoved","_disposeAll","capture","_isMultiTouch","_apiCall","_maxTouchesReached","_select","which","_move","_eachTouch","_end","_click","pageX","pageY","matchingTouch","ClickMoveClick","_downStarted","_down","_downTarget","_up","currentMilestone","_preventCancel","clickMoveClick","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","_startClickMoveClick","_drag","_onCancel","hold","_afterEndHandler","_afterEnd","_captureEscape","cursorOffset","holdToDrag","showHintOnHold","autoScroll","preventOsHoldFeatures","cancelHold","_updateHint","boundaries","hintOffset","hint","_shouldIgnoreTarget","ignoreSelector","_hint","currentTargetOffset","cursorElement","_elementUnderCursor","_cursorElement","_scrollableParent","findScrollableParent","_lastEvent","_processMovement","autoScrollVelocity","scrollableViewPort","_scrollCompenstation","_scrollVelocity","_scrollInterval","_autoScroll","_withDropTarget","targetElement","compensation","yIsScrollable","xIsScrollable","isRootNode","scrollableRoot","yInBounds","xInBounds","_cancel","initialTarget","targets","areas","theTarget","theFilter","targetLen","areaLen","checkTarget","mouseX","mouseY","rect","AUTO_SCROLL_AREA","utils","OPEN","CLOSE","DEACTIVATE","ACTIVATE","CENTER","TOP","BOTTOM","ABSOLUTE","BODY","LOCATION","VISIBLE","EFFECTS","ACTIVE","ACTIVECHILDREN","DOCUMENT_ELEMENT","WINDOW","SCROLL","Popup","parentPopup","collisions","collision","downEvent","anchor","_hovered","scrollArea","animation","open","_animationClose","_mousedownProxy","_mousedown","_resizeProxy","toggleTarget","toggleEvent","viewport","copyAnchorStyles","modal","adjustSize","omitOriginOffsets","_hideActiveClass","_closing","_toggleResize","fixed","_shouldCorrectWidth","listbox","_resizeOnWrap","flipped","_position","_openAnimation","_addActiveClass","_location","skipEffects","openEffects","closeEffects","popup","_resizeTimeout","_scrollableParents","_fit","viewPortSize","output","_flip","anchorSize","boxSize","siblingContainer","parentZIndex","viewportOffset","viewportWidth","viewportHeight","isWindow","origins","positions","siblings","_align","pos","offsetParent","offsets","flipPos","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","eventProxy","_triggerTouch","gestureEventProxy","tap","gestureend","enableSwipe","_swipestart","_swipemove","_dragstart","minXDelta","maxYDelta","maxDuration","doubleTapTimeout","lastTap","RELEASECLASS","REFRESHCLASS","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"],"sources":["kendo.mobile.js"],"mappings":"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","sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery')) :\n typeof define === 'function' && define.amd ? define(['jquery'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (global.kendomobile = global.kendomobile || {}, global.kendomobile.js = factory()));\n})(this, (function () {\n let breakpoints;\n const EVENT = \"change\";\n\n const defaultBreakpoints = {\n small: \"(max-width: 500px)\",\n medium: \"(min-width: 500.1px) and (max-width: 768px)\",\n large: \"(min-width: 768.1px)\",\n };\n\n function createMediaQuery(query) {\n let mediaQueryList = window.matchMedia(query);\n let onEnterCallbacks = [];\n let onLeaveCallbacks = [];\n let onChangeHandlers = [];\n let kendoMediaQuery = { mediaQueryList };\n\n const onChangeHandler = (ev) => {\n onChangeHandlers.forEach((cb) => cb(ev));\n\n if (ev.matches) {\n onEnterCallbacks.forEach((cb) => cb(ev));\n } else {\n onLeaveCallbacks.forEach((cb) => cb(ev));\n }\n };\n\n mediaQueryList.addEventListener(EVENT, onChangeHandler);\n\n const onChange = (cb) => {\n onChangeHandlers.push(cb);\n return kendoMediaQuery;\n };\n\n const onEnter = (cb) => {\n onEnterCallbacks.push(cb);\n\n if (mediaQueryList.matches) {\n const media = mediaQueryList.media;\n const matches = true;\n\n const ev = new MediaQueryListEvent(EVENT, {\n media,\n matches,\n });\n\n cb(ev);\n }\n\n return kendoMediaQuery;\n };\n\n const onLeave = (cb) => {\n onLeaveCallbacks.push(cb);\n return kendoMediaQuery;\n };\n\n const destroy = () => {\n if (mediaQueryList) {\n mediaQueryList.removeEventListener(EVENT, onChangeHandler);\n }\n onEnterCallbacks = null;\n onLeaveCallbacks = null;\n onChangeHandlers = null;\n mediaQueryList = null;\n kendoMediaQuery = null;\n };\n\n kendoMediaQuery.onChange = onChange;\n kendoMediaQuery.onEnter = onEnter;\n kendoMediaQuery.onLeave = onLeave;\n kendoMediaQuery.destroy = destroy;\n\n return kendoMediaQuery;\n }\n\n function mediaQuery(query) {\n if (!query) {\n return;\n }\n\n breakpoints =\n breakpoints ||\n Object.assign({}, defaultBreakpoints, kendo.defaults.breakpoints);\n\n if (query in breakpoints) {\n query = breakpoints[query];\n }\n\n return createMediaQuery(query);\n }\n\n var __meta__$e = {\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', 'UIASPCORE', 'KENDOMVC', 'KENDOUIMVC'],\n publishDate: 0,\n version: '2024.2.514'.replace(/^\\s+|\\s+$/g, ''),\n licensingDocsUrl: 'https://docs.telerik.com/kendo-ui/intro/installation/using-license-code?utm_medium=product&utm_source=kendojquery&utm_campaign=kendo-ui-jquery-purchase-license-keys-warning'\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 MONTH = \"month\",\n HOUR = \"hour\",\n ZONE = \"zone\",\n WEEKDAY = \"weekday\",\n QUARTER = \"quarter\",\n DATE_FIELD_MAP = {\n \"G\": \"era\",\n \"y\": \"year\",\n \"q\": QUARTER,\n \"Q\": QUARTER,\n \"M\": MONTH,\n \"L\": MONTH,\n \"d\": \"day\",\n \"E\": WEEKDAY,\n \"c\": WEEKDAY,\n \"e\": WEEKDAY,\n \"h\": HOUR,\n \"H\": HOUR,\n \"k\": HOUR,\n \"K\": HOUR,\n \"m\": \"minute\",\n \"s\": \"second\",\n \"a\": \"dayperiod\",\n \"t\": \"dayperiod\",\n \"x\": ZONE,\n \"X\": ZONE,\n \"z\": ZONE,\n \"Z\": ZONE\n },\n NAME_TYPES = {\n month: {\n type: \"months\",\n minLength: 3,\n standAlone: \"L\"\n },\n\n quarter: {\n type: \"quarters\",\n minLength: 3,\n standAlone: \"q\"\n },\n\n weekday: {\n type: \"days\",\n minLength: {\n E: 0,\n c: 3,\n e: 3\n },\n standAlone: \"c\"\n },\n\n dayperiod: {\n type: \"dayPeriods\",\n minLength: 0\n },\n\n era: {\n type: \"eras\",\n minLength: 0\n }\n },\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 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[ 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 = \"2024.2.514\".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 const isPresent = kendo.isPresent = (value) => value !== null && value !== undefined$1;\n const isBlank = kendo.isBlank = (value) => value === null || value === undefined$1;\n const isString = kendo.isString = (value) => typeof value === 'string';\n const isNumeric = kendo.isNumeric = (value) => !isNaN(value - parseFloat(value));\n const isDate = kendo.isDate = (value) => value && value.getTime;\n const isFunction = kendo.isFunction = (value) => typeof value === 'function';\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 // This function evaluation is required for legacy support of the Kendo Template syntax - non CSP compliant.\n fn = new Function(argumentName, functionBody);\n fn._slotCount = Math.floor(parts.length / 2);\n return fn;\n } catch (e) {\n if (kendo.debugTemplates) {\n window.console.warn(`Invalid template:'${template}' Generated code:'${functionBody}'`);\n } else {\n throw new Error(kendo.format(\"Invalid template:'{0}' Generated code:'{1}'\", template, functionBody));\n }\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 = /EEEE|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 = kendo.cultures || {}; // Ensure cultures object exists\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 function appendDesignatorsToCultures(calendars) {\n // Don't ask. It's temporary.\n if ((calendars.standard.AM && calendars.standard.AM.length)\n && (calendars.standard.PM && calendars.standard.PM.length)\n && (calendars.standard.AM.indexOf(\"PMA0\") < 0)\n && (calendars.standard.AM.indexOf(\"AM\") > -1 || calendars.standard.PM.indexOf(\"PM\") > -1)) {\n calendars.standard.AM.push(\"a\", \"A\", \"PMa\", \"PMA\", \"PMa0\", \"PMA0\");\n calendars.standard.PM.push(\"p\", \"P\", \"AMp\", \"AMP\", \"AMp0\", \"AMP0\");\n }\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 appendDesignatorsToCultures(cultures.current.calendars);\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 = format.pattern || 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\" || match === \"EEEE\") {\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\" || match === \"aa\") {\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, calculateFromHidden) {\n element = $(element);\n if (calculateFromHidden) {\n return getHiddenDimensions(element, includeMargin).width;\n }\n\n return $(element).outerWidth(includeMargin || false) || 0;\n };\n kendo._outerHeight = function(element, includeMargin, calculateFromHidden) {\n element = $(element);\n if (calculateFromHidden) {\n return getHiddenDimensions(element, includeMargin).height;\n }\n\n return $(element).outerHeight(includeMargin || false) || 0;\n };\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 exact3: /^\\d{3}/\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 unpadZero(value) {\n return value.replace(/^0*/, '');\n }\n\n function parseExact(value, format, culture, strict, shouldUnpadZeros) {\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 longestDesignatorLength = (designators) => Array.from(designators).sort((a, b) => b.length - a.length)[0].length,\n getNumber = function(size) {\n var rg, match, part = \"\";\n if (size === 2) {\n for (let i = 0; i <= size; i++) {\n part += value[valueIdx + i] || \"\";\n }\n }\n\n // If the value comes in the form of 021, 022, 023 we must trim the leading zero otherwise the result will be 02 in all three cases instead of 21/22/23.\n if (shouldUnpadZeros && part.match(numberRegExp.exact3) && Number.isInteger(Number(part)) && Number(part) > 0) {\n part = unpadZero(part);\n } else {\n part = value.substr(valueIdx, size);\n }\n\n rg = numberRegExp[size] || new RegExp('^\\\\d{1,' + size + '}');\n match = part.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, subLength) {\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, subLength || nameLength); // The `subLength` is part of the appendDesignatorsToCultures logic.\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, false, longestDesignatorLength(pmDesignators));\n if (!pmHour && !getIndexByName(amDesignators, false, longestDesignatorLength(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, shouldUnpadZeros) {\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, shouldUnpadZeros);\n if (date) {\n return date;\n }\n }\n\n return date;\n }\n\n kendo.parseDate = function(value, formats, culture, shouldUnpadZeros) {\n return internalParseDate(value, formats, culture, false, shouldUnpadZeros);\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 getHiddenDimensions(element, includeMargin) {\n var clone, width, height;\n\n clone = element.clone();\n clone.css(\"display\", \"\");\n clone.css(\"visibility\", \"hidden\");\n clone.appendTo($(\"body\"));\n\n width = clone.outerWidth(includeMargin || false);\n height = clone.outerHeight(includeMargin || false);\n\n clone.remove();\n\n return {\n width: width || 0,\n height: height || 0\n };\n }\n\n function wrap(element, autosize, resize, shouldCorrectWidth = true, autowidth) {\n var percentage,\n outerWidth = kendo._outerWidth,\n outerHeight = kendo._outerHeight,\n parent = element.parent(),\n windowOuterWidth = outerWidth(window);\n\n parent.parent().removeClass(\"k-animation-container-sm\");\n\n if (!parent.hasClass(\"k-child-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 forceDimensions = element.hasClass(\"k-tooltip\") || element.is(\".k-menu-horizontal.k-context-menu\"),\n calculateFromHidden = element.hasClass(\"k-tooltip\");\n\n percentage = percentWidth || percentHeight;\n\n if (!percentWidth && (!autosize || (autosize && width) || forceDimensions)) { width = autosize ? outerWidth(element, false, calculateFromHidden) + 1 : outerWidth(element, false, calculateFromHidden); }\n if (!percentHeight && (!autosize || (autosize && height)) || forceDimensions) { height = outerHeight(element, false, calculateFromHidden); }\n\n element.wrap(\n $(\"
\")\n .addClass(\"k-child-animation-container\")\n .css({\n width: autowidth ? \"auto\" : width,\n height: height\n }));\n parent = element.parent();\n\n parent.wrap(\n $(\"
\")\n .addClass(\"k-animation-container\")\n .attr(\"role\", \"region\")\n );\n\n if (percentage) {\n element.css({\n width: \"100%\",\n height: \"100%\"\n });\n }\n } else {\n wrapResize(element, autosize, shouldCorrectWidth);\n }\n\n parent = parent.parent();\n\n if (windowOuterWidth < outerWidth(parent)) {\n parent.addClass(\"k-animation-container-sm\");\n resize = true;\n }\n\n if (resize) {\n wrapResize(element, autosize, shouldCorrectWidth);\n }\n\n return parent;\n }\n\n function wrapResize(element, autosize, shouldCorrectWidth) {\n var percentage,\n outerWidth = kendo._outerWidth,\n outerHeight = kendo._outerHeight,\n parent = element.parent(),\n wrapper = element.closest(\".k-animation-container\"),\n calculateFromHidden = element.hasClass(\"k-tooltip\"),\n visible = element.is(\":visible\"),\n wrapperStyle = parent[0].style,\n elementHeight = element[0].style.height;\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 if (!visible) {\n element.add(parent).show();\n }\n if (shouldCorrectWidth) {\n parent.css(\"width\", \"\"); // Needed to get correct width dimensions\n }\n parent.css({\n width: autosize ? outerWidth(element, false, calculateFromHidden) + 1 : outerWidth(element, false, calculateFromHidden),\n });\n\n if (elementHeight === \"auto\") {\n element.css({ height: outerHeight(parent) });\n } else {\n parent.css({\n height: outerHeight(element)\n });\n }\n\n if (!visible) {\n element.hide();\n }\n }\n }\n\n function deepExtend(destination) {\n var i = 1,\n length = arguments.length;\n\n for (i = 1; i < length; i++) {\n deepExtendOne(destination, arguments[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) {\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 majorVersion: 13\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 && (mobileOS.device !== \"ipad\" || mobileOS.majorVersion < 13) && (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 mediaQuery: mediaQuery,\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 exprToArray: (expression, safe) => {\n expression = expression || \"\";\n\n return expression.indexOf(\".\") >= 0 || expression.indexOf(\"[\") >= 0 ?\n expression.split(/[[\\].]/).map(v => v.replace(/[\"']/g, '')).filter(v => v) :\n expression === \"\" ? [] : [expression];\n },\n\n getter: function(expression, safe) {\n var key = expression + safe;\n\n return getterCache[key] = getterCache[key] || ((obj) => {\n const fields = kendo.exprToArray(expression, safe);\n\n let result = obj;\n for (let idx = 0; idx < fields.length; idx++) {\n result = result[fields[idx]];\n if (!kendo.isPresent(result) && safe) {\n return result;\n }\n }\n\n return result;\n });\n },\n\n setter: function(expression) {\n return setterCache[expression] = setterCache[expression] || ((obj, value) => {\n const fields = kendo.exprToArray(expression);\n\n const innerSetter = ({ parent, val, prop, props }) => {\n if (props.length) {\n parent = parent[props.shift()];\n innerSetter({ parent, val, prop, props });\n } else {\n parent[prop] = val;\n }\n };\n\n innerSetter({\n parent: obj,\n val: value,\n prop: fields.pop(),\n props: fields\n });\n });\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 if (!validatePackage()) {\n that._showWatermarkOverlay = addWatermarkOverlay;\n }\n\n that.element = kendo.jQuery(element).handler(that);\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\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 dataItems: function() {\n return this.dataSource.flatView();\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 try {\n value = JSON.parse(value);\n } catch (error) {\n // Fallback to function eval for legacy reason - non CSP compliant\n value = new Function(\"return (\" + value + \")\")();\n }\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 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 // 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 function addLiteral(parts, value) {\n var lastPart = parts[parts.length - 1];\n if (lastPart && lastPart.type === \"LITERAL\") {\n lastPart.pattern += value;\n } else {\n parts.push({\n type: \"literal\",\n pattern: value\n });\n }\n }\n\n function isHour12(pattern) {\n return pattern === \"h\" || pattern === \"K\";\n }\n\n function dateNameType(formatLength) {\n var nameType;\n if (formatLength <= 3) {\n nameType = \"abbreviated\";\n } else if (formatLength === 4) {\n nameType = \"wide\";\n } else if (formatLength === 5) {\n nameType = \"narrow\";\n }\n\n return nameType;\n }\n\n function startsWith(text, searchString, position) {\n position = position || 0;\n return text.indexOf(searchString, position) === position;\n }\n\n function datePattern(format, info) {\n var calendar = info.calendar;\n var result;\n if (typeof format === \"string\") {\n if (calendar.patterns[format]) {\n result = calendar.patterns[format];\n } else {\n result = format;\n }\n }\n\n if (!result) {\n result = calendar.patterns.d;\n }\n\n return result;\n }\n\n function splitDateFormat(format) {\n var info = kendo.culture();\n var pattern = datePattern(format, info).replaceAll(\"dddd\", \"EEEE\").replaceAll(\"ddd\", \"EEE\").replace(\"tt\", \"aa\");\n var parts = [];\n var dateFormatRegExp = /d{1,2}|E{1,6}|e{1,6}|c{3,6}|c{1}|M{1,5}|L{1,5}|y{1,4}|H{1,2}|h{1,2}|k{1,2}|K{1,2}|m{1,2}|a{1,5}|s{1,2}|S{1,3}|t{1,2}|z{1,4}|Z{1,5}|x{1,5}|X{1,5}|G{1,5}|q{1,5}|Q{1,5}|\"[^\"]*\"|'[^']*'/g;\n\n var lastIndex = dateFormatRegExp.lastIndex = 0;\n var match = dateFormatRegExp.exec(pattern);\n var specifier;\n var type;\n var part;\n var names;\n var minLength;\n var patternLength;\n\n while (match) {\n var value = match[0];\n\n if (lastIndex < match.index) {\n addLiteral(parts, pattern.substring(lastIndex, match.index));\n }\n\n if (startsWith(value, '\"') || startsWith(value, \"'\")) {\n addLiteral(parts, value);\n } else {\n specifier = value[0];\n type = DATE_FIELD_MAP[specifier];\n part = {\n type: type,\n pattern: value\n };\n\n if (type === \"hour\") {\n part.hour12 = isHour12(value);\n }\n\n names = NAME_TYPES[type];\n\n if (names) {\n minLength = typeof names.minLength === \"number\" ? names.minLength : names.minLength[specifier];\n patternLength = value.length;\n\n if (patternLength >= minLength && value !== \"aa\") {\n part.names = {\n type: names.type,\n nameType: dateNameType(patternLength),\n standAlone: names.standAlone === specifier\n };\n }\n }\n\n parts.push(part);\n }\n\n lastIndex = dateFormatRegExp.lastIndex;\n match = dateFormatRegExp.exec(pattern);\n }\n\n if (lastIndex < pattern.length) {\n addLiteral(parts, pattern.substring(lastIndex));\n }\n\n return parts;\n }\n\n function dateFormatNames(options) {\n let { type, nameType } = options;\n const info = kendo.culture();\n if (nameType === \"wide\") {\n nameType = \"names\";\n }\n if (nameType === \"abbreviated\") {\n nameType = \"namesAbbr\";\n }\n if (nameType === \"narrow\") {\n nameType = \"namesShort\";\n }\n let result = info.calendar[type][nameType];\n if (!result) {\n result = info.calendar[type][\"name\"];\n }\n return result;\n }\n\n function dateFieldName(options) {\n const info = kendo.culture();\n const dateFields = info.calendar.dateFields;\n const fieldNameInfo = dateFields[options.type] || {};\n\n return fieldNameInfo[options.nameType];\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 splitDateFormat: splitDateFormat,\n dateFieldName: dateFieldName,\n dateFormatNames: dateFormatNames,\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.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', 'resize'], ['horizontal', 'resize-x'], ['vertical', 'resize-y'] ];\n var overflowValues = [ 'auto', 'hidden', 'visible', 'scroll', 'clip' ];\n var layoutFlowValues = [ ['vertical', '!k-flex-col'], ['horizontal', '!k-flex-row'] ];\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 overridePrefix = args.prefix,\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-\";\n } else if (propName === \"overflow\") {\n prefix = \"k-overflow-\";\n } else if (propName === \"layoutFlow\") {\n prefix = \"\";\n } else {\n prefix = widgetProperties[PREFIX];\n }\n\n prefix = overridePrefix || prefix;\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 registerCssClasses(\"layoutFlow\", layoutFlowValues);\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 kendo.applyStylesFromKendoAttributes = function(element, styleProps) {\n let selector = styleProps.map(styleProp=> `[${kendo.attr(`style-${styleProp}`)}]`).join(',');\n element.find(selector).addBack(selector).each((_, currentElement) => {\n let $currentElement = $(currentElement);\n styleProps.forEach(function(styleProp) {\n let kendoAttr = kendo.attr(`style-${styleProp}`);\n if ($currentElement.attr(kendoAttr)) {\n $currentElement.css(styleProp, $currentElement.attr(kendoAttr));\n $currentElement.removeAttr(kendoAttr);\n }\n });\n });\n };\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 // Use external global flags for templates.\n kendo.debugTemplates = window.DEBUG_KENDO_TEMPLATES;\n\n // Setup default mediaQuery breakpoints\n kendo.setDefaults('breakpoints', defaultBreakpoints);\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() { return true; },setScriptKey: function() {} };\n\n window.KendoLicensing = {\n setScriptKey: KendoLicensing.setScriptKey\n };\n\n function validatePackage() {\n return KendoLicensing.validatePackage(packageMetadata);\n }\n\n function addWatermarkOverlay(el) {\n KendoLicensing.addWatermarkOverlay && KendoLicensing.addWatermarkOverlay(el, packageMetadata);\n KendoLicensing.showBanner && KendoLicensing.showBanner(packageMetadata);\n }\n\n })(jQuery, window);\n var kendo$g = kendo;\n\n var __meta__$d = {\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 var kendo$f = kendo;\n\n var __meta__$c = {\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 var kendo$e = kendo;\n\n var __meta__$b = {\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 var kendo$d = kendo;\n\n /*\n This code is copied/inspired by the internal @progress/kendo-data-query repo:\n https://github.com/telerik/kendo-data-query/tree/develop/src/filtering\n\n !!!\n 1. If updates are to be synced consider the accentFoldingFiltering,\n which at the moment is not present as a feature in the data-query-package.\n\n 2. Double-check available operators as well.\n\n 3. Make sure objs are strings -> i.e., replace (a || \"\") to (a + '')\n !!!\n\n In future, if we consider reusing the code directly we should revise the above omissions.\n */\n\n const logic = {\n \"or\": {\n concat: (acc, fn) => a => acc(a) || fn(a),\n identity: () => false\n },\n \"and\": {\n concat: (acc, fn) => a => acc(a) && fn(a),\n identity: () => true\n }\n };\n\n const operatorsMap = {\n isnullorempty: (a) => kendo.isBlank(a) || a === '',\n isnotnullorempty: (a) => kendo.isPresent(a) && a !== '',\n contains: (a, b) => (a + '').indexOf(b) >= 0,\n doesnotcontain: (a, b) => (a + '').indexOf(b) === -1,\n doesnotendwith: (a, b) => (a + '').indexOf(b, (a || \"\").length - (b || \"\").length) < 0,\n doesnotstartwith: (a, b) => (a + '').lastIndexOf(b, 0) === -1,\n endswith: (a, b) => (a + '').indexOf(b, (a || \"\").length - (b || \"\").length) >= 0,\n eq: (a, b) => a === b,\n gt: (a, b) => a > b,\n gte: (a, b) => a >= b,\n isempty: (a) => a === '',\n isnotempty: (a) => a !== '',\n isnotnull: (a) => kendo.isPresent(a),\n isnull: (a) => kendo.isBlank(a),\n lt: (a, b) => a < b,\n lte: (a, b) => a <= b,\n neq: (a, b) => a != b,\n startswith: (a, b) => (a + '').lastIndexOf(b, 0) === 0\n };\n\n const dateRegExp = /^\\/Date\\((.*?)\\)\\/$/;\n\n const convertValue = (value, ignoreCase, accentFoldingFiltering) => {\n if (value != null && kendo.isString(value)) {\n const date = dateRegExp.exec(value);\n if (date) {\n return new Date(+date[1]).getTime();\n } else if (ignoreCase) {\n return accentFoldingFiltering ? value.toLocaleLowerCase(accentFoldingFiltering) : value.toLowerCase();\n }\n } else if (value != null && kendo.isDate(value)) {\n return value.getTime();\n }\n return value;\n };\n\n const typedGetter = (prop, value, ignoreCase, accentFoldingFiltering) => {\n if (!kendo.isPresent(value)) {\n return prop;\n }\n\n let acc = prop;\n\n if (kendo.isString(value)) {\n const date = dateRegExp.exec(value);\n if (date) {\n value = new Date(+date[1]);\n } else {\n acc = a => {\n const x = prop(a);\n if (typeof x === 'string' && ignoreCase) {\n return accentFoldingFiltering ? x.toLocaleLowerCase(accentFoldingFiltering) : x.toLowerCase();\n } else {\n return kendo.isNumeric(x) ? x + \"\" : x;\n }\n };\n }\n }\n\n if (kendo.isDate(value)) {\n return a => {\n const x = acc(a);\n return kendo.isDate(x) ? x.getTime() : x;\n };\n }\n return acc;\n };\n\n const transformFilter = ({ field, ignoreCase, value, operator = 'eq', accentFoldingFiltering }) => {\n field = !kendo.isPresent(field) ? a => a : field;\n\n ignoreCase = kendo.isPresent(ignoreCase) ? ignoreCase : true;\n\n const itemProp = typedGetter(\n kendo.isFunction(field) ? field : kendo.getter(field, true),\n value,\n ignoreCase,\n accentFoldingFiltering\n );\n\n value = convertValue(value, ignoreCase, accentFoldingFiltering);\n\n const op = kendo.isFunction(operator) ? operator : operatorsMap[operator];\n\n return a => op(itemProp(a), value, ignoreCase);\n };\n\n const isCompositeFilterDescriptor = (source) => kendo.isPresent(source.filters);\n\n const transformCompositeFilter = (filter) => {\n const accentFoldingFiltering = filter.accentFoldingFiltering;\n const combiner = logic[filter.logic || 'and'];\n return filter.filters\n .filter(kendo.isPresent)\n .map(x => (isCompositeFilterDescriptor(x) ? transformCompositeFilter(extendAccentFolding(x, accentFoldingFiltering)) : transformFilter(extendAccentFolding(x, accentFoldingFiltering))))\n .reduce(combiner.concat, combiner.identity);\n };\n\n const extendAccentFolding = (filter, accentFoldingFiltering) => (kendo.isPresent(accentFoldingFiltering) ? Object.assign(filter, { accentFoldingFiltering }) : filter);\n\n const filterExprNoEval = function(expr) {\n return transformCompositeFilter(expr);\n };\n\n var __meta__$a = {\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: this.omitCache && this.omitCache.length ? result.concat(this.omitCache) : result\n });\n this.omitCache = [];\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 this._loadPromises = [];\n this._loadedNodes = [];\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)).filter(f => f.indexOf(\"__\") !== 0);\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 || field.defaultValue) {\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 // Continue to support legacy unsafe-eval for the spreadsheet\n Query.filterExpr = function(expression, options = { noEval: false }) {\n if (options.noEval) {\n // using no-eval for most cases\n return filterExprNoEval(expression);\n }\n\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 compiled,\n data = this.data,\n result = [];\n\n expressions = normalizeFilter(expressions);\n\n if (!expressions || expressions.filters.length === 0) {\n return this;\n }\n\n compiled = Query.filterExpr(expressions, { noEval: true });\n\n result = data.filter(compiled);\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 var getFilteredData = (g, data) => {\n data = data || new Query(allData).filter([{\n field: g.field,\n operator: \"eq\",\n value: g.value,\n ignoreCase: false\n }]);\n\n return data;\n };\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 cachedFilteredData;\n\n var items = descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), getFilteredData(group, cachedFilteredData).toArray(), options).toArray() : group.items;\n\n return {\n field: group.field,\n value: group.value,\n hasSubgroups: descriptors.length > 1,\n items: items,\n aggregates: descriptor.aggregates && descriptor.aggregates.length ? getFilteredData(group, cachedFilteredData).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 cachedFilteredData;\n return {\n field: group.field,\n value: group.value,\n items: descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), getFilteredData(group, cachedFilteredData).toArray()).toArray() : group.items,\n hasSubgroups: descriptors.length > 1,\n aggregates: descriptor.aggregates && descriptor.aggregates.length ? getFilteredData(group, cachedFilteredData).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(itemsToRemove, removePristine) {\n if (!isArray(itemsToRemove)) {\n itemsToRemove = [itemsToRemove];\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 < itemsToRemove.length; idx ++) {\n var item = itemsToRemove[idx];\n var model = this._createNewModel(item);\n var found = false;\n var index = idx;\n\n this._eachItem(this._data, function(items) {\n // Ensure all children of a parent are removed before the change event is triggered.\n if (index !== itemsToRemove.length - 1) {\n items.omitChangeEvent = true;\n items.omitCache = [];\n } else {\n items.omitChangeEvent = false;\n }\n\n for (var idx = 0; idx < items.length; idx++) {\n var item = items.at(idx);\n if (item.id === model.id) {\n /* When the change event is omitted, certain calculations such as 'total' are broken because only the last item reaches the change handler.\n Keep track of all child items that had their change event omitted and when the change is finally triggered, concat them to the result.*/\n if (items.omitChangeEvent) {\n items.omitCache.push(item);\n }\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\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.uid === item.uid) {\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() && !data[idx].notFetched) {\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 idx, length, changedItems = [];\n\n for (idx = 0, length = arguments.length; idx < length; idx++) {\n if (arguments[idx]) {\n that._accept(arguments[idx]);\n changedItems = arguments[idx].models;\n }\n }\n\n that._storeData(true);\n\n that._syncEnd();\n\n that._change({ action: \"sync\", changedItems: changedItems });\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 isExcelExportRequest: that.options.isExcelExportRequest\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 || !(that.options.serverPaging && that.options.serverGrouping)) {\n delete options.groupPaging;\n }\n\n if (!that.options.isExcelExportRequest) {\n delete options.isExcelExportRequest;\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 _operationsForUpdatedFields: function() {\n const that = this,\n updatedFields = that._updatedFields || [],\n operations = {};\n\n let found = false,\n stringified;\n\n operations.sort = that._sort;\n operations.filter = that._filter;\n operations.group = that._group;\n operations.aggregate = that._aggregate;\n\n stringified = stringify(operations);\n found = updatedFields.some(u => stringified.indexOf((`\"field\":\"${u}\"`)) > -1);\n\n return !found;\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 let that = this, idx, items, 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 (e) {\n items = e.items || [];\n e.partialUpdate = that._operationsForUpdatedFields() && !that._preventPartialUpdate;\n\n if (e.action === \"itemchange\" && items.some(i => i.dirtyFields)) {\n that._updatedFields = Object.keys(e.items[0].dirtyFields);\n }\n }\n\n if (that.options.autoSync && (action === \"add\" || action === \"remove\" || action === \"itemchange\")) {\n if (action === \"add\") {\n that._preventPartialUpdate = true;\n }\n\n var handler = function(args) {\n if (args.action === \"sync\") {\n that._preventPartialUpdate = false;\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 if (that._isGrouped() && !this._isServerGrouped()) {\n resultData = flattenGroups(resultData);\n }\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 = Math.max(0, 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, groupItemsSkip, 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 }\n\n data.groupPaging = true;\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 = {\n logic: \"and\",\n filters: []\n };\n\n if (this.filter()) {\n filter.filters.push(this.filter());\n }\n\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 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, { noEval: true });\n\n this._updateHierarchicalFilter(compiled);\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 var kendo$c = kendo;\n\n var __meta__$9 = {\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 var kendo$b = kendo;\n\n var __meta__$8 = {\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 encode = kendo.htmlEncode,\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 = (data) => {\n const valueAttr = kendo.getter(options.valueField || options.textField)(data);\n const innerText = kendo.getter(options.textField || options.valueField)(data);\n return ``;\n };\n } else {\n template = (data) => ``;\n }\n } else if (nodeName == \"tbody\") {\n template = (data) => `${encode(data)}`;\n } else if (nodeName == \"ul\" || nodeName == \"ol\") {\n template = (data) => `
  • ${encode(data)}
  • `;\n } else {\n template = (data) => `${encode(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 var val = this.bindings[CHECKED].get();\n\n if (this.element.type === \"radio\") {\n if (val !== undefined$1) {\n this.widget.check(val.toString() === this.value());\n } else {\n this.widget.check(false);\n }\n } else {\n this.widget.check(val === 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 this.readonly = this.element.readOnly;\n },\n\n refresh: function() {\n if (this.widget.enable) {\n this.widget.enable(this.bindings.enabled.get());\n }\n if (this.readonly && this.widget.readonly) {\n this.widget.readonly(this.readonly);\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\n if (!element) {\n return;\n }\n\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 var kendo$a = kendo;\n\n let __meta__$7 = {\n id: \"validator\",\n name: \"Validator\",\n category: \"web\",\n description: \"The Validator offers an easy way to do a client-side form validation.\",\n depends: [ \"core\" ]\n };\n\n\n (function($, undefined$1) {\n let kendo = window.kendo,\n Widget = kendo.ui.Widget,\n NS = \".kendoValidator\",\n INVALIDMSG = \"k-invalid-msg\",\n invalidMsgRegExp = new RegExp(INVALIDMSG,'i'),\n INVALIDINPUT = \"k-invalid\",\n VALIDINPUT = \"k-valid\",\n VALIDATIONSUMMARY = \"k-validation-summary\",\n INVALIDLABEL = \"k-text-error\",\n MESSAGEBOX = \"k-messagebox k-messagebox-error\",\n INPUTINNER = \".k-input-inner\",\n INPUTWRAPPER = \".k-input\",\n ARIAINVALID = \"aria-invalid\",\n ARIADESCRIBEDBY = \"aria-describedby\",\n emailRegExp = /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/i,\n ALLOWED_URL_PROTOCOLS = [\"http:\", \"https:\", \"ftp:\", \"ftps:\"],\n INPUTSELECTOR = \":input:not(:button,[type=submit],[type=reset],[disabled],[readonly])\",\n CHECKBOXSELECTOR = \":checkbox:not([disabled],[readonly])\",\n NUMBERINPUTSELECTOR = \"[type=number],[type=range]\",\n BLUR = \"blur\",\n NAME = \"name\",\n FORM = \"form\",\n NOVALIDATE = \"novalidate\",\n //events\n VALIDATE = \"validate\",\n CHANGE = \"change\",\n VALIDATE_INPUT = \"validateInput\",\n\n patternMatcher = function(value, pattern) {\n if (typeof pattern === \"string\") {\n pattern = new RegExp('^(?:' + pattern + ')$');\n }\n return pattern.test(value);\n },\n matcher = function(input, selector, pattern) {\n var value = input.val();\n\n if (input.filter(selector).length && value !== \"\") {\n return patternMatcher(value, pattern);\n }\n return true;\n },\n hasAttribute = function(input, name) {\n if (input.length) {\n return input[0].attributes[name] != null;\n }\n return false;\n };\n\n if (!kendo.ui.validator) {\n kendo.ui.validator = { rules: {}, messages: {}, allowSubmit: $.noop, validateOnInit: $.noop };\n }\n\n function resolveRules(element) {\n var resolvers = kendo.ui.validator.ruleResolvers || {},\n rules = {},\n name;\n\n for (name in resolvers) {\n $.extend(true, rules, resolvers[name].resolve(element));\n }\n return rules;\n }\n\n function decode(value) {\n return value.replace(/&/g, '&')\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/</g, '<')\n .replace(/>/g, '>');\n }\n\n function numberOfDecimalDigits(value) {\n value = (value + \"\").split('.');\n if (value.length > 1) {\n return value[1].length;\n }\n return 0;\n }\n\n function parseHtml(text) {\n if ($.parseHTML) {\n return $($.parseHTML(text));\n }\n return $(text);\n }\n\n function searchForMessageContainer(elements, fieldName) {\n var containers = $(),\n element,\n attr;\n\n for (var idx = 0, length = elements.length; idx < length; idx++) {\n element = elements[idx];\n if (invalidMsgRegExp.test(element.className)) {\n attr = element.getAttribute(kendo.attr(\"for\"));\n if (attr === fieldName) {\n containers = containers.add(element);\n }\n }\n }\n return containers;\n }\n\n function isLabelFor(label, element) {\n if (!label) {\n return false;\n }\n if (typeof label.nodeName !== 'string' || label.nodeName !== 'LABEL') {\n return false;\n }\n if (typeof label.getAttribute('for') !== 'string' || typeof element.getAttribute('id') !== 'string') {\n return false;\n }\n if (label.getAttribute('for') !== element.getAttribute('id')) {\n return false;\n }\n\n return true;\n }\n\n var SUMMARYTEMPLATE = ({ errors }) => {\n let result = '
      ';\n for (var i = 0; i < errors.length; i += 1) {\n result += `
    • ${errors[i].message}
    • `;\n }\n\n result += '
    ';\n return result;\n };\n\n var Validator = Widget.extend({\n init: function(element, options) {\n var that = this,\n resolved = resolveRules(element),\n validateAttributeSelector = \"[\" + kendo.attr(\"validate\") + \"!=false]\";\n\n options = options || {};\n\n options.rules = $.extend({}, kendo.ui.validator.rules, resolved.rules, options.rules);\n options.messages = $.extend({}, kendo.ui.validator.messages, resolved.messages, options.messages);\n\n Widget.fn.init.call(that, element, options);\n\n that._errorTemplate = kendo.template(that.options.errorTemplate);\n that._summaryTemplate = kendo.template(that.options.validationSummary.template || SUMMARYTEMPLATE);\n\n if (that.element.is(FORM)) {\n that.element.attr(NOVALIDATE, NOVALIDATE);\n }\n\n that._inputSelector = INPUTSELECTOR + validateAttributeSelector;\n that._checkboxSelector = CHECKBOXSELECTOR + validateAttributeSelector;\n\n that._errors = {};\n that._attachEvents();\n that._isValidated = false;\n\n if (that._validateOnInit()) {\n that.validate();\n }\n },\n\n events: [ VALIDATE, CHANGE, VALIDATE_INPUT ],\n\n options: {\n name: \"Validator\",\n errorTemplate: ({ message }) => `${message}`,\n messages: {\n required: \"{0} is required\",\n pattern: \"{0} is not valid\",\n min: \"{0} should be greater than or equal to {1}\",\n max: \"{0} should be smaller than or equal to {1}\",\n step: \"{0} is not valid\",\n email: \"{0} is not valid email\",\n url: \"{0} is not valid URL\",\n date: \"{0} is not valid date\",\n dateCompare: \"End date should be greater than or equal to the start date\",\n captcha: \"The text you entered doesn't match the image.\"\n },\n rules: {\n required: function(input) {\n var noNameCheckbox = !input.attr(\"name\") && !input.is(\":checked\"),\n name = input.attr(\"name\"),\n quote = !!name && name.indexOf(\"'\") > -1 ? '\\\"' : \"'\",\n namedCheckbox = input.attr(\"name\") && !this.element.find(\"input[name=\" + quote + input.attr(\"name\") + quote + \"]:checked\").length,\n checkbox = input.filter(\"[type=checkbox]\").length && (noNameCheckbox || namedCheckbox),\n radio = input.filter(\"[type=radio]\").length && !this.element.find(\"input[name=\" + quote + input.attr(\"name\") + quote + \"]:checked\").length,\n value = input.val();\n\n return !(hasAttribute(input, \"required\") && (!value || value === \"\" || value.length === 0 || checkbox || radio));\n },\n pattern: function(input) {\n if (input.filter(\"[type=text],[type=email],[type=url],[type=tel],[type=search],[type=password]\").filter(\"[pattern]\").length && input.val() !== \"\") {\n return patternMatcher(input.val(), input.attr(\"pattern\"));\n }\n return true;\n },\n min: function(input) {\n if (input.filter(NUMBERINPUTSELECTOR + \",[\" + kendo.attr(\"type\") + \"=number]\").filter(\"[min]\").length && input.val() !== \"\") {\n var min = parseFloat(input.attr(\"min\")) || 0,\n val = kendo.parseFloat(input.val());\n\n return min <= val;\n }\n return true;\n },\n max: function(input) {\n if (input.filter(NUMBERINPUTSELECTOR + \",[\" + kendo.attr(\"type\") + \"=number]\").filter(\"[max]\").length && input.val() !== \"\") {\n var max = parseFloat(input.attr(\"max\")) || 0,\n val = kendo.parseFloat(input.val());\n\n return max >= val;\n }\n return true;\n },\n step: function(input) {\n if (input.filter(NUMBERINPUTSELECTOR + \",[\" + kendo.attr(\"type\") + \"=number]\").filter(\"[step]\").length && input.val() !== \"\") {\n var min = parseFloat(input.attr(\"min\")) || 0,\n step = kendo.parseFloat(input.attr(\"step\")) || 1,\n val = parseFloat(input.val()),\n decimals = numberOfDecimalDigits(step),\n raise;\n\n if (decimals) {\n raise = Math.pow(10, decimals);\n return ((Math.floor((val - min) * raise)) % (step * raise)) / Math.pow(100, decimals) === 0;\n }\n return ((val - min) % step) === 0;\n }\n return true;\n },\n email: function(input) {\n return matcher(input, \"[type=email],[\" + kendo.attr(\"type\") + \"=email]\", emailRegExp);\n },\n url: function(input) {\n if (input.filter(\"[type=url],[\" + kendo.attr(\"type\") + \"=url]\").length && input.val() !== \"\") {\n try {\n const url = new URL(input.val());\n return ALLOWED_URL_PROTOCOLS.includes(url.protocol);\n } catch {\n return false;\n }\n }\n return true;\n },\n date: function(input) {\n if (input.filter(\"[type^=date],[\" + kendo.attr(\"type\") + \"=date]\").length && input.val() !== \"\") {\n return kendo.parseDate(input.val(), input.attr(kendo.attr(\"format\"))) !== null;\n }\n return true;\n },\n captcha: function(input) {\n if (input.filter(\"[\" + kendo.attr(\"role\") + \"=captcha]\").length) {\n var that = this,\n captcha = kendo.widgetInstance(input),\n isValidated = function(isValid) {\n return typeof(isValid) !== 'undefined' && isValid !== null;\n };\n\n if (!input.data(\"captcha_validating\") && !isValidated(captcha.isValid()) && !!captcha.getCaptchaId()) {\n input.data(\"captcha_validating\", true);\n that._validating = true;\n captcha.validate().done(function() {\n that._validating = false;\n that._checkElement(input);\n }).fail(function(data) {\n that._validating = false;\n if (data.error && data.error === \"handler_not_defined\") {\n window.console.warn(\"Captcha's validationHandler is not defined! You should either define a proper validation endpoint or declare a callback function to ensure the required behavior.\");\n }\n });\n }\n\n if (isValidated(captcha.isValid())) {\n input.removeData(\"captcha_validating\");\n return captcha.isValid();\n }\n }\n return true;\n }\n },\n validateOnBlur: true,\n validationSummary: false\n },\n\n _allowSubmit: function() {\n return kendo.ui.validator.allowSubmit(this.element, this.errors());\n },\n\n _validateOnInit: function() {\n return kendo.ui.validator.validateOnInit(this.element);\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n\n this.element.off(NS);\n\n if (this.validationSummary) {\n this.validationSummary.off(NS);\n this.validationSummary = null;\n }\n },\n\n value: function() {\n if (!this._isValidated) {\n return false;\n }\n\n return this.errors().length === 0;\n },\n\n _submit: function(e) {\n if ((!this.validate() && !this._allowSubmit()) || this._validating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n e.preventDefault();\n return false;\n }\n return true;\n },\n\n _checkElement: function(element) {\n var state = this.value();\n\n this.validateInput(element);\n\n if (this.value() !== state) {\n this.trigger(CHANGE);\n }\n },\n\n _attachEvents: function() {\n var that = this;\n\n if (that.element.is(FORM)) {\n that.element.on(\"submit\" + NS, that._submit.bind(that));\n }\n\n if (that.options.validateOnBlur) {\n if (!that.element.is(INPUTSELECTOR)) {\n that.element.on(BLUR + NS, that._inputSelector, function() {\n that._checkElement($(this));\n });\n\n that.element.on(\"click\" + NS, that._checkboxSelector, function() {\n that._checkElement($(this));\n });\n } else {\n that.element.on(BLUR + NS, function() {\n that._checkElement(that.element);\n });\n\n if (that.element.is(CHECKBOXSELECTOR)) {\n that.element.on(\"click\" + NS, function() {\n that._checkElement(that.element);\n });\n }\n }\n }\n },\n\n validate: function() {\n var inputs;\n var idx;\n var result = false;\n var length;\n\n var isValid = this.value();\n\n this._errors = {};\n\n if (!this.element.is(INPUTSELECTOR)) {\n var invalid = false;\n\n inputs = this.element.find(this._inputSelector);\n\n for (idx = 0, length = inputs.length; idx < length; idx++) {\n if (!this.validateInput(inputs.eq(idx))) {\n invalid = true;\n }\n }\n\n result = !invalid;\n } else {\n result = this.validateInput(this.element);\n }\n\n if (this.options.validationSummary && !isValid) {\n this.showValidationSummary();\n }\n\n this.trigger(VALIDATE, { valid: result, errors: this.errors() });\n\n if (isValid !== result) {\n this.trigger(CHANGE);\n }\n\n return result;\n },\n\n validateInput: function(input) {\n input = $(input);\n\n\n this._isValidated = true;\n\n var that = this,\n template = that._errorTemplate,\n result = that._checkValidity(input),\n valid = result.valid,\n widgetInstance,\n className = \".\" + INVALIDMSG,\n fieldName = (input.attr(NAME) || \"\"),\n lbl = that._findMessageContainer(fieldName).add(input.next(className).filter(function() {\n var element = $(this);\n if (element.filter(\"[\" + kendo.attr(\"for\") + \"]\").length) {\n return element.attr(kendo.attr(\"for\")) === fieldName;\n }\n\n return true;\n\n })).addClass(\"k-hidden\"),\n messageText = !valid ? that._extractMessage(input, result.key) : \"\",\n messageLabel = !valid ? parseHtml(template({ message: decode(messageText), field: fieldName })) : \"\",\n wasValid = !input.attr(ARIAINVALID),\n isInputInner = input.is(INPUTINNER),\n inputWrapper = input.parent(INPUTWRAPPER);\n\n input.removeAttr(ARIAINVALID);\n\n if (input.hasClass(\"k-hidden\")) {\n widgetInstance = kendo.widgetInstance(input.closest(\".k-signature\"));\n }\n\n if (input.is(\"[type=radio]\")) {\n widgetInstance = kendo.widgetInstance(input.closest(\".k-radio-list\"));\n }\n\n if (input.is(\"[type=checkbox]\")) {\n widgetInstance = kendo.widgetInstance(input.closest(\".k-checkbox-list\"));\n }\n\n if (!valid && !input.data(\"captcha_validating\")) {\n that._errors[fieldName] = messageText;\n var lblId = lbl.attr('id');\n\n that._decorateMessageContainer(messageLabel, fieldName);\n\n\n if (lblId) {\n messageLabel.attr('id', lblId);\n }\n\n if (lbl.length !== 0) {\n lbl.replaceWith(messageLabel);\n } else {\n widgetInstance = widgetInstance || kendo.widgetInstance(input);\n var parentElement = input.parent().get(0);\n var nextElement = input.next().get(0);\n var prevElement = input.prev().get(0);\n\n // Get the instance of the RadioGroup which is not initialized on the input element\n if (!widgetInstance && input.is(\"[type=radio]\")) {\n widgetInstance = kendo.widgetInstance(input.closest(\".k-radio-list\"));\n }\n\n // Get the instance of the CheckBoxGroup which is not initialized on the input element\n if (!widgetInstance && input.is(\"[type=checkbox]\")) {\n widgetInstance = kendo.widgetInstance(input.closest(\".k-checkbox-list\"));\n }\n\n if (widgetInstance && widgetInstance.wrapper && (widgetInstance.element !== widgetInstance.wrapper || [\"Signature\", \"RadioGroup\", \"CheckBoxGroup\"].indexOf(widgetInstance.options.name) > -1)) {\n messageLabel.insertAfter(widgetInstance.wrapper);\n } else if (parentElement && parentElement.nodeName === \"LABEL\") {\n // Input inside label\n messageLabel.insertAfter(parentElement);\n } else if (nextElement && isLabelFor(nextElement, input[0])) {\n // Input before label\n messageLabel.insertAfter(nextElement);\n } else if (prevElement && isLabelFor(prevElement, input[0])) {\n // Input after label\n messageLabel.insertAfter(input);\n } else if (isInputInner && inputWrapper.length) {\n // Input after input wrapper\n messageLabel.insertAfter(inputWrapper);\n } else {\n messageLabel.insertAfter(input);\n }\n }\n\n messageLabel.removeClass(\"k-hidden\");\n\n input.attr(ARIAINVALID, true);\n } else {\n delete that._errors[fieldName];\n }\n\n if (wasValid !== valid) {\n this.trigger(VALIDATE_INPUT, { valid: valid, input: input, error: messageText, field: fieldName });\n }\n\n widgetInstance = (widgetInstance && widgetInstance.options.name == \"Signature\") ? widgetInstance : kendo.widgetInstance(input);\n if (!widgetInstance || !(widgetInstance._inputWrapper || widgetInstance.wrapper) || (input.is(\"[type=checkbox]\") || input.is(\"[type=radio]\"))) {\n input.toggleClass(INVALIDINPUT, !valid);\n input.toggleClass(VALIDINPUT, valid);\n }\n\n if (widgetInstance) {\n var inputWrap = widgetInstance._inputWrapper || widgetInstance.wrapper;\n var inputLabel = widgetInstance._inputLabel;\n\n if (inputWrap && !(input.is(\"[type=checkbox]\") || input.is(\"[type=radio]\"))) {\n inputWrap.toggleClass(INVALIDINPUT, !valid);\n inputWrap.toggleClass(VALIDINPUT, valid);\n }\n if (inputLabel) {\n inputLabel.toggleClass(INVALIDLABEL, !valid);\n }\n }\n\n if (wasValid !== valid) {\n var errorId = messageLabel ? messageLabel.attr(\"id\") : lbl.attr(\"id\");\n\n that._associateMessageContainer(input, errorId);\n\n if (this.options.validationSummary && this.options.validateOnBlur) {\n this.showValidationSummary();\n }\n }\n\n return valid;\n },\n\n hideMessages: function() {\n var that = this,\n className = \".\" + INVALIDMSG,\n element = that.element;\n\n that._disassociateMessageContainers();\n\n if (!element.is(INPUTSELECTOR)) {\n element.find(className).addClass(\"k-hidden\");\n } else {\n element.next(className).addClass(\"k-hidden\");\n }\n },\n\n reset: function() {\n var that = this,\n inputs = that.element.find(\".\" + INVALIDINPUT),\n labels = that.element.find(\".\" + INVALIDLABEL);\n\n that._errors = [];\n\n that.hideMessages();\n\n that.hideValidationSummary();\n\n inputs.removeAttr(ARIAINVALID);\n inputs.removeClass(INVALIDINPUT);\n labels.removeClass(INVALIDLABEL);\n },\n\n _findMessageContainer: function(fieldName) {\n var locators = kendo.ui.validator.messageLocators,\n name,\n containers = $();\n\n for (var idx = 0, length = this.element.length; idx < length; idx++) {\n containers = containers.add(searchForMessageContainer(this.element[idx].getElementsByTagName(\"*\"), fieldName));\n }\n\n for (name in locators) {\n containers = containers.add(locators[name].locate(this.element, fieldName));\n }\n\n return containers;\n },\n\n _decorateMessageContainer: function(container, fieldName) {\n var locators = kendo.ui.validator.messageLocators,\n name;\n\n container.addClass(INVALIDMSG)\n .attr(kendo.attr(\"for\"), fieldName || \"\");\n\n if (!container.attr(\"id\")) {\n container.attr(\"id\", fieldName + \"-error\");\n }\n\n for (name in locators) {\n locators[name].decorate(container, fieldName);\n }\n },\n\n _extractMessage: function(input, ruleKey) {\n var that = this,\n customMessage = that.options.messages[ruleKey],\n fieldName = input.attr(NAME),\n nonDefaultMessage;\n\n if (!kendo.ui.Validator.prototype.options.messages[ruleKey]) {\n nonDefaultMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n }\n\n customMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n\n return kendo.format(input.attr(kendo.attr(ruleKey + \"-msg\")) || input.attr(\"validationMessage\") || nonDefaultMessage || customMessage || input.attr(\"title\") || \"\",\n fieldName,\n input.attr(ruleKey) || input.attr(kendo.attr(ruleKey)));\n },\n\n _checkValidity: function(input) {\n var rules = this.options.rules,\n rule;\n\n for (rule in rules) {\n if (!rules[rule].call(this, input)) {\n return { valid: false, key: rule };\n }\n }\n\n return { valid: true };\n },\n\n errors: function() {\n var results = [],\n errors = this._errors,\n error;\n\n for (error in errors) {\n results.push(errors[error]);\n }\n return results;\n },\n\n setOptions: function(options) {\n if (options.validationSummary) {\n this.hideValidationSummary();\n }\n\n kendo.deepExtend(this.options, options);\n\n this.destroy();\n\n this.init(this.element, this.options);\n\n this._setEvents(this.options);\n },\n\n _getInputNames: function() {\n var that = this,\n inputs = that.element.find(that._inputSelector),\n sorted = [];\n\n for (var idx = 0, length = inputs.length; idx < length; idx++) {\n var input = $(inputs[idx]);\n\n if (hasAttribute(input, NAME)) {\n // Add current name if:\n // - not present so far;\n // - present but not part of CheckBoxGroup or RadioGroup.\n if (sorted.indexOf(input.attr(NAME)) === -1 ||\n (input.closest(\".k-checkbox-list\").length === 0 &&\n input.closest(\".k-radio-list\").length === 0)) {\n sorted.push(input.attr(NAME));\n }\n }\n }\n\n return sorted;\n },\n\n _associateMessageContainer: function(input, errorId) {\n var nextFocusable = kendo.getWidgetFocusableElement(input);\n\n if (!nextFocusable || !errorId) {\n return;\n }\n\n kendo.toggleAttribute(nextFocusable, ARIADESCRIBEDBY, errorId);\n },\n\n _disassociateMessageContainers: function() {\n var that = this,\n inputs = that.element.find(\".\" + INVALIDINPUT).addBack(),\n input, errorId;\n\n for (var i = 0; i < inputs.length; i += 1) {\n input = $(inputs[i]);\n\n if (input.is(\"input\")) {\n errorId = that._findMessageContainer(input.attr(NAME))\n .add(input.next(\".\" + INVALIDMSG))\n .attr(\"id\");\n\n that._associateMessageContainer(input, errorId);\n }\n }\n },\n\n _errorsByName: function() {\n var that = this,\n inputNames = that._getInputNames(),\n sorted = [];\n\n for (var i = 0; i < inputNames.length; i += 1) {\n var name = inputNames[i];\n\n if (that._errors[name]) {\n sorted.push({\n field: name,\n message: that._errors[name]\n });\n }\n }\n\n return sorted;\n },\n\n _renderSummary: function() {\n var that = this,\n options = this.options.validationSummary,\n element = this.element,\n prevElement = element.prev(),\n container;\n\n if (options.container) {\n container = $(options.container);\n } else if (prevElement && prevElement.hasClass(VALIDATIONSUMMARY)) {\n container = prevElement;\n } else {\n container = $(\"
    \").insertBefore(that.element);\n }\n\n container.addClass([VALIDATIONSUMMARY, MESSAGEBOX].join(\" \"));\n container.attr(\"role\", \"alert\");\n\n container.on(\"click\" + NS, that._summaryClick.bind(that));\n\n return container;\n },\n\n _summaryClick: function(e) {\n e.preventDefault();\n\n var that = this,\n link = $(e.target),\n target = that.element.find(\"[name='\" + link.data(\"field\") + \"']\"),\n nextFocusable;\n\n if (!target.length) {\n return;\n }\n\n nextFocusable = kendo.getWidgetFocusableElement(target);\n\n if (nextFocusable) {\n nextFocusable.trigger(\"focus\");\n }\n },\n\n showValidationSummary: function() {\n var that = this,\n summary = that.validationSummary,\n errors = that._errorsByName(),\n errorsList;\n\n if (!summary) {\n summary = that.validationSummary = that._renderSummary();\n }\n\n errorsList = parseHtml(that._summaryTemplate({\n errors: errors\n }));\n\n summary.html(errorsList);\n\n summary.toggleClass(\"k-hidden\", !errors.length);\n },\n\n hideValidationSummary: function() {\n var that = this,\n summary = that.validationSummary;\n\n if (!summary) {\n return;\n }\n\n summary.addClass(\"k-hidden\");\n }\n });\n\n kendo.ui.plugin(Validator);\n })(window.kendo.jQuery);\n var kendo$9 = kendo;\n\n var __meta__$6 = {\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 var kendo$8 = kendo;\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__$5 = {\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 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 (html.indexOf(\" -1) {\n html = $(\"
    \").append(html).html();\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 html = null; // Garbage collection.\n return this._createView(view);\n },\n\n _locate: function(selectors) {\n return 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 var kendo$7 = kendo;\n\n var __meta__$4 = {\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 var ClickMoveClick = 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.touches = [];\n that._maxTouches = 1;\n that.eventNS = ns;\n that._downStarted = 0;\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(\"cancel up\", ns), \"cancel\");\n\n element.on(kendo.applyEventMap(\"down\", ns), filter, \"_down\")\n .on(kendo.applyEventMap(\"up\", ns), filter, \"_up\");\n\n that.bind([\n START,\n MOVE,\n END,\n HOLD,\n CANCEL,\n SELECT\n ], options);\n },\n\n _down: function(e) {\n if (e.which && e.which > 1) {\n this.cancel();\n } else {\n this._downStarted = new Date().getTime();\n this._downTarget = e.target;\n }\n },\n\n _up: function(e) {\n var currentMilestone = new Date().getTime(),\n currentTarget = e.target;\n\n if ((!e.which || e.which === 1) &&\n currentMilestone < this._downStarted + CLICK_DELAY &&\n currentTarget === this._downTarget) {\n if (this.touches && this.touches.length > 0) {\n this._end(e);\n } else {\n this._start(e);\n }\n\n this._preventCancel = true;\n } else {\n this.cancel();\n }\n\n this._downStarted = 0;\n this._downTarget = null;\n },\n\n destroy: function() {\n var that = this;\n\n if (that._destroyed) {\n return;\n }\n\n that._destroyed = true;\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 ClickMoveClick.current = this;\n },\n\n cancel: function() {\n if (this._preventCancel) {\n this._preventCancel = false;\n return;\n } else if (this.touches && this.touches.length > 0) {\n this._disposeAll();\n this.trigger(CANCEL);\n }\n },\n\n notify: function(eventName, data) {\n data.clickMoveClick = true;\n return this.trigger(eventName, extend(data, { type: eventName }));\n },\n\n _maxTouchesReached: function() {\n return this.touches.length >= this._maxTouches;\n },\n\n _disposeAll: function() {\n var touches = this.touches;\n\n while (touches.length > 0) {\n touches.pop().dispose();\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 ClickMoveClick.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);\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 touch._start(touch);\n }\n },\n\n _move: function(e) {\n this._eachTouch(\"move\", e);\n },\n\n _end: function(e) {\n this._eachTouch(\"move\", e);\n this._eachTouch(\"end\", e);\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.x.move(touchInfo.location);\n matchingTouch.y.move(touchInfo.location);\n matchingTouch[methodName](touchInfo);\n }\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 kendo.ClickMoveClick = ClickMoveClick;\n })(window.kendo.jQuery);\n var kendo$6 = kendo;\n\n var __meta__$3 = {\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 ClickMoveClick = kendo.ClickMoveClick,\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 if (this.options.clickMoveClick) {\n that.clickMoveClick = new ClickMoveClick(that.element, {\n global: true,\n filter: that.options.filter,\n start: that._startClickMoveClick.bind(that),\n move: that._drag.bind(that),\n end: that._end.bind(that),\n cancel: that._onCancel.bind(that)\n });\n }\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._onCancel.bind(that),\n select: that._select.bind(that),\n press: that._press.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 showHintOnHold: false,\n autoScroll: false,\n dropped: false,\n clickMoveClick: false,\n preventOsHoldFeatures: 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.userEvents.cancel();\n\n if (that.clickMoveClick) {\n that.clickMoveClick.cancel();\n }\n\n this._trigger(DRAGCANCEL, { event: e });\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 if (e.x.delta !== 0 || e.y.delta !== 0) {\n that.hintOffset.left += e.x.delta;\n that.hintOffset.top += e.y.delta;\n coordinates = $.extend({}, that.hintOffset);\n } else {\n that.hintOffset.left = e.x.startLocation + e.x.initialDelta;\n that.hintOffset.top = e.y.startLocation + e.y.initialDelta;\n coordinates = $.extend({}, that.hintOffset);\n }\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 _startClickMoveClick: function(e) {\n this._activated = true;\n\n this._start(e);\n },\n\n _hint: function() {\n var that = this,\n hint = that.options.hint;\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 },\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 that._hint();\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\n if (that.clickMoveClick) {\n that.clickMoveClick.cancel();\n }\n\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 if (this.options.showHintOnHold) {\n this._hint();\n }\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 _press: function(ev) {\n if (this.options.preventOsHoldFeatures) {\n ev.target.css('-webkit-user-select', 'none');\n ev.target.attr('unselectable', 'on');\n ev.target.one('contextmenu', (ev) => {\n ev.preventDefault();\n });\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 _onCancel: function(e) {\n this._cancel();\n this._trigger(DRAGCANCEL, { event: 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 } 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 clickMoveClick: e.clickMoveClick\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 if (that.clickMoveClick) {\n that.clickMoveClick.destroy();\n }\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 var kendo$5 = kendo;\n\n var __meta__$2 = {\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 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\")\n .toggleClass(\"k-rtl\", !!options.isRtl)\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.addClass(\"k-animation-container-shown\"); // Forcing refresh causes flickering in mobile.\n that.wrapper.css(\"overflow\",\"\");\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 autowidth: 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._hideActiveClass();\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.closest(\".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 shouldCorrectWidth = that._shouldCorrectWidth,\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 parent;\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 (that.element.parent().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, options._resizeOnWrap, shouldCorrectWidth, options.autowidth)\n .css({\n overflow: HIDDEN,\n display: \"block\",\n position: ABSOLUTE\n })\n .attr(\"aria-hidden\", false);\n\n parent = element.parent();\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 parent.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 && !that.element.hasClass(\"k-tooltip\")) {\n that._addActiveClass();\n }\n\n parent.hide();\n element.show();\n that.wrapper.show();\n\n parent.data(EFFECTS, animation.effects)\n .kendoStop(true)\n .kendoAnimate(animation);\n\n\n element.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 _hideActiveClass: function() {\n var anchor = $(this.options.anchor);\n anchor\n .children(ACTIVECHILDREN)\n .removeClass(ACTIVE);\n\n },\n\n _addActiveClass: function() {\n $(this.options.anchor)\n .children(ACTIVECHILDREN)\n .addClass(ACTIVE);\n },\n\n position: function() {\n if (this.visible()) {\n this.flipped = this._position();\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.wrapper.is(\":\" + VISIBLE) && this.element.is(\":\" + VISIBLE);\n },\n\n close: function(skipEffects) {\n var that = this,\n parent = that.element.parent(),\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 that.wrapper.removeClass(\"k-animation-container-shown\");\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 = parent.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 parent.kendoStop(true);\n that.element.attr(\"aria-hidden\", true);\n wrap\n .css({ overflow: HIDDEN }) // stop callback will remove hidden overflow\n .attr(\"aria-hidden\", true);\n parent.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 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.find(\".k-child-animation-container\").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, options) {\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 if (next) {\n this._focus(next);\n }\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 var kendo$4 = kendo;\n\n var __meta__$1 = {\n id: \"touch\",\n name: \"Touch\",\n category: \"mobile\",\n description: \"The kendo Touch widget provides a cross-platform compatible API for handling user-initiated touch events, multi-touch gestures and event sequences (drag, swipe, etc.). \",\n depends: [ \"core\", \"userevents\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n Widget = kendo.ui.Widget,\n abs = Math.abs,\n MAX_DOUBLE_TAP_DISTANCE = 20;\n\n var Touch = Widget.extend({\n init: function(element, options) {\n var that = this;\n\n Widget.fn.init.call(that, element, options);\n options = that.options;\n\n element = that.element;\n that.wrapper = element;\n\n function eventProxy(name) {\n return function(e) {\n that._triggerTouch(name, e);\n };\n }\n\n function gestureEventProxy(name) {\n return function(e) {\n that.trigger(name, { touches: e.touches, distance: e.distance, center: e.center, event: e.event });\n };\n }\n\n that.events = new kendo.UserEvents(element, {\n filter: options.filter,\n surface: options.surface,\n minHold: options.minHold,\n multiTouch: options.multiTouch,\n allowSelection: true,\n fastTap: options.fastTap,\n press: eventProxy(\"touchstart\"),\n hold: eventProxy(\"hold\"),\n tap: that._tap.bind(that),\n gesturestart: gestureEventProxy(\"gesturestart\"),\n gesturechange: gestureEventProxy(\"gesturechange\"),\n gestureend: gestureEventProxy(\"gestureend\")\n });\n\n if (options.enableSwipe) {\n that.events.bind(\"start\", that._swipestart.bind(that));\n that.events.bind(\"move\", that._swipemove.bind(that));\n } else {\n that.events.bind(\"start\", that._dragstart.bind(that));\n that.events.bind(\"move\", eventProxy(\"drag\"));\n that.events.bind(\"end\", eventProxy(\"dragend\"));\n }\n\n kendo.notify(that);\n },\n\n events: [\n \"touchstart\",\n \"dragstart\",\n \"drag\",\n \"dragend\",\n \"tap\",\n \"doubletap\",\n \"hold\",\n \"swipe\",\n \"gesturestart\",\n \"gesturechange\",\n \"gestureend\"\n ],\n\n options: {\n name: \"Touch\",\n surface: null,\n global: false,\n fastTap: false,\n filter: null,\n multiTouch: false,\n enableSwipe: false,\n minXDelta: 30,\n maxYDelta: 20,\n maxDuration: 1000,\n minHold: 800,\n doubleTapTimeout: 800\n },\n\n cancel: function() {\n this.events.cancel();\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n\n this.events.destroy();\n },\n\n _triggerTouch: function(type, e) {\n if (this.trigger(type, { touch: e.touch, event: e.event })) {\n e.preventDefault();\n }\n },\n\n _tap: function(e) {\n var that = this,\n lastTap = that.lastTap,\n touch = e.touch;\n\n if (lastTap &&\n (touch.endTime - lastTap.endTime < that.options.doubleTapTimeout) &&\n kendo.touchDelta(touch, lastTap).distance < MAX_DOUBLE_TAP_DISTANCE\n ) {\n\n that._triggerTouch(\"doubletap\", e);\n that.lastTap = null;\n } else {\n that._triggerTouch(\"tap\", e);\n that.lastTap = touch;\n }\n },\n\n _dragstart: function(e) {\n this._triggerTouch(\"dragstart\", e);\n },\n\n _swipestart: function(e) {\n if (abs(e.x.velocity) * 2 >= abs(e.y.velocity)) {\n e.sender.capture();\n }\n },\n\n _swipemove: function(e) {\n var that = this,\n options = that.options,\n touch = e.touch,\n duration = e.event.timeStamp - touch.startTime,\n direction = touch.x.initialDelta > 0 ? \"right\" : \"left\";\n\n if (\n abs(touch.x.initialDelta) >= options.minXDelta &&\n abs(touch.y.initialDelta) < options.maxYDelta &&\n duration < options.maxDuration\n )\n {\n that.trigger(\"swipe\", {\n direction: direction,\n touch: e.touch\n });\n\n touch.cancel();\n }\n }\n });\n\n kendo.ui.plugin(Touch);\n })(window.kendo.jQuery);\n var kendo$3 = kendo;\n\n var __meta__ = {\n id: \"mobile.scroller\",\n name: \"Scroller\",\n category: \"mobile\",\n description: \"The Kendo Mobile Scroller widget enables touch friendly kinetic scrolling for the contents of a given DOM element.\",\n depends: [ \"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 var kendo$2 = kendo;\n\n \"bundle all\";\n var kendo$1 = kendo;\n\n return kendo$1;\n\n}));\n"]}