{"version":3,"file":"kendo.mobile.min.js","names":["global","factory","exports","module","define","amd","globalThis","self","kendo","_globals","Mobile","this","breakpoints","EVENT","defaultBreakpoints","small","medium","large","mediaQuery","query","Object","assign","defaults","mediaQueryList","window","matchMedia","onEnterCallbacks","onLeaveCallbacks","onChangeHandlers","kendoMediaQuery","onChangeHandler","ev","forEach","cb","matches","addEventListener","onChange","push","onEnter","media","MediaQueryListEvent","onLeave","destroy","removeEventListener","createMediaQuery","fromESClass","ESClass","ExtendedClass","extend","proto","subclass","constructor","super","init","apply","arguments","prototype","addInstanceGetter","fn","defineProperty","get","packageMetadata","name","productName","productCodes","publishDate","version","replace","licensingDocsUrl","$","undefined$1","Template","cultures","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","i","length","deep","jQuery","isPlainObject","Class","member","base","that","_initOptions","deepExtend","createProxyMember","instance","_instance","getBaseClass","targetClass","Function","baseClass","newBaseClass","getPrototypeOf","getAllMethods","allStatic","getOwnPropertyNames","filter","prop","allNonStatic","concat","convertPromiseToDeferred","promise","deferred","Deferred","finally","always","then","resolve","catch","reject","ConvertClass","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","_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","kendoCultureToIntl","kendoCulture","currencies","localeInfoAll","language","territory","identity","numbers","symbols","decimal","group","percentSign","localeCurrency","standardCalendar","wide","abbreviated","short","narrow","map","dayPeriods","am","pm","localeInfo","parseDate","fmt","parseExactDate","values","groupInteger","start","integer","integerLength","newGroupSize","decimalIndex","groupSizes","shift","reverse","round","precision","negative","toFixed","min","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","literals","replacement","toLocaleString","exec","toLowerCase","toExponential","quoteChar","literal","lastIndexOf","rounded","max","formatNumber","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","lowerArray","array","lowerLocalInfo","localInfo","newLocalInfo","longestDesignatorLength","from","sort","b","parseExact","strict","shouldUnpadZeros","count","pmHour","UTC","amDesignators","pmDesignators","hoursOffset","minutesOffset","lookAhead","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","getDefaultFormats","percentSymbol","_scrollbar","scrollbar","refresh","div","createElement","cssText","innerHTML","body","appendChild","offsetWidth","scrollWidth","removeChild","isRtl","table","tbodyInnerHtml","touch","docStyle","elementProto","transforms","transitions","prefix","event","hasHW3D","WebKitCSSMatrix","cssFlexbox","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","edge","navigator","device","browser","majorVersion","flatVersion","cordova","PhoneGap","appMode","standalone","location","protocol","cssClass","docElement","mobileOS","userAgent","wpDevicePixelRatio","hasNativeScrolling","delayedClick","attr","mouseAndTouchPresent","detectBrowser","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","queue","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","shouldDecode","entities","htmlDecode","unescape","decodeURIComponent","error","_","m1","m2","fromCharCode","isLocalUrl","url","expr","expression","safe","members","wrapExpression","exprToArray","getter","fields","setter","innerSetter","val","props","pop","accessor","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","modelBinded","getAttribute","parse","parseOptions","validateQuerySelectorTemplate","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","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","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","dirty","getSeriesColors","series","colors","item","isElement","HTMLDocument","setDefaults","path","curr","DEBUG_KENDO_TEMPLATES","class2type","_i","setScriptKey","showBanner","matrix3dRegExp","translateXRegExp","oldEffectsRegExp","singleEffectRegExp","transformProps","transform2d","PX","AUTO","WIDTH","HEIGHT","HIDDEN","ORIGIN","ABORT_ID","OVERFLOW","POSITION","COMPLETE_CALLBACK","TRANSITIONEND","TRANSITION","TRANSFORM","PERSPECTIVE","DEFAULT_PERSPECTIVE","TRANSFORM_PERSPECTIVE","transition","vertical","modifier","horizontal","parseInteger","normalizeCSS","lowerKey","isTransformed","transformation","cssValues","stopQueue","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","restoreCallback","effectClass","effectSet","parsedEffects","capitalize","useTransition","strip3DTransforms","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","translatex","translatey","setLength","oldLength","realLength","TRANSFER_START_STATE","marginLeft","marginTop","scale","outerBox","box","innerBox","currentScale","transform","computed","atan2","animationProperty","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","originalOverflow","both","originalPosition","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","nodeValue","firstChild","nextSibling","intermediateResult","tree","parseXML","raw","readers","or","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","isPrimitiveType","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","nameToUse","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","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","changedItems","_accept","_syncEnd","_change","cancelChanges","_cancelModel","_changesCanceled","_markOfflineUpdatesAsDirty","__state__","hasChanges","serverGroup","_handleCustomErrors","_executeOnPristineForModel","_eachPristineItem","_pristineForModel","_modelCanceled","_submit","_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","stringifiedKey","cleanObject","cleanObjectKeys","_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","lastItemIndex","hasNotFetchedItems","subgroups","_composeItemsFilter","findSubgroups","_queueWithTimeout","_groupItemsSuccessHandler","_timeout","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","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","child","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","step","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","now","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","translate","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","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","updateHint","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","isFixed","_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","zoom","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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","ignoreList":[],"sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (global.kendo = global.kendo || {}, global.kendo._globals = global.kendo._globals || {}, global.kendo._globals.Mobile = 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 function fromESClass(ESClass) {\n class ExtendedClass extends ESClass {\n static extend(proto) {\n const subclass = class extends ExtendedClass {\n constructor() {\n super();\n if (proto && proto.init) {\n proto.init.apply(this, arguments);\n }\n }\n };\n\n // Copy the prototype so that the constructor is not overwritten\n Object.assign(subclass.prototype, proto);\n\n addInstanceGetter(subclass.prototype);\n\n // Apply the prototype to fn to allow for chaining\n subclass.fn = subclass.prototype;\n\n return subclass;\n }\n }\n\n addInstanceGetter(ExtendedClass.prototype);\n\n // Apply the prototype to fn to allow for chaining\n ExtendedClass.fn = ExtendedClass.prototype;\n\n return ExtendedClass;\n }\n\n function addInstanceGetter(proto) {\n Object.defineProperty(proto, '_instance', {\n get: function() {\n return this;\n }\n });\n }\n\n const __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: 1731445483,\n version: '2024.4.1112'.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 // cssNumber is deprecated in jQuery 4.0.0\n // accessing these properties throw a warning when jQuery migrate is included\n if (name == \"filters\" || name == \"concat\" || name == \":\" || name == \"cssNumber\") {\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.4.1112\".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 kendo.createProxyMember = function(proto, name) {\n proto.fn[name] = function() {\n var instance = this._instance;\n if (instance) {\n return instance[name].apply(instance, arguments);\n }\n };\n };\n\n kendo.getBaseClass = function(targetClass) {\n if (targetClass instanceof Function) {\n let baseClass = targetClass;\n\n const newBaseClass = Object.getPrototypeOf(baseClass);\n\n if (newBaseClass && newBaseClass !== Object && newBaseClass.name) {\n return newBaseClass;\n }\n }\n return null;\n };\n\n kendo.getAllMethods = function(targetClass) {\n const allStatic = Object.getOwnPropertyNames(targetClass)\n .filter(prop => typeof targetClass[prop] === \"function\");\n const allNonStatic = Object.getOwnPropertyNames(Object.getPrototypeOf(new targetClass({})))\n .filter(prop => prop !== \"constructor\");\n\n return allStatic.concat(allNonStatic);\n };\n\n kendo.convertPromiseToDeferred = function(promise) {\n let deferred = $.Deferred();\n\n promise.finally(deferred.always).then(deferred.resolve).catch(deferred.reject);\n\n return deferred.promise();\n };\n\n kendo.ConvertClass = fromESClass;\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 function kendoCultureToIntl(kendoCulture) {\n kendoCulture = getCulture(kendoCulture) || kendo.cultures.current;\n let currencies = {};\n currencies[kendoCulture.numberFormat.currency.abbr] = kendoCulture.numberFormat.currency;\n const localeInfoAll = {};\n\n // Extract the name and split into language and territory if possible\n const [language, territory] = kendoCulture.name.split('-');\n localeInfoAll.name = language;\n localeInfoAll.identity = { language };\n if (territory) {\n localeInfoAll.territory = territory;\n }\n\n // Map number format symbols\n if (kendoCulture.numberFormat) {\n localeInfoAll.numbers = {\n symbols: {\n decimal: kendoCulture.numberFormat[\".\"],\n group: kendoCulture.numberFormat[\",\"],\n percentSign: kendoCulture.numberFormat.percent?.symbol || \"%\"\n },\n decimal: {\n patterns: kendoCulture.numberFormat.pattern,\n groupSize: kendoCulture.numberFormat.groupSize\n },\n currency: {\n patterns: kendoCulture.numberFormat.currency?.pattern,\n groupSize: kendoCulture.numberFormat.currency?.groupSize\n },\n percent: {\n patterns: kendoCulture.numberFormat.percent?.pattern,\n groupSize: kendoCulture.numberFormat.percent?.groupSize,\n decimals: kendoCulture.numberFormat.percent?.decimals\n }\n };\n\n // Map currency information if available\n if (kendoCulture.numberFormat.currency) {\n localeInfoAll.numbers.currencies = {\n [kendoCulture.numberFormat.currency.abbr]: kendoCulture.numberFormat.currency\n };\n localeInfoAll.numbers.localeCurrency = kendoCulture.numberFormat.currency.abbr;\n }\n }\n\n // Map calendar information\n if (kendoCulture.calendars && kendoCulture.calendars.standard) {\n const standardCalendar = kendoCulture.calendars.standard;\n localeInfoAll.calendar = {\n patterns: {\n d: standardCalendar.patterns.d,\n D: standardCalendar.patterns.D,\n F: standardCalendar.patterns.F,\n g: standardCalendar.patterns.g,\n G: standardCalendar.patterns.G,\n m: standardCalendar.patterns.m,\n M: standardCalendar.patterns.M,\n s: standardCalendar.patterns.s,\n t: standardCalendar.patterns.t,\n T: standardCalendar.patterns.T,\n u: standardCalendar.patterns.u,\n y: standardCalendar.patterns.y,\n Y: standardCalendar.patterns.Y\n },\n days: {\n format: {\n wide: standardCalendar.days.names,\n abbreviated: standardCalendar.days.namesAbbr,\n short: standardCalendar.days.namesShort\n },\n \"stand-alone\": {\n wide: standardCalendar.days.names,\n abbreviated: standardCalendar.days.namesAbbr,\n short: standardCalendar.days.namesShort\n }\n },\n months: {\n format: {\n wide: standardCalendar.months.names,\n abbreviated: standardCalendar.months.namesAbbr,\n narrow: standardCalendar.months.namesAbbr.map(name => name.charAt(0))\n },\n \"stand-alone\": {\n wide: standardCalendar.months.names,\n abbreviated: standardCalendar.months.namesAbbr,\n narrow: standardCalendar.months.namesAbbr.map(name => name.charAt(0))\n }\n },\n dayPeriods: {\n format: {\n abbreviated: {\n am: standardCalendar.AM[0],\n pm: standardCalendar.PM[0]\n },\n narrow: {\n am: standardCalendar.AM[1],\n pm: standardCalendar.PM[1]\n },\n wide: {\n am: standardCalendar.AM[0],\n pm: standardCalendar.PM[0]\n }\n },\n \"stand-alone\": {\n abbreviated: {\n am: standardCalendar.AM[0],\n pm: standardCalendar.PM[0]\n },\n narrow: {\n am: standardCalendar.AM[1],\n pm: standardCalendar.PM[1]\n },\n wide: {\n am: standardCalendar.AM[0],\n pm: standardCalendar.PM[0]\n }\n }\n }\n };\n\n // Include firstDay if defined\n if ('firstDay' in standardCalendar) {\n localeInfoAll.firstDay = standardCalendar.firstDay;\n }\n }\n return {\n localeInfo: () => ({\n numbers: {\n localeCurrency: kendoCulture.numberFormat.currency.abbr,\n currencies: currencies,\n symbols: {\n group: kendoCulture.numberFormat[','],\n decimal: kendoCulture.numberFormat['.'],\n percentSign: kendoCulture.numberFormat.percent.symbol,\n }\n },\n calendar: {\n patterns: kendoCulture.calendars.standard.patterns,\n months: {\n format: {\n wide: kendoCulture.calendars.standard.months.names,\n abbreviated: kendoCulture.calendars.standard.months.namesAbbr\n }\n },\n days: {\n format: {\n wide: kendoCulture.calendars.standard.days.names,\n abbreviated: kendoCulture.calendars.standard.days.namesAbbr\n }\n }\n }\n }),\n parseDate: (value, fmt) => kendo.parseExactDate(value, fmt),\n toString: (value, fmt) => toString(value, fmt),\n format: (fmt, ...values) => kendo.format(fmt, values)\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 kendo.kendoCultureToIntl = kendoCultureToIntl;\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 idx = start;\n while (idx < length) {\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 idx++;\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 longestDesignatorLength(designators) {\n return Array.from(designators).sort((a, b) => b.length - a.length)[0].length;\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 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(\"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 if (property === '__proto__' || property === 'constructor') {\n continue;\n }\n\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 let docStyle = document.documentElement.style;\n let elementProto = \"HTMLElement\" in window ? HTMLElement.prototype : [];\n\n // Transforms and Transitions - no longer required, however these were public properties in the past.\n // It is possible some customers may have used them so keep them for the time being.\n support.transforms = support.transitions = { css: \"\", prefix: \"\", event: \"transitionend\" };\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 table = null;\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 edge: /edge|edg|edgios|edga/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\n function htmlDecode(value) {\n var entities = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n };\n\n return value.replace(/&(?:amp|lt|gt|quot|#39);/g, function(match) {\n return entities[match];\n });\n }\n\n function htmlEncode(value, shouldDecode) {\n if (shouldDecode === true) {\n value = htmlDecode(value);\n }\n\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, source) {\n let value, modelBinded = false;\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 = element.getAttribute(`bind:data-` + kendo.ns + option);\n modelBinded = true;\n }\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 } else if (modelBinded) {\n // This way you can set a config like so bind:data-checkboxes=\"checkboxesOptions\" where checkboxesOptions is an object inside your viewmodel.\n // This is a CSP-safe approach similar to data-checkboxes=\"{ checkboxes: true }\" but you don't need to eval javascript.\n value = source[value];\n\n if (value instanceof Observable) {\n // Pass true as a parameter to allow function serialization. Otherwise, if you have a function in the configuration, it will be ignored.\n value = value.toJSON(true);\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 // Pass the source option for MVVM scenarios.\n value = parseOption(element, option, source);\n\n if (value !== undefined$1) {\n\n if (templateRegExp.test(option) && role != \"drawer\") {\n if (typeof value === \"string\") {\n if (validateQuerySelectorTemplate(value)) {\n value = kendo.template($(\"#\" + value).html());\n } else if (source && source[value]) {\n value = kendo.template(source[value]);\n } else {\n value = kendo.template(value);\n }\n } else if (!isFunction(value)) {\n value = element.getAttribute(option);\n }\n }\n\n result[option] = value;\n }\n }\n\n return result;\n }\n\n function validateQuerySelectorTemplate(value) {\n try {\n return $(\"#\" + value).length;\n } catch (e) {\n }\n\n return false;\n }\n\n kendo.initWidget = function(element, options, roles, source) {\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), source), 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 }\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$1$f = kendo;\n\n const __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 let kendo = window.kendo,\n fx = kendo.effects,\n each = $.each,\n extend = $.extend,\n support = kendo.support,\n matrix3dRegExp = /matrix3?d?\\s*\\(.*,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?/i,\n translateXRegExp = /translatex?$/i,\n oldEffectsRegExp = /(zoom|fade|expand)(\\w+)/,\n singleEffectRegExp = /(zoom|fade|expand)/,\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 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 POSITION = \"position\",\n COMPLETE_CALLBACK = \"completeCallback\",\n TRANSITIONEND = \"transitionend\",\n TRANSITION = \"transition\",\n TRANSFORM = \"transform\",\n BACKFACE = \"backface-visibility\",\n PERSPECTIVE = \"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 return fx.stopQueue(this, clearQueue || false, gotoEnd || false);\n }\n });\n\n kendo.toggleClass = function(element, classes, options, add) {\n if (classes) {\n classes = classes.split(\" \");\n\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 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 = 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 extend(fx, {\n transition: function(element, properties, options) {\n let 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 let stopTransitionCalled = false;\n\n let 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 element.one(TRANSITIONEND, stopTransition);\n if (options.duration !== 0) {\n delay = 500;\n }\n\n timeoutID = setTimeout(stopTransition, options.duration + delay);\n element.data(ABORT_ID, timeoutID);\n element.data(COMPLETE_CALLBACK, stopTransition);\n },\n\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 function animationProperty(element, property) {\n let transform = element.css(TRANSFORM);\n if (transform == NONE) {\n return property == \"scale\" ? 1 : 0;\n }\n\n let 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 }\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 let 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 (!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 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 let 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 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 let useTransition = options.transition !== false;\n delete options.transition;\n\n if (\"transition\" in fx && useTransition) {\n fx.transition(elements, properties, options);\n } else {\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 }\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 let 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 target = element.data(\"targetTransform\");\n\n if (target) {\n start = extend(target, start);\n }\n\n start = normalizeCSS(element, start);\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 let 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 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 let 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 start[direction.transition] = startValue;\n end[direction.transition] = endValue;\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 let that = this,\n element = that.element,\n options = that.options,\n offset = options.offset.split(\",\"),\n reverse = that._reverse;\n\n end.translatex = !reverse ? offset[0] : 0;\n end.translatey = !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(TRANSITIONEND, 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 let 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 element.addClass(\"k-fx-hidden\");\n\n container.addClass(this._containerClass());\n\n this.completeProxy = this.complete.bind(this);\n container.on(TRANSITIONEND, 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 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$1$e = kendo;\n\n const __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$1$d = kendo;\n\n const __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$1$c = 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 const __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 // This way we cover both if the serializeFunctions parameter is an object OR a boolean.\n if (typeof serializeFunctions === \"object\") {\n serializeFunctions = (serializeFunctions && serializeFunctions[field]);\n }\n return this.hasOwnProperty(field) && field !== \"_handlers\" && field !== \"_events\" && (serializeFunctions || 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 let nameToUse = typeof (field.field) === STRING ? field.field : name;\n\n if (!field.nullable || field.defaultValue) {\n value = proto.defaults[originalName !== nameToUse ? originalName : nameToUse] = field.defaultValue !== undefined$1 ? field.defaultValue : defaultValues[type.toLowerCase()];\n\n if (typeof value === \"function\") {\n functionFields.push(nameToUse);\n }\n }\n\n if (options.id === nameToUse) {\n proto._defaultId = value;\n }\n\n proto.defaults[originalName !== nameToUse ? originalName : nameToUse] = 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 hasNotFetchedItems(items, start, end) {\n for (let idx = start; idx < end; idx++) {\n if (items[idx].notFetched) {\n return true;\n }\n }\n return false;\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.push(...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 let item = e.items[0],\n keys = Object.keys(item.dirtyFields),\n result = keys;\n\n for (const key of keys) {\n if (item[key] instanceof Object) {\n let stringifiedKey = kendo.stringify(item[key]);\n\n if (stringifiedKey) {\n let cleanObject = JSON.parse(stringifiedKey),\n cleanObjectKeys = Object.keys(cleanObject).map((k) => key + \".\" + k);\n\n result.push(...cleanObjectKeys);\n }\n }\n }\n\n that._updatedFields = result;\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 let that = this;\n let groupItemsSkip;\n let firstItem;\n let lastItem;\n let groupItemCount = group.hasSubgroups ? group.subgroupCount : group.itemCount;\n let take = options.take;\n let skipped = options.skipped;\n let pageSize = that.take();\n let 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 let lastItemIndex = Math.min(groupItemsSkip + take, groupItemCount - 1);\n firstItem = group.items[groupItemsSkip];\n lastItem = group.items[lastItemIndex];\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 if (!firstItem.notFetched && !lastItem.notFetched && hasNotFetchedItems(group.items, groupItemsSkip, lastItemIndex)) {\n that.getGroupItems(group, options, parents, callback, groupItemsSkip, lastItemIndex);\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 that._queueWithTimeout(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 }, 100);\n },\n\n _queueWithTimeout: function(options, callback, delay) {\n let that = this;\n\n clearTimeout(that._timeout);\n that._timeout = setTimeout(function() {\n that._queueRequest(options, callback);\n }, delay);\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 that._queueWithTimeout(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 }, 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$1$b = kendo;\n\n const __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$1$a = kendo;\n\n const __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 if (handler) {\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\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, source) {\n var widget = kendo.initWidget(element, {}, roles, source);\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, source);\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$1$9 = kendo;\n\n const __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$1$8 = kendo;\n\n const __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$1$7 = 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 const __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 this.header = wrapper.children(roleSelector(\"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$1$6 = kendo;\n\n const __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 preventDefault: options.preventDefault,\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.preventDefault) {\n e.preventDefault();\n }\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$1$5 = kendo;\n\n const __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 = \"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, { x: coordinates.x, y: coordinates.y });\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 updateHint = options.updateHint;\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 if (updateHint && kendo.isFunction(updateHint)) {\n return $(updateHint.call(that, that.hint, e));\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$1$4 = kendo;\n\n const __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 TRANSFORM = \"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 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,.k-menu-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,.k-menu-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) || outerWidth(element.find(\".k-child-animation-container\").children().first()),\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 [].push.call(elements, this.element[0]);\n }\n\n return elements;\n },\n _sortFocusableElements: function(elements) {\n var sortedElements;\n\n if (stableSort) {\n sortedElements = [].sort.call(elements, 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 = [].sort.call(elements, 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$1$3 = kendo;\n\n const __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$1$2 = kendo;\n\n const __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$1$1 = kendo;\n\n \"bundle all\";\n var kendo$1 = kendo;\n\n return kendo$1;\n\n}));\n"]}