{"version":3,"file":"kendo.mobile.min.js","names":["factory","define","amd","packageMetadata","name","productName","productCodes","publishDate","version","replace","licensingDocsUrl","$","window","undefined$1","Template","kendo","cultures","extend","each","isArray","Array","noop","math","Math","JSON","support","percentRegExp","formatRegExp","boxShadowRegExp","numberRegExp","FUNCTION","STRING","NUMBER","OBJECT","NULL","BOOLEAN","UNDEFINED","ARIA_LABELLEDBY","ARIA_LABEL","getterCache","setterCache","slice","cssPropertiesNames","noDepricateExtend","src","copyIsArray","copy","options","clone","arguments$1","arguments","target","i","length","deep","this","jQuery","isPlainObject","Class","proto","member","fn","base","that","subclass","init","apply","prototype","constructor","Object","_initOptions","deepExtend","isFunction","preventDefault","_defaultPrevented","isDefaultPrevented","Observable","_events","bind","eventName","handlers","one","idx","original","handler","eventNames","handlersIsFunction","unbind","push","first","unshift","trigger","e","events","sender","call","splice","compilePart","part","stringPart","split","join","charAt","rest","substring","argumentNameRegExp","encodeRegExp","escapedCurlyRegExp","curlyRegExp","escapedSharpRegExp","sharpRegExp","zeros","pad","number","digits","end","wrapResize","element","autosize","outerWidth","_outerWidth","outerHeight","_outerHeight","wrapper","parent","wrapperStyle","style","is","css","display","position","test","width","height","boxSizing","mozBoxSizing","webkitBoxSizing","destination","deepExtendOne","source","property","propValue","propType","propInit","destProp","ObservableArray","data","LazyObservableArray","DataSource","HierarchicalDataSource","RegExp","ArrayBuffer","HTMLElement","Date","getTime","testRx","agent","rxs","dflt","rx","hasOwnProperty","toCamelCase","str","strMatch","g1","toUpperCase","getComputedStyles","properties","computedStyle","styles","document","defaultView","getComputedStyle","value","getPropertyValue","currentStyle","size","paramName","useWithBlock","render","template","html","compile","parts","settings","argumentName","match","functionBody","Function","_slotCount","floor","Error","format","gap","indent","rep","escapable","meta","toString","quote","string","lastIndex","a","c","charCodeAt","key","holder","k","v","partial","type","mind","toJSON","isFinite","String","valueOf","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Number","Boolean","stringify","replacer","space","dateFormatRegExp","standardFormatRegExp","literalRegExp","commaRegExp","EMPTY","POINT","SHARP","ZERO","EN","objectToString","findCulture","culture","numberFormat","getCulture","current","pattern","decimals","groupSize","percent","symbol","currency","abbr","calendars","standard","days","names","namesAbbr","namesShort","months","AM","PM","patterns","d","D","F","g","G","m","M","s","t","T","u","y","Y","firstDay","twoDigitYearMax","cultureName","calendar","groupInteger","start","integer","integerLength","newGroupSize","decimalIndex","indexOf","groupSizes","shift","reverse","round","precision","negative","toFixed","min","fmt","date","minutes","result","sign","getDate","getDay","getMonth","getFullYear","getHours","getMinutes","getSeconds","getMilliseconds","getTimezoneOffset","abs","formatDate","isCurrency","isPercent","customPrecision","formatAndPrecision","fraction","ch","hasGroup","hasNegativeFormat","sharpIndex","zeroIndex","hasZero","hasSharp","currencyIndex","decimal","literals","replacement","toLocaleString","exec","toLowerCase","toExponential","quoteChar","literal","lastIndexOf","rounded","max","formatNumber","values","index","placeholderFormat","parseInt","_extractFormat","_activeElement","activeElement","documentElement","_round","includeMargin","nonBreakingSpaceRegExp","spaceRegExp","exponentRegExp","shortTimeZoneRegExp","longTimeZoneRegExp","dateRegExp","offsetRegExp","FORMATS_SEQUENCE","STANDARD_FORMATS","outOfRange","designatorPredicate","designator","mapDesignators","designators","map","lowerArray","array","lowerLocalInfo","localInfo","newLocalInfo","parseExact","strict","count","pmHour","UTC","matches","amDesignators","pmDesignators","hoursOffset","minutesOffset","lookAhead","getNumber","rg","substr","valueIdx","getIndexByName","lower","nameLength","subValue","matchLength","matchIdx","checkLiteral","year","month","day","hours","seconds","milliseconds","defaultYear","_lowerDays","_lowerMonths","parseFloat","isNaN","setHours","adjustDST","setFullYear","internalParseDate","formats","tzoffset","offset","timezone","convert","cultureFormats","formatIdx","concat","getDefaultFormats","parseDate","parseExactDate","percentSymbol","_scrollbar","scrollbar","refresh","div","createElement","cssText","innerHTML","body","appendChild","offsetWidth","scrollWidth","removeChild","isRtl","closest","table","tbodyInnerHtml","touch","docStyle","transitions","transforms","elementProto","hasHW3D","WebKitCSSMatrix","cssFlexbox","prefix","hasTransitions","lowPrefix","event","devicePixelRatio","screenWidth","screen","availWidth","innerWidth","screenHeight","availHeight","innerHeight","e$1","detectOS","ua","minorVersion","os","notAndroidPhone","agentRxs","wp","fire","android","iphone","ipad","meego","webos","blackberry","playbook","windows","tizen","sailfish","ffos","osRxs","ios","flat","formFactorRxs","tablet","browserRxs","omini","omobile","firefox","mobilesafari","ie","chrome","webkit","navigator","device","browser","majorVersion","flatVersion","cordova","PhoneGap","appMode","standalone","location","protocol","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","addEventListener","input","placeholder","propertyChangeEvent","types","setAttribute","cssFloat","stableSort","sorted","field","sort","b","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","selector","nodeList","querySelectorAll","parentNode","matchMedia","pushState","history","hashChange","customElements","mobileChrome","crios","msPointers","MSPointerEvent","pointers","PointerEvent","kineticScrollNeeded","effects","prepareAnimationOptions","duration","complete","teardown","hide","completeCallback","animate","instance","queue","promise","enabled","Element","dequeue","disable","promiseShim","enable","animatedPromise","kendoStop","clearQueue","gotoEnd","stop","kendoAnimate","kendoAddClass","classes","toggleClass","kendoRemoveClass","kendoToggleClass","toggle","ampRegExp","ltRegExp","quoteRegExp","aposRegExp","gtRegExp","eventTarget","touches","originalEvent","changedTouches","elementFromPoint","clientX","clientY","callback","on","mousedown","mouseup","mousemove","mousecancel","click","resize","localUrlRe","widgets","_widgetRegisteredCallbacks","ui","fx","mobile","dataviz","drawing","spreadsheet","messages","keys","INSERT","DELETE","BACKSPACE","TAB","ENTER","ESC","LEFT","UP","RIGHT","DOWN","END","HOME","SPACEBAR","PAGEUP","PAGEDOWN","F2","F10","F12","NUMPAD_PLUS","NUMPAD_MINUS","NUMPAD_DOT","ns","getShadows","shadow","radius","blur","left","right","bottom","wrap","percentage","windowOuterWidth","removeClass","hasClass","percentWidth","percentHeight","forceWidth","isScrollable","dataset","className","overflow","scrollLeft","el","mozila","browserVersion","obj","toHyphens","getOffset","positioned","pageYOffset","pageXOffset","parseEffects","add","directions","down","up","in","out","htmlEncode","unescape","decodeURIComponent","error","_","m1","m2","fromCharCode","isLocalUrl","url","expr","expression","safe","members","wrapExpression","getter","setter","accessor","get","set","guid","random","id","chars","roleSelector","role","directiveSelector","directives","selectors","triggeredByInput","tagName","onWidgetRegistered","len","logToConsole","message","console","suppressLog","log","Widget","KendoLicensing","validatePackage","angular","props","dataSource","componentTypes","componentType","defaults","_hasBindingTarget","kendoBindingTarget","_tabindex","TABINDEX","tabindex","removeAttr","setOptions","_clearCssClasses","_setEvents","_applyCssClasses","force","getSize","currentSize","_size","_resize","dimensions","setSize","destroy","removeData","_destroy","_muteAngularRebind","_muteRebind","prop","validFill","widgetName","protoOptions","__proto__","cssProperties","propertyDictionary","_altname","getValidClass","widget","propName","fillMode","fill","_ariaLabel","labelId","inputElm","inputId","labelElm","ariaLabel","ariaLabelledBy","_generateLabelId","newOptions","currentOptions","themeColor","label","DataBoundWidget","dataItems","flatView","_angularItems","cmd","elements","items","dataItem","domElement","offsetHeight","notify","templateRegExp","jsonRegExp","jsonFormatRegExp","dashRegExp","parseOption","option","getAttribute","parseOptions","containmentComparer","contains","resizableWidget","inArray","initWidget","roles","fullPath","widgetKeyRegExp","nodeType","widgetKey","isEmptyObject","rolesFromNamespaces","namespaces","find","addBack","filter","widgetsArray","makeArray","widgetInstance","progress","container","leftRight","webkitCorrection","containerScrollLeft","mask","scrollTop","opacity","loading","prependTo","remove","plugin","register","widgetEntry","args","method","ContainerNullObject","nullObject","MobileWidget","autoApplyNS","kendoDestroy","view","viewElement","viewHasNativeScrolling","useNativeScrolling","eq","focusable","isTabIndexNotNaN","nodeName","disabled","href","pseudos","visible","parents","appLevelNativeScrolling","application","themes","views","touchScroller","useNative","Scroller","kendoMobileScroller","suites","elementData","editorToolbar","onResize","setTimeout","unbindResize","off","attrValue","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","kendoFocusable","MOUSE_EVENTS","MouseEventNormalizer","setupMouseMute","mouseTrap","bustClick","captureMouse","stopPropagation","muteMouse","clearTimeout","mouseTrapTimeoutID","unMuteMouse","eventMap","move","cancel","MSPointerEnter","MSPointerLeave","orig","fix","special","delegateType","bindType","handle","ret","related","relatedTarget","handleObj","origType","getEventMap","eventRegEx","applyEventMap","keyDownHandler","kendoKeydown","preventKendoKeydown","kendoJQuery","context","rootjQuery","pop","search","touchstart","touchend","keyDownCallBack","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","Sun","Mon","Tue","Wed","Thu","Fri","Sat","ruleToDate","rule","targetDay","ourDay","time","cache","getUTCDay","setUTCDate","findRule","utcTime","rules","zone","grep","from","to","zoneAndRule","zones","zoneRules","until","findZone","info","fromOffset","toOffset","diff","tempToOffset","fromLocalOffset","toLocalOffset","toLocalDate","MS_PER_MINUTE","MS_PER_DAY","setDayOfWeek","dir","setDate","dayOfWeek","firstDayOfMonth","calcWeekInYear","weekStartDay","firstWeekInYear","newDate","addDays","moveDateToWeekStart","diffInMS","toInvariantTime","setTime","ignoreDST","difference","today","staticDate","addYear","currentDate","isInDateRange","msValue","msMin","msMax","isInTimeRange","isToday","nextDay","previousDay","toUtcTime","MS_PER_HOUR","lastDayOfMonth","last","timeOffset","weekInYear","prevWeekDate","nextWeekDate","weekNumber","firstDayOfYear","lastDayOfYear","nextYear","previousYear","stripWhitespace","createNodeIterator","iterator","NodeFilter","SHOW_TEXT","node","FILTER_ACCEPT","FILTER_REJECT","nextNode","referenceNode","textContent","trim","childNodes","child","nodeValue","animationFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","animationQueue","queueAnimation","runNextAnimation","parseQueryStringParams","params","paramParts","elementUnderCursor","x","client","wheelDeltaY","jQueryEvent","delta","deltaY","wheelDelta","detail","axis","VERTICAL_AXIS","throttle","delay","timeout","lastExecTime","throttled","elapsed","caret","rangeElement","isPosition","selectionStart","focus","setSelectionRange","selectionEnd","selection","createTextRange","collapse","moveStart","moveEnd","select","rangeDuplicated","duplicate","moveToBookmark","createRange","getBookmark","setEndPoint","text","compileMobileDirective","scope","injector","invoke","$compile","$$phase","$digest","antiForgeryTokens","tokens","csrf_token","csrf_param","cycleForm","form","firstElement","lastElement","keyCode","shiftKey","focusElement","scrollTopPositions","scrollableParents","parentsUntil","setActive","focusNextElement","focussable","getWidgetFocusableElement","nextFocusable","addAttribute","attribute","removeAttribute","toggleAttribute","matchesMedia","mediaQuery","media","_bootstrapToMedia","bootstrapMedia","xs","sm","md","lg","xl","fileGroupMap","audio","video","image","txt","presentation","programming","pdf","config","zip","getFileGroup","extension","withPrefix","fileTypeMap","groups","getFileSizeMessage","pow","selectorFromClasses","themeColorValues","fillValues","shapeValues","sizeValues","roundedValues","positionModeValues","resizeValues","overflowValues","defaultValues","registerCssClass","shorthand","registerCssClasses","arr","fillModeValues","registerValues","j","newValues","currentValue","dict","widgetValues","validValue","widgetProperties","registerPrefix","propertyToCssClassMap","getValidCssClass","whenAll","resolveValues","remaining","deferred","Deferred","failed","rejectContexts","rejectValues","resolveContexts","updateFunc","contexts","notifyWith","done","fail","resolveWith","postToProxy","dataURI","fileName","proxyURL","proxyTarget","action","contentType","base64","appendTo","submit","fileSaver","downloadAttribute","saveAsBlob","blob","atob","Uint8Array","Blob","buffer","msSaveBlob","saveAsDataURI","URL","createObjectURL","download","createEvent","initMouseEvent","dispatchEvent","revokeObjectURL","saveAs","save","forceProxy","proxyModelSetters","observable","forEach","defineProperty","dirty","getSeriesColors","series","colors","item","isElement","HTMLDocument","setDefaults","path","curr","class2type","_i","setScriptKey","scaleProperties","scale","scalex","scaley","scale3d","translateProperties","translate","translatex","translatey","translate3d","hasZoom","zoom","matrix3dRegExp","cssParamsRegExp","translateXRegExp","oldEffectsRegExp","singleEffectRegExp","unitRegExp","transformProps","transform2d","transform2units","rotate","skew","cssPrefix","PX","AUTO","WIDTH","HEIGHT","HIDDEN","ORIGIN","ABORT_ID","OVERFLOW","TRANSLATE","POSITION","COMPLETE_CALLBACK","TRANSITION","TRANSFORM","BACKFACE","PERSPECTIVE","DEFAULT_PERSPECTIVE","TRANSFORM_PERSPECTIVE","transition","vertical","modifier","horizontal","stopQueue","val","animationProperty","transformValue","step","elem","now","curProxy","cur","parseInteger","parseCSS","strip3DTransforms","normalizeCSS","lowerKey","isTransformed","transformation","cssValues","transform","computed","atan2","exclusive","ease","mirror","redirectedEffect","effect","$1","$2","direction","effectBody","timeoutID","oldKeys","stopTransitionCalled","stopTransition","speeds","merge","acc","propertyName","uniqueSort","unique","taskKeys","retainPosition","EffectSet","restore","run","jdx","children","childrenLength","setReverse","addRestoreProperties","prepare","effectName","reset","setup","resolve","restoreCallback","effectClass","effectSet","parsedEffects","capitalize","useTransition","show","multiple","single","isFixed","originalPosition","dX","dY","marginLeft","marginTop","Effect","_direction","_additionalEffects","_reverse","play","additional","_duration","compositeRun","_complete","shouldHide","word","createEffect","definition","opt1","opt2","opt3","theDirection","FOUR_DIRECTIONS","IN_OUT","createToggleEffect","defaultStart","defaultEnd","startValue","_startValue","endValue","_endValue","_shouldHide","startDataValue","divisor","tmp","previous","previousDivisor","slideIn","margin","origin","setLength","oldLength","realLength","TRANSFER_START_STATE","outerBox","box","innerBox","currentScale","fillScale","transformOrigin","CLIPS","ROTATIONS","clipInHalf","_container","rotation","zIndex","_clipInHalf","clip","append","face","_face","temporary","back","temp","reverseDirection","faceClone","backClone","staticPage","turningPage","transformStyle","RESTORE_OVERFLOW","_before","_after","transitionClass","_previous","_transitionClass","beforeTransition","afterTransition","_both","_element","_containerClass","containerClass","completeProxy","isAbsolute","both","Animation","_tickProxy","_tick","_started","tick","onEnd","onCancel","Transition","timePassed","startDate","moveTo","movable","initial","_easeProxy","moveAxis","easeOutExpo","easeOutBack","inner","outer","fitScale","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","parse","parseBatchResponse","XmlDataReader","model","errors","serialize","modelBase","Model","fields","idField","xpathToMember","modelInstance","evaluate","record","_parse","xmlParse","xml","parseDOM","parsedNode","attributes","attributeCount","firstChild","nextSibling","intermediateResult","tree","parseXML","raw","readers","CREATE","READ","UPDATE","DESTROY","CHANGE","SYNC","GET","ERROR","REQUESTSTART","PROGRESS","REQUESTEND","ITEMSLOADED","ITEMLOAD","crud","identity","o","objectKeys","ObservableObject","wrapAll","_loadPromises","_loadedNodes","at","serializeFunctions","json","object","isGroup","_loading","nodes","omitChangeEvent","howMany","thisArg","reduce","reduceRight","every","some","empty","Symbol","_parent","eventHandler","_notifyChange","ownKeys","ignoreObjectKeys","filteredObjectKeys","protoKeys","getPrototypeOf","isPrimitiveType","getOwnPropertyNames","_handlers","uid","shouldSerialize","f","_set","composite","paths","isSetPrevented","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","accentFoldingFiltering","toLocaleLowerCase","op","getMatchRegexp","esc","doesnotstartwith","doesnotendwith","doesnotmatch","Query","normalizeSort","descriptor","descriptors","sortFields","sorts","sortObject","filterExpr","expressions","fieldFunctions","operatorFunctions","and","or","operatorMap","equals","isequalto","equalto","ne","notequals","isnotequalto","notequalto","notequal","islessthan","lessthan","less","le","islessthanorequalto","lessthanequal","isgreaterthan","greaterthan","greater","isgreaterthanorequalto","greaterthanequal","ge","notsubstringof","normalizeOperator","normalizeFilter","compareDescriptor","f1","f2","normalizeDescriptor","fieldComparer","normalizeGroup","skipItemSorting","aggregates","normalizeGroupWithoutCompare","groupValueComparer","calculateAggregate","accumulator","state","aggr","functionName","aggregate","functions","compareFilters","expr1","expr2","filters1","filters2","toArray","range","inPlace","orderBy","orderByDescending","comparer","compiled","predicate","group","allData","groupPaging","groupAllData","hasSubgroups","itemCount","subgroupCount","groupBy","_sortForGrouping","groupValue","_sortGroups","sum","isNumber","average","isDate","process","groupDescriptorsWithoutSort","customGroupSort","groupDescriptors","anyGroupDescriptorHasCompare","query","groupDescriptorsWithoutCompare","normalizedSort","filterCallback","flatGroups","groupDescriptor","virtual","LocalTransport","RemoteTransport","Cache","parameters","operation","_store","clear","serializeRecords","getters","originalFieldNames","fieldNames","setters","convertRecords","convertGroup","wrapDataAccess","originalFunction","converter","wrapDataAccessBase","store","inmemory","DataReader","schema","dataFunction","_dataAccessFunction","groupsFunction","serializeFunction","serializeGetters","fromName","_wrapDataAccessBase","fillLastGroup","originalGroup","newGroup","currOriginal","currentNew","mergeGroups","dest","indexFunction","groupsLength","indexFn","groupIndex","itemIndex","flattenGroups","wrapGroupItems","eachGroupItems","func","replaceInRanges","ranges","replaceInRange","replaceWithObservable","serverGrouping","viewIndex","indexOfPristineModel","indexOfModel","fieldNameFromModel","convertFilterDescriptorsField","convertDescriptorsField","_map","_prefetch","_data","_pristineData","_ranges","_view","_pristineTotal","_destroyed","_pageSize","_page","_sort","_sortFields","_filter","_group","_aggregate","_total","_groupPaging","_groupsState","_shouldDetachObservableParents","Transport","pushCreate","_pushCreate","pushUpdate","_pushUpdate","pushDestroy","_pushDestroy","offlineStorage","_storage","getItem","localStorage","setItem","reader","_detachObservableParents","_observe","_online","serverSorting","serverPaging","serverFiltering","serverAggregates","inPlaceSort","online","sync","offlineData","_isGrouped","_isServerGrouped","_isServerGroupPaged","_isGroupPaged","_push","_readData","_flatData","useRanges","getByUid","_getByUid","_storeData","_addRange","_process","_observeView","insert","_createNewModel","_wrapInEmptyGroup","_insertModelInRange","pushInsert","rangeSpan","_getCurrentRangeSpan","pushed","autoSync","pristine","pristineData","_updatePristineForModel","_removeItems","removePristine","shouldRemovePristine","found","_eachItem","_removePristineForModel","pushMove","_moveItems","moved","hasGroups","_pushInDestroyed","removeModel","_removeModelFromRanges","promises","_sendSubmit","_send","when","then","_accept","_syncEnd","_change","cancelChanges","_cancelModel","_changesCanceled","_markOfflineUpdatesAsDirty","__state__","hasChanges","serverGroup","_handleCustomErrors","_executeOnPristineForModel","_eachPristineItem","_pristineForModel","_modelCanceled","_submit","reject","_promise","converted","_params","_queueRequest","isPrevented","_dequeueRequest","_readAggregates","replaceSubset","_serverGroupsTotal","_aggregateResult","itemIds","_skip","endless","_changeHandler","updatePristine","timestamp","_timeStamp","outerStart","outerEnd","_sortRanges","_groupsFlat","_appendToGroupsFlat","_updateOuterRangesLength","_getGroupByUid","xhr","errorThrown","_requestInProgress","_pending","_shouldWrap","_updateTotalForAction","_calculateAggregates","_take","currentRangeStart","_clearEmptyGroups","_queryProcess","dataToAggregate","_setView","_setFilterTotal","_mergeState","_currentRangeStart","moreItemsCount","_hasExpandedSubGroups","_findGroupedRange","itemsLength","groupCount","itemsToSkip","taken","_fetchGroupItems","_fetchingGroupItems","skipped","includeParents","excludeHeader","currentItems","_expandedSubGroupItemsCount","includeCurrentItems","subGroup","endSpecified","groupItemsSkip","firstItem","lastItem","expandedSubGroupItemsCount","groupItemCount","getGroupItems","notFetched","subgroups","_composeItemsFilter","findSubgroups","_timeout","_groupItemsSuccessHandler","totalField","totalCount","_updateRangePristineData","countAdded","_currentRequestTimeStamp","_skipRequestsInProgress","indexOfCurrentGroup","currentGroup","dataLength","indexes","rangesLength","_containsSubGroup","_cloneGroup","subgroup","currentSubGroup","filterTotal","setDefaultValue","fetch","_query","next","totalPages","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","callbacks","_crud","server","binders","VALUE","SOURCE","EVENTS","CHECKED","deleteExpando","Binding","dependencies","_access","_parents","dependency","currentSource","EventBinding","TemplateBinding","Binder","bindings","binding","TypedBinder","parsedValue","_parseValue","dataSourceBinding","bindingName","_dataBinding","dataBinding","_dataBound","dataBound","_itemChange","itemChange","bindElement","_ns","removedItems","unbindElementTree","all","addedItems","hds","addedDataItems","multiselect","Select","MultiSelect","DropDownTree","treeview","retrievePrimitiveValues","dataValueField","readonly","dataFormat","invisible","valueUpdate","_initChange","autoBind","valueField","cloneNode","reference","insertBefore","unbindElementChildren","checked","selectedIndex","selected","valueIndex","valuePrimitive","sourceValue","optionIndex","optionValue","check","_range","floatingLabel","_valueIsObservableObject","_valueIsObservableArray","_source","valueLength","sourceItem","dataTextField","isObservableObject","cascadeFrom","listView","bound","_preselect","dropdowntree","oldValues","selectedNode","nonPrimitiveValues","_isMultipleSelection","_getAllChecked","removeIndex","newValue","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","urlRegExp","INPUTSELECTOR","CHECKBOXSELECTOR","NUMBERINPUTSELECTOR","BLUR","NAME","FORM","NOVALIDATE","VALIDATE","VALIDATE_INPUT","patternMatcher","matcher","hasAttribute","parseHtml","parseHTML","searchForMessageContainer","containers","isLabelFor","validator","allowSubmit","validateOnInit","Validator","resolved","resolvers","ruleResolvers","resolveRules","validateAttributeSelector","_errorTemplate","errorTemplate","_summaryTemplate","validationSummary","_inputSelector","_checkboxSelector","_errors","_attachEvents","_isValidated","_validateOnInit","validate","required","email","dateCompare","captcha","noNameCheckbox","namedCheckbox","checkbox","radio","raise","isValidated","isValid","getCaptchaId","_validating","_checkElement","warn","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","bodyRegExp","SHOW_START","SAME_VIEW_REQUESTED","VIEW_SHOW","VIEW_TYPE_DETERMINED","AFTER","classNames","View","renderOnInit","_createElement","wrapInSections","_renderSections","_wrap","_evalTemplate","evalTemplate","_useWithBlock","_fragments","detachOnHide","detachOnDestroy","notInitialized","_eachFragment","ViewClone","triggerBeforeShow","triggerBeforeHide","showStart","showEnd","hideEnd","detach","purge","fragments","methodName","getElementById","contents","_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","$angular","_findViewElementById","_createSpaView","_createMobileView","defaultTransition","loader","getLayout","getLayoutProxy","modelScope","viewOptions","OS","invalidZeroEvents","DEFAULT_MIN_HOLD","DEFAULT_THRESHOLD","PRESS","HOLD","SELECT","START","MOVE","CANCEL","TAP","DOUBLETAP","RELEASE","GESTURECHANGE","GESTUREEND","GESTURETAP","THRESHOLD","api","mouse","pointer","ENABLE_GLOBAL_SURFACE","touchDelta","touch1","touch2","x1","y1","x2","y2","dx","dy","center","distance","sqrt","getTouches","currentTarget","identifier","pointerId","TouchAxis","_updateLocationData","startLocation","velocity","timeStamp","timeDelta","initialDelta","Touch","userEvents","touchInfo","useClickAsTap","threshold","initialTouch","pressEvent","_clicks","supportDoubleTap","_moved","_finished","press","_holdTimeout","_hold","minHold","_trigger","_tap","_clickTimeout","preventMove","_shouldNotMove","_withinIgnoreThreshold","UserEvents","dispose","_start","endTime","activeTouches","isMoved","startTime","xDelta","yDelta","withEachUpEvent","downEvents","_maxTouches","multiTouch","allowSelection","captureUpIfMoved","fastTap","eventNS","surface","global","ownerDocument","pressed","defaultAction","touchAction","preventDragEvent","surfaceElement","preventIfMovingProxy","preventIfMoving","_isMoved","removeEventListener","_disposeAll","capture","_isMultiTouch","_apiCall","_maxTouchesReached","_select","which","_move","_eachTouch","_end","_click","pageX","pageY","matchingTouch","defaultThreshold","lastDropTarget","$window","draggables","dropTargets","dropAreas","KEYUP","DRAGSTART","DRAG","DRAGEND","DRAGCANCEL","HINTDESTROYED","DRAGENTER","DRAGLEAVE","DROP","numericCssPropery","within","containerBoundaries","minX","minY","TapCapture","_press","_release","attachEvent","captureNext","cancelCapture","PaneDimension","forcedEnabled","measure","scrollSize","makeVirtual","_virtualMin","_virtualMax","virtualSize","outOfBounds","forceEnabled","getTotal","rescale","scaledTotal","minScale","centerOffset","PaneDimensions","forcedMinScale","maxScale","newScale","centerCoordinates","PaneAxis","dimension","dragMove","resistance","translateAxis","Pane","elastic","gesturestart","gesture","gesturechange","coordinates","previousGesture","previousCenter","scaleDelta","offsetX","offsetY","scaleWith","TRANSFORM_STYLE","Movable","webkitTransformOrigin","_saveCoordinates","by","scaleTo","newCoordinates","destroyDroppable","groupName","droppables","DropTarget","draggable","dropTarget","_over","_out","_drop","dropped","destroyGroup","_cache","DropTargetArea","Draggable","_activated","hold","_drag","_cancel","_afterEndHandler","_afterEnd","_captureEscape","cursorOffset","holdToDrag","autoScroll","cancelHold","_updateHint","boundaries","hintOffset","hint","_shouldIgnoreTarget","ignoreSelector","currentTargetOffset","scopeTarget","scopeFrom","cursorElement","_elementUnderCursor","_cursorElement","_scrollableParent","findScrollableParent","_lastEvent","_processMovement","autoScrollVelocity","scrollableViewPort","_scrollCompenstation","_scrollVelocity","_scrollInterval","_autoScroll","_withDropTarget","targetElement","compensation","yIsScrollable","xIsScrollable","isRootNode","scrollableRoot","yInBounds","xInBounds","initialTarget","targets","areas","theTarget","theFilter","targetLen","areaLen","checkTarget","mouseX","mouseY","rect","AUTO_SCROLL_AREA","utils","OPEN","CLOSE","DEACTIVATE","ACTIVATE","CENTER","TOP","BOTTOM","ABSOLUTE","BODY","LOCATION","VISIBLE","EFFECTS","ACTIVE","ACTIVEBORDER","ACTIVEBORDERREGEXP","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","_hideDirClass","_closing","_toggleResize","fixed","listbox","flipped","_position","_openAnimation","_showDirClass","_location","dirClass","skipEffects","openEffects","closeEffects","popup","ev","_resizeTimeout","_scrollableParents","_fit","viewPortSize","output","_flip","anchorSize","boxSize","siblingContainer","parentZIndex","viewportOffset","viewportWidth","viewportHeight","isWindow","origins","positions","siblings","_align","pos","offsetParent","offsets","flipPos","elementHeight","wrapperHeight","appendToOffset","verticalOrigin","horizontalOrigin","verticalPosition","horizontalPosition","anchorOffset","anchorWidth","anchorHeight","tabKeyTrapNS","TabKeyTrap","trap","_keepInTrap","removeTrap","shouldTrap","_focusableElements","sortedElements","_sortFocusableElements","_nextFocusable","_focus","tabIndex","attrName","_haveSelectionRange","contentWindow","elementType","eventProxy","_triggerTouch","gestureEventProxy","tap","gestureend","enableSwipe","_swipestart","_swipemove","_dragstart","minXDelta","maxYDelta","maxDuration","doubleTapTimeout","lastTap","RELEASECLASS","REFRESHCLASS","ZoomSnapBack","tapCapture","DragInertia","freeze","_moveTo","paneAxis","_snapBack","velocityMultiplier","friction","snapBack","AnimatedScroller","_updateCoordinates","setCoordinates","setCallback","ScrollBar","controlsId","elementSize","scrollMovable","alwaysVisible","paneSize","sizeRatio","_ariaValue","visibility","_native","prepend","scrollElement","fixedContainer","avoidScrolling","velocityX","velocityY","horizontalSwipe","verticalSwipe","pane","zoomSnapBack","animatedScroller","scrollTo","mousewheelScrolling","_wheelScroll","pulled","_initAxis","_wheelEnd","_wheel","_wheelY","pullToRefresh","_initPullToRefresh","ctrlKey","_wheelTimeout","pullOffset","visibleScrollHints","pullTemplate","releaseTemplate","refreshTemplate","contentResized","_scale","zoomOut","animatedScrollTo","pullHandled","refreshHint","hintContainer","yinertia","xinertia","_paneChange","_dragEnd","scrollBar","elementId","BEFORE_SHOW","AFTER_SHOW","BEFORE_HIDE","initPopOvers","popovers","preventScrollIfNotInput","_overlay","_layout","_scroller","_model","layout","stretch","scroller","initWidgets","overlay","$destroy","inited","_invokeNgController","_padIfNativeScrolling","isAndroid","skin","isAndroidForced","hasPlatformIndependentSkin","topContainer","bottomContainer","paddingTop","paddingBottom","scrollerContent","idAttrValue","controller","_callController","$apply","$scope","platform","previousView","currentView","LOAD_START","LOAD_COMPLETE","errorMessage","rootNeeded","_getLayout","_setupLayouts","showClosure","serverNavigation","_loadView","modalViews","_xhr","abort","always","_xhrComplete","CAPTURE_EVENTS","Loader","captureEvents","_attachCapture","changeMessage","transitionDone","EXTERNAL","HREF","NAVIGATE","SKIP_TRANSITION_ON_BACK_BUTTON","WIDGET_RELS","collapsible","historyCallback","viewEngine","_historyNavigate","_historyReplace","closeActiveDialogs","viewShow","loadStart","loadComplete","sameViewRequested","viewTypeDetermined","_setPortraitWidth","_setupAppLinks","navigateToInitial","portraitWidth","bindToRouter","router","attrUrl","hideLoading","showLoading","changeLoadingMessage","pressedButtonSelector","buttonSelectors","_mouseup","_appLinkClick","rel","delayedTouchEnd","openFor","paneContainer","DIRECTIONS","ANIMATION","DIMENSIONS","REVERSE","popupOptions","containerPopup","activate","_activate","deactivate","arrow","elementOffset","offsetAmount","PopOver","initialOpen","Shim","app","osname","ioswp","bb","align","shim","prevented","_hide","BEFORE_OPEN","ModalView","_shim","AXIS","SWIPE_TO_OPEN","AFTER_HIDE","NULL_VIEW","Drawer","drawer","_viewShow","_attachTransition","swipeToOpen","_update","leftPositioned","swipeToOpenViews","_show","_moveViewTo","_currentViewIncludedIn","_setAsCurrent","currentOffset","canMoveLeft","canMoveRight","leftSwipe","limitedPosition","newPosition","pastHalf","velocityThreshold","SplitView","_style","panes","_paramsHistory","expandedPaneShim","_shimUserEvents","collapsePanes","expandPanes","BERRYPHONEGAP","CHROME","BROKEN_WEBVIEW_RESIZE","INITIALLY_HORIZONTAL","orientation","MOBILE_PLATFORMS","ios7","viewportTemplate","usedWithBlock","systemMeta","clipTemplate","ENABLE_CLIP","iconMeta","HIDEBAR","HISTORY_TRANSITION","BARCOMPENSATION","SCREEN","HEAD","isOrientationHorizontal","getOrientationClass","setMinimumHeight","applyViewportHeight","Application","bootstrap","_setupPlatform","_attachMeta","_setupElementClass","_attachHideBarHandlers","paneOptions","startHistory","updateDocumentTitle","_setupDocumentTitle","_startHistory","hideAddressBar","browserHistory","historyTransition","statusBarStyle","retina","setDefaultPlatform","variant","noVariantSet","osCssClass","refreshBackgroundColorProxy","wp8Background","_resizeToScreenHeight","includeStatusBar","_clearExistingMeta","icon","hideBar","_hideBar","_initialHeight","defaultTitle","COMMAND","BUTTONS","cancelTemplate","ActionSheet","ShimClass","_closeProxy","_close","_shimHideProxy","_shimHide","actionData","ANDROID3UP","CLICK","DISABLED","highlightButton","highlight","deactivateTimeoutID","createBadge","Button","useTap","clickOn","_userEvents","release","_timeoutDeactivate","badgeElement","button","iconSpan","span","iconElement","BackButton","DetailButton","DISABLE","ButtonGroup","_button","selectOn","_enable","li","buttongroup","COLLAPSED","EXPANDED","ANIMATED","EXAPND","COLLAPSE","Collapsible","_buildHeader","not","collapsed","inset","collapseIcon","expandIcon","iconPosition","expand","instant","_getContentHeight","isCollapsed","HIGHLIGHT_SELECTOR","ICON_SELECTOR","GROUP_CLASS","GROUP_TEMPLATE","SEARCH_TEMPLATE","STYLED","DATABOUND","DATABINDING","ITEM_CHANGE","whitespaceRegExp","buttonRegExp","whitespace","TEXT_NODE","addIcon","querySelector","putAt","HeaderFixer","_shouldFixHeaders","headerFixer","cacheHeaders","_cacheHeaders","_scrollHandler","_fixHeader","fixedHeaders","headerPair","currentHeader","DEFAULT_PULL_PARAMETERS","RefreshHandler","pullParameters","setDataSource","pull","_pulled","_first","VirtualList","endReached","prevItem","itemConstructor","below","totalHeight","averageItemHeight","remainingItemsCount","batchUpdate","initialOffset","lastDirection","above","nextIndex","padding","lastTop","topBorder","bottomBorder","VirtualListViewItem","setDataItem","LOAD_ICON","VirtualListViewLoadingIndicator","_loadIcon","VirtualListViewPressToLoadMore","_loadButton","loadMoreText","loadMore","kendoMobileButton","_hideShowButton","_showLoadButton","VirtualListViewItemBinder","chromeHeight","_scroll","_scrollEnd","pressToLoadMore","virtualViewSize","updateScrollerSize","updateSize","ListViewItemBinder","itemBinder","_refreshHandler","_progressHandler","_unbindDataSource","prependOnRefresh","appendOnRefresh","groupedMode","findByDataItem","_shouldShowLoading","replaceGrouped","insertAt","endlessScroll","ListViewFilter","filterable","before","autoFilter","searchInput","_oldFilter","_filterChange","clearButton","_clearFilter","_dataSourceChange","_refreshInput","appliedFilters","_search","_applyFilter","ListView","scrollTreshold","scrollThreshold","_headerFixer","_itemsCache","_templates","_itemBinder","_pullToRefreshHandler","_enhanceItems","headerTemplate","emptyDataSource","unwrap","_scrollerInstance","triggerChange","_renderItems","groupTemplate","newItem","_dim","_toggle","_highlight","clicked","plainItem","templateProxy","groupTemplateProxy","_headerTemplate","buttonElement","_styleGroups","rootItems","groupHeader","grouped","enhanced","itemAndDetailButtons","enhanceLinkItem","enhanceItem","createContainer","NavBar","leftElement","rightElement","centerElement","noTitle","showTitle","prevAll","CHANGING","REFRESH","CURRENT_PAGE_CLASS","VIRTUAL_PAGE_CLASS","CLEANUP","Pager","scrollView","_changeProxy","_refreshProxy","_refresh","pageHTML","pageCount","ScrollViewPager","DRAG_START","DRAG_END","ElasticPane","updateDimension","transitionTo","ScrollViewElasticPane","ScrollViewContent","_getPages","contentHeight","enablePager","pagerOverlay","paneMoved","swipeType","bounce","snap","nextPage","approx","minSnap","maxSnap","currentPage","updatePage","forcePageUpdate","resizeTo","pageElements","containerHeight","pager","_paged","VirtualScrollViewContent","pages","_initPages","_buffer","_pendingPageRefresh","_pendingWidgetRefresh","_resetPages","itemsPerPage","_onResize","_resetProxy","_onReset","_endReachedProxy","_onEndReached","emptyTemplate","emptyTemplateProxy","Page","setWidth","_repositionPages","_updatePagesContent","thresholdPassed","isEndReached","_cancelMove","_moveBackward","_moveForward","setPageContent","_resetMovable","theContent","VirtualPage","ScrollView","transitionEnd","_transitionEnd","dragStart","_dragStart","dragEnd","_syncWithContent","_content","mobileContainer","viewInit","bounceVelocityThreshold","prevPage","SWITCHON","SWITCHOFF","MARGINLEFT","ACTIVE_STATE","TRANSFORMSTYLE","SWITCH_MARKUP","Switch","onLabel","offLabel","background","constrain","snapPoint","_animateBackground","handleWidth","minLimit","maxLimit","_stop","ACTIVE_STATE_CLASS","TabStrip","_buildButton","switchTo","tab","tabs","_setActiveItem","switchByFullUrl","currentItem","tabstrip","$defaultCompile","OPTIONS_NOW","toDataSource","module","$injector","$parse","$timeout","$log","createDataSource","TreeList","TreeView","Scheduler","PivotGrid","PivotConfigurator","PanelBar","Menu","ContextMenu","$eval","ds","$watch","mew","ignoredAttributes","kDataSource","kOptions","kRebind","kNgModel","kNgDelay","ignoredOwnProperties","formRegExp","kendoRenderedTimeout","RENDERED","origAttr","restrict","require","$attrs","setTemplate","_cleanUp","attrs","controllers","$element","roleattr","createWidget","$emit","$setPristine","TAGNAMES","Editor","NumericTextBox","DatePicker","DateTimePicker","TimePicker","AutoComplete","ColorPicker","MaskedTextBox","Upload","MobileButton","MobileBackButton","MobileDetailButton","MobileListView","SKIP_SHORTCUTS","MANUAL_DIRECTIVES","directive","encode","pendingPatches","entry","defadvice","klass","isMobile","make","directiveName","directiveFactory","shortcut","dashed","tag","scopeField","kScopeField","createDirectives","arg","self","$angular_scope","$angular_init","withoutTimeout","itemScope","$$kendoScope","destroyScope","vars","$new","digest","$angular_makeEventHandler","kendoEvent","elems","columns","colIdx","locals","isString","selectable","_checkBoxSelection","angularDataItem","templateSettings","col","encoded","terminal","pre","defaultOptions","_instance","post","kAttr","priority","templateDirectives","WIDGET_TEMPLATE_OPTIONS","TreeMap","MobileScrollView","Grid","templates","templateName","outerHTML","delayValue","ngModel","ngForm","ctor","parsed","unresolved","unwatch","createIt","$root","unregister","$attr","originalElement","kendoWidget","assign","exposeWidget","destroyRegister","deregister","$on","destroyWidgetOnScopeDestroy","rebindAttr","oldValue","templateOptions","templateContents","replaceChild","setupRebind","kNgDisabled","isDisabled","bindToKNgDisabled","kNgReadonly","isReadonly","bindToKNgReadonly","bindToKNgModel","haveChangeOnElement","isForm","formValue","viewRender","$viewValue","$modelValue","$render","onChange","formPristine","$pristine","$setViewValue","currentVal","$isEmpty","bindToNgModel","MutationObserver","prevClassList","classList","mo","changes","suspend","chg","w","attributeName","currClassList","cls","ComboBox","resume","disconnect","observe","propagateClassToWidgetWrapper","optionsPath","optionsValue","addOption","scopeValue","widgetOptions","widgetEvents","dataName","eventKey","optionName","DateRangePicker","rangePickerEndModel","rangePickerModels","rangePickerStartModel","_startDateInput","_endDateInput","updating","valueIsCollection","RangeSlider","currentValueLength","$angular_setLogicValue","watchHandler","$watchCollection","changeHandler","$setDirty","$angular_getLogicValue","isDigesting","origMethod"],"sources":["kendo.mobile.js"],"mappings":"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","sourcesContent":["(function (factory) {\n typeof define === 'function' && define.amd ? define(['jquery'], factory) :\n factory();\n})((function () {\n var __meta__$x = {\n id: \"core\",\n name: \"Core\",\n category: \"framework\",\n description: \"The core of the Kendo framework.\"\n };\n\n var packageMetadata = {\n name: '@progress/kendo-ui',\n productName: 'Kendo UI',\n productCodes: ['KENDOUICOMPLETE', 'KENDOUI', 'KENDOUI', 'KENDOUICOMPLETE'],\n publishDate: 0,\n version: '2022.3.1109'.replace(/^\\s+|\\s+$/g, ''),\n licensingDocsUrl: 'https://docs.telerik.com/kendo-ui/intro/installation/using-license-code'\n };\n\n\n (function($, window, undefined$1) {\n var kendo = window.kendo = window.kendo || { cultures: {} },\n extend = $.extend,\n each = $.each,\n isArray = Array.isArray,\n noop = $.noop,\n math = Math,\n Template,\n JSON = window.JSON || {},\n support = {},\n percentRegExp = /%/,\n formatRegExp = /\\{(\\d+)(:[^\\}]+)?\\}/g,\n boxShadowRegExp = /(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+)?/i,\n numberRegExp = /^(\\+|-?)\\d+(\\.?)\\d*$/,\n FUNCTION = \"function\",\n STRING = \"string\",\n NUMBER = \"number\",\n OBJECT = \"object\",\n NULL = \"null\",\n BOOLEAN = \"boolean\",\n UNDEFINED = \"undefined\",\n PREFIX = \"prefix\",\n ARIA_LABELLEDBY = \"aria-labelledby\",\n ARIA_LABEL = \"aria-label\",\n LABELIDPART = \"_label\",\n getterCache = {},\n setterCache = {},\n slice = [].slice,\n cssPropertiesNames = [ \"themeColor\", \"fillMode\", \"shape\", \"size\", \"rounded\", \"positionMode\" ],\n // avoid extending the depricated properties in latest verions of jQuery\n noDepricateExtend = function() {\n var arguments$1 = arguments;\n\n var src, copyIsArray, copy, name, options, clone,\n target = arguments[ 0 ] || {},\n i = 1,\n length = arguments.length,\n deep = false;\n\n // Handle a deep copy situation\n if ( typeof target === \"boolean\" ) {\n deep = target;\n\n // skip the boolean and the target\n target = arguments[ i ] || {};\n i++;\n }\n\n // Handle case when target is a string or something (possible in deep copy)\n if ( typeof target !== \"object\" && typeof target !== \"function\") {\n target = {};\n }\n\n // extend jQuery itself if only one argument is passed\n if ( i === length ) {\n target = this;\n i--;\n }\n\n for ( ; i < length; i++ ) {\n\n // Only deal with non-null/undefined values\n if ( ( options = arguments$1[ i ] ) != null ) {\n\n // Extend the base object\n for ( name in options ) {\n // filters, concat and : properties are depricated in the jQuery 3.3.0\n // accessing these properties throw a warning when jQuery migrate is included\n if (name == \"filters\" || name == \"concat\" || name == \":\") {\n continue;\n }\n src = target[ name ];\n copy = options[ name ];\n\n // Prevent never-ending loop\n if ( target === copy ) {\n continue;\n }\n\n // Recurse if we're merging plain objects or arrays\n if ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n ( copyIsArray = Array.isArray( copy ) ) ) ) {\n\n if ( copyIsArray ) {\n copyIsArray = false;\n clone = src && Array.isArray( src ) ? src : [];\n\n } else {\n clone = src && jQuery.isPlainObject( src ) ? src : {};\n }\n\n // Never move original objects, clone them\n target[ name ] = noDepricateExtend( deep, clone, copy );\n\n // Don't bring in undefined values\n } else if ( copy !== undefined$1 ) {\n target[ name ] = copy;\n }\n }\n }\n }\n\n // Return the modified object\n return target;\n };\n\n kendo.version = \"2022.3.1109\".replace(/^\\s+|\\s+$/g, '');\n\n function Class() {}\n\n Class.extend = function(proto) {\n var base = function() {},\n member,\n that = this,\n subclass = proto && proto.init ? proto.init : function() {\n that.apply(this, arguments);\n },\n fn;\n\n base.prototype = that.prototype;\n fn = subclass.fn = subclass.prototype = new base();\n\n for (member in proto) {\n if (proto[member] != null && proto[member].constructor === Object) {\n // Merge object members\n fn[member] = extend(true, {}, base.prototype[member], proto[member]);\n } else {\n fn[member] = proto[member];\n }\n }\n\n fn.constructor = subclass;\n subclass.extend = that.extend;\n\n return subclass;\n };\n\n Class.prototype._initOptions = function(options) {\n this.options = deepExtend({}, this.options, options);\n };\n\n var isFunction = kendo.isFunction = function(fn) {\n return typeof fn === \"function\";\n };\n\n var preventDefault = function() {\n this._defaultPrevented = true;\n };\n\n var isDefaultPrevented = function() {\n return this._defaultPrevented === true;\n };\n\n var Observable = Class.extend({\n init: function() {\n this._events = {};\n },\n\n bind: function(eventName, handlers, one) {\n var that = this,\n idx,\n eventNames = typeof eventName === STRING ? [eventName] : eventName,\n length,\n original,\n handler,\n handlersIsFunction = typeof handlers === FUNCTION,\n events;\n\n if (handlers === undefined$1) {\n for (idx in eventName) {\n that.bind(idx, eventName[idx]);\n }\n return that;\n }\n\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n eventName = eventNames[idx];\n\n handler = handlersIsFunction ? handlers : handlers[eventName];\n\n if (handler) {\n if (one) {\n original = handler;\n handler = function() {\n that.unbind(eventName, handler);\n original.apply(that, arguments);\n };\n handler.original = original;\n }\n events = that._events[eventName] = that._events[eventName] || [];\n events.push(handler);\n }\n }\n\n return that;\n },\n\n one: function(eventNames, handlers) {\n return this.bind(eventNames, handlers, true);\n },\n\n first: function(eventName, handlers) {\n var that = this,\n idx,\n eventNames = typeof eventName === STRING ? [eventName] : eventName,\n length,\n handler,\n handlersIsFunction = typeof handlers === FUNCTION,\n events;\n\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n eventName = eventNames[idx];\n\n handler = handlersIsFunction ? handlers : handlers[eventName];\n\n if (handler) {\n events = that._events[eventName] = that._events[eventName] || [];\n events.unshift(handler);\n }\n }\n\n return that;\n },\n\n trigger: function(eventName, e) {\n var that = this,\n events = that._events[eventName],\n idx,\n length;\n\n if (events) {\n e = e || {};\n\n e.sender = that;\n\n e._defaultPrevented = false;\n\n e.preventDefault = preventDefault;\n\n e.isDefaultPrevented = isDefaultPrevented;\n\n events = events.slice();\n\n for (idx = 0, length = events.length; idx < length; idx++) {\n events[idx].call(that, e);\n }\n\n return e._defaultPrevented === true;\n }\n\n return false;\n },\n\n unbind: function(eventName, handler) {\n var that = this,\n events = that._events[eventName],\n idx;\n\n if (eventName === undefined$1) {\n that._events = {};\n } else if (events) {\n if (handler) {\n for (idx = events.length - 1; idx >= 0; idx--) {\n if (events[idx] === handler || events[idx].original === handler) {\n events.splice(idx, 1);\n }\n }\n } else {\n that._events[eventName] = [];\n }\n }\n\n return that;\n }\n });\n\n\n function compilePart(part, stringPart) {\n if (stringPart) {\n return \"'\" +\n part.split(\"'\").join(\"\\\\'\")\n .split('\\\\\"').join('\\\\\\\\\\\\\"')\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/\\t/g, \"\\\\t\") + \"'\";\n } else {\n var first = part.charAt(0),\n rest = part.substring(1);\n\n if (first === \"=\") {\n return \"+(\" + rest + \")+\";\n } else if (first === \":\") {\n return \"+$kendoHtmlEncode(\" + rest + \")+\";\n } else {\n return \";\" + part + \";$kendoOutput+=\";\n }\n }\n }\n\n var argumentNameRegExp = /^\\w+/,\n encodeRegExp = /\\$\\{([^}]*)\\}/g,\n escapedCurlyRegExp = /\\\\\\}/g,\n curlyRegExp = /__CURLY__/g,\n escapedSharpRegExp = /\\\\#/g,\n sharpRegExp = /__SHARP__/g,\n zeros = [\"\", \"0\", \"00\", \"000\", \"0000\"];\n\n Template = {\n paramName: \"data\", // name of the parameter of the generated template\n useWithBlock: true, // whether to wrap the template in a with() block\n render: function(template, data) {\n var idx,\n length,\n html = \"\";\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n html += template(data[idx]);\n }\n\n return html;\n },\n compile: function(template, options) {\n var settings = extend({}, this, options),\n paramName = settings.paramName,\n argumentName = paramName.match(argumentNameRegExp)[0],\n useWithBlock = settings.useWithBlock,\n functionBody = \"var $kendoOutput, $kendoHtmlEncode = kendo.htmlEncode;\",\n fn,\n parts,\n idx;\n\n if (isFunction(template)) {\n return template;\n }\n\n functionBody += useWithBlock ? \"with(\" + paramName + \"){\" : \"\";\n\n functionBody += \"$kendoOutput=\";\n\n parts = template\n .replace(escapedCurlyRegExp, \"__CURLY__\")\n .replace(encodeRegExp, \"#=$kendoHtmlEncode($1)#\")\n .replace(curlyRegExp, \"}\")\n .replace(escapedSharpRegExp, \"__SHARP__\")\n .split(\"#\");\n\n for (idx = 0; idx < parts.length; idx ++) {\n functionBody += compilePart(parts[idx], idx % 2 === 0);\n }\n\n functionBody += useWithBlock ? \";}\" : \";\";\n\n functionBody += \"return $kendoOutput;\";\n\n functionBody = functionBody.replace(sharpRegExp, \"#\");\n\n try {\n fn = new Function(argumentName, functionBody);\n fn._slotCount = Math.floor(parts.length / 2);\n return fn;\n } catch (e) {\n throw new Error(kendo.format(\"Invalid template:'{0}' Generated code:'{1}'\", template, functionBody));\n }\n }\n };\n\n function pad(number, digits, end) {\n number = number + \"\";\n digits = digits || 2;\n end = digits - number.length;\n\n if (end) {\n return zeros[digits].substring(0, end) + number;\n }\n\n return number;\n }\n\n //JSON stringify\n (function() {\n var escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n gap,\n indent,\n meta = {\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": '\\\\\"',\n \"\\\\\": \"\\\\\\\\\"\n },\n rep,\n toString = {}.toString;\n\n\n if (typeof Date.prototype.toJSON !== FUNCTION) {\n\n Date.prototype.toJSON = function() {\n var that = this;\n\n return isFinite(that.valueOf()) ?\n pad(that.getUTCFullYear(), 4) + \"-\" +\n pad(that.getUTCMonth() + 1) + \"-\" +\n pad(that.getUTCDate()) + \"T\" +\n pad(that.getUTCHours()) + \":\" +\n pad(that.getUTCMinutes()) + \":\" +\n pad(that.getUTCSeconds()) + \"Z\" : null;\n };\n\n String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function() {\n return this.valueOf();\n };\n }\n\n function quote(string) {\n escapable.lastIndex = 0;\n return escapable.test(string) ? \"\\\"\" + string.replace(escapable, function(a) {\n var c = meta[a];\n return typeof c === STRING ? c :\n \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\" : \"\\\"\" + string + \"\\\"\";\n }\n\n function str(key, holder) {\n var i,\n k,\n v,\n length,\n mind = gap,\n partial,\n value = holder[key],\n type;\n\n if (value && typeof value === OBJECT && typeof value.toJSON === FUNCTION) {\n value = value.toJSON(key);\n }\n\n if (typeof rep === FUNCTION) {\n value = rep.call(holder, key, value);\n }\n\n type = typeof value;\n if (type === STRING) {\n return quote(value);\n } else if (type === NUMBER) {\n return isFinite(value) ? String(value) : NULL;\n } else if (type === BOOLEAN || type === NULL) {\n return String(value);\n } else if (type === OBJECT) {\n if (!value) {\n return NULL;\n }\n gap += indent;\n partial = [];\n if (toString.apply(value) === \"[object Array]\") {\n length = value.length;\n for (i = 0; i < length; i++) {\n partial[i] = str(i, value) || NULL;\n }\n v = partial.length === 0 ? \"[]\" : gap ?\n \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\" :\n \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n if (rep && typeof rep === OBJECT) {\n length = rep.length;\n for (i = 0; i < length; i++) {\n if (typeof rep[i] === STRING) {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? \": \" : \":\") + v);\n }\n }\n }\n } else {\n for (k in value) {\n if (Object.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? \": \" : \":\") + v);\n }\n }\n }\n }\n\n v = partial.length === 0 ? \"{}\" : gap ?\n \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\" :\n \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n if (typeof JSON.stringify !== FUNCTION) {\n JSON.stringify = function(value, replacer, space) {\n var i;\n gap = \"\";\n indent = \"\";\n\n if (typeof space === NUMBER) {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n } else if (typeof space === STRING) {\n indent = space;\n }\n\n rep = replacer;\n if (replacer && typeof replacer !== FUNCTION && (typeof replacer !== OBJECT || typeof replacer.length !== NUMBER)) {\n throw new Error(\"JSON.stringify\");\n }\n\n return str(\"\", { \"\": value });\n };\n }\n })();\n\n // Date and Number formatting\n (function() {\n var dateFormatRegExp = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|HH|H|hh|h|mm|m|fff|ff|f|tt|ss|s|zzz|zz|z|\"[^\"]*\"|'[^']*'/g,\n standardFormatRegExp = /^(n|c|p|e)(\\d*)$/i,\n literalRegExp = /(\\\\.)|(['][^']*[']?)|([\"][^\"]*[\"]?)/g,\n commaRegExp = /\\,/g,\n EMPTY = \"\",\n POINT = \".\",\n COMMA = \",\",\n SHARP = \"#\",\n ZERO = \"0\",\n PLACEHOLDER = \"??\",\n EN = \"en-US\",\n objectToString = {}.toString;\n\n //cultures\n kendo.cultures[\"en-US\"] = {\n name: EN,\n numberFormat: {\n pattern: [\"-n\"],\n decimals: 2,\n \",\": \",\",\n \".\": \".\",\n groupSize: [3],\n percent: {\n pattern: [\"-n %\", \"n %\"],\n decimals: 2,\n \",\": \",\",\n \".\": \".\",\n groupSize: [3],\n symbol: \"%\"\n },\n currency: {\n name: \"US Dollar\",\n abbr: \"USD\",\n pattern: [\"($n)\", \"$n\"],\n decimals: 2,\n \",\": \",\",\n \".\": \".\",\n groupSize: [3],\n symbol: \"$\"\n }\n },\n calendars: {\n standard: {\n days: {\n names: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n namesAbbr: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n namesShort: [ \"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\" ]\n },\n months: {\n names: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n namesAbbr: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n },\n AM: [ \"AM\", \"am\", \"AM\" ],\n PM: [ \"PM\", \"pm\", \"PM\" ],\n patterns: {\n d: \"M/d/yyyy\",\n D: \"dddd, MMMM dd, yyyy\",\n F: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n g: \"M/d/yyyy h:mm tt\",\n G: \"M/d/yyyy h:mm:ss tt\",\n m: \"MMMM dd\",\n M: \"MMMM dd\",\n s: \"yyyy'-'MM'-'ddTHH':'mm':'ss\",\n t: \"h:mm tt\",\n T: \"h:mm:ss tt\",\n u: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\n y: \"MMMM, yyyy\",\n Y: \"MMMM, yyyy\"\n },\n \"/\": \"/\",\n \":\": \":\",\n firstDay: 0,\n twoDigitYearMax: 2029\n }\n }\n };\n\n\n function findCulture(culture) {\n if (culture) {\n if (culture.numberFormat) {\n return culture;\n }\n\n if (typeof culture === STRING) {\n var cultures = kendo.cultures;\n return cultures[culture] || cultures[culture.split(\"-\")[0]] || null;\n }\n\n return null;\n }\n\n return null;\n }\n\n function getCulture(culture) {\n if (culture) {\n culture = findCulture(culture);\n }\n\n return culture || kendo.cultures.current;\n }\n\n kendo.culture = function(cultureName) {\n var cultures = kendo.cultures, culture;\n\n if (cultureName !== undefined$1) {\n culture = findCulture(cultureName) || cultures[EN];\n culture.calendar = culture.calendars.standard;\n cultures.current = culture;\n } else {\n return cultures.current;\n }\n };\n\n kendo.findCulture = findCulture;\n kendo.getCulture = getCulture;\n\n //set current culture to en-US.\n kendo.culture(EN);\n\n function formatDate(date, format, culture) {\n culture = getCulture(culture);\n\n var calendar = culture.calendars.standard,\n days = calendar.days,\n months = calendar.months;\n\n format = calendar.patterns[format] || format;\n\n return format.replace(dateFormatRegExp, function(match) {\n var minutes;\n var result;\n var sign;\n\n if (match === \"d\") {\n result = date.getDate();\n } else if (match === \"dd\") {\n result = pad(date.getDate());\n } else if (match === \"ddd\") {\n result = days.namesAbbr[date.getDay()];\n } else if (match === \"dddd\") {\n result = days.names[date.getDay()];\n } else if (match === \"M\") {\n result = date.getMonth() + 1;\n } else if (match === \"MM\") {\n result = pad(date.getMonth() + 1);\n } else if (match === \"MMM\") {\n result = months.namesAbbr[date.getMonth()];\n } else if (match === \"MMMM\") {\n result = months.names[date.getMonth()];\n } else if (match === \"yy\") {\n result = pad(date.getFullYear() % 100);\n } else if (match === \"yyyy\") {\n result = pad(date.getFullYear(), 4);\n } else if (match === \"h\" ) {\n result = date.getHours() % 12 || 12;\n } else if (match === \"hh\") {\n result = pad(date.getHours() % 12 || 12);\n } else if (match === \"H\") {\n result = date.getHours();\n } else if (match === \"HH\") {\n result = pad(date.getHours());\n } else if (match === \"m\") {\n result = date.getMinutes();\n } else if (match === \"mm\") {\n result = pad(date.getMinutes());\n } else if (match === \"s\") {\n result = date.getSeconds();\n } else if (match === \"ss\") {\n result = pad(date.getSeconds());\n } else if (match === \"f\") {\n result = math.floor(date.getMilliseconds() / 100);\n } else if (match === \"ff\") {\n result = date.getMilliseconds();\n if (result > 99) {\n result = math.floor(result / 10);\n }\n result = pad(result);\n } else if (match === \"fff\") {\n result = pad(date.getMilliseconds(), 3);\n } else if (match === \"tt\") {\n result = date.getHours() < 12 ? calendar.AM[0] : calendar.PM[0];\n } else if (match === \"zzz\") {\n minutes = date.getTimezoneOffset();\n sign = minutes < 0;\n\n result = math.abs(minutes / 60).toString().split(\".\")[0];\n minutes = math.abs(minutes) - (result * 60);\n\n result = (sign ? \"+\" : \"-\") + pad(result);\n result += \":\" + pad(minutes);\n } else if (match === \"zz\" || match === \"z\") {\n result = date.getTimezoneOffset() / 60;\n sign = result < 0;\n\n result = math.abs(result).toString().split(\".\")[0];\n result = (sign ? \"+\" : \"-\") + (match === \"zz\" ? pad(result) : result);\n }\n\n return result !== undefined$1 ? result : match.slice(1, match.length - 1);\n });\n }\n\n //number formatting\n function formatNumber(number, format, culture) {\n culture = getCulture(culture);\n\n var numberFormat = culture.numberFormat,\n decimal = numberFormat[POINT],\n precision = numberFormat.decimals,\n pattern = numberFormat.pattern[0],\n literals = [],\n symbol,\n isCurrency, isPercent,\n customPrecision,\n formatAndPrecision,\n negative = number < 0,\n integer,\n fraction,\n integerLength,\n fractionLength,\n replacement = EMPTY,\n value = EMPTY,\n idx,\n length,\n ch,\n hasGroup,\n hasNegativeFormat,\n decimalIndex,\n sharpIndex,\n zeroIndex,\n hasZero, hasSharp,\n percentIndex,\n currencyIndex,\n startZeroIndex,\n start = -1,\n end;\n\n //return empty string if no number\n if (number === undefined$1) {\n return EMPTY;\n }\n\n if (!isFinite(number)) {\n return number;\n }\n\n //if no format then return number.toString() or number.toLocaleString() if culture.name is not defined\n if (!format) {\n return culture.name.length ? number.toLocaleString() : number.toString();\n }\n\n formatAndPrecision = standardFormatRegExp.exec(format);\n\n // standard formatting\n if (formatAndPrecision) {\n format = formatAndPrecision[1].toLowerCase();\n\n isCurrency = format === \"c\";\n isPercent = format === \"p\";\n\n if (isCurrency || isPercent) {\n //get specific number format information if format is currency or percent\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n decimal = numberFormat[POINT];\n precision = numberFormat.decimals;\n symbol = numberFormat.symbol;\n pattern = numberFormat.pattern[negative ? 0 : 1];\n }\n\n customPrecision = formatAndPrecision[2];\n\n if (customPrecision) {\n precision = +customPrecision;\n }\n\n //return number in exponential format\n if (format === \"e\") {\n var exp = customPrecision ? number.toExponential(precision) : number.toExponential(); // toExponential() and toExponential(undefined) differ in FF #653438.\n\n return exp.replace(POINT, numberFormat[POINT]);\n }\n\n // multiply if format is percent\n if (isPercent) {\n number *= 100;\n }\n\n number = round(number, precision);\n negative = number < 0;\n number = number.split(POINT);\n\n integer = number[0];\n fraction = number[1];\n\n //exclude \"-\" if number is negative.\n if (negative) {\n integer = integer.substring(1);\n }\n\n value = groupInteger(integer, 0, integer.length, numberFormat);\n\n if (fraction) {\n value += decimal + fraction;\n }\n\n if (format === \"n\" && !negative) {\n return value;\n }\n\n number = EMPTY;\n\n for (idx = 0, length = pattern.length; idx < length; idx++) {\n ch = pattern.charAt(idx);\n\n if (ch === \"n\") {\n number += value;\n } else if (ch === \"$\" || ch === \"%\") {\n number += symbol;\n } else {\n number += ch;\n }\n }\n\n return number;\n }\n\n //custom formatting\n //\n //separate format by sections.\n\n if (format.indexOf(\"'\") > -1 || format.indexOf(\"\\\"\") > -1 || format.indexOf(\"\\\\\") > -1) {\n format = format.replace(literalRegExp, function(match) {\n var quoteChar = match.charAt(0).replace(\"\\\\\", \"\"),\n literal = match.slice(1).replace(quoteChar, \"\");\n\n literals.push(literal);\n\n return PLACEHOLDER;\n });\n }\n\n format = format.split(\";\");\n if (negative && format[1]) {\n //get negative format\n format = format[1];\n hasNegativeFormat = true;\n } else if (number === 0 && format[2]) {\n //format for zeros\n format = format[2];\n if (format.indexOf(SHARP) == -1 && format.indexOf(ZERO) == -1) {\n //return format if it is string constant.\n return format;\n }\n } else {\n format = format[0];\n }\n\n percentIndex = format.indexOf(\"%\");\n currencyIndex = format.indexOf(\"$\");\n\n isPercent = percentIndex != -1;\n isCurrency = currencyIndex != -1;\n\n //multiply number if the format has percent\n if (isPercent) {\n number *= 100;\n }\n\n if (isCurrency && format[currencyIndex - 1] === \"\\\\\") {\n format = format.split(\"\\\\\").join(\"\");\n isCurrency = false;\n }\n\n if (isCurrency || isPercent) {\n //get specific number format information if format is currency or percent\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n decimal = numberFormat[POINT];\n precision = numberFormat.decimals;\n symbol = numberFormat.symbol;\n }\n\n hasGroup = format.indexOf(COMMA) > -1;\n if (hasGroup) {\n format = format.replace(commaRegExp, EMPTY);\n }\n\n decimalIndex = format.indexOf(POINT);\n length = format.length;\n\n if (decimalIndex != -1) {\n fraction = number.toString().split(\"e\");\n if (fraction[1]) {\n fraction = round(number, Math.abs(fraction[1]));\n } else {\n fraction = fraction[0];\n }\n fraction = fraction.split(POINT)[1] || EMPTY;\n zeroIndex = format.lastIndexOf(ZERO) - decimalIndex;\n sharpIndex = format.lastIndexOf(SHARP) - decimalIndex;\n hasZero = zeroIndex > -1;\n hasSharp = sharpIndex > -1;\n idx = fraction.length;\n\n if (!hasZero && !hasSharp) {\n format = format.substring(0, decimalIndex) + format.substring(decimalIndex + 1);\n length = format.length;\n decimalIndex = -1;\n idx = 0;\n }\n\n if (hasZero && zeroIndex > sharpIndex) {\n idx = zeroIndex;\n } else if (sharpIndex > zeroIndex) {\n if (hasSharp && idx > sharpIndex) {\n var rounded = round(number, sharpIndex, negative);\n\n while (rounded.charAt(rounded.length - 1) === ZERO && sharpIndex > 0 && sharpIndex > zeroIndex) {\n sharpIndex--;\n\n rounded = round(number, sharpIndex, negative);\n }\n\n idx = sharpIndex;\n } else if (hasZero && idx < zeroIndex) {\n idx = zeroIndex;\n }\n }\n }\n\n number = round(number, idx, negative);\n\n sharpIndex = format.indexOf(SHARP);\n startZeroIndex = zeroIndex = format.indexOf(ZERO);\n\n //define the index of the first digit placeholder\n if (sharpIndex == -1 && zeroIndex != -1) {\n start = zeroIndex;\n } else if (sharpIndex != -1 && zeroIndex == -1) {\n start = sharpIndex;\n } else {\n start = sharpIndex > zeroIndex ? zeroIndex : sharpIndex;\n }\n\n sharpIndex = format.lastIndexOf(SHARP);\n zeroIndex = format.lastIndexOf(ZERO);\n\n //define the index of the last digit placeholder\n if (sharpIndex == -1 && zeroIndex != -1) {\n end = zeroIndex;\n } else if (sharpIndex != -1 && zeroIndex == -1) {\n end = sharpIndex;\n } else {\n end = sharpIndex > zeroIndex ? sharpIndex : zeroIndex;\n }\n\n if (start == length) {\n end = start;\n }\n\n if (start != -1) {\n value = number.toString().split(POINT);\n integer = value[0];\n fraction = value[1] || EMPTY;\n\n integerLength = integer.length;\n fractionLength = fraction.length;\n\n if (negative && (number * -1) >= 0) {\n negative = false;\n }\n\n number = format.substring(0, start);\n\n if (negative && !hasNegativeFormat) {\n number += \"-\";\n }\n\n for (idx = start; idx < length; idx++) {\n ch = format.charAt(idx);\n\n if (decimalIndex == -1) {\n if (end - idx < integerLength) {\n number += integer;\n break;\n }\n } else {\n if (zeroIndex != -1 && zeroIndex < idx) {\n replacement = EMPTY;\n }\n\n if ((decimalIndex - idx) <= integerLength && decimalIndex - idx > -1) {\n number += integer;\n idx = decimalIndex;\n }\n\n if (decimalIndex === idx) {\n number += (fraction ? decimal : EMPTY) + fraction;\n idx += end - decimalIndex + 1;\n continue;\n }\n }\n\n if (ch === ZERO) {\n number += ch;\n replacement = ch;\n } else if (ch === SHARP) {\n number += replacement;\n }\n }\n\n if (hasGroup) {\n number = groupInteger(number, start + (negative && !hasNegativeFormat ? 1 : 0), Math.max(end, (integerLength + start)), numberFormat);\n }\n\n if (end >= start) {\n number += format.substring(end + 1);\n }\n\n //replace symbol placeholders\n if (isCurrency || isPercent) {\n value = EMPTY;\n for (idx = 0, length = number.length; idx < length; idx++) {\n ch = number.charAt(idx);\n value += (ch === \"$\" || ch === \"%\") ? symbol : ch;\n }\n number = value;\n }\n\n length = literals.length;\n\n if (length) {\n for (idx = 0; idx < length; idx++) {\n number = number.replace(PLACEHOLDER, literals[idx]);\n }\n }\n }\n\n return number;\n }\n\n var groupInteger = function(number, start, end, numberFormat) {\n var decimalIndex = number.indexOf(numberFormat[POINT]);\n var groupSizes = numberFormat.groupSize.slice();\n var groupSize = groupSizes.shift();\n var integer, integerLength;\n var idx, parts, value;\n var newGroupSize;\n\n end = decimalIndex !== -1 ? decimalIndex : end + 1;\n\n integer = number.substring(start, end);\n integerLength = integer.length;\n\n if (integerLength >= groupSize) {\n idx = integerLength;\n parts = [];\n\n while (idx > -1) {\n value = integer.substring(idx - groupSize, idx);\n if (value) {\n parts.push(value);\n }\n idx -= groupSize;\n newGroupSize = groupSizes.shift();\n groupSize = newGroupSize !== undefined$1 ? newGroupSize : groupSize;\n\n if (groupSize === 0) {\n if (idx > 0) {\n parts.push(integer.substring(0, idx));\n }\n break;\n }\n }\n\n integer = parts.reverse().join(numberFormat[COMMA]);\n number = number.substring(0, start) + integer + number.substring(end);\n }\n\n return number;\n };\n\n var round = function(value, precision, negative) {\n precision = precision || 0;\n\n value = value.toString().split('e');\n value = Math.round(+(value[0] + 'e' + (value[1] ? (+value[1] + precision) : precision)));\n\n if (negative) {\n value = -value;\n }\n\n value = value.toString().split('e');\n value = +(value[0] + 'e' + (value[1] ? (+value[1] - precision) : -precision));\n\n return value.toFixed(Math.min(precision, 20));\n };\n\n var toString = function(value, fmt, culture) {\n if (fmt) {\n if (objectToString.call(value) === \"[object Date]\") {\n return formatDate(value, fmt, culture);\n } else if (typeof value === NUMBER) {\n return formatNumber(value, fmt, culture);\n }\n }\n\n return value !== undefined$1 ? value : \"\";\n };\n\n kendo.format = function(fmt) {\n var values = arguments;\n\n return fmt.replace(formatRegExp, function(match, index, placeholderFormat) {\n var value = values[parseInt(index, 10) + 1];\n\n return toString(value, placeholderFormat ? placeholderFormat.substring(1) : \"\");\n });\n };\n\n kendo._extractFormat = function(format) {\n if (format.slice(0,3) === \"{0:\") {\n format = format.slice(3, format.length - 1);\n }\n\n return format;\n };\n\n kendo._activeElement = function() {\n try {\n return document.activeElement;\n } catch (e) {\n return document.documentElement.activeElement;\n }\n };\n\n kendo._round = round;\n kendo._outerWidth = function(element, includeMargin) { return $(element).outerWidth(includeMargin || false) || 0; };\n kendo._outerHeight = function(element, includeMargin) { return $(element).outerHeight(includeMargin || false) || 0; };\n kendo.toString = toString;\n })();\n\n\n (function() {\n var nonBreakingSpaceRegExp = /\\u00A0/g,\n spaceRegExp = /\\s/g,\n exponentRegExp = /[eE][\\-+]?[0-9]+/,\n shortTimeZoneRegExp = /[+|\\-]\\d{1,2}/,\n longTimeZoneRegExp = /[+|\\-]\\d{1,2}:?\\d{2}/,\n dateRegExp = /^\\/Date\\((.*?)\\)\\/$/,\n offsetRegExp = /[+-]\\d*/,\n FORMATS_SEQUENCE = [ [], [ \"G\", \"g\", \"F\" ], [ \"D\", \"d\", \"y\", \"m\", \"T\", \"t\" ] ],\n STANDARD_FORMATS = [\n [\n \"yyyy-MM-ddTHH:mm:ss.fffffffzzz\",\n \"yyyy-MM-ddTHH:mm:ss.fffffff\",\n \"yyyy-MM-ddTHH:mm:ss.fffzzz\",\n \"yyyy-MM-ddTHH:mm:ss.fff\",\n \"ddd MMM dd yyyy HH:mm:ss\",\n \"yyyy-MM-ddTHH:mm:sszzz\",\n \"yyyy-MM-ddTHH:mmzzz\",\n \"yyyy-MM-ddTHH:mmzz\",\n \"yyyy-MM-ddTHH:mm:ss\",\n \"yyyy-MM-dd HH:mm:ss\",\n \"yyyy/MM/dd HH:mm:ss\"\n ], [\n \"yyyy-MM-ddTHH:mm\",\n \"yyyy-MM-dd HH:mm\",\n \"yyyy/MM/dd HH:mm\"\n ], [\n \"yyyy/MM/dd\",\n \"yyyy-MM-dd\",\n \"HH:mm:ss\",\n \"HH:mm\"\n ]\n ],\n numberRegExp = {\n 2: /^\\d{1,2}/,\n 3: /^\\d{1,3}/,\n 4: /^\\d{4}/\n },\n objectToString = {}.toString;\n\n function outOfRange(value, start, end) {\n return !(value >= start && value <= end);\n }\n\n function designatorPredicate(designator) {\n return designator.charAt(0);\n }\n\n function mapDesignators(designators) {\n return $.map(designators, designatorPredicate);\n }\n\n //if date's day is different than the typed one - adjust\n function adjustDST(date, hours) {\n if (!hours && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n }\n }\n\n function lowerArray(data) {\n var idx = 0,\n length = data.length,\n array = [];\n\n for (; idx < length; idx++) {\n array[idx] = (data[idx] + \"\").toLowerCase();\n }\n\n return array;\n }\n\n function lowerLocalInfo(localInfo) {\n var newLocalInfo = {}, property;\n\n for (property in localInfo) {\n newLocalInfo[property] = lowerArray(localInfo[property]);\n }\n\n return newLocalInfo;\n }\n\n function parseExact(value, format, culture, strict) {\n if (!value) {\n return null;\n }\n\n var lookAhead = function(match) {\n var i = 0;\n while (format[idx] === match) {\n i++;\n idx++;\n }\n if (i > 0) {\n idx -= 1;\n }\n return i;\n },\n getNumber = function(size) {\n var rg = numberRegExp[size] || new RegExp('^\\\\d{1,' + size + '}'),\n match = value.substr(valueIdx, size).match(rg);\n\n if (match) {\n match = match[0];\n valueIdx += match.length;\n return parseInt(match, 10);\n }\n return null;\n },\n getIndexByName = function(names, lower) {\n var i = 0,\n length = names.length,\n name, nameLength,\n matchLength = 0,\n matchIdx = 0,\n subValue;\n\n for (; i < length; i++) {\n name = names[i];\n nameLength = name.length;\n subValue = value.substr(valueIdx, nameLength);\n\n if (lower) {\n subValue = subValue.toLowerCase();\n }\n\n if (subValue == name && nameLength > matchLength) {\n matchLength = nameLength;\n matchIdx = i;\n }\n }\n\n if (matchLength) {\n valueIdx += matchLength;\n return matchIdx + 1;\n }\n\n return null;\n },\n checkLiteral = function() {\n var result = false;\n if (value.charAt(valueIdx) === format[idx]) {\n valueIdx++;\n result = true;\n }\n return result;\n },\n calendar = culture.calendars.standard,\n year = null,\n month = null,\n day = null,\n hours = null,\n minutes = null,\n seconds = null,\n milliseconds = null,\n idx = 0,\n valueIdx = 0,\n literal = false,\n date = new Date(),\n twoDigitYearMax = calendar.twoDigitYearMax || 2029,\n defaultYear = date.getFullYear(),\n ch, count, length, pattern,\n pmHour, UTC, matches,\n amDesignators, pmDesignators,\n hoursOffset, minutesOffset,\n hasTime, match;\n\n if (!format) {\n format = \"d\"; //shord date format\n }\n\n //if format is part of the patterns get real format\n pattern = calendar.patterns[format];\n if (pattern) {\n format = pattern;\n }\n\n format = format.split(\"\");\n length = format.length;\n\n for (; idx < length; idx++) {\n ch = format[idx];\n\n if (literal) {\n if (ch === \"'\") {\n literal = false;\n } else {\n checkLiteral();\n }\n } else {\n if (ch === \"d\") {\n count = lookAhead(\"d\");\n if (!calendar._lowerDays) {\n calendar._lowerDays = lowerLocalInfo(calendar.days);\n }\n\n if (day !== null && count > 2) {\n continue;\n }\n\n day = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerDays[count == 3 ? \"namesAbbr\" : \"names\"], true);\n\n if (day === null || outOfRange(day, 1, 31)) {\n return null;\n }\n } else if (ch === \"M\") {\n count = lookAhead(\"M\");\n if (!calendar._lowerMonths) {\n calendar._lowerMonths = lowerLocalInfo(calendar.months);\n }\n month = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerMonths[count == 3 ? 'namesAbbr' : 'names'], true);\n\n if (month === null || outOfRange(month, 1, 12)) {\n return null;\n }\n month -= 1; //because month is zero based\n } else if (ch === \"y\") {\n count = lookAhead(\"y\");\n year = getNumber(count);\n\n if (year === null) {\n return null;\n }\n\n if (count == 2) {\n if (typeof twoDigitYearMax === \"string\") {\n twoDigitYearMax = defaultYear + parseInt(twoDigitYearMax, 10);\n }\n\n year = (defaultYear - defaultYear % 100) + year;\n if (year > twoDigitYearMax) {\n year -= 100;\n }\n }\n } else if (ch === \"h\" ) {\n lookAhead(\"h\");\n hours = getNumber(2);\n if (hours == 12) {\n hours = 0;\n }\n if (hours === null || outOfRange(hours, 0, 11)) {\n return null;\n }\n } else if (ch === \"H\") {\n lookAhead(\"H\");\n hours = getNumber(2);\n if (hours === null || outOfRange(hours, 0, 23)) {\n return null;\n }\n } else if (ch === \"m\") {\n lookAhead(\"m\");\n minutes = getNumber(2);\n if (minutes === null || outOfRange(minutes, 0, 59)) {\n return null;\n }\n } else if (ch === \"s\") {\n lookAhead(\"s\");\n seconds = getNumber(2);\n if (seconds === null || outOfRange(seconds, 0, 59)) {\n return null;\n }\n } else if (ch === \"f\") {\n count = lookAhead(\"f\");\n\n match = value.substr(valueIdx, count).match(numberRegExp[3]);\n milliseconds = getNumber(count); //move value index position\n\n if (milliseconds !== null) {\n milliseconds = parseFloat(\"0.\" + match[0], 10);\n milliseconds = kendo._round(milliseconds, 3);\n milliseconds *= 1000;\n }\n\n if (milliseconds === null || outOfRange(milliseconds, 0, 999)) {\n return null;\n }\n\n } else if (ch === \"t\") {\n count = lookAhead(\"t\");\n amDesignators = calendar.AM;\n pmDesignators = calendar.PM;\n\n if (count === 1) {\n amDesignators = mapDesignators(amDesignators);\n pmDesignators = mapDesignators(pmDesignators);\n }\n\n pmHour = getIndexByName(pmDesignators);\n if (!pmHour && !getIndexByName(amDesignators)) {\n return null;\n }\n }\n else if (ch === \"z\") {\n UTC = true;\n count = lookAhead(\"z\");\n\n if (value.substr(valueIdx, 1) === \"Z\") {\n checkLiteral();\n continue;\n }\n\n matches = value.substr(valueIdx, 6)\n .match(count > 2 ? longTimeZoneRegExp : shortTimeZoneRegExp);\n\n if (!matches) {\n return null;\n }\n\n matches = matches[0].split(\":\");\n\n hoursOffset = matches[0];\n minutesOffset = matches[1];\n\n if (!minutesOffset && hoursOffset.length > 3) { //(+|-)[hh][mm] format is used\n valueIdx = hoursOffset.length - 2;\n minutesOffset = hoursOffset.substring(valueIdx);\n hoursOffset = hoursOffset.substring(0, valueIdx);\n }\n\n hoursOffset = parseInt(hoursOffset, 10);\n if (outOfRange(hoursOffset, -12, 13)) {\n return null;\n }\n\n if (count > 2) {\n minutesOffset = matches[0][0] + minutesOffset;\n minutesOffset = parseInt(minutesOffset, 10);\n if (isNaN(minutesOffset) || outOfRange(minutesOffset, -59, 59)) {\n return null;\n }\n }\n } else if (ch === \"'\") {\n literal = true;\n checkLiteral();\n } else if (!checkLiteral()) {\n return null;\n }\n }\n }\n\n // if more characters follow, assume wrong format\n // https://github.com/telerik/kendo-ui-core/issues/3476\n if (strict && !/^\\s*$/.test(value.substr(valueIdx))) {\n return null;\n }\n\n hasTime = hours !== null || minutes !== null || seconds || null;\n\n if (year === null && month === null && day === null && hasTime) {\n year = defaultYear;\n month = date.getMonth();\n day = date.getDate();\n } else {\n if (year === null) {\n year = defaultYear;\n }\n\n if (day === null) {\n day = 1;\n }\n }\n\n if (pmHour && hours < 12) {\n hours += 12;\n }\n\n if (UTC) {\n if (hoursOffset) {\n hours += -hoursOffset;\n }\n\n if (minutesOffset) {\n minutes += -minutesOffset;\n }\n\n value = new Date(Date.UTC(year, month, day, hours, minutes, seconds, milliseconds));\n } else {\n value = new Date(year, month, day, hours, minutes, seconds, milliseconds);\n adjustDST(value, hours);\n }\n\n if (year < 100) {\n value.setFullYear(year);\n }\n\n if (value.getDate() !== day && UTC === undefined$1) {\n return null;\n }\n\n return value;\n }\n\n function parseMicrosoftFormatOffset(offset) {\n var sign = offset.substr(0, 1) === \"-\" ? -1 : 1;\n\n offset = offset.substring(1);\n offset = (parseInt(offset.substr(0, 2), 10) * 60) + parseInt(offset.substring(2), 10);\n\n return sign * offset;\n }\n\n function getDefaultFormats(culture) {\n var length = math.max(FORMATS_SEQUENCE.length, STANDARD_FORMATS.length);\n var calendar = culture.calendar || culture.calendars.standard;\n var patterns = calendar.patterns;\n var cultureFormats, formatIdx, idx;\n var formats = [];\n\n for (idx = 0; idx < length; idx++) {\n cultureFormats = FORMATS_SEQUENCE[idx];\n for (formatIdx = 0; formatIdx < cultureFormats.length; formatIdx++) {\n formats.push(patterns[cultureFormats[formatIdx]]);\n }\n formats = formats.concat(STANDARD_FORMATS[idx]);\n }\n\n return formats;\n }\n\n function internalParseDate(value, formats, culture, strict) {\n if (objectToString.call(value) === \"[object Date]\") {\n return value;\n }\n\n var idx = 0;\n var date = null;\n var length;\n var tzoffset;\n\n if (value && value.indexOf(\"/D\") === 0) {\n date = dateRegExp.exec(value);\n if (date) {\n date = date[1];\n tzoffset = offsetRegExp.exec(date.substring(1));\n\n date = new Date(parseInt(date, 10));\n\n if (tzoffset) {\n tzoffset = parseMicrosoftFormatOffset(tzoffset[0]);\n date = kendo.timezone.apply(date, 0);\n date = kendo.timezone.convert(date, 0, -1 * tzoffset);\n }\n\n return date;\n }\n }\n\n culture = kendo.getCulture(culture);\n\n if (!formats) {\n formats = getDefaultFormats(culture);\n }\n\n formats = isArray(formats) ? formats : [formats];\n length = formats.length;\n\n for (; idx < length; idx++) {\n date = parseExact(value, formats[idx], culture, strict);\n if (date) {\n return date;\n }\n }\n\n return date;\n }\n\n kendo.parseDate = function(value, formats, culture) {\n return internalParseDate(value, formats, culture, false);\n };\n\n kendo.parseExactDate = function(value, formats, culture) {\n return internalParseDate(value, formats, culture, true);\n };\n\n kendo.parseInt = function(value, culture) {\n var result = kendo.parseFloat(value, culture);\n if (result) {\n result = result | 0;\n }\n return result;\n };\n\n kendo.parseFloat = function(value, culture, format) {\n if (!value && value !== 0) {\n return null;\n }\n\n if (typeof value === NUMBER) {\n return value;\n }\n\n value = value.toString();\n culture = kendo.getCulture(culture);\n\n var number = culture.numberFormat,\n percent = number.percent,\n currency = number.currency,\n symbol = currency.symbol,\n percentSymbol = percent.symbol,\n negative = value.indexOf(\"-\"),\n parts, isPercent;\n\n //handle exponential number\n if (exponentRegExp.test(value)) {\n value = parseFloat(value.replace(number[\".\"], \".\"));\n if (isNaN(value)) {\n value = null;\n }\n return value;\n }\n\n if (negative > 0) {\n return null;\n } else {\n negative = negative > -1;\n }\n\n if (value.indexOf(symbol) > -1 || (format && format.toLowerCase().indexOf(\"c\") > -1)) {\n number = currency;\n parts = number.pattern[0].replace(\"$\", symbol).split(\"n\");\n if (value.indexOf(parts[0]) > -1 && value.indexOf(parts[1]) > -1) {\n value = value.replace(parts[0], \"\").replace(parts[1], \"\");\n negative = true;\n }\n } else if (value.indexOf(percentSymbol) > -1) {\n isPercent = true;\n number = percent;\n symbol = percentSymbol;\n }\n\n value = value.replace(\"-\", \"\")\n .replace(symbol, \"\")\n .replace(nonBreakingSpaceRegExp, \" \")\n .split(number[\",\"].replace(nonBreakingSpaceRegExp, \" \")).join(\"\")\n .replace(spaceRegExp, \"\")\n .replace(number[\".\"], \".\");\n\n value = parseFloat(value);\n\n if (isNaN(value)) {\n value = null;\n } else if (negative) {\n value *= -1;\n }\n\n if (value && isPercent) {\n value /= 100;\n }\n\n return value;\n };\n })();\n\n function getShadows(element) {\n var shadow = element.css(kendo.support.transitions.css + \"box-shadow\") || element.css(\"box-shadow\"),\n radius = shadow ? shadow.match(boxShadowRegExp) || [ 0, 0, 0, 0, 0 ] : [ 0, 0, 0, 0, 0 ],\n blur = math.max((+radius[3]), +(radius[4] || 0));\n\n return {\n left: (-radius[1]) + blur,\n right: (+radius[1]) + blur,\n bottom: (+radius[2]) + blur\n };\n }\n\n function wrap(element, autosize) {\n var percentage,\n outerWidth = kendo._outerWidth,\n outerHeight = kendo._outerHeight,\n parent = element.parent(),\n windowOuterWidth = outerWidth(window);\n\n parent.removeClass(\"k-animation-container-sm\");\n\n if (!parent.hasClass(\"k-animation-container\")) {\n var width = element[0].style.width,\n height = element[0].style.height,\n percentWidth = percentRegExp.test(width),\n percentHeight = percentRegExp.test(height),\n forceWidth = element.hasClass(\"k-tooltip\") || element.is(\".k-menu-horizontal.k-context-menu\");\n\n percentage = percentWidth || percentHeight;\n\n if (!percentWidth && (!autosize || (autosize && width) || forceWidth)) { width = autosize ? outerWidth(element) + 1 : outerWidth(element); }\n if (!percentHeight && (!autosize || (autosize && height)) || element.is(\".k-menu-horizontal.k-context-menu\")) { height = outerHeight(element); }\n\n element.wrap(\n $(\"
\")\n .addClass(\"k-animation-container\")\n .attr(\"role\", \"region\")\n .css({\n width: width,\n height: height\n }));\n parent = element.parent();\n\n if (percentage) {\n element.css({\n width: \"100%\",\n height: \"100%\",\n boxSizing: \"border-box\",\n mozBoxSizing: \"border-box\",\n webkitBoxSizing: \"border-box\"\n });\n }\n } else {\n wrapResize(element, autosize);\n }\n\n if (windowOuterWidth < outerWidth(parent)) {\n parent.addClass(\"k-animation-container-sm\");\n\n wrapResize(element, autosize);\n }\n\n return parent;\n }\n\n function wrapResize(element, autosize) {\n var percentage,\n outerWidth = kendo._outerWidth,\n outerHeight = kendo._outerHeight,\n wrapper = element.parent(\".k-animation-container\"),\n wrapperStyle = wrapper[0].style;\n\n if (wrapper.is(\":hidden\")) {\n wrapper.css({\n display: \"\",\n position: \"\"\n });\n }\n\n percentage = percentRegExp.test(wrapperStyle.width) || percentRegExp.test(wrapperStyle.height);\n\n if (!percentage) {\n wrapper.css({\n width: autosize ? outerWidth(element) + 1 : outerWidth(element),\n height: outerHeight(element),\n boxSizing: \"content-box\",\n mozBoxSizing: \"content-box\",\n webkitBoxSizing: \"content-box\"\n });\n }\n }\n\n function deepExtend(destination) {\n var arguments$1 = arguments;\n\n var i = 1,\n length = arguments.length;\n\n for (i = 1; i < length; i++) {\n deepExtendOne(destination, arguments$1[i]);\n }\n\n return destination;\n }\n\n function deepExtendOne(destination, source) {\n var ObservableArray = kendo.data.ObservableArray,\n LazyObservableArray = kendo.data.LazyObservableArray,\n DataSource = kendo.data.DataSource,\n HierarchicalDataSource = kendo.data.HierarchicalDataSource,\n property,\n propValue,\n propType,\n propInit,\n destProp;\n\n for (property in source) {\n propValue = source[property];\n propType = typeof propValue;\n\n if (propType === OBJECT && propValue !== null) {\n propInit = propValue.constructor;\n } else {\n propInit = null;\n }\n\n if (propInit &&\n propInit !== Array && propInit !== ObservableArray && propInit !== LazyObservableArray &&\n propInit !== DataSource && propInit !== HierarchicalDataSource && propInit !== RegExp &&\n (!kendo.isFunction(window.ArrayBuffer) || propInit !== ArrayBuffer) && !(propValue instanceof HTMLElement)) {\n\n if (propValue instanceof Date) {\n destination[property] = new Date(propValue.getTime());\n } else if (isFunction(propValue.clone)) {\n destination[property] = propValue.clone();\n } else {\n destProp = destination[property];\n if (typeof (destProp) === OBJECT) {\n destination[property] = destProp || {};\n } else {\n destination[property] = {};\n }\n deepExtendOne(destination[property], propValue);\n }\n } else if (propType !== UNDEFINED) {\n destination[property] = propValue;\n }\n }\n\n return destination;\n }\n\n function testRx(agent, rxs, dflt) {\n for (var rx in rxs) {\n if (rxs.hasOwnProperty(rx) && rxs[rx].test(agent)) {\n return rx;\n }\n }\n return dflt !== undefined$1 ? dflt : agent;\n }\n\n function toHyphens(str) {\n return str.replace(/([a-z][A-Z])/g, function(g) {\n return g.charAt(0) + '-' + g.charAt(1).toLowerCase();\n });\n }\n\n function toCamelCase(str) {\n return str.replace(/\\-(\\w)/g, function(strMatch, g1) {\n return g1.toUpperCase();\n });\n }\n\n function getComputedStyles(element, properties) {\n var styles = {}, computedStyle;\n\n if (document.defaultView && document.defaultView.getComputedStyle) {\n computedStyle = document.defaultView.getComputedStyle(element, \"\");\n\n if (properties) {\n $.each(properties, function(idx, value) {\n styles[value] = computedStyle.getPropertyValue(value);\n });\n }\n } else {\n computedStyle = element.currentStyle;\n\n if (properties) {\n $.each(properties, function(idx, value) {\n styles[value] = computedStyle[toCamelCase(value)];\n });\n }\n }\n\n if (!kendo.size(styles)) {\n styles = computedStyle;\n }\n\n return styles;\n }\n\n function isScrollable(element) {\n if (element.dataset[kendo.ns + \"scrollable\"] === \"false\") {\n return false;\n }\n\n if (element && element.className && typeof(element.className) === \"string\" && element.className.indexOf(\"k-auto-scrollable\") > -1) {\n return true;\n }\n\n var overflow = getComputedStyles(element, [\"overflow\"]).overflow;\n return overflow.indexOf(\"auto\") > -1 || overflow.indexOf(\"scroll\") > -1;\n }\n\n function scrollLeft(element, value) {\n var webkit = support.browser.webkit;\n var mozila = support.browser.mozilla;\n var browserVersion = support.browser.version;\n var el, isRtl;\n\n if (element instanceof $ && value !== undefined$1) {\n element.each(function(i, e) {\n scrollLeft(e, value);\n });\n\n return;\n } else {\n el = element instanceof $ ? element[0] : element;\n }\n\n if (!el) {\n return;\n }\n\n isRtl = support.isRtl(element);\n\n // After updating browser detection,\n // Test in which if should the Safari browsers go\n if (value !== undefined$1) {\n if (isRtl && webkit && (browserVersion < 85 || support.browser.safari)) {\n el.scrollLeft = el.scrollWidth - el.clientWidth - value;\n } else if (isRtl && (mozila || webkit) && value > 0) {\n el.scrollLeft = -value;\n } else {\n el.scrollLeft = value;\n }\n } else {\n if (isRtl && webkit && (browserVersion < 85 || support.browser.safari)) {\n return el.scrollWidth - el.clientWidth - el.scrollLeft;\n } else {\n return Math.abs(el.scrollLeft);\n }\n }\n }\n\n (function() {\n support._scrollbar = undefined$1;\n\n support.scrollbar = function(refresh) {\n if (!isNaN(support._scrollbar) && !refresh) {\n return support._scrollbar;\n } else {\n var div = document.createElement(\"div\"),\n result;\n\n div.style.cssText = \"overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block\";\n div.innerHTML = \" \";\n document.body.appendChild(div);\n\n support._scrollbar = result = div.offsetWidth - div.scrollWidth;\n\n document.body.removeChild(div);\n\n return result;\n }\n };\n\n support.isRtl = function(element) {\n return $(element).closest(\".k-rtl\").length > 0;\n };\n\n var table = document.createElement(\"table\");\n\n // Internet Explorer does not support setting the innerHTML of TBODY and TABLE elements\n try {\n table.innerHTML = \"\";\n\n support.tbodyInnerHtml = true;\n } catch (e) {\n support.tbodyInnerHtml = false;\n }\n\n support.touch = \"ontouchstart\" in window;\n\n var docStyle = document.documentElement.style;\n var transitions = support.transitions = false,\n transforms = support.transforms = false,\n elementProto = \"HTMLElement\" in window ? HTMLElement.prototype : [];\n\n support.hasHW3D = (\"WebKitCSSMatrix\" in window && \"m11\" in new window.WebKitCSSMatrix()) || \"MozPerspective\" in docStyle || \"msPerspective\" in docStyle;\n support.cssFlexbox = (\"flexWrap\" in docStyle) || (\"WebkitFlexWrap\" in docStyle) || (\"msFlexWrap\" in docStyle);\n\n each([ \"Moz\", \"webkit\", \"O\", \"ms\" ], function() {\n var prefix = this.toString(),\n hasTransitions = typeof table.style[prefix + \"Transition\"] === STRING;\n\n if (hasTransitions || typeof table.style[prefix + \"Transform\"] === STRING) {\n var lowPrefix = prefix.toLowerCase();\n\n transforms = {\n css: (lowPrefix != \"ms\") ? \"-\" + lowPrefix + \"-\" : \"\",\n prefix: prefix,\n event: (lowPrefix === \"o\" || lowPrefix === \"webkit\") ? lowPrefix : \"\"\n };\n\n if (hasTransitions) {\n transitions = transforms;\n transitions.event = transitions.event ? transitions.event + \"TransitionEnd\" : \"transitionend\";\n }\n\n return false;\n }\n });\n\n table = null;\n\n support.transforms = transforms;\n support.transitions = transitions;\n\n support.devicePixelRatio = window.devicePixelRatio === undefined$1 ? 1 : window.devicePixelRatio;\n\n try {\n support.screenWidth = window.outerWidth || window.screen ? window.screen.availWidth : window.innerWidth;\n support.screenHeight = window.outerHeight || window.screen ? window.screen.availHeight : window.innerHeight;\n } catch (e$1) {\n //window.outerWidth throws error when in IE showModalDialog.\n support.screenWidth = window.screen.availWidth;\n support.screenHeight = window.screen.availHeight;\n }\n\n support.detectOS = function(ua) {\n var os = false, minorVersion, match = [],\n notAndroidPhone = !/mobile safari/i.test(ua),\n agentRxs = {\n wp: /(Windows Phone(?: OS)?)\\s(\\d+)\\.(\\d+(\\.\\d+)?)/,\n fire: /(Silk)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n android: /(Android|Android.*(?:Opera|Firefox).*?\\/)\\s*(\\d+)\\.?(\\d+(\\.\\d+)?)?/,\n iphone: /(iPhone|iPod).*OS\\s+(\\d+)[\\._]([\\d\\._]+)/,\n ipad: /(iPad).*OS\\s+(\\d+)[\\._]([\\d_]+)/,\n meego: /(MeeGo).+NokiaBrowser\\/(\\d+)\\.([\\d\\._]+)/,\n webos: /(webOS)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n blackberry: /(BlackBerry|BB10).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n playbook: /(PlayBook).*?Tablet\\s*OS\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\n windows: /(MSIE)\\s+(\\d+)\\.(\\d+(\\.\\d+)?)/,\n tizen: /(tizen).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/i,\n sailfish: /(sailfish).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*firefox/i,\n ffos: /(Mobile).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*Firefox/\n },\n osRxs = {\n ios: /^i(phone|pad|pod)$/i,\n android: /^android|fire$/i,\n blackberry: /^blackberry|playbook/i,\n windows: /windows/,\n wp: /wp/,\n flat: /sailfish|ffos|tizen/i,\n meego: /meego/\n },\n formFactorRxs = {\n tablet: /playbook|ipad|fire/i\n },\n browserRxs = {\n omini: /Opera\\sMini/i,\n omobile: /Opera\\sMobi/i,\n firefox: /Firefox|Fennec/i,\n mobilesafari: /version\\/.*safari/i,\n ie: /MSIE|Windows\\sPhone/i,\n chrome: /chrome|crios/i,\n webkit: /webkit/i\n };\n\n for (var agent in agentRxs) {\n if (agentRxs.hasOwnProperty(agent)) {\n match = ua.match(agentRxs[agent]);\n if (match) {\n if (agent == \"windows\" && \"plugins\" in navigator) { return false; } // Break if not Metro/Mobile Windows\n\n os = {};\n os.device = agent;\n os.tablet = testRx(agent, formFactorRxs, false);\n os.browser = testRx(ua, browserRxs, \"default\");\n os.name = testRx(agent, osRxs);\n os[os.name] = true;\n os.majorVersion = match[2];\n os.minorVersion = (match[3] || \"0\").replace(\"_\", \".\");\n minorVersion = os.minorVersion.replace(\".\", \"\").substr(0, 2);\n os.flatVersion = os.majorVersion + minorVersion + (new Array(3 - (minorVersion.length < 3 ? minorVersion.length : 2)).join(\"0\"));\n os.cordova = typeof window.PhoneGap !== UNDEFINED || typeof window.cordova !== UNDEFINED; // Use file protocol to detect appModes.\n os.appMode = window.navigator.standalone || (/file|local|wmapp/).test(window.location.protocol) || os.cordova; // Use file protocol to detect appModes.\n\n if (os.android && (support.devicePixelRatio < 1.5 && os.flatVersion < 400 || notAndroidPhone) && (support.screenWidth > 800 || support.screenHeight > 800)) {\n os.tablet = agent;\n }\n\n break;\n }\n }\n }\n return os;\n };\n\n var mobileOS = support.mobileOS = support.detectOS(navigator.userAgent);\n\n support.wpDevicePixelRatio = mobileOS.wp ? screen.width / 320 : 0;\n\n support.hasNativeScrolling = false;\n\n if (mobileOS.ios || (mobileOS.android && mobileOS.majorVersion > 2) || mobileOS.wp) {\n support.hasNativeScrolling = mobileOS;\n }\n\n support.delayedClick = function() {\n\n // only the mobile devices with touch events do this.\n if (support.touch) {\n // All iOS devices so far (by the time I am writing this, iOS 9.0.2 is the latest),\n // delay their click events.\n if (mobileOS.ios) {\n return true;\n }\n\n if (mobileOS.android) {\n\n if (!support.browser.chrome) { // older webkits and webviews delay the click\n return true;\n }\n\n // from here on, we deal with Chrome on Android.\n if (support.browser.version < 32) {\n return false;\n }\n\n // Chrome 32+ does conditional fast clicks if the view port is not user scalable.\n return !($(\"meta[name=viewport]\").attr(\"content\") || \"\").match(/user-scalable=no/i);\n }\n }\n\n return false;\n };\n\n support.mouseAndTouchPresent = support.touch && !(support.mobileOS.ios || support.mobileOS.android);\n\n support.detectBrowser = function(ua) {\n var browser = false,\n match = [],\n chromiumEdgeMatch = [],\n browserRxs = {\n edge: /(edge)[ \\/]([\\w.]+)/i,\n webkit: /(chrome|crios)[ \\/]([\\w.]+)/i,\n safari: /(webkit)[ \\/]([\\w.]+)/i,\n opera: /(opera)(?:.*version|)[ \\/]([\\w.]+)/i,\n msie: /(msie\\s|trident.*? rv:)([\\w.]+)/i,\n mozilla: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n };\n\n for (var agent in browserRxs) {\n if (browserRxs.hasOwnProperty(agent)) {\n match = ua.match(browserRxs[agent]);\n if (match) {\n browser = {};\n browser[agent] = true;\n browser[match[1].toLowerCase().split(\" \")[0].split(\"/\")[0]] = true;\n browser.version = parseInt(document.documentMode || match[2], 10);\n\n if (browser.chrome) {\n chromiumEdgeMatch = ua.match(/(edg)[ \\/]([\\w.]+)/i);\n\n if (chromiumEdgeMatch) {\n browser.chromiumEdge = true;\n }\n }\n\n break;\n }\n }\n }\n\n return browser;\n };\n\n support.browser = support.detectBrowser(navigator.userAgent);\n\n if (!mobileOS && support.touch && support.browser.safari) {\n mobileOS = support.mobileOS = {\n ios: true,\n tablet: \"tablet\",\n device: \"ipad\"\n };\n }\n\n support.detectClipboardAccess = function() {\n var commands = {\n copy: document.queryCommandSupported ? document.queryCommandSupported(\"copy\") : false,\n cut: document.queryCommandSupported ? document.queryCommandSupported(\"cut\") : false,\n paste: document.queryCommandSupported ? document.queryCommandSupported(\"paste\") : false\n };\n\n if (support.browser.chrome) {\n //not using queryCommandSupported due to chromium issues 476508 and 542948\n commands.paste = false;\n if (support.browser.version >= 43) {\n commands.copy = true;\n commands.cut = true;\n }\n }\n\n return commands;\n };\n\n support.clipboard = support.detectClipboardAccess();\n\n support.zoomLevel = function() {\n try {\n var browser = support.browser;\n var ie11WidthCorrection = 0;\n var docEl = document.documentElement;\n\n if (browser.msie && browser.version == 11 && docEl.scrollHeight > docEl.clientHeight && !support.touch) {\n ie11WidthCorrection = support.scrollbar();\n }\n\n return support.touch ? (docEl.clientWidth / window.innerWidth) :\n browser.msie && browser.version >= 10 ? (((top || window).document.documentElement.offsetWidth + ie11WidthCorrection) / (top || window).innerWidth) : 1;\n } catch (e) {\n return 1;\n }\n };\n\n (function(browser) {\n // add browser-specific CSS class\n var cssClass = \"\",\n docElement = $(document.documentElement),\n majorVersion = parseInt(browser.version, 10);\n\n if (browser.msie) {\n cssClass = \"ie\";\n } else if (browser.mozilla) {\n cssClass = \"ff\";\n } else if (browser.safari) {\n cssClass = \"safari\";\n } else if (browser.webkit) {\n cssClass = \"webkit\";\n } else if (browser.opera) {\n cssClass = \"opera\";\n } else if (browser.edge) {\n cssClass = \"edge\";\n }\n\n if (cssClass) {\n cssClass = \"k-\" + cssClass + \" k-\" + cssClass + majorVersion;\n }\n if (support.mobileOS) {\n cssClass += \" k-mobile\";\n }\n\n if (!support.cssFlexbox) {\n cssClass += \" k-no-flexbox\";\n }\n\n docElement.addClass(cssClass);\n })(support.browser);\n\n support.eventCapture = document.documentElement.addEventListener;\n\n var input = document.createElement(\"input\");\n\n support.placeholder = \"placeholder\" in input;\n support.propertyChangeEvent = \"onpropertychange\" in input;\n\n support.input = (function() {\n var types = [\"number\", \"date\", \"time\", \"month\", \"week\", \"datetime\", \"datetime-local\"];\n var length = types.length;\n var value = \"test\";\n var result = {};\n var idx = 0;\n var type;\n\n for (;idx < length; idx++) {\n type = types[idx];\n input.setAttribute(\"type\", type);\n input.value = value;\n\n result[type.replace(\"-\", \"\")] = input.type !== \"text\" && input.value !== value;\n }\n\n return result;\n })();\n\n input.style.cssText = \"float:left;\";\n\n support.cssFloat = !!input.style.cssFloat;\n\n input = null;\n\n support.stableSort = (function() {\n // Chrome sort is not stable for more than *10* items\n // IE9+ sort is not stable for than *512* items\n var threshold = 513;\n\n var sorted = [{\n index: 0,\n field: \"b\"\n }];\n\n for (var i = 1; i < threshold; i++) {\n sorted.push({\n index: i,\n field: \"a\"\n });\n }\n\n sorted.sort(function(a, b) {\n return a.field > b.field ? 1 : (a.field < b.field ? -1 : 0);\n });\n\n return sorted[0].index === 1;\n })();\n\n support.matchesSelector = elementProto.webkitMatchesSelector || elementProto.mozMatchesSelector ||\n elementProto.msMatchesSelector || elementProto.oMatchesSelector ||\n elementProto.matchesSelector || elementProto.matches ||\n function( selector ) {\n var nodeList = document.querySelectorAll ? ( this.parentNode || document ).querySelectorAll( selector ) || [] : $(selector),\n i = nodeList.length;\n\n while (i--) {\n if (nodeList[i] == this) {\n return true;\n }\n }\n\n return false;\n };\n\n support.matchMedia = \"matchMedia\" in window;\n\n support.pushState = window.history && window.history.pushState;\n\n support.hashChange = \"onhashchange\" in window;\n\n support.customElements = \"registerElement\" in window.document;\n\n var chrome = support.browser.chrome,\n mobileChrome = support.browser.crios,\n mozilla = support.browser.mozilla,\n safari = support.browser.safari;\n support.msPointers = !chrome && window.MSPointerEvent;\n support.pointers = !chrome && !mobileChrome && !mozilla && !safari && window.PointerEvent;\n support.kineticScrollNeeded = mobileOS && (support.touch || support.msPointers || support.pointers);\n })();\n\n\n function size(obj) {\n var result = 0, key;\n for (key in obj) {\n if (obj.hasOwnProperty(key) && key != \"toJSON\") { // Ignore fake IE7 toJSON.\n result++;\n }\n }\n\n return result;\n }\n\n function getOffset(element, type, positioned) {\n if (!type) {\n type = \"offset\";\n }\n\n var offset = element[type]();\n // clone ClientRect object to JS object (jQuery3)\n var result = {\n top: offset.top,\n right: offset.right,\n bottom: offset.bottom,\n left: offset.left\n };\n\n // IE10 touch zoom is living in a separate viewport\n if (support.browser.msie && (support.pointers || support.msPointers) && !positioned) {\n var sign = support.isRtl(element) ? 1 : -1;\n\n result.top -= (window.pageYOffset - (document.documentElement.scrollTop));\n result.left -= (window.pageXOffset + (sign * document.documentElement.scrollLeft));\n }\n\n return result;\n }\n\n var directions = {\n left: { reverse: \"right\" },\n right: { reverse: \"left\" },\n down: { reverse: \"up\" },\n up: { reverse: \"down\" },\n top: { reverse: \"bottom\" },\n bottom: { reverse: \"top\" },\n \"in\": { reverse: \"out\" },\n out: { reverse: \"in\" }\n };\n\n function parseEffects(input) {\n var effects = {};\n\n each((typeof input === \"string\" ? input.split(\" \") : input), function(idx) {\n effects[idx] = this;\n });\n\n return effects;\n }\n\n function fx(element) {\n return new kendo.effects.Element(element);\n }\n\n var effects = {};\n\n $.extend(effects, {\n enabled: true,\n Element: function(element) {\n this.element = $(element);\n },\n\n promise: function(element, options) {\n if (!element.is(\":visible\")) {\n element.css({ display: element.data(\"olddisplay\") || \"block\" }).css(\"display\");\n }\n\n if (options.hide) {\n element.data(\"olddisplay\", element.css(\"display\")).hide();\n }\n\n if (options.init) {\n options.init();\n }\n\n if (options.completeCallback) {\n options.completeCallback(element); // call the external complete callback with the element\n }\n\n element.dequeue();\n },\n\n disable: function() {\n this.enabled = false;\n this.promise = this.promiseShim;\n },\n\n enable: function() {\n this.enabled = true;\n this.promise = this.animatedPromise;\n }\n });\n\n effects.promiseShim = effects.promise;\n\n function prepareAnimationOptions(options, duration, reverse, complete) {\n if (typeof options === STRING) {\n // options is the list of effect names separated by space e.g. animate(element, \"fadeIn slideDown\")\n\n // only callback is provided e.g. animate(element, options, function() {});\n if (isFunction(duration)) {\n complete = duration;\n duration = 400;\n reverse = false;\n }\n\n if (isFunction(reverse)) {\n complete = reverse;\n reverse = false;\n }\n\n if (typeof duration === BOOLEAN) {\n reverse = duration;\n duration = 400;\n }\n\n options = {\n effects: options,\n duration: duration,\n reverse: reverse,\n complete: complete\n };\n }\n\n return extend({\n //default options\n effects: {},\n duration: 400, //jQuery default duration\n reverse: false,\n init: noop,\n teardown: noop,\n hide: false\n }, options, { completeCallback: options.complete, complete: noop }); // Move external complete callback, so deferred.resolve can be always executed.\n\n }\n\n function animate(element, options, duration, reverse, complete) {\n var idx = 0,\n length = element.length,\n instance;\n\n for (; idx < length; idx ++) {\n instance = $(element[idx]);\n instance.queue(function() {\n effects.promise(instance, prepareAnimationOptions(options, duration, reverse, complete));\n });\n }\n\n return element;\n }\n\n function toggleClass(element, classes, options, add) {\n if (classes) {\n classes = classes.split(\" \");\n\n each(classes, function(idx, value) {\n element.toggleClass(value, add);\n });\n }\n\n return element;\n }\n\n if (!(\"kendoAnimate\" in $.fn)) {\n extend($.fn, {\n kendoStop: function(clearQueue, gotoEnd) {\n return this.stop(clearQueue, gotoEnd);\n },\n\n kendoAnimate: function(options, duration, reverse, complete) {\n return animate(this, options, duration, reverse, complete);\n },\n\n kendoAddClass: function(classes, options) {\n return kendo.toggleClass(this, classes, options, true);\n },\n\n kendoRemoveClass: function(classes, options) {\n return kendo.toggleClass(this, classes, options, false);\n },\n kendoToggleClass: function(classes, options, toggle) {\n return kendo.toggleClass(this, classes, options, toggle);\n }\n });\n }\n\n var ampRegExp = /&/g,\n ltRegExp = //g;\n function htmlEncode(value) {\n return (\"\" + value).replace(ampRegExp, \"&\").replace(ltRegExp, \"<\").replace(gtRegExp, \">\").replace(quoteRegExp, \""\").replace(aposRegExp, \"'\");\n }\n\n function unescape(value) {\n var template;\n\n try {\n template = window.decodeURIComponent(value);\n } catch (error) {\n // If the string contains Unicode characters\n // the decodeURIComponent() will throw an error.\n // Therefore: convert to UTF-8 character\n template = value.replace(/%u([\\dA-F]{4})|%([\\dA-F]{2})/gi, function(_, m1, m2) {\n return String.fromCharCode(parseInt(\"0x\" + (m1 || m2), 16));\n });\n }\n\n return template;\n }\n\n var eventTarget = function(e) {\n return e.target;\n };\n\n if (support.touch) {\n\n eventTarget = function(e) {\n var touches = \"originalEvent\" in e ? e.originalEvent.changedTouches : \"changedTouches\" in e ? e.changedTouches : null;\n\n return touches ? document.elementFromPoint(touches[0].clientX, touches[0].clientY) : e.target;\n };\n\n each([\"swipe\", \"swipeLeft\", \"swipeRight\", \"swipeUp\", \"swipeDown\", \"doubleTap\", \"tap\"], function(m, value) {\n $.fn[value] = function(callback) {\n return this.on(value, callback);\n };\n });\n }\n\n if (support.touch) {\n if (!support.mobileOS) {\n support.mousedown = \"mousedown touchstart\";\n support.mouseup = \"mouseup touchend\";\n support.mousemove = \"mousemove touchmove\";\n support.mousecancel = \"mouseleave touchcancel\";\n support.click = \"click\";\n support.resize = \"resize\";\n } else {\n support.mousedown = \"touchstart\";\n support.mouseup = \"touchend\";\n support.mousemove = \"touchmove\";\n support.mousecancel = \"touchcancel\";\n support.click = \"touchend\";\n support.resize = \"orientationchange\";\n }\n } else if (support.pointers) {\n support.mousemove = \"pointermove\";\n support.mousedown = \"pointerdown\";\n support.mouseup = \"pointerup\";\n support.mousecancel = \"pointercancel\";\n support.click = \"pointerup\";\n support.resize = \"orientationchange resize\";\n } else if (support.msPointers) {\n support.mousemove = \"MSPointerMove\";\n support.mousedown = \"MSPointerDown\";\n support.mouseup = \"MSPointerUp\";\n support.mousecancel = \"MSPointerCancel\";\n support.click = \"MSPointerUp\";\n support.resize = \"orientationchange resize\";\n } else {\n support.mousemove = \"mousemove\";\n support.mousedown = \"mousedown\";\n support.mouseup = \"mouseup\";\n support.mousecancel = \"mouseleave\";\n support.click = \"click\";\n support.resize = \"resize\";\n }\n\n var wrapExpression = function(members, paramName) {\n var result = paramName || \"d\",\n index,\n idx,\n length,\n member,\n count = 1;\n\n for (idx = 0, length = members.length; idx < length; idx++) {\n member = members[idx];\n if (member !== \"\") {\n index = member.indexOf(\"[\");\n\n if (index !== 0) {\n if (index == -1) {\n member = \".\" + member;\n } else {\n count++;\n member = \".\" + member.substring(0, index) + \" || {})\" + member.substring(index);\n }\n }\n\n count++;\n result += member + ((idx < length - 1) ? \" || {})\" : \")\");\n }\n }\n return new Array(count).join(\"(\") + result;\n },\n localUrlRe = /^([a-z]+:)?\\/\\//i;\n\n extend(kendo, {\n widgets: [],\n _widgetRegisteredCallbacks: [],\n ui: kendo.ui || {},\n fx: kendo.fx || fx,\n effects: kendo.effects || effects,\n mobile: kendo.mobile || { },\n data: kendo.data || {},\n dataviz: kendo.dataviz || {},\n drawing: kendo.drawing || {},\n spreadsheet: { messages: {} },\n keys: {\n INSERT: 45,\n DELETE: 46,\n BACKSPACE: 8,\n TAB: 9,\n ENTER: 13,\n ESC: 27,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n END: 35,\n HOME: 36,\n SPACEBAR: 32,\n PAGEUP: 33,\n PAGEDOWN: 34,\n F2: 113,\n F10: 121,\n F12: 123,\n NUMPAD_PLUS: 107,\n NUMPAD_MINUS: 109,\n NUMPAD_DOT: 110\n },\n support: kendo.support || support,\n animate: kendo.animate || animate,\n ns: \"\",\n attr: function(value) {\n return \"data-\" + kendo.ns + value;\n },\n getShadows: getShadows,\n wrap: wrap,\n deepExtend: deepExtend,\n getComputedStyles: getComputedStyles,\n isScrollable: isScrollable,\n scrollLeft: scrollLeft,\n size: size,\n toCamelCase: toCamelCase,\n toHyphens: toHyphens,\n getOffset: kendo.getOffset || getOffset,\n parseEffects: kendo.parseEffects || parseEffects,\n toggleClass: kendo.toggleClass || toggleClass,\n directions: kendo.directions || directions,\n Observable: Observable,\n Class: Class,\n Template: Template,\n template: Template.compile.bind(Template),\n render: Template.render.bind(Template),\n stringify: JSON.stringify.bind(JSON),\n eventTarget: eventTarget,\n htmlEncode: htmlEncode,\n unescape: unescape,\n isLocalUrl: function(url) {\n return url && !localUrlRe.test(url);\n },\n\n expr: function(expression, safe, paramName) {\n expression = expression || \"\";\n\n if (typeof safe == STRING) {\n paramName = safe;\n safe = false;\n }\n\n paramName = paramName || \"d\";\n\n if (expression && expression.charAt(0) !== \"[\") {\n expression = \".\" + expression;\n }\n\n if (safe) {\n expression = expression.replace(/\"([^.]*)\\.([^\"]*)\"/g,'\"$1_$DOT$_$2\"');\n expression = expression.replace(/'([^.]*)\\.([^']*)'/g,\"'$1_$DOT$_$2'\");\n expression = wrapExpression(expression.split(\".\"), paramName);\n expression = expression.replace(/_\\$DOT\\$_/g, \".\");\n } else {\n expression = paramName + expression;\n }\n\n return expression;\n },\n\n getter: function(expression, safe) {\n var key = expression + safe;\n return getterCache[key] = getterCache[key] || new Function(\"d\", \"return \" + kendo.expr(expression, safe));\n },\n\n setter: function(expression) {\n return setterCache[expression] = setterCache[expression] || new Function(\"d,value\", kendo.expr(expression) + \"=value\");\n },\n\n accessor: function(expression) {\n return {\n get: kendo.getter(expression),\n set: kendo.setter(expression)\n };\n },\n\n guid: function() {\n var id = \"\", i, random, chars = \"abcdef\";\n\n id += chars[Math.floor(Math.random() * Math.floor(chars.length))];\n\n for (i = 1; i < 32; i++) {\n random = math.random() * 16 | 0;\n\n if (i == 8 || i == 12 || i == 16 || i == 20) {\n id += \"-\";\n }\n id += (i == 12 ? 4 : (i == 16 ? (random & 3 | 8) : random)).toString(16);\n }\n\n return id;\n },\n\n roleSelector: function(role) {\n return role.replace(/(\\S+)/g, \"[\" + kendo.attr(\"role\") + \"=$1],\").slice(0, -1);\n },\n\n directiveSelector: function(directives) {\n var selectors = directives.split(\" \");\n\n if (selectors) {\n for (var i = 0; i < selectors.length; i++) {\n if (selectors[i] != \"view\") {\n selectors[i] = selectors[i].replace(/(\\w*)(view|bar|strip|over)$/, \"$1-$2\");\n }\n }\n }\n\n return selectors.join(\" \").replace(/(\\S+)/g, \"kendo-mobile-$1,\").slice(0, -1);\n },\n\n triggeredByInput: function(e) {\n return (/^(label|input|textarea|select)$/i).test(e.target.tagName);\n },\n\n onWidgetRegistered: function(callback) {\n for (var i = 0, len = kendo.widgets.length; i < len; i++) {\n callback(kendo.widgets[i]);\n }\n\n kendo._widgetRegisteredCallbacks.push(callback);\n },\n\n logToConsole: function(message, type) {\n var console = window.console;\n\n if (!kendo.suppressLog && typeof(console) != \"undefined\" && console.log) {\n console[type || \"log\"](message);\n }\n }\n });\n\n var Widget = Observable.extend( {\n init: function(element, options) {\n var that = this;\n\n validatePackage();\n\n that.element = kendo.jQuery(element).handler(that);\n\n that.angular(\"init\", options);\n\n Observable.fn.init.call(that);\n\n var dataSource = options ? options.dataSource : null;\n var props;\n\n if (options) {\n props = (that.componentTypes || {})[(options || {}).componentType];\n }\n\n if (dataSource) {\n // avoid deep cloning the data source\n options = extend({}, options, { dataSource: {} });\n }\n\n options = that.options = extend(true, {}, that.options, that.defaults, props || {}, options);\n\n if (dataSource) {\n options.dataSource = dataSource;\n }\n\n if (!that.element.attr(kendo.attr(\"role\"))) {\n that.element.attr(kendo.attr(\"role\"), (options.name || \"\").toLowerCase());\n }\n\n that.element.data(\"kendo\" + options.prefix + options.name, that);\n\n that.bind(that.events, options);\n },\n\n events: [],\n\n options: {\n prefix: \"\"\n },\n\n _hasBindingTarget: function() {\n return !!this.element[0].kendoBindingTarget;\n },\n\n _tabindex: function(target) {\n target = target || this.wrapper;\n\n var element = this.element,\n TABINDEX = \"tabindex\",\n tabindex = target.attr(TABINDEX) || element.attr(TABINDEX);\n\n element.removeAttr(TABINDEX);\n\n target.attr(TABINDEX, !isNaN(tabindex) ? tabindex : 0);\n },\n\n setOptions: function(options) {\n this._clearCssClasses(options);\n this._setEvents(options);\n $.extend(this.options, options);\n this._applyCssClasses();\n },\n\n _setEvents: function(options) {\n var that = this,\n idx = 0,\n length = that.events.length,\n e;\n\n for (; idx < length; idx ++) {\n e = that.events[idx];\n if (that.options[e] && options[e]) {\n that.unbind(e, that.options[e]);\n if (that._events && that._events[e]) {\n delete that._events[e];\n }\n }\n }\n\n that.bind(that.events, options);\n },\n\n resize: function(force) {\n var size = this.getSize(),\n currentSize = this._size;\n\n if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this._size = size;\n this._resize(size, force);\n this.trigger(\"resize\", size);\n }\n },\n\n getSize: function() {\n return kendo.dimensions(this.element);\n },\n\n size: function(size) {\n if (!size) {\n return this.getSize();\n } else {\n this.setSize(size);\n }\n },\n\n setSize: $.noop,\n _resize: $.noop,\n\n destroy: function() {\n var that = this;\n\n that.element.removeData(\"kendo\" + that.options.prefix + that.options.name);\n that.element.removeData(\"handler\");\n that.unbind();\n },\n _destroy: function() {\n this.destroy();\n },\n angular: function() {},\n\n _muteAngularRebind: function(callback) {\n this._muteRebind = true;\n\n callback.call(this);\n\n this._muteRebind = false;\n },\n\n _applyCssClasses: function(element) {\n var protoOptions = this.__proto__.options,\n options = this.options,\n el = element || this.wrapper || this.element,\n classes = [],\n i, prop, validFill, widgetName;\n\n if (!kendo.cssProperties.propertyDictionary[protoOptions.name]) {\n return;\n }\n\n for (i = 0; i < cssPropertiesNames.length; i++) {\n prop = cssPropertiesNames[i];\n widgetName = this.options._altname || protoOptions.name;\n\n if (protoOptions.hasOwnProperty(prop)) {\n if (prop === \"themeColor\") {\n validFill = kendo.cssProperties.getValidClass({\n widget: widgetName,\n propName: \"fillMode\",\n value: options.fillMode\n });\n\n if (validFill && validFill.length) {\n classes.push(kendo.cssProperties.getValidClass({\n widget: widgetName,\n propName: prop,\n value: options[prop],\n fill: options.fillMode\n }));\n }\n } else {\n classes.push(kendo.cssProperties.getValidClass({\n widget: widgetName,\n propName: prop,\n value: options[prop]\n }));\n }\n }\n }\n\n el.addClass(classes.join(\" \"));\n },\n\n _ariaLabel: function(target) {\n var that = this,\n inputElm = that.element,\n inputId = inputElm.attr(\"id\"),\n labelElm = $(\"label[for=\\\"\" + inputId + \"\\\"]\"),\n ariaLabel = inputElm.attr(ARIA_LABEL),\n ariaLabelledBy = inputElm.attr(ARIA_LABELLEDBY),\n labelId;\n\n if (target[0] === inputElm[0]) {\n return;\n }\n\n if (ariaLabel) {\n target.attr(ARIA_LABEL, ariaLabel);\n } else if (ariaLabelledBy) {\n target.attr(ARIA_LABELLEDBY, ariaLabelledBy);\n } else if (labelElm.length) {\n labelId = labelElm.attr(\"id\") || that._generateLabelId(labelElm, inputId || kendo.guid());\n target.attr(ARIA_LABELLEDBY, labelId);\n }\n },\n\n _clearCssClasses: function(newOptions, element) {\n var protoOptions = this.__proto__.options,\n currentOptions = this.options,\n el = element || this.wrapper || this.element,\n i, prop, widgetName;\n\n if (!kendo.cssProperties.propertyDictionary[protoOptions.name]) {\n return;\n }\n\n for (i = 0; i < cssPropertiesNames.length; i++) {\n prop = cssPropertiesNames[i];\n widgetName = this.options._altname || protoOptions.name;\n\n if (protoOptions.hasOwnProperty(prop) && newOptions.hasOwnProperty(prop)) {\n if (prop === \"themeColor\") {\n el.removeClass(kendo.cssProperties.getValidClass({\n widget: widgetName,\n propName: prop,\n value: currentOptions[prop],\n fill: currentOptions.fillMode\n }));\n } else {\n if (prop === \"fillMode\") {\n el.removeClass(kendo.cssProperties.getValidClass({\n widget: widgetName,\n propName: \"themeColor\",\n value: currentOptions.themeColor,\n fill: currentOptions.fillMode\n }));\n }\n\n el.removeClass(kendo.cssProperties.getValidClass({\n widget: widgetName,\n propName: prop,\n value: currentOptions[prop]\n }));\n }\n }\n }\n },\n\n _generateLabelId: function(label, inputId) {\n var labelId = inputId + LABELIDPART;\n\n label.attr(\"id\", labelId);\n\n return labelId;\n },\n });\n\n var DataBoundWidget = Widget.extend({\n // Angular consumes these.\n dataItems: function() {\n return this.dataSource.flatView();\n },\n\n _angularItems: function(cmd) {\n var that = this;\n that.angular(cmd, function() {\n return {\n elements: that.items(),\n data: $.map(that.dataItems(), function(dataItem) {\n return { dataItem: dataItem };\n })\n };\n });\n }\n });\n\n kendo.dimensions = function(element, dimensions) {\n var domElement = element[0];\n\n if (dimensions) {\n element.css(dimensions);\n }\n\n return { width: domElement.offsetWidth, height: domElement.offsetHeight };\n };\n\n kendo.notify = noop;\n\n var templateRegExp = /template$/i,\n jsonRegExp = /^\\s*(?:\\{(?:.|\\r\\n|\\n)*\\}|\\[(?:.|\\r\\n|\\n)*\\])\\s*$/,\n jsonFormatRegExp = /^\\{(\\d+)(:[^\\}]+)?\\}|^\\[[A-Za-z_]+\\]$/,\n dashRegExp = /([A-Z])/g;\n\n function parseOption(element, option) {\n var value;\n\n if (option.indexOf(\"data\") === 0) {\n option = option.substring(4);\n option = option.charAt(0).toLowerCase() + option.substring(1);\n }\n\n option = option.replace(dashRegExp, \"-$1\");\n value = element.getAttribute(\"data-\" + kendo.ns + option);\n\n if (value === null) {\n value = undefined$1;\n } else if (value === \"null\") {\n value = null;\n } else if (value === \"true\") {\n value = true;\n } else if (value === \"false\") {\n value = false;\n } else if (numberRegExp.test(value) && option != \"mask\" && option != \"format\") {\n value = parseFloat(value);\n } else if (jsonRegExp.test(value) && !jsonFormatRegExp.test(value)) {\n value = new Function(\"return (\" + value + \")\")();\n }\n\n return value;\n }\n\n function parseOptions(element, options, source) {\n var result = {},\n option,\n value,\n role = element.getAttribute(\"data-\" + kendo.ns + \"role\");\n\n for (option in options) {\n value = parseOption(element, option);\n\n if (value !== undefined$1) {\n\n if (templateRegExp.test(option) && role != \"drawer\") {\n if (typeof value === \"string\") {\n if ($(\"#\" + value).length) {\n value = kendo.template($(\"#\" + value).html());\n } else if (source) {\n value = kendo.template(source[value]);\n }\n } else {\n value = element.getAttribute(option);\n }\n }\n\n result[option] = value;\n }\n }\n\n return result;\n }\n\n kendo.initWidget = function(element, options, roles) {\n var result,\n option,\n widget,\n idx,\n length,\n role,\n value,\n dataSource,\n fullPath,\n widgetKeyRegExp;\n\n // Preserve backwards compatibility with (element, options, namespace) signature, where namespace was kendo.ui\n if (!roles) {\n roles = kendo.ui.roles;\n } else if (roles.roles) {\n roles = roles.roles;\n }\n\n element = element.nodeType ? element : element[0];\n\n role = element.getAttribute(\"data-\" + kendo.ns + \"role\");\n\n if (!role) {\n return;\n }\n\n fullPath = role.indexOf(\".\") === -1;\n\n // look for any widget that may be already instantiated based on this role.\n // The prefix used is unknown, hence the regexp\n //\n\n if (fullPath) {\n widget = roles[role];\n } else { // full namespace path - like kendo.ui.Widget\n widget = kendo.getter(role)(window);\n }\n\n var data = $(element).data(),\n widgetKey = widget ? \"kendo\" + widget.fn.options.prefix + widget.fn.options.name : \"\";\n\n if (fullPath) {\n widgetKeyRegExp = new RegExp(\"^kendo.*\" + role + \"$\", \"i\");\n } else { // full namespace path - like kendo.ui.Widget\n widgetKeyRegExp = new RegExp(\"^\" + widgetKey + \"$\", \"i\");\n }\n\n for (var key in data) {\n if (key.match(widgetKeyRegExp)) {\n // we have detected a widget of the same kind - save its reference, we will set its options\n if (key === widgetKey) {\n result = data[key];\n } else {\n return data[key];\n }\n }\n }\n\n if (!widget) {\n return;\n }\n\n dataSource = parseOption(element, \"dataSource\");\n\n options = $.extend({}, parseOptions(element, $.extend({}, widget.fn.options, widget.fn.defaults) ), options);\n\n if (dataSource) {\n if (typeof dataSource === STRING) {\n options.dataSource = kendo.getter(dataSource)(window);\n } else {\n options.dataSource = dataSource;\n }\n }\n\n for (idx = 0, length = widget.fn.events.length; idx < length; idx++) {\n option = widget.fn.events[idx];\n\n value = parseOption(element, option);\n\n if (value !== undefined$1) {\n options[option] = kendo.getter(value)(window);\n }\n }\n\n if (!result) {\n result = new widget(element, options);\n } else if (!$.isEmptyObject(options)) {\n result.setOptions(options);\n }\n\n return result;\n };\n\n kendo.rolesFromNamespaces = function(namespaces) {\n var roles = [],\n idx,\n length;\n\n if (!namespaces[0]) {\n namespaces = [kendo.ui, kendo.dataviz.ui];\n }\n\n for (idx = 0, length = namespaces.length; idx < length; idx ++) {\n roles[idx] = namespaces[idx].roles;\n }\n\n return extend.apply(null, [{}].concat(roles.reverse()));\n };\n\n kendo.init = function(element) {\n var roles = kendo.rolesFromNamespaces(slice.call(arguments, 1));\n\n $(element).find(\"[data-\" + kendo.ns + \"role]\").addBack().each(function() {\n kendo.initWidget(this, {}, roles);\n });\n };\n\n kendo.destroy = function(element) {\n $(element).find(\"[data-\" + kendo.ns + \"role]\").addBack().each(function() {\n var data = $(this).data();\n\n for (var key in data) {\n if (key.indexOf(\"kendo\") === 0 && typeof data[key].destroy === FUNCTION) {\n data[key].destroy();\n }\n }\n });\n };\n\n function containmentComparer(a, b) {\n return $.contains(a, b) ? -1 : 1;\n }\n\n function resizableWidget() {\n var widget = $(this);\n return ($.inArray(widget.attr(\"data-\" + kendo.ns + \"role\"), [\"slider\", \"rangeslider\", \"breadcrumb\"]) > -1) || widget.is(\":visible\");\n }\n\n kendo.resize = function(element, force) {\n var widgets = $(element).find(\"[data-\" + kendo.ns + \"role]\").addBack().filter(resizableWidget);\n\n if (!widgets.length) {\n return;\n }\n\n // sort widgets based on their parent-child relation\n var widgetsArray = $.makeArray(widgets);\n widgetsArray.sort(containmentComparer);\n\n // resize widgets\n $.each(widgetsArray, function() {\n var widget = kendo.widgetInstance($(this));\n if (widget) {\n widget.resize(force);\n }\n });\n };\n\n kendo.parseOptions = parseOptions;\n\n extend(kendo.ui, {\n Widget: Widget,\n DataBoundWidget: DataBoundWidget,\n roles: {},\n progress: function(container, toggle, options) {\n var mask = container.find(\".k-loading-mask\"),\n support = kendo.support,\n browser = support.browser,\n isRtl, leftRight, webkitCorrection, containerScrollLeft, cssClass;\n\n options = $.extend({}, {\n width: \"100%\",\n height: \"100%\",\n top: container.scrollTop(),\n opacity: false\n }, options);\n\n cssClass = options.opacity ? 'k-loading-mask k-opaque' : 'k-loading-mask';\n\n if (toggle) {\n if (!mask.length) {\n isRtl = support.isRtl(container);\n leftRight = isRtl ? \"right\" : \"left\";\n containerScrollLeft = kendo.scrollLeft(container);\n webkitCorrection = browser.webkit ? (!isRtl ? 0 : container[0].scrollWidth - container.width() - 2 * containerScrollLeft) : 0;\n\n mask = $(kendo.format(\"
{1}
\", cssClass, kendo.ui.progress.messages.loading))\n .width(options.width).height(options.height)\n .css(\"top\", options.top)\n .css(leftRight, Math.abs(containerScrollLeft) + webkitCorrection)\n .prependTo(container);\n }\n } else if (mask) {\n mask.remove();\n }\n },\n plugin: function(widget, register, prefix) {\n var name = widget.fn.options.name,\n getter;\n\n register = register || kendo.ui;\n prefix = prefix || \"\";\n\n register[name] = widget;\n\n register.roles[name.toLowerCase()] = widget;\n\n getter = \"getKendo\" + prefix + name;\n name = \"kendo\" + prefix + name;\n\n var widgetEntry = { name: name, widget: widget, prefix: prefix || \"\" };\n kendo.widgets.push(widgetEntry);\n\n for (var i = 0, len = kendo._widgetRegisteredCallbacks.length; i < len; i++) {\n kendo._widgetRegisteredCallbacks[i](widgetEntry);\n }\n\n $.fn[name] = function(options) {\n var value = this,\n args;\n\n if (typeof options === STRING) {\n args = slice.call(arguments, 1);\n\n this.each(function() {\n var widget = $.data(this, name),\n method,\n result;\n\n if (!widget) {\n throw new Error(kendo.format(\"Cannot call method '{0}' of {1} before it is initialized\", options, name));\n }\n\n method = widget[options];\n\n if (typeof method !== FUNCTION) {\n throw new Error(kendo.format(\"Cannot find method '{0}' of {1}\", options, name));\n }\n\n result = method.apply(widget, args);\n\n if (result !== undefined$1) {\n value = result;\n return false;\n }\n });\n } else {\n this.each(function() {\n return new widget(this, options);\n });\n }\n\n return value;\n };\n\n $.fn[name].widget = widget;\n\n $.fn[getter] = function() {\n return this.data(name);\n };\n }\n });\n\n kendo.ui.progress.messages = {\n loading: \"Loading...\"\n };\n\n var ContainerNullObject = { bind: function() { return this; }, nullObject: true, options: {} };\n\n var MobileWidget = Widget.extend({\n init: function(element, options) {\n Widget.fn.init.call(this, element, options);\n this.element.autoApplyNS();\n this.wrapper = this.element;\n this.element.addClass(\"km-widget\");\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n this.element.kendoDestroy();\n },\n\n options: {\n prefix: \"Mobile\"\n },\n\n events: [],\n\n view: function() {\n var viewElement = this.element.closest(kendo.roleSelector(\"view splitview modalview drawer\"));\n return kendo.widgetInstance(viewElement, kendo.mobile.ui) || ContainerNullObject;\n },\n\n viewHasNativeScrolling: function() {\n var view = this.view();\n return view && view.options.useNativeScrolling;\n },\n\n container: function() {\n var element = this.element.closest(kendo.roleSelector(\"view layout modalview drawer splitview\"));\n return kendo.widgetInstance(element.eq(0), kendo.mobile.ui) || ContainerNullObject;\n }\n });\n\n extend(kendo.mobile, {\n init: function(element) {\n kendo.init(element, kendo.mobile.ui, kendo.ui, kendo.dataviz.ui);\n },\n\n appLevelNativeScrolling: function() {\n return kendo.mobile.application && kendo.mobile.application.options && kendo.mobile.application.options.useNativeScrolling;\n },\n\n roles: {},\n\n ui: {\n Widget: MobileWidget,\n DataBoundWidget: DataBoundWidget.extend(MobileWidget.prototype),\n roles: {},\n plugin: function(widget) {\n kendo.ui.plugin(widget, kendo.mobile.ui, \"Mobile\");\n }\n }\n });\n\n deepExtend(kendo.dataviz, {\n init: function(element) {\n kendo.init(element, kendo.dataviz.ui);\n },\n ui: {\n roles: {},\n themes: {},\n views: [],\n plugin: function(widget) {\n kendo.ui.plugin(widget, kendo.dataviz.ui);\n }\n },\n roles: {}\n });\n\n kendo.touchScroller = function(elements, options) {\n // return the first touch scroller\n if (!options) { options = {}; }\n\n options.useNative = true;\n\n return $(elements).map(function(idx, element) {\n element = $(element);\n if (support.kineticScrollNeeded && kendo.mobile.ui.Scroller && !element.data(\"kendoMobileScroller\")) {\n element.kendoMobileScroller(options);\n return element.data(\"kendoMobileScroller\");\n } else {\n return false;\n }\n })[0];\n };\n\n kendo.preventDefault = function(e) {\n e.preventDefault();\n };\n\n kendo.widgetInstance = function(element, suites) {\n var role = element.data(kendo.ns + \"role\"),\n widgets = [], i, length,\n elementData = element.data(\"kendoView\");\n\n if (role) {\n // HACK!!! mobile view scroller widgets are instantiated on data-role=\"content\" elements. We need to discover them when resizing.\n if (role === \"content\") {\n role = \"scroller\";\n }\n\n // kendoEditorToolbar is not a public plugin, thus it does not exist in kendo.ui.roles.\n // Therefore, this is needed in order to be resized when placed in Kendo Window.\n if (role === \"editortoolbar\") {\n var editorToolbar = element.data(\"kendoEditorToolbar\");\n if (editorToolbar) {\n return editorToolbar;\n }\n }\n\n // kendo.View is not a ui plugin\n\n if (role === \"view\" && elementData) {\n return elementData;\n }\n\n if (suites) {\n if (suites[0]) {\n for (i = 0, length = suites.length; i < length; i ++) {\n widgets.push(suites[i].roles[role]);\n }\n } else {\n widgets.push(suites.roles[role]);\n }\n }\n else {\n widgets = [ kendo.ui.roles[role], kendo.dataviz.ui.roles[role], kendo.mobile.ui.roles[role] ];\n }\n\n if (role.indexOf(\".\") >= 0) {\n widgets = [ kendo.getter(role)(window) ];\n }\n\n for (i = 0, length = widgets.length; i < length; i ++) {\n var widget = widgets[i];\n if (widget) {\n var instance = element.data(\"kendo\" + widget.fn.options.prefix + widget.fn.options.name);\n if (instance) {\n return instance;\n }\n }\n }\n }\n };\n\n kendo.onResize = function(callback) {\n var handler = callback;\n if (support.mobileOS.android) {\n handler = function() { setTimeout(callback, 600); };\n }\n\n $(window).on(support.resize, handler);\n return handler;\n };\n\n kendo.unbindResize = function(callback) {\n $(window).off(support.resize, callback);\n };\n\n kendo.attrValue = function(element, key) {\n return element.data(kendo.ns + key);\n };\n\n kendo.days = {\n Sunday: 0,\n Monday: 1,\n Tuesday: 2,\n Wednesday: 3,\n Thursday: 4,\n Friday: 5,\n Saturday: 6\n };\n\n function focusable(element, isTabIndexNotNaN) {\n var nodeName = element.nodeName.toLowerCase();\n\n return (/input|select|textarea|button|object/.test(nodeName) ?\n !element.disabled :\n nodeName === \"a\" ?\n element.href || isTabIndexNotNaN :\n isTabIndexNotNaN\n ) &&\n visible(element);\n }\n\n function visible(element) {\n return $.expr.pseudos.visible(element) &&\n !$(element).parents().addBack().filter(function() {\n return $.css(this,\"visibility\") === \"hidden\";\n }).length;\n }\n\n $.extend($.expr.pseudos, {\n kendoFocusable: function(element) {\n var idx = $.attr(element, \"tabindex\");\n return focusable(element, !isNaN(idx) && idx > -1);\n }\n });\n\n var MOUSE_EVENTS = [\"mousedown\", \"mousemove\", \"mouseenter\", \"mouseleave\", \"mouseover\", \"mouseout\", \"mouseup\", \"click\"];\n var EXCLUDE_BUST_CLICK_SELECTOR = \"label, input, [data-rel=external]\";\n\n var MouseEventNormalizer = {\n setupMouseMute: function() {\n var idx = 0,\n length = MOUSE_EVENTS.length,\n element = document.documentElement;\n\n if (MouseEventNormalizer.mouseTrap || !support.eventCapture) {\n return;\n }\n\n MouseEventNormalizer.mouseTrap = true;\n\n MouseEventNormalizer.bustClick = false;\n MouseEventNormalizer.captureMouse = false;\n\n var handler = function(e) {\n if (MouseEventNormalizer.captureMouse) {\n if (e.type === \"click\") {\n if (MouseEventNormalizer.bustClick && !$(e.target).is(EXCLUDE_BUST_CLICK_SELECTOR)) {\n e.preventDefault();\n e.stopPropagation();\n }\n } else {\n e.stopPropagation();\n }\n }\n };\n\n for (; idx < length; idx++) {\n element.addEventListener(MOUSE_EVENTS[idx], handler, true);\n }\n },\n\n muteMouse: function(e) {\n MouseEventNormalizer.captureMouse = true;\n if (e.data.bustClick) {\n MouseEventNormalizer.bustClick = true;\n }\n clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\n },\n\n unMuteMouse: function() {\n clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\n MouseEventNormalizer.mouseTrapTimeoutID = setTimeout(function() {\n MouseEventNormalizer.captureMouse = false;\n MouseEventNormalizer.bustClick = false;\n }, 400);\n }\n };\n\n var eventMap = {\n down: \"touchstart mousedown\",\n move: \"mousemove touchmove\",\n up: \"mouseup touchend touchcancel\",\n cancel: \"mouseleave touchcancel\"\n };\n\n if (support.touch && (support.mobileOS.ios || support.mobileOS.android)) {\n eventMap = {\n down: \"touchstart\",\n move: \"touchmove\",\n up: \"touchend touchcancel\",\n cancel: \"touchcancel\"\n };\n } else if (support.pointers) {\n eventMap = {\n down: \"pointerdown\",\n move: \"pointermove\",\n up: \"pointerup\",\n cancel: \"pointercancel pointerleave\"\n };\n } else if (support.msPointers) {\n eventMap = {\n down: \"MSPointerDown\",\n move: \"MSPointerMove\",\n up: \"MSPointerUp\",\n cancel: \"MSPointerCancel MSPointerLeave\"\n };\n }\n\n if (support.msPointers && !(\"onmspointerenter\" in window)) { // IE10\n // Create MSPointerEnter/MSPointerLeave events using mouseover/out and event-time checks\n $.each({\n MSPointerEnter: \"MSPointerOver\",\n MSPointerLeave: \"MSPointerOut\"\n }, function( orig, fix ) {\n $.event.special[ orig ] = {\n delegateType: fix,\n bindType: fix,\n\n handle: function( event ) {\n var ret,\n target = this,\n related = event.relatedTarget,\n handleObj = event.handleObj;\n\n // For mousenter/leave call the handler if related is outside the target.\n // NB: No relatedTarget if the mouse left/entered the browser window\n if ( !related || (related !== target && !$.contains( target, related )) ) {\n event.type = handleObj.origType;\n ret = handleObj.handler.apply( this, arguments );\n event.type = fix;\n }\n return ret;\n }\n };\n });\n }\n\n\n var getEventMap = function(e) { return (eventMap[e] || e); },\n eventRegEx = /([^ ]+)/g;\n\n kendo.applyEventMap = function(events, ns) {\n events = events.replace(eventRegEx, getEventMap);\n\n if (ns) {\n events = events.replace(eventRegEx, \"$1.\" + ns);\n }\n\n return events;\n };\n\n kendo.keyDownHandler = function(e, widget) {\n var events = widget._events.kendoKeydown;\n\n if (!events) {\n return true;\n }\n\n events = events.slice();\n e.sender = widget;\n e.preventKendoKeydown = false;\n for (var idx = 0, length = events.length; idx < length; idx++) {\n events[idx].call(widget, e);\n }\n\n return !e.preventKendoKeydown;\n };\n\n var on = $.fn.on;\n\n function kendoJQuery(selector, context) {\n return new kendoJQuery.fn.init(selector, context);\n }\n\n noDepricateExtend(true, kendoJQuery, $);\n\n kendoJQuery.fn = kendoJQuery.prototype = new $();\n\n kendoJQuery.fn.constructor = kendoJQuery;\n\n kendoJQuery.fn.init = function(selector, context) {\n if (context && context instanceof $ && !(context instanceof kendoJQuery)) {\n context = kendoJQuery(context);\n }\n\n return $.fn.init.call(this, selector, context, rootjQuery);\n };\n\n kendoJQuery.fn.init.prototype = kendoJQuery.fn;\n\n var rootjQuery = kendoJQuery(document);\n\n extend(kendoJQuery.fn, {\n handler: function(handler) {\n this.data(\"handler\", handler);\n return this;\n },\n\n autoApplyNS: function(ns) {\n this.data(\"kendoNS\", ns || kendo.guid());\n return this;\n },\n\n on: function() {\n var that = this,\n ns = that.data(\"kendoNS\");\n\n // support for event map signature\n if (arguments.length === 1) {\n return on.call(that, arguments[0]);\n }\n\n var context = that,\n args = slice.call(arguments);\n\n if (typeof args[args.length - 1] === UNDEFINED) {\n args.pop();\n }\n\n var callback = args[args.length - 1],\n events = kendo.applyEventMap(args[0], ns);\n\n // setup mouse trap\n if (support.mouseAndTouchPresent && events.search(/mouse|click/) > -1 && this[0] !== document.documentElement) {\n MouseEventNormalizer.setupMouseMute();\n\n var selector = args.length === 2 ? null : args[1],\n bustClick = events.indexOf(\"click\") > -1 && events.indexOf(\"touchend\") > -1;\n\n on.call(this,\n {\n touchstart: MouseEventNormalizer.muteMouse,\n touchend: MouseEventNormalizer.unMuteMouse\n },\n selector,\n {\n bustClick: bustClick\n });\n }\n\n if (arguments[0].indexOf(\"keydown\") !== -1 && args[1] && args[1].options) {\n args[0] = events;\n var widget = args[1];\n var keyDownCallBack = args[args.length - 1];\n args[args.length - 1] = function(e) {\n if (kendo.keyDownHandler(e, widget)) {\n return keyDownCallBack.apply(this, [e]);\n }\n };\n on.apply(that, args);\n return that;\n }\n\n if (typeof callback === STRING) {\n context = that.data(\"handler\");\n callback = context[callback];\n\n args[args.length - 1] = function(e) {\n callback.call(context, e);\n };\n }\n\n args[0] = events;\n\n on.apply(that, args);\n\n return that;\n },\n\n kendoDestroy: function(ns) {\n ns = ns || this.data(\"kendoNS\");\n\n if (ns) {\n this.off(\".\" + ns);\n }\n\n return this;\n }\n });\n\n kendo.jQuery = kendoJQuery;\n kendo.eventMap = eventMap;\n\n kendo.timezone = (function() {\n var months = { Jan: 0, Feb: 1, Mar: 2, Apr: 3, May: 4, Jun: 5, Jul: 6, Aug: 7, Sep: 8, Oct: 9, Nov: 10, Dec: 11 };\n var days = { Sun: 0, Mon: 1, Tue: 2, Wed: 3, Thu: 4, Fri: 5, Sat: 6 };\n\n function ruleToDate(year, rule) {\n var date;\n var targetDay;\n var ourDay;\n var month = rule[3];\n var on = rule[4];\n var time = rule[5];\n var cache = rule[8];\n\n if (!cache) {\n rule[8] = cache = {};\n }\n\n if (cache[year]) {\n return cache[year];\n }\n\n if (!isNaN(on)) {\n date = new Date(Date.UTC(year, months[month], on, time[0], time[1], time[2], 0));\n } else if (on.indexOf(\"last\") === 0) {\n date = new Date(Date.UTC(year, months[month] + 1, 1, time[0] - 24, time[1], time[2], 0));\n\n targetDay = days[on.substr(4, 3)];\n ourDay = date.getUTCDay();\n\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay - (targetDay > ourDay ? 7 : 0));\n } else if (on.indexOf(\">=\") >= 0) {\n date = new Date(Date.UTC(year, months[month], on.substr(5), time[0], time[1], time[2], 0));\n\n targetDay = days[on.substr(0, 3)];\n ourDay = date.getUTCDay();\n\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay + (targetDay < ourDay ? 7 : 0));\n } else if (on.indexOf(\"<=\") >= 0) {\n date = new Date(Date.UTC(year, months[month], on.substr(5), time[0], time[1], time[2], 0));\n\n targetDay = days[on.substr(0, 3)];\n ourDay = date.getUTCDay();\n\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay - (targetDay > ourDay ? 7 : 0));\n }\n\n return cache[year] = date;\n }\n\n function findRule(utcTime, rules, zone) {\n rules = rules[zone];\n\n if (!rules) {\n var time = zone.split(\":\");\n var offset = 0;\n\n if (time.length > 1) {\n offset = time[0] * 60 + Number(time[1]);\n }\n\n return [-1000000, 'max', '-', 'Jan', 1, [0, 0, 0], offset, '-'];\n }\n\n var year = new Date(utcTime).getUTCFullYear();\n\n rules = jQuery.grep(rules, function(rule) {\n var from = rule[0];\n var to = rule[1];\n\n return from <= year && (to >= year || (from == year && to == \"only\") || to == \"max\");\n });\n\n rules.push(utcTime);\n\n rules.sort(function(a, b) {\n if (typeof a != \"number\") {\n a = Number(ruleToDate(year, a));\n }\n\n if (typeof b != \"number\") {\n b = Number(ruleToDate(year, b));\n }\n\n return a - b;\n });\n\n var rule = rules[jQuery.inArray(utcTime, rules) - 1] || rules[rules.length - 1];\n\n return isNaN(rule) ? rule : null;\n }\n\n function findZone(utcTime, zones, timezone) {\n var zoneRules = zones[timezone];\n\n if (typeof zoneRules === \"string\") {\n zoneRules = zones[zoneRules];\n }\n\n if (!zoneRules) {\n throw new Error('Timezone \"' + timezone + '\" is either incorrect, or kendo.timezones.min.js is not included.');\n }\n\n for (var idx = zoneRules.length - 1; idx >= 0; idx--) {\n var until = zoneRules[idx][3];\n\n if (until && utcTime > until) {\n break;\n }\n }\n\n var zone = zoneRules[idx + 1];\n\n if (!zone) {\n throw new Error('Timezone \"' + timezone + '\" not found on ' + utcTime + \".\");\n }\n\n return zone;\n }\n\n function zoneAndRule(utcTime, zones, rules, timezone) {\n if (typeof utcTime != NUMBER) {\n utcTime = Date.UTC(utcTime.getFullYear(), utcTime.getMonth(),\n utcTime.getDate(), utcTime.getHours(), utcTime.getMinutes(),\n utcTime.getSeconds(), utcTime.getMilliseconds());\n }\n\n var zone = findZone(utcTime, zones, timezone);\n\n return {\n zone: zone,\n rule: findRule(utcTime, rules, zone[1])\n };\n }\n\n function offset(utcTime, timezone) {\n if (timezone == \"Etc/UTC\" || timezone == \"Etc/GMT\") {\n return 0;\n }\n\n var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n var zone = info.zone;\n var rule = info.rule;\n\n return kendo.parseFloat(rule ? zone[0] - rule[6] : zone[0]);\n }\n\n function abbr(utcTime, timezone) {\n var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n var zone = info.zone;\n var rule = info.rule;\n\n var base = zone[2];\n\n if (base.indexOf(\"/\") >= 0) {\n return base.split(\"/\")[rule && +rule[6] ? 1 : 0];\n } else if (base.indexOf(\"%s\") >= 0) {\n return base.replace(\"%s\", (!rule || rule[7] == \"-\") ? '' : rule[7]);\n }\n\n return base;\n }\n\n function convert(date, fromOffset, toOffset) {\n var tempToOffset = toOffset;\n var diff;\n\n if (typeof fromOffset == STRING) {\n fromOffset = this.offset(date, fromOffset);\n }\n\n if (typeof toOffset == STRING) {\n toOffset = this.offset(date, toOffset);\n }\n\n var fromLocalOffset = date.getTimezoneOffset();\n\n date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\n\n var toLocalOffset = date.getTimezoneOffset();\n\n if (typeof tempToOffset == STRING) {\n tempToOffset = this.offset(date, tempToOffset);\n }\n\n diff = (toLocalOffset - fromLocalOffset) + (toOffset - tempToOffset);\n\n return new Date(date.getTime() + diff * 60000);\n }\n\n function apply(date, timezone) {\n return this.convert(date, date.getTimezoneOffset(), timezone);\n }\n\n function remove(date, timezone) {\n return this.convert(date, timezone, date.getTimezoneOffset());\n }\n\n function toLocalDate(time) {\n return this.apply(new Date(time), \"Etc/UTC\");\n }\n\n return {\n zones: {},\n rules: {},\n offset: offset,\n convert: convert,\n apply: apply,\n remove: remove,\n abbr: abbr,\n toLocalDate: toLocalDate\n };\n })();\n\n kendo.date = (function() {\n var MS_PER_MINUTE = 60000,\n MS_PER_DAY = 86400000;\n\n function adjustDST(date, hours) {\n if (hours === 0 && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n return true;\n }\n\n return false;\n }\n\n function setDayOfWeek(date, day, dir) {\n var hours = date.getHours();\n\n dir = dir || 1;\n day = ((day - date.getDay()) + (7 * dir)) % 7;\n\n date.setDate(date.getDate() + day);\n adjustDST(date, hours);\n }\n\n function dayOfWeek(date, day, dir) {\n date = new Date(date);\n setDayOfWeek(date, day, dir);\n return date;\n }\n\n function firstDayOfMonth(date) {\n return new Date(\n date.getFullYear(),\n date.getMonth(),\n 1\n );\n }\n\n function lastDayOfMonth(date) {\n var last = new Date(date.getFullYear(), date.getMonth() + 1, 0),\n first = firstDayOfMonth(date),\n timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n\n if (timeOffset) {\n last.setHours(first.getHours() + (timeOffset / 60));\n }\n\n return last;\n }\n\n function firstDayOfYear(date) {\n return new Date(date.getFullYear(), 0, 1);\n }\n\n function lastDayOfYear(date) {\n return new Date(date.getFullYear(), 11, 31);\n }\n\n function moveDateToWeekStart(date, weekStartDay) {\n if (weekStartDay !== 1) {\n return addDays(dayOfWeek(date, weekStartDay, -1), 4);\n }\n\n return addDays(date, (4 - (date.getDay() || 7)));\n }\n\n function calcWeekInYear(date, weekStartDay) {\n var firstWeekInYear = new Date(date.getFullYear(), 0, 1, -6);\n\n var newDate = moveDateToWeekStart(date, weekStartDay);\n\n var diffInMS = newDate.getTime() - firstWeekInYear.getTime();\n\n var days = Math.floor(diffInMS / MS_PER_DAY);\n\n return 1 + Math.floor(days / 7);\n }\n\n function weekInYear(date, weekStartDay) {\n if (weekStartDay === undefined$1) {\n weekStartDay = kendo.culture().calendar.firstDay;\n }\n\n var prevWeekDate = addDays(date, -7);\n var nextWeekDate = addDays(date, 7);\n\n var weekNumber = calcWeekInYear(date, weekStartDay);\n\n if (weekNumber === 0) {\n return calcWeekInYear(prevWeekDate, weekStartDay) + 1;\n }\n\n if (weekNumber === 53 && calcWeekInYear(nextWeekDate, weekStartDay) > 1) {\n return 1;\n }\n\n return weekNumber;\n }\n\n function getDate(date) {\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n adjustDST(date, 0);\n return date;\n }\n\n function toUtcTime(date) {\n return Date.UTC(date.getFullYear(), date.getMonth(),\n date.getDate(), date.getHours(), date.getMinutes(),\n date.getSeconds(), date.getMilliseconds());\n }\n\n function getMilliseconds(date) {\n return toInvariantTime(date).getTime() - getDate(toInvariantTime(date));\n }\n\n function isInTimeRange(value, min, max) {\n var msMin = getMilliseconds(min),\n msMax = getMilliseconds(max),\n msValue;\n\n if (!value || msMin == msMax) {\n return true;\n }\n\n if (min >= max) {\n max += MS_PER_DAY;\n }\n\n msValue = getMilliseconds(value);\n\n if (msMin > msValue) {\n msValue += MS_PER_DAY;\n }\n\n if (msMax < msMin) {\n msMax += MS_PER_DAY;\n }\n\n return msValue >= msMin && msValue <= msMax;\n }\n\n function isInDateRange(value, min, max) {\n var msMin = min.getTime(),\n msMax = max.getTime(),\n msValue;\n\n if (msMin >= msMax) {\n msMax += MS_PER_DAY;\n }\n\n msValue = value.getTime();\n\n return msValue >= msMin && msValue <= msMax;\n }\n\n function addDays(date, offset) {\n var hours = date.getHours();\n date = new Date(date);\n\n setTime(date, offset * MS_PER_DAY);\n adjustDST(date, hours);\n return date;\n }\n\n function setTime(date, milliseconds, ignoreDST) {\n var offset = date.getTimezoneOffset();\n var difference;\n\n date.setTime(date.getTime() + milliseconds);\n\n if (!ignoreDST) {\n difference = date.getTimezoneOffset() - offset;\n date.setTime(date.getTime() + difference * MS_PER_MINUTE);\n }\n }\n\n function setHours(date, time) {\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());\n adjustDST(date, time.getHours());\n return date;\n }\n\n function today() {\n return getDate(new Date());\n }\n\n function isToday(date) {\n return getDate(date).getTime() == today().getTime();\n }\n\n function toInvariantTime(date) {\n var staticDate = new Date(1980, 1, 1, 0, 0, 0);\n\n if (date) {\n staticDate.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n\n return staticDate;\n }\n\n function addYear(date, offset) {\n var currentDate = new Date(date);\n\n return new Date(currentDate.setFullYear(currentDate.getFullYear() + offset));\n }\n\n return {\n adjustDST: adjustDST,\n dayOfWeek: dayOfWeek,\n setDayOfWeek: setDayOfWeek,\n getDate: getDate,\n isInDateRange: isInDateRange,\n isInTimeRange: isInTimeRange,\n isToday: isToday,\n nextDay: function(date) {\n return addDays(date, 1);\n },\n previousDay: function(date) {\n return addDays(date, -1);\n },\n toUtcTime: toUtcTime,\n MS_PER_DAY: MS_PER_DAY,\n MS_PER_HOUR: 60 * MS_PER_MINUTE,\n MS_PER_MINUTE: MS_PER_MINUTE,\n setTime: setTime,\n setHours: setHours,\n addDays: addDays,\n today: today,\n toInvariantTime: toInvariantTime,\n firstDayOfMonth: firstDayOfMonth,\n lastDayOfMonth: lastDayOfMonth,\n weekInYear: weekInYear,\n getMilliseconds: getMilliseconds,\n firstDayOfYear: firstDayOfYear,\n lastDayOfYear: lastDayOfYear,\n nextYear: function(date) {\n return addYear(date, 1);\n },\n previousYear: function(date) {\n return addYear(date, -1);\n }\n };\n })();\n\n\n kendo.stripWhitespace = function(element) {\n if (document.createNodeIterator) {\n var iterator = document.createNodeIterator(element, NodeFilter.SHOW_TEXT, function(node) {\n return node.parentNode == element ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n }, false);\n\n while (iterator.nextNode()) {\n if (iterator.referenceNode && !iterator.referenceNode.textContent.trim()) {\n iterator.referenceNode.parentNode.removeChild(iterator.referenceNode);\n }\n }\n } else { // IE7/8 support\n for (var i = 0; i < element.childNodes.length; i++) {\n var child = element.childNodes[i];\n\n if (child.nodeType == 3 && !/\\S/.test(child.nodeValue)) {\n element.removeChild(child);\n i--;\n }\n\n if (child.nodeType == 1) {\n kendo.stripWhitespace(child);\n }\n }\n }\n };\n\n var animationFrame = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.oRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function(callback) { setTimeout(callback, 1000 / 60); };\n\n kendo.animationFrame = function(callback) {\n animationFrame.call(window, callback);\n };\n\n var animationQueue = [];\n\n kendo.queueAnimation = function(callback) {\n animationQueue[animationQueue.length] = callback;\n if (animationQueue.length === 1) {\n kendo.runNextAnimation();\n }\n };\n\n kendo.runNextAnimation = function() {\n kendo.animationFrame(function() {\n if (animationQueue[0]) {\n animationQueue.shift()();\n if (animationQueue[0]) {\n kendo.runNextAnimation();\n }\n }\n });\n };\n\n kendo.parseQueryStringParams = function(url) {\n var queryString = url.split('?')[1] || \"\",\n params = {},\n paramParts = queryString.split(/&|=/),\n length = paramParts.length,\n idx = 0;\n\n for (; idx < length; idx += 2) {\n if (paramParts[idx] !== \"\") {\n params[decodeURIComponent(paramParts[idx])] = decodeURIComponent(paramParts[idx + 1]);\n }\n }\n\n return params;\n };\n\n kendo.elementUnderCursor = function(e) {\n if (typeof e.x.client != \"undefined\") {\n return document.elementFromPoint(e.x.client, e.y.client);\n }\n };\n\n kendo.wheelDeltaY = function(jQueryEvent) {\n var e = jQueryEvent.originalEvent,\n deltaY = e.wheelDeltaY,\n delta;\n\n if (e.wheelDelta) { // Webkit and IE\n if (deltaY === undefined$1 || deltaY) { // IE does not have deltaY, thus always scroll (horizontal scrolling is treated as vertical)\n delta = e.wheelDelta;\n }\n } else if (e.detail && e.axis === e.VERTICAL_AXIS) { // Firefox and Opera\n delta = (-e.detail) * 10;\n }\n\n return delta;\n };\n\n kendo.throttle = function(fn, delay) {\n var timeout;\n var lastExecTime = 0;\n\n if (!delay || delay <= 0) {\n return fn;\n }\n\n var throttled = function() {\n var that = this;\n var elapsed = +new Date() - lastExecTime;\n var args = arguments;\n\n function exec() {\n fn.apply(that, args);\n lastExecTime = +new Date();\n }\n\n // first execution\n if (!lastExecTime) {\n return exec();\n }\n\n if (timeout) {\n clearTimeout(timeout);\n }\n\n if (elapsed > delay) {\n exec();\n } else {\n timeout = setTimeout(exec, delay - elapsed);\n }\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n };\n\n return throttled;\n };\n\n\n kendo.caret = function(element, start, end) {\n var rangeElement;\n var isPosition = start !== undefined$1;\n\n if (end === undefined$1) {\n end = start;\n }\n\n if (element[0]) {\n element = element[0];\n }\n\n if (isPosition && element.disabled) {\n return;\n }\n\n try {\n if (element.selectionStart !== undefined$1) {\n if (isPosition) {\n element.focus();\n var mobile = support.mobileOS;\n if (mobile.wp || mobile.android) {// without the timeout the caret is at the end of the input\n setTimeout(function() { element.setSelectionRange(start, end); }, 0);\n }\n else {\n element.setSelectionRange(start, end);\n }\n } else {\n start = [element.selectionStart, element.selectionEnd];\n }\n } else if (document.selection) {\n if ($(element).is(\":visible\")) {\n element.focus();\n }\n\n rangeElement = element.createTextRange();\n\n if (isPosition) {\n rangeElement.collapse(true);\n rangeElement.moveStart(\"character\", start);\n rangeElement.moveEnd(\"character\", end - start);\n rangeElement.select();\n } else {\n var rangeDuplicated = rangeElement.duplicate(),\n selectionStart, selectionEnd;\n\n rangeElement.moveToBookmark(document.selection.createRange().getBookmark());\n rangeDuplicated.setEndPoint('EndToStart', rangeElement);\n selectionStart = rangeDuplicated.text.length;\n selectionEnd = selectionStart + rangeElement.text.length;\n\n start = [selectionStart, selectionEnd];\n }\n }\n } catch (e) {\n /* element is not focused or it is not in the DOM */\n start = [];\n }\n\n return start;\n };\n\n kendo.compileMobileDirective = function(element, scope) {\n var angular = window.angular;\n\n element.attr(\"data-\" + kendo.ns + \"role\", element[0].tagName.toLowerCase().replace('kendo-mobile-', '').replace('-', ''));\n\n angular.element(element).injector().invoke([\"$compile\", function($compile) {\n $compile(element)(scope);\n\n if (!/^\\$(digest|apply)$/.test(scope.$$phase)) {\n scope.$digest();\n }\n }]);\n\n return kendo.widgetInstance(element, kendo.mobile.ui);\n };\n\n kendo.antiForgeryTokens = function() {\n var tokens = { },\n csrf_token = $(\"meta[name=csrf-token],meta[name=_csrf]\").attr(\"content\"),\n csrf_param = $(\"meta[name=csrf-param],meta[name=_csrf_header]\").attr(\"content\");\n\n $(\"input[name^='__RequestVerificationToken']\").each(function() {\n tokens[this.name] = this.value;\n });\n\n if (csrf_param !== undefined$1 && csrf_token !== undefined$1) {\n tokens[csrf_param] = csrf_token;\n }\n\n return tokens;\n };\n\n kendo.cycleForm = function(form) {\n var firstElement = form.find(\"input, .k-widget, .k-dropdownlist, .k-combobox\").first();\n var lastElement = form.find(\"button, .k-button\").last();\n\n function focus(el) {\n var widget = kendo.widgetInstance(el);\n\n if (widget && widget.focus) {\n widget.focus();\n } else {\n el.trigger(\"focus\");\n }\n }\n\n lastElement.on(\"keydown\", function(e) {\n if (e.keyCode == kendo.keys.TAB && !e.shiftKey) {\n e.preventDefault();\n focus(firstElement);\n }\n });\n\n firstElement.on(\"keydown\", function(e) {\n if (e.keyCode == kendo.keys.TAB && e.shiftKey) {\n e.preventDefault();\n focus(lastElement);\n }\n });\n };\n\n kendo.focusElement = function(element) {\n var scrollTopPositions = [];\n var scrollableParents = element.parentsUntil(\"body\")\n .filter(function(index, element) {\n var computedStyle = kendo.getComputedStyles(element, [\"overflow\"]);\n return computedStyle.overflow !== \"visible\";\n })\n .add(window);\n\n scrollableParents.each(function(index, parent) {\n scrollTopPositions[index] = $(parent).scrollTop();\n });\n\n try {\n //The setActive method does not cause the document to scroll to the active object in the current page\n element[0].setActive();\n } catch (e) {\n element[0].focus();\n }\n\n scrollableParents.each(function(index, parent) {\n $(parent).scrollTop(scrollTopPositions[index]);\n });\n };\n\n kendo.focusNextElement = function() {\n if (document.activeElement) {\n var focussable = $(\":kendoFocusable\");\n var index = focussable.index(document.activeElement);\n\n if (index > -1) {\n var nextElement = focussable[index + 1] || focussable[0];\n nextElement.focus();\n }\n }\n };\n\n kendo.trim = function(value) {\n if (!!value) {\n return value.toString().trim();\n } else {\n return \"\";\n }\n };\n\n kendo.getWidgetFocusableElement = function(element) {\n var nextFocusable = element.closest(\":kendoFocusable\"),\n widgetInstance = kendo.widgetInstance(element),\n target;\n\n if (nextFocusable.length) {\n target = nextFocusable;\n } else if (widgetInstance) {\n target = widgetInstance.options.name === 'Editor' ?\n $(widgetInstance.body) :\n widgetInstance.wrapper.find(\":kendoFocusable\").first();\n } else {\n target = element;\n }\n\n return target;\n };\n\n kendo.addAttribute = function(element, attribute, value) {\n var current = element.attr(attribute) || \"\";\n\n if (current.indexOf(value) < 0) {\n element.attr(attribute, (current + \" \" + value).trim());\n }\n };\n\n kendo.removeAttribute = function(element, attribute, value) {\n var current = element.attr(attribute) || \"\";\n\n element.attr(attribute, current.replace(value, \"\").trim());\n };\n\n kendo.toggleAttribute = function(element, attribute, value) {\n var current = element.attr(attribute) || \"\";\n\n if (current.indexOf(value) < 0) {\n kendo.addAttribute(element, attribute, value);\n } else {\n kendo.removeAttribute(element, attribute, value);\n }\n };\n\n kendo.matchesMedia = function(mediaQuery) {\n var media = kendo._bootstrapToMedia(mediaQuery) || mediaQuery;\n return support.matchMedia && window.matchMedia(media).matches;\n };\n\n kendo._bootstrapToMedia = function(bootstrapMedia) {\n return {\n \"xs\": \"(max-width: 576px)\",\n \"sm\": \"(min-width: 576px)\",\n \"md\": \"(min-width: 768px)\",\n \"lg\": \"(min-width: 992px)\",\n \"xl\": \"(min-width: 1200px)\"\n }[bootstrapMedia];\n };\n\n kendo.fileGroupMap = {\n audio: [\".aif\", \".iff\", \".m3u\", \".m4a\", \".mid\", \".mp3\", \".mpa\", \".wav\", \".wma\", \".ogg\", \".wav\", \".wma\", \".wpl\"],\n video: [\".3g2\", \".3gp\", \".avi\", \".asf\", \".flv\", \".m4u\", \".rm\", \".h264\", \".m4v\", \".mkv\", \".mov\", \".mp4\", \".mpg\",\n \".rm\", \".swf\", \".vob\", \".wmv\"],\n image: [\".ai\", \".dds\", \".heic\", \".jpe\", \"jfif\", \".jif\", \".jp2\", \".jps\", \".eps\", \".bmp\", \".gif\", \".jpeg\",\n \".jpg\", \".png\", \".ps\", \".psd\", \".svg\", \".svgz\", \".tif\", \".tiff\"],\n txt: [\".doc\", \".docx\", \".log\", \".pages\", \".tex\", \".wpd\", \".wps\", \".odt\", \".rtf\", \".text\", \".txt\", \".wks\"],\n presentation: [\".key\", \".odp\", \".pps\", \".ppt\", \".pptx\"],\n data: [\".xlr\", \".xls\", \".xlsx\"],\n programming: [\".tmp\", \".bak\", \".msi\", \".cab\", \".cpl\", \".cur\", \".dll\", \".dmp\", \".drv\", \".icns\", \".ico\", \".link\",\n \".sys\", \".cfg\", \".ini\", \".asp\", \".aspx\", \".cer\", \".csr\", \".css\", \".dcr\", \".htm\", \".html\", \".js\",\n \".php\", \".rss\", \".xhtml\"],\n pdf: [\".pdf\"],\n config: [\".apk\", \".app\", \".bat\", \".cgi\", \".com\", \".exe\", \".gadget\", \".jar\", \".wsf\"],\n zip: [\".7z\", \".cbr\", \".gz\", \".sitx\", \".arj\", \".deb\", \".pkg\", \".rar\", \".rpm\", \".tar.gz\", \".z\", \".zip\", \".zipx\"],\n \"disc-image\": [\".dmg\", \".iso\", \".toast\", \".vcd\", \".bin\", \".cue\", \".mdf\"]\n };\n\n kendo.getFileGroup = function(extension, withPrefix) {\n var fileTypeMap = kendo.fileGroupMap;\n var groups = Object.keys(fileTypeMap);\n var type = \"file\";\n\n if (extension === undefined$1 || !extension.length) {\n return type;\n }\n\n for (var i = 0; i < groups.length; i += 1) {\n var extensions = fileTypeMap[groups[i]];\n\n if (extensions.indexOf(extension.toLowerCase()) > -1) {\n return withPrefix ? \"file-\" + groups[i] : groups[i];\n }\n }\n\n return type;\n };\n\n kendo.getFileSizeMessage = function(size) {\n var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n\n if (size === 0) {\n return '0 Byte';\n }\n\n var i = parseInt(Math.floor(Math.log(size) / Math.log(1024)), 10);\n return Math.round(size / Math.pow(1024, i), 2) + ' ' + sizes[i];\n };\n\n kendo.selectorFromClasses = function(classes) {\n return \".\" + classes.split(\" \").join(\".\");\n };\n\n // Standardized Properties and CSS classes\n\n var themeColorValues = ['base', 'primary', 'secondary', 'tertiary', 'inherit', 'info', 'success', 'warning', 'error', 'dark', 'light', 'inverse'];\n var fillValues = ['solid', 'outline', 'flat'];\n //var postitionValues = ['edge', 'outside', 'inside'];\n var shapeValues = ['rectangle', 'square'];\n var sizeValues = [ ['small', 'sm'], ['medium', 'md'], ['large', 'lg'] ];\n var roundedValues = [ ['small', 'sm'], ['medium', 'md'], ['large', 'lg'] ];\n //var alignValues = [ ['top start', 'top-start'], ['top end', 'top-end'], ['bottom start', 'bottom-start'], ['bottom end', 'bottom-end'] ];\n var positionModeValues = [ 'fixed', 'static', 'sticky', 'absolute' ];\n var resizeValues = [ 'both', 'horizontal', 'vertical' ];\n var overflowValues = [ 'auto', 'hidden', 'visible', 'scroll', 'clip' ];\n\n kendo.cssProperties = (function() {\n var defaultValues = {},\n propertyDictionary = {};\n\n function registerPrefix(widget, prefix) {\n var dict = kendo.cssProperties.propertyDictionary;\n\n if (!dict[widget]) {\n dict[widget] = {};\n }\n\n dict[widget][PREFIX] = prefix;\n }\n\n function registerValues(widget, args) {\n var dict = kendo.cssProperties.propertyDictionary,\n i, j, prop, values, newValues, currentValue;\n\n for (i = 0; i < args.length; i++) {\n prop = args[i].prop;\n newValues = args[i].values;\n\n if (!dict[widget][prop]) {\n dict[widget][prop] = {};\n }\n\n values = dict[widget][prop];\n\n for (j = 0; j < newValues.length; j++) {\n currentValue = newValues[j];\n\n if (isArray(newValues[j])) {\n values[currentValue[0]] = currentValue[1];\n } else {\n values[currentValue] = currentValue;\n }\n }\n }\n }\n\n function registerCssClass(propName, value, shorthand) {\n if (!defaultValues[propName]) {\n defaultValues[propName] = {};\n }\n\n defaultValues[propName][value] = shorthand || value;\n }\n\n function registerCssClasses(propName, arr) {\n for (var i = 0; i < arr.length; i++) {\n if (isArray(arr[i])) {\n registerCssClass(propName, arr[i][0], arr[i][1]);\n } else {\n registerCssClass(propName, arr[i]);\n }\n }\n }\n\n function getValidClass(args) {\n var widget = args.widget,\n propName = args.propName,\n value = args.value,\n fill = args.fill,\n cssProperties = kendo.cssProperties,\n defaultValues = cssProperties.defaultValues[propName],\n widgetProperties = cssProperties.propertyDictionary[widget],\n widgetValues, validValue, prefix;\n\n if (!widgetProperties) {\n return \"\";\n }\n\n widgetValues = widgetProperties[propName];\n validValue = widgetValues ? widgetValues[value] || defaultValues[value] : defaultValues[value];\n\n if (validValue) {\n if (propName === \"themeColor\") {\n prefix = widgetProperties[PREFIX] + fill + \"-\";\n } else if (propName === \"positionMode\") {\n prefix = \"k-pos-\";\n } else if (propName === \"rounded\") {\n prefix = \"k-rounded-\";\n } else if (propName === \"resize\") {\n prefix = \"k-resize-\";\n } else if (propName === \"overflow\") {\n prefix = \"k-overflow-\";\n } else {\n prefix = widgetProperties[PREFIX];\n }\n\n return prefix + validValue;\n } else {\n return \"\";\n }\n }\n\n registerCssClasses(\"themeColor\", themeColorValues);\n registerCssClasses(\"fillMode\", fillValues);\n registerCssClasses(\"shape\", shapeValues);\n registerCssClasses(\"size\", sizeValues);\n registerCssClasses(\"positionMode\", positionModeValues);\n registerCssClasses(\"rounded\", roundedValues);\n registerCssClasses(\"resize\", resizeValues);\n registerCssClasses(\"overflow\", overflowValues);\n\n return {\n positionModeValues: positionModeValues,\n roundedValues: roundedValues,\n sizeValues: sizeValues,\n shapeValues: shapeValues,\n fillModeValues: fillValues,\n themeColorValues: themeColorValues,\n\n defaultValues: defaultValues,\n propertyDictionary: propertyDictionary,\n\n registerValues: registerValues,\n getValidClass: getValidClass,\n registerPrefix: registerPrefix\n };\n }());\n\n //To do: delete below after implementing new styles and classes for BottomNavigation\n kendo.registerCssClass = function(propName, value, shorthand) {\n if (!kendo.propertyToCssClassMap[propName]) {\n kendo.propertyToCssClassMap[propName] = {};\n }\n\n kendo.propertyToCssClassMap[propName][value] = shorthand || value;\n };\n\n kendo.registerCssClasses = function(propName, arr) {\n for (var i = 0; i < arr.length; i++) {\n if (isArray(arr[i])) {\n kendo.registerCssClass(propName, arr[i][0], arr[i][1]);\n } else {\n kendo.registerCssClass(propName, arr[i]);\n }\n }\n };\n\n kendo.getValidCssClass = function(prefix, propName, value) {\n var validValue = kendo.propertyToCssClassMap[propName][value];\n\n if (validValue) {\n return prefix + validValue;\n }\n };\n\n kendo.propertyToCssClassMap = {};\n\n kendo.registerCssClasses(\"themeColor\", themeColorValues);\n kendo.registerCssClasses(\"fill\", fillValues);\n //kendo.registerCssClasses(\"postition\", postitionValues);\n kendo.registerCssClasses(\"shape\", shapeValues);\n kendo.registerCssClasses(\"size\", sizeValues);\n //kendo.registerCssClasses(\"align\", alignValues);\n kendo.registerCssClasses(\"positionMode\", positionModeValues);\n\n // jQuery deferred helpers\n\n // influenced from: https://gist.github.com/fearphage/4341799\n kendo.whenAll = function(array) {\n var resolveValues = arguments.length == 1 && Array.isArray(array) ? array : Array.prototype.slice.call(arguments),\n length = resolveValues.length,\n remaining = length,\n deferred = $.Deferred(),\n i = 0,\n failed = 0,\n rejectContexts = Array(length),\n rejectValues = Array(length),\n resolveContexts = Array(length),\n value;\n\n function updateFunc(index, contexts, values) {\n return function() {\n if (values != resolveValues) {\n failed++;\n }\n\n deferred.notifyWith(\n contexts[index] = this,\n values[index] = Array.prototype.slice.call(arguments)\n );\n\n if (!(--remaining)) {\n deferred[(!failed ? 'resolve' : 'reject') + 'With'](contexts, values);\n }\n };\n }\n\n for (; i < length; i++) {\n if ((value = resolveValues[i]) && kendo.isFunction(value.promise)) {\n value.promise()\n .done(updateFunc(i, resolveContexts, resolveValues))\n .fail(updateFunc(i, rejectContexts, rejectValues));\n }\n\n else {\n deferred.notifyWith(this, value);\n --remaining;\n }\n }\n\n if (!remaining) {\n deferred.resolveWith(resolveContexts, resolveValues);\n }\n\n return deferred.promise();\n };\n\n // kendo.saveAs -----------------------------------------------\n (function() {\n function postToProxy(dataURI, fileName, proxyURL, proxyTarget) {\n var form = $(\"
\").attr({\n action: proxyURL,\n method: \"POST\",\n target: proxyTarget\n });\n\n var data = kendo.antiForgeryTokens();\n data.fileName = fileName;\n\n var parts = dataURI.split(\";base64,\");\n data.contentType = parts[0].replace(\"data:\", \"\");\n data.base64 = parts[1];\n\n for (var name in data) {\n if (data.hasOwnProperty(name)) {\n $('').attr({\n value: data[name],\n name: name,\n type: \"hidden\"\n }).appendTo(form);\n }\n }\n\n form.appendTo(\"body\").submit().remove();\n }\n\n var fileSaver = document.createElement(\"a\");\n var downloadAttribute = \"download\" in fileSaver && !kendo.support.browser.edge;\n\n function saveAsBlob(dataURI, fileName) {\n var blob = dataURI; // could be a Blob object\n\n if (typeof dataURI == \"string\") {\n var parts = dataURI.split(\";base64,\");\n var contentType = parts[0];\n var base64 = atob(parts[1]);\n var array = new Uint8Array(base64.length);\n\n for (var idx = 0; idx < base64.length; idx++) {\n array[idx] = base64.charCodeAt(idx);\n }\n blob = new Blob([array.buffer], { type: contentType });\n }\n\n navigator.msSaveBlob(blob, fileName);\n }\n\n function saveAsDataURI(dataURI, fileName) {\n if (window.Blob && dataURI instanceof Blob) {\n dataURI = URL.createObjectURL(dataURI);\n }\n\n fileSaver.download = fileName;\n fileSaver.href = dataURI;\n\n var e = document.createEvent(\"MouseEvents\");\n e.initMouseEvent(\"click\", true, false, window,\n 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n\n fileSaver.dispatchEvent(e);\n setTimeout(function() {\n URL.revokeObjectURL(dataURI);\n });\n }\n\n kendo.saveAs = function(options) {\n var save = postToProxy;\n\n if (!options.forceProxy) {\n if (downloadAttribute) {\n save = saveAsDataURI;\n } else if (navigator.msSaveBlob) {\n save = saveAsBlob;\n }\n }\n\n save(options.dataURI, options.fileName, options.proxyURL, options.proxyTarget);\n };\n })();\n\n // kendo proxySetters\n kendo.proxyModelSetters = function proxyModelSetters(data) {\n var observable = {};\n\n Object.keys(data || {}).forEach(function(property) {\n Object.defineProperty(observable, property, {\n get: function() {\n return data[property];\n },\n set: function(value) {\n data[property] = value;\n data.dirty = true;\n }\n });\n });\n\n return observable;\n };\n\n kendo.getSeriesColors = function() {\n var seriesColorsTemplate = '
' +\n '
' +\n '
' +\n '
' +\n '
' +\n '
',\n series = $(seriesColorsTemplate),\n colors = [];\n\n series.appendTo($('body'));\n\n series.each(function(i, item) {\n colors.push($(item).css(\"background-color\"));\n });\n\n series.remove();\n\n return colors;\n };\n\n kendo.isElement = function(element) {\n return element instanceof Element || element instanceof HTMLDocument;\n };\n\n // Kendo defaults\n (function() {\n\n kendo.defaults = kendo.defaults || {};\n kendo.setDefaults = function(key, value) {\n var path = key.split(\".\");\n var curr = kendo.defaults;\n\n key = path.pop();\n\n path.forEach(function(part) {\n if (curr[part] === undefined$1) {\n curr[part] = {};\n }\n\n curr = curr[part];\n });\n\n if (value.constructor === Object) {\n curr[key] = deepExtend({}, curr[key], value);\n } else {\n curr[key] = value;\n }\n };\n\n })();\n\n // Implement type() as it has been depricated in jQuery\n (function() {\n kendo.class2type = {};\n\n jQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n function( _i, name ) {\n kendo.class2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n } );\n\n kendo.type = function(obj) {\n if ( obj == null ) {\n return obj + \"\";\n }\n\n // Support: Android <=2.3 only (functionish RegExp)\n return typeof obj === \"object\" || typeof obj === \"function\" ?\n kendo.class2type[Object.prototype.toString.call(obj)] || \"object\" :\n typeof obj;\n };\n }());\n\n var KendoLicensing = { validatePackage: function() {},setScriptKey: function() {} };\n\n window.KendoLicensing = {\n setScriptKey: KendoLicensing.setScriptKey\n };\n\n function validatePackage() {\n KendoLicensing.validatePackage(packageMetadata);\n }\n\n })(jQuery, window);\n\n var __meta__$w = {\n id: \"fx\",\n name: \"Effects\",\n category: \"framework\",\n description: \"Required for animation effects in all Kendo UI widgets.\",\n depends: [ \"core\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n fx = kendo.effects,\n each = $.each,\n extend = $.extend,\n support = kendo.support,\n browser = support.browser,\n transforms = support.transforms,\n transitions = support.transitions,\n scaleProperties = { scale: 0, scalex: 0, scaley: 0, scale3d: 0 },\n translateProperties = { translate: 0, translatex: 0, translatey: 0, translate3d: 0 },\n hasZoom = (typeof document.documentElement.style.zoom !== \"undefined\") && !transforms,\n matrix3dRegExp = /matrix3?d?\\s*\\(.*,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?/i,\n cssParamsRegExp = /^(-?[\\d\\.\\-]+)?[\\w\\s]*,?\\s*(-?[\\d\\.\\-]+)?[\\w\\s]*/i,\n translateXRegExp = /translatex?$/i,\n oldEffectsRegExp = /(zoom|fade|expand)(\\w+)/,\n singleEffectRegExp = /(zoom|fade|expand)/,\n unitRegExp = /[xy]$/i,\n transformProps = [\"perspective\", \"rotate\", \"rotatex\", \"rotatey\", \"rotatez\", \"rotate3d\", \"scale\", \"scalex\", \"scaley\", \"scalez\", \"scale3d\", \"skew\", \"skewx\", \"skewy\", \"translate\", \"translatex\", \"translatey\", \"translatez\", \"translate3d\", \"matrix\", \"matrix3d\"],\n transform2d = [\"rotate\", \"scale\", \"scalex\", \"scaley\", \"skew\", \"skewx\", \"skewy\", \"translate\", \"translatex\", \"translatey\", \"matrix\"],\n transform2units = { \"rotate\": \"deg\", scale: \"\", skew: \"px\", translate: \"px\" },\n cssPrefix = transforms.css,\n round = Math.round,\n BLANK = \"\",\n PX = \"px\",\n NONE = \"none\",\n AUTO = \"auto\",\n WIDTH = \"width\",\n HEIGHT = \"height\",\n HIDDEN = \"hidden\",\n ORIGIN = \"origin\",\n ABORT_ID = \"abortId\",\n OVERFLOW = \"overflow\",\n TRANSLATE = \"translate\",\n POSITION = \"position\",\n COMPLETE_CALLBACK = \"completeCallback\",\n TRANSITION = cssPrefix + \"transition\",\n TRANSFORM = cssPrefix + \"transform\",\n BACKFACE = cssPrefix + \"backface-visibility\",\n PERSPECTIVE = cssPrefix + \"perspective\",\n DEFAULT_PERSPECTIVE = \"1500px\",\n TRANSFORM_PERSPECTIVE = \"perspective(\" + DEFAULT_PERSPECTIVE + \")\",\n directions = {\n left: {\n reverse: \"right\",\n property: \"left\",\n transition: \"translatex\",\n vertical: false,\n modifier: -1\n },\n right: {\n reverse: \"left\",\n property: \"left\",\n transition: \"translatex\",\n vertical: false,\n modifier: 1\n },\n down: {\n reverse: \"up\",\n property: \"top\",\n transition: \"translatey\",\n vertical: true,\n modifier: 1\n },\n up: {\n reverse: \"down\",\n property: \"top\",\n transition: \"translatey\",\n vertical: true,\n modifier: -1\n },\n top: {\n reverse: \"bottom\"\n },\n bottom: {\n reverse: \"top\"\n },\n \"in\": {\n reverse: \"out\",\n modifier: -1\n },\n out: {\n reverse: \"in\",\n modifier: 1\n },\n\n vertical: {\n reverse: \"vertical\"\n },\n\n horizontal: {\n reverse: \"horizontal\"\n }\n };\n\n kendo.directions = directions;\n\n extend($.fn, {\n kendoStop: function(clearQueue, gotoEnd) {\n if (transitions) {\n return fx.stopQueue(this, clearQueue || false, gotoEnd || false);\n } else {\n return this.stop(clearQueue, gotoEnd);\n }\n }\n });\n\n /* jQuery support for all transform animations (FF 3.5/3.6, Opera 10.x, IE9 */\n\n if (transforms && !transitions) {\n each(transform2d, function(idx, value) {\n $.fn[value] = function(val) {\n if (typeof val == \"undefined\") {\n return animationProperty(this, value);\n } else {\n var that = $(this)[0],\n transformValue = value + \"(\" + val + transform2units[value.replace(unitRegExp, \"\")] + \")\";\n\n if (that.style.cssText.indexOf(TRANSFORM) == -1) {\n $(this).css(TRANSFORM, transformValue);\n } else {\n that.style.cssText = that.style.cssText.replace(new RegExp(value + \"\\\\(.*?\\\\)\", \"i\"), transformValue);\n }\n }\n return this;\n };\n\n $.fx.step[value] = function(fx) {\n $(fx.elem)[value](fx.now);\n };\n });\n\n var curProxy = $.fx.prototype.cur;\n $.fx.prototype.cur = function() {\n if (transform2d.indexOf(this.prop) != -1) {\n return parseFloat($(this.elem)[this.prop]());\n }\n\n return curProxy.apply(this, arguments);\n };\n }\n\n kendo.toggleClass = function(element, classes, options, add) {\n if (classes) {\n classes = classes.split(\" \");\n\n if (transitions) {\n options = extend({\n exclusive: \"all\",\n duration: 400,\n ease: \"ease-out\"\n }, options);\n\n element.css(TRANSITION, options.exclusive + \" \" + options.duration + \"ms \" + options.ease);\n setTimeout(function() {\n element.css(TRANSITION, \"\").css(HEIGHT);\n }, options.duration); // TODO: this should fire a kendoAnimate session instead.\n }\n\n each(classes, function(idx, value) {\n element.toggleClass(value, add);\n });\n }\n\n return element;\n };\n\n kendo.parseEffects = function(input, mirror) {\n var effects = {};\n\n if (typeof input === \"string\") {\n each(input.split(\" \"), function(idx, value) {\n var redirectedEffect = !singleEffectRegExp.test(value),\n resolved = value.replace(oldEffectsRegExp, function(match, $1, $2) {\n return $1 + \":\" + $2.toLowerCase();\n }), // Support for old zoomIn/fadeOut style, now deprecated.\n effect = resolved.split(\":\"),\n direction = effect[1],\n effectBody = {};\n\n if (effect.length > 1) {\n effectBody.direction = (mirror && redirectedEffect ? directions[direction].reverse : direction);\n }\n\n effects[effect[0]] = effectBody;\n });\n } else {\n each(input, function(idx) {\n var direction = this.direction;\n\n if (direction && mirror && !singleEffectRegExp.test(idx)) {\n this.direction = directions[direction].reverse;\n }\n\n effects[idx] = this;\n });\n }\n\n return effects;\n };\n\n function parseInteger(value) {\n return parseInt(value, 10);\n }\n\n function parseCSS(element, property) {\n return parseInteger(element.css(property));\n }\n\n function keys(obj) {\n var acc = [];\n for (var propertyName in obj) {\n acc.push(propertyName);\n }\n return acc;\n }\n\n function strip3DTransforms(properties) {\n for (var key in properties) {\n if (transformProps.indexOf(key) != -1 && transform2d.indexOf(key) == -1) {\n delete properties[key];\n }\n }\n\n return properties;\n }\n\n function normalizeCSS(element, properties) {\n var transformation = [], cssValues = {}, lowerKey, key, value, isTransformed;\n\n for (key in properties) {\n lowerKey = key.toLowerCase();\n isTransformed = transforms && transformProps.indexOf(lowerKey) != -1;\n\n if (!support.hasHW3D && isTransformed && transform2d.indexOf(lowerKey) == -1) {\n delete properties[key];\n } else {\n value = properties[key];\n\n if (isTransformed) {\n transformation.push(key + \"(\" + value + \")\");\n } else {\n cssValues[key] = value;\n }\n }\n }\n\n if (transformation.length) {\n cssValues[TRANSFORM] = transformation.join(\" \");\n }\n\n return cssValues;\n }\n\n if (transitions) {\n extend(fx, {\n transition: function(element, properties, options) {\n var css,\n delay = 0,\n oldKeys = element.data(\"keys\") || [],\n timeoutID;\n\n options = extend({\n duration: 200,\n ease: \"ease-out\",\n complete: null,\n exclusive: \"all\"\n },\n options\n );\n\n var stopTransitionCalled = false;\n\n var stopTransition = function() {\n if (!stopTransitionCalled) {\n stopTransitionCalled = true;\n\n if (timeoutID) {\n clearTimeout(timeoutID);\n timeoutID = null;\n }\n\n element\n .removeData(ABORT_ID)\n .dequeue()\n .css(TRANSITION, \"\")\n .css(TRANSITION);\n\n options.complete.call(element);\n }\n };\n\n options.duration = $.fx ? $.fx.speeds[options.duration] || options.duration : options.duration;\n\n css = normalizeCSS(element, properties);\n\n $.merge(oldKeys, keys(css));\n\n if ($.hasOwnProperty(\"uniqueSort\")) {\n element\n .data(\"keys\", $.uniqueSort(oldKeys))\n .height();\n } else {\n element\n .data(\"keys\", $.unique(oldKeys))\n .height();\n }\n\n element.css(TRANSITION, options.exclusive + \" \" + options.duration + \"ms \" + options.ease).css(TRANSITION);\n element.css(css).css(TRANSFORM);\n\n /**\n * Use transitionEnd event for browsers who support it - but duplicate it with setTimeout, as the transitionEnd event will not be triggered if no CSS properties change.\n * This should be cleaned up at some point (widget by widget), and refactored to widgets not relying on the complete callback if no transition occurs.\n *\n * For IE9 and below, resort to setTimeout.\n */\n if (transitions.event) {\n element.one(transitions.event, stopTransition);\n if (options.duration !== 0) {\n delay = 500;\n }\n }\n\n timeoutID = setTimeout(stopTransition, options.duration + delay);\n element.data(ABORT_ID, timeoutID);\n element.data(COMPLETE_CALLBACK, stopTransition);\n },\n\n stopQueue: function(element, clearQueue, gotoEnd) {\n var cssValues,\n taskKeys = element.data(\"keys\"),\n retainPosition = (!gotoEnd && taskKeys),\n completeCallback = element.data(COMPLETE_CALLBACK);\n\n if (retainPosition) {\n cssValues = kendo.getComputedStyles(element[0], taskKeys);\n }\n\n if (completeCallback) {\n completeCallback();\n }\n\n if (retainPosition) {\n element.css(cssValues);\n }\n\n return element\n .removeData(\"keys\")\n .stop(clearQueue);\n }\n });\n }\n\n function animationProperty(element, property) {\n if (transforms) {\n var transform = element.css(TRANSFORM);\n if (transform == NONE) {\n return property == \"scale\" ? 1 : 0;\n }\n\n var match = transform.match(new RegExp(property + \"\\\\s*\\\\(([\\\\d\\\\w\\\\.]+)\")),\n computed = 0;\n\n if (match) {\n computed = parseInteger(match[1]);\n } else {\n match = transform.match(matrix3dRegExp) || [0, 0, 0, 0, 0];\n property = property.toLowerCase();\n\n if (translateXRegExp.test(property)) {\n computed = parseFloat(match[3] / match[2]);\n } else if (property == \"translatey\") {\n computed = parseFloat(match[4] / match[2]);\n } else if (property == \"scale\") {\n computed = parseFloat(match[2]);\n } else if (property == \"rotate\") {\n computed = parseFloat(Math.atan2(match[2], match[1]));\n }\n }\n\n return computed;\n } else {\n return parseFloat(element.css(property));\n }\n }\n\n var EffectSet = kendo.Class.extend({\n init: function(element, options) {\n var that = this;\n\n that.element = element;\n that.effects = [];\n that.options = options;\n that.restore = [];\n },\n\n run: function(effects) {\n var that = this,\n effect,\n idx, jdx,\n length = effects.length,\n element = that.element,\n options = that.options,\n deferred = $.Deferred(),\n start = {},\n end = {},\n target,\n children,\n childrenLength;\n\n that.effects = effects;\n\n deferred.done(that.complete.bind(that));\n\n element.data(\"animating\", true);\n\n for (idx = 0; idx < length; idx ++) {\n effect = effects[idx];\n\n effect.setReverse(options.reverse);\n effect.setOptions(options);\n\n that.addRestoreProperties(effect.restore);\n\n effect.prepare(start, end);\n\n children = effect.children();\n\n for (jdx = 0, childrenLength = children.length; jdx < childrenLength; jdx ++) {\n children[jdx].duration(options.duration).run();\n }\n }\n\n // legacy support for options.properties\n for (var effectName in options.effects) {\n extend(end, options.effects[effectName].properties);\n }\n\n // Show the element initially\n if (!element.is(\":visible\")) {\n extend(start, { display: element.data(\"olddisplay\") || \"block\" });\n }\n\n if (transforms && !options.reset) {\n target = element.data(\"targetTransform\");\n\n if (target) {\n start = extend(target, start);\n }\n }\n\n start = normalizeCSS(element, start);\n\n if (transforms && !transitions) {\n start = strip3DTransforms(start);\n }\n\n element.css(start)\n .css(TRANSFORM); // Nudge\n\n for (idx = 0; idx < length; idx ++) {\n effects[idx].setup();\n }\n\n if (options.init) {\n options.init();\n }\n\n element.data(\"targetTransform\", end);\n fx.animate(element, end, extend({}, options, { complete: deferred.resolve }));\n\n return deferred.promise();\n },\n\n stop: function() {\n $(this.element).kendoStop(true, true);\n },\n\n addRestoreProperties: function(restore) {\n var element = this.element,\n value,\n i = 0,\n length = restore.length;\n\n for (; i < length; i ++) {\n value = restore[i];\n\n this.restore.push(value);\n\n if (!element.data(value)) {\n element.data(value, element.css(value));\n }\n }\n },\n\n restoreCallback: function() {\n var element = this.element;\n\n for (var i = 0, length = this.restore.length; i < length; i ++) {\n var value = this.restore[i];\n element.css(value, element.data(value));\n }\n },\n\n complete: function() {\n var that = this,\n idx = 0,\n element = that.element,\n options = that.options,\n effects = that.effects,\n length = effects.length;\n\n element\n .removeData(\"animating\")\n .dequeue(); // call next animation from the queue\n\n if (options.hide) {\n element.data(\"olddisplay\", element.css(\"display\")).hide();\n }\n\n this.restoreCallback();\n\n if (hasZoom && !transforms) {\n setTimeout(this.restoreCallback.bind(this), 0); // Again jQuery callback in IE8-\n }\n\n for (; idx < length; idx ++) {\n effects[idx].teardown();\n }\n\n if (options.completeCallback) {\n options.completeCallback(element);\n }\n }\n });\n\n fx.promise = function(element, options) {\n var effects = [],\n effectClass,\n effectSet = new EffectSet(element, options),\n parsedEffects = kendo.parseEffects(options.effects),\n effect;\n\n options.effects = parsedEffects;\n\n for (var effectName in parsedEffects) {\n effectClass = fx[capitalize(effectName)];\n\n if (effectClass) {\n effect = new effectClass(element, parsedEffects[effectName].direction);\n effects.push(effect);\n }\n }\n\n if (effects[0]) {\n effectSet.run(effects);\n } else { // Not sure how would an fx promise reach this state - means that you call kendoAnimate with no valid effects? Why?\n if (!element.is(\":visible\")) {\n element.css({ display: element.data(\"olddisplay\") || \"block\" }).css(\"display\");\n }\n\n if (options.init) {\n options.init();\n }\n\n element.dequeue();\n effectSet.complete();\n }\n };\n\n extend(fx, {\n animate: function(elements, properties, options) {\n var useTransition = options.transition !== false;\n delete options.transition;\n\n if (transitions && \"transition\" in fx && useTransition) {\n fx.transition(elements, properties, options);\n } else {\n if (transforms) {\n elements.animate(strip3DTransforms(properties), { queue: false, show: false, hide: false, duration: options.duration, complete: options.complete }); // Stop animate from showing/hiding the element to be able to hide it later on.\n } else {\n elements.each(function() {\n var element = $(this),\n multiple = {};\n\n each(transformProps, function(idx, value) { // remove transforms to avoid IE and older browsers confusion\n var params,\n currentValue = properties ? properties[value] + \" \" : null; // We need to match\n\n if (currentValue) {\n var single = properties;\n\n if (value in scaleProperties && properties[value] !== undefined$1) {\n params = currentValue.match(cssParamsRegExp);\n if (transforms) {\n extend(single, { scale: +params[0] });\n }\n } else {\n if (value in translateProperties && properties[value] !== undefined$1) {\n var position = element.css(POSITION),\n isFixed = (position == \"absolute\" || position == \"fixed\");\n\n if (!element.data(TRANSLATE)) {\n if (isFixed) {\n element.data(TRANSLATE, {\n top: parseCSS(element, \"top\") || 0,\n left: parseCSS(element, \"left\") || 0,\n bottom: parseCSS(element, \"bottom\"),\n right: parseCSS(element, \"right\")\n });\n } else {\n element.data(TRANSLATE, {\n top: parseCSS(element, \"marginTop\") || 0,\n left: parseCSS(element, \"marginLeft\") || 0\n });\n }\n }\n\n var originalPosition = element.data(TRANSLATE);\n\n params = currentValue.match(cssParamsRegExp);\n if (params) {\n\n var dX = value == TRANSLATE + \"y\" ? +null : +params[1],\n dY = value == TRANSLATE + \"y\" ? +params[1] : +params[2];\n\n if (isFixed) {\n if (!isNaN(originalPosition.right)) {\n if (!isNaN(dX)) { extend(single, { right: originalPosition.right - dX }); }\n } else {\n if (!isNaN(dX)) { extend(single, { left: originalPosition.left + dX }); }\n }\n\n if (!isNaN(originalPosition.bottom)) {\n if (!isNaN(dY)) { extend(single, { bottom: originalPosition.bottom - dY }); }\n } else {\n if (!isNaN(dY)) { extend(single, { top: originalPosition.top + dY }); }\n }\n } else {\n if (!isNaN(dX)) { extend(single, { marginLeft: originalPosition.left + dX }); }\n if (!isNaN(dY)) { extend(single, { marginTop: originalPosition.top + dY }); }\n }\n }\n }\n }\n\n if (!transforms && value != \"scale\" && value in single) {\n delete single[value];\n }\n\n if (single) {\n extend(multiple, single);\n }\n }\n });\n\n if (browser.msie) {\n delete multiple.scale;\n }\n\n element.animate(multiple, { queue: false, show: false, hide: false, duration: options.duration, complete: options.complete }); // Stop animate from showing/hiding the element to be able to hide it later on.\n });\n }\n }\n }\n });\n\n fx.animatedPromise = fx.promise;\n\n var Effect = kendo.Class.extend({\n init: function(element, direction) {\n var that = this;\n that.element = element;\n that._direction = direction;\n that.options = {};\n that._additionalEffects = [];\n\n if (!that.restore) {\n that.restore = [];\n }\n },\n\n // Public API\n reverse: function() {\n this._reverse = true;\n return this.run();\n },\n\n play: function() {\n this._reverse = false;\n return this.run();\n },\n\n add: function(additional) {\n this._additionalEffects.push(additional);\n return this;\n },\n\n direction: function(value) {\n this._direction = value;\n return this;\n },\n\n duration: function(duration) {\n this._duration = duration;\n return this;\n },\n\n compositeRun: function() {\n var that = this,\n effectSet = new EffectSet(that.element, { reverse: that._reverse, duration: that._duration }),\n effects = that._additionalEffects.concat([ that ]);\n\n return effectSet.run(effects);\n },\n\n run: function() {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n\n var that = this,\n element = that.element,\n idx = 0,\n restore = that.restore,\n length = restore.length,\n value,\n deferred = $.Deferred(),\n start = {},\n end = {},\n target,\n children = that.children(),\n childrenLength = children.length;\n\n deferred.done(that._complete.bind(that));\n\n element.data(\"animating\", true);\n\n for (idx = 0; idx < length; idx ++) {\n value = restore[idx];\n\n if (!element.data(value)) {\n element.data(value, element.css(value));\n }\n }\n\n for (idx = 0; idx < childrenLength; idx ++) {\n children[idx].duration(that._duration).run();\n }\n\n that.prepare(start, end);\n\n if (!element.is(\":visible\")) {\n extend(start, { display: element.data(\"olddisplay\") || \"block\" });\n }\n\n if (transforms) {\n target = element.data(\"targetTransform\");\n\n if (target) {\n start = extend(target, start);\n }\n }\n\n start = normalizeCSS(element, start);\n\n if (transforms && !transitions) {\n start = strip3DTransforms(start);\n }\n\n element.css(start).css(TRANSFORM); // Trick webkit into re-rendering\n\n that.setup();\n\n element.data(\"targetTransform\", end);\n fx.animate(element, end, { duration: that._duration, complete: deferred.resolve });\n\n return deferred.promise();\n },\n\n stop: function() {\n var idx = 0,\n children = this.children(),\n childrenLength = children.length;\n\n for (idx = 0; idx < childrenLength; idx ++) {\n children[idx].stop();\n }\n\n $(this.element).kendoStop(true, true);\n return this;\n },\n\n restoreCallback: function() {\n var element = this.element;\n\n for (var i = 0, length = this.restore.length; i < length; i ++) {\n var value = this.restore[i];\n element.css(value, element.data(value));\n }\n },\n\n _complete: function() {\n var that = this,\n element = that.element;\n\n element\n .removeData(\"animating\")\n .dequeue(); // call next animation from the queue\n\n that.restoreCallback();\n\n if (that.shouldHide()) {\n element.data(\"olddisplay\", element.css(\"display\")).hide();\n }\n\n if (hasZoom && !transforms) {\n setTimeout(that.restoreCallback.bind(that), 0); // Again jQuery callback in IE8-\n }\n\n that.teardown();\n },\n\n /////////////////////////// Support for kendo.animate;\n setOptions: function(options) {\n extend(true, this.options, options);\n },\n\n children: function() {\n return [];\n },\n\n shouldHide: $.noop,\n\n setup: $.noop,\n prepare: $.noop,\n teardown: $.noop,\n directions: [],\n\n setReverse: function(reverse) {\n this._reverse = reverse;\n return this;\n }\n });\n\n function capitalize(word) {\n return word.charAt(0).toUpperCase() + word.substring(1);\n }\n\n function createEffect(name, definition) {\n var effectClass = Effect.extend(definition),\n directions = effectClass.prototype.directions;\n\n fx[capitalize(name)] = effectClass;\n\n fx.Element.prototype[name] = function(direction, opt1, opt2, opt3) {\n return new effectClass(this.element, direction, opt1, opt2, opt3);\n };\n\n each(directions, function(idx, theDirection) {\n fx.Element.prototype[name + capitalize(theDirection)] = function(opt1, opt2, opt3) {\n return new effectClass(this.element, theDirection, opt1, opt2, opt3);\n };\n });\n }\n\n var FOUR_DIRECTIONS = [\"left\", \"right\", \"up\", \"down\"],\n IN_OUT = [\"in\", \"out\"];\n\n createEffect(\"slideIn\", {\n directions: FOUR_DIRECTIONS,\n\n divisor: function(value) {\n this.options.divisor = value;\n return this;\n },\n\n prepare: function(start, end) {\n var that = this,\n tmp,\n element = that.element,\n outerWidth = kendo._outerWidth,\n outerHeight = kendo._outerHeight,\n direction = directions[that._direction],\n offset = -direction.modifier * (direction.vertical ? outerHeight(element) : outerWidth(element)),\n startValue = offset / (that.options && that.options.divisor || 1) + PX,\n endValue = \"0px\";\n\n if (that._reverse) {\n tmp = start;\n start = end;\n end = tmp;\n }\n\n if (transforms) {\n start[direction.transition] = startValue;\n end[direction.transition] = endValue;\n } else {\n start[direction.property] = startValue;\n end[direction.property] = endValue;\n }\n }\n });\n\n createEffect(\"tile\", {\n directions: FOUR_DIRECTIONS,\n\n init: function(element, direction, previous) {\n Effect.prototype.init.call(this, element, direction);\n this.options = { previous: previous };\n },\n\n previousDivisor: function(value) {\n this.options.previousDivisor = value;\n return this;\n },\n\n children: function() {\n var that = this,\n reverse = that._reverse,\n previous = that.options.previous,\n divisor = that.options.previousDivisor || 1,\n dir = that._direction;\n\n var children = [ kendo.fx(that.element).slideIn(dir).setReverse(reverse) ];\n\n if (previous) {\n children.push( kendo.fx(previous).slideIn(directions[dir].reverse).divisor(divisor).setReverse(!reverse) );\n }\n\n return children;\n }\n });\n\n function createToggleEffect(name, property, defaultStart, defaultEnd) {\n createEffect(name, {\n directions: IN_OUT,\n\n startValue: function(value) {\n this._startValue = value;\n return this;\n },\n\n endValue: function(value) {\n this._endValue = value;\n return this;\n },\n\n shouldHide: function() {\n return this._shouldHide;\n },\n\n prepare: function(start, end) {\n var that = this,\n startValue,\n endValue,\n out = this._direction === \"out\",\n startDataValue = that.element.data(property),\n startDataValueIsSet = !(isNaN(startDataValue) || startDataValue == defaultStart);\n\n if (startDataValueIsSet) {\n startValue = startDataValue;\n } else if (typeof this._startValue !== \"undefined\") {\n startValue = this._startValue;\n } else {\n startValue = out ? defaultStart : defaultEnd;\n }\n\n if (typeof this._endValue !== \"undefined\") {\n endValue = this._endValue;\n } else {\n endValue = out ? defaultEnd : defaultStart;\n }\n\n if (this._reverse) {\n start[property] = endValue;\n end[property] = startValue;\n } else {\n start[property] = startValue;\n end[property] = endValue;\n }\n\n that._shouldHide = end[property] === defaultEnd;\n }\n });\n }\n\n createToggleEffect(\"fade\", \"opacity\", 1, 0);\n createToggleEffect(\"zoom\", \"scale\", 1, 0.01);\n\n createEffect(\"slideMargin\", {\n prepare: function(start, end) {\n var that = this,\n element = that.element,\n options = that.options,\n origin = element.data(ORIGIN),\n offset = options.offset,\n margin,\n reverse = that._reverse;\n\n if (!reverse && origin === null) {\n element.data(ORIGIN, parseFloat(element.css(\"margin-\" + options.axis)));\n }\n\n margin = (element.data(ORIGIN) || 0);\n end[\"margin-\" + options.axis] = !reverse ? margin + offset : margin;\n }\n });\n\n createEffect(\"slideTo\", {\n prepare: function(start, end) {\n var that = this,\n element = that.element,\n options = that.options,\n offset = options.offset.split(\",\"),\n reverse = that._reverse;\n\n if (transforms) {\n end.translatex = !reverse ? offset[0] : 0;\n end.translatey = !reverse ? offset[1] : 0;\n } else {\n end.left = !reverse ? offset[0] : 0;\n end.top = !reverse ? offset[1] : 0;\n }\n element.css(\"left\");\n }\n });\n\n createEffect(\"expand\", {\n directions: [\"horizontal\", \"vertical\"],\n\n restore: [ OVERFLOW ],\n\n prepare: function(start, end) {\n var that = this,\n element = that.element,\n options = that.options,\n reverse = that._reverse,\n property = that._direction === \"vertical\" ? HEIGHT : WIDTH,\n setLength = element[0].style[property],\n oldLength = element.data(property),\n length = parseFloat(oldLength || setLength),\n realLength = round(element.css(property, AUTO)[property]());\n\n start.overflow = HIDDEN;\n\n length = (options && options.reset) ? realLength || length : length || realLength;\n\n end[property] = (reverse ? 0 : length) + PX;\n start[property] = (reverse ? length : 0) + PX;\n\n if (oldLength === undefined$1) {\n element.data(property, setLength);\n }\n },\n\n shouldHide: function() {\n return this._reverse;\n },\n\n teardown: function() {\n var that = this,\n element = that.element,\n property = that._direction === \"vertical\" ? HEIGHT : WIDTH,\n length = element.data(property);\n\n if (length == AUTO || length === BLANK) {\n setTimeout(function() { element.css(property, AUTO).css(property); }, 0); // jQuery animate complete callback in IE is called before the last animation step!\n }\n }\n });\n\n var TRANSFER_START_STATE = { position: \"absolute\", marginLeft: 0, marginTop: 0, scale: 1 };\n /**\n * Intersection point formulas are taken from here - http://zonalandeducation.com/mmts/intersections/intersectionOfTwoLines1/intersectionOfTwoLines1.html\n * Formula for a linear function from two points from here - http://demo.activemath.org/ActiveMath2/search/show.cmd?id=mbase://AC_UK_calculus/functions/ex_linear_equation_two_points\n * The transform origin point is the intersection point of the two lines from the top left corners/top right corners of the element and target.\n * The math and variables below MAY BE SIMPLIFIED (zeroes removed), but this would make the formula too cryptic.\n */\n createEffect(\"transfer\", {\n init: function(element, target) {\n this.element = element;\n this.options = { target: target };\n this.restore = [];\n },\n\n setup: function() {\n this.element.appendTo(document.body);\n },\n\n prepare: function(start, end) {\n var that = this,\n element = that.element,\n outerBox = fx.box(element),\n innerBox = fx.box(that.options.target),\n currentScale = animationProperty(element, \"scale\"),\n scale = fx.fillScale(innerBox, outerBox),\n transformOrigin = fx.transformOrigin(innerBox, outerBox);\n\n extend(start, TRANSFER_START_STATE);\n end.scale = 1;\n\n element.css(TRANSFORM, \"scale(1)\").css(TRANSFORM);\n element.css(TRANSFORM, \"scale(\" + currentScale + \")\");\n\n start.top = outerBox.top;\n start.left = outerBox.left;\n start.transformOrigin = transformOrigin.x + PX + \" \" + transformOrigin.y + PX;\n\n if (that._reverse) {\n start.scale = scale;\n } else {\n end.scale = scale;\n }\n }\n });\n\n\n var CLIPS = {\n top: \"rect(auto auto $size auto)\",\n bottom: \"rect($size auto auto auto)\",\n left: \"rect(auto $size auto auto)\",\n right: \"rect(auto auto auto $size)\"\n };\n\n var ROTATIONS = {\n top: { start: \"rotatex(0deg)\", end: \"rotatex(180deg)\" },\n bottom: { start: \"rotatex(-180deg)\", end: \"rotatex(0deg)\" },\n left: { start: \"rotatey(0deg)\", end: \"rotatey(-180deg)\" },\n right: { start: \"rotatey(180deg)\", end: \"rotatey(0deg)\" }\n };\n\n function clipInHalf(container, direction) {\n var vertical = kendo.directions[direction].vertical,\n size = (container[vertical ? HEIGHT : WIDTH]() / 2) + \"px\";\n\n return CLIPS[direction].replace(\"$size\", size);\n }\n\n createEffect(\"turningPage\", {\n directions: FOUR_DIRECTIONS,\n\n init: function(element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n\n prepare: function(start, end) {\n var that = this,\n reverse = that._reverse,\n direction = reverse ? directions[that._direction].reverse : that._direction,\n rotation = ROTATIONS[direction];\n\n start.zIndex = 1;\n\n if (that._clipInHalf) {\n start.clip = clipInHalf(that._container, kendo.directions[direction].reverse);\n }\n\n start[BACKFACE] = HIDDEN;\n\n end[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.start : rotation.end);\n start[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.end : rotation.start);\n },\n\n setup: function() {\n this._container.append(this.element);\n },\n\n face: function(value) {\n this._face = value;\n return this;\n },\n\n shouldHide: function() {\n var that = this,\n reverse = that._reverse,\n face = that._face;\n\n return (reverse && !face) || (!reverse && face);\n },\n\n clipInHalf: function(value) {\n this._clipInHalf = value;\n return this;\n },\n\n temporary: function() {\n this.element.addClass('temp-page');\n return this;\n }\n });\n\n createEffect(\"staticPage\", {\n directions: FOUR_DIRECTIONS,\n\n init: function(element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n\n restore: [\"clip\"],\n\n prepare: function(start, end) {\n var that = this,\n direction = that._reverse ? directions[that._direction].reverse : that._direction;\n\n start.clip = clipInHalf(that._container, direction);\n start.opacity = 0.999;\n end.opacity = 1;\n },\n\n shouldHide: function() {\n var that = this,\n reverse = that._reverse,\n face = that._face;\n\n return (reverse && !face) || (!reverse && face);\n },\n\n face: function(value) {\n this._face = value;\n return this;\n }\n });\n\n createEffect(\"pageturn\", {\n directions: [\"horizontal\", \"vertical\"],\n\n init: function(element, direction, face, back) {\n Effect.prototype.init.call(this, element, direction);\n this.options = {};\n this.options.face = face;\n this.options.back = back;\n },\n\n children: function() {\n var that = this,\n options = that.options,\n direction = that._direction === \"horizontal\" ? \"left\" : \"top\",\n reverseDirection = kendo.directions[direction].reverse,\n reverse = that._reverse,\n temp,\n faceClone = options.face.clone(true).removeAttr(\"id\"),\n backClone = options.back.clone(true).removeAttr(\"id\"),\n element = that.element;\n\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\n }\n\n return [\n kendo.fx(options.face).staticPage(direction, element).face(true).setReverse(reverse),\n kendo.fx(options.back).staticPage(reverseDirection, element).setReverse(reverse),\n kendo.fx(faceClone).turningPage(direction, element).face(true).clipInHalf(true).temporary().setReverse(reverse),\n kendo.fx(backClone).turningPage(reverseDirection, element).clipInHalf(true).temporary().setReverse(reverse)\n ];\n },\n\n prepare: function(start, end) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = \"preserve-3d\";\n // hack to trigger transition end.\n start.opacity = 0.999;\n end.opacity = 1;\n },\n\n teardown: function() {\n this.element.find(\".temp-page\").remove();\n }\n });\n\n createEffect(\"flip\", {\n directions: [\"horizontal\", \"vertical\"],\n\n init: function(element, direction, face, back) {\n Effect.prototype.init.call(this, element, direction);\n this.options = {};\n this.options.face = face;\n this.options.back = back;\n },\n\n children: function() {\n var that = this,\n options = that.options,\n direction = that._direction === \"horizontal\" ? \"left\" : \"top\",\n reverseDirection = kendo.directions[direction].reverse,\n reverse = that._reverse,\n temp,\n element = that.element;\n\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\n }\n\n return [\n kendo.fx(options.face).turningPage(direction, element).face(true).setReverse(reverse),\n kendo.fx(options.back).turningPage(reverseDirection, element).setReverse(reverse)\n ];\n },\n\n prepare: function(start) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = \"preserve-3d\";\n }\n });\n\n var RESTORE_OVERFLOW = !support.mobileOS.android;\n var IGNORE_TRANSITION_EVENT_SELECTOR = \".km-touch-scrollbar, .km-actionsheet-wrapper\";\n\n createEffect(\"replace\", {\n _before: $.noop,\n _after: $.noop,\n init: function(element, previous, transitionClass) {\n Effect.prototype.init.call(this, element);\n this._previous = $(previous);\n this._transitionClass = transitionClass;\n },\n\n duration: function() {\n throw new Error(\"The replace effect does not support duration setting; the effect duration may be customized through the transition class rule\");\n },\n\n beforeTransition: function(callback) {\n this._before = callback;\n return this;\n },\n\n afterTransition: function(callback) {\n this._after = callback;\n return this;\n },\n\n _both: function() {\n return $().add(this._element).add(this._previous);\n },\n\n _containerClass: function() {\n var direction = this._direction,\n containerClass = \"k-fx k-fx-start k-fx-\" + this._transitionClass;\n\n if (direction) {\n containerClass += \" k-fx-\" + direction;\n }\n\n if (this._reverse) {\n containerClass += \" k-fx-reverse\";\n }\n\n return containerClass;\n },\n\n complete: function(e) {\n if (!this.deferred || (e && $(e.target).is(IGNORE_TRANSITION_EVENT_SELECTOR))) {\n return;\n }\n\n var container = this.container;\n\n container\n .removeClass(\"k-fx-end\")\n .removeClass(this._containerClass())\n .off(transitions.event, this.completeProxy);\n\n this._previous.hide().removeClass(\"k-fx-current\");\n this.element.removeClass(\"k-fx-next\");\n\n if (RESTORE_OVERFLOW) {\n container.css(OVERFLOW, \"\");\n }\n\n if (!this.isAbsolute) {\n this._both().css(POSITION, \"\");\n }\n\n this.deferred.resolve();\n delete this.deferred;\n },\n\n run: function() {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n\n var that = this,\n element = that.element,\n previous = that._previous,\n container = element.parents().filter(previous.parents()).first(),\n both = that._both(),\n deferred = $.Deferred(),\n originalPosition = element.css(POSITION),\n originalOverflow;\n\n // edge case for grid/scheduler, where the previous is already destroyed.\n if (!container.length) {\n container = element.parent();\n }\n\n this.container = container;\n this.deferred = deferred;\n this.isAbsolute = originalPosition == \"absolute\";\n\n if (!this.isAbsolute) {\n both.css(POSITION, \"absolute\");\n }\n\n if (RESTORE_OVERFLOW) {\n originalOverflow = container.css(OVERFLOW);\n container.css(OVERFLOW, \"hidden\");\n }\n\n if (!transitions) {\n this.complete();\n } else {\n element.addClass(\"k-fx-hidden\");\n\n container.addClass(this._containerClass());\n\n this.completeProxy = this.complete.bind(this);\n container.on(transitions.event, this.completeProxy);\n\n kendo.animationFrame(function() {\n element.removeClass(\"k-fx-hidden\").addClass(\"k-fx-next\");\n previous.css(\"display\", \"\").addClass(\"k-fx-current\");\n that._before(previous, element);\n kendo.animationFrame(function() {\n container.removeClass(\"k-fx-start\").addClass(\"k-fx-end\");\n that._after(previous, element);\n });\n });\n }\n\n return deferred.promise();\n },\n\n stop: function() {\n this.complete();\n }\n });\n\n var Animation = kendo.Class.extend({\n init: function() {\n var that = this;\n that._tickProxy = that._tick.bind(that);\n that._started = false;\n },\n\n tick: $.noop,\n done: $.noop,\n onEnd: $.noop,\n onCancel: $.noop,\n\n start: function() {\n if (!this.enabled()) {\n return;\n }\n\n if (!this.done()) {\n this._started = true;\n kendo.animationFrame(this._tickProxy);\n } else {\n this.onEnd();\n }\n },\n\n enabled: function() {\n return true;\n },\n\n cancel: function() {\n this._started = false;\n this.onCancel();\n },\n\n _tick: function() {\n var that = this;\n if (!that._started) { return; }\n\n that.tick();\n\n if (!that.done()) {\n kendo.animationFrame(that._tickProxy);\n } else {\n that._started = false;\n that.onEnd();\n }\n }\n });\n\n var Transition = Animation.extend({\n init: function(options) {\n var that = this;\n extend(that, options);\n Animation.fn.init.call(that);\n },\n\n done: function() {\n return this.timePassed() >= this.duration;\n },\n\n timePassed: function() {\n return Math.min(this.duration, (new Date()) - this.startDate);\n },\n\n moveTo: function(options) {\n var that = this,\n movable = that.movable;\n\n that.initial = movable[that.axis];\n that.delta = options.location - that.initial;\n\n that.duration = typeof options.duration == \"number\" ? options.duration : 300;\n\n that.tick = that._easeProxy(options.ease);\n\n that.startDate = new Date();\n that.start();\n },\n\n _easeProxy: function(ease) {\n var that = this;\n\n return function() {\n that.movable.moveAxis(that.axis, ease(that.timePassed(), that.initial, that.delta, that.duration));\n };\n }\n });\n\n extend(Transition, {\n easeOutExpo: function(t, b, c, d) {\n return (t == d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n },\n\n easeOutBack: function(t, b, c, d, s) {\n s = 1.70158;\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n }\n });\n\n fx.Animation = Animation;\n fx.Transition = Transition;\n fx.createEffect = createEffect;\n\n fx.box = function(element) {\n element = $(element);\n var result = element.offset();\n result.width = kendo._outerWidth(element);\n result.height = kendo._outerHeight(element);\n return result;\n };\n\n fx.transformOrigin = function(inner, outer) {\n var x = (inner.left - outer.left) * outer.width / (outer.width - inner.width),\n y = (inner.top - outer.top) * outer.height / (outer.height - inner.height);\n\n return {\n x: isNaN(x) ? 0 : x,\n y: isNaN(y) ? 0 : y\n };\n };\n\n fx.fillScale = function(inner, outer) {\n return Math.min(inner.width / outer.width, inner.height / outer.height);\n };\n\n fx.fitScale = function(inner, outer) {\n return Math.max(inner.width / outer.width, inner.height / outer.height);\n };\n })(window.kendo.jQuery);\n\n var __meta__$v = {\n id: \"data.odata\",\n name: \"OData\",\n category: \"framework\",\n depends: [ \"core\" ],\n hidden: true\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n extend = $.extend,\n NEWLINE = \"\\r\\n\",\n DOUBLELINE = \"\\r\\n\\r\\n\",\n isFunction = kendo.isFunction,\n odataFilters = {\n eq: \"eq\",\n neq: \"ne\",\n gt: \"gt\",\n gte: \"ge\",\n lt: \"lt\",\n lte: \"le\",\n contains: \"substringof\",\n doesnotcontain: \"substringof\",\n endswith: \"endswith\",\n startswith: \"startswith\",\n isnull: \"eq\",\n isnotnull: \"ne\",\n isnullorempty: \"eq\",\n isnotnullorempty: \"ne\",\n isempty: \"eq\",\n isnotempty: \"ne\"\n },\n odataFiltersVersionFour = extend({}, odataFilters, {\n contains: \"contains\"\n }),\n mappers = {\n pageSize: $.noop,\n page: $.noop,\n filter: function(params, filter, useVersionFour) {\n if (filter) {\n filter = toOdataFilter(filter, useVersionFour);\n if (filter) {\n params.$filter = filter;\n }\n }\n },\n sort: function(params, orderby) {\n var expr = $.map(orderby, function(value) {\n var order = value.field.replace(/\\./g, \"/\");\n\n if (value.dir === \"desc\") {\n order += \" desc\";\n }\n\n return order;\n }).join(\",\");\n\n if (expr) {\n params.$orderby = expr;\n }\n },\n skip: function(params, skip) {\n if (skip) {\n params.$skip = skip;\n }\n },\n take: function(params, take) {\n if (take) {\n params.$top = take;\n }\n }\n },\n defaultDataType = {\n read: {\n dataType: \"jsonp\"\n }\n };\n\n function toOdataFilter(filter, useOdataFour) {\n var result = [],\n logic = filter.logic || \"and\",\n idx,\n length,\n field,\n type,\n format,\n operator,\n value,\n ignoreCase,\n filters = filter.filters;\n\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n value = filter.value;\n operator = filter.operator;\n\n if (filter.filters) {\n filter = toOdataFilter(filter, useOdataFour);\n } else {\n ignoreCase = filter.ignoreCase;\n field = field.replace(/\\./g, \"/\");\n filter = odataFilters[operator];\n if (useOdataFour) {\n filter = odataFiltersVersionFour[operator];\n }\n\n if (operator === \"isnullorempty\") {\n filter = kendo.format(\"{0} {1} null or {0} {1} ''\", field, filter);\n } else if (operator === \"isnotnullorempty\") {\n filter = kendo.format(\"{0} {1} null and {0} {1} ''\", field, filter);\n } else if (operator === \"isnull\" || operator === \"isnotnull\") {\n filter = kendo.format(\"{0} {1} null\", field, filter);\n } else if (operator === \"isempty\" || operator === \"isnotempty\") {\n filter = kendo.format(\"{0} {1} ''\", field, filter);\n } else if (filter && value !== undefined$1) {\n type = kendo.type(value);\n if (type === \"string\") {\n format = \"'{1}'\";\n value = value.replace(/'/g, \"''\");\n\n if (ignoreCase === true) {\n field = \"tolower(\" + field + \")\";\n }\n\n } else if (type === \"date\") {\n if (useOdataFour) {\n format = \"{1:yyyy-MM-ddTHH:mm:ss+00:00}\";\n value = kendo.timezone.apply(value, 'Etc/UTC');\n } else {\n format = \"datetime'{1:yyyy-MM-ddTHH:mm:ss}'\";\n }\n } else {\n format = \"{1}\";\n }\n\n if (filter.length > 3) {\n if (filter !== \"substringof\") {\n format = \"{0}({2},\" + format + \")\";\n } else {\n format = \"{0}(\" + format + \",{2})\";\n if (operator === \"doesnotcontain\") {\n if (useOdataFour) {\n format = \"{0}({2},'{1}') eq -1\";\n filter = \"indexof\";\n } else {\n format += \" eq false\";\n }\n }\n }\n } else {\n format = \"{2} {0} \" + format;\n }\n\n filter = kendo.format(format, filter, value, field);\n }\n }\n\n result.push(filter);\n }\n\n filter = result.join(\" \" + logic + \" \");\n\n if (result.length > 1) {\n filter = \"(\" + filter + \")\";\n }\n\n return filter;\n }\n\n function stripMetadata(obj) {\n for (var name in obj) {\n if (name.indexOf(\"@odata\") === 0) {\n delete obj[name];\n }\n }\n }\n\n function hex16() {\n return Math.floor((1 + Math.random()) * 0x10000).toString(16).substr(1);\n }\n\n function createBoundary(prefix) {\n return prefix + hex16() + '-' + hex16() + '-' + hex16();\n }\n\n function createDelimeter(boundary, close) {\n var result = NEWLINE + \"--\" + boundary;\n\n if (close) {\n result += \"--\";\n }\n\n return result;\n }\n\n function createCommand(transport, item, httpVerb, command) {\n var transportUrl = transport.options[command].url;\n var commandPrefix = kendo.format(\"{0} \", httpVerb);\n\n if (isFunction(transportUrl)) {\n return commandPrefix + transportUrl(item);\n } else {\n return commandPrefix + transportUrl;\n }\n }\n\n function getOperationHeader(changeset, changeId) {\n var header = \"\";\n\n header += createDelimeter(changeset, false);\n header += NEWLINE + 'Content-Type: application/http';\n header += NEWLINE + 'Content-Transfer-Encoding: binary';\n header += NEWLINE + 'Content-ID: ' + changeId;\n\n return header;\n }\n\n function getOperationContent(item) {\n var content = \"\";\n\n content += NEWLINE + \"Content-Type: application/json;odata=minimalmetadata\";\n content += NEWLINE + \"Prefer: return=representation\";\n content += DOUBLELINE + kendo.stringify(item);\n\n return content;\n }\n\n function getOperations(collection, changeset, changeId, command, transport, skipContent) {\n var requestBody = \"\";\n\n for (var i = 0; i < collection.length; i++) {\n requestBody += getOperationHeader(changeset, changeId);\n requestBody += DOUBLELINE + createCommand(transport, collection[i], transport.options[command].type, command) + ' HTTP/1.1';\n if (!skipContent) {\n requestBody += getOperationContent(collection[i]);\n }\n requestBody += NEWLINE;\n changeId++;\n }\n\n return requestBody;\n }\n\n function processCollection(colection, boundary, changeset, changeId, transport, command, skipContent) {\n var requestBody = \"\";\n\n requestBody += getBoundary(boundary, changeset);\n requestBody += getOperations(colection, changeset, changeId, command, transport, skipContent);\n requestBody += createDelimeter(changeset, true);\n requestBody += NEWLINE;\n\n return requestBody;\n }\n\n function getBoundary(boundary,changeset) {\n var requestBody = \"\";\n\n requestBody += \"--\" + boundary + NEWLINE;\n requestBody += \"Content-Type: multipart/mixed; boundary=\" + changeset + NEWLINE;\n\n return requestBody;\n }\n\n function createBatchRequest(transport, colections) {\n \t\tvar options = extend({}, transport.options.batch);\n var boundary = createBoundary(\"sf_batch_\");\n var requestBody = \"\";\n var changeId = 0;\n var batchURL = transport.options.batch.url;\n var changeset = createBoundary(\"sf_changeset_\");\n\n options.type = transport.options.batch.type;\n options.url = isFunction(batchURL) ? batchURL() : batchURL;\n \t\toptions.headers = extend(options.headers || {}, {\n \t\t\t\"Content-Type\": \"multipart/mixed; boundary=\" + boundary\n \t\t});\n\n if (colections.updated.length) {\n requestBody += processCollection(colections.updated, boundary, changeset, changeId, transport, \"update\", false);\n changeId += colections.updated.length;\n changeset = createBoundary(\"sf_changeset_\");\n }\n\n if (colections.destroyed.length) {\n requestBody += processCollection(colections.destroyed, boundary, changeset, changeId, transport, \"destroy\", true);\n changeId += colections.destroyed.length;\n changeset = createBoundary(\"sf_changeset_\");\n }\n\n if (colections.created.length) {\n requestBody += processCollection(colections.created, boundary, changeset, changeId, transport, \"create\", false);\n }\n\n requestBody += createDelimeter(boundary, true);\n\n options.data = requestBody;\n\n return options;\n }\n\n function parseBatchResponse(responseText) {\n var responseMarkers = responseText.match(/--changesetresponse_[a-z0-9-]+$/gm);\n var markerIndex = 0;\n var collections = [];\n var changeBody;\n var status;\n var code;\n var marker;\n var jsonModel;\n\n collections.push({ models: [], passed: true });\n\n for (var i = 0; i < responseMarkers.length; i++) {\n marker = responseMarkers[i];\n if (marker.lastIndexOf('--', marker.length - 1)) {\n if (i < responseMarkers.length - 1) {\n collections.push({ models: [], passed: true });\n }\n continue;\n }\n\n if (!markerIndex) {\n markerIndex = responseText.indexOf(marker);\n } else {\n markerIndex = responseText.indexOf(marker, markerIndex + marker.length);\n }\n\n changeBody = responseText.substring(markerIndex, responseText.indexOf(\"--\", markerIndex + 1));\n status = changeBody.match(/^HTTP\\/1\\.\\d (\\d{3}) (.*)$/gm).pop();\n code = kendo.parseFloat(status.match(/\\d{3}/g).pop());\n\n if (code >= 200 && code <= 299) {\n jsonModel = changeBody.match(/\\{.*\\}/gm);\n if (jsonModel) {\n collections[collections.length - 1].models.push(JSON.parse(jsonModel[0]));\n }\n } else {\n collections[collections.length - 1].passed = false;\n }\n\n }\n\n return collections;\n }\n\n extend(true, kendo.data, {\n schemas: {\n odata: {\n type: \"json\",\n data: function(data) {\n return data.d.results || [data.d];\n },\n total: \"d.__count\"\n }\n },\n transports: {\n odata: {\n read: {\n cache: true, // to prevent jQuery from adding cache buster\n dataType: \"jsonp\",\n jsonp: \"$callback\"\n },\n update: {\n cache: true,\n dataType: \"json\",\n contentType: \"application/json\", // to inform the server the the request body is JSON encoded\n type: \"PUT\" // can be PUT or MERGE\n },\n create: {\n cache: true,\n dataType: \"json\",\n contentType: \"application/json\",\n type: \"POST\" // must be POST to create new entity\n },\n destroy: {\n cache: true,\n dataType: \"json\",\n type: \"DELETE\"\n },\n parameterMap: function(options, type, useVersionFour) {\n var params,\n value,\n option,\n dataType;\n\n options = options || {};\n type = type || \"read\";\n dataType = (this.options || defaultDataType)[type];\n dataType = dataType ? dataType.dataType : \"json\";\n\n if (type === \"read\") {\n params = {\n $inlinecount: \"allpages\"\n };\n\n if (dataType != \"json\") {\n params.$format = \"json\";\n }\n\n for (option in options) {\n if (mappers[option]) {\n mappers[option](params, options[option], useVersionFour);\n } else {\n params[option] = options[option];\n }\n }\n } else {\n if (dataType !== \"json\") {\n throw new Error(\"Only json dataType can be used for \" + type + \" operation.\");\n }\n\n if (type !== \"destroy\") {\n for (option in options) {\n value = options[option];\n if (typeof value === \"number\") {\n options[option] = value + \"\";\n }\n }\n\n params = kendo.stringify(options);\n }\n }\n\n return params;\n }\n }\n }\n });\n\n extend(true, kendo.data, {\n schemas: {\n \"odata-v4\": {\n type: \"json\",\n data: function(data) {\n if (Array.isArray(data)) {\n for (var i = 0; i < data.length; i++) {\n stripMetadata(data[i]);\n }\n return data;\n } else {\n data = $.extend({}, data);\n stripMetadata(data);\n\n if (data.value) {\n return data.value;\n }\n return [data];\n }\n },\n total: function(data) {\n return data[\"@odata.count\"];\n }\n }\n },\n transports: {\n \"odata-v4\": {\n batch: {\n type: \"POST\"\n },\n read: {\n cache: true, // to prevent jQuery from adding cache buster\n dataType: \"json\"\n },\n update: {\n cache: true,\n dataType: \"json\",\n contentType: \"application/json;IEEE754Compatible=true\", // to inform the server the the request body is JSON encoded\n type: \"PUT\" // can be PUT or MERGE\n },\n create: {\n cache: true,\n dataType: \"json\",\n contentType: \"application/json;IEEE754Compatible=true\",\n type: \"POST\" // must be POST to create new entity\n },\n destroy: {\n cache: true,\n dataType: \"json\",\n type: \"DELETE\"\n },\n parameterMap: function(options, type) {\n var result = kendo.data.transports.odata.parameterMap(options, type, true);\n if (type == \"read\") {\n result.$count = true;\n delete result.$inlinecount;\n }\n\n \t\t\t\t\tif (result && result.$filter) {\n \t\t\t\t\t\t// Remove the single quotation marks around the GUID (OData v4).\n \t\t\t\t\t\tresult.$filter = result.$filter.replace(/('[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')/ig, function(x) {\n \t\t\t\t\t\t\treturn x.substring(1, x.length - 1);\n \t\t\t\t\t\t});\n \t\t\t\t\t}\n\n return result;\n },\n submit: function(e) {\n var that = this;\n var options = createBatchRequest(that, e.data);\n var collections = e.data;\n\n if (!collections.updated.length && !collections.destroyed.length && !collections.created.length) {\n return;\n }\n\n $.ajax(extend(true, {}, {\n success: function(response) {\n var responses = parseBatchResponse(response);\n var index = 0;\n var current;\n\n if (collections.updated.length) {\n current = responses[index];\n if (current.passed) {\n // Pass either the obtained models or an empty array if only status codes are returned.\n e.success(current.models.length ? current.models : [], \"update\");\n }\n index++;\n }\n if (collections.destroyed.length) {\n current = responses[index];\n if (current.passed) {\n // For delete operations OData returns only status codes.\n // Passing empty array to datasource will force it to correctly remove the deleted items from the pristine collection.\n e.success([], \"destroy\");\n }\n index++;\n }\n if (collections.created.length) {\n current = responses[index];\n if (current.passed) {\n e.success(current.models, \"create\");\n }\n }\n },\n error: function(response, status, error) {\n e.error(response, status, error);\n }\n }, options));\n }\n }\n }\n });\n\n })(window.kendo.jQuery);\n\n var __meta__$u = {\n id: \"data.xml\",\n name: \"XML\",\n category: \"framework\",\n depends: [ \"core\" ],\n hidden: true\n };\n\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n isArray = Array.isArray,\n isPlainObject = $.isPlainObject,\n map = $.map,\n each = $.each,\n extend = $.extend,\n getter = kendo.getter,\n Class = kendo.Class;\n\n var XmlDataReader = Class.extend({\n init: function(options) {\n var that = this,\n total = options.total,\n model = options.model,\n parse = options.parse,\n errors = options.errors,\n serialize = options.serialize,\n data = options.data;\n\n if (model) {\n if (isPlainObject(model)) {\n var base = options.modelBase || kendo.data.Model;\n\n if (model.fields) {\n each(model.fields, function(field, value) {\n if (isPlainObject(value) && value.field) {\n if (!kendo.isFunction(value.field)) {\n value = extend(value, { field: that.getter(value.field) });\n }\n } else {\n value = { field: that.getter(value) };\n }\n model.fields[field] = value;\n });\n }\n\n var id = model.id;\n if (id) {\n var idField = {};\n\n idField[that.xpathToMember(id, true)] = { field: that.getter(id) };\n model.fields = extend(idField, model.fields);\n model.id = that.xpathToMember(id);\n }\n model = base.define(model);\n }\n\n that.model = model;\n }\n\n if (total) {\n if (typeof total == \"string\") {\n total = that.getter(total);\n that.total = function(data) {\n return parseInt(total(data), 10);\n };\n } else if (typeof total == \"function\") {\n that.total = total;\n }\n }\n\n if (errors) {\n if (typeof errors == \"string\") {\n errors = that.getter(errors);\n that.errors = function(data) {\n return errors(data) || null;\n };\n } else if (typeof errors == \"function\") {\n that.errors = errors;\n }\n }\n\n if (data) {\n if (typeof data == \"string\") {\n data = that.xpathToMember(data);\n that.data = function(value) {\n var result = that.evaluate(value, data),\n modelInstance;\n\n result = isArray(result) ? result : [result];\n\n if (that.model && model.fields) {\n modelInstance = new that.model();\n\n return map(result, function(value) {\n if (value) {\n var record = {}, field;\n\n for (field in model.fields) {\n record[field] = modelInstance._parse(field, model.fields[field].field(value));\n }\n\n return record;\n }\n });\n }\n\n return result;\n };\n } else if (typeof data == \"function\") {\n that.data = data;\n }\n }\n\n if (typeof parse == \"function\") {\n var xmlParse = that.parse;\n\n that.parse = function(data) {\n var xml = parse.call(that, data);\n return xmlParse.call(that, xml);\n };\n }\n\n if (typeof serialize == \"function\") {\n that.serialize = serialize;\n }\n },\n total: function(result) {\n return this.data(result).length;\n },\n errors: function(data) {\n return data ? data.errors : null;\n },\n serialize: function(data) {\n return data;\n },\n parseDOM: function(element) {\n var result = {},\n parsedNode,\n node,\n nodeType,\n nodeName,\n member,\n attribute,\n attributes = element.attributes,\n attributeCount = attributes.length,\n idx;\n\n for (idx = 0; idx < attributeCount; idx++) {\n attribute = attributes[idx];\n result[\"@\" + attribute.nodeName] = attribute.nodeValue;\n }\n\n for (node = element.firstChild; node; node = node.nextSibling) {\n nodeType = node.nodeType;\n\n if (nodeType === 3 || nodeType === 4) {\n // text nodes or CDATA are stored as #text field\n result[\"#text\"] = node.nodeValue;\n } else if (nodeType === 1) {\n // elements are stored as fields\n parsedNode = this.parseDOM(node);\n\n nodeName = node.nodeName;\n\n member = result[nodeName];\n\n if (isArray(member)) {\n // elements of same nodeName are stored as array\n member.push(parsedNode);\n } else if (member !== undefined$1) {\n member = [member, parsedNode];\n } else {\n member = parsedNode;\n }\n\n result[nodeName] = member;\n }\n }\n return result;\n },\n\n evaluate: function(value, expression) {\n var members = expression.split(\".\"),\n member,\n result,\n length,\n intermediateResult,\n idx;\n\n while (member = members.shift()) {\n value = value[member];\n\n if (isArray(value)) {\n result = [];\n expression = members.join(\".\");\n\n for (idx = 0, length = value.length; idx < length; idx++) {\n intermediateResult = this.evaluate(value[idx], expression);\n\n intermediateResult = isArray(intermediateResult) ? intermediateResult : [intermediateResult];\n\n result.push.apply(result, intermediateResult);\n }\n\n return result;\n }\n }\n\n return value;\n },\n\n parse: function(xml) {\n var documentElement,\n tree,\n result = {};\n\n documentElement = xml.documentElement || $.parseXML(xml).documentElement;\n\n tree = this.parseDOM(documentElement);\n\n result[documentElement.nodeName] = tree;\n\n return result;\n },\n\n xpathToMember: function(member, raw) {\n if (!member) {\n return \"\";\n }\n\n member = member.replace(/^\\//, \"\") // remove the first \"/\"\n .replace(/\\//g, \".\"); // replace all \"/\" with \".\"\n\n if (member.indexOf(\"@\") >= 0) {\n // replace @attribute with '[\"@attribute\"]'\n return member.replace(/\\.?(@.*)/, raw ? '$1' : '[\"$1\"]');\n }\n\n if (member.indexOf(\"text()\") >= 0) {\n // replace \".text()\" with '[\"#text\"]'\n return member.replace(/(\\.?text\\(\\))/, raw ? '#text' : '[\"#text\"]');\n }\n\n return member;\n },\n getter: function(member) {\n return getter(this.xpathToMember(member), true);\n }\n });\n\n $.extend(true, kendo.data, {\n XmlDataReader: XmlDataReader,\n readers: {\n xml: XmlDataReader\n }\n });\n })(window.kendo.jQuery);\n\n var __meta__$t = {\n id: \"data\",\n name: \"Data source\",\n category: \"framework\",\n description: \"Powerful component for using local and remote data.Fully supports CRUD, Sorting, Paging, Filtering, Grouping, and Aggregates.\",\n depends: [ \"core\" ],\n features: [ {\n id: \"data-odata\",\n name: \"OData\",\n description: \"Support for accessing Open Data Protocol (OData) services.\",\n depends: [ \"data.odata\" ]\n }, {\n id: \"data-signalr\",\n name: \"SignalR\",\n description: \"Support for binding to SignalR hubs.\",\n depends: [ \"data.signalr\" ]\n }, {\n id: \"data-XML\",\n name: \"XML\",\n description: \"Support for binding to XML.\",\n depends: [ \"data.xml\" ]\n }]\n };\n\n\n (function($, undefined$1) {\n var extend = $.extend,\n isPlainObject = $.isPlainObject,\n isEmptyObject = $.isEmptyObject,\n isArray = Array.isArray,\n grep = $.grep,\n ajax = $.ajax,\n map,\n each = $.each,\n noop = $.noop,\n kendo = window.kendo,\n isFunction = kendo.isFunction,\n Observable = kendo.Observable,\n Class = kendo.Class,\n STRING = \"string\",\n FUNCTION = \"function\",\n ASCENDING = \"asc\",\n CREATE = \"create\",\n READ = \"read\",\n UPDATE = \"update\",\n DESTROY = \"destroy\",\n CHANGE = \"change\",\n SYNC = \"sync\",\n GET = \"get\",\n ERROR = \"error\",\n REQUESTSTART = \"requestStart\",\n PROGRESS = \"progress\",\n REQUESTEND = \"requestEnd\",\n ITEMSLOADED = \"itemsLoaded\",\n ITEMLOAD = \"itemLoad\",\n crud = [CREATE, READ, UPDATE, DESTROY],\n identity = function(o) { return o; },\n getter = kendo.getter,\n stringify = kendo.stringify,\n math = Math,\n push = [].push,\n join = [].join,\n pop = [].pop,\n splice = [].splice,\n shift = [].shift,\n slice = [].slice,\n unshift = [].unshift,\n toString = {}.toString,\n stableSort = kendo.support.stableSort,\n dateRegExp = /^\\/Date\\((.*?)\\)\\/$/,\n objectKeys = [];\n\n var ObservableArray = Observable.extend({\n init: function(array, type) {\n var that = this;\n\n that.type = type || ObservableObject;\n\n Observable.fn.init.call(that);\n\n that.length = array.length;\n\n that.wrapAll(array, that);\n that._loadPromises = [];\n that._loadedNodes = [];\n },\n\n at: function(index) {\n return this[index];\n },\n\n toJSON: function(serializeFunctions) {\n var idx, length = this.length, value, json = new Array(length);\n\n for (idx = 0; idx < length; idx++) {\n value = this[idx];\n\n if (value instanceof ObservableObject) {\n value = value.toJSON(serializeFunctions);\n }\n\n json[idx] = value;\n }\n\n return json;\n },\n\n parent: noop,\n\n wrapAll: function(source, target) {\n var that = this,\n idx,\n length,\n parent = function() {\n return that;\n };\n\n target = target || [];\n\n for (idx = 0, length = source.length; idx < length; idx++) {\n target[idx] = that.wrap(source[idx], parent);\n }\n\n return target;\n },\n\n wrap: function(object, parent) {\n var that = this,\n observable;\n\n if (object !== null && toString.call(object) === \"[object Object]\") {\n observable = object instanceof that.type || object instanceof Model;\n\n if (!observable) {\n object = object instanceof ObservableObject ? object.toJSON() : object;\n object = new that.type(object);\n }\n\n object.parent = parent;\n\n object.bind(CHANGE, function(e) {\n var isGroup = object.hasOwnProperty(\"hasSubgroups\");\n that.trigger(CHANGE, {\n field: e.field,\n node: e.node,\n index: e.index,\n items: e.items || [this],\n action: e.node || isGroup ? (e.action || \"itemloaded\") : \"itemchange\"\n });\n });\n\n object.bind(ITEMLOAD, function(e) {\n that._loadPromises.push(e.promise);\n that._loading = true;\n\n e.promise.done(function() {\n that._loadedNodes.push(e.node);\n var index = that._loadPromises.indexOf(e.promise);\n that._loadPromises.splice(index, 1);\n\n if (!that._loadPromises.length) {\n that._loading = false;\n that.trigger(ITEMSLOADED, { collection: that, nodes: that._loadedNodes });\n that._loadedNodes = [];\n }\n });\n });\n }\n\n return object;\n },\n\n loading: function() {\n return this._loading;\n },\n\n push: function() {\n var index = this.length,\n items = this.wrapAll(arguments),\n result;\n\n result = push.apply(this, items);\n\n if (!this.omitChangeEvent) {\n this.trigger(CHANGE, {\n action: \"add\",\n index: index,\n items: items\n });\n }\n\n return result;\n },\n\n slice: slice,\n\n sort: [].sort,\n\n join: join,\n\n pop: function() {\n var length = this.length, result = pop.apply(this);\n\n if (length) {\n this.trigger(CHANGE, {\n action: \"remove\",\n index: length - 1,\n items: [result]\n });\n }\n\n return result;\n },\n\n splice: function(index, howMany, item) {\n var items = this.wrapAll(slice.call(arguments, 2)),\n result, i, len;\n\n result = splice.apply(this, [index, howMany].concat(items));\n\n if (result.length) {\n if (!this.omitChangeEvent) {\n this.trigger(CHANGE, {\n action: \"remove\",\n index: index,\n items: result\n });\n }\n\n for (i = 0, len = result.length; i < len; i++) {\n if (result[i] && result[i].children) {\n result[i].unbind(CHANGE);\n }\n }\n }\n\n if (item) {\n if (!this.omitChangeEvent) {\n this.trigger(CHANGE, {\n action: \"add\",\n index: index,\n items: items\n });\n }\n }\n return result;\n },\n\n shift: function() {\n var length = this.length, result = shift.apply(this);\n\n if (length) {\n this.trigger(CHANGE, {\n action: \"remove\",\n index: 0,\n items: [result]\n });\n }\n\n return result;\n },\n\n unshift: function() {\n var items = this.wrapAll(arguments),\n result;\n\n result = unshift.apply(this, items);\n\n this.trigger(CHANGE, {\n action: \"add\",\n index: 0,\n items: items\n });\n\n return result;\n },\n\n indexOf: function(item) {\n var that = this,\n idx,\n length;\n\n for (idx = 0, length = that.length; idx < length; idx++) {\n if (that[idx] === item) {\n return idx;\n }\n }\n return -1;\n },\n\n forEach: function(callback, thisArg) {\n var idx = 0;\n var length = this.length;\n var context = thisArg || window;\n\n for (; idx < length; idx++) {\n callback.call(context, this[idx], idx, this);\n }\n },\n\n map: function(callback, thisArg) {\n var idx = 0;\n var result = [];\n var length = this.length;\n var context = thisArg || window;\n\n for (; idx < length; idx++) {\n result[idx] = callback.call(context, this[idx], idx, this);\n }\n\n return result;\n },\n\n reduce: function(callback) {\n var idx = 0,\n result,\n length = this.length;\n\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx < length) {\n result = this[idx++];\n }\n\n for (; idx < length; idx++) {\n result = callback(result, this[idx], idx, this);\n }\n\n return result;\n },\n\n reduceRight: function(callback) {\n var idx = this.length - 1,\n result;\n\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx > 0) {\n result = this[idx--];\n }\n\n for (; idx >= 0; idx--) {\n result = callback(result, this[idx], idx, this);\n }\n\n return result;\n },\n\n filter: function(callback, thisArg) {\n var idx = 0;\n var result = [];\n var item;\n var length = this.length;\n var context = thisArg || window;\n\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n result[result.length] = item;\n }\n }\n\n return result;\n },\n\n find: function(callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n return item;\n }\n }\n },\n\n every: function(callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n\n for (; idx < length; idx++) {\n item = this[idx];\n if (!callback.call(context, item, idx, this)) {\n return false;\n }\n }\n\n return true;\n },\n\n some: function(callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n return true;\n }\n }\n\n return false;\n },\n\n // non-standard collection methods\n remove: function(item) {\n var idx = this.indexOf(item);\n\n if (idx !== -1) {\n this.splice(idx, 1);\n }\n },\n\n empty: function() {\n this.splice(0, this.length);\n }\n });\n\n // Polyfill for Symbol.iterator\n if (typeof Symbol !== \"undefined\" && Symbol.iterator && !ObservableArray.prototype[Symbol.iterator]) {\n ObservableArray.prototype[Symbol.iterator] = [][Symbol.iterator];\n }\n\n var LazyObservableArray = ObservableArray.extend({\n init: function(data, type, events) {\n var parentFn = function() { return this; };\n\n Observable.fn.init.call(this);\n\n this.type = type || ObservableObject;\n\n if (events) {\n this._events = events;\n }\n\n for (var idx = 0; idx < data.length; idx++) {\n this[idx] = data[idx];\n }\n\n this.length = idx;\n this._parent = parentFn.bind(this);\n },\n at: function(index) {\n var item = this[index];\n\n if (!(item instanceof this.type)) {\n item = this[index] = this.wrap(item, this._parent);\n } else {\n item.parent = this._parent;\n }\n\n return item;\n }\n });\n\n function eventHandler(context, type, field, prefix) {\n return function(e) {\n var event = {}, key;\n\n for (key in e) {\n event[key] = e[key];\n }\n\n if (prefix) {\n event.field = field + \".\" + e.field;\n } else {\n event.field = field;\n }\n\n if (type == CHANGE && context._notifyChange) {\n context._notifyChange(event);\n }\n\n context.trigger(type, event);\n };\n }\n\n function isPrimitiveType(value) {\n return (typeof value === \"object\" && Object.getPrototypeOf(value) === Object.getPrototypeOf({}))\n || Object.getPrototypeOf(value) === Object.getPrototypeOf(new Date())\n || typeof value !== \"object\";\n }\n\n function ownKeys(value, ignoreObjectKeys) {\n var props = [];\n var protoKeys = [];\n var keys, filteredObjectKeys;\n\n value = value || {};\n\n if (!isPrimitiveType(value)) {\n protoKeys = Object.getOwnPropertyNames(Object.getPrototypeOf(value));\n }\n\n keys = Object.getOwnPropertyNames(value).concat(protoKeys);\n\n filteredObjectKeys = objectKeys.filter(function(key) {\n return keys.indexOf(key) < 0;\n });\n\n while (value) {\n Object.getOwnPropertyNames(value).forEach(function(prop) {\n if (props.indexOf(prop) === -1 && (!ignoreObjectKeys || filteredObjectKeys.indexOf(prop) < 0)) {\n props.push(prop);\n }\n });\n value = Object.getPrototypeOf(value);\n }\n\n return props;\n }\n\n objectKeys = ownKeys({}, false);\n\n var ObservableObject = Observable.extend({\n init: function(value) {\n var that = this,\n member,\n keys = ownKeys(value, true),\n parent = function() {\n return that;\n };\n\n Observable.fn.init.call(this);\n\n this._handlers = {};\n\n keys.forEach(function(field) {\n member = value[field];\n\n if (typeof member === \"object\" && member && !member.getTime && field.charAt(0) != \"_\") {\n member = that.wrap(member, field, parent);\n }\n\n that[field] = member;\n });\n\n that.uid = kendo.guid();\n },\n\n shouldSerialize: function(field, serializeFunctions) {\n return this.hasOwnProperty(field) && field !== \"_handlers\" && field !== \"_events\" && ((serializeFunctions && serializeFunctions[field]) || typeof this[field] !== FUNCTION) && field !== \"uid\";\n },\n\n forEach: function(f) {\n for (var i in this) {\n if (this.shouldSerialize(i)) {\n f(this[i], i);\n }\n }\n },\n\n toJSON: function(serializeFunctions) {\n var result = {}, value, field;\n\n for (field in this) {\n if (this.shouldSerialize(field, serializeFunctions)) {\n value = this[field];\n\n if (value instanceof ObservableObject || value instanceof ObservableArray) {\n value = value.toJSON(serializeFunctions);\n }\n\n result[field] = value;\n }\n }\n\n return result;\n },\n\n get: function(field) {\n var that = this, result;\n\n that.trigger(GET, { field: field });\n\n if (field === \"this\") {\n result = that;\n } else {\n result = kendo.getter(field, true)(that);\n }\n\n return result;\n },\n\n _set: function(field, value) {\n var that = this;\n var composite = field.indexOf(\".\") >= 0;\n\n if (composite) {\n var paths = field.split(\".\"),\n path = \"\";\n\n while (paths.length > 1) {\n path += paths.shift();\n var obj = kendo.getter(path, true)(that);\n if (obj instanceof ObservableObject) {\n obj.set(paths.join(\".\"), value);\n return composite;\n }\n path += \".\";\n }\n }\n\n kendo.setter(field)(that, value);\n\n return composite;\n },\n\n set: function(field, value) {\n var that = this,\n isSetPrevented = false,\n composite = field.indexOf(\".\") >= 0,\n current = kendo.getter(field, true)(that);\n\n if (current !== value) {\n if (current instanceof Observable && this._handlers[field]) {\n if (this._handlers[field].get) {\n current.unbind(GET, this._handlers[field].get);\n }\n current.unbind(CHANGE, this._handlers[field].change);\n }\n\n isSetPrevented = that.trigger(\"set\", { field: field, value: value });\n\n if (!isSetPrevented) {\n if (!composite) {\n value = that.wrap(value, field, function() { return that; });\n }\n if (!that._set(field, value) || field.indexOf(\"(\") >= 0 || field.indexOf(\"[\") >= 0) {\n that.trigger(CHANGE, { field: field });\n }\n }\n }\n\n return isSetPrevented;\n },\n\n parent: noop,\n\n wrap: function(object, field, parent) {\n var that = this;\n var get;\n var change;\n var type = toString.call(object);\n\n if (object != null && (type === \"[object Object]\" || type === \"[object Array]\")) {\n var isObservableArray = object instanceof ObservableArray;\n var isDataSource = object instanceof DataSource;\n\n if (type === \"[object Object]\" && !isDataSource && !isObservableArray) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n\n get = eventHandler(that, GET, field, true);\n object.bind(GET, get);\n change = eventHandler(that, CHANGE, field, true);\n object.bind(CHANGE, change);\n\n that._handlers[field] = { get: get, change: change };\n } else if (type === \"[object Array]\" || isObservableArray || isDataSource) {\n if (!isObservableArray && !isDataSource) {\n object = new ObservableArray(object);\n }\n\n change = eventHandler(that, CHANGE, field, false);\n\n object.bind(CHANGE, change);\n\n that._handlers[field] = { change: change };\n }\n\n object.parent = parent;\n }\n\n return object;\n }\n });\n\n function equal(x, y) {\n if (x === y) {\n return true;\n }\n\n var xtype = kendo.type(x), ytype = kendo.type(y), field;\n\n if (xtype !== ytype) {\n return false;\n }\n\n if (xtype === \"date\") {\n return x.getTime() === y.getTime();\n }\n\n if (xtype !== \"object\" && xtype !== \"array\") {\n return false;\n }\n\n for (field in x) {\n if (!equal(x[field], y[field])) {\n return false;\n }\n }\n\n return true;\n }\n\n var parsers = {\n \"number\": function(value) {\n if (typeof value === STRING && value.toLowerCase() === \"null\") {\n return null;\n }\n return kendo.parseFloat(value);\n },\n\n \"date\": function(value) {\n if (typeof value === STRING && value.toLowerCase() === \"null\") {\n return null;\n }\n return kendo.parseDate(value);\n },\n\n \"boolean\": function(value) {\n if (typeof value === STRING) {\n if (value.toLowerCase() === \"null\") {\n return null;\n } else {\n return value.toLowerCase() === \"true\";\n }\n }\n return value != null ? !!value : value;\n },\n\n \"string\": function(value) {\n if (typeof value === STRING && value.toLowerCase() === \"null\") {\n return null;\n }\n return value != null ? (value + \"\") : value;\n },\n\n \"default\": function(value) {\n return value;\n }\n };\n\n var defaultValues = {\n \"string\": \"\",\n \"number\": 0,\n \"date\": new Date(),\n \"boolean\": false,\n \"default\": \"\"\n };\n\n function getFieldByName(obj, name) {\n var field,\n fieldName;\n\n for (fieldName in obj) {\n field = obj[fieldName];\n if (isPlainObject(field) && field.field && field.field === name) {\n return field;\n } else if (field === name) {\n return field;\n }\n }\n return null;\n }\n\n var Model = ObservableObject.extend({\n init: function(data) {\n var that = this;\n\n if (!data || $.isEmptyObject(data)) {\n data = $.extend({}, that.defaults, data);\n\n if (that._initializers) {\n for (var idx = 0; idx < that._initializers.length; idx++) {\n var name = that._initializers[idx];\n data[name] = that.defaults[name]();\n }\n }\n }\n\n ObservableObject.fn.init.call(that, data);\n\n that.dirty = false;\n that.dirtyFields = {};\n\n if (that.idField) {\n that.id = that.get(that.idField);\n\n if (that.id === undefined$1) {\n that.id = that._defaultId;\n }\n }\n },\n\n shouldSerialize: function(field) {\n return ObservableObject.fn.shouldSerialize.call(this, field) &&\n field !== \"uid\" && !(this.idField !== \"id\" && field === \"id\") &&\n field !== \"dirty\" && field !== \"dirtyFields\" && field !== \"_accessors\";\n },\n\n _parse: function(field, value) {\n var that = this,\n fieldName = field,\n fields = (that.fields || {}),\n parse;\n\n field = fields[field];\n if (!field) {\n field = getFieldByName(fields, fieldName);\n }\n if (field) {\n parse = field.parse;\n if (!parse && field.type) {\n parse = parsers[field.type.toLowerCase()];\n }\n }\n\n return parse ? parse(value) : value;\n },\n\n _notifyChange: function(e) {\n var action = e.action;\n\n if (action == \"add\" || action == \"remove\") {\n this.dirty = true;\n this.dirtyFields[e.field] = true;\n }\n },\n\n editable: function(field) {\n field = (this.fields || {})[field];\n return field ? field.editable !== false : true;\n },\n\n set: function(field, value) {\n var that = this;\n var dirty = that.dirty;\n\n if (that.editable(field)) {\n value = that._parse(field, value);\n\n if (!equal(value, that.get(field))) {\n that.dirty = true;\n that.dirtyFields[field] = true;\n\n if (ObservableObject.fn.set.call(that, field, value) && !dirty) {\n that.dirty = dirty;\n\n if (!that.dirty) {\n that.dirtyFields[field] = false;\n }\n }\n } else {\n that.trigger(\"equalSet\", { field: field, value: value });\n }\n }\n },\n\n accept: function(data) {\n var that = this,\n parent = function() { return that; },\n field;\n\n for (field in data) {\n var value = data[field];\n\n if (field.charAt(0) != \"_\") {\n value = that.wrap(data[field], field, parent);\n }\n\n that._set(field, value);\n }\n\n if (that.idField) {\n that.id = that.get(that.idField);\n }\n\n that.dirty = false;\n that.dirtyFields = {};\n },\n\n isNew: function() {\n return this.id === this._defaultId;\n }\n });\n\n Model.define = function(base, options) {\n if (options === undefined$1) {\n options = base;\n base = Model;\n }\n\n var model,\n proto = extend({ defaults: {} }, options),\n name,\n field,\n type,\n value,\n idx,\n length,\n fields = {},\n originalName,\n id = proto.id,\n functionFields = [];\n\n if (id) {\n proto.idField = id;\n }\n\n if (proto.id) {\n delete proto.id;\n }\n\n if (id) {\n proto.defaults[id] = proto._defaultId = \"\";\n }\n\n if (toString.call(proto.fields) === \"[object Array]\") {\n for (idx = 0, length = proto.fields.length; idx < length; idx++) {\n field = proto.fields[idx];\n if (typeof field === STRING) {\n fields[field] = {};\n } else if (field.field) {\n fields[field.field] = field;\n }\n }\n proto.fields = fields;\n }\n\n for (name in proto.fields) {\n field = proto.fields[name];\n type = field.type || \"default\";\n value = null;\n originalName = name;\n\n name = typeof (field.field) === STRING ? field.field : name;\n\n if (!field.nullable) {\n value = proto.defaults[originalName !== name ? originalName : name] = field.defaultValue !== undefined$1 ? field.defaultValue : defaultValues[type.toLowerCase()];\n\n if (typeof value === \"function\") {\n functionFields.push(name);\n }\n }\n\n if (options.id === name) {\n proto._defaultId = value;\n }\n\n proto.defaults[originalName !== name ? originalName : name] = value;\n\n if ($.isPlainObject(field)) {\n field.parse = field.parse || parsers[type];\n } else {\n field = {\n parse: parsers[type]\n };\n }\n }\n\n if (functionFields.length > 0) {\n proto._initializers = functionFields;\n }\n\n model = base.extend(proto);\n model.define = function(options) {\n return Model.define(model, options);\n };\n\n if (proto.fields) {\n model.fields = proto.fields;\n model.idField = proto.idField;\n }\n\n return model;\n };\n\n var Comparer = {\n selector: function(field) {\n return isFunction(field) ? field : getter(field);\n },\n\n compare: function(field) {\n var selector = this.selector(field);\n return function(a, b) {\n a = selector(a);\n b = selector(b);\n\n if (a == null && b == null) {\n return 0;\n }\n\n if (a == null) {\n return -1;\n }\n\n if (b == null) {\n return 1;\n }\n\n if (a.localeCompare) {\n return a.localeCompare(b);\n }\n\n return a > b ? 1 : (a < b ? -1 : 0);\n };\n },\n\n create: function(sort) {\n var compare = sort.compare || this.compare(sort.field);\n\n if (sort.dir == \"desc\") {\n return function(a, b) {\n return compare(b, a, true);\n };\n }\n\n return compare;\n },\n\n combine: function(comparers) {\n return function(a, b) {\n var result = comparers[0](a, b),\n idx,\n length;\n\n for (idx = 1, length = comparers.length; idx < length; idx ++) {\n result = result || comparers[idx](a, b);\n }\n\n return result;\n };\n }\n };\n\n var StableComparer = extend({}, Comparer, {\n asc: function(field) {\n var selector = this.selector(field);\n return function(a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n\n if (valueA == null) {\n return -1;\n }\n\n if (valueB == null) {\n return 1;\n }\n\n if (valueA.localeCompare) {\n return valueA.localeCompare(valueB);\n }\n\n return valueA > valueB ? 1 : -1;\n };\n },\n\n desc: function(field) {\n var selector = this.selector(field);\n return function(a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n\n if (valueA == null) {\n return 1;\n }\n\n if (valueB == null) {\n return -1;\n }\n\n if (valueB.localeCompare) {\n return valueB.localeCompare(valueA);\n }\n\n return valueA < valueB ? 1 : -1;\n };\n },\n create: function(sort) {\n return this[sort.dir](sort.field);\n }\n });\n\n map = function(array, callback) {\n var idx, length = array.length, result = new Array(length);\n\n for (idx = 0; idx < length; idx++) {\n result[idx] = callback(array[idx], idx, array);\n }\n\n return result;\n };\n\n var operators = (function() {\n\n function quote(str) {\n if (typeof str == \"string\") {\n str = str.replace(/[\\r\\n]+/g, \"\");\n }\n return JSON.stringify(str);\n }\n\n function textOp(impl) {\n return function(a, b, ignore, accentFoldingFiltering) {\n b += \"\";\n if (ignore) {\n a = \"(\" + a + \" + '').toString()\" + ((accentFoldingFiltering) ? \".toLocaleLowerCase('\" + accentFoldingFiltering + \"')\" : \".toLowerCase()\");\n b = ((accentFoldingFiltering) ? b.toLocaleLowerCase(accentFoldingFiltering) : b.toLowerCase());\n }\n return impl(a, quote(b), ignore);\n };\n }\n\n function operator(op, a, b, ignore, accentFoldingFiltering) {\n if (b != null) {\n if (typeof b === STRING) {\n var date = dateRegExp.exec(b);\n if (date) {\n b = new Date(+date[1]);\n } else if (ignore) {\n b = quote(((accentFoldingFiltering) ? b.toLocaleLowerCase(accentFoldingFiltering) : b.toLowerCase()));\n a = \"((\" + a + \" || '')+'')\" + ((accentFoldingFiltering) ? \".toLocaleLowerCase('\" + accentFoldingFiltering + \"')\" : \".toLowerCase()\");\n } else {\n b = quote(b);\n }\n }\n\n if (b.getTime) {\n //b looks like a Date\n a = \"(\" + a + \"&&\" + a + \".getTime?\" + a + \".getTime():\" + a + \")\";\n b = b.getTime();\n }\n }\n\n return a + \" \" + op + \" \" + b;\n }\n\n function getMatchRegexp(pattern) {\n // take a pattern, as supported by Excel match filter, and\n // convert it to the equivalent JS regular expression.\n // Excel patterns support:\n //\n // * - match any sequence of characters\n // ? - match a single character\n //\n // to match a literal * or ?, they must be prefixed by a tilde (~)\n for (var rx = \"/^\", esc = false, i = 0; i < pattern.length; ++i) {\n var ch = pattern.charAt(i);\n if (esc) {\n rx += \"\\\\\" + ch;\n } else if (ch == \"~\") {\n esc = true;\n continue;\n } else if (ch == \"*\") {\n rx += \".*\";\n } else if (ch == \"?\") {\n rx += \".\";\n } else if (\".+^$()[]{}|\\\\/\\n\\r\\u2028\\u2029\\xA0\".indexOf(ch) >= 0) {\n rx += \"\\\\\" + ch;\n } else {\n rx += ch;\n }\n esc = false;\n }\n return rx + \"$/\";\n }\n\n return {\n quote: function(value) {\n if (value && value.getTime) {\n return \"new Date(\" + value.getTime() + \")\";\n }\n return quote(value);\n },\n eq: function(a, b, ignore, accentFoldingFiltering) {\n return operator(\"==\", a, b, ignore, accentFoldingFiltering);\n },\n neq: function(a, b, ignore, accentFoldingFiltering) {\n return operator(\"!=\", a, b, ignore, accentFoldingFiltering);\n },\n gt: function(a, b, ignore) {\n return operator(\">\", a, b, ignore);\n },\n gte: function(a, b, ignore) {\n return operator(\">=\", a, b, ignore);\n },\n lt: function(a, b, ignore) {\n return operator(\"<\", a, b, ignore);\n },\n lte: function(a, b, ignore) {\n return operator(\"<=\", a, b, ignore);\n },\n startswith: textOp(function(a, b) {\n return a + \".lastIndexOf(\" + b + \", 0) == 0\";\n }),\n doesnotstartwith: textOp(function(a, b) {\n return a + \".lastIndexOf(\" + b + \", 0) == -1\";\n }),\n endswith: textOp(function(a, b) {\n var n = b ? b.length - 2 : 0;\n return a + \".indexOf(\" + b + \", \" + a + \".length - \" + n + \") >= 0\";\n }),\n doesnotendwith: textOp(function(a, b) {\n var n = b ? b.length - 2 : 0;\n return a + \".indexOf(\" + b + \", \" + a + \".length - \" + n + \") < 0\";\n }),\n contains: textOp(function(a, b) {\n return a + \".indexOf(\" + b + \") >= 0\";\n }),\n doesnotcontain: textOp(function(a, b) {\n return a + \".indexOf(\" + b + \") == -1\";\n }),\n matches: textOp(function(a, b) {\n b = b.substring(1, b.length - 1);\n return getMatchRegexp(b) + \".test(\" + a + \")\";\n }),\n doesnotmatch: textOp(function(a, b) {\n b = b.substring(1, b.length - 1);\n return \"!\" + getMatchRegexp(b) + \".test(\" + a + \")\";\n }),\n isempty: function(a) {\n return a + \" === ''\";\n },\n isnotempty: function(a) {\n return a + \" !== ''\";\n },\n isnull: function(a) {\n return \"(\" + a + \" == null)\";\n },\n isnotnull: function(a) {\n return \"(\" + a + \" != null)\";\n },\n isnullorempty: function(a) {\n return \"(\" + a + \" === null) || (\" + a + \" === '')\";\n },\n isnotnullorempty: function(a) {\n return \"(\" + a + \" !== null) && (\" + a + \" !== '')\";\n }\n };\n })();\n\n function Query(data) {\n this.data = data || [];\n }\n\n Query.filterExpr = function(expression) {\n var expressions = [],\n logic = { and: \" && \", or: \" || \" },\n idx,\n length,\n filter,\n expr,\n fieldFunctions = [],\n operatorFunctions = [],\n field,\n operator,\n filters = expression.filters;\n\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n operator = filter.operator;\n\n if (filter.filters) {\n expr = Query.filterExpr(filter);\n //Nested function fields or operators - update their index e.g. __o[0] -> __o[1]\n filter = expr.expression\n .replace(/__o\\[(\\d+)\\]/g, function(match, index) {\n index = +index;\n return \"__o[\" + (operatorFunctions.length + index) + \"]\";\n })\n .replace(/__f\\[(\\d+)\\]/g, function(match, index) {\n index = +index;\n return \"__f[\" + (fieldFunctions.length + index) + \"]\";\n });\n\n operatorFunctions.push.apply(operatorFunctions, expr.operators);\n fieldFunctions.push.apply(fieldFunctions, expr.fields);\n } else {\n if (typeof field === FUNCTION) {\n expr = \"__f[\" + fieldFunctions.length + \"](d)\";\n fieldFunctions.push(field);\n } else {\n expr = kendo.expr(field);\n }\n\n if (typeof operator === FUNCTION) {\n filter = \"__o[\" + operatorFunctions.length + \"](\" + expr + \", \" + operators.quote(filter.value) + \")\";\n operatorFunctions.push(operator);\n } else {\n filter = operators[(operator || \"eq\").toLowerCase()](expr, filter.value, filter.ignoreCase !== undefined$1 ? filter.ignoreCase : true, expression.accentFoldingFiltering);\n }\n }\n\n expressions.push(filter);\n }\n\n return { expression: \"(\" + expressions.join(logic[expression.logic]) + \")\", fields: fieldFunctions, operators: operatorFunctions };\n };\n\n function normalizeSort(field, dir) {\n if (field) {\n var descriptor = typeof field === STRING ? { field: field, dir: dir } : field,\n descriptors = isArray(descriptor) ? descriptor : (descriptor !== undefined$1 ? [descriptor] : []);\n\n return grep(descriptors, function(d) { return !!d.dir; });\n }\n }\n\n function sortFields(sorts, dir) {\n var sortObject = {};\n\n if (sorts) {\n var descriptor = typeof sorts === STRING ? { field: sorts, dir: dir } : sorts,\n descriptors = isArray(descriptor) ? descriptor : (descriptor !== undefined$1 ? [descriptor] : []);\n\n for (var i = 0; i < descriptors.length; i++) {\n sortObject[descriptors[i].field] = { dir: descriptors[i].dir, index: i + 1 };\n }\n }\n\n return sortObject;\n }\n\n var operatorMap = {\n \"==\": \"eq\",\n equals: \"eq\",\n isequalto: \"eq\",\n equalto: \"eq\",\n equal: \"eq\",\n \"!=\": \"neq\",\n ne: \"neq\",\n notequals: \"neq\",\n isnotequalto: \"neq\",\n notequalto: \"neq\",\n notequal: \"neq\",\n \"<\": \"lt\",\n islessthan: \"lt\",\n lessthan: \"lt\",\n less: \"lt\",\n \"<=\": \"lte\",\n le: \"lte\",\n islessthanorequalto: \"lte\",\n lessthanequal: \"lte\",\n \">\": \"gt\",\n isgreaterthan: \"gt\",\n greaterthan: \"gt\",\n greater: \"gt\",\n \">=\": \"gte\",\n isgreaterthanorequalto: \"gte\",\n greaterthanequal: \"gte\",\n ge: \"gte\",\n notsubstringof: \"doesnotcontain\",\n isnull: \"isnull\",\n isempty: \"isempty\",\n isnotempty: \"isnotempty\"\n };\n\n function normalizeOperator(expression) {\n var idx,\n length,\n filter,\n operator,\n filters = expression.filters;\n\n if (filters) {\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n operator = filter.operator;\n\n if (operator && typeof operator === STRING) {\n filter.operator = operatorMap[operator.toLowerCase()] || operator;\n }\n\n normalizeOperator(filter);\n }\n }\n }\n\n function normalizeFilter(expression) {\n if (expression && !isEmptyObject(expression)) {\n if (isArray(expression) || !expression.filters) {\n expression = {\n logic: \"and\",\n filters: isArray(expression) ? expression : [expression]\n };\n }\n\n normalizeOperator(expression);\n\n return expression;\n }\n }\n\n Query.normalizeFilter = normalizeFilter;\n\n function compareDescriptor(f1, f2) {\n if (f1.logic || f2.logic) {\n return false;\n }\n\n return f1.field === f2.field && f1.value === f2.value && f1.operator === f2.operator;\n }\n\n function normalizeDescriptor(filter) {\n filter = filter || {};\n\n if (isEmptyObject(filter)) {\n return { logic: \"and\", filters: [] };\n }\n\n return normalizeFilter(filter);\n }\n\n function fieldComparer(a, b) {\n if (b.logic || (a.field > b.field)) {\n return 1;\n } else if (a.field < b.field) {\n return -1;\n } else {\n return 0;\n }\n }\n\n function compareFilters(expr1, expr2) {\n expr1 = normalizeDescriptor(expr1);\n expr2 = normalizeDescriptor(expr2);\n\n if (expr1.logic !== expr2.logic) {\n return false;\n }\n\n var f1, f2;\n var filters1 = (expr1.filters || []).slice();\n var filters2 = (expr2.filters || []).slice();\n\n if (filters1.length !== filters2.length) {\n return false;\n }\n\n filters1 = filters1.sort(fieldComparer);\n filters2 = filters2.sort(fieldComparer);\n\n for (var idx = 0; idx < filters1.length; idx++) {\n f1 = filters1[idx];\n f2 = filters2[idx];\n\n if (f1.logic && f2.logic) {\n if (!compareFilters(f1, f2)) {\n return false;\n }\n } else if (!compareDescriptor(f1, f2)) {\n return false;\n }\n }\n\n return true;\n }\n\n Query.compareFilters = compareFilters;\n\n function normalizeAggregate(expressions) {\n return isArray(expressions) ? expressions : [expressions];\n }\n\n function normalizeGroup(field, dir, compare, skipItemSorting) {\n var descriptor = typeof field === STRING ? { field: field, dir: dir, compare: compare, skipItemSorting: skipItemSorting } : field,\n descriptors = isArray(descriptor) ? descriptor : (descriptor !== undefined$1 ? [descriptor] : []);\n\n return map(descriptors, function(d) {\n return {\n field: d.field,\n dir: d.dir || \"asc\",\n aggregates: d.aggregates,\n compare: d.compare,\n skipItemSorting: d.skipItemSorting\n };\n });\n }\n\n function normalizeGroupWithoutCompare(field, dir, compare) {\n var descriptors = normalizeGroup(field, dir, compare);\n\n for (var i = 0; i < descriptors.length; i++) {\n delete descriptors[i].compare;\n }\n\n return descriptors;\n }\n\n function anyGroupDescriptorHasCompare(groupDescriptors) {\n var descriptors = isArray(groupDescriptors) ? groupDescriptors : [groupDescriptors];\n\n for (var i = 0; i < descriptors.length; i++) {\n if (descriptors[i] && isFunction(descriptors[i].compare)) {\n return true;\n }\n }\n\n return false;\n }\n\n Query.prototype = {\n toArray: function() {\n return this.data;\n },\n range: function(index, count) {\n return new Query(this.data.slice(index, index + count));\n },\n skip: function(count) {\n return new Query(this.data.slice(count));\n },\n take: function(count) {\n return new Query(this.data.slice(0, count));\n },\n select: function(selector) {\n return new Query(map(this.data, selector));\n },\n order: function(selector, dir, inPlace) {\n var sort = { dir: dir };\n\n if (selector) {\n if (selector.compare) {\n sort.compare = selector.compare;\n } else {\n sort.field = selector;\n }\n }\n\n if (inPlace) {\n return new Query(this.data.sort(Comparer.create(sort)));\n }\n\n return new Query(this.data.slice(0).sort(Comparer.create(sort)));\n },\n orderBy: function(selector, inPlace) {\n return this.order(selector, \"asc\", inPlace);\n },\n orderByDescending: function(selector, inPlace) {\n return this.order(selector, \"desc\", inPlace);\n },\n sort: function(field, dir, comparer, inPlace) {\n var idx,\n length,\n descriptors = normalizeSort(field, dir),\n comparers = [];\n\n comparer = comparer || Comparer;\n\n if (descriptors.length) {\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\n comparers.push(comparer.create(descriptors[idx]));\n }\n\n return this.orderBy({ compare: comparer.combine(comparers) }, inPlace);\n }\n\n return this;\n },\n\n filter: function(expressions) {\n var idx,\n current,\n length,\n compiled,\n predicate,\n data = this.data,\n fields,\n operators,\n result = [],\n filter;\n\n expressions = normalizeFilter(expressions);\n\n if (!expressions || expressions.filters.length === 0) {\n return this;\n }\n\n compiled = Query.filterExpr(expressions);\n fields = compiled.fields;\n operators = compiled.operators;\n\n predicate = filter = new Function(\"d, __f, __o\", \"return \" + compiled.expression);\n\n if (fields.length || operators.length) {\n filter = function(d) {\n return predicate(d, fields, operators);\n };\n }\n\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n current = data[idx];\n\n if (filter(current)) {\n result.push(current);\n }\n }\n\n return new Query(result);\n },\n\n group: function(descriptors, allData, options) {\n descriptors = normalizeGroup(descriptors || []);\n allData = allData || this.data;\n\n var that = this,\n result = new Query(that.data),\n descriptor;\n\n if (descriptors.length > 0) {\n descriptor = descriptors[0];\n\n if (options && options.groupPaging) {\n result = new Query(allData).groupAllData(descriptor, allData).select(function(group) {\n var data = new Query(allData).filter([{\n field: group.field,\n operator: \"eq\",\n value: group.value,\n ignoreCase: false\n }]);\n var items = descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), data.toArray(), options).toArray() : group.items;\n return {\n field: group.field,\n value: group.value,\n hasSubgroups: descriptors.length > 1,\n items: items,\n aggregates: data.aggregate(descriptor.aggregates),\n uid: kendo.guid(),\n itemCount: items.length,\n subgroupCount: items.length\n };\n });\n\n } else {\n result = result.groupBy(descriptor).select(function(group) {\n var data = new Query(allData).filter([ { field: group.field, operator: \"eq\", value: group.value, ignoreCase: false } ]);\n return {\n field: group.field,\n value: group.value,\n items: descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), data.toArray()).toArray() : group.items,\n hasSubgroups: descriptors.length > 1,\n aggregates: data.aggregate(descriptor.aggregates)\n };\n });\n }\n }\n return result;\n },\n\n groupBy: function(descriptor) {\n var that = this;\n\n if (isEmptyObject(descriptor) || !this.data.length) {\n return new Query([]);\n }\n\n var field = descriptor.field,\n sorted = descriptor.skipItemSorting ? this.data : this._sortForGrouping(field, descriptor.dir || \"asc\"),\n accessor = kendo.accessor(field),\n item,\n groupValue = accessor.get(sorted[0], field),\n group = {\n field: field,\n value: groupValue,\n items: []\n },\n currentValue,\n idx,\n len,\n result = [group];\n\n for (idx = 0, len = sorted.length; idx < len; idx++) {\n item = sorted[idx];\n currentValue = accessor.get(item, field);\n if (!groupValueComparer(groupValue, currentValue)) {\n groupValue = currentValue;\n group = {\n field: field,\n value: groupValue,\n items: []\n };\n result.push(group);\n }\n group.items.push(item);\n }\n\n result = that._sortGroups(result, descriptor);\n\n return new Query(result);\n },\n\n groupAllData: function(descriptor, allData) {\n if (isEmptyObject(descriptor) || this.data && !this.data.length) {\n return new Query([]);\n }\n\n var field = descriptor.field,\n sorted = descriptor.skipItemSorting ? allData : new Query(allData).sort(field, descriptor.dir || \"asc\", StableComparer).toArray(),\n accessor = kendo.accessor(field),\n item,\n groupValue = accessor.get(sorted[0], field),\n group = {\n field: field,\n value: groupValue,\n items: []\n },\n currentValue,\n idx,\n len,\n result = [group];\n\n for (idx = 0, len = sorted.length; idx < len; idx++) {\n item = sorted[idx];\n currentValue = accessor.get(item, field);\n if (!groupValueComparer(groupValue, currentValue)) {\n groupValue = currentValue;\n group = {\n field: field,\n value: groupValue,\n items: []\n };\n result.push(group);\n }\n group.items.push(item);\n }\n\n result = this._sortGroups(result, descriptor);\n\n return new Query(result);\n },\n\n _sortForGrouping: function(field, dir) {\n var idx, length,\n data = this.data;\n\n if (!stableSort) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n data[idx].__position = idx;\n }\n\n data = new Query(data).sort(field, dir, StableComparer).toArray();\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n delete data[idx].__position;\n }\n return data;\n }\n\n return this.sort(field, dir).toArray();\n },\n\n _sortGroups: function(groups, descriptor) {\n var result = groups;\n\n if (descriptor && isFunction(descriptor.compare)) {\n result = new Query(result).order({ compare: descriptor.compare }, descriptor.dir || ASCENDING).toArray();\n }\n\n return result;\n },\n\n aggregate: function(aggregates) {\n var idx,\n len,\n result = {},\n state = {};\n\n if (aggregates && aggregates.length) {\n for (idx = 0, len = this.data.length; idx < len; idx++) {\n calculateAggregate(result, aggregates, this.data[idx], idx, len, state);\n }\n }\n return result;\n }\n };\n\n function groupValueComparer(a, b) {\n if (a && a.getTime && b && b.getTime) {\n return a.getTime() === b.getTime();\n }\n return a === b;\n }\n\n function calculateAggregate(accumulator, aggregates, item, index, length, state) {\n aggregates = aggregates || [];\n var idx,\n aggr,\n functionName,\n len = aggregates.length;\n\n for (idx = 0; idx < len; idx++) {\n aggr = aggregates[idx];\n functionName = aggr.aggregate;\n var field = aggr.field;\n accumulator[field] = accumulator[field] || {};\n state[field] = state[field] || {};\n state[field][functionName] = state[field][functionName] || {};\n accumulator[field][functionName] = functions[functionName.toLowerCase()](accumulator[field][functionName], item, kendo.accessor(field), index, length, state[field][functionName]);\n }\n }\n\n var functions = {\n sum: function(accumulator, item, accessor) {\n var value = accessor.get(item);\n\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n\n return accumulator;\n },\n count: function(accumulator) {\n return (accumulator || 0) + 1;\n },\n average: function(accumulator, item, accessor, index, length, state) {\n var value = accessor.get(item);\n\n if (state.count === undefined$1) {\n state.count = 0;\n }\n\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n\n if (isNumber(value)) {\n state.count++;\n }\n\n if (index == length - 1 && isNumber(accumulator)) {\n accumulator = accumulator / state.count;\n }\n return accumulator;\n },\n max: function(accumulator, item, accessor) {\n var value = accessor.get(item);\n\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n\n if (accumulator < value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n },\n min: function(accumulator, item, accessor) {\n var value = accessor.get(item);\n\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n\n if (accumulator > value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n }\n };\n\n function isNumber(val) {\n return typeof val === \"number\" && !isNaN(val);\n }\n\n function isDate(val) {\n return val && val.getTime;\n }\n\n function toJSON(array) {\n var idx, length = array.length, result = new Array(length);\n\n for (idx = 0; idx < length; idx++) {\n result[idx] = array[idx].toJSON();\n }\n\n return result;\n }\n\n Query.normalizeGroup = normalizeGroup;\n Query.normalizeSort = normalizeSort;\n\n Query.process = function(data, options, inPlace) {\n options = options || {};\n\n var group = options.group;\n var customGroupSort = anyGroupDescriptorHasCompare(normalizeGroup(group || []));\n var query = new Query(data),\n groupDescriptorsWithoutCompare = normalizeGroupWithoutCompare(group || []),\n normalizedSort = normalizeSort(options.sort || []),\n sort = customGroupSort ? normalizedSort : groupDescriptorsWithoutCompare.concat(normalizedSort),\n groupDescriptorsWithoutSort,\n total,\n filterCallback = options.filterCallback,\n filter = options.filter,\n skip = options.skip,\n take = options.take;\n\n if (sort && inPlace) {\n query = query.sort(sort, undefined$1, undefined$1, inPlace);\n }\n\n if (filter) {\n query = query.filter(filter);\n\n if (filterCallback) {\n query = filterCallback(query);\n }\n\n total = query.toArray().length;\n }\n\n if (sort) {\n if (!inPlace) {\n query = query.sort(sort);\n }\n\n if (group) {\n data = query.toArray();\n }\n }\n\n if (customGroupSort) {\n query = query.group(group, data, options);\n\n if (skip !== undefined$1 && take !== undefined$1 && !options.groupPaging) {\n query = new Query(flatGroups(query.toArray())).range(skip, take);\n\n groupDescriptorsWithoutSort = map(groupDescriptorsWithoutCompare, function(groupDescriptor) {\n return extend({}, groupDescriptor, {\n skipItemSorting: true\n });\n });\n\n query = query.group(groupDescriptorsWithoutSort, data, options);\n }\n } else {\n if (skip !== undefined$1 && take !== undefined$1) {\n total = query.data.length;\n\n if (skip + take > total && options.virtual) {\n skip -= skip + take - total;\n skip = skip < 0 ? 0 : skip;\n }\n query = query.range(skip, take);\n }\n\n if (group && (!isEmptyObject(group) || group.length !== 0)) {\n query = query.group(group, data, options);\n }\n }\n\n return {\n total: total,\n data: query.toArray()\n };\n };\n\n var LocalTransport = Class.extend({\n init: function(options) {\n this.data = options.data;\n },\n\n read: function(options) {\n options.success(this.data);\n },\n update: function(options) {\n options.success(options.data);\n },\n create: function(options) {\n options.success(options.data);\n },\n destroy: function(options) {\n options.success(options.data);\n }\n });\n\n var RemoteTransport = Class.extend( {\n init: function(options) {\n var that = this, parameterMap;\n\n options = that.options = extend({}, that.options, options);\n\n each(crud, function(index, type) {\n if (typeof options[type] === STRING) {\n options[type] = {\n url: options[type]\n };\n }\n });\n\n that.cache = options.cache ? Cache.create(options.cache) : {\n find: noop,\n add: noop\n };\n\n parameterMap = options.parameterMap;\n\n if (options.submit) {\n that.submit = options.submit;\n }\n\n if (isFunction(options.push)) {\n that.push = options.push;\n }\n\n if (!that.push) {\n that.push = identity;\n }\n\n that.parameterMap = isFunction(parameterMap) ? parameterMap : function(options) {\n var result = {};\n\n each(options, function(option, value) {\n if (option in parameterMap) {\n option = parameterMap[option];\n if (isPlainObject(option)) {\n value = option.value(value);\n option = option.key;\n }\n }\n\n result[option] = value;\n });\n\n return result;\n };\n },\n\n options: {\n parameterMap: identity\n },\n\n create: function(options) {\n return ajax(this.setup(options, CREATE));\n },\n\n read: function(options) {\n var that = this,\n success,\n error,\n result,\n cache = that.cache;\n\n options = that.setup(options, READ);\n\n success = options.success || noop;\n error = options.error || noop;\n\n result = cache.find(options.data);\n\n if (result !== undefined$1) {\n success(result);\n } else {\n options.success = function(result) {\n cache.add(options.data, result);\n\n success(result);\n };\n\n $.ajax(options);\n }\n },\n\n update: function(options) {\n return ajax(this.setup(options, UPDATE));\n },\n\n destroy: function(options) {\n return ajax(this.setup(options, DESTROY));\n },\n\n setup: function(options, type) {\n options = options || {};\n\n var that = this,\n parameters,\n operation = that.options[type],\n data = isFunction(operation.data) ? operation.data(options.data) : operation.data;\n\n options = extend(true, {}, operation, options);\n parameters = extend(true, {}, data, options.data);\n\n options.data = that.parameterMap(parameters, type);\n\n if (isFunction(options.url)) {\n options.url = options.url(parameters);\n }\n\n return options;\n }\n });\n\n var Cache = Class.extend({\n init: function() {\n this._store = {};\n },\n add: function(key, data) {\n if (key !== undefined$1) {\n this._store[stringify(key)] = data;\n }\n },\n find: function(key) {\n return this._store[stringify(key)];\n },\n clear: function() {\n this._store = {};\n },\n remove: function(key) {\n delete this._store[stringify(key)];\n }\n });\n\n Cache.create = function(options) {\n var store = {\n \"inmemory\": function() { return new Cache(); }\n };\n\n if (isPlainObject(options) && isFunction(options.find)) {\n return options;\n }\n\n if (options === true) {\n return new Cache();\n }\n\n return store[options]();\n };\n\n function serializeRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record,\n getter,\n originalName,\n idx,\n setters = {},\n length;\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n for (getter in getters) {\n originalName = fieldNames[getter];\n\n if (originalName && originalName !== getter) {\n if (!setters[originalName]) {\n setters[originalName] = kendo.setter(originalName);\n }\n setters[originalName](record, getters[getter](record));\n delete record[getter];\n }\n }\n }\n }\n\n function convertRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record,\n getter,\n originalName,\n idx,\n length;\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n for (getter in getters) {\n record[getter] = modelInstance._parse(getter, getters[getter](record));\n\n originalName = fieldNames[getter];\n if (originalName && originalName !== getter) {\n delete record[originalName];\n }\n }\n }\n }\n\n function convertGroup(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record,\n idx,\n fieldName,\n length;\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n\n fieldName = originalFieldNames[record.field];\n if (fieldName && fieldName != record.field) {\n record.field = fieldName;\n }\n\n record.value = modelInstance._parse(record.field, record.value);\n\n if (record.items) {\n if (record.hasSubgroups) {\n convertGroup(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n } else {\n convertRecords(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n }\n }\n }\n }\n\n function wrapDataAccess(originalFunction, model, converter, getters, originalFieldNames, fieldNames) {\n return function(data) {\n data = originalFunction(data);\n\n return wrapDataAccessBase(model, converter, getters, originalFieldNames, fieldNames)(data);\n };\n }\n\n function wrapDataAccessBase(model, converter, getters, originalFieldNames, fieldNames) {\n return function(data) {\n\n if (data && !isEmptyObject(getters)) {\n if (toString.call(data) !== \"[object Array]\" && !(data instanceof ObservableArray)) {\n data = [data];\n }\n\n converter(data, getters, new model(), originalFieldNames, fieldNames);\n }\n\n return data || [];\n };\n }\n\n var DataReader = Class.extend({\n init: function(schema) {\n var that = this, member, get, model, base;\n\n schema = schema || {};\n\n for (member in schema) {\n get = schema[member];\n\n that[member] = typeof get === STRING ? getter(get) : get;\n }\n\n base = schema.modelBase || Model;\n\n if (isPlainObject(that.model)) {\n that.model = model = base.define(that.model);\n }\n\n var dataFunction = that.data.bind(that);\n\n that._dataAccessFunction = dataFunction;\n\n if (that.model) {\n var groupsFunction = that.groups.bind(that),\n serializeFunction = that.serialize.bind(that),\n originalFieldNames = {},\n getters = {},\n serializeGetters = {},\n fieldNames = {},\n shouldSerialize = false,\n fieldName,\n name;\n\n model = that.model;\n\n if (model.fields) {\n each(model.fields, function(field, value) {\n var fromName;\n\n fieldName = field;\n\n if (isPlainObject(value) && value.field) {\n fieldName = value.field;\n } else if (typeof value === STRING) {\n fieldName = value;\n }\n\n if (isPlainObject(value) && value.from) {\n fromName = value.from;\n }\n\n shouldSerialize = shouldSerialize || (fromName && fromName !== field) || fieldName !== field;\n name = fromName || fieldName;\n getters[field] = name.indexOf(\".\") !== -1 ? getter(name, true) : getter(name);\n serializeGetters[field] = getter(field);\n originalFieldNames[fromName || fieldName] = field;\n fieldNames[field] = fromName || fieldName;\n });\n\n if (!schema.serialize && shouldSerialize) {\n that.serialize = wrapDataAccess(serializeFunction, model, serializeRecords, serializeGetters, originalFieldNames, fieldNames);\n }\n }\n\n that._dataAccessFunction = dataFunction;\n that._wrapDataAccessBase = wrapDataAccessBase(model, convertRecords, getters, originalFieldNames, fieldNames);\n that.data = wrapDataAccess(dataFunction, model, convertRecords, getters, originalFieldNames, fieldNames);\n that.groups = wrapDataAccess(groupsFunction, model, convertGroup, getters, originalFieldNames, fieldNames);\n }\n },\n errors: function(data) {\n return data ? data.errors : null;\n },\n parse: identity,\n data: identity,\n total: function(data) {\n return data.length;\n },\n groups: identity,\n aggregates: function() {\n return {};\n },\n serialize: function(data) {\n return data;\n }\n });\n\n function fillLastGroup(originalGroup, newGroup) {\n var currOriginal;\n var currentNew;\n\n if (newGroup.items && newGroup.items.length) {\n for (var i = 0; i < newGroup.items.length; i++) {\n currOriginal = originalGroup.items[originalGroup.items.length - 1];\n currentNew = newGroup.items[i];\n if (currOriginal && currentNew) {\n if (currOriginal.hasSubgroups && currOriginal.value == currentNew.value) {\n fillLastGroup(currOriginal, currentNew);\n } else if (currOriginal.field && currOriginal.value == currentNew.value) {\n currOriginal.items.omitChangeEvent = true;\n currOriginal.items.push.apply(currOriginal.items, currentNew.items);\n currOriginal.items.omitChangeEvent = false;\n } else {\n originalGroup.items.omitChangeEvent = true;\n originalGroup.items.push.apply(originalGroup.items, [currentNew]);\n originalGroup.items.omitChangeEvent = false;\n }\n } else if (currentNew) {\n originalGroup.items.omitChangeEvent = true;\n originalGroup.items.push.apply(originalGroup.items, [currentNew]);\n originalGroup.items.omitChangeEvent = false;\n }\n }\n }\n }\n function mergeGroups(target, dest, skip, take) {\n var group,\n idx = 0,\n items;\n\n while (dest.length && take) {\n group = dest[idx];\n items = group.items;\n\n var length = items.length;\n\n if (target && target.field === group.field && target.value === group.value) {\n if (target.hasSubgroups && target.items.length) {\n mergeGroups(target.items[target.items.length - 1], group.items, skip, take);\n } else {\n items = items.slice(skip, skip + take);\n target.items = target.items.concat(items);\n }\n dest.splice(idx--, 1);\n } else if (group.hasSubgroups && items.length) {\n mergeGroups(group, items, skip, take);\n if (!group.items.length) {\n dest.splice(idx--, 1);\n }\n } else {\n items = items.slice(skip, skip + take);\n group.items = items;\n\n if (!group.items.length) {\n dest.splice(idx--, 1);\n }\n }\n\n if (items.length === 0) {\n skip -= length;\n } else {\n skip = 0;\n take -= items.length;\n }\n\n if (++idx >= dest.length) {\n break;\n }\n }\n\n if (idx < dest.length) {\n dest.splice(idx, dest.length - idx);\n }\n }\n\n function flatGroups(groups, indexFunction) {\n var result = [];\n var groupsLength = (groups || []).length;\n var group;\n var items;\n var indexFn = isFunction(indexFunction) ? indexFunction : function(array, index) {\n return array[index];\n };\n\n for (var groupIndex = 0; groupIndex < groupsLength; groupIndex++) {\n group = indexFn(groups, groupIndex);\n\n if (group.hasSubgroups) {\n result = result.concat(flatGroups(group.items));\n } else {\n items = group.items;\n\n for (var itemIndex = 0; itemIndex < items.length; itemIndex++) {\n result.push(indexFn(items, itemIndex));\n }\n }\n }\n return result;\n }\n\n function flattenGroups(data) {\n var idx,\n result = [],\n length,\n items,\n itemIndex;\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n var group = data.at(idx);\n if (group.items) {\n if (group.hasSubgroups) {\n result = result.concat(flattenGroups(group.items));\n } else {\n items = group.items;\n for (itemIndex = 0; itemIndex < items.length; itemIndex++) {\n result.push(items.at(itemIndex));\n }\n }\n }\n }\n return result;\n }\n\n function wrapGroupItems(data, model) {\n var idx, length, group;\n if (model) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n group = data.at(idx);\n if (group.items) {\n if (group.hasSubgroups) {\n wrapGroupItems(group.items, model);\n } else {\n group.items = new LazyObservableArray(group.items, model, group.items._events);\n }\n }\n }\n }\n }\n\n function eachGroupItems(data, func) {\n for (var idx = 0; idx < data.length; idx++) {\n if (data[idx].hasSubgroups) {\n if (eachGroupItems(data[idx].items, func)) {\n return true;\n }\n } else if (func(data[idx].items, data[idx])) {\n return true;\n }\n }\n }\n\n function replaceInRanges(ranges, data, item, observable) {\n for (var idx = 0; idx < ranges.length; idx++) {\n if (ranges[idx].data === data) {\n break;\n }\n if (replaceInRange(ranges[idx].data, item, observable)) {\n break;\n }\n }\n }\n\n function replaceInRange(items, item, observable) {\n for (var idx = 0, length = items.length; idx < length; idx++) {\n if (items[idx] && items[idx].hasSubgroups) {\n return replaceInRange(items[idx].items, item, observable);\n } else if (items[idx] === item || items[idx] === observable) {\n items[idx] = observable;\n return true;\n }\n }\n }\n\n function replaceWithObservable(view, data, ranges, type, serverGrouping) {\n for (var viewIndex = 0, length = view.length; viewIndex < length; viewIndex++) {\n var item = view[viewIndex];\n\n if (!item || item instanceof type) {\n continue;\n }\n\n if (item.hasSubgroups !== undefined$1 && !serverGrouping) {\n replaceWithObservable(item.items, data, ranges, type, serverGrouping);\n } else {\n for (var idx = 0; idx < data.length; idx++) {\n if (data[idx] === item) {\n view[viewIndex] = data.at(idx);\n replaceInRanges(ranges, data, item, view[viewIndex]);\n break;\n }\n }\n }\n }\n }\n\n function removeModel(data, model) {\n if (!data) {\n return;\n }\n var length = data.length;\n var dataItem;\n var idx;\n\n for (idx = 0; idx < length; idx++) {\n dataItem = data[idx];\n\n if (dataItem.uid && dataItem.uid == model.uid) {\n data.splice(idx, 1);\n return dataItem;\n }\n }\n }\n\n function indexOfPristineModel(data, model) {\n if (model) {\n return indexOf(data, function(item) {\n return (item.uid && item.uid == model.uid) || (item[model.idField] === model.id && model.id !== model._defaultId);\n });\n }\n return -1;\n }\n\n function indexOfModel(data, model) {\n if (model) {\n return indexOf(data, function(item) {\n return item.uid == model.uid;\n });\n }\n return -1;\n }\n\n function indexOf(data, comparer) {\n var idx, length;\n if (!data) {\n return;\n }\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (comparer(data[idx])) {\n return idx;\n }\n }\n\n return -1;\n }\n\n function fieldNameFromModel(fields, name) {\n if (fields && !isEmptyObject(fields)) {\n var descriptor = fields[name];\n var fieldName;\n if (isPlainObject(descriptor)) {\n fieldName = descriptor.from || descriptor.field || name;\n } else {\n fieldName = fields[name] || name;\n }\n\n if (isFunction(fieldName)) {\n return name;\n }\n\n return fieldName;\n }\n return name;\n }\n\n function convertFilterDescriptorsField(descriptor, model) {\n var idx,\n length,\n target = {};\n\n for (var field in descriptor) {\n if (field !== \"filters\") {\n target[field] = descriptor[field];\n }\n }\n\n if (descriptor.filters) {\n target.filters = [];\n for (idx = 0, length = descriptor.filters.length; idx < length; idx++) {\n target.filters[idx] = convertFilterDescriptorsField(descriptor.filters[idx], model);\n }\n } else {\n target.field = fieldNameFromModel(model.fields, target.field);\n }\n return target;\n }\n\n function convertDescriptorsField(descriptors, model) {\n var idx,\n length,\n result = [],\n target,\n descriptor;\n\n for (idx = 0, length = descriptors.length; idx < length; idx ++) {\n target = {};\n\n descriptor = descriptors[idx];\n\n for (var field in descriptor) {\n target[field] = descriptor[field];\n }\n\n target.field = fieldNameFromModel(model.fields, target.field);\n\n if (target.aggregates && isArray(target.aggregates)) {\n target.aggregates = convertDescriptorsField(target.aggregates, model);\n }\n result.push(target);\n }\n return result;\n }\n\n var DataSource = Observable.extend({\n init: function(options) {\n var that = this, model, data;\n\n if (options) {\n data = options.data;\n }\n\n options = that.options = extend({}, that.options, options);\n\n that._map = {};\n that._prefetch = {};\n that._data = [];\n that._pristineData = [];\n that._ranges = [];\n that._view = [];\n that._pristineTotal = 0;\n that._destroyed = [];\n that._pageSize = options.pageSize;\n that._page = options.page || (options.pageSize ? 1 : undefined$1);\n that._sort = normalizeSort(options.sort);\n that._sortFields = sortFields(options.sort);\n that._filter = normalizeFilter(options.filter);\n that._group = normalizeGroup(options.group);\n that._aggregate = options.aggregate;\n that._total = options.total;\n that._groupPaging = options.groupPaging;\n\n if (that._groupPaging) {\n that._groupsState = {};\n }\n that._shouldDetachObservableParents = true;\n\n Observable.fn.init.call(that);\n\n that.transport = Transport.create(options, data, that);\n\n if (isFunction(that.transport.push)) {\n that.transport.push({\n pushCreate: that._pushCreate.bind(that),\n pushUpdate: that._pushUpdate.bind(that),\n pushDestroy: that._pushDestroy.bind(that)\n });\n }\n\n if (options.offlineStorage != null) {\n if (typeof options.offlineStorage == \"string\") {\n var key = options.offlineStorage;\n\n that._storage = {\n getItem: function() {\n return JSON.parse(localStorage.getItem(key));\n },\n setItem: function(item) {\n localStorage.setItem(key, stringify(that.reader.serialize(item)));\n }\n };\n } else {\n that._storage = options.offlineStorage;\n }\n }\n\n that.reader = new kendo.data.readers[options.schema.type || \"json\" ](options.schema);\n\n model = that.reader.model || {};\n\n that._detachObservableParents();\n\n that._data = that._observe(that._data);\n that._online = true;\n\n that.bind([\"push\", ERROR, CHANGE, REQUESTSTART, SYNC, REQUESTEND, PROGRESS], options);\n },\n\n options: {\n data: null,\n schema: {\n modelBase: Model\n },\n offlineStorage: null,\n serverSorting: false,\n serverPaging: false,\n serverFiltering: false,\n serverGrouping: false,\n serverAggregates: false,\n batch: false,\n inPlaceSort: false\n },\n\n clone: function() {\n return this;\n },\n\n online: function(value) {\n if (value !== undefined$1) {\n if (this._online != value) {\n this._online = value;\n\n if (value) {\n return this.sync();\n }\n }\n\n return $.Deferred().resolve().promise();\n } else {\n return this._online;\n }\n },\n\n offlineData: function(state) {\n if (this.options.offlineStorage == null) {\n return null;\n }\n\n if (state !== undefined$1) {\n return this._storage.setItem(state);\n }\n\n return this._storage.getItem() || [];\n },\n\n _isGrouped: function() {\n var group = this.group() || [];\n\n return group.length;\n },\n\n _isServerGrouped: function() {\n var group = this.group() || [];\n\n return this.options.serverGrouping && group.length;\n },\n\n _isServerGroupPaged: function() {\n return this._isServerGrouped() && this._groupPaging;\n },\n\n _isGroupPaged: function() {\n var group = this._group || [];\n\n return this._groupPaging && group.length;\n },\n\n _pushCreate: function(result) {\n this._push(result, \"pushCreate\");\n },\n\n _pushUpdate: function(result) {\n this._push(result, \"pushUpdate\");\n },\n\n _pushDestroy: function(result) {\n this._push(result, \"pushDestroy\");\n },\n\n _push: function(result, operation) {\n var data = this._readData(result);\n\n if (!data) {\n data = result;\n }\n\n this[operation](data);\n },\n\n _flatData: function(data, skip) {\n if (data) {\n if (this._isServerGrouped()) {\n return flattenGroups(data);\n }\n\n if (!skip) {\n for (var idx = 0; idx < data.length; idx++) {\n data.at(idx);\n }\n }\n }\n\n return data;\n },\n\n parent: noop,\n\n get: function(id) {\n var idx, length, data = this._flatData(this._data, this.options.useRanges);\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].id == id) {\n return data[idx];\n }\n }\n },\n\n getByUid: function(id) {\n return this._getByUid(id, this._data);\n },\n\n _getByUid: function(id, dataItems) {\n var idx, length, data = this._flatData(dataItems, this.options.useRanges);\n\n if (!data) {\n return;\n }\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].uid == id) {\n return data[idx];\n }\n }\n },\n\n indexOf: function(model) {\n return indexOfModel(this._data, model);\n },\n\n at: function(index) {\n return this._data.at(index);\n },\n\n data: function(value) {\n var that = this;\n if (value !== undefined$1) {\n that._detachObservableParents();\n that._data = this._observe(value);\n\n that._pristineData = value.slice(0);\n\n that._storeData();\n\n that._ranges = [];\n that.trigger(\"reset\");\n that._addRange(that._data);\n\n that._total = that._data.length;\n that._pristineTotal = that._total;\n\n that._process(that._data);\n } else {\n if (that._data) {\n for (var idx = 0; idx < that._data.length; idx++) {\n that._data.at(idx);\n }\n }\n\n return that._data;\n }\n },\n\n view: function(value) {\n if (value === undefined$1) {\n return this._view;\n } else {\n this._view = this._observeView(value);\n }\n },\n\n _observeView: function(data) {\n var that = this;\n replaceWithObservable(data, that._data, that._ranges, that.reader.model || ObservableObject, that._isServerGrouped());\n\n var view = new LazyObservableArray(data, that.reader.model);\n view.parent = function() { return that.parent(); };\n return view;\n },\n\n flatView: function() {\n var groups = this.group() || [];\n\n if (groups.length) {\n return flattenGroups(this._view);\n } else {\n return this._view;\n }\n },\n\n add: function(model) {\n return this.insert(this._data.length, model);\n },\n\n _createNewModel: function(model) {\n if (this.reader.model) {\n return new this.reader.model(model);\n }\n\n if (model instanceof ObservableObject) {\n return model;\n }\n\n return new ObservableObject(model);\n },\n\n insert: function(index, model) {\n if (!model) {\n model = index;\n index = 0;\n }\n\n if (!(model instanceof Model)) {\n model = this._createNewModel(model);\n }\n\n if (this._isServerGrouped()) {\n this._data.splice(index, 0, this._wrapInEmptyGroup(model));\n } else {\n this._data.splice(index, 0, model);\n }\n\n this._insertModelInRange(index, model);\n\n return model;\n },\n\n pushInsert: function(index, items) {\n var that = this;\n var rangeSpan = that._getCurrentRangeSpan();\n\n if (!items) {\n items = index;\n index = 0;\n }\n\n if (!isArray(items)) {\n items = [items];\n }\n\n var pushed = [];\n var autoSync = this.options.autoSync;\n this.options.autoSync = false;\n\n try {\n for (var idx = 0; idx < items.length; idx ++) {\n var item = items[idx];\n\n var result = this.insert(index, item);\n\n pushed.push(result);\n\n var pristine = result.toJSON();\n\n if (this._isServerGrouped()) {\n pristine = this._wrapInEmptyGroup(pristine);\n }\n\n this._pristineData.push(pristine);\n\n if (rangeSpan && rangeSpan.length) {\n $(rangeSpan).last()[0].pristineData.push(pristine);\n }\n\n index++;\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n\n if (pushed.length) {\n this.trigger(\"push\", {\n type: \"create\",\n items: pushed\n });\n }\n },\n\n pushCreate: function(items) {\n this.pushInsert(this._data.length, items);\n },\n\n pushUpdate: function(items) {\n if (!isArray(items)) {\n items = [items];\n }\n\n var pushed = [];\n\n for (var idx = 0; idx < items.length; idx ++) {\n var item = items[idx];\n var model = this._createNewModel(item);\n\n var target = this.get(model.id);\n\n if (target) {\n pushed.push(target);\n\n target.accept(item);\n\n target.trigger(CHANGE);\n\n this._updatePristineForModel(target, item);\n } else {\n this.pushCreate(item);\n }\n }\n\n if (pushed.length) {\n this.trigger(\"push\", {\n type: \"update\",\n items: pushed\n });\n }\n },\n\n pushDestroy: function(items) {\n var pushed = this._removeItems(items);\n\n if (pushed.length) {\n this.trigger(\"push\", {\n type: \"destroy\",\n items: pushed\n });\n }\n },\n\n _removeItems: function(items, removePristine) {\n if (!isArray(items)) {\n items = [items];\n }\n\n var shouldRemovePristine = typeof removePristine !== \"undefined\" ? removePristine : true;\n\n var destroyed = [];\n var autoSync = this.options.autoSync;\n this.options.autoSync = false;\n try {\n for (var idx = 0; idx < items.length; idx ++) {\n var item = items[idx];\n var model = this._createNewModel(item);\n var found = false;\n\n this._eachItem(this._data, function(items) {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items.at(idx);\n if (item.id === model.id) {\n destroyed.push(item);\n items.splice(idx, 1);\n found = true;\n break;\n }\n }\n });\n\n if (found && shouldRemovePristine) {\n this._removePristineForModel(model);\n this._destroyed.pop();\n }\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n\n return destroyed;\n },\n\n pushMove: function(index, items) {\n var pushed = this._moveItems(index, items);\n\n if (pushed.length) {\n this.trigger(\"push\", {\n type: \"update\",\n items: pushed\n });\n }\n },\n\n _moveItems: function(index, items) {\n if (!isArray(items)) {\n items = [items];\n }\n\n var moved = [];\n var autoSync = this.options.autoSync;\n this.options.autoSync = false;\n\n try {\n for (var i = 0; i < items.length; i ++) {\n var item = items[i];\n var model = this._createNewModel(item);\n\n this._eachItem(this._data, function(dataItems) {\n for (var idx = 0; idx < dataItems.length; idx++) {\n var dataItem = dataItems.at(idx);\n if (dataItem.id === model.id) {\n moved.push(dataItem);\n dataItems.splice(index >= idx ? --index : index, 0, dataItems.splice(idx, 1)[0]);\n index++;\n break;\n }\n }\n });\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n\n return moved;\n },\n\n remove: function(model) {\n var result,\n that = this,\n hasGroups = that._isServerGrouped();\n\n if (hasGroups && model.uid && (!model.isNew || !model.isNew())) {\n that._pushInDestroyed(model);\n }\n\n this._eachItem(that._data, function(items) {\n result = removeModel(items, model);\n\n if (result && hasGroups) {\n return true;\n }\n });\n\n this._removeModelFromRanges(model);\n\n return model;\n },\n\n destroyed: function() {\n return this._destroyed;\n },\n\n created: function() {\n var idx,\n length,\n result = [],\n data = this._flatData(this._data, this.options.useRanges);\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && data[idx].isNew()) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n\n updated: function() {\n var idx,\n length,\n result = [],\n data = this._flatData(this._data, this.options.useRanges);\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n if ((data[idx].isNew && !data[idx].isNew()) && data[idx].dirty) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n\n sync: function() {\n var that = this,\n created = [],\n updated = [],\n destroyed = that._destroyed;\n\n var promise = $.Deferred().resolve().promise();\n\n if (that.online()) {\n\n if (!that.reader.model) {\n return promise;\n }\n\n created = that.created();\n updated = that.updated();\n\n var promises = [];\n\n if (that.options.batch && that.transport.submit) {\n promises = that._sendSubmit(created, updated, destroyed);\n } else {\n promises.push.apply(promises, that._send(\"create\", created));\n promises.push.apply(promises, that._send(\"update\", updated));\n promises.push.apply(promises, that._send(\"destroy\", destroyed));\n }\n\n promise = $.when\n .apply(null, promises)\n .then(function() {\n var arguments$1 = arguments;\n\n var idx, length;\n\n for (idx = 0, length = arguments.length; idx < length; idx++) {\n if (arguments$1[idx]) {\n that._accept(arguments$1[idx]);\n }\n }\n\n that._storeData(true);\n\n that._syncEnd();\n\n that._change({ action: \"sync\" });\n\n that.trigger(SYNC);\n\n if (that._isServerGroupPaged()) {\n that.read();\n }\n });\n } else {\n that._storeData(true);\n\n that._syncEnd();\n\n that._change({ action: \"sync\" });\n }\n\n return promise;\n },\n\n _syncEnd: noop,\n\n cancelChanges: function(model) {\n var that = this;\n\n if (model instanceof kendo.data.Model) {\n that._cancelModel(model);\n } else {\n that._destroyed = [];\n that._detachObservableParents();\n that._data = that._observe(that._pristineData);\n if (that.options.serverPaging) {\n that._total = that._pristineTotal;\n }\n\n that._ranges = [];\n that._addRange(that._data, 0);\n\n that._changesCanceled();\n\n that._change();\n\n that._markOfflineUpdatesAsDirty();\n\n if (that._isServerGrouped()) {\n that.read();\n }\n }\n },\n\n _changesCanceled: noop,\n\n _markOfflineUpdatesAsDirty: function() {\n var that = this;\n\n if (that.options.offlineStorage != null) {\n that._eachItem(that._data, function(items) {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items.at(idx);\n if (item.__state__ == \"update\" || item.__state__ == \"create\") {\n item.dirty = true;\n }\n }\n });\n }\n },\n\n hasChanges: function() {\n var idx,\n length,\n data = this._flatData(this._data, this.options.useRanges);\n\n if (this._destroyed.length) {\n return true;\n }\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n if ((data[idx].isNew && data[idx].isNew()) || data[idx].dirty) {\n return true;\n }\n }\n\n return false;\n },\n\n _accept: function(result) {\n var that = this,\n models = result.models,\n response = result.response,\n idx = 0,\n serverGroup = that._isServerGrouped(),\n pristine = that._pristineData,\n type = result.type,\n length;\n\n that.trigger(REQUESTEND, { response: response, type: type });\n\n if (response && !isEmptyObject(response)) {\n response = that.reader.parse(response);\n\n if (that._handleCustomErrors(response)) {\n return;\n }\n\n response = that.reader.data(response);\n\n if (!isArray(response)) {\n response = [response];\n }\n } else {\n response = $.map(models, function(model) { return model.toJSON(); } );\n }\n\n if (type === \"destroy\") {\n that._destroyed = [];\n }\n\n for (idx = 0, length = models.length; idx < length; idx++) {\n if (type !== \"destroy\") {\n models[idx].accept(response[idx]);\n\n if (type === \"create\") {\n pristine.push(serverGroup ? that._wrapInEmptyGroup(models[idx].toJSON()) : response[idx]);\n } else if (type === \"update\") {\n that._updatePristineForModel(models[idx], response[idx]);\n }\n } else {\n that._removePristineForModel(models[idx]);\n }\n }\n },\n\n _updatePristineForModel: function(model, values) {\n this._executeOnPristineForModel(model, function(index, items) {\n kendo.deepExtend(items[index], values);\n });\n },\n\n _executeOnPristineForModel: function(model, callback) {\n this._eachPristineItem(\n function(items) {\n var index = indexOfPristineModel(items, model);\n if (index > -1) {\n callback(index, items);\n return true;\n }\n });\n },\n\n _removePristineForModel: function(model) {\n this._executeOnPristineForModel(model, function(index, items) {\n items.splice(index, 1);\n });\n },\n\n _readData: function(data) {\n var read = !this._isServerGrouped() ? this.reader.data : this.reader.groups;\n return read.call(this.reader, data);\n },\n\n _eachPristineItem: function(callback) {\n var that = this;\n var options = that.options;\n var rangeSpan = that._getCurrentRangeSpan();\n\n that._eachItem(that._pristineData, callback);\n\n if (options.serverPaging && options.useRanges) {\n each(rangeSpan, function(i, range) {\n that._eachItem(range.pristineData, callback);\n });\n }\n },\n\n _eachItem: function(data, callback) {\n if (data && data.length) {\n if (this._isServerGrouped()) {\n eachGroupItems(data, callback);\n } else {\n callback(data);\n }\n }\n },\n\n _pristineForModel: function(model) {\n var pristine,\n idx,\n callback = function(items) {\n idx = indexOfPristineModel(items, model);\n if (idx > -1) {\n pristine = items[idx];\n return true;\n }\n };\n\n this._eachPristineItem(callback);\n\n return pristine;\n },\n\n _cancelModel: function(model) {\n var that = this;\n var pristine = this._pristineForModel(model);\n\n this._eachItem(this._data, function(items) {\n var idx = indexOfModel(items, model);\n if (idx >= 0) {\n if (pristine && (!model.isNew() || pristine.__state__)) {\n items[idx].accept(pristine);\n\n if (pristine.__state__ == \"update\") {\n items[idx].dirty = true;\n }\n\n } else {\n that._modelCanceled(model);\n\n items.splice(idx, 1);\n\n that._removeModelFromRanges(model);\n }\n }\n });\n },\n\n _modelCanceled: noop,\n\n _submit: function(promises, data) {\n var that = this;\n\n that.trigger(REQUESTSTART, { type: \"submit\" });\n\n that.trigger(PROGRESS);\n\n that.transport.submit(extend({\n success: function(response, type) {\n var promise = $.grep(promises, function(x) {\n return x.type == type;\n })[0];\n\n if (promise) {\n promise.resolve({\n response: response,\n models: promise.models,\n type: type\n });\n }\n },\n error: function(response, status, error) {\n for (var idx = 0; idx < promises.length; idx++) {\n promises[idx].reject(response);\n }\n\n that.error(response, status, error);\n }\n }, data));\n },\n\n _sendSubmit: function(created, updated, destroyed) {\n var that = this,\n promises = [];\n\n if (that.options.batch) {\n if (created.length) {\n promises.push($.Deferred(function(deferred) {\n deferred.type = \"create\";\n deferred.models = created;\n }));\n }\n\n if (updated.length) {\n promises.push($.Deferred(function(deferred) {\n deferred.type = \"update\";\n deferred.models = updated;\n }));\n }\n\n if (destroyed.length) {\n promises.push($.Deferred(function(deferred) {\n deferred.type = \"destroy\";\n deferred.models = destroyed;\n }));\n }\n\n that._submit(promises, {\n data: {\n created: that.reader.serialize(toJSON(created)),\n updated: that.reader.serialize(toJSON(updated)),\n destroyed: that.reader.serialize(toJSON(destroyed))\n }\n });\n }\n\n return promises;\n },\n\n _promise: function(data, models, type) {\n var that = this;\n\n return $.Deferred(function(deferred) {\n that.trigger(REQUESTSTART, { type: type });\n\n that.trigger(PROGRESS);\n\n that.transport[type].call(that.transport, extend({\n success: function(response) {\n deferred.resolve({\n response: response,\n models: models,\n type: type\n });\n },\n error: function(response, status, error) {\n deferred.reject(response);\n that.error(response, status, error);\n }\n }, data));\n }).promise();\n },\n\n _send: function(method, data) {\n var that = this,\n idx,\n length,\n promises = [],\n converted = that.reader.serialize(toJSON(data));\n\n if (that.options.batch) {\n if (data.length) {\n promises.push(that._promise( { data: { models: converted } }, data , method));\n }\n } else {\n for (idx = 0, length = data.length; idx < length; idx++) {\n promises.push(that._promise( { data: converted[idx] }, [ data[idx] ], method));\n }\n }\n\n return promises;\n },\n\n read: function(data) {\n var that = this, params = that._params(data);\n var deferred = $.Deferred();\n\n that._queueRequest(params, function() {\n var isPrevented = that.trigger(REQUESTSTART, { type: \"read\" });\n if (!isPrevented) {\n that.trigger(PROGRESS);\n\n that._ranges = [];\n that.trigger(\"reset\");\n if (that.online()) {\n that.transport.read({\n data: params,\n success: function(data) {\n that._ranges = [];\n that.success(data, params);\n\n deferred.resolve();\n },\n error: function() {\n var args = slice.call(arguments);\n\n that.error.apply(that, args);\n\n deferred.reject.apply(deferred, args);\n }\n });\n } else if (that.options.offlineStorage != null) {\n that.success(that.offlineData(), params);\n\n deferred.resolve();\n }\n } else {\n that._dequeueRequest();\n\n deferred.resolve(isPrevented);\n }\n });\n\n return deferred.promise();\n },\n\n _readAggregates: function(data) {\n return this.reader.aggregates(data);\n },\n\n success: function(data) {\n var that = this,\n options = that.options,\n items,\n replaceSubset;\n\n that.trigger(REQUESTEND, { response: data, type: \"read\" });\n\n if (that.online()) {\n data = that.reader.parse(data);\n\n if (that._handleCustomErrors(data)) {\n that._dequeueRequest();\n return;\n }\n\n that._total = that.reader.total(data);\n\n if (that._isServerGroupPaged()) {\n that._serverGroupsTotal = that._total;\n }\n\n if (that._pageSize > that._total) {\n that._pageSize = that._total;\n if (that.options.pageSize && that.options.pageSize > that._pageSize) {\n that._pageSize = that.options.pageSize;\n }\n }\n\n if (that._aggregate && options.serverAggregates) {\n that._aggregateResult = that._readAggregates(data);\n }\n\n data = that._readData(data);\n\n that._destroyed = [];\n } else {\n data = that._readData(data);\n\n items = [];\n var itemIds = {};\n var model = that.reader.model;\n var idField = model ? model.idField : \"id\";\n var idx;\n\n for (idx = 0; idx < this._destroyed.length; idx++) {\n var id = this._destroyed[idx][idField];\n itemIds[id] = id;\n }\n\n for (idx = 0; idx < data.length; idx++) {\n var item = data[idx];\n var state = item.__state__;\n if (state == \"destroy\") {\n if (!itemIds[item[idField]]) {\n this._pushInDestroyed(this._createNewModel(item));\n }\n } else {\n items.push(item);\n }\n }\n\n data = items;\n\n that._total = data.length;\n }\n\n that._pristineTotal = that._total;\n replaceSubset = that._skip && that._data.length && that._skip < that._data.length;\n\n if (that.options.endless) {\n if (replaceSubset) {\n that._pristineData.splice(that._skip, that._pristineData.length);\n }\n items = data.slice(0);\n for (var j = 0; j < items.length; j++) {\n that._pristineData.push(items[j]);\n }\n } else {\n that._pristineData = data.slice(0);\n }\n\n that._detachObservableParents();\n\n if (that.options.endless) {\n that._data.unbind(CHANGE, that._changeHandler);\n\n if (that._isServerGrouped() && that._data[that._data.length - 1].value === data[0].value) {\n fillLastGroup(that._data[that._data.length - 1], data[0]);\n data.shift();\n }\n\n data = that._observe(data);\n if (replaceSubset) {\n that._data.splice(that._skip, that._data.length);\n }\n for (var i = 0; i < data.length; i++) {\n that._data.push(data[i]);\n }\n that._data.bind(CHANGE, that._changeHandler);\n } else {\n that._data = that._observe(data);\n }\n\n that._markOfflineUpdatesAsDirty();\n\n that._storeData();\n\n that._addRange(that._data);\n\n that._process(that._data);\n\n that._dequeueRequest();\n },\n\n _detachObservableParents: function() {\n if (this._data && this._shouldDetachObservableParents) {\n for (var idx = 0; idx < this._data.length; idx++) {\n if (this._data[idx].parent) {\n this._data[idx].parent = noop;\n }\n }\n }\n },\n\n _storeData: function(updatePristine) {\n var serverGrouping = this._isServerGrouped();\n var model = this.reader.model;\n\n function items(data) {\n var state = [];\n\n for (var idx = 0; idx < data.length; idx++) {\n var dataItem = data.at(idx);\n var item = dataItem.toJSON();\n\n if (serverGrouping && dataItem.items) {\n item.items = items(dataItem.items);\n } else {\n item.uid = dataItem.uid;\n\n if (model) {\n if (dataItem.isNew()) {\n item.__state__ = \"create\";\n } else if (dataItem.dirty) {\n item.__state__ = \"update\";\n }\n }\n }\n state.push(item);\n }\n\n return state;\n }\n\n if (this.options.offlineStorage != null) {\n var state = items(this._data);\n\n var destroyed = [];\n\n for (var idx = 0; idx < this._destroyed.length; idx++) {\n var item = this._destroyed[idx].toJSON();\n item.__state__ = \"destroy\";\n destroyed.push(item);\n }\n\n this.offlineData(state.concat(destroyed));\n\n if (updatePristine) {\n this._pristineData = this.reader.reader ? this.reader.reader._wrapDataAccessBase(state) : this.reader._wrapDataAccessBase(state);\n }\n }\n },\n\n _addRange: function(data, skip) {\n var that = this,\n start = typeof (skip) !== \"undefined\" ? skip : (that._skip || 0),\n end,\n range = {\n data: data,\n pristineData: data.toJSON(),\n timestamp: that._timeStamp()\n };\n\n if (this._isGroupPaged()) {\n end = start + data.length;\n range.outerStart = start;\n range.outerEnd = end;\n } else {\n end = start + that._flatData(data, true).length;\n }\n\n range.start = start;\n range.end = end;\n that._ranges.push(range);\n that._sortRanges();\n\n if (that._isGroupPaged()) {\n if (!that._groupsFlat) {\n that._groupsFlat = [];\n }\n that._appendToGroupsFlat(range.data);\n that._updateOuterRangesLength();\n }\n },\n\n _appendToGroupsFlat: function(data) {\n var length = data.length;\n\n for (var i = 0; i < length; i++) {\n this._groupsFlat.push(data[i]);\n }\n },\n\n _getGroupByUid: function(uid) {\n var length = this._groupsFlat.length;\n var group;\n\n for (var i = 0; i < length; i++) {\n group = this._groupsFlat[i];\n if (group.uid === uid) {\n return group;\n }\n }\n },\n\n _sortRanges: function() {\n this._ranges.sort(function(x, y) {\n return x.start - y.start;\n });\n },\n\n error: function(xhr, status, errorThrown) {\n this._dequeueRequest();\n this.trigger(REQUESTEND, { });\n this.trigger(ERROR, { xhr: xhr, status: status, errorThrown: errorThrown });\n },\n\n _params: function(data) {\n var that = this,\n options = extend({\n take: that.take(),\n skip: that.skip(),\n page: that.page(),\n pageSize: that.pageSize(),\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate,\n groupPaging: !!that._groupPaging\n }, data);\n\n if (!that.options.serverPaging) {\n delete options.take;\n delete options.skip;\n delete options.page;\n delete options.pageSize;\n }\n\n if (!that.options.serverGrouping) {\n delete options.group;\n } else if (that.reader.model && options.group) {\n options.group = convertDescriptorsField(options.group, that.reader.model);\n }\n\n if (!that.options.serverFiltering) {\n delete options.filter;\n } else if (that.reader.model && options.filter) {\n options.filter = convertFilterDescriptorsField(options.filter, that.reader.model);\n }\n\n if (!that.options.serverSorting) {\n delete options.sort;\n } else if (that.reader.model && options.sort) {\n options.sort = convertDescriptorsField(options.sort, that.reader.model);\n }\n\n if (!that.options.serverAggregates) {\n delete options.aggregate;\n } else if (that.reader.model && options.aggregate) {\n options.aggregate = convertDescriptorsField(options.aggregate, that.reader.model);\n }\n\n if (!that.options.groupPaging) {\n delete options.groupPaging;\n }\n\n return options;\n },\n\n _queueRequest: function(options, callback) {\n var that = this;\n if (!that._requestInProgress) {\n that._requestInProgress = true;\n that._pending = undefined$1;\n callback();\n } else {\n that._pending = { callback: callback.bind(that), options: options };\n }\n },\n\n _dequeueRequest: function() {\n var that = this;\n that._requestInProgress = false;\n if (that._pending) {\n that._queueRequest(that._pending.options, that._pending.callback);\n }\n },\n\n _handleCustomErrors: function(response) {\n if (this.reader.errors) {\n var errors = this.reader.errors(response);\n if (errors) {\n this.trigger(ERROR, { xhr: null, status: \"customerror\", errorThrown: \"custom error\", errors: errors });\n return true;\n }\n }\n return false;\n },\n\n _shouldWrap: function(data) {\n var model = this.reader.model;\n\n if (model && data.length) {\n return !(data[0] instanceof model);\n }\n\n return false;\n },\n\n _observe: function(data) {\n var that = this,\n model = that.reader.model;\n\n that._shouldDetachObservableParents = true;\n\n if (data instanceof ObservableArray) {\n that._shouldDetachObservableParents = false;\n if (that._shouldWrap(data)) {\n data.type = that.reader.model;\n data.wrapAll(data, data);\n }\n } else {\n var arrayType = that.pageSize() && !that.options.serverPaging ? LazyObservableArray : ObservableArray;\n data = new arrayType(data, that.reader.model);\n data.parent = function() { return that.parent(); };\n }\n\n if (that._isServerGrouped()) {\n wrapGroupItems(data, model);\n }\n\n if (that._changeHandler && that._data && that._data instanceof ObservableArray &&\n !(that.options.useRanges && that.options.serverPaging)) {\n that._data.unbind(CHANGE, that._changeHandler);\n } else {\n that._changeHandler = that._change.bind(that);\n }\n\n return data.bind(CHANGE, that._changeHandler);\n },\n\n _updateTotalForAction: function(action, items) {\n var that = this;\n\n var total = parseInt(that._total, 10);\n\n if (!isNumber(that._total)) {\n total = parseInt(that._pristineTotal, 10);\n }\n if (action === \"add\") {\n total += items.length;\n } else if (action === \"remove\") {\n total -= items.length;\n } else if (action !== \"itemchange\" && action !== \"sync\" && !that.options.serverPaging) {\n total = that._pristineTotal;\n } else if (action === \"sync\") {\n total = that._pristineTotal = parseInt(that._total, 10);\n }\n\n that._total = total;\n },\n\n _pushInDestroyed: function(model) {\n var isPushed = this._destroyed.find(function(item) {\n return item.uid === model.uid;\n });\n if (!isPushed) {\n this._destroyed.push(model);\n }\n },\n\n _change: function(e) {\n var that = this, idx, length, action = e ? e.action : \"\";\n\n if (action === \"remove\") {\n for (idx = 0, length = e.items.length; idx < length; idx++) {\n if (!e.items[idx].isNew || !e.items[idx].isNew()) {\n that._pushInDestroyed(e.items[idx]);\n }\n }\n }\n\n if (that.options.autoSync && (action === \"add\" || action === \"remove\" || action === \"itemchange\")) {\n\n var handler = function(args) {\n if (args.action === \"sync\") {\n that.unbind(\"change\", handler);\n that._updateTotalForAction(action, e.items);\n }\n };\n\n that.first(\"change\", handler);\n\n that.sync();\n\n } else {\n that._updateTotalForAction(action, e ? e.items : []);\n\n that._process(that._data, e);\n }\n },\n\n _calculateAggregates: function(data, options) {\n options = options || {};\n\n var query = new Query(data),\n aggregates = options.aggregate,\n filter = options.filter;\n\n if (filter) {\n query = query.filter(filter);\n }\n\n return query.aggregate(aggregates);\n },\n\n _process: function(data, e) {\n var that = this,\n options = {},\n result;\n\n if (that.options.serverPaging !== true) {\n options.skip = that._skip;\n options.take = that._take || that._pageSize;\n\n if (options.skip === undefined$1 && that._page !== undefined$1 && that._pageSize !== undefined$1) {\n options.skip = (that._page - 1) * that._pageSize;\n }\n\n if (that.options.useRanges) {\n options.skip = that.currentRangeStart();\n }\n }\n\n if (that.options.serverSorting !== true) {\n options.sort = that._sort;\n }\n\n if (that.options.serverFiltering !== true) {\n options.filter = that._filter;\n }\n\n if (that.options.serverGrouping !== true) {\n options.group = that._group;\n }\n\n if (that.options.serverAggregates !== true) {\n options.aggregate = that._aggregate;\n }\n\n if (that.options.serverGrouping) {\n that._clearEmptyGroups(data);\n }\n\n options.groupPaging = that._groupPaging;\n\n if (that._isGroupPaged() && e && (e.action === \"page\" || e.action === \"expandGroup\" || e.action === \"collapseGroup\")) {\n result = that._queryProcess(data, {\n aggregate: that._aggregate\n });\n } else {\n result = that._queryProcess(data, options);\n }\n\n if (that._filter && e && e.action === \"add\") {\n var model = e.items[0],\n resultData = result.data;\n\n var modelIsInView = resultData.find(function(item) {\n return item.uid === model.uid;\n });\n\n if (!modelIsInView) {\n result.data.splice(model.index, 0, that._isGrouped() ? that._wrapInEmptyGroup(model) : model);\n result.total++;\n }\n }\n\n if (that.options.serverAggregates !== true) {\n // for performance reasons, calculate aggregates for part of the data only after query process\n // this is necessary in the TreeList when paging\n that._aggregateResult = that._calculateAggregates(result.dataToAggregate || data, options);\n }\n\n that._setView(result, options, e);\n\n that._setFilterTotal(result.total, false);\n\n e = e || {};\n\n e.items = e.items || that._view;\n\n that.trigger(CHANGE, e);\n },\n\n _setView: function(result, options, e) {\n var that = this;\n\n if (that._isGroupPaged() && !that._isServerGrouped()) {\n if (e && (e.action === \"page\" || e.action === \"expandGroup\" || e.action === \"collapseGroup\")) {\n that.view(result.data);\n that._updateOuterRangesLength();\n } else {\n that._ranges = [];\n var query = new Query(result.data);\n that._addRange(that._observe(result.data));\n\n if (options.skip + options.take > result.data.length) {\n options.skip = result.data.length - options.take;\n }\n\n that.view(query.range(options.skip, options.take).toArray());\n }\n\n } else {\n that.view(result.data);\n }\n },\n\n _clearEmptyGroups: function(data) {\n for (var idx = data.length - 1; idx >= 0; idx--) {\n var group = data[idx];\n if (group.hasSubgroups) {\n this._clearEmptyGroups(group.items);\n }\n\n if (group.items && !group.items.length && !group.itemCount) {\n splice.apply(group.parent(), [idx, 1]);\n }\n }\n },\n\n _queryProcess: function(data, options) {\n if (this.options.inPlaceSort) {\n return Query.process(data, options, this.options.inPlaceSort);\n }\n else {\n return Query.process(data, options);\n }\n },\n\n _mergeState: function(options) {\n var that = this;\n\n if (options !== undefined$1) {\n that._pageSize = options.pageSize;\n that._page = options.page;\n that._sort = options.sort;\n that._filter = options.filter;\n that._group = options.group;\n that._aggregate = options.aggregate;\n that._skip = that._currentRangeStart = options.skip;\n that._take = options.take;\n\n if (that._skip === undefined$1) {\n that._skip = that._currentRangeStart = that.skip();\n options.skip = that.skip();\n }\n\n if (that._take === undefined$1 && that._pageSize !== undefined$1) {\n that._take = that._pageSize;\n options.take = that._take;\n }\n\n if (that.options.virtual) {\n options.virtual = that.options.virtual;\n }\n\n if (options.sort) {\n that._sort = options.sort = normalizeSort(options.sort);\n that._sortFields = sortFields(options.sort);\n }\n\n if (options.filter) {\n that._filter = options.filter = (that.options.accentFoldingFiltering && !$.isEmptyObject(options.filter)) ? $.extend({}, normalizeFilter(options.filter), { accentFoldingFiltering: that.options.accentFoldingFiltering }) : normalizeFilter(options.filter);\n }\n\n if (options.group) {\n that._group = options.group = normalizeGroup(options.group);\n }\n if (options.aggregate) {\n that._aggregate = options.aggregate = normalizeAggregate(options.aggregate);\n }\n }\n return options;\n },\n\n query: function(options) {\n var result;\n var remote = this.options.serverSorting || this.options.serverPaging || this.options.serverFiltering || this.options.serverGrouping || this.options.serverAggregates;\n\n if (remote || ((this._data === undefined$1 || this._data.length === 0) && !this._destroyed.length)) {\n if (this.options.endless) {\n var moreItemsCount = options.pageSize - this.pageSize();\n if (moreItemsCount > 0) {\n moreItemsCount = this.pageSize();\n options.page = options.pageSize / moreItemsCount;\n options.pageSize = moreItemsCount;\n } else {\n options.page = 1;\n this.options.endless = false;\n }\n }\n return this.read(this._mergeState(options));\n }\n\n var isPrevented = this.trigger(REQUESTSTART, { type: \"read\" });\n if (!isPrevented) {\n this.trigger(PROGRESS);\n if (options) {\n options.groupPaging = this._groupPaging;\n }\n result = this._queryProcess(this._data, this._mergeState(options));\n\n this._setFilterTotal(result.total, true);\n\n this._aggregateResult = this._calculateAggregates(result.dataToAggregate || this._data, options);\n this._setView(result, options);\n this.trigger(REQUESTEND, { type: \"read\" });\n this.trigger(CHANGE, { items: result.data, action: options ? options.action : \"\" });\n }\n\n return $.Deferred().resolve(isPrevented).promise();\n },\n\n _hasExpandedSubGroups: function(group) {\n var result = false;\n var length = group.items ? group.items.length : 0;\n\n if (!group.hasSubgroups) {\n return false;\n }\n\n for (var i = 0; i < length; i++) {\n if (this._groupsState[group.items[i].uid]) {\n result = true;\n break;\n }\n }\n return result;\n },\n\n _findGroupedRange: function(data, result, options, parents, callback) {\n var that = this;\n var length = data.length;\n var group;\n var current;\n var itemsLength;\n var groupCount;\n var itemsToSkip;\n\n for (var i = 0; i < length; i++) {\n group = data[i];\n\n if (options.taken >= options.take) {\n break;\n }\n\n if (!that._getGroupByUid(group.uid)) {\n that._groupsFlat.push(group);\n }\n\n if (that._groupsState[group.uid]) {\n if (that._isServerGroupPaged()) {\n if (that._fetchGroupItems(group, options, parents, callback)) {\n that._fetchingGroupItems = true;\n return;\n }\n groupCount = (group.subgroupCount || group.itemCount) + 1;\n itemsToSkip = options.skip - options.skipped;\n if (!that._hasExpandedSubGroups(group) && itemsToSkip > groupCount) {\n options.skipped += groupCount;\n continue;\n }\n }\n\n if (options.includeParents && options.skipped < options.skip) {\n options.skipped++;\n group.excludeHeader = true;\n } else if (options.includeParents) {\n options.taken++;\n group.excludeHeader = false;\n }\n\n if (group.hasSubgroups && group.items && group.items.length) {\n group.currentItems = [];\n\n if (!parents) {\n parents = [];\n }\n parents.push(group);\n\n that._findGroupedRange(group.items, group.currentItems, options, parents, callback);\n parents.pop();\n\n if (group.currentItems.length || options.taken > 0) {\n result.push(group);\n } else {\n group.excludeHeader = false;\n }\n } else {\n current = [];\n itemsLength = group.items.length;\n\n for (var j = 0; j < itemsLength; j++) {\n if (options.skipped < options.skip) {\n options.skipped++;\n continue;\n }\n\n if (options.taken >= options.take) {\n break;\n }\n current.push(group.items[j]);\n options.taken++;\n }\n\n if (current.length || options.taken > 0) {\n group.currentItems = current;\n result.push(group);\n } else {\n group.excludeHeader = false;\n }\n }\n } else {\n if (options.skipped < options.skip) {\n options.skipped++;\n continue;\n }\n result.push(group);\n options.taken++;\n }\n }\n },\n\n _expandedSubGroupItemsCount: function(group, end, includeCurrentItems) {\n var that = this;\n var result = 0;\n var subGroup;\n var endSpecified = typeof end === \"number\";\n var length = endSpecified ? end : group.subgroupCount;\n var temp;\n\n if (!group.hasSubgroups) {\n return result;\n }\n\n for (var i = 0; i < length; i++) {\n subGroup = group.items[i];\n\n if (!subGroup) {\n break;\n }\n\n if (subGroup.hasSubgroups && that._groupsState[group.uid]) {\n temp = that._expandedSubGroupItemsCount(subGroup, length, true);\n result += temp;\n\n if (endSpecified) {\n length -= temp;\n }\n } else if (!subGroup.hasSubgroups && that._groupsState[subGroup.uid]) {\n temp = subGroup.items ? subGroup.items.length : 0;\n result += temp;\n if (endSpecified) {\n length -= temp;\n }\n }\n\n if (includeCurrentItems) {\n result += 1;\n if (endSpecified) {\n length -= 1;\n }\n }\n\n if (endSpecified && result > length) {\n return result;\n }\n }\n\n return result;\n },\n\n _fetchGroupItems: function(group, options, parents, callback) {\n var that = this;\n var groupItemsSkip;\n var firstItem;\n var lastItem;\n var groupItemCount = group.hasSubgroups ? group.subgroupCount : group.itemCount;\n var take = options.take;\n var skipped = options.skipped;\n var pageSize = that.take();\n var expandedSubGroupItemsCount;\n\n if (options.includeParents) {\n if (skipped < options.skip) {\n skipped += 1;\n } else {\n take -= 1;\n }\n }\n\n if (!group.items || (group.items && !group.items.length)) {\n that.getGroupItems(group, options, parents, callback, 0);\n return true;\n } else {\n expandedSubGroupItemsCount = this._expandedSubGroupItemsCount(group, options.skip - skipped);\n groupItemsSkip = Math.max(options.skip - (skipped + expandedSubGroupItemsCount), 0);\n\n if (groupItemsSkip >= groupItemCount) {\n return false;\n }\n\n firstItem = group.items[groupItemsSkip];\n lastItem = group.items[Math.min(groupItemsSkip + take, groupItemCount - 1)];\n\n if (firstItem.notFetched) {\n that.getGroupItems(group, options, parents, callback, math.max(math.floor(groupItemsSkip / pageSize), 0) * pageSize, math.round((groupItemsSkip + pageSize) / pageSize));\n return true;\n }\n\n if (lastItem.notFetched) {\n that.getGroupItems(group, options, parents, callback, math.max(math.floor((groupItemsSkip + pageSize) / pageSize), 0) * pageSize, math.round((groupItemsSkip + pageSize) / pageSize));\n return true;\n }\n }\n },\n\n getGroupItems: function(group, options, parents, callback, groupItemsSkip, page) {\n var that = this;\n var take;\n var filter;\n var data;\n var subgroups;\n\n if (!group.items) {\n group.items = [];\n }\n\n take = that.take();\n filter = this._composeItemsFilter(group, parents);\n data = {\n page: page || 1,\n pageSize: take,\n skip: groupItemsSkip,\n take: take,\n filter: filter,\n aggregate: that._aggregate,\n sort: that._sort\n };\n subgroups = that.findSubgroups(group);\n\n if (subgroups && subgroups.length) {\n data.group = subgroups;\n data.groupPaging = true;\n }\n\n clearTimeout(that._timeout);\n that._timeout = setTimeout(function() {\n that._queueRequest(data, function() {\n if (!that.trigger(REQUESTSTART, {\n type: \"read\"\n })) {\n that.transport.read({\n data: data,\n success: that._groupItemsSuccessHandler(group, options.skip, that.take(), callback, groupItemsSkip),\n error: function() {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n }\n });\n } else {\n that._dequeueRequest();\n }\n });\n }, 100);\n },\n\n _groupItemsSuccessHandler: function(group, skip, take, callback, groupItemsSkip) {\n var that = this;\n var timestamp = that._timeStamp();\n callback = isFunction(callback) ? callback : noop;\n var totalField = that.options.schema && that.options.schema.total ? that.options.schema.total : \"Total\";\n\n return function(data) {\n var temp;\n var model = Model.define(that.options.schema.model);\n var totalCount;\n\n that._dequeueRequest();\n\n that.trigger(REQUESTEND, {\n response: data,\n type: \"read\"\n });\n\n if (isFunction(totalField)) {\n totalCount = totalField(data);\n } else {\n totalCount = data[totalField];\n }\n\n data = that.reader.parse(data);\n\n if (group.hasSubgroups) {\n temp = that.reader.groups(data);\n group.subgroupCount = totalCount;\n } else {\n temp = that.reader.data(data);\n temp = temp.map(function(item) {\n return new model(item);\n });\n }\n\n group.items.omitChangeEvent = true;\n for (var i = 0; i < totalCount; i++) {\n if (i >= groupItemsSkip && i < (groupItemsSkip + take) ) {\n group.items.splice(i, 1, temp[i - groupItemsSkip]);\n } else {\n if (!group.items[i]) {\n group.items.splice(i, 0, { notFetched: true });\n }\n }\n }\n group.items.omitChangeEvent = false;\n\n that._updateRangePristineData(group);\n that._fetchingGroupItems = false;\n\n if (!group.countAdded) {\n that._serverGroupsTotal += totalCount;\n group.countAdded = true;\n }\n\n that.range(skip, take, callback, \"expandGroup\");\n\n if (timestamp >= that._currentRequestTimeStamp || !that._skipRequestsInProgress) {\n that.trigger(CHANGE, {});\n }\n };\n },\n\n findSubgroups: function(group) {\n var indexOfCurrentGroup = this._group.map(function(g) {\n return g.field;\n }).indexOf(group.field);\n\n return this._group.slice(indexOfCurrentGroup + 1, this._group.length);\n },\n\n _composeItemsFilter: function(group, parents) {\n var filter = this.filter() || {\n logic: \"and\",\n filters: []\n };\n\n filter.logic = 'and';\n filter = extend(true, {}, filter);\n filter.filters.push({\n field: group.field,\n operator: \"eq\",\n value: group.value\n });\n\n if (parents) {\n for (var i = 0; i < parents.length; i++) {\n filter.filters.push({\n field: parents[i].field,\n operator: \"eq\",\n value: parents[i].value\n });\n }\n }\n\n return filter;\n },\n\n _updateRangePristineData: function(group) {\n var that = this;\n var ranges = that._ranges;\n var rangesLength = ranges.length;\n var temp;\n var currentGroup;\n var range;\n var dataLength;\n var indexes;\n var currIdx;\n\n for (var i = 0; i < rangesLength; i++) {\n range = ranges[i];\n dataLength = range.data.length;\n indexes = [];\n temp = null;\n\n for (var j = 0; j < dataLength; j++) {\n currentGroup = range.data[j];\n indexes.push(j);\n\n if ((currentGroup.uid === group.uid) || (currentGroup.hasSubgroups && currentGroup.items.length && that._containsSubGroup(currentGroup, group, indexes))) {\n break;\n }\n indexes.pop();\n }\n\n if (indexes.length) {\n temp = ranges[i].pristineData;\n\n while (indexes.length > 1) {\n currIdx = indexes.splice(0, 1)[0];\n temp = temp[currIdx].items;\n }\n temp[indexes[0]] = that._cloneGroup(group);\n break;\n }\n }\n },\n\n _containsSubGroup: function(group, subgroup, indexes) {\n var that = this;\n var length = group.items.length;\n var currentSubGroup;\n\n if (group.hasSubgroups && length) {\n for (var i = 0; i < length; i++) {\n currentSubGroup = group.items[i];\n indexes.push(i);\n if (currentSubGroup.uid === subgroup.uid ||\n (currentSubGroup.hasSubgroups &&\n currentSubGroup.items.length &&\n that._containsSubGroup(currentSubGroup, subgroup, indexes))) {\n return true;\n }\n indexes.pop();\n }\n }\n\n },\n\n _cloneGroup: function(group) {\n var that = this;\n group = typeof group.toJSON == \"function\" ? group.toJSON() : group;\n\n if (group.items && group.items.length) {\n group.items = group.items.map(function(item) {\n return that._cloneGroup(item);\n });\n }\n\n return group;\n },\n\n _setFilterTotal: function(filterTotal, setDefaultValue) {\n var that = this;\n\n if (!that.options.serverFiltering) {\n if (filterTotal !== undefined$1) {\n that._total = filterTotal;\n } else if (setDefaultValue) {\n that._total = that._data.length;\n }\n }\n },\n\n fetch: function(callback) {\n var that = this;\n var fn = function(isPrevented) {\n if (isPrevented !== true && isFunction(callback)) {\n callback.call(that);\n }\n };\n\n return this._query().done(fn);\n },\n\n _query: function(options) {\n var that = this;\n\n return that.query(extend({}, {\n page: that.page(),\n pageSize: that.pageSize(),\n sort: that.sort(),\n filter: that.filter(),\n group: that.group(),\n aggregate: that.aggregate()\n }, options));\n },\n\n next: function(options) {\n var that = this,\n page = that.page(),\n total = that.total();\n\n options = options || {};\n\n if (!page || (total && page + 1 > that.totalPages())) {\n return;\n }\n\n that._skip = that._currentRangeStart = page * that.take();\n\n page += 1;\n options.page = page;\n\n that._query(options);\n\n return page;\n },\n\n prev: function(options) {\n var that = this,\n page = that.page();\n\n options = options || {};\n\n if (!page || page === 1) {\n return;\n }\n\n that._skip = that._currentRangeStart = that._skip - that.take();\n\n page -= 1;\n options.page = page;\n\n that._query(options);\n\n return page;\n },\n\n page: function(val) {\n var that = this,\n skip;\n\n if (val !== undefined$1) {\n val = math.max(math.min(math.max(val, 1), that.totalPages()), 1);\n var take = that.take();\n\n if (that._isGroupPaged()) {\n val -= 1;\n that.range(val * take, take, null, \"page\");\n return;\n }\n that._query(that._pageableQueryOptions({ page: val }));\n return;\n }\n skip = that.skip();\n\n return skip !== undefined$1 ? math.round((skip || 0) / (that.take() || 1)) + 1 : undefined$1;\n },\n\n pageSize: function(val) {\n var that = this;\n\n if (val !== undefined$1) {\n that._query(that._pageableQueryOptions({ pageSize: val, page: 1 }));\n return;\n }\n\n return that.take();\n },\n\n sort: function(val) {\n var that = this;\n\n if (val !== undefined$1) {\n that.trigger(\"sort\");\n that._query({ sort: val });\n return;\n }\n\n return that._sort;\n },\n\n filter: function(val) {\n var that = this;\n\n if (val === undefined$1) {\n return that._filter;\n }\n\n that.trigger(\"reset\");\n that._query({ filter: val, page: 1 });\n },\n\n group: function(val) {\n var that = this;\n var options = { group: val };\n\n if (that._groupPaging) {\n // clear ranges if ungrouping is performed\n if (val !== undefined$1 && (!val || !val.length) ) {\n that._ranges = [];\n }\n options.page = 1;\n }\n\n if (val !== undefined$1) {\n that._query(options);\n return;\n }\n\n return that._group;\n },\n\n getGroupsFlat: function(data) {\n var idx,\n result = [],\n length;\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n var group = data[idx];\n if (group.hasSubgroups) {\n result = result.concat(this.getGroupsFlat(group.items));\n }\n\n result.push(group);\n }\n\n return result;\n },\n\n total: function() {\n return parseInt(this._total || 0, 10);\n },\n\n groupsTotal: function(includeExpanded) {\n var that = this;\n\n if (!that._group.length) {\n return that.total();\n }\n\n if (that._isServerGrouped()) {\n if (that._serverGroupsTotal) {\n return that._serverGroupsTotal;\n }\n that._serverGroupsTotal = that.total();\n\n return that._serverGroupsTotal;\n }\n\n return that._calculateGroupsTotal(that._ranges.length ? that._ranges[0].data : [], includeExpanded);\n },\n\n _calculateGroupsTotal: function(groups, includeExpanded, itemsField, ignoreState) {\n var that = this;\n itemsField = itemsField || \"items\";\n var total;\n var length;\n\n if (that._group.length && groups) {\n total = 0;\n length = groups.length;\n\n for (var i = 0; i < length; i++) {\n total += that.groupCount(groups[i], includeExpanded, itemsField, ignoreState);\n }\n that._groupsTotal = total;\n return total;\n }\n\n that._groupsTotal = that._data.length;\n return that._groupsTotal;\n },\n\n groupCount: function(group, includeExpanded, itemsField, ignoreState) {\n var that = this;\n var total = 0;\n\n if (group.hasSubgroups && that._groupsState[group.uid]) {\n if (includeExpanded && !group.excludeHeader || ignoreState) {\n total += 1;\n }\n\n group[itemsField].forEach(function(subgroup) {\n total += that.groupCount(subgroup, includeExpanded, itemsField, ignoreState);\n });\n } else {\n if (that._groupsState[group.uid]) {\n if (includeExpanded && !group.excludeHeader || ignoreState) {\n total++;\n }\n total += group[itemsField] ? group[itemsField].length : 0;\n } else {\n total++;\n }\n }\n return total;\n },\n\n countGroupRange: function(range) {\n var total = 0;\n var length = range.length;\n\n for (var i = 0; i < length; i++) {\n total += this.groupCount(range[i], true);\n }\n\n return total;\n },\n\n aggregate: function(val) {\n var that = this;\n\n if (val !== undefined$1) {\n that._query({ aggregate: val });\n return;\n }\n\n return that._aggregate;\n },\n\n aggregates: function() {\n var result = this._aggregateResult;\n\n if (isEmptyObject(result)) {\n result = this._emptyAggregates(this.aggregate());\n }\n\n return result;\n },\n\n _emptyAggregates: function(aggregates) {\n var result = {};\n\n if (!isEmptyObject(aggregates)) {\n var aggregate = {};\n\n if (!isArray(aggregates)) {\n aggregates = [aggregates];\n }\n\n for (var idx = 0; idx < aggregates.length; idx++) {\n aggregate[aggregates[idx].aggregate] = 0;\n result[aggregates[idx].field] = aggregate;\n }\n }\n\n return result;\n },\n\n _pageableQueryOptions: function(options) {\n return options;\n },\n\n _wrapInEmptyGroup: function(model) {\n var groups = this.group(),\n parent,\n group,\n idx,\n length;\n\n for (idx = groups.length - 1, length = 0; idx >= length; idx--) {\n group = groups[idx];\n parent = {\n value: model.get ? model.get(group.field) : model[group.field],\n field: group.field,\n items: parent ? [parent] : [model],\n hasSubgroups: !!parent,\n aggregates: this._emptyAggregates(group.aggregates)\n };\n }\n\n return parent;\n },\n\n totalPages: function() {\n var that = this,\n pageSize = that.pageSize() || that.total(),\n total = that._isGroupPaged() ? that.groupsTotal(true) : that.total();\n\n return math.ceil((total || 0) / pageSize);\n },\n\n inRange: function(skip, take) {\n var that = this,\n end = math.min(skip + take, that.total());\n\n if (!that.options.serverPaging && that._data.length > 0) {\n return true;\n }\n\n return that._findRange(skip, end).length > 0;\n },\n\n lastRange: function() {\n var ranges = this._ranges;\n return ranges[ranges.length - 1] || { start: 0, end: 0, data: [] };\n },\n\n firstItemUid: function() {\n var ranges = this._ranges;\n return ranges.length && ranges[0].data.length && ranges[0].data[0].uid;\n },\n\n enableRequestsInProgress: function() {\n this._skipRequestsInProgress = false;\n },\n\n _timeStamp: function() {\n return new Date().getTime();\n },\n\n range: function(skip, take, callback, action) {\n this._currentRequestTimeStamp = this._timeStamp();\n this._skipRequestsInProgress = true;\n var total = this._isGroupPaged() ? this.groupsTotal(true) : this.total();\n\n if (action === \"expandGroup\" || action === \"collapseGroup\") {\n this._updateOuterRangesLength();\n }\n\n skip = math.min(skip || 0, total);\n callback = isFunction(callback) ? callback : noop;\n\n var that = this,\n pageSkip = math.max(math.floor(skip / take), 0) * take,\n size = math.min(pageSkip + take, total),\n data;\n\n data = that._findRange(skip, math.min(skip + take, total), callback);\n\n if ((data.length || total === 0) && !that._fetchingGroupItems) {\n that._processRangeData(data, skip, take, that._originalPageSkip || pageSkip, that._originalSize || size, {\n action: action\n });\n that._originalPageSkip = null;\n that._originalSize = null;\n callback();\n return;\n }\n\n if (that._isGroupPaged()) {\n that._originalPageSkip = pageSkip;\n that._originalSize = size;\n\n pageSkip = math.max(math.floor(that._adjustPageSkip(skip, take) / take), 0) * take;\n size = math.min(pageSkip + take, total);\n }\n\n if (take !== undefined$1 && !that._fetchingGroupItems) {\n if ((that._isGroupPaged() && !that._groupRangeExists(pageSkip, take)) || !that._rangeExists(pageSkip, size)) {\n that.prefetch(pageSkip, take, function() {\n if (skip > pageSkip && size < that.total() && !that._rangeExists(size, math.min(size + take, that.total()))) {\n that.prefetch(size, take, function() {\n that.range(skip, take, callback );\n });\n } else {\n that.range(skip, take, callback);\n }\n });\n } else if (pageSkip < skip) {\n that.prefetch(size, take, function() {\n that.range(skip, take, callback );\n });\n }\n }\n },\n\n _findRange: function(start, end, callback) {\n var that = this,\n ranges = that._ranges,\n range,\n data = [],\n skipIdx,\n takeIdx,\n startIndex,\n endIndex,\n rangeData,\n rangeEnd,\n processed,\n options = that.options,\n remote = options.serverSorting || options.serverPaging || options.serverFiltering || options.serverGrouping || options.serverAggregates,\n flatData,\n count,\n length,\n groupMapOptions = {\n take: end - start,\n skip: start,\n skipped: 0,\n taken: 0,\n includeParents: true\n },\n prevRangeEnd,\n isGroupPaged = that._isGroupPaged(),\n startField = isGroupPaged ? \"outerStart\" : \"start\",\n endField = isGroupPaged ? \"outerEnd\" : \"end\",\n currentDataLength;\n\n for (skipIdx = 0, length = ranges.length; skipIdx < length; skipIdx++) {\n range = ranges[skipIdx];\n\n if (isGroupPaged) {\n if (range.outerStart >= end) {\n return [];\n }\n\n if (start > range.outerEnd) {\n groupMapOptions.skipped += range.outerEnd - (prevRangeEnd || 0);\n prevRangeEnd = range.outerEnd;\n continue;\n }\n\n if (typeof prevRangeEnd !== \"undefined\" && prevRangeEnd != range.outerStart) {\n groupMapOptions.skipped += range.outerStart - prevRangeEnd;\n }\n\n if (groupMapOptions.skipped > groupMapOptions.skip) {\n return [];\n }\n\n if (typeof prevRangeEnd === \"undefined\" && start > 0 && range.start > 0) {\n groupMapOptions.skipped = range.outerStart;\n }\n\n takeIdx = skipIdx;\n while (true) {\n this._findGroupedRange(range.data, data, groupMapOptions, null, callback);\n currentDataLength = that._calculateGroupsTotal(data, true, \"currentItems\");\n\n if (currentDataLength >= groupMapOptions.take) {\n return data;\n }\n\n if (that._fetchingGroupItems) {\n return [];\n }\n takeIdx++;\n\n if (ranges[takeIdx] && ranges[takeIdx].outerStart === range.outerEnd) {\n range = ranges[takeIdx];\n } else {\n break;\n }\n }\n } else if (start >= range[startField] && start <= range[endField]) {\n count = 0;\n\n for (takeIdx = skipIdx; takeIdx < length; takeIdx++) {\n range = ranges[takeIdx];\n flatData = that._flatData(range.data, true);\n\n if (flatData.length && start + count >= range.start) {\n rangeData = range.data;\n rangeEnd = range.end;\n\n if (!remote) {\n if (options.inPlaceSort) {\n processed = that._queryProcess(range.data, { filter: that.filter() });\n } else {\n var sort = normalizeGroupWithoutCompare(that.group() || []).concat(normalizeSort(that.sort() || []));\n processed = that._queryProcess(range.data, { sort: sort, filter: that.filter() });\n }\n flatData = rangeData = processed.data;\n\n if (processed.total !== undefined$1) {\n rangeEnd = processed.total;\n }\n }\n\n startIndex = 0;\n if (start + count > range.start) {\n startIndex = (start + count) - range.start;\n }\n endIndex = flatData.length;\n if (rangeEnd > end) {\n endIndex = endIndex - (rangeEnd - end);\n }\n count += endIndex - startIndex;\n data = that._mergeGroups(data, rangeData, startIndex, endIndex);\n\n if (end <= range.end && count == end - start) {\n return data;\n }\n }\n }\n break;\n }\n prevRangeEnd = range.outerEnd;\n }\n return [];\n },\n\n _getRangesMismatch: function(pageSkip) {\n var that = this;\n var ranges = that._ranges;\n var mismatch = 0;\n var i = 0;\n\n while (true) {\n var range = ranges[i];\n if (!range || range.outerStart > pageSkip) {\n break;\n }\n\n if (range.outerEnd != range.end) {\n mismatch = range.outerEnd - range.end;\n }\n i++;\n }\n\n return mismatch;\n },\n\n _mergeGroups: function(data, range, skip, take) {\n if (this._isServerGrouped()) {\n var temp = range.toJSON(),\n prevGroup;\n\n if (data.length) {\n prevGroup = data[data.length - 1];\n }\n\n mergeGroups(prevGroup, temp, skip, take);\n\n return data.concat(temp);\n }\n return data.concat(range.slice(skip, take));\n },\n\n _processRangeData: function(data, skip, take, pageSkip, size, eventData) {\n var that = this;\n\n that._pending = undefined$1;\n\n that._skip = skip > that.skip() && !that._omitPrefetch ? math.min(size, (that.totalPages() - 1) * that.take()) : pageSkip;\n\n that._currentRangeStart = skip;\n\n that._take = take;\n\n var paging = that.options.serverPaging;\n var sorting = that.options.serverSorting;\n var filtering = that.options.serverFiltering;\n var aggregates = that.options.serverAggregates;\n try {\n that.options.serverPaging = true;\n if (!that._isServerGrouped() && !(that.group() && that.group().length)) {\n that.options.serverSorting = true;\n }\n that.options.serverFiltering = true;\n that.options.serverPaging = true;\n that.options.serverAggregates = true;\n\n if (paging) {\n that._detachObservableParents();\n that._data = data = that._observe(data);\n }\n that._process(data, eventData);\n } finally {\n that.options.serverPaging = paging;\n that.options.serverSorting = sorting;\n that.options.serverFiltering = filtering;\n that.options.serverAggregates = aggregates;\n }\n },\n\n skip: function() {\n var that = this;\n\n if (that._skip === undefined$1) {\n return (that._page !== undefined$1 ? (that._page - 1) * (that.take() || 1) : undefined$1);\n }\n return that._skip;\n },\n\n currentRangeStart: function() {\n return this._currentRangeStart || 0;\n },\n\n take: function() {\n return this._take || this._pageSize;\n },\n\n _prefetchSuccessHandler: function(skip, size, callback, force) {\n var that = this;\n var timestamp = that._timeStamp();\n\n return function(data) {\n var found = false,\n range = { start: skip, end: size, data: [], timestamp: that._timeStamp() },\n idx,\n length,\n temp;\n\n that._dequeueRequest();\n\n that.trigger(REQUESTEND, { response: data, type: \"read\" });\n\n data = that.reader.parse(data);\n\n temp = that._readData(data);\n\n if (temp.length) {\n for (idx = 0, length = that._ranges.length; idx < length; idx++) {\n if (that._ranges[idx].start === skip) {\n found = true;\n range = that._ranges[idx];\n\n if (!that._isGroupPaged()) {\n range.pristineData = temp;\n range.data = that._observe(temp);\n range.end = range.start + that._flatData(range.data, true).length;\n that._sortRanges();\n }\n\n break;\n }\n }\n\n if (!found) {\n that._addRange(that._observe(temp), skip);\n }\n }\n\n that._total = that.reader.total(data);\n\n if (force || (timestamp >= that._currentRequestTimeStamp || !that._skipRequestsInProgress)) {\n if (callback && temp.length) {\n callback();\n } else {\n that.trigger(CHANGE, {});\n }\n }\n };\n },\n\n prefetch: function(skip, take, callback) {\n var that = this,\n size = math.min(skip + take, that.total()),\n options = {\n take: take,\n skip: skip,\n page: skip / take + 1,\n pageSize: take,\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n };\n\n\n if ((that._isGroupPaged() && !that._isServerGrouped() && that._groupRangeExists(skip, size))) {\n if (callback) {\n callback();\n }\n return;\n }\n\n if ((that._isServerGroupPaged() && !that._groupRangeExists(skip, size)) || !that._rangeExists(skip, size)) {\n clearTimeout(that._timeout);\n\n that._timeout = setTimeout(function() {\n that._queueRequest(options, function() {\n if (!that.trigger(REQUESTSTART, { type: \"read\" })) {\n if (that._omitPrefetch) {\n that.trigger(PROGRESS);\n }\n that.transport.read({\n data: that._params(options),\n success: that._prefetchSuccessHandler(skip, size, callback),\n error: function() {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n }\n });\n } else {\n that._dequeueRequest();\n }\n });\n }, 100);\n } else if (callback) {\n callback();\n }\n },\n\n _multiplePrefetch: function(skip, take, callback) {\n var that = this,\n size = math.min(skip + take, that.total()),\n options = {\n take: take,\n skip: skip,\n page: skip / take + 1,\n pageSize: take,\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n };\n\n if (!that._rangeExists(skip, size)) {\n if (!that.trigger(REQUESTSTART, { type: \"read\" })) {\n that.transport.read({\n data: that._params(options),\n success: that._prefetchSuccessHandler(skip, size, callback, true)\n });\n }\n } else if (callback) {\n callback();\n }\n },\n\n _adjustPageSkip: function(start, take) {\n var that = this;\n var prevRange = that._getPrevRange(start);\n var result;\n var total = that.total();\n var mismatch;\n\n if (prevRange) {\n mismatch = that._getRangesMismatch(start);\n\n if (!mismatch) {\n return start;\n }\n start -= mismatch;\n }\n result = math.max(math.floor(start / take), 0) * take;\n\n if (result > total) {\n while (true) {\n result -= take;\n if (result < total) {\n break;\n }\n }\n }\n return result;\n },\n\n _getNextRange: function(end) {\n var that = this,\n ranges = that._ranges,\n idx,\n length;\n\n for (idx = 0, length = ranges.length; idx < length; idx++) {\n if (ranges[idx].start <= end && ranges[idx].end >= end) {\n return ranges[idx];\n }\n }\n },\n\n _getPrevRange: function(start) {\n var that = this,\n ranges = that._ranges,\n idx,\n range,\n length = ranges.length;\n\n for (idx = length - 1; idx >= 0; idx--) {\n if (ranges[idx].outerStart <= start) {\n range = ranges[idx];\n break;\n }\n\n }\n\n return range;\n },\n\n _rangeExists: function(start, end) {\n var that = this,\n ranges = that._ranges,\n idx,\n length;\n\n for (idx = 0, length = ranges.length; idx < length; idx++) {\n if (ranges[idx].start <= start && ranges[idx].end >= end) {\n return true;\n }\n }\n\n return false;\n },\n\n _groupRangeExists: function(start, end) {\n var that = this,\n ranges = that._ranges,\n idx,\n length,\n availableItemsCount = 0,\n total = that.groupsTotal(true);\n\n if (end > total && !that._isServerGrouped()) {\n end = total;\n }\n\n for (idx = 0, length = ranges.length; idx < length; idx++) {\n var range = ranges[idx];\n if (range.outerStart <= start && range.outerEnd >= start) {\n availableItemsCount += range.outerEnd - start;\n } else if (range.outerStart <= end && range.outerEnd >= end) {\n availableItemsCount += end - range.outerStart;\n }\n }\n\n return availableItemsCount >= end - start;\n },\n\n _getCurrentRangeSpan: function() {\n var that = this;\n var ranges = that._ranges;\n var start = that.currentRangeStart();\n var end = start + (that.take() || 0);\n var rangeSpan = [];\n var range;\n var idx;\n var length = ranges.length;\n\n for (idx = 0; idx < length; idx++) {\n range = ranges[idx];\n\n if ((range.start <= start && range.end >= start) || (range.start >= start && range.start <= end)) {\n rangeSpan.push(range);\n }\n }\n\n return rangeSpan;\n },\n\n _removeModelFromRanges: function(model) {\n var that = this;\n var range;\n\n for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\n range = this._ranges[idx];\n\n that._removeModelFromRange(range, model);\n }\n\n that._updateRangesLength();\n },\n\n _removeModelFromRange: function(range, model) {\n this._eachItem(range.data, function(data) {\n if (!data) {\n return;\n }\n for (var idx = 0; idx < data.length; idx++) {\n var dataItem = data[idx];\n\n if (dataItem.uid && dataItem.uid == model.uid) {\n [].splice.call(data, idx, 1);\n break;\n }\n }\n });\n },\n\n _insertModelInRange: function(index, model) {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var range;\n var i;\n\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n\n if (range.start <= index && range.end >= index) {\n if (!that._getByUid(model.uid, range.data)) {\n if (that._isServerGrouped()) {\n range.data.splice(index, 0, that._wrapInEmptyGroup(model));\n } else {\n range.data.splice(index, 0, model);\n }\n }\n\n break;\n }\n }\n\n that._updateRangesLength();\n },\n\n _updateRangesLength: function() {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var mismatchFound = false;\n var mismatchLength = 0;\n var lengthDifference = 0;\n var rangeLength;\n var range;\n var i;\n\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n rangeLength = that._isGroupPaged() ? range.data.length : that._flatData(range.data, true).length;\n lengthDifference = rangeLength - math.abs(range.end - range.start);\n\n if (!mismatchFound && lengthDifference !== 0) {\n mismatchFound = true;\n mismatchLength = lengthDifference;\n range.end += mismatchLength;\n continue;\n }\n\n if (mismatchFound) {\n range.start += mismatchLength;\n range.end += mismatchLength;\n }\n }\n },\n\n _updateOuterRangesLength: function() {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var mismatchLength = 0;\n var range;\n var i;\n var prevRange;\n var rangeLength;\n\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n rangeLength = that._isGroupPaged() ? that._calculateGroupsTotal(range.data, true, \"items\", true) : that._flatData(range.data, true).length;\n\n if (prevRange) {\n if (prevRange.end != range.start) {\n mismatchLength = range.start - prevRange.end;\n }\n range.outerStart = prevRange.outerEnd + mismatchLength;\n mismatchLength = 0;\n } else {\n range.outerStart = range.start;\n }\n\n range.outerEnd = range.outerStart + rangeLength;\n prevRange = range;\n }\n }\n });\n\n var Transport = {};\n\n Transport.create = function(options, data, dataSource) {\n var transport,\n transportOptions = options.transport ? $.extend({}, options.transport) : null;\n\n if (transportOptions) {\n transportOptions.read = typeof transportOptions.read === STRING ? { url: transportOptions.read } : transportOptions.read;\n\n if (options.type === \"jsdo\") {\n transportOptions.dataSource = dataSource;\n }\n\n if (options.type) {\n kendo.data.transports = kendo.data.transports || {};\n kendo.data.schemas = kendo.data.schemas || {};\n\n if (!kendo.data.transports[options.type]) {\n kendo.logToConsole(\"Unknown DataSource transport type '\" + options.type + \"'.\\nVerify that registration scripts for this type are included after Kendo UI on the page.\", \"warn\");\n } else if (!isPlainObject(kendo.data.transports[options.type])) {\n transport = new kendo.data.transports[options.type](extend(transportOptions, { data: data }));\n } else {\n transportOptions = extend(true, {}, kendo.data.transports[options.type], transportOptions);\n }\n\n options.schema = extend(true, {}, kendo.data.schemas[options.type], options.schema);\n }\n\n if (!transport) {\n transport = isFunction(transportOptions.read) ? transportOptions : new RemoteTransport(transportOptions);\n }\n } else {\n transport = new LocalTransport({ data: options.data || [] });\n }\n return transport;\n };\n\n DataSource.create = function(options) {\n if (isArray(options) || options instanceof ObservableArray) {\n options = { data: options };\n }\n\n var dataSource = options || {},\n data = dataSource.data,\n fields = dataSource.fields,\n table = dataSource.table,\n select = dataSource.select,\n idx,\n length,\n model = {},\n field;\n\n if (!data && fields && !dataSource.transport) {\n if (table) {\n data = inferTable(table, fields);\n } else if (select) {\n data = inferSelect(select, fields);\n\n if (dataSource.group === undefined$1 && data[0] && data[0].optgroup !== undefined$1) {\n dataSource.group = \"optgroup\";\n }\n }\n }\n\n if (kendo.data.Model && fields && (!dataSource.schema || !dataSource.schema.model)) {\n for (idx = 0, length = fields.length; idx < length; idx++) {\n field = fields[idx];\n if (field.type) {\n model[field.field] = field;\n }\n }\n\n if (!isEmptyObject(model)) {\n dataSource.schema = extend(true, dataSource.schema, { model: { fields: model } });\n }\n }\n\n dataSource.data = data;\n\n select = null;\n dataSource.select = null;\n table = null;\n dataSource.table = null;\n\n return dataSource instanceof DataSource ? dataSource : new DataSource(dataSource);\n };\n\n function inferSelect(select, fields) {\n select = $(select)[0];\n var options = select.options;\n var firstField = fields[0];\n var secondField = fields[1];\n\n var data = [];\n var idx, length;\n var optgroup;\n var option;\n var record;\n var value;\n\n for (idx = 0, length = options.length; idx < length; idx++) {\n record = {};\n option = options[idx];\n optgroup = option.parentNode;\n\n if (optgroup === select) {\n optgroup = null;\n }\n\n if (option.disabled || (optgroup && optgroup.disabled)) {\n continue;\n }\n\n if (optgroup) {\n record.optgroup = optgroup.label;\n }\n\n record[firstField.field] = option.text;\n\n value = option.attributes.value;\n\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n\n record[secondField.field] = value;\n\n data.push(record);\n }\n\n return data;\n }\n\n function inferTable(table, fields) {\n var tbody = $(table)[0].tBodies[0],\n rows = tbody ? tbody.rows : [],\n idx,\n length,\n fieldIndex,\n fieldCount = fields.length,\n data = [],\n cells,\n record,\n cell,\n empty;\n\n for (idx = 0, length = rows.length; idx < length; idx++) {\n record = {};\n empty = true;\n cells = rows[idx].cells;\n\n for (fieldIndex = 0; fieldIndex < fieldCount; fieldIndex++) {\n cell = cells[fieldIndex];\n if (cell.nodeName.toLowerCase() !== \"th\") {\n empty = false;\n record[fields[fieldIndex].field] = cell.innerHTML;\n }\n }\n if (!empty) {\n data.push(record);\n }\n }\n\n return data;\n }\n\n var Node = Model.define({\n idField: \"id\",\n\n init: function(value) {\n var that = this,\n hasChildren = that.hasChildren || value && value.hasChildren,\n childrenField = \"items\",\n childrenOptions = {};\n\n kendo.data.Model.fn.init.call(that, value);\n\n if (typeof that.children === STRING) {\n childrenField = that.children;\n }\n\n childrenOptions = {\n schema: {\n data: childrenField,\n model: {\n hasChildren: hasChildren,\n id: that.idField,\n fields: that.fields\n }\n }\n };\n\n if (typeof that.children !== STRING) {\n extend(childrenOptions, that.children);\n }\n\n childrenOptions.data = value;\n\n if (!hasChildren) {\n hasChildren = childrenOptions.schema.data;\n }\n\n if (typeof hasChildren === STRING) {\n hasChildren = kendo.getter(hasChildren);\n }\n\n if (isFunction(hasChildren)) {\n var hasChildrenObject = hasChildren.call(that, that);\n\n if (hasChildrenObject && hasChildrenObject.length === 0) {\n that.hasChildren = false;\n } else {\n that.hasChildren = !!hasChildrenObject;\n }\n }\n\n that._childrenOptions = childrenOptions;\n\n if (that.hasChildren) {\n that._initChildren();\n }\n\n that._loaded = !!(value && value._loaded);\n },\n\n _initChildren: function() {\n var that = this;\n var children, transport, parameterMap;\n\n if (!(that.children instanceof HierarchicalDataSource)) {\n children = that.children = new HierarchicalDataSource(that._childrenOptions);\n\n transport = children.transport;\n parameterMap = transport.parameterMap;\n\n transport.parameterMap = function(data, type) {\n data[that.idField || \"id\"] = that.id;\n\n if (parameterMap) {\n data = parameterMap.call(that, data, type);\n }\n\n return data;\n };\n\n children.parent = function() {\n return that;\n };\n\n children.bind(CHANGE, function(e) {\n e.node = e.node || that;\n that.trigger(CHANGE, e);\n });\n\n children.bind(ERROR, function(e) {\n var collection = that.parent();\n\n if (collection) {\n e.node = e.node || that;\n collection.trigger(ERROR, e);\n }\n });\n\n children.bind(ITEMSLOADED, function(e) {\n var collection = that.parent();\n\n if (collection) {\n collection.trigger(ITEMSLOADED, e);\n }\n });\n\n that._updateChildrenField();\n }\n },\n\n append: function(model) {\n this._initChildren();\n this.loaded(true);\n this.children.add(model);\n },\n\n hasChildren: false,\n\n level: function() {\n var parentNode = this.parentNode(),\n level = 0;\n\n while (parentNode && parentNode.parentNode) {\n level++;\n parentNode = parentNode.parentNode ? parentNode.parentNode() : null;\n }\n\n return level;\n },\n\n _updateChildrenField: function() {\n var fieldName = this._childrenOptions.schema.data;\n\n this[fieldName || \"items\"] = this.children.data();\n },\n\n _childrenLoaded: function() {\n this._loaded = true;\n\n this._updateChildrenField();\n },\n\n load: function() {\n var options = {};\n var method = \"_query\";\n var children, promise;\n\n if (this.hasChildren) {\n this._initChildren();\n\n children = this.children;\n\n options[this.idField || \"id\"] = this.id;\n\n if (!this._loaded) {\n children._data = undefined$1;\n method = \"read\";\n }\n\n children.one(CHANGE, this._childrenLoaded.bind(this));\n\n if (this._matchFilter) {\n options.filter = { field: '_matchFilter', operator: 'eq', value: true };\n }\n\n promise = children[method](options);\n if (!this._loaded) {\n this.trigger(ITEMLOAD, { promise: promise, node: this });\n }\n } else {\n this.loaded(true);\n }\n\n return promise || $.Deferred().resolve().promise();\n },\n\n parentNode: function() {\n var array = this.parent();\n\n return array.parent();\n },\n\n loaded: function(value) {\n if (value !== undefined$1) {\n this._loaded = value;\n } else {\n return this._loaded;\n }\n },\n\n shouldSerialize: function(field) {\n return Model.fn.shouldSerialize.call(this, field) &&\n field !== \"children\" &&\n field !== \"_loaded\" &&\n field !== \"hasChildren\" &&\n field !== \"_childrenOptions\";\n }\n });\n\n function dataMethod(name) {\n return function() {\n var data = this._data,\n result = DataSource.fn[name].apply(this, slice.call(arguments));\n\n if (this._data != data) {\n this._attachBubbleHandlers();\n }\n\n return result;\n };\n }\n\n var HierarchicalDataSource = DataSource.extend({\n init: function(options) {\n var node = Node.define({\n children: options\n });\n\n if (options.filter && !options.serverFiltering) {\n this._hierarchicalFilter = options.filter;\n options.filter = null;\n }\n\n DataSource.fn.init.call(this, extend(true, {}, { schema: { modelBase: node, model: node } }, options));\n\n this._attachBubbleHandlers();\n },\n\n _attachBubbleHandlers: function() {\n var that = this;\n\n that._data.bind(ERROR, function(e) {\n that.trigger(ERROR, e);\n });\n\n that._data.bind(ITEMSLOADED, function(e) {\n that.trigger(ITEMSLOADED, e);\n });\n },\n\n loading: function() {\n if (this._data) {\n return this._data.loading() || this._childrenLoading();\n }\n return false;\n },\n\n _childrenLoading: function() {\n var isLoading = false;\n this._data.forEach(function(node) {\n if (node.hasChildren && node.children.loading()) {\n isLoading = true;\n }\n });\n return isLoading;\n },\n\n read: function(data) {\n var result = DataSource.fn.read.call(this, data);\n\n if (this._hierarchicalFilter) {\n if (this._data && this._data.length > 0) {\n this.filter(this._hierarchicalFilter);\n } else {\n this.options.filter = this._hierarchicalFilter;\n this._filter = normalizeFilter(this.options.filter);\n this._hierarchicalFilter = null;\n }\n }\n\n return result;\n },\n\n remove: function(node) {\n var parentNode = node.parentNode(),\n dataSource = this,\n result;\n\n if (parentNode && parentNode._initChildren) {\n dataSource = parentNode.children;\n }\n\n result = DataSource.fn.remove.call(dataSource, node);\n\n if (parentNode && !dataSource.data().length) {\n parentNode.hasChildren = false;\n }\n\n return result;\n },\n\n success: dataMethod(\"success\"),\n\n data: dataMethod(\"data\"),\n\n insert: function(index, model) {\n var parentNode = this.parent();\n\n if (parentNode && parentNode._initChildren) {\n parentNode.hasChildren = true;\n parentNode._initChildren();\n }\n\n return DataSource.fn.insert.call(this, index, model);\n },\n\n filter: function(val) {\n if (val === undefined$1) {\n return this._filter;\n }\n\n if (!this.options.serverFiltering && this._markHierarchicalQuery(val)) {\n val = { logic: \"or\", filters: [val, { field: '_matchFilter', operator: 'equals', value: true }] };\n }\n\n this.trigger(\"reset\");\n this._query({ filter: val, page: 1 });\n },\n\n _markHierarchicalQuery: function(expressions) {\n var compiled;\n var predicate;\n var fields;\n var operators;\n var filter;\n var accentFoldingFiltering = this.options.accentFoldingFiltering;\n\n expressions = accentFoldingFiltering ? $.extend({}, normalizeFilter(expressions), { accentFoldingFiltering: accentFoldingFiltering }) : normalizeFilter(expressions);\n\n if (!expressions || expressions.filters.length === 0) {\n this._updateHierarchicalFilter(function() {return true;});\n return false;\n }\n\n compiled = Query.filterExpr(expressions);\n fields = compiled.fields;\n operators = compiled.operators;\n\n predicate = filter = new Function(\"d, __f, __o\", \"return \" + compiled.expression);\n\n if (fields.length || operators.length) {\n filter = function(d) {\n return predicate(d, fields, operators);\n };\n }\n\n this._updateHierarchicalFilter(filter);\n return true;\n },\n\n _updateHierarchicalFilter: function(filter) {\n var current;\n var data = this._data;\n var result = false;\n\n for (var idx = 0; idx < data.length; idx++) {\n current = data[idx];\n\n if (current.hasChildren) {\n current._matchFilter = current.children._updateHierarchicalFilter(filter);\n if (!current._matchFilter) {\n current._matchFilter = filter(current);\n }\n } else {\n current._matchFilter = filter(current);\n }\n\n if (current._matchFilter) {\n result = true;\n }\n }\n return result;\n },\n\n _find: function(method, value) {\n var idx, length, node, children;\n var data = this._data;\n\n if (!data) {\n return;\n }\n\n node = DataSource.fn[method].call(this, value);\n\n if (node) {\n return node;\n }\n\n data = this._flatData(this._data);\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n children = data[idx].children;\n\n if (!(children instanceof HierarchicalDataSource)) {\n continue;\n }\n\n node = children[method](value);\n\n if (node) {\n return node;\n }\n }\n },\n\n get: function(id) {\n return this._find(\"get\", id);\n },\n\n getByUid: function(uid) {\n return this._find(\"getByUid\", uid);\n }\n });\n\n function inferList(list, fields) {\n var items = $(list).children(),\n idx,\n length,\n data = [],\n record,\n textField = fields[0].field,\n urlField = fields[1] && fields[1].field,\n spriteCssClassField = fields[2] && fields[2].field,\n imageUrlField = fields[3] && fields[3].field,\n item,\n id,\n textChild,\n className,\n children;\n\n function elements(collection, tagName) {\n return collection.filter(tagName).add(collection.find(tagName));\n }\n\n for (idx = 0, length = items.length; idx < length; idx++) {\n record = { _loaded: true };\n item = items.eq(idx);\n\n textChild = item[0].firstChild;\n children = item.children();\n list = children.filter(\"ul\");\n children = children.filter(\":not(ul)\");\n\n id = item.attr(\"data-id\");\n\n if (id) {\n record.id = id;\n }\n\n if (textChild) {\n record[textField] = textChild.nodeType == 3 ? textChild.nodeValue : children.text();\n }\n\n if (urlField) {\n record[urlField] = elements(children, \"a\").attr(\"href\");\n }\n\n if (imageUrlField) {\n record[imageUrlField] = elements(children, \"img\").attr(\"src\");\n }\n\n if (spriteCssClassField) {\n className = elements(children, \".k-sprite\").prop(\"className\");\n record[spriteCssClassField] = className && kendo.trim(className.replace(\"k-sprite\", \"\"));\n }\n\n if (list.length) {\n record.items = inferList(list.eq(0), fields);\n }\n\n if (item.attr(\"data-hasChildren\") == \"true\") {\n record.hasChildren = true;\n }\n\n data.push(record);\n }\n\n return data;\n }\n\n HierarchicalDataSource.create = function(options) {\n options = options && options.push ? { data: options } : options;\n\n var dataSource = options || {},\n data = dataSource.data,\n fields = dataSource.fields,\n list = dataSource.list;\n\n if (data && data._dataSource) {\n return data._dataSource;\n }\n\n if (!data && fields && !dataSource.transport) {\n if (list) {\n data = inferList(list, fields);\n }\n }\n\n dataSource.data = data;\n\n return dataSource instanceof HierarchicalDataSource ? dataSource : new HierarchicalDataSource(dataSource);\n };\n\n var Buffer = kendo.Observable.extend({\n init: function(dataSource, viewSize, disablePrefetch) {\n kendo.Observable.fn.init.call(this);\n\n this._prefetching = false;\n this.dataSource = dataSource;\n this.prefetch = !disablePrefetch;\n\n var buffer = this;\n\n dataSource.bind(\"change\", function() {\n buffer._change();\n });\n\n dataSource.bind(\"reset\", function() {\n buffer._reset();\n });\n\n this._syncWithDataSource();\n\n this.setViewSize(viewSize);\n },\n\n setViewSize: function(viewSize) {\n this.viewSize = viewSize;\n this._recalculate();\n },\n\n at: function(index) {\n var pageSize = this.pageSize,\n itemPresent = true;\n\n if (index >= this.total()) {\n this.trigger(\"endreached\", { index: index });\n return null;\n }\n\n if (!this.useRanges) {\n return this.dataSource.view()[index];\n }\n if (this.useRanges) {\n // out of range request\n if (index < this.dataOffset || index >= this.skip + pageSize) {\n itemPresent = this.range(Math.floor(index / pageSize) * pageSize);\n }\n\n // prefetch\n if (index === this.prefetchThreshold) {\n this._prefetch();\n }\n\n // mid-range jump - prefetchThreshold and nextPageThreshold may be equal, do not change to else if\n if (index === this.midPageThreshold) {\n this.range(this.nextMidRange, true);\n }\n // next range jump\n else if (index === this.nextPageThreshold) {\n this.range(this.nextFullRange);\n }\n // pull-back\n else if (index === this.pullBackThreshold) {\n if (this.offset === this.skip) { // from full range to mid range\n this.range(this.previousMidRange);\n } else { // from mid range to full range\n this.range(this.previousFullRange);\n }\n }\n\n if (itemPresent) {\n return this.dataSource.at(index - this.dataOffset);\n } else {\n this.trigger(\"endreached\", { index: index });\n return null;\n }\n }\n },\n\n indexOf: function(item) {\n return this.dataSource.data().indexOf(item) + this.dataOffset;\n },\n\n total: function() {\n return parseInt(this.dataSource.total(), 10);\n },\n\n next: function() {\n var buffer = this,\n pageSize = buffer.pageSize,\n offset = buffer.skip - buffer.viewSize + pageSize,\n pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize;\n\n this.offset = offset;\n this.dataSource.prefetch(pageSkip, pageSize, function() {\n buffer._goToRange(offset, true);\n });\n },\n\n range: function(offset, nextRange) {\n if (this.offset === offset) {\n return true;\n }\n\n var buffer = this,\n pageSize = this.pageSize,\n pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize,\n dataSource = this.dataSource;\n\n if (nextRange) {\n pageSkip += pageSize;\n }\n\n if (dataSource.inRange(offset, pageSize)) {\n this.offset = offset;\n this._recalculate();\n this._goToRange(offset);\n return true;\n } else if (this.prefetch) {\n dataSource.prefetch(pageSkip, pageSize, function() {\n buffer.offset = offset;\n buffer._recalculate();\n buffer._goToRange(offset, true);\n });\n return false;\n }\n\n return true;\n },\n\n syncDataSource: function() {\n var offset = this.offset;\n this.offset = null;\n this.range(offset);\n },\n\n destroy: function() {\n this.unbind();\n },\n\n _prefetch: function() {\n var buffer = this,\n pageSize = this.pageSize,\n prefetchOffset = this.skip + pageSize,\n dataSource = this.dataSource;\n\n if (!dataSource.inRange(prefetchOffset, pageSize) && !this._prefetching && this.prefetch) {\n this._prefetching = true;\n this.trigger(\"prefetching\", { skip: prefetchOffset, take: pageSize });\n\n dataSource.prefetch(prefetchOffset, pageSize, function() {\n buffer._prefetching = false;\n buffer.trigger(\"prefetched\", { skip: prefetchOffset, take: pageSize });\n });\n }\n },\n\n _goToRange: function(offset, expanding) {\n if (this.offset !== offset) {\n return;\n }\n\n this.dataOffset = offset;\n this._expanding = expanding;\n this.dataSource.range(offset, this.pageSize);\n this.dataSource.enableRequestsInProgress();\n },\n\n _reset: function() {\n this._syncPending = true;\n },\n\n _change: function() {\n var dataSource = this.dataSource;\n\n this.length = this.useRanges ? dataSource.lastRange().end : dataSource.view().length;\n\n if (this._syncPending) {\n this._syncWithDataSource();\n this._recalculate();\n this._syncPending = false;\n this.trigger(\"reset\", { offset: this.offset });\n }\n\n this.trigger(\"resize\");\n\n if (this._expanding) {\n this.trigger(\"expand\");\n }\n\n delete this._expanding;\n },\n\n _syncWithDataSource: function() {\n var dataSource = this.dataSource;\n\n this._firstItemUid = dataSource.firstItemUid();\n this.dataOffset = this.offset = dataSource.skip() || 0;\n this.pageSize = dataSource.pageSize();\n this.useRanges = dataSource.options.serverPaging;\n },\n\n _recalculate: function() {\n var pageSize = this.pageSize,\n offset = this.offset,\n viewSize = this.viewSize,\n skip = Math.ceil(offset / pageSize) * pageSize;\n\n this.skip = skip;\n this.midPageThreshold = skip + pageSize - 1;\n this.nextPageThreshold = skip + viewSize - 1;\n this.prefetchThreshold = skip + Math.floor(pageSize / 3 * 2);\n this.pullBackThreshold = this.offset - 1;\n\n this.nextMidRange = skip + pageSize - viewSize;\n this.nextFullRange = skip;\n this.previousMidRange = offset - viewSize;\n this.previousFullRange = skip - pageSize;\n }\n });\n\n var BatchBuffer = kendo.Observable.extend({\n init: function(dataSource, batchSize) {\n var batchBuffer = this;\n\n kendo.Observable.fn.init.call(batchBuffer);\n\n this.dataSource = dataSource;\n this.batchSize = batchSize;\n this._total = 0;\n\n this.buffer = new Buffer(dataSource, batchSize * 3);\n\n this.buffer.bind({\n \"endreached\": function(e) {\n batchBuffer.trigger(\"endreached\", { index: e.index });\n },\n \"prefetching\": function(e) {\n batchBuffer.trigger(\"prefetching\", { skip: e.skip, take: e.take });\n },\n \"prefetched\": function(e) {\n batchBuffer.trigger(\"prefetched\", { skip: e.skip, take: e.take });\n },\n \"reset\": function() {\n batchBuffer._total = 0;\n batchBuffer.trigger(\"reset\");\n },\n \"resize\": function() {\n batchBuffer._total = Math.ceil(this.length / batchBuffer.batchSize);\n batchBuffer.trigger(\"resize\", { total: batchBuffer.total(), offset: this.offset });\n }\n });\n },\n\n syncDataSource: function() {\n this.buffer.syncDataSource();\n },\n\n at: function(index) {\n var buffer = this.buffer,\n skip = index * this.batchSize,\n take = this.batchSize,\n view = [],\n item;\n\n if (buffer.offset > skip) {\n buffer.at(buffer.offset - 1);\n }\n\n for (var i = 0; i < take; i++) {\n item = buffer.at(skip + i);\n\n if (item === null) {\n break;\n }\n\n view.push(item);\n }\n\n return view;\n },\n\n total: function() {\n return this._total;\n },\n\n destroy: function() {\n this.buffer.destroy();\n this.unbind();\n }\n });\n\n extend(true, kendo.data, {\n readers: {\n json: DataReader\n },\n Query: Query,\n DataSource: DataSource,\n HierarchicalDataSource: HierarchicalDataSource,\n Node: Node,\n Comparer: Comparer,\n ObservableObject: ObservableObject,\n ObservableArray: ObservableArray,\n LazyObservableArray: LazyObservableArray,\n LocalTransport: LocalTransport,\n RemoteTransport: RemoteTransport,\n Cache: Cache,\n DataReader: DataReader,\n Model: Model,\n Buffer: Buffer,\n BatchBuffer: BatchBuffer\n });\n })(window.kendo.jQuery);\n\n var __meta__$s = {\n id: \"data.signalr\",\n name: \"SignalR\",\n category: \"framework\",\n depends: [ \"data\" ],\n hidden: true\n };\n\n (function($) {\n var kendo = window.kendo;\n var isFunction = kendo.isFunction;\n\n function isJQueryPromise(promise) {\n return promise && isFunction(promise.done) && isFunction(promise.fail);\n }\n\n function isNativePromise(promise) {\n return promise && isFunction(promise.then) && isFunction(promise.catch);\n }\n\n var transport = kendo.data.RemoteTransport.extend({\n init: function(options) {\n var signalr = options && options.signalr ? options.signalr : {};\n\n var promise = signalr.promise;\n\n if (!promise) {\n throw new Error('The \"promise\" option must be set.');\n }\n\n if (!isJQueryPromise(promise) && !isNativePromise(promise)) {\n throw new Error('The \"promise\" option must be a Promise.');\n }\n\n this.promise = promise;\n\n var hub = signalr.hub;\n\n if (!hub) {\n throw new Error('The \"hub\" option must be set.');\n }\n\n if (typeof hub.on != \"function\" || typeof hub.invoke != \"function\") {\n throw new Error('The \"hub\" option is not a valid SignalR hub proxy.');\n }\n\n this.hub = hub;\n\n kendo.data.RemoteTransport.fn.init.call(this, options);\n },\n\n push: function(callbacks) {\n var client = this.options.signalr.client || {};\n\n if (client.create) {\n this.hub.on(client.create, callbacks.pushCreate);\n }\n\n if (client.update) {\n this.hub.on(client.update, callbacks.pushUpdate);\n }\n\n if (client.destroy) {\n this.hub.on(client.destroy, callbacks.pushDestroy);\n }\n },\n\n _crud: function(options, type) {\n var hub = this.hub;\n var promise = this.promise;\n var server = this.options.signalr.server;\n\n if (!server || !server[type]) {\n throw new Error(kendo.format('The \"server.{0}\" option must be set.', type));\n }\n\n var args = [server[type]];\n\n var data = this.parameterMap(options.data, type);\n\n if (!$.isEmptyObject(data)) {\n args.push(data);\n }\n\n if (isJQueryPromise(promise)) {\n promise.done(function() {\n hub.invoke.apply(hub, args)\n .done(options.success)\n .fail(options.error);\n });\n } else if (isNativePromise(promise)) {\n promise.then(function() {\n hub.invoke.apply(hub, args)\n .then(options.success)\n .catch(options.error);\n });\n }\n },\n\n read: function(options) {\n this._crud(options, \"read\");\n },\n\n create: function(options) {\n this._crud(options, \"create\");\n },\n\n update: function(options) {\n this._crud(options, \"update\");\n },\n\n destroy: function(options) {\n this._crud(options, \"destroy\");\n }\n });\n\n $.extend(true, kendo.data, {\n transports: {\n signalr: transport\n }\n });\n\n })(window.kendo.jQuery);\n\n var __meta__$r = {\n id: \"binder\",\n name: \"MVVM\",\n category: \"framework\",\n description: \"Model View ViewModel (MVVM) is a design pattern which helps developers separate the Model (the data) from the View (the UI).\",\n depends: [ \"core\", \"data\" ]\n };\n\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n Observable = kendo.Observable,\n ObservableObject = kendo.data.ObservableObject,\n ObservableArray = kendo.data.ObservableArray,\n toString = {}.toString,\n binders = {},\n Class = kendo.Class,\n VALUE = \"value\",\n SOURCE = \"source\",\n EVENTS = \"events\",\n CHECKED = \"checked\",\n CSS = \"css\",\n deleteExpando = true,\n FUNCTION = \"function\",\n CHANGE = \"change\";\n\n (function() {\n var a = document.createElement(\"a\");\n\n try {\n delete a.test;\n } catch (e) {\n deleteExpando = false;\n }\n })();\n\n var Binding = Observable.extend( {\n init: function(parents, path) {\n var that = this;\n\n Observable.fn.init.call(that);\n\n that.source = parents[0];\n that.parents = parents;\n that.path = path;\n that.dependencies = {};\n that.dependencies[path] = true;\n that.observable = that.source instanceof Observable;\n\n that._access = function(e) {\n that.dependencies[e.field] = true;\n };\n\n if (that.observable) {\n that._change = function(e) {\n that.change(e);\n };\n\n that.source.bind(CHANGE, that._change);\n }\n },\n\n _parents: function() {\n var parents = this.parents;\n var value = this.get();\n\n if (value && typeof value.parent == \"function\") {\n var parent = value.parent();\n\n if ($.inArray(parent, parents) < 0) {\n parents = [parent].concat(parents);\n }\n }\n\n return parents;\n },\n\n change: function(e) {\n var dependency,\n ch,\n field = e.field,\n that = this;\n\n if (that.path === \"this\") {\n that.trigger(CHANGE, e);\n } else {\n for (dependency in that.dependencies) {\n if (dependency.indexOf(field) === 0) {\n ch = dependency.charAt(field.length);\n\n if (!ch || ch === \".\" || ch === \"[\") {\n that.trigger(CHANGE, e);\n break;\n }\n }\n }\n }\n },\n\n start: function(source) {\n source.bind(\"get\", this._access);\n },\n\n stop: function(source) {\n source.unbind(\"get\", this._access);\n },\n\n get: function() {\n\n var that = this,\n source = that.source,\n index = 0,\n path = that.path,\n result = source;\n\n if (!that.observable) {\n return result;\n }\n\n that.start(that.source);\n\n result = source.get(path);\n\n // Traverse the observable hierarchy if the binding is not resolved at the current level.\n while (result === undefined$1 && source) {\n\n source = that.parents[++index];\n\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n\n // second pass try to get the parent from the object hierarchy\n if (result === undefined$1) {\n source = that.source; //get the initial source\n\n while (result === undefined$1 && source) {\n source = source.parent();\n\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n }\n\n // If the result is a function - invoke it\n if (typeof result === \"function\") {\n index = path.lastIndexOf(\".\");\n\n // If the function is a member of a nested observable object make that nested observable the context (this) of the function\n if (index > 0) {\n source = source.get(path.substring(0, index));\n }\n\n // Invoke the function\n that.start(source);\n\n if (source !== that.source) {\n result = result.call(source, that.source);\n } else {\n result = result.call(source);\n }\n\n that.stop(source);\n }\n\n // If the binding is resolved by a parent object\n if (source && source !== that.source) {\n\n that.currentSource = source; // save parent object\n\n // Listen for changes in the parent object\n source.unbind(CHANGE, that._change)\n .bind(CHANGE, that._change);\n }\n\n that.stop(that.source);\n\n return result;\n },\n\n set: function(value) {\n var source = this.currentSource || this.source;\n\n var field = kendo.getter(this.path)(source);\n\n if (typeof field === \"function\") {\n if (source !== this.source) {\n field.call(source, this.source, value);\n } else {\n field.call(source, value);\n }\n } else {\n source.set(this.path, value);\n }\n },\n\n destroy: function() {\n if (this.observable) {\n this.source.unbind(CHANGE, this._change);\n if (this.currentSource) {\n this.currentSource.unbind(CHANGE, this._change);\n }\n }\n\n this.unbind();\n }\n });\n\n var EventBinding = Binding.extend( {\n get: function() {\n var source = this.source,\n path = this.path,\n index = 0,\n handler;\n\n handler = source.get(path);\n\n while (!handler && source) {\n source = this.parents[++index];\n\n if (source instanceof ObservableObject) {\n handler = source.get(path);\n }\n }\n\n if (!handler) {\n return;\n }\n\n return handler.bind(source);\n }\n });\n\n var TemplateBinding = Binding.extend( {\n init: function(source, path, template) {\n var that = this;\n\n Binding.fn.init.call(that, source, path);\n\n that.template = template;\n },\n\n render: function(value) {\n var html;\n\n this.start(this.source);\n\n html = kendo.render(this.template, value);\n\n this.stop(this.source);\n\n return html;\n }\n });\n\n var Binder = Class.extend({\n init: function(element, bindings, options) {\n this.element = element;\n this.bindings = bindings;\n this.options = options;\n },\n\n bind: function(binding, attribute) {\n var that = this;\n\n binding = attribute ? binding[attribute] : binding;\n\n binding.bind(CHANGE, function(e) {\n that.refresh(attribute || e);\n });\n\n that.refresh(attribute);\n },\n\n destroy: function() {\n }\n });\n\n var TypedBinder = Binder.extend({\n dataType: function() {\n var dataType = this.element.getAttribute(\"data-\" + kendo.ns + \"type\") || this.element.type || \"text\";\n return dataType.toLowerCase();\n },\n\n parsedValue: function() {\n return this._parseValue(this.element.value, this.dataType());\n },\n\n _parseValue: function(value, dataType) {\n if (dataType == \"date\") {\n value = kendo.parseDate(value, \"yyyy-MM-dd\");\n } else if (dataType == \"datetime-local\") {\n value = kendo.parseDate(value, [\"yyyy-MM-ddTHH:mm:ss\", \"yyyy-MM-ddTHH:mm\"] );\n } else if (dataType == \"number\") {\n value = kendo.parseFloat(value);\n } else if (dataType == \"boolean\") {\n value = value.toLowerCase();\n if (kendo.parseFloat(value) !== null) {\n value = Boolean(kendo.parseFloat(value));\n } else {\n value = (value.toLowerCase() === \"true\");\n }\n }\n return value;\n }\n });\n\n binders.attr = Binder.extend({\n refresh: function(key) {\n this.element.setAttribute(key, this.bindings.attr[key].get());\n }\n });\n\n binders.css = Binder.extend({\n init: function(element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.classes = {};\n },\n refresh: function(className) {\n var element = $(this.element),\n binding = this.bindings.css[className],\n hasClass = this.classes[className] = binding.get();\n if (hasClass) {\n element.addClass(className);\n } else {\n element.removeClass(className);\n }\n }\n });\n\n binders.style = Binder.extend({\n refresh: function(key) {\n this.element.style[key] = this.bindings.style[key].get() || \"\";\n }\n });\n\n binders.enabled = Binder.extend({\n refresh: function() {\n if (this.bindings.enabled.get()) {\n this.element.removeAttribute(\"disabled\");\n } else {\n this.element.setAttribute(\"disabled\", \"disabled\");\n }\n }\n });\n\n binders.readonly = Binder.extend({\n refresh: function() {\n if (this.bindings.readonly.get()) {\n this.element.setAttribute(\"readonly\", \"readonly\");\n } else {\n this.element.removeAttribute(\"readonly\");\n }\n }\n });\n\n binders.disabled = Binder.extend({\n refresh: function() {\n if (this.bindings.disabled.get()) {\n this.element.setAttribute(\"disabled\", \"disabled\");\n } else {\n this.element.removeAttribute(\"disabled\");\n }\n }\n });\n\n binders.events = Binder.extend({\n init: function(element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.handlers = {};\n },\n\n refresh: function(key) {\n var element = $(this.element),\n binding = this.bindings.events[key],\n handler = this.handlers[key];\n\n if (handler) {\n element.off(key, handler);\n }\n\n handler = this.handlers[key] = binding.get();\n\n element.on(key, binding.source, handler);\n },\n\n destroy: function() {\n var element = $(this.element),\n handler;\n\n for (handler in this.handlers) {\n element.off(handler, this.handlers[handler]);\n }\n }\n });\n\n binders.text = Binder.extend({\n refresh: function() {\n var text = this.bindings.text.get();\n var dataFormat = this.element.getAttribute(\"data-\" + kendo.ns + \"format\") || \"\";\n if (text == null) {\n text = \"\";\n }\n\n $(this.element).text(kendo.toString(text, dataFormat));\n }\n });\n\n binders.visible = Binder.extend({\n refresh: function() {\n if (this.bindings.visible.get()) {\n this.element.style.display = \"\";\n } else {\n this.element.style.display = \"none\";\n }\n }\n });\n\n binders.invisible = Binder.extend({\n refresh: function() {\n if (!this.bindings.invisible.get()) {\n this.element.style.display = \"\";\n } else {\n this.element.style.display = \"none\";\n }\n }\n });\n\n binders.html = Binder.extend({\n refresh: function() {\n this.element.innerHTML = this.bindings.html.get();\n }\n });\n\n binders.value = TypedBinder.extend({\n init: function(element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n\n this._change = this.change.bind(this);\n this.eventName = options.valueUpdate || CHANGE;\n\n $(this.element).on(this.eventName, this._change);\n\n this._initChange = false;\n },\n\n change: function() {\n this._initChange = this.eventName != CHANGE;\n\n this.bindings[VALUE].set(this.parsedValue());\n\n this._initChange = false;\n },\n\n refresh: function() {\n if (!this._initChange) {\n var value = this.bindings[VALUE].get();\n\n if (value == null) {\n value = \"\";\n }\n\n var type = this.dataType();\n\n if (type == \"date\") {\n value = kendo.toString(value, \"yyyy-MM-dd\");\n } else if (type == \"datetime-local\") {\n value = kendo.toString(value, \"yyyy-MM-ddTHH:mm:ss\");\n }\n\n this.element.value = value;\n }\n\n this._initChange = false;\n },\n\n destroy: function() {\n $(this.element).off(this.eventName, this._change);\n }\n });\n\n binders.source = Binder.extend({\n init: function(element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n\n var source = this.bindings.source.get();\n\n if (source instanceof kendo.data.DataSource && options.autoBind !== false) {\n source.fetch();\n }\n },\n\n refresh: function(e) {\n var that = this,\n source = that.bindings.source.get();\n\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n\n if (e.action == \"add\") {\n that.add(e.index, e.items);\n } else if (e.action == \"remove\") {\n that.remove(e.index, e.items);\n } else if (e.action != \"itemchange\") {\n that.render();\n }\n } else {\n that.render();\n }\n },\n\n container: function() {\n var element = this.element;\n\n if (element.nodeName.toLowerCase() == \"table\") {\n if (!element.tBodies[0]) {\n element.appendChild(document.createElement(\"tbody\"));\n }\n element = element.tBodies[0];\n }\n\n return element;\n },\n\n template: function() {\n var options = this.options,\n template = options.template,\n nodeName = this.container().nodeName.toLowerCase();\n\n if (!template) {\n if (nodeName == \"select\") {\n if (options.valueField || options.textField) {\n template = kendo.format('',\n options.valueField || options.textField, options.textField || options.valueField);\n } else {\n template = \"\";\n }\n } else if (nodeName == \"tbody\") {\n template = \"#:data#\";\n } else if (nodeName == \"ul\" || nodeName == \"ol\") {\n template = \"
  • #:data#
  • \";\n } else {\n template = \"#:data#\";\n }\n template = kendo.template(template);\n }\n\n return template;\n },\n\n add: function(index, items) {\n var element = this.container(),\n parents,\n idx,\n length,\n child,\n clone = element.cloneNode(false),\n reference = element.children[index];\n\n $(clone).html(kendo.render(this.template(), items));\n\n if (clone.children.length) {\n parents = this.bindings.source._parents();\n\n for (idx = 0, length = items.length; idx < length; idx++) {\n child = clone.children[0];\n element.insertBefore(child, reference || null);\n bindElement(child, items[idx], this.options.roles, [items[idx]].concat(parents));\n }\n }\n },\n\n remove: function(index, items) {\n var idx, element = this.container();\n\n for (idx = 0; idx < items.length; idx++) {\n var child = element.children[index];\n unbindElementTree(child, true);\n if (child.parentNode == element) {\n element.removeChild(child);\n }\n }\n },\n\n render: function() {\n var source = this.bindings.source.get(),\n parents,\n idx,\n length,\n element = this.container(),\n template = this.template();\n\n if (source == null) {\n return;\n }\n\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n\n if (!(source instanceof ObservableArray) && toString.call(source) !== \"[object Array]\") {\n source = [source];\n }\n\n if (this.bindings.template) {\n unbindElementChildren(element, true);\n\n $(element).html(this.bindings.template.render(source));\n\n if (element.children.length) {\n parents = this.bindings.source._parents();\n\n for (idx = 0, length = source.length; idx < length; idx++) {\n bindElement(element.children[idx], source[idx], this.options.roles, [source[idx]].concat(parents));\n }\n }\n } else {\n $(element).html(kendo.render(template, source));\n }\n }\n });\n\n binders.input = {\n checked: TypedBinder.extend({\n init: function(element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = this.change.bind(this);\n\n $(this.element).change(this._change);\n },\n\n change: function() {\n var element = this.element;\n var value = this.value();\n\n if (element.type == \"radio\") {\n value = this.parsedValue();\n this.bindings[CHECKED].set(value);\n } else if (element.type == \"checkbox\") {\n var source = this.bindings[CHECKED].get();\n var index;\n\n if (source instanceof ObservableArray) {\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n if (index > -1) {\n source.splice(index, 1);\n } else {\n source.push(value);\n }\n } else {\n this.bindings[CHECKED].set(value);\n }\n }\n },\n\n refresh: function() {\n var value = this.bindings[CHECKED].get(),\n source = value,\n type = this.dataType(),\n element = this.element;\n\n if (element.type == \"checkbox\") {\n if (source instanceof ObservableArray) {\n var index = -1;\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n element.checked = (index >= 0);\n } else {\n element.checked = source;\n }\n } else if (element.type == \"radio\") {\n if (type == \"date\") {\n value = kendo.toString(value, \"yyyy-MM-dd\");\n } else if (type == \"datetime-local\") {\n value = kendo.toString(value, \"yyyy-MM-ddTHH:mm:ss\");\n }\n\n if (value !== null && typeof(value) !== \"undefined\" && element.value === value.toString()) {\n element.checked = true;\n } else {\n element.checked = false;\n }\n }\n },\n\n value: function() {\n var element = this.element,\n value = element.value;\n\n if (element.type == \"checkbox\") {\n value = element.checked;\n }\n\n return value;\n },\n destroy: function() {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n\n binders.select = {\n source: binders.source.extend({\n refresh: function(e) {\n var that = this,\n source = that.bindings.source.get();\n\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n if (e.action == \"add\") {\n that.add(e.index, e.items);\n } else if (e.action == \"remove\") {\n that.remove(e.index, e.items);\n } else if (e.action == \"itemchange\" || e.action === undefined$1) {\n that.render();\n if (that.bindings.value) {\n if (that.bindings.value) {\n var val = retrievePrimitiveValues(that.bindings.value.get(), $(that.element).data(\"valueField\"));\n if (val === null) {\n that.element.selectedIndex = -1;\n } else {\n that.element.value = val;\n }\n }\n }\n }\n } else {\n that.render();\n }\n }\n }),\n value: TypedBinder.extend({\n init: function(target, bindings, options) {\n TypedBinder.fn.init.call(this, target, bindings, options);\n\n this._change = this.change.bind(this);\n $(this.element).change(this._change);\n },\n\n parsedValue: function() {\n var dataType = this.dataType();\n var values = [];\n var value, option, idx, length;\n for (idx = 0, length = this.element.options.length; idx < length; idx++) {\n option = this.element.options[idx];\n\n if (option.selected) {\n value = option.attributes.value;\n\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n\n values.push(this._parseValue(value, dataType));\n }\n }\n return values;\n },\n\n change: function() {\n var values = [],\n element = this.element,\n source,\n field = this.options.valueField || this.options.textField,\n valuePrimitive = this.options.valuePrimitive,\n option,\n valueIndex,\n value,\n idx,\n length;\n\n for (idx = 0, length = element.options.length; idx < length; idx++) {\n option = element.options[idx];\n\n if (option.selected) {\n value = option.attributes.value;\n\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n\n if (field) {\n values.push(value);\n } else {\n values.push(this._parseValue(value, this.dataType()));\n }\n\n }\n }\n\n if (field) {\n source = this.bindings.source.get();\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n\n for (valueIndex = 0; valueIndex < values.length; valueIndex++) {\n for (idx = 0, length = source.length; idx < length; idx++) {\n var sourceValue = source[idx].get(field);\n var match = (String(sourceValue) === values[valueIndex]);\n if (match) {\n values[valueIndex] = source[idx];\n break;\n }\n }\n }\n }\n\n value = this.bindings[VALUE].get();\n if (value instanceof ObservableArray) {\n value.splice.apply(value, [0, value.length].concat(values));\n } else if (!valuePrimitive && (value instanceof ObservableObject || value === null || value === undefined$1 || !field)) {\n this.bindings[VALUE].set(values[0]);\n } else {\n this.bindings[VALUE].set(values[0].get(field));\n }\n },\n refresh: function() {\n var optionIndex,\n element = this.element,\n options = element.options,\n value = this.bindings[VALUE].get(),\n values = value,\n field = this.options.valueField || this.options.textField,\n found = false,\n type = this.dataType(),\n optionValue;\n\n if (!(values instanceof ObservableArray)) {\n values = new ObservableArray([value]);\n }\n\n element.selectedIndex = -1;\n\n for (var valueIndex = 0; valueIndex < values.length; valueIndex++) {\n value = values[valueIndex];\n\n\n if (field && value instanceof ObservableObject) {\n value = value.get(field);\n }\n\n if (type == \"date\") {\n value = kendo.toString(values[valueIndex], \"yyyy-MM-dd\");\n } else if (type == \"datetime-local\") {\n value = kendo.toString(values[valueIndex], \"yyyy-MM-ddTHH:mm:ss\");\n }\n\n for (optionIndex = 0; optionIndex < options.length; optionIndex++) {\n optionValue = options[optionIndex].value;\n\n if (optionValue === \"\" && value !== \"\") {\n optionValue = options[optionIndex].text;\n }\n\n if (value != null && optionValue == value.toString()) {\n options[optionIndex].selected = true;\n found = true;\n }\n }\n }\n },\n destroy: function() {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n\n function dataSourceBinding(bindingName, fieldName, setter) {\n return Binder.extend({\n init: function(widget, bindings, options) {\n var that = this;\n\n Binder.fn.init.call(that, widget.element[0], bindings, options);\n\n that.widget = widget;\n that._dataBinding = that.dataBinding.bind(that);\n that._dataBound = that.dataBound.bind(that);\n that._itemChange = that.itemChange.bind(that);\n },\n\n itemChange: function(e) {\n bindElement(e.item[0], e.data, this._ns(e.ns), [e.data].concat(this.bindings[bindingName]._parents()));\n },\n\n dataBinding: function(e) {\n var idx,\n length,\n widget = this.widget,\n items = e.removedItems || widget.items();\n\n for (idx = 0, length = items.length; idx < length; idx++) {\n unbindElementTree(items[idx], false);\n }\n },\n\n _ns: function(ns) {\n ns = ns || kendo.ui;\n var all = [ kendo.ui, kendo.dataviz.ui, kendo.mobile.ui ];\n all.splice($.inArray(ns, all), 1);\n all.unshift(ns);\n\n return kendo.rolesFromNamespaces(all);\n },\n\n dataBound: function(e) {\n var idx,\n length,\n widget = this.widget,\n items = e.addedItems || widget.items(),\n dataSource = widget[fieldName],\n view,\n parents,\n hds = kendo.data.HierarchicalDataSource;\n\n if (hds && dataSource instanceof hds) {\n // suppress binding of HDS items, because calling view() on root\n // will return only root items, and widget.items() returns all items\n return;\n }\n\n if (items.length) {\n view = e.addedDataItems || dataSource.flatView();\n parents = this.bindings[bindingName]._parents();\n\n for (idx = 0, length = view.length; idx < length; idx++) {\n if (items[idx]) {\n bindElement(items[idx], view[idx], this._ns(e.ns), [view[idx]].concat(parents));\n }\n }\n }\n },\n\n refresh: function(e) {\n var that = this,\n source,\n widget = that.widget,\n select, multiselect, dropdowntree;\n\n e = e || {};\n\n if (!e.action) {\n that.destroy();\n\n widget.bind(\"dataBinding\", that._dataBinding);\n widget.bind(\"dataBound\", that._dataBound);\n widget.bind(\"itemChange\", that._itemChange);\n\n source = that.bindings[bindingName].get();\n\n if (widget[fieldName] instanceof kendo.data.DataSource && widget[fieldName] != source) {\n if (source instanceof kendo.data.DataSource) {\n widget[setter](source);\n } else if (source && source._dataSource) {\n widget[setter](source._dataSource);\n } else {\n select = kendo.ui.Select && widget instanceof kendo.ui.Select;\n multiselect = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect;\n dropdowntree = kendo.ui.DropDownTree && widget instanceof kendo.ui.DropDownTree;\n\n if (!dropdowntree) {\n widget[fieldName].data(source);\n } else {\n widget.treeview[fieldName].data(source);\n }\n\n if (that.bindings.value && (select || multiselect)) {\n widget.value(retrievePrimitiveValues(that.bindings.value.get(), widget.options.dataValueField));\n }\n }\n }\n }\n },\n\n destroy: function() {\n var widget = this.widget;\n\n widget.unbind(\"dataBinding\", this._dataBinding);\n widget.unbind(\"dataBound\", this._dataBound);\n widget.unbind(\"itemChange\", this._itemChange);\n }\n });\n }\n\n binders.widget = {\n events: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this.handlers = {};\n },\n\n refresh: function(key) {\n var binding = this.bindings.events[key],\n handler = this.handlers[key];\n\n if (handler) {\n this.widget.unbind(key, handler);\n }\n\n handler = binding.get();\n\n this.handlers[key] = function(e) {\n e.data = binding.source;\n\n handler(e);\n\n if (e.data === binding.source) {\n delete e.data;\n }\n };\n\n this.widget.bind(key, this.handlers[key]);\n },\n\n destroy: function() {\n var handler;\n\n for (handler in this.handlers) {\n this.widget.unbind(handler, this.handlers[handler]);\n }\n }\n }),\n\n checked: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n this._change = this.change.bind(this);\n this.widget.bind(CHANGE, this._change);\n },\n change: function() {\n this.bindings[CHECKED].set(this.value());\n },\n\n refresh: function() {\n if (this.element.type === \"radio\") {\n this.widget.check(this.bindings[CHECKED].get().toString() === this.value());\n } else {\n this.widget.check(this.bindings[CHECKED].get() === true);\n }\n },\n\n value: function() {\n var element = this.element,\n value = element.value;\n\n if (value == \"on\" || value == \"off\" || this.element.type == \"checkbox\") {\n value = element.checked;\n }\n\n return value;\n },\n\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n\n start: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this._change = this.change.bind(this);\n this.widget = widget;\n this.widget.bind(CHANGE, this._change);\n },\n\n change: function() {\n this.bindings.start.set(this.widget.range().start);\n },\n\n refresh: function() {\n var that = this;\n var start = this.bindings.start.get();\n var end = that.widget._range ? that.widget._range.end : null;\n this.widget.range({ start: start, end: end });\n },\n\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n\n end: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this._change = this.change.bind(this);\n this.widget = widget;\n this.widget.bind(CHANGE, this._change);\n },\n\n change: function() {\n this.bindings.end.set(this.widget.range().end);\n },\n\n refresh: function() {\n var that = this;\n var end = this.bindings.end.get();\n var start = that.widget._range ? that.widget._range.start : null;\n this.widget.range({ start: start, end: end });\n },\n\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n\n visible: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n },\n\n refresh: function() {\n var visible = this.bindings.visible.get();\n this.widget.wrapper[0].style.display = visible ? \"\" : \"none\";\n }\n }),\n\n invisible: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n },\n\n refresh: function() {\n var invisible = this.bindings.invisible.get();\n this.widget.wrapper[0].style.display = invisible ? \"none\" : \"\";\n }\n }),\n\n floatingLabel: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n if (!widget.floatingLabel) {\n return;\n }\n\n widget.floatingLabel.refresh();\n }\n }),\n\n enabled: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n },\n\n refresh: function() {\n if (this.widget.enable) {\n this.widget.enable(this.bindings.enabled.get());\n }\n }\n }),\n\n disabled: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n },\n\n refresh: function() {\n if (this.widget.enable) {\n this.widget.enable(!this.bindings.disabled.get());\n }\n }\n }),\n\n source: dataSourceBinding(\"source\", \"dataSource\", \"setDataSource\"),\n\n value: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n this._change = this.change.bind(this);\n this.widget.first(CHANGE, this._change);\n\n var value = this.bindings.value.get();\n\n this._valueIsObservableObject = !options.valuePrimitive && (value == null || value instanceof ObservableObject);\n this._valueIsObservableArray = value instanceof ObservableArray;\n this._initChange = false;\n },\n\n _source: function() {\n var source;\n\n if (this.widget.dataItem) {\n source = this.widget.dataItem();\n if (source && source instanceof ObservableObject) {\n return [source];\n }\n }\n\n if (this.bindings.source) {\n source = this.bindings.source.get();\n }\n\n if (!source || source instanceof kendo.data.DataSource) {\n source = this.widget.dataSource.flatView();\n }\n\n return source;\n },\n\n change: function() {\n var value = this.widget.value(),\n field = this.options.dataValueField || this.options.dataTextField,\n isArray = toString.call(value) === \"[object Array]\",\n isObservableObject = this._valueIsObservableObject,\n valueIndex, valueLength, values = [],\n sourceItem, sourceValue,\n idx, length, source;\n\n this._initChange = true;\n\n if (field) {\n\n if (value === \"\" && (isObservableObject || this.options.valuePrimitive)) {\n value = null;\n } else {\n source = this._source();\n\n if (isArray) {\n valueLength = value.length;\n values = value.slice(0);\n }\n\n for (idx = 0, length = source.length; idx < length; idx++) {\n sourceItem = source[idx];\n sourceValue = sourceItem.get(field);\n\n if (isArray) {\n for (valueIndex = 0; valueIndex < valueLength; valueIndex++) {\n if (sourceValue == values[valueIndex]) {\n values[valueIndex] = sourceItem;\n break;\n }\n }\n } else if (sourceValue == value) {\n value = isObservableObject ? sourceItem : sourceValue;\n break;\n }\n }\n\n if (values[0]) {\n if (this._valueIsObservableArray) {\n value = values;\n } else if (isObservableObject || !field) {\n value = values[0];\n } else {\n value = values[0].get(field);\n }\n }\n }\n }\n\n this.bindings.value.set(value);\n this._initChange = false;\n },\n\n refresh: function() {\n if (!this._initChange) {\n var widget = this.widget;\n var options = widget.options;\n var textField = options.dataTextField;\n var valueField = options.dataValueField || textField;\n var value = this.bindings.value.get();\n var text = options.text || \"\";\n var idx = 0, length;\n var values = [];\n\n if (value === undefined$1) {\n value = null;\n }\n\n if (valueField) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n values[idx] = value[idx].get(valueField);\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n text = value.get(textField);\n value = value.get(valueField);\n }\n }\n\n if (options.autoBind === false && !options.cascadeFrom && widget.listView && !widget.listView.bound()) {\n if (textField === valueField && !text) {\n text = value;\n }\n\n if (!text && (value || value === 0) && options.valuePrimitive) {\n widget.value(value);\n } else {\n widget._preselect(value, text);\n }\n } else {\n widget.value(value);\n }\n }\n\n this._initChange = false;\n },\n\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n dropdowntree: {\n value: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n this._change = this.change.bind(this);\n this.widget.first(CHANGE, this._change);\n this._initChange = false;\n },\n\n change: function() {\n var that = this,\n oldValues = that.bindings[VALUE].get(),\n valuePrimitive = that.options.valuePrimitive,\n selectedNode = that.widget.treeview.select(),\n nonPrimitiveValues = that.widget._isMultipleSelection() ? that.widget._getAllChecked() : (that.widget.treeview.dataItem(selectedNode) || that.widget.value()),\n newValues = (valuePrimitive || that.widget.options.autoBind === false) ? that.widget.value() : nonPrimitiveValues;\n\n var field = this.options.dataValueField || this.options.dataTextField;\n\n newValues = newValues.slice ? newValues.slice(0) : newValues;\n\n that._initChange = true;\n\n if (oldValues instanceof ObservableArray) {\n var remove = [];\n var newLength = newValues.length;\n var i = 0, j = 0;\n var old = oldValues[i];\n var same = false;\n var removeIndex;\n var newValue;\n var found;\n\n while (old !== undefined$1) {\n found = false;\n for (j = 0; j < newLength; j++) {\n if (valuePrimitive) {\n same = newValues[j] == old;\n } else {\n newValue = newValues[j];\n\n newValue = newValue.get ? newValue.get(field) : newValue;\n same = newValue == (old.get ? old.get(field) : old);\n }\n\n if (same) {\n newValues.splice(j, 1);\n newLength -= 1;\n found = true;\n break;\n }\n }\n\n if (!found) {\n remove.push(old);\n arraySplice(oldValues, i, 1);\n removeIndex = i;\n } else {\n i += 1;\n }\n\n old = oldValues[i];\n }\n\n arraySplice(oldValues, oldValues.length, 0, newValues);\n\n if (remove.length) {\n oldValues.trigger(\"change\", {\n action: \"remove\",\n items: remove,\n index: removeIndex\n });\n }\n\n if (newValues.length) {\n oldValues.trigger(\"change\", {\n action: \"add\",\n items: newValues,\n index: oldValues.length - 1\n });\n }\n } else {\n that.bindings[VALUE].set(newValues);\n }\n\n that._initChange = false;\n },\n\n refresh: function() {\n if (!this._initChange) {\n var options = this.options,\n widget = this.widget,\n field = options.dataValueField || options.dataTextField,\n value = this.bindings.value.get(),\n data = value,\n idx = 0, length,\n values = [],\n selectedValue;\n\n if (field) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n selectedValue = value[idx];\n values[idx] = selectedValue.get ? selectedValue.get(field) : selectedValue;\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(field);\n }\n }\n if (options.autoBind === false && options.valuePrimitive !== true) {\n widget._preselect(data, value);\n } else {\n widget.value(value);\n }\n }\n },\n\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\n })\n },\n gantt: {\n dependencies: dataSourceBinding(\"dependencies\", \"dependencies\", \"setDependenciesDataSource\")\n },\n\n multiselect: {\n value: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n this._change = this.change.bind(this);\n this.widget.first(CHANGE, this._change);\n this._initChange = false;\n },\n\n change: function() {\n var that = this,\n oldValues = that.bindings[VALUE].get(),\n valuePrimitive = that.options.valuePrimitive,\n newValues = valuePrimitive ? that.widget.value() : that.widget.dataItems();\n\n var field = this.options.dataValueField || this.options.dataTextField;\n\n newValues = newValues.slice(0);\n\n that._initChange = true;\n\n if (oldValues instanceof ObservableArray) {\n var remove = [];\n\n var newLength = newValues.length;\n\n var i = 0, j = 0;\n var old = oldValues[i];\n var same = false;\n var removeIndex;\n var newValue;\n var found;\n\n while (old !== undefined$1) {\n found = false;\n for (j = 0; j < newLength; j++) {\n if (valuePrimitive) {\n same = newValues[j] == old;\n } else {\n newValue = newValues[j];\n\n newValue = newValue.get ? newValue.get(field) : newValue;\n same = newValue == (old.get ? old.get(field) : old);\n }\n\n if (same) {\n newValues.splice(j, 1);\n newLength -= 1;\n found = true;\n break;\n }\n }\n\n if (!found) {\n remove.push(old);\n arraySplice(oldValues, i, 1);\n removeIndex = i;\n } else {\n i += 1;\n }\n\n old = oldValues[i];\n }\n\n arraySplice(oldValues, oldValues.length, 0, newValues);\n\n if (remove.length) {\n oldValues.trigger(\"change\", {\n action: \"remove\",\n items: remove,\n index: removeIndex\n });\n }\n\n if (newValues.length) {\n oldValues.trigger(\"change\", {\n action: \"add\",\n items: newValues,\n index: oldValues.length - 1\n });\n }\n } else {\n that.bindings[VALUE].set(newValues);\n }\n\n that._initChange = false;\n },\n\n refresh: function() {\n if (!this._initChange) {\n var options = this.options,\n widget = this.widget,\n field = options.dataValueField || options.dataTextField,\n value = this.bindings.value.get(),\n data = value,\n idx = 0, length,\n values = [],\n selectedValue;\n\n if (value === undefined$1) {\n value = null;\n }\n\n if (field) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n selectedValue = value[idx];\n values[idx] = selectedValue.get ? selectedValue.get(field) : selectedValue;\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(field);\n }\n }\n\n if (options.autoBind === false && options.valuePrimitive !== true && !widget._isBound()) {\n widget._preselect(data, value);\n } else {\n widget.value(value);\n }\n }\n },\n\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\n\n })\n },\n scheduler: {\n source: dataSourceBinding(\"source\", \"dataSource\", \"setDataSource\").extend({\n dataBound: function(e) {\n var idx;\n var length;\n var widget = this.widget;\n var elements = e.addedItems || widget.items();\n var data, parents;\n\n if (elements.length) {\n data = e.addedDataItems || widget.dataItems();\n parents = this.bindings.source._parents();\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n bindElement(elements[idx], data[idx], this._ns(e.ns), [data[idx]].concat(parents));\n }\n }\n }\n })\n },\n\n grid: {\n source: dataSourceBinding(\"source\", \"dataSource\", \"setDataSource\").extend({\n dataBound: function(e) {\n var idx,\n length,\n widget = this.widget,\n elements = e.addedItems || widget.items(),\n parents,\n data;\n\n if (elements.length) {\n data = e.addedDataItems || widget.dataItems();\n parents = this.bindings.source._parents();\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n bindElement(elements[idx], data[idx], this._ns(e.ns), [data[idx]].concat(parents));\n }\n }\n }\n })\n },\n\n badge: {\n text: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n },\n refresh: function() {\n var text = this.bindings.text.get();\n\n if (text == null) {\n text = \"\";\n }\n this.widget.text(text);\n }\n })\n }\n };\n\n var arraySplice = function(arr, idx, remove, add) {\n add = add || [];\n remove = remove || 0;\n\n var addLength = add.length;\n var oldLength = arr.length;\n\n var shifted = [].slice.call(arr, idx + remove);\n var shiftedLength = shifted.length;\n var index;\n\n if (addLength) {\n addLength = idx + addLength;\n index = 0;\n\n for (; idx < addLength; idx++) {\n arr[idx] = add[index];\n index++;\n }\n\n arr.length = addLength;\n } else if (remove) {\n arr.length = idx;\n\n remove += idx;\n while (idx < remove) {\n delete arr[--remove];\n }\n }\n\n if (shiftedLength) {\n shiftedLength = idx + shiftedLength;\n index = 0;\n\n for (; idx < shiftedLength; idx++) {\n arr[idx] = shifted[index];\n index++;\n }\n\n arr.length = shiftedLength;\n }\n\n idx = arr.length;\n\n while (idx < oldLength) {\n delete arr[idx];\n idx++;\n }\n };\n\n var BindingTarget = Class.extend( {\n init: function(target, options) {\n this.target = target;\n this.options = options;\n this.toDestroy = [];\n },\n\n bind: function(bindings) {\n var key,\n hasValue,\n hasSource,\n hasEvents,\n hasChecked,\n hasCss,\n widgetBinding = this instanceof WidgetBindingTarget,\n specificBinders = this.binders();\n\n for (key in bindings) {\n if (key == VALUE) {\n hasValue = true;\n } else if (key == SOURCE) {\n hasSource = true;\n } else if (key == EVENTS && !widgetBinding) {\n hasEvents = true;\n } else if (key == CHECKED) {\n hasChecked = true;\n } else if (key == CSS) {\n hasCss = true;\n } else {\n this.applyBinding(key, bindings, specificBinders);\n }\n }\n if (hasSource) {\n this.applyBinding(SOURCE, bindings, specificBinders);\n }\n\n if (hasValue) {\n this.applyBinding(VALUE, bindings, specificBinders);\n }\n\n if (hasChecked) {\n this.applyBinding(CHECKED, bindings, specificBinders);\n }\n\n if (hasEvents && !widgetBinding) {\n this.applyBinding(EVENTS, bindings, specificBinders);\n }\n\n if (hasCss && !widgetBinding) {\n this.applyBinding(CSS, bindings, specificBinders);\n }\n\n if (widgetBinding && this.target && this.target.floatingLabel) {\n this.applyBinding(\"floatingLabel\", bindings, specificBinders);\n }\n },\n\n binders: function() {\n return binders[this.target.nodeName.toLowerCase()] || {};\n },\n\n applyBinding: function(name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders[name],\n toDestroy = this.toDestroy,\n attribute,\n binding = bindings[name];\n\n if (binder) {\n binder = new binder(this.target, bindings, this.options);\n\n toDestroy.push(binder);\n\n if (binding instanceof Binding) {\n binder.bind(binding);\n toDestroy.push(binding);\n } else {\n for (attribute in binding) {\n binder.bind(binding, attribute);\n toDestroy.push(binding[attribute]);\n }\n }\n } else if (name !== \"template\") {\n throw new Error(\"The \" + name + \" binding is not supported by the \" + this.target.nodeName.toLowerCase() + \" element\");\n }\n },\n\n destroy: function() {\n var idx,\n length,\n toDestroy = this.toDestroy;\n\n for (idx = 0, length = toDestroy.length; idx < length; idx++) {\n toDestroy[idx].destroy();\n }\n }\n });\n\n var WidgetBindingTarget = BindingTarget.extend( {\n binders: function() {\n return binders.widget[this.target.options.name.toLowerCase()] || {};\n },\n\n applyBinding: function(name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders.widget[name],\n toDestroy = this.toDestroy,\n attribute,\n binding = bindings[name];\n\n if (binder) {\n binder = new binder(this.target, bindings, this.target.options);\n\n toDestroy.push(binder);\n\n\n if (binding instanceof Binding) {\n binder.bind(binding);\n toDestroy.push(binding);\n } else {\n for (attribute in binding) {\n binder.bind(binding, attribute);\n toDestroy.push(binding[attribute]);\n }\n }\n } else {\n throw new Error(\"The \" + name + \" binding is not supported by the \" + this.target.options.name + \" widget\");\n }\n }\n });\n\n function bindingTargetForRole(element, roles) {\n var widget = kendo.initWidget(element, {}, roles);\n\n if (widget) {\n return new WidgetBindingTarget(widget);\n }\n }\n\n var keyValueRegExp = /[A-Za-z0-9_\\-]+:(\\{([^}]*)\\}|[^,}]+)/g,\n whiteSpaceRegExp = /\\s/g;\n\n function parseBindings(bind) {\n var result = {},\n idx,\n length,\n token,\n colonIndex,\n key,\n value,\n tokens;\n\n tokens = bind.match(keyValueRegExp);\n\n for (idx = 0, length = tokens.length; idx < length; idx++) {\n token = tokens[idx];\n colonIndex = token.indexOf(\":\");\n\n key = token.substring(0, colonIndex);\n value = token.substring(colonIndex + 1);\n\n if (value.charAt(0) == \"{\") {\n value = parseBindings(value);\n }\n\n result[key] = value;\n }\n\n return result;\n }\n\n function createBindings(bindings, source, type) {\n var binding,\n result = {};\n\n for (binding in bindings) {\n result[binding] = new type(source, bindings[binding]);\n }\n\n return result;\n }\n\n function bindElement(element, source, roles, parents) {\n\n if (!element || element.getAttribute(\"data-\" + kendo.ns + \"stop\")) {\n return;\n }\n\n var role = element.getAttribute(\"data-\" + kendo.ns + \"role\"),\n idx,\n bind = element.getAttribute(\"data-\" + kendo.ns + \"bind\"),\n childrenCopy = [],\n deep = true,\n bindings,\n options = {},\n target;\n\n parents = parents || [source];\n\n if (role || bind) {\n unbindElement(element, false);\n }\n\n if (role) {\n target = bindingTargetForRole(element, roles);\n }\n\n if (bind) {\n bind = parseBindings(bind.replace(whiteSpaceRegExp, \"\"));\n\n if (!target) {\n options = kendo.parseOptions(element, { textField: \"\", valueField: \"\", template: \"\", valueUpdate: CHANGE, valuePrimitive: false, autoBind: true }, source);\n options.roles = roles;\n target = new BindingTarget(element, options);\n }\n\n target.source = source;\n\n bindings = createBindings(bind, parents, Binding);\n\n if (options.template) {\n bindings.template = new TemplateBinding(parents, \"\", options.template);\n }\n\n if (bindings.click) {\n bind.events = bind.events || {};\n bind.events.click = bind.click;\n bindings.click.destroy();\n delete bindings.click;\n }\n\n if (bindings.source) {\n deep = false;\n }\n\n if (bind.attr) {\n bindings.attr = createBindings(bind.attr, parents, Binding);\n }\n\n if (bind.style) {\n bindings.style = createBindings(bind.style, parents, Binding);\n }\n\n if (bind.events) {\n bindings.events = createBindings(bind.events, parents, EventBinding);\n }\n\n if (bind.css) {\n bindings.css = createBindings(bind.css, parents, Binding);\n }\n\n target.bind(bindings);\n }\n\n if (target) {\n element.kendoBindingTarget = target;\n }\n\n var children = element.children;\n if (deep && children && !element.getAttribute(\"data-\" + kendo.ns + \"stop\")) {\n // https://github.com/telerik/kendo/issues/1240 for the weirdness.\n for (idx = 0; idx < children.length; idx++) {\n childrenCopy[idx] = children[idx];\n }\n\n for (idx = 0; idx < childrenCopy.length; idx++) {\n bindElement(childrenCopy[idx], source, roles, parents);\n }\n }\n }\n\n function bind(dom, object) {\n var idx,\n length,\n node,\n roles = kendo.rolesFromNamespaces([].slice.call(arguments, 2));\n\n object = kendo.observable(object);\n dom = $(dom);\n\n for (idx = 0, length = dom.length; idx < length; idx++) {\n node = dom[idx];\n if (node.nodeType === 1) {\n bindElement(node, object, roles);\n }\n }\n }\n\n function unbindElement(element, destroyWidget) {\n var bindingTarget = element.kendoBindingTarget;\n\n if (bindingTarget) {\n bindingTarget.destroy();\n\n if (deleteExpando) {\n delete element.kendoBindingTarget;\n } else if (element.removeAttribute) {\n element.removeAttribute(\"kendoBindingTarget\");\n } else {\n element.kendoBindingTarget = null;\n }\n }\n\n if (destroyWidget) {\n var widget = kendo.widgetInstance($(element));\n if (widget && typeof widget.destroy === FUNCTION) {\n widget.destroy();\n }\n }\n }\n\n function unbindElementTree(element, destroyWidgets) {\n unbindElement(element, destroyWidgets);\n\n unbindElementChildren(element, destroyWidgets);\n }\n\n function unbindElementChildren(element, destroyWidgets) {\n var children = element.children;\n\n if (children) {\n for (var idx = 0, length = children.length; idx < length; idx++) {\n unbindElementTree(children[idx], destroyWidgets);\n }\n }\n }\n\n function unbind(dom) {\n var idx, length;\n\n dom = $(dom);\n\n for (idx = 0, length = dom.length; idx < length; idx++ ) {\n unbindElementTree(dom[idx], false);\n }\n }\n\n function notify(widget, namespace) {\n var element = widget.element,\n bindingTarget = element[0].kendoBindingTarget;\n\n if (bindingTarget) {\n bind(element, bindingTarget.source, namespace);\n }\n }\n\n function retrievePrimitiveValues(value, valueField) {\n var values = [];\n var idx = 0;\n var length;\n var item;\n\n if (!valueField) {\n return value;\n }\n\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n item = value[idx];\n values[idx] = item.get ? item.get(valueField) : item[valueField];\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(valueField);\n }\n\n return value;\n }\n\n kendo.unbind = unbind;\n kendo.bind = bind;\n kendo.data.binders = binders;\n kendo.data.Binder = Binder;\n kendo.notify = notify;\n\n kendo.observable = function(object) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n\n return object;\n };\n\n kendo.observableHierarchy = function(array) {\n var dataSource = kendo.data.HierarchicalDataSource.create(array);\n\n function recursiveRead(data) {\n var i, children;\n\n for (i = 0; i < data.length; i++) {\n data[i]._initChildren();\n\n children = data[i].children;\n\n children.fetch();\n\n data[i].items = children.data();\n\n recursiveRead(data[i].items);\n }\n }\n\n dataSource.fetch();\n\n recursiveRead(dataSource.data());\n\n dataSource._data._dataSource = dataSource;\n\n return dataSource._data;\n };\n\n })(window.kendo.jQuery);\n\n var __meta__$q = {\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 var 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 urlRegExp = /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i,\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 = '';\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 #',\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 = 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 return matcher(input, \"[type=url],[\" + kendo.attr(\"type\") + \"=url]\", urlRegExp);\n },\n date: function(input) {\n if (input.filter(\"[type^=date],[\" + kendo.attr(\"type\") + \"=date]\").length && input.val() !== \"\") {\n return kendo.parseDate(input.val(), input.attr(kendo.attr(\"format\"))) !== null;\n }\n return true;\n },\n 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 (!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 || widgetInstance.options.name == \"Signature\")) {\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)) {\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) {\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\n var __meta__$p = {\n id: \"router\",\n name: \"Router\",\n category: \"framework\",\n description: \"The Router class is responsible for tracking the application state and navigating between the application states.\",\n depends: [ \"core\" ],\n hidden: false\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n CHANGE = \"change\",\n BACK = \"back\",\n SAME = \"same\",\n support = kendo.support,\n location = window.location,\n history = window.history,\n CHECK_URL_INTERVAL = 50,\n BROKEN_BACK_NAV = kendo.support.browser.msie,\n hashStrip = /^#*/,\n document = window.document;\n\n function absoluteURL(path, pathPrefix) {\n if (!pathPrefix) {\n return path;\n }\n\n if (path + \"/\" === pathPrefix) {\n path = pathPrefix;\n }\n\n var regEx = new RegExp(\"^\" + pathPrefix, \"i\");\n\n if (!regEx.test(path)) {\n path = pathPrefix + \"/\" + path;\n }\n\n return location.protocol + '//' + (location.host + \"/\" + path).replace(/\\/\\/+/g, '/');\n }\n\n function hashDelimiter(bang) {\n return bang ? \"#!\" : \"#\";\n }\n\n function locationHash(hashDelimiter) {\n var href = location.href;\n\n // ignore normal anchors if in hashbang mode - however, still return \"\" if no hash present\n if (hashDelimiter === \"#!\" && href.indexOf(\"#\") > -1 && href.indexOf(\"#!\") < 0) {\n return null;\n }\n\n return href.split(hashDelimiter)[1] || \"\";\n }\n\n function stripRoot(root, url) {\n if (url.indexOf(root) === 0) {\n return (url.substr(root.length)).replace(/\\/\\//g, '/');\n } else {\n return url;\n }\n }\n\n var HistoryAdapter = kendo.Class.extend({\n back: function() {\n if (BROKEN_BACK_NAV) {\n setTimeout(function() { history.back(); });\n } else {\n history.back();\n }\n },\n\n forward: function() {\n if (BROKEN_BACK_NAV) {\n setTimeout(function() { history.forward(); });\n } else {\n history.forward();\n }\n },\n\n length: function() {\n return history.length;\n },\n\n replaceLocation: function(url) {\n location.replace(url);\n }\n });\n\n var PushStateAdapter = HistoryAdapter.extend({\n init: function(root) {\n this.root = root;\n },\n\n navigate: function(to) {\n history.pushState({}, document.title, absoluteURL(to, this.root));\n },\n\n replace: function(to) {\n history.replaceState({}, document.title, absoluteURL(to, this.root));\n },\n\n normalize: function(url) {\n return stripRoot(this.root, url);\n },\n\n current: function() {\n var current = location.pathname;\n\n if (location.search) {\n current += location.search;\n }\n\n return stripRoot(this.root, current);\n },\n\n change: function(callback) {\n $(window).bind(\"popstate.kendo\", callback);\n },\n\n stop: function() {\n $(window).unbind(\"popstate.kendo\");\n },\n\n normalizeCurrent: function(options) {\n var fixedUrl,\n root = options.root,\n pathname = location.pathname,\n hash = locationHash(hashDelimiter(options.hashBang));\n\n if (root === pathname + \"/\") {\n fixedUrl = root;\n }\n\n if (root === pathname && hash) {\n fixedUrl = absoluteURL(hash.replace(hashStrip, ''), root);\n }\n\n if (fixedUrl) {\n history.pushState({}, document.title, fixedUrl);\n }\n }\n });\n\n function fixHash(url) {\n return url.replace(/^(#)?/, \"#\");\n }\n\n function fixBang(url) {\n return url.replace(/^(#(!)?)?/, \"#!\");\n }\n\n var HashAdapter = HistoryAdapter.extend({\n init: function(bang) {\n this._id = kendo.guid();\n this.prefix = hashDelimiter(bang);\n this.fix = bang ? fixBang : fixHash;\n },\n\n navigate: function(to) {\n location.hash = this.fix(to);\n },\n\n replace: function(to) {\n this.replaceLocation(this.fix(to));\n },\n\n normalize: function(url) {\n if (url.indexOf(this.prefix) < 0) {\n return url;\n } else {\n return url.split(this.prefix)[1];\n }\n },\n\n change: function(callback) {\n if (support.hashChange) {\n $(window).on(\"hashchange.\" + this._id, callback);\n } else {\n this._interval = setInterval(callback, CHECK_URL_INTERVAL);\n }\n },\n\n stop: function() {\n $(window).off(\"hashchange.\" + this._id);\n clearInterval(this._interval);\n },\n\n current: function() {\n return locationHash(this.prefix);\n },\n\n normalizeCurrent: function(options) {\n var pathname = location.pathname,\n root = options.root;\n\n if (options.pushState && root !== pathname) {\n this.replaceLocation(root + this.prefix + stripRoot(root, pathname));\n return true; // browser will reload at this point.\n }\n\n return false;\n }\n });\n\n var History = kendo.Observable.extend({\n start: function(options) {\n options = options || {};\n\n this.bind([CHANGE, BACK, SAME], options);\n\n if (this._started) {\n return;\n }\n\n this._started = true;\n\n options.root = options.root || \"/\";\n\n var adapter = this.createAdapter(options),\n current;\n\n // adapter may reload the document\n if (adapter.normalizeCurrent(options)) {\n return;\n }\n\n current = adapter.current();\n\n $.extend(this, {\n adapter: adapter,\n root: options.root,\n historyLength: adapter.length(),\n current: current,\n locations: [current]\n });\n\n adapter.change(this._checkUrl.bind(this));\n },\n\n createAdapter: function(options) {\n return support.pushState && options.pushState ? new PushStateAdapter(options.root) : new HashAdapter(options.hashBang);\n },\n\n stop: function() {\n if (!this._started) {\n return;\n }\n this.adapter.stop();\n this.unbind(CHANGE);\n this._started = false;\n },\n\n change: function(callback) {\n this.bind(CHANGE, callback);\n },\n\n replace: function(to, silent) {\n\n this._navigate(to, silent, function(adapter) {\n adapter.replace(to);\n this.locations[this.locations.length - 1] = this.current;\n });\n },\n\n navigate: function(to, silent) {\n if (to === \"#:back\") {\n this.backCalled = true;\n this.adapter.back();\n return;\n }\n\n this._navigate(to, silent, function(adapter) {\n adapter.navigate(to);\n this.locations.push(this.current);\n });\n },\n\n _navigate: function(to, silent, callback) {\n var adapter = this.adapter;\n\n to = adapter.normalize(to);\n\n if (this.current === to || this.current === decodeURIComponent(to)) {\n this.trigger(SAME);\n return;\n }\n\n if (!silent) {\n if (this.trigger(CHANGE, { url: to, decode: false })) {\n return;\n }\n }\n\n this.current = to;\n\n callback.call(this, adapter);\n\n this.historyLength = adapter.length();\n },\n\n _checkUrl: function() {\n var adapter = this.adapter,\n current = adapter.current(),\n newLength = adapter.length(),\n navigatingInExisting = this.historyLength === newLength,\n back = current === this.locations[this.locations.length - 2] && navigatingInExisting,\n backCalled = this.backCalled,\n prev = this.current;\n\n if (current === null || this.current === current || this.current === decodeURIComponent(current)) {\n return true;\n }\n\n this.historyLength = newLength;\n this.backCalled = false;\n\n this.current = current;\n\n if (back && this.trigger(\"back\", { url: prev, to: current })) {\n adapter.forward();\n this.current = prev;\n return;\n }\n\n if (this.trigger(CHANGE, { url: current, backButtonPressed: !backCalled })) {\n if (back) {\n adapter.forward();\n } else {\n adapter.back();\n this.historyLength --;\n }\n this.current = prev;\n return;\n }\n\n if (back) {\n this.locations.pop();\n } else {\n this.locations.push(current);\n }\n }\n });\n\n kendo.History = History;\n kendo.History.HistoryAdapter = HistoryAdapter;\n kendo.History.HashAdapter = HashAdapter;\n kendo.History.PushStateAdapter = PushStateAdapter;\n kendo.absoluteURL = absoluteURL;\n kendo.history = new History();\n })(window.kendo.jQuery);\n\n (function() {\n var kendo = window.kendo,\n history = kendo.history,\n Observable = kendo.Observable,\n INIT = \"init\",\n ROUTE_MISSING = \"routeMissing\",\n CHANGE = \"change\",\n BACK = \"back\",\n SAME = \"same\",\n optionalParam = /\\((.*?)\\)/g,\n namedParam = /(\\(\\?)?:\\w+/g,\n splatParam = /\\*\\w+/g,\n escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n\n function namedParamReplace(match, optional) {\n return optional ? match : '([^\\/]+)';\n }\n\n function routeToRegExp(route, ignoreCase) {\n return new RegExp('^' + route\n .replace(escapeRegExp, '\\\\$&')\n .replace(optionalParam, '(?:$1)?')\n .replace(namedParam, namedParamReplace)\n .replace(splatParam, '(.*?)') + '$', ignoreCase ? \"i\" : \"\");\n }\n\n function stripUrl(url) {\n return url.replace(/(\\?.*)|(#.*)/g, \"\");\n }\n\n var Route = kendo.Class.extend({\n init: function(route, callback, ignoreCase) {\n if (!(route instanceof RegExp)) {\n route = routeToRegExp(route, ignoreCase);\n }\n\n this.route = route;\n this._callback = callback;\n },\n\n callback: function(url, back, decode) {\n var params,\n idx = 0,\n length,\n queryStringParams = kendo.parseQueryStringParams(url);\n queryStringParams._back = back;\n\n url = stripUrl(url);\n params = this.route.exec(url).slice(1);\n length = params.length;\n\n if (decode) {\n for (; idx < length; idx ++) {\n if (typeof params[idx] !== 'undefined') {\n params[idx] = decodeURIComponent(params[idx]);\n }\n }\n }\n\n params.push(queryStringParams);\n\n this._callback.apply(null, params);\n },\n\n worksWith: function(url, back, decode) {\n if (this.route.test(stripUrl(url))) {\n this.callback(url, back, decode);\n return true;\n } else {\n return false;\n }\n }\n });\n\n var Router = Observable.extend({\n init: function(options) {\n if (!options) {\n options = {};\n }\n\n Observable.fn.init.call(this);\n\n this.routes = [];\n this.pushState = options.pushState;\n this.hashBang = options.hashBang;\n this.root = options.root;\n this.ignoreCase = options.ignoreCase !== false;\n\n this.bind([INIT, ROUTE_MISSING, CHANGE, SAME, BACK], options);\n },\n\n destroy: function() {\n history.unbind(CHANGE, this._urlChangedProxy);\n history.unbind(SAME, this._sameProxy);\n history.unbind(BACK, this._backProxy);\n this.unbind();\n },\n\n start: function() {\n var that = this,\n sameProxy = function() { that._same(); },\n backProxy = function(e) { that._back(e); },\n urlChangedProxy = function(e) { that._urlChanged(e); };\n\n history.start({\n same: sameProxy,\n change: urlChangedProxy,\n back: backProxy,\n pushState: that.pushState,\n hashBang: that.hashBang,\n root: that.root\n });\n\n // eslint-disable-next-line no-undef\n var initEventObject = { url: history.current || \"/\", preventDefault: $.noop };\n\n if (!that.trigger(INIT, initEventObject)) {\n that._urlChanged(initEventObject);\n }\n\n this._urlChangedProxy = urlChangedProxy;\n this._backProxy = backProxy;\n },\n\n route: function(route, callback) {\n this.routes.push(new Route(route, callback, this.ignoreCase));\n },\n\n navigate: function(url, silent) {\n kendo.history.navigate(url, silent);\n },\n\n replace: function(url, silent) {\n kendo.history.replace(url, silent);\n },\n\n _back: function(e) {\n if (this.trigger(BACK, { url: e.url, to: e.to })) {\n e.preventDefault();\n }\n },\n\n _same: function() {\n this.trigger(SAME);\n },\n\n _urlChanged: function(e) {\n var url = e.url;\n var decode = !!e.decode;\n var back = e.backButtonPressed;\n\n if (!url) {\n url = \"/\";\n }\n\n if (this.trigger(CHANGE, { url: e.url, params: kendo.parseQueryStringParams(e.url), backButtonPressed: back })) {\n e.preventDefault();\n return;\n }\n\n var idx = 0,\n routes = this.routes,\n route,\n length = routes.length;\n\n for (; idx < length; idx ++) {\n route = routes[idx];\n\n if (route.worksWith(url, back, decode)) {\n return;\n }\n }\n\n if (this.trigger(ROUTE_MISSING, { url: url, params: kendo.parseQueryStringParams(url), backButtonPressed: back })) {\n e.preventDefault();\n }\n }\n });\n\n kendo.Router = Router;\n })();\n\n var __meta__$o = {\n id: \"view\",\n name: \"View\",\n category: \"framework\",\n description: \"The View class instantiates and handles the events of a certain screen from the application.\",\n depends: [ \"core\", \"binder\", \"fx\" ],\n hidden: false\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n attr = kendo.attr,\n ui = kendo.ui,\n attrValue = kendo.attrValue,\n directiveSelector = kendo.directiveSelector,\n Observable = kendo.Observable,\n Widget = kendo.ui.Widget,\n roleSelector = kendo.roleSelector,\n\n SCRIPT = \"SCRIPT\",\n INIT = \"init\",\n TRANSITION_START = \"transitionStart\",\n TRANSITION_END = \"transitionEnd\",\n SHOW = \"show\",\n HIDE = \"hide\",\n ATTACH = \"attach\",\n DETACH = \"detach\",\n sizzleErrorRegExp = /unrecognized expression/;\n\n var bodyRegExp = /]*>(([\\u000a\\u000d\\u2028\\u2029]|.)*)<\\/body>/i;\n var LOAD_START = \"loadStart\";\n var LOAD_COMPLETE = \"loadComplete\";\n var SHOW_START = \"showStart\";\n var SAME_VIEW_REQUESTED = \"sameViewRequested\";\n var VIEW_SHOW = \"viewShow\";\n var VIEW_TYPE_DETERMINED = \"viewTypeDetermined\";\n var AFTER = \"after\";\n var classNames = {\n content: \"k-content\",\n view: \"k-view\",\n stretchedView: \"k-stretched-view\",\n widget: \"k-widget\",\n header: \"k-header\",\n footer: \"k-footer\"\n };\n\n var View = kendo.ui.Widget.extend({\n init: function(content, options) {\n var that = this;\n options = options || {};\n that.id = kendo.guid();\n\n Observable.fn.init.call(that);\n this.options = $.extend({}, this.options, options);\n\n that.content = content;\n\n if (that.options.renderOnInit) {\n Widget.fn.init.call(that, that._createElement(), options);\n }\n\n if (that.options.wrapInSections) {\n that._renderSections();\n }\n\n that.tagName = options.tagName || \"div\";\n that.model = options.model;\n that._wrap = options.wrap !== false;\n this._evalTemplate = options.evalTemplate || false;\n this._useWithBlock = options.useWithBlock;\n that._fragments = {};\n\n that.bind([ INIT, SHOW, HIDE, TRANSITION_START, TRANSITION_END ], options);\n },\n\n options: {\n name: \"View\",\n renderOnInit: false,\n wrapInSections: false,\n detachOnHide: true,\n detachOnDestroy: true\n },\n\n render: function(container) {\n var that = this,\n notInitialized = !that.element;\n\n // The order below matters - kendo.bind should happen when the element is in the DOM, and show should be triggered after init.\n\n if (notInitialized) {\n that.element = that._createElement();\n }\n\n if (container) {\n $(container).append(that.element);\n }\n\n if (notInitialized) {\n kendo.bind(that.element, that.model);\n that.trigger(INIT);\n }\n\n if (container) {\n that._eachFragment(ATTACH);\n that.trigger(SHOW);\n }\n\n return that.element;\n },\n\n clone: function() {\n return new ViewClone(this);\n },\n\n triggerBeforeShow: function() {\n return true;\n },\n\n triggerBeforeHide: function() {\n return true;\n },\n\n showStart: function() {\n var that = this;\n var element = that.render();\n\n if (element) {\n element.css(\"display\", \"\");\n }\n\n this.trigger(SHOW_START, { view: this });\n },\n\n showEnd: function() {\n },\n\n hideEnd: function() {\n this.hide();\n },\n\n beforeTransition: function(type) {\n this.trigger(TRANSITION_START, { type: type });\n },\n\n afterTransition: function(type) {\n this.trigger(TRANSITION_END, { type: type });\n },\n\n hide: function() {\n if (this.options.detachOnHide) {\n this._eachFragment(DETACH);\n $(this.element).detach();\n }\n\n this.trigger(HIDE);\n },\n\n destroy: function() {\n var that = this;\n var element = that.element;\n\n if (element) {\n Widget.fn.destroy.call(that);\n\n kendo.unbind(element);\n kendo.destroy(element);\n\n if (that.options.detachOnDestroy) {\n element.remove();\n }\n }\n },\n\n // ported from mobile view\n purge: function() {\n var that = this;\n\n that.destroy();\n $(that.element).add(that.content).add(that.wrapper).off().remove();\n },\n\n fragments: function(fragments) {\n $.extend(this._fragments, fragments);\n },\n\n _eachFragment: function(methodName) {\n for (var placeholder in this._fragments) {\n this._fragments[placeholder][methodName](this, placeholder);\n }\n },\n\n _createElement: function() {\n var that = this,\n wrapper = \"<\" + that.tagName + \">\",\n element,\n content;\n\n try {\n content = $(document.getElementById(that.content) || that.content); // support passing id without #\n\n if (content[0].tagName === SCRIPT) {\n content = content.html();\n }\n } catch (e) {\n if (sizzleErrorRegExp.test(e.message)) {\n content = that.content;\n }\n }\n\n if (typeof content === \"string\") {\n content = content.replace(/^\\s+|\\s+$/g, '');\n if (that._evalTemplate) {\n content = kendo.template(content, { useWithBlock: that._useWithBlock })(that.model || {});\n }\n\n element = $(wrapper).append(content);\n // drop the wrapper if asked - this seems like the easiest (although not very intuitive) way to avoid messing up templates with questionable content, like this one for instance:\n // \n if (!that._wrap) {\n element = element.contents();\n }\n } else {\n element = content;\n if (that._evalTemplate) {\n var result = $(kendo.template($(\"
    \").append(element.clone(true)).html(), { useWithBlock: that._useWithBlock })(that.model || {}));\n\n // template uses DOM\n if ($.contains(document, element[0])) {\n element.replaceWith(result);\n }\n\n element = result;\n }\n if (that._wrap) {\n element = element.wrapAll(wrapper).parent();\n }\n }\n\n return element;\n },\n\n _renderSections: function() {\n var that = this;\n\n if (that.options.wrapInSections) {\n that._wrapper();\n that._createContent();\n that._createHeader();\n that._createFooter();\n }\n },\n\n _wrapper: function() {\n var that = this;\n var content = that.content;\n\n if (content.is(roleSelector(\"view\"))) {\n that.wrapper = that.content;\n } else {\n that.wrapper = content\n .wrap('
    ')\n .parent();\n }\n\n var wrapper = that.wrapper;\n\n wrapper.attr(\"id\", that.id);\n\n wrapper.addClass(classNames.view);\n wrapper.addClass(classNames.widget);\n wrapper.attr(\"role\", \"view\");\n },\n\n _createContent: function() {\n var that = this;\n var wrapper = $(that.wrapper);\n var contentSelector = roleSelector(\"content\");\n\n if (!wrapper.children(contentSelector)[0]) {\n var ccontentElements = wrapper.children().filter(function() {\n var child = $(this);\n if (!child.is(roleSelector(\"header\")) && !child.is(roleSelector(\"footer\"))) {\n return child;\n }\n });\n\n ccontentElements.wrap(\"
    ');\n }\n\n // use contentElement instead of content as view.content can be a string\n this.contentElement = wrapper.children(roleSelector(\"content\"));\n\n this.contentElement\n .addClass(classNames.stretchedView)\n .addClass(classNames.content);\n },\n\n _createHeader: function() {\n var that = this;\n var wrapper = that.wrapper;\n\n this.header = wrapper.children(roleSelector(\"header\")).addClass(classNames.header);\n },\n\n _createFooter: function() {\n var that = this;\n var wrapper = that.wrapper;\n\n this.footer = wrapper.children(roleSelector(\"footer\")).addClass(classNames.footer);\n }\n });\n\n var ViewClone = kendo.Class.extend({\n init: function(view) {\n $.extend(this, {\n element: view.element.clone(true),\n transition: view.transition,\n id: view.id\n });\n\n view.element.parent().append(this.element);\n },\n\n hideEnd: function() {\n this.element.remove();\n },\n\n beforeTransition: $.noop,\n afterTransition: $.noop\n });\n\n var Layout = View.extend({\n init: function(content, options) {\n View.fn.init.call(this, content, options);\n this.containers = {};\n },\n\n container: function(selector) {\n var container = this.containers[selector];\n\n if (!container) {\n container = this._createContainer(selector);\n this.containers[selector] = container;\n }\n\n return container;\n },\n\n showIn: function(selector, view, transition) {\n this.container(selector).show(view, transition);\n },\n\n _createContainer: function(selector) {\n var root = this.render(),\n element = root.find(selector),\n container;\n\n if (!element.length && root.is(selector)) {\n if (root.is(selector)) {\n element = root;\n } else {\n\n throw new Error(\"can't find a container with the specified \" + selector + \" selector\");\n }\n }\n\n container = new ViewContainer(element);\n\n container.bind(\"accepted\", function(e) {\n e.view.render(element);\n });\n\n return container;\n }\n });\n\n var Fragment = View.extend({\n attach: function(view, placeholder) {\n view.element.find(placeholder).replaceWith(this.render());\n },\n\n detach: function() {\n }\n });\n\n var transitionRegExp = /^(\\w+)(:(\\w+))?( (\\w+))?$/;\n\n function parseTransition(transition) {\n if (!transition) {\n return {};\n }\n\n var matches = transition.match(transitionRegExp) || [];\n\n return {\n type: matches[1],\n direction: matches[3],\n reverse: matches[5] === \"reverse\"\n };\n }\n\n var ViewContainer = Observable.extend({\n init: function(container) {\n Observable.fn.init.call(this);\n this.container = container;\n this.history = [];\n this.view = null;\n this.running = false;\n },\n\n after: function() {\n this.running = false;\n this.trigger(\"complete\", { view: this.view });\n this.trigger(\"after\");\n },\n\n end: function() {\n this.view.showEnd();\n this.previous.hideEnd();\n this.after();\n },\n\n show: function(view, transition, locationID) {\n if (!view.triggerBeforeShow() || (this.view && !this.view.triggerBeforeHide())) {\n this.trigger(\"after\");\n return false;\n }\n\n locationID = locationID || view.id;\n\n var that = this,\n current = (view === that.view) ? view.clone() : that.view,\n history = that.history,\n previousEntry = history[history.length - 2] || {},\n back = previousEntry.id === locationID,\n // If explicit transition is set, it will be with highest priority\n // Next we will try using the history record transition or the view transition configuration\n theTransition = transition || ( back ? history[history.length - 1].transition : view.transition ),\n transitionData = parseTransition(theTransition);\n\n if (that.running) {\n that.effect.stop();\n }\n\n if (theTransition === \"none\") {\n theTransition = null;\n }\n\n that.trigger(\"accepted\", { view: view });\n that.view = view;\n that.previous = current;\n that.running = true;\n\n if (!back) {\n history.push({ id: locationID, transition: theTransition });\n } else {\n history.pop();\n }\n\n if (!current) {\n view.showStart();\n view.showEnd();\n that.after();\n return true;\n }\n\n if (!theTransition || !kendo.effects.enabled) {\n view.showStart();\n that.end();\n } else {\n // hide the view element before init/show - prevents blinks on iPad\n // the replace effect will remove this class\n view.element.addClass(\"k-fx-hidden\");\n view.showStart();\n // do not reverse the explicit transition\n if (back && !transition) {\n transitionData.reverse = !transitionData.reverse;\n }\n\n that.effect = kendo.fx(view.element).replace(current.element, transitionData.type)\n .beforeTransition(function() {\n view.beforeTransition(\"show\");\n current.beforeTransition(\"hide\");\n })\n .afterTransition(function() {\n view.afterTransition(\"show\");\n current.afterTransition(\"hide\");\n })\n .direction(transitionData.direction)\n .setReverse(transitionData.reverse);\n\n that.effect.run().then(function() { that.end(); });\n }\n\n return true;\n },\n\n destroy: function() {\n var that = this;\n var view = that.view;\n\n if (view && view.destroy) {\n view.destroy();\n }\n }\n });\n\n var ViewEngine = Observable.extend({\n init: function(options) {\n var that = this,\n views,\n container;\n\n Observable.fn.init.call(that);\n that.options = options;\n\n $.extend(that, options);\n that.sandbox = $(\"
    \");\n container = that.container;\n\n views = that._hideViews(container);\n that.rootView = views.first();\n that.layouts = {};\n\n that.viewContainer = new kendo.ViewContainer(that.container);\n\n that.viewContainer.bind(\"accepted\", function(e) {\n e.view.params = that.params;\n });\n\n that.viewContainer.bind(\"complete\", function(e) {\n that.trigger(VIEW_SHOW, { view: e.view });\n });\n\n that.viewContainer.bind(AFTER, function() {\n that.trigger(AFTER);\n });\n\n this.bind(this.events, options);\n },\n\n events: [\n SHOW_START,\n AFTER,\n VIEW_SHOW,\n LOAD_START,\n LOAD_COMPLETE,\n SAME_VIEW_REQUESTED,\n VIEW_TYPE_DETERMINED\n ],\n\n destroy: function() {\n var that = this;\n var viewContainer = that.viewContainer;\n\n kendo.destroy(that.container);\n\n for (var id in that.layouts) {\n this.layouts[id].destroy();\n }\n\n if (viewContainer) {\n viewContainer.destroy();\n }\n },\n\n view: function() {\n return this.viewContainer.view;\n },\n\n showView: function(url, transition, params) {\n url = url.replace(new RegExp(\"^\" + this.remoteViewURLPrefix), \"\");\n if (url === \"\" && this.remoteViewURLPrefix) {\n url = \"/\";\n }\n\n if (url.replace(/^#/, \"\") === this.url) {\n this.trigger(SAME_VIEW_REQUESTED);\n return false;\n }\n\n this.trigger(SHOW_START);\n\n var that = this,\n element = that._findViewElement(url),\n view = kendo.widgetInstance(element);\n\n that.url = url.replace(/^#/, \"\");\n\n that.params = params;\n\n if (view && view.reload) {\n view.purge();\n element = [];\n }\n\n this.trigger(VIEW_TYPE_DETERMINED, { remote: element.length === 0, url: url });\n\n if (element[0]) {\n if (!view) {\n view = that._createView(element);\n }\n\n return that.viewContainer.show(view, transition, url);\n } else {\n return true;\n }\n },\n\n append: function(html, url) {\n var sandbox = this.sandbox,\n urlPath = (url || \"\").split(\"?\")[0],\n container = this.container,\n views,\n view;\n\n if (bodyRegExp.test(html)) {\n html = RegExp.$1;\n }\n\n sandbox[0].innerHTML = html;\n\n container.append(sandbox.children(\"script, style\"));\n\n views = this._hideViews(sandbox);\n view = views.first();\n\n // Generic HTML content found as remote view - no remote view markers\n if (!view.length) {\n views = view = sandbox.wrapInner(\"
    \").children(); // one element\n }\n\n if (urlPath) {\n view.hide().attr(attr(\"url\"), urlPath);\n }\n\n container.append(views);\n\n return this._createView(view);\n },\n\n _locate: function(selectors) {\n return this.$angular ? directiveSelector(selectors) : roleSelector(selectors);\n },\n\n _findViewElement: function(url) {\n var element,\n urlPath = url.split(\"?\")[0];\n\n if (!urlPath) {\n return this.rootView;\n }\n\n element = this.container.children(\"[\" + attr(\"url\") + \"='\" + urlPath + \"']\");\n\n // do not try to search for \"#/foo/bar\" id, jQuery throws error\n if (!element[0] && urlPath.indexOf(\"/\") === -1) {\n element = this.container.children(urlPath.charAt(0) === \"#\" ? urlPath : \"#\" + urlPath);\n }\n\n if (!element[0]) {\n element = this._findViewElementById(url);\n }\n\n return element;\n },\n\n _findViewElementById: function(id) {\n var element = this.container.children(\"[id='\" + id + \"']\");\n return element;\n },\n\n _createView: function(element) {\n //return this._createMobileView(element);\n return this._createSpaView(element);\n },\n\n _createMobileView: function(element) {\n return kendo.initWidget(element, {\n defaultTransition: this.transition,\n loader: this.loader,\n container: this.container,\n getLayout: this.getLayoutProxy,\n modelScope: this.modelScope,\n reload: attrValue(element, \"reload\")\n }, ui.roles);\n },\n\n _createSpaView: function(element) {\n var viewOptions = (this.options || {}).viewOptions || {};\n return new kendo.View(element, {\n renderOnInit: viewOptions.renderOnInit,\n wrap: viewOptions.wrap || false,\n wrapInSections: viewOptions.wrapInSections,\n detachOnHide: viewOptions.detachOnHide,\n detachOnDestroy: viewOptions.detachOnDestroy\n });\n },\n\n _hideViews: function(container) {\n return container.children(this._locate(\"view\")).hide();\n }\n });\n\n kendo.ViewEngine = ViewEngine;\n\n kendo.ViewContainer = ViewContainer;\n kendo.Fragment = Fragment;\n kendo.Layout = Layout;\n kendo.View = View;\n kendo.ViewClone = ViewClone;\n\n })(window.kendo.jQuery);\n\n var __meta__$n = {\n id: \"userevents\",\n name: \"User Events\",\n category: \"framework\",\n depends: [ \"core\" ],\n hidden: true\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n support = kendo.support,\n Class = kendo.Class,\n Observable = kendo.Observable,\n now = Date.now,\n extend = $.extend,\n OS = support.mobileOS,\n invalidZeroEvents = OS && OS.android,\n DEFAULT_MIN_HOLD = 800,\n CLICK_DELAY = 300,\n DEFAULT_THRESHOLD = support.browser.msie ? 5 : 0, // WP8 and W8 are very sensitive and always report move.\n\n // UserEvents events\n PRESS = \"press\",\n HOLD = \"hold\",\n SELECT = \"select\",\n START = \"start\",\n MOVE = \"move\",\n END = \"end\",\n CANCEL = \"cancel\",\n TAP = \"tap\",\n DOUBLETAP = \"doubleTap\",\n RELEASE = \"release\",\n GESTURESTART = \"gesturestart\",\n GESTURECHANGE = \"gesturechange\",\n GESTUREEND = \"gestureend\",\n GESTURETAP = \"gesturetap\";\n\n var THRESHOLD = {\n \"api\": 0,\n \"touch\": 0,\n \"mouse\": 9,\n \"pointer\": 9\n };\n\n var ENABLE_GLOBAL_SURFACE = (!support.touch || support.mouseAndTouchPresent);\n\n function touchDelta(touch1, touch2) {\n var x1 = touch1.x.location,\n y1 = touch1.y.location,\n x2 = touch2.x.location,\n y2 = touch2.y.location,\n dx = x1 - x2,\n dy = y1 - y2;\n\n return {\n center: {\n x: (x1 + x2) / 2,\n y: (y1 + y2) / 2\n },\n\n distance: Math.sqrt(dx * dx + dy * dy)\n };\n }\n\n function getTouches(e) {\n var touches = [],\n originalEvent = e.originalEvent,\n currentTarget = e.currentTarget,\n idx = 0, length,\n changedTouches,\n touch;\n\n if (e.api) {\n touches.push({\n id: 2, // hardcoded ID for API call;\n event: e,\n target: e.target,\n currentTarget: e.target,\n location: e,\n type: \"api\"\n });\n }\n else if (e.type.match(/touch/)) {\n changedTouches = originalEvent ? originalEvent.changedTouches : [];\n for (length = changedTouches.length; idx < length; idx ++) {\n touch = changedTouches[idx];\n touches.push({\n location: touch,\n event: e,\n target: touch.target,\n currentTarget: currentTarget,\n id: touch.identifier,\n type: \"touch\"\n });\n }\n }\n else if (support.pointers || support.msPointers) {\n touches.push({\n location: originalEvent,\n event: e,\n target: e.target,\n currentTarget: currentTarget,\n id: originalEvent.pointerId,\n type: \"pointer\"\n });\n } else {\n touches.push({\n id: 1, // hardcoded ID for mouse event;\n event: e,\n target: e.target,\n currentTarget: currentTarget,\n location: e,\n type: \"mouse\"\n });\n }\n\n return touches;\n }\n\n var TouchAxis = Class.extend({\n init: function(axis, location) {\n var that = this;\n\n that.axis = axis;\n\n that._updateLocationData(location);\n\n that.startLocation = that.location;\n that.velocity = that.delta = 0;\n that.timeStamp = now();\n },\n\n move: function(location) {\n var that = this,\n offset = location[\"page\" + that.axis],\n timeStamp = now(),\n timeDelta = (timeStamp - that.timeStamp) || 1; // Firing manually events in tests can make this 0;\n\n if (!offset && invalidZeroEvents) {\n return;\n }\n\n that.delta = offset - that.location;\n\n that._updateLocationData(location);\n\n that.initialDelta = offset - that.startLocation;\n that.velocity = that.delta / timeDelta;\n that.timeStamp = timeStamp;\n },\n\n _updateLocationData: function(location) {\n var that = this, axis = that.axis;\n\n that.location = location[\"page\" + axis];\n that.client = location[\"client\" + axis];\n that.screen = location[\"screen\" + axis];\n }\n });\n\n var Touch = Class.extend({\n init: function(userEvents, target, touchInfo) {\n extend(this, {\n x: new TouchAxis(\"X\", touchInfo.location),\n y: new TouchAxis(\"Y\", touchInfo.location),\n type: touchInfo.type,\n useClickAsTap: userEvents.useClickAsTap,\n threshold: userEvents.threshold || THRESHOLD[touchInfo.type],\n userEvents: userEvents,\n target: target,\n currentTarget: touchInfo.currentTarget,\n initialTouch: touchInfo.target,\n id: touchInfo.id,\n pressEvent: touchInfo,\n _clicks: userEvents._clicks,\n supportDoubleTap: userEvents.supportDoubleTap,\n _moved: false,\n _finished: false\n });\n },\n\n press: function() {\n this._holdTimeout = setTimeout(this._hold.bind(this), this.userEvents.minHold);\n this._trigger(PRESS, this.pressEvent);\n },\n\n _tap: function(touchInfo) {\n var that = this;\n that.userEvents._clicks++;\n if (that.userEvents._clicks == 1) {\n that._clickTimeout = setTimeout(function() {\n if (that.userEvents._clicks == 1) {\n that._trigger(TAP, touchInfo);\n }\n else {\n that._trigger(DOUBLETAP, touchInfo);\n }\n that.userEvents._clicks = 0;\n }, CLICK_DELAY);\n }\n },\n\n _hold: function() {\n this._trigger(HOLD, this.pressEvent);\n },\n\n move: function(touchInfo) {\n var that = this;\n var preventMove = touchInfo.type !== \"api\" && that.userEvents._shouldNotMove;\n\n if (that._finished || preventMove) { return; }\n\n that.x.move(touchInfo.location);\n that.y.move(touchInfo.location);\n\n if (!that._moved) {\n if (that._withinIgnoreThreshold()) {\n return;\n }\n\n if (!UserEvents.current || UserEvents.current === that.userEvents) {\n that._start(touchInfo);\n } else {\n return that.dispose();\n }\n }\n\n // Event handlers may cancel the drag in the START event handler, hence the double check for pressed.\n if (!that._finished) {\n that._trigger(MOVE, touchInfo);\n }\n },\n\n end: function(touchInfo) {\n this.endTime = now();\n\n if (this._finished) { return; }\n\n // Mark the object as finished if there are blocking operations in the event handlers (alert/confirm)\n this._finished = true;\n\n this._trigger(RELEASE, touchInfo); // Release should be fired before TAP (as click is after mouseup/touchend)\n\n if (this._moved) {\n this._trigger(END, touchInfo);\n } else {\n if (!this.useClickAsTap) {\n if (this.supportDoubleTap) {\n this._tap(touchInfo);\n }\n else {\n this._trigger(TAP, touchInfo);\n }\n }\n }\n\n clearTimeout(this._holdTimeout);\n\n this.dispose();\n },\n\n dispose: function() {\n var userEvents = this.userEvents,\n activeTouches = userEvents.touches;\n\n this._finished = true;\n this.pressEvent = null;\n clearTimeout(this._holdTimeout);\n\n activeTouches.splice($.inArray(this, activeTouches), 1);\n },\n\n skip: function() {\n this.dispose();\n },\n\n cancel: function() {\n this.dispose();\n },\n\n isMoved: function() {\n return this._moved;\n },\n\n _start: function(touchInfo) {\n clearTimeout(this._holdTimeout);\n\n this.startTime = now();\n this._moved = true;\n this._trigger(START, touchInfo);\n },\n\n _trigger: function(name, touchInfo) {\n var that = this,\n jQueryEvent = touchInfo.event,\n data = {\n touch: that,\n x: that.x,\n y: that.y,\n target: that.target,\n event: jQueryEvent\n };\n\n if (that.userEvents.notify(name, data)) {\n jQueryEvent.preventDefault();\n }\n },\n\n _withinIgnoreThreshold: function() {\n var xDelta = this.x.initialDelta,\n yDelta = this.y.initialDelta;\n\n return Math.sqrt(xDelta * xDelta + yDelta * yDelta) <= this.threshold;\n }\n });\n\n function withEachUpEvent(callback) {\n var downEvents = kendo.eventMap.up.split(\" \"),\n idx = 0,\n length = downEvents.length;\n\n for (; idx < length; idx ++) {\n callback(downEvents[idx]);\n }\n }\n\n var UserEvents = Observable.extend({\n init: function(element, options) {\n var that = this,\n filter,\n ns = kendo.guid();\n\n options = options || {};\n filter = that.filter = options.filter;\n that.threshold = options.threshold || DEFAULT_THRESHOLD;\n that.minHold = options.minHold || DEFAULT_MIN_HOLD;\n that.touches = [];\n that._maxTouches = options.multiTouch ? 2 : 1;\n that.allowSelection = options.allowSelection;\n that.captureUpIfMoved = options.captureUpIfMoved;\n that.useClickAsTap = !options.fastTap && !support.delayedClick();\n that.eventNS = ns;\n that._clicks = 0;\n that.supportDoubleTap = options.supportDoubleTap;\n\n element = $(element).handler(that);\n Observable.fn.init.call(that);\n\n extend(that, {\n element: element,\n // the touch events lock to the element anyway, so no need for the global setting\n surface: options.global && ENABLE_GLOBAL_SURFACE ? $(element[0].ownerDocument.documentElement) : $(options.surface || element),\n stopPropagation: options.stopPropagation,\n pressed: false\n });\n\n that.surface.handler(that)\n .on(kendo.applyEventMap(\"move\", ns), \"_move\")\n .on(kendo.applyEventMap(\"up cancel\", ns), \"_end\");\n\n element.on(kendo.applyEventMap(\"down\", ns), filter, \"_start\");\n\n if (that.useClickAsTap) {\n element.on(kendo.applyEventMap(\"click\", ns), filter, \"_click\");\n }\n\n if (support.pointers || support.msPointers) {\n //touch-action:none will not work for IE10\n if (support.browser.version < 11) {\n var defaultAction = \"pinch-zoom double-tap-zoom\";\n element.css(\"-ms-touch-action\", options.touchAction && options.touchAction != \"none\" ? defaultAction + \" \" + options.touchAction : defaultAction);\n } else {\n element.css(\"touch-action\", options.touchAction || \"none\");\n }\n }\n\n if (options.preventDragEvent) {\n element.on(kendo.applyEventMap(\"dragstart\", ns), kendo.preventDefault);\n }\n\n element.on(kendo.applyEventMap(\"mousedown\", ns), filter, { root: element }, \"_select\");\n\n if (that.captureUpIfMoved && support.eventCapture) {\n var surfaceElement = that.surface[0],\n preventIfMovingProxy = that.preventIfMoving.bind(that);\n\n withEachUpEvent(function(eventName) {\n surfaceElement.addEventListener(eventName, preventIfMovingProxy, true);\n });\n }\n\n that.bind([\n PRESS,\n HOLD,\n TAP,\n DOUBLETAP,\n START,\n MOVE,\n END,\n RELEASE,\n CANCEL,\n GESTURESTART,\n GESTURECHANGE,\n GESTUREEND,\n GESTURETAP,\n SELECT\n ], options);\n },\n\n preventIfMoving: function(e) {\n if (this._isMoved()) {\n e.preventDefault();\n }\n },\n\n destroy: function() {\n var that = this;\n\n if (that._destroyed) {\n return;\n }\n\n that._destroyed = true;\n\n if (that.captureUpIfMoved && support.eventCapture) {\n var surfaceElement = that.surface[0];\n withEachUpEvent(function(eventName) {\n surfaceElement.removeEventListener(eventName, that.preventIfMoving);\n });\n }\n\n that.element.kendoDestroy(that.eventNS);\n that.surface.kendoDestroy(that.eventNS);\n that.element.removeData(\"handler\");\n that.surface.removeData(\"handler\");\n that._disposeAll();\n\n that.unbind();\n delete that.surface;\n delete that.element;\n delete that.currentTarget;\n },\n\n capture: function() {\n UserEvents.current = this;\n },\n\n cancel: function() {\n this._disposeAll();\n this.trigger(CANCEL);\n },\n\n notify: function(eventName, data) {\n var that = this,\n touches = that.touches;\n\n if (this._isMultiTouch()) {\n switch (eventName) {\n case MOVE:\n eventName = GESTURECHANGE;\n break;\n case END:\n eventName = GESTUREEND;\n break;\n case TAP:\n eventName = GESTURETAP;\n break;\n }\n\n extend(data, { touches: touches }, touchDelta(touches[0], touches[1]));\n }\n\n return this.trigger(eventName, extend(data, { type: eventName }));\n },\n\n // API\n press: function(x, y, target) {\n this._apiCall(\"_start\", x, y, target);\n },\n\n move: function(x, y) {\n this._apiCall(\"_move\", x, y);\n },\n\n end: function(x, y) {\n this._apiCall(\"_end\", x, y);\n },\n\n _isMultiTouch: function() {\n return this.touches.length > 1;\n },\n\n _maxTouchesReached: function() {\n return this.touches.length >= this._maxTouches;\n },\n\n _disposeAll: function() {\n var touches = this.touches;\n while (touches.length > 0) {\n touches.pop().dispose();\n }\n },\n\n _isMoved: function() {\n return $.grep(this.touches, function(touch) {\n return touch.isMoved();\n }).length;\n },\n\n _select: function(e) {\n if (!this.allowSelection || this.trigger(SELECT, { event: e })) {\n e.preventDefault();\n }\n },\n\n _start: function(e) {\n var that = this,\n idx = 0,\n filter = that.filter,\n target,\n touches = getTouches(e),\n length = touches.length,\n touch,\n which = e.which;\n\n if ((which && which > 1) || (that._maxTouchesReached())) {\n return;\n }\n\n UserEvents.current = null;\n\n that.currentTarget = e.currentTarget;\n\n if (that.stopPropagation) {\n e.stopPropagation();\n }\n\n for (; idx < length; idx ++) {\n if (that._maxTouchesReached()) {\n break;\n }\n\n touch = touches[idx];\n\n if (filter) {\n target = $(touch.currentTarget); // target.is(filter) ? target : target.closest(filter, that.element);\n } else {\n target = that.element;\n }\n\n if (!target.length) {\n continue;\n }\n\n touch = new Touch(that, target, touch);\n that.touches.push(touch);\n touch.press();\n\n if (that._isMultiTouch()) {\n that.notify(\"gesturestart\", {});\n }\n }\n },\n\n _move: function(e) {\n this._eachTouch(\"move\", e);\n },\n\n _end: function(e) {\n this._eachTouch(\"end\", e);\n },\n\n _click: function(e) {\n var data = {\n touch: {\n initialTouch: e.target,\n target: $(e.currentTarget),\n endTime: now(),\n x: {\n location: e.pageX,\n client: e.clientX\n },\n y: {\n location: e.pageY,\n client: e.clientY\n }\n },\n x: e.pageX,\n y: e.pageY,\n target: $(e.currentTarget),\n event: e,\n type: \"tap\"\n };\n\n if (this.trigger(\"tap\", data)) {\n e.preventDefault();\n }\n },\n\n _eachTouch: function(methodName, e) {\n var that = this,\n dict = {},\n touches = getTouches(e),\n activeTouches = that.touches,\n idx,\n touch,\n touchInfo,\n matchingTouch;\n\n for (idx = 0; idx < activeTouches.length; idx ++) {\n touch = activeTouches[idx];\n dict[touch.id] = touch;\n }\n\n for (idx = 0; idx < touches.length; idx ++) {\n touchInfo = touches[idx];\n matchingTouch = dict[touchInfo.id];\n\n if (matchingTouch) {\n matchingTouch[methodName](touchInfo);\n }\n }\n },\n\n _apiCall: function(type, x, y, target) {\n this[type]({\n api: true,\n pageX: x,\n pageY: y,\n clientX: x,\n clientY: y,\n target: $(target || this.element)[0],\n stopPropagation: $.noop,\n preventDefault: $.noop\n });\n }\n });\n\n UserEvents.defaultThreshold = function(value) {\n DEFAULT_THRESHOLD = value;\n };\n\n UserEvents.minHold = function(value) {\n DEFAULT_MIN_HOLD = value;\n };\n\n kendo.getTouches = getTouches;\n kendo.touchDelta = touchDelta;\n kendo.UserEvents = UserEvents;\n })(window.kendo.jQuery);\n\n var __meta__$m = {\n id: \"draganddrop\",\n name: \"Drag & drop\",\n category: \"framework\",\n description: \"Drag & drop functionality for any DOM element.\",\n depends: [ \"core\", \"userevents\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n support = kendo.support,\n document = window.document,\n $window = $(window),\n Class = kendo.Class,\n Widget = kendo.ui.Widget,\n Observable = kendo.Observable,\n UserEvents = kendo.UserEvents,\n extend = $.extend,\n getOffset = kendo.getOffset,\n draggables = {},\n dropTargets = {},\n dropAreas = {},\n lastDropTarget,\n elementUnderCursor = kendo.elementUnderCursor,\n KEYUP = \"keyup\",\n CHANGE = \"change\",\n\n // Draggable events\n DRAGSTART = \"dragstart\",\n HOLD = \"hold\",\n DRAG = \"drag\",\n DRAGEND = \"dragend\",\n DRAGCANCEL = \"dragcancel\",\n HINTDESTROYED = \"hintDestroyed\",\n\n // DropTarget events\n DRAGENTER = \"dragenter\",\n DRAGLEAVE = \"dragleave\",\n DROP = \"drop\";\n\n function contains(parent, child) {\n try {\n return $.contains(parent, child) || parent == child;\n } catch (e) {\n return false;\n }\n }\n\n function numericCssPropery(element, property) {\n return parseInt(element.css(property), 10) || 0;\n }\n\n function within(value, range) {\n return Math.min(Math.max(value, range.min), range.max);\n }\n\n function containerBoundaries(container, element) {\n var offset = getOffset(container),\n outerWidth = kendo._outerWidth,\n outerHeight = kendo._outerHeight,\n minX = offset.left + numericCssPropery(container, \"borderLeftWidth\") + numericCssPropery(container, \"paddingLeft\"),\n minY = offset.top + numericCssPropery(container, \"borderTopWidth\") + numericCssPropery(container, \"paddingTop\"),\n maxX = minX + container.width() - outerWidth(element, true),\n maxY = minY + container.height() - outerHeight(element, true);\n\n return {\n x: { min: minX, max: maxX },\n y: { min: minY, max: maxY }\n };\n }\n\n function checkTarget(target, targets, areas) {\n var theTarget, theFilter, i = 0,\n targetLen = targets && targets.length,\n areaLen = areas && areas.length;\n\n while (target && target.parentNode) {\n for (i = 0; i < targetLen; i ++) {\n theTarget = targets[i];\n if (theTarget.element[0] === target) {\n return { target: theTarget, targetElement: target };\n }\n }\n\n for (i = 0; i < areaLen; i ++) {\n theFilter = areas[i];\n if ($.contains(theFilter.element[0], target) && support.matchesSelector.call(target, theFilter.options.filter)) {\n return { target: theFilter, targetElement: target };\n }\n }\n\n target = target.parentNode;\n }\n\n return undefined$1;\n }\n\n var TapCapture = Observable.extend({\n init: function(element, options) {\n var that = this,\n domElement = element[0];\n\n that.capture = false;\n\n if (domElement.addEventListener) {\n $.each(kendo.eventMap.down.split(\" \"), function() {\n domElement.addEventListener(this, that._press.bind(that), true);\n });\n $.each(kendo.eventMap.up.split(\" \"), function() {\n domElement.addEventListener(this, that._release.bind(that), true);\n });\n } else {\n $.each(kendo.eventMap.down.split(\" \"), function() {\n domElement.attachEvent(this, that._press.bind(that));\n });\n $.each(kendo.eventMap.up.split(\" \"), function() {\n domElement.attachEvent(this, that._release.bind(that));\n });\n }\n\n Observable.fn.init.call(that);\n\n that.bind([\"press\", \"release\"], options || {});\n },\n\n captureNext: function() {\n this.capture = true;\n },\n\n cancelCapture: function() {\n this.capture = false;\n },\n\n _press: function(e) {\n var that = this;\n that.trigger(\"press\");\n if (that.capture) {\n e.preventDefault();\n }\n },\n\n _release: function(e) {\n var that = this;\n that.trigger(\"release\");\n\n if (that.capture) {\n e.preventDefault();\n that.cancelCapture();\n }\n }\n });\n\n var PaneDimension = Observable.extend({\n init: function(options) {\n var that = this;\n Observable.fn.init.call(that);\n\n that.forcedEnabled = false;\n\n $.extend(that, options);\n\n that.scale = 1;\n\n if (that.horizontal) {\n that.measure = \"offsetWidth\";\n that.scrollSize = \"scrollWidth\";\n that.axis = \"x\";\n } else {\n that.measure = \"offsetHeight\";\n that.scrollSize = \"scrollHeight\";\n that.axis = \"y\";\n }\n },\n\n makeVirtual: function() {\n $.extend(this, {\n virtual: true,\n forcedEnabled: true,\n _virtualMin: 0,\n _virtualMax: 0\n });\n },\n\n virtualSize: function(min, max) {\n if (this._virtualMin !== min || this._virtualMax !== max) {\n this._virtualMin = min;\n this._virtualMax = max;\n this.update();\n }\n },\n\n outOfBounds: function(offset) {\n return offset > this.max || offset < this.min;\n },\n\n forceEnabled: function() {\n this.forcedEnabled = true;\n },\n\n getSize: function() {\n return this.container[0][this.measure];\n },\n\n getTotal: function() {\n return this.element[0][this.scrollSize];\n },\n\n rescale: function(scale) {\n this.scale = scale;\n },\n\n update: function(silent) {\n var that = this,\n total = that.virtual ? that._virtualMax : that.getTotal(),\n scaledTotal = total * that.scale,\n size = that.getSize();\n\n if (total === 0 && !that.forcedEnabled) {\n return; // we are not visible.\n }\n\n that.max = that.virtual ? -that._virtualMin : 0;\n that.size = size;\n that.total = scaledTotal;\n that.min = Math.min(that.max, size - scaledTotal);\n that.minScale = size / total;\n that.centerOffset = (scaledTotal - size) / 2;\n\n that.enabled = that.forcedEnabled || (scaledTotal > size);\n\n if (!silent) {\n that.trigger(CHANGE, that);\n }\n }\n });\n\n var PaneDimensions = Observable.extend({\n init: function(options) {\n var that = this;\n\n Observable.fn.init.call(that);\n\n that.x = new PaneDimension(extend({ horizontal: true }, options));\n that.y = new PaneDimension(extend({ horizontal: false }, options));\n that.container = options.container;\n that.forcedMinScale = options.minScale;\n that.maxScale = options.maxScale || 100;\n\n that.bind(CHANGE, options);\n },\n\n rescale: function(newScale) {\n this.x.rescale(newScale);\n this.y.rescale(newScale);\n this.refresh();\n },\n\n centerCoordinates: function() {\n return { x: Math.min(0, -this.x.centerOffset), y: Math.min(0, -this.y.centerOffset) };\n },\n\n refresh: function() {\n var that = this;\n that.x.update();\n that.y.update();\n that.enabled = that.x.enabled || that.y.enabled;\n that.minScale = that.forcedMinScale || Math.min(that.x.minScale, that.y.minScale);\n that.fitScale = Math.max(that.x.minScale, that.y.minScale);\n that.trigger(CHANGE);\n }\n });\n\n var PaneAxis = Observable.extend({\n init: function(options) {\n var that = this;\n extend(that, options);\n Observable.fn.init.call(that);\n },\n\n outOfBounds: function() {\n return this.dimension.outOfBounds(this.movable[this.axis]);\n },\n\n dragMove: function(delta) {\n var that = this,\n dimension = that.dimension,\n axis = that.axis,\n movable = that.movable,\n position = movable[axis] + delta;\n\n if (!dimension.enabled) {\n return;\n }\n\n if ((position < dimension.min && delta < 0) || (position > dimension.max && delta > 0)) {\n delta *= that.resistance;\n }\n\n movable.translateAxis(axis, delta);\n that.trigger(CHANGE, that);\n }\n });\n\n var Pane = Class.extend({\n\n init: function(options) {\n var that = this,\n x,\n y,\n resistance,\n movable;\n\n extend(that, { elastic: true }, options);\n\n resistance = that.elastic ? 0.5 : 0;\n movable = that.movable;\n\n that.x = x = new PaneAxis({\n axis: \"x\",\n dimension: that.dimensions.x,\n resistance: resistance,\n movable: movable\n });\n\n that.y = y = new PaneAxis({\n axis: \"y\",\n dimension: that.dimensions.y,\n resistance: resistance,\n movable: movable\n });\n\n that.userEvents.bind([\"press\", \"move\", \"end\", \"gesturestart\", \"gesturechange\"], {\n gesturestart: function(e) {\n that.gesture = e;\n that.offset = that.dimensions.container.offset();\n },\n\n press: function(e) {\n if ($(e.event.target).closest(\"a\").is(\"[data-navigate-on-press=true]\")) {\n e.sender.cancel();\n }\n },\n\n gesturechange: function(e) {\n var previousGesture = that.gesture,\n previousCenter = previousGesture.center,\n\n center = e.center,\n\n scaleDelta = e.distance / previousGesture.distance,\n\n minScale = that.dimensions.minScale,\n maxScale = that.dimensions.maxScale,\n coordinates;\n\n if (movable.scale <= minScale && scaleDelta < 1) {\n // Resist shrinking. Instead of shrinking from 1 to 0.5, it will shrink to 0.5 + (1 /* minScale */ - 0.5) * 0.8 = 0.9;\n scaleDelta += (1 - scaleDelta) * 0.8;\n }\n\n if (movable.scale * scaleDelta >= maxScale) {\n scaleDelta = maxScale / movable.scale;\n }\n\n var offsetX = movable.x + that.offset.left,\n offsetY = movable.y + that.offset.top;\n\n coordinates = {\n x: (offsetX - previousCenter.x) * scaleDelta + center.x - offsetX,\n y: (offsetY - previousCenter.y) * scaleDelta + center.y - offsetY\n };\n\n movable.scaleWith(scaleDelta);\n\n x.dragMove(coordinates.x);\n y.dragMove(coordinates.y);\n\n that.dimensions.rescale(movable.scale);\n that.gesture = e;\n e.preventDefault();\n },\n\n move: function(e) {\n if (e.event.target.tagName.match(/textarea|input/i)) {\n return;\n }\n\n if (x.dimension.enabled || y.dimension.enabled) {\n x.dragMove(e.x.delta);\n y.dragMove(e.y.delta);\n e.preventDefault();\n } else {\n e.touch.skip();\n }\n },\n\n end: function(e) {\n e.preventDefault();\n }\n });\n }\n });\n\n var TRANSFORM_STYLE = support.transitions.prefix + \"Transform\",\n translate;\n\n\n if (support.hasHW3D) {\n translate = function(x, y, scale) {\n return \"translate3d(\" + x + \"px,\" + y + \"px,0) scale(\" + scale + \")\";\n };\n } else {\n translate = function(x, y, scale) {\n return \"translate(\" + x + \"px,\" + y + \"px) scale(\" + scale + \")\";\n };\n }\n\n var Movable = Observable.extend({\n init: function(element) {\n var that = this;\n\n Observable.fn.init.call(that);\n\n that.element = $(element);\n that.element[0].style.webkitTransformOrigin = \"left top\";\n that.x = 0;\n that.y = 0;\n that.scale = 1;\n that._saveCoordinates(translate(that.x, that.y, that.scale));\n },\n\n translateAxis: function(axis, by) {\n this[axis] += by;\n this.refresh();\n },\n\n scaleTo: function(scale) {\n this.scale = scale;\n this.refresh();\n },\n\n scaleWith: function(scaleDelta) {\n this.scale *= scaleDelta;\n this.refresh();\n },\n\n translate: function(coordinates) {\n this.x += coordinates.x;\n this.y += coordinates.y;\n this.refresh();\n },\n\n moveAxis: function(axis, value) {\n this[axis] = value;\n this.refresh();\n },\n\n moveTo: function(coordinates) {\n extend(this, coordinates);\n this.refresh();\n },\n\n refresh: function() {\n var that = this,\n x = that.x,\n y = that.y,\n newCoordinates;\n\n if (that.round) {\n x = Math.round(x);\n y = Math.round(y);\n }\n\n newCoordinates = translate(x, y, that.scale);\n\n if (newCoordinates != that.coordinates) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n that.element[0].style.position = \"absolute\";\n that.element[0].style.left = that.x + \"px\";\n that.element[0].style.top = that.y + \"px\";\n\n } else {\n that.element[0].style[TRANSFORM_STYLE] = newCoordinates;\n }\n that._saveCoordinates(newCoordinates);\n that.trigger(CHANGE);\n }\n },\n\n _saveCoordinates: function(coordinates) {\n this.coordinates = coordinates;\n }\n });\n\n function destroyDroppable(collection, widget) {\n var groupName = widget.options.group,\n droppables = collection[groupName],\n i;\n\n Widget.fn.destroy.call(widget);\n\n if (droppables.length > 1) {\n for (i = 0; i < droppables.length; i++) {\n if (droppables[i] == widget) {\n droppables.splice(i, 1);\n break;\n }\n }\n } else {\n droppables.length = 0; // WTF, porting this from the previous destroyGroup\n delete collection[groupName];\n }\n }\n\n var DropTarget = Widget.extend({\n init: function(element, options) {\n var that = this;\n\n Widget.fn.init.call(that, element, options);\n\n var group = that.options.group;\n\n if (!(group in dropTargets)) {\n dropTargets[group] = [ that ];\n } else {\n dropTargets[group].push( that );\n }\n },\n\n events: [\n DRAGENTER,\n DRAGLEAVE,\n DROP\n ],\n\n options: {\n name: \"DropTarget\",\n group: \"default\"\n },\n\n destroy: function() {\n destroyDroppable(dropTargets, this);\n },\n\n _trigger: function(eventName, e) {\n var that = this,\n draggable = draggables[that.options.group];\n\n if (draggable) {\n return that.trigger(eventName, extend({}, e.event, {\n draggable: draggable,\n dropTarget: e.dropTarget\n }));\n }\n },\n\n _over: function(e) {\n this._trigger(DRAGENTER, e);\n },\n\n _out: function(e) {\n this._trigger(DRAGLEAVE, e);\n },\n\n _drop: function(e) {\n var that = this,\n draggable = draggables[that.options.group];\n\n if (draggable) {\n draggable.dropped = !that._trigger(DROP, e);\n }\n }\n });\n\n DropTarget.destroyGroup = function(groupName) {\n var group = dropTargets[groupName] || dropAreas[groupName],\n i;\n\n if (group) {\n for (i = 0; i < group.length; i++) {\n Widget.fn.destroy.call(group[i]);\n }\n\n group.length = 0;\n delete dropTargets[groupName];\n delete dropAreas[groupName];\n }\n };\n\n DropTarget._cache = dropTargets;\n\n var DropTargetArea = DropTarget.extend({\n init: function(element, options) {\n var that = this;\n\n Widget.fn.init.call(that, element, options);\n\n var group = that.options.group;\n\n if (!(group in dropAreas)) {\n dropAreas[group] = [ that ];\n } else {\n dropAreas[group].push( that );\n }\n },\n\n destroy: function() {\n destroyDroppable(dropAreas, this);\n },\n\n options: {\n name: \"DropTargetArea\",\n group: \"default\",\n filter: null\n }\n });\n\n var Draggable = Widget.extend({\n init: function(element, options) {\n var that = this;\n\n Widget.fn.init.call(that, element, options);\n\n that._activated = false;\n\n that.userEvents = new UserEvents(that.element, {\n global: true,\n allowSelection: true,\n filter: that.options.filter,\n threshold: that.options.distance,\n start: that._start.bind(that),\n hold: that._hold.bind(that),\n move: that._drag.bind(that),\n end: that._end.bind(that),\n cancel: that._cancel.bind(that),\n select: that._select.bind(that)\n });\n\n if (kendo.support.touch) {\n that.element.find(that.options.filter).css('touch-action', 'none');\n }\n\n that._afterEndHandler = that._afterEnd.bind(that);\n that._captureEscape = that._captureEscape.bind(that);\n },\n\n events: [\n HOLD,\n DRAGSTART,\n DRAG,\n DRAGEND,\n DRAGCANCEL,\n HINTDESTROYED\n ],\n\n options: {\n name: \"Draggable\",\n distance: ( kendo.support.touch ? 0 : 5),\n group: \"default\",\n cursorOffset: null,\n axis: null,\n container: null,\n filter: null,\n ignore: null,\n holdToDrag: false,\n autoScroll: false,\n dropped: false\n },\n\n cancelHold: function() {\n this._activated = false;\n },\n\n _captureEscape: function(e) {\n var that = this;\n\n if (e.keyCode === kendo.keys.ESC) {\n that._trigger(DRAGCANCEL, { event: e });\n that.userEvents.cancel();\n }\n },\n\n _updateHint: function(e) {\n var that = this,\n coordinates,\n options = that.options,\n boundaries = that.boundaries,\n axis = options.axis,\n cursorOffset = that.options.cursorOffset;\n\n if (cursorOffset) {\n coordinates = { left: e.x.location + cursorOffset.left, top: e.y.location + cursorOffset.top };\n } else {\n that.hintOffset.left += e.x.delta;\n that.hintOffset.top += e.y.delta;\n coordinates = $.extend({}, that.hintOffset);\n }\n\n if (boundaries) {\n coordinates.top = within(coordinates.top, boundaries.y);\n coordinates.left = within(coordinates.left, boundaries.x);\n }\n\n if (axis === \"x\") {\n delete coordinates.top;\n } else if (axis === \"y\") {\n delete coordinates.left;\n }\n\n that.hint.css(coordinates);\n },\n\n _shouldIgnoreTarget: function(target) {\n var ignoreSelector = this.options.ignore;\n return ignoreSelector && $(target).is(ignoreSelector);\n },\n\n _select: function(e) {\n if (!this._shouldIgnoreTarget(e.event.target)) {\n e.preventDefault();\n }\n },\n\n _start: function(e) {\n var that = this,\n options = that.options,\n container = options.container ? $(options.container) : null,\n hint = options.hint;\n\n if (this._shouldIgnoreTarget(e.touch.initialTouch) || (options.holdToDrag && !that._activated)) {\n that.userEvents.cancel();\n return;\n }\n\n that.currentTarget = e.target;\n that.currentTargetOffset = getOffset(that.currentTarget);\n\n if (hint) {\n if (that.hint) {\n that.hint.stop(true, true).remove();\n }\n\n that.hint = kendo.isFunction(hint) ? $(hint.call(that, that.currentTarget)) : hint;\n\n var offset = getOffset(that.currentTarget);\n that.hintOffset = offset;\n\n that.hint.css( {\n position: \"absolute\",\n zIndex: 20000, // the Window's z-index is 10000 and can be raised because of z-stacking\n left: offset.left,\n top: offset.top\n })\n .appendTo(document.body);\n\n that.angular(\"compile\", function() {\n that.hint.removeAttr(\"ng-repeat\");\n var scopeTarget = $(e.target);\n\n while (!scopeTarget.data(\"$$kendoScope\") && scopeTarget.length) {\n scopeTarget = scopeTarget.parent();\n }\n\n return {\n elements: that.hint.get(),\n scopeFrom: scopeTarget.data(\"$$kendoScope\")\n };\n });\n }\n\n draggables[options.group] = that;\n\n that.dropped = false;\n\n if (container) {\n that.boundaries = containerBoundaries(container, that.hint);\n }\n\n $(document).on(KEYUP, that._captureEscape);\n\n if (that._trigger(DRAGSTART, e)) {\n that.userEvents.cancel();\n that._afterEnd();\n }\n\n that.userEvents.capture();\n },\n\n _hold: function(e) {\n this.currentTarget = e.target;\n\n if (this._trigger(HOLD, e)) {\n this.userEvents.cancel();\n } else {\n this._activated = true;\n }\n },\n\n _drag: function(e) {\n e.preventDefault();\n\n var cursorElement = this._elementUnderCursor(e);\n\n if (this.options.autoScroll && this._cursorElement !== cursorElement) {\n this._scrollableParent = findScrollableParent(cursorElement);\n this._cursorElement = cursorElement;\n }\n\n this._lastEvent = e;\n this._processMovement(e, cursorElement);\n\n if (this.options.autoScroll) {\n // chrome seems to trigger mousemove when mouse is moved outside of the window (over the Chrome), too.\n if (this._scrollableParent[0]) {\n var velocity = autoScrollVelocity(e.x.location, e.y.location, scrollableViewPort(this._scrollableParent));\n\n\n this._scrollCompenstation = $.extend({}, this.hintOffset);\n this._scrollVelocity = velocity;\n\n if (velocity.y === 0 && velocity.x === 0) {\n clearInterval(this._scrollInterval);\n this._scrollInterval = null;\n } else if (!this._scrollInterval) {\n this._scrollInterval = setInterval(this._autoScroll.bind(this), 50);\n }\n }\n }\n\n if (this.hint) {\n this._updateHint(e);\n }\n },\n\n _processMovement: function(e, cursorElement) {\n this._withDropTarget(cursorElement, function(target, targetElement) {\n if (!target) {\n if (lastDropTarget) {\n lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\n lastDropTarget = null;\n }\n return;\n }\n\n if (lastDropTarget) {\n if (targetElement === lastDropTarget.targetElement) {\n return;\n }\n\n lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\n }\n\n target._trigger(DRAGENTER, extend(e, { dropTarget: $(targetElement) }));\n lastDropTarget = extend(target, { targetElement: targetElement });\n });\n\n this._trigger(DRAG, extend(e, { dropTarget: lastDropTarget, elementUnderCursor: cursorElement }));\n },\n\n _autoScroll: function() {\n var parent = this._scrollableParent[0],\n velocity = this._scrollVelocity,\n compensation = this._scrollCompenstation;\n\n if (!parent) {\n return;\n }\n\n var cursorElement = this._elementUnderCursor(this._lastEvent);\n this._processMovement(this._lastEvent, cursorElement);\n\n var yIsScrollable, xIsScrollable;\n\n var isRootNode = parent === scrollableRoot()[0];\n\n if (isRootNode) {\n yIsScrollable = document.body.scrollHeight > $window.height();\n xIsScrollable = document.body.scrollWidth > $window.width();\n } else {\n yIsScrollable = parent.offsetHeight <= parent.scrollHeight;\n xIsScrollable = parent.offsetWidth <= parent.scrollWidth;\n }\n\n var yDelta = parent.scrollTop + velocity.y;\n var yInBounds = yIsScrollable && yDelta > 0 && yDelta < parent.scrollHeight;\n\n var xDelta = parent.scrollLeft + velocity.x;\n var xInBounds = xIsScrollable && xDelta > 0 && xDelta < parent.scrollWidth;\n\n if (yInBounds) {\n parent.scrollTop += velocity.y;\n } else if (yIsScrollable && yDelta < 0) {\n parent.scrollTop = 0;\n }\n\n if (xInBounds) {\n parent.scrollLeft += velocity.x;\n } else if (xIsScrollable && xDelta < 0) {\n parent.scrollLeft = 0;\n }\n\n if (this.hint && isRootNode && (xInBounds || yInBounds)) {\n if (yInBounds) {\n compensation.top += velocity.y;\n }\n\n if (xInBounds) {\n compensation.left += velocity.x;\n }\n\n this.hint.css(compensation);\n }\n },\n\n _end: function(e) {\n this._withDropTarget(this._elementUnderCursor(e), function(target, targetElement) {\n if (target) {\n target._drop(extend({}, e, { dropTarget: $(targetElement) }));\n lastDropTarget = null;\n }\n });\n\n clearInterval(this._scrollInterval);\n this._scrollInterval = null;\n this._cancel(this._trigger(DRAGEND, e));\n },\n\n _cancel: function(isDefaultPrevented) {\n var that = this;\n\n that._scrollableParent = null;\n this._cursorElement = null;\n clearInterval(this._scrollInterval);\n that._activated = false;\n\n if (that.hint && !that.dropped) {\n setTimeout(function() {\n that.hint.stop(true, true);\n\n if (isDefaultPrevented) {\n that._afterEndHandler();\n } else {\n that.hint.animate(that.currentTargetOffset, \"fast\", that._afterEndHandler);\n }\n }, 0);\n\n } else {\n that._afterEnd();\n }\n },\n\n _trigger: function(eventName, e) {\n var that = this;\n\n return that.trigger(\n eventName, extend(\n {},\n e.event,\n {\n x: e.x,\n y: e.y,\n currentTarget: that.currentTarget,\n initialTarget: e.touch ? e.touch.initialTouch : null,\n dropTarget: e.dropTarget,\n elementUnderCursor: e.elementUnderCursor\n }\n ));\n },\n\n _elementUnderCursor: function(e) {\n var target = elementUnderCursor(e),\n hint = this.hint;\n\n if (hint && contains(hint[0], target)) {\n hint.hide();\n target = elementUnderCursor(e);\n // IE8 does not return the element in iframe from first attempt\n if (!target) {\n target = elementUnderCursor(e);\n }\n hint.show();\n }\n\n return target;\n },\n\n _withDropTarget: function(element, callback) {\n var result,\n group = this.options.group,\n targets = dropTargets[group],\n areas = dropAreas[group];\n\n if (targets && targets.length || areas && areas.length) {\n result = checkTarget(element, targets, areas);\n\n if (result) {\n callback(result.target, result.targetElement);\n } else {\n callback();\n }\n }\n },\n\n destroy: function() {\n var that = this;\n\n Widget.fn.destroy.call(that);\n\n that._afterEnd();\n\n that.userEvents.destroy();\n\n this._scrollableParent = null;\n this._cursorElement = null;\n clearInterval(this._scrollInterval);\n\n that.currentTarget = null;\n },\n\n _afterEnd: function() {\n var that = this;\n\n if (that.hint) {\n that.hint.remove();\n }\n\n delete draggables[that.options.group];\n\n that.trigger(\"destroy\");\n that.trigger(HINTDESTROYED);\n $(document).off(KEYUP, that._captureEscape);\n }\n });\n\n kendo.ui.plugin(DropTarget);\n kendo.ui.plugin(DropTargetArea);\n kendo.ui.plugin(Draggable);\n kendo.TapCapture = TapCapture;\n kendo.containerBoundaries = containerBoundaries;\n\n extend(kendo.ui, {\n Pane: Pane,\n PaneDimensions: PaneDimensions,\n Movable: Movable\n });\n\n function scrollableViewPort(element) {\n var root = scrollableRoot()[0],\n offset,\n top,\n left;\n\n if (element[0] === root) {\n top = root.scrollTop;\n left = root.scrollLeft;\n\n return {\n top: top,\n left: left,\n bottom: top + $window.height(),\n right: left + $window.width()\n };\n } else {\n offset = element.offset();\n offset.bottom = offset.top + element.height();\n offset.right = offset.left + element.width();\n return offset;\n }\n }\n\n function scrollableRoot() {\n return $(kendo.support.browser.edge || kendo.support.browser.safari ? document.body : document.documentElement);\n }\n\n function findScrollableParent(element) {\n var root = scrollableRoot();\n\n if (!element || element === document.body || element === document.documentElement) {\n return root;\n }\n\n var parent = $(element)[0];\n\n while (parent && !kendo.isScrollable(parent) && parent !== document.body) {\n parent = parent.parentNode;\n }\n\n if (parent === document.body) {\n return root;\n }\n\n return $(parent);\n }\n\n function autoScrollVelocity(mouseX, mouseY, rect) {\n var velocity = { x: 0, y: 0 };\n\n var AUTO_SCROLL_AREA = 50;\n\n if (mouseX - rect.left < AUTO_SCROLL_AREA) {\n velocity.x = -(AUTO_SCROLL_AREA - (mouseX - rect.left));\n } else if (rect.right - mouseX < AUTO_SCROLL_AREA) {\n velocity.x = AUTO_SCROLL_AREA - (rect.right - mouseX);\n }\n\n if (mouseY - rect.top < AUTO_SCROLL_AREA) {\n velocity.y = -(AUTO_SCROLL_AREA - (mouseY - rect.top));\n } else if (rect.bottom - mouseY < AUTO_SCROLL_AREA) {\n velocity.y = AUTO_SCROLL_AREA - (rect.bottom - mouseY);\n }\n\n return velocity;\n }\n\n // export for testing\n kendo.ui.Draggable.utils = {\n autoScrollVelocity: autoScrollVelocity,\n scrollableViewPort: scrollableViewPort,\n findScrollableParent: findScrollableParent\n };\n\n })(window.kendo.jQuery);\n\n var __meta__$l = {\n id: \"popup\",\n name: \"Pop-up\",\n category: \"framework\",\n depends: [ \"core\" ],\n advanced: true\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n ui = kendo.ui,\n Widget = ui.Widget,\n Class = kendo.Class,\n support = kendo.support,\n getOffset = kendo.getOffset,\n outerWidth = kendo._outerWidth,\n outerHeight = kendo._outerHeight,\n OPEN = \"open\",\n CLOSE = \"close\",\n DEACTIVATE = \"deactivate\",\n ACTIVATE = \"activate\",\n CENTER = \"center\",\n LEFT = \"left\",\n RIGHT = \"right\",\n TOP = \"top\",\n BOTTOM = \"bottom\",\n ABSOLUTE = \"absolute\",\n HIDDEN = \"hidden\",\n BODY = \"body\",\n LOCATION = \"location\",\n POSITION = \"position\",\n VISIBLE = \"visible\",\n EFFECTS = \"effects\",\n ACTIVE = \"k-active\",\n ACTIVEBORDER = \"k-state-border\",\n ACTIVEBORDERREGEXP = /k-state-border-(\\w+)/,\n ACTIVECHILDREN = \".k-picker-wrap, .k-dropdown-wrap, .k-link\",\n MOUSEDOWN = \"down\",\n DOCUMENT_ELEMENT = $(document.documentElement),\n WINDOW = $(window),\n SCROLL = \"scroll\",\n cssPrefix = support.transitions.css,\n TRANSFORM = cssPrefix + \"transform\",\n extend = $.extend,\n NS = \".kendoPopup\",\n styles = [\"font-size\",\n \"font-family\",\n \"font-stretch\",\n \"font-style\",\n \"font-weight\",\n \"line-height\"];\n\n function contains(container, target) {\n if (!container || !target) {\n return false;\n }\n return container === target || $.contains(container, target);\n }\n\n var Popup = Widget.extend({\n init: function(element, options) {\n var that = this, parentPopup;\n\n options = options || {};\n\n if (options.isRtl) {\n options.origin = options.origin || BOTTOM + \" \" + RIGHT;\n options.position = options.position || TOP + \" \" + RIGHT;\n }\n\n Widget.fn.init.call(that, element, options);\n\n element = that.element;\n options = that.options;\n\n that.collisions = options.collision ? options.collision.split(\" \") : [];\n that.downEvent = kendo.applyEventMap(MOUSEDOWN, kendo.guid());\n\n if (that.collisions.length === 1) {\n that.collisions.push(that.collisions[0]);\n }\n\n parentPopup = $(that.options.anchor).closest(\".k-popup,.k-group\").filter(\":not([class^=km-])\"); // When popup is in another popup, make it relative.\n\n options.appendTo = $($(options.appendTo)[0] || parentPopup[0] || document.body);\n\n that.element.hide()\n .addClass(\"k-popup k-group k-reset\")\n .toggleClass(\"k-rtl\", !!options.isRtl)\n .css({ position: ABSOLUTE })\n .appendTo(options.appendTo)\n .attr(\"aria-hidden\", true)\n .on(\"mouseenter\" + NS, function() {\n that._hovered = true;\n })\n .on(\"wheel\" + NS, function(e) {\n var list = $(e.target).find(\".k-list\");\n var scrollArea = list.parent();\n if (list.length && list.is(\":visible\") && ((scrollArea.scrollTop() === 0 && e.originalEvent.deltaY < 0) ||\n (scrollArea.scrollTop() === scrollArea.prop('scrollHeight') - scrollArea.prop('offsetHeight') && e.originalEvent.deltaY > 0))) {\n e.preventDefault();\n }\n })\n .on(\"mouseleave\" + NS, function() {\n that._hovered = false;\n });\n\n that.wrapper = $();\n\n if (options.animation === false) {\n options.animation = { open: { effects: {} }, close: { hide: true, effects: {} } };\n }\n\n extend(options.animation.open, {\n complete: function() {\n that.wrapper.css({ overflow: VISIBLE }); // Forcing refresh causes flickering in mobile.\n that._activated = true;\n that._trigger(ACTIVATE);\n }\n });\n\n extend(options.animation.close, {\n complete: function() {\n that._animationClose();\n }\n });\n\n that._mousedownProxy = function(e) {\n that._mousedown(e);\n };\n\n if (support.mobileOS.android) {\n that._resizeProxy = function(e) {\n setTimeout(function() {\n that._resize(e);\n }, 600); //Logic from kendo.onResize\n };\n } else {\n that._resizeProxy = function(e) {\n that._resize(e);\n };\n }\n\n if (options.toggleTarget) {\n $(options.toggleTarget).on(options.toggleEvent + NS, that.toggle.bind(that));\n }\n },\n\n events: [\n OPEN,\n ACTIVATE,\n CLOSE,\n DEACTIVATE\n ],\n\n options: {\n name: \"Popup\",\n toggleEvent: \"click\",\n origin: BOTTOM + \" \" + LEFT,\n position: TOP + \" \" + LEFT,\n anchor: BODY,\n appendTo: null,\n collision: \"flip fit\",\n viewport: window,\n copyAnchorStyles: true,\n autosize: false,\n modal: false,\n adjustSize: {\n width: 0,\n height: 0\n },\n animation: {\n open: {\n effects: \"slideIn:down\",\n transition: true,\n duration: 200\n },\n close: { // if close animation effects are defined, they will be used instead of open.reverse\n duration: 100,\n hide: true\n }\n },\n omitOriginOffsets: false\n },\n\n _animationClose: function() {\n var that = this;\n var location = that.wrapper.data(LOCATION);\n\n that.wrapper.hide();\n\n if (location) {\n that.wrapper.css(location);\n }\n\n if (that.options.anchor != BODY) {\n that._hideDirClass();\n }\n\n that._closing = false;\n that._trigger(DEACTIVATE);\n },\n\n destroy: function() {\n var that = this,\n options = that.options,\n element = that.element.off(NS),\n parent;\n\n Widget.fn.destroy.call(that);\n\n if (options.toggleTarget) {\n $(options.toggleTarget).off(NS);\n }\n\n if (!options.modal) {\n DOCUMENT_ELEMENT.off(that.downEvent, that._mousedownProxy);\n that._toggleResize(false);\n }\n\n kendo.destroy(that.element.children());\n element.removeData();\n\n if (options.appendTo[0] === document.body) {\n parent = element.parent(\".k-animation-container\");\n\n if (parent[0]) {\n parent.remove();\n } else {\n element.remove();\n }\n }\n },\n\n open: function(x, y) {\n var that = this,\n fixed = { isFixed: !isNaN(parseInt(y,10)), x: x, y: y },\n element = that.element,\n options = that.options,\n animation, wrapper,\n anchor = $(options.anchor),\n mobile = element[0] && element.hasClass(\"km-widget\"),\n listbox = element.find(\"[role='listbox']\");\n\n if (!that.visible()) {\n if (options.copyAnchorStyles) {\n if (mobile && styles[0] == \"font-size\") {\n styles.shift();\n }\n element.css(kendo.getComputedStyles(anchor[0], styles));\n }\n\n if (element.data(\"animating\") || that._trigger(OPEN)) {\n return;\n }\n\n that._activated = false;\n\n if (!options.modal) {\n DOCUMENT_ELEMENT.off(that.downEvent, that._mousedownProxy)\n .on(that.downEvent, that._mousedownProxy);\n\n // this binding hangs iOS in editor\n // all elements in IE7/8 fire resize event, causing mayhem\n that._toggleResize(false);\n that._toggleResize(true);\n }\n\n that.wrapper = wrapper = kendo.wrap(element, options.autosize)\n .css({\n overflow: HIDDEN,\n display: \"block\",\n position: ABSOLUTE\n })\n .attr(\"aria-hidden\", false);\n\n if (listbox.attr(\"aria-label\")) {\n wrapper.attr(\"aria-label\", listbox.attr(\"aria-label\"));\n } else if (listbox.attr(\"aria-labelledby\")) {\n wrapper.attr(\"aria-labelledby\", listbox.attr(\"aria-labelledby\"));\n }\n\n if (support.mobileOS.android) {\n wrapper.css(TRANSFORM, \"translatez(0)\"); // Android is VERY slow otherwise. Should be tested in other droids as well since it may cause blur.\n }\n\n wrapper.css(POSITION);\n\n if ($(options.appendTo)[0] == document.body) {\n wrapper.css(TOP, \"-10000px\");\n }\n\n that.flipped = that._position(fixed);\n animation = that._openAnimation();\n\n if (options.anchor != BODY) {\n that._showDirClass(animation);\n }\n\n if (!element.is(\":visible\") && element.data(\"olddisplay\") === undefined$1) {\n element.show();\n element.data(\"olddisplay\", element.css(\"display\"));\n element.hide();\n }\n\n element.data(EFFECTS, animation.effects)\n .kendoStop(true)\n .kendoAnimate(animation)\n .attr(\"aria-hidden\", false);\n }\n },\n\n _location: function(isFixed) {\n var that = this,\n element = that.element,\n options = that.options,\n wrapper,\n anchor = $(options.anchor),\n mobile = element[0] && element.hasClass(\"km-widget\");\n\n if (options.copyAnchorStyles) {\n if (mobile && styles[0] == \"font-size\") {\n styles.shift();\n }\n element.css(kendo.getComputedStyles(anchor[0], styles));\n }\n\n that.wrapper = wrapper = kendo.wrap(element, options.autosize)\n .css({\n overflow: HIDDEN,\n display: \"block\",\n position: ABSOLUTE\n });\n\n if (support.mobileOS.android) {\n wrapper.css(TRANSFORM, \"translatez(0)\"); // Android is VERY slow otherwise. Should be tested in other droids as well since it may cause blur.\n }\n\n wrapper.css(POSITION);\n\n if ($(options.appendTo)[0] == document.body) {\n wrapper.css(TOP, \"-10000px\");\n }\n\n that._position(isFixed || {});\n\n var offset = wrapper.offset();\n return {\n width: kendo._outerWidth(wrapper),\n height: kendo._outerHeight(wrapper),\n left: offset.left,\n top: offset.top\n };\n },\n\n _openAnimation: function() {\n var animation = extend(true, {}, this.options.animation.open);\n animation.effects = kendo.parseEffects(animation.effects, this.flipped);\n\n return animation;\n },\n\n _hideDirClass: function() {\n var anchor = $(this.options.anchor);\n var direction = ((anchor.attr(\"class\") || \"\").match(ACTIVEBORDERREGEXP) || [\"\", \"down\"])[1];\n var dirClass = ACTIVEBORDER + \"-\" + direction;\n\n anchor\n .removeClass(dirClass)\n .children(ACTIVECHILDREN)\n .removeClass(ACTIVE)\n .removeClass(dirClass);\n\n this.element.removeClass(ACTIVEBORDER + \"-\" + kendo.directions[direction].reverse);\n },\n\n _showDirClass: function(animation) {\n var direction = animation.effects.slideIn ? animation.effects.slideIn.direction : \"down\";\n var dirClass = ACTIVEBORDER + \"-\" + direction;\n\n $(this.options.anchor)\n .addClass(dirClass)\n .children(ACTIVECHILDREN)\n .addClass(ACTIVE)\n .addClass(dirClass);\n\n this.element.addClass(ACTIVEBORDER + \"-\" + kendo.directions[direction].reverse);\n },\n\n position: function() {\n if (this.visible()) {\n this.flipped = this._position();\n //this._hideDirClass();\n //this._showDirClass(this._openAnimation());\n }\n },\n\n toggle: function() {\n var that = this;\n\n that[that.visible() ? CLOSE : OPEN]();\n },\n\n visible: function() {\n return this.element.is(\":\" + VISIBLE);\n },\n\n close: function(skipEffects) {\n var that = this,\n options = that.options, wrap,\n animation, openEffects, closeEffects;\n\n if (that.visible()) {\n wrap = (that.wrapper[0] ? that.wrapper : kendo.wrap(that.element).hide());\n\n that._toggleResize(false);\n\n if (that._closing || that._trigger(CLOSE)) {\n that._toggleResize(true);\n return;\n }\n\n // Close all inclusive popups.\n that.element.find(\".k-popup\").each(function() {\n var that = $(this),\n popup = that.data(\"kendoPopup\");\n\n if (popup) {\n popup.close(skipEffects);\n }\n });\n\n DOCUMENT_ELEMENT.off(that.downEvent, that._mousedownProxy);\n\n if (skipEffects) {\n animation = { hide: true, effects: {} };\n } else {\n animation = extend(true, {}, options.animation.close);\n openEffects = that.element.data(EFFECTS);\n closeEffects = animation.effects;\n\n if (!closeEffects && !kendo.size(closeEffects) && openEffects && kendo.size(openEffects)) {\n animation.effects = openEffects;\n animation.reverse = true;\n }\n\n that._closing = true;\n }\n\n that.element\n .kendoStop(true)\n .attr(\"aria-hidden\", true);\n wrap\n .css({ overflow: HIDDEN }) // stop callback will remove hidden overflow\n .attr(\"aria-hidden\", true);\n that.element.kendoAnimate(animation);\n\n if (skipEffects) {\n that._animationClose();\n }\n }\n },\n\n _trigger: function(ev) {\n return this.trigger(ev, { type: ev });\n },\n\n _resize: function(e) {\n var that = this;\n\n if (support.resize.indexOf(e.type) !== -1) {\n clearTimeout(that._resizeTimeout);\n that._resizeTimeout = setTimeout(function() {\n that._position();\n that._resizeTimeout = null;\n }, 50);\n } else {\n if (!that._hovered || (that._activated && that.element.find(\".k-list\").length > 0)) {\n that.close();\n }\n }\n },\n\n _toggleResize: function(toggle) {\n var method = toggle ? \"on\" : \"off\";\n var eventNames = support.resize;\n\n if (!(support.mobileOS.ios || support.mobileOS.android || support.browser.safari)) {\n eventNames += \" \" + SCROLL;\n }\n\n if (toggle && !this.scrollableParents) {\n this.scrollableParents = this._scrollableParents();\n }\n\n if (this.scrollableParents && this.scrollableParents.length) {\n this.scrollableParents[method](SCROLL, this._resizeProxy);\n }\n\n WINDOW[method](eventNames, this._resizeProxy);\n },\n\n _mousedown: function(e) {\n var that = this,\n container = that.element[0],\n options = that.options,\n anchor = $(options.anchor)[0],\n toggleTarget = options.toggleTarget,\n target = kendo.eventTarget(e),\n popup = $(target).closest(\".k-popup\"),\n mobile = popup.parent().parent(\".km-shim\").length;\n\n popup = popup[0];\n if (!mobile && popup && popup !== that.element[0]) {\n return;\n }\n\n // This MAY result in popup not closing in certain cases.\n if ($(e.target).closest(\"a\").data(\"rel\") === \"popover\") {\n return;\n }\n\n if (!contains(container, target) && !contains(anchor, target) && !(toggleTarget && contains($(toggleTarget)[0], target))) {\n that.close();\n }\n },\n\n _fit: function(position, size, viewPortSize) {\n var output = 0;\n\n if (position + size > viewPortSize) {\n output = viewPortSize - (position + size);\n }\n\n if (position < 0) {\n output = -position;\n }\n\n return output;\n },\n\n _flip: function(offset, size, anchorSize, viewPortSize, origin, position, boxSize) {\n var output = 0;\n boxSize = boxSize || size;\n\n if (position !== origin && position !== CENTER && origin !== CENTER) {\n if (offset + boxSize > viewPortSize) {\n output += -(anchorSize + size);\n }\n\n if (offset + output < 0) {\n output += anchorSize + size;\n }\n }\n return output;\n },\n\n _scrollableParents: function() {\n return $(this.options.anchor)\n .parentsUntil(\"body\")\n .filter(function(index, element) {\n return kendo.isScrollable(element);\n });\n },\n\n _position: function(fixed) {\n var that = this,\n //element = that.element.css(POSITION, \"\"), /* fixes telerik/kendo-ui-core#790, comes from telerik/kendo#615 */\n element = that.element,\n wrapper = that.wrapper,\n options = that.options,\n viewport = $(options.viewport),\n zoomLevel = support.zoomLevel(),\n isWindow = !!((viewport[0] == window) && window.innerWidth && (zoomLevel <= 1.02)),\n anchor = $(options.anchor),\n origins = options.origin.toLowerCase().split(\" \"),\n positions = options.position.toLowerCase().split(\" \"),\n collisions = that.collisions,\n siblingContainer, parents,\n parentZIndex, zIndex = 10002,\n idx = 0,\n docEl = document.documentElement,\n length, viewportOffset, viewportWidth, viewportHeight;\n\n if (options.viewport === window) {\n viewportOffset = {\n top: (window.pageYOffset || document.documentElement.scrollTop || 0),\n left: (window.pageXOffset || document.documentElement.scrollLeft || 0)\n };\n } else {\n viewportOffset = viewport.offset();\n }\n\n if (isWindow) {\n viewportWidth = window.innerWidth;\n viewportHeight = window.innerHeight;\n } else {\n viewportWidth = viewport.width();\n viewportHeight = viewport.height();\n }\n\n if (isWindow && docEl.scrollHeight - docEl.clientHeight > 0) {\n var sign = options.isRtl ? -1 : 1;\n\n viewportWidth -= sign * kendo.support.scrollbar();\n }\n\n siblingContainer = anchor.parents().filter(wrapper.siblings());\n\n if (siblingContainer[0]) {\n parentZIndex = Math.max(Number(siblingContainer.css(\"zIndex\")), 0);\n\n // set z-index to be more than that of the container/sibling\n // compensate with more units for window z-stack\n if (parentZIndex) {\n zIndex = parentZIndex + 10;\n } else {\n parents = anchor.parentsUntil(siblingContainer);\n for (length = parents.length; idx < length; idx++) {\n parentZIndex = Number($(parents[idx]).css(\"zIndex\"));\n if (parentZIndex && zIndex < parentZIndex) {\n zIndex = parentZIndex + 10;\n }\n }\n }\n }\n\n wrapper.css(\"zIndex\", zIndex);\n\n if (fixed && fixed.isFixed) {\n wrapper.css({ left: fixed.x, top: fixed.y });\n } else {\n wrapper.css(that._align(origins, positions));\n }\n\n var pos = getOffset(wrapper, POSITION, anchor[0] === wrapper.offsetParent()[0]),\n offset = getOffset(wrapper),\n anchorParent = anchor.offsetParent().parent(\".k-animation-container,.k-popup,.k-group\"); // If the parent is positioned, get the current positions\n\n if (anchorParent.length) {\n pos = getOffset(wrapper, POSITION, true);\n offset = getOffset(wrapper);\n }\n\n offset.top -= viewportOffset.top;\n offset.left -= viewportOffset.left;\n\n if (!that.wrapper.data(LOCATION)) { // Needed to reset the popup location after every closure - fixes the resize bugs.\n wrapper.data(LOCATION, extend({}, pos));\n }\n\n var offsets = extend({}, offset),\n location = extend({}, pos),\n adjustSize = options.adjustSize;\n\n if (collisions[0] === \"fit\") {\n location.top += that._fit(offsets.top, outerHeight(wrapper) + adjustSize.height, viewportHeight / zoomLevel);\n }\n\n if (collisions[1] === \"fit\") {\n location.left += that._fit(offsets.left, outerWidth(wrapper) + adjustSize.width, viewportWidth / zoomLevel);\n }\n\n var flipPos = extend({}, location);\n var elementHeight = outerHeight(element);\n var wrapperHeight = outerHeight(wrapper);\n\n if (!wrapper.height() && elementHeight) {\n wrapperHeight = wrapperHeight + elementHeight;\n }\n\n if (collisions[0] === \"flip\") {\n location.top += that._flip(offsets.top, elementHeight, outerHeight(anchor), viewportHeight / zoomLevel, origins[0], positions[0], wrapperHeight);\n }\n\n if (collisions[1] === \"flip\") {\n location.left += that._flip(offsets.left, outerWidth(element), outerWidth(anchor), viewportWidth / zoomLevel, origins[1], positions[1], outerWidth(wrapper));\n }\n\n element.css(POSITION, ABSOLUTE);\n wrapper.css(location);\n\n return (location.left != flipPos.left || location.top != flipPos.top);\n },\n\n _align: function(origin, position) {\n var that = this,\n element = that.wrapper,\n anchor = $(that.options.anchor),\n verticalOrigin = origin[0],\n horizontalOrigin = origin[1],\n verticalPosition = position[0],\n horizontalPosition = position[1],\n anchorOffset = getOffset(anchor),\n appendTo = $(that.options.appendTo),\n appendToOffset,\n width = outerWidth(element),\n height = outerHeight(element) || outerHeight(element.children().first()),\n anchorWidth = outerWidth(anchor),\n anchorHeight = outerHeight(anchor),\n top = that.options.omitOriginOffsets ? 0 : anchorOffset.top,\n left = that.options.omitOriginOffsets ? 0 : anchorOffset.left,\n round = Math.round;\n\n if (appendTo[0] != document.body) {\n appendToOffset = getOffset(appendTo);\n top -= appendToOffset.top;\n left -= appendToOffset.left;\n }\n\n\n if (verticalOrigin === BOTTOM) {\n top += anchorHeight;\n }\n\n if (verticalOrigin === CENTER) {\n top += round(anchorHeight / 2);\n }\n\n if (verticalPosition === BOTTOM) {\n top -= height;\n }\n\n if (verticalPosition === CENTER) {\n top -= round(height / 2);\n }\n\n if (horizontalOrigin === RIGHT) {\n left += anchorWidth;\n }\n\n if (horizontalOrigin === CENTER) {\n left += round(anchorWidth / 2);\n }\n\n if (horizontalPosition === RIGHT) {\n left -= width;\n }\n\n if (horizontalPosition === CENTER) {\n left -= round(width / 2);\n }\n\n return {\n top: top,\n left: left\n };\n }\n });\n\n ui.plugin(Popup);\n\n var stableSort = kendo.support.stableSort;\n var tabKeyTrapNS = \"kendoTabKeyTrap\";\n var focusableNodesSelector = \"a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex], *[contenteditable]\";\n var TabKeyTrap = Class.extend({\n init: function(element) {\n this.element = $(element);\n this.element.autoApplyNS(tabKeyTrapNS);\n },\n\n trap: function() {\n this.element.on(\"keydown\", this._keepInTrap.bind(this));\n },\n\n removeTrap: function() {\n this.element.kendoDestroy(tabKeyTrapNS);\n },\n\n destroy: function() {\n this.element.kendoDestroy(tabKeyTrapNS);\n this.element = undefined$1;\n },\n\n shouldTrap: function() {\n return true;\n },\n\n _keepInTrap: function(e) {\n if (e.which !== 9 || !this.shouldTrap() || e.isDefaultPrevented()) {\n return;\n }\n\n var elements = this._focusableElements();\n var sortedElements = this._sortFocusableElements(elements);\n var next = this._nextFocusable(e, sortedElements);\n\n this._focus(next);\n\n e.preventDefault();\n },\n _focusableElements: function() {\n var elements = this.element.find(focusableNodesSelector).filter(function(i, item) {\n return item.tabIndex >= 0 && $(item).is(':visible') && !$(item).is('[disabled]');\n });\n\n if (this.element.is(\"[tabindex]\")) {\n elements.push(this.element[0]);\n }\n\n return elements;\n },\n _sortFocusableElements: function(elements) {\n var sortedElements;\n\n if (stableSort) {\n sortedElements = elements.sort(function(prev, next) {\n return prev.tabIndex - next.tabIndex;\n });\n } else {\n var attrName = \"__k_index\";\n elements.each(function(i, item) {\n item.setAttribute(attrName, i);\n });\n\n sortedElements = elements.sort(function(prev, next) {\n return prev.tabIndex === next.tabIndex ?\n parseInt(prev.getAttribute(attrName), 10) - parseInt(next.getAttribute(attrName), 10) :\n prev.tabIndex - next.tabIndex;\n });\n\n elements.removeAttr(attrName);\n }\n\n return sortedElements;\n },\n _nextFocusable: function(e, elements) {\n var count = elements.length;\n var current = elements.index(e.target);\n\n return elements.get((current + (e.shiftKey ? -1 : 1)) % count);\n },\n _focus: function(element) {\n if (element.nodeName == \"IFRAME\") {\n element.contentWindow.document.body.focus();\n return;\n }\n\n element.focus();\n\n if (element.nodeName == \"INPUT\" && element.setSelectionRange && this._haveSelectionRange(element)) {\n element.setSelectionRange(0, element.value.length);\n }\n },\n _haveSelectionRange: function(element) {\n var elementType = element.type.toLowerCase();\n\n return elementType === \"text\" || elementType === \"search\" ||\n elementType === \"url\" || elementType === \"tel\" ||\n elementType === \"password\";\n }\n });\n ui.Popup.TabKeyTrap = TabKeyTrap;\n })(window.kendo.jQuery);\n\n var __meta__$k = {\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\n var __meta__$j = {\n id: \"mobile.scroller\",\n name: \"Scroller\",\n category: \"mobile\",\n description: \"The Kendo Mobile Scroller widget enables touch friendly kinetic scrolling for the contents of a given DOM element.\",\n depends: [ \"fx\", \"draganddrop\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n mobile = kendo.mobile,\n fx = kendo.effects,\n ui = mobile.ui,\n extend = $.extend,\n Widget = ui.Widget,\n Class = kendo.Class,\n Movable = kendo.ui.Movable,\n Pane = kendo.ui.Pane,\n PaneDimensions = kendo.ui.PaneDimensions,\n Transition = fx.Transition,\n Animation = fx.Animation,\n abs = Math.abs,\n SNAPBACK_DURATION = 500,\n SCROLLBAR_OPACITY = 0.7,\n FRICTION = 0.96,\n VELOCITY_MULTIPLIER = 10,\n MAX_VELOCITY = 55,\n OUT_OF_BOUNDS_FRICTION = 0.5,\n ANIMATED_SCROLLER_PRECISION = 5,\n RELEASECLASS = \"km-scroller-release\",\n REFRESHCLASS = \"km-scroller-refresh\",\n PULL = \"pull\",\n CHANGE = \"change\",\n RESIZE = \"resize\",\n SCROLL = \"scroll\",\n MOUSE_WHEEL_ID = 2;\n\n var ZoomSnapBack = Animation.extend({\n init: function(options) {\n var that = this;\n Animation.fn.init.call(that);\n extend(that, options);\n\n that.userEvents.bind(\"gestureend\", that.start.bind(that));\n that.tapCapture.bind(\"press\", that.cancel.bind(that));\n },\n\n enabled: function() {\n return this.movable.scale < this.dimensions.minScale;\n },\n\n done: function() {\n return this.dimensions.minScale - this.movable.scale < 0.01;\n },\n\n tick: function() {\n var movable = this.movable;\n movable.scaleWith(1.1);\n this.dimensions.rescale(movable.scale);\n },\n\n onEnd: function() {\n var movable = this.movable;\n movable.scaleTo(this.dimensions.minScale);\n this.dimensions.rescale(movable.scale);\n }\n });\n\n var DragInertia = Animation.extend({\n init: function(options) {\n var that = this;\n\n Animation.fn.init.call(that);\n\n extend(that, options, {\n transition: new Transition({\n axis: options.axis,\n movable: options.movable,\n onEnd: function() { that._end(); }\n })\n });\n\n that.tapCapture.bind(\"press\", function() { that.cancel(); });\n that.userEvents.bind(\"end\", that.start.bind(that));\n that.userEvents.bind(\"gestureend\", that.start.bind(that));\n that.userEvents.bind(\"tap\", that.onEnd.bind(that));\n },\n\n onCancel: function() {\n this.transition.cancel();\n },\n\n freeze: function(location) {\n var that = this;\n that.cancel();\n that._moveTo(location);\n },\n\n onEnd: function() {\n var that = this;\n if (that.paneAxis.outOfBounds()) {\n that._snapBack();\n } else {\n that._end();\n }\n },\n\n done: function() {\n return abs(this.velocity) < 1;\n },\n\n start: function(e) {\n var that = this,\n velocity;\n\n if (!that.dimension.enabled) { return; }\n\n if (that.paneAxis.outOfBounds()) {\n if (that.transition._started) {\n that.transition.cancel();\n that.velocity = Math.min(e.touch[that.axis].velocity * that.velocityMultiplier, MAX_VELOCITY);\n\n Animation.fn.start.call(that);\n } else {\n that._snapBack();\n }\n } else {\n velocity = e.touch.id === MOUSE_WHEEL_ID ? 0 : e.touch[that.axis].velocity;\n that.velocity = Math.max(Math.min(velocity * that.velocityMultiplier, MAX_VELOCITY), -MAX_VELOCITY);\n\n that.tapCapture.captureNext();\n Animation.fn.start.call(that);\n }\n },\n\n tick: function() {\n var that = this,\n dimension = that.dimension,\n friction = that.paneAxis.outOfBounds() ? OUT_OF_BOUNDS_FRICTION : that.friction,\n delta = (that.velocity *= friction),\n location = that.movable[that.axis] + delta;\n\n if (!that.elastic && dimension.outOfBounds(location)) {\n location = Math.max(Math.min(location, dimension.max), dimension.min);\n that.velocity = 0;\n }\n\n that.movable.moveAxis(that.axis, location);\n },\n\n _end: function() {\n this.tapCapture.cancelCapture();\n this.end();\n },\n\n _snapBack: function() {\n var that = this,\n dimension = that.dimension,\n snapBack = that.movable[that.axis] > dimension.max ? dimension.max : dimension.min;\n that._moveTo(snapBack);\n },\n\n _moveTo: function(location) {\n this.transition.moveTo({ location: location, duration: SNAPBACK_DURATION, ease: Transition.easeOutExpo });\n }\n });\n\n var AnimatedScroller = Animation.extend({\n init: function(options) {\n var that = this;\n\n kendo.effects.Animation.fn.init.call(this);\n\n extend(that, options, {\n origin: {},\n destination: {},\n offset: {}\n });\n },\n\n tick: function() {\n this._updateCoordinates();\n this.moveTo(this.origin);\n },\n\n done: function() {\n return abs(this.offset.y) < ANIMATED_SCROLLER_PRECISION && abs(this.offset.x) < ANIMATED_SCROLLER_PRECISION;\n },\n\n onEnd: function() {\n this.moveTo(this.destination);\n if (this.callback) {\n this.callback.call();\n }\n },\n\n setCoordinates: function(from, to) {\n this.offset = {};\n this.origin = from;\n this.destination = to;\n },\n\n setCallback: function(callback) {\n if (callback && kendo.isFunction(callback)) {\n this.callback = callback;\n } else {\n callback = undefined$1;\n }\n },\n\n _updateCoordinates: function() {\n this.offset = {\n x: (this.destination.x - this.origin.x) / 4,\n y: (this.destination.y - this.origin.y) / 4\n };\n\n this.origin = {\n y: this.origin.y + this.offset.y,\n x: this.origin.x + this.offset.x\n };\n }\n });\n\n var ScrollBar = Class.extend({\n init: function(options) {\n var that = this,\n horizontal = options.axis === \"x\",\n element = $('
    ');\n\n if (horizontal) {\n element.attr(\"aria-orientation\", \"horizontal\");\n }\n\n extend(that, options, {\n element: element,\n elementSize: 0,\n movable: new Movable(element),\n scrollMovable: options.movable,\n alwaysVisible: options.alwaysVisible,\n size: horizontal ? \"width\" : \"height\"\n });\n\n that.scrollMovable.bind(CHANGE, that.refresh.bind(that));\n that.container.append(element);\n if (options.alwaysVisible) {\n that.show();\n }\n },\n\n refresh: function() {\n var that = this,\n axis = that.axis,\n dimension = that.dimension,\n paneSize = dimension.size,\n scrollMovable = that.scrollMovable,\n sizeRatio = paneSize / dimension.total,\n position = Math.round(-scrollMovable[axis] * sizeRatio),\n size = Math.round(paneSize * sizeRatio);\n\n if (sizeRatio >= 1) {\n this.element.css(\"display\", \"none\");\n } else {\n this.element.css(\"display\", \"\");\n }\n\n if (position + size > paneSize) {\n size = paneSize - position;\n } else if (position < 0) {\n size += position;\n position = 0;\n }\n\n if (that.elementSize != size) {\n that.element.css(that.size, size + \"px\");\n that.elementSize = size;\n }\n\n that._ariaValue(position, dimension.size - that.elementSize);\n\n that.movable.moveAxis(axis, position);\n },\n\n show: function() {\n this.element.css({ opacity: SCROLLBAR_OPACITY, visibility: \"visible\" });\n },\n\n hide: function() {\n if (!this.alwaysVisible) {\n this.element.css({ opacity: 0 });\n }\n },\n\n _ariaValue: function(current, total) {\n var element = this.element;\n\n if (current > total) {\n current = total;\n }\n\n element.attr(\"aria-valuemax\", total);\n element.attr(\"aria-valuenow\", current);\n }\n });\n\n var Scroller = Widget.extend({\n init: function(element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n\n element = that.element;\n\n that._native = that.options.useNative && kendo.support.hasNativeScrolling;\n if (that._native) {\n element.addClass(\"km-native-scroller\")\n .prepend('
    ');\n\n extend(that, {\n scrollElement: element,\n fixedContainer: element.children().first()\n });\n\n return;\n }\n\n element\n .css(\"overflow\", \"hidden\")\n .addClass(\"km-scroll-wrapper\")\n .wrapInner('
    ')\n .prepend('
    ');\n\n var inner = element.children().eq(1),\n\n tapCapture = new kendo.TapCapture(element),\n\n movable = new Movable(inner),\n\n dimensions = new PaneDimensions({\n element: inner,\n container: element,\n forcedEnabled: that.options.zoom\n }),\n\n avoidScrolling = this.options.avoidScrolling,\n\n userEvents = new kendo.UserEvents(element, {\n touchAction: \"pan-y\",\n fastTap: true,\n allowSelection: true,\n preventDragEvent: true,\n captureUpIfMoved: true,\n multiTouch: that.options.zoom,\n supportDoubleTap: that.options.supportDoubleTap,\n start: function(e) {\n dimensions.refresh();\n\n var velocityX = abs(e.x.velocity),\n velocityY = abs(e.y.velocity),\n horizontalSwipe = velocityX * 2 >= velocityY,\n originatedFromFixedContainer = $.contains(that.fixedContainer[0], e.event.target),\n verticalSwipe = velocityY * 2 >= velocityX;\n\n\n if (!originatedFromFixedContainer && !avoidScrolling(e) && that.enabled && (dimensions.x.enabled && horizontalSwipe || dimensions.y.enabled && verticalSwipe)) {\n userEvents.capture();\n } else {\n userEvents.cancel();\n }\n }\n }),\n\n pane = new Pane({\n movable: movable,\n dimensions: dimensions,\n userEvents: userEvents,\n elastic: that.options.elastic\n }),\n\n zoomSnapBack = new ZoomSnapBack({\n movable: movable,\n dimensions: dimensions,\n userEvents: userEvents,\n tapCapture: tapCapture\n }),\n\n animatedScroller = new AnimatedScroller({\n moveTo: function(coordinates) {\n that.scrollTo(coordinates.x, coordinates.y);\n }\n });\n\n movable.bind(CHANGE, function() {\n that.scrollTop = - movable.y;\n that.scrollLeft = - movable.x;\n\n that.trigger(SCROLL, {\n scrollTop: that.scrollTop,\n scrollLeft: that.scrollLeft\n });\n });\n\n if (that.options.mousewheelScrolling) {\n element.on(\"DOMMouseScroll mousewheel\", this._wheelScroll.bind(this));\n }\n\n extend(that, {\n movable: movable,\n dimensions: dimensions,\n zoomSnapBack: zoomSnapBack,\n animatedScroller: animatedScroller,\n userEvents: userEvents,\n pane: pane,\n tapCapture: tapCapture,\n pulled: false,\n enabled: true,\n scrollElement: inner,\n scrollTop: 0,\n scrollLeft: 0,\n fixedContainer: element.children().first()\n });\n\n that._initAxis(\"x\");\n that._initAxis(\"y\");\n\n // build closure\n that._wheelEnd = function() {\n that._wheel = false;\n that.userEvents.end(0, that._wheelY);\n };\n\n dimensions.refresh();\n\n if (that.options.pullToRefresh) {\n that._initPullToRefresh();\n }\n },\n\n _wheelScroll: function(e) {\n if (e.ctrlKey) {\n return;\n }\n\n if (!this._wheel) {\n this._wheel = true;\n this._wheelY = 0;\n this.userEvents.press(0, this._wheelY);\n }\n\n clearTimeout(this._wheelTimeout);\n this._wheelTimeout = setTimeout(this._wheelEnd, 50);\n\n var delta = kendo.wheelDeltaY(e);\n\n if (delta) {\n this._wheelY += delta;\n this.userEvents.move(0, this._wheelY);\n }\n\n e.preventDefault();\n },\n\n makeVirtual: function() {\n this.dimensions.y.makeVirtual();\n },\n\n virtualSize: function(min, max) {\n this.dimensions.y.virtualSize(min, max);\n },\n\n height: function() {\n return this.dimensions.y.size;\n },\n\n scrollHeight: function() {\n return this.scrollElement[0].scrollHeight;\n },\n\n scrollWidth: function() {\n return this.scrollElement[0].scrollWidth;\n },\n\n options: {\n name: \"Scroller\",\n zoom: false,\n pullOffset: 140,\n visibleScrollHints: false,\n elastic: true,\n useNative: false,\n mousewheelScrolling: true,\n avoidScrolling: function() { return false; },\n pullToRefresh: false,\n messages: {\n pullTemplate: \"Pull to refresh\",\n releaseTemplate: \"Release to refresh\",\n refreshTemplate: \"Refreshing\"\n }\n },\n\n events: [\n PULL,\n SCROLL,\n RESIZE\n ],\n\n _resize: function() {\n if (!this._native) {\n this.contentResized();\n }\n },\n\n setOptions: function(options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n if (options.pullToRefresh) {\n that._initPullToRefresh();\n }\n },\n\n reset: function() {\n if (this._native) {\n this.scrollElement.scrollTop(0);\n } else {\n this.movable.moveTo({ x: 0, y: 0 });\n this._scale(1);\n }\n },\n\n contentResized: function() {\n this.dimensions.refresh();\n if (this.pane.x.outOfBounds()) {\n this.movable.moveAxis(\"x\", this.dimensions.x.min);\n }\n\n if (this.pane.y.outOfBounds()) {\n this.movable.moveAxis(\"y\", this.dimensions.y.min);\n }\n },\n\n zoomOut: function() {\n var dimensions = this.dimensions;\n dimensions.refresh();\n this._scale(dimensions.fitScale);\n this.movable.moveTo(dimensions.centerCoordinates());\n },\n\n enable: function() {\n this.enabled = true;\n },\n\n disable: function() {\n this.enabled = false;\n },\n\n scrollTo: function(x, y) {\n if (this._native) {\n kendo.scrollLeft(this.scrollElement, abs(x));\n this.scrollElement.scrollTop(abs(y));\n } else {\n this.dimensions.refresh();\n this.movable.moveTo({ x: x, y: y });\n }\n },\n\n animatedScrollTo: function(x, y, callback) {\n var from,\n to;\n\n if (this._native) {\n this.scrollTo(x, y);\n } else {\n from = { x: this.movable.x, y: this.movable.y };\n to = { x: x, y: y };\n\n this.animatedScroller.setCoordinates(from, to);\n this.animatedScroller.setCallback(callback);\n this.animatedScroller.start();\n }\n },\n\n pullHandled: function() {\n var that = this;\n that.refreshHint.removeClass(REFRESHCLASS);\n that.hintContainer.html(that.pullTemplate({}));\n that.yinertia.onEnd();\n that.xinertia.onEnd();\n that.userEvents.cancel();\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n if (this.userEvents) {\n this.userEvents.destroy();\n }\n },\n\n _scale: function(scale) {\n this.dimensions.rescale(scale);\n this.movable.scaleTo(scale);\n },\n\n _initPullToRefresh: function() {\n var that = this;\n\n that.dimensions.y.forceEnabled();\n that.pullTemplate = kendo.template(that.options.messages.pullTemplate);\n that.releaseTemplate = kendo.template(that.options.messages.releaseTemplate);\n that.refreshTemplate = kendo.template(that.options.messages.refreshTemplate);\n\n that.scrollElement.prepend('' + that.pullTemplate({}) + '');\n that.refreshHint = that.scrollElement.children().first();\n that.hintContainer = that.refreshHint.children(\".km-template\");\n\n that.pane.y.bind(\"change\", that._paneChange.bind(that));\n that.userEvents.bind(\"end\", that._dragEnd.bind(that));\n },\n\n _dragEnd: function() {\n var that = this;\n\n if (!that.pulled) {\n return;\n }\n\n that.pulled = false;\n that.refreshHint.removeClass(RELEASECLASS).addClass(REFRESHCLASS);\n that.hintContainer.html(that.refreshTemplate({}));\n that.yinertia.freeze(that.options.pullOffset / 2);\n that.trigger(\"pull\");\n },\n\n _paneChange: function() {\n var that = this;\n\n if (that.movable.y / OUT_OF_BOUNDS_FRICTION > that.options.pullOffset) {\n if (!that.pulled) {\n that.pulled = true;\n that.refreshHint.removeClass(REFRESHCLASS).addClass(RELEASECLASS);\n that.hintContainer.html(that.releaseTemplate({}));\n }\n } else if (that.pulled) {\n that.pulled = false;\n that.refreshHint.removeClass(RELEASECLASS);\n that.hintContainer.html(that.pullTemplate({}));\n }\n },\n\n _initAxis: function(axis) {\n var that = this,\n elementId = that.element.attr(\"id\"),\n movable = that.movable,\n dimension = that.dimensions[axis],\n tapCapture = that.tapCapture,\n paneAxis = that.pane[axis],\n scrollBar;\n\n if (!elementId) {\n elementId = kendo.guid();\n that.element.attr(\"id\", elementId);\n }\n\n scrollBar = new ScrollBar({\n axis: axis,\n movable: movable,\n dimension: dimension,\n container: that.element,\n alwaysVisible: that.options.visibleScrollHints,\n controlsId: elementId\n });\n\n dimension.bind(CHANGE, function() {\n scrollBar.refresh();\n });\n\n paneAxis.bind(CHANGE, function() {\n scrollBar.show();\n });\n\n that[axis + \"inertia\"] = new DragInertia({\n axis: axis,\n paneAxis: paneAxis,\n movable: movable,\n tapCapture: tapCapture,\n userEvents: that.userEvents,\n dimension: dimension,\n elastic: that.options.elastic,\n friction: that.options.friction || FRICTION,\n velocityMultiplier: that.options.velocityMultiplier || VELOCITY_MULTIPLIER,\n end: function() {\n scrollBar.hide();\n that.trigger(\"scrollEnd\", {\n axis: axis,\n scrollTop: that.scrollTop,\n scrollLeft: that.scrollLeft\n });\n }\n });\n }\n });\n\n ui.plugin(Scroller);\n })(window.kendo.jQuery);\n\n var __meta__$i = {\n id: \"mobile.view\",\n name: \"View\",\n category: \"mobile\",\n description: \"Mobile View\",\n depends: [ \"core\", \"fx\", \"mobile.scroller\", \"view\" ],\n hidden: true\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n mobile = kendo.mobile,\n ui = mobile.ui,\n attr = kendo.attr,\n Widget = ui.Widget,\n ViewClone = kendo.ViewClone,\n INIT = \"init\",\n UI_OVERLAY = '
    ',\n BEFORE_SHOW = \"beforeShow\",\n SHOW = \"show\",\n AFTER_SHOW = \"afterShow\",\n BEFORE_HIDE = \"beforeHide\",\n TRANSITION_END = \"transitionEnd\",\n TRANSITION_START = \"transitionStart\",\n HIDE = \"hide\",\n DESTROY = \"destroy\",\n attrValue = kendo.attrValue,\n roleSelector = kendo.roleSelector,\n directiveSelector = kendo.directiveSelector,\n compileMobileDirective = kendo.compileMobileDirective;\n\n function initPopOvers(element) {\n var popovers = element.find(roleSelector(\"popover\")),\n idx, length,\n roles = ui.roles;\n\n for (idx = 0, length = popovers.length; idx < length; idx ++) {\n kendo.initWidget(popovers[idx], {}, roles);\n }\n }\n\n function preventScrollIfNotInput(e) {\n if (!kendo.triggeredByInput(e)) {\n e.preventDefault();\n }\n }\n\n var View = Widget.extend({\n init: function(element, options) {\n Widget.fn.init.call(this, element, options);\n this.params = {};\n\n $.extend(this, options);\n\n this.transition = this.transition || this.defaultTransition;\n\n this._id();\n\n if (!this.options.$angular) {\n this._layout();\n this._overlay();\n this._scroller();\n this._model();\n } else {\n this._overlay();\n }\n },\n\n events: [\n INIT,\n BEFORE_SHOW,\n SHOW,\n AFTER_SHOW,\n BEFORE_HIDE,\n HIDE,\n DESTROY,\n TRANSITION_START,\n TRANSITION_END\n ],\n\n options: {\n name: \"View\",\n title: \"\",\n layout: null,\n getLayout: $.noop,\n reload: false,\n transition: \"\",\n defaultTransition: \"\",\n useNativeScrolling: false,\n stretch: false,\n zoom: false,\n model: null,\n modelScope: window,\n scroller: {},\n initWidgets: true\n },\n\n enable: function(enable) {\n if (typeof enable == \"undefined\") {\n enable = true;\n }\n\n if (enable) {\n this.overlay.hide();\n } else {\n this.overlay.show();\n }\n },\n\n destroy: function() {\n if (this.layout) {\n this.layout.detach(this);\n }\n\n this.trigger(DESTROY);\n\n\n Widget.fn.destroy.call(this);\n\n if (this.scroller) {\n this.scroller.destroy();\n }\n\n if (this.options.$angular) {\n this.element.scope().$destroy();\n }\n\n kendo.destroy(this.element);\n },\n\n purge: function() {\n this.destroy();\n this.element.remove();\n },\n\n triggerBeforeShow: function() {\n if (this.trigger(BEFORE_SHOW, { view: this })) {\n return false;\n }\n return true;\n },\n\n triggerBeforeHide: function() {\n if (this.trigger(BEFORE_HIDE, { view: this })) {\n return false;\n }\n return true;\n },\n\n showStart: function() {\n var element = this.element;\n\n element.css(\"display\", \"\");\n\n if (!this.inited) {\n this.inited = true;\n this.trigger(INIT, { view: this });\n } else { // skip the initial controller update\n this._invokeNgController();\n }\n\n if (this.layout) {\n this.layout.attach(this);\n }\n\n this._padIfNativeScrolling();\n this.trigger(SHOW, { view: this });\n kendo.resize(element);\n },\n\n showEnd: function() {\n this.trigger(AFTER_SHOW, { view: this });\n this._padIfNativeScrolling();\n },\n\n hideEnd: function() {\n var that = this;\n that.element.hide();\n that.trigger(HIDE, { view: that });\n\n if (that.layout) {\n that.layout.trigger(HIDE, { view: that, layout: that.layout });\n }\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 _padIfNativeScrolling: function() {\n if (mobile.appLevelNativeScrolling()) {\n var isAndroid = kendo.support.mobileOS && kendo.support.mobileOS.android,\n skin = mobile.application.skin() || \"\",\n isAndroidForced = mobile.application.os.android || (skin.indexOf(\"android\") > -1),\n hasPlatformIndependentSkin = skin === \"flat\" || (skin.indexOf(\"material\") > -1),\n topContainer = (isAndroid || isAndroidForced) && (!hasPlatformIndependentSkin) ? \"footer\" : \"header\",\n bottomContainer = (isAndroid || isAndroidForced) && (!hasPlatformIndependentSkin) ? \"header\" : \"footer\";\n\n this.content.css({\n paddingTop: this[topContainer].height(),\n paddingBottom: this[bottomContainer].height()\n });\n }\n },\n\n contentElement: function() {\n var that = this;\n\n return that.options.stretch ? that.content : that.scrollerContent;\n },\n\n clone: function() {\n return new ViewClone(this);\n },\n\n _scroller: function() {\n var that = this;\n\n if (mobile.appLevelNativeScrolling()) {\n return;\n }\n if (that.options.stretch) {\n that.content.addClass(\"km-stretched-view\");\n } else {\n that.content.kendoMobileScroller($.extend(that.options.scroller, { zoom: that.options.zoom, useNative: that.options.useNativeScrolling }));\n\n that.scroller = that.content.data(\"kendoMobileScroller\");\n that.scrollerContent = that.scroller.scrollElement;\n }\n\n // prevent accidental address bar display when pulling the header\n if (kendo.support.kineticScrollNeeded) {\n $(that.element).on(\"touchmove\", \".km-header\", preventScrollIfNotInput);\n if (!that.options.useNativeScrolling && !that.options.stretch) {\n $(that.element).on(\"touchmove\", \".km-content\", preventScrollIfNotInput);\n }\n }\n },\n\n _model: function() {\n var that = this,\n element = that.element,\n model = that.options.model;\n\n if (typeof model === \"string\") {\n model = kendo.getter(model)(that.options.modelScope);\n }\n\n that.model = model;\n\n initPopOvers(element);\n\n that.element.css(\"display\", \"\");\n if (that.options.initWidgets) {\n if (model) {\n kendo.bind(element, model, ui, kendo.ui, kendo.dataviz.ui);\n } else {\n mobile.init(element.children());\n }\n }\n that.element.css(\"display\", \"none\");\n },\n\n _id: function() {\n var element = this.element,\n idAttrValue = element.attr(\"id\") || \"\";\n\n this.id = attrValue(element, \"url\") || \"#\" + idAttrValue;\n\n if (this.id == \"#\") {\n this.id = kendo.guid();\n element.attr(\"id\", this.id);\n }\n },\n\n _layout: function() {\n var contentSelector = roleSelector(\"content\"),\n element = this.element;\n\n element.addClass(\"km-view\");\n\n this.header = element.children(roleSelector(\"header\")).addClass(\"km-header\");\n this.footer = element.children(roleSelector(\"footer\")).addClass(\"km-footer\");\n\n if (!element.children(contentSelector)[0]) {\n element.wrapInner(\"
    ');\n }\n\n this.content = element.children(roleSelector(\"content\"))\n .addClass(\"km-content\");\n\n this.element.prepend(this.header).append(this.footer);\n\n\n this.layout = this.options.getLayout(this.layout);\n\n if (this.layout) {\n this.layout.setup(this);\n }\n },\n\n _overlay: function() {\n this.overlay = $(UI_OVERLAY).appendTo(this.element);\n },\n\n _invokeNgController: function() {\n var controller,\n scope;\n\n if (this.options.$angular) {\n controller = this.element.controller();\n scope = this.options.$angular[0];\n\n if (controller) {\n var callback = this._callController.bind(this, controller, scope);\n\n if (/^\\$(digest|apply)$/.test(scope.$$phase)) {\n callback();\n } else {\n scope.$apply(callback);\n }\n }\n }\n },\n\n _callController: function(controller, scope) {\n this.element.injector().invoke(controller.constructor, controller, { $scope: scope });\n }\n });\n\n function initWidgets(collection) {\n collection.each(function() {\n kendo.initWidget($(this), {}, ui.roles);\n });\n }\n\n var Layout = Widget.extend({\n init: function(element, options) {\n Widget.fn.init.call(this, element, options);\n\n element = this.element;\n\n this.header = element.children(this._locate(\"header\")).addClass(\"km-header\");\n this.footer = element.children(this._locate(\"footer\")).addClass(\"km-footer\");\n this.elements = this.header.add(this.footer);\n\n initPopOvers(element);\n\n if (!this.options.$angular) {\n kendo.mobile.init(this.element.children());\n }\n this.element.detach();\n this.trigger(INIT, { layout: this });\n },\n\n _locate: function(selectors) {\n return this.options.$angular ? directiveSelector(selectors) : roleSelector(selectors);\n },\n\n options: {\n name: \"Layout\",\n id: null,\n platform: null\n },\n\n events: [\n INIT,\n SHOW,\n HIDE\n ],\n\n setup: function(view) {\n if (!view.header[0]) { view.header = this.header; }\n if (!view.footer[0]) { view.footer = this.footer; }\n },\n\n detach: function(view) {\n var that = this;\n if (view.header === that.header && that.header[0]) {\n view.element.prepend(that.header.detach()[0].cloneNode(true));\n }\n\n if (view.footer === that.footer && that.footer.length) {\n view.element.append(that.footer.detach()[0].cloneNode(true));\n }\n },\n\n attach: function(view) {\n var that = this,\n previousView = that.currentView;\n\n if (previousView) {\n that.detach(previousView);\n }\n\n if (view.header === that.header) {\n that.header.detach();\n view.element.children(roleSelector(\"header\")).remove();\n view.element.prepend(that.header);\n }\n\n if (view.footer === that.footer) {\n that.footer.detach();\n view.element.children(roleSelector(\"footer\")).remove();\n view.element.append(that.footer);\n }\n\n that.trigger(SHOW, { layout: that, view: view });\n that.currentView = view;\n }\n });\n\n var Observable = kendo.Observable,\n bodyRegExp = /]*>(([\\u000a\\u000d\\u2028\\u2029]|.)*)<\\/body>/i,\n LOAD_START = \"loadStart\",\n LOAD_COMPLETE = \"loadComplete\",\n SHOW_START = \"showStart\",\n SAME_VIEW_REQUESTED = \"sameViewRequested\",\n VIEW_SHOW = \"viewShow\",\n VIEW_TYPE_DETERMINED = \"viewTypeDetermined\",\n AFTER = \"after\";\n\n var ViewEngine = Observable.extend({\n init: function(options) {\n var that = this,\n views,\n errorMessage,\n container,\n collection;\n\n Observable.fn.init.call(that);\n\n $.extend(that, options);\n that.sandbox = $(\"
    \");\n container = that.container;\n\n views = that._hideViews(container);\n that.rootView = views.first();\n\n if (!that.rootView[0] && options.rootNeeded) {\n if (container[0] == kendo.mobile.application.element[0]) {\n errorMessage = 'Your kendo mobile application element does not contain any direct child elements with data-role=\"view\" attribute set. Make sure that you instantiate the mobile application using the correct container.';\n } else {\n errorMessage = 'Your pane element does not contain any direct child elements with data-role=\"view\" attribute set.';\n }\n throw new Error(errorMessage);\n }\n\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.getLayoutProxy = this._getLayout.bind(this);\n that._setupLayouts(container);\n\n collection = container.children(that._locate(\"modalview drawer\"));\n if (that.$angular) {\n\n that.$angular[0].viewOptions = {\n defaultTransition: that.transition,\n loader: that.loader,\n container: that.container,\n getLayout: that.getLayoutProxy\n };\n\n collection.each(function(idx, element) {\n compileMobileDirective($(element), options.$angular[0]);\n });\n } else {\n initWidgets(collection);\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 kendo.destroy(this.container);\n\n for (var id in this.layouts) {\n this.layouts[id].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 showClosure = function(view) {\n return that.viewContainer.show(view, transition, url);\n },\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 showClosure(view);\n } else {\n if (this.serverNavigation) {\n location.href = url;\n } else {\n that._loadView(url, showClosure);\n }\n return true;\n }\n },\n\n append: function(html, url) {\n var sandbox = this.sandbox,\n urlPath = (url || \"\").split(\"?\")[0],\n container = this.container,\n views,\n modalViews,\n view;\n\n if (bodyRegExp.test(html)) {\n html = RegExp.$1;\n }\n\n sandbox[0].innerHTML = html;\n\n container.append(sandbox.children(\"script, style\"));\n\n views = this._hideViews(sandbox);\n view = views.first();\n\n // Generic HTML content found as remote view - no remote view markers\n if (!view.length) {\n views = view = sandbox.wrapInner(\"
    \").children(); // one element\n }\n\n if (urlPath) {\n view.hide().attr(attr(\"url\"), urlPath);\n }\n\n this._setupLayouts(sandbox);\n\n modalViews = sandbox.children(this._locate(\"modalview drawer\"));\n\n container.append(sandbox.children(this._locate(\"layout modalview drawer\")).add(views));\n\n // Initialize the modalviews after they have been appended to the final container\n initWidgets(modalViews);\n\n return this._createView(view);\n },\n\n _locate: function(selectors) {\n return this.$angular ? directiveSelector(selectors) : roleSelector(selectors);\n },\n\n _findViewElement: function(url) {\n var element,\n urlPath = url.split(\"?\")[0];\n\n if (!urlPath) {\n return this.rootView;\n }\n\n element = this.container.children(\"[\" + attr(\"url\") + \"='\" + urlPath + \"']\");\n\n // do not try to search for \"#/foo/bar\" id, jQuery throws error\n if (!element[0] && urlPath.indexOf(\"/\") === -1) {\n element = this.container.children(urlPath.charAt(0) === \"#\" ? urlPath : \"#\" + urlPath);\n }\n\n return element;\n },\n\n _createView: function(element) {\n if (this.$angular) {\n return compileMobileDirective(element, this.$angular[0]);\n } else {\n return kendo.initWidget(element, {\n defaultTransition: this.transition,\n loader: this.loader,\n container: this.container,\n getLayout: this.getLayoutProxy,\n modelScope: this.modelScope,\n reload: attrValue(element, \"reload\")\n }, ui.roles);\n }\n },\n\n _getLayout: function(name) {\n if (name === \"\") {\n return null;\n }\n\n return name ? this.layouts[name] : this.layouts[this.layout];\n },\n\n _loadView: function(url, callback) {\n if (this._xhr) {\n this._xhr.abort();\n }\n\n this.trigger(LOAD_START);\n\n this._xhr = $.get(kendo.absoluteURL(url, this.remoteViewURLPrefix), \"html\")\n .always(this._xhrComplete.bind(this, callback, url));\n },\n\n _xhrComplete: function(callback, url, response) {\n var success = true;\n\n if (typeof response === \"object\") {\n if (response.status === 0) {\n if (response.responseText && response.responseText.length > 0) {\n success = true;\n response = response.responseText;\n } else { // request has been aborted for real\n return;\n }\n }\n }\n\n this.trigger(LOAD_COMPLETE);\n\n if (success) {\n callback(this.append(response, url));\n }\n },\n\n _hideViews: function(container) {\n return container.children(this._locate(\"view splitview\")).hide();\n },\n\n _setupLayouts: function(element) {\n var that = this,\n layout;\n\n element.children(that._locate(\"layout\")).each(function() {\n if (that.$angular) {\n layout = compileMobileDirective($(this), that.$angular[0]);\n } else {\n layout = kendo.initWidget($(this), {}, ui.roles);\n }\n\n var platform = layout.options.platform;\n\n if (!platform || platform === mobile.application.os.name) {\n that.layouts[layout.options.id] = layout;\n } else {\n layout.destroy();\n }\n });\n\n }\n });\n\n kendo.mobile.ViewEngine = ViewEngine;\n\n ui.plugin(View);\n ui.plugin(Layout);\n })(window.kendo.jQuery);\n\n var __meta__$h = {\n id: \"mobile.loader\",\n name: \"Loader\",\n category: \"mobile\",\n description: \"Mobile Loader\",\n depends: [ \"core\" ],\n hidden: true\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n ui = kendo.mobile.ui,\n Widget = ui.Widget,\n CAPTURE_EVENTS = $.map(kendo.eventMap, function(value) { return value; }).join(\" \").split(\" \");\n\n var Loader = Widget.extend({\n init: function(container, options) {\n var that = this,\n element = $('
    ');\n\n Widget.fn.init.call(that, element, options);\n\n that.container = container;\n that.captureEvents = false;\n\n that._attachCapture();\n\n element.append(that.options.loading).hide().appendTo(container);\n },\n\n options: {\n name: \"Loader\",\n loading: \"

    Loading...

    \",\n timeout: 100\n },\n\n show: function() {\n var that = this;\n\n clearTimeout(that._loading);\n\n if (that.options.loading === false) {\n return;\n }\n\n that.captureEvents = true;\n that._loading = setTimeout(function() {\n that.element.show();\n }, that.options.timeout);\n },\n\n hide: function() {\n this.captureEvents = false;\n clearTimeout(this._loading);\n this.element.hide();\n },\n\n changeMessage: function(message) {\n this.options.loading = message;\n this.element.find(\">h1\").html(message);\n },\n\n transition: function() {\n this.captureEvents = true;\n this.container.css(\"pointer-events\", \"none\");\n },\n\n transitionDone: function() {\n this.captureEvents = false;\n this.container.css(\"pointer-events\", \"\");\n },\n\n _attachCapture: function() {\n var that = this;\n that.captureEvents = false;\n\n function capture(e) {\n if (that.captureEvents) {\n e.preventDefault();\n }\n }\n\n for (var i = 0; i < CAPTURE_EVENTS.length; i ++) {\n that.container[0].addEventListener(CAPTURE_EVENTS[i], capture, true);\n }\n }\n });\n\n ui.plugin(Loader);\n })(window.kendo.jQuery);\n\n var __meta__$g = {\n id: \"mobile.pane\",\n name: \"Pane\",\n category: \"mobile\",\n description: \"Mobile Pane\",\n depends: [ \"mobile.view\", \"mobile.loader\" ],\n hidden: true\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n mobile = kendo.mobile,\n roleSelector = kendo.roleSelector,\n ui = mobile.ui,\n Widget = ui.Widget,\n ViewEngine = mobile.ViewEngine,\n View = ui.View,\n Loader = mobile.ui.Loader,\n\n EXTERNAL = \"external\",\n HREF = \"href\",\n DUMMY_HREF = \"#!\",\n\n NAVIGATE = \"navigate\",\n VIEW_SHOW = \"viewShow\",\n SAME_VIEW_REQUESTED = \"sameViewRequested\",\n OS = kendo.support.mobileOS,\n SKIP_TRANSITION_ON_BACK_BUTTON = OS.ios && !OS.appMode && OS.flatVersion >= 700,\n WIDGET_RELS = /popover|actionsheet|modalview|drawer/,\n BACK = \"#:back\",\n\n attrValue = kendo.attrValue;\n\n var Pane = Widget.extend({\n init: function(element, options) {\n var that = this;\n\n Widget.fn.init.call(that, element, options);\n\n options = that.options;\n element = that.element;\n\n element.addClass(\"km-pane\");\n\n if (that.options.collapsible) {\n element.addClass(\"km-collapsible-pane\");\n }\n\n this.history = [];\n\n this.historyCallback = function(url, params, backButtonPressed) {\n var transition = that.transition;\n that.transition = null;\n\n // swiping back in iOS leaves the app in a very broken state if we perform a transition\n if (SKIP_TRANSITION_ON_BACK_BUTTON && backButtonPressed) {\n transition = \"none\";\n }\n\n return that.viewEngine.showView(url, transition, params);\n };\n\n this._historyNavigate = function(url) {\n if (url === BACK) {\n if (that.history.length === 1) {\n return;\n }\n\n that.history.pop();\n url = that.history[that.history.length - 1];\n } else {\n that.history.push(url);\n }\n\n that.historyCallback(url, kendo.parseQueryStringParams(url));\n };\n\n this._historyReplace = function(url) {\n var params = kendo.parseQueryStringParams(url);\n that.history[that.history.length - 1] = url;\n that.historyCallback(url, params);\n };\n\n that.loader = new Loader(element, {\n loading: that.options.loading\n });\n\n that.viewEngine = new ViewEngine({\n container: element,\n transition: options.transition,\n modelScope: options.modelScope,\n rootNeeded: !options.initial,\n serverNavigation: options.serverNavigation,\n remoteViewURLPrefix: options.root || \"\",\n layout: options.layout,\n $angular: options.$angular,\n loader: that.loader,\n\n showStart: function() {\n that.loader.transition();\n that.closeActiveDialogs();\n },\n\n after: function() {\n that.loader.transitionDone();\n },\n\n viewShow: function(e) {\n that.trigger(VIEW_SHOW, e);\n },\n\n loadStart: function() {\n that.loader.show();\n },\n\n loadComplete: function() {\n that.loader.hide();\n },\n\n sameViewRequested: function() {\n that.trigger(SAME_VIEW_REQUESTED);\n },\n\n viewTypeDetermined: function(e) {\n if (!e.remote || !that.options.serverNavigation) {\n that.trigger(NAVIGATE, { url: e.url });\n }\n }\n });\n\n\n this._setPortraitWidth();\n\n kendo.onResize(function() {\n that._setPortraitWidth();\n });\n\n that._setupAppLinks();\n },\n\n closeActiveDialogs: function() {\n var dialogs = this.element.find(roleSelector(\"actionsheet popover modalview\")).filter(\":visible\");\n dialogs.each(function() {\n kendo.widgetInstance($(this), ui).close();\n });\n },\n\n navigateToInitial: function() {\n var initial = this.options.initial;\n\n if (initial) {\n this.navigate(initial);\n }\n\n return initial;\n },\n\n options: {\n name: \"Pane\",\n portraitWidth: \"\",\n transition: \"\",\n layout: \"\",\n collapsible: false,\n initial: null,\n modelScope: window,\n loading: \"

    Loading...

    \"\n },\n\n events: [\n NAVIGATE,\n VIEW_SHOW,\n SAME_VIEW_REQUESTED\n ],\n\n append: function(html) {\n return this.viewEngine.append(html);\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n this.viewEngine.destroy();\n this.userEvents.destroy();\n },\n\n navigate: function(url, transition) {\n if (url instanceof View) {\n url = url.id;\n }\n\n this.transition = transition;\n\n this._historyNavigate(url);\n },\n\n replace: function(url, transition) {\n if (url instanceof View) {\n url = url.id;\n }\n\n this.transition = transition;\n\n this._historyReplace(url);\n },\n\n bindToRouter: function(router) {\n var that = this,\n history = this.history,\n viewEngine = this.viewEngine;\n\n router.bind(\"init\", function(e) {\n var url = e.url,\n attrUrl = router.pushState ? url : \"/\";\n\n viewEngine.rootView.attr(kendo.attr(\"url\"), attrUrl);\n\n // if current is set, then this means that the pane has navigated to a given view - we need to update the router accordingly.\n var length = history.length;\n\n if (url === \"/\" && length) {\n router.navigate(history[length - 1], true);\n e.preventDefault(); // prevents from executing routeMissing, by default\n }\n });\n\n router.bind(\"routeMissing\", function(e) {\n if (!that.historyCallback(e.url, e.params, e.backButtonPressed)) {\n e.preventDefault();\n }\n });\n\n router.bind(\"same\", function() {\n that.trigger(SAME_VIEW_REQUESTED);\n });\n\n that._historyNavigate = function(url) {\n router.navigate(url);\n };\n\n that._historyReplace = function(url) {\n router.replace(url);\n };\n },\n\n hideLoading: function() {\n this.loader.hide();\n },\n\n showLoading: function() {\n this.loader.show();\n },\n\n changeLoadingMessage: function(message) {\n this.loader.changeMessage(message);\n },\n\n view: function() {\n return this.viewEngine.view();\n },\n\n _setPortraitWidth: function() {\n var width,\n portraitWidth = this.options.portraitWidth;\n\n if (portraitWidth) {\n width = kendo.mobile.application.element.is(\".km-vertical\") ? portraitWidth : \"auto\";\n this.element.css(\"width\", width);\n }\n },\n\n _setupAppLinks: function() {\n var that = this,\n linkRoles = \"tab\",\n pressedButtonSelector = \"[data-\" + kendo.ns + \"navigate-on-press]\",\n\n buttonSelectors = $.map([\"button\", \"backbutton\", \"detailbutton\", \"listview-link\"] , function(role) {\n return roleSelector(role) + \":not(\" + pressedButtonSelector + \")\";\n }).join(\",\");\n\n this.element.handler(this)\n .on(\"down\", roleSelector(linkRoles) + \",\" + pressedButtonSelector, \"_mouseup\")\n .on(\"click\", roleSelector(linkRoles) + \",\" + buttonSelectors + \",\" + pressedButtonSelector, \"_appLinkClick\");\n\n this.userEvents = new kendo.UserEvents(this.element, {\n fastTap: true,\n filter: buttonSelectors,\n tap: function(e) {\n e.event.currentTarget = e.touch.currentTarget;\n that._mouseup(e.event);\n }\n });\n\n // remove the ms-touch-action added by the user events, breaks native scrolling in WP8\n this.element.css('-ms-touch-action', '');\n },\n\n _appLinkClick: function(e) {\n var href = $(e.currentTarget).attr(\"href\");\n var remote = href && href[0] !== \"#\" && this.options.serverNavigation;\n\n if (!remote && attrValue($(e.currentTarget), \"rel\") != EXTERNAL) {\n e.preventDefault();\n }\n },\n\n _mouseup: function(e) {\n if (e.which > 1 || e.isDefaultPrevented()) {\n return;\n }\n\n var pane = this,\n link = $(e.currentTarget),\n transition = attrValue(link, \"transition\"),\n rel = attrValue(link, \"rel\") || \"\",\n target = attrValue(link, \"target\"),\n href = link.attr(HREF),\n delayedTouchEnd = SKIP_TRANSITION_ON_BACK_BUTTON && link[0].offsetHeight === 0,\n remote = href && href[0] !== \"#\" && this.options.serverNavigation;\n\n if (delayedTouchEnd || remote || rel === EXTERNAL || (typeof href === \"undefined\") || href === DUMMY_HREF) {\n return;\n }\n\n // Prevent iOS address bar progress display for in app navigation\n link.attr(HREF, DUMMY_HREF);\n setTimeout(function() { link.attr(HREF, href); });\n\n if (rel.match(WIDGET_RELS)) {\n kendo.widgetInstance($(href), ui).openFor(link);\n // if propagation is not stopped and actionsheet is opened from tabstrip,\n // the actionsheet is closed immediately.\n if (rel === \"actionsheet\" || rel === \"drawer\") {\n e.stopPropagation();\n }\n } else {\n if (target === \"_top\") {\n pane = mobile.application.pane;\n }\n else if (target) {\n pane = $(\"#\" + target).data(\"kendoMobilePane\");\n }\n\n pane.navigate(href, transition);\n }\n\n e.preventDefault();\n }\n });\n\n Pane.wrap = function(element) {\n if (!element.is(roleSelector(\"view\"))) {\n element = element.wrap('
    ').parent();\n }\n\n var paneContainer = element.wrap('
    ').parent(),\n pane = new Pane(paneContainer);\n\n pane.navigate(\"\");\n\n return pane;\n };\n ui.plugin(Pane);\n })(window.kendo.jQuery);\n\n var __meta__$f = {\n id: \"mobile.popover\",\n name: \"PopOver\",\n category: \"mobile\",\n description: \"The mobile PopOver widget represents a transient view which is displayed when the user taps on a navigational widget or area on the screen. \",\n depends: [ \"popup\", \"mobile.pane\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n mobile = kendo.mobile,\n ui = mobile.ui,\n HIDE = \"hide\",\n OPEN = \"open\",\n CLOSE = \"close\",\n WRAPPER = '
    ',\n ARROW = '
    ',\n OVERLAY = '
    ',\n DIRECTION_CLASSES = \"km-up km-down km-left km-right\",\n Widget = ui.Widget,\n DIRECTIONS = {\n \"down\": {\n origin: \"bottom center\",\n position: \"top center\"\n },\n \"up\": {\n origin: \"top center\",\n position: \"bottom center\"\n },\n \"left\": {\n origin: \"center left\",\n position: \"center right\",\n collision: \"fit flip\"\n },\n \"right\": {\n origin: \"center right\",\n position: \"center left\",\n collision: \"fit flip\"\n }\n },\n\n ANIMATION = {\n animation: {\n open: {\n effects: \"fade:in\",\n duration: 0\n },\n close: {\n effects: \"fade:out\",\n duration: 400\n }\n }\n },\n DIMENSIONS = {\n \"horizontal\": { offset: \"top\", size: \"height\" },\n \"vertical\": { offset: \"left\", size: \"width\" }\n },\n\n REVERSE = {\n \"up\": \"down\",\n \"down\": \"up\",\n \"left\": \"right\",\n \"right\": \"left\"\n };\n\n var Popup = Widget.extend({\n init: function(element, options) {\n var that = this,\n containerPopup = element.closest(\".km-modalview-wrapper\"),\n viewport = element.closest(\".km-root\").children('.km-pane').first(),\n container = containerPopup[0] ? containerPopup : viewport,\n popupOptions,\n axis;\n\n if (options.viewport) {\n viewport = options.viewport;\n } else if (!viewport[0]) {\n viewport = window;\n }\n\n if (options.container) {\n container = options.container;\n } else if (!container[0]) {\n container = document.body;\n }\n\n popupOptions = {\n viewport: viewport,\n copyAnchorStyles: false,\n autosize: true,\n open: function() {\n that.overlay.show();\n },\n\n activate: that._activate.bind(that),\n\n deactivate: function() {\n that.overlay.hide();\n if (!that._apiCall) {\n that.trigger(HIDE);\n }\n\n that._apiCall = false;\n }\n };\n\n Widget.fn.init.call(that, element, options);\n\n element = that.element;\n options = that.options;\n\n element.wrap(WRAPPER).addClass(\"km-popup\").show();\n\n axis = that.options.direction.match(/left|right/) ? \"horizontal\" : \"vertical\";\n\n that.dimensions = DIMENSIONS[axis];\n\n that.wrapper = element.parent().css({\n width: options.width,\n height: options.height\n }).addClass(\"km-popup-wrapper km-\" + options.direction).hide();\n\n that.arrow = $(ARROW).prependTo(that.wrapper).hide();\n\n that.overlay = $(OVERLAY).appendTo(container).hide();\n popupOptions.appendTo = that.overlay;\n\n if (options.className) {\n that.overlay.addClass(options.className);\n }\n\n that.popup = new kendo.ui.Popup(that.wrapper, $.extend(true, popupOptions, ANIMATION, DIRECTIONS[options.direction]));\n },\n\n options: {\n name: \"Popup\",\n width: 240,\n height: \"\",\n direction: \"down\",\n container: null,\n viewport: null\n },\n\n events: [\n HIDE\n ],\n\n show: function(target) {\n this.popup.options.anchor = $(target);\n this.popup.open();\n },\n\n hide: function() {\n this._apiCall = true;\n this.popup.close();\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n this.popup.destroy();\n this.overlay.remove();\n },\n\n target: function() {\n return this.popup.options.anchor;\n },\n\n _activate: function() {\n var that = this,\n direction = that.options.direction,\n dimensions = that.dimensions,\n offset = dimensions.offset,\n popup = that.popup,\n anchor = popup.options.anchor,\n anchorOffset = $(anchor).offset(),\n elementOffset = $(popup.element).offset(),\n cssClass = popup.flipped ? REVERSE[direction] : direction,\n min = that.arrow[dimensions.size]() * 2,\n max = that.element[dimensions.size]() - that.arrow[dimensions.size](),\n size = $(anchor)[dimensions.size](),\n offsetAmount = anchorOffset[offset] - elementOffset[offset] + (size / 2);\n\n if (offsetAmount < min) {\n offsetAmount = min;\n }\n\n if (offsetAmount > max) {\n offsetAmount = max;\n }\n\n that.wrapper.removeClass(DIRECTION_CLASSES).addClass(\"km-\" + cssClass);\n that.arrow.css(offset, offsetAmount).show();\n }\n });\n\n var PopOver = Widget.extend({\n init: function(element, options) {\n var that = this,\n popupOptions;\n\n that.initialOpen = false;\n\n Widget.fn.init.call(that, element, options);\n\n popupOptions = $.extend({\n className: \"km-popover-root\",\n hide: function() { that.trigger(CLOSE); }\n }, this.options.popup);\n\n that.popup = new Popup(that.element, popupOptions);\n that.popup.overlay.on(\"move\", function(e) {\n if (e.target == that.popup.overlay[0]) {\n e.preventDefault();\n }\n });\n\n that.pane = new ui.Pane(that.element, $.extend(this.options.pane, { $angular: this.options.$angular }));\n\n kendo.notify(that, ui);\n },\n\n options: {\n name: \"PopOver\",\n popup: { },\n pane: { }\n },\n\n events: [\n OPEN,\n CLOSE\n ],\n\n open: function(target) {\n this.popup.show(target);\n\n if (!this.initialOpen) {\n if (!this.pane.navigateToInitial()) {\n this.pane.navigate(\"\");\n }\n\n this.popup.popup._position();\n this.initialOpen = true;\n } else {\n this.pane.view()._invokeNgController();\n }\n },\n\n openFor: function(target) {\n this.open(target);\n this.trigger(OPEN, { target: this.popup.target() });\n },\n\n close: function() {\n this.popup.hide();\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n this.pane.destroy();\n this.popup.destroy();\n\n kendo.destroy(this.element);\n }\n });\n\n ui.plugin(Popup);\n ui.plugin(PopOver);\n })(window.kendo.jQuery);\n\n var __meta__$e = {\n id: \"mobile.shim\",\n name: \"Shim\",\n category: \"mobile\",\n description: \"Mobile Shim\",\n depends: [ \"popup\" ],\n hidden: true\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n ui = kendo.mobile.ui,\n Popup = kendo.ui.Popup,\n SHIM = '
    ',\n HIDE = \"hide\",\n Widget = ui.Widget;\n\n var Shim = Widget.extend({\n init: function(element, options) {\n var that = this,\n app = kendo.mobile.application,\n os = kendo.support.mobileOS,\n osname = app ? app.os.name : (os ? os.name : \"ios\"),\n ioswp = osname === \"ios\" || osname === \"wp\" || (app ? app.os.skin : false),\n bb = osname === \"blackberry\",\n align = options.align || (ioswp ? \"bottom center\" : bb ? \"center right\" : \"center center\"),\n position = options.position || (ioswp ? \"bottom center\" : bb ? \"center right\" : \"center center\"),\n effect = options.effect || (ioswp ? \"slideIn:up\" : bb ? \"slideIn:left\" : \"fade:in\"),\n shim = $(SHIM).handler(that).hide();\n\n Widget.fn.init.call(that, element, options);\n\n that.shim = shim;\n element = that.element;\n options = that.options;\n\n if (options.className) {\n that.shim.addClass(options.className);\n }\n\n if (!options.modal) {\n that.shim.on(\"down\", \"_hide\");\n }\n\n (app ? app.element : $(document.body)).append(shim);\n\n that.popup = new Popup(that.element, {\n anchor: shim,\n modal: true,\n appendTo: shim,\n origin: align,\n position: position,\n animation: {\n open: {\n effects: effect,\n duration: options.duration\n },\n close: {\n duration: options.duration\n }\n },\n\n close: function(e) {\n var prevented = false;\n\n if (!that._apiCall) {\n prevented = that.trigger(HIDE);\n }\n\n if (prevented) {\n e.preventDefault();\n }\n\n that._apiCall = false;\n },\n\n deactivate: function() { // Deactivate event can't be prevented.\n shim.hide();\n },\n\n open: function() {\n shim.show();\n }\n });\n\n kendo.notify(that);\n },\n\n events: [ HIDE ],\n\n options: {\n name: \"Shim\",\n modal: false,\n align: undefined$1,\n position: undefined$1,\n effect: undefined$1,\n duration: 200\n },\n\n show: function() {\n this.popup.open();\n },\n\n hide: function() {\n this._apiCall = true;\n this.popup.close();\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n this.shim.kendoDestroy();\n this.popup.destroy();\n this.shim.remove();\n },\n\n _hide: function(e) {\n if (!e || !$.contains(this.shim.children().children(\".k-popup\")[0], e.target)) {\n this.popup.close();\n }\n }\n });\n\n ui.plugin(Shim);\n })(window.kendo.jQuery);\n\n var __meta__$d = {\n id: \"mobile.modalview\",\n name: \"ModalView\",\n category: \"mobile\",\n description: \"The Kendo ModalView is used to present self-contained functionality in the context of the current task.\",\n depends: [ \"mobile.shim\", \"mobile.view\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n ui = kendo.mobile.ui,\n Shim = ui.Shim,\n Widget = ui.Widget,\n BEFORE_OPEN = \"beforeOpen\",\n OPEN = \"open\",\n CLOSE = \"close\",\n INIT = \"init\",\n WRAP = '
    ';\n\n var ModalView = ui.View.extend({\n init: function(element, options) {\n var that = this;\n\n Widget.fn.init.call(that, element, options);\n\n that._id();\n that._wrap();\n that._shim();\n\n if (!this.options.$angular) {\n that._layout();\n that._scroller();\n that._model();\n }\n\n that.element.css(\"display\", \"\");\n\n that.trigger(INIT);\n },\n\n events: [\n INIT,\n BEFORE_OPEN,\n OPEN,\n CLOSE\n ],\n\n options: {\n name: \"ModalView\",\n modal: true,\n width: null,\n height: null\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n this.shim.destroy();\n },\n\n open: function(target) {\n var that = this;\n that.target = $(target);\n that.shim.show();\n\n that._invokeNgController();\n\n // necessary for the mobile view interface\n that.trigger(\"show\", { view: that });\n },\n\n // Interface implementation, called from the pane click handlers\n openFor: function(target) {\n if (!this.trigger(BEFORE_OPEN, { target: target })) {\n this.open(target);\n this.trigger(OPEN, { target: target });\n }\n },\n\n close: function() {\n if (this.element.is(\":visible\") && !this.trigger(CLOSE)) {\n this.shim.hide();\n }\n },\n\n _wrap: function() {\n var that = this,\n element = that.element,\n options = that.options,\n width, height;\n\n width = element[0].style.width || \"auto\";\n height = element[0].style.height || \"auto\";\n\n element.addClass(\"km-modalview\").wrap(WRAP);\n\n that.wrapper = element.parent().css({\n width: options.width || width || 300,\n height: options.height || height || 300\n }).addClass(height == \"auto\" ? \" km-auto-height\" : \"\");\n\n element.css({ width: \"\", height: \"\" });\n },\n\n _shim: function() {\n var that = this;\n\n that.shim = new Shim(that.wrapper, {\n modal: that.options.modal,\n position: \"center center\",\n align: \"center center\",\n effect: \"fade:in\",\n className: \"km-modalview-root\",\n hide: function(e) {\n if (that.trigger(CLOSE)) {\n e.preventDefault();\n }\n }\n });\n }\n });\n\n ui.plugin(ModalView);\n })(window.kendo.jQuery);\n\n var __meta__$c = {\n id: \"mobile.drawer\",\n name: \"Drawer\",\n category: \"mobile\",\n description: \"The Kendo Mobile Drawer widget provides slide to reveal global application toolbox\",\n depends: [ \"mobile.view\", \"userevents\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n mobile = kendo.mobile,\n os = kendo.support.mobileOS,\n Transition = kendo.effects.Transition,\n roleSelector = kendo.roleSelector,\n AXIS = \"x\",\n ui = mobile.ui,\n SWIPE_TO_OPEN = !(os.ios && os.majorVersion == 7 && !os.appMode),\n BEFORE_SHOW = \"beforeShow\",\n INIT = \"init\",\n SHOW = \"show\",\n HIDE = \"hide\",\n AFTER_HIDE = \"afterHide\",\n NULL_VIEW = { enable: $.noop };\n\n var Drawer = ui.View.extend({\n init: function(element, options) {\n // move the drawer to the top, in order to hide it\n $(element).parent().prepend(element);\n\n mobile.ui.Widget.fn.init.call(this, element, options);\n\n if (!this.options.$angular) {\n this._layout();\n this._scroller();\n }\n\n this._model();\n\n var pane = this.element.closest(roleSelector(\"pane\")).data(\"kendoMobilePane\"),\n userEvents;\n\n if (pane) {\n this.pane = pane;\n this.pane.bind(\"viewShow\", function(e) {\n drawer._viewShow(e);\n });\n\n this.pane.bind(\"sameViewRequested\", function() {\n drawer.hide();\n });\n\n userEvents = this.userEvents = new kendo.UserEvents(pane.element, {\n fastTap: true,\n filter: roleSelector(\"view splitview\"),\n allowSelection: true\n });\n\n } else {\n this.currentView = NULL_VIEW;\n var container = $(this.options.container);\n\n if (!container) {\n throw new Error(\"The drawer needs a container configuration option set.\");\n }\n\n userEvents = this.userEvents = new kendo.UserEvents(container, { fastTap: true, allowSelection: true });\n this._attachTransition(container);\n }\n\n var drawer = this;\n\n var hide = function(e) {\n if (drawer.visible) {\n drawer.hide();\n e.preventDefault();\n }\n };\n\n if (this.options.swipeToOpen && SWIPE_TO_OPEN) {\n userEvents.bind(\"press\", function() { drawer.transition.cancel(); });\n userEvents.bind(\"start\", function(e) { drawer._start(e); });\n userEvents.bind(\"move\", function(e) { drawer._update(e); });\n userEvents.bind(\"end\", function(e) { drawer._end(e); });\n userEvents.bind(\"tap\", hide);\n } else {\n userEvents.bind(\"press\", hide);\n }\n\n this.leftPositioned = this.options.position === \"left\";\n\n this.visible = false;\n\n this.element.hide().addClass(\"km-drawer\").addClass(this.leftPositioned ? \"km-left-drawer\" : \"km-right-drawer\");\n this.trigger(INIT);\n },\n\n options: {\n name: \"Drawer\",\n position: \"left\",\n views: [],\n swipeToOpenViews: [],\n swipeToOpen: true,\n title: \"\",\n container: null\n },\n\n events: [\n BEFORE_SHOW,\n HIDE,\n AFTER_HIDE,\n INIT,\n SHOW\n ],\n\n show: function() {\n if (this._activate()) {\n this._show();\n }\n },\n\n hide: function() {\n if (!this.currentView) {\n return;\n }\n\n this.currentView.enable();\n\n Drawer.current = null;\n this._moveViewTo(0);\n this.trigger(HIDE, { view: this });\n },\n\n // Alias in order to support popover/modalview etc. interface\n openFor: function() {\n if (this.visible) {\n this.hide();\n } else {\n this.show();\n }\n },\n\n destroy: function() {\n ui.View.fn.destroy.call(this);\n this.userEvents.destroy();\n },\n\n _activate: function() {\n if (this.visible) {\n return true;\n }\n\n var visibleOnCurrentView = this._currentViewIncludedIn(this.options.views);\n\n if (!visibleOnCurrentView || this.trigger(BEFORE_SHOW, { view: this })) {\n return false;\n }\n\n this._setAsCurrent();\n this.element.show();\n\n this.trigger(SHOW, { view: this });\n this._invokeNgController();\n return true;\n },\n\n _currentViewIncludedIn: function(views) {\n if (!this.pane || !views.length) {\n return true;\n }\n\n var view = this.pane.view();\n return $.inArray(view.id.replace('#', ''), views) > -1 || $.inArray(view.element.attr(\"id\"), views) > -1;\n },\n\n _show: function() {\n this.currentView.enable(false);\n\n this.visible = true;\n var offset = this.element.width();\n\n if (!this.leftPositioned) {\n offset = -offset;\n }\n\n this._moveViewTo(offset);\n },\n\n _setAsCurrent: function() {\n if (Drawer.last !== this) {\n if (Drawer.last) {\n Drawer.last.element.hide();\n }\n this.element.show();\n }\n\n Drawer.last = this;\n Drawer.current = this;\n },\n\n _moveViewTo: function(offset) {\n this.userEvents.cancel();\n this.transition.moveTo({ location: offset, duration: 400, ease: Transition.easeOutExpo });\n },\n\n _viewShow: function(e) {\n if (this.currentView) {\n this.currentView.enable();\n }\n\n if (this.currentView === e.view) {\n this.hide();\n return;\n }\n\n this.currentView = e.view;\n this._attachTransition(e.view.element);\n },\n\n _attachTransition: function(element) {\n var that = this,\n movable = this.movable,\n currentOffset = movable && movable.x;\n\n\n if (this.transition) {\n this.transition.cancel();\n this.movable.moveAxis(\"x\", 0);\n }\n\n movable = this.movable = new kendo.ui.Movable(element);\n\n this.transition = new Transition({\n axis: AXIS,\n movable: this.movable,\n onEnd: function() {\n if (movable[AXIS] === 0) {\n element[0].style.cssText = \"\";\n that.element.hide();\n that.trigger(AFTER_HIDE);\n that.visible = false;\n }\n }\n });\n\n if (currentOffset) {\n element.addClass(\"k-fx-hidden\");\n kendo.animationFrame(function() {\n element.removeClass(\"k-fx-hidden\");\n that.movable.moveAxis(AXIS, currentOffset);\n that.hide();\n });\n }\n },\n\n _start: function(e) {\n var userEvents = e.sender;\n\n // ignore non-horizontal swipes\n if (Math.abs(e.x.velocity) < Math.abs(e.y.velocity) || kendo.triggeredByInput(e.event) || !this._currentViewIncludedIn(this.options.swipeToOpenViews)) {\n userEvents.cancel();\n return;\n }\n\n var leftPositioned = this.leftPositioned,\n visible = this.visible,\n canMoveLeft = leftPositioned && visible || !leftPositioned && !Drawer.current,\n canMoveRight = !leftPositioned && visible || leftPositioned && !Drawer.current,\n leftSwipe = e.x.velocity < 0;\n\n if ((canMoveLeft && leftSwipe) || (canMoveRight && !leftSwipe)) {\n if (this._activate()) {\n userEvents.capture();\n return;\n }\n }\n\n userEvents.cancel();\n },\n\n _update: function(e) {\n var movable = this.movable,\n newPosition = movable.x + e.x.delta,\n limitedPosition;\n\n if (this.leftPositioned) {\n limitedPosition = Math.min(Math.max(0, newPosition), this.element.width());\n } else {\n limitedPosition = Math.max(Math.min(0, newPosition), -this.element.width());\n }\n\n this.movable.moveAxis(AXIS, limitedPosition);\n e.event.preventDefault();\n e.event.stopPropagation();\n },\n\n _end: function(e) {\n var velocity = e.x.velocity,\n pastHalf = Math.abs(this.movable.x) > this.element.width() / 2,\n velocityThreshold = 0.8,\n shouldShow;\n\n if (this.leftPositioned) {\n shouldShow = velocity > -velocityThreshold && (velocity > velocityThreshold || pastHalf);\n } else {\n shouldShow = velocity < velocityThreshold && (velocity < -velocityThreshold || pastHalf);\n }\n\n if (shouldShow) {\n this._show();\n } else {\n this.hide();\n }\n }\n });\n\n ui.plugin(Drawer);\n })(window.kendo.jQuery);\n\n var __meta__$b = {\n id: \"mobile.splitview\",\n name: \"SplitView\",\n category: \"mobile\",\n description: \"The mobile SplitView is a tablet-specific view that consists of two or more mobile Pane widgets.\",\n depends: [ \"mobile.pane\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n ui = kendo.mobile.ui,\n Widget = ui.Widget,\n EXPANED_PANE_SHIM = \"
    \",\n View = ui.View;\n\n var SplitView = View.extend({\n init: function(element, options) {\n var that = this,\n pane, modalViews;\n\n Widget.fn.init.call(that, element, options);\n element = that.element;\n\n $.extend(that, options);\n\n that._id();\n\n if (!that.options.$angular) {\n that._layout();\n that._overlay();\n } else {\n that._overlay();\n }\n\n that._style();\n\n modalViews = element.children(that._locate(\"modalview\"));\n\n if (!that.options.$angular) {\n kendo.mobile.init(modalViews);\n } else {\n modalViews.each(function(idx, element) {\n kendo.compileMobileDirective($(element), options.$angular[0]);\n });\n }\n\n that.panes = [];\n that._paramsHistory = [];\n\n if (!that.options.$angular) {\n that.content.children(kendo.roleSelector(\"pane\")).each(function() {\n pane = kendo.initWidget(this, {}, ui.roles);\n that.panes.push(pane);\n });\n } else {\n that.element.children(kendo.directiveSelector(\"pane\")).each(function() {\n pane = kendo.compileMobileDirective($(this), options.$angular[0]);\n that.panes.push(pane);\n });\n\n that.element.children(kendo.directiveSelector(\"header footer\")).each(function() {\n kendo.compileMobileDirective($(this), options.$angular[0]);\n });\n }\n\n that.expandedPaneShim = $(EXPANED_PANE_SHIM).appendTo(that.element);\n\n that._shimUserEvents = new kendo.UserEvents(that.expandedPaneShim, {\n fastTap: true,\n tap: function() {\n that.collapsePanes();\n }\n });\n },\n\n _locate: function(selectors) {\n return this.options.$angular ? kendo.directiveSelector(selectors) : kendo.roleSelector(selectors);\n },\n\n options: {\n name: \"SplitView\",\n style: \"horizontal\"\n },\n\n expandPanes: function() {\n this.element.addClass(\"km-expanded-splitview\");\n },\n\n collapsePanes: function() {\n this.element.removeClass(\"km-expanded-splitview\");\n },\n\n // Implement view interface\n _layout: function() {\n var that = this,\n element = that.element;\n\n that.transition = kendo.attrValue(element, \"transition\");\n kendo.mobile.ui.View.prototype._layout.call(this);\n kendo.mobile.init(this.header.add(this.footer));\n that.element.addClass(\"km-splitview\");\n that.content.addClass(\"km-split-content\");\n },\n\n _style: function() {\n var style = this.options.style,\n element = this.element,\n styles;\n\n if (style) {\n styles = style.split(\" \");\n $.each(styles, function() {\n element.addClass(\"km-split-\" + this);\n });\n }\n },\n\n showStart: function() {\n var that = this;\n that.element.css(\"display\", \"\");\n\n if (!that.inited) {\n that.inited = true;\n $.each(that.panes, function() {\n if (this.options.initial) {\n this.navigateToInitial();\n } else {\n this.navigate(\"\");\n }\n });\n that.trigger(\"init\", { view: that });\n } else {\n this._invokeNgController();\n }\n\n that.trigger(\"show\", { view: that });\n }\n });\n\n ui.plugin(SplitView);\n })(window.kendo.jQuery);\n\n var __meta__$a = {\n id: \"mobile.application\",\n name: \"Application\",\n category: \"mobile\",\n description: \"The Mobile application provides a framework to build native looking web applications on mobile devices.\",\n depends: [ \"mobile.pane\", \"router\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n mobile = kendo.mobile,\n support = kendo.support,\n Widget = mobile.ui.Widget,\n Pane = mobile.ui.Pane,\n\n DEFAULT_OS = \"ios7\",\n OS = support.mobileOS,\n BERRYPHONEGAP = OS.device == \"blackberry\" && OS.flatVersion >= 600 && OS.flatVersion < 1000 && OS.appMode,\n FONT_SIZE_COEF = 0.93,\n VERTICAL = \"km-vertical\",\n CHROME = OS.browser === \"chrome\",\n BROKEN_WEBVIEW_RESIZE = OS.ios && OS.flatVersion >= 700 && OS.flatVersion < 800 && (OS.appMode || CHROME),\n INITIALLY_HORIZONTAL = (Math.abs(window.orientation) / 90 == 1),\n HORIZONTAL = \"km-horizontal\",\n\n MOBILE_PLATFORMS = {\n ios7: { ios: true, browser: \"default\", device: \"iphone\", flatVersion: \"700\", majorVersion: \"7\", minorVersion: \"0.0\", name: \"ios\", tablet: false },\n ios: { ios: true, browser: \"default\", device: \"iphone\", flatVersion: \"612\", majorVersion: \"6\", minorVersion: \"1.2\", name: \"ios\", tablet: false },\n android: { android: true, browser: \"default\", device: \"android\", flatVersion: \"442\", majorVersion: \"4\", minorVersion: \"4.2\", name: \"android\", tablet: false },\n blackberry: { blackberry: true, browser: \"default\", device: \"blackberry\", flatVersion: \"710\", majorVersion: \"7\", minorVersion: \"1.0\", name: \"blackberry\", tablet: false },\n meego: { meego: true, browser: \"default\", device: \"meego\", flatVersion: \"850\", majorVersion: \"8\", minorVersion: \"5.0\", name: \"meego\", tablet: false },\n wp: { wp: true, browser: \"default\", device: \"wp\", flatVersion: \"800\", majorVersion: \"8\", minorVersion: \"0.0\", name: \"wp\", tablet: false }\n },\n\n viewportTemplate = kendo.template('', { usedWithBlock: false }),\n systemMeta = kendo.template(' ' +\n ' ' +\n ' ', { usedWithBlock: false }),\n clipTemplate = kendo.template('', { usedWithBlock: false }),\n ENABLE_CLIP = OS.android && OS.browser != \"chrome\" || OS.blackberry,\n\n iconMeta = kendo.template('', { usedWithBlock: false }),\n\n HIDEBAR = (OS.device == \"iphone\" || OS.device == \"ipod\") && OS.majorVersion < 7,\n SUPPORT_SWIPE_TO_GO_BACK = (OS.device == \"iphone\" || OS.device == \"ipod\") && OS.majorVersion >= 7,\n HISTORY_TRANSITION = SUPPORT_SWIPE_TO_GO_BACK ? \"none\" : null,\n BARCOMPENSATION = OS.browser == \"mobilesafari\" ? 60 : 0,\n STATUS_BAR_HEIGHT = 20,\n WINDOW = $(window),\n SCREEN = window.screen,\n HEAD = $(\"head\"),\n\n // mobile app events\n INIT = \"init\";\n\n function osCssClass(os, options) {\n var classes = [];\n\n if (OS) {\n classes.push(\"km-on-\" + OS.name);\n }\n\n if (os.skin) {\n classes.push(\"km-\" + os.skin);\n } else {\n if (os.name == \"ios\" && os.majorVersion > 6) {\n classes.push(\"km-ios7\");\n } else {\n classes.push(\"km-\" + os.name);\n }\n }\n if ((os.name == \"ios\" && os.majorVersion < 7) || os.name != \"ios\") {\n classes.push(\"km-\" + os.name + os.majorVersion);\n }\n classes.push(\"km-\" + os.majorVersion);\n classes.push(\"km-m\" + (os.minorVersion ? os.minorVersion[0] : 0));\n\n if (os.variant && ((os.skin && os.skin === os.name) || !os.skin || os.setDefaultPlatform === false)) {\n classes.push(\"km-\" + (os.skin ? os.skin : os.name) + \"-\" + os.variant);\n }\n\n if (os.cordova) {\n classes.push(\"km-cordova\");\n }\n if (os.appMode) {\n classes.push(\"km-app\");\n } else {\n classes.push(\"km-web\");\n }\n\n if (options && options.statusBarStyle) {\n classes.push(\"km-\" + options.statusBarStyle + \"-status-bar\");\n }\n\n return classes.join(\" \");\n }\n\n function wp8Background(os) {\n return 'km-wp-' + (os.noVariantSet ?\n (parseInt($(\"
    \").css(\"background-color\").split(\",\")[1], 10) === 0 ? 'dark' : 'light') :\n os.variant + \" km-wp-\" + os.variant + \"-force\");\n }\n\n function isOrientationHorizontal(element) {\n return OS.wp ? element.css(\"animation-name\") == \"-kendo-landscape\" : (Math.abs(window.orientation) / 90 == 1);\n }\n\n function getOrientationClass(element) {\n return isOrientationHorizontal(element) ? HORIZONTAL : VERTICAL;\n }\n\n function setMinimumHeight(pane) {\n pane.parent().addBack()\n .css(\"min-height\", window.innerHeight);\n }\n\n function applyViewportHeight() {\n $(\"meta[name=viewport]\").remove();\n HEAD.append(viewportTemplate({\n height: \", width=device-width\" + // width=device-width was removed for iOS6, but this should stay for BB PhoneGap.\n (isOrientationHorizontal() ?\n \", height=\" + window.innerHeight + \"px\" :\n (support.mobileOS.flatVersion >= 600 && support.mobileOS.flatVersion < 700) ?\n \", height=\" + window.innerWidth + \"px\" :\n \", height=device-height\")\n }));\n }\n\n var Application = Widget.extend({\n init: function(element, options) {\n // global reference to current application\n mobile.application = this;\n $(this.bootstrap.bind(this, element, options));\n },\n\n bootstrap: function(element, options) {\n element = $(element);\n\n if (!element[0]) {\n element = $(document.body);\n }\n\n Widget.fn.init.call(this, element, options);\n this.element.removeAttr(\"data-\" + kendo.ns + \"role\");\n\n this._setupPlatform();\n this._attachMeta();\n this._setupElementClass();\n this._attachHideBarHandlers();\n var paneOptions = $.extend({}, this.options);\n delete paneOptions.name;\n\n var that = this,\n startHistory = function() {\n that.pane = new Pane(that.element, paneOptions);\n that.pane.navigateToInitial();\n\n if (that.options.updateDocumentTitle) {\n that._setupDocumentTitle();\n }\n\n that._startHistory();\n that.trigger(INIT);\n };\n\n if (this.options.$angular) {\n setTimeout(startHistory);\n } else {\n startHistory();\n }\n },\n\n options: {\n name: \"Application\",\n hideAddressBar: true,\n browserHistory: true,\n historyTransition: HISTORY_TRANSITION,\n modelScope: window,\n statusBarStyle: \"black\",\n transition: \"\",\n retina: false,\n platform: null,\n skin: null,\n updateDocumentTitle: true,\n useNativeScrolling: false\n },\n\n events: [\n INIT\n ],\n\n navigate: function(url, transition) {\n this.pane.navigate(url, transition);\n },\n\n replace: function(url, transition) {\n this.pane.replace(url, transition);\n },\n\n scroller: function() {\n return this.view().scroller;\n },\n\n hideLoading: function() {\n if (this.pane) {\n this.pane.hideLoading();\n } else {\n throw new Error(\"The mobile application instance is not fully instantiated. Please consider activating loading in the application init event handler.\");\n }\n },\n\n showLoading: function() {\n if (this.pane) {\n this.pane.showLoading();\n } else {\n throw new Error(\"The mobile application instance is not fully instantiated. Please consider activating loading in the application init event handler.\");\n }\n },\n\n changeLoadingMessage: function(message) {\n if (this.pane) {\n this.pane.changeLoadingMessage(message);\n } else {\n throw new Error(\"The mobile application instance is not fully instantiated. Please consider changing the message in the application init event handler.\");\n }\n },\n\n view: function() {\n return this.pane.view();\n },\n\n skin: function(skin) {\n var that = this;\n\n if (!arguments.length) {\n return that.options.skin;\n }\n\n that.options.skin = skin || \"\";\n that.element[0].className = \"km-pane\";\n that._setupPlatform();\n that._setupElementClass();\n\n return that.options.skin;\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n this.pane.destroy();\n if (this.options.browserHistory) {\n this.router.destroy();\n }\n },\n\n _setupPlatform: function() {\n var that = this,\n platform = that.options.platform,\n skin = that.options.skin,\n split = [],\n os = OS || MOBILE_PLATFORMS[DEFAULT_OS],\n refreshBackgroundFn = function() {\n if (that.os.variant && (that.os.skin && that.os.skin === that.os.name) || !that.os.skin) {\n that.element.removeClass(\"km-wp-dark km-wp-light km-wp-dark-force km-wp-light-force\").addClass(wp8Background(that.os));\n }\n };\n\n if (platform) {\n os.setDefaultPlatform = true;\n if (typeof platform === \"string\") {\n split = platform.split(\"-\");\n os = $.extend({ variant: split[1] }, os, MOBILE_PLATFORMS[split[0]]);\n } else {\n os = platform;\n }\n }\n\n if (skin) {\n split = skin.split(\"-\");\n if (!OS) {\n os.setDefaultPlatform = false;\n }\n os = $.extend({}, os, { skin: split[0], variant: split[1] });\n }\n\n if (!os.variant) {\n os.noVariantSet = true;\n os.variant = \"dark\";\n }\n\n that.os = os;\n\n that.osCssClass = osCssClass(that.os, that.options);\n\n if (os.name == \"wp\") {\n if (!that.refreshBackgroundColorProxy) {\n that.refreshBackgroundColorProxy = refreshBackgroundFn.bind(that);\n }\n\n $(document).off(\"visibilitychange\", that.refreshBackgroundColorProxy);\n $(document).off(\"resume\", that.refreshBackgroundColorProxy);\n\n if (!os.skin) {\n that.element.parent().css(\"overflow\", \"hidden\");\n\n $(document).on(\"visibilitychange\", that.refreshBackgroundColorProxy); // Restore theme on browser focus (using the Visibility API).\n $(document).on(\"resume\", that.refreshBackgroundColorProxy); // PhoneGap fires resume.\n\n that.refreshBackgroundColorProxy();\n }\n }\n },\n\n _startHistory: function() {\n if (this.options.browserHistory) {\n this.router = new kendo.Router({ pushState: this.options.pushState, root: this.options.root, hashBang: this.options.hashBang });\n this.pane.bindToRouter(this.router);\n this.router.start();\n } else {\n if (!this.options.initial) {\n this.pane.navigate(\"\");\n }\n }\n },\n\n _resizeToScreenHeight: function() {\n var includeStatusBar = $(\"meta[name=apple-mobile-web-app-status-bar-style]\").attr(\"content\").match(/black-translucent|hidden/),\n element = this.element,\n height;\n\n if (CHROME) {\n height = window.innerHeight;\n } else {\n if (isOrientationHorizontal(element)) {\n if (includeStatusBar) {\n if (INITIALLY_HORIZONTAL) {\n height = SCREEN.availWidth + STATUS_BAR_HEIGHT;\n } else {\n height = SCREEN.availWidth;\n }\n } else {\n if (INITIALLY_HORIZONTAL) {\n height = SCREEN.availWidth;\n } else {\n height = SCREEN.availWidth - STATUS_BAR_HEIGHT;\n }\n }\n } else {\n if (includeStatusBar) {\n if (INITIALLY_HORIZONTAL) {\n height = SCREEN.availHeight;\n } else {\n height = SCREEN.availHeight + STATUS_BAR_HEIGHT;\n }\n } else {\n if (INITIALLY_HORIZONTAL) {\n height = SCREEN.availHeight - STATUS_BAR_HEIGHT;\n } else {\n height = SCREEN.availHeight;\n }\n }\n }\n }\n\n element.height(height);\n },\n\n _setupElementClass: function() {\n var that = this, size,\n element = that.element;\n\n element.parent().addClass(\"km-root km-\" + (that.os.tablet ? \"tablet\" : \"phone\"));\n element.addClass(that.osCssClass + \" \" + getOrientationClass(element));\n if (this.options.useNativeScrolling) {\n element.parent().addClass(\"km-native-scrolling\");\n }\n\n if (CHROME) {\n element.addClass(\"km-ios-chrome\");\n }\n\n if (support.wpDevicePixelRatio) {\n element.parent().css(\"font-size\", support.wpDevicePixelRatio + \"em\");\n }\n\n if (this.options.retina) {\n element.parent().addClass(\"km-retina\");\n element.parent().css(\"font-size\", (support.devicePixelRatio * FONT_SIZE_COEF) + \"em\");\n }\n\n if (BERRYPHONEGAP) {\n applyViewportHeight();\n }\n if (that.options.useNativeScrolling) {\n element.parent().addClass(\"km-native-scrolling\");\n } else if (ENABLE_CLIP) {\n size = (screen.availWidth > screen.availHeight ? screen.availWidth : screen.availHeight) + 200;\n $(clipTemplate({ width: size, height: size })).appendTo(HEAD);\n }\n\n if (BROKEN_WEBVIEW_RESIZE) {\n that._resizeToScreenHeight();\n }\n\n kendo.onResize(function() {\n element\n .removeClass(\"km-horizontal km-vertical\")\n .addClass(getOrientationClass(element));\n\n if (that.options.useNativeScrolling) {\n setMinimumHeight(element);\n }\n\n if (BROKEN_WEBVIEW_RESIZE) {\n that._resizeToScreenHeight();\n }\n\n if (BERRYPHONEGAP) {\n applyViewportHeight();\n }\n\n kendo.resize(element);\n });\n },\n\n _clearExistingMeta: function() {\n HEAD.find(\"meta\")\n .filter(\"[name|='apple-mobile-web-app'],[name|='msapplication-tap'],[name='viewport']\")\n .remove();\n },\n\n _attachMeta: function() {\n var options = this.options,\n icon = options.icon, size;\n\n this._clearExistingMeta();\n\n if (!BERRYPHONEGAP) {\n HEAD.prepend(viewportTemplate({ height: \"\", scale: this.options.retina ? 1 / support.devicePixelRatio : \"1.0\" }));\n }\n\n HEAD.prepend(systemMeta(options));\n\n if (icon) {\n if (typeof icon === \"string\") {\n icon = { \"\": icon };\n }\n\n for (size in icon) {\n HEAD.prepend(iconMeta({ icon: icon[size], size: size }));\n }\n }\n\n if (options.useNativeScrolling) {\n setMinimumHeight(this.element);\n }\n },\n\n _attachHideBarHandlers: function() {\n var that = this,\n hideBar = that._hideBar.bind(that);\n\n if (support.mobileOS.appMode || !that.options.hideAddressBar || !HIDEBAR || that.options.useNativeScrolling) {\n return;\n }\n\n that._initialHeight = {};\n\n WINDOW.on(\"load\", hideBar);\n\n kendo.onResize(function() {\n setTimeout(window.scrollTo, 0, 0, 1);\n });\n },\n\n _setupDocumentTitle: function() {\n var that = this,\n defaultTitle = document.title;\n\n that.pane.bind(\"viewShow\", function(e) {\n var title = e.view.title;\n document.title = title !== undefined$1 ? title : defaultTitle;\n });\n },\n\n _hideBar: function() {\n var that = this,\n element = that.element;\n\n element.height(kendo.support.transforms.css + \"calc(100% + \" + BARCOMPENSATION + \"px)\");\n $(window).trigger(kendo.support.resize);\n }\n });\n\n kendo.mobile.Application = Application;\n kendo.ui.plugin(Application, kendo.mobile, 'Mobile');\n })(window.kendo.jQuery);\n\n var __meta__$9 = {\n id: \"mobile.actionsheet\",\n name: \"ActionSheet\",\n category: \"mobile\",\n description: \"The mobile ActionSheet widget displays a set of choices related to a task the user initiates.\",\n depends: [ \"mobile.popover\", \"mobile.shim\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n support = kendo.support,\n ui = kendo.mobile.ui,\n Shim = ui.Shim,\n Popup = ui.Popup,\n Widget = ui.Widget,\n OPEN = \"open\",\n CLOSE = \"close\",\n COMMAND = \"command\",\n BUTTONS = \"li>a\",\n CONTEXT_DATA = \"actionsheetContext\",\n WRAP = '
    ',\n cancelTemplate = kendo.template('
  • #:cancel#
  • ');\n\n var ActionSheet = Widget.extend({\n init: function(element, options) {\n var that = this,\n ShimClass,\n tablet,\n type,\n os = support.mobileOS;\n\n Widget.fn.init.call(that, element, options);\n\n options = that.options;\n type = options.type;\n element = that.element;\n\n if (type === \"auto\") {\n tablet = os && os.tablet;\n } else {\n tablet = type === \"tablet\";\n }\n\n ShimClass = tablet ? Popup : Shim;\n\n if (options.cancelTemplate) {\n cancelTemplate = kendo.template(options.cancelTemplate);\n }\n\n element\n .addClass(\"km-actionsheet\")\n .append(cancelTemplate({ cancel: that.options.cancel }))\n .wrap(WRAP)\n .on(\"up\", BUTTONS, \"_click\")\n .on(\"click\", BUTTONS, kendo.preventDefault);\n\n that.view().bind(\"destroy\", function() {\n that.destroy();\n });\n\n that.wrapper = element.parent().addClass(type ? \" km-actionsheet-\" + type : \"\");\n\n that.shim = new ShimClass(that.wrapper, $.extend({ modal: os.ios && os.majorVersion < 7, className: \"km-actionsheet-root\" }, that.options.popup) );\n\n that._closeProxy = that._close.bind(that);\n that._shimHideProxy = that._shimHide.bind(that);\n that.shim.bind(\"hide\", that._shimHideProxy);\n\n if (tablet) {\n kendo.onResize(that._closeProxy);\n }\n\n kendo.notify(that, ui);\n },\n\n events: [\n OPEN,\n CLOSE,\n COMMAND\n ],\n\n options: {\n name: \"ActionSheet\",\n cancel: \"Cancel\",\n type: \"auto\",\n popup: { height: \"auto\" }\n },\n\n open: function(target, context) {\n var that = this;\n that.target = $(target);\n that.context = context;\n that.shim.show(target);\n },\n\n close: function() {\n this.context = this.target = null;\n this.shim.hide();\n },\n\n openFor: function(target) {\n var that = this,\n context = target.data(CONTEXT_DATA);\n\n that.open(target, context);\n that.trigger(OPEN, { target: target, context: context });\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n kendo.unbindResize(this._closeProxy);\n this.shim.destroy();\n },\n\n _click: function(e) {\n if (e.isDefaultPrevented()) {\n return;\n }\n\n var currentTarget = $(e.currentTarget);\n var action = currentTarget.data(\"action\");\n\n if (action) {\n var actionData = {\n target: this.target,\n context: this.context\n },\n $angular = this.options.$angular;\n\n if ($angular) {\n this.element.injector().get(\"$parse\")(action)($angular[0])(actionData);\n } else {\n kendo.getter(action)(window)(actionData);\n }\n }\n\n this.trigger(COMMAND, { target: this.target, context: this.context, currentTarget: currentTarget });\n\n e.preventDefault();\n this._close();\n },\n\n _shimHide: function(e) {\n if (!this.trigger(CLOSE)) {\n this.context = this.target = null;\n } else {\n e.preventDefault();\n }\n },\n\n _close: function(e) {\n if (!this.trigger(CLOSE)) {\n this.close();\n } else {\n e.preventDefault();\n }\n }\n });\n\n ui.plugin(ActionSheet);\n })(window.kendo.jQuery);\n\n var __meta__$8 = {\n id: \"mobile.button\",\n name: \"Button\",\n category: \"mobile\",\n description: \"The Button widget navigates between mobile Application views when pressed.\",\n depends: [ \"userevents\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n mobile = kendo.mobile,\n ui = mobile.ui,\n Widget = ui.Widget,\n support = kendo.support,\n os = support.mobileOS,\n ANDROID3UP = os.android && os.flatVersion >= 300,\n CLICK = \"click\",\n DISABLED = \"disabled\",\n DISABLEDSTATE = \"km-state-disabled\";\n\n function highlightButton(widget, event, highlight) {\n $(event.target).closest(\".km-button,.km-detail\").toggleClass(\"km-state-active\", highlight);\n\n if (ANDROID3UP && widget.deactivateTimeoutID) {\n clearTimeout(widget.deactivateTimeoutID);\n widget.deactivateTimeoutID = 0;\n }\n }\n\n function createBadge(value) {\n return $('' + value + '');\n }\n\n var Button = Widget.extend({\n init: function(element, options) {\n var that = this;\n\n Widget.fn.init.call(that, element, options);\n var useTap = that.options.clickOn === \"up\";\n\n that._wrap();\n that._style();\n\n if (!useTap) {\n that.element.attr(\"data-navigate-on-press\", true);\n }\n\n that.options.enable = that.options.enable && !that.element.attr(DISABLED);\n that.enable(that.options.enable);\n\n that._userEvents = new kendo.UserEvents(that.element, {\n allowSelection: !useTap,\n fastTap: true,\n press: function(e) {\n that._activate(e);\n },\n release: function(e) {\n highlightButton(that, e, false);\n if (!useTap) { e.event.stopPropagation(); }\n }\n });\n\n that._userEvents.bind(useTap ? \"tap\" : \"press\", function(e) {\n that._release(e);\n });\n\n\n if (ANDROID3UP) {\n that.element.on(\"move\", function(e) { that._timeoutDeactivate(e); });\n }\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n this._userEvents.destroy();\n },\n\n events: [\n CLICK\n ],\n\n options: {\n name: \"Button\",\n icon: \"\",\n style: \"\",\n badge: \"\",\n clickOn: \"up\",\n enable: true\n },\n\n badge: function(value) {\n var badge = this.badgeElement = this.badgeElement || createBadge(value).appendTo(this.element);\n\n if (value || value === 0) {\n badge.html(value);\n return this;\n }\n\n if (value === false) {\n badge.empty().remove();\n this.badgeElement = false;\n return this;\n }\n\n return badge.html();\n },\n\n enable: function(enable) {\n var element = this.element;\n\n if (typeof enable == \"undefined\") {\n enable = true;\n }\n\n this.options.enable = enable;\n\n if (enable) {\n element.prop(DISABLED, false);\n } else {\n element.attr(DISABLED, DISABLED);\n }\n\n element.toggleClass(DISABLEDSTATE, !enable);\n },\n\n _timeoutDeactivate: function(e) {\n if (!this.deactivateTimeoutID) {\n this.deactivateTimeoutID = setTimeout(highlightButton, 500, this, e, false);\n }\n },\n\n _activate: function(e) {\n var activeElement = document.activeElement,\n nodeName = activeElement ? activeElement.nodeName : \"\";\n\n if (this.options.enable) {\n highlightButton(this, e, true);\n\n if (nodeName == \"INPUT\" || nodeName == \"TEXTAREA\") {\n activeElement.blur(); // Hide device keyboard\n }\n }\n },\n\n _release: function(e) {\n var that = this;\n\n if (e.which > 1) {\n return;\n }\n\n if (!that.options.enable) {\n e.preventDefault();\n return;\n }\n\n if (that.trigger(CLICK, { target: $(e.target), button: that.element })) {\n e.preventDefault();\n }\n },\n\n _style: function() {\n var style = this.options.style,\n element = this.element,\n styles;\n\n if (style) {\n styles = style.split(\" \");\n $.each(styles, function() {\n element.addClass(\"km-\" + this);\n });\n }\n },\n\n _wrap: function() {\n var that = this,\n icon = that.options.icon,\n badge = that.options.badge,\n iconSpan = '').children(\"span.km-text\");\n }\n\n if (!image[0] && icon) {\n if (!span[0]) {\n iconSpan += \" km-notext\";\n }\n that.iconElement = element.prepend($(iconSpan + '\" />'));\n }\n\n if (badge || badge === 0) {\n that.badgeElement = createBadge(badge).appendTo(element);\n }\n }\n });\n\n var BackButton = Button.extend({\n options: {\n name: \"BackButton\",\n style: \"back\"\n },\n\n init: function(element, options) {\n var that = this;\n Button.fn.init.call(that, element, options);\n\n if (typeof that.element.attr(\"href\") === \"undefined\") {\n that.element.attr(\"href\", \"#:back\");\n }\n }\n });\n\n var DetailButton = Button.extend({\n options: {\n name: \"DetailButton\",\n style: \"\"\n },\n\n init: function(element, options) {\n Button.fn.init.call(this, element, options);\n },\n\n _style: function() {\n var style = this.options.style + \" detail\",\n element = this.element;\n\n if (style) {\n var styles = style.split(\" \");\n $.each(styles, function() {\n element.addClass(\"km-\" + this);\n });\n }\n },\n\n _wrap: function() {\n var that = this,\n icon = that.options.icon,\n iconSpan = ''));\n }\n }\n\n });\n\n ui.plugin(Button);\n ui.plugin(BackButton);\n ui.plugin(DetailButton);\n })(window.kendo.jQuery);\n\n var __meta__$7 = {\n id: \"mobile.buttongroup\",\n name: \"ButtonGroup\",\n category: \"mobile\",\n description: \"The Kendo mobile ButtonGroup widget is a linear set of grouped buttons.\",\n depends: [ \"core\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n ui = kendo.mobile.ui,\n Widget = ui.Widget,\n ACTIVE = \"state-active\",\n DISABLE = \"state-disabled\",\n SELECT = \"select\",\n SELECTOR = \"li:not(.km-\" + ACTIVE + \")\";\n\n function className(name) {\n return \"k-\" + name + \" km-\" + name;\n }\n\n function createBadge(value) {\n return $('' + value + '');\n }\n\n var ButtonGroup = Widget.extend({\n init: function(element, options) {\n var that = this;\n\n Widget.fn.init.call(that, element, options);\n\n that.element.addClass(\"km-buttongroup k-widget k-button-group\").find(\"li\").each(that._button);\n\n that.element.on(that.options.selectOn, SELECTOR, \"_select\");\n\n that._enable = true;\n that.select(that.options.index);\n\n if (!that.options.enable) {\n that._enable = false;\n that.wrapper.addClass(className(DISABLE));\n }\n },\n\n events: [\n SELECT\n ],\n\n options: {\n name: \"ButtonGroup\",\n selectOn: \"down\",\n index: -1,\n enable: true\n },\n\n current: function() {\n return this.element.find(\".km-\" + ACTIVE);\n },\n\n select: function(li) {\n var that = this,\n index = -1;\n\n if (li === undefined$1 || li === -1 || !that._enable || $(li).is(\".km-\" + DISABLE)) {\n return;\n }\n\n that.current().removeClass(className(ACTIVE));\n\n if (typeof li === \"number\") {\n index = li;\n li = $(that.element[0].children[li]);\n } else if (li.nodeType) {\n li = $(li);\n index = li.index();\n }\n\n li.addClass(className(ACTIVE));\n that.selectedIndex = index;\n },\n\n badge: function(item, value) {\n var buttongroup = this.element, badge;\n\n if (!isNaN(item)) {\n item = buttongroup.children().get(item);\n }\n\n item = buttongroup.find(item);\n badge = $(item.children(\".km-badge\")[0] || createBadge(value).appendTo(item));\n\n if (value || value === 0) {\n badge.html(value);\n return this;\n }\n\n if (value === false) {\n badge.empty().remove();\n return this;\n }\n\n return badge.html();\n },\n\n enable: function(enable) {\n if (typeof enable == \"undefined\") {\n enable = true;\n }\n\n this.wrapper.toggleClass(className(DISABLE), !enable);\n\n this._enable = this.options.enable = enable;\n },\n\n _button: function() {\n var button = $(this).addClass(className(\"button\")),\n icon = kendo.attrValue(button, \"icon\"),\n badge = kendo.attrValue(button, \"badge\"),\n span = button.children(\"span\"),\n image = button.find(\"img\").addClass(className(\"image\"));\n\n if (!span[0]) {\n span = button.wrapInner(\"\").children(\"span\");\n }\n\n span.addClass(className(\"text\"));\n\n if (!image[0] && icon) {\n button.prepend($(''));\n }\n\n if (badge || badge === 0) {\n createBadge(badge).appendTo(button);\n }\n },\n\n _select: function(e) {\n if (e.which > 1 || e.isDefaultPrevented() || !this._enable) {\n return;\n }\n\n this.select(e.currentTarget);\n this.trigger(SELECT, { index: this.selectedIndex });\n }\n });\n\n ui.plugin(ButtonGroup);\n })(window.kendo.jQuery);\n\n var __meta__$6 = {\n id: \"mobile.collapsible\",\n name: \"Collapsible\",\n category: \"mobile\",\n description: \"The Kendo mobile Collapsible widget provides ability for creating collapsible blocks of content.\",\n depends: [ \"core\", \"userevents\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n ui = kendo.mobile.ui,\n Widget = ui.Widget,\n COLLAPSIBLE = \"km-collapsible\",\n HEADER = \"km-collapsible-header\",\n CONTENT = \"km-collapsible-content\",\n INSET = \"km-collapsibleinset\",\n HEADER_WRAPPER = \"
    \",\n CONTENT_WRAPPER = \"
    \",\n\n COLLAPSED = \"km-collapsed\",\n EXPANDED = \"km-expanded\",\n ANIMATED = \"km-animated\",\n\n //icon position\n LEFT = \"left\",\n\n //events\n EXAPND = \"expand\",\n COLLAPSE = \"collapse\";\n\n var Collapsible = Widget.extend({\n init: function(element, options) {\n var that = this,\n container = $(element);\n\n Widget.fn.init.call(that, container, options);\n\n container.addClass(COLLAPSIBLE);\n\n that._buildHeader();\n that.content = container.children().not(that.header).wrapAll(CONTENT_WRAPPER).parent();\n\n that._userEvents = new kendo.UserEvents(that.header, {\n fastTap: true,\n tap: function() { that.toggle(); }\n });\n\n container.addClass(that.options.collapsed ? COLLAPSED : EXPANDED);\n\n if (that.options.inset) {\n container.addClass(INSET);\n }\n\n if (that.options.animation) {\n that.content.addClass(ANIMATED);\n that.content.height(0);\n if (that.options.collapsed) {\n that.content.hide();\n }\n } else if (that.options.collapsed) {\n that.content.hide();\n }\n },\n\n events: [\n EXAPND,\n COLLAPSE\n ],\n\n options: {\n name: \"Collapsible\",\n collapsed: true,\n collapseIcon: \"arrow-n\",\n expandIcon: \"arrow-s\",\n iconPosition: LEFT,\n animation: true,\n inset: false\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n this._userEvents.destroy();\n },\n\n expand: function(instant) {\n var icon = this.options.collapseIcon,\n content = this.content,\n ios = kendo.support.mobileOS.ios;\n\n if (!this.trigger(EXAPND)) {\n if (icon) {\n this.header.find(\".km-icon\").removeClass().addClass(\"km-icon km-\" + icon);\n }\n this.element.removeClass(COLLAPSED).addClass(EXPANDED);\n\n if (this.options.animation && !instant) {\n content.off(\"transitionend\");\n content.show();\n if (ios) { content.removeClass(ANIMATED); } //required to get the height of the content on iOS\n content.height(this._getContentHeight());\n if (ios) { content.addClass(ANIMATED); }\n\n kendo.resize(content);\n } else {\n content.show();\n }\n }\n },\n\n collapse: function(instant) {\n var icon = this.options.expandIcon,\n content = this.content;\n\n if (!this.trigger(COLLAPSE)) {\n if (icon) {\n this.header.find(\".km-icon\").removeClass().addClass(\"km-icon km-\" + icon);\n }\n this.element.removeClass(EXPANDED).addClass(COLLAPSED);\n\n if (this.options.animation && !instant) {\n content.one(\"transitionend\", function() { content.hide(); });\n content.height(0);\n } else {\n content.hide();\n }\n }\n },\n\n toggle: function(instant) {\n if (this.isCollapsed()) {\n this.expand(instant);\n } else {\n this.collapse(instant);\n }\n },\n\n isCollapsed: function() {\n return this.element.hasClass(COLLAPSED);\n },\n\n resize: function() {\n if (!this.isCollapsed() && this.options.animation) {\n this.content.height(this._getContentHeight());\n }\n },\n\n _buildHeader: function() {\n var header = this.element.children(\":header\").wrapAll(HEADER_WRAPPER),\n iconSpan = $(''),\n icon = this.options.collapsed ? this.options.expandIcon : this.options.collapseIcon,\n iconPosition = this.options.iconPosition;\n\n if (icon) {\n header.prepend(iconSpan);\n iconSpan.addClass(\"km-\" + icon);\n }\n\n this.header = header.parent();\n this.header.addClass(\"km-icon-\" + iconPosition);\n },\n\n _getContentHeight: function() {\n var style = this.content.attr(\"style\"),\n height;\n\n this.content.css({\n position: 'absolute',\n visibility: 'hidden',\n height: \"auto\"\n });\n\n height = this.content.height();\n\n this.content.attr(\"style\", style ? style : \"\");\n\n return height;\n }\n });\n\n ui.plugin(Collapsible);\n })(window.kendo.jQuery);\n\n var __meta__$5 = {\n id: \"mobile.listview\",\n name: \"ListView\",\n category: \"mobile\",\n description: \"The Kendo Mobile ListView widget is used to display flat or grouped list of items.\",\n depends: [ \"data\", \"userevents\", \"mobile.button\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n Node = window.Node,\n mobile = kendo.mobile,\n ui = mobile.ui,\n outerHeight = kendo._outerHeight,\n DataSource = kendo.data.DataSource,\n Widget = ui.DataBoundWidget,\n ITEM_SELECTOR = \".km-list > li, > li:not(.km-group-container)\",\n HIGHLIGHT_SELECTOR = \".km-listview-link, .km-listview-label\",\n ICON_SELECTOR = \"[\" + kendo.attr(\"icon\") + \"]\",\n attrValue = kendo.attrValue,\n GROUP_CLASS = \"km-group-title\",\n ACTIVE_CLASS = \"km-state-active\",\n GROUP_WRAPPER = '
    ',\n GROUP_TEMPLATE = kendo.template('
  • #= this.headerTemplate(data) #
      #= kendo.render(this.template, data.items)#
  • '),\n WRAPPER = '
    ',\n SEARCH_TEMPLATE = kendo.template(''),\n NS = \".kendoMobileListView\",\n STYLED = \"styled\",\n DATABOUND = \"dataBound\",\n DATABINDING = \"dataBinding\",\n ITEM_CHANGE = \"itemChange\",\n CLICK = \"click\",\n CHANGE = \"change\",\n PROGRESS = \"progress\",\n FUNCTION = \"function\",\n\n whitespaceRegExp = /^\\s+$/,\n buttonRegExp = /button/;\n\n function whitespace() {\n return this.nodeType === Node.TEXT_NODE && this.nodeValue.match(whitespaceRegExp);\n }\n\n function addIcon(item, icon) {\n if (icon && !item[0].querySelector(\".km-icon\")) {\n item.prepend('');\n }\n }\n\n function enhanceItem(item) {\n addIcon(item, attrValue(item, \"icon\"));\n addIcon(item, attrValue(item.children(ICON_SELECTOR), \"icon\"));\n }\n\n function enhanceLinkItem(item) {\n var parent = item.parent(),\n itemAndDetailButtons = item.add(parent.children(kendo.roleSelector(\"detailbutton\"))),\n otherNodes = parent.contents().not(itemAndDetailButtons).not(whitespace);\n\n if (otherNodes.length) {\n return;\n }\n\n item.addClass(\"km-listview-link\")\n .attr(kendo.attr(\"role\"), \"listview-link\");\n\n addIcon(item, attrValue(parent, \"icon\"));\n addIcon(item, attrValue(item, \"icon\"));\n }\n\n function enhanceCheckBoxItem(label) {\n if (!label[0].querySelector(\"input[type=checkbox],input[type=radio]\")) {\n return;\n }\n\n var item = label.parent();\n\n if (item.contents().not(label).not(function() { return this.nodeType == 3; })[0]) {\n return;\n }\n\n label.addClass(\"km-listview-label\");\n\n label.children(\"[type=checkbox],[type=radio]\").addClass(\"km-widget km-icon km-check\");\n }\n\n function putAt(element, top) {\n $(element).css('transform', 'translate3d(0px, ' + top + 'px, 0px)');\n }\n\n var HeaderFixer = kendo.Class.extend({\n init: function(listView) {\n var scroller = listView.scroller();\n\n if (!scroller) {\n return;\n }\n\n this.options = listView.options;\n this.element = listView.element;\n this.scroller = listView.scroller();\n this._shouldFixHeaders();\n\n var headerFixer = this;\n\n var cacheHeaders = function() {\n headerFixer._cacheHeaders();\n };\n\n listView.bind(\"resize\", cacheHeaders);\n\n listView.bind(STYLED, cacheHeaders);\n listView.bind(DATABOUND, cacheHeaders);\n\n this._scrollHandler = function(e) {\n headerFixer._fixHeader(e);\n };\n scroller.bind(\"scroll\", this._scrollHandler);\n },\n\n destroy: function() {\n var that = this;\n if (that.scroller) {\n that.scroller.unbind(\"scroll\", that._scrollHandler);\n }\n },\n\n _fixHeader: function(e) {\n if (!this.fixedHeaders) {\n return;\n }\n\n var i = 0,\n scroller = this.scroller,\n headers = this.headers,\n scrollTop = e.scrollTop,\n headerPair,\n offset,\n header;\n\n do {\n headerPair = headers[i++];\n if (!headerPair) {\n header = $(\"
    \");\n break;\n }\n offset = headerPair.offset;\n header = headerPair.header;\n } while (offset + 1 > scrollTop);\n\n if (this.currentHeader != i) {\n scroller.fixedContainer.html(header.clone());\n this.currentHeader = i;\n }\n },\n\n _shouldFixHeaders: function() {\n this.fixedHeaders = this.options.type === \"group\" && this.options.fixedHeaders;\n },\n\n _cacheHeaders: function() {\n this._shouldFixHeaders();\n\n if (!this.fixedHeaders) {\n return;\n }\n\n var headers = [], offset = this.scroller.scrollTop;\n\n this.element.find(\".\" + GROUP_CLASS).each(function(_, header) {\n header = $(header);\n headers.unshift({\n offset: header.position().top + offset,\n header: header\n });\n });\n\n this.headers = headers;\n this._fixHeader({ scrollTop: offset });\n }\n });\n\n var DEFAULT_PULL_PARAMETERS = function() {\n return { page: 1 };\n };\n\n var RefreshHandler = kendo.Class.extend({\n init: function(listView) {\n var handler = this,\n options = listView.options,\n scroller = listView.scroller(),\n pullParameters = options.pullParameters || DEFAULT_PULL_PARAMETERS;\n\n this.listView = listView;\n this.scroller = scroller;\n\n listView.bind(\"_dataSource\", function(e) {\n handler.setDataSource(e.dataSource);\n });\n\n scroller.setOptions({\n pullToRefresh: true,\n pull: function() {\n if (!handler._pulled) {\n handler._pulled = true;\n handler.dataSource.read(pullParameters.call(listView, handler._first));\n }\n },\n messages: {\n pullTemplate: options.messages.pullTemplate,\n releaseTemplate: options.messages.releaseTemplate,\n refreshTemplate: options.messages.refreshTemplate\n }\n });\n },\n\n setDataSource: function(dataSource) {\n var handler = this;\n\n this._first = dataSource.view()[0];\n this.dataSource = dataSource;\n\n dataSource.bind(\"change\", function() {\n handler._change();\n });\n\n dataSource.bind(\"error\", function() {\n handler._change();\n });\n },\n\n _change: function() {\n var scroller = this.scroller,\n dataSource = this.dataSource;\n\n if (this._pulled) {\n scroller.pullHandled();\n }\n\n if (this._pulled || !this._first) {\n var view = dataSource.view();\n\n if (view[0]) {\n this._first = view[0];\n }\n }\n\n this._pulled = false;\n }\n });\n\n var VirtualList = kendo.Observable.extend({\n init: function(options) {\n var list = this;\n\n kendo.Observable.fn.init.call(list);\n\n list.buffer = options.buffer;\n list.height = options.height;\n list.item = options.item;\n list.items = [];\n list.footer = options.footer;\n\n list.buffer.bind(\"reset\", function() {\n list.refresh();\n });\n\n },\n\n refresh: function() {\n var buffer = this.buffer,\n items = this.items,\n endReached = false;\n\n while (items.length) {\n items.pop().destroy();\n }\n\n this.offset = buffer.offset;\n\n var itemConstructor = this.item,\n prevItem,\n item;\n\n for (var idx = 0; idx < buffer.viewSize; idx ++) {\n if (idx === buffer.total()) {\n endReached = true;\n break;\n }\n item = itemConstructor(this.content(this.offset + items.length));\n item.below(prevItem);\n prevItem = item;\n items.push(item);\n }\n\n this.itemCount = items.length;\n\n this.trigger(\"reset\");\n\n this._resize();\n\n if (endReached) {\n this.trigger(\"endReached\");\n }\n },\n\n totalHeight: function() {\n if (!this.items[0]) {\n return 0;\n }\n\n var list = this,\n items = list.items,\n top = items[0].top,\n bottom = items[items.length - 1].bottom,\n averageItemHeight = (bottom - top) / list.itemCount,\n remainingItemsCount = list.buffer.length - list.offset - list.itemCount;\n\n return (this.footer ? this.footer.height : 0) + bottom + remainingItemsCount * averageItemHeight;\n },\n\n batchUpdate: function(top) {\n var height = this.height(),\n items = this.items,\n item,\n initialOffset = this.offset;\n\n if (!items[0]) {\n return;\n }\n\n if (this.lastDirection) { // scrolling up\n while (items[items.length - 1].bottom > top + height * 2) {\n if (this.offset === 0) {\n break;\n }\n\n this.offset --;\n item = items.pop();\n item.update(this.content(this.offset));\n item.above(items[0]);\n items.unshift(item);\n }\n } else { // scrolling down\n while (items[0].top < top - height) {\n var nextIndex = this.offset + this.itemCount; // here, it should be offset + 1 + itemCount - 1.\n\n if (nextIndex === this.buffer.total()) {\n this.trigger(\"endReached\");\n break;\n }\n\n if (nextIndex === this.buffer.length) {\n break;\n }\n\n item = items.shift();\n item.update(this.content(this.offset + this.itemCount));\n item.below(items[items.length - 1]);\n items.push(item);\n this.offset ++;\n }\n }\n\n if (initialOffset !== this.offset) {\n this._resize();\n }\n },\n\n update: function(top) {\n var list = this,\n items = this.items,\n item,\n firstItem,\n lastItem,\n height = this.height(),\n itemCount = this.itemCount,\n padding = height / 2,\n up = (this.lastTop || 0) > top,\n topBorder = top - padding,\n bottomBorder = top + height + padding;\n\n if (!items[0]) {\n return;\n }\n\n this.lastTop = top;\n this.lastDirection = up;\n\n if (up) { // scrolling up\n if (items[0].top > topBorder && // needs reorder\n items[items.length - 1].bottom > bottomBorder + padding && // enough padding below\n this.offset > 0 // we are not at the top\n )\n {\n this.offset --;\n item = items.pop();\n firstItem = items[0];\n item.update(this.content(this.offset));\n items.unshift(item);\n\n item.above(firstItem);\n list._resize();\n }\n } else { // scrolling down\n if (\n items[items.length - 1].bottom < bottomBorder && // needs reorder\n items[0].top < topBorder - padding // enough padding above\n )\n {\n var nextIndex = this.offset + itemCount; // here, it should be offset + 1 + itemCount - 1.\n\n if (nextIndex === this.buffer.total()) {\n this.trigger(\"endReached\");\n } else if (nextIndex !== this.buffer.length) {\n item = items.shift();\n lastItem = items[items.length - 1];\n items.push(item);\n item.update(this.content(this.offset + this.itemCount));\n list.offset ++;\n\n item.below(lastItem);\n list._resize();\n }\n }\n }\n },\n\n content: function(index) {\n return this.buffer.at(index);\n },\n\n destroy: function() {\n this.unbind();\n },\n\n _resize: function() {\n var items = this.items,\n top = 0,\n bottom = 0,\n firstItem = items[0],\n lastItem = items[items.length - 1];\n\n if (firstItem) {\n top = firstItem.top;\n bottom = lastItem.bottom;\n }\n\n this.trigger(\"resize\", { top: top, bottom: bottom });\n\n if (this.footer) {\n this.footer.below(lastItem);\n }\n }\n });\n\n // export for testing purposes\n kendo.mobile.ui.VirtualList = VirtualList;\n\n var VirtualListViewItem = kendo.Class.extend({\n init: function(listView, dataItem) {\n var element = listView.append([dataItem], true)[0],\n height = element.offsetHeight;\n\n $.extend(this, {\n top: 0,\n element: element,\n listView: listView,\n height: height,\n bottom: height\n });\n },\n\n update: function(dataItem) {\n this.element = this.listView.setDataItem(this.element, dataItem);\n },\n\n above: function(item) {\n if (item) {\n this.height = this.element.offsetHeight;\n this.top = item.top - this.height;\n this.bottom = item.top;\n putAt(this.element, this.top);\n }\n },\n\n below: function(item) {\n if (item) {\n this.height = this.element.offsetHeight;\n this.top = item.bottom;\n this.bottom = this.top + this.height;\n putAt(this.element, this.top);\n }\n },\n\n destroy: function() {\n kendo.destroy(this.element);\n $(this.element).remove();\n }\n });\n\n var LOAD_ICON = '
    ';\n var VirtualListViewLoadingIndicator = kendo.Class.extend({\n init: function(listView) {\n this.element = $('
  • ').appendTo(listView.element);\n this._loadIcon = $(LOAD_ICON).appendTo(this.element);\n },\n\n enable: function() {\n this.element.show();\n this.height = outerHeight(this.element, true);\n },\n\n disable: function() {\n this.element.hide();\n this.height = 0;\n },\n\n below: function(item) {\n if (item) {\n this.top = item.bottom;\n this.bottom = this.height + this.top;\n putAt(this.element, this.top);\n }\n }\n });\n\n var VirtualListViewPressToLoadMore = VirtualListViewLoadingIndicator.extend({\n init: function(listView, buffer) {\n\n this._loadIcon = $(LOAD_ICON).hide();\n this._loadButton = $('' + listView.options.messages.loadMoreText + '').hide();\n this.element = $('
  • ').append(this._loadIcon).append(this._loadButton).appendTo(listView.element);\n\n var loadMore = this;\n\n this._loadButton.kendoMobileButton().data(\"kendoMobileButton\").bind(\"click\", function() {\n loadMore._hideShowButton();\n buffer.next();\n });\n\n buffer.bind(\"resize\", function() {\n loadMore._showLoadButton();\n });\n\n this.height = outerHeight(this.element, true);\n this.disable();\n },\n\n _hideShowButton: function() {\n this._loadButton.hide();\n this.element.addClass(\"km-scroller-refresh\");\n this._loadIcon.css('display', 'block');\n },\n\n _showLoadButton: function() {\n this._loadButton.show();\n this.element.removeClass(\"km-scroller-refresh\");\n this._loadIcon.hide();\n }\n });\n\n var VirtualListViewItemBinder = kendo.Class.extend({\n init: function(listView) {\n var binder = this;\n\n this.chromeHeight = outerHeight(listView.wrapper.children().not(listView.element));\n this.listView = listView;\n this.scroller = listView.scroller();\n this.options = listView.options;\n\n listView.bind(\"_dataSource\", function(e) {\n binder.setDataSource(e.dataSource, e.empty);\n });\n\n listView.bind(\"resize\", function() {\n if (!binder.list.items.length) {\n return;\n }\n\n binder.scroller.reset();\n binder.buffer.range(0);\n binder.list.refresh();\n });\n\n this.scroller.makeVirtual();\n\n this._scroll = function(e) {\n binder.list.update(e.scrollTop);\n };\n this.scroller.bind('scroll', this._scroll);\n this._scrollEnd = function(e) {\n binder.list.batchUpdate(e.scrollTop);\n };\n this.scroller.bind('scrollEnd', this._scrollEnd);\n },\n\n destroy: function() {\n this.list.unbind();\n this.buffer.unbind();\n this.scroller.unbind('scroll', this._scroll);\n this.scroller.unbind('scrollEnd', this._scrollEnd);\n },\n\n setDataSource: function(dataSource, empty) {\n var binder = this,\n options = this.options,\n listView = this.listView,\n scroller = listView.scroller(),\n pressToLoadMore = options.loadMore,\n pageSize,\n buffer,\n footer;\n\n this.dataSource = dataSource;\n\n pageSize = dataSource.pageSize() || options.virtualViewSize;\n\n if (!pageSize && !empty) {\n throw new Error(\"the DataSource does not have page size configured. Page Size setting is mandatory for the mobile listview virtual scrolling to work as expected.\");\n }\n\n if (this.buffer) {\n this.buffer.destroy();\n }\n\n buffer = new kendo.data.Buffer(dataSource, Math.floor(pageSize / 2), pressToLoadMore);\n\n if (pressToLoadMore) {\n footer = new VirtualListViewPressToLoadMore(listView, buffer);\n } else {\n footer = new VirtualListViewLoadingIndicator(listView);\n }\n\n if (this.list) {\n this.list.destroy();\n }\n\n var list = new VirtualList({\n buffer: buffer,\n footer: footer,\n item: function(dataItem) { return new VirtualListViewItem(listView, dataItem); },\n height: function() { return scroller.height(); }\n });\n\n list.bind(\"resize\", function() {\n binder.updateScrollerSize();\n listView.updateSize();\n });\n\n list.bind(\"reset\", function() {\n binder.footer.enable();\n });\n\n list.bind(\"endReached\", function() {\n footer.disable();\n binder.updateScrollerSize();\n });\n\n buffer.bind(\"expand\", function() {\n list.lastDirection = false; // expand down\n list.batchUpdate(scroller.scrollTop);\n });\n\n $.extend(this, {\n buffer: buffer,\n scroller: scroller,\n list: list,\n footer: footer\n });\n },\n\n updateScrollerSize: function() {\n this.scroller.virtualSize(0, this.list.totalHeight() + this.chromeHeight);\n },\n\n refresh: function() {\n this.list.refresh();\n },\n\n reset: function() {\n this.buffer.range(0);\n this.list.refresh();\n }\n });\n\n var ListViewItemBinder = kendo.Class.extend({\n init: function(listView) {\n var binder = this;\n this.listView = listView;\n this.options = listView.options;\n\n var itemBinder = this;\n\n this._refreshHandler = function(e) {\n itemBinder.refresh(e);\n };\n\n this._progressHandler = function() {\n listView.showLoading();\n };\n\n listView.bind(\"_dataSource\", function(e) {\n binder.setDataSource(e.dataSource);\n });\n },\n\n destroy: function() {\n this._unbindDataSource();\n },\n\n reset: function() { },\n\n refresh: function(e) {\n var action = e && e.action,\n dataItems = e && e.items,\n listView = this.listView,\n dataSource = this.dataSource,\n prependOnRefresh = this.options.appendOnRefresh,\n view = dataSource.view(),\n groups = dataSource.group(),\n groupedMode = groups && groups[0],\n item;\n\n\n if (action === \"itemchange\") {\n if (!listView._hasBindingTarget()) {\n item = listView.findByDataItem(dataItems)[0];\n if (item) {\n listView.setDataItem(item, dataItems[0]);\n }\n }\n return;\n }\n\n var removedItems, addedItems, addedDataItems;\n var adding = (action === \"add\" && !groupedMode) || (prependOnRefresh && !listView._filter);\n var removing = action === \"remove\" && !groupedMode;\n\n if (adding) {\n // no need to unbind anything\n removedItems = [];\n } else if (removing) {\n // unbind the items about to be removed;\n removedItems = listView.findByDataItem(dataItems);\n }\n\n if (listView.trigger(DATABINDING, { action: action || \"rebind\", items: dataItems, removedItems: removedItems, index: e && e.index })) {\n if (this._shouldShowLoading()) {\n listView.hideLoading();\n }\n return;\n }\n\n if (action === \"add\" && !groupedMode) {\n var index = view.indexOf(dataItems[0]);\n if (index > -1) {\n addedItems = listView.insertAt(dataItems, index);\n addedDataItems = dataItems;\n }\n } else if (action === \"remove\" && !groupedMode) {\n addedItems = [];\n listView.remove(dataItems);\n } else if (groupedMode) {\n listView.replaceGrouped(view);\n }\n else if (prependOnRefresh && !listView._filter) {\n addedItems = listView.prepend(view);\n addedDataItems = view;\n }\n else {\n listView.replace(view);\n }\n\n if (this._shouldShowLoading()) {\n listView.hideLoading();\n }\n\n listView.trigger(DATABOUND, { ns: ui, addedItems: addedItems, addedDataItems: addedDataItems });\n },\n\n setDataSource: function(dataSource) {\n if (this.dataSource) {\n this._unbindDataSource();\n }\n\n this.dataSource = dataSource;\n dataSource.bind(CHANGE, this._refreshHandler);\n\n if (this._shouldShowLoading()) {\n this.dataSource.bind(PROGRESS, this._progressHandler);\n }\n },\n\n _unbindDataSource: function() {\n this.dataSource.unbind(CHANGE, this._refreshHandler).unbind(PROGRESS, this._progressHandler);\n },\n\n _shouldShowLoading: function() {\n var options = this.options;\n return !options.pullToRefresh && !options.loadMore && !options.endlessScroll;\n }\n });\n\n var ListViewFilter = kendo.Class.extend({\n init: function(listView) {\n var filter = this,\n filterable = listView.options.filterable,\n events = \"change paste\",\n that = this;\n\n this.listView = listView;\n this.options = filterable;\n\n listView.element.before(SEARCH_TEMPLATE({ placeholder: filterable.placeholder || \"Search...\" }));\n\n if (filterable.autoFilter !== false) {\n events += \" keyup\";\n }\n\n this.element = listView.wrapper.find(\".km-search-form\");\n\n this.searchInput = listView.wrapper.find(\"input[type=search]\")\n .closest(\"form\").on(\"submit\" + NS, function(e) {\n e.preventDefault();\n })\n .end()\n .on(\"focus\" + NS, function() {\n filter._oldFilter = filter.searchInput.val();\n })\n .on(events.split(\" \").join(NS + \" \") + NS, this._filterChange.bind(this));\n\n this.clearButton = listView.wrapper.find(\".km-filter-reset\")\n .on(CLICK, this._clearFilter.bind(this))\n .hide();\n\n this._dataSourceChange = this._refreshInput.bind(this);\n listView.bind(\"_dataSource\", function(e) {\n e.dataSource.bind(\"change\", that._dataSourceChange);\n });\n },\n\n _refreshInput: function() {\n var appliedFilters = this.listView.dataSource.filter();\n var searchInput = this.listView._filter.searchInput;\n\n if (!appliedFilters || appliedFilters.filters[0].field !== this.listView.options.filterable.field) {\n searchInput.val(\"\");\n } else {\n searchInput.val(appliedFilters.filters[0].value);\n }\n },\n\n _search: function(expr) {\n this._filter = true;\n this.clearButton[expr ? \"show\" : \"hide\"]();\n this.listView.dataSource.filter(expr);\n },\n\n _filterChange: function(e) {\n var filter = this;\n if (e.type == \"paste\" && this.options.autoFilter !== false) {\n setTimeout(function() {\n filter._applyFilter();\n }, 1);\n } else {\n this._applyFilter();\n }\n },\n\n _applyFilter: function() {\n var options = this.options,\n value = this.searchInput.val(),\n expr = value.length ? {\n field: options.field,\n operator: options.operator || \"startswith\",\n ignoreCase: options.ignoreCase,\n value: value\n } : null;\n\n if (value === this._oldFilter) {\n return;\n }\n\n this._oldFilter = value;\n this._search(expr);\n },\n\n _clearFilter: function(e) {\n this.searchInput.val(\"\");\n this._search(null);\n\n e.preventDefault();\n }\n });\n\n var ListView = Widget.extend({\n init: function(element, options) {\n var listView = this;\n\n Widget.fn.init.call(this, element, options);\n\n element = this.element;\n\n options = this.options;\n\n // support for legacy typo in configuration options: scrollTreshold -> scrollThreshold.\n if (options.scrollTreshold) {\n options.scrollThreshold = options.scrollTreshold;\n }\n\n element\n .on(\"down\", HIGHLIGHT_SELECTOR, \"_highlight\")\n .on(\"move up cancel\", HIGHLIGHT_SELECTOR, \"_dim\");\n\n this._userEvents = new kendo.UserEvents(element, {\n fastTap: true,\n filter: ITEM_SELECTOR,\n allowSelection: true,\n tap: function(e) {\n listView._click(e);\n }\n });\n\n // HACK!!! to negate the ms touch action from the user events.\n element.css(\"-ms-touch-action\", \"auto\");\n\n element.wrap(WRAPPER);\n\n this.wrapper = this.element.parent();\n\n this._headerFixer = new HeaderFixer(this);\n\n this._itemsCache = {};\n this._templates();\n\n this.virtual = options.endlessScroll || options.loadMore;\n\n this._style();\n\n if (this.options.$angular && (this.virtual || this.options.pullToRefresh)) {\n setTimeout(this._start.bind(this));\n } else {\n this._start();\n }\n\n },\n\n _start: function() {\n var options = this.options;\n\n if (this.options.filterable) {\n this._filter = new ListViewFilter(this);\n }\n\n if (this.virtual) {\n this._itemBinder = new VirtualListViewItemBinder(this);\n } else {\n this._itemBinder = new ListViewItemBinder(this);\n }\n\n if (this.options.pullToRefresh) {\n this._pullToRefreshHandler = new RefreshHandler(this);\n }\n\n this.setDataSource(options.dataSource);\n\n this._enhanceItems(this.items());\n\n kendo.notify(this, ui);\n },\n\n events: [\n CLICK,\n DATABINDING,\n DATABOUND,\n ITEM_CHANGE\n ],\n\n options: {\n name: \"ListView\",\n style: \"\",\n type: \"flat\",\n autoBind: true,\n fixedHeaders: false,\n template: \"#:data#\",\n headerTemplate: '#:value#',\n appendOnRefresh: false,\n loadMore: false,\n endlessScroll: false,\n scrollThreshold: 30,\n pullToRefresh: false,\n messages: {\n loadMoreText: \"Press to load more\",\n pullTemplate: \"Pull to refresh\",\n releaseTemplate: \"Release to refresh\",\n refreshTemplate: \"Refreshing\"\n },\n pullOffset: 140,\n filterable: false,\n virtualViewSize: null\n },\n\n refresh: function() {\n this._itemBinder.refresh();\n },\n\n reset: function() {\n this._itemBinder.reset();\n },\n\n setDataSource: function(dataSource) {\n // the listView should have a ready datasource for MVVM to function properly. But an empty datasource should not empty the element\n var emptyDataSource = !dataSource;\n this.dataSource = DataSource.create(dataSource);\n\n this.trigger(\"_dataSource\", { dataSource: this.dataSource, empty: emptyDataSource });\n\n if (this.options.autoBind && !emptyDataSource) {\n this.items().remove();\n this.dataSource.fetch();\n }\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n kendo.destroy(this.element);\n this._userEvents.destroy();\n if (this._itemBinder) {\n this._itemBinder.destroy();\n }\n\n if (this._headerFixer) {\n this._headerFixer.destroy();\n }\n\n this.element.unwrap();\n delete this.element;\n delete this.wrapper;\n delete this._userEvents;\n },\n\n items: function() {\n if (this.options.type === \"group\") {\n return this.element.find(\".km-list\").children();\n } else {\n return this.element.children().not('.km-load-more');\n }\n },\n\n scroller: function() {\n if (!this._scrollerInstance) {\n this._scrollerInstance = this.element.closest(\".km-scroll-wrapper\").data(\"kendoMobileScroller\");\n }\n\n return this._scrollerInstance;\n },\n\n showLoading: function() {\n var view = this.view();\n if (view && view.loader) {\n view.loader.show();\n }\n },\n\n hideLoading: function() {\n var view = this.view();\n if (view && view.loader) {\n view.loader.hide();\n }\n },\n\n insertAt: function(dataItems, index, triggerChange) {\n var listView = this;\n return listView._renderItems(dataItems, function(items) {\n if (index === 0) {\n listView.element.prepend(items);\n }\n else if (index === -1) {\n listView.element.append(items);\n } else {\n listView.items().eq(index - 1).after(items);\n }\n\n if (triggerChange) {\n for (var i = 0; i < items.length; i ++) {\n listView.trigger(ITEM_CHANGE, { item: items.eq(i), data: dataItems[i], ns: ui });\n }\n }\n });\n },\n\n append: function(dataItems, triggerChange) {\n return this.insertAt(dataItems, -1, triggerChange);\n },\n\n prepend: function(dataItems, triggerChange) {\n return this.insertAt(dataItems, 0, triggerChange);\n },\n\n replace: function(dataItems) {\n this.options.type = \"flat\";\n this._angularItems(\"cleanup\");\n kendo.destroy(this.element.children());\n this.element.empty();\n this._userEvents.cancel();\n this._style();\n return this.insertAt(dataItems, 0);\n },\n\n replaceGrouped: function(groups) {\n this.options.type = \"group\";\n this._angularItems(\"cleanup\");\n this.element.empty();\n var items = $(kendo.render(this.groupTemplate, groups));\n\n this._enhanceItems(items.children(\"ul\").children(\"li\"));\n this.element.append(items);\n mobile.init(items);\n this._style();\n this._angularItems(\"compile\");\n },\n\n remove: function(dataItems) {\n var items = this.findByDataItem(dataItems);\n this.angular(\"cleanup\", function() {\n return { elements: items };\n });\n kendo.destroy(items);\n items.remove();\n },\n\n findByDataItem: function(dataItems) {\n var selectors = [];\n\n for (var idx = 0, length = dataItems.length; idx < length; idx ++) {\n selectors[idx] = \"[data-\" + kendo.ns + \"uid=\" + dataItems[idx].uid + \"]\";\n }\n\n return this.element.find(selectors.join(\",\"));\n },\n\n // item is a DOM element, not jQuery object.\n setDataItem: function(item, dataItem) {\n var listView = this,\n replaceItem = function(items) {\n var newItem = $(items[0]);\n kendo.destroy(item);\n listView.angular(\"cleanup\", function() { return { elements: [ $(item) ] }; });\n $(item).replaceWith(newItem);\n listView.trigger(ITEM_CHANGE, { item: newItem, data: dataItem, ns: ui });\n };\n\n return this._renderItems([dataItem], replaceItem)[0];\n },\n\n updateSize: function() {\n this._size = this.getSize();\n },\n\n _renderItems: function(dataItems, callback) {\n var items = $(kendo.render(this.template, dataItems));\n\n callback(items);\n\n this.angular(\"compile\", function() {\n return {\n elements: items,\n data: dataItems.map(function(data) {\n return { dataItem: data };\n })\n };\n });\n\n mobile.init(items);\n this._enhanceItems(items);\n\n return items;\n },\n\n _dim: function(e) {\n this._toggle(e, false);\n },\n\n _highlight: function(e) {\n this._toggle(e, true);\n },\n\n _toggle: function(e, highlight) {\n if (e.which > 1) {\n return;\n }\n\n var clicked = $(e.currentTarget),\n item = clicked.parent(),\n role = attrValue(clicked, \"role\") || \"\",\n plainItem = (!role.match(buttonRegExp)),\n prevented = e.isDefaultPrevented();\n\n if (plainItem) {\n item.toggleClass(ACTIVE_CLASS, highlight && !prevented);\n }\n },\n\n _templates: function() {\n var template = this.options.template,\n headerTemplate = this.options.headerTemplate,\n dataIDAttribute = ' data-uid=\"#=arguments[0].uid || \"\"#\"',\n templateProxy = {},\n groupTemplateProxy = {};\n\n if (typeof template === FUNCTION) {\n templateProxy.template = template;\n template = \"#=this.template(data)#\";\n }\n\n this.template = kendo.template(\"\" + template + \"\").bind(templateProxy);\n\n groupTemplateProxy.template = this.template;\n\n if (typeof headerTemplate === FUNCTION) {\n groupTemplateProxy._headerTemplate = headerTemplate;\n headerTemplate = \"#=this._headerTemplate(data)#\";\n }\n\n groupTemplateProxy.headerTemplate = kendo.template(headerTemplate);\n\n this.groupTemplate = GROUP_TEMPLATE.bind(groupTemplateProxy);\n },\n\n _click: function(e) {\n if (e.event.which > 1 || e.event.isDefaultPrevented()) {\n return;\n }\n\n var dataItem,\n item = e.target,\n target = $(e.event.target),\n buttonElement = target.closest(kendo.roleSelector(\"button\", \"detailbutton\", \"backbutton\")),\n button = kendo.widgetInstance(buttonElement, ui),\n id = item.attr(kendo.attr(\"uid\"));\n\n if (id) {\n dataItem = this.dataSource.getByUid(id);\n }\n\n if (this.trigger(CLICK, { target: target, item: item, dataItem: dataItem, button: button })) {\n e.preventDefault();\n }\n },\n\n _styleGroups: function() {\n var rootItems = this.element.children();\n\n rootItems.children(\"ul\").addClass(\"km-list\");\n\n rootItems.each(function() {\n var li = $(this),\n groupHeader = li.contents().first();\n\n li.addClass(\"km-group-container\");\n if (!groupHeader.is(\"ul\") && !groupHeader.is(\"div.\" + GROUP_CLASS)) {\n groupHeader.wrap(GROUP_WRAPPER);\n }\n });\n },\n\n _style: function() {\n var options = this.options,\n grouped = options.type === \"group\",\n element = this.element,\n inset = options.style === \"inset\";\n\n element.addClass(\"km-listview\")\n .toggleClass(\"km-list\", !grouped)\n .toggleClass(\"km-virtual-list\", this.virtual)\n .toggleClass(\"km-listinset\", !grouped && inset)\n .toggleClass(\"km-listgroup\", grouped && !inset)\n .toggleClass(\"km-listgroupinset\", grouped && inset);\n\n if (!element.parents(\".km-listview\")[0]) {\n element.closest(\".km-content\").toggleClass(\"km-insetcontent\", inset); // iOS has white background when the list is not inset.\n }\n\n if (grouped) {\n this._styleGroups();\n }\n\n this.trigger(STYLED);\n },\n\n _enhanceItems: function(items) {\n items.each(function() {\n var item = $(this),\n child,\n enhanced = false;\n\n item.children().each(function() {\n child = $(this);\n if (child.is(\"a\")) {\n enhanceLinkItem(child);\n enhanced = true;\n } else if (child.is(\"label\")) {\n enhanceCheckBoxItem(child);\n enhanced = true;\n }\n });\n\n if (!enhanced) {\n enhanceItem(item);\n }\n });\n }\n });\n\n ui.plugin(ListView);\n })(window.kendo.jQuery);\n\n var __meta__$4 = {\n id: \"mobile.navbar\",\n name: \"NavBar\",\n category: \"mobile\",\n description: \"The Kendo mobile NavBar widget is used inside a mobile View or Layout Header element to display an application navigation bar.\",\n depends: [ \"core\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n mobile = kendo.mobile,\n ui = mobile.ui,\n Widget = ui.Widget;\n\n function createContainer(align, element) {\n var items = element.find(\"[\" + kendo.attr(\"align\") + \"=\" + align + \"]\");\n\n if (items[0]) {\n return $('
    ').append(items).prependTo(element);\n }\n }\n\n function toggleTitle(centerElement) {\n var siblings = centerElement.siblings(),\n noTitle = !!centerElement.children(\"ul\")[0],\n showTitle = (!!siblings[0] && kendo.trim(centerElement.text()) === \"\"),\n android = !!(kendo.mobile.application && kendo.mobile.application.element.is(\".km-android\"));\n\n centerElement.prevAll().toggleClass(\"km-absolute\", noTitle);\n centerElement.toggleClass(\"km-show-title\", showTitle);\n centerElement.toggleClass(\"km-fill-title\", showTitle && !kendo.trim(centerElement.html()));\n centerElement.toggleClass(\"km-no-title\", noTitle);\n centerElement.toggleClass(\"km-hide-title\", android && !siblings.children().is(\":visible\"));\n }\n\n var NavBar = Widget.extend({\n init: function(element, options) {\n var that = this;\n\n Widget.fn.init.call(that, element, options);\n\n element = that.element;\n\n that.container().bind(\"show\", this.refresh.bind(this));\n\n element.addClass(\"km-navbar\").wrapInner($('
    '));\n that.leftElement = createContainer(\"left\", element);\n that.rightElement = createContainer(\"right\", element);\n that.centerElement = element.find(\".km-view-title\");\n },\n\n options: {\n name: \"NavBar\"\n },\n\n title: function(value) {\n this.element.find(kendo.roleSelector(\"view-title\")).text(value);\n toggleTitle(this.centerElement);\n },\n\n refresh: function(e) {\n var view = e.view;\n this.title(view.options.title);\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n kendo.destroy(this.element);\n }\n });\n\n ui.plugin(NavBar);\n })(window.kendo.jQuery);\n\n var __meta__$3 = {\n id: \"mobile.scrollview\",\n name: \"ScrollView\",\n category: \"mobile\",\n description: \"The Kendo Mobile ScrollView widget is used to scroll content wider than the device screen.\",\n depends: [ \"fx\", \"data\", \"draganddrop\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n mobile = kendo.mobile,\n ui = mobile.ui,\n Transition = kendo.effects.Transition,\n Pane = kendo.ui.Pane,\n PaneDimensions = kendo.ui.PaneDimensions,\n Widget = ui.DataBoundWidget,\n DataSource = kendo.data.DataSource,\n Buffer = kendo.data.Buffer,\n BatchBuffer = kendo.data.BatchBuffer,\n\n // Math\n math = Math,\n abs = math.abs,\n ceil = math.ceil,\n round = math.round,\n max = math.max,\n min = math.min,\n floor = math.floor,\n\n CHANGE = \"change\",\n CHANGING = \"changing\",\n REFRESH = \"refresh\",\n CURRENT_PAGE_CLASS = \"current-page\",\n VIRTUAL_PAGE_CLASS = \"virtual-page\",\n FUNCTION = \"function\",\n ITEM_CHANGE = \"itemChange\",\n CLEANUP = \"cleanup\",\n\n VIRTUAL_PAGE_COUNT = 3,\n LEFT_PAGE = -1,\n CETER_PAGE = 0,\n RIGHT_PAGE = 1,\n\n LEFT_SWIPE = -1,\n NUDGE = 0,\n RIGHT_SWIPE = 1;\n\n function className(name) {\n return \"k-\" + name + \" km-\" + name;\n }\n\n var Pager = kendo.Class.extend({\n init: function(scrollView) {\n var that = this,\n element = $(\"
      \");\n\n scrollView.element.append(element);\n\n this._changeProxy = that._change.bind(that);\n this._refreshProxy = that._refresh.bind(that);\n scrollView.bind(CHANGE, this._changeProxy);\n scrollView.bind(REFRESH, this._refreshProxy);\n\n $.extend(that, { element: element, scrollView: scrollView });\n },\n\n items: function() {\n return this.element.children();\n },\n\n _refresh: function(e) {\n var pageHTML = \"\";\n\n for (var idx = 0; idx < e.pageCount; idx ++) {\n pageHTML += \"
    1. \";\n }\n\n this.element.html(pageHTML);\n this.items().eq(e.page).addClass(className(CURRENT_PAGE_CLASS));\n },\n\n _change: function(e) {\n this.items()\n .removeClass(className(CURRENT_PAGE_CLASS))\n .eq(e.page).addClass(className(CURRENT_PAGE_CLASS));\n },\n\n destroy: function() {\n this.scrollView.unbind(CHANGE, this._changeProxy);\n this.scrollView.unbind(REFRESH, this._refreshProxy);\n this.element.remove();\n }\n });\n\n kendo.mobile.ui.ScrollViewPager = Pager;\n\n var TRANSITION_END = \"transitionEnd\",\n DRAG_START = \"dragStart\",\n DRAG_END = \"dragEnd\";\n\n var ElasticPane = kendo.Observable.extend({\n init: function(element, options) {\n var that = this;\n\n kendo.Observable.fn.init.call(this);\n\n this.element = element;\n this.container = element.parent();\n\n var movable,\n transition,\n userEvents,\n dimensions,\n dimension,\n pane;\n\n movable = new kendo.ui.Movable(that.element);\n\n transition = new Transition({\n axis: \"x\",\n movable: movable,\n onEnd: function() {\n that.trigger(TRANSITION_END);\n }\n });\n\n userEvents = new kendo.UserEvents(element, {\n fastTap: true,\n start: function(e) {\n if (abs(e.x.velocity) * 2 >= abs(e.y.velocity)) {\n userEvents.capture();\n } else {\n userEvents.cancel();\n }\n\n that.trigger(DRAG_START, e);\n transition.cancel();\n },\n allowSelection: true,\n end: function(e) {\n that.trigger(DRAG_END, e);\n }\n });\n\n dimensions = new PaneDimensions({\n element: that.element,\n container: that.container\n });\n\n dimension = dimensions.x;\n\n dimension.bind(CHANGE, function() {\n that.trigger(CHANGE);\n });\n\n pane = new Pane({\n dimensions: dimensions,\n userEvents: userEvents,\n movable: movable,\n elastic: true\n });\n\n $.extend(that, {\n duration: options && options.duration || 1,\n movable: movable,\n transition: transition,\n userEvents: userEvents,\n dimensions: dimensions,\n dimension: dimension,\n pane: pane\n });\n\n this.bind([TRANSITION_END, DRAG_START, DRAG_END, CHANGE], options);\n },\n\n size: function() {\n return { width: this.dimensions.x.getSize(), height: this.dimensions.y.getSize() };\n },\n\n total: function() {\n return this.dimension.getTotal();\n },\n\n offset: function() {\n return -this.movable.x;\n },\n\n updateDimension: function() {\n this.dimension.update(true);\n },\n\n refresh: function() {\n this.dimensions.refresh();\n },\n\n moveTo: function(offset) {\n this.movable.moveAxis(\"x\", -offset);\n },\n\n transitionTo: function(offset, ease, instant) {\n if (instant) {\n this.moveTo(-offset);\n } else {\n this.transition.moveTo({ location: offset, duration: this.duration, ease: ease });\n }\n }\n });\n\n kendo.mobile.ui.ScrollViewElasticPane = ElasticPane;\n\n var ScrollViewContent = kendo.Observable.extend({\n init: function(element, pane, options) {\n var that = this;\n\n kendo.Observable.fn.init.call(this);\n that.element = element;\n that.pane = pane;\n that._getPages();\n this.page = 0;\n this.pageSize = options.pageSize || 1;\n this.contentHeight = options.contentHeight;\n this.enablePager = options.enablePager;\n this.pagerOverlay = options.pagerOverlay;\n },\n\n scrollTo: function(page, instant) {\n this.page = page;\n this.pane.transitionTo(- page * this.pane.size().width, Transition.easeOutExpo, instant);\n },\n\n paneMoved: function(swipeType, bounce, callback, /*internal*/ instant) {\n var that = this,\n pane = that.pane,\n width = pane.size().width * that.pageSize,\n approx = round,\n ease = bounce ? Transition.easeOutBack : Transition.easeOutExpo,\n snap,\n nextPage;\n\n if (swipeType === LEFT_SWIPE) {\n approx = ceil;\n } else if (swipeType === RIGHT_SWIPE) {\n approx = floor;\n }\n\n nextPage = approx(pane.offset() / width);\n\n snap = max(that.minSnap, min(-nextPage * width, that.maxSnap));\n\n if (nextPage != that.page) {\n if (callback && callback({ currentPage: that.page, nextPage: nextPage })) {\n snap = -that.page * pane.size().width;\n }\n }\n\n pane.transitionTo(snap, ease, instant);\n },\n\n updatePage: function() {\n var pane = this.pane,\n page = round(pane.offset() / pane.size().width);\n\n if (page != this.page) {\n this.page = page;\n return true;\n }\n\n return false;\n },\n\n forcePageUpdate: function() {\n return this.updatePage();\n },\n\n resizeTo: function(size) {\n var pane = this.pane,\n width = size.width;\n\n this.pageElements.width(width);\n\n if (this.contentHeight === \"100%\") {\n var containerHeight = this.element.parent().height();\n\n if (this.enablePager === true) {\n var pager = this.element.parent().find(\"ol.km-pages\");\n if (!this.pagerOverlay && pager.length) {\n containerHeight -= kendo._outerHeight(pager, true);\n }\n }\n\n this.element.css(\"height\", containerHeight);\n this.pageElements.css(\"height\", containerHeight);\n }\n\n // re-read pane dimension after the pageElements have been resized.\n pane.updateDimension();\n\n if (!this._paged) {\n this.page = floor(pane.offset() / width);\n }\n\n this.scrollTo(this.page, true);\n\n this.pageCount = ceil(pane.total() / width);\n this.minSnap = - (this.pageCount - 1) * width;\n this.maxSnap = 0;\n },\n\n _getPages: function() {\n this.pageElements = this.element.find(kendo.roleSelector(\"page\"));\n this._paged = this.pageElements.length > 0;\n }\n });\n\n kendo.mobile.ui.ScrollViewContent = ScrollViewContent;\n\n var VirtualScrollViewContent = kendo.Observable.extend({\n init: function(element, pane, options) {\n var that = this;\n\n kendo.Observable.fn.init.call(this);\n\n that.element = element;\n that.pane = pane;\n that.options = options;\n that._templates();\n that.page = options.page || 0;\n that.pages = [];\n that._initPages();\n that.resizeTo(that.pane.size());\n\n that.pane.dimension.forceEnabled();\n },\n\n setDataSource: function(dataSource) {\n this.dataSource = DataSource.create(dataSource);\n this._buffer();\n this._pendingPageRefresh = false;\n this._pendingWidgetRefresh = false;\n },\n\n _viewShow: function() {\n var that = this;\n if (that._pendingWidgetRefresh) {\n setTimeout(function() {\n that._resetPages();\n }, 0);\n that._pendingWidgetRefresh = false;\n }\n },\n\n _buffer: function() {\n var itemsPerPage = this.options.itemsPerPage;\n\n if (this.buffer) {\n this.buffer.destroy();\n }\n\n if (itemsPerPage > 1) {\n this.buffer = new BatchBuffer(this.dataSource, itemsPerPage);\n } else {\n this.buffer = new Buffer(this.dataSource, itemsPerPage * 3);\n }\n\n this._resizeProxy = this._onResize.bind(this);\n this._resetProxy = this._onReset.bind(this);\n this._endReachedProxy = this._onEndReached.bind(this);\n\n this.buffer.bind({\n \"resize\": this._resizeProxy,\n \"reset\": this._resetProxy,\n \"endreached\": this._endReachedProxy\n });\n },\n\n _templates: function() {\n var template = this.options.template,\n emptyTemplate = this.options.emptyTemplate,\n templateProxy = {},\n emptyTemplateProxy = {};\n\n if (typeof template === FUNCTION) {\n templateProxy.template = template;\n template = \"#=this.template(data)#\";\n }\n\n this.template = kendo.template(template).bind(templateProxy);\n\n if (typeof emptyTemplate === FUNCTION) {\n emptyTemplateProxy.emptyTemplate = emptyTemplate;\n emptyTemplate = \"#=this.emptyTemplate(data)#\";\n }\n\n this.emptyTemplate = kendo.template(emptyTemplate).bind(emptyTemplateProxy);\n },\n\n _initPages: function() {\n var pages = this.pages,\n element = this.element,\n page;\n\n for (var i = 0; i < VIRTUAL_PAGE_COUNT; i++) {\n page = new Page(element);\n pages.push(page);\n }\n\n this.pane.updateDimension();\n },\n\n resizeTo: function(size) {\n var pages = this.pages,\n pane = this.pane;\n\n for (var i = 0; i < pages.length; i++) {\n pages[i].setWidth(size.width);\n }\n\n if (this.options.contentHeight === \"auto\") {\n this.element.css(\"height\", this.pages[1].element.height());\n }\n\n else if (this.options.contentHeight === \"100%\") {\n var containerHeight = this.element.parent().height();\n\n if (this.options.enablePager === true) {\n var pager = this.element.parent().find(\"ol.km-pages\");\n if (!this.options.pagerOverlay && pager.length) {\n containerHeight -= kendo._outerHeight(pager, true);\n }\n }\n\n this.element.css(\"height\", containerHeight);\n pages[0].element.css(\"height\", containerHeight);\n pages[1].element.css(\"height\", containerHeight);\n pages[2].element.css(\"height\", containerHeight);\n }\n\n pane.updateDimension();\n\n this._repositionPages();\n\n this.width = size.width;\n },\n\n scrollTo: function(page) {\n var buffer = this.buffer,\n dataItem;\n\n buffer.syncDataSource();\n dataItem = buffer.at(page);\n\n if (!dataItem) {\n return;\n }\n\n this._updatePagesContent(page);\n\n this.page = page;\n },\n\n paneMoved: function(swipeType, bounce, callback, /*internal*/ instant) {\n var that = this,\n pane = that.pane,\n width = pane.size().width,\n offset = pane.offset(),\n thresholdPassed = Math.abs(offset) >= width / 3,\n ease = bounce ? kendo.effects.Transition.easeOutBack : kendo.effects.Transition. easeOutExpo,\n isEndReached = that.page + 2 > that.buffer.total(),\n nextPage,\n delta = 0;\n\n if (swipeType === RIGHT_SWIPE) {\n if (that.page !== 0) {\n delta = -1; //backward\n }\n } else if (swipeType === LEFT_SWIPE && !isEndReached) {\n delta = 1; //forward\n } else if (offset > 0 && (thresholdPassed && !isEndReached)) {\n delta = 1; //forward\n } else if (offset < 0 && thresholdPassed) {\n if (that.page !== 0) {\n delta = -1; //backward\n }\n }\n\n nextPage = that.page;\n if (delta) {\n nextPage = (delta > 0) ? nextPage + 1 : nextPage - 1;\n }\n\n if (callback && callback({ currentPage: that.page, nextPage: nextPage })) {\n delta = 0;\n }\n\n if (delta === 0) {\n that._cancelMove(ease, instant);\n } else if (delta === -1) {\n that._moveBackward(instant);\n } else if (delta === 1) {\n that._moveForward(instant);\n }\n },\n\n updatePage: function() {\n var pages = this.pages;\n\n if (this.pane.offset() === 0) {\n return false;\n }\n\n if (this.pane.offset() > 0) {\n pages.push(this.pages.shift());//forward\n this.page++;\n this.setPageContent(pages[2], this.page + 1);\n } else {\n pages.unshift(this.pages.pop()); //back\n this.page--;\n this.setPageContent(pages[0], this.page - 1);\n }\n\n this._repositionPages();\n\n this._resetMovable();\n\n return true;\n },\n\n forcePageUpdate: function() {\n var offset = this.pane.offset(),\n threshold = this.pane.size().width * 3 / 4;\n\n if (abs(offset) > threshold) {\n return this.updatePage();\n }\n\n return false;\n },\n\n _resetMovable: function() {\n this.pane.moveTo(0);\n },\n\n _moveForward: function(instant) {\n this.pane.transitionTo(-this.width, kendo.effects.Transition.easeOutExpo, instant);\n },\n\n _moveBackward: function(instant) {\n this.pane.transitionTo(this.width, kendo.effects.Transition.easeOutExpo, instant);\n },\n\n _cancelMove: function(ease, /*internal*/ instant) {\n this.pane.transitionTo(0, ease, instant);\n },\n\n _resetPages: function() {\n this.page = this.options.page || 0;\n\n this._updatePagesContent(this.page);\n this._repositionPages();\n\n this.trigger(\"reset\");\n },\n\n _onResize: function() {\n this.pageCount = ceil(this.dataSource.total() / this.options.itemsPerPage);\n\n if (this._pendingPageRefresh) {\n this._updatePagesContent(this.page);\n this._pendingPageRefresh = false;\n }\n\n this.trigger(\"resize\");\n },\n\n _onReset: function() {\n this.pageCount = ceil(this.dataSource.total() / this.options.itemsPerPage);\n this._resetPages();\n },\n\n _onEndReached: function() {\n this._pendingPageRefresh = true;\n },\n\n _repositionPages: function() {\n var pages = this.pages;\n\n pages[0].position(LEFT_PAGE);\n pages[1].position(CETER_PAGE);\n pages[2].position(RIGHT_PAGE);\n },\n\n _updatePagesContent: function(offset) {\n var pages = this.pages,\n currentPage = offset || 0;\n\n this.setPageContent(pages[0], currentPage - 1);\n this.setPageContent(pages[1], currentPage);\n this.setPageContent(pages[2], currentPage + 1);\n },\n\n setPageContent: function(page, index) {\n var buffer = this.buffer,\n template = this.template,\n emptyTemplate = this.emptyTemplate,\n view = null;\n\n if (index >= 0) {\n view = buffer.at(index);\n if (Array.isArray(view) && !view.length) {\n view = null;\n }\n }\n\n this.trigger(CLEANUP, { item: page.element });\n\n if (view !== null) {\n page.content(template(view));\n } else {\n page.content(emptyTemplate({}));\n }\n\n kendo.mobile.init(page.element);\n this.trigger(ITEM_CHANGE, { item: page.element, data: view, ns: kendo.mobile.ui });\n\n }\n });\n\n kendo.mobile.ui.VirtualScrollViewContent = VirtualScrollViewContent;\n\n var Page = kendo.Class.extend({\n init: function(container) {\n this.element = $(\"
      \");\n this.width = container.width();\n this.element.width(this.width);\n container.append(this.element);\n },\n\n content: function(theContent) {\n this.element.html(theContent);\n },\n\n position: function(position) { //position can be -1, 0, 1\n this.element.css(\"transform\", \"translate3d(\" + this.width * position + \"px, 0, 0)\");\n },\n\n setWidth: function(width) {\n this.width = width;\n this.element.width(width);\n }\n });\n\n kendo.mobile.ui.VirtualPage = Page;\n\n var ScrollView = Widget.extend({\n init: function(element, options) {\n var that = this;\n\n Widget.fn.init.call(that, element, options);\n\n options = that.options;\n element = that.element;\n\n kendo.stripWhitespace(element[0]);\n\n element\n .wrapInner(\"
      \")\n .addClass(\"k-widget \" + className(\"scrollview\"));\n\n if (this.options.enablePager) {\n this.pager = new Pager(this);\n\n if (this.options.pagerOverlay) {\n element.addClass(className(\"scrollview-overlay\"));\n }\n }\n\n that.inner = element.children().first();\n that.page = 0;\n that.inner.css(\"height\", options.contentHeight);\n\n that.pane = new ElasticPane(that.inner, {\n duration: this.options.duration,\n transitionEnd: this._transitionEnd.bind(this),\n dragStart: this._dragStart.bind(this),\n dragEnd: this._dragEnd.bind(this),\n change: this[REFRESH].bind(this)\n });\n\n that.bind(\"resize\", function() {\n that.pane.refresh();\n });\n\n that.page = options.page;\n\n var empty = this.inner.children().length === 0;\n\n var content = empty ? new VirtualScrollViewContent(that.inner, that.pane, options) : new ScrollViewContent(that.inner, that.pane, options);\n\n content.page = that.page;\n\n content.bind(\"reset\", function() {\n this._pendingPageRefresh = false;\n that._syncWithContent();\n that.trigger(REFRESH, { pageCount: content.pageCount, page: content.page });\n });\n\n content.bind(\"resize\", function() {\n that.trigger(REFRESH, { pageCount: content.pageCount, page: content.page });\n });\n\n content.bind(ITEM_CHANGE, function(e) {\n that.trigger(ITEM_CHANGE, e);\n\n that.angular(\"compile\", function() {\n return { elements: e.item, data: [ { dataItem: e.data } ] };\n });\n });\n\n content.bind(CLEANUP, function(e) {\n that.angular(\"cleanup\", function() {\n return { elements: e.item };\n });\n });\n\n that._content = content;\n that.setDataSource(options.dataSource);\n\n var mobileContainer = that.container();\n\n if (mobileContainer.nullObject) {\n that.viewInit();\n that.viewShow();\n } else {\n mobileContainer.bind(\"show\", this.viewShow.bind(this)).bind(\"init\", this.viewInit.bind(this));\n }\n },\n\n options: {\n name: \"ScrollView\",\n page: 0,\n duration: 400,\n velocityThreshold: 0.8,\n contentHeight: \"auto\",\n pageSize: 1,\n itemsPerPage: 1,\n bounceVelocityThreshold: 1.6,\n enablePager: true,\n pagerOverlay: false,\n autoBind: true,\n template: \"\",\n emptyTemplate: \"\"\n },\n\n events: [\n CHANGING,\n CHANGE,\n REFRESH\n ],\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n kendo.destroy(this.element);\n },\n\n viewInit: function() {\n if (this.options.autoBind) {\n this._content.scrollTo(this._content.page, true);\n }\n },\n\n viewShow: function() {\n this.pane.refresh();\n },\n\n refresh: function() {\n var content = this._content;\n\n content.resizeTo(this.pane.size());\n this.page = content.page;\n this.trigger(REFRESH, { pageCount: content.pageCount, page: content.page });\n },\n\n content: function(html) {\n this.element.children().first().html(html);\n this._content._getPages();\n this.pane.refresh();\n },\n\n value: function(item) {\n var dataSource = this.dataSource;\n\n if (item) {\n this.scrollTo(dataSource.indexOf(item), true);\n } else {\n return dataSource.at(this.page);\n }\n },\n\n scrollTo: function(page, instant) {\n this._content.scrollTo(page, instant);\n this._syncWithContent();\n },\n\n prev: function() {\n var that = this,\n prevPage = that.page - 1;\n\n if (that._content instanceof VirtualScrollViewContent) {\n that._content.paneMoved(RIGHT_SWIPE, undefined$1, function(eventData) {\n return that.trigger(CHANGING, eventData);\n });\n } else if (prevPage > -1) {\n that.scrollTo(prevPage);\n }\n },\n\n next: function() {\n var that = this,\n nextPage = that.page + 1;\n\n if (that._content instanceof VirtualScrollViewContent) {\n that._content.paneMoved(LEFT_SWIPE, undefined$1, function(eventData) {\n return that.trigger(CHANGING, eventData);\n });\n } else if (nextPage < that._content.pageCount) {\n that.scrollTo(nextPage);\n }\n },\n\n setDataSource: function(dataSource) {\n if (!(this._content instanceof VirtualScrollViewContent)) {\n return;\n }\n // the scrollview should have a ready datasource for MVVM to function properly. But an empty datasource should not empty the element\n var emptyDataSource = !dataSource;\n this.dataSource = DataSource.create(dataSource);\n\n this._content.setDataSource(this.dataSource);\n\n if (this.options.autoBind && !emptyDataSource) {\n // this.items().remove();\n this.dataSource.fetch();\n }\n },\n\n items: function() {\n return this.element.find(\".km-\" + VIRTUAL_PAGE_CLASS);\n },\n\n _syncWithContent: function() {\n var pages = this._content.pages,\n buffer = this._content.buffer,\n data,\n element;\n\n this.page = this._content.page;\n\n data = buffer ? buffer.at(this.page) : undefined$1;\n if (!(data instanceof Array)) {\n data = [data];\n }\n element = pages ? pages[1].element : undefined$1;\n\n this.trigger(CHANGE, { page: this.page, element: element, data: data });\n },\n\n _dragStart: function() {\n if (this._content.forcePageUpdate()) {\n this._syncWithContent();\n }\n },\n\n _dragEnd: function(e) {\n var that = this,\n velocity = e.x.velocity,\n velocityThreshold = this.options.velocityThreshold,\n swipeType = NUDGE,\n bounce = abs(velocity) > this.options.bounceVelocityThreshold;\n\n if (velocity > velocityThreshold) {\n swipeType = RIGHT_SWIPE;\n } else if (velocity < -velocityThreshold) {\n swipeType = LEFT_SWIPE;\n }\n\n this._content.paneMoved(swipeType, bounce, function(eventData) {\n return that.trigger(CHANGING, eventData);\n });\n },\n\n _transitionEnd: function() {\n if (this._content.updatePage()) {\n this._syncWithContent();\n }\n }\n });\n\n ui.plugin(ScrollView);\n\n })(window.kendo.jQuery);\n\n var __meta__$2 = {\n id: \"mobile.switch\",\n name: \"Switch\",\n category: \"mobile\",\n description: \"The mobile Switch widget is used to display two exclusive choices.\",\n depends: [ \"fx\", \"userevents\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n ui = kendo.mobile.ui,\n outerWidth = kendo._outerWidth,\n Widget = ui.Widget,\n support = kendo.support,\n CHANGE = \"change\",\n SWITCHON = \"switch-on\",\n SWITCHOFF = \"switch-off\",\n MARGINLEFT = \"margin-left\",\n ACTIVE_STATE = \"state-active\",\n DISABLED_STATE = \"state-disabled\",\n DISABLED = \"disabled\",\n RESOLVEDPREFIX = support.transitions.css === undefined$1 ? \"\" : support.transitions.css,\n TRANSFORMSTYLE = RESOLVEDPREFIX + \"transform\";\n\n function className(name) {\n return \"km-\" + name;\n }\n\n function limitValue(value, minLimit, maxLimit) {\n return Math.max(minLimit, Math.min(maxLimit, value));\n }\n\n var SWITCH_MARKUP = '\\\n \\\n \\\n \\\n \\\n \\\n {0} \\\n {1} \\\n \\\n \\\n ';\n\n var Switch = Widget.extend({\n init: function(element, options) {\n var that = this, checked;\n\n Widget.fn.init.call(that, element, options);\n\n options = that.options;\n\n that.wrapper = $(kendo.format(SWITCH_MARKUP, options.onLabel, options.offLabel));\n that.handle = that.wrapper.find(\".km-switch-handle\");\n that.background = that.wrapper.find(\".km-switch-background\");\n that.wrapper.insertBefore(that.element).prepend(that.element);\n\n that._drag();\n\n that.origin = parseInt(that.background.css(MARGINLEFT), 10);\n\n that.constrain = 0;\n that.snapPoint = 0;\n\n element = that.element[0];\n element.type = \"checkbox\";\n that._animateBackground = true;\n\n checked = that.options.checked;\n\n if (checked === null) {\n checked = element.checked;\n }\n\n that.check(checked);\n\n that.options.enable = that.options.enable && !that.element.attr(DISABLED);\n that.enable(that.options.enable);\n\n that.refresh();\n kendo.notify(that, kendo.mobile.ui);\n },\n\n refresh: function() {\n var that = this,\n handleWidth = outerWidth(that.handle, true);\n\n that.width = that.wrapper.width();\n\n that.constrain = that.width - handleWidth;\n that.snapPoint = that.constrain / 2;\n\n if (typeof that.origin != \"number\") {\n that.origin = parseInt(that.background.css(MARGINLEFT), 10);\n }\n\n that.background.data(\"origin\", that.origin);\n\n that.check(that.element[0].checked);\n },\n\n events: [\n CHANGE\n ],\n\n options: {\n name: \"Switch\",\n onLabel: \"on\",\n offLabel: \"off\",\n checked: null,\n enable: true\n },\n\n check: function(check) {\n var that = this,\n element = that.element[0];\n\n if (check === undefined$1) {\n return element.checked;\n }\n\n that._position(check ? that.constrain : 0);\n element.checked = check;\n that.wrapper\n .toggleClass(className(SWITCHON), check)\n .toggleClass(className(SWITCHOFF), !check);\n },\n\n // alias for check, NG support\n value: function() {\n return this.check.apply(this, arguments);\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n this.userEvents.destroy();\n },\n\n toggle: function() {\n var that = this;\n\n that.check(!that.element[0].checked);\n },\n\n enable: function(enable) {\n var element = this.element,\n wrapper = this.wrapper;\n\n if (typeof enable == \"undefined\") {\n enable = true;\n }\n\n this.options.enable = enable;\n\n if (enable) {\n element.prop(DISABLED, false);\n } else {\n element.attr(DISABLED, DISABLED);\n }\n\n wrapper.toggleClass(className(DISABLED_STATE), !enable);\n },\n\n _resize: function() {\n this.refresh();\n },\n\n _move: function(e) {\n var that = this;\n e.preventDefault();\n that._position(limitValue(that.position + e.x.delta, 0, that.width - outerWidth(that.handle, true)));\n },\n\n _position: function(position) {\n var that = this;\n\n that.position = position;\n that.handle.css(TRANSFORMSTYLE, \"translatex(\" + position + \"px)\");\n\n if (that._animateBackground) {\n that.background.css(MARGINLEFT, that.origin + position);\n }\n },\n\n _start: function() {\n if (!this.options.enable) {\n this.userEvents.cancel();\n } else {\n this.userEvents.capture();\n this.handle.addClass(className(ACTIVE_STATE));\n }\n },\n\n _stop: function() {\n var that = this;\n\n that.handle.removeClass(className(ACTIVE_STATE));\n that._toggle(that.position > that.snapPoint);\n },\n\n _toggle: function(checked) {\n var that = this,\n handle = that.handle,\n element = that.element[0],\n value = element.checked,\n duration = kendo.mobile.application && kendo.mobile.application.os.wp ? 100 : 200,\n distance;\n\n that.wrapper\n .toggleClass(className(SWITCHON), checked)\n .toggleClass(className(SWITCHOFF), !checked);\n\n that.position = distance = checked * that.constrain;\n\n if (that._animateBackground) {\n that.background\n .kendoStop(true, true)\n .kendoAnimate({ effects: \"slideMargin\", offset: distance, reset: true, reverse: !checked, axis: \"left\", duration: duration });\n }\n\n handle\n .kendoStop(true, true)\n .kendoAnimate({\n effects: \"slideTo\",\n duration: duration,\n offset: distance + \"px,0\",\n reset: true,\n complete: function() {\n if (value !== checked) {\n element.checked = checked;\n that.trigger(CHANGE, { checked: checked });\n }\n }\n });\n },\n\n _drag: function() {\n var that = this;\n\n that.userEvents = new kendo.UserEvents(that.wrapper, {\n fastTap: true,\n tap: function() {\n if (that.options.enable) {\n that._toggle(!that.element[0].checked);\n }\n },\n start: that._start.bind(that),\n move: that._move.bind(that),\n end: that._stop.bind(that)\n });\n }\n });\n\n ui.plugin(Switch);\n })(window.kendo.jQuery);\n\n var __meta__$1 = {\n id: \"mobile.tabstrip\",\n name: \"TabStrip\",\n category: \"mobile\",\n description: \"The mobile TabStrip widget is used inside a mobile view or layout footer element to display an application-wide group of navigation buttons.\",\n depends: [ \"core\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n ui = kendo.mobile.ui,\n Widget = ui.Widget,\n ACTIVE_STATE_CLASS = \"km-state-active\",\n SELECT = \"select\";\n\n function createBadge(value) {\n return $('' + value + '');\n }\n\n var TabStrip = Widget.extend({\n init: function(element, options) {\n var that = this;\n\n Widget.fn.init.call(that, element, options);\n that.container().bind(\"show\", this.refresh.bind(this));\n\n that.element\n .addClass(\"km-tabstrip\")\n .find(\"a\").each(that._buildButton)\n .eq(that.options.selectedIndex).addClass(ACTIVE_STATE_CLASS);\n\n that.element.on(\"down\", \"a\", \"_release\");\n },\n\n events: [\n SELECT\n ],\n\n switchTo: function(url) {\n var tabs = this.element.find('a'),\n tab,\n path,\n idx = 0,\n length = tabs.length;\n\n if (isNaN(url)) {\n for (; idx < length; idx ++) {\n tab = tabs[idx];\n path = tab.href.replace(/(\\#.+)(\\?.+)$/, \"$1\"); // remove the fragment query string - http://www.foo.com?foo#bar**?baz=qux**\n\n if (path.indexOf(url, path.length - url.length) !== -1) {\n this._setActiveItem($(tab));\n return true;\n }\n }\n } else {\n this._setActiveItem(tabs.eq(url));\n return true;\n }\n\n return false;\n },\n\n switchByFullUrl: function(url) {\n var tab;\n\n tab = this.element.find(\"a[href$='\" + url + \"']\");\n this._setActiveItem(tab);\n },\n\n clear: function() {\n this.currentItem().removeClass(ACTIVE_STATE_CLASS);\n },\n\n currentItem: function() {\n return this.element.children(\".\" + ACTIVE_STATE_CLASS);\n },\n\n badge: function(item, value) {\n var tabstrip = this.element, badge;\n\n if (!isNaN(item)) {\n item = tabstrip.children().get(item);\n }\n\n item = tabstrip.find(item);\n badge = $(item.find(\".km-badge\")[0] || createBadge(value).insertAfter(item.children(\".km-icon\")));\n\n if (value || value === 0) {\n badge.html(value);\n return this;\n }\n\n if (value === false) {\n badge.empty().remove();\n return this;\n }\n\n return badge.html();\n },\n\n _release: function(e) {\n if (e.which > 1) {\n return;\n }\n\n var that = this,\n item = $(e.currentTarget);\n\n if (item[0] === that.currentItem()[0]) {\n return;\n }\n\n if (that.trigger(SELECT, { item: item })) {\n e.preventDefault();\n } else {\n that._setActiveItem(item);\n }\n },\n\n _setActiveItem: function(item) {\n if (!item[0]) {\n return;\n }\n this.clear();\n item.addClass(ACTIVE_STATE_CLASS);\n },\n\n _buildButton: function() {\n var button = $(this),\n icon = kendo.attrValue(button, \"icon\"),\n badge = kendo.attrValue(button, \"badge\"),\n image = button.find(\"img\"),\n iconSpan = $('');\n\n button\n .addClass(\"km-button\")\n .attr(kendo.attr(\"role\"), \"tab\")\n .contents().not(image)\n .wrapAll('');\n\n if (image[0]) {\n image.addClass(\"km-image\").prependTo(button);\n } else {\n button.prepend(iconSpan);\n if (icon) {\n iconSpan.addClass(\"km-\" + icon);\n if (badge || badge === 0) {\n createBadge(badge).insertAfter(iconSpan);\n }\n }\n }\n },\n\n refresh: function(e) {\n var url = e.view.id;\n\n if (url && !this.switchTo(e.view.id)) {\n this.switchTo(url);\n }\n },\n\n options: {\n name: \"TabStrip\",\n selectedIndex: 0,\n enable: true\n }\n });\n\n ui.plugin(TabStrip);\n })(window.kendo.jQuery);\n\n var __meta__ = {\n id: \"angular\",\n name: \"AngularJS Directives\",\n category: \"framework\",\n description: \"Adds Kendo UI for AngularJS directives\",\n depends: [ \"core\" ],\n defer: true\n };\n\n (function($, angular, undefined$1) {\n \"use strict\";\n\n // Angular2 exposes a global angular object, but it does not have an injector...\n if (!angular || !angular.injector) {\n return;\n }\n\n\n var module = angular.module('kendo.directives', []),\n $injector = angular.injector(['ng']),\n $parse = $injector.get('$parse'),\n $timeout = $injector.get('$timeout'),\n $defaultCompile,\n $log = $injector.get('$log');\n\n function withoutTimeout(f) {\n var save = $timeout;\n try {\n $timeout = function(f) { return f(); };\n return f();\n } finally {\n $timeout = save;\n }\n }\n\n var OPTIONS_NOW;\n\n var createDataSource = (function() {\n var types = {\n TreeList: 'TreeListDataSource',\n TreeView: 'HierarchicalDataSource',\n Scheduler: 'SchedulerDataSource',\n PivotGrid: 'PivotDataSource',\n PivotConfigurator: 'PivotDataSource',\n PanelBar: 'HierarchicalDataSource',\n Menu: \"$PLAIN\",\n ContextMenu: \"$PLAIN\"\n };\n var toDataSource = function(dataSource, type) {\n if (type == '$PLAIN') {\n return dataSource;\n }\n return kendo.data[type].create(dataSource);\n };\n return function(scope, element, role, source) {\n var type = types[role] || 'DataSource';\n var current = scope.$eval(source);\n var ds = toDataSource(current, type);\n\n scope.$watch(source, function(mew) {\n var widget = kendoWidgetInstance(element);\n\n if (widget && typeof widget.setDataSource == \"function\") {\n if (mew !== current && mew !== widget.dataSource) {\n var ds = toDataSource(mew, type);\n widget.setDataSource(ds);\n current = mew;\n }\n }\n });\n return ds;\n };\n }());\n\n var ignoredAttributes = {\n kDataSource: true,\n kOptions: true,\n kRebind: true,\n kNgModel: true,\n kNgDelay: true\n };\n\n var ignoredOwnProperties = {\n // XXX: other names to ignore here?\n name: true,\n title: true,\n style: true\n };\n\n function createWidget(scope, element, attrs, widget, origAttr, controllers) {\n\n if (!(element instanceof jQuery)) {\n throw new Error(\"The Kendo UI directives require jQuery to be available before AngularJS. Please include jquery before angular in the document.\");\n }\n\n var kNgDelay = attrs.kNgDelay,\n delayValue = scope.$eval(kNgDelay);\n\n controllers = controllers || [];\n\n var ngModel = controllers[0],\n ngForm = controllers[1];\n\n var ctor = $(element)[widget];\n\n if (!ctor) {\n window.console.error(\"Could not find: \" + widget);\n return null;\n }\n\n var parsed = parseOptions(scope, element, attrs, widget, ctor);\n\n var options = parsed.options;\n\n if (parsed.unresolved.length) {\n var promises = [];\n\n for (var i = 0, len = parsed.unresolved.length; i < len; i++) {\n\n var unresolved = parsed.unresolved[i];\n\n var promise = $.Deferred(function(d) {\n var unwatch = scope.$watch(unresolved.path, function(newValue) {\n if (newValue !== undefined$1) {\n unwatch();\n d.resolve();\n }\n });\n }).promise();\n\n promises.push(promise);\n }\n\n $.when.apply(null, promises).then(createIt);\n\n return;\n }\n\n if (kNgDelay && !delayValue) {\n var root = scope.$root || scope;\n\n var register = function() {\n var unregister = scope.$watch(kNgDelay, function(newValue) {\n if (newValue !== undefined$1) {\n unregister();\n // remove subsequent delays, to make ng-rebind work\n element.removeAttr(attrs.$attr.kNgDelay);\n kNgDelay = null;\n $timeout(createIt); // XXX: won't work without `timeout` ;-\\\n }\n });\n };\n\n // WARNING: the watchers should be registered in the digest cycle.\n // the fork here is for the timeout/non-timeout initiated widgets.\n if (/^\\$(digest|apply)$/.test(root.$$phase)) {\n register();\n } else {\n scope.$apply(register);\n }\n\n return;\n } else {\n return createIt();\n }\n\n function createIt() {\n var originalElement;\n\n if (attrs.kRebind) {\n originalElement = $($(element)[0].cloneNode(true));\n }\n\n // re-parse the options here.\n options = parseOptions(scope, element, attrs, widget, ctor).options;\n\n if (element.is(\"select\")) {\n (function(options) {\n if (options.length > 0) {\n var first = $(options[0]);\n if (!/\\S/.test(first.text()) && /^\\?/.test(first.val())) {\n first.remove();\n }\n\n for (var i = 0; i < options.length; i++) {\n $(options[i]).off(\"$destroy\");\n }\n }\n }(element[0].options));\n }\n\n var object = ctor.call(element, OPTIONS_NOW = options).data(widget);\n\n exposeWidget(object, scope, attrs, widget, origAttr);\n\n scope.$emit(\"kendoWidgetCreated\", object);\n\n var destroyRegister = destroyWidgetOnScopeDestroy(scope, object);\n\n if (attrs.kRebind) {\n setupRebind(object, scope, element, originalElement, attrs.kRebind, destroyRegister, attrs);\n }\n\n if (attrs.kNgDisabled) {\n var kNgDisabled = attrs.kNgDisabled;\n var isDisabled = scope.$eval(kNgDisabled);\n if (isDisabled) {\n object.enable(!isDisabled);\n }\n bindToKNgDisabled(object, scope, element, kNgDisabled);\n }\n\n if (attrs.kNgReadonly) {\n var kNgReadonly = attrs.kNgReadonly;\n var isReadonly = scope.$eval(kNgReadonly);\n if (isReadonly) {\n object.readonly(isReadonly);\n }\n bindToKNgReadonly(object, scope, element, kNgReadonly);\n }\n\n // kNgModel is used for the \"logical\" value\n if (attrs.kNgModel) {\n bindToKNgModel(object, scope, attrs.kNgModel);\n }\n\n // 2 way binding: ngModel <-> widget.value()\n if (ngModel) {\n bindToNgModel(object, scope, element, ngModel, ngForm);\n }\n\n if (object) {\n propagateClassToWidgetWrapper(object, element);\n }\n\n return object;\n }\n }\n\n\n function parseOptions(scope, element, attrs, widget, ctor) {\n var role = widget.replace(/^kendo/, '');\n var unresolved = [];\n var optionsPath = attrs.kOptions || attrs.options;\n var optionsValue = scope.$eval(optionsPath);\n\n if (optionsPath && optionsValue === undefined$1) {\n unresolved.push({ option: \"options\", path: optionsPath });\n }\n\n var options = angular.extend({}, attrs.defaultOptions, optionsValue);\n\n function addOption(name, value) {\n var scopeValue = angular.copy(scope.$eval(value));\n if (scopeValue === undefined$1) {\n unresolved.push({ option: name, path: value });\n } else {\n options[name] = scopeValue;\n }\n }\n\n\n var widgetOptions = ctor.widget.prototype.options;\n var widgetEvents = ctor.widget.prototype.events;\n\n\n $.each(attrs, function(name, value) {\n if (name === \"source\" || name === \"kDataSource\" || name === \"kScopeField\" || name === \"scopeField\") {\n return;\n }\n\n var dataName = \"data\" + name.charAt(0).toUpperCase() + name.slice(1);\n\n if (name.indexOf(\"on\") === 0) { // let's search for such event.\n var eventKey = name.replace(/^on./, function(prefix) {\n return prefix.charAt(2).toLowerCase();\n });\n\n if (widgetEvents.indexOf(eventKey) > -1) {\n options[eventKey] = value;\n }\n } // don't elsif here - there are on* options\n\n if (widgetOptions.hasOwnProperty(dataName)) {\n addOption(dataName, value);\n } else if (widgetOptions.hasOwnProperty(name) && !ignoredOwnProperties[name]) {\n addOption(name, value);\n } else if (!ignoredAttributes[name]) {\n var match = name.match(/^k(On)?([A-Z].*)/);\n if (match) {\n var optionName = match[2].charAt(0).toLowerCase() + match[2].slice(1);\n if (match[1] && name != \"kOnLabel\" // XXX: k-on-label can be used on MobileSwitch :-\\\n ) {\n options[optionName] = value;\n } else {\n if (name == \"kOnLabel\") {\n optionName = \"onLabel\"; // XXX: that's awful.\n }\n addOption(optionName, value);\n }\n }\n }\n });\n\n // parse the datasource attribute\n var dataSource = attrs.kDataSource || attrs.source;\n\n if (dataSource) {\n options.dataSource = createDataSource(scope, element, role, dataSource);\n }\n\n // deepExtend in kendo.core (used in Editor) will fail with stack\n // overflow if we don't put it in an array :-\\\n options.$angular = [ scope ];\n\n return {\n options: options,\n unresolved: unresolved\n };\n }\n\n function bindToKNgDisabled(widget, scope, element, kNgDisabled) {\n if ((kendo.ui.PanelBar && widget instanceof kendo.ui.PanelBar) || (kendo.ui.Menu && widget instanceof kendo.ui.Menu)) {\n $log.warn(\"k-ng-disabled specified on a widget that does not have the enable() method: \" + (widget.options.name));\n return;\n }\n scope.$watch(kNgDisabled, function(newValue, oldValue) {\n if (newValue != oldValue) {\n widget.enable(!newValue);\n }\n });\n }\n\n function bindToKNgReadonly(widget, scope, element, kNgReadonly) {\n if (typeof widget.readonly != \"function\") {\n $log.warn(\"k-ng-readonly specified on a widget that does not have the readonly() method: \" + (widget.options.name));\n return;\n }\n scope.$watch(kNgReadonly, function(newValue, oldValue) {\n if (newValue != oldValue) {\n widget.readonly(newValue);\n }\n });\n }\n\n function exposeWidget(widget, scope, attrs, kendoWidget, origAttr) {\n if (attrs[origAttr]) {\n var set = $parse(attrs[origAttr]).assign;\n if (set) {\n // set the value of the expression to the kendo widget object to expose its api\n set(scope, widget);\n } else {\n throw new Error(origAttr + ' attribute used but expression in it is not assignable: ' + attrs[kendoWidget]);\n }\n }\n }\n\n function formValue(element) {\n if (/checkbox|radio/i.test(element.attr(\"type\"))) {\n return element.prop(\"checked\");\n }\n return element.val();\n }\n\n var formRegExp = /^(input|select|textarea)$/i;\n\n function isForm(element) {\n return formRegExp.test(element[0].tagName);\n }\n\n function bindToNgModel(widget, scope, element, ngModel, ngForm) {\n if (!widget.value) {\n return;\n }\n\n var value;\n // Some widgets trigger \"change\" on the input field\n // and this would result in two events sent (#135)\n var haveChangeOnElement = false;\n\n if (isForm(element)) {\n value = function() {\n return formValue(element);\n };\n } else {\n value = function() {\n return widget.value();\n };\n }\n\n // Angular will invoke $render when the view needs to be updated with the view value.\n var viewRender = function() {\n // Update the widget with the view value.\n\n // delaying with setTimout for cases where the datasource is set thereafter.\n // https://github.com/kendo-labs/angular-kendo/issues/304\n var val = ngModel.$viewValue;\n if (val === undefined$1) {\n val = ngModel.$modelValue;\n }\n\n if (val === undefined$1) {\n val = null;\n }\n\n haveChangeOnElement = true;\n setTimeout(function() {\n haveChangeOnElement = false;\n if (widget) { // might have been destroyed in between. :-(\n var kNgModel = scope[widget.element.attr(\"k-ng-model\")];\n\n if (kNgModel) {\n val = kNgModel;\n }\n\n if (widget.options.autoBind === false && !widget.listView.bound()) {\n if (val) {\n widget.value(val);\n }\n } else {\n widget.value(val);\n }\n }\n }, 0);\n };\n\n ngModel.$render = viewRender;\n setTimeout(function() {\n if (ngModel.$render !== viewRender) {\n ngModel.$render = viewRender;\n ngModel.$render();\n }\n });\n\n if (isForm(element)) {\n element.on(\"change\", function() {\n haveChangeOnElement = true;\n });\n }\n\n var onChange = function(pristine) {\n return function() {\n var formPristine;\n if (haveChangeOnElement && !element.is(\"select\")) {\n return;\n }\n if (pristine && ngForm) {\n formPristine = ngForm.$pristine;\n }\n ngModel.$setViewValue(value());\n if (pristine) {\n ngModel.$setPristine();\n if (formPristine) {\n ngForm.$setPristine();\n }\n }\n digest(scope);\n };\n };\n\n widget.first(\"change\", onChange(false));\n widget.first(\"spin\", onChange(false));\n\n if (!(kendo.ui.AutoComplete && widget instanceof kendo.ui.AutoComplete)) {\n widget.first(\"dataBound\", onChange(true));\n }\n\n var currentVal = value();\n\n // if the model value is undefined, then we set the widget value to match ( == null/undefined )\n // In telerik/kendo-ui-core#1027 we discovered that after the timeout the $viewValue arives as NaN in some weird, default form.\n // Hence the check below.\n if (!isNaN(ngModel.$viewValue) && currentVal != ngModel.$viewValue) {\n if (!ngModel.$isEmpty(ngModel.$viewValue)) {\n widget.value(ngModel.$viewValue);\n } else if (currentVal != null && currentVal !== \"\" && currentVal != ngModel.$viewValue) {\n ngModel.$setViewValue(currentVal);\n }\n }\n\n ngModel.$setPristine();\n }\n\n function bindToKNgModel(widget, scope, kNgModel) {\n if (kendo.ui.DateRangePicker && widget instanceof kendo.ui.DateRangePicker) {\n var rangePickerModels = kNgModel.split(\",\");\n var rangePickerStartModel = rangePickerModels[0].trim();\n var rangePickerEndModel;\n\n bindToKNgModel(widget._startDateInput, scope, rangePickerStartModel);\n if (rangePickerModels[1]) {\n rangePickerEndModel = rangePickerModels[1].trim();\n bindToKNgModel(widget._endDateInput, scope, rangePickerEndModel);\n widget.range({ start: scope[rangePickerStartModel], end: scope[rangePickerEndModel] });\n } else {\n widget.range({ start: scope[rangePickerStartModel], end: null });\n }\n\n return;\n }\n\n if (typeof widget.value != \"function\") {\n $log.warn(\"k-ng-model specified on a widget that does not have the value() method: \" + (widget.options.name));\n return;\n }\n\n var form = $(widget.element).parents(\"ng-form, form\").first();\n var ngForm = kendo.getter(form.attr(\"name\"), true)(scope);\n var getter = $parse(kNgModel);\n var setter = getter.assign;\n var updating = false;\n\n var valueIsCollection = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect ||\n kendo.ui.RangeSlider && widget instanceof kendo.ui.RangeSlider;\n\n var length = function(value) {\n //length is irrelevant when value is not collection\n return value && valueIsCollection ? value.length : 0;\n };\n\n var currentValueLength = length(getter(scope));\n\n widget.$angular_setLogicValue(getter(scope));\n\n // keep in sync\n var watchHandler = function(newValue, oldValue) {\n if (newValue === undefined$1) {\n // because widget's value() method usually checks if the new value is undefined,\n // in which case it returns the current value rather than clearing the field.\n // https://github.com/telerik/kendo-ui-core/issues/299\n newValue = null;\n }\n\n //compare values by reference if a collection\n if (updating || (newValue == oldValue && length(newValue) == currentValueLength)) {\n return;\n }\n\n currentValueLength = length(newValue);\n widget.$angular_setLogicValue(newValue);\n };\n\n if (valueIsCollection) {\n scope.$watchCollection(kNgModel, watchHandler);\n } else {\n scope.$watch(kNgModel, watchHandler);\n }\n\n var changeHandler = function() {\n updating = true;\n\n if (ngForm && ngForm.$pristine) {\n ngForm.$setDirty();\n }\n\n digest(scope, function() {\n setter(scope, widget.$angular_getLogicValue());\n currentValueLength = length(getter(scope));\n });\n\n updating = false;\n };\n\n widget.first(\"change\", changeHandler);\n widget.first(\"spin\", changeHandler);\n }\n\n function destroyWidgetOnScopeDestroy(scope, widget) {\n var deregister = scope.$on(\"$destroy\", function() {\n deregister();\n if (widget) {\n kendo.destroy(widget.element);\n widget = null;\n }\n });\n\n return deregister;\n }\n\n // mutation observers - propagate the original\n // element's class to the widget wrapper.\n function propagateClassToWidgetWrapper(widget, element) {\n if (!(window.MutationObserver && widget.wrapper)) {\n return;\n }\n\n var prevClassList = [].slice.call($(element)[0].classList);\n\n var mo = new MutationObserver(function(changes) {\n suspend(); // make sure we don't trigger a loop\n if (!widget) {\n return;\n }\n\n changes.forEach(function(chg) {\n var w = $(widget.wrapper)[0];\n switch (chg.attributeName) {\n\n case \"class\":\n // sync classes to the wrapper element\n var currClassList = [].slice.call(chg.target.classList);\n currClassList.forEach(function(cls) {\n if (prevClassList.indexOf(cls) < 0) {\n w.classList.add(cls);\n if (kendo.ui.ComboBox && widget instanceof kendo.ui.ComboBox) { // https://github.com/kendo-labs/angular-kendo/issues/356\n widget.input[0].classList.add(cls);\n }\n }\n });\n prevClassList.forEach(function(cls) {\n if (currClassList.indexOf(cls) < 0) {\n w.classList.remove(cls);\n if (kendo.ui.ComboBox && widget instanceof kendo.ui.ComboBox) { // https://github.com/kendo-labs/angular-kendo/issues/356\n widget.input[0].classList.remove(cls);\n }\n }\n });\n prevClassList = currClassList;\n break;\n\n case \"disabled\":\n if (typeof widget.enable == \"function\" && !widget.element.attr(\"readonly\")) {\n widget.enable(!$(chg.target).attr(\"disabled\"));\n }\n break;\n\n case \"readonly\":\n if (typeof widget.readonly == \"function\" && !widget.element.attr(\"disabled\")) {\n widget.readonly(!!$(chg.target).attr(\"readonly\"));\n }\n break;\n }\n });\n\n resume();\n });\n\n function suspend() {\n mo.disconnect();\n }\n\n function resume() {\n mo.observe($(element)[0], { attributes: true });\n }\n\n resume();\n widget.first(\"destroy\", suspend);\n }\n\n function setupRebind(widget, scope, element, originalElement, rebindAttr, destroyRegister, attrs) {\n // watch for changes on the expression passed in the k-rebind attribute\n var unregister = scope.$watch(rebindAttr, function(newValue, oldValue) {\n if (!widget._muteRebind && newValue !== oldValue) {\n unregister(); // this watcher will be re-added if we compile again!\n\n if (attrs._cleanUp) {\n attrs._cleanUp();\n }\n\n var templateOptions = WIDGET_TEMPLATE_OPTIONS[widget.options.name];\n\n if (templateOptions) {\n templateOptions.forEach(function(name) {\n var templateContents = scope.$eval(attrs[\"k\" + name]);\n\n if (templateContents) {\n originalElement.append($(templateContents).attr(kendo.toHyphens(\"k\" + name), \"\"));\n }\n });\n }\n\n var _wrapper = $(widget.wrapper)[0];\n var _element = $(widget.element)[0];\n var isUpload = widget.options.name === \"Upload\";\n\n if (isUpload) {\n element = $(_element);\n }\n\n var compile = element.injector().get(\"$compile\");\n widget._destroy();\n\n if (destroyRegister) {\n destroyRegister();\n }\n\n widget = null;\n\n if (_element) {\n if (_wrapper) {\n _wrapper.parentNode.replaceChild(_element, _wrapper);\n }\n $(element).replaceWith(originalElement);\n }\n\n compile(originalElement)(scope);\n }\n }, true); // watch for object equality. Use native or simple values.\n digest(scope);\n }\n\n function bind(f, obj) {\n return function(a, b) {\n return f.call(obj, a, b);\n };\n }\n\n function setTemplate(key, value) {\n this[key] = kendo.stringify(value);\n }\n\n module.factory('directiveFactory', [ '$compile', function(compile) {\n var kendoRenderedTimeout;\n var RENDERED = false;\n\n // caching $compile for the dirty hack upstairs. This is awful, but we happen to have elements outside of the bootstrapped root :(.\n $defaultCompile = compile;\n\n var create = function(role, origAttr) {\n return {\n // Parse the directive for attributes and classes\n restrict: \"AC\",\n require: [ \"?ngModel\", \"^?form\" ],\n scope: false,\n\n controller: [ '$scope', '$attrs', '$element', function($scope, $attrs) {\n this.template = bind(setTemplate, $attrs);\n $attrs._cleanUp = bind(function() {\n this.template = null;\n $attrs._cleanUp = null;\n }, this);\n }],\n\n link: function(scope, element, attrs, controllers) {\n var $element = $(element);\n\n // we must remove data-kendo-widget-name attribute because\n // it breaks kendo.widgetInstance; can generate all kinds\n // of funny issues like\n //\n // https://github.com/kendo-labs/angular-kendo/issues/167\n //\n // but we still keep the attribute without the\n // `data-` prefix, so k-rebind would work.\n var roleattr = role.replace(/([A-Z])/g, \"-$1\");\n\n $element.attr(roleattr, $element.attr(\"data-\" + roleattr));\n $element[0].removeAttribute(\"data-\" + roleattr);\n\n var widget = createWidget(scope, element, attrs, role, origAttr, controllers);\n\n if (!widget) {\n return;\n }\n\n if (kendoRenderedTimeout) {\n clearTimeout(kendoRenderedTimeout);\n }\n\n kendoRenderedTimeout = setTimeout(function() {\n scope.$emit(\"kendoRendered\");\n if (!RENDERED) {\n RENDERED = true;\n $(\"form\").each(function() {\n var form = $(this).controller(\"form\");\n if (form) {\n form.$setPristine();\n }\n });\n }\n });\n }\n };\n };\n\n return {\n create: create\n };\n }]);\n\n var TAGNAMES = {\n Editor: \"textarea\",\n NumericTextBox: \"input\",\n DatePicker: \"input\",\n DateTimePicker: \"input\",\n TimePicker: \"input\",\n AutoComplete: \"input\",\n ColorPicker: \"input\",\n MaskedTextBox: \"input\",\n MultiSelect: \"input\",\n Upload: \"input\",\n Validator: \"form\",\n Button: \"button\",\n MobileButton: \"a\",\n MobileBackButton: \"a\",\n MobileDetailButton: \"a\",\n ListView: \"ul\",\n MobileListView: \"ul\",\n ScrollView: \"div\",\n PanelBar: \"ul\",\n TreeView: \"ul\",\n Menu: \"ul\",\n ContextMenu: \"ul\",\n ActionSheet: \"ul\",\n Switch: \"input\"\n };\n\n var SKIP_SHORTCUTS = [\n 'MobileView',\n 'MobileDrawer',\n 'MobileLayout',\n 'MobileSplitView',\n 'MobilePane',\n 'MobileModalView'\n ];\n\n var MANUAL_DIRECTIVES = [\n 'MobileApplication',\n 'MobileView',\n 'MobileModalView',\n 'MobileLayout',\n 'MobileActionSheet',\n 'MobileDrawer',\n 'MobileSplitView',\n 'MobilePane',\n 'MobileScrollView',\n 'MobilePopOver'\n ];\n\n angular.forEach(['MobileNavBar', 'MobileButton', 'MobileBackButton', 'MobileDetailButton', 'MobileTabStrip', 'MobileScrollView', 'MobileScroller'], function(widget) {\n MANUAL_DIRECTIVES.push(widget);\n widget = \"kendo\" + widget;\n module.directive(widget, function() {\n return {\n restrict: \"A\",\n link: function(scope, element, attrs) {\n createWidget(scope, element, attrs, widget, widget);\n }\n };\n });\n });\n\n function createDirectives(klass, isMobile) {\n function make(directiveName, widgetName) {\n module.directive(directiveName, [\n \"directiveFactory\",\n function(directiveFactory) {\n return directiveFactory.create(widgetName, directiveName);\n }\n ]);\n }\n\n var name = isMobile ? \"Mobile\" : \"\";\n name += klass.fn.options.name;\n\n var className = name;\n var shortcut = \"kendo\" + name.charAt(0) + name.substr(1).toLowerCase();\n name = \"kendo\" + name;\n\n // -type directives\n var dashed = name.replace(/([A-Z])/g, \"-$1\");\n\n if (SKIP_SHORTCUTS.indexOf(name.replace(\"kendo\", \"\")) == -1) {\n var names = name === shortcut ? [ name ] : [ name, shortcut ];\n angular.forEach(names, function(directiveName) {\n module.directive(directiveName, function() {\n return {\n restrict: \"E\",\n replace: true,\n template: function(element, attributes) {\n var tag = TAGNAMES[className] || \"div\";\n var scopeField = attributes.kScopeField || attributes.scopeField;\n\n return \"<\" + tag + \" \" + dashed + (scopeField ? ('=\"' + scopeField + '\"') : \"\") + \">\" + element.html() + \"\";\n }\n };\n });\n });\n }\n\n if (MANUAL_DIRECTIVES.indexOf(name.replace(\"kendo\", \"\")) > -1) {\n return;\n }\n\n // here name should be like kendoMobileListView so kendo-mobile-list-view works,\n // and shortcut like kendoMobilelistview, for kendo-mobilelistview\n\n make(name, name);\n if (shortcut != name) {\n make(shortcut, name);\n }\n\n }\n\n /* -----[ utils ]----- */\n\n function kendoWidgetInstance(el) {\n el = $(el);\n return kendo.widgetInstance(el, kendo.ui) ||\n kendo.widgetInstance(el, kendo.mobile.ui) ||\n kendo.widgetInstance(el, kendo.dataviz.ui);\n }\n\n function digest(scope, func) {\n var root = scope.$root || scope;\n var isDigesting = /^\\$(digest|apply)$/.test(root.$$phase);\n if (func) {\n if (isDigesting) {\n func();\n } else {\n root.$apply(func);\n }\n } else if (!isDigesting) {\n root.$digest();\n }\n }\n\n function destroyScope(scope, el) {\n scope.$destroy();\n if (el) {\n // prevent leaks. https://github.com/kendo-labs/angular-kendo/issues/237\n $(el)\n .removeData(\"$scope\")\n .removeData(\"$$kendoScope\")\n .removeData(\"$isolateScope\")\n .removeData(\"$isolateScopeNoTemplate\")\n .removeClass(\"ng-scope\");\n }\n }\n\n var encode = kendo.htmlEncode;\n var open = /{{/g;\n var close = /}}/g;\n var encOpen = '{​{';\n var encClose = '}​}';\n\n kendo.htmlEncode = function(str) {\n return encode(str)\n .replace(open, encOpen)\n .replace(close, encClose);\n };\n\n var pendingPatches = [];\n\n // defadvice will patch a class' method with another function. That\n // function will be called in a context containing `next` (to call\n // the next method) and `object` (a reference to the original\n // object).\n function defadvice(klass, methodName, func) {\n if (Array.isArray(klass)) {\n return angular.forEach(klass, function(klass) {\n defadvice(klass, methodName, func);\n });\n }\n if (typeof klass == \"string\") {\n var a = klass.split(\".\");\n var x = kendo;\n while (x && a.length > 0) {\n x = x[a.shift()];\n }\n if (!x) {\n pendingPatches.push([ klass, methodName, func ]);\n return false;\n }\n klass = x.prototype;\n }\n var origMethod = klass[methodName];\n klass[methodName] = function() {\n var self = this, args = arguments;\n return func.apply({\n self: self,\n next: function() {\n return origMethod.apply(self, arguments.length > 0 ? arguments : args);\n }\n }, args);\n };\n return true;\n }\n\n kendo.onWidgetRegistered(function(entry) {\n pendingPatches = $.grep(pendingPatches, function(args) {\n return !defadvice.apply(null, args);\n });\n createDirectives(entry.widget, entry.prefix == \"Mobile\");\n });\n\n /* -----[ Customize widgets for Angular ]----- */\n\n defadvice([ \"ui.Widget\", \"mobile.ui.Widget\" ], \"angular\", function(cmd, arg) {\n var self = this.self;\n if (cmd == \"init\") {\n // `arg` here should be the widget options.\n // the Chart doesn't send the options to Widget::init in constructor\n // hence the OPTIONS_NOW hack (initialized in createWidget).\n if (!arg && OPTIONS_NOW) {\n arg = OPTIONS_NOW;\n }\n OPTIONS_NOW = null;\n if (arg && arg.$angular) {\n self.$angular_scope = arg.$angular[0];\n self.$angular_init(self.element, arg);\n }\n return;\n }\n\n var scope = self.$angular_scope;\n\n if (scope) {\n withoutTimeout(function() {\n var x = arg(), elements = x.elements, data = x.data;\n if (elements.length > 0) {\n switch (cmd) {\n\n case \"cleanup\":\n angular.forEach(elements, function(el) {\n var itemScope = $(el).data(\"$$kendoScope\");\n\n if (itemScope && itemScope !== scope && itemScope.$$kendoScope) {\n destroyScope(itemScope, el);\n }\n });\n break;\n\n case \"compile\":\n var injector = self.element.injector();\n var compile = injector ? injector.get(\"$compile\") : $defaultCompile;\n\n angular.forEach(elements, function(el, i) {\n var itemScope;\n if (x.scopeFrom) {\n itemScope = x.scopeFrom;\n } else {\n var vars = data && data[i];\n if (vars !== undefined$1) {\n itemScope = $.extend(scope.$new(), vars);\n itemScope.$$kendoScope = true;\n } else {\n itemScope = scope;\n }\n }\n\n $(el).data(\"$$kendoScope\", itemScope);\n compile(el)(itemScope);\n });\n digest(scope);\n break;\n }\n }\n });\n }\n });\n\n defadvice(\"ui.Widget\", \"$angular_getLogicValue\", function() {\n return this.self.value();\n });\n\n defadvice(\"ui.Widget\", \"$angular_setLogicValue\", function(val) {\n this.self.value(val);\n });\n\n defadvice(\"ui.Select\", \"$angular_getLogicValue\", function() {\n var item = this.self.dataItem(),\n valueField = this.self.options.dataValueField;\n\n if (item) {\n if (this.self.options.valuePrimitive) {\n if (!!valueField) {\n return item[valueField];\n } else {\n return item;\n }\n } else {\n return item.toJSON();\n }\n } else {\n return null;\n }\n });\n\n defadvice(\"ui.Select\", \"$angular_setLogicValue\", function(val) {\n var self = this.self;\n var options = self.options;\n var valueField = options.dataValueField;\n var text = options.text || \"\";\n\n if (val === undefined$1) {\n val = \"\";\n }\n\n if (valueField && !options.valuePrimitive && val) {\n text = val[options.dataTextField] || \"\";\n val = val[valueField || options.dataTextField];\n }\n\n if (self.options.autoBind === false && !self.listView.bound()) {\n if (!text && val && options.valuePrimitive) {\n self.value(val);\n } else {\n self._preselect(val, text);\n }\n } else {\n self.value(val);\n }\n });\n\n defadvice(\"ui.MultiSelect\", \"$angular_getLogicValue\", function() {\n var value = this.self.dataItems().slice(0);\n var valueField = this.self.options.dataValueField;\n\n if (valueField && this.self.options.valuePrimitive) {\n value = $.map(value, function(item) {\n return item[valueField];\n });\n }\n\n return value;\n });\n\n defadvice(\"ui.MultiSelect\", \"$angular_setLogicValue\", function(val) {\n if (val == null) {\n val = [];\n }\n\n var self = this.self;\n var options = self.options;\n var valueField = options.dataValueField;\n var data = val;\n\n if (valueField && !options.valuePrimitive) {\n val = $.map(val, function(item) {\n return item[valueField];\n });\n }\n\n if (options.autoBind === false && !options.valuePrimitive && !self.listView.bound()) {\n self._preselect(data, val);\n } else {\n self.value(val);\n }\n });\n\n /* AutoComplete's getter and setter are removed!\n By design, AutoComplete should be bound only to primitive string\n value and data items are bound only to serve the list of suggestions.\n\n Binding multiple data items is supported by the MultiSelect widget.\n */\n\n // All event handlers that are strings are compiled the Angular way.\n defadvice(\"ui.Widget\", \"$angular_init\", function(element, options) {\n var self = this.self;\n if (options && !Array.isArray(options)) {\n var scope = self.$angular_scope;\n for (var i = self.events.length; --i >= 0;) {\n var event = self.events[i];\n var handler = options[event];\n if (handler && typeof handler == \"string\") {\n options[event] = self.$angular_makeEventHandler(event, scope, handler);\n }\n }\n }\n });\n\n // most handers will only contain a kendoEvent in the scope.\n defadvice(\"ui.Widget\", \"$angular_makeEventHandler\", function(event, scope, handler) {\n handler = $parse(handler);\n return function(e) {\n digest(scope, function() {\n handler(scope, { kendoEvent: e });\n });\n };\n });\n\n // for the Grid and ListView we add `data` and `selected` too.\n defadvice([ \"ui.Grid\", \"ui.ListView\", \"ui.TreeView\", \"ui.PanelBar\" ], \"$angular_makeEventHandler\", function(event, scope, handler) {\n if (event != \"change\") {\n return this.next();\n }\n handler = $parse(handler);\n return function(ev) {\n var widget = ev.sender;\n var options = widget.options;\n var cell, multiple, locals = { kendoEvent: ev }, elems, items, columns, colIdx;\n\n if (angular.isString(options.selectable)) {\n cell = options.selectable.indexOf('cell') !== -1;\n multiple = options.selectable.indexOf('multiple') !== -1;\n }\n if (widget._checkBoxSelection) {\n multiple = true;\n }\n\n elems = locals.selected = this.select();\n items = locals.data = [];\n columns = locals.columns = [];\n for (var i = 0; i < elems.length; i++) {\n var item = cell ? elems[i].parentNode : elems[i];\n var dataItem = widget.dataItem(item);\n if (cell) {\n if (angular.element.inArray(dataItem, items) < 0) {\n items.push(dataItem);\n }\n colIdx = angular.element(elems[i]).index();\n if (angular.element.inArray(colIdx, columns) < 0 ) {\n columns.push(colIdx);\n }\n } else {\n items.push(dataItem);\n }\n }\n\n if (!multiple) {\n locals.dataItem = locals.data = items[0];\n locals.angularDataItem = kendo.proxyModelSetters(locals.dataItem);\n locals.selected = elems[0];\n }\n\n digest(scope, function() {\n handler(scope, locals);\n });\n };\n });\n\n // If no `template` is supplied for Grid columns, provide an Angular\n // template. The reason is that in this way AngularJS will take\n // care to update the view as the data in scope changes.\n defadvice(\"ui.Grid\", \"$angular_init\", function(element, options) {\n this.next();\n if (options.columns) {\n var settings = $.extend({}, kendo.Template, options.templateSettings);\n angular.forEach(options.columns, function(col) {\n if (col.field && !col.template && !col.format && !col.values && (col.encoded === undefined$1 || col.encoded)) {\n col.template = \"#: \" +\n kendo.expr(col.field, settings.paramName) + \"#\";\n }\n });\n }\n });\n\n {\n // mobile/ButtonGroup does not have a \"value\" method, but looks\n // like it would be useful. We provide it here.\n\n defadvice(\"mobile.ui.ButtonGroup\", \"value\", function(mew) {\n var self = this.self;\n if (mew != null) {\n self.select(self.element.children(\"li.km-button\").eq(mew));\n self.trigger(\"change\");\n self.trigger(\"select\", { index: self.selectedIndex });\n }\n return self.selectedIndex;\n });\n\n defadvice(\"mobile.ui.ButtonGroup\", \"_select\", function() {\n this.next();\n this.self.trigger(\"change\");\n });\n }\n\n // mobile directives\n module\n .directive('kendoMobileApplication', function() {\n return {\n terminal: true,\n link: function(scope, element, attrs) {\n createWidget(scope, element, attrs, 'kendoMobileApplication', 'kendoMobileApplication');\n }\n };\n }).directive('kendoMobileView', function() {\n return {\n scope: true,\n link: {\n pre: function(scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileView', 'kendoMobileView');\n },\n\n post: function(scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileDrawer', function() {\n return {\n scope: true,\n link: {\n pre: function(scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileDrawer', 'kendoMobileDrawer');\n },\n\n post: function(scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileModalView', function() {\n return {\n scope: true,\n link: {\n pre: function(scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileModalView', 'kendoMobileModalView');\n },\n\n post: function(scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileSplitView', function() {\n return {\n terminal: true,\n link: {\n pre: function(scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileSplitView', 'kendoMobileSplitView');\n },\n\n post: function(scope, element, attrs) {\n attrs._instance._layout();\n }\n }\n };\n }).directive('kendoMobilePane', function() {\n return {\n terminal: true,\n link: {\n pre: function(scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n createWidget(scope, element, attrs, 'kendoMobilePane', 'kendoMobilePane');\n }\n }\n };\n }).directive('kendoMobileLayout', function() {\n return {\n link: {\n pre: function(scope, element, attrs) {\n createWidget(scope, element, attrs, 'kendoMobileLayout', 'kendoMobileLayout');\n }\n }\n };\n }).directive('kendoMobileActionSheet', function() {\n return {\n restrict: \"A\",\n link: function(scope, element, attrs) {\n element.find(\"a[k-action]\").each(function() {\n $(this).attr(\"data-\" + kendo.ns + \"action\", $(this).attr(\"k-action\"));\n });\n\n createWidget(scope, element, attrs, 'kendoMobileActionSheet', 'kendoMobileActionSheet');\n }\n };\n }).directive('kendoMobilePopOver', function() {\n return {\n terminal: true,\n link: {\n pre: function(scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n createWidget(scope, element, attrs, 'kendoMobilePopOver', 'kendoMobilePopOver');\n }\n }\n };\n }).directive('kendoViewTitle', function() {\n return {\n restrict: \"E\",\n replace: true,\n template: function(element) {\n return \"\" + element.html() + \"\";\n }\n };\n }).directive('kendoMobileHeader', function() {\n return {\n restrict: \"E\",\n link: function(scope, element) {\n element.addClass(\"km-header\").attr(\"data-role\", \"header\");\n }\n };\n }).directive('kendoMobileFooter', function() {\n return {\n restrict: 'E',\n link: function(scope, element) {\n element.addClass(\"km-footer\").attr(\"data-role\", \"footer\");\n }\n };\n }).directive('kendoMobileScrollViewPage', function() {\n return {\n restrict: \"E\",\n replace: true,\n template: function(element) {\n return \"
      \" + element.html() + \"
      \";\n }\n };\n });\n\n angular.forEach(['align', 'icon', 'rel', 'transition', 'actionsheetContext'], function(attr) {\n var kAttr = \"k\" + attr.slice(0, 1).toUpperCase() + attr.slice(1);\n\n module.directive(kAttr, function() {\n return {\n restrict: 'A',\n priority: 2,\n link: function(scope, element, attrs) {\n element.attr(kendo.attr(kendo.toHyphens(attr)), scope.$eval(attrs[kAttr]));\n }\n };\n });\n });\n\n var WIDGET_TEMPLATE_OPTIONS = {\n \"TreeMap\": [ \"Template\" ],\n \"MobileListView\": [ \"HeaderTemplate\", \"Template\" ],\n \"MobileScrollView\": [ \"EmptyTemplate\", \"Template\" ],\n \"Grid\": [ \"AltRowTemplate\", \"DetailTemplate\", \"RowTemplate\" ],\n \"ListView\": [ \"EditTemplate\", \"Template\", \"AltTemplate\" ],\n \"Pager\": [ \"SelectTemplate\", \"LinkTemplate\" ],\n \"PivotGrid\": [ \"ColumnHeaderTemplate\", \"DataCellTemplate\", \"RowHeaderTemplate\" ],\n \"Scheduler\": [\"AllDayEventTemplate\", \"DateHeaderTemplate\", \"EventTemplate\", \"MajorTimeHeaderTemplate\", \"MinorTimeHeaderTemplate\"],\n \"ScrollView\": [ \"Template\" ],\n \"PanelBar\": [ \"Template\" ],\n \"TreeView\": [ \"Template\" ],\n \"Validator\": [ \"ErrorTemplate\" ]\n };\n\n (function() {\n var templateDirectives = {};\n angular.forEach(WIDGET_TEMPLATE_OPTIONS, function(templates, widget) {\n angular.forEach(templates, function(template) {\n if (!templateDirectives[template]) {\n templateDirectives[template] = [ ];\n }\n templateDirectives[template].push(\"?^^kendo\" + widget);\n });\n });\n\n angular.forEach(templateDirectives, function(parents, directive) {\n var templateName = \"k\" + directive;\n var attrName = kendo.toHyphens(templateName);\n\n module.directive(templateName, function() {\n return {\n restrict: \"A\",\n require: parents,\n terminal: true,\n compile: function($element, $attrs) {\n if ($attrs[templateName] !== \"\") {\n return;\n }\n\n $element.removeAttr(attrName);\n var template = $element[0].outerHTML;\n\n return function(scope, element, attrs, controllers) {\n var controller;\n\n while (!controller && controllers.length) {\n controller = controllers.shift();\n }\n\n if (!controller) {\n $log.warn(attrName + \" without a matching parent widget found. It can be one of the following: \" + parents.join(\", \"));\n } else {\n controller.template(templateName, template);\n element.remove();\n }\n };\n }\n };\n });\n });\n\n })();\n\n\n })(window.kendo.jQuery, window.angular);\n\n \"bundle all\";\n\n}));\n"]}