{"version":3,"file":"kendo.mobile.min.js","names":["global","factory","exports","module","require","define","amd","globalThis","self","kendomobile","js","this","breakpoints","EVENT","defaultBreakpoints","small","medium","large","mediaQuery","query","Object","assign","kendo","defaults","mediaQueryList","window","matchMedia","onEnterCallbacks","onLeaveCallbacks","onChangeHandlers","kendoMediaQuery","onChangeHandler","ev","forEach","cb","matches","addEventListener","onChange","push","onEnter","media","MediaQueryListEvent","onLeave","destroy","removeEventListener","createMediaQuery","packageMetadata","name","productName","productCodes","publishDate","version","replace","licensingDocsUrl","$","undefined$1","Template","cultures","extend","each","isArray","Array","noop","math","Math","JSON","support","percentRegExp","formatRegExp","boxShadowRegExp","numberRegExp","MONTH","HOUR","ZONE","WEEKDAY","QUARTER","DATE_FIELD_MAP","G","y","q","Q","M","L","d","E","c","e","h","H","k","K","m","s","a","t","x","X","z","Z","NAME_TYPES","month","type","minLength","standAlone","quarter","weekday","dayperiod","era","FUNCTION","STRING","NUMBER","OBJECT","NULL","BOOLEAN","UNDEFINED","PREFIX","ARIA_LABELLEDBY","ARIA_LABEL","getterCache","setterCache","slice","cssPropertiesNames","noDepricateExtend","src","copyIsArray","copy","options","clone","target","arguments","i","length","deep","jQuery","isPlainObject","Class","proto","member","fn","base","that","subclass","init","apply","prototype","constructor","_initOptions","deepExtend","isPresent","value","isBlank","isString","isNumeric","isNaN","parseFloat","isDate","getTime","isFunction","preventDefault","_defaultPrevented","isDefaultPrevented","Observable","_events","bind","eventName","handlers","one","idx","original","handler","eventNames","handlersIsFunction","unbind","first","unshift","trigger","events","sender","call","splice","compilePart","part","stringPart","split","join","charAt","rest","substring","argumentNameRegExp","encodeRegExp","escapedCurlyRegExp","curlyRegExp","escapedSharpRegExp","sharpRegExp","zeros","pad","number","digits","end","getHiddenDimensions","element","includeMargin","width","height","css","appendTo","outerWidth","outerHeight","remove","wrapResize","autosize","shouldCorrectWidth","_outerWidth","_outerHeight","parent","wrapper","closest","calculateFromHidden","hasClass","visible","is","wrapperStyle","style","elementHeight","display","position","test","add","show","hide","destination","deepExtendOne","source","property","propValue","propType","propInit","destProp","ObservableArray","data","LazyObservableArray","DataSource","HierarchicalDataSource","RegExp","ArrayBuffer","HTMLElement","Date","testRx","agent","rxs","dflt","rx","hasOwnProperty","toCamelCase","str","strMatch","g1","toUpperCase","getComputedStyles","properties","computedStyle","styles","document","defaultView","getComputedStyle","getPropertyValue","currentStyle","size","paramName","useWithBlock","render","template","html","compile","parts","settings","argumentName","match","functionBody","Function","_slotCount","floor","debugTemplates","Error","format","console","warn","gap","indent","rep","escapable","meta","toString","quote","string","lastIndex","charCodeAt","key","holder","v","partial","mind","toJSON","isFinite","String","valueOf","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Number","Boolean","stringify","replacer","space","dateFormatRegExp","standardFormatRegExp","literalRegExp","commaRegExp","EMPTY","POINT","SHARP","ZERO","EN","objectToString","findCulture","culture","numberFormat","getCulture","current","pattern","decimals","groupSize","percent","symbol","currency","abbr","calendars","standard","days","names","namesAbbr","namesShort","months","AM","PM","patterns","D","F","g","T","u","Y","firstDay","twoDigitYearMax","cultureName","indexOf","calendar","groupInteger","start","integer","integerLength","newGroupSize","decimalIndex","groupSizes","shift","reverse","round","precision","negative","toFixed","min","fmt","date","minutes","result","sign","getDate","getDay","getMonth","getFullYear","getHours","getMinutes","getSeconds","getMilliseconds","getTimezoneOffset","abs","formatDate","isCurrency","isPercent","customPrecision","formatAndPrecision","fraction","ch","hasGroup","hasNegativeFormat","sharpIndex","zeroIndex","hasZero","hasSharp","currencyIndex","decimal","literals","replacement","toLocaleString","exec","toLowerCase","toExponential","quoteChar","literal","lastIndexOf","rounded","max","formatNumber","values","index","placeholderFormat","parseInt","_extractFormat","_activeElement","activeElement","documentElement","_round","nonBreakingSpaceRegExp","spaceRegExp","exponentRegExp","shortTimeZoneRegExp","longTimeZoneRegExp","dateRegExp","offsetRegExp","FORMATS_SEQUENCE","STANDARD_FORMATS","exact3","outOfRange","designatorPredicate","designator","mapDesignators","designators","map","lowerArray","array","lowerLocalInfo","localInfo","newLocalInfo","parseExact","strict","shouldUnpadZeros","count","pmHour","UTC","amDesignators","pmDesignators","hoursOffset","minutesOffset","lookAhead","longestDesignatorLength","from","sort","b","getNumber","rg","valueIdx","isInteger","unpadZero","substr","getIndexByName","lower","subLength","nameLength","subValue","matchLength","matchIdx","checkLiteral","year","day","hours","seconds","milliseconds","defaultYear","_lowerDays","_lowerMonths","setHours","adjustDST","setFullYear","internalParseDate","formats","tzoffset","offset","timezone","convert","cultureFormats","formatIdx","concat","getDefaultFormats","parseDate","parseExactDate","percentSymbol","_scrollbar","scrollbar","refresh","div","createElement","cssText","innerHTML","body","appendChild","offsetWidth","scrollWidth","removeChild","isRtl","table","tbodyInnerHtml","touch","docStyle","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","navigator","device","browser","majorVersion","flatVersion","cordova","PhoneGap","appMode","standalone","location","protocol","cssClass","docElement","mobileOS","userAgent","wpDevicePixelRatio","hasNativeScrolling","delayedClick","attr","mouseAndTouchPresent","detectBrowser","edge","safari","opera","msie","mozilla","documentMode","chromiumEdge","detectClipboardAccess","commands","queryCommandSupported","cut","paste","clipboard","zoomLevel","ie11WidthCorrection","docEl","scrollHeight","clientHeight","clientWidth","top","addClass","eventCapture","input","placeholder","propertyChangeEvent","types","setAttribute","cssFloat","stableSort","sorted","field","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","selector","nodeList","querySelectorAll","parentNode","pushState","history","hashChange","customElements","mobileChrome","crios","msPointers","MSPointerEvent","pointers","PointerEvent","kineticScrollNeeded","effects","prepareAnimationOptions","duration","complete","teardown","completeCallback","animate","instance","queue","promise","enabled","Element","dequeue","disable","promiseShim","enable","animatedPromise","kendoStop","clearQueue","gotoEnd","stop","kendoAnimate","kendoAddClass","classes","toggleClass","kendoRemoveClass","kendoToggleClass","toggle","ampRegExp","ltRegExp","quoteRegExp","aposRegExp","gtRegExp","eventTarget","touches","originalEvent","changedTouches","elementFromPoint","clientX","clientY","callback","on","mousedown","mouseup","mousemove","mousecancel","click","resize","localUrlRe","widgets","_widgetRegisteredCallbacks","ui","fx","mobile","dataviz","drawing","spreadsheet","messages","keys","INSERT","DELETE","BACKSPACE","TAB","ENTER","ESC","LEFT","UP","RIGHT","DOWN","END","HOME","SPACEBAR","PAGEUP","PAGEDOWN","F2","F10","F12","NUMPAD_PLUS","NUMPAD_MINUS","NUMPAD_DOT","ns","getShadows","shadow","radius","blur","left","right","bottom","wrap","autowidth","percentage","windowOuterWidth","removeClass","percentWidth","percentHeight","forceDimensions","isScrollable","dataset","className","overflow","scrollLeft","el","mozila","browserVersion","obj","toHyphens","getOffset","positioned","pageYOffset","pageXOffset","parseEffects","directions","down","up","in","out","htmlEncode","shouldDecode","entities","htmlDecode","unescape","decodeURIComponent","error","_","m1","m2","fromCharCode","isLocalUrl","url","expr","expression","safe","members","wrapExpression","exprToArray","filter","getter","fields","setter","innerSetter","val","prop","props","pop","accessor","get","set","guid","random","id","chars","roleSelector","role","directiveSelector","directives","selectors","triggeredByInput","tagName","onWidgetRegistered","len","logToConsole","message","suppressLog","log","Widget","KendoLicensing","validatePackage","_showWatermarkOverlay","addWatermarkOverlay","dataSource","componentTypes","componentType","_hasBindingTarget","kendoBindingTarget","_tabindex","TABINDEX","tabindex","removeAttr","setOptions","_clearCssClasses","_setEvents","_applyCssClasses","force","getSize","currentSize","_size","_resize","dimensions","setSize","removeData","_destroy","validFill","widgetName","protoOptions","__proto__","cssProperties","propertyDictionary","_altname","getValidClass","widget","propName","fillMode","fill","_ariaLabel","labelId","inputElm","inputId","labelElm","ariaLabel","ariaLabelledBy","_generateLabelId","newOptions","currentOptions","themeColor","label","DataBoundWidget","dataItems","flatView","domElement","offsetHeight","notify","templateRegExp","jsonRegExp","jsonFormatRegExp","dashRegExp","parseOption","option","getAttribute","parse","parseOptions","containmentComparer","contains","resizableWidget","inArray","initWidget","roles","fullPath","widgetKeyRegExp","nodeType","widgetKey","isEmptyObject","rolesFromNamespaces","namespaces","find","addBack","widgetsArray","makeArray","widgetInstance","progress","container","leftRight","webkitCorrection","containerScrollLeft","mask","scrollTop","opacity","loading","prependTo","plugin","register","widgetEntry","args","method","ContainerNullObject","nullObject","MobileWidget","autoApplyNS","kendoDestroy","view","viewElement","viewHasNativeScrolling","useNativeScrolling","eq","focusable","isTabIndexNotNaN","nodeName","disabled","href","pseudos","parents","themes","views","touchScroller","elements","useNative","Scroller","kendoMobileScroller","suites","elementData","onResize","setTimeout","unbindResize","off","attrValue","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","kendoFocusable","MOUSE_EVENTS","MouseEventNormalizer","setupMouseMute","mouseTrap","bustClick","captureMouse","stopPropagation","muteMouse","clearTimeout","mouseTrapTimeoutID","unMuteMouse","eventMap","move","cancel","MSPointerEnter","MSPointerLeave","orig","fix","special","delegateType","bindType","handle","ret","related","relatedTarget","handleObj","origType","getEventMap","eventRegEx","applyEventMap","keyDownHandler","kendoKeydown","preventKendoKeydown","kendoJQuery","context","rootjQuery","search","touchstart","touchend","keyDownCallBack","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","Sun","Mon","Tue","Wed","Thu","Fri","Sat","ruleToDate","rule","targetDay","ourDay","time","cache","getUTCDay","setUTCDate","findRule","utcTime","rules","zone","grep","to","zoneAndRule","zones","zoneRules","until","findZone","info","fromOffset","toOffset","diff","tempToOffset","fromLocalOffset","toLocalOffset","toLocalDate","MS_PER_MINUTE","MS_PER_DAY","setDayOfWeek","dir","setDate","dayOfWeek","firstDayOfMonth","calcWeekInYear","weekStartDay","firstWeekInYear","newDate","addDays","moveDateToWeekStart","diffInMS","toInvariantTime","setTime","ignoreDST","difference","today","staticDate","addYear","currentDate","addLiteral","lastPart","isHour12","startsWith","text","searchString","isInDateRange","msValue","msMin","msMax","isInTimeRange","isToday","nextDay","previousDay","toUtcTime","MS_PER_HOUR","splitDateFormat","specifier","patternLength","formatLength","nameType","datePattern","replaceAll","hour12","dateFieldName","dateFields","dateFormatNames","lastDayOfMonth","last","timeOffset","weekInYear","prevWeekDate","nextWeekDate","weekNumber","firstDayOfYear","lastDayOfYear","nextYear","previousYear","stripWhitespace","createNodeIterator","iterator","NodeFilter","SHOW_TEXT","node","FILTER_ACCEPT","FILTER_REJECT","nextNode","referenceNode","textContent","trim","childNodes","child","nodeValue","animationFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","animationQueue","queueAnimation","runNextAnimation","parseQueryStringParams","params","paramParts","elementUnderCursor","client","wheelDeltaY","jQueryEvent","delta","deltaY","wheelDelta","detail","axis","VERTICAL_AXIS","throttle","delay","timeout","lastExecTime","throttled","elapsed","caret","rangeElement","isPosition","selectionStart","focus","setSelectionRange","selectionEnd","selection","createTextRange","collapse","moveStart","moveEnd","select","rangeDuplicated","duplicate","moveToBookmark","createRange","getBookmark","setEndPoint","antiForgeryTokens","tokens","csrf_token","csrf_param","cycleForm","form","firstElement","lastElement","keyCode","shiftKey","focusElement","scrollTopPositions","scrollableParents","parentsUntil","setActive","focusNextElement","focussable","getWidgetFocusableElement","nextFocusable","addAttribute","attribute","removeAttribute","toggleAttribute","matchesMedia","_bootstrapToMedia","bootstrapMedia","xs","sm","md","lg","xl","fileGroupMap","audio","video","image","txt","presentation","programming","pdf","config","zip","getFileGroup","extension","withPrefix","fileTypeMap","groups","getFileSizeMessage","pow","selectorFromClasses","themeColorValues","fillValues","shapeValues","sizeValues","roundedValues","positionModeValues","resizeValues","overflowValues","layoutFlowValues","defaultValues","registerCssClass","shorthand","registerCssClasses","arr","fillModeValues","registerValues","j","newValues","currentValue","dict","widgetValues","validValue","widgetProperties","overridePrefix","registerPrefix","propertyToCssClassMap","getValidCssClass","applyStylesFromKendoAttributes","styleProps","styleProp","currentElement","$currentElement","kendoAttr","whenAll","resolveValues","remaining","deferred","Deferred","failed","rejectContexts","rejectValues","resolveContexts","updateFunc","contexts","notifyWith","done","fail","resolveWith","postToProxy","dataURI","fileName","proxyURL","proxyTarget","action","contentType","base64","submit","fileSaver","downloadAttribute","saveAsBlob","blob","atob","Uint8Array","Blob","buffer","msSaveBlob","saveAsDataURI","URL","createObjectURL","download","createEvent","initMouseEvent","dispatchEvent","revokeObjectURL","saveAs","save","forceProxy","proxyModelSetters","observable","defineProperty","dirty","getSeriesColors","series","colors","item","isElement","HTMLDocument","setDefaults","path","curr","DEBUG_KENDO_TEMPLATES","class2type","_i","setScriptKey","showBanner","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","resolve","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","firstChild","nextSibling","intermediateResult","tree","parseXML","raw","readers","or","identity","and","operatorsMap","doesnotendwith","doesnotstartwith","transformFilter","accentFoldingFiltering","itemProp","toLocaleLowerCase","typedGetter","convertValue","op","transformCompositeFilter","combiner","extendAccentFolding","reduce","CREATE","READ","UPDATE","DESTROY","CHANGE","SYNC","GET","ERROR","REQUESTSTART","PROGRESS","REQUESTEND","ITEMSLOADED","ITEMLOAD","crud","o","objectKeys","ObservableObject","wrapAll","_loadPromises","_loadedNodes","at","serializeFunctions","json","object","isGroup","items","_loading","nodes","omitChangeEvent","howMany","omitCache","thisArg","reduceRight","every","some","empty","Symbol","_parent","eventHandler","_notifyChange","ownKeys","ignoreObjectKeys","filteredObjectKeys","protoKeys","getPrototypeOf","isPrimitiveType","getOwnPropertyNames","f","_handlers","uid","shouldSerialize","_set","composite","paths","isSetPrevented","change","isObservableArray","isDataSource","equal","xtype","parsers","boolean","default","_initializers","dirtyFields","_defaultId","fieldName","getFieldByName","editable","accept","isNew","originalName","functionFields","nullable","defaultValue","Comparer","compare","localeCompare","combine","comparers","StableComparer","asc","valueA","valueB","__position","desc","operators","textOp","impl","ignore","getMatchRegexp","esc","doesnotmatch","Query","normalizeSort","descriptor","descriptors","sortFields","sorts","sortObject","filterExpr","noEval","filterExprNoEval","expressions","fieldFunctions","operatorFunctions","operatorMap","equals","isequalto","equalto","ne","notequals","isnotequalto","notequalto","notequal","islessthan","lessthan","less","le","islessthanorequalto","lessthanequal","isgreaterthan","greaterthan","greater","isgreaterthanorequalto","greaterthanequal","ge","notsubstringof","normalizeOperator","normalizeFilter","compareDescriptor","f1","f2","normalizeDescriptor","fieldComparer","normalizeGroup","skipItemSorting","aggregates","normalizeGroupWithoutCompare","groupValueComparer","calculateAggregate","accumulator","state","aggr","functionName","aggregate","functions","compareFilters","expr1","expr2","filters1","filters2","toArray","range","inPlace","orderBy","orderByDescending","comparer","compiled","group","allData","getFilteredData","groupPaging","groupAllData","cachedFilteredData","hasSubgroups","itemCount","subgroupCount","groupBy","_sortForGrouping","groupValue","_sortGroups","sum","isNumber","average","process","groupDescriptorsWithoutSort","customGroupSort","groupDescriptors","anyGroupDescriptorHasCompare","groupDescriptorsWithoutCompare","normalizedSort","filterCallback","flatGroups","groupDescriptor","virtual","LocalTransport","RemoteTransport","Cache","parameters","operation","_store","clear","serializeRecords","getters","originalFieldNames","fieldNames","setters","convertRecords","convertGroup","wrapDataAccess","originalFunction","converter","wrapDataAccessBase","store","inmemory","DataReader","schema","dataFunction","_dataAccessFunction","groupsFunction","serializeFunction","serializeGetters","fromName","_wrapDataAccessBase","fillLastGroup","originalGroup","newGroup","currOriginal","currentNew","mergeGroups","dest","indexFunction","groupsLength","indexFn","groupIndex","itemIndex","flattenGroups","wrapGroupItems","eachGroupItems","func","replaceInRanges","ranges","replaceInRange","replaceWithObservable","serverGrouping","viewIndex","indexOfPristineModel","indexOfModel","fieldNameFromModel","convertFilterDescriptorsField","convertDescriptorsField","_map","_prefetch","_data","_pristineData","_ranges","_view","_pristineTotal","_destroyed","_pageSize","_page","_sort","_sortFields","_filter","_group","_aggregate","_total","_groupPaging","_groupsState","_shouldDetachObservableParents","Transport","pushCreate","_pushCreate","pushUpdate","_pushUpdate","pushDestroy","_pushDestroy","offlineStorage","_storage","getItem","localStorage","setItem","reader","_detachObservableParents","_observe","_online","serverSorting","serverPaging","serverFiltering","serverAggregates","inPlaceSort","online","sync","offlineData","_isGrouped","_isServerGrouped","_isServerGroupPaged","_isGroupPaged","_push","_readData","_flatData","useRanges","getByUid","_getByUid","_storeData","_addRange","_process","_observeView","insert","_createNewModel","_wrapInEmptyGroup","_insertModelInRange","pushInsert","rangeSpan","_getCurrentRangeSpan","pushed","autoSync","pristine","pristineData","_updatePristineForModel","_removeItems","itemsToRemove","removePristine","shouldRemovePristine","found","_eachItem","_removePristineForModel","pushMove","_moveItems","moved","dataItem","hasGroups","_pushInDestroyed","removeModel","_removeModelFromRanges","notFetched","promises","_sendSubmit","_send","when","then","changedItems","_accept","_syncEnd","_change","cancelChanges","_cancelModel","_changesCanceled","_markOfflineUpdatesAsDirty","__state__","hasChanges","serverGroup","_handleCustomErrors","_executeOnPristineForModel","_eachPristineItem","_pristineForModel","_modelCanceled","_submit","reject","_promise","converted","_params","_queueRequest","isPrevented","_dequeueRequest","_readAggregates","replaceSubset","_serverGroupsTotal","_aggregateResult","itemIds","_skip","endless","_changeHandler","updatePristine","timestamp","_timeStamp","outerStart","outerEnd","_sortRanges","_groupsFlat","_appendToGroupsFlat","_updateOuterRangesLength","_getGroupByUid","xhr","errorThrown","isExcelExportRequest","_requestInProgress","_pending","_shouldWrap","_updateTotalForAction","_operationsForUpdatedFields","updatedFields","_updatedFields","operations","stringified","partialUpdate","_preventPartialUpdate","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","_timeout","_groupItemsSuccessHandler","totalField","totalCount","_updateRangePristineData","countAdded","_currentRequestTimeStamp","_skipRequestsInProgress","indexOfCurrentGroup","currentGroup","dataLength","indexes","rangesLength","_containsSubGroup","_cloneGroup","subgroup","currentSubGroup","filterTotal","setDefaultValue","fetch","_query","next","totalPages","prev","_pageableQueryOptions","getGroupsFlat","groupsTotal","includeExpanded","_calculateGroupsTotal","itemsField","ignoreState","_groupsTotal","countGroupRange","_emptyAggregates","ceil","inRange","_findRange","lastRange","firstItemUid","enableRequestsInProgress","pageSkip","_processRangeData","_originalPageSkip","_originalSize","_adjustPageSkip","_groupRangeExists","_rangeExists","prefetch","skipIdx","takeIdx","startIndex","endIndex","rangeData","rangeEnd","processed","flatData","prevRangeEnd","remote","groupMapOptions","isGroupPaged","startField","endField","_mergeGroups","_getRangesMismatch","mismatch","prevGroup","eventData","_omitPrefetch","paging","sorting","filtering","_prefetchSuccessHandler","_multiplePrefetch","prevRange","_getPrevRange","_getNextRange","availableItemsCount","_removeModelFromRange","_updateRangesLength","mismatchFound","mismatchLength","lengthDifference","rangeLength","transportOptions","fieldIndex","cells","cell","tbody","tBodies","rows","fieldCount","inferTable","optgroup","firstField","secondField","specified","inferSelect","Node","hasChildren","childrenField","childrenOptions","hasChildrenObject","_childrenOptions","_initChildren","_loaded","_updateChildrenField","loaded","level","_childrenLoaded","load","_matchFilter","dataMethod","_attachBubbleHandlers","_hierarchicalFilter","_childrenLoading","isLoading","_markHierarchicalQuery","_updateHierarchicalFilter","_find","inferList","list","textChild","textField","urlField","spriteCssClassField","imageUrlField","_dataSource","Buffer","viewSize","disablePrefetch","_prefetching","_reset","_syncWithDataSource","setViewSize","_recalculate","itemPresent","dataOffset","prefetchThreshold","midPageThreshold","nextMidRange","nextPageThreshold","nextFullRange","pullBackThreshold","previousMidRange","previousFullRange","_goToRange","nextRange","syncDataSource","prefetchOffset","expanding","_expanding","_syncPending","_firstItemUid","BatchBuffer","batchSize","batchBuffer","endreached","prefetching","prefetched","isJQueryPromise","isNativePromise","catch","signalr","hub","invoke","callbacks","_crud","server","encode","binders","VALUE","SOURCE","EVENTS","CHECKED","deleteExpando","Binding","dependencies","_access","_parents","dependency","currentSource","EventBinding","TemplateBinding","Binder","bindings","binding","TypedBinder","parsedValue","_parseValue","dataSourceBinding","bindingName","_dataBinding","dataBinding","_dataBound","dataBound","_itemChange","itemChange","bindElement","_ns","removedItems","unbindElementTree","all","addedItems","hds","addedDataItems","multiselect","Select","MultiSelect","DropDownTree","treeview","retrievePrimitiveValues","dataValueField","readonly","dataFormat","invisible","valueUpdate","_initChange","autoBind","valueField","valueAttr","innerText","cloneNode","reference","insertBefore","unbindElementChildren","checked","selectedIndex","selected","valueIndex","valuePrimitive","sourceValue","optionIndex","optionValue","check","_range","floatingLabel","readOnly","_valueIsObservableObject","_valueIsObservableArray","_source","valueLength","sourceItem","dataTextField","isObservableObject","cascadeFrom","listView","bound","_preselect","dropdowntree","oldValues","selectedNode","nonPrimitiveValues","_isMultipleSelection","_getAllChecked","removeIndex","newValue","newLength","old","arraySplice","selectedValue","gantt","_isBound","scheduler","grid","badge","addLength","shifted","shiftedLength","BindingTarget","toDestroy","hasValue","hasSource","hasEvents","hasChecked","hasCss","widgetBinding","WidgetBindingTarget","specificBinders","applyBinding","binder","keyValueRegExp","whiteSpaceRegExp","parseBindings","token","colonIndex","createBindings","childrenCopy","unbindElement","bindingTargetForRole","dom","destroyWidget","bindingTarget","destroyWidgets","namespace","observableHierarchy","recursiveRead","NS","INVALIDMSG","invalidMsgRegExp","INVALIDINPUT","VALIDINPUT","VALIDATIONSUMMARY","INVALIDLABEL","MESSAGEBOX","ARIAINVALID","emailRegExp","ALLOWED_URL_PROTOCOLS","INPUTSELECTOR","CHECKBOXSELECTOR","NUMBERINPUTSELECTOR","BLUR","NAME","FORM","NOVALIDATE","VALIDATE","VALIDATE_INPUT","patternMatcher","hasAttribute","parseHtml","parseHTML","searchForMessageContainer","containers","isLabelFor","validator","allowSubmit","validateOnInit","SUMMARYTEMPLATE","Validator","resolved","resolvers","ruleResolvers","resolveRules","validateAttributeSelector","_errorTemplate","errorTemplate","_summaryTemplate","validationSummary","_inputSelector","_checkboxSelector","_errors","_attachEvents","_isValidated","_validateOnInit","validate","required","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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","sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery')) :\n typeof define === 'function' && define.amd ? define(['jquery'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (global.kendomobile = global.kendomobile || {}, global.kendomobile.js = factory()));\n})(this, (function () {\n let breakpoints;\n const EVENT = \"change\";\n\n const defaultBreakpoints = {\n small: \"(max-width: 500px)\",\n medium: \"(min-width: 500.1px) and (max-width: 768px)\",\n large: \"(min-width: 768.1px)\",\n };\n\n function createMediaQuery(query) {\n let mediaQueryList = window.matchMedia(query);\n let onEnterCallbacks = [];\n let onLeaveCallbacks = [];\n let onChangeHandlers = [];\n let kendoMediaQuery = { mediaQueryList };\n\n const onChangeHandler = (ev) => {\n onChangeHandlers.forEach((cb) => cb(ev));\n\n if (ev.matches) {\n onEnterCallbacks.forEach((cb) => cb(ev));\n } else {\n onLeaveCallbacks.forEach((cb) => cb(ev));\n }\n };\n\n mediaQueryList.addEventListener(EVENT, onChangeHandler);\n\n const onChange = (cb) => {\n onChangeHandlers.push(cb);\n return kendoMediaQuery;\n };\n\n const onEnter = (cb) => {\n onEnterCallbacks.push(cb);\n\n if (mediaQueryList.matches) {\n const media = mediaQueryList.media;\n const matches = true;\n\n const ev = new MediaQueryListEvent(EVENT, {\n media,\n matches,\n });\n\n cb(ev);\n }\n\n return kendoMediaQuery;\n };\n\n const onLeave = (cb) => {\n onLeaveCallbacks.push(cb);\n return kendoMediaQuery;\n };\n\n const destroy = () => {\n if (mediaQueryList) {\n mediaQueryList.removeEventListener(EVENT, onChangeHandler);\n }\n onEnterCallbacks = null;\n onLeaveCallbacks = null;\n onChangeHandlers = null;\n mediaQueryList = null;\n kendoMediaQuery = null;\n };\n\n kendoMediaQuery.onChange = onChange;\n kendoMediaQuery.onEnter = onEnter;\n kendoMediaQuery.onLeave = onLeave;\n kendoMediaQuery.destroy = destroy;\n\n return kendoMediaQuery;\n }\n\n function mediaQuery(query) {\n if (!query) {\n return;\n }\n\n breakpoints =\n breakpoints ||\n Object.assign({}, defaultBreakpoints, kendo.defaults.breakpoints);\n\n if (query in breakpoints) {\n query = breakpoints[query];\n }\n\n return createMediaQuery(query);\n }\n\n var __meta__$e = {\n id: \"core\",\n name: \"Core\",\n category: \"framework\",\n description: \"The core of the Kendo framework.\"\n };\n\n var packageMetadata = {\n name: '@progress/kendo-ui',\n productName: 'Kendo UI',\n productCodes: ['KENDOUICOMPLETE', 'KENDOUI', 'UIASPCORE', 'KENDOMVC', 'KENDOUIMVC'],\n publishDate: 0,\n version: '2024.3.1015'.replace(/^\\s+|\\s+$/g, ''),\n licensingDocsUrl: 'https://docs.telerik.com/kendo-ui/intro/installation/using-license-code?utm_medium=product&utm_source=kendojquery&utm_campaign=kendo-ui-jquery-purchase-license-keys-warning'\n };\n\n\n (function($, window, undefined$1) {\n var kendo = window.kendo = window.kendo || { cultures: {} },\n extend = $.extend,\n each = $.each,\n isArray = Array.isArray,\n noop = $.noop,\n math = Math,\n Template,\n JSON = window.JSON || {},\n support = {},\n percentRegExp = /%/,\n formatRegExp = /\\{(\\d+)(:[^\\}]+)?\\}/g,\n boxShadowRegExp = /(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+)?/i,\n numberRegExp = /^(\\+|-?)\\d+(\\.?)\\d*$/,\n MONTH = \"month\",\n HOUR = \"hour\",\n ZONE = \"zone\",\n WEEKDAY = \"weekday\",\n QUARTER = \"quarter\",\n DATE_FIELD_MAP = {\n \"G\": \"era\",\n \"y\": \"year\",\n \"q\": QUARTER,\n \"Q\": QUARTER,\n \"M\": MONTH,\n \"L\": MONTH,\n \"d\": \"day\",\n \"E\": WEEKDAY,\n \"c\": WEEKDAY,\n \"e\": WEEKDAY,\n \"h\": HOUR,\n \"H\": HOUR,\n \"k\": HOUR,\n \"K\": HOUR,\n \"m\": \"minute\",\n \"s\": \"second\",\n \"a\": \"dayperiod\",\n \"t\": \"dayperiod\",\n \"x\": ZONE,\n \"X\": ZONE,\n \"z\": ZONE,\n \"Z\": ZONE\n },\n NAME_TYPES = {\n month: {\n type: \"months\",\n minLength: 3,\n standAlone: \"L\"\n },\n\n quarter: {\n type: \"quarters\",\n minLength: 3,\n standAlone: \"q\"\n },\n\n weekday: {\n type: \"days\",\n minLength: {\n E: 0,\n c: 3,\n e: 3\n },\n standAlone: \"c\"\n },\n\n dayperiod: {\n type: \"dayPeriods\",\n minLength: 0\n },\n\n era: {\n type: \"eras\",\n minLength: 0\n }\n },\n FUNCTION = \"function\",\n STRING = \"string\",\n NUMBER = \"number\",\n OBJECT = \"object\",\n NULL = \"null\",\n BOOLEAN = \"boolean\",\n UNDEFINED = \"undefined\",\n PREFIX = \"prefix\",\n ARIA_LABELLEDBY = \"aria-labelledby\",\n ARIA_LABEL = \"aria-label\",\n LABELIDPART = \"_label\",\n getterCache = {},\n setterCache = {},\n slice = [].slice,\n cssPropertiesNames = [ \"themeColor\", \"fillMode\", \"shape\", \"size\", \"rounded\", \"positionMode\" ],\n // avoid extending the depricated properties in latest verions of jQuery\n noDepricateExtend = function() {\n var src, copyIsArray, copy, name, options, clone,\n target = arguments[ 0 ] || {},\n i = 1,\n length = arguments.length,\n deep = false;\n\n // Handle a deep copy situation\n if ( typeof target === \"boolean\" ) {\n deep = target;\n\n // skip the boolean and the target\n target = arguments[ i ] || {};\n i++;\n }\n\n // Handle case when target is a string or something (possible in deep copy)\n if ( typeof target !== \"object\" && typeof target !== \"function\") {\n target = {};\n }\n\n // extend jQuery itself if only one argument is passed\n if ( i === length ) {\n target = this;\n i--;\n }\n\n for ( ; i < length; i++ ) {\n\n // Only deal with non-null/undefined values\n if ( ( options = arguments[ i ] ) != null ) {\n\n // Extend the base object\n for ( name in options ) {\n // filters, concat and : properties are depricated in the jQuery 3.3.0\n // accessing these properties throw a warning when jQuery migrate is included\n if (name == \"filters\" || name == \"concat\" || name == \":\") {\n continue;\n }\n src = target[ name ];\n copy = options[ name ];\n\n // Prevent never-ending loop\n if ( target === copy ) {\n continue;\n }\n\n // Recurse if we're merging plain objects or arrays\n if ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n ( copyIsArray = Array.isArray( copy ) ) ) ) {\n\n if ( copyIsArray ) {\n copyIsArray = false;\n clone = src && Array.isArray( src ) ? src : [];\n\n } else {\n clone = src && jQuery.isPlainObject( src ) ? src : {};\n }\n\n // Never move original objects, clone them\n target[ name ] = noDepricateExtend( deep, clone, copy );\n\n // Don't bring in undefined values\n } else if ( copy !== undefined$1 ) {\n target[ name ] = copy;\n }\n }\n }\n }\n\n // Return the modified object\n return target;\n };\n\n kendo.version = \"2024.3.1015\".replace(/^\\s+|\\s+$/g, '');\n\n function Class() {}\n\n Class.extend = function(proto) {\n var base = function() {},\n member,\n that = this,\n subclass = proto && proto.init ? proto.init : function() {\n that.apply(this, arguments);\n },\n fn;\n\n base.prototype = that.prototype;\n fn = subclass.fn = subclass.prototype = new base();\n\n for (member in proto) {\n if (proto[member] != null && proto[member].constructor === Object) {\n // Merge object members\n fn[member] = extend(true, {}, base.prototype[member], proto[member]);\n } else {\n fn[member] = proto[member];\n }\n }\n\n fn.constructor = subclass;\n subclass.extend = that.extend;\n\n return subclass;\n };\n\n Class.prototype._initOptions = function(options) {\n this.options = deepExtend({}, this.options, options);\n };\n\n const isPresent = kendo.isPresent = (value) => value !== null && value !== undefined$1;\n const isBlank = kendo.isBlank = (value) => value === null || value === undefined$1;\n const isString = kendo.isString = (value) => typeof value === 'string';\n const isNumeric = kendo.isNumeric = (value) => !isNaN(value - parseFloat(value));\n const isDate = kendo.isDate = (value) => value && value.getTime;\n const isFunction = kendo.isFunction = (value) => typeof value === 'function';\n\n var preventDefault = function() {\n this._defaultPrevented = true;\n };\n\n var isDefaultPrevented = function() {\n return this._defaultPrevented === true;\n };\n\n var Observable = Class.extend({\n init: function() {\n this._events = {};\n },\n\n bind: function(eventName, handlers, one) {\n var that = this,\n idx,\n eventNames = typeof eventName === STRING ? [eventName] : eventName,\n length,\n original,\n handler,\n handlersIsFunction = typeof handlers === FUNCTION,\n events;\n\n if (handlers === undefined$1) {\n for (idx in eventName) {\n that.bind(idx, eventName[idx]);\n }\n return that;\n }\n\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n eventName = eventNames[idx];\n\n handler = handlersIsFunction ? handlers : handlers[eventName];\n\n if (handler) {\n if (one) {\n original = handler;\n handler = function() {\n that.unbind(eventName, handler);\n original.apply(that, arguments);\n };\n handler.original = original;\n }\n events = that._events[eventName] = that._events[eventName] || [];\n events.push(handler);\n }\n }\n\n return that;\n },\n\n one: function(eventNames, handlers) {\n return this.bind(eventNames, handlers, true);\n },\n\n first: function(eventName, handlers) {\n var that = this,\n idx,\n eventNames = typeof eventName === STRING ? [eventName] : eventName,\n length,\n handler,\n handlersIsFunction = typeof handlers === FUNCTION,\n events;\n\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n eventName = eventNames[idx];\n\n handler = handlersIsFunction ? handlers : handlers[eventName];\n\n if (handler) {\n events = that._events[eventName] = that._events[eventName] || [];\n events.unshift(handler);\n }\n }\n\n return that;\n },\n\n trigger: function(eventName, e) {\n var that = this,\n events = that._events[eventName],\n idx,\n length;\n\n if (events) {\n e = e || {};\n\n e.sender = that;\n\n e._defaultPrevented = false;\n\n e.preventDefault = preventDefault;\n\n e.isDefaultPrevented = isDefaultPrevented;\n\n events = events.slice();\n\n for (idx = 0, length = events.length; idx < length; idx++) {\n events[idx].call(that, e);\n }\n\n return e._defaultPrevented === true;\n }\n\n return false;\n },\n\n unbind: function(eventName, handler) {\n var that = this,\n events = that._events[eventName],\n idx;\n\n if (eventName === undefined$1) {\n that._events = {};\n } else if (events) {\n if (handler) {\n for (idx = events.length - 1; idx >= 0; idx--) {\n if (events[idx] === handler || events[idx].original === handler) {\n events.splice(idx, 1);\n }\n }\n } else {\n that._events[eventName] = [];\n }\n }\n\n return that;\n }\n });\n\n\n function compilePart(part, stringPart) {\n if (stringPart) {\n return \"'\" +\n part.split(\"'\").join(\"\\\\'\")\n .split('\\\\\"').join('\\\\\\\\\\\\\"')\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/\\t/g, \"\\\\t\") + \"'\";\n } else {\n var first = part.charAt(0),\n rest = part.substring(1);\n\n if (first === \"=\") {\n return \"+(\" + rest + \")+\";\n } else if (first === \":\") {\n return \"+$kendoHtmlEncode(\" + rest + \")+\";\n } else {\n return \";\" + part + \";$kendoOutput+=\";\n }\n }\n }\n\n var argumentNameRegExp = /^\\w+/,\n encodeRegExp = /\\$\\{([^}]*)\\}/g,\n escapedCurlyRegExp = /\\\\\\}/g,\n curlyRegExp = /__CURLY__/g,\n escapedSharpRegExp = /\\\\#/g,\n sharpRegExp = /__SHARP__/g,\n zeros = [\"\", \"0\", \"00\", \"000\", \"0000\"];\n\n Template = {\n paramName: \"data\", // name of the parameter of the generated template\n useWithBlock: true, // whether to wrap the template in a with() block\n render: function(template, data) {\n var idx,\n length,\n html = \"\";\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n html += template(data[idx]);\n }\n\n return html;\n },\n compile: function(template, options) {\n var settings = extend({}, this, options),\n paramName = settings.paramName,\n argumentName = paramName.match(argumentNameRegExp)[0],\n useWithBlock = settings.useWithBlock,\n functionBody = \"var $kendoOutput, $kendoHtmlEncode = kendo.htmlEncode;\",\n fn,\n parts,\n idx;\n\n if (isFunction(template)) {\n return template;\n }\n\n functionBody += useWithBlock ? \"with(\" + paramName + \"){\" : \"\";\n\n functionBody += \"$kendoOutput=\";\n\n parts = template\n .replace(escapedCurlyRegExp, \"__CURLY__\")\n .replace(encodeRegExp, \"#=$kendoHtmlEncode($1)#\")\n .replace(curlyRegExp, \"}\")\n .replace(escapedSharpRegExp, \"__SHARP__\")\n .split(\"#\");\n\n for (idx = 0; idx < parts.length; idx ++) {\n functionBody += compilePart(parts[idx], idx % 2 === 0);\n }\n\n functionBody += useWithBlock ? \";}\" : \";\";\n\n functionBody += \"return $kendoOutput;\";\n\n functionBody = functionBody.replace(sharpRegExp, \"#\");\n\n try {\n // This function evaluation is required for legacy support of the Kendo Template syntax - non CSP compliant.\n fn = new Function(argumentName, functionBody);\n fn._slotCount = Math.floor(parts.length / 2);\n return fn;\n } catch (e) {\n if (kendo.debugTemplates) {\n window.console.warn(`Invalid template:'${template}' Generated code:'${functionBody}'`);\n } else {\n throw new Error(kendo.format(\"Invalid template:'{0}' Generated code:'{1}'\", template, functionBody));\n }\n }\n }\n };\n\n function pad(number, digits, end) {\n number = number + \"\";\n digits = digits || 2;\n end = digits - number.length;\n\n if (end) {\n return zeros[digits].substring(0, end) + number;\n }\n\n return number;\n }\n\n //JSON stringify\n (function() {\n var escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n gap,\n indent,\n meta = {\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": '\\\\\"',\n \"\\\\\": \"\\\\\\\\\"\n },\n rep,\n toString = {}.toString;\n\n\n if (typeof Date.prototype.toJSON !== FUNCTION) {\n\n Date.prototype.toJSON = function() {\n var that = this;\n\n return isFinite(that.valueOf()) ?\n pad(that.getUTCFullYear(), 4) + \"-\" +\n pad(that.getUTCMonth() + 1) + \"-\" +\n pad(that.getUTCDate()) + \"T\" +\n pad(that.getUTCHours()) + \":\" +\n pad(that.getUTCMinutes()) + \":\" +\n pad(that.getUTCSeconds()) + \"Z\" : null;\n };\n\n String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function() {\n return this.valueOf();\n };\n }\n\n function quote(string) {\n escapable.lastIndex = 0;\n return escapable.test(string) ? \"\\\"\" + string.replace(escapable, function(a) {\n var c = meta[a];\n return typeof c === STRING ? c :\n \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\" : \"\\\"\" + string + \"\\\"\";\n }\n\n function str(key, holder) {\n var i,\n k,\n v,\n length,\n mind = gap,\n partial,\n value = holder[key],\n type;\n\n if (value && typeof value === OBJECT && typeof value.toJSON === FUNCTION) {\n value = value.toJSON(key);\n }\n\n if (typeof rep === FUNCTION) {\n value = rep.call(holder, key, value);\n }\n\n type = typeof value;\n if (type === STRING) {\n return quote(value);\n } else if (type === NUMBER) {\n return isFinite(value) ? String(value) : NULL;\n } else if (type === BOOLEAN || type === NULL) {\n return String(value);\n } else if (type === OBJECT) {\n if (!value) {\n return NULL;\n }\n gap += indent;\n partial = [];\n if (toString.apply(value) === \"[object Array]\") {\n length = value.length;\n for (i = 0; i < length; i++) {\n partial[i] = str(i, value) || NULL;\n }\n v = partial.length === 0 ? \"[]\" : gap ?\n \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\" :\n \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n if (rep && typeof rep === OBJECT) {\n length = rep.length;\n for (i = 0; i < length; i++) {\n if (typeof rep[i] === STRING) {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? \": \" : \":\") + v);\n }\n }\n }\n } else {\n for (k in value) {\n if (Object.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? \": \" : \":\") + v);\n }\n }\n }\n }\n\n v = partial.length === 0 ? \"{}\" : gap ?\n \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\" :\n \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n if (typeof JSON.stringify !== FUNCTION) {\n JSON.stringify = function(value, replacer, space) {\n var i;\n gap = \"\";\n indent = \"\";\n\n if (typeof space === NUMBER) {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n } else if (typeof space === STRING) {\n indent = space;\n }\n\n rep = replacer;\n if (replacer && typeof replacer !== FUNCTION && (typeof replacer !== OBJECT || typeof replacer.length !== NUMBER)) {\n throw new Error(\"JSON.stringify\");\n }\n\n return str(\"\", { \"\": value });\n };\n }\n })();\n\n // Date and Number formatting\n (function() {\n var dateFormatRegExp = /EEEE|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|HH|H|hh|h|mm|m|fff|ff|f|tt|ss|s|zzz|zz|z|\"[^\"]*\"|'[^']*'/g,\n standardFormatRegExp = /^(n|c|p|e)(\\d*)$/i,\n literalRegExp = /(\\\\.)|(['][^']*[']?)|([\"][^\"]*[\"]?)/g,\n commaRegExp = /\\,/g,\n EMPTY = \"\",\n POINT = \".\",\n COMMA = \",\",\n SHARP = \"#\",\n ZERO = \"0\",\n PLACEHOLDER = \"??\",\n EN = \"en-US\",\n objectToString = {}.toString;\n\n //cultures\n kendo.cultures = kendo.cultures || {}; // Ensure cultures object exists\n kendo.cultures[\"en-US\"] = {\n name: EN,\n numberFormat: {\n pattern: [\"-n\"],\n decimals: 2,\n \",\": \",\",\n \".\": \".\",\n groupSize: [3],\n percent: {\n pattern: [\"-n %\", \"n %\"],\n decimals: 2,\n \",\": \",\",\n \".\": \".\",\n groupSize: [3],\n symbol: \"%\"\n },\n currency: {\n name: \"US Dollar\",\n abbr: \"USD\",\n pattern: [\"($n)\", \"$n\"],\n decimals: 2,\n \",\": \",\",\n \".\": \".\",\n groupSize: [3],\n symbol: \"$\"\n }\n },\n calendars: {\n standard: {\n days: {\n names: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n namesAbbr: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n namesShort: [ \"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\" ]\n },\n months: {\n names: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n namesAbbr: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n },\n AM: [ \"AM\", \"am\", \"AM\" ],\n PM: [ \"PM\", \"pm\", \"PM\" ],\n patterns: {\n d: \"M/d/yyyy\",\n D: \"dddd, MMMM dd, yyyy\",\n F: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n g: \"M/d/yyyy h:mm tt\",\n G: \"M/d/yyyy h:mm:ss tt\",\n m: \"MMMM dd\",\n M: \"MMMM dd\",\n s: \"yyyy'-'MM'-'ddTHH':'mm':'ss\",\n t: \"h:mm tt\",\n T: \"h:mm:ss tt\",\n u: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\n y: \"MMMM, yyyy\",\n Y: \"MMMM, yyyy\"\n },\n \"/\": \"/\",\n \":\": \":\",\n firstDay: 0,\n twoDigitYearMax: 2029\n }\n }\n };\n\n\n function findCulture(culture) {\n if (culture) {\n if (culture.numberFormat) {\n return culture;\n }\n\n if (typeof culture === STRING) {\n var cultures = kendo.cultures;\n return cultures[culture] || cultures[culture.split(\"-\")[0]] || null;\n }\n\n return null;\n }\n\n return null;\n }\n\n function getCulture(culture) {\n if (culture) {\n culture = findCulture(culture);\n }\n\n return culture || kendo.cultures.current;\n }\n\n function appendDesignatorsToCultures(calendars) {\n // Don't ask. It's temporary.\n if ((calendars.standard.AM && calendars.standard.AM.length)\n && (calendars.standard.PM && calendars.standard.PM.length)\n && (calendars.standard.AM.indexOf(\"PMA0\") < 0)\n && (calendars.standard.AM.indexOf(\"AM\") > -1 || calendars.standard.PM.indexOf(\"PM\") > -1)) {\n calendars.standard.AM.push(\"a\", \"A\", \"PMa\", \"PMA\", \"PMa0\", \"PMA0\");\n calendars.standard.PM.push(\"p\", \"P\", \"AMp\", \"AMP\", \"AMp0\", \"AMP0\");\n }\n }\n\n kendo.culture = function(cultureName) {\n var cultures = kendo.cultures, culture;\n\n if (cultureName !== undefined$1) {\n culture = findCulture(cultureName) || cultures[EN];\n culture.calendar = culture.calendars.standard;\n cultures.current = culture;\n } else {\n appendDesignatorsToCultures(cultures.current.calendars);\n return cultures.current;\n }\n };\n\n kendo.findCulture = findCulture;\n kendo.getCulture = getCulture;\n\n //set current culture to en-US.\n kendo.culture(EN);\n\n function formatDate(date, format, culture) {\n culture = getCulture(culture);\n\n var calendar = culture.calendars.standard,\n days = calendar.days,\n months = calendar.months;\n\n format = format.pattern || calendar.patterns[format] || format;\n\n return format.replace(dateFormatRegExp, function(match) {\n var minutes;\n var result;\n var sign;\n\n if (match === \"d\") {\n result = date.getDate();\n } else if (match === \"dd\") {\n result = pad(date.getDate());\n } else if (match === \"ddd\") {\n result = days.namesAbbr[date.getDay()];\n } else if (match === \"dddd\" || match === \"EEEE\") {\n result = days.names[date.getDay()];\n } else if (match === \"M\") {\n result = date.getMonth() + 1;\n } else if (match === \"MM\") {\n result = pad(date.getMonth() + 1);\n } else if (match === \"MMM\") {\n result = months.namesAbbr[date.getMonth()];\n } else if (match === \"MMMM\") {\n result = months.names[date.getMonth()];\n } else if (match === \"yy\") {\n result = pad(date.getFullYear() % 100);\n } else if (match === \"yyyy\") {\n result = pad(date.getFullYear(), 4);\n } else if (match === \"h\" ) {\n result = date.getHours() % 12 || 12;\n } else if (match === \"hh\") {\n result = pad(date.getHours() % 12 || 12);\n } else if (match === \"H\") {\n result = date.getHours();\n } else if (match === \"HH\") {\n result = pad(date.getHours());\n } else if (match === \"m\") {\n result = date.getMinutes();\n } else if (match === \"mm\") {\n result = pad(date.getMinutes());\n } else if (match === \"s\") {\n result = date.getSeconds();\n } else if (match === \"ss\") {\n result = pad(date.getSeconds());\n } else if (match === \"f\") {\n result = math.floor(date.getMilliseconds() / 100);\n } else if (match === \"ff\") {\n result = date.getMilliseconds();\n if (result > 99) {\n result = math.floor(result / 10);\n }\n result = pad(result);\n } else if (match === \"fff\") {\n result = pad(date.getMilliseconds(), 3);\n } else if (match === \"tt\" || match === \"aa\") {\n result = date.getHours() < 12 ? calendar.AM[0] : calendar.PM[0];\n } else if (match === \"zzz\") {\n minutes = date.getTimezoneOffset();\n sign = minutes < 0;\n\n result = math.abs(minutes / 60).toString().split(\".\")[0];\n minutes = math.abs(minutes) - (result * 60);\n\n result = (sign ? \"+\" : \"-\") + pad(result);\n result += \":\" + pad(minutes);\n } else if (match === \"zz\" || match === \"z\") {\n result = date.getTimezoneOffset() / 60;\n sign = result < 0;\n\n result = math.abs(result).toString().split(\".\")[0];\n result = (sign ? \"+\" : \"-\") + (match === \"zz\" ? pad(result) : result);\n }\n\n return result !== undefined$1 ? result : match.slice(1, match.length - 1);\n });\n }\n\n //number formatting\n function formatNumber(number, format, culture) {\n culture = getCulture(culture);\n\n var numberFormat = culture.numberFormat,\n decimal = numberFormat[POINT],\n precision = numberFormat.decimals,\n pattern = numberFormat.pattern[0],\n literals = [],\n symbol,\n isCurrency, isPercent,\n customPrecision,\n formatAndPrecision,\n negative = number < 0,\n integer,\n fraction,\n integerLength,\n fractionLength,\n replacement = EMPTY,\n value = EMPTY,\n idx,\n length,\n ch,\n hasGroup,\n hasNegativeFormat,\n decimalIndex,\n sharpIndex,\n zeroIndex,\n hasZero, hasSharp,\n percentIndex,\n currencyIndex,\n startZeroIndex,\n start = -1,\n end;\n\n //return empty string if no number\n if (number === undefined$1) {\n return EMPTY;\n }\n\n if (!isFinite(number)) {\n return number;\n }\n\n //if no format then return number.toString() or number.toLocaleString() if culture.name is not defined\n if (!format) {\n return culture.name.length ? number.toLocaleString() : number.toString();\n }\n\n formatAndPrecision = standardFormatRegExp.exec(format);\n\n // standard formatting\n if (formatAndPrecision) {\n format = formatAndPrecision[1].toLowerCase();\n\n isCurrency = format === \"c\";\n isPercent = format === \"p\";\n\n if (isCurrency || isPercent) {\n //get specific number format information if format is currency or percent\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n decimal = numberFormat[POINT];\n precision = numberFormat.decimals;\n symbol = numberFormat.symbol;\n pattern = numberFormat.pattern[negative ? 0 : 1];\n }\n\n customPrecision = formatAndPrecision[2];\n\n if (customPrecision) {\n precision = +customPrecision;\n }\n\n //return number in exponential format\n if (format === \"e\") {\n var exp = customPrecision ? number.toExponential(precision) : number.toExponential(); // toExponential() and toExponential(undefined) differ in FF #653438.\n\n return exp.replace(POINT, numberFormat[POINT]);\n }\n\n // multiply if format is percent\n if (isPercent) {\n number *= 100;\n }\n\n number = round(number, precision);\n negative = number < 0;\n number = number.split(POINT);\n\n integer = number[0];\n fraction = number[1];\n\n //exclude \"-\" if number is negative.\n if (negative) {\n integer = integer.substring(1);\n }\n\n value = groupInteger(integer, 0, integer.length, numberFormat);\n\n if (fraction) {\n value += decimal + fraction;\n }\n\n if (format === \"n\" && !negative) {\n return value;\n }\n\n number = EMPTY;\n\n for (idx = 0, length = pattern.length; idx < length; idx++) {\n ch = pattern.charAt(idx);\n\n if (ch === \"n\") {\n number += value;\n } else if (ch === \"$\" || ch === \"%\") {\n number += symbol;\n } else {\n number += ch;\n }\n }\n\n return number;\n }\n\n //custom formatting\n //\n //separate format by sections.\n\n if (format.indexOf(\"'\") > -1 || format.indexOf(\"\\\"\") > -1 || format.indexOf(\"\\\\\") > -1) {\n format = format.replace(literalRegExp, function(match) {\n var quoteChar = match.charAt(0).replace(\"\\\\\", \"\"),\n literal = match.slice(1).replace(quoteChar, \"\");\n\n literals.push(literal);\n\n return PLACEHOLDER;\n });\n }\n\n format = format.split(\";\");\n if (negative && format[1]) {\n //get negative format\n format = format[1];\n hasNegativeFormat = true;\n } else if (number === 0 && format[2]) {\n //format for zeros\n format = format[2];\n if (format.indexOf(SHARP) == -1 && format.indexOf(ZERO) == -1) {\n //return format if it is string constant.\n return format;\n }\n } else {\n format = format[0];\n }\n\n percentIndex = format.indexOf(\"%\");\n currencyIndex = format.indexOf(\"$\");\n\n isPercent = percentIndex != -1;\n isCurrency = currencyIndex != -1;\n\n //multiply number if the format has percent\n if (isPercent) {\n number *= 100;\n }\n\n if (isCurrency && format[currencyIndex - 1] === \"\\\\\") {\n format = format.split(\"\\\\\").join(\"\");\n isCurrency = false;\n }\n\n if (isCurrency || isPercent) {\n //get specific number format information if format is currency or percent\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n decimal = numberFormat[POINT];\n precision = numberFormat.decimals;\n symbol = numberFormat.symbol;\n }\n\n hasGroup = format.indexOf(COMMA) > -1;\n if (hasGroup) {\n format = format.replace(commaRegExp, EMPTY);\n }\n\n decimalIndex = format.indexOf(POINT);\n length = format.length;\n\n if (decimalIndex != -1) {\n fraction = number.toString().split(\"e\");\n if (fraction[1]) {\n fraction = round(number, Math.abs(fraction[1]));\n } else {\n fraction = fraction[0];\n }\n fraction = fraction.split(POINT)[1] || EMPTY;\n zeroIndex = format.lastIndexOf(ZERO) - decimalIndex;\n sharpIndex = format.lastIndexOf(SHARP) - decimalIndex;\n hasZero = zeroIndex > -1;\n hasSharp = sharpIndex > -1;\n idx = fraction.length;\n\n if (!hasZero && !hasSharp) {\n format = format.substring(0, decimalIndex) + format.substring(decimalIndex + 1);\n length = format.length;\n decimalIndex = -1;\n idx = 0;\n }\n\n if (hasZero && zeroIndex > sharpIndex) {\n idx = zeroIndex;\n } else if (sharpIndex > zeroIndex) {\n if (hasSharp && idx > sharpIndex) {\n var rounded = round(number, sharpIndex, negative);\n\n while (rounded.charAt(rounded.length - 1) === ZERO && sharpIndex > 0 && sharpIndex > zeroIndex) {\n sharpIndex--;\n\n rounded = round(number, sharpIndex, negative);\n }\n\n idx = sharpIndex;\n } else if (hasZero && idx < zeroIndex) {\n idx = zeroIndex;\n }\n }\n }\n\n number = round(number, idx, negative);\n\n sharpIndex = format.indexOf(SHARP);\n startZeroIndex = zeroIndex = format.indexOf(ZERO);\n\n //define the index of the first digit placeholder\n if (sharpIndex == -1 && zeroIndex != -1) {\n start = zeroIndex;\n } else if (sharpIndex != -1 && zeroIndex == -1) {\n start = sharpIndex;\n } else {\n start = sharpIndex > zeroIndex ? zeroIndex : sharpIndex;\n }\n\n sharpIndex = format.lastIndexOf(SHARP);\n zeroIndex = format.lastIndexOf(ZERO);\n\n //define the index of the last digit placeholder\n if (sharpIndex == -1 && zeroIndex != -1) {\n end = zeroIndex;\n } else if (sharpIndex != -1 && zeroIndex == -1) {\n end = sharpIndex;\n } else {\n end = sharpIndex > zeroIndex ? sharpIndex : zeroIndex;\n }\n\n if (start == length) {\n end = start;\n }\n\n if (start != -1) {\n value = number.toString().split(POINT);\n integer = value[0];\n fraction = value[1] || EMPTY;\n\n integerLength = integer.length;\n fractionLength = fraction.length;\n\n if (negative && (number * -1) >= 0) {\n negative = false;\n }\n\n number = format.substring(0, start);\n\n if (negative && !hasNegativeFormat) {\n number += \"-\";\n }\n\n for (idx = start; idx < length; idx++) {\n ch = format.charAt(idx);\n\n if (decimalIndex == -1) {\n if (end - idx < integerLength) {\n number += integer;\n break;\n }\n } else {\n if (zeroIndex != -1 && zeroIndex < idx) {\n replacement = EMPTY;\n }\n\n if ((decimalIndex - idx) <= integerLength && decimalIndex - idx > -1) {\n number += integer;\n idx = decimalIndex;\n }\n\n if (decimalIndex === idx) {\n number += (fraction ? decimal : EMPTY) + fraction;\n idx += end - decimalIndex + 1;\n continue;\n }\n }\n\n if (ch === ZERO) {\n number += ch;\n replacement = ch;\n } else if (ch === SHARP) {\n number += replacement;\n }\n }\n\n if (hasGroup) {\n number = groupInteger(number, start + (negative && !hasNegativeFormat ? 1 : 0), Math.max(end, (integerLength + start)), numberFormat);\n }\n\n if (end >= start) {\n number += format.substring(end + 1);\n }\n\n //replace symbol placeholders\n if (isCurrency || isPercent) {\n value = EMPTY;\n for (idx = 0, length = number.length; idx < length; idx++) {\n ch = number.charAt(idx);\n value += (ch === \"$\" || ch === \"%\") ? symbol : ch;\n }\n number = value;\n }\n\n length = literals.length;\n\n if (length) {\n for (idx = 0; idx < length; idx++) {\n number = number.replace(PLACEHOLDER, literals[idx]);\n }\n }\n }\n\n return number;\n }\n\n var groupInteger = function(number, start, end, numberFormat) {\n var decimalIndex = number.indexOf(numberFormat[POINT]);\n var groupSizes = numberFormat.groupSize.slice();\n var groupSize = groupSizes.shift();\n var integer, integerLength;\n var idx, parts, value;\n var newGroupSize;\n\n end = decimalIndex !== -1 ? decimalIndex : end + 1;\n\n integer = number.substring(start, end);\n integerLength = integer.length;\n\n if (integerLength >= groupSize) {\n idx = integerLength;\n parts = [];\n\n while (idx > -1) {\n value = integer.substring(idx - groupSize, idx);\n if (value) {\n parts.push(value);\n }\n idx -= groupSize;\n newGroupSize = groupSizes.shift();\n groupSize = newGroupSize !== undefined$1 ? newGroupSize : groupSize;\n\n if (groupSize === 0) {\n if (idx > 0) {\n parts.push(integer.substring(0, idx));\n }\n break;\n }\n }\n\n integer = parts.reverse().join(numberFormat[COMMA]);\n number = number.substring(0, start) + integer + number.substring(end);\n }\n\n return number;\n };\n\n var round = function(value, precision, negative) {\n precision = precision || 0;\n\n value = value.toString().split('e');\n value = Math.round(+(value[0] + 'e' + (value[1] ? (+value[1] + precision) : precision)));\n\n if (negative) {\n value = -value;\n }\n\n value = value.toString().split('e');\n value = +(value[0] + 'e' + (value[1] ? (+value[1] - precision) : -precision));\n\n return value.toFixed(Math.min(precision, 20));\n };\n\n var toString = function(value, fmt, culture) {\n if (fmt) {\n if (objectToString.call(value) === \"[object Date]\") {\n return formatDate(value, fmt, culture);\n } else if (typeof value === NUMBER) {\n return formatNumber(value, fmt, culture);\n }\n }\n\n return value !== undefined$1 ? value : \"\";\n };\n\n kendo.format = function(fmt) {\n var values = arguments;\n\n return fmt.replace(formatRegExp, function(match, index, placeholderFormat) {\n var value = values[parseInt(index, 10) + 1];\n\n return toString(value, placeholderFormat ? placeholderFormat.substring(1) : \"\");\n });\n };\n\n kendo._extractFormat = function(format) {\n if (format.slice(0,3) === \"{0:\") {\n format = format.slice(3, format.length - 1);\n }\n\n return format;\n };\n\n kendo._activeElement = function() {\n try {\n return document.activeElement;\n } catch (e) {\n return document.documentElement.activeElement;\n }\n };\n\n kendo._round = round;\n kendo._outerWidth = function(element, includeMargin, calculateFromHidden) {\n element = $(element);\n if (calculateFromHidden) {\n return getHiddenDimensions(element, includeMargin).width;\n }\n\n return $(element).outerWidth(includeMargin || false) || 0;\n };\n kendo._outerHeight = function(element, includeMargin, calculateFromHidden) {\n element = $(element);\n if (calculateFromHidden) {\n return getHiddenDimensions(element, includeMargin).height;\n }\n\n return $(element).outerHeight(includeMargin || false) || 0;\n };\n kendo.toString = toString;\n })();\n\n\n (function() {\n var nonBreakingSpaceRegExp = /\\u00A0/g,\n spaceRegExp = /\\s/g,\n exponentRegExp = /[eE][\\-+]?[0-9]+/,\n shortTimeZoneRegExp = /[+|\\-]\\d{1,2}/,\n longTimeZoneRegExp = /[+|\\-]\\d{1,2}:?\\d{2}/,\n dateRegExp = /^\\/Date\\((.*?)\\)\\/$/,\n offsetRegExp = /[+-]\\d*/,\n FORMATS_SEQUENCE = [ [], [ \"G\", \"g\", \"F\" ], [ \"D\", \"d\", \"y\", \"m\", \"T\", \"t\" ] ],\n STANDARD_FORMATS = [\n [\n \"yyyy-MM-ddTHH:mm:ss.fffffffzzz\",\n \"yyyy-MM-ddTHH:mm:ss.fffffff\",\n \"yyyy-MM-ddTHH:mm:ss.fffzzz\",\n \"yyyy-MM-ddTHH:mm:ss.fff\",\n \"ddd MMM dd yyyy HH:mm:ss\",\n \"yyyy-MM-ddTHH:mm:sszzz\",\n \"yyyy-MM-ddTHH:mmzzz\",\n \"yyyy-MM-ddTHH:mmzz\",\n \"yyyy-MM-ddTHH:mm:ss\",\n \"yyyy-MM-dd HH:mm:ss\",\n \"yyyy/MM/dd HH:mm:ss\"\n ], [\n \"yyyy-MM-ddTHH:mm\",\n \"yyyy-MM-dd HH:mm\",\n \"yyyy/MM/dd HH:mm\"\n ], [\n \"yyyy/MM/dd\",\n \"yyyy-MM-dd\",\n \"HH:mm:ss\",\n \"HH:mm\"\n ]\n ],\n numberRegExp = {\n 2: /^\\d{1,2}/,\n 3: /^\\d{1,3}/,\n 4: /^\\d{4}/,\n exact3: /^\\d{3}/\n },\n objectToString = {}.toString;\n\n function outOfRange(value, start, end) {\n return !(value >= start && value <= end);\n }\n\n function designatorPredicate(designator) {\n return designator.charAt(0);\n }\n\n function mapDesignators(designators) {\n return $.map(designators, designatorPredicate);\n }\n\n //if date's day is different than the typed one - adjust\n function adjustDST(date, hours) {\n if (!hours && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n }\n }\n\n function lowerArray(data) {\n var idx = 0,\n length = data.length,\n array = [];\n\n for (; idx < length; idx++) {\n array[idx] = (data[idx] + \"\").toLowerCase();\n }\n\n return array;\n }\n\n function lowerLocalInfo(localInfo) {\n var newLocalInfo = {}, property;\n\n for (property in localInfo) {\n newLocalInfo[property] = lowerArray(localInfo[property]);\n }\n\n return newLocalInfo;\n }\n\n function unpadZero(value) {\n return value.replace(/^0*/, '');\n }\n\n function parseExact(value, format, culture, strict, shouldUnpadZeros) {\n if (!value) {\n return null;\n }\n\n var lookAhead = function(match) {\n var i = 0;\n while (format[idx] === match) {\n i++;\n idx++;\n }\n if (i > 0) {\n idx -= 1;\n }\n return i;\n },\n longestDesignatorLength = (designators) => Array.from(designators).sort((a, b) => b.length - a.length)[0].length,\n getNumber = function(size) {\n var rg, match, part = \"\";\n if (size === 2) {\n for (let i = 0; i <= size; i++) {\n part += value[valueIdx + i] || \"\";\n }\n }\n\n // If the value comes in the form of 021, 022, 023 we must trim the leading zero otherwise the result will be 02 in all three cases instead of 21/22/23.\n if (shouldUnpadZeros && part.match(numberRegExp.exact3) && Number.isInteger(Number(part)) && Number(part) > 0) {\n part = unpadZero(part);\n } else {\n part = value.substr(valueIdx, size);\n }\n\n rg = numberRegExp[size] || new RegExp('^\\\\d{1,' + size + '}');\n match = part.match(rg);\n\n if (match) {\n match = match[0];\n valueIdx += match.length;\n return parseInt(match, 10);\n }\n return null;\n },\n getIndexByName = function(names, lower, subLength) {\n var i = 0,\n length = names.length,\n name, nameLength,\n matchLength = 0,\n matchIdx = 0,\n subValue;\n\n for (; i < length; i++) {\n name = names[i];\n nameLength = name.length;\n subValue = value.substr(valueIdx, subLength || nameLength); // The `subLength` is part of the appendDesignatorsToCultures logic.\n\n if (lower) {\n subValue = subValue.toLowerCase();\n }\n\n if (subValue == name && nameLength > matchLength) {\n matchLength = nameLength;\n matchIdx = i;\n }\n }\n\n if (matchLength) {\n valueIdx += matchLength;\n return matchIdx + 1;\n }\n\n return null;\n },\n checkLiteral = function() {\n var result = false;\n if (value.charAt(valueIdx) === format[idx]) {\n valueIdx++;\n result = true;\n }\n return result;\n },\n calendar = culture.calendars.standard,\n year = null,\n month = null,\n day = null,\n hours = null,\n minutes = null,\n seconds = null,\n milliseconds = null,\n idx = 0,\n valueIdx = 0,\n literal = false,\n date = new Date(),\n twoDigitYearMax = calendar.twoDigitYearMax || 2029,\n defaultYear = date.getFullYear(),\n ch, count, length, pattern,\n pmHour, UTC, matches,\n amDesignators, pmDesignators,\n hoursOffset, minutesOffset,\n hasTime, match;\n\n if (!format) {\n format = \"d\"; //shord date format\n }\n\n //if format is part of the patterns get real format\n pattern = calendar.patterns[format];\n if (pattern) {\n format = pattern;\n }\n\n format = format.split(\"\");\n length = format.length;\n\n for (; idx < length; idx++) {\n ch = format[idx];\n\n if (literal) {\n if (ch === \"'\") {\n literal = false;\n } else {\n checkLiteral();\n }\n } else {\n if (ch === \"d\") {\n count = lookAhead(\"d\");\n if (!calendar._lowerDays) {\n calendar._lowerDays = lowerLocalInfo(calendar.days);\n }\n\n if (day !== null && count > 2) {\n continue;\n }\n\n day = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerDays[count == 3 ? \"namesAbbr\" : \"names\"], true);\n\n if (day === null || outOfRange(day, 1, 31)) {\n return null;\n }\n } else if (ch === \"M\") {\n count = lookAhead(\"M\");\n if (!calendar._lowerMonths) {\n calendar._lowerMonths = lowerLocalInfo(calendar.months);\n }\n month = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerMonths[count == 3 ? 'namesAbbr' : 'names'], true);\n\n if (month === null || outOfRange(month, 1, 12)) {\n return null;\n }\n month -= 1; //because month is zero based\n } else if (ch === \"y\") {\n count = lookAhead(\"y\");\n year = getNumber(count);\n\n if (year === null) {\n return null;\n }\n\n if (count == 2) {\n if (typeof twoDigitYearMax === \"string\") {\n twoDigitYearMax = defaultYear + parseInt(twoDigitYearMax, 10);\n }\n\n year = (defaultYear - defaultYear % 100) + year;\n if (year > twoDigitYearMax) {\n year -= 100;\n }\n }\n } else if (ch === \"h\" ) {\n lookAhead(\"h\");\n hours = getNumber(2);\n if (hours == 12) {\n hours = 0;\n }\n if (hours === null || outOfRange(hours, 0, 11)) {\n return null;\n }\n } else if (ch === \"H\") {\n lookAhead(\"H\");\n hours = getNumber(2);\n if (hours === null || outOfRange(hours, 0, 23)) {\n return null;\n }\n } else if (ch === \"m\") {\n lookAhead(\"m\");\n minutes = getNumber(2);\n if (minutes === null || outOfRange(minutes, 0, 59)) {\n return null;\n }\n } else if (ch === \"s\") {\n lookAhead(\"s\");\n seconds = getNumber(2);\n if (seconds === null || outOfRange(seconds, 0, 59)) {\n return null;\n }\n } else if (ch === \"f\") {\n count = lookAhead(\"f\");\n\n match = value.substr(valueIdx, count).match(numberRegExp[3]);\n milliseconds = getNumber(count); //move value index position\n\n if (milliseconds !== null) {\n milliseconds = parseFloat(\"0.\" + match[0], 10);\n milliseconds = kendo._round(milliseconds, 3);\n milliseconds *= 1000;\n }\n\n if (milliseconds === null || outOfRange(milliseconds, 0, 999)) {\n return null;\n }\n\n } else if (ch === \"t\") {\n count = lookAhead(\"t\");\n amDesignators = calendar.AM;\n pmDesignators = calendar.PM;\n\n if (count === 1) {\n amDesignators = mapDesignators(amDesignators);\n pmDesignators = mapDesignators(pmDesignators);\n }\n\n pmHour = getIndexByName(pmDesignators, false, longestDesignatorLength(pmDesignators));\n if (!pmHour && !getIndexByName(amDesignators, false, longestDesignatorLength(amDesignators))) {\n return null;\n }\n }\n else if (ch === \"z\") {\n UTC = true;\n count = lookAhead(\"z\");\n\n if (value.substr(valueIdx, 1) === \"Z\") {\n checkLiteral();\n continue;\n }\n\n matches = value.substr(valueIdx, 6)\n .match(count > 2 ? longTimeZoneRegExp : shortTimeZoneRegExp);\n\n if (!matches) {\n return null;\n }\n\n matches = matches[0].split(\":\");\n\n hoursOffset = matches[0];\n minutesOffset = matches[1];\n\n if (!minutesOffset && hoursOffset.length > 3) { //(+|-)[hh][mm] format is used\n valueIdx = hoursOffset.length - 2;\n minutesOffset = hoursOffset.substring(valueIdx);\n hoursOffset = hoursOffset.substring(0, valueIdx);\n }\n\n hoursOffset = parseInt(hoursOffset, 10);\n if (outOfRange(hoursOffset, -12, 13)) {\n return null;\n }\n\n if (count > 2) {\n minutesOffset = matches[0][0] + minutesOffset;\n minutesOffset = parseInt(minutesOffset, 10);\n if (isNaN(minutesOffset) || outOfRange(minutesOffset, -59, 59)) {\n return null;\n }\n }\n } else if (ch === \"'\") {\n literal = true;\n checkLiteral();\n } else if (!checkLiteral()) {\n return null;\n }\n }\n }\n\n // if more characters follow, assume wrong format\n // https://github.com/telerik/kendo-ui-core/issues/3476\n if (strict && !/^\\s*$/.test(value.substr(valueIdx))) {\n return null;\n }\n\n hasTime = hours !== null || minutes !== null || seconds || null;\n\n if (year === null && month === null && day === null && hasTime) {\n year = defaultYear;\n month = date.getMonth();\n day = date.getDate();\n } else {\n if (year === null) {\n year = defaultYear;\n }\n\n if (day === null) {\n day = 1;\n }\n }\n\n if (pmHour && hours < 12) {\n hours += 12;\n }\n\n if (UTC) {\n if (hoursOffset) {\n hours += -hoursOffset;\n }\n\n if (minutesOffset) {\n minutes += -minutesOffset;\n }\n\n value = new Date(Date.UTC(year, month, day, hours, minutes, seconds, milliseconds));\n } else {\n value = new Date(year, month, day, hours, minutes, seconds, milliseconds);\n adjustDST(value, hours);\n }\n\n if (year < 100) {\n value.setFullYear(year);\n }\n\n if (value.getDate() !== day && UTC === undefined$1) {\n return null;\n }\n\n return value;\n }\n\n function parseMicrosoftFormatOffset(offset) {\n var sign = offset.substr(0, 1) === \"-\" ? -1 : 1;\n\n offset = offset.substring(1);\n offset = (parseInt(offset.substr(0, 2), 10) * 60) + parseInt(offset.substring(2), 10);\n\n return sign * offset;\n }\n\n function getDefaultFormats(culture) {\n var length = math.max(FORMATS_SEQUENCE.length, STANDARD_FORMATS.length);\n var calendar = culture.calendar || culture.calendars.standard;\n var patterns = calendar.patterns;\n var cultureFormats, formatIdx, idx;\n var formats = [];\n\n for (idx = 0; idx < length; idx++) {\n cultureFormats = FORMATS_SEQUENCE[idx];\n for (formatIdx = 0; formatIdx < cultureFormats.length; formatIdx++) {\n formats.push(patterns[cultureFormats[formatIdx]]);\n }\n formats = formats.concat(STANDARD_FORMATS[idx]);\n }\n\n return formats;\n }\n\n function internalParseDate(value, formats, culture, strict, shouldUnpadZeros) {\n if (objectToString.call(value) === \"[object Date]\") {\n return value;\n }\n\n var idx = 0;\n var date = null;\n var length;\n var tzoffset;\n\n if (value && value.indexOf(\"/D\") === 0) {\n date = dateRegExp.exec(value);\n if (date) {\n date = date[1];\n tzoffset = offsetRegExp.exec(date.substring(1));\n\n date = new Date(parseInt(date, 10));\n\n if (tzoffset) {\n tzoffset = parseMicrosoftFormatOffset(tzoffset[0]);\n date = kendo.timezone.apply(date, 0);\n date = kendo.timezone.convert(date, 0, -1 * tzoffset);\n }\n\n return date;\n }\n }\n\n culture = kendo.getCulture(culture);\n\n if (!formats) {\n formats = getDefaultFormats(culture);\n }\n\n formats = isArray(formats) ? formats : [formats];\n length = formats.length;\n\n for (; idx < length; idx++) {\n date = parseExact(value, formats[idx], culture, strict, shouldUnpadZeros);\n if (date) {\n return date;\n }\n }\n\n return date;\n }\n\n kendo.parseDate = function(value, formats, culture, shouldUnpadZeros) {\n return internalParseDate(value, formats, culture, false, shouldUnpadZeros);\n };\n\n kendo.parseExactDate = function(value, formats, culture) {\n return internalParseDate(value, formats, culture, true);\n };\n\n kendo.parseInt = function(value, culture) {\n var result = kendo.parseFloat(value, culture);\n if (result) {\n result = result | 0;\n }\n return result;\n };\n\n kendo.parseFloat = function(value, culture, format) {\n if (!value && value !== 0) {\n return null;\n }\n\n if (typeof value === NUMBER) {\n return value;\n }\n\n value = value.toString();\n culture = kendo.getCulture(culture);\n\n var number = culture.numberFormat,\n percent = number.percent,\n currency = number.currency,\n symbol = currency.symbol,\n percentSymbol = percent.symbol,\n negative = value.indexOf(\"-\"),\n parts, isPercent;\n\n //handle exponential number\n if (exponentRegExp.test(value)) {\n value = parseFloat(value.replace(number[\".\"], \".\"));\n if (isNaN(value)) {\n value = null;\n }\n return value;\n }\n\n if (negative > 0) {\n return null;\n } else {\n negative = negative > -1;\n }\n\n if (value.indexOf(symbol) > -1 || (format && format.toLowerCase().indexOf(\"c\") > -1)) {\n number = currency;\n parts = number.pattern[0].replace(\"$\", symbol).split(\"n\");\n if (value.indexOf(parts[0]) > -1 && value.indexOf(parts[1]) > -1) {\n value = value.replace(parts[0], \"\").replace(parts[1], \"\");\n negative = true;\n }\n } else if (value.indexOf(percentSymbol) > -1) {\n isPercent = true;\n number = percent;\n symbol = percentSymbol;\n }\n\n value = value.replace(\"-\", \"\")\n .replace(symbol, \"\")\n .replace(nonBreakingSpaceRegExp, \" \")\n .split(number[\",\"].replace(nonBreakingSpaceRegExp, \" \")).join(\"\")\n .replace(spaceRegExp, \"\")\n .replace(number[\".\"], \".\");\n\n value = parseFloat(value);\n\n if (isNaN(value)) {\n value = null;\n } else if (negative) {\n value *= -1;\n }\n\n if (value && isPercent) {\n value /= 100;\n }\n\n return value;\n };\n })();\n\n function getShadows(element) {\n var shadow = element.css(\"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 };\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) {\n var value;\n\n if (option.indexOf(\"data\") === 0) {\n option = option.substring(4);\n option = option.charAt(0).toLowerCase() + option.substring(1);\n }\n\n option = option.replace(dashRegExp, \"-$1\");\n value = element.getAttribute(\"data-\" + kendo.ns + option);\n\n if (value === null) {\n value = undefined$1;\n } else if (value === \"null\") {\n value = null;\n } else if (value === \"true\") {\n value = true;\n } else if (value === \"false\") {\n value = false;\n } else if (numberRegExp.test(value) && option != \"mask\" && option != \"format\") {\n value = parseFloat(value);\n } else if (jsonRegExp.test(value) && !jsonFormatRegExp.test(value)) {\n try {\n value = JSON.parse(value);\n } catch (error) {\n // Fallback to function eval for legacy reason - non CSP compliant\n value = new Function(\"return (\" + value + \")\")();\n }\n }\n\n return value;\n }\n\n function parseOptions(element, options, source) {\n var result = {},\n option,\n value,\n role = element.getAttribute(\"data-\" + kendo.ns + \"role\");\n\n for (option in options) {\n value = parseOption(element, option);\n\n if (value !== undefined$1) {\n\n if (templateRegExp.test(option) && role != \"drawer\") {\n if (typeof value === \"string\") {\n if ($(\"#\" + value).length) {\n value = kendo.template($(\"#\" + value).html());\n } else if (source) {\n value = kendo.template(source[value]);\n }\n } else {\n value = element.getAttribute(option);\n }\n }\n\n result[option] = value;\n }\n }\n\n return result;\n }\n\n kendo.initWidget = function(element, options, roles) {\n var result,\n option,\n widget,\n idx,\n length,\n role,\n value,\n dataSource,\n fullPath,\n widgetKeyRegExp;\n\n // Preserve backwards compatibility with (element, options, namespace) signature, where namespace was kendo.ui\n if (!roles) {\n roles = kendo.ui.roles;\n } else if (roles.roles) {\n roles = roles.roles;\n }\n\n element = element.nodeType ? element : element[0];\n\n role = element.getAttribute(\"data-\" + kendo.ns + \"role\");\n\n if (!role) {\n return;\n }\n\n fullPath = role.indexOf(\".\") === -1;\n\n // look for any widget that may be already instantiated based on this role.\n // The prefix used is unknown, hence the regexp\n //\n\n if (fullPath) {\n widget = roles[role];\n } else { // full namespace path - like kendo.ui.Widget\n widget = kendo.getter(role)(window);\n }\n\n var data = $(element).data(),\n widgetKey = widget ? \"kendo\" + widget.fn.options.prefix + widget.fn.options.name : \"\";\n\n if (fullPath) {\n widgetKeyRegExp = new RegExp(\"^kendo.*\" + role + \"$\", \"i\");\n } else { // full namespace path - like kendo.ui.Widget\n widgetKeyRegExp = new RegExp(\"^\" + widgetKey + \"$\", \"i\");\n }\n\n for (var key in data) {\n if (key.match(widgetKeyRegExp)) {\n // we have detected a widget of the same kind - save its reference, we will set its options\n if (key === widgetKey) {\n result = data[key];\n } else {\n return data[key];\n }\n }\n }\n\n if (!widget) {\n return;\n }\n\n dataSource = parseOption(element, \"dataSource\");\n\n options = $.extend({}, parseOptions(element, $.extend({}, widget.fn.options, widget.fn.defaults) ), options);\n\n if (dataSource) {\n if (typeof dataSource === STRING) {\n options.dataSource = kendo.getter(dataSource)(window);\n } else {\n options.dataSource = dataSource;\n }\n }\n\n for (idx = 0, length = widget.fn.events.length; idx < length; idx++) {\n option = widget.fn.events[idx];\n\n value = parseOption(element, option);\n\n if (value !== undefined$1) {\n options[option] = kendo.getter(value)(window);\n }\n }\n\n if (!result) {\n result = new widget(element, options);\n } else if (!$.isEmptyObject(options)) {\n result.setOptions(options);\n }\n\n return result;\n };\n\n kendo.rolesFromNamespaces = function(namespaces) {\n var roles = [],\n idx,\n length;\n\n if (!namespaces[0]) {\n namespaces = [kendo.ui, kendo.dataviz.ui];\n }\n\n for (idx = 0, length = namespaces.length; idx < length; idx ++) {\n roles[idx] = namespaces[idx].roles;\n }\n\n return extend.apply(null, [{}].concat(roles.reverse()));\n };\n\n kendo.init = function(element) {\n var roles = kendo.rolesFromNamespaces(slice.call(arguments, 1));\n\n $(element).find(\"[data-\" + kendo.ns + \"role]\").addBack().each(function() {\n kendo.initWidget(this, {}, roles);\n });\n };\n\n kendo.destroy = function(element) {\n $(element).find(\"[data-\" + kendo.ns + \"role]\").addBack().each(function() {\n var data = $(this).data();\n\n for (var key in data) {\n if (key.indexOf(\"kendo\") === 0 && typeof data[key].destroy === FUNCTION) {\n data[key].destroy();\n }\n }\n });\n };\n\n function containmentComparer(a, b) {\n return $.contains(a, b) ? -1 : 1;\n }\n\n function resizableWidget() {\n var widget = $(this);\n return ($.inArray(widget.attr(\"data-\" + kendo.ns + \"role\"), [\"slider\", \"rangeslider\", \"breadcrumb\"]) > -1) || widget.is(\":visible\");\n }\n\n kendo.resize = function(element, force) {\n var widgets = $(element).find(\"[data-\" + kendo.ns + \"role]\").addBack().filter(resizableWidget);\n\n if (!widgets.length) {\n return;\n }\n\n // sort widgets based on their parent-child relation\n var widgetsArray = $.makeArray(widgets);\n widgetsArray.sort(containmentComparer);\n\n // resize widgets\n $.each(widgetsArray, function() {\n var widget = kendo.widgetInstance($(this));\n if (widget) {\n widget.resize(force);\n }\n });\n };\n\n kendo.parseOptions = parseOptions;\n\n extend(kendo.ui, {\n Widget: Widget,\n DataBoundWidget: DataBoundWidget,\n roles: {},\n progress: function(container, toggle, options) {\n var mask = container.find(\".k-loading-mask\"),\n support = kendo.support,\n browser = support.browser,\n isRtl, leftRight, webkitCorrection, containerScrollLeft, cssClass;\n\n options = $.extend({}, {\n width: \"100%\",\n height: \"100%\",\n top: container.scrollTop(),\n opacity: false\n }, options);\n\n cssClass = options.opacity ? 'k-loading-mask k-opaque' : 'k-loading-mask';\n\n if (toggle) {\n if (!mask.length) {\n isRtl = support.isRtl(container);\n leftRight = isRtl ? \"right\" : \"left\";\n containerScrollLeft = kendo.scrollLeft(container);\n webkitCorrection = browser.webkit ? (!isRtl ? 0 : container[0].scrollWidth - container.width() - 2 * containerScrollLeft) : 0;\n\n mask = $(kendo.format(\"
{1}
\", cssClass, kendo.ui.progress.messages.loading))\n .width(options.width).height(options.height)\n .css(\"top\", options.top)\n .css(leftRight, Math.abs(containerScrollLeft) + webkitCorrection)\n .prependTo(container);\n }\n } else if (mask) {\n mask.remove();\n }\n },\n plugin: function(widget, register, prefix) {\n var name = widget.fn.options.name,\n getter;\n\n register = register || kendo.ui;\n prefix = prefix || \"\";\n\n register[name] = widget;\n\n register.roles[name.toLowerCase()] = widget;\n\n getter = \"getKendo\" + prefix + name;\n name = \"kendo\" + prefix + name;\n\n var widgetEntry = { name: name, widget: widget, prefix: prefix || \"\" };\n kendo.widgets.push(widgetEntry);\n\n for (var i = 0, len = kendo._widgetRegisteredCallbacks.length; i < len; i++) {\n kendo._widgetRegisteredCallbacks[i](widgetEntry);\n }\n\n $.fn[name] = function(options) {\n var value = this,\n args;\n\n if (typeof options === STRING) {\n args = slice.call(arguments, 1);\n\n this.each(function() {\n var widget = $.data(this, name),\n method,\n result;\n\n if (!widget) {\n throw new Error(kendo.format(\"Cannot call method '{0}' of {1} before it is initialized\", options, name));\n }\n\n method = widget[options];\n\n if (typeof method !== FUNCTION) {\n throw new Error(kendo.format(\"Cannot find method '{0}' of {1}\", options, name));\n }\n\n result = method.apply(widget, args);\n\n if (result !== undefined$1) {\n value = result;\n return false;\n }\n });\n } else {\n this.each(function() {\n return new widget(this, options);\n });\n }\n\n return value;\n };\n\n $.fn[name].widget = widget;\n\n $.fn[getter] = function() {\n return this.data(name);\n };\n }\n });\n\n kendo.ui.progress.messages = {\n loading: \"Loading...\"\n };\n\n var ContainerNullObject = { bind: function() { return this; }, nullObject: true, options: {} };\n\n var MobileWidget = Widget.extend({\n init: function(element, options) {\n Widget.fn.init.call(this, element, options);\n this.element.autoApplyNS();\n this.wrapper = this.element;\n this.element.addClass(\"km-widget\");\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n this.element.kendoDestroy();\n },\n\n options: {\n prefix: \"Mobile\"\n },\n\n events: [],\n\n view: function() {\n var viewElement = this.element.closest(kendo.roleSelector(\"view splitview modalview drawer\"));\n return kendo.widgetInstance(viewElement, kendo.mobile.ui) || ContainerNullObject;\n },\n\n viewHasNativeScrolling: function() {\n var view = this.view();\n return view && view.options.useNativeScrolling;\n },\n\n container: function() {\n var element = this.element.closest(kendo.roleSelector(\"view layout modalview drawer splitview\"));\n return kendo.widgetInstance(element.eq(0), kendo.mobile.ui) || ContainerNullObject;\n }\n });\n\n extend(kendo.mobile, {\n init: function(element) {\n kendo.init(element, kendo.mobile.ui, kendo.ui, kendo.dataviz.ui);\n },\n\n roles: {},\n\n ui: {\n Widget: MobileWidget,\n DataBoundWidget: DataBoundWidget.extend(MobileWidget.prototype),\n roles: {},\n plugin: function(widget) {\n kendo.ui.plugin(widget, kendo.mobile.ui, \"Mobile\");\n }\n }\n });\n\n deepExtend(kendo.dataviz, {\n init: function(element) {\n kendo.init(element, kendo.dataviz.ui);\n },\n ui: {\n roles: {},\n themes: {},\n views: [],\n plugin: function(widget) {\n kendo.ui.plugin(widget, kendo.dataviz.ui);\n }\n },\n roles: {}\n });\n\n kendo.touchScroller = function(elements, options) {\n // return the first touch scroller\n if (!options) { options = {}; }\n\n options.useNative = true;\n\n return $(elements).map(function(idx, element) {\n element = $(element);\n if (support.kineticScrollNeeded && kendo.mobile.ui.Scroller && !element.data(\"kendoMobileScroller\")) {\n element.kendoMobileScroller(options);\n return element.data(\"kendoMobileScroller\");\n } else {\n return false;\n }\n })[0];\n };\n\n kendo.preventDefault = function(e) {\n e.preventDefault();\n };\n\n kendo.widgetInstance = function(element, suites) {\n var role = element.data(kendo.ns + \"role\"),\n widgets = [], i, length,\n elementData = element.data(\"kendoView\");\n\n if (role) {\n // HACK!!! mobile view scroller widgets are instantiated on data-role=\"content\" elements. We need to discover them when resizing.\n if (role === \"content\") {\n role = \"scroller\";\n }\n\n // kendo.View is not a ui plugin\n\n if (role === \"view\" && elementData) {\n return elementData;\n }\n\n if (suites) {\n if (suites[0]) {\n for (i = 0, length = suites.length; i < length; i ++) {\n widgets.push(suites[i].roles[role]);\n }\n } else {\n widgets.push(suites.roles[role]);\n }\n }\n else {\n widgets = [ kendo.ui.roles[role], kendo.dataviz.ui.roles[role], kendo.mobile.ui.roles[role] ];\n }\n\n if (role.indexOf(\".\") >= 0) {\n widgets = [ kendo.getter(role)(window) ];\n }\n\n for (i = 0, length = widgets.length; i < length; i ++) {\n var widget = widgets[i];\n if (widget) {\n var instance = element.data(\"kendo\" + widget.fn.options.prefix + widget.fn.options.name);\n if (instance) {\n return instance;\n }\n }\n }\n }\n };\n\n kendo.onResize = function(callback) {\n var handler = callback;\n if (support.mobileOS.android) {\n handler = function() { setTimeout(callback, 600); };\n }\n\n $(window).on(support.resize, handler);\n return handler;\n };\n\n kendo.unbindResize = function(callback) {\n $(window).off(support.resize, callback);\n };\n\n kendo.attrValue = function(element, key) {\n return element.data(kendo.ns + key);\n };\n\n kendo.days = {\n Sunday: 0,\n Monday: 1,\n Tuesday: 2,\n Wednesday: 3,\n Thursday: 4,\n Friday: 5,\n Saturday: 6\n };\n\n function focusable(element, isTabIndexNotNaN) {\n var nodeName = element.nodeName.toLowerCase();\n\n return (/input|select|textarea|button|object/.test(nodeName) ?\n !element.disabled :\n nodeName === \"a\" ?\n element.href || isTabIndexNotNaN :\n isTabIndexNotNaN\n ) &&\n visible(element);\n }\n\n function visible(element) {\n return $.expr.pseudos.visible(element) &&\n !$(element).parents().addBack().filter(function() {\n return $.css(this,\"visibility\") === \"hidden\";\n }).length;\n }\n\n $.extend($.expr.pseudos, {\n kendoFocusable: function(element) {\n var idx = $.attr(element, \"tabindex\");\n return focusable(element, !isNaN(idx) && idx > -1);\n }\n });\n\n var MOUSE_EVENTS = [\"mousedown\", \"mousemove\", \"mouseenter\", \"mouseleave\", \"mouseover\", \"mouseout\", \"mouseup\", \"click\"];\n var EXCLUDE_BUST_CLICK_SELECTOR = \"label, input, [data-rel=external]\";\n\n var MouseEventNormalizer = {\n setupMouseMute: function() {\n var idx = 0,\n length = MOUSE_EVENTS.length,\n element = document.documentElement;\n\n if (MouseEventNormalizer.mouseTrap || !support.eventCapture) {\n return;\n }\n\n MouseEventNormalizer.mouseTrap = true;\n\n MouseEventNormalizer.bustClick = false;\n MouseEventNormalizer.captureMouse = false;\n\n var handler = function(e) {\n if (MouseEventNormalizer.captureMouse) {\n if (e.type === \"click\") {\n if (MouseEventNormalizer.bustClick && !$(e.target).is(EXCLUDE_BUST_CLICK_SELECTOR)) {\n e.preventDefault();\n e.stopPropagation();\n }\n } else {\n e.stopPropagation();\n }\n }\n };\n\n for (; idx < length; idx++) {\n element.addEventListener(MOUSE_EVENTS[idx], handler, true);\n }\n },\n\n muteMouse: function(e) {\n MouseEventNormalizer.captureMouse = true;\n if (e.data.bustClick) {\n MouseEventNormalizer.bustClick = true;\n }\n clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\n },\n\n unMuteMouse: function() {\n clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\n MouseEventNormalizer.mouseTrapTimeoutID = setTimeout(function() {\n MouseEventNormalizer.captureMouse = false;\n MouseEventNormalizer.bustClick = false;\n }, 400);\n }\n };\n\n var eventMap = {\n down: \"touchstart mousedown\",\n move: \"mousemove touchmove\",\n up: \"mouseup touchend touchcancel\",\n cancel: \"mouseleave touchcancel\"\n };\n\n if (support.touch && (support.mobileOS.ios || support.mobileOS.android)) {\n eventMap = {\n down: \"touchstart\",\n move: \"touchmove\",\n up: \"touchend touchcancel\",\n cancel: \"touchcancel\"\n };\n } else if (support.pointers) {\n eventMap = {\n down: \"pointerdown\",\n move: \"pointermove\",\n up: \"pointerup\",\n cancel: \"pointercancel pointerleave\"\n };\n } else if (support.msPointers) {\n eventMap = {\n down: \"MSPointerDown\",\n move: \"MSPointerMove\",\n up: \"MSPointerUp\",\n cancel: \"MSPointerCancel MSPointerLeave\"\n };\n }\n\n if (support.msPointers && !(\"onmspointerenter\" in window)) { // IE10\n // Create MSPointerEnter/MSPointerLeave events using mouseover/out and event-time checks\n $.each({\n MSPointerEnter: \"MSPointerOver\",\n MSPointerLeave: \"MSPointerOut\"\n }, function( orig, fix ) {\n $.event.special[ orig ] = {\n delegateType: fix,\n bindType: fix,\n\n handle: function( event ) {\n var ret,\n target = this,\n related = event.relatedTarget,\n handleObj = event.handleObj;\n\n // For mousenter/leave call the handler if related is outside the target.\n // NB: No relatedTarget if the mouse left/entered the browser window\n if ( !related || (related !== target && !$.contains( target, related )) ) {\n event.type = handleObj.origType;\n ret = handleObj.handler.apply( this, arguments );\n event.type = fix;\n }\n return ret;\n }\n };\n });\n }\n\n\n var getEventMap = function(e) { return (eventMap[e] || e); },\n eventRegEx = /([^ ]+)/g;\n\n kendo.applyEventMap = function(events, ns) {\n events = events.replace(eventRegEx, getEventMap);\n\n if (ns) {\n events = events.replace(eventRegEx, \"$1.\" + ns);\n }\n\n return events;\n };\n\n kendo.keyDownHandler = function(e, widget) {\n var events = widget._events.kendoKeydown;\n\n if (!events) {\n return true;\n }\n\n events = events.slice();\n e.sender = widget;\n e.preventKendoKeydown = false;\n for (var idx = 0, length = events.length; idx < length; idx++) {\n events[idx].call(widget, e);\n }\n\n return !e.preventKendoKeydown;\n };\n\n var on = $.fn.on;\n\n function kendoJQuery(selector, context) {\n return new kendoJQuery.fn.init(selector, context);\n }\n\n noDepricateExtend(true, kendoJQuery, $);\n\n kendoJQuery.fn = kendoJQuery.prototype = new $();\n\n kendoJQuery.fn.constructor = kendoJQuery;\n\n kendoJQuery.fn.init = function(selector, context) {\n if (context && context instanceof $ && !(context instanceof kendoJQuery)) {\n context = kendoJQuery(context);\n }\n\n return $.fn.init.call(this, selector, context, rootjQuery);\n };\n\n kendoJQuery.fn.init.prototype = kendoJQuery.fn;\n\n var rootjQuery = kendoJQuery(document);\n\n extend(kendoJQuery.fn, {\n handler: function(handler) {\n this.data(\"handler\", handler);\n return this;\n },\n\n autoApplyNS: function(ns) {\n this.data(\"kendoNS\", ns || kendo.guid());\n return this;\n },\n\n on: function() {\n var that = this,\n ns = that.data(\"kendoNS\");\n\n // support for event map signature\n if (arguments.length === 1) {\n return on.call(that, arguments[0]);\n }\n\n var context = that,\n args = slice.call(arguments);\n\n if (typeof args[args.length - 1] === UNDEFINED) {\n args.pop();\n }\n\n var callback = args[args.length - 1],\n events = kendo.applyEventMap(args[0], ns);\n\n // setup mouse trap\n if (support.mouseAndTouchPresent && events.search(/mouse|click/) > -1 && this[0] !== document.documentElement) {\n MouseEventNormalizer.setupMouseMute();\n\n var selector = args.length === 2 ? null : args[1],\n bustClick = events.indexOf(\"click\") > -1 && events.indexOf(\"touchend\") > -1;\n\n on.call(this,\n {\n touchstart: MouseEventNormalizer.muteMouse,\n touchend: MouseEventNormalizer.unMuteMouse\n },\n selector,\n {\n bustClick: bustClick\n });\n }\n\n if (arguments[0].indexOf(\"keydown\") !== -1 && args[1] && args[1].options) {\n args[0] = events;\n var widget = args[1];\n var keyDownCallBack = args[args.length - 1];\n args[args.length - 1] = function(e) {\n if (kendo.keyDownHandler(e, widget)) {\n return keyDownCallBack.apply(this, [e]);\n }\n };\n on.apply(that, args);\n return that;\n }\n\n if (typeof callback === STRING) {\n context = that.data(\"handler\");\n callback = context[callback];\n\n args[args.length - 1] = function(e) {\n callback.call(context, e);\n };\n }\n\n args[0] = events;\n\n on.apply(that, args);\n\n return that;\n },\n\n kendoDestroy: function(ns) {\n ns = ns || this.data(\"kendoNS\");\n\n if (ns) {\n this.off(\".\" + ns);\n }\n\n return this;\n }\n });\n\n kendo.jQuery = kendoJQuery;\n kendo.eventMap = eventMap;\n\n kendo.timezone = (function() {\n var months = { Jan: 0, Feb: 1, Mar: 2, Apr: 3, May: 4, Jun: 5, Jul: 6, Aug: 7, Sep: 8, Oct: 9, Nov: 10, Dec: 11 };\n var days = { Sun: 0, Mon: 1, Tue: 2, Wed: 3, Thu: 4, Fri: 5, Sat: 6 };\n\n function ruleToDate(year, rule) {\n var date;\n var targetDay;\n var ourDay;\n var month = rule[3];\n var on = rule[4];\n var time = rule[5];\n var cache = rule[8];\n\n if (!cache) {\n rule[8] = cache = {};\n }\n\n if (cache[year]) {\n return cache[year];\n }\n\n if (!isNaN(on)) {\n date = new Date(Date.UTC(year, months[month], on, time[0], time[1], time[2], 0));\n } else if (on.indexOf(\"last\") === 0) {\n date = new Date(Date.UTC(year, months[month] + 1, 1, time[0] - 24, time[1], time[2], 0));\n\n targetDay = days[on.substr(4, 3)];\n ourDay = date.getUTCDay();\n\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay - (targetDay > ourDay ? 7 : 0));\n } else if (on.indexOf(\">=\") >= 0) {\n date = new Date(Date.UTC(year, months[month], on.substr(5), time[0], time[1], time[2], 0));\n\n targetDay = days[on.substr(0, 3)];\n ourDay = date.getUTCDay();\n\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay + (targetDay < ourDay ? 7 : 0));\n } else if (on.indexOf(\"<=\") >= 0) {\n date = new Date(Date.UTC(year, months[month], on.substr(5), time[0], time[1], time[2], 0));\n\n targetDay = days[on.substr(0, 3)];\n ourDay = date.getUTCDay();\n\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay - (targetDay > ourDay ? 7 : 0));\n }\n\n return cache[year] = date;\n }\n\n function findRule(utcTime, rules, zone) {\n rules = rules[zone];\n\n if (!rules) {\n var time = zone.split(\":\");\n var offset = 0;\n\n if (time.length > 1) {\n offset = time[0] * 60 + Number(time[1]);\n }\n\n return [-1000000, 'max', '-', 'Jan', 1, [0, 0, 0], offset, '-'];\n }\n\n var year = new Date(utcTime).getUTCFullYear();\n\n rules = jQuery.grep(rules, function(rule) {\n var from = rule[0];\n var to = rule[1];\n\n return from <= year && (to >= year || (from == year && to == \"only\") || to == \"max\");\n });\n\n rules.push(utcTime);\n\n rules.sort(function(a, b) {\n if (typeof a != \"number\") {\n a = Number(ruleToDate(year, a));\n }\n\n if (typeof b != \"number\") {\n b = Number(ruleToDate(year, b));\n }\n\n return a - b;\n });\n\n var rule = rules[jQuery.inArray(utcTime, rules) - 1] || rules[rules.length - 1];\n\n return isNaN(rule) ? rule : null;\n }\n\n function findZone(utcTime, zones, timezone) {\n var zoneRules = zones[timezone];\n\n if (typeof zoneRules === \"string\") {\n zoneRules = zones[zoneRules];\n }\n\n if (!zoneRules) {\n throw new Error('Timezone \"' + timezone + '\" is either incorrect, or kendo.timezones.min.js is not included.');\n }\n\n for (var idx = zoneRules.length - 1; idx >= 0; idx--) {\n var until = zoneRules[idx][3];\n\n if (until && utcTime > until) {\n break;\n }\n }\n\n var zone = zoneRules[idx + 1];\n\n if (!zone) {\n throw new Error('Timezone \"' + timezone + '\" not found on ' + utcTime + \".\");\n }\n\n return zone;\n }\n\n function zoneAndRule(utcTime, zones, rules, timezone) {\n if (typeof utcTime != NUMBER) {\n utcTime = Date.UTC(utcTime.getFullYear(), utcTime.getMonth(),\n utcTime.getDate(), utcTime.getHours(), utcTime.getMinutes(),\n utcTime.getSeconds(), utcTime.getMilliseconds());\n }\n\n var zone = findZone(utcTime, zones, timezone);\n\n return {\n zone: zone,\n rule: findRule(utcTime, rules, zone[1])\n };\n }\n\n function offset(utcTime, timezone) {\n if (timezone == \"Etc/UTC\" || timezone == \"Etc/GMT\") {\n return 0;\n }\n\n var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n var zone = info.zone;\n var rule = info.rule;\n\n return kendo.parseFloat(rule ? zone[0] - rule[6] : zone[0]);\n }\n\n function abbr(utcTime, timezone) {\n var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n var zone = info.zone;\n var rule = info.rule;\n\n var base = zone[2];\n\n if (base.indexOf(\"/\") >= 0) {\n return base.split(\"/\")[rule && +rule[6] ? 1 : 0];\n } else if (base.indexOf(\"%s\") >= 0) {\n return base.replace(\"%s\", (!rule || rule[7] == \"-\") ? '' : rule[7]);\n }\n\n return base;\n }\n\n function convert(date, fromOffset, toOffset) {\n var tempToOffset = toOffset;\n var diff;\n\n if (typeof fromOffset == STRING) {\n fromOffset = this.offset(date, fromOffset);\n }\n\n if (typeof toOffset == STRING) {\n toOffset = this.offset(date, toOffset);\n }\n\n var fromLocalOffset = date.getTimezoneOffset();\n\n date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\n\n var toLocalOffset = date.getTimezoneOffset();\n\n if (typeof tempToOffset == STRING) {\n tempToOffset = this.offset(date, tempToOffset);\n }\n\n diff = (toLocalOffset - fromLocalOffset) + (toOffset - tempToOffset);\n\n return new Date(date.getTime() + diff * 60000);\n }\n\n function apply(date, timezone) {\n return this.convert(date, date.getTimezoneOffset(), timezone);\n }\n\n function remove(date, timezone) {\n return this.convert(date, timezone, date.getTimezoneOffset());\n }\n\n function toLocalDate(time) {\n return this.apply(new Date(time), \"Etc/UTC\");\n }\n\n return {\n zones: {},\n rules: {},\n offset: offset,\n convert: convert,\n apply: apply,\n remove: remove,\n abbr: abbr,\n toLocalDate: toLocalDate\n };\n })();\n\n kendo.date = (function() {\n var MS_PER_MINUTE = 60000,\n MS_PER_DAY = 86400000;\n\n function adjustDST(date, hours) {\n if (hours === 0 && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n return true;\n }\n\n return false;\n }\n\n function setDayOfWeek(date, day, dir) {\n var hours = date.getHours();\n\n dir = dir || 1;\n day = ((day - date.getDay()) + (7 * dir)) % 7;\n\n date.setDate(date.getDate() + day);\n adjustDST(date, hours);\n }\n\n function dayOfWeek(date, day, dir) {\n date = new Date(date);\n setDayOfWeek(date, day, dir);\n return date;\n }\n\n function firstDayOfMonth(date) {\n return new Date(\n date.getFullYear(),\n date.getMonth(),\n 1\n );\n }\n\n function lastDayOfMonth(date) {\n var last = new Date(date.getFullYear(), date.getMonth() + 1, 0),\n first = firstDayOfMonth(date),\n timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n\n if (timeOffset) {\n last.setHours(first.getHours() + (timeOffset / 60));\n }\n\n return last;\n }\n\n function firstDayOfYear(date) {\n return new Date(date.getFullYear(), 0, 1);\n }\n\n function lastDayOfYear(date) {\n return new Date(date.getFullYear(), 11, 31);\n }\n\n function moveDateToWeekStart(date, weekStartDay) {\n if (weekStartDay !== 1) {\n return addDays(dayOfWeek(date, weekStartDay, -1), 4);\n }\n\n return addDays(date, (4 - (date.getDay() || 7)));\n }\n\n function calcWeekInYear(date, weekStartDay) {\n var firstWeekInYear = new Date(date.getFullYear(), 0, 1, -6);\n\n var newDate = moveDateToWeekStart(date, weekStartDay);\n\n var diffInMS = newDate.getTime() - firstWeekInYear.getTime();\n\n var days = Math.floor(diffInMS / MS_PER_DAY);\n\n return 1 + Math.floor(days / 7);\n }\n\n function weekInYear(date, weekStartDay) {\n if (weekStartDay === undefined$1) {\n weekStartDay = kendo.culture().calendar.firstDay;\n }\n\n var prevWeekDate = addDays(date, -7);\n var nextWeekDate = addDays(date, 7);\n\n var weekNumber = calcWeekInYear(date, weekStartDay);\n\n if (weekNumber === 0) {\n return calcWeekInYear(prevWeekDate, weekStartDay) + 1;\n }\n\n if (weekNumber === 53 && calcWeekInYear(nextWeekDate, weekStartDay) > 1) {\n return 1;\n }\n\n return weekNumber;\n }\n\n function getDate(date) {\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n adjustDST(date, 0);\n return date;\n }\n\n function toUtcTime(date) {\n return Date.UTC(date.getFullYear(), date.getMonth(),\n date.getDate(), date.getHours(), date.getMinutes(),\n date.getSeconds(), date.getMilliseconds());\n }\n\n function getMilliseconds(date) {\n return toInvariantTime(date).getTime() - getDate(toInvariantTime(date));\n }\n\n function isInTimeRange(value, min, max) {\n var msMin = getMilliseconds(min),\n msMax = getMilliseconds(max),\n msValue;\n\n if (!value || msMin == msMax) {\n return true;\n }\n\n if (min >= max) {\n max += MS_PER_DAY;\n }\n\n msValue = getMilliseconds(value);\n\n if (msMin > msValue) {\n msValue += MS_PER_DAY;\n }\n\n if (msMax < msMin) {\n msMax += MS_PER_DAY;\n }\n\n return msValue >= msMin && msValue <= msMax;\n }\n\n function isInDateRange(value, min, max) {\n var msMin = min.getTime(),\n msMax = max.getTime(),\n msValue;\n\n if (msMin >= msMax) {\n msMax += MS_PER_DAY;\n }\n\n msValue = value.getTime();\n\n return msValue >= msMin && msValue <= msMax;\n }\n\n function addDays(date, offset) {\n var hours = date.getHours();\n date = new Date(date);\n\n setTime(date, offset * MS_PER_DAY);\n adjustDST(date, hours);\n return date;\n }\n\n function setTime(date, milliseconds, ignoreDST) {\n var offset = date.getTimezoneOffset();\n var difference;\n\n date.setTime(date.getTime() + milliseconds);\n\n if (!ignoreDST) {\n difference = date.getTimezoneOffset() - offset;\n date.setTime(date.getTime() + difference * MS_PER_MINUTE);\n }\n }\n\n function setHours(date, time) {\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());\n adjustDST(date, time.getHours());\n return date;\n }\n\n function today() {\n return getDate(new Date());\n }\n\n function isToday(date) {\n return getDate(date).getTime() == today().getTime();\n }\n\n function toInvariantTime(date) {\n var staticDate = new Date(1980, 1, 1, 0, 0, 0);\n\n if (date) {\n staticDate.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n\n return staticDate;\n }\n\n function addYear(date, offset) {\n var currentDate = new Date(date);\n\n return new Date(currentDate.setFullYear(currentDate.getFullYear() + offset));\n }\n\n function addLiteral(parts, value) {\n var lastPart = parts[parts.length - 1];\n if (lastPart && lastPart.type === \"LITERAL\") {\n lastPart.pattern += value;\n } else {\n parts.push({\n type: \"literal\",\n pattern: value\n });\n }\n }\n\n function isHour12(pattern) {\n return pattern === \"h\" || pattern === \"K\";\n }\n\n function dateNameType(formatLength) {\n var nameType;\n if (formatLength <= 3) {\n nameType = \"abbreviated\";\n } else if (formatLength === 4) {\n nameType = \"wide\";\n } else if (formatLength === 5) {\n nameType = \"narrow\";\n }\n\n return nameType;\n }\n\n function startsWith(text, searchString, position) {\n position = position || 0;\n return text.indexOf(searchString, position) === position;\n }\n\n function datePattern(format, info) {\n var calendar = info.calendar;\n var result;\n if (typeof format === \"string\") {\n if (calendar.patterns[format]) {\n result = calendar.patterns[format];\n } else {\n result = format;\n }\n }\n\n if (!result) {\n result = calendar.patterns.d;\n }\n\n return result;\n }\n\n function splitDateFormat(format) {\n var info = kendo.culture();\n var pattern = datePattern(format, info).replaceAll(\"dddd\", \"EEEE\").replaceAll(\"ddd\", \"EEE\").replace(\"tt\", \"aa\");\n var parts = [];\n var dateFormatRegExp = /d{1,2}|E{1,6}|e{1,6}|c{3,6}|c{1}|M{1,5}|L{1,5}|y{1,4}|H{1,2}|h{1,2}|k{1,2}|K{1,2}|m{1,2}|a{1,5}|s{1,2}|S{1,3}|t{1,2}|z{1,4}|Z{1,5}|x{1,5}|X{1,5}|G{1,5}|q{1,5}|Q{1,5}|\"[^\"]*\"|'[^']*'/g;\n\n var lastIndex = dateFormatRegExp.lastIndex = 0;\n var match = dateFormatRegExp.exec(pattern);\n var specifier;\n var type;\n var part;\n var names;\n var minLength;\n var patternLength;\n\n while (match) {\n var value = match[0];\n\n if (lastIndex < match.index) {\n addLiteral(parts, pattern.substring(lastIndex, match.index));\n }\n\n if (startsWith(value, '\"') || startsWith(value, \"'\")) {\n addLiteral(parts, value);\n } else {\n specifier = value[0];\n type = DATE_FIELD_MAP[specifier];\n part = {\n type: type,\n pattern: value\n };\n\n if (type === \"hour\") {\n part.hour12 = isHour12(value);\n }\n\n names = NAME_TYPES[type];\n\n if (names) {\n minLength = typeof names.minLength === \"number\" ? names.minLength : names.minLength[specifier];\n patternLength = value.length;\n\n if (patternLength >= minLength && value !== \"aa\") {\n part.names = {\n type: names.type,\n nameType: dateNameType(patternLength),\n standAlone: names.standAlone === specifier\n };\n }\n }\n\n parts.push(part);\n }\n\n lastIndex = dateFormatRegExp.lastIndex;\n match = dateFormatRegExp.exec(pattern);\n }\n\n if (lastIndex < pattern.length) {\n addLiteral(parts, pattern.substring(lastIndex));\n }\n\n return parts;\n }\n\n function dateFormatNames(options) {\n let { type, nameType } = options;\n const info = kendo.culture();\n if (nameType === \"wide\") {\n nameType = \"names\";\n }\n if (nameType === \"abbreviated\") {\n nameType = \"namesAbbr\";\n }\n if (nameType === \"narrow\") {\n nameType = \"namesShort\";\n }\n let result = info.calendar[type][nameType];\n if (!result) {\n result = info.calendar[type][\"name\"];\n }\n return result;\n }\n\n function dateFieldName(options) {\n const info = kendo.culture();\n const dateFields = info.calendar.dateFields;\n const fieldNameInfo = dateFields[options.type] || {};\n\n return fieldNameInfo[options.nameType];\n }\n\n return {\n adjustDST: adjustDST,\n dayOfWeek: dayOfWeek,\n setDayOfWeek: setDayOfWeek,\n getDate: getDate,\n isInDateRange: isInDateRange,\n isInTimeRange: isInTimeRange,\n isToday: isToday,\n nextDay: function(date) {\n return addDays(date, 1);\n },\n previousDay: function(date) {\n return addDays(date, -1);\n },\n toUtcTime: toUtcTime,\n MS_PER_DAY: MS_PER_DAY,\n MS_PER_HOUR: 60 * MS_PER_MINUTE,\n MS_PER_MINUTE: MS_PER_MINUTE,\n setTime: setTime,\n setHours: setHours,\n addDays: addDays,\n today: today,\n toInvariantTime: toInvariantTime,\n firstDayOfMonth: firstDayOfMonth,\n splitDateFormat: splitDateFormat,\n dateFieldName: dateFieldName,\n dateFormatNames: dateFormatNames,\n lastDayOfMonth: lastDayOfMonth,\n weekInYear: weekInYear,\n getMilliseconds: getMilliseconds,\n firstDayOfYear: firstDayOfYear,\n lastDayOfYear: lastDayOfYear,\n nextYear: function(date) {\n return addYear(date, 1);\n },\n previousYear: function(date) {\n return addYear(date, -1);\n }\n };\n })();\n\n\n kendo.stripWhitespace = function(element) {\n if (document.createNodeIterator) {\n var iterator = document.createNodeIterator(element, NodeFilter.SHOW_TEXT, function(node) {\n return node.parentNode == element ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n }, false);\n\n while (iterator.nextNode()) {\n if (iterator.referenceNode && !iterator.referenceNode.textContent.trim()) {\n iterator.referenceNode.parentNode.removeChild(iterator.referenceNode);\n }\n }\n } else { // IE7/8 support\n for (var i = 0; i < element.childNodes.length; i++) {\n var child = element.childNodes[i];\n\n if (child.nodeType == 3 && !/\\S/.test(child.nodeValue)) {\n element.removeChild(child);\n i--;\n }\n\n if (child.nodeType == 1) {\n kendo.stripWhitespace(child);\n }\n }\n }\n };\n\n var animationFrame = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.oRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function(callback) { setTimeout(callback, 1000 / 60); };\n\n kendo.animationFrame = function(callback) {\n animationFrame.call(window, callback);\n };\n\n var animationQueue = [];\n\n kendo.queueAnimation = function(callback) {\n animationQueue[animationQueue.length] = callback;\n if (animationQueue.length === 1) {\n kendo.runNextAnimation();\n }\n };\n\n kendo.runNextAnimation = function() {\n kendo.animationFrame(function() {\n if (animationQueue[0]) {\n animationQueue.shift()();\n if (animationQueue[0]) {\n kendo.runNextAnimation();\n }\n }\n });\n };\n\n kendo.parseQueryStringParams = function(url) {\n var queryString = url.split('?')[1] || \"\",\n params = {},\n paramParts = queryString.split(/&|=/),\n length = paramParts.length,\n idx = 0;\n\n for (; idx < length; idx += 2) {\n if (paramParts[idx] !== \"\") {\n params[decodeURIComponent(paramParts[idx])] = decodeURIComponent(paramParts[idx + 1]);\n }\n }\n\n return params;\n };\n\n kendo.elementUnderCursor = function(e) {\n if (typeof e.x.client != \"undefined\") {\n return document.elementFromPoint(e.x.client, e.y.client);\n }\n };\n\n kendo.wheelDeltaY = function(jQueryEvent) {\n var e = jQueryEvent.originalEvent,\n deltaY = e.wheelDeltaY,\n delta;\n\n if (e.wheelDelta) { // Webkit and IE\n if (deltaY === undefined$1 || deltaY) { // IE does not have deltaY, thus always scroll (horizontal scrolling is treated as vertical)\n delta = e.wheelDelta;\n }\n } else if (e.detail && e.axis === e.VERTICAL_AXIS) { // Firefox and Opera\n delta = (-e.detail) * 10;\n }\n\n return delta;\n };\n\n kendo.throttle = function(fn, delay) {\n var timeout;\n var lastExecTime = 0;\n\n if (!delay || delay <= 0) {\n return fn;\n }\n\n var throttled = function() {\n var that = this;\n var elapsed = +new Date() - lastExecTime;\n var args = arguments;\n\n function exec() {\n fn.apply(that, args);\n lastExecTime = +new Date();\n }\n\n // first execution\n if (!lastExecTime) {\n return exec();\n }\n\n if (timeout) {\n clearTimeout(timeout);\n }\n\n if (elapsed > delay) {\n exec();\n } else {\n timeout = setTimeout(exec, delay - elapsed);\n }\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n };\n\n return throttled;\n };\n\n\n kendo.caret = function(element, start, end) {\n var rangeElement;\n var isPosition = start !== undefined$1;\n\n if (end === undefined$1) {\n end = start;\n }\n\n if (element[0]) {\n element = element[0];\n }\n\n if (isPosition && element.disabled) {\n return;\n }\n\n try {\n if (element.selectionStart !== undefined$1) {\n if (isPosition) {\n element.focus();\n var mobile = support.mobileOS;\n if (mobile.wp || mobile.android) {// without the timeout the caret is at the end of the input\n setTimeout(function() { element.setSelectionRange(start, end); }, 0);\n }\n else {\n element.setSelectionRange(start, end);\n }\n } else {\n start = [element.selectionStart, element.selectionEnd];\n }\n } else if (document.selection) {\n if ($(element).is(\":visible\")) {\n element.focus();\n }\n\n rangeElement = element.createTextRange();\n\n if (isPosition) {\n rangeElement.collapse(true);\n rangeElement.moveStart(\"character\", start);\n rangeElement.moveEnd(\"character\", end - start);\n rangeElement.select();\n } else {\n var rangeDuplicated = rangeElement.duplicate(),\n selectionStart, selectionEnd;\n\n rangeElement.moveToBookmark(document.selection.createRange().getBookmark());\n rangeDuplicated.setEndPoint('EndToStart', rangeElement);\n selectionStart = rangeDuplicated.text.length;\n selectionEnd = selectionStart + rangeElement.text.length;\n\n start = [selectionStart, selectionEnd];\n }\n }\n } catch (e) {\n /* element is not focused or it is not in the DOM */\n start = [];\n }\n\n return start;\n };\n\n kendo.antiForgeryTokens = function() {\n var tokens = { },\n csrf_token = $(\"meta[name=csrf-token],meta[name=_csrf]\").attr(\"content\"),\n csrf_param = $(\"meta[name=csrf-param],meta[name=_csrf_header]\").attr(\"content\");\n\n $(\"input[name^='__RequestVerificationToken']\").each(function() {\n tokens[this.name] = this.value;\n });\n\n if (csrf_param !== undefined$1 && csrf_token !== undefined$1) {\n tokens[csrf_param] = csrf_token;\n }\n\n return tokens;\n };\n\n kendo.cycleForm = function(form) {\n var firstElement = form.find(\"input, .k-widget, .k-dropdownlist, .k-combobox\").first();\n var lastElement = form.find(\"button, .k-button\").last();\n\n function focus(el) {\n var widget = kendo.widgetInstance(el);\n\n if (widget && widget.focus) {\n widget.focus();\n } else {\n el.trigger(\"focus\");\n }\n }\n\n lastElement.on(\"keydown\", function(e) {\n if (e.keyCode == kendo.keys.TAB && !e.shiftKey) {\n e.preventDefault();\n focus(firstElement);\n }\n });\n\n firstElement.on(\"keydown\", function(e) {\n if (e.keyCode == kendo.keys.TAB && e.shiftKey) {\n e.preventDefault();\n focus(lastElement);\n }\n });\n };\n\n kendo.focusElement = function(element) {\n var scrollTopPositions = [];\n var scrollableParents = element.parentsUntil(\"body\")\n .filter(function(index, element) {\n var computedStyle = kendo.getComputedStyles(element, [\"overflow\"]);\n return computedStyle.overflow !== \"visible\";\n })\n .add(window);\n\n scrollableParents.each(function(index, parent) {\n scrollTopPositions[index] = $(parent).scrollTop();\n });\n\n try {\n //The setActive method does not cause the document to scroll to the active object in the current page\n element[0].setActive();\n } catch (e) {\n element[0].focus();\n }\n\n scrollableParents.each(function(index, parent) {\n $(parent).scrollTop(scrollTopPositions[index]);\n });\n };\n\n kendo.focusNextElement = function() {\n if (document.activeElement) {\n var focussable = $(\":kendoFocusable\");\n var index = focussable.index(document.activeElement);\n\n if (index > -1) {\n var nextElement = focussable[index + 1] || focussable[0];\n nextElement.focus();\n }\n }\n };\n\n kendo.trim = function(value) {\n if (!!value) {\n return value.toString().trim();\n } else {\n return \"\";\n }\n };\n\n kendo.getWidgetFocusableElement = function(element) {\n var nextFocusable = element.closest(\":kendoFocusable\"),\n widgetInstance = kendo.widgetInstance(element),\n target;\n\n if (nextFocusable.length) {\n target = nextFocusable;\n } else if (widgetInstance) {\n target = widgetInstance.options.name === 'Editor' ?\n $(widgetInstance.body) :\n widgetInstance.wrapper.find(\":kendoFocusable\").first();\n } else {\n target = element;\n }\n\n return target;\n };\n\n kendo.addAttribute = function(element, attribute, value) {\n var current = element.attr(attribute) || \"\";\n\n if (current.indexOf(value) < 0) {\n element.attr(attribute, (current + \" \" + value).trim());\n }\n };\n\n kendo.removeAttribute = function(element, attribute, value) {\n var current = element.attr(attribute) || \"\";\n\n element.attr(attribute, current.replace(value, \"\").trim());\n };\n\n kendo.toggleAttribute = function(element, attribute, value) {\n var current = element.attr(attribute) || \"\";\n\n if (current.indexOf(value) < 0) {\n kendo.addAttribute(element, attribute, value);\n } else {\n kendo.removeAttribute(element, attribute, value);\n }\n };\n\n kendo.matchesMedia = function(mediaQuery) {\n var media = kendo._bootstrapToMedia(mediaQuery) || mediaQuery;\n return support.matchMedia && window.matchMedia(media).matches;\n };\n\n kendo._bootstrapToMedia = function(bootstrapMedia) {\n return {\n \"xs\": \"(max-width: 576px)\",\n \"sm\": \"(min-width: 576px)\",\n \"md\": \"(min-width: 768px)\",\n \"lg\": \"(min-width: 992px)\",\n \"xl\": \"(min-width: 1200px)\"\n }[bootstrapMedia];\n };\n\n kendo.fileGroupMap = {\n audio: [\".aif\", \".iff\", \".m3u\", \".m4a\", \".mid\", \".mp3\", \".mpa\", \".wav\", \".wma\", \".ogg\", \".wav\", \".wma\", \".wpl\"],\n video: [\".3g2\", \".3gp\", \".avi\", \".asf\", \".flv\", \".m4u\", \".rm\", \".h264\", \".m4v\", \".mkv\", \".mov\", \".mp4\", \".mpg\",\n \".rm\", \".swf\", \".vob\", \".wmv\"],\n image: [\".ai\", \".dds\", \".heic\", \".jpe\", \"jfif\", \".jif\", \".jp2\", \".jps\", \".eps\", \".bmp\", \".gif\", \".jpeg\",\n \".jpg\", \".png\", \".ps\", \".psd\", \".svg\", \".svgz\", \".tif\", \".tiff\"],\n txt: [\".doc\", \".docx\", \".log\", \".pages\", \".tex\", \".wpd\", \".wps\", \".odt\", \".rtf\", \".text\", \".txt\", \".wks\"],\n presentation: [\".key\", \".odp\", \".pps\", \".ppt\", \".pptx\"],\n data: [\".xlr\", \".xls\", \".xlsx\"],\n programming: [\".tmp\", \".bak\", \".msi\", \".cab\", \".cpl\", \".cur\", \".dll\", \".dmp\", \".drv\", \".icns\", \".ico\", \".link\",\n \".sys\", \".cfg\", \".ini\", \".asp\", \".aspx\", \".cer\", \".csr\", \".css\", \".dcr\", \".htm\", \".html\", \".js\",\n \".php\", \".rss\", \".xhtml\"],\n pdf: [\".pdf\"],\n config: [\".apk\", \".app\", \".bat\", \".cgi\", \".com\", \".exe\", \".gadget\", \".jar\", \".wsf\"],\n zip: [\".7z\", \".cbr\", \".gz\", \".sitx\", \".arj\", \".deb\", \".pkg\", \".rar\", \".rpm\", \".tar.gz\", \".z\", \".zip\", \".zipx\"],\n \"disc-image\": [\".dmg\", \".iso\", \".toast\", \".vcd\", \".bin\", \".cue\", \".mdf\"]\n };\n\n kendo.getFileGroup = function(extension, withPrefix) {\n var fileTypeMap = kendo.fileGroupMap;\n var groups = Object.keys(fileTypeMap);\n var type = \"file\";\n\n if (extension === undefined$1 || !extension.length) {\n return type;\n }\n\n for (var i = 0; i < groups.length; i += 1) {\n var extensions = fileTypeMap[groups[i]];\n\n if (extensions.indexOf(extension.toLowerCase()) > -1) {\n return withPrefix ? \"file-\" + groups[i] : groups[i];\n }\n }\n\n return type;\n };\n\n kendo.getFileSizeMessage = function(size) {\n var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n\n if (size === 0) {\n return '0 Byte';\n }\n\n var i = parseInt(Math.floor(Math.log(size) / Math.log(1024)), 10);\n return Math.round(size / Math.pow(1024, i), 2) + ' ' + sizes[i];\n };\n\n kendo.selectorFromClasses = function(classes) {\n return \".\" + classes.split(\" \").join(\".\");\n };\n\n // Standardized Properties and CSS classes\n\n var themeColorValues = ['base', 'primary', 'secondary', 'tertiary', 'inherit', 'info', 'success', 'warning', 'error', 'dark', 'light', 'inverse'];\n var fillValues = ['solid', 'outline', 'flat'];\n //var postitionValues = ['edge', 'outside', 'inside'];\n var shapeValues = ['rectangle', 'square'];\n var sizeValues = [ ['small', 'sm'], ['medium', 'md'], ['large', 'lg'] ];\n var roundedValues = [ ['small', 'sm'], ['medium', 'md'], ['large', 'lg'] ];\n //var alignValues = [ ['top start', 'top-start'], ['top end', 'top-end'], ['bottom start', 'bottom-start'], ['bottom end', 'bottom-end'] ];\n var positionModeValues = [ 'fixed', 'static', 'sticky', 'absolute' ];\n var resizeValues = [ ['both', 'resize'], ['horizontal', 'resize-x'], ['vertical', 'resize-y'] ];\n var overflowValues = [ 'auto', 'hidden', 'visible', 'scroll', 'clip' ];\n var layoutFlowValues = [ ['vertical', '!k-flex-col'], ['horizontal', '!k-flex-row'] ];\n\n kendo.cssProperties = (function() {\n var defaultValues = {},\n propertyDictionary = {};\n\n function registerPrefix(widget, prefix) {\n var dict = kendo.cssProperties.propertyDictionary;\n\n if (!dict[widget]) {\n dict[widget] = {};\n }\n\n dict[widget][PREFIX] = prefix;\n }\n\n function registerValues(widget, args) {\n var dict = kendo.cssProperties.propertyDictionary,\n i, j, prop, values, newValues, currentValue;\n\n for (i = 0; i < args.length; i++) {\n prop = args[i].prop;\n newValues = args[i].values;\n\n if (!dict[widget][prop]) {\n dict[widget][prop] = {};\n }\n\n values = dict[widget][prop];\n\n for (j = 0; j < newValues.length; j++) {\n currentValue = newValues[j];\n\n if (isArray(newValues[j])) {\n values[currentValue[0]] = currentValue[1];\n } else {\n values[currentValue] = currentValue;\n }\n }\n }\n }\n\n function registerCssClass(propName, value, shorthand) {\n if (!defaultValues[propName]) {\n defaultValues[propName] = {};\n }\n\n defaultValues[propName][value] = shorthand || value;\n }\n\n function registerCssClasses(propName, arr) {\n for (var i = 0; i < arr.length; i++) {\n if (isArray(arr[i])) {\n registerCssClass(propName, arr[i][0], arr[i][1]);\n } else {\n registerCssClass(propName, arr[i]);\n }\n }\n }\n\n function getValidClass(args) {\n var widget = args.widget,\n propName = args.propName,\n value = args.value,\n fill = args.fill,\n cssProperties = kendo.cssProperties,\n defaultValues = cssProperties.defaultValues[propName],\n widgetProperties = cssProperties.propertyDictionary[widget],\n overridePrefix = args.prefix,\n widgetValues, validValue, prefix;\n\n if (!widgetProperties) {\n return \"\";\n }\n\n widgetValues = widgetProperties[propName];\n validValue = widgetValues ? widgetValues[value] || defaultValues[value] : defaultValues[value];\n\n if (validValue) {\n if (propName === \"themeColor\") {\n prefix = widgetProperties[PREFIX] + fill + \"-\";\n } else if (propName === \"positionMode\") {\n prefix = \"k-pos-\";\n } else if (propName === \"rounded\") {\n prefix = \"k-rounded-\";\n } else if (propName === \"resize\") {\n prefix = \"k-\";\n } else if (propName === \"overflow\") {\n prefix = \"k-overflow-\";\n } else if (propName === \"layoutFlow\") {\n prefix = \"\";\n } else {\n prefix = widgetProperties[PREFIX];\n }\n\n prefix = overridePrefix || prefix;\n\n return prefix + validValue;\n } else {\n return \"\";\n }\n }\n\n registerCssClasses(\"themeColor\", themeColorValues);\n registerCssClasses(\"fillMode\", fillValues);\n registerCssClasses(\"shape\", shapeValues);\n registerCssClasses(\"size\", sizeValues);\n registerCssClasses(\"positionMode\", positionModeValues);\n registerCssClasses(\"rounded\", roundedValues);\n registerCssClasses(\"resize\", resizeValues);\n registerCssClasses(\"overflow\", overflowValues);\n registerCssClasses(\"layoutFlow\", layoutFlowValues);\n\n return {\n positionModeValues: positionModeValues,\n roundedValues: roundedValues,\n sizeValues: sizeValues,\n shapeValues: shapeValues,\n fillModeValues: fillValues,\n themeColorValues: themeColorValues,\n\n defaultValues: defaultValues,\n propertyDictionary: propertyDictionary,\n\n registerValues: registerValues,\n getValidClass: getValidClass,\n registerPrefix: registerPrefix\n };\n }());\n\n //To do: delete below after implementing new styles and classes for BottomNavigation\n kendo.registerCssClass = function(propName, value, shorthand) {\n if (!kendo.propertyToCssClassMap[propName]) {\n kendo.propertyToCssClassMap[propName] = {};\n }\n\n kendo.propertyToCssClassMap[propName][value] = shorthand || value;\n };\n\n kendo.registerCssClasses = function(propName, arr) {\n for (var i = 0; i < arr.length; i++) {\n if (isArray(arr[i])) {\n kendo.registerCssClass(propName, arr[i][0], arr[i][1]);\n } else {\n kendo.registerCssClass(propName, arr[i]);\n }\n }\n };\n\n kendo.getValidCssClass = function(prefix, propName, value) {\n var validValue = kendo.propertyToCssClassMap[propName][value];\n\n if (validValue) {\n return prefix + validValue;\n }\n };\n\n kendo.propertyToCssClassMap = {};\n\n kendo.registerCssClasses(\"themeColor\", themeColorValues);\n kendo.registerCssClasses(\"fill\", fillValues);\n //kendo.registerCssClasses(\"postition\", postitionValues);\n kendo.registerCssClasses(\"shape\", shapeValues);\n kendo.registerCssClasses(\"size\", sizeValues);\n //kendo.registerCssClasses(\"align\", alignValues);\n kendo.registerCssClasses(\"positionMode\", positionModeValues);\n\n kendo.applyStylesFromKendoAttributes = function(element, styleProps) {\n let selector = styleProps.map(styleProp=> `[${kendo.attr(`style-${styleProp}`)}]`).join(',');\n element.find(selector).addBack(selector).each((_, currentElement) => {\n let $currentElement = $(currentElement);\n styleProps.forEach(function(styleProp) {\n let kendoAttr = kendo.attr(`style-${styleProp}`);\n if ($currentElement.attr(kendoAttr)) {\n $currentElement.css(styleProp, $currentElement.attr(kendoAttr));\n $currentElement.removeAttr(kendoAttr);\n }\n });\n });\n };\n\n // jQuery deferred helpers\n\n // influenced from: https://gist.github.com/fearphage/4341799\n kendo.whenAll = function(array) {\n var resolveValues = arguments.length == 1 && Array.isArray(array) ? array : Array.prototype.slice.call(arguments),\n length = resolveValues.length,\n remaining = length,\n deferred = $.Deferred(),\n i = 0,\n failed = 0,\n rejectContexts = Array(length),\n rejectValues = Array(length),\n resolveContexts = Array(length),\n value;\n\n function updateFunc(index, contexts, values) {\n return function() {\n if (values != resolveValues) {\n failed++;\n }\n\n deferred.notifyWith(\n contexts[index] = this,\n values[index] = Array.prototype.slice.call(arguments)\n );\n\n if (!(--remaining)) {\n deferred[(!failed ? 'resolve' : 'reject') + 'With'](contexts, values);\n }\n };\n }\n\n for (; i < length; i++) {\n if ((value = resolveValues[i]) && kendo.isFunction(value.promise)) {\n value.promise()\n .done(updateFunc(i, resolveContexts, resolveValues))\n .fail(updateFunc(i, rejectContexts, rejectValues));\n }\n\n else {\n deferred.notifyWith(this, value);\n --remaining;\n }\n }\n\n if (!remaining) {\n deferred.resolveWith(resolveContexts, resolveValues);\n }\n\n return deferred.promise();\n };\n\n // kendo.saveAs -----------------------------------------------\n (function() {\n function postToProxy(dataURI, fileName, proxyURL, proxyTarget) {\n var form = $(\"
\").attr({\n action: proxyURL,\n method: \"POST\",\n target: proxyTarget\n });\n\n var data = kendo.antiForgeryTokens();\n data.fileName = fileName;\n\n var parts = dataURI.split(\";base64,\");\n data.contentType = parts[0].replace(\"data:\", \"\");\n data.base64 = parts[1];\n\n for (var name in data) {\n if (data.hasOwnProperty(name)) {\n $('').attr({\n value: data[name],\n name: name,\n type: \"hidden\"\n }).appendTo(form);\n }\n }\n\n form.appendTo(\"body\").submit().remove();\n }\n\n var fileSaver = document.createElement(\"a\");\n var downloadAttribute = \"download\" in fileSaver && !kendo.support.browser.edge;\n\n function saveAsBlob(dataURI, fileName) {\n var blob = dataURI; // could be a Blob object\n\n if (typeof dataURI == \"string\") {\n var parts = dataURI.split(\";base64,\");\n var contentType = parts[0];\n var base64 = atob(parts[1]);\n var array = new Uint8Array(base64.length);\n\n for (var idx = 0; idx < base64.length; idx++) {\n array[idx] = base64.charCodeAt(idx);\n }\n blob = new Blob([array.buffer], { type: contentType });\n }\n\n navigator.msSaveBlob(blob, fileName);\n }\n\n function saveAsDataURI(dataURI, fileName) {\n if (window.Blob && dataURI instanceof Blob) {\n dataURI = URL.createObjectURL(dataURI);\n }\n\n fileSaver.download = fileName;\n fileSaver.href = dataURI;\n\n var e = document.createEvent(\"MouseEvents\");\n e.initMouseEvent(\"click\", true, false, window,\n 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n\n fileSaver.dispatchEvent(e);\n setTimeout(function() {\n URL.revokeObjectURL(dataURI);\n });\n }\n\n kendo.saveAs = function(options) {\n var save = postToProxy;\n\n if (!options.forceProxy) {\n if (downloadAttribute) {\n save = saveAsDataURI;\n } else if (navigator.msSaveBlob) {\n save = saveAsBlob;\n }\n }\n\n save(options.dataURI, options.fileName, options.proxyURL, options.proxyTarget);\n };\n })();\n\n // kendo proxySetters\n kendo.proxyModelSetters = function proxyModelSetters(data) {\n var observable = {};\n\n Object.keys(data || {}).forEach(function(property) {\n Object.defineProperty(observable, property, {\n get: function() {\n return data[property];\n },\n set: function(value) {\n data[property] = value;\n data.dirty = true;\n }\n });\n });\n\n return observable;\n };\n\n kendo.getSeriesColors = function() {\n var seriesColorsTemplate = '
' +\n '
' +\n '
' +\n '
' +\n '
' +\n '
',\n series = $(seriesColorsTemplate),\n colors = [];\n\n series.appendTo($('body'));\n\n series.each(function(i, item) {\n colors.push($(item).css(\"background-color\"));\n });\n\n series.remove();\n\n return colors;\n };\n\n kendo.isElement = function(element) {\n return element instanceof Element || element instanceof HTMLDocument;\n };\n\n // Kendo defaults\n (function() {\n\n kendo.defaults = kendo.defaults || {};\n kendo.setDefaults = function(key, value) {\n var path = key.split(\".\");\n var curr = kendo.defaults;\n\n key = path.pop();\n\n path.forEach(function(part) {\n if (curr[part] === undefined$1) {\n curr[part] = {};\n }\n\n curr = curr[part];\n });\n\n if (value.constructor === Object) {\n curr[key] = deepExtend({}, curr[key], value);\n } else {\n curr[key] = value;\n }\n };\n\n // Use external global flags for templates.\n kendo.debugTemplates = window.DEBUG_KENDO_TEMPLATES;\n\n // Setup default mediaQuery breakpoints\n kendo.setDefaults('breakpoints', defaultBreakpoints);\n })();\n\n // Implement type() as it has been depricated in jQuery\n (function() {\n kendo.class2type = {};\n\n jQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n function( _i, name ) {\n kendo.class2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n } );\n\n kendo.type = function(obj) {\n if ( obj == null ) {\n return obj + \"\";\n }\n\n // Support: Android <=2.3 only (functionish RegExp)\n return typeof obj === \"object\" || typeof obj === \"function\" ?\n kendo.class2type[Object.prototype.toString.call(obj)] || \"object\" :\n typeof obj;\n };\n }());\n\n var KendoLicensing = { validatePackage: function() { return true; },setScriptKey: function() {} };\n\n window.KendoLicensing = {\n setScriptKey: KendoLicensing.setScriptKey\n };\n\n function validatePackage() {\n return KendoLicensing.validatePackage(packageMetadata);\n }\n\n function addWatermarkOverlay(el) {\n KendoLicensing.addWatermarkOverlay && KendoLicensing.addWatermarkOverlay(el, packageMetadata);\n KendoLicensing.showBanner && KendoLicensing.showBanner(packageMetadata);\n }\n\n })(jQuery, window);\n var kendo$g = kendo;\n\n let __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$f = kendo;\n\n var __meta__$c = {\n id: \"data.odata\",\n name: \"OData\",\n category: \"framework\",\n depends: [ \"core\" ],\n hidden: true\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n extend = $.extend,\n NEWLINE = \"\\r\\n\",\n DOUBLELINE = \"\\r\\n\\r\\n\",\n isFunction = kendo.isFunction,\n odataFilters = {\n eq: \"eq\",\n neq: \"ne\",\n gt: \"gt\",\n gte: \"ge\",\n lt: \"lt\",\n lte: \"le\",\n contains: \"substringof\",\n doesnotcontain: \"substringof\",\n endswith: \"endswith\",\n startswith: \"startswith\",\n isnull: \"eq\",\n isnotnull: \"ne\",\n isnullorempty: \"eq\",\n isnotnullorempty: \"ne\",\n isempty: \"eq\",\n isnotempty: \"ne\"\n },\n odataFiltersVersionFour = extend({}, odataFilters, {\n contains: \"contains\"\n }),\n mappers = {\n pageSize: $.noop,\n page: $.noop,\n filter: function(params, filter, useVersionFour) {\n if (filter) {\n filter = toOdataFilter(filter, useVersionFour);\n if (filter) {\n params.$filter = filter;\n }\n }\n },\n sort: function(params, orderby) {\n var expr = $.map(orderby, function(value) {\n var order = value.field.replace(/\\./g, \"/\");\n\n if (value.dir === \"desc\") {\n order += \" desc\";\n }\n\n return order;\n }).join(\",\");\n\n if (expr) {\n params.$orderby = expr;\n }\n },\n skip: function(params, skip) {\n if (skip) {\n params.$skip = skip;\n }\n },\n take: function(params, take) {\n if (take) {\n params.$top = take;\n }\n }\n },\n defaultDataType = {\n read: {\n dataType: \"jsonp\"\n }\n };\n\n function toOdataFilter(filter, useOdataFour) {\n var result = [],\n logic = filter.logic || \"and\",\n idx,\n length,\n field,\n type,\n format,\n operator,\n value,\n ignoreCase,\n filters = filter.filters;\n\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n value = filter.value;\n operator = filter.operator;\n\n if (filter.filters) {\n filter = toOdataFilter(filter, useOdataFour);\n } else {\n ignoreCase = filter.ignoreCase;\n field = field.replace(/\\./g, \"/\");\n filter = odataFilters[operator];\n if (useOdataFour) {\n filter = odataFiltersVersionFour[operator];\n }\n\n if (operator === \"isnullorempty\") {\n filter = kendo.format(\"({0} {1} null or {0} {1} '')\", field, filter);\n } else if (operator === \"isnotnullorempty\") {\n filter = kendo.format(\"({0} {1} null and {0} {1} '')\", field, filter);\n } else if (operator === \"isnull\" || operator === \"isnotnull\") {\n filter = kendo.format(\"{0} {1} null\", field, filter);\n } else if (operator === \"isempty\" || operator === \"isnotempty\") {\n filter = kendo.format(\"{0} {1} ''\", field, filter);\n } else if (filter && value !== undefined$1) {\n type = kendo.type(value);\n if (type === \"string\") {\n format = \"'{1}'\";\n value = value.replace(/'/g, \"''\");\n\n if (ignoreCase === true) {\n field = \"tolower(\" + field + \")\";\n }\n\n } else if (type === \"date\") {\n if (useOdataFour) {\n format = \"{1:yyyy-MM-ddTHH:mm:ss+00:00}\";\n value = kendo.timezone.apply(value, 'Etc/UTC');\n } else {\n format = \"datetime'{1:yyyy-MM-ddTHH:mm:ss}'\";\n }\n } else {\n format = \"{1}\";\n }\n\n if (filter.length > 3) {\n if (filter !== \"substringof\") {\n format = \"{0}({2},\" + format + \")\";\n } else {\n format = \"{0}(\" + format + \",{2})\";\n if (operator === \"doesnotcontain\") {\n if (useOdataFour) {\n format = \"{0}({2},'{1}') eq -1\";\n filter = \"indexof\";\n } else {\n format += \" eq false\";\n }\n }\n }\n } else {\n format = \"{2} {0} \" + format;\n }\n\n filter = kendo.format(format, filter, value, field);\n }\n }\n\n result.push(filter);\n }\n\n filter = result.join(\" \" + logic + \" \");\n\n if (result.length > 1) {\n filter = \"(\" + filter + \")\";\n }\n\n return filter;\n }\n\n function stripMetadata(obj) {\n for (var name in obj) {\n if (name.indexOf(\"@odata\") === 0) {\n delete obj[name];\n }\n }\n }\n\n function hex16() {\n return Math.floor((1 + Math.random()) * 0x10000).toString(16).substr(1);\n }\n\n function createBoundary(prefix) {\n return prefix + hex16() + '-' + hex16() + '-' + hex16();\n }\n\n function createDelimeter(boundary, close) {\n var result = NEWLINE + \"--\" + boundary;\n\n if (close) {\n result += \"--\";\n }\n\n return result;\n }\n\n function createCommand(transport, item, httpVerb, command) {\n var transportUrl = transport.options[command].url;\n var commandPrefix = kendo.format(\"{0} \", httpVerb);\n\n if (isFunction(transportUrl)) {\n return commandPrefix + transportUrl(item);\n } else {\n return commandPrefix + transportUrl;\n }\n }\n\n function getOperationHeader(changeset, changeId) {\n var header = \"\";\n\n header += createDelimeter(changeset, false);\n header += NEWLINE + 'Content-Type: application/http';\n header += NEWLINE + 'Content-Transfer-Encoding: binary';\n header += NEWLINE + 'Content-ID: ' + changeId;\n\n return header;\n }\n\n function getOperationContent(item) {\n var content = \"\";\n\n content += NEWLINE + \"Content-Type: application/json;odata=minimalmetadata\";\n content += NEWLINE + \"Prefer: return=representation\";\n content += DOUBLELINE + kendo.stringify(item);\n\n return content;\n }\n\n function getOperations(collection, changeset, changeId, command, transport, skipContent) {\n var requestBody = \"\";\n\n for (var i = 0; i < collection.length; i++) {\n requestBody += getOperationHeader(changeset, changeId);\n requestBody += DOUBLELINE + createCommand(transport, collection[i], transport.options[command].type, command) + ' HTTP/1.1';\n if (!skipContent) {\n requestBody += getOperationContent(collection[i]);\n }\n requestBody += NEWLINE;\n changeId++;\n }\n\n return requestBody;\n }\n\n function processCollection(colection, boundary, changeset, changeId, transport, command, skipContent) {\n var requestBody = \"\";\n\n requestBody += getBoundary(boundary, changeset);\n requestBody += getOperations(colection, changeset, changeId, command, transport, skipContent);\n requestBody += createDelimeter(changeset, true);\n requestBody += NEWLINE;\n\n return requestBody;\n }\n\n function getBoundary(boundary,changeset) {\n var requestBody = \"\";\n\n requestBody += \"--\" + boundary + NEWLINE;\n requestBody += \"Content-Type: multipart/mixed; boundary=\" + changeset + NEWLINE;\n\n return requestBody;\n }\n\n function createBatchRequest(transport, colections) {\n \t\tvar options = extend({}, transport.options.batch);\n var boundary = createBoundary(\"sf_batch_\");\n var requestBody = \"\";\n var changeId = 0;\n var batchURL = transport.options.batch.url;\n var changeset = createBoundary(\"sf_changeset_\");\n\n options.type = transport.options.batch.type;\n options.url = isFunction(batchURL) ? batchURL() : batchURL;\n \t\toptions.headers = extend(options.headers || {}, {\n \t\t\t\"Content-Type\": \"multipart/mixed; boundary=\" + boundary\n \t\t});\n\n if (colections.updated.length) {\n requestBody += processCollection(colections.updated, boundary, changeset, changeId, transport, \"update\", false);\n changeId += colections.updated.length;\n changeset = createBoundary(\"sf_changeset_\");\n }\n\n if (colections.destroyed.length) {\n requestBody += processCollection(colections.destroyed, boundary, changeset, changeId, transport, \"destroy\", true);\n changeId += colections.destroyed.length;\n changeset = createBoundary(\"sf_changeset_\");\n }\n\n if (colections.created.length) {\n requestBody += processCollection(colections.created, boundary, changeset, changeId, transport, \"create\", false);\n }\n\n requestBody += createDelimeter(boundary, true);\n\n options.data = requestBody;\n\n return options;\n }\n\n function parseBatchResponse(responseText) {\n var responseMarkers = responseText.match(/--changesetresponse_[a-z0-9-]+$/gm);\n var markerIndex = 0;\n var collections = [];\n var changeBody;\n var status;\n var code;\n var marker;\n var jsonModel;\n\n collections.push({ models: [], passed: true });\n\n for (var i = 0; i < responseMarkers.length; i++) {\n marker = responseMarkers[i];\n if (marker.lastIndexOf('--', marker.length - 1)) {\n if (i < responseMarkers.length - 1) {\n collections.push({ models: [], passed: true });\n }\n continue;\n }\n\n if (!markerIndex) {\n markerIndex = responseText.indexOf(marker);\n } else {\n markerIndex = responseText.indexOf(marker, markerIndex + marker.length);\n }\n\n changeBody = responseText.substring(markerIndex, responseText.indexOf(\"--\", markerIndex + 1));\n status = changeBody.match(/^HTTP\\/1\\.\\d (\\d{3}) (.*)$/gm).pop();\n code = kendo.parseFloat(status.match(/\\d{3}/g).pop());\n\n if (code >= 200 && code <= 299) {\n jsonModel = changeBody.match(/\\{.*\\}/gm);\n if (jsonModel) {\n collections[collections.length - 1].models.push(JSON.parse(jsonModel[0]));\n }\n } else {\n collections[collections.length - 1].passed = false;\n }\n\n }\n\n return collections;\n }\n\n extend(true, kendo.data, {\n schemas: {\n odata: {\n type: \"json\",\n data: function(data) {\n return data.d.results || [data.d];\n },\n total: \"d.__count\"\n }\n },\n transports: {\n odata: {\n read: {\n cache: true, // to prevent jQuery from adding cache buster\n dataType: \"jsonp\",\n jsonp: \"$callback\"\n },\n update: {\n cache: true,\n dataType: \"json\",\n contentType: \"application/json\", // to inform the server the the request body is JSON encoded\n type: \"PUT\" // can be PUT or MERGE\n },\n create: {\n cache: true,\n dataType: \"json\",\n contentType: \"application/json\",\n type: \"POST\" // must be POST to create new entity\n },\n destroy: {\n cache: true,\n dataType: \"json\",\n type: \"DELETE\"\n },\n parameterMap: function(options, type, useVersionFour) {\n var params,\n value,\n option,\n dataType;\n\n options = options || {};\n type = type || \"read\";\n dataType = (this.options || defaultDataType)[type];\n dataType = dataType ? dataType.dataType : \"json\";\n\n if (type === \"read\") {\n params = {\n $inlinecount: \"allpages\"\n };\n\n if (dataType != \"json\") {\n params.$format = \"json\";\n }\n\n for (option in options) {\n if (mappers[option]) {\n mappers[option](params, options[option], useVersionFour);\n } else {\n params[option] = options[option];\n }\n }\n } else {\n if (dataType !== \"json\") {\n throw new Error(\"Only json dataType can be used for \" + type + \" operation.\");\n }\n\n if (type !== \"destroy\") {\n for (option in options) {\n value = options[option];\n if (typeof value === \"number\") {\n options[option] = value + \"\";\n }\n }\n\n params = kendo.stringify(options);\n }\n }\n\n return params;\n }\n }\n }\n });\n\n extend(true, kendo.data, {\n schemas: {\n \"odata-v4\": {\n type: \"json\",\n data: function(data) {\n if (Array.isArray(data)) {\n for (var i = 0; i < data.length; i++) {\n stripMetadata(data[i]);\n }\n return data;\n } else {\n data = $.extend({}, data);\n stripMetadata(data);\n\n if (data.value) {\n return data.value;\n }\n return [data];\n }\n },\n total: function(data) {\n return data[\"@odata.count\"];\n }\n }\n },\n transports: {\n \"odata-v4\": {\n batch: {\n type: \"POST\"\n },\n read: {\n cache: true, // to prevent jQuery from adding cache buster\n dataType: \"json\"\n },\n update: {\n cache: true,\n dataType: \"json\",\n contentType: \"application/json;IEEE754Compatible=true\", // to inform the server the the request body is JSON encoded\n type: \"PUT\" // can be PUT or MERGE\n },\n create: {\n cache: true,\n dataType: \"json\",\n contentType: \"application/json;IEEE754Compatible=true\",\n type: \"POST\" // must be POST to create new entity\n },\n destroy: {\n cache: true,\n dataType: \"json\",\n type: \"DELETE\"\n },\n parameterMap: function(options, type) {\n var result = kendo.data.transports.odata.parameterMap(options, type, true);\n if (type == \"read\") {\n result.$count = true;\n delete result.$inlinecount;\n }\n\n \t\t\t\t\tif (result && result.$filter) {\n \t\t\t\t\t\t// Remove the single quotation marks around the GUID (OData v4).\n \t\t\t\t\t\tresult.$filter = result.$filter.replace(/('[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')/ig, function(x) {\n \t\t\t\t\t\t\treturn x.substring(1, x.length - 1);\n \t\t\t\t\t\t});\n \t\t\t\t\t}\n\n return result;\n },\n submit: function(e) {\n var that = this;\n var options = createBatchRequest(that, e.data);\n var collections = e.data;\n\n if (!collections.updated.length && !collections.destroyed.length && !collections.created.length) {\n return;\n }\n\n $.ajax(extend(true, {}, {\n success: function(response) {\n var responses = parseBatchResponse(response);\n var index = 0;\n var current;\n\n if (collections.updated.length) {\n current = responses[index];\n if (current.passed) {\n // Pass either the obtained models or an empty array if only status codes are returned.\n e.success(current.models.length ? current.models : [], \"update\");\n }\n index++;\n }\n if (collections.destroyed.length) {\n current = responses[index];\n if (current.passed) {\n // For delete operations OData returns only status codes.\n // Passing empty array to datasource will force it to correctly remove the deleted items from the pristine collection.\n e.success([], \"destroy\");\n }\n index++;\n }\n if (collections.created.length) {\n current = responses[index];\n if (current.passed) {\n e.success(current.models, \"create\");\n }\n }\n },\n error: function(response, status, error) {\n e.error(response, status, error);\n }\n }, options));\n }\n }\n }\n });\n\n })(window.kendo.jQuery);\n var kendo$e = kendo;\n\n var __meta__$b = {\n id: \"data.xml\",\n name: \"XML\",\n category: \"framework\",\n depends: [ \"core\" ],\n hidden: true\n };\n\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n isArray = Array.isArray,\n isPlainObject = $.isPlainObject,\n map = $.map,\n each = $.each,\n extend = $.extend,\n getter = kendo.getter,\n Class = kendo.Class;\n\n var XmlDataReader = Class.extend({\n init: function(options) {\n var that = this,\n total = options.total,\n model = options.model,\n parse = options.parse,\n errors = options.errors,\n serialize = options.serialize,\n data = options.data;\n\n if (model) {\n if (isPlainObject(model)) {\n var base = options.modelBase || kendo.data.Model;\n\n if (model.fields) {\n each(model.fields, function(field, value) {\n if (isPlainObject(value) && value.field) {\n if (!kendo.isFunction(value.field)) {\n value = extend(value, { field: that.getter(value.field) });\n }\n } else {\n value = { field: that.getter(value) };\n }\n model.fields[field] = value;\n });\n }\n\n var id = model.id;\n if (id) {\n var idField = {};\n\n idField[that.xpathToMember(id, true)] = { field: that.getter(id) };\n model.fields = extend(idField, model.fields);\n model.id = that.xpathToMember(id);\n }\n model = base.define(model);\n }\n\n that.model = model;\n }\n\n if (total) {\n if (typeof total == \"string\") {\n total = that.getter(total);\n that.total = function(data) {\n return parseInt(total(data), 10);\n };\n } else if (typeof total == \"function\") {\n that.total = total;\n }\n }\n\n if (errors) {\n if (typeof errors == \"string\") {\n errors = that.getter(errors);\n that.errors = function(data) {\n return errors(data) || null;\n };\n } else if (typeof errors == \"function\") {\n that.errors = errors;\n }\n }\n\n if (data) {\n if (typeof data == \"string\") {\n data = that.xpathToMember(data);\n that.data = function(value) {\n var result = that.evaluate(value, data),\n modelInstance;\n\n result = isArray(result) ? result : [result];\n\n if (that.model && model.fields) {\n modelInstance = new that.model();\n\n return map(result, function(value) {\n if (value) {\n var record = {}, field;\n\n for (field in model.fields) {\n record[field] = modelInstance._parse(field, model.fields[field].field(value));\n }\n\n return record;\n }\n });\n }\n\n return result;\n };\n } else if (typeof data == \"function\") {\n that.data = data;\n }\n }\n\n if (typeof parse == \"function\") {\n var xmlParse = that.parse;\n\n that.parse = function(data) {\n var xml = parse.call(that, data);\n return xmlParse.call(that, xml);\n };\n }\n\n if (typeof serialize == \"function\") {\n that.serialize = serialize;\n }\n },\n total: function(result) {\n return this.data(result).length;\n },\n errors: function(data) {\n return data ? data.errors : null;\n },\n serialize: function(data) {\n return data;\n },\n parseDOM: function(element) {\n var result = {},\n parsedNode,\n node,\n nodeType,\n nodeName,\n member,\n attribute,\n attributes = element.attributes,\n attributeCount = attributes.length,\n idx;\n\n for (idx = 0; idx < attributeCount; idx++) {\n attribute = attributes[idx];\n result[\"@\" + attribute.nodeName] = attribute.nodeValue;\n }\n\n for (node = element.firstChild; node; node = node.nextSibling) {\n nodeType = node.nodeType;\n\n if (nodeType === 3 || nodeType === 4) {\n // text nodes or CDATA are stored as #text field\n result[\"#text\"] = node.nodeValue;\n } else if (nodeType === 1) {\n // elements are stored as fields\n parsedNode = this.parseDOM(node);\n\n nodeName = node.nodeName;\n\n member = result[nodeName];\n\n if (isArray(member)) {\n // elements of same nodeName are stored as array\n member.push(parsedNode);\n } else if (member !== undefined$1) {\n member = [member, parsedNode];\n } else {\n member = parsedNode;\n }\n\n result[nodeName] = member;\n }\n }\n return result;\n },\n\n evaluate: function(value, expression) {\n var members = expression.split(\".\"),\n member,\n result,\n length,\n intermediateResult,\n idx;\n\n while (member = members.shift()) {\n value = value[member];\n\n if (isArray(value)) {\n result = [];\n expression = members.join(\".\");\n\n for (idx = 0, length = value.length; idx < length; idx++) {\n intermediateResult = this.evaluate(value[idx], expression);\n\n intermediateResult = isArray(intermediateResult) ? intermediateResult : [intermediateResult];\n\n result.push.apply(result, intermediateResult);\n }\n\n return result;\n }\n }\n\n return value;\n },\n\n parse: function(xml) {\n var documentElement,\n tree,\n result = {};\n\n documentElement = xml.documentElement || $.parseXML(xml).documentElement;\n\n tree = this.parseDOM(documentElement);\n\n result[documentElement.nodeName] = tree;\n\n return result;\n },\n\n xpathToMember: function(member, raw) {\n if (!member) {\n return \"\";\n }\n\n member = member.replace(/^\\//, \"\") // remove the first \"/\"\n .replace(/\\//g, \".\"); // replace all \"/\" with \".\"\n\n if (member.indexOf(\"@\") >= 0) {\n // replace @attribute with '[\"@attribute\"]'\n return member.replace(/\\.?(@.*)/, raw ? '$1' : '[\"$1\"]');\n }\n\n if (member.indexOf(\"text()\") >= 0) {\n // replace \".text()\" with '[\"#text\"]'\n return member.replace(/(\\.?text\\(\\))/, raw ? '#text' : '[\"#text\"]');\n }\n\n return member;\n },\n getter: function(member) {\n return getter(this.xpathToMember(member), true);\n }\n });\n\n $.extend(true, kendo.data, {\n XmlDataReader: XmlDataReader,\n readers: {\n xml: XmlDataReader\n }\n });\n })(window.kendo.jQuery);\n var kendo$d = kendo;\n\n /*\n This code is copied/inspired by the internal @progress/kendo-data-query repo:\n https://github.com/telerik/kendo-data-query/tree/develop/src/filtering\n\n !!!\n 1. If updates are to be synced consider the accentFoldingFiltering,\n which at the moment is not present as a feature in the data-query-package.\n\n 2. Double-check available operators as well.\n\n 3. Make sure objs are strings -> i.e., replace (a || \"\") to (a + '')\n !!!\n\n In future, if we consider reusing the code directly we should revise the above omissions.\n */\n\n const logic = {\n \"or\": {\n concat: (acc, fn) => a => acc(a) || fn(a),\n identity: () => false\n },\n \"and\": {\n concat: (acc, fn) => a => acc(a) && fn(a),\n identity: () => true\n }\n };\n\n const operatorsMap = {\n isnullorempty: (a) => kendo.isBlank(a) || a === '',\n isnotnullorempty: (a) => kendo.isPresent(a) && a !== '',\n contains: (a, b) => (a + '').indexOf(b) >= 0,\n doesnotcontain: (a, b) => (a + '').indexOf(b) === -1,\n doesnotendwith: (a, b) => (a + '').indexOf(b, (a || \"\").length - (b || \"\").length) < 0,\n doesnotstartwith: (a, b) => (a + '').lastIndexOf(b, 0) === -1,\n endswith: (a, b) => (a + '').indexOf(b, (a || \"\").length - (b || \"\").length) >= 0,\n eq: (a, b) => a === b,\n gt: (a, b) => a > b,\n gte: (a, b) => a >= b,\n isempty: (a) => a === '',\n isnotempty: (a) => a !== '',\n isnotnull: (a) => kendo.isPresent(a),\n isnull: (a) => kendo.isBlank(a),\n lt: (a, b) => a < b,\n lte: (a, b) => a <= b,\n neq: (a, b) => a != b,\n startswith: (a, b) => (a + '').lastIndexOf(b, 0) === 0\n };\n\n const dateRegExp = /^\\/Date\\((.*?)\\)\\/$/;\n\n const convertValue = (value, ignoreCase, accentFoldingFiltering) => {\n if (value != null && kendo.isString(value)) {\n const date = dateRegExp.exec(value);\n if (date) {\n return new Date(+date[1]).getTime();\n } else if (ignoreCase) {\n return accentFoldingFiltering ? value.toLocaleLowerCase(accentFoldingFiltering) : value.toLowerCase();\n }\n } else if (value != null && kendo.isDate(value)) {\n return value.getTime();\n }\n return value;\n };\n\n const typedGetter = (prop, value, ignoreCase, accentFoldingFiltering) => {\n if (!kendo.isPresent(value)) {\n return prop;\n }\n\n let acc = prop;\n\n if (kendo.isString(value)) {\n const date = dateRegExp.exec(value);\n if (date) {\n value = new Date(+date[1]);\n } else {\n acc = a => {\n const x = prop(a);\n if (typeof x === 'string' && ignoreCase) {\n return accentFoldingFiltering ? x.toLocaleLowerCase(accentFoldingFiltering) : x.toLowerCase();\n } else {\n return kendo.isNumeric(x) ? x + \"\" : x;\n }\n };\n }\n }\n\n if (kendo.isDate(value)) {\n return a => {\n const x = acc(a);\n return kendo.isDate(x) ? x.getTime() : x;\n };\n }\n return acc;\n };\n\n const transformFilter = ({ field, ignoreCase, value, operator = 'eq', accentFoldingFiltering }) => {\n field = !kendo.isPresent(field) ? a => a : field;\n\n ignoreCase = kendo.isPresent(ignoreCase) ? ignoreCase : true;\n\n const itemProp = typedGetter(\n kendo.isFunction(field) ? field : kendo.getter(field, true),\n value,\n ignoreCase,\n accentFoldingFiltering\n );\n\n value = convertValue(value, ignoreCase, accentFoldingFiltering);\n\n const op = kendo.isFunction(operator) ? operator : operatorsMap[operator];\n\n return a => op(itemProp(a), value, ignoreCase);\n };\n\n const isCompositeFilterDescriptor = (source) => kendo.isPresent(source.filters);\n\n const transformCompositeFilter = (filter) => {\n const accentFoldingFiltering = filter.accentFoldingFiltering;\n const combiner = logic[filter.logic || 'and'];\n return filter.filters\n .filter(kendo.isPresent)\n .map(x => (isCompositeFilterDescriptor(x) ? transformCompositeFilter(extendAccentFolding(x, accentFoldingFiltering)) : transformFilter(extendAccentFolding(x, accentFoldingFiltering))))\n .reduce(combiner.concat, combiner.identity);\n };\n\n const extendAccentFolding = (filter, accentFoldingFiltering) => (kendo.isPresent(accentFoldingFiltering) ? Object.assign(filter, { accentFoldingFiltering }) : filter);\n\n const filterExprNoEval = function(expr) {\n return transformCompositeFilter(expr);\n };\n\n var __meta__$a = {\n id: \"data\",\n name: \"Data source\",\n category: \"framework\",\n description: \"Powerful component for using local and remote data.Fully supports CRUD, Sorting, Paging, Filtering, Grouping, and Aggregates.\",\n depends: [ \"core\" ],\n features: [ {\n id: \"data-odata\",\n name: \"OData\",\n description: \"Support for accessing Open Data Protocol (OData) services.\",\n depends: [ \"data.odata\" ]\n }, {\n id: \"data-signalr\",\n name: \"SignalR\",\n description: \"Support for binding to SignalR hubs.\",\n depends: [ \"data.signalr\" ]\n }, {\n id: \"data-XML\",\n name: \"XML\",\n description: \"Support for binding to XML.\",\n depends: [ \"data.xml\" ]\n }]\n };\n\n\n (function($, undefined$1) {\n var extend = $.extend,\n isPlainObject = $.isPlainObject,\n isEmptyObject = $.isEmptyObject,\n isArray = Array.isArray,\n grep = $.grep,\n ajax = $.ajax,\n map,\n each = $.each,\n noop = $.noop,\n kendo = window.kendo,\n isFunction = kendo.isFunction,\n Observable = kendo.Observable,\n Class = kendo.Class,\n STRING = \"string\",\n FUNCTION = \"function\",\n ASCENDING = \"asc\",\n CREATE = \"create\",\n READ = \"read\",\n UPDATE = \"update\",\n DESTROY = \"destroy\",\n CHANGE = \"change\",\n SYNC = \"sync\",\n GET = \"get\",\n ERROR = \"error\",\n REQUESTSTART = \"requestStart\",\n PROGRESS = \"progress\",\n REQUESTEND = \"requestEnd\",\n ITEMSLOADED = \"itemsLoaded\",\n ITEMLOAD = \"itemLoad\",\n crud = [CREATE, READ, UPDATE, DESTROY],\n identity = function(o) { return o; },\n getter = kendo.getter,\n stringify = kendo.stringify,\n math = Math,\n push = [].push,\n join = [].join,\n pop = [].pop,\n splice = [].splice,\n shift = [].shift,\n slice = [].slice,\n unshift = [].unshift,\n toString = {}.toString,\n stableSort = kendo.support.stableSort,\n dateRegExp = /^\\/Date\\((.*?)\\)\\/$/,\n objectKeys = [];\n\n var ObservableArray = Observable.extend({\n init: function(array, type) {\n var that = this;\n\n that.type = type || ObservableObject;\n\n Observable.fn.init.call(that);\n\n that.length = array.length;\n\n that.wrapAll(array, that);\n that._loadPromises = [];\n that._loadedNodes = [];\n },\n\n at: function(index) {\n return this[index];\n },\n\n toJSON: function(serializeFunctions) {\n var idx, length = this.length, value, json = new Array(length);\n\n for (idx = 0; idx < length; idx++) {\n value = this[idx];\n\n if (value instanceof ObservableObject) {\n value = value.toJSON(serializeFunctions);\n }\n\n json[idx] = value;\n }\n\n return json;\n },\n\n parent: noop,\n\n wrapAll: function(source, target) {\n var that = this,\n idx,\n length,\n parent = function() {\n return that;\n };\n\n target = target || [];\n\n for (idx = 0, length = source.length; idx < length; idx++) {\n target[idx] = that.wrap(source[idx], parent);\n }\n\n return target;\n },\n\n wrap: function(object, parent) {\n var that = this,\n observable;\n\n if (object !== null && toString.call(object) === \"[object Object]\") {\n observable = object instanceof that.type || object instanceof Model;\n\n if (!observable) {\n object = object instanceof ObservableObject ? object.toJSON() : object;\n object = new that.type(object);\n }\n\n object.parent = parent;\n\n object.bind(CHANGE, function(e) {\n var isGroup = object.hasOwnProperty(\"hasSubgroups\");\n that.trigger(CHANGE, {\n field: e.field,\n node: e.node,\n index: e.index,\n items: e.items || [this],\n action: e.node || isGroup ? (e.action || \"itemloaded\") : \"itemchange\"\n });\n });\n\n object.bind(ITEMLOAD, function(e) {\n that._loadPromises.push(e.promise);\n that._loading = true;\n\n e.promise.done(function() {\n that._loadedNodes.push(e.node);\n var index = that._loadPromises.indexOf(e.promise);\n that._loadPromises.splice(index, 1);\n\n if (!that._loadPromises.length) {\n that._loading = false;\n that.trigger(ITEMSLOADED, { collection: that, nodes: that._loadedNodes });\n that._loadedNodes = [];\n }\n });\n });\n }\n\n return object;\n },\n\n loading: function() {\n return this._loading;\n },\n\n push: function() {\n var index = this.length,\n items = this.wrapAll(arguments),\n result;\n\n result = push.apply(this, items);\n\n if (!this.omitChangeEvent) {\n this.trigger(CHANGE, {\n action: \"add\",\n index: index,\n items: items\n });\n }\n\n return result;\n },\n\n slice: slice,\n\n sort: [].sort,\n\n join: join,\n\n pop: function() {\n var length = this.length, result = pop.apply(this);\n\n if (length) {\n this.trigger(CHANGE, {\n action: \"remove\",\n index: length - 1,\n items: [result]\n });\n }\n\n return result;\n },\n\n splice: function(index, howMany, item) {\n var items = this.wrapAll(slice.call(arguments, 2)),\n result, i, len;\n\n result = splice.apply(this, [index, howMany].concat(items));\n\n if (result.length) {\n if (!this.omitChangeEvent) {\n this.trigger(CHANGE, {\n action: \"remove\",\n index: index,\n items: this.omitCache && this.omitCache.length ? result.concat(this.omitCache) : result\n });\n this.omitCache = [];\n }\n\n for (i = 0, len = result.length; i < len; i++) {\n if (result[i] && result[i].children) {\n result[i].unbind(CHANGE);\n }\n }\n }\n\n if (item) {\n if (!this.omitChangeEvent) {\n this.trigger(CHANGE, {\n action: \"add\",\n index: index,\n items: items\n });\n }\n }\n return result;\n },\n\n shift: function() {\n var length = this.length, result = shift.apply(this);\n\n if (length) {\n this.trigger(CHANGE, {\n action: \"remove\",\n index: 0,\n items: [result]\n });\n }\n\n return result;\n },\n\n unshift: function() {\n var items = this.wrapAll(arguments),\n result;\n\n result = unshift.apply(this, items);\n\n this.trigger(CHANGE, {\n action: \"add\",\n index: 0,\n items: items\n });\n\n return result;\n },\n\n indexOf: function(item) {\n var that = this,\n idx,\n length;\n\n for (idx = 0, length = that.length; idx < length; idx++) {\n if (that[idx] === item) {\n return idx;\n }\n }\n return -1;\n },\n\n forEach: function(callback, thisArg) {\n var idx = 0;\n var length = this.length;\n var context = thisArg || window;\n\n for (; idx < length; idx++) {\n callback.call(context, this[idx], idx, this);\n }\n },\n\n map: function(callback, thisArg) {\n var idx = 0;\n var result = [];\n var length = this.length;\n var context = thisArg || window;\n\n for (; idx < length; idx++) {\n result[idx] = callback.call(context, this[idx], idx, this);\n }\n\n return result;\n },\n\n reduce: function(callback) {\n var idx = 0,\n result,\n length = this.length;\n\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx < length) {\n result = this[idx++];\n }\n\n for (; idx < length; idx++) {\n result = callback(result, this[idx], idx, this);\n }\n\n return result;\n },\n\n reduceRight: function(callback) {\n var idx = this.length - 1,\n result;\n\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx > 0) {\n result = this[idx--];\n }\n\n for (; idx >= 0; idx--) {\n result = callback(result, this[idx], idx, this);\n }\n\n return result;\n },\n\n filter: function(callback, thisArg) {\n var idx = 0;\n var result = [];\n var item;\n var length = this.length;\n var context = thisArg || window;\n\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n result[result.length] = item;\n }\n }\n\n return result;\n },\n\n find: function(callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n return item;\n }\n }\n },\n\n every: function(callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n\n for (; idx < length; idx++) {\n item = this[idx];\n if (!callback.call(context, item, idx, this)) {\n return false;\n }\n }\n\n return true;\n },\n\n some: function(callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n return true;\n }\n }\n\n return false;\n },\n\n // non-standard collection methods\n remove: function(item) {\n var idx = this.indexOf(item);\n\n if (idx !== -1) {\n this.splice(idx, 1);\n }\n },\n\n empty: function() {\n this.splice(0, this.length);\n }\n });\n\n // Polyfill for Symbol.iterator\n if (typeof Symbol !== \"undefined\" && Symbol.iterator && !ObservableArray.prototype[Symbol.iterator]) {\n ObservableArray.prototype[Symbol.iterator] = [][Symbol.iterator];\n }\n\n var LazyObservableArray = ObservableArray.extend({\n init: function(data, type, events) {\n var parentFn = function() { return this; };\n\n Observable.fn.init.call(this);\n\n this.type = type || ObservableObject;\n\n if (events) {\n this._events = events;\n }\n\n for (var idx = 0; idx < data.length; idx++) {\n this[idx] = data[idx];\n }\n\n this.length = idx;\n this._parent = parentFn.bind(this);\n this._loadPromises = [];\n this._loadedNodes = [];\n },\n at: function(index) {\n var item = this[index];\n\n if (!(item instanceof this.type)) {\n item = this[index] = this.wrap(item, this._parent);\n } else {\n item.parent = this._parent;\n }\n\n return item;\n }\n });\n\n function eventHandler(context, type, field, prefix) {\n return function(e) {\n var event = {}, key;\n\n for (key in e) {\n event[key] = e[key];\n }\n\n if (prefix) {\n event.field = field + \".\" + e.field;\n } else {\n event.field = field;\n }\n\n if (type == CHANGE && context._notifyChange) {\n context._notifyChange(event);\n }\n\n context.trigger(type, event);\n };\n }\n\n function isPrimitiveType(value) {\n return (typeof value === \"object\" && Object.getPrototypeOf(value) === Object.getPrototypeOf({}))\n || Object.getPrototypeOf(value) === Object.getPrototypeOf(new Date())\n || typeof value !== \"object\";\n }\n\n function ownKeys(value, ignoreObjectKeys) {\n var props = [];\n var protoKeys = [];\n var keys, filteredObjectKeys;\n\n value = value || {};\n\n if (!isPrimitiveType(value)) {\n protoKeys = Object.getOwnPropertyNames(Object.getPrototypeOf(value)).filter(f => f.indexOf(\"__\") !== 0);\n }\n\n keys = Object.getOwnPropertyNames(value).concat(protoKeys);\n\n filteredObjectKeys = objectKeys.filter(function(key) {\n return keys.indexOf(key) < 0;\n });\n\n while (value) {\n Object.getOwnPropertyNames(value).forEach(function(prop) {\n if (props.indexOf(prop) === -1 && (!ignoreObjectKeys || filteredObjectKeys.indexOf(prop) < 0)) {\n props.push(prop);\n }\n });\n value = Object.getPrototypeOf(value);\n }\n\n return props;\n }\n\n objectKeys = ownKeys({}, false);\n\n var ObservableObject = Observable.extend({\n init: function(value) {\n var that = this,\n member,\n keys = ownKeys(value, true),\n parent = function() {\n return that;\n };\n\n Observable.fn.init.call(this);\n\n this._handlers = {};\n\n keys.forEach(function(field) {\n member = value[field];\n\n if (typeof member === \"object\" && member && !member.getTime && field.charAt(0) != \"_\") {\n member = that.wrap(member, field, parent);\n }\n\n that[field] = member;\n });\n\n that.uid = kendo.guid();\n },\n\n shouldSerialize: function(field, serializeFunctions) {\n return this.hasOwnProperty(field) && field !== \"_handlers\" && field !== \"_events\" && ((serializeFunctions && serializeFunctions[field]) || typeof this[field] !== FUNCTION) && field !== \"uid\";\n },\n\n forEach: function(f) {\n for (var i in this) {\n if (this.shouldSerialize(i)) {\n f(this[i], i);\n }\n }\n },\n\n toJSON: function(serializeFunctions) {\n var result = {}, value, field;\n\n for (field in this) {\n if (this.shouldSerialize(field, serializeFunctions)) {\n value = this[field];\n\n if (value instanceof ObservableObject || value instanceof ObservableArray) {\n value = value.toJSON(serializeFunctions);\n }\n\n result[field] = value;\n }\n }\n\n return result;\n },\n\n get: function(field) {\n var that = this, result;\n\n that.trigger(GET, { field: field });\n\n if (field === \"this\") {\n result = that;\n } else {\n result = kendo.getter(field, true)(that);\n }\n\n return result;\n },\n\n _set: function(field, value) {\n var that = this;\n var composite = field.indexOf(\".\") >= 0;\n\n if (composite) {\n var paths = field.split(\".\"),\n path = \"\";\n\n while (paths.length > 1) {\n path += paths.shift();\n var obj = kendo.getter(path, true)(that);\n if (obj instanceof ObservableObject) {\n obj.set(paths.join(\".\"), value);\n return composite;\n }\n path += \".\";\n }\n }\n\n kendo.setter(field)(that, value);\n\n return composite;\n },\n\n set: function(field, value) {\n var that = this,\n isSetPrevented = false,\n composite = field.indexOf(\".\") >= 0,\n current = kendo.getter(field, true)(that);\n\n if (current !== value) {\n if (current instanceof Observable && this._handlers[field]) {\n if (this._handlers[field].get) {\n current.unbind(GET, this._handlers[field].get);\n }\n current.unbind(CHANGE, this._handlers[field].change);\n }\n\n isSetPrevented = that.trigger(\"set\", { field: field, value: value });\n\n if (!isSetPrevented) {\n if (!composite) {\n value = that.wrap(value, field, function() { return that; });\n }\n if ((!that._set(field, value) || field.indexOf(\"(\") >= 0 || field.indexOf(\"[\") >= 0)) {\n that.trigger(CHANGE, { field: field });\n }\n }\n }\n\n return isSetPrevented;\n },\n\n parent: noop,\n\n wrap: function(object, field, parent) {\n var that = this;\n var get;\n var change;\n var type = toString.call(object);\n\n if (object != null && (type === \"[object Object]\" || type === \"[object Array]\")) {\n var isObservableArray = object instanceof ObservableArray;\n var isDataSource = object instanceof DataSource;\n\n if (type === \"[object Object]\" && !isDataSource && !isObservableArray) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n\n get = eventHandler(that, GET, field, true);\n object.bind(GET, get);\n change = eventHandler(that, CHANGE, field, true);\n object.bind(CHANGE, change);\n\n that._handlers[field] = { get: get, change: change };\n } else if (type === \"[object Array]\" || isObservableArray || isDataSource) {\n if (!isObservableArray && !isDataSource) {\n object = new ObservableArray(object);\n }\n\n change = eventHandler(that, CHANGE, field, false);\n\n object.bind(CHANGE, change);\n\n that._handlers[field] = { change: change };\n }\n\n object.parent = parent;\n }\n\n return object;\n }\n });\n\n function equal(x, y) {\n if (x === y) {\n return true;\n }\n\n var xtype = kendo.type(x), ytype = kendo.type(y), field;\n\n if (xtype !== ytype) {\n return false;\n }\n\n if (xtype === \"date\") {\n return x.getTime() === y.getTime();\n }\n\n if (xtype !== \"object\" && xtype !== \"array\") {\n return false;\n }\n\n for (field in x) {\n if (!equal(x[field], y[field])) {\n return false;\n }\n }\n\n return true;\n }\n\n var parsers = {\n \"number\": function(value) {\n if (typeof value === STRING && value.toLowerCase() === \"null\") {\n return null;\n }\n return kendo.parseFloat(value);\n },\n\n \"date\": function(value) {\n if (typeof value === STRING && value.toLowerCase() === \"null\") {\n return null;\n }\n return kendo.parseDate(value);\n },\n\n \"boolean\": function(value) {\n if (typeof value === STRING) {\n if (value.toLowerCase() === \"null\") {\n return null;\n } else {\n return value.toLowerCase() === \"true\";\n }\n }\n return value != null ? !!value : value;\n },\n\n \"string\": function(value) {\n if (typeof value === STRING && value.toLowerCase() === \"null\") {\n return null;\n }\n return value != null ? (value + \"\") : value;\n },\n\n \"default\": function(value) {\n return value;\n }\n };\n\n var defaultValues = {\n \"string\": \"\",\n \"number\": 0,\n \"date\": new Date(),\n \"boolean\": false,\n \"default\": \"\"\n };\n\n function getFieldByName(obj, name) {\n var field,\n fieldName;\n\n for (fieldName in obj) {\n field = obj[fieldName];\n if (isPlainObject(field) && field.field && field.field === name) {\n return field;\n } else if (field === name) {\n return field;\n }\n }\n return null;\n }\n\n var Model = ObservableObject.extend({\n init: function(data) {\n var that = this;\n\n if (!data || $.isEmptyObject(data)) {\n data = $.extend({}, that.defaults, data);\n\n if (that._initializers) {\n for (var idx = 0; idx < that._initializers.length; idx++) {\n var name = that._initializers[idx];\n data[name] = that.defaults[name]();\n }\n }\n }\n\n ObservableObject.fn.init.call(that, data);\n\n that.dirty = false;\n that.dirtyFields = {};\n\n if (that.idField) {\n that.id = that.get(that.idField);\n\n if (that.id === undefined$1) {\n that.id = that._defaultId;\n }\n }\n },\n\n shouldSerialize: function(field) {\n return ObservableObject.fn.shouldSerialize.call(this, field) &&\n field !== \"uid\" && !(this.idField !== \"id\" && field === \"id\") &&\n field !== \"dirty\" && field !== \"dirtyFields\" && field !== \"_accessors\";\n },\n\n _parse: function(field, value) {\n var that = this,\n fieldName = field,\n fields = (that.fields || {}),\n parse;\n\n field = fields[field];\n if (!field) {\n field = getFieldByName(fields, fieldName);\n }\n if (field) {\n parse = field.parse;\n if (!parse && field.type) {\n parse = parsers[field.type.toLowerCase()];\n }\n }\n\n return parse ? parse(value) : value;\n },\n\n _notifyChange: function(e) {\n var action = e.action;\n\n if (action == \"add\" || action == \"remove\") {\n this.dirty = true;\n this.dirtyFields[e.field] = true;\n }\n },\n\n editable: function(field) {\n field = (this.fields || {})[field];\n return field ? field.editable !== false : true;\n },\n\n set: function(field, value) {\n var that = this;\n var dirty = that.dirty;\n\n if (that.editable(field)) {\n value = that._parse(field, value);\n\n if (!equal(value, that.get(field))) {\n that.dirty = true;\n that.dirtyFields[field] = true;\n\n if (ObservableObject.fn.set.call(that, field, value) && !dirty) {\n that.dirty = dirty;\n\n if (!that.dirty) {\n that.dirtyFields[field] = false;\n }\n }\n } else {\n that.trigger(\"equalSet\", { field: field, value: value });\n }\n }\n },\n\n accept: function(data) {\n var that = this,\n parent = function() { return that; },\n field;\n\n for (field in data) {\n var value = data[field];\n\n if (field.charAt(0) != \"_\") {\n value = that.wrap(data[field], field, parent);\n }\n\n that._set(field, value);\n }\n\n if (that.idField) {\n that.id = that.get(that.idField);\n }\n\n that.dirty = false;\n that.dirtyFields = {};\n },\n\n isNew: function() {\n return this.id === this._defaultId;\n }\n });\n\n Model.define = function(base, options) {\n if (options === undefined$1) {\n options = base;\n base = Model;\n }\n\n var model,\n proto = extend({ defaults: {} }, options),\n name,\n field,\n type,\n value,\n idx,\n length,\n fields = {},\n originalName,\n id = proto.id,\n functionFields = [];\n\n if (id) {\n proto.idField = id;\n }\n\n if (proto.id) {\n delete proto.id;\n }\n\n if (id) {\n proto.defaults[id] = proto._defaultId = \"\";\n }\n\n if (toString.call(proto.fields) === \"[object Array]\") {\n for (idx = 0, length = proto.fields.length; idx < length; idx++) {\n field = proto.fields[idx];\n if (typeof field === STRING) {\n fields[field] = {};\n } else if (field.field) {\n fields[field.field] = field;\n }\n }\n proto.fields = fields;\n }\n\n for (name in proto.fields) {\n field = proto.fields[name];\n type = field.type || \"default\";\n value = null;\n originalName = name;\n\n name = typeof (field.field) === STRING ? field.field : name;\n\n if (!field.nullable || field.defaultValue) {\n value = proto.defaults[originalName !== name ? originalName : name] = field.defaultValue !== undefined$1 ? field.defaultValue : defaultValues[type.toLowerCase()];\n\n if (typeof value === \"function\") {\n functionFields.push(name);\n }\n }\n\n if (options.id === name) {\n proto._defaultId = value;\n }\n\n proto.defaults[originalName !== name ? originalName : name] = value;\n\n if ($.isPlainObject(field)) {\n field.parse = field.parse || parsers[type];\n } else {\n field = {\n parse: parsers[type]\n };\n }\n }\n\n if (functionFields.length > 0) {\n proto._initializers = functionFields;\n }\n\n model = base.extend(proto);\n model.define = function(options) {\n return Model.define(model, options);\n };\n\n if (proto.fields) {\n model.fields = proto.fields;\n model.idField = proto.idField;\n }\n\n return model;\n };\n\n var Comparer = {\n selector: function(field) {\n return isFunction(field) ? field : getter(field);\n },\n\n compare: function(field) {\n var selector = this.selector(field);\n return function(a, b) {\n a = selector(a);\n b = selector(b);\n\n if (a == null && b == null) {\n return 0;\n }\n\n if (a == null) {\n return -1;\n }\n\n if (b == null) {\n return 1;\n }\n\n if (a.localeCompare) {\n return a.localeCompare(b);\n }\n\n return a > b ? 1 : (a < b ? -1 : 0);\n };\n },\n\n create: function(sort) {\n var compare = sort.compare || this.compare(sort.field);\n\n if (sort.dir == \"desc\") {\n return function(a, b) {\n return compare(b, a, true);\n };\n }\n\n return compare;\n },\n\n combine: function(comparers) {\n return function(a, b) {\n var result = comparers[0](a, b),\n idx,\n length;\n\n for (idx = 1, length = comparers.length; idx < length; idx ++) {\n result = result || comparers[idx](a, b);\n }\n\n return result;\n };\n }\n };\n\n var StableComparer = extend({}, Comparer, {\n asc: function(field) {\n var selector = this.selector(field);\n return function(a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n\n if (valueA == null) {\n return -1;\n }\n\n if (valueB == null) {\n return 1;\n }\n\n if (valueA.localeCompare) {\n return valueA.localeCompare(valueB);\n }\n\n return valueA > valueB ? 1 : -1;\n };\n },\n\n desc: function(field) {\n var selector = this.selector(field);\n return function(a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n\n if (valueA == null) {\n return 1;\n }\n\n if (valueB == null) {\n return -1;\n }\n\n if (valueB.localeCompare) {\n return valueB.localeCompare(valueA);\n }\n\n return valueA < valueB ? 1 : -1;\n };\n },\n create: function(sort) {\n return this[sort.dir](sort.field);\n }\n });\n\n map = function(array, callback) {\n var idx, length = array.length, result = new Array(length);\n\n for (idx = 0; idx < length; idx++) {\n result[idx] = callback(array[idx], idx, array);\n }\n\n return result;\n };\n\n var operators = (function() {\n\n function quote(str) {\n if (typeof str == \"string\") {\n str = str.replace(/[\\r\\n]+/g, \"\");\n }\n return JSON.stringify(str);\n }\n\n function textOp(impl) {\n return function(a, b, ignore, accentFoldingFiltering) {\n b += \"\";\n if (ignore) {\n a = \"(\" + a + \" + '').toString()\" + ((accentFoldingFiltering) ? \".toLocaleLowerCase('\" + accentFoldingFiltering + \"')\" : \".toLowerCase()\");\n b = ((accentFoldingFiltering) ? b.toLocaleLowerCase(accentFoldingFiltering) : b.toLowerCase());\n }\n return impl(a, quote(b), ignore);\n };\n }\n\n function operator(op, a, b, ignore, accentFoldingFiltering) {\n if (b != null) {\n if (typeof b === STRING) {\n var date = dateRegExp.exec(b);\n if (date) {\n b = new Date(+date[1]);\n } else if (ignore) {\n b = quote(((accentFoldingFiltering) ? b.toLocaleLowerCase(accentFoldingFiltering) : b.toLowerCase()));\n a = \"((\" + a + \" || '')+'')\" + ((accentFoldingFiltering) ? \".toLocaleLowerCase('\" + accentFoldingFiltering + \"')\" : \".toLowerCase()\");\n } else {\n b = quote(b);\n }\n }\n\n if (b.getTime) {\n //b looks like a Date\n a = \"(\" + a + \"&&\" + a + \".getTime?\" + a + \".getTime():\" + a + \")\";\n b = b.getTime();\n }\n }\n\n return a + \" \" + op + \" \" + b;\n }\n\n function getMatchRegexp(pattern) {\n // take a pattern, as supported by Excel match filter, and\n // convert it to the equivalent JS regular expression.\n // Excel patterns support:\n //\n // * - match any sequence of characters\n // ? - match a single character\n //\n // to match a literal * or ?, they must be prefixed by a tilde (~)\n for (var rx = \"/^\", esc = false, i = 0; i < pattern.length; ++i) {\n var ch = pattern.charAt(i);\n if (esc) {\n rx += \"\\\\\" + ch;\n } else if (ch == \"~\") {\n esc = true;\n continue;\n } else if (ch == \"*\") {\n rx += \".*\";\n } else if (ch == \"?\") {\n rx += \".\";\n } else if (\".+^$()[]{}|\\\\/\\n\\r\\u2028\\u2029\\xA0\".indexOf(ch) >= 0) {\n rx += \"\\\\\" + ch;\n } else {\n rx += ch;\n }\n esc = false;\n }\n return rx + \"$/\";\n }\n\n return {\n quote: function(value) {\n if (value && value.getTime) {\n return \"new Date(\" + value.getTime() + \")\";\n }\n return quote(value);\n },\n eq: function(a, b, ignore, accentFoldingFiltering) {\n return operator(\"==\", a, b, ignore, accentFoldingFiltering);\n },\n neq: function(a, b, ignore, accentFoldingFiltering) {\n return operator(\"!=\", a, b, ignore, accentFoldingFiltering);\n },\n gt: function(a, b, ignore) {\n return operator(\">\", a, b, ignore);\n },\n gte: function(a, b, ignore) {\n return operator(\">=\", a, b, ignore);\n },\n lt: function(a, b, ignore) {\n return operator(\"<\", a, b, ignore);\n },\n lte: function(a, b, ignore) {\n return operator(\"<=\", a, b, ignore);\n },\n startswith: textOp(function(a, b) {\n return a + \".lastIndexOf(\" + b + \", 0) == 0\";\n }),\n doesnotstartwith: textOp(function(a, b) {\n return a + \".lastIndexOf(\" + b + \", 0) == -1\";\n }),\n endswith: textOp(function(a, b) {\n var n = b ? b.length - 2 : 0;\n return a + \".indexOf(\" + b + \", \" + a + \".length - \" + n + \") >= 0\";\n }),\n doesnotendwith: textOp(function(a, b) {\n var n = b ? b.length - 2 : 0;\n return a + \".indexOf(\" + b + \", \" + a + \".length - \" + n + \") < 0\";\n }),\n contains: textOp(function(a, b) {\n return a + \".indexOf(\" + b + \") >= 0\";\n }),\n doesnotcontain: textOp(function(a, b) {\n return a + \".indexOf(\" + b + \") == -1\";\n }),\n matches: textOp(function(a, b) {\n b = b.substring(1, b.length - 1);\n return getMatchRegexp(b) + \".test(\" + a + \")\";\n }),\n doesnotmatch: textOp(function(a, b) {\n b = b.substring(1, b.length - 1);\n return \"!\" + getMatchRegexp(b) + \".test(\" + a + \")\";\n }),\n isempty: function(a) {\n return a + \" === ''\";\n },\n isnotempty: function(a) {\n return a + \" !== ''\";\n },\n isnull: function(a) {\n return \"(\" + a + \" == null)\";\n },\n isnotnull: function(a) {\n return \"(\" + a + \" != null)\";\n },\n isnullorempty: function(a) {\n return \"(\" + a + \" === null) || (\" + a + \" === '')\";\n },\n isnotnullorempty: function(a) {\n return \"(\" + a + \" !== null) && (\" + a + \" !== '')\";\n }\n };\n })();\n\n function Query(data) {\n this.data = data || [];\n }\n\n // Continue to support legacy unsafe-eval for the spreadsheet\n Query.filterExpr = function(expression, options = { noEval: false }) {\n if (options.noEval) {\n // using no-eval for most cases\n return filterExprNoEval(expression);\n }\n\n var expressions = [],\n logic = { and: \" && \", or: \" || \" },\n idx,\n length,\n filter,\n expr,\n fieldFunctions = [],\n operatorFunctions = [],\n field,\n operator,\n filters = expression.filters;\n\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n operator = filter.operator;\n\n if (filter.filters) {\n expr = Query.filterExpr(filter);\n //Nested function fields or operators - update their index e.g. __o[0] -> __o[1]\n filter = expr.expression\n .replace(/__o\\[(\\d+)\\]/g, function(match, index) {\n index = +index;\n return \"__o[\" + (operatorFunctions.length + index) + \"]\";\n })\n .replace(/__f\\[(\\d+)\\]/g, function(match, index) {\n index = +index;\n return \"__f[\" + (fieldFunctions.length + index) + \"]\";\n });\n\n operatorFunctions.push.apply(operatorFunctions, expr.operators);\n fieldFunctions.push.apply(fieldFunctions, expr.fields);\n } else {\n if (typeof field === FUNCTION) {\n expr = \"__f[\" + fieldFunctions.length + \"](d)\";\n fieldFunctions.push(field);\n } else {\n expr = kendo.expr(field);\n }\n\n if (typeof operator === FUNCTION) {\n filter = \"__o[\" + operatorFunctions.length + \"](\" + expr + \", \" + operators.quote(filter.value) + \")\";\n operatorFunctions.push(operator);\n } else {\n filter = operators[(operator || \"eq\").toLowerCase()](expr, filter.value, filter.ignoreCase !== undefined$1 ? filter.ignoreCase : true, expression.accentFoldingFiltering);\n }\n }\n\n expressions.push(filter);\n }\n\n return { expression: \"(\" + expressions.join(logic[expression.logic]) + \")\", fields: fieldFunctions, operators: operatorFunctions };\n };\n\n function normalizeSort(field, dir) {\n if (field) {\n var descriptor = typeof field === STRING ? { field: field, dir: dir } : field,\n descriptors = isArray(descriptor) ? descriptor : (descriptor !== undefined$1 ? [descriptor] : []);\n\n return grep(descriptors, function(d) { return !!d.dir; });\n }\n }\n\n function sortFields(sorts, dir) {\n var sortObject = {};\n\n if (sorts) {\n var descriptor = typeof sorts === STRING ? { field: sorts, dir: dir } : sorts,\n descriptors = isArray(descriptor) ? descriptor : (descriptor !== undefined$1 ? [descriptor] : []);\n\n for (var i = 0; i < descriptors.length; i++) {\n sortObject[descriptors[i].field] = { dir: descriptors[i].dir, index: i + 1 };\n }\n }\n\n return sortObject;\n }\n\n var operatorMap = {\n \"==\": \"eq\",\n equals: \"eq\",\n isequalto: \"eq\",\n equalto: \"eq\",\n equal: \"eq\",\n \"!=\": \"neq\",\n ne: \"neq\",\n notequals: \"neq\",\n isnotequalto: \"neq\",\n notequalto: \"neq\",\n notequal: \"neq\",\n \"<\": \"lt\",\n islessthan: \"lt\",\n lessthan: \"lt\",\n less: \"lt\",\n \"<=\": \"lte\",\n le: \"lte\",\n islessthanorequalto: \"lte\",\n lessthanequal: \"lte\",\n \">\": \"gt\",\n isgreaterthan: \"gt\",\n greaterthan: \"gt\",\n greater: \"gt\",\n \">=\": \"gte\",\n isgreaterthanorequalto: \"gte\",\n greaterthanequal: \"gte\",\n ge: \"gte\",\n notsubstringof: \"doesnotcontain\",\n isnull: \"isnull\",\n isempty: \"isempty\",\n isnotempty: \"isnotempty\"\n };\n\n function normalizeOperator(expression) {\n var idx,\n length,\n filter,\n operator,\n filters = expression.filters;\n\n if (filters) {\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n operator = filter.operator;\n\n if (operator && typeof operator === STRING) {\n filter.operator = operatorMap[operator.toLowerCase()] || operator;\n }\n\n normalizeOperator(filter);\n }\n }\n }\n\n function normalizeFilter(expression) {\n if (expression && !isEmptyObject(expression)) {\n if (isArray(expression) || !expression.filters) {\n expression = {\n logic: \"and\",\n filters: isArray(expression) ? expression : [expression]\n };\n }\n\n normalizeOperator(expression);\n\n return expression;\n }\n }\n\n Query.normalizeFilter = normalizeFilter;\n\n function compareDescriptor(f1, f2) {\n if (f1.logic || f2.logic) {\n return false;\n }\n\n return f1.field === f2.field && f1.value === f2.value && f1.operator === f2.operator;\n }\n\n function normalizeDescriptor(filter) {\n filter = filter || {};\n\n if (isEmptyObject(filter)) {\n return { logic: \"and\", filters: [] };\n }\n\n return normalizeFilter(filter);\n }\n\n function fieldComparer(a, b) {\n if (b.logic || (a.field > b.field)) {\n return 1;\n } else if (a.field < b.field) {\n return -1;\n } else {\n return 0;\n }\n }\n\n function 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 cleanObject = JSON.parse(kendo.stringify(item[key])),\n cleanObjectKeys = Object.keys(cleanObject).map((k) => key + \".\" + k);\n\n result.push(...cleanObjectKeys);\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\n clearTimeout(that._timeout);\n that._timeout = setTimeout(function() {\n that._queueRequest(data, function() {\n if (!that.trigger(REQUESTSTART, {\n type: \"read\"\n })) {\n that.transport.read({\n data: data,\n success: that._groupItemsSuccessHandler(group, options.skip, that.take(), callback, groupItemsSkip),\n error: function() {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n }\n });\n } else {\n that._dequeueRequest();\n }\n });\n }, 100);\n },\n\n _groupItemsSuccessHandler: function(group, skip, take, callback, groupItemsSkip) {\n var that = this;\n var timestamp = that._timeStamp();\n callback = isFunction(callback) ? callback : noop;\n var totalField = that.options.schema && that.options.schema.total ? that.options.schema.total : \"Total\";\n\n return function(data) {\n var temp;\n var model = Model.define(that.options.schema.model);\n var totalCount;\n\n that._dequeueRequest();\n\n that.trigger(REQUESTEND, {\n response: data,\n type: \"read\"\n });\n\n if (isFunction(totalField)) {\n totalCount = totalField(data);\n } else {\n totalCount = data[totalField];\n }\n\n data = that.reader.parse(data);\n\n if (group.hasSubgroups) {\n temp = that.reader.groups(data);\n group.subgroupCount = totalCount;\n } else {\n temp = that.reader.data(data);\n temp = temp.map(function(item) {\n return new model(item);\n });\n }\n\n group.items.omitChangeEvent = true;\n for (var i = 0; i < totalCount; i++) {\n if (i >= groupItemsSkip && i < (groupItemsSkip + take) ) {\n group.items.splice(i, 1, temp[i - groupItemsSkip]);\n } else {\n if (!group.items[i]) {\n group.items.splice(i, 0, { notFetched: true });\n }\n }\n }\n group.items.omitChangeEvent = false;\n\n that._updateRangePristineData(group);\n that._fetchingGroupItems = false;\n\n if (!group.countAdded) {\n that._serverGroupsTotal += totalCount;\n group.countAdded = true;\n }\n\n that.range(skip, take, callback, \"expandGroup\");\n\n if (timestamp >= that._currentRequestTimeStamp || !that._skipRequestsInProgress) {\n that.trigger(CHANGE, {});\n }\n };\n },\n\n findSubgroups: function(group) {\n var indexOfCurrentGroup = this._group.map(function(g) {\n return g.field;\n }).indexOf(group.field);\n\n return this._group.slice(indexOfCurrentGroup + 1, this._group.length);\n },\n\n _composeItemsFilter: function(group, parents) {\n var filter = {\n logic: \"and\",\n filters: []\n };\n\n if (this.filter()) {\n filter.filters.push(this.filter());\n }\n\n filter = extend(true, {}, filter);\n filter.filters.push({\n field: group.field,\n operator: \"eq\",\n value: group.value\n });\n\n if (parents) {\n for (var i = 0; i < parents.length; i++) {\n filter.filters.push({\n field: parents[i].field,\n operator: \"eq\",\n value: parents[i].value\n });\n }\n }\n\n return filter;\n },\n\n _updateRangePristineData: function(group) {\n var that = this;\n var ranges = that._ranges;\n var rangesLength = ranges.length;\n var temp;\n var currentGroup;\n var range;\n var dataLength;\n var indexes;\n var currIdx;\n\n for (var i = 0; i < rangesLength; i++) {\n range = ranges[i];\n dataLength = range.data.length;\n indexes = [];\n temp = null;\n\n for (var j = 0; j < dataLength; j++) {\n currentGroup = range.data[j];\n indexes.push(j);\n\n if ((currentGroup.uid === group.uid) || (currentGroup.hasSubgroups && currentGroup.items.length && that._containsSubGroup(currentGroup, group, indexes))) {\n break;\n }\n indexes.pop();\n }\n\n if (indexes.length) {\n temp = ranges[i].pristineData;\n\n while (indexes.length > 1) {\n currIdx = indexes.splice(0, 1)[0];\n temp = temp[currIdx].items;\n }\n temp[indexes[0]] = that._cloneGroup(group);\n break;\n }\n }\n },\n\n _containsSubGroup: function(group, subgroup, indexes) {\n var that = this;\n var length = group.items.length;\n var currentSubGroup;\n\n if (group.hasSubgroups && length) {\n for (var i = 0; i < length; i++) {\n currentSubGroup = group.items[i];\n indexes.push(i);\n if (currentSubGroup.uid === subgroup.uid ||\n (currentSubGroup.hasSubgroups &&\n currentSubGroup.items.length &&\n that._containsSubGroup(currentSubGroup, subgroup, indexes))) {\n return true;\n }\n indexes.pop();\n }\n }\n\n },\n\n _cloneGroup: function(group) {\n var that = this;\n group = typeof group.toJSON == \"function\" ? group.toJSON() : group;\n\n if (group.items && group.items.length) {\n group.items = group.items.map(function(item) {\n return that._cloneGroup(item);\n });\n }\n\n return group;\n },\n\n _setFilterTotal: function(filterTotal, setDefaultValue) {\n var that = this;\n\n if (!that.options.serverFiltering) {\n if (filterTotal !== undefined$1) {\n that._total = filterTotal;\n } else if (setDefaultValue) {\n that._total = that._data.length;\n }\n }\n },\n\n fetch: function(callback) {\n var that = this;\n var fn = function(isPrevented) {\n if (isPrevented !== true && isFunction(callback)) {\n callback.call(that);\n }\n };\n\n return this._query().done(fn);\n },\n\n _query: function(options) {\n var that = this;\n\n return that.query(extend({}, {\n page: that.page(),\n pageSize: that.pageSize(),\n sort: that.sort(),\n filter: that.filter(),\n group: that.group(),\n aggregate: that.aggregate()\n }, options));\n },\n\n next: function(options) {\n var that = this,\n page = that.page(),\n total = that.total();\n\n options = options || {};\n\n if (!page || (total && page + 1 > that.totalPages())) {\n return;\n }\n\n that._skip = that._currentRangeStart = page * that.take();\n\n page += 1;\n options.page = page;\n\n that._query(options);\n\n return page;\n },\n\n prev: function(options) {\n var that = this,\n page = that.page();\n\n options = options || {};\n\n if (!page || page === 1) {\n return;\n }\n\n that._skip = that._currentRangeStart = that._skip - that.take();\n\n page -= 1;\n options.page = page;\n\n that._query(options);\n\n return page;\n },\n\n page: function(val) {\n var that = this,\n skip;\n\n if (val !== undefined$1) {\n val = math.max(math.min(math.max(val, 1), that.totalPages()), 1);\n var take = that.take();\n\n if (that._isGroupPaged()) {\n val -= 1;\n that.range(val * take, take, null, \"page\");\n return;\n }\n that._query(that._pageableQueryOptions({ page: val }));\n return;\n }\n skip = that.skip();\n\n return skip !== undefined$1 ? math.round((skip || 0) / (that.take() || 1)) + 1 : undefined$1;\n },\n\n pageSize: function(val) {\n var that = this;\n\n if (val !== undefined$1) {\n that._query(that._pageableQueryOptions({ pageSize: val, page: 1 }));\n return;\n }\n\n return that.take();\n },\n\n sort: function(val) {\n var that = this;\n\n if (val !== undefined$1) {\n that.trigger(\"sort\");\n that._query({ sort: val });\n return;\n }\n\n return that._sort;\n },\n\n filter: function(val) {\n var that = this;\n\n if (val === undefined$1) {\n return that._filter;\n }\n\n that.trigger(\"reset\");\n that._query({ filter: val, page: 1 });\n },\n\n group: function(val) {\n var that = this;\n var options = { group: val };\n\n if (that._groupPaging) {\n // clear ranges if ungrouping is performed\n if (val !== undefined$1 && (!val || !val.length) ) {\n that._ranges = [];\n }\n options.page = 1;\n }\n\n if (val !== undefined$1) {\n that._query(options);\n return;\n }\n\n return that._group;\n },\n\n getGroupsFlat: function(data) {\n var idx,\n result = [],\n length;\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n var group = data[idx];\n if (group.hasSubgroups) {\n result = result.concat(this.getGroupsFlat(group.items));\n }\n\n result.push(group);\n }\n\n return result;\n },\n\n total: function() {\n return parseInt(this._total || 0, 10);\n },\n\n groupsTotal: function(includeExpanded) {\n var that = this;\n\n if (!that._group.length) {\n return that.total();\n }\n\n if (that._isServerGrouped()) {\n if (that._serverGroupsTotal) {\n return that._serverGroupsTotal;\n }\n that._serverGroupsTotal = that.total();\n\n return that._serverGroupsTotal;\n }\n\n return that._calculateGroupsTotal(that._ranges.length ? that._ranges[0].data : [], includeExpanded);\n },\n\n _calculateGroupsTotal: function(groups, includeExpanded, itemsField, ignoreState) {\n var that = this;\n itemsField = itemsField || \"items\";\n var total;\n var length;\n\n if (that._group.length && groups) {\n total = 0;\n length = groups.length;\n\n for (var i = 0; i < length; i++) {\n total += that.groupCount(groups[i], includeExpanded, itemsField, ignoreState);\n }\n that._groupsTotal = total;\n return total;\n }\n\n that._groupsTotal = that._data.length;\n return that._groupsTotal;\n },\n\n groupCount: function(group, includeExpanded, itemsField, ignoreState) {\n var that = this;\n var total = 0;\n\n if (group.hasSubgroups && that._groupsState[group.uid]) {\n if (includeExpanded && !group.excludeHeader || ignoreState) {\n total += 1;\n }\n\n group[itemsField].forEach(function(subgroup) {\n total += that.groupCount(subgroup, includeExpanded, itemsField, ignoreState);\n });\n } else {\n if (that._groupsState[group.uid]) {\n if (includeExpanded && !group.excludeHeader || ignoreState) {\n total++;\n }\n total += group[itemsField] ? group[itemsField].length : 0;\n } else {\n total++;\n }\n }\n return total;\n },\n\n countGroupRange: function(range) {\n var total = 0;\n var length = range.length;\n\n for (var i = 0; i < length; i++) {\n total += this.groupCount(range[i], true);\n }\n\n return total;\n },\n\n aggregate: function(val) {\n var that = this;\n\n if (val !== undefined$1) {\n that._query({ aggregate: val });\n return;\n }\n\n return that._aggregate;\n },\n\n aggregates: function() {\n var result = this._aggregateResult;\n\n if (isEmptyObject(result)) {\n result = this._emptyAggregates(this.aggregate());\n }\n\n return result;\n },\n\n _emptyAggregates: function(aggregates) {\n var result = {};\n\n if (!isEmptyObject(aggregates)) {\n var aggregate = {};\n\n if (!isArray(aggregates)) {\n aggregates = [aggregates];\n }\n\n for (var idx = 0; idx < aggregates.length; idx++) {\n aggregate[aggregates[idx].aggregate] = 0;\n result[aggregates[idx].field] = aggregate;\n }\n }\n\n return result;\n },\n\n _pageableQueryOptions: function(options) {\n return options;\n },\n\n _wrapInEmptyGroup: function(model) {\n var groups = this.group(),\n parent,\n group,\n idx,\n length;\n\n for (idx = groups.length - 1, length = 0; idx >= length; idx--) {\n group = groups[idx];\n parent = {\n value: model.get ? model.get(group.field) : model[group.field],\n field: group.field,\n items: parent ? [parent] : [model],\n hasSubgroups: !!parent,\n aggregates: this._emptyAggregates(group.aggregates)\n };\n }\n\n return parent;\n },\n\n totalPages: function() {\n var that = this,\n pageSize = that.pageSize() || that.total(),\n total = that._isGroupPaged() ? that.groupsTotal(true) : that.total();\n\n return math.ceil((total || 0) / pageSize);\n },\n\n inRange: function(skip, take) {\n var that = this,\n end = math.min(skip + take, that.total());\n\n if (!that.options.serverPaging && that._data.length > 0) {\n return true;\n }\n\n return that._findRange(skip, end).length > 0;\n },\n\n lastRange: function() {\n var ranges = this._ranges;\n return ranges[ranges.length - 1] || { start: 0, end: 0, data: [] };\n },\n\n firstItemUid: function() {\n var ranges = this._ranges;\n return ranges.length && ranges[0].data.length && ranges[0].data[0].uid;\n },\n\n enableRequestsInProgress: function() {\n this._skipRequestsInProgress = false;\n },\n\n _timeStamp: function() {\n return new Date().getTime();\n },\n\n range: function(skip, take, callback, action) {\n this._currentRequestTimeStamp = this._timeStamp();\n this._skipRequestsInProgress = true;\n var total = this._isGroupPaged() ? this.groupsTotal(true) : this.total();\n\n if (action === \"expandGroup\" || action === \"collapseGroup\") {\n this._updateOuterRangesLength();\n }\n\n skip = math.min(skip || 0, total);\n callback = isFunction(callback) ? callback : noop;\n\n var that = this,\n pageSkip = math.max(math.floor(skip / take), 0) * take,\n size = math.min(pageSkip + take, total),\n data;\n\n data = that._findRange(skip, math.min(skip + take, total), callback);\n\n if ((data.length || total === 0) && !that._fetchingGroupItems) {\n that._processRangeData(data, skip, take, that._originalPageSkip || pageSkip, that._originalSize || size, {\n action: action\n });\n that._originalPageSkip = null;\n that._originalSize = null;\n callback();\n return;\n }\n\n if (that._isGroupPaged()) {\n that._originalPageSkip = pageSkip;\n that._originalSize = size;\n\n pageSkip = math.max(math.floor(that._adjustPageSkip(skip, take) / take), 0) * take;\n size = math.min(pageSkip + take, total);\n }\n\n if (take !== undefined$1 && !that._fetchingGroupItems) {\n if ((that._isGroupPaged() && !that._groupRangeExists(pageSkip, take)) || !that._rangeExists(pageSkip, size)) {\n that.prefetch(pageSkip, take, function() {\n if (skip > pageSkip && size < that.total() && !that._rangeExists(size, math.min(size + take, that.total()))) {\n that.prefetch(size, take, function() {\n that.range(skip, take, callback );\n });\n } else {\n that.range(skip, take, callback);\n }\n });\n } else if (pageSkip < skip) {\n that.prefetch(size, take, function() {\n that.range(skip, take, callback );\n });\n }\n }\n },\n\n _findRange: function(start, end, callback) {\n var that = this,\n ranges = that._ranges,\n range,\n data = [],\n skipIdx,\n takeIdx,\n startIndex,\n endIndex,\n rangeData,\n rangeEnd,\n processed,\n options = that.options,\n remote = options.serverSorting || options.serverPaging || options.serverFiltering || options.serverGrouping || options.serverAggregates,\n flatData,\n count,\n length,\n groupMapOptions = {\n take: end - start,\n skip: start,\n skipped: 0,\n taken: 0,\n includeParents: true\n },\n prevRangeEnd,\n isGroupPaged = that._isGroupPaged(),\n startField = isGroupPaged ? \"outerStart\" : \"start\",\n endField = isGroupPaged ? \"outerEnd\" : \"end\",\n currentDataLength;\n\n for (skipIdx = 0, length = ranges.length; skipIdx < length; skipIdx++) {\n range = ranges[skipIdx];\n\n if (isGroupPaged) {\n if (range.outerStart >= end) {\n return [];\n }\n\n if (start > range.outerEnd) {\n groupMapOptions.skipped += range.outerEnd - (prevRangeEnd || 0);\n prevRangeEnd = range.outerEnd;\n continue;\n }\n\n if (typeof prevRangeEnd !== \"undefined\" && prevRangeEnd != range.outerStart) {\n groupMapOptions.skipped += range.outerStart - prevRangeEnd;\n }\n\n if (groupMapOptions.skipped > groupMapOptions.skip) {\n return [];\n }\n\n if (typeof prevRangeEnd === \"undefined\" && start > 0 && range.start > 0) {\n groupMapOptions.skipped = range.outerStart;\n }\n\n takeIdx = skipIdx;\n while (true) {\n this._findGroupedRange(range.data, data, groupMapOptions, null, callback);\n currentDataLength = that._calculateGroupsTotal(data, true, \"currentItems\");\n\n if (currentDataLength >= groupMapOptions.take) {\n return data;\n }\n\n if (that._fetchingGroupItems) {\n return [];\n }\n takeIdx++;\n\n if (ranges[takeIdx] && ranges[takeIdx].outerStart === range.outerEnd) {\n range = ranges[takeIdx];\n } else {\n break;\n }\n }\n } else if (start >= range[startField] && start <= range[endField]) {\n count = 0;\n\n for (takeIdx = skipIdx; takeIdx < length; takeIdx++) {\n range = ranges[takeIdx];\n flatData = that._flatData(range.data, true);\n\n if (flatData.length && start + count >= range.start) {\n rangeData = range.data;\n rangeEnd = range.end;\n\n if (!remote) {\n if (options.inPlaceSort) {\n processed = that._queryProcess(range.data, { filter: that.filter() });\n } else {\n var sort = normalizeGroupWithoutCompare(that.group() || []).concat(normalizeSort(that.sort() || []));\n processed = that._queryProcess(range.data, { sort: sort, filter: that.filter() });\n }\n flatData = rangeData = processed.data;\n\n if (processed.total !== undefined$1) {\n rangeEnd = processed.total;\n }\n }\n\n startIndex = 0;\n if (start + count > range.start) {\n startIndex = (start + count) - range.start;\n }\n endIndex = flatData.length;\n if (rangeEnd > end) {\n endIndex = endIndex - (rangeEnd - end);\n }\n count += endIndex - startIndex;\n data = that._mergeGroups(data, rangeData, startIndex, endIndex);\n\n if (end <= range.end && count == end - start) {\n return data;\n }\n }\n }\n break;\n }\n prevRangeEnd = range.outerEnd;\n }\n return [];\n },\n\n _getRangesMismatch: function(pageSkip) {\n var that = this;\n var ranges = that._ranges;\n var mismatch = 0;\n var i = 0;\n\n while (true) {\n var range = ranges[i];\n if (!range || range.outerStart > pageSkip) {\n break;\n }\n\n if (range.outerEnd != range.end) {\n mismatch = range.outerEnd - range.end;\n }\n i++;\n }\n\n return mismatch;\n },\n\n _mergeGroups: function(data, range, skip, take) {\n if (this._isServerGrouped()) {\n var temp = range.toJSON(),\n prevGroup;\n\n if (data.length) {\n prevGroup = data[data.length - 1];\n }\n\n mergeGroups(prevGroup, temp, skip, take);\n\n return data.concat(temp);\n }\n return data.concat(range.slice(skip, take));\n },\n\n _processRangeData: function(data, skip, take, pageSkip, size, eventData) {\n var that = this;\n\n that._pending = undefined$1;\n\n that._skip = skip > that.skip() && !that._omitPrefetch ? math.min(size, (that.totalPages() - 1) * that.take()) : pageSkip;\n\n that._currentRangeStart = skip;\n\n that._take = take;\n\n var paging = that.options.serverPaging;\n var sorting = that.options.serverSorting;\n var filtering = that.options.serverFiltering;\n var aggregates = that.options.serverAggregates;\n try {\n that.options.serverPaging = true;\n if (!that._isServerGrouped() && !(that.group() && that.group().length)) {\n that.options.serverSorting = true;\n }\n that.options.serverFiltering = true;\n that.options.serverPaging = true;\n that.options.serverAggregates = true;\n\n if (paging) {\n that._detachObservableParents();\n that._data = data = that._observe(data);\n }\n that._process(data, eventData);\n } finally {\n that.options.serverPaging = paging;\n that.options.serverSorting = sorting;\n that.options.serverFiltering = filtering;\n that.options.serverAggregates = aggregates;\n }\n },\n\n skip: function() {\n var that = this;\n\n if (that._skip === undefined$1) {\n return (that._page !== undefined$1 ? (that._page - 1) * (that.take() || 1) : undefined$1);\n }\n return that._skip;\n },\n\n currentRangeStart: function() {\n return this._currentRangeStart || 0;\n },\n\n take: function() {\n return this._take || this._pageSize;\n },\n\n _prefetchSuccessHandler: function(skip, size, callback, force) {\n var that = this;\n var timestamp = that._timeStamp();\n\n return function(data) {\n var found = false,\n range = { start: skip, end: size, data: [], timestamp: that._timeStamp() },\n idx,\n length,\n temp;\n\n that._dequeueRequest();\n\n that.trigger(REQUESTEND, { response: data, type: \"read\" });\n\n data = that.reader.parse(data);\n\n temp = that._readData(data);\n\n if (temp.length) {\n for (idx = 0, length = that._ranges.length; idx < length; idx++) {\n if (that._ranges[idx].start === skip) {\n found = true;\n range = that._ranges[idx];\n\n if (!that._isGroupPaged()) {\n range.pristineData = temp;\n range.data = that._observe(temp);\n range.end = range.start + that._flatData(range.data, true).length;\n that._sortRanges();\n }\n\n break;\n }\n }\n\n if (!found) {\n that._addRange(that._observe(temp), skip);\n }\n }\n\n that._total = that.reader.total(data);\n\n if (force || (timestamp >= that._currentRequestTimeStamp || !that._skipRequestsInProgress)) {\n if (callback && temp.length) {\n callback();\n } else {\n that.trigger(CHANGE, {});\n }\n }\n };\n },\n\n prefetch: function(skip, take, callback) {\n var that = this,\n size = math.min(skip + take, that.total()),\n options = {\n take: take,\n skip: skip,\n page: skip / take + 1,\n pageSize: take,\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n };\n\n\n if ((that._isGroupPaged() && !that._isServerGrouped() && that._groupRangeExists(skip, size))) {\n if (callback) {\n callback();\n }\n return;\n }\n\n if ((that._isServerGroupPaged() && !that._groupRangeExists(skip, size)) || !that._rangeExists(skip, size)) {\n clearTimeout(that._timeout);\n\n that._timeout = setTimeout(function() {\n that._queueRequest(options, function() {\n if (!that.trigger(REQUESTSTART, { type: \"read\" })) {\n if (that._omitPrefetch) {\n that.trigger(PROGRESS);\n }\n that.transport.read({\n data: that._params(options),\n success: that._prefetchSuccessHandler(skip, size, callback),\n error: function() {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n }\n });\n } else {\n that._dequeueRequest();\n }\n });\n }, 100);\n } else if (callback) {\n callback();\n }\n },\n\n _multiplePrefetch: function(skip, take, callback) {\n var that = this,\n size = math.min(skip + take, that.total()),\n options = {\n take: take,\n skip: skip,\n page: skip / take + 1,\n pageSize: take,\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n };\n\n if (!that._rangeExists(skip, size)) {\n if (!that.trigger(REQUESTSTART, { type: \"read\" })) {\n that.transport.read({\n data: that._params(options),\n success: that._prefetchSuccessHandler(skip, size, callback, true)\n });\n }\n } else if (callback) {\n callback();\n }\n },\n\n _adjustPageSkip: function(start, take) {\n var that = this;\n var prevRange = that._getPrevRange(start);\n var result;\n var total = that.total();\n var mismatch;\n\n if (prevRange) {\n mismatch = that._getRangesMismatch(start);\n\n if (!mismatch) {\n return start;\n }\n start -= mismatch;\n }\n result = math.max(math.floor(start / take), 0) * take;\n\n if (result > total) {\n while (true) {\n result -= take;\n if (result < total) {\n break;\n }\n }\n }\n return result;\n },\n\n _getNextRange: function(end) {\n var that = this,\n ranges = that._ranges,\n idx,\n length;\n\n for (idx = 0, length = ranges.length; idx < length; idx++) {\n if (ranges[idx].start <= end && ranges[idx].end >= end) {\n return ranges[idx];\n }\n }\n },\n\n _getPrevRange: function(start) {\n var that = this,\n ranges = that._ranges,\n idx,\n range,\n length = ranges.length;\n\n for (idx = length - 1; idx >= 0; idx--) {\n if (ranges[idx].outerStart <= start) {\n range = ranges[idx];\n break;\n }\n\n }\n\n return range;\n },\n\n _rangeExists: function(start, end) {\n var that = this,\n ranges = that._ranges,\n idx,\n length;\n\n for (idx = 0, length = ranges.length; idx < length; idx++) {\n if (ranges[idx].start <= start && ranges[idx].end >= end) {\n return true;\n }\n }\n\n return false;\n },\n\n _groupRangeExists: function(start, end) {\n var that = this,\n ranges = that._ranges,\n idx,\n length,\n availableItemsCount = 0,\n total = that.groupsTotal(true);\n\n if (end > total && !that._isServerGrouped()) {\n end = total;\n }\n\n for (idx = 0, length = ranges.length; idx < length; idx++) {\n var range = ranges[idx];\n if (range.outerStart <= start && range.outerEnd >= start) {\n availableItemsCount += range.outerEnd - start;\n } else if (range.outerStart <= end && range.outerEnd >= end) {\n availableItemsCount += end - range.outerStart;\n }\n }\n\n return availableItemsCount >= end - start;\n },\n\n _getCurrentRangeSpan: function() {\n var that = this;\n var ranges = that._ranges;\n var start = that.currentRangeStart();\n var end = start + (that.take() || 0);\n var rangeSpan = [];\n var range;\n var idx;\n var length = ranges.length;\n\n for (idx = 0; idx < length; idx++) {\n range = ranges[idx];\n\n if ((range.start <= start && range.end >= start) || (range.start >= start && range.start <= end)) {\n rangeSpan.push(range);\n }\n }\n\n return rangeSpan;\n },\n\n _removeModelFromRanges: function(model) {\n var that = this;\n var range;\n\n for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\n range = this._ranges[idx];\n\n that._removeModelFromRange(range, model);\n }\n\n that._updateRangesLength();\n },\n\n _removeModelFromRange: function(range, model) {\n this._eachItem(range.data, function(data) {\n if (!data) {\n return;\n }\n for (var idx = 0; idx < data.length; idx++) {\n var dataItem = data[idx];\n\n if (dataItem.uid && dataItem.uid == model.uid) {\n [].splice.call(data, idx, 1);\n break;\n }\n }\n });\n },\n\n _insertModelInRange: function(index, model) {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var range;\n var i;\n\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n\n if (range.start <= index && range.end >= index) {\n if (!that._getByUid(model.uid, range.data)) {\n if (that._isServerGrouped()) {\n range.data.splice(index, 0, that._wrapInEmptyGroup(model));\n } else {\n range.data.splice(index, 0, model);\n }\n }\n\n break;\n }\n }\n\n that._updateRangesLength();\n },\n\n _updateRangesLength: function() {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var mismatchFound = false;\n var mismatchLength = 0;\n var lengthDifference = 0;\n var rangeLength;\n var range;\n var i;\n\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n rangeLength = that._isGroupPaged() ? range.data.length : that._flatData(range.data, true).length;\n lengthDifference = rangeLength - math.abs(range.end - range.start);\n\n if (!mismatchFound && lengthDifference !== 0) {\n mismatchFound = true;\n mismatchLength = lengthDifference;\n range.end += mismatchLength;\n continue;\n }\n\n if (mismatchFound) {\n range.start += mismatchLength;\n range.end += mismatchLength;\n }\n }\n },\n\n _updateOuterRangesLength: function() {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var mismatchLength = 0;\n var range;\n var i;\n var prevRange;\n var rangeLength;\n\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n rangeLength = that._isGroupPaged() ? that._calculateGroupsTotal(range.data, true, \"items\", true) : that._flatData(range.data, true).length;\n\n if (prevRange) {\n if (prevRange.end != range.start) {\n mismatchLength = range.start - prevRange.end;\n }\n range.outerStart = prevRange.outerEnd + mismatchLength;\n mismatchLength = 0;\n } else {\n range.outerStart = range.start;\n }\n\n range.outerEnd = range.outerStart + rangeLength;\n prevRange = range;\n }\n }\n });\n\n var Transport = {};\n\n Transport.create = function(options, data, dataSource) {\n var transport,\n transportOptions = options.transport ? $.extend({}, options.transport) : null;\n\n if (transportOptions) {\n transportOptions.read = typeof transportOptions.read === STRING ? { url: transportOptions.read } : transportOptions.read;\n\n if (options.type === \"jsdo\") {\n transportOptions.dataSource = dataSource;\n }\n\n if (options.type) {\n kendo.data.transports = kendo.data.transports || {};\n kendo.data.schemas = kendo.data.schemas || {};\n\n if (!kendo.data.transports[options.type]) {\n kendo.logToConsole(\"Unknown DataSource transport type '\" + options.type + \"'.\\nVerify that registration scripts for this type are included after Kendo UI on the page.\", \"warn\");\n } else if (!isPlainObject(kendo.data.transports[options.type])) {\n transport = new kendo.data.transports[options.type](extend(transportOptions, { data: data }));\n } else {\n transportOptions = extend(true, {}, kendo.data.transports[options.type], transportOptions);\n }\n\n options.schema = extend(true, {}, kendo.data.schemas[options.type], options.schema);\n }\n\n if (!transport) {\n transport = isFunction(transportOptions.read) ? transportOptions : new RemoteTransport(transportOptions);\n }\n } else {\n transport = new LocalTransport({ data: options.data || [] });\n }\n return transport;\n };\n\n DataSource.create = function(options) {\n if (isArray(options) || options instanceof ObservableArray) {\n options = { data: options };\n }\n\n var dataSource = options || {},\n data = dataSource.data,\n fields = dataSource.fields,\n table = dataSource.table,\n select = dataSource.select,\n idx,\n length,\n model = {},\n field;\n\n if (!data && fields && !dataSource.transport) {\n if (table) {\n data = inferTable(table, fields);\n } else if (select) {\n data = inferSelect(select, fields);\n\n if (dataSource.group === undefined$1 && data[0] && data[0].optgroup !== undefined$1) {\n dataSource.group = \"optgroup\";\n }\n }\n }\n\n if (kendo.data.Model && fields && (!dataSource.schema || !dataSource.schema.model)) {\n for (idx = 0, length = fields.length; idx < length; idx++) {\n field = fields[idx];\n if (field.type) {\n model[field.field] = field;\n }\n }\n\n if (!isEmptyObject(model)) {\n dataSource.schema = extend(true, dataSource.schema, { model: { fields: model } });\n }\n }\n\n dataSource.data = data;\n\n select = null;\n dataSource.select = null;\n table = null;\n dataSource.table = null;\n\n return dataSource instanceof DataSource ? dataSource : new DataSource(dataSource);\n };\n\n function inferSelect(select, fields) {\n select = $(select)[0];\n var options = select.options;\n var firstField = fields[0];\n var secondField = fields[1];\n\n var data = [];\n var idx, length;\n var optgroup;\n var option;\n var record;\n var value;\n\n for (idx = 0, length = options.length; idx < length; idx++) {\n record = {};\n option = options[idx];\n optgroup = option.parentNode;\n\n if (optgroup === select) {\n optgroup = null;\n }\n\n if (option.disabled || (optgroup && optgroup.disabled)) {\n continue;\n }\n\n if (optgroup) {\n record.optgroup = optgroup.label;\n }\n\n record[firstField.field] = option.text;\n\n value = option.attributes.value;\n\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n\n record[secondField.field] = value;\n\n data.push(record);\n }\n\n return data;\n }\n\n function inferTable(table, fields) {\n var tbody = $(table)[0].tBodies[0],\n rows = tbody ? tbody.rows : [],\n idx,\n length,\n fieldIndex,\n fieldCount = fields.length,\n data = [],\n cells,\n record,\n cell,\n empty;\n\n for (idx = 0, length = rows.length; idx < length; idx++) {\n record = {};\n empty = true;\n cells = rows[idx].cells;\n\n for (fieldIndex = 0; fieldIndex < fieldCount; fieldIndex++) {\n cell = cells[fieldIndex];\n if (cell.nodeName.toLowerCase() !== \"th\") {\n empty = false;\n record[fields[fieldIndex].field] = cell.innerHTML;\n }\n }\n if (!empty) {\n data.push(record);\n }\n }\n\n return data;\n }\n\n var Node = Model.define({\n idField: \"id\",\n\n init: function(value) {\n var that = this,\n hasChildren = that.hasChildren || value && value.hasChildren,\n childrenField = \"items\",\n childrenOptions = {};\n\n kendo.data.Model.fn.init.call(that, value);\n\n if (typeof that.children === STRING) {\n childrenField = that.children;\n }\n\n childrenOptions = {\n schema: {\n data: childrenField,\n model: {\n hasChildren: hasChildren,\n id: that.idField,\n fields: that.fields\n }\n }\n };\n\n if (typeof that.children !== STRING) {\n extend(childrenOptions, that.children);\n }\n\n childrenOptions.data = value;\n\n if (!hasChildren) {\n hasChildren = childrenOptions.schema.data;\n }\n\n if (typeof hasChildren === STRING) {\n hasChildren = kendo.getter(hasChildren);\n }\n\n if (isFunction(hasChildren)) {\n var hasChildrenObject = hasChildren.call(that, that);\n\n if (hasChildrenObject && hasChildrenObject.length === 0) {\n that.hasChildren = false;\n } else {\n that.hasChildren = !!hasChildrenObject;\n }\n }\n\n that._childrenOptions = childrenOptions;\n\n if (that.hasChildren) {\n that._initChildren();\n }\n\n that._loaded = !!(value && value._loaded);\n },\n\n _initChildren: function() {\n var that = this;\n var children, transport, parameterMap;\n\n if (!(that.children instanceof HierarchicalDataSource)) {\n children = that.children = new HierarchicalDataSource(that._childrenOptions);\n\n transport = children.transport;\n parameterMap = transport.parameterMap;\n\n transport.parameterMap = function(data, type) {\n data[that.idField || \"id\"] = that.id;\n\n if (parameterMap) {\n data = parameterMap.call(that, data, type);\n }\n\n return data;\n };\n\n children.parent = function() {\n return that;\n };\n\n children.bind(CHANGE, function(e) {\n e.node = e.node || that;\n that.trigger(CHANGE, e);\n });\n\n children.bind(ERROR, function(e) {\n var collection = that.parent();\n\n if (collection) {\n e.node = e.node || that;\n collection.trigger(ERROR, e);\n }\n });\n\n children.bind(ITEMSLOADED, function(e) {\n var collection = that.parent();\n\n if (collection) {\n collection.trigger(ITEMSLOADED, e);\n }\n });\n\n that._updateChildrenField();\n }\n },\n\n append: function(model) {\n this._initChildren();\n this.loaded(true);\n this.children.add(model);\n },\n\n hasChildren: false,\n\n level: function() {\n var parentNode = this.parentNode(),\n level = 0;\n\n while (parentNode && parentNode.parentNode) {\n level++;\n parentNode = parentNode.parentNode ? parentNode.parentNode() : null;\n }\n\n return level;\n },\n\n _updateChildrenField: function() {\n var fieldName = this._childrenOptions.schema.data;\n\n this[fieldName || \"items\"] = this.children.data();\n },\n\n _childrenLoaded: function() {\n this._loaded = true;\n\n this._updateChildrenField();\n },\n\n load: function() {\n var options = {};\n var method = \"_query\";\n var children, promise;\n\n if (this.hasChildren) {\n this._initChildren();\n\n children = this.children;\n\n options[this.idField || \"id\"] = this.id;\n\n if (!this._loaded) {\n children._data = undefined$1;\n method = \"read\";\n }\n\n children.one(CHANGE, this._childrenLoaded.bind(this));\n\n if (this._matchFilter) {\n options.filter = { field: '_matchFilter', operator: 'eq', value: true };\n }\n\n promise = children[method](options);\n if (!this._loaded) {\n this.trigger(ITEMLOAD, { promise: promise, node: this });\n }\n } else {\n this.loaded(true);\n }\n\n return promise || $.Deferred().resolve().promise();\n },\n\n parentNode: function() {\n var array = this.parent();\n\n return array.parent();\n },\n\n loaded: function(value) {\n if (value !== undefined$1) {\n this._loaded = value;\n } else {\n return this._loaded;\n }\n },\n\n shouldSerialize: function(field) {\n return Model.fn.shouldSerialize.call(this, field) &&\n field !== \"children\" &&\n field !== \"_loaded\" &&\n field !== \"hasChildren\" &&\n field !== \"_childrenOptions\";\n }\n });\n\n function dataMethod(name) {\n return function() {\n var data = this._data,\n result = DataSource.fn[name].apply(this, slice.call(arguments));\n\n if (this._data != data) {\n this._attachBubbleHandlers();\n }\n\n return result;\n };\n }\n\n var HierarchicalDataSource = DataSource.extend({\n init: function(options) {\n var node = Node.define({\n children: options\n });\n\n if (options.filter && !options.serverFiltering) {\n this._hierarchicalFilter = options.filter;\n options.filter = null;\n }\n\n DataSource.fn.init.call(this, extend(true, {}, { schema: { modelBase: node, model: node } }, options));\n\n this._attachBubbleHandlers();\n },\n\n _attachBubbleHandlers: function() {\n var that = this;\n\n that._data.bind(ERROR, function(e) {\n that.trigger(ERROR, e);\n });\n\n that._data.bind(ITEMSLOADED, function(e) {\n that.trigger(ITEMSLOADED, e);\n });\n },\n\n loading: function() {\n if (this._data) {\n return this._data.loading() || this._childrenLoading();\n }\n return false;\n },\n\n _childrenLoading: function() {\n var isLoading = false;\n this._data.forEach(function(node) {\n if (node.hasChildren && node.children.loading()) {\n isLoading = true;\n }\n });\n return isLoading;\n },\n\n read: function(data) {\n var result = DataSource.fn.read.call(this, data);\n\n if (this._hierarchicalFilter) {\n if (this._data && this._data.length > 0) {\n this.filter(this._hierarchicalFilter);\n } else {\n this.options.filter = this._hierarchicalFilter;\n this._filter = normalizeFilter(this.options.filter);\n this._hierarchicalFilter = null;\n }\n }\n\n return result;\n },\n\n remove: function(node) {\n var parentNode = node.parentNode(),\n dataSource = this,\n result;\n\n if (parentNode && parentNode._initChildren) {\n dataSource = parentNode.children;\n }\n\n result = DataSource.fn.remove.call(dataSource, node);\n\n if (parentNode && !dataSource.data().length) {\n parentNode.hasChildren = false;\n }\n\n return result;\n },\n\n success: dataMethod(\"success\"),\n\n data: dataMethod(\"data\"),\n\n insert: function(index, model) {\n var parentNode = this.parent();\n\n if (parentNode && parentNode._initChildren) {\n parentNode.hasChildren = true;\n parentNode._initChildren();\n }\n\n return DataSource.fn.insert.call(this, index, model);\n },\n\n filter: function(val) {\n if (val === undefined$1) {\n return this._filter;\n }\n\n if (!this.options.serverFiltering && this._markHierarchicalQuery(val)) {\n val = { logic: \"or\", filters: [val, { field: '_matchFilter', operator: 'equals', value: true }] };\n }\n\n this.trigger(\"reset\");\n this._query({ filter: val, page: 1 });\n },\n\n _markHierarchicalQuery: function(expressions) {\n var compiled;\n var accentFoldingFiltering = this.options.accentFoldingFiltering;\n\n expressions = accentFoldingFiltering ? $.extend({}, normalizeFilter(expressions), { accentFoldingFiltering: accentFoldingFiltering }) : normalizeFilter(expressions);\n\n if (!expressions || expressions.filters.length === 0) {\n this._updateHierarchicalFilter(function() {return true;});\n return false;\n }\n\n compiled = Query.filterExpr(expressions, { noEval: true });\n\n this._updateHierarchicalFilter(compiled);\n return true;\n },\n\n _updateHierarchicalFilter: function(filter) {\n var current;\n var data = this._data;\n var result = false;\n\n for (var idx = 0; idx < data.length; idx++) {\n current = data[idx];\n\n if (current.hasChildren) {\n current._matchFilter = current.children._updateHierarchicalFilter(filter);\n if (!current._matchFilter) {\n current._matchFilter = filter(current);\n }\n } else {\n current._matchFilter = filter(current);\n }\n\n if (current._matchFilter) {\n result = true;\n }\n }\n return result;\n },\n\n _find: function(method, value) {\n var idx, length, node, children;\n var data = this._data;\n\n if (!data) {\n return;\n }\n\n node = DataSource.fn[method].call(this, value);\n\n if (node) {\n return node;\n }\n\n data = this._flatData(this._data);\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n children = data[idx].children;\n\n if (!(children instanceof HierarchicalDataSource)) {\n continue;\n }\n\n node = children[method](value);\n\n if (node) {\n return node;\n }\n }\n },\n\n get: function(id) {\n return this._find(\"get\", id);\n },\n\n getByUid: function(uid) {\n return this._find(\"getByUid\", uid);\n }\n });\n\n function inferList(list, fields) {\n var items = $(list).children(),\n idx,\n length,\n data = [],\n record,\n textField = fields[0].field,\n urlField = fields[1] && fields[1].field,\n spriteCssClassField = fields[2] && fields[2].field,\n imageUrlField = fields[3] && fields[3].field,\n item,\n id,\n textChild,\n className,\n children;\n\n function elements(collection, tagName) {\n return collection.filter(tagName).add(collection.find(tagName));\n }\n\n for (idx = 0, length = items.length; idx < length; idx++) {\n record = { _loaded: true };\n item = items.eq(idx);\n\n textChild = item[0].firstChild;\n children = item.children();\n list = children.filter(\"ul\");\n children = children.filter(\":not(ul)\");\n\n id = item.attr(\"data-id\");\n\n if (id) {\n record.id = id;\n }\n\n if (textChild) {\n record[textField] = textChild.nodeType == 3 ? textChild.nodeValue : children.text();\n }\n\n if (urlField) {\n record[urlField] = elements(children, \"a\").attr(\"href\");\n }\n\n if (imageUrlField) {\n record[imageUrlField] = elements(children, \"img\").attr(\"src\");\n }\n\n if (spriteCssClassField) {\n className = elements(children, \".k-sprite\").prop(\"className\");\n record[spriteCssClassField] = className && kendo.trim(className.replace(\"k-sprite\", \"\"));\n }\n\n if (list.length) {\n record.items = inferList(list.eq(0), fields);\n }\n\n if (item.attr(\"data-hasChildren\") == \"true\") {\n record.hasChildren = true;\n }\n\n data.push(record);\n }\n\n return data;\n }\n\n HierarchicalDataSource.create = function(options) {\n options = options && options.push ? { data: options } : options;\n\n var dataSource = options || {},\n data = dataSource.data,\n fields = dataSource.fields,\n list = dataSource.list;\n\n if (data && data._dataSource) {\n return data._dataSource;\n }\n\n if (!data && fields && !dataSource.transport) {\n if (list) {\n data = inferList(list, fields);\n }\n }\n\n dataSource.data = data;\n\n return dataSource instanceof HierarchicalDataSource ? dataSource : new HierarchicalDataSource(dataSource);\n };\n\n var Buffer = kendo.Observable.extend({\n init: function(dataSource, viewSize, disablePrefetch) {\n kendo.Observable.fn.init.call(this);\n\n this._prefetching = false;\n this.dataSource = dataSource;\n this.prefetch = !disablePrefetch;\n\n var buffer = this;\n\n dataSource.bind(\"change\", function() {\n buffer._change();\n });\n\n dataSource.bind(\"reset\", function() {\n buffer._reset();\n });\n\n this._syncWithDataSource();\n\n this.setViewSize(viewSize);\n },\n\n setViewSize: function(viewSize) {\n this.viewSize = viewSize;\n this._recalculate();\n },\n\n at: function(index) {\n var pageSize = this.pageSize,\n itemPresent = true;\n\n if (index >= this.total()) {\n this.trigger(\"endreached\", { index: index });\n return null;\n }\n\n if (!this.useRanges) {\n return this.dataSource.view()[index];\n }\n if (this.useRanges) {\n // out of range request\n if (index < this.dataOffset || index >= this.skip + pageSize) {\n itemPresent = this.range(Math.floor(index / pageSize) * pageSize);\n }\n\n // prefetch\n if (index === this.prefetchThreshold) {\n this._prefetch();\n }\n\n // mid-range jump - prefetchThreshold and nextPageThreshold may be equal, do not change to else if\n if (index === this.midPageThreshold) {\n this.range(this.nextMidRange, true);\n }\n // next range jump\n else if (index === this.nextPageThreshold) {\n this.range(this.nextFullRange);\n }\n // pull-back\n else if (index === this.pullBackThreshold) {\n if (this.offset === this.skip) { // from full range to mid range\n this.range(this.previousMidRange);\n } else { // from mid range to full range\n this.range(this.previousFullRange);\n }\n }\n\n if (itemPresent) {\n return this.dataSource.at(index - this.dataOffset);\n } else {\n this.trigger(\"endreached\", { index: index });\n return null;\n }\n }\n },\n\n indexOf: function(item) {\n return this.dataSource.data().indexOf(item) + this.dataOffset;\n },\n\n total: function() {\n return parseInt(this.dataSource.total(), 10);\n },\n\n next: function() {\n var buffer = this,\n pageSize = buffer.pageSize,\n offset = buffer.skip - buffer.viewSize + pageSize,\n pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize;\n\n this.offset = offset;\n this.dataSource.prefetch(pageSkip, pageSize, function() {\n buffer._goToRange(offset, true);\n });\n },\n\n range: function(offset, nextRange) {\n if (this.offset === offset) {\n return true;\n }\n\n var buffer = this,\n pageSize = this.pageSize,\n pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize,\n dataSource = this.dataSource;\n\n if (nextRange) {\n pageSkip += pageSize;\n }\n\n if (dataSource.inRange(offset, pageSize)) {\n this.offset = offset;\n this._recalculate();\n this._goToRange(offset);\n return true;\n } else if (this.prefetch) {\n dataSource.prefetch(pageSkip, pageSize, function() {\n buffer.offset = offset;\n buffer._recalculate();\n buffer._goToRange(offset, true);\n });\n return false;\n }\n\n return true;\n },\n\n syncDataSource: function() {\n var offset = this.offset;\n this.offset = null;\n this.range(offset);\n },\n\n destroy: function() {\n this.unbind();\n },\n\n _prefetch: function() {\n var buffer = this,\n pageSize = this.pageSize,\n prefetchOffset = this.skip + pageSize,\n dataSource = this.dataSource;\n\n if (!dataSource.inRange(prefetchOffset, pageSize) && !this._prefetching && this.prefetch) {\n this._prefetching = true;\n this.trigger(\"prefetching\", { skip: prefetchOffset, take: pageSize });\n\n dataSource.prefetch(prefetchOffset, pageSize, function() {\n buffer._prefetching = false;\n buffer.trigger(\"prefetched\", { skip: prefetchOffset, take: pageSize });\n });\n }\n },\n\n _goToRange: function(offset, expanding) {\n if (this.offset !== offset) {\n return;\n }\n\n this.dataOffset = offset;\n this._expanding = expanding;\n this.dataSource.range(offset, this.pageSize);\n this.dataSource.enableRequestsInProgress();\n },\n\n _reset: function() {\n this._syncPending = true;\n },\n\n _change: function() {\n var dataSource = this.dataSource;\n\n this.length = this.useRanges ? dataSource.lastRange().end : dataSource.view().length;\n\n if (this._syncPending) {\n this._syncWithDataSource();\n this._recalculate();\n this._syncPending = false;\n this.trigger(\"reset\", { offset: this.offset });\n }\n\n this.trigger(\"resize\");\n\n if (this._expanding) {\n this.trigger(\"expand\");\n }\n\n delete this._expanding;\n },\n\n _syncWithDataSource: function() {\n var dataSource = this.dataSource;\n\n this._firstItemUid = dataSource.firstItemUid();\n this.dataOffset = this.offset = dataSource.skip() || 0;\n this.pageSize = dataSource.pageSize();\n this.useRanges = dataSource.options.serverPaging;\n },\n\n _recalculate: function() {\n var pageSize = this.pageSize,\n offset = this.offset,\n viewSize = this.viewSize,\n skip = Math.ceil(offset / pageSize) * pageSize;\n\n this.skip = skip;\n this.midPageThreshold = skip + pageSize - 1;\n this.nextPageThreshold = skip + viewSize - 1;\n this.prefetchThreshold = skip + Math.floor(pageSize / 3 * 2);\n this.pullBackThreshold = this.offset - 1;\n\n this.nextMidRange = skip + pageSize - viewSize;\n this.nextFullRange = skip;\n this.previousMidRange = offset - viewSize;\n this.previousFullRange = skip - pageSize;\n }\n });\n\n var BatchBuffer = kendo.Observable.extend({\n init: function(dataSource, batchSize) {\n var batchBuffer = this;\n\n kendo.Observable.fn.init.call(batchBuffer);\n\n this.dataSource = dataSource;\n this.batchSize = batchSize;\n this._total = 0;\n\n this.buffer = new Buffer(dataSource, batchSize * 3);\n\n this.buffer.bind({\n \"endreached\": function(e) {\n batchBuffer.trigger(\"endreached\", { index: e.index });\n },\n \"prefetching\": function(e) {\n batchBuffer.trigger(\"prefetching\", { skip: e.skip, take: e.take });\n },\n \"prefetched\": function(e) {\n batchBuffer.trigger(\"prefetched\", { skip: e.skip, take: e.take });\n },\n \"reset\": function() {\n batchBuffer._total = 0;\n batchBuffer.trigger(\"reset\");\n },\n \"resize\": function() {\n batchBuffer._total = Math.ceil(this.length / batchBuffer.batchSize);\n batchBuffer.trigger(\"resize\", { total: batchBuffer.total(), offset: this.offset });\n }\n });\n },\n\n syncDataSource: function() {\n this.buffer.syncDataSource();\n },\n\n at: function(index) {\n var buffer = this.buffer,\n skip = index * this.batchSize,\n take = this.batchSize,\n view = [],\n item;\n\n if (buffer.offset > skip) {\n buffer.at(buffer.offset - 1);\n }\n\n for (var i = 0; i < take; i++) {\n item = buffer.at(skip + i);\n\n if (item === null) {\n break;\n }\n\n view.push(item);\n }\n\n return view;\n },\n\n total: function() {\n return this._total;\n },\n\n destroy: function() {\n this.buffer.destroy();\n this.unbind();\n }\n });\n\n extend(true, kendo.data, {\n readers: {\n json: DataReader\n },\n Query: Query,\n DataSource: DataSource,\n HierarchicalDataSource: HierarchicalDataSource,\n Node: Node,\n Comparer: Comparer,\n ObservableObject: ObservableObject,\n ObservableArray: ObservableArray,\n LazyObservableArray: LazyObservableArray,\n LocalTransport: LocalTransport,\n RemoteTransport: RemoteTransport,\n Cache: Cache,\n DataReader: DataReader,\n Model: Model,\n Buffer: Buffer,\n BatchBuffer: BatchBuffer\n });\n })(window.kendo.jQuery);\n var kendo$c = kendo;\n\n var __meta__$9 = {\n id: \"data.signalr\",\n name: \"SignalR\",\n category: \"framework\",\n depends: [ \"data\" ],\n hidden: true\n };\n\n (function($) {\n var kendo = window.kendo;\n var isFunction = kendo.isFunction;\n\n function isJQueryPromise(promise) {\n return promise && isFunction(promise.done) && isFunction(promise.fail);\n }\n\n function isNativePromise(promise) {\n return promise && isFunction(promise.then) && isFunction(promise.catch);\n }\n\n var transport = kendo.data.RemoteTransport.extend({\n init: function(options) {\n var signalr = options && options.signalr ? options.signalr : {};\n\n var promise = signalr.promise;\n\n if (!promise) {\n throw new Error('The \"promise\" option must be set.');\n }\n\n if (!isJQueryPromise(promise) && !isNativePromise(promise)) {\n throw new Error('The \"promise\" option must be a Promise.');\n }\n\n this.promise = promise;\n\n var hub = signalr.hub;\n\n if (!hub) {\n throw new Error('The \"hub\" option must be set.');\n }\n\n if (typeof hub.on != \"function\" || typeof hub.invoke != \"function\") {\n throw new Error('The \"hub\" option is not a valid SignalR hub proxy.');\n }\n\n this.hub = hub;\n\n kendo.data.RemoteTransport.fn.init.call(this, options);\n },\n\n push: function(callbacks) {\n var client = this.options.signalr.client || {};\n\n if (client.create) {\n this.hub.on(client.create, callbacks.pushCreate);\n }\n\n if (client.update) {\n this.hub.on(client.update, callbacks.pushUpdate);\n }\n\n if (client.destroy) {\n this.hub.on(client.destroy, callbacks.pushDestroy);\n }\n },\n\n _crud: function(options, type) {\n var hub = this.hub;\n var promise = this.promise;\n var server = this.options.signalr.server;\n\n if (!server || !server[type]) {\n throw new Error(kendo.format('The \"server.{0}\" option must be set.', type));\n }\n\n var args = [server[type]];\n\n var data = this.parameterMap(options.data, type);\n\n if (!$.isEmptyObject(data)) {\n args.push(data);\n }\n\n if (isJQueryPromise(promise)) {\n promise.done(function() {\n hub.invoke.apply(hub, args)\n .done(options.success)\n .fail(options.error);\n });\n } else if (isNativePromise(promise)) {\n promise.then(function() {\n hub.invoke.apply(hub, args)\n .then(options.success)\n .catch(options.error);\n });\n }\n },\n\n read: function(options) {\n this._crud(options, \"read\");\n },\n\n create: function(options) {\n this._crud(options, \"create\");\n },\n\n update: function(options) {\n this._crud(options, \"update\");\n },\n\n destroy: function(options) {\n this._crud(options, \"destroy\");\n }\n });\n\n $.extend(true, kendo.data, {\n transports: {\n signalr: transport\n }\n });\n\n })(window.kendo.jQuery);\n var kendo$b = kendo;\n\n var __meta__$8 = {\n id: \"binder\",\n name: \"MVVM\",\n category: \"framework\",\n description: \"Model View ViewModel (MVVM) is a design pattern which helps developers separate the Model (the data) from the View (the UI).\",\n depends: [ \"core\", \"data\" ]\n };\n\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n encode = kendo.htmlEncode,\n Observable = kendo.Observable,\n ObservableObject = kendo.data.ObservableObject,\n ObservableArray = kendo.data.ObservableArray,\n toString = {}.toString,\n binders = {},\n Class = kendo.Class,\n VALUE = \"value\",\n SOURCE = \"source\",\n EVENTS = \"events\",\n CHECKED = \"checked\",\n CSS = \"css\",\n deleteExpando = true,\n FUNCTION = \"function\",\n CHANGE = \"change\";\n\n (function() {\n var a = document.createElement(\"a\");\n\n try {\n delete a.test;\n } catch (e) {\n deleteExpando = false;\n }\n })();\n\n var Binding = Observable.extend( {\n init: function(parents, path) {\n var that = this;\n\n Observable.fn.init.call(that);\n\n that.source = parents[0];\n that.parents = parents;\n that.path = path;\n that.dependencies = {};\n that.dependencies[path] = true;\n that.observable = that.source instanceof Observable;\n\n that._access = function(e) {\n that.dependencies[e.field] = true;\n };\n\n if (that.observable) {\n that._change = function(e) {\n that.change(e);\n };\n\n that.source.bind(CHANGE, that._change);\n }\n },\n\n _parents: function() {\n var parents = this.parents;\n var value = this.get();\n\n if (value && typeof value.parent == \"function\") {\n var parent = value.parent();\n\n if ($.inArray(parent, parents) < 0) {\n parents = [parent].concat(parents);\n }\n }\n\n return parents;\n },\n\n change: function(e) {\n var dependency,\n ch,\n field = e.field,\n that = this;\n\n if (that.path === \"this\") {\n that.trigger(CHANGE, e);\n } else {\n for (dependency in that.dependencies) {\n if (dependency.indexOf(field) === 0) {\n ch = dependency.charAt(field.length);\n\n if (!ch || ch === \".\" || ch === \"[\") {\n that.trigger(CHANGE, e);\n break;\n }\n }\n }\n }\n },\n\n start: function(source) {\n source.bind(\"get\", this._access);\n },\n\n stop: function(source) {\n source.unbind(\"get\", this._access);\n },\n\n get: function() {\n\n var that = this,\n source = that.source,\n index = 0,\n path = that.path,\n result = source;\n\n if (!that.observable) {\n return result;\n }\n\n that.start(that.source);\n\n result = source.get(path);\n\n // Traverse the observable hierarchy if the binding is not resolved at the current level.\n while (result === undefined$1 && source) {\n\n source = that.parents[++index];\n\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n\n // second pass try to get the parent from the object hierarchy\n if (result === undefined$1) {\n source = that.source; //get the initial source\n\n while (result === undefined$1 && source) {\n source = source.parent();\n\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n }\n\n // If the result is a function - invoke it\n if (typeof result === \"function\") {\n index = path.lastIndexOf(\".\");\n\n // If the function is a member of a nested observable object make that nested observable the context (this) of the function\n if (index > 0) {\n source = source.get(path.substring(0, index));\n }\n\n // Invoke the function\n that.start(source);\n\n if (source !== that.source) {\n result = result.call(source, that.source);\n } else {\n result = result.call(source);\n }\n\n that.stop(source);\n }\n\n // If the binding is resolved by a parent object\n if (source && source !== that.source) {\n\n that.currentSource = source; // save parent object\n\n // Listen for changes in the parent object\n source.unbind(CHANGE, that._change)\n .bind(CHANGE, that._change);\n }\n\n that.stop(that.source);\n\n return result;\n },\n\n set: function(value) {\n var source = this.currentSource || this.source;\n\n var field = kendo.getter(this.path)(source);\n\n if (typeof field === \"function\") {\n if (source !== this.source) {\n field.call(source, this.source, value);\n } else {\n field.call(source, value);\n }\n } else {\n source.set(this.path, value);\n }\n },\n\n destroy: function() {\n if (this.observable) {\n this.source.unbind(CHANGE, this._change);\n if (this.currentSource) {\n this.currentSource.unbind(CHANGE, this._change);\n }\n }\n\n this.unbind();\n }\n });\n\n var EventBinding = Binding.extend( {\n get: function() {\n var source = this.source,\n path = this.path,\n index = 0,\n handler;\n\n handler = source.get(path);\n\n while (!handler && source) {\n source = this.parents[++index];\n\n if (source instanceof ObservableObject) {\n handler = source.get(path);\n }\n }\n\n if (!handler) {\n return;\n }\n\n return handler.bind(source);\n }\n });\n\n var TemplateBinding = Binding.extend( {\n init: function(source, path, template) {\n var that = this;\n\n Binding.fn.init.call(that, source, path);\n\n that.template = template;\n },\n\n render: function(value) {\n var html;\n\n this.start(this.source);\n\n html = kendo.render(this.template, value);\n\n this.stop(this.source);\n\n return html;\n }\n });\n\n var Binder = Class.extend({\n init: function(element, bindings, options) {\n this.element = element;\n this.bindings = bindings;\n this.options = options;\n },\n\n bind: function(binding, attribute) {\n var that = this;\n\n binding = attribute ? binding[attribute] : binding;\n\n binding.bind(CHANGE, function(e) {\n that.refresh(attribute || e);\n });\n\n that.refresh(attribute);\n },\n\n destroy: function() {\n }\n });\n\n var TypedBinder = Binder.extend({\n dataType: function() {\n var dataType = this.element.getAttribute(\"data-\" + kendo.ns + \"type\") || this.element.type || \"text\";\n return dataType.toLowerCase();\n },\n\n parsedValue: function() {\n return this._parseValue(this.element.value, this.dataType());\n },\n\n _parseValue: function(value, dataType) {\n if (dataType == \"date\") {\n value = kendo.parseDate(value, \"yyyy-MM-dd\");\n } else if (dataType == \"datetime-local\") {\n value = kendo.parseDate(value, [\"yyyy-MM-ddTHH:mm:ss\", \"yyyy-MM-ddTHH:mm\"] );\n } else if (dataType == \"number\") {\n value = kendo.parseFloat(value);\n } else if (dataType == \"boolean\") {\n value = value.toLowerCase();\n if (kendo.parseFloat(value) !== null) {\n value = Boolean(kendo.parseFloat(value));\n } else {\n value = (value.toLowerCase() === \"true\");\n }\n }\n return value;\n }\n });\n\n binders.attr = Binder.extend({\n refresh: function(key) {\n this.element.setAttribute(key, this.bindings.attr[key].get());\n }\n });\n\n binders.css = Binder.extend({\n init: function(element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.classes = {};\n },\n refresh: function(className) {\n var element = $(this.element),\n binding = this.bindings.css[className],\n hasClass = this.classes[className] = binding.get();\n if (hasClass) {\n element.addClass(className);\n } else {\n element.removeClass(className);\n }\n }\n });\n\n binders.style = Binder.extend({\n refresh: function(key) {\n this.element.style[key] = this.bindings.style[key].get() || \"\";\n }\n });\n\n binders.enabled = Binder.extend({\n refresh: function() {\n if (this.bindings.enabled.get()) {\n this.element.removeAttribute(\"disabled\");\n } else {\n this.element.setAttribute(\"disabled\", \"disabled\");\n }\n }\n });\n\n binders.readonly = Binder.extend({\n refresh: function() {\n if (this.bindings.readonly.get()) {\n this.element.setAttribute(\"readonly\", \"readonly\");\n } else {\n this.element.removeAttribute(\"readonly\");\n }\n }\n });\n\n binders.disabled = Binder.extend({\n refresh: function() {\n if (this.bindings.disabled.get()) {\n this.element.setAttribute(\"disabled\", \"disabled\");\n } else {\n this.element.removeAttribute(\"disabled\");\n }\n }\n });\n\n binders.events = Binder.extend({\n init: function(element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.handlers = {};\n },\n\n refresh: function(key) {\n var element = $(this.element),\n binding = this.bindings.events[key],\n handler = this.handlers[key];\n\n if (handler) {\n element.off(key, handler);\n }\n\n handler = this.handlers[key] = binding.get();\n\n element.on(key, binding.source, handler);\n },\n\n destroy: function() {\n var element = $(this.element),\n handler;\n\n for (handler in this.handlers) {\n element.off(handler, this.handlers[handler]);\n }\n }\n });\n\n binders.text = Binder.extend({\n refresh: function() {\n var text = this.bindings.text.get();\n var dataFormat = this.element.getAttribute(\"data-\" + kendo.ns + \"format\") || \"\";\n if (text == null) {\n text = \"\";\n }\n\n $(this.element).text(kendo.toString(text, dataFormat));\n }\n });\n\n binders.visible = Binder.extend({\n refresh: function() {\n if (this.bindings.visible.get()) {\n this.element.style.display = \"\";\n } else {\n this.element.style.display = \"none\";\n }\n }\n });\n\n binders.invisible = Binder.extend({\n refresh: function() {\n if (!this.bindings.invisible.get()) {\n this.element.style.display = \"\";\n } else {\n this.element.style.display = \"none\";\n }\n }\n });\n\n binders.html = Binder.extend({\n refresh: function() {\n this.element.innerHTML = this.bindings.html.get();\n }\n });\n\n binders.value = TypedBinder.extend({\n init: function(element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n\n this._change = this.change.bind(this);\n this.eventName = options.valueUpdate || CHANGE;\n\n $(this.element).on(this.eventName, this._change);\n\n this._initChange = false;\n },\n\n change: function() {\n this._initChange = this.eventName != CHANGE;\n\n this.bindings[VALUE].set(this.parsedValue());\n\n this._initChange = false;\n },\n\n refresh: function() {\n if (!this._initChange) {\n var value = this.bindings[VALUE].get();\n\n if (value == null) {\n value = \"\";\n }\n\n var type = this.dataType();\n\n if (type == \"date\") {\n value = kendo.toString(value, \"yyyy-MM-dd\");\n } else if (type == \"datetime-local\") {\n value = kendo.toString(value, \"yyyy-MM-ddTHH:mm:ss\");\n }\n\n this.element.value = value;\n }\n\n this._initChange = false;\n },\n\n destroy: function() {\n $(this.element).off(this.eventName, this._change);\n }\n });\n\n binders.source = Binder.extend({\n init: function(element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n\n var source = this.bindings.source.get();\n\n if (source instanceof kendo.data.DataSource && options.autoBind !== false) {\n source.fetch();\n }\n },\n\n refresh: function(e) {\n var that = this,\n source = that.bindings.source.get();\n\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n\n if (e.action == \"add\") {\n that.add(e.index, e.items);\n } else if (e.action == \"remove\") {\n that.remove(e.index, e.items);\n } else if (e.action != \"itemchange\") {\n that.render();\n }\n } else {\n that.render();\n }\n },\n\n container: function() {\n var element = this.element;\n\n if (element.nodeName.toLowerCase() == \"table\") {\n if (!element.tBodies[0]) {\n element.appendChild(document.createElement(\"tbody\"));\n }\n element = element.tBodies[0];\n }\n\n return element;\n },\n\n template: function() {\n var options = this.options,\n template = options.template,\n nodeName = this.container().nodeName.toLowerCase();\n\n if (!template) {\n if (nodeName == \"select\") {\n if (options.valueField || options.textField) {\n template = (data) => {\n const valueAttr = kendo.getter(options.valueField || options.textField)(data);\n const innerText = kendo.getter(options.textField || options.valueField)(data);\n return ``;\n };\n } else {\n template = (data) => ``;\n }\n } else if (nodeName == \"tbody\") {\n template = (data) => `${encode(data)}`;\n } else if (nodeName == \"ul\" || nodeName == \"ol\") {\n template = (data) => `
  • ${encode(data)}
  • `;\n } else {\n template = (data) => `${encode(data)}`;\n }\n template = kendo.template(template);\n }\n\n return template;\n },\n\n add: function(index, items) {\n var element = this.container(),\n parents,\n idx,\n length,\n child,\n clone = element.cloneNode(false),\n reference = element.children[index];\n\n $(clone).html(kendo.render(this.template(), items));\n\n if (clone.children.length) {\n parents = this.bindings.source._parents();\n\n for (idx = 0, length = items.length; idx < length; idx++) {\n child = clone.children[0];\n element.insertBefore(child, reference || null);\n bindElement(child, items[idx], this.options.roles, [items[idx]].concat(parents));\n }\n }\n },\n\n remove: function(index, items) {\n var idx, element = this.container();\n\n for (idx = 0; idx < items.length; idx++) {\n var child = element.children[index];\n unbindElementTree(child, true);\n if (child.parentNode == element) {\n element.removeChild(child);\n }\n }\n },\n\n render: function() {\n var source = this.bindings.source.get(),\n parents,\n idx,\n length,\n element = this.container(),\n template = this.template();\n\n if (source == null) {\n return;\n }\n\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n\n if (!(source instanceof ObservableArray) && toString.call(source) !== \"[object Array]\") {\n source = [source];\n }\n\n if (this.bindings.template) {\n unbindElementChildren(element, true);\n\n $(element).html(this.bindings.template.render(source));\n\n if (element.children.length) {\n parents = this.bindings.source._parents();\n\n for (idx = 0, length = source.length; idx < length; idx++) {\n bindElement(element.children[idx], source[idx], this.options.roles, [source[idx]].concat(parents));\n }\n }\n } else {\n $(element).html(kendo.render(template, source));\n }\n }\n });\n\n binders.input = {\n checked: TypedBinder.extend({\n init: function(element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = this.change.bind(this);\n\n $(this.element).change(this._change);\n },\n\n change: function() {\n var element = this.element;\n var value = this.value();\n\n if (element.type == \"radio\") {\n value = this.parsedValue();\n this.bindings[CHECKED].set(value);\n } else if (element.type == \"checkbox\") {\n var source = this.bindings[CHECKED].get();\n var index;\n\n if (source instanceof ObservableArray) {\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n if (index > -1) {\n source.splice(index, 1);\n } else {\n source.push(value);\n }\n } else {\n this.bindings[CHECKED].set(value);\n }\n }\n },\n\n refresh: function() {\n var value = this.bindings[CHECKED].get(),\n source = value,\n type = this.dataType(),\n element = this.element;\n\n if (element.type == \"checkbox\") {\n if (source instanceof ObservableArray) {\n var index = -1;\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n element.checked = (index >= 0);\n } else {\n element.checked = source;\n }\n } else if (element.type == \"radio\") {\n if (type == \"date\") {\n value = kendo.toString(value, \"yyyy-MM-dd\");\n } else if (type == \"datetime-local\") {\n value = kendo.toString(value, \"yyyy-MM-ddTHH:mm:ss\");\n }\n\n if (value !== null && typeof(value) !== \"undefined\" && element.value === value.toString()) {\n element.checked = true;\n } else {\n element.checked = false;\n }\n }\n },\n\n value: function() {\n var element = this.element,\n value = element.value;\n\n if (element.type == \"checkbox\") {\n value = element.checked;\n }\n\n return value;\n },\n destroy: function() {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n\n binders.select = {\n source: binders.source.extend({\n refresh: function(e) {\n var that = this,\n source = that.bindings.source.get();\n\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n if (e.action == \"add\") {\n that.add(e.index, e.items);\n } else if (e.action == \"remove\") {\n that.remove(e.index, e.items);\n } else if (e.action == \"itemchange\" || e.action === undefined$1) {\n that.render();\n if (that.bindings.value) {\n if (that.bindings.value) {\n var val = retrievePrimitiveValues(that.bindings.value.get(), $(that.element).data(\"valueField\"));\n if (val === null) {\n that.element.selectedIndex = -1;\n } else {\n that.element.value = val;\n }\n }\n }\n }\n } else {\n that.render();\n }\n }\n }),\n value: TypedBinder.extend({\n init: function(target, bindings, options) {\n TypedBinder.fn.init.call(this, target, bindings, options);\n\n this._change = this.change.bind(this);\n $(this.element).change(this._change);\n },\n\n parsedValue: function() {\n var dataType = this.dataType();\n var values = [];\n var value, option, idx, length;\n for (idx = 0, length = this.element.options.length; idx < length; idx++) {\n option = this.element.options[idx];\n\n if (option.selected) {\n value = option.attributes.value;\n\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n\n values.push(this._parseValue(value, dataType));\n }\n }\n return values;\n },\n\n change: function() {\n var values = [],\n element = this.element,\n source,\n field = this.options.valueField || this.options.textField,\n valuePrimitive = this.options.valuePrimitive,\n option,\n valueIndex,\n value,\n idx,\n length;\n\n for (idx = 0, length = element.options.length; idx < length; idx++) {\n option = element.options[idx];\n\n if (option.selected) {\n value = option.attributes.value;\n\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n\n if (field) {\n values.push(value);\n } else {\n values.push(this._parseValue(value, this.dataType()));\n }\n\n }\n }\n\n if (field) {\n source = this.bindings.source.get();\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n\n for (valueIndex = 0; valueIndex < values.length; valueIndex++) {\n for (idx = 0, length = source.length; idx < length; idx++) {\n var sourceValue = source[idx].get(field);\n var match = (String(sourceValue) === values[valueIndex]);\n if (match) {\n values[valueIndex] = source[idx];\n break;\n }\n }\n }\n }\n\n value = this.bindings[VALUE].get();\n if (value instanceof ObservableArray) {\n value.splice.apply(value, [0, value.length].concat(values));\n } else if (!valuePrimitive && (value instanceof ObservableObject || value === null || value === undefined$1 || !field)) {\n this.bindings[VALUE].set(values[0]);\n } else {\n this.bindings[VALUE].set(values[0].get(field));\n }\n },\n refresh: function() {\n var optionIndex,\n element = this.element,\n options = element.options,\n value = this.bindings[VALUE].get(),\n values = value,\n field = this.options.valueField || this.options.textField,\n found = false,\n type = this.dataType(),\n optionValue;\n\n if (!(values instanceof ObservableArray)) {\n values = new ObservableArray([value]);\n }\n\n element.selectedIndex = -1;\n\n for (var valueIndex = 0; valueIndex < values.length; valueIndex++) {\n value = values[valueIndex];\n\n\n if (field && value instanceof ObservableObject) {\n value = value.get(field);\n }\n\n if (type == \"date\") {\n value = kendo.toString(values[valueIndex], \"yyyy-MM-dd\");\n } else if (type == \"datetime-local\") {\n value = kendo.toString(values[valueIndex], \"yyyy-MM-ddTHH:mm:ss\");\n }\n\n for (optionIndex = 0; optionIndex < options.length; optionIndex++) {\n optionValue = options[optionIndex].value;\n\n if (optionValue === \"\" && value !== \"\") {\n optionValue = options[optionIndex].text;\n }\n\n if (value != null && optionValue == value.toString()) {\n options[optionIndex].selected = true;\n found = true;\n }\n }\n }\n },\n destroy: function() {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n\n function dataSourceBinding(bindingName, fieldName, setter) {\n return Binder.extend({\n init: function(widget, bindings, options) {\n var that = this;\n\n Binder.fn.init.call(that, widget.element[0], bindings, options);\n\n that.widget = widget;\n that._dataBinding = that.dataBinding.bind(that);\n that._dataBound = that.dataBound.bind(that);\n that._itemChange = that.itemChange.bind(that);\n },\n\n itemChange: function(e) {\n bindElement(e.item[0], e.data, this._ns(e.ns), [e.data].concat(this.bindings[bindingName]._parents()));\n },\n\n dataBinding: function(e) {\n var idx,\n length,\n widget = this.widget,\n items = e.removedItems || widget.items();\n\n for (idx = 0, length = items.length; idx < length; idx++) {\n unbindElementTree(items[idx], false);\n }\n },\n\n _ns: function(ns) {\n ns = ns || kendo.ui;\n var all = [ kendo.ui, kendo.dataviz.ui, kendo.mobile.ui ];\n all.splice($.inArray(ns, all), 1);\n all.unshift(ns);\n\n return kendo.rolesFromNamespaces(all);\n },\n\n dataBound: function(e) {\n var idx,\n length,\n widget = this.widget,\n items = e.addedItems || widget.items(),\n dataSource = widget[fieldName],\n view,\n parents,\n hds = kendo.data.HierarchicalDataSource;\n\n if (hds && dataSource instanceof hds) {\n // suppress binding of HDS items, because calling view() on root\n // will return only root items, and widget.items() returns all items\n return;\n }\n\n if (items.length) {\n view = e.addedDataItems || dataSource.flatView();\n parents = this.bindings[bindingName]._parents();\n\n for (idx = 0, length = view.length; idx < length; idx++) {\n if (items[idx]) {\n bindElement(items[idx], view[idx], this._ns(e.ns), [view[idx]].concat(parents));\n }\n }\n }\n },\n\n refresh: function(e) {\n var that = this,\n source,\n widget = that.widget,\n select, multiselect, dropdowntree;\n\n e = e || {};\n\n if (!e.action) {\n that.destroy();\n\n widget.bind(\"dataBinding\", that._dataBinding);\n widget.bind(\"dataBound\", that._dataBound);\n widget.bind(\"itemChange\", that._itemChange);\n\n source = that.bindings[bindingName].get();\n\n if (widget[fieldName] instanceof kendo.data.DataSource && widget[fieldName] != source) {\n if (source instanceof kendo.data.DataSource) {\n widget[setter](source);\n } else if (source && source._dataSource) {\n widget[setter](source._dataSource);\n } else {\n select = kendo.ui.Select && widget instanceof kendo.ui.Select;\n multiselect = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect;\n dropdowntree = kendo.ui.DropDownTree && widget instanceof kendo.ui.DropDownTree;\n\n if (!dropdowntree) {\n widget[fieldName].data(source);\n } else {\n widget.treeview[fieldName].data(source);\n }\n\n if (that.bindings.value && (select || multiselect)) {\n widget.value(retrievePrimitiveValues(that.bindings.value.get(), widget.options.dataValueField));\n }\n }\n }\n }\n },\n\n destroy: function() {\n var widget = this.widget;\n\n widget.unbind(\"dataBinding\", this._dataBinding);\n widget.unbind(\"dataBound\", this._dataBound);\n widget.unbind(\"itemChange\", this._itemChange);\n }\n });\n }\n\n binders.widget = {\n events: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this.handlers = {};\n },\n\n refresh: function(key) {\n var binding = this.bindings.events[key],\n handler = this.handlers[key];\n\n if (handler) {\n this.widget.unbind(key, handler);\n }\n\n handler = binding.get();\n\n this.handlers[key] = function(e) {\n e.data = binding.source;\n\n handler(e);\n\n if (e.data === binding.source) {\n delete e.data;\n }\n };\n\n this.widget.bind(key, this.handlers[key]);\n },\n\n destroy: function() {\n var handler;\n\n for (handler in this.handlers) {\n this.widget.unbind(handler, this.handlers[handler]);\n }\n }\n }),\n\n checked: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n this._change = this.change.bind(this);\n this.widget.bind(CHANGE, this._change);\n },\n change: function() {\n this.bindings[CHECKED].set(this.value());\n },\n\n refresh: function() {\n var val = this.bindings[CHECKED].get();\n\n if (this.element.type === \"radio\") {\n if (val !== undefined$1) {\n this.widget.check(val.toString() === this.value());\n } else {\n this.widget.check(false);\n }\n } else {\n this.widget.check(val === true);\n }\n },\n\n value: function() {\n var element = this.element,\n value = element.value;\n\n if (value == \"on\" || value == \"off\" || this.element.type == \"checkbox\") {\n value = element.checked;\n }\n\n return value;\n },\n\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n\n start: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this._change = this.change.bind(this);\n this.widget = widget;\n this.widget.bind(CHANGE, this._change);\n },\n\n change: function() {\n this.bindings.start.set(this.widget.range().start);\n },\n\n refresh: function() {\n var that = this;\n var start = this.bindings.start.get();\n var end = that.widget._range ? that.widget._range.end : null;\n this.widget.range({ start: start, end: end });\n },\n\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n\n end: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this._change = this.change.bind(this);\n this.widget = widget;\n this.widget.bind(CHANGE, this._change);\n },\n\n change: function() {\n this.bindings.end.set(this.widget.range().end);\n },\n\n refresh: function() {\n var that = this;\n var end = this.bindings.end.get();\n var start = that.widget._range ? that.widget._range.start : null;\n this.widget.range({ start: start, end: end });\n },\n\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n\n visible: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n },\n\n refresh: function() {\n var visible = this.bindings.visible.get();\n this.widget.wrapper[0].style.display = visible ? \"\" : \"none\";\n }\n }),\n\n invisible: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n },\n\n refresh: function() {\n var invisible = this.bindings.invisible.get();\n this.widget.wrapper[0].style.display = invisible ? \"none\" : \"\";\n }\n }),\n\n floatingLabel: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n if (!widget.floatingLabel) {\n return;\n }\n\n widget.floatingLabel.refresh();\n }\n }),\n\n enabled: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n this.readonly = this.element.readOnly;\n },\n\n refresh: function() {\n if (this.widget.enable) {\n this.widget.enable(this.bindings.enabled.get());\n }\n if (this.readonly && this.widget.readonly) {\n this.widget.readonly(this.readonly);\n }\n }\n }),\n\n disabled: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n },\n\n refresh: function() {\n if (this.widget.enable) {\n this.widget.enable(!this.bindings.disabled.get());\n }\n }\n }),\n\n source: dataSourceBinding(\"source\", \"dataSource\", \"setDataSource\"),\n\n value: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n this._change = this.change.bind(this);\n this.widget.first(CHANGE, this._change);\n\n var value = this.bindings.value.get();\n\n this._valueIsObservableObject = !options.valuePrimitive && (value == null || value instanceof ObservableObject);\n this._valueIsObservableArray = value instanceof ObservableArray;\n this._initChange = false;\n },\n\n _source: function() {\n var source;\n\n if (this.widget.dataItem) {\n source = this.widget.dataItem();\n if (source && source instanceof ObservableObject) {\n return [source];\n }\n }\n\n if (this.bindings.source) {\n source = this.bindings.source.get();\n }\n\n if (!source || source instanceof kendo.data.DataSource) {\n source = this.widget.dataSource.flatView();\n }\n\n return source;\n },\n\n change: function() {\n var value = this.widget.value(),\n field = this.options.dataValueField || this.options.dataTextField,\n isArray = toString.call(value) === \"[object Array]\",\n isObservableObject = this._valueIsObservableObject,\n valueIndex, valueLength, values = [],\n sourceItem, sourceValue,\n idx, length, source;\n\n this._initChange = true;\n\n if (field) {\n\n if (value === \"\" && (isObservableObject || this.options.valuePrimitive)) {\n value = null;\n } else {\n source = this._source();\n\n if (isArray) {\n valueLength = value.length;\n values = value.slice(0);\n }\n\n for (idx = 0, length = source.length; idx < length; idx++) {\n sourceItem = source[idx];\n sourceValue = sourceItem.get(field);\n\n if (isArray) {\n for (valueIndex = 0; valueIndex < valueLength; valueIndex++) {\n if (sourceValue == values[valueIndex]) {\n values[valueIndex] = sourceItem;\n break;\n }\n }\n } else if (sourceValue == value) {\n value = isObservableObject ? sourceItem : sourceValue;\n break;\n }\n }\n\n if (values[0]) {\n if (this._valueIsObservableArray) {\n value = values;\n } else if (isObservableObject || !field) {\n value = values[0];\n } else {\n value = values[0].get(field);\n }\n }\n }\n }\n\n this.bindings.value.set(value);\n this._initChange = false;\n },\n\n refresh: function() {\n if (!this._initChange) {\n var widget = this.widget;\n var options = widget.options;\n var textField = options.dataTextField;\n var valueField = options.dataValueField || textField;\n var value = this.bindings.value.get();\n var text = options.text || \"\";\n var idx = 0, length;\n var values = [];\n\n if (value === undefined$1) {\n value = null;\n }\n\n if (valueField) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n values[idx] = value[idx].get(valueField);\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n text = value.get(textField);\n value = value.get(valueField);\n }\n }\n\n if (options.autoBind === false && !options.cascadeFrom && widget.listView && !widget.listView.bound()) {\n if (textField === valueField && !text) {\n text = value;\n }\n\n if (!text && (value || value === 0) && options.valuePrimitive) {\n widget.value(value);\n } else {\n widget._preselect(value, text);\n }\n } else {\n widget.value(value);\n }\n }\n\n this._initChange = false;\n },\n\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n dropdowntree: {\n value: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n this._change = this.change.bind(this);\n this.widget.first(CHANGE, this._change);\n this._initChange = false;\n },\n\n change: function() {\n var that = this,\n oldValues = that.bindings[VALUE].get(),\n valuePrimitive = that.options.valuePrimitive,\n selectedNode = that.widget.treeview.select(),\n nonPrimitiveValues = that.widget._isMultipleSelection() ? that.widget._getAllChecked() : (that.widget.treeview.dataItem(selectedNode) || that.widget.value()),\n newValues = (valuePrimitive || that.widget.options.autoBind === false) ? that.widget.value() : nonPrimitiveValues;\n\n var field = this.options.dataValueField || this.options.dataTextField;\n\n newValues = newValues.slice ? newValues.slice(0) : newValues;\n\n that._initChange = true;\n\n if (oldValues instanceof ObservableArray) {\n var remove = [];\n var newLength = newValues.length;\n var i = 0, j = 0;\n var old = oldValues[i];\n var same = false;\n var removeIndex;\n var newValue;\n var found;\n\n while (old !== undefined$1) {\n found = false;\n for (j = 0; j < newLength; j++) {\n if (valuePrimitive) {\n same = newValues[j] == old;\n } else {\n newValue = newValues[j];\n\n newValue = newValue.get ? newValue.get(field) : newValue;\n same = newValue == (old.get ? old.get(field) : old);\n }\n\n if (same) {\n newValues.splice(j, 1);\n newLength -= 1;\n found = true;\n break;\n }\n }\n\n if (!found) {\n remove.push(old);\n arraySplice(oldValues, i, 1);\n removeIndex = i;\n } else {\n i += 1;\n }\n\n old = oldValues[i];\n }\n\n arraySplice(oldValues, oldValues.length, 0, newValues);\n\n if (remove.length) {\n oldValues.trigger(\"change\", {\n action: \"remove\",\n items: remove,\n index: removeIndex\n });\n }\n\n if (newValues.length) {\n oldValues.trigger(\"change\", {\n action: \"add\",\n items: newValues,\n index: oldValues.length - 1\n });\n }\n } else {\n that.bindings[VALUE].set(newValues);\n }\n\n that._initChange = false;\n },\n\n refresh: function() {\n if (!this._initChange) {\n var options = this.options,\n widget = this.widget,\n field = options.dataValueField || options.dataTextField,\n value = this.bindings.value.get(),\n data = value,\n idx = 0, length,\n values = [],\n selectedValue;\n\n if (field) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n selectedValue = value[idx];\n values[idx] = selectedValue.get ? selectedValue.get(field) : selectedValue;\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(field);\n }\n }\n if (options.autoBind === false && options.valuePrimitive !== true) {\n widget._preselect(data, value);\n } else {\n widget.value(value);\n }\n }\n },\n\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\n })\n },\n gantt: {\n dependencies: dataSourceBinding(\"dependencies\", \"dependencies\", \"setDependenciesDataSource\")\n },\n\n multiselect: {\n value: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n this._change = this.change.bind(this);\n this.widget.first(CHANGE, this._change);\n this._initChange = false;\n },\n\n change: function() {\n var that = this,\n oldValues = that.bindings[VALUE].get(),\n valuePrimitive = that.options.valuePrimitive,\n newValues = valuePrimitive ? that.widget.value() : that.widget.dataItems();\n\n var field = this.options.dataValueField || this.options.dataTextField;\n\n newValues = newValues.slice(0);\n\n that._initChange = true;\n\n if (oldValues instanceof ObservableArray) {\n var remove = [];\n\n var newLength = newValues.length;\n\n var i = 0, j = 0;\n var old = oldValues[i];\n var same = false;\n var removeIndex;\n var newValue;\n var found;\n\n while (old !== undefined$1) {\n found = false;\n for (j = 0; j < newLength; j++) {\n if (valuePrimitive) {\n same = newValues[j] == old;\n } else {\n newValue = newValues[j];\n\n newValue = newValue.get ? newValue.get(field) : newValue;\n same = newValue == (old.get ? old.get(field) : old);\n }\n\n if (same) {\n newValues.splice(j, 1);\n newLength -= 1;\n found = true;\n break;\n }\n }\n\n if (!found) {\n remove.push(old);\n arraySplice(oldValues, i, 1);\n removeIndex = i;\n } else {\n i += 1;\n }\n\n old = oldValues[i];\n }\n\n arraySplice(oldValues, oldValues.length, 0, newValues);\n\n if (remove.length) {\n oldValues.trigger(\"change\", {\n action: \"remove\",\n items: remove,\n index: removeIndex\n });\n }\n\n if (newValues.length) {\n oldValues.trigger(\"change\", {\n action: \"add\",\n items: newValues,\n index: oldValues.length - 1\n });\n }\n } else {\n that.bindings[VALUE].set(newValues);\n }\n\n that._initChange = false;\n },\n\n refresh: function() {\n if (!this._initChange) {\n var options = this.options,\n widget = this.widget,\n field = options.dataValueField || options.dataTextField,\n value = this.bindings.value.get(),\n data = value,\n idx = 0, length,\n values = [],\n selectedValue;\n\n if (value === undefined$1) {\n value = null;\n }\n\n if (field) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n selectedValue = value[idx];\n values[idx] = selectedValue.get ? selectedValue.get(field) : selectedValue;\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(field);\n }\n }\n\n if (options.autoBind === false && options.valuePrimitive !== true && !widget._isBound()) {\n widget._preselect(data, value);\n } else {\n widget.value(value);\n }\n }\n },\n\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\n\n })\n },\n scheduler: {\n source: dataSourceBinding(\"source\", \"dataSource\", \"setDataSource\").extend({\n dataBound: function(e) {\n var idx;\n var length;\n var widget = this.widget;\n var elements = e.addedItems || widget.items();\n var data, parents;\n\n if (elements.length) {\n data = e.addedDataItems || widget.dataItems();\n parents = this.bindings.source._parents();\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n bindElement(elements[idx], data[idx], this._ns(e.ns), [data[idx]].concat(parents));\n }\n }\n }\n })\n },\n\n grid: {\n source: dataSourceBinding(\"source\", \"dataSource\", \"setDataSource\").extend({\n dataBound: function(e) {\n var idx,\n length,\n widget = this.widget,\n elements = e.addedItems || widget.items(),\n parents,\n data;\n\n if (elements.length) {\n data = e.addedDataItems || widget.dataItems();\n parents = this.bindings.source._parents();\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n bindElement(elements[idx], data[idx], this._ns(e.ns), [data[idx]].concat(parents));\n }\n }\n }\n })\n },\n\n badge: {\n text: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n },\n refresh: function() {\n var text = this.bindings.text.get();\n\n if (text == null) {\n text = \"\";\n }\n this.widget.text(text);\n }\n })\n }\n };\n\n var arraySplice = function(arr, idx, remove, add) {\n add = add || [];\n remove = remove || 0;\n\n var addLength = add.length;\n var oldLength = arr.length;\n\n var shifted = [].slice.call(arr, idx + remove);\n var shiftedLength = shifted.length;\n var index;\n\n if (addLength) {\n addLength = idx + addLength;\n index = 0;\n\n for (; idx < addLength; idx++) {\n arr[idx] = add[index];\n index++;\n }\n\n arr.length = addLength;\n } else if (remove) {\n arr.length = idx;\n\n remove += idx;\n while (idx < remove) {\n delete arr[--remove];\n }\n }\n\n if (shiftedLength) {\n shiftedLength = idx + shiftedLength;\n index = 0;\n\n for (; idx < shiftedLength; idx++) {\n arr[idx] = shifted[index];\n index++;\n }\n\n arr.length = shiftedLength;\n }\n\n idx = arr.length;\n\n while (idx < oldLength) {\n delete arr[idx];\n idx++;\n }\n };\n\n var BindingTarget = Class.extend( {\n init: function(target, options) {\n this.target = target;\n this.options = options;\n this.toDestroy = [];\n },\n\n bind: function(bindings) {\n var key,\n hasValue,\n hasSource,\n hasEvents,\n hasChecked,\n hasCss,\n widgetBinding = this instanceof WidgetBindingTarget,\n specificBinders = this.binders();\n\n for (key in bindings) {\n if (key == VALUE) {\n hasValue = true;\n } else if (key == SOURCE) {\n hasSource = true;\n } else if (key == EVENTS && !widgetBinding) {\n hasEvents = true;\n } else if (key == CHECKED) {\n hasChecked = true;\n } else if (key == CSS) {\n hasCss = true;\n } else {\n this.applyBinding(key, bindings, specificBinders);\n }\n }\n if (hasSource) {\n this.applyBinding(SOURCE, bindings, specificBinders);\n }\n\n if (hasValue) {\n this.applyBinding(VALUE, bindings, specificBinders);\n }\n\n if (hasChecked) {\n this.applyBinding(CHECKED, bindings, specificBinders);\n }\n\n if (hasEvents && !widgetBinding) {\n this.applyBinding(EVENTS, bindings, specificBinders);\n }\n\n if (hasCss && !widgetBinding) {\n this.applyBinding(CSS, bindings, specificBinders);\n }\n\n if (widgetBinding && this.target && this.target.floatingLabel) {\n this.applyBinding(\"floatingLabel\", bindings, specificBinders);\n }\n },\n\n binders: function() {\n return binders[this.target.nodeName.toLowerCase()] || {};\n },\n\n applyBinding: function(name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders[name],\n toDestroy = this.toDestroy,\n attribute,\n binding = bindings[name];\n\n if (binder) {\n binder = new binder(this.target, bindings, this.options);\n\n toDestroy.push(binder);\n\n if (binding instanceof Binding) {\n binder.bind(binding);\n toDestroy.push(binding);\n } else {\n for (attribute in binding) {\n binder.bind(binding, attribute);\n toDestroy.push(binding[attribute]);\n }\n }\n } else if (name !== \"template\") {\n throw new Error(\"The \" + name + \" binding is not supported by the \" + this.target.nodeName.toLowerCase() + \" element\");\n }\n },\n\n destroy: function() {\n var idx,\n length,\n toDestroy = this.toDestroy;\n\n for (idx = 0, length = toDestroy.length; idx < length; idx++) {\n toDestroy[idx].destroy();\n }\n }\n });\n\n var WidgetBindingTarget = BindingTarget.extend( {\n binders: function() {\n return binders.widget[this.target.options.name.toLowerCase()] || {};\n },\n\n applyBinding: function(name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders.widget[name],\n toDestroy = this.toDestroy,\n attribute,\n binding = bindings[name];\n\n if (binder) {\n binder = new binder(this.target, bindings, this.target.options);\n\n toDestroy.push(binder);\n\n\n if (binding instanceof Binding) {\n binder.bind(binding);\n toDestroy.push(binding);\n } else {\n for (attribute in binding) {\n binder.bind(binding, attribute);\n toDestroy.push(binding[attribute]);\n }\n }\n } else {\n throw new Error(\"The \" + name + \" binding is not supported by the \" + this.target.options.name + \" widget\");\n }\n }\n });\n\n function bindingTargetForRole(element, roles) {\n var widget = kendo.initWidget(element, {}, roles);\n\n if (widget) {\n return new WidgetBindingTarget(widget);\n }\n }\n\n var keyValueRegExp = /[A-Za-z0-9_\\-]+:(\\{([^}]*)\\}|[^,}]+)/g,\n whiteSpaceRegExp = /\\s/g;\n\n function parseBindings(bind) {\n var result = {},\n idx,\n length,\n token,\n colonIndex,\n key,\n value,\n tokens;\n\n tokens = bind.match(keyValueRegExp);\n\n for (idx = 0, length = tokens.length; idx < length; idx++) {\n token = tokens[idx];\n colonIndex = token.indexOf(\":\");\n\n key = token.substring(0, colonIndex);\n value = token.substring(colonIndex + 1);\n\n if (value.charAt(0) == \"{\") {\n value = parseBindings(value);\n }\n\n result[key] = value;\n }\n\n return result;\n }\n\n function createBindings(bindings, source, type) {\n var binding,\n result = {};\n\n for (binding in bindings) {\n result[binding] = new type(source, bindings[binding]);\n }\n\n return result;\n }\n\n function bindElement(element, source, roles, parents) {\n\n if (!element || element.getAttribute(\"data-\" + kendo.ns + \"stop\")) {\n return;\n }\n\n var role = element.getAttribute(\"data-\" + kendo.ns + \"role\"),\n idx,\n bind = element.getAttribute(\"data-\" + kendo.ns + \"bind\"),\n childrenCopy = [],\n deep = true,\n bindings,\n options = {},\n target;\n\n parents = parents || [source];\n\n if (role || bind) {\n unbindElement(element, false);\n }\n\n if (role) {\n target = bindingTargetForRole(element, roles);\n }\n\n if (bind) {\n bind = parseBindings(bind.replace(whiteSpaceRegExp, \"\"));\n\n if (!target) {\n options = kendo.parseOptions(element, { textField: \"\", valueField: \"\", template: \"\", valueUpdate: CHANGE, valuePrimitive: false, autoBind: true }, source);\n options.roles = roles;\n target = new BindingTarget(element, options);\n }\n\n target.source = source;\n\n bindings = createBindings(bind, parents, Binding);\n\n if (options.template) {\n bindings.template = new TemplateBinding(parents, \"\", options.template);\n }\n\n if (bindings.click) {\n bind.events = bind.events || {};\n bind.events.click = bind.click;\n bindings.click.destroy();\n delete bindings.click;\n }\n\n if (bindings.source) {\n deep = false;\n }\n\n if (bind.attr) {\n bindings.attr = createBindings(bind.attr, parents, Binding);\n }\n\n if (bind.style) {\n bindings.style = createBindings(bind.style, parents, Binding);\n }\n\n if (bind.events) {\n bindings.events = createBindings(bind.events, parents, EventBinding);\n }\n\n if (bind.css) {\n bindings.css = createBindings(bind.css, parents, Binding);\n }\n\n target.bind(bindings);\n }\n\n if (target) {\n element.kendoBindingTarget = target;\n }\n\n var children = element.children;\n if (deep && children && !element.getAttribute(\"data-\" + kendo.ns + \"stop\")) {\n // https://github.com/telerik/kendo/issues/1240 for the weirdness.\n for (idx = 0; idx < children.length; idx++) {\n childrenCopy[idx] = children[idx];\n }\n\n for (idx = 0; idx < childrenCopy.length; idx++) {\n bindElement(childrenCopy[idx], source, roles, parents);\n }\n }\n }\n\n function bind(dom, object) {\n var idx,\n length,\n node,\n roles = kendo.rolesFromNamespaces([].slice.call(arguments, 2));\n\n object = kendo.observable(object);\n dom = $(dom);\n\n for (idx = 0, length = dom.length; idx < length; idx++) {\n node = dom[idx];\n if (node.nodeType === 1) {\n bindElement(node, object, roles);\n }\n }\n }\n\n function unbindElement(element, destroyWidget) {\n var bindingTarget = element.kendoBindingTarget;\n\n if (bindingTarget) {\n bindingTarget.destroy();\n\n if (deleteExpando) {\n delete element.kendoBindingTarget;\n } else if (element.removeAttribute) {\n element.removeAttribute(\"kendoBindingTarget\");\n } else {\n element.kendoBindingTarget = null;\n }\n }\n\n if (destroyWidget) {\n var widget = kendo.widgetInstance($(element));\n if (widget && typeof widget.destroy === FUNCTION) {\n widget.destroy();\n }\n }\n }\n\n function unbindElementTree(element, destroyWidgets) {\n\n if (!element) {\n return;\n }\n\n unbindElement(element, destroyWidgets);\n\n unbindElementChildren(element, destroyWidgets);\n }\n\n function unbindElementChildren(element, destroyWidgets) {\n var children = element.children;\n\n if (children) {\n for (var idx = 0, length = children.length; idx < length; idx++) {\n unbindElementTree(children[idx], destroyWidgets);\n }\n }\n }\n\n function unbind(dom) {\n var idx, length;\n\n dom = $(dom);\n\n for (idx = 0, length = dom.length; idx < length; idx++ ) {\n unbindElementTree(dom[idx], false);\n }\n }\n\n function notify(widget, namespace) {\n var element = widget.element,\n bindingTarget = element[0].kendoBindingTarget;\n\n if (bindingTarget) {\n bind(element, bindingTarget.source, namespace);\n }\n }\n\n function retrievePrimitiveValues(value, valueField) {\n var values = [];\n var idx = 0;\n var length;\n var item;\n\n if (!valueField) {\n return value;\n }\n\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n item = value[idx];\n values[idx] = item.get ? item.get(valueField) : item[valueField];\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(valueField);\n }\n\n return value;\n }\n\n kendo.unbind = unbind;\n kendo.bind = bind;\n kendo.data.binders = binders;\n kendo.data.Binder = Binder;\n kendo.notify = notify;\n\n kendo.observable = function(object) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n\n return object;\n };\n\n kendo.observableHierarchy = function(array) {\n var dataSource = kendo.data.HierarchicalDataSource.create(array);\n\n function recursiveRead(data) {\n var i, children;\n\n for (i = 0; i < data.length; i++) {\n data[i]._initChildren();\n\n children = data[i].children;\n\n children.fetch();\n\n data[i].items = children.data();\n\n recursiveRead(data[i].items);\n }\n }\n\n dataSource.fetch();\n\n recursiveRead(dataSource.data());\n\n dataSource._data._dataSource = dataSource;\n\n return dataSource._data;\n };\n\n })(window.kendo.jQuery);\n var kendo$a = kendo;\n\n let __meta__$7 = {\n id: \"validator\",\n name: \"Validator\",\n category: \"web\",\n description: \"The Validator offers an easy way to do a client-side form validation.\",\n depends: [ \"core\" ]\n };\n\n\n (function($, undefined$1) {\n let kendo = window.kendo,\n Widget = kendo.ui.Widget,\n NS = \".kendoValidator\",\n INVALIDMSG = \"k-invalid-msg\",\n invalidMsgRegExp = new RegExp(INVALIDMSG,'i'),\n INVALIDINPUT = \"k-invalid\",\n VALIDINPUT = \"k-valid\",\n VALIDATIONSUMMARY = \"k-validation-summary\",\n INVALIDLABEL = \"k-text-error\",\n MESSAGEBOX = \"k-messagebox k-messagebox-error\",\n INPUTINNER = \".k-input-inner\",\n INPUTWRAPPER = \".k-input\",\n ARIAINVALID = \"aria-invalid\",\n ARIADESCRIBEDBY = \"aria-describedby\",\n emailRegExp = /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/i,\n ALLOWED_URL_PROTOCOLS = [\"http:\", \"https:\", \"ftp:\", \"ftps:\"],\n INPUTSELECTOR = \":input:not(:button,[type=submit],[type=reset],[disabled],[readonly])\",\n CHECKBOXSELECTOR = \":checkbox:not([disabled],[readonly])\",\n NUMBERINPUTSELECTOR = \"[type=number],[type=range]\",\n BLUR = \"blur\",\n NAME = \"name\",\n FORM = \"form\",\n NOVALIDATE = \"novalidate\",\n //events\n VALIDATE = \"validate\",\n CHANGE = \"change\",\n VALIDATE_INPUT = \"validateInput\",\n\n patternMatcher = function(value, pattern) {\n if (typeof pattern === \"string\") {\n pattern = new RegExp('^(?:' + pattern + ')$');\n }\n return pattern.test(value);\n },\n matcher = function(input, selector, pattern) {\n var value = input.val();\n\n if (input.filter(selector).length && value !== \"\") {\n return patternMatcher(value, pattern);\n }\n return true;\n },\n hasAttribute = function(input, name) {\n if (input.length) {\n return input[0].attributes[name] != null;\n }\n return false;\n };\n\n if (!kendo.ui.validator) {\n kendo.ui.validator = { rules: {}, messages: {}, allowSubmit: $.noop, validateOnInit: $.noop };\n }\n\n function resolveRules(element) {\n var resolvers = kendo.ui.validator.ruleResolvers || {},\n rules = {},\n name;\n\n for (name in resolvers) {\n $.extend(true, rules, resolvers[name].resolve(element));\n }\n return rules;\n }\n\n function decode(value) {\n return value.replace(/&/g, '&')\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/</g, '<')\n .replace(/>/g, '>');\n }\n\n function numberOfDecimalDigits(value) {\n value = (value + \"\").split('.');\n if (value.length > 1) {\n return value[1].length;\n }\n return 0;\n }\n\n function parseHtml(text) {\n if ($.parseHTML) {\n return $($.parseHTML(text));\n }\n return $(text);\n }\n\n function searchForMessageContainer(elements, fieldName) {\n var containers = $(),\n element,\n attr;\n\n for (var idx = 0, length = elements.length; idx < length; idx++) {\n element = elements[idx];\n if (invalidMsgRegExp.test(element.className)) {\n attr = element.getAttribute(kendo.attr(\"for\"));\n if (attr === fieldName) {\n containers = containers.add(element);\n }\n }\n }\n return containers;\n }\n\n function isLabelFor(label, element) {\n if (!label) {\n return false;\n }\n if (typeof label.nodeName !== 'string' || label.nodeName !== 'LABEL') {\n return false;\n }\n if (typeof label.getAttribute('for') !== 'string' || typeof element.getAttribute('id') !== 'string') {\n return false;\n }\n if (label.getAttribute('for') !== element.getAttribute('id')) {\n return false;\n }\n\n return true;\n }\n\n var SUMMARYTEMPLATE = ({ errors }) => {\n let result = '
      ';\n for (var i = 0; i < errors.length; i += 1) {\n result += `
    • ${errors[i].message}
    • `;\n }\n\n result += '
    ';\n return result;\n };\n\n var Validator = Widget.extend({\n init: function(element, options) {\n var that = this,\n resolved = resolveRules(element),\n validateAttributeSelector = \"[\" + kendo.attr(\"validate\") + \"!=false]\";\n\n options = options || {};\n\n options.rules = $.extend({}, kendo.ui.validator.rules, resolved.rules, options.rules);\n options.messages = $.extend({}, kendo.ui.validator.messages, resolved.messages, options.messages);\n\n Widget.fn.init.call(that, element, options);\n\n that._errorTemplate = kendo.template(that.options.errorTemplate);\n that._summaryTemplate = kendo.template(that.options.validationSummary.template || SUMMARYTEMPLATE);\n\n if (that.element.is(FORM)) {\n that.element.attr(NOVALIDATE, NOVALIDATE);\n }\n\n that._inputSelector = INPUTSELECTOR + validateAttributeSelector;\n that._checkboxSelector = CHECKBOXSELECTOR + validateAttributeSelector;\n\n that._errors = {};\n that._attachEvents();\n that._isValidated = false;\n\n if (that._validateOnInit()) {\n that.validate();\n }\n },\n\n events: [ VALIDATE, CHANGE, VALIDATE_INPUT ],\n\n options: {\n name: \"Validator\",\n errorTemplate: ({ message }) => `${message}`,\n messages: {\n required: \"{0} is required\",\n pattern: \"{0} is not valid\",\n min: \"{0} should be greater than or equal to {1}\",\n max: \"{0} should be smaller than or equal to {1}\",\n step: \"{0} is not valid\",\n email: \"{0} is not valid email\",\n url: \"{0} is not valid URL\",\n date: \"{0} is not valid date\",\n dateCompare: \"End date should be greater than or equal to the start date\",\n captcha: \"The text you entered doesn't match the image.\"\n },\n rules: {\n required: function(input) {\n var noNameCheckbox = !input.attr(\"name\") && !input.is(\":checked\"),\n name = input.attr(\"name\"),\n quote = !!name && name.indexOf(\"'\") > -1 ? '\\\"' : \"'\",\n namedCheckbox = input.attr(\"name\") && !this.element.find(\"input[name=\" + quote + input.attr(\"name\") + quote + \"]:checked\").length,\n checkbox = input.filter(\"[type=checkbox]\").length && (noNameCheckbox || namedCheckbox),\n radio = input.filter(\"[type=radio]\").length && !this.element.find(\"input[name=\" + quote + input.attr(\"name\") + quote + \"]:checked\").length,\n value = input.val();\n\n return !(hasAttribute(input, \"required\") && (!value || value === \"\" || value.length === 0 || checkbox || radio));\n },\n pattern: function(input) {\n if (input.filter(\"[type=text],[type=email],[type=url],[type=tel],[type=search],[type=password]\").filter(\"[pattern]\").length && input.val() !== \"\") {\n return patternMatcher(input.val(), input.attr(\"pattern\"));\n }\n return true;\n },\n min: function(input) {\n if (input.filter(NUMBERINPUTSELECTOR + \",[\" + kendo.attr(\"type\") + \"=number]\").filter(\"[min]\").length && input.val() !== \"\") {\n var min = parseFloat(input.attr(\"min\")) || 0,\n val = kendo.parseFloat(input.val());\n\n return min <= val;\n }\n return true;\n },\n max: function(input) {\n if (input.filter(NUMBERINPUTSELECTOR + \",[\" + kendo.attr(\"type\") + \"=number]\").filter(\"[max]\").length && input.val() !== \"\") {\n var max = parseFloat(input.attr(\"max\")) || 0,\n val = kendo.parseFloat(input.val());\n\n return max >= val;\n }\n return true;\n },\n step: function(input) {\n if (input.filter(NUMBERINPUTSELECTOR + \",[\" + kendo.attr(\"type\") + \"=number]\").filter(\"[step]\").length && input.val() !== \"\") {\n var min = parseFloat(input.attr(\"min\")) || 0,\n step = kendo.parseFloat(input.attr(\"step\")) || 1,\n val = parseFloat(input.val()),\n decimals = numberOfDecimalDigits(step),\n raise;\n\n if (decimals) {\n raise = Math.pow(10, decimals);\n return ((Math.floor((val - min) * raise)) % (step * raise)) / Math.pow(100, decimals) === 0;\n }\n return ((val - min) % step) === 0;\n }\n return true;\n },\n email: function(input) {\n return matcher(input, \"[type=email],[\" + kendo.attr(\"type\") + \"=email]\", emailRegExp);\n },\n url: function(input) {\n if (input.filter(\"[type=url],[\" + kendo.attr(\"type\") + \"=url]\").length && input.val() !== \"\") {\n try {\n const url = new URL(input.val());\n return ALLOWED_URL_PROTOCOLS.includes(url.protocol);\n } catch {\n return false;\n }\n }\n return true;\n },\n date: function(input) {\n if (input.filter(\"[type^=date],[\" + kendo.attr(\"type\") + \"=date]\").length && input.val() !== \"\") {\n return kendo.parseDate(input.val(), input.attr(kendo.attr(\"format\"))) !== null;\n }\n return true;\n },\n captcha: function(input) {\n if (input.filter(\"[\" + kendo.attr(\"role\") + \"=captcha]\").length) {\n var that = this,\n captcha = kendo.widgetInstance(input),\n isValidated = function(isValid) {\n return typeof(isValid) !== 'undefined' && isValid !== null;\n };\n\n if (!input.data(\"captcha_validating\") && !isValidated(captcha.isValid()) && !!captcha.getCaptchaId()) {\n input.data(\"captcha_validating\", true);\n that._validating = true;\n captcha.validate().done(function() {\n that._validating = false;\n that._checkElement(input);\n }).fail(function(data) {\n that._validating = false;\n if (data.error && data.error === \"handler_not_defined\") {\n window.console.warn(\"Captcha's validationHandler is not defined! You should either define a proper validation endpoint or declare a callback function to ensure the required behavior.\");\n }\n });\n }\n\n if (isValidated(captcha.isValid())) {\n input.removeData(\"captcha_validating\");\n return captcha.isValid();\n }\n }\n return true;\n }\n },\n validateOnBlur: true,\n validationSummary: false\n },\n\n _allowSubmit: function() {\n return kendo.ui.validator.allowSubmit(this.element, this.errors());\n },\n\n _validateOnInit: function() {\n return kendo.ui.validator.validateOnInit(this.element);\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n\n this.element.off(NS);\n\n if (this.validationSummary) {\n this.validationSummary.off(NS);\n this.validationSummary = null;\n }\n },\n\n value: function() {\n if (!this._isValidated) {\n return false;\n }\n\n return this.errors().length === 0;\n },\n\n _submit: function(e) {\n if ((!this.validate() && !this._allowSubmit()) || this._validating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n e.preventDefault();\n return false;\n }\n return true;\n },\n\n _checkElement: function(element) {\n var state = this.value();\n\n this.validateInput(element);\n\n if (this.value() !== state) {\n this.trigger(CHANGE);\n }\n },\n\n _attachEvents: function() {\n var that = this;\n\n if (that.element.is(FORM)) {\n that.element.on(\"submit\" + NS, that._submit.bind(that));\n }\n\n if (that.options.validateOnBlur) {\n if (!that.element.is(INPUTSELECTOR)) {\n that.element.on(BLUR + NS, that._inputSelector, function() {\n that._checkElement($(this));\n });\n\n that.element.on(\"click\" + NS, that._checkboxSelector, function() {\n that._checkElement($(this));\n });\n } else {\n that.element.on(BLUR + NS, function() {\n that._checkElement(that.element);\n });\n\n if (that.element.is(CHECKBOXSELECTOR)) {\n that.element.on(\"click\" + NS, function() {\n that._checkElement(that.element);\n });\n }\n }\n }\n },\n\n validate: function() {\n var inputs;\n var idx;\n var result = false;\n var length;\n\n var isValid = this.value();\n\n this._errors = {};\n\n if (!this.element.is(INPUTSELECTOR)) {\n var invalid = false;\n\n inputs = this.element.find(this._inputSelector);\n\n for (idx = 0, length = inputs.length; idx < length; idx++) {\n if (!this.validateInput(inputs.eq(idx))) {\n invalid = true;\n }\n }\n\n result = !invalid;\n } else {\n result = this.validateInput(this.element);\n }\n\n if (this.options.validationSummary && !isValid) {\n this.showValidationSummary();\n }\n\n this.trigger(VALIDATE, { valid: result, errors: this.errors() });\n\n if (isValid !== result) {\n this.trigger(CHANGE);\n }\n\n return result;\n },\n\n validateInput: function(input) {\n input = $(input);\n\n\n this._isValidated = true;\n\n var that = this,\n template = that._errorTemplate,\n result = that._checkValidity(input),\n valid = result.valid,\n widgetInstance,\n className = \".\" + INVALIDMSG,\n fieldName = (input.attr(NAME) || \"\"),\n lbl = that._findMessageContainer(fieldName).add(input.next(className).filter(function() {\n var element = $(this);\n if (element.filter(\"[\" + kendo.attr(\"for\") + \"]\").length) {\n return element.attr(kendo.attr(\"for\")) === fieldName;\n }\n\n return true;\n\n })).addClass(\"k-hidden\"),\n messageText = !valid ? that._extractMessage(input, result.key) : \"\",\n messageLabel = !valid ? parseHtml(template({ message: decode(messageText), field: fieldName })) : \"\",\n wasValid = !input.attr(ARIAINVALID),\n isInputInner = input.is(INPUTINNER),\n inputWrapper = input.parent(INPUTWRAPPER);\n\n input.removeAttr(ARIAINVALID);\n\n if (input.hasClass(\"k-hidden\")) {\n widgetInstance = kendo.widgetInstance(input.closest(\".k-signature\"));\n }\n\n if (input.is(\"[type=radio]\")) {\n widgetInstance = kendo.widgetInstance(input.closest(\".k-radio-list\"));\n }\n\n if (input.is(\"[type=checkbox]\")) {\n widgetInstance = kendo.widgetInstance(input.closest(\".k-checkbox-list\"));\n }\n\n if (!valid && !input.data(\"captcha_validating\")) {\n that._errors[fieldName] = messageText;\n var lblId = lbl.attr('id');\n\n that._decorateMessageContainer(messageLabel, fieldName);\n\n\n if (lblId) {\n messageLabel.attr('id', lblId);\n }\n\n if (lbl.length !== 0) {\n lbl.replaceWith(messageLabel);\n } else {\n widgetInstance = widgetInstance || kendo.widgetInstance(input);\n var parentElement = input.parent().get(0);\n var nextElement = input.next().get(0);\n var prevElement = input.prev().get(0);\n\n // Get the instance of the RadioGroup which is not initialized on the input element\n if (!widgetInstance && input.is(\"[type=radio]\")) {\n widgetInstance = kendo.widgetInstance(input.closest(\".k-radio-list\"));\n }\n\n // Get the instance of the CheckBoxGroup which is not initialized on the input element\n if (!widgetInstance && input.is(\"[type=checkbox]\")) {\n widgetInstance = kendo.widgetInstance(input.closest(\".k-checkbox-list\"));\n }\n\n if (widgetInstance && widgetInstance.wrapper && (widgetInstance.element !== widgetInstance.wrapper || [\"Signature\", \"RadioGroup\", \"CheckBoxGroup\"].indexOf(widgetInstance.options.name) > -1)) {\n messageLabel.insertAfter(widgetInstance.wrapper);\n } else if (parentElement && parentElement.nodeName === \"LABEL\") {\n // Input inside label\n messageLabel.insertAfter(parentElement);\n } else if (nextElement && isLabelFor(nextElement, input[0])) {\n // Input before label\n messageLabel.insertAfter(nextElement);\n } else if (prevElement && isLabelFor(prevElement, input[0])) {\n // Input after label\n messageLabel.insertAfter(input);\n } else if (isInputInner && inputWrapper.length) {\n // Input after input wrapper\n messageLabel.insertAfter(inputWrapper);\n } else {\n messageLabel.insertAfter(input);\n }\n }\n\n messageLabel.removeClass(\"k-hidden\");\n\n input.attr(ARIAINVALID, true);\n } else {\n delete that._errors[fieldName];\n }\n\n if (wasValid !== valid) {\n this.trigger(VALIDATE_INPUT, { valid: valid, input: input, error: messageText, field: fieldName });\n }\n\n widgetInstance = (widgetInstance && widgetInstance.options.name == \"Signature\") ? widgetInstance : kendo.widgetInstance(input);\n if (!widgetInstance || !(widgetInstance._inputWrapper || widgetInstance.wrapper) || (input.is(\"[type=checkbox]\") || input.is(\"[type=radio]\"))) {\n input.toggleClass(INVALIDINPUT, !valid);\n input.toggleClass(VALIDINPUT, valid);\n }\n\n if (widgetInstance) {\n var inputWrap = widgetInstance._inputWrapper || widgetInstance.wrapper;\n var inputLabel = widgetInstance._inputLabel;\n\n if (inputWrap && !(input.is(\"[type=checkbox]\") || input.is(\"[type=radio]\"))) {\n inputWrap.toggleClass(INVALIDINPUT, !valid);\n inputWrap.toggleClass(VALIDINPUT, valid);\n }\n if (inputLabel) {\n inputLabel.toggleClass(INVALIDLABEL, !valid);\n }\n }\n\n if (wasValid !== valid) {\n var errorId = messageLabel ? messageLabel.attr(\"id\") : lbl.attr(\"id\");\n\n that._associateMessageContainer(input, errorId);\n\n if (this.options.validationSummary && this.options.validateOnBlur) {\n this.showValidationSummary();\n }\n }\n\n return valid;\n },\n\n hideMessages: function() {\n var that = this,\n className = \".\" + INVALIDMSG,\n element = that.element;\n\n that._disassociateMessageContainers();\n\n if (!element.is(INPUTSELECTOR)) {\n element.find(className).addClass(\"k-hidden\");\n } else {\n element.next(className).addClass(\"k-hidden\");\n }\n },\n\n reset: function() {\n var that = this,\n inputs = that.element.find(\".\" + INVALIDINPUT),\n labels = that.element.find(\".\" + INVALIDLABEL);\n\n that._errors = [];\n\n that.hideMessages();\n\n that.hideValidationSummary();\n\n inputs.removeAttr(ARIAINVALID);\n inputs.removeClass(INVALIDINPUT);\n labels.removeClass(INVALIDLABEL);\n },\n\n _findMessageContainer: function(fieldName) {\n var locators = kendo.ui.validator.messageLocators,\n name,\n containers = $();\n\n for (var idx = 0, length = this.element.length; idx < length; idx++) {\n containers = containers.add(searchForMessageContainer(this.element[idx].getElementsByTagName(\"*\"), fieldName));\n }\n\n for (name in locators) {\n containers = containers.add(locators[name].locate(this.element, fieldName));\n }\n\n return containers;\n },\n\n _decorateMessageContainer: function(container, fieldName) {\n var locators = kendo.ui.validator.messageLocators,\n name;\n\n container.addClass(INVALIDMSG)\n .attr(kendo.attr(\"for\"), fieldName || \"\");\n\n if (!container.attr(\"id\")) {\n container.attr(\"id\", fieldName + \"-error\");\n }\n\n for (name in locators) {\n locators[name].decorate(container, fieldName);\n }\n },\n\n _extractMessage: function(input, ruleKey) {\n var that = this,\n customMessage = that.options.messages[ruleKey],\n fieldName = input.attr(NAME),\n nonDefaultMessage;\n\n if (!kendo.ui.Validator.prototype.options.messages[ruleKey]) {\n nonDefaultMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n }\n\n customMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n\n return kendo.format(input.attr(kendo.attr(ruleKey + \"-msg\")) || input.attr(\"validationMessage\") || nonDefaultMessage || customMessage || input.attr(\"title\") || \"\",\n fieldName,\n input.attr(ruleKey) || input.attr(kendo.attr(ruleKey)));\n },\n\n _checkValidity: function(input) {\n var rules = this.options.rules,\n rule;\n\n for (rule in rules) {\n if (!rules[rule].call(this, input)) {\n return { valid: false, key: rule };\n }\n }\n\n return { valid: true };\n },\n\n errors: function() {\n var results = [],\n errors = this._errors,\n error;\n\n for (error in errors) {\n results.push(errors[error]);\n }\n return results;\n },\n\n setOptions: function(options) {\n if (options.validationSummary) {\n this.hideValidationSummary();\n }\n\n kendo.deepExtend(this.options, options);\n\n this.destroy();\n\n this.init(this.element, this.options);\n\n this._setEvents(this.options);\n },\n\n _getInputNames: function() {\n var that = this,\n inputs = that.element.find(that._inputSelector),\n sorted = [];\n\n for (var idx = 0, length = inputs.length; idx < length; idx++) {\n var input = $(inputs[idx]);\n\n if (hasAttribute(input, NAME)) {\n // Add current name if:\n // - not present so far;\n // - present but not part of CheckBoxGroup or RadioGroup.\n if (sorted.indexOf(input.attr(NAME)) === -1 ||\n (input.closest(\".k-checkbox-list\").length === 0 &&\n input.closest(\".k-radio-list\").length === 0)) {\n sorted.push(input.attr(NAME));\n }\n }\n }\n\n return sorted;\n },\n\n _associateMessageContainer: function(input, errorId) {\n var nextFocusable = kendo.getWidgetFocusableElement(input);\n\n if (!nextFocusable || !errorId) {\n return;\n }\n\n kendo.toggleAttribute(nextFocusable, ARIADESCRIBEDBY, errorId);\n },\n\n _disassociateMessageContainers: function() {\n var that = this,\n inputs = that.element.find(\".\" + INVALIDINPUT).addBack(),\n input, errorId;\n\n for (var i = 0; i < inputs.length; i += 1) {\n input = $(inputs[i]);\n\n if (input.is(\"input\")) {\n errorId = that._findMessageContainer(input.attr(NAME))\n .add(input.next(\".\" + INVALIDMSG))\n .attr(\"id\");\n\n that._associateMessageContainer(input, errorId);\n }\n }\n },\n\n _errorsByName: function() {\n var that = this,\n inputNames = that._getInputNames(),\n sorted = [];\n\n for (var i = 0; i < inputNames.length; i += 1) {\n var name = inputNames[i];\n\n if (that._errors[name]) {\n sorted.push({\n field: name,\n message: that._errors[name]\n });\n }\n }\n\n return sorted;\n },\n\n _renderSummary: function() {\n var that = this,\n options = this.options.validationSummary,\n element = this.element,\n prevElement = element.prev(),\n container;\n\n if (options.container) {\n container = $(options.container);\n } else if (prevElement && prevElement.hasClass(VALIDATIONSUMMARY)) {\n container = prevElement;\n } else {\n container = $(\"
    \").insertBefore(that.element);\n }\n\n container.addClass([VALIDATIONSUMMARY, MESSAGEBOX].join(\" \"));\n container.attr(\"role\", \"alert\");\n\n container.on(\"click\" + NS, that._summaryClick.bind(that));\n\n return container;\n },\n\n _summaryClick: function(e) {\n e.preventDefault();\n\n var that = this,\n link = $(e.target),\n target = that.element.find(\"[name='\" + link.data(\"field\") + \"']\"),\n nextFocusable;\n\n if (!target.length) {\n return;\n }\n\n nextFocusable = kendo.getWidgetFocusableElement(target);\n\n if (nextFocusable) {\n nextFocusable.trigger(\"focus\");\n }\n },\n\n showValidationSummary: function() {\n var that = this,\n summary = that.validationSummary,\n errors = that._errorsByName(),\n errorsList;\n\n if (!summary) {\n summary = that.validationSummary = that._renderSummary();\n }\n\n errorsList = parseHtml(that._summaryTemplate({\n errors: errors\n }));\n\n summary.html(errorsList);\n\n summary.toggleClass(\"k-hidden\", !errors.length);\n },\n\n hideValidationSummary: function() {\n var that = this,\n summary = that.validationSummary;\n\n if (!summary) {\n return;\n }\n\n summary.addClass(\"k-hidden\");\n }\n });\n\n kendo.ui.plugin(Validator);\n })(window.kendo.jQuery);\n var kendo$9 = kendo;\n\n var __meta__$6 = {\n id: \"router\",\n name: \"Router\",\n category: \"framework\",\n description: \"The Router class is responsible for tracking the application state and navigating between the application states.\",\n depends: [ \"core\" ],\n hidden: false\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n CHANGE = \"change\",\n BACK = \"back\",\n SAME = \"same\",\n support = kendo.support,\n location = window.location,\n history = window.history,\n CHECK_URL_INTERVAL = 50,\n BROKEN_BACK_NAV = kendo.support.browser.msie,\n hashStrip = /^#*/,\n document = window.document;\n\n function absoluteURL(path, pathPrefix) {\n if (!pathPrefix) {\n return path;\n }\n\n if (path + \"/\" === pathPrefix) {\n path = pathPrefix;\n }\n\n var regEx = new RegExp(\"^\" + pathPrefix, \"i\");\n\n if (!regEx.test(path)) {\n path = pathPrefix + \"/\" + path;\n }\n\n return location.protocol + '//' + (location.host + \"/\" + path).replace(/\\/\\/+/g, '/');\n }\n\n function hashDelimiter(bang) {\n return bang ? \"#!\" : \"#\";\n }\n\n function locationHash(hashDelimiter) {\n var href = location.href;\n\n // ignore normal anchors if in hashbang mode - however, still return \"\" if no hash present\n if (hashDelimiter === \"#!\" && href.indexOf(\"#\") > -1 && href.indexOf(\"#!\") < 0) {\n return null;\n }\n\n return href.split(hashDelimiter)[1] || \"\";\n }\n\n function stripRoot(root, url) {\n if (url.indexOf(root) === 0) {\n return (url.substr(root.length)).replace(/\\/\\//g, '/');\n } else {\n return url;\n }\n }\n\n var HistoryAdapter = kendo.Class.extend({\n back: function() {\n if (BROKEN_BACK_NAV) {\n setTimeout(function() { history.back(); });\n } else {\n history.back();\n }\n },\n\n forward: function() {\n if (BROKEN_BACK_NAV) {\n setTimeout(function() { history.forward(); });\n } else {\n history.forward();\n }\n },\n\n length: function() {\n return history.length;\n },\n\n replaceLocation: function(url) {\n location.replace(url);\n }\n });\n\n var PushStateAdapter = HistoryAdapter.extend({\n init: function(root) {\n this.root = root;\n },\n\n navigate: function(to) {\n history.pushState({}, document.title, absoluteURL(to, this.root));\n },\n\n replace: function(to) {\n history.replaceState({}, document.title, absoluteURL(to, this.root));\n },\n\n normalize: function(url) {\n return stripRoot(this.root, url);\n },\n\n current: function() {\n var current = location.pathname;\n\n if (location.search) {\n current += location.search;\n }\n\n return stripRoot(this.root, current);\n },\n\n change: function(callback) {\n $(window).bind(\"popstate.kendo\", callback);\n },\n\n stop: function() {\n $(window).unbind(\"popstate.kendo\");\n },\n\n normalizeCurrent: function(options) {\n var fixedUrl,\n root = options.root,\n pathname = location.pathname,\n hash = locationHash(hashDelimiter(options.hashBang));\n\n if (root === pathname + \"/\") {\n fixedUrl = root;\n }\n\n if (root === pathname && hash) {\n fixedUrl = absoluteURL(hash.replace(hashStrip, ''), root);\n }\n\n if (fixedUrl) {\n history.pushState({}, document.title, fixedUrl);\n }\n }\n });\n\n function fixHash(url) {\n return url.replace(/^(#)?/, \"#\");\n }\n\n function fixBang(url) {\n return url.replace(/^(#(!)?)?/, \"#!\");\n }\n\n var HashAdapter = HistoryAdapter.extend({\n init: function(bang) {\n this._id = kendo.guid();\n this.prefix = hashDelimiter(bang);\n this.fix = bang ? fixBang : fixHash;\n },\n\n navigate: function(to) {\n location.hash = this.fix(to);\n },\n\n replace: function(to) {\n this.replaceLocation(this.fix(to));\n },\n\n normalize: function(url) {\n if (url.indexOf(this.prefix) < 0) {\n return url;\n } else {\n return url.split(this.prefix)[1];\n }\n },\n\n change: function(callback) {\n if (support.hashChange) {\n $(window).on(\"hashchange.\" + this._id, callback);\n } else {\n this._interval = setInterval(callback, CHECK_URL_INTERVAL);\n }\n },\n\n stop: function() {\n $(window).off(\"hashchange.\" + this._id);\n clearInterval(this._interval);\n },\n\n current: function() {\n return locationHash(this.prefix);\n },\n\n normalizeCurrent: function(options) {\n var pathname = location.pathname,\n root = options.root;\n\n if (options.pushState && root !== pathname) {\n this.replaceLocation(root + this.prefix + stripRoot(root, pathname));\n return true; // browser will reload at this point.\n }\n\n return false;\n }\n });\n\n var History = kendo.Observable.extend({\n start: function(options) {\n options = options || {};\n\n this.bind([CHANGE, BACK, SAME], options);\n\n if (this._started) {\n return;\n }\n\n this._started = true;\n\n options.root = options.root || \"/\";\n\n var adapter = this.createAdapter(options),\n current;\n\n // adapter may reload the document\n if (adapter.normalizeCurrent(options)) {\n return;\n }\n\n current = adapter.current();\n\n $.extend(this, {\n adapter: adapter,\n root: options.root,\n historyLength: adapter.length(),\n current: current,\n locations: [current]\n });\n\n adapter.change(this._checkUrl.bind(this));\n },\n\n createAdapter: function(options) {\n return support.pushState && options.pushState ? new PushStateAdapter(options.root) : new HashAdapter(options.hashBang);\n },\n\n stop: function() {\n if (!this._started) {\n return;\n }\n this.adapter.stop();\n this.unbind(CHANGE);\n this._started = false;\n },\n\n change: function(callback) {\n this.bind(CHANGE, callback);\n },\n\n replace: function(to, silent) {\n\n this._navigate(to, silent, function(adapter) {\n adapter.replace(to);\n this.locations[this.locations.length - 1] = this.current;\n });\n },\n\n navigate: function(to, silent) {\n if (to === \"#:back\") {\n this.backCalled = true;\n this.adapter.back();\n return;\n }\n\n this._navigate(to, silent, function(adapter) {\n adapter.navigate(to);\n this.locations.push(this.current);\n });\n },\n\n _navigate: function(to, silent, callback) {\n var adapter = this.adapter;\n\n to = adapter.normalize(to);\n\n if (this.current === to || this.current === decodeURIComponent(to)) {\n this.trigger(SAME);\n return;\n }\n\n if (!silent) {\n if (this.trigger(CHANGE, { url: to, decode: false })) {\n return;\n }\n }\n\n this.current = to;\n\n callback.call(this, adapter);\n\n this.historyLength = adapter.length();\n },\n\n _checkUrl: function() {\n var adapter = this.adapter,\n current = adapter.current(),\n newLength = adapter.length(),\n navigatingInExisting = this.historyLength === newLength,\n back = current === this.locations[this.locations.length - 2] && navigatingInExisting,\n backCalled = this.backCalled,\n prev = this.current;\n\n if (current === null || this.current === current || this.current === decodeURIComponent(current)) {\n return true;\n }\n\n this.historyLength = newLength;\n this.backCalled = false;\n\n this.current = current;\n\n if (back && this.trigger(\"back\", { url: prev, to: current })) {\n adapter.forward();\n this.current = prev;\n return;\n }\n\n if (this.trigger(CHANGE, { url: current, backButtonPressed: !backCalled })) {\n if (back) {\n adapter.forward();\n } else {\n adapter.back();\n this.historyLength --;\n }\n this.current = prev;\n return;\n }\n\n if (back) {\n this.locations.pop();\n } else {\n this.locations.push(current);\n }\n }\n });\n\n kendo.History = History;\n kendo.History.HistoryAdapter = HistoryAdapter;\n kendo.History.HashAdapter = HashAdapter;\n kendo.History.PushStateAdapter = PushStateAdapter;\n kendo.absoluteURL = absoluteURL;\n kendo.history = new History();\n })(window.kendo.jQuery);\n var kendo$8 = kendo;\n\n (function() {\n var kendo = window.kendo,\n history = kendo.history,\n Observable = kendo.Observable,\n INIT = \"init\",\n ROUTE_MISSING = \"routeMissing\",\n CHANGE = \"change\",\n BACK = \"back\",\n SAME = \"same\",\n optionalParam = /\\((.*?)\\)/g,\n namedParam = /(\\(\\?)?:\\w+/g,\n splatParam = /\\*\\w+/g,\n escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n\n function namedParamReplace(match, optional) {\n return optional ? match : '([^\\/]+)';\n }\n\n function routeToRegExp(route, ignoreCase) {\n return new RegExp('^' + route\n .replace(escapeRegExp, '\\\\$&')\n .replace(optionalParam, '(?:$1)?')\n .replace(namedParam, namedParamReplace)\n .replace(splatParam, '(.*?)') + '$', ignoreCase ? \"i\" : \"\");\n }\n\n function stripUrl(url) {\n return url.replace(/(\\?.*)|(#.*)/g, \"\");\n }\n\n var Route = kendo.Class.extend({\n init: function(route, callback, ignoreCase) {\n if (!(route instanceof RegExp)) {\n route = routeToRegExp(route, ignoreCase);\n }\n\n this.route = route;\n this._callback = callback;\n },\n\n callback: function(url, back, decode) {\n var params,\n idx = 0,\n length,\n queryStringParams = kendo.parseQueryStringParams(url);\n queryStringParams._back = back;\n\n url = stripUrl(url);\n params = this.route.exec(url).slice(1);\n length = params.length;\n\n if (decode) {\n for (; idx < length; idx ++) {\n if (typeof params[idx] !== 'undefined') {\n params[idx] = decodeURIComponent(params[idx]);\n }\n }\n }\n\n params.push(queryStringParams);\n\n this._callback.apply(null, params);\n },\n\n worksWith: function(url, back, decode) {\n if (this.route.test(stripUrl(url))) {\n this.callback(url, back, decode);\n return true;\n } else {\n return false;\n }\n }\n });\n\n var Router = Observable.extend({\n init: function(options) {\n if (!options) {\n options = {};\n }\n\n Observable.fn.init.call(this);\n\n this.routes = [];\n this.pushState = options.pushState;\n this.hashBang = options.hashBang;\n this.root = options.root;\n this.ignoreCase = options.ignoreCase !== false;\n\n this.bind([INIT, ROUTE_MISSING, CHANGE, SAME, BACK], options);\n },\n\n destroy: function() {\n history.unbind(CHANGE, this._urlChangedProxy);\n history.unbind(SAME, this._sameProxy);\n history.unbind(BACK, this._backProxy);\n this.unbind();\n },\n\n start: function() {\n var that = this,\n sameProxy = function() { that._same(); },\n backProxy = function(e) { that._back(e); },\n urlChangedProxy = function(e) { that._urlChanged(e); };\n\n history.start({\n same: sameProxy,\n change: urlChangedProxy,\n back: backProxy,\n pushState: that.pushState,\n hashBang: that.hashBang,\n root: that.root\n });\n\n // eslint-disable-next-line no-undef\n var initEventObject = { url: history.current || \"/\", preventDefault: $.noop };\n\n if (!that.trigger(INIT, initEventObject)) {\n that._urlChanged(initEventObject);\n }\n\n this._urlChangedProxy = urlChangedProxy;\n this._backProxy = backProxy;\n },\n\n route: function(route, callback) {\n this.routes.push(new Route(route, callback, this.ignoreCase));\n },\n\n navigate: function(url, silent) {\n kendo.history.navigate(url, silent);\n },\n\n replace: function(url, silent) {\n kendo.history.replace(url, silent);\n },\n\n _back: function(e) {\n if (this.trigger(BACK, { url: e.url, to: e.to })) {\n e.preventDefault();\n }\n },\n\n _same: function() {\n this.trigger(SAME);\n },\n\n _urlChanged: function(e) {\n var url = e.url;\n var decode = !!e.decode;\n var back = e.backButtonPressed;\n\n if (!url) {\n url = \"/\";\n }\n\n if (this.trigger(CHANGE, { url: e.url, params: kendo.parseQueryStringParams(e.url), backButtonPressed: back })) {\n e.preventDefault();\n return;\n }\n\n var idx = 0,\n routes = this.routes,\n route,\n length = routes.length;\n\n for (; idx < length; idx ++) {\n route = routes[idx];\n\n if (route.worksWith(url, back, decode)) {\n return;\n }\n }\n\n if (this.trigger(ROUTE_MISSING, { url: url, params: kendo.parseQueryStringParams(url), backButtonPressed: back })) {\n e.preventDefault();\n }\n }\n });\n\n kendo.Router = Router;\n })();\n\n var __meta__$5 = {\n id: \"view\",\n name: \"View\",\n category: \"framework\",\n description: \"The View class instantiates and handles the events of a certain screen from the application.\",\n depends: [ \"core\", \"binder\", \"fx\" ],\n hidden: false\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n attr = kendo.attr,\n ui = kendo.ui,\n attrValue = kendo.attrValue,\n directiveSelector = kendo.directiveSelector,\n Observable = kendo.Observable,\n Widget = kendo.ui.Widget,\n roleSelector = kendo.roleSelector,\n\n SCRIPT = \"SCRIPT\",\n INIT = \"init\",\n TRANSITION_START = \"transitionStart\",\n TRANSITION_END = \"transitionEnd\",\n SHOW = \"show\",\n HIDE = \"hide\",\n ATTACH = \"attach\",\n DETACH = \"detach\",\n sizzleErrorRegExp = /unrecognized expression/;\n\n var LOAD_START = \"loadStart\";\n var LOAD_COMPLETE = \"loadComplete\";\n var SHOW_START = \"showStart\";\n var SAME_VIEW_REQUESTED = \"sameViewRequested\";\n var VIEW_SHOW = \"viewShow\";\n var VIEW_TYPE_DETERMINED = \"viewTypeDetermined\";\n var AFTER = \"after\";\n var classNames = {\n content: \"k-content\",\n view: \"k-view\",\n stretchedView: \"k-stretched-view\",\n widget: \"k-widget\",\n header: \"k-header\",\n footer: \"k-footer\"\n };\n\n var View = kendo.ui.Widget.extend({\n init: function(content, options) {\n var that = this;\n options = options || {};\n that.id = kendo.guid();\n\n Observable.fn.init.call(that);\n this.options = $.extend({}, this.options, options);\n\n that.content = content;\n\n if (that.options.renderOnInit) {\n Widget.fn.init.call(that, that._createElement(), options);\n }\n\n if (that.options.wrapInSections) {\n that._renderSections();\n }\n\n that.tagName = options.tagName || \"div\";\n that.model = options.model;\n that._wrap = options.wrap !== false;\n this._evalTemplate = options.evalTemplate || false;\n this._useWithBlock = options.useWithBlock;\n that._fragments = {};\n\n that.bind([ INIT, SHOW, HIDE, TRANSITION_START, TRANSITION_END ], options);\n },\n\n options: {\n name: \"View\",\n renderOnInit: false,\n wrapInSections: false,\n detachOnHide: true,\n detachOnDestroy: true\n },\n\n render: function(container) {\n var that = this,\n notInitialized = !that.element;\n\n // The order below matters - kendo.bind should happen when the element is in the DOM, and show should be triggered after init.\n\n if (notInitialized) {\n that.element = that._createElement();\n }\n\n if (container) {\n $(container).append(that.element);\n }\n\n if (notInitialized) {\n kendo.bind(that.element, that.model);\n that.trigger(INIT);\n }\n\n if (container) {\n that._eachFragment(ATTACH);\n that.trigger(SHOW);\n }\n\n return that.element;\n },\n\n clone: function() {\n return new ViewClone(this);\n },\n\n triggerBeforeShow: function() {\n return true;\n },\n\n triggerBeforeHide: function() {\n return true;\n },\n\n showStart: function() {\n var that = this;\n var element = that.render();\n\n if (element) {\n element.css(\"display\", \"\");\n }\n\n this.trigger(SHOW_START, { view: this });\n },\n\n showEnd: function() {\n },\n\n hideEnd: function() {\n this.hide();\n },\n\n beforeTransition: function(type) {\n this.trigger(TRANSITION_START, { type: type });\n },\n\n afterTransition: function(type) {\n this.trigger(TRANSITION_END, { type: type });\n },\n\n hide: function() {\n if (this.options.detachOnHide) {\n this._eachFragment(DETACH);\n $(this.element).detach();\n }\n\n this.trigger(HIDE);\n },\n\n destroy: function() {\n var that = this;\n var element = that.element;\n\n if (element) {\n Widget.fn.destroy.call(that);\n\n kendo.unbind(element);\n kendo.destroy(element);\n\n if (that.options.detachOnDestroy) {\n element.remove();\n }\n }\n },\n\n // ported from mobile view\n purge: function() {\n var that = this;\n\n that.destroy();\n $(that.element).add(that.content).add(that.wrapper).off().remove();\n },\n\n fragments: function(fragments) {\n $.extend(this._fragments, fragments);\n },\n\n _eachFragment: function(methodName) {\n for (var placeholder in this._fragments) {\n this._fragments[placeholder][methodName](this, placeholder);\n }\n },\n\n _createElement: function() {\n var that = this,\n wrapper = \"<\" + that.tagName + \">\",\n element,\n content;\n\n try {\n content = $(document.getElementById(that.content) || that.content); // support passing id without #\n\n if (content[0].tagName === SCRIPT) {\n content = content.html();\n }\n } catch (e) {\n if (sizzleErrorRegExp.test(e.message)) {\n content = that.content;\n }\n }\n\n if (typeof content === \"string\") {\n content = content.replace(/^\\s+|\\s+$/g, '');\n if (that._evalTemplate) {\n content = kendo.template(content, { useWithBlock: that._useWithBlock })(that.model || {});\n }\n\n element = $(wrapper).append(content);\n // drop the wrapper if asked - this seems like the easiest (although not very intuitive) way to avoid messing up templates with questionable content, like this one for instance:\n // \n if (!that._wrap) {\n element = element.contents();\n }\n } else {\n element = content;\n if (that._evalTemplate) {\n var result = $(kendo.template($(\"
    \").append(element.clone(true)).html(), { useWithBlock: that._useWithBlock })(that.model || {}));\n\n // template uses DOM\n if ($.contains(document, element[0])) {\n element.replaceWith(result);\n }\n\n element = result;\n }\n if (that._wrap) {\n element = element.wrapAll(wrapper).parent();\n }\n }\n\n return element;\n },\n\n _renderSections: function() {\n var that = this;\n\n if (that.options.wrapInSections) {\n that._wrapper();\n that._createContent();\n that._createHeader();\n that._createFooter();\n }\n },\n\n _wrapper: function() {\n var that = this;\n var content = that.content;\n\n if (content.is(roleSelector(\"view\"))) {\n that.wrapper = that.content;\n } else {\n that.wrapper = content\n .wrap('
    ')\n .parent();\n }\n\n var wrapper = that.wrapper;\n\n wrapper.attr(\"id\", that.id);\n\n wrapper.addClass(classNames.view);\n wrapper.addClass(classNames.widget);\n wrapper.attr(\"role\", \"view\");\n },\n\n _createContent: function() {\n var that = this;\n var wrapper = $(that.wrapper);\n var contentSelector = roleSelector(\"content\");\n\n if (!wrapper.children(contentSelector)[0]) {\n var ccontentElements = wrapper.children().filter(function() {\n var child = $(this);\n if (!child.is(roleSelector(\"header\")) && !child.is(roleSelector(\"footer\"))) {\n return child;\n }\n });\n\n ccontentElements.wrap(\"
    ');\n }\n\n // use contentElement instead of content as view.content can be a string\n this.contentElement = wrapper.children(roleSelector(\"content\"));\n\n this.contentElement\n .addClass(classNames.stretchedView)\n .addClass(classNames.content);\n },\n\n _createHeader: function() {\n var that = this;\n var wrapper = that.wrapper;\n\n this.header = wrapper.children(roleSelector(\"header\")).addClass(classNames.header);\n },\n\n _createFooter: function() {\n var that = this;\n var wrapper = that.wrapper;\n\n this.footer = wrapper.children(roleSelector(\"footer\")).addClass(classNames.footer);\n }\n });\n\n var ViewClone = kendo.Class.extend({\n init: function(view) {\n $.extend(this, {\n element: view.element.clone(true),\n transition: view.transition,\n id: view.id\n });\n\n view.element.parent().append(this.element);\n },\n\n hideEnd: function() {\n this.element.remove();\n },\n\n beforeTransition: $.noop,\n afterTransition: $.noop\n });\n\n var Layout = View.extend({\n init: function(content, options) {\n View.fn.init.call(this, content, options);\n this.containers = {};\n },\n\n container: function(selector) {\n var container = this.containers[selector];\n\n if (!container) {\n container = this._createContainer(selector);\n this.containers[selector] = container;\n }\n\n return container;\n },\n\n showIn: function(selector, view, transition) {\n this.container(selector).show(view, transition);\n },\n\n _createContainer: function(selector) {\n var root = this.render(),\n element = root.find(selector),\n container;\n\n if (!element.length && root.is(selector)) {\n if (root.is(selector)) {\n element = root;\n } else {\n\n throw new Error(\"can't find a container with the specified \" + selector + \" selector\");\n }\n }\n\n container = new ViewContainer(element);\n\n container.bind(\"accepted\", function(e) {\n e.view.render(element);\n });\n\n return container;\n }\n });\n\n var Fragment = View.extend({\n attach: function(view, placeholder) {\n view.element.find(placeholder).replaceWith(this.render());\n },\n\n detach: function() {\n }\n });\n\n var transitionRegExp = /^(\\w+)(:(\\w+))?( (\\w+))?$/;\n\n function parseTransition(transition) {\n if (!transition) {\n return {};\n }\n\n var matches = transition.match(transitionRegExp) || [];\n\n return {\n type: matches[1],\n direction: matches[3],\n reverse: matches[5] === \"reverse\"\n };\n }\n\n var ViewContainer = Observable.extend({\n init: function(container) {\n Observable.fn.init.call(this);\n this.container = container;\n this.history = [];\n this.view = null;\n this.running = false;\n },\n\n after: function() {\n this.running = false;\n this.trigger(\"complete\", { view: this.view });\n this.trigger(\"after\");\n },\n\n end: function() {\n this.view.showEnd();\n this.previous.hideEnd();\n this.after();\n },\n\n show: function(view, transition, locationID) {\n if (!view.triggerBeforeShow() || (this.view && !this.view.triggerBeforeHide())) {\n this.trigger(\"after\");\n return false;\n }\n\n locationID = locationID || view.id;\n\n var that = this,\n current = (view === that.view) ? view.clone() : that.view,\n history = that.history,\n previousEntry = history[history.length - 2] || {},\n back = previousEntry.id === locationID,\n // If explicit transition is set, it will be with highest priority\n // Next we will try using the history record transition or the view transition configuration\n theTransition = transition || ( back ? history[history.length - 1].transition : view.transition ),\n transitionData = parseTransition(theTransition);\n\n if (that.running) {\n that.effect.stop();\n }\n\n if (theTransition === \"none\") {\n theTransition = null;\n }\n\n that.trigger(\"accepted\", { view: view });\n that.view = view;\n that.previous = current;\n that.running = true;\n\n if (!back) {\n history.push({ id: locationID, transition: theTransition });\n } else {\n history.pop();\n }\n\n if (!current) {\n view.showStart();\n view.showEnd();\n that.after();\n return true;\n }\n\n if (!theTransition || !kendo.effects.enabled) {\n view.showStart();\n that.end();\n } else {\n // hide the view element before init/show - prevents blinks on iPad\n // the replace effect will remove this class\n view.element.addClass(\"k-fx-hidden\");\n view.showStart();\n // do not reverse the explicit transition\n if (back && !transition) {\n transitionData.reverse = !transitionData.reverse;\n }\n\n that.effect = kendo.fx(view.element).replace(current.element, transitionData.type)\n .beforeTransition(function() {\n view.beforeTransition(\"show\");\n current.beforeTransition(\"hide\");\n })\n .afterTransition(function() {\n view.afterTransition(\"show\");\n current.afterTransition(\"hide\");\n })\n .direction(transitionData.direction)\n .setReverse(transitionData.reverse);\n\n that.effect.run().then(function() { that.end(); });\n }\n\n return true;\n },\n\n destroy: function() {\n var that = this;\n var view = that.view;\n\n if (view && view.destroy) {\n view.destroy();\n }\n }\n });\n\n var ViewEngine = Observable.extend({\n init: function(options) {\n var that = this,\n views,\n container;\n\n Observable.fn.init.call(that);\n that.options = options;\n\n $.extend(that, options);\n that.sandbox = $(\"
    \");\n container = that.container;\n\n views = that._hideViews(container);\n that.rootView = views.first();\n that.layouts = {};\n\n that.viewContainer = new kendo.ViewContainer(that.container);\n\n that.viewContainer.bind(\"accepted\", function(e) {\n e.view.params = that.params;\n });\n\n that.viewContainer.bind(\"complete\", function(e) {\n that.trigger(VIEW_SHOW, { view: e.view });\n });\n\n that.viewContainer.bind(AFTER, function() {\n that.trigger(AFTER);\n });\n\n this.bind(this.events, options);\n },\n\n events: [\n SHOW_START,\n AFTER,\n VIEW_SHOW,\n LOAD_START,\n LOAD_COMPLETE,\n SAME_VIEW_REQUESTED,\n VIEW_TYPE_DETERMINED\n ],\n\n destroy: function() {\n var that = this;\n var viewContainer = that.viewContainer;\n\n kendo.destroy(that.container);\n\n for (var id in that.layouts) {\n this.layouts[id].destroy();\n }\n\n if (viewContainer) {\n viewContainer.destroy();\n }\n },\n\n view: function() {\n return this.viewContainer.view;\n },\n\n showView: function(url, transition, params) {\n url = url.replace(new RegExp(\"^\" + this.remoteViewURLPrefix), \"\");\n if (url === \"\" && this.remoteViewURLPrefix) {\n url = \"/\";\n }\n\n if (url.replace(/^#/, \"\") === this.url) {\n this.trigger(SAME_VIEW_REQUESTED);\n return false;\n }\n\n this.trigger(SHOW_START);\n\n var that = this,\n element = that._findViewElement(url),\n view = kendo.widgetInstance(element);\n\n that.url = url.replace(/^#/, \"\");\n\n that.params = params;\n\n if (view && view.reload) {\n view.purge();\n element = [];\n }\n\n this.trigger(VIEW_TYPE_DETERMINED, { remote: element.length === 0, url: url });\n\n if (element[0]) {\n if (!view) {\n view = that._createView(element);\n }\n\n return that.viewContainer.show(view, transition, url);\n } else {\n return true;\n }\n },\n\n append: function(html, url) {\n var sandbox = this.sandbox,\n urlPath = (url || \"\").split(\"?\")[0],\n container = this.container,\n views,\n view;\n\n if (html.indexOf(\" -1) {\n html = $(\"
    \").append(html).html();\n }\n\n sandbox[0].innerHTML = html;\n\n container.append(sandbox.children(\"script, style\"));\n\n views = this._hideViews(sandbox);\n view = views.first();\n\n // Generic HTML content found as remote view - no remote view markers\n if (!view.length) {\n views = view = sandbox.wrapInner(\"
    \").children(); // one element\n }\n\n if (urlPath) {\n view.hide().attr(attr(\"url\"), urlPath);\n }\n\n container.append(views);\n\n html = null; // Garbage collection.\n return this._createView(view);\n },\n\n _locate: function(selectors) {\n return roleSelector(selectors);\n },\n\n _findViewElement: function(url) {\n var element,\n urlPath = url.split(\"?\")[0];\n\n if (!urlPath) {\n return this.rootView;\n }\n\n element = this.container.children(\"[\" + attr(\"url\") + \"='\" + urlPath + \"']\");\n\n // do not try to search for \"#/foo/bar\" id, jQuery throws error\n if (!element[0] && urlPath.indexOf(\"/\") === -1) {\n element = this.container.children(urlPath.charAt(0) === \"#\" ? urlPath : \"#\" + urlPath);\n }\n\n if (!element[0]) {\n element = this._findViewElementById(url);\n }\n\n return element;\n },\n\n _findViewElementById: function(id) {\n var element = this.container.children(\"[id='\" + id + \"']\");\n return element;\n },\n\n _createView: function(element) {\n //return this._createMobileView(element);\n return this._createSpaView(element);\n },\n\n _createMobileView: function(element) {\n return kendo.initWidget(element, {\n defaultTransition: this.transition,\n loader: this.loader,\n container: this.container,\n getLayout: this.getLayoutProxy,\n modelScope: this.modelScope,\n reload: attrValue(element, \"reload\")\n }, ui.roles);\n },\n\n _createSpaView: function(element) {\n var viewOptions = (this.options || {}).viewOptions || {};\n return new kendo.View(element, {\n renderOnInit: viewOptions.renderOnInit,\n wrap: viewOptions.wrap || false,\n wrapInSections: viewOptions.wrapInSections,\n detachOnHide: viewOptions.detachOnHide,\n detachOnDestroy: viewOptions.detachOnDestroy\n });\n },\n\n _hideViews: function(container) {\n return container.children(this._locate(\"view\")).hide();\n }\n });\n\n kendo.ViewEngine = ViewEngine;\n\n kendo.ViewContainer = ViewContainer;\n kendo.Fragment = Fragment;\n kendo.Layout = Layout;\n kendo.View = View;\n kendo.ViewClone = ViewClone;\n\n })(window.kendo.jQuery);\n var kendo$7 = kendo;\n\n var __meta__$4 = {\n id: \"userevents\",\n name: \"User Events\",\n category: \"framework\",\n depends: [ \"core\" ],\n hidden: true\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n support = kendo.support,\n Class = kendo.Class,\n Observable = kendo.Observable,\n now = Date.now,\n extend = $.extend,\n OS = support.mobileOS,\n invalidZeroEvents = OS && OS.android,\n DEFAULT_MIN_HOLD = 800,\n CLICK_DELAY = 300,\n DEFAULT_THRESHOLD = support.browser.msie ? 5 : 0, // WP8 and W8 are very sensitive and always report move.\n\n // UserEvents events\n PRESS = \"press\",\n HOLD = \"hold\",\n SELECT = \"select\",\n START = \"start\",\n MOVE = \"move\",\n END = \"end\",\n CANCEL = \"cancel\",\n TAP = \"tap\",\n DOUBLETAP = \"doubleTap\",\n RELEASE = \"release\",\n GESTURESTART = \"gesturestart\",\n GESTURECHANGE = \"gesturechange\",\n GESTUREEND = \"gestureend\",\n GESTURETAP = \"gesturetap\";\n\n var THRESHOLD = {\n \"api\": 0,\n \"touch\": 0,\n \"mouse\": 9,\n \"pointer\": 9\n };\n\n var ENABLE_GLOBAL_SURFACE = (!support.touch || support.mouseAndTouchPresent);\n\n function touchDelta(touch1, touch2) {\n var x1 = touch1.x.location,\n y1 = touch1.y.location,\n x2 = touch2.x.location,\n y2 = touch2.y.location,\n dx = x1 - x2,\n dy = y1 - y2;\n\n return {\n center: {\n x: (x1 + x2) / 2,\n y: (y1 + y2) / 2\n },\n\n distance: Math.sqrt(dx * dx + dy * dy)\n };\n }\n\n function getTouches(e) {\n var touches = [],\n originalEvent = e.originalEvent,\n currentTarget = e.currentTarget,\n idx = 0, length,\n changedTouches,\n touch;\n\n if (e.api) {\n touches.push({\n id: 2, // hardcoded ID for API call;\n event: e,\n target: e.target,\n currentTarget: e.target,\n location: e,\n type: \"api\"\n });\n }\n else if (e.type.match(/touch/)) {\n changedTouches = originalEvent ? originalEvent.changedTouches : [];\n for (length = changedTouches.length; idx < length; idx ++) {\n touch = changedTouches[idx];\n touches.push({\n location: touch,\n event: e,\n target: touch.target,\n currentTarget: currentTarget,\n id: touch.identifier,\n type: \"touch\"\n });\n }\n }\n else if (support.pointers || support.msPointers) {\n touches.push({\n location: originalEvent,\n event: e,\n target: e.target,\n currentTarget: currentTarget,\n id: originalEvent.pointerId,\n type: \"pointer\"\n });\n } else {\n touches.push({\n id: 1, // hardcoded ID for mouse event;\n event: e,\n target: e.target,\n currentTarget: currentTarget,\n location: e,\n type: \"mouse\"\n });\n }\n\n return touches;\n }\n\n var TouchAxis = Class.extend({\n init: function(axis, location) {\n var that = this;\n\n that.axis = axis;\n\n that._updateLocationData(location);\n\n that.startLocation = that.location;\n that.velocity = that.delta = 0;\n that.timeStamp = now();\n },\n\n move: function(location) {\n var that = this,\n offset = location[\"page\" + that.axis],\n timeStamp = now(),\n timeDelta = (timeStamp - that.timeStamp) || 1; // Firing manually events in tests can make this 0;\n\n if (!offset && invalidZeroEvents) {\n return;\n }\n\n that.delta = offset - that.location;\n\n that._updateLocationData(location);\n\n that.initialDelta = offset - that.startLocation;\n that.velocity = that.delta / timeDelta;\n that.timeStamp = timeStamp;\n },\n\n _updateLocationData: function(location) {\n var that = this, axis = that.axis;\n\n that.location = location[\"page\" + axis];\n that.client = location[\"client\" + axis];\n that.screen = location[\"screen\" + axis];\n }\n });\n\n var Touch = Class.extend({\n init: function(userEvents, target, touchInfo) {\n extend(this, {\n x: new TouchAxis(\"X\", touchInfo.location),\n y: new TouchAxis(\"Y\", touchInfo.location),\n type: touchInfo.type,\n useClickAsTap: userEvents.useClickAsTap,\n threshold: userEvents.threshold || THRESHOLD[touchInfo.type],\n userEvents: userEvents,\n target: target,\n currentTarget: touchInfo.currentTarget,\n initialTouch: touchInfo.target,\n id: touchInfo.id,\n pressEvent: touchInfo,\n _clicks: userEvents._clicks,\n supportDoubleTap: userEvents.supportDoubleTap,\n _moved: false,\n _finished: false\n });\n },\n\n press: function() {\n this._holdTimeout = setTimeout(this._hold.bind(this), this.userEvents.minHold);\n this._trigger(PRESS, this.pressEvent);\n },\n\n _tap: function(touchInfo) {\n var that = this;\n that.userEvents._clicks++;\n if (that.userEvents._clicks == 1) {\n that._clickTimeout = setTimeout(function() {\n if (that.userEvents._clicks == 1) {\n that._trigger(TAP, touchInfo);\n }\n else {\n that._trigger(DOUBLETAP, touchInfo);\n }\n that.userEvents._clicks = 0;\n }, CLICK_DELAY);\n }\n },\n\n _hold: function() {\n this._trigger(HOLD, this.pressEvent);\n },\n\n move: function(touchInfo) {\n var that = this;\n var preventMove = touchInfo.type !== \"api\" && that.userEvents._shouldNotMove;\n\n if (that._finished || preventMove) { return; }\n\n that.x.move(touchInfo.location);\n that.y.move(touchInfo.location);\n\n if (!that._moved) {\n if (that._withinIgnoreThreshold()) {\n return;\n }\n\n if (!UserEvents.current || UserEvents.current === that.userEvents) {\n that._start(touchInfo);\n } else {\n return that.dispose();\n }\n }\n\n // Event handlers may cancel the drag in the START event handler, hence the double check for pressed.\n if (!that._finished) {\n that._trigger(MOVE, touchInfo);\n }\n },\n\n end: function(touchInfo) {\n this.endTime = now();\n\n if (this._finished) { return; }\n\n // Mark the object as finished if there are blocking operations in the event handlers (alert/confirm)\n this._finished = true;\n\n this._trigger(RELEASE, touchInfo); // Release should be fired before TAP (as click is after mouseup/touchend)\n\n if (this._moved) {\n this._trigger(END, touchInfo);\n } else {\n if (!this.useClickAsTap) {\n if (this.supportDoubleTap) {\n this._tap(touchInfo);\n }\n else {\n this._trigger(TAP, touchInfo);\n }\n }\n }\n\n clearTimeout(this._holdTimeout);\n\n this.dispose();\n },\n\n dispose: function() {\n var userEvents = this.userEvents,\n activeTouches = userEvents.touches;\n\n this._finished = true;\n this.pressEvent = null;\n clearTimeout(this._holdTimeout);\n\n activeTouches.splice($.inArray(this, activeTouches), 1);\n },\n\n skip: function() {\n this.dispose();\n },\n\n cancel: function() {\n this.dispose();\n },\n\n isMoved: function() {\n return this._moved;\n },\n\n _start: function(touchInfo) {\n clearTimeout(this._holdTimeout);\n\n this.startTime = now();\n this._moved = true;\n this._trigger(START, touchInfo);\n },\n\n _trigger: function(name, touchInfo) {\n var that = this,\n jQueryEvent = touchInfo.event,\n data = {\n touch: that,\n x: that.x,\n y: that.y,\n target: that.target,\n event: jQueryEvent\n };\n\n if (that.userEvents.notify(name, data)) {\n jQueryEvent.preventDefault();\n }\n },\n\n _withinIgnoreThreshold: function() {\n var xDelta = this.x.initialDelta,\n yDelta = this.y.initialDelta;\n\n return Math.sqrt(xDelta * xDelta + yDelta * yDelta) <= this.threshold;\n }\n });\n\n function withEachUpEvent(callback) {\n var downEvents = kendo.eventMap.up.split(\" \"),\n idx = 0,\n length = downEvents.length;\n\n for (; idx < length; idx ++) {\n callback(downEvents[idx]);\n }\n }\n\n var UserEvents = Observable.extend({\n init: function(element, options) {\n var that = this,\n filter,\n ns = kendo.guid();\n\n options = options || {};\n filter = that.filter = options.filter;\n that.threshold = options.threshold || DEFAULT_THRESHOLD;\n that.minHold = options.minHold || DEFAULT_MIN_HOLD;\n that.touches = [];\n that._maxTouches = options.multiTouch ? 2 : 1;\n that.allowSelection = options.allowSelection;\n that.captureUpIfMoved = options.captureUpIfMoved;\n that.useClickAsTap = !options.fastTap && !support.delayedClick();\n that.eventNS = ns;\n that._clicks = 0;\n that.supportDoubleTap = options.supportDoubleTap;\n\n element = $(element).handler(that);\n Observable.fn.init.call(that);\n\n extend(that, {\n element: element,\n // the touch events lock to the element anyway, so no need for the global setting\n surface: options.global && ENABLE_GLOBAL_SURFACE ? $(element[0].ownerDocument.documentElement) : $(options.surface || element),\n stopPropagation: options.stopPropagation,\n pressed: false\n });\n\n that.surface.handler(that)\n .on(kendo.applyEventMap(\"move\", ns), \"_move\")\n .on(kendo.applyEventMap(\"up cancel\", ns), \"_end\");\n\n element.on(kendo.applyEventMap(\"down\", ns), filter, \"_start\");\n\n if (that.useClickAsTap) {\n element.on(kendo.applyEventMap(\"click\", ns), filter, \"_click\");\n }\n\n if (support.pointers || support.msPointers) {\n //touch-action:none will not work for IE10\n if (support.browser.version < 11) {\n var defaultAction = \"pinch-zoom double-tap-zoom\";\n element.css(\"-ms-touch-action\", options.touchAction && options.touchAction != \"none\" ? defaultAction + \" \" + options.touchAction : defaultAction);\n } else {\n element.css(\"touch-action\", options.touchAction || \"none\");\n }\n }\n\n if (options.preventDragEvent) {\n element.on(kendo.applyEventMap(\"dragstart\", ns), kendo.preventDefault);\n }\n\n element.on(kendo.applyEventMap(\"mousedown\", ns), filter, { root: element }, \"_select\");\n\n if (that.captureUpIfMoved && support.eventCapture) {\n var surfaceElement = that.surface[0],\n preventIfMovingProxy = that.preventIfMoving.bind(that);\n\n withEachUpEvent(function(eventName) {\n surfaceElement.addEventListener(eventName, preventIfMovingProxy, true);\n });\n }\n\n that.bind([\n PRESS,\n HOLD,\n TAP,\n DOUBLETAP,\n START,\n MOVE,\n END,\n RELEASE,\n CANCEL,\n GESTURESTART,\n GESTURECHANGE,\n GESTUREEND,\n GESTURETAP,\n SELECT\n ], options);\n },\n\n preventIfMoving: function(e) {\n if (this._isMoved()) {\n e.preventDefault();\n }\n },\n\n destroy: function() {\n var that = this;\n\n if (that._destroyed) {\n return;\n }\n\n that._destroyed = true;\n\n if (that.captureUpIfMoved && support.eventCapture) {\n var surfaceElement = that.surface[0];\n withEachUpEvent(function(eventName) {\n surfaceElement.removeEventListener(eventName, that.preventIfMoving);\n });\n }\n\n that.element.kendoDestroy(that.eventNS);\n that.surface.kendoDestroy(that.eventNS);\n that.element.removeData(\"handler\");\n that.surface.removeData(\"handler\");\n that._disposeAll();\n\n that.unbind();\n delete that.surface;\n delete that.element;\n delete that.currentTarget;\n },\n\n capture: function() {\n UserEvents.current = this;\n },\n\n cancel: function() {\n this._disposeAll();\n this.trigger(CANCEL);\n },\n\n notify: function(eventName, data) {\n var that = this,\n touches = that.touches;\n\n if (this._isMultiTouch()) {\n switch (eventName) {\n case MOVE:\n eventName = GESTURECHANGE;\n break;\n case END:\n eventName = GESTUREEND;\n break;\n case TAP:\n eventName = GESTURETAP;\n break;\n }\n\n extend(data, { touches: touches }, touchDelta(touches[0], touches[1]));\n }\n\n return this.trigger(eventName, extend(data, { type: eventName }));\n },\n\n // API\n press: function(x, y, target) {\n this._apiCall(\"_start\", x, y, target);\n },\n\n move: function(x, y) {\n this._apiCall(\"_move\", x, y);\n },\n\n end: function(x, y) {\n this._apiCall(\"_end\", x, y);\n },\n\n _isMultiTouch: function() {\n return this.touches.length > 1;\n },\n\n _maxTouchesReached: function() {\n return this.touches.length >= this._maxTouches;\n },\n\n _disposeAll: function() {\n var touches = this.touches;\n while (touches.length > 0) {\n touches.pop().dispose();\n }\n },\n\n _isMoved: function() {\n return $.grep(this.touches, function(touch) {\n return touch.isMoved();\n }).length;\n },\n\n _select: function(e) {\n if (!this.allowSelection || this.trigger(SELECT, { event: e })) {\n e.preventDefault();\n }\n },\n\n _start: function(e) {\n var that = this,\n idx = 0,\n filter = that.filter,\n target,\n touches = getTouches(e),\n length = touches.length,\n touch,\n which = e.which;\n\n if ((which && which > 1) || (that._maxTouchesReached())) {\n return;\n }\n\n UserEvents.current = null;\n\n that.currentTarget = e.currentTarget;\n\n if (that.stopPropagation) {\n e.stopPropagation();\n }\n\n for (; idx < length; idx ++) {\n if (that._maxTouchesReached()) {\n break;\n }\n\n touch = touches[idx];\n\n if (filter) {\n target = $(touch.currentTarget); // target.is(filter) ? target : target.closest(filter, that.element);\n } else {\n target = that.element;\n }\n\n if (!target.length) {\n continue;\n }\n\n touch = new Touch(that, target, touch);\n that.touches.push(touch);\n touch.press();\n\n if (that._isMultiTouch()) {\n that.notify(\"gesturestart\", {});\n }\n }\n },\n\n _move: function(e) {\n this._eachTouch(\"move\", e);\n },\n\n _end: function(e) {\n this._eachTouch(\"end\", e);\n },\n\n _click: function(e) {\n var data = {\n touch: {\n initialTouch: e.target,\n target: $(e.currentTarget),\n endTime: now(),\n x: {\n location: e.pageX,\n client: e.clientX\n },\n y: {\n location: e.pageY,\n client: e.clientY\n }\n },\n x: e.pageX,\n y: e.pageY,\n target: $(e.currentTarget),\n event: e,\n type: \"tap\"\n };\n\n if (this.trigger(\"tap\", data)) {\n e.preventDefault();\n }\n },\n\n _eachTouch: function(methodName, e) {\n var that = this,\n dict = {},\n touches = getTouches(e),\n activeTouches = that.touches,\n idx,\n touch,\n touchInfo,\n matchingTouch;\n\n for (idx = 0; idx < activeTouches.length; idx ++) {\n touch = activeTouches[idx];\n dict[touch.id] = touch;\n }\n\n for (idx = 0; idx < touches.length; idx ++) {\n touchInfo = touches[idx];\n matchingTouch = dict[touchInfo.id];\n\n if (matchingTouch) {\n matchingTouch[methodName](touchInfo);\n }\n }\n },\n\n _apiCall: function(type, x, y, target) {\n this[type]({\n api: true,\n pageX: x,\n pageY: y,\n clientX: x,\n clientY: y,\n target: $(target || this.element)[0],\n stopPropagation: $.noop,\n preventDefault: $.noop\n });\n }\n });\n\n var ClickMoveClick = Observable.extend({\n init: function(element, options) {\n var that = this,\n filter,\n ns = kendo.guid();\n\n options = options || {};\n filter = that.filter = options.filter;\n that.touches = [];\n that._maxTouches = 1;\n that.eventNS = ns;\n that._downStarted = 0;\n\n element = $(element).handler(that);\n Observable.fn.init.call(that);\n\n extend(that, {\n element: element,\n // the touch events lock to the element anyway, so no need for the global setting\n surface: options.global && ENABLE_GLOBAL_SURFACE ? $(element[0].ownerDocument.documentElement) : $(options.surface || element),\n stopPropagation: options.stopPropagation,\n pressed: false\n });\n\n that.surface.handler(that)\n .on(kendo.applyEventMap(\"move\", ns), \"_move\")\n .on(kendo.applyEventMap(\"cancel up\", ns), \"cancel\");\n\n element.on(kendo.applyEventMap(\"down\", ns), filter, \"_down\")\n .on(kendo.applyEventMap(\"up\", ns), filter, \"_up\");\n\n that.bind([\n START,\n MOVE,\n END,\n HOLD,\n CANCEL,\n SELECT\n ], options);\n },\n\n _down: function(e) {\n if (e.which && e.which > 1) {\n this.cancel();\n } else {\n this._downStarted = new Date().getTime();\n this._downTarget = e.target;\n }\n },\n\n _up: function(e) {\n var currentMilestone = new Date().getTime(),\n currentTarget = e.target;\n\n if ((!e.which || e.which === 1) &&\n currentMilestone < this._downStarted + CLICK_DELAY &&\n currentTarget === this._downTarget) {\n if (this.touches && this.touches.length > 0) {\n this._end(e);\n } else {\n this._start(e);\n }\n\n this._preventCancel = true;\n } else {\n this.cancel();\n }\n\n this._downStarted = 0;\n this._downTarget = null;\n },\n\n destroy: function() {\n var that = this;\n\n if (that._destroyed) {\n return;\n }\n\n that._destroyed = true;\n\n that.element.kendoDestroy(that.eventNS);\n that.surface.kendoDestroy(that.eventNS);\n that.element.removeData(\"handler\");\n that.surface.removeData(\"handler\");\n that._disposeAll();\n\n that.unbind();\n delete that.surface;\n delete that.element;\n delete that.currentTarget;\n },\n\n capture: function() {\n ClickMoveClick.current = this;\n },\n\n cancel: function() {\n if (this._preventCancel) {\n this._preventCancel = false;\n return;\n } else if (this.touches && this.touches.length > 0) {\n this._disposeAll();\n this.trigger(CANCEL);\n }\n },\n\n notify: function(eventName, data) {\n data.clickMoveClick = true;\n return this.trigger(eventName, extend(data, { type: eventName }));\n },\n\n _maxTouchesReached: function() {\n return this.touches.length >= this._maxTouches;\n },\n\n _disposeAll: function() {\n var touches = this.touches;\n\n while (touches.length > 0) {\n touches.pop().dispose();\n }\n },\n\n _start: function(e) {\n var that = this,\n idx = 0,\n filter = that.filter,\n target,\n touches = getTouches(e),\n length = touches.length,\n touch,\n which = e.which;\n\n if ((which && which > 1) || (that._maxTouchesReached())) {\n return;\n }\n\n ClickMoveClick.current = null;\n\n that.currentTarget = e.currentTarget;\n\n if (that.stopPropagation) {\n e.stopPropagation();\n }\n\n for (; idx < length; idx ++) {\n if (that._maxTouchesReached()) {\n break;\n }\n\n touch = touches[idx];\n\n if (filter) {\n target = $(touch.currentTarget);\n } else {\n target = that.element;\n }\n\n if (!target.length) {\n continue;\n }\n\n touch = new Touch(that, target, touch);\n that.touches.push(touch);\n touch.press();\n touch._start(touch);\n }\n },\n\n _move: function(e) {\n this._eachTouch(\"move\", e);\n },\n\n _end: function(e) {\n this._eachTouch(\"move\", e);\n this._eachTouch(\"end\", e);\n },\n\n _eachTouch: function(methodName, e) {\n var that = this,\n dict = {},\n touches = getTouches(e),\n activeTouches = that.touches,\n idx,\n touch,\n touchInfo,\n matchingTouch;\n\n for (idx = 0; idx < activeTouches.length; idx ++) {\n touch = activeTouches[idx];\n dict[touch.id] = touch;\n }\n\n for (idx = 0; idx < touches.length; idx ++) {\n touchInfo = touches[idx];\n matchingTouch = dict[touchInfo.id];\n\n if (matchingTouch) {\n matchingTouch.x.move(touchInfo.location);\n matchingTouch.y.move(touchInfo.location);\n matchingTouch[methodName](touchInfo);\n }\n }\n }\n });\n\n UserEvents.defaultThreshold = function(value) {\n DEFAULT_THRESHOLD = value;\n };\n\n UserEvents.minHold = function(value) {\n DEFAULT_MIN_HOLD = value;\n };\n\n kendo.getTouches = getTouches;\n kendo.touchDelta = touchDelta;\n kendo.UserEvents = UserEvents;\n kendo.ClickMoveClick = ClickMoveClick;\n })(window.kendo.jQuery);\n var kendo$6 = kendo;\n\n var __meta__$3 = {\n id: \"draganddrop\",\n name: \"Drag & drop\",\n category: \"framework\",\n description: \"Drag & drop functionality for any DOM element.\",\n depends: [ \"core\", \"userevents\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n support = kendo.support,\n document = window.document,\n $window = $(window),\n Class = kendo.Class,\n Widget = kendo.ui.Widget,\n Observable = kendo.Observable,\n UserEvents = kendo.UserEvents,\n ClickMoveClick = kendo.ClickMoveClick,\n extend = $.extend,\n getOffset = kendo.getOffset,\n draggables = {},\n dropTargets = {},\n dropAreas = {},\n lastDropTarget,\n elementUnderCursor = kendo.elementUnderCursor,\n KEYUP = \"keyup\",\n CHANGE = \"change\",\n\n // Draggable events\n DRAGSTART = \"dragstart\",\n HOLD = \"hold\",\n DRAG = \"drag\",\n DRAGEND = \"dragend\",\n DRAGCANCEL = \"dragcancel\",\n HINTDESTROYED = \"hintDestroyed\",\n\n // DropTarget events\n DRAGENTER = \"dragenter\",\n DRAGLEAVE = \"dragleave\",\n DROP = \"drop\";\n\n function contains(parent, child) {\n try {\n return $.contains(parent, child) || parent == child;\n } catch (e) {\n return false;\n }\n }\n\n function numericCssPropery(element, property) {\n return parseInt(element.css(property), 10) || 0;\n }\n\n function within(value, range) {\n return Math.min(Math.max(value, range.min), range.max);\n }\n\n function containerBoundaries(container, element) {\n var offset = getOffset(container),\n outerWidth = kendo._outerWidth,\n outerHeight = kendo._outerHeight,\n minX = offset.left + numericCssPropery(container, \"borderLeftWidth\") + numericCssPropery(container, \"paddingLeft\"),\n minY = offset.top + numericCssPropery(container, \"borderTopWidth\") + numericCssPropery(container, \"paddingTop\"),\n maxX = minX + container.width() - outerWidth(element, true),\n maxY = minY + container.height() - outerHeight(element, true);\n\n return {\n x: { min: minX, max: maxX },\n y: { min: minY, max: maxY }\n };\n }\n\n function checkTarget(target, targets, areas) {\n var theTarget, theFilter, i = 0,\n targetLen = targets && targets.length,\n areaLen = areas && areas.length;\n\n while (target && target.parentNode) {\n for (i = 0; i < targetLen; i ++) {\n theTarget = targets[i];\n if (theTarget.element[0] === target) {\n return { target: theTarget, targetElement: target };\n }\n }\n\n for (i = 0; i < areaLen; i ++) {\n theFilter = areas[i];\n if ($.contains(theFilter.element[0], target) && support.matchesSelector.call(target, theFilter.options.filter)) {\n return { target: theFilter, targetElement: target };\n }\n }\n\n target = target.parentNode;\n }\n\n return undefined$1;\n }\n\n var TapCapture = Observable.extend({\n init: function(element, options) {\n var that = this,\n domElement = element[0];\n\n that.capture = false;\n\n if (domElement.addEventListener) {\n $.each(kendo.eventMap.down.split(\" \"), function() {\n domElement.addEventListener(this, that._press.bind(that), true);\n });\n $.each(kendo.eventMap.up.split(\" \"), function() {\n domElement.addEventListener(this, that._release.bind(that), true);\n });\n } else {\n $.each(kendo.eventMap.down.split(\" \"), function() {\n domElement.attachEvent(this, that._press.bind(that));\n });\n $.each(kendo.eventMap.up.split(\" \"), function() {\n domElement.attachEvent(this, that._release.bind(that));\n });\n }\n\n Observable.fn.init.call(that);\n\n that.bind([\"press\", \"release\"], options || {});\n },\n\n captureNext: function() {\n this.capture = true;\n },\n\n cancelCapture: function() {\n this.capture = false;\n },\n\n _press: function(e) {\n var that = this;\n that.trigger(\"press\");\n if (that.capture) {\n e.preventDefault();\n }\n },\n\n _release: function(e) {\n var that = this;\n that.trigger(\"release\");\n\n if (that.capture) {\n e.preventDefault();\n that.cancelCapture();\n }\n }\n });\n\n var PaneDimension = Observable.extend({\n init: function(options) {\n var that = this;\n Observable.fn.init.call(that);\n\n that.forcedEnabled = false;\n\n $.extend(that, options);\n\n that.scale = 1;\n\n if (that.horizontal) {\n that.measure = \"offsetWidth\";\n that.scrollSize = \"scrollWidth\";\n that.axis = \"x\";\n } else {\n that.measure = \"offsetHeight\";\n that.scrollSize = \"scrollHeight\";\n that.axis = \"y\";\n }\n },\n\n makeVirtual: function() {\n $.extend(this, {\n virtual: true,\n forcedEnabled: true,\n _virtualMin: 0,\n _virtualMax: 0\n });\n },\n\n virtualSize: function(min, max) {\n if (this._virtualMin !== min || this._virtualMax !== max) {\n this._virtualMin = min;\n this._virtualMax = max;\n this.update();\n }\n },\n\n outOfBounds: function(offset) {\n return offset > this.max || offset < this.min;\n },\n\n forceEnabled: function() {\n this.forcedEnabled = true;\n },\n\n getSize: function() {\n return this.container[0][this.measure];\n },\n\n getTotal: function() {\n return this.element[0][this.scrollSize];\n },\n\n rescale: function(scale) {\n this.scale = scale;\n },\n\n update: function(silent) {\n var that = this,\n total = that.virtual ? that._virtualMax : that.getTotal(),\n scaledTotal = total * that.scale,\n size = that.getSize();\n\n if (total === 0 && !that.forcedEnabled) {\n return; // we are not visible.\n }\n\n that.max = that.virtual ? -that._virtualMin : 0;\n that.size = size;\n that.total = scaledTotal;\n that.min = Math.min(that.max, size - scaledTotal);\n that.minScale = size / total;\n that.centerOffset = (scaledTotal - size) / 2;\n\n that.enabled = that.forcedEnabled || (scaledTotal > size);\n\n if (!silent) {\n that.trigger(CHANGE, that);\n }\n }\n });\n\n var PaneDimensions = Observable.extend({\n init: function(options) {\n var that = this;\n\n Observable.fn.init.call(that);\n\n that.x = new PaneDimension(extend({ horizontal: true }, options));\n that.y = new PaneDimension(extend({ horizontal: false }, options));\n that.container = options.container;\n that.forcedMinScale = options.minScale;\n that.maxScale = options.maxScale || 100;\n\n that.bind(CHANGE, options);\n },\n\n rescale: function(newScale) {\n this.x.rescale(newScale);\n this.y.rescale(newScale);\n this.refresh();\n },\n\n centerCoordinates: function() {\n return { x: Math.min(0, -this.x.centerOffset), y: Math.min(0, -this.y.centerOffset) };\n },\n\n refresh: function() {\n var that = this;\n that.x.update();\n that.y.update();\n that.enabled = that.x.enabled || that.y.enabled;\n that.minScale = that.forcedMinScale || Math.min(that.x.minScale, that.y.minScale);\n that.fitScale = Math.max(that.x.minScale, that.y.minScale);\n that.trigger(CHANGE);\n }\n });\n\n var PaneAxis = Observable.extend({\n init: function(options) {\n var that = this;\n extend(that, options);\n Observable.fn.init.call(that);\n },\n\n outOfBounds: function() {\n return this.dimension.outOfBounds(this.movable[this.axis]);\n },\n\n dragMove: function(delta) {\n var that = this,\n dimension = that.dimension,\n axis = that.axis,\n movable = that.movable,\n position = movable[axis] + delta;\n\n if (!dimension.enabled) {\n return;\n }\n\n if ((position < dimension.min && delta < 0) || (position > dimension.max && delta > 0)) {\n delta *= that.resistance;\n }\n\n movable.translateAxis(axis, delta);\n that.trigger(CHANGE, that);\n }\n });\n\n var Pane = Class.extend({\n\n init: function(options) {\n var that = this,\n x,\n y,\n resistance,\n movable;\n\n extend(that, { elastic: true }, options);\n\n resistance = that.elastic ? 0.5 : 0;\n movable = that.movable;\n\n that.x = x = new PaneAxis({\n axis: \"x\",\n dimension: that.dimensions.x,\n resistance: resistance,\n movable: movable\n });\n\n that.y = y = new PaneAxis({\n axis: \"y\",\n dimension: that.dimensions.y,\n resistance: resistance,\n movable: movable\n });\n\n that.userEvents.bind([\"press\", \"move\", \"end\", \"gesturestart\", \"gesturechange\"], {\n gesturestart: function(e) {\n that.gesture = e;\n that.offset = that.dimensions.container.offset();\n },\n\n press: function(e) {\n if ($(e.event.target).closest(\"a\").is(\"[data-navigate-on-press=true]\")) {\n e.sender.cancel();\n }\n },\n\n gesturechange: function(e) {\n var previousGesture = that.gesture,\n previousCenter = previousGesture.center,\n\n center = e.center,\n\n scaleDelta = e.distance / previousGesture.distance,\n\n minScale = that.dimensions.minScale,\n maxScale = that.dimensions.maxScale,\n coordinates;\n\n if (movable.scale <= minScale && scaleDelta < 1) {\n // Resist shrinking. Instead of shrinking from 1 to 0.5, it will shrink to 0.5 + (1 /* minScale */ - 0.5) * 0.8 = 0.9;\n scaleDelta += (1 - scaleDelta) * 0.8;\n }\n\n if (movable.scale * scaleDelta >= maxScale) {\n scaleDelta = maxScale / movable.scale;\n }\n\n var offsetX = movable.x + that.offset.left,\n offsetY = movable.y + that.offset.top;\n\n coordinates = {\n x: (offsetX - previousCenter.x) * scaleDelta + center.x - offsetX,\n y: (offsetY - previousCenter.y) * scaleDelta + center.y - offsetY\n };\n\n movable.scaleWith(scaleDelta);\n\n x.dragMove(coordinates.x);\n y.dragMove(coordinates.y);\n\n that.dimensions.rescale(movable.scale);\n that.gesture = e;\n e.preventDefault();\n },\n\n move: function(e) {\n if (e.event.target.tagName.match(/textarea|input/i)) {\n return;\n }\n\n if (x.dimension.enabled || y.dimension.enabled) {\n x.dragMove(e.x.delta);\n y.dragMove(e.y.delta);\n e.preventDefault();\n } else {\n e.touch.skip();\n }\n },\n\n end: function(e) {\n e.preventDefault();\n }\n });\n }\n });\n\n var TRANSFORM_STYLE = \"transform\",\n translate;\n\n\n if (support.hasHW3D) {\n translate = function(x, y, scale) {\n return \"translate3d(\" + x + \"px,\" + y + \"px,0) scale(\" + scale + \")\";\n };\n } else {\n translate = function(x, y, scale) {\n return \"translate(\" + x + \"px,\" + y + \"px) scale(\" + scale + \")\";\n };\n }\n\n var Movable = Observable.extend({\n init: function(element) {\n var that = this;\n\n Observable.fn.init.call(that);\n\n that.element = $(element);\n that.element[0].style.webkitTransformOrigin = \"left top\";\n that.x = 0;\n that.y = 0;\n that.scale = 1;\n that._saveCoordinates(translate(that.x, that.y, that.scale));\n },\n\n translateAxis: function(axis, by) {\n this[axis] += by;\n this.refresh();\n },\n\n scaleTo: function(scale) {\n this.scale = scale;\n this.refresh();\n },\n\n scaleWith: function(scaleDelta) {\n this.scale *= scaleDelta;\n this.refresh();\n },\n\n translate: function(coordinates) {\n this.x += coordinates.x;\n this.y += coordinates.y;\n this.refresh();\n },\n\n moveAxis: function(axis, value) {\n this[axis] = value;\n this.refresh();\n },\n\n moveTo: function(coordinates) {\n extend(this, coordinates);\n this.refresh();\n },\n\n refresh: function() {\n var that = this,\n x = that.x,\n y = that.y,\n newCoordinates;\n\n if (that.round) {\n x = Math.round(x);\n y = Math.round(y);\n }\n\n newCoordinates = translate(x, y, that.scale);\n\n if (newCoordinates != that.coordinates) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n that.element[0].style.position = \"absolute\";\n that.element[0].style.left = that.x + \"px\";\n that.element[0].style.top = that.y + \"px\";\n\n } else {\n that.element[0].style[TRANSFORM_STYLE] = newCoordinates;\n }\n that._saveCoordinates(newCoordinates);\n that.trigger(CHANGE);\n }\n },\n\n _saveCoordinates: function(coordinates) {\n this.coordinates = coordinates;\n }\n });\n\n function destroyDroppable(collection, widget) {\n var groupName = widget.options.group,\n droppables = collection[groupName],\n i;\n\n Widget.fn.destroy.call(widget);\n\n if (droppables.length > 1) {\n for (i = 0; i < droppables.length; i++) {\n if (droppables[i] == widget) {\n droppables.splice(i, 1);\n break;\n }\n }\n } else {\n droppables.length = 0; // WTF, porting this from the previous destroyGroup\n delete collection[groupName];\n }\n }\n\n var DropTarget = Widget.extend({\n init: function(element, options) {\n var that = this;\n\n Widget.fn.init.call(that, element, options);\n\n var group = that.options.group;\n\n if (!(group in dropTargets)) {\n dropTargets[group] = [ that ];\n } else {\n dropTargets[group].push( that );\n }\n },\n\n events: [\n DRAGENTER,\n DRAGLEAVE,\n DROP\n ],\n\n options: {\n name: \"DropTarget\",\n group: \"default\"\n },\n\n destroy: function() {\n destroyDroppable(dropTargets, this);\n },\n\n _trigger: function(eventName, e) {\n var that = this,\n draggable = draggables[that.options.group];\n\n if (draggable) {\n return that.trigger(eventName, extend({}, e.event, {\n draggable: draggable,\n dropTarget: e.dropTarget\n }));\n }\n },\n\n _over: function(e) {\n this._trigger(DRAGENTER, e);\n },\n\n _out: function(e) {\n this._trigger(DRAGLEAVE, e);\n },\n\n _drop: function(e) {\n var that = this,\n draggable = draggables[that.options.group];\n\n if (draggable) {\n draggable.dropped = !that._trigger(DROP, e);\n }\n }\n });\n\n DropTarget.destroyGroup = function(groupName) {\n var group = dropTargets[groupName] || dropAreas[groupName],\n i;\n\n if (group) {\n for (i = 0; i < group.length; i++) {\n Widget.fn.destroy.call(group[i]);\n }\n\n group.length = 0;\n delete dropTargets[groupName];\n delete dropAreas[groupName];\n }\n };\n\n DropTarget._cache = dropTargets;\n\n var DropTargetArea = DropTarget.extend({\n init: function(element, options) {\n var that = this;\n\n Widget.fn.init.call(that, element, options);\n\n var group = that.options.group;\n\n if (!(group in dropAreas)) {\n dropAreas[group] = [ that ];\n } else {\n dropAreas[group].push( that );\n }\n },\n\n destroy: function() {\n destroyDroppable(dropAreas, this);\n },\n\n options: {\n name: \"DropTargetArea\",\n group: \"default\",\n filter: null\n }\n });\n\n var Draggable = Widget.extend({\n init: function(element, options) {\n var that = this;\n\n Widget.fn.init.call(that, element, options);\n\n that._activated = false;\n\n if (this.options.clickMoveClick) {\n that.clickMoveClick = new ClickMoveClick(that.element, {\n global: true,\n filter: that.options.filter,\n start: that._startClickMoveClick.bind(that),\n move: that._drag.bind(that),\n end: that._end.bind(that),\n cancel: that._onCancel.bind(that)\n });\n }\n\n that.userEvents = new UserEvents(that.element, {\n global: true,\n allowSelection: true,\n filter: that.options.filter,\n threshold: that.options.distance,\n start: that._start.bind(that),\n hold: that._hold.bind(that),\n move: that._drag.bind(that),\n end: that._end.bind(that),\n cancel: that._onCancel.bind(that),\n select: that._select.bind(that),\n press: that._press.bind(that),\n });\n\n if (kendo.support.touch) {\n that.element.find(that.options.filter).css('touch-action', 'none');\n }\n\n that._afterEndHandler = that._afterEnd.bind(that);\n that._captureEscape = that._captureEscape.bind(that);\n },\n\n events: [\n HOLD,\n DRAGSTART,\n DRAG,\n DRAGEND,\n DRAGCANCEL,\n HINTDESTROYED\n ],\n\n options: {\n name: \"Draggable\",\n distance: ( kendo.support.touch ? 0 : 5),\n group: \"default\",\n cursorOffset: null,\n axis: null,\n container: null,\n filter: null,\n ignore: null,\n holdToDrag: false,\n showHintOnHold: false,\n autoScroll: false,\n dropped: false,\n clickMoveClick: false,\n preventOsHoldFeatures: false\n },\n\n cancelHold: function() {\n this._activated = false;\n },\n\n _captureEscape: function(e) {\n var that = this;\n\n if (e.keyCode === kendo.keys.ESC) {\n that.userEvents.cancel();\n\n if (that.clickMoveClick) {\n that.clickMoveClick.cancel();\n }\n\n this._trigger(DRAGCANCEL, { event: e });\n }\n },\n\n _updateHint: function(e) {\n var that = this,\n coordinates,\n options = that.options,\n boundaries = that.boundaries,\n axis = options.axis,\n cursorOffset = that.options.cursorOffset,\n 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$5 = kendo;\n\n var __meta__$2 = {\n id: \"popup\",\n name: \"Pop-up\",\n category: \"framework\",\n depends: [ \"core\" ],\n advanced: true\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n ui = kendo.ui,\n Widget = ui.Widget,\n Class = kendo.Class,\n support = kendo.support,\n getOffset = kendo.getOffset,\n outerWidth = kendo._outerWidth,\n outerHeight = kendo._outerHeight,\n OPEN = \"open\",\n CLOSE = \"close\",\n DEACTIVATE = \"deactivate\",\n ACTIVATE = \"activate\",\n CENTER = \"center\",\n LEFT = \"left\",\n RIGHT = \"right\",\n TOP = \"top\",\n BOTTOM = \"bottom\",\n ABSOLUTE = \"absolute\",\n HIDDEN = \"hidden\",\n BODY = \"body\",\n LOCATION = \"location\",\n POSITION = \"position\",\n VISIBLE = \"visible\",\n EFFECTS = \"effects\",\n ACTIVE = \"k-active\",\n ACTIVECHILDREN = \".k-picker-wrap, .k-dropdown-wrap, .k-link\",\n MOUSEDOWN = \"down\",\n DOCUMENT_ELEMENT = $(document.documentElement),\n WINDOW = $(window),\n SCROLL = \"scroll\",\n 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\n options = options || {};\n\n if (options.isRtl) {\n options.origin = options.origin || BOTTOM + \" \" + RIGHT;\n options.position = options.position || TOP + \" \" + RIGHT;\n }\n\n Widget.fn.init.call(that, element, options);\n\n element = that.element;\n options = that.options;\n\n that.collisions = options.collision ? options.collision.split(\" \") : [];\n that.downEvent = kendo.applyEventMap(MOUSEDOWN, kendo.guid());\n\n if (that.collisions.length === 1) {\n that.collisions.push(that.collisions[0]);\n }\n\n parentPopup = $(that.options.anchor).closest(\".k-popup,.k-group\").filter(\":not([class^=km-])\"); // When popup is in another popup, make it relative.\n\n options.appendTo = $($(options.appendTo)[0] || parentPopup[0] || document.body);\n\n that.element.hide()\n .addClass(\"k-popup\")\n .toggleClass(\"k-rtl\", !!options.isRtl)\n .appendTo(options.appendTo)\n .attr(\"aria-hidden\", true)\n .on(\"mouseenter\" + NS, function() {\n that._hovered = true;\n })\n .on(\"wheel\" + NS, function(e) {\n var list = $(e.target).find(\".k-list\");\n var scrollArea = list.parent();\n if (list.length && list.is(\":visible\") && ((scrollArea.scrollTop() === 0 && e.originalEvent.deltaY < 0) ||\n (scrollArea.scrollTop() === scrollArea.prop('scrollHeight') - scrollArea.prop('offsetHeight') && e.originalEvent.deltaY > 0))) {\n e.preventDefault();\n }\n })\n .on(\"mouseleave\" + NS, function() {\n that._hovered = false;\n });\n\n that.wrapper = $();\n\n if (options.animation === false) {\n options.animation = { open: { effects: {} }, close: { hide: true, effects: {} } };\n }\n\n extend(options.animation.open, {\n complete: function() {\n that.wrapper.addClass(\"k-animation-container-shown\"); // Forcing refresh causes flickering in mobile.\n that.wrapper.css(\"overflow\",\"\");\n that._activated = true;\n that._trigger(ACTIVATE);\n }\n });\n\n extend(options.animation.close, {\n complete: function() {\n that._animationClose();\n }\n });\n\n that._mousedownProxy = function(e) {\n that._mousedown(e);\n };\n\n if (support.mobileOS.android) {\n that._resizeProxy = function(e) {\n setTimeout(function() {\n that._resize(e);\n }, 600); //Logic from kendo.onResize\n };\n } else {\n that._resizeProxy = function(e) {\n that._resize(e);\n };\n }\n\n if (options.toggleTarget) {\n $(options.toggleTarget).on(options.toggleEvent + NS, that.toggle.bind(that));\n }\n },\n\n events: [\n OPEN,\n ACTIVATE,\n CLOSE,\n DEACTIVATE\n ],\n\n options: {\n name: \"Popup\",\n toggleEvent: \"click\",\n origin: BOTTOM + \" \" + LEFT,\n position: TOP + \" \" + LEFT,\n anchor: BODY,\n appendTo: null,\n collision: \"flip fit\",\n viewport: window,\n copyAnchorStyles: true,\n autosize: false,\n autowidth: false,\n modal: false,\n adjustSize: {\n width: 0,\n height: 0\n },\n animation: {\n open: {\n effects: \"slideIn:down\",\n transition: true,\n duration: 200\n },\n close: { // if close animation effects are defined, they will be used instead of open.reverse\n duration: 100,\n hide: true\n }\n },\n omitOriginOffsets: false\n },\n\n _animationClose: function() {\n var that = this;\n var location = that.wrapper.data(LOCATION);\n\n that.wrapper.hide();\n\n if (location) {\n that.wrapper.css(location);\n }\n\n if (that.options.anchor != BODY) {\n that._hideActiveClass();\n }\n\n that._closing = false;\n that._trigger(DEACTIVATE);\n },\n\n destroy: function() {\n var that = this,\n options = that.options,\n element = that.element.off(NS),\n parent;\n\n Widget.fn.destroy.call(that);\n\n if (options.toggleTarget) {\n $(options.toggleTarget).off(NS);\n }\n\n if (!options.modal) {\n DOCUMENT_ELEMENT.off(that.downEvent, that._mousedownProxy);\n that._toggleResize(false);\n }\n\n kendo.destroy(that.element.children());\n element.removeData();\n\n if (options.appendTo[0] === document.body) {\n parent = element.closest(\".k-animation-container\");\n\n if (parent[0]) {\n parent.remove();\n } else {\n element.remove();\n }\n }\n },\n\n open: function(x, y) {\n var that = this,\n fixed = { isFixed: !isNaN(parseInt(y,10)), x: x, y: y },\n shouldCorrectWidth = that._shouldCorrectWidth,\n element = that.element,\n options = that.options,\n animation, wrapper,\n anchor = $(options.anchor),\n mobile = element[0] && element.hasClass(\"km-widget\"),\n listbox = element.find(\"[role='listbox']\"),\n parent;\n\n if (!that.visible()) {\n if (options.copyAnchorStyles) {\n if (mobile && styles[0] == \"font-size\") {\n styles.shift();\n }\n element.css(kendo.getComputedStyles(anchor[0], styles));\n }\n\n if (that.element.parent().data(\"animating\") || that._trigger(OPEN)) {\n return;\n }\n\n that._activated = false;\n\n if (!options.modal) {\n DOCUMENT_ELEMENT.off(that.downEvent, that._mousedownProxy)\n .on(that.downEvent, that._mousedownProxy);\n\n // this binding hangs iOS in editor\n // all elements in IE7/8 fire resize event, causing mayhem\n that._toggleResize(false);\n that._toggleResize(true);\n }\n\n that.wrapper = wrapper = kendo.wrap(element, options.autosize, options._resizeOnWrap, shouldCorrectWidth, options.autowidth)\n .css({\n overflow: HIDDEN,\n display: \"block\",\n position: ABSOLUTE\n })\n .attr(\"aria-hidden\", false);\n\n parent = element.parent();\n\n if (listbox.attr(\"aria-label\")) {\n wrapper.attr(\"aria-label\", listbox.attr(\"aria-label\"));\n } else if (listbox.attr(\"aria-labelledby\")) {\n wrapper.attr(\"aria-labelledby\", listbox.attr(\"aria-labelledby\"));\n }\n\n if (support.mobileOS.android) {\n parent.css(TRANSFORM, \"translatez(0)\"); // Android is VERY slow otherwise. Should be tested in other droids as well since it may cause blur.\n }\n\n wrapper.css(POSITION);\n\n if ($(options.appendTo)[0] == document.body) {\n wrapper.css(TOP, \"-10000px\");\n }\n\n that.flipped = that._position(fixed);\n animation = that._openAnimation();\n\n if (options.anchor != BODY && !that.element.hasClass(\"k-tooltip\")) {\n that._addActiveClass();\n }\n\n parent.hide();\n element.show();\n that.wrapper.show();\n\n parent.data(EFFECTS, animation.effects)\n .kendoStop(true)\n .kendoAnimate(animation);\n\n\n element.attr(\"aria-hidden\", false);\n }\n },\n\n _location: function(isFixed) {\n var that = this,\n element = that.element,\n options = that.options,\n wrapper,\n anchor = $(options.anchor),\n mobile = element[0] && element.hasClass(\"km-widget\");\n\n if (options.copyAnchorStyles) {\n if (mobile && styles[0] == \"font-size\") {\n styles.shift();\n }\n element.css(kendo.getComputedStyles(anchor[0], styles));\n }\n\n that.wrapper = wrapper = kendo.wrap(element, options.autosize)\n .css({\n overflow: HIDDEN,\n display: \"block\",\n position: ABSOLUTE\n });\n\n if (support.mobileOS.android) {\n wrapper.css(TRANSFORM, \"translatez(0)\"); // Android is VERY slow otherwise. Should be tested in other droids as well since it may cause blur.\n }\n\n wrapper.css(POSITION);\n\n if ($(options.appendTo)[0] == document.body) {\n wrapper.css(TOP, \"-10000px\");\n }\n\n that._position(isFixed || {});\n\n var offset = wrapper.offset();\n return {\n width: kendo._outerWidth(wrapper),\n height: kendo._outerHeight(wrapper),\n left: offset.left,\n top: offset.top\n };\n },\n\n _openAnimation: function() {\n var animation = extend(true, {}, this.options.animation.open);\n animation.effects = kendo.parseEffects(animation.effects, this.flipped);\n\n return animation;\n },\n\n _hideActiveClass: function() {\n var anchor = $(this.options.anchor);\n anchor\n .children(ACTIVECHILDREN)\n .removeClass(ACTIVE);\n\n },\n\n _addActiveClass: function() {\n $(this.options.anchor)\n .children(ACTIVECHILDREN)\n .addClass(ACTIVE);\n },\n\n position: function() {\n if (this.visible()) {\n this.flipped = this._position();\n }\n },\n\n toggle: function() {\n var that = this;\n\n that[that.visible() ? CLOSE : OPEN]();\n },\n\n visible: function() {\n return this.wrapper.is(\":\" + VISIBLE) && this.element.is(\":\" + VISIBLE);\n },\n\n close: function(skipEffects) {\n var that = this,\n parent = that.element.parent(),\n options = that.options, wrap,\n animation, openEffects, closeEffects;\n\n if (that.visible()) {\n wrap = (that.wrapper[0] ? that.wrapper : kendo.wrap(that.element).hide());\n\n that._toggleResize(false);\n\n if (that._closing || that._trigger(CLOSE)) {\n that._toggleResize(true);\n return;\n }\n\n that.wrapper.removeClass(\"k-animation-container-shown\");\n\n // Close all inclusive popups.\n that.element.find(\".k-popup\").each(function() {\n var that = $(this),\n popup = that.data(\"kendoPopup\");\n\n if (popup) {\n popup.close(skipEffects);\n }\n });\n\n DOCUMENT_ELEMENT.off(that.downEvent, that._mousedownProxy);\n\n if (skipEffects) {\n animation = { hide: true, effects: {} };\n } else {\n animation = extend(true, {}, options.animation.close);\n openEffects = parent.data(EFFECTS);\n closeEffects = animation.effects;\n\n if (!closeEffects && !kendo.size(closeEffects) && openEffects && kendo.size(openEffects)) {\n animation.effects = openEffects;\n animation.reverse = true;\n }\n\n that._closing = true;\n }\n\n parent.kendoStop(true);\n that.element.attr(\"aria-hidden\", true);\n wrap\n .css({ overflow: HIDDEN }) // stop callback will remove hidden overflow\n .attr(\"aria-hidden\", true);\n parent.kendoAnimate(animation);\n\n if (skipEffects) {\n that._animationClose();\n }\n }\n },\n\n _trigger: function(ev) {\n return this.trigger(ev, { type: ev });\n },\n\n _resize: function(e) {\n var that = this;\n\n if (support.resize.indexOf(e.type) !== -1) {\n clearTimeout(that._resizeTimeout);\n that._resizeTimeout = setTimeout(function() {\n that._position();\n that._resizeTimeout = null;\n }, 50);\n } else {\n if (!that._hovered || (that._activated && that.element.find(\".k-list\").length > 0)) {\n that.close();\n }\n }\n },\n\n _toggleResize: function(toggle) {\n var method = toggle ? \"on\" : \"off\";\n var eventNames = support.resize;\n\n if (!(support.mobileOS.ios || support.mobileOS.android || support.browser.safari)) {\n eventNames += \" \" + SCROLL;\n }\n\n if (toggle && !this.scrollableParents) {\n this.scrollableParents = this._scrollableParents();\n }\n\n if (this.scrollableParents && this.scrollableParents.length) {\n this.scrollableParents[method](SCROLL, this._resizeProxy);\n }\n\n WINDOW[method](eventNames, this._resizeProxy);\n },\n\n _mousedown: function(e) {\n var that = this,\n container = that.element[0],\n options = that.options,\n anchor = $(options.anchor)[0],\n toggleTarget = options.toggleTarget,\n target = kendo.eventTarget(e),\n popup = $(target).closest(\".k-popup\"),\n mobile = popup.parent().parent(\".km-shim\").length;\n\n popup = popup[0];\n if (!mobile && popup && popup !== that.element[0]) {\n return;\n }\n\n // This MAY result in popup not closing in certain cases.\n if ($(e.target).closest(\"a\").data(\"rel\") === \"popover\") {\n return;\n }\n\n if (!contains(container, target) && !contains(anchor, target) && !(toggleTarget && contains($(toggleTarget)[0], target))) {\n that.close();\n }\n },\n\n _fit: function(position, size, viewPortSize) {\n var output = 0;\n\n if (position + size > viewPortSize) {\n output = viewPortSize - (position + size);\n }\n\n if (position < 0) {\n output = -position;\n }\n\n return output;\n },\n\n _flip: function(offset, size, anchorSize, viewPortSize, origin, position, boxSize) {\n var output = 0;\n boxSize = boxSize || size;\n\n if (position !== origin && position !== CENTER && origin !== CENTER) {\n if (offset + boxSize > viewPortSize) {\n output += -(anchorSize + size);\n }\n\n if (offset + output < 0) {\n output += anchorSize + size;\n }\n }\n return output;\n },\n\n _scrollableParents: function() {\n return $(this.options.anchor)\n .parentsUntil(\"body\")\n .filter(function(index, element) {\n return kendo.isScrollable(element);\n });\n },\n\n _position: function(fixed) {\n var that = this,\n //element = that.element.css(POSITION, \"\"), /* fixes telerik/kendo-ui-core#790, comes from telerik/kendo#615 */\n element = that.element,\n wrapper = that.wrapper,\n options = that.options,\n viewport = $(options.viewport),\n zoomLevel = support.zoomLevel(),\n isWindow = !!((viewport[0] == window) && window.innerWidth && (zoomLevel <= 1.02)),\n anchor = $(options.anchor),\n origins = options.origin.toLowerCase().split(\" \"),\n positions = options.position.toLowerCase().split(\" \"),\n collisions = that.collisions,\n siblingContainer, parents,\n parentZIndex, zIndex = 10002,\n idx = 0,\n docEl = document.documentElement,\n length, viewportOffset, viewportWidth, viewportHeight;\n\n if (options.viewport === window) {\n viewportOffset = {\n top: (window.pageYOffset || document.documentElement.scrollTop || 0),\n left: (window.pageXOffset || document.documentElement.scrollLeft || 0)\n };\n } else {\n viewportOffset = viewport.offset();\n }\n\n if (isWindow) {\n viewportWidth = window.innerWidth;\n viewportHeight = window.innerHeight;\n } else {\n viewportWidth = viewport.width();\n viewportHeight = viewport.height();\n }\n\n if (isWindow && docEl.scrollHeight - docEl.clientHeight > 0) {\n var sign = options.isRtl ? -1 : 1;\n\n viewportWidth -= sign * kendo.support.scrollbar();\n }\n\n siblingContainer = anchor.parents().filter(wrapper.siblings());\n\n if (siblingContainer[0]) {\n parentZIndex = Math.max(Number(siblingContainer.css(\"zIndex\")), 0);\n\n // set z-index to be more than that of the container/sibling\n // compensate with more units for window z-stack\n if (parentZIndex) {\n zIndex = parentZIndex + 10;\n } else {\n parents = anchor.parentsUntil(siblingContainer);\n for (length = parents.length; idx < length; idx++) {\n parentZIndex = Number($(parents[idx]).css(\"zIndex\"));\n if (parentZIndex && zIndex < parentZIndex) {\n zIndex = parentZIndex + 10;\n }\n }\n }\n }\n\n wrapper.css(\"zIndex\", zIndex);\n\n if (fixed && fixed.isFixed) {\n wrapper.css({ left: fixed.x, top: fixed.y });\n } else {\n wrapper.css(that._align(origins, positions));\n }\n\n var pos = getOffset(wrapper, POSITION, anchor[0] === wrapper.offsetParent()[0]),\n offset = getOffset(wrapper),\n anchorParent = anchor.offsetParent().parent(\".k-animation-container,.k-popup,.k-group\"); // If the parent is positioned, get the current positions\n\n if (anchorParent.length) {\n pos = getOffset(wrapper, POSITION, true);\n offset = getOffset(wrapper);\n }\n\n offset.top -= viewportOffset.top;\n offset.left -= viewportOffset.left;\n\n if (!that.wrapper.data(LOCATION)) { // Needed to reset the popup location after every closure - fixes the resize bugs.\n wrapper.data(LOCATION, extend({}, pos));\n }\n\n var offsets = extend({}, offset),\n location = extend({}, pos),\n adjustSize = options.adjustSize;\n\n if (collisions[0] === \"fit\") {\n location.top += that._fit(offsets.top, outerHeight(wrapper) + adjustSize.height, viewportHeight / zoomLevel);\n }\n\n if (collisions[1] === \"fit\") {\n location.left += that._fit(offsets.left, outerWidth(wrapper) + adjustSize.width, viewportWidth / zoomLevel);\n }\n\n var flipPos = extend({}, location);\n var elementHeight = outerHeight(element);\n var wrapperHeight = outerHeight(wrapper);\n\n if (!wrapper.height() && elementHeight) {\n wrapperHeight = wrapperHeight + elementHeight;\n }\n\n if (collisions[0] === \"flip\") {\n location.top += that._flip(offsets.top, elementHeight, outerHeight(anchor), viewportHeight / zoomLevel, origins[0], positions[0], wrapperHeight);\n }\n\n if (collisions[1] === \"flip\") {\n location.left += that._flip(offsets.left, outerWidth(element), outerWidth(anchor), viewportWidth / zoomLevel, origins[1], positions[1], outerWidth(wrapper));\n }\n\n wrapper.css(location);\n\n return (location.left != flipPos.left || location.top != flipPos.top);\n },\n\n _align: function(origin, position) {\n var that = this,\n element = that.wrapper,\n anchor = $(that.options.anchor),\n verticalOrigin = origin[0],\n horizontalOrigin = origin[1],\n verticalPosition = position[0],\n horizontalPosition = position[1],\n anchorOffset = getOffset(anchor),\n appendTo = $(that.options.appendTo),\n appendToOffset,\n width = outerWidth(element) || 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$4 = kendo;\n\n var __meta__$1 = {\n id: \"touch\",\n name: \"Touch\",\n category: \"mobile\",\n description: \"The kendo Touch widget provides a cross-platform compatible API for handling user-initiated touch events, multi-touch gestures and event sequences (drag, swipe, etc.). \",\n depends: [ \"core\", \"userevents\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n Widget = kendo.ui.Widget,\n abs = Math.abs,\n MAX_DOUBLE_TAP_DISTANCE = 20;\n\n var Touch = Widget.extend({\n init: function(element, options) {\n var that = this;\n\n Widget.fn.init.call(that, element, options);\n options = that.options;\n\n element = that.element;\n that.wrapper = element;\n\n function eventProxy(name) {\n return function(e) {\n that._triggerTouch(name, e);\n };\n }\n\n function gestureEventProxy(name) {\n return function(e) {\n that.trigger(name, { touches: e.touches, distance: e.distance, center: e.center, event: e.event });\n };\n }\n\n that.events = new kendo.UserEvents(element, {\n filter: options.filter,\n surface: options.surface,\n minHold: options.minHold,\n multiTouch: options.multiTouch,\n allowSelection: true,\n fastTap: options.fastTap,\n press: eventProxy(\"touchstart\"),\n hold: eventProxy(\"hold\"),\n tap: that._tap.bind(that),\n gesturestart: gestureEventProxy(\"gesturestart\"),\n gesturechange: gestureEventProxy(\"gesturechange\"),\n gestureend: gestureEventProxy(\"gestureend\")\n });\n\n if (options.enableSwipe) {\n that.events.bind(\"start\", that._swipestart.bind(that));\n that.events.bind(\"move\", that._swipemove.bind(that));\n } else {\n that.events.bind(\"start\", that._dragstart.bind(that));\n that.events.bind(\"move\", eventProxy(\"drag\"));\n that.events.bind(\"end\", eventProxy(\"dragend\"));\n }\n\n kendo.notify(that);\n },\n\n events: [\n \"touchstart\",\n \"dragstart\",\n \"drag\",\n \"dragend\",\n \"tap\",\n \"doubletap\",\n \"hold\",\n \"swipe\",\n \"gesturestart\",\n \"gesturechange\",\n \"gestureend\"\n ],\n\n options: {\n name: \"Touch\",\n surface: null,\n global: false,\n fastTap: false,\n filter: null,\n multiTouch: false,\n enableSwipe: false,\n minXDelta: 30,\n maxYDelta: 20,\n maxDuration: 1000,\n minHold: 800,\n doubleTapTimeout: 800\n },\n\n cancel: function() {\n this.events.cancel();\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n\n this.events.destroy();\n },\n\n _triggerTouch: function(type, e) {\n if (this.trigger(type, { touch: e.touch, event: e.event })) {\n e.preventDefault();\n }\n },\n\n _tap: function(e) {\n var that = this,\n lastTap = that.lastTap,\n touch = e.touch;\n\n if (lastTap &&\n (touch.endTime - lastTap.endTime < that.options.doubleTapTimeout) &&\n kendo.touchDelta(touch, lastTap).distance < MAX_DOUBLE_TAP_DISTANCE\n ) {\n\n that._triggerTouch(\"doubletap\", e);\n that.lastTap = null;\n } else {\n that._triggerTouch(\"tap\", e);\n that.lastTap = touch;\n }\n },\n\n _dragstart: function(e) {\n this._triggerTouch(\"dragstart\", e);\n },\n\n _swipestart: function(e) {\n if (abs(e.x.velocity) * 2 >= abs(e.y.velocity)) {\n e.sender.capture();\n }\n },\n\n _swipemove: function(e) {\n var that = this,\n options = that.options,\n touch = e.touch,\n duration = e.event.timeStamp - touch.startTime,\n direction = touch.x.initialDelta > 0 ? \"right\" : \"left\";\n\n if (\n abs(touch.x.initialDelta) >= options.minXDelta &&\n abs(touch.y.initialDelta) < options.maxYDelta &&\n duration < options.maxDuration\n )\n {\n that.trigger(\"swipe\", {\n direction: direction,\n touch: e.touch\n });\n\n touch.cancel();\n }\n }\n });\n\n kendo.ui.plugin(Touch);\n })(window.kendo.jQuery);\n var kendo$3 = kendo;\n\n var __meta__ = {\n id: \"mobile.scroller\",\n name: \"Scroller\",\n category: \"mobile\",\n description: \"The Kendo Mobile Scroller widget enables touch friendly kinetic scrolling for the contents of a given DOM element.\",\n depends: [ \"fx\", \"draganddrop\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n mobile = kendo.mobile,\n fx = kendo.effects,\n ui = mobile.ui,\n extend = $.extend,\n Widget = ui.Widget,\n Class = kendo.Class,\n Movable = kendo.ui.Movable,\n Pane = kendo.ui.Pane,\n PaneDimensions = kendo.ui.PaneDimensions,\n Transition = fx.Transition,\n Animation = fx.Animation,\n abs = Math.abs,\n SNAPBACK_DURATION = 500,\n SCROLLBAR_OPACITY = 0.7,\n FRICTION = 0.96,\n VELOCITY_MULTIPLIER = 10,\n MAX_VELOCITY = 55,\n OUT_OF_BOUNDS_FRICTION = 0.5,\n ANIMATED_SCROLLER_PRECISION = 5,\n RELEASECLASS = \"km-scroller-release\",\n REFRESHCLASS = \"km-scroller-refresh\",\n PULL = \"pull\",\n CHANGE = \"change\",\n RESIZE = \"resize\",\n SCROLL = \"scroll\",\n MOUSE_WHEEL_ID = 2;\n\n var ZoomSnapBack = Animation.extend({\n init: function(options) {\n var that = this;\n Animation.fn.init.call(that);\n extend(that, options);\n\n that.userEvents.bind(\"gestureend\", that.start.bind(that));\n that.tapCapture.bind(\"press\", that.cancel.bind(that));\n },\n\n enabled: function() {\n return this.movable.scale < this.dimensions.minScale;\n },\n\n done: function() {\n return this.dimensions.minScale - this.movable.scale < 0.01;\n },\n\n tick: function() {\n var movable = this.movable;\n movable.scaleWith(1.1);\n this.dimensions.rescale(movable.scale);\n },\n\n onEnd: function() {\n var movable = this.movable;\n movable.scaleTo(this.dimensions.minScale);\n this.dimensions.rescale(movable.scale);\n }\n });\n\n var DragInertia = Animation.extend({\n init: function(options) {\n var that = this;\n\n Animation.fn.init.call(that);\n\n extend(that, options, {\n transition: new Transition({\n axis: options.axis,\n movable: options.movable,\n onEnd: function() { that._end(); }\n })\n });\n\n that.tapCapture.bind(\"press\", function() { that.cancel(); });\n that.userEvents.bind(\"end\", that.start.bind(that));\n that.userEvents.bind(\"gestureend\", that.start.bind(that));\n that.userEvents.bind(\"tap\", that.onEnd.bind(that));\n },\n\n onCancel: function() {\n this.transition.cancel();\n },\n\n freeze: function(location) {\n var that = this;\n that.cancel();\n that._moveTo(location);\n },\n\n onEnd: function() {\n var that = this;\n if (that.paneAxis.outOfBounds()) {\n that._snapBack();\n } else {\n that._end();\n }\n },\n\n done: function() {\n return abs(this.velocity) < 1;\n },\n\n start: function(e) {\n var that = this,\n velocity;\n\n if (!that.dimension.enabled) { return; }\n\n if (that.paneAxis.outOfBounds()) {\n if (that.transition._started) {\n that.transition.cancel();\n that.velocity = Math.min(e.touch[that.axis].velocity * that.velocityMultiplier, MAX_VELOCITY);\n\n Animation.fn.start.call(that);\n } else {\n that._snapBack();\n }\n } else {\n velocity = e.touch.id === MOUSE_WHEEL_ID ? 0 : e.touch[that.axis].velocity;\n that.velocity = Math.max(Math.min(velocity * that.velocityMultiplier, MAX_VELOCITY), -MAX_VELOCITY);\n\n that.tapCapture.captureNext();\n Animation.fn.start.call(that);\n }\n },\n\n tick: function() {\n var that = this,\n dimension = that.dimension,\n friction = that.paneAxis.outOfBounds() ? OUT_OF_BOUNDS_FRICTION : that.friction,\n delta = (that.velocity *= friction),\n location = that.movable[that.axis] + delta;\n\n if (!that.elastic && dimension.outOfBounds(location)) {\n location = Math.max(Math.min(location, dimension.max), dimension.min);\n that.velocity = 0;\n }\n\n that.movable.moveAxis(that.axis, location);\n },\n\n _end: function() {\n this.tapCapture.cancelCapture();\n this.end();\n },\n\n _snapBack: function() {\n var that = this,\n dimension = that.dimension,\n snapBack = that.movable[that.axis] > dimension.max ? dimension.max : dimension.min;\n that._moveTo(snapBack);\n },\n\n _moveTo: function(location) {\n this.transition.moveTo({ location: location, duration: SNAPBACK_DURATION, ease: Transition.easeOutExpo });\n }\n });\n\n var AnimatedScroller = Animation.extend({\n init: function(options) {\n var that = this;\n\n kendo.effects.Animation.fn.init.call(this);\n\n extend(that, options, {\n origin: {},\n destination: {},\n offset: {}\n });\n },\n\n tick: function() {\n this._updateCoordinates();\n this.moveTo(this.origin);\n },\n\n done: function() {\n return abs(this.offset.y) < ANIMATED_SCROLLER_PRECISION && abs(this.offset.x) < ANIMATED_SCROLLER_PRECISION;\n },\n\n onEnd: function() {\n this.moveTo(this.destination);\n if (this.callback) {\n this.callback.call();\n }\n },\n\n setCoordinates: function(from, to) {\n this.offset = {};\n this.origin = from;\n this.destination = to;\n },\n\n setCallback: function(callback) {\n if (callback && kendo.isFunction(callback)) {\n this.callback = callback;\n } else {\n callback = undefined$1;\n }\n },\n\n _updateCoordinates: function() {\n this.offset = {\n x: (this.destination.x - this.origin.x) / 4,\n y: (this.destination.y - this.origin.y) / 4\n };\n\n this.origin = {\n y: this.origin.y + this.offset.y,\n x: this.origin.x + this.offset.x\n };\n }\n });\n\n var ScrollBar = Class.extend({\n init: function(options) {\n var that = this,\n horizontal = options.axis === \"x\",\n element = $('
    ');\n\n if (horizontal) {\n element.attr(\"aria-orientation\", \"horizontal\");\n }\n\n extend(that, options, {\n element: element,\n elementSize: 0,\n movable: new Movable(element),\n scrollMovable: options.movable,\n alwaysVisible: options.alwaysVisible,\n size: horizontal ? \"width\" : \"height\"\n });\n\n that.scrollMovable.bind(CHANGE, that.refresh.bind(that));\n that.container.append(element);\n if (options.alwaysVisible) {\n that.show();\n }\n },\n\n refresh: function() {\n var that = this,\n axis = that.axis,\n dimension = that.dimension,\n paneSize = dimension.size,\n scrollMovable = that.scrollMovable,\n sizeRatio = paneSize / dimension.total,\n position = Math.round(-scrollMovable[axis] * sizeRatio),\n size = Math.round(paneSize * sizeRatio);\n\n if (sizeRatio >= 1) {\n this.element.css(\"display\", \"none\");\n } else {\n this.element.css(\"display\", \"\");\n }\n\n if (position + size > paneSize) {\n size = paneSize - position;\n } else if (position < 0) {\n size += position;\n position = 0;\n }\n\n if (that.elementSize != size) {\n that.element.css(that.size, size + \"px\");\n that.elementSize = size;\n }\n\n that._ariaValue(position, dimension.size - that.elementSize);\n\n that.movable.moveAxis(axis, position);\n },\n\n show: function() {\n this.element.css({ opacity: SCROLLBAR_OPACITY, visibility: \"visible\" });\n },\n\n hide: function() {\n if (!this.alwaysVisible) {\n this.element.css({ opacity: 0 });\n }\n },\n\n _ariaValue: function(current, total) {\n var element = this.element;\n\n if (current > total) {\n current = total;\n }\n\n element.attr(\"aria-valuemax\", total);\n element.attr(\"aria-valuenow\", current);\n }\n });\n\n var Scroller = Widget.extend({\n init: function(element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n\n element = that.element;\n\n that._native = that.options.useNative && kendo.support.hasNativeScrolling;\n if (that._native) {\n element.addClass(\"km-native-scroller\")\n .prepend('
    ');\n\n extend(that, {\n scrollElement: element,\n fixedContainer: element.children().first()\n });\n\n return;\n }\n\n element\n .css(\"overflow\", \"hidden\")\n .addClass(\"km-scroll-wrapper\")\n .wrapInner('
    ')\n .prepend('
    ');\n\n var inner = element.children().eq(1),\n\n tapCapture = new kendo.TapCapture(element),\n\n movable = new Movable(inner),\n\n dimensions = new PaneDimensions({\n element: inner,\n container: element,\n forcedEnabled: that.options.zoom\n }),\n\n avoidScrolling = this.options.avoidScrolling,\n\n userEvents = new kendo.UserEvents(element, {\n touchAction: \"pan-y\",\n fastTap: true,\n allowSelection: true,\n preventDragEvent: true,\n captureUpIfMoved: true,\n multiTouch: that.options.zoom,\n supportDoubleTap: that.options.supportDoubleTap,\n start: function(e) {\n dimensions.refresh();\n\n var velocityX = abs(e.x.velocity),\n velocityY = abs(e.y.velocity),\n horizontalSwipe = velocityX * 2 >= velocityY,\n originatedFromFixedContainer = $.contains(that.fixedContainer[0], e.event.target),\n verticalSwipe = velocityY * 2 >= velocityX;\n\n\n if (!originatedFromFixedContainer && !avoidScrolling(e) && that.enabled && (dimensions.x.enabled && horizontalSwipe || dimensions.y.enabled && verticalSwipe)) {\n userEvents.capture();\n } else {\n userEvents.cancel();\n }\n }\n }),\n\n pane = new Pane({\n movable: movable,\n dimensions: dimensions,\n userEvents: userEvents,\n elastic: that.options.elastic\n }),\n\n zoomSnapBack = new ZoomSnapBack({\n movable: movable,\n dimensions: dimensions,\n userEvents: userEvents,\n tapCapture: tapCapture\n }),\n\n animatedScroller = new AnimatedScroller({\n moveTo: function(coordinates) {\n that.scrollTo(coordinates.x, coordinates.y);\n }\n });\n\n movable.bind(CHANGE, function() {\n that.scrollTop = - movable.y;\n that.scrollLeft = - movable.x;\n\n that.trigger(SCROLL, {\n scrollTop: that.scrollTop,\n scrollLeft: that.scrollLeft\n });\n });\n\n if (that.options.mousewheelScrolling) {\n element.on(\"DOMMouseScroll mousewheel\", this._wheelScroll.bind(this));\n }\n\n extend(that, {\n movable: movable,\n dimensions: dimensions,\n zoomSnapBack: zoomSnapBack,\n animatedScroller: animatedScroller,\n userEvents: userEvents,\n pane: pane,\n tapCapture: tapCapture,\n pulled: false,\n enabled: true,\n scrollElement: inner,\n scrollTop: 0,\n scrollLeft: 0,\n fixedContainer: element.children().first()\n });\n\n that._initAxis(\"x\");\n that._initAxis(\"y\");\n\n // build closure\n that._wheelEnd = function() {\n that._wheel = false;\n that.userEvents.end(0, that._wheelY);\n };\n\n dimensions.refresh();\n\n if (that.options.pullToRefresh) {\n that._initPullToRefresh();\n }\n },\n\n _wheelScroll: function(e) {\n if (e.ctrlKey) {\n return;\n }\n\n if (!this._wheel) {\n this._wheel = true;\n this._wheelY = 0;\n this.userEvents.press(0, this._wheelY);\n }\n\n clearTimeout(this._wheelTimeout);\n this._wheelTimeout = setTimeout(this._wheelEnd, 50);\n\n var delta = kendo.wheelDeltaY(e);\n\n if (delta) {\n this._wheelY += delta;\n this.userEvents.move(0, this._wheelY);\n }\n\n e.preventDefault();\n },\n\n makeVirtual: function() {\n this.dimensions.y.makeVirtual();\n },\n\n virtualSize: function(min, max) {\n this.dimensions.y.virtualSize(min, max);\n },\n\n height: function() {\n return this.dimensions.y.size;\n },\n\n scrollHeight: function() {\n return this.scrollElement[0].scrollHeight;\n },\n\n scrollWidth: function() {\n return this.scrollElement[0].scrollWidth;\n },\n\n options: {\n name: \"Scroller\",\n zoom: false,\n pullOffset: 140,\n visibleScrollHints: false,\n elastic: true,\n useNative: false,\n mousewheelScrolling: true,\n avoidScrolling: function() { return false; },\n pullToRefresh: false,\n messages: {\n pullTemplate: \"Pull to refresh\",\n releaseTemplate: \"Release to refresh\",\n refreshTemplate: \"Refreshing\"\n }\n },\n\n events: [\n PULL,\n SCROLL,\n RESIZE\n ],\n\n _resize: function() {\n if (!this._native) {\n this.contentResized();\n }\n },\n\n setOptions: function(options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n if (options.pullToRefresh) {\n that._initPullToRefresh();\n }\n },\n\n reset: function() {\n if (this._native) {\n this.scrollElement.scrollTop(0);\n } else {\n this.movable.moveTo({ x: 0, y: 0 });\n this._scale(1);\n }\n },\n\n contentResized: function() {\n this.dimensions.refresh();\n if (this.pane.x.outOfBounds()) {\n this.movable.moveAxis(\"x\", this.dimensions.x.min);\n }\n\n if (this.pane.y.outOfBounds()) {\n this.movable.moveAxis(\"y\", this.dimensions.y.min);\n }\n },\n\n zoomOut: function() {\n var dimensions = this.dimensions;\n dimensions.refresh();\n this._scale(dimensions.fitScale);\n this.movable.moveTo(dimensions.centerCoordinates());\n },\n\n enable: function() {\n this.enabled = true;\n },\n\n disable: function() {\n this.enabled = false;\n },\n\n scrollTo: function(x, y) {\n if (this._native) {\n kendo.scrollLeft(this.scrollElement, abs(x));\n this.scrollElement.scrollTop(abs(y));\n } else {\n this.dimensions.refresh();\n this.movable.moveTo({ x: x, y: y });\n }\n },\n\n animatedScrollTo: function(x, y, callback) {\n var from,\n to;\n\n if (this._native) {\n this.scrollTo(x, y);\n } else {\n from = { x: this.movable.x, y: this.movable.y };\n to = { x: x, y: y };\n\n this.animatedScroller.setCoordinates(from, to);\n this.animatedScroller.setCallback(callback);\n this.animatedScroller.start();\n }\n },\n\n pullHandled: function() {\n var that = this;\n that.refreshHint.removeClass(REFRESHCLASS);\n that.hintContainer.html(that.pullTemplate({}));\n that.yinertia.onEnd();\n that.xinertia.onEnd();\n that.userEvents.cancel();\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n if (this.userEvents) {\n this.userEvents.destroy();\n }\n },\n\n _scale: function(scale) {\n this.dimensions.rescale(scale);\n this.movable.scaleTo(scale);\n },\n\n _initPullToRefresh: function() {\n var that = this;\n\n that.dimensions.y.forceEnabled();\n that.pullTemplate = kendo.template(that.options.messages.pullTemplate);\n that.releaseTemplate = kendo.template(that.options.messages.releaseTemplate);\n that.refreshTemplate = kendo.template(that.options.messages.refreshTemplate);\n\n that.scrollElement.prepend('' + that.pullTemplate({}) + '');\n that.refreshHint = that.scrollElement.children().first();\n that.hintContainer = that.refreshHint.children(\".km-template\");\n\n that.pane.y.bind(\"change\", that._paneChange.bind(that));\n that.userEvents.bind(\"end\", that._dragEnd.bind(that));\n },\n\n _dragEnd: function() {\n var that = this;\n\n if (!that.pulled) {\n return;\n }\n\n that.pulled = false;\n that.refreshHint.removeClass(RELEASECLASS).addClass(REFRESHCLASS);\n that.hintContainer.html(that.refreshTemplate({}));\n that.yinertia.freeze(that.options.pullOffset / 2);\n that.trigger(\"pull\");\n },\n\n _paneChange: function() {\n var that = this;\n\n if (that.movable.y / OUT_OF_BOUNDS_FRICTION > that.options.pullOffset) {\n if (!that.pulled) {\n that.pulled = true;\n that.refreshHint.removeClass(REFRESHCLASS).addClass(RELEASECLASS);\n that.hintContainer.html(that.releaseTemplate({}));\n }\n } else if (that.pulled) {\n that.pulled = false;\n that.refreshHint.removeClass(RELEASECLASS);\n that.hintContainer.html(that.pullTemplate({}));\n }\n },\n\n _initAxis: function(axis) {\n var that = this,\n elementId = that.element.attr(\"id\"),\n movable = that.movable,\n dimension = that.dimensions[axis],\n tapCapture = that.tapCapture,\n paneAxis = that.pane[axis],\n scrollBar;\n\n if (!elementId) {\n elementId = kendo.guid();\n that.element.attr(\"id\", elementId);\n }\n\n scrollBar = new ScrollBar({\n axis: axis,\n movable: movable,\n dimension: dimension,\n container: that.element,\n alwaysVisible: that.options.visibleScrollHints,\n controlsId: elementId\n });\n\n dimension.bind(CHANGE, function() {\n scrollBar.refresh();\n });\n\n paneAxis.bind(CHANGE, function() {\n scrollBar.show();\n });\n\n that[axis + \"inertia\"] = new DragInertia({\n axis: axis,\n paneAxis: paneAxis,\n movable: movable,\n tapCapture: tapCapture,\n userEvents: that.userEvents,\n dimension: dimension,\n elastic: that.options.elastic,\n friction: that.options.friction || FRICTION,\n velocityMultiplier: that.options.velocityMultiplier || VELOCITY_MULTIPLIER,\n end: function() {\n scrollBar.hide();\n that.trigger(\"scrollEnd\", {\n axis: axis,\n scrollTop: that.scrollTop,\n scrollLeft: that.scrollLeft\n });\n }\n });\n }\n });\n\n ui.plugin(Scroller);\n })(window.kendo.jQuery);\n var kendo$2 = kendo;\n\n \"bundle all\";\n var kendo$1 = kendo;\n\n return kendo$1;\n\n}));\n"]}