{"version":3,"sources":["kendo.web.js"],"names":["f","define","$","window","undefined","Class","compilePart","part","stringPart","split","join","replace","first","charAt","rest","substring","pad","number","digits","end","length","zeros","getShadows","element","shadow","css","kendo","support","transitions","radius","match","boxShadowRegExp","blur","math","max","left","right","bottom","wrap","autosize","percentage","width","height","percentWidth","percentHeight","wrapper","wrapperStyle","browser","outerWidth","_outerWidth","outerHeight","_outerHeight","parent","hasClass","style","is","show","percentRegExp","test","boxSizing","mozBoxSizing","webkitBoxSizing","addClass","msie","floor","version","zoom","children","deepExtend","destination","i","arguments","deepExtendOne","source","property","propValue","propType","propInit","destProp","ObservableArray","data","LazyObservableArray","DataSource","HierarchicalDataSource","OBJECT","constructor","Array","RegExp","Date","getTime","isFunction","clone","UNDEFINED","testRx","agent","rxs","dflt","rx","hasOwnProperty","toHyphens","str","g","toLowerCase","toCamelCase","strMatch","g1","toUpperCase","getComputedStyles","properties","computedStyle","styles","document","defaultView","getComputedStyle","each","idx","value","getPropertyValue","currentStyle","size","isScrollable","className","indexOf","overflow","scrollLeft","isRtl","webkit","mozila","mozilla","el","scrollWidth","clientWidth","Math","abs","obj","key","result","getOffset","type","positioned","offset","sign","top","pointers","msPointers","pageYOffset","documentElement","scrollTop","pageXOffset","parseEffects","input","effects","this","fx","Element","prepareAnimationOptions","options","duration","reverse","complete","STRING","BOOLEAN","extend","init","noop","teardown","hide","completeCallback","animate","instance","queue","promise","toggleClass","classes","add","htmlEncode","ampRegExp","ltRegExp","gtRegExp","quoteRegExp","aposRegExp","parseOption","option","dashRegExp","getAttribute","ns","numberRegExp","parseFloat","jsonRegExp","jsonFormatRegExp","Function","parseOptions","templateRegExp","template","html","containmentComparer","a","b","contains","resizableWidget","widget","inArray","attr","focusable","isTabIndexNotNaN","nodeName","disabled","href","visible","expr","filters","parents","addBack","filter","kendoJQuery","selector","context","fn","Template","preventDefault","isDefaultPrevented","Observable","argumentNameRegExp","encodeRegExp","escapedCurlyRegExp","curlyRegExp","escapedSharpRegExp","sharpRegExp","directions","eventTarget","wrapExpression","localUrlRe","Widget","DataBoundWidget","ContainerNullObject","MobileWidget","MOUSE_EVENTS","EXCLUDE_BUST_CLICK_SELECTOR","MouseEventNormalizer","eventMap","getEventMap","eventRegEx","on","rootjQuery","animationFrame","animationQueue","cultures","isArray","proxy","JSON","formatRegExp","FUNCTION","NUMBER","NULL","getterCache","setterCache","slice","proto","member","base","that","subclass","apply","prototype","Object","_initOptions","_defaultPrevented","_events","bind","eventName","handlers","one","original","handler","events","eventNames","handlersIsFunction","unbind","push","unshift","trigger","e","sender","call","splice","paramName","useWithBlock","render","compile","parts","settings","argumentName","functionBody","_slotCount","Error","format","quote","string","escapable","lastIndex","c","meta","charCodeAt","toString","holder","k","v","partial","mind","gap","toJSON","rep","isFinite","String","indent","\b","\t","\n","\f","\r","\"","\\","valueOf","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Number","Boolean","stringify","replacer","space","","findCulture","culture","numberFormat","getCulture","current","formatDate","date","calendar","calendars","standard","days","months","patterns","dateFormatRegExp","minutes","getDate","namesAbbr","getDay","names","getMonth","getFullYear","getHours","getMinutes","getSeconds","getMilliseconds","AM","PM","getTimezoneOffset","formatNumber","symbol","isCurrency","isPercent","customPrecision","formatAndPrecision","integer","fraction","integerLength","fractionLength","ch","hasGroup","hasNegativeFormat","decimalIndex","sharpIndex","zeroIndex","hasZero","hasSharp","percentIndex","currencyIndex","startZeroIndex","decimal","POINT","precision","decimals","pattern","literals","negative","replacement","EMPTY","start","name","toLocaleString","standardFormatRegExp","exec","currency","percent","toExponential","round","groupInteger","literalRegExp","quoteChar","literal","PLACEHOLDER","SHARP","ZERO","COMMA","commaRegExp","lastIndexOf","EN","objectToString",",",".","groupSize","abbr","namesShort","d","D","F","G","m","M","s","t","T","u","y","Y","/",":","firstDay","twoDigitYearMax","cultureName","newGroupSize","groupSizes","shift","toFixed","min","fmt","values","index","placeholderFormat","parseInt","_extractFormat","_activeElement","activeElement","_round","includeMargin","outOfRange","designatorPredicate","designator","mapDesignators","designators","map","adjustDST","hours","setHours","lowerArray","array","lowerLocalInfo","localInfo","newLocalInfo","parseExact","count","pmHour","UTC","matches","amDesignators","pmDesignators","hoursOffset","minutesOffset","hasTime","lookAhead","getNumber","rg","substr","valueIdx","getIndexByName","lower","nameLength","subValue","matchLength","matchIdx","checkLiteral","year","month","day","seconds","milliseconds","defaultYear","_lowerDays","_lowerMonths","longTimeZoneRegExp","shortTimeZoneRegExp","isNaN","setFullYear","parseMicrosoftFormatOffset","getDefaultFormats","cultureFormats","formatIdx","FORMATS_SEQUENCE","STANDARD_FORMATS","formats","concat","nonBreakingSpaceRegExp","exponentRegExp","dateRegExp","offsetRegExp","2","3","4","parseDate","tzoffset","timezone","convert","percentSymbol","table","docStyle","transforms","elementProto","mobileOS","documentMode","chrome","_scrollbar","scrollbar","refresh","div","createElement","cssText","innerHTML","body","appendChild","offsetWidth","removeChild","closest","tbodyInnerHtml","touch","HTMLElement","hasHW3D","WebKitCSSMatrix","cssFlexbox","lowPrefix","prefix","hasTransitions","event","devicePixelRatio","screenWidth","screen","availWidth","innerWidth","screenHeight","availHeight","innerHeight","detectOS","ua","minorVersion","os","notAndroidPhone","agentRxs","wp","fire","android","iphone","ipad","meego","webos","blackberry","playbook","windows","tizen","sailfish","ffos","osRxs","ios","flat","formFactorRxs","tablet","browserRxs","omini","omobile","firefox","mobilesafari","ie","navigator","device","majorVersion","flatVersion","cordova","PhoneGap","appMode","standalone","location","protocol","userAgent","wpDevicePixelRatio","hasNativeScrolling","delayedClick","mouseAndTouchPresent","detectBrowser","edge","safari","opera","detectClipboardAccess","commands","copy","queryCommandSupported","cut","paste","clipboard","zoomLevel","ie11WidthCorrection","docEl","scrollHeight","clientHeight","cssBorderSpacing","borderSpacing","cssClass","docElement","eventCapture","addEventListener","placeholder","propertyChangeEvent","types","setAttribute","cssFloat","stableSort","threshold","sorted","field","sort","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","nodeList","querySelectorAll","parentNode","pushState","history","hashChange","customElements","MSPointerEvent","PointerEvent","kineticScrollNeeded","down","up","in","out","enabled","display","dequeue","disable","promiseShim","enable","animatedPromise","kendoStop","clearQueue","gotoEnd","stop","kendoAnimate","kendoAddClass","kendoRemoveClass","kendoToggleClass","toggle","target","touches","originalEvent","changedTouches","elementFromPoint","clientX","clientY","callback","mousedown","mouseup","mousemove","mousecancel","click","resize","members","widgets","_widgetRegisteredCallbacks","ui","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","webComponents","isLocalUrl","url","expression","safe","getter","setter","accessor","get","set","guid","random","id","roleSelector","role","directiveSelector","directives","selectors","triggeredByInput","tagName","onWidgetRegistered","len","logToConsole","message","console","suppressLog","log","dataSource","jQuery","angular","_hasBindingTarget","kendoBindingTarget","_tabindex","TABINDEX","tabindex","removeAttr","setOptions","_setEvents","force","getSize","currentSize","_size","_resize","dimensions","setSize","destroy","removeData","_destroy","_muteAngularRebind","_muteRebind","dataItems","flatView","_angularItems","cmd","elements","items","dataItem","domElement","offsetHeight","notify","initWidget","roles","fullPath","widgetKeyRegExp","widgetKey","nodeType","isEmptyObject","rolesFromNamespaces","namespaces","find","widgetsArray","makeArray","widgetInstance","progress","container","leftRight","webkitCorrection","containerScrollLeft","mask","loading","prependTo","remove","plugin","register","widgetEntry","args","method","nullObject","autoApplyNS","kendoDestroy","view","viewElement","viewHasNativeScrolling","useNativeScrolling","eq","appLevelNativeScrolling","application","themes","views","touchScroller","useNative","Scroller","kendoMobileScroller","suites","onResize","setTimeout","unbindResize","off","attrValue","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","kendoFocusable","setupMouseMute","mouseTrap","bustClick","captureMouse","stopPropagation","muteMouse","clearTimeout","mouseTrapTimeoutID","unMuteMouse","move","cancel","MSPointerEnter","MSPointerLeave","orig","fix","special","delegateType","bindType","handle","ret","related","relatedTarget","handleObj","origType","applyEventMap","pop","search","touchstart","touchend","ruleToDate","rule","targetDay","ourDay","time","cache","getUTCDay","setUTCDate","findRule","utcTime","rules","zone","grep","from","to","findZone","zones","until","zoneRules","zoneAndRule","info","fromOffset","toOffset","fromLocalOffset","toLocalOffset","toLocalDate","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","Sun","Mon","Tue","Wed","Thu","Fri","Sat","setDayOfWeek","dir","setDate","dayOfWeek","firstDayOfMonth","lastDayOfMonth","last","timeOffset","weekInYear","weekStart","toUtcTime","isInTimeRange","msValue","msMin","msMax","MS_PER_DAY","isInDateRange","addDays","setTime","ignoreDST","difference","MS_PER_MINUTE","today","isToday","toInvariantTime","staticDate","nextDay","previousDay","MS_PER_HOUR","stripWhitespace","iterator","child","createNodeIterator","NodeFilter","SHOW_TEXT","node","FILTER_ACCEPT","FILTER_REJECT","nextNode","referenceNode","textContent","trim","childNodes","nodeValue","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","queueAnimation","runNextAnimation","parseQueryStringParams","queryString","params","paramParts","decodeURIComponent","elementUnderCursor","x","client","wheelDeltaY","jQueryEvent","delta","deltaY","wheelDelta","detail","axis","VERTICAL_AXIS","throttle","delay","timeout","throttled","lastExecTime","elapsed","caret","rangeElement","rangeDuplicated","selectionStart","selectionEnd","isPosition","focus","setSelectionRange","selection","createTextRange","collapse","moveStart","moveEnd","select","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","postToProxy","dataURI","fileName","proxyURL","proxyTarget","action","contentType","base64","appendTo","submit","saveAsBlob","blob","atob","Uint8Array","Blob","buffer","msSaveBlob","saveAsDataURI","URL","createObjectURL","fileSaver","download","createEvent","initMouseEvent","dispatchEvent","revokeObjectURL","downloadAttribute","saveAs","save","forceProxy","proxyModelSetters","observable","forEach","defineProperty","dirty","amd","a1","a2","a3","absoluteURL","path","pathPrefix","regEx","host","hashDelimiter","bang","locationHash","stripRoot","root","fixHash","fixBang","CHANGE","BACK","SAME","CHECK_URL_INTERVAL","BROKEN_BACK_NAV","hashStrip","HistoryAdapter","back","forward","replaceLocation","PushStateAdapter","navigate","title","replaceState","normalize","pathname","change","normalizeCurrent","fixedUrl","hash","hashBang","HashAdapter","_id","_interval","setInterval","clearInterval","History","_started","adapter","createAdapter","historyLength","locations","silent","_navigate","backCalled","decode","_checkUrl","newLength","navigatingInExisting","prev","backButtonPressed","namedParamReplace","optional","routeToRegExp","route","ignoreCase","escapeRegExp","optionalParam","namedParam","splatParam","stripUrl","INIT","ROUTE_MISSING","Route","_callback","queryStringParams","_back","worksWith","Router","routes","_urlChangedProxy","_sameProxy","_backProxy","initEventObject","sameProxy","_same","backProxy","urlChangedProxy","_urlChanged","same","toOdataFilter","useOdataFour","operator","logic","odataFilters","odataFiltersVersionFour","stripMetadata","neq","gt","gte","lt","lte","doesnotcontain","endswith","startswith","isnull","isnotnull","isempty","isnotempty","mappers","pageSize","page","useVersionFour","$filter","orderby","order","$orderby","skip","$skip","take","$top","defaultDataType","read","dataType","schemas","odata","results","total","transports","jsonp","update","create","parameterMap","$inlinecount","$format","odata-v4","$count","isPlainObject","XmlDataReader","idField","xmlParse","model","parse","errors","serialize","modelBase","Model","fields","xpathToMember","modelInstance","evaluate","record","_parse","xml","parseDOM","parsedNode","attribute","attributes","attributeCount","firstChild","nextSibling","intermediateResult","tree","parseXML","raw","readers","eventHandler","_notifyChange","equal","xtype","ytype","getFieldByName","fieldName","Query","normalizeSort","descriptor","descriptors","normalizeOperator","operatorMap","normalizeFilter","compareDescriptor","f1","f2","normalizeDescriptor","fieldComparer","compareFilters","expr1","expr2","filters1","filters2","normalizeAggregate","expressions","normalizeGroup","aggregates","groupValueComparer","calculateAggregate","accumulator","item","state","aggr","functionName","aggregate","functions","isNumber","val","isDate","serializeRecords","getters","originalFieldNames","fieldNames","originalName","setters","convertRecords","convertGroup","hasSubgroups","wrapDataAccess","originalFunction","converter","mergeGroups","dest","group","flattenGroups","itemIndex","at","wrapGroupItems","eachGroupItems","func","replaceInRanges","ranges","replaceInRange","replaceWithObservable","serverGrouping","viewIndex","removeModel","uid","indexOfPristineModel","_defaultId","indexOfModel","comparer","fieldNameFromModel","convertFilterDescriptorsField","convertDescriptorsField","inferSelect","firstField","secondField","optgroup","label","specified","inferTable","fieldIndex","cells","cell","empty","tbody","tBodies","rows","fieldCount","dataMethod","_data","_attachBubbleHandlers","inferList","list","collection","textChild","textField","urlField","spriteCssClassField","imageUrlField","_loaded","prop","hasChildren","ObservableObject","parsers","defaultValues","Comparer","StableComparer","operators","LocalTransport","RemoteTransport","Cache","DataReader","Transport","Node","Buffer","BatchBuffer","ajax","CREATE","READ","UPDATE","DESTROY","SYNC","GET","ERROR","REQUESTSTART","PROGRESS","REQUESTEND","crud","identity","o","wrapAll","json","object","howMany","reduce","reduceRight","every","some","Symbol","_parent","_handlers","shouldSerialize","_set","paths","composite","isSetPrevented","isObservableArray","isDataSource","boolean","default","defaults","_initializers","editable","initiator","accept","isNew","functionFields","nullable","defaultValue","compare","localeCompare","combine","comparers","asc","valueA","valueB","__position","desc","textOp","impl","ignore","op","getMatchRegexp","esc","doesnotstartwith","n","doesnotendwith","doesnotmatch","filterExpr","and","or","fieldFunctions","operatorFunctions","==","equals","isequalto","equalto","!=","ne","notequals","isnotequalto","notequalto","notequal","<","islessthan","lessthan","less","<=","le","islessthanorequalto","lessthanequal",">","isgreaterthan","greaterthan","greater",">=","isgreaterthanorequalto","greaterthanequal","ge","notsubstringof","toArray","range","orderBy","orderByDescending","compiled","predicate","allData","groupBy","currentValue","_sortForGrouping","groupValue","sum","average","process","query","filterCallback","success","setup","error","parameters","operation","_store","clear","store","inmemory","schema","dataFunction","groupsFunction","serializeFunction","serializeGetters","_dataAccessFunction","groups","fromName","_map","_prefetch","_pristineData","_ranges","_view","_pristineTotal","_destroyed","_pageSize","_page","_sort","_filter","_group","_aggregate","_total","_shouldDetachObservableParents","transport","pushCreate","_pushCreate","pushUpdate","_pushUpdate","pushDestroy","_pushDestroy","offlineStorage","_storage","getItem","localStorage","setItem","reader","_detachObservableParents","_observe","_online","serverSorting","serverPaging","serverFiltering","serverAggregates","batch","online","sync","Deferred","resolve","offlineData","_isServerGrouped","_push","_readData","_flatData","getByUid","_storeData","_addRange","_process","_observeView","insert","_createNewModel","_wrapInEmptyGroup","pushed","autoSync","pristine","_updatePristineForModel","_removeItems","destroyed","found","_eachItem","_removePristineForModel","hasGroups","_removeModelFromRanges","_updateRangesLength","created","updated","promises","_sendSubmit","_send","when","then","_accept","_change","cancelChanges","_cancelModel","_markOfflineUpdatesAsDirty","__state__","hasChanges","models","response","serverGroup","_handleCustomErrors","_executeOnPristineForModel","_eachPristineItem","_pristineForModel","_submit","status","reject","deferred","_promise","converted","_params","_queueRequest","isPrevented","_dequeueRequest","_readAggregates","itemIds","_aggregateResult","updatePristine","_skip","timestamp","xhr","errorThrown","_requestInProgress","_pending","_shouldWrap","arrayType","_changeHandler","_updateTotalForAction","_calculateAggregates","_take","_queryProcess","_mergeState","_currentRangeStart","remote","fetch","_query","next","totalPages","_emptyAggregates","ceil","inRange","_findRange","lastRange","firstItemUid","enableRequestsInProgress","_skipRequestsInProgress","_timeStamp","pageSkip","paging","sorting","filtering","_currentRequestTimeStamp","_rangeExists","prefetch","skipIdx","takeIdx","startIndex","endIndex","rangeData","rangeEnd","processed","flatData","_mergeGroups","prevGroup","temp","currentRangeStart","_prefetchSuccessHandler","_timeout","_multiplePrefetch","rangeLength","startOffset","transportOptions","childrenField","childrenOptions","_childrenOptions","_initChildren","_updateChildrenField","append","loaded","level","_childrenLoaded","load","_find","_dataSource","viewSize","disablePrefetch","_prefetching","_reset","_syncWithDataSource","setViewSize","_recalculate","itemPresent","useRanges","dataOffset","prefetchThreshold","midPageThreshold","nextMidRange","nextPageThreshold","nextFullRange","pullBackThreshold","previousMidRange","previousFullRange","_goToRange","nextRange","syncDataSource","prefetchOffset","expanding","_expanding","_syncPending","_firstItemUid","batchSize","batchBuffer","endreached","prefetching","prefetched","reset","dataSourceBinding","bindingName","Binder","bindings","_dataBinding","dataBinding","_dataBound","dataBound","_itemChange","itemChange","bindElement","_ns","_parents","removedItems","unbindElementTree","all","addedItems","hds","addedDataItems","multiselect","Select","MultiSelect","retrievePrimitiveValues","dataValueField","bindingTargetForRole","WidgetBindingTarget","parseBindings","token","colonIndex","keyValueRegExp","createBindings","binding","childrenCopy","deep","unbindElement","whiteSpaceRegExp","valueField","valueUpdate","valuePrimitive","autoBind","BindingTarget","Binding","TemplateBinding","EventBinding","dom","destroyWidget","bindingTarget","deleteExpando","removeAttribute","destroyWidgets","unbindElementChildren","namespace","TypedBinder","arraySplice","binders","VALUE","SOURCE","EVENTS","CHECKED","CSS","dependencies","_access","dependency","currentSource","parsedValue","_parseValue","removeClass","readonly","dataFormat","invisible","_initChange","cloneNode","reference","insertBefore","checked","selectedIndex","selected","valueIndex","sourceValue","optionIndex","optionValue","check","_valueIsObservableObject","_valueIsObservableArray","_source","valueLength","sourceItem","dataTextField","isObservableObject","cascadeFrom","listView","bound","_preselect","gantt","j","old","removeIndex","newValue","oldValues","newValues","selectedValue","_isBound","scheduler","arr","addLength","oldLength","shifted","shiftedLength","toDestroy","hasValue","hasSource","hasEvents","hasChecked","hasCss","widgetBinding","specificBinders","applyBinding","binder","observableHierarchy","recursiveRead","parseInteger","parseCSS","propertyName","acc","strip3DTransforms","transformProps","transform2d","normalizeCSS","lowerKey","isTransformed","transformation","cssValues","TRANSFORM","animationProperty","transform","computed","NONE","matrix3dRegExp","translateXRegExp","atan2","capitalize","word","createEffect","definition","effectClass","Effect","direction","opt1","opt2","opt3","theDirection","createToggleEffect","defaultStart","defaultEnd","IN_OUT","startValue","_startValue","endValue","_endValue","shouldHide","_shouldHide","prepare","_direction","startDataValue","startDataValueIsSet","_reverse","clipInHalf","vertical","HEIGHT","WIDTH","CLIPS","curProxy","EffectSet","FOUR_DIRECTIONS","TRANSFER_START_STATE","ROTATIONS","RESTORE_OVERFLOW","IGNORE_TRANSITION_EVENT_SELECTOR","Animation","Transition","scaleProperties","scale","scalex","scaley","scale3d","translateProperties","translate","translatex","translatey","translate3d","hasZoom","cssParamsRegExp","oldEffectsRegExp","singleEffectRegExp","unitRegExp","transform2units","rotate","skew","cssPrefix","BLANK","PX","AUTO","HIDDEN","ORIGIN","ABORT_ID","OVERFLOW","TRANSLATE","POSITION","COMPLETE_CALLBACK","TRANSITION","BACKFACE","PERSPECTIVE","DEFAULT_PERSPECTIVE","TRANSFORM_PERSPECTIVE","transition","modifier","horizontal","stopQueue","transformValue","step","elem","now","cur","exclusive","ease","mirror","redirectedEffect","resolved","$1","$2","effect","effectBody","timeoutID","stopTransitionCalled","stopTransition","oldKeys","speeds","merge","unique","taskKeys","retainPosition","restore","run","jdx","childrenLength","effectName","setReverse","addRestoreProperties","restoreCallback","effectSet","parsedEffects","useTransition","multiple","single","position","isFixed","originalPosition","dX","dY","marginLeft","marginTop","_additionalEffects","play","additional","_duration","compositeRun","_complete","divisor","tmp","previous","previousDivisor","slideIn","margin","origin","setLength","realLength","outerBox","box","innerBox","currentScale","fillScale","transformOrigin","_container","rotation","zIndex","_clipInHalf","clip","face","_face","temporary","opacity","reverseDirection","faceClone","backClone","staticPage","turningPage","transformStyle","_before","_after","transitionClass","_previous","_transitionClass","beforeTransition","afterTransition","_both","_element","_containerClass","containerClass","completeProxy","isAbsolute","originalOverflow","both","_tickProxy","_tick","tick","done","onEnd","onCancel","timePassed","startDate","moveTo","movable","initial","_easeProxy","moveAxis","easeOutExpo","pow","easeOutBack","inner","outer","fitScale","parseTransition","transitionRegExp","SCRIPT","SHOW","HIDE","TRANSITION_START","TRANSITION_END","ATTACH","DETACH","sizzleErrorRegExp","View","content","_wrap","_evalTemplate","evalTemplate","_fragments","notInitialized","_createElement","_eachFragment","ViewClone","triggerBeforeShow","triggerBeforeHide","showStart","showEnd","hideEnd","detach","fragments","methodName","getElementById","contents","replaceWith","Layout","containers","_createContainer","showIn","ViewContainer","Fragment","attach","running","after","locationID","previousEntry","theTransition","transitionData","NullNode","TextNode","HtmlNode","insertHtml","HTML_CONTAINER","attrs","Tree","NULL_NODE","cached","cachedChildren","cachedLength","replaceChild","syncAttributes","removeAttributes","cachedAttr","cachedValue","setStyle","removeStyle","cachedStyle","createTextNode","nodes","lastChild","numChar","colIndex","letter","fromCharCode","ref","rowIndex","$ref","filterRowIndex","frozenRows","freezePane","rowSplit","toWidth","px","toHeight","stripFunnyChars","convertColor","color","$0","borderStyle","alias","borderSideTemplate","borderTemplate","border","inflate","mergedCells","ctx","rowData","rowsByIndex","indexRows","row","sortByIndex","fillCells","rowSpan","colSpan","cellIndex","ri","nextRow","cellData","EMPTY_CELL","insertCell","spanCell","insertCellAt","appendCell","borderTop","borderRight","borderBottom","borderLeft","spreadsheetFilters","SPREADSHEET_FILTERS","columns","generators","custom","SPREADSHEET_CUSTOM_FILTER","dynamic","SPREADSHEET_DYNAMIC_FILTER","SPREADSHEET_TOP_FILTER","SPREADSHEET_VALUE_FILTER","RELS","CORE","APP","CONTENT_TYPES","WORKBOOK","WORKSHEET","WORKBOOK_RELS","WORKSHEET_RELS","SHARED_STRINGS","STYLES","DATE_EPOCH","Worksheet","sharedStrings","borders","_strings","_styles","_borders","_validations","relsToXML","hyperlinks","toXML","autoFilter","validations","defaultCellStyleId","mergeCells","_readCells","defaultCellStyle","_lookupStyle","frozenColumns","colSplit","showGridLines","_lookupString","indexes","uniqueCount","_lookupBorder","_cell","defStyle","column","displayValue","cellName","borderId","autoWidth","validation","_addValidation","formula","showErrorMessage","formula1","formula2","MAP_EXCEL_TYPE","MAP_EXCEL_OPERATOR","comparerType","allowBlank","allowNulls","showDropDown","showButton","messageTemplate","errorTitle","titleTemplate","sqref","greaterThanOrEqualTo","lessThanOrEqualTo","defaultFormats","General","0","0.00","#,##0","#,##0.00","0%","0.00%","0.00E+00","# ?/?","# ??/??","mm-dd-yy","d-mmm-yy","d-mmm","mmm-yy","h:mm AM/PM","h:mm:ss AM/PM","h:mm","h:mm:ss","m/d/yy h:mm","#,##0 ;(#,##0)","#,##0 ;[Red](#,##0)","#,##0.00;(#,##0.00)","#,##0.00;[Red](#,##0.00)","mm:ss","[h]:mm:ss","mmss.0","##0.0E+0","@","[$-404]e/m/d","m/d/yy","t0","t0.00","t#,##0","t#,##0.00","t0%","t0.00%","t# ?/?","t# ??/??","Workbook","_sheets","sheets","toDataURL","zip","docProps","sheetCount","rels","xl","xlRels","sheetIds","worksheets","sheetRels","sheet","sheetName","relsXml","hasFont","fonts","fills","JSZip","folder","file","creator","lastModifiedBy","modified","filterNames","localSheetId","userNames","def","localName","hidden","parseJSON","underline","bold","italic","fontFamily","fontSize","background","fontId","fillId","textAlign","verticalAlign","numFmtId","generate","compression","customOperator","customValue","dynamicFilterType","quarter1","quarter2","quarter3","quarter4","january","february","march","april","may","june","july","august","september","october","november","december","ooxml","ExcelExporter","_trimColumns","allColumns","_leafColumns","_prepareColumn","allPages","workbook","_columns","_rows","_freezePane","groupHeaderTemplate","groupFooterTemplate","footerTemplate","filterable","depth","_depth","_dataRow","li","dataCells","ci","_hierarchical","_dataRows","_footer","footer","_isColumnVisible","_visibleColumns","_headerRow","headers","_prependHeaderRows","headerRows","_prepareHeaderRows","parentCell","parentRow","childRow","totalColSpan","_headerDepth","locked","hierarchy","ExcelMixin","excel","saveAsExcel","exporter","book","hub","signalr","fail","callbacks","_crud","server","createPromise","promiseAll","util","hex","hue2rgb","p","q","parseColor","BaseColor","namedColorRegexp","RGB","namedColors","Bytes","HSV","HSL","Color","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgrey","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","toHSV","toRGB","toHex","toBytes","toCss","toCssRgba","rgb","r","toDisplay","diff","other","c1","c2","NaN","sqrt","h","toHSL","l","resolvedColor","formatRegex","processor","channels","this$1","resolveColor","re","normalizeByte","padDigit","brightness","percBrightness","fromBytes","fromRGB","fromHSV","fromHSL","objectKey","hashKey","zeroSize","baseline","measureText","measureBox","TextMetrics","measure","LRUCache","DEFAULT_OPTIONS","defaultMeasureBox","_length","put","entry","_head","_tail","newer","older","baselineMarkerSize","_cache","styleKey","cacheKey","cachedResult","baselineMarker","_baselineMarker","offsetTop","marker","second","arabicToRoman","roman","defined","definitionId","defId","deg","radians","DEG_TO_RAD","encodeUTF8","output","encodeBase64","chr1","chr2","chr3","enc1","enc2","enc3","enc4","utfInput","KEY_STR","eventCoordinates","pageX","pageY","eventElement","initialTouch","isTransparent","limitValue","mergeSort","cmp","ai","bi","rad","degrees","power","valueOrDefault","bindEvents","elementOffset","getBoundingClientRect","clientTop","clientLeft","elementStyles","stylesArray","getPixels","elementSize","size$1","unbindEvents","removeEventListener","setAccessor","geometryChange","getAccessor","defineAccessors","capitalized","toMatrix","matrix","Transformation","ellipseExtremeAngles","center","ry","extremeX","extremeY","geometryAccessor","_observerField","defineGeometryAccessors","close","tolerance","PRECISION","closeOrLess","lineIntersection","p0","p1","p2","p3","s1x","s2x","s1y","s2y","nx","ny","Point","elipseAngle","swipe","alpha","endAngle","calculateAngle","cx","cy","cos","sin","normalizeArcParameters","cx1","cy1","x21","y21","rx2","ry2","yk2","x1","y1","x2","y2","largeArc","pow$1","startAngle","bboxStartAngle","angle","pointAccessor","definePointAccessors","isOutOfEndPoint","endPoint","controlPoint","point","rotatedPoint","transformCopy","calculateCurveAt","points","t1","toCubicPolynomial","numberSign","solveQuadraticEquation","squareRoot","solveCubicEquation","Q","b3a","y3","z1","z2","ComplexNumber","nthRoot","multiplyConstant","negate","multiply","isReal","real","hasRootsInRange","rootField","intersection","polynomial","roots","curveIntersectionsCount","bbox","rayIntersection","intersectsRay","bottomRight","lineIntersectionsCount","intersects","minX","maxX","minY","maxY","arrayLimits","MAX_NUM","MIN_NUM","elementsBoundingBox","applyTransform","boundingBox","elementBoundingBox","rawBBox","Rect","union","elementsClippedBoundingBox","clippedBBox","translateToPoint","transofrm","alignStart","rect","align","sizeField","alignElements","alignment","vAlign","stackElements","stackAxis","otherAxis","previousBBox","createStackElements","stack","vStack","getStacks","maxSize","stacks","stackSize","addElementToStack","wrapElements","startElement","elementIdx","vWrap","fit","rectSize","transform$$1","optionsAccessor","defineOptionsAccessors","swing","PI","linear","easeOutElastic","asin","toLineParamaters","isVertical","insertPosition","reflectionPoint","scaleCopy","quadraticToCubicControlPoints","scaledPoint","controlOut","translateWith","third","controlIn","parseParameters","SPLIT_REGEX","renderAttr","renderAllAttr","renderStyle","isDefinition","baseUrl","getElementsByTagName","hashIndex","refUrl","alignToScreen","ctm","getScreenCTM","decodeEntities","innerText","exportGroup","exportRoot","svg","RootNode","rootGroup","getOrigin","Group","SVG_NS","renderPath","segment","anchor","prevSeg","prevOut","segments","bezierCurveTo","lineTo","closed","closePath","zIndexComparer","_zIndex","addGradientStops","gradient","stops","addColorStop","exportImage","surfaceOptions","surface","cors","Surface$3","suspendTracking","draw","image","exportSVG","slice$1","thing","cls","classList","setCSS","getXY","drawDOM","doOne","pos","setTransform","nodeInfo","_clipbox","_matrix","Matrix","unit","_stackingContext","_avoidLinks","avoidLinks","renderElement","makeTemplate","template$$1","firstElementChild","handlePageBreaks","forceBreak","pageWidth","pageHeight","doPageBreak","whenImagesAreActuallyLoaded","pages","splitElement","makePage","pageNum","cacheImages","keepTogether","adjust","tag","isFirst","fall","bottomPadding","bottomBorder","saveAdjust","breakAtElement","fallsOnMargin","splitText","firstInParent","colgroup","thead","grid","gridHead","querySelector","repeatHeaders","doc","setStartBefore","setEndBefore","extractContents","preventBulletOnListItem","padding","pageClassName","available","nextnode","selectNodeContents","findEOP","setEnd","endOffset","ownerDocument","_destructive","cloneNodes","tfoot","ol","paddingLeft","paddingRight","beforePageBreak","pdf","defineFont","getFontFaces","forcePageBreak","hasPaperSize","paperSize","paperOptions","getPaperOptions","hasMargin","multiPage","_ignoreMargin","canceled","doStylesheet","ss","cssRules","ex","addRules","findFonts","font","src","splitProperty","getFontURL","styleSheet","family","addRule","styleSheets","getCounter","getAllCounters","getPrototypeOf","incCounter","inc","_root","resetCounter","doCounters","parseColor$1","pending","img","images","onload","onerror","IMAGE_CACHE","urls","dive","parseBackgroundImage","bg","Image","crossOrigin","alphaNumeral","pushNodeInfo","decoration","createsStackingContext","popNodeInfo","updateClipbox","intersect","emptyClipbox","cb","pseudoElt","pleaseSetPropertyValue","important","setProperty","getBorder","side","saveStyle","getBorderRadius","sanitizeRadius","getContentBox","wt","wr","wb","wl","getTransform","radiansToDegrees","parseAngle","num","shape","setClipping","clipPath","addArcToPath","Arc$2","curvePoints","curveTo","adjustBorderRadiusForBox","rTL","rTR","rBR","rBL","tl_x","tl_y","tr_x","tr_y","br_x","br_y","bl_x","bl_y","tl","tr","br","bl","elementRoundBox","bt","bb","pt","pr","pb","pl","roundBox","rTL0","rTR0","rBR0","rBL0","Path","fill","stroke","radiusX","radiusY","formatCounter","evalPseudoElementContent","displayCounter","separator","getCssText","_renderWithPseudoElements","pseudo","kind","place","psel","KENDO_PSEUDO_ELEMENT","fake","saveClass","_renderElement","adjustBoxes","boxes","tableBorderLeft","tableBorderTop","tableBox","firstCell","firstCellBox","drawEdge","Wtop","Wleft","Wright","rl","rr","drawRoundCorner","anticlockwise","drawBackground","_pdfLink","backgroundColor","backgroundImage","drawOneBackground","backgroundRepeat","backgroundPosition","backgroundOrigin","backgroundSize","drawBackgroundImage","img_width","img_height","renderBG","rewX","rewY","repeatX","aspect_ratio","orgBox","Image$1","gradientRenderer","drawBullet","_drawBullet","bullet","listStylePosition","elementIndex","listStyleType","lineHeight","disc","circle","square","drawOneBox","isLast","inv","shouldDrawLeft","shouldDrawRight","innerbox","getClientRects","clipit","isFormField","maybeRenderWidget","renderContents","pxlen","scaledAngle","implicit","atan","fromRect","LinearGradient","userSpace","visual","wrap$$1","exportDOMVisual","exportVisual","renderImage","zIndexSort","sa","sb","za","zb","pa","getSelectedOption","selectedOptions","renderCheckbox","Circle","Circle$2","renderFormField","whiteSpace","blocks","floats","inline","floating","renderText","actuallyGetRangeBoundingRect","rectangles","Infinity","prevLineBottom","doChunk","cc","code","origStart","setStart","isJustified","findEOL","eol","estimateLineLength","drawText","getFontHeight","TextRect","decorate","line","ypos","lineThrough","overline","align$$1","textOverflow","saveTextOverflow","hasDecoration","selectNode","groupInStackingContext","main","_dom_zIndex","invert","counterIncrement","visibility","counterReset","mmul","multiplyCopy","b1","d1","e1","b2","d2","e2","kendoDrawing","kendoDrawingUtil","kendoUtil","ObserversMixin","OptionsStore","Size","Element$1","PI_DIV_2","GRADIENT","Paintable","IDENTITY_MATRIX_HASH","Measurable","DEFAULT_STROKE","MAX_INTERVAL","ElementsArray","GeometryElementsArray","Segment","DEFAULT_STROKE$1","Arc","MultiPath","DEFAULT_FONT","DEFAULT_FILL","Text","Traversable","Rect$2","StopsArray","GradientStop","Gradient","RadialGradient","easingFunctions","AnimationFactory","ShapeMap","SEGMENT_REGEX","MOVE","CLOSE","PathParser","SurfaceFactory","Surface","BaseNode","NODE_MAP","renderSVG","testFragment","testContainer","hasParser","renderSVG$1","DefinitionMap","GradientStopNode","GradientNode","LinearGradientNode","RadialGradientNode","ClipNode","DefinitionNode","Surface$1","GroupNode","DASH_ARRAYS","SOLID","BUTT","ATTRIBUTE_MAP","SPACE","PathNode","ArcNode","CircleNode","RectNode","ImageNode","MultiPathNode","geometry","NODE_MAP$2","Node$2","GroupNode$2","FRAME_DELAY","RootNode$2","QuadRoot","QuadNode","ROOT_SIZE","LEVEL_STEP","MAX_LEVEL","ShapesQuadTree","PathNode$2","ArcNode$2","CircleNode$2","RectNode$2","ImageNode$2","TextNode$2","MultiPathNode$2","canvas","observers","_observers","addObserver","removeObserver","observer","_suspended","optionsChange","suspend","resume","1","10","100","20","200","30","300","40","400","5","50","500","6","60","600","7","70","700","8","80","800","9","90","900","1000","MAX_VALUE","parentObj","_clear","wrapped","det","scaleX","scaleY","IDENTITY","originPoint","distanceTo","dx","dy","doRound","arg0","arg1","arguments$1","minPoint","maxPoint","defineProperties","setOrigin","topLeft","topRight","bottomLeft","fromPoints","expand","expandCopy","containsPoint","_isOnPath","rectOuter","rectInner","rect1","rect2","_optionsChange","parentTransform","parentMatrix","currentTransform","elementTransform","elementMatrix","combinedMatrix","_clippedBBox","transformedPoint","_hasFill","_containsPoint","_hasStroke","setCenter","setRadius","getCenter","pointAt","_pointAt","currentPointX","currentPointY","currentPoint","extremeAngles","inCircle","pointDistance","newFill","strokeWidth","matrixHash","_bboxCache","_matrixHash","_bbox","_geometry","radian","nextAngle","interval","_arcInterval","intervalAngle","subIntervalsCount","subIntervalAngle","currentAngle","_intervalCurvePoints","cp1","cp2","currentAngleX","currentAngleY","oldStart","p1Derivative","_derivativeAt","p2Derivative","inAngleRange","distance","angleRad","pointRadius","startPoint","arcParameters","_splice","_add","_remove","_clearObserver","_setObserver","cNumber","addConstant","rad$$1","nthR","bboxTo","toSegment","segmentAnchor","toSegmentAnchor","_curveBoundingBox","_lineBoundingBox","extremesX","_curveExtremesFor","extremesY","xLimits","yLimits","extremes","_curveExtremes","x3","x4","t2","_intersectionsTo","intersectionsCount","_isOnCurveTo","endSegment","p4","rotatedPoints","_isOnLineTo","_isOnPathTo","isOnPath","lineJoin","lastSegment","arc","_addArcSegments","arcTo","pathWidth","segmentBox","fromArc","toPath","metrics","_rect","traverse","childrenChange","_reparent","insertAt","removeAt","newParent","alignContent","justifyContent","alignItems","spacing","orientation","lineSpacing","_fieldMap","_initMap","fieldMap","groupsSizeField","groupAxis","groupsAxis","reflow","groupsSize","ref$1","groupOrigin","elementOrigin","groupStart","elementStart","groupBox","groupIdx","scaledStart","scaledSize","newStart","_initGroups","lineSize","bboxes","_newGroup","addGroup","_addToGroup","arg","_createStops","_userSpace","addStop","removeStop","_radius","_fallbackFill","fallbackFill","easing","finish","abort","loop","wallTime","easingPosition","_stopped","_items","isRelative","lastControlIn","previousCommand","cubicControlPoints","multiPath","command","preferred","_click","_handler","_mouseenter","_mouseleave","_mousemove","_visual","_enableTracking","domNode","_kendoNode","parentElement","srcElement","_suspendedTracking","resumeTracking","_elementOffset","paddingTop","_surfacePoint","coord","observe","removeSelf","invalidate","DOMParser","namespaceURI","parser","chartDoc","parseFromString","importedDoc","adoptNode","definitions","clearDefinitions","childNode","createDefinitions","attachTo","setElement","childElement","renderChildren","updateDefinition","allAttr","allCss","mapTransform","renderTransform","transformChange","mapStyle","cursor","renderOpacity","hasDefinitions","definitionChange","renderDefinitions","mapDefinitions","renderOffset","loadStops","stopNode","mapCoordinates","renderCoordinates","mapSpace","definitionMap","addDefinitions","removeDefinitions","createDefinition","addDefinition","mapItem","removeDefinition","defs","_template","_rootElement","mouseover","mouseout","viewBox","_offset","implementation","hasFeature","dot","dash","longdash","dashdot","longdashdot","longdashdotdot","fill.opacity","stroke.color","stroke.width","stroke.opacity","renderData","mapFill","mapStroke","printPath","currentType","segmentType","printPoints","segmentStart","segmentEnd","renderLinecap","dashType","renderDashType","renderStroke","dashArray","lineCap","renderFill","mapPosition","mapSource","renderPosition","encode","renderSource","setY","renderContent","initClip","clearClip","setClip","beginPath","loadElements","setOpacity","globalAlpha","opactity","renderTo","getContext","invalidateHandler","_invalidate","clearRect","shapes","_quadNode","pointShapes","inBounds","nodeRect","nodeBottomRight","inserted","halfWidth","halfHeight","initRoots","rootMap","rootElements","pointShape","sectorRoot","assignZindex","levelWeight","bboxChange","_insertShape","elementsArray","_insert","sectors","getSectors","inRoot","bottomX","bottomY","_mouseTrackHandler","_trackMouse","_searchTree","rootElement","loadingStates","currentShape","_currentShape","renderPoints","setLineDash","setLineCap","setLineJoin","setFill","setStroke","hasFill","setGradientFill","fillStyle","createLinearGradient","createRadialGradient","strokeStyle","lineWidth","mozDash","webkitLineDash","onLoad","onError","drawImage","fillText","strokeText","_pdfRect","$el","$clone","canvases","canvas$$1","skip_ws","tok_whitespace","read_stop","tok_length","tok_percent","read_linear_gradient","propName","to1","to2","tok_popen","tok_angle","tok_comma","tok_keyword","tok_pclose","read_url","tok_content","tok","cache1","tok_linear_gradient","tok_url","cache2","looking_at","last$$1","in_paren","in_string","OPEN","DEACTIVATE","ACTIVATE","CENTER","TOP","BOTTOM","ABSOLUTE","BODY","LOCATION","VISIBLE","EFFECTS","ACTIVE","ACTIVEBORDER","ACTIVEBORDERREGEXP","ACTIVECHILDREN","MOUSEDOWN","DOCUMENT_ELEMENT","WINDOW","SCROLL","NS","Popup","parentPopup","collisions","collision","downEvent","_hovered","animation","open","_activated","_trigger","_animationClose","_mousedownProxy","_mousedown","_resizeProxy","toggleTarget","toggleEvent","viewport","copyAnchorStyles","modal","adjustSize","_hideDirClass","_closing","_toggleResize","fixed","flipped","_position","_openAnimation","_showDirClass","dirClass","skipEffects","openEffects","closeEffects","popup","ev","_resizeTimeout","_scrollableParents","_fit","viewPortSize","_flip","anchorSize","boxSize","parentsUntil","siblingContainer","parentZIndex","viewportOffset","viewportWidth","viewportHeight","anchorParent","offsets","flipPos","elementHeight","wrapperHeight","isWindow","origins","positions","siblings","_align","offsetParent","appendToOffset","verticalOrigin","horizontalOrigin","verticalPosition","horizontalPosition","anchorOffset","anchorWidth","anchorHeight","utils","TOOLTIP_TEMPLATE","TOOLTIP_CLOSE_TEMPLATE","SurfaceTooltip","_tooltipOptions","popupOptions","_openPopupHandler","_openPopup","_bindEvents","showOn","autoHide","hideDelay","showAfter","_showHandler","_showEvent","_surfaceLeaveHandler","_surfaceLeave","_mouseleaveHandler","_mousemoveHandler","_hideClick","getPopup","shared","_tooltipShape","tooltip","_updateContent","tooltipOffset","_instance","surfaceOffset","_show","_current","_showTimeout","_autoHide","_measure","_closeButton","_popupRelatedTarget","DrawingSurface","_triggerInstanceHandler","_triggerInstanceEvent","_bindHandler","hideTooltip","_tooltip","showTooltip","resolveRules","resolvers","validator","ruleResolvers","numberOfDecimalDigits","parseHtml","parseHTML","searchForMessageContainer","invalidMsgRegExp","Validator","INVALIDMSG","INVALIDINPUT","VALIDINPUT","emailRegExp","urlRegExp","INPUTSELECTOR","CHECKBOXSELECTOR","NUMBERINPUTSELECTOR","BLUR","NAME","FORM","NOVALIDATE","VALIDATE","VALIDATE_INPUT","patternMatcher","matcher","hasAttribute","validateAttributeSelector","_errorTemplate","errorTemplate","_inputSelector","_checkboxSelector","_errors","_attachEvents","_isValidated","required","email","dateCompare","checkbox","raise","validateOnBlur","validate","stopImmediatePropagation","_checkElement","validateInput","inputs","invalid","isValid","valid","lbl","messageText","wasValid","messageLabel","lblId","_checkValidity","_findMessageContainer","_extractMessage","_decorateMessageContainer","insertAfter","hideMessages","locators","messageLocators","locate","ruleKey","customMessage","touchDelta","touch1","touch2","getTouches","currentTarget","api","identifier","pointerId","withEachUpEvent","downEvents","OS","invalidZeroEvents","DEFAULT_MIN_HOLD","DEFAULT_THRESHOLD","PRESS","HOLD","SELECT","START","CANCEL","TAP","RELEASE","GESTURESTART","GESTURECHANGE","GESTUREEND","GESTURETAP","THRESHOLD","mouse","pointer","ENABLE_GLOBAL_SURFACE","TouchAxis","_updateLocationData","startLocation","velocity","timeStamp","timeDelta","initialDelta","Touch","userEvents","touchInfo","useClickAsTap","pressEvent","_moved","_finished","press","_holdTimeout","minHold","_hold","_withinIgnoreThreshold","UserEvents","dispose","_start","endTime","activeTouches","isMoved","startTime","xDelta","yDelta","surfaceElement","preventIfMovingProxy","_maxTouches","multiTouch","allowSelection","captureUpIfMoved","fastTap","eventNS","global","pressed","touchAction","preventDragEvent","preventIfMoving","_isMoved","_disposeAll","capture","_isMultiTouch","_apiCall","_maxTouchesReached","_select","which","_move","_eachTouch","_end","matchingTouch","dict","defaultThreshold","numericCssPropery","within","containerBoundaries","checkTarget","targets","areas","theTarget","theFilter","targetLen","areaLen","targetElement","destroyDroppable","groupName","droppables","scrollableViewPort","scrollableRoot","$window","findScrollableParent","autoScrollVelocity","mouseX","mouseY","AUTO_SCROLL_AREA","lastDropTarget","Movable","DropTarget","DropTargetArea","Draggable","draggables","dropTargets","dropAreas","KEYUP","DRAGSTART","DRAG","DRAGEND","DRAGCANCEL","HINTDESTROYED","DRAGENTER","DRAGLEAVE","DROP","TapCapture","_press","_release","attachEvent","captureNext","cancelCapture","PaneDimension","forcedEnabled","scrollSize","makeVirtual","virtual","_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","offsetX","offsetY","previousGesture","previousCenter","scaleDelta","scaleWith","TRANSFORM_STYLE","webkitTransformOrigin","_saveCoordinates","by","scaleTo","newCoordinates","draggable","dropTarget","_over","_out","_drop","dropped","destroyGroup","hold","_drag","_cancel","_afterEndHandler","_afterEnd","_captureEscape","cursorOffset","holdToDrag","autoScroll","cancelHold","_updateHint","boundaries","hintOffset","hint","_shouldIgnoreTarget","ignoreSelector","currentTargetOffset","scopeTarget","scopeFrom","cursorElement","_elementUnderCursor","_cursorElement","_scrollableParent","_lastEvent","_processMovement","_scrollCompenstation","_scrollVelocity","_scrollInterval","_withDropTarget","_autoScroll","yIsScrollable","xIsScrollable","isRootNode","yInBounds","xInBounds","compensation","initialTarget","SNAPBACK_DURATION","SCROLLBAR_OPACITY","FRICTION","VELOCITY_MULTIPLIER","MAX_VELOCITY","OUT_OF_BOUNDS_FRICTION","ANIMATED_SCROLLER_PRECISION","RELEASECLASS","REFRESHCLASS","PULL","RESIZE","MOUSE_WHEEL_ID","ZoomSnapBack","tapCapture","DragInertia","freeze","_moveTo","paneAxis","_snapBack","velocityMultiplier","friction","snapBack","AnimatedScroller","_updateCoordinates","setCoordinates","setCallback","ScrollBar","scrollMovable","alwaysVisible","paneSize","sizeRatio","avoidScrolling","pane","zoomSnapBack","animatedScroller","_native","prepend","scrollElement","fixedContainer","wrapInner","velocityX","velocityY","horizontalSwipe","originatedFromFixedContainer","verticalSwipe","scrollTo","mousewheelScrolling","pulled","_initAxis","_wheelEnd","_wheel","_wheelY","pullToRefresh","_initPullToRefresh","_wheelScroll","_wheelTimeout","pullOffset","visibleScrollHints","pullTemplate","releaseTemplate","refreshTemplate","contentResized","_scale","zoomOut","animatedScrollTo","pullHandled","refreshHint","hintContainer","yinertia","xinertia","_paneChange","_dragEnd","scrollBar","dropCueOffsetTop","indicatorTmpl","paddingBottom","dropCue","Groupable","horizontalCuePosition","intializePositions","_intializePositions","dropCuePositions","_dropCuePositions","draggableElements","groupContainer","kendoDropTarget","dragenter","_canDrag","dragleave","drop","sourceIndicator","indicator","lastCuePosition","_dropCuePosition","_canDrop","before","buildIndicator","kendoDraggable","dragcancel","_dragCancel","dragstart","elementPosition","dragend","drag","_removeIndicator","newIndicator","marginRight","allowDrag","_refreshHandler","_invalidateGroupContainer","indicators","toggleHintClass","denied","KREORDERABLE","Reorderable","reorderDropCue","_draggable","_dropTargetAllowed","_isLastDraggable","inSameContainer","sourceIndex","_index","targetIndex","_dropTarget","oldIndex","newIndex","_elements","dropStartOffset","dragOverContainers","HORIZONTAL","VERTICAL","RESIZEEND","Resizable","_positionMouse","_sizingDom","draggableElement","_stop","_max","hintSize","_initialElementPosition","_min","_initialMousePosition","_maxPosition","_minPosition","maxPosition","minPosition","currentPosition","invalidClass","resizing","targetPosition","containsOrEqualTo","defaultHint","defaultPlaceholder","BEFORE_MOVE","ACTION_SORT","ACTION_REMOVE","ACTION_RECEIVE","DEFAULT_FILTER","MISSING_INDEX","Sortable","_createDraggable","connectWith","moveOnDragEnter","_dragstart","_dragcancel","_dragend","draggedElement","_placeholder","draggableEvent","_setCursor","_resetCursor","targetCenter","offsetDelta","sibling","getSibling","_findTarget","axisDelta","eventData","_movementByAxis","_getElementCenter","appendToBottom","_movePlaceholder","appendAfterHidden","_isFloating","connectedList","connectedListEventData","draggedIndex","placeholderIndex","getKendoSortable","_findElementUnderCursor","has","sortable","_isEmpty","_isLastHidden","_searchConnectedTargets","sortableInstance","connected","_isCursorAfterLast","lastItemOffset","lastItem","cursorPosition","_originalCursorType","_cursorStylesheet","not","Selectable","ARIASELECTED","SELECTED","SELECTABLE","UNSELECTING","supportEventDelegation","_marquee","_lastActive","aria","tap","_tap","_isElement","ctrlKey","metaKey","whichCode","buttonCode","button","_allowSelection","selectRange","_firstSelectee","_unselect","_notify","_downTarget","currentElement","useAllItems","_selectElement","_invalidateSelectables","toSelect","selectElement","preventNotify","resetTouchEvents","continuousItems","selectable","asLowerString","CLICK","KBUTTON","KBUTTONICON","KBUTTONICONTEXT","DISABLED","DISABLEDSTATE","FOCUSEDSTATE","SELECTEDSTATE","Button","_graphics","_focus","_blur","_keydown","_keyup","icon","spriteCssClass","imageUrl","_isNativeButton","span","isEmpty","err","numeric","wrapClassName","iconTemplate","FIRST","PREV","NEXT","LAST","KEYDOWN","Pager","pageSizes","pageItems","linkTemplate","selectTemplate","currentPageTemplate","previousNext","of","itemsPerPage","DropDownList","kendoDropDownList","_refreshClick","_toggleActive","buttonCount","morePages","setDataSource","reminder","hasAll","selectAll","KNOTIFICATION","KICLOSE","KHIDING","INFO","SUCCESS","WARNING","WRAPPER","TEMPLATE","SAFE_TEMPLATE","Notification","_compileTemplates","templates","_guid","_isRtl","_compileStacking","stacking","pinned","hideOnClick","allowHideAfter","autoHideAfter","kendoTemplate","_compiled","templateId","_defaultCompiled","_safeCompiled","_getCompiled","defaultCompiled","paddings","horizontalAlignment","_popupOrigin","_popupPosition","_popupPaddings","_attachPopupEvents","attachClick","_hidePopup","closeIcon","attachDelay","_showPopup","openPopup","_triggerHide","deactivate","_togglePin","pin","win","_attachStaticEvents","_hideStatic","_showStatic","insertionMethod","defaultArgs","typeIcon","showText","warning","openedNotifications","getNotifications","guidElements","newOptions","restoreTitle","restoreTitleAttributeForElement","saveTitleAttributeForElement","saveTitleAttributes","DOCUMENT","ARIAIDSUFFIX","DESCRIBEDBY","CONTENTLOAD","KCONTENTFRAME","IFRAMETEMPLATE","POSITIONS","REVERSE","DIRCLASSES","DIMENSIONS","DEFAULTCONTENT","Tooltip","_documentKeyDownHandler","_documentKeyDown","_showOn","callout","_appendContent","iframe","contentOptions","showIframe","_ajaxRequest","_initPopup","activate","ariaId","_positionCallout","arrow","_closeButtonClick","arrowBorder","offsetAmount","unifyType","mapChangedItems","itemsToMatch","itemsLength","selectedLength","changed","unchanged","isValidFilterExpr","removeFiltersForField","STATIC_LIST_NS","StaticList","ID","FOCUSED","HOVER","LOADING","HIDDENCLASS","CASCADE","isIE","isIE8","quotRegExp","alternativeNames","ComboBox","List","_isSelect","ul","tabIndex","aria-hidden","_listMousedown","_header","_noData","_accessors","_initValue","headerTemplate","noDataTemplate","_renderFooter","_renderNoData","_focused","_editable","_listOptions","currentOptions","listBoundHandler","_listBound","_listChange","_activateItem","_deactivateItem","groupTemplate","fixedGroupTemplate","$angular","_initList","listOptions","selectedItemChange","VirtualList","_setListValue","_updateSelectionState","filterInput","_isFilterEnabled","_hideClear","_showClear","_clearValue","_clearText","_accessor","_clearFilter","_filterSource","newExpression","dataSourceState","resetPageSettings","removed","_cascading","setDSFilter","_angularElement","noData","_toggleNoData","header","_allowOpening","_old","_ignoreCase","candidate","widgetOptions","_open","_inputValue","_typingTimeout","enforceMinLength","minLength","_state","_searchByWord","_unbindDataSource","_form","_resetHandler","selectedDataItems","_text","_value","_aria","suggest","_oldIndex","_typing","typing","_enable","_dataValue","_offsetHeight","prevAll","_height","popups","footerHeight","_adjustListWidth","computedWidth","borderLeftWidth","borderRightWidth","minWidth","_openHandler","_closeHandler","_focusItem","noFocusedItem","highlightFirst","scrollToIndex","_calculateGroupPadding","groupHeader","_calculatePopupHeight","_resizePopup","_popup","_makeUnselectable","_toggleHover","_toggle","preventFocus","touchEnabled","MSPointers","_prevent","_triggerCascade","_cascadeTriggered","userTriggered","_userTriggered","_triggerChange","_valueBeforeCascade","_requestStartHandler","_requestEndHandler","_errorHandler","requireValueMapper","valueMapper","_initial","_initialIndex","_parentWidget","_cascadeSelect","_accessorInput","_accessorSelect","_custom","_customOption","_hideBusy","_busy","_arrowIcon","_showBusy","_request","_requestEnd","_firstItem","focusFirst","_lastItem","focusLast","_nextItem","focusNext","_prevItem","focusPrev","activeFilter","shouldTrigger","altKey","_fetch","dataItemByIndex","getElementIndex","_focusElement","focusout","scrollWith","_fetchData","hasItems","_options","optionLabel","dataText","dataValue","htmlElement","formId","_cascade","cascade","_cascadeHandlerProxy","_cascadeHandler","_cascadeFilterRequests","_selectedValue","_toggleCascadeOnFocus","valueBeforeCascade","_clearSelection","_cascadeChange","filterValue","cascadeFromField","currentHandler","_optionID","_selectedIndices","_dataItems","_values","_getter","_templates","_onScroll","_scrollId","_renderHeader","_fixedHeader","_render","scroll","itemOffsetTop","itemOffsetHeight","contentScrollTop","contentOffsetHeight","bottomDistance","_getValues","_valueGetter","hasCandidate","_get","focusIndex","skipUpdate","_skipUpdate","indices","filtered","singleSelection","selectedIndices","added","isFiltered","_deselectFiltered","_deselect","_valueComparer","setValue","_valueDeferred","_valueIndices","_valueExpr","normalized","_valueType","_dataItemPosition","valueExpr","removedIndices","_normalizeIndices","newIndices","_firstVisibleItem","itemHeight","previousSibling","isGrouped","visibleItem","_renderItem","notFirstItem","newGroup","dataContext","_selected","_lastDSFilter","skipUpdateOnBind","isItemChange","_bound","modular","minYear","maxYear","build","weekNumberBuild","isWeekColumnVisible","cellsPerRow","perRow","weekNumber","weekNumberTemplate","cellTemplate","emptyCellTemplate","DATE","disableDates","isInRange","date1","date2","year1","getToday","restrictValue","shiftArray","multiplier","mousetoggle","MOUSEENTER","FOCUS","prevent","getCalendarInfo","extractFormat","MONTH","dates","makeUnselectable","addClassToViewContainer","currentView","isEqualDatePart","value1","value2","isEqualMonth","getDisabledExpr","createDisabledExpr","convertDatesArray","disabledDates","searchExpression","isEqualDate","oldValue","transitionOrigin","KEYDOWN_NS","MIN","SLIDE","CENTURY","NAVIGATE","OTHERMONTH","OTHERMONTHCLASS","TODAY","CELLSELECTOR","FOCUS_WITH_NS","MOUSEENTER_WITH_NS","MOUSELEAVE","PREVARROW","NEXTARROW","ARIA_DISABLED","ARIA_SELECTED","decade","century","Calendar","unescape","link","_toDateObject","_focusView","focusOnNav","_cellID","_addClassProxy","_active","todayString","toDateString","_cellByDate","_removeClassProxy","_today","_title","_table","_bindTable","_option","navigateToPast","navigateToFuture","navigateUp","navigateDown","future","_oldTable","_changeView","_animate","_class","isDisabled","_nextNavigatable","navigatableDate","active","_horizontal","viewWidth","float","margin-left","unwrap","_vertical","disabledDate","links","isBigger","isTodayDisabled","_todayClick","firstVisibleDay","calendarInfo","tzOffsetBefore","resultDATE","tzOffsetDiff","navigateUrl","hasUrl","currentCalendar","firstDayIdx","shortNames","linkClass","dateString","currentDate","month1","month2","year2","setMonth","viewsEnum","parseFormats","DatePicker","DIV","SPAN","READONLY","DEFAULT","STATEDISABLED","HOVEREVENTS","MAX","ARIA_EXPANDED","ARIA_HIDDEN","DateView","_dateViewID","_calendar","_setOptions","selectIsClicked","handled","_initialOptions","_wrapper","dateView","_oldText","_updateARIA","_icon","aria-expanded","aria-owns","_update","ARIATemplate","_dateIcon","_inputWrapper","dateChanged","valueUpdated","textFormatted","aria-controls","formattedValue","isSameType","_ariaTemplate","indexOfWordAtCaret","caretIdx","wordAtCaret","replaceWordAtCaret","defaultSeparator","words","placeholderSupported","ARIA_READONLY","AutoComplete","_loader","_clearButton","_keypress","_search","_prev","autocomplete","aria-haspopup","_resetFocusItemHandler","_resetFocusItem","clearButton","_progressHandler","_separator","_mute","_unifySeparators","_last","wordIndex","isActive","_touchScroller","_muted","_selectValue","_defaultSeparator","itemSelected","_loading","DOMelement","assign","normalizeIndex","sameCharsOnly","character","STATE_FILTER","STATE_ACCEPT","MSG_INVALID_OPTION_LABEL","_focusHandler","_focusInputHandler","_focusInput","_optionLabel","_inputTemplate","_word","_span","_mobile","_filterHeader","_textAccessor","valueTemplate","optionLabelTemplate","hasOptionLabel","_arrow","_resizeFilterInput","isInputActive","originalPrevent","_optionLabelDataItem","loweredText","_valueSetter","_optionLabelText","_assignInstance","_buildOptions","optionLabelValue","initialIndex","_presetValue","_filterPaste","_focusinHandler","_focusoutHandler","isIFrame","self","_wrapperMousedown","_wrapperClick","dropDownWrapper","isPopupVisible","_getElementDataItem","_matchText","_shuffleData","splitIndex","optionDataItem","_selectNext","oldFocusedItem","dataLength","isInLoop","charCode","_popupOpen","compareElement","jQueryCandidate","_resetOptionLabel","focusedItem","additionalClass","keepState","SELECTOR","accesskey","unselectable","getElements","optionLabelText","STATE_REBIND","_input","_setText","syncValueAndText","_pasteTimeout","hasText","isCustom","_arrowClick","_inputFocus","_inputFocusout","_inputPaste","_scrollToFocusedItem","_updateSelection","hasInitialIndex","_updateItemFocus","isFirstPage","maxLength","accessKey","LI","ACCEPT","FILTER","REBIND","DESELECT","FOCUSEDCLASS","HOVERCLASS","_optionsMap","_customOptions","_tagList","_textContainer","_tagID","tagList","_tagTemplate","tagMode","autoClose","maxSelectedItems","itemTemplate","tagTemplate","currentTag","_currentTag","_selectedItemChange","_initialValues","optionsMap","valueGetter","tagTextTemplate","notInput","closeButton","_removeTag","customIndex","_close","_tagListClick","_clearClick","_retrieveData","inputValue","clearFilters","_normalizeValues","_setOption","isEmptyArray","_showBusyHandler","skipCaret","caretPos","textWidth","wrapperWidth","selectedItems","_buildSelectedItems","_selectedItemIndex","_angularTagItems","removedItem","addedItem","_maxTotal","maxTotal","currentTotal","isSelected","_innerWrapper","defaultTemplate","hasDataSource","isMultiple","computedStyles","createWrapper","isHorizontal","orientationCssClass","cssClasses","tickPlacementCssClass","tickPlacement","showButtons","createButton","buttonCssClass","createSliderItems","smallStep","createTrack","dragHandleCount","firstDragHandleTitle","leftDragHandleTitle","dragHandleTitle","rightDragHandleTitle","stepValue","formatValue","calculatePrecision","parseAttr","removeFraction","RangeSlider","MOUSE_DOWN","TRACK_MOUSE_DOWN","MOUSE_UP","TRACK_MOUSE_UP","MOVE_SELECTION","KEY_DOWN","MOUSE_OVER","DRAG_HANDLE","TRACK_SELECTOR","TICK_SELECTOR","STATE_SELECTED","STATE_FOCUSED","STATE_DEFAULT","STATE_DISABLED","SliderBase","rtlDirectionSign","_isHorizontal","_sizeFn","_outerSize","_createHtml","_trackDiv","_setTrackDivWidth","_maxSelection","_sliderItemsInit","_keyMap","37","39","38","35","36","33","largeStep","34","_distance","_refresh","sizeBetweenTicks","pixelWidths","_calculateItemsWidth","_setItemsWidth","_setItemsTitle","_calculateSteps","_setItemsLargeTick","trackDivPosition","bordersWidth","titleNumber","limit","increment","valueWithoutFraction","itemsCount","itemWidth","trackDivSize","pixelStep","_roundWidths","pixelWidthsArray","balance","_addAdditionalSize","additionalSize","_pixelSteps","_getValueFromPosition","mousePosition","dragableArea","halfStep","_getFormattedValue","tooltipTemplate","_getDraggableArea","_firstHandleDrag","_activeHandle","_lastHandleDrag","_activeHandleDrag","_updateTooltip","_focusWithMouse","_setTooltipTimeout","_removeTooltip","_tooltipTimeout","_clearTooltipTimeout","tooltipDiv","_formResetHandler","Slider","dragHandle","_selection","Selection","Drag","increaseButtonTitle","decreaseButtonTitle","clickHandler","mouseDownHandler","newVal","_nextValueByIndex","_valueIndex","_setValueInRange","timer","_clearTimer","_refreshAriaAttr","_tooltipDiv","moveSelection","selectionValue","selectionDiv","halfDragHanndle","rtlCorrection","owner","_activeDragHandle","_setZIndex","oldVal","_createTooltip","colloutCssClass","wnd","tooltipInnerDiv","_scrollOffset","moveTooltip","slideParams","constrainValue","noAnimation","fadeOut","dragHandles","sdhOffset","viewPortEnd","maxOverflow","firstInput","secondInput","warn","dragSelectionStart","dragSelectionEnd","activeHandleDrag","selectionStartValue","selectionEndValue","selectionStartIndex","selectionEndIndex","halfHandle","makeSelection","selectionPosition","triggerEvent","relative","KEYS","BACKGROUNDCOLOR","ITEMSELECTEDCLASS","SIMPLEPALETTE","WEBPALETTE","WHITE","MESSAGES","noColor","clearColor","CLICK_NS","ColorSelector","_tabIndex","_ariaId","_standalone","_triggerSelect","_updateUI","_onEnable","nohooks","_selectOnHide","ColorPalette","colors","tileSize","palette","_selectedID","FlatColorPicker","_hueElements","_selectedColor","_colorAsText","_sliders","_hsvArea","autoupdate","_clearedColor","_getHSV","_applyIEFilter","_hueSlider","_opacitySlider","_hsvRect","_hsvHandle","buttons","preview","track","hueChange","opacityChange","kendoSlider","slide","rw","rh","_svChange","hsvRect","hsvHandle","_hsvEvents","hue","handlePosition","dontChangeInput","ColorPicker","_selector","innerWrapper","toolIcon","_getPopup","selOptions","_noColorIcon","_isInputTypeColor","selectorType","kendoPopup","kendoButton","selectorColor","buttonHtml","truncate","INPUT","SPIN","TOUCHEND","INTEGER_REGEXP","NumericTextBox","isStep","_focusout","_arrows","_toggleText","factor","restrictDecimals","spinners","upArrowText","downArrowText","_upArrowEventHandler","_downArrowEventHandler","_spin","_upArrow","_downArrow","_paste","adjusted","_adjust","_focusin","arrows","_spinning","release","curreValue","_focusing","groupRegExp","extractRegExp","_format","caretPosition","_culture","CLASSNAME","_initialTitle","aria-valuemin","aria-valuemax","_key","_step","isNumPadDecimal","_numericRegex","fractionRule","_floatRegExp","rounder","isNotNull","DOMElement","convertItems","clearFilter","nested","filterValuesForField","flatFilterValues","distinct","seen","removeDuplicates","dataSelector","POPUP","REFRESH","EQ","NEQ","mobileRoles","booleanTemplate","defaultMobileTemplate","booleanMobileTemplate","FilterMenu","appendToElement","_defaultFilter","_init","setUI","_isMobile","_createMobileForm","_createForm","extra","_activate","closeCallback","useRole","inputType","_closeForm","defaultFilters","defaultOperator","filterModel","_bind","purge","currentFilter","_stripFilters","_merge","animations","enums","isTrue","isFalse","selectValue","additionalValue","additionalOperator","multiCheckNS","multiCkeckMobileTemplate","FilterMultiCheck","checkSource","_foreignKeyValues","forceUnique","_createLink","_link","_attachProgress","checkChangeHandler","_progressHideHandler","_clearTypingTimeout","labelText","searchString","searchTextBox","labels","checkAll","selectedItemsFormat","createCheckAllItem","checkAllContainer","checkBoxAll","checkAllHandler","updateCheckAllState","getFilterArray","createCheckBoxes","checkValues","flatValues","itemsHtml","templateOptions","ele","checkBoxVal","valueFormat","getEffectDirection","parseDirection","updateItemClasses","IMG","IMAGE","LINK","DEFAULTSTATE","excludedNodesRegExp","updateArrow","updateFirstLast","arrowCssClass","getArrowCssClass","MENU","storeItemSelectEventHandler","selectHandler","getItemSelectEventHandler","setItemData","ContextMenu","TIMER","ZINDEX","POINTERDOWN","allPointers","KENDOPOPUP","HOVERSTATE","menuSelector","groupSelector","popupSelector","allItemsSelector","disabledSelector","itemSelector","linkSelector","exclusionSelector","nextSelector","lastSelector","templateSelector","touchPointerTypes","itemWrapper","sprite","rendering","wrapperCssClass","firstLevel","itemCssAttributes","imageCssAttributes","imageAttr","contentCssAttributes","contentAttr","defaultClasses","textClass","textAttributes","arrowClass","encoded","groupAttributes","expanded","groupCssClass","Menu","_initData","_updateClasses","_animations","nextItemZIndex","_focusProxy","_preventClose","_removeHoverItem","_checkActiveElement","openOnClick","clicked","_documentClickHandler","_documentClick","closeOnClick","hoverDelay","popupCollision","_toggleDisabled","referenceItem","plain","groupData","renderGroup","renderItem","windowHeight","setScrolling","parentHorizontal","_triggerEvent","maxHeight","dontClearClose","_isRootItem","isEnter","_closurePrevented","hoverItem","_hoverItem","_findRootParent","hasFocus","oldHoverItem","_oldHoverItem","nonContentGroupsSelector","delegateTarget","pointerType","_","openHandle","childGroup","childGroupVisible","formNode","itemElement","targetHref","sampleHref","isLink","isLocalLink","isTargetLink","shouldCloseTheRootItem","enterKey","itemSelectEventData","isSelectItemDefaultPrevented","isSelectDefaultPrevented","_getEventData","_moveHover","belongsToVertical","_itemBelongsToVertival","_itemHasChildren","_itemDown","_itemUp","_itemEsc","menuIsVertical","nextItem","_itemRight","parentItem","nextAll","_itemLeft","menu","subGroup","renderItems","_marker","_wire","alignToAnchor","_showProxy","_closeProxy","_closeTimeoutProxy","_eventOrigin","_targetChild","normalClick","sameTarget","containment","_triggerProxy","toHash","leafColumns","ASC","DESC","FILTERMENU","ColumnMenu","_createMobileMenu","_createMenu","_lockColumns","sortAscending","sortDescending","lock","unlock","_ownerColumns","showColumns","lockedColumns","mobileTemplate","MobileMenu","_updateLockedColumns","col","_originalObject","filterMenu","_updateColumnsMenuHandler","_updateColumnsLockedStateHandler","menuColumns","originalField","_sortDataSource","allowUnsort","mode","_updateColumnsMenu","_updateColumnsLockedState","showColumn","hideColumn","checkboxes","fieldAttr","lockedAttr","visibleDataFields","lockedCount","nonLockedCount","multi","lockColumn","unlockColumn","lockItem","unlockItem","_filterExist","DIR","SINGLE","FIELD","sorterNS","TLINK","ARIASORT","ColumnSorter","initialDirection","_toggleSortDirection","fieldType","convertToValueBinding","bindAttr","createAttributes","ruleName","DATATYPE","BINDING","specialRules","addValidationRules","modelField","oldIE","nameSpecialCharRegExp","ERRORTEMPLATE","editors","kendoNumericTextBox","kendoDatePicker","Editable","_validateProxy","_validate","clearContainer","editor","isObject","isValuesEditor","isCustomEditor","preventChangeTrigger","_validationEventInProgress","bindAttribute","bindingRegex","validatable","modelFields","constrain","low","high","executableScript","WindowResizing","_preventDragging","KWINDOWRESIZEHANDLES","addOverlay","removeOverlay","WindowDragging","KWINDOW","KWINDOWTITLE","KWINDOWTITLEBAR","KWINDOWCONTENT","KOVERLAY","KHOVERSTATE","KFOCUSEDSTATE","MAXIMIZEDSTATE","CURSOR","MINIMIZE","MAXIMIZE","RESIZESTART","MINIMIZE_MAXIMIZE","KPIN","KUNPIN","PIN_UNPIN","TITLEBAR_BUTTONS","REFRESHICON","Window","windowContent","isVisible","suppressActions","actions","_createWindow","_dimensions","toFront","_overlay","_buttonEnter","_buttonLeave","_windowActionHandler","_resizable","aria-labelledby","_resizeHandler","_onDocumentResize","maxWidth","minHeight","_animationOptions","basicAnimation","resizable","toggleMaximization","resizeHandle","dragging","_actions","titlebar","windowSpecificCommands","scrollable","fade","autoFocus","isMaximized","isMinimized","_closable","newWidth","newHeight","w","overlay","_actionForIcon","iconClass","k-i-close","k-i-window-maximize","k-i-window-minimize","k-i-window-restore","k-i-refresh","k-i-pin","k-i-unpin","_modals","zStack","_object","newTop","newLeft","documentWindow","titleBarHeight","titleBar","scrollContainer","otherModalsVisible","overlayFx","showOptions","contentElement","Fade","fadeIn","_documentScrollTop","_documentScrollLeft","_removeOverlay","suppressAnimation","modals","hideOverlay","hideOptions","systemTriggered","_deactivate","lastModal","_actionable","_shouldFocus","windowTop","currentWindow","originalZIndex","windowObject","zIndexNew","restoreOptions","_sizingAction","actionId","maximize","minimize","unpin","initOptions","contentFrame","_triggerRefresh","_ajaxComplete","_loadingIconTimeout","_ajaxError","_ajaxSuccess","contentTemplate","_showLoading","iframeSrcAttributes","contentHtml","elementPadding","initialPosition","resizeDirection","initialSize","containerOffset","windowBottom","windowRight","newWindowTop","initialWindowPosition","initialPointerPosition","startPosition","minLeftPosition","minTopPosition","_finishDrag","initPopOvers","popovers","preventScrollIfNotInput","initWidgets","UI_OVERLAY","BEFORE_SHOW","AFTER_SHOW","BEFORE_HIDE","defaultTransition","_layout","_scroller","_model","layout","getLayout","reload","stretch","modelScope","scroller","$destroy","inited","_invokeNgController","_padIfNativeScrolling","isAndroid","skin","isAndroidForced","hasPlatformIndependentSkin","topContainer","bottomContainer","scrollerContent","idAttrValue","contentSelector","controller","$apply","_callController","$scope","_locate","platform","previousView","bodyRegExp","LOAD_START","LOAD_COMPLETE","SHOW_START","SAME_VIEW_REQUESTED","VIEW_SHOW","VIEW_TYPE_DETERMINED","AFTER","ViewEngine","errorMessage","sandbox","_hideViews","rootView","rootNeeded","layouts","viewContainer","getLayoutProxy","_setupLayouts","viewOptions","loader","showView","remoteViewURLPrefix","showClosure","_findViewElement","_createView","serverNavigation","_loadView","modalViews","urlPath","_getLayout","_xhr","always","_xhrComplete","responseText","CAPTURE_EVENTS","Loader","captureEvents","_attachCapture","changeMessage","transitionDone","EXTERNAL","HREF","DUMMY_HREF","SKIP_TRANSITION_ON_BACK_BUTTON","WIDGET_RELS","collapsible","historyCallback","viewEngine","_historyNavigate","_historyReplace","closeActiveDialogs","viewShow","loadStart","loadComplete","sameViewRequested","viewTypeDetermined","_setPortraitWidth","_setupAppLinks","dialogs","navigateToInitial","portraitWidth","bindToRouter","router","attrUrl","hideLoading","showLoading","changeLoadingMessage","linkRoles","pressedButtonSelector","buttonSelectors","_mouseup","_appLinkClick","rel","delayedTouchEnd","openFor","paneContainer","ARROW","OVERLAY","DIRECTION_CLASSES","DIRECTIONS","ANIMATION","containerPopup","PopOver","initialOpen","SHIM","Shim","app","osname","ioswp","shim","prevented","_hide","COMMAND","BUTTONS","CONTEXT_DATA","WRAP","cancelTemplate","ActionSheet","ShimClass","_shimHideProxy","actionData","_shimHide","DEFAULTMIN","DEFAULTMAX","DEFAULTVALUE","DEFAULTCHUNKCOUNT","KPROGRESSBAR","KPROGRESSBARREVERSE","KPROGRESSBARINDETERMINATE","KPROGRESSBARCOMPLETE","KPROGRESSWRAPPER","KPROGRESSSTATUS","KCOMPLETEDCHUNK","KUPCOMINGCHUNK","KSTATEDISABLED","PROGRESSTYPE","PERCENT","CHUNK","COMPLETE","HUNDREDPERCENT","DEFAULTANIMATIONDURATION","progressStatus","ProgressBar","_progressProperty","_fields","_validateValue","_validateType","_progressAnimation","_updateProgress","chunkCount","showStatus","_isStarted","progressWrapper","initialStatusValue","_addChunkProgressWrapper","_calculatePercentage","validated","_roundValue","_updateChunks","_onProgressUpdateAlways","_updateProgressWrapper","completedChunks","percentagesPerChunk","percentageParsed","completedChunksCount","animationDuration","_animation","animationCssOptions","_addRegularProgressWrapper","_onProgressAnimateStart","_onProgressAnimate","_onProgressAnimateComplete","progressStatusWrapSize","progressInPercent","progressValue","progressWrapperSize","chunkSize","_normalizeChunkSize","lastChunk","_calculateChunkSize","chunkContainer","_onePercent","BinaryStream","eof","readByte","writeByte","ensure","readShort","writeShort","readShort_","writeShort_","readLong","writeLong","readLong_","writeLong_","readFixed","writeFixed","readFixed_","writeFixed_","times","readString","writeString","write","stream","HAS_TYPED_ARRAYS$1","bytes","nbytes","saveExcursion","writeBase64","BASE64","ucs2decode","counter","ucs2encode","hasOwnProperty$1","sortedKeys","Directory","tables","scalerType","tableCount","searchRange","entrySelector","rangeShift","checksum","deftable","methods","Ctor","rawData","nextSubsetTag","subsetTag","Subfont","subset","unicodes","ogid2ngid","ngid2ogid","ncid2ogid","firstChar","nextGid","psName","TTFFont","numFonts","makeOutput","PDFValue","beforeRender","renderArray","renderDate","PDFDictionary","indentLevel","writeData","withIndent","NL","wrapObject","renderValue","renderFull","getOption","PAPER_SIZE","a4","unitsToPoints","PDFDocument","defval","catalog","pageTree","objcount","objects","FONTS","IMAGES","GRAD_COL_FUNCTIONS","GRAD_OPC_FUNCTIONS","GRAD_COL","GRAD_OPC","PDFCatalog","PDFPageTree","setPages","addPage","props","contentWidth","contentHeight","PDFStream","Contents","Parent","MediaBox","PDFPage","_content","xrefOffset","zeropad","Root","Info","Producer","PDFString","Title","Author","Subject","Keywords","Creator","CreationDate","loadBinary","cont","req","XMLHttpRequest","HAS_TYPED_ARRAYS","responseType","VBArray","responseBody","send","loadFont","FONT_CACHE","loadImage","_load","_onload","_onerror","imgdata","hasAlpha","rawbytes","FileReader","PDFJpegImage","bloburl","readAsArrayBuffer","getImageData","PDFRawImage","manyLoader","loadOne","mm2pt","mm","cm2pt","cm","in2pt","inch","defclass","Base","PDFName_cache","PDFName","asStream","Type","Subtype","Width","Height","BitsPerComponent","ColorSpace","Filter","_resourceName","RESOURCE_COUNTER","SMask","makeHash","cacheColorGradientFunction","r1","r2","g2","FunctionType","Domain","Range","N","C0","C1","cacheOpacityGradientFunction","makeGradientFunctions","assemble","funcs","Functions","Bounds","Encode","prevColor","curColor","opacities","cacheColorGradient","isRadial","coords","shading","ShadingType","Coords","Extend","cacheOpacityGradient","AIS","CA","ca","S","FormType","BBox","CS","I","Resources","ExtGState","a0","Shading","s0","cacheGradient","unquote","parseFontDef","fontdef","variant","mkFamily","FONT_MAPPINGS","fontAlias","isIdentityMatrix","doIt","drawPage","addMargin","optimize","kendoGeometry","landscape","drawElement","producer","author","subject","keywords","dispatch","loadFonts","loadImages","toBlob","saveAs$1","filename","supportBrowser","dataURL","_pdfDebug","comment","setStrokeOptions","setFillOptions","drawPath","drawMultiPath","drawCircle","drawArc","drawGroup","drawRect","setStrokeColor","setStrokeOpacity","setLineWidth","setDashPattern","DASH_PATTERNS","LINE_CAP","LINE_JOIN","setFillColor","setFillOpacity","_drawPath","shouldDraw","maybeGradient","clipStroke","maybeFillStroke","fillStroke","nop","maybeDrawRect","isRect","seg","bezier","TEXT_RENDERING_MODE$1","fillAndStroke","beginText","setFont","setTextRenderingMode","endText","addLink","sz","newShape","optArray","opt","withClipping","saveclipbox","clipbox","savematrix","inClipbox","currentBox","exportPDF","HeadTable","LocaTable","HheaTable","MaxpTable","HmtxTable","GlyfTable","NameTable","PostTable","CmapTable","OS2Table","PDFHexString","PDFStandardFont","PDFFont","PDFToUnicodeCmap","TEXT_RENDERING_MODE","keyStr","readTable","directoryLength","headOffset","tableData","adjustment","maxpow2","LN2","revision","checkSumAdjustment","magicNumber","flags","unitsPerEm","xMin","yMin","xMax","yMax","macStyle","lowestRecPPEM","fontDirectionHint","indexToLocFormat","glyphDataFormat","head","offsetOf","lengthOf","needsLongFormat","ascent","descent","lineGap","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","metricDataFormat","numOfLongHorMetrics","ids","numGlyphs","maxPoints","maxContours","maxComponentPoints","maxComponentContours","maxZones","maxTwilightPoints","maxStorage","maxFunctionDefs","maxInstructionDefs","maxStackElements","maxSizeOfInstructions","maxComponentElements","maxComponentDepth","glyphIds","hhea","lsbCount","advance","lsb","maxp","leftSideBearings","forGlyph","SimpleGlyph","CompoundGlyph","idOffsets","MORE_COMPONENTS","ARG_1_AND_2_ARE_WORDS","WE_HAVE_A_TWO_BY_TWO","WE_HAVE_AN_X_AND_Y_SCALE","WE_HAVE_A_SCALE","compound","old2new","glyphFor","loca","numberOfContours","glyph","glyphs","oldIds","NameEntry","platformID","platformSpecificID","languageID","nameID","stringOffset","nameRecords","strings","rec","postscriptEntry","postscriptName","strTable","strCount","POSTSCRIPT_GLYPHS","numberOfGlyphs","italicAngle","underlinePosition","underlineThickness","isFixedPitch","minMemType42","maxMemType42","minMemType1","maxMemType1","glyphNameIndex","mapping","post","CmapEntry","codeMap","segCount","endCode","startCode","idDelta","idRangeOffset","glyphId","ngroups","endCharCode","glyphCode","language","renderCharmap","new_gid","charcode","gid","segCountX2","deltas","rangeOffsets","startGlyph","codes","startCodes","endCodes","averageCharWidth","weightClass","widthClass","ySubscriptXSize","ySubscriptYSize","ySubscriptXOffset","ySubscriptYOffset","ySuperscriptXSize","ySuperscriptYSize","ySuperscriptXOffset","ySuperscriptYOffset","yStrikeoutSize","yStrikeoutPosition","familyClass","panose","charRange","vendorID","firstCharIndex","lastCharIndex","winAscent","winDescent","codePageRange","xHeight","capHeight","defaultChar","breakChar","maxContext","use","old_gid","cmap","encodeText","glyphsFor","glyf","new_gid_ids","old_gid_ids","lastChar","hmtx","OS/2","os2","directory","cidToGidMap","cid","widthOfGlyph","makeSubset","a5","a6","a7","a8","a9","a10","b0","b3","b4","b5","b6","b7","b8","b9","b10","c0","c3","c4","c5","c6","c7","c8","c9","c10","executive","folio","legal","tabloid","Times-Roman","Times-Bold","Times-Italic","Times-BoldItalic","Helvetica","Helvetica-Bold","Helvetica-Oblique","Helvetica-BoldOblique","Courier","Courier-Bold","Courier-Oblique","Courier-BoldOblique","ZapfDingbats","getFont","getImage","getOpacityGS","forStroke","gs","_opacityGSCache","txt","escape","compress","pako","deflate","Length","pagesObj","Pages","Kids","Count","pageObj","BaseFont","Encoding","_pdf","_font","_sub","stemV","isSerif","isScript","getTextWidth","descendant","unimap","unimapStream","sub","fontStream","Length1","FontName","FontBBox","Flags","StemV","ItalicAngle","Ascent","Descent","CapHeight","XHeight","FontFile2","charWidths","chunk","CIDSystemInfo","Registry","Ordering","Supplement","FontDescriptor","FirstChar","LastChar","DW","W","CIDToGIDMap","_makeCidToGidMap","DescendantFonts","ToUnicode","unicode","_rcount","_textMode","_fontResources","_gsResources","_xResources","_patResources","_shResources","_opacity","_annotations","_fontSize","_contextStack","ProcSet","Font","XObject","Pattern","Annots","sx","sy","_requireTextMode","_requireFont","setTextLeading","requestedWidth","outputWidth","showTextNL","uri","ll","_toPage","ur","Border","A","URI","sname","oname","dashPhase","setMitterLimit","mitterLimit","_context","bezier1","bezier2","ellipse","_X","_Y","closeStroke","serif","serif|bold","serif|italic","serif|bold|italic","sans-serif","sans-serif|bold","sans-serif|italic","sans-serif|bold|italic","monospace","monospace|bold","monospace|italic","monospace|bold|italic","zapfdingbats","zapfdingbats|bold","zapfdingbats|italic","zapfdingbats|bold|italic","fillAndClip","strokeAndClip","fillStrokeClip","dashDot","longDash","longDashDot","longDashDotDot","solid","butt","miter","bevel","Document","PDFMixin","saveAsPDF","_drawPDF","_drawPDFShadow","pageNumber","drawOptions","defer","groupCells","stringifyAttributes","reorder","lockedContent","attachCustomCommandEvent","commandName","normalizeColumns","addHiddenStyle","footerAttributes","headerAttributes","columnParent","columnParents","setColumnVisibility","removeHiddenStyle","isCellVisible","visibleColumns","toJQuery","updateCellRowSpan","sourceLockedColumnsCount","lockedColumnDepth","nonLockedColumnDepth","nonLockedColumns","moveCellsBetweenContainers","sources","leafs","sourcesDepth","targetDepth","addRowSpanValue","moveCells","updateCellIndex","columnPosition","sourcePosition","columnVisiblePosition","ths","cellCounts","findParentColumnWithChildren","rtl","findReorderTarget","parentColumns","flatColumnsInDomOrder","flatColumns","hiddenLeafColumnsCount","columnsWidth","cols","colWidth","removeRowSpanValue","removeEmptyRows","emptyRowsCount","mapColumnToCellRows","visibleNonLockedColumns","visibleLockedColumns","visibleLeafColumns","leafDataCells","indexAttr","indexA","indexB","parentColumnsCells","parentCellsWithChildren","prevCells","childColumnsCells","colSpanAttr","appendContent","tbodySupportsInnerHtml","normalizeCols","hasDetails","normalizeHeaderCells","th","convertToObject","formatGroupValue","columnValues","isForeignKey","setCellVisibility","nonDataCellsRegExp","hideColumnCells","columnIndex","groupRows","groupFooters","showColumnCells","updateColspan","toAdd","toRemove","tableWidth","syncTableHeight","table1","table2","lockedHeigth","tableHeigth","filterRowRegExp","adjustRowHeight","row1","row2","offsetHeight1","offsetHeight2","getCommand","focusTable","direct","setActive","isColumnEditable","isInputElement","tableClick","isHeader","lockedTable","headerTable","lockedHeader","isInput","currentTable","_setCurrent","navigatable","isInEdit","groupRowBuilder","colspan","groupRowLockedContentBuilder","DATA_CELL","SELECTION_CELL_SELECTOR","NAVROW","NAVCELL","FIRSTNAVITEM","HEADERCELLS","EDIT","SAVE","REMOVE","DETAILINIT","FILTERMENUINIT","COLUMNMENUINIT","COLUMNHIDE","COLUMNSHOW","SAVECHANGES","DATABOUND","DETAILEXPAND","DETAILCOLLAPSE","NORECORDSCLASS","COLUMNRESIZE","COLUMNREORDER","COLUMNLOCK","COLUMNUNLOCK","DELETECONFIRM","NORECORDS","CONFIRMDELETE","CANCELDELETE","templateHashRegExp","whitespaceRegExp","COMMANDBUTTONTMPL","isIE7","VirtualScrollable","verticalScrollbar","_scroll","delayLoading","rowHeight","_rangeStart","isScrollingUp","_scrollbarTop","firstItemIndex","lastItemIndex","_scrollTop","_scrolling","_scrollingTimeout","rangeStart","scrollIntoView","containerHeight","containerScroll","scrollingUp","currentSkip","fetching","prefetchAt","_fetching","repaintScrollbar","wrapperElement","addScrollBarHeight","totalHeight","defaultCommands","imageClass","edit","canceledit","Grid","_tbody","_pageable","_thead","_groupable","_toolbar","_setContentHeight","_navigatable","_selectable","_clipboard","_details","_attachCustomCommandsEvent","_minScreenSupport","_groups","groupable","virtualScrollable","toolbar","allowCopy","pageable","rowTemplate","altRowTemplate","noRecords","reorderable","columnMenu","detailTemplate","columnResizeHandleWidth","cancelDelete","confirmation","confirmDelete","_destroyColumnAttachments","_navigatableTables","pager","kendoGroupable","clearArea","copyHandler","updateClipBoardState","clearAreaHandler","_resizeUserEvents","_resizeHandleDocumentClickHandler","_destroyEditable","_removeLockedContainers","minScreenResizeHandler","_draggableInstance","lockedRowTemplate","lockedAltRowTemplate","lockedGroupFooterTemplate","noRecordsTemplate","scrollables","lockedFooter","_groupableClickHandler","_setContentWidthHandler","getOptions","initialData","mobileWrapper","_cellId","_hasDetails","_createResizeHandle","headerWrap","ieCorrection","firefoxCorrection","indicatorWidth","_autoFitLeafColumn","_positionColumnResizeHandle","lockedHead","getPageZoomStyle","bodyZoom","docZoom","winScrollLeft","_resizeHandleDocumentClick","_hideResizeHandle","_positionColumnResizeHandleTouch","columnStart","columnWidth","columnMinWidth","gridWidth","isLocked","isMobile","contentTable","minResizableWidth","totalWidth","rtlMultiplier","currentWidth","_footerWidth","resizeend","oldWidth","_applyLockedContainersWidth","_syncLockedContentHeight","_syncLockedHeaderHeight","_reorderable","targetParentContainerIndex","kendoReorderable","lockable","reorderColumn","_reorderHeader","sourceLockedColumns","targetLockedColumns","destPosition","_reorderContent","footerCol","lockedRows","visibleSources","destIndex","colSourceIndex","colDest","headerCol","_hasFilterRow","leafIndex","autoFitColumn","contentDiv","footerTable","oldColumnWidth","newColumnWidth","visibleLocked","notGroupOrHierarchyCol","notGroupOrHierarchyVisibleCell","lockChanged","sourceColumns","destColumn","_updateColumnCellIndex","_updateTablesWidth","_updateFirstColumnClass","td","lockedColumnOffset","_modelForContainer","_editMode","_editContainer","closeCell","isLockedCell","editCell","editRow","removeRow","_confirmation","_attachModelChange","kendoEditable","_relatedRow","_adjustLockedHorizontalScrollBar","_adjustRowsHeight","_syncLockedFooterHeight","editView","_editCancelClickHandler","_editUpdateClickHandler","_detachModelChange","_destroyEditView","_actionSheet","_modelChangeHandler","_modelChange","isCancel","_displayCell","storage","templateSettings","tmpl","_cellTmpl","_removeRow","cancelRow","_createPopupEditor","_createInlineEditor","_editCancelClick","_editUpdateClick","saveRow","currentIndex","updateText","cancelText","tempCommand","_createButton","kendoWindow","_openPopUpEditor","_editAnimation","_displayRow","newRow","angularElements","angularData","isAlt","_showMessage","actionSheet","_actionSheetPopupOptions","confirm","saveChanges","addRow","createAt","_firstEditableColumnIndex","_toolbarTmpl","attributeClassMatch","_hasFooters","collapseGroup","expandGroup","_isLocked","_attachGroupable","_continuousItems","lockedItems","nonLockedItems","notString","copySelection","areaClipBoard","getTSV","Event","getSelection","cellsOffset","lockedCols","inLockedArea","rowsOffset","delimeter","onlyVisible","cellText","any","hideMinScreenCols","_iterateMinScreenCols","minScreenWidth","clearSelection","_updateCurrentAttr","headerId","_scrollCurrent","tableContainer","isInLockedContainer","isInContent","scrollableContainer","_rowVirtualIndex","_scrollTo","preventTrigger","_removeCurrent","elementToLowercase","elementOffsetDir","containerOffsetDir","offsetLeft","dataTables","headerTables","_openHeaderMenu","_tableFocus","_tableBlur","_tableKeyDown","_setTabIndex","requestInProgress","canHandle","_moveUp","_moveDown","_moveRight","_moveLeft","_handlePageDown","_handlePageUp","_handleEnterKey","_handleEscKey","_handleTabKey","collapseRow","_prevHorizontalCell","_horizontalContainer","expandRow","_nextHorizontalCell","_prevVerticalCell","_verticalContainer","_nextVerticalCell","isInCell","_tabNext","_handleEditing","_toggleCurrent","originalIndex","_currentDataIndex","lockedColumnsCount","switchRow","isEdited","editContainer","triggerHandler","_initMobile","_scrollable","hasVirtualScroll","_averageRowHeight","_renderNoRecordsContent","noRecordsElement","_setContentWidth","expander","hiddenDivClass","hiddenDiv","footerWrap","nonLockedCols","nonLockedColsWidth","isGridHeightSet","initialHeight","currentRowHeight","_rowHeight","_sum","_measures","_requestStart","_error","_progress","relatedRow","selectableRow","childCells","originalCells","_wrapFooter","_appendLockedColumnFooter","footerRow","_appendCols","_columnMenu","menuOptions","hasMultiColumnHeaders","initCallback","sortHandler","filterHandler","kendoColumnMenu","_headerCells","_filterable","columnFilterable","filterInit","kendoFilterMultiCheck","kendoFilterMenu","_filterRow","rowheader","suggestDataSource","customDataSource","cellOptions","_updateHeader","inputWidth","suggestionOperator","showOperators","kendoFilterCell","_sortable","sorterInstance","kendoColumnSorter","initialColumns","_tmpl","alt","skipGroupCells","_headerCellText","columnLeafs","columnsLocked","_detailTmpl","_footerTmpl","_noRecordsTmpl","scrollableNoGridHeightStyles","templateName","rowClass","fieldsMap","templateFunctionStorage","templateFunctionCount","hasFiltering","columnsWithoutFiltering","detailRow","masterRow","detailCell","correctIdx","classesRegEx","sectionRowIndex","_createHeaderCells","_appendLockedColumnContent","spanIdx","skipHiddenCount","colOffset","lockedCells","_appendLockedColumnHeader","trFilter","hasFilterRow","filterCellOffset","filterCells","leafColumnsCount","filtercellCells","filterRow","existingFilterRow","syncHeight","hasLockedColumns","hasTHead","_prepareColumns","_updateCols","_retrieveFirstColumn","_updateHeaderCols","_updateLockedCols","_autoColumns","_rowsHtml","_groupRowHtml","groupHeaderBuilder","skipColspan","footerData","footerDefaults","_groupAggregatesDefaultObject","headerData","groupItems","showFooter","footerCount","relatedGroup","toHide","footersVisibility","groupsCount","_firstDataItem","grouped","headerCellIndex","_setParentsVisibility","_isActiveInTable","isCurrentInHeader","_renderContent","_renderLockedContent","_restoreCurrent","_cleanupDetailItems","_angularGroupItems","_angularGroupFooterItems","rows2","containersLength","heights","_drawPDF_autoPageBreak","startingPage","renderPage","origBody","_initPDFProgress","exportPage","kendoProgressBar","DATABINDING","FOCUSSELECTOR","KEDITITEM","ListView","_itemId","_crudHandlers","altTemplate","editTemplate","_item","pagerId","scrollDirectionFunc","UseJQueryoffset","elementDimension","containerScrollAmount","containerDimension","clickCallback","focusAgain","isTextBox","editItem","_modelFromElement","_closeEditable","clickNS","getFileName","inputFiles","$input","files","getAllFileInfo","stripPath","extension","getFileExtension","rawFiles","getFileInfo","rawFile","fileSize","rFileExtension","slashIndex","assignGuidToFiles","validateFiles","validationInfo","allowedExtensions","parseAllowedExtensions","maxFileSize","minFileSize","validateFileExtension","validateFileSize","extensions","ext","parsedExt","validationErrors","INVALIDFILEEXTENSION","INVALIDMINFILESIZE","INVALIDMAXFILESIZE","getTotalFilesSizeMessage","totalSize","shouldRemoveFileEntry","upload","removeUploadedFile","fileEntry","eventArgs","shouldSendRemoveRequest","fileNames","_supportsRemove","_removeFileEntry","_submitRemove","textStatus","tryParseJSON","onSuccess","normalizeJSON","stopEvent","bindDragEventWrappers","onDragEnter","onDragLeave","hideInterval","lastDrag","sinceLastDrag","isFileUploadStarted","getFileEntry","iframeUploadModule","formDataUploadModule","UPLOAD","CLEAR","VALIDATIONERRORS","PROGRESSHIDEDELAY","PROGRESSHIDEDURATION","headerStatusIcon","Upload","activeInput","initialFiles","localization","_wrapInput","_activeInput","_onParentFormSubmit","_onParentFormReset","async","saveUrl","_module","_supportsFormData","_async","_renderInitialFiles","syncUploadModule","_supportsDrop","dropZone","_setupCustomDropZone","_setupDropZone","_onFileAction","_onClearSelected","_onUploadSelected","_onInputChange","showFileList","removeVerb","autoUpload","withCredentials","retry","clearSelectedFiles","uploadSelectedFiles","dropFilesHere","statusUploading","statusUploaded","statusWarning","statusFailed","headerStatusUploading","headerStatusUploaded","invalidMaxFileSize","invalidMinFileSize","invalidFileExtension","_supportsMultiple","customDropZone","onSaveSelected","getFiles","filesData","allFiles","listItems","clearAllFiles","_removeFileByDomElement","removeAllFiles","removeFileByUid","_removeFileByUid","clearFileByUid","clearFile","_removeFile","removeFile","fileData","onRemove","_hideHeaderUploadstatus","_updateHeaderUploadStatus","_addInput","sourceInput","_onInputKeyDown","firstButton","_inputFiles","_isAsyncNonBatch","onSelect","_onDrop","dt","dataTransfer","droppedFiles","_filesContainValidationErrors","hasErrors","currentFile","_enqueueFile","_fileAction","_prepareTemplateData","templateData","_prepareDefaultSingleFileEntryTemplate","_prepareDefaultMultipleFileEntriesTemplate","filesHaveValidationErrors","totalFileSize","existingFileEntries","removeEventArgs","fileUid","fileList","allCompletedFiles","allInvalidFiles","_hideUploadButton","fileElement","actionKey","classDictionary","iconsClassDictionary","_clearFileAction","_renderAction","_fileState","stateKey","states","uploading","uploaded","failed","currentState","actionClass","actionText","hasValidationErrors","_checkAllComplete","onRetry","clearEventArgs","_onFileProgress","percentComplete","progressPct","_onUploadSuccess","_setUploadErrorState","_hideUploadProgress","_onUploadError","uploadPercentage","_showUploadButton","uploadButton","_showHeaderUploadStatus","isUploading","headerUploadStatus","failedUploads","headerUploadStatusIcon","currentlyUploading","currentlyInvalid","onAbort","FormData","_userAgent","isChrome","isSafari","isWindowsSafari","_bindDocumentDragEventWrappers","removeUrl","removeField","dataFilter","traditional","xhrFields","filesContainErrors","relatedInput","iframes","_frameId","prepareUpload","performUpload","saveField","createFrame","registerFrame","createForm","frame","dataInput","cleanupFrame","unregisterFrame","onIframeLoad","module","started","processResponse","fakeXHR","jsonResult","statusText","stopFrameSubmit","execCommand","sourceElement","fileEntries","enqueueFiles","filesLength","formData","createFormData","createXHR","removeFileEntry","populateFormData","postFormData","stopUploadRequest","onRequestSuccess","onRequestError","onRequestProgress","setRequestHeader","raiseError","cleanupFileEntry","uploadComplete","concatPaths","sizeFormatter","suffix","FileBrowser","SearchBox","Breadcrumbs","trimSlashesRegExp","APPLY","BREADCRUBMSNS","SEARCHBOXNS","NAMEFIELD","SIZEFIELD","TYPEFIELD","DEFAULTSORTORDER","EMPTYTILE","TOOLBARTMPL","filebrowser","_call","_deleteClick","_addClick","_directoryKeyDown","_directoryBlur","uploadFile","orderByName","orderBySize","directoryNotFound","emptyFolder","deleteFile","invalidFileType","overwriteFile","fileTypes","_selectedItem","fileUrl","encodeURIComponent","arrangeBy","showUpload","uploadUrl","showCreate","showDelete","kendoUpload","_fileUpload","_attachDropzoneEvents","_dropEnter","_dropLeave","_scrollHandler","_positionDropzone","_removeDropzone","createDirectory","_getFieldName","filterRegExp","fileNameField","_createFile","_insertFileToList","_tiles","_findFile","typeField","nameField","_override","lastDirectoryIdx","_nameDirectory","_nameExists","directoryNames","_dblClick","_itemTmpl","_editTmpl","_listViewChange","breadcrumbs","typeSortOrder","nameSortOrder","_navigation","navigation","kendoBreadcrumbs","searchBox","kendoSearchBox","_path","_updateValue","_toggleLabel","_rootClick","_adjustSectionWidth","trail","ImageBrowser","imagebrowser","_uploading","_loadImage","thumbnailUrl","urlJoin","viewTop","viewBottom","updateTabClasses","tabs","ACTIVESTATE","TABONTOP","tabGroup","scrollButtonHtml","buttonClass","CONTENT","CONTENTURL","NAVIGATABLEITEMS","HOVERABLEITEMS","contentAttributes","contentUrl","TabStrip","_contentUrls","contentUrls","_tabPosition","_keyDownProxy","contentHolder","activateTab","_endItem","endItem","focused","tab","dataContentField","dataContentUrlField","dataImageUrlField","dataUrlField","dataSpriteCssClass","tabPosition","scrollWrap","_scrollableModeActive","_scrollPrevButton","_scrollNextButton","ajaxRequest","_create","_updateContentElements","_appendUrlItem","_moveUrlItem","_removeUrlItem","referenceTab","referenceContent","fromIndex","newTabsCreated","activeItem","activeTab","contentElements","_elementId","tabStripID","elementId","wrapperId","isInitialUpdate","currentContent","contentAnimators","tabsHeight","_setContentElementsDimensions","contentDivs","activeDiv","marginStyleProperty","_sizeScrollWrap","isAnchor","deactivateTab","wrapperOffsetWidth","tabGroupScrollWidth","scrollPrevButton","scrollNextButton","mouseDown","mouseUp","_scrollableAllowed","_nowScrollingTabs","_scrollTabsByDelta","_toggleScrollButtons","_scrollTabsToItem","itemPosition","currentScrollOffset","itemOffset","tabGroupWidth","tabGroupPadding","scrLeft","animationSettings","hasCloseAnimation","neighbours","oldTab","visibleContents","isAjaxContent","showContentElement","showContent","inRequest","fakeProgress","statusIcon","endState","oldProgressAnimation","ajaxOptions","ajaxSettings","request","progressUpload","evt","noProgress","lengthComputable","stopProgress","tabStrip","UndoRedoStack","currentCommandIndex","undo","canUndo","redo","canRedo","Tool","FormatTool","bomFill","emptyElementContent","emptyTableCellContent","SELECT_OVERLAY_SELECTOR","ToolTemplate","getHtml","EditorUtils","editorWrapperTemplate","buttonTemplate","colorPickerTemplate","comboBoxTemplate","dropDownListTemplate","separatorTemplate","overflowAnchorTemplate","formatByName","tags","getToolCssClass","toolCssClassNames","superscript","subscript","justifyLeft","justifyCenter","justifyRight","justifyFull","insertUnorderedList","insertOrderedList","import","outdent","createLink","unlink","insertImage","insertFile","viewHtml","foreColor","backColor","createTable","addColumnLeft","addColumnRight","addRowAbove","addRowBelow","deleteRow","deleteColumn","tableWizard","tableWizardInsert","cleanFormatting","registerTool","toolName","tool","toolOptions","Editor","defaultTools","registerFormat","formatName","strikethrough","fontName","fontNameInherit","fontSizeInherit","formatBlock","formatting","editAreaTitle","imageWebAddress","imageAltText","imageWidth","imageHeight","fileWebAddress","fileTitle","linkWebAddress","linkText","linkToolTip","linkOpenInNewWindow","dialogUpdate","dialogInsert","dialogOk","dialogCancel","createTableHint","tableTab","cellTab","accessibilityTab","caption","summary","cellSpacing","cellPadding","cellMargin","collapseBorders","wrapText","associateCellsWithHeaders","alignLeft","alignCenter","alignRight","alignLeftTop","alignCenterTop","alignRightTop","alignLeftMiddle","alignCenterMiddle","alignRightMiddle","alignLeftBottom","alignCenterBottom","alignRightBottom","alignRemove","selectAllCells","exportAs","supportedBrowser","contentEditable","toolGroups","basic","lists","indenting","toolbarContainer","toolbarOptions","editorNS","Dom","tools","_registerHandler","_wrapTextarea","Toolbar","bindTo","heightStyle","expectedHeight","actualHeight","_initializeContentElement","keyboard","Keyboard","BackspaceHandler","TypingHandler","SystemHandler","SelectAllHandler","Clipboard","undoRedoStack","textarea","_endTyping","_initializeImmutables","isTypingInProgress","endTyping","saveSelection","_selectionChange","_selectionStarted","isResizable","kendoResizable","newSize","getKendoResizable","_initializeTableResizing","TableResizing","_showTableResizeHandlesProxy","_showTableResizeHandles","_destroyTableResizing","tableResizing","showResizeHandles","_initializeColumnResizing","ColumnResizing","_destroyColumnResizing","columnResizing","_initializeRowResizing","RowResizing","_destroyRowResizing","rowResizing","editorWrap","editArea","_createContentElement","stylesheets","specifiedDomain","domain","domainScript","hostname","frameBorder","contentWindow","contentDocument","decorateFrom","_oldValue","encodedValue","_spellCorrect","beforeCorrection","falseTrigger","contextmenu","_spellCorrectTimeout","RestorePoint","getRange","_finishUpdate","_deregisterHandlers","blurTrigger","mousedownTrigger","keydown","nextChar","toolFromShortcut","keyPressCommand","_runPostContentKeyCommands","keypress","keyup","selectionCodes","cut copy paste","focusin","toolbarContainerElement","preventPopupHide","immutables","Immutables","gecko","toolsFromShortcut","changesContent","_destroyResizings","deserialization","serialization","entities","semantic","scripts","pasteCleanup","keepNewLines","msAllFormatting","msConvertLists","msTags","none","dialogOptions","imageBrowser","fileBrowser","_focusOutside","_destroyUploadWidget","tempInput","_uploadWidget","textNodes","finder","RangeUtils","collapsed","startContainer","getFormat","isFormatted","currentHtml","Serializer","domToXhtml","htmlToDom","selectionRestorePoint","refreshTools","commonAncestorContainer","_focusBody","restoreSelection","toRange","SelectionUtils","selectionFromDocument","removeAllRanges","addRange","rangeCount","getRangeAt","endContainer","_containsRange","isAncestorOrSelf","selectedHtml","cloneContents","InsertHtmlCommand","_range","toolById","managesUndoRedo","ctrl","initialize","commandArguments","FormatCommand","formatter","_bomFill","makeMap","whitespace","emptyspace","bom","whitespaceOrBom","persistedScrollTop","cssAttributes","htmlRe","entityRe","entityTable","STYLE","FLOAT","CSSFLOAT","STYLEFLOAT","CLASS","KMARKER","nonListBlockElements","blockElements","block","inlineElements","fillAttrs","62","160","161","162","163","164","165","166","167","168","169","170","171","172","173","174","175","176","177","178","179","180","181","182","183","184","185","186","187","188","189","190","191","192","193","194","195","196","197","198","199","201","202","203","204","205","206","207","208","209","210","211","212","213","214","215","216","217","218","219","220","221","222","223","224","225","226","227","228","229","230","231","232","233","234","235","236","237","238","239","240","241","242","243","244","245","246","247","248","249","250","251","252","253","254","255","402","913","914","915","916","917","918","919","920","921","922","923","924","925","926","927","928","929","931","932","933","934","935","936","937","945","946","947","948","949","950","951","952","953","954","955","956","957","958","959","960","961","962","963","964","965","966","967","968","969","977","978","982","8226","8230","8242","8243","8254","8260","8472","8465","8476","8482","8501","8592","8593","8594","8595","8596","8629","8656","8657","8658","8659","8660","8704","8706","8707","8709","8711","8712","8713","8715","8719","8721","8722","8727","8730","8733","8734","8736","8743","8744","8745","8746","8747","8756","8764","8773","8776","8800","8801","8804","8805","8834","8835","8836","8838","8839","8853","8855","8869","8901","8968","8969","8970","8971","9001","9002","9674","9824","9827","9829","9830","338","339","352","353","376","710","732","8194","8195","8201","8204","8205","8206","8207","8211","8212","8216","8217","8218","8220","8221","8222","8224","8225","8240","8249","8250","8364","findNodeIndex","skipText","isDataNode","isAncestorOf","findClosestAncestor","getNodeLength","splitDataNode","newNode","denormalizedText","deleteData","attrEquals","blockParentOrBody","parentOfType","blockParents","windowFromDocument","parentWindow","nodeTypes","ELEMENT_NODE","ATTRIBUTE_NODE","TEXT_NODE","CDATA_SECTION_NODE","ENTITY_REFERENCE_NODE","ENTITY_NODE","PROCESSING_INSTRUCTION_NODE","COMMENT_NODE","DOCUMENT_NODE","DOCUMENT_TYPE_NODE","DOCUMENT_FRAGMENT_NODE","NOTATION_NODE","encodableChars","entity","isBom","stripBom","stripBomNode","insignificant","_moz_dirty","_moz_editor_bogus_node","tableCell","significantNodes","emptyTextNode","emptyNode","significantChildNodes","isWhitespace","lastTextNode","isMarker","allWhitespaceContent","isEmptyspace","htmlIndentSpace","isPrevBlock","isNextBlock","isBlock","isInline","compatMode","elementTop","persistScrollTop","restoreScrollTop","newElement","referenceElement","removeTextSiblings","closestBy","condition","rootCondition","ofType","changeTag","skipAttributes","editableParent","unstyle","inlineStyle","getEffectiveBackground","backgroundStyle","classNames","commonAncestor","ancestors","minPathLength","closestSplittableParent","editableParents","editableAncestor","closestEditable","closestEditableOfType","filterFn","filterBy","ensureTrailingBreaks","ensureTrailingBreak","removeTrailingBreak","supportsLeadingWhitespace","TD","fontSizeMappings","quoteRe","brRe","pixelRe","emptyPRe","cssDeclaration","sizzleAttr","scriptAttr","onerrorRe","toEditableHtml","_toEditableImmutables","immutable","_fillEmptyElements","_removeSystemElements","_resetOrderedLists","originalStart","ols","_preventScriptExecution","legacyIE","originalSrc","originalHref","deserialize","semanticFilter","cssProperties","styleAttr","specifiedAttributes","$node","skipEncoding","isEmptyBomNode","mapper","jqNode","tagMap","textOnly","childrenCount","runCustom","k:script","semanticAttributes","textDecoration","strong","em","script","compareBoundaries","startAncestor","endAncestor","fixIvalidRange","toStart","isInvalidRange","updateRangeProperties","textRangeContainer","textRange","adoptContainer","cursorNode","textOffset","isData","anchorNode","moveToElementText","adoptEndPoint","comparison","appended","compareEndPoints","RangeIterator","W3CSelection","RangeEnumerator","ImmutablesRangeIterator","ImmutablesRangeEnumerator","Marker","boundary","selectionFromWindow","selectionFromRange","rangeDocument","documentFromRange","W3CRange","setStartAfter","setEndAfter","deleteContents","cloneRange","deleteSubtree","hasPartialSubtree","getSubtreeIterator","cloneSubtree","frag","createDocumentFragment","extractSubtree","originalRange","insertNode","startNodeName","endNodeName","fromNode","_next","hasNext","nodeIndex","inStartContainer","inEndContainer","getSubRange","subRange","movedStart","movedEnd","enumerate","visit","rootNode","getEditable","nodeToPath","serializedImmutables","removeImmutables","restoreImmutables","lastType","restoreHtml","toRangePoint","denormalizedOffset","addCaret","removeCaret","containerIndex","textNode","rangeBoundary","isExpandable","_removeDeadMarkers","_normalizedIndex","shouldNormalizeStart","shouldNormalizeEnd","shouldNormalize","collapsedToStart","startParent","endParent","editableTextNodes","immutableParent","partition","partitionRange","mapAll","mapped","getAll","getMarkers","isStartOf","isEndOf","wrapSelectedElements","isEnd","startEditable","endEditable","beforeCaret","afterCaret","finishUpdate","startRestorePoint","endRestorePoint","GenericCommand","PREVIOUS_SIBLING","Command","restorePoint","lockRange","releaseRange","createDialog","expandImmutablesIn","genericCommand","postProcess","InsertHtmlTool","_selectBox","SelectBox","selectbox","tableCells","tableCellsWrappers","tableElements","inTable","RemoveTableContent","cellsTypes","startCell","endCell","_removeContent","forwards","getNext","removeTableContent","backspaceHandler","isTypingKey","immutablesContext","deleteSelection","startTyping","_addCaret","_restoreCaret","_handleDelete","_cleanBomBefore","_handleBackspace","ListFormatter","_handleSelection","ancestor","emptyParagraphContent","_handleImmutables","_surroundFullySelectedAnchor","_join","startImmutable","endImmutable","_mergeWithTextNode","appendedNode","_isCaret","backspace","del","systemCommandIsInProgress","createUndoCommand","isModifierKey","isSystem","_toSelectableImmutables","_selectEditorBody","typingInProgress","isCharacter","_getShortcutModifier","mac","matchesKey","matchKey","toolKey","onEndTyping","stopTyping","what","cleaners","ScriptCleaner","TabCleaner","MSWordFormatCleaner","WebkitFormatCleaner","HtmlTagsCleaner","HtmlAttrCleaner","HtmlContentCleaner","CustomCleaner","htmlToFragment","fragment","_startModification","_inProgress","_endModification","modificationInfo","_contentModification","_removeBomNodes","_onBeforeCopy","oncopy","oncut","_fileToDataURL","File","getAsFile","readAsDataURL","_triggerPaste","_handleImagePaste","clipboardData","onpaste","clipboardRange","clipboardNode","_decoreateClipboardNode","_moveToCaretPosition","clean","borderWidth","fontVariant","fontWeight","nodeOffset","_caretOffset","translateX","translateY","-webkit-transform","rangeChanged","isStartTextNode","prevLength","bomNode","splittableParent","splittable","fragmentsHtml","skipCleaners","applicable","Cleaner","replacements","customReplacements","junkReplacements","convertFontMatch","closing","faceRe","stripEmptyAnchors","listType","listData","startingSymbol","matchSymbol","trimStartText","_guessUnorderedListStyle","_guessOrderedListStyle","_convertToLi","extractListLevels","msoListRegExp","rootMargin","listContainer","listIndex","levelType","blockChildren","lastMargin","levels","removeAttributeNode","createColGroup","convertHeaders","boldedCells","removeParagraphs","paragraphs","removeDefaultColors","spans","firstRow","longestRow","titles","removeFormatting","DomCleaner","cleanDom","collectTags","collectAttr","TextContainer","HtmlTextLines","separators","lines","inlineBlockText","resetLine","appendText","textContainer","appendInlineBlockText","flashInlineBlockText","endLine","il","il1","jl","jl1","DomEnumerator","preventDown","enumerator","buildText","getDefaultSeparators","htmlLines","cleaner","tdCleaner","PrintCommand","print","ExportPdfCommand","initialValue","MOUSEDOWN_NS","InlineFormatFinder","numberOfSiblings","textNodesCount","elementNodesCount","markerCount","findSuitable","sourceNode","findFormat","InlineFormatter","formatNode","formatNodes","consolidate","GreedyInlineFormatFinder","greedyProperty","getInlineCssValue","attributeValue","pair","cssIndex","propertyAndValue","getFormatInner","GreedyInlineFormatter","InlineFormatTool","DelayedExecutionTool","FontTool","cssAttr","domAttr","newRange","ColorTool","_widget","picker","fontStyle","listElements","BlockFormatFinder","suitable","_resolveListsItems","ImmutablesNS","BlockFormatter","imageFormat","imageAttributes","nonImages","applyFormatting","immutableFormat","namedFormat","GreedyBlockFormatter","immutalbeParent","blockFormatter","formatTag","BlockFormatTool","ParagraphCommand","_insertMarker","_moveFocus","focusNode","shouldTrim","startInBlock","endInBlock","_blankAfter","paragraph","heading","rng","parentChildrenLength","NewLineCommand","filler","ListFormatFinder","unwrapTag","isList","isImmutable","containsAny","_parentLists","breakable","applyOnSection","section","pushAncestor","addLastSection","lastSection","sections","lastNodes","ListCommand","ListTool","lastIndexOfRegExp","indexOfRegExp","HTTP_PROTOCOL","protocolRegExp","endLinkCharsRegExp","LinkFormatFinder","LinkFormatter","markers","UnlinkCommand","LinkCommand","_dialogTemplate","dialog","_initialText","_apply","linkUrl","_dialog","textInput","AutoLinkCommand","linkMarker","linkRange","detectedLink","detectLink","_ensureWebProtocol","traverser","LeftDomTextTraverser","cancelAtNode","detection","DomTextLinkDetection","hasProtocol","_hasProtocolPrefix","_prefixWithWebProtocol","UnlinkTool","DomPos","puntuationOptions","puntuationTraverser","_detectEnd","blank","_detectStart","_isLinkDetected","extendOptions","RightDomTextTraverser","_skipStartPuntuation","ii","DomTextTraverser","_traverse","edgeNode","subText","KEDITORFILEURL","KEDITORFILETITLE","FileCommand","showBrowser","applied","keyDown","_fileBrowser","KEDITORIMAGEURL","KEDITORIMAGETITLE","KEDITORIMAGEWIDTH","KEDITORIMAGEHEIGHT","ImageCommand","removeIEAttributes","_imageBrowser","_initSelectOverlay","autoSize","listWidth","_listWidth","selectBox","indentDirection","IndentFormatter","parentList","siblingList","nestedList","mapImmutables","targetNode","listParent","IndentCommand","indentFormatter","OutdentCommand","OutdentTool","isOutdentable","listParentsCount","suitableNodes","ViewHtmlCommand","unwrapListItem","listFormatter","FormattingTool","toFormattingItem","kendoSelectBox","getFormattingValue","_ancestor","CleanFormatCommand","tagsToClean","OVERFLOWANCHOR","toolNamesByCssClass","k-i-sup-script","k-i-sub-script","k-i-align-left","k-i-align-center","k-i-align-right","k-i-align-justify","k-i-list-unordered","k-i-list-ordered","k-i-login","k-i-indent-increase","k-i-indent-decrease","k-i-link-horizontal","k-i-unlink-horizontal","k-i-image","k-i-file-add","k-i-html","k-i-foreground-color","k-i-paint","k-i-table-insert","k-i-table-column-insert-left","k-i-table-column-insert-right","k-i-table-row-insert-above","k-i-table-row-insert-below","k-i-table-row-delete","k-i-table-column-delete","k-i-table-properties","k-i-table-wizard","k-i-clear-css","OverflowAnchorTool","overflowPopup","advanced","overflowFlaseTools","_toggleOverflowStyles","_initOverflowPopup","popupTemplate","focusOverflowPopup","toolGroupFor","isCustomTool","_editor","expandTools","combobox","dropDown","isOpened","inheritText","_toolName","overflowAnchor","description","_appendShortcutSequence","editorElement","editorOffset","editorOptions","_overlaps","toolbarWrapper","toolbarWrapperOffset","toolbarWrapperLeft","toolbarWrapperTop","boxOffset","boxOffsetLeft","boxOffsetTop","localizedText","res","_nativeTools","currentTool","nativeTools","endGroup","groupPosition","startGroup","toolElement","newGroupName","toolConfig","updateGroups","popupElement","attachToolsEvents","enabledButtons","disabledButtons","dropdown","colorpicker","editorTools","focusElement","currentContainer","_executeToolCommand","toolname","_immutablesContext","_updateImmutablesState","uiData","groupUi","uiElement","trackImmutables","toolsToBeUpdated","containerWidth","_refreshWidths","_shrink","_stretch","visibleGroups","_groupsWidth","_visibleGroups","_hideGroup","hiddenGroups","_hiddenGroups","_showGroup","columnTemplate","tableFormatFinder","TableCommand","_tableHtml","columnHtml","insertedTable","PopupTool","twTool","TableWizardTool","TableWizardCommand","insertNewTable","InsertTableTool","tableFromLocation","cellHeight","cellWidth","lastCell","_setTableSize","_exec","_valid","selectedRows","selectedColumns","tableSize","InsertRowCommand","cellCount","InsertColumnCommand","newCell","DeleteRowCommand","DeleteColumnCommand","columnCount","TableModificationTool","defaultExportAsItems","ExportAsCommand","exportType","generateForm","exportAsOptions","valueInput","exportTypeInput","fileNameInput","ExportAsTool","changeHandler","loadingOverlay","ImportCommand","_initializeUploadWidget","importOptions","_onUploadProgress","_onUploadSelect","_onUploadComplete","proxyUrl","getKendoUpload","_removeLoadingOverlay","_initLoadingOverlay","eventType","uploadEvent","_iframeWrapper","lowerBound","upperBound","getScrollBarWidth","calculatePercentageRatio","inPercentages","REGEX_NUMBER_IN_PERCENTAGES","inPixels","REGEX_NUMBER_IN_PIXELS","toPercentages","PERCENTAGE","toPixels","PIXEL","ResizingUtils","MOUSE_ENTER","MOUSE_LEAVE","MOUSE_MOVE","DOT","LAST_CHILD","TABLE","TableElementResizing","_attachEventHandlers","eventNamespace","_destroyResizeHandle","dataAttribute","detectElementBorderHovering","resizingInProgress","handleOptions","tableElement","elementBorderHovered","showResizeHandle","_initResizeHandle","setResizeHandlePosition","setResizeHandleDimensions","setResizeHandleDataAttributes","_attachResizeHandleEventHandlers","_initResizable","_hideResizeMarker","markerClass","_destroyResizable","onResizeStart","onResizeEnd","_disableKeyboard","setResizeHandleDragPosition","_enableKeyboard","_forceResizing","ResizingFactory","resizingName","_destroyResizing","_initResizing","parentTable","resizingType","RESIZE_HANDLE_CLASS","RESIZE_MARKER_CLASS","TBODY","TH","TR","handleWidth","borderOffset","tableBody","scrollTopOffset","scrollLeftOffset","columnWidthOffset","scrollBarWidth","columnLeftOffset","adjacentColumnWidth","handleOffset","initialAdjacentColumnWidth","initialColumnWidth","rtlModifier","initialDeltaX","_setTableComputedWidth","_setColumnsComputedWidth","_resizeColumn","_resizeTopAndBottomColumns","_resizeAdjacentColumns","tableBodyWidth","currentColumnsWidths","topAndBottomColumns","deltaWidth","adjacentColumns","_resizeAdjacentColumn","adjacentColumn","RESIZE_HANDLE_MARKER_WRAPPER_CLASS","handleHeight","rowPosition","tableBodyTopOffset","initialTableHeight","tableBodyHeight","initialStyleHeight","newRowHeight","_setRowsHeightInPixels","_setTableHeight","_setRowsHeightInPercentages","currentRowsHeights","HandlePositioningStrategy","EastPositioningStrategy","NorthPositioningStrategy","NortheastPositioningStrategy","NorthwestPositioningStrategy","SouthPositioningStrategy","SoutheastPositioningStrategy","SouthwestPositioningStrategy","WestPositioningStrategy","DraggingStrategyFactory","HandleDraggingStrategy","HorizontalDraggingStrategy","EastDraggingStrategy","WestDraggingStrategy","VerticalDraggingStrategy","NorthDraggingStrategy","SouthDraggingStrategy","HorizontalAndVerticalDraggingStrategy","NorthEastDraggingStrategy","NorthWestDraggingStrategy","SouthEastDraggingStrategy","SouthWestDraggingStrategy","DRAG_START","DRAG_END","HALF_INSIDE","MOUSE_OUT","EAST","NORTH","NORTHEAST","NORTHWEST","SOUTH","SOUTHEAST","SOUTHWEST","WEST","TableResizeHandle","_addStyles","_initDraggable","_initPositioningStrategy","_initDraggingStrategy","resizableElement","_destroyDraggable","_setPosition","_positioningStrategy","getPosition","_onMouseOver","_onMouseOut","_onDragStart","_onDrag","_onDragEnd","_draggingStrategy","adjustDragDelta","deltaX","initialDeltaY","StrategyFactory","PositioningStrategyFactory","calculatePosition","handleOffsetPosition","applyHandleOffset","scrollOffsetPosition","applyScrollOffset","xAxisAdjustment","yAxisAdjustment","isUndefined","RESIZE_HANDLE_WRAPPER_CLASS","TABLE_CLASS","TABLE_RESIZING_CLASS","COLUMN","ROW","handles","_destroyResizeHandles","appendHandlesTo","_resizeWidth","_resizeHeight","ratioValue","ratioTotalValue","constrainedWidth","styleWidth","parentWidth","_getMaxDimensionValue","_initialElementWidth","_setColumnsWidth","constrainedHeight","styleHeight","currentHeight","parentHeight","hasRowsInPixels","_hasRowsInPixels","_initialElementHeight","dimensionLowercase","parentDimension","parentScrollOffset","isWidthInPercentages","parentColumn","columnsLength","_initResizeHandles","_showResizeHandles","_bindToResizeHandlesEvents","_onResizeHandleDragStart","_onResizeHandleDrag","_onResizeHandleDragEnd","_onResizeHandleMouseOver","_onResizeHandleMouseOut","TableResizingFactory","factory","eventCurrentTarget","isResizeHandleOrChild","complexBlocks","IMMUTABALE","IMMUTABALE_MARKER_SELECTOR","IMMUTABLE_SELECTOR","startImmutableParent","endImmutableParent","editableNodes","randomId","chars","serialized","deletingKey","updateToolOptions","_toHtml","serializationType","isDeleting","shouldCancelEvent","_cancelDeleting","_cancelTyping","cancelDeleting","closestSelectionLi","closestImmutableLi","nextImmutable","_removeImmutable","commonContainer","_nextNode","cellsFormatFinder","reUnit","selectedTable","_sourceTable","_selectedTable","selectedCells","_selectedTableCells","_selectedCells","onDialogClose","parseTable","TableWizardDialog","insertTable","createNewTable","updateTable","lastSelectedRow","cellsLength","newRowsCount","cellProp","tableRows","tableProp","tableProperties","_deleteTableRows","insertRow","_insertCells","deleteCell","_updateTableProperties","cellProperties","_updateCellProperties","_updateCaption","cellsWithHeaders","cellsWithHeadersAssociated","associateCellsWithHeader","_isHeadingRow","associate","isDataRow","generateIds","modifySellsIds","modifyCellsHeadings","isHeadingRow","associatedCells","headingIds","headersAttr","rowParent","cellPropToAll","createTBody","_getStylesData","captionContent","deleteCaption","createCaption","_getAlignmentData","captionAlignment","widthUnit","heightUnit","bgColor","borderColor","borderCollapse","tStyle","captionClone","tableAlignment","tableJson","_getAlignment","_getUnit","parseTableRows","parseCell","cStyle","horizontalOnly","hAlign","TableWizardEditTool","numericTextBoxSettings","units","borderStyles","tableAlignmentDropDownSettings","cellAlignmentDropDownSettings","accessibilityAlignmentDropDownSettings","dialogTemplate","okHandler","collectDialogValues","closeHandler","_initTabStripComponent","_initTableViewComponents","_initCellViewComponents","_initAccessibilityViewComponents","components","kendoTabStrip","_collectTableViewValues","_collectCellViewValues","_collectAccessibilityViewValues","tableView","cellView","accessibilityView","_addUnit","_initNumericTextbox","_initDropDownList","_initTableAlignmentDropDown","_initColorPicker","_initInput","_initCheckbox","_initCellAlignmentDropDown","_initAccessibilityAlignmentDropDown","component","_setComponentValue","_initAlignmentDropDown","kendoColorPicker","_destroyComponents","INPUT_EVENT_NAME","MaskedTextBox","_rules","_tokenize","_togglePrompt","_emptyMask","_timeoutId","_maskLength","clearPromptChar","unmaskOnPost","promptChar","#","L","?","&","C","_unbindInput","_bindInput","_formElement","_submitHandler","unmasked","_unmask","emptyMask","_mask","_propertyChange","_pasting","pasted","backward","chr","chrIdx","tokenIdx","tokensLength","maskChars","adjustPopupWidth","min-width","toggleActive","STATE_ACTIVE","actionSheetWrap","preventClick","findFocusableSibling","Item","ToolBarButton","OverflowButton","ButtonGroup","ToolBarButtonGroup","OverflowButtonGroup","ToolBarSplitButton","OverflowSplitButton","ToolBarSeparator","OverflowSeparator","TemplateItem","OverflowTemplateItem","ToolBar","TOOLBAR","BUTTON","OVERFLOW_BUTTON","TOGGLE_BUTTON","BUTTON_GROUP","SPLIT_BUTTON","SEPARATOR","RESIZABLE_TOOLBAR","STATE_HIDDEN","GROUP_START","GROUP_END","PRIMARY","ICON","ICON_PREFIX","BUTTON_ICON","BUTTON_ICON_TEXT","LIST_CONTAINER","SPLIT_BUTTON_ARROW","OVERFLOW_ANCHOR","OVERFLOW_CONTAINER","FIRST_TOOLBAR_VISIBLE","LAST_TOOLBAR_VISIBLE","TOGGLE","OVERFLOW_OPEN","OVERFLOW_CLOSE","OVERFLOW_NEVER","OVERFLOW_AUTO","OVERFLOW_ALWAYS","OVERFLOW_HIDDEN","KENDO_UID_ATTR","overflowContainer","registerComponent","addOverflowAttr","addUidAttr","addIdAttr","addOverflowIdAttr","isEnabled","twin","useButtonTag","primary","togglable","addToGroup","toggleHandler","propagate","getParentGroup","isChild","_addGraphics","hasIcon","showIcon","overflowHidden","createButtons","buttonConstructor","buttonGroup","mainButton","arrowButton","createMenuButtons","createPopup","splitButton","menuButtons","rootUid","_renderOverflow","overflowUserEvents","_toggleOverflow","_buttonClick","_toggleOverflowAnchor","overflowTool","itemClasses","overflowTemplate","_getItem","toolbarItem","overflowItem","getSelectedFromGroup","horizontalDirection","isComplexTool","hasVisibleChildren","splitContainer","urlTarget","isSplitButtonArrow","lastHasFocus","firstHasFocus","isFirstTool","prevFocusable","isOverflowAnchor","_getPrevFocusable","elementToFocus","prevElement","prevElements","_markVisibles","_childrenWidth","childrenWidth","commandElement","visibleCommands","_hideItem","hiddenCommands","_showItem","overflowItems","toolbarItems","visibleOverflowItems","visibleToolbarItems","PAUSE","PLAY","READY","TIMECHANGE","VOLUMECHANGE","FULLSCREEN_ENTER","FULLSCREEN_EXIT","MUTE","LOW_VOLUME","HIGH_VOLUME","VIDEO_QUALITY","STATE_PLAY","STATE_PAUSE","TITLEBAR","TITLE","TOOLBARWRAP","SLIDER","VOLUME_SLIDER","MEDIA","YTPLAYER","baseTime","timeZoneSec","timeFormats","shortTime","longTime","htmlPlayer","toolBar","youtubePlayer","toolBarTime","slider","volumeSlider","qualityDropDown","toolTip","MediaPlayer","_currentIndex","_createTitlebar","_createToolbar","_createDropDown","_createSlider","_createVolumeSlider","_timers","media","autoPlay","autoRepeat","volume","fullScreen","mute","forwardSeek","pause","unmute","quality","fullscreen","_msToTime","ms","setSeconds","_timeToSec","curTime","_titleBar","sliderElement","_slider","_sliderDragChangeHandler","_sliderDragChange","_sliderDraggingHandler","_sliderDragging","volumeSliderElement","_volumeSlider","_volumeDraggingHandler","_volumeDragging","_volumeChangeHandler","_volumeChange","_resetTime","_youTubeVideo","_ytmedia","seekTo","_media","currentTime","_mediaTimeUpdate","_toolBar","_currentUrl","_isYouTubeUrl","_setPlayerUrl","initialized","oldPlayer","_initializePlayer","_videoOverlay","loadVideoById","_getMediaId","_playStateToggle","cueVideoById","toolBarElement","_toolbarClickHandler","_toolbarClick","class","_volumeButton","_fullscreenButton","_currentTimeElement","_durationElement","_playButton","_playButtonSpan","dropDownElement","_dropDownSelectHandler","_dropDownSelect","_dropDown","muted","isPaused","_isInFullScreen","_isDragging","tzOffset","_sliderChangeFired","_seekBarLastPosition","_preventPlay","_changeVolumeButtonImage","volumeButton","volumeElement","getCurrentTime","timeInMs","_timeFormat","isPlaying","_mediaEnded","_mediaPlay","_mediaReady","_mediaDurationChange","durationTime","getDuration","_isFirstRun","_createYoutubePlayer","_mediaTimeUpdateHandler","_mediaDurationChangeHandler","_ytPlayer","YT","Player","_configurePlayer","onYouTubeIframeAPIReadyRegister","getScript","onYouTubeIframeAPIReady","_youtubeApiReady","_poll","callLater","player","vars","autoplay","wmode","controls","showinfo","_onYouTubePlayerReady","onYouTubePlayerReady","_onPlayerStateChangeHandler","_onPlayerStateChange","onPlayerStateChange","videoId","playerVars","onReady","onStateChange","getIframe","_updateTitle","_paused","setVolume","_uiDisplay","regExp","_mouseClick","_mouseMoveHandler","_mouseMove","_mouseInHandler","_mouseIn","_mouseOutHandler","_mouseOut","_createHtmlPlayer","_mouseClickHanlder","_mediaEndedHandler","_mediaCanPlayHandler","_mediaPlayHandler","ontimeupdate","ondurationchange","oncanplay","onplay","onended","_mouseIdle","animationSpeed","uiElements","_keyDownHandler","_fullscreenHandler","_youtubeApiReadyHandler","_mouseMoveTimer","seek","playVideo","stopVideo","pauseVideo","enterFullScreen","requestFullscreen","webkitRequestFullscreen","mozRequestFullScreen","msRequestFullscreen","cancelFullscreen","webkitCancelFullScreen","mozCancelFullScreen","msCancelFullscreen","exitFullscreen","msExitFullscreen","_volume","isMuted","unMute","getVolume","isEnded","getPlayerState","ended","_mediaData","_fullscreen","_keyDown","isFullScreen","mozFullScreen","webkitIsFullScreen","fsButton","normalizeMeasures","normalizeMembers","normalizeName","accumulateMembers","rootTuple","tuple","buildPath","descriptorsForAxes","tuples","addMissingPathMembers","tupleMembers","firstTuple","getName","tupleToDescriptors","descriptorsForMembers","measures","tupletoSearch","MEASURES","findExistingTuple","createAggregateGetter","measureGetter","aggregatorContext","addEmptyDataItem","fmtValue","ordinal","validateAxis","newAxis","membersCount","adjustDataByColumn","sourceTuples","targetTuples","rowsLength","columnIdx","rowIdx","dataIdx","targetColumnsLength","measuresLength","tupleIndex","adjustDataByRow","normalizeAxis","findDataIndex","memberIndex","mergeTuples","targetMembers","sourceMembers","parsedRoot","equalTuples","toFind","membersLength","addMembers","findParentMember","parentMember","parentPath","parentName","measurePosition","normalizeTupleMeasures","dataIndex","parseSource","measureIndex","prepareDataOnRows","calcIndex","buildDataIndices","prepareDataOnColumns","spliceIndex","baseHierarchyPath","memberName","expandMemberDescriptor","sortDescriptor","sortDescriptorForMember","crossJoin","crossJoinCommand","measureNames","getRootNames","mapNames","rootNames","rootName","rootLength","expandedIdx","uniquePath","parseDescriptors","hierarchyName","serializeMembers","crossJoinCommands","serializeExpression","filterFunctionFormats","serializeFilters","cube","serializeOptions","parentTagName","asArray","memberIdx","captionGetter","unameGetter","levelNameGetter","levelNumGetter","childrenGetter","hierarchyGetter","parentNameGetter","Member","levelName","levelNum","xmlaDiscoverCommands","convertersMap","XmlaTransport","schemaDataReaderMap","xmlaReaderMethods","XmlaDataReader","sortExpr","removeExpr","PivotGrid","htmlNode","createMetadata","tupleName","ColumnBuilder","RowBuilder","ContentBuilder","PivotExcelMixin","STATERESET","ROW_TOTAL_KEY","EXPANDMEMBER","COLLAPSEMEMBER","STATE_EXPANDED","STATE_COLLAPSED","HEADER_TEMPLATE","KPISTATUS_TEMPLATE","KPITREND_TEMPLATE","DATACELL_TEMPLATE","LAYOUT_TABLE","PivotCubeBuilder","_normalizeDescriptors","keyField","_rootTuples","measureAggregators","aggregatorsLength","dimensionsSchema","measureIdx","rootNamesLength","_expandedTuples","currentKeys","memberInfo","expandedNames","accumulatorKeys","_findExpandedMember","_asTuples","rootInfo","expandedInfo","_measuresInfo","rowAxis","aggregateNames","resultFuncs","_toDataArray","measuresInfo","rowKeys","columnKeys","columnKey","columnMeasureNames","rowMeasureNamesLength","rowMeasureNames","rowLength","columnLength","_addData","resultFunc","_matchDescriptors","parentField","expectedValue","_calculateAggregate","totalItem","aggregator","_processColumns","rowTotal","updateColumn","_measureAggregators","defaultAggregate","measureDescriptors","aggregators","_buildGetters","_parseDescriptors","parsedDescriptors","_normalizeFilter","measuresRowAxis","columnDescriptors","rowDescriptors","aggregatedData","rowValue","columnGetters","rowGetters","expandedColumns","expandedRows","hasExpandedRows","rowDescriptor","rowName","columnsInfo","rowsInfo","measuresAxis","axes","PivotTransport","discover","connection","PivotDataSource","cubes","catalogs","hierarchies","_cubeSchema","cubeBuilder","_measuresAxis","_skipNormalize","_axes","uniqueName","defaultHierarchy","restrictions","levelUniqueName","memberUniqueName","schemaData","dataGetter","_rawData","treeOp","childrenCardinality","dimensionUniqueName","hierarchyUniqueName","_clearAxesData","rowsAxisDescriptors","columnsAxisDescriptors","_expandPath","memberToExpand","_lastExpanded","_descriptorsForAxis","_updateLocalData","expandColumn","originalData","_processResult","processedData","columnIndexes","rowIndexes","resultAxis","axisToSkip","hasColumnTuples","_requestData","_rowMeasures","_normalizeTuples","_columnMeasures","_normalizeData","_mergeAxes","newData","_createTuple","buildRoot","_hasRoot","isRoot","sourceAxes","mergedColumns","mergedRows","columnMeasures","rowMeasures","oldRowsLength","newRowsLength","oldColumnsLength","newColumnsLength","_mergeColumnData","_mergeRowData","_addMissingDataItems","metadata","_normalizeOrdinals","lastOrdinal","schemaMeasures","catalogName","cubeName","schemaKPIs","kpis","schemaDimensions","schemaHierarchies","dimensionName","schemaLevels","schemaCubes","schemaCatalogs","schemaMembers","Catalog","originalOptions","displayFolder","defaultFormat","goal","trend","statusGraphic","trendGraphic","defaultMember","orderingProperty","_extend","fault","faultstring","faultcode","ordinalGetter","fmtValueGetter","_mapSchema","xmla","PivotSettingTarget","emptyTemplate","fieldMenu","PivotFieldMenu","setting","kendoSortable","_indexOf","_isKPI","isMeasure","sortExpressions","skipExpr","sortIcon","_sortIcon","columnBuilder","rowBuilder","_bindConfigurator","_createLayout","_columnBuilder","_rowBuilder","_contentBuilder","columnsHeader","rowsHeader","builder","childrenLoaded","maxChildren","configurator","columnHeaderTemplate","rowHeaderTemplate","dataCellTemplate","kpiStatusTemplate","kpiTrendTemplate","measureFields","columnFields","rowFields","dataTemplate","kendoPivotConfigurator","cellInfoByElement","cellInfo","contentBuilder","columnInfo","rowInfo","columnTuple","rowTuple","measuresTarget","rowsTarget","columnsTarget","_headerReflowTimeout","_stateResetHandler","_stateReset","_measureFields","_createSettingTarget","icons","_initSettingTargets","layoutTable","leftContainer","rightContainer","gridWrapper","columnsHeaderTree","rowsHeaderTree","contentTree","_setSectionsWidth","_setSectionsHeight","_columnHeaderReflow","columnTable","leftColumn","measureFieldsHeight","columnFieldsHeight","rowFieldsHeight","columnsHeight","firstRowHeight","secondRowHeight","calculatedWidth","_resetColspan","skipScrollbar","_colspan","_layoutTimeout","_axisMeasures","hasMeasure","columnAxis","_indexes","maxMembers","_colGroup","_rowLength","_buildRows","_normalize","cellIdx","tupleAll","_rowIndex","_row","rowKey","notFirst","measureRow","allCell","cellAttr","nextMember","cellChildren","memberCollapsed","rootLevelNum","maxcolSpan","allRow","firstMemberName","expandIconAttr","tuplePath","hasChild","axisInfo","axisInfoMember","skipChildren","firstEmpty","_buildRow","templateInfo","cellContent","startIdx","PivotExcelExporter","columnHeaderTable","rowHeaderTable","columnHeaderLength","rowHeaderLength","_cells","dataCallback","rowRows","columnHeaderRows","rowHeaderRows","contentRows","columnRows","VISIBILITY","KSTATEHOVER","HierarchicalDragAndDrop","hovered","_hint","hintText","_removeTouchHover","_hintStatus","newStatus","statusElement","dropHint","hoveredItem","itemTop","itemContent","insertOnTop","insertOnBottom","addChild","itemData","allowedContainers","itemFromTarget","_lastHover","dropHintContainer","setStatus","dropPrevented","dropPositionFrom","setValid","newValid","contentChild","templateNoWith","insertAction","indexOffset","nodeData","NODE","_dataSourceMove","moveContents","spriteRe","updateNodeHtml","toggleButton","TreeView","nodeContents","nodeIcon","CHECK","EXPAND","INDETERMINATE","COLLAPSE","KTREEVIEW","ARIADISABLED","isDomElement","inferred","loadOnDemand","_dragging","_syncHtmlAndDataSource","checkChildren","updateIndeterminate","clickableItems","_toggleButtonClick","_checkboxChange","_checkboxClick","_retryRequest","itemCheckbox","uidAttr","expandedAttr","checkboxesEnabled","animationOptions","dragAndDrop","_hintText","statusClass","setStatusClass","destinationNode","dropPosition","triggerDragEnd","dragClue","treeview","fieldAccessor","_fieldAccessor","_checkboxes","groupLength","toggleButtonClass","_bindDataSource","silentRead","requestFailed","fieldBindings","_setChecked","datasource","_setIndeterminate","indeterminate","subnodes","_bubbleIndeterminate","isChecked","_clickTarget","_focusable","clickTarget","_nextVisible","_enabled","skipSelf","wrapperRe","itemRe","nextParent","_expanded","_previousVisible","shouldNavigate","wrapperClasses","groupElement","_nodes","_updateNodeClasses","textWrap","_processNodes","_insertNode","insertCallback","childrenData","updatedGroupLength","nodeHtml","_renderGroup","_updateNodes","setCheckedState","nodeWrapper","isCollapsed","findByUid","_appendItems","_refreshChildren","_refreshRoot","groupHtml","bubble","retryHtml","showProgress","loadingText","_objectOrSelf","referenceDataItem","destTreeview","destDataSource","loadPromise","_toObservableData","loadModel","keepData","prevSibling","findByText","expandPath","proceed","nodeIds","_parentIds","expandTo","findFilters","filterOperator","checkNodes","checkedNodeIds","checkedNodes","filterFields","include","ok","MENUTEMPLATE","_menuOpen","_initFilterForm","filterForm","filterProxy","_filterOperator","_filterValue","_setFilterForm","_clearFilters","_convert","currentMember","includeWindow","WINDOWTEMPLATE","_applyIncludes","_closeWindow","_windowOpen","resultExpression","treeView","rootChecked","existingExpression","_treeViewDataSource","_createTreeView","LABELMENUTEMPLATE","isNonValueFilter","nonValueOperators","findFilterForField","BOOL","ENUM","FilterCell","viewModel","passedOptions","operatorVisible","_clearInProgress","updateDsFilter","initSuggestDataSource","_setInputType","_createOperatorDropDown","_createClearIcon","setAutoCompleteSource","setComboBoxSource","_refreshUI","radioInput","inputName","labelTrue","labelFalse","operatorDropDown","autoComplete","comboBox","manuallyUpdatingVM","mergeResult","updateItemHtml","LINKSELECTOR","ITEM","GROUP","VISIBLEGROUP","ACTIVECLASS","GROUPS","CONTENTS","DISABLEDCLASS","SELECTEDCLASS","SELECTEDSELECTOR","HIGHLIGHTCLASS","ACTIVEITEMSELECTOR","disabledItems","selectableItems","defaultState","itemIcon","PanelBar","_first","_angularCompile","expandMode","_angularCompileElements","_angularCleanup","useAnimation","animBackup","_animating","_addGroupElement","_collapseAllExpanded","_toggleItem","rootItemsHtml","_toggleGroup","tempItem","_updateItems","_hasChildItems","currentNode","panelBar","skipChange","_updateSelected","isReferenceItem","_updateItemsClasses","panels","_updateItemClasses","wrapElement","hasCollapseAnimation","_animationCallback","stopExpand","loadingIconTimeout","ACTIVATE_EVENTS","ResponsivePanel","_toggleHandler","_registerBreakpoint","_mediaQuery","_registerStyle","breakpoint","offsetDiff","dst","midnight","noon","TimeView","TimePicker","ARIA_ACTIVEDESCENDANT","_dates","_timeViewID","_heightHandler","dataBind","_html","msStart","lastIdx","msInterval","startDay","_distinctSelection","selectionIndex","timeView","lastTimeOption","setMinutes","timeFormat","ARIA_OWNS","dateViewParams","timeViewParams","DateTimePicker","_views","_icons","_midnight","_calculateMidnight","dateButtonText","timeButtonText","dateIcon","timeIcon","_timeIcon","secondView","minDateEqual","maxDateEqual","timeViewOptions","rebind","isDateViewVisible","adjustedDate","_timeSelected","isPercentageSize","percentageUnitsRegex","isPixelSize","pxUnitsRegex","isFluid","calculateSize","panePropertyAccessor","triggersResize","splitter","paneConfig","PANE","PaneResizing","horizontalDefaults","verticalDefaults","_createHint","LAYOUTCHANGE","KPANE","PANECLASS","Splitter","_dimension","_keys","decrease","increase","_resizeStep","_initPanes","_addOverlays","_panes","_removeOverlays","_togglePane","_detachEvents","panes","navigationKeys","isResizing","_triggerAction","panesConfig","_initPane","config","arrowType","_updateSplitBar","splitbar","previousPane","nextPane","catIconIf","iconType","prevCollapsible","prevCollapsed","nextCollapsible","nextCollapsed","_updateSplitBars","_removeSplitBars","sizedPanesWidth","sizedPanesCount","freeSizedPanes","freeSizePanesCount","freeSizePaneWidth","alternateSizingProperty","positioningProperty","sizingDomProperty","lastNonCollapsedPane","splitBars","splitBarsCount","sizingProperty","collapsedSize","_addPane","paneElement","referencePane","mousePositioningProperty","previousPaneConfig","nextPaneConfig","prevBoundary","nextBoundary","toPx","prevMinSize","prevMaxSize","nextMinSize","nextMaxSize","ghostPosition","previousPaneNewSize","nextPaneNewSize","fluidPanesCount","buttonKeyTrigger","PopupBox","Alert","kendoAlert","Confirm","kendoConfirm","Prompt","kendoPrompt","tabKeyTrapNS","focusableNodesSelector","TabKeyTrap","KDIALOG","KICONCLOSE","KCONTENTCLASS","KCONTENT","KTITLELESS","KDIALOGTITLE","KDIALOGTITLEBAR","KBUTTONGROUP","KALERT","KCONFIRM","KPROMPT","KTEXTBOX","INITOPEN","OK_CANCEL","okText","overlaySelector","DialogBase","_centerCallback","_center","wrapperTemplate","_createDialog","_defaultFocus","_tabKeyTrap","_triggerInitOpen","_focusDialog","closable","_closeClick","_closeKeyHandler","_setElementMaxHeight","_setElementHeight","paddingBox","elementMaxHeight","_paddingBox","_uiHeight","actionbar","actionbarHeight","titlebarHeight","_waiAriaOverlay","_removeWaiAriaOverlay","_overlayedNodes","jthis","hiddenValue","titleId","_createActionbar","isStretchedLayout","buttonLayout","_addButtons","_normalizeButtonSize","btn","actionClick","_actionClick","actionKeyHandler","_actionKeyHandler","buttonSize","_mergeTextWithOptions","lastButton","closeBtn","actionButtons","_runActionBtn","preventClose","_openAnimationEnd","_initOpenTriggered","_stopCenterOnResize","_closeAnimationEnd","_centerOnResize","_trackResize","trap","Dialog","alertWrapper","_ensureContentId","_ariaDescribedBy","_initFocus","_chooseEntryFocus","alert","confirmDialog","_createPrompt","promptContainer","promptInputContainer","promptDialog","prompt","_keepInTrap","removeTrap","focusableItems","focusableItemsCount","focusedItemIndex","lastFrom","isPrimitive","getItemCount","listScreens","getDefaultItemHeight","mockList","bufferSizes","opposite","listValidator","downThreshold","upThreshold","lastScrollTop","scrollCallback","syncList","webkitTransform","map2","arr1","arr2","ITEMCHANGE","reshift","placeholderTemplate","GROUPITEM","isActivePromise","VIRTUALLIST","LIST","HEADER","VIRTUALITEM","HEIGHTCONTAINER","LISTBOUND","VIRTUAL_LIST_NS","_selectedDataItems","_selectedIndexes","_rangesList","_promisesList","_renderItems","_triggerListBound","oppositeBuffer","mapValueTo","_selectProxy","_clean","_deferValueSet","_selectingValue","_createList","_forcePrefetch","shouldClear","_prefetchByValue","dataView","_dataView","forSelection","mapValueToIndex","mapValueToDataItem","deferredRange","itemCount","existingRange","isEmptyList","_activeDeferred","_getSkip","_findDataItem","_getRange","_getElementByIndex","_focusedIndex","_getElementLocation","_screenHeight","heightContainer","isAlreadySelected","prefetchStarted","_selectDeferred","_getIndecies","_deselectCurrentValues","_listCreated","_getElementByDataItem","_lastScrollTop","hasData","setScreenHeight","yPosition","yDownPostion","screenEnd","_generateItems","_saveInitialRanges","_buildValueGetter","_setHeight","getList","_listItems","_whenChanged","_reorderList","padHeight","lastRequestedRange","lastRangeStart","flatGroups","flatGroup","_getterDeferred","_indexConstraint","firstVisibleGroup","currentVisibleGroup","firstVisibleDataItemIndex","firstVisibleDataItem","_itemMapper","_currentGroup","_getDataItemsCollection","_listIndex","theValidator","theNew","currentOffset","list2","range2","_bufferSizes","buffers","selectedIndexes","removedindexesCounter","_deselectSingleItem","oldSkip","_clickHandler","firstItem","collect","cellspacing","allDayTable","timesHeader","columnLevelCount","allDaySlot","rowCount","datesHeader","columnLevels","columnLevelIndex","allDayTableRows","lastLevel","dateTableRows","rowLevels","rowLevelIndex","rowspan","allDay","scrollbarWidth","collidingEvents","overlaps","rangeIndex","eventsForSlot","slotStart","slotEnd","createColumns","eventElements","_createColumns","createRows","eventRange","endOverlaps","createDateLayoutConfiguration","configuration","minorTicks","createLayoutConfiguration","resources","resource","dataColorField","groupEqFilter","addSelectedState","selectedStateRegExp","HINT","ResourceView","_timeSlotCollections","_daySlotCollections","addTimeSlotCollection","endDate","_addCollection","addDaySlotCollection","collections","SlotCollection","timeSlotCollectionCount","daySlotCollectionCount","daySlotByPosition","byDate","_slotByPosition","timeSlotByPosition","collectionIndex","slotIndex","slot","nextSlot","horizontalEnd","verticalEnd","timeSlotRanges","_startSlot","_endSlot","_continuousRange","TimeSlotRange","daySlotRanges","isAllDay","DaySlotRange","tail","startSlot","endSlot","slotRanges","isDay","_startTime","_endTime","isMultiDay","_startCollection","startInRange","_endCollection","endInRange","_getCollections","continuousSlot","isDaySlot","firstSlot","lastSlot","upSlot","keepCollection","groupByDateVertically","moveToDaySlot","isFirstCell","_verticalSlot","downSlot","moveToTimeSlot","leftSlot","_horizontalSlot","rightSlot","swapCollection","_collection","multiday","slotByStartDate","slotByEndDate","getSlotCollection","getTimeSlotCollection","getDaySlotCollection","SlotRange","addEvent","outerRect","snap","startSlotDuration","endSlotDuration","innerRect","groupIndex","_slots","_groupIndex","_collectionIndex","allday","addTimeSlot","TimeSlot","addDaySlot","eventCount","DaySlot","Slot","firstChildHeight","firstChildTop","SchedulerView","_normalizeOptions","_resizeHint","_moveHint","_resourcesForGroups","_selectedSlots","setMilliseconds","workDayStart","workDayEnd","_isMobilePhoneView","_addResourceView","resourceView","dateForTitle","selectedDateFormat","shortDateForTitle","selectedShortDateFormat","_changeGroup","_isGroupedByDate","_changeDate","_changeGroupContinuously","_changeViewPeriod","_horizontalSlots","tempSlot","horizontalRange","_isVerticallyGrouped","_normalizeHorizontalSelection","_getNextHorizontalRange","_continuousSlot","_verticalSlots","verticalRange","_normalizeVerticalSelection","_getNextVerticalRange","constrainSelection","slots","verticalByDate","_updateDirection","moveToEventInGroup","selectedEvents","_continuousEvents","moveToEvent","allEvents","uniqueAllEvents","sortedEvents","eventIndex","_getAllEvents","_getUniqueEvents","_getSortedEvents","_getNextEventIndexBySlot","_getStartIdx","_getSelectedSlot","_selectEvents","_selectSlots","eventStartDate","tempIndex","slotStartDate","selectedEventIndex","exists","firstStartDate","secondStartDate","groupEvents","_resourceValue","_resourceBySlot","resourceIndex","groupedResources","_createResizeHint","_removeResizeHint","_removeMoveHint","_shouldInverseResourceColor","resourceColorIsDark","isDark","currentColor","currentColorIsDark","_eventTmpl","eventResources","eventResource","resourceColor","createLayout","allDayIndex","_topSection","_bottomSection","refreshLayout","datesHeaderRows","isSchedulerHeightSet","timesTable","headerHeight","paddingDirection","_createDateLayout","_createColumnsLayout","_groupOrientation","_createRowsLayout","selectionByElement","prevGroupSlot","nextGroupSlot","_eventOptionsForMove","_updateEventForResize","_updateEventForSelection","brightnessValue","addContinuousEvent","lastEvent","getWorkDays","workDays","dayIndex","workWeekStart","workWeekEnd","CURRENT_TIME_MARKER_CLASS","CURRENT_TIME_MARKER_ARROW_CLASS","BORDER_SIZE_COEFF","DAY_VIEW_EVENT_TEMPLATE","DAY_VIEW_ALL_DAY_EVENT_TEMPLATE","DATA_HEADER_TEMPLATE","ALLDAY_EVENT_WRAPPER_STRING","EVENT_WRAPPER_STRING","MultiDayView","_workDays","calculateDateRange","_currentTime","_currentTimeMarkerUpdater","_updateCurrentTimeMarker","timezoneOffset","firstTimesCell","lastTimesCell","currentGroup","utcCurrentTime","slotElement","elementHtml","timesTableMarker","markerTopPosition","timesTableMarkerCss","currentTimeMarker","useLocalTimezone","setUpdateTimer","markerOptions","updateInterval","_currentTimeUpdateTimer","_updateResizeHint","slotIdx","_updateMoveHint","_createEventElement","_appendMoveHint","_groupCount","_columnCountForLevel","_rowCountForLevel","_columnOffsetForResource","_columnCountInResourceView","_timeSlotGroups","groupCount","rowMultiplier","cellMultiplier","timeIndex","_timeSlotInterval","verticalViews","_addTimeSlotGroup","_addDaySlotGroup","_daySlotGroups","showWorkHours","minorTickCount","majorTick","majorTimeHeaderTemplate","minorTimeHeaderTemplate","slotTemplate","allDaySlotTemplate","eventTemplate","allDayEventTemplate","dateHeaderTemplate","showFullDay","showWorkDay","_touchEditable","_mouseEditable","resourceInfo","eventInfo","_addUserEvents","_allDayUserEvents","_editUserEvents","_forTimeRange","middleRow","lastSlotRow","isWorkDay","msMajorInterval","majorTickDivider","isMajorTickRow","isMiddleRow","isLastSlotRow","allDayVerticalGroupRow","appendRow","isVerticalGroupped","dateID","dateGroupIndex","dateIndex","_addCellsToContent","tmplDate","_isWorkDay","allDayHeader","_startDate","_endDate","_allDayHeaderHeight","additioanlWidth","additionalHeight","nextDate","previousDate","_timeSlotIndex","eventStartTime","timeSlotInterval","_slotIndex","_dateSlotIndex","_positionAllDayEvent","slotRange","rowEvents","eventLength","slotWidth","allDayEvents","currentColumnCount","_headerColumnCount","leftOffset","rightOffset","eventHeight","_arrangeColumns","eventRightOffset","columnEvents","slotEvents","_positionEvent","isOneDayEvent","middle","eventEndDate","_time","eventEndTime","singleDay","inverseColor","_isInTimeSlot","slotStartTime","slotEndTime","_date","_isInDateSlot","_updateAllDayHeaderHeight","allDaySlots","_renderEvents","isMultiDayEvent","occurrence","newEnd","dateRange","allDayEventContainer","eventsByResource","eventsPerDate","_eventsByResource","itemIdx","eventsFilteredByResource","columnLevel","rowLevel","endMilliseconds","DayView","WeekView","selectedDate","WorkWeekView","tasks","resourceValue","flattenTaskGroups","flattenGroup","EVENT_WRAPPER_FORMAT","AgendaGroupedView","_getColumns","groupHeaders","_getGroupsInDay","_getSumOfItemsForDate","_renderTaskGroupsCells","headerCells","taskGroupIndex","taskIndex","_renderDateCell","tableRow","tasksGroups","_dateTemplate","_renderDates","_getParents","parentGroups","_getGroupsByDate","_renderTaskGroups","AgendaGroupedByDateView","columnsWithoutDate","_compareDateGroups","tasksGroupIdx","itemsIdx","lastItemValue","groupsInDay","sumOfItemsForDate","groupsRowSpanIndex","isPhoneView","_groupTemplate","sortedArray","_groupsByDate","dateExists","AgendaView","_groupedView","_getGroupedView","delete","_eventTemplate","eventDateTemplate","eventGroupTemplate","_timeTemplate","eventTimeTemplate","_renderLayout","_tasks","eventDurationInDays","task","_createGroupConfiguration","_renderGroups","_eventsList","firstVisibleMonthDay","NUMBER_OF_ROWS","NUMBER_OF_COLUMNS","DAY_TEMPLATE","EVENT_TEMPLATE","MORE_BUTTON_TEMPLATE","MonthGroupedView","_verticalRowCountForLevel","_horizontalGroupCountForLevel","_getCalendarRowsLength","_createRows","horizontalGroupCount","verticalGroupIndex","isVerticallyGrouped","_createRow","_adjustStartDate","_getContent","_getTimeSlotByPosition","_nextSlotStartDate","_createVerticalColumnsLayout","_verticalGroupCount","_horizontalGroupCount","isMobilePhoneView","_positionMobileEvent","_addDaySlotCollections","_changePeriodGroupIndex","_appendResizeHint","_createMoveHint","MonthGroupedByDateView","verticalStart","dateIdx","isLastRow","subColumns","currentSlot","currentTableIndex","currentCellIndex","currentGroupIndex","selectionGroupIndex","MonthView","isSameSlot","isSameCollection","updateDirection","lastGroupIndex","dayTemplate","_firstDayOfMonth","_lastDayOfMonth","verticalGroupIdx","verticalGroupCount","groupedView","_createCalendar","calendarRowsLength","weekStartDates","_slotIndices","_weekStartDates","weekDayNames","eventTop","more","moreButtonHeight","intervalExcess","excess","dayInYear","leapYear","DAYS_IN_LEAPYEAR","DAYS_IN_YEAR","weekInMonth","firstWeekDay","firstWeekLength","normalizeDayIndex","weekDay","normalizeOffset","lastDate","weeksInMonth","skipFirst","skipLast","numberOfWeeks","isInWeek","ruleWeekValues","weekDays","ruleWeekOffset","currentDay","ruleValues","ruleValue","availableRules","parseArray","numberSortPredicate","parseWeekDayList","WEEK_DAYS_IDX","serializeWeekDayList","valueString","WEEK_DAYS","getMonthLength","MONTHS","parseExceptions","exceptions","parseUTCDate","isException","dateTime","toExceptionString","RECURRENCE_DATE_FORMAT","startPeriodByFreq","freq","endPeriodByFreq","eventsByPosition","periodEvents","periodEventsLength","removeExceptionDates","exceptionDates","durationMS","startPeriod","inPeriod","ruleStart","ruleEnd","useEventStart","freqName","eventStartMS","eventStart","currentIdx","parseRule","recurrenceRule","recurrenceException","exdates","frequencies","_startPeriod","kendoDate","_endPeriod","toOccurrence","DATE_FORMATS","parseDateRule","dateRule","tzid","pairs","recur","splits","day1","day2","monthDays","yearDays","weeks","_hasRuleValue","serializeDateRule","ruleString","weekDayCheckBoxes","RECURRENCE_VIEW_TEMPLATE","DAY_RULE","WEEKDAY_RULE","WEEKEND_RULE","BaseRecurrenceEditor","RecurrenceEditor","RECURRENCE_HEADER_TEMPLATE","RECURRENCE_REPEAT_PATTERN_TEMPLATE","RECURRENCE_END_PATTERN_TEMPLATE","RECURRENCE_GROUP_BUTTON_TEMPLATE","MobileRecurrenceEditor","SU","MO","TU","WE","FR","SA","RULE_NAMES","RULE_NAMES_LENGTH","limitation","monthRules","monthLength","monthDay","yearDay","week","weekDayRule","weekDayRules","hourRules","startHours","minuteRules","currentMinutes","secondRules","BaseFrequency","_hour","firstRule","startTimeHours","normalizedCurrentIndex","normalizedStartIndex","frequency","_getNumberOfWeeksBetweenDates","exactWeeks","HourlyFrequency","DailyFrequency","WeeklyFrequency","MonthlyFrequency","YearlyFrequency","hourly","daily","weekly","monthly","yearly","recurrence","_namespace","never","repeatEvery","repeatOn","mobileLabel","offsetPositions","fourth","weekdays","weekday","weekend","_initInterval","_weekDayRule","_weekDay","_weekDayOffset","_weekDayView","weekDayOffset","weekDayValue","weekDayOffsetWidget","_initWeekDay","weekdayMessage","offsetMessage","weekDayInput","dayName","_initWeekDays","_initMonthDay","monthDayInput","_monthDay","_initCount","_count","_initUntil","_until","_initFrequency","_initContainer","_frequency","_initView","ddl","_initMonth","_period","monthInputs","monthName","_month1","_month2","endRule","_toggleEnd","_buttonNever","_buttonCount","_buttonUntil","toggleRule","_toggleMonthDay","_toggleYear","radioButtons","_buttonMonthDay","_buttonWeekDay","enableCount","enableUntil","monthRule","enableMonthDay","enableWeekDay","yearRule","enableMonth1","enableMonth2","_optionTemplate","_pane","_initRepeatButton","_initRepeatEnd","_defaultValue","endTitle","repeatTitle","headerTitle","repeatBy","dayOfMonth","_destroyView","_endFields","_repeatButton","endLabelField","endEditField","_endButton","_endText","frequencyMessages","_initRepeatView","_initEndNavigation","endMessages","_initEndView","viewType","returnViewId","endPattern","weekDaySelect","monthSelect","monthNames","_monthSelect","repeatRuleGroupButton","weekDayView","monthDayView","weekDayName","setColspan","endPosition","rectLeft","rectRight","TimelineView","SCHEDULER_HEADER_WRAP_CLASS","TimelineGroupedView","_hideHeaders","_setColspan","timeColumn","_getRowCount","_getGroupsCount","_addContent","isVerticalGrouped","_addTimeSlotsCollections","datesCount","cellsPerGroup","cellsPerDay","cellOffset","_addTimeSlotToCollection","_getVerticalGroupCount","_getVerticalRowCount","eventGroups","maxRowCount","_renderEvent","eventGroup","adjustedEvent","eventObject","_arrangeRows","_verticalCountForLevel","_horizontalCountForLevel","_updateCurrentVerticalTimeMarker","_adjustLeftPosition","_prevGroupSlot","_nextGroupSlot","_verticalMethod","_isHorizontallyGrouped","_changeVerticalViewPeriod","_changeHorizontalViewPeriod","TimelineGroupedByDateView","isMajorTickColumn","isMiddleColumn","isLastSlotColumn","minorTickColumns","workDateIndex","tempStart","eventObjects","startEnd","eventMinWidth","defaultRowText","_calculateSlotRanges","_slotRanges","isLastMajorSlot","minorTickIndex","timeColumns","minorTickSlots","middleColumn","lastSlotColumn","minorSlotsCount","_setRowsHeight","_positionEvents","eventsForGroup","eventUid","rowsCount","timesRow","eventBottomOffset","_getBottomRowOffset","_refreshSlots","minOffset","maxOffset","slotsCollection","offsetRight","_adjustEvent","adjustedStartDate","adjustedEndDate","clonedEvent","eventDuraton","startRect","TimelineWeekView","TimelineWorkWeekView","TimelineMonthView","timezoneButtonText","startTimezone","endTimezone","appendTimezoneAttr","appendDateCompareValidator","dateCompareRule","validationRules","convertData","wrapDataSerialization","removeUid","getOccurrenceByUid","applyZone","fromZone","toZone","dateCompareValidator","startInput","endInput","startPicker","endPicker","expandAll","trimOptions","createValidationAttributes","datatype","dropDownResourceEditor","descriptionEditor","multiSelectResourceEditor","kendoMultiSelect","multiSelectResourceEditorMobile","moveEventRange","MobileEditor","PopupEditor","Scheduler","defaultViews","SCHEDULER_EXPORT","TimezoneEditor","ZONETITLEOPTIONTEMPLATE","ZONEOPTIONTEMPLATE","MobileTimezoneEditor","input_support","ADD","valueStartEndBoundRegex","EXCEPTION_SEPARATOR","OLD_EXCEPTION_SEPARATOR_REGEXP","RECURRENCE_EXCEPTION","DELETERECURRING","EDITRECURRING","DELETERECURRINGCONFIRM","DELETESERIESCONFIRM","VIEWBUTTONTEMPLATE","TOOLBARTEMPLATE","MOBILETOOLBARTEMPLATE","MOBILEDATERANGEEDITOR","datepicker_role","datetimepicker_role","dateTimeValidate","dateValidate","DATERANGEEDITOR","RECURRENCEEDITOR","kendoRecurrenceEditor","MOBILERECURRENCEEDITOR","kendoMobileRecurrenceEditor","MOBILETIMEZONEPOPUP","noTimezone","TIMEZONEPOPUP","timezoneEditorButton","MOBILETIMEZONEEDITOR","kendoMobileTimezoneEditor","TIMEZONEEDITOR","kendoTimezoneEditor","SchedulerDataReader","SchedulerEvent","fieldTime","updateUid","recurrenceId","isOccurrence","isRecurring","isRecurrenceHead","SchedulerDataSource","_removeExceptionDate","_pushCreated","_addExceptionDate","_removeExceptions","replaceRegExp","newException","timezonePopUp","multipleResources","desktop","toggleDateValidationHandler","_toggleDateValidation","isDateTimeInput","shouldValidate","_initTimezoneEditor","allDayEvent","windows_zones","repeat","recurrenceEditor","_buildEditTemplate","editableFields","separateTimezones","_createEndTimezoneButton","_revertTimezones","_startTimezone","_endTimezone","_actionSheetButtonTemplate","timezoneView","endTimezoneRow","startTimezoneChange","timezoneTitle","_createActionSheetButton","showDialog","buttonIndex","kendoMobileActionSheet","editEvent","removeText","titleText","editorTitle","deleteText","_timezonePopup","getKendoWindow","activator","saveButton","cancelButton","timezonePopup","timezoneEditorTitle","_initModel","_resources","_movable","_bindResize","_createEditor","_unbindResize","eventsCount","sortedData","eventsUids","eventsUidsLength","_groupsByResource","groupsArray","parentFieldValue","prevIndex","fieldValue","selectedGroups","groupsByResource","_selectedEvents","collIdx","dayCollIdx","eventsLength","_createSelection","mouseMoveHandler","selectEvent","isRight","_selectFirstSlot","_ctrlKey","_shiftKey","currentUid","labelFormat","ariaEventLabel","ariaSlotLabel","uids","occurrenceByUid","_moveTimer","_viewByIndex","removeEvent","_adjustSelectedDate","deleteWindowTitle","workWeek","agenda","timeline","timelineWeek","timelineWorkWeek","timelineMonth","recurrenceMessages","deleteWindowOccurrence","deleteWindowSeries","editWindowTitle","editWindowOccurrence","editWindowSeries","_moveDraggable","_resizeDraggable","originSlot","endResources","startResources","updatedEventOptions","eventOptions","_updateEvent","k-resize-e","k-resize-w","k-resize-n","k-resize-s","originalEnd","updateEvent","_preventRefresh","_convertDates","recurrenceHead","updateSeries","updateOccurrence","exception","_showRecurringDialog","editRecurring","occurrenceText","seriesText","_isEditorOpened","deleteRecurringConfirmation","deleteSeriesConfirmation","cancelEvent","_editEvent","saveEvent","_editRecurringDialog","editOccurrence","editSeries","editRecurringMode","_deleteRecurringDialog","_removeEvent","occurrencesInRange","deleteOccurrenceConfirmation","seriesCallback","occurrenceCallback","currentModel","deleteOccurrence","deleteSeries","deleteRecurring","_unbindView","_bindView","_viewRemoveHandler","_viewAddHandler","_viewEditHandler","_viewNavigateHandler","switchWorkDay","_workDayMode","_selectView","_viewActivateHandler","viewButton","viewButtons","_selectedView","_renderView","_selectedViewName","_viewsCount","viewName","_initializeView","isSettings","hasType","formattedDate","formattedShortDate","viewsCount","_showCalendar","hover","slotByPosition","slotByElement","resourcesBySlot","zones_titles","_zonesQuery","_zoneTitleId","_zoneTitlePicker","_zonePicker","_zoneTitle","_zone","zoneTitle","other_zone","_bindZones","zonePicker","zone_value","MAX_DOUBLE_TAP_DISTANCE","eventProxy","_triggerTouch","gestureEventProxy","gestureend","enableSwipe","minXDelta","maxYDelta","maxDuration","doubleTapTimeout","lastTap","_swipestart","_swipemove","createPlaceholders","kendoDomElement","blurActiveElement","kendoDom","kendoTextElement","titleFromField","parentId","orderId","SIZE_CALCULATION_TEMPLATE","listStyles","gridHeader","gridHeaderWrap","gridContent","gridContentWrap","iconCollapse","iconExpand","iconHidden","iconPlaceHolder","resizeHandleInner","dropPositions","dropTop","dropBottom","dropAdd","dropMiddle","dropDenied","dragStatus","dragClueText","GanttList","_domTrees","_adjustHeight","headerCols","tableCols","_reorderDraggable","_tableDropArea","_contentDropArea","_columnResizable","headerTree","calculateRowHeight","domTree","_cols","_ths","tableAttr","_trs","data-field","data-title","_levels","data-uid","data-level","_tds","_td","formatedValue","resourcesField","aria-label","selectedClassName","_setDataSource","iconSelector","finishEdit","_closeCell","_startEditHandler","_columnFromElement","_editCell","_editableContainer","kendoTouch","doubletap","modelCopy","FORMAT","_editableContent","kendoDateTimePicker","cancelUpdate","taskInfo","updateInfo","draggedTask","dropAllowed","allowDrop","taskParent","defineLimits","beforeLimit","afterLimit","defineAction","coordinate","kendoDropTargetArea","positionResizeHandle","colSelector","minColumnWidth","timelineStyles","GanttTimeline","kendoHtmlElement","DBLCLICK","MOUSEMOVE","TIME_HEADER_TEMPLATE","DAY_HEADER_TEMPLATE","WEEK_HEADER_TEMPLATE","MONTH_HEADER_TEMPLATE","YEAR_HEADER_TEMPLATE","RESIZE_HINT","RESIZE_TOOLTIP_TEMPLATE","PERCENT_RESIZE_TOOLTIP_TEMPLATE","TASK_TOOLTIP_TEMPLATE","viewStyles","nonWorking","tasksWrapper","rowsTable","columnsTable","tasksTable","dependenciesWrapper","resourceAlt","taskSingle","taskMilestone","taskSummary","taskWrap","taskMilestoneWrap","resourcesWrap","taskDot","taskDotStart","taskDotEnd","taskDragHandle","taskContent","taskTemplate","taskActions","taskDelete","taskComplete","taskDetails","taskDetailsPercent","iconDelete","taskResizeHandle","taskResizeHandleWest","taskResizeHandleEast","taskSummaryProgress","taskSummaryComplete","lineHorizontal","lineVertical","arrowWest","arrowEast","dragHint","dependencyHint","tooltipWrapper","tooltipContent","tooltipCallout","marquee","marqueeColor","GanttView","_headerTree","_taskTree","taskTree","_taskTemplate","_dependencyTree","dependencyTree","_taskCoordinates","headerRow","_dragHint","_resizeTooltip","_taskTooltip","_percentCompleteResizeTooltip","showWorkDays","hourSpan","slotSize","renderLayout","_createSlots","_tableWidth","_calculateTableWidth","_slotDimensions","_headers","_colgroup","_timeSlots","taskCount","_rowsTable","_columnsTable","_tasksTable","calculatedSize","_contentHeight","_renderCurrentTime","_createTable","slotSpan","slotsCount","totalSpan","isNonWorking","resourcesPosition","resourceStyle","_calculateMilestoneWidth","milestoneWidth","resourcesMargin","_calculateResourcesMargin","taskBorderWidth","_calculateTaskBorderWidth","addCoordinates","taskLeft","taskRight","isMilestone","_taskPosition","_renderTask","_renderResources","currentSpan","maxSpan","boundingClientRect","milestone","taskWrapper","taskElement","progressHandleOffset","dragHandleStyle","taskWrapAttr","_renderSummary","_renderMilestone","_renderSingleTask","dependencyCreate","dragPercentComplete","progressWidth","taskChildren","startLeft","endLeft","slotDuration","slotOffset","endIdx","_timeByPosition","snapToEnd","_renderDependencies","_renderDependency","predecessor","predecessorId","successor","successorId","_renderFF","_dependencyFF","_renderSS","_renderFS","_dependencyFS","_renderSF","overlap","arrowOverlap","minLineWidth","fromTop","toTop","addHorizontal","_line","addVertical","minLineHeight","minDistance","_createDragHint","_updateDragHint","_removeDragHint","tooltipHeight","tooltipTop","taskTop","resizeTooltipFormat","_resizeTooltipWidth","_resizeTooltipTop","resizeStart","tooltipLeft","tablesWidth","tooltipWidth","tableOffset","_updatePercentCompleteTooltip","tooltipMiddle","arrowHeight","_removePercentCompleteTooltip","_updateDependencyDragHint","useVML","_removeDependencyDragHint","_creteVmlDependencyDragHint","_creteDependencyDragHint","transform-origin","-ms-transform-origin","-webkit-transform-origin","-ms-transform","outerHTML","_createTaskTooltip","mouseLeft","contentOffset","contentScrollLeft","rowOffset","_removeTaskTooltip","elementLeft","elementWidth","elementRight","rowTop","rowBottom","contentTop","contentBottom","contentLeft","contentRight","_scrollToDate","viewStart","viewEnd","headerText","levelIndex","levelCount","_hours","isWorkHour","_days","_weeks","daySlots","_months","endMonth","_years","monthSpan","_slotHeaders","_getCurrentTime","tablesWrap","GanttDayView","timeHeaderTemplate","dayHeaderTemplate","optionsRange","daySlot","hourSlots","GanttWeekView","weekHeaderTemplate","endDay","GanttMonthView","monthHeaderTemplate","GanttYearView","yearHeaderTemplate","monthSlots","taskWrapActive","_percentResizeDraggable","_createDependencyDraggable","_percentDraggable","_dependencyDraggable","calculatedRowHeight","calculatedCellHeight","_calculatedSize","newDate","startOrder","endOrder","_taskByUid","currentStart","cleanUp","dragInProgress","updateHintDate","currentEnd","taskElementOffset","timelineOffset","originalPercentWidth","maxPercentWidth","currentPercentComplete","updateElement","originalHandle","startX","startY","hoveredHandle","hoveredTask","toggleHandles","tablesOffset","currentX","currentY","fromStart","selectDependency","selectedDependency","dependencyDestroy","currentMousePosition","tooltipOptions","scrollPositions","scrollableParents","GanttTask","GanttDataSource","ResourceEditor","Gantt","supportsMedia","defaultIndicatorWidth","PERCENTAGE_FORMAT","ARIA_DESCENDANT","ACTIVE_CELL","ACTIVE_OPTION","TASK_DELETE_CONFIRM","DEPENDENCY_DELETE_CONFIRM","TOGGLE_BUTTON_TEMPLATE","BUTTON_TEMPLATE","COMMAND_BUTTON_TEMPLATE","HEADER_VIEWS_TEMPLATE","TASK_DROPDOWN_TEMPLATE","RESOURCESEDITOR","assignButton","ganttStyles","listWrapper","timelineWrapper","splitBarWrapper","splitBar","splitBarHover","popupWrapper","popupList","buttonDelete","buttonCancel","buttonSave","buttonToggle","editForm","formContainer","resourcesFormContainer","buttonsContainer","editField","editLabel","headerWrapper","footerWrapper","viewsWrapper","iconPlus","iconPdf","iconToggle","viewButtonDefault","pdfButton","appendButton","TaskDropDown","appendButtonSelector","aria-activedescendant","listOuterWidth","_focusTimeout","createDataSource","GanttDependency","GanttDependencyDataSource","successors","_dependencies","predecessors","taskAllChildren","_childRemoved","_toGanttTask","taskSiblings","_reorderSiblings","_resolveSummaryFields","taskId","taskLevel","offsetChildren","parentTask","modelChangeHandler","_resolveSummaryStart","_resolveSummaryEnd","_resolveSummaryPercentComplete","_updateSummary","getSummaryStart","currentMin","_updateSummaryRecursive","getSummaryEnd","currentMax","getSummaryPercentComplete","oldOrderId","childCount","popupStyles","editTask","editableWidget","_attachHandlers","_dettachHandlers","_cancelProxy","_saveProxy","_save","_updateModel","resourcesEditorTitle","_resourceGrid","_createButtons","resourcesHeader","unitsHeader","_timeline","_adjustDimensions","_assignments","_dropDowns","_list","_dataBind","assignments","deleteTaskConfirmation","deleteDependencyConfirmation","deleteTaskWindowTitle","deleteDependencyWindowTitle","_dependencyRefreshHandler","_dependencyErrorHandler","footerDropDown","headerDropDown","removeListener","_mediaQueryHandler","selectedView","splitBarHandleClassName","viewsSelector","pdfSelector","toggleSelector","treelist","hoveredClassName","actionsWrap","max-width","matchMedia","addListener","listSelector","timelineSelector","splitBarSelector","toolbarHeight","splitBarWidth","treeListWidth","scrollTarget","actionsSelector","actionMessages","_createTask","toggleButtons","restoreFocus","_cachedCurrent","_createResourceEditor","_updateTask","currentViewSelector","_createDependency","removeTask","removeDependency","refreshDependencies","dataFormatField","_assignmentsRefreshHandler","dataTaskIdField","dataResourceIdField","_createPopupButton","cancelTask","saveTask","_onDialogClose","_resourceEditor","_wrapResourceData","_updateAssignments","setDependenciesDataSource","assignment","resourceId","hasMatch","_updateAssignment","_removeAssignment","_createAssignment","taskCopy","_editTask","_syncDataSource","resourceValueField","_taskConfirm","_removeTask","_scrollToUid","_preventDependencyRefresh","_dependencyConfirm","_removeDependency","_removeTaskDependencies","_removeTaskAssignments","_confirm","scrollToUid","cachedUid","cachedIndex","_assignResources","groupAssigments","assigments","applyTaskResource","wrapTask","resourcedId","taskAssignments","valuePerResource","timelineWidth","timelineScroll","treeListWrapper","headerSelector","timelineHeader","timelineContent","treeListHeader","treeListContent","expandState","moveVertical","subling","moveHorizontal","toggleExpandedState","deleteAction","selectedTask","isCell","listClass","TreeListDataSource","TreeList","PARENTIDFIELD","gridToolbar","gridFilter","withIcon","iconFilter","createchild","TreeListModel","parentIdField","fromModel","_replaceData","sourceLength","_defaultParentId","_subtree","_childrenMap","_filterCallback","defaultParentId","subtree","hasLoadedChildren","_modelLoaded","_modelError","requestParams","defaultPromise","rootId","_byParentId","defaultId","rootNodes","baseFilter","createEditable","_isEditable","formContent","_appendTemplate","_appendFields","_appendButtons","fieldRenderer","commandRenderer","_hasLockedColumns","itemFor","lockedDiv","_showStatus","_cancelEditor","_angularFooters","allAggregates","footerRows","_footerItems","_angularFooter","_contentTree","_lockedContentTree","_hideStatus","isHeightSet","contentWrap","_destroyEditor","_autoExpandable","_dataSourceFetchProxy","_statusTree","_lockedHeaderColsTree","_lockedContentColsTree","_lockedHeaderTree","noRows","_toggleChildren","retryButton","_commandClick","_commandByName","currentName","_ensureExpandableColumn","expandableColumns","expandable","_lockedColumns","_nonLockedColumns","_columnTemplates","_columnAttributes","convertStyle","declaration","camelCase","_initVirtualTrees","_renderCols","_headerColsTree","_contentColsTree","_buildCommands","_templateColumns","_flushCache","_absoluteIndex","lockedHeaderRows","cellClasses","headerContent","lockedWidth","nonLockedWidth","_edit","_hasFooterTemplate","data-parentId","_footerTd","renderer","_cellContent","_button","data-command","_positionResizeHandle","filterMenuInstance","_selectableTarget","ds","_cancelEdit","_insertAt","_toggleColumnVisibility","_findColumn","_adjustTablesWidth","_allowDragOverContainers","nonLockedColumnsLength","initHandler","_columnMenuInit","lockedColumnsLength","sqr","renderSize","renderPos","romanToArabic","memoize","isUnicodeLetter","RX_UNICODE_LETTER","CODE","UCS2","readChar","croak","msg","readWhile","pred","readAsciiWhile","skipWhitespace","eat","isDigit","isHexDigit","isNameStart","isName","xmlComment","END_COMMENT","xmlTag","QUESTION_MARK","xmlDecl","START_COMMENT","xmlName","xmlAttrs","END_SHORT_TAG","GREATER_THAN","xmlContent","END_TAG","START_CDATA","END_CDATA","LESS_THAN","AMPERSAND","xmlEntity","xmlString","QUOTE","APOSTROPHE","LOWERCASE_X","UPPERCASE_X","ENTITIES","SEMICOLON","END_DECLARATION","$tag","EQUAL","arg2","exit","EXIT","amp","quot","apos","nbsp","copyToClipboard","TargetValueCommand","PropertyChangeCommand","ApplyFilterCommand","DeleteCommand","AddCommand","NameCommand","_workbook","_property","_setRange","setState","getState","_forEachCell","_ref","toRangeRef","_target","ColumnWidthCommand","RowHeightCommand","HyperlinkCommand","_prevLink","_prevUnderline","_hasSetValue","GridLinesChangeCommand","skipHiddenCells","ClearContentCommand","clearContent","EditCommand","rejectState","validationState","reason","_adjustRowHeight","_getValidationState","calc","ParseError","TextWrapCommand","forEachRow","AdjustDecimalsCommand","_decimals","forEachCell","adjustDecimals","BorderChangeCommand","_type","_style","noBorders","allBorders","leftBorder","rightBorder","rightColumn","topBorder","topRow","bottomRow","outsideBorders","insideBorders","insideHorizontalBorders","insideVerticalBorders","MergeCellCommand","activeCell","unmerge","horizontally","vertically","forEachColumn","FreezePanesCommand","_topLeft","unfreeze","PasteCommand","_event","activeSheet","pasteRef","canPaste","menuInvoked","pasteOnMerged","pasteOnDisabled","AdjustRowHeightCommand","ToolbarPasteCommand","CopyCommand","canCopy","multiSelection","ToolbarCopyCommand","CutCommand","AutoFillCommand","_origin","fillFrom","FillError","ToolbarCutCommand","FilterCommand","hasFilter","SortCommand","ascending","expandRange","cantSort","_sheetRef","filterRule","valueFilter","ValueFilter","customFilter","CustomFilter","ClearFilterCommand","HideLineCommand","setAxisState","getAxisState","axisManager","hideSelectedRows","hideSelectedColumns","UnHideLineCommand","unhideSelectedRows","unhideSelectedColumns","deleteSelectedRows","deleteSelectedColumns","AddColumnCommand","preventAddColumn","AddRowCommand","preventAddRow","EditValidationCommand","OpenCommand","cannotUndo","fromFile","excelImportErrors","openDialog","SaveAsCommand","_name","nameDefinition","recalc","DefineNameCommand","defineName","DeleteNameCommand","undefineName","FormulaBar","formulaInput","FormulaInput","isOpenParen","isCloseParen","isMatchingParen","begin","knownFunction","runtime","FUNCS","isEqualToken","tok1","tok2","KEY_NAMES","PRIVATE_FORMULA_CHECK","27","32","autoScale","_highlightedRefs","_staticTokens","_formulaSource","_formulaList","scalePadding","getPos","lookup","lookupNode","sel","focusOffset","setPos","differ","currentRange","eiv","home","formulaSource","_formulaListChange","activeToken","completion","tokenCtx","_tokenContext","nextToken","_replaceAt","_focusId","_isFormula","_navigated","_keyDownTimeout","_syntaxHighlight","getData","tokenize","_sync","_editorToSync","_cellTooltip","toggleTooltip","rectangle","canInsertRef","isKeyboardAction","_canInsertRef","afterPoint","canReplace","canInsertBetween","strictMode","refAtPoint","simplify","syncWith","iehandler","highlightedRefs","refClasses","series","refIndex","parens","colorClass","_setStaticTokens","insertNewline","Mac","isAlphaNum","keyName","EventListener","13","46","113","_observer","keyDownProxy","mouseProxy","_pressLocation","handleEvent","rightClick","catchAllHandler","eventKey","mod","passThrough","NilNode","RangeTreeNode","heir","intersecting","RangeTree","RangeList","Iterator","SparseRangeList","findrange","firstRange","rangeValue","expandedValues","sortedIndices","valueComparer","sourceStart","sourceEnd","targetStart","ValueRange","toExcelFormat","Property","JsonProperty","ValueProperty","dateToNumber","PropertyBag","specs","serializable","depends","spec","fromJSON","si","iterators","forEachProperty","ALL_PROPERTIES","columnName","displaySheet","displayRef","aa","Ref","NameRef","CellRef","RangeRef","UnionRef","hasSheet","_hasSheet","setSheet","absolute","toRow","toColumn","rangeAt","nextRangeIndex","previousRangeIndex","refs1","refs2","refs","replaceAt","forEachColumnIndex","forEachAxisIndex","forEachRowIndex","renameSheet","oldSheetName","newSheetName","trow","tcol","arow","acol","forRow","endSheet","_containsCell","_intersectRange","a_left","a_top","a_right","a_bottom","b_left","b_top","b_right","b_bottom","rr1","rc1","rr2","rc2","changes","relTL","relBR","toCell","startRow","endRow","startCol","endCol","topLeftRow","topLeftCol","bottomRightRow","bottomRightCol","theRef","newRefs","NULLREF","SHEETREF","FIRSTREF","AutoFillCalculator","_grid","rectIsVertical","endRect","autoFillDest","quadrant","pivot","cornerResult","further","EdgeNavigator","SheetNavigator","rangeGetter","prevLeft","prevVisible","nextRight","nextVisible","nextLeft","prevRight","_sheet","autoFillCalculator","colEdge","columnRange","rowEdge","rowRange","_viewPortHeight","unionWithMerged","leftCol","rightCol","selectionIncludesMergedCells","_mergedCells","setSelectionValue","addToExisting","refForMode","rowRef","colRef","startSelection","startAutoFill","completeSelection","selectForContextMenu","modifySelection","scrollInto","newSelection","determineDirection","viewPortHeight","originalSelection","currentOriginalSelectionRange","prevPage","nextPage","firstVisible","lastVisible","updateCurrentSelectionRange","moveActiveCell","originalActiveCell","navigateInSelection","currentNavigationRange","selTopLeft","selBottomRight","nextNavigationRange","previousNavigationRange","shouldSkip","singleCellSelection","extendSelection","resizeAutoFill","isMerged","forEachMergedCell","merged","_autoFillOrigin","punch","_previewFillFrom","updateAutoFill","currentSelectionRange","leftMode","rightMode","topMode","bottomMode","originalSelect","selectionRangeIndex","bottomCol","AxisManager","forEachSelectedColumn","forEachSelectedRow","includesHiddenColumns","includesHidden","includesHiddenRows","selectionIncludesHiddenColumns","selectionIncludesHiddenRows","hasRight","hasLeft","isHiddenColumn","hasBottom","hasTop","hideRow","isHiddenRow","unhideColumn","unhideRow","insertColumn","preventInsertRow","preventInsertColumn","newState","foreign","origRef","setStateData","stripStyle","borderObject","cellState","blankCell","address","parseTSV","_externalContent","_internalContent","_uid","intersectsMerged","originActiveCell","rowDelta","colDelta","triggerChange","external","isExternal","_isInternal","internalHTML","internalPlain","looksLikeANumber","getTextHeight","font-size","word-break","white-space","PROPERTIES","complement","skipHiddenRows","skipHiddenCols","noTrigger","_resizedRef","_border","_collapsedBorder","collapsedBorderTop","collapsedBorderRight","collapsedBorderBottom","collapsedBorderLeft","existingFormat","existingFormatType","editorChange","isInEditMode","numberToDate","__","_validation","mergedRef","vi","_properties","setProp","clearAll","contentsOnly","formatOnly","clearFormat","isSortable","mc","secondary","cant","_getMergedCells","hasMerged","_sortBy","isFilterable","_filterBy","intersectingMerged","dr","dc","cellRange","yesItHas","_defaultCellStyle","flag","CalcError","argmax","compileArgumentChecks","comp","allowError","arrayArgs","cond","canBeArrayArg","hasArrayArgs","typeCheck","forced","haveForced","forceNum","roundFloatErrors","maybeRoundFloatErrors","withErrorHandling","makeSyncFunction","doit","xargs","arrays","makeAsyncFunction","makeCallback","defineFunction","kendoSpreadsheetArgs","argsAsync","dateToJulianDays","julianDaysToDate","jd","ord","ORDINAL_ADD_DAYS","isLeapYear","yr","daysInYear","daysInMonth","mo","DAYS_IN_MONTH","unpackDate","serial","BASE_DATE","packDate","unpackTime","frac","MS_IN_DAY","MS_IN_HOUR","MS_IN_MIN","serialToDate","packTime","hh","dateToSerial","binaryCompare","exports","Context","Formula","NUMBER_OR_ZERO","ARGS_NUMERIC","ARGS_ANYVALUE","resolveCells","_resolve","asMatrix","onFormula","formulas","getRefCells","cellValues","getRefData","fetchName","nameValue","ValidationFormulaContext","fname","bool","isRange","hiddenInfo","includeEmpty","eachRow","eachCol","mapRow","mapCol","transpose","va","vb","adds","determinant","inverse","imax","augment","printer","absrefs","forceRefs","lcsheet","parentContext","affectedSheet","formulaRow","formulaCol","formulaSheet","formulaMoves","newFormulaRow","newFormulaCol","co","comatrix","thmatrix","elmatrix","defineAlias","kendoSpreadsheetAliases","compileValidation","validationHandler","parsedFromDate","parsedToDate","fromIsListValue","TRANSPOSE_FORMAT","DATE_FORMAT","fromIsDateValue","parseFormula","toIsDateValue","validationComparers","valueToCompare","toValue","to_value","from_value","_getListData","Validation","tooltipMessageTemplate","tooltipTitleTemplate","_formatMessages","fromFormula","toFormula","_setMessages","tooltipTitle","tooltipMessage","_getOptions","compareValue","compareFormat","getValue","calculateFromCallBack","greaterThan","lessThan","between","equalTo","notEqualTo","notBetween","Sheet","_activeCell","currentOriginalNavigationRange","changeActiveCell","triggerSelect","_reinit","headerWidth","Axis","_frozenRows","_frozenColumns","_suspendChanges","_showGridLines","_gridLinesColor","_sorter","Sorter","_viewSelection","_editSelection","_formulaSelections","_selectionState","_inEdit","_navigator","_axisManager","_sheetName","_field","suspendChanges","dataSourceBinder","SheetDataSourceBinder","unhide","_copyRange","sourceRangeRef","targetRef","nextRefTopLeft","nextRefBottomRight","nextIndex","nextBottomIndex","_adjustReferences","_forFormulas","_forValidations","adjustNames","selectedHeaders","allRows","allCols","nextRef","isEnabledRow","isEnabledColumn","gridLinesColor","numRows","numColumns","parseReference","cellRef","forEachFilterHeader","columnRef","startCellIndex","endCellIndex","startResizing","_initialPosition","_resizeInProgress","_autoFillInProgress","_autoFillDest","_autoFillPunch","_autoFillHint","_autoFillDirection","autoFillRef","autoFillPunch","autoFillInProgress","completeResizing","hintPosition","resizeHintPosition","resizeHandlePosition","_resizeHandlePosition","_resizeHintPosition","removeResizeHandle","_selectionInProgress","operatingRange","selectionInProgress","expandedRef","selectionState","isAxis","trims","activeCellSelection","maxRow","maxCol","rowSelection","colSelection","rowState","colState","_setFormulaSelections","_viewActiveCell","clearDefaultStyle","viewSelection","activeCellRef","_compileFormula","_compileValidation","_refreshFilter","cellRefIndex","resetFormulas","resetValidations","revalidate","_copyValuesInRange","suspended","sortBy","filterColumn","filterRef","ALL_REASONS","currentRef","EMPTYCHAR","sheetsBarClassNames","SheetsBar","sheetsBarWrapper","sheetsBarSheetsWrapper","sheetsBarActive","sheetsBarInactive","sheetsBarAdd","sheetsBarRemove","sheetsBarItems","sheetsBarEditor","sheetsBarScrollable","sheetsBarNext","sheetsBarPrev","sheetsBarKItem","sheetsBarKActive","sheetsBarKTextbox","sheetsBarKLink","sheetsBarKIcon","sheetsBarKFontIcon","sheetsBarKButton","sheetsBarKButtonBare","sheetsBarKArrowW","sheetsBarKArrowE","sheetsBarKReset","sheetsBarKIconX","sheetsBarKSprite","sheetsBarKIconPlus","sheetsBarHintWrapper","sheetsBarKResetItems","_openDialog","_tree","_addButton","_createSheetsWrapper","_toggleScrollEvents","_createSortable","_onSheetReorderStart","_onSheetReorderEnd","_onSheetRemove","_onSheetSelect","_onAddSelect","_renderSheets","_selectedIndex","_onEditorKeydown","_onEditorBlur","_onSheetRename","renderSheets","sheetsGroupScrollWidth","sheetsWrapper","gapWidth","addButton","addButtonWidth","scrollPrevButtonWidth","sheetsGroup","scrollNextButtonRight","_renderHtml","_sheetsWrapper","_sheetsGroup","_nowScrollingSheets","_scrollSheetsByDelta","renderScrollButtons","isSelectedSheet","elementContent","deleteIcon","sheetElements","maxlength","baseButtonClass","childrenElements","removedSheetName","dlg","isConfirmed","selectedSheetText","_scrollSheetsToItem","isAddButton","sheetIndex","sheetsGroupWidth","sheetsGroupPadding","getcol","getrow","noThrow","OUT","TokenStream","addReference","allowEOF","peek","parseExpression","commas","maybeBinary","maybeIntersect","parseAtom","parseSymbol","upper","TRUE","FALSE","parseFuncall","fixReference","exp","maybePercent","my_prec","his_prec","OPERATORS","ast","parseNameDefinition","defAST","nameRef","makeFormula","makePrinter","prec","withParens","needParens","parenthesize","makeClosure","toCPS","cps","cpsRef","cpsAtom","cpsUnary","cpsBinary","cpsFunc","cpsLambda","cpsMatrix","cpsNameRef","makeContinuation","cpsIf","thenK","gensym","elseK","cpsAnd","cpsOr","isMatrix","GENSYM","js","jsArray","FORMULA_CACHE","readNext","ahead","refRange3D","refCell3D","refSheetRange","refSheetCell","refRange","refCell","funcall","forEditor","fixCell","addPos","RawTokenStream","InputStream","startToken","endToken","isIdStart","isId","isOpChar","isPunc","readNumber","has_dot","getRC","readSymbol","lookingAt","readEscaped","readSheetName","readOperator","readPunc","EOF","escaped","parseSqref","getNumberRegexp","comma","NUMBER_FORMAT_RX","FORMAT_PARSERS","registerFormatParser","ops","rxnum","rxcur","has_currency","readExcel","readWorkbook","relationships","theme","ERROR_LOG","readStrings","readRelationships","readTheme","byType","readStyles","enter","relId","dim","SEL_SHEET","byId","sheetDimensions","SEL_VIEW","SEL_DEFINED_NAME","vbProcedure","withErrorLog","recalcSheets","loadSheets","ready","insertSheet","queueSheet","readSheet","defaultColWidth","toColWidth","defaultRowHeight","toRowHeight","SEL_ROW","maximumDigitWidth","pts","formulaRange","customFilterLogic","customFilterCriteria","valueFilterBlanks","valueFilterValues","nCols","prevCellRef","relsFile","styleIndex","acRef","SEL_CELL","applyStyle","SEL_MERGE","SEL_COL","ht","SEL_SELECTION","SEL_PANE","xSplit","ySplit","SEL_SHEET_VIEW","SEL_HYPERLINK","colId","getCustomFilter","DynamicFilter","TopFilter","getFilterVal","leave","SEL_VALIDATION","criteria","blanks","SEL_VALUE","SEL_STRING","SEL_FORMULA","SEL_VALIDATION_FORMULA1","SEL_VALIDATION_FORMULA2","ourOp","notEqual","greaterThanOrEqual","lessThanOrEqual","Q1","Q2","Q3","Q4","M1","M2","M3","M4","M5","M6","M7","M8","M9","M10","M11","M12","setFormat","formatCode","setBorder","BORDER_WIDTHS","shouldSet","applyName","xf","inlineStyles","xfId","namedStyles","numFmts","DEFAULT_FORMATS","asUint8Array","SEL_SHARED_STRING","SEL_TEXT","entries","Id","Target","getXf","addBool","pivotButton","quotePrefix","getColor","themeColor","tint","toCSSColor","indexed","INDEXED_COLORS","colorScheme","SEL_NUM_FMT","SEL_FONT","SEL_FILL","patternType","SEL_BORDER","SEL_NAMED_STYLE","SEL_INLINE_STYLE","swap","scheme","SEL_SCHEME_SYSCLR","SEL_SCHEME_RGBCLR","thin","medium","dashed","dotted","thick","double","hair","mediumDashed","mediumDashDot","dashDotDot","mediumDashDotDot","slantDashDot","11","12","14","15","16","17","18","19","21","22","45","47","48","49","_readSheet","_readStrings","_readStyles","_readTheme","_readWorkbook","sheetParamsFromJSON","_sheetsSearchCache","_onUndoRedo","FormulaContext","_validationContext","_names","_sheetChange","_sheetInsertRow","_sheetInsertColumn","_sheetDeleteRow","_sheetDeleteColumn","_sheetHideRow","_sheetHideColumn","_sheetUnhideRow","_sheetUnhideColumn","_sheetSelect","_sheetCommandRequest","_inputForRef","execute","commandOptions","editActiveCell","sheetByName","moveSheetToIndex","toIndex","sheetSelection","insertIndex","getUniqueSheetName","sheetNameSuffix","_bindSheetEvents","sheetByIndex","forEachName","nameref","removeSheet","newSheet","_clearSheets","nameForRef","area","fsheet","frow","fcol","currentFormula","_formulaContextRefresh","toActionSelector","alphaNumRegExp","ACTIONS","ENTRY_ACTIONS","CONTAINER_EVENTS","CLIPBOARD_EVENTS","EDITOR_EVENTS","FORMULABAR_EVENTS","FORMULAINPUT_EVENTS","SELECTION_MODES","COMPOSITE_UNAVAILABLE_ACTION_SELECTORS","UNHIDE_ACTION_SELECTORS","ACTION_KEYS","SHIFT_ACTION_KEYS","ENTRY_ACTION_KEYS","Controller","ctrl+left","ctrl+right","ctrl+up","ctrl+down","ctrl+home","ctrl+end","pageup","pagedown","shift+tab","shift+enter","shift+:alphanum",":alphanum","ctrl+:alphanum","alt+ctrl+:alphanum",":edit","wheel","*+mousedown","*+mousedrag","*+mouseup","*+dblclick","*+pageup","*+pagedown","*+cut","*+paste","*+copy","alt+enter","columnheader","topcorner","autofill","clipboardElement","cellContextMenu","rowHeaderContextMenu","colHeaderContextMenu","tabstrip","sheetsbar","nameEditor","onNameEditorEnter","onNameEditorCancel","onNameEditorSelect","onNameEditorDelete","onEditorChange","onEditorActivate","onEditorDeactivate","onEditorUpdate","onScroll","listener","_enableEditorEvents","onSheetBarSelect","onSheetBarReorder","onSheetBarRename","onSheetBarRemove","onContextMenuSelect","onCommandRequest","onDialogRequest","keyListener","barKeyListener","barElement","inputKeyListener","cellElement","_execute","editorClose","_preventNavigation","showError","activateEditor","_lastEditorValue","_activeTooltip","isEditorDisabled","onWheel","deltaMode","onAction","onPageUp","scrollDown","onPageDown","onEntryAction","shouldPrevent","onShiftAction","appendSelection","onMouseMove","objectAt","onMouseDown","originFrame","onEditorEsc","openCustomEditor","_selectionMode","openFilterMenu","onContextMenu","isComposite","showUnhide","showUnmerge","constrainResize","onMouseDrag","startAutoScroll","selectToLocation","onMouseUp","stopAutoScroll","activeEditor","onDblClick","activeCellRectangle","onCut","clipBoardValue","onPaste","hasHTML","hasPlainText","DOMStringList","onCopy","scrollRight","cellLocation","lastKnownCellLocation","_autoScrollTarget","scrollStep","finalLocation","viewObject","createFilterMenu","onEditorBarFocus","onEditorCellFocus","resetEditorValue","onEditorBlur","onEditorAction","onEditorShiftAction","deactivateEditor","additionalOptions","pdfExport","excelExport","selectElementContents","cellBefore","trs","cellAbove","prevRow","cellBorder","asURL","drawCell","hBorders","vBorders","showGrid","maybeLink","defaultBorder","shouldDrawCell","overflowWrap","wordWrap","__dataType","paneClassNames","addCell","wordBreak","borderRightColor","borderBottomColor","borderLeftColor","borderTopColor","RESIZE_HANDLE_WIDTH","viewClassNames","HtmlTable","CELL_CONTEXT_MENU","ROW_HEADER_CONTEXT_MENU","COL_HEADER_CONTEXT_MENU","VIEW_CONTENTS","cellEditor","barEditor","topCorner","filterHeadersWrapper","filterRange","filterButton","filterButtonActive","horizontalResize","verticalResize","iconFilterDefault","sheetsBar","openUnsupported","shiftingNonblankCells","insertColumnWhenRowIsSelected","insertRowWhenColumnIsSelected","filterRangeContainingMerges","sortRangeContainingMerges","cantSortMultipleSelection","cantSortNullRef","cantSortMixedCells","validationError","cannotModifyDisabled","_width","addColumn","toDomTree","contextMenuConfig","_chrome","_dialogs","_formulaInput","clipboardContents","SheetEditor","_sheetsbar","enableClipboard","isClipboardDeactivated","tabstripHeight","formulaBarHeight","formulaBar","sheetsBarHeight","quickAccessAdjust","NameEditor","_tabstrip","_executeCommand","cellRectangle","_rectangle","boundingRectangle","isColumnResizer","_headerWidth","isRowResizer","_headerHeight","isFilterIcon","theGrid","frozen","filterIconRect","isAutoFill","isEditButton","ed","activeCellCustomEditor","selecting","paneAt","containingPane","_destroyFilterMenu","_filterMenu","selectClipBoardContents","willScroll","scrollBoundaries","scrollBottom","_destroyDialog","reopenEditor","errorMessages","focusButton","onClose","_retry","registered","_filterMenuColumn","renderResizeHint","renderClipboardContents","resizeHint","resizeHintVertical","resizeHintHandle","resizeHintMarker","selectionView","primaryMergedCells","secondaryMergedCells","rangeDimensions","mergedCell","vaxis","haxis","rowHeader","columnHeader","mergedCellsWrapper","selectionWrapper","autoFillWrapper","columnResizeHandle","rowResizeHandle","selectionHighlight","paneClasses","_currentView","_currentRect","_selectedHeaders","renderSelection","renderAutoFill","renderEditorSelection","renderFilterHeaders","hasRowHeader","headerClassName","hasColumnHeader","columnOffset","renderResizeHandle","itemSelection","allHeaders","doLayout","forScreen","xCoords","yCoords","hb","BUTTON_SIZE","BUTTON_OFFSET","Rectangle","_addDiv","selections","activeCellClasses","selectionClasses","activeFormulaColor","_activeFormulaColor","_directionClasses","_addTable","autoFillRectangle","toDiv","activeFormulaSelection","colorClasses","mergedCellLeft","mergedCellTop","EDITORS","registerEditor","kendoCalendar","getKendoCalendar","getKendoPopup","kendoStaticList","getKendoStaticList","PaneGrid","rangeRef","headerSize","hasHeader","paneSegment","_viewSize","widthCompensation","heightCompensation","_hidden","scrollBarSize","firstHidden","lastHidden","startSegment","lastPage","_pixelValues","_axis","quarter","sameYear","sameMonth","sameWeek","firstWeek","secondWeek","_blanks","_logic","_criteria","_matches","criterionValue","criterionType","valueType","_predicate","_average","aboveAverage","belowAverage","tomorrow","yesterday","nextWeek","thisWeek","lastWeek","nextMonth","thisMonth","lastMonth","nextQuarter","thisQuarter","lastQuarter","nextYear","thisYear","lastYear","yearToDate","_lists","ascendingComparer","descendingComparer","typeA","typeB","maybeColor","RX_COLORS","maybeCondition","RX_CONDITION","readFormat","maybeFraction","sep","decimalPart","am","pm","readSection","haveConditional","sec","printSection","printToken","padLeft","restart","compileFormatPart","checkComma","scaleCount","hasDate","hasAmpm","percentCount","separeThousands","declen","intFormat","decFormat","preamble","CACHE","TEXT","ampm","fraclen","eltime","formatInt","iv","chf","formatDec","textAndColor","_cosh","_sinh","_tanh","_gcd","_lcm","forIFS","chunks","parseCriteria","COL","_avg","numbers","_var_sp","avg","_stdev_sp","_percentrank","exc","nlt","ngt","_covariance","ax","ay","_percentile","rank","_percentile_inc","_percentile_exc","fetchValuesForAggregate","opt_ignore_hidden_rows","opt_ignore_errors","opt_use_aggregates","fetchValues","_binom_dist","cumulative","_combinations","weeksInYear","_days_360","Hyperlink","numericPredicate","descending","ARGS_COUNTIFS","ARGS_SUMIFS","ARGS_SUMIF","ARGS_PERCENTRANK","_fact","AGGREGATE_FUNCS","RX_NON_PRINTABLE","mult","prod","coef","m1","sumRange","nth","discard","bins","variance","stddev","significance","fact","funcId","ignoreHidden","s2","approx","resultCol","areanum","colRange","resultRow","fw","dow","wk","holidays","rom","radix","minLen","dec","noCommas","newText","oldText","valueIfError","makeComparator","lc","compLT","compLTE","compGT","compGTE","compNE","compEQ","RXCACHE","ERF","an","f_abs","ERFC","GAMMALN","cof","ser","GAMMA","pi","BETALN","BETA","gamma_inc","g_series","g_contfrac","ap","gln","MAX_IT","EPS","FP_MIN","aj","bj","GAMMA_DIST","GAMMA_INV","ab","NORM_S_DIST","NORM_S_INV","plow","phigh","NORM_DIST","NORM_INV","betastd_pdf","betastd_cdf","beta_lentz","m2","qab","qap","qam","betastd_inv","BETADIST","BETA_DIST","cdf","BETA_INV","chisq_left","cds","chisq_right","chisq_left_inv","chisq_right_inv","chisq_test","obsv","expect","eij","expon","poisson","lnf","Fdist","Fdist_right","Finv_right","Finv","_mean","me","_var_sq","Ftest","n1","n2","va1","va2","fisher","fisherinv","Tdist","Tdist_right","Tdist_2tail","Tdist_inv","Tdist_2tail_inv","Tdist_test","gr1","gr2","t_st","df","md","v1","v2","u1","u2","q1","q2","confidence_t","confidence_norm","gauss","z","phi","lognorm_dist","lognorm_inv","prob","x_","p_","lw","slope","y_","mx","my","intercept","pearson","s1","s3","rsq","steyx","forecast","_mat_mean","Mat","_mat_devsq","mean","sq","linest","X","konst","stats","Xt","B","line_1","Y1","y_y1","mp","SSreg","SSresid","line_5","R2","degfre","err_est","line_3","F_sta","line_4","SCP","line_2","logest","growth","new_X","root_newton","guess","max_it","eps","f_d","FV","rate","nper","pmt","pv","h1","h2","PV","fv","PMT","NPER","RATE","xfd","IPMT","per","ipmt","PPMT","CUMPRINC","tn","ts","te","monthlyPayment","remainingBalanceAtStart","remainingBalanceAtEnd","CUMIPMT","cip","NPV","flows","npv","IRR","npv1","EFFECT","nominal_rate","npery","NOMINAL","effect_rate","XNPV","XIRR","ISPMT","DB","cost","salvage","life","period","db","DDB","prior","dep","SLN","SYD","VDB","no_switch","_getGDA","gda","interest","_interVDB","life1","term","remValue","intEnd","lia","vdb","nowLia","intStart","_edate","_daysBetween","basis","_borderCoupons","settlement","maturity","sett","periods","_borderCoupons_fw","COUPDAYBS","COUPDAYS","settl","matur","COUPDAYSNC","COUPPCD","COUPNCD","COUPNUM","mat","ACCRINTM","issue","par","year_days","ACCRINT","_numCoupons","annual","brace","prev1","next1","nrc","accr","DISC","redemption","INTRATE","investment","RECEIVED","discount","PRICE","yld","beg_settl","settl_end","beg_end","den","yf","PRICEDISC","dsm","COUPS_ARGS","ac","withPreventDefault","BORDER_TYPES","BORDER_PALETTE_MESSAGES","ColorChooser","BorderPalette","borderPalette","customColor","_resetButton","_colorPalette","_customColorPalette","_customColorButton","resetButton","resetColor","customColorButton","colorPalette","flatColorPicker","kendoColorPalette","maximizable","kendoFlatColorPicker","_borderTypePalette","_borderColorPalette","colorChooser","_colorChange","toolDefaults","SpreadsheetToolBar","DropDownTool","OverflowDialogButton","ColorPickerButton","FONT_SIZES","DEFAULT_FONT_SIZE","FontSize","FontSizeButton","FONT_FAMILIES","DEFAULT_FONT_FAMILY","FontFamily","FontFamilyButton","Format","FormatButton","BorderChangeTool","BorderChangeButton","AlignmentTool","AlignmentButton","MergeTool","MergeButton","FreezeTool","FreezeButton","Sort","SortButton","FilterButton","Open","alignmentButtons","justtifyLeft","alignTop","alignMiddle","alignBottom","colorPicker","formatTypes","automatic","financial","moreFormats","formatDecreaseDecimal","formatIncreaseDecimal","freezeButtons","freezePanes","freezeRows","freezeColumns","mergeButtons","mergeHorizontally","mergeVertically","quickAccess","toggleGridlines","sortAsc","sortDesc","sortButtons","sortSheetAsc","sortSheetDesc","sortRangeAsc","sortRangeDesc","textColor","hyperlink","dialogName","formatCells","_expandTools","toolbarName","handleClick","_addSeparators","expandTool","typeDefaults","commandType","setToggle","_tools","dropDownList","data-property","popupName","_dialogName","iconName","kendoComboBox","_valueChange","fontSizes","sizes","defaultSize","fontFamilies","defaultFont","_revertTitle","dataValuePrimitive","sample","_borderPalette","_action","_commandPalette","_quickAccessButtons","toolbars","quickAccessToolBar","uniqueBy","basicErrorDialog","MessageDialog","messageId","registry","SpreadsheetDialog","FormatCellsViewModel","FormatCellsDialog","ConfirmationDialog","ValidationErrorDialog","FontFamilyDialog","FontSizeDialog","BordersDialog","ColorPickerDialog","CustomColorDialog","AlignmentDialog","MergeDialog","FreezeDialog","ValidationViewModel","ValidationDialog","ExportAsDialog","ImportErrorDialog","UseKeyboardDialog","HyperlinkDialog","revert","formatCellsDialog","categories","fontFamilyDialog","fontSizeDialog","bordersDialog","alignmentDialog","mergeDialog","freezeDialog","confirmationDialog","validationDialog","hintMessage","hintTitle","comparerMessages","onInvalidData","rejectInput","showWarning","showHint","ignoreBlank","showListButton","showCalendarButton","placeholders","typeTitle","typeMessage","exportAsDialog","saveAsType","exportArea","margins","guidelines","modifyMergedDialog","rangeDisabledDialog","incompatibleRangesDialog","noFillDirectionDialog","duplicateSheetNameDialog","overflowDialog","useKeyboardDialog","forCopy","forCut","forPaste","unsupportedSelectionDialog","linkDialog","removeLink","dialogClass","_onDialogActivate","_onDialogDeactivate","useCategory","category","formatCurrency","currencies","allFormats","useFirstFormat","_currency","iso","categoryFilter","defaultOptions","_generateFormats","calendarPatterns","currenciesFrom","numberFormats","dateFormats","currencyFilter","_confirmed","_colorPicker","ValidationCellsViewModel","criterion","setHintMessageTemplate","shouldBuild","buildMessages","hintTitleTemplate","hintMessageTemplate","setComparers","defaultHintTitle","text_comparers","defaultComparers","defaultHintMessage","isAny","showToForNumber","showTo","showToForDate","isText","showRemove","fromValidationObject","useCustomMessages","toValidationObject","fileFormats","fitWidth","paperSizes","hCenter","vCenter","_normalizeColumns","_boundRowsCount","_sheetChangeHandler","_sheetDeleteRowHandler","_sheetInsertRowHandler","normalizedRef","_skipRebind","colValueIndex","getterIdx","distinctValues","itemVisible","anyVisibleChildren","uncheckAll","flattenOperators","FILTERMENU_MESSAGES","Details","FilterMenuViewModel","FilterMenuController","details","detailsSummary","detailsContent","iconSearch","textbox","filterByCondition","filterByValue","valuesTreeViewWrapper","_summary","addToCurrent","operatorNone","spreadsheetFilterValue","menuItem","valuesChange","valuesDataSource","appendToSearch","valueSelect","hasActiveSearch","filterValues","operatorChange","isNone","isString","valuesTree","filterType","topValue","filterForColumn","allFilters","columnFilters","_filterInit","_filterByCondition","_filterByValue","_actionButtons","valuesTreeView","kendoMenu","compiledTemplate","_detailToggle","isExpanded","activeContainer","oldRect","newRect","barInput","cellInput","_triggerUpdate","linearRegression","findSeries","findStep","forEachSeries","formatType","getType","lst","findStringList","stringLists","strl","ERR_INCOMPATIBLE","ERR_NO_DIRECTION","srcRange","srcIdx","destRange","CLASS_NAMES","combo","_on_listChange","getKendoComboBox","_on_keyDown","_on_focus","_deleteItem","_prevValue","distributeCoords","curr","scaleFactor","boxWidth","boxHeight","rowHeights","colWidths","nonEmpty","relrow","relcol","cw","emptyCells","orlast","normalOrder","drawLayout","endbottom","endright","geo","GUIDELINE_WIDTH","ncols","nrows","r2d2","vtrans","text_group","CONT","makeFontDef","paper","Spreadsheet","_controller","_autoRefresh","_bindWorkbookEvents","_workbookChange","_workbookCut","_workbookCopy","_workbookPaste","autoRefresh","_workbookExcelExport","_workbookExcelImport","_initProgress","_workbookPdfExport","_workbookInsertSheet","_workbookRemoveSheet","_workbookSelectSheet","_workbookRenameSheet","_workbookInsertRow","_workbookInsertColumn","_workbookDeleteRow","_workbookDeleteColumn","_workbookHideRow","_workbookHideColumn","_workbookUnhideRow","_workbookUnhideColumn","_workbookSelect","_workbookChangeFormat","addKPI","kpiNode","normalizeKPIs","settingTargetFromNode","kpiMeasure","kpi","buildKPImeasures","SETTING_CONTAINER_TEMPLATE","PivotConfigurator","measuresLabel","columnsLabel","rowsLabel","fieldsLabel","_targets","kendoTreeView","_createTarget","columnsContainer","rowsContainer","measuresContainer","_cube","_catalog","withoutTimeout","$timeout","createWidget","origAttr","controllers","createIt","originalElement","destroyRegister","kNgDisabled","kNgReadonly","isReadonly","kRebind","ctor","OPTIONS_NOW","exposeWidget","$emit","destroyWidgetOnScopeDestroy","setupRebind","$eval","bindToKNgDisabled","bindToKNgReadonly","kNgModel","bindToKNgModel","ngModel","bindToNgModel","ngForm","propagateClassToWidgetWrapper","kNgDelay","delayValue","parsed","unresolved","unwatch","$watch","$root","unregister","$attr","addOption","scopeValue","widgetEvents","optionsPath","kOptions","optionsValue","dataName","optionName","ignoredOwnProperties","ignoredAttributes","kDataSource","$log","kendoWidget","$parse","formValue","isForm","formRegExp","haveChangeOnElement","viewRender","onChange","currentVal","$viewValue","$modelValue","$render","formPristine","$pristine","$setViewValue","$setPristine","digest","$isEmpty","updating","valueIsCollection","currentValueLength","watchHandler","$angular_setLogicValue","$watchCollection","$setDirty","$angular_getLogicValue","deregister","$on","disconnect","prevClassList","MutationObserver","chg","currClassList","attributeName","rebindAttr","isUpload","_cleanUp","WIDGET_TEMPLATE_OPTIONS","templateContents","setTemplate","createDirectives","klass","make","directiveName","widgetName","directive","directiveFactory","shortcut","SKIP_SHORTCUTS","restrict","TAGNAMES","scopeField","kScopeField","MANUAL_DIRECTIVES","kendoWidgetInstance","isDigesting","destroyScope","defadvice","origMethod","pendingPatches","$injector","$defaultCompile","toDataSource","mew","kendoRenderedTimeout","RENDERED","require","$attrs","$element","roleattr","MobileButton","MobileBackButton","MobileDetailButton","MobileListView","$angular_scope","$angular_init","itemScope","$$kendoScope","$new","$angular_makeEventHandler","kendoEvent","elems","colIdx","locals","angularDataItem","terminal","pre","kAttr","priority","TreeMap","MobileScrollView","templateDirectives","attrName"],"mappings":"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L4jJ,IAAK,SACLC,IAAK,QACLC,IAAK,OACLC,IAAK,SACLC,IAAK,SACLC,IAAK,QACLC,IAAK,OACLC,IAAK,MACLC,IAAK,SACLC,IAAK,SACLC,IAAK,SACLC,IAAK,QACLC,IAAK,SACLC,IAAK,OACLC,IAAK,QACLC,IAAK,SACLC,IAAK,SACLC,IAAK,SACLC,IAAK,QACLC,IAAK,OACLC,IAAK,SACLC,IAAK,QACLC,IAAK,QACLC,IAAK,SACLC,IAAK,SACLC,IAAK,QACLC,IAAK,SACLC,IAAK,OACLC,IAAK,QACLC,IAAK,QACLC,IAAK,SACLC,IAAK,SACLC,IAAK,SACLC,IAAK,QACLC,IAAK,OACLC,IAAK,SACLC,IAAK,SACLC,IAAK,QACLC,IAAK,OACLC,IAAK,MACLC,IAAK,SACLC,IAAK,SACLC,IAAK,SACLC,IAAK,QACLC,IAAK,SACLC,IAAK,OACLC,IAAK,SACLC,IAAK,SACLC,IAAK,SACLC,IAAK,SACLC,IAAK,QACLC,IAAK,OACLC,IAAK,SACLC,IAAK,QACLC,IAAK,OACLC,IAAK,OACLC,IAAK,QACLC,IAAK,OACLC,IAAK,QACLC,IAAK,QACLC,IAAK,UACLC,IAAK,OACLC,IAAK,MACLC,IAAK,QACLC,IAAK,OACLC,IAAK,QACLC,IAAK,SACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,UACLC,IAAK,KACLC,IAAK,MACLC,IAAK,QACLC,IAAK,MACLC,IAAK,UACLC,IAAK,MACLC,IAAK,MACLC,IAAK,MACLC,IAAK,QACLC,IAAK,QACLC,IAAK,OACLC,IAAK,QACLC,IAAK,QACLC,IAAK,UACLC,IAAK,OACLC,IAAK,MACLC,IAAK,QACLC,IAAK,OACLC,IAAK,QACLC,IAAK,SACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,UACLC,IAAK,KACLC,IAAK,MACLC,IAAK,SACLC,IAAK,QACLC,IAAK,MACLC,IAAK,UACLC,IAAK,MACLC,IAAK,MACLC,IAAK,MACLC,IAAK,QACLC,IAAK,WACLC,IAAK,QACLC,IAAK,MACLC,KAAM,OA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","file":"kendo.web.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('kendo.core', ['jquery'], f);\n}(function () {\n var __meta__ = {\n id: 'core',\n name: 'Core',\n category: 'framework',\n description: 'The core of the Kendo framework.'\n };\n (function ($, window, undefined) {\n var kendo = window.kendo = window.kendo || { cultures: {} }, extend = $.extend, each = $.each, isArray = $.isArray, proxy = $.proxy, noop = $.noop, math = Math, Template, JSON = window.JSON || {}, support = {}, percentRegExp = /%/, formatRegExp = /\\{(\\d+)(:[^\\}]+)?\\}/g, boxShadowRegExp = /(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+)?/i, numberRegExp = /^(\\+|-?)\\d+(\\.?)\\d*$/, FUNCTION = 'function', STRING = 'string', NUMBER = 'number', OBJECT = 'object', NULL = 'null', BOOLEAN = 'boolean', UNDEFINED = 'undefined', getterCache = {}, setterCache = {}, slice = [].slice;\n kendo.version = '2017.1.223'.replace(/^\\s+|\\s+$/g, '');\n function Class() {\n }\n Class.extend = function (proto) {\n var base = function () {\n }, member, that = this, subclass = proto && proto.init ? proto.init : function () {\n that.apply(this, arguments);\n }, fn;\n base.prototype = that.prototype;\n fn = subclass.fn = subclass.prototype = new base();\n for (member in proto) {\n if (proto[member] != null && proto[member].constructor === Object) {\n fn[member] = extend(true, {}, base.prototype[member], proto[member]);\n } else {\n fn[member] = proto[member];\n }\n }\n fn.constructor = subclass;\n subclass.extend = that.extend;\n return subclass;\n };\n Class.prototype._initOptions = function (options) {\n this.options = deepExtend({}, this.options, options);\n };\n var isFunction = kendo.isFunction = function (fn) {\n return typeof fn === 'function';\n };\n var preventDefault = function () {\n this._defaultPrevented = true;\n };\n var isDefaultPrevented = function () {\n return this._defaultPrevented === true;\n };\n var Observable = Class.extend({\n init: function () {\n this._events = {};\n },\n bind: function (eventName, handlers, one) {\n var that = this, idx, eventNames = typeof eventName === STRING ? [eventName] : eventName, length, original, handler, handlersIsFunction = typeof handlers === FUNCTION, events;\n if (handlers === undefined) {\n for (idx in eventName) {\n that.bind(idx, eventName[idx]);\n }\n return that;\n }\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n eventName = eventNames[idx];\n handler = handlersIsFunction ? handlers : handlers[eventName];\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 return that;\n },\n one: function (eventNames, handlers) {\n return this.bind(eventNames, handlers, true);\n },\n first: function (eventName, handlers) {\n var that = this, idx, eventNames = typeof eventName === STRING ? [eventName] : eventName, length, handler, handlersIsFunction = typeof handlers === FUNCTION, events;\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n eventName = eventNames[idx];\n handler = handlersIsFunction ? handlers : handlers[eventName];\n if (handler) {\n events = that._events[eventName] = that._events[eventName] || [];\n events.unshift(handler);\n }\n }\n return that;\n },\n trigger: function (eventName, e) {\n var that = this, events = that._events[eventName], idx, length;\n if (events) {\n e = e || {};\n e.sender = that;\n e._defaultPrevented = false;\n e.preventDefault = preventDefault;\n e.isDefaultPrevented = isDefaultPrevented;\n events = events.slice();\n for (idx = 0, length = events.length; idx < length; idx++) {\n events[idx].call(that, e);\n }\n return e._defaultPrevented === true;\n }\n return false;\n },\n unbind: function (eventName, handler) {\n var that = this, events = that._events[eventName], idx;\n if (eventName === undefined) {\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 return that;\n }\n });\n function compilePart(part, stringPart) {\n if (stringPart) {\n return '\\'' + part.split('\\'').join('\\\\\\'').split('\\\\\"').join('\\\\\\\\\\\\\"').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/\\t/g, '\\\\t') + '\\'';\n } else {\n var first = part.charAt(0), rest = part.substring(1);\n if (first === '=') {\n return '+(' + rest + ')+';\n } else if (first === ':') {\n return '+$kendoHtmlEncode(' + rest + ')+';\n } else {\n return ';' + part + ';$kendoOutput+=';\n }\n }\n }\n var argumentNameRegExp = /^\\w+/, encodeRegExp = /\\$\\{([^}]*)\\}/g, escapedCurlyRegExp = /\\\\\\}/g, curlyRegExp = /__CURLY__/g, escapedSharpRegExp = /\\\\#/g, sharpRegExp = /__SHARP__/g, zeros = [\n '',\n '0',\n '00',\n '000',\n '0000'\n ];\n Template = {\n paramName: 'data',\n useWithBlock: true,\n render: function (template, data) {\n var idx, length, html = '';\n for (idx = 0, length = data.length; idx < length; idx++) {\n html += template(data[idx]);\n }\n return html;\n },\n compile: function (template, options) {\n var settings = extend({}, this, options), paramName = settings.paramName, argumentName = paramName.match(argumentNameRegExp)[0], useWithBlock = settings.useWithBlock, functionBody = 'var $kendoOutput, $kendoHtmlEncode = kendo.htmlEncode;', fn, parts, idx;\n if (isFunction(template)) {\n return template;\n }\n functionBody += useWithBlock ? 'with(' + paramName + '){' : '';\n functionBody += '$kendoOutput=';\n parts = template.replace(escapedCurlyRegExp, '__CURLY__').replace(encodeRegExp, '#=$kendoHtmlEncode($1)#').replace(curlyRegExp, '}').replace(escapedSharpRegExp, '__SHARP__').split('#');\n for (idx = 0; idx < parts.length; idx++) {\n functionBody += compilePart(parts[idx], idx % 2 === 0);\n }\n functionBody += useWithBlock ? ';}' : ';';\n functionBody += 'return $kendoOutput;';\n functionBody = functionBody.replace(sharpRegExp, '#');\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 function pad(number, digits, end) {\n number = number + '';\n digits = digits || 2;\n end = digits - number.length;\n if (end) {\n return zeros[digits].substring(0, end) + number;\n }\n return number;\n }\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, gap, indent, meta = {\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\'\n }, rep, toString = {}.toString;\n if (typeof Date.prototype.toJSON !== FUNCTION) {\n Date.prototype.toJSON = function () {\n var that = this;\n return isFinite(that.valueOf()) ? pad(that.getUTCFullYear(), 4) + '-' + pad(that.getUTCMonth() + 1) + '-' + pad(that.getUTCDate()) + 'T' + pad(that.getUTCHours()) + ':' + pad(that.getUTCMinutes()) + ':' + pad(that.getUTCSeconds()) + 'Z' : null;\n };\n String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function () {\n return this.valueOf();\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 : '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' : '\"' + string + '\"';\n }\n function str(key, holder) {\n var i, k, v, length, mind = gap, partial, value = holder[key], type;\n if (value && typeof value === OBJECT && typeof value.toJSON === FUNCTION) {\n value = value.toJSON(key);\n }\n if (typeof rep === FUNCTION) {\n value = rep.call(holder, key, value);\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' + gap + partial.join(',\\n' + gap) + '\\n' + mind + ']' : '[' + 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 v = partial.length === 0 ? '{}' : gap ? '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n }\n if (typeof JSON.stringify !== FUNCTION) {\n JSON.stringify = function (value, replacer, space) {\n var i;\n gap = '';\n indent = '';\n if (typeof space === NUMBER) {\n for (i = 0; i < space; i += 1) {\n indent += ' ';\n }\n } else if (typeof space === STRING) {\n indent = space;\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 return str('', { '': value });\n };\n }\n }());\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, standardFormatRegExp = /^(n|c|p|e)(\\d*)$/i, literalRegExp = /(\\\\.)|(['][^']*[']?)|([\"][^\"]*[\"]?)/g, commaRegExp = /\\,/g, EMPTY = '', POINT = '.', COMMA = ',', SHARP = '#', ZERO = '0', PLACEHOLDER = '??', EN = 'en-US', objectToString = {}.toString;\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 '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 '$n'\n ],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n symbol: '$'\n }\n },\n calendars: {\n standard: {\n days: {\n names: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday'\n ],\n namesAbbr: [\n 'Sun',\n 'Mon',\n 'Tue',\n 'Wed',\n 'Thu',\n 'Fri',\n 'Sat'\n ],\n namesShort: [\n 'Su',\n 'Mo',\n 'Tu',\n 'We',\n 'Th',\n 'Fr',\n 'Sa'\n ]\n },\n months: {\n names: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ],\n namesAbbr: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ]\n },\n AM: [\n 'AM',\n 'am',\n 'AM'\n ],\n PM: [\n 'PM',\n 'pm',\n 'PM'\n ],\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 function findCulture(culture) {\n if (culture) {\n if (culture.numberFormat) {\n return culture;\n }\n if (typeof culture === STRING) {\n var cultures = kendo.cultures;\n return cultures[culture] || cultures[culture.split('-')[0]] || null;\n }\n return null;\n }\n return null;\n }\n function getCulture(culture) {\n if (culture) {\n culture = findCulture(culture);\n }\n return culture || kendo.cultures.current;\n }\n kendo.culture = function (cultureName) {\n var cultures = kendo.cultures, culture;\n if (cultureName !== undefined) {\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 kendo.findCulture = findCulture;\n kendo.getCulture = getCulture;\n kendo.culture(EN);\n function formatDate(date, format, culture) {\n culture = getCulture(culture);\n var calendar = culture.calendars.standard, days = calendar.days, months = calendar.months;\n format = calendar.patterns[format] || format;\n return format.replace(dateFormatRegExp, function (match) {\n var minutes;\n var result;\n var sign;\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 result = math.abs(minutes / 60).toString().split('.')[0];\n minutes = math.abs(minutes) - result * 60;\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 result = math.abs(result).toString().split('.')[0];\n result = (sign ? '+' : '-') + (match === 'zz' ? pad(result) : result);\n }\n return result !== undefined ? result : match.slice(1, match.length - 1);\n });\n }\n function formatNumber(number, format, culture) {\n culture = getCulture(culture);\n var numberFormat = culture.numberFormat, decimal = numberFormat[POINT], precision = numberFormat.decimals, pattern = numberFormat.pattern[0], literals = [], symbol, isCurrency, isPercent, customPrecision, formatAndPrecision, negative = number < 0, integer, fraction, integerLength, fractionLength, replacement = EMPTY, value = EMPTY, idx, length, ch, hasGroup, hasNegativeFormat, decimalIndex, sharpIndex, zeroIndex, hasZero, hasSharp, percentIndex, currencyIndex, startZeroIndex, start = -1, end;\n if (number === undefined) {\n return EMPTY;\n }\n if (!isFinite(number)) {\n return number;\n }\n if (!format) {\n return culture.name.length ? number.toLocaleString() : number.toString();\n }\n formatAndPrecision = standardFormatRegExp.exec(format);\n if (formatAndPrecision) {\n format = formatAndPrecision[1].toLowerCase();\n isCurrency = format === 'c';\n isPercent = format === 'p';\n if (isCurrency || isPercent) {\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 customPrecision = formatAndPrecision[2];\n if (customPrecision) {\n precision = +customPrecision;\n }\n if (format === 'e') {\n return customPrecision ? number.toExponential(precision) : number.toExponential();\n }\n if (isPercent) {\n number *= 100;\n }\n number = round(number, precision);\n negative = number < 0;\n number = number.split(POINT);\n integer = number[0];\n fraction = number[1];\n if (negative) {\n integer = integer.substring(1);\n }\n value = groupInteger(integer, 0, integer.length, numberFormat);\n if (fraction) {\n value += decimal + fraction;\n }\n if (format === 'n' && !negative) {\n return value;\n }\n number = EMPTY;\n for (idx = 0, length = pattern.length; idx < length; idx++) {\n ch = pattern.charAt(idx);\n if (ch === 'n') {\n number += value;\n } else if (ch === '$' || ch === '%') {\n number += symbol;\n } else {\n number += ch;\n }\n }\n return number;\n }\n if (negative) {\n number = -number;\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('\\\\', ''), literal = match.slice(1).replace(quoteChar, '');\n literals.push(literal);\n return PLACEHOLDER;\n });\n }\n format = format.split(';');\n if (negative && format[1]) {\n format = format[1];\n hasNegativeFormat = true;\n } else if (number === 0) {\n format = format[2] || format[0];\n if (format.indexOf(SHARP) == -1 && format.indexOf(ZERO) == -1) {\n return format;\n }\n } else {\n format = format[0];\n }\n percentIndex = format.indexOf('%');\n currencyIndex = format.indexOf('$');\n isPercent = percentIndex != -1;\n isCurrency = currencyIndex != -1;\n if (isPercent) {\n number *= 100;\n }\n if (isCurrency && format[currencyIndex - 1] === '\\\\') {\n format = format.split('\\\\').join('');\n isCurrency = false;\n }\n if (isCurrency || isPercent) {\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n decimal = numberFormat[POINT];\n precision = numberFormat.decimals;\n symbol = numberFormat.symbol;\n }\n hasGroup = format.indexOf(COMMA) > -1;\n if (hasGroup) {\n format = format.replace(commaRegExp, EMPTY);\n }\n decimalIndex = format.indexOf(POINT);\n length = format.length;\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 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 if (hasZero && zeroIndex > sharpIndex) {\n idx = zeroIndex;\n } else if (sharpIndex > zeroIndex) {\n if (hasSharp && idx > sharpIndex) {\n idx = sharpIndex;\n } else if (hasZero && idx < zeroIndex) {\n idx = zeroIndex;\n }\n }\n if (idx > -1) {\n number = round(number, idx);\n }\n } else {\n number = round(number);\n }\n sharpIndex = format.indexOf(SHARP);\n startZeroIndex = zeroIndex = format.indexOf(ZERO);\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 sharpIndex = format.lastIndexOf(SHARP);\n zeroIndex = format.lastIndexOf(ZERO);\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 if (start == length) {\n end = start;\n }\n if (start != -1) {\n value = number.toString().split(POINT);\n integer = value[0];\n fraction = value[1] || EMPTY;\n integerLength = integer.length;\n fractionLength = fraction.length;\n if (negative && number * -1 >= 0) {\n negative = false;\n }\n number = format.substring(0, start);\n if (negative && !hasNegativeFormat) {\n number += '-';\n }\n for (idx = start; idx < length; idx++) {\n ch = format.charAt(idx);\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 if (decimalIndex - idx <= integerLength && decimalIndex - idx > -1) {\n number += integer;\n idx = decimalIndex;\n }\n if (decimalIndex === idx) {\n number += (fraction ? decimal : EMPTY) + fraction;\n idx += end - decimalIndex + 1;\n continue;\n }\n }\n if (ch === ZERO) {\n number += ch;\n replacement = ch;\n } else if (ch === SHARP) {\n number += replacement;\n }\n }\n if (hasGroup) {\n number = groupInteger(number, start + (negative && !hasNegativeFormat ? 1 : 0), Math.max(end, integerLength + start), numberFormat);\n }\n if (end >= start) {\n number += format.substring(end + 1);\n }\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 length = literals.length;\n if (length) {\n for (idx = 0; idx < length; idx++) {\n number = number.replace(PLACEHOLDER, literals[idx]);\n }\n }\n }\n return number;\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 end = decimalIndex !== -1 ? decimalIndex : end + 1;\n integer = number.substring(start, end);\n integerLength = integer.length;\n if (integerLength >= groupSize) {\n idx = integerLength;\n parts = [];\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 ? newGroupSize : groupSize;\n if (groupSize === 0) {\n parts.push(integer.substring(0, idx));\n break;\n }\n }\n integer = parts.reverse().join(numberFormat[COMMA]);\n number = number.substring(0, start) + integer + number.substring(end);\n }\n return number;\n };\n var round = function (value, precision) {\n precision = precision || 0;\n value = value.toString().split('e');\n value = Math.round(+(value[0] + 'e' + (value[1] ? +value[1] + precision : precision)));\n value = value.toString().split('e');\n value = +(value[0] + 'e' + (value[1] ? +value[1] - precision : -precision));\n return value.toFixed(Math.min(precision, 20));\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 return value !== undefined ? value : '';\n };\n kendo.format = function (fmt) {\n var values = arguments;\n return fmt.replace(formatRegExp, function (match, index, placeholderFormat) {\n var value = values[parseInt(index, 10) + 1];\n return toString(value, placeholderFormat ? placeholderFormat.substring(1) : '');\n });\n };\n kendo._extractFormat = function (format) {\n if (format.slice(0, 3) === '{0:') {\n format = format.slice(3, format.length - 1);\n }\n return format;\n };\n kendo._activeElement = function () {\n try {\n return document.activeElement;\n } catch (e) {\n return document.documentElement.activeElement;\n }\n };\n kendo._round = round;\n kendo._outerWidth = function (element, includeMargin) {\n return $(element).outerWidth(includeMargin || false) || 0;\n };\n kendo._outerHeight = function (element, includeMargin) {\n return $(element).outerHeight(includeMargin || false) || 0;\n };\n kendo.toString = toString;\n }());\n (function () {\n var nonBreakingSpaceRegExp = /\\u00A0/g, exponentRegExp = /[eE][\\-+]?[0-9]+/, shortTimeZoneRegExp = /[+|\\-]\\d{1,2}/, longTimeZoneRegExp = /[+|\\-]\\d{1,2}:?\\d{2}/, dateRegExp = /^\\/Date\\((.*?)\\)\\/$/, offsetRegExp = /[+-]\\d*/, FORMATS_SEQUENCE = [\n [],\n [\n 'G',\n 'g',\n 'F'\n ],\n [\n 'D',\n 'd',\n 'y',\n 'm',\n 'T',\n 't'\n ]\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 [\n 'yyyy-MM-ddTHH:mm',\n 'yyyy-MM-dd HH:mm',\n 'yyyy/MM/dd HH:mm'\n ],\n [\n 'yyyy/MM/dd',\n 'yyyy-MM-dd',\n 'HH:mm:ss',\n 'HH:mm'\n ]\n ], numberRegExp = {\n 2: /^\\d{1,2}/,\n 3: /^\\d{1,3}/,\n 4: /^\\d{4}/\n }, objectToString = {}.toString;\n function outOfRange(value, start, end) {\n return !(value >= start && value <= end);\n }\n function designatorPredicate(designator) {\n return designator.charAt(0);\n }\n function mapDesignators(designators) {\n return $.map(designators, designatorPredicate);\n }\n function adjustDST(date, hours) {\n if (!hours && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n }\n }\n function lowerArray(data) {\n var idx = 0, length = data.length, array = [];\n for (; idx < length; idx++) {\n array[idx] = (data[idx] + '').toLowerCase();\n }\n return array;\n }\n function lowerLocalInfo(localInfo) {\n var newLocalInfo = {}, property;\n for (property in localInfo) {\n newLocalInfo[property] = lowerArray(localInfo[property]);\n }\n return newLocalInfo;\n }\n function parseExact(value, format, culture) {\n if (!value) {\n return null;\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 }, getNumber = function (size) {\n var rg = numberRegExp[size] || new RegExp('^\\\\d{1,' + size + '}'), match = value.substr(valueIdx, size).match(rg);\n if (match) {\n match = match[0];\n valueIdx += match.length;\n return parseInt(match, 10);\n }\n return null;\n }, getIndexByName = function (names, lower) {\n var i = 0, length = names.length, name, nameLength, matchLength = 0, matchIdx = 0, subValue;\n for (; i < length; i++) {\n name = names[i];\n nameLength = name.length;\n subValue = value.substr(valueIdx, nameLength);\n if (lower) {\n subValue = subValue.toLowerCase();\n }\n if (subValue == name && nameLength > matchLength) {\n matchLength = nameLength;\n matchIdx = i;\n }\n }\n if (matchLength) {\n valueIdx += matchLength;\n return matchIdx + 1;\n }\n return null;\n }, checkLiteral = function () {\n var result = false;\n if (value.charAt(valueIdx) === format[idx]) {\n valueIdx++;\n result = true;\n }\n return result;\n }, calendar = culture.calendars.standard, year = null, month = null, day = null, hours = null, minutes = null, seconds = null, milliseconds = null, idx = 0, valueIdx = 0, literal = false, date = new Date(), twoDigitYearMax = calendar.twoDigitYearMax || 2029, defaultYear = date.getFullYear(), ch, count, length, pattern, pmHour, UTC, matches, amDesignators, pmDesignators, hoursOffset, minutesOffset, hasTime, match;\n if (!format) {\n format = 'd';\n }\n pattern = calendar.patterns[format];\n if (pattern) {\n format = pattern;\n }\n format = format.split('');\n length = format.length;\n for (; idx < length; idx++) {\n ch = format[idx];\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 if (day !== null && count > 2) {\n continue;\n }\n day = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerDays[count == 3 ? 'namesAbbr' : 'names'], true);\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 if (month === null || outOfRange(month, 1, 12)) {\n return null;\n }\n month -= 1;\n } else if (ch === 'y') {\n count = lookAhead('y');\n year = getNumber(count);\n if (year === null) {\n return null;\n }\n if (count == 2) {\n if (typeof twoDigitYearMax === 'string') {\n twoDigitYearMax = defaultYear + parseInt(twoDigitYearMax, 10);\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 match = value.substr(valueIdx, count).match(numberRegExp[3]);\n milliseconds = getNumber(count);\n if (milliseconds !== null) {\n milliseconds = parseFloat('0.' + match[0], 10);\n milliseconds = kendo._round(milliseconds, 3);\n milliseconds *= 1000;\n }\n if (milliseconds === null || outOfRange(milliseconds, 0, 999)) {\n return null;\n }\n } else if (ch === 't') {\n count = lookAhead('t');\n amDesignators = calendar.AM;\n pmDesignators = calendar.PM;\n if (count === 1) {\n amDesignators = mapDesignators(amDesignators);\n pmDesignators = mapDesignators(pmDesignators);\n }\n pmHour = getIndexByName(pmDesignators);\n if (!pmHour && !getIndexByName(amDesignators)) {\n return null;\n }\n } else if (ch === 'z') {\n UTC = true;\n count = lookAhead('z');\n if (value.substr(valueIdx, 1) === 'Z') {\n checkLiteral();\n continue;\n }\n matches = value.substr(valueIdx, 6).match(count > 2 ? longTimeZoneRegExp : shortTimeZoneRegExp);\n if (!matches) {\n return null;\n }\n matches = matches[0].split(':');\n hoursOffset = matches[0];\n minutesOffset = matches[1];\n if (!minutesOffset && hoursOffset.length > 3) {\n valueIdx = hoursOffset.length - 2;\n minutesOffset = hoursOffset.substring(valueIdx);\n hoursOffset = hoursOffset.substring(0, valueIdx);\n }\n hoursOffset = parseInt(hoursOffset, 10);\n if (outOfRange(hoursOffset, -12, 13)) {\n return null;\n }\n if (count > 2) {\n minutesOffset = parseInt(minutesOffset, 10);\n if (isNaN(minutesOffset) || outOfRange(minutesOffset, 0, 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 hasTime = hours !== null || minutes !== null || seconds || null;\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 if (day === null) {\n day = 1;\n }\n }\n if (pmHour && hours < 12) {\n hours += 12;\n }\n if (UTC) {\n if (hoursOffset) {\n hours += -hoursOffset;\n }\n if (minutesOffset) {\n minutes += -minutesOffset;\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 if (year < 100) {\n value.setFullYear(year);\n }\n if (value.getDate() !== day && UTC === undefined) {\n return null;\n }\n return value;\n }\n function parseMicrosoftFormatOffset(offset) {\n var sign = offset.substr(0, 1) === '-' ? -1 : 1;\n offset = offset.substring(1);\n offset = parseInt(offset.substr(0, 2), 10) * 60 + parseInt(offset.substring(2), 10);\n return sign * offset;\n }\n function getDefaultFormats(culture) {\n var length = math.max(FORMATS_SEQUENCE.length, STANDARD_FORMATS.length);\n var patterns = culture.calendar.patterns;\n var cultureFormats, formatIdx, idx;\n var formats = [];\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 return formats;\n }\n kendo.parseDate = function (value, formats, culture) {\n if (objectToString.call(value) === '[object Date]') {\n return value;\n }\n var idx = 0;\n var date = null;\n var length;\n var tzoffset;\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 date = new Date(parseInt(date, 10));\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 return date;\n }\n }\n culture = kendo.getCulture(culture);\n if (!formats) {\n formats = getDefaultFormats(culture);\n }\n formats = isArray(formats) ? formats : [formats];\n length = formats.length;\n for (; idx < length; idx++) {\n date = parseExact(value, formats[idx], culture);\n if (date) {\n return date;\n }\n }\n return date;\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 kendo.parseFloat = function (value, culture, format) {\n if (!value && value !== 0) {\n return null;\n }\n if (typeof value === NUMBER) {\n return value;\n }\n value = value.toString();\n culture = kendo.getCulture(culture);\n var number = culture.numberFormat, percent = number.percent, currency = number.currency, symbol = currency.symbol, percentSymbol = percent.symbol, negative = value.indexOf('-'), parts, isPercent;\n if (exponentRegExp.test(value)) {\n value = parseFloat(value.replace(number['.'], '.'));\n if (isNaN(value)) {\n value = null;\n }\n return value;\n }\n if (negative > 0) {\n return null;\n } else {\n negative = negative > -1;\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 value = value.replace('-', '').replace(symbol, '').replace(nonBreakingSpaceRegExp, ' ').split(number[','].replace(nonBreakingSpaceRegExp, ' ')).join('').replace(number['.'], '.');\n value = parseFloat(value);\n if (isNaN(value)) {\n value = null;\n } else if (negative) {\n value *= -1;\n }\n if (value && isPercent) {\n value /= 100;\n }\n return value;\n };\n }());\n function getShadows(element) {\n var shadow = element.css(kendo.support.transitions.css + 'box-shadow') || element.css('box-shadow'), radius = shadow ? shadow.match(boxShadowRegExp) || [\n 0,\n 0,\n 0,\n 0,\n 0\n ] : [\n 0,\n 0,\n 0,\n 0,\n 0\n ], blur = math.max(+radius[3], +(radius[4] || 0));\n return {\n left: -radius[1] + blur,\n right: +radius[1] + blur,\n bottom: +radius[2] + blur\n };\n }\n function wrap(element, autosize) {\n var browser = support.browser, percentage, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight;\n if (!element.parent().hasClass('k-animation-container')) {\n var width = element[0].style.width, height = element[0].style.height, percentWidth = percentRegExp.test(width), percentHeight = percentRegExp.test(height);\n percentage = percentWidth || percentHeight;\n if (!percentWidth && (!autosize || autosize && width)) {\n width = outerWidth(element);\n }\n if (!percentHeight && (!autosize || autosize && height)) {\n height = outerHeight(element);\n }\n element.wrap($('<div/>').addClass('k-animation-container').css({\n width: width,\n height: height\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 var wrapper = element.parent('.k-animation-container'), wrapperStyle = wrapper[0].style;\n if (wrapper.is(':hidden')) {\n wrapper.show();\n }\n percentage = percentRegExp.test(wrapperStyle.width) || percentRegExp.test(wrapperStyle.height);\n if (!percentage) {\n wrapper.css({\n width: outerWidth(element),\n height: outerHeight(element),\n boxSizing: 'content-box',\n mozBoxSizing: 'content-box',\n webkitBoxSizing: 'content-box'\n });\n }\n }\n if (browser.msie && math.floor(browser.version) <= 7) {\n element.css({ zoom: 1 });\n element.children('.k-menu').width(element.width());\n }\n return element.parent();\n }\n function deepExtend(destination) {\n var i = 1, length = arguments.length;\n for (i = 1; i < length; i++) {\n deepExtendOne(destination, arguments[i]);\n }\n return destination;\n }\n function deepExtendOne(destination, source) {\n var ObservableArray = kendo.data.ObservableArray, LazyObservableArray = kendo.data.LazyObservableArray, DataSource = kendo.data.DataSource, HierarchicalDataSource = kendo.data.HierarchicalDataSource, property, propValue, propType, propInit, destProp;\n for (property in source) {\n propValue = source[property];\n propType = typeof propValue;\n if (propType === OBJECT && propValue !== null) {\n propInit = propValue.constructor;\n } else {\n propInit = null;\n }\n if (propInit && propInit !== Array && propInit !== ObservableArray && propInit !== LazyObservableArray && propInit !== DataSource && propInit !== HierarchicalDataSource && propInit !== RegExp) {\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 return destination;\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 ? dflt : agent;\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 function toCamelCase(str) {\n return str.replace(/\\-(\\w)/g, function (strMatch, g1) {\n return g1.toUpperCase();\n });\n }\n function getComputedStyles(element, properties) {\n var styles = {}, computedStyle;\n if (document.defaultView && document.defaultView.getComputedStyle) {\n computedStyle = document.defaultView.getComputedStyle(element, '');\n if (properties) {\n $.each(properties, function (idx, value) {\n styles[value] = computedStyle.getPropertyValue(value);\n });\n }\n } else {\n computedStyle = element.currentStyle;\n if (properties) {\n $.each(properties, function (idx, value) {\n styles[value] = computedStyle[toCamelCase(value)];\n });\n }\n }\n if (!kendo.size(styles)) {\n styles = computedStyle;\n }\n return styles;\n }\n function isScrollable(element) {\n if (element && element.className && typeof element.className === 'string' && element.className.indexOf('k-auto-scrollable') > -1) {\n return true;\n }\n var overflow = getComputedStyles(element, ['overflow']).overflow;\n return overflow == 'auto' || overflow == 'scroll';\n }\n function scrollLeft(element, value) {\n var webkit = support.browser.webkit;\n var mozila = support.browser.mozilla;\n var el = element instanceof $ ? element[0] : element;\n var isRtl;\n if (!element) {\n return;\n }\n isRtl = support.isRtl(element);\n if (value !== undefined) {\n if (isRtl && webkit) {\n el.scrollLeft = el.scrollWidth - el.clientWidth - value;\n } else if (isRtl && mozila) {\n el.scrollLeft = -value;\n } else {\n el.scrollLeft = value;\n }\n } else {\n if (isRtl && webkit) {\n return el.scrollWidth - el.clientWidth - el.scrollLeft;\n } else {\n return Math.abs(el.scrollLeft);\n }\n }\n }\n (function () {\n support._scrollbar = undefined;\n support.scrollbar = function (refresh) {\n if (!isNaN(support._scrollbar) && !refresh) {\n return support._scrollbar;\n } else {\n var div = document.createElement('div'), result;\n div.style.cssText = 'overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block';\n div.innerHTML = ' ';\n document.body.appendChild(div);\n support._scrollbar = result = div.offsetWidth - div.scrollWidth;\n document.body.removeChild(div);\n return result;\n }\n };\n support.isRtl = function (element) {\n return $(element).closest('.k-rtl').length > 0;\n };\n var table = document.createElement('table');\n try {\n table.innerHTML = '<tr><td></td></tr>';\n support.tbodyInnerHtml = true;\n } catch (e) {\n support.tbodyInnerHtml = false;\n }\n support.touch = 'ontouchstart' in window;\n var docStyle = document.documentElement.style;\n var transitions = support.transitions = false, transforms = support.transforms = false, elementProto = 'HTMLElement' in window ? HTMLElement.prototype : [];\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 each([\n 'Moz',\n 'webkit',\n 'O',\n 'ms'\n ], function () {\n var prefix = this.toString(), hasTransitions = typeof table.style[prefix + 'Transition'] === STRING;\n if (hasTransitions || typeof table.style[prefix + 'Transform'] === STRING) {\n var lowPrefix = prefix.toLowerCase();\n transforms = {\n css: lowPrefix != 'ms' ? '-' + lowPrefix + '-' : '',\n prefix: prefix,\n event: lowPrefix === 'o' || lowPrefix === 'webkit' ? lowPrefix : ''\n };\n if (hasTransitions) {\n transitions = transforms;\n transitions.event = transitions.event ? transitions.event + 'TransitionEnd' : 'transitionend';\n }\n return false;\n }\n });\n table = null;\n support.transforms = transforms;\n support.transitions = transitions;\n support.devicePixelRatio = window.devicePixelRatio === undefined ? 1 : window.devicePixelRatio;\n try {\n support.screenWidth = window.outerWidth || window.screen ? window.screen.availWidth : window.innerWidth;\n support.screenHeight = window.outerHeight || window.screen ? window.screen.availHeight : window.innerHeight;\n } catch (e) {\n support.screenWidth = window.screen.availWidth;\n support.screenHeight = window.screen.availHeight;\n }\n support.detectOS = function (ua) {\n var os = false, minorVersion, match = [], notAndroidPhone = !/mobile safari/i.test(ua), 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 }, 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 }, formFactorRxs = { tablet: /playbook|ipad|fire/i }, 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 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) {\n return false;\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].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;\n os.appMode = window.navigator.standalone || /file|local|wmapp/.test(window.location.protocol) || os.cordova;\n if (os.android && (support.devicePixelRatio < 1.5 && os.flatVersion < 400 || notAndroidPhone) && (support.screenWidth > 800 || support.screenHeight > 800)) {\n os.tablet = agent;\n }\n break;\n }\n }\n }\n return os;\n };\n var mobileOS = support.mobileOS = support.detectOS(navigator.userAgent);\n support.wpDevicePixelRatio = mobileOS.wp ? screen.width / 320 : 0;\n support.hasNativeScrolling = false;\n if (mobileOS.ios || mobileOS.android && mobileOS.majorVersion > 2 || mobileOS.wp) {\n support.hasNativeScrolling = mobileOS;\n }\n support.delayedClick = function () {\n if (support.touch) {\n if (mobileOS.ios) {\n return true;\n }\n if (mobileOS.android) {\n if (!support.browser.chrome) {\n return true;\n }\n if (support.browser.version < 32) {\n return false;\n }\n return !($('meta[name=viewport]').attr('content') || '').match(/user-scalable=no/i);\n }\n }\n return false;\n };\n support.mouseAndTouchPresent = support.touch && !(support.mobileOS.ios || support.mobileOS.android);\n support.detectBrowser = function (ua) {\n var browser = false, match = [], browserRxs = {\n edge: /(edge)[ \\/]([\\w.]+)/i,\n webkit: /(chrome)[ \\/]([\\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 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 break;\n }\n }\n }\n return browser;\n };\n support.browser = support.detectBrowser(navigator.userAgent);\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 if (support.browser.chrome) {\n commands.paste = false;\n if (support.browser.version >= 43) {\n commands.copy = true;\n commands.cut = true;\n }\n }\n return commands;\n };\n support.clipboard = support.detectClipboardAccess();\n support.zoomLevel = function () {\n try {\n var browser = support.browser;\n var ie11WidthCorrection = 0;\n var docEl = document.documentElement;\n if (browser.msie && browser.version == 11 && docEl.scrollHeight > docEl.clientHeight && !support.touch) {\n ie11WidthCorrection = support.scrollbar();\n }\n return support.touch ? docEl.clientWidth / window.innerWidth : browser.msie && browser.version >= 10 ? ((top || window).document.documentElement.offsetWidth + ie11WidthCorrection) / (top || window).innerWidth : 1;\n } catch (e) {\n return 1;\n }\n };\n support.cssBorderSpacing = typeof docStyle.borderSpacing != 'undefined' && !(support.browser.msie && support.browser.version < 8);\n (function (browser) {\n var cssClass = '', docElement = $(document.documentElement), majorVersion = parseInt(browser.version, 10);\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 if (cssClass) {\n cssClass = 'k-' + cssClass + ' k-' + cssClass + majorVersion;\n }\n if (support.mobileOS) {\n cssClass += ' k-mobile';\n }\n if (!support.cssFlexbox) {\n cssClass += ' k-no-flexbox';\n }\n docElement.addClass(cssClass);\n }(support.browser));\n support.eventCapture = document.documentElement.addEventListener;\n var input = document.createElement('input');\n support.placeholder = 'placeholder' in input;\n support.propertyChangeEvent = 'onpropertychange' in input;\n support.input = function () {\n var types = [\n 'number',\n 'date',\n 'time',\n 'month',\n 'week',\n 'datetime',\n 'datetime-local'\n ];\n var length = types.length;\n var value = 'test';\n var result = {};\n var idx = 0;\n var type;\n for (; idx < length; idx++) {\n type = types[idx];\n input.setAttribute('type', type);\n input.value = value;\n result[type.replace('-', '')] = input.type !== 'text' && input.value !== value;\n }\n return result;\n }();\n input.style.cssText = 'float:left;';\n support.cssFloat = !!input.style.cssFloat;\n input = null;\n support.stableSort = function () {\n var threshold = 513;\n var sorted = [{\n index: 0,\n field: 'b'\n }];\n for (var i = 1; i < threshold; i++) {\n sorted.push({\n index: i,\n field: 'a'\n });\n }\n sorted.sort(function (a, b) {\n return a.field > b.field ? 1 : a.field < b.field ? -1 : 0;\n });\n return sorted[0].index === 1;\n }();\n support.matchesSelector = elementProto.webkitMatchesSelector || elementProto.mozMatchesSelector || elementProto.msMatchesSelector || elementProto.oMatchesSelector || elementProto.matchesSelector || elementProto.matches || function (selector) {\n var nodeList = document.querySelectorAll ? (this.parentNode || document).querySelectorAll(selector) || [] : $(selector), i = nodeList.length;\n while (i--) {\n if (nodeList[i] == this) {\n return true;\n }\n }\n return false;\n };\n support.pushState = window.history && window.history.pushState;\n var documentMode = document.documentMode;\n support.hashChange = 'onhashchange' in window && !(support.browser.msie && (!documentMode || documentMode <= 8));\n support.customElements = 'registerElement' in window.document;\n var chrome = support.browser.chrome;\n support.msPointers = !chrome && window.MSPointerEvent;\n support.pointers = !chrome && window.PointerEvent;\n support.kineticScrollNeeded = mobileOS && (support.touch || support.msPointers || support.pointers);\n }());\n function size(obj) {\n var result = 0, key;\n for (key in obj) {\n if (obj.hasOwnProperty(key) && key != 'toJSON') {\n result++;\n }\n }\n return result;\n }\n function getOffset(element, type, positioned) {\n if (!type) {\n type = 'offset';\n }\n var offset = element[type]();\n var result = {\n top: offset.top,\n right: offset.right,\n bottom: offset.bottom,\n left: offset.left\n };\n if (support.browser.msie && (support.pointers || support.msPointers) && !positioned) {\n var sign = support.isRtl(element) ? 1 : -1;\n result.top -= window.pageYOffset + sign * document.documentElement.scrollTop;\n result.left -= window.pageXOffset + sign * document.documentElement.scrollLeft;\n }\n return result;\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 function parseEffects(input) {\n var effects = {};\n each(typeof input === 'string' ? input.split(' ') : input, function (idx) {\n effects[idx] = this;\n });\n return effects;\n }\n function fx(element) {\n return new kendo.effects.Element(element);\n }\n var effects = {};\n $.extend(effects, {\n enabled: true,\n Element: function (element) {\n this.element = $(element);\n },\n promise: function (element, options) {\n if (!element.is(':visible')) {\n element.css({ display: element.data('olddisplay') || 'block' }).css('display');\n }\n if (options.hide) {\n element.data('olddisplay', element.css('display')).hide();\n }\n if (options.init) {\n options.init();\n }\n if (options.completeCallback) {\n options.completeCallback(element);\n }\n element.dequeue();\n },\n disable: function () {\n this.enabled = false;\n this.promise = this.promiseShim;\n },\n enable: function () {\n this.enabled = true;\n this.promise = this.animatedPromise;\n }\n });\n effects.promiseShim = effects.promise;\n function prepareAnimationOptions(options, duration, reverse, complete) {\n if (typeof options === STRING) {\n if (isFunction(duration)) {\n complete = duration;\n duration = 400;\n reverse = false;\n }\n if (isFunction(reverse)) {\n complete = reverse;\n reverse = false;\n }\n if (typeof duration === BOOLEAN) {\n reverse = duration;\n duration = 400;\n }\n options = {\n effects: options,\n duration: duration,\n reverse: reverse,\n complete: complete\n };\n }\n return extend({\n effects: {},\n duration: 400,\n reverse: false,\n init: noop,\n teardown: noop,\n hide: false\n }, options, {\n completeCallback: options.complete,\n complete: noop\n });\n }\n function animate(element, options, duration, reverse, complete) {\n var idx = 0, length = element.length, instance;\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 return element;\n }\n function toggleClass(element, classes, options, add) {\n if (classes) {\n classes = classes.split(' ');\n each(classes, function (idx, value) {\n element.toggleClass(value, add);\n });\n }\n return element;\n }\n if (!('kendoAnimate' in $.fn)) {\n extend($.fn, {\n kendoStop: function (clearQueue, gotoEnd) {\n return this.stop(clearQueue, gotoEnd);\n },\n kendoAnimate: function (options, duration, reverse, complete) {\n return animate(this, options, duration, reverse, complete);\n },\n kendoAddClass: function (classes, options) {\n return kendo.toggleClass(this, classes, options, true);\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 var ampRegExp = /&/g, ltRegExp = /</g, quoteRegExp = /\"/g, aposRegExp = /'/g, gtRegExp = />/g;\n function htmlEncode(value) {\n return ('' + value).replace(ampRegExp, '&').replace(ltRegExp, '<').replace(gtRegExp, '>').replace(quoteRegExp, '"').replace(aposRegExp, ''');\n }\n var eventTarget = function (e) {\n return e.target;\n };\n if (support.touch) {\n eventTarget = function (e) {\n var touches = 'originalEvent' in e ? e.originalEvent.changedTouches : 'changedTouches' in e ? e.changedTouches : null;\n return touches ? document.elementFromPoint(touches[0].clientX, touches[0].clientY) : e.target;\n };\n each([\n 'swipe',\n 'swipeLeft',\n 'swipeRight',\n 'swipeUp',\n 'swipeDown',\n 'doubleTap',\n 'tap'\n ], function (m, value) {\n $.fn[value] = function (callback) {\n return this.bind(value, callback);\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 var wrapExpression = function (members, paramName) {\n var result = paramName || 'd', index, idx, length, member, count = 1;\n for (idx = 0, length = members.length; idx < length; idx++) {\n member = members[idx];\n if (member !== '') {\n index = member.indexOf('[');\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 count++;\n result += member + (idx < length - 1 ? ' || {})' : ')');\n }\n }\n return new Array(count).join('(') + result;\n }, localUrlRe = /^([a-z]+:)?\\/\\//i;\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 webComponents: kendo.webComponents || [],\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: proxy(Template.compile, Template),\n render: proxy(Template.render, Template),\n stringify: proxy(JSON.stringify, JSON),\n eventTarget: eventTarget,\n htmlEncode: htmlEncode,\n isLocalUrl: function (url) {\n return url && !localUrlRe.test(url);\n },\n expr: function (expression, safe, paramName) {\n expression = expression || '';\n if (typeof safe == STRING) {\n paramName = safe;\n safe = false;\n }\n paramName = paramName || 'd';\n if (expression && expression.charAt(0) !== '[') {\n expression = '.' + expression;\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 return expression;\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 setter: function (expression) {\n return setterCache[expression] = setterCache[expression] || new Function('d,value', kendo.expr(expression) + '=value');\n },\n accessor: function (expression) {\n return {\n get: kendo.getter(expression),\n set: kendo.setter(expression)\n };\n },\n guid: function () {\n var id = '', i, random;\n for (i = 0; i < 32; i++) {\n random = math.random() * 16 | 0;\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 return id;\n },\n roleSelector: function (role) {\n return role.replace(/(\\S+)/g, '[' + kendo.attr('role') + '=$1],').slice(0, -1);\n },\n directiveSelector: function (directives) {\n var selectors = directives.split(' ');\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 return selectors.join(' ').replace(/(\\S+)/g, 'kendo-mobile-$1,').slice(0, -1);\n },\n triggeredByInput: function (e) {\n return /^(label|input|textarea|select)$/i.test(e.target.tagName);\n },\n onWidgetRegistered: function (callback) {\n for (var i = 0, len = kendo.widgets.length; i < len; i++) {\n callback(kendo.widgets[i]);\n }\n kendo._widgetRegisteredCallbacks.push(callback);\n },\n logToConsole: function (message, type) {\n var console = window.console;\n if (!kendo.suppressLog && typeof console != 'undefined' && console.log) {\n console[type || 'log'](message);\n }\n }\n });\n var Widget = Observable.extend({\n init: function (element, options) {\n var that = this;\n that.element = kendo.jQuery(element).handler(that);\n that.angular('init', options);\n Observable.fn.init.call(that);\n var dataSource = options ? options.dataSource : null;\n if (dataSource) {\n options = extend({}, options, { dataSource: {} });\n }\n options = that.options = extend(true, {}, that.options, options);\n if (dataSource) {\n options.dataSource = dataSource;\n }\n if (!that.element.attr(kendo.attr('role'))) {\n that.element.attr(kendo.attr('role'), (options.name || '').toLowerCase());\n }\n that.element.data('kendo' + options.prefix + options.name, that);\n that.bind(that.events, options);\n },\n events: [],\n options: { prefix: '' },\n _hasBindingTarget: function () {\n return !!this.element[0].kendoBindingTarget;\n },\n _tabindex: function (target) {\n target = target || this.wrapper;\n var element = this.element, TABINDEX = 'tabindex', tabindex = target.attr(TABINDEX) || element.attr(TABINDEX);\n element.removeAttr(TABINDEX);\n target.attr(TABINDEX, !isNaN(tabindex) ? tabindex : 0);\n },\n setOptions: function (options) {\n this._setEvents(options);\n $.extend(this.options, options);\n },\n _setEvents: function (options) {\n var that = this, idx = 0, length = that.events.length, e;\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 }\n }\n that.bind(that.events, options);\n },\n resize: function (force) {\n var size = this.getSize(), currentSize = this._size;\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 getSize: function () {\n return kendo.dimensions(this.element);\n },\n size: function (size) {\n if (!size) {\n return this.getSize();\n } else {\n this.setSize(size);\n }\n },\n setSize: $.noop,\n _resize: $.noop,\n destroy: function () {\n var that = this;\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 callback.call(this);\n this._muteRebind = false;\n }\n });\n var DataBoundWidget = Widget.extend({\n dataItems: function () {\n return this.dataSource.flatView();\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 kendo.dimensions = function (element, dimensions) {\n var domElement = element[0];\n if (dimensions) {\n element.css(dimensions);\n }\n return {\n width: domElement.offsetWidth,\n height: domElement.offsetHeight\n };\n };\n kendo.notify = noop;\n var templateRegExp = /template$/i, jsonRegExp = /^\\s*(?:\\{(?:.|\\r\\n|\\n)*\\}|\\[(?:.|\\r\\n|\\n)*\\])\\s*$/, jsonFormatRegExp = /^\\{(\\d+)(:[^\\}]+)?\\}|^\\[[A-Za-z_]*\\]$/, dashRegExp = /([A-Z])/g;\n function parseOption(element, option) {\n var value;\n if (option.indexOf('data') === 0) {\n option = option.substring(4);\n option = option.charAt(0).toLowerCase() + option.substring(1);\n }\n option = option.replace(dashRegExp, '-$1');\n value = element.getAttribute('data-' + kendo.ns + option);\n if (value === null) {\n value = undefined;\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)) {\n value = parseFloat(value);\n } else if (jsonRegExp.test(value) && !jsonFormatRegExp.test(value)) {\n value = new Function('return (' + value + ')')();\n }\n return value;\n }\n function parseOptions(element, options) {\n var result = {}, option, value;\n for (option in options) {\n value = parseOption(element, option);\n if (value !== undefined) {\n if (templateRegExp.test(option)) {\n if (typeof value === 'string') {\n value = kendo.template($('#' + value).html());\n } else {\n value = element.getAttribute(option);\n }\n }\n result[option] = value;\n }\n }\n return result;\n }\n kendo.initWidget = function (element, options, roles) {\n var result, option, widget, idx, length, role, value, dataSource, fullPath, widgetKeyRegExp;\n if (!roles) {\n roles = kendo.ui.roles;\n } else if (roles.roles) {\n roles = roles.roles;\n }\n element = element.nodeType ? element : element[0];\n role = element.getAttribute('data-' + kendo.ns + 'role');\n if (!role) {\n return;\n }\n fullPath = role.indexOf('.') === -1;\n if (fullPath) {\n widget = roles[role];\n } else {\n widget = kendo.getter(role)(window);\n }\n var data = $(element).data(), widgetKey = widget ? 'kendo' + widget.fn.options.prefix + widget.fn.options.name : '';\n if (fullPath) {\n widgetKeyRegExp = new RegExp('^kendo.*' + role + '$', 'i');\n } else {\n widgetKeyRegExp = new RegExp('^' + widgetKey + '$', 'i');\n }\n for (var key in data) {\n if (key.match(widgetKeyRegExp)) {\n if (key === widgetKey) {\n result = data[key];\n } else {\n return data[key];\n }\n }\n }\n if (!widget) {\n return;\n }\n dataSource = parseOption(element, 'dataSource');\n options = $.extend({}, parseOptions(element, widget.fn.options), options);\n if (dataSource) {\n if (typeof dataSource === STRING) {\n options.dataSource = kendo.getter(dataSource)(window);\n } else {\n options.dataSource = dataSource;\n }\n }\n for (idx = 0, length = widget.fn.events.length; idx < length; idx++) {\n option = widget.fn.events[idx];\n value = parseOption(element, option);\n if (value !== undefined) {\n options[option] = kendo.getter(value)(window);\n }\n }\n if (!result) {\n result = new widget(element, options);\n } else if (!$.isEmptyObject(options)) {\n result.setOptions(options);\n }\n return result;\n };\n kendo.rolesFromNamespaces = function (namespaces) {\n var roles = [], idx, length;\n if (!namespaces[0]) {\n namespaces = [\n kendo.ui,\n kendo.dataviz.ui\n ];\n }\n for (idx = 0, length = namespaces.length; idx < length; idx++) {\n roles[idx] = namespaces[idx].roles;\n }\n return extend.apply(null, [{}].concat(roles.reverse()));\n };\n kendo.init = function (element) {\n var roles = kendo.rolesFromNamespaces(slice.call(arguments, 1));\n $(element).find('[data-' + kendo.ns + 'role]').addBack().each(function () {\n kendo.initWidget(this, {}, roles);\n });\n };\n kendo.destroy = function (element) {\n $(element).find('[data-' + kendo.ns + 'role]').addBack().each(function () {\n var data = $(this).data();\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 function containmentComparer(a, b) {\n return $.contains(a, b) ? -1 : 1;\n }\n function resizableWidget() {\n var widget = $(this);\n return $.inArray(widget.attr('data-' + kendo.ns + 'role'), [\n 'slider',\n 'rangeslider'\n ]) > -1 || widget.is(':visible');\n }\n kendo.resize = function (element, force) {\n var widgets = $(element).find('[data-' + kendo.ns + 'role]').addBack().filter(resizableWidget);\n if (!widgets.length) {\n return;\n }\n var widgetsArray = $.makeArray(widgets);\n widgetsArray.sort(containmentComparer);\n $.each(widgetsArray, function () {\n var widget = kendo.widgetInstance($(this));\n if (widget) {\n widget.resize(force);\n }\n });\n };\n kendo.parseOptions = parseOptions;\n extend(kendo.ui, {\n Widget: Widget,\n DataBoundWidget: DataBoundWidget,\n roles: {},\n progress: function (container, toggle) {\n var mask = container.find('.k-loading-mask'), support = kendo.support, browser = support.browser, isRtl, leftRight, webkitCorrection, containerScrollLeft;\n if (toggle) {\n if (!mask.length) {\n isRtl = support.isRtl(container);\n leftRight = isRtl ? 'right' : 'left';\n containerScrollLeft = container.scrollLeft();\n webkitCorrection = browser.webkit ? !isRtl ? 0 : container[0].scrollWidth - container.width() - 2 * containerScrollLeft : 0;\n mask = $('<div class=\\'k-loading-mask\\'><span class=\\'k-loading-text\\'>' + kendo.ui.progress.messages.loading + '</span><div class=\\'k-loading-image\\'/><div class=\\'k-loading-color\\'/></div>').width('100%').height('100%').css('top', container.scrollTop()).css(leftRight, Math.abs(containerScrollLeft) + webkitCorrection).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, getter;\n register = register || kendo.ui;\n prefix = prefix || '';\n register[name] = widget;\n register.roles[name.toLowerCase()] = widget;\n getter = 'getKendo' + prefix + name;\n name = 'kendo' + prefix + name;\n var widgetEntry = {\n name: name,\n widget: widget,\n prefix: prefix || ''\n };\n kendo.widgets.push(widgetEntry);\n for (var i = 0, len = kendo._widgetRegisteredCallbacks.length; i < len; i++) {\n kendo._widgetRegisteredCallbacks[i](widgetEntry);\n }\n $.fn[name] = function (options) {\n var value = this, args;\n if (typeof options === STRING) {\n args = slice.call(arguments, 1);\n this.each(function () {\n var widget = $.data(this, name), method, result;\n if (!widget) {\n throw new Error(kendo.format('Cannot call method \\'{0}\\' of {1} before it is initialized', options, name));\n }\n method = widget[options];\n if (typeof method !== FUNCTION) {\n throw new Error(kendo.format('Cannot find method \\'{0}\\' of {1}', options, name));\n }\n result = method.apply(widget, args);\n if (result !== undefined) {\n value = result;\n return false;\n }\n });\n } else {\n this.each(function () {\n return new widget(this, options);\n });\n }\n return value;\n };\n $.fn[name].widget = widget;\n $.fn[getter] = function () {\n return this.data(name);\n };\n }\n });\n kendo.ui.progress.messages = { loading: 'Loading...' };\n var ContainerNullObject = {\n bind: function () {\n return this;\n },\n nullObject: true,\n 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 destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.kendoDestroy();\n },\n options: { prefix: 'Mobile' },\n events: [],\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 viewHasNativeScrolling: function () {\n var view = this.view();\n return view && view.options.useNativeScrolling;\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 extend(kendo.mobile, {\n init: function (element) {\n kendo.init(element, kendo.mobile.ui, kendo.ui, kendo.dataviz.ui);\n },\n appLevelNativeScrolling: function () {\n return kendo.mobile.application && kendo.mobile.application.options && kendo.mobile.application.options.useNativeScrolling;\n },\n roles: {},\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 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 kendo.touchScroller = function (elements, options) {\n if (!options) {\n options = {};\n }\n options.useNative = true;\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 kendo.preventDefault = function (e) {\n e.preventDefault();\n };\n kendo.widgetInstance = function (element, suites) {\n var role = element.data(kendo.ns + 'role'), widgets = [], i, length;\n if (role) {\n if (role === 'content') {\n role = 'scroller';\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 } else {\n widgets = [\n kendo.ui.roles[role],\n kendo.dataviz.ui.roles[role],\n kendo.mobile.ui.roles[role]\n ];\n }\n if (role.indexOf('.') >= 0) {\n widgets = [kendo.getter(role)(window)];\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 kendo.onResize = function (callback) {\n var handler = callback;\n if (support.mobileOS.android) {\n handler = function () {\n setTimeout(callback, 600);\n };\n }\n $(window).on(support.resize, handler);\n return handler;\n };\n kendo.unbindResize = function (callback) {\n $(window).off(support.resize, callback);\n };\n kendo.attrValue = function (element, key) {\n return element.data(kendo.ns + key);\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 function focusable(element, isTabIndexNotNaN) {\n var nodeName = element.nodeName.toLowerCase();\n return (/input|select|textarea|button|object/.test(nodeName) ? !element.disabled : 'a' === nodeName ? element.href || isTabIndexNotNaN : isTabIndexNotNaN) && visible(element);\n }\n function visible(element) {\n return $.expr.filters.visible(element) && !$(element).parents().addBack().filter(function () {\n return $.css(this, 'visibility') === 'hidden';\n }).length;\n }\n $.extend($.expr[':'], {\n kendoFocusable: function (element) {\n var idx = $.attr(element, 'tabindex');\n return focusable(element, !isNaN(idx) && idx > -1);\n }\n });\n var MOUSE_EVENTS = [\n 'mousedown',\n 'mousemove',\n 'mouseenter',\n 'mouseleave',\n 'mouseover',\n 'mouseout',\n 'mouseup',\n 'click'\n ];\n var EXCLUDE_BUST_CLICK_SELECTOR = 'label, input, [data-rel=external]';\n var MouseEventNormalizer = {\n setupMouseMute: function () {\n var idx = 0, length = MOUSE_EVENTS.length, element = document.documentElement;\n if (MouseEventNormalizer.mouseTrap || !support.eventCapture) {\n return;\n }\n MouseEventNormalizer.mouseTrap = true;\n MouseEventNormalizer.bustClick = false;\n MouseEventNormalizer.captureMouse = false;\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 for (; idx < length; idx++) {\n element.addEventListener(MOUSE_EVENTS[idx], handler, true);\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 unMuteMouse: function () {\n clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\n MouseEventNormalizer.mouseTrapTimeoutID = setTimeout(function () {\n MouseEventNormalizer.captureMouse = false;\n MouseEventNormalizer.bustClick = false;\n }, 400);\n }\n };\n var eventMap = {\n down: 'touchstart mousedown',\n move: 'mousemove touchmove',\n up: 'mouseup touchend touchcancel',\n cancel: 'mouseleave touchcancel'\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 if (support.msPointers && !('onmspointerenter' in window)) {\n $.each({\n MSPointerEnter: 'MSPointerOver',\n MSPointerLeave: 'MSPointerOut'\n }, function (orig, fix) {\n $.event.special[orig] = {\n delegateType: fix,\n bindType: fix,\n handle: function (event) {\n var ret, target = this, related = event.relatedTarget, handleObj = event.handleObj;\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 var getEventMap = function (e) {\n return eventMap[e] || e;\n }, eventRegEx = /([^ ]+)/g;\n kendo.applyEventMap = function (events, ns) {\n events = events.replace(eventRegEx, getEventMap);\n if (ns) {\n events = events.replace(eventRegEx, '$1.' + ns);\n }\n return events;\n };\n var on = $.fn.on;\n function kendoJQuery(selector, context) {\n return new kendoJQuery.fn.init(selector, context);\n }\n extend(true, kendoJQuery, $);\n kendoJQuery.fn = kendoJQuery.prototype = new $();\n kendoJQuery.fn.constructor = kendoJQuery;\n kendoJQuery.fn.init = function (selector, context) {\n if (context && context instanceof $ && !(context instanceof kendoJQuery)) {\n context = kendoJQuery(context);\n }\n return $.fn.init.call(this, selector, context, rootjQuery);\n };\n kendoJQuery.fn.init.prototype = kendoJQuery.fn;\n var rootjQuery = kendoJQuery(document);\n extend(kendoJQuery.fn, {\n handler: function (handler) {\n this.data('handler', handler);\n return this;\n },\n autoApplyNS: function (ns) {\n this.data('kendoNS', ns || kendo.guid());\n return this;\n },\n on: function () {\n var that = this, ns = that.data('kendoNS');\n if (arguments.length === 1) {\n return on.call(that, arguments[0]);\n }\n var context = that, args = slice.call(arguments);\n if (typeof args[args.length - 1] === UNDEFINED) {\n args.pop();\n }\n var callback = args[args.length - 1], events = kendo.applyEventMap(args[0], ns);\n if (support.mouseAndTouchPresent && events.search(/mouse|click/) > -1 && this[0] !== document.documentElement) {\n MouseEventNormalizer.setupMouseMute();\n var selector = args.length === 2 ? null : args[1], bustClick = events.indexOf('click') > -1 && events.indexOf('touchend') > -1;\n on.call(this, {\n touchstart: MouseEventNormalizer.muteMouse,\n touchend: MouseEventNormalizer.unMuteMouse\n }, selector, { bustClick: bustClick });\n }\n if (typeof callback === STRING) {\n context = that.data('handler');\n callback = context[callback];\n args[args.length - 1] = function (e) {\n callback.call(context, e);\n };\n }\n args[0] = events;\n on.apply(that, args);\n return that;\n },\n kendoDestroy: function (ns) {\n ns = ns || this.data('kendoNS');\n if (ns) {\n this.off('.' + ns);\n }\n return this;\n }\n });\n kendo.jQuery = kendoJQuery;\n kendo.eventMap = eventMap;\n kendo.timezone = function () {\n var months = {\n Jan: 0,\n Feb: 1,\n Mar: 2,\n Apr: 3,\n May: 4,\n Jun: 5,\n Jul: 6,\n Aug: 7,\n Sep: 8,\n Oct: 9,\n Nov: 10,\n Dec: 11\n };\n var days = {\n Sun: 0,\n Mon: 1,\n Tue: 2,\n Wed: 3,\n Thu: 4,\n Fri: 5,\n 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 if (!cache) {\n rule[8] = cache = {};\n }\n if (cache[year]) {\n return cache[year];\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 targetDay = days[on.substr(4, 3)];\n ourDay = date.getUTCDay();\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 targetDay = days[on.substr(0, 3)];\n ourDay = date.getUTCDay();\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay + (targetDay < ourDay ? 7 : 0));\n }\n return cache[year] = date;\n }\n function findRule(utcTime, rules, zone) {\n rules = rules[zone];\n if (!rules) {\n var time = zone.split(':');\n var offset = 0;\n if (time.length > 1) {\n offset = time[0] * 60 + Number(time[1]);\n }\n return [\n -1000000,\n 'max',\n '-',\n 'Jan',\n 1,\n [\n 0,\n 0,\n 0\n ],\n offset,\n '-'\n ];\n }\n var year = new Date(utcTime).getUTCFullYear();\n rules = jQuery.grep(rules, function (rule) {\n var from = rule[0];\n var to = rule[1];\n return from <= year && (to >= year || from == year && to == 'only' || to == 'max');\n });\n rules.push(utcTime);\n rules.sort(function (a, b) {\n if (typeof a != 'number') {\n a = Number(ruleToDate(year, a));\n }\n if (typeof b != 'number') {\n b = Number(ruleToDate(year, b));\n }\n return a - b;\n });\n var rule = rules[jQuery.inArray(utcTime, rules) - 1] || rules[rules.length - 1];\n return isNaN(rule) ? rule : null;\n }\n function findZone(utcTime, zones, timezone) {\n var zoneRules = zones[timezone];\n if (typeof zoneRules === 'string') {\n zoneRules = zones[zoneRules];\n }\n if (!zoneRules) {\n throw new Error('Timezone \"' + timezone + '\" is either incorrect, or kendo.timezones.min.js is not included.');\n }\n for (var idx = zoneRules.length - 1; idx >= 0; idx--) {\n var until = zoneRules[idx][3];\n if (until && utcTime > until) {\n break;\n }\n }\n var zone = zoneRules[idx + 1];\n if (!zone) {\n throw new Error('Timezone \"' + timezone + '\" not found on ' + utcTime + '.');\n }\n return zone;\n }\n function zoneAndRule(utcTime, zones, rules, timezone) {\n if (typeof utcTime != NUMBER) {\n utcTime = Date.UTC(utcTime.getFullYear(), utcTime.getMonth(), utcTime.getDate(), utcTime.getHours(), utcTime.getMinutes(), utcTime.getSeconds(), utcTime.getMilliseconds());\n }\n var zone = findZone(utcTime, zones, timezone);\n return {\n zone: zone,\n rule: findRule(utcTime, rules, zone[1])\n };\n }\n function offset(utcTime, timezone) {\n if (timezone == 'Etc/UTC' || timezone == 'Etc/GMT') {\n return 0;\n }\n var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n var zone = info.zone;\n var rule = info.rule;\n return kendo.parseFloat(rule ? zone[0] - rule[6] : zone[0]);\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 var base = zone[2];\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 return base;\n }\n function convert(date, fromOffset, toOffset) {\n if (typeof fromOffset == STRING) {\n fromOffset = this.offset(date, fromOffset);\n }\n if (typeof toOffset == STRING) {\n toOffset = this.offset(date, toOffset);\n }\n var fromLocalOffset = date.getTimezoneOffset();\n date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\n var toLocalOffset = date.getTimezoneOffset();\n return new Date(date.getTime() + (toLocalOffset - fromLocalOffset) * 60000);\n }\n function apply(date, timezone) {\n return this.convert(date, date.getTimezoneOffset(), timezone);\n }\n function remove(date, timezone) {\n return this.convert(date, timezone, date.getTimezoneOffset());\n }\n function toLocalDate(time) {\n return this.apply(new Date(time), 'Etc/UTC');\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 kendo.date = function () {\n var MS_PER_MINUTE = 60000, MS_PER_DAY = 86400000;\n function adjustDST(date, hours) {\n if (hours === 0 && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n return true;\n }\n return false;\n }\n function setDayOfWeek(date, day, dir) {\n var hours = date.getHours();\n dir = dir || 1;\n day = (day - date.getDay() + 7 * dir) % 7;\n date.setDate(date.getDate() + day);\n adjustDST(date, hours);\n }\n function dayOfWeek(date, day, dir) {\n date = new Date(date);\n setDayOfWeek(date, day, dir);\n return date;\n }\n function firstDayOfMonth(date) {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n }\n function lastDayOfMonth(date) {\n var last = new Date(date.getFullYear(), date.getMonth() + 1, 0), first = firstDayOfMonth(date), timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n if (timeOffset) {\n last.setHours(first.getHours() + timeOffset / 60);\n }\n return last;\n }\n function weekInYear(date, weekStart) {\n var year, days;\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n adjustDST(date, 0);\n year = date.getFullYear();\n if (weekStart !== undefined) {\n setDayOfWeek(date, weekStart, -1);\n date.setDate(date.getDate() + 4);\n } else {\n date.setDate(date.getDate() + (4 - (date.getDay() || 7)));\n }\n adjustDST(date, 0);\n days = Math.floor((date.getTime() - new Date(year, 0, 1, -6)) / 86400000);\n return 1 + Math.floor(days / 7);\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 function toUtcTime(date) {\n return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n function getMilliseconds(date) {\n return date.getTime() - getDate(date);\n }\n function isInTimeRange(value, min, max) {\n var msMin = getMilliseconds(min), msMax = getMilliseconds(max), msValue;\n if (!value || msMin == msMax) {\n return true;\n }\n if (min >= max) {\n max += MS_PER_DAY;\n }\n msValue = getMilliseconds(value);\n if (msMin > msValue) {\n msValue += MS_PER_DAY;\n }\n if (msMax < msMin) {\n msMax += MS_PER_DAY;\n }\n return msValue >= msMin && msValue <= msMax;\n }\n function isInDateRange(value, min, max) {\n var msMin = min.getTime(), msMax = max.getTime(), msValue;\n if (msMin >= msMax) {\n msMax += MS_PER_DAY;\n }\n msValue = value.getTime();\n return msValue >= msMin && msValue <= msMax;\n }\n function addDays(date, offset) {\n var hours = date.getHours();\n date = new Date(date);\n setTime(date, offset * MS_PER_DAY);\n adjustDST(date, hours);\n return date;\n }\n function setTime(date, milliseconds, ignoreDST) {\n var offset = date.getTimezoneOffset();\n var difference;\n date.setTime(date.getTime() + milliseconds);\n if (!ignoreDST) {\n difference = date.getTimezoneOffset() - offset;\n date.setTime(date.getTime() + difference * MS_PER_MINUTE);\n }\n }\n function setHours(date, time) {\n date = new Date(kendo.date.getDate(date).getTime() + kendo.date.getMilliseconds(time));\n adjustDST(date, time.getHours());\n return date;\n }\n function today() {\n return getDate(new Date());\n }\n function isToday(date) {\n return getDate(date).getTime() == today().getTime();\n }\n function toInvariantTime(date) {\n var staticDate = new Date(1980, 1, 1, 0, 0, 0);\n if (date) {\n staticDate.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n return staticDate;\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 };\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 while (iterator.nextNode()) {\n if (iterator.referenceNode && !iterator.referenceNode.textContent.trim()) {\n iterator.referenceNode.parentNode.removeChild(iterator.referenceNode);\n }\n }\n } else {\n for (var i = 0; i < element.childNodes.length; i++) {\n var child = element.childNodes[i];\n if (child.nodeType == 3 && !/\\S/.test(child.nodeValue)) {\n element.removeChild(child);\n i--;\n }\n if (child.nodeType == 1) {\n kendo.stripWhitespace(child);\n }\n }\n }\n };\n var animationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n setTimeout(callback, 1000 / 60);\n };\n kendo.animationFrame = function (callback) {\n animationFrame.call(window, callback);\n };\n var animationQueue = [];\n kendo.queueAnimation = function (callback) {\n animationQueue[animationQueue.length] = callback;\n if (animationQueue.length === 1) {\n kendo.runNextAnimation();\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 kendo.parseQueryStringParams = function (url) {\n var queryString = url.split('?')[1] || '', params = {}, paramParts = queryString.split(/&|=/), length = paramParts.length, idx = 0;\n for (; idx < length; idx += 2) {\n if (paramParts[idx] !== '') {\n params[decodeURIComponent(paramParts[idx])] = decodeURIComponent(paramParts[idx + 1]);\n }\n }\n return params;\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 kendo.wheelDeltaY = function (jQueryEvent) {\n var e = jQueryEvent.originalEvent, deltaY = e.wheelDeltaY, delta;\n if (e.wheelDelta) {\n if (deltaY === undefined || deltaY) {\n delta = e.wheelDelta;\n }\n } else if (e.detail && e.axis === e.VERTICAL_AXIS) {\n delta = -e.detail * 10;\n }\n return delta;\n };\n kendo.throttle = function (fn, delay) {\n var timeout;\n var lastExecTime = 0;\n if (!delay || delay <= 0) {\n return fn;\n }\n var throttled = function () {\n var that = this;\n var elapsed = +new Date() - lastExecTime;\n var args = arguments;\n function exec() {\n fn.apply(that, args);\n lastExecTime = +new Date();\n }\n if (!lastExecTime) {\n return exec();\n }\n if (timeout) {\n clearTimeout(timeout);\n }\n if (elapsed > delay) {\n exec();\n } else {\n timeout = setTimeout(exec, delay - elapsed);\n }\n };\n throttled.cancel = function () {\n clearTimeout(timeout);\n };\n return throttled;\n };\n kendo.caret = function (element, start, end) {\n var rangeElement;\n var isPosition = start !== undefined;\n if (end === undefined) {\n end = start;\n }\n if (element[0]) {\n element = element[0];\n }\n if (isPosition && element.disabled) {\n return;\n }\n try {\n if (element.selectionStart !== undefined) {\n if (isPosition) {\n element.focus();\n element.setSelectionRange(start, end);\n } else {\n start = [\n element.selectionStart,\n element.selectionEnd\n ];\n }\n } else if (document.selection) {\n if ($(element).is(':visible')) {\n element.focus();\n }\n rangeElement = element.createTextRange();\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(), selectionStart, selectionEnd;\n rangeElement.moveToBookmark(document.selection.createRange().getBookmark());\n rangeDuplicated.setEndPoint('EndToStart', rangeElement);\n selectionStart = rangeDuplicated.text.length;\n selectionEnd = selectionStart + rangeElement.text.length;\n start = [\n selectionStart,\n selectionEnd\n ];\n }\n }\n } catch (e) {\n start = [];\n }\n return start;\n };\n kendo.compileMobileDirective = function (element, scope) {\n var angular = window.angular;\n element.attr('data-' + kendo.ns + 'role', element[0].tagName.toLowerCase().replace('kendo-mobile-', '').replace('-', ''));\n angular.element(element).injector().invoke([\n '$compile',\n function ($compile) {\n $compile(element)(scope);\n if (!/^\\$(digest|apply)$/.test(scope.$$phase)) {\n scope.$digest();\n }\n }\n ]);\n return kendo.widgetInstance(element, kendo.mobile.ui);\n };\n kendo.antiForgeryTokens = function () {\n var tokens = {}, csrf_token = $('meta[name=csrf-token],meta[name=_csrf]').attr('content'), csrf_param = $('meta[name=csrf-param],meta[name=_csrf_header]').attr('content');\n $('input[name^=\\'__RequestVerificationToken\\']').each(function () {\n tokens[this.name] = this.value;\n });\n if (csrf_param !== undefined && csrf_token !== undefined) {\n tokens[csrf_param] = csrf_token;\n }\n return tokens;\n };\n kendo.cycleForm = function (form) {\n var firstElement = form.find('input, .k-widget').first();\n var lastElement = form.find('button, .k-button').last();\n function focus(el) {\n var widget = kendo.widgetInstance(el);\n if (widget && widget.focus) {\n widget.focus();\n } else {\n el.focus();\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 firstElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && e.shiftKey) {\n e.preventDefault();\n focus(lastElement);\n }\n });\n };\n (function () {\n function postToProxy(dataURI, fileName, proxyURL, proxyTarget) {\n var form = $('<form>').attr({\n action: proxyURL,\n method: 'POST',\n target: proxyTarget\n });\n var data = kendo.antiForgeryTokens();\n data.fileName = fileName;\n var parts = dataURI.split(';base64,');\n data.contentType = parts[0].replace('data:', '');\n data.base64 = parts[1];\n for (var name in data) {\n if (data.hasOwnProperty(name)) {\n $('<input>').attr({\n value: data[name],\n name: name,\n type: 'hidden'\n }).appendTo(form);\n }\n }\n form.appendTo('body').submit().remove();\n }\n var fileSaver = document.createElement('a');\n var downloadAttribute = 'download' in fileSaver && !kendo.support.browser.edge;\n function saveAsBlob(dataURI, fileName) {\n var blob = dataURI;\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 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 navigator.msSaveBlob(blob, fileName);\n }\n function saveAsDataURI(dataURI, fileName) {\n if (window.Blob && dataURI instanceof Blob) {\n dataURI = URL.createObjectURL(dataURI);\n }\n fileSaver.download = fileName;\n fileSaver.href = dataURI;\n var e = document.createEvent('MouseEvents');\n e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n fileSaver.dispatchEvent(e);\n setTimeout(function () {\n URL.revokeObjectURL(dataURI);\n });\n }\n kendo.saveAs = function (options) {\n var save = postToProxy;\n if (!options.forceProxy) {\n if (downloadAttribute) {\n save = saveAsDataURI;\n } else if (navigator.msSaveBlob) {\n save = saveAsBlob;\n }\n }\n save(options.dataURI, options.fileName, options.proxyURL, options.proxyTarget);\n };\n }());\n kendo.proxyModelSetters = function proxyModelSetters(data) {\n var observable = {};\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 return observable;\n };\n }(jQuery, window));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.router', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\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 (function ($, undefined) {\n var kendo = window.kendo, CHANGE = 'change', BACK = 'back', SAME = 'same', support = kendo.support, location = window.location, history = window.history, CHECK_URL_INTERVAL = 50, BROKEN_BACK_NAV = kendo.support.browser.msie, hashStrip = /^#*/, document = window.document;\n function absoluteURL(path, pathPrefix) {\n if (!pathPrefix) {\n return path;\n }\n if (path + '/' === pathPrefix) {\n path = pathPrefix;\n }\n var regEx = new RegExp('^' + pathPrefix, 'i');\n if (!regEx.test(path)) {\n path = pathPrefix + '/' + path;\n }\n return location.protocol + '//' + (location.host + '/' + path).replace(/\\/\\/+/g, '/');\n }\n function hashDelimiter(bang) {\n return bang ? '#!' : '#';\n }\n function locationHash(hashDelimiter) {\n var href = location.href;\n if (hashDelimiter === '#!' && href.indexOf('#') > -1 && href.indexOf('#!') < 0) {\n return null;\n }\n return href.split(hashDelimiter)[1] || '';\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 var HistoryAdapter = kendo.Class.extend({\n back: function () {\n if (BROKEN_BACK_NAV) {\n setTimeout(function () {\n history.back();\n });\n } else {\n history.back();\n }\n },\n forward: function () {\n if (BROKEN_BACK_NAV) {\n setTimeout(function () {\n history.forward();\n });\n } else {\n history.forward();\n }\n },\n length: function () {\n return history.length;\n },\n replaceLocation: function (url) {\n location.replace(url);\n }\n });\n var PushStateAdapter = HistoryAdapter.extend({\n init: function (root) {\n this.root = root;\n },\n navigate: function (to) {\n history.pushState({}, document.title, absoluteURL(to, this.root));\n },\n replace: function (to) {\n history.replaceState({}, document.title, absoluteURL(to, this.root));\n },\n normalize: function (url) {\n return stripRoot(this.root, url);\n },\n current: function () {\n var current = location.pathname;\n if (location.search) {\n current += location.search;\n }\n return stripRoot(this.root, current);\n },\n change: function (callback) {\n $(window).bind('popstate.kendo', callback);\n },\n stop: function () {\n $(window).unbind('popstate.kendo');\n },\n normalizeCurrent: function (options) {\n var fixedUrl, root = options.root, pathname = location.pathname, hash = locationHash(hashDelimiter(options.hashBang));\n if (root === pathname + '/') {\n fixedUrl = root;\n }\n if (root === pathname && hash) {\n fixedUrl = absoluteURL(hash.replace(hashStrip, ''), root);\n }\n if (fixedUrl) {\n history.pushState({}, document.title, fixedUrl);\n }\n }\n });\n function fixHash(url) {\n return url.replace(/^(#)?/, '#');\n }\n function fixBang(url) {\n return url.replace(/^(#(!)?)?/, '#!');\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 navigate: function (to) {\n location.hash = this.fix(to);\n },\n replace: function (to) {\n this.replaceLocation(this.fix(to));\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 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 stop: function () {\n $(window).off('hashchange.' + this._id);\n clearInterval(this._interval);\n },\n current: function () {\n return locationHash(this.prefix);\n },\n normalizeCurrent: function (options) {\n var pathname = location.pathname, root = options.root;\n if (options.pushState && root !== pathname) {\n this.replaceLocation(root + this.prefix + stripRoot(root, pathname));\n return true;\n }\n return false;\n }\n });\n var History = kendo.Observable.extend({\n start: function (options) {\n options = options || {};\n this.bind([\n CHANGE,\n BACK,\n SAME\n ], options);\n if (this._started) {\n return;\n }\n this._started = true;\n options.root = options.root || '/';\n var adapter = this.createAdapter(options), current;\n if (adapter.normalizeCurrent(options)) {\n return;\n }\n current = adapter.current();\n $.extend(this, {\n adapter: adapter,\n root: options.root,\n historyLength: adapter.length(),\n current: current,\n locations: [current]\n });\n adapter.change($.proxy(this, '_checkUrl'));\n },\n createAdapter: function (options) {\n return support.pushState && options.pushState ? new PushStateAdapter(options.root) : new HashAdapter(options.hashBang);\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 change: function (callback) {\n this.bind(CHANGE, callback);\n },\n replace: function (to, silent) {\n this._navigate(to, silent, function (adapter) {\n adapter.replace(to);\n this.locations[this.locations.length - 1] = this.current;\n });\n },\n navigate: function (to, silent) {\n if (to === '#:back') {\n this.backCalled = true;\n this.adapter.back();\n return;\n }\n this._navigate(to, silent, function (adapter) {\n adapter.navigate(to);\n this.locations.push(this.current);\n });\n },\n _navigate: function (to, silent, callback) {\n var adapter = this.adapter;\n to = adapter.normalize(to);\n if (this.current === to || this.current === decodeURIComponent(to)) {\n this.trigger(SAME);\n return;\n }\n if (!silent) {\n if (this.trigger(CHANGE, {\n url: to,\n decode: false\n })) {\n return;\n }\n }\n this.current = to;\n callback.call(this, adapter);\n this.historyLength = adapter.length();\n },\n _checkUrl: function () {\n var adapter = this.adapter, current = adapter.current(), newLength = adapter.length(), navigatingInExisting = this.historyLength === newLength, back = current === this.locations[this.locations.length - 2] && navigatingInExisting, backCalled = this.backCalled, prev = this.current;\n if (current === null || this.current === current || this.current === decodeURIComponent(current)) {\n return true;\n }\n this.historyLength = newLength;\n this.backCalled = false;\n this.current = current;\n if (back && this.trigger('back', {\n url: prev,\n to: current\n })) {\n adapter.forward();\n this.current = prev;\n return;\n }\n if (this.trigger(CHANGE, {\n url: current,\n backButtonPressed: !backCalled\n })) {\n if (back) {\n adapter.forward();\n } else {\n adapter.back();\n this.historyLength--;\n }\n this.current = prev;\n return;\n }\n if (back) {\n this.locations.pop();\n } else {\n this.locations.push(current);\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 (function () {\n var kendo = window.kendo, history = kendo.history, Observable = kendo.Observable, INIT = 'init', ROUTE_MISSING = 'routeMissing', CHANGE = 'change', BACK = 'back', SAME = 'same', optionalParam = /\\((.*?)\\)/g, namedParam = /(\\(\\?)?:\\w+/g, splatParam = /\\*\\w+/g, escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n function namedParamReplace(match, optional) {\n return optional ? match : '([^/]+)';\n }\n function routeToRegExp(route, ignoreCase) {\n return new RegExp('^' + route.replace(escapeRegExp, '\\\\$&').replace(optionalParam, '(?:$1)?').replace(namedParam, namedParamReplace).replace(splatParam, '(.*?)') + '$', ignoreCase ? 'i' : '');\n }\n function stripUrl(url) {\n return url.replace(/(\\?.*)|(#.*)/g, '');\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 this.route = route;\n this._callback = callback;\n },\n callback: function (url, back, decode) {\n var params, idx = 0, length, queryStringParams = kendo.parseQueryStringParams(url);\n queryStringParams._back = back;\n url = stripUrl(url);\n params = this.route.exec(url).slice(1);\n length = params.length;\n if (decode) {\n for (; idx < length; idx++) {\n if (typeof params[idx] !== 'undefined') {\n params[idx] = decodeURIComponent(params[idx]);\n }\n }\n }\n params.push(queryStringParams);\n this._callback.apply(null, params);\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 var Router = Observable.extend({\n init: function (options) {\n if (!options) {\n options = {};\n }\n Observable.fn.init.call(this);\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 this.bind([\n INIT,\n ROUTE_MISSING,\n CHANGE,\n SAME\n ], options);\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 start: function () {\n var that = this, sameProxy = function () {\n that._same();\n }, backProxy = function (e) {\n that._back(e);\n }, urlChangedProxy = function (e) {\n 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 var initEventObject = {\n url: history.current || '/',\n preventDefault: $.noop\n };\n if (!that.trigger(INIT, initEventObject)) {\n that._urlChanged(initEventObject);\n }\n this._urlChangedProxy = urlChangedProxy;\n this._backProxy = backProxy;\n },\n route: function (route, callback) {\n this.routes.push(new Route(route, callback, this.ignoreCase));\n },\n navigate: function (url, silent) {\n kendo.history.navigate(url, silent);\n },\n replace: function (url, silent) {\n kendo.history.replace(url, silent);\n },\n _back: function (e) {\n if (this.trigger(BACK, {\n url: e.url,\n to: e.to\n })) {\n e.preventDefault();\n }\n },\n _same: function () {\n this.trigger(SAME);\n },\n _urlChanged: function (e) {\n var url = e.url;\n var decode = typeof e.decode === 'undefined';\n var back = e.backButtonPressed;\n if (!url) {\n url = '/';\n }\n if (this.trigger(CHANGE, {\n url: e.url,\n params: kendo.parseQueryStringParams(e.url),\n backButtonPressed: back\n })) {\n e.preventDefault();\n return;\n }\n var idx = 0, routes = this.routes, route, length = routes.length;\n for (; idx < length; idx++) {\n route = routes[idx];\n if (route.worksWith(url, back, decode)) {\n return;\n }\n }\n if (this.trigger(ROUTE_MISSING, {\n url: url,\n params: kendo.parseQueryStringParams(url),\n backButtonPressed: back\n })) {\n e.preventDefault();\n }\n }\n });\n kendo.Router = Router;\n }());\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.odata', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.odata',\n name: 'OData',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, 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 isempty: 'eq',\n isnotempty: 'ne'\n }, odataFiltersVersionFour = extend({}, odataFilters, { contains: 'contains' }), 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 if (value.dir === 'desc') {\n order += ' desc';\n }\n return order;\n }).join(',');\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 }, defaultDataType = { read: { dataType: 'jsonp' } };\n function toOdataFilter(filter, useOdataFour) {\n var result = [], logic = filter.logic || 'and', idx, length, field, type, format, operator, value, ignoreCase, filters = filter.filters;\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 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 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) {\n type = $.type(value);\n if (type === 'string') {\n format = '\\'{1}\\'';\n value = value.replace(/'/g, '\\'\\'');\n if (ignoreCase === true) {\n field = 'tolower(' + field + ')';\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 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 filter = kendo.format(format, filter, value, field);\n }\n }\n result.push(filter);\n }\n filter = result.join(' ' + logic + ' ');\n if (result.length > 1) {\n filter = '(' + filter + ')';\n }\n return filter;\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 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,\n dataType: 'jsonp',\n jsonp: '$callback'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type, useVersionFour) {\n var params, value, option, dataType;\n options = options || {};\n type = type || 'read';\n dataType = (this.options || defaultDataType)[type];\n dataType = dataType ? dataType.dataType : 'json';\n if (type === 'read') {\n params = { $inlinecount: 'allpages' };\n if (dataType != 'json') {\n params.$format = 'json';\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 if (type !== 'destroy') {\n for (option in options) {\n value = options[option];\n if (typeof value === 'number') {\n options[option] = value + '';\n }\n }\n params = kendo.stringify(options);\n }\n }\n return params;\n }\n }\n }\n });\n extend(true, kendo.data, {\n schemas: {\n 'odata-v4': {\n type: 'json',\n data: function (data) {\n data = $.extend({}, data);\n stripMetadata(data);\n if (data.value) {\n return data.value;\n }\n return [data];\n },\n total: function (data) {\n return data['@odata.count'];\n }\n }\n },\n transports: {\n 'odata-v4': {\n read: {\n cache: true,\n dataType: 'json'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'POST'\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 return result;\n }\n }\n }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.xml', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.xml',\n name: 'XML',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, isArray = $.isArray, isPlainObject = $.isPlainObject, map = $.map, each = $.each, extend = $.extend, getter = kendo.getter, Class = kendo.Class;\n var XmlDataReader = Class.extend({\n init: function (options) {\n var that = this, total = options.total, model = options.model, parse = options.parse, errors = options.errors, serialize = options.serialize, data = options.data;\n if (model) {\n if (isPlainObject(model)) {\n var base = options.modelBase || kendo.data.Model;\n if (model.fields) {\n each(model.fields, function (field, value) {\n if (isPlainObject(value) && value.field) {\n if (!$.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 var id = model.id;\n if (id) {\n var idField = {};\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 that.model = model;\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 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 if (data) {\n if (typeof data == 'string') {\n data = that.xpathToMember(data);\n that.data = function (value) {\n var result = that.evaluate(value, data), modelInstance;\n result = isArray(result) ? result : [result];\n if (that.model && model.fields) {\n modelInstance = new that.model();\n return map(result, function (value) {\n if (value) {\n var record = {}, field;\n for (field in model.fields) {\n record[field] = modelInstance._parse(field, model.fields[field].field(value));\n }\n return record;\n }\n });\n }\n return result;\n };\n } else if (typeof data == 'function') {\n that.data = data;\n }\n }\n if (typeof parse == 'function') {\n var xmlParse = that.parse;\n that.parse = function (data) {\n var xml = parse.call(that, data);\n return xmlParse.call(that, xml);\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 = {}, parsedNode, node, nodeType, nodeName, member, attribute, attributes = element.attributes, attributeCount = attributes.length, idx;\n for (idx = 0; idx < attributeCount; idx++) {\n attribute = attributes[idx];\n result['@' + attribute.nodeName] = attribute.nodeValue;\n }\n for (node = element.firstChild; node; node = node.nextSibling) {\n nodeType = node.nodeType;\n if (nodeType === 3 || nodeType === 4) {\n result['#text'] = node.nodeValue;\n } else if (nodeType === 1) {\n parsedNode = this.parseDOM(node);\n nodeName = node.nodeName;\n member = result[nodeName];\n if (isArray(member)) {\n member.push(parsedNode);\n } else if (member !== undefined) {\n member = [\n member,\n parsedNode\n ];\n } else {\n member = parsedNode;\n }\n result[nodeName] = member;\n }\n }\n return result;\n },\n evaluate: function (value, expression) {\n var members = expression.split('.'), member, result, length, intermediateResult, idx;\n while (member = members.shift()) {\n value = value[member];\n if (isArray(value)) {\n result = [];\n expression = members.join('.');\n for (idx = 0, length = value.length; idx < length; idx++) {\n intermediateResult = this.evaluate(value[idx], expression);\n intermediateResult = isArray(intermediateResult) ? intermediateResult : [intermediateResult];\n result.push.apply(result, intermediateResult);\n }\n return result;\n }\n }\n return value;\n },\n parse: function (xml) {\n var documentElement, tree, result = {};\n documentElement = xml.documentElement || $.parseXML(xml).documentElement;\n tree = this.parseDOM(documentElement);\n result[documentElement.nodeName] = tree;\n return result;\n },\n xpathToMember: function (member, raw) {\n if (!member) {\n return '';\n }\n member = member.replace(/^\\//, '').replace(/\\//g, '.');\n if (member.indexOf('@') >= 0) {\n return member.replace(/\\.?(@.*)/, raw ? '$1' : '[\"$1\"]');\n }\n if (member.indexOf('text()') >= 0) {\n return member.replace(/(\\.?text\\(\\))/, raw ? '#text' : '[\"#text\"]');\n }\n return member;\n },\n getter: function (member) {\n return getter(this.xpathToMember(member), true);\n }\n });\n $.extend(true, kendo.data, {\n XmlDataReader: XmlDataReader,\n readers: { xml: XmlDataReader }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data', [\n 'kendo.core',\n 'kendo.data.odata',\n 'kendo.data.xml'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'data',\n name: 'Data source',\n category: 'framework',\n description: 'Powerful component for using local and remote data.Fully supports CRUD, Sorting, Paging, Filtering, Grouping, and Aggregates.',\n depends: ['core'],\n features: [\n {\n id: 'data-odata',\n name: 'OData',\n description: 'Support for accessing Open Data Protocol (OData) services.',\n depends: ['data.odata']\n },\n {\n id: 'data-signalr',\n name: 'SignalR',\n description: 'Support for binding to SignalR hubs.',\n depends: ['data.signalr']\n },\n {\n id: 'data-XML',\n name: 'XML',\n description: 'Support for binding to XML.',\n depends: ['data.xml']\n }\n ]\n };\n (function ($, undefined) {\n var extend = $.extend, proxy = $.proxy, isPlainObject = $.isPlainObject, isEmptyObject = $.isEmptyObject, isArray = $.isArray, grep = $.grep, ajax = $.ajax, map, each = $.each, noop = $.noop, kendo = window.kendo, isFunction = kendo.isFunction, Observable = kendo.Observable, Class = kendo.Class, STRING = 'string', FUNCTION = 'function', CREATE = 'create', READ = 'read', UPDATE = 'update', DESTROY = 'destroy', CHANGE = 'change', SYNC = 'sync', GET = 'get', ERROR = 'error', REQUESTSTART = 'requestStart', PROGRESS = 'progress', REQUESTEND = 'requestEnd', crud = [\n CREATE,\n READ,\n UPDATE,\n DESTROY\n ], identity = function (o) {\n return o;\n }, getter = kendo.getter, stringify = kendo.stringify, math = Math, push = [].push, join = [].join, pop = [].pop, splice = [].splice, shift = [].shift, slice = [].slice, unshift = [].unshift, toString = {}.toString, stableSort = kendo.support.stableSort, dateRegExp = /^\\/Date\\((.*?)\\)\\/$/;\n var ObservableArray = Observable.extend({\n init: function (array, type) {\n var that = this;\n that.type = type || ObservableObject;\n Observable.fn.init.call(that);\n that.length = array.length;\n that.wrapAll(array, that);\n },\n at: function (index) {\n return this[index];\n },\n toJSON: function () {\n var idx, length = this.length, value, json = new Array(length);\n for (idx = 0; idx < length; idx++) {\n value = this[idx];\n if (value instanceof ObservableObject) {\n value = value.toJSON();\n }\n json[idx] = value;\n }\n return json;\n },\n parent: noop,\n wrapAll: function (source, target) {\n var that = this, idx, length, parent = function () {\n return that;\n };\n target = target || [];\n for (idx = 0, length = source.length; idx < length; idx++) {\n target[idx] = that.wrap(source[idx], parent);\n }\n return target;\n },\n wrap: function (object, parent) {\n var that = this, observable;\n if (object !== null && toString.call(object) === '[object Object]') {\n observable = object instanceof that.type || object instanceof Model;\n if (!observable) {\n object = object instanceof ObservableObject ? object.toJSON() : object;\n object = new that.type(object);\n }\n object.parent = parent;\n object.bind(CHANGE, function (e) {\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 ? e.action || 'itemloaded' : 'itemchange'\n });\n });\n }\n return object;\n },\n push: function () {\n var index = this.length, items = this.wrapAll(arguments), result;\n result = push.apply(this, items);\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\n return result;\n },\n slice: slice,\n sort: [].sort,\n join: join,\n pop: function () {\n var length = this.length, result = pop.apply(this);\n if (length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: length - 1,\n items: [result]\n });\n }\n return result;\n },\n splice: function (index, howMany, item) {\n var items = this.wrapAll(slice.call(arguments, 2)), result, i, len;\n result = splice.apply(this, [\n index,\n howMany\n ].concat(items));\n if (result.length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: index,\n items: result\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 if (item) {\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\n }\n return result;\n },\n shift: function () {\n var length = this.length, result = shift.apply(this);\n if (length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: 0,\n items: [result]\n });\n }\n return result;\n },\n unshift: function () {\n var items = this.wrapAll(arguments), result;\n result = unshift.apply(this, items);\n this.trigger(CHANGE, {\n action: 'add',\n index: 0,\n items: items\n });\n return result;\n },\n indexOf: function (item) {\n var that = this, idx, length;\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 forEach: function (callback) {\n var idx = 0, length = this.length;\n for (; idx < length; idx++) {\n callback(this[idx], idx, this);\n }\n },\n map: function (callback) {\n var idx = 0, result = [], length = this.length;\n for (; idx < length; idx++) {\n result[idx] = callback(this[idx], idx, this);\n }\n return result;\n },\n reduce: function (callback) {\n var idx = 0, result, length = this.length;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx < length) {\n result = this[idx++];\n }\n for (; idx < length; idx++) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n reduceRight: function (callback) {\n var idx = this.length - 1, result;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx > 0) {\n result = this[idx--];\n }\n for (; idx >= 0; idx--) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n filter: function (callback) {\n var idx = 0, result = [], item, length = this.length;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback(item, idx, this)) {\n result[result.length] = item;\n }\n }\n return result;\n },\n find: function (callback) {\n var idx = 0, item, length = this.length;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback(item, idx, this)) {\n return item;\n }\n }\n },\n every: function (callback) {\n var idx = 0, item, length = this.length;\n for (; idx < length; idx++) {\n item = this[idx];\n if (!callback(item, idx, this)) {\n return false;\n }\n }\n return true;\n },\n some: function (callback) {\n var idx = 0, item, length = this.length;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback(item, idx, this)) {\n return true;\n }\n }\n return false;\n },\n remove: function (item) {\n var idx = this.indexOf(item);\n if (idx !== -1) {\n this.splice(idx, 1);\n }\n },\n empty: function () {\n this.splice(0, this.length);\n }\n });\n if (typeof Symbol !== 'undefined' && Symbol.iterator && !ObservableArray.prototype[Symbol.iterator]) {\n ObservableArray.prototype[Symbol.iterator] = [][Symbol.iterator];\n }\n var LazyObservableArray = ObservableArray.extend({\n init: function (data, type) {\n Observable.fn.init.call(this);\n this.type = type || ObservableObject;\n for (var idx = 0; idx < data.length; idx++) {\n this[idx] = data[idx];\n }\n this.length = idx;\n this._parent = proxy(function () {\n return this;\n }, this);\n },\n at: function (index) {\n var item = this[index];\n if (!(item instanceof this.type)) {\n item = this[index] = this.wrap(item, this._parent);\n } else {\n item.parent = this._parent;\n }\n return item;\n }\n });\n function eventHandler(context, type, field, prefix) {\n return function (e) {\n var event = {}, key;\n for (key in e) {\n event[key] = e[key];\n }\n if (prefix) {\n event.field = field + '.' + e.field;\n } else {\n event.field = field;\n }\n if (type == CHANGE && context._notifyChange) {\n context._notifyChange(event);\n }\n context.trigger(type, event);\n };\n }\n var ObservableObject = Observable.extend({\n init: function (value) {\n var that = this, member, field, parent = function () {\n return that;\n };\n Observable.fn.init.call(this);\n this._handlers = {};\n for (field in value) {\n member = value[field];\n if (typeof member === 'object' && member && !member.getTime && field.charAt(0) != '_') {\n member = that.wrap(member, field, parent);\n }\n that[field] = member;\n }\n that.uid = kendo.guid();\n },\n shouldSerialize: function (field) {\n return this.hasOwnProperty(field) && field !== '_handlers' && field !== '_events' && typeof this[field] !== FUNCTION && field !== 'uid';\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 toJSON: function () {\n var result = {}, value, field;\n for (field in this) {\n if (this.shouldSerialize(field)) {\n value = this[field];\n if (value instanceof ObservableObject || value instanceof ObservableArray) {\n value = value.toJSON();\n }\n result[field] = value;\n }\n }\n return result;\n },\n get: function (field) {\n var that = this, result;\n that.trigger(GET, { field: field });\n if (field === 'this') {\n result = that;\n } else {\n result = kendo.getter(field, true)(that);\n }\n return result;\n },\n _set: function (field, value) {\n var that = this;\n var composite = field.indexOf('.') >= 0;\n if (composite) {\n var paths = field.split('.'), path = '';\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 kendo.setter(field)(that, value);\n return composite;\n },\n set: function (field, value) {\n var that = this, isSetPrevented = false, composite = field.indexOf('.') >= 0, current = kendo.getter(field, true)(that);\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 isSetPrevented = that.trigger('set', {\n field: field,\n value: value\n });\n if (!isSetPrevented) {\n if (!composite) {\n value = that.wrap(value, field, function () {\n return that;\n });\n }\n if (!that._set(field, value) || field.indexOf('(') >= 0 || field.indexOf('[') >= 0) {\n that.trigger(CHANGE, { field: field });\n }\n }\n }\n return isSetPrevented;\n },\n parent: noop,\n wrap: function (object, field, parent) {\n var that = this;\n var get;\n var change;\n var type = toString.call(object);\n if (object != null && (type === '[object Object]' || type === '[object Array]')) {\n var isObservableArray = object instanceof ObservableArray;\n var isDataSource = object instanceof DataSource;\n if (type === '[object Object]' && !isDataSource && !isObservableArray) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\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 that._handlers[field] = {\n get: get,\n change: change\n };\n } else if (type === '[object Array]' || isObservableArray || isDataSource) {\n if (!isObservableArray && !isDataSource) {\n object = new ObservableArray(object);\n }\n change = eventHandler(that, CHANGE, field, false);\n object.bind(CHANGE, change);\n that._handlers[field] = { change: change };\n }\n object.parent = parent;\n }\n return object;\n }\n });\n function equal(x, y) {\n if (x === y) {\n return true;\n }\n var xtype = $.type(x), ytype = $.type(y), field;\n if (xtype !== ytype) {\n return false;\n }\n if (xtype === 'date') {\n return x.getTime() === y.getTime();\n }\n if (xtype !== 'object' && xtype !== 'array') {\n return false;\n }\n for (field in x) {\n if (!equal(x[field], y[field])) {\n return false;\n }\n }\n return true;\n }\n var parsers = {\n 'number': function (value) {\n return kendo.parseFloat(value);\n },\n 'date': function (value) {\n return kendo.parseDate(value);\n },\n 'boolean': function (value) {\n if (typeof value === STRING) {\n return value.toLowerCase() === 'true';\n }\n return value != null ? !!value : value;\n },\n 'string': function (value) {\n return value != null ? value + '' : value;\n },\n 'default': function (value) {\n return value;\n }\n };\n var defaultValues = {\n 'string': '',\n 'number': 0,\n 'date': new Date(),\n 'boolean': false,\n 'default': ''\n };\n function getFieldByName(obj, name) {\n var field, fieldName;\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 var Model = ObservableObject.extend({\n init: function (data) {\n var that = this;\n if (!data || $.isEmptyObject(data)) {\n data = $.extend({}, that.defaults, data);\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 ObservableObject.fn.init.call(that, data);\n that.dirty = false;\n if (that.idField) {\n that.id = that.get(that.idField);\n if (that.id === undefined) {\n that.id = that._defaultId;\n }\n }\n },\n shouldSerialize: function (field) {\n return ObservableObject.fn.shouldSerialize.call(this, field) && field !== 'uid' && !(this.idField !== 'id' && field === 'id') && field !== 'dirty' && field !== '_accessors';\n },\n _parse: function (field, value) {\n var that = this, fieldName = field, fields = that.fields || {}, parse;\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 return parse ? parse(value) : value;\n },\n _notifyChange: function (e) {\n var action = e.action;\n if (action == 'add' || action == 'remove') {\n this.dirty = true;\n }\n },\n editable: function (field) {\n field = (this.fields || {})[field];\n return field ? field.editable !== false : true;\n },\n set: function (field, value, initiator) {\n var that = this;\n var dirty = that.dirty;\n if (that.editable(field)) {\n value = that._parse(field, value);\n if (!equal(value, that.get(field))) {\n that.dirty = true;\n if (ObservableObject.fn.set.call(that, field, value, initiator) && !dirty) {\n that.dirty = dirty;\n }\n }\n }\n },\n accept: function (data) {\n var that = this, parent = function () {\n return that;\n }, field;\n for (field in data) {\n var value = data[field];\n if (field.charAt(0) != '_') {\n value = that.wrap(data[field], field, parent);\n }\n that._set(field, value);\n }\n if (that.idField) {\n that.id = that.get(that.idField);\n }\n that.dirty = false;\n },\n isNew: function () {\n return this.id === this._defaultId;\n }\n });\n Model.define = function (base, options) {\n if (options === undefined) {\n options = base;\n base = Model;\n }\n var model, proto = extend({ defaults: {} }, options), name, field, type, value, idx, length, fields = {}, originalName, id = proto.id, functionFields = [];\n if (id) {\n proto.idField = id;\n }\n if (proto.id) {\n delete proto.id;\n }\n if (id) {\n proto.defaults[id] = proto._defaultId = '';\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 for (name in proto.fields) {\n field = proto.fields[name];\n type = field.type || 'default';\n value = null;\n originalName = name;\n name = typeof field.field === STRING ? field.field : name;\n if (!field.nullable) {\n value = proto.defaults[originalName !== name ? originalName : name] = field.defaultValue !== undefined ? field.defaultValue : defaultValues[type.toLowerCase()];\n if (typeof value === 'function') {\n functionFields.push(name);\n }\n }\n if (options.id === name) {\n proto._defaultId = value;\n }\n proto.defaults[originalName !== name ? originalName : name] = value;\n field.parse = field.parse || parsers[type];\n }\n if (functionFields.length > 0) {\n proto._initializers = functionFields;\n }\n model = base.extend(proto);\n model.define = function (options) {\n return Model.define(model, options);\n };\n if (proto.fields) {\n model.fields = proto.fields;\n model.idField = proto.idField;\n }\n return model;\n };\n var Comparer = {\n selector: function (field) {\n return isFunction(field) ? field : getter(field);\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 if (a == null && b == null) {\n return 0;\n }\n if (a == null) {\n return -1;\n }\n if (b == null) {\n return 1;\n }\n if (a.localeCompare) {\n return a.localeCompare(b);\n }\n return a > b ? 1 : a < b ? -1 : 0;\n };\n },\n create: function (sort) {\n var compare = sort.compare || this.compare(sort.field);\n if (sort.dir == 'desc') {\n return function (a, b) {\n return compare(b, a, true);\n };\n }\n return compare;\n },\n combine: function (comparers) {\n return function (a, b) {\n var result = comparers[0](a, b), idx, length;\n for (idx = 1, length = comparers.length; idx < length; idx++) {\n result = result || comparers[idx](a, b);\n }\n return result;\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 if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n if (valueA == null) {\n return -1;\n }\n if (valueB == null) {\n return 1;\n }\n if (valueA.localeCompare) {\n return valueA.localeCompare(valueB);\n }\n return valueA > valueB ? 1 : -1;\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 if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n if (valueA == null) {\n return 1;\n }\n if (valueB == null) {\n return -1;\n }\n if (valueB.localeCompare) {\n return valueB.localeCompare(valueA);\n }\n return valueA < valueB ? 1 : -1;\n };\n },\n create: function (sort) {\n return this[sort.dir](sort.field);\n }\n });\n map = function (array, callback) {\n var idx, length = array.length, result = new Array(length);\n for (idx = 0; idx < length; idx++) {\n result[idx] = callback(array[idx], idx, array);\n }\n return result;\n };\n var operators = function () {\n function quote(str) {\n if (typeof str == 'string') {\n str = str.replace(/[\\r\\n]+/g, '');\n }\n return JSON.stringify(str);\n }\n function textOp(impl) {\n return function (a, b, ignore) {\n b += '';\n if (ignore) {\n a = '(' + a + ' || \\'\\').toLowerCase()';\n b = b.toLowerCase();\n }\n return impl(a, quote(b), ignore);\n };\n }\n function operator(op, a, b, ignore) {\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(b.toLowerCase());\n a = '((' + a + ' || \\'\\')+\\'\\').toLowerCase()';\n } else {\n b = quote(b);\n }\n }\n if (b.getTime) {\n a = '(' + a + '&&' + a + '.getTime?' + a + '.getTime():' + a + ')';\n b = b.getTime();\n }\n }\n return a + ' ' + op + ' ' + b;\n }\n function getMatchRegexp(pattern) {\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 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) {\n return operator('==', a, b, ignore);\n },\n neq: function (a, b, ignore) {\n return operator('!=', a, b, ignore);\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 };\n }();\n function Query(data) {\n this.data = data || [];\n }\n Query.filterExpr = function (expression) {\n var expressions = [], logic = {\n and: ' && ',\n or: ' || '\n }, idx, length, filter, expr, fieldFunctions = [], operatorFunctions = [], field, operator, filters = expression.filters;\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n operator = filter.operator;\n if (filter.filters) {\n expr = Query.filterExpr(filter);\n filter = expr.expression.replace(/__o\\[(\\d+)\\]/g, function (match, index) {\n index = +index;\n return '__o[' + (operatorFunctions.length + index) + ']';\n }).replace(/__f\\[(\\d+)\\]/g, function (match, index) {\n index = +index;\n return '__f[' + (fieldFunctions.length + index) + ']';\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 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 ? filter.ignoreCase : true);\n }\n }\n expressions.push(filter);\n }\n return {\n expression: '(' + expressions.join(logic[expression.logic]) + ')',\n fields: fieldFunctions,\n operators: operatorFunctions\n };\n };\n function normalizeSort(field, dir) {\n if (field) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir\n } : field, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n return grep(descriptors, function (d) {\n return !!d.dir;\n });\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 function normalizeOperator(expression) {\n var idx, length, filter, operator, filters = expression.filters;\n if (filters) {\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n operator = filter.operator;\n if (operator && typeof operator === STRING) {\n filter.operator = operatorMap[operator.toLowerCase()] || operator;\n }\n normalizeOperator(filter);\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 normalizeOperator(expression);\n return expression;\n }\n }\n Query.normalizeFilter = normalizeFilter;\n function compareDescriptor(f1, f2) {\n if (f1.logic || f2.logic) {\n return false;\n }\n return f1.field === f2.field && f1.value === f2.value && f1.operator === f2.operator;\n }\n function normalizeDescriptor(filter) {\n filter = filter || {};\n if (isEmptyObject(filter)) {\n return {\n logic: 'and',\n filters: []\n };\n }\n return normalizeFilter(filter);\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 function compareFilters(expr1, expr2) {\n expr1 = normalizeDescriptor(expr1);\n expr2 = normalizeDescriptor(expr2);\n if (expr1.logic !== expr2.logic) {\n return false;\n }\n var f1, f2;\n var filters1 = (expr1.filters || []).slice();\n var filters2 = (expr2.filters || []).slice();\n if (filters1.length !== filters2.length) {\n return false;\n }\n filters1 = filters1.sort(fieldComparer);\n filters2 = filters2.sort(fieldComparer);\n for (var idx = 0; idx < filters1.length; idx++) {\n f1 = filters1[idx];\n f2 = filters2[idx];\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 return true;\n }\n Query.compareFilters = compareFilters;\n function normalizeAggregate(expressions) {\n return isArray(expressions) ? expressions : [expressions];\n }\n function normalizeGroup(field, dir) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir\n } : field, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n return map(descriptors, function (d) {\n return {\n field: d.field,\n dir: d.dir || 'asc',\n aggregates: d.aggregates\n };\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) {\n var sort = { dir: dir };\n if (selector) {\n if (selector.compare) {\n sort.compare = selector.compare;\n } else {\n sort.field = selector;\n }\n }\n return new Query(this.data.slice(0).sort(Comparer.create(sort)));\n },\n orderBy: function (selector) {\n return this.order(selector, 'asc');\n },\n orderByDescending: function (selector) {\n return this.order(selector, 'desc');\n },\n sort: function (field, dir, comparer) {\n var idx, length, descriptors = normalizeSort(field, dir), comparers = [];\n comparer = comparer || Comparer;\n if (descriptors.length) {\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\n comparers.push(comparer.create(descriptors[idx]));\n }\n return this.orderBy({ compare: comparer.combine(comparers) });\n }\n return this;\n },\n filter: function (expressions) {\n var idx, current, length, compiled, predicate, data = this.data, fields, operators, result = [], filter;\n expressions = normalizeFilter(expressions);\n if (!expressions || expressions.filters.length === 0) {\n return this;\n }\n compiled = Query.filterExpr(expressions);\n fields = compiled.fields;\n operators = compiled.operators;\n predicate = filter = new Function('d, __f, __o', 'return ' + compiled.expression);\n if (fields.length || operators.length) {\n filter = function (d) {\n return predicate(d, fields, operators);\n };\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n current = data[idx];\n if (filter(current)) {\n result.push(current);\n }\n }\n return new Query(result);\n },\n group: function (descriptors, allData) {\n descriptors = normalizeGroup(descriptors || []);\n allData = allData || this.data;\n var that = this, result = new Query(that.data), descriptor;\n if (descriptors.length > 0) {\n descriptor = descriptors[0];\n result = result.groupBy(descriptor).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 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 return result;\n },\n groupBy: function (descriptor) {\n if (isEmptyObject(descriptor) || !this.data.length) {\n return new Query([]);\n }\n var field = descriptor.field, sorted = this._sortForGrouping(field, descriptor.dir || 'asc'), accessor = kendo.accessor(field), item, groupValue = accessor.get(sorted[0], field), group = {\n field: field,\n value: groupValue,\n items: []\n }, currentValue, idx, len, result = [group];\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 return new Query(result);\n },\n _sortForGrouping: function (field, dir) {\n var idx, length, data = this.data;\n if (!stableSort) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n data[idx].__position = idx;\n }\n data = new Query(data).sort(field, dir, StableComparer).toArray();\n for (idx = 0, length = data.length; idx < length; idx++) {\n delete data[idx].__position;\n }\n return data;\n }\n return this.sort(field, dir).toArray();\n },\n aggregate: function (aggregates) {\n var idx, len, result = {}, state = {};\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 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 function calculateAggregate(accumulator, aggregates, item, index, length, state) {\n aggregates = aggregates || [];\n var idx, aggr, functionName, len = aggregates.length;\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 var functions = {\n sum: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\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 if (state.count === undefined) {\n state.count = 0;\n }\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n if (isNumber(value)) {\n state.count++;\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 if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\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 if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n if (accumulator > value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n }\n };\n function isNumber(val) {\n return typeof val === 'number' && !isNaN(val);\n }\n function isDate(val) {\n return val && val.getTime;\n }\n function toJSON(array) {\n var idx, length = array.length, result = new Array(length);\n for (idx = 0; idx < length; idx++) {\n result[idx] = array[idx].toJSON();\n }\n return result;\n }\n Query.process = function (data, options) {\n options = options || {};\n var query = new Query(data), group = options.group, sort = normalizeGroup(group || []).concat(normalizeSort(options.sort || [])), total, filterCallback = options.filterCallback, filter = options.filter, skip = options.skip, take = options.take;\n if (filter) {\n query = query.filter(filter);\n if (filterCallback) {\n query = filterCallback(query);\n }\n total = query.toArray().length;\n }\n if (sort) {\n query = query.sort(sort);\n if (group) {\n data = query.toArray();\n }\n }\n if (skip !== undefined && take !== undefined) {\n query = query.range(skip, take);\n }\n if (group) {\n query = query.group(group, data);\n }\n return {\n total: total,\n data: query.toArray()\n };\n };\n var LocalTransport = Class.extend({\n init: function (options) {\n this.data = options.data;\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 var RemoteTransport = Class.extend({\n init: function (options) {\n var that = this, parameterMap;\n options = that.options = extend({}, that.options, options);\n each(crud, function (index, type) {\n if (typeof options[type] === STRING) {\n options[type] = { url: options[type] };\n }\n });\n that.cache = options.cache ? Cache.create(options.cache) : {\n find: noop,\n add: noop\n };\n parameterMap = options.parameterMap;\n if (isFunction(options.push)) {\n that.push = options.push;\n }\n if (!that.push) {\n that.push = identity;\n }\n that.parameterMap = isFunction(parameterMap) ? parameterMap : function (options) {\n var result = {};\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 result[option] = value;\n });\n return result;\n };\n },\n options: { parameterMap: identity },\n create: function (options) {\n return ajax(this.setup(options, CREATE));\n },\n read: function (options) {\n var that = this, success, error, result, cache = that.cache;\n options = that.setup(options, READ);\n success = options.success || noop;\n error = options.error || noop;\n result = cache.find(options.data);\n if (result !== undefined) {\n success(result);\n } else {\n options.success = function (result) {\n cache.add(options.data, result);\n success(result);\n };\n $.ajax(options);\n }\n },\n update: function (options) {\n return ajax(this.setup(options, UPDATE));\n },\n destroy: function (options) {\n return ajax(this.setup(options, DESTROY));\n },\n setup: function (options, type) {\n options = options || {};\n var that = this, parameters, operation = that.options[type], data = isFunction(operation.data) ? operation.data(options.data) : operation.data;\n options = extend(true, {}, operation, options);\n parameters = extend(true, {}, data, options.data);\n options.data = that.parameterMap(parameters, type);\n if (isFunction(options.url)) {\n options.url = options.url(parameters);\n }\n return options;\n }\n });\n var Cache = Class.extend({\n init: function () {\n this._store = {};\n },\n add: function (key, data) {\n if (key !== undefined) {\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 Cache.create = function (options) {\n var store = {\n 'inmemory': function () {\n return new Cache();\n }\n };\n if (isPlainObject(options) && isFunction(options.find)) {\n return options;\n }\n if (options === true) {\n return new Cache();\n }\n return store[options]();\n };\n function serializeRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, getter, originalName, idx, setters = {}, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n for (getter in getters) {\n originalName = fieldNames[getter];\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 function convertRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, getter, originalName, idx, length;\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 originalName = fieldNames[getter];\n if (originalName && originalName !== getter) {\n delete record[originalName];\n }\n }\n }\n }\n function convertGroup(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, idx, fieldName, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n fieldName = originalFieldNames[record.field];\n if (fieldName && fieldName != record.field) {\n record.field = fieldName;\n }\n record.value = modelInstance._parse(record.field, record.value);\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 function wrapDataAccess(originalFunction, model, converter, getters, originalFieldNames, fieldNames) {\n return function (data) {\n data = originalFunction(data);\n if (data && !isEmptyObject(getters)) {\n if (toString.call(data) !== '[object Array]' && !(data instanceof ObservableArray)) {\n data = [data];\n }\n converter(data, getters, new model(), originalFieldNames, fieldNames);\n }\n return data || [];\n };\n }\n var DataReader = Class.extend({\n init: function (schema) {\n var that = this, member, get, model, base;\n schema = schema || {};\n for (member in schema) {\n get = schema[member];\n that[member] = typeof get === STRING ? getter(get) : get;\n }\n base = schema.modelBase || Model;\n if (isPlainObject(that.model)) {\n that.model = model = base.define(that.model);\n }\n var dataFunction = proxy(that.data, that);\n that._dataAccessFunction = dataFunction;\n if (that.model) {\n var groupsFunction = proxy(that.groups, that), serializeFunction = proxy(that.serialize, that), originalFieldNames = {}, getters = {}, serializeGetters = {}, fieldNames = {}, shouldSerialize = false, fieldName;\n model = that.model;\n if (model.fields) {\n each(model.fields, function (field, value) {\n var fromName;\n fieldName = field;\n if (isPlainObject(value) && value.field) {\n fieldName = value.field;\n } else if (typeof value === STRING) {\n fieldName = value;\n }\n if (isPlainObject(value) && value.from) {\n fromName = value.from;\n }\n shouldSerialize = shouldSerialize || fromName && fromName !== field || fieldName !== field;\n getters[field] = getter(fromName || fieldName);\n serializeGetters[field] = getter(field);\n originalFieldNames[fromName || fieldName] = field;\n fieldNames[field] = fromName || fieldName;\n });\n if (!schema.serialize && shouldSerialize) {\n that.serialize = wrapDataAccess(serializeFunction, model, serializeRecords, serializeGetters, originalFieldNames, fieldNames);\n }\n }\n that._dataAccessFunction = dataFunction;\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 function mergeGroups(target, dest, skip, take) {\n var group, idx = 0, items;\n while (dest.length && take) {\n group = dest[idx];\n items = group.items;\n var length = items.length;\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 if (!group.items.length) {\n dest.splice(idx--, 1);\n }\n }\n if (items.length === 0) {\n skip -= length;\n } else {\n skip = 0;\n take -= items.length;\n }\n if (++idx >= dest.length) {\n break;\n }\n }\n if (idx < dest.length) {\n dest.splice(idx, dest.length - idx);\n }\n }\n function flattenGroups(data) {\n var idx, result = [], length, items, itemIndex;\n for (idx = 0, length = data.length; idx < length; idx++) {\n var group = data.at(idx);\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 return result;\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.hasSubgroups) {\n wrapGroupItems(group.items, model);\n } else {\n group.items = new LazyObservableArray(group.items, model);\n }\n }\n }\n }\n function eachGroupItems(data, func) {\n for (var idx = 0, length = data.length; idx < 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 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 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 function replaceWithObservable(view, data, ranges, type, serverGrouping) {\n for (var viewIndex = 0, length = view.length; viewIndex < length; viewIndex++) {\n var item = view[viewIndex];\n if (!item || item instanceof type) {\n continue;\n }\n if (item.hasSubgroups !== undefined && !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 function removeModel(data, model) {\n var idx, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n var dataItem = data.at(idx);\n if (dataItem.uid == model.uid) {\n data.splice(idx, 1);\n return dataItem;\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 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 function indexOf(data, comparer) {\n var idx, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (comparer(data[idx])) {\n return idx;\n }\n }\n return -1;\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 if (isFunction(fieldName)) {\n return name;\n }\n return fieldName;\n }\n return name;\n }\n function convertFilterDescriptorsField(descriptor, model) {\n var idx, length, target = {};\n for (var field in descriptor) {\n if (field !== 'filters') {\n target[field] = descriptor[field];\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 function convertDescriptorsField(descriptors, model) {\n var idx, length, result = [], target, descriptor;\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\n target = {};\n descriptor = descriptors[idx];\n for (var field in descriptor) {\n target[field] = descriptor[field];\n }\n target.field = fieldNameFromModel(model.fields, target.field);\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 var DataSource = Observable.extend({\n init: function (options) {\n var that = this, model, data;\n if (options) {\n data = options.data;\n }\n options = that.options = extend({}, that.options, options);\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);\n that._sort = normalizeSort(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._shouldDetachObservableParents = true;\n Observable.fn.init.call(that);\n that.transport = Transport.create(options, data, that);\n if (isFunction(that.transport.push)) {\n that.transport.push({\n pushCreate: proxy(that._pushCreate, that),\n pushUpdate: proxy(that._pushUpdate, that),\n pushDestroy: proxy(that._pushDestroy, that)\n });\n }\n if (options.offlineStorage != null) {\n if (typeof options.offlineStorage == 'string') {\n var key = options.offlineStorage;\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 that.reader = new kendo.data.readers[options.schema.type || 'json'](options.schema);\n model = that.reader.model || {};\n that._detachObservableParents();\n that._data = that._observe(that._data);\n that._online = true;\n that.bind([\n 'push',\n ERROR,\n CHANGE,\n REQUESTSTART,\n SYNC,\n REQUESTEND,\n PROGRESS\n ], options);\n },\n options: {\n data: null,\n schema: { modelBase: Model },\n offlineStorage: null,\n serverSorting: false,\n serverPaging: false,\n serverFiltering: false,\n serverGrouping: false,\n serverAggregates: false,\n batch: false\n },\n clone: function () {\n return this;\n },\n online: function (value) {\n if (value !== undefined) {\n if (this._online != value) {\n this._online = value;\n if (value) {\n return this.sync();\n }\n }\n return $.Deferred().resolve().promise();\n } else {\n return this._online;\n }\n },\n offlineData: function (state) {\n if (this.options.offlineStorage == null) {\n return null;\n }\n if (state !== undefined) {\n return this._storage.setItem(state);\n }\n return this._storage.getItem() || [];\n },\n _isServerGrouped: function () {\n var group = this.group() || [];\n return this.options.serverGrouping && group.length;\n },\n _pushCreate: function (result) {\n this._push(result, 'pushCreate');\n },\n _pushUpdate: function (result) {\n this._push(result, 'pushUpdate');\n },\n _pushDestroy: function (result) {\n this._push(result, 'pushDestroy');\n },\n _push: function (result, operation) {\n var data = this._readData(result);\n if (!data) {\n data = result;\n }\n this[operation](data);\n },\n _flatData: function (data, skip) {\n if (data) {\n if (this._isServerGrouped()) {\n return flattenGroups(data);\n }\n if (!skip) {\n for (var idx = 0; idx < data.length; idx++) {\n data.at(idx);\n }\n }\n }\n return data;\n },\n parent: noop,\n get: function (id) {\n var idx, length, data = this._flatData(this._data);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].id == id) {\n return data[idx];\n }\n }\n },\n getByUid: function (id) {\n var idx, length, data = this._flatData(this._data);\n if (!data) {\n return;\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 indexOf: function (model) {\n return indexOfModel(this._data, model);\n },\n at: function (index) {\n return this._data.at(index);\n },\n data: function (value) {\n var that = this;\n if (value !== undefined) {\n that._detachObservableParents();\n that._data = this._observe(value);\n that._pristineData = value.slice(0);\n that._storeData();\n that._ranges = [];\n that.trigger('reset');\n that._addRange(that._data);\n that._total = that._data.length;\n that._pristineTotal = that._total;\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 return that._data;\n }\n },\n view: function (value) {\n if (value === undefined) {\n return this._view;\n } else {\n this._view = this._observeView(value);\n }\n },\n _observeView: function (data) {\n var that = this;\n replaceWithObservable(data, that._data, that._ranges, that.reader.model || ObservableObject, that._isServerGrouped());\n var view = new LazyObservableArray(data, that.reader.model);\n view.parent = function () {\n return that.parent();\n };\n return view;\n },\n flatView: function () {\n var groups = this.group() || [];\n if (groups.length) {\n return flattenGroups(this._view);\n } else {\n return this._view;\n }\n },\n add: function (model) {\n return this.insert(this._data.length, model);\n },\n _createNewModel: function (model) {\n if (this.reader.model) {\n return new this.reader.model(model);\n }\n if (model instanceof ObservableObject) {\n return model;\n }\n return new ObservableObject(model);\n },\n insert: function (index, model) {\n if (!model) {\n model = index;\n index = 0;\n }\n if (!(model instanceof Model)) {\n model = this._createNewModel(model);\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 return model;\n },\n pushCreate: function (items) {\n if (!isArray(items)) {\n items = [items];\n }\n var pushed = [];\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 result = this.add(item);\n pushed.push(result);\n var pristine = result.toJSON();\n if (this._isServerGrouped()) {\n pristine = this._wrapInEmptyGroup(pristine);\n }\n this._pristineData.push(pristine);\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n if (pushed.length) {\n this.trigger('push', {\n type: 'create',\n items: pushed\n });\n }\n },\n pushUpdate: function (items) {\n if (!isArray(items)) {\n items = [items];\n }\n var pushed = [];\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var model = this._createNewModel(item);\n var target = this.get(model.id);\n if (target) {\n pushed.push(target);\n target.accept(item);\n target.trigger(CHANGE);\n this._updatePristineForModel(target, item);\n } else {\n this.pushCreate(item);\n }\n }\n if (pushed.length) {\n this.trigger('push', {\n type: 'update',\n items: pushed\n });\n }\n },\n pushDestroy: function (items) {\n var pushed = this._removeItems(items);\n if (pushed.length) {\n this.trigger('push', {\n type: 'destroy',\n items: pushed\n });\n }\n },\n _removeItems: function (items) {\n if (!isArray(items)) {\n items = [items];\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 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 if (found) {\n this._removePristineForModel(model);\n this._destroyed.pop();\n }\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n return destroyed;\n },\n remove: function (model) {\n var result, that = this, hasGroups = that._isServerGrouped();\n this._eachItem(that._data, function (items) {\n result = removeModel(items, model);\n if (result && hasGroups) {\n if (!result.isNew || !result.isNew()) {\n that._destroyed.push(result);\n }\n return true;\n }\n });\n this._removeModelFromRanges(model);\n this._updateRangesLength();\n return model;\n },\n destroyed: function () {\n return this._destroyed;\n },\n created: function () {\n var idx, length, result = [], data = this._flatData(this._data);\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 updated: function () {\n var idx, length, result = [], data = this._flatData(this._data);\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 sync: function () {\n var that = this, created = [], updated = [], destroyed = that._destroyed;\n var promise = $.Deferred().resolve().promise();\n if (that.online()) {\n if (!that.reader.model) {\n return promise;\n }\n created = that.created();\n updated = that.updated();\n var promises = [];\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 promise = $.when.apply(null, promises).then(function () {\n var idx, length;\n for (idx = 0, length = arguments.length; idx < length; idx++) {\n if (arguments[idx]) {\n that._accept(arguments[idx]);\n }\n }\n that._storeData(true);\n that._change({ action: 'sync' });\n that.trigger(SYNC);\n });\n } else {\n that._storeData(true);\n that._change({ action: 'sync' });\n }\n return promise;\n },\n cancelChanges: function (model) {\n var that = this;\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 that._ranges = [];\n that._addRange(that._data);\n that._change();\n that._markOfflineUpdatesAsDirty();\n }\n },\n _markOfflineUpdatesAsDirty: function () {\n var that = this;\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 hasChanges: function () {\n var idx, length, data = this._flatData(this._data);\n if (this._destroyed.length) {\n return true;\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 return false;\n },\n _accept: function (result) {\n var that = this, models = result.models, response = result.response, idx = 0, serverGroup = that._isServerGrouped(), pristine = that._pristineData, type = result.type, length;\n that.trigger(REQUESTEND, {\n response: response,\n type: type\n });\n if (response && !isEmptyObject(response)) {\n response = that.reader.parse(response);\n if (that._handleCustomErrors(response)) {\n return;\n }\n response = that.reader.data(response);\n if (!isArray(response)) {\n response = [response];\n }\n } else {\n response = $.map(models, function (model) {\n return model.toJSON();\n });\n }\n if (type === 'destroy') {\n that._destroyed = [];\n }\n for (idx = 0, length = models.length; idx < length; idx++) {\n if (type !== 'destroy') {\n models[idx].accept(response[idx]);\n if (type === 'create') {\n pristine.push(serverGroup ? that._wrapInEmptyGroup(models[idx]) : 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 _updatePristineForModel: function (model, values) {\n this._executeOnPristineForModel(model, function (index, items) {\n kendo.deepExtend(items[index], values);\n });\n },\n _executeOnPristineForModel: function (model, callback) {\n this._eachPristineItem(function (items) {\n var index = indexOfPristineModel(items, model);\n if (index > -1) {\n callback(index, items);\n return true;\n }\n });\n },\n _removePristineForModel: function (model) {\n this._executeOnPristineForModel(model, function (index, items) {\n items.splice(index, 1);\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 _eachPristineItem: function (callback) {\n this._eachItem(this._pristineData, callback);\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 _pristineForModel: function (model) {\n var pristine, idx, callback = function (items) {\n idx = indexOfPristineModel(items, model);\n if (idx > -1) {\n pristine = items[idx];\n return true;\n }\n };\n this._eachPristineItem(callback);\n return pristine;\n },\n _cancelModel: function (model) {\n var pristine = this._pristineForModel(model);\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 if (pristine.__state__ == 'update') {\n items[idx].dirty = true;\n }\n } else {\n items.splice(idx, 1);\n }\n }\n });\n },\n _submit: function (promises, data) {\n var that = this;\n that.trigger(REQUESTSTART, { type: 'submit' });\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 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 that.error(response, status, error);\n }\n }, data));\n },\n _sendSubmit: function (created, updated, destroyed) {\n var that = this, promises = [];\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 if (updated.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'update';\n deferred.models = updated;\n }));\n }\n if (destroyed.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'destroy';\n deferred.models = destroyed;\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 return promises;\n },\n _promise: function (data, models, type) {\n var that = this;\n return $.Deferred(function (deferred) {\n that.trigger(REQUESTSTART, { type: type });\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 _send: function (method, data) {\n var that = this, idx, length, promises = [], converted = that.reader.serialize(toJSON(data));\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 return promises;\n },\n read: function (data) {\n var that = this, params = that._params(data);\n var deferred = $.Deferred();\n that._queueRequest(params, function () {\n var isPrevented = that.trigger(REQUESTSTART, { type: 'read' });\n if (!isPrevented) {\n that.trigger(PROGRESS);\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 deferred.resolve();\n },\n error: function () {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n deferred.reject.apply(deferred, args);\n }\n });\n } else if (that.options.offlineStorage != null) {\n that.success(that.offlineData(), params);\n deferred.resolve();\n }\n } else {\n that._dequeueRequest();\n deferred.resolve(isPrevented);\n }\n });\n return deferred.promise();\n },\n _readAggregates: function (data) {\n return this.reader.aggregates(data);\n },\n success: function (data) {\n var that = this, options = that.options;\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n if (that.online()) {\n data = that.reader.parse(data);\n if (that._handleCustomErrors(data)) {\n that._dequeueRequest();\n return;\n }\n that._total = that.reader.total(data);\n if (that._aggregate && options.serverAggregates) {\n that._aggregateResult = that._readAggregates(data);\n }\n data = that._readData(data);\n that._destroyed = [];\n } else {\n data = that._readData(data);\n var items = [];\n var itemIds = {};\n var model = that.reader.model;\n var idField = model ? model.idField : 'id';\n var idx;\n for (idx = 0; idx < this._destroyed.length; idx++) {\n var id = this._destroyed[idx][idField];\n itemIds[id] = id;\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._destroyed.push(this._createNewModel(item));\n }\n } else {\n items.push(item);\n }\n }\n data = items;\n that._total = data.length;\n }\n that._pristineTotal = that._total;\n that._pristineData = data.slice(0);\n that._detachObservableParents();\n that._data = that._observe(data);\n that._markOfflineUpdatesAsDirty();\n that._storeData();\n that._addRange(that._data);\n that._process(that._data);\n that._dequeueRequest();\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 _storeData: function (updatePristine) {\n var serverGrouping = this._isServerGrouped();\n var model = this.reader.model;\n function items(data) {\n var state = [];\n for (var idx = 0; idx < data.length; idx++) {\n var dataItem = data.at(idx);\n var item = dataItem.toJSON();\n if (serverGrouping && dataItem.items) {\n item.items = items(dataItem.items);\n } else {\n item.uid = dataItem.uid;\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 return state;\n }\n if (this.options.offlineStorage != null) {\n var state = items(this._data);\n var destroyed = [];\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 this.offlineData(state.concat(destroyed));\n if (updatePristine) {\n this._pristineData = this._readData(state);\n }\n }\n },\n _addRange: function (data) {\n var that = this, start = that._skip || 0, end = start + that._flatData(data, true).length;\n that._ranges.push({\n start: start,\n end: end,\n data: data,\n timestamp: new Date().getTime()\n });\n that._ranges.sort(function (x, y) {\n return x.start - y.start;\n });\n },\n error: function (xhr, status, errorThrown) {\n this._dequeueRequest();\n this.trigger(REQUESTEND, {});\n this.trigger(ERROR, {\n xhr: xhr,\n status: status,\n errorThrown: errorThrown\n });\n },\n _params: function (data) {\n var that = this, 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 }, data);\n if (!that.options.serverPaging) {\n delete options.take;\n delete options.skip;\n delete options.page;\n delete options.pageSize;\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 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 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 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 return options;\n },\n _queueRequest: function (options, callback) {\n var that = this;\n if (!that._requestInProgress) {\n that._requestInProgress = true;\n that._pending = undefined;\n callback();\n } else {\n that._pending = {\n callback: proxy(callback, that),\n 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 _handleCustomErrors: function (response) {\n if (this.reader.errors) {\n var errors = this.reader.errors(response);\n if (errors) {\n this.trigger(ERROR, {\n xhr: null,\n status: 'customerror',\n errorThrown: 'custom error',\n errors: errors\n });\n return true;\n }\n }\n return false;\n },\n _shouldWrap: function (data) {\n var model = this.reader.model;\n if (model && data.length) {\n return !(data[0] instanceof model);\n }\n return false;\n },\n _observe: function (data) {\n var that = this, model = that.reader.model;\n that._shouldDetachObservableParents = true;\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 () {\n return that.parent();\n };\n }\n if (that._isServerGrouped()) {\n wrapGroupItems(data, model);\n }\n if (that._changeHandler && that._data && that._data instanceof ObservableArray) {\n that._data.unbind(CHANGE, that._changeHandler);\n } else {\n that._changeHandler = proxy(that._change, that);\n }\n return data.bind(CHANGE, that._changeHandler);\n },\n _updateTotalForAction: function (action, items) {\n var that = this;\n var total = parseInt(that._total, 10);\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 that._total = total;\n },\n _change: function (e) {\n var that = this, idx, length, action = e ? e.action : '';\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._destroyed.push(e.items[idx]);\n }\n }\n }\n if (that.options.autoSync && (action === 'add' || action === 'remove' || action === 'itemchange')) {\n var handler = function (args) {\n if (args.action === 'sync') {\n that.unbind('change', handler);\n that._updateTotalForAction(action, e.items);\n }\n };\n that.first('change', handler);\n that.sync();\n } else {\n that._updateTotalForAction(action, e ? e.items : []);\n that._process(that._data, e);\n }\n },\n _calculateAggregates: function (data, options) {\n options = options || {};\n var query = new Query(data), aggregates = options.aggregate, filter = options.filter;\n if (filter) {\n query = query.filter(filter);\n }\n return query.aggregate(aggregates);\n },\n _process: function (data, e) {\n var that = this, options = {}, result;\n if (that.options.serverPaging !== true) {\n options.skip = that._skip;\n options.take = that._take || that._pageSize;\n if (options.skip === undefined && that._page !== undefined && that._pageSize !== undefined) {\n options.skip = (that._page - 1) * that._pageSize;\n }\n }\n if (that.options.serverSorting !== true) {\n options.sort = that._sort;\n }\n if (that.options.serverFiltering !== true) {\n options.filter = that._filter;\n }\n if (that.options.serverGrouping !== true) {\n options.group = that._group;\n }\n if (that.options.serverAggregates !== true) {\n options.aggregate = that._aggregate;\n that._aggregateResult = that._calculateAggregates(data, options);\n }\n result = that._queryProcess(data, options);\n that.view(result.data);\n if (result.total !== undefined && !that.options.serverFiltering) {\n that._total = result.total;\n }\n e = e || {};\n e.items = e.items || that._view;\n that.trigger(CHANGE, e);\n },\n _queryProcess: function (data, options) {\n return Query.process(data, options);\n },\n _mergeState: function (options) {\n var that = this;\n if (options !== undefined) {\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 if (that._skip === undefined) {\n that._skip = that._currentRangeStart = that.skip();\n options.skip = that.skip();\n }\n if (that._take === undefined && that._pageSize !== undefined) {\n that._take = that._pageSize;\n options.take = that._take;\n }\n if (options.sort) {\n that._sort = options.sort = normalizeSort(options.sort);\n }\n if (options.filter) {\n that._filter = options.filter = normalizeFilter(options.filter);\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 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 if (remote || (this._data === undefined || this._data.length === 0) && !this._destroyed.length) {\n return this.read(this._mergeState(options));\n }\n var isPrevented = this.trigger(REQUESTSTART, { type: 'read' });\n if (!isPrevented) {\n this.trigger(PROGRESS);\n result = this._queryProcess(this._data, this._mergeState(options));\n if (!this.options.serverFiltering) {\n if (result.total !== undefined) {\n this._total = result.total;\n } else {\n this._total = this._data.length;\n }\n }\n this._aggregateResult = this._calculateAggregates(this._data, options);\n this.view(result.data);\n this.trigger(REQUESTEND, { type: 'read' });\n this.trigger(CHANGE, { items: result.data });\n }\n return $.Deferred().resolve(isPrevented).promise();\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 return this._query().then(fn);\n },\n _query: function (options) {\n var that = this;\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 next: function (options) {\n var that = this, page = that.page(), total = that.total();\n options = options || {};\n if (!page || total && page + 1 > that.totalPages()) {\n return;\n }\n that._skip = that._currentRangeStart = page * that.take();\n page += 1;\n options.page = page;\n that._query(options);\n return page;\n },\n prev: function (options) {\n var that = this, page = that.page();\n options = options || {};\n if (!page || page === 1) {\n return;\n }\n that._skip = that._currentRangeStart = that._skip - that.take();\n page -= 1;\n options.page = page;\n that._query(options);\n return page;\n },\n page: function (val) {\n var that = this, skip;\n if (val !== undefined) {\n val = math.max(math.min(math.max(val, 1), that.totalPages()), 1);\n that._query({ page: val });\n return;\n }\n skip = that.skip();\n return skip !== undefined ? math.round((skip || 0) / (that.take() || 1)) + 1 : undefined;\n },\n pageSize: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({\n pageSize: val,\n page: 1\n });\n return;\n }\n return that.take();\n },\n sort: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ sort: val });\n return;\n }\n return that._sort;\n },\n filter: function (val) {\n var that = this;\n if (val === undefined) {\n return that._filter;\n }\n that.trigger('reset');\n that._query({\n filter: val,\n page: 1\n });\n },\n group: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ group: val });\n return;\n }\n return that._group;\n },\n total: function () {\n return parseInt(this._total || 0, 10);\n },\n aggregate: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ aggregate: val });\n return;\n }\n return that._aggregate;\n },\n aggregates: function () {\n var result = this._aggregateResult;\n if (isEmptyObject(result)) {\n result = this._emptyAggregates(this.aggregate());\n }\n return result;\n },\n _emptyAggregates: function (aggregates) {\n var result = {};\n if (!isEmptyObject(aggregates)) {\n var aggregate = {};\n if (!isArray(aggregates)) {\n aggregates = [aggregates];\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 return result;\n },\n _wrapInEmptyGroup: function (model) {\n var groups = this.group(), parent, group, idx, length;\n for (idx = groups.length - 1, length = 0; idx >= length; idx--) {\n group = groups[idx];\n parent = {\n value: model.get(group.field),\n field: group.field,\n items: parent ? [parent] : [model],\n hasSubgroups: !!parent,\n aggregates: this._emptyAggregates(group.aggregates)\n };\n }\n return parent;\n },\n totalPages: function () {\n var that = this, pageSize = that.pageSize() || that.total();\n return math.ceil((that.total() || 0) / pageSize);\n },\n inRange: function (skip, take) {\n var that = this, end = math.min(skip + take, that.total());\n if (!that.options.serverPaging && that._data.length > 0) {\n return true;\n }\n return that._findRange(skip, end).length > 0;\n },\n lastRange: function () {\n var ranges = this._ranges;\n return ranges[ranges.length - 1] || {\n start: 0,\n end: 0,\n 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 enableRequestsInProgress: function () {\n this._skipRequestsInProgress = false;\n },\n _timeStamp: function () {\n return new Date().getTime();\n },\n range: function (skip, take) {\n this._currentRequestTimeStamp = this._timeStamp();\n this._skipRequestsInProgress = true;\n skip = math.min(skip || 0, this.total());\n var that = this, pageSkip = math.max(math.floor(skip / take), 0) * take, size = math.min(pageSkip + take, that.total()), data;\n data = that._findRange(skip, math.min(skip + take, that.total()));\n if (data.length) {\n that._pending = undefined;\n that._skip = skip > that.skip() ? math.min(size, (that.totalPages() - 1) * that.take()) : pageSkip;\n that._currentRangeStart = skip;\n that._take = take;\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 if (paging) {\n that._detachObservableParents();\n that._data = data = that._observe(data);\n }\n that._process(data);\n } finally {\n that.options.serverPaging = paging;\n that.options.serverSorting = sorting;\n that.options.serverFiltering = filtering;\n that.options.serverAggregates = aggregates;\n }\n return;\n }\n if (take !== undefined) {\n if (!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);\n });\n } else {\n that.range(skip, take);\n }\n });\n } else if (pageSkip < skip) {\n that.prefetch(size, take, function () {\n that.range(skip, take);\n });\n }\n }\n },\n _findRange: function (start, end) {\n var that = this, ranges = that._ranges, range, data = [], skipIdx, takeIdx, startIndex, endIndex, rangeData, rangeEnd, processed, options = that.options, remote = options.serverSorting || options.serverPaging || options.serverFiltering || options.serverGrouping || options.serverAggregates, flatData, count, length;\n for (skipIdx = 0, length = ranges.length; skipIdx < length; skipIdx++) {\n range = ranges[skipIdx];\n if (start >= range.start && start <= range.end) {\n count = 0;\n for (takeIdx = skipIdx; takeIdx < length; takeIdx++) {\n range = ranges[takeIdx];\n flatData = that._flatData(range.data, true);\n if (flatData.length && start + count >= range.start) {\n rangeData = range.data;\n rangeEnd = range.end;\n if (!remote) {\n var sort = normalizeGroup(that.group() || []).concat(normalizeSort(that.sort() || []));\n processed = that._queryProcess(range.data, {\n sort: sort,\n filter: that.filter()\n });\n flatData = rangeData = processed.data;\n if (processed.total !== undefined) {\n rangeEnd = processed.total;\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 if (end <= range.end && count == end - start) {\n return data;\n }\n }\n }\n break;\n }\n }\n return [];\n },\n _mergeGroups: function (data, range, skip, take) {\n if (this._isServerGrouped()) {\n var temp = range.toJSON(), prevGroup;\n if (data.length) {\n prevGroup = data[data.length - 1];\n }\n mergeGroups(prevGroup, temp, skip, take);\n return data.concat(temp);\n }\n return data.concat(range.slice(skip, take));\n },\n skip: function () {\n var that = this;\n if (that._skip === undefined) {\n return that._page !== undefined ? (that._page - 1) * (that.take() || 1) : undefined;\n }\n return that._skip;\n },\n currentRangeStart: function () {\n return this._currentRangeStart || 0;\n },\n take: function () {\n return this._take || this._pageSize;\n },\n _prefetchSuccessHandler: function (skip, size, callback, force) {\n var that = this;\n var timestamp = that._timeStamp();\n return function (data) {\n var found = false, range = {\n start: skip,\n end: size,\n data: [],\n timestamp: that._timeStamp()\n }, idx, length, temp;\n that._dequeueRequest();\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n data = that.reader.parse(data);\n temp = that._readData(data);\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 break;\n }\n }\n if (!found) {\n that._ranges.push(range);\n }\n }\n range.data = that._observe(temp);\n range.end = range.start + that._flatData(range.data, true).length;\n that._ranges.sort(function (x, y) {\n return x.start - y.start;\n });\n that._total = that.reader.total(data);\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 prefetch: function (skip, take, callback) {\n var that = this, size = math.min(skip + take, that.total()), 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 if (!that._rangeExists(skip, size)) {\n clearTimeout(that._timeout);\n that._timeout = setTimeout(function () {\n that._queueRequest(options, function () {\n if (!that.trigger(REQUESTSTART, { type: 'read' })) {\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 _multiplePrefetch: function (skip, take, callback) {\n var that = this, size = math.min(skip + take, that.total()), 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 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 _rangeExists: function (start, end) {\n var that = this, ranges = that._ranges, idx, length;\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 return false;\n },\n _removeModelFromRanges: function (model) {\n var result, found, range;\n for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\n range = this._ranges[idx];\n this._eachItem(range.data, function (items) {\n result = removeModel(items, model);\n if (result) {\n found = true;\n }\n });\n if (found) {\n break;\n }\n }\n },\n _updateRangesLength: function () {\n var startOffset = 0, range, rangeLength;\n for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\n range = this._ranges[idx];\n range.start = range.start - startOffset;\n rangeLength = this._flatData(range.data, true).length;\n startOffset = range.end - rangeLength;\n range.end = range.start + rangeLength;\n }\n }\n });\n var Transport = {};\n Transport.create = function (options, data, dataSource) {\n var transport, transportOptions = options.transport ? $.extend({}, options.transport) : null;\n if (transportOptions) {\n transportOptions.read = typeof transportOptions.read === STRING ? { url: transportOptions.read } : transportOptions.read;\n if (options.type === 'jsdo') {\n transportOptions.dataSource = dataSource;\n }\n if (options.type) {\n kendo.data.transports = kendo.data.transports || {};\n kendo.data.schemas = kendo.data.schemas || {};\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 options.schema = extend(true, {}, kendo.data.schemas[options.type], options.schema);\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 DataSource.create = function (options) {\n if (isArray(options) || options instanceof ObservableArray) {\n options = { data: options };\n }\n var dataSource = options || {}, data = dataSource.data, fields = dataSource.fields, table = dataSource.table, select = dataSource.select, idx, length, model = {}, field;\n if (!data && fields && !dataSource.transport) {\n if (table) {\n data = inferTable(table, fields);\n } else if (select) {\n data = inferSelect(select, fields);\n if (dataSource.group === undefined && data[0] && data[0].optgroup !== undefined) {\n dataSource.group = 'optgroup';\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 if (!isEmptyObject(model)) {\n dataSource.schema = extend(true, dataSource.schema, { model: { fields: model } });\n }\n }\n dataSource.data = data;\n select = null;\n dataSource.select = null;\n table = null;\n dataSource.table = null;\n return dataSource instanceof DataSource ? dataSource : new DataSource(dataSource);\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 var data = [];\n var idx, length;\n var optgroup;\n var option;\n var record;\n var value;\n for (idx = 0, length = options.length; idx < length; idx++) {\n record = {};\n option = options[idx];\n optgroup = option.parentNode;\n if (optgroup === select) {\n optgroup = null;\n }\n if (option.disabled || optgroup && optgroup.disabled) {\n continue;\n }\n if (optgroup) {\n record.optgroup = optgroup.label;\n }\n record[firstField.field] = option.text;\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n record[secondField.field] = value;\n data.push(record);\n }\n return data;\n }\n function inferTable(table, fields) {\n var tbody = $(table)[0].tBodies[0], rows = tbody ? tbody.rows : [], idx, length, fieldIndex, fieldCount = fields.length, data = [], cells, record, cell, empty;\n for (idx = 0, length = rows.length; idx < length; idx++) {\n record = {};\n empty = true;\n cells = rows[idx].cells;\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 return data;\n }\n var Node = Model.define({\n idField: 'id',\n init: function (value) {\n var that = this, hasChildren = that.hasChildren || value && value.hasChildren, childrenField = 'items', childrenOptions = {};\n kendo.data.Model.fn.init.call(that, value);\n if (typeof that.children === STRING) {\n childrenField = that.children;\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 if (typeof that.children !== STRING) {\n extend(childrenOptions, that.children);\n }\n childrenOptions.data = value;\n if (!hasChildren) {\n hasChildren = childrenOptions.schema.data;\n }\n if (typeof hasChildren === STRING) {\n hasChildren = kendo.getter(hasChildren);\n }\n if (isFunction(hasChildren)) {\n that.hasChildren = !!hasChildren.call(that, that);\n }\n that._childrenOptions = childrenOptions;\n if (that.hasChildren) {\n that._initChildren();\n }\n that._loaded = !!(value && value._loaded);\n },\n _initChildren: function () {\n var that = this;\n var children, transport, parameterMap;\n if (!(that.children instanceof HierarchicalDataSource)) {\n children = that.children = new HierarchicalDataSource(that._childrenOptions);\n transport = children.transport;\n parameterMap = transport.parameterMap;\n transport.parameterMap = function (data, type) {\n data[that.idField || 'id'] = that.id;\n if (parameterMap) {\n data = parameterMap(data, type);\n }\n return data;\n };\n children.parent = function () {\n return that;\n };\n children.bind(CHANGE, function (e) {\n e.node = e.node || that;\n that.trigger(CHANGE, e);\n });\n children.bind(ERROR, function (e) {\n var collection = that.parent();\n if (collection) {\n e.node = e.node || that;\n collection.trigger(ERROR, e);\n }\n });\n that._updateChildrenField();\n }\n },\n append: function (model) {\n this._initChildren();\n this.loaded(true);\n this.children.add(model);\n },\n hasChildren: false,\n level: function () {\n var parentNode = this.parentNode(), level = 0;\n while (parentNode && parentNode.parentNode) {\n level++;\n parentNode = parentNode.parentNode ? parentNode.parentNode() : null;\n }\n return level;\n },\n _updateChildrenField: function () {\n var fieldName = this._childrenOptions.schema.data;\n this[fieldName || 'items'] = this.children.data();\n },\n _childrenLoaded: function () {\n this._loaded = true;\n this._updateChildrenField();\n },\n load: function () {\n var options = {};\n var method = '_query';\n var children, promise;\n if (this.hasChildren) {\n this._initChildren();\n children = this.children;\n options[this.idField || 'id'] = this.id;\n if (!this._loaded) {\n children._data = undefined;\n method = 'read';\n }\n children.one(CHANGE, proxy(this._childrenLoaded, this));\n promise = children[method](options);\n } else {\n this.loaded(true);\n }\n return promise || $.Deferred().resolve().promise();\n },\n parentNode: function () {\n var array = this.parent();\n return array.parent();\n },\n loaded: function (value) {\n if (value !== undefined) {\n this._loaded = value;\n } else {\n return this._loaded;\n }\n },\n shouldSerialize: function (field) {\n return Model.fn.shouldSerialize.call(this, field) && field !== 'children' && field !== '_loaded' && field !== 'hasChildren' && field !== '_childrenOptions';\n }\n });\n function dataMethod(name) {\n return function () {\n var data = this._data, result = DataSource.fn[name].apply(this, slice.call(arguments));\n if (this._data != data) {\n this._attachBubbleHandlers();\n }\n return result;\n };\n }\n var HierarchicalDataSource = DataSource.extend({\n init: function (options) {\n var node = Node.define({ children: options });\n DataSource.fn.init.call(this, extend(true, {}, {\n schema: {\n modelBase: node,\n model: node\n }\n }, options));\n this._attachBubbleHandlers();\n },\n _attachBubbleHandlers: function () {\n var that = this;\n that._data.bind(ERROR, function (e) {\n that.trigger(ERROR, e);\n });\n },\n remove: function (node) {\n var parentNode = node.parentNode(), dataSource = this, result;\n if (parentNode && parentNode._initChildren) {\n dataSource = parentNode.children;\n }\n result = DataSource.fn.remove.call(dataSource, node);\n if (parentNode && !dataSource.data().length) {\n parentNode.hasChildren = false;\n }\n return result;\n },\n success: dataMethod('success'),\n data: dataMethod('data'),\n insert: function (index, model) {\n var parentNode = this.parent();\n if (parentNode && parentNode._initChildren) {\n parentNode.hasChildren = true;\n parentNode._initChildren();\n }\n return DataSource.fn.insert.call(this, index, model);\n },\n _find: function (method, value) {\n var idx, length, node, children;\n var data = this._data;\n if (!data) {\n return;\n }\n node = DataSource.fn[method].call(this, value);\n if (node) {\n return node;\n }\n data = this._flatData(this._data);\n for (idx = 0, length = data.length; idx < length; idx++) {\n children = data[idx].children;\n if (!(children instanceof HierarchicalDataSource)) {\n continue;\n }\n node = children[method](value);\n if (node) {\n return node;\n }\n }\n },\n get: function (id) {\n return this._find('get', id);\n },\n getByUid: function (uid) {\n return this._find('getByUid', uid);\n }\n });\n function inferList(list, fields) {\n var items = $(list).children(), idx, length, data = [], record, textField = fields[0].field, urlField = fields[1] && fields[1].field, spriteCssClassField = fields[2] && fields[2].field, imageUrlField = fields[3] && fields[3].field, item, id, textChild, className, children;\n function elements(collection, tagName) {\n return collection.filter(tagName).add(collection.find(tagName));\n }\n for (idx = 0, length = items.length; idx < length; idx++) {\n record = { _loaded: true };\n item = items.eq(idx);\n textChild = item[0].firstChild;\n children = item.children();\n list = children.filter('ul');\n children = children.filter(':not(ul)');\n id = item.attr('data-id');\n if (id) {\n record.id = id;\n }\n if (textChild) {\n record[textField] = textChild.nodeType == 3 ? textChild.nodeValue : children.text();\n }\n if (urlField) {\n record[urlField] = elements(children, 'a').attr('href');\n }\n if (imageUrlField) {\n record[imageUrlField] = elements(children, 'img').attr('src');\n }\n if (spriteCssClassField) {\n className = elements(children, '.k-sprite').prop('className');\n record[spriteCssClassField] = className && $.trim(className.replace('k-sprite', ''));\n }\n if (list.length) {\n record.items = inferList(list.eq(0), fields);\n }\n if (item.attr('data-hasChildren') == 'true') {\n record.hasChildren = true;\n }\n data.push(record);\n }\n return data;\n }\n HierarchicalDataSource.create = function (options) {\n options = options && options.push ? { data: options } : options;\n var dataSource = options || {}, data = dataSource.data, fields = dataSource.fields, list = dataSource.list;\n if (data && data._dataSource) {\n return data._dataSource;\n }\n if (!data && fields && !dataSource.transport) {\n if (list) {\n data = inferList(list, fields);\n }\n }\n dataSource.data = data;\n return dataSource instanceof HierarchicalDataSource ? dataSource : new HierarchicalDataSource(dataSource);\n };\n var Buffer = kendo.Observable.extend({\n init: function (dataSource, viewSize, disablePrefetch) {\n kendo.Observable.fn.init.call(this);\n this._prefetching = false;\n this.dataSource = dataSource;\n this.prefetch = !disablePrefetch;\n var buffer = this;\n dataSource.bind('change', function () {\n buffer._change();\n });\n dataSource.bind('reset', function () {\n buffer._reset();\n });\n this._syncWithDataSource();\n this.setViewSize(viewSize);\n },\n setViewSize: function (viewSize) {\n this.viewSize = viewSize;\n this._recalculate();\n },\n at: function (index) {\n var pageSize = this.pageSize, itemPresent = true;\n if (index >= this.total()) {\n this.trigger('endreached', { index: index });\n return null;\n }\n if (!this.useRanges) {\n return this.dataSource.view()[index];\n }\n if (this.useRanges) {\n if (index < this.dataOffset || index >= this.skip + pageSize) {\n itemPresent = this.range(Math.floor(index / pageSize) * pageSize);\n }\n if (index === this.prefetchThreshold) {\n this._prefetch();\n }\n if (index === this.midPageThreshold) {\n this.range(this.nextMidRange, true);\n } else if (index === this.nextPageThreshold) {\n this.range(this.nextFullRange);\n } else if (index === this.pullBackThreshold) {\n if (this.offset === this.skip) {\n this.range(this.previousMidRange);\n } else {\n this.range(this.previousFullRange);\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 indexOf: function (item) {\n return this.dataSource.data().indexOf(item) + this.dataOffset;\n },\n total: function () {\n return parseInt(this.dataSource.total(), 10);\n },\n next: function () {\n var buffer = this, pageSize = buffer.pageSize, offset = buffer.skip - buffer.viewSize + pageSize, pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize;\n this.offset = offset;\n this.dataSource.prefetch(pageSkip, pageSize, function () {\n buffer._goToRange(offset, true);\n });\n },\n range: function (offset, nextRange) {\n if (this.offset === offset) {\n return true;\n }\n var buffer = this, pageSize = this.pageSize, pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize, dataSource = this.dataSource;\n if (nextRange) {\n pageSkip += pageSize;\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 return true;\n },\n syncDataSource: function () {\n var offset = this.offset;\n this.offset = null;\n this.range(offset);\n },\n destroy: function () {\n this.unbind();\n },\n _prefetch: function () {\n var buffer = this, pageSize = this.pageSize, prefetchOffset = this.skip + pageSize, dataSource = this.dataSource;\n if (!dataSource.inRange(prefetchOffset, pageSize) && !this._prefetching && this.prefetch) {\n this._prefetching = true;\n this.trigger('prefetching', {\n skip: prefetchOffset,\n take: pageSize\n });\n dataSource.prefetch(prefetchOffset, pageSize, function () {\n buffer._prefetching = false;\n buffer.trigger('prefetched', {\n skip: prefetchOffset,\n take: pageSize\n });\n });\n }\n },\n _goToRange: function (offset, expanding) {\n if (this.offset !== offset) {\n return;\n }\n this.dataOffset = offset;\n this._expanding = expanding;\n this.dataSource.range(offset, this.pageSize);\n this.dataSource.enableRequestsInProgress();\n },\n _reset: function () {\n this._syncPending = true;\n },\n _change: function () {\n var dataSource = this.dataSource;\n this.length = this.useRanges ? dataSource.lastRange().end : dataSource.view().length;\n if (this._syncPending) {\n this._syncWithDataSource();\n this._recalculate();\n this._syncPending = false;\n this.trigger('reset', { offset: this.offset });\n }\n this.trigger('resize');\n if (this._expanding) {\n this.trigger('expand');\n }\n delete this._expanding;\n },\n _syncWithDataSource: function () {\n var dataSource = this.dataSource;\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 _recalculate: function () {\n var pageSize = this.pageSize, offset = this.offset, viewSize = this.viewSize, skip = Math.ceil(offset / pageSize) * pageSize;\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 this.nextMidRange = skip + pageSize - viewSize;\n this.nextFullRange = skip;\n this.previousMidRange = offset - viewSize;\n this.previousFullRange = skip - pageSize;\n }\n });\n var BatchBuffer = kendo.Observable.extend({\n init: function (dataSource, batchSize) {\n var batchBuffer = this;\n kendo.Observable.fn.init.call(batchBuffer);\n this.dataSource = dataSource;\n this.batchSize = batchSize;\n this._total = 0;\n this.buffer = new Buffer(dataSource, batchSize * 3);\n this.buffer.bind({\n 'endreached': function (e) {\n batchBuffer.trigger('endreached', { index: e.index });\n },\n 'prefetching': function (e) {\n batchBuffer.trigger('prefetching', {\n skip: e.skip,\n take: e.take\n });\n },\n 'prefetched': function (e) {\n batchBuffer.trigger('prefetched', {\n skip: e.skip,\n take: e.take\n });\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', {\n total: batchBuffer.total(),\n offset: this.offset\n });\n }\n });\n },\n syncDataSource: function () {\n this.buffer.syncDataSource();\n },\n at: function (index) {\n var buffer = this.buffer, skip = index * this.batchSize, take = this.batchSize, view = [], item;\n if (buffer.offset > skip) {\n buffer.at(buffer.offset - 1);\n }\n for (var i = 0; i < take; i++) {\n item = buffer.at(skip + i);\n if (item === null) {\n break;\n }\n view.push(item);\n }\n return view;\n },\n total: function () {\n return this._total;\n },\n destroy: function () {\n this.buffer.destroy();\n this.unbind();\n }\n });\n extend(true, kendo.data, {\n readers: { json: DataReader },\n Query: Query,\n DataSource: DataSource,\n HierarchicalDataSource: HierarchicalDataSource,\n Node: Node,\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 return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.binder', [\n 'kendo.core',\n 'kendo.data'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'binder',\n name: 'MVVM',\n category: 'framework',\n description: 'Model View ViewModel (MVVM) is a design pattern which helps developers separate the Model (the data) from the View (the UI).',\n depends: [\n 'core',\n 'data'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Observable = kendo.Observable, ObservableObject = kendo.data.ObservableObject, ObservableArray = kendo.data.ObservableArray, toString = {}.toString, binders = {}, Class = kendo.Class, proxy = $.proxy, VALUE = 'value', SOURCE = 'source', EVENTS = 'events', CHECKED = 'checked', CSS = 'css', deleteExpando = true, FUNCTION = 'function', CHANGE = 'change';\n (function () {\n var a = document.createElement('a');\n try {\n delete a.test;\n } catch (e) {\n deleteExpando = false;\n }\n }());\n var Binding = Observable.extend({\n init: function (parents, path) {\n var that = this;\n Observable.fn.init.call(that);\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 that._access = function (e) {\n that.dependencies[e.field] = true;\n };\n if (that.observable) {\n that._change = function (e) {\n that.change(e);\n };\n that.source.bind(CHANGE, that._change);\n }\n },\n _parents: function () {\n var parents = this.parents;\n var value = this.get();\n if (value && typeof value.parent == 'function') {\n var parent = value.parent();\n if ($.inArray(parent, parents) < 0) {\n parents = [parent].concat(parents);\n }\n }\n return parents;\n },\n change: function (e) {\n var dependency, ch, field = e.field, that = this;\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 if (!ch || ch === '.' || ch === '[') {\n that.trigger(CHANGE, e);\n break;\n }\n }\n }\n }\n },\n start: function (source) {\n source.bind('get', this._access);\n },\n stop: function (source) {\n source.unbind('get', this._access);\n },\n get: function () {\n var that = this, source = that.source, index = 0, path = that.path, result = source;\n if (!that.observable) {\n return result;\n }\n that.start(that.source);\n result = source.get(path);\n while (result === undefined && source) {\n source = that.parents[++index];\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n if (result === undefined) {\n source = that.source;\n while (result === undefined && source) {\n source = source.parent();\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n }\n if (typeof result === 'function') {\n index = path.lastIndexOf('.');\n if (index > 0) {\n source = source.get(path.substring(0, index));\n }\n that.start(source);\n if (source !== that.source) {\n result = result.call(source, that.source);\n } else {\n result = result.call(source);\n }\n that.stop(source);\n }\n if (source && source !== that.source) {\n that.currentSource = source;\n source.unbind(CHANGE, that._change).bind(CHANGE, that._change);\n }\n that.stop(that.source);\n return result;\n },\n set: function (value) {\n var source = this.currentSource || this.source;\n var field = kendo.getter(this.path)(source);\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 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 this.unbind();\n }\n });\n var EventBinding = Binding.extend({\n get: function () {\n var source = this.source, path = this.path, index = 0, handler;\n handler = source.get(path);\n while (!handler && source) {\n source = this.parents[++index];\n if (source instanceof ObservableObject) {\n handler = source.get(path);\n }\n }\n return proxy(handler, source);\n }\n });\n var TemplateBinding = Binding.extend({\n init: function (source, path, template) {\n var that = this;\n Binding.fn.init.call(that, source, path);\n that.template = template;\n },\n render: function (value) {\n var html;\n this.start(this.source);\n html = kendo.render(this.template, value);\n this.stop(this.source);\n return html;\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 bind: function (binding, attribute) {\n var that = this;\n binding = attribute ? binding[attribute] : binding;\n binding.bind(CHANGE, function (e) {\n that.refresh(attribute || e);\n });\n that.refresh(attribute);\n },\n destroy: function () {\n }\n });\n var TypedBinder = Binder.extend({\n dataType: function () {\n var dataType = this.element.getAttribute('data-type') || this.element.type || 'text';\n return dataType.toLowerCase();\n },\n parsedValue: function () {\n return this._parseValue(this.element.value, this.dataType());\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, [\n 'yyyy-MM-ddTHH:mm:ss',\n 'yyyy-MM-ddTHH:mm'\n ]);\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 binders.attr = Binder.extend({\n refresh: function (key) {\n this.element.setAttribute(key, this.bindings.attr[key].get());\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), binding = this.bindings.css[className], hasClass = this.classes[className] = binding.get();\n if (hasClass) {\n element.addClass(className);\n } else {\n element.removeClass(className);\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 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 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 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 binders.events = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.handlers = {};\n },\n refresh: function (key) {\n var element = $(this.element), binding = this.bindings.events[key], handler = this.handlers[key];\n if (handler) {\n element.off(key, handler);\n }\n handler = this.handlers[key] = binding.get();\n element.on(key, binding.source, handler);\n },\n destroy: function () {\n var element = $(this.element), handler;\n for (handler in this.handlers) {\n element.off(handler, this.handlers[handler]);\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-format') || '';\n if (text == null) {\n text = '';\n }\n $(this.element).text(kendo.toString(text, dataFormat));\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 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 binders.html = Binder.extend({\n refresh: function () {\n this.element.innerHTML = this.bindings.html.get();\n }\n });\n binders.value = TypedBinder.extend({\n init: function (element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = proxy(this.change, this);\n this.eventName = options.valueUpdate || CHANGE;\n $(this.element).on(this.eventName, this._change);\n this._initChange = false;\n },\n change: function () {\n this._initChange = this.eventName != CHANGE;\n this.bindings[VALUE].set(this.parsedValue());\n this._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var value = this.bindings[VALUE].get();\n if (value == null) {\n value = '';\n }\n var type = this.dataType();\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 this.element.value = value;\n }\n this._initChange = false;\n },\n destroy: function () {\n $(this.element).off(this.eventName, this._change);\n }\n });\n binders.source = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n var source = this.bindings.source.get();\n if (source instanceof kendo.data.DataSource && options.autoBind !== false) {\n source.fetch();\n }\n },\n refresh: function (e) {\n var that = this, source = that.bindings.source.get();\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') {\n that.render();\n }\n } else {\n that.render();\n }\n },\n container: function () {\n var element = this.element;\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 return element;\n },\n template: function () {\n var options = this.options, template = options.template, nodeName = this.container().nodeName.toLowerCase();\n if (!template) {\n if (nodeName == 'select') {\n if (options.valueField || options.textField) {\n template = kendo.format('<option value=\"#:{0}#\">#:{1}#</option>', options.valueField || options.textField, options.textField || options.valueField);\n } else {\n template = '<option>#:data#</option>';\n }\n } else if (nodeName == 'tbody') {\n template = '<tr><td>#:data#</td></tr>';\n } else if (nodeName == 'ul' || nodeName == 'ol') {\n template = '<li>#:data#</li>';\n } else {\n template = '#:data#';\n }\n template = kendo.template(template);\n }\n return template;\n },\n add: function (index, items) {\n var element = this.container(), parents, idx, length, child, clone = element.cloneNode(false), reference = element.children[index];\n $(clone).html(kendo.render(this.template(), items));\n if (clone.children.length) {\n parents = this.bindings.source._parents();\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 remove: function (index, items) {\n var idx, element = this.container();\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 render: function () {\n var source = this.bindings.source.get(), parents, idx, length, element = this.container(), template = this.template();\n if (source == null) {\n return;\n }\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n if (!(source instanceof ObservableArray) && toString.call(source) !== '[object Array]') {\n source = [source];\n }\n if (this.bindings.template) {\n unbindElementChildren(element, true);\n $(element).html(this.bindings.template.render(source));\n if (element.children.length) {\n parents = this.bindings.source._parents();\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 binders.input = {\n checked: TypedBinder.extend({\n init: function (element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = proxy(this.change, this);\n $(this.element).change(this._change);\n },\n change: function () {\n var element = this.element;\n var value = this.value();\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 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 refresh: function () {\n var value = this.bindings[CHECKED].get(), source = value, type = this.dataType(), element = this.element;\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' && value != null) {\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 if (element.value === value.toString()) {\n element.checked = true;\n } else {\n element.checked = false;\n }\n }\n },\n value: function () {\n var element = this.element, value = element.value;\n if (element.type == 'checkbox') {\n value = element.checked;\n }\n return value;\n },\n destroy: function () {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n binders.select = {\n source: binders.source.extend({\n refresh: function (e) {\n var that = this, source = that.bindings.source.get();\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) {\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 this._change = proxy(this.change, this);\n $(this.element).change(this._change);\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 if (option.selected) {\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n values.push(this._parseValue(value, dataType));\n }\n }\n return values;\n },\n change: function () {\n var values = [], element = this.element, source, field = this.options.valueField || this.options.textField, valuePrimitive = this.options.valuePrimitive, option, valueIndex, value, idx, length;\n for (idx = 0, length = element.options.length; idx < length; idx++) {\n option = element.options[idx];\n if (option.selected) {\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n if (field) {\n values.push(value);\n } else {\n values.push(this._parseValue(value, this.dataType()));\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 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 value = this.bindings[VALUE].get();\n if (value instanceof ObservableArray) {\n value.splice.apply(value, [\n 0,\n value.length\n ].concat(values));\n } else if (!valuePrimitive && (value instanceof ObservableObject || value === null || value === undefined || !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, element = this.element, options = element.options, value = this.bindings[VALUE].get(), values = value, field = this.options.valueField || this.options.textField, found = false, type = this.dataType(), optionValue;\n if (!(values instanceof ObservableArray)) {\n values = new ObservableArray([value]);\n }\n element.selectedIndex = -1;\n for (var valueIndex = 0; valueIndex < values.length; valueIndex++) {\n value = values[valueIndex];\n if (field && value instanceof ObservableObject) {\n value = value.get(field);\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 for (optionIndex = 0; optionIndex < options.length; optionIndex++) {\n optionValue = options[optionIndex].value;\n if (optionValue === '' && value !== '') {\n optionValue = options[optionIndex].text;\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 function dataSourceBinding(bindingName, fieldName, setter) {\n return Binder.extend({\n init: function (widget, bindings, options) {\n var that = this;\n Binder.fn.init.call(that, widget.element[0], bindings, options);\n that.widget = widget;\n that._dataBinding = proxy(that.dataBinding, that);\n that._dataBound = proxy(that.dataBound, that);\n that._itemChange = proxy(that.itemChange, that);\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 dataBinding: function (e) {\n var idx, length, widget = this.widget, items = e.removedItems || widget.items();\n for (idx = 0, length = items.length; idx < length; idx++) {\n unbindElementTree(items[idx], false);\n }\n },\n _ns: function (ns) {\n ns = ns || kendo.ui;\n var all = [\n kendo.ui,\n kendo.dataviz.ui,\n kendo.mobile.ui\n ];\n all.splice($.inArray(ns, all), 1);\n all.unshift(ns);\n return kendo.rolesFromNamespaces(all);\n },\n dataBound: function (e) {\n var idx, length, widget = this.widget, items = e.addedItems || widget.items(), dataSource = widget[fieldName], view, parents, hds = kendo.data.HierarchicalDataSource;\n if (hds && dataSource instanceof hds) {\n return;\n }\n if (items.length) {\n view = e.addedDataItems || dataSource.flatView();\n parents = this.bindings[bindingName]._parents();\n for (idx = 0, length = view.length; idx < length; idx++) {\n bindElement(items[idx], view[idx], this._ns(e.ns), [view[idx]].concat(parents));\n }\n }\n },\n refresh: function (e) {\n var that = this, source, widget = that.widget, select, multiselect;\n e = e || {};\n if (!e.action) {\n that.destroy();\n widget.bind('dataBinding', that._dataBinding);\n widget.bind('dataBound', that._dataBound);\n widget.bind('itemChange', that._itemChange);\n source = that.bindings[bindingName].get();\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 widget[fieldName].data(source);\n select = kendo.ui.Select && widget instanceof kendo.ui.Select;\n multiselect = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect;\n if (that.bindings.value && (select || multiselect)) {\n widget.value(retrievePrimitiveValues(that.bindings.value.get(), widget.options.dataValueField));\n }\n }\n }\n }\n },\n destroy: function () {\n var widget = this.widget;\n widget.unbind('dataBinding', this._dataBinding);\n widget.unbind('dataBound', this._dataBound);\n widget.unbind('itemChange', this._itemChange);\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 refresh: function (key) {\n var binding = this.bindings.events[key], handler = this.handlers[key];\n if (handler) {\n this.widget.unbind(key, handler);\n }\n handler = binding.get();\n this.handlers[key] = function (e) {\n e.data = binding.source;\n handler(e);\n if (e.data === binding.source) {\n delete e.data;\n }\n };\n this.widget.bind(key, this.handlers[key]);\n },\n destroy: function () {\n var handler;\n for (handler in this.handlers) {\n this.widget.unbind(handler, this.handlers[handler]);\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 this.widget = widget;\n this._change = proxy(this.change, this);\n this.widget.bind(CHANGE, this._change);\n },\n change: function () {\n this.bindings[CHECKED].set(this.value());\n },\n refresh: function () {\n this.widget.check(this.bindings[CHECKED].get() === true);\n },\n value: function () {\n var element = this.element, value = element.value;\n if (value == 'on' || value == 'off') {\n value = element.checked;\n }\n return value;\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n visible: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n var visible = this.bindings.visible.get();\n this.widget.wrapper[0].style.display = visible ? '' : 'none';\n }\n }),\n invisible: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n var invisible = this.bindings.invisible.get();\n this.widget.wrapper[0].style.display = invisible ? 'none' : '';\n }\n }),\n enabled: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n if (this.widget.enable) {\n this.widget.enable(this.bindings.enabled.get());\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 this.widget = widget;\n },\n refresh: function () {\n if (this.widget.enable) {\n this.widget.enable(!this.bindings.disabled.get());\n }\n }\n }),\n source: dataSourceBinding('source', 'dataSource', 'setDataSource'),\n value: 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._change = $.proxy(this.change, this);\n this.widget.first(CHANGE, this._change);\n var value = this.bindings.value.get();\n this._valueIsObservableObject = !options.valuePrimitive && (value == null || value instanceof ObservableObject);\n this._valueIsObservableArray = value instanceof ObservableArray;\n this._initChange = false;\n },\n _source: function () {\n var source;\n if (this.widget.dataItem) {\n source = this.widget.dataItem();\n if (source && source instanceof ObservableObject) {\n return [source];\n }\n }\n if (this.bindings.source) {\n source = this.bindings.source.get();\n }\n if (!source || source instanceof kendo.data.DataSource) {\n source = this.widget.dataSource.flatView();\n }\n return source;\n },\n change: function () {\n var value = this.widget.value(), field = this.options.dataValueField || this.options.dataTextField, isArray = toString.call(value) === '[object Array]', isObservableObject = this._valueIsObservableObject, valueIndex, valueLength, values = [], sourceItem, sourceValue, idx, length, source;\n this._initChange = true;\n if (field) {\n if (value === '' && (isObservableObject || this.options.valuePrimitive)) {\n value = null;\n } else {\n source = this._source();\n if (isArray) {\n valueLength = value.length;\n values = value.slice(0);\n }\n for (idx = 0, length = source.length; idx < length; idx++) {\n sourceItem = source[idx];\n sourceValue = sourceItem.get(field);\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 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 this.bindings.value.set(value);\n this._initChange = false;\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 if (value === undefined) {\n value = null;\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 if (options.autoBind === false && !options.cascadeFrom && widget.listView && !widget.listView.bound()) {\n if (textField === valueField && !text) {\n text = value;\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 this._initChange = false;\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n gantt: { dependencies: dataSourceBinding('dependencies', 'dependencies', 'setDependenciesDataSource') },\n multiselect: {\n value: 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._change = $.proxy(this.change, this);\n this.widget.first(CHANGE, this._change);\n this._initChange = false;\n },\n change: function () {\n var that = this, oldValues = that.bindings[VALUE].get(), valuePrimitive = that.options.valuePrimitive, newValues = valuePrimitive ? that.widget.value() : that.widget.dataItems();\n var field = this.options.dataValueField || this.options.dataTextField;\n newValues = newValues.slice(0);\n that._initChange = true;\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 while (old !== undefined) {\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 newValue = newValue.get ? newValue.get(field) : newValue;\n same = newValue == (old.get ? old.get(field) : old);\n }\n if (same) {\n newValues.splice(j, 1);\n newLength -= 1;\n found = true;\n break;\n }\n }\n if (!found) {\n remove.push(old);\n arraySplice(oldValues, i, 1);\n removeIndex = i;\n } else {\n i += 1;\n }\n old = oldValues[i];\n }\n arraySplice(oldValues, oldValues.length, 0, newValues);\n if (remove.length) {\n oldValues.trigger('change', {\n action: 'remove',\n items: remove,\n index: removeIndex\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 that._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var options = this.options, widget = this.widget, field = options.dataValueField || options.dataTextField, value = this.bindings.value.get(), data = value, idx = 0, length, values = [], selectedValue;\n if (value === undefined) {\n value = null;\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 && !widget._isBound()) {\n widget._preselect(data, value);\n } else {\n widget.value(value);\n }\n }\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\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 if (elements.length) {\n data = e.addedDataItems || widget.dataItems();\n parents = this.bindings.source._parents();\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 var arraySplice = function (arr, idx, remove, add) {\n add = add || [];\n remove = remove || 0;\n var addLength = add.length;\n var oldLength = arr.length;\n var shifted = [].slice.call(arr, idx + remove);\n var shiftedLength = shifted.length;\n var index;\n if (addLength) {\n addLength = idx + addLength;\n index = 0;\n for (; idx < addLength; idx++) {\n arr[idx] = add[index];\n index++;\n }\n arr.length = addLength;\n } else if (remove) {\n arr.length = idx;\n remove += idx;\n while (idx < remove) {\n delete arr[--remove];\n }\n }\n if (shiftedLength) {\n shiftedLength = idx + shiftedLength;\n index = 0;\n for (; idx < shiftedLength; idx++) {\n arr[idx] = shifted[index];\n index++;\n }\n arr.length = shiftedLength;\n }\n idx = arr.length;\n while (idx < oldLength) {\n delete arr[idx];\n idx++;\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 bind: function (bindings) {\n var key, hasValue, hasSource, hasEvents, hasChecked, hasCss, widgetBinding = this instanceof WidgetBindingTarget, specificBinders = this.binders();\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 if (hasValue) {\n this.applyBinding(VALUE, bindings, specificBinders);\n }\n if (hasChecked) {\n this.applyBinding(CHECKED, bindings, specificBinders);\n }\n if (hasEvents && !widgetBinding) {\n this.applyBinding(EVENTS, bindings, specificBinders);\n }\n if (hasCss && !widgetBinding) {\n this.applyBinding(CSS, bindings, specificBinders);\n }\n },\n binders: function () {\n return binders[this.target.nodeName.toLowerCase()] || {};\n },\n applyBinding: function (name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders[name], toDestroy = this.toDestroy, attribute, binding = bindings[name];\n if (binder) {\n binder = new binder(this.target, bindings, this.options);\n toDestroy.push(binder);\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 destroy: function () {\n var idx, length, toDestroy = this.toDestroy;\n for (idx = 0, length = toDestroy.length; idx < length; idx++) {\n toDestroy[idx].destroy();\n }\n }\n });\n var WidgetBindingTarget = BindingTarget.extend({\n binders: function () {\n return binders.widget[this.target.options.name.toLowerCase()] || {};\n },\n applyBinding: function (name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders.widget[name], toDestroy = this.toDestroy, attribute, binding = bindings[name];\n if (binder) {\n binder = new binder(this.target, bindings, this.target.options);\n toDestroy.push(binder);\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 function bindingTargetForRole(element, roles) {\n var widget = kendo.initWidget(element, {}, roles);\n if (widget) {\n return new WidgetBindingTarget(widget);\n }\n }\n var keyValueRegExp = /[A-Za-z0-9_\\-]+:(\\{([^}]*)\\}|[^,}]+)/g, whiteSpaceRegExp = /\\s/g;\n function parseBindings(bind) {\n var result = {}, idx, length, token, colonIndex, key, value, tokens;\n tokens = bind.match(keyValueRegExp);\n for (idx = 0, length = tokens.length; idx < length; idx++) {\n token = tokens[idx];\n colonIndex = token.indexOf(':');\n key = token.substring(0, colonIndex);\n value = token.substring(colonIndex + 1);\n if (value.charAt(0) == '{') {\n value = parseBindings(value);\n }\n result[key] = value;\n }\n return result;\n }\n function createBindings(bindings, source, type) {\n var binding, result = {};\n for (binding in bindings) {\n result[binding] = new type(source, bindings[binding]);\n }\n return result;\n }\n function bindElement(element, source, roles, parents) {\n var role = element.getAttribute('data-' + kendo.ns + 'role'), idx, bind = element.getAttribute('data-' + kendo.ns + 'bind'), childrenCopy = [], deep = true, bindings, options = {}, target;\n parents = parents || [source];\n if (role || bind) {\n unbindElement(element, false);\n }\n if (role) {\n target = bindingTargetForRole(element, roles);\n }\n if (bind) {\n bind = parseBindings(bind.replace(whiteSpaceRegExp, ''));\n if (!target) {\n options = kendo.parseOptions(element, {\n textField: '',\n valueField: '',\n template: '',\n valueUpdate: CHANGE,\n valuePrimitive: false,\n autoBind: true\n });\n options.roles = roles;\n target = new BindingTarget(element, options);\n }\n target.source = source;\n bindings = createBindings(bind, parents, Binding);\n if (options.template) {\n bindings.template = new TemplateBinding(parents, '', options.template);\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 if (bindings.source) {\n deep = false;\n }\n if (bind.attr) {\n bindings.attr = createBindings(bind.attr, parents, Binding);\n }\n if (bind.style) {\n bindings.style = createBindings(bind.style, parents, Binding);\n }\n if (bind.events) {\n bindings.events = createBindings(bind.events, parents, EventBinding);\n }\n if (bind.css) {\n bindings.css = createBindings(bind.css, parents, Binding);\n }\n target.bind(bindings);\n }\n if (target) {\n element.kendoBindingTarget = target;\n }\n var children = element.children;\n if (deep && children) {\n for (idx = 0; idx < children.length; idx++) {\n childrenCopy[idx] = children[idx];\n }\n for (idx = 0; idx < childrenCopy.length; idx++) {\n bindElement(childrenCopy[idx], source, roles, parents);\n }\n }\n }\n function bind(dom, object) {\n var idx, length, node, roles = kendo.rolesFromNamespaces([].slice.call(arguments, 2));\n object = kendo.observable(object);\n dom = $(dom);\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 function unbindElement(element, destroyWidget) {\n var bindingTarget = element.kendoBindingTarget;\n if (bindingTarget) {\n bindingTarget.destroy();\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 if (destroyWidget) {\n var widget = kendo.widgetInstance($(element));\n if (widget && typeof widget.destroy === FUNCTION) {\n widget.destroy();\n }\n }\n }\n function unbindElementTree(element, destroyWidgets) {\n unbindElement(element, destroyWidgets);\n unbindElementChildren(element, destroyWidgets);\n }\n function unbindElementChildren(element, destroyWidgets) {\n var children = element.children;\n if (children) {\n for (var idx = 0, length = children.length; idx < length; idx++) {\n unbindElementTree(children[idx], destroyWidgets);\n }\n }\n }\n function unbind(dom) {\n var idx, length;\n dom = $(dom);\n for (idx = 0, length = dom.length; idx < length; idx++) {\n unbindElementTree(dom[idx], false);\n }\n }\n function notify(widget, namespace) {\n var element = widget.element, bindingTarget = element[0].kendoBindingTarget;\n if (bindingTarget) {\n bind(element, bindingTarget.source, namespace);\n }\n }\n function retrievePrimitiveValues(value, valueField) {\n var values = [];\n var idx = 0;\n var length;\n var item;\n if (!valueField) {\n return value;\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 return value;\n }\n kendo.unbind = unbind;\n kendo.bind = bind;\n kendo.data.binders = binders;\n kendo.data.Binder = Binder;\n kendo.notify = notify;\n kendo.observable = function (object) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n return object;\n };\n kendo.observableHierarchy = function (array) {\n var dataSource = kendo.data.HierarchicalDataSource.create(array);\n function recursiveRead(data) {\n var i, children;\n for (i = 0; i < data.length; i++) {\n data[i]._initChildren();\n children = data[i].children;\n children.fetch();\n data[i].items = children.data();\n recursiveRead(data[i].items);\n }\n }\n dataSource.fetch();\n recursiveRead(dataSource.data());\n dataSource._data._dataSource = dataSource;\n return dataSource._data;\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.fx', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\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 (function ($, undefined) {\n var kendo = window.kendo, fx = kendo.effects, each = $.each, extend = $.extend, proxy = $.proxy, support = kendo.support, browser = support.browser, transforms = support.transforms, transitions = support.transitions, scaleProperties = {\n scale: 0,\n scalex: 0,\n scaley: 0,\n scale3d: 0\n }, translateProperties = {\n translate: 0,\n translatex: 0,\n translatey: 0,\n translate3d: 0\n }, hasZoom = typeof document.documentElement.style.zoom !== 'undefined' && !transforms, matrix3dRegExp = /matrix3?d?\\s*\\(.*,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?/i, cssParamsRegExp = /^(-?[\\d\\.\\-]+)?[\\w\\s]*,?\\s*(-?[\\d\\.\\-]+)?[\\w\\s]*/i, translateXRegExp = /translatex?$/i, oldEffectsRegExp = /(zoom|fade|expand)(\\w+)/, singleEffectRegExp = /(zoom|fade|expand)/, unitRegExp = /[xy]$/i, transformProps = [\n 'perspective',\n 'rotate',\n 'rotatex',\n 'rotatey',\n 'rotatez',\n 'rotate3d',\n 'scale',\n 'scalex',\n 'scaley',\n 'scalez',\n 'scale3d',\n 'skew',\n 'skewx',\n 'skewy',\n 'translate',\n 'translatex',\n 'translatey',\n 'translatez',\n 'translate3d',\n 'matrix',\n 'matrix3d'\n ], transform2d = [\n 'rotate',\n 'scale',\n 'scalex',\n 'scaley',\n 'skew',\n 'skewx',\n 'skewy',\n 'translate',\n 'translatex',\n 'translatey',\n 'matrix'\n ], transform2units = {\n 'rotate': 'deg',\n scale: '',\n skew: 'px',\n translate: 'px'\n }, cssPrefix = transforms.css, round = Math.round, BLANK = '', PX = 'px', NONE = 'none', AUTO = 'auto', WIDTH = 'width', HEIGHT = 'height', HIDDEN = 'hidden', ORIGIN = 'origin', ABORT_ID = 'abortId', OVERFLOW = 'overflow', TRANSLATE = 'translate', POSITION = 'position', COMPLETE_CALLBACK = 'completeCallback', TRANSITION = cssPrefix + 'transition', TRANSFORM = cssPrefix + 'transform', BACKFACE = cssPrefix + 'backface-visibility', PERSPECTIVE = cssPrefix + 'perspective', DEFAULT_PERSPECTIVE = '1500px', TRANSFORM_PERSPECTIVE = 'perspective(' + DEFAULT_PERSPECTIVE + ')', 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: { reverse: 'bottom' },\n bottom: { reverse: 'top' },\n 'in': {\n reverse: 'out',\n modifier: -1\n },\n out: {\n reverse: 'in',\n modifier: 1\n },\n vertical: { reverse: 'vertical' },\n horizontal: { reverse: 'horizontal' }\n };\n kendo.directions = directions;\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 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], transformValue = value + '(' + val + transform2units[value.replace(unitRegExp, '')] + ')';\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 $.fx.step[value] = function (fx) {\n $(fx.elem)[value](fx.now);\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 return curProxy.apply(this, arguments);\n };\n }\n kendo.toggleClass = function (element, classes, options, add) {\n if (classes) {\n classes = classes.split(' ');\n if (transitions) {\n options = extend({\n exclusive: 'all',\n duration: 400,\n ease: 'ease-out'\n }, options);\n element.css(TRANSITION, options.exclusive + ' ' + options.duration + 'ms ' + options.ease);\n setTimeout(function () {\n element.css(TRANSITION, '').css(HEIGHT);\n }, options.duration);\n }\n each(classes, function (idx, value) {\n element.toggleClass(value, add);\n });\n }\n return element;\n };\n kendo.parseEffects = function (input, mirror) {\n var effects = {};\n if (typeof input === 'string') {\n each(input.split(' '), function (idx, value) {\n var redirectedEffect = !singleEffectRegExp.test(value), resolved = value.replace(oldEffectsRegExp, function (match, $1, $2) {\n return $1 + ':' + $2.toLowerCase();\n }), effect = resolved.split(':'), direction = effect[1], effectBody = {};\n if (effect.length > 1) {\n effectBody.direction = mirror && redirectedEffect ? directions[direction].reverse : direction;\n }\n effects[effect[0]] = effectBody;\n });\n } else {\n each(input, function (idx) {\n var direction = this.direction;\n if (direction && mirror && !singleEffectRegExp.test(idx)) {\n this.direction = directions[direction].reverse;\n }\n effects[idx] = this;\n });\n }\n return effects;\n };\n function parseInteger(value) {\n return parseInt(value, 10);\n }\n function parseCSS(element, property) {\n return parseInteger(element.css(property));\n }\n function keys(obj) {\n var acc = [];\n for (var propertyName in obj) {\n acc.push(propertyName);\n }\n return acc;\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 return properties;\n }\n function normalizeCSS(element, properties) {\n var transformation = [], cssValues = {}, lowerKey, key, value, isTransformed;\n for (key in properties) {\n lowerKey = key.toLowerCase();\n isTransformed = transforms && transformProps.indexOf(lowerKey) != -1;\n if (!support.hasHW3D && isTransformed && transform2d.indexOf(lowerKey) == -1) {\n delete properties[key];\n } else {\n value = properties[key];\n if (isTransformed) {\n transformation.push(key + '(' + value + ')');\n } else {\n cssValues[key] = value;\n }\n }\n }\n if (transformation.length) {\n cssValues[TRANSFORM] = transformation.join(' ');\n }\n return cssValues;\n }\n if (transitions) {\n extend(fx, {\n transition: function (element, properties, options) {\n var css, delay = 0, oldKeys = element.data('keys') || [], timeoutID;\n options = extend({\n duration: 200,\n ease: 'ease-out',\n complete: null,\n exclusive: 'all'\n }, options);\n var stopTransitionCalled = false;\n var stopTransition = function () {\n if (!stopTransitionCalled) {\n stopTransitionCalled = true;\n if (timeoutID) {\n clearTimeout(timeoutID);\n timeoutID = null;\n }\n element.removeData(ABORT_ID).dequeue().css(TRANSITION, '').css(TRANSITION);\n options.complete.call(element);\n }\n };\n options.duration = $.fx ? $.fx.speeds[options.duration] || options.duration : options.duration;\n css = normalizeCSS(element, properties);\n $.merge(oldKeys, keys(css));\n element.data('keys', $.unique(oldKeys)).height();\n element.css(TRANSITION, options.exclusive + ' ' + options.duration + 'ms ' + options.ease).css(TRANSITION);\n element.css(css).css(TRANSFORM);\n if (transitions.event) {\n element.one(transitions.event, stopTransition);\n if (options.duration !== 0) {\n delay = 500;\n }\n }\n timeoutID = setTimeout(stopTransition, options.duration + delay);\n element.data(ABORT_ID, timeoutID);\n element.data(COMPLETE_CALLBACK, stopTransition);\n },\n stopQueue: function (element, clearQueue, gotoEnd) {\n var cssValues, taskKeys = element.data('keys'), retainPosition = !gotoEnd && taskKeys, completeCallback = element.data(COMPLETE_CALLBACK);\n if (retainPosition) {\n cssValues = kendo.getComputedStyles(element[0], taskKeys);\n }\n if (completeCallback) {\n completeCallback();\n }\n if (retainPosition) {\n element.css(cssValues);\n }\n return element.removeData('keys').stop(clearQueue);\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 var match = transform.match(new RegExp(property + '\\\\s*\\\\(([\\\\d\\\\w\\\\.]+)')), computed = 0;\n if (match) {\n computed = parseInteger(match[1]);\n } else {\n match = transform.match(matrix3dRegExp) || [\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n property = property.toLowerCase();\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 return computed;\n } else {\n return parseFloat(element.css(property));\n }\n }\n var EffectSet = kendo.Class.extend({\n init: function (element, options) {\n var that = this;\n that.element = element;\n that.effects = [];\n that.options = options;\n that.restore = [];\n },\n run: function (effects) {\n var that = this, effect, idx, jdx, length = effects.length, element = that.element, options = that.options, deferred = $.Deferred(), start = {}, end = {}, target, children, childrenLength;\n that.effects = effects;\n deferred.then($.proxy(that, 'complete'));\n element.data('animating', true);\n for (idx = 0; idx < length; idx++) {\n effect = effects[idx];\n effect.setReverse(options.reverse);\n effect.setOptions(options);\n that.addRestoreProperties(effect.restore);\n effect.prepare(start, end);\n children = effect.children();\n for (jdx = 0, childrenLength = children.length; jdx < childrenLength; jdx++) {\n children[jdx].duration(options.duration).run();\n }\n }\n for (var effectName in options.effects) {\n extend(end, options.effects[effectName].properties);\n }\n if (!element.is(':visible')) {\n extend(start, { display: element.data('olddisplay') || 'block' });\n }\n if (transforms && !options.reset) {\n target = element.data('targetTransform');\n if (target) {\n start = extend(target, start);\n }\n }\n start = normalizeCSS(element, start);\n if (transforms && !transitions) {\n start = strip3DTransforms(start);\n }\n element.css(start).css(TRANSFORM);\n for (idx = 0; idx < length; idx++) {\n effects[idx].setup();\n }\n if (options.init) {\n options.init();\n }\n element.data('targetTransform', end);\n fx.animate(element, end, extend({}, options, { complete: deferred.resolve }));\n return deferred.promise();\n },\n stop: function () {\n $(this.element).kendoStop(true, true);\n },\n addRestoreProperties: function (restore) {\n var element = this.element, value, i = 0, length = restore.length;\n for (; i < length; i++) {\n value = restore[i];\n this.restore.push(value);\n if (!element.data(value)) {\n element.data(value, element.css(value));\n }\n }\n },\n restoreCallback: function () {\n var element = this.element;\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 complete: function () {\n var that = this, idx = 0, element = that.element, options = that.options, effects = that.effects, length = effects.length;\n element.removeData('animating').dequeue();\n if (options.hide) {\n element.data('olddisplay', element.css('display')).hide();\n }\n this.restoreCallback();\n if (hasZoom && !transforms) {\n setTimeout($.proxy(this, 'restoreCallback'), 0);\n }\n for (; idx < length; idx++) {\n effects[idx].teardown();\n }\n if (options.completeCallback) {\n options.completeCallback(element);\n }\n }\n });\n fx.promise = function (element, options) {\n var effects = [], effectClass, effectSet = new EffectSet(element, options), parsedEffects = kendo.parseEffects(options.effects), effect;\n options.effects = parsedEffects;\n for (var effectName in parsedEffects) {\n effectClass = fx[capitalize(effectName)];\n if (effectClass) {\n effect = new effectClass(element, parsedEffects[effectName].direction);\n effects.push(effect);\n }\n }\n if (effects[0]) {\n effectSet.run(effects);\n } else {\n if (!element.is(':visible')) {\n element.css({ display: element.data('olddisplay') || 'block' }).css('display');\n }\n if (options.init) {\n options.init();\n }\n element.dequeue();\n effectSet.complete();\n }\n };\n extend(fx, {\n animate: function (elements, properties, options) {\n var useTransition = options.transition !== false;\n delete options.transition;\n if (transitions && 'transition' in fx && useTransition) {\n fx.transition(elements, properties, options);\n } else {\n if (transforms) {\n elements.animate(strip3DTransforms(properties), {\n queue: false,\n show: false,\n hide: false,\n duration: options.duration,\n complete: options.complete\n });\n } else {\n elements.each(function () {\n var element = $(this), multiple = {};\n each(transformProps, function (idx, value) {\n var params, currentValue = properties ? properties[value] + ' ' : null;\n if (currentValue) {\n var single = properties;\n if (value in scaleProperties && properties[value] !== undefined) {\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) {\n var position = element.css(POSITION), isFixed = position == 'absolute' || position == 'fixed';\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 var originalPosition = element.data(TRANSLATE);\n params = currentValue.match(cssParamsRegExp);\n if (params) {\n var dX = value == TRANSLATE + 'y' ? +null : +params[1], dY = value == TRANSLATE + 'y' ? +params[1] : +params[2];\n if (isFixed) {\n if (!isNaN(originalPosition.right)) {\n if (!isNaN(dX)) {\n extend(single, { right: originalPosition.right - dX });\n }\n } else {\n if (!isNaN(dX)) {\n extend(single, { left: originalPosition.left + dX });\n }\n }\n if (!isNaN(originalPosition.bottom)) {\n if (!isNaN(dY)) {\n extend(single, { bottom: originalPosition.bottom - dY });\n }\n } else {\n if (!isNaN(dY)) {\n extend(single, { top: originalPosition.top + dY });\n }\n }\n } else {\n if (!isNaN(dX)) {\n extend(single, { marginLeft: originalPosition.left + dX });\n }\n if (!isNaN(dY)) {\n 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 if (single) {\n extend(multiple, single);\n }\n }\n });\n if (browser.msie) {\n delete multiple.scale;\n }\n element.animate(multiple, {\n queue: false,\n show: false,\n hide: false,\n duration: options.duration,\n complete: options.complete\n });\n });\n }\n }\n }\n });\n fx.animatedPromise = fx.promise;\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 if (!that.restore) {\n that.restore = [];\n }\n },\n reverse: function () {\n this._reverse = true;\n return this.run();\n },\n play: function () {\n this._reverse = false;\n return this.run();\n },\n add: function (additional) {\n this._additionalEffects.push(additional);\n return this;\n },\n direction: function (value) {\n this._direction = value;\n return this;\n },\n duration: function (duration) {\n this._duration = duration;\n return this;\n },\n compositeRun: function () {\n var that = this, effectSet = new EffectSet(that.element, {\n reverse: that._reverse,\n duration: that._duration\n }), effects = that._additionalEffects.concat([that]);\n return effectSet.run(effects);\n },\n run: function () {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n var that = this, element = that.element, idx = 0, restore = that.restore, length = restore.length, value, deferred = $.Deferred(), start = {}, end = {}, target, children = that.children(), childrenLength = children.length;\n deferred.then($.proxy(that, '_complete'));\n element.data('animating', true);\n for (idx = 0; idx < length; idx++) {\n value = restore[idx];\n if (!element.data(value)) {\n element.data(value, element.css(value));\n }\n }\n for (idx = 0; idx < childrenLength; idx++) {\n children[idx].duration(that._duration).run();\n }\n that.prepare(start, end);\n if (!element.is(':visible')) {\n extend(start, { display: element.data('olddisplay') || 'block' });\n }\n if (transforms) {\n target = element.data('targetTransform');\n if (target) {\n start = extend(target, start);\n }\n }\n start = normalizeCSS(element, start);\n if (transforms && !transitions) {\n start = strip3DTransforms(start);\n }\n element.css(start).css(TRANSFORM);\n that.setup();\n element.data('targetTransform', end);\n fx.animate(element, end, {\n duration: that._duration,\n complete: deferred.resolve\n });\n return deferred.promise();\n },\n stop: function () {\n var idx = 0, children = this.children(), childrenLength = children.length;\n for (idx = 0; idx < childrenLength; idx++) {\n children[idx].stop();\n }\n $(this.element).kendoStop(true, true);\n return this;\n },\n restoreCallback: function () {\n var element = this.element;\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 _complete: function () {\n var that = this, element = that.element;\n element.removeData('animating').dequeue();\n that.restoreCallback();\n if (that.shouldHide()) {\n element.data('olddisplay', element.css('display')).hide();\n }\n if (hasZoom && !transforms) {\n setTimeout($.proxy(that, 'restoreCallback'), 0);\n }\n that.teardown();\n },\n setOptions: function (options) {\n extend(true, this.options, options);\n },\n children: function () {\n return [];\n },\n shouldHide: $.noop,\n setup: $.noop,\n prepare: $.noop,\n teardown: $.noop,\n directions: [],\n setReverse: function (reverse) {\n this._reverse = reverse;\n return this;\n }\n });\n function capitalize(word) {\n return word.charAt(0).toUpperCase() + word.substring(1);\n }\n function createEffect(name, definition) {\n var effectClass = Effect.extend(definition), directions = effectClass.prototype.directions;\n fx[capitalize(name)] = effectClass;\n fx.Element.prototype[name] = function (direction, opt1, opt2, opt3) {\n return new effectClass(this.element, direction, opt1, opt2, opt3);\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 var FOUR_DIRECTIONS = [\n 'left',\n 'right',\n 'up',\n 'down'\n ], IN_OUT = [\n 'in',\n 'out'\n ];\n createEffect('slideIn', {\n directions: FOUR_DIRECTIONS,\n divisor: function (value) {\n this.options.divisor = value;\n return this;\n },\n prepare: function (start, end) {\n var that = this, tmp, element = that.element, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, direction = directions[that._direction], offset = -direction.modifier * (direction.vertical ? outerHeight(element) : outerWidth(element)), startValue = offset / (that.options && that.options.divisor || 1) + PX, endValue = '0px';\n if (that._reverse) {\n tmp = start;\n start = end;\n end = tmp;\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 createEffect('tile', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, previous) {\n Effect.prototype.init.call(this, element, direction);\n this.options = { previous: previous };\n },\n previousDivisor: function (value) {\n this.options.previousDivisor = value;\n return this;\n },\n children: function () {\n var that = this, reverse = that._reverse, previous = that.options.previous, divisor = that.options.previousDivisor || 1, dir = that._direction;\n var children = [kendo.fx(that.element).slideIn(dir).setReverse(reverse)];\n if (previous) {\n children.push(kendo.fx(previous).slideIn(directions[dir].reverse).divisor(divisor).setReverse(!reverse));\n }\n return children;\n }\n });\n function createToggleEffect(name, property, defaultStart, defaultEnd) {\n createEffect(name, {\n directions: IN_OUT,\n startValue: function (value) {\n this._startValue = value;\n return this;\n },\n endValue: function (value) {\n this._endValue = value;\n return this;\n },\n shouldHide: function () {\n return this._shouldHide;\n },\n prepare: function (start, end) {\n var that = this, startValue, endValue, out = this._direction === 'out', startDataValue = that.element.data(property), startDataValueIsSet = !(isNaN(startDataValue) || startDataValue == defaultStart);\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 if (typeof this._endValue !== 'undefined') {\n endValue = this._endValue;\n } else {\n endValue = out ? defaultEnd : defaultStart;\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 that._shouldHide = end[property] === defaultEnd;\n }\n });\n }\n createToggleEffect('fade', 'opacity', 1, 0);\n createToggleEffect('zoom', 'scale', 1, 0.01);\n createEffect('slideMargin', {\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, origin = element.data(ORIGIN), offset = options.offset, margin, reverse = that._reverse;\n if (!reverse && origin === null) {\n element.data(ORIGIN, parseFloat(element.css('margin-' + options.axis)));\n }\n margin = element.data(ORIGIN) || 0;\n end['margin-' + options.axis] = !reverse ? margin + offset : margin;\n }\n });\n createEffect('slideTo', {\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, offset = options.offset.split(','), reverse = that._reverse;\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 createEffect('expand', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n restore: [OVERFLOW],\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, reverse = that._reverse, property = that._direction === 'vertical' ? HEIGHT : WIDTH, setLength = element[0].style[property], oldLength = element.data(property), length = parseFloat(oldLength || setLength), realLength = round(element.css(property, AUTO)[property]());\n start.overflow = HIDDEN;\n length = options && options.reset ? realLength || length : length || realLength;\n end[property] = (reverse ? 0 : length) + PX;\n start[property] = (reverse ? length : 0) + PX;\n if (oldLength === undefined) {\n element.data(property, setLength);\n }\n },\n shouldHide: function () {\n return this._reverse;\n },\n teardown: function () {\n var that = this, element = that.element, property = that._direction === 'vertical' ? HEIGHT : WIDTH, length = element.data(property);\n if (length == AUTO || length === BLANK) {\n setTimeout(function () {\n element.css(property, AUTO).css(property);\n }, 0);\n }\n }\n });\n var TRANSFER_START_STATE = {\n position: 'absolute',\n marginLeft: 0,\n marginTop: 0,\n scale: 1\n };\n createEffect('transfer', {\n init: function (element, target) {\n this.element = element;\n this.options = { target: target };\n this.restore = [];\n },\n setup: function () {\n this.element.appendTo(document.body);\n },\n prepare: function (start, end) {\n var that = this, element = that.element, outerBox = fx.box(element), innerBox = fx.box(that.options.target), currentScale = animationProperty(element, 'scale'), scale = fx.fillScale(innerBox, outerBox), transformOrigin = fx.transformOrigin(innerBox, outerBox);\n extend(start, TRANSFER_START_STATE);\n end.scale = 1;\n element.css(TRANSFORM, 'scale(1)').css(TRANSFORM);\n element.css(TRANSFORM, 'scale(' + currentScale + ')');\n start.top = outerBox.top;\n start.left = outerBox.left;\n start.transformOrigin = transformOrigin.x + PX + ' ' + transformOrigin.y + PX;\n if (that._reverse) {\n start.scale = scale;\n } else {\n end.scale = scale;\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 var ROTATIONS = {\n top: {\n start: 'rotatex(0deg)',\n end: 'rotatex(180deg)'\n },\n bottom: {\n start: 'rotatex(-180deg)',\n end: 'rotatex(0deg)'\n },\n left: {\n start: 'rotatey(0deg)',\n end: 'rotatey(-180deg)'\n },\n right: {\n start: 'rotatey(180deg)',\n end: 'rotatey(0deg)'\n }\n };\n function clipInHalf(container, direction) {\n var vertical = kendo.directions[direction].vertical, size = container[vertical ? HEIGHT : WIDTH]() / 2 + 'px';\n return CLIPS[direction].replace('$size', size);\n }\n createEffect('turningPage', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n prepare: function (start, end) {\n var that = this, reverse = that._reverse, direction = reverse ? directions[that._direction].reverse : that._direction, rotation = ROTATIONS[direction];\n start.zIndex = 1;\n if (that._clipInHalf) {\n start.clip = clipInHalf(that._container, kendo.directions[direction].reverse);\n }\n start[BACKFACE] = HIDDEN;\n end[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.start : rotation.end);\n start[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.end : rotation.start);\n },\n setup: function () {\n this._container.append(this.element);\n },\n face: function (value) {\n this._face = value;\n return this;\n },\n shouldHide: function () {\n var that = this, reverse = that._reverse, face = that._face;\n return reverse && !face || !reverse && face;\n },\n clipInHalf: function (value) {\n this._clipInHalf = value;\n return this;\n },\n temporary: function () {\n this.element.addClass('temp-page');\n return this;\n }\n });\n createEffect('staticPage', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n restore: ['clip'],\n prepare: function (start, end) {\n var that = this, direction = that._reverse ? directions[that._direction].reverse : that._direction;\n start.clip = clipInHalf(that._container, direction);\n start.opacity = 0.999;\n end.opacity = 1;\n },\n shouldHide: function () {\n var that = this, reverse = that._reverse, face = that._face;\n return reverse && !face || !reverse && face;\n },\n face: function (value) {\n this._face = value;\n return this;\n }\n });\n createEffect('pageturn', {\n directions: [\n 'horizontal',\n '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 children: function () {\n var that = this, options = that.options, direction = that._direction === 'horizontal' ? 'left' : 'top', reverseDirection = kendo.directions[direction].reverse, reverse = that._reverse, temp, faceClone = options.face.clone(true).removeAttr('id'), backClone = options.back.clone(true).removeAttr('id'), element = that.element;\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\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 prepare: function (start, end) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = 'preserve-3d';\n start.opacity = 0.999;\n end.opacity = 1;\n },\n teardown: function () {\n this.element.find('.temp-page').remove();\n }\n });\n createEffect('flip', {\n directions: [\n 'horizontal',\n '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 children: function () {\n var that = this, options = that.options, direction = that._direction === 'horizontal' ? 'left' : 'top', reverseDirection = kendo.directions[direction].reverse, reverse = that._reverse, temp, element = that.element;\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\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 prepare: function (start) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = 'preserve-3d';\n }\n });\n var RESTORE_OVERFLOW = !support.mobileOS.android;\n var IGNORE_TRANSITION_EVENT_SELECTOR = '.km-touch-scrollbar, .km-actionsheet-wrapper';\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 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 beforeTransition: function (callback) {\n this._before = callback;\n return this;\n },\n afterTransition: function (callback) {\n this._after = callback;\n return this;\n },\n _both: function () {\n return $().add(this._element).add(this._previous);\n },\n _containerClass: function () {\n var direction = this._direction, containerClass = 'k-fx k-fx-start k-fx-' + this._transitionClass;\n if (direction) {\n containerClass += ' k-fx-' + direction;\n }\n if (this._reverse) {\n containerClass += ' k-fx-reverse';\n }\n return containerClass;\n },\n complete: function (e) {\n if (!this.deferred || e && $(e.target).is(IGNORE_TRANSITION_EVENT_SELECTOR)) {\n return;\n }\n var container = this.container;\n container.removeClass('k-fx-end').removeClass(this._containerClass()).off(transitions.event, this.completeProxy);\n this._previous.hide().removeClass('k-fx-current');\n this.element.removeClass('k-fx-next');\n if (RESTORE_OVERFLOW) {\n container.css(OVERFLOW, '');\n }\n if (!this.isAbsolute) {\n this._both().css(POSITION, '');\n }\n this.deferred.resolve();\n delete this.deferred;\n },\n run: function () {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n var that = this, element = that.element, previous = that._previous, container = element.parents().filter(previous.parents()).first(), both = that._both(), deferred = $.Deferred(), originalPosition = element.css(POSITION), originalOverflow;\n if (!container.length) {\n container = element.parent();\n }\n this.container = container;\n this.deferred = deferred;\n this.isAbsolute = originalPosition == 'absolute';\n if (!this.isAbsolute) {\n both.css(POSITION, 'absolute');\n }\n if (RESTORE_OVERFLOW) {\n originalOverflow = container.css(OVERFLOW);\n container.css(OVERFLOW, 'hidden');\n }\n if (!transitions) {\n this.complete();\n } else {\n element.addClass('k-fx-hidden');\n container.addClass(this._containerClass());\n this.completeProxy = $.proxy(this, 'complete');\n container.on(transitions.event, this.completeProxy);\n kendo.animationFrame(function () {\n element.removeClass('k-fx-hidden').addClass('k-fx-next');\n previous.css('display', '').addClass('k-fx-current');\n that._before(previous, element);\n kendo.animationFrame(function () {\n container.removeClass('k-fx-start').addClass('k-fx-end');\n that._after(previous, element);\n });\n });\n }\n return deferred.promise();\n },\n stop: function () {\n this.complete();\n }\n });\n var Animation = kendo.Class.extend({\n init: function () {\n var that = this;\n that._tickProxy = proxy(that._tick, that);\n that._started = false;\n },\n tick: $.noop,\n done: $.noop,\n onEnd: $.noop,\n onCancel: $.noop,\n start: function () {\n if (!this.enabled()) {\n return;\n }\n if (!this.done()) {\n this._started = true;\n kendo.animationFrame(this._tickProxy);\n } else {\n this.onEnd();\n }\n },\n enabled: function () {\n return true;\n },\n cancel: function () {\n this._started = false;\n this.onCancel();\n },\n _tick: function () {\n var that = this;\n if (!that._started) {\n return;\n }\n that.tick();\n if (!that.done()) {\n kendo.animationFrame(that._tickProxy);\n } else {\n that._started = false;\n that.onEnd();\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 done: function () {\n return this.timePassed() >= this.duration;\n },\n timePassed: function () {\n return Math.min(this.duration, new Date() - this.startDate);\n },\n moveTo: function (options) {\n var that = this, movable = that.movable;\n that.initial = movable[that.axis];\n that.delta = options.location - that.initial;\n that.duration = typeof options.duration == 'number' ? options.duration : 300;\n that.tick = that._easeProxy(options.ease);\n that.startDate = new Date();\n that.start();\n },\n _easeProxy: function (ease) {\n var that = this;\n return function () {\n that.movable.moveAxis(that.axis, ease(that.timePassed(), that.initial, that.delta, that.duration));\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 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 fx.Animation = Animation;\n fx.Transition = Transition;\n fx.createEffect = createEffect;\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 fx.transformOrigin = function (inner, outer) {\n var x = (inner.left - outer.left) * outer.width / (outer.width - inner.width), y = (inner.top - outer.top) * outer.height / (outer.height - inner.height);\n return {\n x: isNaN(x) ? 0 : x,\n y: isNaN(y) ? 0 : y\n };\n };\n fx.fillScale = function (inner, outer) {\n return Math.min(inner.width / outer.width, inner.height / outer.height);\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 return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.view', [\n 'kendo.core',\n 'kendo.binder',\n 'kendo.fx'\n ], f);\n}(function () {\n var __meta__ = {\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: [\n 'core',\n 'binder',\n 'fx'\n ],\n hidden: false\n };\n (function ($, undefined) {\n var kendo = window.kendo, Observable = kendo.Observable, SCRIPT = 'SCRIPT', INIT = 'init', SHOW = 'show', HIDE = 'hide', TRANSITION_START = 'transitionStart', TRANSITION_END = 'transitionEnd', ATTACH = 'attach', DETACH = 'detach', sizzleErrorRegExp = /unrecognized expression/;\n var View = Observable.extend({\n init: function (content, options) {\n var that = this;\n options = options || {};\n Observable.fn.init.call(that);\n that.content = content;\n that.id = kendo.guid();\n that.tagName = options.tagName || 'div';\n that.model = options.model;\n that._wrap = options.wrap !== false;\n this._evalTemplate = options.evalTemplate || false;\n that._fragments = {};\n that.bind([\n INIT,\n SHOW,\n HIDE,\n TRANSITION_START,\n TRANSITION_END\n ], options);\n },\n render: function (container) {\n var that = this, notInitialized = !that.element;\n if (notInitialized) {\n that.element = that._createElement();\n }\n if (container) {\n $(container).append(that.element);\n }\n if (notInitialized) {\n kendo.bind(that.element, that.model);\n that.trigger(INIT);\n }\n if (container) {\n that._eachFragment(ATTACH);\n that.trigger(SHOW);\n }\n return that.element;\n },\n clone: function () {\n return new ViewClone(this);\n },\n triggerBeforeShow: function () {\n return true;\n },\n triggerBeforeHide: function () {\n return true;\n },\n showStart: function () {\n this.element.css('display', '');\n },\n showEnd: function () {\n },\n hideEnd: function () {\n this.hide();\n },\n beforeTransition: function (type) {\n this.trigger(TRANSITION_START, { type: type });\n },\n afterTransition: function (type) {\n this.trigger(TRANSITION_END, { type: type });\n },\n hide: function () {\n this._eachFragment(DETACH);\n this.element.detach();\n this.trigger(HIDE);\n },\n destroy: function () {\n var element = this.element;\n if (element) {\n kendo.unbind(element);\n kendo.destroy(element);\n element.remove();\n }\n },\n fragments: function (fragments) {\n $.extend(this._fragments, fragments);\n },\n _eachFragment: function (methodName) {\n for (var placeholder in this._fragments) {\n this._fragments[placeholder][methodName](this, placeholder);\n }\n },\n _createElement: function () {\n var that = this, wrapper = '<' + that.tagName + ' />', element, content;\n try {\n content = $(document.getElementById(that.content) || that.content);\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 if (typeof content === 'string') {\n content = content.replace(/^\\s+|\\s+$/g, '');\n if (that._evalTemplate) {\n content = kendo.template(content)(that.model || {});\n }\n element = $(wrapper).append(content);\n if (!that._wrap) {\n element = element.contents();\n }\n } else {\n element = content;\n if (that._evalTemplate) {\n var result = $(kendo.template($('<div />').append(element.clone(true)).html())(that.model || {}));\n if ($.contains(document, element[0])) {\n element.replaceWith(result);\n }\n element = result;\n }\n if (that._wrap) {\n element = element.wrapAll(wrapper).parent();\n }\n }\n return element;\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 view.element.parent().append(this.element);\n },\n hideEnd: function () {\n this.element.remove();\n },\n beforeTransition: $.noop,\n afterTransition: $.noop\n });\n var Layout = View.extend({\n init: function (content, options) {\n View.fn.init.call(this, content, options);\n this.containers = {};\n },\n container: function (selector) {\n var container = this.containers[selector];\n if (!container) {\n container = this._createContainer(selector);\n this.containers[selector] = container;\n }\n return container;\n },\n showIn: function (selector, view, transition) {\n this.container(selector).show(view, transition);\n },\n _createContainer: function (selector) {\n var root = this.render(), element = root.find(selector), container;\n if (!element.length && root.is(selector)) {\n if (root.is(selector)) {\n element = root;\n } else {\n throw new Error('can\\'t find a container with the specified ' + selector + ' selector');\n }\n }\n container = new ViewContainer(element);\n container.bind('accepted', function (e) {\n e.view.render(element);\n });\n return container;\n }\n });\n var Fragment = View.extend({\n attach: function (view, placeholder) {\n view.element.find(placeholder).replaceWith(this.render());\n },\n detach: function () {\n }\n });\n var transitionRegExp = /^(\\w+)(:(\\w+))?( (\\w+))?$/;\n function parseTransition(transition) {\n if (!transition) {\n return {};\n }\n var matches = transition.match(transitionRegExp) || [];\n return {\n type: matches[1],\n direction: matches[3],\n reverse: matches[5] === 'reverse'\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 after: function () {\n this.running = false;\n this.trigger('complete', { view: this.view });\n this.trigger('after');\n },\n end: function () {\n this.view.showEnd();\n this.previous.hideEnd();\n this.after();\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 locationID = locationID || view.id;\n var that = this, current = view === that.view ? view.clone() : that.view, history = that.history, previousEntry = history[history.length - 2] || {}, back = previousEntry.id === locationID, theTransition = transition || (back ? history[history.length - 1].transition : view.transition), transitionData = parseTransition(theTransition);\n if (that.running) {\n that.effect.stop();\n }\n if (theTransition === 'none') {\n theTransition = null;\n }\n that.trigger('accepted', { view: view });\n that.view = view;\n that.previous = current;\n that.running = true;\n if (!back) {\n history.push({\n id: locationID,\n transition: theTransition\n });\n } else {\n history.pop();\n }\n if (!current) {\n view.showStart();\n view.showEnd();\n that.after();\n return true;\n }\n if (!theTransition || !kendo.effects.enabled) {\n view.showStart();\n that.end();\n } else {\n view.element.addClass('k-fx-hidden');\n view.showStart();\n if (back && !transition) {\n transitionData.reverse = !transitionData.reverse;\n }\n that.effect = kendo.fx(view.element).replace(current.element, transitionData.type).beforeTransition(function () {\n view.beforeTransition('show');\n current.beforeTransition('hide');\n }).afterTransition(function () {\n view.afterTransition('show');\n current.afterTransition('hide');\n }).direction(transitionData.direction).setReverse(transitionData.reverse);\n that.effect.run().then(function () {\n that.end();\n });\n }\n return true;\n }\n });\n kendo.ViewContainer = ViewContainer;\n kendo.Fragment = Fragment;\n kendo.Layout = Layout;\n kendo.View = View;\n kendo.ViewClone = ViewClone;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dom', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'dom',\n name: 'Virtual DOM',\n category: 'framework',\n depends: ['core'],\n advanced: true\n };\n (function (kendo) {\n function Node() {\n this.node = null;\n }\n Node.prototype = {\n remove: function () {\n if (this.node.parentNode) {\n this.node.parentNode.removeChild(this.node);\n }\n this.attr = {};\n },\n attr: {},\n text: function () {\n return '';\n }\n };\n function NullNode() {\n }\n NullNode.prototype = {\n nodeName: '#null',\n attr: { style: {} },\n children: [],\n remove: function () {\n }\n };\n var NULL_NODE = new NullNode();\n function Element(nodeName, attr, children) {\n this.nodeName = nodeName;\n this.attr = attr || {};\n this.children = children || [];\n }\n Element.prototype = new Node();\n Element.prototype.appendTo = function (parent) {\n var node = document.createElement(this.nodeName);\n var children = this.children;\n for (var index = 0; index < children.length; index++) {\n children[index].render(node, NULL_NODE);\n }\n parent.appendChild(node);\n return node;\n };\n Element.prototype.render = function (parent, cached) {\n var node;\n if (cached.nodeName !== this.nodeName) {\n cached.remove();\n node = this.appendTo(parent);\n } else {\n node = cached.node;\n var index;\n var children = this.children;\n var length = children.length;\n var cachedChildren = cached.children;\n var cachedLength = cachedChildren.length;\n if (Math.abs(cachedLength - length) > 2) {\n this.render({\n appendChild: function (node) {\n parent.replaceChild(node, cached.node);\n }\n }, NULL_NODE);\n return;\n }\n for (index = 0; index < length; index++) {\n children[index].render(node, cachedChildren[index] || NULL_NODE);\n }\n for (index = length; index < cachedLength; index++) {\n cachedChildren[index].remove();\n }\n }\n this.node = node;\n this.syncAttributes(cached.attr);\n this.removeAttributes(cached.attr);\n };\n Element.prototype.syncAttributes = function (cachedAttr) {\n var attr = this.attr;\n for (var name in attr) {\n var value = attr[name];\n var cachedValue = cachedAttr[name];\n if (name === 'style') {\n this.setStyle(value, cachedValue);\n } else if (value !== cachedValue) {\n this.setAttribute(name, value, cachedValue);\n }\n }\n };\n Element.prototype.setStyle = function (style, cachedValue) {\n var node = this.node;\n var key;\n if (cachedValue) {\n for (key in style) {\n if (style[key] !== cachedValue[key]) {\n node.style[key] = style[key];\n }\n }\n } else {\n for (key in style) {\n node.style[key] = style[key];\n }\n }\n };\n Element.prototype.removeStyle = function (cachedStyle) {\n var style = this.attr.style || {};\n var node = this.node;\n for (var key in cachedStyle) {\n if (style[key] === undefined) {\n node.style[key] = '';\n }\n }\n };\n Element.prototype.removeAttributes = function (cachedAttr) {\n var attr = this.attr;\n for (var name in cachedAttr) {\n if (name === 'style') {\n this.removeStyle(cachedAttr.style);\n } else if (attr[name] === undefined) {\n this.removeAttribute(name);\n }\n }\n };\n Element.prototype.removeAttribute = function (name) {\n var node = this.node;\n if (name === 'style') {\n node.style.cssText = '';\n } else if (name === 'className') {\n node.className = '';\n } else {\n node.removeAttribute(name);\n }\n };\n Element.prototype.setAttribute = function (name, value) {\n var node = this.node;\n if (node[name] !== undefined) {\n node[name] = value;\n } else {\n node.setAttribute(name, value);\n }\n };\n Element.prototype.text = function () {\n var str = '';\n for (var i = 0; i < this.children.length; ++i) {\n str += this.children[i].text();\n }\n return str;\n };\n function TextNode(nodeValue) {\n this.nodeValue = String(nodeValue);\n }\n TextNode.prototype = new Node();\n TextNode.prototype.nodeName = '#text';\n TextNode.prototype.render = function (parent, cached) {\n var node;\n if (cached.nodeName !== this.nodeName) {\n cached.remove();\n node = document.createTextNode(this.nodeValue);\n parent.appendChild(node);\n } else {\n node = cached.node;\n if (this.nodeValue !== cached.nodeValue) {\n if (node.parentNode) {\n node.nodeValue = this.nodeValue;\n }\n }\n }\n this.node = node;\n };\n TextNode.prototype.text = function () {\n return this.nodeValue;\n };\n function HtmlNode(html) {\n this.html = html;\n }\n HtmlNode.prototype = {\n nodeName: '#html',\n attr: {},\n remove: function () {\n for (var index = 0; index < this.nodes.length; index++) {\n var el = this.nodes[index];\n if (el.parentNode) {\n el.parentNode.removeChild(el);\n }\n }\n },\n render: function (parent, cached) {\n if (cached.nodeName !== this.nodeName || cached.html !== this.html) {\n cached.remove();\n var lastChild = parent.lastChild;\n insertHtml(parent, this.html);\n this.nodes = [];\n for (var child = lastChild ? lastChild.nextSibling : parent.firstChild; child; child = child.nextSibling) {\n this.nodes.push(child);\n }\n } else {\n this.nodes = cached.nodes.slice(0);\n }\n }\n };\n var HTML_CONTAINER = document.createElement('div');\n function insertHtml(node, html) {\n HTML_CONTAINER.innerHTML = html;\n while (HTML_CONTAINER.firstChild) {\n node.appendChild(HTML_CONTAINER.firstChild);\n }\n }\n function html(value) {\n return new HtmlNode(value);\n }\n function element(nodeName, attrs, children) {\n return new Element(nodeName, attrs, children);\n }\n function text(value) {\n return new TextNode(value);\n }\n function Tree(root) {\n this.root = root;\n this.children = [];\n }\n Tree.prototype = {\n html: html,\n element: element,\n text: text,\n render: function (children) {\n var cachedChildren = this.children;\n var index;\n var length;\n for (index = 0, length = children.length; index < length; index++) {\n var cached = cachedChildren[index];\n if (!cached) {\n cached = NULL_NODE;\n } else if (!cached.node || !cached.node.parentNode) {\n cached.remove();\n cached = NULL_NODE;\n }\n children[index].render(this.root, cached);\n }\n for (index = length; index < cachedChildren.length; index++) {\n cachedChildren[index].remove();\n }\n this.children = children;\n }\n };\n kendo.dom = {\n html: html,\n text: text,\n element: element,\n Tree: Tree,\n Node: Node\n };\n }(window.kendo));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.ooxml', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'ooxml',\n name: 'XLSX generation',\n category: 'framework',\n advanced: true,\n depends: ['core']\n };\n (function ($, kendo) {\n var RELS = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\r\\n' + '<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">' + '<Relationship Id=\"rId3\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\" Target=\"docProps/app.xml\"/>' + '<Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\" Target=\"docProps/core.xml\"/>' + '<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"xl/workbook.xml\"/>' + '</Relationships>';\n var CORE = kendo.template('<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\r\\n' + '<cp:coreProperties xmlns:cp=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\" ' + 'xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:dcterms=\"http://purl.org/dc/terms/\" ' + 'xmlns:dcmitype=\"http://purl.org/dc/dcmitype/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">' + '<dc:creator>${creator}</dc:creator>' + '<cp:lastModifiedBy>${lastModifiedBy}</cp:lastModifiedBy>' + '<dcterms:created xsi:type=\"dcterms:W3CDTF\">${created}</dcterms:created>' + '<dcterms:modified xsi:type=\"dcterms:W3CDTF\">${modified}</dcterms:modified>' + '</cp:coreProperties>');\n var APP = kendo.template('<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\r\\n' + '<Properties xmlns=\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\" xmlns:vt=\"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes\">' + '<Application>Microsoft Excel</Application>' + '<DocSecurity>0</DocSecurity>' + '<ScaleCrop>false</ScaleCrop>' + '<HeadingPairs>' + '<vt:vector size=\"2\" baseType=\"variant\">' + '<vt:variant>' + '<vt:lpstr>Worksheets</vt:lpstr>' + '</vt:variant>' + '<vt:variant>' + '<vt:i4>${sheets.length}</vt:i4>' + '</vt:variant>' + '</vt:vector>' + '</HeadingPairs>' + '<TitlesOfParts>' + '<vt:vector size=\"${sheets.length}\" baseType=\"lpstr\">' + '# for (var idx = 0; idx < sheets.length; idx++) { #' + '# if (sheets[idx].options.title) { #' + '<vt:lpstr>${sheets[idx].options.title}</vt:lpstr>' + '# } else { #' + '<vt:lpstr>Sheet${idx+1}</vt:lpstr>' + '# } #' + '# } #' + '</vt:vector>' + '</TitlesOfParts>' + '<LinksUpToDate>false</LinksUpToDate>' + '<SharedDoc>false</SharedDoc>' + '<HyperlinksChanged>false</HyperlinksChanged>' + '<AppVersion>14.0300</AppVersion>' + '</Properties>');\n var CONTENT_TYPES = kendo.template('<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\r\\n' + '<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">' + '<Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\" />' + '<Default Extension=\"xml\" ContentType=\"application/xml\" />' + '<Override PartName=\"/xl/workbook.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\" />' + '<Override PartName=\"/xl/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\"/>' + '<Override PartName=\"/xl/sharedStrings.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\"/>' + '# for (var idx = 1; idx <= count; idx++) { #' + '<Override PartName=\"/xl/worksheets/sheet${idx}.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\" />' + '# } #' + '<Override PartName=\"/docProps/core.xml\" ContentType=\"application/vnd.openxmlformats-package.core-properties+xml\" />' + '<Override PartName=\"/docProps/app.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.extended-properties+xml\" />' + '</Types>');\n var WORKBOOK = kendo.template('<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\r\\n' + '<workbook xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">' + '<fileVersion appName=\"xl\" lastEdited=\"5\" lowestEdited=\"5\" rupBuild=\"9303\" />' + '<workbookPr defaultThemeVersion=\"124226\" />' + '<bookViews>' + '<workbookView xWindow=\"240\" yWindow=\"45\" windowWidth=\"18195\" windowHeight=\"7995\" />' + '</bookViews>' + '<sheets>' + '# for (var idx = 0; idx < sheets.length; idx++) { #' + '# var options = sheets[idx].options; #' + '# var name = options.name || options.title #' + '# if (name) { #' + '<sheet name=\"${name}\" sheetId=\"${idx+1}\" r:id=\"rId${idx+1}\" />' + '# } else { #' + '<sheet name=\"Sheet${idx+1}\" sheetId=\"${idx+1}\" r:id=\"rId${idx+1}\" />' + '# } #' + '# } #' + '</sheets>' + '# if (filterNames.length || userNames.length) { #' + '<definedNames>' + ' # for (var di = 0; di < filterNames.length; di++) { #' + '<definedName name=\"_xlnm._FilterDatabase\" hidden=\"1\" localSheetId=\"${filterNames[di].localSheetId}\">' + '${filterNames[di].name}!$${filterNames[di].from}:$${filterNames[di].to}' + '</definedName>' + ' # } #' + ' # for (var i = 0; i < userNames.length; ++i) { #' + '<definedName name=\"${userNames[i].name}\" hidden=\"${userNames[i].hidden ? 1 : 0}\"' + ' # if (userNames[i].localSheetId != null) { # localSheetId=\"${userNames[i].localSheetId}\" # } #' + '>${userNames[i].value}</definedName>' + ' # } #' + '</definedNames>' + '# } #' + '<calcPr fullCalcOnLoad=\"1\" calcId=\"145621\" />' + '</workbook>');\n var WORKSHEET = kendo.template('<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\r\\n' + '<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:x14ac=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\" mc:Ignorable=\"x14ac\">' + '<dimension ref=\"A1\" />' + '<sheetViews>' + '<sheetView #if(index==0) {# tabSelected=\"1\" #}# workbookViewId=\"0\" #if (showGridLines === false) {# showGridLines=\"0\" #}#>' + '# if (frozenRows || frozenColumns) { #' + '<pane state=\"frozen\"' + '# if (frozenColumns) { #' + ' xSplit=\"${frozenColumns}\"' + '# } #' + '# if (frozenRows) { #' + ' ySplit=\"${frozenRows}\"' + '# } #' + ' topLeftCell=\"${String.fromCharCode(65 + (frozenColumns || 0))}${(frozenRows || 0)+1}\"' + '/>' + '# } #' + '</sheetView>' + '</sheetViews>' + '<sheetFormatPr x14ac:dyDescent=\"0.25\" defaultRowHeight=\"#= defaults.rowHeight ? defaults.rowHeight * 0.75 : 15 #\" ' + '# if (defaults.columnWidth) { # defaultColWidth=\"#= kendo.ooxml.toWidth(defaults.columnWidth) #\" # } #' + ' />' + '# if (defaultCellStyleId != null || (columns && columns.length > 0)) { #' + '<cols>' + '# if (!columns || !columns.length) { #' + '<col min=\"1\" max=\"16384\" style=\"${defaultCellStyleId}\" ' + '# if (defaults.columnWidth) { # width=\"#= kendo.ooxml.toWidth(defaults.columnWidth) #\" # } #' + ' />' + '# } #' + '# for (var ci = 0; ci < columns.length; ci++) { #' + '# var column = columns[ci]; #' + '# var columnIndex = typeof column.index === \"number\" ? column.index + 1 : (ci + 1); #' + '# if (column.width === 0) { #' + '<col #if(defaultCellStyleId!=null){# style=\"${defaultCellStyleId}\" #}#' + 'min=\"${columnIndex}\" max=\"${columnIndex}\" hidden=\"1\" customWidth=\"1\" />' + '# } else if (column.width) { #' + '<col #if(defaultCellStyleId!=null){# style=\"${defaultCellStyleId}\" #}#' + 'min=\"${columnIndex}\" max=\"${columnIndex}\" customWidth=\"1\"' + '# if (column.autoWidth) { #' + ' width=\"${((column.width*7+5)/7*256)/256}\" bestFit=\"1\"' + '# } else { #' + ' width=\"#= kendo.ooxml.toWidth(column.width) #\" ' + '# } #' + '/>' + '# } #' + '# } #' + '</cols>' + '# } #' + '<sheetData>' + '# for (var ri = 0; ri < data.length; ri++) { #' + '# var row = data[ri]; #' + '# var rowIndex = typeof row.index === \"number\" ? row.index + 1 : (ri + 1); #' + '<row r=\"${rowIndex}\" x14ac:dyDescent=\"0.25\" ' + '# if (row.height === 0) { # hidden=\"1\" # } ' + ' else if (row.height) { # ht=\"#= kendo.ooxml.toHeight(row.height) #\" customHeight=\"1\" # } #' + ' >' + '# for (var ci = 0; ci < row.data.length; ci++) { #' + '# var cell = row.data[ci];#' + '<c r=\"#=cell.ref#\"# if (cell.style) { # s=\"#=cell.style#\" # } ## if (cell.type) { # t=\"#=cell.type#\"# } #>' + '# if (cell.formula != null) { #' + '<f>${cell.formula}</f>' + '# } #' + '# if (cell.value != null) { #' + '<v>${cell.value}</v>' + '# } #' + '</c>' + '# } #' + '</row>' + '# } #' + '</sheetData>' + '# if (autoFilter) { #' + '<autoFilter ref=\"${autoFilter.from}:${autoFilter.to}\"/>' + '# } else if (filter) { #' + '#= kendo.ooxml.spreadsheetFilters(filter) #' + '# } #' + '# if (mergeCells.length) { #' + '<mergeCells count=\"${mergeCells.length}\">' + '# for (var ci = 0; ci < mergeCells.length; ci++) { #' + '<mergeCell ref=\"${mergeCells[ci]}\"/>' + '# } #' + '</mergeCells>' + '# } #' + '# if (validations.length) { #' + '<dataValidations>' + '# for (var vi = 0; vi < validations.length; vi++) { #' + '# var val = validations[vi]; #' + '<dataValidation sqref=\"#= val.sqref.join(\" \") #\"' + ' showErrorMessage=\"#= val.showErrorMessage #\"' + ' type=\"#= val.type #\"' + '# if (val.type != \"list\") {# operator=\"#= val.operator #\" # } #' + ' allowBlank=\"#= val.allowBlank #\"' + ' showDropDown=\"#= val.showDropDown #\"' + '# if (val.error) {# error=\"#= val.error #\" # } #' + '# if (val.errorTitle) {# errorTitle=\"#= val.errorTitle #\" # } #' + '>' + '# if (val.formula1) { #' + '<formula1>#= val.formula1 #</formula1>' + '# } #' + '# if (val.formula2) { #' + '<formula2>#= val.formula2 #</formula2>' + '# } #' + '</dataValidation>' + '# } #' + '</dataValidations>' + '# } #' + '# if (hyperlinks.length) { #' + '<hyperlinks>' + '# for (var hi = 0; hi < hyperlinks.length; hi++) { #' + '<hyperlink ref=\"${hyperlinks[hi].ref}\" r:id=\"rId${hi}\"/>' + '# } #' + '</hyperlinks>' + '# } #' + '<pageMargins left=\"0.7\" right=\"0.7\" top=\"0.75\" bottom=\"0.75\" header=\"0.3\" footer=\"0.3\" />' + '</worksheet>');\n var WORKBOOK_RELS = kendo.template('<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\r\\n' + '<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">' + '# for (var idx = 1; idx <= count; idx++) { #' + '<Relationship Id=\"rId${idx}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\" Target=\"worksheets/sheet${idx}.xml\" />' + '# } #' + '<Relationship Id=\"rId${count+1}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\" />' + '<Relationship Id=\"rId${count+2}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\" Target=\"sharedStrings.xml\" />' + '</Relationships>');\n var WORKSHEET_RELS = kendo.template('<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\r\\n' + '<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">' + '# for (var i = 0; i < hyperlinks.length; i++) { #' + '<Relationship Id=\"rId${i}\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\" Target=\"${hyperlinks[i].target}\" TargetMode=\"External\" />' + '# } #' + '</Relationships>');\n var SHARED_STRINGS = kendo.template('<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\r\\n' + '<sst xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" count=\"${count}\" uniqueCount=\"${uniqueCount}\">' + '# for (var index in indexes) { #' + '<si><t>${index.substring(1)}</t></si>' + '# } #' + '</sst>');\n var STYLES = kendo.template('<?xml version=\"1.0\" encoding=\"UTF-8\"?>' + '<styleSheet' + ' xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"' + ' xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"' + ' mc:Ignorable=\"x14ac\"' + ' xmlns:x14ac=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\">' + '<numFmts count=\"${formats.length}\">' + '# for (var fi = 0; fi < formats.length; fi++) { #' + '# var format = formats[fi]; #' + '<numFmt formatCode=\"${format.format}\" numFmtId=\"${165+fi}\" />' + '# } #' + '</numFmts>' + '<fonts count=\"${fonts.length+1}\" x14ac:knownFonts=\"1\">' + '<font>' + '<sz val=\"11\" />' + '<color theme=\"1\" />' + '<name val=\"Calibri\" />' + '<family val=\"2\" />' + '<scheme val=\"minor\" />' + '</font>' + '# for (var fi = 0; fi < fonts.length; fi++) { #' + '# var font = fonts[fi]; #' + '<font>' + '# if (font.fontSize) { #' + '<sz val=\"${font.fontSize}\" />' + '# } else { #' + '<sz val=\"11\" />' + '# } #' + '# if (font.bold) { #' + '<b/>' + '# } #' + '# if (font.italic) { #' + '<i/>' + '# } #' + '# if (font.underline) { #' + '<u/>' + '# } #' + '# if (font.color) { #' + '<color rgb=\"${font.color}\" />' + '# } else { #' + '<color theme=\"1\" />' + '# } #' + '# if (font.fontFamily) { #' + '<name val=\"${font.fontFamily}\" />' + '<family val=\"2\" />' + '# } else { #' + '<name val=\"Calibri\" />' + '<family val=\"2\" />' + '<scheme val=\"minor\" />' + '# } #' + '</font>' + '# } #' + '</fonts>' + '<fills count=\"${fills.length+2}\">' + '<fill><patternFill patternType=\"none\"/></fill>' + '<fill><patternFill patternType=\"gray125\"/></fill>' + '# for (var fi = 0; fi < fills.length; fi++) { #' + '# var fill = fills[fi]; #' + '# if (fill.background) { #' + '<fill>' + '<patternFill patternType=\"solid\">' + '<fgColor rgb=\"${fill.background}\"/>' + '</patternFill>' + '</fill>' + '# } #' + '# } #' + '</fills>' + '<borders count=\"${borders.length+1}\">' + '<border><left/><right/><top/><bottom/><diagonal/></border>' + '# for (var bi = 0; bi < borders.length; bi++) { #' + '#= kendo.ooxml.borderTemplate(borders[bi]) #' + '# } #' + '</borders>' + '<cellStyleXfs count=\"1\">' + '<xf borderId=\"0\" fillId=\"0\" fontId=\"0\" />' + '</cellStyleXfs>' + '<cellXfs count=\"${styles.length+1}\">' + '<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\"/>' + '# for (var si = 0; si < styles.length; si++) { #' + '# var style = styles[si]; #' + '<xf xfId=\"0\"' + '# if (style.fontId) { #' + ' fontId=\"${style.fontId}\" applyFont=\"1\"' + '# } #' + '# if (style.fillId) { #' + ' fillId=\"${style.fillId}\" applyFill=\"1\"' + '# } #' + '# if (style.numFmtId) { #' + ' numFmtId=\"${style.numFmtId}\" applyNumberFormat=\"1\"' + '# } #' + '# if (style.textAlign || style.verticalAlign || style.wrap) { #' + ' applyAlignment=\"1\"' + '# } #' + '# if (style.borderId) { #' + ' borderId=\"${style.borderId}\" applyBorder=\"1\"' + '# } #' + '>' + '# if (style.textAlign || style.verticalAlign || style.wrap) { #' + '<alignment' + '# if (style.textAlign) { #' + ' horizontal=\"${style.textAlign}\"' + '# } #' + '# if (style.verticalAlign) { #' + ' vertical=\"${style.verticalAlign}\"' + '# } #' + '# if (style.wrap) { #' + ' wrapText=\"1\"' + '# } #' + '/>' + '# } #' + '</xf>' + '# } #' + '</cellXfs>' + '<cellStyles count=\"1\">' + '<cellStyle name=\"Normal\" xfId=\"0\" builtinId=\"0\"/>' + '</cellStyles>' + '<dxfs count=\"0\" />' + '<tableStyles count=\"0\" defaultTableStyle=\"TableStyleMedium2\" defaultPivotStyle=\"PivotStyleMedium9\" />' + '</styleSheet>');\n function numChar(colIndex) {\n var letter = Math.floor(colIndex / 26) - 1;\n return (letter >= 0 ? numChar(letter) : '') + String.fromCharCode(65 + colIndex % 26);\n }\n function ref(rowIndex, colIndex) {\n return numChar(colIndex) + (rowIndex + 1);\n }\n function $ref(rowIndex, colIndex) {\n return numChar(colIndex) + '$' + (rowIndex + 1);\n }\n function filterRowIndex(options) {\n var frozenRows = options.frozenRows || (options.freezePane || {}).rowSplit || 1;\n return frozenRows - 1;\n }\n function toWidth(px) {\n return (px / 7 * 100 + 0.5) / 100;\n }\n function toHeight(px) {\n return px * 0.75;\n }\n function stripFunnyChars(value) {\n return (value + '').replace(/[\\x00-\\x08]/g, '').replace(/\\n/g, '\\r\\n');\n }\n var DATE_EPOCH = new Date(1900, 0, 0);\n var Worksheet = kendo.Class.extend({\n init: function (options, sharedStrings, styles, borders) {\n this.options = options;\n this._strings = sharedStrings;\n this._styles = styles;\n this._borders = borders;\n this._validations = {};\n },\n relsToXML: function () {\n var hyperlinks = this.options.hyperlinks || [];\n if (!hyperlinks.length) {\n return '';\n }\n return WORKSHEET_RELS({ hyperlinks: hyperlinks });\n },\n toXML: function (index) {\n var mergeCells = this.options.mergedCells || [];\n var rows = this.options.rows || [];\n var data = inflate(rows, mergeCells);\n this._readCells(data);\n var autoFilter = this.options.filter;\n var filter;\n if (autoFilter && typeof autoFilter.from === 'number' && typeof autoFilter.to === 'number') {\n autoFilter = {\n from: ref(filterRowIndex(this.options), autoFilter.from),\n to: ref(filterRowIndex(this.options), autoFilter.to)\n };\n } else if (autoFilter && autoFilter.ref && autoFilter.columns) {\n filter = autoFilter;\n autoFilter = null;\n }\n var validations = [];\n for (var i in this._validations) {\n if (Object.prototype.hasOwnProperty.call(this._validations, i)) {\n validations.push(this._validations[i]);\n }\n }\n var defaultCellStyleId = null;\n if (this.options.defaultCellStyle) {\n defaultCellStyleId = this._lookupStyle(this.options.defaultCellStyle);\n }\n var freezePane = this.options.freezePane || {};\n return WORKSHEET({\n frozenColumns: this.options.frozenColumns || freezePane.colSplit,\n frozenRows: this.options.frozenRows || freezePane.rowSplit,\n columns: this.options.columns,\n defaults: this.options.defaults || {},\n data: data,\n index: index,\n mergeCells: mergeCells,\n autoFilter: autoFilter,\n filter: filter,\n showGridLines: this.options.showGridLines,\n hyperlinks: this.options.hyperlinks || [],\n validations: validations,\n defaultCellStyleId: defaultCellStyleId\n });\n },\n _lookupString: function (value) {\n var key = '$' + value;\n var index = this._strings.indexes[key];\n if (index !== undefined) {\n value = index;\n } else {\n value = this._strings.indexes[key] = this._strings.uniqueCount;\n this._strings.uniqueCount++;\n }\n this._strings.count++;\n return value;\n },\n _lookupStyle: function (style) {\n var json = kendo.stringify(style);\n if (json == '{}') {\n return 0;\n }\n var index = $.inArray(json, this._styles);\n if (index < 0) {\n index = this._styles.push(json) - 1;\n }\n return index + 1;\n },\n _lookupBorder: function (border) {\n var json = kendo.stringify(border);\n if (json == '{}') {\n return;\n }\n var index = $.inArray(json, this._borders);\n if (index < 0) {\n index = this._borders.push(json) - 1;\n }\n return index + 1;\n },\n _readCells: function (rowData) {\n for (var i = 0; i < rowData.length; i++) {\n var row = rowData[i];\n var cells = row.cells;\n row.data = [];\n for (var j = 0; j < cells.length; j++) {\n var cellData = this._cell(cells[j], row.index, j);\n if (cellData) {\n row.data.push(cellData);\n }\n }\n }\n },\n _cell: function (data, rowIndex, cellIndex) {\n if (!data || data === EMPTY_CELL) {\n return null;\n }\n var value = data.value;\n var border = {};\n if (data.borderLeft) {\n border.left = data.borderLeft;\n }\n if (data.borderRight) {\n border.right = data.borderRight;\n }\n if (data.borderTop) {\n border.top = data.borderTop;\n }\n if (data.borderBottom) {\n border.bottom = data.borderBottom;\n }\n border = this._lookupBorder(border);\n var defStyle = this.options.defaultCellStyle || {};\n var style = { borderId: border };\n (function (add) {\n add('color');\n add('background');\n add('bold');\n add('italic');\n add('underline');\n if (!add('fontFamily')) {\n add('fontName', 'fontFamily');\n }\n add('fontSize');\n add('format');\n if (!add('textAlign')) {\n add('hAlign', 'textAlign');\n }\n if (!add('verticalAlign')) {\n add('vAlign', 'verticalAlign');\n }\n add('wrap');\n }(function (prop, target) {\n var val = data[prop];\n if (val === undefined) {\n val = defStyle[prop];\n }\n if (val !== undefined) {\n style[target || prop] = val;\n return true;\n }\n }));\n var columns = this.options.columns || [];\n var column = columns[cellIndex];\n var type = typeof value;\n if (column && column.autoWidth) {\n var displayValue = value;\n if (type === 'number') {\n displayValue = kendo.toString(value, data.format);\n }\n column.width = Math.max(column.width || 0, (displayValue + '').length);\n }\n if (type === 'string') {\n value = stripFunnyChars(value);\n value = this._lookupString(value);\n type = 's';\n } else if (type === 'number') {\n type = 'n';\n } else if (type === 'boolean') {\n type = 'b';\n value = +value;\n } else if (value && value.getTime) {\n type = null;\n var offset = (value.getTimezoneOffset() - DATE_EPOCH.getTimezoneOffset()) * kendo.date.MS_PER_MINUTE;\n value = (value - DATE_EPOCH - offset) / kendo.date.MS_PER_DAY + 1;\n if (!style.format) {\n style.format = 'mm-dd-yy';\n }\n } else {\n type = null;\n value = null;\n }\n style = this._lookupStyle(style);\n var cellName = ref(rowIndex, cellIndex);\n if (data.validation) {\n this._addValidation(data.validation, cellName);\n }\n return {\n value: value,\n formula: data.formula,\n type: type,\n style: style,\n ref: cellName\n };\n },\n _addValidation: function (v, ref) {\n var tmp = {\n showErrorMessage: v.type == 'reject' ? 1 : 0,\n formula1: v.from,\n formula2: v.to,\n type: MAP_EXCEL_TYPE[v.dataType] || v.dataType,\n operator: MAP_EXCEL_OPERATOR[v.comparerType] || v.comparerType,\n allowBlank: v.allowNulls ? 1 : 0,\n showDropDown: v.showButton ? 0 : 1,\n error: v.messageTemplate,\n errorTitle: v.titleTemplate\n };\n var json = JSON.stringify(tmp);\n if (!this._validations[json]) {\n this._validations[json] = tmp;\n tmp.sqref = [];\n }\n this._validations[json].sqref.push(ref);\n }\n });\n var MAP_EXCEL_OPERATOR = {\n greaterThanOrEqualTo: 'greaterThanOrEqual',\n lessThanOrEqualTo: 'lessThanOrEqual'\n };\n var MAP_EXCEL_TYPE = { number: 'decimal' };\n var defaultFormats = {\n 'General': 0,\n '0': 1,\n '0.00': 2,\n '#,##0': 3,\n '#,##0.00': 4,\n '0%': 9,\n '0.00%': 10,\n '0.00E+00': 11,\n '# ?/?': 12,\n '# ??/??': 13,\n 'mm-dd-yy': 14,\n 'd-mmm-yy': 15,\n 'd-mmm': 16,\n 'mmm-yy': 17,\n 'h:mm AM/PM': 18,\n 'h:mm:ss AM/PM': 19,\n 'h:mm': 20,\n 'h:mm:ss': 21,\n 'm/d/yy h:mm': 22,\n '#,##0 ;(#,##0)': 37,\n '#,##0 ;[Red](#,##0)': 38,\n '#,##0.00;(#,##0.00)': 39,\n '#,##0.00;[Red](#,##0.00)': 40,\n 'mm:ss': 45,\n '[h]:mm:ss': 46,\n 'mmss.0': 47,\n '##0.0E+0': 48,\n '@': 49,\n '[$-404]e/m/d': 27,\n 'm/d/yy': 30,\n 't0': 59,\n 't0.00': 60,\n 't#,##0': 61,\n 't#,##0.00': 62,\n 't0%': 67,\n 't0.00%': 68,\n 't# ?/?': 69,\n 't# ??/??': 70\n };\n function convertColor(color) {\n if (color.length < 6) {\n color = color.replace(/(\\w)/g, function ($0, $1) {\n return $1 + $1;\n });\n }\n color = color.substring(1).toUpperCase();\n if (color.length < 8) {\n color = 'FF' + color;\n }\n return color;\n }\n var Workbook = kendo.Class.extend({\n init: function (options) {\n this.options = options || {};\n this._strings = {\n indexes: {},\n count: 0,\n uniqueCount: 0\n };\n this._styles = [];\n this._borders = [];\n this._sheets = $.map(this.options.sheets || [], $.proxy(function (options) {\n options.defaults = this.options;\n return new Worksheet(options, this._strings, this._styles, this._borders);\n }, this));\n },\n toDataURL: function () {\n if (typeof JSZip === 'undefined') {\n throw new Error('JSZip not found. Check http://docs.telerik.com/kendo-ui/framework/excel/introduction#requirements for more details.');\n }\n var zip = new JSZip();\n var docProps = zip.folder('docProps');\n docProps.file('core.xml', CORE({\n creator: this.options.creator || 'Kendo UI',\n lastModifiedBy: this.options.creator || 'Kendo UI',\n created: this.options.date || new Date().toJSON(),\n modified: this.options.date || new Date().toJSON()\n }));\n var sheetCount = this._sheets.length;\n docProps.file('app.xml', APP({ sheets: this._sheets }));\n var rels = zip.folder('_rels');\n rels.file('.rels', RELS);\n var xl = zip.folder('xl');\n var xlRels = xl.folder('_rels');\n xlRels.file('workbook.xml.rels', WORKBOOK_RELS({ count: sheetCount }));\n var sheetIds = {};\n xl.file('workbook.xml', WORKBOOK({\n sheets: this._sheets,\n filterNames: $.map(this._sheets, function (sheet, index) {\n var options = sheet.options;\n var sheetName = options.name || options.title || 'Sheet' + (index + 1);\n sheetIds[sheetName.toLowerCase()] = index;\n var filter = options.filter;\n if (filter && typeof filter.from !== 'undefined' && typeof filter.to !== 'undefined') {\n return {\n localSheetId: index,\n name: sheetName,\n from: $ref(filterRowIndex(options), filter.from),\n to: $ref(filterRowIndex(options), filter.to)\n };\n }\n }),\n userNames: $.map(this.options.names || [], function (def) {\n return {\n name: def.localName,\n localSheetId: def.sheet ? sheetIds[def.sheet.toLowerCase()] : null,\n value: def.value,\n hidden: def.hidden\n };\n })\n }));\n var worksheets = xl.folder('worksheets');\n var sheetRels = worksheets.folder('_rels');\n for (var idx = 0; idx < sheetCount; idx++) {\n var sheet = this._sheets[idx];\n var sheetName = kendo.format('sheet{0}.xml', idx + 1);\n var relsXml = sheet.relsToXML();\n if (relsXml) {\n sheetRels.file(sheetName + '.rels', relsXml);\n }\n worksheets.file(sheetName, sheet.toXML(idx));\n }\n var borders = $.map(this._borders, $.parseJSON);\n var styles = $.map(this._styles, $.parseJSON);\n var hasFont = function (style) {\n return style.underline || style.bold || style.italic || style.color || style.fontFamily || style.fontSize;\n };\n var fonts = $.map(styles, function (style) {\n if (style.color) {\n style.color = convertColor(style.color);\n }\n if (hasFont(style)) {\n return style;\n }\n });\n var formats = $.map(styles, function (style) {\n if (style.format && defaultFormats[style.format] === undefined) {\n return style;\n }\n });\n var fills = $.map(styles, function (style) {\n if (style.background) {\n style.background = convertColor(style.background);\n return style;\n }\n });\n xl.file('styles.xml', STYLES({\n fonts: fonts,\n fills: fills,\n formats: formats,\n borders: borders,\n styles: $.map(styles, function (style) {\n var result = {};\n if (hasFont(style)) {\n result.fontId = $.inArray(style, fonts) + 1;\n }\n if (style.background) {\n result.fillId = $.inArray(style, fills) + 2;\n }\n result.textAlign = style.textAlign;\n result.verticalAlign = style.verticalAlign;\n result.wrap = style.wrap;\n result.borderId = style.borderId;\n if (style.format) {\n if (defaultFormats[style.format] !== undefined) {\n result.numFmtId = defaultFormats[style.format];\n } else {\n result.numFmtId = 165 + $.inArray(style, formats);\n }\n }\n return result;\n })\n }));\n xl.file('sharedStrings.xml', SHARED_STRINGS(this._strings));\n zip.file('[Content_Types].xml', CONTENT_TYPES({ count: sheetCount }));\n return 'data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,' + zip.generate({ compression: 'DEFLATE' });\n }\n });\n function borderStyle(width) {\n var alias = 'thin';\n if (width === 2) {\n alias = 'medium';\n } else if (width === 3) {\n alias = 'thick';\n }\n return alias;\n }\n function borderSideTemplate(name, style) {\n var result = '';\n if (style) {\n result += '<' + name + ' style=\"' + borderStyle(style.size) + '\">';\n if (style.color) {\n result += '<color rgb=\"' + convertColor(style.color) + '\"/>';\n }\n result += '</' + name + '>';\n }\n return result;\n }\n function borderTemplate(border) {\n return '<border>' + borderSideTemplate('left', border.left) + borderSideTemplate('right', border.right) + borderSideTemplate('top', border.top) + borderSideTemplate('bottom', border.bottom) + '</border>';\n }\n var EMPTY_CELL = {};\n function inflate(rows, mergedCells) {\n var rowData = [];\n var rowsByIndex = [];\n indexRows(rows, function (row, index) {\n var data = {\n _source: row,\n index: index,\n height: row.height,\n cells: []\n };\n rowData.push(data);\n rowsByIndex[index] = data;\n });\n var sorted = sortByIndex(rowData).slice(0);\n var ctx = {\n rowData: rowData,\n rowsByIndex: rowsByIndex,\n mergedCells: mergedCells\n };\n for (var i = 0; i < sorted.length; i++) {\n fillCells(sorted[i], ctx);\n delete sorted[i]._source;\n }\n return sortByIndex(rowData);\n }\n function indexRows(rows, callback) {\n for (var i = 0; i < rows.length; i++) {\n var row = rows[i];\n if (!row) {\n continue;\n }\n var index = row.index;\n if (typeof index !== 'number') {\n index = i;\n }\n callback(row, index);\n }\n }\n function sortByIndex(items) {\n return items.sort(function (a, b) {\n return a.index - b.index;\n });\n }\n function fillCells(data, ctx) {\n var row = data._source;\n var rowIndex = data.index;\n var cells = row.cells;\n var cellData = data.cells;\n if (!cells) {\n return;\n }\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i] || EMPTY_CELL;\n var rowSpan = cell.rowSpan || 1;\n var colSpan = cell.colSpan || 1;\n var cellIndex = insertCell(cellData, cell);\n spanCell(cell, cellData, cellIndex, colSpan);\n if (rowSpan > 1 || colSpan > 1) {\n ctx.mergedCells.push(ref(rowIndex, cellIndex) + ':' + ref(rowIndex + rowSpan - 1, cellIndex + colSpan - 1));\n }\n if (rowSpan > 1) {\n for (var ri = rowIndex + 1; ri < rowIndex + rowSpan; ri++) {\n var nextRow = ctx.rowsByIndex[ri];\n if (!nextRow) {\n nextRow = ctx.rowsByIndex[ri] = {\n index: ri,\n cells: []\n };\n ctx.rowData.push(nextRow);\n }\n spanCell(cell, nextRow.cells, cellIndex - 1, colSpan + 1);\n }\n }\n }\n }\n function insertCell(data, cell) {\n var index;\n if (typeof cell.index === 'number') {\n index = cell.index;\n insertCellAt(data, cell, cell.index);\n } else {\n index = appendCell(data, cell);\n }\n return index;\n }\n function insertCellAt(data, cell, index) {\n data[index] = cell;\n }\n function appendCell(data, cell) {\n var index = data.length;\n for (var i = 0; i < data.length + 1; i++) {\n if (!data[i]) {\n data[i] = cell;\n index = i;\n break;\n }\n }\n return index;\n }\n function spanCell(cell, row, startIndex, colSpan) {\n for (var i = 1; i < colSpan; i++) {\n var tmp = {\n borderTop: cell.borderTop,\n borderRight: cell.borderRight,\n borderBottom: cell.borderBottom,\n borderLeft: cell.borderLeft\n };\n insertCellAt(row, tmp, startIndex + i);\n }\n }\n var SPREADSHEET_FILTERS = kendo.template('<autoFilter ref=\"${ref}\">' + '# for (var i = 0; i < columns.length; ++i) { #' + '# var col = columns[i]; #' + '<filterColumn colId=\"${col.index}\">' + '#= generators[col.filter](col) #' + '</filterColumn>' + '# } #' + '</autoFilter>');\n var SPREADSHEET_CUSTOM_FILTER = kendo.template('<customFilters# if (logic == \"and\") {# and=\"1\"# } #>' + '# for (var i = 0; i < criteria.length; ++i) { #' + '# var f = criteria[i]; #' + '# var op = kendo.ooxml.spreadsheetFilters.customOperator(f); #' + '# var val = kendo.ooxml.spreadsheetFilters.customValue(f); #' + '<customFilter# if (op) {# operator=\"${op}\"#}# val=\"${val}\"/>' + '# } #' + '</customFilters>');\n var SPREADSHEET_DYNAMIC_FILTER = kendo.template('<dynamicFilter type=\"${kendo.ooxml.spreadsheetFilters.dynamicFilterType(type)}\" />');\n var SPREADSHEET_TOP_FILTER = kendo.template('<top10 percent=\"#= /percent$/i.test(type) ? 1 : 0 #\"' + ' top=\"#= /^top/i.test(type) ? 1 : 0 #\" ' + ' val=\"#: value #\" />');\n var SPREADSHEET_VALUE_FILTER = kendo.template('<filters# if (blanks) {# blank=\"1\"#}#>' + '# for (var i = 0; i < values.length; ++i) { #' + '<filter val=\"${values[i]}\" />' + '# } #' + '</filters>');\n function spreadsheetFilters(filter) {\n return SPREADSHEET_FILTERS({\n ref: filter.ref,\n columns: filter.columns,\n generators: {\n custom: SPREADSHEET_CUSTOM_FILTER,\n dynamic: SPREADSHEET_DYNAMIC_FILTER,\n top: SPREADSHEET_TOP_FILTER,\n value: SPREADSHEET_VALUE_FILTER\n }\n });\n }\n spreadsheetFilters.customOperator = function (f) {\n return {\n eq: 'equal',\n gt: 'greaterThan',\n gte: 'greaterThanOrEqual',\n lt: 'lessThan',\n lte: 'lessThanOrEqual',\n ne: 'notEqual',\n doesnotstartwith: 'notEqual',\n doesnotendwith: 'notEqual',\n doesnotcontain: 'notEqual',\n doesnotmatch: 'notEqual'\n }[f.operator.toLowerCase()];\n };\n spreadsheetFilters.customValue = function (f) {\n function esc(str) {\n return str.replace(/([*?])/g, '~$1');\n }\n switch (f.operator.toLowerCase()) {\n case 'startswith':\n case 'doesnotstartwith':\n return esc(f.value) + '*';\n case 'endswith':\n case 'doesnotendwith':\n return '*' + esc(f.value);\n case 'contains':\n case 'doesnotcontain':\n return '*' + esc(f.value) + '*';\n }\n return f.value;\n };\n spreadsheetFilters.dynamicFilterType = function (type) {\n return {\n quarter1: 'Q1',\n quarter2: 'Q2',\n quarter3: 'Q3',\n quarter4: 'Q4',\n january: 'M1',\n february: 'M2',\n march: 'M3',\n april: 'M4',\n may: 'M5',\n june: 'M6',\n july: 'M7',\n august: 'M8',\n september: 'M9',\n october: 'M10',\n november: 'M11',\n december: 'M12'\n }[type.toLowerCase()] || type;\n };\n kendo.ooxml = {\n Workbook: Workbook,\n Worksheet: Worksheet,\n toWidth: toWidth,\n toHeight: toHeight,\n borderTemplate: borderTemplate,\n spreadsheetFilters: spreadsheetFilters\n };\n }(kendo.jQuery, kendo));\n return kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.excel', [\n 'kendo.core',\n 'kendo.data',\n 'kendo.ooxml'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'excel',\n name: 'Excel export',\n category: 'framework',\n advanced: true,\n mixin: true,\n depends: [\n 'data',\n 'ooxml'\n ]\n };\n (function ($, kendo) {\n kendo.ExcelExporter = kendo.Class.extend({\n init: function (options) {\n options.columns = this._trimColumns(options.columns || []);\n this.allColumns = $.map(this._leafColumns(options.columns || []), this._prepareColumn);\n this.columns = $.grep(this.allColumns, function (column) {\n return !column.hidden;\n });\n this.options = options;\n var dataSource = options.dataSource;\n if (dataSource instanceof kendo.data.DataSource) {\n this.dataSource = new dataSource.constructor($.extend({}, dataSource.options, {\n page: options.allPages ? 0 : dataSource.page(),\n filter: dataSource.filter(),\n pageSize: options.allPages ? dataSource.total() : dataSource.pageSize(),\n sort: dataSource.sort(),\n group: dataSource.group(),\n aggregate: dataSource.aggregate()\n }));\n var data = dataSource.data();\n if (data.length > 0) {\n this.dataSource._data = data;\n var transport = this.dataSource.transport;\n if (dataSource._isServerGrouped() && transport.options && transport.options.data) {\n transport.options.data = null;\n }\n }\n } else {\n this.dataSource = kendo.data.DataSource.create(dataSource);\n }\n },\n _trimColumns: function (columns) {\n var that = this;\n return $.grep(columns, function (column) {\n var result = !!column.field;\n if (!result && column.columns) {\n result = that._trimColumns(column.columns).length > 0;\n }\n return result;\n });\n },\n _leafColumns: function (columns) {\n var result = [];\n for (var idx = 0; idx < columns.length; idx++) {\n if (!columns[idx].columns) {\n result.push(columns[idx]);\n continue;\n }\n result = result.concat(this._leafColumns(columns[idx].columns));\n }\n return result;\n },\n workbook: function () {\n return $.Deferred($.proxy(function (d) {\n this.dataSource.fetch().then($.proxy(function () {\n var workbook = {\n sheets: [{\n columns: this._columns(),\n rows: this._rows(),\n freezePane: this._freezePane(),\n filter: this._filter()\n }]\n };\n d.resolve(workbook, this.dataSource.view());\n }, this));\n }, this)).promise();\n },\n _prepareColumn: function (column) {\n if (!column.field) {\n return;\n }\n var value = function (dataItem) {\n return dataItem.get(column.field);\n };\n var values = null;\n if (column.values) {\n values = {};\n $.each(column.values, function () {\n values[this.value] = this.text;\n });\n value = function (dataItem) {\n return values[dataItem.get(column.field)];\n };\n }\n return $.extend({}, column, {\n value: value,\n values: values,\n groupHeaderTemplate: kendo.template(column.groupHeaderTemplate || '#= title #: #= value #'),\n groupFooterTemplate: column.groupFooterTemplate ? kendo.template(column.groupFooterTemplate) : null,\n footerTemplate: column.footerTemplate ? kendo.template(column.footerTemplate) : null\n });\n },\n _filter: function () {\n if (!this.options.filterable) {\n return null;\n }\n var depth = this._depth();\n return {\n from: depth,\n to: depth + this.columns.length - 1\n };\n },\n _dataRow: function (dataItem, level, depth) {\n if (this._hierarchical()) {\n level = this.dataSource.level(dataItem) + 1;\n }\n var cells = [];\n for (var li = 0; li < level; li++) {\n cells[li] = {\n background: '#dfdfdf',\n color: '#333'\n };\n }\n if (depth && dataItem.items) {\n var column = $.grep(this.allColumns, function (column) {\n return column.field == dataItem.field;\n })[0];\n var title = column && column.title ? column.title : dataItem.field;\n var template = column ? column.groupHeaderTemplate : null;\n var value = title + ': ' + dataItem.value;\n var group = $.extend({\n title: title,\n field: dataItem.field,\n value: column && column.values ? column.values[dataItem.value] : dataItem.value,\n aggregates: dataItem.aggregates\n }, dataItem.aggregates[dataItem.field]);\n if (template) {\n value = template(group);\n }\n cells.push({\n value: value,\n background: '#dfdfdf',\n color: '#333',\n colSpan: this.columns.length + depth - level\n });\n var rows = this._dataRows(dataItem.items, level + 1);\n rows.unshift({\n type: 'group-header',\n cells: cells\n });\n return rows.concat(this._footer(dataItem));\n } else {\n var dataCells = [];\n for (var ci = 0; ci < this.columns.length; ci++) {\n dataCells[ci] = this._cell(dataItem, this.columns[ci]);\n }\n if (this._hierarchical()) {\n dataCells[0].colSpan = depth - level + 1;\n }\n return [{\n type: 'data',\n cells: cells.concat(dataCells)\n }];\n }\n },\n _dataRows: function (dataItems, level) {\n var depth = this._depth();\n var rows = [];\n for (var i = 0; i < dataItems.length; i++) {\n rows.push.apply(rows, this._dataRow(dataItems[i], level, depth));\n }\n return rows;\n },\n _footer: function (dataItem) {\n var rows = [];\n var footer = false;\n var cells = $.map(this.columns, $.proxy(function (column) {\n if (column.groupFooterTemplate) {\n footer = true;\n return {\n background: '#dfdfdf',\n color: '#333',\n value: column.groupFooterTemplate($.extend({}, this.dataSource.aggregates(), dataItem.aggregates, dataItem.aggregates[column.field]))\n };\n } else {\n return {\n background: '#dfdfdf',\n color: '#333'\n };\n }\n }, this));\n if (footer) {\n rows.push({\n type: 'group-footer',\n cells: $.map(new Array(this.dataSource.group().length), function () {\n return {\n background: '#dfdfdf',\n color: '#333'\n };\n }).concat(cells)\n });\n }\n return rows;\n },\n _isColumnVisible: function (column) {\n return this._visibleColumns([column]).length > 0 && (column.field || column.columns);\n },\n _visibleColumns: function (columns) {\n var that = this;\n return $.grep(columns, function (column) {\n var result = !column.hidden;\n if (result && column.columns) {\n result = that._visibleColumns(column.columns).length > 0;\n }\n return result;\n });\n },\n _headerRow: function (row, groups) {\n var headers = $.map(row.cells, function (cell) {\n return {\n background: '#7a7a7a',\n color: '#fff',\n value: cell.title,\n colSpan: cell.colSpan > 1 ? cell.colSpan : 1,\n rowSpan: row.rowSpan > 1 && !cell.colSpan ? row.rowSpan : 1\n };\n });\n if (this._hierarchical()) {\n headers[0].colSpan = this._depth() + 1;\n }\n return {\n type: 'header',\n cells: $.map(new Array(groups.length), function () {\n return {\n background: '#7a7a7a',\n color: '#fff'\n };\n }).concat(headers)\n };\n },\n _prependHeaderRows: function (rows) {\n var groups = this.dataSource.group();\n var headerRows = [{\n rowSpan: 1,\n cells: [],\n index: 0\n }];\n this._prepareHeaderRows(headerRows, this.options.columns);\n for (var idx = headerRows.length - 1; idx >= 0; idx--) {\n rows.unshift(this._headerRow(headerRows[idx], groups));\n }\n },\n _prepareHeaderRows: function (rows, columns, parentCell, parentRow) {\n var row = parentRow || rows[rows.length - 1];\n var childRow = rows[row.index + 1];\n var totalColSpan = 0;\n var column;\n var cell;\n for (var idx = 0; idx < columns.length; idx++) {\n column = columns[idx];\n if (this._isColumnVisible(column)) {\n cell = {\n title: column.title || column.field,\n colSpan: 0\n };\n row.cells.push(cell);\n if (column.columns && column.columns.length) {\n if (!childRow) {\n childRow = {\n rowSpan: 0,\n cells: [],\n index: rows.length\n };\n rows.push(childRow);\n }\n cell.colSpan = this._trimColumns(this._visibleColumns(column.columns)).length;\n this._prepareHeaderRows(rows, column.columns, cell, childRow);\n totalColSpan += cell.colSpan - 1;\n row.rowSpan = rows.length - row.index;\n }\n }\n }\n if (parentCell) {\n parentCell.colSpan += totalColSpan;\n }\n },\n _rows: function () {\n var groups = this.dataSource.group();\n var rows = this._dataRows(this.dataSource.view(), 0);\n if (this.columns.length) {\n this._prependHeaderRows(rows);\n var footer = false;\n var cells = $.map(this.columns, $.proxy(function (column) {\n if (column.footerTemplate) {\n footer = true;\n var aggregates = this.dataSource.aggregates();\n return {\n background: '#dfdfdf',\n color: '#333',\n value: column.footerTemplate($.extend({}, aggregates, aggregates[column.field]))\n };\n } else {\n return {\n background: '#dfdfdf',\n color: '#333'\n };\n }\n }, this));\n if (footer) {\n rows.push({\n type: 'footer',\n cells: $.map(new Array(groups.length), function () {\n return {\n background: '#dfdfdf',\n color: '#333'\n };\n }).concat(cells)\n });\n }\n }\n return rows;\n },\n _headerDepth: function (columns) {\n var result = 1;\n var max = 0;\n for (var idx = 0; idx < columns.length; idx++) {\n if (columns[idx].columns) {\n var temp = this._headerDepth(columns[idx].columns);\n if (temp > max) {\n max = temp;\n }\n }\n }\n return result + max;\n },\n _freezePane: function () {\n var columns = this._visibleColumns(this.options.columns || []);\n var colSplit = this._visibleColumns(this._trimColumns(this._leafColumns($.grep(columns, function (column) {\n return column.locked;\n })))).length;\n return {\n rowSplit: this._headerDepth(columns),\n colSplit: colSplit ? colSplit + this.dataSource.group().length : 0\n };\n },\n _cell: function (dataItem, column) {\n return { value: column.value(dataItem) };\n },\n _hierarchical: function () {\n return this.options.hierarchy && this.dataSource.level;\n },\n _depth: function () {\n var dataSource = this.dataSource;\n var depth = 0;\n var view, i, level;\n if (this._hierarchical()) {\n view = dataSource.view();\n for (i = 0; i < view.length; i++) {\n level = dataSource.level(view[i]);\n if (level > depth) {\n depth = level;\n }\n }\n depth++;\n } else {\n depth = dataSource.group().length;\n }\n return depth;\n },\n _columns: function () {\n var depth = this._depth();\n var columns = $.map(new Array(depth), function () {\n return { width: 20 };\n });\n return columns.concat($.map(this.columns, function (column) {\n return {\n width: parseInt(column.width, 10),\n autoWidth: column.width ? false : true\n };\n }));\n }\n });\n kendo.ExcelMixin = {\n extend: function (proto) {\n proto.events.push('excelExport');\n proto.options.excel = $.extend(proto.options.excel, this.options);\n proto.saveAsExcel = this.saveAsExcel;\n },\n options: {\n proxyURL: '',\n allPages: false,\n filterable: false,\n fileName: 'Export.xlsx'\n },\n saveAsExcel: function () {\n var excel = this.options.excel || {};\n var exporter = new kendo.ExcelExporter({\n columns: this.columns,\n dataSource: this.dataSource,\n allPages: excel.allPages,\n filterable: excel.filterable,\n hierarchy: excel.hierarchy\n });\n exporter.workbook().then($.proxy(function (book, data) {\n if (!this.trigger('excelExport', {\n workbook: book,\n data: data\n })) {\n var workbook = new kendo.ooxml.Workbook(book);\n kendo.saveAs({\n dataURI: workbook.toDataURL(),\n fileName: book.fileName || excel.fileName,\n proxyURL: excel.proxyURL,\n forceProxy: excel.forceProxy\n });\n }\n }, this));\n }\n };\n }(kendo.jQuery, kendo));\n return kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.signalr', ['kendo.data'], f);\n}(function () {\n var __meta__ = {\n id: 'data.signalr',\n name: 'SignalR',\n category: 'framework',\n depends: ['data'],\n hidden: true\n };\n (function ($) {\n var transport = kendo.data.RemoteTransport.extend({\n init: function (options) {\n var signalr = options && options.signalr ? options.signalr : {};\n var promise = signalr.promise;\n if (!promise) {\n throw new Error('The \"promise\" option must be set.');\n }\n if (typeof promise.done != 'function' || typeof promise.fail != 'function') {\n throw new Error('The \"promise\" option must be a Promise.');\n }\n this.promise = promise;\n var hub = signalr.hub;\n if (!hub) {\n throw new Error('The \"hub\" option must be set.');\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 this.hub = hub;\n kendo.data.RemoteTransport.fn.init.call(this, options);\n },\n push: function (callbacks) {\n var client = this.options.signalr.client || {};\n if (client.create) {\n this.hub.on(client.create, callbacks.pushCreate);\n }\n if (client.update) {\n this.hub.on(client.update, callbacks.pushUpdate);\n }\n if (client.destroy) {\n this.hub.on(client.destroy, callbacks.pushDestroy);\n }\n },\n _crud: function (options, type) {\n var hub = this.hub;\n var server = this.options.signalr.server;\n if (!server || !server[type]) {\n throw new Error(kendo.format('The \"server.{0}\" option must be set.', type));\n }\n var args = [server[type]];\n var data = this.parameterMap(options.data, type);\n if (!$.isEmptyObject(data)) {\n args.push(data);\n }\n this.promise.done(function () {\n hub.invoke.apply(hub, args).done(options.success).fail(options.error);\n });\n },\n read: function (options) {\n this._crud(options, 'read');\n },\n create: function (options) {\n this._crud(options, 'create');\n },\n update: function (options) {\n this._crud(options, 'update');\n },\n destroy: function (options) {\n this._crud(options, 'destroy');\n }\n });\n $.extend(true, kendo.data, { transports: { signalr: transport } });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/util', ['kendo.core'], f);\n}(function () {\n (function ($) {\n function createPromise() {\n return $.Deferred();\n }\n function promiseAll(promises) {\n return $.when.apply($, promises);\n }\n kendo.drawing.util = kendo.drawing.util || {};\n kendo.deepExtend(kendo.drawing.util, {\n createPromise: createPromise,\n promiseAll: promiseAll\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.color', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'color',\n name: 'Color utils',\n category: 'framework',\n advanced: true,\n description: 'Color utilities used across components',\n depends: ['core']\n };\n window.kendo = window.kendo || {};\n var Class = kendo.Class;\n var support = kendo.support;\n var namedColors = {\n aliceblue: 'f0f8ff',\n antiquewhite: 'faebd7',\n aqua: '00ffff',\n aquamarine: '7fffd4',\n azure: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '000000',\n blanchedalmond: 'ffebcd',\n blue: '0000ff',\n blueviolet: '8a2be2',\n brown: 'a52a2a',\n burlywood: 'deb887',\n cadetblue: '5f9ea0',\n chartreuse: '7fff00',\n chocolate: 'd2691e',\n coral: 'ff7f50',\n cornflowerblue: '6495ed',\n cornsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: '00ffff',\n darkblue: '00008b',\n darkcyan: '008b8b',\n darkgoldenrod: 'b8860b',\n darkgray: 'a9a9a9',\n darkgrey: 'a9a9a9',\n darkgreen: '006400',\n darkkhaki: 'bdb76b',\n darkmagenta: '8b008b',\n darkolivegreen: '556b2f',\n darkorange: 'ff8c00',\n darkorchid: '9932cc',\n darkred: '8b0000',\n darksalmon: 'e9967a',\n darkseagreen: '8fbc8f',\n darkslateblue: '483d8b',\n darkslategray: '2f4f4f',\n darkslategrey: '2f4f4f',\n darkturquoise: '00ced1',\n darkviolet: '9400d3',\n deeppink: 'ff1493',\n deepskyblue: '00bfff',\n dimgray: '696969',\n dimgrey: '696969',\n dodgerblue: '1e90ff',\n firebrick: 'b22222',\n floralwhite: 'fffaf0',\n forestgreen: '228b22',\n fuchsia: 'ff00ff',\n gainsboro: 'dcdcdc',\n ghostwhite: 'f8f8ff',\n gold: 'ffd700',\n goldenrod: 'daa520',\n gray: '808080',\n grey: '808080',\n green: '008000',\n greenyellow: 'adff2f',\n honeydew: 'f0fff0',\n hotpink: 'ff69b4',\n indianred: 'cd5c5c',\n indigo: '4b0082',\n ivory: 'fffff0',\n khaki: 'f0e68c',\n lavender: 'e6e6fa',\n lavenderblush: 'fff0f5',\n lawngreen: '7cfc00',\n lemonchiffon: 'fffacd',\n lightblue: 'add8e6',\n lightcoral: 'f08080',\n lightcyan: 'e0ffff',\n lightgoldenrodyellow: 'fafad2',\n lightgray: 'd3d3d3',\n lightgrey: 'd3d3d3',\n lightgreen: '90ee90',\n lightpink: 'ffb6c1',\n lightsalmon: 'ffa07a',\n lightseagreen: '20b2aa',\n lightskyblue: '87cefa',\n lightslategray: '778899',\n lightslategrey: '778899',\n lightsteelblue: 'b0c4de',\n lightyellow: 'ffffe0',\n lime: '00ff00',\n limegreen: '32cd32',\n linen: 'faf0e6',\n magenta: 'ff00ff',\n maroon: '800000',\n mediumaquamarine: '66cdaa',\n mediumblue: '0000cd',\n mediumorchid: 'ba55d3',\n mediumpurple: '9370d8',\n mediumseagreen: '3cb371',\n mediumslateblue: '7b68ee',\n mediumspringgreen: '00fa9a',\n mediumturquoise: '48d1cc',\n mediumvioletred: 'c71585',\n midnightblue: '191970',\n mintcream: 'f5fffa',\n mistyrose: 'ffe4e1',\n moccasin: 'ffe4b5',\n navajowhite: 'ffdead',\n navy: '000080',\n oldlace: 'fdf5e6',\n olive: '808000',\n olivedrab: '6b8e23',\n orange: 'ffa500',\n orangered: 'ff4500',\n orchid: 'da70d6',\n palegoldenrod: 'eee8aa',\n palegreen: '98fb98',\n paleturquoise: 'afeeee',\n palevioletred: 'd87093',\n papayawhip: 'ffefd5',\n peachpuff: 'ffdab9',\n peru: 'cd853f',\n pink: 'ffc0cb',\n plum: 'dda0dd',\n powderblue: 'b0e0e6',\n purple: '800080',\n red: 'ff0000',\n rosybrown: 'bc8f8f',\n royalblue: '4169e1',\n saddlebrown: '8b4513',\n salmon: 'fa8072',\n sandybrown: 'f4a460',\n seagreen: '2e8b57',\n seashell: 'fff5ee',\n sienna: 'a0522d',\n silver: 'c0c0c0',\n skyblue: '87ceeb',\n slateblue: '6a5acd',\n slategray: '708090',\n slategrey: '708090',\n snow: 'fffafa',\n springgreen: '00ff7f',\n steelblue: '4682b4',\n tan: 'd2b48c',\n teal: '008080',\n thistle: 'd8bfd8',\n tomato: 'ff6347',\n turquoise: '40e0d0',\n violet: 'ee82ee',\n wheat: 'f5deb3',\n white: 'ffffff',\n whitesmoke: 'f5f5f5',\n yellow: 'ffff00',\n yellowgreen: '9acd32'\n };\n var browser = support.browser;\n var namedColorRegexp = ['transparent'];\n for (var i in namedColors) {\n if (namedColors.hasOwnProperty(i)) {\n namedColorRegexp.push(i);\n }\n }\n namedColorRegexp = new RegExp('^(' + namedColorRegexp.join('|') + ')(\\\\W|$)', 'i');\n var BaseColor = Class.extend({\n init: function () {\n },\n toHSV: function () {\n return this;\n },\n toRGB: function () {\n return this;\n },\n toHex: function () {\n return this.toBytes().toHex();\n },\n toBytes: function () {\n return this;\n },\n toCss: function () {\n return '#' + this.toHex();\n },\n toCssRgba: function () {\n var rgb = this.toBytes();\n return 'rgba(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ', ' + parseFloat(Number(this.a).toFixed(3)) + ')';\n },\n toDisplay: function () {\n if (browser.msie && browser.version < 9) {\n return this.toCss();\n }\n return this.toCssRgba();\n },\n equals: function (c) {\n return c === this || c !== null && this.toCssRgba() === parseColor(c).toCssRgba();\n },\n diff: function (other) {\n if (other === null) {\n return NaN;\n }\n var c1 = this.toBytes();\n var c2 = other.toBytes();\n return Math.sqrt(Math.pow((c1.r - c2.r) * 0.3, 2) + Math.pow((c1.g - c2.g) * 0.59, 2) + Math.pow((c1.b - c2.b) * 0.11, 2));\n },\n clone: function () {\n var c = this.toBytes();\n if (c === this) {\n c = new Bytes(c.r, c.g, c.b, c.a);\n }\n return c;\n }\n });\n var RGB = BaseColor.extend({\n init: function (r, g, b, a) {\n BaseColor.fn.init.call(this);\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n },\n toHSV: function () {\n var ref = this;\n var r = ref.r;\n var g = ref.g;\n var b = ref.b;\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var delta = max - min;\n var v = max;\n var h, s;\n if (delta === 0) {\n return new HSV(0, 0, v, this.a);\n }\n if (max !== 0) {\n s = delta / max;\n if (r === max) {\n h = (g - b) / delta;\n } else if (g === max) {\n h = 2 + (b - r) / delta;\n } else {\n h = 4 + (r - g) / delta;\n }\n h *= 60;\n if (h < 0) {\n h += 360;\n }\n } else {\n s = 0;\n h = -1;\n }\n return new HSV(h, s, v, this.a);\n },\n toHSL: function () {\n var ref = this;\n var r = ref.r;\n var g = ref.g;\n var b = ref.b;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h, s, l = (max + min) / 2;\n if (max === min) {\n h = s = 0;\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n break;\n }\n h *= 60;\n s *= 100;\n l *= 100;\n }\n return new HSL(h, s, l, this.a);\n },\n toBytes: function () {\n return new Bytes(this.r * 255, this.g * 255, this.b * 255, this.a);\n }\n });\n var Bytes = RGB.extend({\n init: function (r, g, b, a) {\n RGB.fn.init.call(this, Math.round(r), Math.round(g), Math.round(b), a);\n },\n toRGB: function () {\n return new RGB(this.r / 255, this.g / 255, this.b / 255, this.a);\n },\n toHSV: function () {\n return this.toRGB().toHSV();\n },\n toHSL: function () {\n return this.toRGB().toHSL();\n },\n toHex: function () {\n return hex(this.r, 2) + hex(this.g, 2) + hex(this.b, 2);\n },\n toBytes: function () {\n return this;\n }\n });\n function hex(n, width, pad) {\n if (pad === void 0) {\n pad = '0';\n }\n var result = n.toString(16);\n while (width > result.length) {\n result = pad + result;\n }\n return result;\n }\n var HSV = BaseColor.extend({\n init: function (h, s, v, a) {\n BaseColor.fn.init.call(this);\n this.h = h;\n this.s = s;\n this.v = v;\n this.a = a;\n },\n toRGB: function () {\n var ref = this;\n var h = ref.h;\n var s = ref.s;\n var v = ref.v;\n var r, g, b;\n if (s === 0) {\n r = g = b = v;\n } else {\n h /= 60;\n var i = Math.floor(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - s * f);\n var t = v * (1 - s * (1 - f));\n switch (i) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n default:\n r = v;\n g = p;\n b = q;\n break;\n }\n }\n return new RGB(r, g, b, this.a);\n },\n toHSL: function () {\n return this.toRGB().toHSL();\n },\n toBytes: function () {\n return this.toRGB().toBytes();\n }\n });\n var HSL = BaseColor.extend({\n init: function (h, s, l, a) {\n BaseColor.fn.init.call(this);\n this.h = h;\n this.s = s;\n this.l = l;\n this.a = a;\n },\n toRGB: function () {\n var ref = this;\n var h = ref.h;\n var s = ref.s;\n var l = ref.l;\n var r, g, b;\n if (s === 0) {\n r = g = b = l;\n } else {\n h /= 360;\n s /= 100;\n l /= 100;\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n return new RGB(r, g, b, this.a);\n },\n toHSV: function () {\n return this.toRGB().toHSV();\n },\n toBytes: function () {\n return this.toRGB().toBytes();\n }\n });\n function hue2rgb(p, q, s) {\n var t = s;\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n }\n function parseColor(value, safe) {\n var m, ret;\n if (value == null || value === 'none') {\n return null;\n }\n if (value instanceof BaseColor) {\n return value;\n }\n var color = value.toLowerCase();\n if (m = namedColorRegexp.exec(color)) {\n if (m[1] === 'transparent') {\n color = new RGB(1, 1, 1, 0);\n } else {\n color = parseColor(namedColors[m[1]], safe);\n }\n color.match = [m[1]];\n return color;\n }\n if (m = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})\\b/i.exec(color)) {\n ret = new Bytes(parseInt(m[1], 16), parseInt(m[2], 16), parseInt(m[3], 16), 1);\n } else if (m = /^#?([0-9a-f])([0-9a-f])([0-9a-f])\\b/i.exec(color)) {\n ret = new Bytes(parseInt(m[1] + m[1], 16), parseInt(m[2] + m[2], 16), parseInt(m[3] + m[3], 16), 1);\n } else if (m = /^rgb\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/.exec(color)) {\n ret = new Bytes(parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10), 1);\n } else if (m = /^rgba\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9.]+)\\s*\\)/.exec(color)) {\n ret = new Bytes(parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10), parseFloat(m[4]));\n } else if (m = /^rgb\\(\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*\\)/.exec(color)) {\n ret = new RGB(parseFloat(m[1]) / 100, parseFloat(m[2]) / 100, parseFloat(m[3]) / 100, 1);\n } else if (m = /^rgba\\(\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9.]+)\\s*\\)/.exec(color)) {\n ret = new RGB(parseFloat(m[1]) / 100, parseFloat(m[2]) / 100, parseFloat(m[3]) / 100, parseFloat(m[4]));\n }\n if (ret) {\n ret.match = m;\n } else if (!safe) {\n throw new Error('Cannot parse color: ' + color);\n }\n return ret;\n }\n var Color = Class.extend({\n init: function (value) {\n var this$1 = this;\n if (arguments.length === 1) {\n var formats = Color.formats;\n var resolvedColor = this.resolveColor(value);\n for (var idx = 0; idx < formats.length; idx++) {\n var formatRegex = formats[idx].re;\n var processor = formats[idx].process;\n var parts = formatRegex.exec(resolvedColor);\n if (parts) {\n var channels = processor(parts);\n this$1.r = channels[0];\n this$1.g = channels[1];\n this$1.b = channels[2];\n }\n }\n } else {\n this.r = arguments[0];\n this.g = arguments[1];\n this.b = arguments[2];\n }\n this.r = this.normalizeByte(this.r);\n this.g = this.normalizeByte(this.g);\n this.b = this.normalizeByte(this.b);\n },\n toHex: function () {\n var pad = this.padDigit;\n var r = this.r.toString(16);\n var g = this.g.toString(16);\n var b = this.b.toString(16);\n return '#' + pad(r) + pad(g) + pad(b);\n },\n resolveColor: function (value) {\n var color = value || 'black';\n if (color.charAt(0) === '#') {\n color = color.substr(1, 6);\n }\n color = color.replace(/ /g, '');\n color = color.toLowerCase();\n color = Color.namedColors[color] || color;\n return color;\n },\n normalizeByte: function (value) {\n if (value < 0 || isNaN(value)) {\n return 0;\n }\n return value > 255 ? 255 : value;\n },\n padDigit: function (value) {\n return value.length === 1 ? '0' + value : value;\n },\n brightness: function (value) {\n var round = Math.round;\n this.r = round(this.normalizeByte(this.r * value));\n this.g = round(this.normalizeByte(this.g * value));\n this.b = round(this.normalizeByte(this.b * value));\n return this;\n },\n percBrightness: function () {\n return Math.sqrt(0.241 * this.r * this.r + 0.691 * this.g * this.g + 0.068 * this.b * this.b);\n }\n });\n Color.fromBytes = function (r, g, b, a) {\n return new Bytes(r, g, b, a != null ? a : 1);\n };\n Color.fromRGB = function (r, g, b, a) {\n return new RGB(r, g, b, a != null ? a : 1);\n };\n Color.fromHSV = function (h, s, v, a) {\n return new HSV(h, s, v, a != null ? a : 1);\n };\n Color.fromHSL = function (h, s, l, a) {\n return new HSL(h, s, l, a != null ? a : 1);\n };\n Color.formats = [\n {\n re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n process: function (parts) {\n return [\n parseInt(parts[1], 10),\n parseInt(parts[2], 10),\n parseInt(parts[3], 10)\n ];\n }\n },\n {\n re: /^(\\w{2})(\\w{2})(\\w{2})$/,\n process: function (parts) {\n return [\n parseInt(parts[1], 16),\n parseInt(parts[2], 16),\n parseInt(parts[3], 16)\n ];\n }\n },\n {\n re: /^(\\w{1})(\\w{1})(\\w{1})$/,\n process: function (parts) {\n return [\n parseInt(parts[1] + parts[1], 16),\n parseInt(parts[2] + parts[2], 16),\n parseInt(parts[3] + parts[3], 16)\n ];\n }\n }\n ];\n Color.namedColors = namedColors;\n kendo.deepExtend(kendo, {\n parseColor: parseColor,\n Color: Color\n });\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('util/text-metrics', ['kendo.core'], f);\n}(function () {\n (function ($) {\n window.kendo.util = window.kendo.util || {};\n var LRUCache = kendo.Class.extend({\n init: function (size) {\n this._size = size;\n this._length = 0;\n this._map = {};\n },\n put: function (key, value) {\n var map = this._map;\n var entry = {\n key: key,\n value: value\n };\n map[key] = entry;\n if (!this._head) {\n this._head = this._tail = entry;\n } else {\n this._tail.newer = entry;\n entry.older = this._tail;\n this._tail = entry;\n }\n if (this._length >= this._size) {\n map[this._head.key] = null;\n this._head = this._head.newer;\n this._head.older = null;\n } else {\n this._length++;\n }\n },\n get: function (key) {\n var entry = this._map[key];\n if (entry) {\n if (entry === this._head && entry !== this._tail) {\n this._head = entry.newer;\n this._head.older = null;\n }\n if (entry !== this._tail) {\n if (entry.older) {\n entry.older.newer = entry.newer;\n entry.newer.older = entry.older;\n }\n entry.older = this._tail;\n entry.newer = null;\n this._tail.newer = entry;\n this._tail = entry;\n }\n return entry.value;\n }\n }\n });\n function objectKey(object) {\n var parts = [];\n for (var key in object) {\n parts.push(key + object[key]);\n }\n return parts.sort().join('');\n }\n function hashKey(str) {\n var hash = 2166136261;\n for (var i = 0; i < str.length; ++i) {\n hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);\n hash ^= str.charCodeAt(i);\n }\n return hash >>> 0;\n }\n function zeroSize() {\n return {\n width: 0,\n height: 0,\n baseline: 0\n };\n }\n var DEFAULT_OPTIONS = { baselineMarkerSize: 1 };\n var defaultMeasureBox;\n if (typeof document !== 'undefined') {\n defaultMeasureBox = document.createElement('div');\n defaultMeasureBox.style.cssText = 'position: absolute !important; top: -4000px !important; width: auto !important; height: auto !important;' + 'padding: 0 !important; margin: 0 !important; border: 0 !important;' + 'line-height: normal !important; visibility: hidden !important; white-space: nowrap!important;';\n }\n var TextMetrics = kendo.Class.extend({\n init: function (options) {\n this._cache = new LRUCache(1000);\n this.options = $.extend({}, DEFAULT_OPTIONS, options);\n },\n measure: function (text, style, box) {\n if (!text) {\n return zeroSize();\n }\n var styleKey = objectKey(style);\n var cacheKey = hashKey(text + styleKey);\n var cachedResult = this._cache.get(cacheKey);\n if (cachedResult) {\n return cachedResult;\n }\n var size = zeroSize();\n var measureBox = box || defaultMeasureBox;\n var baselineMarker = this._baselineMarker().cloneNode(false);\n for (var key in style) {\n var value = style[key];\n if (typeof value !== 'undefined') {\n measureBox.style[key] = value;\n }\n }\n measureBox.textContent = text;\n measureBox.appendChild(baselineMarker);\n document.body.appendChild(measureBox);\n if (String(text).length) {\n size.width = measureBox.offsetWidth - this.options.baselineMarkerSize;\n size.height = measureBox.offsetHeight;\n size.baseline = baselineMarker.offsetTop + this.options.baselineMarkerSize;\n }\n if (size.width > 0 && size.height > 0) {\n this._cache.put(cacheKey, size);\n }\n measureBox.parentNode.removeChild(measureBox);\n return size;\n },\n _baselineMarker: function () {\n var marker = document.createElement('div');\n marker.style.cssText = 'display: inline-block; vertical-align: baseline;width: ' + this.options.baselineMarkerSize + 'px; height: ' + this.options.baselineMarkerSize + 'px;overflow: hidden;';\n return marker;\n }\n });\n TextMetrics.current = new TextMetrics();\n function measureText(text, style, measureBox) {\n return TextMetrics.current.measure(text, style, measureBox);\n }\n kendo.deepExtend(kendo.util, {\n LRUCache: LRUCache,\n TextMetrics: TextMetrics,\n measureText: measureText,\n objectKey: objectKey,\n hashKey: hashKey\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/kendo-drawing', [\n 'drawing/util',\n 'kendo.color',\n 'util/text-metrics'\n ], f);\n}(function () {\n (function ($) {\n window.kendo = window.kendo || {};\n var kendoDrawing = kendo.drawing;\n var kendoDrawingUtil = kendoDrawing.util;\n var Class = kendo.Class;\n var kendoUtil = kendo.util;\n var support = kendo.support;\n var createPromise = kendoDrawingUtil.createPromise;\n var promiseAll = kendoDrawingUtil.promiseAll;\n var ObserversMixin = {\n extend: function (proto) {\n var this$1 = this;\n for (var method in this) {\n if (method !== 'extend') {\n proto[method] = this$1[method];\n }\n }\n },\n observers: function () {\n this._observers = this._observers || [];\n return this._observers;\n },\n addObserver: function (element) {\n if (!this._observers) {\n this._observers = [element];\n } else {\n this._observers.push(element);\n }\n return this;\n },\n removeObserver: function (element) {\n var observers = this.observers();\n var index = observers.indexOf(element);\n if (index !== -1) {\n observers.splice(index, 1);\n }\n return this;\n },\n trigger: function (methodName, event) {\n var observers = this._observers;\n if (observers && !this._suspended) {\n for (var idx = 0; idx < observers.length; idx++) {\n var observer = observers[idx];\n if (observer[methodName]) {\n observer[methodName](event);\n }\n }\n }\n return this;\n },\n optionsChange: function (e) {\n if (e === void 0) {\n e = {};\n }\n e.element = this;\n this.trigger('optionsChange', e);\n },\n geometryChange: function () {\n this.trigger('geometryChange', { element: this });\n },\n suspend: function () {\n this._suspended = (this._suspended || 0) + 1;\n return this;\n },\n resume: function () {\n this._suspended = Math.max((this._suspended || 0) - 1, 0);\n return this;\n },\n _observerField: function (field, value) {\n if (this[field]) {\n this[field].removeObserver(this);\n }\n this[field] = value;\n value.addObserver(this);\n }\n };\n function append(first, second) {\n first.push.apply(first, second);\n return first;\n }\n var literals = {\n 1: 'i',\n 10: 'x',\n 100: 'c',\n 2: 'ii',\n 20: 'xx',\n 200: 'cc',\n 3: 'iii',\n 30: 'xxx',\n 300: 'ccc',\n 4: 'iv',\n 40: 'xl',\n 400: 'cd',\n 5: 'v',\n 50: 'l',\n 500: 'd',\n 6: 'vi',\n 60: 'lx',\n 600: 'dc',\n 7: 'vii',\n 70: 'lxx',\n 700: 'dcc',\n 8: 'viii',\n 80: 'lxxx',\n 800: 'dccc',\n 9: 'ix',\n 90: 'xc',\n 900: 'cm',\n 1000: 'm'\n };\n function arabicToRoman(n) {\n var values = [\n 1000,\n 900,\n 800,\n 700,\n 600,\n 500,\n 400,\n 300,\n 200,\n 100,\n 90,\n 80,\n 70,\n 60,\n 50,\n 40,\n 30,\n 20,\n 10,\n 9,\n 8,\n 7,\n 6,\n 5,\n 4,\n 3,\n 2,\n 1\n ];\n var roman = '';\n while (n > 0) {\n if (n < values[0]) {\n values.shift();\n } else {\n roman += literals[values[0]];\n n -= values[0];\n }\n }\n return roman;\n }\n var UNDEFINED = 'undefined';\n function defined(value) {\n return typeof value !== UNDEFINED;\n }\n var defId = 1;\n function definitionId() {\n return 'kdef' + defId++;\n }\n var DEG_TO_RAD = Math.PI / 180;\n var MAX_NUM = Number.MAX_VALUE;\n var MIN_NUM = -Number.MAX_VALUE;\n function deg(radians) {\n return radians / DEG_TO_RAD;\n }\n var KEY_STR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var fromCharCode = String.fromCharCode;\n function encodeUTF8(input) {\n var output = '';\n for (var i = 0; i < input.length; i++) {\n var c = input.charCodeAt(i);\n if (c < 128) {\n output += fromCharCode(c);\n } else if (c < 2048) {\n output += fromCharCode(192 | c >>> 6);\n output += fromCharCode(128 | c & 63);\n } else if (c < 65536) {\n output += fromCharCode(224 | c >>> 12);\n output += fromCharCode(128 | c >>> 6 & 63);\n output += fromCharCode(128 | c & 63);\n }\n }\n return output;\n }\n function encodeBase64(input) {\n var output = '';\n var i = 0;\n var utfInput = encodeUTF8(input);\n while (i < utfInput.length) {\n var chr1 = utfInput.charCodeAt(i++);\n var chr2 = utfInput.charCodeAt(i++);\n var chr3 = utfInput.charCodeAt(i++);\n var enc1 = chr1 >> 2;\n var enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n var enc3 = (chr2 & 15) << 2 | chr3 >> 6;\n var enc4 = chr3 & 63;\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n output = output + KEY_STR.charAt(enc1) + KEY_STR.charAt(enc2) + KEY_STR.charAt(enc3) + KEY_STR.charAt(enc4);\n }\n return output;\n }\n function eventCoordinates(e) {\n if (defined((e.x || {}).location)) {\n return {\n x: e.x.location,\n y: e.y.location\n };\n }\n return {\n x: e.pageX || e.clientX || 0,\n y: e.pageY || e.clientY || 0\n };\n }\n function eventElement(e) {\n if (e === void 0) {\n e = {};\n }\n return e.touch ? e.touch.initialTouch : e.target;\n }\n function isTransparent(color) {\n return color === '' || color === null || color === 'none' || color === 'transparent' || !defined(color);\n }\n function last(array) {\n if (array) {\n return array[array.length - 1];\n }\n }\n function limitValue(value, min, max) {\n return Math.max(Math.min(value, max), min);\n }\n function mergeSort(a, cmp) {\n if (a.length < 2) {\n return a.slice();\n }\n function merge(a, b) {\n var r = [], ai = 0, bi = 0, i = 0;\n while (ai < a.length && bi < b.length) {\n if (cmp(a[ai], b[bi]) <= 0) {\n r[i++] = a[ai++];\n } else {\n r[i++] = b[bi++];\n }\n }\n if (ai < a.length) {\n r.push.apply(r, a.slice(ai));\n }\n if (bi < b.length) {\n r.push.apply(r, b.slice(bi));\n }\n return r;\n }\n return function sort(a) {\n if (a.length <= 1) {\n return a;\n }\n var m = Math.floor(a.length / 2);\n var left = a.slice(0, m);\n var right = a.slice(m);\n left = sort(left);\n right = sort(right);\n return merge(left, right);\n }(a);\n }\n function rad(degrees) {\n return degrees * DEG_TO_RAD;\n }\n function pow(p) {\n if (p) {\n return Math.pow(10, p);\n }\n return 1;\n }\n function round(value, precision) {\n var power = pow(precision);\n return Math.round(value * power) / power;\n }\n function valueOrDefault(value, defaultValue) {\n return defined(value) ? value : defaultValue;\n }\n function bindEvents(element, events) {\n for (var eventName in events) {\n var eventNames = eventName.trim().split(' ');\n for (var idx = 0; idx < eventNames.length; idx++) {\n element.addEventListener(eventNames[idx], events[eventName], false);\n }\n }\n }\n function elementOffset(element) {\n var box = element.getBoundingClientRect();\n var documentElement = document.documentElement;\n return {\n top: box.top + (window.pageYOffset || documentElement.scrollTop) - (documentElement.clientTop || 0),\n left: box.left + (window.pageXOffset || documentElement.scrollLeft) - (documentElement.clientLeft || 0)\n };\n }\n function elementStyles(element, styles) {\n var result = {};\n var style = window.getComputedStyle(element);\n var stylesArray = Array.isArray(styles) ? styles : [styles];\n for (var idx = 0; idx < stylesArray.length; idx++) {\n var field = stylesArray[idx];\n result[field] = style[field];\n }\n return result;\n }\n function getPixels(value) {\n if (isNaN(value)) {\n return value;\n }\n return value + 'px';\n }\n function elementSize(element, size) {\n if (size) {\n var width = size.width;\n var height = size.height;\n if (defined(width)) {\n element.style.width = getPixels(width);\n }\n if (defined(height)) {\n element.style.height = getPixels(height);\n }\n } else {\n var size$1 = elementStyles(element, [\n 'width',\n 'height'\n ]);\n return {\n width: parseInt(size$1.width, 10),\n height: parseInt(size$1.height, 10)\n };\n }\n }\n function unbindEvents(element, events) {\n if (events === void 0) {\n events = {};\n }\n for (var name in events) {\n var eventNames = name.trim().split(' ');\n for (var idx = 0; idx < eventNames.length; idx++) {\n element.removeEventListener(eventNames[idx], events[name], false);\n }\n }\n }\n var util = {\n append: append,\n arabicToRoman: arabicToRoman,\n createPromise: createPromise,\n defined: defined,\n definitionId: definitionId,\n deg: deg,\n encodeBase64: encodeBase64,\n eventCoordinates: eventCoordinates,\n eventElement: eventElement,\n isTransparent: isTransparent,\n last: last,\n limitValue: limitValue,\n mergeSort: mergeSort,\n promiseAll: promiseAll,\n rad: rad,\n round: round,\n valueOrDefault: valueOrDefault,\n bindEvents: bindEvents,\n elementOffset: elementOffset,\n elementSize: elementSize,\n elementStyles: elementStyles,\n unbindEvents: unbindEvents,\n DEG_TO_RAD: DEG_TO_RAD,\n MAX_NUM: MAX_NUM,\n MIN_NUM: MIN_NUM\n };\n var toString = {}.toString;\n var OptionsStore = Class.extend({\n init: function (options, prefix) {\n var this$1 = this;\n if (prefix === void 0) {\n prefix = '';\n }\n this.prefix = prefix;\n for (var field in options) {\n var member = options[field];\n member = this$1._wrap(member, field);\n this$1[field] = member;\n }\n },\n get: function (field) {\n var parts = field.split('.');\n var result = this;\n while (parts.length && result) {\n var part = parts.shift();\n result = result[part];\n }\n return result;\n },\n set: function (field, value) {\n var current = this.get(field);\n if (current !== value) {\n this._set(field, this._wrap(value, field));\n this.optionsChange({\n field: this.prefix + field,\n value: value\n });\n }\n },\n _set: function (field, value) {\n var this$1 = this;\n var composite = field.indexOf('.') >= 0;\n var parentObj = this;\n var fieldName = field;\n if (composite) {\n var parts = fieldName.split('.');\n var prefix = this.prefix;\n while (parts.length > 1) {\n fieldName = parts.shift();\n prefix += fieldName + '.';\n var obj = parentObj[fieldName];\n if (!obj) {\n obj = new OptionsStore({}, prefix);\n obj.addObserver(this$1);\n parentObj[fieldName] = obj;\n }\n parentObj = obj;\n }\n fieldName = parts[0];\n }\n parentObj._clear(fieldName);\n parentObj[fieldName] = value;\n },\n _clear: function (field) {\n var current = this[field];\n if (current && current.removeObserver) {\n current.removeObserver(this);\n }\n },\n _wrap: function (object, field) {\n var type = toString.call(object);\n var wrapped = object;\n if (wrapped !== null && defined(wrapped) && type === '[object Object]') {\n if (!(object instanceof OptionsStore) && !(object instanceof Class)) {\n wrapped = new OptionsStore(wrapped, this.prefix + field + '.');\n }\n wrapped.addObserver(this);\n }\n return wrapped;\n }\n });\n ObserversMixin.extend(OptionsStore.prototype);\n function setAccessor(field) {\n return function (value) {\n if (this[field] !== value) {\n this[field] = value;\n this.geometryChange();\n }\n return this;\n };\n }\n function getAccessor(field) {\n return function () {\n return this[field];\n };\n }\n function defineAccessors(fn, fields) {\n for (var i = 0; i < fields.length; i++) {\n var name = fields[i];\n var capitalized = name.charAt(0).toUpperCase() + name.substring(1, name.length);\n fn['set' + capitalized] = setAccessor(name);\n fn['get' + capitalized] = getAccessor(name);\n }\n }\n var Matrix = Class.extend({\n init: function (a, b, c, d, e, f) {\n if (a === void 0) {\n a = 0;\n }\n if (b === void 0) {\n b = 0;\n }\n if (c === void 0) {\n c = 0;\n }\n if (d === void 0) {\n d = 0;\n }\n if (e === void 0) {\n e = 0;\n }\n if (f === void 0) {\n f = 0;\n }\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n },\n multiplyCopy: function (matrix) {\n return new Matrix(this.a * matrix.a + this.c * matrix.b, this.b * matrix.a + this.d * matrix.b, this.a * matrix.c + this.c * matrix.d, this.b * matrix.c + this.d * matrix.d, this.a * matrix.e + this.c * matrix.f + this.e, this.b * matrix.e + this.d * matrix.f + this.f);\n },\n invert: function () {\n var ref = this;\n var a = ref.a;\n var b = ref.b;\n var d = ref.c;\n var e = ref.d;\n var g = ref.e;\n var h = ref.f;\n var det = a * e - b * d;\n if (det === 0) {\n return null;\n }\n return new Matrix(e / det, -b / det, -d / det, a / det, (d * h - e * g) / det, (b * g - a * h) / det);\n },\n clone: function () {\n return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);\n },\n equals: function (other) {\n if (!other) {\n return false;\n }\n return this.a === other.a && this.b === other.b && this.c === other.c && this.d === other.d && this.e === other.e && this.f === other.f;\n },\n round: function (precision) {\n this.a = round(this.a, precision);\n this.b = round(this.b, precision);\n this.c = round(this.c, precision);\n this.d = round(this.d, precision);\n this.e = round(this.e, precision);\n this.f = round(this.f, precision);\n return this;\n },\n toArray: function (precision) {\n var result = [\n this.a,\n this.b,\n this.c,\n this.d,\n this.e,\n this.f\n ];\n if (defined(precision)) {\n for (var i = 0; i < result.length; i++) {\n result[i] = round(result[i], precision);\n }\n }\n return result;\n },\n toString: function (precision, separator) {\n if (separator === void 0) {\n separator = ',';\n }\n return this.toArray(precision).join(separator);\n }\n });\n Matrix.translate = function (x, y) {\n return new Matrix(1, 0, 0, 1, x, y);\n };\n Matrix.unit = function () {\n return new Matrix(1, 0, 0, 1, 0, 0);\n };\n Matrix.rotate = function (angle, x, y) {\n var matrix = new Matrix();\n matrix.a = Math.cos(rad(angle));\n matrix.b = Math.sin(rad(angle));\n matrix.c = -matrix.b;\n matrix.d = matrix.a;\n matrix.e = x - x * matrix.a + y * matrix.b || 0;\n matrix.f = y - y * matrix.a - x * matrix.b || 0;\n return matrix;\n };\n Matrix.scale = function (scaleX, scaleY) {\n return new Matrix(scaleX, 0, 0, scaleY, 0, 0);\n };\n Matrix.IDENTITY = Matrix.unit();\n function toMatrix(transformation) {\n if (transformation && typeof transformation.matrix === 'function') {\n return transformation.matrix();\n }\n return transformation;\n }\n var Point = Class.extend({\n init: function (x, y) {\n if (x === void 0) {\n x = 0;\n }\n if (y === void 0) {\n y = 0;\n }\n this.x = x;\n this.y = y;\n },\n equals: function (other) {\n return other && other.x === this.x && other.y === this.y;\n },\n clone: function () {\n return new Point(this.x, this.y);\n },\n rotate: function (angle, origin) {\n var originPoint = Point.create(origin) || Point.ZERO;\n return this.transform(Matrix.rotate(angle, originPoint.x, originPoint.y));\n },\n translate: function (x, y) {\n this.x += x;\n this.y += y;\n this.geometryChange();\n return this;\n },\n translateWith: function (point) {\n return this.translate(point.x, point.y);\n },\n move: function (x, y) {\n this.x = this.y = 0;\n return this.translate(x, y);\n },\n scale: function (scaleX, scaleY) {\n if (scaleY === void 0) {\n scaleY = scaleX;\n }\n this.x *= scaleX;\n this.y *= scaleY;\n this.geometryChange();\n return this;\n },\n scaleCopy: function (scaleX, scaleY) {\n return this.clone().scale(scaleX, scaleY);\n },\n transform: function (transformation) {\n var matrix = toMatrix(transformation);\n var ref = this;\n var x = ref.x;\n var y = ref.y;\n this.x = matrix.a * x + matrix.c * y + matrix.e;\n this.y = matrix.b * x + matrix.d * y + matrix.f;\n this.geometryChange();\n return this;\n },\n transformCopy: function (transformation) {\n var point = this.clone();\n if (transformation) {\n point.transform(transformation);\n }\n return point;\n },\n distanceTo: function (point) {\n var dx = this.x - point.x;\n var dy = this.y - point.y;\n return Math.sqrt(dx * dx + dy * dy);\n },\n round: function (digits) {\n this.x = round(this.x, digits);\n this.y = round(this.y, digits);\n this.geometryChange();\n return this;\n },\n toArray: function (digits) {\n var doRound = defined(digits);\n var x = doRound ? round(this.x, digits) : this.x;\n var y = doRound ? round(this.y, digits) : this.y;\n return [\n x,\n y\n ];\n },\n toString: function (digits, separator) {\n if (separator === void 0) {\n separator = ' ';\n }\n var ref = this;\n var x = ref.x;\n var y = ref.y;\n if (defined(digits)) {\n x = round(x, digits);\n y = round(y, digits);\n }\n return x + separator + y;\n }\n });\n Point.create = function (arg0, arg1) {\n if (defined(arg0)) {\n if (arg0 instanceof Point) {\n return arg0;\n } else if (arguments.length === 1 && arg0.length === 2) {\n return new Point(arg0[0], arg0[1]);\n }\n return new Point(arg0, arg1);\n }\n };\n Point.min = function () {\n var arguments$1 = arguments;\n var minX = MAX_NUM;\n var minY = MAX_NUM;\n for (var i = 0; i < arguments.length; i++) {\n var point = arguments$1[i];\n minX = Math.min(point.x, minX);\n minY = Math.min(point.y, minY);\n }\n return new Point(minX, minY);\n };\n Point.max = function () {\n var arguments$1 = arguments;\n var maxX = MIN_NUM;\n var maxY = MIN_NUM;\n for (var i = 0; i < arguments.length; i++) {\n var point = arguments$1[i];\n maxX = Math.max(point.x, maxX);\n maxY = Math.max(point.y, maxY);\n }\n return new Point(maxX, maxY);\n };\n Point.minPoint = function () {\n return new Point(MIN_NUM, MIN_NUM);\n };\n Point.maxPoint = function () {\n return new Point(MAX_NUM, MAX_NUM);\n };\n if (Object.defineProperties) {\n Object.defineProperties(Point, {\n ZERO: {\n get: function () {\n return new Point(0, 0);\n }\n }\n });\n }\n defineAccessors(Point.prototype, [\n 'x',\n 'y'\n ]);\n ObserversMixin.extend(Point.prototype);\n var Size = Class.extend({\n init: function (width, height) {\n if (width === void 0) {\n width = 0;\n }\n if (height === void 0) {\n height = 0;\n }\n this.width = width;\n this.height = height;\n },\n equals: function (other) {\n return other && other.width === this.width && other.height === this.height;\n },\n clone: function () {\n return new Size(this.width, this.height);\n },\n toArray: function (digits) {\n var doRound = defined(digits);\n var width = doRound ? round(this.width, digits) : this.width;\n var height = doRound ? round(this.height, digits) : this.height;\n return [\n width,\n height\n ];\n }\n });\n Size.create = function (arg0, arg1) {\n if (defined(arg0)) {\n if (arg0 instanceof Size) {\n return arg0;\n } else if (arguments.length === 1 && arg0.length === 2) {\n return new Size(arg0[0], arg0[1]);\n }\n return new Size(arg0, arg1);\n }\n };\n if (Object.defineProperties) {\n Object.defineProperties(Size, {\n ZERO: {\n get: function () {\n return new Size(0, 0);\n }\n }\n });\n }\n defineAccessors(Size.prototype, [\n 'width',\n 'height'\n ]);\n ObserversMixin.extend(Size.prototype);\n var Rect = Class.extend({\n init: function (origin, size) {\n if (origin === void 0) {\n origin = new Point();\n }\n if (size === void 0) {\n size = new Size();\n }\n this.setOrigin(origin);\n this.setSize(size);\n },\n clone: function () {\n return new Rect(this.origin.clone(), this.size.clone());\n },\n equals: function (other) {\n return other && other.origin.equals(this.origin) && other.size.equals(this.size);\n },\n setOrigin: function (value) {\n this._observerField('origin', Point.create(value));\n this.geometryChange();\n return this;\n },\n getOrigin: function () {\n return this.origin;\n },\n setSize: function (value) {\n this._observerField('size', Size.create(value));\n this.geometryChange();\n return this;\n },\n getSize: function () {\n return this.size;\n },\n width: function () {\n return this.size.width;\n },\n height: function () {\n return this.size.height;\n },\n topLeft: function () {\n return this.origin.clone();\n },\n bottomRight: function () {\n return this.origin.clone().translate(this.width(), this.height());\n },\n topRight: function () {\n return this.origin.clone().translate(this.width(), 0);\n },\n bottomLeft: function () {\n return this.origin.clone().translate(0, this.height());\n },\n center: function () {\n return this.origin.clone().translate(this.width() / 2, this.height() / 2);\n },\n bbox: function (matrix) {\n var tl = this.topLeft().transformCopy(matrix);\n var tr = this.topRight().transformCopy(matrix);\n var br = this.bottomRight().transformCopy(matrix);\n var bl = this.bottomLeft().transformCopy(matrix);\n return Rect.fromPoints(tl, tr, br, bl);\n },\n transformCopy: function (m) {\n return Rect.fromPoints(this.topLeft().transform(m), this.bottomRight().transform(m));\n },\n expand: function (x, y) {\n if (y === void 0) {\n y = x;\n }\n this.size.width += 2 * x;\n this.size.height += 2 * y;\n this.origin.translate(-x, -y);\n return this;\n },\n expandCopy: function (x, y) {\n return this.clone().expand(x, y);\n },\n containsPoint: function (point) {\n var origin = this.origin;\n var bottomRight = this.bottomRight();\n return !(point.x < origin.x || point.y < origin.y || bottomRight.x < point.x || bottomRight.y < point.y);\n },\n _isOnPath: function (point, width) {\n var rectOuter = this.expandCopy(width, width);\n var rectInner = this.expandCopy(-width, -width);\n return rectOuter.containsPoint(point) && !rectInner.containsPoint(point);\n }\n });\n Rect.fromPoints = function () {\n var topLeft = Point.min.apply(null, arguments);\n var bottomRight = Point.max.apply(null, arguments);\n var size = new Size(bottomRight.x - topLeft.x, bottomRight.y - topLeft.y);\n return new Rect(topLeft, size);\n };\n Rect.union = function (a, b) {\n return Rect.fromPoints(Point.min(a.topLeft(), b.topLeft()), Point.max(a.bottomRight(), b.bottomRight()));\n };\n Rect.intersect = function (a, b) {\n var rect1 = {\n left: a.topLeft().x,\n top: a.topLeft().y,\n right: a.bottomRight().x,\n bottom: a.bottomRight().y\n };\n var rect2 = {\n left: b.topLeft().x,\n top: b.topLeft().y,\n right: b.bottomRight().x,\n bottom: b.bottomRight().y\n };\n if (rect1.left <= rect2.right && rect2.left <= rect1.right && rect1.top <= rect2.bottom && rect2.top <= rect1.bottom) {\n return Rect.fromPoints(new Point(Math.max(rect1.left, rect2.left), Math.max(rect1.top, rect2.top)), new Point(Math.min(rect1.right, rect2.right), Math.min(rect1.bottom, rect2.bottom)));\n }\n };\n ObserversMixin.extend(Rect.prototype);\n var Transformation = Class.extend({\n init: function (matrix) {\n if (matrix === void 0) {\n matrix = Matrix.unit();\n }\n this._matrix = matrix;\n },\n clone: function () {\n return new Transformation(this._matrix.clone());\n },\n equals: function (other) {\n return other && other._matrix.equals(this._matrix);\n },\n translate: function (x, y) {\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(x, y));\n this._optionsChange();\n return this;\n },\n scale: function (scaleX, scaleY, origin) {\n if (scaleY === void 0) {\n scaleY = scaleX;\n }\n if (origin === void 0) {\n origin = null;\n }\n var originPoint = origin;\n if (originPoint) {\n originPoint = Point.create(originPoint);\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(originPoint.x, originPoint.y));\n }\n this._matrix = this._matrix.multiplyCopy(Matrix.scale(scaleX, scaleY));\n if (originPoint) {\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(-originPoint.x, -originPoint.y));\n }\n this._optionsChange();\n return this;\n },\n rotate: function (angle, origin) {\n var originPoint = Point.create(origin) || Point.ZERO;\n this._matrix = this._matrix.multiplyCopy(Matrix.rotate(angle, originPoint.x, originPoint.y));\n this._optionsChange();\n return this;\n },\n multiply: function (transformation) {\n var matrix = toMatrix(transformation);\n this._matrix = this._matrix.multiplyCopy(matrix);\n this._optionsChange();\n return this;\n },\n matrix: function (value) {\n if (value) {\n this._matrix = value;\n this._optionsChange();\n return this;\n }\n return this._matrix;\n },\n _optionsChange: function () {\n this.optionsChange({\n field: 'transform',\n value: this\n });\n }\n });\n ObserversMixin.extend(Transformation.prototype);\n function transform(matrix) {\n if (matrix === null) {\n return null;\n }\n if (matrix instanceof Transformation) {\n return matrix;\n }\n return new Transformation(matrix);\n }\n var Element$1 = Class.extend({\n init: function (options) {\n this._initOptions(options);\n },\n _initOptions: function (options) {\n if (options === void 0) {\n options = {};\n }\n var clip = options.clip;\n var transform$$1 = options.transform;\n if (transform$$1) {\n options.transform = transform(transform$$1);\n }\n if (clip && !clip.id) {\n clip.id = definitionId();\n }\n this.options = new OptionsStore(options);\n this.options.addObserver(this);\n },\n transform: function (value) {\n if (defined(value)) {\n this.options.set('transform', transform(value));\n } else {\n return this.options.get('transform');\n }\n },\n parentTransform: function () {\n var element = this;\n var parentMatrix;\n while (element.parent) {\n element = element.parent;\n var transformation = element.transform();\n if (transformation) {\n parentMatrix = transformation.matrix().multiplyCopy(parentMatrix || Matrix.unit());\n }\n }\n if (parentMatrix) {\n return transform(parentMatrix);\n }\n },\n currentTransform: function (parentTransform) {\n if (parentTransform === void 0) {\n parentTransform = this.parentTransform();\n }\n var elementTransform = this.transform();\n var elementMatrix = toMatrix(elementTransform);\n var parentMatrix = toMatrix(parentTransform);\n var combinedMatrix;\n if (elementMatrix && parentMatrix) {\n combinedMatrix = parentMatrix.multiplyCopy(elementMatrix);\n } else {\n combinedMatrix = elementMatrix || parentMatrix;\n }\n if (combinedMatrix) {\n return transform(combinedMatrix);\n }\n },\n visible: function (value) {\n if (defined(value)) {\n this.options.set('visible', value);\n return this;\n }\n return this.options.get('visible') !== false;\n },\n clip: function (value) {\n var options = this.options;\n if (defined(value)) {\n if (value && !value.id) {\n value.id = definitionId();\n }\n options.set('clip', value);\n return this;\n }\n return options.get('clip');\n },\n opacity: function (value) {\n if (defined(value)) {\n this.options.set('opacity', value);\n return this;\n }\n return valueOrDefault(this.options.get('opacity'), 1);\n },\n clippedBBox: function (transformation) {\n var bbox = this._clippedBBox(transformation);\n if (bbox) {\n var clip = this.clip();\n return clip ? Rect.intersect(bbox, clip.bbox(transformation)) : bbox;\n }\n },\n containsPoint: function (point, parentTransform) {\n if (this.visible()) {\n var transform$$1 = this.currentTransform(parentTransform);\n var transformedPoint = point;\n if (transform$$1) {\n transformedPoint = point.transformCopy(transform$$1.matrix().invert());\n }\n return this._hasFill() && this._containsPoint(transformedPoint) || this._isOnPath && this._hasStroke() && this._isOnPath(transformedPoint);\n }\n return false;\n },\n _hasFill: function () {\n var fill = this.options.fill;\n return fill && !isTransparent(fill.color);\n },\n _hasStroke: function () {\n var stroke = this.options.stroke;\n return stroke && stroke.width > 0 && !isTransparent(stroke.color);\n },\n _clippedBBox: function (transformation) {\n return this.bbox(transformation);\n }\n });\n Element$1.prototype.nodeType = 'Element';\n ObserversMixin.extend(Element$1.prototype);\n function ellipseExtremeAngles(center, rx, ry, matrix) {\n var extremeX = 0;\n var extremeY = 0;\n if (matrix) {\n extremeX = Math.atan2(matrix.c * ry, matrix.a * rx);\n if (matrix.b !== 0) {\n extremeY = Math.atan2(matrix.d * ry, matrix.b * rx);\n }\n }\n return {\n x: extremeX,\n y: extremeY\n };\n }\n var PI_DIV_2 = Math.PI / 2;\n var Circle$2 = Class.extend({\n init: function (center, radius) {\n if (center === void 0) {\n center = new Point();\n }\n if (radius === void 0) {\n radius = 0;\n }\n this.setCenter(center);\n this.setRadius(radius);\n },\n setCenter: function (value) {\n this._observerField('center', Point.create(value));\n this.geometryChange();\n return this;\n },\n getCenter: function () {\n return this.center;\n },\n equals: function (other) {\n return other && other.center.equals(this.center) && other.radius === this.radius;\n },\n clone: function () {\n return new Circle$2(this.center.clone(), this.radius);\n },\n pointAt: function (angle) {\n return this._pointAt(rad(angle));\n },\n bbox: function (matrix) {\n var this$1 = this;\n var extremeAngles = ellipseExtremeAngles(this.center, this.radius, this.radius, matrix);\n var minPoint = Point.maxPoint();\n var maxPoint = Point.minPoint();\n for (var i = 0; i < 4; i++) {\n var currentPointX = this$1._pointAt(extremeAngles.x + i * PI_DIV_2).transformCopy(matrix);\n var currentPointY = this$1._pointAt(extremeAngles.y + i * PI_DIV_2).transformCopy(matrix);\n var currentPoint = new Point(currentPointX.x, currentPointY.y);\n minPoint = Point.min(minPoint, currentPoint);\n maxPoint = Point.max(maxPoint, currentPoint);\n }\n return Rect.fromPoints(minPoint, maxPoint);\n },\n _pointAt: function (angle) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n return new Point(center.x + radius * Math.cos(angle), center.y + radius * Math.sin(angle));\n },\n containsPoint: function (point) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n var inCircle = Math.pow(point.x - center.x, 2) + Math.pow(point.y - center.y, 2) <= Math.pow(radius, 2);\n return inCircle;\n },\n _isOnPath: function (point, width) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n var pointDistance = center.distanceTo(point);\n return radius - width <= pointDistance && pointDistance <= radius + width;\n }\n });\n defineAccessors(Circle$2.prototype, ['radius']);\n ObserversMixin.extend(Circle$2.prototype);\n var GRADIENT = 'Gradient';\n var Paintable = {\n extend: function (proto) {\n proto.fill = this.fill;\n proto.stroke = this.stroke;\n },\n fill: function (color, opacity) {\n var options = this.options;\n if (defined(color)) {\n if (color && color.nodeType !== GRADIENT) {\n var newFill = { color: color };\n if (defined(opacity)) {\n newFill.opacity = opacity;\n }\n options.set('fill', newFill);\n } else {\n options.set('fill', color);\n }\n return this;\n }\n return options.get('fill');\n },\n stroke: function (color, width, opacity) {\n if (defined(color)) {\n this.options.set('stroke.color', color);\n if (defined(width)) {\n this.options.set('stroke.width', width);\n }\n if (defined(opacity)) {\n this.options.set('stroke.opacity', opacity);\n }\n return this;\n }\n return this.options.get('stroke');\n }\n };\n var IDENTITY_MATRIX_HASH = Matrix.IDENTITY.toString();\n var Measurable = {\n extend: function (proto) {\n proto.bbox = this.bbox;\n proto.geometryChange = this.geometryChange;\n },\n bbox: function (transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n var matrixHash = combinedMatrix ? combinedMatrix.toString() : IDENTITY_MATRIX_HASH;\n var bbox;\n if (this._bboxCache && this._matrixHash === matrixHash) {\n bbox = this._bboxCache.clone();\n } else {\n bbox = this._bbox(combinedMatrix);\n this._bboxCache = bbox ? bbox.clone() : null;\n this._matrixHash = matrixHash;\n }\n var strokeWidth = this.options.get('stroke.width');\n if (strokeWidth && bbox) {\n bbox.expand(strokeWidth / 2);\n }\n return bbox;\n },\n geometryChange: function () {\n delete this._bboxCache;\n this.trigger('geometryChange', { element: this });\n }\n };\n function geometryAccessor(name) {\n var fieldName = '_' + name;\n return function (value) {\n if (defined(value)) {\n this._observerField(fieldName, value);\n this.geometryChange();\n return this;\n }\n return this[fieldName];\n };\n }\n function defineGeometryAccessors(fn, names) {\n for (var i = 0; i < names.length; i++) {\n fn[names[i]] = geometryAccessor(names[i]);\n }\n }\n var DEFAULT_STROKE = '#000';\n var Circle = Element$1.extend({\n init: function (geometry, options) {\n if (geometry === void 0) {\n geometry = new Circle$2();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke(DEFAULT_STROKE);\n }\n },\n rawBBox: function () {\n return this._geometry.bbox();\n },\n _bbox: function (matrix) {\n return this._geometry.bbox(matrix);\n },\n _containsPoint: function (point) {\n return this.geometry().containsPoint(point);\n },\n _isOnPath: function (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n });\n Circle.prototype.nodeType = 'Circle';\n Paintable.extend(Circle.prototype);\n Measurable.extend(Circle.prototype);\n defineGeometryAccessors(Circle.prototype, ['geometry']);\n var PRECISION = 10;\n function close(a, b, tolerance) {\n if (tolerance === void 0) {\n tolerance = PRECISION;\n }\n return round(Math.abs(a - b), tolerance) === 0;\n }\n function closeOrLess(a, b, tolerance) {\n return a < b || close(a, b, tolerance);\n }\n function lineIntersection(p0, p1, p2, p3) {\n var s1x = p1.x - p0.x;\n var s2x = p3.x - p2.x;\n var s1y = p1.y - p0.y;\n var s2y = p3.y - p2.y;\n var nx = p0.x - p2.x;\n var ny = p0.y - p2.y;\n var d = s1x * s2y - s2x * s1y;\n var s = (s1x * ny - s1y * nx) / d;\n var t = (s2x * ny - s2y * nx) / d;\n if (s >= 0 && s <= 1 && t >= 0 && t <= 1) {\n return new Point(p0.x + t * s1x, p0.y + t * s1y);\n }\n }\n var MAX_INTERVAL = 45;\n var pow$1 = Math.pow;\n var Arc$2 = Class.extend({\n init: function (center, options) {\n if (center === void 0) {\n center = new Point();\n }\n if (options === void 0) {\n options = {};\n }\n this.setCenter(center);\n this.radiusX = options.radiusX;\n this.radiusY = options.radiusY || options.radiusX;\n this.startAngle = options.startAngle;\n this.endAngle = options.endAngle;\n this.anticlockwise = options.anticlockwise || false;\n },\n clone: function () {\n return new Arc$2(this.center, {\n radiusX: this.radiusX,\n radiusY: this.radiusY,\n startAngle: this.startAngle,\n endAngle: this.endAngle,\n anticlockwise: this.anticlockwise\n });\n },\n setCenter: function (value) {\n this._observerField('center', Point.create(value));\n this.geometryChange();\n return this;\n },\n getCenter: function () {\n return this.center;\n },\n pointAt: function (angle) {\n var center = this.center;\n var radian = rad(angle);\n return new Point(center.x + this.radiusX * Math.cos(radian), center.y + this.radiusY * Math.sin(radian));\n },\n curvePoints: function () {\n var this$1 = this;\n var startAngle = this.startAngle;\n var dir = this.anticlockwise ? -1 : 1;\n var curvePoints = [this.pointAt(startAngle)];\n var interval = this._arcInterval();\n var intervalAngle = interval.endAngle - interval.startAngle;\n var subIntervalsCount = Math.ceil(intervalAngle / MAX_INTERVAL);\n var subIntervalAngle = intervalAngle / subIntervalsCount;\n var currentAngle = startAngle;\n for (var i = 1; i <= subIntervalsCount; i++) {\n var nextAngle = currentAngle + dir * subIntervalAngle;\n var points = this$1._intervalCurvePoints(currentAngle, nextAngle);\n curvePoints.push(points.cp1, points.cp2, points.p2);\n currentAngle = nextAngle;\n }\n return curvePoints;\n },\n bbox: function (matrix) {\n var this$1 = this;\n var interval = this._arcInterval();\n var startAngle = interval.startAngle;\n var endAngle = interval.endAngle;\n var extremeAngles = ellipseExtremeAngles(this.center, this.radiusX, this.radiusY, matrix);\n var extremeX = deg(extremeAngles.x);\n var extremeY = deg(extremeAngles.y);\n var endPoint = this.pointAt(endAngle).transformCopy(matrix);\n var currentAngleX = bboxStartAngle(extremeX, startAngle);\n var currentAngleY = bboxStartAngle(extremeY, startAngle);\n var currentPoint = this.pointAt(startAngle).transformCopy(matrix);\n var minPoint = Point.min(currentPoint, endPoint);\n var maxPoint = Point.max(currentPoint, endPoint);\n while (currentAngleX < endAngle || currentAngleY < endAngle) {\n var currentPointX = void 0;\n if (currentAngleX < endAngle) {\n currentPointX = this$1.pointAt(currentAngleX).transformCopy(matrix);\n currentAngleX += 90;\n }\n var currentPointY = void 0;\n if (currentAngleY < endAngle) {\n currentPointY = this$1.pointAt(currentAngleY).transformCopy(matrix);\n currentAngleY += 90;\n }\n currentPoint = new Point(currentPointX.x, currentPointY.y);\n minPoint = Point.min(minPoint, currentPoint);\n maxPoint = Point.max(maxPoint, currentPoint);\n }\n return Rect.fromPoints(minPoint, maxPoint);\n },\n _arcInterval: function () {\n var ref = this;\n var startAngle = ref.startAngle;\n var endAngle = ref.endAngle;\n var anticlockwise = ref.anticlockwise;\n if (anticlockwise) {\n var oldStart = startAngle;\n startAngle = endAngle;\n endAngle = oldStart;\n }\n if (startAngle > endAngle || anticlockwise && startAngle === endAngle) {\n endAngle += 360;\n }\n return {\n startAngle: startAngle,\n endAngle: endAngle\n };\n },\n _intervalCurvePoints: function (startAngle, endAngle) {\n var p1 = this.pointAt(startAngle);\n var p2 = this.pointAt(endAngle);\n var p1Derivative = this._derivativeAt(startAngle);\n var p2Derivative = this._derivativeAt(endAngle);\n var t = (rad(endAngle) - rad(startAngle)) / 3;\n var cp1 = new Point(p1.x + t * p1Derivative.x, p1.y + t * p1Derivative.y);\n var cp2 = new Point(p2.x - t * p2Derivative.x, p2.y - t * p2Derivative.y);\n return {\n p1: p1,\n cp1: cp1,\n cp2: cp2,\n p2: p2\n };\n },\n _derivativeAt: function (angle) {\n var radian = rad(angle);\n return new Point(-this.radiusX * Math.sin(radian), this.radiusY * Math.cos(radian));\n },\n containsPoint: function (point) {\n var interval = this._arcInterval();\n var intervalAngle = interval.endAngle - interval.startAngle;\n var ref = this;\n var center = ref.center;\n var radiusX = ref.radiusX;\n var radiusY = ref.radiusY;\n var distance = center.distanceTo(point);\n var angleRad = Math.atan2(point.y - center.y, point.x - center.x);\n var pointRadius = radiusX * radiusY / Math.sqrt(pow$1(radiusX, 2) * pow$1(Math.sin(angleRad), 2) + pow$1(radiusY, 2) * pow$1(Math.cos(angleRad), 2));\n var startPoint = this.pointAt(this.startAngle).round(PRECISION);\n var endPoint = this.pointAt(this.endAngle).round(PRECISION);\n var intersection = lineIntersection(center, point.round(PRECISION), startPoint, endPoint);\n var containsPoint;\n if (intervalAngle < 180) {\n containsPoint = intersection && closeOrLess(center.distanceTo(intersection), distance) && closeOrLess(distance, pointRadius);\n } else {\n var angle = calculateAngle(center.x, center.y, radiusX, radiusY, point.x, point.y);\n if (angle !== 360) {\n angle = (360 + angle) % 360;\n }\n var inAngleRange = interval.startAngle <= angle && angle <= interval.endAngle;\n containsPoint = inAngleRange && closeOrLess(distance, pointRadius) || !inAngleRange && (!intersection || intersection.equals(point));\n }\n return containsPoint;\n },\n _isOnPath: function (point, width) {\n var interval = this._arcInterval();\n var center = this.center;\n var angle = calculateAngle(center.x, center.y, this.radiusX, this.radiusY, point.x, point.y);\n if (angle !== 360) {\n angle = (360 + angle) % 360;\n }\n var inAngleRange = interval.startAngle <= angle && angle <= interval.endAngle;\n return inAngleRange && this.pointAt(angle).distanceTo(point) <= width;\n }\n });\n Arc$2.fromPoints = function (start, end, rx, ry, largeArc, swipe) {\n var arcParameters = normalizeArcParameters({\n x1: start.x,\n y1: start.y,\n x2: end.x,\n y2: end.y,\n rx: rx,\n ry: ry,\n largeArc: largeArc,\n swipe: swipe\n });\n return new Arc$2(arcParameters.center, {\n startAngle: arcParameters.startAngle,\n endAngle: arcParameters.endAngle,\n radiusX: rx,\n radiusY: ry,\n anticlockwise: swipe === 0\n });\n };\n defineAccessors(Arc$2.prototype, [\n 'radiusX',\n 'radiusY',\n 'startAngle',\n 'endAngle',\n 'anticlockwise'\n ]);\n ObserversMixin.extend(Arc$2.prototype);\n function elipseAngle(start, end, swipe) {\n var endAngle = end;\n if (start > endAngle) {\n endAngle += 360;\n }\n var alpha = Math.abs(endAngle - start);\n if (!swipe) {\n alpha = 360 - alpha;\n }\n return alpha;\n }\n function calculateAngle(cx, cy, rx, ry, x, y) {\n var cos = round((x - cx) / rx, 3);\n var sin = round((y - cy) / ry, 3);\n return round(deg(Math.atan2(sin, cos)));\n }\n function normalizeArcParameters(parameters) {\n var x1 = parameters.x1;\n var y1 = parameters.y1;\n var x2 = parameters.x2;\n var y2 = parameters.y2;\n var rx = parameters.rx;\n var ry = parameters.ry;\n var largeArc = parameters.largeArc;\n var swipe = parameters.swipe;\n var cx, cy;\n var cx1, cy1;\n var a, b, c, sqrt;\n if (y1 !== y2) {\n var x21 = x2 - x1;\n var y21 = y2 - y1;\n var rx2 = pow$1(rx, 2), ry2 = pow$1(ry, 2);\n var k = (ry2 * x21 * (x1 + x2) + rx2 * y21 * (y1 + y2)) / (2 * rx2 * y21);\n var yk2 = k - y2;\n var l = -(x21 * ry2) / (rx2 * y21);\n a = 1 / rx2 + pow$1(l, 2) / ry2;\n b = 2 * (l * yk2 / ry2 - x2 / rx2);\n c = pow$1(x2, 2) / rx2 + pow$1(yk2, 2) / ry2 - 1;\n sqrt = Math.sqrt(pow$1(b, 2) - 4 * a * c);\n cx = (-b - sqrt) / (2 * a);\n cy = k + l * cx;\n cx1 = (-b + sqrt) / (2 * a);\n cy1 = k + l * cx1;\n } else if (x1 !== x2) {\n b = -2 * y2;\n c = pow$1((x2 - x1) * ry / (2 * rx), 2) + pow$1(y2, 2) - pow$1(ry, 2);\n sqrt = Math.sqrt(pow$1(b, 2) - 4 * c);\n cx = cx1 = (x1 + x2) / 2;\n cy = (-b - sqrt) / 2;\n cy1 = (-b + sqrt) / 2;\n } else {\n return false;\n }\n var start = calculateAngle(cx, cy, rx, ry, x1, y1);\n var end = calculateAngle(cx, cy, rx, ry, x2, y2);\n var alpha = elipseAngle(start, end, swipe);\n if (largeArc && alpha <= 180 || !largeArc && alpha > 180) {\n cx = cx1;\n cy = cy1;\n start = calculateAngle(cx, cy, rx, ry, x1, y1);\n end = calculateAngle(cx, cy, rx, ry, x2, y2);\n }\n return {\n center: new Point(cx, cy),\n startAngle: start,\n endAngle: end\n };\n }\n function bboxStartAngle(angle, start) {\n var startAngle = angle;\n while (startAngle < start) {\n startAngle += 90;\n }\n return startAngle;\n }\n var push = [].push;\n var pop = [].pop;\n var splice = [].splice;\n var shift = [].shift;\n var slice = [].slice;\n var unshift = [].unshift;\n var ElementsArray = Class.extend({\n init: function (array) {\n if (array === void 0) {\n array = [];\n }\n this.length = 0;\n this._splice(0, array.length, array);\n },\n elements: function (value) {\n if (value) {\n this._splice(0, this.length, value);\n this._change();\n return this;\n }\n return this.slice(0);\n },\n push: function () {\n var elements = arguments;\n var result = push.apply(this, elements);\n this._add(elements);\n return result;\n },\n slice: function () {\n return slice.call(this);\n },\n pop: function () {\n var length = this.length;\n var result = pop.apply(this);\n if (length) {\n this._remove([result]);\n }\n return result;\n },\n splice: function (index, howMany) {\n var elements = slice.call(arguments, 2);\n var result = this._splice(index, howMany, elements);\n this._change();\n return result;\n },\n shift: function () {\n var length = this.length;\n var result = shift.apply(this);\n if (length) {\n this._remove([result]);\n }\n return result;\n },\n unshift: function () {\n var elements = arguments;\n var result = unshift.apply(this, elements);\n this._add(elements);\n return result;\n },\n indexOf: function (element) {\n var this$1 = this;\n var length = this.length;\n for (var idx = 0; idx < length; idx++) {\n if (this$1[idx] === element) {\n return idx;\n }\n }\n return -1;\n },\n _splice: function (index, howMany, elements) {\n var result = splice.apply(this, [\n index,\n howMany\n ].concat(elements));\n this._clearObserver(result);\n this._setObserver(elements);\n return result;\n },\n _add: function (elements) {\n this._setObserver(elements);\n this._change();\n },\n _remove: function (elements) {\n this._clearObserver(elements);\n this._change();\n },\n _setObserver: function (elements) {\n var this$1 = this;\n for (var idx = 0; idx < elements.length; idx++) {\n elements[idx].addObserver(this$1);\n }\n },\n _clearObserver: function (elements) {\n var this$1 = this;\n for (var idx = 0; idx < elements.length; idx++) {\n elements[idx].removeObserver(this$1);\n }\n },\n _change: function () {\n }\n });\n ObserversMixin.extend(ElementsArray.prototype);\n var GeometryElementsArray = ElementsArray.extend({\n _change: function () {\n this.geometryChange();\n }\n });\n function pointAccessor(name) {\n var fieldName = '_' + name;\n return function (value) {\n if (defined(value)) {\n this._observerField(fieldName, Point.create(value));\n this.geometryChange();\n return this;\n }\n return this[fieldName];\n };\n }\n function definePointAccessors(fn, names) {\n for (var i = 0; i < names.length; i++) {\n fn[names[i]] = pointAccessor(names[i]);\n }\n }\n function isOutOfEndPoint(endPoint, controlPoint, point) {\n var angle = deg(Math.atan2(controlPoint.y - endPoint.y, controlPoint.x - endPoint.x));\n var rotatedPoint = point.transformCopy(transform().rotate(-angle, endPoint));\n return rotatedPoint.x < endPoint.x;\n }\n function calculateCurveAt(t, field, points) {\n var t1 = 1 - t;\n return Math.pow(t1, 3) * points[0][field] + 3 * Math.pow(t1, 2) * t * points[1][field] + 3 * Math.pow(t, 2) * t1 * points[2][field] + Math.pow(t, 3) * points[3][field];\n }\n function toCubicPolynomial(points, field) {\n return [\n -points[0][field] + 3 * points[1][field] - 3 * points[2][field] + points[3][field],\n 3 * (points[0][field] - 2 * points[1][field] + points[2][field]),\n 3 * (-points[0][field] + points[1][field]),\n points[0][field]\n ];\n }\n var ComplexNumber = Class.extend({\n init: function (real, img) {\n if (real === void 0) {\n real = 0;\n }\n if (img === void 0) {\n img = 0;\n }\n this.real = real;\n this.img = img;\n },\n add: function (cNumber) {\n return new ComplexNumber(round(this.real + cNumber.real, PRECISION), round(this.img + cNumber.img, PRECISION));\n },\n addConstant: function (value) {\n return new ComplexNumber(this.real + value, this.img);\n },\n negate: function () {\n return new ComplexNumber(-this.real, -this.img);\n },\n multiply: function (cNumber) {\n return new ComplexNumber(this.real * cNumber.real - this.img * cNumber.img, this.real * cNumber.img + this.img * cNumber.real);\n },\n multiplyConstant: function (value) {\n return new ComplexNumber(this.real * value, this.img * value);\n },\n nthRoot: function (n) {\n var rad$$1 = Math.atan2(this.img, this.real);\n var r = Math.sqrt(Math.pow(this.img, 2) + Math.pow(this.real, 2));\n var nthR = Math.pow(r, 1 / n);\n return new ComplexNumber(nthR * Math.cos(rad$$1 / n), nthR * Math.sin(rad$$1 / n));\n },\n equals: function (cNumber) {\n return this.real === cNumber.real && this.img === cNumber.img;\n },\n isReal: function () {\n return this.img === 0;\n }\n });\n function numberSign(x) {\n return x < 0 ? -1 : 1;\n }\n function solveQuadraticEquation(a, b, c) {\n var squareRoot = Math.sqrt(Math.pow(b, 2) - 4 * a * c);\n return [\n (-b + squareRoot) / (2 * a),\n (-b - squareRoot) / (2 * a)\n ];\n }\n function solveCubicEquation(a, b, c, d) {\n if (a === 0) {\n return solveQuadraticEquation(b, c, d);\n }\n var p = (3 * a * c - Math.pow(b, 2)) / (3 * Math.pow(a, 2));\n var q = (2 * Math.pow(b, 3) - 9 * a * b * c + 27 * Math.pow(a, 2) * d) / (27 * Math.pow(a, 3));\n var Q = Math.pow(p / 3, 3) + Math.pow(q / 2, 2);\n var i = new ComplexNumber(0, 1);\n var b3a = -b / (3 * a);\n var x1, x2, y1, y2, y3, z1, z2;\n if (Q < 0) {\n x1 = new ComplexNumber(-q / 2, Math.sqrt(-Q)).nthRoot(3);\n x2 = new ComplexNumber(-q / 2, -Math.sqrt(-Q)).nthRoot(3);\n } else {\n x1 = -q / 2 + Math.sqrt(Q);\n x1 = new ComplexNumber(numberSign(x1) * Math.pow(Math.abs(x1), 1 / 3));\n x2 = -q / 2 - Math.sqrt(Q);\n x2 = new ComplexNumber(numberSign(x2) * Math.pow(Math.abs(x2), 1 / 3));\n }\n y1 = x1.add(x2);\n z1 = x1.add(x2).multiplyConstant(-1 / 2);\n z2 = x1.add(x2.negate()).multiplyConstant(Math.sqrt(3) / 2);\n y2 = z1.add(i.multiply(z2));\n y3 = z1.add(i.negate().multiply(z2));\n var result = [];\n if (y1.isReal()) {\n result.push(round(y1.real + b3a, PRECISION));\n }\n if (y2.isReal()) {\n result.push(round(y2.real + b3a, PRECISION));\n }\n if (y3.isReal()) {\n result.push(round(y3.real + b3a, PRECISION));\n }\n return result;\n }\n function hasRootsInRange(points, point, field, rootField, range) {\n var polynomial = toCubicPolynomial(points, rootField);\n var roots = solveCubicEquation(polynomial[0], polynomial[1], polynomial[2], polynomial[3] - point[rootField]);\n var intersection;\n for (var idx = 0; idx < roots.length; idx++) {\n if (0 <= roots[idx] && roots[idx] <= 1) {\n intersection = calculateCurveAt(roots[idx], field, points);\n if (Math.abs(intersection - point[field]) <= range) {\n return true;\n }\n }\n }\n }\n function curveIntersectionsCount(points, point, bbox) {\n var polynomial = toCubicPolynomial(points, 'x');\n var roots = solveCubicEquation(polynomial[0], polynomial[1], polynomial[2], polynomial[3] - point.x);\n var rayIntersection, intersectsRay;\n var count = 0;\n for (var i = 0; i < roots.length; i++) {\n rayIntersection = calculateCurveAt(roots[i], 'y', points);\n intersectsRay = close(rayIntersection, point.y) || rayIntersection > point.y;\n if (intersectsRay && ((roots[i] === 0 || roots[i] === 1) && bbox.bottomRight().x > point.x || 0 < roots[i] && roots[i] < 1)) {\n count++;\n }\n }\n return count;\n }\n function lineIntersectionsCount(a, b, point) {\n var intersects;\n if (a.x !== b.x) {\n var minX = Math.min(a.x, b.x);\n var maxX = Math.max(a.x, b.x);\n var minY = Math.min(a.y, b.y);\n var maxY = Math.max(a.y, b.y);\n var inRange = minX <= point.x && point.x < maxX;\n if (minY === maxY) {\n intersects = point.y <= minY && inRange;\n } else {\n intersects = inRange && (maxY - minY) * ((a.x - b.x) * (a.y - b.y) > 0 ? point.x - minX : maxX - point.x) / (maxX - minX) + minY - point.y >= 0;\n }\n }\n return intersects ? 1 : 0;\n }\n var Segment = Class.extend({\n init: function (anchor, controlIn, controlOut) {\n this.anchor(anchor || new Point());\n this.controlIn(controlIn);\n this.controlOut(controlOut);\n },\n bboxTo: function (toSegment, matrix) {\n var segmentAnchor = this.anchor().transformCopy(matrix);\n var toSegmentAnchor = toSegment.anchor().transformCopy(matrix);\n var rect;\n if (this.controlOut() && toSegment.controlIn()) {\n rect = this._curveBoundingBox(segmentAnchor, this.controlOut().transformCopy(matrix), toSegment.controlIn().transformCopy(matrix), toSegmentAnchor);\n } else {\n rect = this._lineBoundingBox(segmentAnchor, toSegmentAnchor);\n }\n return rect;\n },\n _lineBoundingBox: function (p1, p2) {\n return Rect.fromPoints(p1, p2);\n },\n _curveBoundingBox: function (p1, cp1, cp2, p2) {\n var points = [\n p1,\n cp1,\n cp2,\n p2\n ];\n var extremesX = this._curveExtremesFor(points, 'x');\n var extremesY = this._curveExtremesFor(points, 'y');\n var xLimits = arrayLimits([\n extremesX.min,\n extremesX.max,\n p1.x,\n p2.x\n ]);\n var yLimits = arrayLimits([\n extremesY.min,\n extremesY.max,\n p1.y,\n p2.y\n ]);\n return Rect.fromPoints(new Point(xLimits.min, yLimits.min), new Point(xLimits.max, yLimits.max));\n },\n _curveExtremesFor: function (points, field) {\n var extremes = this._curveExtremes(points[0][field], points[1][field], points[2][field], points[3][field]);\n return {\n min: calculateCurveAt(extremes.min, field, points),\n max: calculateCurveAt(extremes.max, field, points)\n };\n },\n _curveExtremes: function (x1, x2, x3, x4) {\n var a = x1 - 3 * x2 + 3 * x3 - x4;\n var b = -2 * (x1 - 2 * x2 + x3);\n var c = x1 - x2;\n var sqrt = Math.sqrt(b * b - 4 * a * c);\n var t1 = 0;\n var t2 = 1;\n if (a === 0) {\n if (b !== 0) {\n t1 = t2 = -c / b;\n }\n } else if (!isNaN(sqrt)) {\n t1 = (-b + sqrt) / (2 * a);\n t2 = (-b - sqrt) / (2 * a);\n }\n var min = Math.max(Math.min(t1, t2), 0);\n if (min < 0 || min > 1) {\n min = 0;\n }\n var max = Math.min(Math.max(t1, t2), 1);\n if (max > 1 || max < 0) {\n max = 1;\n }\n return {\n min: min,\n max: max\n };\n },\n _intersectionsTo: function (segment, point) {\n var intersectionsCount;\n if (this.controlOut() && segment.controlIn()) {\n intersectionsCount = curveIntersectionsCount([\n this.anchor(),\n this.controlOut(),\n segment.controlIn(),\n segment.anchor()\n ], point, this.bboxTo(segment));\n } else {\n intersectionsCount = lineIntersectionsCount(this.anchor(), segment.anchor(), point);\n }\n return intersectionsCount;\n },\n _isOnCurveTo: function (segment, point, width, endSegment) {\n var bbox = this.bboxTo(segment).expand(width, width);\n if (bbox.containsPoint(point)) {\n var p1 = this.anchor();\n var p2 = this.controlOut();\n var p3 = segment.controlIn();\n var p4 = segment.anchor();\n if (endSegment === 'start' && p1.distanceTo(point) <= width) {\n return !isOutOfEndPoint(p1, p2, point);\n } else if (endSegment === 'end' && p4.distanceTo(point) <= width) {\n return !isOutOfEndPoint(p4, p3, point);\n }\n var points = [\n p1,\n p2,\n p3,\n p4\n ];\n if (hasRootsInRange(points, point, 'x', 'y', width) || hasRootsInRange(points, point, 'y', 'x', width)) {\n return true;\n }\n var rotation = transform().rotate(45, point);\n var rotatedPoints = [\n p1.transformCopy(rotation),\n p2.transformCopy(rotation),\n p3.transformCopy(rotation),\n p4.transformCopy(rotation)\n ];\n return hasRootsInRange(rotatedPoints, point, 'x', 'y', width) || hasRootsInRange(rotatedPoints, point, 'y', 'x', width);\n }\n },\n _isOnLineTo: function (segment, point, width) {\n var p1 = this.anchor();\n var p2 = segment.anchor();\n var angle = deg(Math.atan2(p2.y - p1.y, p2.x - p1.x));\n var rect = new Rect([\n p1.x,\n p1.y - width / 2\n ], [\n p1.distanceTo(p2),\n width\n ]);\n return rect.containsPoint(point.transformCopy(transform().rotate(-angle, p1)));\n },\n _isOnPathTo: function (segment, point, width, endSegment) {\n var isOnPath;\n if (this.controlOut() && segment.controlIn()) {\n isOnPath = this._isOnCurveTo(segment, point, width / 2, endSegment);\n } else {\n isOnPath = this._isOnLineTo(segment, point, width);\n }\n return isOnPath;\n }\n });\n definePointAccessors(Segment.prototype, [\n 'anchor',\n 'controlIn',\n 'controlOut'\n ]);\n ObserversMixin.extend(Segment.prototype);\n function arrayLimits(arr) {\n var length = arr.length;\n var min = MAX_NUM;\n var max = MIN_NUM;\n for (var i = 0; i < length; i++) {\n max = Math.max(max, arr[i]);\n min = Math.min(min, arr[i]);\n }\n return {\n min: min,\n max: max\n };\n }\n var Path = Element$1.extend({\n init: function (options) {\n Element$1.fn.init.call(this, options);\n this.segments = new GeometryElementsArray();\n this.segments.addObserver(this);\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n if (!defined(this.options.stroke.lineJoin)) {\n this.options.set('stroke.lineJoin', 'miter');\n }\n }\n },\n moveTo: function (x, y) {\n this.suspend();\n this.segments.elements([]);\n this.resume();\n this.lineTo(x, y);\n return this;\n },\n lineTo: function (x, y) {\n var point = defined(y) ? new Point(x, y) : x;\n var segment = new Segment(point);\n this.segments.push(segment);\n return this;\n },\n curveTo: function (controlOut, controlIn, point) {\n if (this.segments.length > 0) {\n var lastSegment = last(this.segments);\n var segment = new Segment(point, controlIn);\n this.suspend();\n lastSegment.controlOut(controlOut);\n this.resume();\n this.segments.push(segment);\n }\n return this;\n },\n arc: function (startAngle, endAngle, radiusX, radiusY, anticlockwise) {\n if (this.segments.length > 0) {\n var lastSegment = last(this.segments);\n var anchor = lastSegment.anchor();\n var start = rad(startAngle);\n var center = new Point(anchor.x - radiusX * Math.cos(start), anchor.y - radiusY * Math.sin(start));\n var arc = new Arc$2(center, {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: radiusX,\n radiusY: radiusY,\n anticlockwise: anticlockwise\n });\n this._addArcSegments(arc);\n }\n return this;\n },\n arcTo: function (end, rx, ry, largeArc, swipe) {\n if (this.segments.length > 0) {\n var lastSegment = last(this.segments);\n var anchor = lastSegment.anchor();\n var arc = Arc$2.fromPoints(anchor, end, rx, ry, largeArc, swipe);\n this._addArcSegments(arc);\n }\n return this;\n },\n _addArcSegments: function (arc) {\n var this$1 = this;\n this.suspend();\n var curvePoints = arc.curvePoints();\n for (var i = 1; i < curvePoints.length; i += 3) {\n this$1.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\n }\n this.resume();\n this.geometryChange();\n },\n close: function () {\n this.options.closed = true;\n this.geometryChange();\n return this;\n },\n rawBBox: function () {\n return this._bbox();\n },\n _containsPoint: function (point) {\n var segments = this.segments;\n var length = segments.length;\n var intersectionsCount = 0;\n var previous, current;\n for (var idx = 1; idx < length; idx++) {\n previous = segments[idx - 1];\n current = segments[idx];\n intersectionsCount += previous._intersectionsTo(current, point);\n }\n if (this.options.closed || !segments[0].anchor().equals(segments[length - 1].anchor())) {\n intersectionsCount += lineIntersectionsCount(segments[0].anchor(), segments[length - 1].anchor(), point);\n }\n return intersectionsCount % 2 !== 0;\n },\n _isOnPath: function (point, width) {\n var segments = this.segments;\n var length = segments.length;\n var pathWidth = width || this.options.stroke.width;\n if (length > 1) {\n if (segments[0]._isOnPathTo(segments[1], point, pathWidth, 'start')) {\n return true;\n }\n for (var idx = 2; idx <= length - 2; idx++) {\n if (segments[idx - 1]._isOnPathTo(segments[idx], point, pathWidth)) {\n return true;\n }\n }\n if (segments[length - 2]._isOnPathTo(segments[length - 1], point, pathWidth, 'end')) {\n return true;\n }\n }\n return false;\n },\n _bbox: function (matrix) {\n var segments = this.segments;\n var length = segments.length;\n var boundingBox;\n if (length === 1) {\n var anchor = segments[0].anchor().transformCopy(matrix);\n boundingBox = new Rect(anchor, Size.ZERO);\n } else if (length > 0) {\n for (var i = 1; i < length; i++) {\n var segmentBox = segments[i - 1].bboxTo(segments[i], matrix);\n if (boundingBox) {\n boundingBox = Rect.union(boundingBox, segmentBox);\n } else {\n boundingBox = segmentBox;\n }\n }\n }\n return boundingBox;\n }\n });\n Path.fromRect = function (rect, options) {\n return new Path(options).moveTo(rect.topLeft()).lineTo(rect.topRight()).lineTo(rect.bottomRight()).lineTo(rect.bottomLeft()).close();\n };\n Path.fromPoints = function (points, options) {\n if (points) {\n var path = new Path(options);\n for (var i = 0; i < points.length; i++) {\n var point = Point.create(points[i]);\n if (point) {\n if (i === 0) {\n path.moveTo(point);\n } else {\n path.lineTo(point);\n }\n }\n }\n return path;\n }\n };\n Path.fromArc = function (arc, options) {\n var path = new Path(options);\n var startAngle = arc.startAngle;\n var start = arc.pointAt(startAngle);\n path.moveTo(start.x, start.y);\n path.arc(startAngle, arc.endAngle, arc.radiusX, arc.radiusY, arc.anticlockwise);\n return path;\n };\n Path.prototype.nodeType = 'Path';\n Paintable.extend(Path.prototype);\n Measurable.extend(Path.prototype);\n var DEFAULT_STROKE$1 = '#000';\n var Arc = Element$1.extend({\n init: function (geometry, options) {\n if (geometry === void 0) {\n geometry = new Arc$2();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke(DEFAULT_STROKE$1);\n }\n },\n _bbox: function (matrix) {\n return this._geometry.bbox(matrix);\n },\n rawBBox: function () {\n return this.geometry().bbox();\n },\n toPath: function () {\n var path = new Path();\n var curvePoints = this.geometry().curvePoints();\n if (curvePoints.length > 0) {\n path.moveTo(curvePoints[0].x, curvePoints[0].y);\n for (var i = 1; i < curvePoints.length; i += 3) {\n path.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\n }\n }\n return path;\n },\n _containsPoint: function (point) {\n return this.geometry().containsPoint(point);\n },\n _isOnPath: function (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n });\n Arc.prototype.nodeType = 'Arc';\n Paintable.extend(Arc.prototype);\n Measurable.extend(Arc.prototype);\n defineGeometryAccessors(Arc.prototype, ['geometry']);\n function elementsBoundingBox(elements, applyTransform, transformation) {\n var boundingBox;\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n if (element.visible()) {\n var elementBoundingBox = applyTransform ? element.bbox(transformation) : element.rawBBox();\n if (elementBoundingBox) {\n if (boundingBox) {\n boundingBox = Rect.union(boundingBox, elementBoundingBox);\n } else {\n boundingBox = elementBoundingBox;\n }\n }\n }\n }\n return boundingBox;\n }\n function elementsClippedBoundingBox(elements, transformation) {\n var boundingBox;\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n if (element.visible()) {\n var elementBoundingBox = element.clippedBBox(transformation);\n if (elementBoundingBox) {\n if (boundingBox) {\n boundingBox = Rect.union(boundingBox, elementBoundingBox);\n } else {\n boundingBox = elementBoundingBox;\n }\n }\n }\n }\n return boundingBox;\n }\n var MultiPath = Element$1.extend({\n init: function (options) {\n Element$1.fn.init.call(this, options);\n this.paths = new GeometryElementsArray();\n this.paths.addObserver(this);\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n }\n },\n moveTo: function (x, y) {\n var path = new Path();\n path.moveTo(x, y);\n this.paths.push(path);\n return this;\n },\n lineTo: function (x, y) {\n if (this.paths.length > 0) {\n last(this.paths).lineTo(x, y);\n }\n return this;\n },\n curveTo: function (controlOut, controlIn, point) {\n if (this.paths.length > 0) {\n last(this.paths).curveTo(controlOut, controlIn, point);\n }\n return this;\n },\n arc: function (startAngle, endAngle, radiusX, radiusY, anticlockwise) {\n if (this.paths.length > 0) {\n last(this.paths).arc(startAngle, endAngle, radiusX, radiusY, anticlockwise);\n }\n return this;\n },\n arcTo: function (end, rx, ry, largeArc, swipe) {\n if (this.paths.length > 0) {\n last(this.paths).arcTo(end, rx, ry, largeArc, swipe);\n }\n return this;\n },\n close: function () {\n if (this.paths.length > 0) {\n last(this.paths).close();\n }\n return this;\n },\n _bbox: function (matrix) {\n return elementsBoundingBox(this.paths, true, matrix);\n },\n rawBBox: function () {\n return elementsBoundingBox(this.paths, false);\n },\n _containsPoint: function (point) {\n var paths = this.paths;\n for (var idx = 0; idx < paths.length; idx++) {\n if (paths[idx]._containsPoint(point)) {\n return true;\n }\n }\n return false;\n },\n _isOnPath: function (point) {\n var paths = this.paths;\n var width = this.options.stroke.width;\n for (var idx = 0; idx < paths.length; idx++) {\n if (paths[idx]._isOnPath(point, width)) {\n return true;\n }\n }\n return false;\n },\n _clippedBBox: function (transformation) {\n return elementsClippedBoundingBox(this.paths, this.currentTransform(transformation));\n }\n });\n MultiPath.prototype.nodeType = 'MultiPath';\n Paintable.extend(MultiPath.prototype);\n Measurable.extend(MultiPath.prototype);\n var DEFAULT_FONT = '12px sans-serif';\n var DEFAULT_FILL = '#000';\n var Text = Element$1.extend({\n init: function (content, position, options) {\n if (position === void 0) {\n position = new Point();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.content(content);\n this.position(position);\n if (!this.options.font) {\n this.options.font = DEFAULT_FONT;\n }\n if (!defined(this.options.fill)) {\n this.fill(DEFAULT_FILL);\n }\n },\n content: function (value) {\n if (defined(value)) {\n this.options.set('content', value);\n return this;\n }\n return this.options.get('content');\n },\n measure: function () {\n var metrics = kendoUtil.measureText(this.content(), { font: this.options.get('font') });\n return metrics;\n },\n rect: function () {\n var size = this.measure();\n var pos = this.position().clone();\n return new Rect(pos, [\n size.width,\n size.height\n ]);\n },\n bbox: function (transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n return this.rect().bbox(combinedMatrix);\n },\n rawBBox: function () {\n return this.rect().bbox();\n },\n _containsPoint: function (point) {\n return this.rect().containsPoint(point);\n }\n });\n Text.prototype.nodeType = 'Text';\n Paintable.extend(Text.prototype);\n definePointAccessors(Text.prototype, ['position']);\n var Image$1 = Element$1.extend({\n init: function (src, rect, options) {\n if (rect === void 0) {\n rect = new Rect();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.src(src);\n this.rect(rect);\n },\n src: function (value) {\n if (defined(value)) {\n this.options.set('src', value);\n return this;\n }\n return this.options.get('src');\n },\n bbox: function (transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n return this._rect.bbox(combinedMatrix);\n },\n rawBBox: function () {\n return this._rect.bbox();\n },\n _containsPoint: function (point) {\n return this._rect.containsPoint(point);\n },\n _hasFill: function () {\n return this.src();\n }\n });\n Image$1.prototype.nodeType = 'Image';\n defineGeometryAccessors(Image$1.prototype, ['rect']);\n var Traversable = {\n extend: function (proto, childrenField) {\n proto.traverse = function (callback) {\n var children = this[childrenField];\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if (child.traverse) {\n child.traverse(callback);\n } else {\n callback(child);\n }\n }\n return this;\n };\n }\n };\n var Group = Element$1.extend({\n init: function (options) {\n Element$1.fn.init.call(this, options);\n this.children = [];\n },\n childrenChange: function (action, items, index) {\n this.trigger('childrenChange', {\n action: action,\n items: items,\n index: index\n });\n },\n append: function () {\n append(this.children, arguments);\n this._reparent(arguments, this);\n this.childrenChange('add', arguments);\n return this;\n },\n insert: function (index, element) {\n this.children.splice(index, 0, element);\n element.parent = this;\n this.childrenChange('add', [element], index);\n return this;\n },\n insertAt: function (element, index) {\n return this.insert(index, element);\n },\n remove: function (element) {\n var index = this.children.indexOf(element);\n if (index >= 0) {\n this.children.splice(index, 1);\n element.parent = null;\n this.childrenChange('remove', [element], index);\n }\n return this;\n },\n removeAt: function (index) {\n if (0 <= index && index < this.children.length) {\n var element = this.children[index];\n this.children.splice(index, 1);\n element.parent = null;\n this.childrenChange('remove', [element], index);\n }\n return this;\n },\n clear: function () {\n var items = this.children;\n this.children = [];\n this._reparent(items, null);\n this.childrenChange('remove', items, 0);\n return this;\n },\n bbox: function (transformation) {\n return elementsBoundingBox(this.children, true, this.currentTransform(transformation));\n },\n rawBBox: function () {\n return elementsBoundingBox(this.children, false);\n },\n _clippedBBox: function (transformation) {\n return elementsClippedBoundingBox(this.children, this.currentTransform(transformation));\n },\n currentTransform: function (transformation) {\n return Element$1.prototype.currentTransform.call(this, transformation) || null;\n },\n containsPoint: function (point, parentTransform) {\n if (this.visible()) {\n var children = this.children;\n var transform = this.currentTransform(parentTransform);\n for (var idx = 0; idx < children.length; idx++) {\n if (children[idx].containsPoint(point, transform)) {\n return true;\n }\n }\n }\n return false;\n },\n _reparent: function (elements, newParent) {\n var this$1 = this;\n for (var i = 0; i < elements.length; i++) {\n var child = elements[i];\n var parent = child.parent;\n if (parent && parent !== this$1 && parent.remove) {\n parent.remove(child);\n }\n child.parent = newParent;\n }\n }\n });\n Group.prototype.nodeType = 'Group';\n Traversable.extend(Group.prototype, 'children');\n function translateToPoint(point, bbox, element) {\n var transofrm = element.transform() || transform();\n var matrix = transofrm.matrix();\n matrix.e += point.x - bbox.origin.x;\n matrix.f += point.y - bbox.origin.y;\n transofrm.matrix(matrix);\n element.transform(transofrm);\n }\n function alignStart(size, rect, align, axis, sizeField) {\n var start;\n if (align === 'start') {\n start = rect.origin[axis];\n } else if (align === 'end') {\n start = rect.origin[axis] + rect.size[sizeField] - size;\n } else {\n start = rect.origin[axis] + (rect.size[sizeField] - size) / 2;\n }\n return start;\n }\n var DEFAULT_OPTIONS = {\n alignContent: 'start',\n justifyContent: 'start',\n alignItems: 'start',\n spacing: 0,\n orientation: 'horizontal',\n lineSpacing: 0,\n wrap: true\n };\n var Layout = Group.extend({\n init: function (rect, options) {\n Group.fn.init.call(this, $.extend({}, DEFAULT_OPTIONS, options));\n this._rect = rect;\n this._fieldMap = {};\n },\n rect: function (value) {\n if (value) {\n this._rect = value;\n return this;\n }\n return this._rect;\n },\n _initMap: function () {\n var options = this.options;\n var fieldMap = this._fieldMap;\n if (options.orientation === 'horizontal') {\n fieldMap.sizeField = 'width';\n fieldMap.groupsSizeField = 'height';\n fieldMap.groupAxis = 'x';\n fieldMap.groupsAxis = 'y';\n } else {\n fieldMap.sizeField = 'height';\n fieldMap.groupsSizeField = 'width';\n fieldMap.groupAxis = 'y';\n fieldMap.groupsAxis = 'x';\n }\n },\n reflow: function () {\n if (!this._rect || this.children.length === 0) {\n return;\n }\n this._initMap();\n if (this.options.transform) {\n this.transform(null);\n }\n var options = this.options;\n var rect = this._rect;\n var ref = this._initGroups();\n var groups = ref.groups;\n var groupsSize = ref.groupsSize;\n var ref$1 = this._fieldMap;\n var sizeField = ref$1.sizeField;\n var groupsSizeField = ref$1.groupsSizeField;\n var groupAxis = ref$1.groupAxis;\n var groupsAxis = ref$1.groupsAxis;\n var groupOrigin = new Point();\n var elementOrigin = new Point();\n var size = new Size();\n var groupStart = alignStart(groupsSize, rect, options.alignContent, groupsAxis, groupsSizeField);\n var elementStart, bbox, element, group, groupBox;\n for (var groupIdx = 0; groupIdx < groups.length; groupIdx++) {\n group = groups[groupIdx];\n groupOrigin[groupAxis] = elementStart = alignStart(group.size, rect, options.justifyContent, groupAxis, sizeField);\n groupOrigin[groupsAxis] = groupStart;\n size[sizeField] = group.size;\n size[groupsSizeField] = group.lineSize;\n groupBox = new Rect(groupOrigin, size);\n for (var idx = 0; idx < group.bboxes.length; idx++) {\n element = group.elements[idx];\n bbox = group.bboxes[idx];\n elementOrigin[groupAxis] = elementStart;\n elementOrigin[groupsAxis] = alignStart(bbox.size[groupsSizeField], groupBox, options.alignItems, groupsAxis, groupsSizeField);\n translateToPoint(elementOrigin, bbox, element);\n elementStart += bbox.size[sizeField] + options.spacing;\n }\n groupStart += group.lineSize + options.lineSpacing;\n }\n if (!options.wrap && group.size > rect.size[sizeField]) {\n var scale = rect.size[sizeField] / groupBox.size[sizeField];\n var scaledStart = groupBox.topLeft().scale(scale, scale);\n var scaledSize = groupBox.size[groupsSizeField] * scale;\n var newStart = alignStart(scaledSize, rect, options.alignContent, groupsAxis, groupsSizeField);\n var transform$$1 = transform();\n if (groupAxis === 'x') {\n transform$$1.translate(rect.origin.x - scaledStart.x, newStart - scaledStart.y);\n } else {\n transform$$1.translate(newStart - scaledStart.x, rect.origin.y - scaledStart.y);\n }\n transform$$1.scale(scale, scale);\n this.transform(transform$$1);\n }\n },\n _initGroups: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var children = ref.children;\n var lineSpacing = options.lineSpacing;\n var wrap = options.wrap;\n var spacing = options.spacing;\n var sizeField = this._fieldMap.sizeField;\n var group = this._newGroup();\n var groups = [];\n var addGroup = function () {\n groups.push(group);\n groupsSize += group.lineSize + lineSpacing;\n };\n var groupsSize = -lineSpacing;\n for (var idx = 0; idx < children.length; idx++) {\n var element = children[idx];\n var bbox = children[idx].clippedBBox();\n if (element.visible() && bbox) {\n if (wrap && group.size + bbox.size[sizeField] + spacing > this$1._rect.size[sizeField]) {\n if (group.bboxes.length === 0) {\n this$1._addToGroup(group, bbox, element);\n addGroup();\n group = this$1._newGroup();\n } else {\n addGroup();\n group = this$1._newGroup();\n this$1._addToGroup(group, bbox, element);\n }\n } else {\n this$1._addToGroup(group, bbox, element);\n }\n }\n }\n if (group.bboxes.length) {\n addGroup();\n }\n return {\n groups: groups,\n groupsSize: groupsSize\n };\n },\n _addToGroup: function (group, bbox, element) {\n group.size += bbox.size[this._fieldMap.sizeField] + this.options.spacing;\n group.lineSize = Math.max(bbox.size[this._fieldMap.groupsSizeField], group.lineSize);\n group.bboxes.push(bbox);\n group.elements.push(element);\n },\n _newGroup: function () {\n return {\n lineSize: 0,\n size: -this.options.spacing,\n bboxes: [],\n elements: []\n };\n }\n });\n var Rect$2 = Element$1.extend({\n init: function (geometry, options) {\n if (geometry === void 0) {\n geometry = new Rect();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n }\n },\n _bbox: function (matrix) {\n return this._geometry.bbox(matrix);\n },\n rawBBox: function () {\n return this._geometry.bbox();\n },\n _containsPoint: function (point) {\n return this._geometry.containsPoint(point);\n },\n _isOnPath: function (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n });\n Rect$2.prototype.nodeType = 'Rect';\n Paintable.extend(Rect$2.prototype);\n Measurable.extend(Rect$2.prototype);\n defineGeometryAccessors(Rect$2.prototype, ['geometry']);\n function alignElements(elements, rect, alignment, axis, sizeField) {\n for (var idx = 0; idx < elements.length; idx++) {\n var bbox = elements[idx].clippedBBox();\n if (bbox) {\n var point = bbox.origin.clone();\n point[axis] = alignStart(bbox.size[sizeField], rect, alignment || 'start', axis, sizeField);\n translateToPoint(point, bbox, elements[idx]);\n }\n }\n }\n function align(elements, rect, alignment) {\n alignElements(elements, rect, alignment, 'x', 'width');\n }\n function vAlign(elements, rect, alignment) {\n alignElements(elements, rect, alignment, 'y', 'height');\n }\n function stackElements(elements, stackAxis, otherAxis, sizeField) {\n if (elements.length > 1) {\n var origin = new Point();\n var previousBBox = elements[0].bbox;\n for (var idx = 1; idx < elements.length; idx++) {\n var element = elements[idx].element;\n var bbox = elements[idx].bbox;\n origin[stackAxis] = previousBBox.origin[stackAxis] + previousBBox.size[sizeField];\n origin[otherAxis] = bbox.origin[otherAxis];\n translateToPoint(origin, bbox, element);\n bbox.origin[stackAxis] = origin[stackAxis];\n previousBBox = bbox;\n }\n }\n }\n function createStackElements(elements) {\n var stackElements = [];\n for (var idx = 0; idx < elements.length; idx++) {\n var element = elements[idx];\n var bbox = element.clippedBBox();\n if (bbox) {\n stackElements.push({\n element: element,\n bbox: bbox\n });\n }\n }\n return stackElements;\n }\n function stack(elements) {\n stackElements(createStackElements(elements), 'x', 'y', 'width');\n }\n function vStack(elements) {\n stackElements(createStackElements(elements), 'y', 'x', 'height');\n }\n function getStacks(elements, rect, sizeField) {\n var maxSize = rect.size[sizeField];\n var stacks = [];\n var stack = [];\n var stackSize = 0;\n var element, bbox;\n var addElementToStack = function () {\n stack.push({\n element: element,\n bbox: bbox\n });\n };\n for (var idx = 0; idx < elements.length; idx++) {\n element = elements[idx];\n bbox = element.clippedBBox();\n if (bbox) {\n var size = bbox.size[sizeField];\n if (stackSize + size > maxSize) {\n if (stack.length) {\n stacks.push(stack);\n stack = [];\n addElementToStack();\n stackSize = size;\n } else {\n addElementToStack();\n stacks.push(stack);\n stack = [];\n stackSize = 0;\n }\n } else {\n addElementToStack();\n stackSize += size;\n }\n }\n }\n if (stack.length) {\n stacks.push(stack);\n }\n return stacks;\n }\n function wrapElements(elements, rect, axis, otherAxis, sizeField) {\n var stacks = getStacks(elements, rect, sizeField);\n var origin = rect.origin.clone();\n var result = [];\n for (var idx = 0; idx < stacks.length; idx++) {\n var stack = stacks[idx];\n var startElement = stack[0];\n origin[otherAxis] = startElement.bbox.origin[otherAxis];\n translateToPoint(origin, startElement.bbox, startElement.element);\n startElement.bbox.origin[axis] = origin[axis];\n stackElements(stack, axis, otherAxis, sizeField);\n result.push([]);\n for (var elementIdx = 0; elementIdx < stack.length; elementIdx++) {\n result[idx].push(stack[elementIdx].element);\n }\n }\n return result;\n }\n function wrap(elements, rect) {\n return wrapElements(elements, rect, 'x', 'y', 'width');\n }\n function vWrap(elements, rect) {\n return wrapElements(elements, rect, 'y', 'x', 'height');\n }\n function fit(element, rect) {\n var bbox = element.clippedBBox();\n if (bbox) {\n var elementSize = bbox.size;\n var rectSize = rect.size;\n if (rectSize.width < elementSize.width || rectSize.height < elementSize.height) {\n var scale = Math.min(rectSize.width / elementSize.width, rectSize.height / elementSize.height);\n var transform$$1 = element.transform() || transform();\n transform$$1.scale(scale, scale);\n element.transform(transform$$1);\n }\n }\n }\n var StopsArray = ElementsArray.extend({\n _change: function () {\n this.optionsChange({ field: 'stops' });\n }\n });\n function optionsAccessor(name) {\n return function (value) {\n if (defined(value)) {\n this.options.set(name, value);\n return this;\n }\n return this.options.get(name);\n };\n }\n function defineOptionsAccessors(fn, names) {\n for (var i = 0; i < names.length; i++) {\n fn[names[i]] = optionsAccessor(names[i]);\n }\n }\n var GradientStop = Class.extend({\n init: function (offset, color, opacity) {\n this.options = new OptionsStore({\n offset: offset,\n color: color,\n opacity: defined(opacity) ? opacity : 1\n });\n this.options.addObserver(this);\n }\n });\n GradientStop.create = function (arg) {\n if (defined(arg)) {\n var stop;\n if (arg instanceof GradientStop) {\n stop = arg;\n } else if (arg.length > 1) {\n stop = new GradientStop(arg[0], arg[1], arg[2]);\n } else {\n stop = new GradientStop(arg.offset, arg.color, arg.opacity);\n }\n return stop;\n }\n };\n defineOptionsAccessors(GradientStop.prototype, [\n 'offset',\n 'color',\n 'opacity'\n ]);\n ObserversMixin.extend(GradientStop.prototype);\n var Gradient = Class.extend({\n init: function (options) {\n if (options === void 0) {\n options = {};\n }\n this.stops = new StopsArray(this._createStops(options.stops));\n this.stops.addObserver(this);\n this._userSpace = options.userSpace;\n this.id = definitionId();\n },\n userSpace: function (value) {\n if (defined(value)) {\n this._userSpace = value;\n this.optionsChange();\n return this;\n }\n return this._userSpace;\n },\n _createStops: function (stops) {\n if (stops === void 0) {\n stops = [];\n }\n var result = [];\n for (var idx = 0; idx < stops.length; idx++) {\n result.push(GradientStop.create(stops[idx]));\n }\n return result;\n },\n addStop: function (offset, color, opacity) {\n this.stops.push(new GradientStop(offset, color, opacity));\n },\n removeStop: function (stop) {\n var index = this.stops.indexOf(stop);\n if (index >= 0) {\n this.stops.splice(index, 1);\n }\n }\n });\n Gradient.prototype.nodeType = 'Gradient';\n ObserversMixin.extend(Gradient.prototype);\n $.extend(Gradient.prototype, {\n optionsChange: function (e) {\n this.trigger('optionsChange', {\n field: 'gradient' + (e ? '.' + e.field : ''),\n value: this\n });\n },\n geometryChange: function () {\n this.optionsChange();\n }\n });\n var LinearGradient = Gradient.extend({\n init: function (options) {\n if (options === void 0) {\n options = {};\n }\n Gradient.fn.init.call(this, options);\n this.start(options.start || new Point());\n this.end(options.end || new Point(1, 0));\n }\n });\n definePointAccessors(LinearGradient.prototype, [\n 'start',\n 'end'\n ]);\n var RadialGradient = Gradient.extend({\n init: function (options) {\n if (options === void 0) {\n options = {};\n }\n Gradient.fn.init.call(this, options);\n this.center(options.center || new Point());\n this._radius = defined(options.radius) ? options.radius : 1;\n this._fallbackFill = options.fallbackFill;\n },\n radius: function (value) {\n if (defined(value)) {\n this._radius = value;\n this.geometryChange();\n return this;\n }\n return this._radius;\n },\n fallbackFill: function (value) {\n if (defined(value)) {\n this._fallbackFill = value;\n this.optionsChange();\n return this;\n }\n return this._fallbackFill;\n }\n });\n definePointAccessors(RadialGradient.prototype, ['center']);\n function swing(position) {\n return 0.5 - Math.cos(position * Math.PI) / 2;\n }\n function linear(position) {\n return position;\n }\n function easeOutElastic(position, time, start, diff) {\n var s = 1.70158, p = 0, a = diff;\n if (position === 0) {\n return start;\n }\n if (position === 1) {\n return start + diff;\n }\n if (!p) {\n p = 0.5;\n }\n if (a < Math.abs(diff)) {\n a = diff;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(diff / a);\n }\n return a * Math.pow(2, -10 * position) * Math.sin((Number(position) - s) * (1.1 * Math.PI) / p) + diff + start;\n }\n var easingFunctions = {\n swing: swing,\n linear: linear,\n easeOutElastic: easeOutElastic\n };\n var now = Date.now || function () {\n return new Date().getTime();\n };\n var Animation = Class.extend({\n init: function (element, options) {\n this.options = $.extend({}, this.options, options);\n this.element = element;\n },\n setup: function () {\n },\n step: function () {\n },\n play: function () {\n var this$1 = this;\n var options = this.options;\n var duration = options.duration;\n var delay = options.delay;\n if (delay === void 0) {\n delay = 0;\n }\n var easing = easingFunctions[options.easing];\n var start = now() + delay;\n var finish = start + duration;\n if (duration === 0) {\n this.step(1);\n this.abort();\n } else {\n setTimeout(function () {\n var loop = function () {\n if (this$1._stopped) {\n return;\n }\n var wallTime = now();\n var time = limitValue(wallTime - start, 0, duration);\n var position = time / duration;\n var easingPosition = easing(position, time, 0, 1, duration);\n this$1.step(easingPosition);\n if (wallTime < finish) {\n kendo.animationFrame(loop);\n } else {\n this$1.abort();\n }\n };\n loop();\n }, delay);\n }\n },\n abort: function () {\n this._stopped = true;\n },\n destroy: function () {\n this.abort();\n }\n });\n Animation.prototype.options = {\n duration: 500,\n easing: 'swing'\n };\n var AnimationFactory = Class.extend({\n init: function () {\n this._items = [];\n },\n register: function (name, type) {\n this._items.push({\n name: name,\n type: type\n });\n },\n create: function (element, options) {\n var items = this._items;\n var match;\n if (options && options.type) {\n var type = options.type.toLowerCase();\n for (var i = 0; i < items.length; i++) {\n if (items[i].name.toLowerCase() === type) {\n match = items[i];\n break;\n }\n }\n }\n if (match) {\n return new match.type(element, options);\n }\n }\n });\n AnimationFactory.current = new AnimationFactory();\n Animation.create = function (type, element, options) {\n return AnimationFactory.current.create(type, element, options);\n };\n var ShapeMap = {\n l: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n for (var i = 0; i < parameters.length; i += 2) {\n var point = new Point(parameters[i], parameters[i + 1]);\n if (options.isRelative) {\n point.translateWith(position);\n }\n path.lineTo(point.x, point.y);\n position.x = point.x;\n position.y = point.y;\n }\n },\n c: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n for (var i = 0; i < parameters.length; i += 6) {\n var controlOut = new Point(parameters[i], parameters[i + 1]);\n var controlIn = new Point(parameters[i + 2], parameters[i + 3]);\n var point = new Point(parameters[i + 4], parameters[i + 5]);\n if (options.isRelative) {\n controlIn.translateWith(position);\n controlOut.translateWith(position);\n point.translateWith(position);\n }\n path.curveTo(controlOut, controlIn, point);\n position.x = point.x;\n position.y = point.y;\n }\n },\n v: function (path, options) {\n var value = options.isRelative ? 0 : options.position.x;\n toLineParamaters(options.parameters, true, value);\n this.l(path, options);\n },\n h: function (path, options) {\n var value = options.isRelative ? 0 : options.position.y;\n toLineParamaters(options.parameters, false, value);\n this.l(path, options);\n },\n a: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n for (var i = 0; i < parameters.length; i += 7) {\n var radiusX = parameters[i];\n var radiusY = parameters[i + 1];\n var largeArc = parameters[i + 3];\n var swipe = parameters[i + 4];\n var endPoint = new Point(parameters[i + 5], parameters[i + 6]);\n if (options.isRelative) {\n endPoint.translateWith(position);\n }\n path.arcTo(endPoint, radiusX, radiusY, largeArc, swipe);\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n },\n s: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n var previousCommand = options.previousCommand;\n var lastControlIn;\n if (previousCommand === 's' || previousCommand === 'c') {\n lastControlIn = last(last(path.paths).segments).controlIn();\n }\n for (var i = 0; i < parameters.length; i += 4) {\n var controlIn = new Point(parameters[i], parameters[i + 1]);\n var endPoint = new Point(parameters[i + 2], parameters[i + 3]);\n var controlOut = void 0;\n if (options.isRelative) {\n controlIn.translateWith(position);\n endPoint.translateWith(position);\n }\n if (lastControlIn) {\n controlOut = reflectionPoint(lastControlIn, position);\n } else {\n controlOut = position.clone();\n }\n lastControlIn = controlIn;\n path.curveTo(controlOut, controlIn, endPoint);\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n },\n q: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n for (var i = 0; i < parameters.length; i += 4) {\n var controlPoint = new Point(parameters[i], parameters[i + 1]);\n var endPoint = new Point(parameters[i + 2], parameters[i + 3]);\n if (options.isRelative) {\n controlPoint.translateWith(position);\n endPoint.translateWith(position);\n }\n var cubicControlPoints = quadraticToCubicControlPoints(position, controlPoint, endPoint);\n path.curveTo(cubicControlPoints.controlOut, cubicControlPoints.controlIn, endPoint);\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n },\n t: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n var previousCommand = options.previousCommand;\n var controlPoint;\n if (previousCommand === 'q' || previousCommand === 't') {\n var lastSegment = last(last(path.paths).segments);\n controlPoint = lastSegment.controlIn().clone().translateWith(position.scaleCopy(-1 / 3)).scale(3 / 2);\n }\n for (var i = 0; i < parameters.length; i += 2) {\n var endPoint = new Point(parameters[i], parameters[i + 1]);\n if (options.isRelative) {\n endPoint.translateWith(position);\n }\n if (controlPoint) {\n controlPoint = reflectionPoint(controlPoint, position);\n } else {\n controlPoint = position.clone();\n }\n var cubicControlPoints = quadraticToCubicControlPoints(position, controlPoint, endPoint);\n path.curveTo(cubicControlPoints.controlOut, cubicControlPoints.controlIn, endPoint);\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n }\n };\n function toLineParamaters(parameters, isVertical, value) {\n var insertPosition = isVertical ? 0 : 1;\n for (var i = 0; i < parameters.length; i += 2) {\n parameters.splice(i + insertPosition, 0, value);\n }\n }\n function reflectionPoint(point, center) {\n if (point && center) {\n return center.scaleCopy(2).translate(-point.x, -point.y);\n }\n }\n var third = 1 / 3;\n function quadraticToCubicControlPoints(position, controlPoint, endPoint) {\n var scaledPoint = controlPoint.clone().scale(2 / 3);\n return {\n controlOut: scaledPoint.clone().translateWith(position.scaleCopy(third)),\n controlIn: scaledPoint.translateWith(endPoint.scaleCopy(third))\n };\n }\n var SEGMENT_REGEX = /([a-df-z]{1})([^a-df-z]*)(z)?/gi;\n var SPLIT_REGEX = /[,\\s]?([+\\-]?(?:\\d*\\.\\d+|\\d+)(?:[eE][+\\-]?\\d+)?)/g;\n var MOVE = 'm';\n var CLOSE = 'z';\n function parseParameters(str) {\n var parameters = [];\n str.replace(SPLIT_REGEX, function (match, number) {\n parameters.push(parseFloat(number));\n });\n return parameters;\n }\n var PathParser = Class.extend({\n parse: function (str, options) {\n var multiPath = new MultiPath(options);\n var position = new Point();\n var previousCommand;\n str.replace(SEGMENT_REGEX, function (match, element, params, closePath) {\n var command = element.toLowerCase();\n var isRelative = command === element;\n var parameters = parseParameters(params.trim());\n if (command === MOVE) {\n if (isRelative) {\n position.x += parameters[0];\n position.y += parameters[1];\n } else {\n position.x = parameters[0];\n position.y = parameters[1];\n }\n multiPath.moveTo(position.x, position.y);\n if (parameters.length > 2) {\n command = 'l';\n parameters.splice(0, 2);\n }\n }\n if (ShapeMap[command]) {\n ShapeMap[command](multiPath, {\n parameters: parameters,\n position: position,\n isRelative: isRelative,\n previousCommand: previousCommand\n });\n if (closePath && closePath.toLowerCase() === CLOSE) {\n multiPath.close();\n }\n } else if (command !== MOVE) {\n throw new Error('Error while parsing SVG path. Unsupported command: ' + command);\n }\n previousCommand = command;\n });\n return multiPath;\n }\n });\n PathParser.current = new PathParser();\n Path.parse = function (str, options) {\n return PathParser.current.parse(str, options);\n };\n var SurfaceFactory = Class.extend({\n init: function () {\n this._items = [];\n },\n register: function (name, type, order) {\n var items = this._items;\n var first = items[0];\n var entry = {\n name: name,\n type: type,\n order: order\n };\n if (!first || order < first.order) {\n items.unshift(entry);\n } else {\n items.push(entry);\n }\n },\n create: function (element, options) {\n var items = this._items;\n var match = items[0];\n if (options && options.type) {\n var preferred = options.type.toLowerCase();\n for (var i = 0; i < items.length; i++) {\n if (items[i].name === preferred) {\n match = items[i];\n break;\n }\n }\n }\n if (match) {\n return new match.type(element, options);\n }\n kendo.logToConsole('Warning: Unable to create Kendo UI Drawing Surface. Possible causes:\\n' + '- The browser does not support SVG and Canvas. User agent: ' + navigator.userAgent);\n }\n });\n SurfaceFactory.current = new SurfaceFactory();\n var events = [\n 'click',\n 'mouseenter',\n 'mouseleave',\n 'mousemove',\n 'resize',\n 'tooltipOpen',\n 'tooltipClose'\n ];\n var Surface = kendo.Observable.extend({\n init: function (element, options) {\n kendo.Observable.fn.init.call(this);\n this.options = $.extend({}, options);\n this.element = element;\n this._click = this._handler('click');\n this._mouseenter = this._handler('mouseenter');\n this._mouseleave = this._handler('mouseleave');\n this._mousemove = this._handler('mousemove');\n this._visual = new Group();\n elementSize(element, this.options);\n this.bind(events, this.options);\n this._enableTracking();\n },\n draw: function (element) {\n this._visual.children.push(element);\n },\n clear: function () {\n this._visual.children = [];\n },\n destroy: function () {\n this._visual = null;\n this.unbind();\n },\n eventTarget: function (e) {\n var this$1 = this;\n var domNode = eventElement(e);\n var node;\n while (!node && domNode) {\n node = domNode._kendoNode;\n if (domNode === this$1.element) {\n break;\n }\n domNode = domNode.parentElement;\n }\n if (node) {\n return node.srcElement;\n }\n },\n exportVisual: function () {\n return this._visual;\n },\n getSize: function () {\n return elementSize(this.element);\n },\n currentSize: function (size) {\n if (size) {\n this._size = size;\n } else {\n return this._size;\n }\n },\n setSize: function (size) {\n elementSize(this.element, size);\n this.currentSize(size);\n this._resize();\n },\n resize: function (force) {\n var size = this.getSize();\n var currentSize = this.currentSize();\n if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this.currentSize(size);\n this._resize(size, force);\n this.trigger('resize', size);\n }\n },\n size: function (value) {\n if (!value) {\n return this.getSize();\n }\n this.setSize(value);\n },\n suspendTracking: function () {\n this._suspendedTracking = true;\n },\n resumeTracking: function () {\n this._suspendedTracking = false;\n },\n _enableTracking: function () {\n },\n _resize: function () {\n },\n _handler: function (eventName) {\n var this$1 = this;\n return function (e) {\n var node = this$1.eventTarget(e);\n if (node && !this$1._suspendedTracking) {\n this$1.trigger(eventName, {\n element: node,\n originalEvent: e,\n type: eventName\n });\n }\n };\n },\n _elementOffset: function () {\n var element = this.element;\n var ref = elementStyles(element, [\n 'paddingLeft',\n 'paddingTop'\n ]);\n var paddingLeft = ref.paddingLeft;\n var paddingTop = ref.paddingTop;\n var ref$1 = elementOffset(element);\n var left = ref$1.left;\n var top = ref$1.top;\n return {\n left: left + parseInt(paddingLeft, 10),\n top: top + parseInt(paddingTop, 10)\n };\n },\n _surfacePoint: function (e) {\n var offset = this._elementOffset();\n var coord = eventCoordinates(e);\n var x = coord.x - offset.left;\n var y = coord.y - offset.top;\n return new Point(x, y);\n }\n });\n Surface.create = function (element, options) {\n return SurfaceFactory.current.create(element, options);\n };\n Surface.support = {};\n var BaseNode = Class.extend({\n init: function (srcElement) {\n this.childNodes = [];\n this.parent = null;\n if (srcElement) {\n this.srcElement = srcElement;\n this.observe();\n }\n },\n destroy: function () {\n var this$1 = this;\n if (this.srcElement) {\n this.srcElement.removeObserver(this);\n }\n var children = this.childNodes;\n for (var i = 0; i < children.length; i++) {\n this$1.childNodes[i].destroy();\n }\n this.parent = null;\n },\n load: function () {\n },\n observe: function () {\n if (this.srcElement) {\n this.srcElement.addObserver(this);\n }\n },\n append: function (node) {\n this.childNodes.push(node);\n node.parent = this;\n },\n insertAt: function (node, pos) {\n this.childNodes.splice(pos, 0, node);\n node.parent = this;\n },\n remove: function (index, count) {\n var this$1 = this;\n var end = index + count;\n for (var i = index; i < end; i++) {\n this$1.childNodes[i].removeSelf();\n }\n this.childNodes.splice(index, count);\n },\n removeSelf: function () {\n this.clear();\n this.destroy();\n },\n clear: function () {\n this.remove(0, this.childNodes.length);\n },\n invalidate: function () {\n if (this.parent) {\n this.parent.invalidate();\n }\n },\n geometryChange: function () {\n this.invalidate();\n },\n optionsChange: function () {\n this.invalidate();\n },\n childrenChange: function (e) {\n if (e.action === 'add') {\n this.load(e.items, e.index);\n } else if (e.action === 'remove') {\n this.remove(e.index, e.items.length);\n }\n this.invalidate();\n }\n });\n function renderAttr(name, value) {\n return defined(value) && value !== null ? ' ' + name + '=\\'' + value + '\\' ' : '';\n }\n function renderAllAttr(attrs) {\n var output = '';\n for (var i = 0; i < attrs.length; i++) {\n output += renderAttr(attrs[i][0], attrs[i][1]);\n }\n return output;\n }\n function renderStyle(attrs) {\n var output = '';\n for (var i = 0; i < attrs.length; i++) {\n var value = attrs[i][1];\n if (defined(value)) {\n output += attrs[i][0] + ':' + value + ';';\n }\n }\n if (output !== '') {\n return output;\n }\n }\n var NODE_MAP = {};\n var SVG_NS = 'http://www.w3.org/2000/svg';\n var NONE = 'none';\n var renderSVG = function (container, svg) {\n container.innerHTML = svg;\n };\n if (typeof document !== 'undefined') {\n var testFragment = '<svg xmlns=\\'' + SVG_NS + '\\'></svg>';\n var testContainer = document.createElement('div');\n var hasParser = typeof DOMParser !== 'undefined';\n testContainer.innerHTML = testFragment;\n if (hasParser && testContainer.firstChild.namespaceURI !== SVG_NS) {\n renderSVG = function (container, svg) {\n var parser = new DOMParser();\n var chartDoc = parser.parseFromString(svg, 'text/xml');\n var importedDoc = document.adoptNode(chartDoc.documentElement);\n container.innerHTML = '';\n container.appendChild(importedDoc);\n };\n }\n }\n var renderSVG$1 = renderSVG;\n var TRANSFORM = 'transform';\n var DefinitionMap = {\n clip: 'clip-path',\n fill: 'fill'\n };\n function isDefinition(type, value) {\n return type === 'clip' || type === 'fill' && (!value || value.nodeType === 'Gradient');\n }\n function baseUrl() {\n var base = document.getElementsByTagName('base')[0];\n var href = document.location.href;\n var hashIndex = href.indexOf('#');\n var url = '';\n if (base && !support.browser.msie) {\n if (hashIndex !== -1) {\n href = href.substring(0, hashIndex);\n }\n url = href;\n }\n return url;\n }\n function refUrl(id) {\n return 'url(' + baseUrl() + '#' + id + ')';\n }\n var Node = BaseNode.extend({\n init: function (srcElement) {\n BaseNode.fn.init.call(this, srcElement);\n this.definitions = {};\n },\n destroy: function () {\n if (this.element) {\n this.element._kendoNode = null;\n this.element = null;\n }\n this.clearDefinitions();\n BaseNode.fn.destroy.call(this);\n },\n load: function (elements, pos) {\n var this$1 = this;\n for (var i = 0; i < elements.length; i++) {\n var srcElement = elements[i];\n var children = srcElement.children;\n var childNode = new NODE_MAP[srcElement.nodeType](srcElement);\n if (defined(pos)) {\n this$1.insertAt(childNode, pos);\n } else {\n this$1.append(childNode);\n }\n childNode.createDefinitions();\n if (children && children.length > 0) {\n childNode.load(children);\n }\n var element = this$1.element;\n if (element) {\n childNode.attachTo(element, pos);\n }\n }\n },\n root: function () {\n var root = this;\n while (root.parent) {\n root = root.parent;\n }\n return root;\n },\n attachTo: function (domElement, pos) {\n var container = document.createElement('div');\n renderSVG$1(container, '<svg xmlns=\\'' + SVG_NS + '\\' version=\\'1.1\\'>' + this.render() + '</svg>');\n var element = container.firstChild.firstChild;\n if (element) {\n if (defined(pos)) {\n domElement.insertBefore(element, domElement.childNodes[pos] || null);\n } else {\n domElement.appendChild(element);\n }\n this.setElement(element);\n }\n },\n setElement: function (element) {\n if (this.element) {\n this.element._kendoNode = null;\n }\n this.element = element;\n this.element._kendoNode = this;\n var nodes = this.childNodes;\n for (var i = 0; i < nodes.length; i++) {\n var childElement = element.childNodes[i];\n nodes[i].setElement(childElement);\n }\n },\n clear: function () {\n this.clearDefinitions();\n if (this.element) {\n this.element.innerHTML = '';\n }\n var children = this.childNodes;\n for (var i = 0; i < children.length; i++) {\n children[i].destroy();\n }\n this.childNodes = [];\n },\n removeSelf: function () {\n if (this.element) {\n var parentNode = this.element.parentNode;\n if (parentNode) {\n parentNode.removeChild(this.element);\n }\n this.element = null;\n }\n BaseNode.fn.removeSelf.call(this);\n },\n template: function () {\n return this.renderChildren();\n },\n render: function () {\n return this.template();\n },\n renderChildren: function () {\n var nodes = this.childNodes;\n var output = '';\n for (var i = 0; i < nodes.length; i++) {\n output += nodes[i].render();\n }\n return output;\n },\n optionsChange: function (e) {\n var field = e.field;\n var value = e.value;\n if (field === 'visible') {\n this.css('display', value ? '' : NONE);\n } else if (DefinitionMap[field] && isDefinition(field, value)) {\n this.updateDefinition(field, value);\n } else if (field === 'opacity') {\n this.attr('opacity', value);\n }\n BaseNode.fn.optionsChange.call(this, e);\n },\n attr: function (name, value) {\n if (this.element) {\n this.element.setAttribute(name, value);\n }\n },\n allAttr: function (attrs) {\n var this$1 = this;\n for (var i = 0; i < attrs.length; i++) {\n this$1.attr(attrs[i][0], attrs[i][1]);\n }\n },\n css: function (name, value) {\n if (this.element) {\n this.element.style[name] = value;\n }\n },\n allCss: function (styles) {\n var this$1 = this;\n for (var i = 0; i < styles.length; i++) {\n this$1.css(styles[i][0], styles[i][1]);\n }\n },\n removeAttr: function (name) {\n if (this.element) {\n this.element.removeAttribute(name);\n }\n },\n mapTransform: function (transform) {\n var attrs = [];\n if (transform) {\n attrs.push([\n TRANSFORM,\n 'matrix(' + transform.matrix().toString(6) + ')'\n ]);\n }\n return attrs;\n },\n renderTransform: function () {\n return renderAllAttr(this.mapTransform(this.srcElement.transform()));\n },\n transformChange: function (value) {\n if (value) {\n this.allAttr(this.mapTransform(value));\n } else {\n this.removeAttr(TRANSFORM);\n }\n },\n mapStyle: function () {\n var options = this.srcElement.options;\n var style = [[\n 'cursor',\n options.cursor\n ]];\n if (options.visible === false) {\n style.push([\n 'display',\n NONE\n ]);\n }\n return style;\n },\n renderStyle: function () {\n return renderAttr('style', renderStyle(this.mapStyle(true)));\n },\n renderOpacity: function () {\n return renderAttr('opacity', this.srcElement.options.opacity);\n },\n createDefinitions: function () {\n var srcElement = this.srcElement;\n var definitions = this.definitions;\n if (srcElement) {\n var options = srcElement.options;\n var hasDefinitions;\n for (var field in DefinitionMap) {\n var definition = options.get(field);\n if (definition && isDefinition(field, definition)) {\n definitions[field] = definition;\n hasDefinitions = true;\n }\n }\n if (hasDefinitions) {\n this.definitionChange({\n action: 'add',\n definitions: definitions\n });\n }\n }\n },\n definitionChange: function (e) {\n if (this.parent) {\n this.parent.definitionChange(e);\n }\n },\n updateDefinition: function (type, value) {\n var definitions = this.definitions;\n var current = definitions[type];\n var attr = DefinitionMap[type];\n var definition = {};\n if (current) {\n definition[type] = current;\n this.definitionChange({\n action: 'remove',\n definitions: definition\n });\n delete definitions[type];\n }\n if (!value) {\n if (current) {\n this.removeAttr(attr);\n }\n } else {\n definition[type] = value;\n this.definitionChange({\n action: 'add',\n definitions: definition\n });\n definitions[type] = value;\n this.attr(attr, refUrl(value.id));\n }\n },\n clearDefinitions: function () {\n var definitions = this.definitions;\n this.definitionChange({\n action: 'remove',\n definitions: definitions\n });\n this.definitions = {};\n },\n renderDefinitions: function () {\n return renderAllAttr(this.mapDefinitions());\n },\n mapDefinitions: function () {\n var definitions = this.definitions;\n var attrs = [];\n for (var field in definitions) {\n attrs.push([\n DefinitionMap[field],\n refUrl(definitions[field].id)\n ]);\n }\n return attrs;\n }\n });\n var GradientStopNode = Node.extend({\n template: function () {\n return '<stop ' + this.renderOffset() + ' ' + this.renderStyle() + ' />';\n },\n renderOffset: function () {\n return renderAttr('offset', this.srcElement.offset());\n },\n mapStyle: function () {\n var srcElement = this.srcElement;\n return [\n [\n 'stop-color',\n srcElement.color()\n ],\n [\n 'stop-opacity',\n srcElement.opacity()\n ]\n ];\n },\n optionsChange: function (e) {\n if (e.field === 'offset') {\n this.attr(e.field, e.value);\n } else if (e.field === 'color' || e.field === 'opacity') {\n this.css('stop-' + e.field, e.value);\n }\n }\n });\n var GradientNode = Node.extend({\n init: function (srcElement) {\n Node.fn.init.call(this, srcElement);\n this.id = srcElement.id;\n this.loadStops();\n },\n loadStops: function () {\n var this$1 = this;\n var stops = this.srcElement.stops;\n var element = this.element;\n for (var idx = 0; idx < stops.length; idx++) {\n var stopNode = new GradientStopNode(stops[idx]);\n this$1.append(stopNode);\n if (element) {\n stopNode.attachTo(element);\n }\n }\n },\n optionsChange: function (e) {\n if (e.field === 'gradient.stops') {\n BaseNode.prototype.clear.call(this);\n this.loadStops();\n } else if (e.field === 'gradient') {\n this.allAttr(this.mapCoordinates());\n }\n },\n renderCoordinates: function () {\n return renderAllAttr(this.mapCoordinates());\n },\n mapSpace: function () {\n return [\n 'gradientUnits',\n this.srcElement.userSpace() ? 'userSpaceOnUse' : 'objectBoundingBox'\n ];\n }\n });\n var LinearGradientNode = GradientNode.extend({\n template: function () {\n return '<linearGradient id=\\'' + this.id + '\\' ' + this.renderCoordinates() + '>' + this.renderChildren() + '</linearGradient>';\n },\n mapCoordinates: function () {\n var srcElement = this.srcElement;\n var start = srcElement.start();\n var end = srcElement.end();\n var attrs = [\n [\n 'x1',\n start.x\n ],\n [\n 'y1',\n start.y\n ],\n [\n 'x2',\n end.x\n ],\n [\n 'y2',\n end.y\n ],\n this.mapSpace()\n ];\n return attrs;\n }\n });\n var RadialGradientNode = GradientNode.extend({\n template: function () {\n return '<radialGradient id=\\'' + this.id + '\\' ' + this.renderCoordinates() + '>' + this.renderChildren() + '</radialGradient>';\n },\n mapCoordinates: function () {\n var srcElement = this.srcElement;\n var center = srcElement.center();\n var radius = srcElement.radius();\n var attrs = [\n [\n 'cx',\n center.x\n ],\n [\n 'cy',\n center.y\n ],\n [\n 'r',\n radius\n ],\n this.mapSpace()\n ];\n return attrs;\n }\n });\n var ClipNode = Node.extend({\n init: function (srcElement) {\n Node.fn.init.call(this);\n this.srcElement = srcElement;\n this.id = srcElement.id;\n this.load([srcElement]);\n },\n template: function () {\n return '<clipPath id=\\'' + this.id + '\\'>' + this.renderChildren() + '</clipPath>';\n }\n });\n var DefinitionNode = Node.extend({\n init: function () {\n Node.fn.init.call(this);\n this.definitionMap = {};\n },\n attachTo: function (domElement) {\n this.element = domElement;\n },\n template: function () {\n return '<defs>' + this.renderChildren() + '</defs>';\n },\n definitionChange: function (e) {\n var definitions = e.definitions;\n var action = e.action;\n if (action === 'add') {\n this.addDefinitions(definitions);\n } else if (action === 'remove') {\n this.removeDefinitions(definitions);\n }\n },\n createDefinition: function (type, item) {\n var nodeType;\n if (type === 'clip') {\n nodeType = ClipNode;\n } else if (type === 'fill') {\n if (item instanceof LinearGradient) {\n nodeType = LinearGradientNode;\n } else if (item instanceof RadialGradient) {\n nodeType = RadialGradientNode;\n }\n }\n return new nodeType(item);\n },\n addDefinitions: function (definitions) {\n var this$1 = this;\n for (var field in definitions) {\n this$1.addDefinition(field, definitions[field]);\n }\n },\n addDefinition: function (type, srcElement) {\n var ref = this;\n var element = ref.element;\n var definitionMap = ref.definitionMap;\n var id = srcElement.id;\n var mapItem = definitionMap[id];\n if (!mapItem) {\n var node = this.createDefinition(type, srcElement);\n definitionMap[id] = {\n element: node,\n count: 1\n };\n this.append(node);\n if (element) {\n node.attachTo(this.element);\n }\n } else {\n mapItem.count++;\n }\n },\n removeDefinitions: function (definitions) {\n var this$1 = this;\n for (var field in definitions) {\n this$1.removeDefinition(definitions[field]);\n }\n },\n removeDefinition: function (srcElement) {\n var definitionMap = this.definitionMap;\n var id = srcElement.id;\n var mapItem = definitionMap[id];\n if (mapItem) {\n mapItem.count--;\n if (mapItem.count === 0) {\n this.remove(this.childNodes.indexOf(mapItem.element), 1);\n delete definitionMap[id];\n }\n }\n }\n });\n var RootNode = Node.extend({\n init: function (options) {\n Node.fn.init.call(this);\n this.options = options;\n this.defs = new DefinitionNode();\n },\n attachTo: function (domElement) {\n this.element = domElement;\n this.defs.attachTo(domElement.firstElementChild);\n },\n clear: function () {\n BaseNode.prototype.clear.call(this);\n },\n template: function () {\n return this.defs.render() + this.renderChildren();\n },\n definitionChange: function (e) {\n this.defs.definitionChange(e);\n }\n });\n function alignToScreen(element) {\n var ctm;\n try {\n ctm = element.getScreenCTM ? element.getScreenCTM() : null;\n } catch (e) {\n }\n if (ctm) {\n var left = -ctm.e % 1;\n var top = -ctm.f % 1;\n var style = element.style;\n if (left !== 0 || top !== 0) {\n style.left = left + 'px';\n style.top = top + 'px';\n }\n }\n }\n var Surface$1 = Surface.extend({\n init: function (element, options) {\n Surface.fn.init.call(this, element, options);\n this._root = new RootNode(this.options);\n renderSVG$1(this.element, this._template());\n this._rootElement = this.element.firstElementChild;\n alignToScreen(this._rootElement);\n this._root.attachTo(this._rootElement);\n bindEvents(this.element, {\n click: this._click,\n mouseover: this._mouseenter,\n mouseout: this._mouseleave,\n mousemove: this._mousemove\n });\n this.resize();\n },\n destroy: function () {\n if (this._root) {\n this._root.destroy();\n this._root = null;\n this._rootElement = null;\n unbindEvents(this.element, {\n click: this._click,\n mouseover: this._mouseenter,\n mouseout: this._mouseleave,\n mousemove: this._mousemove\n });\n }\n Surface.fn.destroy.call(this);\n },\n translate: function (offset) {\n var viewBox = Math.round(offset.x) + ' ' + Math.round(offset.y) + ' ' + this._size.width + ' ' + this._size.height;\n this._offset = offset;\n this._rootElement.setAttribute('viewBox', viewBox);\n },\n draw: function (element) {\n Surface.fn.draw.call(this, element);\n this._root.load([element]);\n },\n clear: function () {\n Surface.fn.clear.call(this);\n this._root.clear();\n },\n svg: function () {\n return '<?xml version=\\'1.0\\' ?>' + this._template();\n },\n exportVisual: function () {\n var ref = this;\n var visual = ref._visual;\n var offset = ref._offset;\n if (offset) {\n var wrap = new Group();\n wrap.children.push(visual);\n wrap.transform(transform().translate(-offset.x, -offset.y));\n visual = wrap;\n }\n return visual;\n },\n _resize: function () {\n if (this._offset) {\n this.translate(this._offset);\n }\n },\n _template: function () {\n return '<svg style=\\'width: 100%; height: 100%; overflow: hidden;\\' xmlns=\\'' + SVG_NS + '\\' xmlns:xlink=\\'http://www.w3.org/1999/xlink\\' version=\\'1.1\\'>' + this._root.render() + '</svg>';\n }\n });\n Surface$1.prototype.type = 'svg';\n if (typeof document !== 'undefined' && document.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')) {\n Surface.support.svg = true;\n SurfaceFactory.current.register('svg', Surface$1, 10);\n }\n var GroupNode = Node.extend({\n template: function () {\n return '<g' + (this.renderTransform() + this.renderStyle() + this.renderOpacity() + this.renderDefinitions()) + '>' + this.renderChildren() + '</g>';\n },\n optionsChange: function (e) {\n if (e.field === 'transform') {\n this.transformChange(e.value);\n }\n Node.fn.optionsChange.call(this, e);\n }\n });\n NODE_MAP.Group = GroupNode;\n var DASH_ARRAYS = {\n dot: [\n 1.5,\n 3.5\n ],\n dash: [\n 4,\n 3.5\n ],\n longdash: [\n 8,\n 3.5\n ],\n dashdot: [\n 3.5,\n 3.5,\n 1.5,\n 3.5\n ],\n longdashdot: [\n 8,\n 3.5,\n 1.5,\n 3.5\n ],\n longdashdotdot: [\n 8,\n 3.5,\n 1.5,\n 3.5,\n 1.5,\n 3.5\n ]\n };\n var SOLID = 'solid';\n var BUTT = 'butt';\n var ATTRIBUTE_MAP = {\n 'fill.opacity': 'fill-opacity',\n 'stroke.color': 'stroke',\n 'stroke.width': 'stroke-width',\n 'stroke.opacity': 'stroke-opacity'\n };\n var SPACE = ' ';\n var PathNode = Node.extend({\n geometryChange: function () {\n this.attr('d', this.renderData());\n this.invalidate();\n },\n optionsChange: function (e) {\n switch (e.field) {\n case 'fill':\n if (e.value) {\n this.allAttr(this.mapFill(e.value));\n } else {\n this.removeAttr('fill');\n }\n break;\n case 'fill.color':\n this.allAttr(this.mapFill({ color: e.value }));\n break;\n case 'stroke':\n if (e.value) {\n this.allAttr(this.mapStroke(e.value));\n } else {\n this.removeAttr('stroke');\n }\n break;\n case 'transform':\n this.transformChange(e.value);\n break;\n default:\n var name = ATTRIBUTE_MAP[e.field];\n if (name) {\n this.attr(name, e.value);\n }\n break;\n }\n Node.fn.optionsChange.call(this, e);\n },\n content: function () {\n if (this.element) {\n this.element.textContent = this.srcElement.content();\n }\n },\n renderData: function () {\n return this.printPath(this.srcElement);\n },\n printPath: function (path) {\n var this$1 = this;\n var segments = path.segments;\n var length = segments.length;\n if (length > 0) {\n var parts = [];\n var output, currentType;\n for (var i = 1; i < length; i++) {\n var segmentType = this$1.segmentType(segments[i - 1], segments[i]);\n if (segmentType !== currentType) {\n currentType = segmentType;\n parts.push(segmentType);\n }\n if (segmentType === 'L') {\n parts.push(this$1.printPoints(segments[i].anchor()));\n } else {\n parts.push(this$1.printPoints(segments[i - 1].controlOut(), segments[i].controlIn(), segments[i].anchor()));\n }\n }\n output = 'M' + this.printPoints(segments[0].anchor()) + SPACE + parts.join(SPACE);\n if (path.options.closed) {\n output += 'Z';\n }\n return output;\n }\n },\n printPoints: function () {\n var points = arguments;\n var length = points.length;\n var result = [];\n for (var i = 0; i < length; i++) {\n result.push(points[i].toString(3));\n }\n return result.join(' ');\n },\n segmentType: function (segmentStart, segmentEnd) {\n return segmentStart.controlOut() && segmentEnd.controlIn() ? 'C' : 'L';\n },\n mapStroke: function (stroke) {\n var attrs = [];\n if (stroke && !isTransparent(stroke.color)) {\n attrs.push([\n 'stroke',\n stroke.color\n ]);\n attrs.push([\n 'stroke-width',\n stroke.width\n ]);\n attrs.push([\n 'stroke-linecap',\n this.renderLinecap(stroke)\n ]);\n attrs.push([\n 'stroke-linejoin',\n stroke.lineJoin\n ]);\n if (defined(stroke.opacity)) {\n attrs.push([\n 'stroke-opacity',\n stroke.opacity\n ]);\n }\n if (defined(stroke.dashType)) {\n attrs.push([\n 'stroke-dasharray',\n this.renderDashType(stroke)\n ]);\n }\n } else {\n attrs.push([\n 'stroke',\n NONE\n ]);\n }\n return attrs;\n },\n renderStroke: function () {\n return renderAllAttr(this.mapStroke(this.srcElement.options.stroke));\n },\n renderDashType: function (stroke) {\n var dashType = stroke.dashType;\n var width = stroke.width;\n if (width === void 0) {\n width = 1;\n }\n if (dashType && dashType !== SOLID) {\n var dashArray = DASH_ARRAYS[dashType.toLowerCase()];\n var result = [];\n for (var i = 0; i < dashArray.length; i++) {\n result.push(dashArray[i] * width);\n }\n return result.join(' ');\n }\n },\n renderLinecap: function (stroke) {\n var dashType = stroke.dashType;\n var lineCap = stroke.lineCap;\n return dashType && dashType !== 'solid' ? BUTT : lineCap;\n },\n mapFill: function (fill) {\n var attrs = [];\n if (!(fill && fill.nodeType === 'Gradient')) {\n if (fill && !isTransparent(fill.color)) {\n attrs.push([\n 'fill',\n fill.color\n ]);\n if (defined(fill.opacity)) {\n attrs.push([\n 'fill-opacity',\n fill.opacity\n ]);\n }\n } else {\n attrs.push([\n 'fill',\n NONE\n ]);\n }\n }\n return attrs;\n },\n renderFill: function () {\n return renderAllAttr(this.mapFill(this.srcElement.options.fill));\n },\n template: function () {\n return '<path ' + this.renderStyle() + ' ' + this.renderOpacity() + ' ' + renderAttr('d', this.renderData()) + '' + this.renderStroke() + this.renderFill() + this.renderDefinitions() + this.renderTransform() + '></path>';\n }\n });\n NODE_MAP.Path = PathNode;\n var ArcNode = PathNode.extend({\n renderData: function () {\n return this.printPath(this.srcElement.toPath());\n }\n });\n NODE_MAP.Arc = ArcNode;\n var CircleNode = PathNode.extend({\n geometryChange: function () {\n var center = this.center();\n this.attr('cx', center.x);\n this.attr('cy', center.y);\n this.attr('r', this.radius());\n this.invalidate();\n },\n center: function () {\n return this.srcElement.geometry().center;\n },\n radius: function () {\n return this.srcElement.geometry().radius;\n },\n template: function () {\n return '<circle ' + this.renderStyle() + ' ' + this.renderOpacity() + 'cx=\\'' + this.center().x + '\\' cy=\\'' + this.center().y + '\\' r=\\'' + this.radius() + '\\'' + this.renderStroke() + ' ' + this.renderFill() + ' ' + this.renderDefinitions() + this.renderTransform() + ' ></circle>';\n }\n });\n NODE_MAP.Circle = CircleNode;\n var RectNode = PathNode.extend({\n geometryChange: function () {\n var geometry = this.srcElement.geometry();\n this.attr('x', geometry.origin.x);\n this.attr('y', geometry.origin.y);\n this.attr('width', geometry.size.width);\n this.attr('height', geometry.size.height);\n this.invalidate();\n },\n size: function () {\n return this.srcElement.geometry().size;\n },\n origin: function () {\n return this.srcElement.geometry().origin;\n },\n template: function () {\n return '<rect ' + this.renderStyle() + ' ' + this.renderOpacity() + ' x=\\'' + this.origin().x + '\\' y=\\'' + this.origin().y + '\\' ' + 'width=\\'' + this.size().width + '\\' height=\\'' + this.size().height + '\\' ' + this.renderStroke() + ' ' + this.renderFill() + ' ' + this.renderDefinitions() + ' ' + this.renderTransform() + ' />';\n }\n });\n NODE_MAP.Rect = RectNode;\n var ImageNode = PathNode.extend({\n geometryChange: function () {\n this.allAttr(this.mapPosition());\n this.invalidate();\n },\n optionsChange: function (e) {\n if (e.field === 'src') {\n this.allAttr(this.mapSource());\n }\n PathNode.fn.optionsChange.call(this, e);\n },\n mapPosition: function () {\n var rect = this.srcElement.rect();\n var tl = rect.topLeft();\n return [\n [\n 'x',\n tl.x\n ],\n [\n 'y',\n tl.y\n ],\n [\n 'width',\n rect.width() + 'px'\n ],\n [\n 'height',\n rect.height() + 'px'\n ]\n ];\n },\n renderPosition: function () {\n return renderAllAttr(this.mapPosition());\n },\n mapSource: function (encode) {\n var src = this.srcElement.src();\n if (encode) {\n src = kendo.htmlEncode(src);\n }\n return [[\n 'xlink:href',\n src\n ]];\n },\n renderSource: function () {\n return renderAllAttr(this.mapSource(true));\n },\n template: function () {\n return '<image preserveAspectRatio=\\'none\\' ' + this.renderStyle() + ' ' + this.renderTransform() + ' ' + this.renderOpacity() + this.renderPosition() + ' ' + this.renderSource() + ' ' + this.renderDefinitions() + '>' + '</image>';\n }\n });\n NODE_MAP.Image = ImageNode;\n function decodeEntities(text) {\n if (!text || !text.indexOf || text.indexOf('&') < 0) {\n return text;\n }\n var element = decodeEntities._element;\n element.innerHTML = text;\n return element.textContent || element.innerText;\n }\n if (typeof document !== 'undefined') {\n decodeEntities._element = document.createElement('span');\n }\n var TextNode = PathNode.extend({\n geometryChange: function () {\n var pos = this.pos();\n this.attr('x', pos.x);\n this.attr('y', pos.y);\n this.invalidate();\n },\n optionsChange: function (e) {\n if (e.field === 'font') {\n this.attr('style', renderStyle(this.mapStyle()));\n this.geometryChange();\n } else if (e.field === 'content') {\n PathNode.fn.content.call(this, this.srcElement.content());\n }\n PathNode.fn.optionsChange.call(this, e);\n },\n mapStyle: function (encode) {\n var style = PathNode.fn.mapStyle.call(this, encode);\n var font = this.srcElement.options.font;\n if (encode) {\n font = kendo.htmlEncode(font);\n }\n style.push([\n 'font',\n font\n ]);\n return style;\n },\n pos: function () {\n var pos = this.srcElement.position();\n var size = this.srcElement.measure();\n return pos.clone().setY(pos.y + size.baseline);\n },\n renderContent: function () {\n var content = this.srcElement.content();\n content = decodeEntities(content);\n content = kendo.htmlEncode(content);\n return content;\n },\n template: function () {\n return '<text ' + this.renderStyle() + ' ' + this.renderOpacity() + ' x=\\'' + this.pos().x + '\\' y=\\'' + this.pos().y + '\\'' + this.renderStroke() + ' ' + this.renderTransform() + ' ' + this.renderDefinitions() + this.renderFill() + '>' + this.renderContent() + '</text>';\n }\n });\n NODE_MAP.Text = TextNode;\n var MultiPathNode = PathNode.extend({\n renderData: function () {\n var this$1 = this;\n var paths = this.srcElement.paths;\n if (paths.length > 0) {\n var result = [];\n for (var i = 0; i < paths.length; i++) {\n result.push(this$1.printPath(paths[i]));\n }\n return result.join(' ');\n }\n }\n });\n NODE_MAP.MultiPath = MultiPathNode;\n var geometry = {\n Circle: Circle$2,\n Arc: Arc$2,\n Rect: Rect,\n Point: Point,\n Segment: Segment,\n Matrix: Matrix,\n Size: Size,\n toMatrix: toMatrix,\n Transformation: Transformation,\n transform: transform\n };\n function exportGroup(group) {\n var root = new RootNode();\n var bbox = group.clippedBBox();\n var rootGroup = group;\n if (bbox) {\n var origin = bbox.getOrigin();\n var exportRoot = new Group();\n exportRoot.transform(transform().translate(-origin.x, -origin.y));\n exportRoot.children.push(group);\n rootGroup = exportRoot;\n }\n root.load([rootGroup]);\n var svg = '<?xml version=\\'1.0\\' ?><svg xmlns=\\'' + SVG_NS + '\\' xmlns:xlink=\\'http://www.w3.org/1999/xlink\\' version=\\'1.1\\'>' + root.render() + '</svg>';\n root.destroy();\n return svg;\n }\n var svg = {\n Surface: Surface$1,\n RootNode: RootNode,\n Node: Node,\n GroupNode: GroupNode,\n ArcNode: ArcNode,\n CircleNode: CircleNode,\n RectNode: RectNode,\n ImageNode: ImageNode,\n TextNode: TextNode,\n PathNode: PathNode,\n MultiPathNode: MultiPathNode,\n DefinitionNode: DefinitionNode,\n ClipNode: ClipNode,\n GradientStopNode: GradientStopNode,\n LinearGradientNode: LinearGradientNode,\n RadialGradientNode: RadialGradientNode,\n exportGroup: exportGroup\n };\n var NODE_MAP$2 = {};\n function renderPath(ctx, path) {\n var segments = path.segments;\n if (segments.length === 0) {\n return;\n }\n var segment = segments[0];\n var anchor = segment.anchor();\n ctx.moveTo(anchor.x, anchor.y);\n for (var i = 1; i < segments.length; i++) {\n segment = segments[i];\n anchor = segment.anchor();\n var prevSeg = segments[i - 1];\n var prevOut = prevSeg.controlOut();\n var controlIn = segment.controlIn();\n if (prevOut && controlIn) {\n ctx.bezierCurveTo(prevOut.x, prevOut.y, controlIn.x, controlIn.y, anchor.x, anchor.y);\n } else {\n ctx.lineTo(anchor.x, anchor.y);\n }\n }\n if (path.options.closed) {\n ctx.closePath();\n }\n }\n var Node$2 = BaseNode.extend({\n init: function (srcElement) {\n BaseNode.fn.init.call(this, srcElement);\n if (srcElement) {\n this.initClip();\n }\n },\n initClip: function () {\n var clip = this.srcElement.clip();\n if (clip) {\n this.clip = clip;\n clip.addObserver(this);\n }\n },\n clear: function () {\n if (this.srcElement) {\n this.srcElement.removeObserver(this);\n }\n this.clearClip();\n BaseNode.fn.clear.call(this);\n },\n clearClip: function () {\n if (this.clip) {\n this.clip.removeObserver(this);\n delete this.clip;\n }\n },\n setClip: function (ctx) {\n if (this.clip) {\n ctx.beginPath();\n renderPath(ctx, this.clip);\n ctx.clip();\n }\n },\n optionsChange: function (e) {\n if (e.field === 'clip') {\n this.clearClip();\n this.initClip();\n }\n BaseNode.fn.optionsChange.call(this, e);\n },\n setTransform: function (ctx) {\n if (this.srcElement) {\n var transform = this.srcElement.transform();\n if (transform) {\n ctx.transform.apply(ctx, transform.matrix().toArray(6));\n }\n }\n },\n loadElements: function (elements, pos, cors) {\n var this$1 = this;\n for (var i = 0; i < elements.length; i++) {\n var srcElement = elements[i];\n var children = srcElement.children;\n var childNode = new NODE_MAP$2[srcElement.nodeType](srcElement, cors);\n if (children && children.length > 0) {\n childNode.load(children, pos, cors);\n }\n if (defined(pos)) {\n this$1.insertAt(childNode, pos);\n } else {\n this$1.append(childNode);\n }\n }\n },\n load: function (elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n this.invalidate();\n },\n setOpacity: function (ctx) {\n if (this.srcElement) {\n var opacity = this.srcElement.opacity();\n if (defined(opacity)) {\n this.globalAlpha(ctx, opacity);\n }\n }\n },\n globalAlpha: function (ctx, value) {\n var opactity = value;\n if (opactity && ctx.globalAlpha) {\n opactity *= ctx.globalAlpha;\n }\n ctx.globalAlpha = opactity;\n },\n visible: function () {\n var src = this.srcElement;\n return !src || src && src.options.visible !== false;\n }\n });\n var GroupNode$2 = Node$2.extend({\n renderTo: function (ctx) {\n if (!this.visible()) {\n return;\n }\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n var childNodes = this.childNodes;\n for (var i = 0; i < childNodes.length; i++) {\n var child = childNodes[i];\n if (child.visible()) {\n child.renderTo(ctx);\n }\n }\n ctx.restore();\n }\n });\n Traversable.extend(GroupNode$2.prototype, 'childNodes');\n NODE_MAP$2.Group = GroupNode$2;\n var FRAME_DELAY = 1000 / 60;\n var RootNode$2 = GroupNode$2.extend({\n init: function (canvas) {\n GroupNode$2.fn.init.call(this);\n this.canvas = canvas;\n this.ctx = canvas.getContext('2d');\n var invalidateHandler = this._invalidate.bind(this);\n this.invalidate = kendo.throttle(function () {\n kendo.animationFrame(invalidateHandler);\n }, FRAME_DELAY);\n },\n destroy: function () {\n GroupNode$2.fn.destroy.call(this);\n this.canvas = null;\n this.ctx = null;\n },\n load: function (elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n this._invalidate();\n },\n _invalidate: function () {\n if (!this.ctx) {\n return;\n }\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.renderTo(this.ctx);\n }\n });\n Traversable.extend(RootNode$2.prototype, 'childNodes');\n var QuadRoot = Class.extend({\n init: function () {\n this.shapes = [];\n },\n _add: function (shape, bbox) {\n this.shapes.push({\n bbox: bbox,\n shape: shape\n });\n shape._quadNode = this;\n },\n pointShapes: function (point) {\n var shapes = this.shapes;\n var length = shapes.length;\n var result = [];\n for (var idx = 0; idx < length; idx++) {\n if (shapes[idx].bbox.containsPoint(point)) {\n result.push(shapes[idx].shape);\n }\n }\n return result;\n },\n insert: function (shape, bbox) {\n this._add(shape, bbox);\n },\n remove: function (shape) {\n var shapes = this.shapes;\n var length = shapes.length;\n for (var idx = 0; idx < length; idx++) {\n if (shapes[idx].shape === shape) {\n shapes.splice(idx, 1);\n break;\n }\n }\n }\n });\n var QuadNode = QuadRoot.extend({\n init: function (rect) {\n QuadRoot.fn.init.call(this);\n this.children = [];\n this.rect = rect;\n },\n inBounds: function (rect) {\n var nodeRect = this.rect;\n var nodeBottomRight = nodeRect.bottomRight();\n var bottomRight = rect.bottomRight();\n var inBounds = nodeRect.origin.x <= rect.origin.x && nodeRect.origin.y <= rect.origin.y && bottomRight.x <= nodeBottomRight.x && bottomRight.y <= nodeBottomRight.y;\n return inBounds;\n },\n pointShapes: function (point) {\n var children = this.children;\n var length = children.length;\n var result = QuadRoot.fn.pointShapes.call(this, point);\n for (var idx = 0; idx < length; idx++) {\n append(result, children[idx].pointShapes(point));\n }\n return result;\n },\n insert: function (shape, bbox) {\n var children = this.children;\n var inserted = false;\n if (this.inBounds(bbox)) {\n if (this.shapes.length < 4) {\n this._add(shape, bbox);\n } else {\n if (!children.length) {\n this._initChildren();\n }\n for (var idx = 0; idx < children.length; idx++) {\n if (children[idx].insert(shape, bbox)) {\n inserted = true;\n break;\n }\n }\n if (!inserted) {\n this._add(shape, bbox);\n }\n }\n inserted = true;\n }\n return inserted;\n },\n _initChildren: function () {\n var ref = this;\n var rect = ref.rect;\n var children = ref.children;\n var center = rect.center();\n var halfWidth = rect.width() / 2;\n var halfHeight = rect.height() / 2;\n children.push(new QuadNode(new Rect([\n rect.origin.x,\n rect.origin.y\n ], [\n halfWidth,\n halfHeight\n ])), new QuadNode(new Rect([\n center.x,\n rect.origin.y\n ], [\n halfWidth,\n halfHeight\n ])), new QuadNode(new Rect([\n rect.origin.x,\n center.y\n ], [\n halfWidth,\n halfHeight\n ])), new QuadNode(new Rect([\n center.x,\n center.y\n ], [\n halfWidth,\n halfHeight\n ])));\n }\n });\n var ROOT_SIZE = 3000;\n var LEVEL_STEP = 10000;\n var MAX_LEVEL = 75;\n var ShapesQuadTree = Class.extend({\n init: function () {\n this.initRoots();\n },\n initRoots: function () {\n this.rootMap = {};\n this.root = new QuadRoot();\n this.rootElements = [];\n },\n clear: function () {\n var this$1 = this;\n var rootElements = this.rootElements;\n for (var idx = 0; idx < rootElements.length; idx++) {\n this$1.remove(rootElements[idx]);\n }\n this.initRoots();\n },\n pointShape: function (point) {\n var sectorRoot = (this.rootMap[Math.floor(point.x / ROOT_SIZE)] || {})[Math.floor(point.y / ROOT_SIZE)];\n var result = this.root.pointShapes(point);\n if (sectorRoot) {\n result = result.concat(sectorRoot.pointShapes(point));\n }\n this.assignZindex(result);\n result.sort(zIndexComparer);\n for (var idx = 0; idx < result.length; idx++) {\n if (result[idx].containsPoint(point)) {\n return result[idx];\n }\n }\n },\n assignZindex: function (elements) {\n var this$1 = this;\n for (var idx = 0; idx < elements.length; idx++) {\n var element = elements[idx];\n var zIndex = 0;\n var levelWeight = Math.pow(LEVEL_STEP, MAX_LEVEL);\n var parents = [];\n while (element) {\n parents.push(element);\n element = element.parent;\n }\n while (parents.length) {\n element = parents.pop();\n zIndex += ((element.parent ? element.parent.children : this$1.rootElements).indexOf(element) + 1) * levelWeight;\n levelWeight /= LEVEL_STEP;\n }\n elements[idx]._zIndex = zIndex;\n }\n },\n optionsChange: function (e) {\n if (e.field === 'transform' || e.field === 'stroke.width') {\n this.bboxChange(e.element);\n }\n },\n geometryChange: function (e) {\n this.bboxChange(e.element);\n },\n bboxChange: function (element) {\n var this$1 = this;\n if (element.nodeType === 'Group') {\n for (var idx = 0; idx < element.children.length; idx++) {\n this$1.bboxChange(element.children[idx]);\n }\n } else {\n if (element._quadNode) {\n element._quadNode.remove(element);\n }\n this._insertShape(element);\n }\n },\n add: function (elements) {\n var elementsArray = Array.isArray(elements) ? elements.slice(0) : [elements];\n append(this.rootElements, elementsArray);\n this._insert(elementsArray);\n },\n childrenChange: function (e) {\n var this$1 = this;\n if (e.action === 'remove') {\n for (var idx = 0; idx < e.items.length; idx++) {\n this$1.remove(e.items[idx]);\n }\n } else {\n this._insert(Array.prototype.slice.call(e.items, 0));\n }\n },\n _insert: function (elements) {\n var this$1 = this;\n var element;\n while (elements.length > 0) {\n element = elements.pop();\n element.addObserver(this$1);\n if (element.nodeType === 'Group') {\n append(elements, element.children);\n } else {\n this$1._insertShape(element);\n }\n }\n },\n _insertShape: function (shape) {\n var bbox = shape.bbox();\n if (bbox) {\n var sectors = this.getSectors(bbox);\n var x = sectors[0][0];\n var y = sectors[1][0];\n if (this.inRoot(sectors)) {\n this.root.insert(shape, bbox);\n } else {\n var rootMap = this.rootMap;\n if (!rootMap[x]) {\n rootMap[x] = {};\n }\n if (!rootMap[x][y]) {\n rootMap[x][y] = new QuadNode(new Rect([\n x * ROOT_SIZE,\n y * ROOT_SIZE\n ], [\n ROOT_SIZE,\n ROOT_SIZE\n ]));\n }\n rootMap[x][y].insert(shape, bbox);\n }\n }\n },\n remove: function (element) {\n var this$1 = this;\n element.removeObserver(this);\n if (element.nodeType === 'Group') {\n var children = element.children;\n for (var idx = 0; idx < children.length; idx++) {\n this$1.remove(children[idx]);\n }\n } else if (element._quadNode) {\n element._quadNode.remove(element);\n delete element._quadNode;\n }\n },\n inRoot: function (sectors) {\n return sectors[0].length > 1 || sectors[1].length > 1;\n },\n getSectors: function (rect) {\n var bottomRight = rect.bottomRight();\n var bottomX = Math.floor(bottomRight.x / ROOT_SIZE);\n var bottomY = Math.floor(bottomRight.y / ROOT_SIZE);\n var sectors = [\n [],\n []\n ];\n for (var x = Math.floor(rect.origin.x / ROOT_SIZE); x <= bottomX; x++) {\n sectors[0].push(x);\n }\n for (var y = Math.floor(rect.origin.y / ROOT_SIZE); y <= bottomY; y++) {\n sectors[1].push(y);\n }\n return sectors;\n }\n });\n function zIndexComparer(x1, x2) {\n if (x1._zIndex < x2._zIndex) {\n return 1;\n }\n if (x1._zIndex > x2._zIndex) {\n return -1;\n }\n return 0;\n }\n var Surface$3 = Surface.extend({\n init: function (element, options) {\n Surface.fn.init.call(this, element, options);\n this.element.innerHTML = this._template(this);\n var canvas = this.element.firstElementChild;\n var size = elementSize(element);\n canvas.width = size.width;\n canvas.height = size.height;\n this._rootElement = canvas;\n this._root = new RootNode$2(canvas);\n this._mouseTrackHandler = this._trackMouse.bind(this);\n bindEvents(this.element, {\n click: this._mouseTrackHandler,\n mousemove: this._mouseTrackHandler\n });\n },\n destroy: function () {\n Surface.fn.destroy.call(this);\n if (this._root) {\n this._root.destroy();\n this._root = null;\n }\n if (this._searchTree) {\n this._searchTree.clear();\n delete this._searchTree;\n }\n unbindEvents(this.element, {\n click: this._mouseTrackHandler,\n mousemove: this._mouseTrackHandler\n });\n },\n draw: function (element) {\n Surface.fn.draw.call(this, element);\n this._root.load([element], undefined, this.options.cors);\n if (this._searchTree) {\n this._searchTree.add([element]);\n }\n },\n clear: function () {\n Surface.fn.clear.call(this);\n this._root.clear();\n if (this._searchTree) {\n this._searchTree.clear();\n }\n },\n eventTarget: function (e) {\n if (this._searchTree) {\n var point = this._surfacePoint(e);\n var shape = this._searchTree.pointShape(point);\n return shape;\n }\n },\n image: function () {\n var ref = this;\n var root = ref._root;\n var rootElement = ref._rootElement;\n var loadingStates = [];\n root.traverse(function (childNode) {\n if (childNode.loading) {\n loadingStates.push(childNode.loading);\n }\n });\n var promise = createPromise();\n promiseAll(loadingStates).then(function () {\n root._invalidate();\n try {\n var data = rootElement.toDataURL();\n promise.resolve(data);\n } catch (e) {\n promise.reject(e);\n }\n }, function (e) {\n promise.reject(e);\n });\n return promise;\n },\n suspendTracking: function () {\n Surface.fn.suspendTracking.call(this);\n if (this._searchTree) {\n this._searchTree.clear();\n delete this._searchTree;\n }\n },\n resumeTracking: function () {\n Surface.fn.resumeTracking.call(this);\n if (!this._searchTree) {\n this._searchTree = new ShapesQuadTree();\n var childNodes = this._root.childNodes;\n var rootElements = [];\n for (var idx = 0; idx < childNodes.length; idx++) {\n rootElements.push(childNodes[idx].srcElement);\n }\n this._searchTree.add(rootElements);\n }\n },\n _resize: function () {\n this._rootElement.width = this._size.width;\n this._rootElement.height = this._size.height;\n this._root.invalidate();\n },\n _template: function () {\n return '<canvas style=\\'width: 100%; height: 100%;\\'></canvas>';\n },\n _enableTracking: function () {\n this._searchTree = new ShapesQuadTree();\n Surface.fn._enableTracking.call(this);\n },\n _trackMouse: function (e) {\n if (this._suspendedTracking) {\n return;\n }\n var shape = this.eventTarget(e);\n if (e.type !== 'click') {\n var currentShape = this._currentShape;\n if (currentShape && currentShape !== shape) {\n this.trigger('mouseleave', {\n element: currentShape,\n originalEvent: e,\n type: 'mouseleave'\n });\n }\n if (shape && currentShape !== shape) {\n this.trigger('mouseenter', {\n element: shape,\n originalEvent: e,\n type: 'mouseenter'\n });\n }\n this.trigger('mousemove', {\n element: shape,\n originalEvent: e,\n type: 'mousemove'\n });\n this._currentShape = shape;\n } else if (shape) {\n this.trigger('click', {\n element: shape,\n originalEvent: e,\n type: 'click'\n });\n }\n }\n });\n Surface$3.prototype.type = 'canvas';\n if (typeof document !== 'undefined' && document.createElement('canvas').getContext) {\n Surface.support.canvas = true;\n SurfaceFactory.current.register('canvas', Surface$3, 20);\n }\n function addGradientStops(gradient, stops) {\n for (var idx = 0; idx < stops.length; idx++) {\n var stop = stops[idx];\n var color = kendo.parseColor(stop.color());\n color.a *= stop.opacity();\n gradient.addColorStop(stop.offset(), color.toCssRgba());\n }\n }\n var PathNode$2 = Node$2.extend({\n renderTo: function (ctx) {\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n ctx.beginPath();\n this.renderPoints(ctx, this.srcElement);\n this.setLineDash(ctx);\n this.setLineCap(ctx);\n this.setLineJoin(ctx);\n this.setFill(ctx);\n this.setStroke(ctx);\n ctx.restore();\n },\n setFill: function (ctx) {\n var fill = this.srcElement.options.fill;\n var hasFill = false;\n if (fill) {\n if (fill.nodeType === 'Gradient') {\n this.setGradientFill(ctx, fill);\n hasFill = true;\n } else if (!isTransparent(fill.color)) {\n ctx.fillStyle = fill.color;\n ctx.save();\n this.globalAlpha(ctx, fill.opacity);\n ctx.fill();\n ctx.restore();\n hasFill = true;\n }\n }\n return hasFill;\n },\n setGradientFill: function (ctx, fill) {\n var bbox = this.srcElement.rawBBox();\n var gradient;\n if (fill instanceof LinearGradient) {\n var start = fill.start();\n var end = fill.end();\n gradient = ctx.createLinearGradient(start.x, start.y, end.x, end.y);\n } else if (fill instanceof RadialGradient) {\n var center = fill.center();\n gradient = ctx.createRadialGradient(center.x, center.y, 0, center.x, center.y, fill.radius());\n }\n addGradientStops(gradient, fill.stops);\n ctx.save();\n if (!fill.userSpace()) {\n ctx.transform(bbox.width(), 0, 0, bbox.height(), bbox.origin.x, bbox.origin.y);\n }\n ctx.fillStyle = gradient;\n ctx.fill();\n ctx.restore();\n },\n setStroke: function (ctx) {\n var stroke = this.srcElement.options.stroke;\n if (stroke && !isTransparent(stroke.color) && stroke.width > 0) {\n ctx.strokeStyle = stroke.color;\n ctx.lineWidth = valueOrDefault(stroke.width, 1);\n ctx.save();\n this.globalAlpha(ctx, stroke.opacity);\n ctx.stroke();\n ctx.restore();\n return true;\n }\n },\n dashType: function () {\n var stroke = this.srcElement.options.stroke;\n if (stroke && stroke.dashType) {\n return stroke.dashType.toLowerCase();\n }\n },\n setLineDash: function (ctx) {\n var dashType = this.dashType();\n if (dashType && dashType !== SOLID) {\n var dashArray = DASH_ARRAYS[dashType];\n if (ctx.setLineDash) {\n ctx.setLineDash(dashArray);\n } else {\n ctx.mozDash = dashArray;\n ctx.webkitLineDash = dashArray;\n }\n }\n },\n setLineCap: function (ctx) {\n var dashType = this.dashType();\n var stroke = this.srcElement.options.stroke;\n if (dashType && dashType !== SOLID) {\n ctx.lineCap = BUTT;\n } else if (stroke && stroke.lineCap) {\n ctx.lineCap = stroke.lineCap;\n }\n },\n setLineJoin: function (ctx) {\n var stroke = this.srcElement.options.stroke;\n if (stroke && stroke.lineJoin) {\n ctx.lineJoin = stroke.lineJoin;\n }\n },\n renderPoints: function (ctx, path) {\n renderPath(ctx, path);\n }\n });\n NODE_MAP$2.Path = PathNode$2;\n var ArcNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var path = this.srcElement.toPath();\n renderPath(ctx, path);\n }\n });\n NODE_MAP$2.Arc = ArcNode$2;\n var CircleNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var ref = this.srcElement.geometry();\n var center = ref.center;\n var radius = ref.radius;\n ctx.arc(center.x, center.y, radius, 0, Math.PI * 2);\n }\n });\n NODE_MAP$2.Circle = CircleNode$2;\n var RectNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var ref = this.srcElement.geometry();\n var origin = ref.origin;\n var size = ref.size;\n ctx.rect(origin.x, origin.y, size.width, size.height);\n }\n });\n NODE_MAP$2.Rect = RectNode$2;\n var ImageNode$2 = PathNode$2.extend({\n init: function (srcElement, cors) {\n PathNode$2.fn.init.call(this, srcElement);\n this.onLoad = this.onLoad.bind(this);\n this.onError = this.onError.bind(this);\n this.loading = createPromise();\n var img = this.img = new Image();\n if (cors && !/^data:/i.test(srcElement.src())) {\n img.crossOrigin = cors;\n }\n img.src = srcElement.src();\n if (img.complete) {\n this.onLoad();\n } else {\n img.onload = this.onLoad;\n img.onerror = this.onError;\n }\n },\n renderTo: function (ctx) {\n if (this.loading.state() === 'resolved') {\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.drawImage(ctx);\n ctx.restore();\n }\n },\n optionsChange: function (e) {\n if (e.field === 'src') {\n this.loading = createPromise();\n this.img.src = this.srcElement.src();\n } else {\n PathNode$2.fn.optionsChange.call(this, e);\n }\n },\n onLoad: function () {\n this.loading.resolve();\n this.invalidate();\n },\n onError: function () {\n this.loading.reject(new Error('Unable to load image \\'' + this.img.src + '\\'. Check for connectivity and verify CORS headers.'));\n },\n drawImage: function (ctx) {\n var rect = this.srcElement.rect();\n var topLeft = rect.topLeft();\n ctx.drawImage(this.img, topLeft.x, topLeft.y, rect.width(), rect.height());\n }\n });\n NODE_MAP$2.Image = ImageNode$2;\n var TextNode$2 = PathNode$2.extend({\n renderTo: function (ctx) {\n var text = this.srcElement;\n var pos = text.position();\n var size = text.measure();\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n ctx.beginPath();\n ctx.font = text.options.font;\n if (this.setFill(ctx)) {\n ctx.fillText(text.content(), pos.x, pos.y + size.baseline);\n }\n if (this.setStroke(ctx)) {\n this.setLineDash(ctx);\n ctx.strokeText(text.content(), pos.x, pos.y + size.baseline);\n }\n ctx.restore();\n }\n });\n NODE_MAP$2.Text = TextNode$2;\n var MultiPathNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var paths = this.srcElement.paths;\n for (var i = 0; i < paths.length; i++) {\n renderPath(ctx, paths[i]);\n }\n }\n });\n NODE_MAP$2.MultiPath = MultiPathNode$2;\n var canvas = {\n Surface: Surface$3,\n RootNode: RootNode$2,\n Node: Node$2,\n GroupNode: GroupNode$2,\n ArcNode: ArcNode$2,\n CircleNode: CircleNode$2,\n RectNode: RectNode$2,\n ImageNode: ImageNode$2,\n TextNode: TextNode$2,\n PathNode: PathNode$2,\n MultiPathNode: MultiPathNode$2\n };\n function exportImage(group, options) {\n var defaults = {\n width: '800px',\n height: '600px',\n cors: 'Anonymous'\n };\n var exportRoot = group;\n var bbox = group.clippedBBox();\n if (bbox) {\n var origin = bbox.getOrigin();\n exportRoot = new Group();\n exportRoot.transform(transform().translate(-origin.x, -origin.y));\n exportRoot.children.push(group);\n var size = bbox.getSize();\n defaults.width = size.width + 'px';\n defaults.height = size.height + 'px';\n }\n var surfaceOptions = $.extend(defaults, options);\n var container = document.createElement('div');\n var style = container.style;\n style.display = 'none';\n style.width = surfaceOptions.width;\n style.height = surfaceOptions.height;\n document.body.appendChild(container);\n var surface = new Surface$3(container, surfaceOptions);\n surface.suspendTracking();\n surface.draw(exportRoot);\n var promise = surface.image();\n var destroy = function () {\n surface.destroy();\n document.body.removeChild(container);\n };\n promise.then(destroy, destroy);\n return promise;\n }\n function exportSVG(group, options) {\n var svg = exportGroup(group);\n if (!options || !options.raw) {\n svg = 'data:image/svg+xml;base64,' + encodeBase64(svg);\n }\n return createPromise().resolve(svg);\n }\n var browser = support.browser;\n function slice$1(thing) {\n return Array.prototype.slice.call(thing);\n }\n var KENDO_PSEUDO_ELEMENT = 'KENDO-PSEUDO-ELEMENT';\n var IMAGE_CACHE = {};\n var nodeInfo = {};\n nodeInfo._root = nodeInfo;\n var TextRect = Text.extend({\n init: function (str, rect, options) {\n Text.fn.init.call(this, str, rect.getOrigin(), options);\n this._pdfRect = rect;\n },\n rect: function () {\n return this._pdfRect;\n },\n rawBBox: function () {\n return this._pdfRect;\n }\n });\n function addClass(el, cls) {\n if (el.classList) {\n el.classList.add(cls);\n } else {\n el.className += ' ' + cls;\n }\n }\n function removeClass(el, cls) {\n if (el.classList) {\n el.classList.remove(cls);\n } else {\n el.className = el.className.split(/\\s+/).reduce(function (a, word) {\n if (word != cls) {\n a.push(word);\n }\n return a;\n }, []).join(' ');\n }\n }\n function setCSS(el, styles) {\n Object.keys(styles).forEach(function (key) {\n el.style[key] = styles[key];\n });\n }\n var matches = typeof Element !== 'undefined' && Element.prototype && function (p) {\n if (p.matches) {\n return function (el, selector) {\n return el.matches(selector);\n };\n }\n if (p.webkitMatchesSelector) {\n return function (el, selector) {\n return el.webkitMatchesSelector(selector);\n };\n }\n if (p.mozMatchesSelector) {\n return function (el, selector) {\n return el.mozMatchesSelector(selector);\n };\n }\n if (p.msMatchesSelector) {\n return function (el, selector) {\n return el.msMatchesSelector(selector);\n };\n }\n return function (s) {\n return [].indexOf.call(document.querySelectorAll(s), this) !== -1;\n };\n }(Element.prototype);\n function closest(el, selector) {\n if (el.closest) {\n return el.closest(selector);\n }\n while (el && el !== document) {\n if (matches(el, selector)) {\n return el;\n }\n el = el.parentNode;\n }\n }\n var cloneNodes = function ($) {\n if ($) {\n return function cloneNodes(el) {\n var clone = el.cloneNode(false);\n if (el.nodeType == 1) {\n var $el = $(el), $clone = $(clone), i;\n var data = $el.data();\n for (i in data) {\n $clone.data(i, data[i]);\n }\n if (/^canvas$/i.test(el.tagName)) {\n clone.getContext('2d').drawImage(el, 0, 0);\n } else if (/^input$/i.test(el.tagName)) {\n el.removeAttribute('name');\n } else {\n for (i = el.firstChild; i; i = i.nextSibling) {\n clone.appendChild(cloneNodes(i));\n }\n }\n }\n return clone;\n };\n } else {\n return function cloneNodes(el) {\n var clone = el.cloneNode(true);\n var canvases = el.querySelectorAll('canvas');\n if (canvases.length) {\n slice$1(clone.querySelectorAll('canvas')).forEach(function (canvas$$1, i) {\n canvas$$1.getContext('2d').drawImage(canvases[i], 0, 0);\n });\n }\n slice$1(clone.querySelectorAll('input')).forEach(function (input) {\n input.removeAttribute('name');\n });\n return clone;\n };\n }\n }(typeof window !== 'undefined' && window.kendo && window.kendo.jQuery);\n function getXY(thing) {\n if (typeof thing == 'number') {\n return {\n x: thing,\n y: thing\n };\n }\n if (Array.isArray(thing)) {\n return {\n x: thing[0],\n y: thing[1]\n };\n }\n return {\n x: thing.x,\n y: thing.y\n };\n }\n function drawDOM(element, options) {\n if (!options) {\n options = {};\n }\n var promise = createPromise();\n if (!element) {\n return promise.reject('No element to export');\n }\n if (typeof window.getComputedStyle != 'function') {\n throw new Error('window.getComputedStyle is missing. You are using an unsupported browser, or running in IE8 compatibility mode. Drawing HTML is supported in Chrome, Firefox, Safari and IE9+.');\n }\n kendo.pdf.defineFont(getFontFaces(element.ownerDocument));\n var scale = getXY(options.scale || 1);\n function doOne(element) {\n var group = new Group();\n var pos = element.getBoundingClientRect();\n setTransform(group, [\n scale.x,\n 0,\n 0,\n scale.y,\n -pos.left * scale.x,\n -pos.top * scale.y\n ]);\n nodeInfo._clipbox = false;\n nodeInfo._matrix = Matrix.unit();\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n if (options.avoidLinks === true) {\n nodeInfo._avoidLinks = 'a';\n } else {\n nodeInfo._avoidLinks = options.avoidLinks;\n }\n addClass(element, 'k-pdf-export');\n renderElement(element, group);\n removeClass(element, 'k-pdf-export');\n return group;\n }\n cacheImages(element, function () {\n var forceBreak = options && options.forcePageBreak;\n var hasPaperSize = options && options.paperSize && options.paperSize != 'auto';\n var paperOptions = kendo.pdf.getPaperOptions(function (key, def) {\n if (key == 'paperSize') {\n return hasPaperSize ? options[key] : 'A4';\n }\n return key in options ? options[key] : def;\n });\n var pageWidth = hasPaperSize && paperOptions.paperSize[0];\n var pageHeight = hasPaperSize && paperOptions.paperSize[1];\n var margin = options.margin && paperOptions.margin;\n var hasMargin = Boolean(margin);\n if (forceBreak || pageHeight) {\n if (!margin) {\n margin = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n }\n if (pageWidth) {\n pageWidth /= scale.x;\n }\n if (pageHeight) {\n pageHeight /= scale.y;\n }\n margin.left /= scale.x;\n margin.right /= scale.x;\n margin.top /= scale.y;\n margin.bottom /= scale.y;\n var group = new Group({\n pdf: {\n multiPage: true,\n paperSize: hasPaperSize ? paperOptions.paperSize : 'auto',\n _ignoreMargin: hasMargin\n }\n });\n handlePageBreaks(function (x) {\n if (options.progress) {\n var canceled = false, pageNum = 0;\n (function next() {\n if (pageNum < x.pages.length) {\n var page = doOne(x.pages[pageNum]);\n group.append(page);\n options.progress({\n page: page,\n pageNum: ++pageNum,\n totalPages: x.pages.length,\n cancel: function () {\n canceled = true;\n }\n });\n if (!canceled) {\n setTimeout(next);\n } else {\n x.container.parentNode.removeChild(x.container);\n }\n } else {\n x.container.parentNode.removeChild(x.container);\n promise.resolve(group);\n }\n }());\n } else {\n x.pages.forEach(function (page) {\n group.append(doOne(page));\n });\n x.container.parentNode.removeChild(x.container);\n promise.resolve(group);\n }\n }, element, forceBreak, pageWidth ? pageWidth - margin.left - margin.right : null, pageHeight ? pageHeight - margin.top - margin.bottom : null, margin, options);\n } else {\n promise.resolve(doOne(element));\n }\n });\n function makeTemplate(template$$1) {\n if (template$$1 != null) {\n if (typeof template$$1 == 'string') {\n template$$1 = kendo.template(template$$1.replace(/^\\s+|\\s+$/g, ''));\n }\n if (typeof template$$1 == 'function') {\n return function (data) {\n var el = template$$1(data);\n if (el && typeof el == 'string') {\n var div = document.createElement('div');\n div.innerHTML = el;\n el = div.firstElementChild;\n }\n return el;\n };\n }\n return function () {\n return template$$1.cloneNode(true);\n };\n }\n }\n function handlePageBreaks(callback, element, forceBreak, pageWidth, pageHeight, margin, options) {\n var template$$1 = makeTemplate(options.template);\n var doc = element.ownerDocument;\n var pages = [];\n var copy = options._destructive ? element : cloneNodes(element);\n var container = doc.createElement('KENDO-PDF-DOCUMENT');\n var adjust = 0;\n slice$1(copy.querySelectorAll('tfoot')).forEach(function (tfoot) {\n tfoot.parentNode.appendChild(tfoot);\n });\n slice$1(copy.querySelectorAll('ol')).forEach(function (ol) {\n slice$1(ol.children).forEach(function (li, index) {\n li.setAttribute('kendo-split-index', index);\n });\n });\n setCSS(container, {\n display: 'block',\n position: 'absolute',\n boxSizing: 'content-box',\n left: '-10000px',\n top: '-10000px'\n });\n if (pageWidth) {\n setCSS(container, {\n width: pageWidth + 'px',\n paddingLeft: margin.left + 'px',\n paddingRight: margin.right + 'px'\n });\n setCSS(copy, { overflow: 'hidden' });\n }\n element.parentNode.insertBefore(container, element);\n container.appendChild(copy);\n if (options.beforePageBreak) {\n setTimeout(function () {\n options.beforePageBreak(container, doPageBreak);\n }, 15);\n } else {\n setTimeout(doPageBreak, 15);\n }\n function doPageBreak() {\n if (forceBreak != '-' || pageHeight) {\n splitElement(copy);\n }\n var page = makePage();\n copy.parentNode.insertBefore(page, copy);\n page.appendChild(copy);\n if (template$$1) {\n var count = pages.length;\n pages.forEach(function (page, i) {\n var el = template$$1({\n element: page,\n pageNum: i + 1,\n totalPages: pages.length\n });\n if (el) {\n page.appendChild(el);\n cacheImages(el, function () {\n if (--count === 0) {\n next();\n }\n });\n }\n });\n } else {\n next();\n }\n function next() {\n whenImagesAreActuallyLoaded(pages, function () {\n callback({\n pages: pages,\n container: container\n });\n });\n }\n }\n function keepTogether(el) {\n if (options.keepTogether && matches(el, options.keepTogether) && el.offsetHeight <= pageHeight - adjust) {\n return true;\n }\n var tag = el.tagName;\n if (/^h[1-6]$/i.test(tag) && el.offsetHeight >= pageHeight - adjust) {\n return false;\n }\n return el.getAttribute('data-kendo-chart') || /^(?:img|tr|thead|th|tfoot|iframe|svg|object|canvas|input|textarea|select|video|h[1-6])/i.test(el.tagName);\n }\n function splitElement(element) {\n var style = getComputedStyle(element);\n var bottomPadding = parseFloat(getPropertyValue(style, 'padding-bottom'));\n var bottomBorder = parseFloat(getPropertyValue(style, 'border-bottom-width'));\n var saveAdjust = adjust;\n adjust += bottomPadding + bottomBorder;\n var isFirst = true;\n for (var el = element.firstChild; el; el = el.nextSibling) {\n if (el.nodeType == 1) {\n isFirst = false;\n if (matches(el, forceBreak)) {\n breakAtElement(el);\n continue;\n }\n if (!pageHeight) {\n splitElement(el);\n continue;\n }\n if (!/^(?:static|relative)$/.test(getPropertyValue(getComputedStyle(el), 'position'))) {\n continue;\n }\n var fall = fallsOnMargin(el);\n if (fall == 1) {\n breakAtElement(el);\n } else if (fall) {\n if (keepTogether(el)) {\n breakAtElement(el);\n } else {\n splitElement(el);\n }\n } else {\n splitElement(el);\n }\n } else if (el.nodeType == 3 && pageHeight) {\n splitText(el, isFirst);\n isFirst = false;\n }\n }\n adjust = saveAdjust;\n }\n function firstInParent(el) {\n var p = el.parentNode, first = p.firstChild;\n if (el === first) {\n return true;\n }\n if (el === p.children[0]) {\n if (first.nodeType == 7 || first.nodeType == 8) {\n return true;\n }\n if (first.nodeType == 3) {\n return !/\\S/.test(first.data);\n }\n }\n return false;\n }\n function breakAtElement(el) {\n if (el.nodeType == 1 && el !== copy && firstInParent(el)) {\n return breakAtElement(el.parentNode);\n }\n var table, colgroup, thead, grid, gridHead;\n table = closest(el, 'table');\n colgroup = table && table.querySelector('colgroup');\n if (options.repeatHeaders) {\n thead = table && table.querySelector('thead');\n grid = closest(el, '.k-grid[data-role=\"grid\"]');\n if (grid && grid.querySelector('.k-auto-scrollable')) {\n gridHead = grid.querySelector('.k-grid-header');\n }\n }\n var page = makePage();\n var range = doc.createRange();\n range.setStartBefore(copy);\n range.setEndBefore(el);\n page.appendChild(range.extractContents());\n copy.parentNode.insertBefore(page, copy);\n preventBulletOnListItem(el.parentNode);\n if (table) {\n table = closest(el, 'table');\n if (options.repeatHeaders && thead) {\n table.insertBefore(thead.cloneNode(true), table.firstChild);\n }\n if (colgroup) {\n table.insertBefore(colgroup.cloneNode(true), table.firstChild);\n }\n }\n if (options.repeatHeaders && gridHead) {\n grid = closest(el, '.k-grid[data-role=\"grid\"]');\n grid.insertBefore(gridHead.cloneNode(true), grid.firstChild);\n }\n }\n function makePage() {\n var page = doc.createElement('KENDO-PDF-PAGE');\n setCSS(page, {\n display: 'block',\n boxSizing: 'content-box',\n width: pageWidth ? pageWidth + 'px' : 'auto',\n padding: margin.top + 'px ' + margin.right + 'px ' + margin.bottom + 'px ' + margin.left + 'px',\n position: 'relative',\n height: pageHeight ? pageHeight + 'px' : 'auto',\n overflow: pageHeight || pageWidth ? 'hidden' : 'visible',\n clear: 'both'\n });\n if (options && options.pageClassName) {\n page.className = options.pageClassName;\n }\n pages.push(page);\n return page;\n }\n function fallsOnMargin(thing) {\n var box = thing.getBoundingClientRect();\n if (box.width === 0 || box.height === 0) {\n return 0;\n }\n var top = copy.getBoundingClientRect().top;\n var available = pageHeight - adjust;\n return box.height > available ? 3 : box.top - top > available ? 1 : box.bottom - top > available ? 2 : 0;\n }\n function splitText(node, isFirst) {\n if (!/\\S/.test(node.data)) {\n return;\n }\n var len = node.data.length;\n var range = doc.createRange();\n range.selectNodeContents(node);\n var fall = fallsOnMargin(range);\n if (!fall) {\n return;\n }\n var nextnode = node;\n if (fall == 1) {\n if (isFirst) {\n breakAtElement(node.parentNode);\n } else {\n breakAtElement(node);\n }\n } else {\n (function findEOP(min, pos, max) {\n range.setEnd(node, pos);\n if (min == pos || pos == max) {\n return pos;\n }\n if (fallsOnMargin(range)) {\n return findEOP(min, min + pos >> 1, pos);\n } else {\n return findEOP(pos, pos + max >> 1, max);\n }\n }(0, len >> 1, len));\n if (!/\\S/.test(range.toString()) && isFirst) {\n breakAtElement(node.parentNode);\n } else {\n nextnode = node.splitText(range.endOffset);\n var page = makePage();\n range.setStartBefore(copy);\n page.appendChild(range.extractContents());\n copy.parentNode.insertBefore(page, copy);\n preventBulletOnListItem(nextnode.parentNode);\n }\n }\n splitText(nextnode);\n }\n function preventBulletOnListItem(el) {\n var li = closest(el, 'li');\n if (li) {\n li.setAttribute('kendo-no-bullet', '1');\n preventBulletOnListItem(li.parentNode);\n }\n }\n }\n return promise;\n }\n drawDOM.getFontFaces = getFontFaces;\n drawDOM.drawText = function (element) {\n var group = new Group();\n nodeInfo._clipbox = false;\n nodeInfo._matrix = Matrix.unit();\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n pushNodeInfo(element, getComputedStyle(element), group);\n if (element.firstChild.nodeType == 3) {\n renderText(element, element.firstChild, group);\n } else {\n _renderElement(element, group);\n }\n popNodeInfo();\n return group;\n };\n var parseBackgroundImage = function () {\n var tok_linear_gradient = /^((-webkit-|-moz-|-o-|-ms-)?linear-gradient\\s*)\\(/;\n var tok_percent = /^([-0-9.]+%)/;\n var tok_length = /^([-0-9.]+px)/;\n var tok_keyword = /^(left|right|top|bottom|to|center)\\W/;\n var tok_angle = /^([-0-9.]+(deg|grad|rad|turn))/;\n var tok_whitespace = /^(\\s+)/;\n var tok_popen = /^(\\()/;\n var tok_pclose = /^(\\))/;\n var tok_comma = /^(,)/;\n var tok_url = /^(url)\\(/;\n var tok_content = /^(.*?)\\)/;\n var cache1 = {}, cache2 = {};\n function parse(input) {\n var orig = input;\n if (hasOwnProperty(cache1, orig)) {\n return cache1[orig];\n }\n function skip_ws() {\n var m = tok_whitespace.exec(input);\n if (m) {\n input = input.substr(m[1].length);\n }\n }\n function read(token) {\n skip_ws();\n var m = token.exec(input);\n if (m) {\n input = input.substr(m[1].length);\n return m[1];\n }\n }\n function read_stop() {\n var color = kendo.parseColor(input, true);\n var length, percent;\n if (color) {\n var match = /^#[0-9a-f]+/i.exec(input) || /^rgba?\\(.*?\\)/i.exec(input) || /^..*?\\b/.exec(input);\n input = input.substr(match[0].length);\n color = color.toRGB();\n if (!(length = read(tok_length))) {\n percent = read(tok_percent);\n }\n return {\n color: color,\n length: length,\n percent: percent\n };\n }\n }\n function read_linear_gradient(propName) {\n var angle;\n var to1, to2;\n var stops = [];\n var reverse = false;\n if (read(tok_popen)) {\n angle = read(tok_angle);\n if (angle) {\n angle = parseAngle(angle);\n read(tok_comma);\n } else {\n to1 = read(tok_keyword);\n if (to1 == 'to') {\n to1 = read(tok_keyword);\n } else if (to1 && /^-/.test(propName)) {\n reverse = true;\n }\n to2 = read(tok_keyword);\n read(tok_comma);\n }\n if (/-moz-/.test(propName) && angle == null && to1 == null) {\n var x = read(tok_percent), y = read(tok_percent);\n reverse = true;\n if (x == '0%') {\n to1 = 'left';\n } else if (x == '100%') {\n to1 = 'right';\n }\n if (y == '0%') {\n to2 = 'top';\n } else if (y == '100%') {\n to2 = 'bottom';\n }\n read(tok_comma);\n }\n while (input && !read(tok_pclose)) {\n var stop = read_stop();\n if (!stop) {\n break;\n }\n stops.push(stop);\n read(tok_comma);\n }\n return {\n type: 'linear',\n angle: angle,\n to: to1 && to2 ? to1 + ' ' + to2 : to1 ? to1 : to2 ? to2 : null,\n stops: stops,\n reverse: reverse\n };\n }\n }\n function read_url() {\n if (read(tok_popen)) {\n var url = read(tok_content);\n url = url.replace(/^['\"]+|[\"']+$/g, '');\n read(tok_pclose);\n return {\n type: 'url',\n url: url\n };\n }\n }\n var tok;\n if (tok = read(tok_linear_gradient)) {\n tok = read_linear_gradient(tok);\n } else if (tok = read(tok_url)) {\n tok = read_url();\n }\n return cache1[orig] = tok || { type: 'none' };\n }\n return function (input) {\n if (hasOwnProperty(cache2, input)) {\n return cache2[input];\n }\n return cache2[input] = splitProperty(input).map(parse);\n };\n }();\n var splitProperty = function () {\n var cache = {};\n return function (input, separator) {\n if (!separator) {\n separator = /^\\s*,\\s*/;\n }\n var cacheKey = input + separator;\n if (hasOwnProperty(cache, cacheKey)) {\n return cache[cacheKey];\n }\n var ret = [];\n var last$$1 = 0, pos = 0;\n var in_paren = 0;\n var in_string = false;\n var m;\n function looking_at(rx) {\n return m = rx.exec(input.substr(pos));\n }\n function trim(str) {\n return str.replace(/^\\s+|\\s+$/g, '');\n }\n while (pos < input.length) {\n if (!in_string && looking_at(/^[\\(\\[\\{]/)) {\n in_paren++;\n pos++;\n } else if (!in_string && looking_at(/^[\\)\\]\\}]/)) {\n in_paren--;\n pos++;\n } else if (!in_string && looking_at(/^[\\\"\\']/)) {\n in_string = m[0];\n pos++;\n } else if (in_string == '\\'' && looking_at(/^\\\\\\'/)) {\n pos += 2;\n } else if (in_string == '\"' && looking_at(/^\\\\\\\"/)) {\n pos += 2;\n } else if (in_string == '\\'' && looking_at(/^\\'/)) {\n in_string = false;\n pos++;\n } else if (in_string == '\"' && looking_at(/^\\\"/)) {\n in_string = false;\n pos++;\n } else if (looking_at(separator)) {\n if (!in_string && !in_paren && pos > last$$1) {\n ret.push(trim(input.substring(last$$1, pos)));\n last$$1 = pos + m[0].length;\n }\n pos += m[0].length;\n } else {\n pos++;\n }\n }\n if (last$$1 < pos) {\n ret.push(trim(input.substring(last$$1, pos)));\n }\n return cache[cacheKey] = ret;\n };\n }();\n var getFontURL = function (cache) {\n return function (el) {\n var url = cache[el];\n if (!url) {\n var m;\n if (m = /url\\((['\"]?)([^'\")]*?)\\1\\)\\s+format\\((['\"]?)truetype\\3\\)/.exec(el)) {\n url = cache[el] = m[2];\n } else if (m = /url\\((['\"]?)([^'\")]*?\\.ttf)\\1\\)/.exec(el)) {\n url = cache[el] = m[2];\n }\n }\n return url;\n };\n }(Object.create ? Object.create(null) : {});\n var getFontHeight = function (cache) {\n return function (font) {\n var height = cache[font];\n if (height == null) {\n height = cache[font] = kendoUtil.measureText('Mapq', { font: font }).height;\n }\n return height;\n };\n }(Object.create ? Object.create(null) : {});\n function getFontFaces(doc) {\n if (doc == null) {\n doc = document;\n }\n var result = {};\n for (var i = 0; i < doc.styleSheets.length; ++i) {\n doStylesheet(doc.styleSheets[i]);\n }\n return result;\n function doStylesheet(ss) {\n if (ss) {\n var rules = null;\n try {\n rules = ss.cssRules;\n } catch (ex) {\n }\n if (rules) {\n addRules(ss, rules);\n }\n }\n }\n function findFonts(rule) {\n var src = getPropertyValue(rule.style, 'src');\n if (src) {\n return splitProperty(src).reduce(function (a, el) {\n var font = getFontURL(el);\n if (font) {\n a.push(font);\n }\n return a;\n }, []);\n } else {\n var font = getFontURL(rule.cssText);\n return font ? [font] : [];\n }\n }\n function addRules(styleSheet, rules) {\n for (var i = 0; i < rules.length; ++i) {\n var r = rules[i];\n switch (r.type) {\n case 3:\n doStylesheet(r.styleSheet);\n break;\n case 5:\n var style = r.style;\n var family = splitProperty(getPropertyValue(style, 'font-family'));\n var bold = /^([56789]00|bold)$/i.test(getPropertyValue(style, 'font-weight'));\n var italic = 'italic' == getPropertyValue(style, 'font-style');\n var src = findFonts(r);\n if (src.length > 0) {\n addRule(styleSheet, family, bold, italic, src[0]);\n }\n }\n }\n }\n function addRule(styleSheet, names, bold, italic, url) {\n if (!/^data:/i.test(url)) {\n if (!(/^[^\\/:]+:\\/\\//.test(url) || /^\\//.test(url))) {\n url = String(styleSheet.href).replace(/[^\\/]*$/, '') + url;\n }\n }\n names.forEach(function (name) {\n name = name.replace(/^(['\"]?)(.*?)\\1$/, '$2');\n if (bold) {\n name += '|bold';\n }\n if (italic) {\n name += '|italic';\n }\n result[name] = url;\n });\n }\n }\n function hasOwnProperty(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n }\n function getCounter(name) {\n name = '_counter_' + name;\n return nodeInfo[name];\n }\n function getAllCounters(name) {\n var values = [], p = nodeInfo;\n name = '_counter_' + name;\n while (p) {\n if (hasOwnProperty(p, name)) {\n values.push(p[name]);\n }\n p = Object.getPrototypeOf(p);\n }\n return values.reverse();\n }\n function incCounter(name, inc) {\n var p = nodeInfo;\n name = '_counter_' + name;\n while (p && !hasOwnProperty(p, name)) {\n p = Object.getPrototypeOf(p);\n }\n if (!p) {\n p = nodeInfo._root;\n }\n p[name] = (p[name] || 0) + (inc == null ? 1 : inc);\n }\n function resetCounter(name, val) {\n name = '_counter_' + name;\n nodeInfo[name] = val == null ? 0 : val;\n }\n function doCounters(a, f, def) {\n for (var i = 0; i < a.length;) {\n var name = a[i++];\n var val = parseFloat(a[i]);\n if (isNaN(val)) {\n f(name, def);\n } else {\n f(name, val);\n ++i;\n }\n }\n }\n function parseColor$1(str, css) {\n var color = kendo.parseColor(str, true);\n if (color) {\n color = color.toRGB();\n if (css) {\n color = color.toCssRgba();\n } else if (color.a === 0) {\n color = null;\n }\n }\n return color;\n }\n function whenImagesAreActuallyLoaded(elements, callback) {\n var pending = 0;\n elements.forEach(function (el) {\n var images = el.querySelectorAll('img');\n for (var i = 0; i < images.length; ++i) {\n var img = images[i];\n if (!img.complete) {\n pending++;\n img.onload = img.onerror = next;\n }\n }\n });\n if (!pending) {\n next();\n }\n function next() {\n if (--pending <= 0) {\n callback();\n }\n }\n }\n function cacheImages(element, callback) {\n var urls = [];\n function add(url) {\n if (!IMAGE_CACHE[url]) {\n IMAGE_CACHE[url] = true;\n urls.push(url);\n }\n }\n (function dive(element) {\n if (/^img$/i.test(element.tagName)) {\n add(element.src);\n }\n parseBackgroundImage(getPropertyValue(getComputedStyle(element), 'background-image')).forEach(function (bg) {\n if (bg.type == 'url') {\n add(bg.url);\n }\n });\n if (element.children) {\n slice$1(element.children).forEach(dive);\n }\n }(element));\n var count = urls.length;\n function next() {\n if (--count <= 0) {\n callback();\n }\n }\n if (count === 0) {\n next();\n }\n urls.forEach(function (url) {\n var img = IMAGE_CACHE[url] = new window.Image();\n if (!/^data:/i.test(url)) {\n img.crossOrigin = 'Anonymous';\n }\n img.src = url;\n if (img.complete) {\n next();\n } else {\n img.onload = next;\n img.onerror = function () {\n IMAGE_CACHE[url] = null;\n next();\n };\n }\n });\n }\n function alphaNumeral(n) {\n var result = '';\n do {\n var r = n % 26;\n result = String.fromCharCode(97 + r) + result;\n n = Math.floor(n / 26);\n } while (n > 0);\n return result;\n }\n function pushNodeInfo(element, style, group) {\n nodeInfo = Object.create(nodeInfo);\n nodeInfo[element.tagName.toLowerCase()] = {\n element: element,\n style: style\n };\n var decoration = getPropertyValue(style, 'text-decoration');\n if (decoration && decoration != 'none') {\n var color = getPropertyValue(style, 'color');\n decoration.split(/\\s+/g).forEach(function (name) {\n if (!nodeInfo[name]) {\n nodeInfo[name] = color;\n }\n });\n }\n if (createsStackingContext(style)) {\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n }\n }\n function popNodeInfo() {\n nodeInfo = Object.getPrototypeOf(nodeInfo);\n }\n function updateClipbox(path) {\n if (nodeInfo._clipbox != null) {\n var box = path.bbox(nodeInfo._matrix);\n if (nodeInfo._clipbox) {\n nodeInfo._clipbox = Rect.intersect(nodeInfo._clipbox, box);\n } else {\n nodeInfo._clipbox = box;\n }\n }\n }\n function emptyClipbox() {\n var cb = nodeInfo._clipbox;\n if (cb == null) {\n return true;\n }\n if (cb) {\n return cb.width() === 0 || cb.height() === 0;\n }\n }\n function createsStackingContext(style) {\n function prop(name) {\n return getPropertyValue(style, name);\n }\n if (prop('transform') != 'none' || prop('position') != 'static' || prop('z-index') != 'auto' || prop('opacity') < 1) {\n return true;\n }\n }\n function getComputedStyle(element, pseudoElt) {\n return window.getComputedStyle(element, pseudoElt || null);\n }\n function getPropertyValue(style, prop) {\n var val = style.getPropertyValue(prop);\n if (val == null || val === '') {\n if (browser.webkit) {\n val = style.getPropertyValue('-webkit-' + prop);\n } else if (browser.mozilla) {\n val = style.getPropertyValue('-moz-' + prop);\n } else if (browser.opera) {\n val = style.getPropertyValue('-o-' + prop);\n } else if (browser.msie) {\n val = style.getPropertyValue('-ms-' + prop);\n }\n }\n return val;\n }\n function pleaseSetPropertyValue(style, prop, value, important) {\n style.setProperty(prop, value, important);\n if (browser.webkit) {\n style.setProperty('-webkit-' + prop, value, important);\n } else if (browser.mozilla) {\n style.setProperty('-moz-' + prop, value, important);\n } else if (browser.opera) {\n style.setProperty('-o-' + prop, value, important);\n } else if (browser.msie) {\n style.setProperty('-ms-' + prop, value, important);\n prop = 'ms' + prop.replace(/(^|-)([a-z])/g, function (s, p1, p2) {\n return p1 + p2.toUpperCase();\n });\n style[prop] = value;\n }\n }\n function getBorder(style, side) {\n side = 'border-' + side;\n return {\n width: parseFloat(getPropertyValue(style, side + '-width')),\n style: getPropertyValue(style, side + '-style'),\n color: parseColor$1(getPropertyValue(style, side + '-color'), true)\n };\n }\n function saveStyle(element, func) {\n var prev = element.style.cssText;\n var result = func();\n element.style.cssText = prev;\n return result;\n }\n function getBorderRadius(style, side) {\n var r = getPropertyValue(style, 'border-' + side + '-radius').split(/\\s+/g).map(parseFloat);\n if (r.length == 1) {\n r.push(r[0]);\n }\n return sanitizeRadius({\n x: r[0],\n y: r[1]\n });\n }\n function getContentBox(element) {\n var box = element.getBoundingClientRect();\n box = innerBox(box, 'border-*-width', element);\n box = innerBox(box, 'padding-*', element);\n return box;\n }\n function innerBox(box, prop, element) {\n var style, wt, wr, wb, wl;\n if (typeof prop == 'string') {\n style = getComputedStyle(element);\n wt = parseFloat(getPropertyValue(style, prop.replace('*', 'top')));\n wr = parseFloat(getPropertyValue(style, prop.replace('*', 'right')));\n wb = parseFloat(getPropertyValue(style, prop.replace('*', 'bottom')));\n wl = parseFloat(getPropertyValue(style, prop.replace('*', 'left')));\n } else if (typeof prop == 'number') {\n wt = wr = wb = wl = prop;\n }\n return {\n top: box.top + wt,\n right: box.right - wr,\n bottom: box.bottom - wb,\n left: box.left + wl,\n width: box.right - box.left - wr - wl,\n height: box.bottom - box.top - wb - wt\n };\n }\n function getTransform(style) {\n var transform$$1 = getPropertyValue(style, 'transform');\n if (transform$$1 == 'none') {\n return null;\n }\n var matrix = /^\\s*matrix\\(\\s*(.*?)\\s*\\)\\s*$/.exec(transform$$1);\n if (matrix) {\n var origin = getPropertyValue(style, 'transform-origin');\n matrix = matrix[1].split(/\\s*,\\s*/g).map(parseFloat);\n origin = origin.split(/\\s+/g).map(parseFloat);\n return {\n matrix: matrix,\n origin: origin\n };\n }\n }\n function radiansToDegrees(radians) {\n return 180 * radians / Math.PI % 360;\n }\n function parseAngle(angle) {\n var num = parseFloat(angle);\n if (/grad$/.test(angle)) {\n return Math.PI * num / 200;\n } else if (/rad$/.test(angle)) {\n return num;\n } else if (/turn$/.test(angle)) {\n return Math.PI * num * 2;\n } else if (/deg$/.test(angle)) {\n return Math.PI * num / 180;\n }\n }\n function setTransform(shape, m) {\n m = new Matrix(m[0], m[1], m[2], m[3], m[4], m[5]);\n shape.transform(m);\n return m;\n }\n function setClipping(shape, clipPath) {\n shape.clip(clipPath);\n }\n function addArcToPath(path, x, y, options) {\n var points = new Arc$2([\n x,\n y\n ], options).curvePoints(), i = 1;\n while (i < points.length) {\n path.curveTo(points[i++], points[i++], points[i++]);\n }\n }\n function sanitizeRadius(r) {\n if (r.x <= 0 || r.y <= 0) {\n r.x = r.y = 0;\n }\n return r;\n }\n function adjustBorderRadiusForBox(box, rTL, rTR, rBR, rBL) {\n var tl_x = Math.max(0, rTL.x), tl_y = Math.max(0, rTL.y);\n var tr_x = Math.max(0, rTR.x), tr_y = Math.max(0, rTR.y);\n var br_x = Math.max(0, rBR.x), br_y = Math.max(0, rBR.y);\n var bl_x = Math.max(0, rBL.x), bl_y = Math.max(0, rBL.y);\n var f = Math.min(box.width / (tl_x + tr_x), box.height / (tr_y + br_y), box.width / (br_x + bl_x), box.height / (bl_y + tl_y));\n if (f < 1) {\n tl_x *= f;\n tl_y *= f;\n tr_x *= f;\n tr_y *= f;\n br_x *= f;\n br_y *= f;\n bl_x *= f;\n bl_y *= f;\n }\n return {\n tl: {\n x: tl_x,\n y: tl_y\n },\n tr: {\n x: tr_x,\n y: tr_y\n },\n br: {\n x: br_x,\n y: br_y\n },\n bl: {\n x: bl_x,\n y: bl_y\n }\n };\n }\n function elementRoundBox(element, box, type) {\n var style = getComputedStyle(element);\n var rTL = getBorderRadius(style, 'top-left');\n var rTR = getBorderRadius(style, 'top-right');\n var rBL = getBorderRadius(style, 'bottom-left');\n var rBR = getBorderRadius(style, 'bottom-right');\n if (type == 'padding' || type == 'content') {\n var bt = getBorder(style, 'top');\n var br = getBorder(style, 'right');\n var bb = getBorder(style, 'bottom');\n var bl = getBorder(style, 'left');\n rTL.x -= bl.width;\n rTL.y -= bt.width;\n rTR.x -= br.width;\n rTR.y -= bt.width;\n rBR.x -= br.width;\n rBR.y -= bb.width;\n rBL.x -= bl.width;\n rBL.y -= bb.width;\n if (type == 'content') {\n var pt = parseFloat(getPropertyValue(style, 'padding-top'));\n var pr = parseFloat(getPropertyValue(style, 'padding-right'));\n var pb = parseFloat(getPropertyValue(style, 'padding-bottom'));\n var pl = parseFloat(getPropertyValue(style, 'padding-left'));\n rTL.x -= pl;\n rTL.y -= pt;\n rTR.x -= pr;\n rTR.y -= pt;\n rBR.x -= pr;\n rBR.y -= pb;\n rBL.x -= pl;\n rBL.y -= pb;\n }\n }\n if (typeof type == 'number') {\n rTL.x -= type;\n rTL.y -= type;\n rTR.x -= type;\n rTR.y -= type;\n rBR.x -= type;\n rBR.y -= type;\n rBL.x -= type;\n rBL.y -= type;\n }\n return roundBox(box, rTL, rTR, rBR, rBL);\n }\n function roundBox(box, rTL0, rTR0, rBR0, rBL0) {\n var tmp = adjustBorderRadiusForBox(box, rTL0, rTR0, rBR0, rBL0);\n var rTL = tmp.tl;\n var rTR = tmp.tr;\n var rBR = tmp.br;\n var rBL = tmp.bl;\n var path = new Path({\n fill: null,\n stroke: null\n });\n path.moveTo(box.left, box.top + rTL.y);\n if (rTL.x) {\n addArcToPath(path, box.left + rTL.x, box.top + rTL.y, {\n startAngle: -180,\n endAngle: -90,\n radiusX: rTL.x,\n radiusY: rTL.y\n });\n }\n path.lineTo(box.right - rTR.x, box.top);\n if (rTR.x) {\n addArcToPath(path, box.right - rTR.x, box.top + rTR.y, {\n startAngle: -90,\n endAngle: 0,\n radiusX: rTR.x,\n radiusY: rTR.y\n });\n }\n path.lineTo(box.right, box.bottom - rBR.y);\n if (rBR.x) {\n addArcToPath(path, box.right - rBR.x, box.bottom - rBR.y, {\n startAngle: 0,\n endAngle: 90,\n radiusX: rBR.x,\n radiusY: rBR.y\n });\n }\n path.lineTo(box.left + rBL.x, box.bottom);\n if (rBL.x) {\n addArcToPath(path, box.left + rBL.x, box.bottom - rBL.y, {\n startAngle: 90,\n endAngle: 180,\n radiusX: rBL.x,\n radiusY: rBL.y\n });\n }\n return path.close();\n }\n function formatCounter(val, style) {\n var str = String(parseFloat(val));\n switch (style) {\n case 'decimal-leading-zero':\n if (str.length < 2) {\n str = '0' + str;\n }\n return str;\n case 'lower-roman':\n return arabicToRoman(val).toLowerCase();\n case 'upper-roman':\n return arabicToRoman(val).toUpperCase();\n case 'lower-latin':\n case 'lower-alpha':\n return alphaNumeral(val - 1);\n case 'upper-latin':\n case 'upper-alpha':\n return alphaNumeral(val - 1).toUpperCase();\n default:\n return str;\n }\n }\n function evalPseudoElementContent(element, content) {\n function displayCounter(name, style, separator) {\n if (!separator) {\n return formatCounter(getCounter(name) || 0, style);\n }\n separator = separator.replace(/^\\s*([\"'])(.*)\\1\\s*$/, '$2');\n return getAllCounters(name).map(function (val) {\n return formatCounter(val, style);\n }).join(separator);\n }\n var a = splitProperty(content, /^\\s+/);\n var result = [], m;\n a.forEach(function (el) {\n var tmp;\n if (m = /^\\s*([\"'])(.*)\\1\\s*$/.exec(el)) {\n result.push(m[2].replace(/\\\\([0-9a-f]{4})/gi, function (s, p) {\n return String.fromCharCode(parseInt(p, 16));\n }));\n } else if (m = /^\\s*counter\\((.*?)\\)\\s*$/.exec(el)) {\n tmp = splitProperty(m[1]);\n result.push(displayCounter(tmp[0], tmp[1]));\n } else if (m = /^\\s*counters\\((.*?)\\)\\s*$/.exec(el)) {\n tmp = splitProperty(m[1]);\n result.push(displayCounter(tmp[0], tmp[2], tmp[1]));\n } else if (m = /^\\s*attr\\((.*?)\\)\\s*$/.exec(el)) {\n result.push(element.getAttribute(m[1]) || '');\n } else {\n result.push(el);\n }\n });\n return result.join('');\n }\n function getCssText(style) {\n if (style.cssText) {\n return style.cssText;\n }\n var result = [];\n for (var i = 0; i < style.length; ++i) {\n result.push(style[i] + ': ' + getPropertyValue(style, style[i]));\n }\n return result.join(';\\n');\n }\n function _renderWithPseudoElements(element, group) {\n if (element.tagName == KENDO_PSEUDO_ELEMENT) {\n _renderElement(element, group);\n return;\n }\n var fake = [];\n function pseudo(kind, place) {\n var style = getComputedStyle(element, kind);\n if (style.content && style.content != 'normal' && style.content != 'none' && style.width != '0px') {\n var psel = element.ownerDocument.createElement(KENDO_PSEUDO_ELEMENT);\n psel.style.cssText = getCssText(style);\n psel.textContent = evalPseudoElementContent(element, style.content);\n element.insertBefore(psel, place);\n fake.push(psel);\n }\n }\n pseudo(':before', element.firstChild);\n pseudo(':after', null);\n var saveClass = element.className;\n element.className += ' kendo-pdf-hide-pseudo-elements';\n _renderElement(element, group);\n element.className = saveClass;\n fake.forEach(function (el) {\n element.removeChild(el);\n });\n }\n function _renderElement(element, group) {\n var style = getComputedStyle(element);\n var top = getBorder(style, 'top');\n var right = getBorder(style, 'right');\n var bottom = getBorder(style, 'bottom');\n var left = getBorder(style, 'left');\n var rTL0 = getBorderRadius(style, 'top-left');\n var rTR0 = getBorderRadius(style, 'top-right');\n var rBL0 = getBorderRadius(style, 'bottom-left');\n var rBR0 = getBorderRadius(style, 'bottom-right');\n var dir = getPropertyValue(style, 'direction');\n var backgroundColor = getPropertyValue(style, 'background-color');\n backgroundColor = parseColor$1(backgroundColor);\n var backgroundImage = parseBackgroundImage(getPropertyValue(style, 'background-image'));\n var backgroundRepeat = splitProperty(getPropertyValue(style, 'background-repeat'));\n var backgroundPosition = splitProperty(getPropertyValue(style, 'background-position'));\n var backgroundOrigin = splitProperty(getPropertyValue(style, 'background-origin'));\n var backgroundSize = splitProperty(getPropertyValue(style, 'background-size'));\n if (browser.msie && browser.version < 10) {\n backgroundPosition = splitProperty(element.currentStyle.backgroundPosition);\n }\n var innerbox = innerBox(element.getBoundingClientRect(), 'border-*-width', element);\n (function () {\n var clip = getPropertyValue(style, 'clip');\n var m = /^\\s*rect\\((.*)\\)\\s*$/.exec(clip);\n if (m) {\n var a = m[1].split(/[ ,]+/g);\n var top = a[0] == 'auto' ? innerbox.top : parseFloat(a[0]) + innerbox.top;\n var right = a[1] == 'auto' ? innerbox.right : parseFloat(a[1]) + innerbox.left;\n var bottom = a[2] == 'auto' ? innerbox.bottom : parseFloat(a[2]) + innerbox.top;\n var left = a[3] == 'auto' ? innerbox.left : parseFloat(a[3]) + innerbox.left;\n var tmp = new Group();\n var clipPath = new Path().moveTo(left, top).lineTo(right, top).lineTo(right, bottom).lineTo(left, bottom).close();\n setClipping(tmp, clipPath);\n group.append(tmp);\n group = tmp;\n updateClipbox(clipPath);\n }\n }());\n var boxes, i, cells;\n var display = getPropertyValue(style, 'display');\n if (display == 'table-row') {\n boxes = [];\n for (i = 0, cells = element.children; i < cells.length; ++i) {\n boxes.push(cells[i].getBoundingClientRect());\n }\n } else {\n boxes = element.getClientRects();\n if (boxes.length == 1) {\n boxes = [element.getBoundingClientRect()];\n }\n }\n boxes = adjustBoxes(boxes);\n for (i = 0; i < boxes.length; ++i) {\n drawOneBox(boxes[i], i === 0, i == boxes.length - 1);\n }\n if (boxes.length > 0 && display == 'list-item' && !element.getAttribute('kendo-no-bullet')) {\n drawBullet(boxes[0]);\n }\n (function () {\n function clipit() {\n var clipPath = elementRoundBox(element, innerbox, 'padding');\n var tmp = new Group();\n setClipping(tmp, clipPath);\n group.append(tmp);\n group = tmp;\n updateClipbox(clipPath);\n }\n if (isFormField(element)) {\n clipit();\n } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, 'overflow'))) {\n clipit();\n } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, 'overflow-x'))) {\n clipit();\n } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, 'overflow-y'))) {\n clipit();\n }\n }());\n if (!maybeRenderWidget(element, group)) {\n renderContents(element, group);\n }\n return group;\n function adjustBoxes(boxes) {\n if (/^td$/i.test(element.tagName)) {\n var table = nodeInfo.table;\n if (table && getPropertyValue(table.style, 'border-collapse') == 'collapse') {\n var tableBorderLeft = getBorder(table.style, 'left').width;\n var tableBorderTop = getBorder(table.style, 'top').width;\n if (tableBorderLeft === 0 && tableBorderTop === 0) {\n return boxes;\n }\n var tableBox = table.element.getBoundingClientRect();\n var firstCell = table.element.rows[0].cells[0];\n var firstCellBox = firstCell.getBoundingClientRect();\n if (firstCellBox.top == tableBox.top || firstCellBox.left == tableBox.left) {\n return slice$1(boxes).map(function (box) {\n return {\n left: box.left + tableBorderLeft,\n top: box.top + tableBorderTop,\n right: box.right + tableBorderLeft,\n bottom: box.bottom + tableBorderTop,\n height: box.height,\n width: box.width\n };\n });\n }\n }\n }\n return boxes;\n }\n function drawEdge(color, len, Wtop, Wleft, Wright, rl, rr, transform$$1) {\n if (Wtop <= 0) {\n return;\n }\n var path, edge = new Group();\n setTransform(edge, transform$$1);\n group.append(edge);\n sanitizeRadius(rl);\n sanitizeRadius(rr);\n path = new Path({\n fill: { color: color },\n stroke: null\n });\n edge.append(path);\n path.moveTo(rl.x ? Math.max(rl.x, Wleft) : 0, 0).lineTo(len - (rr.x ? Math.max(rr.x, Wright) : 0), 0).lineTo(len - Math.max(rr.x, Wright), Wtop).lineTo(Math.max(rl.x, Wleft), Wtop).close();\n if (rl.x) {\n drawRoundCorner(Wleft, rl, [\n -1,\n 0,\n 0,\n 1,\n rl.x,\n 0\n ]);\n }\n if (rr.x) {\n drawRoundCorner(Wright, rr, [\n 1,\n 0,\n 0,\n 1,\n len - rr.x,\n 0\n ]);\n }\n function drawRoundCorner(Wright, r, transform$$1) {\n var angle = Math.PI / 2 * Wright / (Wright + Wtop);\n var ri = {\n x: r.x - Wright,\n y: r.y - Wtop\n };\n var path = new Path({\n fill: { color: color },\n stroke: null\n }).moveTo(0, 0);\n setTransform(path, transform$$1);\n addArcToPath(path, 0, r.y, {\n startAngle: -90,\n endAngle: -radiansToDegrees(angle),\n radiusX: r.x,\n radiusY: r.y\n });\n if (ri.x > 0 && ri.y > 0) {\n path.lineTo(ri.x * Math.cos(angle), r.y - ri.y * Math.sin(angle));\n addArcToPath(path, 0, r.y, {\n startAngle: -radiansToDegrees(angle),\n endAngle: -90,\n radiusX: ri.x,\n radiusY: ri.y,\n anticlockwise: true\n });\n } else if (ri.x > 0) {\n path.lineTo(ri.x, Wtop).lineTo(0, Wtop);\n } else {\n path.lineTo(ri.x, Wtop).lineTo(ri.x, 0);\n }\n edge.append(path.close());\n }\n }\n function drawBackground(box) {\n var background = new Group();\n setClipping(background, roundBox(box, rTL0, rTR0, rBR0, rBL0));\n group.append(background);\n if (element.tagName == 'A' && element.href && !/^#?$/.test(element.getAttribute('href'))) {\n if (!nodeInfo._avoidLinks || !matches(element, nodeInfo._avoidLinks)) {\n background._pdfLink = {\n url: element.href,\n top: box.top,\n right: box.right,\n bottom: box.bottom,\n left: box.left\n };\n }\n }\n if (backgroundColor) {\n var path = new Path({\n fill: { color: backgroundColor.toCssRgba() },\n stroke: null\n });\n path.moveTo(box.left, box.top).lineTo(box.right, box.top).lineTo(box.right, box.bottom).lineTo(box.left, box.bottom).close();\n background.append(path);\n }\n for (var i = backgroundImage.length; --i >= 0;) {\n drawOneBackground(background, box, backgroundImage[i], backgroundRepeat[i % backgroundRepeat.length], backgroundPosition[i % backgroundPosition.length], backgroundOrigin[i % backgroundOrigin.length], backgroundSize[i % backgroundSize.length]);\n }\n }\n function drawOneBackground(group, box, background, backgroundRepeat, backgroundPosition, backgroundOrigin, backgroundSize) {\n if (!background || background == 'none') {\n return;\n }\n if (background.type == 'url') {\n if (/^url\\(\\\"data:image\\/svg/i.test(background.url)) {\n return;\n }\n var img = IMAGE_CACHE[background.url];\n if (img && img.width > 0 && img.height > 0) {\n drawBackgroundImage(group, box, img.width, img.height, function (group, rect) {\n group.append(new Image$1(background.url, rect));\n });\n }\n } else if (background.type == 'linear') {\n drawBackgroundImage(group, box, box.width, box.height, gradientRenderer(background));\n } else {\n return;\n }\n function drawBackgroundImage(group, box, img_width, img_height, renderBG) {\n var aspect_ratio = img_width / img_height, f;\n var orgBox = box;\n if (backgroundOrigin == 'content-box') {\n orgBox = innerBox(orgBox, 'border-*-width', element);\n orgBox = innerBox(orgBox, 'padding-*', element);\n } else if (backgroundOrigin == 'padding-box') {\n orgBox = innerBox(orgBox, 'border-*-width', element);\n }\n if (!/^\\s*auto(\\s+auto)?\\s*$/.test(backgroundSize)) {\n if (backgroundSize == 'contain') {\n f = Math.min(orgBox.width / img_width, orgBox.height / img_height);\n img_width *= f;\n img_height *= f;\n } else if (backgroundSize == 'cover') {\n f = Math.max(orgBox.width / img_width, orgBox.height / img_height);\n img_width *= f;\n img_height *= f;\n } else {\n var size = backgroundSize.split(/\\s+/g);\n if (/%$/.test(size[0])) {\n img_width = orgBox.width * parseFloat(size[0]) / 100;\n } else {\n img_width = parseFloat(size[0]);\n }\n if (size.length == 1 || size[1] == 'auto') {\n img_height = img_width / aspect_ratio;\n } else if (/%$/.test(size[1])) {\n img_height = orgBox.height * parseFloat(size[1]) / 100;\n } else {\n img_height = parseFloat(size[1]);\n }\n }\n }\n var pos = String(backgroundPosition);\n switch (pos) {\n case 'bottom':\n pos = '50% 100%';\n break;\n case 'top':\n pos = '50% 0';\n break;\n case 'left':\n pos = '0 50%';\n break;\n case 'right':\n pos = '100% 50%';\n break;\n case 'center':\n pos = '50% 50%';\n break;\n }\n pos = pos.split(/\\s+/);\n if (pos.length == 1) {\n pos[1] = '50%';\n }\n if (/%$/.test(pos[0])) {\n pos[0] = parseFloat(pos[0]) / 100 * (orgBox.width - img_width);\n } else {\n pos[0] = parseFloat(pos[0]);\n }\n if (/%$/.test(pos[1])) {\n pos[1] = parseFloat(pos[1]) / 100 * (orgBox.height - img_height);\n } else {\n pos[1] = parseFloat(pos[1]);\n }\n var rect = new Rect([\n orgBox.left + pos[0],\n orgBox.top + pos[1]\n ], [\n img_width,\n img_height\n ]);\n function rewX() {\n while (rect.origin.x > box.left) {\n rect.origin.x -= img_width;\n }\n }\n function rewY() {\n while (rect.origin.y > box.top) {\n rect.origin.y -= img_height;\n }\n }\n function repeatX() {\n while (rect.origin.x < box.right) {\n renderBG(group, rect.clone());\n rect.origin.x += img_width;\n }\n }\n if (backgroundRepeat == 'no-repeat') {\n renderBG(group, rect);\n } else if (backgroundRepeat == 'repeat-x') {\n rewX();\n repeatX();\n } else if (backgroundRepeat == 'repeat-y') {\n rewY();\n while (rect.origin.y < box.bottom) {\n renderBG(group, rect.clone());\n rect.origin.y += img_height;\n }\n } else if (backgroundRepeat == 'repeat') {\n rewX();\n rewY();\n var origin = rect.origin.clone();\n while (rect.origin.y < box.bottom) {\n rect.origin.x = origin.x;\n repeatX();\n rect.origin.y += img_height;\n }\n }\n }\n }\n function drawBullet() {\n var listStyleType = getPropertyValue(style, 'list-style-type');\n if (listStyleType == 'none') {\n return;\n }\n var listStylePosition = getPropertyValue(style, 'list-style-position');\n function _drawBullet(f) {\n saveStyle(element, function () {\n element.style.position = 'relative';\n var bullet = element.ownerDocument.createElement(KENDO_PSEUDO_ELEMENT);\n bullet.style.position = 'absolute';\n bullet.style.boxSizing = 'border-box';\n if (listStylePosition == 'outside') {\n bullet.style.width = '6em';\n bullet.style.left = '-6.8em';\n bullet.style.textAlign = 'right';\n } else {\n bullet.style.left = '0px';\n }\n f(bullet);\n element.insertBefore(bullet, element.firstChild);\n renderElement(bullet, group);\n element.removeChild(bullet);\n });\n }\n function elementIndex(f) {\n var a = element.parentNode.children;\n var k = element.getAttribute('kendo-split-index');\n if (k != null) {\n return f(k | 0, a.length);\n }\n for (var i = 0; i < a.length; ++i) {\n if (a[i] === element) {\n return f(i, a.length);\n }\n }\n }\n switch (listStyleType) {\n case 'circle':\n case 'disc':\n case 'square':\n _drawBullet(function (bullet) {\n bullet.style.fontSize = '60%';\n bullet.style.lineHeight = '200%';\n bullet.style.paddingRight = '0.5em';\n bullet.style.fontFamily = 'DejaVu Serif';\n bullet.innerHTML = {\n 'disc': '\\u25CF',\n 'circle': '\\u25EF',\n 'square': '\\u25A0'\n }[listStyleType];\n });\n break;\n case 'decimal':\n case 'decimal-leading-zero':\n _drawBullet(function (bullet) {\n elementIndex(function (idx) {\n ++idx;\n if (listStyleType == 'decimal-leading-zero' && idx < 10) {\n idx = '0' + idx;\n }\n bullet.innerHTML = idx + '.';\n });\n });\n break;\n case 'lower-roman':\n case 'upper-roman':\n _drawBullet(function (bullet) {\n elementIndex(function (idx) {\n idx = arabicToRoman(idx + 1);\n if (listStyleType == 'upper-roman') {\n idx = idx.toUpperCase();\n }\n bullet.innerHTML = idx + '.';\n });\n });\n break;\n case 'lower-latin':\n case 'lower-alpha':\n case 'upper-latin':\n case 'upper-alpha':\n _drawBullet(function (bullet) {\n elementIndex(function (idx) {\n idx = alphaNumeral(idx);\n if (/^upper/i.test(listStyleType)) {\n idx = idx.toUpperCase();\n }\n bullet.innerHTML = idx + '.';\n });\n });\n break;\n }\n }\n function drawOneBox(box, isFirst, isLast) {\n if (box.width === 0 || box.height === 0) {\n return;\n }\n drawBackground(box);\n var shouldDrawLeft = left.width > 0 && (isFirst && dir == 'ltr' || isLast && dir == 'rtl');\n var shouldDrawRight = right.width > 0 && (isLast && dir == 'ltr' || isFirst && dir == 'rtl');\n if (top.width === 0 && left.width === 0 && right.width === 0 && bottom.width === 0) {\n return;\n }\n {\n if (top.color == right.color && top.color == bottom.color && top.color == left.color) {\n if (top.width == right.width && top.width == bottom.width && top.width == left.width) {\n if (shouldDrawLeft && shouldDrawRight) {\n box = innerBox(box, top.width / 2);\n var path = elementRoundBox(element, box, top.width / 2);\n path.options.stroke = {\n color: top.color,\n width: top.width\n };\n group.append(path);\n return;\n }\n }\n }\n if (rTL0.x === 0 && rTR0.x === 0 && rBR0.x === 0 && rBL0.x === 0) {\n if (top.width < 2 && left.width < 2 && right.width < 2 && bottom.width < 2) {\n if (top.width > 0) {\n group.append(new Path({\n stroke: {\n width: top.width,\n color: top.color\n }\n }).moveTo(box.left, box.top + top.width / 2).lineTo(box.right, box.top + top.width / 2));\n }\n if (bottom.width > 0) {\n group.append(new Path({\n stroke: {\n width: bottom.width,\n color: bottom.color\n }\n }).moveTo(box.left, box.bottom - bottom.width / 2).lineTo(box.right, box.bottom - bottom.width / 2));\n }\n if (shouldDrawLeft) {\n group.append(new Path({\n stroke: {\n width: left.width,\n color: left.color\n }\n }).moveTo(box.left + left.width / 2, box.top).lineTo(box.left + left.width / 2, box.bottom));\n }\n if (shouldDrawRight) {\n group.append(new Path({\n stroke: {\n width: right.width,\n color: right.color\n }\n }).moveTo(box.right - right.width / 2, box.top).lineTo(box.right - right.width / 2, box.bottom));\n }\n return;\n }\n }\n }\n var tmp = adjustBorderRadiusForBox(box, rTL0, rTR0, rBR0, rBL0);\n var rTL = tmp.tl;\n var rTR = tmp.tr;\n var rBR = tmp.br;\n var rBL = tmp.bl;\n drawEdge(top.color, box.width, top.width, left.width, right.width, rTL, rTR, [\n 1,\n 0,\n 0,\n 1,\n box.left,\n box.top\n ]);\n drawEdge(bottom.color, box.width, bottom.width, right.width, left.width, rBR, rBL, [\n -1,\n 0,\n 0,\n -1,\n box.right,\n box.bottom\n ]);\n function inv(p) {\n return {\n x: p.y,\n y: p.x\n };\n }\n drawEdge(left.color, box.height, left.width, bottom.width, top.width, inv(rBL), inv(rTL), [\n 0,\n -1,\n 1,\n 0,\n box.left,\n box.bottom\n ]);\n drawEdge(right.color, box.height, right.width, top.width, bottom.width, inv(rTR), inv(rBR), [\n 0,\n 1,\n -1,\n 0,\n box.right,\n box.top\n ]);\n }\n }\n function gradientRenderer(gradient) {\n return function (group, rect) {\n var width = rect.width(), height = rect.height();\n switch (gradient.type) {\n case 'linear':\n var angle = gradient.angle != null ? gradient.angle : Math.PI;\n switch (gradient.to) {\n case 'top':\n angle = 0;\n break;\n case 'left':\n angle = -Math.PI / 2;\n break;\n case 'bottom':\n angle = Math.PI;\n break;\n case 'right':\n angle = Math.PI / 2;\n break;\n case 'top left':\n case 'left top':\n angle = -Math.atan2(height, width);\n break;\n case 'top right':\n case 'right top':\n angle = Math.atan2(height, width);\n break;\n case 'bottom left':\n case 'left bottom':\n angle = Math.PI + Math.atan2(height, width);\n break;\n case 'bottom right':\n case 'right bottom':\n angle = Math.PI - Math.atan2(height, width);\n break;\n }\n if (gradient.reverse) {\n angle -= Math.PI;\n }\n angle %= 2 * Math.PI;\n if (angle < 0) {\n angle += 2 * Math.PI;\n }\n var pxlen = Math.abs(width * Math.sin(angle)) + Math.abs(height * Math.cos(angle));\n var scaledAngle = Math.atan(width * Math.tan(angle) / height);\n var sin = Math.sin(scaledAngle), cos = Math.cos(scaledAngle);\n var len = Math.abs(sin) + Math.abs(cos);\n var x = len / 2 * sin;\n var y = len / 2 * cos;\n if (angle > Math.PI / 2 && angle <= 3 * Math.PI / 2) {\n x = -x;\n y = -y;\n }\n var implicit = [], right = 0;\n var stops = gradient.stops.map(function (s, i) {\n var offset = s.percent;\n if (offset) {\n offset = parseFloat(offset) / 100;\n } else if (s.length) {\n offset = parseFloat(s.length) / pxlen;\n } else if (i === 0) {\n offset = 0;\n } else if (i == gradient.stops.length - 1) {\n offset = 1;\n }\n var stop = {\n color: s.color.toCssRgba(),\n offset: offset\n };\n if (offset != null) {\n right = offset;\n implicit.forEach(function (s, i) {\n var stop = s.stop;\n stop.offset = s.left + (right - s.left) * (i + 1) / (implicit.length + 1);\n });\n implicit = [];\n } else {\n implicit.push({\n left: right,\n stop: stop\n });\n }\n return stop;\n });\n var start = [\n 0.5 - x,\n 0.5 + y\n ];\n var end = [\n 0.5 + x,\n 0.5 - y\n ];\n group.append(Path.fromRect(rect).stroke(null).fill(new LinearGradient({\n start: start,\n end: end,\n stops: stops,\n userSpace: false\n })));\n break;\n case 'radial':\n if (window.console && window.console.log) {\n window.console.log('Radial gradients are not yet supported in HTML renderer');\n }\n break;\n }\n };\n }\n function maybeRenderWidget(element, group) {\n if (window.kendo && window.kendo.jQuery && element.getAttribute(window.kendo.attr('role'))) {\n var widget = window.kendo.widgetInstance(window.kendo.jQuery(element));\n if (widget && (widget.exportDOMVisual || widget.exportVisual)) {\n var visual;\n if (widget.exportDOMVisual) {\n visual = widget.exportDOMVisual();\n } else {\n visual = widget.exportVisual();\n }\n if (!visual) {\n return false;\n }\n var wrap$$1 = new Group();\n wrap$$1.children.push(visual);\n var bbox = element.getBoundingClientRect();\n wrap$$1.transform(transform().translate(bbox.left, bbox.top));\n group.append(wrap$$1);\n return true;\n }\n }\n }\n function renderImage(element, url, group) {\n var box = getContentBox(element);\n var rect = new Rect([\n box.left,\n box.top\n ], [\n box.width,\n box.height\n ]);\n var image = new Image$1(url, rect);\n setClipping(image, elementRoundBox(element, box, 'content'));\n group.append(image);\n }\n function zIndexSort(a, b) {\n var sa = getComputedStyle(a);\n var sb = getComputedStyle(b);\n var za = parseFloat(getPropertyValue(sa, 'z-index'));\n var zb = parseFloat(getPropertyValue(sb, 'z-index'));\n var pa = getPropertyValue(sa, 'position');\n var pb = getPropertyValue(sb, 'position');\n if (isNaN(za) && isNaN(zb)) {\n if (/static|absolute/.test(pa) && /static|absolute/.test(pb)) {\n return 0;\n }\n if (pa == 'static') {\n return -1;\n }\n if (pb == 'static') {\n return 1;\n }\n return 0;\n }\n if (isNaN(za)) {\n return zb === 0 ? 0 : zb > 0 ? -1 : 1;\n }\n if (isNaN(zb)) {\n return za === 0 ? 0 : za > 0 ? 1 : -1;\n }\n return parseFloat(za) - parseFloat(zb);\n }\n function isFormField(element) {\n return /^(?:textarea|select|input)$/i.test(element.tagName);\n }\n function getSelectedOption(element) {\n if (element.selectedOptions && element.selectedOptions.length > 0) {\n return element.selectedOptions[0];\n }\n return element.options[element.selectedIndex];\n }\n function renderCheckbox(element, group) {\n var style = getComputedStyle(element);\n var color = getPropertyValue(style, 'color');\n var box = element.getBoundingClientRect();\n if (element.type == 'checkbox') {\n group.append(Path.fromRect(new Rect([\n box.left + 1,\n box.top + 1\n ], [\n box.width - 2,\n box.height - 2\n ])).stroke(color, 1));\n if (element.checked) {\n group.append(new Path().stroke(color, 1.2).moveTo(box.left + 0.22 * box.width, box.top + 0.55 * box.height).lineTo(box.left + 0.45 * box.width, box.top + 0.75 * box.height).lineTo(box.left + 0.78 * box.width, box.top + 0.22 * box.width));\n }\n } else {\n group.append(new Circle(new Circle$2([\n (box.left + box.right) / 2,\n (box.top + box.bottom) / 2\n ], Math.min(box.width - 2, box.height - 2) / 2)).stroke(color, 1));\n if (element.checked) {\n group.append(new Circle(new Circle$2([\n (box.left + box.right) / 2,\n (box.top + box.bottom) / 2\n ], Math.min(box.width - 8, box.height - 8) / 2)).fill(color).stroke(null));\n }\n }\n }\n function renderFormField(element, group) {\n var tag = element.tagName.toLowerCase();\n if (tag == 'input' && (element.type == 'checkbox' || element.type == 'radio')) {\n return renderCheckbox(element, group);\n }\n var p = element.parentNode;\n var doc = element.ownerDocument;\n var el = doc.createElement(KENDO_PSEUDO_ELEMENT);\n var option;\n el.style.cssText = getCssText(getComputedStyle(element));\n if (tag == 'input') {\n el.style.whiteSpace = 'pre';\n }\n if (tag == 'select' || tag == 'textarea') {\n el.style.overflow = 'auto';\n }\n if (tag == 'select') {\n if (element.multiple) {\n for (var i = 0; i < element.options.length; ++i) {\n option = doc.createElement(KENDO_PSEUDO_ELEMENT);\n option.style.cssText = getCssText(getComputedStyle(element.options[i]));\n option.style.display = 'block';\n option.textContent = element.options[i].textContent;\n el.appendChild(option);\n }\n } else {\n option = getSelectedOption(element);\n if (option) {\n el.textContent = option.textContent;\n }\n }\n } else {\n el.textContent = element.value;\n }\n p.insertBefore(el, element);\n el.scrollLeft = element.scrollLeft;\n el.scrollTop = element.scrollTop;\n element.style.display = 'none';\n renderContents(el, group);\n element.style.display = '';\n p.removeChild(el);\n }\n function renderContents(element, group) {\n if (nodeInfo._stackingContext.element === element) {\n nodeInfo._stackingContext.group = group;\n }\n switch (element.tagName.toLowerCase()) {\n case 'img':\n renderImage(element, element.src, group);\n break;\n case 'canvas':\n try {\n renderImage(element, element.toDataURL('image/png'), group);\n } catch (ex) {\n }\n break;\n case 'textarea':\n case 'input':\n case 'select':\n renderFormField(element, group);\n break;\n default:\n var blocks = [], floats = [], inline = [], positioned = [];\n for (var i = element.firstChild; i; i = i.nextSibling) {\n switch (i.nodeType) {\n case 3:\n if (/\\S/.test(i.data)) {\n renderText(element, i, group);\n }\n break;\n case 1:\n var style = getComputedStyle(i);\n var display = getPropertyValue(style, 'display');\n var floating = getPropertyValue(style, 'float');\n var position = getPropertyValue(style, 'position');\n if (position != 'static') {\n positioned.push(i);\n } else if (display != 'inline') {\n if (floating != 'none') {\n floats.push(i);\n } else {\n blocks.push(i);\n }\n } else {\n inline.push(i);\n }\n break;\n }\n }\n mergeSort(blocks, zIndexSort).forEach(function (el) {\n renderElement(el, group);\n });\n mergeSort(floats, zIndexSort).forEach(function (el) {\n renderElement(el, group);\n });\n mergeSort(inline, zIndexSort).forEach(function (el) {\n renderElement(el, group);\n });\n mergeSort(positioned, zIndexSort).forEach(function (el) {\n renderElement(el, group);\n });\n }\n }\n function renderText(element, node, group) {\n if (emptyClipbox()) {\n return;\n }\n var style = getComputedStyle(element);\n if (parseFloat(getPropertyValue(style, 'text-indent')) < -500) {\n return;\n }\n var text = node.data;\n var start = 0;\n var end = text.search(/\\S\\s*$/) + 1;\n if (!end) {\n return;\n }\n var fontSize = getPropertyValue(style, 'font-size');\n var lineHeight = getPropertyValue(style, 'line-height');\n var font = [\n getPropertyValue(style, 'font-style'),\n getPropertyValue(style, 'font-variant'),\n getPropertyValue(style, 'font-weight'),\n fontSize,\n getPropertyValue(style, 'font-family')\n ].join(' ');\n fontSize = parseFloat(fontSize);\n lineHeight = parseFloat(lineHeight);\n if (fontSize === 0) {\n return;\n }\n var color = getPropertyValue(style, 'color');\n var range = element.ownerDocument.createRange();\n var align$$1 = getPropertyValue(style, 'text-align');\n var isJustified = align$$1 == 'justify';\n var whiteSpace = getPropertyValue(style, 'white-space');\n var textOverflow, saveTextOverflow;\n if (browser.msie) {\n textOverflow = style.textOverflow;\n if (textOverflow == 'ellipsis') {\n saveTextOverflow = element.style.textOverflow;\n element.style.textOverflow = 'clip';\n }\n }\n var estimateLineLength = element.getBoundingClientRect().width / fontSize * 5;\n if (estimateLineLength === 0) {\n estimateLineLength = 500;\n }\n var prevLineBottom = null;\n var underline = nodeInfo['underline'];\n var lineThrough = nodeInfo['line-through'];\n var overline = nodeInfo['overline'];\n var hasDecoration = underline || lineThrough || overline;\n while (!doChunk()) {\n }\n if (browser.msie && textOverflow == 'ellipsis') {\n element.style.textOverflow = saveTextOverflow;\n }\n if (hasDecoration) {\n range.selectNode(node);\n slice$1(range.getClientRects()).forEach(decorate);\n }\n return;\n function actuallyGetRangeBoundingRect(range) {\n if (browser.msie || browser.chrome) {\n var rectangles = range.getClientRects(), box = {\n top: Infinity,\n right: -Infinity,\n bottom: -Infinity,\n left: Infinity\n };\n for (var i = 0; i < rectangles.length; ++i) {\n var b = rectangles[i];\n if (b.width <= 1 || b.bottom === prevLineBottom) {\n continue;\n }\n box.left = Math.min(b.left, box.left);\n box.top = Math.min(b.top, box.top);\n box.right = Math.max(b.right, box.right);\n box.bottom = Math.max(b.bottom, box.bottom);\n }\n box.width = box.right - box.left;\n box.height = box.bottom - box.top;\n return box;\n }\n return range.getBoundingClientRect();\n }\n function doChunk() {\n var origStart = start;\n var box, pos = text.substr(start).search(/\\S/);\n start += pos;\n if (pos < 0 || start >= end) {\n return true;\n }\n range.setStart(node, start);\n range.setEnd(node, start + 1);\n box = actuallyGetRangeBoundingRect(range);\n var found = false;\n if (isJustified) {\n pos = text.substr(start).search(/\\s/);\n if (pos >= 0) {\n range.setEnd(node, start + pos);\n var r = actuallyGetRangeBoundingRect(range);\n if (r.bottom == box.bottom) {\n box = r;\n found = true;\n start += pos;\n }\n }\n }\n if (!found) {\n pos = function findEOL(min, eol, max) {\n range.setEnd(node, eol);\n var r = actuallyGetRangeBoundingRect(range);\n if (r.bottom != box.bottom && min < eol) {\n return findEOL(min, min + eol >> 1, eol);\n } else if (r.right != box.right) {\n box = r;\n if (eol < max) {\n return findEOL(eol, eol + max >> 1, max);\n } else {\n return eol;\n }\n } else {\n return eol;\n }\n }(start, Math.min(end, start + estimateLineLength), end);\n if (pos == start) {\n return true;\n }\n start = pos;\n pos = range.toString().search(/\\s+$/);\n if (pos === 0) {\n return false;\n }\n if (pos > 0) {\n range.setEnd(node, range.startOffset + pos);\n box = actuallyGetRangeBoundingRect(range);\n }\n }\n if (browser.msie) {\n box = range.getClientRects()[0];\n }\n var str = range.toString();\n if (!/^(?:pre|pre-wrap)$/i.test(whiteSpace)) {\n str = str.replace(/\\s+/g, ' ');\n } else if (/\\t/.test(str)) {\n var cc = 0;\n for (pos = origStart; pos < range.startOffset; ++pos) {\n var code = text.charCodeAt(pos);\n if (code == 9) {\n cc += 8 - cc % 8;\n } else if (code == 10 || code == 13) {\n cc = 0;\n } else {\n cc++;\n }\n }\n while ((pos = str.search('\\t')) >= 0) {\n var indent = ' '.substr(0, 8 - (cc + pos) % 8);\n str = str.substr(0, pos) + indent + str.substr(pos + 1);\n }\n }\n if (!found) {\n prevLineBottom = box.bottom;\n }\n drawText(str, box);\n }\n function drawText(str, box) {\n if (browser.msie && !isNaN(lineHeight)) {\n var height = getFontHeight(font);\n var top = (box.top + box.bottom - height) / 2;\n box = {\n top: top,\n right: box.right,\n bottom: top + height,\n left: box.left,\n height: height,\n width: box.right - box.left\n };\n }\n var text = new TextRect(str, new Rect([\n box.left,\n box.top\n ], [\n box.width,\n box.height\n ]), {\n font: font,\n fill: { color: color }\n });\n group.append(text);\n }\n function decorate(box) {\n line(underline, box.bottom);\n line(lineThrough, box.bottom - box.height / 2.7);\n line(overline, box.top);\n function line(color, ypos) {\n if (color) {\n var width = fontSize / 12;\n var path = new Path({\n stroke: {\n width: width,\n color: color\n }\n });\n ypos -= width;\n path.moveTo(box.left, ypos).lineTo(box.right, ypos);\n group.append(path);\n }\n }\n }\n }\n function groupInStackingContext(element, group, zIndex) {\n var main;\n if (zIndex != 'auto') {\n main = nodeInfo._stackingContext.group;\n zIndex = parseFloat(zIndex);\n } else {\n main = group;\n zIndex = 0;\n }\n var a = main.children;\n for (var i = 0; i < a.length; ++i) {\n if (a[i]._dom_zIndex != null && a[i]._dom_zIndex > zIndex) {\n break;\n }\n }\n var tmp = new Group();\n main.insert(i, tmp);\n tmp._dom_zIndex = zIndex;\n if (main !== group) {\n if (nodeInfo._clipbox) {\n var m = nodeInfo._matrix.invert();\n var r = nodeInfo._clipbox.transformCopy(m);\n setClipping(tmp, Path.fromRect(r));\n }\n }\n return tmp;\n }\n function renderElement(element, container) {\n var style = getComputedStyle(element);\n var counterReset = getPropertyValue(style, 'counter-reset');\n if (counterReset) {\n doCounters(splitProperty(counterReset, /^\\s+/), resetCounter, 0);\n }\n var counterIncrement = getPropertyValue(style, 'counter-increment');\n if (counterIncrement) {\n doCounters(splitProperty(counterIncrement, /^\\s+/), incCounter, 1);\n }\n if (/^(style|script|link|meta|iframe|svg|col|colgroup)$/i.test(element.tagName)) {\n return;\n }\n if (nodeInfo._clipbox == null) {\n return;\n }\n var opacity = parseFloat(getPropertyValue(style, 'opacity'));\n var visibility = getPropertyValue(style, 'visibility');\n var display = getPropertyValue(style, 'display');\n if (opacity === 0 || visibility == 'hidden' || display == 'none') {\n return;\n }\n var tr = getTransform(style);\n var group;\n var zIndex = getPropertyValue(style, 'z-index');\n if ((tr || opacity < 1) && zIndex == 'auto') {\n zIndex = 0;\n }\n group = groupInStackingContext(element, container, zIndex);\n if (opacity < 1) {\n group.opacity(opacity * group.opacity());\n }\n pushNodeInfo(element, style, group);\n if (!tr) {\n _renderWithPseudoElements(element, group);\n } else {\n saveStyle(element, function () {\n pleaseSetPropertyValue(element.style, 'transform', 'none', 'important');\n pleaseSetPropertyValue(element.style, 'transition', 'none', 'important');\n if (getPropertyValue(style, 'position') == 'static') {\n pleaseSetPropertyValue(element.style, 'position', 'relative', 'important');\n }\n var bbox = element.getBoundingClientRect();\n var x = bbox.left + tr.origin[0];\n var y = bbox.top + tr.origin[1];\n var m = [\n 1,\n 0,\n 0,\n 1,\n -x,\n -y\n ];\n m = mmul(m, tr.matrix);\n m = mmul(m, [\n 1,\n 0,\n 0,\n 1,\n x,\n y\n ]);\n m = setTransform(group, m);\n nodeInfo._matrix = nodeInfo._matrix.multiplyCopy(m);\n _renderWithPseudoElements(element, group);\n });\n }\n popNodeInfo();\n }\n function mmul(a, b) {\n var a1 = a[0], b1 = a[1], c1 = a[2], d1 = a[3], e1 = a[4], f1 = a[5];\n var a2 = b[0], b2 = b[1], c2 = b[2], d2 = b[3], e2 = b[4], f2 = b[5];\n return [\n a1 * a2 + b1 * c2,\n a1 * b2 + b1 * d2,\n c1 * a2 + d1 * c2,\n c1 * b2 + d1 * d2,\n e1 * a2 + f1 * c2 + e2,\n e1 * b2 + f1 * d2 + f2\n ];\n }\n var drawing = {\n svg: svg,\n canvas: canvas,\n util: util,\n PathParser: PathParser,\n Surface: Surface,\n BaseNode: BaseNode,\n SurfaceFactory: SurfaceFactory,\n OptionsStore: OptionsStore,\n exportImage: exportImage,\n exportSVG: exportSVG,\n QuadNode: QuadNode,\n ShapesQuadTree: ShapesQuadTree,\n ObserversMixin: ObserversMixin,\n Element: Element$1,\n Circle: Circle,\n Arc: Arc,\n Path: Path,\n MultiPath: MultiPath,\n Text: Text,\n Image: Image$1,\n Group: Group,\n Layout: Layout,\n Rect: Rect$2,\n align: align,\n vAlign: vAlign,\n stack: stack,\n vStack: vStack,\n wrap: wrap,\n vWrap: vWrap,\n fit: fit,\n LinearGradient: LinearGradient,\n RadialGradient: RadialGradient,\n GradientStop: GradientStop,\n Gradient: Gradient,\n Animation: Animation,\n AnimationFactory: AnimationFactory,\n drawDOM: drawDOM\n };\n kendo.deepExtend(kendo, {\n drawing: drawing,\n geometry: geometry\n });\n kendo.drawing.Segment = kendo.geometry.Segment;\n kendo.dataviz.drawing = kendo.drawing;\n kendo.dataviz.geometry = kendo.geometry;\n kendo.drawing.util.measureText = kendo.util.measureText;\n kendo.drawing.util.objectKey = kendo.util.objectKey;\n kendo.drawing.Color = kendo.Color;\n kendo.util.encodeBase64 = kendo.drawing.util.encodeBase64;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.popup', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'popup',\n name: 'Pop-up',\n category: 'framework',\n depends: ['core'],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, support = kendo.support, getOffset = kendo.getOffset, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, OPEN = 'open', CLOSE = 'close', DEACTIVATE = 'deactivate', ACTIVATE = 'activate', CENTER = 'center', LEFT = 'left', RIGHT = 'right', TOP = 'top', BOTTOM = 'bottom', ABSOLUTE = 'absolute', HIDDEN = 'hidden', BODY = 'body', LOCATION = 'location', POSITION = 'position', VISIBLE = 'visible', EFFECTS = 'effects', ACTIVE = 'k-state-active', ACTIVEBORDER = 'k-state-border', ACTIVEBORDERREGEXP = /k-state-border-(\\w+)/, ACTIVECHILDREN = '.k-picker-wrap, .k-dropdown-wrap, .k-link', MOUSEDOWN = 'down', DOCUMENT_ELEMENT = $(document.documentElement), WINDOW = $(window), SCROLL = 'scroll', cssPrefix = support.transitions.css, TRANSFORM = cssPrefix + 'transform', extend = $.extend, NS = '.kendoPopup', styles = [\n '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 var Popup = Widget.extend({\n init: function (element, options) {\n var that = this, parentPopup;\n options = options || {};\n if (options.isRtl) {\n options.origin = options.origin || BOTTOM + ' ' + RIGHT;\n options.position = options.position || TOP + ' ' + RIGHT;\n }\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n that.collisions = options.collision ? options.collision.split(' ') : [];\n that.downEvent = kendo.applyEventMap(MOUSEDOWN, kendo.guid());\n if (that.collisions.length === 1) {\n that.collisions.push(that.collisions[0]);\n }\n parentPopup = $(that.options.anchor).closest('.k-popup,.k-group').filter(':not([class^=km-])');\n options.appendTo = $($(options.appendTo)[0] || parentPopup[0] || document.body);\n that.element.hide().addClass('k-popup k-group k-reset').toggleClass('k-rtl', !!options.isRtl).css({ position: ABSOLUTE }).appendTo(options.appendTo).on('mouseenter' + NS, function () {\n that._hovered = true;\n }).on('mouseleave' + NS, function () {\n that._hovered = false;\n });\n that.wrapper = $();\n if (options.animation === false) {\n options.animation = {\n open: { effects: {} },\n close: {\n hide: true,\n effects: {}\n }\n };\n }\n extend(options.animation.open, {\n complete: function () {\n that.wrapper.css({ overflow: VISIBLE });\n that._activated = true;\n that._trigger(ACTIVATE);\n }\n });\n extend(options.animation.close, {\n complete: function () {\n that._animationClose();\n }\n });\n that._mousedownProxy = function (e) {\n that._mousedown(e);\n };\n if (support.mobileOS.android) {\n that._resizeProxy = function (e) {\n setTimeout(function () {\n that._resize(e);\n }, 600);\n };\n } else {\n that._resizeProxy = function (e) {\n that._resize(e);\n };\n }\n if (options.toggleTarget) {\n $(options.toggleTarget).on(options.toggleEvent + NS, $.proxy(that.toggle, that));\n }\n },\n events: [\n OPEN,\n ACTIVATE,\n CLOSE,\n DEACTIVATE\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: {\n duration: 100,\n hide: true\n }\n }\n },\n _animationClose: function () {\n var that = this;\n var location = that.wrapper.data(LOCATION);\n that.wrapper.hide();\n if (location) {\n that.wrapper.css(location);\n }\n if (that.options.anchor != BODY) {\n that._hideDirClass();\n }\n that._closing = false;\n that._trigger(DEACTIVATE);\n },\n destroy: function () {\n var that = this, options = that.options, element = that.element.off(NS), parent;\n Widget.fn.destroy.call(that);\n if (options.toggleTarget) {\n $(options.toggleTarget).off(NS);\n }\n if (!options.modal) {\n DOCUMENT_ELEMENT.unbind(that.downEvent, that._mousedownProxy);\n that._toggleResize(false);\n }\n kendo.destroy(that.element.children());\n element.removeData();\n if (options.appendTo[0] === document.body) {\n parent = element.parent('.k-animation-container');\n if (parent[0]) {\n parent.remove();\n } else {\n element.remove();\n }\n }\n },\n open: function (x, y) {\n var that = this, fixed = {\n isFixed: !isNaN(parseInt(y, 10)),\n x: x,\n y: y\n }, element = that.element, options = that.options, animation, wrapper, anchor = $(options.anchor), mobile = element[0] && element.hasClass('km-widget');\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 if (element.data('animating') || that._trigger(OPEN)) {\n return;\n }\n that._activated = false;\n if (!options.modal) {\n DOCUMENT_ELEMENT.unbind(that.downEvent, that._mousedownProxy).bind(that.downEvent, that._mousedownProxy);\n that._toggleResize(false);\n that._toggleResize(true);\n }\n that.wrapper = wrapper = kendo.wrap(element, options.autosize).css({\n overflow: HIDDEN,\n display: 'block',\n position: ABSOLUTE\n });\n if (support.mobileOS.android) {\n wrapper.css(TRANSFORM, 'translatez(0)');\n }\n wrapper.css(POSITION);\n if ($(options.appendTo)[0] == document.body) {\n wrapper.css(TOP, '-10000px');\n }\n that.flipped = that._position(fixed);\n animation = that._openAnimation();\n if (options.anchor != BODY) {\n that._showDirClass(animation);\n }\n element.data(EFFECTS, animation.effects).kendoStop(true).kendoAnimate(animation);\n }\n },\n _openAnimation: function () {\n var animation = extend(true, {}, this.options.animation.open);\n animation.effects = kendo.parseEffects(animation.effects, this.flipped);\n return animation;\n },\n _hideDirClass: function () {\n var anchor = $(this.options.anchor);\n var direction = ((anchor.attr('class') || '').match(ACTIVEBORDERREGEXP) || [\n '',\n 'down'\n ])[1];\n var dirClass = ACTIVEBORDER + '-' + direction;\n anchor.removeClass(dirClass).children(ACTIVECHILDREN).removeClass(ACTIVE).removeClass(dirClass);\n this.element.removeClass(ACTIVEBORDER + '-' + kendo.directions[direction].reverse);\n },\n _showDirClass: function (animation) {\n var direction = animation.effects.slideIn ? animation.effects.slideIn.direction : 'down';\n var dirClass = ACTIVEBORDER + '-' + direction;\n $(this.options.anchor).addClass(dirClass).children(ACTIVECHILDREN).addClass(ACTIVE).addClass(dirClass);\n this.element.addClass(ACTIVEBORDER + '-' + kendo.directions[direction].reverse);\n },\n position: function () {\n if (this.visible()) {\n this.flipped = this._position();\n }\n },\n toggle: function () {\n var that = this;\n that[that.visible() ? CLOSE : OPEN]();\n },\n visible: function () {\n return this.element.is(':' + VISIBLE);\n },\n close: function (skipEffects) {\n var that = this, options = that.options, wrap, animation, openEffects, closeEffects;\n if (that.visible()) {\n wrap = that.wrapper[0] ? that.wrapper : kendo.wrap(that.element).hide();\n that._toggleResize(false);\n if (that._closing || that._trigger(CLOSE)) {\n that._toggleResize(true);\n return;\n }\n that.element.find('.k-popup').each(function () {\n var that = $(this), popup = that.data('kendoPopup');\n if (popup) {\n popup.close(skipEffects);\n }\n });\n DOCUMENT_ELEMENT.unbind(that.downEvent, that._mousedownProxy);\n if (skipEffects) {\n animation = {\n hide: true,\n effects: {}\n };\n } else {\n animation = extend(true, {}, options.animation.close);\n openEffects = that.element.data(EFFECTS);\n closeEffects = animation.effects;\n if (!closeEffects && !kendo.size(closeEffects) && openEffects && kendo.size(openEffects)) {\n animation.effects = openEffects;\n animation.reverse = true;\n }\n that._closing = true;\n }\n that.element.kendoStop(true);\n wrap.css({ overflow: HIDDEN });\n that.element.kendoAnimate(animation);\n if (skipEffects) {\n that._animationClose();\n }\n }\n },\n _trigger: function (ev) {\n return this.trigger(ev, { type: ev });\n },\n _resize: function (e) {\n var that = this;\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.hasClass('k-list-container')) {\n that.close();\n }\n }\n },\n _toggleResize: function (toggle) {\n var method = toggle ? 'on' : 'off';\n var eventNames = support.resize;\n if (!(support.mobileOS.ios || support.mobileOS.android)) {\n eventNames += ' ' + SCROLL;\n }\n this._scrollableParents()[method](SCROLL, this._resizeProxy);\n WINDOW[method](eventNames, this._resizeProxy);\n },\n _mousedown: function (e) {\n var that = this, container = that.element[0], options = that.options, anchor = $(options.anchor)[0], toggleTarget = options.toggleTarget, target = kendo.eventTarget(e), popup = $(target).closest('.k-popup'), mobile = popup.parent().parent('.km-shim').length;\n popup = popup[0];\n if (!mobile && popup && popup !== that.element[0]) {\n return;\n }\n if ($(e.target).closest('a').data('rel') === 'popover') {\n return;\n }\n if (!contains(container, target) && !contains(anchor, target) && !(toggleTarget && contains($(toggleTarget)[0], target))) {\n that.close();\n }\n },\n _fit: function (position, size, viewPortSize) {\n var output = 0;\n if (position + size > viewPortSize) {\n output = viewPortSize - (position + size);\n }\n if (position < 0) {\n output = -position;\n }\n return output;\n },\n _flip: function (offset, size, anchorSize, viewPortSize, origin, position, boxSize) {\n var output = 0;\n boxSize = boxSize || size;\n if (position !== origin && position !== CENTER && origin !== CENTER) {\n if (offset + boxSize > viewPortSize) {\n output += -(anchorSize + size);\n }\n if (offset + output < 0) {\n output += anchorSize + size;\n }\n }\n return output;\n },\n _scrollableParents: function () {\n return $(this.options.anchor).parentsUntil('body').filter(function (index, element) {\n return kendo.isScrollable(element);\n });\n },\n _position: function (fixed) {\n var that = this, element = that.element, wrapper = that.wrapper, options = that.options, viewport = $(options.viewport), zoomLevel = support.zoomLevel(), isWindow = !!(viewport[0] == window && window.innerWidth && zoomLevel <= 1.02), anchor = $(options.anchor), origins = options.origin.toLowerCase().split(' '), positions = options.position.toLowerCase().split(' '), collisions = that.collisions, siblingContainer, parents, parentZIndex, zIndex = 10002, idx = 0, docEl = document.documentElement, length, viewportOffset, viewportWidth, viewportHeight;\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 if (isWindow) {\n viewportWidth = window.innerWidth;\n viewportHeight = window.innerHeight;\n } else {\n viewportWidth = viewport.width();\n viewportHeight = viewport.height();\n }\n if (isWindow && docEl.scrollHeight - docEl.clientHeight > 0) {\n viewportWidth -= kendo.support.scrollbar();\n }\n siblingContainer = anchor.parents().filter(wrapper.siblings());\n if (siblingContainer[0]) {\n parentZIndex = Math.max(Number(siblingContainer.css('zIndex')), 0);\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 wrapper.css('zIndex', zIndex);\n if (fixed && fixed.isFixed) {\n wrapper.css({\n left: fixed.x,\n top: fixed.y\n });\n } else {\n wrapper.css(that._align(origins, positions));\n }\n var pos = getOffset(wrapper, POSITION, anchor[0] === wrapper.offsetParent()[0]), offset = getOffset(wrapper), anchorParent = anchor.offsetParent().parent('.k-animation-container,.k-popup,.k-group');\n if (anchorParent.length) {\n pos = getOffset(wrapper, POSITION, true);\n offset = getOffset(wrapper);\n }\n offset.top -= viewportOffset.top;\n offset.left -= viewportOffset.left;\n if (!that.wrapper.data(LOCATION)) {\n wrapper.data(LOCATION, extend({}, pos));\n }\n var offsets = extend({}, offset), location = extend({}, pos), adjustSize = options.adjustSize;\n if (collisions[0] === 'fit') {\n location.top += that._fit(offsets.top, outerHeight(wrapper) + adjustSize.height, viewportHeight / zoomLevel);\n }\n if (collisions[1] === 'fit') {\n location.left += that._fit(offsets.left, outerWidth(wrapper) + adjustSize.width, viewportWidth / zoomLevel);\n }\n var flipPos = extend({}, location);\n var elementHeight = outerHeight(element);\n var wrapperHeight = outerHeight(wrapper);\n if (!wrapper.height() && elementHeight) {\n wrapperHeight = wrapperHeight + elementHeight;\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 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 element.css(POSITION, ABSOLUTE);\n wrapper.css(location);\n return location.left != flipPos.left || location.top != flipPos.top;\n },\n _align: function (origin, position) {\n var that = this, element = that.wrapper, anchor = $(that.options.anchor), verticalOrigin = origin[0], horizontalOrigin = origin[1], verticalPosition = position[0], horizontalPosition = position[1], anchorOffset = getOffset(anchor), appendTo = $(that.options.appendTo), appendToOffset, width = outerWidth(element), height = outerHeight(element), anchorWidth = outerWidth(anchor), anchorHeight = outerHeight(anchor), top = anchorOffset.top, left = anchorOffset.left, round = Math.round;\n if (appendTo[0] != document.body) {\n appendToOffset = getOffset(appendTo);\n top -= appendToOffset.top;\n left -= appendToOffset.left;\n }\n if (verticalOrigin === BOTTOM) {\n top += anchorHeight;\n }\n if (verticalOrigin === CENTER) {\n top += round(anchorHeight / 2);\n }\n if (verticalPosition === BOTTOM) {\n top -= height;\n }\n if (verticalPosition === CENTER) {\n top -= round(height / 2);\n }\n if (horizontalOrigin === RIGHT) {\n left += anchorWidth;\n }\n if (horizontalOrigin === CENTER) {\n left += round(anchorWidth / 2);\n }\n if (horizontalPosition === RIGHT) {\n left -= width;\n }\n if (horizontalPosition === CENTER) {\n left -= round(width / 2);\n }\n return {\n top: top,\n left: left\n };\n }\n });\n ui.plugin(Popup);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/surface-tooltip', [\n 'kendo.popup',\n 'drawing/kendo-drawing'\n ], f);\n}(function () {\n (function ($) {\n var NS = '.kendo';\n var kendo = window.kendo;\n var deepExtend = kendo.deepExtend;\n var utils = kendo.drawing.util;\n var defined = utils.defined;\n var limitValue = utils.limitValue;\n var eventCoordinates = utils.eventCoordinates;\n var outerWidth = kendo._outerWidth;\n var outerHeight = kendo._outerHeight;\n var proxy = $.proxy;\n var TOOLTIP_TEMPLATE = '<div class=\"k-tooltip\">' + '<div class=\"k-tooltip-content\"></div>' + '</div>';\n var TOOLTIP_CLOSE_TEMPLATE = '<div class=\"k-tooltip-button\"><a href=\"\\\\#\" class=\"k-icon k-i-close\">close</a></div>';\n var SurfaceTooltip = kendo.Class.extend({\n init: function (surface, options) {\n this.element = $(TOOLTIP_TEMPLATE);\n this.content = this.element.children('.k-tooltip-content');\n options = options || {};\n this.options = deepExtend({}, this.options, this._tooltipOptions(options));\n this.popupOptions = {\n appendTo: options.appendTo,\n animation: options.animation,\n copyAnchorStyles: false,\n collision: 'fit fit'\n };\n this._openPopupHandler = $.proxy(this._openPopup, this);\n this.surface = surface;\n this._bindEvents();\n },\n options: {\n position: 'top',\n showOn: 'mouseenter',\n offset: 7,\n autoHide: true,\n hideDelay: 0,\n showAfter: 100\n },\n _bindEvents: function () {\n this._showHandler = proxy(this._showEvent, this);\n this._surfaceLeaveHandler = proxy(this._surfaceLeave, this);\n this._mouseleaveHandler = proxy(this._mouseleave, this);\n this._mousemoveHandler = proxy(this._mousemove, this);\n this.surface.bind('click', this._showHandler);\n this.surface.bind('mouseenter', this._showHandler);\n this.surface.bind('mouseleave', this._mouseleaveHandler);\n this.surface.bind('mousemove', this._mousemoveHandler);\n this.surface.element.on('mouseleave' + NS, this._surfaceLeaveHandler);\n this.element.on('click' + NS, '.k-tooltip-button', proxy(this._hideClick, this));\n },\n getPopup: function () {\n if (!this.popup) {\n this.popup = new kendo.ui.Popup(this.element, this.popupOptions);\n }\n return this.popup;\n },\n destroy: function () {\n var popup = this.popup;\n this.surface.unbind('click', this._showHandler);\n this.surface.unbind('mouseenter', this._showHandler);\n this.surface.unbind('mouseleave', this._mouseleaveHandler);\n this.surface.unbind('mousemove', this._mousemoveHandler);\n this.surface.element.off('mouseleave' + NS, this._surfaceLeaveHandler);\n this.element.off('click' + NS);\n if (popup) {\n popup.destroy();\n delete this.popup;\n }\n delete this.popupOptions;\n clearTimeout(this._timeout);\n delete this.element;\n delete this.content;\n delete this.surface;\n },\n _tooltipOptions: function (options) {\n options = options || {};\n return {\n position: options.position,\n showOn: options.showOn,\n offset: options.offset,\n autoHide: options.autoHide,\n width: options.width,\n height: options.height,\n content: options.content,\n shared: options.shared,\n hideDelay: options.hideDelay,\n showAfter: options.showAfter\n };\n },\n _tooltipShape: function (shape) {\n while (shape && !shape.options.tooltip) {\n shape = shape.parent;\n }\n return shape;\n },\n _updateContent: function (target, shape, options) {\n var content = options.content;\n if (kendo.isFunction(content)) {\n content = content({\n element: shape,\n target: target\n });\n }\n if (content) {\n this.content.html(content);\n return true;\n }\n },\n _position: function (shape, options, elementSize, event) {\n var position = options.position;\n var tooltipOffset = options.offset || 0;\n var surface = this.surface;\n var offset = surface._instance._elementOffset();\n var size = surface.getSize();\n var surfaceOffset = surface._instance._offset;\n var bbox = shape.bbox();\n var width = elementSize.width;\n var height = elementSize.height;\n var left = 0, top = 0;\n bbox.origin.translate(offset.left, offset.top);\n if (surfaceOffset) {\n bbox.origin.translate(-surfaceOffset.x, -surfaceOffset.y);\n }\n if (position == 'cursor' && event) {\n var coord = eventCoordinates(event);\n left = coord.x - width / 2;\n top = coord.y - height - tooltipOffset;\n } else if (position == 'left') {\n left = bbox.origin.x - width - tooltipOffset;\n top = bbox.center().y - height / 2;\n } else if (position == 'right') {\n left = bbox.bottomRight().x + tooltipOffset;\n top = bbox.center().y - height / 2;\n } else if (position == 'bottom') {\n left = bbox.center().x - width / 2;\n top = bbox.bottomRight().y + tooltipOffset;\n } else {\n left = bbox.center().x - width / 2;\n top = bbox.origin.y - height - tooltipOffset;\n }\n return {\n left: limitValue(left, offset.left, offset.left + size.width),\n top: limitValue(top, offset.top, offset.top + size.height)\n };\n },\n show: function (shape, options) {\n this._show(shape, shape, deepExtend({}, this.options, this._tooltipOptions(shape.options.tooltip), options));\n },\n hide: function () {\n var popup = this.popup;\n var current = this._current;\n delete this._current;\n clearTimeout(this._showTimeout);\n if (popup && popup.visible() && current && !this.surface.trigger('tooltipClose', {\n element: current.shape,\n target: current.target,\n popup: popup\n })) {\n popup.close();\n }\n },\n _hideClick: function (e) {\n e.preventDefault();\n this.hide();\n },\n _show: function (target, shape, options, event, delay) {\n var current = this._current;\n clearTimeout(this._timeout);\n if (current && (current.shape === shape && options.shared || current.target === target)) {\n return;\n }\n clearTimeout(this._showTimeout);\n var popup = this.getPopup();\n if (!this.surface.trigger('tooltipOpen', {\n element: shape,\n target: target,\n popup: popup\n }) && this._updateContent(target, shape, options)) {\n this._autoHide(options);\n var elementSize = this._measure(options);\n if (popup.visible()) {\n popup.close(true);\n }\n this._current = {\n options: options,\n elementSize: elementSize,\n shape: shape,\n target: target,\n position: this._position(options.shared ? shape : target, options, elementSize, event)\n };\n if (delay) {\n this._showTimeout = setTimeout(this._openPopupHandler, options.showAfter || 0);\n } else {\n this._openPopup();\n }\n }\n },\n _openPopup: function () {\n var current = this._current;\n var position = current.position;\n this.getPopup().open(position.left, position.top);\n },\n _autoHide: function (options) {\n if (options.autoHide && this._closeButton) {\n this.element.removeClass('k-tooltip-closable');\n this._closeButton.remove();\n delete this._closeButton;\n }\n if (!options.autoHide && !this._closeButton) {\n this.element.addClass('k-tooltip-closable');\n this._closeButton = $(TOOLTIP_CLOSE_TEMPLATE).prependTo(this.element);\n }\n },\n _showEvent: function (e) {\n var shape = this._tooltipShape(e.element);\n if (shape) {\n var options = deepExtend({}, this.options, this._tooltipOptions(shape.options.tooltip));\n if (options && options.showOn == e.type) {\n this._show(e.element, shape, options, e.originalEvent, true);\n }\n }\n },\n _measure: function (options) {\n var popup = this.getPopup();\n var width, height;\n this.element.css({\n width: 'auto',\n height: 'auto'\n });\n var visible = popup.visible();\n if (!visible) {\n popup.wrapper.show();\n }\n this.element.css({\n width: defined(options.width) ? options.width : 'auto',\n height: defined(options.height) ? options.height : 'auto'\n });\n width = outerWidth(this.element);\n height = outerHeight(this.element);\n if (!visible) {\n popup.wrapper.hide();\n }\n return {\n width: width,\n height: height\n };\n },\n _mouseleave: function (e) {\n if (this.popup && !this._popupRelatedTarget(e.originalEvent)) {\n var tooltip = this;\n var current = tooltip._current;\n if (current && current.options.autoHide) {\n tooltip._timeout = setTimeout(function () {\n clearTimeout(tooltip._showTimeout);\n tooltip.hide();\n }, current.options.hideDelay || 0);\n }\n }\n },\n _mousemove: function (e) {\n var current = this._current;\n if (current && e.element) {\n var options = current.options;\n if (options.position == 'cursor') {\n var position = this._position(e.element, options, current.elementSize, e.originalEvent);\n current.position = position;\n this.getPopup().wrapper.css({\n left: position.left,\n top: position.top\n });\n }\n }\n },\n _surfaceLeave: function (e) {\n if (this.popup && !this._popupRelatedTarget(e)) {\n clearTimeout(this._showTimeout);\n this.hide();\n }\n },\n _popupRelatedTarget: function (e) {\n return e.relatedTarget && $(e.relatedTarget).closest(this.popup.wrapper).length;\n }\n });\n kendo.drawing.SurfaceTooltip = SurfaceTooltip;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/surface', [\n 'drawing/kendo-drawing',\n 'drawing/surface-tooltip'\n ], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var draw = kendo.drawing;\n var DrawingSurface = draw.Surface;\n var Widget = kendo.ui.Widget;\n var deepExtend = kendo.deepExtend;\n var proxy = $.proxy;\n kendo.support.svg = DrawingSurface.support.svg;\n kendo.support.canvas = DrawingSurface.support.canvas;\n var Surface = Widget.extend({\n init: function (element, options) {\n this.options = deepExtend({}, this.options, options);\n Widget.fn.init.call(this, element, this.options);\n this._instance = DrawingSurface.create(this.element[0], options);\n if (this._instance.translate) {\n this.translate = translate;\n }\n this._triggerInstanceHandler = proxy(this._triggerInstanceEvent, this);\n this._bindHandler('click');\n this._bindHandler('mouseenter');\n this._bindHandler('mouseleave');\n this._bindHandler('mousemove');\n this._enableTracking();\n },\n options: {\n name: 'Surface',\n tooltip: {}\n },\n events: [\n 'click',\n 'mouseenter',\n 'mouseleave',\n 'mousemove',\n 'resize',\n 'tooltipOpen',\n 'tooltipClose'\n ],\n _triggerInstanceEvent: function (e) {\n this.trigger(e.type, e);\n },\n _bindHandler: function (event) {\n this._instance.bind(event, this._triggerInstanceHandler);\n },\n draw: function (element) {\n this._instance.draw(element);\n },\n clear: function () {\n if (this._instance) {\n this._instance.clear();\n }\n this.hideTooltip();\n },\n destroy: function () {\n if (this._instance) {\n this._instance.destroy();\n delete this._instance;\n }\n if (this._tooltip) {\n this._tooltip.destroy();\n delete this._tooltip;\n }\n Widget.fn.destroy.call(this);\n },\n exportVisual: function () {\n return this._instance.exportVisual();\n },\n eventTarget: function (e) {\n return this._instance.eventTarget(e);\n },\n showTooltip: function (shape, options) {\n if (this._tooltip) {\n this._tooltip.show(shape, options);\n }\n },\n hideTooltip: function () {\n if (this._tooltip) {\n this._tooltip.hide();\n }\n },\n suspendTracking: function () {\n this._instance.suspendTracking();\n this.hideTooltip();\n },\n resumeTracking: function () {\n this._instance.resumeTracking();\n },\n getSize: function () {\n return {\n width: this.element.width(),\n height: this.element.height()\n };\n },\n setSize: function (size) {\n this.element.css({\n width: size.width,\n height: size.height\n });\n this._size = size;\n this._instance.currentSize(size);\n this._resize();\n },\n _resize: function () {\n this._instance.currentSize(this._size);\n this._instance._resize();\n },\n _enableTracking: function () {\n if (kendo.ui.Popup) {\n this._tooltip = new draw.SurfaceTooltip(this, this.options.tooltip || {});\n }\n }\n });\n kendo.ui.plugin(Surface);\n Surface.create = function (element, options) {\n return new Surface(element, options);\n };\n kendo.drawing.Surface = Surface;\n function translate(offset) {\n this._instance.translate(offset);\n }\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/html', ['drawing/kendo-drawing'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var drawing = kendo.drawing;\n var drawDOM = drawing.drawDOM;\n drawing.drawDOM = function (element, options) {\n return drawDOM($(element)[0], options);\n };\n drawing.drawDOM.drawText = drawDOM.drawText;\n drawing.drawDOM.getFontFaces = drawDOM.getFontFaces;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.drawing', [\n 'drawing/util',\n 'drawing/kendo-drawing',\n 'drawing/surface-tooltip',\n 'drawing/surface',\n 'drawing/html'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'drawing',\n name: 'Drawing API',\n category: 'framework',\n description: 'The Kendo UI low-level drawing API',\n depends: [\n 'core',\n 'color',\n 'popup'\n ]\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.validator', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\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 (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, NS = '.kendoValidator', INVALIDMSG = 'k-invalid-msg', invalidMsgRegExp = new RegExp(INVALIDMSG, 'i'), INVALIDINPUT = 'k-invalid', VALIDINPUT = 'k-valid', 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, 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, INPUTSELECTOR = ':input:not(:button,[type=submit],[type=reset],[disabled],[readonly])', CHECKBOXSELECTOR = ':checkbox:not([disabled],[readonly])', NUMBERINPUTSELECTOR = '[type=number],[type=range]', BLUR = 'blur', NAME = 'name', FORM = 'form', NOVALIDATE = 'novalidate', VALIDATE = 'validate', CHANGE = 'change', VALIDATE_INPUT = 'validateInput', proxy = $.proxy, patternMatcher = function (value, pattern) {\n if (typeof pattern === 'string') {\n pattern = new RegExp('^(?:' + pattern + ')$');\n }\n return pattern.test(value);\n }, matcher = function (input, selector, pattern) {\n var value = input.val();\n if (input.filter(selector).length && value !== '') {\n return patternMatcher(value, pattern);\n }\n return true;\n }, hasAttribute = function (input, name) {\n if (input.length) {\n return input[0].attributes[name] != null;\n }\n return false;\n };\n if (!kendo.ui.validator) {\n kendo.ui.validator = {\n rules: {},\n messages: {}\n };\n }\n function resolveRules(element) {\n var resolvers = kendo.ui.validator.ruleResolvers || {}, rules = {}, name;\n for (name in resolvers) {\n $.extend(true, rules, resolvers[name].resolve(element));\n }\n return rules;\n }\n function decode(value) {\n return value.replace(/&/g, '&').replace(/"/g, '\"').replace(/'/g, '\\'').replace(/</g, '<').replace(/>/g, '>');\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 function parseHtml(text) {\n if ($.parseHTML) {\n return $($.parseHTML(text));\n }\n return $(text);\n }\n function searchForMessageContainer(elements, fieldName) {\n var containers = $(), element, attr;\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 var Validator = Widget.extend({\n init: function (element, options) {\n var that = this, resolved = resolveRules(element), validateAttributeSelector = '[' + kendo.attr('validate') + '!=false]';\n options = options || {};\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 Widget.fn.init.call(that, element, options);\n that._errorTemplate = kendo.template(that.options.errorTemplate);\n if (that.element.is(FORM)) {\n that.element.attr(NOVALIDATE, NOVALIDATE);\n }\n that._inputSelector = INPUTSELECTOR + validateAttributeSelector;\n that._checkboxSelector = CHECKBOXSELECTOR + validateAttributeSelector;\n that._errors = {};\n that._attachEvents();\n that._isValidated = false;\n },\n events: [\n VALIDATE,\n CHANGE,\n VALIDATE_INPUT\n ],\n options: {\n name: 'Validator',\n errorTemplate: '<span class=\"k-widget k-tooltip k-tooltip-validation\">' + '<span class=\"k-icon k-i-warning\"> </span> #=message#</span>',\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 },\n rules: {\n required: function (input) {\n var checkbox = input.filter('[type=checkbox]').length && !input.is(':checked'), value = input.val();\n return !(hasAttribute(input, 'required') && (!value || value === '' || value.length === 0 || checkbox));\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, val = kendo.parseFloat(input.val());\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, val = kendo.parseFloat(input.val());\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, step = parseFloat(input.attr('step')) || 1, val = parseFloat(input.val()), decimals = numberOfDecimalDigits(step), raise;\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 },\n validateOnBlur: true\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.off(NS);\n },\n value: function () {\n if (!this._isValidated) {\n return false;\n }\n return this.errors().length === 0;\n },\n _submit: function (e) {\n if (!this.validate()) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n e.preventDefault();\n return false;\n }\n return true;\n },\n _checkElement: function (element) {\n var state = this.value();\n this.validateInput(element);\n if (this.value() !== state) {\n this.trigger(CHANGE);\n }\n },\n _attachEvents: function () {\n var that = this;\n if (that.element.is(FORM)) {\n that.element.on('submit' + NS, proxy(that._submit, that));\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 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 if (that.element.is(CHECKBOXSELECTOR)) {\n that.element.on('click' + NS, function () {\n that._checkElement(that.element);\n });\n }\n }\n }\n },\n validate: function () {\n var inputs;\n var idx;\n var result = false;\n var length;\n var isValid = this.value();\n this._errors = {};\n if (!this.element.is(INPUTSELECTOR)) {\n var invalid = false;\n inputs = this.element.find(this._inputSelector);\n for (idx = 0, length = inputs.length; idx < length; idx++) {\n if (!this.validateInput(inputs.eq(idx))) {\n invalid = true;\n }\n }\n result = !invalid;\n } else {\n result = this.validateInput(this.element);\n }\n this.trigger(VALIDATE, { valid: result });\n if (isValid !== result) {\n this.trigger(CHANGE);\n }\n return result;\n },\n validateInput: function (input) {\n input = $(input);\n this._isValidated = true;\n var that = this, template = that._errorTemplate, result = that._checkValidity(input), valid = result.valid, className = '.' + INVALIDMSG, fieldName = input.attr(NAME) || '', 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 return true;\n })).hide(), messageText, wasValid = !input.attr('aria-invalid');\n input.removeAttr('aria-invalid');\n if (!valid) {\n messageText = that._extractMessage(input, result.key);\n that._errors[fieldName] = messageText;\n var messageLabel = parseHtml(template({ message: decode(messageText) }));\n var lblId = lbl.attr('id');\n that._decorateMessageContainer(messageLabel, fieldName);\n if (lblId) {\n messageLabel.attr('id', lblId);\n }\n if (!lbl.replaceWith(messageLabel).length) {\n messageLabel.insertAfter(input);\n }\n messageLabel.show();\n input.attr('aria-invalid', true);\n } else {\n delete that._errors[fieldName];\n }\n if (wasValid !== valid) {\n this.trigger(VALIDATE_INPUT, {\n valid: valid,\n input: input\n });\n }\n input.toggleClass(INVALIDINPUT, !valid);\n input.toggleClass(VALIDINPUT, valid);\n return valid;\n },\n hideMessages: function () {\n var that = this, className = '.' + INVALIDMSG, element = that.element;\n if (!element.is(INPUTSELECTOR)) {\n element.find(className).hide();\n } else {\n element.next(className).hide();\n }\n },\n _findMessageContainer: function (fieldName) {\n var locators = kendo.ui.validator.messageLocators, name, containers = $();\n for (var idx = 0, length = this.element.length; idx < length; idx++) {\n containers = containers.add(searchForMessageContainer(this.element[idx].getElementsByTagName('*'), fieldName));\n }\n for (name in locators) {\n containers = containers.add(locators[name].locate(this.element, fieldName));\n }\n return containers;\n },\n _decorateMessageContainer: function (container, fieldName) {\n var locators = kendo.ui.validator.messageLocators, name;\n container.addClass(INVALIDMSG).attr(kendo.attr('for'), fieldName || '');\n for (name in locators) {\n locators[name].decorate(container, fieldName);\n }\n container.attr('role', 'alert');\n },\n _extractMessage: function (input, ruleKey) {\n var that = this, customMessage = that.options.messages[ruleKey], fieldName = input.attr(NAME);\n customMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n return kendo.format(input.attr(kendo.attr(ruleKey + '-msg')) || input.attr('validationMessage') || input.attr('title') || customMessage || '', fieldName, input.attr(ruleKey) || input.attr(kendo.attr(ruleKey)));\n },\n _checkValidity: function (input) {\n var rules = this.options.rules, rule;\n for (rule in rules) {\n if (!rules[rule].call(this, input)) {\n return {\n valid: false,\n key: rule\n };\n }\n }\n return { valid: true };\n },\n errors: function () {\n var results = [], errors = this._errors, error;\n for (error in errors) {\n results.push(errors[error]);\n }\n return results;\n }\n });\n kendo.ui.plugin(Validator);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.userevents', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'userevents',\n name: 'User Events',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, Class = kendo.Class, Observable = kendo.Observable, now = $.now, extend = $.extend, OS = support.mobileOS, invalidZeroEvents = OS && OS.android, DEFAULT_MIN_HOLD = 800, DEFAULT_THRESHOLD = support.browser.msie ? 5 : 0, PRESS = 'press', HOLD = 'hold', SELECT = 'select', START = 'start', MOVE = 'move', END = 'end', CANCEL = 'cancel', TAP = 'tap', RELEASE = 'release', GESTURESTART = 'gesturestart', GESTURECHANGE = 'gesturechange', GESTUREEND = 'gestureend', GESTURETAP = 'gesturetap';\n var THRESHOLD = {\n 'api': 0,\n 'touch': 0,\n 'mouse': 9,\n 'pointer': 9\n };\n var ENABLE_GLOBAL_SURFACE = !support.touch || support.mouseAndTouchPresent;\n function touchDelta(touch1, touch2) {\n var x1 = touch1.x.location, y1 = touch1.y.location, x2 = touch2.x.location, y2 = touch2.y.location, dx = x1 - x2, dy = y1 - y2;\n return {\n center: {\n x: (x1 + x2) / 2,\n y: (y1 + y2) / 2\n },\n distance: Math.sqrt(dx * dx + dy * dy)\n };\n }\n function getTouches(e) {\n var touches = [], originalEvent = e.originalEvent, currentTarget = e.currentTarget, idx = 0, length, changedTouches, touch;\n if (e.api) {\n touches.push({\n id: 2,\n event: e,\n target: e.target,\n currentTarget: e.target,\n location: e,\n type: 'api'\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 } 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,\n event: e,\n target: e.target,\n currentTarget: currentTarget,\n location: e,\n type: 'mouse'\n });\n }\n return touches;\n }\n var TouchAxis = Class.extend({\n init: function (axis, location) {\n var that = this;\n that.axis = axis;\n that._updateLocationData(location);\n that.startLocation = that.location;\n that.velocity = that.delta = 0;\n that.timeStamp = now();\n },\n move: function (location) {\n var that = this, offset = location['page' + that.axis], timeStamp = now(), timeDelta = timeStamp - that.timeStamp || 1;\n if (!offset && invalidZeroEvents) {\n return;\n }\n that.delta = offset - that.location;\n that._updateLocationData(location);\n that.initialDelta = offset - that.startLocation;\n that.velocity = that.delta / timeDelta;\n that.timeStamp = timeStamp;\n },\n _updateLocationData: function (location) {\n var that = this, axis = that.axis;\n that.location = location['page' + axis];\n that.client = location['client' + axis];\n that.screen = location['screen' + axis];\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 _moved: false,\n _finished: false\n });\n },\n press: function () {\n this._holdTimeout = setTimeout($.proxy(this, '_hold'), this.userEvents.minHold);\n this._trigger(PRESS, this.pressEvent);\n },\n _hold: function () {\n this._trigger(HOLD, this.pressEvent);\n },\n move: function (touchInfo) {\n var that = this;\n if (that._finished) {\n return;\n }\n that.x.move(touchInfo.location);\n that.y.move(touchInfo.location);\n if (!that._moved) {\n if (that._withinIgnoreThreshold()) {\n return;\n }\n if (!UserEvents.current || UserEvents.current === that.userEvents) {\n that._start(touchInfo);\n } else {\n return that.dispose();\n }\n }\n if (!that._finished) {\n that._trigger(MOVE, touchInfo);\n }\n },\n end: function (touchInfo) {\n this.endTime = now();\n if (this._finished) {\n return;\n }\n this._finished = true;\n this._trigger(RELEASE, touchInfo);\n if (this._moved) {\n this._trigger(END, touchInfo);\n } else {\n if (!this.useClickAsTap) {\n this._trigger(TAP, touchInfo);\n }\n }\n clearTimeout(this._holdTimeout);\n this.dispose();\n },\n dispose: function () {\n var userEvents = this.userEvents, activeTouches = userEvents.touches;\n this._finished = true;\n this.pressEvent = null;\n clearTimeout(this._holdTimeout);\n activeTouches.splice($.inArray(this, activeTouches), 1);\n },\n skip: function () {\n this.dispose();\n },\n cancel: function () {\n this.dispose();\n },\n isMoved: function () {\n return this._moved;\n },\n _start: function (touchInfo) {\n clearTimeout(this._holdTimeout);\n this.startTime = now();\n this._moved = true;\n this._trigger(START, touchInfo);\n },\n _trigger: function (name, touchInfo) {\n var that = this, jQueryEvent = touchInfo.event, data = {\n touch: that,\n x: that.x,\n y: that.y,\n target: that.target,\n event: jQueryEvent\n };\n if (that.userEvents.notify(name, data)) {\n jQueryEvent.preventDefault();\n }\n },\n _withinIgnoreThreshold: function () {\n var xDelta = this.x.initialDelta, yDelta = this.y.initialDelta;\n return Math.sqrt(xDelta * xDelta + yDelta * yDelta) <= this.threshold;\n }\n });\n function withEachUpEvent(callback) {\n var downEvents = kendo.eventMap.up.split(' '), idx = 0, length = downEvents.length;\n for (; idx < length; idx++) {\n callback(downEvents[idx]);\n }\n }\n var UserEvents = Observable.extend({\n init: function (element, options) {\n var that = this, filter, ns = kendo.guid();\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 element = $(element).handler(that);\n Observable.fn.init.call(that);\n extend(that, {\n element: element,\n surface: options.global && ENABLE_GLOBAL_SURFACE ? $(element[0].ownerDocument.documentElement) : $(options.surface || element),\n stopPropagation: options.stopPropagation,\n pressed: false\n });\n that.surface.handler(that).on(kendo.applyEventMap('move', ns), '_move').on(kendo.applyEventMap('up cancel', ns), '_end');\n element.on(kendo.applyEventMap('down', ns), filter, '_start');\n if (that.useClickAsTap) {\n element.on(kendo.applyEventMap('click', ns), filter, '_click');\n }\n if (support.pointers || support.msPointers) {\n if (support.browser.version < 11) {\n element.css('-ms-touch-action', 'pinch-zoom double-tap-zoom');\n } else {\n element.css('touch-action', options.touchAction || 'none');\n }\n }\n if (options.preventDragEvent) {\n element.on(kendo.applyEventMap('dragstart', ns), kendo.preventDefault);\n }\n element.on(kendo.applyEventMap('mousedown', ns), filter, { root: element }, '_select');\n if (that.captureUpIfMoved && support.eventCapture) {\n var surfaceElement = that.surface[0], preventIfMovingProxy = $.proxy(that.preventIfMoving, that);\n withEachUpEvent(function (eventName) {\n surfaceElement.addEventListener(eventName, preventIfMovingProxy, true);\n });\n }\n that.bind([\n PRESS,\n HOLD,\n TAP,\n START,\n MOVE,\n END,\n RELEASE,\n CANCEL,\n GESTURESTART,\n GESTURECHANGE,\n GESTUREEND,\n GESTURETAP,\n SELECT\n ], options);\n },\n preventIfMoving: function (e) {\n if (this._isMoved()) {\n e.preventDefault();\n }\n },\n destroy: function () {\n var that = this;\n if (that._destroyed) {\n return;\n }\n that._destroyed = true;\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 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 that.unbind();\n delete that.surface;\n delete that.element;\n delete that.currentTarget;\n },\n capture: function () {\n UserEvents.current = this;\n },\n cancel: function () {\n this._disposeAll();\n this.trigger(CANCEL);\n },\n notify: function (eventName, data) {\n var that = this, touches = that.touches;\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 extend(data, { touches: touches }, touchDelta(touches[0], touches[1]));\n }\n return this.trigger(eventName, extend(data, { type: eventName }));\n },\n press: function (x, y, target) {\n this._apiCall('_start', x, y, target);\n },\n move: function (x, y) {\n this._apiCall('_move', x, y);\n },\n end: function (x, y) {\n this._apiCall('_end', x, y);\n },\n _isMultiTouch: function () {\n return this.touches.length > 1;\n },\n _maxTouchesReached: function () {\n return this.touches.length >= this._maxTouches;\n },\n _disposeAll: function () {\n var touches = this.touches;\n while (touches.length > 0) {\n touches.pop().dispose();\n }\n },\n _isMoved: function () {\n return $.grep(this.touches, function (touch) {\n return touch.isMoved();\n }).length;\n },\n _select: function (e) {\n if (!this.allowSelection || this.trigger(SELECT, { event: e })) {\n e.preventDefault();\n }\n },\n _start: function (e) {\n var that = this, idx = 0, filter = that.filter, target, touches = getTouches(e), length = touches.length, touch, which = e.which;\n if (which && which > 1 || that._maxTouchesReached()) {\n return;\n }\n UserEvents.current = null;\n that.currentTarget = e.currentTarget;\n if (that.stopPropagation) {\n e.stopPropagation();\n }\n for (; idx < length; idx++) {\n if (that._maxTouchesReached()) {\n break;\n }\n touch = touches[idx];\n if (filter) {\n target = $(touch.currentTarget);\n } else {\n target = that.element;\n }\n if (!target.length) {\n continue;\n }\n touch = new Touch(that, target, touch);\n that.touches.push(touch);\n touch.press();\n if (that._isMultiTouch()) {\n that.notify('gesturestart', {});\n }\n }\n },\n _move: function (e) {\n this._eachTouch('move', e);\n },\n _end: function (e) {\n this._eachTouch('end', e);\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 if (this.trigger('tap', data)) {\n e.preventDefault();\n }\n },\n _eachTouch: function (methodName, e) {\n var that = this, dict = {}, touches = getTouches(e), activeTouches = that.touches, idx, touch, touchInfo, matchingTouch;\n for (idx = 0; idx < activeTouches.length; idx++) {\n touch = activeTouches[idx];\n dict[touch.id] = touch;\n }\n for (idx = 0; idx < touches.length; idx++) {\n touchInfo = touches[idx];\n matchingTouch = dict[touchInfo.id];\n if (matchingTouch) {\n matchingTouch[methodName](touchInfo);\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 UserEvents.defaultThreshold = function (value) {\n DEFAULT_THRESHOLD = value;\n };\n UserEvents.minHold = function (value) {\n DEFAULT_MIN_HOLD = value;\n };\n kendo.getTouches = getTouches;\n kendo.touchDelta = touchDelta;\n kendo.UserEvents = UserEvents;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.draganddrop', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'draganddrop',\n name: 'Drag & drop',\n category: 'framework',\n description: 'Drag & drop functionality for any DOM element.',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, document = window.document, $window = $(window), Class = kendo.Class, Widget = kendo.ui.Widget, Observable = kendo.Observable, UserEvents = kendo.UserEvents, proxy = $.proxy, extend = $.extend, getOffset = kendo.getOffset, draggables = {}, dropTargets = {}, dropAreas = {}, lastDropTarget, elementUnderCursor = kendo.elementUnderCursor, KEYUP = 'keyup', CHANGE = 'change', DRAGSTART = 'dragstart', HOLD = 'hold', DRAG = 'drag', DRAGEND = 'dragend', DRAGCANCEL = 'dragcancel', HINTDESTROYED = 'hintDestroyed', DRAGENTER = 'dragenter', DRAGLEAVE = 'dragleave', DROP = 'drop';\n function contains(parent, child) {\n try {\n return $.contains(parent, child) || parent == child;\n } catch (e) {\n return false;\n }\n }\n function numericCssPropery(element, property) {\n return parseInt(element.css(property), 10) || 0;\n }\n function within(value, range) {\n return Math.min(Math.max(value, range.min), range.max);\n }\n function containerBoundaries(container, element) {\n var offset = getOffset(container), outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, minX = offset.left + numericCssPropery(container, 'borderLeftWidth') + numericCssPropery(container, 'paddingLeft'), minY = offset.top + numericCssPropery(container, 'borderTopWidth') + numericCssPropery(container, 'paddingTop'), maxX = minX + container.width() - outerWidth(element, true), maxY = minY + container.height() - outerHeight(element, true);\n return {\n x: {\n min: minX,\n max: maxX\n },\n y: {\n min: minY,\n max: maxY\n }\n };\n }\n function checkTarget(target, targets, areas) {\n var theTarget, theFilter, i = 0, targetLen = targets && targets.length, areaLen = areas && areas.length;\n while (target && target.parentNode) {\n for (i = 0; i < targetLen; i++) {\n theTarget = targets[i];\n if (theTarget.element[0] === target) {\n return {\n target: theTarget,\n 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 {\n target: theFilter,\n targetElement: target\n };\n }\n }\n target = target.parentNode;\n }\n return undefined;\n }\n var TapCapture = Observable.extend({\n init: function (element, options) {\n var that = this, domElement = element[0];\n that.capture = false;\n if (domElement.addEventListener) {\n $.each(kendo.eventMap.down.split(' '), function () {\n domElement.addEventListener(this, proxy(that._press, that), true);\n });\n $.each(kendo.eventMap.up.split(' '), function () {\n domElement.addEventListener(this, proxy(that._release, that), true);\n });\n } else {\n $.each(kendo.eventMap.down.split(' '), function () {\n domElement.attachEvent(this, proxy(that._press, that));\n });\n $.each(kendo.eventMap.up.split(' '), function () {\n domElement.attachEvent(this, proxy(that._release, that));\n });\n }\n Observable.fn.init.call(that);\n that.bind([\n 'press',\n 'release'\n ], options || {});\n },\n captureNext: function () {\n this.capture = true;\n },\n cancelCapture: function () {\n this.capture = false;\n },\n _press: function (e) {\n var that = this;\n that.trigger('press');\n if (that.capture) {\n e.preventDefault();\n }\n },\n _release: function (e) {\n var that = this;\n that.trigger('release');\n if (that.capture) {\n e.preventDefault();\n that.cancelCapture();\n }\n }\n });\n var PaneDimension = Observable.extend({\n init: function (options) {\n var that = this;\n Observable.fn.init.call(that);\n that.forcedEnabled = false;\n $.extend(that, options);\n that.scale = 1;\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 makeVirtual: function () {\n $.extend(this, {\n virtual: true,\n forcedEnabled: true,\n _virtualMin: 0,\n _virtualMax: 0\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 outOfBounds: function (offset) {\n return offset > this.max || offset < this.min;\n },\n forceEnabled: function () {\n this.forcedEnabled = true;\n },\n getSize: function () {\n return this.container[0][this.measure];\n },\n getTotal: function () {\n return this.element[0][this.scrollSize];\n },\n rescale: function (scale) {\n this.scale = scale;\n },\n update: function (silent) {\n var that = this, total = that.virtual ? that._virtualMax : that.getTotal(), scaledTotal = total * that.scale, size = that.getSize();\n if (total === 0 && !that.forcedEnabled) {\n return;\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 that.enabled = that.forcedEnabled || scaledTotal > size;\n if (!silent) {\n that.trigger(CHANGE, that);\n }\n }\n });\n var PaneDimensions = Observable.extend({\n init: function (options) {\n var that = this;\n Observable.fn.init.call(that);\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 that.bind(CHANGE, options);\n },\n rescale: function (newScale) {\n this.x.rescale(newScale);\n this.y.rescale(newScale);\n this.refresh();\n },\n centerCoordinates: function () {\n return {\n x: Math.min(0, -this.x.centerOffset),\n 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 var PaneAxis = Observable.extend({\n init: function (options) {\n var that = this;\n extend(that, options);\n Observable.fn.init.call(that);\n },\n outOfBounds: function () {\n return this.dimension.outOfBounds(this.movable[this.axis]);\n },\n dragMove: function (delta) {\n var that = this, dimension = that.dimension, axis = that.axis, movable = that.movable, position = movable[axis] + delta;\n if (!dimension.enabled) {\n return;\n }\n if (position < dimension.min && delta < 0 || position > dimension.max && delta > 0) {\n delta *= that.resistance;\n }\n movable.translateAxis(axis, delta);\n that.trigger(CHANGE, that);\n }\n });\n var Pane = Class.extend({\n init: function (options) {\n var that = this, x, y, resistance, movable;\n extend(that, { elastic: true }, options);\n resistance = that.elastic ? 0.5 : 0;\n movable = that.movable;\n that.x = x = new PaneAxis({\n axis: 'x',\n dimension: that.dimensions.x,\n resistance: resistance,\n movable: movable\n });\n that.y = y = new PaneAxis({\n axis: 'y',\n dimension: that.dimensions.y,\n resistance: resistance,\n movable: movable\n });\n that.userEvents.bind([\n 'press',\n 'move',\n 'end',\n 'gesturestart',\n 'gesturechange'\n ], {\n gesturestart: function (e) {\n that.gesture = e;\n that.offset = that.dimensions.container.offset();\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 gesturechange: function (e) {\n var previousGesture = that.gesture, previousCenter = previousGesture.center, center = e.center, scaleDelta = e.distance / previousGesture.distance, minScale = that.dimensions.minScale, maxScale = that.dimensions.maxScale, coordinates;\n if (movable.scale <= minScale && scaleDelta < 1) {\n scaleDelta += (1 - scaleDelta) * 0.8;\n }\n if (movable.scale * scaleDelta >= maxScale) {\n scaleDelta = maxScale / movable.scale;\n }\n var offsetX = movable.x + that.offset.left, offsetY = movable.y + that.offset.top;\n coordinates = {\n x: (offsetX - previousCenter.x) * scaleDelta + center.x - offsetX,\n y: (offsetY - previousCenter.y) * scaleDelta + center.y - offsetY\n };\n movable.scaleWith(scaleDelta);\n x.dragMove(coordinates.x);\n y.dragMove(coordinates.y);\n that.dimensions.rescale(movable.scale);\n that.gesture = e;\n e.preventDefault();\n },\n move: function (e) {\n if (e.event.target.tagName.match(/textarea|input/i)) {\n return;\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 end: function (e) {\n e.preventDefault();\n }\n });\n }\n });\n var TRANSFORM_STYLE = support.transitions.prefix + 'Transform', translate;\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 var Movable = Observable.extend({\n init: function (element) {\n var that = this;\n Observable.fn.init.call(that);\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 translateAxis: function (axis, by) {\n this[axis] += by;\n this.refresh();\n },\n scaleTo: function (scale) {\n this.scale = scale;\n this.refresh();\n },\n scaleWith: function (scaleDelta) {\n this.scale *= scaleDelta;\n this.refresh();\n },\n translate: function (coordinates) {\n this.x += coordinates.x;\n this.y += coordinates.y;\n this.refresh();\n },\n moveAxis: function (axis, value) {\n this[axis] = value;\n this.refresh();\n },\n moveTo: function (coordinates) {\n extend(this, coordinates);\n this.refresh();\n },\n refresh: function () {\n var that = this, x = that.x, y = that.y, newCoordinates;\n if (that.round) {\n x = Math.round(x);\n y = Math.round(y);\n }\n newCoordinates = translate(x, y, that.scale);\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 } else {\n that.element[0].style[TRANSFORM_STYLE] = newCoordinates;\n }\n that._saveCoordinates(newCoordinates);\n that.trigger(CHANGE);\n }\n },\n _saveCoordinates: function (coordinates) {\n this.coordinates = coordinates;\n }\n });\n function destroyDroppable(collection, widget) {\n var groupName = widget.options.group, droppables = collection[groupName], i;\n Widget.fn.destroy.call(widget);\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;\n delete collection[groupName];\n }\n }\n var DropTarget = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n var group = that.options.group;\n if (!(group in dropTargets)) {\n dropTargets[group] = [that];\n } else {\n dropTargets[group].push(that);\n }\n },\n events: [\n DRAGENTER,\n DRAGLEAVE,\n DROP\n ],\n options: {\n name: 'DropTarget',\n group: 'default'\n },\n destroy: function () {\n destroyDroppable(dropTargets, this);\n },\n _trigger: function (eventName, e) {\n var that = this, draggable = draggables[that.options.group];\n if (draggable) {\n return that.trigger(eventName, extend({}, e.event, {\n draggable: draggable,\n dropTarget: e.dropTarget\n }));\n }\n },\n _over: function (e) {\n this._trigger(DRAGENTER, e);\n },\n _out: function (e) {\n this._trigger(DRAGLEAVE, e);\n },\n _drop: function (e) {\n var that = this, draggable = draggables[that.options.group];\n if (draggable) {\n draggable.dropped = !that._trigger(DROP, e);\n }\n }\n });\n DropTarget.destroyGroup = function (groupName) {\n var group = dropTargets[groupName] || dropAreas[groupName], i;\n if (group) {\n for (i = 0; i < group.length; i++) {\n Widget.fn.destroy.call(group[i]);\n }\n group.length = 0;\n delete dropTargets[groupName];\n delete dropAreas[groupName];\n }\n };\n DropTarget._cache = dropTargets;\n var DropTargetArea = DropTarget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n var group = that.options.group;\n if (!(group in dropAreas)) {\n dropAreas[group] = [that];\n } else {\n dropAreas[group].push(that);\n }\n },\n destroy: function () {\n destroyDroppable(dropAreas, this);\n },\n options: {\n name: 'DropTargetArea',\n group: 'default',\n filter: null\n }\n });\n var Draggable = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that._activated = false;\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: proxy(that._start, that),\n hold: proxy(that._hold, that),\n move: proxy(that._drag, that),\n end: proxy(that._end, that),\n cancel: proxy(that._cancel, that),\n select: proxy(that._select, that)\n });\n that._afterEndHandler = proxy(that._afterEnd, that);\n that._captureEscape = proxy(that._captureEscape, that);\n },\n events: [\n HOLD,\n DRAGSTART,\n DRAG,\n DRAGEND,\n DRAGCANCEL,\n HINTDESTROYED\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 cancelHold: function () {\n this._activated = false;\n },\n _captureEscape: function (e) {\n var that = this;\n if (e.keyCode === kendo.keys.ESC) {\n that._trigger(DRAGCANCEL, { event: e });\n that.userEvents.cancel();\n }\n },\n _updateHint: function (e) {\n var that = this, coordinates, options = that.options, boundaries = that.boundaries, axis = options.axis, cursorOffset = that.options.cursorOffset;\n if (cursorOffset) {\n coordinates = {\n left: e.x.location + cursorOffset.left,\n top: e.y.location + cursorOffset.top\n };\n } else {\n that.hintOffset.left += e.x.delta;\n that.hintOffset.top += e.y.delta;\n coordinates = $.extend({}, that.hintOffset);\n }\n if (boundaries) {\n coordinates.top = within(coordinates.top, boundaries.y);\n coordinates.left = within(coordinates.left, boundaries.x);\n }\n if (axis === 'x') {\n delete coordinates.top;\n } else if (axis === 'y') {\n delete coordinates.left;\n }\n that.hint.css(coordinates);\n },\n _shouldIgnoreTarget: function (target) {\n var ignoreSelector = this.options.ignore;\n return ignoreSelector && $(target).is(ignoreSelector);\n },\n _select: function (e) {\n if (!this._shouldIgnoreTarget(e.event.target)) {\n e.preventDefault();\n }\n },\n _start: function (e) {\n var that = this, options = that.options, container = options.container, hint = options.hint;\n if (this._shouldIgnoreTarget(e.touch.initialTouch) || options.holdToDrag && !that._activated) {\n that.userEvents.cancel();\n return;\n }\n that.currentTarget = e.target;\n that.currentTargetOffset = getOffset(that.currentTarget);\n if (hint) {\n if (that.hint) {\n that.hint.stop(true, true).remove();\n }\n that.hint = kendo.isFunction(hint) ? $(hint.call(that, that.currentTarget)) : hint;\n var offset = getOffset(that.currentTarget);\n that.hintOffset = offset;\n that.hint.css({\n position: 'absolute',\n zIndex: 20000,\n left: offset.left,\n top: offset.top\n }).appendTo(document.body);\n that.angular('compile', function () {\n that.hint.removeAttr('ng-repeat');\n var scopeTarget = $(e.target);\n while (!scopeTarget.data('$$kendoScope') && scopeTarget.length) {\n scopeTarget = scopeTarget.parent();\n }\n return {\n elements: that.hint.get(),\n scopeFrom: scopeTarget.data('$$kendoScope')\n };\n });\n }\n draggables[options.group] = that;\n that.dropped = false;\n if (container) {\n that.boundaries = containerBoundaries(container, that.hint);\n }\n $(document).on(KEYUP, that._captureEscape);\n if (that._trigger(DRAGSTART, e)) {\n that.userEvents.cancel();\n that._afterEnd();\n }\n that.userEvents.capture();\n },\n _hold: function (e) {\n this.currentTarget = e.target;\n if (this._trigger(HOLD, e)) {\n this.userEvents.cancel();\n } else {\n this._activated = true;\n }\n },\n _drag: function (e) {\n e.preventDefault();\n var cursorElement = this._elementUnderCursor(e);\n if (this.options.autoScroll && this._cursorElement !== cursorElement) {\n this._scrollableParent = findScrollableParent(cursorElement);\n this._cursorElement = cursorElement;\n }\n this._lastEvent = e;\n this._processMovement(e, cursorElement);\n if (this.options.autoScroll) {\n if (this._scrollableParent[0]) {\n var velocity = autoScrollVelocity(e.x.location, e.y.location, scrollableViewPort(this._scrollableParent));\n this._scrollCompenstation = $.extend({}, this.hintOffset);\n this._scrollVelocity = velocity;\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($.proxy(this, '_autoScroll'), 50);\n }\n }\n }\n if (this.hint) {\n this._updateHint(e);\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 if (lastDropTarget) {\n if (targetElement === lastDropTarget.targetElement) {\n return;\n }\n lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\n }\n target._trigger(DRAGENTER, extend(e, { dropTarget: $(targetElement) }));\n lastDropTarget = extend(target, { targetElement: targetElement });\n });\n this._trigger(DRAG, extend(e, {\n dropTarget: lastDropTarget,\n elementUnderCursor: cursorElement\n }));\n },\n _autoScroll: function () {\n var parent = this._scrollableParent[0], velocity = this._scrollVelocity, compensation = this._scrollCompenstation;\n if (!parent) {\n return;\n }\n var cursorElement = this._elementUnderCursor(this._lastEvent);\n this._processMovement(this._lastEvent, cursorElement);\n var yIsScrollable, xIsScrollable;\n var isRootNode = parent === scrollableRoot()[0];\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 var yDelta = parent.scrollTop + velocity.y;\n var yInBounds = yIsScrollable && yDelta > 0 && yDelta < parent.scrollHeight;\n var xDelta = parent.scrollLeft + velocity.x;\n var xInBounds = xIsScrollable && xDelta > 0 && xDelta < parent.scrollWidth;\n if (yInBounds) {\n parent.scrollTop += velocity.y;\n }\n if (xInBounds) {\n parent.scrollLeft += velocity.x;\n }\n if (isRootNode && (xInBounds || yInBounds)) {\n if (yInBounds) {\n compensation.top += velocity.y;\n }\n if (xInBounds) {\n compensation.left += velocity.x;\n }\n this.hint.css(compensation);\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 this._cancel(this._trigger(DRAGEND, e));\n },\n _cancel: function (isDefaultPrevented) {\n var that = this;\n that._scrollableParent = null;\n this._cursorElement = null;\n clearInterval(this._scrollInterval);\n that._activated = false;\n if (that.hint && !that.dropped) {\n setTimeout(function () {\n that.hint.stop(true, true);\n if (isDefaultPrevented) {\n that._afterEndHandler();\n } else {\n that.hint.animate(that.currentTargetOffset, 'fast', that._afterEndHandler);\n }\n }, 0);\n } else {\n that._afterEnd();\n }\n },\n _trigger: function (eventName, e) {\n var that = this;\n return that.trigger(eventName, extend({}, e.event, {\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 _elementUnderCursor: function (e) {\n var target = elementUnderCursor(e), hint = this.hint;\n if (hint && contains(hint[0], target)) {\n hint.hide();\n target = elementUnderCursor(e);\n if (!target) {\n target = elementUnderCursor(e);\n }\n hint.show();\n }\n return target;\n },\n _withDropTarget: function (element, callback) {\n var result, group = this.options.group, targets = dropTargets[group], areas = dropAreas[group];\n if (targets && targets.length || areas && areas.length) {\n result = checkTarget(element, targets, areas);\n if (result) {\n callback(result.target, result.targetElement);\n } else {\n callback();\n }\n }\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that._afterEnd();\n that.userEvents.destroy();\n this._scrollableParent = null;\n this._cursorElement = null;\n clearInterval(this._scrollInterval);\n that.currentTarget = null;\n },\n _afterEnd: function () {\n var that = this;\n if (that.hint) {\n that.hint.remove();\n }\n delete draggables[that.options.group];\n that.trigger('destroy');\n that.trigger(HINTDESTROYED);\n $(document).off(KEYUP, that._captureEscape);\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 extend(kendo.ui, {\n Pane: Pane,\n PaneDimensions: PaneDimensions,\n Movable: Movable\n });\n function scrollableViewPort(element) {\n var root = scrollableRoot()[0], offset, top, left;\n if (element[0] === root) {\n top = root.scrollTop;\n left = root.scrollLeft;\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 function scrollableRoot() {\n return $(kendo.support.browser.chrome ? document.body : document.documentElement);\n }\n function findScrollableParent(element) {\n var root = scrollableRoot();\n if (!element || element === document.body || element === document.documentElement) {\n return root;\n }\n var parent = $(element)[0];\n while (parent && !kendo.isScrollable(parent) && parent !== document.body) {\n parent = parent.parentNode;\n }\n if (parent === document.body) {\n return root;\n }\n return $(parent);\n }\n function autoScrollVelocity(mouseX, mouseY, rect) {\n var velocity = {\n x: 0,\n y: 0\n };\n var AUTO_SCROLL_AREA = 50;\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 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 return velocity;\n }\n kendo.ui.Draggable.utils = {\n autoScrollVelocity: autoScrollVelocity,\n scrollableViewPort: scrollableViewPort,\n findScrollableParent: findScrollableParent\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.scroller', [\n 'kendo.fx',\n 'kendo.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.scroller',\n name: 'Scroller',\n category: 'mobile',\n description: 'The Kendo Mobile Scroller widget enables touch friendly kinetic scrolling for the contents of a given DOM element.',\n depends: [\n 'fx',\n 'draganddrop'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, fx = kendo.effects, ui = mobile.ui, proxy = $.proxy, extend = $.extend, Widget = ui.Widget, Class = kendo.Class, Movable = kendo.ui.Movable, Pane = kendo.ui.Pane, PaneDimensions = kendo.ui.PaneDimensions, Transition = fx.Transition, Animation = fx.Animation, abs = Math.abs, SNAPBACK_DURATION = 500, SCROLLBAR_OPACITY = 0.7, FRICTION = 0.96, VELOCITY_MULTIPLIER = 10, MAX_VELOCITY = 55, OUT_OF_BOUNDS_FRICTION = 0.5, ANIMATED_SCROLLER_PRECISION = 5, RELEASECLASS = 'km-scroller-release', REFRESHCLASS = 'km-scroller-refresh', PULL = 'pull', CHANGE = 'change', RESIZE = 'resize', SCROLL = 'scroll', MOUSE_WHEEL_ID = 2;\n var ZoomSnapBack = Animation.extend({\n init: function (options) {\n var that = this;\n Animation.fn.init.call(that);\n extend(that, options);\n that.userEvents.bind('gestureend', proxy(that.start, that));\n that.tapCapture.bind('press', proxy(that.cancel, that));\n },\n enabled: function () {\n return this.movable.scale < this.dimensions.minScale;\n },\n done: function () {\n return this.dimensions.minScale - this.movable.scale < 0.01;\n },\n tick: function () {\n var movable = this.movable;\n movable.scaleWith(1.1);\n this.dimensions.rescale(movable.scale);\n },\n onEnd: function () {\n var movable = this.movable;\n movable.scaleTo(this.dimensions.minScale);\n this.dimensions.rescale(movable.scale);\n }\n });\n var DragInertia = Animation.extend({\n init: function (options) {\n var that = this;\n Animation.fn.init.call(that);\n extend(that, options, {\n transition: new Transition({\n axis: options.axis,\n movable: options.movable,\n onEnd: function () {\n that._end();\n }\n })\n });\n that.tapCapture.bind('press', function () {\n that.cancel();\n });\n that.userEvents.bind('end', proxy(that.start, that));\n that.userEvents.bind('gestureend', proxy(that.start, that));\n that.userEvents.bind('tap', proxy(that.onEnd, that));\n },\n onCancel: function () {\n this.transition.cancel();\n },\n freeze: function (location) {\n var that = this;\n that.cancel();\n that._moveTo(location);\n },\n onEnd: function () {\n var that = this;\n if (that.paneAxis.outOfBounds()) {\n that._snapBack();\n } else {\n that._end();\n }\n },\n done: function () {\n return abs(this.velocity) < 1;\n },\n start: function (e) {\n var that = this, velocity;\n if (!that.dimension.enabled) {\n return;\n }\n if (that.paneAxis.outOfBounds()) {\n that._snapBack();\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 that.tapCapture.captureNext();\n Animation.fn.start.call(that);\n }\n },\n tick: function () {\n var that = this, dimension = that.dimension, friction = that.paneAxis.outOfBounds() ? OUT_OF_BOUNDS_FRICTION : that.friction, delta = that.velocity *= friction, location = that.movable[that.axis] + delta;\n if (!that.elastic && dimension.outOfBounds(location)) {\n location = Math.max(Math.min(location, dimension.max), dimension.min);\n that.velocity = 0;\n }\n that.movable.moveAxis(that.axis, location);\n },\n _end: function () {\n this.tapCapture.cancelCapture();\n this.end();\n },\n _snapBack: function () {\n var that = this, dimension = that.dimension, snapBack = that.movable[that.axis] > dimension.max ? dimension.max : dimension.min;\n that._moveTo(snapBack);\n },\n _moveTo: function (location) {\n this.transition.moveTo({\n location: location,\n duration: SNAPBACK_DURATION,\n ease: Transition.easeOutExpo\n });\n }\n });\n var AnimatedScroller = Animation.extend({\n init: function (options) {\n var that = this;\n kendo.effects.Animation.fn.init.call(this);\n extend(that, options, {\n origin: {},\n destination: {},\n offset: {}\n });\n },\n tick: function () {\n this._updateCoordinates();\n this.moveTo(this.origin);\n },\n done: function () {\n return abs(this.offset.y) < ANIMATED_SCROLLER_PRECISION && abs(this.offset.x) < ANIMATED_SCROLLER_PRECISION;\n },\n onEnd: function () {\n this.moveTo(this.destination);\n if (this.callback) {\n this.callback.call();\n }\n },\n setCoordinates: function (from, to) {\n this.offset = {};\n this.origin = from;\n this.destination = to;\n },\n setCallback: function (callback) {\n if (callback && kendo.isFunction(callback)) {\n this.callback = callback;\n } else {\n callback = undefined;\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 this.origin = {\n y: this.origin.y + this.offset.y,\n x: this.origin.x + this.offset.x\n };\n }\n });\n var ScrollBar = Class.extend({\n init: function (options) {\n var that = this, horizontal = options.axis === 'x', element = $('<div class=\"km-touch-scrollbar km-' + (horizontal ? 'horizontal' : 'vertical') + '-scrollbar\" />');\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 that.scrollMovable.bind(CHANGE, proxy(that.refresh, that));\n that.container.append(element);\n if (options.alwaysVisible) {\n that.show();\n }\n },\n refresh: function () {\n var that = this, axis = that.axis, dimension = that.dimension, paneSize = dimension.size, scrollMovable = that.scrollMovable, sizeRatio = paneSize / dimension.total, position = Math.round(-scrollMovable[axis] * sizeRatio), size = Math.round(paneSize * sizeRatio);\n if (sizeRatio >= 1) {\n this.element.css('display', 'none');\n } else {\n this.element.css('display', '');\n }\n if (position + size > paneSize) {\n size = paneSize - position;\n } else if (position < 0) {\n size += position;\n position = 0;\n }\n if (that.elementSize != size) {\n that.element.css(that.size, size + 'px');\n that.elementSize = size;\n }\n that.movable.moveAxis(axis, position);\n },\n show: function () {\n this.element.css({\n opacity: SCROLLBAR_OPACITY,\n visibility: 'visible'\n });\n },\n hide: function () {\n if (!this.alwaysVisible) {\n this.element.css({ opacity: 0 });\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 element = that.element;\n that._native = that.options.useNative && kendo.support.hasNativeScrolling;\n if (that._native) {\n element.addClass('km-native-scroller').prepend('<div class=\"km-scroll-header\"/>');\n extend(that, {\n scrollElement: element,\n fixedContainer: element.children().first()\n });\n return;\n }\n element.css('overflow', 'hidden').addClass('km-scroll-wrapper').wrapInner('<div class=\"km-scroll-container\"/>').prepend('<div class=\"km-scroll-header\"/>');\n var inner = element.children().eq(1), tapCapture = new kendo.TapCapture(element), movable = new Movable(inner), dimensions = new PaneDimensions({\n element: inner,\n container: element,\n forcedEnabled: that.options.zoom\n }), avoidScrolling = this.options.avoidScrolling, 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 start: function (e) {\n dimensions.refresh();\n var velocityX = abs(e.x.velocity), velocityY = abs(e.y.velocity), horizontalSwipe = velocityX * 2 >= velocityY, originatedFromFixedContainer = $.contains(that.fixedContainer[0], e.event.target), verticalSwipe = velocityY * 2 >= velocityX;\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 }), pane = new Pane({\n movable: movable,\n dimensions: dimensions,\n userEvents: userEvents,\n elastic: that.options.elastic\n }), zoomSnapBack = new ZoomSnapBack({\n movable: movable,\n dimensions: dimensions,\n userEvents: userEvents,\n tapCapture: tapCapture\n }), animatedScroller = new AnimatedScroller({\n moveTo: function (coordinates) {\n that.scrollTo(coordinates.x, coordinates.y);\n }\n });\n movable.bind(CHANGE, function () {\n that.scrollTop = -movable.y;\n that.scrollLeft = -movable.x;\n that.trigger(SCROLL, {\n scrollTop: that.scrollTop,\n scrollLeft: that.scrollLeft\n });\n });\n if (that.options.mousewheelScrolling) {\n element.on('DOMMouseScroll mousewheel', proxy(this, '_wheelScroll'));\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 that._initAxis('x');\n that._initAxis('y');\n that._wheelEnd = function () {\n that._wheel = false;\n that.userEvents.end(0, that._wheelY);\n };\n dimensions.refresh();\n if (that.options.pullToRefresh) {\n that._initPullToRefresh();\n }\n },\n _wheelScroll: function (e) {\n if (!this._wheel) {\n this._wheel = true;\n this._wheelY = 0;\n this.userEvents.press(0, this._wheelY);\n }\n clearTimeout(this._wheelTimeout);\n this._wheelTimeout = setTimeout(this._wheelEnd, 50);\n var delta = kendo.wheelDeltaY(e);\n if (delta) {\n this._wheelY += delta;\n this.userEvents.move(0, this._wheelY);\n }\n e.preventDefault();\n },\n makeVirtual: function () {\n this.dimensions.y.makeVirtual();\n },\n virtualSize: function (min, max) {\n this.dimensions.y.virtualSize(min, max);\n },\n height: function () {\n return this.dimensions.y.size;\n },\n scrollHeight: function () {\n return this.scrollElement[0].scrollHeight;\n },\n scrollWidth: function () {\n return this.scrollElement[0].scrollWidth;\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 () {\n return false;\n },\n pullToRefresh: false,\n messages: {\n pullTemplate: 'Pull to refresh',\n releaseTemplate: 'Release to refresh',\n refreshTemplate: 'Refreshing'\n }\n },\n events: [\n PULL,\n SCROLL,\n RESIZE\n ],\n _resize: function () {\n if (!this._native) {\n this.contentResized();\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 reset: function () {\n if (this._native) {\n this.scrollElement.scrollTop(0);\n } else {\n this.movable.moveTo({\n x: 0,\n y: 0\n });\n this._scale(1);\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 if (this.pane.y.outOfBounds()) {\n this.movable.moveAxis('y', this.dimensions.y.min);\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 enable: function () {\n this.enabled = true;\n },\n disable: function () {\n this.enabled = false;\n },\n scrollTo: function (x, y) {\n if (this._native) {\n this.scrollElement.scrollLeft(abs(x));\n this.scrollElement.scrollTop(abs(y));\n } else {\n this.dimensions.refresh();\n this.movable.moveTo({\n x: x,\n y: y\n });\n }\n },\n animatedScrollTo: function (x, y, callback) {\n var from, to;\n if (this._native) {\n this.scrollTo(x, y);\n } else {\n from = {\n x: this.movable.x,\n y: this.movable.y\n };\n to = {\n x: x,\n y: y\n };\n this.animatedScroller.setCoordinates(from, to);\n this.animatedScroller.setCallback(callback);\n this.animatedScroller.start();\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 destroy: function () {\n Widget.fn.destroy.call(this);\n if (this.userEvents) {\n this.userEvents.destroy();\n }\n },\n _scale: function (scale) {\n this.dimensions.rescale(scale);\n this.movable.scaleTo(scale);\n },\n _initPullToRefresh: function () {\n var that = this;\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 that.scrollElement.prepend('<span class=\"km-scroller-pull\"><span class=\"km-icon\"></span><span class=\"km-loading-left\"></span><span class=\"km-loading-right\"></span><span class=\"km-template\">' + that.pullTemplate({}) + '</span></span>');\n that.refreshHint = that.scrollElement.children().first();\n that.hintContainer = that.refreshHint.children('.km-template');\n that.pane.y.bind('change', proxy(that._paneChange, that));\n that.userEvents.bind('end', proxy(that._dragEnd, that));\n },\n _dragEnd: function () {\n var that = this;\n if (!that.pulled) {\n return;\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 _paneChange: function () {\n var that = this;\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 _initAxis: function (axis) {\n var that = this, movable = that.movable, dimension = that.dimensions[axis], tapCapture = that.tapCapture, paneAxis = that.pane[axis], scrollBar = new ScrollBar({\n axis: axis,\n movable: movable,\n dimension: dimension,\n container: that.element,\n alwaysVisible: that.options.visibleScrollHints\n });\n dimension.bind(CHANGE, function () {\n scrollBar.refresh();\n });\n paneAxis.bind(CHANGE, function () {\n scrollBar.show();\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 ui.plugin(Scroller);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.groupable', [\n 'kendo.core',\n 'kendo.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'groupable',\n name: 'Groupable',\n category: 'framework',\n depends: [\n 'core',\n 'draganddrop'\n ],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, outerWidth = kendo._outerWidth, proxy = $.proxy, isRtl = false, NS = '.kendoGroupable', CHANGE = 'change', indicatorTmpl = kendo.template('<div class=\"k-group-indicator\" data-#=data.ns#field=\"${data.field}\" data-#=data.ns#title=\"${data.title || \"\"}\" data-#=data.ns#dir=\"${data.dir || \"asc\"}\">' + '<a href=\"\\\\#\" class=\"k-link\">' + '<span class=\"k-icon k-i-sort-${(data.dir || \"asc\") == \"asc\" ? \"asc-sm\" : \"desc-sm\"}\" title=\"(sorted ${(data.dir || \"asc\") == \"asc\" ? \"ascending\": \"descending\"})\"></span>' + '${data.title ? data.title: data.field}' + '</a>' + '<a class=\"k-button k-button-icon k-button-bare\">' + '<span class=\"k-icon k-i-close\"></span>' + '</a>' + '</div>', { useWithBlock: false }), hint = function (target) {\n var title = target.attr(kendo.attr('title'));\n if (title) {\n title = kendo.htmlEncode(title);\n }\n return $('<div class=\"k-header k-drag-clue\" />').css({\n width: target.width(),\n paddingLeft: target.css('paddingLeft'),\n paddingRight: target.css('paddingRight'),\n lineHeight: target.height() + 'px',\n paddingTop: target.css('paddingTop'),\n paddingBottom: target.css('paddingBottom')\n }).html(title || target.attr(kendo.attr('field'))).prepend('<span class=\"k-icon k-drag-status k-i-cancel\" />');\n }, dropCue = $('<div class=\"k-grouping-dropclue\"/>');\n function dropCueOffsetTop(element) {\n return element.position().top + 3;\n }\n var Groupable = Widget.extend({\n init: function (element, options) {\n var that = this, group = kendo.guid(), intializePositions = proxy(that._intializePositions, that), draggable, horizontalCuePosition, dropCuePositions = that._dropCuePositions = [];\n Widget.fn.init.call(that, element, options);\n isRtl = kendo.support.isRtl(element);\n horizontalCuePosition = isRtl ? 'right' : 'left';\n that.draggable = draggable = that.options.draggable || new kendo.ui.Draggable(that.element, {\n filter: that.options.draggableElements,\n hint: hint,\n group: group\n });\n that.groupContainer = $(that.options.groupContainer, that.element).kendoDropTarget({\n group: draggable.options.group,\n dragenter: function (e) {\n if (that._canDrag(e.draggable.currentTarget)) {\n e.draggable.hint.find('.k-drag-status').removeClass('k-i-cancel').addClass('k-i-plus');\n dropCue.css('top', dropCueOffsetTop(that.groupContainer)).css(horizontalCuePosition, 0).appendTo(that.groupContainer);\n }\n },\n dragleave: function (e) {\n e.draggable.hint.find('.k-drag-status').removeClass('k-i-plus').addClass('k-i-cancel');\n dropCue.remove();\n },\n drop: function (e) {\n var targetElement = e.draggable.currentTarget, field = targetElement.attr(kendo.attr('field')), title = targetElement.attr(kendo.attr('title')), sourceIndicator = that.indicator(field), dropCuePositions = that._dropCuePositions, lastCuePosition = dropCuePositions[dropCuePositions.length - 1], position;\n if (!targetElement.hasClass('k-group-indicator') && !that._canDrag(targetElement)) {\n return;\n }\n if (lastCuePosition) {\n position = that._dropCuePosition(kendo.getOffset(dropCue).left + parseInt(lastCuePosition.element.css('marginLeft'), 10) * (isRtl ? -1 : 1) + parseInt(lastCuePosition.element.css('marginRight'), 10));\n if (position && that._canDrop($(sourceIndicator), position.element, position.left)) {\n if (position.before) {\n position.element.before(sourceIndicator || that.buildIndicator(field, title));\n } else {\n position.element.after(sourceIndicator || that.buildIndicator(field, title));\n }\n that._change();\n }\n } else {\n that.groupContainer.append(that.buildIndicator(field, title));\n that._change();\n }\n }\n }).kendoDraggable({\n filter: 'div.k-group-indicator',\n hint: hint,\n group: draggable.options.group,\n dragcancel: proxy(that._dragCancel, that),\n dragstart: function (e) {\n var element = e.currentTarget, marginLeft = parseInt(element.css('marginLeft'), 10), elementPosition = element.position(), left = isRtl ? elementPosition.left - marginLeft : elementPosition.left + outerWidth(element);\n intializePositions();\n dropCue.css({\n top: dropCueOffsetTop(that.groupContainer),\n left: left\n }).appendTo(that.groupContainer);\n this.hint.find('.k-drag-status').removeClass('k-i-cancel').addClass('k-i-plus');\n },\n dragend: function () {\n that._dragEnd(this);\n },\n drag: proxy(that._drag, that)\n }).on('click' + NS, '.k-button', function (e) {\n e.preventDefault();\n that._removeIndicator($(this).parent());\n }).on('click' + NS, '.k-link', function (e) {\n var current = $(this).parent(), newIndicator = that.buildIndicator(current.attr(kendo.attr('field')), current.attr(kendo.attr('title')), current.attr(kendo.attr('dir')) == 'asc' ? 'desc' : 'asc');\n current.before(newIndicator).remove();\n that._change();\n e.preventDefault();\n });\n draggable.bind([\n 'dragend',\n 'dragcancel',\n 'dragstart',\n 'drag'\n ], {\n dragend: function () {\n that._dragEnd(this);\n },\n dragcancel: proxy(that._dragCancel, that),\n dragstart: function (e) {\n var element, marginRight, left;\n if (!that.options.allowDrag && !that._canDrag(e.currentTarget)) {\n e.preventDefault();\n return;\n }\n intializePositions();\n if (dropCuePositions.length) {\n element = dropCuePositions[dropCuePositions.length - 1].element;\n marginRight = parseInt(element.css('marginRight'), 10);\n left = element.position().left + outerWidth(element) + marginRight;\n } else {\n left = 0;\n }\n },\n drag: proxy(that._drag, that)\n });\n that.dataSource = that.options.dataSource;\n if (that.dataSource && that._refreshHandler) {\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n } else {\n that._refreshHandler = proxy(that.refresh, that);\n }\n if (that.dataSource) {\n that.dataSource.bind('change', that._refreshHandler);\n that.refresh();\n }\n },\n refresh: function () {\n var that = this, dataSource = that.dataSource;\n if (that.groupContainer) {\n that.groupContainer.empty().append($.map(dataSource.group() || [], function (item) {\n var fieldName = item.field;\n var attr = kendo.attr('field');\n var element = that.element.find(that.options.filter).filter(function () {\n return $(this).attr(attr) === fieldName;\n });\n return that.buildIndicator(item.field, element.attr(kendo.attr('title')), item.dir);\n }).join(''));\n }\n that._invalidateGroupContainer();\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.groupContainer.off(NS);\n if (that.groupContainer.data('kendoDropTarget')) {\n that.groupContainer.data('kendoDropTarget').destroy();\n }\n if (that.groupContainer.data('kendoDraggable')) {\n that.groupContainer.data('kendoDraggable').destroy();\n }\n if (!that.options.draggable) {\n that.draggable.destroy();\n }\n if (that.dataSource && that._refreshHandler) {\n that.dataSource.unbind('change', that._refreshHandler);\n that._refreshHandler = null;\n }\n that.groupContainer = that.element = that.draggable = null;\n },\n events: ['change'],\n options: {\n name: 'Groupable',\n filter: 'th',\n draggableElements: 'th',\n messages: { empty: 'Drag a column header and drop it here to group by that column' }\n },\n indicator: function (field) {\n var indicators = $('.k-group-indicator', this.groupContainer);\n return $.grep(indicators, function (item) {\n return $(item).attr(kendo.attr('field')) === field;\n })[0];\n },\n buildIndicator: function (field, title, dir) {\n return indicatorTmpl({\n field: field.replace(/\"/g, '\\''),\n dir: dir,\n title: title,\n ns: kendo.ns\n });\n },\n descriptors: function () {\n var that = this, indicators = $('.k-group-indicator', that.groupContainer), aggregates, names, field, idx, length;\n aggregates = that.element.find(that.options.filter).map(function () {\n var cell = $(this), aggregate = cell.attr(kendo.attr('aggregates')), member = cell.attr(kendo.attr('field'));\n if (aggregate && aggregate !== '') {\n names = aggregate.split(',');\n aggregate = [];\n for (idx = 0, length = names.length; idx < length; idx++) {\n aggregate.push({\n field: member,\n aggregate: names[idx]\n });\n }\n }\n return aggregate;\n }).toArray();\n return $.map(indicators, function (item) {\n item = $(item);\n field = item.attr(kendo.attr('field'));\n return {\n field: field,\n dir: item.attr(kendo.attr('dir')),\n aggregates: aggregates || []\n };\n });\n },\n _removeIndicator: function (indicator) {\n var that = this;\n indicator.remove();\n that._invalidateGroupContainer();\n that._change();\n },\n _change: function () {\n var that = this;\n if (that.dataSource) {\n var descriptors = that.descriptors();\n if (that.trigger('change', { groups: descriptors })) {\n that.refresh();\n return;\n }\n that.dataSource.group(descriptors);\n }\n },\n _dropCuePosition: function (position) {\n var dropCuePositions = this._dropCuePositions;\n if (!dropCue.is(':visible') || dropCuePositions.length === 0) {\n return;\n }\n position = Math.ceil(position);\n var lastCuePosition = dropCuePositions[dropCuePositions.length - 1], left = lastCuePosition.left, right = lastCuePosition.right, marginLeft = parseInt(lastCuePosition.element.css('marginLeft'), 10), marginRight = parseInt(lastCuePosition.element.css('marginRight'), 10);\n if (position >= right && !isRtl || position < left && isRtl) {\n position = {\n left: lastCuePosition.element.position().left + (!isRtl ? outerWidth(lastCuePosition.element) + marginRight : -marginLeft),\n element: lastCuePosition.element,\n before: false\n };\n } else {\n position = $.grep(dropCuePositions, function (item) {\n return item.left <= position && position <= item.right || isRtl && position > item.right;\n })[0];\n if (position) {\n position = {\n left: isRtl ? position.element.position().left + outerWidth(position.element) + marginRight : position.element.position().left - marginLeft,\n element: position.element,\n before: true\n };\n }\n }\n return position;\n },\n _drag: function (event) {\n var position = this._dropCuePosition(event.x.location);\n if (position) {\n dropCue.css({\n left: position.left,\n right: 'auto'\n });\n }\n },\n _canDrag: function (element) {\n var field = element.attr(kendo.attr('field'));\n return element.attr(kendo.attr('groupable')) != 'false' && field && (element.hasClass('k-group-indicator') || !this.indicator(field));\n },\n _canDrop: function (source, target, position) {\n var next = source.next(), result = source[0] !== target[0] && (!next[0] || target[0] !== next[0] || (!isRtl && position > next.position().left || isRtl && position < next.position().left));\n return result;\n },\n _dragEnd: function (draggable) {\n var that = this, field = draggable.currentTarget.attr(kendo.attr('field')), sourceIndicator = that.indicator(field);\n if (draggable !== that.options.draggable && !draggable.dropped && sourceIndicator) {\n that._removeIndicator($(sourceIndicator));\n }\n that._dragCancel();\n },\n _dragCancel: function () {\n dropCue.remove();\n this._dropCuePositions = [];\n },\n _intializePositions: function () {\n var that = this, indicators = $('.k-group-indicator', that.groupContainer), left;\n that._dropCuePositions = $.map(indicators, function (item) {\n item = $(item);\n left = kendo.getOffset(item).left;\n return {\n left: parseInt(left, 10),\n right: parseInt(left + outerWidth(item), 10),\n element: item\n };\n });\n },\n _invalidateGroupContainer: function () {\n var groupContainer = this.groupContainer;\n if (groupContainer && groupContainer.is(':empty')) {\n groupContainer.html(this.options.messages.empty);\n }\n }\n });\n kendo.ui.plugin(Groupable);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.reorderable', [\n 'kendo.core',\n 'kendo.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'reorderable',\n name: 'Reorderable',\n category: 'framework',\n depends: [\n 'core',\n 'draganddrop'\n ],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, getOffset = kendo.getOffset, Widget = kendo.ui.Widget, CHANGE = 'change', KREORDERABLE = 'k-reorderable';\n function toggleHintClass(hint, denied) {\n hint = $(hint);\n if (denied) {\n hint.find('.k-drag-status').removeClass('k-i-plus').addClass('k-i-cancel');\n } else {\n hint.find('.k-drag-status').removeClass('k-i-cancel').addClass('k-i-plus');\n }\n }\n var Reorderable = Widget.extend({\n init: function (element, options) {\n var that = this, draggable, group = kendo.guid() + '-reorderable';\n Widget.fn.init.call(that, element, options);\n element = that.element.addClass(KREORDERABLE);\n options = that.options;\n that.draggable = draggable = options.draggable || new kendo.ui.Draggable(element, {\n group: group,\n autoScroll: true,\n filter: options.filter,\n hint: options.hint\n });\n that.reorderDropCue = $('<div class=\"k-reorder-cue\"><div class=\"k-icon k-i-arrow-60-down\"></div><div class=\"k-icon k-i-arrow-60-up\"></div></div>');\n element.find(draggable.options.filter).kendoDropTarget({\n group: draggable.options.group,\n dragenter: function (e) {\n if (!that._draggable) {\n return;\n }\n var dropTarget = this.element, offset;\n var denied = !that._dropTargetAllowed(dropTarget) || that._isLastDraggable();\n toggleHintClass(e.draggable.hint, denied);\n if (!denied) {\n offset = getOffset(dropTarget);\n var left = offset.left;\n if (options.inSameContainer && !options.inSameContainer({\n source: dropTarget,\n target: that._draggable,\n sourceIndex: that._index(dropTarget),\n targetIndex: that._index(that._draggable)\n })) {\n that._dropTarget = dropTarget;\n } else {\n if (that._index(dropTarget) > that._index(that._draggable)) {\n left += outerWidth(dropTarget);\n }\n }\n that.reorderDropCue.css({\n height: outerHeight(dropTarget),\n top: offset.top,\n left: left\n }).appendTo(document.body);\n }\n },\n dragleave: function (e) {\n toggleHintClass(e.draggable.hint, true);\n that.reorderDropCue.remove();\n that._dropTarget = null;\n },\n drop: function () {\n that._dropTarget = null;\n if (!that._draggable) {\n return;\n }\n var dropTarget = this.element;\n var draggable = that._draggable;\n if (that._dropTargetAllowed(dropTarget) && !that._isLastDraggable()) {\n that.trigger(CHANGE, {\n element: that._draggable,\n target: dropTarget,\n oldIndex: that._index(draggable),\n newIndex: that._index(dropTarget),\n position: getOffset(that.reorderDropCue).left > getOffset(dropTarget).left ? 'after' : 'before'\n });\n }\n }\n });\n draggable.bind([\n 'dragcancel',\n 'dragend',\n 'dragstart',\n 'drag'\n ], {\n dragcancel: function () {\n that.reorderDropCue.remove();\n that._draggable = null;\n that._elements = null;\n },\n dragend: function () {\n that.reorderDropCue.remove();\n that._draggable = null;\n that._elements = null;\n },\n dragstart: function (e) {\n that._draggable = e.currentTarget;\n that._elements = that.element.find(that.draggable.options.filter);\n },\n drag: function (e) {\n if (!that._dropTarget || this.hint.find('.k-drag-status').hasClass('k-i-cancel')) {\n return;\n }\n var dropStartOffset = getOffset(that._dropTarget).left;\n var width = outerWidth(that._dropTarget);\n if (e.pageX > dropStartOffset + width / 2) {\n that.reorderDropCue.css({ left: dropStartOffset + width });\n } else {\n that.reorderDropCue.css({ left: dropStartOffset });\n }\n }\n });\n },\n options: {\n name: 'Reorderable',\n filter: '*'\n },\n events: [CHANGE],\n _isLastDraggable: function () {\n var inSameContainer = this.options.inSameContainer, draggable = this._draggable[0], elements = this._elements.get(), found = false, item;\n if (!inSameContainer) {\n return false;\n }\n while (!found && elements.length > 0) {\n item = elements.pop();\n found = draggable !== item && inSameContainer({\n source: draggable,\n target: item,\n sourceIndex: this._index(draggable),\n targetIndex: this._index(item)\n });\n }\n return !found;\n },\n _dropTargetAllowed: function (dropTarget) {\n var inSameContainer = this.options.inSameContainer, dragOverContainers = this.options.dragOverContainers, draggable = this._draggable;\n if (draggable[0] === dropTarget[0]) {\n return false;\n }\n if (!inSameContainer || !dragOverContainers) {\n return true;\n }\n if (inSameContainer({\n source: draggable,\n target: dropTarget,\n sourceIndex: this._index(draggable),\n targetIndex: this._index(dropTarget)\n })) {\n return true;\n }\n return dragOverContainers(this._index(draggable), this._index(dropTarget));\n },\n _index: function (element) {\n return this._elements.index(element);\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.element.find(that.draggable.options.filter).each(function () {\n var item = $(this);\n if (item.data('kendoDropTarget')) {\n item.data('kendoDropTarget').destroy();\n }\n });\n if (that.draggable) {\n that.draggable.destroy();\n that.draggable.element = that.draggable = null;\n }\n that.elements = that.reorderDropCue = that._elements = that._draggable = null;\n }\n });\n kendo.ui.plugin(Reorderable);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.resizable', [\n 'kendo.core',\n 'kendo.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'resizable',\n name: 'Resizable',\n category: 'framework',\n depends: [\n 'core',\n 'draganddrop'\n ],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, proxy = $.proxy, isFunction = kendo.isFunction, extend = $.extend, HORIZONTAL = 'horizontal', VERTICAL = 'vertical', START = 'start', RESIZE = 'resize', RESIZEEND = 'resizeend';\n var Resizable = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.orientation = that.options.orientation.toLowerCase() != VERTICAL ? HORIZONTAL : VERTICAL;\n that._positionMouse = that.orientation == HORIZONTAL ? 'x' : 'y';\n that._position = that.orientation == HORIZONTAL ? 'left' : 'top';\n that._sizingDom = that.orientation == HORIZONTAL ? 'outerWidth' : 'outerHeight';\n that.draggable = new ui.Draggable(options.draggableElement || element, {\n distance: 1,\n filter: options.handle,\n drag: proxy(that._resize, that),\n dragcancel: proxy(that._cancel, that),\n dragstart: proxy(that._start, that),\n dragend: proxy(that._stop, that)\n });\n that.userEvents = that.draggable.userEvents;\n },\n events: [\n RESIZE,\n RESIZEEND,\n START\n ],\n options: {\n name: 'Resizable',\n orientation: HORIZONTAL\n },\n resize: function () {\n },\n _max: function (e) {\n var that = this, hintSize = that.hint ? that.hint[that._sizingDom]() : 0, size = that.options.max;\n return isFunction(size) ? size(e) : size !== undefined ? that._initialElementPosition + size - hintSize : size;\n },\n _min: function (e) {\n var that = this, size = that.options.min;\n return isFunction(size) ? size(e) : size !== undefined ? that._initialElementPosition + size : size;\n },\n _start: function (e) {\n var that = this, hint = that.options.hint, el = $(e.currentTarget);\n that._initialElementPosition = el.position()[that._position];\n that._initialMousePosition = e[that._positionMouse].startLocation;\n if (hint) {\n that.hint = isFunction(hint) ? $(hint(el)) : hint;\n that.hint.css({ position: 'absolute' }).css(that._position, that._initialElementPosition).appendTo(that.element);\n }\n that.trigger(START, e);\n that._maxPosition = that._max(e);\n that._minPosition = that._min(e);\n $(document.body).css('cursor', el.css('cursor'));\n },\n _resize: function (e) {\n var that = this, maxPosition = that._maxPosition, minPosition = that._minPosition, currentPosition = that._initialElementPosition + (e[that._positionMouse].location - that._initialMousePosition), position;\n position = minPosition !== undefined ? Math.max(minPosition, currentPosition) : currentPosition;\n that.position = position = maxPosition !== undefined ? Math.min(maxPosition, position) : position;\n if (that.hint) {\n that.hint.toggleClass(that.options.invalidClass || '', position == maxPosition || position == minPosition).css(that._position, position);\n }\n that.resizing = true;\n that.trigger(RESIZE, extend(e, { position: position }));\n },\n _stop: function (e) {\n var that = this;\n if (that.hint) {\n that.hint.remove();\n }\n that.resizing = false;\n that.trigger(RESIZEEND, extend(e, { position: that.position }));\n $(document.body).css('cursor', '');\n },\n _cancel: function (e) {\n var that = this;\n if (that.hint) {\n that.position = undefined;\n that.hint.css(that._position, that._initialElementPosition);\n that._stop(e);\n }\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n if (that.draggable) {\n that.draggable.destroy();\n }\n },\n press: function (target) {\n if (!target) {\n return;\n }\n var position = target.position(), that = this;\n that.userEvents.press(position.left, position.top, target[0]);\n that.targetPosition = position;\n that.target = target;\n },\n move: function (delta) {\n var that = this, orientation = that._position, position = that.targetPosition, current = that.position;\n if (current === undefined) {\n current = position[orientation];\n }\n position[orientation] = current + delta;\n that.userEvents.move(position.left, position.top);\n },\n end: function () {\n this.userEvents.end();\n this.target = this.position = undefined;\n }\n });\n kendo.ui.plugin(Resizable);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.sortable', ['kendo.draganddrop'], f);\n}(function () {\n var __meta__ = {\n id: 'sortable',\n name: 'Sortable',\n category: 'framework',\n depends: ['draganddrop']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, START = 'start', BEFORE_MOVE = 'beforeMove', MOVE = 'move', END = 'end', CHANGE = 'change', CANCEL = 'cancel', ACTION_SORT = 'sort', ACTION_REMOVE = 'remove', ACTION_RECEIVE = 'receive', DEFAULT_FILTER = '>*', MISSING_INDEX = -1;\n function containsOrEqualTo(parent, child) {\n try {\n return $.contains(parent, child) || parent == child;\n } catch (e) {\n return false;\n }\n }\n function defaultHint(element) {\n return element.clone();\n }\n function defaultPlaceholder(element) {\n return element.clone().removeAttr('id').css('visibility', 'hidden');\n }\n var Sortable = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n if (!that.options.placeholder) {\n that.options.placeholder = defaultPlaceholder;\n }\n if (!that.options.hint) {\n that.options.hint = defaultHint;\n }\n that.draggable = that._createDraggable();\n },\n events: [\n START,\n BEFORE_MOVE,\n MOVE,\n END,\n CHANGE,\n CANCEL\n ],\n options: {\n name: 'Sortable',\n hint: null,\n placeholder: null,\n filter: DEFAULT_FILTER,\n holdToDrag: false,\n disabled: null,\n container: null,\n connectWith: null,\n handler: null,\n cursorOffset: null,\n axis: null,\n ignore: null,\n autoScroll: false,\n cursor: 'auto',\n moveOnDragEnter: false\n },\n destroy: function () {\n this.draggable.destroy();\n Widget.fn.destroy.call(this);\n },\n _createDraggable: function () {\n var that = this, element = that.element, options = that.options;\n return new kendo.ui.Draggable(element, {\n filter: options.filter,\n hint: kendo.isFunction(options.hint) ? options.hint : $(options.hint),\n holdToDrag: options.holdToDrag,\n container: options.container ? $(options.container) : null,\n cursorOffset: options.cursorOffset,\n axis: options.axis,\n ignore: options.ignore,\n autoScroll: options.autoScroll,\n dragstart: $.proxy(that._dragstart, that),\n dragcancel: $.proxy(that._dragcancel, that),\n drag: $.proxy(that._drag, that),\n dragend: $.proxy(that._dragend, that)\n });\n },\n _dragstart: function (e) {\n var draggedElement = this.draggedElement = e.currentTarget, disabled = this.options.disabled, handler = this.options.handler, _placeholder = this.options.placeholder, placeholder = this.placeholder = kendo.isFunction(_placeholder) ? $(_placeholder.call(this, draggedElement)) : $(_placeholder);\n if (disabled && draggedElement.is(disabled)) {\n e.preventDefault();\n } else if (handler && !$(e.initialTarget).is(handler)) {\n e.preventDefault();\n } else {\n if (this.trigger(START, {\n item: draggedElement,\n draggableEvent: e\n })) {\n e.preventDefault();\n } else {\n draggedElement.css('display', 'none');\n draggedElement.before(placeholder);\n this._setCursor();\n }\n }\n },\n _dragcancel: function () {\n this._cancel();\n this.trigger(CANCEL, { item: this.draggedElement });\n this._resetCursor();\n },\n _drag: function (e) {\n var draggedElement = this.draggedElement, target = this._findTarget(e), targetCenter, cursorOffset = {\n left: e.x.location,\n top: e.y.location\n }, offsetDelta, axisDelta = {\n x: e.x.delta,\n y: e.y.delta\n }, direction, sibling, getSibling, axis = this.options.axis, moveOnDragEnter = this.options.moveOnDragEnter, eventData = {\n item: draggedElement,\n list: this,\n draggableEvent: e\n };\n if (axis === 'x' || axis === 'y') {\n this._movementByAxis(axis, cursorOffset, axisDelta[axis], eventData);\n return;\n }\n if (target) {\n targetCenter = this._getElementCenter(target.element);\n offsetDelta = {\n left: Math.round(cursorOffset.left - targetCenter.left),\n top: Math.round(cursorOffset.top - targetCenter.top)\n };\n $.extend(eventData, { target: target.element });\n if (target.appendToBottom) {\n this._movePlaceholder(target, null, eventData);\n return;\n }\n if (target.appendAfterHidden) {\n this._movePlaceholder(target, 'next', eventData);\n }\n if (this._isFloating(target.element)) {\n if (axisDelta.x < 0 && moveOnDragEnter || !moveOnDragEnter && offsetDelta.left < 0) {\n direction = 'prev';\n } else if (axisDelta.x > 0 && moveOnDragEnter || !moveOnDragEnter && offsetDelta.left > 0) {\n direction = 'next';\n }\n } else {\n if (axisDelta.y < 0 && moveOnDragEnter || !moveOnDragEnter && offsetDelta.top < 0) {\n direction = 'prev';\n } else if (axisDelta.y > 0 && moveOnDragEnter || !moveOnDragEnter && offsetDelta.top > 0) {\n direction = 'next';\n }\n }\n if (direction) {\n getSibling = direction === 'prev' ? jQuery.fn.prev : jQuery.fn.next;\n sibling = getSibling.call(target.element);\n while (sibling.length && !sibling.is(':visible')) {\n sibling = getSibling.call(sibling);\n }\n if (sibling[0] != this.placeholder[0]) {\n this._movePlaceholder(target, direction, eventData);\n }\n }\n }\n },\n _dragend: function (e) {\n var placeholder = this.placeholder, draggedElement = this.draggedElement, draggedIndex = this.indexOf(draggedElement), placeholderIndex = this.indexOf(placeholder), connectWith = this.options.connectWith, connectedList, isDefaultPrevented, eventData, connectedListEventData;\n this._resetCursor();\n eventData = {\n action: ACTION_SORT,\n item: draggedElement,\n oldIndex: draggedIndex,\n newIndex: placeholderIndex,\n draggableEvent: e\n };\n if (placeholderIndex >= 0) {\n isDefaultPrevented = this.trigger(END, eventData);\n } else {\n connectedList = placeholder.parents(connectWith).getKendoSortable();\n eventData.action = ACTION_REMOVE;\n connectedListEventData = $.extend({}, eventData, {\n action: ACTION_RECEIVE,\n oldIndex: MISSING_INDEX,\n newIndex: connectedList.indexOf(placeholder)\n });\n isDefaultPrevented = !(!this.trigger(END, eventData) && !connectedList.trigger(END, connectedListEventData));\n }\n if (isDefaultPrevented || placeholderIndex === draggedIndex) {\n this._cancel();\n return;\n }\n placeholder.replaceWith(draggedElement);\n draggedElement.show();\n this.draggable.dropped = true;\n eventData = {\n action: this.indexOf(draggedElement) != MISSING_INDEX ? ACTION_SORT : ACTION_REMOVE,\n item: draggedElement,\n oldIndex: draggedIndex,\n newIndex: this.indexOf(draggedElement),\n draggableEvent: e\n };\n this.trigger(CHANGE, eventData);\n if (connectedList) {\n connectedListEventData = $.extend({}, eventData, {\n action: ACTION_RECEIVE,\n oldIndex: MISSING_INDEX,\n newIndex: connectedList.indexOf(draggedElement)\n });\n connectedList.trigger(CHANGE, connectedListEventData);\n }\n },\n _findTarget: function (e) {\n var element = this._findElementUnderCursor(e), items, connectWith = this.options.connectWith, node;\n if ($.contains(this.element[0], element)) {\n items = this.items();\n node = items.filter(element)[0] || items.has(element)[0];\n return node ? {\n element: $(node),\n sortable: this\n } : null;\n } else if (this.element[0] == element && this._isEmpty()) {\n return {\n element: this.element,\n sortable: this,\n appendToBottom: true\n };\n } else if (this.element[0] == element && this._isLastHidden()) {\n node = this.items().eq(0);\n return {\n element: node,\n sortable: this,\n appendAfterHidden: true\n };\n } else if (connectWith) {\n return this._searchConnectedTargets(element, e);\n }\n },\n _findElementUnderCursor: function (e) {\n var elementUnderCursor = kendo.elementUnderCursor(e), draggable = e.sender;\n if (containsOrEqualTo(draggable.hint[0], elementUnderCursor)) {\n draggable.hint.hide();\n elementUnderCursor = kendo.elementUnderCursor(e);\n if (!elementUnderCursor) {\n elementUnderCursor = kendo.elementUnderCursor(e);\n }\n draggable.hint.show();\n }\n return elementUnderCursor;\n },\n _searchConnectedTargets: function (element, e) {\n var connected = $(this.options.connectWith), sortableInstance, items, node;\n for (var i = 0; i < connected.length; i++) {\n sortableInstance = connected.eq(i).getKendoSortable();\n if ($.contains(connected[i], element)) {\n if (sortableInstance) {\n items = sortableInstance.items();\n node = items.filter(element)[0] || items.has(element)[0];\n if (node) {\n sortableInstance.placeholder = this.placeholder;\n return {\n element: $(node),\n sortable: sortableInstance\n };\n } else {\n return null;\n }\n }\n } else if (connected[i] == element) {\n if (sortableInstance && sortableInstance._isEmpty()) {\n return {\n element: connected.eq(i),\n sortable: sortableInstance,\n appendToBottom: true\n };\n } else if (this._isCursorAfterLast(sortableInstance, e)) {\n node = sortableInstance.items().last();\n return {\n element: node,\n sortable: sortableInstance\n };\n }\n }\n }\n },\n _isCursorAfterLast: function (sortable, e) {\n var lastItem = sortable.items().last(), cursorOffset = {\n left: e.x.location,\n top: e.y.location\n }, lastItemOffset, delta;\n lastItemOffset = kendo.getOffset(lastItem);\n lastItemOffset.top += outerHeight(lastItem);\n lastItemOffset.left += outerWidth(lastItem);\n if (this._isFloating(lastItem)) {\n delta = lastItemOffset.left - cursorOffset.left;\n } else {\n delta = lastItemOffset.top - cursorOffset.top;\n }\n return delta < 0 ? true : false;\n },\n _movementByAxis: function (axis, cursorOffset, delta, eventData) {\n var cursorPosition = axis === 'x' ? cursorOffset.left : cursorOffset.top, target = delta < 0 ? this.placeholder.prev() : this.placeholder.next(), targetCenter;\n if (target.length && !target.is(':visible')) {\n target = delta < 0 ? target.prev() : target.next();\n }\n $.extend(eventData, { target: target });\n targetCenter = this._getElementCenter(target);\n if (targetCenter) {\n targetCenter = axis === 'x' ? targetCenter.left : targetCenter.top;\n }\n if (target.length && delta < 0 && cursorPosition - targetCenter < 0) {\n this._movePlaceholder({\n element: target,\n sortable: this\n }, 'prev', eventData);\n } else if (target.length && delta > 0 && cursorPosition - targetCenter > 0) {\n this._movePlaceholder({\n element: target,\n sortable: this\n }, 'next', eventData);\n }\n },\n _movePlaceholder: function (target, direction, eventData) {\n var placeholder = this.placeholder;\n if (!target.sortable.trigger(BEFORE_MOVE, eventData)) {\n if (!direction) {\n target.element.append(placeholder);\n } else if (direction === 'prev') {\n target.element.before(placeholder);\n } else if (direction === 'next') {\n target.element.after(placeholder);\n }\n target.sortable.trigger(MOVE, eventData);\n }\n },\n _setCursor: function () {\n var cursor = this.options.cursor, body;\n if (cursor && cursor !== 'auto') {\n body = $(document.body);\n this._originalCursorType = body.css('cursor');\n body.css({ 'cursor': cursor });\n if (!this._cursorStylesheet) {\n this._cursorStylesheet = $('<style>* { cursor: ' + cursor + ' !important; }</style>');\n }\n this._cursorStylesheet.appendTo(body);\n }\n },\n _resetCursor: function () {\n if (this._originalCursorType) {\n $(document.body).css('cursor', this._originalCursorType);\n this._originalCursorType = null;\n this._cursorStylesheet.remove();\n }\n },\n _getElementCenter: function (element) {\n var center = element.length ? kendo.getOffset(element) : null;\n if (center) {\n center.top += outerHeight(element) / 2;\n center.left += outerWidth(element) / 2;\n }\n return center;\n },\n _isFloating: function (item) {\n return /left|right/.test(item.css('float')) || /inline|table-cell/.test(item.css('display'));\n },\n _cancel: function () {\n this.draggedElement.show();\n this.placeholder.remove();\n },\n _items: function () {\n var filter = this.options.filter, items;\n if (filter) {\n items = this.element.find(filter);\n } else {\n items = this.element.children();\n }\n return items;\n },\n indexOf: function (element) {\n var items = this._items(), placeholder = this.placeholder, draggedElement = this.draggedElement;\n if (placeholder && element[0] == placeholder[0]) {\n return items.not(draggedElement).index(element);\n } else {\n return items.not(placeholder).index(element);\n }\n },\n items: function () {\n var placeholder = this.placeholder, items = this._items();\n if (placeholder) {\n items = items.not(placeholder);\n }\n return items;\n },\n _isEmpty: function () {\n return !this.items().length;\n },\n _isLastHidden: function () {\n return this.items().length === 1 && this.items().is(':hidden');\n }\n });\n kendo.ui.plugin(Sortable);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.selectable', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'selectable',\n name: 'Selectable',\n category: 'framework',\n depends: [\n 'core',\n 'userevents'\n ],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, proxy = $.proxy, abs = Math.abs, ARIASELECTED = 'aria-selected', SELECTED = 'k-state-selected', ACTIVE = 'k-state-selecting', SELECTABLE = 'k-selectable', CHANGE = 'change', NS = '.kendoSelectable', UNSELECTING = 'k-state-unselecting', INPUTSELECTOR = 'input,a,textarea,.k-multiselect-wrap,select,button,.k-button>span,.k-button>img,span.k-icon.k-i-arrow-60-down,span.k-icon.k-i-arrow-60-up', msie = kendo.support.browser.msie, supportEventDelegation = false;\n (function ($) {\n (function () {\n $('<div class=\"parent\"><span /></div>').on('click', '>*', function () {\n supportEventDelegation = true;\n }).find('span').click().end().off();\n }());\n }($));\n var Selectable = Widget.extend({\n init: function (element, options) {\n var that = this, multiple;\n Widget.fn.init.call(that, element, options);\n that._marquee = $('<div class=\\'k-marquee\\'><div class=\\'k-marquee-color\\'></div></div>');\n that._lastActive = null;\n that.element.addClass(SELECTABLE);\n that.relatedTarget = that.options.relatedTarget;\n multiple = that.options.multiple;\n if (this.options.aria && multiple) {\n that.element.attr('aria-multiselectable', true);\n }\n that.userEvents = new kendo.UserEvents(that.element, {\n global: true,\n allowSelection: true,\n filter: (!supportEventDelegation ? '.' + SELECTABLE + ' ' : '') + that.options.filter,\n tap: proxy(that._tap, that)\n });\n if (multiple) {\n that.userEvents.bind('start', proxy(that._start, that)).bind('move', proxy(that._move, that)).bind('end', proxy(that._end, that)).bind('select', proxy(that._select, that));\n }\n },\n events: [CHANGE],\n options: {\n name: 'Selectable',\n filter: '>*',\n multiple: false,\n relatedTarget: $.noop\n },\n _isElement: function (target) {\n var elements = this.element;\n var idx, length = elements.length, result = false;\n target = target[0];\n for (idx = 0; idx < length; idx++) {\n if (elements[idx] === target) {\n result = true;\n break;\n }\n }\n return result;\n },\n _tap: function (e) {\n var target = $(e.target), that = this, ctrlKey = e.event.ctrlKey || e.event.metaKey, multiple = that.options.multiple, shiftKey = multiple && e.event.shiftKey, selected, whichCode = e.event.which, buttonCode = e.event.button;\n if (!that._isElement(target.closest('.' + SELECTABLE)) || whichCode && whichCode == 3 || buttonCode && buttonCode == 2) {\n return;\n }\n if (!this._allowSelection(e.event.target)) {\n return;\n }\n selected = target.hasClass(SELECTED);\n if (!multiple || !ctrlKey) {\n that.clear();\n }\n target = target.add(that.relatedTarget(target));\n if (shiftKey) {\n that.selectRange(that._firstSelectee(), target);\n } else {\n if (selected && ctrlKey) {\n that._unselect(target);\n that._notify(CHANGE);\n } else {\n that.value(target);\n }\n that._lastActive = that._downTarget = target;\n }\n },\n _start: function (e) {\n var that = this, target = $(e.target), selected = target.hasClass(SELECTED), currentElement, ctrlKey = e.event.ctrlKey || e.event.metaKey;\n if (!this._allowSelection(e.event.target)) {\n return;\n }\n that._downTarget = target;\n if (!that._isElement(target.closest('.' + SELECTABLE))) {\n that.userEvents.cancel();\n return;\n }\n if (that.options.useAllItems) {\n that._items = that.element.find(that.options.filter);\n } else {\n currentElement = target.closest(that.element);\n that._items = currentElement.find(that.options.filter);\n }\n e.sender.capture();\n that._marquee.appendTo(document.body).css({\n left: e.x.client + 1,\n top: e.y.client + 1,\n width: 0,\n height: 0\n });\n if (!ctrlKey) {\n that.clear();\n }\n target = target.add(that.relatedTarget(target));\n if (selected) {\n that._selectElement(target, true);\n if (ctrlKey) {\n target.addClass(UNSELECTING);\n }\n }\n },\n _move: function (e) {\n var that = this, position = {\n left: e.x.startLocation > e.x.location ? e.x.location : e.x.startLocation,\n top: e.y.startLocation > e.y.location ? e.y.location : e.y.startLocation,\n width: abs(e.x.initialDelta),\n height: abs(e.y.initialDelta)\n };\n that._marquee.css(position);\n that._invalidateSelectables(position, e.event.ctrlKey || e.event.metaKey);\n e.preventDefault();\n },\n _end: function () {\n var that = this;\n that._marquee.remove();\n that._unselect(that.element.find(that.options.filter + '.' + UNSELECTING)).removeClass(UNSELECTING);\n var target = that.element.find(that.options.filter + '.' + ACTIVE);\n target = target.add(that.relatedTarget(target));\n that.value(target);\n that._lastActive = that._downTarget;\n that._items = null;\n },\n _invalidateSelectables: function (position, ctrlKey) {\n var idx, length, target = this._downTarget[0], items = this._items, related, toSelect;\n for (idx = 0, length = items.length; idx < length; idx++) {\n toSelect = items.eq(idx);\n related = toSelect.add(this.relatedTarget(toSelect));\n if (collision(toSelect, position)) {\n if (toSelect.hasClass(SELECTED)) {\n if (ctrlKey && target !== toSelect[0]) {\n related.removeClass(SELECTED).addClass(UNSELECTING);\n }\n } else if (!toSelect.hasClass(ACTIVE) && !toSelect.hasClass(UNSELECTING)) {\n related.addClass(ACTIVE);\n }\n } else {\n if (toSelect.hasClass(ACTIVE)) {\n related.removeClass(ACTIVE);\n } else if (ctrlKey && toSelect.hasClass(UNSELECTING)) {\n related.removeClass(UNSELECTING).addClass(SELECTED);\n }\n }\n }\n },\n value: function (val) {\n var that = this, selectElement = proxy(that._selectElement, that);\n if (val) {\n val.each(function () {\n selectElement(this);\n });\n that._notify(CHANGE);\n return;\n }\n return that.element.find(that.options.filter + '.' + SELECTED);\n },\n _firstSelectee: function () {\n var that = this, selected;\n if (that._lastActive !== null) {\n return that._lastActive;\n }\n selected = that.value();\n return selected.length > 0 ? selected[0] : that.element.find(that.options.filter)[0];\n },\n _selectElement: function (element, preventNotify) {\n var toSelect = $(element), isPrevented = !preventNotify && this._notify('select', { element: element });\n toSelect.removeClass(ACTIVE);\n if (!isPrevented) {\n toSelect.addClass(SELECTED);\n if (this.options.aria) {\n toSelect.attr(ARIASELECTED, true);\n }\n }\n },\n _notify: function (name, args) {\n args = args || {};\n return this.trigger(name, args);\n },\n _unselect: function (element) {\n element.removeClass(SELECTED);\n if (this.options.aria) {\n element.attr(ARIASELECTED, false);\n }\n return element;\n },\n _select: function (e) {\n if (this._allowSelection(e.event.target)) {\n if (!msie || msie && !$(kendo._activeElement()).is(INPUTSELECTOR)) {\n e.preventDefault();\n }\n }\n },\n _allowSelection: function (target) {\n if ($(target).is(INPUTSELECTOR)) {\n this.userEvents.cancel();\n this._downTarget = null;\n return false;\n }\n return true;\n },\n resetTouchEvents: function () {\n this.userEvents.cancel();\n },\n clear: function () {\n var items = this.element.find(this.options.filter + '.' + SELECTED);\n this._unselect(items);\n },\n selectRange: function (start, end) {\n var that = this, idx, tmp, items;\n that.clear();\n if (that.element.length > 1) {\n items = that.options.continuousItems();\n }\n if (!items || !items.length) {\n items = that.element.find(that.options.filter);\n }\n start = $.inArray($(start)[0], items);\n end = $.inArray($(end)[0], items);\n if (start > end) {\n tmp = start;\n start = end;\n end = tmp;\n }\n if (!that.options.useAllItems) {\n end += that.element.length - 1;\n }\n for (idx = start; idx <= end; idx++) {\n that._selectElement(items[idx]);\n }\n that._notify(CHANGE);\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.element.off(NS);\n that.userEvents.destroy();\n that._marquee = that._lastActive = that.element = that.userEvents = null;\n }\n });\n Selectable.parseOptions = function (selectable) {\n var asLowerString = typeof selectable === 'string' && selectable.toLowerCase();\n return {\n multiple: asLowerString && asLowerString.indexOf('multiple') > -1,\n cell: asLowerString && asLowerString.indexOf('cell') > -1\n };\n };\n function collision(element, position) {\n if (!element.is(':visible')) {\n return false;\n }\n var elementPosition = kendo.getOffset(element), right = position.left + position.width, bottom = position.top + position.height;\n elementPosition.right = elementPosition.left + kendo._outerWidth(element);\n elementPosition.bottom = elementPosition.top + kendo._outerHeight(element);\n return !(elementPosition.left > right || elementPosition.right < position.left || elementPosition.top > bottom || elementPosition.bottom < position.top);\n }\n kendo.ui.plugin(Selectable);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.button', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'button',\n name: 'Button',\n category: 'web',\n description: 'The Button widget displays styled buttons.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, proxy = $.proxy, keys = kendo.keys, CLICK = 'click', KBUTTON = 'k-button', KBUTTONICON = 'k-button-icon', KBUTTONICONTEXT = 'k-button-icontext', NS = '.kendoButton', DISABLED = 'disabled', DISABLEDSTATE = 'k-state-disabled', FOCUSEDSTATE = 'k-state-focused', SELECTEDSTATE = 'k-state-selected';\n var Button = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.wrapper = that.element;\n options = that.options;\n element.addClass(KBUTTON).attr('role', 'button');\n options.enable = options.enable && !element.attr(DISABLED);\n that.enable(options.enable);\n that._tabindex();\n that._graphics();\n element.on(CLICK + NS, proxy(that._click, that)).on('focus' + NS, proxy(that._focus, that)).on('blur' + NS, proxy(that._blur, that)).on('keydown' + NS, proxy(that._keydown, that)).on('keyup' + NS, proxy(that._keyup, that));\n kendo.notify(that);\n },\n destroy: function () {\n var that = this;\n that.wrapper.off(NS);\n Widget.fn.destroy.call(that);\n },\n events: [CLICK],\n options: {\n name: 'Button',\n icon: '',\n spriteCssClass: '',\n imageUrl: '',\n enable: true\n },\n _isNativeButton: function () {\n return this.element.prop('tagName').toLowerCase() == 'button';\n },\n _click: function (e) {\n if (this.options.enable) {\n if (this.trigger(CLICK, { event: e })) {\n e.preventDefault();\n }\n }\n },\n _focus: function () {\n if (this.options.enable) {\n this.element.addClass(FOCUSEDSTATE);\n }\n },\n _blur: function () {\n this.element.removeClass(FOCUSEDSTATE);\n },\n _keydown: function (e) {\n var that = this;\n if (!that._isNativeButton()) {\n if (e.keyCode == keys.ENTER || e.keyCode == keys.SPACEBAR) {\n if (e.keyCode == keys.SPACEBAR) {\n e.preventDefault();\n if (that.options.enable) {\n that.element.addClass(SELECTEDSTATE);\n }\n }\n that._click(e);\n }\n }\n },\n _keyup: function () {\n this.element.removeClass(SELECTEDSTATE);\n },\n _graphics: function () {\n var that = this, element = that.element, options = that.options, icon = options.icon, spriteCssClass = options.spriteCssClass, imageUrl = options.imageUrl, span, img, isEmpty;\n if (spriteCssClass || imageUrl || icon) {\n isEmpty = true;\n element.contents().filter(function () {\n return !$(this).hasClass('k-sprite') && !$(this).hasClass('k-icon') && !$(this).hasClass('k-image');\n }).each(function (idx, el) {\n if (el.nodeType == 1 || el.nodeType == 3 && $.trim(el.nodeValue).length > 0) {\n isEmpty = false;\n }\n });\n if (isEmpty) {\n element.addClass(KBUTTONICON);\n } else {\n element.addClass(KBUTTONICONTEXT);\n }\n }\n if (icon) {\n span = element.children('span.k-icon').first();\n if (!span[0]) {\n span = $('<span class=\"k-icon\"></span>').prependTo(element);\n }\n span.addClass('k-i-' + icon);\n } else if (spriteCssClass) {\n span = element.children('span.k-sprite').first();\n if (!span[0]) {\n span = $('<span class=\"k-sprite\"></span>').prependTo(element);\n }\n span.addClass(spriteCssClass);\n } else if (imageUrl) {\n img = element.children('img.k-image').first();\n if (!img[0]) {\n img = $('<img alt=\"icon\" class=\"k-image\" />').prependTo(element);\n }\n img.attr('src', imageUrl);\n }\n },\n enable: function (enable) {\n var that = this, element = that.element;\n if (enable === undefined) {\n enable = true;\n }\n enable = !!enable;\n that.options.enable = enable;\n element.toggleClass(DISABLEDSTATE, !enable).attr('aria-disabled', !enable).attr(DISABLED, !enable);\n try {\n element.blur();\n } catch (err) {\n }\n }\n });\n kendo.ui.plugin(Button);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.pager', ['kendo.data'], f);\n}(function () {\n var __meta__ = {\n id: 'pager',\n name: 'Pager',\n category: 'framework',\n depends: ['data'],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, proxy = $.proxy, FIRST = '.k-i-seek-w', LAST = '.k-i-seek-e', PREV = '.k-i-arrow-w', NEXT = '.k-i-arrow-e', CHANGE = 'change', NS = '.kendoPager', CLICK = 'click', KEYDOWN = 'keydown', DISABLED = 'disabled', iconTemplate = kendo.template('<a href=\"\\\\#\" aria-label=\"#=text#\" title=\"#=text#\" class=\"k-link k-pager-nav #= wrapClassName #\"><span class=\"k-icon #= className #\"></span></a>');\n function button(template, idx, text, numeric, title) {\n return template({\n idx: idx,\n text: text,\n ns: kendo.ns,\n numeric: numeric,\n title: title || ''\n });\n }\n function icon(className, text, wrapClassName) {\n return iconTemplate({\n className: className.substring(1),\n text: text,\n wrapClassName: wrapClassName || ''\n });\n }\n function update(element, selector, page, disabled) {\n element.find(selector).parent().attr(kendo.attr('page'), page).attr('tabindex', -1).toggleClass('k-state-disabled', disabled);\n }\n function first(element, page) {\n update(element, FIRST, 1, page <= 1);\n }\n function prev(element, page) {\n update(element, PREV, Math.max(1, page - 1), page <= 1);\n }\n function next(element, page, totalPages) {\n update(element, NEXT, Math.min(totalPages, page + 1), page >= totalPages);\n }\n function last(element, page, totalPages) {\n update(element, LAST, totalPages, page >= totalPages);\n }\n var Pager = Widget.extend({\n init: function (element, options) {\n var that = this, page, totalPages;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n that.dataSource = kendo.data.DataSource.create(options.dataSource);\n that.linkTemplate = kendo.template(that.options.linkTemplate);\n that.selectTemplate = kendo.template(that.options.selectTemplate);\n that.currentPageTemplate = kendo.template(that.options.currentPageTemplate);\n page = that.page();\n totalPages = that.totalPages();\n that._refreshHandler = proxy(that.refresh, that);\n that.dataSource.bind(CHANGE, that._refreshHandler);\n if (options.previousNext) {\n if (!that.element.find(FIRST).length) {\n that.element.append(icon(FIRST, options.messages.first, 'k-pager-first'));\n first(that.element, page, totalPages);\n }\n if (!that.element.find(PREV).length) {\n that.element.append(icon(PREV, options.messages.previous));\n prev(that.element, page, totalPages);\n }\n }\n if (options.numeric) {\n that.list = that.element.find('.k-pager-numbers');\n if (!that.list.length) {\n that.list = $('<ul class=\"k-pager-numbers k-reset\" />').appendTo(that.element);\n }\n }\n if (options.input) {\n if (!that.element.find('.k-pager-input').length) {\n that.element.append('<span class=\"k-pager-input k-label\">' + options.messages.page + '<input class=\"k-textbox\">' + kendo.format(options.messages.of, totalPages) + '</span>');\n }\n that.element.on(KEYDOWN + NS, '.k-pager-input input', proxy(that._keydown, that));\n }\n if (options.previousNext) {\n if (!that.element.find(NEXT).length) {\n that.element.append(icon(NEXT, options.messages.next));\n next(that.element, page, totalPages);\n }\n if (!that.element.find(LAST).length) {\n that.element.append(icon(LAST, options.messages.last, 'k-pager-last'));\n last(that.element, page, totalPages);\n }\n }\n if (options.pageSizes) {\n if (!that.element.find('.k-pager-sizes').length) {\n var pageSizes = options.pageSizes.length ? options.pageSizes : [\n 'all',\n 5,\n 10,\n 20\n ];\n var pageItems = $.map(pageSizes, function (size) {\n if (size.toLowerCase && size.toLowerCase() === 'all') {\n return '<option value=\\'all\\'>' + options.messages.allPages + '</option>';\n }\n return '<option>' + size + '</option>';\n });\n $('<span class=\"k-pager-sizes k-label\"><select/>' + options.messages.itemsPerPage + '</span>').appendTo(that.element).find('select').html(pageItems.join('')).end().appendTo(that.element);\n }\n that.element.find('.k-pager-sizes select').val(that.pageSize());\n if (kendo.ui.DropDownList) {\n that.element.find('.k-pager-sizes select').show().kendoDropDownList();\n }\n that.element.on(CHANGE + NS, '.k-pager-sizes select', proxy(that._change, that));\n }\n if (options.refresh) {\n if (!that.element.find('.k-pager-refresh').length) {\n that.element.append('<a href=\"#\" class=\"k-pager-refresh k-link\" title=\"' + options.messages.refresh + '\"><span class=\"k-icon k-i-reload\"></span></a>');\n }\n that.element.on(CLICK + NS, '.k-pager-refresh', proxy(that._refreshClick, that));\n }\n if (options.info) {\n if (!that.element.find('.k-pager-info').length) {\n that.element.append('<span class=\"k-pager-info k-label\" />');\n }\n }\n that.element.on(CLICK + NS, 'a', proxy(that._click, that)).addClass('k-pager-wrap k-widget k-floatwrap');\n that.element.on(CLICK + NS, '.k-current-page', proxy(that._toggleActive, that));\n if (options.autoBind) {\n that.refresh();\n }\n kendo.notify(that);\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.element.off(NS);\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n that._refreshHandler = null;\n kendo.destroy(that.element);\n that.element = that.list = null;\n },\n events: [CHANGE],\n options: {\n name: 'Pager',\n selectTemplate: '<li><span class=\"k-state-selected\">#=text#</span></li>',\n currentPageTemplate: '<li class=\"k-current-page\"><span class=\"k-link k-pager-nav\">#=text#</span></li>',\n linkTemplate: '<li><a tabindex=\"-1\" href=\"\\\\#\" class=\"k-link\" data-#=ns#page=\"#=idx#\" #if (title !== \"\") {# title=\"#=title#\" #}#>#=text#</a></li>',\n buttonCount: 10,\n autoBind: true,\n numeric: true,\n info: true,\n input: false,\n previousNext: true,\n pageSizes: false,\n refresh: false,\n messages: {\n allPages: 'All',\n display: '{0} - {1} of {2} items',\n empty: 'No items to display',\n page: 'Page',\n of: 'of {0}',\n itemsPerPage: 'items per page',\n first: 'Go to the first page',\n previous: 'Go to the previous page',\n next: 'Go to the next page',\n last: 'Go to the last page',\n refresh: 'Refresh',\n morePages: 'More pages'\n }\n },\n setDataSource: function (dataSource) {\n var that = this;\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n that.dataSource = that.options.dataSource = dataSource;\n dataSource.bind(CHANGE, that._refreshHandler);\n if (that.options.autoBind) {\n dataSource.fetch();\n }\n },\n refresh: function (e) {\n var that = this, idx, end, start = 1, reminder, page = that.page(), html = '', options = that.options, pageSize = that.pageSize(), total = that.dataSource.total(), totalPages = that.totalPages(), linkTemplate = that.linkTemplate, buttonCount = options.buttonCount;\n if (e && e.action == 'itemchange') {\n return;\n }\n if (options.numeric) {\n if (page > buttonCount) {\n reminder = page % buttonCount;\n start = reminder === 0 ? page - buttonCount + 1 : page - reminder + 1;\n }\n end = Math.min(start + buttonCount - 1, totalPages);\n if (start > 1) {\n html += button(linkTemplate, start - 1, '...', false, options.messages.morePages);\n }\n for (idx = start; idx <= end; idx++) {\n html += button(idx == page ? that.selectTemplate : linkTemplate, idx, idx, true);\n }\n if (end < totalPages) {\n html += button(linkTemplate, idx, '...', false, options.messages.morePages);\n }\n if (html === '') {\n html = that.selectTemplate({ text: 0 });\n }\n html = this.currentPageTemplate({ text: page }) + html;\n that.list.removeClass('k-state-expanded').html(html);\n }\n if (options.info) {\n if (total > 0) {\n html = kendo.format(options.messages.display, Math.min((page - 1) * pageSize + 1, total), Math.min(page * pageSize, total), total);\n } else {\n html = options.messages.empty;\n }\n that.element.find('.k-pager-info').html(html);\n }\n if (options.input) {\n that.element.find('.k-pager-input').html(that.options.messages.page + '<input class=\"k-textbox\">' + kendo.format(options.messages.of, totalPages)).find('input').val(page).attr(DISABLED, total < 1).toggleClass('k-state-disabled', total < 1);\n }\n if (options.previousNext) {\n first(that.element, page, totalPages);\n prev(that.element, page, totalPages);\n next(that.element, page, totalPages);\n last(that.element, page, totalPages);\n }\n if (options.pageSizes) {\n var hasAll = that.element.find('.k-pager-sizes option[value=\\'all\\']').length > 0;\n var selectAll = hasAll && pageSize === this.dataSource.total();\n var text = pageSize;\n if (selectAll) {\n pageSize = 'all';\n text = options.messages.allPages;\n }\n that.element.find('.k-pager-sizes select').val(pageSize).filter('[' + kendo.attr('role') + '=dropdownlist]').kendoDropDownList('value', pageSize).kendoDropDownList('text', text);\n }\n },\n _keydown: function (e) {\n if (e.keyCode === kendo.keys.ENTER) {\n var input = this.element.find('.k-pager-input').find('input'), page = parseInt(input.val(), 10);\n if (isNaN(page) || page < 1 || page > this.totalPages()) {\n page = this.page();\n }\n input.val(page);\n this.page(page);\n }\n },\n _refreshClick: function (e) {\n e.preventDefault();\n this.dataSource.read();\n },\n _change: function (e) {\n var value = e.currentTarget.value;\n var pageSize = parseInt(value, 10);\n var dataSource = this.dataSource;\n if (!isNaN(pageSize)) {\n dataSource.pageSize(pageSize);\n } else if ((value + '').toLowerCase() == 'all') {\n dataSource.pageSize(dataSource.total());\n }\n },\n _toggleActive: function () {\n this.list.toggleClass('k-state-expanded');\n },\n _click: function (e) {\n var target = $(e.currentTarget);\n e.preventDefault();\n if (!target.is('.k-state-disabled')) {\n this.page(target.attr(kendo.attr('page')));\n }\n },\n totalPages: function () {\n return Math.ceil((this.dataSource.total() || 0) / (this.pageSize() || 1));\n },\n pageSize: function () {\n return this.dataSource.pageSize() || this.dataSource.total();\n },\n page: function (page) {\n if (page !== undefined) {\n if (this.trigger('pageChange', { index: page })) {\n return;\n }\n this.dataSource.page(page);\n this.trigger(CHANGE, { index: page });\n } else {\n if (this.dataSource.total() > 0) {\n return this.dataSource.page();\n } else {\n return 0;\n }\n }\n }\n });\n ui.plugin(Pager);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.notification', [\n 'kendo.core',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'notification',\n name: 'Notification',\n category: 'web',\n description: 'The Notification widget displays user alerts.',\n depends: [\n 'core',\n 'popup'\n ],\n features: [{\n id: 'notification-fx',\n name: 'Animation',\n description: 'Support for animation',\n depends: ['fx']\n }]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, proxy = $.proxy, extend = $.extend, setTimeout = window.setTimeout, CLICK = 'click', SHOW = 'show', HIDE = 'hide', KNOTIFICATION = 'k-notification', KICLOSE = '.k-notification-wrap .k-i-close', KHIDING = 'k-hiding', INFO = 'info', SUCCESS = 'success', WARNING = 'warning', ERROR = 'error', TOP = 'top', LEFT = 'left', BOTTOM = 'bottom', RIGHT = 'right', UP = 'up', NS = '.kendoNotification', WRAPPER = '<div class=\"k-widget k-notification\"></div>', TEMPLATE = '<div class=\"k-notification-wrap\">' + '<span class=\"k-icon k-i-#=typeIcon#\" title=\"#=typeIcon#\"></span>' + '#=content#' + '<span class=\"k-icon k-i-close\" title=\"Hide\"></span>' + '</div>', SAFE_TEMPLATE = TEMPLATE.replace('#=content#', '#:content#');\n var Notification = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n if (!options.appendTo || !$(options.appendTo).is(element)) {\n that.element.hide();\n }\n that._compileTemplates(options.templates);\n that._guid = '_' + kendo.guid();\n that._isRtl = kendo.support.isRtl(element);\n that._compileStacking(options.stacking, options.position.top, options.position.left);\n kendo.notify(that);\n },\n events: [\n SHOW,\n HIDE\n ],\n options: {\n name: 'Notification',\n position: {\n pinned: true,\n top: null,\n left: null,\n bottom: 20,\n right: 20\n },\n stacking: 'default',\n hideOnClick: true,\n button: false,\n allowHideAfter: 0,\n autoHideAfter: 5000,\n appendTo: null,\n width: null,\n height: null,\n templates: [],\n animation: {\n open: {\n effects: 'fade:in',\n duration: 300\n },\n close: {\n effects: 'fade:out',\n duration: 600,\n hide: true\n }\n }\n },\n _compileTemplates: function (templates) {\n var that = this;\n var kendoTemplate = kendo.template;\n that._compiled = {};\n $.each(templates, function (key, value) {\n that._compiled[value.type] = kendoTemplate(value.template || $('#' + value.templateId).html());\n });\n that._defaultCompiled = kendoTemplate(TEMPLATE);\n that._safeCompiled = kendoTemplate(SAFE_TEMPLATE);\n },\n _getCompiled: function (type, safe) {\n var defaultCompiled = safe ? this._safeCompiled : this._defaultCompiled;\n return type ? this._compiled[type] || defaultCompiled : defaultCompiled;\n },\n _compileStacking: function (stacking, top, left) {\n var that = this, paddings = {\n paddingTop: 0,\n paddingRight: 0,\n paddingBottom: 0,\n paddingLeft: 0\n }, horizontalAlignment = left !== null ? LEFT : RIGHT, origin, position;\n switch (stacking) {\n case 'down':\n origin = BOTTOM + ' ' + horizontalAlignment;\n position = TOP + ' ' + horizontalAlignment;\n delete paddings.paddingBottom;\n break;\n case RIGHT:\n origin = TOP + ' ' + RIGHT;\n position = TOP + ' ' + LEFT;\n delete paddings.paddingRight;\n break;\n case LEFT:\n origin = TOP + ' ' + LEFT;\n position = TOP + ' ' + RIGHT;\n delete paddings.paddingLeft;\n break;\n case UP:\n origin = TOP + ' ' + horizontalAlignment;\n position = BOTTOM + ' ' + horizontalAlignment;\n delete paddings.paddingTop;\n break;\n default:\n if (top !== null) {\n origin = BOTTOM + ' ' + horizontalAlignment;\n position = TOP + ' ' + horizontalAlignment;\n delete paddings.paddingBottom;\n } else {\n origin = TOP + ' ' + horizontalAlignment;\n position = BOTTOM + ' ' + horizontalAlignment;\n delete paddings.paddingTop;\n }\n break;\n }\n that._popupOrigin = origin;\n that._popupPosition = position;\n that._popupPaddings = paddings;\n },\n _attachPopupEvents: function (options, popup) {\n var that = this, allowHideAfter = options.allowHideAfter, attachDelay = !isNaN(allowHideAfter) && allowHideAfter > 0, closeIcon;\n function attachClick(target) {\n target.on(CLICK + NS, function () {\n that._hidePopup(popup);\n });\n }\n if (options.hideOnClick) {\n popup.bind('activate', function () {\n if (attachDelay) {\n setTimeout(function () {\n attachClick(popup.element);\n }, allowHideAfter);\n } else {\n attachClick(popup.element);\n }\n });\n } else if (options.button) {\n closeIcon = popup.element.find(KICLOSE);\n if (attachDelay) {\n setTimeout(function () {\n attachClick(closeIcon);\n }, allowHideAfter);\n } else {\n attachClick(closeIcon);\n }\n }\n },\n _showPopup: function (wrapper, options) {\n var that = this, autoHideAfter = options.autoHideAfter, x = options.position.left, y = options.position.top, popup, openPopup;\n openPopup = $('.' + that._guid + ':not(.' + KHIDING + ')').last();\n popup = new kendo.ui.Popup(wrapper, {\n anchor: openPopup[0] ? openPopup : document.body,\n origin: that._popupOrigin,\n position: that._popupPosition,\n animation: options.animation,\n modal: true,\n collision: '',\n isRtl: that._isRtl,\n close: function () {\n that._triggerHide(this.element);\n },\n deactivate: function (e) {\n e.sender.element.off(NS);\n e.sender.element.find(KICLOSE).off(NS);\n e.sender.destroy();\n }\n });\n that._attachPopupEvents(options, popup);\n if (openPopup[0]) {\n popup.open();\n } else {\n if (x === null) {\n x = $(window).width() - wrapper.width() - options.position.right;\n }\n if (y === null) {\n y = $(window).height() - wrapper.height() - options.position.bottom;\n }\n popup.open(x, y);\n }\n popup.wrapper.addClass(that._guid).css(extend({\n margin: 0,\n zIndex: 10050\n }, that._popupPaddings));\n if (options.position.pinned) {\n popup.wrapper.css('position', 'fixed');\n if (openPopup[0]) {\n that._togglePin(popup.wrapper, true);\n }\n } else if (!openPopup[0]) {\n that._togglePin(popup.wrapper, false);\n }\n if (autoHideAfter > 0) {\n setTimeout(function () {\n that._hidePopup(popup);\n }, autoHideAfter);\n }\n },\n _hidePopup: function (popup) {\n popup.wrapper.addClass(KHIDING);\n popup.close();\n },\n _togglePin: function (wrapper, pin) {\n var win = $(window), sign = pin ? -1 : 1;\n wrapper.css({\n top: parseInt(wrapper.css(TOP), 10) + sign * win.scrollTop(),\n left: parseInt(wrapper.css(LEFT), 10) + sign * win.scrollLeft()\n });\n },\n _attachStaticEvents: function (options, wrapper) {\n var that = this, allowHideAfter = options.allowHideAfter, attachDelay = !isNaN(allowHideAfter) && allowHideAfter > 0;\n function attachClick(target) {\n target.on(CLICK + NS, proxy(that._hideStatic, that, wrapper));\n }\n if (options.hideOnClick) {\n if (attachDelay) {\n setTimeout(function () {\n attachClick(wrapper);\n }, allowHideAfter);\n } else {\n attachClick(wrapper);\n }\n } else if (options.button) {\n if (attachDelay) {\n setTimeout(function () {\n attachClick(wrapper.find(KICLOSE));\n }, allowHideAfter);\n } else {\n attachClick(wrapper.find(KICLOSE));\n }\n }\n },\n _showStatic: function (wrapper, options) {\n var that = this, autoHideAfter = options.autoHideAfter, animation = options.animation, insertionMethod = options.stacking == UP || options.stacking == LEFT ? 'prependTo' : 'appendTo';\n wrapper.addClass(that._guid)[insertionMethod](options.appendTo).hide().kendoAnimate(animation.open || false);\n that._attachStaticEvents(options, wrapper);\n if (autoHideAfter > 0) {\n setTimeout(function () {\n that._hideStatic(wrapper);\n }, autoHideAfter);\n }\n },\n _hideStatic: function (wrapper) {\n wrapper.kendoAnimate(extend(this.options.animation.close || false, {\n complete: function () {\n wrapper.off(NS).find(KICLOSE).off(NS);\n wrapper.remove();\n }\n }));\n this._triggerHide(wrapper);\n },\n _triggerHide: function (element) {\n this.trigger(HIDE, { element: element });\n this.angular('cleanup', function () {\n return { elements: element };\n });\n },\n show: function (content, type, safe) {\n var that = this, options = that.options, wrapper = $(WRAPPER), args, defaultArgs;\n if (!type) {\n type = INFO;\n }\n if (content !== null && content !== undefined && content !== '') {\n if (kendo.isFunction(content)) {\n content = content();\n }\n defaultArgs = {\n typeIcon: type,\n content: ''\n };\n if ($.isPlainObject(content)) {\n args = extend(defaultArgs, content);\n } else {\n args = extend(defaultArgs, { content: content });\n }\n wrapper.addClass(KNOTIFICATION + '-' + type).toggleClass(KNOTIFICATION + '-button', options.button).attr('data-role', 'alert').css({\n width: options.width,\n height: options.height\n }).append(that._getCompiled(type, safe)(args));\n that.angular('compile', function () {\n return {\n elements: wrapper,\n data: [{ dataItem: args }]\n };\n });\n if ($(options.appendTo)[0]) {\n that._showStatic(wrapper, options);\n } else {\n that._showPopup(wrapper, options);\n }\n that.trigger(SHOW, { element: wrapper });\n }\n return that;\n },\n showText: function (content, type) {\n this.show(content, type, true);\n },\n info: function (content) {\n return this.show(content, INFO);\n },\n success: function (content) {\n return this.show(content, SUCCESS);\n },\n warning: function (content) {\n return this.show(content, WARNING);\n },\n error: function (content) {\n return this.show(content, ERROR);\n },\n hide: function () {\n var that = this, openedNotifications = that.getNotifications();\n if (that.options.appendTo) {\n openedNotifications.each(function (idx, element) {\n that._hideStatic($(element));\n });\n } else {\n openedNotifications.each(function (idx, element) {\n var popup = $(element).data('kendoPopup');\n if (popup) {\n that._hidePopup(popup);\n }\n });\n }\n return that;\n },\n getNotifications: function () {\n var that = this, guidElements = $('.' + that._guid + ':not(.' + KHIDING + ')');\n if (that.options.appendTo) {\n return guidElements;\n } else {\n return guidElements.children('.' + KNOTIFICATION);\n }\n },\n setOptions: function (newOptions) {\n var that = this, options;\n Widget.fn.setOptions.call(that, newOptions);\n options = that.options;\n if (newOptions.templates !== undefined) {\n that._compileTemplates(options.templates);\n }\n if (newOptions.stacking !== undefined || newOptions.position !== undefined) {\n that._compileStacking(options.stacking, options.position.top, options.position.left);\n }\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.getNotifications().off(NS).find(KICLOSE).off(NS);\n }\n });\n kendo.ui.plugin(Notification);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.tooltip', [\n 'kendo.core',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'tooltip',\n name: 'Tooltip',\n category: 'web',\n description: 'The Tooltip widget displays a popup hint for a given html element.',\n depends: [\n 'core',\n 'popup'\n ],\n features: [{\n id: 'tooltip-fx',\n name: 'Animation',\n description: 'Support for animation',\n depends: ['fx']\n }]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, Popup = kendo.ui.Popup, isFunction = kendo.isFunction, isPlainObject = $.isPlainObject, extend = $.extend, proxy = $.proxy, DOCUMENT = $(document), isLocalUrl = kendo.isLocalUrl, ARIAIDSUFFIX = '_tt_active', DESCRIBEDBY = 'aria-describedby', SHOW = 'show', HIDE = 'hide', ERROR = 'error', CONTENTLOAD = 'contentLoad', REQUESTSTART = 'requestStart', KCONTENTFRAME = 'k-content-frame', TEMPLATE = '<div role=\"tooltip\" class=\"k-widget k-tooltip#if (!autoHide) {# k-tooltip-closable#}#\">#if (!autoHide) {# <div class=\"k-tooltip-button\"><a href=\"\\\\#\" class=\"k-icon k-i-close\" title=\"Close\"></a></div> #}#' + '<div class=\"k-tooltip-content\"></div>' + '#if (callout){ #<div class=\"k-callout k-callout-#=dir#\"></div>#}#' + '</div>', IFRAMETEMPLATE = kendo.template('<iframe frameborder=\\'0\\' class=\\'' + KCONTENTFRAME + '\\' ' + 'src=\\'#= content.url #\\'>' + 'This page requires frames in order to show content' + '</iframe>'), NS = '.kendoTooltip', POSITIONS = {\n bottom: {\n origin: 'bottom center',\n position: 'top center'\n },\n top: {\n origin: 'top center',\n position: 'bottom center'\n },\n left: {\n origin: 'center left',\n position: 'center right',\n collision: 'fit flip'\n },\n right: {\n origin: 'center right',\n position: 'center left',\n collision: 'fit flip'\n },\n center: {\n position: 'center center',\n origin: 'center center'\n }\n }, REVERSE = {\n 'top': 'bottom',\n 'bottom': 'top',\n 'left': 'right',\n 'right': 'left',\n 'center': 'center'\n }, DIRCLASSES = {\n bottom: 'n',\n top: 's',\n left: 'e',\n right: 'w',\n center: 'n'\n }, DIMENSIONS = {\n 'horizontal': {\n offset: 'top',\n size: 'outerHeight'\n },\n 'vertical': {\n offset: 'left',\n size: 'outerWidth'\n }\n }, DEFAULTCONTENT = function (e) {\n return e.target.data(kendo.ns + 'title');\n };\n function restoreTitle(element) {\n while (element.length) {\n restoreTitleAttributeForElement(element);\n element = element.parent();\n }\n }\n function restoreTitleAttributeForElement(element) {\n var title = element.data(kendo.ns + 'title');\n if (title) {\n element.attr('title', title);\n element.removeData(kendo.ns + 'title');\n }\n }\n function saveTitleAttributeForElement(element) {\n var title = element.attr('title');\n if (title) {\n element.data(kendo.ns + 'title', title);\n element.attr('title', '');\n }\n }\n function saveTitleAttributes(element) {\n while (element.length && !element.is('body')) {\n saveTitleAttributeForElement(element);\n element = element.parent();\n }\n }\n var Tooltip = Widget.extend({\n init: function (element, options) {\n var that = this, axis;\n Widget.fn.init.call(that, element, options);\n axis = that.options.position.match(/left|right/) ? 'horizontal' : 'vertical';\n that.dimensions = DIMENSIONS[axis];\n that._documentKeyDownHandler = proxy(that._documentKeyDown, that);\n that.element.on(that.options.showOn + NS, that.options.filter, proxy(that._showOn, that)).on('mouseenter' + NS, that.options.filter, proxy(that._mouseenter, that));\n if (this.options.autoHide) {\n that.element.on('mouseleave' + NS, that.options.filter, proxy(that._mouseleave, that));\n }\n },\n options: {\n name: 'Tooltip',\n filter: '',\n content: DEFAULTCONTENT,\n showAfter: 100,\n callout: true,\n position: 'bottom',\n showOn: 'mouseenter',\n autoHide: true,\n width: null,\n height: null,\n animation: {\n open: {\n effects: 'fade:in',\n duration: 0\n },\n close: {\n effects: 'fade:out',\n duration: 40,\n hide: true\n }\n }\n },\n events: [\n SHOW,\n HIDE,\n CONTENTLOAD,\n ERROR,\n REQUESTSTART\n ],\n _mouseenter: function (e) {\n saveTitleAttributes($(e.currentTarget));\n },\n _showOn: function (e) {\n var that = this;\n var currentTarget = $(e.currentTarget);\n if (that.options.showOn && that.options.showOn.match(/click|focus/)) {\n that._show(currentTarget);\n } else {\n clearTimeout(that.timeout);\n that.timeout = setTimeout(function () {\n that._show(currentTarget);\n }, that.options.showAfter);\n }\n },\n _appendContent: function (target) {\n var that = this, contentOptions = that.options.content, element = that.content, showIframe = that.options.iframe, iframe;\n if (isPlainObject(contentOptions) && contentOptions.url) {\n if (!('iframe' in that.options)) {\n showIframe = !isLocalUrl(contentOptions.url);\n }\n that.trigger(REQUESTSTART, {\n options: contentOptions,\n target: target\n });\n if (!showIframe) {\n element.empty();\n kendo.ui.progress(element, true);\n that._ajaxRequest(contentOptions);\n } else {\n element.hide();\n iframe = element.find('.' + KCONTENTFRAME)[0];\n if (iframe) {\n iframe.src = contentOptions.url || iframe.src;\n } else {\n element.html(IFRAMETEMPLATE({ content: contentOptions }));\n }\n element.find('.' + KCONTENTFRAME).off('load' + NS).on('load' + NS, function () {\n that.trigger(CONTENTLOAD);\n element.show();\n });\n }\n } else if (contentOptions && isFunction(contentOptions)) {\n contentOptions = contentOptions({\n sender: this,\n target: target\n });\n element.html(contentOptions || '');\n } else {\n element.html(contentOptions);\n }\n that.angular('compile', function () {\n return { elements: element };\n });\n },\n _ajaxRequest: function (options) {\n var that = this;\n jQuery.ajax(extend({\n type: 'GET',\n dataType: 'html',\n cache: false,\n error: function (xhr, status) {\n kendo.ui.progress(that.content, false);\n that.trigger(ERROR, {\n status: status,\n xhr: xhr\n });\n },\n success: proxy(function (data) {\n kendo.ui.progress(that.content, false);\n that.content.html(data);\n that.trigger(CONTENTLOAD);\n }, that)\n }, options));\n },\n _documentKeyDown: function (e) {\n if (e.keyCode === kendo.keys.ESC) {\n this.hide();\n }\n },\n refresh: function () {\n var that = this, popup = that.popup;\n if (popup && popup.options.anchor) {\n that._appendContent(popup.options.anchor);\n }\n },\n hide: function () {\n if (this.popup) {\n this.popup.close();\n }\n },\n show: function (target) {\n target = target || this.element;\n saveTitleAttributes(target);\n this._show(target);\n },\n _show: function (target) {\n var that = this, current = that.target();\n if (!that.popup) {\n that._initPopup();\n }\n if (current && current[0] != target[0]) {\n that.popup.close();\n that.popup.element.kendoStop(true, true);\n }\n if (!current || current[0] != target[0]) {\n that._appendContent(target);\n that.popup.options.anchor = target;\n }\n that.popup.one('deactivate', function () {\n restoreTitle(target);\n target.removeAttr(DESCRIBEDBY);\n this.element.removeAttr('id').attr('aria-hidden', true);\n DOCUMENT.off('keydown' + NS, that._documentKeyDownHandler);\n });\n that.popup.open();\n },\n _initPopup: function () {\n var that = this, options = that.options, wrapper = $(kendo.template(TEMPLATE)({\n callout: options.callout && options.position !== 'center',\n dir: DIRCLASSES[options.position],\n autoHide: options.autoHide\n }));\n that.popup = new Popup(wrapper, extend({\n activate: function () {\n var anchor = this.options.anchor, ariaId = anchor[0].id || that.element[0].id;\n if (ariaId) {\n anchor.attr(DESCRIBEDBY, ariaId + ARIAIDSUFFIX);\n this.element.attr('id', ariaId + ARIAIDSUFFIX);\n }\n if (options.callout) {\n that._positionCallout();\n }\n this.element.removeAttr('aria-hidden');\n DOCUMENT.on('keydown' + NS, that._documentKeyDownHandler);\n that.trigger(SHOW);\n },\n close: function () {\n that.trigger(HIDE);\n },\n copyAnchorStyles: false,\n animation: options.animation\n }, POSITIONS[options.position]));\n wrapper.css({\n width: options.width,\n height: options.height\n });\n that.content = wrapper.find('.k-tooltip-content');\n that.arrow = wrapper.find('.k-callout');\n if (options.autoHide) {\n wrapper.on('mouseleave' + NS, proxy(that._mouseleave, that));\n } else {\n wrapper.on('click' + NS, '.k-tooltip-button', proxy(that._closeButtonClick, that));\n }\n },\n _closeButtonClick: function (e) {\n e.preventDefault();\n this.hide();\n },\n _mouseleave: function (e) {\n if (this.popup) {\n var element = $(e.currentTarget), offset = element.offset(), pageX = e.pageX, pageY = e.pageY;\n offset.right = offset.left + kendo._outerWidth(element);\n offset.bottom = offset.top + kendo._outerHeight(element);\n if (pageX > offset.left && pageX < offset.right && pageY > offset.top && pageY < offset.bottom) {\n return;\n }\n this.popup.close();\n } else {\n restoreTitle($(e.currentTarget));\n }\n clearTimeout(this.timeout);\n },\n _positionCallout: function () {\n var that = this, position = that.options.position, dimensions = that.dimensions, offset = dimensions.offset, popup = that.popup, anchor = popup.options.anchor, anchorOffset = $(anchor).offset(), arrowBorder = parseInt(that.arrow.css('border-top-width'), 10), elementOffset = $(popup.element).offset(), cssClass = DIRCLASSES[popup.flipped ? REVERSE[position] : position], offsetAmount = anchorOffset[offset] - elementOffset[offset] + $(anchor)[dimensions.size]() / 2 - arrowBorder;\n that.arrow.removeClass('k-callout-n k-callout-s k-callout-w k-callout-e').addClass('k-callout-' + cssClass).css(offset, offsetAmount);\n },\n target: function () {\n if (this.popup) {\n return this.popup.options.anchor;\n }\n return null;\n },\n destroy: function () {\n var popup = this.popup;\n if (popup) {\n popup.element.off(NS);\n popup.destroy();\n }\n clearTimeout(this.timeout);\n this.element.off(NS);\n DOCUMENT.off('keydown' + NS, this._documentKeyDownHandler);\n Widget.fn.destroy.call(this);\n }\n });\n kendo.ui.plugin(Tooltip);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.list', [\n 'kendo.data',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'list',\n name: 'List',\n category: 'framework',\n depends: [\n 'data',\n 'popup'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, Widget = ui.Widget, keys = kendo.keys, support = kendo.support, htmlEncode = kendo.htmlEncode, activeElement = kendo._activeElement, ObservableArray = kendo.data.ObservableArray, ID = 'id', CHANGE = 'change', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', LOADING = 'k-i-loading', HIDDENCLASS = 'k-loading-hidden', OPEN = 'open', CLOSE = 'close', CASCADE = 'cascade', SELECT = 'select', SELECTED = 'selected', REQUESTSTART = 'requestStart', REQUESTEND = 'requestEnd', WIDTH = 'width', extend = $.extend, proxy = $.proxy, isArray = $.isArray, browser = support.browser, isIE = browser.msie, isIE8 = isIE && browser.version < 9, quotRegExp = /\"/g, alternativeNames = {\n 'ComboBox': 'DropDownList',\n 'DropDownList': 'ComboBox'\n };\n var List = kendo.ui.DataBoundWidget.extend({\n init: function (element, options) {\n var that = this, ns = that.ns, id;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n that._isSelect = element.is(SELECT);\n if (that._isSelect && that.element[0].length) {\n if (!options.dataSource) {\n options.dataTextField = options.dataTextField || 'text';\n options.dataValueField = options.dataValueField || 'value';\n }\n }\n that.ul = $('<ul unselectable=\"on\" class=\"k-list k-reset\"/>').attr({\n tabIndex: -1,\n 'aria-hidden': true\n });\n that.list = $('<div class=\\'k-list-container\\'/>').append(that.ul).on('mousedown' + ns, proxy(that._listMousedown, that));\n id = element.attr(ID);\n if (id) {\n that.list.attr(ID, id + '-list');\n that.ul.attr(ID, id + '_listbox');\n }\n that._header();\n that._noData();\n that._footer();\n that._accessors();\n that._initValue();\n },\n options: {\n valuePrimitive: false,\n footerTemplate: '',\n headerTemplate: '',\n noDataTemplate: 'No data found.'\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n if (options && options.enable !== undefined) {\n options.enabled = options.enable;\n }\n this._header();\n this._noData();\n this._footer();\n this._renderFooter();\n this._renderNoData();\n },\n focus: function () {\n this._focused.focus();\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n _listOptions: function (options) {\n var that = this;\n var currentOptions = that.options;\n var virtual = currentOptions.virtual;\n var listBoundHandler = proxy(that._listBound, that);\n virtual = typeof virtual === 'object' ? virtual : {};\n options = $.extend({\n autoBind: false,\n selectable: true,\n dataSource: that.dataSource,\n click: proxy(that._click, that),\n change: proxy(that._listChange, that),\n activate: proxy(that._activateItem, that),\n deactivate: proxy(that._deactivateItem, that),\n dataBinding: function () {\n that.trigger('dataBinding');\n },\n dataBound: listBoundHandler,\n height: currentOptions.height,\n dataValueField: currentOptions.dataValueField,\n dataTextField: currentOptions.dataTextField,\n groupTemplate: currentOptions.groupTemplate,\n fixedGroupTemplate: currentOptions.fixedGroupTemplate,\n template: currentOptions.template\n }, options, virtual);\n if (!options.template) {\n options.template = '#:' + kendo.expr(options.dataTextField, 'data') + '#';\n }\n if (currentOptions.$angular) {\n options.$angular = currentOptions.$angular;\n }\n return options;\n },\n _initList: function () {\n var that = this;\n var listOptions = that._listOptions({ selectedItemChange: proxy(that._listChange, that) });\n if (!that.options.virtual) {\n that.listView = new kendo.ui.StaticList(that.ul, listOptions);\n } else {\n that.listView = new kendo.ui.VirtualList(that.ul, listOptions);\n }\n that.listView.bind('listBound', proxy(that._listBound, that));\n that._setListValue();\n },\n _setListValue: function (value) {\n value = value || this.options.value;\n if (value !== undefined) {\n this.listView.value(value).done(proxy(this._updateSelectionState, this));\n }\n },\n _updateSelectionState: $.noop,\n _listMousedown: function (e) {\n if (!this.filterInput || this.filterInput[0] !== e.target) {\n e.preventDefault();\n }\n },\n _isFilterEnabled: function () {\n var filter = this.options.filter;\n return filter && filter !== 'none';\n },\n _hideClear: function () {\n var that = this;\n if (that._clear) {\n this._clear.addClass(HIDDENCLASS);\n }\n },\n _showClear: function () {\n var that = this;\n if (that._clear) {\n this._clear.removeClass(HIDDENCLASS);\n }\n },\n _clearValue: function () {\n this._clearText();\n this._accessor('');\n this.listView.value([]);\n if (this._isFilterEnabled()) {\n this._filter({\n word: '',\n open: false\n });\n }\n this._change();\n },\n _clearText: function () {\n this.text('');\n },\n _clearFilter: function () {\n if (!this.options.virtual) {\n this.listView.bound(false);\n }\n this._filterSource();\n },\n _filterSource: function (filter, force) {\n var that = this;\n var options = that.options;\n var dataSource = that.dataSource;\n var expression = extend({}, dataSource.filter() || {});\n var resetPageSettings = filter || expression.filters && expression.filters.length && !filter;\n var removed = removeFiltersForField(expression, options.dataTextField);\n if ((filter || removed) && that.trigger('filtering', { filter: filter })) {\n return;\n }\n var newExpression = {\n filters: [],\n logic: 'and'\n };\n if (isValidFilterExpr(filter)) {\n newExpression.filters.push(filter);\n }\n if (isValidFilterExpr(expression)) {\n newExpression.filters.push(expression);\n }\n if (that._cascading) {\n this.listView.setDSFilter(newExpression);\n }\n var dataSourceState = extend({}, {\n page: resetPageSettings ? 1 : dataSource.page(),\n pageSize: resetPageSettings ? dataSource.options.pageSize : dataSource.pageSize(),\n sort: dataSource.sort(),\n filter: dataSource.filter(),\n group: dataSource.group(),\n aggregate: dataSource.aggregate()\n }, { filter: newExpression });\n dataSource[force ? 'read' : 'query'](dataSource._mergeState(dataSourceState));\n },\n _angularElement: function (element, action) {\n if (!element) {\n return;\n }\n this.angular(action, function () {\n return { elements: element };\n });\n },\n _noData: function () {\n var noData = $(this.noData);\n var template = this.options.noDataTemplate;\n this.angular('cleanup', function () {\n return { elements: noData };\n });\n kendo.destroy(noData);\n noData.remove();\n if (!template) {\n this.noData = null;\n return;\n }\n this.noData = $('<div class=\"k-nodata\" style=\"display:none\"><div></div></div>').appendTo(this.list);\n this.noDataTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n },\n _renderNoData: function () {\n var noData = this.noData;\n if (!noData) {\n return;\n }\n this._angularElement(noData, 'cleanup');\n noData.children(':first').html(this.noDataTemplate({ instance: this }));\n this._angularElement(noData, 'compile');\n },\n _toggleNoData: function (show) {\n $(this.noData).toggle(show);\n },\n _footer: function () {\n var footer = $(this.footer);\n var template = this.options.footerTemplate;\n this._angularElement(footer, 'cleanup');\n kendo.destroy(footer);\n footer.remove();\n if (!template) {\n this.footer = null;\n return;\n }\n this.footer = $('<div class=\"k-footer\"></div>').appendTo(this.list);\n this.footerTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n },\n _renderFooter: function () {\n var footer = this.footer;\n if (!footer) {\n return;\n }\n this._angularElement(footer, 'cleanup');\n footer.html(this.footerTemplate({ instance: this }));\n this._angularElement(footer, 'compile');\n },\n _header: function () {\n var header = $(this.header);\n var template = this.options.headerTemplate;\n this._angularElement(header, 'cleanup');\n kendo.destroy(header);\n header.remove();\n if (!template) {\n this.header = null;\n return;\n }\n var headerTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n header = $(headerTemplate({}));\n this.header = header[0] ? header : null;\n this.list.prepend(header);\n this._angularElement(this.header, 'compile');\n },\n _allowOpening: function () {\n return this.options.noDataTemplate || this.dataSource.flatView().length;\n },\n _initValue: function () {\n var that = this, value = that.options.value;\n if (value !== null) {\n that.element.val(value);\n } else {\n value = that._accessor();\n that.options.value = value;\n }\n that._old = value;\n },\n _ignoreCase: function () {\n var that = this, model = that.dataSource.reader.model, field;\n if (model && model.fields) {\n field = model.fields[that.options.dataTextField];\n if (field && field.type && field.type !== 'string') {\n that.options.ignoreCase = false;\n }\n }\n },\n _focus: function (candidate) {\n return this.listView.focus(candidate);\n },\n _filter: function (options) {\n var that = this;\n var widgetOptions = that.options;\n var ignoreCase = widgetOptions.ignoreCase;\n var field = widgetOptions.dataTextField;\n var expression = {\n value: ignoreCase ? options.word.toLowerCase() : options.word,\n field: field,\n operator: widgetOptions.filter,\n ignoreCase: ignoreCase\n };\n that._open = options.open;\n that._filterSource(expression);\n },\n search: function (word) {\n var options = this.options;\n word = typeof word === 'string' ? word : this._inputValue();\n clearTimeout(this._typingTimeout);\n if (!options.enforceMinLength && !word.length || word.length >= options.minLength) {\n this._state = 'filter';\n if (!this._isFilterEnabled()) {\n this._searchByWord(word);\n } else {\n this._filter({\n word: word,\n open: true\n });\n }\n }\n },\n current: function (candidate) {\n return this._focus(candidate);\n },\n items: function () {\n return this.ul[0].children;\n },\n destroy: function () {\n var that = this;\n var ns = that.ns;\n Widget.fn.destroy.call(that);\n that._unbindDataSource();\n that.listView.destroy();\n that.list.off(ns);\n that.popup.destroy();\n if (that._form) {\n that._form.off('reset', that._resetHandler);\n }\n },\n dataItem: function (index) {\n var that = this;\n if (index === undefined) {\n return that.listView.selectedDataItems()[0];\n }\n if (typeof index !== 'number') {\n if (that.options.virtual) {\n return that.dataSource.getByUid($(index).data('uid'));\n }\n index = $(that.items()).index(index);\n }\n return that.dataSource.flatView()[index];\n },\n _activateItem: function () {\n var current = this.listView.focus();\n if (current) {\n this._focused.add(this.filterInput).attr('aria-activedescendant', current.attr('id'));\n }\n },\n _deactivateItem: function () {\n this._focused.add(this.filterInput).removeAttr('aria-activedescendant');\n },\n _accessors: function () {\n var that = this;\n var element = that.element;\n var options = that.options;\n var getter = kendo.getter;\n var textField = element.attr(kendo.attr('text-field'));\n var valueField = element.attr(kendo.attr('value-field'));\n if (!options.dataTextField && textField) {\n options.dataTextField = textField;\n }\n if (!options.dataValueField && valueField) {\n options.dataValueField = valueField;\n }\n that._text = getter(options.dataTextField);\n that._value = getter(options.dataValueField);\n },\n _aria: function (id) {\n var that = this, options = that.options, element = that._focused.add(that.filterInput);\n if (options.suggest !== undefined) {\n element.attr('aria-autocomplete', options.suggest ? 'both' : 'list');\n }\n id = id ? id + ' ' + that.ul[0].id : that.ul[0].id;\n element.attr('aria-owns', id);\n that.ul.attr('aria-live', !that._isFilterEnabled() ? 'off' : 'polite');\n },\n _blur: function () {\n var that = this;\n that._change();\n that.close();\n },\n _change: function () {\n var that = this;\n var index = that.selectedIndex;\n var optionValue = that.options.value;\n var value = that.value();\n var trigger;\n if (that._isSelect && !that.listView.bound() && optionValue) {\n value = optionValue;\n }\n if (value !== unifyType(that._old, typeof value)) {\n trigger = true;\n } else if (index !== undefined && index !== that._oldIndex) {\n trigger = true;\n }\n if (trigger) {\n that._old = value;\n that._oldIndex = index;\n if (!that._typing) {\n that.element.trigger(CHANGE);\n }\n that.trigger(CHANGE);\n }\n that.typing = false;\n },\n _data: function () {\n return this.dataSource.view();\n },\n _enable: function () {\n var that = this, options = that.options, disabled = that.element.is('[disabled]');\n if (options.enable !== undefined) {\n options.enabled = options.enable;\n }\n if (!options.enabled || disabled) {\n that.enable(false);\n } else {\n that.readonly(that.element.is('[readonly]'));\n }\n },\n _dataValue: function (dataItem) {\n var value = this._value(dataItem);\n if (value === undefined) {\n value = this._text(dataItem);\n }\n return value;\n },\n _offsetHeight: function () {\n var offsetHeight = 0;\n var siblings = this.listView.content.prevAll(':visible');\n siblings.each(function () {\n var element = $(this);\n if (element.hasClass('k-list-filter')) {\n offsetHeight += outerHeight(element.children());\n } else {\n offsetHeight += outerHeight(element);\n }\n });\n return offsetHeight;\n },\n _height: function (length) {\n var that = this;\n var list = that.list;\n var height = that.options.height;\n var visible = that.popup.visible();\n var offsetTop;\n var popups;\n var footerHeight;\n if (length || that.options.noDataTemplate) {\n popups = list.add(list.parent('.k-animation-container')).show();\n if (!list.is(':visible')) {\n popups.hide();\n return;\n }\n height = that.listView.content[0].scrollHeight > height ? height : 'auto';\n popups.height(height);\n if (height !== 'auto') {\n offsetTop = that._offsetHeight();\n footerHeight = outerHeight($(that.footer)) || 0;\n height = height - offsetTop - footerHeight;\n }\n that.listView.content.height(height);\n if (!visible) {\n popups.hide();\n }\n }\n return height;\n },\n _adjustListWidth: function () {\n var list = this.list, width = list[0].style.width, wrapper = this.wrapper, computedStyle, computedWidth;\n if (!list.data(WIDTH) && width) {\n return;\n }\n computedStyle = window.getComputedStyle ? window.getComputedStyle(wrapper[0], null) : 0;\n computedWidth = parseFloat(computedStyle && computedStyle.width) || outerWidth(wrapper);\n if (computedStyle && browser.msie) {\n computedWidth += parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight) + parseFloat(computedStyle.borderLeftWidth) + parseFloat(computedStyle.borderRightWidth);\n }\n if (list.css('box-sizing') !== 'border-box') {\n width = computedWidth - (outerWidth(list) - list.width());\n } else {\n width = computedWidth;\n }\n list.css({\n fontFamily: wrapper.css('font-family'),\n width: this.options.autoWidth ? 'auto' : width,\n minWidth: width\n }).data(WIDTH, width);\n return true;\n },\n _openHandler: function (e) {\n this._adjustListWidth();\n if (this.trigger(OPEN)) {\n e.preventDefault();\n } else {\n this._focused.attr('aria-expanded', true);\n this.ul.attr('aria-hidden', false);\n }\n },\n _closeHandler: function (e) {\n if (this.trigger(CLOSE)) {\n e.preventDefault();\n } else {\n this._focused.attr('aria-expanded', false);\n this.ul.attr('aria-hidden', true);\n }\n },\n _focusItem: function () {\n var listView = this.listView;\n var noFocusedItem = !listView.focus();\n var index = last(listView.select());\n if (index === undefined && this.options.highlightFirst && noFocusedItem) {\n index = 0;\n }\n if (index !== undefined) {\n listView.focus(index);\n } else if (noFocusedItem) {\n listView.scrollToIndex(0);\n }\n },\n _calculateGroupPadding: function (height) {\n var li = this.ul.children('.k-first:first');\n var groupHeader = this.listView.content.prev('.k-group-header');\n var padding = 0;\n if (groupHeader[0] && groupHeader[0].style.display !== 'none') {\n if (height !== 'auto') {\n padding = kendo.support.scrollbar();\n }\n padding += parseFloat(li.css('border-right-width'), 10) + parseFloat(li.children('.k-group').css('padding-right'), 10);\n groupHeader.css('padding-right', padding);\n }\n },\n _calculatePopupHeight: function (force) {\n var height = this._height(this.dataSource.flatView().length || force);\n this._calculateGroupPadding(height);\n },\n _resizePopup: function (force) {\n if (this.options.virtual) {\n return;\n }\n if (!this.popup.element.is(':visible')) {\n this.popup.one('open', function (force) {\n return proxy(function () {\n this._calculatePopupHeight(force);\n }, this);\n }.call(this, force));\n } else {\n this._calculatePopupHeight(force);\n }\n },\n _popup: function () {\n var that = this;\n that.popup = new ui.Popup(that.list, extend({}, that.options.popup, {\n anchor: that.wrapper,\n open: proxy(that._openHandler, that),\n close: proxy(that._closeHandler, that),\n animation: that.options.animation,\n isRtl: support.isRtl(that.wrapper)\n }));\n },\n _makeUnselectable: function () {\n if (isIE8) {\n this.list.find('*').not('.k-textbox').attr('unselectable', 'on');\n }\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _toggle: function (open, preventFocus) {\n var that = this;\n var touchEnabled = support.mobileOS && (support.touch || support.MSPointers || support.pointers);\n open = open !== undefined ? open : !that.popup.visible();\n if (!preventFocus && !touchEnabled && that._focused[0] !== activeElement()) {\n that._prevent = true;\n that._focused.focus();\n that._prevent = false;\n }\n that[open ? OPEN : CLOSE]();\n },\n _triggerCascade: function () {\n var that = this;\n if (!that._cascadeTriggered || that._old !== that.value() || that._oldIndex !== that.selectedIndex) {\n that._cascadeTriggered = true;\n that.trigger(CASCADE, { userTriggered: that._userTriggered });\n }\n },\n _triggerChange: function () {\n if (this._valueBeforeCascade !== this.value()) {\n this.trigger(CHANGE);\n }\n },\n _unbindDataSource: function () {\n var that = this;\n that.dataSource.unbind(REQUESTSTART, that._requestStartHandler).unbind(REQUESTEND, that._requestEndHandler).unbind('error', that._errorHandler);\n },\n requireValueMapper: function (options, value) {\n var hasValue = (options.value instanceof Array ? options.value.length : options.value) || (value instanceof Array ? value.length : value);\n if (hasValue && options.virtual && typeof options.virtual.valueMapper !== 'function') {\n throw new Error('ValueMapper is not provided while the value is being set. See http://docs.telerik.com/kendo-ui/controls/editors/combobox/virtualization#the-valuemapper-function');\n }\n }\n });\n function unifyType(value, type) {\n if (value !== undefined && value !== '' && value !== null) {\n if (type === 'boolean') {\n value = Boolean(value);\n } else if (type === 'number') {\n value = Number(value);\n } else if (type === 'string') {\n value = value.toString();\n }\n }\n return value;\n }\n extend(List, {\n inArray: function (node, parentNode) {\n var idx, length, siblings = parentNode.children;\n if (!node || node.parentNode !== parentNode) {\n return -1;\n }\n for (idx = 0, length = siblings.length; idx < length; idx++) {\n if (node === siblings[idx]) {\n return idx;\n }\n }\n return -1;\n },\n unifyType: unifyType\n });\n kendo.ui.List = List;\n ui.Select = List.extend({\n init: function (element, options) {\n List.fn.init.call(this, element, options);\n this._initial = this.element.val();\n },\n setDataSource: function (dataSource) {\n var that = this;\n var parent;\n that.options.dataSource = dataSource;\n that._dataSource();\n if (that.listView.bound()) {\n that._initialIndex = null;\n }\n that.listView.setDataSource(that.dataSource);\n if (that.options.autoBind) {\n that.dataSource.fetch();\n }\n parent = that._parentWidget();\n if (parent) {\n that._cascadeSelect(parent);\n }\n },\n close: function () {\n this.popup.close();\n },\n select: function (candidate) {\n var that = this;\n if (candidate === undefined) {\n return that.selectedIndex;\n } else {\n return that._select(candidate).done(function () {\n that._old = that._accessor();\n that._oldIndex = that.selectedIndex;\n });\n }\n },\n _accessor: function (value, idx) {\n return this[this._isSelect ? '_accessorSelect' : '_accessorInput'](value, idx);\n },\n _accessorInput: function (value) {\n var element = this.element[0];\n if (value === undefined) {\n return element.value;\n } else {\n if (value === null) {\n value = '';\n }\n element.value = value;\n }\n },\n _accessorSelect: function (value, idx) {\n var element = this.element[0];\n var hasValue;\n if (value === undefined) {\n return getSelectedOption(element).value || '';\n }\n getSelectedOption(element).selected = false;\n if (idx === undefined) {\n idx = -1;\n }\n hasValue = value !== null && value !== '';\n if (hasValue && idx == -1) {\n this._custom(value);\n } else {\n if (value) {\n element.value = value;\n } else {\n element.selectedIndex = idx;\n }\n }\n },\n _custom: function (value) {\n var that = this;\n var element = that.element;\n var custom = that._customOption;\n if (!custom) {\n custom = $('<option/>');\n that._customOption = custom;\n element.append(custom);\n }\n custom.text(value);\n custom[0].selected = true;\n },\n _hideBusy: function () {\n var that = this;\n clearTimeout(that._busy);\n that._arrowIcon.removeClass(LOADING);\n that._focused.attr('aria-busy', false);\n that._busy = null;\n that._showClear();\n },\n _showBusy: function () {\n var that = this;\n that._request = true;\n if (that._busy) {\n return;\n }\n that._busy = setTimeout(function () {\n if (that._arrowIcon) {\n that._focused.attr('aria-busy', true);\n that._arrowIcon.addClass(LOADING);\n that._hideClear();\n }\n }, 100);\n },\n _requestEnd: function () {\n this._request = false;\n this._hideBusy();\n },\n _dataSource: function () {\n var that = this, element = that.element, options = that.options, dataSource = options.dataSource || {}, idx;\n dataSource = $.isArray(dataSource) ? { data: dataSource } : dataSource;\n if (that._isSelect) {\n idx = element[0].selectedIndex;\n if (idx > -1) {\n options.index = idx;\n }\n dataSource.select = element;\n dataSource.fields = [\n { field: options.dataTextField },\n { field: options.dataValueField }\n ];\n }\n if (that.dataSource) {\n that._unbindDataSource();\n } else {\n that._requestStartHandler = proxy(that._showBusy, that);\n that._requestEndHandler = proxy(that._requestEnd, that);\n that._errorHandler = proxy(that._hideBusy, that);\n }\n that.dataSource = kendo.data.DataSource.create(dataSource).bind(REQUESTSTART, that._requestStartHandler).bind(REQUESTEND, that._requestEndHandler).bind('error', that._errorHandler);\n },\n _firstItem: function () {\n this.listView.focusFirst();\n },\n _lastItem: function () {\n this.listView.focusLast();\n },\n _nextItem: function () {\n this.listView.focusNext();\n },\n _prevItem: function () {\n this.listView.focusPrev();\n },\n _move: function (e) {\n var that = this;\n var listView = that.listView;\n var key = e.keyCode;\n var down = key === keys.DOWN;\n var dataItem;\n var pressed;\n var current;\n if (key === keys.UP || down) {\n if (e.altKey) {\n that.toggle(down);\n } else {\n if (!listView.bound()) {\n if (!that._fetch) {\n that.dataSource.one(CHANGE, function () {\n that._fetch = false;\n that._move(e);\n });\n that._fetch = true;\n that._filterSource();\n }\n e.preventDefault();\n return true;\n }\n current = that._focus();\n if (!that._fetch && (!current || current.hasClass('k-state-selected'))) {\n if (down) {\n that._nextItem();\n if (!that._focus()) {\n that._lastItem();\n }\n } else {\n that._prevItem();\n if (!that._focus()) {\n that._firstItem();\n }\n }\n }\n dataItem = listView.dataItemByIndex(listView.getElementIndex(that._focus()));\n if (that.trigger(SELECT, {\n dataItem: dataItem,\n item: that._focus()\n })) {\n that._focus(current);\n return;\n }\n that._select(that._focus(), true).done(function () {\n if (!that.popup.visible()) {\n that._blur();\n }\n });\n }\n e.preventDefault();\n pressed = true;\n } else if (key === keys.ENTER || key === keys.TAB) {\n if (that.popup.visible()) {\n e.preventDefault();\n }\n current = that._focus();\n dataItem = that.dataItem();\n if (!that.popup.visible() && (!dataItem || that.text() !== that._text(dataItem))) {\n current = null;\n }\n var activeFilter = that.filterInput && that.filterInput[0] === activeElement();\n if (current) {\n dataItem = listView.dataItemByIndex(listView.getElementIndex(current));\n var shouldTrigger = that._value(dataItem) !== List.unifyType(that.value(), typeof that._value(dataItem));\n if (shouldTrigger && that.trigger(SELECT, {\n dataItem: dataItem,\n item: current\n })) {\n return;\n }\n that._select(current);\n } else if (that.input) {\n that._accessor(that.input.val());\n that.listView.value(that.input.val());\n }\n if (that._focusElement) {\n that._focusElement(that.wrapper);\n }\n if (activeFilter && key === keys.TAB) {\n that.wrapper.focusout();\n } else {\n that._blur();\n }\n that.close();\n pressed = true;\n } else if (key === keys.ESC) {\n if (that.popup.visible()) {\n e.preventDefault();\n }\n that.close();\n pressed = true;\n } else if (that.popup.visible() && (key === keys.PAGEDOWN || key === keys.PAGEUP)) {\n e.preventDefault();\n var direction = key === keys.PAGEDOWN ? 1 : -1;\n listView.scrollWith(direction * listView.screenHeight());\n pressed = true;\n }\n return pressed;\n },\n _fetchData: function () {\n var that = this;\n var hasItems = !!that.dataSource.view().length;\n if (that._request || that.options.cascadeFrom) {\n return;\n }\n if (!that.listView.bound() && !that._fetch && !hasItems) {\n that._fetch = true;\n that.dataSource.fetch().done(function () {\n that._fetch = false;\n });\n }\n },\n _options: function (data, optionLabel, value) {\n var that = this, element = that.element, htmlElement = element[0], length = data.length, options = '', option, dataItem, dataText, dataValue, idx = 0;\n if (optionLabel) {\n options = optionLabel;\n }\n for (; idx < length; idx++) {\n option = '<option';\n dataItem = data[idx];\n dataText = that._text(dataItem);\n dataValue = that._value(dataItem);\n if (dataValue !== undefined) {\n dataValue += '';\n if (dataValue.indexOf('\"') !== -1) {\n dataValue = dataValue.replace(quotRegExp, '"');\n }\n option += ' value=\"' + dataValue + '\"';\n }\n option += '>';\n if (dataText !== undefined) {\n option += htmlEncode(dataText);\n }\n option += '</option>';\n options += option;\n }\n element.html(options);\n if (value !== undefined) {\n htmlElement.value = value;\n if (htmlElement.value && !value) {\n htmlElement.selectedIndex = -1;\n }\n }\n if (htmlElement.selectedIndex !== -1) {\n option = getSelectedOption(htmlElement);\n if (option) {\n option.setAttribute(SELECTED, SELECTED);\n }\n }\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(that._initial);\n });\n };\n that._form = form.on('reset', that._resetHandler);\n }\n },\n _parentWidget: function () {\n var name = this.options.name;\n if (!this.options.cascadeFrom) {\n return;\n }\n var parentElement = $('#' + this.options.cascadeFrom);\n var parent = parentElement.data('kendo' + name);\n if (!parent) {\n parent = parentElement.data('kendo' + alternativeNames[name]);\n }\n return parent;\n },\n _cascade: function () {\n var that = this;\n var options = that.options;\n var cascade = options.cascadeFrom;\n var parent;\n if (cascade) {\n parent = that._parentWidget();\n if (!parent) {\n return;\n }\n that._cascadeHandlerProxy = proxy(that._cascadeHandler, that);\n that._cascadeFilterRequests = [];\n options.autoBind = false;\n parent.bind('set', function () {\n that.one('set', function (e) {\n that._selectedValue = e.value;\n });\n });\n parent.first(CASCADE, that._cascadeHandlerProxy);\n if (parent.listView.bound()) {\n that._toggleCascadeOnFocus();\n that._cascadeSelect(parent);\n } else {\n parent.one('dataBound', function () {\n that._toggleCascadeOnFocus();\n });\n if (!parent.value()) {\n that.enable(false);\n }\n }\n }\n },\n _toggleCascadeOnFocus: function () {\n var that = this;\n var parent = that._parentWidget();\n var focusout = isIE ? 'blur' : 'focusout';\n parent._focused.add(parent.filterInput).bind('focus', function () {\n parent.unbind(CASCADE, that._cascadeHandlerProxy);\n parent.first(CHANGE, that._cascadeHandlerProxy);\n });\n parent._focused.add(parent.filterInput).bind(focusout, function () {\n parent.unbind(CHANGE, that._cascadeHandlerProxy);\n parent.first(CASCADE, that._cascadeHandlerProxy);\n });\n },\n _cascadeHandler: function (e) {\n var parent = this._parentWidget();\n var valueBeforeCascade = this.value();\n this._userTriggered = e.userTriggered;\n if (this.listView.bound()) {\n this._clearSelection(parent, true);\n }\n this._cascadeSelect(parent, valueBeforeCascade);\n },\n _cascadeChange: function (parent) {\n var that = this;\n var value = that._accessor() || that._selectedValue;\n if (!that._cascadeFilterRequests.length) {\n that._selectedValue = null;\n }\n if (that._userTriggered) {\n that._clearSelection(parent, true);\n } else if (value) {\n if (value !== that.listView.value()[0]) {\n that.value(value);\n }\n if (!that.dataSource.view()[0] || that.selectedIndex === -1) {\n that._clearSelection(parent, true);\n }\n } else if (that.dataSource.flatView().length) {\n that.select(that.options.index);\n }\n that.enable();\n that._triggerCascade();\n that._triggerChange();\n that._userTriggered = false;\n },\n _cascadeSelect: function (parent, valueBeforeCascade) {\n var that = this;\n var dataItem = parent.dataItem();\n var filterValue = dataItem ? parent._value(dataItem) : null;\n var valueField = that.options.cascadeFromField || parent.options.dataValueField;\n var expressions;\n that._valueBeforeCascade = valueBeforeCascade !== undefined ? valueBeforeCascade : that.value();\n if (filterValue || filterValue === 0) {\n expressions = that.dataSource.filter() || {};\n removeFiltersForField(expressions, valueField);\n var handler = function () {\n var currentHandler = that._cascadeFilterRequests.shift();\n if (currentHandler) {\n that.unbind('dataBound', currentHandler);\n }\n currentHandler = that._cascadeFilterRequests[0];\n if (currentHandler) {\n that.first('dataBound', currentHandler);\n }\n that._cascadeChange(parent);\n };\n that._cascadeFilterRequests.push(handler);\n if (that._cascadeFilterRequests.length === 1) {\n that.first('dataBound', handler);\n }\n that._cascading = true;\n that._filterSource({\n field: valueField,\n operator: 'eq',\n value: filterValue\n });\n that._cascading = false;\n } else {\n that.enable(false);\n that._clearSelection(parent);\n that._triggerCascade();\n that._triggerChange();\n that._userTriggered = false;\n }\n }\n });\n var STATIC_LIST_NS = '.StaticList';\n var StaticList = kendo.ui.DataBoundWidget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this.element.attr('role', 'listbox').on('click' + STATIC_LIST_NS, 'li', proxy(this._click, this)).on('mouseenter' + STATIC_LIST_NS, 'li', function () {\n $(this).addClass(HOVER);\n }).on('mouseleave' + STATIC_LIST_NS, 'li', function () {\n $(this).removeClass(HOVER);\n });\n this.content = this.element.wrap('<div class=\\'k-list-scroller\\' unselectable=\\'on\\'></div>').parent();\n this.header = this.content.before('<div class=\"k-group-header\" style=\"display:none\"></div>').prev();\n this.bound(false);\n this._optionID = kendo.guid();\n this._selectedIndices = [];\n this._view = [];\n this._dataItems = [];\n this._values = [];\n var value = this.options.value;\n if (value) {\n this._values = $.isArray(value) ? value.slice(0) : [value];\n }\n this._getter();\n this._templates();\n this.setDataSource(this.options.dataSource);\n this._onScroll = proxy(function () {\n var that = this;\n clearTimeout(that._scrollId);\n that._scrollId = setTimeout(function () {\n that._renderHeader();\n }, 50);\n }, this);\n },\n options: {\n name: 'StaticList',\n dataValueField: null,\n valuePrimitive: false,\n selectable: true,\n template: null,\n groupTemplate: null,\n fixedGroupTemplate: null\n },\n events: [\n 'click',\n CHANGE,\n 'activate',\n 'deactivate',\n 'dataBinding',\n 'dataBound',\n 'selectedItemChange'\n ],\n setDataSource: function (source) {\n var that = this;\n var dataSource = source || {};\n var value;\n dataSource = $.isArray(dataSource) ? { data: dataSource } : dataSource;\n dataSource = kendo.data.DataSource.create(dataSource);\n if (that.dataSource) {\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n value = that.value();\n that.value([]);\n that.bound(false);\n that.value(value);\n } else {\n that._refreshHandler = proxy(that.refresh, that);\n }\n that.setDSFilter(dataSource.filter());\n that.dataSource = dataSource.bind(CHANGE, that._refreshHandler);\n that._fixedHeader();\n },\n skip: function () {\n return this.dataSource.skip();\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n this._getter();\n this._templates();\n this._render();\n },\n destroy: function () {\n this.element.off(STATIC_LIST_NS);\n if (this._refreshHandler) {\n this.dataSource.unbind(CHANGE, this._refreshHandler);\n }\n clearTimeout(this._scrollId);\n Widget.fn.destroy.call(this);\n },\n dataItemByIndex: function (index) {\n return this.dataSource.flatView()[index];\n },\n screenHeight: function () {\n return this.content[0].clientHeight;\n },\n scrollToIndex: function (index) {\n var item = this.element[0].children[index];\n if (item) {\n this.scroll(item);\n }\n },\n scrollWith: function (value) {\n this.content.scrollTop(this.content.scrollTop() + value);\n },\n scroll: function (item) {\n if (!item) {\n return;\n }\n if (item[0]) {\n item = item[0];\n }\n var content = this.content[0], itemOffsetTop = item.offsetTop, itemOffsetHeight = item.offsetHeight, contentScrollTop = content.scrollTop, contentOffsetHeight = content.clientHeight, bottomDistance = itemOffsetTop + itemOffsetHeight;\n if (contentScrollTop > itemOffsetTop) {\n contentScrollTop = itemOffsetTop;\n } else if (bottomDistance > contentScrollTop + contentOffsetHeight) {\n contentScrollTop = bottomDistance - contentOffsetHeight;\n }\n content.scrollTop = contentScrollTop;\n },\n selectedDataItems: function (dataItems) {\n if (dataItems === undefined) {\n return this._dataItems.slice();\n }\n this._dataItems = dataItems;\n this._values = this._getValues(dataItems);\n },\n _getValues: function (dataItems) {\n var getter = this._valueGetter;\n return $.map(dataItems, function (dataItem) {\n return getter(dataItem);\n });\n },\n focusNext: function () {\n var current = this.focus();\n if (!current) {\n current = 0;\n } else {\n current = current.next();\n }\n this.focus(current);\n },\n focusPrev: function () {\n var current = this.focus();\n if (!current) {\n current = this.element[0].children.length - 1;\n } else {\n current = current.prev();\n }\n this.focus(current);\n },\n focusFirst: function () {\n this.focus(this.element[0].children[0]);\n },\n focusLast: function () {\n this.focus(last(this.element[0].children));\n },\n focus: function (candidate) {\n var that = this;\n var id = that._optionID;\n var hasCandidate;\n if (candidate === undefined) {\n return that._current;\n }\n candidate = last(that._get(candidate));\n candidate = $(this.element[0].children[candidate]);\n if (that._current) {\n that._current.removeClass(FOCUSED).removeAttr('aria-selected').removeAttr(ID);\n that.trigger('deactivate');\n }\n hasCandidate = !!candidate[0];\n if (hasCandidate) {\n candidate.addClass(FOCUSED);\n that.scroll(candidate);\n candidate.attr('id', id);\n }\n that._current = hasCandidate ? candidate : null;\n that.trigger('activate');\n },\n focusIndex: function () {\n return this.focus() ? this.focus().index() : undefined;\n },\n skipUpdate: function (skipUpdate) {\n this._skipUpdate = skipUpdate;\n },\n select: function (indices) {\n var that = this;\n var selectable = that.options.selectable;\n var singleSelection = selectable !== 'multiple' && selectable !== false;\n var selectedIndices = that._selectedIndices;\n var added = [];\n var removed = [];\n var result;\n if (indices === undefined) {\n return selectedIndices.slice();\n }\n indices = that._get(indices);\n if (indices.length === 1 && indices[0] === -1) {\n indices = [];\n }\n var deferred = $.Deferred().resolve();\n var filtered = that.isFiltered();\n if (filtered && !singleSelection && that._deselectFiltered(indices)) {\n return deferred;\n }\n if (singleSelection && !filtered && $.inArray(last(indices), selectedIndices) !== -1) {\n if (that._dataItems.length && that._view.length) {\n that._dataItems = [that._view[selectedIndices[0]].item];\n }\n return deferred;\n }\n result = that._deselect(indices);\n removed = result.removed;\n indices = result.indices;\n if (indices.length) {\n if (singleSelection) {\n indices = [last(indices)];\n }\n added = that._select(indices);\n }\n if (added.length || removed.length) {\n that._valueComparer = null;\n that.trigger(CHANGE, {\n added: added,\n removed: removed\n });\n }\n return deferred;\n },\n removeAt: function (position) {\n this._selectedIndices.splice(position, 1);\n this._values.splice(position, 1);\n this._valueComparer = null;\n return {\n position: position,\n dataItem: this._dataItems.splice(position, 1)[0]\n };\n },\n setValue: function (value) {\n value = $.isArray(value) || value instanceof ObservableArray ? value.slice(0) : [value];\n this._values = value;\n this._valueComparer = null;\n },\n value: function (value) {\n var that = this;\n var deferred = that._valueDeferred;\n var indices;\n if (value === undefined) {\n return that._values.slice();\n }\n that.setValue(value);\n if (!deferred || deferred.state() === 'resolved') {\n that._valueDeferred = deferred = $.Deferred();\n }\n if (that.bound()) {\n indices = that._valueIndices(that._values);\n if (that.options.selectable === 'multiple') {\n that.select(-1);\n }\n that.select(indices);\n deferred.resolve();\n }\n that._skipUpdate = false;\n return deferred;\n },\n items: function () {\n return this.element.children('.k-item');\n },\n _click: function (e) {\n if (!e.isDefaultPrevented()) {\n if (!this.trigger('click', { item: $(e.currentTarget) })) {\n this.select(e.currentTarget);\n }\n }\n },\n _valueExpr: function (type, values) {\n var that = this;\n var idx = 0;\n var body;\n var comparer;\n var normalized = [];\n if (!that._valueComparer || that._valueType !== type) {\n that._valueType = type;\n for (; idx < values.length; idx++) {\n normalized.push(unifyType(values[idx], type));\n }\n body = 'for (var idx = 0; idx < ' + normalized.length + '; idx++) {' + ' if (current === values[idx]) {' + ' return idx;' + ' }' + '} ' + 'return -1;';\n comparer = new Function('current', 'values', body);\n that._valueComparer = function (current) {\n return comparer(current, normalized);\n };\n }\n return that._valueComparer;\n },\n _dataItemPosition: function (dataItem, values) {\n var value = this._valueGetter(dataItem);\n var valueExpr = this._valueExpr(typeof value, values);\n return valueExpr(value);\n },\n _getter: function () {\n this._valueGetter = kendo.getter(this.options.dataValueField);\n },\n _deselect: function (indices) {\n var that = this;\n var children = that.element[0].children;\n var selectable = that.options.selectable;\n var selectedIndices = that._selectedIndices;\n var dataItems = that._dataItems;\n var values = that._values;\n var removed = [];\n var i = 0;\n var j;\n var index, selectedIndex;\n var removedIndices = 0;\n indices = indices.slice();\n if (selectable === true || !indices.length) {\n for (; i < selectedIndices.length; i++) {\n $(children[selectedIndices[i]]).removeClass('k-state-selected');\n removed.push({\n position: i,\n dataItem: dataItems[i]\n });\n }\n that._values = [];\n that._dataItems = [];\n that._selectedIndices = [];\n } else if (selectable === 'multiple') {\n for (; i < indices.length; i++) {\n index = indices[i];\n if (!$(children[index]).hasClass('k-state-selected')) {\n continue;\n }\n for (j = 0; j < selectedIndices.length; j++) {\n selectedIndex = selectedIndices[j];\n if (selectedIndex === index) {\n $(children[selectedIndex]).removeClass('k-state-selected');\n removed.push({\n position: j + removedIndices,\n dataItem: dataItems.splice(j, 1)[0]\n });\n selectedIndices.splice(j, 1);\n indices.splice(i, 1);\n values.splice(j, 1);\n removedIndices += 1;\n i -= 1;\n j -= 1;\n break;\n }\n }\n }\n }\n return {\n indices: indices,\n removed: removed\n };\n },\n _deselectFiltered: function (indices) {\n var children = this.element[0].children;\n var dataItem, index, position;\n var removed = [];\n var idx = 0;\n for (; idx < indices.length; idx++) {\n index = indices[idx];\n dataItem = this._view[index].item;\n position = this._dataItemPosition(dataItem, this._values);\n if (position > -1) {\n removed.push(this.removeAt(position));\n $(children[index]).removeClass('k-state-selected');\n }\n }\n if (removed.length) {\n this.trigger(CHANGE, {\n added: [],\n removed: removed\n });\n return true;\n }\n return false;\n },\n _select: function (indices) {\n var that = this;\n var children = that.element[0].children;\n var data = that._view;\n var dataItem, index;\n var added = [];\n var idx = 0;\n if (last(indices) !== -1) {\n that.focus(indices);\n }\n for (; idx < indices.length; idx++) {\n index = indices[idx];\n dataItem = data[index];\n if (index === -1 || !dataItem) {\n continue;\n }\n dataItem = dataItem.item;\n that._selectedIndices.push(index);\n that._dataItems.push(dataItem);\n that._values.push(that._valueGetter(dataItem));\n $(children[index]).addClass('k-state-selected').attr('aria-selected', true);\n added.push({ dataItem: dataItem });\n }\n return added;\n },\n getElementIndex: function (element) {\n return $(element).data('offset-index');\n },\n _get: function (candidate) {\n if (typeof candidate === 'number') {\n candidate = [candidate];\n } else if (!isArray(candidate)) {\n candidate = this.getElementIndex(candidate);\n candidate = [candidate !== undefined ? candidate : -1];\n }\n return candidate;\n },\n _template: function () {\n var that = this;\n var options = that.options;\n var template = options.template;\n if (!template) {\n template = kendo.template('<li tabindex=\"-1\" role=\"option\" unselectable=\"on\" class=\"k-item\">${' + kendo.expr(options.dataTextField, 'data') + '}</li>', { useWithBlock: false });\n } else {\n template = kendo.template(template);\n template = function (data) {\n return '<li tabindex=\"-1\" role=\"option\" unselectable=\"on\" class=\"k-item\">' + template(data) + '</li>';\n };\n }\n return template;\n },\n _templates: function () {\n var template;\n var options = this.options;\n var templates = {\n template: options.template,\n groupTemplate: options.groupTemplate,\n fixedGroupTemplate: options.fixedGroupTemplate\n };\n for (var key in templates) {\n template = templates[key];\n if (template && typeof template !== 'function') {\n templates[key] = kendo.template(template);\n }\n }\n this.templates = templates;\n },\n _normalizeIndices: function (indices) {\n var newIndices = [];\n var idx = 0;\n for (; idx < indices.length; idx++) {\n if (indices[idx] !== undefined) {\n newIndices.push(indices[idx]);\n }\n }\n return newIndices;\n },\n _valueIndices: function (values, indices) {\n var data = this._view;\n var idx = 0;\n var index;\n indices = indices ? indices.slice() : [];\n if (!values.length) {\n return [];\n }\n for (; idx < data.length; idx++) {\n index = this._dataItemPosition(data[idx].item, values);\n if (index !== -1) {\n indices[index] = idx;\n }\n }\n return this._normalizeIndices(indices);\n },\n _firstVisibleItem: function () {\n var element = this.element[0];\n var content = this.content[0];\n var scrollTop = content.scrollTop;\n var itemHeight = $(element.children[0]).height();\n var itemIndex = Math.floor(scrollTop / itemHeight) || 0;\n var item = element.children[itemIndex] || element.lastChild;\n var forward = item.offsetTop < scrollTop;\n while (item) {\n if (forward) {\n if (item.offsetTop + itemHeight > scrollTop || !item.nextSibling) {\n break;\n }\n item = item.nextSibling;\n } else {\n if (item.offsetTop <= scrollTop || !item.previousSibling) {\n break;\n }\n item = item.previousSibling;\n }\n }\n return this._view[$(item).data('offset-index')];\n },\n _fixedHeader: function () {\n if (this.isGrouped() && this.templates.fixedGroupTemplate) {\n this.header.show();\n this.content.scroll(this._onScroll);\n } else {\n this.header.hide();\n this.content.off('scroll', this._onScroll);\n }\n },\n _renderHeader: function () {\n var template = this.templates.fixedGroupTemplate;\n if (!template) {\n return;\n }\n var visibleItem = this._firstVisibleItem();\n if (visibleItem) {\n this.header.html(template(visibleItem.group));\n }\n },\n _renderItem: function (context) {\n var item = '<li tabindex=\"-1\" role=\"option\" unselectable=\"on\" class=\"k-item';\n var dataItem = context.item;\n var notFirstItem = context.index !== 0;\n var selected = context.selected;\n if (notFirstItem && context.newGroup) {\n item += ' k-first';\n }\n if (selected) {\n item += ' k-state-selected';\n }\n item += '\"' + (selected ? ' aria-selected=\"true\"' : '') + ' data-offset-index=\"' + context.index + '\">';\n item += this.templates.template(dataItem);\n if (notFirstItem && context.newGroup) {\n item += '<div class=\"k-group\">' + this.templates.groupTemplate(context.group) + '</div>';\n }\n return item + '</li>';\n },\n _render: function () {\n var html = '';\n var i = 0;\n var idx = 0;\n var context;\n var dataContext = [];\n var view = this.dataSource.view();\n var values = this.value();\n var group, newGroup, j;\n var isGrouped = this.isGrouped();\n if (isGrouped) {\n for (i = 0; i < view.length; i++) {\n group = view[i];\n newGroup = true;\n for (j = 0; j < group.items.length; j++) {\n context = {\n selected: this._selected(group.items[j], values),\n item: group.items[j],\n group: group.value,\n newGroup: newGroup,\n index: idx\n };\n dataContext[idx] = context;\n idx += 1;\n html += this._renderItem(context);\n newGroup = false;\n }\n }\n } else {\n for (i = 0; i < view.length; i++) {\n context = {\n selected: this._selected(view[i], values),\n item: view[i],\n index: i\n };\n dataContext[i] = context;\n html += this._renderItem(context);\n }\n }\n this._view = dataContext;\n this.element[0].innerHTML = html;\n if (isGrouped && dataContext.length) {\n this._renderHeader();\n }\n },\n _selected: function (dataItem, values) {\n var select = !this.isFiltered() || this.options.selectable === 'multiple';\n return select && this._dataItemPosition(dataItem, values) !== -1;\n },\n setDSFilter: function (filter) {\n this._lastDSFilter = extend({}, filter);\n },\n isFiltered: function () {\n if (!this._lastDSFilter) {\n this.setDSFilter(this.dataSource.filter());\n }\n return !kendo.data.Query.compareFilters(this.dataSource.filter(), this._lastDSFilter);\n },\n refresh: function (e) {\n var that = this;\n var action = e && e.action;\n var skipUpdateOnBind = that.options.skipUpdateOnBind;\n var isItemChange = action === 'itemchange';\n var result;\n that.trigger('dataBinding');\n that._angularItems('cleanup');\n that._fixedHeader();\n that._render();\n that.bound(true);\n if (isItemChange || action === 'remove') {\n result = mapChangedItems(that._dataItems, e.items);\n if (result.changed.length) {\n if (isItemChange) {\n that.trigger('selectedItemChange', { items: result.changed });\n } else {\n that.value(that._getValues(result.unchanged));\n }\n }\n } else if (that.isFiltered() || that._skipUpdate) {\n that.focus(0);\n if (that._skipUpdate) {\n that._skipUpdate = false;\n that._selectedIndices = that._valueIndices(that._values, that._selectedIndices);\n }\n } else if (!skipUpdateOnBind && (!action || action === 'add')) {\n that.value(that._values);\n }\n if (that._valueDeferred) {\n that._valueDeferred.resolve();\n }\n that._angularItems('compile');\n that.trigger('dataBound');\n },\n bound: function (bound) {\n if (bound === undefined) {\n return this._bound;\n }\n this._bound = bound;\n },\n isGrouped: function () {\n return (this.dataSource.group() || []).length;\n }\n });\n ui.plugin(StaticList);\n function last(list) {\n return list[list.length - 1];\n }\n function getSelectedOption(select) {\n var index = select.selectedIndex;\n return index > -1 ? select.options[index] : {};\n }\n function mapChangedItems(selected, itemsToMatch) {\n var itemsLength = itemsToMatch.length;\n var selectedLength = selected.length;\n var dataItem;\n var found;\n var i, j;\n var changed = [];\n var unchanged = [];\n if (selectedLength) {\n for (i = 0; i < selectedLength; i++) {\n dataItem = selected[i];\n found = false;\n for (j = 0; j < itemsLength; j++) {\n if (dataItem === itemsToMatch[j]) {\n found = true;\n changed.push({\n index: i,\n item: dataItem\n });\n break;\n }\n }\n if (!found) {\n unchanged.push(dataItem);\n }\n }\n }\n return {\n changed: changed,\n unchanged: unchanged\n };\n }\n function isValidFilterExpr(expression) {\n if (!expression || $.isEmptyObject(expression)) {\n return false;\n }\n if (expression.filters && !expression.filters.length) {\n return false;\n }\n return true;\n }\n function removeFiltersForField(expression, field) {\n var filters;\n var found = false;\n if (expression.filters) {\n filters = $.grep(expression.filters, function (filter) {\n found = removeFiltersForField(filter, field);\n if (filter.filters) {\n return filter.filters.length;\n } else {\n return filter.field != field;\n }\n });\n if (!found && expression.filters.length !== filters.length) {\n found = true;\n }\n expression.filters = filters;\n }\n return found;\n }\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.calendar', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'calendar',\n name: 'Calendar',\n category: 'web',\n description: 'The Calendar widget renders a graphical calendar that supports navigation and selection.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, ui = kendo.ui, Widget = ui.Widget, keys = kendo.keys, parse = kendo.parseDate, adjustDST = kendo.date.adjustDST, weekInYear = kendo.date.weekInYear, extractFormat = kendo._extractFormat, template = kendo.template, getCulture = kendo.getCulture, transitions = kendo.support.transitions, transitionOrigin = transitions ? transitions.css + 'transform-origin' : '', cellTemplate = template('<td#=data.cssClass# role=\"gridcell\"><a tabindex=\"-1\" class=\"k-link\" href=\"\\\\#\" data-#=data.ns#value=\"#=data.dateString#\">#=data.value#</a></td>', { useWithBlock: false }), emptyCellTemplate = template('<td role=\"gridcell\"> </td>', { useWithBlock: false }), weekNumberTemplate = template('<td class=\"k-alt\">#= data.weekNumber #</td>', { useWithBlock: false }), browser = kendo.support.browser, isIE8 = browser.msie && browser.version < 9, outerHeight = kendo._outerHeight, outerWidth = kendo._outerWidth, ns = '.kendoCalendar', CLICK = 'click' + ns, KEYDOWN_NS = 'keydown' + ns, ID = 'id', MIN = 'min', LEFT = 'left', SLIDE = 'slideIn', MONTH = 'month', CENTURY = 'century', CHANGE = 'change', NAVIGATE = 'navigate', VALUE = 'value', HOVER = 'k-state-hover', DISABLED = 'k-state-disabled', FOCUSED = 'k-state-focused', OTHERMONTH = 'k-other-month', OTHERMONTHCLASS = ' class=\"' + OTHERMONTH + '\"', TODAY = 'k-nav-today', CELLSELECTOR = 'td:has(.k-link)', BLUR = 'blur' + ns, FOCUS = 'focus', FOCUS_WITH_NS = FOCUS + ns, MOUSEENTER = support.touch ? 'touchstart' : 'mouseenter', MOUSEENTER_WITH_NS = support.touch ? 'touchstart' + ns : 'mouseenter' + ns, MOUSELEAVE = support.touch ? 'touchend' + ns + ' touchmove' + ns : 'mouseleave' + ns, MS_PER_MINUTE = 60000, MS_PER_DAY = 86400000, PREVARROW = '_prevArrow', NEXTARROW = '_nextArrow', ARIA_DISABLED = 'aria-disabled', ARIA_SELECTED = 'aria-selected', proxy = $.proxy, extend = $.extend, DATE = Date, views = {\n month: 0,\n year: 1,\n decade: 2,\n century: 3\n };\n var Calendar = Widget.extend({\n init: function (element, options) {\n var that = this, value, id;\n Widget.fn.init.call(that, element, options);\n element = that.wrapper = that.element;\n options = that.options;\n options.url = window.unescape(options.url);\n that.options.disableDates = getDisabledExpr(that.options.disableDates);\n that._templates();\n that._header();\n that._footer(that.footer);\n id = element.addClass('k-widget k-calendar ' + (options.weekNumber ? ' k-week-number' : '')).on(MOUSEENTER_WITH_NS + ' ' + MOUSELEAVE, CELLSELECTOR, mousetoggle).on(KEYDOWN_NS, 'table.k-content', proxy(that._move, that)).on(CLICK, CELLSELECTOR, function (e) {\n var link = e.currentTarget.firstChild, value = that._toDateObject(link);\n if (link.href.indexOf('#') != -1) {\n e.preventDefault();\n }\n if (that._view.name == 'month' && that.options.disableDates(value)) {\n return;\n }\n that._click($(link));\n }).on('mouseup' + ns, 'table.k-content, .k-footer', function () {\n that._focusView(that.options.focusOnNav !== false);\n }).attr(ID);\n if (id) {\n that._cellID = id + '_cell_selected';\n }\n normalize(options);\n value = parse(options.value, options.format, options.culture);\n that._index = views[options.start];\n that._current = new DATE(+restrictValue(value, options.min, options.max));\n that._addClassProxy = function () {\n that._active = true;\n if (that._cell.hasClass(DISABLED)) {\n var todayString = that._view.toDateString(getToday());\n that._cell = that._cellByDate(todayString);\n }\n that._cell.addClass(FOCUSED);\n };\n that._removeClassProxy = function () {\n that._active = false;\n that._cell.removeClass(FOCUSED);\n };\n that.value(value);\n kendo.notify(that);\n },\n options: {\n name: 'Calendar',\n value: null,\n min: new DATE(1900, 0, 1),\n max: new DATE(2099, 11, 31),\n dates: [],\n url: '',\n culture: '',\n footer: '',\n format: '',\n month: {},\n weekNumber: false,\n start: MONTH,\n depth: MONTH,\n animation: {\n horizontal: {\n effects: SLIDE,\n reverse: true,\n duration: 500,\n divisor: 2\n },\n vertical: {\n effects: 'zoomIn',\n duration: 400\n }\n }\n },\n events: [\n CHANGE,\n NAVIGATE\n ],\n setOptions: function (options) {\n var that = this;\n normalize(options);\n options.disableDates = getDisabledExpr(options.disableDates);\n Widget.fn.setOptions.call(that, options);\n that._templates();\n that._footer(that.footer);\n that._index = views[that.options.start];\n that.navigate();\n },\n destroy: function () {\n var that = this, today = that._today;\n that.element.off(ns);\n that._title.off(ns);\n that[PREVARROW].off(ns);\n that[NEXTARROW].off(ns);\n kendo.destroy(that._table);\n if (today) {\n kendo.destroy(today.off(ns));\n }\n Widget.fn.destroy.call(that);\n },\n current: function () {\n return this._current;\n },\n view: function () {\n return this._view;\n },\n focus: function (table) {\n table = table || this._table;\n this._bindTable(table);\n table.focus();\n },\n min: function (value) {\n return this._option(MIN, value);\n },\n max: function (value) {\n return this._option('max', value);\n },\n navigateToPast: function () {\n this._navigate(PREVARROW, -1);\n },\n navigateToFuture: function () {\n this._navigate(NEXTARROW, 1);\n },\n navigateUp: function () {\n var that = this, index = that._index;\n if (that._title.hasClass(DISABLED)) {\n return;\n }\n that.navigate(that._current, ++index);\n },\n navigateDown: function (value) {\n var that = this, index = that._index, depth = that.options.depth;\n if (!value) {\n return;\n }\n if (index === views[depth]) {\n if (!isEqualDate(that._value, that._current) || !isEqualDate(that._value, value)) {\n that.value(value);\n that.trigger(CHANGE);\n }\n return;\n }\n that.navigate(value, --index);\n },\n navigate: function (value, view) {\n view = isNaN(view) ? views[view] : view;\n var that = this, options = that.options, culture = options.culture, min = options.min, max = options.max, title = that._title, from = that._table, old = that._oldTable, selectedValue = that._value, currentValue = that._current, future = value && +value > +currentValue, vertical = view !== undefined && view !== that._index, to, currentView, compare, disabled;\n if (!value) {\n value = currentValue;\n }\n that._current = value = new DATE(+restrictValue(value, min, max));\n if (view === undefined) {\n view = that._index;\n } else {\n that._index = view;\n }\n that._view = currentView = calendar.views[view];\n compare = currentView.compare;\n disabled = view === views[CENTURY];\n title.toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n disabled = compare(value, min) < 1;\n that[PREVARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n disabled = compare(value, max) > -1;\n that[NEXTARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n if (from && old && old.data('animating')) {\n old.kendoStop(true, true);\n from.kendoStop(true, true);\n }\n that._oldTable = from;\n if (!from || that._changeView) {\n title.html(currentView.title(value, min, max, culture));\n that._table = to = $(currentView.content(extend({\n min: min,\n max: max,\n date: value,\n url: options.url,\n dates: options.dates,\n format: options.format,\n culture: culture,\n disableDates: options.disableDates,\n isWeekColumnVisible: options.weekNumber\n }, that[currentView.name])));\n addClassToViewContainer(to, currentView.name);\n makeUnselectable(to);\n var replace = from && from.data('start') === to.data('start');\n that._animate({\n from: from,\n to: to,\n vertical: vertical,\n future: future,\n replace: replace\n });\n that.trigger(NAVIGATE);\n that._focus(value);\n }\n if (view === views[options.depth] && selectedValue && !that.options.disableDates(selectedValue)) {\n that._class('k-state-selected', selectedValue);\n }\n that._class(FOCUSED, value);\n if (!from && that._cell) {\n that._cell.removeClass(FOCUSED);\n }\n that._changeView = true;\n },\n value: function (value) {\n var that = this, view = that._view, options = that.options, old = that._view, min = options.min, max = options.max;\n if (value === undefined) {\n return that._value;\n }\n if (value === null) {\n that._current = new Date(that._current.getFullYear(), that._current.getMonth(), that._current.getDate());\n }\n value = parse(value, options.format, options.culture);\n if (value !== null) {\n value = new DATE(+value);\n if (!isInRange(value, min, max)) {\n value = null;\n }\n }\n if (value === null || !that.options.disableDates(value)) {\n that._value = value;\n } else if (that._value === undefined) {\n that._value = null;\n }\n if (old && value === null && that._cell) {\n that._cell.removeClass('k-state-selected');\n } else {\n that._changeView = !value || view && view.compare(value, that._current) !== 0;\n that.navigate(value);\n }\n },\n _move: function (e) {\n var that = this, options = that.options, key = e.keyCode, view = that._view, index = that._index, min = that.options.min, max = that.options.max, currentValue = new DATE(+that._current), isRtl = kendo.support.isRtl(that.wrapper), isDisabled = that.options.disableDates, value, prevent, method, temp;\n if (e.target === that._table[0]) {\n that._active = true;\n }\n if (e.ctrlKey) {\n if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\n that.navigateToFuture();\n prevent = true;\n } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\n that.navigateToPast();\n prevent = true;\n } else if (key == keys.UP) {\n that.navigateUp();\n prevent = true;\n } else if (key == keys.DOWN) {\n that._click($(that._cell[0].firstChild));\n prevent = true;\n }\n } else {\n if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\n value = 1;\n prevent = true;\n } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\n value = -1;\n prevent = true;\n } else if (key == keys.UP) {\n value = index === 0 ? -7 : -4;\n prevent = true;\n } else if (key == keys.DOWN) {\n value = index === 0 ? 7 : 4;\n prevent = true;\n } else if (key == keys.ENTER) {\n that._click($(that._cell[0].firstChild));\n prevent = true;\n } else if (key == keys.HOME || key == keys.END) {\n method = key == keys.HOME ? 'first' : 'last';\n temp = view[method](currentValue);\n currentValue = new DATE(temp.getFullYear(), temp.getMonth(), temp.getDate(), currentValue.getHours(), currentValue.getMinutes(), currentValue.getSeconds(), currentValue.getMilliseconds());\n prevent = true;\n } else if (key == keys.PAGEUP) {\n prevent = true;\n that.navigateToPast();\n } else if (key == keys.PAGEDOWN) {\n prevent = true;\n that.navigateToFuture();\n }\n if (value || method) {\n if (!method) {\n view.setDate(currentValue, value);\n }\n if (isDisabled(currentValue)) {\n currentValue = that._nextNavigatable(currentValue, value);\n }\n if (isInRange(currentValue, min, max)) {\n that._focus(restrictValue(currentValue, options.min, options.max));\n }\n }\n }\n if (prevent) {\n e.preventDefault();\n }\n return that._current;\n },\n _nextNavigatable: function (currentValue, value) {\n var that = this, disabled = true, view = that._view, min = that.options.min, max = that.options.max, isDisabled = that.options.disableDates, navigatableDate = new Date(currentValue.getTime());\n view.setDate(navigatableDate, -value);\n while (disabled) {\n view.setDate(currentValue, value);\n if (!isInRange(currentValue, min, max)) {\n currentValue = navigatableDate;\n break;\n }\n disabled = isDisabled(currentValue);\n }\n return currentValue;\n },\n _animate: function (options) {\n var that = this, from = options.from, to = options.to, active = that._active;\n if (!from) {\n to.insertAfter(that.element[0].firstChild);\n that._bindTable(to);\n } else if (from.parent().data('animating')) {\n from.off(ns);\n from.parent().kendoStop(true, true).remove();\n from.remove();\n to.insertAfter(that.element[0].firstChild);\n that._focusView(active);\n } else if (!from.is(':visible') || that.options.animation === false || options.replace) {\n to.insertAfter(from);\n from.off(ns).remove();\n that._focusView(active);\n } else {\n that[options.vertical ? '_vertical' : '_horizontal'](from, to, options.future);\n }\n },\n _horizontal: function (from, to, future) {\n var that = this, active = that._active, horizontal = that.options.animation.horizontal, effects = horizontal.effects, viewWidth = outerWidth(from);\n if (effects && effects.indexOf(SLIDE) != -1) {\n from.add(to).css({ width: viewWidth });\n from.wrap('<div/>');\n that._focusView(active, from);\n from.parent().css({\n position: 'relative',\n width: viewWidth * 2,\n 'float': LEFT,\n 'margin-left': future ? 0 : -viewWidth\n });\n to[future ? 'insertAfter' : 'insertBefore'](from);\n extend(horizontal, {\n effects: SLIDE + ':' + (future ? 'right' : LEFT),\n complete: function () {\n from.off(ns).remove();\n that._oldTable = null;\n to.unwrap();\n that._focusView(active);\n }\n });\n from.parent().kendoStop(true, true).kendoAnimate(horizontal);\n }\n },\n _vertical: function (from, to) {\n var that = this, vertical = that.options.animation.vertical, effects = vertical.effects, active = that._active, cell, position;\n if (effects && effects.indexOf('zoom') != -1) {\n to.css({\n position: 'absolute',\n top: outerHeight(from.prev()),\n left: 0\n }).insertBefore(from);\n if (transitionOrigin) {\n cell = that._cellByDate(that._view.toDateString(that._current));\n position = cell.position();\n position = position.left + parseInt(cell.width() / 2, 10) + 'px' + ' ' + (position.top + parseInt(cell.height() / 2, 10) + 'px');\n to.css(transitionOrigin, position);\n }\n from.kendoStop(true, true).kendoAnimate({\n effects: 'fadeOut',\n duration: 600,\n complete: function () {\n from.off(ns).remove();\n that._oldTable = null;\n to.css({\n position: 'static',\n top: 0,\n left: 0\n });\n that._focusView(active);\n }\n });\n to.kendoStop(true, true).kendoAnimate(vertical);\n }\n },\n _cellByDate: function (value) {\n return this._table.find('td:not(.' + OTHERMONTH + ')').filter(function () {\n return $(this.firstChild).attr(kendo.attr(VALUE)) === value;\n });\n },\n _class: function (className, date) {\n var that = this, id = that._cellID, cell = that._cell, value = that._view.toDateString(date), disabledDate;\n if (cell) {\n cell.removeAttr(ARIA_SELECTED).removeAttr('aria-label').removeAttr(ID);\n }\n if (date && that._view.name == 'month') {\n disabledDate = that.options.disableDates(date);\n }\n cell = that._table.find('td:not(.' + OTHERMONTH + ')').removeClass(className).filter(function () {\n return $(this.firstChild).attr(kendo.attr(VALUE)) === value;\n }).attr(ARIA_SELECTED, true);\n if (className === FOCUSED && !that._active && that.options.focusOnNav !== false || disabledDate) {\n className = '';\n }\n cell.addClass(className);\n if (cell[0]) {\n that._cell = cell;\n }\n if (id) {\n cell.attr(ID, id);\n that._table.removeAttr('aria-activedescendant').attr('aria-activedescendant', id);\n }\n },\n _bindTable: function (table) {\n table.on(FOCUS_WITH_NS, this._addClassProxy).on(BLUR, this._removeClassProxy);\n },\n _click: function (link) {\n var that = this, options = that.options, currentValue = new Date(+that._current), value = that._toDateObject(link);\n adjustDST(value, 0);\n if (that._view.name == 'month' && that.options.disableDates(value)) {\n value = that._value;\n }\n that._view.setDate(currentValue, value);\n that.navigateDown(restrictValue(currentValue, options.min, options.max));\n },\n _focus: function (value) {\n var that = this, view = that._view;\n if (view.compare(value, that._current) !== 0) {\n that.navigate(value);\n } else {\n that._current = value;\n that._class(FOCUSED, value);\n }\n },\n _focusView: function (active, table) {\n if (active) {\n this.focus(table);\n }\n },\n _footer: function (template) {\n var that = this, today = getToday(), element = that.element, footer = element.find('.k-footer');\n if (!template) {\n that._toggle(false);\n footer.hide();\n return;\n }\n if (!footer[0]) {\n footer = $('<div class=\"k-footer\"><a href=\"#\" class=\"k-link k-nav-today\"></a></div>').appendTo(element);\n }\n that._today = footer.show().find('.k-link').html(template(today)).attr('title', kendo.toString(today, 'D', that.options.culture));\n that._toggle();\n },\n _header: function () {\n var that = this, element = that.element, links;\n if (!element.find('.k-header')[0]) {\n element.html('<div class=\"k-header\">' + '<a href=\"#\" role=\"button\" class=\"k-link k-nav-prev\"><span class=\"k-icon k-i-arrow-60-left\"></span></a>' + '<a href=\"#\" role=\"button\" aria-live=\"assertive\" aria-atomic=\"true\" class=\"k-link k-nav-fast\"></a>' + '<a href=\"#\" role=\"button\" class=\"k-link k-nav-next\"><span class=\"k-icon k-i-arrow-60-right\"></span></a>' + '</div>');\n }\n links = element.find('.k-link').on(MOUSEENTER_WITH_NS + ' ' + MOUSELEAVE + ' ' + FOCUS_WITH_NS + ' ' + BLUR, mousetoggle).click(false);\n that._title = links.eq(1).on(CLICK, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateUp();\n });\n that[PREVARROW] = links.eq(0).on(CLICK, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateToPast();\n });\n that[NEXTARROW] = links.eq(2).on(CLICK, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateToFuture();\n });\n },\n _navigate: function (arrow, modifier) {\n var that = this, index = that._index + 1, currentValue = new DATE(+that._current);\n arrow = that[arrow];\n if (!arrow.hasClass(DISABLED)) {\n if (index > 3) {\n currentValue.setFullYear(currentValue.getFullYear() + 100 * modifier);\n } else {\n calendar.views[index].setDate(currentValue, modifier);\n }\n that.navigate(currentValue);\n }\n },\n _option: function (option, value) {\n var that = this, options = that.options, currentValue = that._value || that._current, isBigger;\n if (value === undefined) {\n return options[option];\n }\n value = parse(value, options.format, options.culture);\n if (!value) {\n return;\n }\n options[option] = new DATE(+value);\n if (option === MIN) {\n isBigger = value > currentValue;\n } else {\n isBigger = currentValue > value;\n }\n if (isBigger || isEqualMonth(currentValue, value)) {\n if (isBigger) {\n that._value = null;\n }\n that._changeView = true;\n }\n if (!that._changeView) {\n that._changeView = !!(options.month.content || options.month.empty);\n }\n that.navigate(that._value);\n that._toggle();\n },\n _toggle: function (toggle) {\n var that = this, options = that.options, isTodayDisabled = that.options.disableDates(getToday()), link = that._today;\n if (toggle === undefined) {\n toggle = isInRange(getToday(), options.min, options.max);\n }\n if (link) {\n link.off(CLICK);\n if (toggle && !isTodayDisabled) {\n link.addClass(TODAY).removeClass(DISABLED).on(CLICK, proxy(that._todayClick, that));\n } else {\n link.removeClass(TODAY).addClass(DISABLED).on(CLICK, prevent);\n }\n }\n },\n _todayClick: function (e) {\n var that = this, depth = views[that.options.depth], disabled = that.options.disableDates, today = getToday();\n e.preventDefault();\n if (disabled(today)) {\n return;\n }\n if (that._view.compare(that._current, today) === 0 && that._index == depth) {\n that._changeView = false;\n }\n that._value = today;\n that.navigate(today, depth);\n that.trigger(CHANGE);\n },\n _toDateObject: function (link) {\n var value = $(link).attr(kendo.attr(VALUE)).split('/');\n value = new DATE(value[0], value[1], value[2]);\n return value;\n },\n _templates: function () {\n var that = this, options = that.options, footer = options.footer, month = options.month, content = month.content, weekNumber = month.weekNumber, empty = month.empty;\n that.month = {\n content: template('<td#=data.cssClass# role=\"gridcell\"><a tabindex=\"-1\" class=\"k-link#=data.linkClass#\" href=\"#=data.url#\" ' + kendo.attr('value') + '=\"#=data.dateString#\" title=\"#=data.title#\">' + (content || '#=data.value#') + '</a></td>', { useWithBlock: !!content }),\n empty: template('<td role=\"gridcell\">' + (empty || ' ') + '</td>', { useWithBlock: !!empty }),\n weekNumber: template('<td class=\"k-alt\">' + (weekNumber || '#= data.weekNumber #') + '</td>', { useWithBlock: !!weekNumber })\n };\n that.footer = footer !== false ? template(footer || '#= kendo.toString(data,\"D\",\"' + options.culture + '\") #', { useWithBlock: false }) : null;\n }\n });\n ui.plugin(Calendar);\n var calendar = {\n firstDayOfMonth: function (date) {\n return new DATE(date.getFullYear(), date.getMonth(), 1);\n },\n firstVisibleDay: function (date, calendarInfo) {\n calendarInfo = calendarInfo || kendo.culture().calendar;\n var firstDay = calendarInfo.firstDay, firstVisibleDay = new DATE(date.getFullYear(), date.getMonth(), 0, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n while (firstVisibleDay.getDay() != firstDay) {\n calendar.setTime(firstVisibleDay, -1 * MS_PER_DAY);\n }\n return firstVisibleDay;\n },\n setTime: function (date, time) {\n var tzOffsetBefore = date.getTimezoneOffset(), resultDATE = new DATE(date.getTime() + time), tzOffsetDiff = resultDATE.getTimezoneOffset() - tzOffsetBefore;\n date.setTime(resultDATE.getTime() + tzOffsetDiff * MS_PER_MINUTE);\n },\n views: [\n {\n name: MONTH,\n title: function (date, min, max, culture) {\n return getCalendarInfo(culture).months.names[date.getMonth()] + ' ' + date.getFullYear();\n },\n content: function (options) {\n var that = this, idx = 0, min = options.min, max = options.max, date = options.date, dates = options.dates, format = options.format, culture = options.culture, navigateUrl = options.url, isWeekColumnVisible = options.isWeekColumnVisible, hasUrl = navigateUrl && dates[0], currentCalendar = getCalendarInfo(culture), firstDayIdx = currentCalendar.firstDay, days = currentCalendar.days, names = shiftArray(days.names, firstDayIdx), shortNames = shiftArray(days.namesShort, firstDayIdx), start = calendar.firstVisibleDay(date, currentCalendar), firstDayOfMonth = that.first(date), lastDayOfMonth = that.last(date), toDateString = that.toDateString, today = new DATE(), html = '<table tabindex=\"0\" role=\"grid\" class=\"k-content\" cellspacing=\"0\" data-start=\"' + toDateString(start) + '\"><thead><tr role=\"row\">';\n if (isWeekColumnVisible) {\n html += '<th scope=\"col\" class=\"k-alt\"></th>';\n }\n for (; idx < 7; idx++) {\n html += '<th scope=\"col\" title=\"' + names[idx] + '\">' + shortNames[idx] + '</th>';\n }\n today = new DATE(today.getFullYear(), today.getMonth(), today.getDate());\n adjustDST(today, 0);\n today = +today;\n return view({\n cells: 42,\n perRow: 7,\n html: html += '</tr></thead><tbody><tr role=\"row\">',\n start: start,\n isWeekColumnVisible: isWeekColumnVisible,\n weekNumber: options.weekNumber,\n min: new DATE(min.getFullYear(), min.getMonth(), min.getDate()),\n max: new DATE(max.getFullYear(), max.getMonth(), max.getDate()),\n content: options.content,\n empty: options.empty,\n setter: that.setDate,\n disableDates: options.disableDates,\n build: function (date, idx, disableDates) {\n var cssClass = [], day = date.getDay(), linkClass = '', url = '#';\n if (date < firstDayOfMonth || date > lastDayOfMonth) {\n cssClass.push(OTHERMONTH);\n }\n if (disableDates(date)) {\n cssClass.push(DISABLED);\n }\n if (+date === today) {\n cssClass.push('k-today');\n }\n if (day === 0 || day === 6) {\n cssClass.push('k-weekend');\n }\n if (hasUrl && inArray(+date, dates)) {\n url = navigateUrl.replace('{0}', kendo.toString(date, format, culture));\n linkClass = ' k-action-link';\n }\n return {\n date: date,\n dates: dates,\n ns: kendo.ns,\n title: kendo.toString(date, 'D', culture),\n value: date.getDate(),\n dateString: toDateString(date),\n cssClass: cssClass[0] ? ' class=\"' + cssClass.join(' ') + '\"' : '',\n linkClass: linkClass,\n url: url\n };\n },\n weekNumberBuild: function (date) {\n return {\n weekNumber: weekInYear(date, date),\n currentDate: date\n };\n }\n });\n },\n first: function (date) {\n return calendar.firstDayOfMonth(date);\n },\n last: function (date) {\n var last = new DATE(date.getFullYear(), date.getMonth() + 1, 0), first = calendar.firstDayOfMonth(date), timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n if (timeOffset) {\n last.setHours(first.getHours() + timeOffset / 60);\n }\n return last;\n },\n compare: function (date1, date2) {\n var result, month1 = date1.getMonth(), year1 = date1.getFullYear(), month2 = date2.getMonth(), year2 = date2.getFullYear();\n if (year1 > year2) {\n result = 1;\n } else if (year1 < year2) {\n result = -1;\n } else {\n result = month1 == month2 ? 0 : month1 > month2 ? 1 : -1;\n }\n return result;\n },\n setDate: function (date, value) {\n var hours = date.getHours();\n if (value instanceof DATE) {\n date.setFullYear(value.getFullYear(), value.getMonth(), value.getDate());\n } else {\n calendar.setTime(date, value * MS_PER_DAY);\n }\n adjustDST(date, hours);\n },\n toDateString: function (date) {\n return date.getFullYear() + '/' + date.getMonth() + '/' + date.getDate();\n }\n },\n {\n name: 'year',\n title: function (date) {\n return date.getFullYear();\n },\n content: function (options) {\n var namesAbbr = getCalendarInfo(options.culture).months.namesAbbr, toDateString = this.toDateString, min = options.min, max = options.max;\n return view({\n min: new DATE(min.getFullYear(), min.getMonth(), 1),\n max: new DATE(max.getFullYear(), max.getMonth(), 1),\n start: new DATE(options.date.getFullYear(), 0, 1),\n setter: this.setDate,\n build: function (date) {\n return {\n value: namesAbbr[date.getMonth()],\n ns: kendo.ns,\n dateString: toDateString(date),\n cssClass: ''\n };\n }\n });\n },\n first: function (date) {\n return new DATE(date.getFullYear(), 0, date.getDate());\n },\n last: function (date) {\n return new DATE(date.getFullYear(), 11, date.getDate());\n },\n compare: function (date1, date2) {\n return compare(date1, date2);\n },\n setDate: function (date, value) {\n var month, hours = date.getHours();\n if (value instanceof DATE) {\n month = value.getMonth();\n date.setFullYear(value.getFullYear(), month, date.getDate());\n if (month !== date.getMonth()) {\n date.setDate(0);\n }\n } else {\n month = date.getMonth() + value;\n date.setMonth(month);\n if (month > 11) {\n month -= 12;\n }\n if (month > 0 && date.getMonth() != month) {\n date.setDate(0);\n }\n }\n adjustDST(date, hours);\n },\n toDateString: function (date) {\n return date.getFullYear() + '/' + date.getMonth() + '/1';\n }\n },\n {\n name: 'decade',\n title: function (date, min, max) {\n return title(date, min, max, 10);\n },\n content: function (options) {\n var year = options.date.getFullYear(), toDateString = this.toDateString;\n return view({\n start: new DATE(year - year % 10 - 1, 0, 1),\n min: new DATE(options.min.getFullYear(), 0, 1),\n max: new DATE(options.max.getFullYear(), 0, 1),\n setter: this.setDate,\n build: function (date, idx) {\n return {\n value: date.getFullYear(),\n ns: kendo.ns,\n dateString: toDateString(date),\n cssClass: idx === 0 || idx == 11 ? OTHERMONTHCLASS : ''\n };\n }\n });\n },\n first: function (date) {\n var year = date.getFullYear();\n return new DATE(year - year % 10, date.getMonth(), date.getDate());\n },\n last: function (date) {\n var year = date.getFullYear();\n return new DATE(year - year % 10 + 9, date.getMonth(), date.getDate());\n },\n compare: function (date1, date2) {\n return compare(date1, date2, 10);\n },\n setDate: function (date, value) {\n setDate(date, value, 1);\n },\n toDateString: function (date) {\n return date.getFullYear() + '/0/1';\n }\n },\n {\n name: CENTURY,\n title: function (date, min, max) {\n return title(date, min, max, 100);\n },\n content: function (options) {\n var year = options.date.getFullYear(), min = options.min.getFullYear(), max = options.max.getFullYear(), toDateString = this.toDateString, minYear = min, maxYear = max;\n minYear = minYear - minYear % 10;\n maxYear = maxYear - maxYear % 10;\n if (maxYear - minYear < 10) {\n maxYear = minYear + 9;\n }\n return view({\n start: new DATE(year - year % 100 - 10, 0, 1),\n min: new DATE(minYear, 0, 1),\n max: new DATE(maxYear, 0, 1),\n setter: this.setDate,\n build: function (date, idx) {\n var start = date.getFullYear(), end = start + 9;\n if (start < min) {\n start = min;\n }\n if (end > max) {\n end = max;\n }\n return {\n ns: kendo.ns,\n value: start + ' - ' + end,\n dateString: toDateString(date),\n cssClass: idx === 0 || idx == 11 ? OTHERMONTHCLASS : ''\n };\n }\n });\n },\n first: function (date) {\n var year = date.getFullYear();\n return new DATE(year - year % 100, date.getMonth(), date.getDate());\n },\n last: function (date) {\n var year = date.getFullYear();\n return new DATE(year - year % 100 + 99, date.getMonth(), date.getDate());\n },\n compare: function (date1, date2) {\n return compare(date1, date2, 100);\n },\n setDate: function (date, value) {\n setDate(date, value, 10);\n },\n toDateString: function (date) {\n var year = date.getFullYear();\n return year - year % 10 + '/0/1';\n }\n }\n ]\n };\n function title(date, min, max, modular) {\n var start = date.getFullYear(), minYear = min.getFullYear(), maxYear = max.getFullYear(), end;\n start = start - start % modular;\n end = start + (modular - 1);\n if (start < minYear) {\n start = minYear;\n }\n if (end > maxYear) {\n end = maxYear;\n }\n return start + '-' + end;\n }\n function view(options) {\n var idx = 0, data, min = options.min, max = options.max, start = options.start, setter = options.setter, build = options.build, weekNumberBuild = options.weekNumberBuild, length = options.cells || 12, isWeekColumnVisible = options.isWeekColumnVisible, cellsPerRow = options.perRow || 4, weekNumber = options.weekNumber || weekNumberTemplate, content = options.content || cellTemplate, empty = options.empty || emptyCellTemplate, html = options.html || '<table tabindex=\"0\" role=\"grid\" class=\"k-content k-meta-view\" cellspacing=\"0\"><tbody><tr role=\"row\">';\n if (isWeekColumnVisible) {\n html += weekNumber(weekNumberBuild(start));\n }\n for (; idx < length; idx++) {\n if (idx > 0 && idx % cellsPerRow === 0) {\n html += '</tr><tr role=\"row\">';\n if (isWeekColumnVisible) {\n html += weekNumber(weekNumberBuild(start));\n }\n }\n start = new DATE(start.getFullYear(), start.getMonth(), start.getDate(), 0, 0, 0);\n adjustDST(start, 0);\n data = build(start, idx, options.disableDates);\n html += isInRange(start, min, max) ? content(data) : empty(data);\n setter(start, 1);\n }\n return html + '</tr></tbody></table>';\n }\n function compare(date1, date2, modifier) {\n var year1 = date1.getFullYear(), start = date2.getFullYear(), end = start, result = 0;\n if (modifier) {\n start = start - start % modifier;\n end = start - start % modifier + modifier - 1;\n }\n if (year1 > end) {\n result = 1;\n } else if (year1 < start) {\n result = -1;\n }\n return result;\n }\n function getToday() {\n var today = new DATE();\n return new DATE(today.getFullYear(), today.getMonth(), today.getDate());\n }\n function restrictValue(value, min, max) {\n var today = getToday();\n if (value) {\n today = new DATE(+value);\n }\n if (min > today) {\n today = new DATE(+min);\n } else if (max < today) {\n today = new DATE(+max);\n }\n return today;\n }\n function isInRange(date, min, max) {\n return +date >= +min && +date <= +max;\n }\n function shiftArray(array, idx) {\n return array.slice(idx).concat(array.slice(0, idx));\n }\n function setDate(date, value, multiplier) {\n value = value instanceof DATE ? value.getFullYear() : date.getFullYear() + multiplier * value;\n date.setFullYear(value);\n }\n function mousetoggle(e) {\n var disabled = $(this).hasClass('k-state-disabled');\n if (!disabled) {\n $(this).toggleClass(HOVER, MOUSEENTER.indexOf(e.type) > -1 || e.type == FOCUS);\n }\n }\n function prevent(e) {\n e.preventDefault();\n }\n function getCalendarInfo(culture) {\n return getCulture(culture).calendars.standard;\n }\n function normalize(options) {\n var start = views[options.start], depth = views[options.depth], culture = getCulture(options.culture);\n options.format = extractFormat(options.format || culture.calendars.standard.patterns.d);\n if (isNaN(start)) {\n start = 0;\n options.start = MONTH;\n }\n if (depth === undefined || depth > start) {\n options.depth = MONTH;\n }\n if (options.dates === null) {\n options.dates = [];\n }\n }\n function makeUnselectable(element) {\n if (isIE8) {\n element.find('*').attr('unselectable', 'on');\n }\n }\n function addClassToViewContainer(element, currentView) {\n element.addClass('k-' + currentView);\n }\n function inArray(date, dates) {\n for (var i = 0, length = dates.length; i < length; i++) {\n if (date === +dates[i]) {\n return true;\n }\n }\n return false;\n }\n function isEqualDatePart(value1, value2) {\n if (value1) {\n return value1.getFullYear() === value2.getFullYear() && value1.getMonth() === value2.getMonth() && value1.getDate() === value2.getDate();\n }\n return false;\n }\n function isEqualMonth(value1, value2) {\n if (value1) {\n return value1.getFullYear() === value2.getFullYear() && value1.getMonth() === value2.getMonth();\n }\n return false;\n }\n function getDisabledExpr(option) {\n if (kendo.isFunction(option)) {\n return option;\n }\n if ($.isArray(option)) {\n return createDisabledExpr(option);\n }\n return $.noop;\n }\n function convertDatesArray(dates) {\n var result = [];\n for (var i = 0; i < dates.length; i++) {\n result.push(dates[i].setHours(0, 0, 0, 0));\n }\n return result;\n }\n function createDisabledExpr(dates) {\n var body, callback, disabledDates = [], days = [\n 'su',\n 'mo',\n 'tu',\n 'we',\n 'th',\n 'fr',\n 'sa'\n ], searchExpression = 'if (found) {' + ' return true ' + '} else {' + 'return false' + '}';\n if (dates[0] instanceof DATE) {\n disabledDates = convertDatesArray(dates);\n body = 'var found = date && $.inArray(date.setHours(0, 0, 0, 0),[' + disabledDates + ']) > -1;' + searchExpression;\n } else {\n for (var i = 0; i < dates.length; i++) {\n var day = dates[i].slice(0, 2).toLowerCase();\n var index = $.inArray(day, days);\n if (index > -1) {\n disabledDates.push(index);\n }\n }\n body = 'var found = date && $.inArray(date.getDay(),[' + disabledDates + ']) > -1;' + searchExpression;\n }\n callback = new Function('date', body);\n return callback;\n }\n function isEqualDate(oldValue, newValue) {\n if (oldValue instanceof Date && newValue instanceof Date) {\n oldValue = oldValue.getTime();\n newValue = newValue.getTime();\n }\n return oldValue === newValue;\n }\n calendar.isEqualDatePart = isEqualDatePart;\n calendar.isEqualDate = isEqualDate;\n calendar.makeUnselectable = makeUnselectable;\n calendar.restrictValue = restrictValue;\n calendar.isInRange = isInRange;\n calendar.addClassToViewContainer = addClassToViewContainer;\n calendar.normalize = normalize;\n calendar.viewsEnum = views;\n calendar.disabled = getDisabledExpr;\n kendo.calendar = calendar;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.datepicker', [\n 'kendo.calendar',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'datepicker',\n name: 'DatePicker',\n category: 'web',\n description: 'The DatePicker widget allows the user to select a date from a calendar or by direct input.',\n depends: [\n 'calendar',\n 'popup'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, parse = kendo.parseDate, keys = kendo.keys, template = kendo.template, activeElement = kendo._activeElement, DIV = '<div />', SPAN = '<span />', ns = '.kendoDatePicker', CLICK = 'click' + ns, OPEN = 'open', CLOSE = 'close', CHANGE = 'change', DISABLED = 'disabled', READONLY = 'readonly', DEFAULT = 'k-state-default', FOCUSED = 'k-state-focused', SELECTED = 'k-state-selected', STATEDISABLED = 'k-state-disabled', HOVER = 'k-state-hover', HOVEREVENTS = 'mouseenter' + ns + ' mouseleave' + ns, MOUSEDOWN = 'mousedown' + ns, ID = 'id', MIN = 'min', MAX = 'max', MONTH = 'month', ARIA_DISABLED = 'aria-disabled', ARIA_EXPANDED = 'aria-expanded', ARIA_HIDDEN = 'aria-hidden', calendar = kendo.calendar, isInRange = calendar.isInRange, restrictValue = calendar.restrictValue, isEqualDatePart = calendar.isEqualDatePart, extend = $.extend, proxy = $.proxy, DATE = Date;\n function normalize(options) {\n var parseFormats = options.parseFormats, format = options.format;\n calendar.normalize(options);\n parseFormats = $.isArray(parseFormats) ? parseFormats : [parseFormats];\n if (!parseFormats.length) {\n parseFormats.push('yyyy-MM-dd');\n }\n if ($.inArray(format, parseFormats) === -1) {\n parseFormats.splice(0, 0, options.format);\n }\n options.parseFormats = parseFormats;\n }\n function preventDefault(e) {\n e.preventDefault();\n }\n var DateView = function (options) {\n var that = this, id, body = document.body, div = $(DIV).attr(ARIA_HIDDEN, 'true').addClass('k-calendar-container').appendTo(body);\n that.options = options = options || {};\n id = options.id;\n if (id) {\n id += '_dateview';\n div.attr(ID, id);\n that._dateViewID = id;\n }\n that.popup = new ui.Popup(div, extend(options.popup, options, {\n name: 'Popup',\n isRtl: kendo.support.isRtl(options.anchor)\n }));\n that.div = div;\n that.value(options.value);\n };\n DateView.prototype = {\n _calendar: function () {\n var that = this;\n var calendar = that.calendar;\n var options = that.options;\n var div;\n if (!calendar) {\n div = $(DIV).attr(ID, kendo.guid()).appendTo(that.popup.element).on(MOUSEDOWN, preventDefault).on(CLICK, 'td:has(.k-link)', proxy(that._click, that));\n that.calendar = calendar = new ui.Calendar(div);\n that._setOptions(options);\n kendo.calendar.makeUnselectable(calendar.element);\n calendar.navigate(that._value || that._current, options.start);\n that.value(that._value);\n }\n },\n _setOptions: function (options) {\n this.calendar.setOptions({\n focusOnNav: false,\n change: options.change,\n culture: options.culture,\n dates: options.dates,\n depth: options.depth,\n footer: options.footer,\n format: options.format,\n max: options.max,\n min: options.min,\n month: options.month,\n weekNumber: options.weekNumber,\n start: options.start,\n disableDates: options.disableDates\n });\n },\n setOptions: function (options) {\n var old = this.options;\n var disableDates = options.disableDates;\n if (disableDates) {\n options.disableDates = calendar.disabled(disableDates);\n }\n this.options = extend(old, options, {\n change: old.change,\n close: old.close,\n open: old.open\n });\n if (this.calendar) {\n this._setOptions(this.options);\n }\n },\n destroy: function () {\n this.popup.destroy();\n },\n open: function () {\n var that = this;\n that._calendar();\n that.popup.open();\n },\n close: function () {\n this.popup.close();\n },\n min: function (value) {\n this._option(MIN, value);\n },\n max: function (value) {\n this._option(MAX, value);\n },\n toggle: function () {\n var that = this;\n that[that.popup.visible() ? CLOSE : OPEN]();\n },\n move: function (e) {\n var that = this, key = e.keyCode, calendar = that.calendar, selectIsClicked = e.ctrlKey && key == keys.DOWN || key == keys.ENTER, handled = false;\n if (e.altKey) {\n if (key == keys.DOWN) {\n that.open();\n e.preventDefault();\n handled = true;\n } else if (key == keys.UP) {\n that.close();\n e.preventDefault();\n handled = true;\n }\n } else if (that.popup.visible()) {\n if (key == keys.ESC || selectIsClicked && calendar._cell.hasClass(SELECTED)) {\n that.close();\n e.preventDefault();\n return true;\n }\n that._current = calendar._move(e);\n handled = true;\n }\n return handled;\n },\n current: function (date) {\n this._current = date;\n this.calendar._focus(date);\n },\n value: function (value) {\n var that = this, calendar = that.calendar, options = that.options, disabledDate = options.disableDates;\n if (disabledDate && disabledDate(value)) {\n value = null;\n }\n that._value = value;\n that._current = new DATE(+restrictValue(value, options.min, options.max));\n if (calendar) {\n calendar.value(value);\n }\n },\n _click: function (e) {\n if (e.currentTarget.className.indexOf(SELECTED) !== -1) {\n this.close();\n }\n },\n _option: function (option, value) {\n var that = this;\n var calendar = that.calendar;\n that.options[option] = value;\n if (calendar) {\n calendar[option](value);\n }\n }\n };\n DateView.normalize = normalize;\n kendo.DateView = DateView;\n var DatePicker = Widget.extend({\n init: function (element, options) {\n var that = this, disabled, div;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n options.disableDates = kendo.calendar.disabled(options.disableDates);\n options.min = parse(element.attr('min')) || parse(options.min);\n options.max = parse(element.attr('max')) || parse(options.max);\n normalize(options);\n that._initialOptions = extend({}, options);\n that._wrapper();\n that.dateView = new DateView(extend({}, options, {\n id: element.attr(ID),\n anchor: that.wrapper,\n change: function () {\n that._change(this.value());\n that.close();\n },\n close: function (e) {\n if (that.trigger(CLOSE)) {\n e.preventDefault();\n } else {\n element.attr(ARIA_EXPANDED, false);\n div.attr(ARIA_HIDDEN, true);\n }\n },\n open: function (e) {\n var options = that.options, date;\n if (that.trigger(OPEN)) {\n e.preventDefault();\n } else {\n if (that.element.val() !== that._oldText) {\n date = parse(element.val(), options.parseFormats, options.culture);\n that.dateView[date ? 'current' : 'value'](date);\n }\n element.attr(ARIA_EXPANDED, true);\n div.attr(ARIA_HIDDEN, false);\n that._updateARIA(date);\n }\n }\n }));\n div = that.dateView.div;\n that._icon();\n try {\n element[0].setAttribute('type', 'text');\n } catch (e) {\n element[0].type = 'text';\n }\n element.addClass('k-input').attr({\n role: 'combobox',\n 'aria-expanded': false,\n 'aria-owns': that.dateView._dateViewID\n });\n that._reset();\n that._template();\n disabled = element.is('[disabled]') || $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n } else {\n that.readonly(element.is('[readonly]'));\n }\n that._old = that._update(options.value || that.element.val());\n that._oldText = element.val();\n kendo.notify(that);\n },\n events: [\n OPEN,\n CLOSE,\n CHANGE\n ],\n options: {\n name: 'DatePicker',\n value: null,\n footer: '',\n format: '',\n culture: '',\n parseFormats: [],\n min: new Date(1900, 0, 1),\n max: new Date(2099, 11, 31),\n start: MONTH,\n depth: MONTH,\n animation: {},\n month: {},\n dates: [],\n ARIATemplate: 'Current focused date is #=kendo.toString(data.current, \"D\")#'\n },\n setOptions: function (options) {\n var that = this;\n var value = that._value;\n Widget.fn.setOptions.call(that, options);\n options = that.options;\n options.min = parse(options.min);\n options.max = parse(options.max);\n normalize(options);\n that.dateView.setOptions(options);\n if (value) {\n that.element.val(kendo.toString(value, options.format, options.culture));\n that._updateARIA(value);\n }\n },\n _editable: function (options) {\n var that = this, icon = that._dateIcon.off(ns), element = that.element.off(ns), wrapper = that._inputWrapper.off(ns), readonly = options.readonly, disable = options.disable;\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n element.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false).on('keydown' + ns, proxy(that._keydown, that)).on('focusout' + ns, proxy(that._blur, that)).on('focus' + ns, function () {\n that._inputWrapper.addClass(FOCUSED);\n });\n icon.on(CLICK, proxy(that._click, that)).on(MOUSEDOWN, preventDefault);\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n element.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable);\n }\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.dateView.destroy();\n that.element.off(ns);\n that._dateIcon.off(ns);\n that._inputWrapper.off(ns);\n if (that._form) {\n that._form.off('reset', that._resetHandler);\n }\n },\n open: function () {\n this.dateView.open();\n },\n close: function () {\n this.dateView.close();\n },\n min: function (value) {\n return this._option(MIN, value);\n },\n max: function (value) {\n return this._option(MAX, value);\n },\n value: function (value) {\n var that = this;\n if (value === undefined) {\n return that._value;\n }\n that._old = that._update(value);\n if (that._old === null) {\n that.element.val('');\n }\n that._oldText = that.element.val();\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _blur: function () {\n var that = this, value = that.element.val();\n that.close();\n if (value !== that._oldText) {\n that._change(value);\n }\n that._inputWrapper.removeClass(FOCUSED);\n },\n _click: function () {\n var that = this, element = that.element;\n that.dateView.toggle();\n if (!kendo.support.touch && element[0] !== activeElement()) {\n element.focus();\n }\n },\n _change: function (value) {\n var that = this, oldValue = that.element.val(), dateChanged;\n value = that._update(value);\n dateChanged = !kendo.calendar.isEqualDate(that._old, value);\n var valueUpdated = dateChanged && !that._typing;\n var textFormatted = oldValue !== that.element.val();\n if (valueUpdated || textFormatted) {\n that.element.trigger(CHANGE);\n }\n if (dateChanged) {\n that._old = value;\n that._oldText = that.element.val();\n that.trigger(CHANGE);\n }\n that._typing = false;\n },\n _keydown: function (e) {\n var that = this, dateView = that.dateView, value = that.element.val(), handled = false;\n if (!dateView.popup.visible() && e.keyCode == keys.ENTER && value !== that._oldText) {\n that._change(value);\n } else {\n handled = dateView.move(e);\n that._updateARIA(dateView._current);\n if (!handled) {\n that._typing = true;\n }\n }\n },\n _icon: function () {\n var that = this, element = that.element, icon;\n icon = element.next('span.k-select');\n if (!icon[0]) {\n icon = $('<span unselectable=\"on\" class=\"k-select\" aria-label=\"select\"><span class=\"k-icon k-i-calendar\"></span></span>').insertAfter(element);\n }\n that._dateIcon = icon.attr({\n 'role': 'button',\n 'aria-controls': that.dateView._dateViewID\n });\n },\n _option: function (option, value) {\n var that = this, options = that.options;\n if (value === undefined) {\n return options[option];\n }\n value = parse(value, options.parseFormats, options.culture);\n if (!value) {\n return;\n }\n options[option] = new DATE(+value);\n that.dateView[option](value);\n },\n _update: function (value) {\n var that = this, options = that.options, min = options.min, max = options.max, current = that._value, date = parse(value, options.parseFormats, options.culture), isSameType = date === null && current === null || date instanceof Date && current instanceof Date, formattedValue;\n if (options.disableDates(date)) {\n date = null;\n if (!that._old && !that.element.val()) {\n value = null;\n }\n }\n if (+date === +current && isSameType) {\n formattedValue = kendo.toString(date, options.format, options.culture);\n if (formattedValue !== value) {\n that.element.val(date === null ? value : formattedValue);\n }\n return date;\n }\n if (date !== null && isEqualDatePart(date, min)) {\n date = restrictValue(date, min, max);\n } else if (!isInRange(date, min, max)) {\n date = null;\n }\n that._value = date;\n that.dateView.value(date);\n that.element.val(kendo.toString(date || value, options.format, options.culture));\n that._updateARIA(date);\n return date;\n },\n _wrapper: function () {\n var that = this, element = that.element, wrapper;\n wrapper = element.parents('.k-datepicker');\n if (!wrapper[0]) {\n wrapper = element.wrap(SPAN).parent().addClass('k-picker-wrap k-state-default');\n wrapper = wrapper.wrap(SPAN).parent();\n }\n wrapper[0].style.cssText = element[0].style.cssText;\n element.css({\n width: '100%',\n height: element[0].style.height\n });\n that.wrapper = wrapper.addClass('k-widget k-datepicker k-header').addClass(element[0].className);\n that._inputWrapper = $(wrapper[0].firstChild);\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n that.value(element[0].defaultValue);\n that.max(that._initialOptions.max);\n that.min(that._initialOptions.min);\n };\n that._form = form.on('reset', that._resetHandler);\n }\n },\n _template: function () {\n this._ariaTemplate = template(this.options.ARIATemplate);\n },\n _updateARIA: function (date) {\n var cell;\n var that = this;\n var calendar = that.dateView.calendar;\n that.element.removeAttr('aria-activedescendant');\n if (calendar) {\n cell = calendar._cell;\n cell.attr('aria-label', that._ariaTemplate({ current: date || calendar.current() }));\n that.element.attr('aria-activedescendant', cell.attr('id'));\n }\n }\n });\n ui.plugin(DatePicker);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.autocomplete', [\n 'kendo.list',\n 'kendo.mobile.scroller'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'autocomplete',\n name: 'AutoComplete',\n category: 'web',\n description: 'The AutoComplete widget provides suggestions depending on the typed text.It also allows multiple value entries.',\n depends: ['list'],\n features: [\n {\n id: 'mobile-scroller',\n name: 'Mobile scroller',\n description: 'Support for kinetic scrolling in mobile device',\n depends: ['mobile.scroller']\n },\n {\n id: 'virtualization',\n name: 'VirtualList',\n description: 'Support for virtualization',\n depends: ['virtuallist']\n }\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, caret = kendo.caret, activeElement = kendo._activeElement, placeholderSupported = support.placeholder, ui = kendo.ui, List = ui.List, keys = kendo.keys, DataSource = kendo.data.DataSource, ARIA_DISABLED = 'aria-disabled', ARIA_READONLY = 'aria-readonly', CHANGE = 'change', DEFAULT = 'k-state-default', DISABLED = 'disabled', READONLY = 'readonly', FOCUSED = 'k-state-focused', SELECTED = 'k-state-selected', STATEDISABLED = 'k-state-disabled', HOVER = 'k-state-hover', ns = '.kendoAutoComplete', HOVEREVENTS = 'mouseenter' + ns + ' mouseleave' + ns, proxy = $.proxy;\n function indexOfWordAtCaret(caretIdx, text, separator) {\n return separator ? text.substring(0, caretIdx).split(separator).length - 1 : 0;\n }\n function wordAtCaret(caretIdx, text, separator) {\n return text.split(separator)[indexOfWordAtCaret(caretIdx, text, separator)];\n }\n function replaceWordAtCaret(caretIdx, text, word, separator, defaultSeparator) {\n var words = text.split(separator);\n words.splice(indexOfWordAtCaret(caretIdx, text, separator), 1, word);\n if (separator && words[words.length - 1] !== '') {\n words.push('');\n }\n return words.join(defaultSeparator);\n }\n var AutoComplete = List.extend({\n init: function (element, options) {\n var that = this, wrapper, disabled;\n that.ns = ns;\n options = $.isArray(options) ? { dataSource: options } : options;\n List.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n options.placeholder = options.placeholder || element.attr('placeholder');\n if (placeholderSupported) {\n element.attr('placeholder', options.placeholder);\n }\n that._wrapper();\n that._loader();\n that._clearButton();\n that._dataSource();\n that._ignoreCase();\n element[0].type = 'text';\n wrapper = that.wrapper;\n that._popup();\n element.addClass('k-input').on('keydown' + ns, proxy(that._keydown, that)).on('keypress' + ns, proxy(that._keypress, that)).on('paste' + ns, proxy(that._search, that)).on('focus' + ns, function () {\n that._prev = that._accessor();\n that._oldText = that._prev;\n that._placeholder(false);\n wrapper.addClass(FOCUSED);\n }).on('focusout' + ns, function () {\n that._change();\n that._placeholder();\n wrapper.removeClass(FOCUSED);\n }).attr({\n autocomplete: 'off',\n role: 'textbox',\n 'aria-haspopup': true\n });\n that._clear.on('click' + ns, proxy(that._clearValue, that));\n that._enable();\n that._old = that._accessor();\n if (element[0].id) {\n element.attr('aria-owns', that.ul[0].id);\n }\n that._aria();\n that._placeholder();\n that._initList();\n disabled = $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n }\n that.listView.bind('click', function (e) {\n e.preventDefault();\n });\n that._resetFocusItemHandler = $.proxy(that._resetFocusItem, that);\n kendo.notify(that);\n },\n options: {\n name: 'AutoComplete',\n enabled: true,\n suggest: false,\n template: '',\n groupTemplate: '#:data#',\n fixedGroupTemplate: '#:data#',\n dataTextField: '',\n minLength: 1,\n enforceMinLength: false,\n delay: 200,\n height: 200,\n filter: 'startswith',\n ignoreCase: true,\n highlightFirst: false,\n separator: null,\n placeholder: '',\n animation: {},\n virtual: false,\n value: null,\n clearButton: true\n },\n _dataSource: function () {\n var that = this;\n if (that.dataSource && that._refreshHandler) {\n that._unbindDataSource();\n } else {\n that._progressHandler = proxy(that._showBusy, that);\n that._errorHandler = proxy(that._hideBusy, that);\n }\n that.dataSource = DataSource.create(that.options.dataSource).bind('progress', that._progressHandler).bind('error', that._errorHandler);\n },\n setDataSource: function (dataSource) {\n this.options.dataSource = dataSource;\n this._dataSource();\n this.listView.setDataSource(this.dataSource);\n },\n events: [\n 'open',\n 'close',\n CHANGE,\n 'select',\n 'filtering',\n 'dataBinding',\n 'dataBound'\n ],\n setOptions: function (options) {\n var listOptions = this._listOptions(options);\n List.fn.setOptions.call(this, options);\n this.listView.setOptions(listOptions);\n this._accessors();\n this._aria();\n },\n _listOptions: function (options) {\n var listOptions = List.fn._listOptions.call(this, $.extend(options, { skipUpdateOnBind: true }));\n listOptions.dataValueField = listOptions.dataTextField;\n listOptions.selectedItemChange = null;\n return listOptions;\n },\n _editable: function (options) {\n var that = this, element = that.element, wrapper = that.wrapper.off(ns), readonly = options.readonly, disable = options.disable;\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n element.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false).attr(ARIA_READONLY, false);\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n element.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable).attr(ARIA_READONLY, readonly);\n }\n },\n close: function () {\n var that = this;\n var current = that.listView.focus();\n if (current) {\n current.removeClass(SELECTED);\n }\n that.popup.close();\n },\n destroy: function () {\n var that = this;\n that.element.off(ns);\n that._clear.off(ns);\n that.wrapper.off(ns);\n List.fn.destroy.call(that);\n },\n refresh: function () {\n this.listView.refresh();\n },\n select: function (li) {\n this._select(li);\n },\n search: function (word) {\n var that = this, options = that.options, ignoreCase = options.ignoreCase, separator = that._separator(), length;\n word = word || that._accessor();\n clearTimeout(that._typingTimeout);\n if (separator) {\n word = wordAtCaret(caret(that.element)[0], word, separator);\n }\n length = word.length;\n if (!options.enforceMinLength && !length || length >= options.minLength) {\n that._open = true;\n that._mute(function () {\n this.listView.value([]);\n });\n that._filterSource({\n value: ignoreCase ? word.toLowerCase() : word,\n operator: options.filter,\n field: options.dataTextField,\n ignoreCase: ignoreCase\n });\n that.one('close', $.proxy(that._unifySeparators, that));\n }\n },\n suggest: function (word) {\n var that = this, key = that._last, value = that._accessor(), element = that.element[0], caretIdx = caret(element)[0], separator = that._separator(), words = value.split(separator), wordIndex = indexOfWordAtCaret(caretIdx, value, separator), selectionEnd = caretIdx, idx;\n if (key == keys.BACKSPACE || key == keys.DELETE) {\n that._last = undefined;\n return;\n }\n word = word || '';\n if (typeof word !== 'string') {\n if (word[0]) {\n word = that.dataSource.view()[List.inArray(word[0], that.ul[0])];\n }\n word = word ? that._text(word) : '';\n }\n if (caretIdx <= 0) {\n caretIdx = value.toLowerCase().indexOf(word.toLowerCase()) + 1;\n }\n idx = value.substring(0, caretIdx).lastIndexOf(separator);\n idx = idx > -1 ? caretIdx - (idx + separator.length) : caretIdx;\n value = words[wordIndex].substring(0, idx);\n if (word) {\n word = word.toString();\n idx = word.toLowerCase().indexOf(value.toLowerCase());\n if (idx > -1) {\n word = word.substring(idx + value.length);\n selectionEnd = caretIdx + word.length;\n value += word;\n }\n if (separator && words[words.length - 1] !== '') {\n words.push('');\n }\n }\n words[wordIndex] = value;\n that._accessor(words.join(separator || ''));\n if (element === activeElement()) {\n caret(element, caretIdx, selectionEnd);\n }\n },\n value: function (value) {\n if (value !== undefined) {\n this.listView.value(value);\n this._accessor(value);\n this._old = this._accessor();\n this._oldText = this._accessor();\n } else {\n return this._accessor();\n }\n },\n _click: function (e) {\n var item = e.item;\n var that = this;\n var element = that.element;\n var dataItem = that.listView.dataItemByIndex(that.listView.getElementIndex(item));\n e.preventDefault();\n that._active = true;\n if (that.trigger('select', {\n dataItem: dataItem,\n item: item\n })) {\n that.close();\n return;\n }\n that._oldText = element.val();\n that._select(item).done(function () {\n that._blur();\n caret(element, element.val().length);\n });\n },\n _clearText: $.noop,\n _resetFocusItem: function () {\n var index = this.options.highlightFirst ? 0 : -1;\n if (this.options.virtual) {\n this.listView.scrollTo(0);\n }\n this.listView.focus(index);\n },\n _listBound: function () {\n var that = this;\n var popup = that.popup;\n var options = that.options;\n var data = that.dataSource.flatView();\n var length = data.length;\n var isActive = that.element[0] === activeElement();\n var action;\n that._renderFooter();\n that._renderNoData();\n that._toggleNoData(!data.length);\n that._resizePopup();\n popup.position();\n if (length) {\n if (options.suggest && isActive) {\n that.suggest(data[0]);\n }\n }\n if (that._open) {\n that._open = false;\n action = that._allowOpening() ? 'open' : 'close';\n if (that._typingTimeout && !isActive) {\n action = 'close';\n }\n if (length) {\n that._resetFocusItem();\n if (options.virtual) {\n that.popup.unbind('activate', that._resetFocusItemHandler).one('activate', that._resetFocusItemHandler);\n }\n }\n popup[action]();\n that._typingTimeout = undefined;\n }\n if (that._touchScroller) {\n that._touchScroller.reset();\n }\n that._hideBusy();\n that._makeUnselectable();\n that.trigger('dataBound');\n },\n _mute: function (callback) {\n this._muted = true;\n callback.call(this);\n this._muted = false;\n },\n _listChange: function () {\n var isActive = this._active || this.element[0] === activeElement();\n if (isActive && !this._muted) {\n this._selectValue(this.listView.selectedDataItems()[0]);\n }\n },\n _selectValue: function (dataItem) {\n var separator = this._separator();\n var text = '';\n if (dataItem) {\n text = this._text(dataItem);\n }\n if (text === null) {\n text = '';\n }\n if (separator) {\n text = replaceWordAtCaret(caret(this.element)[0], this._accessor(), text, separator, this._defaultSeparator());\n }\n this._prev = text;\n this._accessor(text);\n this._placeholder();\n },\n _unifySeparators: function () {\n this._accessor(this.value().split(this._separator()).join(this._defaultSeparator()));\n return this;\n },\n _change: function () {\n var that = this;\n var value = that._unifySeparators().value();\n var trigger = value !== List.unifyType(that._old, typeof value);\n var valueUpdated = trigger && !that._typing;\n var itemSelected = that._oldText !== value;\n that._old = value;\n that._oldText = value;\n if (valueUpdated || itemSelected) {\n that.element.trigger(CHANGE);\n }\n if (trigger) {\n that.trigger(CHANGE);\n }\n that.typing = false;\n },\n _accessor: function (value) {\n var that = this, element = that.element[0];\n if (value !== undefined) {\n element.value = value === null ? '' : value;\n that._placeholder();\n } else {\n value = element.value;\n if (element.className.indexOf('k-readonly') > -1) {\n if (value === that.options.placeholder) {\n return '';\n } else {\n return value;\n }\n }\n return value;\n }\n },\n _keydown: function (e) {\n var that = this;\n var key = e.keyCode;\n var listView = that.listView;\n var visible = that.popup.visible();\n var current = listView.focus();\n that._last = key;\n if (key === keys.DOWN) {\n if (visible) {\n this._move(current ? 'focusNext' : 'focusFirst');\n }\n e.preventDefault();\n } else if (key === keys.UP) {\n if (visible) {\n this._move(current ? 'focusPrev' : 'focusLast');\n }\n e.preventDefault();\n } else if (key === keys.ENTER || key === keys.TAB) {\n if (key === keys.ENTER && visible) {\n e.preventDefault();\n }\n if (visible && current) {\n var dataItem = listView.dataItemByIndex(listView.getElementIndex(current));\n if (that.trigger('select', {\n dataItem: dataItem,\n item: current\n })) {\n return;\n }\n this._select(current);\n }\n this._blur();\n } else if (key === keys.ESC) {\n if (visible) {\n e.preventDefault();\n }\n that.close();\n } else if (that.popup.visible() && (key === keys.PAGEDOWN || key === keys.PAGEUP)) {\n e.preventDefault();\n var direction = key === keys.PAGEDOWN ? 1 : -1;\n listView.scrollWith(direction * listView.screenHeight());\n } else {\n that._search();\n }\n },\n _keypress: function () {\n this._oldText = this.element.val();\n this._typing = true;\n },\n _move: function (action) {\n this.listView[action]();\n if (this.options.suggest) {\n this.suggest(this.listView.focus());\n }\n },\n _hideBusy: function () {\n var that = this;\n clearTimeout(that._busy);\n that._loading.hide();\n that.element.attr('aria-busy', false);\n that._busy = null;\n that._showClear();\n },\n _showBusy: function () {\n var that = this;\n if (that._busy) {\n return;\n }\n that._busy = setTimeout(function () {\n that.element.attr('aria-busy', true);\n that._loading.show();\n that._hideClear();\n }, 100);\n },\n _placeholder: function (show) {\n if (placeholderSupported) {\n return;\n }\n var that = this, element = that.element, placeholder = that.options.placeholder, value;\n if (placeholder) {\n value = element.val();\n if (show === undefined) {\n show = !value;\n }\n if (!show) {\n if (value !== placeholder) {\n placeholder = value;\n } else {\n placeholder = '';\n }\n }\n if (value === that._old && !show) {\n return;\n }\n element.toggleClass('k-readonly', show).val(placeholder);\n if (!placeholder && element[0] === document.activeElement) {\n caret(element[0], 0, 0);\n }\n }\n },\n _separator: function () {\n var separator = this.options.separator;\n if (separator instanceof Array) {\n return new RegExp(separator.join('|'), 'gi');\n }\n return separator;\n },\n _defaultSeparator: function () {\n var separator = this.options.separator;\n if (separator instanceof Array) {\n return separator[0];\n }\n return separator;\n },\n _inputValue: function () {\n return this.element.val();\n },\n _search: function () {\n var that = this;\n clearTimeout(that._typingTimeout);\n that._typingTimeout = setTimeout(function () {\n if (that._prev !== that._accessor()) {\n that._prev = that._accessor();\n that.search();\n }\n }, that.options.delay);\n },\n _select: function (candidate) {\n var that = this;\n that._active = true;\n return that.listView.select(candidate).done(function () {\n that._active = false;\n });\n },\n _loader: function () {\n this._loading = $('<span class=\"k-icon k-i-loading\" style=\"display:none\"></span>').insertAfter(this.element);\n },\n _clearButton: function () {\n this._clear = $('<span unselectable=\"on\" class=\"k-icon k-clear-value k-i-close\" title=\"clear\"></span>').attr({\n 'role': 'button',\n 'tabIndex': -1\n });\n if (this.options.clearButton) {\n this._clear.insertAfter(this.element);\n }\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _wrapper: function () {\n var that = this, element = that.element, DOMelement = element[0], wrapper;\n wrapper = element.parent();\n if (!wrapper.is('span.k-widget')) {\n wrapper = element.wrap('<span />').parent();\n }\n wrapper.attr('tabindex', -1);\n wrapper.attr('role', 'presentation');\n wrapper[0].style.cssText = DOMelement.style.cssText;\n element.css({\n width: '100%',\n height: DOMelement.style.height\n });\n that._focused = that.element;\n that.wrapper = wrapper.addClass('k-widget k-autocomplete k-header').addClass(DOMelement.className);\n }\n });\n ui.plugin(AutoComplete);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dropdownlist', [\n 'kendo.list',\n 'kendo.mobile.scroller'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dropdownlist',\n name: 'DropDownList',\n category: 'web',\n description: 'The DropDownList widget displays a list of values and allows the selection of a single value from the list.',\n depends: ['list'],\n features: [\n {\n id: 'mobile-scroller',\n name: 'Mobile scroller',\n description: 'Support for kinetic scrolling in mobile device',\n depends: ['mobile.scroller']\n },\n {\n id: 'virtualization',\n name: 'VirtualList',\n description: 'Support for virtualization',\n depends: ['virtuallist']\n }\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, List = ui.List, Select = ui.Select, support = kendo.support, activeElement = kendo._activeElement, ObservableObject = kendo.data.ObservableObject, keys = kendo.keys, ns = '.kendoDropDownList', DISABLED = 'disabled', READONLY = 'readonly', CHANGE = 'change', FOCUSED = 'k-state-focused', DEFAULT = 'k-state-default', STATEDISABLED = 'k-state-disabled', ARIA_DISABLED = 'aria-disabled', HOVEREVENTS = 'mouseenter' + ns + ' mouseleave' + ns, TABINDEX = 'tabindex', STATE_FILTER = 'filter', STATE_ACCEPT = 'accept', MSG_INVALID_OPTION_LABEL = 'The `optionLabel` option is not valid due to missing fields. Define a custom optionLabel as shown here http://docs.telerik.com/kendo-ui/api/javascript/ui/dropdownlist#configuration-optionLabel', proxy = $.proxy;\n var DropDownList = Select.extend({\n init: function (element, options) {\n var that = this;\n var index = options && options.index;\n var optionLabel, text, disabled;\n that.ns = ns;\n options = $.isArray(options) ? { dataSource: options } : options;\n Select.fn.init.call(that, element, options);\n options = that.options;\n element = that.element.on('focus' + ns, proxy(that._focusHandler, that));\n that._focusInputHandler = $.proxy(that._focusInput, that);\n that.optionLabel = $();\n that._optionLabel();\n that._inputTemplate();\n that._reset();\n that._prev = '';\n that._word = '';\n that._wrapper();\n that._tabindex();\n that.wrapper.data(TABINDEX, that.wrapper.attr(TABINDEX));\n that._span();\n that._popup();\n that._mobile();\n that._dataSource();\n that._ignoreCase();\n that._filterHeader();\n that._aria();\n that._enable();\n that._oldIndex = that.selectedIndex = -1;\n if (index !== undefined) {\n options.index = index;\n }\n that._initialIndex = options.index;\n that.requireValueMapper(that.options);\n that._initList();\n that._cascade();\n if (options.autoBind) {\n that.dataSource.fetch();\n } else if (that.selectedIndex === -1) {\n text = options.text || '';\n if (!text) {\n optionLabel = options.optionLabel;\n if (optionLabel && options.index === 0) {\n text = optionLabel;\n } else if (that._isSelect) {\n text = element.children(':selected').text();\n }\n }\n that._textAccessor(text);\n }\n disabled = $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n }\n that.listView.bind('click', function (e) {\n e.preventDefault();\n });\n kendo.notify(that);\n },\n options: {\n name: 'DropDownList',\n enabled: true,\n autoBind: true,\n index: 0,\n text: null,\n value: null,\n delay: 500,\n height: 200,\n dataTextField: '',\n dataValueField: '',\n optionLabel: '',\n cascadeFrom: '',\n cascadeFromField: '',\n ignoreCase: true,\n animation: {},\n filter: 'none',\n minLength: 1,\n enforceMinLength: false,\n virtual: false,\n template: null,\n valueTemplate: null,\n optionLabelTemplate: null,\n groupTemplate: '#:data#',\n fixedGroupTemplate: '#:data#'\n },\n events: [\n 'open',\n 'close',\n CHANGE,\n 'select',\n 'filtering',\n 'dataBinding',\n 'dataBound',\n 'cascade',\n 'set'\n ],\n setOptions: function (options) {\n Select.fn.setOptions.call(this, options);\n this.listView.setOptions(this._listOptions(options));\n this._optionLabel();\n this._inputTemplate();\n this._accessors();\n this._filterHeader();\n this._enable();\n this._aria();\n if (!this.value() && this.hasOptionLabel()) {\n this.select(0);\n }\n },\n destroy: function () {\n var that = this;\n Select.fn.destroy.call(that);\n that.wrapper.off(ns);\n that.element.off(ns);\n that._inputWrapper.off(ns);\n that._arrow.off();\n that._arrow = null;\n that._arrowIcon = null;\n that.optionLabel.off();\n },\n open: function () {\n var that = this;\n if (that.popup.visible()) {\n return;\n }\n if (!that.listView.bound() || that._state === STATE_ACCEPT) {\n that._open = true;\n that._state = 'rebind';\n if (that.filterInput) {\n that.filterInput.val('');\n that._prev = '';\n }\n if (that.filterInput && that.options.minLength !== 1) {\n that.refresh();\n that.popup.one('activate', that._focusInputHandler);\n that.popup.open();\n that._resizeFilterInput();\n } else {\n that._filterSource();\n }\n } else if (that._allowOpening()) {\n that.popup.one('activate', that._focusInputHandler);\n that.popup.open();\n that._resizeFilterInput();\n that._focusItem();\n }\n },\n _focusInput: function () {\n this._focusElement(this.filterInput);\n },\n _resizeFilterInput: function () {\n var filterInput = this.filterInput;\n var originalPrevent = this._prevent;\n if (!filterInput) {\n return;\n }\n var isInputActive = this.filterInput[0] === activeElement();\n var caret = kendo.caret(this.filterInput[0])[0];\n this._prevent = true;\n filterInput.css('display', 'none').css('width', this.popup.element.css('width')).css('display', 'inline-block');\n if (isInputActive) {\n filterInput.focus();\n kendo.caret(filterInput[0], caret);\n }\n this._prevent = originalPrevent;\n },\n _allowOpening: function () {\n return this.hasOptionLabel() || this.filterInput || Select.fn._allowOpening.call(this);\n },\n toggle: function (toggle) {\n this._toggle(toggle, true);\n },\n current: function (candidate) {\n var current;\n if (candidate === undefined) {\n current = this.listView.focus();\n if (!current && this.selectedIndex === 0 && this.hasOptionLabel()) {\n return this.optionLabel;\n }\n return current;\n }\n this._focus(candidate);\n },\n dataItem: function (index) {\n var that = this;\n var dataItem = null;\n if (index === null) {\n return index;\n }\n if (index === undefined) {\n dataItem = that.listView.selectedDataItems()[0];\n } else {\n if (typeof index !== 'number') {\n if (that.options.virtual) {\n return that.dataSource.getByUid($(index).data('uid'));\n }\n if (index.hasClass('k-list-optionlabel')) {\n index = -1;\n } else {\n index = $(that.items()).index(index);\n }\n } else if (that.hasOptionLabel()) {\n index -= 1;\n }\n dataItem = that.dataSource.flatView()[index];\n }\n if (!dataItem) {\n dataItem = that._optionLabelDataItem();\n }\n return dataItem;\n },\n refresh: function () {\n this.listView.refresh();\n },\n text: function (text) {\n var that = this;\n var loweredText;\n var ignoreCase = that.options.ignoreCase;\n text = text === null ? '' : text;\n if (text !== undefined) {\n if (typeof text !== 'string') {\n that._textAccessor(text);\n return;\n }\n loweredText = ignoreCase ? text.toLowerCase() : text;\n that._select(function (data) {\n data = that._text(data);\n if (ignoreCase) {\n data = (data + '').toLowerCase();\n }\n return data === loweredText;\n }).done(function () {\n that._textAccessor(that.dataItem() || text);\n });\n } else {\n return that._textAccessor();\n }\n },\n _clearFilter: function () {\n $(this.filterInput).val('');\n Select.fn._clearFilter.call(this);\n },\n value: function (value) {\n var that = this;\n var listView = that.listView;\n var dataSource = that.dataSource;\n if (value === undefined) {\n value = that._accessor() || that.listView.value()[0];\n return value === undefined || value === null ? '' : value;\n }\n that.requireValueMapper(that.options, value);\n if (value || !that.hasOptionLabel()) {\n that._initialIndex = null;\n }\n this.trigger('set', { value: value });\n if (that._request && that.options.cascadeFrom && that.listView.bound()) {\n if (that._valueSetter) {\n dataSource.unbind(CHANGE, that._valueSetter);\n }\n that._valueSetter = proxy(function () {\n that.value(value);\n }, that);\n dataSource.one(CHANGE, that._valueSetter);\n return;\n }\n if (that._isFilterEnabled() && listView.bound() && listView.isFiltered()) {\n that._clearFilter();\n } else {\n that._fetchData();\n }\n listView.value(value).done(function () {\n that._old = that._accessor();\n that._oldIndex = that.selectedIndex;\n });\n },\n hasOptionLabel: function () {\n return this.optionLabel && !!this.optionLabel[0];\n },\n _optionLabel: function () {\n var that = this;\n var options = that.options;\n var optionLabel = options.optionLabel;\n var template = options.optionLabelTemplate;\n if (!optionLabel) {\n that.optionLabel.off().remove();\n that.optionLabel = $();\n return;\n }\n if (!template) {\n template = '#:';\n if (typeof optionLabel === 'string') {\n template += 'data';\n } else {\n template += kendo.expr(options.dataTextField, 'data');\n }\n template += '#';\n }\n if (typeof template !== 'function') {\n template = kendo.template(template);\n }\n that.optionLabelTemplate = template;\n if (!that.hasOptionLabel()) {\n that.optionLabel = $('<div class=\"k-list-optionlabel\"></div>').prependTo(that.list);\n }\n that.optionLabel.html(template(optionLabel)).off().click(proxy(that._click, that)).on(HOVEREVENTS, that._toggleHover);\n that.angular('compile', function () {\n return {\n elements: that.optionLabel,\n data: [{ dataItem: that._optionLabelDataItem() }]\n };\n });\n },\n _optionLabelText: function () {\n var optionLabel = this.options.optionLabel;\n return typeof optionLabel === 'string' ? optionLabel : this._text(optionLabel);\n },\n _optionLabelDataItem: function () {\n var that = this;\n var optionLabel = that.options.optionLabel;\n if (that.hasOptionLabel()) {\n return $.isPlainObject(optionLabel) ? new ObservableObject(optionLabel) : that._assignInstance(that._optionLabelText(), '');\n }\n return null;\n },\n _buildOptions: function (data) {\n var that = this;\n if (!that._isSelect) {\n return;\n }\n var value = that.listView.value()[0];\n var optionLabel = that._optionLabelDataItem();\n var optionLabelValue = optionLabel && that._value(optionLabel);\n if (value === undefined || value === null) {\n value = '';\n }\n if (optionLabel) {\n if (optionLabelValue === undefined || optionLabelValue === null) {\n optionLabelValue = '';\n }\n optionLabel = '<option value=\"' + optionLabelValue + '\">' + that._text(optionLabel) + '</option>';\n }\n that._options(data, optionLabel, value);\n if (value !== List.unifyType(that._accessor(), typeof value)) {\n that._customOption = null;\n that._custom(value);\n }\n },\n _listBound: function () {\n var that = this;\n var initialIndex = that._initialIndex;\n var filtered = that._state === STATE_FILTER;\n var data = that.dataSource.flatView();\n var dataItem;\n that._presetValue = false;\n that._renderFooter();\n that._renderNoData();\n that._toggleNoData(!data.length);\n that._resizePopup(true);\n that.popup.position();\n that._buildOptions(data);\n that._makeUnselectable();\n if (!filtered) {\n if (that._open) {\n that.toggle(that._allowOpening());\n }\n that._open = false;\n if (!that._fetch) {\n if (data.length) {\n if (!that.listView.value().length && initialIndex > -1 && initialIndex !== null) {\n that.select(initialIndex);\n }\n that._initialIndex = null;\n dataItem = that.listView.selectedDataItems()[0];\n if (dataItem && that.text() !== that._text(dataItem)) {\n that._selectValue(dataItem);\n }\n } else if (that._textAccessor() !== that._optionLabelText()) {\n that.listView.value('');\n that._selectValue(null);\n that._oldIndex = that.selectedIndex;\n }\n }\n }\n that._hideBusy();\n that.trigger('dataBound');\n },\n _listChange: function () {\n this._selectValue(this.listView.selectedDataItems()[0]);\n if (this._presetValue || this._old && this._oldIndex === -1) {\n this._oldIndex = this.selectedIndex;\n }\n },\n _filterPaste: function () {\n this._search();\n },\n _focusHandler: function () {\n this.wrapper.focus();\n },\n _focusinHandler: function () {\n this._inputWrapper.addClass(FOCUSED);\n this._prevent = false;\n },\n _focusoutHandler: function () {\n var that = this;\n var isIFrame = window.self !== window.top;\n if (!that._prevent) {\n clearTimeout(that._typingTimeout);\n if (support.mobileOS.ios && isIFrame) {\n that._change();\n } else {\n that._blur();\n }\n that._inputWrapper.removeClass(FOCUSED);\n that._prevent = true;\n that._open = false;\n that.element.blur();\n }\n },\n _wrapperMousedown: function () {\n this._prevent = !!this.filterInput;\n },\n _wrapperClick: function (e) {\n e.preventDefault();\n this.popup.unbind('activate', this._focusInputHandler);\n this._focused = this.wrapper;\n this._toggle();\n },\n _editable: function (options) {\n var that = this;\n var element = that.element;\n var disable = options.disable;\n var readonly = options.readonly;\n var wrapper = that.wrapper.add(that.filterInput).off(ns);\n var dropDownWrapper = that._inputWrapper.off(HOVEREVENTS);\n if (!readonly && !disable) {\n element.removeAttr(DISABLED).removeAttr(READONLY);\n dropDownWrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n wrapper.attr(TABINDEX, wrapper.data(TABINDEX)).attr(ARIA_DISABLED, false).on('keydown' + ns, proxy(that._keydown, that)).on('focusin' + ns, proxy(that._focusinHandler, that)).on('focusout' + ns, proxy(that._focusoutHandler, that)).on('mousedown' + ns, proxy(that._wrapperMousedown, that)).on('paste' + ns, proxy(that._filterPaste, that));\n that.wrapper.on('click' + ns, proxy(that._wrapperClick, that));\n if (!that.filterInput) {\n wrapper.on('keypress' + ns, proxy(that._keypress, that));\n }\n } else if (disable) {\n wrapper.removeAttr(TABINDEX);\n dropDownWrapper.addClass(STATEDISABLED).removeClass(DEFAULT);\n } else {\n dropDownWrapper.addClass(DEFAULT).removeClass(STATEDISABLED);\n wrapper.on('focusin' + ns, proxy(that._focusinHandler, that)).on('focusout' + ns, proxy(that._focusoutHandler, that));\n }\n element.attr(DISABLED, disable).attr(READONLY, readonly);\n wrapper.attr(ARIA_DISABLED, disable);\n },\n _keydown: function (e) {\n var that = this;\n var key = e.keyCode;\n var altKey = e.altKey;\n var isInputActive;\n var handled;\n var isPopupVisible = that.popup.visible();\n if (that.filterInput) {\n isInputActive = that.filterInput[0] === activeElement();\n }\n if (key === keys.LEFT) {\n key = keys.UP;\n handled = true;\n } else if (key === keys.RIGHT) {\n key = keys.DOWN;\n handled = true;\n }\n if (handled && isInputActive) {\n return;\n }\n e.keyCode = key;\n if (altKey && key === keys.UP || key === keys.ESC) {\n that._focusElement(that.wrapper);\n }\n if (that._state === STATE_FILTER && key === keys.ESC) {\n that._clearFilter();\n }\n if (key === keys.ENTER && that._typingTimeout && that.filterInput && isPopupVisible) {\n e.preventDefault();\n return;\n }\n handled = that._move(e);\n if (handled) {\n return;\n }\n if (!isPopupVisible || !that.filterInput) {\n var current = that._focus();\n if (key === keys.HOME) {\n handled = true;\n that._firstItem();\n } else if (key === keys.END) {\n handled = true;\n that._lastItem();\n }\n if (handled) {\n if (that.trigger('select', {\n dataItem: that._getElementDataItem(that._focus()),\n item: that._focus()\n })) {\n that._focus(current);\n return;\n }\n that._select(that._focus(), true).done(function () {\n if (!isPopupVisible) {\n that._blur();\n }\n });\n }\n }\n if (!altKey && !handled && that.filterInput) {\n that._search();\n }\n },\n _matchText: function (text, word) {\n var ignoreCase = this.options.ignoreCase;\n if (text === undefined || text === null) {\n return false;\n }\n text = text + '';\n if (ignoreCase) {\n text = text.toLowerCase();\n }\n return text.indexOf(word) === 0;\n },\n _shuffleData: function (data, splitIndex) {\n var optionDataItem = this._optionLabelDataItem();\n if (optionDataItem) {\n data = [optionDataItem].concat(data);\n }\n return data.slice(splitIndex).concat(data.slice(0, splitIndex));\n },\n _selectNext: function () {\n var that = this;\n var data = that.dataSource.flatView();\n var dataLength = data.length + (that.hasOptionLabel() ? 1 : 0);\n var isInLoop = sameCharsOnly(that._word, that._last);\n var startIndex = that.selectedIndex;\n var oldFocusedItem;\n var text;\n if (startIndex === -1) {\n startIndex = 0;\n } else {\n startIndex += isInLoop ? 1 : 0;\n startIndex = normalizeIndex(startIndex, dataLength);\n }\n data = data.toJSON ? data.toJSON() : data.slice();\n data = that._shuffleData(data, startIndex);\n for (var idx = 0; idx < dataLength; idx++) {\n text = that._text(data[idx]);\n if (isInLoop && that._matchText(text, that._last)) {\n break;\n } else if (that._matchText(text, that._word)) {\n break;\n }\n }\n if (idx !== dataLength) {\n oldFocusedItem = that._focus();\n that._select(normalizeIndex(startIndex + idx, dataLength)).done(function () {\n var done = function () {\n if (!that.popup.visible()) {\n that._change();\n }\n };\n if (that.trigger('select', {\n dataItem: that._getElementDataItem(that._focus()),\n item: that._focus()\n })) {\n that._select(oldFocusedItem).done(done);\n } else {\n done();\n }\n });\n }\n },\n _keypress: function (e) {\n var that = this;\n if (e.which === 0 || e.keyCode === kendo.keys.ENTER) {\n return;\n }\n var character = String.fromCharCode(e.charCode || e.keyCode);\n if (that.options.ignoreCase) {\n character = character.toLowerCase();\n }\n if (character === ' ') {\n e.preventDefault();\n }\n that._word += character;\n that._last = character;\n that._search();\n },\n _popupOpen: function () {\n var popup = this.popup;\n popup.wrapper = kendo.wrap(popup.element);\n if (popup.element.closest('.km-root')[0]) {\n popup.wrapper.addClass('km-popup km-widget');\n this.wrapper.addClass('km-widget');\n }\n },\n _popup: function () {\n Select.fn._popup.call(this);\n this.popup.one('open', proxy(this._popupOpen, this));\n },\n _getElementDataItem: function (element) {\n if (!element || !element[0]) {\n return null;\n }\n if (element[0] === this.optionLabel[0]) {\n return this._optionLabelDataItem();\n }\n return this.listView.dataItemByIndex(this.listView.getElementIndex(element));\n },\n _click: function (e) {\n var that = this;\n var item = e.item || $(e.currentTarget);\n e.preventDefault();\n if (that.trigger('select', {\n dataItem: that._getElementDataItem(item),\n item: item\n })) {\n that.close();\n return;\n }\n that._userTriggered = true;\n that._select(item).done(function () {\n that._focusElement(that.wrapper);\n that._blur();\n });\n },\n _focusElement: function (element) {\n var active = activeElement();\n var wrapper = this.wrapper;\n var filterInput = this.filterInput;\n var compareElement = element === filterInput ? wrapper : filterInput;\n var touchEnabled = support.mobileOS && (support.touch || support.MSPointers || support.pointers);\n if (filterInput && filterInput[0] === element[0] && touchEnabled) {\n return;\n }\n if (filterInput && compareElement[0] === active) {\n this._prevent = true;\n this._focused = element.focus();\n }\n },\n _searchByWord: function (word) {\n if (!word) {\n return;\n }\n var that = this;\n var ignoreCase = that.options.ignoreCase;\n if (ignoreCase) {\n word = word.toLowerCase();\n }\n that._select(function (dataItem) {\n return that._matchText(that._text(dataItem), word);\n });\n },\n _inputValue: function () {\n return this.text();\n },\n _search: function () {\n var that = this;\n var dataSource = that.dataSource;\n clearTimeout(that._typingTimeout);\n if (that._isFilterEnabled()) {\n that._typingTimeout = setTimeout(function () {\n var value = that.filterInput.val();\n if (that._prev !== value) {\n that._prev = value;\n that.search(value);\n that._resizeFilterInput();\n }\n that._typingTimeout = null;\n }, that.options.delay);\n } else {\n that._typingTimeout = setTimeout(function () {\n that._word = '';\n }, that.options.delay);\n if (!that.listView.bound()) {\n dataSource.fetch().done(function () {\n that._selectNext();\n });\n return;\n }\n that._selectNext();\n }\n },\n _get: function (candidate) {\n var data, found, idx;\n var isFunction = typeof candidate === 'function';\n var jQueryCandidate = !isFunction ? $(candidate) : $();\n if (this.hasOptionLabel()) {\n if (typeof candidate === 'number') {\n if (candidate > -1) {\n candidate -= 1;\n }\n } else if (jQueryCandidate.hasClass('k-list-optionlabel')) {\n candidate = -1;\n }\n }\n if (isFunction) {\n data = this.dataSource.flatView();\n for (idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n candidate = idx;\n found = true;\n break;\n }\n }\n if (!found) {\n candidate = -1;\n }\n }\n return candidate;\n },\n _firstItem: function () {\n if (this.hasOptionLabel()) {\n this._focus(this.optionLabel);\n } else {\n this.listView.focusFirst();\n }\n },\n _lastItem: function () {\n this._resetOptionLabel();\n this.listView.focusLast();\n },\n _nextItem: function () {\n if (this.optionLabel.hasClass('k-state-focused')) {\n this._resetOptionLabel();\n this.listView.focusFirst();\n } else {\n this.listView.focusNext();\n }\n },\n _prevItem: function () {\n if (this.optionLabel.hasClass('k-state-focused')) {\n return;\n }\n this.listView.focusPrev();\n if (!this.listView.focus()) {\n this._focus(this.optionLabel);\n }\n },\n _focusItem: function () {\n var listView = this.listView;\n var focusedItem = listView.focus();\n var index = listView.select();\n index = index[index.length - 1];\n if (index === undefined && this.options.highlightFirst && !focusedItem) {\n index = 0;\n }\n if (index !== undefined) {\n listView.focus(index);\n } else {\n if (this.options.optionLabel) {\n this._focus(this.optionLabel);\n this._select(this.optionLabel);\n } else {\n listView.scrollToIndex(0);\n }\n }\n },\n _resetOptionLabel: function (additionalClass) {\n this.optionLabel.removeClass('k-state-focused' + (additionalClass || '')).removeAttr('id');\n },\n _focus: function (candidate) {\n var listView = this.listView;\n var optionLabel = this.optionLabel;\n if (candidate === undefined) {\n candidate = listView.focus();\n if (!candidate && optionLabel.hasClass('k-state-focused')) {\n candidate = optionLabel;\n }\n return candidate;\n }\n this._resetOptionLabel();\n candidate = this._get(candidate);\n listView.focus(candidate);\n if (candidate === -1) {\n optionLabel.addClass('k-state-focused').attr('id', listView._optionID);\n this._focused.add(this.filterInput).removeAttr('aria-activedescendant').attr('aria-activedescendant', listView._optionID);\n }\n },\n _select: function (candidate, keepState) {\n var that = this;\n candidate = that._get(candidate);\n return that.listView.select(candidate).done(function () {\n if (!keepState && that._state === STATE_FILTER) {\n that._state = STATE_ACCEPT;\n }\n if (candidate === -1) {\n that._selectValue(null);\n }\n });\n },\n _selectValue: function (dataItem) {\n var that = this;\n var optionLabel = that.options.optionLabel;\n var idx = that.listView.select();\n var value = '';\n var text = '';\n idx = idx[idx.length - 1];\n if (idx === undefined) {\n idx = -1;\n }\n this._resetOptionLabel(' k-state-selected');\n if (dataItem) {\n text = dataItem;\n value = that._dataValue(dataItem);\n if (optionLabel) {\n idx += 1;\n }\n } else if (optionLabel) {\n that._focus(that.optionLabel.addClass('k-state-selected'));\n text = that._optionLabelText();\n if (typeof optionLabel === 'string') {\n value = '';\n } else {\n value = that._value(optionLabel);\n }\n idx = 0;\n }\n that.selectedIndex = idx;\n if (value === null) {\n value = '';\n }\n that._textAccessor(text);\n that._accessor(value, idx);\n that._triggerCascade();\n },\n _mobile: function () {\n var that = this, popup = that.popup, mobileOS = support.mobileOS, root = popup.element.parents('.km-root').eq(0);\n if (root.length && mobileOS) {\n popup.options.animation.open.effects = mobileOS.android || mobileOS.meego ? 'fadeIn' : mobileOS.ios || mobileOS.wp ? 'slideIn:up' : popup.options.animation.open.effects;\n }\n },\n _filterHeader: function () {\n var icon;\n if (this.filterInput) {\n this.filterInput.off(ns).parent().remove();\n this.filterInput = null;\n }\n if (this._isFilterEnabled()) {\n icon = '<span class=\"k-icon k-i-zoom\"></span>';\n this.filterInput = $('<input class=\"k-textbox\"/>').attr({\n placeholder: this.element.attr('placeholder'),\n title: this.element.attr('title'),\n role: 'listbox',\n 'aria-haspopup': true,\n 'aria-expanded': false\n });\n this.list.prepend($('<span class=\"k-list-filter\" />').append(this.filterInput.add(icon)));\n }\n },\n _span: function () {\n var that = this, wrapper = that.wrapper, SELECTOR = 'span.k-input', span;\n span = wrapper.find(SELECTOR);\n if (!span[0]) {\n wrapper.append('<span unselectable=\"on\" class=\"k-dropdown-wrap k-state-default\"><span unselectable=\"on\" class=\"k-input\"> </span><span unselectable=\"on\" class=\"k-select\" aria-label=\"select\"><span class=\"k-icon k-i-arrow-60-down\"></span></span></span>').append(that.element);\n span = wrapper.find(SELECTOR);\n }\n that.span = span;\n that._inputWrapper = $(wrapper[0].firstChild);\n that._arrow = wrapper.find('.k-select');\n that._arrowIcon = that._arrow.find('.k-icon');\n },\n _wrapper: function () {\n var that = this, element = that.element, DOMelement = element[0], wrapper;\n wrapper = element.parent();\n if (!wrapper.is('span.k-widget')) {\n wrapper = element.wrap('<span />').parent();\n wrapper[0].style.cssText = DOMelement.style.cssText;\n wrapper[0].title = DOMelement.title;\n }\n that._focused = that.wrapper = wrapper.addClass('k-widget k-dropdown k-header').addClass(DOMelement.className).css('display', '').attr({\n accesskey: element.attr('accesskey'),\n unselectable: 'on',\n role: 'listbox',\n 'aria-haspopup': true,\n 'aria-expanded': false\n });\n element.hide().removeAttr('accesskey');\n },\n _clearSelection: function (parent) {\n this.select(parent.value() ? 0 : -1);\n },\n _inputTemplate: function () {\n var that = this, template = that.options.valueTemplate;\n if (!template) {\n template = $.proxy(kendo.template('#:this._text(data)#', { useWithBlock: false }), that);\n } else {\n template = kendo.template(template);\n }\n that.valueTemplate = template;\n if (that.hasOptionLabel() && !that.options.optionLabelTemplate) {\n try {\n that.valueTemplate(that._optionLabelDataItem());\n } catch (e) {\n throw new Error(MSG_INVALID_OPTION_LABEL);\n }\n }\n },\n _textAccessor: function (text) {\n var dataItem = null;\n var template = this.valueTemplate;\n var optionLabelText = this._optionLabelText();\n var span = this.span;\n if (text === undefined) {\n return span.text();\n }\n if ($.isPlainObject(text) || text instanceof ObservableObject) {\n dataItem = text;\n } else if (optionLabelText && optionLabelText === text) {\n dataItem = this.options.optionLabel;\n }\n if (!dataItem) {\n dataItem = this._assignInstance(text, this._accessor());\n }\n if (this.hasOptionLabel()) {\n if (dataItem === optionLabelText || this._text(dataItem) === optionLabelText) {\n template = this.optionLabelTemplate;\n if (typeof this.options.optionLabel === 'string' && !this.options.optionLabelTemplate) {\n dataItem = optionLabelText;\n }\n }\n }\n var getElements = function () {\n return {\n elements: span.get(),\n data: [{ dataItem: dataItem }]\n };\n };\n this.angular('cleanup', getElements);\n try {\n span.html(template(dataItem));\n } catch (e) {\n span.html('');\n }\n this.angular('compile', getElements);\n },\n _preselect: function (value, text) {\n if (!value && !text) {\n text = this._optionLabelText();\n }\n this._accessor(value);\n this._textAccessor(text);\n this._old = this._accessor();\n this._oldIndex = this.selectedIndex;\n this.listView.setValue(value);\n this._initialIndex = null;\n this._presetValue = true;\n },\n _assignInstance: function (text, value) {\n var dataTextField = this.options.dataTextField;\n var dataItem = {};\n if (dataTextField) {\n assign(dataItem, dataTextField.split('.'), text);\n assign(dataItem, this.options.dataValueField.split('.'), value);\n dataItem = new ObservableObject(dataItem);\n } else {\n dataItem = text;\n }\n return dataItem;\n }\n });\n function assign(instance, fields, value) {\n var idx = 0, lastIndex = fields.length - 1, field;\n for (; idx < lastIndex; ++idx) {\n field = fields[idx];\n if (!(field in instance)) {\n instance[field] = {};\n }\n instance = instance[field];\n }\n instance[fields[lastIndex]] = value;\n }\n function normalizeIndex(index, length) {\n if (index >= length) {\n index -= length;\n }\n return index;\n }\n function sameCharsOnly(word, character) {\n for (var idx = 0; idx < word.length; idx++) {\n if (word.charAt(idx) !== character) {\n return false;\n }\n }\n return true;\n }\n ui.plugin(DropDownList);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.combobox', [\n 'kendo.list',\n 'kendo.mobile.scroller'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'combobox',\n name: 'ComboBox',\n category: 'web',\n description: 'The ComboBox widget allows the selection from pre-defined values or entering a new value.',\n depends: ['list'],\n features: [\n {\n id: 'mobile-scroller',\n name: 'Mobile scroller',\n description: 'Support for kinetic scrolling in mobile device',\n depends: ['mobile.scroller']\n },\n {\n id: 'virtualization',\n name: 'VirtualList',\n description: 'Support for virtualization',\n depends: ['virtuallist']\n }\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, List = ui.List, Select = ui.Select, caret = kendo.caret, support = kendo.support, placeholderSupported = support.placeholder, activeElement = kendo._activeElement, keys = kendo.keys, ns = '.kendoComboBox', CLICK = 'click' + ns, MOUSEDOWN = 'mousedown' + ns, DISABLED = 'disabled', READONLY = 'readonly', CHANGE = 'change', DEFAULT = 'k-state-default', FOCUSED = 'k-state-focused', STATEDISABLED = 'k-state-disabled', ARIA_DISABLED = 'aria-disabled', STATE_FILTER = 'filter', STATE_ACCEPT = 'accept', STATE_REBIND = 'rebind', HOVEREVENTS = 'mouseenter' + ns + ' mouseleave' + ns, proxy = $.proxy;\n var ComboBox = Select.extend({\n init: function (element, options) {\n var that = this, text, disabled;\n that.ns = ns;\n options = $.isArray(options) ? { dataSource: options } : options;\n Select.fn.init.call(that, element, options);\n options = that.options;\n element = that.element.on('focus' + ns, proxy(that._focusHandler, that));\n options.placeholder = options.placeholder || element.attr('placeholder');\n that._reset();\n that._wrapper();\n that._input();\n that._clearButton();\n that._tabindex(that.input);\n that._popup();\n that._dataSource();\n that._ignoreCase();\n that._enable();\n that._oldIndex = that.selectedIndex = -1;\n that._aria();\n that._initialIndex = options.index;\n that.requireValueMapper(that.options);\n that._initList();\n that._cascade();\n if (options.autoBind) {\n that._filterSource();\n } else {\n text = options.text;\n if (!text && that._isSelect) {\n text = element.children(':selected').text();\n }\n if (text) {\n that._setText(text);\n }\n }\n if (!text) {\n that._placeholder();\n }\n disabled = $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n }\n kendo.notify(that);\n },\n options: {\n name: 'ComboBox',\n enabled: true,\n index: -1,\n text: null,\n value: null,\n autoBind: true,\n delay: 200,\n dataTextField: '',\n dataValueField: '',\n minLength: 1,\n enforceMinLength: false,\n height: 200,\n highlightFirst: true,\n filter: 'none',\n placeholder: '',\n suggest: false,\n cascadeFrom: '',\n cascadeFromField: '',\n ignoreCase: true,\n animation: {},\n virtual: false,\n template: null,\n groupTemplate: '#:data#',\n fixedGroupTemplate: '#:data#',\n clearButton: true,\n syncValueAndText: true\n },\n events: [\n 'open',\n 'close',\n CHANGE,\n 'select',\n 'filtering',\n 'dataBinding',\n 'dataBound',\n 'cascade',\n 'set'\n ],\n setOptions: function (options) {\n Select.fn.setOptions.call(this, options);\n this.listView.setOptions(options);\n this._accessors();\n this._aria();\n },\n destroy: function () {\n var that = this;\n that.input.off(ns);\n that.element.off(ns);\n that._inputWrapper.off(ns);\n clearTimeout(that._pasteTimeout);\n that._arrow.off(CLICK + ' ' + MOUSEDOWN);\n that._clear.off(CLICK + ' ' + MOUSEDOWN);\n Select.fn.destroy.call(that);\n },\n _change: function () {\n var that = this;\n var text = that.text();\n var hasText = text && text !== that._oldText && text !== that.options.placeholder;\n var index = that.selectedIndex;\n var isCustom = index === -1;\n if (!that.options.syncValueAndText && !that.value() && isCustom && hasText) {\n that._old = '';\n that._oldIndex = index;\n that._oldText = text;\n if (!that._typing) {\n that.element.trigger(CHANGE);\n }\n that.trigger(CHANGE);\n that._typing = false;\n return;\n }\n Select.fn._change.call(that);\n },\n _focusHandler: function () {\n this.input.focus();\n },\n _arrowClick: function () {\n this._toggle();\n },\n _inputFocus: function () {\n this._inputWrapper.addClass(FOCUSED);\n this._placeholder(false);\n },\n _inputFocusout: function () {\n var that = this;\n var value = that.value();\n that._inputWrapper.removeClass(FOCUSED);\n clearTimeout(that._typingTimeout);\n that._typingTimeout = null;\n that.text(that.text());\n var item = that._focus();\n var dataItem = this.listView.dataItemByIndex(this.listView.getElementIndex(item));\n if (value !== that.value() && that.trigger('select', {\n dataItem: dataItem,\n item: item\n })) {\n that.value(value);\n return;\n }\n that._placeholder();\n that._blur();\n that.element.blur();\n },\n _inputPaste: function () {\n var that = this;\n clearTimeout(that._pasteTimeout);\n that._pasteTimeout = null;\n that._pasteTimeout = setTimeout(function () {\n that.search();\n });\n },\n _editable: function (options) {\n var that = this, disable = options.disable, readonly = options.readonly, wrapper = that._inputWrapper.off(ns), input = that.element.add(that.input.off(ns)), arrow = that._arrow.off(CLICK + ' ' + MOUSEDOWN), clear = that._clear;\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n input.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false);\n arrow.on(CLICK, proxy(that._arrowClick, that)).on(MOUSEDOWN, function (e) {\n e.preventDefault();\n });\n clear.on(CLICK, proxy(that._clearValue, that)).on(MOUSEDOWN, function (e) {\n e.preventDefault();\n });\n that.input.on('keydown' + ns, proxy(that._keydown, that)).on('focus' + ns, proxy(that._inputFocus, that)).on('focusout' + ns, proxy(that._inputFocusout, that)).on('paste' + ns, proxy(that._inputPaste, that));\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n input.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable);\n }\n },\n open: function () {\n var that = this;\n var state = that._state;\n if (that.popup.visible()) {\n return;\n }\n if (!that.listView.bound() && state !== STATE_FILTER || state === STATE_ACCEPT) {\n that._open = true;\n that._state = STATE_REBIND;\n if (that.options.minLength !== 1) {\n that.refresh();\n that._openPopup();\n } else {\n that._filterSource();\n }\n } else if (that._allowOpening()) {\n that._openPopup();\n that._focusItem();\n }\n },\n _scrollToFocusedItem: function () {\n var listView = this.listView;\n listView.scrollToIndex(listView.getElementIndex(listView.focus()));\n },\n _openPopup: function () {\n this.popup.one('activate', proxy(this._scrollToFocusedItem, this));\n this.popup.open();\n },\n _updateSelectionState: function () {\n var that = this;\n var text = that.options.text;\n var value = that.options.value;\n if (that.listView.isFiltered()) {\n return;\n }\n if (that.selectedIndex === -1) {\n if (text === undefined || text === null) {\n text = value;\n }\n that._accessor(value);\n that.input.val(text || that.input.val());\n that._placeholder();\n } else if (that._oldIndex === -1) {\n that._oldIndex = that.selectedIndex;\n }\n },\n _buildOptions: function (data) {\n var that = this;\n if (!that._isSelect) {\n return;\n }\n var custom = that._customOption;\n if (that._state === STATE_REBIND) {\n that._state = '';\n }\n that._customOption = undefined;\n that._options(data, '', that.value());\n if (custom && custom[0].selected) {\n that._custom(custom.val());\n }\n },\n _updateSelection: function () {\n var that = this;\n var listView = that.listView;\n var initialIndex = that._initialIndex;\n var hasInitialIndex = initialIndex !== null && initialIndex > -1;\n var filtered = that._state === STATE_FILTER;\n if (filtered) {\n $(listView.focus()).removeClass('k-state-selected');\n return;\n }\n if (that._fetch) {\n return;\n }\n if (!listView.value().length) {\n if (hasInitialIndex) {\n that.select(initialIndex);\n } else if (that._accessor()) {\n listView.value(that._accessor());\n }\n }\n that._initialIndex = null;\n var dataItem = listView.selectedDataItems()[0];\n if (!dataItem) {\n return;\n }\n if (that._value(dataItem) !== that.value()) {\n that._custom(that._value(dataItem));\n }\n if (that.text() && that.text() !== that._text(dataItem)) {\n that._selectValue(dataItem);\n }\n },\n _updateItemFocus: function () {\n var listView = this.listView;\n if (!this.options.highlightFirst) {\n listView.focus(-1);\n } else if (!listView.focus() && !listView.focusIndex()) {\n listView.focus(0);\n }\n },\n _listBound: function () {\n var that = this;\n var isActive = that.input[0] === activeElement();\n var data = that.dataSource.flatView();\n var skip = that.listView.skip();\n var isFirstPage = skip === undefined || skip === 0;\n that._presetValue = false;\n that._renderFooter();\n that._renderNoData();\n that._toggleNoData(!data.length);\n that._resizePopup();\n that.popup.position();\n that._buildOptions(data);\n that._makeUnselectable();\n that._updateSelection();\n if (data.length && isFirstPage) {\n that._updateItemFocus();\n if (that.options.suggest && isActive && that.input.val()) {\n that.suggest(data[0]);\n }\n }\n if (that._open) {\n that._open = false;\n if (that._typingTimeout && !isActive) {\n that.popup.close();\n } else {\n that.toggle(that._allowOpening());\n }\n that._typingTimeout = null;\n }\n that._hideBusy();\n that.trigger('dataBound');\n },\n _listChange: function () {\n this._selectValue(this.listView.selectedDataItems()[0]);\n if (this._presetValue) {\n this._oldIndex = this.selectedIndex;\n }\n },\n _get: function (candidate) {\n var data, found, idx;\n if (typeof candidate === 'function') {\n data = this.dataSource.flatView();\n for (idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n candidate = idx;\n found = true;\n break;\n }\n }\n if (!found) {\n candidate = -1;\n }\n }\n return candidate;\n },\n _select: function (candidate, keepState) {\n var that = this;\n candidate = that._get(candidate);\n if (candidate === -1) {\n that.input[0].value = '';\n that._accessor('');\n }\n return that.listView.select(candidate).done(function () {\n if (!keepState && that._state === STATE_FILTER) {\n that._state = STATE_ACCEPT;\n }\n });\n },\n _selectValue: function (dataItem) {\n var idx = this.listView.select();\n var value = '';\n var text = '';\n idx = idx[idx.length - 1];\n if (idx === undefined) {\n idx = -1;\n }\n this.selectedIndex = idx;\n if (idx === -1 && !dataItem) {\n text = this.input[0].value;\n if (this.options.syncValueAndText) {\n value = text;\n }\n this.listView.focus(-1);\n } else {\n if (dataItem) {\n value = this._dataValue(dataItem);\n text = this._text(dataItem);\n }\n if (value === null) {\n value = '';\n }\n }\n this._prev = this.input[0].value = text;\n this._accessor(value !== undefined ? value : text, idx);\n this._placeholder();\n this._triggerCascade();\n },\n refresh: function () {\n this.listView.refresh();\n },\n suggest: function (word) {\n var that = this;\n var element = that.input[0];\n var value = that.text();\n var caretIdx = caret(element)[0];\n var key = that._last;\n var idx;\n if (key == keys.BACKSPACE || key == keys.DELETE) {\n that._last = undefined;\n return;\n }\n word = word || '';\n if (typeof word !== 'string') {\n if (word[0]) {\n word = that.dataSource.view()[List.inArray(word[0], that.ul[0])];\n }\n word = word ? that._text(word) : '';\n }\n if (caretIdx <= 0) {\n caretIdx = value.toLowerCase().indexOf(word.toLowerCase()) + 1;\n }\n if (word) {\n word = word.toString();\n idx = word.toLowerCase().indexOf(value.toLowerCase());\n if (idx > -1) {\n value += word.substring(idx + value.length);\n }\n } else {\n value = value.substring(0, caretIdx);\n }\n if (value.length !== caretIdx || !word) {\n element.value = value;\n if (element === activeElement()) {\n caret(element, caretIdx, value.length);\n }\n }\n },\n text: function (text) {\n text = text === null ? '' : text;\n var that = this;\n var input = that.input[0];\n var ignoreCase = that.options.ignoreCase;\n var loweredText = text;\n var dataItem;\n var value;\n if (text === undefined) {\n return input.value;\n }\n if (that.options.autoBind === false && !that.listView.bound()) {\n that._setText(text);\n return;\n }\n dataItem = that.dataItem();\n if (dataItem && that._text(dataItem) === text) {\n value = that._value(dataItem);\n if (value === List.unifyType(that._old, typeof value)) {\n that._triggerCascade();\n return;\n }\n }\n if (ignoreCase) {\n loweredText = loweredText.toLowerCase();\n }\n that._select(function (data) {\n data = that._text(data);\n if (ignoreCase) {\n data = (data + '').toLowerCase();\n }\n return data === loweredText;\n }).done(function () {\n if (that.selectedIndex < 0) {\n input.value = text;\n if (that.options.syncValueAndText) {\n that._accessor(text);\n }\n that._triggerCascade();\n }\n that._prev = input.value;\n });\n },\n toggle: function (toggle) {\n this._toggle(toggle, true);\n },\n value: function (value) {\n var that = this;\n var options = that.options;\n var listView = that.listView;\n if (value === undefined) {\n value = that._accessor() || that.listView.value()[0];\n return value === undefined || value === null ? '' : value;\n }\n that.requireValueMapper(that.options, value);\n that.trigger('set', { value: value });\n if (value === options.value && that.input.val() === options.text) {\n return;\n }\n that._accessor(value);\n if (that._isFilterEnabled() && listView.bound() && listView.isFiltered()) {\n that._clearFilter();\n } else {\n that._fetchData();\n }\n listView.value(value).done(function () {\n if (that.selectedIndex === -1) {\n that._accessor(value);\n that.input.val(value);\n that._placeholder(true);\n }\n that._old = that._accessor();\n that._oldIndex = that.selectedIndex;\n that._prev = that.input.val();\n if (that._state === STATE_FILTER) {\n that._state = STATE_ACCEPT;\n }\n });\n },\n _click: function (e) {\n var that = this;\n var item = e.item;\n var dataItem = that.listView.dataItemByIndex(that.listView.getElementIndex(item));\n e.preventDefault();\n if (that.trigger('select', {\n dataItem: dataItem,\n item: item\n })) {\n that.close();\n return;\n }\n that._userTriggered = true;\n that._select(item).done(function () {\n that._blur();\n });\n },\n _inputValue: function () {\n return this.text();\n },\n _searchByWord: function (word) {\n var that = this;\n var options = that.options;\n var dataSource = that.dataSource;\n var ignoreCase = options.ignoreCase;\n var predicate = function (dataItem) {\n var text = that._text(dataItem);\n if (text !== undefined) {\n text = text + '';\n if (text !== '' && word === '') {\n return false;\n }\n if (ignoreCase) {\n text = text.toLowerCase();\n }\n return text.indexOf(word) === 0;\n }\n };\n if (ignoreCase) {\n word = word.toLowerCase();\n }\n if (!that.ul[0].firstChild) {\n dataSource.one(CHANGE, function () {\n if (dataSource.view()[0]) {\n that.search(word);\n }\n }).fetch();\n return;\n }\n this.listView.focus(this._get(predicate));\n var current = this.listView.focus();\n if (current) {\n if (options.suggest) {\n that.suggest(current);\n }\n this.open();\n }\n if (this.options.highlightFirst && !word) {\n this.listView.focusFirst();\n }\n },\n _input: function () {\n var that = this, element = that.element.removeClass('k-input')[0], accessKey = element.accessKey, wrapper = that.wrapper, SELECTOR = 'input.k-input', name = element.name || '', input, maxLength;\n if (name) {\n name = 'name=\"' + name + '_input\" ';\n }\n input = wrapper.find(SELECTOR);\n if (!input[0]) {\n wrapper.append('<span tabindex=\"-1\" unselectable=\"on\" class=\"k-dropdown-wrap k-state-default\"><input ' + name + 'class=\"k-input\" type=\"text\" autocomplete=\"off\"/><span unselectable=\"on\" class=\"k-select\" aria-label=\"select\"><span class=\"k-icon k-i-arrow-60-down\"></span></span></span>').append(that.element);\n input = wrapper.find(SELECTOR);\n }\n input[0].style.cssText = element.style.cssText;\n input[0].title = element.title;\n maxLength = parseInt(this.element.prop('maxlength') || this.element.attr('maxlength'), 10);\n if (maxLength > -1) {\n input[0].maxLength = maxLength;\n }\n input.addClass(element.className).css({\n width: '100%',\n height: element.style.height\n }).attr({\n 'role': 'combobox',\n 'aria-expanded': false\n }).show();\n if (placeholderSupported) {\n input.attr('placeholder', that.options.placeholder);\n }\n if (accessKey) {\n element.accessKey = '';\n input[0].accessKey = accessKey;\n }\n that._focused = that.input = input;\n that._inputWrapper = $(wrapper[0].firstChild);\n that._arrow = wrapper.find('.k-select').attr({\n 'role': 'button',\n 'tabIndex': -1\n });\n that._arrowIcon = that._arrow.find('.k-icon');\n if (element.id) {\n that._arrow.attr('aria-controls', that.ul[0].id);\n }\n },\n _clearButton: function () {\n this._clear = $('<span unselectable=\"on\" class=\"k-icon k-clear-value k-i-close\" title=\"clear\"></span>').attr({\n 'role': 'button',\n 'tabIndex': -1\n });\n if (this.options.clearButton) {\n this._clear.insertAfter(this.input);\n this.wrapper.addClass('k-combobox-clearable');\n }\n },\n _keydown: function (e) {\n var that = this, key = e.keyCode;\n that._last = key;\n clearTimeout(that._typingTimeout);\n that._typingTimeout = null;\n if (key != keys.TAB && !that._move(e)) {\n that._search();\n }\n },\n _placeholder: function (show) {\n if (placeholderSupported) {\n return;\n }\n var that = this, input = that.input, placeholder = that.options.placeholder, value;\n if (placeholder) {\n value = that.value();\n if (show === undefined) {\n show = !value;\n }\n input.toggleClass('k-readonly', show);\n if (!show) {\n if (!value) {\n placeholder = '';\n } else {\n return;\n }\n }\n input.val(placeholder);\n if (!placeholder && input[0] === activeElement()) {\n caret(input[0], 0, 0);\n }\n }\n },\n _search: function () {\n var that = this;\n that._typingTimeout = setTimeout(function () {\n var value = that.text();\n if (that._prev !== value) {\n that._prev = value;\n if (that.options.filter === 'none') {\n that.listView.select(-1);\n }\n that.search(value);\n }\n that._typingTimeout = null;\n }, that.options.delay);\n },\n _setText: function (text) {\n this.input.val(text);\n this._prev = text;\n },\n _wrapper: function () {\n var that = this, element = that.element, wrapper = element.parent();\n if (!wrapper.is('span.k-widget')) {\n wrapper = element.hide().wrap('<span />').parent();\n wrapper[0].style.cssText = element[0].style.cssText;\n }\n that.wrapper = wrapper.addClass('k-widget k-combobox k-header').addClass(element[0].className).css('display', '');\n },\n _clearSelection: function (parent, isFiltered) {\n var that = this;\n var hasValue = parent.value();\n var custom = hasValue && parent.selectedIndex === -1;\n if (this.selectedIndex == -1 && this.value()) {\n return;\n }\n if (isFiltered || !hasValue || custom) {\n that.options.value = '';\n that.value('');\n }\n },\n _preselect: function (value, text) {\n this.input.val(text);\n this._accessor(value);\n this._old = this._accessor();\n this._oldIndex = this.selectedIndex;\n this.listView.setValue(value);\n this._placeholder();\n this._initialIndex = null;\n this._presetValue = true;\n }\n });\n ui.plugin(ComboBox);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.multiselect', [\n 'kendo.list',\n 'kendo.mobile.scroller'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'multiselect',\n name: 'MultiSelect',\n category: 'web',\n description: 'The MultiSelect widget allows the selection from pre-defined values.',\n depends: ['list'],\n features: [\n {\n id: 'mobile-scroller',\n name: 'Mobile scroller',\n description: 'Support for kinetic scrolling in mobile device',\n depends: ['mobile.scroller']\n },\n {\n id: 'virtualization',\n name: 'VirtualList',\n description: 'Support for virtualization',\n depends: ['virtuallist']\n }\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, List = ui.List, keys = kendo.keys, activeElement = kendo._activeElement, ObservableArray = kendo.data.ObservableArray, proxy = $.proxy, ID = 'id', LI = 'li', ACCEPT = 'accept', FILTER = 'filter', REBIND = 'rebind', OPEN = 'open', CLOSE = 'close', CHANGE = 'change', PROGRESS = 'progress', SELECT = 'select', DESELECT = 'deselect', ARIA_DISABLED = 'aria-disabled', FOCUSEDCLASS = 'k-state-focused', HIDDENCLASS = 'k-loading-hidden', HOVERCLASS = 'k-state-hover', STATEDISABLED = 'k-state-disabled', DISABLED = 'disabled', READONLY = 'readonly', ns = '.kendoMultiSelect', CLICK = 'click' + ns, KEYDOWN = 'keydown' + ns, MOUSEENTER = 'mouseenter' + ns, MOUSELEAVE = 'mouseleave' + ns, HOVEREVENTS = MOUSEENTER + ' ' + MOUSELEAVE, quotRegExp = /\"/g, isArray = $.isArray, styles = [\n 'font-family',\n 'font-size',\n 'font-stretch',\n 'font-style',\n 'font-weight',\n 'letter-spacing',\n 'text-transform',\n 'line-height'\n ];\n var MultiSelect = List.extend({\n init: function (element, options) {\n var that = this, id, disabled;\n that.ns = ns;\n List.fn.init.call(that, element, options);\n that._optionsMap = {};\n that._customOptions = {};\n that._wrapper();\n that._tagList();\n that._input();\n that._textContainer();\n that._loader();\n that._clearButton();\n that._tabindex(that.input);\n element = that.element.attr('multiple', 'multiple').hide();\n options = that.options;\n if (!options.placeholder) {\n options.placeholder = element.data('placeholder');\n }\n id = element.attr(ID);\n if (id) {\n that._tagID = id + '_tag_active';\n id = id + '_taglist';\n that.tagList.attr(ID, id);\n }\n that._aria(id);\n that._dataSource();\n that._ignoreCase();\n that._popup();\n that._tagTemplate();\n that.requireValueMapper(that.options);\n that._initList();\n that._reset();\n that._enable();\n that._placeholder();\n if (options.autoBind) {\n that.dataSource.fetch();\n } else if (options.value) {\n that._preselect(options.value);\n }\n disabled = $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n }\n kendo.notify(that);\n },\n options: {\n name: 'MultiSelect',\n tagMode: 'multiple',\n enabled: true,\n autoBind: true,\n autoClose: true,\n highlightFirst: true,\n dataTextField: '',\n dataValueField: '',\n filter: 'startswith',\n ignoreCase: true,\n minLength: 1,\n enforceMinLength: false,\n delay: 100,\n value: null,\n maxSelectedItems: null,\n placeholder: '',\n height: 200,\n animation: {},\n virtual: false,\n itemTemplate: '',\n tagTemplate: '',\n groupTemplate: '#:data#',\n fixedGroupTemplate: '#:data#',\n clearButton: true\n },\n events: [\n OPEN,\n CLOSE,\n CHANGE,\n SELECT,\n DESELECT,\n 'filtering',\n 'dataBinding',\n 'dataBound'\n ],\n setDataSource: function (dataSource) {\n this.options.dataSource = dataSource;\n this._state = '';\n this._dataSource();\n this.listView.setDataSource(this.dataSource);\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n setOptions: function (options) {\n var listOptions = this._listOptions(options);\n List.fn.setOptions.call(this, options);\n this.listView.setOptions(listOptions);\n this._accessors();\n this._aria(this.tagList.attr(ID));\n this._tagTemplate();\n },\n currentTag: function (candidate) {\n var that = this;\n if (candidate !== undefined) {\n if (that._currentTag) {\n that._currentTag.removeClass(FOCUSEDCLASS).removeAttr(ID);\n that.input.removeAttr('aria-activedescendant');\n }\n if (candidate) {\n candidate.addClass(FOCUSEDCLASS).attr(ID, that._tagID);\n that.input.attr('aria-activedescendant', that._tagID);\n }\n that._currentTag = candidate;\n } else {\n return that._currentTag;\n }\n },\n dataItems: function () {\n return this.listView.selectedDataItems();\n },\n destroy: function () {\n var that = this, ns = that.ns;\n clearTimeout(that._busy);\n clearTimeout(that._typingTimeout);\n that.wrapper.off(ns);\n that.tagList.off(ns);\n that.input.off(ns);\n that._clear.off(ns);\n List.fn.destroy.call(that);\n },\n _activateItem: function () {\n List.fn._activateItem.call(this);\n this.currentTag(null);\n },\n _listOptions: function (options) {\n var that = this;\n var listOptions = List.fn._listOptions.call(that, $.extend(options, {\n selectedItemChange: proxy(that._selectedItemChange, that),\n selectable: 'multiple'\n }));\n var itemTemplate = this.options.itemTemplate || this.options.template;\n var template = listOptions.itemTemplate || itemTemplate || listOptions.template;\n if (!template) {\n template = '#:' + kendo.expr(listOptions.dataTextField, 'data') + '#';\n }\n listOptions.template = template;\n return listOptions;\n },\n _setListValue: function () {\n List.fn._setListValue.call(this, this._initialValues.slice(0));\n },\n _listChange: function (e) {\n var data = this.dataSource.flatView();\n var optionsMap = this._optionsMap;\n var valueGetter = this._value;\n if (this._state === REBIND) {\n this._state = '';\n }\n for (var i = 0; i < e.added.length; i++) {\n if (optionsMap[valueGetter(e.added[i].dataItem)] === undefined) {\n this._render(data);\n break;\n }\n }\n this._selectValue(e.added, e.removed);\n },\n _selectedItemChange: function (e) {\n var items = e.items;\n var context;\n var idx;\n for (idx = 0; idx < items.length; idx++) {\n context = items[idx];\n this.tagList.children().eq(context.index).children('span:first').html(this.tagTextTemplate(context.item));\n }\n },\n _wrapperMousedown: function (e) {\n var that = this;\n var notInput = e.target.nodeName.toLowerCase() !== 'input';\n var target = $(e.target);\n var closeButton = target.hasClass('k-select') || target.hasClass('k-icon');\n if (closeButton) {\n closeButton = !target.closest('.k-select').children('.k-i-arrow-60-down').length;\n }\n if (notInput && !(closeButton && kendo.support.mobileOS)) {\n e.preventDefault();\n }\n if (!closeButton) {\n if (that.input[0] !== activeElement() && notInput) {\n that.input.focus();\n }\n if (that.options.minLength === 1) {\n that.open();\n }\n }\n },\n _inputFocus: function () {\n this._placeholder(false);\n this.wrapper.addClass(FOCUSEDCLASS);\n },\n _inputFocusout: function () {\n var that = this;\n clearTimeout(that._typingTimeout);\n that.wrapper.removeClass(FOCUSEDCLASS);\n that._placeholder(!that.listView.selectedDataItems()[0], true);\n that.close();\n if (that._state === FILTER) {\n that._state = ACCEPT;\n that.listView.skipUpdate(true);\n }\n that.element.blur();\n },\n _removeTag: function (tag) {\n var that = this;\n var state = that._state;\n var position = tag.index();\n var listView = that.listView;\n var value = listView.value()[position];\n var dataItem = that.listView.selectedDataItems()[position];\n var customIndex = that._customOptions[value];\n var option;\n if (that.trigger(DESELECT, {\n dataItem: dataItem,\n item: tag\n })) {\n that._close();\n return;\n }\n if (customIndex === undefined && (state === ACCEPT || state === FILTER)) {\n customIndex = that._optionsMap[value];\n }\n var done = function () {\n that.currentTag(null);\n that._change();\n that._close();\n };\n if (customIndex === undefined) {\n listView.select(listView.select()[position]).done(done);\n } else {\n option = that.element[0].children[customIndex];\n option.selected = false;\n listView.removeAt(position);\n tag.remove();\n done();\n }\n },\n _tagListClick: function (e) {\n var target = $(e.currentTarget);\n if (!target.children('.k-i-arrow-60-down').length) {\n this._removeTag(target.closest(LI));\n }\n },\n _clearClick: function () {\n this.value(null);\n this.trigger('change');\n },\n _editable: function (options) {\n var that = this, disable = options.disable, readonly = options.readonly, wrapper = that.wrapper.off(ns), tagList = that.tagList.off(ns), input = that.element.add(that.input.off(ns));\n if (!readonly && !disable) {\n wrapper.removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover).on('mousedown' + ns + ' touchend' + ns, proxy(that._wrapperMousedown, that));\n that.input.on(KEYDOWN, proxy(that._keydown, that)).on('paste' + ns, proxy(that._search, that)).on('focus' + ns, proxy(that._inputFocus, that)).on('focusout' + ns, proxy(that._inputFocusout, that));\n that._clear.on('click' + ns, proxy(that._clearClick, that));\n input.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false);\n tagList.on(MOUSEENTER, LI, function () {\n $(this).addClass(HOVERCLASS);\n }).on(MOUSELEAVE, LI, function () {\n $(this).removeClass(HOVERCLASS);\n }).on(CLICK, 'li.k-button .k-select', proxy(that._tagListClick, that));\n } else {\n if (disable) {\n wrapper.addClass(STATEDISABLED);\n } else {\n wrapper.removeClass(STATEDISABLED);\n }\n input.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable);\n }\n },\n _close: function () {\n var that = this;\n if (that.options.autoClose) {\n that.close();\n } else {\n that.popup.position();\n }\n },\n _filterSource: function (filter, force) {\n if (!force) {\n force = this._retrieveData;\n }\n this._retrieveData = false;\n List.fn._filterSource.call(this, filter, force);\n },\n close: function () {\n this.popup.close();\n },\n open: function () {\n var that = this;\n if (that._request) {\n that._retrieveData = false;\n }\n if (that._retrieveData || !that.listView.bound() || that._state === ACCEPT) {\n that._open = true;\n that._state = REBIND;\n that.listView.skipUpdate(true);\n that._filterSource();\n } else if (that._allowOpening()) {\n that.popup.open();\n that._focusItem();\n }\n },\n toggle: function (toggle) {\n toggle = toggle !== undefined ? toggle : !this.popup.visible();\n this[toggle ? OPEN : CLOSE]();\n },\n refresh: function () {\n this.listView.refresh();\n },\n _listBound: function () {\n var that = this;\n var data = that.dataSource.flatView();\n var skip = that.listView.skip();\n that._render(data);\n that._renderFooter();\n that._renderNoData();\n that._toggleNoData(!data.length);\n that._resizePopup();\n if (that._open) {\n that._open = false;\n that.toggle(that._allowOpening());\n }\n that.popup.position();\n if (that.options.highlightFirst && (skip === undefined || skip === 0)) {\n that.listView.focusFirst();\n }\n if (that._touchScroller) {\n that._touchScroller.reset();\n }\n that._hideBusy();\n that._makeUnselectable();\n that.trigger('dataBound');\n },\n _inputValue: function () {\n var that = this;\n var inputValue = that.input.val();\n if (that.options.placeholder === inputValue) {\n inputValue = '';\n }\n return inputValue;\n },\n value: function (value) {\n var that = this;\n var listView = that.listView;\n var oldValue = listView.value().slice();\n var maxSelectedItems = that.options.maxSelectedItems;\n var clearFilters = listView.bound() && listView.isFiltered();\n if (value === undefined) {\n return oldValue;\n }\n that.requireValueMapper(that.options, value);\n value = that._normalizeValues(value);\n if (maxSelectedItems !== null && value.length > maxSelectedItems) {\n value = value.slice(0, maxSelectedItems);\n }\n if (clearFilters) {\n that._clearFilter();\n }\n listView.value(value);\n that._old = listView.value();\n if (!clearFilters) {\n that._fetchData();\n }\n },\n _preselect: function (data, value) {\n var that = this;\n if (!isArray(data) && !(data instanceof kendo.data.ObservableArray)) {\n data = [data];\n }\n if ($.isPlainObject(data[0]) || data[0] instanceof kendo.data.ObservableObject || !that.options.dataValueField) {\n that.dataSource.data(data);\n that.value(value || that._initialValues);\n that._retrieveData = true;\n }\n },\n _setOption: function (value, selected) {\n var option = this.element[0].children[this._optionsMap[value]];\n if (option) {\n option.selected = selected;\n }\n },\n _fetchData: function () {\n var that = this;\n var hasItems = !!that.dataSource.view().length;\n var isEmptyArray = that.listView.value().length === 0;\n if (isEmptyArray || that._request) {\n return;\n }\n if (that._retrieveData || !that._fetch && !hasItems) {\n that._fetch = true;\n that._retrieveData = false;\n that.dataSource.read().done(function () {\n that._fetch = false;\n });\n }\n },\n _isBound: function () {\n return this.listView.bound() && !this._retrieveData;\n },\n _dataSource: function () {\n var that = this, element = that.element, options = that.options, dataSource = options.dataSource || {};\n dataSource = isArray(dataSource) ? { data: dataSource } : dataSource;\n dataSource.select = element;\n dataSource.fields = [\n { field: options.dataTextField },\n { field: options.dataValueField }\n ];\n if (that.dataSource && that._refreshHandler) {\n that._unbindDataSource();\n } else {\n that._progressHandler = proxy(that._showBusy, that);\n that._errorHandler = proxy(that._hideBusy, that);\n }\n that.dataSource = kendo.data.DataSource.create(dataSource).bind(PROGRESS, that._progressHandler).bind('error', that._errorHandler);\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(that._initialValues);\n that._placeholder();\n });\n };\n that._form = form.on('reset', that._resetHandler);\n }\n },\n _initValue: function () {\n var value = this.options.value || this.element.val();\n this._old = this._initialValues = this._normalizeValues(value);\n },\n _normalizeValues: function (value) {\n var that = this;\n if (value === null) {\n value = [];\n } else if (value && $.isPlainObject(value)) {\n value = [that._value(value)];\n } else if (value && $.isPlainObject(value[0])) {\n value = $.map(value, function (dataItem) {\n return that._value(dataItem);\n });\n } else if (!isArray(value) && !(value instanceof ObservableArray)) {\n value = [value];\n } else if (isArray(value)) {\n value = value.slice();\n }\n return value;\n },\n _change: function () {\n var that = this, value = that.value();\n if (!compare(value, that._old)) {\n that._old = value.slice();\n that.trigger(CHANGE);\n that.element.trigger(CHANGE);\n }\n },\n _click: function (e) {\n var that = this;\n var item = e.item;\n e.preventDefault();\n that._select(item).done(function () {\n that._change();\n that._close();\n });\n },\n _keydown: function (e) {\n var that = this;\n var key = e.keyCode;\n var tag = that._currentTag;\n var listView = that.listView;\n var current = listView.focus();\n var hasValue = that.input.val();\n var isRtl = kendo.support.isRtl(that.wrapper);\n var visible = that.popup.visible();\n if (key === keys.DOWN) {\n e.preventDefault();\n if (!visible) {\n that.open();\n if (!current) {\n listView.focusFirst();\n }\n return;\n }\n if (current) {\n listView.focusNext();\n if (!listView.focus()) {\n listView.focusLast();\n }\n } else {\n listView.focusFirst();\n }\n } else if (key === keys.UP) {\n if (visible) {\n if (current) {\n listView.focusPrev();\n }\n if (!listView.focus()) {\n that.close();\n }\n }\n e.preventDefault();\n } else if (key === keys.LEFT && !isRtl || key === keys.RIGHT && isRtl) {\n if (!hasValue) {\n tag = tag ? tag.prev() : $(that.tagList[0].lastChild);\n if (tag[0]) {\n that.currentTag(tag);\n }\n }\n } else if (key === keys.RIGHT && !isRtl || key === keys.LEFT && isRtl) {\n if (!hasValue && tag) {\n tag = tag.next();\n that.currentTag(tag[0] ? tag : null);\n }\n } else if (key === keys.ENTER && visible) {\n that._select(current).done(function () {\n that._change();\n that._close();\n });\n e.preventDefault();\n } else if (key === keys.ESC) {\n if (visible) {\n e.preventDefault();\n } else {\n that.currentTag(null);\n }\n that.close();\n } else if (key === keys.HOME) {\n if (visible) {\n listView.focusFirst();\n } else if (!hasValue) {\n tag = that.tagList[0].firstChild;\n if (tag) {\n that.currentTag($(tag));\n }\n }\n } else if (key === keys.END) {\n if (visible) {\n listView.focusLast();\n } else if (!hasValue) {\n tag = that.tagList[0].lastChild;\n if (tag) {\n that.currentTag($(tag));\n }\n }\n } else if ((key === keys.DELETE || key === keys.BACKSPACE) && !hasValue) {\n if (that.options.tagMode === 'single') {\n listView.value([]);\n that._change();\n that._close();\n return;\n }\n if (key === keys.BACKSPACE && !tag) {\n tag = $(that.tagList[0].lastChild);\n }\n if (tag && tag[0]) {\n that._removeTag(tag);\n }\n } else if (that.popup.visible() && (key === keys.PAGEDOWN || key === keys.PAGEUP)) {\n e.preventDefault();\n var direction = key === keys.PAGEDOWN ? 1 : -1;\n listView.scrollWith(direction * listView.screenHeight());\n } else {\n clearTimeout(that._typingTimeout);\n setTimeout(function () {\n that._scale();\n });\n that._search();\n }\n },\n _hideBusy: function () {\n var that = this;\n clearTimeout(that._busy);\n that.input.attr('aria-busy', false);\n that._loading.addClass(HIDDENCLASS);\n that._request = false;\n that._busy = null;\n that._showClear();\n },\n _showBusyHandler: function () {\n this.input.attr('aria-busy', true);\n this._loading.removeClass(HIDDENCLASS);\n this._hideClear();\n },\n _showBusy: function () {\n var that = this;\n that._request = true;\n if (that._busy) {\n return;\n }\n that._busy = setTimeout(proxy(that._showBusyHandler, that), 100);\n },\n _placeholder: function (show, skipCaret) {\n var that = this;\n var input = that.input;\n var active = activeElement();\n var placeholder = that.options.placeholder;\n var inputValue = input.val();\n var isActive = input[0] === active;\n var caretPos = inputValue.length;\n if (!isActive || that.options.autoClose || inputValue === placeholder) {\n caretPos = 0;\n inputValue = '';\n }\n if (show === undefined) {\n show = false;\n if (input[0] !== active) {\n show = !that.listView.selectedDataItems()[0];\n }\n }\n that._prev = inputValue;\n input.toggleClass('k-readonly', show).val(show ? placeholder : inputValue);\n if (isActive && !skipCaret) {\n kendo.caret(input[0], caretPos, caretPos);\n }\n that._scale();\n },\n _scale: function () {\n var that = this, wrapper = that.wrapper, wrapperWidth = wrapper.width(), span = that._span.text(that.input.val()), textWidth;\n if (!wrapper.is(':visible')) {\n span.appendTo(document.documentElement);\n wrapperWidth = textWidth = span.width() + 25;\n span.appendTo(wrapper);\n } else {\n textWidth = span.width() + 25;\n }\n that.input.width(textWidth > wrapperWidth ? wrapperWidth : textWidth);\n },\n _option: function (dataValue, dataText, selected) {\n var option = '<option';\n if (dataValue !== undefined) {\n dataValue += '';\n if (dataValue.indexOf('\"') !== -1) {\n dataValue = dataValue.replace(quotRegExp, '"');\n }\n option += ' value=\"' + dataValue + '\"';\n }\n if (selected) {\n option += ' selected';\n }\n option += '>';\n if (dataText !== undefined) {\n option += kendo.htmlEncode(dataText);\n }\n return option += '</option>';\n },\n _render: function (data) {\n var selectedItems = this.listView.selectedDataItems();\n var values = this.listView.value();\n var length = data.length;\n var selectedIndex;\n var options = '';\n var dataItem;\n var value;\n var idx;\n if (values.length !== selectedItems.length) {\n selectedItems = this._buildSelectedItems(values);\n }\n var custom = {};\n var optionsMap = {};\n for (idx = 0; idx < length; idx++) {\n dataItem = data[idx];\n value = this._value(dataItem);\n selectedIndex = this._selectedItemIndex(value, selectedItems);\n if (selectedIndex !== -1) {\n selectedItems.splice(selectedIndex, 1);\n }\n optionsMap[value] = idx;\n options += this._option(value, this._text(dataItem), selectedIndex !== -1);\n }\n if (selectedItems.length) {\n for (idx = 0; idx < selectedItems.length; idx++) {\n dataItem = selectedItems[idx];\n value = this._value(dataItem);\n custom[value] = length;\n optionsMap[value] = length;\n length += 1;\n options += this._option(value, this._text(dataItem), true);\n }\n }\n this._customOptions = custom;\n this._optionsMap = optionsMap;\n this.element.html(options);\n },\n _buildSelectedItems: function (values) {\n var valueField = this.options.dataValueField;\n var textField = this.options.dataTextField;\n var result = [];\n var item;\n for (var idx = 0; idx < values.length; idx++) {\n item = {};\n item[valueField] = values[idx];\n item[textField] = values[idx];\n result.push(item);\n }\n return result;\n },\n _selectedItemIndex: function (value, selectedItems) {\n var valueGetter = this._value;\n var idx = 0;\n for (; idx < selectedItems.length; idx++) {\n if (value === valueGetter(selectedItems[idx])) {\n return idx;\n }\n }\n return -1;\n },\n _search: function () {\n var that = this;\n that._typingTimeout = setTimeout(function () {\n var value = that.input.val();\n if (that._prev !== value) {\n that._prev = value;\n that.search(value);\n }\n }, that.options.delay);\n },\n _allowOpening: function () {\n return this._allowSelection() && List.fn._allowOpening.call(this);\n },\n _allowSelection: function () {\n var max = this.options.maxSelectedItems;\n return max === null || max > this.listView.value().length;\n },\n _angularTagItems: function (cmd) {\n var that = this;\n that.angular(cmd, function () {\n return {\n elements: that.tagList[0].children,\n data: $.map(that.dataItems(), function (dataItem) {\n return { dataItem: dataItem };\n })\n };\n });\n },\n _selectValue: function (added, removed) {\n var that = this;\n var values = that.value();\n var total = that.dataSource.total();\n var tagList = that.tagList;\n var getter = that._value;\n var removedItem;\n var addedItem;\n var idx;\n that._angularTagItems('cleanup');\n if (that.options.tagMode === 'multiple') {\n for (idx = removed.length - 1; idx > -1; idx--) {\n removedItem = removed[idx];\n tagList[0].removeChild(tagList[0].children[removedItem.position]);\n that._setOption(getter(removedItem.dataItem), false);\n }\n for (idx = 0; idx < added.length; idx++) {\n addedItem = added[idx];\n tagList.append(that.tagTemplate(addedItem.dataItem));\n that._setOption(getter(addedItem.dataItem), true);\n }\n } else {\n if (!that._maxTotal || that._maxTotal < total) {\n that._maxTotal = total;\n }\n tagList.html('');\n if (values.length) {\n tagList.append(that.tagTemplate({\n values: values,\n dataItems: that.dataItems(),\n maxTotal: that._maxTotal,\n currentTotal: total\n }));\n }\n for (idx = removed.length - 1; idx > -1; idx--) {\n that._setOption(getter(removed[idx].dataItem), false);\n }\n for (idx = 0; idx < added.length; idx++) {\n that._setOption(getter(added[idx].dataItem), true);\n }\n }\n that._angularTagItems('compile');\n that._placeholder();\n },\n _select: function (candidate) {\n var resolved = $.Deferred().resolve();\n if (!candidate) {\n return resolved;\n }\n var that = this;\n var listView = that.listView;\n var dataItem = listView.dataItemByIndex(listView.getElementIndex(candidate));\n var isSelected = candidate.hasClass('k-state-selected');\n if (that._state === REBIND) {\n that._state = '';\n }\n if (!that._allowSelection()) {\n return resolved;\n }\n if (that.trigger(isSelected ? DESELECT : SELECT, {\n dataItem: dataItem,\n item: candidate\n })) {\n that._close();\n return resolved;\n }\n return listView.select(candidate).done(function () {\n that._placeholder();\n if (that._state === FILTER) {\n that._state = ACCEPT;\n listView.skipUpdate(true);\n }\n });\n },\n _input: function () {\n var that = this;\n var element = that.element;\n var accessKey = element[0].accessKey;\n var input = that._innerWrapper.children('input.k-input');\n if (!input[0]) {\n input = $('<input class=\"k-input\" style=\"width: 25px\" />').appendTo(that._innerWrapper);\n }\n element.removeAttr('accesskey');\n that._focused = that.input = input.attr({\n 'accesskey': accessKey,\n 'autocomplete': 'off',\n 'role': 'listbox',\n 'title': element[0].title,\n 'aria-expanded': false\n });\n },\n _tagList: function () {\n var that = this, tagList = that._innerWrapper.children('ul');\n if (!tagList[0]) {\n tagList = $('<ul role=\"listbox\" deselectable=\"on\" class=\"k-reset\"/>').appendTo(that._innerWrapper);\n }\n that.tagList = tagList;\n },\n _tagTemplate: function () {\n var that = this;\n var options = that.options;\n var tagTemplate = options.tagTemplate;\n var hasDataSource = options.dataSource;\n var isMultiple = options.tagMode === 'multiple';\n var defaultTemplate;\n if (that.element[0].length && !hasDataSource) {\n options.dataTextField = options.dataTextField || 'text';\n options.dataValueField = options.dataValueField || 'value';\n }\n defaultTemplate = isMultiple ? kendo.template('#:' + kendo.expr(options.dataTextField, 'data') + '#', { useWithBlock: false }) : kendo.template('#:values.length# item(s) selected');\n that.tagTextTemplate = tagTemplate = tagTemplate ? kendo.template(tagTemplate) : defaultTemplate;\n that.tagTemplate = function (data) {\n return '<li class=\"k-button\" deselectable=\"on\"><span deselectable=\"on\">' + tagTemplate(data) + '</span><span unselectable=\"on\" aria-label=\"' + (isMultiple ? 'delete' : 'open') + '\" class=\"k-select\"><span class=\"k-icon ' + (isMultiple ? 'k-i-close' : 'k-i-arrow-60-down') + '\">' + '</span></span></li>';\n };\n },\n _loader: function () {\n this._loading = $('<span class=\"k-icon k-i-loading ' + HIDDENCLASS + '\"></span>').insertAfter(this.input);\n },\n _clearButton: function () {\n this._clear = $('<span deselectable=\"on\" class=\"k-icon k-clear-value k-i-close\" title=\"clear\"></span>').attr({\n 'role': 'button',\n 'tabIndex': -1\n });\n if (this.options.clearButton) {\n this._clear.insertAfter(this.input);\n }\n },\n _textContainer: function () {\n var computedStyles = kendo.getComputedStyles(this.input[0], styles);\n computedStyles.position = 'absolute';\n computedStyles.visibility = 'hidden';\n computedStyles.top = -3333;\n computedStyles.left = -3333;\n this._span = $('<span/>').css(computedStyles).appendTo(this.wrapper);\n },\n _wrapper: function () {\n var that = this, element = that.element, wrapper = element.parent('span.k-multiselect');\n if (!wrapper[0]) {\n wrapper = element.wrap('<div class=\"k-widget k-multiselect k-header\" deselectable=\"on\" />').parent();\n wrapper[0].style.cssText = element[0].style.cssText;\n wrapper[0].title = element[0].title;\n $('<div class=\"k-multiselect-wrap k-floatwrap\" deselectable=\"on\" />').insertBefore(element);\n }\n that.wrapper = wrapper.addClass(element[0].className).css('display', '');\n that._innerWrapper = $(wrapper[0].firstChild);\n }\n });\n function compare(a, b) {\n var length;\n if (a === null && b !== null || a !== null && b === null) {\n return false;\n }\n length = a.length;\n if (length !== b.length) {\n return false;\n }\n while (length--) {\n if (a[length] !== b[length]) {\n return false;\n }\n }\n return true;\n }\n ui.plugin(MultiSelect);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.slider', ['kendo.draganddrop'], f);\n}(function () {\n var __meta__ = {\n id: 'slider',\n name: 'Slider',\n category: 'web',\n description: 'The Slider widget provides a rich input for selecting values or ranges of values.',\n depends: ['draganddrop']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, Draggable = kendo.ui.Draggable, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, extend = $.extend, format = kendo.format, parse = kendo.parseFloat, proxy = $.proxy, isArray = $.isArray, math = Math, support = kendo.support, pointers = support.pointers, msPointers = support.msPointers, CHANGE = 'change', SLIDE = 'slide', NS = '.slider', MOUSE_DOWN = 'touchstart' + NS + ' mousedown' + NS, TRACK_MOUSE_DOWN = pointers ? 'pointerdown' + NS : msPointers ? 'MSPointerDown' + NS : MOUSE_DOWN, MOUSE_UP = 'touchend' + NS + ' mouseup' + NS, TRACK_MOUSE_UP = pointers ? 'pointerup' : msPointers ? 'MSPointerUp' + NS : MOUSE_UP, MOVE_SELECTION = 'moveSelection', KEY_DOWN = 'keydown' + NS, CLICK = 'click' + NS, MOUSE_OVER = 'mouseover' + NS, FOCUS = 'focus' + NS, BLUR = 'blur' + NS, DRAG_HANDLE = '.k-draghandle', TRACK_SELECTOR = '.k-slider-track', TICK_SELECTOR = '.k-tick', STATE_SELECTED = 'k-state-selected', STATE_FOCUSED = 'k-state-focused', STATE_DEFAULT = 'k-state-default', STATE_DISABLED = 'k-state-disabled', DISABLED = 'disabled', UNDEFINED = 'undefined', TABINDEX = 'tabindex', getTouches = kendo.getTouches;\n var SliderBase = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n that._isHorizontal = options.orientation == 'horizontal';\n that._isRtl = that._isHorizontal && kendo.support.isRtl(element);\n that._position = that._isHorizontal ? 'left' : 'bottom';\n that._sizeFn = that._isHorizontal ? 'width' : 'height';\n that._outerSize = that._isHorizontal ? outerWidth : outerHeight;\n options.tooltip.format = options.tooltip.enabled ? options.tooltip.format || '{0}' : '{0}';\n if (options.smallStep <= 0) {\n throw new Error('Kendo UI Slider smallStep must be a positive number.');\n }\n that._createHtml();\n that.wrapper = that.element.closest('.k-slider');\n that._trackDiv = that.wrapper.find(TRACK_SELECTOR);\n that._setTrackDivWidth();\n that._maxSelection = that._trackDiv[that._sizeFn]();\n that._sliderItemsInit();\n that._reset();\n that._tabindex(that.wrapper.find(DRAG_HANDLE));\n that[options.enabled ? 'enable' : 'disable']();\n var rtlDirectionSign = kendo.support.isRtl(that.wrapper) ? -1 : 1;\n that._keyMap = {\n 37: step(-1 * rtlDirectionSign * options.smallStep),\n 40: step(-options.smallStep),\n 39: step(+1 * rtlDirectionSign * options.smallStep),\n 38: step(+options.smallStep),\n 35: setValue(options.max),\n 36: setValue(options.min),\n 33: step(+options.largeStep),\n 34: step(-options.largeStep)\n };\n kendo.notify(that);\n },\n events: [\n CHANGE,\n SLIDE\n ],\n options: {\n enabled: true,\n min: 0,\n max: 10,\n smallStep: 1,\n largeStep: 5,\n orientation: 'horizontal',\n tickPlacement: 'both',\n tooltip: {\n enabled: true,\n format: '{0}'\n }\n },\n _distance: function () {\n return round(this.options.max - this.options.min);\n },\n _resize: function () {\n this._setTrackDivWidth();\n this.wrapper.find('.k-slider-items').remove();\n this._maxSelection = this._trackDiv[this._sizeFn]();\n this._sliderItemsInit();\n this._refresh();\n if (this.options.enabled) {\n this.enable(true);\n }\n },\n _sliderItemsInit: function () {\n var that = this, options = that.options;\n var sizeBetweenTicks = that._maxSelection / ((options.max - options.min) / options.smallStep);\n var pixelWidths = that._calculateItemsWidth(math.floor(that._distance() / options.smallStep));\n if (options.tickPlacement != 'none' && sizeBetweenTicks >= 2) {\n $(this.element).parent().find('.k-slider-items').remove();\n that._trackDiv.before(createSliderItems(options, that._distance()));\n that._setItemsWidth(pixelWidths);\n that._setItemsTitle();\n }\n that._calculateSteps(pixelWidths);\n if (options.tickPlacement != 'none' && sizeBetweenTicks >= 2 && options.largeStep >= options.smallStep) {\n that._setItemsLargeTick();\n }\n },\n getSize: function () {\n return kendo.dimensions(this.wrapper);\n },\n _setTrackDivWidth: function () {\n var that = this, trackDivPosition = parseFloat(that._trackDiv.css(that._isRtl ? 'right' : that._position), 10) * 2;\n that._trackDiv[that._sizeFn](that.wrapper[that._sizeFn]() - 2 - trackDivPosition);\n },\n _setItemsWidth: function (pixelWidths) {\n var that = this, options = that.options, first = 0, last = pixelWidths.length - 1, items = that.wrapper.find(TICK_SELECTOR), i, paddingTop = 0, bordersWidth = 2, count = items.length, selection = 0;\n for (i = 0; i < count - 2; i++) {\n $(items[i + 1])[that._sizeFn](pixelWidths[i]);\n }\n if (that._isHorizontal) {\n $(items[first]).addClass('k-first')[that._sizeFn](pixelWidths[last - 1]);\n $(items[last]).addClass('k-last')[that._sizeFn](pixelWidths[last]);\n } else {\n $(items[last]).addClass('k-first')[that._sizeFn](pixelWidths[last]);\n $(items[first]).addClass('k-last')[that._sizeFn](pixelWidths[last - 1]);\n }\n if (that._distance() % options.smallStep !== 0 && !that._isHorizontal) {\n for (i = 0; i < pixelWidths.length; i++) {\n selection += pixelWidths[i];\n }\n paddingTop = that._maxSelection - selection;\n paddingTop += parseFloat(that._trackDiv.css(that._position), 10) + bordersWidth;\n that.wrapper.find('.k-slider-items').css('padding-top', paddingTop);\n }\n },\n _setItemsTitle: function () {\n var that = this, options = that.options, items = that.wrapper.find(TICK_SELECTOR), titleNumber = options.min, count = items.length, i = that._isHorizontal && !that._isRtl ? 0 : count - 1, limit = that._isHorizontal && !that._isRtl ? count : -1, increment = that._isHorizontal && !that._isRtl ? 1 : -1;\n for (; i - limit !== 0; i += increment) {\n $(items[i]).attr('title', format(options.tooltip.format, round(titleNumber)));\n titleNumber += options.smallStep;\n }\n },\n _setItemsLargeTick: function () {\n var that = this, options = that.options, items = that.wrapper.find(TICK_SELECTOR), i = 0, item, value;\n if (removeFraction(options.largeStep) % removeFraction(options.smallStep) === 0 || that._distance() / options.largeStep >= 3) {\n if (!that._isHorizontal && !that._isRtl) {\n items = $.makeArray(items).reverse();\n }\n for (i = 0; i < items.length; i++) {\n item = $(items[i]);\n value = that._values[i];\n var valueWithoutFraction = round(removeFraction(value - this.options.min));\n if (valueWithoutFraction % removeFraction(options.smallStep) === 0 && valueWithoutFraction % removeFraction(options.largeStep) === 0) {\n item.addClass('k-tick-large').html('<span class=\\'k-label\\'>' + item.attr('title') + '</span>');\n if (i !== 0 && i !== items.length - 1) {\n item.css('line-height', item[that._sizeFn]() + 'px');\n }\n }\n }\n }\n },\n _calculateItemsWidth: function (itemsCount) {\n var that = this, options = that.options, trackDivSize = parseFloat(that._trackDiv.css(that._sizeFn)) + 1, distance = that._distance(), pixelStep = trackDivSize / distance, itemWidth, pixelWidths, i;\n if (distance / options.smallStep - math.floor(distance / options.smallStep) > 0) {\n trackDivSize -= distance % options.smallStep * pixelStep;\n }\n itemWidth = trackDivSize / itemsCount;\n pixelWidths = [];\n for (i = 0; i < itemsCount - 1; i++) {\n pixelWidths[i] = itemWidth;\n }\n pixelWidths[itemsCount - 1] = pixelWidths[itemsCount] = itemWidth / 2;\n return that._roundWidths(pixelWidths);\n },\n _roundWidths: function (pixelWidthsArray) {\n var balance = 0, count = pixelWidthsArray.length, i;\n for (i = 0; i < count; i++) {\n balance += pixelWidthsArray[i] - math.floor(pixelWidthsArray[i]);\n pixelWidthsArray[i] = math.floor(pixelWidthsArray[i]);\n }\n balance = math.round(balance);\n return this._addAdditionalSize(balance, pixelWidthsArray);\n },\n _addAdditionalSize: function (additionalSize, pixelWidthsArray) {\n if (additionalSize === 0) {\n return pixelWidthsArray;\n }\n var step = parseFloat(pixelWidthsArray.length - 1) / parseFloat(additionalSize == 1 ? additionalSize : additionalSize - 1), i;\n for (i = 0; i < additionalSize; i++) {\n pixelWidthsArray[parseInt(math.round(step * i), 10)] += 1;\n }\n return pixelWidthsArray;\n },\n _calculateSteps: function (pixelWidths) {\n var that = this, options = that.options, val = options.min, selection = 0, distance = that._distance(), itemsCount = math.ceil(distance / options.smallStep), i = 1, lastItem;\n itemsCount += distance / options.smallStep % 1 === 0 ? 1 : 0;\n pixelWidths.splice(0, 0, pixelWidths[itemsCount - 2] * 2);\n pixelWidths.splice(itemsCount - 1, 1, pixelWidths.pop() * 2);\n that._pixelSteps = [selection];\n that._values = [val];\n if (itemsCount === 0) {\n return;\n }\n while (i < itemsCount) {\n selection += (pixelWidths[i - 1] + pixelWidths[i]) / 2;\n that._pixelSteps[i] = selection;\n val += options.smallStep;\n that._values[i] = round(val);\n i++;\n }\n lastItem = distance % options.smallStep === 0 ? itemsCount - 1 : itemsCount;\n that._pixelSteps[lastItem] = that._maxSelection;\n that._values[lastItem] = options.max;\n if (that._isRtl) {\n that._pixelSteps.reverse();\n that._values.reverse();\n }\n },\n _getValueFromPosition: function (mousePosition, dragableArea) {\n var that = this, options = that.options, step = math.max(options.smallStep * (that._maxSelection / that._distance()), 0), position = 0, halfStep = step / 2, i;\n if (that._isHorizontal) {\n position = mousePosition - dragableArea.startPoint;\n if (that._isRtl) {\n position = that._maxSelection - position;\n }\n } else {\n position = dragableArea.startPoint - mousePosition;\n }\n if (that._maxSelection - (parseInt(that._maxSelection % step, 10) - 3) / 2 < position) {\n return options.max;\n }\n for (i = 0; i < that._pixelSteps.length; i++) {\n if (math.abs(that._pixelSteps[i] - position) - 1 <= halfStep) {\n return round(that._values[i]);\n }\n }\n },\n _getFormattedValue: function (val, drag) {\n var that = this, html = '', tooltip = that.options.tooltip, tooltipTemplate, selectionStart, selectionEnd;\n if (isArray(val)) {\n selectionStart = val[0];\n selectionEnd = val[1];\n } else if (drag && drag.type) {\n selectionStart = drag.selectionStart;\n selectionEnd = drag.selectionEnd;\n }\n if (drag) {\n tooltipTemplate = drag.tooltipTemplate;\n }\n if (!tooltipTemplate && tooltip.template) {\n tooltipTemplate = kendo.template(tooltip.template);\n }\n if (isArray(val) || drag && drag.type) {\n if (tooltipTemplate) {\n html = tooltipTemplate({\n selectionStart: selectionStart,\n selectionEnd: selectionEnd\n });\n } else {\n selectionStart = format(tooltip.format, selectionStart);\n selectionEnd = format(tooltip.format, selectionEnd);\n html = selectionStart + ' - ' + selectionEnd;\n }\n } else {\n if (drag) {\n drag.val = val;\n }\n if (tooltipTemplate) {\n html = tooltipTemplate({ value: val });\n } else {\n html = format(tooltip.format, val);\n }\n }\n return html;\n },\n _getDraggableArea: function () {\n var that = this, offset = kendo.getOffset(that._trackDiv);\n return {\n startPoint: that._isHorizontal ? offset.left : offset.top + that._maxSelection,\n endPoint: that._isHorizontal ? offset.left + that._maxSelection : offset.top\n };\n },\n _createHtml: function () {\n var that = this, element = that.element, options = that.options, inputs = element.find('input');\n if (inputs.length == 2) {\n inputs.eq(0).prop('value', formatValue(options.selectionStart));\n inputs.eq(1).prop('value', formatValue(options.selectionEnd));\n } else {\n element.prop('value', formatValue(options.value));\n }\n element.wrap(createWrapper(options, element, that._isHorizontal)).hide();\n if (options.showButtons) {\n element.before(createButton(options, 'increase', that._isHorizontal, that._isRtl)).before(createButton(options, 'decrease', that._isHorizontal, that._isRtl));\n }\n element.before(createTrack(options, element));\n },\n _focus: function (e) {\n var that = this, target = e.target, val = that.value(), drag = that._drag;\n if (!drag) {\n if (target == that.wrapper.find(DRAG_HANDLE).eq(0)[0]) {\n drag = that._firstHandleDrag;\n that._activeHandle = 0;\n } else {\n drag = that._lastHandleDrag;\n that._activeHandle = 1;\n }\n val = val[that._activeHandle];\n }\n $(target).addClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n if (drag) {\n that._activeHandleDrag = drag;\n drag.selectionStart = that.options.selectionStart;\n drag.selectionEnd = that.options.selectionEnd;\n drag._updateTooltip(val);\n }\n },\n _focusWithMouse: function (target) {\n target = $(target);\n var that = this, idx = target.is(DRAG_HANDLE) ? target.index() : 0;\n window.setTimeout(function () {\n that.wrapper.find(DRAG_HANDLE)[idx == 2 ? 1 : 0].focus();\n }, 1);\n that._setTooltipTimeout();\n },\n _blur: function (e) {\n var that = this, drag = that._activeHandleDrag;\n $(e.target).removeClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n if (drag) {\n drag._removeTooltip();\n delete that._activeHandleDrag;\n delete that._activeHandle;\n }\n },\n _setTooltipTimeout: function () {\n var that = this;\n that._tooltipTimeout = window.setTimeout(function () {\n var drag = that._drag || that._activeHandleDrag;\n if (drag) {\n drag._removeTooltip();\n }\n }, 300);\n },\n _clearTooltipTimeout: function () {\n var that = this;\n window.clearTimeout(this._tooltipTimeout);\n var drag = that._drag || that._activeHandleDrag;\n if (drag && drag.tooltipDiv) {\n drag.tooltipDiv.stop(true, false).css('opacity', 1);\n }\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._form = form.on('reset', proxy(that._formResetHandler, that));\n }\n },\n min: function (value) {\n if (!value) {\n return this.options.min;\n }\n this.setOptions({ 'min': value });\n },\n max: function (value) {\n if (!value) {\n return this.options.max;\n }\n this.setOptions({ 'max': value });\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n this._sliderItemsInit();\n this._refresh();\n },\n destroy: function () {\n if (this._form) {\n this._form.off('reset', this._formResetHandler);\n }\n Widget.fn.destroy.call(this);\n }\n });\n function createWrapper(options, element, isHorizontal) {\n var orientationCssClass = isHorizontal ? ' k-slider-horizontal' : ' k-slider-vertical', style = options.style ? options.style : element.attr('style'), cssClasses = element.attr('class') ? ' ' + element.attr('class') : '', tickPlacementCssClass = '';\n if (options.tickPlacement == 'bottomRight') {\n tickPlacementCssClass = ' k-slider-bottomright';\n } else if (options.tickPlacement == 'topLeft') {\n tickPlacementCssClass = ' k-slider-topleft';\n }\n style = style ? ' style=\\'' + style + '\\'' : '';\n return '<div class=\\'k-widget k-slider' + orientationCssClass + cssClasses + '\\'' + style + '>' + '<div class=\\'k-slider-wrap' + (options.showButtons ? ' k-slider-buttons' : '') + tickPlacementCssClass + '\\'></div></div>';\n }\n function createButton(options, type, isHorizontal, isRtl) {\n var buttonCssClass = '';\n if (isHorizontal) {\n if (!isRtl && type == 'increase' || isRtl && type != 'increase') {\n buttonCssClass = 'k-i-arrow-60-right';\n } else {\n buttonCssClass = 'k-i-arrow-60-left';\n }\n } else {\n if (type == 'increase') {\n buttonCssClass = 'k-i-arrow-60-up';\n } else {\n buttonCssClass = 'k-i-arrow-60-down';\n }\n }\n return '<a class=\\'k-button k-button-' + type + '\\' ' + 'title=\\'' + options[type + 'ButtonTitle'] + '\\' ' + 'aria-label=\\'' + options[type + 'ButtonTitle'] + '\\'>' + '<span class=\\'k-icon ' + buttonCssClass + '\\'></span></a>';\n }\n function createSliderItems(options, distance) {\n var result = '<ul class=\\'k-reset k-slider-items\\'>', count = math.floor(round(distance / options.smallStep)) + 1, i;\n for (i = 0; i < count; i++) {\n result += '<li class=\\'k-tick\\' role=\\'presentation\\'> </li>';\n }\n result += '</ul>';\n return result;\n }\n function createTrack(options, element) {\n var dragHandleCount = element.is('input') ? 1 : 2, firstDragHandleTitle = dragHandleCount == 2 ? options.leftDragHandleTitle : options.dragHandleTitle;\n return '<div class=\\'k-slider-track\\'><div class=\\'k-slider-selection\\'><!-- --></div>' + '<a href=\\'#\\' class=\\'k-draghandle\\' title=\\'' + firstDragHandleTitle + '\\' role=\\'slider\\' aria-valuemin=\\'' + options.min + '\\' aria-valuemax=\\'' + options.max + '\\' aria-valuenow=\\'' + (dragHandleCount > 1 ? options.selectionStart || options.min : options.value || options.min) + '\\'>Drag</a>' + (dragHandleCount > 1 ? '<a href=\\'#\\' class=\\'k-draghandle\\' title=\\'' + options.rightDragHandleTitle + '\\'role=\\'slider\\' aria-valuemin=\\'' + options.min + '\\' aria-valuemax=\\'' + options.max + '\\' aria-valuenow=\\'' + (options.selectionEnd || options.max) + '\\'>Drag</a>' : '') + '</div>';\n }\n function step(stepValue) {\n return function (value) {\n return value + stepValue;\n };\n }\n function setValue(value) {\n return function () {\n return value;\n };\n }\n function formatValue(value) {\n return (value + '').replace('.', kendo.cultures.current.numberFormat['.']);\n }\n function calculatePrecision(value) {\n var number = value.toString();\n var precision = 0;\n number = number.split('.');\n if (number[1]) {\n precision = number[1].length;\n }\n precision = precision > 10 ? 10 : precision;\n return precision;\n }\n function round(value) {\n var precision, power;\n value = parseFloat(value, 10);\n precision = calculatePrecision(value);\n power = math.pow(10, precision || 0);\n return math.round(value * power) / power;\n }\n function parseAttr(element, name) {\n var value = parse(element.getAttribute(name));\n if (value === null) {\n value = undefined;\n }\n return value;\n }\n function defined(value) {\n return typeof value !== UNDEFINED;\n }\n function removeFraction(value) {\n return value * 10000;\n }\n var Slider = SliderBase.extend({\n init: function (element, options) {\n var that = this, dragHandle;\n element.type = 'text';\n options = extend({}, {\n value: parseAttr(element, 'value'),\n min: parseAttr(element, 'min'),\n max: parseAttr(element, 'max'),\n smallStep: parseAttr(element, 'step')\n }, options);\n element = $(element);\n if (options && options.enabled === undefined) {\n options.enabled = !element.is('[disabled]');\n }\n SliderBase.fn.init.call(that, element, options);\n options = that.options;\n if (!defined(options.value) || options.value === null) {\n options.value = options.min;\n element.prop('value', formatValue(options.min));\n }\n options.value = math.max(math.min(options.value, options.max), options.min);\n dragHandle = that.wrapper.find(DRAG_HANDLE);\n this._selection = new Slider.Selection(dragHandle, that, options);\n that._drag = new Slider.Drag(dragHandle, '', that, options);\n },\n options: {\n name: 'Slider',\n showButtons: true,\n increaseButtonTitle: 'Increase',\n decreaseButtonTitle: 'Decrease',\n dragHandleTitle: 'drag',\n tooltip: { format: '{0:#,#.##}' },\n value: null\n },\n enable: function (enable) {\n var that = this, options = that.options, clickHandler, move;\n that.disable();\n if (enable === false) {\n return;\n }\n that.wrapper.removeClass(STATE_DISABLED).addClass(STATE_DEFAULT);\n that.wrapper.find('input').removeAttr(DISABLED);\n clickHandler = function (e) {\n var touch = getTouches(e)[0];\n if (!touch) {\n return;\n }\n var mousePosition = that._isHorizontal ? touch.location.pageX : touch.location.pageY, dragableArea = that._getDraggableArea(), target = $(e.target);\n if (target.hasClass('k-draghandle')) {\n target.addClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n return;\n }\n that._update(that._getValueFromPosition(mousePosition, dragableArea));\n that._focusWithMouse(e.target);\n that._drag.dragstart(e);\n e.preventDefault();\n };\n that.wrapper.find(TICK_SELECTOR + ', ' + TRACK_SELECTOR).on(TRACK_MOUSE_DOWN, clickHandler).end().on(TRACK_MOUSE_DOWN, function () {\n $(document.documentElement).one('selectstart', kendo.preventDefault);\n }).on(TRACK_MOUSE_UP, function () {\n that._drag._end();\n });\n that.wrapper.find(DRAG_HANDLE).attr(TABINDEX, 0).on(MOUSE_UP, function () {\n that._setTooltipTimeout();\n }).on(CLICK, function (e) {\n that._focusWithMouse(e.target);\n e.preventDefault();\n }).on(FOCUS, proxy(that._focus, that)).on(BLUR, proxy(that._blur, that));\n move = proxy(function (sign) {\n var newVal = that._nextValueByIndex(that._valueIndex + sign * 1);\n that._setValueInRange(newVal);\n that._drag._updateTooltip(newVal);\n }, that);\n if (options.showButtons) {\n var mouseDownHandler = proxy(function (e, sign) {\n this._clearTooltipTimeout();\n if (e.which === 1 || support.touch && e.which === 0) {\n move(sign);\n this.timeout = setTimeout(proxy(function () {\n this.timer = setInterval(function () {\n move(sign);\n }, 60);\n }, this), 200);\n }\n }, that);\n that.wrapper.find('.k-button').on(MOUSE_UP, proxy(function (e) {\n this._clearTimer();\n that._focusWithMouse(e.target);\n }, that)).on(MOUSE_OVER, function (e) {\n $(e.currentTarget).addClass('k-state-hover');\n }).on('mouseout' + NS, proxy(function (e) {\n $(e.currentTarget).removeClass('k-state-hover');\n this._clearTimer();\n }, that)).eq(0).on(MOUSE_DOWN, proxy(function (e) {\n mouseDownHandler(e, 1);\n }, that)).click(false).end().eq(1).on(MOUSE_DOWN, proxy(function (e) {\n mouseDownHandler(e, -1);\n }, that)).click(kendo.preventDefault);\n }\n that.wrapper.find(DRAG_HANDLE).off(KEY_DOWN, false).on(KEY_DOWN, proxy(this._keydown, that));\n options.enabled = true;\n },\n disable: function () {\n var that = this;\n that.wrapper.removeClass(STATE_DEFAULT).addClass(STATE_DISABLED);\n $(that.element).prop(DISABLED, DISABLED);\n that.wrapper.find('.k-button').off(MOUSE_DOWN).on(MOUSE_DOWN, kendo.preventDefault).off(MOUSE_UP).on(MOUSE_UP, kendo.preventDefault).off('mouseleave' + NS).on('mouseleave' + NS, kendo.preventDefault).off(MOUSE_OVER).on(MOUSE_OVER, kendo.preventDefault);\n that.wrapper.find(TICK_SELECTOR + ', ' + TRACK_SELECTOR).off(TRACK_MOUSE_DOWN).off(TRACK_MOUSE_UP);\n that.wrapper.find(DRAG_HANDLE).attr(TABINDEX, -1).off(MOUSE_UP).off(KEY_DOWN).off(CLICK).off(FOCUS).off(BLUR);\n that.options.enabled = false;\n },\n _update: function (val) {\n var that = this, change = that.value() != val;\n that.value(val);\n if (change) {\n that.trigger(CHANGE, { value: that.options.value });\n }\n },\n value: function (value) {\n var that = this, options = that.options;\n value = round(value);\n if (isNaN(value)) {\n return options.value;\n }\n if (value >= options.min && value <= options.max) {\n if (options.value != value) {\n that.element.prop('value', formatValue(value));\n options.value = value;\n that._refreshAriaAttr(value);\n that._refresh();\n }\n }\n },\n _refresh: function () {\n this.trigger(MOVE_SELECTION, { value: this.options.value });\n },\n _refreshAriaAttr: function (value) {\n var that = this, drag = that._drag, formattedValue;\n if (drag && drag._tooltipDiv) {\n formattedValue = drag._tooltipDiv.text();\n } else {\n formattedValue = that._getFormattedValue(value, null);\n }\n this.wrapper.find(DRAG_HANDLE).attr('aria-valuenow', value).attr('aria-valuetext', formattedValue);\n },\n _clearTimer: function () {\n clearTimeout(this.timeout);\n clearInterval(this.timer);\n },\n _keydown: function (e) {\n var that = this;\n if (e.keyCode in that._keyMap) {\n that._clearTooltipTimeout();\n that._setValueInRange(that._keyMap[e.keyCode](that.options.value));\n that._drag._updateTooltip(that.value());\n e.preventDefault();\n }\n },\n _setValueInRange: function (val) {\n var that = this, options = that.options;\n val = round(val);\n if (isNaN(val)) {\n that._update(options.min);\n return;\n }\n val = math.max(math.min(val, options.max), options.min);\n that._update(val);\n },\n _nextValueByIndex: function (index) {\n var count = this._values.length;\n if (this._isRtl) {\n index = count - 1 - index;\n }\n return this._values[math.max(0, math.min(index, count - 1))];\n },\n _formResetHandler: function () {\n var that = this, min = that.options.min;\n setTimeout(function () {\n var value = that.element[0].value;\n that.value(value === '' || isNaN(value) ? min : value);\n });\n },\n destroy: function () {\n var that = this;\n SliderBase.fn.destroy.call(that);\n that.wrapper.off(NS).find('.k-button').off(NS).end().find(DRAG_HANDLE).off(NS).end().find(TICK_SELECTOR + ', ' + TRACK_SELECTOR).off(NS).end();\n that._drag.draggable.destroy();\n that._drag._removeTooltip(true);\n }\n });\n Slider.Selection = function (dragHandle, that, options) {\n function moveSelection(val) {\n var selectionValue = val - options.min, index = that._valueIndex = math.ceil(round(selectionValue / options.smallStep)), selection = parseInt(that._pixelSteps[index], 10), selectionDiv = that._trackDiv.find('.k-slider-selection'), halfDragHanndle = parseInt(that._outerSize(dragHandle) / 2, 10), rtlCorrection = that._isRtl ? 2 : 0;\n selectionDiv[that._sizeFn](that._isRtl ? that._maxSelection - selection : selection);\n dragHandle.css(that._position, selection - halfDragHanndle - rtlCorrection);\n }\n moveSelection(options.value);\n that.bind([\n SLIDE,\n MOVE_SELECTION\n ], function (e) {\n moveSelection(parseFloat(e.value, 10));\n });\n that.bind(CHANGE, function (e) {\n moveSelection(parseFloat(e.sender.value(), 10));\n });\n };\n Slider.Drag = function (element, type, owner, options) {\n var that = this;\n that.owner = owner;\n that.options = options;\n that.element = element;\n that.type = type;\n that.draggable = new Draggable(element, {\n distance: 0,\n dragstart: proxy(that._dragstart, that),\n drag: proxy(that.drag, that),\n dragend: proxy(that.dragend, that),\n dragcancel: proxy(that.dragcancel, that)\n });\n element.click(false);\n };\n Slider.Drag.prototype = {\n dragstart: function (e) {\n this.owner._activeDragHandle = this;\n this.draggable.userEvents.cancel();\n this._dragstart(e);\n this.dragend();\n },\n _dragstart: function (e) {\n var that = this, owner = that.owner, options = that.options;\n if (!options.enabled) {\n e.preventDefault();\n return;\n }\n this.owner._activeDragHandle = this;\n owner.element.off(MOUSE_OVER);\n owner.wrapper.find('.' + STATE_FOCUSED).removeClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n that.element.addClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n $(document.documentElement).css('cursor', 'pointer');\n that.dragableArea = owner._getDraggableArea();\n that.step = math.max(options.smallStep * (owner._maxSelection / owner._distance()), 0);\n if (that.type) {\n that.selectionStart = options.selectionStart;\n that.selectionEnd = options.selectionEnd;\n owner._setZIndex(that.type);\n } else {\n that.oldVal = that.val = options.value;\n }\n that._removeTooltip(true);\n that._createTooltip();\n },\n _createTooltip: function () {\n var that = this, owner = that.owner, tooltip = that.options.tooltip, html = '', wnd = $(window), tooltipTemplate, colloutCssClass;\n if (!tooltip.enabled) {\n return;\n }\n if (tooltip.template) {\n tooltipTemplate = that.tooltipTemplate = kendo.template(tooltip.template);\n }\n $('.k-slider-tooltip').remove();\n that.tooltipDiv = $('<div class=\\'k-widget k-tooltip k-slider-tooltip\\'><!-- --></div>').appendTo(document.body);\n html = owner._getFormattedValue(that.val || owner.value(), that);\n if (!that.type) {\n colloutCssClass = 'k-callout-' + (owner._isHorizontal ? 's' : 'e');\n that.tooltipInnerDiv = '<div class=\\'k-callout ' + colloutCssClass + '\\'><!-- --></div>';\n html += that.tooltipInnerDiv;\n }\n that.tooltipDiv.html(html);\n that._scrollOffset = {\n top: wnd.scrollTop(),\n left: wnd.scrollLeft()\n };\n that.moveTooltip();\n },\n drag: function (e) {\n var that = this, owner = that.owner, x = e.x.location, y = e.y.location, startPoint = that.dragableArea.startPoint, endPoint = that.dragableArea.endPoint, slideParams;\n e.preventDefault();\n if (owner._isHorizontal) {\n if (owner._isRtl) {\n that.val = that.constrainValue(x, startPoint, endPoint, x < endPoint);\n } else {\n that.val = that.constrainValue(x, startPoint, endPoint, x >= endPoint);\n }\n } else {\n that.val = that.constrainValue(y, endPoint, startPoint, y <= endPoint);\n }\n if (that.oldVal != that.val) {\n that.oldVal = that.val;\n if (that.type) {\n if (that.type == 'firstHandle') {\n if (that.val < that.selectionEnd) {\n that.selectionStart = that.val;\n } else {\n that.selectionStart = that.selectionEnd = that.val;\n }\n } else {\n if (that.val > that.selectionStart) {\n that.selectionEnd = that.val;\n } else {\n that.selectionStart = that.selectionEnd = that.val;\n }\n }\n slideParams = {\n values: [\n that.selectionStart,\n that.selectionEnd\n ],\n value: [\n that.selectionStart,\n that.selectionEnd\n ]\n };\n } else {\n slideParams = { value: that.val };\n }\n owner.trigger(SLIDE, slideParams);\n }\n that._updateTooltip(that.val);\n },\n _updateTooltip: function (val) {\n var that = this, options = that.options, tooltip = options.tooltip, html = '';\n if (!tooltip.enabled) {\n return;\n }\n if (!that.tooltipDiv) {\n that._createTooltip();\n }\n html = that.owner._getFormattedValue(round(val), that);\n if (!that.type) {\n html += that.tooltipInnerDiv;\n }\n that.tooltipDiv.html(html);\n that.moveTooltip();\n },\n dragcancel: function () {\n this.owner._refresh();\n $(document.documentElement).css('cursor', '');\n return this._end();\n },\n dragend: function () {\n var that = this, owner = that.owner;\n $(document.documentElement).css('cursor', '');\n if (that.type) {\n owner._update(that.selectionStart, that.selectionEnd);\n } else {\n owner._update(that.val);\n that.draggable.userEvents._disposeAll();\n }\n that.draggable.userEvents.cancel();\n return that._end();\n },\n _end: function () {\n var that = this, owner = that.owner;\n owner._focusWithMouse(that.element);\n owner.element.on(MOUSE_OVER);\n return false;\n },\n _removeTooltip: function (noAnimation) {\n var that = this, owner = that.owner;\n if (that.tooltipDiv && owner.options.tooltip.enabled && owner.options.enabled) {\n if (noAnimation) {\n that.tooltipDiv.remove();\n that.tooltipDiv = null;\n } else {\n that.tooltipDiv.fadeOut('slow', function () {\n $(this).remove();\n that.tooltipDiv = null;\n });\n }\n }\n },\n moveTooltip: function () {\n var that = this, owner = that.owner, top = 0, left = 0, element = that.element, offset = kendo.getOffset(element), margin = 8, viewport = $(window), callout = that.tooltipDiv.find('.k-callout'), width = outerWidth(that.tooltipDiv), height = outerHeight(that.tooltipDiv), dragHandles, sdhOffset, diff, anchorSize;\n if (that.type) {\n dragHandles = owner.wrapper.find(DRAG_HANDLE);\n offset = kendo.getOffset(dragHandles.eq(0));\n sdhOffset = kendo.getOffset(dragHandles.eq(1));\n if (owner._isHorizontal) {\n top = sdhOffset.top;\n left = offset.left + (sdhOffset.left - offset.left) / 2;\n } else {\n top = offset.top + (sdhOffset.top - offset.top) / 2;\n left = sdhOffset.left;\n }\n anchorSize = outerWidth(dragHandles.eq(0)) + 2 * margin;\n } else {\n top = offset.top;\n left = offset.left;\n anchorSize = outerWidth(element) + 2 * margin;\n }\n if (owner._isHorizontal) {\n left -= parseInt((width - owner._outerSize(element)) / 2, 10);\n top -= height + callout.height() + margin;\n } else {\n top -= parseInt((height - owner._outerSize(element)) / 2, 10);\n left -= width + callout.width() + margin;\n }\n if (owner._isHorizontal) {\n diff = that._flip(top, height, anchorSize, outerHeight(viewport) + that._scrollOffset.top);\n top += diff;\n left += that._fit(left, width, outerWidth(viewport) + that._scrollOffset.left);\n } else {\n diff = that._flip(left, width, anchorSize, outerWidth(viewport) + that._scrollOffset.left);\n top += that._fit(top, height, outerHeight(viewport) + that._scrollOffset.top);\n left += diff;\n }\n if (diff > 0 && callout) {\n callout.removeClass();\n callout.addClass('k-callout k-callout-' + (owner._isHorizontal ? 'n' : 'w'));\n }\n that.tooltipDiv.css({\n top: top,\n left: left\n });\n },\n _fit: function (position, size, viewPortEnd) {\n var output = 0;\n if (position + size > viewPortEnd) {\n output = viewPortEnd - (position + size);\n }\n if (position < 0) {\n output = -position;\n }\n return output;\n },\n _flip: function (offset, size, anchorSize, viewPortEnd) {\n var output = 0;\n if (offset + size > viewPortEnd) {\n output += -(anchorSize + size);\n }\n if (offset + output < 0) {\n output += anchorSize + size;\n }\n return output;\n },\n constrainValue: function (position, min, max, maxOverflow) {\n var that = this, val = 0;\n if (min < position && position < max) {\n val = that.owner._getValueFromPosition(position, that.dragableArea);\n } else {\n if (maxOverflow) {\n val = that.options.max;\n } else {\n val = that.options.min;\n }\n }\n return val;\n }\n };\n kendo.ui.plugin(Slider);\n var RangeSlider = SliderBase.extend({\n init: function (element, options) {\n var that = this, inputs = $(element).find('input'), firstInput = inputs.eq(0)[0], secondInput = inputs.eq(1)[0];\n firstInput.type = 'text';\n secondInput.type = 'text';\n if (options && options.showButtons) {\n if (window.console) {\n window.console.warn('showbuttons option is not supported for the range slider, ignoring');\n }\n options.showButtons = false;\n }\n options = extend({}, {\n selectionStart: parseAttr(firstInput, 'value'),\n min: parseAttr(firstInput, 'min'),\n max: parseAttr(firstInput, 'max'),\n smallStep: parseAttr(firstInput, 'step')\n }, {\n selectionEnd: parseAttr(secondInput, 'value'),\n min: parseAttr(secondInput, 'min'),\n max: parseAttr(secondInput, 'max'),\n smallStep: parseAttr(secondInput, 'step')\n }, options);\n if (options && options.enabled === undefined) {\n options.enabled = !inputs.is('[disabled]');\n }\n SliderBase.fn.init.call(that, element, options);\n options = that.options;\n if (!defined(options.selectionStart) || options.selectionStart === null) {\n options.selectionStart = options.min;\n inputs.eq(0).prop('value', formatValue(options.min));\n }\n if (!defined(options.selectionEnd) || options.selectionEnd === null) {\n options.selectionEnd = options.max;\n inputs.eq(1).prop('value', formatValue(options.max));\n }\n var dragHandles = that.wrapper.find(DRAG_HANDLE);\n this._selection = new RangeSlider.Selection(dragHandles, that, options);\n that._firstHandleDrag = new Slider.Drag(dragHandles.eq(0), 'firstHandle', that, options);\n that._lastHandleDrag = new Slider.Drag(dragHandles.eq(1), 'lastHandle', that, options);\n },\n options: {\n name: 'RangeSlider',\n leftDragHandleTitle: 'drag',\n rightDragHandleTitle: 'drag',\n tooltip: { format: '{0:#,#.##}' },\n selectionStart: null,\n selectionEnd: null\n },\n enable: function (enable) {\n var that = this, options = that.options, clickHandler;\n that.disable();\n if (enable === false) {\n return;\n }\n that.wrapper.removeClass(STATE_DISABLED).addClass(STATE_DEFAULT);\n that.wrapper.find('input').removeAttr(DISABLED);\n clickHandler = function (e) {\n var touch = getTouches(e)[0];\n if (!touch) {\n return;\n }\n var mousePosition = that._isHorizontal ? touch.location.pageX : touch.location.pageY, dragableArea = that._getDraggableArea(), val = that._getValueFromPosition(mousePosition, dragableArea), target = $(e.target), from, to, drag;\n if (target.hasClass('k-draghandle')) {\n that.wrapper.find('.' + STATE_FOCUSED).removeClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n target.addClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n return;\n }\n if (val < options.selectionStart) {\n from = val;\n to = options.selectionEnd;\n drag = that._firstHandleDrag;\n } else if (val > that.selectionEnd) {\n from = options.selectionStart;\n to = val;\n drag = that._lastHandleDrag;\n } else {\n if (val - options.selectionStart <= options.selectionEnd - val) {\n from = val;\n to = options.selectionEnd;\n drag = that._firstHandleDrag;\n } else {\n from = options.selectionStart;\n to = val;\n drag = that._lastHandleDrag;\n }\n }\n drag.dragstart(e);\n that._setValueInRange(from, to);\n that._focusWithMouse(drag.element);\n };\n that.wrapper.find(TICK_SELECTOR + ', ' + TRACK_SELECTOR).on(TRACK_MOUSE_DOWN, clickHandler).end().on(TRACK_MOUSE_DOWN, function () {\n $(document.documentElement).one('selectstart', kendo.preventDefault);\n }).on(TRACK_MOUSE_UP, function () {\n if (that._activeDragHandle) {\n that._activeDragHandle._end();\n }\n });\n that.wrapper.find(DRAG_HANDLE).attr(TABINDEX, 0).on(MOUSE_UP, function () {\n that._setTooltipTimeout();\n }).on(CLICK, function (e) {\n that._focusWithMouse(e.target);\n e.preventDefault();\n }).on(FOCUS, proxy(that._focus, that)).on(BLUR, proxy(that._blur, that));\n that.wrapper.find(DRAG_HANDLE).off(KEY_DOWN, kendo.preventDefault).eq(0).on(KEY_DOWN, proxy(function (e) {\n this._keydown(e, 'firstHandle');\n }, that)).end().eq(1).on(KEY_DOWN, proxy(function (e) {\n this._keydown(e, 'lastHandle');\n }, that));\n that.options.enabled = true;\n },\n disable: function () {\n var that = this;\n that.wrapper.removeClass(STATE_DEFAULT).addClass(STATE_DISABLED);\n that.wrapper.find('input').prop(DISABLED, DISABLED);\n that.wrapper.find(TICK_SELECTOR + ', ' + TRACK_SELECTOR).off(TRACK_MOUSE_DOWN).off(TRACK_MOUSE_UP);\n that.wrapper.find(DRAG_HANDLE).attr(TABINDEX, -1).off(MOUSE_UP).off(KEY_DOWN).off(CLICK).off(FOCUS).off(BLUR);\n that.options.enabled = false;\n },\n _keydown: function (e, handle) {\n var that = this, selectionStartValue = that.options.selectionStart, selectionEndValue = that.options.selectionEnd, dragSelectionStart, dragSelectionEnd, activeHandleDrag;\n if (e.keyCode in that._keyMap) {\n that._clearTooltipTimeout();\n if (handle == 'firstHandle') {\n activeHandleDrag = that._activeHandleDrag = that._firstHandleDrag;\n selectionStartValue = that._keyMap[e.keyCode](selectionStartValue);\n if (selectionStartValue > selectionEndValue) {\n selectionEndValue = selectionStartValue;\n }\n } else {\n activeHandleDrag = that._activeHandleDrag = that._lastHandleDrag;\n selectionEndValue = that._keyMap[e.keyCode](selectionEndValue);\n if (selectionStartValue > selectionEndValue) {\n selectionStartValue = selectionEndValue;\n }\n }\n that._setValueInRange(round(selectionStartValue), round(selectionEndValue));\n dragSelectionStart = Math.max(selectionStartValue, that.options.selectionStart);\n dragSelectionEnd = Math.min(selectionEndValue, that.options.selectionEnd);\n activeHandleDrag.selectionEnd = Math.max(dragSelectionEnd, that.options.selectionStart);\n activeHandleDrag.selectionStart = Math.min(dragSelectionStart, that.options.selectionEnd);\n activeHandleDrag._updateTooltip(that.value()[that._activeHandle]);\n e.preventDefault();\n }\n },\n _update: function (selectionStart, selectionEnd) {\n var that = this, values = that.value();\n var change = values[0] != selectionStart || values[1] != selectionEnd;\n that.value([\n selectionStart,\n selectionEnd\n ]);\n if (change) {\n that.trigger(CHANGE, {\n values: [\n selectionStart,\n selectionEnd\n ],\n value: [\n selectionStart,\n selectionEnd\n ]\n });\n }\n },\n value: function (value) {\n if (value && value.length) {\n return this._value(value[0], value[1]);\n } else {\n return this._value();\n }\n },\n _value: function (start, end) {\n var that = this, options = that.options, selectionStart = options.selectionStart, selectionEnd = options.selectionEnd;\n if (isNaN(start) && isNaN(end)) {\n return [\n selectionStart,\n selectionEnd\n ];\n } else {\n start = round(start);\n end = round(end);\n }\n if (start >= options.min && start <= options.max && end >= options.min && end <= options.max && start <= end) {\n if (selectionStart != start || selectionEnd != end) {\n that.element.find('input').eq(0).prop('value', formatValue(start)).end().eq(1).prop('value', formatValue(end));\n options.selectionStart = start;\n options.selectionEnd = end;\n that._refresh();\n that._refreshAriaAttr(start, end);\n }\n }\n },\n values: function (start, end) {\n if (isArray(start)) {\n return this._value(start[0], start[1]);\n } else {\n return this._value(start, end);\n }\n },\n _refresh: function () {\n var that = this, options = that.options;\n that.trigger(MOVE_SELECTION, {\n values: [\n options.selectionStart,\n options.selectionEnd\n ],\n value: [\n options.selectionStart,\n options.selectionEnd\n ]\n });\n if (options.selectionStart == options.max && options.selectionEnd == options.max) {\n that._setZIndex('firstHandle');\n }\n },\n _refreshAriaAttr: function (start, end) {\n var that = this, dragHandles = that.wrapper.find(DRAG_HANDLE), drag = that._activeHandleDrag, formattedValue;\n formattedValue = that._getFormattedValue([\n start,\n end\n ], drag);\n dragHandles.eq(0).attr('aria-valuenow', start);\n dragHandles.eq(1).attr('aria-valuenow', end);\n dragHandles.attr('aria-valuetext', formattedValue);\n },\n _setValueInRange: function (selectionStart, selectionEnd) {\n var options = this.options;\n selectionStart = math.max(math.min(selectionStart, options.max), options.min);\n selectionEnd = math.max(math.min(selectionEnd, options.max), options.min);\n if (selectionStart == options.max && selectionEnd == options.max) {\n this._setZIndex('firstHandle');\n }\n this._update(math.min(selectionStart, selectionEnd), math.max(selectionStart, selectionEnd));\n },\n _setZIndex: function (type) {\n this.wrapper.find(DRAG_HANDLE).each(function (index) {\n $(this).css('z-index', type == 'firstHandle' ? 1 - index : index);\n });\n },\n _formResetHandler: function () {\n var that = this, options = that.options;\n setTimeout(function () {\n var inputs = that.element.find('input');\n var start = inputs[0].value;\n var end = inputs[1].value;\n that.values(start === '' || isNaN(start) ? options.min : start, end === '' || isNaN(end) ? options.max : end);\n });\n },\n destroy: function () {\n var that = this;\n SliderBase.fn.destroy.call(that);\n that.wrapper.off(NS).find(TICK_SELECTOR + ', ' + TRACK_SELECTOR).off(NS).end().find(DRAG_HANDLE).off(NS);\n that._firstHandleDrag.draggable.destroy();\n that._lastHandleDrag.draggable.destroy();\n }\n });\n RangeSlider.Selection = function (dragHandles, that, options) {\n function moveSelection(value) {\n value = value || [];\n var selectionStartValue = value[0] - options.min, selectionEndValue = value[1] - options.min, selectionStartIndex = math.ceil(round(selectionStartValue / options.smallStep)), selectionEndIndex = math.ceil(round(selectionEndValue / options.smallStep)), selectionStart = that._pixelSteps[selectionStartIndex], selectionEnd = that._pixelSteps[selectionEndIndex], halfHandle = parseInt(that._outerSize(dragHandles.eq(0)) / 2, 10), rtlCorrection = that._isRtl ? 2 : 0;\n dragHandles.eq(0).css(that._position, selectionStart - halfHandle - rtlCorrection).end().eq(1).css(that._position, selectionEnd - halfHandle - rtlCorrection);\n makeSelection(selectionStart, selectionEnd);\n }\n function makeSelection(selectionStart, selectionEnd) {\n var selection, selectionPosition, selectionDiv = that._trackDiv.find('.k-slider-selection');\n selection = math.abs(selectionStart - selectionEnd);\n selectionDiv[that._sizeFn](selection);\n if (that._isRtl) {\n selectionPosition = math.max(selectionStart, selectionEnd);\n selectionDiv.css('right', that._maxSelection - selectionPosition - 1);\n } else {\n selectionPosition = math.min(selectionStart, selectionEnd);\n selectionDiv.css(that._position, selectionPosition - 1);\n }\n }\n moveSelection(that.value());\n that.bind([\n CHANGE,\n SLIDE,\n MOVE_SELECTION\n ], function (e) {\n moveSelection(e.values);\n });\n };\n kendo.ui.plugin(RangeSlider);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.colorpicker', [\n 'kendo.core',\n 'kendo.color',\n 'kendo.popup',\n 'kendo.slider',\n 'kendo.userevents',\n 'kendo.button'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'colorpicker',\n name: 'Color tools',\n category: 'web',\n description: 'Color selection widgets',\n depends: [\n 'core',\n 'color',\n 'popup',\n 'slider',\n 'userevents',\n 'button'\n ]\n };\n (function ($, parseInt, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, parseColor = kendo.parseColor, Color = kendo.Color, KEYS = kendo.keys, BACKGROUNDCOLOR = 'background-color', ITEMSELECTEDCLASS = 'k-state-selected', SIMPLEPALETTE = '000000,7f7f7f,880015,ed1c24,ff7f27,fff200,22b14c,00a2e8,3f48cc,a349a4,ffffff,c3c3c3,b97a57,ffaec9,ffc90e,efe4b0,b5e61d,99d9ea,7092be,c8bfe7', WEBPALETTE = 'FFFFFF,FFCCFF,FF99FF,FF66FF,FF33FF,FF00FF,CCFFFF,CCCCFF,CC99FF,CC66FF,CC33FF,CC00FF,99FFFF,99CCFF,9999FF,9966FF,9933FF,9900FF,FFFFCC,FFCCCC,FF99CC,FF66CC,FF33CC,FF00CC,CCFFCC,CCCCCC,CC99CC,CC66CC,CC33CC,CC00CC,99FFCC,99CCCC,9999CC,9966CC,9933CC,9900CC,FFFF99,FFCC99,FF9999,FF6699,FF3399,FF0099,CCFF99,CCCC99,CC9999,CC6699,CC3399,CC0099,99FF99,99CC99,999999,996699,993399,990099,FFFF66,FFCC66,FF9966,FF6666,FF3366,FF0066,CCFF66,CCCC66,CC9966,CC6666,CC3366,CC0066,99FF66,99CC66,999966,996666,993366,990066,FFFF33,FFCC33,FF9933,FF6633,FF3333,FF0033,CCFF33,CCCC33,CC9933,CC6633,CC3333,CC0033,99FF33,99CC33,999933,996633,993333,990033,FFFF00,FFCC00,FF9900,FF6600,FF3300,FF0000,CCFF00,CCCC00,CC9900,CC6600,CC3300,CC0000,99FF00,99CC00,999900,996600,993300,990000,66FFFF,66CCFF,6699FF,6666FF,6633FF,6600FF,33FFFF,33CCFF,3399FF,3366FF,3333FF,3300FF,00FFFF,00CCFF,0099FF,0066FF,0033FF,0000FF,66FFCC,66CCCC,6699CC,6666CC,6633CC,6600CC,33FFCC,33CCCC,3399CC,3366CC,3333CC,3300CC,00FFCC,00CCCC,0099CC,0066CC,0033CC,0000CC,66FF99,66CC99,669999,666699,663399,660099,33FF99,33CC99,339999,336699,333399,330099,00FF99,00CC99,009999,006699,003399,000099,66FF66,66CC66,669966,666666,663366,660066,33FF66,33CC66,339966,336666,333366,330066,00FF66,00CC66,009966,006666,003366,000066,66FF33,66CC33,669933,666633,663333,660033,33FF33,33CC33,339933,336633,333333,330033,00FF33,00CC33,009933,006633,003333,000033,66FF00,66CC00,669900,666600,663300,660000,33FF00,33CC00,339900,336600,333300,330000,00FF00,00CC00,009900,006600,003300,000000', WHITE = '#ffffff', MESSAGES = {\n apply: 'Apply',\n cancel: 'Cancel',\n noColor: 'no color',\n clearColor: 'Clear color'\n }, NS = '.kendoColorTools', CLICK_NS = 'click' + NS, KEYDOWN_NS = 'keydown' + NS, browser = kendo.support.browser, isIE8 = browser.msie && browser.version < 9;\n var ColorSelector = Widget.extend({\n init: function (element, options) {\n var that = this, ariaId;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n that._value = options.value = parseColor(options.value);\n that._tabIndex = element.attr('tabIndex') || 0;\n ariaId = that._ariaId = options.ariaId;\n if (ariaId) {\n element.attr('aria-labelledby', ariaId);\n }\n if (options._standalone) {\n that._triggerSelect = that._triggerChange;\n }\n },\n options: {\n name: 'ColorSelector',\n value: null,\n _standalone: true\n },\n events: [\n 'change',\n 'select',\n 'cancel'\n ],\n color: function (value) {\n if (value !== undefined) {\n this._value = parseColor(value);\n this._updateUI(this._value);\n }\n return this._value;\n },\n value: function (color) {\n color = this.color(color);\n if (color) {\n if (this.options.opacity) {\n color = color.toCssRgba();\n } else {\n color = color.toCss();\n }\n }\n return color || null;\n },\n enable: function (enable) {\n if (arguments.length === 0) {\n enable = true;\n }\n $('.k-disabled-overlay', this.wrapper).remove();\n if (!enable) {\n this.wrapper.append('<div class=\\'k-disabled-overlay\\'></div>');\n }\n this._onEnable(enable);\n },\n _select: function (color, nohooks) {\n var prev = this._value;\n color = this.color(color);\n if (!nohooks) {\n this.element.trigger('change');\n if (!color.equals(prev)) {\n this.trigger('change', { value: this.value() });\n } else if (!this._standalone) {\n this.trigger('cancel');\n }\n }\n },\n _triggerSelect: function (color) {\n triggerEvent(this, 'select', color);\n },\n _triggerChange: function (color) {\n triggerEvent(this, 'change', color);\n },\n destroy: function () {\n if (this.element) {\n this.element.off(NS);\n }\n if (this.wrapper) {\n this.wrapper.off(NS).find('*').off(NS);\n }\n this.wrapper = null;\n Widget.fn.destroy.call(this);\n },\n _updateUI: $.noop,\n _selectOnHide: function () {\n return null;\n },\n _cancel: function () {\n this.trigger('cancel');\n }\n });\n function triggerEvent(self, type, color) {\n color = parseColor(color);\n if (color && !color.equals(self.color())) {\n if (type == 'change') {\n self._value = color;\n }\n if (color.a != 1) {\n color = color.toCssRgba();\n } else {\n color = color.toCss();\n }\n self.trigger(type, { value: color });\n }\n }\n var ColorPalette = ColorSelector.extend({\n init: function (element, options) {\n var that = this;\n ColorSelector.fn.init.call(that, element, options);\n element = that.wrapper = that.element;\n options = that.options;\n var colors = options.palette;\n if (colors == 'websafe') {\n colors = WEBPALETTE;\n options.columns = 18;\n } else if (colors == 'basic') {\n colors = SIMPLEPALETTE;\n }\n if (typeof colors == 'string') {\n colors = colors.split(',');\n }\n if ($.isArray(colors)) {\n colors = $.map(colors, function (x) {\n return parseColor(x);\n });\n }\n that._selectedID = (options.ariaId || kendo.guid()) + '_selected';\n element.addClass('k-widget k-colorpalette').attr('role', 'grid').attr('aria-readonly', 'true').append($(that._template({\n colors: colors,\n columns: options.columns,\n tileSize: options.tileSize,\n value: that._value,\n id: options.ariaId\n }))).on(CLICK_NS, '.k-item', function (ev) {\n that._select($(ev.currentTarget).css(BACKGROUNDCOLOR));\n }).attr('tabIndex', that._tabIndex).on(KEYDOWN_NS, bind(that._keydown, that));\n var tileSize = options.tileSize, width, height;\n if (tileSize) {\n if (/number|string/.test(typeof tileSize)) {\n width = height = parseFloat(tileSize);\n } else if (typeof tileSize == 'object') {\n width = parseFloat(tileSize.width);\n height = parseFloat(tileSize.height);\n } else {\n throw new Error('Unsupported value for the \\'tileSize\\' argument');\n }\n element.find('.k-item').css({\n width: width,\n height: height\n });\n }\n },\n focus: function () {\n this.wrapper.focus();\n },\n options: {\n name: 'ColorPalette',\n columns: 10,\n tileSize: null,\n palette: 'basic'\n },\n _onEnable: function (enable) {\n if (enable) {\n this.wrapper.attr('tabIndex', this._tabIndex);\n } else {\n this.wrapper.removeAttr('tabIndex');\n }\n },\n _keydown: function (e) {\n var selected, wrapper = this.wrapper, items = wrapper.find('.k-item'), current = items.filter('.' + ITEMSELECTEDCLASS).get(0), keyCode = e.keyCode;\n if (keyCode == KEYS.LEFT) {\n selected = relative(items, current, -1);\n } else if (keyCode == KEYS.RIGHT) {\n selected = relative(items, current, 1);\n } else if (keyCode == KEYS.DOWN) {\n selected = relative(items, current, this.options.columns);\n } else if (keyCode == KEYS.UP) {\n selected = relative(items, current, -this.options.columns);\n } else if (keyCode == KEYS.ENTER) {\n preventDefault(e);\n if (current) {\n this._select($(current).css(BACKGROUNDCOLOR));\n }\n } else if (keyCode == KEYS.ESC) {\n this._cancel();\n }\n if (selected) {\n preventDefault(e);\n this._current(selected);\n try {\n var color = parseColor(selected.css(BACKGROUNDCOLOR));\n this._triggerSelect(color);\n } catch (ex) {\n }\n }\n },\n _current: function (item) {\n this.wrapper.find('.' + ITEMSELECTEDCLASS).removeClass(ITEMSELECTEDCLASS).attr('aria-selected', false).removeAttr('id');\n $(item).addClass(ITEMSELECTEDCLASS).attr('aria-selected', true).attr('id', this._selectedID);\n this.element.removeAttr('aria-activedescendant').attr('aria-activedescendant', this._selectedID);\n },\n _updateUI: function (color) {\n var item = null;\n this.wrapper.find('.k-item').each(function () {\n var c = parseColor($(this).css(BACKGROUNDCOLOR));\n if (c && c.equals(color)) {\n item = this;\n return false;\n }\n });\n this._current(item);\n },\n _template: kendo.template('<table class=\"k-palette k-reset\" role=\"presentation\"><tr role=\"row\">' + '# for (var i = 0; i < colors.length; ++i) { #' + '# var selected = colors[i].equals(value); #' + '# if (i && i % columns == 0) { # </tr><tr role=\"row\"> # } #' + '<td role=\"gridcell\" unselectable=\"on\" style=\"background-color:#= colors[i].toCss() #\"' + '#= selected ? \" aria-selected=true\" : \"\" # ' + '#=(id && i === 0) ? \"id=\\\\\"\"+id+\"\\\\\" \" : \"\" # ' + 'class=\"k-item#= selected ? \" ' + ITEMSELECTEDCLASS + '\" : \"\" #\" ' + 'aria-label=\"#= colors[i].toCss() #\"></td>' + '# } #' + '</tr></table>')\n });\n var FlatColorPicker = ColorSelector.extend({\n init: function (element, options) {\n var that = this;\n ColorSelector.fn.init.call(that, element, options);\n options = that.options;\n element = that.element;\n that.wrapper = element.addClass('k-widget k-flatcolorpicker').append(that._template(options));\n that._hueElements = $('.k-hsv-rectangle, .k-transparency-slider .k-slider-track', element);\n that._selectedColor = $('.k-selected-color-display', element);\n that._colorAsText = $('input.k-color-value', element);\n that._sliders();\n that._hsvArea();\n that._updateUI(that._value || parseColor('#f00'));\n element.find('input.k-color-value').on(KEYDOWN_NS, function (ev) {\n var input = this;\n if (ev.keyCode == KEYS.ENTER) {\n try {\n var color = parseColor(input.value);\n var val = that.color();\n that._select(color, color.equals(val));\n } catch (ex) {\n $(input).addClass('k-state-error');\n }\n } else if (that.options.autoupdate) {\n setTimeout(function () {\n var color = parseColor(input.value, true);\n if (color) {\n that._updateUI(color, true);\n }\n }, 10);\n }\n }).end().on(CLICK_NS, '.k-controls button.apply', function () {\n if (that.options._clearedColor) {\n that.trigger('change');\n } else {\n that._select(that._getHSV());\n }\n }).on(CLICK_NS, '.k-controls button.cancel', function () {\n that._updateUI(that.color());\n that._cancel();\n });\n if (isIE8) {\n that._applyIEFilter();\n }\n },\n destroy: function () {\n this._hueSlider.destroy();\n if (this._opacitySlider) {\n this._opacitySlider.destroy();\n }\n this._hueSlider = this._opacitySlider = this._hsvRect = this._hsvHandle = this._hueElements = this._selectedColor = this._colorAsText = null;\n ColorSelector.fn.destroy.call(this);\n },\n options: {\n name: 'FlatColorPicker',\n opacity: false,\n buttons: false,\n input: true,\n preview: true,\n clearButton: false,\n autoupdate: true,\n messages: MESSAGES\n },\n _applyIEFilter: function () {\n var track = this.element.find('.k-hue-slider .k-slider-track')[0], url = track.currentStyle.backgroundImage;\n url = url.replace(/^url\\([\\'\\\"]?|[\\'\\\"]?\\)$/g, '');\n track.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\\'' + url + '\\', sizingMethod=\\'scale\\')';\n },\n _sliders: function () {\n var that = this, element = that.element;\n function hueChange(e) {\n that._updateUI(that._getHSV(e.value, null, null, null));\n }\n that._hueSlider = element.find('.k-hue-slider').kendoSlider({\n min: 0,\n max: 360,\n tickPlacement: 'none',\n showButtons: false,\n slide: hueChange,\n change: hueChange\n }).data('kendoSlider');\n function opacityChange(e) {\n that._updateUI(that._getHSV(null, null, null, e.value / 100));\n }\n that._opacitySlider = element.find('.k-transparency-slider').kendoSlider({\n min: 0,\n max: 100,\n tickPlacement: 'none',\n showButtons: false,\n slide: opacityChange,\n change: opacityChange\n }).data('kendoSlider');\n },\n _hsvArea: function () {\n var that = this, element = that.element, hsvRect = element.find('.k-hsv-rectangle'), hsvHandle = hsvRect.find('.k-draghandle').attr('tabIndex', 0).on(KEYDOWN_NS, bind(that._keydown, that));\n function update(x, y) {\n var offset = this.offset, dx = x - offset.left, dy = y - offset.top, rw = this.width, rh = this.height;\n dx = dx < 0 ? 0 : dx > rw ? rw : dx;\n dy = dy < 0 ? 0 : dy > rh ? rh : dy;\n that._svChange(dx / rw, 1 - dy / rh);\n }\n that._hsvEvents = new kendo.UserEvents(hsvRect, {\n global: true,\n press: function (e) {\n this.offset = kendo.getOffset(hsvRect);\n this.width = hsvRect.width();\n this.height = hsvRect.height();\n hsvHandle.focus();\n update.call(this, e.x.location, e.y.location);\n },\n start: function () {\n hsvRect.addClass('k-dragging');\n hsvHandle.focus();\n },\n move: function (e) {\n e.preventDefault();\n update.call(this, e.x.location, e.y.location);\n },\n end: function () {\n hsvRect.removeClass('k-dragging');\n }\n });\n that._hsvRect = hsvRect;\n that._hsvHandle = hsvHandle;\n },\n _onEnable: function (enable) {\n this._hueSlider.enable(enable);\n if (this._opacitySlider) {\n this._opacitySlider.enable(enable);\n }\n this.wrapper.find('input').attr('disabled', !enable);\n var handle = this._hsvRect.find('.k-draghandle');\n if (enable) {\n handle.attr('tabIndex', this._tabIndex);\n } else {\n handle.removeAttr('tabIndex');\n }\n },\n _keydown: function (ev) {\n var that = this;\n function move(prop, d) {\n var c = that._getHSV();\n c[prop] += d * (ev.shiftKey ? 0.01 : 0.05);\n if (c[prop] < 0) {\n c[prop] = 0;\n }\n if (c[prop] > 1) {\n c[prop] = 1;\n }\n that._updateUI(c);\n preventDefault(ev);\n }\n function hue(d) {\n var c = that._getHSV();\n c.h += d * (ev.shiftKey ? 1 : 5);\n if (c.h < 0) {\n c.h = 0;\n }\n if (c.h > 359) {\n c.h = 359;\n }\n that._updateUI(c);\n preventDefault(ev);\n }\n switch (ev.keyCode) {\n case KEYS.LEFT:\n if (ev.ctrlKey) {\n hue(-1);\n } else {\n move('s', -1);\n }\n break;\n case KEYS.RIGHT:\n if (ev.ctrlKey) {\n hue(1);\n } else {\n move('s', 1);\n }\n break;\n case KEYS.UP:\n move(ev.ctrlKey && that._opacitySlider ? 'a' : 'v', 1);\n break;\n case KEYS.DOWN:\n move(ev.ctrlKey && that._opacitySlider ? 'a' : 'v', -1);\n break;\n case KEYS.ENTER:\n that._select(that._getHSV());\n break;\n case KEYS.F2:\n that.wrapper.find('input.k-color-value').focus().select();\n break;\n case KEYS.ESC:\n that._cancel();\n break;\n }\n },\n focus: function () {\n this._hsvHandle.focus();\n },\n _getHSV: function (h, s, v, a) {\n var rect = this._hsvRect, width = rect.width(), height = rect.height(), handlePosition = this._hsvHandle.position();\n if (h == null) {\n h = this._hueSlider.value();\n }\n if (s == null) {\n s = handlePosition.left / width;\n }\n if (v == null) {\n v = 1 - handlePosition.top / height;\n }\n if (a == null) {\n a = this._opacitySlider ? this._opacitySlider.value() / 100 : 1;\n }\n return Color.fromHSV(h, s, v, a);\n },\n _svChange: function (s, v) {\n var color = this._getHSV(null, s, v, null);\n this._updateUI(color);\n },\n _updateUI: function (color, dontChangeInput) {\n var that = this, rect = that._hsvRect;\n if (!color) {\n return;\n }\n this._colorAsText.removeClass('k-state-error');\n that._selectedColor.css(BACKGROUNDCOLOR, color.toDisplay());\n if (!dontChangeInput) {\n that._colorAsText.val(that._opacitySlider ? color.toCssRgba() : color.toCss());\n }\n that._triggerSelect(color);\n color = color.toHSV();\n that._hsvHandle.css({\n left: color.s * rect.width() + 'px',\n top: (1 - color.v) * rect.height() + 'px'\n });\n that._hueElements.css(BACKGROUNDCOLOR, Color.fromHSV(color.h, 1, 1, 1).toCss());\n that._hueSlider.value(color.h);\n if (that._opacitySlider) {\n that._opacitySlider.value(100 * color.a);\n }\n },\n _selectOnHide: function () {\n return this.options.buttons ? null : this._getHSV();\n },\n _template: kendo.template('# if (preview) { #' + '<div class=\"k-selected-color\"><div class=\"k-selected-color-display\"><div class=\"k-color-input\"><input class=\"k-color-value\" ' + '# if (clearButton && !_standalone) { #' + 'placeholder=\"#: messages.noColor #\" ' + '# } #' + '#= !data.input ? \\'style=\"visibility: hidden;\"\\' : \"\" #>' + '# if (clearButton && !_standalone) { #' + '<span class=\"k-clear-color k-button-bare\" title=\"#: messages.clearColor #\"></span>' + '# } #' + '</div></div></div>' + '# } #' + '# if (clearButton && !_standalone && !preview) { #' + '<div class=\"k-clear-color-container\"><span class=\"k-clear-color k-button-bare\">#: messages.clearColor #</span></div>' + '# } #' + '<div class=\"k-hsv-rectangle\"><div class=\"k-hsv-gradient\"></div><div class=\"k-draghandle\"></div></div>' + '<input class=\"k-hue-slider\" />' + '# if (opacity) { #' + '<input class=\"k-transparency-slider\" />' + '# } #' + '# if (buttons) { #' + '<div unselectable=\"on\" class=\"k-controls\"><button class=\"k-button k-primary apply\">#: messages.apply #</button> <button class=\"k-button cancel\">#: messages.cancel #</button></div>' + '# } #')\n });\n function relative(array, element, delta) {\n array = Array.prototype.slice.call(array);\n var n = array.length;\n var pos = array.indexOf(element);\n if (pos < 0) {\n return delta < 0 ? array[n - 1] : array[0];\n }\n pos += delta;\n if (pos < 0) {\n pos += n;\n } else {\n pos %= n;\n }\n return array[pos];\n }\n var ColorPicker = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element;\n var value = element.attr('value') || element.val();\n if (value) {\n value = parseColor(value, true);\n } else {\n value = parseColor(options.value, true);\n }\n that._value = options.value = value;\n var content = that.wrapper = $(that._template(options));\n element.hide().after(content);\n if (element.is('input')) {\n element.appendTo(content);\n var label = element.closest('label');\n var id = element.attr('id');\n if (id) {\n label = label.add('label[for=\"' + id + '\"]');\n }\n label.click(function (ev) {\n that.open();\n ev.preventDefault();\n });\n }\n that._tabIndex = element.attr('tabIndex') || 0;\n that.enable(!element.attr('disabled'));\n var accesskey = element.attr('accesskey');\n if (accesskey) {\n element.attr('accesskey', null);\n content.attr('accesskey', accesskey);\n }\n that.bind('activate', function (ev) {\n if (!ev.isDefaultPrevented()) {\n that.toggle();\n }\n });\n that._updateUI(value);\n },\n destroy: function () {\n this.wrapper.off(NS).find('*').off(NS);\n if (this._popup) {\n this._selector.destroy();\n this._popup.destroy();\n }\n this._selector = this._popup = this.wrapper = null;\n Widget.fn.destroy.call(this);\n },\n enable: function (enable) {\n var that = this, wrapper = that.wrapper, innerWrapper = wrapper.children('.k-picker-wrap'), arrow = innerWrapper.find('.k-select');\n if (arguments.length === 0) {\n enable = true;\n }\n that.element.attr('disabled', !enable);\n wrapper.attr('aria-disabled', !enable);\n arrow.off(NS).on('mousedown' + NS, preventDefault);\n wrapper.addClass('k-state-disabled').removeAttr('tabIndex').add('*', wrapper).off(NS);\n if (enable) {\n wrapper.removeClass('k-state-disabled').attr('tabIndex', that._tabIndex).on('mouseenter' + NS, function () {\n innerWrapper.addClass('k-state-hover');\n }).on('mouseleave' + NS, function () {\n innerWrapper.removeClass('k-state-hover');\n }).on('focus' + NS, function () {\n innerWrapper.addClass('k-state-focused');\n }).on('blur' + NS, function () {\n innerWrapper.removeClass('k-state-focused');\n }).on(KEYDOWN_NS, bind(that._keydown, that)).on(CLICK_NS, '.k-select', bind(that.toggle, that)).on(CLICK_NS, that.options.toolIcon ? '.k-tool-icon' : '.k-selected-color', function () {\n that.trigger('activate');\n });\n } else {\n that.close();\n }\n },\n _template: kendo.template('<span role=\"textbox\" aria-haspopup=\"true\" class=\"k-widget k-colorpicker k-header\">' + '<span class=\"k-picker-wrap k-state-default\">' + '# if (toolIcon) { #' + '<span class=\"k-icon k-tool-icon #= toolIcon #\">' + '<span class=\"k-selected-color\"></span>' + '</span>' + '# } else { #' + '<span class=\"k-selected-color\"><span class=\"k-icon k-i-line\" style=\"display: none;\"></span></span>' + '# } #' + '<span class=\"k-select\" unselectable=\"on\" aria-label=\"select\">' + '<span class=\"k-icon k-i-arrow-60-down\"></span>' + '</span>' + '</span>' + '</span>'),\n options: {\n name: 'ColorPicker',\n palette: null,\n columns: 10,\n toolIcon: null,\n value: null,\n messages: MESSAGES,\n opacity: false,\n buttons: true,\n preview: true,\n clearButton: false,\n ARIATemplate: 'Current selected color is #=data || \"\"#'\n },\n events: [\n 'activate',\n 'change',\n 'select',\n 'open',\n 'close'\n ],\n open: function () {\n if (!this.element.prop('disabled')) {\n this._getPopup().open();\n }\n },\n close: function () {\n var selOptions = this._selector && this._selector.options || {};\n selOptions._closing = true;\n this._getPopup().close();\n delete selOptions._closing;\n },\n toggle: function () {\n if (!this.element.prop('disabled')) {\n this._getPopup().toggle();\n }\n },\n _noColorIcon: function () {\n return this.wrapper.find('.k-picker-wrap > .k-selected-color > .k-icon.k-i-line');\n },\n color: ColorSelector.fn.color,\n value: ColorSelector.fn.value,\n _select: ColorSelector.fn._select,\n _triggerSelect: ColorSelector.fn._triggerSelect,\n _isInputTypeColor: function () {\n var el = this.element[0];\n return /^input$/i.test(el.tagName) && /^color$/i.test(el.type);\n },\n _updateUI: function (value) {\n var formattedValue = '';\n if (value) {\n if (this._isInputTypeColor() || value.a == 1) {\n formattedValue = value.toCss();\n } else {\n formattedValue = value.toCssRgba();\n }\n this.element.val(formattedValue);\n }\n if (!this._ariaTemplate) {\n this._ariaTemplate = kendo.template(this.options.ARIATemplate);\n }\n this.wrapper.attr('aria-label', this._ariaTemplate(formattedValue));\n this._triggerSelect(value);\n this.wrapper.find('.k-selected-color').css(BACKGROUNDCOLOR, value ? value.toDisplay() : WHITE);\n this._noColorIcon()[formattedValue ? 'hide' : 'show']();\n },\n _keydown: function (ev) {\n var key = ev.keyCode;\n if (this._getPopup().visible()) {\n if (key == KEYS.ESC) {\n this._selector._cancel();\n } else {\n this._selector._keydown(ev);\n }\n preventDefault(ev);\n } else if (key == KEYS.ENTER || key == KEYS.DOWN) {\n this.open();\n preventDefault(ev);\n }\n },\n _getPopup: function () {\n var that = this, popup = that._popup;\n if (!popup) {\n var options = that.options;\n var selectorType;\n if (options.palette) {\n selectorType = ColorPalette;\n } else {\n selectorType = FlatColorPicker;\n }\n options._standalone = false;\n delete options.select;\n delete options.change;\n delete options.cancel;\n var id = kendo.guid();\n var selector = that._selector = new selectorType($('<div id=\"' + id + '\"/>').appendTo(document.body), options);\n that.wrapper.attr('aria-owns', id);\n that._popup = popup = selector.wrapper.kendoPopup({\n anchor: that.wrapper,\n adjustSize: {\n width: 5,\n height: 0\n }\n }).data('kendoPopup');\n selector.element.find('.k-clear-color').kendoButton({\n icon: 'reset-color',\n click: function (e) {\n selector.options._clearedColor = true;\n that.value(null);\n that._updateUI(null);\n selector._colorAsText.val('');\n selector._hsvHandle.css({\n top: '0px',\n left: '0px'\n });\n selector._selectedColor.css(BACKGROUNDCOLOR, WHITE);\n e.preventDefault();\n }\n });\n selector.bind({\n select: function (ev) {\n that._updateUI(parseColor(ev.value));\n delete selector.options._clearedColor;\n },\n change: function () {\n if (!selector.options._clearedColor) {\n that._select(selector.color());\n }\n that.close();\n },\n cancel: function () {\n if (selector.options._clearedColor && !that.value() && selector.value()) {\n that._select(selector.color(), true);\n }\n that.close();\n }\n });\n popup.bind({\n close: function (ev) {\n if (that.trigger('close')) {\n ev.preventDefault();\n return;\n }\n that.wrapper.children('.k-picker-wrap').removeClass('k-state-focused');\n var color = selector._selectOnHide();\n var selectorColor = selector.value();\n var value = that.value();\n var options = selector.options;\n if (!color) {\n setTimeout(function () {\n if (that.wrapper) {\n that.wrapper.focus();\n }\n });\n if (!options._closing && options._clearedColor && !value && selectorColor) {\n that._select(selectorColor, true);\n } else {\n that._updateUI(that.color());\n }\n } else if (!(options._clearedColor && !value)) {\n that._select(color);\n }\n },\n open: function (ev) {\n if (that.trigger('open')) {\n ev.preventDefault();\n } else {\n that.wrapper.children('.k-picker-wrap').addClass('k-state-focused');\n }\n },\n activate: function () {\n selector._select(that.color(), true);\n selector.focus();\n that.wrapper.children('.k-picker-wrap').addClass('k-state-focused');\n }\n });\n }\n return popup;\n }\n });\n function preventDefault(ev) {\n ev.preventDefault();\n }\n function bind(callback, obj) {\n return function () {\n return callback.apply(obj, arguments);\n };\n }\n ui.plugin(ColorPalette);\n ui.plugin(FlatColorPicker);\n ui.plugin(ColorPicker);\n }(jQuery, parseInt));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.numerictextbox', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'numerictextbox',\n name: 'NumericTextBox',\n category: 'web',\n description: 'The NumericTextBox widget can format and display numeric, percentage or currency textbox.',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, caret = kendo.caret, keys = kendo.keys, ui = kendo.ui, Widget = ui.Widget, activeElement = kendo._activeElement, extractFormat = kendo._extractFormat, parse = kendo.parseFloat, placeholderSupported = kendo.support.placeholder, getCulture = kendo.getCulture, CHANGE = 'change', DISABLED = 'disabled', READONLY = 'readonly', INPUT = 'k-input', SPIN = 'spin', ns = '.kendoNumericTextBox', TOUCHEND = 'touchend', MOUSELEAVE = 'mouseleave' + ns, HOVEREVENTS = 'mouseenter' + ns + ' ' + MOUSELEAVE, DEFAULT = 'k-state-default', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', FOCUS = 'focus', POINT = '.', SELECTED = 'k-state-selected', STATEDISABLED = 'k-state-disabled', ARIA_DISABLED = 'aria-disabled', INTEGER_REGEXP = /^(-)?(\\d*)$/, NULL = null, proxy = $.proxy, extend = $.extend;\n var NumericTextBox = Widget.extend({\n init: function (element, options) {\n var that = this, isStep = options && options.step !== undefined, min, max, step, value, disabled;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element.on('focusout' + ns, proxy(that._focusout, that)).attr('role', 'spinbutton');\n options.placeholder = options.placeholder || element.attr('placeholder');\n that._initialOptions = extend({}, options);\n min = that.min(element.attr('min'));\n max = that.max(element.attr('max'));\n step = that._parse(element.attr('step'));\n if (options.min === NULL && min !== NULL) {\n options.min = min;\n }\n if (options.max === NULL && max !== NULL) {\n options.max = max;\n }\n if (!isStep && step !== NULL) {\n options.step = step;\n }\n that._reset();\n that._wrapper();\n that._arrows();\n that._input();\n if (!kendo.support.mobileOS) {\n that._text.on(FOCUS + ns, proxy(that._click, that));\n } else {\n that._text.on(TOUCHEND + ns + ' ' + FOCUS + ns, function () {\n if (kendo.support.browser.edge) {\n that._text.one(FOCUS + ns, function () {\n that._toggleText(false);\n element.focus();\n });\n } else {\n that._toggleText(false);\n element.focus();\n }\n });\n }\n element.attr('aria-valuemin', options.min !== NULL ? options.min * options.factor : options.min).attr('aria-valuemax', options.max !== NULL ? options.max * options.factor : options.max);\n options.format = extractFormat(options.format);\n value = options.value;\n that.value(value !== NULL ? value : element.val());\n disabled = element.is('[disabled]') || $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n } else {\n that.readonly(element.is('[readonly]'));\n }\n kendo.notify(that);\n },\n options: {\n name: 'NumericTextBox',\n decimals: NULL,\n restrictDecimals: false,\n min: NULL,\n max: NULL,\n value: NULL,\n step: 1,\n round: true,\n culture: '',\n format: 'n',\n spinners: true,\n placeholder: '',\n factor: 1,\n upArrowText: 'Increase value',\n downArrowText: 'Decrease value'\n },\n events: [\n CHANGE,\n SPIN\n ],\n _editable: function (options) {\n var that = this, element = that.element, disable = options.disable, readonly = options.readonly, text = that._text.add(element), wrapper = that._inputWrapper.off(HOVEREVENTS);\n that._toggleText(true);\n that._upArrowEventHandler.unbind('press');\n that._downArrowEventHandler.unbind('press');\n element.off('keydown' + ns).off('keypress' + ns).off('paste' + ns);\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n text.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false);\n that._upArrowEventHandler.bind('press', function (e) {\n e.preventDefault();\n that._spin(1);\n that._upArrow.addClass(SELECTED);\n });\n that._downArrowEventHandler.bind('press', function (e) {\n e.preventDefault();\n that._spin(-1);\n that._downArrow.addClass(SELECTED);\n });\n that.element.on('keydown' + ns, proxy(that._keydown, that)).on('keypress' + ns, proxy(that._keypress, that)).on('paste' + ns, proxy(that._paste, that));\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n text.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable);\n }\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n destroy: function () {\n var that = this;\n that.element.add(that._text).add(that._upArrow).add(that._downArrow).add(that._inputWrapper).off(ns);\n that._upArrowEventHandler.destroy();\n that._downArrowEventHandler.destroy();\n if (that._form) {\n that._form.off('reset', that._resetHandler);\n }\n Widget.fn.destroy.call(that);\n },\n min: function (value) {\n return this._option('min', value);\n },\n max: function (value) {\n return this._option('max', value);\n },\n step: function (value) {\n return this._option('step', value);\n },\n value: function (value) {\n var that = this, adjusted;\n if (value === undefined) {\n return that._value;\n }\n value = that._parse(value);\n adjusted = that._adjust(value);\n if (value !== adjusted) {\n return;\n }\n that._update(value);\n that._old = that._value;\n },\n focus: function () {\n this._focusin();\n },\n _adjust: function (value) {\n var that = this, options = that.options, min = options.min, max = options.max;\n if (value === NULL) {\n return value;\n }\n if (min !== NULL && value < min) {\n value = min;\n } else if (max !== NULL && value > max) {\n value = max;\n }\n return value;\n },\n _arrows: function () {\n var that = this, arrows, _release = function () {\n clearTimeout(that._spinning);\n arrows.removeClass(SELECTED);\n }, options = that.options, spinners = options.spinners, element = that.element;\n arrows = element.siblings('.k-icon');\n if (!arrows[0]) {\n arrows = $(buttonHtml('increase', options.upArrowText) + buttonHtml('decrease', options.downArrowText)).insertAfter(element);\n arrows.wrapAll('<span class=\"k-select\"/>');\n }\n if (!spinners) {\n arrows.parent().toggle(spinners);\n that._inputWrapper.addClass('k-expand-padding');\n }\n that._upArrow = arrows.eq(0);\n that._upArrowEventHandler = new kendo.UserEvents(that._upArrow, { release: _release });\n that._downArrow = arrows.eq(1);\n that._downArrowEventHandler = new kendo.UserEvents(that._downArrow, { release: _release });\n },\n _blur: function () {\n var that = this, factor = that.options.factor, curreValue = that.element.val();\n that._toggleText(true);\n if (factor && factor !== 1) {\n curreValue = parseFloat(curreValue);\n if (curreValue !== null) {\n curreValue = curreValue / factor;\n }\n }\n that._change(curreValue);\n },\n _click: function (e) {\n var that = this;\n clearTimeout(that._focusing);\n that._focusing = setTimeout(function () {\n var input = e.target, idx = caret(input)[0], value = input.value.substring(0, idx), format = that._format(that.options.format), group = format[','], result, groupRegExp, extractRegExp, caretPosition = 0;\n if (group) {\n groupRegExp = new RegExp('\\\\' + group, 'g');\n extractRegExp = new RegExp('([\\\\d\\\\' + group + ']+)(\\\\' + format[POINT] + ')?(\\\\d+)?');\n }\n if (extractRegExp) {\n result = extractRegExp.exec(value);\n }\n if (result) {\n caretPosition = result[0].replace(groupRegExp, '').length;\n if (value.indexOf('(') != -1 && that._value < 0) {\n caretPosition++;\n }\n }\n that._focusin();\n caret(that.element[0], caretPosition);\n });\n },\n _change: function (value) {\n var that = this;\n that._update(value);\n value = that._value;\n if (that._old != value) {\n that._old = value;\n if (!that._typing) {\n that.element.trigger(CHANGE);\n }\n that.trigger(CHANGE);\n }\n that._typing = false;\n },\n _culture: function (culture) {\n return culture || getCulture(this.options.culture);\n },\n _focusin: function () {\n var that = this;\n that._inputWrapper.addClass(FOCUSED);\n that._toggleText(false);\n that.element[0].focus();\n },\n _focusout: function () {\n var that = this;\n clearTimeout(that._focusing);\n that._inputWrapper.removeClass(FOCUSED).removeClass(HOVER);\n that._blur();\n },\n _format: function (format, culture) {\n var numberFormat = this._culture(culture).numberFormat;\n format = format.toLowerCase();\n if (format.indexOf('c') > -1) {\n numberFormat = numberFormat.currency;\n } else if (format.indexOf('p') > -1) {\n numberFormat = numberFormat.percent;\n }\n return numberFormat;\n },\n _input: function () {\n var that = this, options = that.options, CLASSNAME = 'k-formatted-value', element = that.element.addClass(INPUT).show()[0], accessKey = element.accessKey, wrapper = that.wrapper, text;\n text = wrapper.find(POINT + CLASSNAME);\n if (!text[0]) {\n text = $('<input type=\"text\"/>').insertBefore(element).addClass(CLASSNAME);\n }\n try {\n element.setAttribute('type', 'text');\n } catch (e) {\n element.type = 'text';\n }\n that._initialTitle = element.title;\n text[0].title = element.title;\n text[0].tabIndex = element.tabIndex;\n text[0].style.cssText = element.style.cssText;\n text.prop('placeholder', options.placeholder);\n if (accessKey) {\n text.attr('accesskey', accessKey);\n element.accessKey = '';\n }\n that._text = text.addClass(element.className).attr({\n 'role': 'spinbutton',\n 'aria-valuemin': options.min !== NULL ? options.min * options.factor : options.min,\n 'aria-valuemax': options.max !== NULL ? options.max * options.factor : options.max\n });\n },\n _keydown: function (e) {\n var that = this, key = e.keyCode;\n that._key = key;\n if (key == keys.DOWN) {\n that._step(-1);\n } else if (key == keys.UP) {\n that._step(1);\n } else if (key == keys.ENTER) {\n that._change(that.element.val());\n } else {\n that._typing = true;\n }\n },\n _keypress: function (e) {\n if (e.which === 0 || e.metaKey || e.ctrlKey || e.keyCode === keys.BACKSPACE || e.keyCode === keys.ENTER) {\n return;\n }\n var that = this;\n var min = that.options.min;\n var element = that.element;\n var selection = caret(element);\n var selectionStart = selection[0];\n var selectionEnd = selection[1];\n var character = String.fromCharCode(e.which);\n var numberFormat = that._format(that.options.format);\n var isNumPadDecimal = that._key === keys.NUMPAD_DOT;\n var value = element.val();\n var isValid;\n if (isNumPadDecimal) {\n character = numberFormat[POINT];\n }\n value = value.substring(0, selectionStart) + character + value.substring(selectionEnd);\n isValid = that._numericRegex(numberFormat).test(value);\n if (isValid && isNumPadDecimal) {\n element.val(value);\n caret(element, selectionStart + character.length);\n e.preventDefault();\n } else if (min !== null && min >= 0 && value.charAt(0) === '-' || !isValid) {\n e.preventDefault();\n }\n that._key = 0;\n },\n _numericRegex: function (numberFormat) {\n var that = this;\n var separator = numberFormat[POINT];\n var precision = that.options.decimals;\n var fractionRule = '*';\n if (separator === POINT) {\n separator = '\\\\' + separator;\n }\n if (precision === NULL) {\n precision = numberFormat.decimals;\n }\n if (precision === 0) {\n return INTEGER_REGEXP;\n }\n if (that.options.restrictDecimals) {\n fractionRule = '{0,' + precision + '}';\n }\n if (that._separator !== separator) {\n that._separator = separator;\n that._floatRegExp = new RegExp('^(-)?(((\\\\d+(' + separator + '\\\\d' + fractionRule + ')?)|(' + separator + '\\\\d' + fractionRule + ')))?$');\n }\n return that._floatRegExp;\n },\n _paste: function (e) {\n var that = this;\n var element = e.target;\n var value = element.value;\n var numberFormat = that._format(that.options.format);\n setTimeout(function () {\n var result = that._parse(element.value);\n var isValid = that._numericRegex(numberFormat).test(element.value);\n if (result === NULL || that._adjust(result) !== result || !isValid) {\n that._update(value);\n }\n });\n },\n _option: function (option, value) {\n var that = this, element = that.element, options = that.options;\n if (value === undefined) {\n return options[option];\n }\n value = that._parse(value);\n if (!value && option === 'step') {\n return;\n }\n options[option] = value;\n element.add(that._text).attr('aria-value' + option, value);\n element.attr(option, value);\n },\n _spin: function (step, timeout) {\n var that = this;\n timeout = timeout || 500;\n clearTimeout(that._spinning);\n that._spinning = setTimeout(function () {\n that._spin(step, 50);\n }, timeout);\n that._step(step);\n },\n _step: function (step) {\n var that = this, element = that.element, value = that._parse(element.val()) || 0;\n if (activeElement() != element[0]) {\n that._focusin();\n }\n if (that.options.factor && value) {\n value = value / that.options.factor;\n }\n value += that.options.step * step;\n that._update(that._adjust(value));\n that._typing = false;\n that.trigger(SPIN);\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _toggleText: function (toggle) {\n var that = this;\n that._text.toggle(toggle);\n that.element.toggle(!toggle);\n },\n _parse: function (value, culture) {\n return parse(value, this._culture(culture), this.options.format);\n },\n _round: function (value, precision) {\n var rounder = this.options.round ? kendo._round : truncate;\n return rounder(value, precision);\n },\n _update: function (value) {\n var that = this, options = that.options, factor = options.factor, format = options.format, decimals = options.decimals, culture = that._culture(), numberFormat = that._format(format, culture), isNotNull;\n if (decimals === NULL) {\n decimals = numberFormat.decimals;\n }\n value = that._parse(value, culture);\n isNotNull = value !== NULL;\n if (isNotNull) {\n value = parseFloat(that._round(value, decimals), 10);\n }\n that._value = value = that._adjust(value);\n that._placeholder(kendo.toString(value, format, culture));\n if (isNotNull) {\n if (factor) {\n value = parseFloat(that._round(value * factor, decimals), 10);\n }\n value = value.toString();\n if (value.indexOf('e') !== -1) {\n value = that._round(+value, decimals);\n }\n value = value.replace(POINT, numberFormat[POINT]);\n } else {\n value = null;\n }\n that.element.val(value);\n that.element.add(that._text).attr('aria-valuenow', value);\n },\n _placeholder: function (value) {\n var input = this._text;\n input.val(value);\n if (!placeholderSupported && !value) {\n input.val(this.options.placeholder);\n }\n input.attr('title', this._initialTitle || input.val());\n },\n _wrapper: function () {\n var that = this, element = that.element, DOMElement = element[0], wrapper;\n wrapper = element.parents('.k-numerictextbox');\n if (!wrapper.is('span.k-numerictextbox')) {\n wrapper = element.hide().wrap('<span class=\"k-numeric-wrap k-state-default\" />').parent();\n wrapper = wrapper.wrap('<span/>').parent();\n }\n wrapper[0].style.cssText = DOMElement.style.cssText;\n DOMElement.style.width = '';\n that.wrapper = wrapper.addClass('k-widget k-numerictextbox').addClass(DOMElement.className).css('display', '');\n that._inputWrapper = $(wrapper[0].firstChild);\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(element[0].value);\n that.max(that._initialOptions.max);\n that.min(that._initialOptions.min);\n });\n };\n that._form = form.on('reset', that._resetHandler);\n }\n }\n });\n function buttonHtml(direction, text) {\n var className = 'k-i-arrow-' + (direction === 'increase' ? '60-up' : '60-down');\n return '<span unselectable=\"on\" class=\"k-link k-link-' + direction + '\" aria-label=\"' + text + '\" title=\"' + text + '\">' + '<span unselectable=\"on\" class=\"k-icon ' + className + '\"></span>' + '</span>';\n }\n function truncate(value, precision) {\n var parts = parseFloat(value, 10).toString().split(POINT);\n if (parts[1]) {\n parts[1] = parts[1].substring(0, precision);\n }\n return parts.join(POINT);\n }\n ui.plugin(NumericTextBox);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.filtermenu', [\n 'kendo.datepicker',\n 'kendo.numerictextbox',\n 'kendo.dropdownlist',\n 'kendo.binder'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'filtermenu',\n name: 'Filtering Menu',\n category: 'framework',\n depends: [\n 'datepicker',\n 'numerictextbox',\n 'dropdownlist',\n 'binder'\n ],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, proxy = $.proxy, POPUP = 'kendoPopup', INIT = 'init', REFRESH = 'refresh', CHANGE = 'change', NS = '.kendoFilterMenu', EQ = 'Is equal to', NEQ = 'Is not equal to', roles = {\n 'number': 'numerictextbox',\n 'date': 'datepicker'\n }, mobileRoles = {\n 'string': 'text',\n 'number': 'number',\n 'date': 'date'\n }, isFunction = kendo.isFunction, Widget = ui.Widget;\n var booleanTemplate = '<div>' + '<div class=\"k-filter-help-text\">#=messages.info#</div>' + '<label>' + '<input type=\"radio\" data-#=ns#bind=\"checked: filters[0].value\" value=\"true\" name=\"filters[0].value\"/>' + '#=messages.isTrue#' + '</label>' + '<label>' + '<input type=\"radio\" data-#=ns#bind=\"checked: filters[0].value\" value=\"false\" name=\"filters[0].value\"/>' + '#=messages.isFalse#' + '</label>' + '<div>' + '<button type=\"submit\" class=\"k-button k-primary\">#=messages.filter#</button>' + '<button type=\"reset\" class=\"k-button\">#=messages.clear#</button>' + '</div>' + '</div>';\n var defaultTemplate = '<div>' + '<div class=\"k-filter-help-text\">#=messages.info#</div>' + '<select title=\"#=messages.operator#\" data-#=ns#bind=\"value: filters[0].operator\" data-#=ns#role=\"dropdownlist\">' + '#for(var op in operators){#' + '<option value=\"#=op#\">#=operators[op]#</option>' + '#}#' + '</select>' + '#if(values){#' + '<select title=\"#=messages.value#\" data-#=ns#bind=\"value:filters[0].value\" data-#=ns#text-field=\"text\" data-#=ns#value-field=\"value\" data-#=ns#source=\\'#=kendo.stringify(values).replace(/\\'/g,\"&\\\\#39;\")#\\' data-#=ns#role=\"dropdownlist\" data-#=ns#option-label=\"#=messages.selectValue#\" data-#=ns#value-primitive=\"true\">' + '</select>' + '#}else{#' + '<input title=\"#=messages.value#\" data-#=ns#bind=\"value:filters[0].value\" class=\"k-textbox\" type=\"text\" #=role ? \"data-\" + ns + \"role=\\'\" + role + \"\\'\" : \"\"# />' + '#}#' + '#if(extra){#' + '<select title=\"#=messages.logic#\" class=\"k-filter-and\" data-#=ns#bind=\"value: logic\" data-#=ns#role=\"dropdownlist\">' + '<option value=\"and\">#=messages.and#</option>' + '<option value=\"or\">#=messages.or#</option>' + '</select>' + '<select title=\"#=messages.additionalOperator#\" data-#=ns#bind=\"value: filters[1].operator\" data-#=ns#role=\"dropdownlist\">' + '#for(var op in operators){#' + '<option value=\"#=op#\">#=operators[op]#</option>' + '#}#' + '</select>' + '#if(values){#' + '<select title=\"#=messages.additionalValue#\" data-#=ns#bind=\"value:filters[1].value\" data-#=ns#text-field=\"text\" data-#=ns#value-field=\"value\" data-#=ns#source=\\'#=kendo.stringify(values).replace(/\\'/g,\"&\\\\#39;\")#\\' data-#=ns#role=\"dropdownlist\" data-#=ns#option-label=\"#=messages.selectValue#\" data-#=ns#value-primitive=\"true\">' + '</select>' + '#}else{#' + '<input title=\"#=messages.additionalValue#\" data-#=ns#bind=\"value: filters[1].value\" class=\"k-textbox\" type=\"text\" #=role ? \"data-\" + ns + \"role=\\'\" + role + \"\\'\" : \"\"#/>' + '#}#' + '#}#' + '<div>' + '<button type=\"submit\" class=\"k-button k-primary\">#=messages.filter#</button>' + '<button type=\"reset\" class=\"k-button\">#=messages.clear#</button>' + '</div>' + '</div>';\n var defaultMobileTemplate = '<div data-#=ns#role=\"view\" data-#=ns#init-widgets=\"false\" data-#=ns#use-native-scrolling=\"true\" class=\"k-grid-filter-menu\">' + '<div data-#=ns#role=\"header\" class=\"k-header\">' + '<button class=\"k-button k-i-cancel\">#=messages.cancel#</button>' + '#=title#' + '<button type=\"submit\" class=\"k-button k-submit\">#=messages.filter#</button>' + '</div>' + '<form title=\"#=messages.info#\" class=\"k-filter-menu k-mobile-list\">' + '<ul class=\"k-filter-help-text\"><li><span class=\"k-link\">#=messages.info#</span>' + '<ul>' + '<li class=\"k-item\"><label class=\"k-label\">#=messages.operator#' + '<select data-#=ns#bind=\"value: filters[0].operator\">' + '#for(var op in operators){#' + '<option value=\"#=op#\">#=operators[op]#</option>' + '#}#' + '</select>' + '</label></li>' + '<li class=\"k-item\"><label class=\"k-label\">#=messages.value#' + '#if(values){#' + '<select data-#=ns#bind=\"value:filters[0].value\">' + '<option value=\"\">#=messages.selectValue#</option>' + '#for(var val in values){#' + '<option value=\"#=values[val].value#\">#=values[val].text#</option>' + '#}#' + '</select>' + '#}else{#' + '<input data-#=ns#bind=\"value:filters[0].value\" class=\"k-textbox\" type=\"#=inputType#\" ' + '#=useRole ? \"data-\" + ns + \"role=\\'\" + role + \"\\'\" : \"\"# />' + '#}#' + '</label></li>' + '#if(extra){#' + '</ul>' + '<ul class=\"k-filter-help-text\"><li><span class=\"k-link\"></span>' + '<li class=\"k-item\"><label class=\"k-label\"><input type=\"radio\" name=\"logic\" class=\"k-check\" data-#=ns#bind=\"checked: logic\" value=\"and\" />#=messages.and#</label></li>' + '<li class=\"k-item\"><label class=\"k-label\"><input type=\"radio\" name=\"logic\" class=\"k-check\" data-#=ns#bind=\"checked: logic\" value=\"or\" />#=messages.or#</label></li>' + '</ul>' + '<ul class=\"k-filter-help-text\"><li><span class=\"k-link\"></span>' + '<li class=\"k-item\"><label class=\"k-label\">#=messages.additionalOperator#' + '<select data-#=ns#bind=\"value: filters[1].operator\">' + '#for(var op in operators){#' + '<option value=\"#=op#\">#=operators[op]#</option>' + '#}#' + '</select>' + '</label></li>' + '<li class=\"k-item\"><label class=\"k-label\">#=messages.additionalValue#' + '#if(values){#' + '<select data-#=ns#bind=\"value:filters[1].value\">' + '<option value=\"\">#=messages.selectValue#</option>' + '#for(var val in values){#' + '<option value=\"#=values[val].value#\">#=values[val].text#</option>' + '#}#' + '</select>' + '#}else{#' + '<input data-#=ns#bind=\"value:filters[1].value\" class=\"k-textbox\" type=\"#=inputType#\" ' + '#=useRole ? \"data-\" + ns + \"role=\\'\" + role + \"\\'\" : \"\"# />' + '#}#' + '</label></li>' + '#}#' + '</ul>' + '</li><li class=\"k-button-container\">' + '<button type=\"reset\" class=\"k-button\">#=messages.clear#</button>' + '</li></ul>' + '</div>' + '</form>' + '</div>';\n var booleanMobileTemplate = '<div data-#=ns#role=\"view\" data-#=ns#init-widgets=\"false\" data-#=ns#use-native-scrolling=\"true\" class=\"k-grid-filter-menu\">' + '<div data-#=ns#role=\"header\" class=\"k-header\">' + '<button class=\"k-button k-i-cancel\">#=messages.cancel#</button>' + '#=title#' + '<button type=\"submit\" class=\"k-button k-submit\">#=messages.filter#</button>' + '</div>' + '<form title=\"#=messages.info#\" class=\"k-filter-menu k-mobile-list\">' + '<ul class=\"k-filter-help-text\"><li><span class=\"k-link\">#=messages.info#</span>' + '<ul>' + '<li class=\"k-item\"><label class=\"k-label\">' + '<input class=\"k-check\" type=\"radio\" data-#=ns#bind=\"checked: filters[0].value\" value=\"true\" name=\"filters[0].value\"/>' + '#=messages.isTrue#' + '</label></li>' + '<li class=\"k-item\"><label class=\"k-label\">' + '<input class=\"k-check\" type=\"radio\" data-#=ns#bind=\"checked: filters[0].value\" value=\"false\" name=\"filters[0].value\"/>' + '#=messages.isFalse#' + '</label></li>' + '</ul>' + '</li><li class=\"k-button-container\">' + '<button type=\"reset\" class=\"k-button\">#=messages.clear#</button>' + '</li></ul>' + '</form>' + '</div>';\n function removeFiltersForField(expression, field) {\n if (expression.filters) {\n expression.filters = $.grep(expression.filters, function (filter) {\n removeFiltersForField(filter, field);\n if (filter.filters) {\n return filter.filters.length;\n } else {\n return filter.field != field;\n }\n });\n }\n }\n function convertItems(items) {\n var idx, length, item, value, text, result;\n if (items && items.length) {\n result = [];\n for (idx = 0, length = items.length; idx < length; idx++) {\n item = items[idx];\n text = item.text !== '' ? item.text || item.value || item : item.text;\n value = item.value == null ? item.text || item : item.value;\n result[idx] = {\n text: text,\n value: value\n };\n }\n }\n return result;\n }\n function clearFilter(filters, field) {\n return $.grep(filters, function (expr) {\n if (expr.filters) {\n expr.filters = $.grep(expr.filters, function (nested) {\n return nested.field != field;\n });\n return expr.filters.length;\n }\n return expr.field != field;\n });\n }\n var FilterMenu = Widget.extend({\n init: function (element, options) {\n var that = this, type = 'string', operators, initial, link, field;\n Widget.fn.init.call(that, element, options);\n operators = that.operators = options.operators || {};\n element = that.element;\n options = that.options;\n if (!options.appendToElement) {\n link = element.addClass('k-with-icon k-filterable').find('.k-grid-filter');\n if (!link[0]) {\n link = element.prepend('<a class=\"k-grid-filter\" href=\"#\" title=\"' + options.messages.filter + '\"><span class=\"k-icon k-i-filter\"></span></a>').find('.k-grid-filter');\n }\n link.attr('tabindex', -1).on('click' + NS, proxy(that._click, that));\n }\n that.link = link || $();\n that.dataSource = DataSource.create(options.dataSource);\n that.field = options.field || element.attr(kendo.attr('field'));\n that.model = that.dataSource.reader.model;\n that._parse = function (value) {\n return value != null ? value + '' : value;\n };\n if (that.model && that.model.fields) {\n field = that.model.fields[that.field];\n if (field) {\n type = field.type || 'string';\n if (field.parse) {\n that._parse = proxy(field.parse, field);\n }\n }\n }\n if (options.values) {\n type = 'enums';\n }\n that.type = type;\n operators = operators[type] || options.operators[type];\n for (initial in operators) {\n break;\n }\n that._defaultFilter = function () {\n return {\n field: that.field,\n operator: initial || 'eq',\n value: ''\n };\n };\n that._refreshHandler = proxy(that.refresh, that);\n that.dataSource.bind(CHANGE, that._refreshHandler);\n if (options.appendToElement) {\n that._init();\n } else {\n that.refresh();\n }\n },\n _init: function () {\n var that = this, ui = that.options.ui, setUI = isFunction(ui), role;\n that.pane = that.options.pane;\n if (that.pane) {\n that._isMobile = true;\n }\n if (!setUI) {\n role = ui || roles[that.type];\n }\n if (that._isMobile) {\n that._createMobileForm(role);\n } else {\n that._createForm(role);\n }\n that.form.on('submit' + NS, proxy(that._submit, that)).on('reset' + NS, proxy(that._reset, that));\n if (setUI) {\n that.form.find('.k-textbox').removeClass('k-textbox').each(function () {\n ui($(this));\n });\n }\n that.form.find('[' + kendo.attr('role') + '=numerictextbox]').removeClass('k-textbox').end().find('[' + kendo.attr('role') + '=datetimepicker]').removeClass('k-textbox').end().find('[' + kendo.attr('role') + '=timepicker]').removeClass('k-textbox').end().find('[' + kendo.attr('role') + '=datepicker]').removeClass('k-textbox');\n that.refresh();\n that.trigger(INIT, {\n field: that.field,\n container: that.form\n });\n kendo.cycleForm(that.form);\n },\n _createForm: function (role) {\n var that = this, options = that.options, operators = that.operators || {}, type = that.type;\n operators = operators[type] || options.operators[type];\n that.form = $('<form title=\"' + that.options.messages.info + '\" class=\"k-filter-menu\"/>').html(kendo.template(type === 'boolean' ? booleanTemplate : defaultTemplate)({\n field: that.field,\n format: options.format,\n ns: kendo.ns,\n messages: options.messages,\n extra: options.extra,\n operators: operators,\n type: type,\n role: role,\n values: convertItems(options.values)\n }));\n if (!options.appendToElement) {\n that.popup = that.form[POPUP]({\n anchor: that.link,\n open: proxy(that._open, that),\n activate: proxy(that._activate, that),\n close: function () {\n if (that.options.closeCallback) {\n that.options.closeCallback(that.element);\n }\n }\n }).data(POPUP);\n } else {\n that.element.append(that.form);\n that.popup = that.element.closest('.k-popup').data(POPUP);\n }\n that.form.on('keydown' + NS, proxy(that._keydown, that));\n },\n _createMobileForm: function (role) {\n var that = this, options = that.options, operators = that.operators || {}, type = that.type;\n operators = operators[type] || options.operators[type];\n that.form = $('<div />').html(kendo.template(type === 'boolean' ? booleanMobileTemplate : defaultMobileTemplate)({\n field: that.field,\n title: options.title || that.field,\n format: options.format,\n ns: kendo.ns,\n messages: options.messages,\n extra: options.extra,\n operators: operators,\n type: type,\n role: role,\n useRole: !kendo.support.input.date && type === 'date' || type === 'number',\n inputType: mobileRoles[type],\n values: convertItems(options.values)\n }));\n that.view = that.pane.append(that.form.html());\n that.form = that.view.element.find('form');\n that.view.element.on('click', '.k-submit', function (e) {\n that.form.submit();\n e.preventDefault();\n }).on('click', '.k-i-cancel', function (e) {\n that._closeForm();\n e.preventDefault();\n });\n },\n refresh: function () {\n var that = this, expression = that.dataSource.filter() || {\n filters: [],\n logic: 'and'\n };\n var defaultFilters = [that._defaultFilter()];\n var defaultOperator = that._defaultFilter().operator;\n if (that.options.extra || defaultOperator !== 'isnull' && defaultOperator !== 'isnotnull') {\n defaultFilters.push(that._defaultFilter());\n }\n that.filterModel = kendo.observable({\n logic: 'and',\n filters: defaultFilters\n });\n if (that.form) {\n kendo.bind(that.form.children().first(), that.filterModel);\n }\n if (that._bind(expression)) {\n that.link.addClass('k-state-active');\n } else {\n that.link.removeClass('k-state-active');\n }\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n if (that.form) {\n kendo.unbind(that.form);\n kendo.destroy(that.form);\n that.form.unbind(NS);\n if (that.popup) {\n that.popup.destroy();\n that.popup = null;\n }\n that.form = null;\n }\n if (that.view) {\n that.view.purge();\n that.view = null;\n }\n that.link.unbind(NS);\n if (that._refreshHandler) {\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n that.dataSource = null;\n }\n that.element = that.link = that._refreshHandler = that.filterModel = null;\n },\n _bind: function (expression) {\n var that = this, filters = expression.filters, idx, length, found = false, current = 0, filterModel = that.filterModel, currentFilter, filter;\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n if (filter.field == that.field) {\n filterModel.set('logic', expression.logic);\n currentFilter = filterModel.filters[current];\n if (!currentFilter) {\n filterModel.filters.push({ field: that.field });\n currentFilter = filterModel.filters[current];\n }\n currentFilter.set('value', that._parse(filter.value));\n currentFilter.set('operator', filter.operator);\n current++;\n found = true;\n } else if (filter.filters) {\n found = found || that._bind(filter);\n }\n }\n return found;\n },\n _stripFilters: function (filters) {\n return $.grep(filters, function (filter) {\n return filter.value !== '' && filter.value != null || (filter.operator === 'isnull' || filter.operator === 'isnotnull' || filter.operator === 'isempty' || filter.operator === 'isnotempty');\n });\n },\n _merge: function (expression) {\n var that = this, logic = expression.logic || 'and', filters = this._stripFilters(expression.filters), filter, result = that.dataSource.filter() || {\n filters: [],\n logic: 'and'\n }, idx, length;\n removeFiltersForField(result, that.field);\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n filter.value = that._parse(filter.value);\n }\n if (filters.length) {\n if (result.filters.length) {\n expression.filters = filters;\n if (result.logic !== 'and') {\n result.filters = [{\n logic: result.logic,\n filters: result.filters\n }];\n result.logic = 'and';\n }\n if (filters.length > 1) {\n result.filters.push(expression);\n } else {\n result.filters.push(filters[0]);\n }\n } else {\n result.filters = filters;\n result.logic = logic;\n }\n }\n return result;\n },\n filter: function (expression) {\n var filters = this._stripFilters(expression.filters);\n if (filters.length && this.trigger('change', {\n filter: {\n logic: expression.logic,\n filters: filters\n },\n field: this.field\n })) {\n return;\n }\n expression = this._merge(expression);\n if (expression.filters.length) {\n this.dataSource.filter(expression);\n }\n },\n clear: function () {\n var that = this, expression = that.dataSource.filter() || { filters: [] };\n if (this.trigger('change', {\n filter: null,\n field: that.field\n })) {\n return;\n }\n expression.filters = $.grep(expression.filters, function (filter) {\n if (filter.filters) {\n filter.filters = clearFilter(filter.filters, that.field);\n return filter.filters.length;\n }\n return filter.field != that.field;\n });\n if (!expression.filters.length) {\n expression = null;\n }\n that.dataSource.filter(expression);\n },\n _submit: function (e) {\n e.preventDefault();\n e.stopPropagation();\n this.filter(this.filterModel.toJSON());\n this._closeForm();\n },\n _reset: function () {\n this.clear();\n if (this.options.search) {\n this.container.find('label').parent().show();\n }\n this._closeForm();\n },\n _closeForm: function () {\n if (this._isMobile) {\n this.pane.navigate('', this.options.animations.right);\n } else {\n this.popup.close();\n }\n },\n _click: function (e) {\n e.preventDefault();\n e.stopPropagation();\n if (!this.popup && !this.pane) {\n this._init();\n }\n if (this._isMobile) {\n this.pane.navigate(this.view, this.options.animations.left);\n } else {\n this.popup.toggle();\n }\n },\n _open: function () {\n var popup;\n $('.k-filter-menu').not(this.form).each(function () {\n popup = $(this).data(POPUP);\n if (popup) {\n popup.close();\n }\n });\n },\n _activate: function () {\n this.form.find(':kendoFocusable:first').focus();\n },\n _keydown: function (e) {\n if (e.keyCode == kendo.keys.ESC) {\n this.popup.close();\n }\n },\n events: [\n INIT,\n 'change'\n ],\n options: {\n name: 'FilterMenu',\n extra: true,\n appendToElement: false,\n type: 'string',\n operators: {\n string: {\n eq: EQ,\n neq: NEQ,\n startswith: 'Starts with',\n contains: 'Contains',\n doesnotcontain: 'Does not contain',\n endswith: 'Ends with',\n isnull: 'Is null',\n isnotnull: 'Is not null',\n isempty: 'Is empty',\n isnotempty: 'Is not empty'\n },\n number: {\n eq: EQ,\n neq: NEQ,\n gte: 'Is greater than or equal to',\n gt: 'Is greater than',\n lte: 'Is less than or equal to',\n lt: 'Is less than',\n isnull: 'Is null',\n isnotnull: 'Is not null'\n },\n date: {\n eq: EQ,\n neq: NEQ,\n gte: 'Is after or equal to',\n gt: 'Is after',\n lte: 'Is before or equal to',\n lt: 'Is before',\n isnull: 'Is null',\n isnotnull: 'Is not null'\n },\n enums: {\n eq: EQ,\n neq: NEQ,\n isnull: 'Is null',\n isnotnull: 'Is not null'\n }\n },\n messages: {\n info: 'Show items with value that:',\n isTrue: 'is true',\n isFalse: 'is false',\n filter: 'Filter',\n clear: 'Clear',\n and: 'And',\n or: 'Or',\n selectValue: '-Select value-',\n operator: 'Operator',\n value: 'Value',\n additionalValue: 'Additional value',\n additionalOperator: 'Additional operator',\n logic: 'Filters logic',\n cancel: 'Cancel'\n },\n animations: {\n left: 'slide',\n right: 'slide:right'\n }\n }\n });\n var multiCheckNS = '.kendoFilterMultiCheck';\n function filterValuesForField(expression, field) {\n if (expression.filters) {\n expression.filters = $.grep(expression.filters, function (filter) {\n filterValuesForField(filter, field);\n if (filter.filters) {\n return filter.filters.length;\n } else {\n return filter.field == field && filter.operator == 'eq';\n }\n });\n }\n }\n function flatFilterValues(expression) {\n if (expression.logic == 'and' && expression.filters.length > 1) {\n return [];\n }\n if (expression.filters) {\n return $.map(expression.filters, function (filter) {\n return flatFilterValues(filter);\n });\n } else if (expression.value !== null && expression.value !== undefined) {\n return [expression.value];\n } else {\n return [];\n }\n }\n function distinct(items, field) {\n var getter = kendo.getter(field, true), result = [], index = 0, seen = {};\n while (index < items.length) {\n var item = items[index++], text = getter(item);\n if (text !== undefined && text !== null && !seen.hasOwnProperty(text)) {\n result.push(item);\n seen[text] = true;\n }\n }\n return result;\n }\n function removeDuplicates(dataSelector, dataTextField) {\n return function (e) {\n var items = dataSelector(e);\n return distinct(items, dataTextField);\n };\n }\n var DataSource = kendo.data.DataSource;\n var multiCkeckMobileTemplate = '<div data-#=ns#role=\"view\" data-#=ns#init-widgets=\"false\" class=\"k-grid-filter-menu\">' + '<div data-#=ns#role=\"header\" class=\"k-header\">' + '<button class=\"k-button k-i-cancel\">#=messages.cancel#</button>' + '#=title#' + '<button type=\"submit\" class=\"k-button k-submit\">#=messages.filter#</button>' + '</div>' + '<form class=\"k-filter-menu k-mobile-list\">' + '#if(search){#' + '<div class=\\'k-textbox k-space-right\\'>' + '<input placeholder=\\'#=messages.search#\\'/>' + '<span class=\\'k-icon k-i-zoom\\' />' + '</div>' + '#}#' + '<ul class=\"k-multicheck-wrap\"></ul>' + '</li><li class=\"k-button-container\">' + '#if(messages.selectedItemsFormat){#<div class=\\'k-filter-selected-items\\'></div>#}#' + '<button type=\"reset\" class=\"k-button\">#=messages.clear#</button>' + '</li></ul>' + '</form>' + '</div>';\n var FilterMultiCheck = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n options = this.options;\n this.element = $(element);\n var field = this.field = this.options.field || this.element.attr(kendo.attr('field'));\n var checkSource = options.checkSource;\n if (this._foreignKeyValues()) {\n this.checkSource = DataSource.create(options.values);\n this.checkSource.fetch();\n } else if (options.forceUnique) {\n checkSource = options.dataSource.options;\n delete checkSource.pageSize;\n this.checkSource = DataSource.create(checkSource);\n this.checkSource.reader.data = removeDuplicates(this.checkSource.reader.data, this.field);\n } else {\n this.checkSource = DataSource.create(checkSource);\n }\n this.dataSource = options.dataSource;\n this.model = this.dataSource.reader.model;\n this._parse = function (value) {\n return value + '';\n };\n if (this.model && this.model.fields) {\n field = this.model.fields[this.field];\n if (field) {\n if (field.type == 'number') {\n this._parse = parseFloat;\n } else if (field.parse) {\n this._parse = proxy(field.parse, field);\n }\n this.type = field.type || 'string';\n }\n }\n if (!options.appendToElement) {\n this._createLink();\n } else {\n this._init();\n }\n this._refreshHandler = proxy(this.refresh, this);\n this.dataSource.bind(CHANGE, this._refreshHandler);\n },\n _createLink: function () {\n var element = this.element;\n var link = element.addClass('k-with-icon k-filterable').find('.k-grid-filter');\n if (!link[0]) {\n link = element.prepend('<a class=\"k-grid-filter\" href=\"#\"><span class=\"k-icon k-i-filter\"/></a>').find('.k-grid-filter');\n }\n this._link = link.attr('tabindex', -1).on('click' + NS, proxy(this._click, this));\n },\n _init: function () {\n var that = this;\n var forceUnique = this.options.forceUnique;\n var options = this.options;\n this.pane = options.pane;\n if (this.pane) {\n this._isMobile = true;\n }\n this._createForm();\n if (this._foreignKeyValues()) {\n this.refresh();\n } else if (forceUnique && !this.checkSource.options.serverPaging && this.dataSource.data().length) {\n this.checkSource.data(distinct(this.dataSource.data(), this.field));\n this.refresh();\n } else {\n this._attachProgress();\n this.checkSource.fetch(function () {\n that.refresh.call(that);\n });\n }\n if (!this.options.forceUnique) {\n this.checkChangeHandler = function () {\n that.container.empty();\n that.refresh();\n };\n this.checkSource.bind(CHANGE, this.checkChangeHandler);\n }\n this.form.on('keydown' + multiCheckNS, proxy(this._keydown, this)).on('submit' + multiCheckNS, proxy(this._filter, this)).on('reset' + multiCheckNS, proxy(this._reset, this));\n this.trigger(INIT, {\n field: this.field,\n container: this.form\n });\n },\n _attachProgress: function () {\n var that = this;\n this._progressHandler = function () {\n ui.progress(that.container, true);\n };\n this._progressHideHandler = function () {\n ui.progress(that.container, false);\n };\n this.checkSource.bind('progress', this._progressHandler).bind('change', this._progressHideHandler);\n },\n _input: function () {\n var that = this;\n that._clearTypingTimeout();\n that._typingTimeout = setTimeout(function () {\n that.search();\n }, 100);\n },\n _clearTypingTimeout: function () {\n if (this._typingTimeout) {\n clearTimeout(this._typingTimeout);\n this._typingTimeout = null;\n }\n },\n search: function () {\n var ignoreCase = this.options.ignoreCase;\n var searchString = this.searchTextBox[0].value;\n var labels = this.container.find('label');\n if (ignoreCase) {\n searchString = searchString.toLowerCase();\n }\n var i = 0;\n if (this.options.checkAll && labels.length) {\n labels[0].parentNode.style.display = searchString ? 'none' : '';\n i++;\n }\n while (i < labels.length) {\n var label = labels[i];\n var labelText = label.textContent || label.innerText;\n if (ignoreCase) {\n labelText = labelText.toLowerCase();\n }\n label.parentNode.style.display = labelText.indexOf(searchString) >= 0 ? '' : 'none';\n i++;\n }\n },\n _activate: function () {\n this.form.find(':kendoFocusable:first').focus();\n },\n _createForm: function () {\n var options = this.options;\n var html = '';\n if (!this._isMobile) {\n if (options.search) {\n html += '<div class=\\'k-textbox k-space-right\\'>' + '<input placeholder=\\'' + options.messages.search + '\\'/>' + '<span class=\\'k-icon k-i-zoom\\' />' + '</div>';\n }\n html += '<ul class=\\'k-reset k-multicheck-wrap\\'></ul>';\n if (options.messages.selectedItemsFormat) {\n html += '<div class=\\'k-filter-selected-items\\'>' + kendo.format(options.messages.selectedItemsFormat, 0) + '</div>';\n }\n html += '<button type=\\'submit\\' class=\\'k-button k-primary\\'>' + options.messages.filter + '</button>';\n html += '<button type=\\'reset\\' class=\\'k-button\\'>' + options.messages.clear + '</button>';\n this.form = $('<form class=\"k-filter-menu\"/>').html(html);\n this.container = this.form.find('.k-multicheck-wrap');\n }\n if (this._isMobile) {\n var that = this;\n that.form = $('<div />').html(kendo.template(multiCkeckMobileTemplate)({\n field: that.field,\n title: options.title || that.field,\n ns: kendo.ns,\n messages: options.messages,\n search: options.search\n }));\n that.view = that.pane.append(that.form.html());\n that.form = that.view.element.find('form');\n var element = this.view.element;\n this.container = element.find('.k-multicheck-wrap');\n element.on('click', '.k-submit', function (e) {\n that.form.submit();\n e.preventDefault();\n }).on('click', '.k-i-cancel', function (e) {\n that._closeForm();\n e.preventDefault();\n });\n } else {\n if (!options.appendToElement) {\n this.popup = this.form.kendoPopup({\n anchor: this._link,\n activate: proxy(this._activate, this)\n }).data(POPUP);\n } else {\n this.popup = this.element.closest('.k-popup').data(POPUP);\n this.element.append(this.form);\n }\n }\n if (options.search) {\n this.searchTextBox = this.form.find('.k-textbox > input');\n this.searchTextBox.on('input', proxy(this._input, this));\n }\n },\n createCheckAllItem: function () {\n var options = this.options;\n var template = kendo.template(options.itemTemplate({\n field: 'all',\n mobile: this._isMobile\n }));\n var checkAllContainer = $(template({ all: options.messages.checkAll }));\n this.container.prepend(checkAllContainer);\n this.checkBoxAll = checkAllContainer.find(':checkbox').eq(0).addClass('k-check-all');\n this.checkAllHandler = proxy(this.checkAll, this);\n this.checkBoxAll.on(CHANGE + multiCheckNS, this.checkAllHandler);\n },\n updateCheckAllState: function () {\n if (this.options.messages.selectedItemsFormat) {\n this.form.find('.k-filter-selected-items').text(kendo.format(this.options.messages.selectedItemsFormat, this.container.find(':checked:not(.k-check-all)').length));\n }\n if (this.checkBoxAll) {\n var state = this.container.find(':checkbox:not(.k-check-all)').length == this.container.find(':checked:not(.k-check-all)').length;\n this.checkBoxAll.prop('checked', state);\n }\n },\n refresh: function (e) {\n var forceUnique = this.options.forceUnique;\n var dataSource = this.dataSource;\n var filters = this.getFilterArray();\n if (this._link) {\n this._link.toggleClass('k-state-active', filters.length !== 0);\n }\n if (this.form) {\n if (e && forceUnique && e.sender === dataSource && !dataSource.options.serverPaging && (e.action == 'itemchange' || e.action == 'add' || e.action == 'remove' || dataSource.options.autoSync && e.action === 'sync') && !this._foreignKeyValues()) {\n this.checkSource.data(distinct(this.dataSource.data(), this.field));\n this.container.empty();\n }\n if (this.container.is(':empty')) {\n this.createCheckBoxes();\n }\n this.checkValues(filters);\n this.trigger(REFRESH);\n }\n },\n getFilterArray: function () {\n var expression = $.extend(true, {}, {\n filters: [],\n logic: 'and'\n }, this.dataSource.filter());\n filterValuesForField(expression, this.field);\n var flatValues = flatFilterValues(expression);\n return flatValues;\n },\n createCheckBoxes: function () {\n var options = this.options;\n var data;\n var templateOptions = {\n field: this.field,\n format: options.format,\n mobile: this._isMobile,\n type: this.type\n };\n if (!this.options.forceUnique) {\n data = this.checkSource.view();\n } else if (this._foreignKeyValues()) {\n data = this.checkSource.data();\n templateOptions.valueField = 'value';\n templateOptions.field = 'text';\n } else {\n data = this.checkSource.data();\n }\n var template = kendo.template(options.itemTemplate(templateOptions));\n var itemsHtml = kendo.render(template, data);\n if (options.checkAll) {\n this.createCheckAllItem();\n }\n this.container.on(CHANGE + multiCheckNS, ':checkbox', proxy(this.updateCheckAllState, this));\n this.container.append(itemsHtml);\n },\n checkAll: function () {\n var state = this.checkBoxAll.is(':checked');\n this.container.find(':checkbox').prop('checked', state);\n },\n checkValues: function (values) {\n var that = this;\n $($.grep(this.container.find(':checkbox').prop('checked', false), function (ele) {\n var found = false;\n if ($(ele).is('.k-check-all')) {\n return;\n }\n var checkBoxVal = that._parse($(ele).val());\n for (var i = 0; i < values.length; i++) {\n if (that.type == 'date') {\n found = values[i].getTime() == checkBoxVal.getTime();\n } else {\n found = values[i] == checkBoxVal;\n }\n if (found) {\n return found;\n }\n }\n })).prop('checked', true);\n this.updateCheckAllState();\n },\n _filter: function (e) {\n e.preventDefault();\n e.stopPropagation();\n var expression = { logic: 'or' };\n var that = this;\n expression.filters = $.map(this.form.find(':checkbox:checked:not(.k-check-all)'), function (item) {\n return {\n value: $(item).val(),\n operator: 'eq',\n field: that.field\n };\n });\n if (expression.filters.length && this.trigger('change', {\n filter: expression,\n field: that.field\n })) {\n return;\n }\n expression = this._merge(expression);\n if (expression.filters.length) {\n this.dataSource.filter(expression);\n }\n this._closeForm();\n },\n _stripFilters: function (filters) {\n return $.grep(filters, function (filter) {\n return filter.value != null;\n });\n },\n _foreignKeyValues: function () {\n var options = this.options;\n return options.values && !options.checkSource;\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n if (that.form) {\n kendo.unbind(that.form);\n kendo.destroy(that.form);\n that.form.unbind(multiCheckNS);\n if (that.popup) {\n that.popup.destroy();\n that.popup = null;\n }\n that.form = null;\n if (that.container) {\n that.container.unbind(multiCheckNS);\n that.container = null;\n }\n if (that.checkBoxAll) {\n that.checkBoxAll.unbind(multiCheckNS);\n }\n }\n if (that.view) {\n that.view.purge();\n that.view = null;\n }\n if (that._link) {\n that._link.unbind(NS);\n }\n if (that._refreshHandler) {\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n that.dataSource = null;\n }\n if (that.checkChangeHandler) {\n that.checkSource.unbind(CHANGE, that.checkChangeHandler);\n }\n if (that._progressHandler) {\n that.checkSource.unbind('progress', that._progressHandler);\n }\n if (that._progressHideHandler) {\n that.checkSource.unbind('change', that._progressHideHandler);\n }\n this._clearTypingTimeout();\n this.searchTextBox = null;\n that.element = that.checkSource = that.container = that.checkBoxAll = that._link = that._refreshHandler = that.checkAllHandler = null;\n },\n options: {\n name: 'FilterMultiCheck',\n itemTemplate: function (options) {\n var field = options.field;\n var format = options.format;\n var valueField = options.valueField;\n var mobile = options.mobile;\n var valueFormat = '';\n if (valueField === undefined) {\n valueField = field;\n }\n if (options.type == 'date') {\n valueFormat = ':yyyy-MM-ddTHH:mm:sszzz';\n }\n return '<li class=\\'k-item\\'>' + '<label class=\\'k-label\\'>' + '<input type=\\'checkbox\\' class=\\'' + (mobile ? 'k-check' : '') + '\\' value=\\'#:kendo.format(\\'{0' + valueFormat + '}\\',' + valueField + ')#\\'/>' + '#:kendo.format(\\'' + (format ? format : '{0}') + '\\', ' + field + ')#' + '</label>' + '</li>';\n },\n checkAll: true,\n search: false,\n ignoreCase: true,\n appendToElement: false,\n messages: {\n checkAll: 'Select All',\n clear: 'Clear',\n filter: 'Filter',\n search: 'Search',\n cancel: 'Cancel',\n selectedItemsFormat: '{0} items selected'\n },\n forceUnique: true,\n animations: {\n left: 'slide',\n right: 'slide:right'\n }\n },\n events: [\n INIT,\n REFRESH,\n 'change'\n ]\n });\n $.extend(FilterMultiCheck.fn, {\n _click: FilterMenu.fn._click,\n _keydown: FilterMenu.fn._keydown,\n _reset: FilterMenu.fn._reset,\n _closeForm: FilterMenu.fn._closeForm,\n clear: FilterMenu.fn.clear,\n _merge: FilterMenu.fn._merge\n });\n ui.plugin(FilterMenu);\n ui.plugin(FilterMultiCheck);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.menu', ['kendo.popup'], f);\n}(function () {\n var __meta__ = {\n id: 'menu',\n name: 'Menu',\n category: 'web',\n description: 'The Menu widget displays hierarchical data as a multi-level menu.',\n depends: ['popup']\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, activeElement = kendo._activeElement, touch = kendo.support.touch && kendo.support.mobileOS, MOUSEDOWN = 'mousedown', CLICK = 'click', extend = $.extend, proxy = $.proxy, each = $.each, template = kendo.template, keys = kendo.keys, Widget = ui.Widget, excludedNodesRegExp = /^(ul|a|div)$/i, NS = '.kendoMenu', IMG = 'img', OPEN = 'open', MENU = 'k-menu', LINK = 'k-link', LAST = 'k-last', CLOSE = 'close', TIMER = 'timer', FIRST = 'k-first', IMAGE = 'k-image', SELECT = 'select', ZINDEX = 'zIndex', ACTIVATE = 'activate', DEACTIVATE = 'deactivate', POINTERDOWN = 'touchstart' + NS + ' MSPointerDown' + NS + ' pointerdown' + NS, pointers = kendo.support.pointers, msPointers = kendo.support.msPointers, allPointers = msPointers || pointers, MOUSEENTER = pointers ? 'pointerover' : msPointers ? 'MSPointerOver' : 'mouseenter', MOUSELEAVE = pointers ? 'pointerout' : msPointers ? 'MSPointerOut' : 'mouseleave', mobile = touch || allPointers, DOCUMENT_ELEMENT = $(document.documentElement), KENDOPOPUP = 'kendoPopup', DEFAULTSTATE = 'k-state-default', HOVERSTATE = 'k-state-hover', FOCUSEDSTATE = 'k-state-focused', DISABLEDSTATE = 'k-state-disabled', SELECTEDSTATE = 'k-state-selected', menuSelector = '.k-menu', groupSelector = '.k-menu-group', popupSelector = groupSelector + ',.k-animation-container', allItemsSelector = ':not(.k-list) > .k-item', disabledSelector = '.k-item.k-state-disabled', itemSelector = '.k-item:not(.k-state-disabled)', linkSelector = '.k-item:not(.k-state-disabled) > .k-link', exclusionSelector = ':not(.k-item.k-separator)', nextSelector = exclusionSelector + ':eq(0)', lastSelector = exclusionSelector + ':last', templateSelector = 'div:not(.k-animation-container,.k-list-container)', touchPointerTypes = {\n '2': 1,\n 'touch': 1\n }, templates = {\n content: template('<div #= contentCssAttributes(item) # tabindex=\\'-1\\'>#= content(item) #</div>'),\n group: template('<ul class=\\'#= groupCssClass(group) #\\'#= groupAttributes(group) # role=\\'menu\\' aria-hidden=\\'true\\'>' + '#= renderItems(data) #' + '</ul>'),\n itemWrapper: template('<#= tag(item) # class=\\'#= textClass(item) #\\'#= textAttributes(item) #>' + '#= image(data) ##= sprite(item) ##= text(item) #' + '#= arrow(data) #' + '</#= tag(item) #>'),\n item: template('<li class=\\'#= wrapperCssClass(group, item) #\\' #= itemCssAttributes(item) # role=\\'menuitem\\' #=item.items ? \"aria-haspopup=\\'true\\'\": \"\"#' + '#=item.enabled === false ? \"aria-disabled=\\'true\\'\" : \\'\\'#>' + '#= itemWrapper(data) #' + '# if (item.items) { #' + '#= subGroup({ items: item.items, menu: menu, group: { expanded: item.expanded } }) #' + '# } else if (item.content || item.contentUrl) { #' + '#= renderContent(data) #' + '# } #' + '</li>'),\n image: template('<img #= imageCssAttributes(item) # alt=\\'\\' src=\\'#= item.imageUrl #\\' />'),\n arrow: template('<span class=\\'#= arrowClass(item, group) #\\'></span>'),\n sprite: template('<span class=\\'k-sprite #= spriteCssClass #\\'></span>'),\n empty: template('')\n }, rendering = {\n wrapperCssClass: function (group, item) {\n var result = 'k-item', index = item.index;\n if (item.enabled === false) {\n result += ' k-state-disabled';\n } else {\n result += ' k-state-default';\n }\n if (group.firstLevel && index === 0) {\n result += ' k-first';\n }\n if (index == group.length - 1) {\n result += ' k-last';\n }\n if (item.cssClass) {\n result += ' ' + item.cssClass;\n }\n if (item.attr && item.attr.hasOwnProperty('class')) {\n result += ' ' + item.attr['class'];\n }\n if (item.selected) {\n result += ' ' + SELECTEDSTATE;\n }\n return result;\n },\n itemCssAttributes: function (item) {\n var result = '';\n var attributes = item.attr || {};\n for (var attr in attributes) {\n if (attributes.hasOwnProperty(attr) && attr !== 'class') {\n result += attr + '=\"' + attributes[attr] + '\" ';\n }\n }\n return result;\n },\n imageCssAttributes: function (item) {\n var result = '';\n var attributes = item.imageAttr || {};\n if (!attributes['class']) {\n attributes['class'] = IMAGE;\n } else {\n attributes['class'] += ' ' + IMAGE;\n }\n for (var attr in attributes) {\n if (attributes.hasOwnProperty(attr)) {\n result += attr + '=\"' + attributes[attr] + '\" ';\n }\n }\n return result;\n },\n contentCssAttributes: function (item) {\n var result = '';\n var attributes = item.contentAttr || {};\n var defaultClasses = 'k-content k-group k-menu-group';\n if (!attributes['class']) {\n attributes['class'] = defaultClasses;\n } else {\n attributes['class'] += ' ' + defaultClasses;\n }\n for (var attr in attributes) {\n if (attributes.hasOwnProperty(attr)) {\n result += attr + '=\"' + attributes[attr] + '\" ';\n }\n }\n return result;\n },\n textClass: function () {\n return LINK;\n },\n textAttributes: function (item) {\n return item.url ? ' href=\\'' + item.url + '\\'' : '';\n },\n arrowClass: function (item, group) {\n var result = 'k-icon';\n if (group.horizontal) {\n result += ' k-i-arrow-60-down';\n } else {\n result += ' k-i-arrow-60-right';\n }\n return result;\n },\n text: function (item) {\n return item.encoded === false ? item.text : kendo.htmlEncode(item.text);\n },\n tag: function (item) {\n return item.url ? 'a' : 'span';\n },\n groupAttributes: function (group) {\n return group.expanded !== true ? ' style=\\'display:none\\'' : '';\n },\n groupCssClass: function () {\n return 'k-group k-menu-group';\n },\n content: function (item) {\n return item.content ? item.content : ' ';\n }\n };\n function getEffectDirection(direction, root) {\n direction = direction.split(' ')[!root + 0] || direction;\n return direction.replace('top', 'up').replace('bottom', 'down');\n }\n function parseDirection(direction, root, isRtl) {\n direction = direction.split(' ')[!root + 0] || direction;\n var output = {\n origin: [\n 'bottom',\n isRtl ? 'right' : 'left'\n ],\n position: [\n 'top',\n isRtl ? 'right' : 'left'\n ]\n }, horizontal = /left|right/.test(direction);\n if (horizontal) {\n output.origin = [\n 'top',\n direction\n ];\n output.position[1] = kendo.directions[direction].reverse;\n } else {\n output.origin[0] = direction;\n output.position[0] = kendo.directions[direction].reverse;\n }\n output.origin = output.origin.join(' ');\n output.position = output.position.join(' ');\n return output;\n }\n function contains(parent, child) {\n try {\n return $.contains(parent, child);\n } catch (e) {\n return false;\n }\n }\n function updateItemClasses(item) {\n item = $(item);\n item.addClass('k-item').children(IMG).addClass(IMAGE);\n item.children('a').addClass(LINK).children(IMG).addClass(IMAGE);\n item.filter(':not([disabled])').addClass(DEFAULTSTATE);\n item.filter('.k-separator').empty().append(' ');\n item.filter('li[disabled]').addClass(DISABLEDSTATE).removeAttr('disabled').attr('aria-disabled', true);\n if (!item.filter('[role]').length) {\n item.attr('role', 'menuitem');\n }\n if (!item.children('.' + LINK).length) {\n item.contents().filter(function () {\n return !this.nodeName.match(excludedNodesRegExp) && !(this.nodeType == 3 && !$.trim(this.nodeValue));\n }).wrapAll('<span class=\\'' + LINK + '\\'/>');\n }\n updateArrow(item);\n updateFirstLast(item);\n }\n function updateArrow(item) {\n item = $(item);\n item.find('> .k-link > [class*=k-i-arrow]:not(.k-sprite)').remove();\n item.filter(':has(.k-menu-group)').children('.k-link:not(:has([class*=k-i-arrow]:not(.k-sprite)))').each(function () {\n var item = $(this), arrowCssClass = getArrowCssClass(item);\n item.append('<span class=\\'k-icon ' + arrowCssClass + '\\'/>');\n });\n }\n function getArrowCssClass(item) {\n var arrowCssClass, parent = item.parent().parent(), isRtl = kendo.support.isRtl(parent);\n if (parent.hasClass(MENU + '-horizontal')) {\n arrowCssClass = ' k-i-arrow-60-down';\n } else {\n if (isRtl) {\n arrowCssClass = ' k-i-arrow-60-left';\n } else {\n arrowCssClass = ' k-i-arrow-60-right';\n }\n }\n return arrowCssClass;\n }\n function updateFirstLast(item) {\n item = $(item);\n item.filter('.k-first:not(:first-child)').removeClass(FIRST);\n item.filter('.k-last:not(:last-child)').removeClass(LAST);\n item.filter(':first-child').addClass(FIRST);\n item.filter(':last-child').addClass(LAST);\n }\n function storeItemSelectEventHandler(element, options) {\n var selectHandler = getItemSelectEventHandler(options);\n if (selectHandler) {\n setItemData(element, selectHandler);\n }\n if (options.items) {\n $(element).children('ul').children('li').each(function (i) {\n storeItemSelectEventHandler(this, options.items[i]);\n });\n }\n }\n function setItemData(element, selectHandler) {\n $(element).children('.k-link').data({ selectHandler: selectHandler });\n }\n function getItemSelectEventHandler(options) {\n var selectHandler = options.select, isFunction = kendo.isFunction;\n if (selectHandler && isFunction(selectHandler)) {\n return selectHandler;\n }\n return null;\n }\n var Menu = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.wrapper = that.element;\n options = that.options;\n that._initData(options);\n that._updateClasses();\n that._animations(options);\n that.nextItemZIndex = 100;\n that._tabindex();\n that._focusProxy = proxy(that._focusHandler, that);\n element.on(POINTERDOWN, itemSelector, that._focusProxy).on(CLICK + NS, disabledSelector, false).on(CLICK + NS, itemSelector, proxy(that._click, that)).on('keydown' + NS, proxy(that._keydown, that)).on('focus' + NS, proxy(that._focus, that)).on('focus' + NS, '.k-content', proxy(that._focus, that)).on(POINTERDOWN + ' ' + MOUSEDOWN + NS, '.k-content', proxy(that._preventClose, that)).on('blur' + NS, proxy(that._removeHoverItem, that)).on('blur' + NS, '[tabindex]', proxy(that._checkActiveElement, that)).on(MOUSEENTER + NS, itemSelector, proxy(that._mouseenter, that)).on(MOUSELEAVE + NS, itemSelector, proxy(that._mouseleave, that)).on(MOUSEENTER + NS + ' ' + MOUSELEAVE + NS + ' ' + MOUSEDOWN + NS + ' ' + CLICK + NS, linkSelector, proxy(that._toggleHover, that));\n if (options.openOnClick) {\n that.clicked = false;\n that._documentClickHandler = proxy(that._documentClick, that);\n $(document).click(that._documentClickHandler);\n }\n element.attr('role', 'menubar');\n if (element[0].id) {\n that._ariaId = kendo.format('{0}_mn_active', element[0].id);\n }\n kendo.notify(that);\n },\n events: [\n OPEN,\n CLOSE,\n ACTIVATE,\n DEACTIVATE,\n SELECT\n ],\n options: {\n name: 'Menu',\n animation: {\n open: { duration: 200 },\n close: { duration: 100 }\n },\n orientation: 'horizontal',\n direction: 'default',\n openOnClick: false,\n closeOnClick: true,\n hoverDelay: 100,\n popupCollision: undefined\n },\n _initData: function (options) {\n var that = this;\n if (options.dataSource) {\n that.angular('cleanup', function () {\n return { elements: that.element.children() };\n });\n that.element.empty();\n that.append(options.dataSource, that.element);\n that.angular('compile', function () {\n return { elements: that.element.children() };\n });\n }\n },\n setOptions: function (options) {\n var animation = this.options.animation;\n this._animations(options);\n options.animation = extend(true, animation, options.animation);\n if ('dataSource' in options) {\n this._initData(options);\n }\n this._updateClasses();\n Widget.fn.setOptions.call(this, options);\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.element.off(NS);\n if (that._documentClickHandler) {\n $(document).unbind('click', that._documentClickHandler);\n }\n kendo.destroy(that.element);\n },\n enable: function (element, enable) {\n this._toggleDisabled(element, enable !== false);\n return this;\n },\n disable: function (element) {\n this._toggleDisabled(element, false);\n return this;\n },\n append: function (item, referenceItem) {\n referenceItem = this.element.find(referenceItem);\n var inserted = this._insert(item, referenceItem, referenceItem.length ? referenceItem.find('> .k-menu-group, > .k-animation-container > .k-menu-group') : null);\n each(inserted.items, function (i) {\n inserted.group.append(this);\n updateArrow(this);\n storeItemSelectEventHandler(this, item[i] || item);\n });\n updateArrow(referenceItem);\n updateFirstLast(inserted.group.find('.k-first, .k-last').add(inserted.items));\n return this;\n },\n insertBefore: function (item, referenceItem) {\n referenceItem = this.element.find(referenceItem);\n var inserted = this._insert(item, referenceItem, referenceItem.parent());\n each(inserted.items, function (i) {\n referenceItem.before(this);\n updateArrow(this);\n updateFirstLast(this);\n storeItemSelectEventHandler(this, item[i] || item);\n });\n updateFirstLast(referenceItem);\n return this;\n },\n insertAfter: function (item, referenceItem) {\n referenceItem = this.element.find(referenceItem);\n var inserted = this._insert(item, referenceItem, referenceItem.parent());\n each(inserted.items, function (i) {\n referenceItem.after(this);\n updateArrow(this);\n updateFirstLast(this);\n storeItemSelectEventHandler(this, item[i] || item);\n });\n updateFirstLast(referenceItem);\n return this;\n },\n _insert: function (item, referenceItem, parent) {\n var that = this, items, groups;\n if (!referenceItem || !referenceItem.length) {\n parent = that.element;\n }\n var plain = $.isPlainObject(item), groupData = {\n firstLevel: parent.hasClass(MENU),\n horizontal: parent.hasClass(MENU + '-horizontal'),\n expanded: true,\n length: parent.children().length\n };\n if (referenceItem && !parent.length) {\n parent = $(Menu.renderGroup({ group: groupData })).appendTo(referenceItem);\n }\n if (plain || $.isArray(item)) {\n items = $($.map(plain ? [item] : item, function (value, idx) {\n if (typeof value === 'string') {\n return $(value).get();\n } else {\n return $(Menu.renderItem({\n group: groupData,\n item: extend(value, { index: idx })\n })).get();\n }\n }));\n } else {\n if (typeof item == 'string' && item.charAt(0) != '<') {\n items = that.element.find(item);\n } else {\n items = $(item);\n }\n groups = items.find('> ul').addClass('k-menu-group').attr('role', 'menu');\n items = items.filter('li');\n items.add(groups.find('> li')).each(function () {\n updateItemClasses(this);\n });\n }\n return {\n items: items,\n group: parent\n };\n },\n remove: function (element) {\n element = this.element.find(element);\n var that = this, parent = element.parentsUntil(that.element, allItemsSelector), group = element.parent('ul:not(.k-menu)');\n element.remove();\n if (group && !group.children(allItemsSelector).length) {\n var container = group.parent('.k-animation-container');\n if (container.length) {\n container.remove();\n } else {\n group.remove();\n }\n }\n if (parent.length) {\n parent = parent.eq(0);\n updateArrow(parent);\n updateFirstLast(parent);\n }\n return that;\n },\n open: function (element) {\n var that = this, options = that.options, horizontal = options.orientation == 'horizontal', direction = options.direction, isRtl = kendo.support.isRtl(that.wrapper);\n element = that.element.find(element);\n if (/^(top|bottom|default)$/.test(direction)) {\n if (isRtl) {\n direction = horizontal ? (direction + ' left').replace('default', 'bottom') : 'left';\n } else {\n direction = horizontal ? (direction + ' right').replace('default', 'bottom') : 'right';\n }\n }\n element.siblings().find('>.k-popup:visible,>.k-animation-container>.k-popup:visible').each(function () {\n var popup = $(this).data('kendoPopup');\n if (popup) {\n popup.close(true);\n }\n });\n element.each(function () {\n var li = $(this);\n clearTimeout(li.data(TIMER));\n li.data(TIMER, setTimeout(function () {\n var ul = li.find('.k-menu-group:first:hidden'), popup;\n if (ul[0] && that._triggerEvent({\n item: li[0],\n type: OPEN\n }) === false) {\n if (!ul.find('.k-menu-group')[0] && ul.children('.k-item').length > 1) {\n var windowHeight = $(window).height(), setScrolling = function () {\n ul.css({\n maxHeight: windowHeight - (kendo._outerHeight(ul) - ul.height()) - kendo.getShadows(ul).bottom,\n overflow: 'auto'\n });\n };\n if (kendo.support.browser.msie && kendo.support.browser.version <= 7) {\n setTimeout(setScrolling, 0);\n } else {\n setScrolling();\n }\n } else {\n ul.css({\n maxHeight: '',\n overflow: ''\n });\n }\n li.data(ZINDEX, li.css(ZINDEX));\n li.css(ZINDEX, that.nextItemZIndex++);\n popup = ul.data(KENDOPOPUP);\n var root = li.parent().hasClass(MENU), parentHorizontal = root && horizontal, directions = parseDirection(direction, root, isRtl), effects = options.animation.open.effects, openEffects = effects !== undefined ? effects : 'slideIn:' + getEffectDirection(direction, root);\n if (!popup) {\n popup = ul.kendoPopup({\n activate: function () {\n that._triggerEvent({\n item: this.wrapper.parent(),\n type: ACTIVATE\n });\n },\n deactivate: function (e) {\n e.sender.element.removeData('targetTransform').css({ opacity: '' });\n that._triggerEvent({\n item: this.wrapper.parent(),\n type: DEACTIVATE\n });\n },\n origin: directions.origin,\n position: directions.position,\n collision: options.popupCollision !== undefined ? options.popupCollision : parentHorizontal ? 'fit' : 'fit flip',\n anchor: li,\n appendTo: li,\n animation: {\n open: extend(true, { effects: openEffects }, options.animation.open),\n close: options.animation.close\n },\n close: function (e) {\n var li = e.sender.wrapper.parent();\n if (!that._triggerEvent({\n item: li[0],\n type: CLOSE\n })) {\n li.css(ZINDEX, li.data(ZINDEX));\n li.removeData(ZINDEX);\n if (touch) {\n li.removeClass(HOVERSTATE);\n that._removeHoverItem();\n }\n } else {\n e.preventDefault();\n }\n }\n }).data(KENDOPOPUP);\n } else {\n popup = ul.data(KENDOPOPUP);\n popup.options.origin = directions.origin;\n popup.options.position = directions.position;\n popup.options.animation.open.effects = openEffects;\n }\n ul.removeAttr('aria-hidden');\n popup.open();\n }\n }, that.options.hoverDelay));\n });\n return that;\n },\n close: function (items, dontClearClose) {\n var that = this, element = that.element;\n items = element.find(items);\n if (!items.length) {\n items = element.find('>.k-item');\n }\n items.each(function () {\n var li = $(this);\n if (!dontClearClose && that._isRootItem(li)) {\n that.clicked = false;\n }\n clearTimeout(li.data(TIMER));\n li.data(TIMER, setTimeout(function () {\n var popup = li.find('.k-menu-group:not(.k-list-container):not(.k-calendar-container):first:visible').data(KENDOPOPUP);\n if (popup) {\n popup.close();\n popup.element.attr('aria-hidden', true);\n }\n }, that.options.hoverDelay));\n });\n return that;\n },\n _toggleDisabled: function (items, enable) {\n this.element.find(items).each(function () {\n $(this).toggleClass(DEFAULTSTATE, enable).toggleClass(DISABLEDSTATE, !enable).attr('aria-disabled', !enable);\n });\n },\n _toggleHover: function (e) {\n var target = $(kendo.eventTarget(e) || e.target).closest(allItemsSelector), isEnter = e.type == MOUSEENTER || MOUSEDOWN.indexOf(e.type) !== -1;\n if (!target.parents('li.' + DISABLEDSTATE).length) {\n target.toggleClass(HOVERSTATE, isEnter || e.type == 'mousedown' || e.type == 'click');\n }\n this._removeHoverItem();\n },\n _preventClose: function () {\n if (!this.options.closeOnClick) {\n this._closurePrevented = true;\n }\n },\n _checkActiveElement: function (e) {\n var that = this, hoverItem = $(e ? e.currentTarget : this._hoverItem()), target = that._findRootParent(hoverItem)[0];\n if (!this._closurePrevented) {\n setTimeout(function () {\n if (!document.hasFocus() || !contains(target, kendo._activeElement()) && e && !contains(target, e.currentTarget)) {\n that.close(target);\n }\n }, 0);\n }\n this._closurePrevented = false;\n },\n _removeHoverItem: function () {\n var oldHoverItem = this._hoverItem();\n if (oldHoverItem && oldHoverItem.hasClass(FOCUSEDSTATE)) {\n oldHoverItem.removeClass(FOCUSEDSTATE);\n this._oldHoverItem = null;\n }\n },\n _updateClasses: function () {\n var element = this.element, nonContentGroupsSelector = '.k-menu-init div ul', items;\n element.removeClass('k-menu-horizontal k-menu-vertical');\n element.addClass('k-widget k-reset k-header k-menu-init ' + MENU).addClass(MENU + '-' + this.options.orientation);\n element.find('li > ul').filter(function () {\n return !kendo.support.matchesSelector.call(this, nonContentGroupsSelector);\n }).addClass('k-group k-menu-group').attr('role', 'menu').attr('aria-hidden', element.is(':visible')).end().find('li > div').addClass('k-content').attr('tabindex', '-1');\n items = element.find('> li,.k-menu-group > li');\n element.removeClass('k-menu-init');\n items.each(function () {\n updateItemClasses(this);\n });\n },\n _mouseenter: function (e) {\n var that = this, element = $(e.currentTarget), hasChildren = element.children('.k-animation-container').length || element.children(groupSelector).length;\n if (e.delegateTarget != element.parents(menuSelector)[0]) {\n return;\n }\n if ((!that.options.openOnClick || that.clicked) && !touch && !((pointers || msPointers) && e.originalEvent.pointerType in touchPointerTypes && that._isRootItem(element.closest(allItemsSelector)))) {\n if (!contains(e.currentTarget, e.relatedTarget) && hasChildren) {\n that.open(element);\n }\n }\n if (that.options.openOnClick && that.clicked || mobile) {\n element.siblings().each(proxy(function (_, sibling) {\n that.close(sibling, true);\n }, that));\n }\n },\n _mouseleave: function (e) {\n var that = this, element = $(e.currentTarget), hasChildren = element.children('.k-animation-container').length || element.children(groupSelector).length;\n if (element.parentsUntil('.k-animation-container', '.k-list-container,.k-calendar-container')[0]) {\n e.stopImmediatePropagation();\n return;\n }\n if (!that.options.openOnClick && !touch && !((pointers || msPointers) && e.originalEvent.pointerType in touchPointerTypes) && !contains(e.currentTarget, e.relatedTarget || e.target) && hasChildren && !contains(e.currentTarget, kendo._activeElement())) {\n that.close(element);\n }\n },\n _click: function (e) {\n var that = this, openHandle, options = that.options, target = $(kendo.eventTarget(e)), targetElement = target[0], nodeName = target[0] ? target[0].nodeName.toUpperCase() : '', formNode = nodeName == 'INPUT' || nodeName == 'SELECT' || nodeName == 'BUTTON' || nodeName == 'LABEL', link = target.closest('.' + LINK), element = target.closest(allItemsSelector), itemElement = element[0], href = link.attr('href'), childGroup, childGroupVisible, targetHref = target.attr('href'), sampleHref = $('<a href=\\'#\\' />').attr('href'), isLink = !!href && href !== sampleHref, isLocalLink = isLink && !!href.match(/^#/), isTargetLink = !!targetHref && targetHref !== sampleHref, shouldCloseTheRootItem = options.openOnClick && childGroupVisible && that._isRootItem(element);\n while (targetElement && targetElement.parentNode != itemElement) {\n targetElement = targetElement.parentNode;\n }\n if ($(targetElement).is(templateSelector)) {\n return;\n }\n if (element.hasClass(DISABLEDSTATE)) {\n e.preventDefault();\n return;\n }\n if (!e.handled && that._triggerSelect(target, itemElement) && !formNode) {\n e.preventDefault();\n }\n e.handled = true;\n childGroup = element.children(popupSelector);\n childGroupVisible = childGroup.is(':visible');\n if (options.closeOnClick && (!isLink || isLocalLink) && (!childGroup.length || shouldCloseTheRootItem)) {\n element.removeClass(HOVERSTATE).css('height');\n that._oldHoverItem = that._findRootParent(element);\n that.close(link.parentsUntil(that.element, allItemsSelector));\n that.clicked = false;\n if ('MSPointerUp'.indexOf(e.type) != -1) {\n e.preventDefault();\n }\n return;\n }\n if (isLink && e.enterKey) {\n link[0].click();\n }\n if ((!that._isRootItem(element) || !options.openOnClick) && !kendo.support.touch && !((pointers || msPointers) && that._isRootItem(element.closest(allItemsSelector)))) {\n return;\n }\n if (!isLink && !formNode && !isTargetLink) {\n e.preventDefault();\n }\n that.clicked = true;\n openHandle = childGroup.is(':visible') ? CLOSE : OPEN;\n if (!options.closeOnClick && openHandle == CLOSE) {\n return;\n }\n that[openHandle](element);\n },\n _triggerSelect: function (target, itemElement) {\n var selectHandler = target.data('selectHandler'), itemSelectEventData;\n if (selectHandler) {\n itemSelectEventData = this._getEventData(target);\n selectHandler.call(this, itemSelectEventData);\n }\n var isSelectItemDefaultPrevented = itemSelectEventData && itemSelectEventData.isDefaultPrevented();\n var isSelectDefaultPrevented = this._triggerEvent({\n item: itemElement,\n type: SELECT\n });\n return isSelectItemDefaultPrevented || isSelectDefaultPrevented;\n },\n _getEventData: function (target) {\n var eventData = {\n sender: this,\n target: target,\n _defaultPrevented: false,\n preventDefault: function () {\n this._defaultPrevented = true;\n },\n isDefaultPrevented: function () {\n return this._defaultPrevented;\n }\n };\n return eventData;\n },\n _documentClick: function (e) {\n if (contains(this.element[0], e.target)) {\n return;\n }\n this.clicked = false;\n },\n _focus: function (e) {\n var that = this, target = e.target, hoverItem = that._hoverItem(), active = activeElement();\n if (target != that.wrapper[0] && !$(target).is(':kendoFocusable')) {\n e.stopPropagation();\n $(target).closest('.k-content').closest('.k-menu-group').closest('.k-item').addClass(FOCUSEDSTATE);\n that.wrapper.focus();\n return;\n }\n if (active === e.currentTarget) {\n if (hoverItem.length) {\n that._moveHover([], hoverItem);\n } else if (!that._oldHoverItem) {\n that._moveHover([], that.wrapper.children().first());\n }\n }\n },\n _keydown: function (e) {\n var that = this, key = e.keyCode, hoverItem = that._oldHoverItem, target, belongsToVertical, hasChildren, isRtl = kendo.support.isRtl(that.wrapper);\n if (e.target != e.currentTarget && key != keys.ESC) {\n return;\n }\n if (!hoverItem) {\n hoverItem = that._oldHoverItem = that._hoverItem();\n }\n belongsToVertical = that._itemBelongsToVertival(hoverItem);\n hasChildren = that._itemHasChildren(hoverItem);\n if (key == keys.RIGHT) {\n target = that[isRtl ? '_itemLeft' : '_itemRight'](hoverItem, belongsToVertical, hasChildren);\n } else if (key == keys.LEFT) {\n target = that[isRtl ? '_itemRight' : '_itemLeft'](hoverItem, belongsToVertical, hasChildren);\n } else if (key == keys.DOWN) {\n target = that._itemDown(hoverItem, belongsToVertical, hasChildren);\n } else if (key == keys.UP) {\n target = that._itemUp(hoverItem, belongsToVertical, hasChildren);\n } else if (key == keys.ESC) {\n target = that._itemEsc(hoverItem, belongsToVertical);\n } else if (key == keys.ENTER || key == keys.SPACEBAR) {\n target = hoverItem.children('.k-link');\n if (target.length > 0) {\n that._click({\n target: target[0],\n preventDefault: function () {\n },\n enterKey: true\n });\n that._moveHover(hoverItem, that._findRootParent(hoverItem));\n }\n } else if (key == keys.TAB) {\n target = that._findRootParent(hoverItem);\n that._moveHover(hoverItem, target);\n that._checkActiveElement();\n return;\n }\n if (target && target[0]) {\n e.preventDefault();\n e.stopPropagation();\n }\n },\n _hoverItem: function () {\n return this.wrapper.find('.k-item.k-state-hover,.k-item.k-state-focused').filter(':visible');\n },\n _itemBelongsToVertival: function (item) {\n var menuIsVertical = this.wrapper.hasClass('k-menu-vertical');\n if (!item.length) {\n return menuIsVertical;\n }\n return item.parent().hasClass('k-menu-group') || menuIsVertical;\n },\n _itemHasChildren: function (item) {\n if (!item.length) {\n return false;\n }\n return item.children('ul.k-menu-group, div.k-animation-container').length > 0;\n },\n _moveHover: function (item, nextItem) {\n var that = this, id = that._ariaId;\n if (item.length && nextItem.length) {\n item.removeClass(FOCUSEDSTATE);\n }\n if (nextItem.length) {\n if (nextItem[0].id) {\n id = nextItem[0].id;\n }\n nextItem.addClass(FOCUSEDSTATE);\n that._oldHoverItem = nextItem;\n if (id) {\n that.element.removeAttr('aria-activedescendant');\n $('#' + id).removeAttr('id');\n nextItem.attr('id', id);\n that.element.attr('aria-activedescendant', id);\n }\n }\n },\n _findRootParent: function (item) {\n if (this._isRootItem(item)) {\n return item;\n } else {\n return item.parentsUntil(menuSelector, 'li.k-item').last();\n }\n },\n _isRootItem: function (item) {\n return item.parent().hasClass(MENU);\n },\n _itemRight: function (item, belongsToVertical, hasChildren) {\n var that = this, nextItem, parentItem;\n if (item.hasClass(DISABLEDSTATE)) {\n return;\n }\n if (!belongsToVertical) {\n nextItem = item.nextAll(nextSelector);\n if (!nextItem.length) {\n nextItem = item.prevAll(lastSelector);\n }\n } else if (hasChildren) {\n that.open(item);\n nextItem = item.find('.k-menu-group').children().first();\n } else if (that.options.orientation == 'horizontal') {\n parentItem = that._findRootParent(item);\n that.close(parentItem);\n nextItem = parentItem.nextAll(nextSelector);\n }\n if (nextItem && !nextItem.length) {\n nextItem = that.wrapper.children('.k-item').first();\n } else if (!nextItem) {\n nextItem = [];\n }\n that._moveHover(item, nextItem);\n return nextItem;\n },\n _itemLeft: function (item, belongsToVertical) {\n var that = this, nextItem;\n if (!belongsToVertical) {\n nextItem = item.prevAll(nextSelector);\n if (!nextItem.length) {\n nextItem = item.nextAll(lastSelector);\n }\n } else {\n nextItem = item.parent().closest('.k-item');\n that.close(nextItem);\n if (that._isRootItem(nextItem) && that.options.orientation == 'horizontal') {\n nextItem = nextItem.prevAll(nextSelector);\n }\n }\n if (!nextItem.length) {\n nextItem = that.wrapper.children('.k-item').last();\n }\n that._moveHover(item, nextItem);\n return nextItem;\n },\n _itemDown: function (item, belongsToVertical, hasChildren) {\n var that = this, nextItem;\n if (!belongsToVertical) {\n if (!hasChildren || item.hasClass(DISABLEDSTATE)) {\n return;\n } else {\n that.open(item);\n nextItem = item.find('.k-menu-group').children().first();\n }\n } else {\n nextItem = item.nextAll(nextSelector);\n }\n if (!nextItem.length && item.length) {\n nextItem = item.parent().children().first();\n } else if (!item.length) {\n nextItem = that.wrapper.children('.k-item').first();\n }\n that._moveHover(item, nextItem);\n return nextItem;\n },\n _itemUp: function (item, belongsToVertical) {\n var that = this, nextItem;\n if (!belongsToVertical) {\n return;\n } else {\n nextItem = item.prevAll(nextSelector);\n }\n if (!nextItem.length && item.length) {\n nextItem = item.parent().children().last();\n } else if (!item.length) {\n nextItem = that.wrapper.children('.k-item').last();\n }\n that._moveHover(item, nextItem);\n return nextItem;\n },\n _itemEsc: function (item, belongsToVertical) {\n var that = this, nextItem;\n if (!belongsToVertical) {\n return item;\n } else {\n nextItem = item.parent().closest('.k-item');\n that.close(nextItem);\n that._moveHover(item, nextItem);\n }\n return nextItem;\n },\n _triggerEvent: function (e) {\n var that = this;\n return that.trigger(e.type, {\n type: e.type,\n item: e.item\n });\n },\n _focusHandler: function (e) {\n var that = this, item = $(kendo.eventTarget(e)).closest(allItemsSelector);\n if (item.hasClass(DISABLEDSTATE)) {\n return;\n }\n setTimeout(function () {\n that._moveHover([], item);\n if (item.children('.k-content')[0]) {\n item.parent().closest('.k-item').removeClass(FOCUSEDSTATE);\n }\n }, 200);\n },\n _animations: function (options) {\n if (options && 'animation' in options && !options.animation) {\n options.animation = {\n open: { effects: {} },\n close: {\n hide: true,\n effects: {}\n }\n };\n }\n }\n });\n extend(Menu, {\n renderItem: function (options) {\n options = extend({\n menu: {},\n group: {}\n }, options);\n var empty = templates.empty, item = options.item;\n return templates.item(extend(options, {\n image: item.imageUrl ? templates.image : empty,\n sprite: item.spriteCssClass ? templates.sprite : empty,\n itemWrapper: templates.itemWrapper,\n renderContent: Menu.renderContent,\n arrow: item.items || item.content ? templates.arrow : empty,\n subGroup: Menu.renderGroup\n }, rendering));\n },\n renderGroup: function (options) {\n return templates.group(extend({\n renderItems: function (options) {\n var html = '', i = 0, items = options.items, len = items ? items.length : 0, group = extend({ length: len }, options.group);\n for (; i < len; i++) {\n html += Menu.renderItem(extend(options, {\n group: group,\n item: extend({ index: i }, items[i])\n }));\n }\n return html;\n }\n }, options, rendering));\n },\n renderContent: function (options) {\n return templates.content(extend(options, rendering));\n }\n });\n var ContextMenu = Menu.extend({\n init: function (element, options) {\n var that = this;\n Menu.fn.init.call(that, element, options);\n that._marker = kendo.guid().substring(0, 8);\n that.target = $(that.options.target);\n that._popup();\n that._wire();\n },\n options: {\n name: 'ContextMenu',\n filter: null,\n showOn: 'contextmenu',\n orientation: 'vertical',\n alignToAnchor: false,\n target: 'body'\n },\n events: [\n OPEN,\n CLOSE,\n ACTIVATE,\n DEACTIVATE,\n SELECT\n ],\n setOptions: function (options) {\n var that = this;\n Menu.fn.setOptions.call(that, options);\n that.target.off(that.showOn + NS + that._marker, that._showProxy);\n if (that.userEvents) {\n that.userEvents.destroy();\n }\n that.target = $(that.options.target);\n if (options.orientation && that.popup.wrapper[0]) {\n that.popup.element.unwrap();\n }\n that._wire();\n Menu.fn.setOptions.call(this, options);\n },\n destroy: function () {\n var that = this;\n that.target.off(that.options.showOn + NS + that._marker);\n DOCUMENT_ELEMENT.off(kendo.support.mousedown + NS + that._marker, that._closeProxy);\n if (that.userEvents) {\n that.userEvents.destroy();\n }\n Menu.fn.destroy.call(that);\n },\n open: function (x, y) {\n var that = this;\n x = $(x)[0];\n if (contains(that.element[0], $(x)[0])) {\n Menu.fn.open.call(that, x);\n } else {\n if (that._triggerEvent({\n item: that.element,\n type: OPEN\n }) === false) {\n if (that.popup.visible() && that.options.filter) {\n that.popup.close(true);\n that.popup.element.kendoStop(true);\n }\n if (y !== undefined) {\n that.popup.wrapper.hide();\n that.popup.open(x, y);\n } else {\n that.popup.options.anchor = (x ? x : that.popup.anchor) || that.target;\n that.popup.element.kendoStop(true);\n that.popup.open();\n }\n DOCUMENT_ELEMENT.off(that.popup.downEvent, that.popup._mousedownProxy);\n DOCUMENT_ELEMENT.on(kendo.support.mousedown + NS + that._marker, that._closeProxy);\n }\n }\n return that;\n },\n close: function () {\n var that = this;\n if (contains(that.element[0], $(arguments[0])[0])) {\n Menu.fn.close.call(that, arguments[0]);\n } else {\n if (that.popup.visible()) {\n if (that._triggerEvent({\n item: that.element,\n type: CLOSE\n }) === false) {\n that.popup.close();\n DOCUMENT_ELEMENT.off(kendo.support.mousedown + NS, that._closeProxy);\n that.unbind(SELECT, that._closeTimeoutProxy);\n }\n }\n }\n },\n _showHandler: function (e) {\n var ev = e, offset, that = this, options = that.options;\n if (e.event) {\n ev = e.event;\n ev.pageX = e.x.location;\n ev.pageY = e.y.location;\n }\n if (contains(that.element[0], e.relatedTarget || e.target)) {\n return;\n }\n that._eventOrigin = ev;\n ev.preventDefault();\n ev.stopImmediatePropagation();\n that.element.find('.' + FOCUSEDSTATE).removeClass(FOCUSEDSTATE);\n if (options.filter && kendo.support.matchesSelector.call(ev.currentTarget, options.filter) || !options.filter) {\n if (options.alignToAnchor) {\n that.popup.options.anchor = ev.currentTarget;\n that.open(ev.currentTarget);\n } else {\n that.popup.options.anchor = ev.currentTarget;\n if (that._targetChild) {\n offset = that.target.offset();\n that.open(ev.pageX - offset.left, ev.pageY - offset.top);\n } else {\n that.open(ev.pageX, ev.pageY);\n }\n }\n }\n },\n _closeHandler: function (e) {\n var that = this, target = $(e.relatedTarget || e.target), sameTarget = target.closest(that.target.selector)[0] == that.target[0], children = target.closest(itemSelector).children(popupSelector), containment = contains(that.element[0], target[0]);\n that._eventOrigin = e;\n var normalClick = e.which !== 3;\n if (that.popup.visible() && (normalClick && sameTarget || !sameTarget) && (that.options.closeOnClick && !children[0] && containment || !containment)) {\n if (containment) {\n this.unbind(SELECT, this._closeTimeoutProxy);\n that.bind(SELECT, that._closeTimeoutProxy);\n } else {\n that.close();\n }\n }\n },\n _wire: function () {\n var that = this, options = that.options, target = that.target;\n that._showProxy = proxy(that._showHandler, that);\n that._closeProxy = proxy(that._closeHandler, that);\n that._closeTimeoutProxy = proxy(that.close, that);\n if (target[0]) {\n if (kendo.support.mobileOS && options.showOn == 'contextmenu') {\n that.userEvents = new kendo.UserEvents(target, {\n filter: options.filter,\n allowSelection: false\n });\n target.on(options.showOn + NS + that._marker, false);\n that.userEvents.bind('hold', that._showProxy);\n } else {\n if (options.filter) {\n target.on(options.showOn + NS + that._marker, options.filter, that._showProxy);\n } else {\n target.on(options.showOn + NS + that._marker, that._showProxy);\n }\n }\n }\n },\n _triggerEvent: function (e) {\n var that = this, anchor = $(that.popup.options.anchor)[0], origin = that._eventOrigin;\n that._eventOrigin = undefined;\n return that.trigger(e.type, extend({\n type: e.type,\n item: e.item || this.element[0],\n target: anchor\n }, origin ? { event: origin } : {}));\n },\n _popup: function () {\n var that = this;\n that._triggerProxy = proxy(that._triggerEvent, that);\n that.popup = that.element.addClass('k-context-menu').kendoPopup({\n anchor: that.target || 'body',\n copyAnchorStyles: that.options.copyAnchorStyles,\n collision: that.options.popupCollision || 'fit',\n animation: that.options.animation,\n activate: that._triggerProxy,\n deactivate: that._triggerProxy,\n appendTo: that.options.appendTo\n }).data('kendoPopup');\n that._targetChild = contains(that.target[0], that.popup.element[0]);\n }\n });\n ui.plugin(Menu);\n ui.plugin(ContextMenu);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.columnmenu', [\n 'kendo.popup',\n 'kendo.filtermenu',\n 'kendo.menu'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'columnmenu',\n name: 'Column Menu',\n category: 'framework',\n depends: [\n 'popup',\n 'filtermenu',\n 'menu'\n ],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, proxy = $.proxy, extend = $.extend, grep = $.grep, map = $.map, inArray = $.inArray, ACTIVE = 'k-state-selected', ASC = 'asc', DESC = 'desc', CHANGE = 'change', INIT = 'init', SELECT = 'select', POPUP = 'kendoPopup', FILTERMENU = 'kendoFilterMenu', MENU = 'kendoMenu', NS = '.kendoColumnMenu', Widget = ui.Widget;\n function trim(text) {\n return $.trim(text).replace(/ /gi, '');\n }\n function toHash(arr, key) {\n var result = {};\n var idx, len, current;\n for (idx = 0, len = arr.length; idx < len; idx++) {\n current = arr[idx];\n result[current[key]] = current;\n }\n return result;\n }\n function leafColumns(columns) {\n var result = [];\n for (var idx = 0; idx < columns.length; idx++) {\n if (!columns[idx].columns) {\n result.push(columns[idx]);\n continue;\n }\n result = result.concat(leafColumns(columns[idx].columns));\n }\n return result;\n }\n var ColumnMenu = Widget.extend({\n init: function (element, options) {\n var that = this, link;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n that.owner = options.owner;\n that.dataSource = options.dataSource;\n that.field = element.attr(kendo.attr('field'));\n that.title = element.attr(kendo.attr('title'));\n link = element.find('.k-header-column-menu');\n if (!link[0]) {\n link = element.addClass('k-with-icon').prepend('<a class=\"k-header-column-menu\" href=\"#\" title=\"' + options.messages.settings + '\"><span class=\"k-icon k-i-more-vertical\"></span></a>').find('.k-header-column-menu');\n }\n that.link = link.attr('tabindex', -1).on('click' + NS, proxy(that._click, that));\n that.wrapper = $('<div class=\"k-column-menu\"/>');\n that._refreshHandler = proxy(that.refresh, that);\n that.dataSource.bind(CHANGE, that._refreshHandler);\n },\n _init: function () {\n var that = this;\n that.pane = that.options.pane;\n if (that.pane) {\n that._isMobile = true;\n }\n if (that._isMobile) {\n that._createMobileMenu();\n } else {\n that._createMenu();\n }\n that.owner._muteAngularRebind(function () {\n that._angularItems('compile');\n });\n that._sort();\n that._columns();\n that._filter();\n that._lockColumns();\n that.trigger(INIT, {\n field: that.field,\n container: that.wrapper\n });\n },\n events: [\n INIT,\n 'sort',\n 'filtering'\n ],\n options: {\n name: 'ColumnMenu',\n messages: {\n sortAscending: 'Sort Ascending',\n sortDescending: 'Sort Descending',\n filter: 'Filter',\n columns: 'Columns',\n done: 'Done',\n settings: 'Column Settings',\n lock: 'Lock',\n unlock: 'Unlock'\n },\n filter: '',\n columns: true,\n sortable: true,\n filterable: true,\n animations: { left: 'slide' }\n },\n _createMenu: function () {\n var that = this, options = that.options;\n that.wrapper.html(kendo.template(template)({\n uid: kendo.guid(),\n ns: kendo.ns,\n messages: options.messages,\n sortable: options.sortable,\n filterable: options.filterable,\n columns: that._ownerColumns(),\n showColumns: options.columns,\n lockedColumns: options.lockedColumns\n }));\n that.popup = that.wrapper[POPUP]({\n anchor: that.link,\n open: proxy(that._open, that),\n activate: proxy(that._activate, that),\n close: function () {\n if (that.options.closeCallback) {\n that.options.closeCallback(that.element);\n }\n }\n }).data(POPUP);\n that.menu = that.wrapper.children()[MENU]({\n orientation: 'vertical',\n closeOnClick: false\n }).data(MENU);\n },\n _createMobileMenu: function () {\n var that = this, options = that.options;\n var html = kendo.template(mobileTemplate)({\n ns: kendo.ns,\n field: that.field,\n title: that.title || that.field,\n messages: options.messages,\n sortable: options.sortable,\n filterable: options.filterable,\n columns: that._ownerColumns(),\n showColumns: options.columns,\n lockedColumns: options.lockedColumns\n });\n that.view = that.pane.append(html);\n that.wrapper = that.view.element.find('.k-column-menu');\n that.menu = new MobileMenu(that.wrapper.children(), { pane: that.pane });\n that.view.element.on('click', '.k-done', function (e) {\n that.close();\n e.preventDefault();\n });\n if (that.options.lockedColumns) {\n that.view.bind('show', function () {\n that._updateLockedColumns();\n });\n }\n },\n _angularItems: function (action) {\n var that = this;\n that.angular(action, function () {\n var items = that.wrapper.find('.k-columns-item input[' + kendo.attr('field') + ']').map(function () {\n return $(this).closest('li');\n });\n var data = map(that._ownerColumns(), function (col) {\n return { column: col._originalObject };\n });\n return {\n elements: items,\n data: data\n };\n });\n },\n destroy: function () {\n var that = this;\n that._angularItems('cleanup');\n Widget.fn.destroy.call(that);\n if (that.filterMenu) {\n that.filterMenu.destroy();\n }\n if (that._refreshHandler) {\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n }\n if (that.options.columns && that.owner) {\n if (that._updateColumnsMenuHandler) {\n that.owner.unbind('columnShow', that._updateColumnsMenuHandler);\n that.owner.unbind('columnHide', that._updateColumnsMenuHandler);\n }\n if (that._updateColumnsLockedStateHandler) {\n that.owner.unbind('columnLock', that._updateColumnsLockedStateHandler);\n that.owner.unbind('columnUnlock', that._updateColumnsLockedStateHandler);\n }\n }\n if (that.menu) {\n that.menu.element.off(NS);\n that.menu.destroy();\n }\n that.wrapper.off(NS);\n if (that.popup) {\n that.popup.destroy();\n }\n if (that.view) {\n that.view.purge();\n }\n that.link.off(NS);\n that.owner = null;\n that.wrapper = null;\n that.element = null;\n },\n close: function () {\n this.menu.close();\n if (this.popup) {\n this.popup.close();\n this.popup.element.off('keydown' + NS);\n }\n },\n _click: function (e) {\n e.preventDefault();\n e.stopPropagation();\n var options = this.options;\n if (options.filter && this.element.is(!options.filter)) {\n return;\n }\n if (!this.popup && !this.pane) {\n this._init();\n }\n if (this._isMobile) {\n this.pane.navigate(this.view, this.options.animations.left);\n } else {\n this.popup.toggle();\n }\n },\n _open: function () {\n var that = this;\n $('.k-column-menu').not(that.wrapper).each(function () {\n $(this).data(POPUP).close();\n });\n that.popup.element.on('keydown' + NS, function (e) {\n if (e.keyCode == kendo.keys.ESC) {\n that.close();\n }\n });\n if (that.options.lockedColumns) {\n that._updateLockedColumns();\n }\n },\n _activate: function () {\n this.menu.element.focus();\n },\n _ownerColumns: function () {\n var columns = leafColumns(this.owner.columns), menuColumns = grep(columns, function (col) {\n var result = true, title = trim(col.title || '');\n if (col.menu === false || !col.field && !title.length) {\n result = false;\n }\n return result;\n });\n return map(menuColumns, function (col) {\n return {\n originalField: col.field,\n field: col.field || col.title,\n title: col.title || col.field,\n hidden: col.hidden,\n index: inArray(col, columns),\n locked: !!col.locked,\n _originalObject: col\n };\n });\n },\n _sort: function () {\n var that = this;\n if (that.options.sortable) {\n that.refresh();\n that.menu.bind(SELECT, function (e) {\n var item = $(e.item), dir;\n if (item.hasClass('k-sort-asc')) {\n dir = ASC;\n } else if (item.hasClass('k-sort-desc')) {\n dir = DESC;\n }\n if (!dir) {\n return;\n }\n item.parent().find('.k-sort-' + (dir == ASC ? DESC : ASC)).removeClass(ACTIVE);\n that._sortDataSource(item, dir);\n that.close();\n });\n }\n },\n _sortDataSource: function (item, dir) {\n var that = this, sortable = that.options.sortable, compare = sortable.compare === null ? undefined : sortable.compare, dataSource = that.dataSource, idx, length, sort = dataSource.sort() || [];\n var removeClass = item.hasClass(ACTIVE) && sortable && sortable.allowUnsort !== false;\n dir = !removeClass ? dir : undefined;\n if (that.trigger('sort', {\n sort: {\n field: that.field,\n dir: dir,\n compare: compare\n }\n })) {\n return;\n }\n if (removeClass) {\n item.removeClass(ACTIVE);\n } else {\n item.addClass(ACTIVE);\n }\n if (sortable.mode === 'multiple') {\n for (idx = 0, length = sort.length; idx < length; idx++) {\n if (sort[idx].field === that.field) {\n sort.splice(idx, 1);\n break;\n }\n }\n sort.push({\n field: that.field,\n dir: dir,\n compare: compare\n });\n } else {\n sort = [{\n field: that.field,\n dir: dir,\n compare: compare\n }];\n }\n dataSource.sort(sort);\n },\n _columns: function () {\n var that = this;\n if (that.options.columns) {\n that._updateColumnsMenu();\n that._updateColumnsMenuHandler = proxy(that._updateColumnsMenu, that);\n that.owner.bind([\n 'columnHide',\n 'columnShow'\n ], that._updateColumnsMenuHandler);\n that._updateColumnsLockedStateHandler = proxy(that._updateColumnsLockedState, that);\n that.owner.bind([\n 'columnUnlock',\n 'columnLock'\n ], that._updateColumnsLockedStateHandler);\n that.menu.bind(SELECT, function (e) {\n var item = $(e.item), input, column, columns = leafColumns(that.owner.columns), field;\n if (that._isMobile) {\n e.preventDefault();\n }\n if (!item.parent().closest('li.k-columns-item')[0]) {\n return;\n }\n input = item.find(':checkbox');\n if (input.attr('disabled')) {\n return;\n }\n field = input.attr(kendo.attr('field'));\n column = grep(columns, function (column) {\n return column.field == field || column.title == field;\n })[0];\n if (column.hidden === true) {\n that.owner.showColumn(column);\n } else {\n that.owner.hideColumn(column);\n }\n });\n }\n },\n _updateColumnsMenu: function () {\n var idx, length, current, checked, locked;\n var fieldAttr = kendo.attr('field'), lockedAttr = kendo.attr('locked'), visible = grep(this._ownerColumns(), function (field) {\n return !field.hidden;\n }), visibleDataFields = grep(visible, function (field) {\n return field.originalField;\n }), lockedCount = grep(visibleDataFields, function (col) {\n return col.locked === true;\n }).length, nonLockedCount = grep(visibleDataFields, function (col) {\n return col.locked !== true;\n }).length;\n visible = map(visible, function (col) {\n return col.field;\n });\n this.wrapper.find('[role=\\'menuitemcheckbox\\']').attr('aria-checked', false);\n var checkboxes = this.wrapper.find('.k-columns-item input[' + fieldAttr + ']').prop('disabled', false).prop('checked', false);\n for (idx = 0, length = checkboxes.length; idx < length; idx++) {\n current = checkboxes.eq(idx);\n locked = current.attr(lockedAttr) === 'true';\n checked = false;\n if (inArray(current.attr(fieldAttr), visible) > -1) {\n checked = true;\n current.prop('checked', checked);\n }\n current.closest('[role=\\'menuitemcheckbox\\']').attr('aria-checked', checked);\n if (checked) {\n if (lockedCount == 1 && locked) {\n current.prop('disabled', true);\n }\n if (nonLockedCount == 1 && !locked) {\n current.prop('disabled', true);\n }\n }\n }\n },\n _updateColumnsLockedState: function () {\n var idx, length, current, column;\n var fieldAttr = kendo.attr('field');\n var lockedAttr = kendo.attr('locked');\n var columns = toHash(this._ownerColumns(), 'field');\n var checkboxes = this.wrapper.find('.k-columns-item input[type=checkbox]');\n for (idx = 0, length = checkboxes.length; idx < length; idx++) {\n current = checkboxes.eq(idx);\n column = columns[current.attr(fieldAttr)];\n if (column) {\n current.attr(lockedAttr, column.locked);\n }\n }\n this._updateColumnsMenu();\n },\n _filter: function () {\n var that = this, widget = FILTERMENU, options = that.options;\n if (options.filterable !== false) {\n if (options.filterable.multi) {\n widget = 'kendoFilterMultiCheck';\n if (options.filterable.dataSource) {\n options.filterable.checkSource = options.filterable.dataSource;\n delete options.filterable.dataSource;\n }\n }\n that.filterMenu = that.wrapper.find('.k-filterable')[widget](extend(true, {}, {\n appendToElement: true,\n dataSource: options.dataSource,\n values: options.values,\n field: that.field,\n title: that.title,\n change: function (e) {\n if (that.trigger('filtering', {\n filter: e.filter,\n field: e.field\n })) {\n e.preventDefault();\n }\n }\n }, options.filterable)).data(widget);\n if (that._isMobile) {\n that.menu.bind(SELECT, function (e) {\n var item = $(e.item);\n if (item.hasClass('k-filter-item')) {\n that.pane.navigate(that.filterMenu.view, that.options.animations.left);\n }\n });\n }\n }\n },\n _lockColumns: function () {\n var that = this;\n that.menu.bind(SELECT, function (e) {\n var item = $(e.item);\n if (item.hasClass('k-lock')) {\n that.owner.lockColumn(that.field);\n that.close();\n } else if (item.hasClass('k-unlock')) {\n that.owner.unlockColumn(that.field);\n that.close();\n }\n });\n },\n _updateLockedColumns: function () {\n var field = this.field;\n var columns = this.owner.columns;\n var column = grep(columns, function (column) {\n return column.field == field || column.title == field;\n })[0];\n if (!column) {\n return;\n }\n var locked = column.locked === true;\n var length = grep(columns, function (column) {\n return !column.hidden && (column.locked && locked || !column.locked && !locked);\n }).length;\n var lockItem = this.wrapper.find('.k-lock').removeClass('k-state-disabled');\n var unlockItem = this.wrapper.find('.k-unlock').removeClass('k-state-disabled');\n if (locked || length == 1) {\n lockItem.addClass('k-state-disabled');\n }\n if (!locked || length == 1) {\n unlockItem.addClass('k-state-disabled');\n }\n this._updateColumnsLockedState();\n },\n refresh: function () {\n var that = this, sort = that.options.dataSource.sort() || [], descriptor, field = that.field, idx, length;\n that.wrapper.find('.k-sort-asc, .k-sort-desc').removeClass(ACTIVE);\n for (idx = 0, length = sort.length; idx < length; idx++) {\n descriptor = sort[idx];\n if (field == descriptor.field) {\n that.wrapper.find('.k-sort-' + descriptor.dir).addClass(ACTIVE);\n }\n }\n that.link[that._filterExist(that.dataSource.filter()) ? 'addClass' : 'removeClass']('k-state-active');\n },\n _filterExist: function (filters) {\n var found = false;\n var filter;\n if (!filters) {\n return;\n }\n filters = filters.filters;\n for (var idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n if (filter.field == this.field) {\n found = true;\n } else if (filter.filters) {\n found = found || this._filterExist(filter);\n }\n }\n return found;\n }\n });\n var template = '<ul id=\"#=uid#\">' + '#if(sortable){#' + '<li class=\"k-item k-sort-asc\"><span class=\"k-link\"><span class=\"k-icon k-i-sort-asc-sm\"></span>${messages.sortAscending}</span></li>' + '<li class=\"k-item k-sort-desc\"><span class=\"k-link\"><span class=\"k-icon k-i-sort-desc-sm\"></span>${messages.sortDescending}</span></li>' + '#if(showColumns || filterable){#' + '<li class=\"k-separator\" role=\"presentation\"></li>' + '#}#' + '#}#' + '#if(showColumns){#' + '<li class=\"k-item k-columns-item\" aria-haspopup=\"true\"><span class=\"k-link\"><span class=\"k-icon k-i-columns\"></span>${messages.columns}</span><ul>' + '#for (var idx = 0; idx < columns.length; idx++) {#' + '<li role=\"menuitemcheckbox\" aria-checked=\"false\"><input type=\"checkbox\" data-#=ns#field=\"#=columns[idx].field.replace(/\"/g,\"&\\\\#34;\")#\" data-#=ns#index=\"#=columns[idx].index#\" data-#=ns#locked=\"#=columns[idx].locked#\"/>#=columns[idx].title#</li>' + '#}#' + '</ul></li>' + '#if(filterable || lockedColumns){#' + '<li class=\"k-separator\" role=\"presentation\"></li>' + '#}#' + '#}#' + '#if(filterable){#' + '<li class=\"k-item k-filter-item\" aria-haspopup=\"true\"><span class=\"k-link\"><span class=\"k-icon k-i-filter\"></span>${messages.filter}</span><ul>' + '<li><div class=\"k-filterable\"></div></li>' + '</ul></li>' + '#if(lockedColumns){#' + '<li class=\"k-separator\" role=\"presentation\"></li>' + '#}#' + '#}#' + '#if(lockedColumns){#' + '<li class=\"k-item k-lock\"><span class=\"k-link\"><span class=\"k-icon k-i-lock\"></span>${messages.lock}</span></li>' + '<li class=\"k-item k-unlock\"><span class=\"k-link\"><span class=\"k-icon k-i-unlock\"></span>${messages.unlock}</span></li>' + '#}#' + '</ul>';\n var mobileTemplate = '<div data-#=ns#role=\"view\" data-#=ns#init-widgets=\"false\" data-#=ns#use-native-scrolling=\"true\" class=\"k-grid-column-menu\">' + '<div data-#=ns#role=\"header\" class=\"k-header\">' + '${messages.settings}' + '<button class=\"k-button k-done\">#=messages.done#</button>' + '</div>' + '<div class=\"k-column-menu k-mobile-list\"><ul><li>' + '<span class=\"k-link\">${title}</span><ul>' + '#if(sortable){#' + '<li class=\"k-item k-sort-asc\"><span class=\"k-link\"><span class=\"k-icon k-i-sort-asc-sm\"></span>${messages.sortAscending}</span></li>' + '<li class=\"k-item k-sort-desc\"><span class=\"k-link\"><span class=\"k-icon k-i-sort-desc-sm\"></span>${messages.sortDescending}</span></li>' + '#}#' + '#if(lockedColumns){#' + '<li class=\"k-item k-lock\"><span class=\"k-link\"><span class=\"k-icon k-i-lock\"></span>${messages.lock}</span></li>' + '<li class=\"k-item k-unlock\"><span class=\"k-link\"><span class=\"k-icon k-i-unlock\"></span>${messages.unlock}</span></li>' + '#}#' + '#if(filterable){#' + '<li class=\"k-item k-filter-item\">' + '<span class=\"k-link k-filterable\">' + '<span class=\"k-icon k-i-filter\"></span>' + '${messages.filter}</span>' + '</li>' + '#}#' + '</ul></li>' + '#if(showColumns){#' + '<li class=\"k-columns-item\"><span class=\"k-link\">${messages.columns}</span><ul>' + '#for (var idx = 0; idx < columns.length; idx++) {#' + '<li class=\"k-item\"><label class=\"k-label\"><input type=\"checkbox\" class=\"k-check\" data-#=ns#field=\"#=columns[idx].field.replace(/\"/g,\"&\\\\#34;\")#\" data-#=ns#index=\"#=columns[idx].index#\" data-#=ns#locked=\"#=columns[idx].locked#\"/>#=columns[idx].title#</label></li>' + '#}#' + '</ul></li>' + '#}#' + '</ul></div>' + '</div>';\n var MobileMenu = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this.element.on('click' + NS, 'li.k-item:not(.k-separator):not(.k-state-disabled)', '_click');\n },\n events: [SELECT],\n _click: function (e) {\n if (!$(e.target).is('[type=checkbox]')) {\n e.preventDefault();\n }\n this.trigger(SELECT, { item: e.currentTarget });\n },\n close: function () {\n this.options.pane.navigate('');\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.off(NS);\n }\n });\n ui.plugin(ColumnMenu);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.columnsorter', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'columnsorter',\n name: 'Column Sorter',\n category: 'framework',\n depends: ['core'],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo;\n var ui = kendo.ui;\n var Widget = ui.Widget;\n var DIR = 'dir';\n var ASC = 'asc';\n var SINGLE = 'single';\n var FIELD = 'field';\n var DESC = 'desc';\n var sorterNS = '.kendoColumnSorter';\n var TLINK = '.k-link';\n var ARIASORT = 'aria-sort';\n var proxy = $.proxy;\n var ColumnSorter = Widget.extend({\n init: function (element, options) {\n var that = this, link;\n Widget.fn.init.call(that, element, options);\n that._refreshHandler = proxy(that.refresh, that);\n that.dataSource = that.options.dataSource.bind('change', that._refreshHandler);\n that.directions = that.options.initialDirection === ASC ? [\n ASC,\n DESC\n ] : [\n DESC,\n ASC\n ];\n link = that.element.find(TLINK);\n if (!link[0]) {\n link = that.element.wrapInner('<a class=\"k-link\" href=\"#\"/>').find(TLINK);\n }\n that.link = link;\n that.element.on('click' + sorterNS, proxy(that._click, that));\n },\n options: {\n name: 'ColumnSorter',\n mode: SINGLE,\n allowUnsort: true,\n compare: null,\n filter: '',\n initialDirection: ASC\n },\n events: ['change'],\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.element.off(sorterNS);\n that.dataSource.unbind('change', that._refreshHandler);\n that._refreshHandler = that.element = that.link = that.dataSource = null;\n },\n refresh: function () {\n var that = this, sort = that.dataSource.sort() || [], idx, length, descriptor, dir, element = that.element, field = element.attr(kendo.attr(FIELD));\n element.removeAttr(kendo.attr(DIR));\n element.removeAttr(ARIASORT);\n for (idx = 0, length = sort.length; idx < length; idx++) {\n descriptor = sort[idx];\n if (field == descriptor.field) {\n element.attr(kendo.attr(DIR), descriptor.dir);\n }\n }\n dir = element.attr(kendo.attr(DIR));\n element.find('.k-i-sort-asc-sm,.k-i-sort-desc-sm').remove();\n if (dir === ASC) {\n $('<span class=\"k-icon k-i-sort-asc-sm\" />').appendTo(that.link);\n element.attr(ARIASORT, 'ascending');\n } else if (dir === DESC) {\n $('<span class=\"k-icon k-i-sort-desc-sm\" />').appendTo(that.link);\n element.attr(ARIASORT, 'descending');\n }\n },\n _toggleSortDirection: function (dir) {\n var directions = this.directions;\n if (dir === directions[directions.length - 1] && this.options.allowUnsort) {\n return undefined;\n }\n return directions[0] === dir ? directions[1] : directions[0];\n },\n _click: function (e) {\n var that = this, element = that.element, field = element.attr(kendo.attr(FIELD)), dir = element.attr(kendo.attr(DIR)), options = that.options, compare = that.options.compare === null ? undefined : that.options.compare, sort = that.dataSource.sort() || [], idx, length;\n e.preventDefault();\n if (options.filter && !element.is(options.filter)) {\n return;\n }\n dir = this._toggleSortDirection(dir);\n if (this.trigger('change', {\n sort: {\n field: field,\n dir: dir,\n compare: compare\n }\n })) {\n return;\n }\n if (options.mode === SINGLE) {\n sort = [{\n field: field,\n dir: dir,\n compare: compare\n }];\n } else if (options.mode === 'multiple') {\n for (idx = 0, length = sort.length; idx < length; idx++) {\n if (sort[idx].field === field) {\n sort.splice(idx, 1);\n break;\n }\n }\n sort.push({\n field: field,\n dir: dir,\n compare: compare\n });\n }\n this.dataSource.sort(sort);\n }\n });\n ui.plugin(ColumnSorter);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.editable', [\n 'kendo.datepicker',\n 'kendo.numerictextbox',\n 'kendo.validator',\n 'kendo.binder'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'editable',\n name: 'Editable',\n category: 'framework',\n depends: [\n 'datepicker',\n 'numerictextbox',\n 'validator',\n 'binder'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, extend = $.extend, oldIE = kendo.support.browser.msie && kendo.support.browser.version < 9, isFunction = kendo.isFunction, isPlainObject = $.isPlainObject, inArray = $.inArray, nameSpecialCharRegExp = /(\"|\\%|'|\\[|\\]|\\$|\\.|\\,|\\:|\\;|\\+|\\*|\\&|\\!|\\#|\\(|\\)|<|>|\\=|\\?|\\@|\\^|\\{|\\}|\\~|\\/|\\||`)/g, ERRORTEMPLATE = '<div class=\"k-widget k-tooltip k-tooltip-validation\" style=\"margin:0.5em\"><span class=\"k-icon k-i-warning\"> </span>' + '#=message#<div class=\"k-callout k-callout-n\"></div></div>', CHANGE = 'change';\n var specialRules = [\n 'url',\n 'email',\n 'number',\n 'date',\n 'boolean'\n ];\n function fieldType(field) {\n field = field != null ? field : '';\n return field.type || $.type(field) || 'string';\n }\n function convertToValueBinding(container) {\n container.find(':input:not(:button, [' + kendo.attr('role') + '=upload], [' + kendo.attr('skip') + '], [type=file]), select').each(function () {\n var bindAttr = kendo.attr('bind'), binding = this.getAttribute(bindAttr) || '', bindingName = this.type === 'checkbox' || this.type === 'radio' ? 'checked:' : 'value:', fieldName = this.name;\n if (binding.indexOf(bindingName) === -1 && fieldName) {\n binding += (binding.length ? ',' : '') + bindingName + fieldName;\n $(this).attr(bindAttr, binding);\n }\n });\n }\n function createAttributes(options) {\n var field = (options.model.fields || options.model)[options.field], type = fieldType(field), validation = field ? field.validation : {}, ruleName, DATATYPE = kendo.attr('type'), BINDING = kendo.attr('bind'), rule, attr = { name: options.field };\n for (ruleName in validation) {\n rule = validation[ruleName];\n if (inArray(ruleName, specialRules) >= 0) {\n attr[DATATYPE] = ruleName;\n } else if (!isFunction(rule)) {\n attr[ruleName] = isPlainObject(rule) ? rule.value || ruleName : rule;\n }\n attr[kendo.attr(ruleName + '-msg')] = rule.message;\n }\n if (inArray(type, specialRules) >= 0) {\n attr[DATATYPE] = type;\n }\n attr[BINDING] = (type === 'boolean' ? 'checked:' : 'value:') + options.field;\n return attr;\n }\n function convertItems(items) {\n var idx, length, item, value, text, result;\n if (items && items.length) {\n result = [];\n for (idx = 0, length = items.length; idx < length; idx++) {\n item = items[idx];\n text = item.text || item.value || item;\n value = item.value == null ? item.text || item : item.value;\n result[idx] = {\n text: text,\n value: value\n };\n }\n }\n return result;\n }\n var editors = {\n 'number': function (container, options) {\n var attr = createAttributes(options);\n $('<input type=\"text\"/>').attr(attr).appendTo(container).kendoNumericTextBox({ format: options.format });\n $('<span ' + kendo.attr('for') + '=\"' + options.field + '\" class=\"k-invalid-msg\"/>').hide().appendTo(container);\n },\n 'date': function (container, options) {\n var attr = createAttributes(options), format = options.format;\n if (format) {\n format = kendo._extractFormat(format);\n }\n attr[kendo.attr('format')] = format;\n $('<input type=\"text\"/>').attr(attr).appendTo(container).kendoDatePicker({ format: options.format });\n $('<span ' + kendo.attr('for') + '=\"' + options.field + '\" class=\"k-invalid-msg\"/>').hide().appendTo(container);\n },\n 'string': function (container, options) {\n var attr = createAttributes(options);\n $('<input type=\"text\" class=\"k-input k-textbox\"/>').attr(attr).appendTo(container);\n },\n 'boolean': function (container, options) {\n var attr = createAttributes(options);\n $('<input type=\"checkbox\" />').attr(attr).appendTo(container);\n },\n 'values': function (container, options) {\n var attr = createAttributes(options);\n var items = kendo.stringify(convertItems(options.values));\n $('<select ' + kendo.attr('text-field') + '=\"text\"' + kendo.attr('value-field') + '=\"value\"' + kendo.attr('source') + '=\\'' + (items ? items.replace(/\\'/g, ''') : items) + '\\'' + kendo.attr('role') + '=\"dropdownlist\"/>').attr(attr).appendTo(container);\n $('<span ' + kendo.attr('for') + '=\"' + options.field + '\" class=\"k-invalid-msg\"/>').hide().appendTo(container);\n }\n };\n function addValidationRules(modelField, rules) {\n var validation = modelField ? modelField.validation || {} : {}, rule, descriptor;\n for (rule in validation) {\n descriptor = validation[rule];\n if (isPlainObject(descriptor) && descriptor.value) {\n descriptor = descriptor.value;\n }\n if (isFunction(descriptor)) {\n rules[rule] = descriptor;\n }\n }\n }\n var Editable = Widget.extend({\n init: function (element, options) {\n var that = this;\n if (options.target) {\n options.$angular = options.target.options.$angular;\n }\n Widget.fn.init.call(that, element, options);\n that._validateProxy = $.proxy(that._validate, that);\n that.refresh();\n },\n events: [CHANGE],\n options: {\n name: 'Editable',\n editors: editors,\n clearContainer: true,\n errorTemplate: ERRORTEMPLATE\n },\n editor: function (field, modelField) {\n var that = this, editors = that.options.editors, isObject = isPlainObject(field), fieldName = isObject ? field.field : field, model = that.options.model || {}, isValuesEditor = isObject && field.values, type = isValuesEditor ? 'values' : fieldType(modelField), isCustomEditor = isObject && field.editor, editor = isCustomEditor ? field.editor : editors[type], container = that.element.find('[' + kendo.attr('container-for') + '=' + fieldName.replace(nameSpecialCharRegExp, '\\\\$1') + ']');\n editor = editor ? editor : editors.string;\n if (isCustomEditor && typeof field.editor === 'string') {\n editor = function (container) {\n container.append(field.editor);\n };\n }\n container = container.length ? container : that.element;\n editor(container, extend(true, {}, isObject ? field : { field: fieldName }, { model: model }));\n },\n _validate: function (e) {\n var that = this, input, value = e.value, preventChangeTrigger = that._validationEventInProgress, values = {}, bindAttribute = kendo.attr('bind'), fieldName = e.field.replace(nameSpecialCharRegExp, '\\\\$1'), bindingRegex = new RegExp('(value|checked)\\\\s*:\\\\s*' + fieldName + '\\\\s*(,|$)');\n values[e.field] = e.value;\n input = $(':input[' + bindAttribute + '*=\"' + fieldName + '\"]', that.element).filter('[' + kendo.attr('validate') + '!=\\'false\\']').filter(function () {\n return bindingRegex.test($(this).attr(bindAttribute));\n });\n if (input.length > 1) {\n input = input.filter(function () {\n var element = $(this);\n return !element.is(':radio') || element.val() == value;\n });\n }\n try {\n that._validationEventInProgress = true;\n if (!that.validatable.validateInput(input) || !preventChangeTrigger && that.trigger(CHANGE, { values: values })) {\n e.preventDefault();\n }\n } finally {\n that._validationEventInProgress = false;\n }\n },\n end: function () {\n return this.validatable.validate();\n },\n destroy: function () {\n var that = this;\n that.angular('cleanup', function () {\n return { elements: that.element };\n });\n Widget.fn.destroy.call(that);\n that.options.model.unbind('set', that._validateProxy);\n kendo.unbind(that.element);\n if (that.validatable) {\n that.validatable.destroy();\n }\n kendo.destroy(that.element);\n that.element.removeData('kendoValidator');\n if (that.element.is('[' + kendo.attr('role') + '=editable]')) {\n that.element.removeAttr(kendo.attr('role'));\n }\n },\n refresh: function () {\n var that = this, idx, length, fields = that.options.fields || [], container = that.options.clearContainer ? that.element.empty() : that.element, model = that.options.model || {}, rules = {}, field, isObject, fieldName, modelField, modelFields;\n if (!$.isArray(fields)) {\n fields = [fields];\n }\n for (idx = 0, length = fields.length; idx < length; idx++) {\n field = fields[idx];\n isObject = isPlainObject(field);\n fieldName = isObject ? field.field : field;\n modelField = (model.fields || model)[fieldName];\n addValidationRules(modelField, rules);\n that.editor(field, modelField);\n }\n if (that.options.target) {\n that.angular('compile', function () {\n return {\n elements: container,\n data: container.map(function () {\n return { dataItem: model };\n })\n };\n });\n }\n if (!length) {\n modelFields = model.fields || model;\n for (fieldName in modelFields) {\n addValidationRules(modelFields[fieldName], rules);\n }\n }\n convertToValueBinding(container);\n if (that.validatable) {\n that.validatable.destroy();\n }\n kendo.bind(container, that.options.model);\n that.options.model.unbind('set', that._validateProxy);\n that.options.model.bind('set', that._validateProxy);\n that.validatable = new kendo.ui.Validator(container, {\n validateOnBlur: false,\n errorTemplate: that.options.errorTemplate || undefined,\n rules: rules\n });\n var focusable = container.find(':kendoFocusable').eq(0).focus();\n if (oldIE) {\n focusable.focus();\n }\n }\n });\n ui.plugin(Editable);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.window', ['kendo.draganddrop'], f);\n}(function () {\n var __meta__ = {\n id: 'window',\n name: 'Window',\n category: 'web',\n description: 'The Window widget displays content in a modal or non-modal HTML window.',\n depends: ['draganddrop'],\n features: [{\n id: 'window-fx',\n name: 'Animation',\n description: 'Support for animation',\n depends: ['fx']\n }]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, Draggable = kendo.ui.Draggable, isPlainObject = $.isPlainObject, activeElement = kendo._activeElement, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, proxy = $.proxy, extend = $.extend, each = $.each, template = kendo.template, BODY = 'body', templates, NS = '.kendoWindow', KWINDOW = '.k-window', KWINDOWTITLE = '.k-window-title', KWINDOWTITLEBAR = KWINDOWTITLE + 'bar', KWINDOWCONTENT = '.k-window-content', KWINDOWRESIZEHANDLES = '.k-resize-handle', KOVERLAY = '.k-overlay', KCONTENTFRAME = 'k-content-frame', LOADING = 'k-i-loading', KHOVERSTATE = 'k-state-hover', KFOCUSEDSTATE = 'k-state-focused', MAXIMIZEDSTATE = 'k-window-maximized', VISIBLE = ':visible', HIDDEN = 'hidden', CURSOR = 'cursor', OPEN = 'open', ACTIVATE = 'activate', DEACTIVATE = 'deactivate', CLOSE = 'close', REFRESH = 'refresh', MINIMIZE = 'minimize', MAXIMIZE = 'maximize', RESIZESTART = 'resizeStart', RESIZE = 'resize', RESIZEEND = 'resizeEnd', DRAGSTART = 'dragstart', DRAGEND = 'dragend', ERROR = 'error', OVERFLOW = 'overflow', ZINDEX = 'zIndex', MINIMIZE_MAXIMIZE = '.k-window-actions .k-i-window-minimize,.k-window-actions .k-i-window-maximize', KPIN = '.k-i-pin', KUNPIN = '.k-i-unpin', PIN_UNPIN = KPIN + ',' + KUNPIN, TITLEBAR_BUTTONS = '.k-window-titlebar .k-window-action', REFRESHICON = '.k-window-titlebar .k-i-refresh', isLocalUrl = kendo.isLocalUrl;\n function defined(x) {\n return typeof x != 'undefined';\n }\n function constrain(value, low, high) {\n return Math.max(Math.min(parseInt(value, 10), high === Infinity ? high : parseInt(high, 10)), parseInt(low, 10));\n }\n function executableScript() {\n return !this.type || this.type.toLowerCase().indexOf('script') >= 0;\n }\n var Window = Widget.extend({\n init: function (element, options) {\n var that = this, wrapper, offset = {}, visibility, display, position, isVisible = false, content, windowContent, suppressActions = options && options.actions && !options.actions.length, id;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n position = options.position;\n element = that.element;\n content = options.content;\n if (suppressActions) {\n options.actions = [];\n }\n that.appendTo = $(options.appendTo);\n if (content && !isPlainObject(content)) {\n content = options.content = { url: content };\n }\n element.find('script').filter(executableScript).remove();\n if (!element.parent().is(that.appendTo) && (position.top === undefined || position.left === undefined)) {\n if (element.is(VISIBLE)) {\n offset = element.offset();\n isVisible = true;\n } else {\n visibility = element.css('visibility');\n display = element.css('display');\n element.css({\n visibility: HIDDEN,\n display: ''\n });\n offset = element.offset();\n element.css({\n visibility: visibility,\n display: display\n });\n }\n if (position.top === undefined) {\n position.top = offset.top;\n }\n if (position.left === undefined) {\n position.left = offset.left;\n }\n }\n if (!defined(options.visible) || options.visible === null) {\n options.visible = element.is(VISIBLE);\n }\n wrapper = that.wrapper = element.closest(KWINDOW);\n if (!element.is('.k-content') || !wrapper[0]) {\n element.addClass('k-window-content k-content');\n that._createWindow(element, options);\n wrapper = that.wrapper = element.closest(KWINDOW);\n that._dimensions();\n }\n that._position();\n if (options.pinned) {\n that.pin(true);\n }\n if (content) {\n that.refresh(content);\n }\n if (options.visible) {\n that.toFront();\n }\n windowContent = wrapper.children(KWINDOWCONTENT);\n that._tabindex(windowContent);\n if (options.visible && options.modal) {\n that._overlay(wrapper.is(VISIBLE)).css({ opacity: 0.5 });\n }\n wrapper.on('mouseenter' + NS, TITLEBAR_BUTTONS, proxy(that._buttonEnter, that)).on('mouseleave' + NS, TITLEBAR_BUTTONS, proxy(that._buttonLeave, that)).on('click' + NS, '> ' + TITLEBAR_BUTTONS, proxy(that._windowActionHandler, that));\n windowContent.on('keydown' + NS, proxy(that._keydown, that)).on('focus' + NS, proxy(that._focus, that)).on('blur' + NS, proxy(that._blur, that));\n this._resizable();\n this._draggable();\n id = element.attr('id');\n if (id) {\n id = id + '_wnd_title';\n wrapper.children(KWINDOWTITLEBAR).children(KWINDOWTITLE).attr('id', id);\n windowContent.attr({\n 'role': 'dialog',\n 'aria-labelledby': id\n });\n }\n wrapper.add(wrapper.children('.k-resize-handle,' + KWINDOWTITLEBAR)).on('mousedown' + NS, proxy(that.toFront, that));\n that.touchScroller = kendo.touchScroller(element);\n that._resizeHandler = proxy(that._onDocumentResize, that);\n that._marker = kendo.guid().substring(0, 8);\n $(window).on('resize' + NS + that._marker, that._resizeHandler);\n if (options.visible) {\n that.trigger(OPEN);\n that.trigger(ACTIVATE);\n }\n kendo.notify(that);\n },\n _buttonEnter: function (e) {\n $(e.currentTarget).addClass(KHOVERSTATE);\n },\n _buttonLeave: function (e) {\n $(e.currentTarget).removeClass(KHOVERSTATE);\n },\n _focus: function () {\n this.wrapper.addClass(KFOCUSEDSTATE);\n },\n _blur: function () {\n this.wrapper.removeClass(KFOCUSEDSTATE);\n },\n _dimensions: function () {\n var wrapper = this.wrapper;\n var options = this.options;\n var width = options.width;\n var height = options.height;\n var maxHeight = options.maxHeight;\n var dimensions = [\n 'minWidth',\n 'minHeight',\n 'maxWidth',\n 'maxHeight'\n ];\n this.title(options.title);\n for (var i = 0; i < dimensions.length; i++) {\n var value = options[dimensions[i]] || '';\n if (value != Infinity) {\n wrapper.css(dimensions[i], value);\n }\n }\n if (maxHeight != Infinity) {\n this.element.css('maxHeight', maxHeight);\n }\n if (width) {\n if (width.toString().indexOf('%') > 0) {\n wrapper.width(width);\n } else {\n wrapper.width(constrain(width, options.minWidth, options.maxWidth));\n }\n } else {\n wrapper.width('');\n }\n if (height) {\n if (height.toString().indexOf('%') > 0) {\n wrapper.height(height);\n } else {\n wrapper.height(constrain(height, options.minHeight, options.maxHeight));\n }\n } else {\n wrapper.height('');\n }\n if (!options.visible) {\n wrapper.hide();\n }\n },\n _position: function () {\n var wrapper = this.wrapper, position = this.options.position;\n if (position.top === 0) {\n position.top = position.top.toString();\n }\n if (position.left === 0) {\n position.left = position.left.toString();\n }\n wrapper.css({\n top: position.top || '',\n left: position.left || ''\n });\n },\n _animationOptions: function (id) {\n var animation = this.options.animation;\n var basicAnimation = {\n open: { effects: {} },\n close: {\n hide: true,\n effects: {}\n }\n };\n return animation && animation[id] || basicAnimation[id];\n },\n _resize: function () {\n kendo.resize(this.element.children());\n },\n _resizable: function () {\n var resizable = this.options.resizable;\n var wrapper = this.wrapper;\n if (this.resizing) {\n wrapper.off('dblclick' + NS).children(KWINDOWRESIZEHANDLES).remove();\n this.resizing.destroy();\n this.resizing = null;\n }\n if (resizable) {\n wrapper.on('dblclick' + NS, KWINDOWTITLEBAR, proxy(function (e) {\n if (!$(e.target).closest('.k-window-action').length) {\n this.toggleMaximization();\n }\n }, this));\n each('n e s w se sw ne nw'.split(' '), function (index, handler) {\n wrapper.append(templates.resizeHandle(handler));\n });\n this.resizing = new WindowResizing(this);\n }\n wrapper = null;\n },\n _draggable: function () {\n var draggable = this.options.draggable;\n if (this.dragging) {\n this.dragging.destroy();\n this.dragging = null;\n }\n if (draggable) {\n this.dragging = new WindowDragging(this, draggable.dragHandle || KWINDOWTITLEBAR);\n }\n },\n _actions: function () {\n var actions = this.options.actions;\n var titlebar = this.wrapper.children(KWINDOWTITLEBAR);\n var container = titlebar.find('.k-window-actions');\n var windowSpecificCommands = [\n 'maximize',\n 'minimize'\n ];\n actions = $.map(actions, function (action) {\n return { name: windowSpecificCommands.indexOf(action.toLowerCase()) > -1 ? 'window-' + action : action };\n });\n container.html(kendo.render(templates.action, actions));\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n var scrollable = this.options.scrollable !== false;\n this.restore();\n this._dimensions();\n this._position();\n this._resizable();\n this._draggable();\n this._actions();\n if (typeof options.modal !== 'undefined') {\n var visible = this.options.visible !== false;\n this._overlay(options.modal && visible);\n }\n this.element.css(OVERFLOW, scrollable ? '' : 'hidden');\n },\n events: [\n OPEN,\n ACTIVATE,\n DEACTIVATE,\n CLOSE,\n MINIMIZE,\n MAXIMIZE,\n REFRESH,\n RESIZESTART,\n RESIZE,\n RESIZEEND,\n DRAGSTART,\n DRAGEND,\n ERROR\n ],\n options: {\n name: 'Window',\n animation: {\n open: {\n effects: {\n zoom: { direction: 'in' },\n fade: { direction: 'in' }\n },\n duration: 350\n },\n close: {\n effects: {\n zoom: {\n direction: 'out',\n properties: { scale: 0.7 }\n },\n fade: { direction: 'out' }\n },\n duration: 350,\n hide: true\n }\n },\n title: '',\n actions: ['Close'],\n autoFocus: true,\n modal: false,\n resizable: true,\n draggable: true,\n minWidth: 90,\n minHeight: 50,\n maxWidth: Infinity,\n maxHeight: Infinity,\n pinned: false,\n scrollable: true,\n position: {},\n content: null,\n visible: null,\n height: null,\n width: null,\n appendTo: 'body',\n isMaximized: false,\n isMinimized: false\n },\n _closable: function () {\n return $.inArray('close', $.map(this.options.actions, function (x) {\n return x.toLowerCase();\n })) > -1;\n },\n _keydown: function (e) {\n var that = this, options = that.options, keys = kendo.keys, keyCode = e.keyCode, wrapper = that.wrapper, offset, handled, distance = 10, isMaximized = that.options.isMaximized, newWidth, newHeight, w, h;\n if (e.target != e.currentTarget || that._closing) {\n return;\n }\n if (keyCode == keys.ESC && that._closable()) {\n that._close(false);\n }\n if (options.draggable && !e.ctrlKey && !isMaximized) {\n offset = kendo.getOffset(wrapper);\n if (keyCode == keys.UP) {\n handled = wrapper.css('top', offset.top - distance);\n } else if (keyCode == keys.DOWN) {\n handled = wrapper.css('top', offset.top + distance);\n } else if (keyCode == keys.LEFT) {\n handled = wrapper.css('left', offset.left - distance);\n } else if (keyCode == keys.RIGHT) {\n handled = wrapper.css('left', offset.left + distance);\n }\n }\n if (options.resizable && e.ctrlKey && !isMaximized) {\n if (keyCode == keys.UP) {\n handled = true;\n newHeight = wrapper.height() - distance;\n } else if (keyCode == keys.DOWN) {\n handled = true;\n newHeight = wrapper.height() + distance;\n }\n if (keyCode == keys.LEFT) {\n handled = true;\n newWidth = wrapper.width() - distance;\n } else if (keyCode == keys.RIGHT) {\n handled = true;\n newWidth = wrapper.width() + distance;\n }\n if (handled) {\n w = constrain(newWidth, options.minWidth, options.maxWidth);\n h = constrain(newHeight, options.minHeight, options.maxHeight);\n if (!isNaN(w)) {\n wrapper.width(w);\n that.options.width = w + 'px';\n }\n if (!isNaN(h)) {\n wrapper.height(h);\n that.options.height = h + 'px';\n }\n that.resize();\n }\n }\n if (handled) {\n e.preventDefault();\n }\n },\n _overlay: function (visible) {\n var overlay = this.appendTo.children(KOVERLAY), wrapper = this.wrapper;\n if (!overlay.length) {\n overlay = $('<div class=\\'k-overlay\\' />');\n }\n overlay.insertBefore(wrapper[0]).toggle(visible).css(ZINDEX, parseInt(wrapper.css(ZINDEX), 10) - 1);\n return overlay;\n },\n _actionForIcon: function (icon) {\n var iconClass = /\\bk-i(-\\w+)+\\b/.exec(icon[0].className)[0];\n return {\n 'k-i-close': '_close',\n 'k-i-window-maximize': 'maximize',\n 'k-i-window-minimize': 'minimize',\n 'k-i-window-restore': 'restore',\n 'k-i-refresh': 'refresh',\n 'k-i-pin': 'pin',\n 'k-i-unpin': 'unpin'\n }[iconClass];\n },\n _windowActionHandler: function (e) {\n if (this._closing) {\n return;\n }\n var icon = $(e.target).closest('.k-window-action').find('.k-icon');\n var action = this._actionForIcon(icon);\n if (action) {\n e.preventDefault();\n this[action]();\n return false;\n }\n },\n _modals: function () {\n var that = this;\n var zStack = $(KWINDOW).filter(function () {\n var dom = $(this);\n var object = that._object(dom);\n var options = object && object.options;\n return options && options.modal && options.visible && options.appendTo === that.options.appendTo && dom.is(VISIBLE);\n }).sort(function (a, b) {\n return +$(a).css('zIndex') - +$(b).css('zIndex');\n });\n that = null;\n return zStack;\n },\n _object: function (element) {\n var content = element.children(KWINDOWCONTENT);\n var widget = kendo.widgetInstance(content);\n if (widget instanceof Window) {\n return widget;\n }\n return undefined;\n },\n center: function () {\n var that = this, position = that.options.position, wrapper = that.wrapper, documentWindow = $(window), scrollTop = 0, scrollLeft = 0, newTop, newLeft;\n if (that.options.isMaximized) {\n return that;\n }\n if (!that.options.pinned) {\n scrollTop = documentWindow.scrollTop();\n scrollLeft = documentWindow.scrollLeft();\n }\n newLeft = scrollLeft + Math.max(0, (documentWindow.width() - wrapper.width()) / 2);\n newTop = scrollTop + Math.max(0, (documentWindow.height() - wrapper.height() - parseInt(wrapper.css('paddingTop'), 10)) / 2);\n wrapper.css({\n left: newLeft,\n top: newTop\n });\n position.top = newTop;\n position.left = newLeft;\n return that;\n },\n title: function (text) {\n var that = this, wrapper = that.wrapper, options = that.options, titleBar = wrapper.children(KWINDOWTITLEBAR), title = titleBar.children(KWINDOWTITLE), titleBarHeight;\n if (!arguments.length) {\n return title.html();\n }\n if (text === false) {\n wrapper.addClass('k-window-titleless');\n titleBar.remove();\n } else {\n if (!titleBar.length) {\n wrapper.prepend(templates.titlebar(options));\n that._actions();\n titleBar = wrapper.children(KWINDOWTITLEBAR);\n } else {\n title.html(text);\n }\n titleBarHeight = parseInt(outerHeight(titleBar), 10);\n wrapper.css('padding-top', titleBarHeight);\n titleBar.css('margin-top', -titleBarHeight);\n }\n that.options.title = text;\n return that;\n },\n content: function (html, data) {\n var content = this.wrapper.children(KWINDOWCONTENT), scrollContainer = content.children('.km-scroll-container');\n content = scrollContainer[0] ? scrollContainer : content;\n if (!defined(html)) {\n return content.html();\n }\n this.angular('cleanup', function () {\n return { elements: content.children() };\n });\n kendo.destroy(this.element.children());\n content.empty().html(html);\n this.angular('compile', function () {\n var a = [];\n for (var i = content.length; --i >= 0;) {\n a.push({ dataItem: data });\n }\n return {\n elements: content.children(),\n data: a\n };\n });\n return this;\n },\n open: function () {\n var that = this, wrapper = that.wrapper, options = that.options, showOptions = this._animationOptions('open'), contentElement = wrapper.children(KWINDOWCONTENT), overlay, otherModalsVisible, doc = $(document);\n if (!that.trigger(OPEN)) {\n if (that._closing) {\n wrapper.kendoStop(true, true);\n }\n that._closing = false;\n that.toFront();\n if (options.autoFocus) {\n that.element.focus();\n }\n options.visible = true;\n if (options.modal) {\n otherModalsVisible = !!that._modals().length;\n overlay = that._overlay(otherModalsVisible);\n overlay.kendoStop(true, true);\n if (showOptions.duration && kendo.effects.Fade && !otherModalsVisible) {\n var overlayFx = kendo.fx(overlay).fadeIn();\n overlayFx.duration(showOptions.duration || 0);\n overlayFx.endValue(0.5);\n overlayFx.play();\n } else {\n overlay.css('opacity', 0.5);\n }\n overlay.show();\n }\n if (!wrapper.is(VISIBLE)) {\n contentElement.css(OVERFLOW, HIDDEN);\n wrapper.show().kendoStop().kendoAnimate({\n effects: showOptions.effects,\n duration: showOptions.duration,\n complete: proxy(this._activate, this)\n });\n }\n }\n if (options.isMaximized) {\n that._documentScrollTop = doc.scrollTop();\n that._documentScrollLeft = doc.scrollLeft();\n $('html, body').css(OVERFLOW, HIDDEN);\n }\n return that;\n },\n _activate: function () {\n var scrollable = this.options.scrollable !== false;\n if (this.options.autoFocus) {\n this.element.focus();\n }\n this.element.css(OVERFLOW, scrollable ? '' : 'hidden');\n kendo.resize(this.element.children());\n this.trigger(ACTIVATE);\n },\n _removeOverlay: function (suppressAnimation) {\n var modals = this._modals();\n var options = this.options;\n var hideOverlay = options.modal && !modals.length;\n var overlay = options.modal ? this._overlay(true) : $(undefined);\n var hideOptions = this._animationOptions('close');\n if (hideOverlay) {\n if (!suppressAnimation && hideOptions.duration && kendo.effects.Fade) {\n var overlayFx = kendo.fx(overlay).fadeOut();\n overlayFx.duration(hideOptions.duration || 0);\n overlayFx.startValue(0.5);\n overlayFx.play();\n } else {\n this._overlay(false).remove();\n }\n } else if (modals.length) {\n this._object(modals.last())._overlay(true);\n }\n },\n _close: function (systemTriggered) {\n var that = this, wrapper = that.wrapper, options = that.options, showOptions = this._animationOptions('open'), hideOptions = this._animationOptions('close'), doc = $(document);\n if (wrapper.is(VISIBLE) && !that.trigger(CLOSE, { userTriggered: !systemTriggered })) {\n if (that._closing) {\n return;\n }\n that._closing = true;\n options.visible = false;\n $(KWINDOW).each(function (i, element) {\n var contentElement = $(element).children(KWINDOWCONTENT);\n if (element != wrapper && contentElement.find('> .' + KCONTENTFRAME).length > 0) {\n contentElement.children(KOVERLAY).remove();\n }\n });\n this._removeOverlay();\n wrapper.kendoStop().kendoAnimate({\n effects: hideOptions.effects || showOptions.effects,\n reverse: hideOptions.reverse === true,\n duration: hideOptions.duration,\n complete: proxy(this._deactivate, this)\n });\n }\n if (that.options.isMaximized) {\n $('html, body').css(OVERFLOW, '');\n if (that._documentScrollTop && that._documentScrollTop > 0) {\n doc.scrollTop(that._documentScrollTop);\n }\n if (that._documentScrollLeft && that._documentScrollLeft > 0) {\n doc.scrollLeft(that._documentScrollLeft);\n }\n }\n },\n _deactivate: function () {\n var that = this;\n that.wrapper.hide().css('opacity', '');\n that.trigger(DEACTIVATE);\n if (that.options.modal) {\n var lastModal = that._object(that._modals().last());\n if (lastModal) {\n lastModal.toFront();\n }\n }\n },\n close: function () {\n this._close(true);\n return this;\n },\n _actionable: function (element) {\n return $(element).is(TITLEBAR_BUTTONS + ',' + TITLEBAR_BUTTONS + ' .k-icon,:input,a');\n },\n _shouldFocus: function (target) {\n var active = activeElement(), element = this.element;\n return this.options.autoFocus && !$(active).is(element) && !this._actionable(target) && (!element.find(active).length || !element.find(target).length);\n },\n toFront: function (e) {\n var that = this, wrapper = that.wrapper, currentWindow = wrapper[0], zIndex = +wrapper.css(ZINDEX), originalZIndex = zIndex, target = e && e.target || null;\n $(KWINDOW).each(function (i, element) {\n var windowObject = $(element), zIndexNew = windowObject.css(ZINDEX), contentElement = windowObject.children(KWINDOWCONTENT);\n if (!isNaN(zIndexNew)) {\n zIndex = Math.max(+zIndexNew, zIndex);\n }\n if (element != currentWindow && contentElement.find('> .' + KCONTENTFRAME).length > 0) {\n contentElement.append(templates.overlay);\n }\n });\n if (!wrapper[0].style.zIndex || originalZIndex < zIndex) {\n wrapper.css(ZINDEX, zIndex + 2);\n }\n that.element.find('> .k-overlay').remove();\n if (that._shouldFocus(target)) {\n that.element.focus();\n var scrollTop = $(window).scrollTop(), windowTop = parseInt(wrapper.position().top, 10);\n if (!that.options.pinned && windowTop > 0 && windowTop < scrollTop) {\n if (scrollTop > 0) {\n $(window).scrollTop(windowTop);\n } else {\n wrapper.css('top', scrollTop);\n }\n }\n }\n wrapper = null;\n return that;\n },\n toggleMaximization: function () {\n if (this._closing) {\n return this;\n }\n return this[this.options.isMaximized ? 'restore' : 'maximize']();\n },\n restore: function () {\n var that = this;\n var options = that.options;\n var minHeight = options.minHeight;\n var restoreOptions = that.restoreOptions;\n var doc = $(document);\n if (!options.isMaximized && !options.isMinimized) {\n return that;\n }\n if (minHeight && minHeight != Infinity) {\n that.wrapper.css('min-height', minHeight);\n }\n that.wrapper.css({\n position: options.pinned ? 'fixed' : 'absolute',\n left: restoreOptions.left,\n top: restoreOptions.top,\n width: restoreOptions.width,\n height: restoreOptions.height\n }).removeClass(MAXIMIZEDSTATE).find('.k-window-content,.k-resize-handle').show().end().find('.k-window-titlebar .k-i-window-restore').parent().remove().end().end().find(MINIMIZE_MAXIMIZE).parent().show().end().end().find(PIN_UNPIN).parent().show();\n that.options.width = restoreOptions.width;\n that.options.height = restoreOptions.height;\n $('html, body').css(OVERFLOW, '');\n if (this._documentScrollTop && this._documentScrollTop > 0) {\n doc.scrollTop(this._documentScrollTop);\n }\n if (this._documentScrollLeft && this._documentScrollLeft > 0) {\n doc.scrollLeft(this._documentScrollLeft);\n }\n options.isMaximized = options.isMinimized = false;\n that.resize();\n return that;\n },\n _sizingAction: function (actionId, callback) {\n var that = this, wrapper = that.wrapper, style = wrapper[0].style, options = that.options;\n if (options.isMaximized || options.isMinimized) {\n return that;\n }\n that.restoreOptions = {\n width: style.width,\n height: style.height\n };\n wrapper.children(KWINDOWRESIZEHANDLES).hide().end().children(KWINDOWTITLEBAR).find(MINIMIZE_MAXIMIZE).parent().hide().eq(0).before(templates.action({ name: 'window-restore' }));\n callback.call(that);\n that.wrapper.children(KWINDOWTITLEBAR).find(PIN_UNPIN).parent().toggle(actionId !== 'maximize');\n that.trigger(actionId);\n return that;\n },\n maximize: function () {\n this._sizingAction('maximize', function () {\n var that = this, wrapper = that.wrapper, position = wrapper.position(), doc = $(document);\n extend(that.restoreOptions, {\n left: position.left,\n top: position.top\n });\n wrapper.css({\n left: 0,\n top: 0,\n position: 'fixed'\n }).addClass(MAXIMIZEDSTATE);\n this._documentScrollTop = doc.scrollTop();\n this._documentScrollLeft = doc.scrollLeft();\n $('html, body').css(OVERFLOW, HIDDEN);\n that.options.isMaximized = true;\n that._onDocumentResize();\n });\n return this;\n },\n isMaximized: function () {\n return this.options.isMaximized;\n },\n minimize: function () {\n this._sizingAction('minimize', function () {\n var that = this;\n that.wrapper.css({\n height: '',\n minHeight: ''\n });\n that.element.hide();\n that.options.isMinimized = true;\n });\n return this;\n },\n isMinimized: function () {\n return this.options.isMinimized;\n },\n pin: function (force) {\n var that = this, win = $(window), wrapper = that.wrapper, top = parseInt(wrapper.css('top'), 10), left = parseInt(wrapper.css('left'), 10);\n if (force || !that.options.pinned && !that.options.isMaximized) {\n wrapper.css({\n position: 'fixed',\n top: top - win.scrollTop(),\n left: left - win.scrollLeft()\n });\n wrapper.children(KWINDOWTITLEBAR).find(KPIN).addClass('k-i-unpin').removeClass('k-i-pin');\n that.options.pinned = true;\n }\n },\n unpin: function () {\n var that = this, win = $(window), wrapper = that.wrapper, top = parseInt(wrapper.css('top'), 10), left = parseInt(wrapper.css('left'), 10);\n if (that.options.pinned && !that.options.isMaximized) {\n wrapper.css({\n position: '',\n top: top + win.scrollTop(),\n left: left + win.scrollLeft()\n });\n wrapper.children(KWINDOWTITLEBAR).find(KUNPIN).addClass('k-i-pin').removeClass('k-i-unpin');\n that.options.pinned = false;\n }\n },\n _onDocumentResize: function () {\n var that = this, wrapper = that.wrapper, wnd = $(window), zoomLevel = kendo.support.zoomLevel(), w, h;\n if (!that.options.isMaximized) {\n return;\n }\n w = wnd.width() / zoomLevel;\n h = wnd.height() / zoomLevel - parseInt(wrapper.css('padding-top'), 10);\n wrapper.css({\n width: w,\n height: h\n });\n that.options.width = w;\n that.options.height = h;\n that.resize();\n },\n refresh: function (options) {\n var that = this, initOptions = that.options, element = $(that.element), iframe, showIframe, url;\n if (!isPlainObject(options)) {\n options = { url: options };\n }\n options = extend({}, initOptions.content, options);\n showIframe = defined(initOptions.iframe) ? initOptions.iframe : options.iframe;\n url = options.url;\n if (url) {\n if (!defined(showIframe)) {\n showIframe = !isLocalUrl(url);\n }\n if (!showIframe) {\n that._ajaxRequest(options);\n } else {\n iframe = element.find('.' + KCONTENTFRAME)[0];\n if (iframe) {\n iframe.src = url || iframe.src;\n } else {\n element.html(templates.contentFrame(extend({}, initOptions, { content: options })));\n }\n element.find('.' + KCONTENTFRAME).unbind('load' + NS).on('load' + NS, proxy(this._triggerRefresh, this));\n }\n } else {\n if (options.template) {\n that.content(template(options.template)({}));\n }\n that.trigger(REFRESH);\n }\n element.toggleClass('k-window-iframecontent', !!showIframe);\n return that;\n },\n _triggerRefresh: function () {\n this.trigger(REFRESH);\n },\n _ajaxComplete: function () {\n clearTimeout(this._loadingIconTimeout);\n this.wrapper.find(REFRESHICON).removeClass(LOADING);\n },\n _ajaxError: function (xhr, status) {\n this.trigger(ERROR, {\n status: status,\n xhr: xhr\n });\n },\n _ajaxSuccess: function (contentTemplate) {\n return function (data) {\n var html = data;\n if (contentTemplate) {\n html = template(contentTemplate)(data || {});\n }\n this.content(html, data);\n this.element.prop('scrollTop', 0);\n this.trigger(REFRESH);\n };\n },\n _showLoading: function () {\n this.wrapper.find(REFRESHICON).addClass(LOADING);\n },\n _ajaxRequest: function (options) {\n this._loadingIconTimeout = setTimeout(proxy(this._showLoading, this), 100);\n $.ajax(extend({\n type: 'GET',\n dataType: 'html',\n cache: false,\n error: proxy(this._ajaxError, this),\n complete: proxy(this._ajaxComplete, this),\n success: proxy(this._ajaxSuccess(options.template), this)\n }, options));\n },\n _destroy: function () {\n if (this.resizing) {\n this.resizing.destroy();\n }\n if (this.dragging) {\n this.dragging.destroy();\n }\n this.wrapper.off(NS).children(KWINDOWCONTENT).off(NS).end().find('.k-resize-handle,.k-window-titlebar').off(NS);\n $(window).off('resize' + NS + this._marker);\n clearTimeout(this._loadingIconTimeout);\n Widget.fn.destroy.call(this);\n this.unbind(undefined);\n kendo.destroy(this.wrapper);\n this._removeOverlay(true);\n },\n destroy: function () {\n this._destroy();\n this.wrapper.empty().remove();\n this.wrapper = this.appendTo = this.element = $();\n },\n _createWindow: function () {\n var contentHtml = this.element, options = this.options, iframeSrcAttributes, wrapper, isRtl = kendo.support.isRtl(contentHtml);\n if (options.scrollable === false) {\n contentHtml.css('overflow', 'hidden');\n }\n wrapper = $(templates.wrapper(options));\n iframeSrcAttributes = contentHtml.find('iframe:not(.k-content)').map(function () {\n var src = this.getAttribute('src');\n this.src = '';\n return src;\n });\n wrapper.toggleClass('k-rtl', isRtl).appendTo(this.appendTo).append(contentHtml).find('iframe:not(.k-content)').each(function (index) {\n this.src = iframeSrcAttributes[index];\n });\n wrapper.find('.k-window-title').css(isRtl ? 'left' : 'right', outerWidth(wrapper.find('.k-window-actions')) + 10);\n contentHtml.css('visibility', '').show();\n contentHtml.find('[data-role=editor]').each(function () {\n var editor = $(this).data('kendoEditor');\n if (editor) {\n editor.refresh();\n }\n });\n wrapper = contentHtml = null;\n }\n });\n templates = {\n wrapper: template('<div class=\\'k-widget k-window\\' />'),\n action: template('<a role=\\'button\\' href=\\'\\\\#\\' class=\\'k-window-action k-link\\' aria-label=\\'#= name #\\'>' + '<span class=\\'k-icon k-i-#= name.toLowerCase() #\\'></span>' + '</a>'),\n titlebar: template('<div class=\\'k-window-titlebar k-header\\'> ' + '<span class=\\'k-window-title\\'>#= title #</span>' + '<div class=\\'k-window-actions\\' />' + '</div>'),\n overlay: '<div class=\\'k-overlay\\' />',\n contentFrame: template('<iframe frameborder=\\'0\\' title=\\'#= title #\\' class=\\'' + KCONTENTFRAME + '\\' ' + 'src=\\'#= content.url #\\'>' + 'This page requires frames in order to show content' + '</iframe>'),\n resizeHandle: template('<div class=\\'k-resize-handle k-resize-#= data #\\'></div>')\n };\n function WindowResizing(wnd) {\n var that = this;\n that.owner = wnd;\n that._preventDragging = false;\n that._draggable = new Draggable(wnd.wrapper, {\n filter: '>' + KWINDOWRESIZEHANDLES,\n group: wnd.wrapper.id + '-resizing',\n dragstart: proxy(that.dragstart, that),\n drag: proxy(that.drag, that),\n dragend: proxy(that.dragend, that)\n });\n that._draggable.userEvents.bind('press', proxy(that.addOverlay, that));\n that._draggable.userEvents.bind('release', proxy(that.removeOverlay, that));\n }\n WindowResizing.prototype = {\n addOverlay: function () {\n this.owner.wrapper.append(templates.overlay);\n },\n removeOverlay: function () {\n this.owner.wrapper.find(KOVERLAY).remove();\n },\n dragstart: function (e) {\n var that = this;\n var wnd = that.owner;\n var wrapper = wnd.wrapper;\n that._preventDragging = wnd.trigger(RESIZESTART);\n if (that._preventDragging) {\n return;\n }\n that.elementPadding = parseInt(wrapper.css('padding-top'), 10);\n that.initialPosition = kendo.getOffset(wrapper, 'position');\n that.resizeDirection = e.currentTarget.prop('className').replace('k-resize-handle k-resize-', '');\n that.initialSize = {\n width: wrapper.width(),\n height: wrapper.height()\n };\n that.containerOffset = kendo.getOffset(wnd.appendTo, 'position');\n wrapper.children(KWINDOWRESIZEHANDLES).not(e.currentTarget).hide();\n $(BODY).css(CURSOR, e.currentTarget.css(CURSOR));\n },\n drag: function (e) {\n if (this._preventDragging) {\n return;\n }\n var that = this, wnd = that.owner, wrapper = wnd.wrapper, options = wnd.options, direction = that.resizeDirection, containerOffset = that.containerOffset, initialPosition = that.initialPosition, initialSize = that.initialSize, newWidth, newHeight, windowBottom, windowRight, x = Math.max(e.x.location, 0), y = Math.max(e.y.location, 0);\n if (direction.indexOf('e') >= 0) {\n newWidth = x - initialPosition.left - containerOffset.left;\n wrapper.width(constrain(newWidth, options.minWidth, options.maxWidth));\n } else if (direction.indexOf('w') >= 0) {\n windowRight = initialPosition.left + initialSize.width + containerOffset.left;\n newWidth = constrain(windowRight - x, options.minWidth, options.maxWidth);\n wrapper.css({\n left: windowRight - newWidth - containerOffset.left,\n width: newWidth\n });\n }\n var newWindowTop = y;\n if (wnd.options.pinned) {\n newWindowTop -= $(window).scrollTop();\n }\n if (direction.indexOf('s') >= 0) {\n newHeight = newWindowTop - initialPosition.top - that.elementPadding - containerOffset.top;\n wrapper.height(constrain(newHeight, options.minHeight, options.maxHeight));\n } else if (direction.indexOf('n') >= 0) {\n windowBottom = initialPosition.top + initialSize.height + containerOffset.top;\n newHeight = constrain(windowBottom - newWindowTop, options.minHeight, options.maxHeight);\n wrapper.css({\n top: windowBottom - newHeight - containerOffset.top,\n height: newHeight\n });\n }\n if (newWidth) {\n wnd.options.width = newWidth + 'px';\n }\n if (newHeight) {\n wnd.options.height = newHeight + 'px';\n }\n wnd.resize();\n },\n dragend: function (e) {\n if (this._preventDragging) {\n return;\n }\n var that = this, wnd = that.owner, wrapper = wnd.wrapper;\n wrapper.children(KWINDOWRESIZEHANDLES).not(e.currentTarget).show();\n $(BODY).css(CURSOR, '');\n if (wnd.touchScroller) {\n wnd.touchScroller.reset();\n }\n if (e.keyCode == 27) {\n wrapper.css(that.initialPosition).css(that.initialSize);\n }\n wnd.trigger(RESIZEEND);\n return false;\n },\n destroy: function () {\n if (this._draggable) {\n this._draggable.destroy();\n }\n this._draggable = this.owner = null;\n }\n };\n function WindowDragging(wnd, dragHandle) {\n var that = this;\n that.owner = wnd;\n that._preventDragging = false;\n that._draggable = new Draggable(wnd.wrapper, {\n filter: dragHandle,\n group: wnd.wrapper.id + '-moving',\n dragstart: proxy(that.dragstart, that),\n drag: proxy(that.drag, that),\n dragend: proxy(that.dragend, that),\n dragcancel: proxy(that.dragcancel, that)\n });\n that._draggable.userEvents.stopPropagation = false;\n }\n WindowDragging.prototype = {\n dragstart: function (e) {\n var wnd = this.owner, element = wnd.element, actions = element.find('.k-window-actions'), containerOffset = kendo.getOffset(wnd.appendTo);\n this._preventDragging = wnd.trigger(DRAGSTART);\n if (this._preventDragging) {\n return;\n }\n wnd.initialWindowPosition = kendo.getOffset(wnd.wrapper, 'position');\n wnd.initialPointerPosition = {\n left: e.x.client,\n top: e.y.client\n };\n wnd.startPosition = {\n left: e.x.client - wnd.initialWindowPosition.left,\n top: e.y.client - wnd.initialWindowPosition.top\n };\n if (actions.length > 0) {\n wnd.minLeftPosition = outerWidth(actions) + parseInt(actions.css('right'), 10) - outerWidth(element);\n } else {\n wnd.minLeftPosition = 20 - outerWidth(element);\n }\n wnd.minLeftPosition -= containerOffset.left;\n wnd.minTopPosition = -containerOffset.top;\n wnd.wrapper.append(templates.overlay).children(KWINDOWRESIZEHANDLES).hide();\n $(BODY).css(CURSOR, e.currentTarget.css(CURSOR));\n },\n drag: function (e) {\n if (this._preventDragging) {\n return;\n }\n var wnd = this.owner;\n var position = wnd.options.position;\n position.top = Math.max(e.y.client - wnd.startPosition.top, wnd.minTopPosition);\n position.left = Math.max(e.x.client - wnd.startPosition.left, wnd.minLeftPosition);\n if (kendo.support.transforms) {\n $(wnd.wrapper).css('transform', 'translate(' + (e.x.client - wnd.initialPointerPosition.left) + 'px, ' + (e.y.client - wnd.initialPointerPosition.top) + 'px)');\n } else {\n $(wnd.wrapper).css(position);\n }\n },\n _finishDrag: function () {\n var wnd = this.owner;\n wnd.wrapper.children(KWINDOWRESIZEHANDLES).toggle(!wnd.options.isMinimized).end().find(KOVERLAY).remove();\n $(BODY).css(CURSOR, '');\n },\n dragcancel: function (e) {\n if (this._preventDragging) {\n return;\n }\n this._finishDrag();\n e.currentTarget.closest(KWINDOW).css(this.owner.initialWindowPosition);\n },\n dragend: function () {\n if (this._preventDragging) {\n return;\n }\n $(this.owner.wrapper).css(this.owner.options.position).css('transform', '');\n this._finishDrag();\n this.owner.trigger(DRAGEND);\n return false;\n },\n destroy: function () {\n if (this._draggable) {\n this._draggable.destroy();\n }\n this._draggable = this.owner = null;\n }\n };\n kendo.ui.plugin(Window);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.view', [\n 'kendo.core',\n 'kendo.fx',\n 'kendo.mobile.scroller',\n 'kendo.view'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.view',\n name: 'View',\n category: 'mobile',\n description: 'Mobile View',\n depends: [\n 'core',\n 'fx',\n 'mobile.scroller',\n 'view'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, attr = kendo.attr, Widget = ui.Widget, ViewClone = kendo.ViewClone, INIT = 'init', UI_OVERLAY = '<div style=\"height: 100%; width: 100%; position: absolute; top: 0; left: 0; z-index: 20000; display: none\" />', BEFORE_SHOW = 'beforeShow', SHOW = 'show', AFTER_SHOW = 'afterShow', BEFORE_HIDE = 'beforeHide', TRANSITION_END = 'transitionEnd', TRANSITION_START = 'transitionStart', HIDE = 'hide', DESTROY = 'destroy', attrValue = kendo.attrValue, roleSelector = kendo.roleSelector, directiveSelector = kendo.directiveSelector, compileMobileDirective = kendo.compileMobileDirective;\n function initPopOvers(element) {\n var popovers = element.find(roleSelector('popover')), idx, length, roles = ui.roles;\n for (idx = 0, length = popovers.length; idx < length; idx++) {\n kendo.initWidget(popovers[idx], {}, roles);\n }\n }\n function preventScrollIfNotInput(e) {\n if (!kendo.triggeredByInput(e)) {\n e.preventDefault();\n }\n }\n var View = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this.params = {};\n $.extend(this, options);\n this.transition = this.transition || this.defaultTransition;\n this._id();\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 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 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 enable: function (enable) {\n if (typeof enable == 'undefined') {\n enable = true;\n }\n if (enable) {\n this.overlay.hide();\n } else {\n this.overlay.show();\n }\n },\n destroy: function () {\n if (this.layout) {\n this.layout.detach(this);\n }\n this.trigger(DESTROY);\n Widget.fn.destroy.call(this);\n if (this.scroller) {\n this.scroller.destroy();\n }\n if (this.options.$angular) {\n this.element.scope().$destroy();\n }\n kendo.destroy(this.element);\n },\n purge: function () {\n this.destroy();\n this.element.remove();\n },\n triggerBeforeShow: function () {\n if (this.trigger(BEFORE_SHOW, { view: this })) {\n return false;\n }\n return true;\n },\n triggerBeforeHide: function () {\n if (this.trigger(BEFORE_HIDE, { view: this })) {\n return false;\n }\n return true;\n },\n showStart: function () {\n var element = this.element;\n element.css('display', '');\n if (!this.inited) {\n this.inited = true;\n this.trigger(INIT, { view: this });\n } else {\n this._invokeNgController();\n }\n if (this.layout) {\n this.layout.attach(this);\n }\n this._padIfNativeScrolling();\n this.trigger(SHOW, { view: this });\n kendo.resize(element);\n },\n showEnd: function () {\n this.trigger(AFTER_SHOW, { view: this });\n this._padIfNativeScrolling();\n },\n hideEnd: function () {\n var that = this;\n that.element.hide();\n that.trigger(HIDE, { view: that });\n if (that.layout) {\n that.layout.trigger(HIDE, {\n view: that,\n layout: that.layout\n });\n }\n },\n beforeTransition: function (type) {\n this.trigger(TRANSITION_START, { type: type });\n },\n afterTransition: function (type) {\n this.trigger(TRANSITION_END, { type: type });\n },\n _padIfNativeScrolling: function () {\n if (mobile.appLevelNativeScrolling()) {\n var isAndroid = kendo.support.mobileOS && kendo.support.mobileOS.android, skin = mobile.application.skin() || '', isAndroidForced = mobile.application.os.android || skin.indexOf('android') > -1, hasPlatformIndependentSkin = skin === 'flat' || skin.indexOf('material') > -1, topContainer = (isAndroid || isAndroidForced) && !hasPlatformIndependentSkin ? 'footer' : 'header', bottomContainer = (isAndroid || isAndroidForced) && !hasPlatformIndependentSkin ? 'header' : 'footer';\n this.content.css({\n paddingTop: this[topContainer].height(),\n paddingBottom: this[bottomContainer].height()\n });\n }\n },\n contentElement: function () {\n var that = this;\n return that.options.stretch ? that.content : that.scrollerContent;\n },\n clone: function () {\n return new ViewClone(this);\n },\n _scroller: function () {\n var that = this;\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, {\n zoom: that.options.zoom,\n useNative: that.options.useNativeScrolling\n }));\n that.scroller = that.content.data('kendoMobileScroller');\n that.scrollerContent = that.scroller.scrollElement;\n }\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 _model: function () {\n var that = this, element = that.element, model = that.options.model;\n if (typeof model === 'string') {\n model = kendo.getter(model)(that.options.modelScope);\n }\n that.model = model;\n initPopOvers(element);\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 _id: function () {\n var element = this.element, idAttrValue = element.attr('id') || '';\n this.id = attrValue(element, 'url') || '#' + idAttrValue;\n if (this.id == '#') {\n this.id = kendo.guid();\n element.attr('id', this.id);\n }\n },\n _layout: function () {\n var contentSelector = roleSelector('content'), element = this.element;\n element.addClass('km-view');\n this.header = element.children(roleSelector('header')).addClass('km-header');\n this.footer = element.children(roleSelector('footer')).addClass('km-footer');\n if (!element.children(contentSelector)[0]) {\n element.wrapInner('<div ' + attr('role') + '=\"content\"></div>');\n }\n this.content = element.children(roleSelector('content')).addClass('km-content');\n this.element.prepend(this.header).append(this.footer);\n this.layout = this.options.getLayout(this.layout);\n if (this.layout) {\n this.layout.setup(this);\n }\n },\n _overlay: function () {\n this.overlay = $(UI_OVERLAY).appendTo(this.element);\n },\n _invokeNgController: function () {\n var controller, scope;\n if (this.options.$angular) {\n controller = this.element.controller();\n scope = this.options.$angular[0];\n if (controller) {\n var callback = $.proxy(this, '_callController', controller, scope);\n if (/^\\$(digest|apply)$/.test(scope.$$phase)) {\n callback();\n } else {\n scope.$apply(callback);\n }\n }\n }\n },\n _callController: function (controller, scope) {\n this.element.injector().invoke(controller.constructor, controller, { $scope: scope });\n }\n });\n function initWidgets(collection) {\n collection.each(function () {\n kendo.initWidget($(this), {}, ui.roles);\n });\n }\n var Layout = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n element = this.element;\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 initPopOvers(element);\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 _locate: function (selectors) {\n return this.options.$angular ? directiveSelector(selectors) : roleSelector(selectors);\n },\n options: {\n name: 'Layout',\n id: null,\n platform: null\n },\n events: [\n INIT,\n SHOW,\n HIDE\n ],\n setup: function (view) {\n if (!view.header[0]) {\n view.header = this.header;\n }\n if (!view.footer[0]) {\n 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 if (view.footer === that.footer && that.footer.length) {\n view.element.append(that.footer.detach()[0].cloneNode(true));\n }\n },\n attach: function (view) {\n var that = this, previousView = that.currentView;\n if (previousView) {\n that.detach(previousView);\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 if (view.footer === that.footer) {\n that.footer.detach();\n view.element.children(roleSelector('footer')).remove();\n view.element.append(that.footer);\n }\n that.trigger(SHOW, {\n layout: that,\n view: view\n });\n that.currentView = view;\n }\n });\n var Observable = kendo.Observable, bodyRegExp = /<body[^>]*>(([\\u000a\\u000d\\u2028\\u2029]|.)*)<\\/body>/i, LOAD_START = 'loadStart', LOAD_COMPLETE = 'loadComplete', SHOW_START = 'showStart', SAME_VIEW_REQUESTED = 'sameViewRequested', VIEW_SHOW = 'viewShow', VIEW_TYPE_DETERMINED = 'viewTypeDetermined', AFTER = 'after';\n var ViewEngine = Observable.extend({\n init: function (options) {\n var that = this, views, errorMessage, container, collection;\n Observable.fn.init.call(that);\n $.extend(that, options);\n that.sandbox = $('<div />');\n container = that.container;\n views = that._hideViews(container);\n that.rootView = views.first();\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 that.layouts = {};\n that.viewContainer = new kendo.ViewContainer(that.container);\n that.viewContainer.bind('accepted', function (e) {\n e.view.params = that.params;\n });\n that.viewContainer.bind('complete', function (e) {\n that.trigger(VIEW_SHOW, { view: e.view });\n });\n that.viewContainer.bind(AFTER, function () {\n that.trigger(AFTER);\n });\n this.getLayoutProxy = $.proxy(this, '_getLayout');\n that._setupLayouts(container);\n collection = container.children(that._locate('modalview drawer'));\n if (that.$angular) {\n that.$angular[0].viewOptions = {\n defaultTransition: that.transition,\n loader: that.loader,\n container: that.container,\n getLayout: that.getLayoutProxy\n };\n collection.each(function (idx, element) {\n compileMobileDirective($(element), options.$angular[0]);\n });\n } else {\n initWidgets(collection);\n }\n this.bind(this.events, options);\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 destroy: function () {\n kendo.destroy(this.container);\n for (var id in this.layouts) {\n this.layouts[id].destroy();\n }\n },\n view: function () {\n return this.viewContainer.view;\n },\n showView: function (url, transition, params) {\n url = url.replace(new RegExp('^' + this.remoteViewURLPrefix), '');\n if (url === '' && this.remoteViewURLPrefix) {\n url = '/';\n }\n if (url.replace(/^#/, '') === this.url) {\n this.trigger(SAME_VIEW_REQUESTED);\n return false;\n }\n this.trigger(SHOW_START);\n var that = this, showClosure = function (view) {\n return that.viewContainer.show(view, transition, url);\n }, element = that._findViewElement(url), view = kendo.widgetInstance(element);\n that.url = url.replace(/^#/, '');\n that.params = params;\n if (view && view.reload) {\n view.purge();\n element = [];\n }\n this.trigger(VIEW_TYPE_DETERMINED, {\n remote: element.length === 0,\n url: url\n });\n if (element[0]) {\n if (!view) {\n view = that._createView(element);\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 append: function (html, url) {\n var sandbox = this.sandbox, urlPath = (url || '').split('?')[0], container = this.container, views, modalViews, view;\n if (bodyRegExp.test(html)) {\n html = RegExp.$1;\n }\n sandbox[0].innerHTML = html;\n container.append(sandbox.children('script, style'));\n views = this._hideViews(sandbox);\n view = views.first();\n if (!view.length) {\n views = view = sandbox.wrapInner('<div data-role=view />').children();\n }\n if (urlPath) {\n view.hide().attr(attr('url'), urlPath);\n }\n this._setupLayouts(sandbox);\n modalViews = sandbox.children(this._locate('modalview drawer'));\n container.append(sandbox.children(this._locate('layout modalview drawer')).add(views));\n initWidgets(modalViews);\n return this._createView(view);\n },\n _locate: function (selectors) {\n return this.$angular ? directiveSelector(selectors) : roleSelector(selectors);\n },\n _findViewElement: function (url) {\n var element, urlPath = url.split('?')[0];\n if (!urlPath) {\n return this.rootView;\n }\n element = this.container.children('[' + attr('url') + '=\\'' + urlPath + '\\']');\n if (!element[0] && urlPath.indexOf('/') === -1) {\n element = this.container.children(urlPath.charAt(0) === '#' ? urlPath : '#' + urlPath);\n }\n return element;\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 _getLayout: function (name) {\n if (name === '') {\n return null;\n }\n return name ? this.layouts[name] : this.layouts[this.layout];\n },\n _loadView: function (url, callback) {\n if (this._xhr) {\n this._xhr.abort();\n }\n this.trigger(LOAD_START);\n this._xhr = $.get(kendo.absoluteURL(url, this.remoteViewURLPrefix), 'html').always($.proxy(this, '_xhrComplete', callback, url));\n },\n _xhrComplete: function (callback, url, response) {\n var success = true;\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 {\n return;\n }\n }\n }\n this.trigger(LOAD_COMPLETE);\n if (success) {\n callback(this.append(response, url));\n }\n },\n _hideViews: function (container) {\n return container.children(this._locate('view splitview')).hide();\n },\n _setupLayouts: function (element) {\n var that = this, layout;\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 var platform = layout.options.platform;\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 kendo.mobile.ViewEngine = ViewEngine;\n ui.plugin(View);\n ui.plugin(Layout);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.loader', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.loader',\n name: 'Loader',\n category: 'mobile',\n description: 'Mobile Loader',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, CAPTURE_EVENTS = $.map(kendo.eventMap, function (value) {\n return value;\n }).join(' ').split(' ');\n var Loader = Widget.extend({\n init: function (container, options) {\n var that = this, element = $('<div class=\"km-loader\"><span class=\"km-loading km-spin\"></span><span class=\"km-loading-left\"></span><span class=\"km-loading-right\"></span></div>');\n Widget.fn.init.call(that, element, options);\n that.container = container;\n that.captureEvents = false;\n that._attachCapture();\n element.append(that.options.loading).hide().appendTo(container);\n },\n options: {\n name: 'Loader',\n loading: '<h1>Loading...</h1>',\n timeout: 100\n },\n show: function () {\n var that = this;\n clearTimeout(that._loading);\n if (that.options.loading === false) {\n return;\n }\n that.captureEvents = true;\n that._loading = setTimeout(function () {\n that.element.show();\n }, that.options.timeout);\n },\n hide: function () {\n this.captureEvents = false;\n clearTimeout(this._loading);\n this.element.hide();\n },\n changeMessage: function (message) {\n this.options.loading = message;\n this.element.find('>h1').html(message);\n },\n transition: function () {\n this.captureEvents = true;\n this.container.css('pointer-events', 'none');\n },\n transitionDone: function () {\n this.captureEvents = false;\n this.container.css('pointer-events', '');\n },\n _attachCapture: function () {\n var that = this;\n that.captureEvents = false;\n function capture(e) {\n if (that.captureEvents) {\n e.preventDefault();\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 ui.plugin(Loader);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.pane', [\n 'kendo.mobile.view',\n 'kendo.mobile.loader'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.pane',\n name: 'Pane',\n category: 'mobile',\n description: 'Mobile Pane',\n depends: [\n 'mobile.view',\n 'mobile.loader'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, roleSelector = kendo.roleSelector, ui = mobile.ui, Widget = ui.Widget, ViewEngine = mobile.ViewEngine, View = ui.View, Loader = mobile.ui.Loader, EXTERNAL = 'external', HREF = 'href', DUMMY_HREF = '#!', NAVIGATE = 'navigate', VIEW_SHOW = 'viewShow', SAME_VIEW_REQUESTED = 'sameViewRequested', OS = kendo.support.mobileOS, SKIP_TRANSITION_ON_BACK_BUTTON = OS.ios && !OS.appMode && OS.flatVersion >= 700, WIDGET_RELS = /popover|actionsheet|modalview|drawer/, BACK = '#:back', attrValue = kendo.attrValue;\n var Pane = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element;\n element.addClass('km-pane');\n if (that.options.collapsible) {\n element.addClass('km-collapsible-pane');\n }\n this.history = [];\n this.historyCallback = function (url, params, backButtonPressed) {\n var transition = that.transition;\n that.transition = null;\n if (SKIP_TRANSITION_ON_BACK_BUTTON && backButtonPressed) {\n transition = 'none';\n }\n return that.viewEngine.showView(url, transition, params);\n };\n this._historyNavigate = function (url) {\n if (url === BACK) {\n if (that.history.length === 1) {\n return;\n }\n that.history.pop();\n url = that.history[that.history.length - 1];\n } else {\n that.history.push(url);\n }\n that.historyCallback(url, kendo.parseQueryStringParams(url));\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 that.loader = new Loader(element, { loading: that.options.loading });\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 showStart: function () {\n that.loader.transition();\n that.closeActiveDialogs();\n },\n after: function () {\n that.loader.transitionDone();\n },\n viewShow: function (e) {\n that.trigger(VIEW_SHOW, e);\n },\n loadStart: function () {\n that.loader.show();\n },\n loadComplete: function () {\n that.loader.hide();\n },\n sameViewRequested: function () {\n that.trigger(SAME_VIEW_REQUESTED);\n },\n viewTypeDetermined: function (e) {\n if (!e.remote || !that.options.serverNavigation) {\n that.trigger(NAVIGATE, { url: e.url });\n }\n }\n });\n this._setPortraitWidth();\n kendo.onResize(function () {\n that._setPortraitWidth();\n });\n that._setupAppLinks();\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 navigateToInitial: function () {\n var initial = this.options.initial;\n if (initial) {\n this.navigate(initial);\n }\n return initial;\n },\n options: {\n name: 'Pane',\n portraitWidth: '',\n transition: '',\n layout: '',\n collapsible: false,\n initial: null,\n modelScope: window,\n loading: '<h1>Loading...</h1>'\n },\n events: [\n NAVIGATE,\n VIEW_SHOW,\n SAME_VIEW_REQUESTED\n ],\n append: function (html) {\n return this.viewEngine.append(html);\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.viewEngine.destroy();\n this.userEvents.destroy();\n },\n navigate: function (url, transition) {\n if (url instanceof View) {\n url = url.id;\n }\n this.transition = transition;\n this._historyNavigate(url);\n },\n replace: function (url, transition) {\n if (url instanceof View) {\n url = url.id;\n }\n this.transition = transition;\n this._historyReplace(url);\n },\n bindToRouter: function (router) {\n var that = this, history = this.history, viewEngine = this.viewEngine;\n router.bind('init', function (e) {\n var url = e.url, attrUrl = router.pushState ? url : '/';\n viewEngine.rootView.attr(kendo.attr('url'), attrUrl);\n var length = history.length;\n if (url === '/' && length) {\n router.navigate(history[length - 1], true);\n e.preventDefault();\n }\n });\n router.bind('routeMissing', function (e) {\n if (!that.historyCallback(e.url, e.params, e.backButtonPressed)) {\n e.preventDefault();\n }\n });\n router.bind('same', function () {\n that.trigger(SAME_VIEW_REQUESTED);\n });\n that._historyNavigate = function (url) {\n router.navigate(url);\n };\n that._historyReplace = function (url) {\n router.replace(url);\n };\n },\n hideLoading: function () {\n this.loader.hide();\n },\n showLoading: function () {\n this.loader.show();\n },\n changeLoadingMessage: function (message) {\n this.loader.changeMessage(message);\n },\n view: function () {\n return this.viewEngine.view();\n },\n _setPortraitWidth: function () {\n var width, portraitWidth = this.options.portraitWidth;\n if (portraitWidth) {\n width = kendo.mobile.application.element.is('.km-vertical') ? portraitWidth : 'auto';\n this.element.css('width', width);\n }\n },\n _setupAppLinks: function () {\n var that = this, linkRoles = 'tab', pressedButtonSelector = '[data-' + kendo.ns + 'navigate-on-press]', buttonSelectors = $.map([\n 'button',\n 'backbutton',\n 'detailbutton',\n 'listview-link'\n ], function (role) {\n return roleSelector(role) + ':not(' + pressedButtonSelector + ')';\n }).join(',');\n this.element.handler(this).on('down', roleSelector(linkRoles) + ',' + pressedButtonSelector, '_mouseup').on('click', roleSelector(linkRoles) + ',' + buttonSelectors + ',' + pressedButtonSelector, '_appLinkClick');\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 this.element.css('-ms-touch-action', '');\n },\n _appLinkClick: function (e) {\n var href = $(e.currentTarget).attr('href');\n var remote = href && href[0] !== '#' && this.options.serverNavigation;\n if (!remote && attrValue($(e.currentTarget), 'rel') != EXTERNAL) {\n e.preventDefault();\n }\n },\n _mouseup: function (e) {\n if (e.which > 1 || e.isDefaultPrevented()) {\n return;\n }\n var pane = this, link = $(e.currentTarget), transition = attrValue(link, 'transition'), rel = attrValue(link, 'rel') || '', target = attrValue(link, 'target'), href = link.attr(HREF), delayedTouchEnd = SKIP_TRANSITION_ON_BACK_BUTTON && link[0].offsetHeight === 0, remote = href && href[0] !== '#' && this.options.serverNavigation;\n if (delayedTouchEnd || remote || rel === EXTERNAL || typeof href === 'undefined' || href === DUMMY_HREF) {\n return;\n }\n link.attr(HREF, DUMMY_HREF);\n setTimeout(function () {\n link.attr(HREF, href);\n });\n if (rel.match(WIDGET_RELS)) {\n kendo.widgetInstance($(href), ui).openFor(link);\n if (rel === 'actionsheet' || rel === 'drawer') {\n e.stopPropagation();\n }\n } else {\n if (target === '_top') {\n pane = mobile.application.pane;\n } else if (target) {\n pane = $('#' + target).data('kendoMobilePane');\n }\n pane.navigate(href, transition);\n }\n e.preventDefault();\n }\n });\n Pane.wrap = function (element) {\n if (!element.is(roleSelector('view'))) {\n element = element.wrap('<div data-' + kendo.ns + 'role=\"view\" data-stretch=\"true\"></div>').parent();\n }\n var paneContainer = element.wrap('<div class=\"km-pane-wrapper\"><div></div></div>').parent(), pane = new Pane(paneContainer);\n pane.navigate('');\n return pane;\n };\n ui.plugin(Pane);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.popover', [\n 'kendo.popup',\n 'kendo.mobile.pane'\n ], f);\n}(function () {\n var __meta__ = {\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: [\n 'popup',\n 'mobile.pane'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, HIDE = 'hide', OPEN = 'open', CLOSE = 'close', WRAPPER = '<div class=\"km-popup-wrapper\" />', ARROW = '<div class=\"km-popup-arrow\" />', OVERLAY = '<div class=\"km-popup-overlay\" />', DIRECTION_CLASSES = 'km-up km-down km-left km-right', Widget = ui.Widget, 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 }, 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 }, DIMENSIONS = {\n 'horizontal': {\n offset: 'top',\n size: 'height'\n },\n 'vertical': {\n offset: 'left',\n size: 'width'\n }\n }, REVERSE = {\n 'up': 'down',\n 'down': 'up',\n 'left': 'right',\n 'right': 'left'\n };\n var Popup = Widget.extend({\n init: function (element, options) {\n var that = this, containerPopup = element.closest('.km-modalview-wrapper'), viewport = element.closest('.km-root').children('.km-pane').first(), container = containerPopup[0] ? containerPopup : viewport, popupOptions, axis;\n if (options.viewport) {\n viewport = options.viewport;\n } else if (!viewport[0]) {\n viewport = window;\n }\n if (options.container) {\n container = options.container;\n } else if (!container[0]) {\n container = document.body;\n }\n popupOptions = {\n viewport: viewport,\n copyAnchorStyles: false,\n autosize: true,\n open: function () {\n that.overlay.show();\n },\n activate: $.proxy(that._activate, that),\n deactivate: function () {\n that.overlay.hide();\n if (!that._apiCall) {\n that.trigger(HIDE);\n }\n that._apiCall = false;\n }\n };\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n element.wrap(WRAPPER).addClass('km-popup').show();\n axis = that.options.direction.match(/left|right/) ? 'horizontal' : 'vertical';\n that.dimensions = DIMENSIONS[axis];\n that.wrapper = element.parent().css({\n width: options.width,\n height: options.height\n }).addClass('km-popup-wrapper km-' + options.direction).hide();\n that.arrow = $(ARROW).prependTo(that.wrapper).hide();\n that.overlay = $(OVERLAY).appendTo(container).hide();\n popupOptions.appendTo = that.overlay;\n if (options.className) {\n that.overlay.addClass(options.className);\n }\n that.popup = new kendo.ui.Popup(that.wrapper, $.extend(true, popupOptions, ANIMATION, DIRECTIONS[options.direction]));\n },\n options: {\n name: 'Popup',\n width: 240,\n height: '',\n direction: 'down',\n container: null,\n viewport: null\n },\n events: [HIDE],\n show: function (target) {\n this.popup.options.anchor = $(target);\n this.popup.open();\n },\n hide: function () {\n this._apiCall = true;\n this.popup.close();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.popup.destroy();\n this.overlay.remove();\n },\n target: function () {\n return this.popup.options.anchor;\n },\n _activate: function () {\n var that = this, direction = that.options.direction, dimensions = that.dimensions, offset = dimensions.offset, popup = that.popup, anchor = popup.options.anchor, anchorOffset = $(anchor).offset(), elementOffset = $(popup.element).offset(), cssClass = popup.flipped ? REVERSE[direction] : direction, min = that.arrow[dimensions.size]() * 2, max = that.element[dimensions.size]() - that.arrow[dimensions.size](), size = $(anchor)[dimensions.size](), offsetAmount = anchorOffset[offset] - elementOffset[offset] + size / 2;\n if (offsetAmount < min) {\n offsetAmount = min;\n }\n if (offsetAmount > max) {\n offsetAmount = max;\n }\n that.wrapper.removeClass(DIRECTION_CLASSES).addClass('km-' + cssClass);\n that.arrow.css(offset, offsetAmount).show();\n }\n });\n var PopOver = Widget.extend({\n init: function (element, options) {\n var that = this, popupOptions;\n that.initialOpen = false;\n Widget.fn.init.call(that, element, options);\n popupOptions = $.extend({\n className: 'km-popover-root',\n hide: function () {\n that.trigger(CLOSE);\n }\n }, this.options.popup);\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 that.pane = new ui.Pane(that.element, $.extend(this.options.pane, { $angular: this.options.$angular }));\n kendo.notify(that, ui);\n },\n options: {\n name: 'PopOver',\n popup: {},\n pane: {}\n },\n events: [\n OPEN,\n CLOSE\n ],\n open: function (target) {\n this.popup.show(target);\n if (!this.initialOpen) {\n if (!this.pane.navigateToInitial()) {\n this.pane.navigate('');\n }\n this.popup.popup._position();\n this.initialOpen = true;\n } else {\n this.pane.view()._invokeNgController();\n }\n },\n openFor: function (target) {\n this.open(target);\n this.trigger(OPEN, { target: this.popup.target() });\n },\n close: function () {\n this.popup.hide();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.pane.destroy();\n this.popup.destroy();\n kendo.destroy(this.element);\n }\n });\n ui.plugin(Popup);\n ui.plugin(PopOver);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.shim', ['kendo.popup'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.shim',\n name: 'Shim',\n category: 'mobile',\n description: 'Mobile Shim',\n depends: ['popup'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Popup = kendo.ui.Popup, SHIM = '<div class=\"km-shim\"/>', HIDE = 'hide', Widget = ui.Widget;\n var Shim = Widget.extend({\n init: function (element, options) {\n var that = this, app = kendo.mobile.application, os = kendo.support.mobileOS, osname = app ? app.os.name : os ? os.name : 'ios', ioswp = osname === 'ios' || osname === 'wp' || (app ? app.os.skin : false), bb = osname === 'blackberry', align = options.align || (ioswp ? 'bottom center' : bb ? 'center right' : 'center center'), position = options.position || (ioswp ? 'bottom center' : bb ? 'center right' : 'center center'), effect = options.effect || (ioswp ? 'slideIn:up' : bb ? 'slideIn:left' : 'fade:in'), shim = $(SHIM).handler(that).hide();\n Widget.fn.init.call(that, element, options);\n that.shim = shim;\n element = that.element;\n options = that.options;\n if (options.className) {\n that.shim.addClass(options.className);\n }\n if (!options.modal) {\n that.shim.on('down', '_hide');\n }\n (app ? app.element : $(document.body)).append(shim);\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: { duration: options.duration }\n },\n close: function (e) {\n var prevented = false;\n if (!that._apiCall) {\n prevented = that.trigger(HIDE);\n }\n if (prevented) {\n e.preventDefault();\n }\n that._apiCall = false;\n },\n deactivate: function () {\n shim.hide();\n },\n open: function () {\n shim.show();\n }\n });\n kendo.notify(that);\n },\n events: [HIDE],\n options: {\n name: 'Shim',\n modal: false,\n align: undefined,\n position: undefined,\n effect: undefined,\n duration: 200\n },\n show: function () {\n this.popup.open();\n },\n hide: function () {\n this._apiCall = true;\n this.popup.close();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.shim.kendoDestroy();\n this.popup.destroy();\n this.shim.remove();\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 ui.plugin(Shim);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.actionsheet', [\n 'kendo.mobile.popover',\n 'kendo.mobile.shim'\n ], f);\n}(function () {\n var __meta__ = {\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: [\n 'mobile.popover',\n 'mobile.shim'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, ui = kendo.mobile.ui, Shim = ui.Shim, Popup = ui.Popup, Widget = ui.Widget, OPEN = 'open', CLOSE = 'close', COMMAND = 'command', BUTTONS = 'li>a', CONTEXT_DATA = 'actionsheetContext', WRAP = '<div class=\"km-actionsheet-wrapper\" />', cancelTemplate = kendo.template('<li class=\"km-actionsheet-cancel\"><a href=\"\\\\#\">#:cancel#</a></li>');\n var ActionSheet = Widget.extend({\n init: function (element, options) {\n var that = this, ShimClass, tablet, type, os = support.mobileOS;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n type = options.type;\n element = that.element;\n if (type === 'auto') {\n tablet = os && os.tablet;\n } else {\n tablet = type === 'tablet';\n }\n ShimClass = tablet ? Popup : Shim;\n if (options.cancelTemplate) {\n cancelTemplate = kendo.template(options.cancelTemplate);\n }\n element.addClass('km-actionsheet').append(cancelTemplate({ cancel: that.options.cancel })).wrap(WRAP).on('up', BUTTONS, '_click').on('click', BUTTONS, kendo.preventDefault);\n that.view().bind('destroy', function () {\n that.destroy();\n });\n that.wrapper = element.parent().addClass(type ? ' km-actionsheet-' + type : '');\n that.shim = new ShimClass(that.wrapper, $.extend({\n modal: os.ios && os.majorVersion < 7,\n className: 'km-actionsheet-root'\n }, that.options.popup));\n that._closeProxy = $.proxy(that, '_close');\n that._shimHideProxy = $.proxy(that, '_shimHide');\n that.shim.bind('hide', that._shimHideProxy);\n if (tablet) {\n kendo.onResize(that._closeProxy);\n }\n kendo.notify(that, ui);\n },\n events: [\n OPEN,\n CLOSE,\n COMMAND\n ],\n options: {\n name: 'ActionSheet',\n cancel: 'Cancel',\n type: 'auto',\n popup: { height: 'auto' }\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 close: function () {\n this.context = this.target = null;\n this.shim.hide();\n },\n openFor: function (target) {\n var that = this, context = target.data(CONTEXT_DATA);\n that.open(target, context);\n that.trigger(OPEN, {\n target: target,\n context: context\n });\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.unbindResize(this._closeProxy);\n this.shim.destroy();\n },\n _click: function (e) {\n if (e.isDefaultPrevented()) {\n return;\n }\n var currentTarget = $(e.currentTarget);\n var action = currentTarget.data('action');\n if (action) {\n var actionData = {\n target: this.target,\n context: this.context\n }, $angular = this.options.$angular;\n if ($angular) {\n this.element.injector().get('$parse')(action)($angular[0])(actionData);\n } else {\n kendo.getter(action)(window)(actionData);\n }\n }\n this.trigger(COMMAND, {\n target: this.target,\n context: this.context,\n currentTarget: currentTarget\n });\n e.preventDefault();\n this._close();\n },\n _shimHide: function (e) {\n if (!this.trigger(CLOSE)) {\n this.context = this.target = null;\n } else {\n e.preventDefault();\n }\n },\n _close: function (e) {\n if (!this.trigger(CLOSE)) {\n this.close();\n } else {\n e.preventDefault();\n }\n }\n });\n ui.plugin(ActionSheet);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.progressbar', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'progressbar',\n name: 'ProgressBar',\n category: 'web',\n description: 'The ProgressBar offers rich functionality for displaying and tracking progress',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, HORIZONTAL = 'horizontal', VERTICAL = 'vertical', DEFAULTMIN = 0, DEFAULTMAX = 100, DEFAULTVALUE = 0, DEFAULTCHUNKCOUNT = 5, KPROGRESSBAR = 'k-progressbar', KPROGRESSBARREVERSE = 'k-progressbar-reverse', KPROGRESSBARINDETERMINATE = 'k-progressbar-indeterminate', KPROGRESSBARCOMPLETE = 'k-complete', KPROGRESSWRAPPER = 'k-state-selected', KPROGRESSSTATUS = 'k-progress-status', KCOMPLETEDCHUNK = 'k-state-selected', KUPCOMINGCHUNK = 'k-state-default', KSTATEDISABLED = 'k-state-disabled', PROGRESSTYPE = {\n VALUE: 'value',\n PERCENT: 'percent',\n CHUNK: 'chunk'\n }, CHANGE = 'change', COMPLETE = 'complete', BOOLEAN = 'boolean', math = Math, extend = $.extend, proxy = $.proxy, HUNDREDPERCENT = 100, DEFAULTANIMATIONDURATION = 400, PRECISION = 3, templates = { progressStatus: '<span class=\\'k-progress-status-wrap\\'><span class=\\'k-progress-status\\'></span></span>' };\n var ProgressBar = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(this, element, options);\n options = that.options;\n that._progressProperty = options.orientation === HORIZONTAL ? 'width' : 'height';\n that._fields();\n options.value = that._validateValue(options.value);\n that._validateType(options.type);\n that._wrapper();\n that._progressAnimation();\n if (options.value !== options.min && options.value !== false) {\n that._updateProgress();\n }\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n if (options.hasOwnProperty('reverse')) {\n that.wrapper.toggleClass('k-progressbar-reverse', options.reverse);\n }\n if (options.hasOwnProperty('enable')) {\n that.enable(options.enable);\n }\n that._progressAnimation();\n that._validateValue();\n that._updateProgress();\n },\n events: [\n CHANGE,\n COMPLETE\n ],\n options: {\n name: 'ProgressBar',\n orientation: HORIZONTAL,\n reverse: false,\n min: DEFAULTMIN,\n max: DEFAULTMAX,\n value: DEFAULTVALUE,\n enable: true,\n type: PROGRESSTYPE.VALUE,\n chunkCount: DEFAULTCHUNKCOUNT,\n showStatus: true,\n animation: {}\n },\n _fields: function () {\n var that = this;\n that._isStarted = false;\n that.progressWrapper = that.progressStatus = $();\n },\n _validateType: function (currentType) {\n var isValid = false;\n $.each(PROGRESSTYPE, function (k, type) {\n if (type === currentType) {\n isValid = true;\n return false;\n }\n });\n if (!isValid) {\n throw new Error(kendo.format('Invalid ProgressBar type \\'{0}\\'', currentType));\n }\n },\n _wrapper: function () {\n var that = this;\n var container = that.wrapper = that.element;\n var options = that.options;\n var orientation = options.orientation;\n var initialStatusValue;\n container.addClass('k-widget ' + KPROGRESSBAR);\n container.addClass(KPROGRESSBAR + '-' + (orientation === HORIZONTAL ? HORIZONTAL : VERTICAL));\n if (options.enable === false) {\n container.addClass(KSTATEDISABLED);\n }\n if (options.reverse) {\n container.addClass(KPROGRESSBARREVERSE);\n }\n if (options.value === false) {\n container.addClass(KPROGRESSBARINDETERMINATE);\n }\n if (options.type === PROGRESSTYPE.CHUNK) {\n that._addChunkProgressWrapper();\n } else {\n if (options.showStatus) {\n that.progressStatus = that.wrapper.prepend(templates.progressStatus).find('.' + KPROGRESSSTATUS);\n initialStatusValue = options.value !== false ? options.value : options.min;\n if (options.type === PROGRESSTYPE.VALUE) {\n that.progressStatus.text(initialStatusValue);\n } else {\n that.progressStatus.text(that._calculatePercentage(initialStatusValue).toFixed() + '%');\n }\n }\n }\n },\n value: function (value) {\n return this._value(value);\n },\n _value: function (value) {\n var that = this;\n var options = that.options;\n var validated;\n if (value === undefined) {\n return options.value;\n } else {\n if (typeof value !== BOOLEAN) {\n value = that._roundValue(value);\n if (!isNaN(value)) {\n validated = that._validateValue(value);\n if (validated !== options.value) {\n that.wrapper.removeClass(KPROGRESSBARINDETERMINATE);\n options.value = validated;\n that._isStarted = true;\n that._updateProgress();\n }\n }\n } else if (!value) {\n that.wrapper.addClass(KPROGRESSBARINDETERMINATE);\n options.value = false;\n }\n }\n },\n _roundValue: function (value) {\n value = parseFloat(value);\n var power = math.pow(10, PRECISION);\n return math.floor(value * power) / power;\n },\n _validateValue: function (value) {\n var that = this;\n var options = that.options;\n if (value !== false) {\n if (value <= options.min || value === true) {\n return options.min;\n } else if (value >= options.max) {\n return options.max;\n }\n } else if (value === false) {\n return false;\n }\n if (isNaN(that._roundValue(value))) {\n return options.min;\n }\n return value;\n },\n _updateProgress: function () {\n var that = this;\n var options = that.options;\n var percentage = that._calculatePercentage();\n if (options.type === PROGRESSTYPE.CHUNK) {\n that._updateChunks(percentage);\n that._onProgressUpdateAlways(options.value);\n } else {\n that._updateProgressWrapper(percentage);\n }\n },\n _updateChunks: function (percentage) {\n var that = this;\n var options = that.options;\n var chunkCount = options.chunkCount;\n var percentagesPerChunk = parseInt(HUNDREDPERCENT / chunkCount * 100, 10) / 100;\n var percentageParsed = parseInt(percentage * 100, 10) / 100;\n var completedChunksCount = math.floor(percentageParsed / percentagesPerChunk);\n var completedChunks;\n if (options.orientation === HORIZONTAL && !options.reverse || options.orientation === VERTICAL && options.reverse) {\n completedChunks = that.wrapper.find('li.k-item:lt(' + completedChunksCount + ')');\n } else {\n completedChunks = that.wrapper.find('li.k-item:gt(-' + (completedChunksCount + 1) + ')');\n }\n that.wrapper.find('.' + KCOMPLETEDCHUNK).removeClass(KCOMPLETEDCHUNK).addClass(KUPCOMINGCHUNK);\n completedChunks.removeClass(KUPCOMINGCHUNK).addClass(KCOMPLETEDCHUNK);\n },\n _updateProgressWrapper: function (percentage) {\n var that = this;\n var options = that.options;\n var progressWrapper = that.wrapper.find('.' + KPROGRESSWRAPPER);\n var animationDuration = that._isStarted ? that._animation.duration : 0;\n var animationCssOptions = {};\n if (progressWrapper.length === 0) {\n that._addRegularProgressWrapper();\n }\n animationCssOptions[that._progressProperty] = percentage + '%';\n that.progressWrapper.animate(animationCssOptions, {\n duration: animationDuration,\n start: proxy(that._onProgressAnimateStart, that),\n progress: proxy(that._onProgressAnimate, that),\n complete: proxy(that._onProgressAnimateComplete, that, options.value),\n always: proxy(that._onProgressUpdateAlways, that, options.value)\n });\n },\n _onProgressAnimateStart: function () {\n this.progressWrapper.show();\n },\n _onProgressAnimate: function (e) {\n var that = this;\n var options = that.options;\n var progressInPercent = parseFloat(e.elem.style[that._progressProperty], 10);\n var progressStatusWrapSize;\n if (options.showStatus) {\n progressStatusWrapSize = 10000 / parseFloat(that.progressWrapper[0].style[that._progressProperty]);\n that.progressWrapper.find('.k-progress-status-wrap').css(that._progressProperty, progressStatusWrapSize + '%');\n }\n if (options.type !== PROGRESSTYPE.CHUNK && progressInPercent <= 98) {\n that.progressWrapper.removeClass(KPROGRESSBARCOMPLETE);\n }\n },\n _onProgressAnimateComplete: function (currentValue) {\n var that = this;\n var options = that.options;\n var progressWrapperSize = parseFloat(that.progressWrapper[0].style[that._progressProperty]);\n var progressValue;\n if (options.type !== PROGRESSTYPE.CHUNK && progressWrapperSize > 98) {\n that.progressWrapper.addClass(KPROGRESSBARCOMPLETE);\n }\n if (options.showStatus) {\n if (options.type === PROGRESSTYPE.VALUE) {\n progressValue = currentValue;\n } else if (options.type == PROGRESSTYPE.PERCENT) {\n progressValue = that._calculatePercentage(currentValue).toFixed() + '%';\n } else {\n progressValue = math.floor(that._calculatePercentage(currentValue)) + '%';\n }\n that.progressStatus.text(progressValue);\n }\n if (currentValue === options.min) {\n that.progressWrapper.hide();\n }\n },\n _onProgressUpdateAlways: function (currentValue) {\n var that = this;\n var options = that.options;\n if (that._isStarted) {\n that.trigger(CHANGE, { value: currentValue });\n }\n if (currentValue === options.max && that._isStarted) {\n that.trigger(COMPLETE, { value: options.max });\n }\n },\n enable: function (enable) {\n var that = this;\n var options = that.options;\n options.enable = typeof enable === 'undefined' ? true : enable;\n that.wrapper.toggleClass(KSTATEDISABLED, !options.enable);\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n },\n _addChunkProgressWrapper: function () {\n var that = this;\n var options = that.options;\n var container = that.wrapper;\n var chunkSize = HUNDREDPERCENT / options.chunkCount;\n var html = '';\n if (options.chunkCount <= 1) {\n options.chunkCount = 1;\n }\n html += '<ul class=\\'k-reset\\'>';\n for (var i = options.chunkCount - 1; i >= 0; i--) {\n html += '<li class=\\'k-item k-state-default\\'></li>';\n }\n html += '</ul>';\n container.append(html).find('.k-item').css(that._progressProperty, chunkSize + '%').first().addClass('k-first').end().last().addClass('k-last');\n that._normalizeChunkSize();\n },\n _normalizeChunkSize: function () {\n var that = this;\n var options = that.options;\n var lastChunk = that.wrapper.find('.k-item:last');\n var currentSize = parseFloat(lastChunk[0].style[that._progressProperty]);\n var difference = HUNDREDPERCENT - options.chunkCount * currentSize;\n if (difference > 0) {\n lastChunk.css(that._progressProperty, currentSize + difference + '%');\n }\n },\n _addRegularProgressWrapper: function () {\n var that = this;\n that.progressWrapper = $('<div class=\\'' + KPROGRESSWRAPPER + '\\'></div>').appendTo(that.wrapper);\n if (that.options.showStatus) {\n that.progressWrapper.append(templates.progressStatus);\n that.progressStatus = that.wrapper.find('.' + KPROGRESSSTATUS);\n }\n },\n _calculateChunkSize: function () {\n var that = this;\n var chunkCount = that.options.chunkCount;\n var chunkContainer = that.wrapper.find('ul.k-reset');\n return (parseInt(chunkContainer.css(that._progressProperty), 10) - (chunkCount - 1)) / chunkCount;\n },\n _calculatePercentage: function (currentValue) {\n var that = this;\n var options = that.options;\n var value = currentValue !== undefined ? currentValue : options.value;\n var min = options.min;\n var max = options.max;\n that._onePercent = math.abs((max - min) / 100);\n return math.abs((value - min) / that._onePercent);\n },\n _progressAnimation: function () {\n var that = this;\n var options = that.options;\n var animation = options.animation;\n if (animation === false) {\n that._animation = { duration: 0 };\n } else {\n that._animation = extend({ duration: DEFAULTANIMATIONDURATION }, options.animation);\n }\n }\n });\n kendo.ui.plugin(ProgressBar);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('pdf/core', [\n 'kendo.core',\n 'kendo.color',\n 'kendo.drawing'\n ], f);\n}(function () {\n (function (kendo) {\n window.kendo.pdf = window.kendo.pdf || {};\n var support = kendo.support;\n var supportBrowser = support.browser;\n var drawing = kendo.drawing;\n var util = drawing.util;\n var kendoGeometry = kendo.geometry;\n var HAS_TYPED_ARRAYS$1 = typeof Uint8Array !== 'undefined';\n var BASE64 = function () {\n var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n return {\n decode: function (str) {\n var input = str.replace(/[^A-Za-z0-9\\+\\/\\=]/g, ''), i = 0, n = input.length, output = [];\n while (i < n) {\n var enc1 = keyStr.indexOf(input.charAt(i++));\n var enc2 = keyStr.indexOf(input.charAt(i++));\n var enc3 = keyStr.indexOf(input.charAt(i++));\n var enc4 = keyStr.indexOf(input.charAt(i++));\n var chr1 = enc1 << 2 | enc2 >>> 4;\n var chr2 = (enc2 & 15) << 4 | enc3 >>> 2;\n var chr3 = (enc3 & 3) << 6 | enc4;\n output.push(chr1);\n if (enc3 != 64) {\n output.push(chr2);\n }\n if (enc4 != 64) {\n output.push(chr3);\n }\n }\n return output;\n },\n encode: function (bytes) {\n var i = 0, n = bytes.length;\n var output = '';\n while (i < n) {\n var chr1 = bytes[i++];\n var chr2 = bytes[i++];\n var chr3 = bytes[i++];\n var enc1 = chr1 >>> 2;\n var enc2 = (chr1 & 3) << 4 | chr2 >>> 4;\n var enc3 = (chr2 & 15) << 2 | chr3 >>> 6;\n var enc4 = chr3 & 63;\n if (i - n == 2) {\n enc3 = enc4 = 64;\n } else if (i - n == 1) {\n enc4 = 64;\n }\n output += keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4);\n }\n return output;\n }\n };\n }();\n function BinaryStream(data) {\n var offset = 0, length = 0;\n if (data == null) {\n data = HAS_TYPED_ARRAYS$1 ? new Uint8Array(256) : [];\n } else {\n length = data.length;\n }\n var ensure = HAS_TYPED_ARRAYS$1 ? function (len) {\n if (len >= data.length) {\n var tmp = new Uint8Array(Math.max(len + 256, data.length * 2));\n tmp.set(data, 0);\n data = tmp;\n }\n } : function () {\n };\n var get = HAS_TYPED_ARRAYS$1 ? function () {\n return new Uint8Array(data.buffer, 0, length);\n } : function () {\n return data;\n };\n var write = HAS_TYPED_ARRAYS$1 ? function (bytes) {\n if (typeof bytes == 'string') {\n return writeString(bytes);\n }\n var len = bytes.length;\n ensure(offset + len);\n data.set(bytes, offset);\n offset += len;\n if (offset > length) {\n length = offset;\n }\n } : function (bytes) {\n if (typeof bytes == 'string') {\n return writeString(bytes);\n }\n for (var i = 0; i < bytes.length; ++i) {\n writeByte(bytes[i]);\n }\n };\n var slice = HAS_TYPED_ARRAYS$1 ? function (start, length) {\n if (data.buffer.slice) {\n return new Uint8Array(data.buffer.slice(start, start + length));\n } else {\n var x = new Uint8Array(length);\n x.set(new Uint8Array(data.buffer, start, length));\n return x;\n }\n } : function (start, length) {\n return data.slice(start, start + length);\n };\n function eof() {\n return offset >= length;\n }\n function readByte() {\n return offset < length ? data[offset++] : 0;\n }\n function writeByte(b) {\n ensure(offset);\n data[offset++] = b & 255;\n if (offset > length) {\n length = offset;\n }\n }\n function readShort() {\n return readByte() << 8 | readByte();\n }\n function writeShort(w) {\n writeByte(w >> 8);\n writeByte(w);\n }\n function readShort_() {\n var w = readShort();\n return w >= 32768 ? w - 65536 : w;\n }\n function writeShort_(w) {\n writeShort(w < 0 ? w + 65536 : w);\n }\n function readLong() {\n return readShort() * 65536 + readShort();\n }\n function writeLong(w) {\n writeShort(w >>> 16 & 65535);\n writeShort(w & 65535);\n }\n function readLong_() {\n var w = readLong();\n return w >= 2147483648 ? w - 4294967296 : w;\n }\n function writeLong_(w) {\n writeLong(w < 0 ? w + 4294967296 : w);\n }\n function readFixed() {\n return readLong() / 65536;\n }\n function writeFixed(f) {\n writeLong(Math.round(f * 65536));\n }\n function readFixed_() {\n return readLong_() / 65536;\n }\n function writeFixed_(f) {\n writeLong_(Math.round(f * 65536));\n }\n function read(len) {\n return times(len, readByte);\n }\n function readString(len) {\n return String.fromCharCode.apply(String, read(len));\n }\n function writeString(str) {\n for (var i = 0; i < str.length; ++i) {\n writeByte(str.charCodeAt(i));\n }\n }\n function times(n, reader) {\n for (var ret = new Array(n), i = 0; i < n; ++i) {\n ret[i] = reader();\n }\n return ret;\n }\n var stream = {\n eof: eof,\n readByte: readByte,\n writeByte: writeByte,\n readShort: readShort,\n writeShort: writeShort,\n readLong: readLong,\n writeLong: writeLong,\n readFixed: readFixed,\n writeFixed: writeFixed,\n readShort_: readShort_,\n writeShort_: writeShort_,\n readLong_: readLong_,\n writeLong_: writeLong_,\n readFixed_: readFixed_,\n writeFixed_: writeFixed_,\n read: read,\n write: write,\n readString: readString,\n writeString: writeString,\n times: times,\n get: get,\n slice: slice,\n offset: function (pos) {\n if (pos != null) {\n offset = pos;\n return stream;\n }\n return offset;\n },\n skip: function (nbytes) {\n offset += nbytes;\n },\n toString: function () {\n throw new Error('FIX CALLER. BinaryStream is no longer convertible to string!');\n },\n length: function () {\n return length;\n },\n saveExcursion: function (f) {\n var pos = offset;\n try {\n return f();\n } finally {\n offset = pos;\n }\n },\n writeBase64: function (base64) {\n if (window.atob) {\n writeString(window.atob(base64));\n } else {\n write(BASE64.decode(base64));\n }\n },\n base64: function () {\n return BASE64.encode(get());\n }\n };\n return stream;\n }\n function ucs2decode(string) {\n var output = [], counter = 0, length = string.length, value, extra;\n while (counter < length) {\n value = string.charCodeAt(counter++);\n if (value >= 55296 && value <= 56319 && counter < length) {\n extra = string.charCodeAt(counter++);\n if ((extra & 64512) == 56320) {\n output.push(((value & 1023) << 10) + (extra & 1023) + 65536);\n } else {\n output.push(value);\n counter--;\n }\n } else {\n output.push(value);\n }\n }\n return output;\n }\n function ucs2encode(array) {\n return array.map(function (value) {\n var output = '';\n if (value > 65535) {\n value -= 65536;\n output += String.fromCharCode(value >>> 10 & 1023 | 55296);\n value = 56320 | value & 1023;\n }\n output += String.fromCharCode(value);\n return output;\n }).join('');\n }\n function hasOwnProperty$1(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n }\n function sortedKeys(obj) {\n return Object.keys(obj).sort(function (a, b) {\n return a - b;\n }).map(parseFloat);\n }\n function Directory(data) {\n this.raw = data;\n this.scalerType = data.readLong();\n this.tableCount = data.readShort();\n this.searchRange = data.readShort();\n this.entrySelector = data.readShort();\n this.rangeShift = data.readShort();\n var tables = this.tables = {};\n for (var i = 0; i < this.tableCount; ++i) {\n var entry = {\n tag: data.readString(4),\n checksum: data.readLong(),\n offset: data.readLong(),\n length: data.readLong()\n };\n tables[entry.tag] = entry;\n }\n }\n Directory.prototype = {\n readTable: function (name, Ctor) {\n var def = this.tables[name];\n if (!def) {\n throw new Error('Table ' + name + ' not found in directory');\n }\n return this[name] = def.table = new Ctor(this, def);\n },\n render: function (tables) {\n var this$1 = this;\n var tableCount = Object.keys(tables).length;\n var maxpow2 = Math.pow(2, Math.floor(Math.log(tableCount) / Math.LN2));\n var searchRange = maxpow2 * 16;\n var entrySelector = Math.floor(Math.log(maxpow2) / Math.LN2);\n var rangeShift = tableCount * 16 - searchRange;\n var out = BinaryStream();\n out.writeLong(this.scalerType);\n out.writeShort(tableCount);\n out.writeShort(searchRange);\n out.writeShort(entrySelector);\n out.writeShort(rangeShift);\n var directoryLength = tableCount * 16;\n var offset = out.offset() + directoryLength;\n var headOffset = null;\n var tableData = BinaryStream();\n for (var tag in tables) {\n if (hasOwnProperty$1(tables, tag)) {\n var table = tables[tag];\n out.writeString(tag);\n out.writeLong(this$1.checksum(table));\n out.writeLong(offset);\n out.writeLong(table.length);\n tableData.write(table);\n if (tag == 'head') {\n headOffset = offset;\n }\n offset += table.length;\n while (offset % 4) {\n tableData.writeByte(0);\n offset++;\n }\n }\n }\n out.write(tableData.get());\n var sum = this.checksum(out.get());\n var adjustment = 2981146554 - sum;\n out.offset(headOffset + 8);\n out.writeLong(adjustment);\n return out.get();\n },\n checksum: function (data) {\n data = BinaryStream(data);\n var sum = 0;\n while (!data.eof()) {\n sum += data.readLong();\n }\n return sum & 4294967295;\n }\n };\n function deftable(methods) {\n function Ctor(file, def) {\n this.definition = def;\n this.length = def.length;\n this.offset = def.offset;\n this.file = file;\n this.rawData = file.raw;\n this.parse(file.raw);\n }\n Ctor.prototype.raw = function () {\n return this.rawData.slice(this.offset, this.length);\n };\n for (var i in methods) {\n if (hasOwnProperty$1(methods, i)) {\n Ctor[i] = Ctor.prototype[i] = methods[i];\n }\n }\n return Ctor;\n }\n var HeadTable = deftable({\n parse: function (data) {\n data.offset(this.offset);\n this.version = data.readLong();\n this.revision = data.readLong();\n this.checkSumAdjustment = data.readLong();\n this.magicNumber = data.readLong();\n this.flags = data.readShort();\n this.unitsPerEm = data.readShort();\n this.created = data.read(8);\n this.modified = data.read(8);\n this.xMin = data.readShort_();\n this.yMin = data.readShort_();\n this.xMax = data.readShort_();\n this.yMax = data.readShort_();\n this.macStyle = data.readShort();\n this.lowestRecPPEM = data.readShort();\n this.fontDirectionHint = data.readShort_();\n this.indexToLocFormat = data.readShort_();\n this.glyphDataFormat = data.readShort_();\n },\n render: function (indexToLocFormat) {\n var out = BinaryStream();\n out.writeLong(this.version);\n out.writeLong(this.revision);\n out.writeLong(0);\n out.writeLong(this.magicNumber);\n out.writeShort(this.flags);\n out.writeShort(this.unitsPerEm);\n out.write(this.created);\n out.write(this.modified);\n out.writeShort_(this.xMin);\n out.writeShort_(this.yMin);\n out.writeShort_(this.xMax);\n out.writeShort_(this.yMax);\n out.writeShort(this.macStyle);\n out.writeShort(this.lowestRecPPEM);\n out.writeShort_(this.fontDirectionHint);\n out.writeShort_(indexToLocFormat);\n out.writeShort_(this.glyphDataFormat);\n return out.get();\n }\n });\n var LocaTable = deftable({\n parse: function (data) {\n data.offset(this.offset);\n var format = this.file.head.indexToLocFormat;\n if (format === 0) {\n this.offsets = data.times(this.length / 2, function () {\n return 2 * data.readShort();\n });\n } else {\n this.offsets = data.times(this.length / 4, data.readLong);\n }\n },\n offsetOf: function (id) {\n return this.offsets[id];\n },\n lengthOf: function (id) {\n return this.offsets[id + 1] - this.offsets[id];\n },\n render: function (offsets) {\n var out = BinaryStream();\n var needsLongFormat = offsets[offsets.length - 1] > 65535;\n for (var i = 0; i < offsets.length; ++i) {\n if (needsLongFormat) {\n out.writeLong(offsets[i]);\n } else {\n out.writeShort(offsets[i] / 2);\n }\n }\n return {\n format: needsLongFormat ? 1 : 0,\n table: out.get()\n };\n }\n });\n var HheaTable = deftable({\n parse: function (data) {\n data.offset(this.offset);\n this.version = data.readLong();\n this.ascent = data.readShort_();\n this.descent = data.readShort_();\n this.lineGap = data.readShort_();\n this.advanceWidthMax = data.readShort();\n this.minLeftSideBearing = data.readShort_();\n this.minRightSideBearing = data.readShort_();\n this.xMaxExtent = data.readShort_();\n this.caretSlopeRise = data.readShort_();\n this.caretSlopeRun = data.readShort_();\n this.caretOffset = data.readShort_();\n data.skip(4 * 2);\n this.metricDataFormat = data.readShort_();\n this.numOfLongHorMetrics = data.readShort();\n },\n render: function (ids) {\n var out = BinaryStream();\n out.writeLong(this.version);\n out.writeShort_(this.ascent);\n out.writeShort_(this.descent);\n out.writeShort_(this.lineGap);\n out.writeShort(this.advanceWidthMax);\n out.writeShort_(this.minLeftSideBearing);\n out.writeShort_(this.minRightSideBearing);\n out.writeShort_(this.xMaxExtent);\n out.writeShort_(this.caretSlopeRise);\n out.writeShort_(this.caretSlopeRun);\n out.writeShort_(this.caretOffset);\n out.write([\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ]);\n out.writeShort_(this.metricDataFormat);\n out.writeShort(ids.length);\n return out.get();\n }\n });\n var MaxpTable = deftable({\n parse: function (data) {\n data.offset(this.offset);\n this.version = data.readLong();\n this.numGlyphs = data.readShort();\n this.maxPoints = data.readShort();\n this.maxContours = data.readShort();\n this.maxComponentPoints = data.readShort();\n this.maxComponentContours = data.readShort();\n this.maxZones = data.readShort();\n this.maxTwilightPoints = data.readShort();\n this.maxStorage = data.readShort();\n this.maxFunctionDefs = data.readShort();\n this.maxInstructionDefs = data.readShort();\n this.maxStackElements = data.readShort();\n this.maxSizeOfInstructions = data.readShort();\n this.maxComponentElements = data.readShort();\n this.maxComponentDepth = data.readShort();\n },\n render: function (glyphIds) {\n var out = BinaryStream();\n out.writeLong(this.version);\n out.writeShort(glyphIds.length);\n out.writeShort(this.maxPoints);\n out.writeShort(this.maxContours);\n out.writeShort(this.maxComponentPoints);\n out.writeShort(this.maxComponentContours);\n out.writeShort(this.maxZones);\n out.writeShort(this.maxTwilightPoints);\n out.writeShort(this.maxStorage);\n out.writeShort(this.maxFunctionDefs);\n out.writeShort(this.maxInstructionDefs);\n out.writeShort(this.maxStackElements);\n out.writeShort(this.maxSizeOfInstructions);\n out.writeShort(this.maxComponentElements);\n out.writeShort(this.maxComponentDepth);\n return out.get();\n }\n });\n var HmtxTable = deftable({\n parse: function (data) {\n data.offset(this.offset);\n var dir = this.file, hhea = dir.hhea;\n this.metrics = data.times(hhea.numOfLongHorMetrics, function () {\n return {\n advance: data.readShort(),\n lsb: data.readShort_()\n };\n });\n var lsbCount = dir.maxp.numGlyphs - dir.hhea.numOfLongHorMetrics;\n this.leftSideBearings = data.times(lsbCount, data.readShort_);\n },\n forGlyph: function (id) {\n var metrics = this.metrics;\n var n = metrics.length;\n if (id < n) {\n return metrics[id];\n }\n return {\n advance: metrics[n - 1].advance,\n lsb: this.leftSideBearings[id - n]\n };\n },\n render: function (glyphIds) {\n var this$1 = this;\n var out = BinaryStream();\n for (var i = 0; i < glyphIds.length; ++i) {\n var m = this$1.forGlyph(glyphIds[i]);\n out.writeShort(m.advance);\n out.writeShort_(m.lsb);\n }\n return out.get();\n }\n });\n var GlyfTable = function () {\n function SimpleGlyph(raw) {\n this.raw = raw;\n }\n SimpleGlyph.prototype = {\n compound: false,\n render: function () {\n return this.raw.get();\n }\n };\n var ARG_1_AND_2_ARE_WORDS = 1;\n var WE_HAVE_A_SCALE = 8;\n var MORE_COMPONENTS = 32;\n var WE_HAVE_AN_X_AND_Y_SCALE = 64;\n var WE_HAVE_A_TWO_BY_TWO = 128;\n function CompoundGlyph(data) {\n this.raw = data;\n var ids = this.glyphIds = [];\n var offsets = this.idOffsets = [];\n while (true) {\n var flags = data.readShort();\n offsets.push(data.offset());\n ids.push(data.readShort());\n if (!(flags & MORE_COMPONENTS)) {\n break;\n }\n data.skip(flags & ARG_1_AND_2_ARE_WORDS ? 4 : 2);\n if (flags & WE_HAVE_A_TWO_BY_TWO) {\n data.skip(8);\n } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\n data.skip(4);\n } else if (flags & WE_HAVE_A_SCALE) {\n data.skip(2);\n }\n }\n }\n CompoundGlyph.prototype = {\n compound: true,\n render: function (old2new) {\n var this$1 = this;\n var out = BinaryStream(this.raw.get());\n for (var i = 0; i < this.glyphIds.length; ++i) {\n var id = this$1.glyphIds[i];\n out.offset(this$1.idOffsets[i]);\n out.writeShort(old2new[id]);\n }\n return out.get();\n }\n };\n return deftable({\n parse: function () {\n this.cache = {};\n },\n glyphFor: function (id) {\n var cache = this.cache;\n if (hasOwnProperty$1(cache, id)) {\n return cache[id];\n }\n var loca = this.file.loca;\n var length = loca.lengthOf(id);\n if (length === 0) {\n return cache[id] = null;\n }\n var data = this.rawData;\n var offset = this.offset + loca.offsetOf(id);\n var raw = BinaryStream(data.slice(offset, length));\n var numberOfContours = raw.readShort_();\n var xMin = raw.readShort_();\n var yMin = raw.readShort_();\n var xMax = raw.readShort_();\n var yMax = raw.readShort_();\n var glyph = cache[id] = numberOfContours == -1 ? new CompoundGlyph(raw) : new SimpleGlyph(raw);\n glyph.numberOfContours = numberOfContours;\n glyph.xMin = xMin;\n glyph.yMin = yMin;\n glyph.xMax = xMax;\n glyph.yMax = yMax;\n return glyph;\n },\n render: function (glyphs, oldIds, old2new) {\n var out = BinaryStream(), offsets = [];\n for (var i = 0; i < oldIds.length; ++i) {\n var id = oldIds[i];\n var glyph = glyphs[id];\n offsets.push(out.offset());\n if (glyph) {\n out.write(glyph.render(old2new));\n }\n }\n offsets.push(out.offset());\n return {\n table: out.get(),\n offsets: offsets\n };\n }\n });\n }();\n var NameTable = function () {\n function NameEntry(text, entry) {\n this.text = text;\n this.length = text.length;\n this.platformID = entry.platformID;\n this.platformSpecificID = entry.platformSpecificID;\n this.languageID = entry.languageID;\n this.nameID = entry.nameID;\n }\n return deftable({\n parse: function (data) {\n data.offset(this.offset);\n data.readShort();\n var count = data.readShort();\n var stringOffset = this.offset + data.readShort();\n var nameRecords = data.times(count, function () {\n return {\n platformID: data.readShort(),\n platformSpecificID: data.readShort(),\n languageID: data.readShort(),\n nameID: data.readShort(),\n length: data.readShort(),\n offset: data.readShort() + stringOffset\n };\n });\n var strings = this.strings = {};\n for (var i = 0; i < nameRecords.length; ++i) {\n var rec = nameRecords[i];\n data.offset(rec.offset);\n var text = data.readString(rec.length);\n if (!strings[rec.nameID]) {\n strings[rec.nameID] = [];\n }\n strings[rec.nameID].push(new NameEntry(text, rec));\n }\n this.postscriptEntry = strings[6][0];\n this.postscriptName = this.postscriptEntry.text.replace(/[^\\x20-\\x7F]/g, '');\n },\n render: function (psName) {\n var this$1 = this;\n var strings = this.strings;\n var strCount = 0;\n for (var i in strings) {\n if (hasOwnProperty$1(strings, i)) {\n strCount += strings[i].length;\n }\n }\n var out = BinaryStream();\n var strTable = BinaryStream();\n out.writeShort(0);\n out.writeShort(strCount);\n out.writeShort(6 + 12 * strCount);\n for (i in strings) {\n if (hasOwnProperty$1(strings, i)) {\n var list = i == 6 ? [new NameEntry(psName, this$1.postscriptEntry)] : strings[i];\n for (var j = 0; j < list.length; ++j) {\n var str = list[j];\n out.writeShort(str.platformID);\n out.writeShort(str.platformSpecificID);\n out.writeShort(str.languageID);\n out.writeShort(str.nameID);\n out.writeShort(str.length);\n out.writeShort(strTable.offset());\n strTable.writeString(str.text);\n }\n }\n }\n out.write(strTable.get());\n return out.get();\n }\n });\n }();\n var PostTable = function () {\n var POSTSCRIPT_GLYPHS = '.notdef .null nonmarkingreturn space exclam quotedbl numbersign dollar percent ampersand quotesingle parenleft parenright asterisk plus comma hyphen period slash zero one two three four five six seven eight nine colon semicolon less equal greater question at A B C D E F G H I J K L M N O P Q R S T U V W X Y Z bracketleft backslash bracketright asciicircum underscore grave a b c d e f g h i j k l m n o p q r s t u v w x y z braceleft bar braceright asciitilde Adieresis Aring Ccedilla Eacute Ntilde Odieresis Udieresis aacute agrave acircumflex adieresis atilde aring ccedilla eacute egrave ecircumflex edieresis iacute igrave icircumflex idieresis ntilde oacute ograve ocircumflex odieresis otilde uacute ugrave ucircumflex udieresis dagger degree cent sterling section bullet paragraph germandbls registered copyright trademark acute dieresis notequal AE Oslash infinity plusminus lessequal greaterequal yen mu partialdiff summation product pi integral ordfeminine ordmasculine Omega ae oslash questiondown exclamdown logicalnot radical florin approxequal Delta guillemotleft guillemotright ellipsis nonbreakingspace Agrave Atilde Otilde OE oe endash emdash quotedblleft quotedblright quoteleft quoteright divide lozenge ydieresis Ydieresis fraction currency guilsinglleft guilsinglright fi fl daggerdbl periodcentered quotesinglbase quotedblbase perthousand Acircumflex Ecircumflex Aacute Edieresis Egrave Iacute Icircumflex Idieresis Igrave Oacute Ocircumflex apple Ograve Uacute Ucircumflex Ugrave dotlessi circumflex tilde macron breve dotaccent ring cedilla hungarumlaut ogonek caron Lslash lslash Scaron scaron Zcaron zcaron brokenbar Eth eth Yacute yacute Thorn thorn minus multiply onesuperior twosuperior threesuperior onehalf onequarter threequarters franc Gbreve gbreve Idotaccent Scedilla scedilla Cacute cacute Ccaron ccaron dcroat'.split(/\\s+/g);\n return deftable({\n parse: function (data) {\n var this$1 = this;\n data.offset(this.offset);\n this.format = data.readLong();\n this.italicAngle = data.readFixed_();\n this.underlinePosition = data.readShort_();\n this.underlineThickness = data.readShort_();\n this.isFixedPitch = data.readLong();\n this.minMemType42 = data.readLong();\n this.maxMemType42 = data.readLong();\n this.minMemType1 = data.readLong();\n this.maxMemType1 = data.readLong();\n var numberOfGlyphs;\n switch (this.format) {\n case 65536:\n case 196608:\n break;\n case 131072:\n numberOfGlyphs = data.readShort();\n this.glyphNameIndex = data.times(numberOfGlyphs, data.readShort);\n this.names = [];\n var limit = this.offset + this.length;\n while (data.offset() < limit) {\n this$1.names.push(data.readString(data.readByte()));\n }\n break;\n case 151552:\n numberOfGlyphs = data.readShort();\n this.offsets = data.read(numberOfGlyphs);\n break;\n case 262144:\n this.map = data.times(this.file.maxp.numGlyphs, data.readShort);\n break;\n }\n },\n glyphFor: function (code) {\n switch (this.format) {\n case 65536:\n return POSTSCRIPT_GLYPHS[code] || '.notdef';\n case 131072:\n var index = this.glyphNameIndex[code];\n if (index < POSTSCRIPT_GLYPHS.length) {\n return POSTSCRIPT_GLYPHS[index];\n }\n return this.names[index - POSTSCRIPT_GLYPHS.length] || '.notdef';\n case 151552:\n case 196608:\n return '.notdef';\n case 262144:\n return this.map[code] || 65535;\n }\n },\n render: function (mapping) {\n var this$1 = this;\n if (this.format == 196608) {\n return this.raw();\n }\n var out = BinaryStream(this.rawData.slice(this.offset, 32));\n out.writeLong(131072);\n out.offset(32);\n var indexes = [];\n var strings = [];\n for (var i = 0; i < mapping.length; ++i) {\n var id = mapping[i];\n var post = this$1.glyphFor(id);\n var index = POSTSCRIPT_GLYPHS.indexOf(post);\n if (index >= 0) {\n indexes.push(index);\n } else {\n indexes.push(POSTSCRIPT_GLYPHS.length + strings.length);\n strings.push(post);\n }\n }\n out.writeShort(mapping.length);\n for (i = 0; i < indexes.length; ++i) {\n out.writeShort(indexes[i]);\n }\n for (i = 0; i < strings.length; ++i) {\n out.writeByte(strings[i].length);\n out.writeString(strings[i]);\n }\n return out.get();\n }\n });\n }();\n var CmapTable = function () {\n function CmapEntry(data, offset, codeMap) {\n var self = this;\n self.platformID = data.readShort();\n self.platformSpecificID = data.readShort();\n self.offset = offset + data.readLong();\n data.saveExcursion(function () {\n var code;\n data.offset(self.offset);\n self.format = data.readShort();\n switch (self.format) {\n case 0:\n self.length = data.readShort();\n self.language = data.readShort();\n for (var i = 0; i < 256; ++i) {\n codeMap[i] = data.readByte();\n }\n break;\n case 4:\n self.length = data.readShort();\n self.language = data.readShort();\n var segCount = data.readShort() / 2;\n data.skip(6);\n var endCode = data.times(segCount, data.readShort);\n data.skip(2);\n var startCode = data.times(segCount, data.readShort);\n var idDelta = data.times(segCount, data.readShort_);\n var idRangeOffset = data.times(segCount, data.readShort);\n var count = (self.length + self.offset - data.offset()) / 2;\n var glyphIds = data.times(count, data.readShort);\n for (i = 0; i < segCount; ++i) {\n var start = startCode[i], end = endCode[i];\n for (code = start; code <= end; ++code) {\n var glyphId;\n if (idRangeOffset[i] === 0) {\n glyphId = code + idDelta[i];\n } else {\n var index = idRangeOffset[i] / 2 - (segCount - i) + (code - start);\n glyphId = glyphIds[index] || 0;\n if (glyphId !== 0) {\n glyphId += idDelta[i];\n }\n }\n codeMap[code] = glyphId & 65535;\n }\n }\n break;\n case 6:\n self.length = data.readShort();\n self.language = data.readShort();\n code = data.readShort();\n var length = data.readShort();\n while (length-- > 0) {\n codeMap[code++] = data.readShort();\n }\n break;\n case 12:\n data.readShort();\n self.length = data.readLong();\n self.language = data.readLong();\n var ngroups = data.readLong();\n while (ngroups-- > 0) {\n code = data.readLong();\n var endCharCode = data.readLong();\n var glyphCode = data.readLong();\n while (code <= endCharCode) {\n codeMap[code++] = glyphCode++;\n }\n }\n break;\n default:\n if (window.console) {\n window.console.error('Unhandled CMAP format: ' + self.format);\n }\n }\n });\n }\n function renderCharmap(ncid2ogid, ogid2ngid) {\n var codes = sortedKeys(ncid2ogid);\n var startCodes = [];\n var endCodes = [];\n var last = null;\n var diff = null;\n function new_gid(charcode) {\n return ogid2ngid[ncid2ogid[charcode]];\n }\n for (var i = 0; i < codes.length; ++i) {\n var code = codes[i];\n var gid = new_gid(code);\n var delta = gid - code;\n if (last == null || delta !== diff) {\n if (last) {\n endCodes.push(last);\n }\n startCodes.push(code);\n diff = delta;\n }\n last = code;\n }\n if (last) {\n endCodes.push(last);\n }\n endCodes.push(65535);\n startCodes.push(65535);\n var segCount = startCodes.length;\n var segCountX2 = segCount * 2;\n var searchRange = 2 * Math.pow(2, Math.floor(Math.log(segCount) / Math.LN2));\n var entrySelector = Math.log(searchRange / 2) / Math.LN2;\n var rangeShift = segCountX2 - searchRange;\n var deltas = [];\n var rangeOffsets = [];\n var glyphIds = [];\n for (i = 0; i < segCount; ++i) {\n var startCode = startCodes[i];\n var endCode = endCodes[i];\n if (startCode == 65535) {\n deltas.push(0);\n rangeOffsets.push(0);\n break;\n }\n var startGlyph = new_gid(startCode);\n if (startCode - startGlyph >= 32768) {\n deltas.push(0);\n rangeOffsets.push(2 * (glyphIds.length + segCount - i));\n for (var j = startCode; j <= endCode; ++j) {\n glyphIds.push(new_gid(j));\n }\n } else {\n deltas.push(startGlyph - startCode);\n rangeOffsets.push(0);\n }\n }\n var out = BinaryStream();\n out.writeShort(3);\n out.writeShort(1);\n out.writeLong(12);\n out.writeShort(4);\n out.writeShort(16 + segCount * 8 + glyphIds.length * 2);\n out.writeShort(0);\n out.writeShort(segCountX2);\n out.writeShort(searchRange);\n out.writeShort(entrySelector);\n out.writeShort(rangeShift);\n endCodes.forEach(out.writeShort);\n out.writeShort(0);\n startCodes.forEach(out.writeShort);\n deltas.forEach(out.writeShort_);\n rangeOffsets.forEach(out.writeShort);\n glyphIds.forEach(out.writeShort);\n return out.get();\n }\n return deftable({\n parse: function (data) {\n var self = this;\n var offset = self.offset;\n data.offset(offset);\n self.codeMap = {};\n self.version = data.readShort();\n var tableCount = data.readShort();\n self.tables = data.times(tableCount, function () {\n return new CmapEntry(data, offset, self.codeMap);\n });\n },\n render: function (ncid2ogid, ogid2ngid) {\n var out = BinaryStream();\n out.writeShort(0);\n out.writeShort(1);\n out.write(renderCharmap(ncid2ogid, ogid2ngid));\n return out.get();\n }\n });\n }();\n var OS2Table = deftable({\n parse: function (data) {\n data.offset(this.offset);\n this.version = data.readShort();\n this.averageCharWidth = data.readShort_();\n this.weightClass = data.readShort();\n this.widthClass = data.readShort();\n this.type = data.readShort();\n this.ySubscriptXSize = data.readShort_();\n this.ySubscriptYSize = data.readShort_();\n this.ySubscriptXOffset = data.readShort_();\n this.ySubscriptYOffset = data.readShort_();\n this.ySuperscriptXSize = data.readShort_();\n this.ySuperscriptYSize = data.readShort_();\n this.ySuperscriptXOffset = data.readShort_();\n this.ySuperscriptYOffset = data.readShort_();\n this.yStrikeoutSize = data.readShort_();\n this.yStrikeoutPosition = data.readShort_();\n this.familyClass = data.readShort_();\n this.panose = data.times(10, data.readByte);\n this.charRange = data.times(4, data.readLong);\n this.vendorID = data.readString(4);\n this.selection = data.readShort();\n this.firstCharIndex = data.readShort();\n this.lastCharIndex = data.readShort();\n if (this.version > 0) {\n this.ascent = data.readShort_();\n this.descent = data.readShort_();\n this.lineGap = data.readShort_();\n this.winAscent = data.readShort();\n this.winDescent = data.readShort();\n this.codePageRange = data.times(2, data.readLong);\n if (this.version > 1) {\n this.xHeight = data.readShort();\n this.capHeight = data.readShort();\n this.defaultChar = data.readShort();\n this.breakChar = data.readShort();\n this.maxContext = data.readShort();\n }\n }\n },\n render: function () {\n return this.raw();\n }\n });\n var subsetTag = 100000;\n function nextSubsetTag() {\n var ret = '', n = String(subsetTag);\n for (var i = 0; i < n.length; ++i) {\n ret += String.fromCharCode(n.charCodeAt(i) - 48 + 65);\n }\n ++subsetTag;\n return ret;\n }\n function Subfont(font) {\n this.font = font;\n this.subset = {};\n this.unicodes = {};\n this.ogid2ngid = { 0: 0 };\n this.ngid2ogid = { 0: 0 };\n this.ncid2ogid = {};\n this.next = this.firstChar = 1;\n this.nextGid = 1;\n this.psName = nextSubsetTag() + '+' + this.font.psName;\n }\n Subfont.prototype = {\n use: function (ch) {\n var self = this;\n if (typeof ch == 'string') {\n return ucs2decode(ch).reduce(function (ret, code) {\n return ret + String.fromCharCode(self.use(code));\n }, '');\n }\n var code = self.unicodes[ch];\n if (!code) {\n code = self.next++;\n self.subset[code] = ch;\n self.unicodes[ch] = code;\n var old_gid = self.font.cmap.codeMap[ch];\n if (old_gid) {\n self.ncid2ogid[code] = old_gid;\n if (self.ogid2ngid[old_gid] == null) {\n var new_gid = self.nextGid++;\n self.ogid2ngid[old_gid] = new_gid;\n self.ngid2ogid[new_gid] = old_gid;\n }\n }\n }\n return code;\n },\n encodeText: function (text) {\n return this.use(text);\n },\n glyphIds: function () {\n return sortedKeys(this.ogid2ngid);\n },\n glyphsFor: function (glyphIds, result) {\n var this$1 = this;\n if (!result) {\n result = {};\n }\n for (var i = 0; i < glyphIds.length; ++i) {\n var id = glyphIds[i];\n if (!result[id]) {\n var glyph = result[id] = this$1.font.glyf.glyphFor(id);\n if (glyph && glyph.compound) {\n this$1.glyphsFor(glyph.glyphIds, result);\n }\n }\n }\n return result;\n },\n render: function () {\n var this$1 = this;\n var glyphs = this.glyphsFor(this.glyphIds());\n for (var old_gid in glyphs) {\n if (hasOwnProperty$1(glyphs, old_gid)) {\n old_gid = parseInt(old_gid, 10);\n if (this$1.ogid2ngid[old_gid] == null) {\n var new_gid = this$1.nextGid++;\n this$1.ogid2ngid[old_gid] = new_gid;\n this$1.ngid2ogid[new_gid] = old_gid;\n }\n }\n }\n var new_gid_ids = sortedKeys(this.ngid2ogid);\n var old_gid_ids = new_gid_ids.map(function (id) {\n return this.ngid2ogid[id];\n }, this);\n var font = this.font;\n var glyf = font.glyf.render(glyphs, old_gid_ids, this.ogid2ngid);\n var loca = font.loca.render(glyf.offsets);\n this.lastChar = this.next - 1;\n var tables = {\n 'cmap': CmapTable.render(this.ncid2ogid, this.ogid2ngid),\n 'glyf': glyf.table,\n 'loca': loca.table,\n 'hmtx': font.hmtx.render(old_gid_ids),\n 'hhea': font.hhea.render(old_gid_ids),\n 'maxp': font.maxp.render(old_gid_ids),\n 'post': font.post.render(old_gid_ids),\n 'name': font.name.render(this.psName),\n 'head': font.head.render(loca.format),\n 'OS/2': font.os2.render()\n };\n return this.font.directory.render(tables);\n },\n cidToGidMap: function () {\n var this$1 = this;\n var out = BinaryStream(), len = 0;\n for (var cid = this.firstChar; cid < this.next; ++cid) {\n while (len < cid) {\n out.writeShort(0);\n len++;\n }\n var old_gid = this$1.ncid2ogid[cid];\n if (old_gid) {\n var new_gid = this$1.ogid2ngid[old_gid];\n out.writeShort(new_gid);\n } else {\n out.writeShort(0);\n }\n len++;\n }\n return out.get();\n }\n };\n function TTFFont(rawData, name) {\n var self = this;\n var data = self.contents = BinaryStream(rawData);\n if (data.readString(4) == 'ttcf') {\n var offset;\n var parse = function () {\n data.offset(offset);\n self.parse();\n };\n if (!name) {\n throw new Error('Must specify a name for TTC files');\n }\n data.readLong();\n var numFonts = data.readLong();\n for (var i = 0; i < numFonts; ++i) {\n offset = data.readLong();\n data.saveExcursion(parse);\n if (self.psName == name) {\n return;\n }\n }\n throw new Error('Font ' + name + ' not found in collection');\n } else {\n data.offset(0);\n self.parse();\n }\n }\n TTFFont.prototype = {\n parse: function () {\n var dir = this.directory = new Directory(this.contents);\n this.head = dir.readTable('head', HeadTable);\n this.loca = dir.readTable('loca', LocaTable);\n this.hhea = dir.readTable('hhea', HheaTable);\n this.maxp = dir.readTable('maxp', MaxpTable);\n this.hmtx = dir.readTable('hmtx', HmtxTable);\n this.glyf = dir.readTable('glyf', GlyfTable);\n this.name = dir.readTable('name', NameTable);\n this.post = dir.readTable('post', PostTable);\n this.cmap = dir.readTable('cmap', CmapTable);\n this.os2 = dir.readTable('OS/2', OS2Table);\n this.psName = this.name.postscriptName;\n this.ascent = this.os2.ascent || this.hhea.ascent;\n this.descent = this.os2.descent || this.hhea.descent;\n this.lineGap = this.os2.lineGap || this.hhea.lineGap;\n this.scale = 1000 / this.head.unitsPerEm;\n },\n widthOfGlyph: function (glyph) {\n return this.hmtx.forGlyph(glyph).advance * this.scale;\n },\n makeSubset: function () {\n return new Subfont(this);\n }\n };\n var browser = kendo.support.browser;\n var HAS_TYPED_ARRAYS = typeof Uint8Array !== 'undefined';\n var NL = '\\n';\n var RESOURCE_COUNTER = 0;\n var PAPER_SIZE = {\n a0: [\n 2383.94,\n 3370.39\n ],\n a1: [\n 1683.78,\n 2383.94\n ],\n a2: [\n 1190.55,\n 1683.78\n ],\n a3: [\n 841.89,\n 1190.55\n ],\n a4: [\n 595.28,\n 841.89\n ],\n a5: [\n 419.53,\n 595.28\n ],\n a6: [\n 297.64,\n 419.53\n ],\n a7: [\n 209.76,\n 297.64\n ],\n a8: [\n 147.4,\n 209.76\n ],\n a9: [\n 104.88,\n 147.4\n ],\n a10: [\n 73.7,\n 104.88\n ],\n b0: [\n 2834.65,\n 4008.19\n ],\n b1: [\n 2004.09,\n 2834.65\n ],\n b2: [\n 1417.32,\n 2004.09\n ],\n b3: [\n 1000.63,\n 1417.32\n ],\n b4: [\n 708.66,\n 1000.63\n ],\n b5: [\n 498.9,\n 708.66\n ],\n b6: [\n 354.33,\n 498.9\n ],\n b7: [\n 249.45,\n 354.33\n ],\n b8: [\n 175.75,\n 249.45\n ],\n b9: [\n 124.72,\n 175.75\n ],\n b10: [\n 87.87,\n 124.72\n ],\n c0: [\n 2599.37,\n 3676.54\n ],\n c1: [\n 1836.85,\n 2599.37\n ],\n c2: [\n 1298.27,\n 1836.85\n ],\n c3: [\n 918.43,\n 1298.27\n ],\n c4: [\n 649.13,\n 918.43\n ],\n c5: [\n 459.21,\n 649.13\n ],\n c6: [\n 323.15,\n 459.21\n ],\n c7: [\n 229.61,\n 323.15\n ],\n c8: [\n 161.57,\n 229.61\n ],\n c9: [\n 113.39,\n 161.57\n ],\n c10: [\n 79.37,\n 113.39\n ],\n executive: [\n 521.86,\n 756\n ],\n folio: [\n 612,\n 936\n ],\n legal: [\n 612,\n 1008\n ],\n letter: [\n 612,\n 792\n ],\n tabloid: [\n 792,\n 1224\n ]\n };\n function makeOutput() {\n var indentLevel = 0, output = BinaryStream();\n function out() {\n var arguments$1 = arguments;\n for (var i = 0; i < arguments.length; ++i) {\n var x = arguments$1[i];\n if (x === undefined) {\n throw new Error('Cannot output undefined to PDF');\n } else if (x instanceof PDFValue) {\n x.beforeRender(out);\n x.render(out);\n } else if (isArray(x)) {\n renderArray(x, out);\n } else if (isDate(x)) {\n renderDate(x, out);\n } else if (typeof x == 'number') {\n if (isNaN(x)) {\n throw new Error('Cannot output NaN to PDF');\n }\n var num = x.toFixed(7);\n if (num.indexOf('.') >= 0) {\n num = num.replace(/\\.?0+$/, '');\n }\n if (num == '-0') {\n num = '0';\n }\n output.writeString(num);\n } else if (/string|boolean/.test(typeof x)) {\n output.writeString(String(x));\n } else if (typeof x.get == 'function') {\n output.write(x.get());\n } else if (typeof x == 'object') {\n if (!x) {\n output.writeString('null');\n } else {\n out(new PDFDictionary(x));\n }\n }\n }\n }\n out.writeData = function (data) {\n output.write(data);\n };\n out.withIndent = function (f) {\n ++indentLevel;\n f(out);\n --indentLevel;\n };\n out.indent = function () {\n out(NL, pad('', indentLevel * 2, ' '));\n out.apply(null, arguments);\n };\n out.offset = function () {\n return output.offset();\n };\n out.toString = function () {\n throw new Error('FIX CALLER');\n };\n out.get = function () {\n return output.get();\n };\n out.stream = function () {\n return output;\n };\n return out;\n }\n function wrapObject(value, id) {\n var beforeRender = value.beforeRender;\n var renderValue = value.render;\n value.beforeRender = function () {\n };\n value.render = function (out) {\n out(id, ' 0 R');\n };\n value.renderFull = function (out) {\n value._offset = out.offset();\n out(id, ' 0 obj ');\n beforeRender.call(value, out);\n renderValue.call(value, out);\n out(' endobj');\n };\n }\n function getPaperOptions(getOption) {\n if (typeof getOption != 'function') {\n var options = getOption;\n getOption = function (key, def) {\n return key in options ? options[key] : def;\n };\n }\n var paperSize = getOption('paperSize', PAPER_SIZE.a4);\n if (!paperSize) {\n return {};\n }\n if (typeof paperSize == 'string') {\n paperSize = PAPER_SIZE[paperSize.toLowerCase()];\n if (paperSize == null) {\n throw new Error('Unknown paper size');\n }\n }\n paperSize[0] = unitsToPoints(paperSize[0]);\n paperSize[1] = unitsToPoints(paperSize[1]);\n if (getOption('landscape', false)) {\n paperSize = [\n Math.max(paperSize[0], paperSize[1]),\n Math.min(paperSize[0], paperSize[1])\n ];\n }\n var margin = getOption('margin');\n if (margin) {\n if (typeof margin == 'string' || typeof margin == 'number') {\n margin = unitsToPoints(margin, 0);\n margin = {\n left: margin,\n top: margin,\n right: margin,\n bottom: margin\n };\n } else {\n margin = {\n left: unitsToPoints(margin.left, 0),\n top: unitsToPoints(margin.top, 0),\n right: unitsToPoints(margin.right, 0),\n bottom: unitsToPoints(margin.bottom, 0)\n };\n }\n if (getOption('addMargin')) {\n paperSize[0] += margin.left + margin.right;\n paperSize[1] += margin.top + margin.bottom;\n }\n }\n return {\n paperSize: paperSize,\n margin: margin\n };\n }\n function PDFDocument(options) {\n var self = this;\n var out = makeOutput();\n var objcount = 0;\n var objects = [];\n function getOption(name, defval) {\n return options && options[name] != null ? options[name] : defval;\n }\n self.getOption = getOption;\n self.attach = function (value) {\n if (objects.indexOf(value) < 0) {\n wrapObject(value, ++objcount);\n objects.push(value);\n }\n return value;\n };\n self.pages = [];\n self.FONTS = {};\n self.IMAGES = {};\n self.GRAD_COL_FUNCTIONS = {};\n self.GRAD_OPC_FUNCTIONS = {};\n self.GRAD_COL = {};\n self.GRAD_OPC = {};\n var catalog = self.attach(new PDFCatalog());\n var pageTree = self.attach(new PDFPageTree());\n catalog.setPages(pageTree);\n self.addPage = function (options) {\n var paperOptions = getPaperOptions(function (name, defval) {\n return options && options[name] != null ? options[name] : defval;\n });\n var paperSize = paperOptions.paperSize;\n var margin = paperOptions.margin;\n var contentWidth = paperSize[0];\n var contentHeight = paperSize[1];\n if (margin) {\n contentWidth -= margin.left + margin.right;\n contentHeight -= margin.top + margin.bottom;\n }\n var content = new PDFStream(makeOutput(), null, true);\n var props = {\n Contents: self.attach(content),\n Parent: pageTree,\n MediaBox: [\n 0,\n 0,\n paperSize[0],\n paperSize[1]\n ]\n };\n var page = new PDFPage(self, props);\n page._content = content;\n pageTree.addPage(self.attach(page));\n page.transform(1, 0, 0, -1, 0, paperSize[1]);\n if (margin) {\n page.translate(margin.left, margin.top);\n page.rect(0, 0, contentWidth, contentHeight);\n page.clip();\n }\n self.pages.push(page);\n return page;\n };\n self.render = function () {\n var i;\n out('%PDF-1.4', NL, '%ÂÃÚÃÃŽ', NL, NL);\n for (i = 0; i < objects.length; ++i) {\n objects[i].renderFull(out);\n out(NL, NL);\n }\n var xrefOffset = out.offset();\n out('xref', NL, 0, ' ', objects.length + 1, NL);\n out('0000000000 65535 f ', NL);\n for (i = 0; i < objects.length; ++i) {\n out(zeropad(objects[i]._offset, 10), ' 00000 n ', NL);\n }\n out(NL);\n out('trailer', NL);\n out(new PDFDictionary({\n Size: objects.length + 1,\n Root: catalog,\n Info: new PDFDictionary({\n Producer: new PDFString(getOption('producer', 'Kendo UI PDF Generator')),\n Title: new PDFString(getOption('title', '')),\n Author: new PDFString(getOption('author', '')),\n Subject: new PDFString(getOption('subject', '')),\n Keywords: new PDFString(getOption('keywords', '')),\n Creator: new PDFString(getOption('creator', 'Kendo UI PDF Generator')),\n CreationDate: getOption('date', new Date())\n })\n }), NL, NL);\n out('startxref', NL, xrefOffset, NL);\n out('%%EOF', NL);\n return out.stream().offset(0);\n };\n }\n var FONT_CACHE = {\n 'Times-Roman': true,\n 'Times-Bold': true,\n 'Times-Italic': true,\n 'Times-BoldItalic': true,\n 'Helvetica': true,\n 'Helvetica-Bold': true,\n 'Helvetica-Oblique': true,\n 'Helvetica-BoldOblique': true,\n 'Courier': true,\n 'Courier-Bold': true,\n 'Courier-Oblique': true,\n 'Courier-BoldOblique': true,\n 'Symbol': true,\n 'ZapfDingbats': true\n };\n function loadBinary(url, cont) {\n function error() {\n if (window.console) {\n if (window.console.error) {\n window.console.error('Cannot load URL: %s', url);\n } else {\n window.console.log('Cannot load URL: %s', url);\n }\n }\n cont(null);\n }\n var req = new XMLHttpRequest();\n req.open('GET', url, true);\n if (HAS_TYPED_ARRAYS) {\n req.responseType = 'arraybuffer';\n }\n req.onload = function () {\n if (req.status == 200 || req.status == 304) {\n if (HAS_TYPED_ARRAYS) {\n cont(new Uint8Array(req.response));\n } else {\n cont(new window.VBArray(req.responseBody).toArray());\n }\n } else {\n error();\n }\n };\n req.onerror = error;\n req.send(null);\n }\n function loadFont(url, cont) {\n var font = FONT_CACHE[url];\n if (font) {\n cont(font);\n } else {\n loadBinary(url, function (data) {\n if (data == null) {\n throw new Error('Cannot load font from ' + url);\n } else {\n var font = new TTFFont(data);\n FONT_CACHE[url] = font;\n cont(font);\n }\n });\n }\n }\n var IMAGE_CACHE = {};\n function loadImage(url, cont) {\n var img = IMAGE_CACHE[url], bloburl, blob;\n if (img) {\n cont(img);\n } else {\n img = new Image();\n if (!/^data:/i.test(url)) {\n img.crossOrigin = 'Anonymous';\n }\n if (HAS_TYPED_ARRAYS && !/^data:/i.test(url)) {\n var xhr = new XMLHttpRequest();\n xhr.onload = function () {\n blob = xhr.response;\n bloburl = URL.createObjectURL(blob);\n _load(bloburl);\n };\n xhr.onerror = _onerror;\n xhr.open('GET', url, true);\n xhr.responseType = 'blob';\n xhr.send();\n } else {\n _load(url);\n }\n }\n function _load(url) {\n img.src = url;\n if (img.complete && !browser.msie) {\n _onload();\n } else {\n img.onload = _onload;\n img.onerror = _onerror;\n }\n }\n function _onerror() {\n cont(IMAGE_CACHE[url] = 'TAINTED');\n }\n function _onload() {\n if (blob && /^image\\/jpe?g$/i.test(blob.type)) {\n var reader = new FileReader();\n reader.onload = function () {\n img = new PDFJpegImage(img.width, img.height, BinaryStream(new Uint8Array(this.result)));\n URL.revokeObjectURL(bloburl);\n cont(IMAGE_CACHE[url] = img);\n };\n reader.readAsArrayBuffer(blob);\n return;\n }\n var canvas = document.createElement('canvas');\n canvas.width = img.width;\n canvas.height = img.height;\n var ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0);\n var imgdata;\n try {\n imgdata = ctx.getImageData(0, 0, img.width, img.height);\n } catch (ex) {\n _onerror();\n return;\n } finally {\n if (bloburl) {\n URL.revokeObjectURL(bloburl);\n }\n }\n var hasAlpha = false, rgb = BinaryStream(), alpha = BinaryStream();\n var rawbytes = imgdata.data;\n var i = 0;\n while (i < rawbytes.length) {\n rgb.writeByte(rawbytes[i++]);\n rgb.writeByte(rawbytes[i++]);\n rgb.writeByte(rawbytes[i++]);\n var a = rawbytes[i++];\n if (a < 255) {\n hasAlpha = true;\n }\n alpha.writeByte(a);\n }\n if (hasAlpha) {\n img = new PDFRawImage(img.width, img.height, rgb, alpha);\n } else {\n var data = canvas.toDataURL('image/jpeg');\n data = data.substr(data.indexOf(';base64,') + 8);\n var stream = BinaryStream();\n stream.writeBase64(data);\n stream.offset(0);\n img = new PDFJpegImage(img.width, img.height, stream);\n }\n cont(IMAGE_CACHE[url] = img);\n }\n }\n function manyLoader(loadOne) {\n return function (urls, callback) {\n var n = urls.length, i = n;\n if (n === 0) {\n return callback();\n }\n function next() {\n if (--n === 0) {\n callback();\n }\n }\n while (i-- > 0) {\n loadOne(urls[i], next);\n }\n };\n }\n var loadFonts = manyLoader(loadFont);\n var loadImages = manyLoader(loadImage);\n PDFDocument.prototype = {\n loadFonts: loadFonts,\n loadImages: loadImages,\n getFont: function (url) {\n var font = this.FONTS[url];\n if (!font) {\n font = FONT_CACHE[url];\n if (!font) {\n throw new Error('Font ' + url + ' has not been loaded');\n }\n if (font === true) {\n font = this.attach(new PDFStandardFont(url));\n } else {\n font = this.attach(new PDFFont(this, font));\n }\n this.FONTS[url] = font;\n }\n return font;\n },\n getImage: function (url) {\n var img = this.IMAGES[url];\n if (!img) {\n img = IMAGE_CACHE[url];\n if (!img) {\n throw new Error('Image ' + url + ' has not been loaded');\n }\n if (img === 'TAINTED') {\n return null;\n }\n img = this.IMAGES[url] = this.attach(img.asStream(this));\n }\n return img;\n },\n getOpacityGS: function (opacity, forStroke) {\n var id = parseFloat(opacity).toFixed(3);\n opacity = parseFloat(id);\n id += forStroke ? 'S' : 'F';\n var cache = this._opacityGSCache || (this._opacityGSCache = {});\n var gs = cache[id];\n if (!gs) {\n var props = { Type: _('ExtGState') };\n if (forStroke) {\n props.CA = opacity;\n } else {\n props.ca = opacity;\n }\n gs = this.attach(new PDFDictionary(props));\n gs._resourceName = _('GS' + ++RESOURCE_COUNTER);\n cache[id] = gs;\n }\n return gs;\n },\n dict: function (props) {\n return new PDFDictionary(props);\n },\n name: function (str) {\n return _(str);\n },\n stream: function (props, content) {\n return new PDFStream(content, props);\n }\n };\n function pad(str, len, ch) {\n while (str.length < len) {\n str = ch + str;\n }\n return str;\n }\n function zeropad(n, len) {\n return pad(String(n), len, '0');\n }\n function hasOwnProperty(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n }\n var isArray = Array.isArray || function (obj) {\n return obj instanceof Array;\n };\n function isDate(obj) {\n return obj instanceof Date;\n }\n function renderArray(a, out) {\n out('[');\n if (a.length > 0) {\n out.withIndent(function () {\n for (var i = 0; i < a.length; ++i) {\n if (i > 0 && i % 8 === 0) {\n out.indent(a[i]);\n } else {\n out(' ', a[i]);\n }\n }\n });\n }\n out(' ]');\n }\n function renderDate(date, out) {\n out('(D:', zeropad(date.getUTCFullYear(), 4), zeropad(date.getUTCMonth() + 1, 2), zeropad(date.getUTCDate(), 2), zeropad(date.getUTCHours(), 2), zeropad(date.getUTCMinutes(), 2), zeropad(date.getUTCSeconds(), 2), 'Z)');\n }\n function mm2pt(mm) {\n return mm * (72 / 25.4);\n }\n function cm2pt(cm) {\n return mm2pt(cm * 10);\n }\n function in2pt(inch) {\n return inch * 72;\n }\n function unitsToPoints(x, def) {\n if (typeof x == 'number') {\n return x;\n }\n if (typeof x == 'string') {\n var m;\n m = /^\\s*([0-9.]+)\\s*(mm|cm|in|pt)\\s*$/.exec(x);\n if (m) {\n var num = parseFloat(m[1]);\n if (!isNaN(num)) {\n if (m[2] == 'pt') {\n return num;\n }\n return {\n 'mm': mm2pt,\n 'cm': cm2pt,\n 'in': in2pt\n }[m[2]](num);\n }\n }\n }\n if (def != null) {\n return def;\n }\n throw new Error('Can\\'t parse unit: ' + x);\n }\n function PDFValue() {\n }\n PDFValue.prototype.beforeRender = function () {\n };\n function defclass(Ctor, proto, Base) {\n if (!Base) {\n Base = PDFValue;\n }\n Ctor.prototype = new Base();\n for (var i in proto) {\n if (hasOwnProperty(proto, i)) {\n Ctor.prototype[i] = proto[i];\n }\n }\n return Ctor;\n }\n var PDFString = defclass(function PDFString(value) {\n this.value = value;\n }, {\n render: function (out) {\n var txt = '', val = this.value;\n for (var i = 0; i < val.length; ++i) {\n txt += String.fromCharCode(val.charCodeAt(i) & 255);\n }\n out('(', txt.replace(/([\\(\\)\\\\])/g, '\\\\$1'), ')');\n },\n toString: function () {\n return this.value;\n }\n });\n var PDFHexString = defclass(function PDFHexString(value) {\n this.value = value;\n }, {\n render: function (out) {\n var this$1 = this;\n out('<');\n for (var i = 0; i < this.value.length; ++i) {\n out(zeropad(this$1.value.charCodeAt(i).toString(16), 4));\n }\n out('>');\n }\n }, PDFString);\n var PDFName = defclass(function PDFName(name) {\n this.name = name;\n }, {\n render: function (out) {\n out('/' + this.escape());\n },\n escape: function () {\n return this.name.replace(/[^\\x21-\\x7E]/g, function (c) {\n return '#' + zeropad(c.charCodeAt(0).toString(16), 2);\n });\n },\n toString: function () {\n return this.name;\n }\n });\n var PDFName_cache = {};\n PDFName.get = _;\n function _(name) {\n if (hasOwnProperty(PDFName_cache, name)) {\n return PDFName_cache[name];\n }\n return PDFName_cache[name] = new PDFName(name);\n }\n var PDFDictionary = defclass(function PDFDictionary(props) {\n this.props = props;\n }, {\n render: function (out) {\n var props = this.props, empty = true;\n out('<<');\n out.withIndent(function () {\n for (var i in props) {\n if (hasOwnProperty(props, i) && !/^_/.test(i)) {\n empty = false;\n out.indent(_(i), ' ', props[i]);\n }\n }\n });\n if (!empty) {\n out.indent();\n }\n out('>>');\n }\n });\n var PDFStream = defclass(function PDFStream(data, props, compress) {\n if (typeof data == 'string') {\n var tmp = BinaryStream();\n tmp.write(data);\n data = tmp;\n }\n this.data = data;\n this.props = props || {};\n this.compress = compress;\n }, {\n render: function (out) {\n var data = this.data.get(), props = this.props;\n if (this.compress && window.pako && typeof window.pako.deflate == 'function') {\n if (!props.Filter) {\n props.Filter = [];\n } else if (!(props.Filter instanceof Array)) {\n props.Filter = [props.Filter];\n }\n props.Filter.unshift(_('FlateDecode'));\n data = window.pako.deflate(data);\n }\n props.Length = data.length;\n out(new PDFDictionary(props), ' stream', NL);\n out.writeData(data);\n out(NL, 'endstream');\n }\n });\n var PDFCatalog = defclass(function PDFCatalog(props) {\n props = this.props = props || {};\n props.Type = _('Catalog');\n }, {\n setPages: function (pagesObj) {\n this.props.Pages = pagesObj;\n }\n }, PDFDictionary);\n var PDFPageTree = defclass(function PDFPageTree() {\n this.props = {\n Type: _('Pages'),\n Kids: [],\n Count: 0\n };\n }, {\n addPage: function (pageObj) {\n this.props.Kids.push(pageObj);\n this.props.Count++;\n }\n }, PDFDictionary);\n function PDFJpegImage(width, height, data) {\n this.asStream = function () {\n var stream = new PDFStream(data, {\n Type: _('XObject'),\n Subtype: _('Image'),\n Width: width,\n Height: height,\n BitsPerComponent: 8,\n ColorSpace: _('DeviceRGB'),\n Filter: _('DCTDecode')\n });\n stream._resourceName = _('I' + ++RESOURCE_COUNTER);\n return stream;\n };\n }\n function PDFRawImage(width, height, rgb, alpha) {\n this.asStream = function (pdf) {\n var mask = new PDFStream(alpha, {\n Type: _('XObject'),\n Subtype: _('Image'),\n Width: width,\n Height: height,\n BitsPerComponent: 8,\n ColorSpace: _('DeviceGray')\n }, true);\n var stream = new PDFStream(rgb, {\n Type: _('XObject'),\n Subtype: _('Image'),\n Width: width,\n Height: height,\n BitsPerComponent: 8,\n ColorSpace: _('DeviceRGB'),\n SMask: pdf.attach(mask)\n }, true);\n stream._resourceName = _('I' + ++RESOURCE_COUNTER);\n return stream;\n };\n }\n var PDFStandardFont = defclass(function PDFStandardFont(name) {\n this.props = {\n Type: _('Font'),\n Subtype: _('Type1'),\n BaseFont: _(name)\n };\n this._resourceName = _('F' + ++RESOURCE_COUNTER);\n }, {\n encodeText: function (str) {\n return new PDFString(String(str));\n }\n }, PDFDictionary);\n var PDFFont = defclass(function PDFFont(pdf, font, props) {\n props = this.props = props || {};\n props.Type = _('Font');\n props.Subtype = _('Type0');\n props.Encoding = _('Identity-H');\n this._pdf = pdf;\n this._font = font;\n this._sub = font.makeSubset();\n this._resourceName = _('F' + ++RESOURCE_COUNTER);\n var head = font.head;\n this.name = font.psName;\n var scale = this.scale = font.scale;\n this.bbox = [\n head.xMin * scale,\n head.yMin * scale,\n head.xMax * scale,\n head.yMax * scale\n ];\n this.italicAngle = font.post.italicAngle;\n this.ascent = font.ascent * scale;\n this.descent = font.descent * scale;\n this.lineGap = font.lineGap * scale;\n this.capHeight = font.os2.capHeight || this.ascent;\n this.xHeight = font.os2.xHeight || 0;\n this.stemV = 0;\n this.familyClass = (font.os2.familyClass || 0) >> 8;\n this.isSerif = this.familyClass >= 1 && this.familyClass <= 7;\n this.isScript = this.familyClass == 10;\n this.flags = (font.post.isFixedPitch ? 1 : 0) | (this.isSerif ? 1 << 1 : 0) | (this.isScript ? 1 << 3 : 0) | (this.italicAngle !== 0 ? 1 << 6 : 0) | 1 << 5;\n }, {\n encodeText: function (text) {\n return new PDFHexString(this._sub.encodeText(String(text)));\n },\n getTextWidth: function (fontSize, text) {\n var this$1 = this;\n var width = 0, codeMap = this._font.cmap.codeMap;\n for (var i = 0; i < text.length; ++i) {\n var glyphId = codeMap[text.charCodeAt(i)];\n width += this$1._font.widthOfGlyph(glyphId || 0);\n }\n return width * fontSize / 1000;\n },\n beforeRender: function () {\n var self = this;\n var sub = self._sub;\n var data = sub.render();\n var fontStream = new PDFStream(BinaryStream(data), { Length1: data.length }, true);\n var descriptor = self._pdf.attach(new PDFDictionary({\n Type: _('FontDescriptor'),\n FontName: _(self._sub.psName),\n FontBBox: self.bbox,\n Flags: self.flags,\n StemV: self.stemV,\n ItalicAngle: self.italicAngle,\n Ascent: self.ascent,\n Descent: self.descent,\n CapHeight: self.capHeight,\n XHeight: self.xHeight,\n FontFile2: self._pdf.attach(fontStream)\n }));\n var cmap = sub.ncid2ogid;\n var firstChar = sub.firstChar;\n var lastChar = sub.lastChar;\n var charWidths = [];\n (function loop(i, chunk) {\n if (i <= lastChar) {\n var gid = cmap[i];\n if (gid == null) {\n loop(i + 1);\n } else {\n if (!chunk) {\n charWidths.push(i, chunk = []);\n }\n chunk.push(self._font.widthOfGlyph(gid));\n loop(i + 1, chunk);\n }\n }\n }(firstChar));\n var descendant = new PDFDictionary({\n Type: _('Font'),\n Subtype: _('CIDFontType2'),\n BaseFont: _(self._sub.psName),\n CIDSystemInfo: new PDFDictionary({\n Registry: new PDFString('Adobe'),\n Ordering: new PDFString('Identity'),\n Supplement: 0\n }),\n FontDescriptor: descriptor,\n FirstChar: firstChar,\n LastChar: lastChar,\n DW: Math.round(self._font.widthOfGlyph(0)),\n W: charWidths,\n CIDToGIDMap: self._pdf.attach(self._makeCidToGidMap())\n });\n var dict = self.props;\n dict.BaseFont = _(self._sub.psName);\n dict.DescendantFonts = [self._pdf.attach(descendant)];\n var unimap = new PDFToUnicodeCmap(firstChar, lastChar, sub.subset);\n var unimapStream = new PDFStream(makeOutput(), null, true);\n unimapStream.data(unimap);\n dict.ToUnicode = self._pdf.attach(unimapStream);\n },\n _makeCidToGidMap: function () {\n return new PDFStream(BinaryStream(this._sub.cidToGidMap()), null, true);\n }\n }, PDFDictionary);\n var PDFToUnicodeCmap = defclass(function PDFUnicodeCMap(firstChar, lastChar, map) {\n this.firstChar = firstChar;\n this.lastChar = lastChar;\n this.map = map;\n }, {\n render: function (out) {\n out.indent('/CIDInit /ProcSet findresource begin');\n out.indent('12 dict begin');\n out.indent('begincmap');\n out.indent('/CIDSystemInfo <<');\n out.indent(' /Registry (Adobe)');\n out.indent(' /Ordering (UCS)');\n out.indent(' /Supplement 0');\n out.indent('>> def');\n out.indent('/CMapName /Adobe-Identity-UCS def');\n out.indent('/CMapType 2 def');\n out.indent('1 begincodespacerange');\n out.indent(' <0000><ffff>');\n out.indent('endcodespacerange');\n var self = this;\n out.indent(self.lastChar - self.firstChar + 1, ' beginbfchar');\n out.withIndent(function () {\n for (var code = self.firstChar; code <= self.lastChar; ++code) {\n var unicode = self.map[code];\n var str = ucs2encode([unicode]);\n out.indent('<', zeropad(code.toString(16), 4), '>', '<');\n for (var i = 0; i < str.length; ++i) {\n out(zeropad(str.charCodeAt(i).toString(16), 4));\n }\n out('>');\n }\n });\n out.indent('endbfchar');\n out.indent('endcmap');\n out.indent('CMapName currentdict /CMap defineresource pop');\n out.indent('end');\n out.indent('end');\n }\n });\n function makeHash(a) {\n return a.map(function (x) {\n return isArray(x) ? makeHash(x) : typeof x == 'number' ? (Math.round(x * 1000) / 1000).toFixed(3) : x;\n }).join(' ');\n }\n function cacheColorGradientFunction(pdf, r1, g1, b1, r2, g2, b2) {\n var hash = makeHash([\n r1,\n g1,\n b1,\n r2,\n g2,\n b2\n ]);\n var func = pdf.GRAD_COL_FUNCTIONS[hash];\n if (!func) {\n func = pdf.GRAD_COL_FUNCTIONS[hash] = pdf.attach(new PDFDictionary({\n FunctionType: 2,\n Domain: [\n 0,\n 1\n ],\n Range: [\n 0,\n 1,\n 0,\n 1,\n 0,\n 1\n ],\n N: 1,\n C0: [\n r1,\n g1,\n b1\n ],\n C1: [\n r2,\n g2,\n b2\n ]\n }));\n }\n return func;\n }\n function cacheOpacityGradientFunction(pdf, a1, a2) {\n var hash = makeHash([\n a1,\n a2\n ]);\n var func = pdf.GRAD_OPC_FUNCTIONS[hash];\n if (!func) {\n func = pdf.GRAD_OPC_FUNCTIONS[hash] = pdf.attach(new PDFDictionary({\n FunctionType: 2,\n Domain: [\n 0,\n 1\n ],\n Range: [\n 0,\n 1\n ],\n N: 1,\n C0: [a1],\n C1: [a2]\n }));\n }\n return func;\n }\n function makeGradientFunctions(pdf, stops) {\n var hasAlpha = false;\n var opacities = [];\n var colors = [];\n var offsets = [];\n var encode = [];\n var i, prev, cur, prevColor, curColor;\n for (i = 1; i < stops.length; ++i) {\n prev = stops[i - 1];\n cur = stops[i];\n prevColor = prev.color;\n curColor = cur.color;\n colors.push(cacheColorGradientFunction(pdf, prevColor.r, prevColor.g, prevColor.b, curColor.r, curColor.g, curColor.b));\n if (prevColor.a < 1 || curColor.a < 1) {\n hasAlpha = true;\n }\n offsets.push(cur.offset);\n encode.push(0, 1);\n }\n if (hasAlpha) {\n for (i = 1; i < stops.length; ++i) {\n prev = stops[i - 1];\n cur = stops[i];\n prevColor = prev.color;\n curColor = cur.color;\n opacities.push(cacheOpacityGradientFunction(pdf, prevColor.a, curColor.a));\n }\n }\n offsets.pop();\n return {\n hasAlpha: hasAlpha,\n colors: assemble(colors),\n opacities: hasAlpha ? assemble(opacities) : null\n };\n function assemble(funcs) {\n if (funcs.length == 1) {\n return funcs[0];\n }\n return {\n FunctionType: 3,\n Functions: funcs,\n Domain: [\n 0,\n 1\n ],\n Bounds: offsets,\n Encode: encode\n };\n }\n }\n function cacheColorGradient(pdf, isRadial, stops, coords, funcs, box) {\n var shading, hash;\n if (!box) {\n var a = [isRadial].concat(coords);\n stops.forEach(function (x) {\n a.push(x.offset, x.color.r, x.color.g, x.color.b);\n });\n hash = makeHash(a);\n shading = pdf.GRAD_COL[hash];\n }\n if (!shading) {\n shading = new PDFDictionary({\n Type: _('Shading'),\n ShadingType: isRadial ? 3 : 2,\n ColorSpace: _('DeviceRGB'),\n Coords: coords,\n Domain: [\n 0,\n 1\n ],\n Function: funcs,\n Extend: [\n true,\n true\n ]\n });\n pdf.attach(shading);\n shading._resourceName = 'S' + ++RESOURCE_COUNTER;\n if (hash) {\n pdf.GRAD_COL[hash] = shading;\n }\n }\n return shading;\n }\n function cacheOpacityGradient(pdf, isRadial, stops, coords, funcs, box) {\n var opacity, hash;\n if (!box) {\n var a = [isRadial].concat(coords);\n stops.forEach(function (x) {\n a.push(x.offset, x.color.a);\n });\n hash = makeHash(a);\n opacity = pdf.GRAD_OPC[hash];\n }\n if (!opacity) {\n opacity = new PDFDictionary({\n Type: _('ExtGState'),\n AIS: false,\n CA: 1,\n ca: 1,\n SMask: {\n Type: _('Mask'),\n S: _('Luminosity'),\n G: pdf.attach(new PDFStream('/a0 gs /s0 sh', {\n Type: _('XObject'),\n Subtype: _('Form'),\n FormType: 1,\n BBox: box ? [\n box.left,\n box.top + box.height,\n box.left + box.width,\n box.top\n ] : [\n 0,\n 1,\n 1,\n 0\n ],\n Group: {\n Type: _('Group'),\n S: _('Transparency'),\n CS: _('DeviceGray'),\n I: true\n },\n Resources: {\n ExtGState: {\n a0: {\n CA: 1,\n ca: 1\n }\n },\n Shading: {\n s0: {\n ColorSpace: _('DeviceGray'),\n Coords: coords,\n Domain: [\n 0,\n 1\n ],\n ShadingType: isRadial ? 3 : 2,\n Function: funcs,\n Extend: [\n true,\n true\n ]\n }\n }\n }\n }))\n }\n });\n pdf.attach(opacity);\n opacity._resourceName = 'O' + ++RESOURCE_COUNTER;\n if (hash) {\n pdf.GRAD_OPC[hash] = opacity;\n }\n }\n return opacity;\n }\n function cacheGradient(pdf, gradient, box) {\n var isRadial = gradient.type == 'radial';\n var funcs = makeGradientFunctions(pdf, gradient.stops);\n var coords = isRadial ? [\n gradient.start.x,\n gradient.start.y,\n gradient.start.r,\n gradient.end.x,\n gradient.end.y,\n gradient.end.r\n ] : [\n gradient.start.x,\n gradient.start.y,\n gradient.end.x,\n gradient.end.y\n ];\n var shading = cacheColorGradient(pdf, isRadial, gradient.stops, coords, funcs.colors, gradient.userSpace && box);\n var opacity = funcs.hasAlpha ? cacheOpacityGradient(pdf, isRadial, gradient.stops, coords, funcs.opacities, gradient.userSpace && box) : null;\n return {\n hasAlpha: funcs.hasAlpha,\n shading: shading,\n opacity: opacity\n };\n }\n var PDFPage = defclass(function PDFPage(pdf, props) {\n this._pdf = pdf;\n this._rcount = 0;\n this._textMode = false;\n this._fontResources = {};\n this._gsResources = {};\n this._xResources = {};\n this._patResources = {};\n this._shResources = {};\n this._opacity = 1;\n this._matrix = [\n 1,\n 0,\n 0,\n 1,\n 0,\n 0\n ];\n this._annotations = [];\n this._font = null;\n this._fontSize = null;\n this._contextStack = [];\n props = this.props = props || {};\n props.Type = _('Page');\n props.ProcSet = [\n _('PDF'),\n _('Text'),\n _('ImageB'),\n _('ImageC'),\n _('ImageI')\n ];\n props.Resources = new PDFDictionary({\n Font: new PDFDictionary(this._fontResources),\n ExtGState: new PDFDictionary(this._gsResources),\n XObject: new PDFDictionary(this._xResources),\n Pattern: new PDFDictionary(this._patResources),\n Shading: new PDFDictionary(this._shResources)\n });\n props.Annots = this._annotations;\n }, {\n _out: function () {\n this._content.data.apply(null, arguments);\n },\n transform: function (a, b, c, d, e, f) {\n if (!isIdentityMatrix(arguments)) {\n this._matrix = mmul(arguments, this._matrix);\n this._out(a, ' ', b, ' ', c, ' ', d, ' ', e, ' ', f, ' cm');\n this._out(NL);\n }\n },\n translate: function (dx, dy) {\n this.transform(1, 0, 0, 1, dx, dy);\n },\n scale: function (sx, sy) {\n this.transform(sx, 0, 0, sy, 0, 0);\n },\n rotate: function (angle) {\n var cos = Math.cos(angle), sin = Math.sin(angle);\n this.transform(cos, sin, -sin, cos, 0, 0);\n },\n beginText: function () {\n this._textMode = true;\n this._out('BT', NL);\n },\n endText: function () {\n this._textMode = false;\n this._out('ET', NL);\n },\n _requireTextMode: function () {\n if (!this._textMode) {\n throw new Error('Text mode required; call page.beginText() first');\n }\n },\n _requireFont: function () {\n if (!this._font) {\n throw new Error('No font selected; call page.setFont() first');\n }\n },\n setFont: function (font, size) {\n this._requireTextMode();\n if (font == null) {\n font = this._font;\n } else if (!(font instanceof PDFFont)) {\n font = this._pdf.getFont(font);\n }\n if (size == null) {\n size = this._fontSize;\n }\n this._fontResources[font._resourceName] = font;\n this._font = font;\n this._fontSize = size;\n this._out(font._resourceName, ' ', size, ' Tf', NL);\n },\n setTextLeading: function (size) {\n this._requireTextMode();\n this._out(size, ' TL', NL);\n },\n setTextRenderingMode: function (mode) {\n this._requireTextMode();\n this._out(mode, ' Tr', NL);\n },\n showText: function (text, requestedWidth) {\n this._requireFont();\n if (text.length > 1 && requestedWidth && this._font instanceof PDFFont) {\n var outputWidth = this._font.getTextWidth(this._fontSize, text);\n var scale = requestedWidth / outputWidth * 100;\n this._out(scale, ' Tz ');\n }\n this._out(this._font.encodeText(text), ' Tj', NL);\n },\n showTextNL: function (text) {\n this._requireFont();\n this._out(this._font.encodeText(text), ' \\'', NL);\n },\n addLink: function (uri, box) {\n var ll = this._toPage({\n x: box.left,\n y: box.bottom\n });\n var ur = this._toPage({\n x: box.right,\n y: box.top\n });\n this._annotations.push(new PDFDictionary({\n Type: _('Annot'),\n Subtype: _('Link'),\n Rect: [\n ll.x,\n ll.y,\n ur.x,\n ur.y\n ],\n Border: [\n 0,\n 0,\n 0\n ],\n A: new PDFDictionary({\n Type: _('Action'),\n S: _('URI'),\n URI: new PDFString(uri)\n })\n }));\n },\n setStrokeColor: function (r, g, b) {\n this._out(r, ' ', g, ' ', b, ' RG', NL);\n },\n setOpacity: function (opacity) {\n this.setFillOpacity(opacity);\n this.setStrokeOpacity(opacity);\n this._opacity *= opacity;\n },\n setStrokeOpacity: function (opacity) {\n if (opacity < 1) {\n var gs = this._pdf.getOpacityGS(this._opacity * opacity, true);\n this._gsResources[gs._resourceName] = gs;\n this._out(gs._resourceName, ' gs', NL);\n }\n },\n setFillColor: function (r, g, b) {\n this._out(r, ' ', g, ' ', b, ' rg', NL);\n },\n setFillOpacity: function (opacity) {\n if (opacity < 1) {\n var gs = this._pdf.getOpacityGS(this._opacity * opacity, false);\n this._gsResources[gs._resourceName] = gs;\n this._out(gs._resourceName, ' gs', NL);\n }\n },\n gradient: function (gradient, box) {\n this.save();\n this.rect(box.left, box.top, box.width, box.height);\n this.clip();\n if (!gradient.userSpace) {\n this.transform(box.width, 0, 0, box.height, box.left, box.top);\n }\n var g = cacheGradient(this._pdf, gradient, box);\n var sname = g.shading._resourceName, oname;\n this._shResources[sname] = g.shading;\n if (g.hasAlpha) {\n oname = g.opacity._resourceName;\n this._gsResources[oname] = g.opacity;\n this._out('/' + oname + ' gs ');\n }\n this._out('/' + sname + ' sh', NL);\n this.restore();\n },\n setDashPattern: function (dashArray, dashPhase) {\n this._out(dashArray, ' ', dashPhase, ' d', NL);\n },\n setLineWidth: function (width) {\n this._out(width, ' w', NL);\n },\n setLineCap: function (lineCap) {\n this._out(lineCap, ' J', NL);\n },\n setLineJoin: function (lineJoin) {\n this._out(lineJoin, ' j', NL);\n },\n setMitterLimit: function (mitterLimit) {\n this._out(mitterLimit, ' M', NL);\n },\n save: function () {\n this._contextStack.push(this._context());\n this._out('q', NL);\n },\n restore: function () {\n this._out('Q', NL);\n this._context(this._contextStack.pop());\n },\n moveTo: function (x, y) {\n this._out(x, ' ', y, ' m', NL);\n },\n lineTo: function (x, y) {\n this._out(x, ' ', y, ' l', NL);\n },\n bezier: function (x1, y1, x2, y2, x3, y3) {\n this._out(x1, ' ', y1, ' ', x2, ' ', y2, ' ', x3, ' ', y3, ' c', NL);\n },\n bezier1: function (x1, y1, x3, y3) {\n this._out(x1, ' ', y1, ' ', x3, ' ', y3, ' y', NL);\n },\n bezier2: function (x2, y2, x3, y3) {\n this._out(x2, ' ', y2, ' ', x3, ' ', y3, ' v', NL);\n },\n close: function () {\n this._out('h', NL);\n },\n rect: function (x, y, w, h) {\n this._out(x, ' ', y, ' ', w, ' ', h, ' re', NL);\n },\n ellipse: function (x, y, rx, ry) {\n function _X(v) {\n return x + v;\n }\n function _Y(v) {\n return y + v;\n }\n var k = 0.5522847498307936;\n this.moveTo(_X(0), _Y(ry));\n this.bezier(_X(rx * k), _Y(ry), _X(rx), _Y(ry * k), _X(rx), _Y(0));\n this.bezier(_X(rx), _Y(-ry * k), _X(rx * k), _Y(-ry), _X(0), _Y(-ry));\n this.bezier(_X(-rx * k), _Y(-ry), _X(-rx), _Y(-ry * k), _X(-rx), _Y(0));\n this.bezier(_X(-rx), _Y(ry * k), _X(-rx * k), _Y(ry), _X(0), _Y(ry));\n },\n circle: function (x, y, r) {\n this.ellipse(x, y, r, r);\n },\n stroke: function () {\n this._out('S', NL);\n },\n nop: function () {\n this._out('n', NL);\n },\n clip: function () {\n this._out('W n', NL);\n },\n clipStroke: function () {\n this._out('W S', NL);\n },\n closeStroke: function () {\n this._out('s', NL);\n },\n fill: function () {\n this._out('f', NL);\n },\n fillStroke: function () {\n this._out('B', NL);\n },\n drawImage: function (url) {\n var img = this._pdf.getImage(url);\n if (img) {\n this._xResources[img._resourceName] = img;\n this._out(img._resourceName, ' Do', NL);\n }\n },\n comment: function (txt) {\n var self = this;\n txt.split(/\\r?\\n/g).forEach(function (line) {\n self._out('% ', line, NL);\n });\n },\n _context: function (val) {\n if (val != null) {\n this._opacity = val.opacity;\n this._matrix = val.matrix;\n } else {\n return {\n opacity: this._opacity,\n matrix: this._matrix\n };\n }\n },\n _toPage: function (p) {\n var m = this._matrix;\n var a = m[0], b = m[1], c = m[2], d = m[3], e = m[4], f = m[5];\n return {\n x: a * p.x + c * p.y + e,\n y: b * p.x + d * p.y + f\n };\n }\n }, PDFDictionary);\n function unquote(str) {\n return str.replace(/^\\s*(['\"])(.*)\\1\\s*$/, '$2');\n }\n function parseFontDef(fontdef) {\n var rx = /^\\s*((normal|italic)\\s+)?((normal|small-caps)\\s+)?((normal|bold|\\d+)\\s+)?(([0-9.]+)(px|pt))(\\/(([0-9.]+)(px|pt)|normal))?\\s+(.*?)\\s*$/i;\n var m = rx.exec(fontdef);\n if (!m) {\n return {\n fontSize: 12,\n fontFamily: 'sans-serif'\n };\n }\n var fontSize = m[8] ? parseInt(m[8], 10) : 12;\n return {\n italic: m[2] && m[2].toLowerCase() == 'italic',\n variant: m[4],\n bold: m[6] && /bold|700/i.test(m[6]),\n fontSize: fontSize,\n lineHeight: m[12] ? m[12] == 'normal' ? fontSize : parseInt(m[12], 10) : null,\n fontFamily: m[14].split(/\\s*,\\s*/g).map(unquote)\n };\n }\n function getFontURL(style) {\n function mkFamily(name) {\n if (style.bold) {\n name += '|bold';\n }\n if (style.italic) {\n name += '|italic';\n }\n return name.toLowerCase();\n }\n var fontFamily = style.fontFamily;\n var name, url;\n if (fontFamily instanceof Array) {\n for (var i = 0; i < fontFamily.length; ++i) {\n name = mkFamily(fontFamily[i]);\n url = FONT_MAPPINGS[name];\n if (url) {\n break;\n }\n }\n } else {\n url = FONT_MAPPINGS[fontFamily.toLowerCase()];\n }\n while (typeof url == 'function') {\n url = url();\n }\n if (!url) {\n url = 'Times-Roman';\n }\n return url;\n }\n var FONT_MAPPINGS = {\n 'serif': 'Times-Roman',\n 'serif|bold': 'Times-Bold',\n 'serif|italic': 'Times-Italic',\n 'serif|bold|italic': 'Times-BoldItalic',\n 'sans-serif': 'Helvetica',\n 'sans-serif|bold': 'Helvetica-Bold',\n 'sans-serif|italic': 'Helvetica-Oblique',\n 'sans-serif|bold|italic': 'Helvetica-BoldOblique',\n 'monospace': 'Courier',\n 'monospace|bold': 'Courier-Bold',\n 'monospace|italic': 'Courier-Oblique',\n 'monospace|bold|italic': 'Courier-BoldOblique',\n 'zapfdingbats': 'ZapfDingbats',\n 'zapfdingbats|bold': 'ZapfDingbats',\n 'zapfdingbats|italic': 'ZapfDingbats',\n 'zapfdingbats|bold|italic': 'ZapfDingbats'\n };\n function fontAlias(alias, name) {\n alias = alias.toLowerCase();\n FONT_MAPPINGS[alias] = function () {\n return FONT_MAPPINGS[name];\n };\n FONT_MAPPINGS[alias + '|bold'] = function () {\n return FONT_MAPPINGS[name + '|bold'];\n };\n FONT_MAPPINGS[alias + '|italic'] = function () {\n return FONT_MAPPINGS[name + '|italic'];\n };\n FONT_MAPPINGS[alias + '|bold|italic'] = function () {\n return FONT_MAPPINGS[name + '|bold|italic'];\n };\n }\n fontAlias('Times New Roman', 'serif');\n fontAlias('Courier New', 'monospace');\n fontAlias('Arial', 'sans-serif');\n fontAlias('Helvetica', 'sans-serif');\n fontAlias('Verdana', 'sans-serif');\n fontAlias('Tahoma', 'sans-serif');\n fontAlias('Georgia', 'sans-serif');\n fontAlias('Monaco', 'monospace');\n fontAlias('Andale Mono', 'monospace');\n function defineFont(name, url) {\n if (arguments.length == 1) {\n for (var i in name) {\n if (hasOwnProperty(name, i)) {\n defineFont(i, name[i]);\n }\n }\n } else {\n name = name.toLowerCase();\n FONT_MAPPINGS[name] = url;\n switch (name) {\n case 'dejavu sans':\n FONT_MAPPINGS['sans-serif'] = url;\n break;\n case 'dejavu sans|bold':\n FONT_MAPPINGS['sans-serif|bold'] = url;\n break;\n case 'dejavu sans|italic':\n FONT_MAPPINGS['sans-serif|italic'] = url;\n break;\n case 'dejavu sans|bold|italic':\n FONT_MAPPINGS['sans-serif|bold|italic'] = url;\n break;\n case 'dejavu serif':\n FONT_MAPPINGS['serif'] = url;\n break;\n case 'dejavu serif|bold':\n FONT_MAPPINGS['serif|bold'] = url;\n break;\n case 'dejavu serif|italic':\n FONT_MAPPINGS['serif|italic'] = url;\n break;\n case 'dejavu serif|bold|italic':\n FONT_MAPPINGS['serif|bold|italic'] = url;\n break;\n case 'dejavu mono':\n FONT_MAPPINGS['monospace'] = url;\n break;\n case 'dejavu mono|bold':\n FONT_MAPPINGS['monospace|bold'] = url;\n break;\n case 'dejavu mono|italic':\n FONT_MAPPINGS['monospace|italic'] = url;\n break;\n case 'dejavu mono|bold|italic':\n FONT_MAPPINGS['monospace|bold|italic'] = url;\n break;\n }\n }\n }\n function mmul(a, b) {\n var a1 = a[0], b1 = a[1], c1 = a[2], d1 = a[3], e1 = a[4], f1 = a[5];\n var a2 = b[0], b2 = b[1], c2 = b[2], d2 = b[3], e2 = b[4], f2 = b[5];\n return [\n a1 * a2 + b1 * c2,\n a1 * b2 + b1 * d2,\n c1 * a2 + d1 * c2,\n c1 * b2 + d1 * d2,\n e1 * a2 + f1 * c2 + e2,\n e1 * b2 + f1 * d2 + f2\n ];\n }\n function isIdentityMatrix(m) {\n return m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1 && m[4] === 0 && m[5] === 0;\n }\n var TEXT_RENDERING_MODE = {\n fill: 0,\n stroke: 1,\n fillAndStroke: 2,\n invisible: 3,\n fillAndClip: 4,\n strokeAndClip: 5,\n fillStrokeClip: 6,\n clip: 7\n };\n var TEXT_RENDERING_MODE$1 = TEXT_RENDERING_MODE;\n var DASH_PATTERNS = {\n dash: [4],\n dashDot: [\n 4,\n 2,\n 1,\n 2\n ],\n dot: [\n 1,\n 2\n ],\n longDash: [\n 8,\n 2\n ],\n longDashDot: [\n 8,\n 2,\n 1,\n 2\n ],\n longDashDotDot: [\n 8,\n 2,\n 1,\n 2,\n 1,\n 2\n ],\n solid: []\n };\n var LINE_CAP = {\n butt: 0,\n round: 1,\n square: 2\n };\n var LINE_JOIN = {\n miter: 0,\n round: 1,\n bevel: 2\n };\n function render(group, callback) {\n var fonts = [], images = [], options = group.options;\n function getOption(name, defval, hash) {\n if (!hash) {\n hash = options;\n }\n if (hash.pdf && hash.pdf[name] != null) {\n return hash.pdf[name];\n }\n return defval;\n }\n var multiPage = getOption('multiPage');\n group.traverse(function (element) {\n dispatch({\n Image: function (element) {\n if (images.indexOf(element.src()) < 0) {\n images.push(element.src());\n }\n },\n Text: function (element) {\n var style = parseFontDef(element.options.font);\n var url = getFontURL(style);\n if (fonts.indexOf(url) < 0) {\n fonts.push(url);\n }\n }\n }, element);\n });\n function doIt() {\n if (--count > 0) {\n return;\n }\n var pdf = new PDFDocument({\n producer: getOption('producer'),\n title: getOption('title'),\n author: getOption('author'),\n subject: getOption('subject'),\n keywords: getOption('keywords'),\n creator: getOption('creator'),\n date: getOption('date')\n });\n function drawPage(group) {\n var options = group.options;\n var tmp = optimize(group);\n var bbox = tmp.bbox;\n group = tmp.root;\n var paperSize = getOption('paperSize', getOption('paperSize', 'auto'), options), addMargin = false;\n if (paperSize == 'auto') {\n if (bbox) {\n var size = bbox.getSize();\n paperSize = [\n size.width,\n size.height\n ];\n addMargin = true;\n var origin = bbox.getOrigin();\n tmp = new drawing.Group();\n tmp.transform(new kendoGeometry.Matrix(1, 0, 0, 1, -origin.x, -origin.y));\n tmp.append(group);\n group = tmp;\n } else {\n paperSize = 'A4';\n }\n }\n var page;\n page = pdf.addPage({\n paperSize: paperSize,\n margin: getOption('margin', getOption('margin'), options),\n addMargin: addMargin,\n landscape: getOption('landscape', getOption('landscape', false), options)\n });\n drawElement(group, page, pdf);\n }\n if (multiPage) {\n group.children.forEach(drawPage);\n } else {\n drawPage(group);\n }\n callback(pdf.render(), pdf);\n }\n var count = 2;\n loadFonts(fonts, doIt);\n loadImages(images, doIt);\n }\n function toDataURL(group, callback) {\n render(group, function (data) {\n callback('data:application/pdf;base64,' + data.base64());\n });\n }\n function toBlob(group, callback) {\n render(group, function (data) {\n callback(new window.Blob([data.get()], { type: 'application/pdf' }));\n });\n }\n function saveAs$1(group, filename, proxy, callback) {\n if (window.Blob && !supportBrowser.safari) {\n toBlob(group, function (blob) {\n kendo.saveAs({\n dataURI: blob,\n fileName: filename\n });\n if (callback) {\n callback(blob);\n }\n });\n } else {\n toDataURL(group, function (dataURL) {\n kendo.saveAs({\n dataURI: dataURL,\n fileName: filename,\n proxyURL: proxy\n });\n if (callback) {\n callback(dataURL);\n }\n });\n }\n }\n function dispatch(handlers, element) {\n var handler = handlers[element.nodeType];\n if (handler) {\n return handler.call.apply(handler, arguments);\n }\n return element;\n }\n function drawElement(element, page, pdf) {\n if (element.options._pdfDebug) {\n page.comment('BEGIN: ' + element.options._pdfDebug);\n }\n var transform = element.transform();\n var opacity = element.opacity();\n page.save();\n if (opacity != null && opacity < 1) {\n page.setOpacity(opacity);\n }\n setStrokeOptions(element, page, pdf);\n setFillOptions(element, page, pdf);\n if (transform) {\n var m = transform.matrix();\n page.transform(m.a, m.b, m.c, m.d, m.e, m.f);\n }\n setClipping(element, page, pdf);\n dispatch({\n Path: drawPath,\n MultiPath: drawMultiPath,\n Circle: drawCircle,\n Arc: drawArc,\n Text: drawText,\n Image: drawImage,\n Group: drawGroup,\n Rect: drawRect\n }, element, page, pdf);\n page.restore();\n if (element.options._pdfDebug) {\n page.comment('END: ' + element.options._pdfDebug);\n }\n }\n function setStrokeOptions(element, page) {\n var stroke = element.stroke && element.stroke();\n if (!stroke) {\n return;\n }\n var color = stroke.color;\n if (color) {\n color = parseColor$1(color);\n if (color == null) {\n return;\n }\n page.setStrokeColor(color.r, color.g, color.b);\n if (color.a != 1) {\n page.setStrokeOpacity(color.a);\n }\n }\n var width = stroke.width;\n if (width != null) {\n if (width === 0) {\n return;\n }\n page.setLineWidth(width);\n }\n var dashType = stroke.dashType;\n if (dashType) {\n page.setDashPattern(DASH_PATTERNS[dashType], 0);\n }\n var lineCap = stroke.lineCap;\n if (lineCap) {\n page.setLineCap(LINE_CAP[lineCap]);\n }\n var lineJoin = stroke.lineJoin;\n if (lineJoin) {\n page.setLineJoin(LINE_JOIN[lineJoin]);\n }\n var opacity = stroke.opacity;\n if (opacity != null) {\n page.setStrokeOpacity(opacity);\n }\n }\n function setFillOptions(element, page) {\n var fill = element.fill && element.fill();\n if (!fill) {\n return;\n }\n if (fill instanceof drawing.Gradient) {\n return;\n }\n var color = fill.color;\n if (color) {\n color = parseColor$1(color);\n if (color == null) {\n return;\n }\n page.setFillColor(color.r, color.g, color.b);\n if (color.a != 1) {\n page.setFillOpacity(color.a);\n }\n }\n var opacity = fill.opacity;\n if (opacity != null) {\n page.setFillOpacity(opacity);\n }\n }\n function setClipping(element, page, pdf) {\n var clip = element.clip();\n if (clip) {\n _drawPath(clip, page, pdf);\n page.clip();\n }\n }\n function shouldDraw(thing) {\n return thing && (thing instanceof drawing.Gradient || thing.color && !/^(none|transparent)$/i.test(thing.color) && (thing.width == null || thing.width > 0) && (thing.opacity == null || thing.opacity > 0));\n }\n function maybeGradient(element, page, pdf, stroke) {\n var fill = element.fill();\n if (fill instanceof drawing.Gradient) {\n if (stroke) {\n page.clipStroke();\n } else {\n page.clip();\n }\n var isRadial = fill instanceof drawing.RadialGradient;\n var start, end;\n if (isRadial) {\n start = {\n x: fill.center().x,\n y: fill.center().y,\n r: 0\n };\n end = {\n x: fill.center().x,\n y: fill.center().y,\n r: fill.radius()\n };\n } else {\n start = {\n x: fill.start().x,\n y: fill.start().y\n };\n end = {\n x: fill.end().x,\n y: fill.end().y\n };\n }\n var stops = fill.stops.elements().map(function (stop) {\n var offset = stop.offset();\n if (/%$/.test(offset)) {\n offset = parseFloat(offset) / 100;\n } else {\n offset = parseFloat(offset);\n }\n var color = parseColor$1(stop.color());\n color.a *= stop.opacity();\n return {\n offset: offset,\n color: color\n };\n });\n stops.unshift(stops[0]);\n stops.push(stops[stops.length - 1]);\n var gradient = {\n userSpace: fill.userSpace(),\n type: isRadial ? 'radial' : 'linear',\n start: start,\n end: end,\n stops: stops\n };\n var box = element.rawBBox();\n var tl = box.topLeft(), size = box.getSize();\n box = {\n left: tl.x,\n top: tl.y,\n width: size.width,\n height: size.height\n };\n page.gradient(gradient, box);\n return true;\n }\n }\n function maybeFillStroke(element, page, pdf) {\n if (shouldDraw(element.fill()) && shouldDraw(element.stroke())) {\n if (!maybeGradient(element, page, pdf, true)) {\n page.fillStroke();\n }\n } else if (shouldDraw(element.fill())) {\n if (!maybeGradient(element, page, pdf, false)) {\n page.fill();\n }\n } else if (shouldDraw(element.stroke())) {\n page.stroke();\n } else {\n page.nop();\n }\n }\n function maybeDrawRect(path, page) {\n var segments = path.segments;\n if (segments.length == 4 && path.options.closed) {\n var a = [];\n for (var i = 0; i < segments.length; ++i) {\n if (segments[i].controlIn()) {\n return false;\n }\n a[i] = segments[i].anchor();\n }\n var isRect = a[0].y == a[1].y && a[1].x == a[2].x && a[2].y == a[3].y && a[3].x == a[0].x || a[0].x == a[1].x && a[1].y == a[2].y && a[2].x == a[3].x && a[3].y == a[0].y;\n if (isRect) {\n page.rect(a[0].x, a[0].y, a[2].x - a[0].x, a[2].y - a[0].y);\n return true;\n }\n }\n }\n function _drawPath(element, page, pdf) {\n var segments = element.segments;\n if (segments.length === 0) {\n return;\n }\n if (!maybeDrawRect(element, page, pdf)) {\n for (var prev, i = 0; i < segments.length; ++i) {\n var seg = segments[i];\n var anchor = seg.anchor();\n if (!prev) {\n page.moveTo(anchor.x, anchor.y);\n } else {\n var prevOut = prev.controlOut();\n var controlIn = seg.controlIn();\n if (prevOut && controlIn) {\n page.bezier(prevOut.x, prevOut.y, controlIn.x, controlIn.y, anchor.x, anchor.y);\n } else {\n page.lineTo(anchor.x, anchor.y);\n }\n }\n prev = seg;\n }\n if (element.options.closed) {\n page.close();\n }\n }\n }\n function drawPath(element, page, pdf) {\n _drawPath(element, page, pdf);\n maybeFillStroke(element, page, pdf);\n }\n function drawMultiPath(element, page, pdf) {\n var paths = element.paths;\n for (var i = 0; i < paths.length; ++i) {\n _drawPath(paths[i], page, pdf);\n }\n maybeFillStroke(element, page, pdf);\n }\n function drawCircle(element, page, pdf) {\n var g = element.geometry();\n page.circle(g.center.x, g.center.y, g.radius);\n maybeFillStroke(element, page, pdf);\n }\n function drawArc(element, page, pdf) {\n var points = element.geometry().curvePoints();\n page.moveTo(points[0].x, points[0].y);\n for (var i = 1; i < points.length;) {\n page.bezier(points[i].x, points[i++].y, points[i].x, points[i++].y, points[i].x, points[i++].y);\n }\n maybeFillStroke(element, page, pdf);\n }\n function drawText(element, page) {\n var style = parseFontDef(element.options.font);\n var pos = element._position;\n var mode;\n if (element.fill() && element.stroke()) {\n mode = TEXT_RENDERING_MODE$1.fillAndStroke;\n } else if (element.fill()) {\n mode = TEXT_RENDERING_MODE$1.fill;\n } else if (element.stroke()) {\n mode = TEXT_RENDERING_MODE$1.stroke;\n }\n page.transform(1, 0, 0, -1, pos.x, pos.y + style.fontSize);\n page.beginText();\n page.setFont(getFontURL(style), style.fontSize);\n page.setTextRenderingMode(mode);\n page.showText(element.content(), element._pdfRect ? element._pdfRect.width() : null);\n page.endText();\n }\n function drawGroup(element, page, pdf) {\n if (element._pdfLink) {\n page.addLink(element._pdfLink.url, element._pdfLink);\n }\n var children = element.children;\n for (var i = 0; i < children.length; ++i) {\n drawElement(children[i], page, pdf);\n }\n }\n function drawImage(element, page) {\n var url = element.src();\n if (!url) {\n return;\n }\n var rect = element.rect();\n var tl = rect.getOrigin();\n var sz = rect.getSize();\n page.transform(sz.width, 0, 0, -sz.height, tl.x, tl.y + sz.height);\n page.drawImage(url);\n }\n function drawRect(element, page, pdf) {\n var geometry = element.geometry();\n page.rect(geometry.origin.x, geometry.origin.y, geometry.size.width, geometry.size.height);\n maybeFillStroke(element, page, pdf);\n }\n function parseColor$1(value) {\n var color = kendo.parseColor(value, true);\n return color ? color.toRGB() : null;\n }\n function optimize(root) {\n var clipbox = false;\n var matrix = kendoGeometry.Matrix.unit();\n var currentBox = null;\n var changed;\n do {\n changed = false;\n root = opt(root);\n } while (root && changed);\n return {\n root: root,\n bbox: currentBox\n };\n function change(newShape) {\n changed = true;\n return newShape;\n }\n function visible(shape) {\n return shape.visible() && shape.opacity() > 0 && (shouldDraw(shape.fill()) || shouldDraw(shape.stroke()));\n }\n function optArray(a) {\n var b = [];\n for (var i = 0; i < a.length; ++i) {\n var el = opt(a[i]);\n if (el != null) {\n b.push(el);\n }\n }\n return b;\n }\n function withClipping(shape, f) {\n var saveclipbox = clipbox;\n var savematrix = matrix;\n if (shape.transform()) {\n matrix = matrix.multiplyCopy(shape.transform().matrix());\n }\n var clip = shape.clip();\n if (clip) {\n clip = clip.bbox();\n if (clip) {\n clip = clip.bbox(matrix);\n clipbox = clipbox ? kendoGeometry.Rect.intersect(clipbox, clip) : clip;\n }\n }\n try {\n return f();\n } finally {\n clipbox = saveclipbox;\n matrix = savematrix;\n }\n }\n function inClipbox(shape) {\n if (clipbox == null) {\n return false;\n }\n var box = shape.rawBBox().bbox(matrix);\n if (clipbox && box) {\n box = kendoGeometry.Rect.intersect(box, clipbox);\n }\n return box;\n }\n function opt(shape) {\n return withClipping(shape, function () {\n if (!(shape instanceof drawing.Group || shape instanceof drawing.MultiPath)) {\n var box = inClipbox(shape);\n if (!box) {\n return change(null);\n }\n currentBox = currentBox ? kendoGeometry.Rect.union(currentBox, box) : box;\n }\n return dispatch({\n Path: function (shape) {\n if (shape.segments.length === 0 || !visible(shape)) {\n return change(null);\n }\n return shape;\n },\n MultiPath: function (shape) {\n if (!visible(shape)) {\n return change(null);\n }\n var el = new drawing.MultiPath(shape.options);\n el.paths = optArray(shape.paths);\n if (el.paths.length === 0) {\n return change(null);\n }\n return el;\n },\n Circle: function (shape) {\n if (!visible(shape)) {\n return change(null);\n }\n return shape;\n },\n Arc: function (shape) {\n if (!visible(shape)) {\n return change(null);\n }\n return shape;\n },\n Text: function (shape) {\n if (!/\\S/.test(shape.content()) || !visible(shape)) {\n return change(null);\n }\n return shape;\n },\n Image: function (shape) {\n if (!(shape.visible() && shape.opacity() > 0)) {\n return change(null);\n }\n return shape;\n },\n Group: function (shape) {\n var el = new drawing.Group(shape.options);\n el.children = optArray(shape.children);\n el._pdfLink = shape._pdfLink;\n if (shape !== root && el.children.length === 0 && !shape._pdfLink) {\n return change(null);\n }\n return el;\n },\n Rect: function (shape) {\n if (!visible(shape)) {\n return change(null);\n }\n return shape;\n }\n }, shape);\n });\n }\n }\n function exportPDF(group, options) {\n var promise = util.createPromise();\n for (var i in options) {\n if (i == 'margin' && group.options.pdf && group.options.pdf._ignoreMargin) {\n continue;\n }\n group.options.set('pdf.' + i, options[i]);\n }\n toDataURL(group, promise.resolve);\n return promise;\n }\n kendo.deepExtend(kendo.pdf, {\n Document: PDFDocument,\n BinaryStream: BinaryStream,\n defineFont: defineFont,\n parseFontDef: parseFontDef,\n getFontURL: getFontURL,\n loadFonts: loadFonts,\n loadImages: loadImages,\n getPaperOptions: getPaperOptions,\n TEXT_RENDERING_MODE: TEXT_RENDERING_MODE,\n exportPDF: exportPDF,\n saveAs: saveAs$1,\n toDataURL: toDataURL,\n toBlob: toBlob,\n render: render\n });\n kendo.drawing.exportPDF = kendo.pdf.exportPDF;\n kendo.drawing.pdf = kendo.pdf;\n }(kendo));\n return kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('pdf/mixins', ['pdf/core'], f);\n}(function () {\n (function ($, undefined) {\n kendo.PDFMixin = {\n extend: function (proto) {\n proto.events.push('pdfExport');\n proto.options.pdf = this.options;\n proto.saveAsPDF = this.saveAsPDF;\n proto._drawPDF = this._drawPDF;\n proto._drawPDFShadow = this._drawPDFShadow;\n },\n options: {\n fileName: 'Export.pdf',\n proxyURL: '',\n paperSize: 'auto',\n allPages: false,\n landscape: false,\n margin: null,\n title: null,\n author: null,\n subject: null,\n keywords: null,\n creator: 'Kendo UI PDF Generator v.' + kendo.version,\n date: null\n },\n saveAsPDF: function () {\n var progress = new $.Deferred();\n var promise = progress.promise();\n var args = { promise: promise };\n if (this.trigger('pdfExport', args)) {\n return;\n }\n var options = this.options.pdf;\n options.multiPage = options.multiPage || options.allPages;\n this._drawPDF(progress).then(function (root) {\n return kendo.drawing.exportPDF(root, options);\n }).done(function (dataURI) {\n kendo.saveAs({\n dataURI: dataURI,\n fileName: options.fileName,\n proxyURL: options.proxyURL,\n forceProxy: options.forceProxy,\n proxyTarget: options.proxyTarget\n });\n progress.resolve();\n }).fail(function (err) {\n progress.reject(err);\n });\n return promise;\n },\n _drawPDF: function (progress) {\n var promise = new $.Deferred();\n kendo.drawing.drawDOM(this.wrapper).done(function (group) {\n var args = {\n page: group,\n pageNumber: 1,\n progress: 1,\n totalPages: 1\n };\n progress.notify(args);\n promise.resolve(args.page);\n }).fail(function (err) {\n promise.reject(err);\n });\n return promise;\n },\n _drawPDFShadow: function (settings, drawOptions) {\n settings = settings || {};\n var wrapper = this.wrapper;\n var shadow = $('<div class=\\'k-pdf-export-shadow\\'>');\n if (settings.width) {\n shadow.css({\n width: settings.width,\n overflow: 'visible'\n });\n }\n wrapper.before(shadow);\n shadow.append(settings.content || wrapper.clone(true, true));\n var defer = $.Deferred();\n setTimeout(function () {\n var promise = kendo.drawing.drawDOM(shadow, drawOptions);\n promise.always(function () {\n shadow.remove();\n }).then(function () {\n defer.resolve.apply(defer, arguments);\n }).fail(function () {\n defer.reject.apply(defer, arguments);\n }).progress(function () {\n defer.progress.apply(defer, arguments);\n });\n }, 15);\n return defer.promise();\n }\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.pdf', [\n 'kendo.core',\n 'kendo.drawing',\n 'pdf/core',\n 'pdf/mixins'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'pdf',\n name: 'PDF export',\n description: 'PDF Generation framework',\n mixin: true,\n category: 'framework',\n depends: [\n 'core',\n 'drawing'\n ]\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.grid', [\n 'kendo.data',\n 'kendo.columnsorter',\n 'kendo.editable',\n 'kendo.window',\n 'kendo.filtermenu',\n 'kendo.columnmenu',\n 'kendo.groupable',\n 'kendo.pager',\n 'kendo.selectable',\n 'kendo.sortable',\n 'kendo.reorderable',\n 'kendo.resizable',\n 'kendo.mobile.actionsheet',\n 'kendo.mobile.pane',\n 'kendo.ooxml',\n 'kendo.excel',\n 'kendo.progressbar',\n 'kendo.pdf'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'grid',\n name: 'Grid',\n category: 'web',\n description: 'The Grid widget displays tabular data and offers rich support for interacting with data,including paging, sorting, grouping, and selection.',\n depends: [\n 'data',\n 'columnsorter'\n ],\n features: [\n {\n id: 'grid-editing',\n name: 'Editing',\n description: 'Support for record editing',\n depends: [\n 'editable',\n 'window'\n ]\n },\n {\n id: 'grid-filtering',\n name: 'Filtering',\n description: 'Support for record filtering',\n depends: ['filtermenu']\n },\n {\n id: 'grid-columnmenu',\n name: 'Column menu',\n description: 'Support for header column menu',\n depends: ['columnmenu']\n },\n {\n id: 'grid-grouping',\n name: 'Grouping',\n description: 'Support for grid grouping',\n depends: ['groupable']\n },\n {\n id: 'grid-filtercell',\n name: 'Row filter',\n description: 'Support for grid header filtering',\n depends: ['filtercell']\n },\n {\n id: 'grid-paging',\n name: 'Paging',\n description: 'Support for grid paging',\n depends: ['pager']\n },\n {\n id: 'grid-selection',\n name: 'Selection',\n description: 'Support for row selection',\n depends: ['selectable']\n },\n {\n id: 'grid-column-reorder',\n name: 'Column reordering',\n description: 'Support for column reordering',\n depends: ['reorderable']\n },\n {\n id: 'grid-column-resize',\n name: 'Column resizing',\n description: 'Support for column resizing',\n depends: ['resizable']\n },\n {\n id: 'grid-mobile',\n name: 'Grid adaptive rendering',\n description: 'Support for adaptive rendering',\n depends: [\n 'mobile.actionsheet',\n 'mobile.pane'\n ]\n },\n {\n id: 'grid-excel-export',\n name: 'Excel export',\n description: 'Export grid data as Excel spreadsheet',\n depends: ['excel']\n },\n {\n id: 'grid-pdf-export',\n name: 'PDF export',\n description: 'Export grid data as PDF',\n depends: [\n 'pdf',\n 'drawing',\n 'progressbar'\n ]\n }\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, DataSource = kendo.data.DataSource, tbodySupportsInnerHtml = kendo.support.tbodyInnerHtml, activeElement = kendo._activeElement, Widget = ui.Widget, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, keys = kendo.keys, isPlainObject = $.isPlainObject, extend = $.extend, map = $.map, grep = $.grep, isArray = $.isArray, inArray = $.inArray, push = Array.prototype.push, proxy = $.proxy, isFunction = kendo.isFunction, isEmptyObject = $.isEmptyObject, math = Math, PROGRESS = 'progress', ERROR = 'error', DATA_CELL = ':not(.k-group-cell):not(.k-hierarchy-cell):visible', SELECTION_CELL_SELECTOR = 'tbody>tr:not(.k-grouping-row):not(.k-detail-row):not(.k-group-footer) > td:not(.k-group-cell):not(.k-hierarchy-cell)', NAVROW = 'tr:not(.k-footer-template):visible', NAVCELL = ':not(.k-group-cell):not(.k-hierarchy-cell):visible', FIRSTNAVITEM = NAVROW + ':first>' + NAVCELL + ':first', HEADERCELLS = 'th.k-header:not(.k-group-cell):not(.k-hierarchy-cell)', NS = '.kendoGrid', EDIT = 'edit', SAVE = 'save', REMOVE = 'remove', DETAILINIT = 'detailInit', FILTERMENUINIT = 'filterMenuInit', COLUMNMENUINIT = 'columnMenuInit', CHANGE = 'change', COLUMNHIDE = 'columnHide', COLUMNSHOW = 'columnShow', SAVECHANGES = 'saveChanges', DATABOUND = 'dataBound', DETAILEXPAND = 'detailExpand', DETAILCOLLAPSE = 'detailCollapse', FOCUSED = 'k-state-focused', SELECTED = 'k-state-selected', NORECORDSCLASS = 'k-grid-norecords', COLUMNRESIZE = 'columnResize', COLUMNREORDER = 'columnReorder', COLUMNLOCK = 'columnLock', COLUMNUNLOCK = 'columnUnlock', NAVIGATE = 'navigate', CLICK = 'click', HEIGHT = 'height', TABINDEX = 'tabIndex', FUNCTION = 'function', STRING = 'string', DELETECONFIRM = 'Are you sure you want to delete this record?', NORECORDS = 'No records available.', CONFIRMDELETE = 'Delete', CANCELDELETE = 'Cancel', formatRegExp = /(\\}|\\#)/gi, templateHashRegExp = /#/gi, whitespaceRegExp = '[\\\\x20\\\\t\\\\r\\\\n\\\\f]', nonDataCellsRegExp = new RegExp('(^|' + whitespaceRegExp + ')' + '(k-group-cell|k-hierarchy-cell)' + '(' + whitespaceRegExp + '|$)'), filterRowRegExp = new RegExp('(^|' + whitespaceRegExp + ')' + '(k-filter-row)' + '(' + whitespaceRegExp + '|$)'), COMMANDBUTTONTMPL = '<a role=\"button\" class=\"k-button k-button-icontext #=className#\" #=attr# href=\"\\\\#\"><span class=\"#=iconClass# #=imageClass#\"></span>#=text#</a>', isRtl = false, browser = kendo.support.browser, isIE7 = browser.msie && browser.version == 7, isIE8 = browser.msie && browser.version == 8;\n var VirtualScrollable = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that._refreshHandler = proxy(that.refresh, that);\n that.setDataSource(options.dataSource);\n that.wrap();\n },\n setDataSource: function (dataSource) {\n var that = this;\n if (that.dataSource) {\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n }\n that.dataSource = dataSource;\n that.dataSource.bind(CHANGE, that._refreshHandler);\n },\n options: {\n name: 'VirtualScrollable',\n itemHeight: $.noop,\n prefetch: true\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n that.wrapper.add(that.verticalScrollbar).off(NS);\n if (that.drag) {\n that.drag.destroy();\n that.drag = null;\n }\n that.wrapper = that.element = that.verticalScrollbar = null;\n that._refreshHandler = null;\n },\n wrap: function () {\n var that = this, scrollbar = kendo.support.scrollbar() + 1, element = that.element, wrapper;\n element.css({\n width: 'auto',\n overflow: 'hidden'\n }).css(isRtl ? 'padding-left' : 'padding-right', scrollbar);\n that.content = element.children().first();\n wrapper = that.wrapper = that.content.wrap('<div class=\"k-virtual-scrollable-wrap\"/>').parent().bind('DOMMouseScroll' + NS + ' mousewheel' + NS, proxy(that._wheelScroll, that));\n if (kendo.support.kineticScrollNeeded) {\n that.drag = new kendo.UserEvents(that.wrapper, {\n global: true,\n start: function (e) {\n e.sender.capture();\n },\n move: function (e) {\n that.verticalScrollbar.scrollTop(that.verticalScrollbar.scrollTop() - e.y.delta);\n wrapper.scrollLeft(wrapper.scrollLeft() - e.x.delta);\n e.preventDefault();\n }\n });\n }\n that.verticalScrollbar = $('<div class=\"k-scrollbar k-scrollbar-vertical\" />').css({ width: scrollbar }).appendTo(element).bind('scroll' + NS, proxy(that._scroll, that));\n },\n _wheelScroll: function (e) {\n if (e.ctrlKey) {\n return;\n }\n var scrollbar = this.verticalScrollbar, scrollTop = scrollbar.scrollTop(), delta = kendo.wheelDeltaY(e);\n if (delta && !(delta > 0 && scrollTop === 0) && !(delta < 0 && scrollTop + scrollbar[0].clientHeight == scrollbar[0].scrollHeight)) {\n e.preventDefault();\n this.verticalScrollbar.scrollTop(scrollTop + -delta);\n }\n },\n _scroll: function (e) {\n var that = this, delayLoading = !that.options.prefetch, scrollTop = e.currentTarget.scrollTop, dataSource = that.dataSource, rowHeight = that.itemHeight, skip = dataSource.skip() || 0, start = that._rangeStart || skip, height = that.element.innerHeight(), isScrollingUp = !!(that._scrollbarTop && that._scrollbarTop > scrollTop), firstItemIndex = math.max(math.floor(scrollTop / rowHeight), 0), lastItemIndex = math.max(firstItemIndex + math.floor(height / rowHeight), 0);\n that._scrollTop = scrollTop - start * rowHeight;\n that._scrollbarTop = scrollTop;\n that._scrolling = delayLoading;\n if (!that._fetch(firstItemIndex, lastItemIndex, isScrollingUp)) {\n that.wrapper[0].scrollTop = that._scrollTop;\n }\n if (delayLoading) {\n if (that._scrollingTimeout) {\n clearTimeout(that._scrollingTimeout);\n }\n that._scrollingTimeout = setTimeout(function () {\n that._scrolling = false;\n that._page(that._rangeStart, that.dataSource.take());\n }, 100);\n }\n },\n itemIndex: function (rowIndex) {\n var rangeStart = this._rangeStart || this.dataSource.skip() || 0;\n return rangeStart + rowIndex;\n },\n position: function (index) {\n var rangeStart = this._rangeStart || this.dataSource.skip() || 0;\n var pageSize = this.dataSource.pageSize();\n var result;\n if (index > rangeStart) {\n result = index - rangeStart + 1;\n } else {\n result = rangeStart - index - 1;\n }\n return result > pageSize ? pageSize : result;\n },\n scrollIntoView: function (row) {\n var container = this.wrapper[0];\n var containerHeight = container.clientHeight;\n var containerScroll = this._scrollTop || container.scrollTop;\n var elementOffset = row[0].offsetTop;\n var elementHeight = row[0].offsetHeight;\n if (containerScroll > elementOffset) {\n this.verticalScrollbar[0].scrollTop -= containerHeight / 2;\n } else if (elementOffset + elementHeight >= containerScroll + containerHeight) {\n this.verticalScrollbar[0].scrollTop += containerHeight / 2;\n }\n },\n _fetch: function (firstItemIndex, lastItemIndex, scrollingUp) {\n var that = this, dataSource = that.dataSource, itemHeight = that.itemHeight, take = dataSource.take(), rangeStart = that._rangeStart || dataSource.skip() || 0, currentSkip = math.floor(firstItemIndex / take) * take, fetching = false, prefetchAt = 0.33;\n if (firstItemIndex < rangeStart) {\n fetching = true;\n rangeStart = math.max(0, lastItemIndex - take);\n that._scrollTop = (firstItemIndex - rangeStart) * itemHeight;\n that._page(rangeStart, take);\n } else if (lastItemIndex >= rangeStart + take && !scrollingUp) {\n fetching = true;\n rangeStart = firstItemIndex;\n that._scrollTop = itemHeight;\n that._page(rangeStart, take);\n } else if (!that._fetching && that.options.prefetch) {\n if (firstItemIndex < currentSkip + take - take * prefetchAt && firstItemIndex > take) {\n dataSource.prefetch(currentSkip - take, take, $.noop);\n }\n if (lastItemIndex > currentSkip + take * prefetchAt) {\n dataSource.prefetch(currentSkip + take, take, $.noop);\n }\n }\n return fetching;\n },\n fetching: function () {\n return this._fetching;\n },\n _page: function (skip, take) {\n var that = this, delayLoading = !that.options.prefetch, dataSource = that.dataSource;\n clearTimeout(that._timeout);\n that._fetching = true;\n that._rangeStart = skip;\n if (dataSource.inRange(skip, take)) {\n dataSource.range(skip, take);\n } else {\n if (!delayLoading) {\n kendo.ui.progress(that.wrapper.parent(), true);\n }\n that._timeout = setTimeout(function () {\n if (!that._scrolling) {\n if (delayLoading) {\n kendo.ui.progress(that.wrapper.parent(), true);\n }\n dataSource.range(skip, take);\n }\n }, 100);\n }\n },\n repaintScrollbar: function () {\n var that = this, html = '', maxHeight = 250000, dataSource = that.dataSource, scrollbar = !kendo.support.kineticScrollNeeded ? kendo.support.scrollbar() : 0, wrapperElement = that.wrapper[0], totalHeight, idx, itemHeight;\n itemHeight = that.itemHeight = that.options.itemHeight() || 0;\n var addScrollBarHeight = wrapperElement.scrollWidth > wrapperElement.offsetWidth ? scrollbar : 0;\n totalHeight = dataSource.total() * itemHeight + addScrollBarHeight;\n for (idx = 0; idx < math.floor(totalHeight / maxHeight); idx++) {\n html += '<div style=\"width:1px;height:' + maxHeight + 'px\"></div>';\n }\n if (totalHeight % maxHeight) {\n html += '<div style=\"width:1px;height:' + totalHeight % maxHeight + 'px\"></div>';\n }\n that.verticalScrollbar.html(html);\n wrapperElement.scrollTop = that._scrollTop;\n },\n refresh: function () {\n var that = this, dataSource = that.dataSource, rangeStart = that._rangeStart;\n kendo.ui.progress(that.wrapper.parent(), false);\n clearTimeout(that._timeout);\n that.repaintScrollbar();\n if (that.drag) {\n that.drag.cancel();\n }\n if (rangeStart && !that._fetching) {\n that._rangeStart = dataSource.skip();\n if (dataSource.page() === 1) {\n that.verticalScrollbar[0].scrollTop = 0;\n }\n }\n that._fetching = false;\n }\n });\n function groupCells(count) {\n return new Array(count + 1).join('<td class=\"k-group-cell\"> </td>');\n }\n function stringifyAttributes(attributes) {\n var attr, result = ' ';\n if (attributes) {\n if (typeof attributes === STRING) {\n return attributes;\n }\n for (attr in attributes) {\n result += attr + '=\"' + attributes[attr] + '\"';\n }\n }\n return result;\n }\n var defaultCommands = {\n create: {\n text: 'Add new record',\n imageClass: 'k-i-plus',\n className: 'k-grid-add',\n iconClass: 'k-icon'\n },\n cancel: {\n text: 'Cancel changes',\n imageClass: 'k-i-cancel',\n className: 'k-grid-cancel-changes',\n iconClass: 'k-icon'\n },\n save: {\n text: 'Save changes',\n imageClass: 'k-i-check',\n className: 'k-grid-save-changes',\n iconClass: 'k-icon'\n },\n destroy: {\n text: 'Delete',\n imageClass: 'k-i-close',\n className: 'k-grid-delete',\n iconClass: 'k-icon'\n },\n edit: {\n text: 'Edit',\n imageClass: 'k-i-edit',\n className: 'k-grid-edit',\n iconClass: 'k-icon'\n },\n update: {\n text: 'Update',\n imageClass: 'k-i-check',\n className: 'k-primary k-grid-update',\n iconClass: 'k-icon'\n },\n canceledit: {\n text: 'Cancel',\n imageClass: 'k-i-cancel',\n className: 'k-grid-cancel',\n iconClass: 'k-icon'\n },\n excel: {\n text: 'Export to Excel',\n imageClass: 'k-i-file-excel',\n className: 'k-grid-excel',\n iconClass: 'k-icon'\n },\n pdf: {\n text: 'Export to PDF',\n imageClass: 'k-i-file-pdf',\n className: 'k-grid-pdf',\n iconClass: 'k-icon'\n }\n };\n function cursor(context, value) {\n $('th, th .k-grid-filter, th .k-link', context).add(document.body).css('cursor', value);\n }\n function reorder(selector, source, dest, before, count) {\n var sourceIndex = source;\n source = $();\n count = count || 1;\n for (var idx = 0; idx < count; idx++) {\n source = source.add(selector.eq(sourceIndex + idx));\n }\n if (typeof dest == 'number') {\n source[before ? 'insertBefore' : 'insertAfter'](selector.eq(dest));\n } else {\n source.appendTo(dest);\n }\n }\n function elements(lockedContent, content, filter) {\n return $(lockedContent).add(content).find(filter);\n }\n function attachCustomCommandEvent(context, container, commands) {\n var idx, length, command, commandName;\n commands = !isArray(commands) ? [commands] : commands;\n for (idx = 0, length = commands.length; idx < length; idx++) {\n command = commands[idx];\n if (isPlainObject(command) && command.click) {\n commandName = command.name || command.text;\n container.on(CLICK + NS, 'a.k-grid-' + (commandName || '').replace(/\\s/g, ''), { commandName: commandName }, proxy(command.click, context));\n }\n }\n }\n function normalizeColumns(columns, encoded, hide) {\n return map(columns, function (column) {\n column = typeof column === STRING ? { field: column } : column;\n var hidden;\n if (!isVisible(column) || hide) {\n column.attributes = addHiddenStyle(column.attributes);\n column.footerAttributes = addHiddenStyle(column.footerAttributes);\n column.headerAttributes = addHiddenStyle(column.headerAttributes);\n hidden = true;\n }\n if (column.columns) {\n column.columns = normalizeColumns(column.columns, encoded, hidden);\n }\n var uid = kendo.guid();\n column.headerAttributes = extend({ id: uid }, column.headerAttributes);\n return extend({\n encoded: encoded,\n hidden: hidden\n }, column);\n });\n }\n function columnParent(column, columns) {\n var parents = [];\n columnParents(column, columns, parents);\n return parents[parents.length - 1];\n }\n function columnParents(column, columns, parents) {\n parents = parents || [];\n for (var idx = 0; idx < columns.length; idx++) {\n if (column === columns[idx]) {\n return true;\n } else if (columns[idx].columns) {\n var inserted = parents.length;\n parents.push(columns[idx]);\n if (!columnParents(column, columns[idx].columns, parents)) {\n parents.splice(inserted, parents.length - inserted);\n } else {\n return true;\n }\n }\n }\n return false;\n }\n function setColumnVisibility(column, visible) {\n var method = visible ? removeHiddenStyle : addHiddenStyle;\n column.hidden = !visible;\n column.attributes = method(column.attributes);\n column.footerAttributes = method(column.footerAttributes);\n column.headerAttributes = method(column.headerAttributes);\n }\n function isCellVisible() {\n return this.style.display !== 'none';\n }\n function isVisible(column) {\n return visibleColumns([column]).length > 0;\n }\n function visibleColumns(columns) {\n return grep(columns, function (column) {\n var result = !column.hidden;\n if (result && column.columns) {\n result = visibleColumns(column.columns).length > 0;\n }\n return result;\n });\n }\n function toJQuery(elements) {\n return $(elements).map(function () {\n return this.toArray();\n });\n }\n function updateCellRowSpan(cell, columns, sourceLockedColumnsCount) {\n var lockedColumnDepth = depth(lockedColumns(columns));\n var nonLockedColumnDepth = depth(nonLockedColumns(columns));\n var rowSpan = cell.rowSpan;\n if (sourceLockedColumnsCount) {\n if (lockedColumnDepth > nonLockedColumnDepth) {\n cell.rowSpan = rowSpan - (lockedColumnDepth - nonLockedColumnDepth) || 1;\n } else {\n cell.rowSpan = rowSpan + (nonLockedColumnDepth - lockedColumnDepth);\n }\n } else {\n if (lockedColumnDepth > nonLockedColumnDepth) {\n cell.rowSpan = rowSpan + (lockedColumnDepth - nonLockedColumnDepth);\n } else {\n cell.rowSpan = rowSpan - (nonLockedColumnDepth - lockedColumnDepth) || 1;\n }\n }\n }\n function moveCellsBetweenContainers(sources, target, leafs, columns, container, destination, groups) {\n var sourcesDepth = depth(sources);\n var targetDepth = depth([target]);\n if (sourcesDepth > targetDepth) {\n var groupCells = new Array(groups + 1).join('<th class=\"k-group-cell k-header\" scope=\"col\"> </th>');\n var rows = destination.children(':not(.k-filter-row)');\n $(new Array(sourcesDepth - targetDepth + 1).join('<tr>' + groupCells + '</tr>')).insertAfter(rows.last());\n }\n addRowSpanValue(destination, sourcesDepth - targetDepth);\n moveCells(leafs, columns, container, destination);\n }\n function updateCellIndex(thead, columns, offset) {\n offset = offset || 0;\n var position;\n var cell;\n var allColumns = columns;\n columns = leafColumns(columns);\n var cells = {};\n var rows = thead.find('>tr:not(.k-filter-row)');\n var filter = function () {\n var el = $(this);\n return !el.hasClass('k-group-cell') && !el.hasClass('k-hierarchy-cell');\n };\n for (var idx = 0, length = columns.length; idx < length; idx++) {\n position = columnPosition(columns[idx], allColumns);\n if (!cells[position.row]) {\n cells[position.row] = rows.eq(position.row).find('.k-header').filter(filter);\n }\n cell = cells[position.row].eq(position.cell);\n cell.attr(kendo.attr('index'), offset + idx);\n }\n return columns.length;\n }\n function depth(columns) {\n var result = 1;\n var max = 0;\n for (var idx = 0; idx < columns.length; idx++) {\n if (columns[idx].columns) {\n var temp = depth(columns[idx].columns);\n if (temp > max) {\n max = temp;\n }\n }\n }\n return result + max;\n }\n function moveCells(leafs, columns, container, destination) {\n var sourcePosition = columnVisiblePosition(leafs[0], columns);\n var ths = container.find('>tr:not(.k-filter-row):eq(' + sourcePosition.row + ')>th.k-header');\n var t = $();\n var sourceIndex = sourcePosition.cell;\n var idx;\n for (idx = 0; idx < leafs.length; idx++) {\n t = t.add(ths.eq(sourceIndex + idx));\n }\n destination.find('>tr:not(.k-filter-row)').eq(sourcePosition.row).append(t);\n var children = [];\n for (idx = 0; idx < leafs.length; idx++) {\n if (leafs[idx].columns) {\n children = children.concat(leafs[idx].columns);\n }\n }\n if (children.length) {\n moveCells(children, columns, container, destination);\n }\n }\n function columnPosition(column, columns, row, cellCounts) {\n var result;\n var idx;\n row = row || 0;\n cellCounts = cellCounts || {};\n cellCounts[row] = cellCounts[row] || 0;\n for (idx = 0; idx < columns.length; idx++) {\n if (columns[idx] == column) {\n result = {\n cell: cellCounts[row],\n row: row\n };\n break;\n } else if (columns[idx].columns) {\n result = columnPosition(column, columns[idx].columns, row + 1, cellCounts);\n if (result) {\n break;\n }\n }\n cellCounts[row]++;\n }\n return result;\n }\n function findParentColumnWithChildren(columns, index, source, rtl) {\n var target;\n var locked = source.locked;\n do {\n target = columns[index];\n index += rtl ? 1 : -1;\n } while (target && index > -1 && index < columns.length && target != source && !target.columns && target.locked == locked);\n return target;\n }\n function findReorderTarget(columns, target, source, before) {\n if (target.columns) {\n target = target.columns;\n return target[before ? 0 : target.length - 1];\n } else {\n var parent = columnParent(target, columns);\n var parentColumns;\n if (parent) {\n parentColumns = parent.columns;\n } else {\n parentColumns = columns;\n }\n var index = inArray(target, parentColumns);\n if (index === 0 && before) {\n index++;\n } else if (index == parentColumns.length - 1 && !before) {\n index--;\n } else if (index > 0 || index === 0 && !before) {\n index += before ? -1 : 1;\n }\n var sourceIndex = inArray(source, parentColumns);\n target = findParentColumnWithChildren(parentColumns, index, source, sourceIndex > index);\n if (target && target != source && target.columns) {\n return findReorderTarget(columns, target, source, before);\n }\n }\n return null;\n }\n function columnVisiblePosition(column, columns, row, cellCounts) {\n var result;\n var idx;\n row = row || 0;\n cellCounts = cellCounts || {};\n cellCounts[row] = cellCounts[row] || 0;\n for (idx = 0; idx < columns.length; idx++) {\n if (columns[idx] == column) {\n result = {\n cell: cellCounts[row],\n row: row\n };\n break;\n } else if (columns[idx].columns) {\n result = columnVisiblePosition(column, columns[idx].columns, row + 1, cellCounts);\n if (result) {\n break;\n }\n }\n if (!columns[idx].hidden) {\n cellCounts[row]++;\n }\n }\n return result;\n }\n function flatColumnsInDomOrder(columns) {\n var result = flatColumns(lockedColumns(columns));\n return result.concat(flatColumns(nonLockedColumns(columns)));\n }\n function flatColumns(columns) {\n var result = [];\n var children = [];\n for (var idx = 0; idx < columns.length; idx++) {\n result.push(columns[idx]);\n if (columns[idx].columns) {\n children = children.concat(columns[idx].columns);\n }\n }\n if (children.length) {\n result = result.concat(flatColumns(children));\n }\n return result;\n }\n function hiddenLeafColumnsCount(columns) {\n var counter = 0;\n var column;\n for (var idx = 0; idx < columns.length; idx++) {\n column = columns[idx];\n if (column.columns) {\n counter += hiddenLeafColumnsCount(column.columns);\n } else if (column.hidden) {\n counter++;\n }\n }\n return counter;\n }\n function columnsWidth(cols) {\n var colWidth, width = 0;\n for (var idx = 0, length = cols.length; idx < length; idx++) {\n colWidth = cols[idx].style.width;\n if (colWidth && colWidth.indexOf('%') == -1) {\n width += parseInt(colWidth, 10);\n }\n }\n return width;\n }\n function removeRowSpanValue(container, count) {\n var cells = container.find('tr:not(.k-filter-row) th:not(.k-group-cell,.k-hierarchy-cell)');\n var rowSpan;\n for (var idx = 0; idx < cells.length; idx++) {\n rowSpan = cells[idx].rowSpan;\n if (rowSpan > 1) {\n cells[idx].rowSpan = rowSpan - count || 1;\n }\n }\n }\n function addRowSpanValue(container, count) {\n var cells = container.find('tr:not(.k-filter-row) th:not(.k-group-cell,.k-hierarchy-cell)');\n for (var idx = 0; idx < cells.length; idx++) {\n cells[idx].rowSpan += count;\n }\n }\n function removeEmptyRows(container) {\n var rows = container.find('tr:not(.k-filter-row)');\n var emptyRowsCount = rows.filter(function () {\n return !$(this).children().length;\n }).remove().length;\n var cells = rows.find('th:not(.k-group-cell,.k-hierarchy-cell)');\n for (var idx = 0; idx < cells.length; idx++) {\n if (cells[idx].rowSpan > 1) {\n cells[idx].rowSpan -= emptyRowsCount;\n }\n }\n return rows.length - emptyRowsCount;\n }\n function mapColumnToCellRows(columns, cells, rows, rowIndex, offset) {\n var idx, row, length, children = [];\n for (idx = 0, length = columns.length; idx < length; idx++) {\n row = rows[rowIndex] || [];\n row.push(cells.eq(offset + idx));\n rows[rowIndex] = row;\n if (columns[idx].columns) {\n children = children.concat(columns[idx].columns);\n }\n }\n if (children.length) {\n mapColumnToCellRows(children, cells, rows, rowIndex + 1, offset + columns.length);\n }\n }\n function lockedColumns(columns) {\n return grep(columns, function (column) {\n return column.locked;\n });\n }\n function nonLockedColumns(columns) {\n return grep(columns, function (column) {\n return !column.locked;\n });\n }\n function visibleNonLockedColumns(columns) {\n return grep(columns, function (column) {\n return !column.locked && isVisible(column);\n });\n }\n function visibleLockedColumns(columns) {\n return grep(columns, function (column) {\n return column.locked && isVisible(column);\n });\n }\n function visibleLeafColumns(columns) {\n var result = [];\n for (var idx = 0; idx < columns.length; idx++) {\n if (columns[idx].hidden) {\n continue;\n }\n if (columns[idx].columns) {\n result = result.concat(visibleLeafColumns(columns[idx].columns));\n } else {\n result.push(columns[idx]);\n }\n }\n return result;\n }\n function leafColumns(columns) {\n var result = [];\n for (var idx = 0; idx < columns.length; idx++) {\n if (!columns[idx].columns) {\n result.push(columns[idx]);\n continue;\n }\n result = result.concat(leafColumns(columns[idx].columns));\n }\n return result;\n }\n function leafDataCells(container) {\n var rows = container.find('>tr:not(.k-filter-row)');\n var filter = function () {\n var el = $(this);\n return !el.hasClass('k-group-cell') && !el.hasClass('k-hierarchy-cell');\n };\n var cells = $();\n if (rows.length > 1) {\n cells = rows.find('th').filter(filter).filter(function () {\n return this.rowSpan > 1;\n });\n }\n cells = cells.add(rows.last().find('th').filter(filter));\n var indexAttr = kendo.attr('index');\n cells.sort(function (a, b) {\n a = $(a);\n b = $(b);\n var indexA = a.attr(indexAttr);\n var indexB = b.attr(indexAttr);\n if (indexA === undefined) {\n indexA = $(a).index();\n }\n if (indexB === undefined) {\n indexB = $(b).index();\n }\n indexA = parseInt(indexA, 10);\n indexB = parseInt(indexB, 10);\n return indexA > indexB ? 1 : indexA < indexB ? -1 : 0;\n });\n return cells;\n }\n function parentColumnsCells(cell) {\n var container = cell.closest('table');\n var result = $().add(cell);\n var row = cell.closest('tr');\n var headerRows = container.find('tr:not(.k-filter-row)');\n var level = headerRows.index(row);\n if (level > 0) {\n var parent = headerRows.eq(level - 1);\n var parentCellsWithChildren = parent.find('th:not(.k-group-cell,.k-hierarchy-cell)').filter(function () {\n return !$(this).attr('rowspan');\n });\n var offset = 0;\n var index = row.find('th:not(.k-group-cell,.k-hierarchy-cell)').index(cell);\n var prevCells = cell.prevAll(':not(.k-group-cell,.k-hierarchy-cell)').filter(function () {\n return this.colSpan > 1;\n });\n for (var idx = 0; idx < prevCells.length; idx++) {\n offset += prevCells[idx].colSpan || 1;\n }\n index += Math.max(offset - 1, 0);\n offset = 0;\n for (idx = 0; idx < parentCellsWithChildren.length; idx++) {\n var parentCell = parentCellsWithChildren.eq(idx);\n if (parentCell.attr('colSpan')) {\n offset += parentCell[0].colSpan;\n } else {\n offset += 1;\n }\n if (index >= idx && index < offset) {\n result = parentColumnsCells(parentCell).add(result);\n break;\n }\n }\n }\n return result;\n }\n function childColumnsCells(cell) {\n var container = cell.closest('thead');\n var result = $().add(cell);\n var row = cell.closest('tr');\n var headerRows = container.find('tr:not(.k-filter-row)');\n var level = headerRows.index(row) + cell[0].rowSpan;\n var colSpanAttr = kendo.attr('colspan');\n if (level <= headerRows.length - 1) {\n var child = row.next();\n var prevCells = cell.prevAll(':not(.k-group-cell,.k-hierarchy-cell)');\n var idx;\n prevCells = prevCells.filter(function () {\n return !this.rowSpan || this.rowSpan === 1;\n });\n var offset = 0;\n for (idx = 0; idx < prevCells.length; idx++) {\n offset += parseInt(prevCells.eq(idx).attr(colSpanAttr), 10) || 1;\n }\n var cells = child.find('th:not(.k-group-cell,.k-hierarchy-cell)');\n var colSpan = parseInt(cell.attr(colSpanAttr), 10) || 1;\n idx = 0;\n while (idx < colSpan) {\n child = cells.eq(idx + offset);\n result = result.add(childColumnsCells(child));\n var value = parseInt(child.attr(colSpanAttr), 10);\n if (value > 1) {\n colSpan -= value - 1;\n }\n idx++;\n }\n }\n return result;\n }\n function appendContent(tbody, table, html, empty) {\n var placeholder, tmp = tbody;\n if (empty) {\n tbody.empty();\n }\n if (tbodySupportsInnerHtml) {\n tbody[0].innerHTML = html;\n } else {\n placeholder = document.createElement('div');\n placeholder.innerHTML = '<table><tbody>' + html + '</tbody></table>';\n tbody = placeholder.firstChild.firstChild;\n table[0].replaceChild(tbody, tmp[0]);\n tbody = $(tbody);\n }\n return tbody;\n }\n function addHiddenStyle(attr) {\n attr = attr || {};\n var style = attr.style;\n if (!style) {\n style = 'display:none';\n } else {\n style = style.replace(/((.*)?display)(.*)?:([^;]*)/i, '$1:none');\n if (style === attr.style) {\n style = style.replace(/(.*)?/i, 'display:none;$1');\n }\n }\n return extend({}, attr, { style: style });\n }\n function removeHiddenStyle(attr) {\n attr = attr || {};\n var style = attr.style;\n if (style) {\n attr.style = style.replace(/(display\\s*:\\s*none\\s*;?)*/gi, '');\n }\n return attr;\n }\n function normalizeCols(table, visibleColumns, hasDetails, groups) {\n var colgroup = table.find('>colgroup'), width, cols = map(visibleColumns, function (column) {\n width = column.width;\n if (width && parseInt(width, 10) !== 0) {\n return kendo.format('<col style=\"width:{0}\"/>', typeof width === STRING ? width : width + 'px');\n }\n return '<col />';\n });\n if (hasDetails || colgroup.find('.k-hierarchy-col').length) {\n cols.splice(0, 0, '<col class=\"k-hierarchy-col\" />');\n }\n if (colgroup.length) {\n colgroup.remove();\n }\n colgroup = $(new Array(groups + 1).join('<col class=\"k-group-col\">') + cols.join(''));\n if (!colgroup.is('colgroup')) {\n colgroup = $('<colgroup/>').append(colgroup);\n }\n table.prepend(colgroup);\n if (browser.msie && browser.version == 8) {\n table.css('display', 'inline-table');\n window.setTimeout(function () {\n table.css('display', '');\n }, 1);\n }\n }\n function normalizeHeaderCells(container, columns) {\n var lastIndex = 0;\n var idx, len;\n var th = container.find('th:not(.k-group-cell)');\n for (idx = 0, len = columns.length; idx < len; idx++) {\n if (columns[idx].locked) {\n th.eq(idx).insertBefore(th.eq(lastIndex));\n th = container.find('th:not(.k-group-cell)');\n lastIndex++;\n }\n }\n }\n function convertToObject(array) {\n var result = {}, item, idx, length;\n for (idx = 0, length = array.length; idx < length; idx++) {\n item = array[idx];\n result[item.value] = item.text;\n }\n return result;\n }\n function formatGroupValue(value, format, columnValues, encoded) {\n var isForeignKey = columnValues && columnValues.length && isPlainObject(columnValues[0]) && 'value' in columnValues[0], groupValue = isForeignKey ? convertToObject(columnValues)[value] : value;\n groupValue = groupValue != null ? groupValue : '';\n return format ? kendo.format(format, groupValue) : encoded === false ? groupValue : kendo.htmlEncode(groupValue);\n }\n function setCellVisibility(cells, index, visible) {\n var pad = 0, state, cell = cells[pad];\n while (cell) {\n state = visible ? true : cell.style.display !== 'none';\n if (state && !nonDataCellsRegExp.test(cell.className) && --index < 0) {\n cell.style.display = visible ? '' : 'none';\n break;\n }\n cell = cells[++pad];\n }\n }\n function hideColumnCells(rows, columnIndex) {\n var idx = 0, length = rows.length, cell, row;\n for (; idx < length; idx += 1) {\n row = rows.eq(idx);\n if (row.is('.k-grouping-row,.k-detail-row')) {\n cell = row.children(':not(.k-group-cell):first,.k-detail-cell').last();\n cell.attr('colspan', parseInt(cell.attr('colspan'), 10) - 1);\n } else {\n if (row.hasClass('k-grid-edit-row') && (cell = row.children('.k-edit-container')[0])) {\n cell = $(cell);\n cell.attr('colspan', parseInt(cell.attr('colspan'), 10) - 1);\n cell.find('col').eq(columnIndex).remove();\n row = cell.find('tr:first');\n }\n setCellVisibility(row[0].cells, columnIndex, false);\n }\n }\n }\n function groupRows(data) {\n var result = [];\n var item;\n for (var idx = 0; idx < data.length; idx++) {\n item = data[idx];\n if (!('field' in item && 'value' in item && 'items' in item)) {\n break;\n }\n result.push(item);\n if (item.hasSubgroups) {\n result = result.concat(groupRows(item.items));\n }\n }\n return result;\n }\n function groupFooters(data) {\n var result = [];\n var item;\n for (var idx = 0; idx < data.length; idx++) {\n item = data[idx];\n if (!('field' in item && 'value' in item && 'items' in item)) {\n break;\n }\n if (item.hasSubgroups) {\n result = result.concat(groupFooters(item.items));\n }\n result.push(item.aggregates);\n }\n return result;\n }\n function showColumnCells(rows, columnIndex) {\n var idx = 0, length = rows.length, cell, row, columns;\n for (; idx < length; idx += 1) {\n row = rows.eq(idx);\n if (row.is('.k-grouping-row,.k-detail-row')) {\n cell = row.children(':not(.k-group-cell):first,.k-detail-cell').last();\n cell.attr('colspan', parseInt(cell.attr('colspan'), 10) + 1);\n } else {\n if (row.hasClass('k-grid-edit-row') && (cell = row.children('.k-edit-container')[0])) {\n cell = $(cell);\n cell.attr('colspan', parseInt(cell.attr('colspan'), 10) + 1);\n normalizeCols(cell.find('>form>table'), visibleColumns(columns), false, 0);\n row = cell.find('tr:first');\n }\n setCellVisibility(row[0].cells, columnIndex, true);\n }\n }\n }\n function updateColspan(toAdd, toRemove, num) {\n num = num || 1;\n var item, idx, length;\n for (idx = 0, length = toAdd.length; idx < length; idx++) {\n item = toAdd.eq(idx).children().last();\n item.attr('colspan', parseInt(item.attr('colspan'), 10) + num);\n item = toRemove.eq(idx).children().last();\n item.attr('colspan', parseInt(item.attr('colspan'), 10) - num);\n }\n }\n function tableWidth(table) {\n var idx, length, width = 0;\n var cols = table.find('>colgroup>col');\n for (idx = 0, length = cols.length; idx < length; idx += 1) {\n width += parseInt(cols[idx].style.width, 10);\n }\n return width;\n }\n var Grid = kendo.ui.DataBoundWidget.extend({\n init: function (element, options, events) {\n var that = this;\n options = isArray(options) ? { dataSource: options } : options;\n Widget.fn.init.call(that, element, options);\n if (events) {\n that._events = events;\n }\n isRtl = kendo.support.isRtl(element);\n that._element();\n that._aria();\n that._columns(that.options.columns);\n that._dataSource();\n that._tbody();\n that._pageable();\n that._thead();\n that._groupable();\n that._toolbar();\n that._setContentHeight();\n that._templates();\n that._navigatable();\n that._selectable();\n that._clipboard();\n that._details();\n that._editable();\n that._attachCustomCommandsEvent();\n that._minScreenSupport();\n if (that.options.autoBind) {\n that.dataSource.fetch();\n } else {\n that._group = that._groups() > 0;\n that._footer();\n }\n if (that.lockedContent) {\n that.wrapper.addClass('k-grid-lockedcolumns');\n that._resizeHandler = function () {\n that.resize();\n };\n $(window).on('resize' + NS, that._resizeHandler);\n }\n kendo.notify(that);\n },\n events: [\n CHANGE,\n 'dataBinding',\n 'cancel',\n DATABOUND,\n DETAILEXPAND,\n DETAILCOLLAPSE,\n DETAILINIT,\n FILTERMENUINIT,\n COLUMNMENUINIT,\n EDIT,\n SAVE,\n REMOVE,\n SAVECHANGES,\n COLUMNRESIZE,\n COLUMNREORDER,\n COLUMNSHOW,\n COLUMNHIDE,\n COLUMNLOCK,\n COLUMNUNLOCK,\n NAVIGATE,\n 'page',\n 'sort',\n 'filter',\n 'group'\n ],\n setDataSource: function (dataSource) {\n var that = this;\n var scrollable = that.options.scrollable;\n that.options.dataSource = dataSource;\n that._dataSource();\n that._pageable();\n that._thead();\n if (scrollable) {\n if (scrollable.virtual) {\n that.content.find('>.k-virtual-scrollable-wrap').scrollLeft(0);\n } else {\n that.content.scrollLeft(0);\n }\n }\n if (that.options.groupable) {\n that._groupable();\n }\n if (that.virtualScrollable) {\n that.virtualScrollable.setDataSource(that.options.dataSource);\n }\n if (that.options.navigatable) {\n that._navigatable();\n }\n if (that.options.selectable) {\n that._selectable();\n }\n if (that.options.autoBind) {\n dataSource.fetch();\n }\n },\n options: {\n name: 'Grid',\n columns: [],\n toolbar: null,\n autoBind: true,\n filterable: false,\n scrollable: true,\n sortable: false,\n selectable: false,\n allowCopy: false,\n navigatable: false,\n pageable: false,\n editable: false,\n groupable: false,\n rowTemplate: '',\n altRowTemplate: '',\n noRecords: false,\n dataSource: {},\n height: null,\n resizable: false,\n reorderable: false,\n columnMenu: false,\n detailTemplate: null,\n columnResizeHandleWidth: 3,\n mobile: '',\n messages: {\n editable: {\n cancelDelete: CANCELDELETE,\n confirmation: DELETECONFIRM,\n confirmDelete: CONFIRMDELETE\n },\n commands: {\n create: defaultCommands.create.text,\n cancel: defaultCommands.cancel.text,\n save: defaultCommands.save.text,\n destroy: defaultCommands.destroy.text,\n edit: defaultCommands.edit.text,\n update: defaultCommands.update.text,\n canceledit: defaultCommands.canceledit.text,\n excel: defaultCommands.excel.text,\n pdf: defaultCommands.pdf.text\n },\n noRecords: NORECORDS\n }\n },\n destroy: function () {\n var that = this, element;\n that._angularItems('cleanup');\n that._destroyColumnAttachments();\n Widget.fn.destroy.call(that);\n this._navigatableTables = null;\n if (that._resizeHandler) {\n $(window).off('resize' + NS, that._resizeHandler);\n }\n if (that.pager && that.pager.element) {\n that.pager.destroy();\n }\n that.pager = null;\n if (that.groupable && that.groupable.element) {\n that.groupable.element.kendoGroupable('destroy');\n }\n that.groupable = null;\n if (that.options.reorderable) {\n that.wrapper.data('kendoReorderable').destroy();\n }\n if (that.selectable && that.selectable.element) {\n that.selectable.destroy();\n that.clearArea();\n if (that.copyHandler) {\n that.wrapper.off('keydown', that.copyHandler);\n that.unbind(that.copyHandler);\n }\n if (that.updateClipBoardState) {\n that.unbind(that.updateClipBoardState);\n that.updateClipBoardState = null;\n }\n if (that.clearAreaHandler) {\n that.wrapper.off('keyup', that.clearAreaHandler);\n }\n }\n that.selectable = null;\n if (that.resizable) {\n that.resizable.destroy();\n if (that._resizeUserEvents) {\n if (that._resizeHandleDocumentClickHandler) {\n $(document).off('click', that._resizeHandleDocumentClickHandler);\n }\n that._resizeUserEvents.destroy();\n that._resizeUserEvents = null;\n }\n that.resizable = null;\n }\n if (that.virtualScrollable && that.virtualScrollable.element) {\n that.virtualScrollable.destroy();\n }\n that.virtualScrollable = null;\n that._destroyEditable();\n if (that.dataSource) {\n that.dataSource.unbind(CHANGE, that._refreshHandler).unbind(PROGRESS, that._progressHandler).unbind(ERROR, that._errorHandler);\n that._refreshHandler = that._progressHandler = that._errorHandler = null;\n }\n element = that.element.add(that.wrapper).add(that.table).add(that.thead).add(that.wrapper.find('>.k-grid-toolbar'));\n if (that.content) {\n element = element.add(that.content).add(that.content.find('>.k-virtual-scrollable-wrap'));\n }\n if (that.lockedHeader) {\n that._removeLockedContainers();\n }\n if (that.pane) {\n that.pane.destroy();\n }\n if (that.minScreenResizeHandler) {\n $(window).off('resize', that.minScreenResizeHandler);\n }\n if (that._draggableInstance && that._draggableInstance.element) {\n that._draggableInstance.destroy();\n }\n that._draggableInstance = null;\n element.off(NS);\n kendo.destroy(that.wrapper);\n that.rowTemplate = that.altRowTemplate = that.lockedRowTemplate = that.lockedAltRowTemplate = that.detailTemplate = that.footerTemplate = that.groupFooterTemplate = that.lockedGroupFooterTemplate = that.noRecordsTemplate = null;\n that.scrollables = that.thead = that.tbody = that.element = that.table = that.content = that.footer = that.wrapper = that.lockedTable = that.lockedContent = that.lockedHeader = that.lockedFooter = that._groupableClickHandler = that._setContentWidthHandler = null;\n },\n getOptions: function () {\n var options = this.options;\n options.dataSource = null;\n var result = extend(true, {}, this.options);\n result.columns = kendo.deepExtend([], this.columns);\n var dataSource = this.dataSource;\n var initialData = dataSource.options.data && dataSource._data;\n dataSource.options.data = null;\n result.dataSource = $.extend(true, {}, dataSource.options);\n dataSource.options.data = initialData;\n result.dataSource.data = initialData;\n result.dataSource.page = dataSource.page();\n result.dataSource.filter = dataSource.filter();\n result.dataSource.pageSize = dataSource.pageSize();\n result.dataSource.sort = dataSource.sort();\n result.dataSource.group = dataSource.group();\n result.dataSource.aggregate = dataSource.aggregate();\n if (result.dataSource.transport) {\n result.dataSource.transport.dataSource = null;\n }\n if (result.pageable && result.pageable.pageSize) {\n result.pageable.pageSize = dataSource.pageSize();\n }\n result.$angular = undefined;\n return result;\n },\n setOptions: function (options) {\n var currentOptions = this.getOptions();\n kendo.deepExtend(currentOptions, options);\n if (!options.dataSource) {\n currentOptions.dataSource = this.dataSource;\n }\n var wrapper = this.wrapper;\n var events = this._events;\n var element = this.element;\n this.destroy();\n this.options = null;\n if (this._isMobile) {\n var mobileWrapper = wrapper.closest(kendo.roleSelector('pane')).parent();\n mobileWrapper.after(wrapper);\n mobileWrapper.remove();\n wrapper.removeClass('k-grid-mobile');\n }\n if (wrapper[0] !== element[0]) {\n wrapper.before(element);\n wrapper.remove();\n }\n element.empty();\n this.init(element, currentOptions, events);\n this._setEvents(currentOptions);\n },\n items: function () {\n if (this.lockedContent) {\n return this._items(this.tbody).add(this._items(this.lockedTable.children('tbody')));\n } else {\n return this._items(this.tbody);\n }\n },\n _items: function (container) {\n return container.children().filter(function () {\n var tr = $(this);\n return !tr.hasClass('k-grouping-row') && !tr.hasClass('k-detail-row') && !tr.hasClass('k-group-footer');\n });\n },\n dataItems: function () {\n var dataItems = kendo.ui.DataBoundWidget.fn.dataItems.call(this);\n if (this.lockedContent) {\n var n = dataItems.length, tmp = new Array(2 * n);\n for (var i = n; --i >= 0;) {\n tmp[i] = tmp[i + n] = dataItems[i];\n }\n dataItems = tmp;\n }\n return dataItems;\n },\n _destroyColumnAttachments: function () {\n var that = this;\n that.resizeHandle = null;\n if (!that.thead) {\n return;\n }\n this.angular('cleanup', function () {\n return { elements: that.thead.get() };\n });\n that.thead.add(that.lockedHeader).find('th').each(function () {\n var th = $(this), filterMenu = th.data('kendoFilterMenu'), sortable = th.data('kendoColumnSorter'), columnMenu = th.data('kendoColumnMenu');\n if (filterMenu) {\n filterMenu.destroy();\n }\n if (sortable) {\n sortable.destroy();\n }\n if (columnMenu) {\n columnMenu.destroy();\n }\n });\n },\n _attachCustomCommandsEvent: function () {\n var that = this, columns = leafColumns(that.columns || []), command, idx, length;\n for (idx = 0, length = columns.length; idx < length; idx++) {\n command = columns[idx].command;\n if (command) {\n attachCustomCommandEvent(that, that.wrapper, command);\n }\n }\n },\n _aria: function () {\n var id = this.element.attr('id') || 'aria';\n if (id) {\n this._cellId = id + '_active_cell';\n }\n },\n _element: function () {\n var that = this, table = that.element;\n if (!table.is('table')) {\n if (that.options.scrollable) {\n table = that.element.find('> .k-grid-content > table');\n } else {\n table = that.element.children('table');\n }\n if (!table.length) {\n table = $('<table />').appendTo(that.element);\n }\n }\n if (isIE7) {\n table.attr('cellspacing', 0);\n }\n that.table = table.attr('role', that._hasDetails() ? 'treegrid' : 'grid');\n that._wrapper();\n },\n _createResizeHandle: function (container, th) {\n var that = this;\n var indicatorWidth = that.options.columnResizeHandleWidth;\n var scrollable = that.options.scrollable;\n var resizeHandle = that.resizeHandle;\n var groups = this._groups();\n var left;\n if (resizeHandle && that.lockedContent && resizeHandle.data('th')[0] !== th[0]) {\n resizeHandle.off(NS).remove();\n resizeHandle = null;\n }\n if (!resizeHandle) {\n resizeHandle = that.resizeHandle = $('<div class=\"k-resize-handle\"><div class=\"k-resize-handle-inner\"></div></div>');\n container.append(resizeHandle);\n }\n if (!isRtl) {\n left = th[0].offsetWidth;\n var cells = leafDataCells(th.closest('thead')).filter(':visible');\n for (var idx = 0; idx < cells.length; idx++) {\n if (cells[idx] == th[0]) {\n break;\n }\n left += cells[idx].offsetWidth;\n }\n if (groups > 0) {\n left += outerWidth(container.find('.k-group-cell:first')) * groups;\n }\n if (that._hasDetails()) {\n left += outerWidth(container.find('.k-hierarchy-cell:first'));\n }\n } else {\n left = th.position().left;\n if (scrollable) {\n var headerWrap = th.closest('.k-grid-header-wrap, .k-grid-header-locked'), ieCorrection = browser.msie ? headerWrap.scrollLeft() : 0, webkitCorrection = browser.webkit ? headerWrap[0].scrollWidth - headerWrap[0].offsetWidth - headerWrap.scrollLeft() : 0, firefoxCorrection = browser.mozilla ? headerWrap[0].scrollWidth - headerWrap[0].offsetWidth - (headerWrap[0].scrollWidth - headerWrap[0].offsetWidth - headerWrap.scrollLeft()) : 0;\n left -= webkitCorrection - firefoxCorrection + ieCorrection;\n }\n }\n resizeHandle.css({\n top: th.position().top,\n left: left - indicatorWidth,\n height: outerHeight(th),\n width: indicatorWidth * 3\n }).data('th', th).show();\n resizeHandle.off('dblclick' + NS).on('dblclick' + NS, function () {\n that._autoFitLeafColumn(th.data('index'));\n });\n },\n _positionColumnResizeHandle: function () {\n var that = this, indicatorWidth = that.options.columnResizeHandleWidth, lockedHead = that.lockedHeader ? that.lockedHeader.find('thead:first') : $();\n that.thead.add(lockedHead).on('mousemove' + NS, 'th', function (e) {\n var th = $(this);\n if (th.hasClass('k-group-cell') || th.hasClass('k-hierarchy-cell')) {\n return;\n }\n function getPageZoomStyle() {\n var docZoom = parseFloat($(document.documentElement).css('zoom'));\n if (isNaN(docZoom)) {\n docZoom = 1;\n }\n var bodyZoom = parseFloat($(document.body).css('zoom'));\n if (isNaN(bodyZoom)) {\n bodyZoom = 1;\n }\n return docZoom * bodyZoom;\n }\n var clientX = e.clientX / getPageZoomStyle(), winScrollLeft = $(window).scrollLeft(), position = th.offset().left + (!isRtl ? this.offsetWidth : 0);\n if (clientX + winScrollLeft > position - indicatorWidth && clientX + winScrollLeft < position + indicatorWidth) {\n that._createResizeHandle(th.closest('div'), th);\n } else if (that.resizeHandle) {\n that.resizeHandle.hide();\n } else {\n cursor(that.wrapper, '');\n }\n });\n },\n _resizeHandleDocumentClick: function (e) {\n if ($(e.target).closest('.k-column-active').length) {\n return;\n }\n $(document).off(e);\n this._hideResizeHandle();\n },\n _hideResizeHandle: function () {\n if (this.resizeHandle) {\n this.resizeHandle.data('th').removeClass('k-column-active');\n if (this.lockedContent && !this._isMobile) {\n this.resizeHandle.off(NS).remove();\n this.resizeHandle = null;\n } else {\n this.resizeHandle.hide();\n }\n }\n },\n _positionColumnResizeHandleTouch: function () {\n var that = this, lockedHead = that.lockedHeader ? that.lockedHeader.find('thead:first') : $();\n that._resizeUserEvents = new kendo.UserEvents(lockedHead.add(that.thead), {\n filter: 'th:not(.k-group-cell):not(.k-hierarchy-cell)',\n threshold: 10,\n hold: function (e) {\n var th = $(e.target);\n e.preventDefault();\n th.addClass('k-column-active');\n that._createResizeHandle(th.closest('div'), th);\n if (!that._resizeHandleDocumentClickHandler) {\n that._resizeHandleDocumentClickHandler = proxy(that._resizeHandleDocumentClick, that);\n }\n $(document).on('click', that._resizeHandleDocumentClickHandler);\n }\n });\n },\n _resizable: function () {\n var that = this, options = that.options, container, columnStart, columnWidth, columnMinWidth, gridWidth, isMobile = this._isMobile, scrollbar = !kendo.support.mobileOS ? kendo.support.scrollbar() : 0, isLocked, col, th;\n if (options.resizable) {\n container = options.scrollable ? that.wrapper.find('.k-grid-header-wrap:first') : that.wrapper;\n if (isMobile) {\n that._positionColumnResizeHandleTouch(container);\n } else {\n that._positionColumnResizeHandle(container);\n }\n if (that.resizable) {\n that.resizable.destroy();\n }\n that.resizable = new ui.Resizable(container.add(that.lockedHeader), {\n handle: (!!options.scrollable ? '' : '>') + '.k-resize-handle',\n hint: function (handle) {\n return $('<div class=\"k-grid-resize-indicator\" />').css({ height: outerHeight(handle.data('th')) + that.tbody.attr('clientHeight') });\n },\n start: function (e) {\n th = $(e.currentTarget).data('th');\n if (isMobile) {\n that._hideResizeHandle();\n }\n var header = th.closest('table'), index = $.inArray(th[0], leafDataCells(th.closest('thead')).filter(':visible'));\n isLocked = header.parent().hasClass('k-grid-header-locked');\n var contentTable = isLocked ? that.lockedTable : that.table, footer = that.footer || $();\n if (that.footer && that.lockedContent) {\n footer = isLocked ? that.footer.children('.k-grid-footer-locked') : that.footer.children('.k-grid-footer-wrap');\n }\n cursor(that.wrapper, 'col-resize');\n if (options.scrollable) {\n col = header.find('col:not(.k-group-col):not(.k-hierarchy-col):eq(' + index + ')').add(contentTable.children('colgroup').find('col:not(.k-group-col):not(.k-hierarchy-col):eq(' + index + ')')).add(footer.find('colgroup').find('col:not(.k-group-col):not(.k-hierarchy-col):eq(' + index + ')'));\n } else {\n col = contentTable.children('colgroup').find('col:not(.k-group-col):not(.k-hierarchy-col):eq(' + index + ')');\n }\n columnStart = e.x.location;\n columnWidth = outerWidth(th);\n columnMinWidth = leafColumns(that.columns)[index].minResizableWidth || 10;\n gridWidth = isLocked ? outerWidth(contentTable.children('tbody')) : outerWidth(that.tbody);\n if (browser.webkit) {\n that.wrapper.addClass('k-grid-column-resizing');\n }\n },\n resize: function (e) {\n var rtlMultiplier = isRtl ? -1 : 1, currentWidth = columnWidth + e.x.location * rtlMultiplier - columnStart * rtlMultiplier;\n if (options.scrollable) {\n var footer;\n if (isLocked && that.lockedFooter) {\n footer = that.lockedFooter.children('table');\n } else if (that.footer) {\n footer = that.footer.find('>.k-grid-footer-wrap>table');\n }\n if (!footer || !footer[0]) {\n footer = $();\n }\n var header = th.closest('table');\n var contentTable = isLocked ? that.lockedTable : that.table;\n var constrain = false;\n var totalWidth = that.wrapper.width() - scrollbar;\n var width = currentWidth;\n if (isLocked && gridWidth - columnWidth + width > totalWidth) {\n width = columnWidth + (totalWidth - gridWidth - scrollbar * 2);\n if (width < 0) {\n width = currentWidth;\n }\n constrain = true;\n }\n if (width > 10 && width >= columnMinWidth) {\n col.css('width', width);\n if (gridWidth) {\n if (constrain) {\n width = totalWidth - scrollbar * 2;\n } else {\n width = gridWidth + e.x.location * rtlMultiplier - columnStart * rtlMultiplier;\n }\n contentTable.add(header).add(footer).css('width', width);\n if (!isLocked) {\n that._footerWidth = width;\n }\n }\n }\n } else if (currentWidth > 10 && currentWidth >= columnMinWidth) {\n col.css('width', currentWidth);\n }\n },\n resizeend: function () {\n var newWidth = outerWidth(th), column, header;\n cursor(that.wrapper, '');\n if (browser.webkit) {\n that.wrapper.removeClass('k-grid-column-resizing');\n }\n if (columnWidth != newWidth) {\n header = that.lockedHeader ? that.lockedHeader.find('thead:first tr:first').add(that.thead.find('tr:first')) : th.parent();\n var index = th.attr(kendo.attr('index'));\n if (!index) {\n index = header.find('th:not(.k-group-cell):not(.k-hierarchy-cell)').index(th);\n }\n column = leafColumns(that.columns)[index];\n column.width = newWidth;\n that.trigger(COLUMNRESIZE, {\n column: column,\n oldWidth: columnWidth,\n newWidth: newWidth\n });\n that._applyLockedContainersWidth();\n that._syncLockedContentHeight();\n that._syncLockedHeaderHeight();\n }\n that._hideResizeHandle();\n th = null;\n }\n });\n }\n },\n _draggable: function () {\n var that = this;\n if (that.options.reorderable) {\n if (that._draggableInstance) {\n that._draggableInstance.destroy();\n }\n var header = that.wrapper.children('.k-grid-header');\n that._draggableInstance = that.wrapper.kendoDraggable({\n group: kendo.guid(),\n autoScroll: true,\n filter: that.content ? '.k-grid-header:first ' + HEADERCELLS : 'table:first>.k-grid-header ' + HEADERCELLS,\n dragstart: function () {\n header.children('.k-grid-header-wrap').unbind('scroll' + NS + 'scrolling').bind('scroll' + NS + 'scrolling', function (e) {\n if (that.virtualScrollable) {\n that.content.find('>.k-virtual-scrollable-wrap').scrollLeft(this.scrollLeft);\n } else {\n that.scrollables.not(e.currentTarget).scrollLeft(this.scrollLeft);\n }\n });\n },\n dragend: function () {\n header.children('.k-grid-header-wrap').unbind('scroll' + NS + 'scrolling');\n },\n drag: function () {\n that._hideResizeHandle();\n },\n hint: function (target) {\n var title = target.attr(kendo.attr('title'));\n if (title) {\n title = kendo.htmlEncode(title);\n }\n return $('<div class=\"k-header k-drag-clue\" />').css({\n width: target.width(),\n paddingLeft: target.css('paddingLeft'),\n paddingRight: target.css('paddingRight'),\n lineHeight: target.height() + 'px',\n paddingTop: target.css('paddingTop'),\n paddingBottom: target.css('paddingBottom')\n }).html(title || target.attr(kendo.attr('field')) || target.text()).prepend('<span class=\"k-icon k-drag-status k-i-cancel\" />');\n }\n }).data('kendoDraggable');\n }\n },\n _reorderable: function () {\n var that = this;\n if (that.options.reorderable) {\n if (that.wrapper.data('kendoReorderable')) {\n that.wrapper.data('kendoReorderable').destroy();\n }\n var targetParentContainerIndex = function (columns, sourceIndex, targetIndex) {\n var column = columns[sourceIndex];\n var target = columns[targetIndex];\n var parent = columnParent(column, that.columns);\n columns = parent ? parent.columns : that.columns;\n return inArray(target, columns);\n };\n that.wrapper.kendoReorderable({\n draggable: that._draggableInstance,\n dragOverContainers: function (sourceIndex, targetIndex) {\n var columns = flatColumnsInDomOrder(that.columns);\n return columns[sourceIndex].lockable !== false && targetParentContainerIndex(columns, sourceIndex, targetIndex) > -1;\n },\n inSameContainer: function (e) {\n return $(e.source).parent()[0] === $(e.target).parent()[0] && targetParentContainerIndex(flatColumnsInDomOrder(that.columns), e.sourceIndex, e.targetIndex) > -1;\n },\n change: function (e) {\n var columns = flatColumnsInDomOrder(that.columns);\n var column = columns[e.oldIndex];\n var newIndex = targetParentContainerIndex(columns, e.oldIndex, e.newIndex);\n that.trigger(COLUMNREORDER, {\n newIndex: newIndex,\n oldIndex: inArray(column, columns),\n column: column\n });\n that.reorderColumn(newIndex, column, e.position === 'before');\n }\n });\n }\n },\n _reorderHeader: function (sources, target, before) {\n var that = this;\n var sourcePosition = columnPosition(sources[0], that.columns);\n var destPosition = columnPosition(target, that.columns);\n var leafs = [];\n for (var idx = 0; idx < sources.length; idx++) {\n if (sources[idx].columns) {\n leafs = leafs.concat(sources[idx].columns);\n }\n }\n var ths = elements(that.lockedHeader, that.thead, 'tr:eq(' + sourcePosition.row + ')>th.k-header:not(.k-group-cell,.k-hierarchy-cell)');\n var sourceLockedColumns = lockedColumns(sources).length;\n var targetLockedColumns = lockedColumns([target]).length;\n if (leafs.length) {\n if (sourceLockedColumns > 0 && targetLockedColumns === 0) {\n moveCellsBetweenContainers(sources, target, leafs, that.columns, that.lockedHeader.find('thead'), that.thead, this._groups());\n } else if (sourceLockedColumns === 0 && targetLockedColumns > 0) {\n moveCellsBetweenContainers(sources, target, leafs, that.columns, that.thead, that.lockedHeader.find('thead'), this._groups());\n }\n if (target.columns || sourcePosition.cell - destPosition.cell > 1 || destPosition.cell - sourcePosition.cell > 1) {\n target = findReorderTarget(that.columns, target, sources[0], before);\n if (target) {\n that._reorderHeader(leafs, target, before);\n }\n }\n } else if (sourceLockedColumns !== targetLockedColumns) {\n updateCellRowSpan(ths[sourcePosition.cell], that.columns, sourceLockedColumns);\n }\n reorder(ths, sourcePosition.cell, destPosition.cell, before, sources.length);\n },\n _reorderContent: function (sources, destination, before) {\n var that = this;\n var lockedRows = $();\n var source = sources[0];\n var visibleSources = visibleColumns(sources);\n var sourceIndex = inArray(source, leafColumns(that.columns));\n var destIndex = inArray(destination, leafColumns(that.columns));\n var colSourceIndex = inArray(source, visibleLeafColumns(that.columns));\n var colDest = inArray(destination, visibleLeafColumns(that.columns));\n var lockedCount = lockedColumns(that.columns).length;\n var isLocked = !!destination.locked;\n var footer = that.footer || that.wrapper.find('.k-grid-footer');\n var headerCol, footerCol;\n headerCol = footerCol = colDest;\n if (destination.hidden) {\n if (isLocked) {\n colDest = that.lockedTable.find('colgroup');\n headerCol = that.lockedHeader.find('colgroup');\n footerCol = $(that.lockedFooter).find('>table>colgroup');\n } else {\n colDest = that.tbody.prev();\n headerCol = that.thead.prev();\n footerCol = footer.find('.k-grid-footer-wrap').find('>table>colgroup');\n }\n }\n if (that._hasFilterRow()) {\n reorder(that.wrapper.find('.k-filter-row th:not(.k-group-cell,.k-hierarchy-cell)'), sourceIndex, destIndex, before, sources.length);\n }\n reorder(elements(that.lockedHeader, that.thead.prev(), 'col:not(.k-group-col,.k-hierarchy-col)'), colSourceIndex, headerCol, before, visibleSources.length);\n if (that.options.scrollable) {\n reorder(elements(that.lockedTable, that.tbody.prev(), 'col:not(.k-group-col,.k-hierarchy-col)'), colSourceIndex, colDest, before, visibleSources.length);\n }\n if (footer && footer.length) {\n reorder(elements(that.lockedFooter, footer.find('.k-grid-footer-wrap'), '>table>colgroup>col:not(.k-group-col,.k-hierarchy-col)'), colSourceIndex, footerCol, before, visibleSources.length);\n reorder(footer.find('.k-footer-template>td:not(.k-group-cell,.k-hierarchy-cell)'), sourceIndex, destIndex, before, sources.length);\n }\n var rows = that.tbody.children(':not(.k-grouping-row,.k-detail-row)');\n if (that.lockedTable) {\n if (lockedCount > destIndex) {\n if (lockedCount <= sourceIndex) {\n updateColspan(that.lockedTable.find('>tbody>tr.k-grouping-row'), that.table.find('>tbody>tr.k-grouping-row'), sources.length);\n }\n } else if (lockedCount > sourceIndex) {\n updateColspan(that.table.find('>tbody>tr.k-grouping-row'), that.lockedTable.find('>tbody>tr.k-grouping-row'), sources.length);\n }\n lockedRows = that.lockedTable.find('>tbody>tr:not(.k-grouping-row,.k-detail-row)');\n }\n for (var idx = 0, length = rows.length; idx < length; idx += 1) {\n reorder(elements(lockedRows[idx], rows[idx], '>td:not(.k-group-cell,.k-hierarchy-cell)'), sourceIndex, destIndex, before, sources.length);\n }\n },\n _autoFitLeafColumn: function (leafIndex) {\n this.autoFitColumn(leafColumns(this.columns)[leafIndex]);\n },\n autoFitColumn: function (column) {\n var that = this, options = that.options, columns = that.columns, index, th, headerTable, isLocked, visibleLocked = that.lockedHeader ? leafDataCells(that.lockedHeader.find('>table>thead')).filter(isCellVisible).length : 0, col, contentDiv, scrollLeft, notGroupOrHierarchyCol = 'col:not(.k-group-col):not(.k-hierarchy-col)', notGroupOrHierarchyVisibleCell = 'td:visible:not(.k-group-cell):not(.k-hierarchy-cell)';\n if (typeof column == 'number') {\n column = columns[column];\n } else if (isPlainObject(column)) {\n column = grep(flatColumns(columns), function (item) {\n return item === column;\n })[0];\n } else {\n column = grep(flatColumns(columns), function (item) {\n return item.field === column;\n })[0];\n }\n if (!column || !isVisible(column)) {\n return;\n }\n index = inArray(column, leafColumns(columns));\n isLocked = column.locked;\n if (isLocked) {\n headerTable = that.lockedHeader.children('table');\n } else {\n headerTable = that.thead.parent();\n }\n th = headerTable.find('[data-index=\\'' + index + '\\']');\n var contentTable = isLocked ? that.lockedTable : that.table, footer = that.footer || $();\n if (that.footer && that.lockedContent) {\n footer = isLocked ? that.footer.children('.k-grid-footer-locked') : that.footer.children('.k-grid-footer-wrap');\n }\n var footerTable = footer.find('table').first();\n if (that.lockedHeader && !isLocked) {\n index -= visibleLocked;\n }\n for (var j = 0; j < columns.length; j++) {\n if (columns[j] === column) {\n break;\n } else {\n if (columns[j].hidden) {\n index--;\n }\n }\n }\n if (options.scrollable) {\n col = headerTable.find(notGroupOrHierarchyCol).eq(index).add(contentTable.children('colgroup').find(notGroupOrHierarchyCol).eq(index)).add(footerTable.find('colgroup').find(notGroupOrHierarchyCol).eq(index));\n if (!isLocked) {\n contentDiv = contentTable.parent();\n scrollLeft = contentDiv.scrollLeft();\n }\n } else {\n col = contentTable.children('colgroup').find(notGroupOrHierarchyCol).eq(index);\n }\n var tables = headerTable.add(contentTable).add(footerTable);\n var oldColumnWidth = outerWidth(th);\n col.width('');\n tables.css('table-layout', 'fixed');\n col.width('auto');\n tables.addClass('k-autofitting');\n tables.css('table-layout', '');\n var newColumnWidth = Math.ceil(Math.max(outerWidth(th), outerWidth(contentTable.find('tr:not(.k-grouping-row)').eq(0).children(notGroupOrHierarchyVisibleCell).eq(index)), outerWidth(footerTable.find('tr').eq(0).children(notGroupOrHierarchyVisibleCell).eq(index)))) + 1;\n col.width(newColumnWidth);\n column.width = newColumnWidth;\n if (options.scrollable) {\n var cols = headerTable.find('col'), colWidth, totalWidth = 0;\n for (var idx = 0, length = cols.length; idx < length; idx += 1) {\n colWidth = cols[idx].style.width;\n if (colWidth && colWidth.indexOf('%') == -1) {\n totalWidth += parseInt(colWidth, 10);\n } else {\n totalWidth = 0;\n break;\n }\n }\n if (totalWidth) {\n tables.each(function () {\n this.style.width = totalWidth + 'px';\n });\n }\n }\n if (browser.msie && browser.version == 8) {\n tables.css('display', 'inline-table');\n setTimeout(function () {\n tables.css('display', 'table');\n }, 1);\n }\n tables.removeClass('k-autofitting');\n if (scrollLeft) {\n contentDiv.scrollLeft(scrollLeft);\n }\n that.trigger(COLUMNRESIZE, {\n column: column,\n oldWidth: oldColumnWidth,\n newWidth: newColumnWidth\n });\n that._applyLockedContainersWidth();\n that._syncLockedContentHeight();\n that._syncLockedHeaderHeight();\n },\n reorderColumn: function (destIndex, column, before) {\n var that = this, parent = columnParent(column, that.columns), columns = parent ? parent.columns : that.columns, sourceIndex = inArray(column, columns), destColumn = columns[destIndex], lockChanged, isLocked = !!destColumn.locked, lockedCount = lockedColumns(that.columns).length;\n if (sourceIndex === destIndex) {\n return;\n }\n if (!column.locked && isLocked && nonLockedColumns(that.columns).length == 1) {\n return;\n }\n if (column.locked && !isLocked && lockedCount == 1) {\n return;\n }\n that._hideResizeHandle();\n if (before === undefined) {\n before = destIndex < sourceIndex;\n }\n var sourceColumns = [column];\n that._reorderHeader(sourceColumns, destColumn, before);\n if (that.lockedHeader) {\n removeEmptyRows(that.thead);\n removeEmptyRows(that.lockedHeader);\n }\n if (destColumn.columns) {\n destColumn = leafColumns(destColumn.columns);\n destColumn = destColumn[before ? 0 : destColumn.length - 1];\n }\n if (column.columns) {\n sourceColumns = leafColumns(column.columns);\n }\n that._reorderContent(sourceColumns, destColumn, before);\n lockChanged = !!column.locked;\n lockChanged = lockChanged != isLocked;\n column.locked = isLocked;\n columns.splice(before ? destIndex : destIndex + 1, 0, column);\n columns.splice(sourceIndex < destIndex ? sourceIndex : sourceIndex + 1, 1);\n that._templates();\n that._updateColumnCellIndex();\n that._updateTablesWidth();\n that._applyLockedContainersWidth();\n that._syncLockedHeaderHeight();\n that._syncLockedContentHeight();\n that._updateFirstColumnClass();\n if (!lockChanged) {\n return;\n }\n if (isLocked) {\n that.trigger(COLUMNLOCK, { column: column });\n } else {\n that.trigger(COLUMNUNLOCK, { column: column });\n }\n },\n _updateColumnCellIndex: function () {\n var header;\n var offset = 0;\n if (this.lockedHeader) {\n header = this.lockedHeader.find('thead');\n offset = updateCellIndex(header, lockedColumns(this.columns));\n }\n updateCellIndex(this.thead, nonLockedColumns(this.columns), offset);\n },\n lockColumn: function (column) {\n var columns = this.columns;\n if (typeof column == 'number') {\n column = columns[column];\n } else {\n column = grep(columns, function (item) {\n return item.field === column;\n })[0];\n }\n if (!column || column.locked || column.hidden) {\n return;\n }\n var index = lockedColumns(columns).length - 1;\n this.reorderColumn(index, column, false);\n },\n unlockColumn: function (column) {\n var columns = this.columns;\n if (typeof column == 'number') {\n column = columns[column];\n } else {\n column = grep(columns, function (item) {\n return item.field === column;\n })[0];\n }\n if (!column || !column.locked || column.hidden) {\n return;\n }\n var index = lockedColumns(columns).length;\n this.reorderColumn(index, column, true);\n },\n cellIndex: function (td) {\n var lockedColumnOffset = 0;\n if (this.lockedTable && !$.contains(this.lockedTable[0], td[0])) {\n lockedColumnOffset = leafColumns(lockedColumns(this.columns)).length;\n }\n return $(td).parent().children('td:not(.k-group-cell,.k-hierarchy-cell)').index(td) + lockedColumnOffset;\n },\n _modelForContainer: function (container) {\n container = $(container);\n if (!container.is('tr') && this._editMode() !== 'popup') {\n container = container.closest('tr');\n }\n var id = container.attr(kendo.attr('uid'));\n return this.dataSource.getByUid(id);\n },\n _editable: function () {\n var that = this, selectable = that.selectable && that.selectable.options.multiple, editable = that.options.editable, handler = function () {\n var target = activeElement(), cell = that._editContainer;\n if (cell && !$.contains(cell[0], target) && cell[0] !== target && !$(target).closest('.k-animation-container').length) {\n if (that.editable.end()) {\n that.closeCell();\n }\n }\n };\n if (editable) {\n this.wrapper.addClass('k-editable');\n var mode = that._editMode();\n if (mode === 'incell') {\n if (editable.update !== false) {\n that.wrapper.on(CLICK + NS, 'tr:not(.k-grouping-row) > td', function (e) {\n var td = $(this), isLockedCell = that.lockedTable && td.closest('table')[0] === that.lockedTable[0];\n if (td.hasClass('k-hierarchy-cell') || td.hasClass('k-detail-cell') || td.hasClass('k-group-cell') || td.hasClass('k-edit-cell') || td.has('a.k-grid-delete').length || td.has('button.k-grid-delete').length || td.closest('tbody')[0] !== that.tbody[0] && !isLockedCell || $(e.target).is(':input')) {\n return;\n }\n if (that.editable) {\n if (that.editable.end()) {\n if (selectable) {\n $(activeElement()).blur();\n }\n that.closeCell();\n that.editCell(td);\n }\n } else {\n that.editCell(td);\n }\n }).on('focusin' + NS, function () {\n if (!$.contains(this, activeElement())) {\n clearTimeout(that.timer);\n that.timer = null;\n }\n }).on('focusout' + NS, function () {\n that.timer = setTimeout(handler, 1);\n });\n }\n } else {\n if (editable.update !== false) {\n that.wrapper.on(CLICK + NS, 'tbody>tr:not(.k-detail-row,.k-grouping-row):visible a.k-grid-edit', function (e) {\n e.preventDefault();\n that.editRow($(this).closest('tr'));\n });\n }\n }\n if (editable.destroy !== false) {\n that.wrapper.on(CLICK + NS, 'tbody>tr:not(.k-detail-row,.k-grouping-row):visible .k-grid-delete', function (e) {\n e.preventDefault();\n e.stopPropagation();\n that.removeRow($(this).closest('tr'));\n });\n } else {\n that.wrapper.on(CLICK + NS, 'tbody>tr:not(.k-detail-row,.k-grouping-row):visible button.k-grid-delete', function (e) {\n e.stopPropagation();\n if (!that._confirmation()) {\n e.preventDefault();\n }\n });\n }\n }\n },\n editCell: function (cell) {\n cell = $(cell);\n var that = this, column = leafColumns(that.columns)[that.cellIndex(cell)], model = that._modelForContainer(cell);\n that.closeCell();\n if (model && isColumnEditable(column, model) && !column.command) {\n that._attachModelChange(model);\n that._editContainer = cell;\n that.editable = cell.addClass('k-edit-cell').kendoEditable({\n fields: {\n field: column.field,\n format: column.format,\n editor: column.editor,\n values: column.values\n },\n model: model,\n target: that,\n change: function (e) {\n if (that.trigger(SAVE, {\n values: e.values,\n container: cell,\n model: model\n })) {\n e.preventDefault();\n }\n }\n }).data('kendoEditable');\n var tr = cell.parent().addClass('k-grid-edit-row');\n if (that.lockedContent) {\n adjustRowHeight(tr[0], that._relatedRow(tr).addClass('k-grid-edit-row')[0]);\n }\n that.trigger(EDIT, {\n container: cell,\n model: model\n });\n }\n },\n _adjustLockedHorizontalScrollBar: function () {\n var table = this.table, content = table.parent();\n var scrollbar = table[0].offsetWidth > content[0].clientWidth ? kendo.support.scrollbar() : 0;\n this.lockedContent.height(content.height() - scrollbar);\n },\n _syncLockedContentHeight: function () {\n if (this.lockedTable) {\n if (!this.touchScroller) {\n this._adjustLockedHorizontalScrollBar();\n }\n this._adjustRowsHeight(this.table, this.lockedTable);\n }\n },\n _syncLockedHeaderHeight: function () {\n if (this.lockedHeader) {\n var lockedTable = this.lockedHeader.children('table');\n var table = this.thead.parent();\n this._adjustRowsHeight(lockedTable, table);\n syncTableHeight(lockedTable, table);\n }\n },\n _syncLockedFooterHeight: function () {\n if (this.lockedFooter && this.footer && this.footer.length) {\n this._adjustRowsHeight(this.lockedFooter.children('table'), this.footer.find('.k-grid-footer-wrap > table'));\n }\n },\n _destroyEditable: function () {\n var that = this;\n var destroy = function () {\n if (that.editable) {\n var container = that.editView ? that.editView.element : that._editContainer;\n if (container) {\n container.off(CLICK + NS, 'a.k-grid-cancel', that._editCancelClickHandler);\n container.off(CLICK + NS, 'a.k-grid-update', that._editUpdateClickHandler);\n }\n that._detachModelChange();\n that.editable.destroy();\n that.editable = null;\n that._editContainer = null;\n that._destroyEditView();\n }\n };\n if (that.editable) {\n if (that._editMode() === 'popup' && !that._isMobile) {\n that._editContainer.data('kendoWindow').bind('deactivate', destroy).close();\n } else {\n destroy();\n }\n }\n if (that._actionSheet) {\n that._actionSheet.destroy();\n that._actionSheet = null;\n }\n },\n _destroyEditView: function () {\n if (this.editView) {\n this.editView.purge();\n this.editView = null;\n this.pane.navigate('');\n }\n },\n _attachModelChange: function (model) {\n var that = this;\n that._modelChangeHandler = function (e) {\n that._modelChange({\n field: e.field,\n model: this\n });\n };\n model.bind('change', that._modelChangeHandler);\n },\n _detachModelChange: function () {\n var that = this, container = that._editContainer, model = that._modelForContainer(container);\n if (model) {\n model.unbind(CHANGE, that._modelChangeHandler);\n }\n },\n closeCell: function (isCancel) {\n var that = this, cell = that._editContainer, id, column, tr, model;\n if (!cell) {\n return;\n }\n id = cell.closest('tr').attr(kendo.attr('uid'));\n model = that.dataSource.getByUid(id);\n if (isCancel && that.trigger('cancel', {\n container: cell,\n model: model\n })) {\n return;\n }\n cell.removeClass('k-edit-cell');\n column = leafColumns(that.columns)[that.cellIndex(cell)];\n tr = cell.parent().removeClass('k-grid-edit-row');\n that._destroyEditable();\n that._displayCell(cell, column, model);\n if (cell.hasClass('k-dirty-cell')) {\n $('<span class=\"k-dirty\"/>').prependTo(cell);\n }\n that.trigger('itemChange', {\n item: tr,\n data: model,\n ns: ui\n });\n if (that.lockedContent) {\n adjustRowHeight(tr.css('height', '')[0], that._relatedRow(tr).css('height', '')[0]);\n }\n },\n _displayCell: function (cell, column, dataItem) {\n var that = this, state = {\n storage: {},\n count: 0\n }, settings = extend({}, kendo.Template, that.options.templateSettings), tmpl = kendo.template(that._cellTmpl(column, state), settings);\n if (state.count > 0) {\n tmpl = proxy(tmpl, state.storage);\n }\n cell.empty().html(tmpl(dataItem));\n that.angular('compile', function () {\n return {\n elements: cell,\n data: [{ dataItem: dataItem }]\n };\n });\n },\n removeRow: function (row) {\n if (!this._confirmation(row)) {\n return;\n }\n this._removeRow(row);\n },\n _removeRow: function (row) {\n var that = this, model, mode = that._editMode();\n if (mode !== 'incell') {\n that.cancelRow();\n }\n row = $(row);\n if (that.lockedContent) {\n row = row.add(that._relatedRow(row));\n }\n row = row.hide();\n model = that._modelForContainer(row);\n if (model && !that.trigger(REMOVE, {\n row: row,\n model: model\n })) {\n that.dataSource.remove(model);\n if (mode === 'inline' || mode === 'popup') {\n that.dataSource.sync();\n }\n } else if (mode === 'incell') {\n that._destroyEditable();\n }\n },\n _editMode: function () {\n var mode = 'incell', editable = this.options.editable;\n if (editable !== true) {\n if (typeof editable == 'string') {\n mode = editable;\n } else {\n mode = editable.mode || mode;\n }\n }\n return mode;\n },\n editRow: function (row) {\n var model;\n var that = this;\n if (row instanceof kendo.data.ObservableObject) {\n model = row;\n } else {\n row = $(row);\n model = that._modelForContainer(row);\n }\n var mode = that._editMode();\n var container;\n that.cancelRow();\n if (model) {\n row = that.tbody.children('[' + kendo.attr('uid') + '=' + model.uid + ']');\n that._attachModelChange(model);\n if (mode === 'popup') {\n that._createPopupEditor(model);\n } else if (mode === 'inline') {\n that._createInlineEditor(row, model);\n } else if (mode === 'incell') {\n $(row).children(DATA_CELL).each(function () {\n var cell = $(this);\n var column = leafColumns(that.columns)[that.cellIndex(cell)];\n model = that._modelForContainer(cell);\n if (model && (!model.editable || model.editable(column.field)) && column.field) {\n that.editCell(cell);\n return false;\n }\n });\n }\n container = that.editView ? that.editView.element : that._editContainer;\n if (container) {\n if (!this._editCancelClickHandler) {\n this._editCancelClickHandler = proxy(this._editCancelClick, this);\n }\n container.on(CLICK + NS, 'a.k-grid-cancel', this._editCancelClickHandler);\n if (!this._editUpdateClickHandler) {\n this._editUpdateClickHandler = proxy(this._editUpdateClick, this);\n }\n container.on(CLICK + NS, 'a.k-grid-update', this._editUpdateClickHandler);\n }\n }\n },\n _editUpdateClick: function (e) {\n e.preventDefault();\n e.stopPropagation();\n this.saveRow();\n },\n _editCancelClick: function (e) {\n var that = this;\n var navigatable = that.options.navigatable;\n var model = that.editable.options.model;\n var container = that.editView ? that.editView.element : that._editContainer;\n e.preventDefault();\n e.stopPropagation();\n if (that.trigger('cancel', {\n container: container,\n model: model\n })) {\n return;\n }\n var currentIndex = that.items().index($(that.current()).parent());\n that.cancelRow();\n if (navigatable) {\n that._setCurrent(that.items().eq(currentIndex).children().filter(NAVCELL).first());\n focusTable(that.table, true);\n }\n },\n _createPopupEditor: function (model) {\n var that = this, html = '<div ' + kendo.attr('uid') + '=\"' + model.uid + '\" class=\"k-popup-edit-form' + (that._isMobile ? ' k-mobile-list' : '') + '\"><div class=\"k-edit-form-container\">', column, command, fields = [], idx, length, tmpl, updateText, cancelText, tempCommand, columns = leafColumns(that.columns), attr, editable = that.options.editable, template = editable.template, options = isPlainObject(editable) ? editable.window : {}, settings = extend({}, kendo.Template, that.options.templateSettings);\n options = options || {};\n if (template) {\n if (typeof template === STRING) {\n template = window.unescape(template);\n }\n html += kendo.template(template, settings)(model);\n for (idx = 0, length = columns.length; idx < length; idx++) {\n column = columns[idx];\n if (column.command) {\n tempCommand = getCommand(column.command, 'edit');\n if (tempCommand) {\n command = tempCommand;\n }\n }\n }\n } else {\n for (idx = 0, length = columns.length; idx < length; idx++) {\n column = columns[idx];\n if (!column.command) {\n html += '<div class=\"k-edit-label\"><label for=\"' + column.field + '\">' + (column.title || column.field || '') + '</label></div>';\n if (isColumnEditable(column, model)) {\n fields.push({\n field: column.field,\n format: column.format,\n editor: column.editor,\n values: column.values\n });\n html += '<div ' + kendo.attr('container-for') + '=\"' + column.field + '\" class=\"k-edit-field\"></div>';\n } else {\n var state = {\n storage: {},\n count: 0\n };\n tmpl = kendo.template(that._cellTmpl(column, state), settings);\n if (state.count > 0) {\n tmpl = proxy(tmpl, state.storage);\n }\n html += '<div class=\"k-edit-field\">' + tmpl(model) + '</div>';\n }\n } else if (column.command) {\n tempCommand = getCommand(column.command, 'edit');\n if (tempCommand) {\n command = tempCommand;\n }\n }\n }\n }\n if (command) {\n if (isPlainObject(command)) {\n if (command.text && isPlainObject(command.text)) {\n updateText = command.text.update;\n cancelText = command.text.cancel;\n }\n if (command.attr) {\n attr = command.attr;\n }\n }\n }\n var container;\n if (!that._isMobile) {\n html += '<div class=\"k-edit-buttons k-state-default\">';\n html += that._createButton({\n name: 'update',\n text: updateText,\n attr: attr\n }) + that._createButton({\n name: 'canceledit',\n text: cancelText,\n attr: attr\n });\n html += '</div></div></div>';\n container = that._editContainer = $(html).appendTo(that.wrapper).eq(0).kendoWindow(extend({\n modal: true,\n resizable: false,\n draggable: true,\n title: 'Edit',\n visible: false,\n close: function (e) {\n if (e.userTriggered) {\n e.sender.element.focus();\n if (that.trigger('cancel', {\n container: container,\n model: model\n })) {\n e.preventDefault();\n return;\n }\n var currentIndex = that.items().index($(that.current()).parent());\n that.cancelRow();\n if (that.options.navigatable) {\n that._setCurrent(that.items().eq(currentIndex).children().filter(NAVCELL).first());\n focusTable(that.table, true);\n }\n }\n }\n }, options));\n } else {\n html += '</div></div>';\n that.editView = that.pane.append('<div data-' + kendo.ns + 'role=\"view\" data-' + kendo.ns + 'use-native-scrolling=\"true\" data-' + kendo.ns + 'init-widgets=\"false\" class=\"k-grid-edit-form\">' + '<div data-' + kendo.ns + 'role=\"header\" class=\"k-header\">' + that._createButton({\n name: 'update',\n text: updateText,\n attr: attr\n }) + (options.title || 'Edit') + that._createButton({\n name: 'canceledit',\n text: cancelText,\n attr: attr\n }) + '</div>' + html + '</div>');\n container = that._editContainer = that.editView.element.find('.k-popup-edit-form');\n }\n that.editable = that._editContainer.kendoEditable({\n fields: fields,\n model: model,\n clearContainer: false,\n target: that\n }).data('kendoEditable');\n if (that._isMobile) {\n container.find('input[type=checkbox],input[type=radio]').parent('.k-edit-field').addClass('k-check').prev('.k-edit-label').addClass('k-check').click(function () {\n $(this).next().children('input').click();\n });\n }\n that._openPopUpEditor();\n that.trigger(EDIT, {\n container: container,\n model: model\n });\n },\n _openPopUpEditor: function () {\n if (!this._isMobile) {\n this._editContainer.data('kendoWindow').center().open();\n } else {\n this.pane.navigate(this.editView, this._editAnimation);\n }\n },\n _createInlineEditor: function (row, model) {\n var that = this, column, cell, command, fields = [];\n if (that.lockedContent) {\n row = row.add(that._relatedRow(row));\n }\n row.children(':not(.k-group-cell,.k-hierarchy-cell)').each(function () {\n cell = $(this);\n column = leafColumns(that.columns)[that.cellIndex(cell)];\n if (!column.command && isColumnEditable(column, model)) {\n fields.push({\n field: column.field,\n format: column.format,\n editor: column.editor,\n values: column.values\n });\n cell.attr(kendo.attr('container-for'), column.field);\n cell.empty();\n } else if (column.command) {\n command = getCommand(column.command, 'edit');\n if (command) {\n cell.empty();\n var updateText, cancelText, attr;\n if (isPlainObject(command)) {\n if (command.text && isPlainObject(command.text)) {\n updateText = command.text.update;\n cancelText = command.text.cancel;\n }\n if (command.attr) {\n attr = command.attr;\n }\n }\n $(that._createButton({\n name: 'update',\n text: updateText,\n attr: attr\n }) + that._createButton({\n name: 'canceledit',\n text: cancelText,\n attr: attr\n })).appendTo(cell);\n }\n }\n });\n that._editContainer = row;\n that.editable = new kendo.ui.Editable(row.addClass('k-grid-edit-row'), {\n target: that,\n fields: fields,\n model: model,\n clearContainer: false\n });\n if (row.length > 1) {\n adjustRowHeight(row[0], row[1]);\n that._applyLockedContainersWidth();\n }\n that.trigger(EDIT, {\n container: row,\n model: model\n });\n },\n cancelRow: function (notify) {\n var that = this, container = that._editContainer, model;\n if (container) {\n model = that._modelForContainer(container);\n if (notify && that.trigger('cancel', {\n container: container,\n model: model\n })) {\n return;\n }\n that._destroyEditable();\n that.dataSource.cancelChanges(model);\n if (that._editMode() !== 'popup') {\n that._displayRow(container);\n } else {\n that._displayRow(that.tbody.find('[' + kendo.attr('uid') + '=' + model.uid + ']'));\n }\n }\n },\n saveRow: function () {\n var container = this._editContainer;\n var model = this._modelForContainer(container);\n var deferred = $.Deferred();\n if (!container || !this.editable) {\n return deferred.resolve().promise();\n }\n if (!this.editable.end() || this.trigger(SAVE, {\n container: container,\n model: model\n })) {\n return deferred.reject().promise();\n }\n return this.dataSource.sync();\n },\n _displayRow: function (row) {\n var that = this, model = that._modelForContainer(row), related, newRow, nextRow, isSelected = row.hasClass('k-state-selected'), isAlt = row.hasClass('k-alt');\n if (model) {\n if (that.lockedContent) {\n related = $((isAlt ? that.lockedAltRowTemplate : that.lockedRowTemplate)(model));\n that._relatedRow(row.last()).replaceWith(related);\n }\n that.angular('cleanup', function () {\n return { elements: row.get() };\n });\n newRow = $((isAlt ? that.altRowTemplate : that.rowTemplate)(model));\n row.replaceWith(newRow);\n that.trigger('itemChange', {\n item: newRow,\n data: model,\n ns: ui\n });\n if (related && related.length) {\n that.trigger('itemChange', {\n item: related,\n data: model,\n ns: ui\n });\n }\n var angularElements = newRow;\n var angularData = [{ dataItem: model }];\n if (related && related.length) {\n angularElements = newRow.add(related);\n angularData.push({ dataItem: model });\n }\n that.angular('compile', function () {\n return {\n elements: angularElements.get(),\n data: angularData\n };\n });\n if (isSelected && that.options.selectable) {\n that.select(newRow.add(related));\n }\n if (related) {\n adjustRowHeight(newRow[0], related[0]);\n }\n nextRow = newRow.next();\n if (nextRow.hasClass('k-detail-row') && nextRow.is(':visible')) {\n newRow.find('.k-hierarchy-cell .k-icon').removeClass('k-i-expand').addClass('k-i-collapse');\n }\n }\n },\n _showMessage: function (messages, row) {\n var that = this;\n if (!that._isMobile) {\n return window.confirm(messages.title);\n }\n var template = kendo.template('<ul>' + '<li class=\"km-actionsheet-title\">#:title#</li>' + '<li><a href=\"\\\\#\" class=\"k-button k-grid-delete\">#:confirmDelete#</a></li>' + '</ul>');\n var html = $(template(messages)).appendTo(that.view.element);\n var actionSheet = that._actionSheet = new kendo.mobile.ui.ActionSheet(html, {\n cancel: messages.cancelDelete,\n cancelTemplate: '<li class=\"km-actionsheet-cancel\"><a class=\"k-button\" href=\"\\\\#\">#:cancel#</a></li>',\n close: function () {\n this.destroy();\n },\n command: function (e) {\n var item = $(e.currentTarget).parent();\n if (!item.hasClass('km-actionsheet-cancel')) {\n that._removeRow(row);\n }\n },\n popup: that._actionSheetPopupOptions\n });\n actionSheet.open(row);\n return false;\n },\n _confirmation: function (row) {\n var that = this, editable = that.options.editable, confirmation = editable === true || typeof editable === STRING ? that.options.messages.editable.confirmation : editable.confirmation;\n if (isPlainObject(editable) && typeof editable.mode === STRING && typeof confirmation !== STRING && confirmation !== false) {\n confirmation = that.options.messages.editable.confirmation;\n }\n if (confirmation !== false && confirmation != null) {\n if (typeof confirmation === FUNCTION) {\n confirmation = confirmation(that._modelForContainer(row));\n }\n return that._showMessage({\n confirmDelete: editable.confirmDelete || that.options.messages.editable.confirmDelete,\n cancelDelete: editable.cancelDelete || that.options.messages.editable.cancelDelete,\n title: confirmation === true ? that.options.messages.editable.confirmation : confirmation\n }, row);\n }\n return true;\n },\n cancelChanges: function () {\n this.dataSource.cancelChanges();\n },\n saveChanges: function () {\n var that = this;\n if ((that.editable && that.editable.end() || !that.editable) && !that.trigger(SAVECHANGES)) {\n that.dataSource.sync();\n }\n },\n addRow: function () {\n var that = this, index, dataSource = that.dataSource, mode = that._editMode(), createAt = that.options.editable.createAt || '', pageSize = dataSource.pageSize(), view = dataSource.view() || [];\n if (that.editable && that.editable.end() || !that.editable) {\n if (mode != 'incell') {\n that.cancelRow();\n }\n index = dataSource.indexOf(view[0]);\n if (createAt.toLowerCase() == 'bottom') {\n index += view.length;\n if (pageSize && !dataSource.options.serverPaging && pageSize <= view.length) {\n index -= 1;\n }\n }\n if (index < 0) {\n if (dataSource.page() > dataSource.totalPages()) {\n index = (dataSource.page() - 1) * pageSize;\n } else {\n index = 0;\n }\n }\n var model = dataSource.insert(index, {}), id = model.uid, table = that.lockedContent ? that.lockedTable : that.table, row = table.find('tr[' + kendo.attr('uid') + '=' + id + ']'), cell = row.children('td:not(.k-group-cell,.k-hierarchy-cell)').eq(that._firstEditableColumnIndex(row));\n if (mode === 'inline' && row.length) {\n that.editRow(row);\n } else if (mode === 'popup') {\n that.editRow(model);\n } else if (cell.length) {\n that.editCell(cell);\n }\n if (createAt.toLowerCase() == 'bottom' && that.lockedContent) {\n that.lockedContent[0].scrollTop = that.content[0].scrollTop = that.table[0].offsetHeight;\n }\n }\n },\n _firstEditableColumnIndex: function (container) {\n var that = this, column, columns = leafColumns(that.columns), idx, length, model = that._modelForContainer(container);\n for (idx = 0, length = columns.length; idx < length; idx++) {\n column = columns[idx];\n if (model && (!model.editable || model.editable(column.field)) && !column.command && column.field && column.hidden !== true) {\n return idx;\n }\n }\n return -1;\n },\n _toolbar: function () {\n var that = this, wrapper = that.wrapper, toolbar = that.options.toolbar, editable = that.options.editable, container;\n if (toolbar) {\n container = that.wrapper.find('.k-grid-toolbar');\n if (!container.length) {\n if (!isFunction(toolbar)) {\n toolbar = typeof toolbar === STRING ? toolbar : that._toolbarTmpl(toolbar).replace(templateHashRegExp, '\\\\#');\n toolbar = proxy(kendo.template(toolbar), that);\n }\n container = $('<div class=\"k-header k-grid-toolbar\" />').html(toolbar({})).prependTo(wrapper);\n that.angular('compile', function () {\n return { elements: container.get() };\n });\n }\n if (editable && editable.create !== false) {\n container.on(CLICK + NS, '.k-grid-add', function (e) {\n e.preventDefault();\n that.addRow();\n }).on(CLICK + NS, '.k-grid-cancel-changes', function (e) {\n e.preventDefault();\n that.cancelChanges();\n }).on(CLICK + NS, '.k-grid-save-changes', function (e) {\n e.preventDefault();\n that.saveChanges();\n });\n }\n container.on(CLICK + NS, '.k-grid-excel', function (e) {\n e.preventDefault();\n that.saveAsExcel();\n });\n container.on(CLICK + NS, '.k-grid-pdf', function (e) {\n e.preventDefault();\n that.saveAsPDF();\n });\n }\n },\n _toolbarTmpl: function (commands) {\n var that = this, idx, length, html = '';\n if (isArray(commands)) {\n for (idx = 0, length = commands.length; idx < length; idx++) {\n html += that._createButton(commands[idx]);\n }\n }\n return html;\n },\n _createButton: function (command) {\n var template = command.template || COMMANDBUTTONTMPL, commandName = typeof command === STRING ? command : command.name || command.text, className = defaultCommands[commandName] ? defaultCommands[commandName].className : 'k-grid-' + (commandName || '').replace(/\\s/g, ''), options = {\n className: className,\n text: commandName,\n imageClass: '',\n attr: '',\n iconClass: ''\n }, messages = this.options.messages.commands, attributeClassMatch;\n if (!commandName && !(isPlainObject(command) && command.template)) {\n throw new Error('Custom commands should have name specified');\n }\n if (isPlainObject(command)) {\n command = extend(true, {}, command);\n if (command.className && inArray(options.className, command.className.split(' ')) < 0) {\n command.className += ' ' + options.className;\n } else if (command.className === undefined) {\n command.className = options.className;\n }\n if (commandName === 'edit' && isPlainObject(command.text)) {\n command = extend(true, {}, command);\n command.text = command.text.edit;\n }\n if (command.attr) {\n if (isPlainObject(command.attr)) {\n command.attr = stringifyAttributes(command.attr);\n }\n if (typeof command.attr === STRING) {\n attributeClassMatch = command.attr.match(/class=\"(.+?)\"/);\n if (attributeClassMatch && inArray(attributeClassMatch[1], command.className.split(' ')) < 0) {\n command.className += ' ' + attributeClassMatch[1];\n }\n }\n }\n options = extend(true, options, defaultCommands[commandName], { text: messages[commandName] }, command);\n } else {\n options = extend(true, options, defaultCommands[commandName], { text: messages[commandName] });\n }\n return kendo.template(template)(options);\n },\n _hasFooters: function () {\n return !!this.footerTemplate || !!this.groupFooterTemplate || this.footer && this.footer.length > 0 || this.wrapper.find('.k-grid-footer').length > 0;\n },\n _groupable: function () {\n var that = this;\n if (that._groupableClickHandler) {\n that.table.add(that.lockedTable).off(CLICK + NS, that._groupableClickHandler);\n } else {\n that._groupableClickHandler = function (e) {\n var element = $(this), group = element.closest('tr');\n if (element.hasClass('k-i-collapse')) {\n that.collapseGroup(group);\n } else {\n that.expandGroup(group);\n }\n e.preventDefault();\n e.stopPropagation();\n };\n }\n if (that._isLocked()) {\n that.lockedTable.on(CLICK + NS, '.k-grouping-row .k-i-expand, .k-grouping-row .k-i-collapse', that._groupableClickHandler);\n } else {\n that.table.on(CLICK + NS, '.k-grouping-row .k-i-expand, .k-grouping-row .k-i-collapse', that._groupableClickHandler);\n }\n that._attachGroupable();\n },\n _attachGroupable: function () {\n var that = this, wrapper = that.wrapper, groupable = that.options.groupable, draggables = HEADERCELLS + '[' + kendo.attr('field') + ']', filter = that.content ? '.k-grid-header:first ' + draggables : 'table:first>.k-grid-header ' + draggables;\n if (groupable && groupable.enabled !== false) {\n if (!wrapper.has('div.k-grouping-header')[0]) {\n $('<div> </div>').addClass('k-grouping-header').prependTo(wrapper);\n }\n if (that.groupable) {\n that.groupable.destroy();\n }\n that.groupable = new ui.Groupable(wrapper, extend({}, groupable, {\n draggable: that._draggableInstance,\n groupContainer: '>div.k-grouping-header',\n dataSource: that.dataSource,\n draggableElements: filter,\n filter: filter,\n allowDrag: that.options.reorderable,\n change: function (e) {\n if (that.trigger('group', { groups: e.groups })) {\n e.preventDefault();\n }\n }\n }));\n }\n },\n _continuousItems: function (filter, cell) {\n if (!this.lockedContent) {\n return;\n }\n var that = this;\n var elements = that.table.add(that.lockedTable);\n var lockedItems = $(filter, elements[0]);\n var nonLockedItems = $(filter, elements[1]);\n var columns = cell ? lockedColumns(that.columns).length : 1;\n var nonLockedColumns = cell ? that.columns.length - columns : 1;\n var result = [];\n for (var idx = 0; idx < lockedItems.length; idx += columns) {\n push.apply(result, lockedItems.slice(idx, idx + columns));\n push.apply(result, nonLockedItems.splice(0, nonLockedColumns));\n }\n return result;\n },\n _selectable: function () {\n var that = this, multi, cell, notString = [], isLocked = that._isLocked(), selectable = that.options.selectable;\n if (selectable) {\n if (that.selectable) {\n that.selectable.destroy();\n }\n selectable = kendo.ui.Selectable.parseOptions(selectable);\n multi = selectable.multiple;\n cell = selectable.cell;\n if (that._hasDetails()) {\n notString[notString.length] = '.k-detail-row';\n }\n if (that.options.groupable || that._hasFooters()) {\n notString[notString.length] = '.k-grouping-row,.k-group-footer';\n }\n notString = notString.join(',');\n if (notString !== '') {\n notString = ':not(' + notString + ')';\n }\n var elements = that.table;\n if (isLocked) {\n elements = elements.add(that.lockedTable);\n }\n var filter = '>' + (cell ? SELECTION_CELL_SELECTOR : 'tbody>tr' + notString);\n that.selectable = new kendo.ui.Selectable(elements, {\n filter: filter,\n aria: true,\n multiple: multi,\n change: function () {\n that.trigger(CHANGE);\n },\n useAllItems: isLocked && multi && cell,\n relatedTarget: function (items) {\n if (cell || !isLocked) {\n return;\n }\n var related;\n var result = $();\n for (var idx = 0, length = items.length; idx < length; idx++) {\n related = that._relatedRow(items[idx]);\n if (inArray(related[0], items) < 0) {\n result = result.add(related);\n }\n }\n return result;\n },\n continuousItems: function () {\n return that._continuousItems(filter, cell);\n }\n });\n if (that.options.navigatable) {\n elements.on('keydown' + NS, function (e) {\n var current = that.current();\n var target = e.target;\n if (e.keyCode === keys.SPACEBAR && $.inArray(target, elements) > -1 && !current.is('.k-edit-cell,.k-header') && current.parent().is(':not(.k-grouping-row,.k-detail-row,.k-group-footer)')) {\n e.preventDefault();\n e.stopPropagation();\n current = cell ? current : current.parent();\n if (isLocked && !cell) {\n current = current.add(that._relatedRow(current));\n }\n if (multi) {\n if (!e.ctrlKey) {\n that.selectable.clear();\n } else {\n if (current.hasClass(SELECTED)) {\n current.removeClass(SELECTED);\n that.trigger(CHANGE);\n return;\n }\n }\n } else {\n that.selectable.clear();\n }\n that.selectable.value(current);\n }\n });\n }\n }\n },\n _clipboard: function () {\n var options = this.options;\n var selectable = options.selectable;\n if (selectable && options.allowCopy) {\n var grid = this;\n if (!options.navigatable) {\n grid.table.add(grid.lockedTable).attr('tabindex', 0).on('mousedown' + NS + ' keydown' + NS, '.k-detail-cell', function (e) {\n if (e.target !== e.currentTarget) {\n e.stopImmediatePropagation();\n }\n }).on('mousedown' + NS, NAVROW + '>' + NAVCELL, proxy(tableClick, grid));\n }\n grid.copyHandler = proxy(grid.copySelection, grid);\n grid.updateClipBoardState = function () {\n if (grid.areaClipBoard) {\n grid.areaClipBoard.val(grid.getTSV()).focus().select();\n }\n };\n grid.bind('change', grid.updateClipBoardState);\n grid.wrapper.on('keydown', grid.copyHandler);\n grid.clearAreaHandler = proxy(grid.clearArea, grid);\n grid.wrapper.on('keyup', grid.clearAreaHandler);\n }\n },\n copySelection: function (e) {\n if (e instanceof jQuery.Event && !(e.ctrlKey || e.metaKey) || $(e.target).is('input:visible,textarea:visible') || window.getSelection && window.getSelection().toString() || document.selection && document.selection.createRange().text) {\n return;\n }\n if (!this.areaClipBoard) {\n this.areaClipBoard = $('<textarea />').css({\n position: 'fixed',\n top: '50%',\n left: '50%',\n opacity: 0,\n width: 0,\n height: 0\n }).appendTo(this.wrapper);\n }\n this.areaClipBoard.val(this.getTSV()).focus().select();\n },\n getTSV: function () {\n var grid = this;\n var selected = grid.select();\n var delimeter = '\\t';\n var allowCopy = grid.options.allowCopy;\n var onlyVisible = true;\n if ($.isPlainObject(allowCopy) && allowCopy.delimeter) {\n delimeter = allowCopy.delimeter;\n }\n var text = '';\n if (selected.length) {\n if (selected.eq(0).is('tr')) {\n selected = selected.find('td:not(.k-group-cell)');\n }\n if (onlyVisible) {\n selected.filter(':visible');\n }\n var result = [];\n var cellsOffset = this.columns.length;\n var lockedCols = grid._isLocked() && lockedColumns(grid.columns).length;\n var inLockedArea = true;\n $.each(selected, function (idx, cell) {\n cell = $(cell);\n var tr = cell.closest('tr');\n var rowIndex = tr.index();\n var cellIndex = cell.index();\n if (onlyVisible) {\n cellIndex -= cell.prevAll(':hidden').length;\n }\n if (lockedCols && inLockedArea) {\n inLockedArea = $.contains(grid.lockedTable[0], cell[0]);\n }\n if (grid._groups() && inLockedArea) {\n cellIndex -= grid._groups();\n }\n cellIndex = inLockedArea ? cellIndex : cellIndex + lockedCols;\n if (cellsOffset > cellIndex) {\n cellsOffset = cellIndex;\n }\n var cellText = cell.text();\n if (!result[rowIndex]) {\n result[rowIndex] = [];\n }\n result[rowIndex][cellIndex] = cellText;\n });\n var rowsOffset = result.length;\n result = $.each(result, function (idx, val) {\n if (val) {\n result[idx] = val.slice(cellsOffset);\n if (rowsOffset > idx) {\n rowsOffset = idx;\n }\n }\n });\n $.each(result.slice(rowsOffset), function (idx, val) {\n if (val) {\n text += val.join(delimeter) + '\\r\\n';\n } else {\n text += '\\r\\n';\n }\n });\n }\n return text;\n },\n clearArea: function (e) {\n var table;\n if (this.areaClipBoard && e && e.target === this.areaClipBoard[0]) {\n if (this.options.navigatable) {\n table = $(this.current()).closest('table');\n } else {\n table = this.table;\n }\n focusTable(table, true);\n }\n if (this.areaClipBoard) {\n this.areaClipBoard.remove();\n this.areaClipBoard = null;\n }\n },\n _minScreenSupport: function () {\n var any = this.hideMinScreenCols();\n if (any) {\n this.minScreenResizeHandler = proxy(this.hideMinScreenCols, this);\n $(window).on('resize', this.minScreenResizeHandler);\n }\n },\n hideMinScreenCols: function () {\n var cols = this.columns, screenWidth = window.innerWidth > 0 ? window.innerWidth : screen.width;\n return this._iterateMinScreenCols(cols, screenWidth);\n },\n _iterateMinScreenCols: function (cols, screenWidth) {\n var any = false;\n for (var i = 0; i < cols.length; i++) {\n var col = cols[i];\n var minWidth = col.minScreenWidth;\n if (minWidth !== undefined && minWidth !== null) {\n any = true;\n if (minWidth > screenWidth) {\n this.hideColumn(col);\n } else {\n this.showColumn(col);\n }\n }\n if (!col.hidden && col.columns) {\n any = this._iterateMinScreenCols(col.columns, screenWidth) || any;\n }\n }\n return any;\n },\n _relatedRow: function (row) {\n var lockedTable = this.lockedTable;\n row = $(row);\n if (!lockedTable) {\n return row;\n }\n var table = row.closest(this.table.add(this.lockedTable));\n var index = table.find('>tbody>tr').index(row);\n table = table[0] === this.table[0] ? lockedTable : this.table;\n return table.find('>tbody>tr').eq(index);\n },\n clearSelection: function () {\n var that = this;\n that.selectable.clear();\n that.trigger(CHANGE);\n },\n select: function (items) {\n var that = this, selectable = that.selectable;\n items = that.table.add(that.lockedTable).find(items);\n if (items.length) {\n if (!selectable.options.multiple) {\n selectable.clear();\n items = items.first();\n }\n if (that._isLocked()) {\n items = items.add(items.map(function () {\n return that._relatedRow(this);\n }));\n }\n selectable.value(items);\n return;\n }\n return selectable.value();\n },\n _updateCurrentAttr: function (current, next) {\n var headerId = $(current).data('headerId');\n $(current).removeClass(FOCUSED).closest('table').removeAttr('aria-activedescendant');\n if (headerId) {\n headerId = headerId.replace(this._cellId, '');\n $(current).attr('id', headerId);\n } else {\n $(current).removeAttr('id');\n }\n next.data('headerId', next.attr('id')).attr('id', this._cellId).addClass(FOCUSED).closest('table').attr('aria-activedescendant', this._cellId);\n this._current = next;\n },\n _scrollCurrent: function () {\n var current = this._current;\n var scrollable = this.options.scrollable;\n if (!current || !scrollable) {\n return;\n }\n var row = current.parent();\n var tableContainer = row.closest('table').parent();\n var isInLockedContainer = tableContainer.is('.k-grid-content-locked,.k-grid-header-locked');\n var isInContent = tableContainer.is('.k-grid-content-locked,.k-grid-content,.k-virtual-scrollable-wrap');\n var scrollableContainer = $(this.content).find('>.k-virtual-scrollable-wrap').addBack().last()[0];\n if (isInContent) {\n if (scrollable.virtual) {\n var rowIndex = Math.max(inArray(row[0], this._items(row.parent())), 0);\n this._rowVirtualIndex = this.virtualScrollable.itemIndex(rowIndex);\n this.virtualScrollable.scrollIntoView(row);\n } else {\n this._scrollTo(this._relatedRow(row)[0], scrollableContainer);\n }\n }\n if (this.lockedContent) {\n this.lockedContent[0].scrollTop = scrollableContainer.scrollTop;\n }\n if (!isInLockedContainer) {\n this._scrollTo(current[0], scrollableContainer);\n }\n },\n current: function (next) {\n return this._setCurrent(next, true);\n },\n _setCurrent: function (next, preventTrigger) {\n var current = this._current;\n next = $(next);\n if (next.length) {\n if (!current || current[0] !== next[0]) {\n this._updateCurrentAttr(current, next);\n this._scrollCurrent();\n if (!preventTrigger) {\n this.trigger(NAVIGATE, { element: next });\n }\n }\n }\n return this._current;\n },\n _removeCurrent: function () {\n if (this._current) {\n this._current.removeClass(FOCUSED);\n this._current = null;\n }\n },\n _scrollTo: function (element, container) {\n var elementToLowercase = element.tagName.toLowerCase();\n var isHorizontal = elementToLowercase === 'td' || elementToLowercase === 'th';\n var elementOffset = element[isHorizontal ? 'offsetLeft' : 'offsetTop'];\n var elementOffsetDir = element[isHorizontal ? 'offsetWidth' : 'offsetHeight'];\n var containerScroll = container[isHorizontal ? 'scrollLeft' : 'scrollTop'];\n var containerOffsetDir = container[isHorizontal ? 'clientWidth' : 'clientHeight'];\n var bottomDistance = elementOffset + elementOffsetDir;\n var result = 0;\n var ieCorrection = 0;\n var firefoxCorrection = 0;\n if (isRtl && isHorizontal) {\n var table = $(element).closest('table')[0];\n if (browser.msie) {\n ieCorrection = table.offsetLeft;\n } else if (browser.mozilla) {\n firefoxCorrection = table.offsetLeft - kendo.support.scrollbar();\n }\n }\n containerScroll = Math.abs(containerScroll + ieCorrection - firefoxCorrection);\n if (containerScroll > elementOffset) {\n result = elementOffset;\n } else if (bottomDistance > containerScroll + containerOffsetDir) {\n if (elementOffsetDir <= containerOffsetDir) {\n result = bottomDistance - containerOffsetDir;\n } else {\n result = elementOffset;\n }\n } else {\n result = containerScroll;\n }\n result = Math.abs(result + ieCorrection) + firefoxCorrection;\n container[isHorizontal ? 'scrollLeft' : 'scrollTop'] = result;\n },\n _navigatable: function () {\n var that = this;\n if (!that.options.navigatable) {\n return;\n }\n var dataTables = that.table.add(that.lockedTable);\n var headerTables = that.thead.parent().add($('>table', that.lockedHeader));\n var tables = dataTables;\n if (that.options.scrollable) {\n tables = tables.add(headerTables);\n headerTables.attr(TABINDEX, -1);\n }\n this._navigatableTables = tables;\n tables.off('mousedown' + NS + ' focus' + NS + ' focusout' + NS + ' keydown' + NS);\n headerTables.on('keydown' + NS, proxy(that._openHeaderMenu, that)).find('a.k-link').attr('tabIndex', -1);\n dataTables.attr(TABINDEX, math.max(dataTables.attr(TABINDEX) || 0, 0)).on('mousedown' + NS + ' keydown' + NS, '.k-detail-cell', function (e) {\n if (e.target !== e.currentTarget) {\n e.stopImmediatePropagation();\n }\n });\n tables.on(kendo.support.touch ? 'touchstart' + NS : 'mousedown' + NS, NAVROW + '>' + NAVCELL, proxy(tableClick, that)).on('focus' + NS, proxy(that._tableFocus, that)).on('focusout' + NS, proxy(that._tableBlur, that)).on('keydown' + NS, proxy(that._tableKeyDown, that));\n },\n _openHeaderMenu: function (e) {\n if (e.altKey && e.keyCode == keys.DOWN) {\n this.current().find('.k-grid-filter, .k-header-column-menu').click();\n e.stopImmediatePropagation();\n }\n },\n _setTabIndex: function (table) {\n this._navigatableTables.attr(TABINDEX, -1);\n table.attr(TABINDEX, 0);\n },\n _tableFocus: function (e) {\n if (kendo.support.touch) {\n return;\n }\n var current = this.current();\n var table = $(e.currentTarget);\n if (current && current.is(':visible')) {\n current.addClass(FOCUSED);\n } else {\n this._setCurrent(table.find(FIRSTNAVITEM));\n }\n this._setTabIndex(table);\n },\n _tableBlur: function () {\n var current = this.current();\n if (current) {\n current.removeClass(FOCUSED);\n }\n },\n _tableKeyDown: function (e) {\n var current = this.current();\n var requestInProgress = this.virtualScrollable && this.virtualScrollable.fetching();\n var target = $(e.target);\n var canHandle = !e.isDefaultPrevented() && !target.is(':button,a,:input,a>.k-icon');\n if (requestInProgress) {\n e.preventDefault();\n return;\n }\n current = current ? current : $(this.lockedTable).add(this.table).find(FIRSTNAVITEM);\n if (!current.length) {\n return;\n }\n var handled = false;\n if (canHandle && e.keyCode == keys.UP) {\n handled = this._moveUp(current);\n }\n if (canHandle && e.keyCode == keys.DOWN) {\n handled = this._moveDown(current);\n }\n if (canHandle && e.keyCode == (isRtl ? keys.LEFT : keys.RIGHT)) {\n handled = this._moveRight(current, e.altKey);\n }\n if (canHandle && e.keyCode == (isRtl ? keys.RIGHT : keys.LEFT)) {\n handled = this._moveLeft(current, e.altKey);\n }\n if (canHandle && e.keyCode == keys.PAGEDOWN) {\n handled = this._handlePageDown();\n }\n if (canHandle && e.keyCode == keys.PAGEUP) {\n handled = this._handlePageUp();\n }\n if (e.keyCode == keys.ENTER || e.keyCode == keys.F2) {\n handled = this._handleEnterKey(current, e.currentTarget, target);\n }\n if (e.keyCode == keys.ESC) {\n handled = this._handleEscKey(current, e.currentTarget);\n }\n if (e.keyCode == keys.TAB) {\n handled = this._handleTabKey(current, e.currentTarget, e.shiftKey);\n }\n if (handled) {\n e.preventDefault();\n e.stopPropagation();\n }\n },\n _moveLeft: function (current, altKey) {\n var next, index;\n var row = current.parent();\n var container = row.parent();\n if (altKey) {\n this.collapseRow(row);\n } else {\n index = container.find(NAVROW).index(row);\n next = this._prevHorizontalCell(container, current, index);\n if (!next[0]) {\n container = this._horizontalContainer(container);\n next = this._prevHorizontalCell(container, current, index);\n if (next[0] !== current[0]) {\n focusTable(container.parent(), true);\n }\n }\n this._setCurrent(next);\n }\n return true;\n },\n _moveRight: function (current, altKey) {\n var next, index;\n var row = current.parent();\n var container = row.parent();\n if (altKey) {\n this.expandRow(row);\n } else {\n index = container.find(NAVROW).index(row);\n next = this._nextHorizontalCell(container, current, index);\n if (!next[0]) {\n container = this._horizontalContainer(container, true);\n next = this._nextHorizontalCell(container, current, index);\n if (next[0] !== current[0]) {\n focusTable(container.parent(), true);\n }\n }\n this._setCurrent(next);\n }\n return true;\n },\n _moveUp: function (current) {\n var container = current.parent().parent();\n var next = this._prevVerticalCell(container, current);\n if (!next[0]) {\n container = this._verticalContainer(container, true);\n next = this._prevVerticalCell(container, current);\n if (next[0]) {\n focusTable(container.parent(), true);\n }\n }\n this._setCurrent(next);\n return true;\n },\n _moveDown: function (current) {\n var container = current.parent().parent();\n var next = this._nextVerticalCell(container, current);\n if (!next[0]) {\n container = this._verticalContainer(container);\n next = this._nextVerticalCell(container, current);\n if (next[0]) {\n focusTable(container.parent(), true);\n }\n }\n this._setCurrent(next);\n return true;\n },\n _handlePageDown: function () {\n if (!this.options.pageable) {\n return false;\n }\n this.dataSource.page(this.dataSource.page() + 1);\n return true;\n },\n _handlePageUp: function () {\n if (!this.options.pageable) {\n return false;\n }\n this.dataSource.page(this.dataSource.page() - 1);\n return true;\n },\n _handleTabKey: function (current, currentTable, shiftKey) {\n var isInCell = this.options.editable && this._editMode() == 'incell';\n var cell;\n if (!isInCell || current.is('th')) {\n return false;\n }\n cell = $(activeElement()).closest('.k-edit-cell');\n if (cell[0] && cell[0] !== current[0]) {\n current = cell;\n }\n cell = this._tabNext(current, currentTable, shiftKey);\n if (cell.length) {\n this._handleEditing(current, cell, cell.closest('table'));\n return true;\n }\n return false;\n },\n _handleEscKey: function (current, currentTable) {\n var active = activeElement();\n var isInCell = this._editMode() == 'incell';\n if (!isInEdit(current)) {\n if (current.has(active).length) {\n focusTable(currentTable, true);\n return true;\n }\n return false;\n }\n if (isInCell) {\n this.closeCell(true);\n } else {\n var currentIndex = $(current).parent().index();\n if (active) {\n active.blur();\n }\n this.cancelRow(true);\n if (currentIndex >= 0) {\n this._setCurrent(this.items().eq(currentIndex).children(NAVCELL).first());\n }\n }\n if (browser.msie && browser.version < 9) {\n document.body.focus();\n }\n focusTable(currentTable, true);\n return true;\n },\n _toggleCurrent: function (current, editable) {\n var row = current.parent();\n if (row.is('.k-grouping-row')) {\n row.find('.k-icon:first').click();\n return true;\n }\n if (!editable && row.is('.k-master-row')) {\n row.find('.k-icon:first').click();\n return true;\n }\n return false;\n },\n _handleEnterKey: function (current, currentTable, target) {\n var editable = this.options.editable && this.options.editable.update !== false;\n var container = target.closest('[role=gridcell]');\n if (!target.is('table') && !$.contains(current[0], target[0])) {\n current = container;\n }\n if (current.is('th')) {\n current.find('.k-link').click();\n return true;\n }\n if (this._toggleCurrent(current, editable)) {\n return true;\n }\n var focusable = current.find(':kendoFocusable:first');\n if (focusable[0] && !current.hasClass('k-edit-cell') && current.hasClass('k-state-focused')) {\n focusable.focus();\n return true;\n }\n if (editable && !target.is(':button,.k-button,textarea')) {\n if (!container[0]) {\n container = current;\n }\n this._handleEditing(container, false, currentTable);\n return true;\n }\n return false;\n },\n _nextHorizontalCell: function (table, current, originalIndex) {\n var cells = current.nextAll(DATA_CELL);\n if (!cells.length) {\n var rows = table.find(NAVROW);\n var rowIndex = rows.index(current.parent());\n if (rowIndex == -1) {\n if (current.hasClass('k-header')) {\n var headerRows = [];\n mapColumnToCellRows([lockedColumns(this.columns)[0]], childColumnsCells(rows.eq(0).children().first()), headerRows, 0, 0);\n if (headerRows[originalIndex]) {\n return headerRows[originalIndex][0];\n }\n return current;\n }\n if (current.parent().hasClass('k-filter-row')) {\n return rows.last().children(DATA_CELL).first();\n }\n return rows.eq(originalIndex).children(DATA_CELL).first();\n }\n }\n return cells.first();\n },\n _prevHorizontalCell: function (table, current, originalIndex) {\n var cells = current.prevAll(DATA_CELL);\n if (!cells.length) {\n var rows = table.find(NAVROW);\n var rowIndex = rows.index(current.parent());\n if (rowIndex == -1) {\n if (current.hasClass('k-header')) {\n var headerRows = [];\n var columns = lockedColumns(this.columns);\n mapColumnToCellRows([columns[columns.length - 1]], childColumnsCells(rows.eq(0).children().last()), headerRows, 0, 0);\n if (headerRows[originalIndex]) {\n return headerRows[originalIndex][0];\n }\n return current;\n }\n if (current.parent().hasClass('k-filter-row')) {\n return rows.last().children(DATA_CELL).last();\n }\n return rows.eq(originalIndex).children(DATA_CELL).last();\n }\n }\n return cells.first();\n },\n _currentDataIndex: function (table, current) {\n var index = current.attr('data-index');\n if (!index) {\n return undefined;\n }\n var lockedColumnsCount = lockedColumns(this.columns).length;\n if (lockedColumnsCount && !table.closest('div').hasClass('k-grid-content-locked')[0]) {\n return index - lockedColumnsCount;\n }\n return index;\n },\n _prevVerticalCell: function (container, current) {\n var cells;\n var row = current.parent();\n var rows = container.children(NAVROW);\n var rowIndex = rows.index(row);\n var index = this._currentDataIndex(container, current);\n if (index || current.hasClass('k-header')) {\n cells = parentColumnsCells(current);\n return cells.eq(cells.length - 2);\n }\n index = row.children(DATA_CELL).index(current);\n if (row.hasClass('k-filter-row')) {\n return leafDataCells(container).eq(index);\n }\n if (rowIndex == -1) {\n row = container.find('.k-filter-row');\n if (!row[0]) {\n return leafDataCells(container).eq(index);\n }\n } else {\n row = rowIndex === 0 ? $() : rows.eq(rowIndex - 1);\n }\n cells = row.children(DATA_CELL);\n if (cells.length > index) {\n return cells.eq(index);\n }\n return cells.eq(0);\n },\n _nextVerticalCell: function (container, current) {\n var cells;\n var row = current.parent();\n var rows = container.children(NAVROW);\n var rowIndex = rows.index(row);\n var index = this._currentDataIndex(container, current);\n if (rowIndex != -1 && index === undefined && current.hasClass('k-header')) {\n return childColumnsCells(current).eq(1);\n }\n index = index ? parseInt(index, 10) : row.children(DATA_CELL).index(current);\n if (rowIndex == -1) {\n row = rows.eq(0);\n } else {\n row = rows.eq(rowIndex + current[0].rowSpan);\n }\n cells = row.children(DATA_CELL);\n if (cells.length > index) {\n return cells.eq(index);\n }\n return cells.eq(0);\n },\n _verticalContainer: function (container, up) {\n var table = container.parent();\n var length = this._navigatableTables.length;\n var step = Math.floor(length / 2);\n var index = inArray(table[0], this._navigatableTables);\n if (up) {\n step *= -1;\n }\n index += step;\n if (index >= 0 || index < length) {\n table = this._navigatableTables.eq(index);\n }\n return table.find(up ? 'thead' : 'tbody');\n },\n _horizontalContainer: function (container, right) {\n var length = this._navigatableTables.length;\n if (length <= 2) {\n return container;\n }\n var table = container.parent();\n var index = inArray(table[0], this._navigatableTables);\n index += right ? 1 : -1;\n if (right && (index == 2 || index == length)) {\n return container;\n }\n if (!right && (index == 1 || index < 0)) {\n return container;\n }\n return this._navigatableTables.eq(index).find('thead, tbody');\n },\n _tabNext: function (current, currentTable, back) {\n var switchRow = true;\n var next = back ? current.prevAll(DATA_CELL + ':first') : current.nextAll(':visible:first');\n if (!next.length) {\n next = current.parent();\n if (this.lockedTable) {\n switchRow = back && currentTable == this.lockedTable[0] || !back && currentTable == this.table[0];\n next = this._relatedRow(next);\n }\n if (switchRow) {\n next = next[back ? 'prevAll' : 'nextAll']('tr:not(.k-grouping-row):not(.k-detail-row):visible:first');\n }\n next = next.children(DATA_CELL + (back ? ':last' : ':first'));\n }\n return next;\n },\n _handleEditing: function (current, next, table) {\n var that = this, active = $(activeElement()), mode = that._editMode(), isIE = browser.msie, oldIE = isIE && browser.version < 9, editContainer = that._editContainer, focusable, editable = that.options.editable && that.options.editable.update !== false, isEdited;\n table = $(table);\n if (mode == 'incell') {\n isEdited = current.hasClass('k-edit-cell');\n } else {\n isEdited = current.parent().hasClass('k-grid-edit-row');\n }\n if (that.editable) {\n if ($.contains(editContainer[0], active[0])) {\n if (browser.opera || oldIE) {\n active.blur().change().triggerHandler('blur');\n } else {\n active.blur();\n if (isIE) {\n active.blur();\n }\n }\n }\n if (!that.editable) {\n focusTable(table);\n return;\n }\n if (that.editable.end()) {\n if (mode == 'incell') {\n that.closeCell();\n } else {\n that.saveRow();\n isEdited = true;\n }\n } else {\n if (mode == 'incell') {\n that._setCurrent(editContainer);\n } else {\n that._setCurrent(editContainer.children().filter(DATA_CELL).first());\n }\n focusable = editContainer.find(':kendoFocusable:first')[0];\n if (focusable) {\n focusable.focus();\n }\n return;\n }\n }\n if (next) {\n that._setCurrent(next);\n }\n if (oldIE) {\n document.body.focus();\n }\n focusTable(table, true);\n if (!editable) {\n return;\n }\n if (!isEdited && !next || next) {\n if (mode == 'incell') {\n that.editCell(that.current());\n } else {\n that.editRow(that.current().parent());\n }\n }\n },\n _wrapper: function () {\n var that = this, table = that.table, height = that.options.height, wrapper = that.element;\n if (!wrapper.is('div')) {\n wrapper = wrapper.wrap('<div/>').parent();\n }\n that.wrapper = wrapper.addClass('k-grid k-widget');\n if (height) {\n that.wrapper.css(HEIGHT, height);\n table.css(HEIGHT, 'auto');\n }\n that._initMobile();\n },\n _initMobile: function () {\n var options = this.options;\n var that = this;\n this._isMobile = options.mobile === true && kendo.support.mobileOS || options.mobile === 'phone' || options.mobile === 'tablet';\n if (this._isMobile) {\n var html = this.wrapper.addClass('k-grid-mobile').wrap('<div data-' + kendo.ns + 'stretch=\"true\" data-' + kendo.ns + 'role=\"view\" ' + 'data-' + kendo.ns + 'init-widgets=\"false\"></div>').parent();\n this.pane = kendo.mobile.ui.Pane.wrap(html);\n this.view = this.pane.view();\n this._actionSheetPopupOptions = $(document.documentElement).hasClass('km-root') ? { modal: false } : {\n align: 'bottom center',\n position: 'bottom center',\n effect: 'slideIn:up'\n };\n if (options.height) {\n this.pane.element.parent().css(HEIGHT, options.height);\n }\n this._editAnimation = 'slide';\n this.view.bind('show', function () {\n if (that._isLocked()) {\n that._updateTablesWidth();\n that._applyLockedContainersWidth();\n that._syncLockedContentHeight();\n that._syncLockedHeaderHeight();\n that._syncLockedFooterHeight();\n }\n });\n }\n },\n _tbody: function () {\n var that = this, table = that.table, tbody;\n tbody = table.find('>tbody');\n if (!tbody.length) {\n tbody = $('<tbody/>').appendTo(table);\n }\n that.tbody = tbody.attr('role', 'rowgroup');\n },\n _scrollable: function () {\n var that = this, header, table, options = that.options, scrollable = options.scrollable, hasVirtualScroll = scrollable !== true && scrollable.virtual && !that.virtualScrollable, scrollbar = !kendo.support.kineticScrollNeeded || hasVirtualScroll ? kendo.support.scrollbar() : 0;\n if (scrollable) {\n header = that.wrapper.children('.k-grid-header');\n if (!header[0]) {\n header = $('<div class=\"k-grid-header\" />').insertBefore(that.table);\n }\n header.css(isRtl ? 'padding-left' : 'padding-right', scrollable.virtual ? scrollbar + 1 : scrollbar);\n table = $('<table role=\"grid\" />');\n if (isIE7) {\n table.attr('cellspacing', 0);\n }\n table.width(that.table[0].style.width);\n table.append(that.thead);\n header.empty().append($('<div class=\"k-grid-header-wrap k-auto-scrollable\" />').append(table));\n that.content = that.table.parent();\n if (that.content.is('.k-virtual-scrollable-wrap, .km-scroll-container')) {\n that.content = that.content.parent();\n }\n if (!that.content.is('.k-grid-content, .k-virtual-scrollable-wrap')) {\n that.content = that.table.wrap('<div class=\"k-grid-content k-auto-scrollable\" />').parent();\n }\n if (hasVirtualScroll) {\n that.virtualScrollable = new VirtualScrollable(that.content, {\n dataSource: that.dataSource,\n itemHeight: function () {\n return that._averageRowHeight();\n }\n });\n }\n that.scrollables = header.children('.k-grid-header-wrap').add(that.content);\n var footer = that.wrapper.find('.k-grid-footer');\n if (footer.length) {\n that.scrollables = that.scrollables.add(footer.children('.k-grid-footer-wrap'));\n }\n if (scrollable.virtual) {\n that.content.find('>.k-virtual-scrollable-wrap').unbind('scroll' + NS).bind('scroll' + NS, function () {\n that.scrollables.scrollLeft(this.scrollLeft);\n if (that.lockedContent) {\n that.lockedContent[0].scrollTop = this.scrollTop;\n }\n });\n } else {\n that.content.unbind('scroll' + NS).bind('scroll' + NS, function (e) {\n that.scrollables.not(e.currentTarget).scrollLeft(this.scrollLeft);\n if (that.lockedContent && e.currentTarget == that.content[0]) {\n that.lockedContent[0].scrollTop = this.scrollTop;\n }\n });\n var touchScroller = that.content.data('kendoTouchScroller');\n if (touchScroller) {\n touchScroller.destroy();\n }\n touchScroller = kendo.touchScroller(that.content);\n if (touchScroller && touchScroller.movable) {\n that.touchScroller = touchScroller;\n touchScroller.movable.bind('change', function (e) {\n that.scrollables.scrollLeft(-e.sender.x);\n if (that.lockedContent) {\n that.lockedContent.scrollTop(-e.sender.y);\n }\n });\n that.one(DATABOUND, function (e) {\n e.sender.wrapper.addClass('k-grid-backface');\n });\n }\n }\n }\n },\n _renderNoRecordsContent: function () {\n var that = this;\n if (that.options.noRecords) {\n var noRecordsElement = that.table.parent().children('.' + NORECORDSCLASS);\n if (noRecordsElement.length) {\n that.angular('cleanup', function () {\n return { elements: noRecordsElement.get() };\n });\n noRecordsElement.remove();\n }\n if (!that.dataSource || !that.dataSource.view().length) {\n noRecordsElement = $(that.noRecordsTemplate({})).insertAfter(that.table);\n that.angular('compile', function () {\n return {\n elements: noRecordsElement.get(),\n data: [{}]\n };\n });\n }\n }\n },\n _setContentWidth: function (scrollLeft) {\n var that = this, hiddenDivClass = 'k-grid-content-expander', hiddenDiv = '<div class=\"' + hiddenDivClass + '\"></div>', resizable = that.resizable, expander;\n if (that.options.scrollable && that.wrapper.is(':visible')) {\n expander = that.table.parent().children('.' + hiddenDivClass);\n that._setContentWidthHandler = proxy(that._setContentWidth, that);\n if (!that.dataSource || !that.dataSource.view().length) {\n if (!expander[0]) {\n expander = $(hiddenDiv).appendTo(that.table.parent());\n if (resizable) {\n resizable.bind('resize', that._setContentWidthHandler);\n }\n }\n if (that.thead) {\n expander.width(that.thead.width());\n if (!isNaN(parseFloat(scrollLeft, 10))) {\n that.content.scrollLeft(scrollLeft);\n }\n }\n } else if (expander[0]) {\n expander.remove();\n if (resizable) {\n resizable.unbind('resize', that._setContentWidthHandler);\n }\n }\n that._applyLockedContainersWidth();\n if (that.lockedHeader && that.table[0].clientWidth === 0) {\n that.table[0].style.width = '1px';\n }\n }\n },\n _applyLockedContainersWidth: function () {\n if (this.options.scrollable && this.lockedHeader) {\n var headerTable = this.thead.parent(), headerWrap = headerTable.parent(), contentWidth = this.wrapper[0].clientWidth, groups = this._groups(), scrollbar = kendo.support.scrollbar(), cols = this.lockedHeader.find('>table>colgroup>col:not(.k-group-col, .k-hierarchy-col)'), nonLockedCols = headerTable.find('>colgroup>col:not(.k-group-col, .k-hierarchy-col)'), width = columnsWidth(cols), nonLockedColsWidth = columnsWidth(nonLockedCols), footerWrap;\n if (groups > 0) {\n width += outerWidth(this.lockedHeader.find('.k-group-cell:first')) * groups;\n }\n if (width >= contentWidth) {\n width = contentWidth - 3 * scrollbar;\n }\n this.lockedHeader.add(this.lockedContent).width(width);\n headerWrap[0].style.width = headerWrap.parent().width() - width - 2 + 'px';\n headerTable.add(this.table).width(nonLockedColsWidth);\n if (this.virtualScrollable) {\n contentWidth -= scrollbar;\n }\n this.content[0].style.width = contentWidth - width - 2 + 'px';\n if (this.lockedFooter && this.lockedFooter.length) {\n this.lockedFooter.width(width);\n footerWrap = this.footer.find('.k-grid-footer-wrap');\n footerWrap[0].style.width = headerWrap[0].clientWidth + 'px';\n footerWrap.children().first().width(nonLockedColsWidth);\n }\n }\n },\n _setContentHeight: function () {\n var that = this, options = that.options, height = that.wrapper.innerHeight(), header = that.wrapper.children('.k-grid-header'), scrollbar = kendo.support.scrollbar();\n if (options.scrollable && that.wrapper.is(':visible')) {\n height -= outerHeight(header);\n if (that.pager) {\n height -= outerHeight(that.pager.element);\n }\n if (options.groupable) {\n height -= outerHeight(that.wrapper.children('.k-grouping-header'));\n }\n if (options.toolbar) {\n height -= outerHeight(that.wrapper.children('.k-grid-toolbar'));\n }\n if (that.footerTemplate) {\n height -= outerHeight(that.wrapper.children('.k-grid-footer'));\n }\n var isGridHeightSet = function (el) {\n var initialHeight, newHeight;\n if (el[0].style.height) {\n return true;\n } else {\n initialHeight = el.height();\n }\n el.height('auto');\n newHeight = el.height();\n if (initialHeight != newHeight) {\n el.height('');\n return true;\n }\n el.height('');\n return false;\n };\n if (isGridHeightSet(that.wrapper)) {\n if (height > scrollbar * 2) {\n if (that.lockedContent) {\n scrollbar = that.table[0].offsetWidth > that.table.parent()[0].clientWidth ? scrollbar : 0;\n that.lockedContent.height(height - scrollbar);\n }\n that.content.height(height);\n } else {\n that.content.height(scrollbar * 2 + 1);\n }\n }\n }\n },\n _averageRowHeight: function () {\n var that = this, itemsCount = that._items(that.tbody).length, rowHeight = that._rowHeight;\n if (itemsCount === 0) {\n return rowHeight;\n }\n if (!that._rowHeight) {\n that._rowHeight = rowHeight = outerHeight(that.table) / itemsCount;\n that._sum = rowHeight;\n that._measures = 1;\n }\n var currentRowHeight = outerHeight(that.table) / itemsCount;\n if (rowHeight !== currentRowHeight) {\n that._measures++;\n that._sum += currentRowHeight;\n that._rowHeight = that._sum / that._measures;\n }\n return rowHeight;\n },\n _dataSource: function () {\n var that = this, options = that.options, pageable, dataSource = options.dataSource;\n dataSource = isArray(dataSource) ? { data: dataSource } : dataSource;\n if (isPlainObject(dataSource)) {\n extend(dataSource, {\n table: that.table,\n fields: that.columns\n });\n pageable = options.pageable;\n if (isPlainObject(pageable) && pageable.pageSize !== undefined) {\n dataSource.pageSize = pageable.pageSize;\n }\n }\n if (that.dataSource && that._refreshHandler) {\n that.dataSource.unbind(CHANGE, that._refreshHandler).unbind(PROGRESS, that._progressHandler).unbind(ERROR, that._errorHandler);\n } else {\n that._refreshHandler = proxy(that.refresh, that);\n that._progressHandler = proxy(that._requestStart, that);\n that._errorHandler = proxy(that._error, that);\n }\n that.dataSource = DataSource.create(dataSource).bind(CHANGE, that._refreshHandler).bind(PROGRESS, that._progressHandler).bind(ERROR, that._errorHandler);\n },\n _error: function () {\n this._progress(false);\n },\n _requestStart: function () {\n this._progress(true);\n },\n _modelChange: function (e) {\n var that = this, tbody = that.tbody, model = e.model, row = that.tbody.find('tr[' + kendo.attr('uid') + '=' + model.uid + ']'), relatedRow, cell, column, isAlt = row.hasClass('k-alt'), tmp, idx = that._items(tbody).index(row), isLocked = that.lockedContent, selectable, selectableRow, childCells, originalCells, length;\n if (isLocked) {\n relatedRow = that._relatedRow(row);\n }\n if (row.add(relatedRow).children('.k-edit-cell').length && !that.options.rowTemplate) {\n row.add(relatedRow).children(':not(.k-group-cell,.k-hierarchy-cell)').each(function () {\n cell = $(this);\n column = leafColumns(that.columns)[that.cellIndex(cell)];\n if (column.field === e.field) {\n if (!cell.hasClass('k-edit-cell')) {\n that._displayCell(cell, column, model);\n $('<span class=\"k-dirty\"/>').prependTo(cell);\n } else {\n cell.addClass('k-dirty-cell');\n }\n }\n });\n } else if (!row.hasClass('k-grid-edit-row')) {\n selectableRow = $().add(row);\n if (isLocked) {\n tmp = (isAlt ? that.lockedAltRowTemplate : that.lockedRowTemplate)(model);\n selectableRow = selectableRow.add(relatedRow);\n relatedRow.replaceWith(tmp);\n }\n that.angular('cleanup', function () {\n return { elements: selectableRow.get() };\n });\n tmp = (isAlt ? that.altRowTemplate : that.rowTemplate)(model);\n row.replaceWith(tmp);\n tmp = that._items(tbody).eq(idx);\n var angularData = [{ dataItem: model }];\n if (isLocked) {\n row = row.add(relatedRow);\n relatedRow = that._relatedRow(tmp)[0];\n adjustRowHeight(tmp[0], relatedRow);\n tmp = tmp.add(relatedRow);\n angularData.push({ dataItem: model });\n }\n that.angular('compile', function () {\n return {\n elements: tmp.get(),\n data: angularData\n };\n });\n selectable = that.options.selectable;\n if (selectable && row.hasClass('k-state-selected')) {\n that.select(tmp);\n }\n originalCells = selectableRow.children(':not(.k-group-cell,.k-hierarchy-cell)');\n childCells = tmp.children(':not(.k-group-cell,.k-hierarchy-cell)');\n for (idx = 0, length = that.columns.length; idx < length; idx++) {\n column = that.columns[idx];\n cell = childCells.eq(idx);\n if (selectable && originalCells.eq(idx).hasClass('k-state-selected')) {\n cell.addClass('k-state-selected');\n }\n if (column.field === e.field) {\n $('<span class=\"k-dirty\"/>').prependTo(cell);\n }\n }\n that.trigger('itemChange', {\n item: tmp,\n data: model,\n ns: ui\n });\n }\n },\n _pageable: function () {\n var that = this, wrapper, pageable = that.options.pageable;\n if (pageable) {\n wrapper = that.wrapper.children('div.k-grid-pager');\n if (!wrapper.length) {\n wrapper = $('<div class=\"k-pager-wrap k-grid-pager\"/>').appendTo(that.wrapper);\n }\n if (that.pager) {\n that.pager.destroy();\n }\n if (typeof pageable === 'object' && pageable instanceof kendo.ui.Pager) {\n that.pager = pageable;\n } else {\n that.pager = new kendo.ui.Pager(wrapper, extend({}, pageable, { dataSource: that.dataSource }));\n }\n that.pager.bind('pageChange', function (e) {\n if (that.trigger('page', { page: e.index })) {\n e.preventDefault();\n }\n });\n }\n },\n _footer: function () {\n var that = this, aggregates = that.dataSource.aggregates(), html = '', footerTemplate = that.footerTemplate, options = that.options, footerWrap, footer = that.footer || that.wrapper.find('.k-grid-footer');\n if (footerTemplate) {\n html = $(that._wrapFooter(footerTemplate(aggregates)));\n if (footer.length) {\n var tmp = html;\n that.angular('cleanup', function () {\n return { elements: footer.get() };\n });\n footer.replaceWith(tmp);\n footer = that.footer = tmp;\n } else {\n if (options.scrollable) {\n footer = that.footer = options.pageable ? html.insertBefore(that.wrapper.children('div.k-grid-pager')) : html.appendTo(that.wrapper);\n } else {\n footer = that.footer = html.insertBefore(that.tbody);\n }\n }\n that.angular('compile', function () {\n return {\n elements: footer.find('td:not(.k-group-cell, .k-hierarchy-cell)').get(),\n data: map(that.columns, function (col) {\n return {\n column: col,\n aggregate: aggregates[col.field]\n };\n })\n };\n });\n } else if (footer && !that.footer) {\n that.footer = footer;\n }\n if (footer.length) {\n if (options.scrollable) {\n footerWrap = footer.attr('tabindex', -1).children('.k-grid-footer-wrap');\n that.scrollables = $(that.scrollables.filter(function () {\n return !$(this).is('.k-grid-footer-wrap');\n }).toArray()).add(footerWrap);\n }\n if (that._footerWidth) {\n footer.find('table').css('width', that._footerWidth);\n }\n if (footerWrap) {\n var offset = that.content.scrollLeft();\n if (options.scrollable !== true && options.scrollable.virtual) {\n offset = that.wrapper.find('.k-virtual-scrollable-wrap').scrollLeft();\n }\n footerWrap.scrollLeft(offset);\n }\n }\n if (that.lockedContent) {\n that._appendLockedColumnFooter();\n that._applyLockedContainersWidth();\n that._syncLockedFooterHeight();\n }\n },\n _wrapFooter: function (footerRow) {\n var that = this, html = '', scrollbar = !kendo.support.mobileOS ? kendo.support.scrollbar() : 0;\n if (that.options.scrollable) {\n html = $('<div class=\"k-grid-footer\"><div class=\"k-grid-footer-wrap\"><table' + (isIE7 ? ' cellspacing=\"0\"' : '') + '><tbody>' + footerRow + '</tbody></table></div></div>');\n that._appendCols(html.find('table'));\n html.css(isRtl ? 'padding-left' : 'padding-right', scrollbar);\n return html;\n }\n return '<tfoot class=\"k-grid-footer\">' + footerRow + '</tfoot>';\n },\n _columnMenu: function () {\n var that = this, menu, columns = leafColumns(that.columns), column, options = that.options, columnMenu = options.columnMenu, menuOptions, sortable, filterable, cells, hasMultiColumnHeaders = grep(that.columns, function (item) {\n return item.columns !== undefined;\n }).length > 0, isMobile = this._isMobile, initCallback = function (e) {\n that.trigger(COLUMNMENUINIT, {\n field: e.field,\n container: e.container\n });\n }, closeCallback = function (element) {\n focusTable(element.closest('table'), true);\n }, sortHandler = function (e) {\n if (that.trigger('sort', { sort: e.sort })) {\n e.preventDefault();\n }\n }, filterHandler = function (e) {\n if (that.trigger('filter', {\n filter: e.filter,\n field: e.field\n })) {\n e.preventDefault();\n }\n }, $angular = options.$angular;\n if (columnMenu) {\n if (typeof columnMenu == 'boolean') {\n columnMenu = {};\n }\n cells = leafDataCells(that.thead);\n for (var idx = 0, length = cells.length; idx < length; idx++) {\n column = columns[idx];\n var cell = cells.eq(idx);\n if (!column.command && (column.field || cell.attr('data-' + kendo.ns + 'field'))) {\n menu = cell.data('kendoColumnMenu');\n if (menu) {\n menu.destroy();\n }\n sortable = column.sortable !== false && columnMenu.sortable !== false && options.sortable !== false ? extend({}, options.sortable, { compare: (column.sortable || {}).compare }) : false;\n filterable = options.filterable && column.filterable !== false && columnMenu.filterable !== false ? extend({ pane: that.pane }, options.filterable, column.filterable) : false;\n if (column.filterable && column.filterable.dataSource) {\n filterable.forceUnique = false;\n filterable.checkSource = column.filterable.dataSource;\n }\n if (filterable) {\n filterable.format = column.format;\n }\n menuOptions = {\n dataSource: that.dataSource,\n values: column.values,\n columns: columnMenu.columns,\n sortable: sortable,\n filterable: filterable,\n messages: columnMenu.messages,\n owner: that,\n closeCallback: closeCallback,\n init: initCallback,\n pane: that.pane,\n sort: sortHandler,\n filtering: filterHandler,\n filter: isMobile ? ':not(.k-column-active)' : '',\n lockedColumns: !hasMultiColumnHeaders && column.lockable !== false && lockedColumns(columns).length > 0\n };\n if ($angular) {\n menuOptions.$angular = $angular;\n }\n cell.kendoColumnMenu(menuOptions);\n }\n }\n }\n },\n _headerCells: function () {\n return this.thead.find('th').filter(function () {\n var th = $(this);\n return !th.hasClass('k-group-cell') && !th.hasClass('k-hierarchy-cell');\n });\n },\n _filterable: function () {\n var that = this, columns = leafColumns(that.columns), filterMenu, cells, cell, filterInit = function (e) {\n that.trigger(FILTERMENUINIT, {\n field: e.field,\n container: e.container\n });\n }, closeCallback = function (element) {\n focusTable(element.closest('table'), true);\n }, filterHandler = function (e) {\n if (that.trigger('filter', {\n filter: e.filter,\n field: e.field\n })) {\n e.preventDefault();\n }\n }, filterable = that.options.filterable;\n if (filterable && typeof filterable.mode == STRING && filterable.mode.indexOf('menu') == -1) {\n filterable = false;\n }\n if (filterable && !that.options.columnMenu) {\n cells = leafDataCells(that.thead);\n for (var idx = 0, length = cells.length; idx < length; idx++) {\n cell = cells.eq(idx);\n if (columns[idx].filterable !== false && !columns[idx].command && (columns[idx].field || cell.attr('data-' + kendo.ns + 'field'))) {\n filterMenu = cell.data('kendoFilterMenu');\n if (filterMenu) {\n filterMenu.destroy();\n }\n filterMenu = cell.data('kendoFilterMultiCheck');\n if (filterMenu) {\n filterMenu.destroy();\n }\n var columnFilterable = columns[idx].filterable;\n var options = extend({}, filterable, columnFilterable, {\n dataSource: that.dataSource,\n values: columns[idx].values,\n format: columns[idx].format,\n closeCallback: closeCallback,\n title: columns[idx].title || columns[idx].field,\n init: filterInit,\n pane: that.pane,\n change: filterHandler\n });\n if (columnFilterable && columnFilterable.messages) {\n options.messages = extend(true, {}, filterable.messages, columnFilterable.messages);\n }\n if (columnFilterable && columnFilterable.dataSource) {\n options.forceUnique = false;\n options.checkSource = columnFilterable.dataSource;\n }\n if (columnFilterable && columnFilterable.multi) {\n cell.kendoFilterMultiCheck(options);\n } else {\n cell.kendoFilterMenu(options);\n }\n }\n }\n }\n },\n _filterRow: function () {\n var that = this;\n if (!that._hasFilterRow()) {\n return;\n }\n var settings;\n var $angular = that.options.$angular;\n var columns = leafColumns(that.columns), filterable = that.options.filterable, rowheader = that.thead.find('.k-filter-row'), filterHandler = function (e) {\n if (that.trigger('filter', {\n filter: e.filter,\n field: e.field\n })) {\n e.preventDefault();\n }\n };\n this._updateHeader(this.dataSource.group().length);\n for (var i = 0; i < columns.length; i++) {\n var suggestDataSource, col = columns[i], operators = that.options.filterable.operators, customDataSource = false, th = $('<th/>'), field = col.field;\n if (col.hidden) {\n th.hide();\n }\n rowheader.append(th);\n if (field && col.filterable !== false) {\n var cellOptions = col.filterable && col.filterable.cell || {};\n suggestDataSource = that.options.dataSource;\n if (suggestDataSource instanceof DataSource) {\n suggestDataSource = that.options.dataSource.options;\n }\n var messages = extend(true, {}, filterable.messages);\n if (col.filterable) {\n extend(true, messages, col.filterable.messages);\n }\n if (cellOptions.enabled === false) {\n th.html(' ');\n continue;\n }\n if (cellOptions.dataSource) {\n suggestDataSource = cellOptions.dataSource;\n customDataSource = true;\n }\n if (col.filterable && col.filterable.operators) {\n operators = col.filterable.operators;\n }\n settings = {\n column: col,\n dataSource: that.dataSource,\n suggestDataSource: suggestDataSource,\n customDataSource: customDataSource,\n field: field,\n messages: messages,\n values: col.values,\n template: cellOptions.template,\n delay: cellOptions.delay,\n inputWidth: cellOptions.inputWidth,\n suggestionOperator: cellOptions.suggestionOperator,\n minLength: cellOptions.minLength,\n dataTextField: cellOptions.dataTextField,\n operator: cellOptions.operator,\n operators: operators,\n showOperators: cellOptions.showOperators,\n change: filterHandler\n };\n if ($angular) {\n settings.$angular = $angular;\n }\n $('<span/>').attr(kendo.attr('field'), field).appendTo(th).kendoFilterCell(settings);\n } else {\n th.html(' ');\n }\n }\n },\n _sortable: function () {\n var that = this, columns = leafColumns(that.columns), column, sorterInstance, cell, sortable = that.options.sortable, sortHandler = function (e) {\n if (that.trigger('sort', { sort: e.sort })) {\n e.preventDefault();\n }\n };\n if (sortable) {\n var cells = leafDataCells(that.thead);\n for (var idx = 0, length = cells.length; idx < length; idx++) {\n column = columns[idx];\n if (column.sortable !== false && !column.command && column.field) {\n cell = cells.eq(idx);\n sorterInstance = cell.data('kendoColumnSorter');\n if (sorterInstance) {\n sorterInstance.destroy();\n }\n cell.attr('data-' + kendo.ns + 'field', column.field).kendoColumnSorter(extend({}, sortable, column.sortable, {\n dataSource: that.dataSource,\n aria: true,\n filter: ':not(.k-column-active)',\n change: sortHandler\n }));\n }\n }\n cells = null;\n }\n },\n _columns: function (columns) {\n var that = this, table = that.table, encoded, cols = table.find('col'), lockedCols, dataSource = that.options.dataSource;\n columns = columns.length ? columns : map(table.find('th'), function (th, idx) {\n th = $(th);\n var sortable = th.attr(kendo.attr('sortable')), filterable = th.attr(kendo.attr('filterable')), type = th.attr(kendo.attr('type')), groupable = th.attr(kendo.attr('groupable')), field = th.attr(kendo.attr('field')), title = th.attr(kendo.attr('title')), menu = th.attr(kendo.attr('menu'));\n if (!field) {\n field = th.text().replace(/\\s|[^A-z0-9]/g, '');\n }\n return {\n field: field,\n type: type,\n title: title,\n sortable: sortable !== 'false',\n filterable: filterable !== 'false',\n groupable: groupable !== 'false',\n menu: menu,\n template: th.attr(kendo.attr('template')),\n width: cols.eq(idx).css('width')\n };\n });\n encoded = !(that.table.find('tbody tr').length > 0 && (!dataSource || !dataSource.transport));\n if (that.options.scrollable) {\n var initialColumns = columns;\n lockedCols = lockedColumns(columns);\n columns = nonLockedColumns(columns);\n if (lockedCols.length > 0 && columns.length === 0) {\n throw new Error('There should be at least one non locked column');\n }\n normalizeHeaderCells(that.element.find('tr:has(th):first'), initialColumns);\n columns = lockedCols.concat(columns);\n }\n that.columns = normalizeColumns(columns, encoded);\n },\n _groups: function () {\n var group = this.dataSource.group();\n return group ? group.length : 0;\n },\n _tmpl: function (rowTemplate, columns, alt, skipGroupCells) {\n var that = this, settings = extend({}, kendo.Template, that.options.templateSettings), idx, length = columns.length, template, state = {\n storage: {},\n count: 0\n }, column, type, hasDetails = that._hasDetails(), className = [], groups = that._groups(), navigatable = that.options.navigatable;\n if (!rowTemplate) {\n rowTemplate = '<tr';\n if (alt) {\n className.push('k-alt');\n }\n if (hasDetails) {\n className.push('k-master-row');\n }\n if (className.length) {\n rowTemplate += ' class=\"' + className.join(' ') + '\"';\n }\n if (length) {\n rowTemplate += ' ' + kendo.attr('uid') + '=\"#=' + kendo.expr('uid', settings.paramName) + '#\"';\n }\n rowTemplate += ' role=\\'row\\'>';\n if (groups > 0 && !skipGroupCells) {\n rowTemplate += groupCells(groups);\n }\n if (hasDetails) {\n rowTemplate += '<td class=\"k-hierarchy-cell\"><a class=\"k-icon k-i-expand\" href=\"\\\\#\" tabindex=\"-1\"></a></td>';\n }\n for (idx = 0; idx < length; idx++) {\n column = columns[idx];\n template = column.template;\n type = typeof template;\n rowTemplate += '<td' + stringifyAttributes(column.attributes);\n if (navigatable) {\n rowTemplate += ' aria-describedby=\\'' + column.headerAttributes.id + '\\'';\n }\n rowTemplate += ' role=\\'gridcell\\'>';\n rowTemplate += that._cellTmpl(column, state);\n rowTemplate += '</td>';\n }\n rowTemplate += '</tr>';\n }\n rowTemplate = kendo.template(rowTemplate, settings);\n if (state.count > 0) {\n return proxy(rowTemplate, state.storage);\n }\n return rowTemplate;\n },\n _headerCellText: function (column) {\n var that = this, settings = extend({}, kendo.Template, that.options.templateSettings), template = column.headerTemplate, type = typeof template, text = column.title || column.field || '';\n if (type === FUNCTION) {\n text = kendo.template(template, settings)({});\n } else if (type === STRING) {\n text = template;\n }\n return text;\n },\n _cellTmpl: function (column, state) {\n var that = this, settings = extend({}, kendo.Template, that.options.templateSettings), template = column.template, paramName = settings.paramName, field = column.field, html = '', idx, length, format = column.format, type = typeof template, columnValues = column.values;\n if (column.command) {\n if (isArray(column.command)) {\n for (idx = 0, length = column.command.length; idx < length; idx++) {\n if (column.command[idx].visible) {\n html += kendo.format('#= {0}(data)? \\'{1}\\':\\'\\' #', column.command[idx].visible, that._createButton(column.command[idx]).replace(templateHashRegExp, '\\\\#'));\n } else {\n html += that._createButton(column.command[idx]).replace(templateHashRegExp, '\\\\#');\n }\n }\n return html;\n }\n return that._createButton(column.command).replace(templateHashRegExp, '\\\\#');\n }\n if (type === FUNCTION) {\n state.storage['tmpl' + state.count] = template;\n html += '#=this.tmpl' + state.count + '(' + paramName + ')#';\n state.count++;\n } else if (type === STRING) {\n html += template;\n } else if (columnValues && columnValues.length && isPlainObject(columnValues[0]) && 'value' in columnValues[0] && field) {\n html += '#var v =' + kendo.stringify(convertToObject(columnValues)).replace(templateHashRegExp, '\\\\#') + '#';\n html += '#var f = v[';\n if (!settings.useWithBlock) {\n html += paramName + '.';\n }\n html += field + ']#';\n html += '${f != null ? f : \\'\\'}';\n } else {\n html += column.encoded ? '#:' : '#=';\n if (format) {\n html += 'kendo.format(\"' + format.replace(formatRegExp, '\\\\$1') + '\",';\n }\n if (field) {\n field = kendo.expr(field, paramName);\n html += field + '==null?\\'\\':' + field;\n } else {\n html += '\\'\\'';\n }\n if (format) {\n html += ')';\n }\n html += '#';\n }\n return html;\n },\n _templates: function () {\n var that = this, options = that.options, dataSource = that.dataSource, groups = dataSource.group(), footer = that.footer || that.wrapper.find('.k-grid-footer'), aggregates = dataSource.aggregate(), columnLeafs = leafColumns(that.columns), columnsLocked = leafColumns(lockedColumns(that.columns)), columns = options.scrollable ? leafColumns(nonLockedColumns(that.columns)) : columnLeafs;\n if (options.scrollable && columnsLocked.length) {\n if (options.rowTemplate || options.altRowTemplate) {\n throw new Error('Having both row template and locked columns is not supported');\n }\n that.rowTemplate = that._tmpl(options.rowTemplate, columns, false, true);\n that.altRowTemplate = that._tmpl(options.altRowTemplate || options.rowTemplate, columns, true, true);\n that.lockedRowTemplate = that._tmpl(options.rowTemplate, columnsLocked);\n that.lockedAltRowTemplate = that._tmpl(options.altRowTemplate || options.rowTemplate, columnsLocked, true);\n } else {\n that.rowTemplate = that._tmpl(options.rowTemplate, columns);\n that.altRowTemplate = that._tmpl(options.altRowTemplate || options.rowTemplate, columns, true);\n }\n if (that._hasDetails()) {\n that.detailTemplate = that._detailTmpl(options.detailTemplate || '');\n }\n if (that._group && !isEmptyObject(aggregates) || !isEmptyObject(aggregates) && !footer.length || grep(columnLeafs, function (column) {\n return column.footerTemplate;\n }).length) {\n that.footerTemplate = that._footerTmpl(columnLeafs, aggregates, 'footerTemplate', 'k-footer-template');\n }\n if (groups && grep(columnLeafs, function (column) {\n return column.groupFooterTemplate;\n }).length) {\n aggregates = $.map(groups, function (g) {\n return g.aggregates;\n });\n that.groupFooterTemplate = that._footerTmpl(columns, aggregates, 'groupFooterTemplate', 'k-group-footer', columnsLocked.length);\n if (options.scrollable && columnsLocked.length) {\n that.lockedGroupFooterTemplate = that._footerTmpl(columnsLocked, aggregates, 'groupFooterTemplate', 'k-group-footer');\n }\n }\n if (that.options.noRecords) {\n that.noRecordsTemplate = that._noRecordsTmpl();\n }\n },\n _noRecordsTmpl: function () {\n var wrapper = '<div class=\"{0}\">{1}</div>';\n var defaultTemplate = '<div class=\"k-grid-norecords-template\"{1}>{0}</div>';\n var scrollableNoGridHeightStyles = this.options.scrollable && !this.wrapper[0].style.height ? ' style=\"margin:0 auto;position:static;\"' : '';\n var state = {\n storage: {},\n count: 0\n };\n var settings = $.extend({}, kendo.Template, this.options.templateSettings);\n var paramName = settings.paramName;\n var template;\n var html = '';\n var type;\n var tmpl;\n if (this.options.noRecords.template) {\n template = this.options.noRecords.template;\n } else {\n template = kendo.format(defaultTemplate, this.options.messages.noRecords, scrollableNoGridHeightStyles);\n }\n type = typeof template;\n if (type === 'function') {\n state.storage['tmpl' + state.count] = template;\n html += '#=this.tmpl' + state.count + '(' + paramName + ')#';\n state.count++;\n } else if (type === 'string') {\n html += template;\n }\n tmpl = kendo.template(kendo.format(wrapper, NORECORDSCLASS, html), settings);\n if (state.count > 0) {\n tmpl = $.proxy(tmpl, state.storage);\n }\n return tmpl;\n },\n _footerTmpl: function (columns, aggregates, templateName, rowClass, skipGroupCells) {\n var that = this, settings = extend({}, kendo.Template, that.options.templateSettings), paramName = settings.paramName, html = '', idx, length, template, type, storage = {}, count = 0, scope = {}, groups = that._groups(), fieldsMap = that.dataSource._emptyAggregates(aggregates), column;\n html += '<tr class=\"' + rowClass + '\">';\n if (groups > 0 && !skipGroupCells) {\n html += groupCells(groups);\n }\n if (that._hasDetails()) {\n html += '<td class=\"k-hierarchy-cell\"> </td>';\n }\n for (idx = 0, length = columns.length; idx < length; idx++) {\n column = columns[idx];\n template = column[templateName];\n type = typeof template;\n html += '<td' + stringifyAttributes(column.footerAttributes) + '>';\n if (template) {\n if (type !== FUNCTION) {\n scope = fieldsMap[column.field] ? extend({}, settings, { paramName: paramName + '[\\'' + column.field + '\\']' }) : {};\n template = kendo.template(template, scope);\n }\n storage['tmpl' + count] = template;\n html += '#=this.tmpl' + count + '(' + paramName + ')#';\n count++;\n } else {\n html += ' ';\n }\n html += '</td>';\n }\n html += '</tr>';\n html = kendo.template(html, settings);\n if (count > 0) {\n return proxy(html, storage);\n }\n return html;\n },\n _detailTmpl: function (template) {\n var that = this, html = '', settings = extend({}, kendo.Template, that.options.templateSettings), paramName = settings.paramName, templateFunctionStorage = {}, templateFunctionCount = 0, groups = that._groups(), colspan = visibleColumns(leafColumns(that.columns)).length, type = typeof template;\n html += '<tr class=\"k-detail-row\">';\n if (groups > 0) {\n html += groupCells(groups);\n }\n html += '<td class=\"k-hierarchy-cell\"></td><td class=\"k-detail-cell\"' + (colspan ? ' colspan=\"' + colspan + '\"' : '') + '>';\n if (type === FUNCTION) {\n templateFunctionStorage['tmpl' + templateFunctionCount] = template;\n html += '#=this.tmpl' + templateFunctionCount + '(' + paramName + ')#';\n templateFunctionCount++;\n } else {\n html += template;\n }\n html += '</td></tr>';\n html = kendo.template(html, settings);\n if (templateFunctionCount > 0) {\n return proxy(html, templateFunctionStorage);\n }\n return html;\n },\n _hasDetails: function () {\n var that = this;\n return that.options.detailTemplate !== null || (that._events[DETAILINIT] || []).length;\n },\n _hasFilterRow: function () {\n var filterable = this.options.filterable;\n var hasFiltering = filterable && typeof filterable.mode == STRING && filterable.mode.indexOf('row') != -1;\n var columns = this.columns;\n var columnsWithoutFiltering = $.grep(columns, function (col) {\n return col.filterable === false;\n });\n if (columns.length && columnsWithoutFiltering.length == columns.length) {\n hasFiltering = false;\n }\n return hasFiltering;\n },\n _details: function () {\n var that = this;\n if (that.options.scrollable && that._hasDetails() && lockedColumns(that.columns).length) {\n throw new Error('Having both detail template and locked columns is not supported');\n }\n that.table.on(CLICK + NS, '.k-hierarchy-cell .k-i-expand, .k-hierarchy-cell .k-i-collapse', function (e) {\n var button = $(this), expanding = button.hasClass('k-i-expand'), masterRow = button.closest('tr.k-master-row'), detailRow, detailTemplate = that.detailTemplate, data, hasDetails = that._hasDetails();\n button.toggleClass('k-i-expand', !expanding).toggleClass('k-i-collapse', expanding);\n detailRow = masterRow.next();\n if (hasDetails && !detailRow.hasClass('k-detail-row')) {\n data = that.dataItem(masterRow);\n detailRow = $(detailTemplate(data)).addClass(masterRow.hasClass('k-alt') ? 'k-alt' : '').insertAfter(masterRow);\n that.angular('compile', function () {\n return {\n elements: detailRow.get(),\n data: [{ dataItem: data }]\n };\n });\n that.trigger(DETAILINIT, {\n masterRow: masterRow,\n detailRow: detailRow,\n data: data,\n detailCell: detailRow.find('.k-detail-cell')\n });\n }\n that.trigger(expanding ? DETAILEXPAND : DETAILCOLLAPSE, {\n masterRow: masterRow,\n detailRow: detailRow\n });\n detailRow.toggle(expanding);\n if (that._current) {\n that._current.attr('aria-expanded', expanding);\n }\n e.preventDefault();\n return false;\n });\n },\n dataItem: function (tr) {\n tr = $(tr)[0];\n if (!tr) {\n return null;\n }\n var rows = this.tbody.children(), classesRegEx = /k-grouping-row|k-detail-row|k-group-footer/, idx = tr.sectionRowIndex, j, correctIdx;\n correctIdx = idx;\n for (j = 0; j < idx; j++) {\n if (classesRegEx.test(rows[j].className)) {\n correctIdx--;\n }\n }\n return this._data[correctIdx];\n },\n expandRow: function (tr) {\n $(tr).find('> td .k-i-expand').click();\n },\n collapseRow: function (tr) {\n $(tr).find('> td .k-i-collapse').click();\n },\n _createHeaderCells: function (columns, rowSpan) {\n var that = this, idx, th, text, html = '', length, leafs = leafColumns(that.columns), field;\n for (idx = 0, length = columns.length; idx < length; idx++) {\n th = columns[idx].column || columns[idx];\n text = that._headerCellText(th);\n field = '';\n var index = inArray(th, leafs);\n if (!th.command) {\n if (th.field) {\n field = kendo.attr('field') + '=\\'' + th.field + '\\' ';\n }\n html += '<th scope=\\'col\\' role=\\'columnheader\\' ' + field;\n html += ' aria-haspopup=\\'true\\'';\n if (rowSpan && !columns[idx].colSpan) {\n html += ' rowspan=\\'' + rowSpan + '\\'';\n }\n if (columns[idx].colSpan > 1) {\n html += 'colspan=\"' + (columns[idx].colSpan - hiddenLeafColumnsCount(th.columns)) + '\" ';\n html += kendo.attr('colspan') + '=\\'' + columns[idx].colSpan + '\\'';\n }\n if (th.title) {\n html += kendo.attr('title') + '=\"' + th.title.replace('\"', '"').replace(/'/g, '\\'') + '\" ';\n }\n if (th.groupable !== undefined) {\n html += kendo.attr('groupable') + '=\\'' + th.groupable + '\\' ';\n }\n if (th.aggregates && th.aggregates.length) {\n html += kendo.attr('aggregates') + '=\\'' + th.aggregates + '\\'';\n }\n if (index > -1) {\n html += kendo.attr('index') + '=\\'' + index + '\\'';\n }\n html += stringifyAttributes(th.headerAttributes);\n html += '>' + text + '</th>';\n } else {\n html += '<th scope=\\'col\\'' + stringifyAttributes(th.headerAttributes);\n if (rowSpan && !columns[idx].colSpan) {\n html += ' rowspan=\\'' + rowSpan + '\\'';\n }\n if (index > -1) {\n html += kendo.attr('index') + '=\\'' + index + '\\'';\n }\n html += '>' + text + '</th>';\n }\n }\n return html;\n },\n _appendLockedColumnContent: function () {\n var columns = this.columns, idx, colgroup = this.table.find('colgroup'), cols = colgroup.find('col:not(.k-group-col,.k-hierarchy-col)'), length, lockedCols = $(), skipHiddenCount = 0, container, colSpan, spanIdx, colOffset = 0;\n for (idx = 0, length = columns.length; idx < length; idx++) {\n if (columns[idx].locked) {\n if (isVisible(columns[idx])) {\n colSpan = 1;\n if (columns[idx].columns) {\n colSpan = leafColumns(columns[idx].columns).length - hiddenLeafColumnsCount(columns[idx].columns);\n }\n colSpan = colSpan || 1;\n for (spanIdx = 0; spanIdx < colSpan; spanIdx++) {\n lockedCols = lockedCols.add(cols.eq(idx + colOffset + spanIdx - skipHiddenCount));\n }\n colOffset += colSpan - 1;\n } else {\n skipHiddenCount++;\n }\n }\n }\n container = $('<div class=\"k-grid-content-locked\"><table' + (isIE7 ? ' cellspacing=\"0\"' : '') + '><colgroup/><tbody></tbody></table></div>');\n colgroup.detach();\n container.find('colgroup').append(lockedCols);\n colgroup.insertBefore(this.table.find('tbody'));\n this.lockedContent = container.insertBefore(this.content);\n this.lockedTable = container.children('table');\n },\n _appendLockedColumnFooter: function () {\n var that = this;\n var footer = that.footer;\n var cells = footer.find('.k-footer-template>td');\n var cols = footer.find('.k-grid-footer-wrap>table>colgroup>col');\n var html = $('<div class=\"k-grid-footer-locked\"><table><colgroup /><tbody><tr class=\"k-footer-template\"></tr></tbody></table></div>');\n var idx, length;\n var groups = that._groups();\n var lockedCells = $(), lockedCols = $();\n lockedCells = lockedCells.add(cells.filter('.k-group-cell'));\n for (idx = 0, length = leafColumns(lockedColumns(that.columns)).length; idx < length; idx++) {\n lockedCells = lockedCells.add(cells.eq(idx + groups));\n }\n lockedCols = lockedCols.add(cols.filter('.k-group-col'));\n for (idx = 0, length = visibleColumns(leafColumns(visibleLockedColumns(that.columns))).length; idx < length; idx++) {\n lockedCols = lockedCols.add(cols.eq(idx + groups));\n }\n lockedCells.appendTo(html.find('tr'));\n lockedCols.appendTo(html.find('colgroup'));\n that.lockedFooter = html.prependTo(footer);\n },\n _appendLockedColumnHeader: function (container) {\n var that = this, columns = this.columns, idx, html, length, colgroup, tr, trFilter, table, header, filtercellCells, rows = [], skipHiddenCount = 0, cols = $(), hasFilterRow = that._hasFilterRow(), filterCellOffset = 0, filterCells = $(), cell, leafColumnsCount = 0, cells = $();\n colgroup = that.thead.prev().find('col:not(.k-group-col,.k-hierarchy-col)');\n header = that.thead.find('tr:first .k-header:not(.k-group-cell,.k-hierarchy-cell)');\n filtercellCells = that.thead.find('.k-filter-row').find('th:not(.k-group-cell,.k-hierarchy-cell)');\n var colOffset = 0;\n for (idx = 0, length = columns.length; idx < length; idx++) {\n if (columns[idx].locked) {\n cell = header.eq(idx);\n leafColumnsCount = leafColumns(columns[idx].columns || []).length;\n if (isVisible(columns[idx])) {\n var colSpan = null;\n if (columns[idx].columns) {\n colSpan = leafColumnsCount - hiddenLeafColumnsCount(columns[idx].columns);\n }\n colSpan = colSpan || 1;\n for (var spanIdx = 0; spanIdx < colSpan; spanIdx++) {\n cols = cols.add(colgroup.eq(idx + colOffset + spanIdx - skipHiddenCount));\n }\n colOffset += colSpan - 1;\n }\n mapColumnToCellRows([columns[idx]], childColumnsCells(cell), rows, 0, 0);\n leafColumnsCount = leafColumnsCount || 1;\n for (var j = 0; j < leafColumnsCount; j++) {\n filterCells = filterCells.add(filtercellCells.eq(filterCellOffset + j));\n }\n filterCellOffset += leafColumnsCount;\n }\n if (columns[idx].columns) {\n skipHiddenCount += hiddenLeafColumnsCount(columns[idx].columns);\n }\n if (!isVisible(columns[idx])) {\n skipHiddenCount++;\n }\n }\n if (rows.length) {\n html = '<div class=\"k-grid-header-locked\" style=\"width:1px\"><table' + (isIE7 ? ' cellspacing=\"0\"' : '') + '><colgroup/><thead>';\n html += new Array(rows.length + 1).join('<tr></tr>');\n html += (hasFilterRow ? '<tr class=\"k-filter-row\" />' : '') + '</thead></table></div>';\n table = $(html);\n colgroup = table.find('colgroup');\n colgroup.append(that.thead.prev().find('col.k-group-col').add(cols));\n tr = table.find('thead tr:not(.k-filter-row)');\n for (idx = 0, length = rows.length; idx < length; idx++) {\n cells = toJQuery(rows[idx]);\n tr.eq(idx).append(that.thead.find('tr:eq(' + idx + ') .k-group-cell').add(cells));\n }\n var count = removeEmptyRows(this.thead);\n if (rows.length < count) {\n removeRowSpanValue(table, count - rows.length);\n }\n trFilter = table.find('.k-filter-row');\n trFilter.append(that.thead.find('.k-filter-row .k-group-cell').add(filterCells));\n this.lockedHeader = table.prependTo(container);\n this.thead.find('.k-group-cell').remove();\n return true;\n }\n return false;\n },\n _removeLockedContainers: function () {\n var elements = this.lockedHeader.add(this.lockedContent).add(this.lockedFooter);\n kendo.destroy(elements);\n elements.off(NS).remove();\n this.lockedHeader = this.lockedContent = this.lockedFooter = null;\n this.selectable = null;\n },\n _thead: function () {\n var that = this, columns = that.columns, hasDetails = that._hasDetails() && columns.length, hasFilterRow = that._hasFilterRow(), idx, html = '', thead = that.table.find('>thead'), hasTHead = that.element.find('thead:first').length > 0, tr;\n if (!thead.length) {\n thead = $('<thead/>').insertBefore(that.tbody);\n }\n if (that.lockedHeader && that.thead) {\n tr = that.thead.find('tr:has(th):not(.k-filter-row)').html('');\n tr.remove();\n tr = $();\n that._removeLockedContainers();\n } else if (hasTHead) {\n tr = that.element.find('thead:first tr:has(th):not(.k-filter-row)');\n } else {\n tr = that.element.find('tr:has(th):first');\n }\n if (!tr.length) {\n tr = thead.children().first();\n if (!tr.length) {\n var rows = [{\n rowSpan: 1,\n cells: [],\n index: 0\n }];\n that._prepareColumns(rows, columns);\n for (idx = 0; idx < rows.length; idx++) {\n html += '<tr>';\n if (hasDetails) {\n html += '<th class=\"k-hierarchy-cell\" scope=\"col\"> </th>';\n }\n html += that._createHeaderCells(rows[idx].cells, rows[idx].rowSpan);\n html += '</tr>';\n }\n tr = $(html);\n }\n }\n if (hasFilterRow) {\n var filterRow = $('<tr/>');\n filterRow.addClass('k-filter-row');\n if (hasDetails || tr.find('.k-hierarchy-cell').length) {\n filterRow.prepend('<th class=\"k-hierarchy-cell\" scope=\"col\"> </th>');\n }\n var existingFilterRow = (that.thead || thead).find('.k-filter-row');\n if (existingFilterRow.length) {\n kendo.destroy(existingFilterRow);\n existingFilterRow.remove();\n }\n thead.append(filterRow);\n }\n if (!tr.children().length) {\n html = '';\n if (hasDetails) {\n html += '<th class=\"k-hierarchy-cell\" scope=\"col\"> </th>';\n }\n html += that._createHeaderCells(columns);\n tr.html(html);\n } else if (hasDetails && !tr.find('.k-hierarchy-cell')[0]) {\n tr.prepend('<th class=\"k-hierarchy-cell\" scope=\"col\"> </th>');\n }\n tr.attr('role', 'row').find('th').addClass('k-header');\n if (!that.options.scrollable) {\n thead.addClass('k-grid-header');\n }\n tr.find('script').remove().end().prependTo(thead);\n if (that.thead) {\n that._destroyColumnAttachments();\n }\n this.angular('cleanup', function () {\n return { elements: thead.find('th').get() };\n });\n this.angular('compile', function () {\n return {\n elements: thead.find('th').get(),\n data: map(columns, function (col) {\n return { column: col };\n })\n };\n });\n that.thead = thead.attr('role', 'rowgroup');\n that._sortable();\n that._filterable();\n that._filterRow();\n that._scrollable();\n that._updateCols();\n that._columnMenu();\n var syncHeight;\n var hasLockedColumns = this.options.scrollable && lockedColumns(this.columns).length;\n if (hasLockedColumns) {\n syncHeight = that._appendLockedColumnHeader(that.thead.closest('.k-grid-header'));\n that._appendLockedColumnContent();\n that.lockedContent.bind('DOMMouseScroll' + NS + ' mousewheel' + NS, proxy(that._wheelScroll, that));\n }\n that._updateColumnCellIndex();\n that._updateFirstColumnClass();\n that._resizable();\n that._draggable();\n that._reorderable();\n that._updateHeader(that._groups());\n if (hasLockedColumns) {\n if (syncHeight) {\n that._syncLockedHeaderHeight();\n }\n that._applyLockedContainersWidth();\n }\n if (that.groupable) {\n that._attachGroupable();\n }\n },\n _retrieveFirstColumn: function (columns, rows) {\n var result = $();\n if (rows.length && columns[0]) {\n var column = columns[0];\n while (column.columns && column.columns.length) {\n column = column.columns[0];\n rows = rows.filter(':not(:first())');\n }\n result = result.add(rows);\n }\n return result;\n },\n _updateFirstColumnClass: function () {\n var that = this, columns = that.columns || [], hasDetails = that._hasDetails() && columns.length;\n if (!hasDetails && !that._groups()) {\n var tr = that.thead.find('>tr:not(.k-filter-row):not(:first)');\n columns = nonLockedColumns(columns);\n var rows = that._retrieveFirstColumn(columns, tr);\n if (that._isLocked()) {\n tr = that.lockedHeader.find('thead>tr:not(.k-filter-row):not(:first)');\n columns = lockedColumns(that.columns);\n rows = rows.add(that._retrieveFirstColumn(columns, tr));\n }\n rows.each(function () {\n var ths = $(this).find('th');\n ths.removeClass('k-first');\n ths.eq(0).addClass('k-first');\n });\n }\n },\n _prepareColumns: function (rows, columns, parentCell, parentRow) {\n var row = parentRow || rows[rows.length - 1];\n var childRow = rows[row.index + 1];\n var totalColSpan = 0;\n for (var idx = 0; idx < columns.length; idx++) {\n var cell = {\n column: columns[idx],\n colSpan: 0\n };\n row.cells.push(cell);\n if (columns[idx].columns && columns[idx].columns.length) {\n if (!childRow) {\n childRow = {\n rowSpan: 0,\n cells: [],\n index: rows.length\n };\n rows.push(childRow);\n }\n cell.colSpan = columns[idx].columns.length;\n this._prepareColumns(rows, columns[idx].columns, cell, childRow);\n totalColSpan += cell.colSpan - 1;\n row.rowSpan = rows.length - row.index;\n }\n }\n if (parentCell) {\n parentCell.colSpan += totalColSpan;\n }\n },\n _wheelScroll: function (e) {\n if (e.ctrlKey) {\n return;\n }\n var content = this.content;\n if (this.options.scrollable.virtual) {\n content = this.virtualScrollable.verticalScrollbar;\n }\n var scrollTop = content.scrollTop(), delta = kendo.wheelDeltaY(e);\n if (delta) {\n if (content[0].scrollHeight > content[0].clientHeight && (content[0].scrollTop < content[0].scrollHeight - content[0].clientHeight && delta < 0 || content[0].scrollTop > 0 && delta > 0)) {\n e.preventDefault();\n }\n content.scrollTop(scrollTop + -delta);\n }\n },\n _isLocked: function () {\n return this.lockedHeader != null;\n },\n _updateHeaderCols: function () {\n var table = this.thead.parent().add(this.table);\n if (this._isLocked()) {\n normalizeCols(table, visibleLeafColumns(visibleNonLockedColumns(this.columns)), this._hasDetails(), 0);\n } else {\n normalizeCols(table, visibleLeafColumns(visibleColumns(this.columns)), this._hasDetails(), 0);\n }\n },\n _updateCols: function (table) {\n table = table || this.thead.parent().add(this.table);\n this._appendCols(table, this._isLocked());\n },\n _updateLockedCols: function (table) {\n if (this._isLocked()) {\n table = table || this.lockedHeader.find('table').add(this.lockedTable);\n normalizeCols(table, visibleLeafColumns(visibleLockedColumns(this.columns)), this._hasDetails(), this._groups());\n }\n },\n _appendCols: function (table, locked) {\n if (locked) {\n normalizeCols(table, visibleLeafColumns(visibleNonLockedColumns(this.columns)), this._hasDetails(), 0);\n } else {\n normalizeCols(table, visibleLeafColumns(visibleColumns(this.columns)), this._hasDetails(), this._groups());\n }\n },\n _autoColumns: function (schema) {\n if (schema && schema.toJSON) {\n var that = this, field, encoded;\n schema = schema.toJSON();\n encoded = !(that.table.find('tbody tr').length > 0 && (!that.dataSource || !that.dataSource.transport));\n for (field in schema) {\n that.columns.push({\n field: field,\n encoded: encoded,\n headerAttributes: { id: kendo.guid() }\n });\n }\n that._thead();\n that._templates();\n }\n },\n _rowsHtml: function (data, templates) {\n var that = this, html = '', idx, rowTemplate = templates.rowTemplate, altRowTemplate = templates.altRowTemplate, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (idx % 2) {\n html += altRowTemplate(data[idx]);\n } else {\n html += rowTemplate(data[idx]);\n }\n that._data.push(data[idx]);\n }\n return html;\n },\n _groupRowHtml: function (group, colspan, level, groupHeaderBuilder, templates, skipColspan) {\n var that = this, html = '', idx, length, field = group.field, column = grep(leafColumns(that.columns), function (column) {\n return column.field == field;\n })[0] || {}, template = column.groupHeaderTemplate, text = (column.title || field) + ': ' + formatGroupValue(group.value, column.format, column.values, column.encoded), footerDefaults = that._groupAggregatesDefaultObject || {}, aggregates = extend({}, footerDefaults, group.aggregates), headerData = extend({}, {\n field: group.field,\n value: group.value,\n aggregates: aggregates\n }, group.aggregates[group.field]), groupFooterTemplate = templates.groupFooterTemplate, groupItems = group.items;\n if (template) {\n text = typeof template === FUNCTION ? template(headerData) : kendo.template(template)(headerData);\n }\n html += groupHeaderBuilder(colspan, level, text);\n if (group.hasSubgroups) {\n for (idx = 0, length = groupItems.length; idx < length; idx++) {\n html += that._groupRowHtml(groupItems[idx], skipColspan ? colspan : colspan - 1, level + 1, groupHeaderBuilder, templates, skipColspan);\n }\n } else {\n html += that._rowsHtml(groupItems, templates);\n }\n if (groupFooterTemplate) {\n var footerData = {};\n for (var aggregate in aggregates) {\n footerData[aggregate] = extend({}, aggregates[aggregate], {\n group: {\n field: group.field,\n value: group.value\n }\n });\n }\n html += groupFooterTemplate(footerData);\n }\n return html;\n },\n collapseGroup: function (group) {\n group = $(group);\n var level, groupable = this.options.groupable, showFooter = groupable.showFooter, footerCount = showFooter ? 0 : 1, offset, relatedGroup = $(), idx, length, tr;\n if (this._isLocked()) {\n if (!group.closest('div').hasClass('k-grid-content-locked')) {\n relatedGroup = group.nextAll('tr');\n group = this.lockedTable.find('>tbody>tr:eq(' + group.index() + ')');\n } else {\n relatedGroup = this.tbody.children('tr:eq(' + group.index() + ')').nextAll('tr');\n }\n }\n level = group.find('.k-group-cell').length;\n group.find('.k-i-collapse').addClass('k-i-expand').removeClass('k-i-collapse');\n group.find('td[aria-expanded=\\'true\\']:first').attr('aria-expanded', false);\n group = group.nextAll('tr');\n var toHide = [];\n for (idx = 0, length = group.length; idx < length; idx++) {\n tr = group.eq(idx);\n offset = tr.find('.k-group-cell').length;\n if (tr.hasClass('k-grouping-row')) {\n footerCount++;\n } else if (tr.hasClass('k-group-footer')) {\n footerCount--;\n }\n if (offset <= level || tr.hasClass('k-group-footer') && footerCount < 0) {\n break;\n }\n if (relatedGroup.length) {\n toHide.push(relatedGroup[idx]);\n }\n toHide.push(tr[0]);\n }\n $(toHide).hide();\n },\n expandGroup: function (group) {\n group = $(group);\n var that = this, showFooter = that.options.groupable.showFooter, level, tr, offset, relatedGroup = $(), idx, length, footersVisibility = [], groupsCount = 1;\n if (this._isLocked()) {\n if (!group.closest('div').hasClass('k-grid-content-locked')) {\n relatedGroup = group.nextAll('tr');\n group = this.lockedTable.find('>tbody>tr:eq(' + group.index() + ')');\n } else {\n relatedGroup = this.tbody.children('tr:eq(' + group.index() + ')').nextAll('tr');\n }\n }\n level = group.find('.k-group-cell').length;\n group.find('.k-i-expand').addClass('k-i-collapse').removeClass('k-i-expand');\n group.find('td[aria-expanded=\\'false\\']:first').attr('aria-expanded', true);\n group = group.nextAll('tr');\n for (idx = 0, length = group.length; idx < length; idx++) {\n tr = group.eq(idx);\n offset = tr.find('.k-group-cell').length;\n if (offset <= level) {\n break;\n }\n if (offset == level + 1 && !tr.hasClass('k-detail-row')) {\n tr.show();\n relatedGroup.eq(idx).show();\n if (tr.hasClass('k-grouping-row') && tr.find('.k-icon').hasClass('k-i-collapse')) {\n that.expandGroup(tr);\n }\n if (tr.hasClass('k-master-row') && tr.find('.k-icon').hasClass('k-i-collapse')) {\n tr.next().show();\n relatedGroup.eq(idx + 1).show();\n }\n }\n if (tr.hasClass('k-grouping-row')) {\n if (showFooter) {\n footersVisibility.push(tr.is(':visible'));\n }\n groupsCount++;\n }\n if (tr.hasClass('k-group-footer')) {\n if (showFooter) {\n tr.toggle(footersVisibility.pop());\n }\n if (groupsCount == 1) {\n tr.show();\n relatedGroup.eq(idx).show();\n } else {\n groupsCount--;\n }\n }\n }\n },\n _updateHeader: function (groups) {\n var that = this, container = that._isLocked() ? that.lockedHeader.find('thead') : that.thead, filterCells = container.find('tr.k-filter-row').find('th.k-group-cell').length, length = container.find('tr:first').find('th.k-group-cell').length, rows = container.children('tr:not(:first)').filter(function () {\n return !$(this).children(':visible').length;\n });\n if (groups > length) {\n $(new Array(groups - length + 1).join('<th class=\"k-group-cell k-header\" scope=\"col\"> </th>')).prependTo(container.children('tr:not(.k-filter-row)'));\n if (that.element.is(':visible')) {\n rows.find('th.k-group-cell').hide();\n }\n } else if (groups < length) {\n container.find('tr').each(function () {\n $(this).find('th.k-group-cell').filter(':eq(' + groups + '),' + ':gt(' + groups + ')').remove();\n });\n }\n if (groups > filterCells) {\n $(new Array(groups - filterCells + 1).join('<th class=\"k-group-cell k-header\" scope=\"col\"> </th>')).prependTo(container.find('.k-filter-row'));\n }\n },\n _firstDataItem: function (data, grouped) {\n if (data && grouped) {\n if (data.hasSubgroups) {\n data = this._firstDataItem(data.items[0], grouped);\n } else {\n data = data.items[0];\n }\n }\n return data;\n },\n _updateTablesWidth: function () {\n var that = this, tables;\n if (!that._isLocked()) {\n return;\n }\n tables = $('>.k-grid-footer>.k-grid-footer-wrap>table', that.wrapper).add(that.thead.parent()).add(that.table);\n that._footerWidth = tableWidth(tables.eq(0));\n tables.width(that._footerWidth);\n tables = $('>.k-grid-footer>.k-grid-footer-locked>table', that.wrapper).add(that.lockedHeader.find('>table')).add(that.lockedTable);\n tables.width(tableWidth(tables.eq(0)));\n },\n hideColumn: function (column) {\n var that = this, cell, tables, idx, cols, colWidth, position, width = 0, headerCellIndex, length, footer = that.footer || that.wrapper.find('.k-grid-footer'), columns = that.columns, visibleLocked = that.lockedHeader ? leafDataCells(that.lockedHeader.find('>table>thead')).filter(isCellVisible).length : 0, columnIndex;\n if (typeof column == 'number') {\n column = columns[column];\n } else if (isPlainObject(column)) {\n column = grep(flatColumns(columns), function (item) {\n return item === column;\n })[0];\n } else {\n column = grep(flatColumns(columns), function (item) {\n return item.field === column;\n })[0];\n }\n if (!column || !isVisible(column)) {\n return;\n }\n if (column.columns && column.columns.length) {\n position = columnVisiblePosition(column, columns);\n setColumnVisibility(column, false);\n setCellVisibility(elements($('>table>thead', that.lockedHeader), that.thead, '>tr:eq(' + position.row + ')>th'), position.cell, false);\n for (idx = 0; idx < column.columns.length; idx++) {\n this.hideColumn(column.columns[idx]);\n }\n that.trigger(COLUMNHIDE, { column: column });\n return;\n }\n columnIndex = inArray(column, visibleColumns(leafColumns(columns)));\n setColumnVisibility(column, false);\n that._setParentsVisibility(column, false);\n that._templates();\n that._updateCols();\n that._updateLockedCols();\n var container = that.thead;\n headerCellIndex = columnIndex;\n if (that.lockedHeader && visibleLocked > columnIndex) {\n container = that.lockedHeader.find('>table>thead');\n } else {\n headerCellIndex -= visibleLocked;\n }\n cell = leafDataCells(container).filter(isCellVisible).eq(headerCellIndex);\n cell[0].style.display = 'none';\n setCellVisibility(elements($('>table>thead', that.lockedHeader), that.thead, '>tr.k-filter-row>th'), columnIndex, false);\n if (footer[0]) {\n that._updateCols(footer.find('>.k-grid-footer-wrap>table'));\n that._updateLockedCols(footer.find('>.k-grid-footer-locked>table'));\n setCellVisibility(footer.find('.k-footer-template>td'), columnIndex, false);\n }\n if (that.lockedTable && visibleLocked > columnIndex) {\n hideColumnCells(that.lockedTable.find('>tbody>tr'), columnIndex);\n } else {\n hideColumnCells(that.tbody.children(), columnIndex - visibleLocked);\n }\n if (that.lockedTable) {\n that._updateTablesWidth();\n that._applyLockedContainersWidth();\n that._syncLockedContentHeight();\n that._syncLockedHeaderHeight();\n that._syncLockedFooterHeight();\n } else {\n cols = that.thead.prev().find('col');\n for (idx = 0, length = cols.length; idx < length; idx += 1) {\n colWidth = cols[idx].style.width;\n if (colWidth && colWidth.indexOf('%') == -1) {\n width += parseInt(colWidth, 10);\n } else {\n width = 0;\n break;\n }\n }\n tables = $('>.k-grid-header table:first,>.k-grid-footer table:first', that.wrapper).add(that.table);\n that._footerWidth = null;\n if (width) {\n tables.each(function () {\n this.style.width = width + 'px';\n });\n that._footerWidth = width;\n }\n if (browser.msie && browser.version == 8) {\n tables.css('display', 'inline-table');\n setTimeout(function () {\n tables.css('display', 'table');\n }, 1);\n }\n }\n that._updateFirstColumnClass();\n that.trigger(COLUMNHIDE, { column: column });\n },\n _setParentsVisibility: function (column, visible) {\n var columns = this.columns;\n var idx;\n var parents = [];\n var parent;\n var position;\n var cell;\n var colSpan;\n var predicate = visible ? function (p) {\n return visibleColumns(p.columns).length && p.hidden;\n } : function (p) {\n return !visibleColumns(p.columns).length && !p.hidden;\n };\n if (columnParents(column, columns, parents) && parents.length) {\n for (idx = parents.length - 1; idx >= 0; idx--) {\n parent = parents[idx];\n position = columnPosition(parent, columns);\n cell = elements($('>table>thead', this.lockedHeader), this.thead, '>tr:eq(' + position.row + ')>th:not(.k-group-cell):not(.k-hierarchy-cell)').eq(position.cell);\n if (predicate(parent)) {\n setColumnVisibility(parent, visible);\n cell[0].style.display = visible ? '' : 'none';\n }\n if (cell.filter('[' + kendo.attr('colspan') + ']').length) {\n colSpan = parseInt(cell.attr(kendo.attr('colspan')), 10);\n cell[0].colSpan = colSpan - hiddenLeafColumnsCount(parent.columns) || 1;\n }\n }\n }\n },\n showColumn: function (column) {\n var that = this, idx, length, cell, tables, width, headerCellIndex, position, colWidth, cols, columns = that.columns, footer = that.footer || that.wrapper.find('.k-grid-footer'), lockedColumnsCount = that.lockedHeader ? leafDataCells(that.lockedHeader.find('>table>thead')).length : 0, columnIndex;\n if (typeof column == 'number') {\n column = columns[column];\n } else if (isPlainObject(column)) {\n column = grep(flatColumns(columns), function (item) {\n return item === column;\n })[0];\n } else {\n column = grep(flatColumns(columns), function (item) {\n return item.field === column;\n })[0];\n }\n if (!column || isVisible(column)) {\n return;\n }\n if (column.columns && column.columns.length) {\n position = columnPosition(column, columns);\n setColumnVisibility(column, true);\n setCellVisibility(elements($('>table>thead', that.lockedHeader), that.thead, '>tr:eq(' + position.row + ')>th'), position.cell, true);\n for (idx = 0; idx < column.columns.length; idx++) {\n this.showColumn(column.columns[idx]);\n }\n that.trigger(COLUMNSHOW, { column: column });\n return;\n }\n columnIndex = inArray(column, leafColumns(columns));\n setColumnVisibility(column, true);\n that._setParentsVisibility(column, true);\n that._templates();\n that._updateCols();\n that._updateLockedCols();\n var container = that.thead;\n headerCellIndex = columnIndex;\n if (that.lockedHeader && lockedColumnsCount > columnIndex) {\n container = that.lockedHeader.find('>table>thead');\n } else {\n headerCellIndex -= lockedColumnsCount;\n }\n cell = leafDataCells(container).eq(headerCellIndex);\n cell[0].style.display = '';\n setCellVisibility(elements($('>table>thead', that.lockedHeader), that.thead, '>tr.k-filter-row>th'), columnIndex, true);\n if (footer[0]) {\n that._updateCols(footer.find('>.k-grid-footer-wrap>table'));\n that._updateLockedCols(footer.find('>.k-grid-footer-locked>table'));\n setCellVisibility(footer.find('.k-footer-template>td'), columnIndex, true);\n }\n if (that.lockedTable && lockedColumnsCount > columnIndex) {\n showColumnCells(that.lockedTable.find('>tbody>tr'), columnIndex);\n } else {\n showColumnCells(that.tbody.children(), columnIndex - lockedColumnsCount);\n }\n if (that.lockedTable) {\n that._updateTablesWidth();\n that._applyLockedContainersWidth();\n that._syncLockedContentHeight();\n that._syncLockedHeaderHeight();\n } else {\n tables = $('>.k-grid-header table:first,>.k-grid-footer table:first', that.wrapper).add(that.table);\n if (!column.width) {\n tables.width('');\n } else {\n width = 0;\n cols = that.thead.prev().find('col');\n for (idx = 0, length = cols.length; idx < length; idx += 1) {\n colWidth = cols[idx].style.width;\n if (colWidth.indexOf('%') > -1) {\n width = 0;\n break;\n }\n width += parseInt(colWidth, 10);\n }\n that._footerWidth = null;\n if (width) {\n tables.each(function () {\n this.style.width = width + 'px';\n });\n that._footerWidth = width;\n }\n }\n }\n that._updateFirstColumnClass();\n that.trigger(COLUMNSHOW, { column: column });\n },\n _progress: function (toggle) {\n var element = this.element;\n if (this.lockedContent) {\n element = this.wrapper;\n } else if (this.element.is('table')) {\n element = this.element.parent();\n } else if (this.content && this.content.length) {\n element = this.content;\n }\n kendo.ui.progress(element, toggle);\n },\n _resize: function (size, force) {\n this._syncLockedContentHeight();\n this._syncLockedHeaderHeight();\n if (this.content) {\n this._setContentWidth();\n this._setContentHeight();\n }\n if (this.virtualScrollable && (force || this._rowHeight)) {\n if (force) {\n this._rowHeight = null;\n }\n this.virtualScrollable.repaintScrollbar();\n }\n },\n _isActiveInTable: function () {\n var active = activeElement();\n if (!active) {\n return false;\n }\n return this.table[0] === active || $.contains(this.table[0], active) || this._isLocked() && (this.lockedTable[0] === active || $.contains(this.lockedTable[0], active));\n },\n refresh: function (e) {\n var that = this, data = that.dataSource.view(), navigatable = that.options.navigatable, currentIndex, current = $(that.current()), isCurrentInHeader = false, groups = (that.dataSource.group() || []).length, colspan = groups + visibleLeafColumns(visibleColumns(that.columns)).length;\n if (e && e.action === 'itemchange' && that.editable) {\n return;\n }\n if (e && e.action === 'remove' && that.editable && that.editable.options.model && inArray(that.editable.options.model, e.items) > -1) {\n that.editable.options.model.unbind(CHANGE, that._modelChangeHandler);\n }\n e = e || {};\n if (that.trigger('dataBinding', {\n action: e.action || 'rebind',\n index: e.index,\n items: e.items\n })) {\n return;\n }\n that._angularItems('cleanup');\n if (navigatable && (that._isActiveInTable() || that._editContainer && that._editContainer.data('kendoWindow'))) {\n isCurrentInHeader = current.is('th');\n currentIndex = Math.max(that.cellIndex(current), 0);\n }\n that._destroyEditable();\n that._progress(false);\n that._hideResizeHandle();\n that._data = [];\n if (!that.columns.length) {\n that._autoColumns(that._firstDataItem(data[0], groups));\n colspan = groups + that.columns.length;\n }\n that._group = groups > 0 || that._group;\n if (that._group) {\n that._templates();\n that._updateCols();\n that._updateLockedCols();\n that._updateHeader(groups);\n that._group = groups > 0;\n }\n that._renderContent(data, colspan, groups);\n that._renderLockedContent(data, colspan, groups);\n that._footer();\n that._renderNoRecordsContent();\n that._setContentHeight();\n that._setContentWidth(that.content && that.content.scrollLeft());\n if (that.lockedTable) {\n if (that.options.scrollable.virtual) {\n that.content.find('>.k-virtual-scrollable-wrap').trigger('scroll');\n } else if (that.touchScroller) {\n that.touchScroller.movable.trigger('change');\n } else {\n that.wrapper.one('scroll', function (e) {\n e.stopPropagation();\n });\n that.content.trigger('scroll');\n }\n }\n that._restoreCurrent(currentIndex, isCurrentInHeader);\n if (that.touchScroller) {\n that.touchScroller.contentResized();\n }\n if (that.selectable) {\n that.selectable.resetTouchEvents();\n }\n that._muteAngularRebind(function () {\n that._angularItems('compile');\n });\n that.trigger(DATABOUND);\n },\n _restoreCurrent: function (currentIndex, isCurrentInHeader) {\n if (currentIndex === undefined || currentIndex < 0) {\n return;\n }\n this._removeCurrent();\n if (isCurrentInHeader) {\n this._setCurrent(this.thead.find('th:not(.k-group-cell)').eq(currentIndex));\n } else {\n var rowIndex = 0;\n if (this._rowVirtualIndex) {\n rowIndex = this.virtualScrollable.position(this._rowVirtualIndex);\n } else {\n currentIndex = 0;\n }\n var row = $();\n if (this.lockedTable) {\n row = this.lockedTable.find('>tbody>tr').eq(rowIndex);\n }\n row = row.add(this.tbody.children().eq(rowIndex));\n var td = row.find('>td:not(.k-group-cell):not(.k-hierarchy-cell)').eq(currentIndex);\n this._setCurrent(td);\n }\n if (this._current) {\n focusTable(this._current.closest('table')[0], true);\n }\n },\n _angularItems: function (cmd) {\n kendo.ui.DataBoundWidget.fn._angularItems.call(this, cmd);\n if (cmd === 'cleanup') {\n this._cleanupDetailItems();\n }\n this._angularGroupItems(cmd);\n this._angularGroupFooterItems(cmd);\n },\n _cleanupDetailItems: function () {\n var that = this;\n if (that._hasDetails()) {\n that.angular('cleanup', function () {\n return { elements: that.tbody.children('.k-detail-row') };\n });\n that.tbody.find('.k-detail-cell').empty();\n }\n },\n _angularGroupItems: function (cmd) {\n var that = this, container = that.tbody;\n if (that.lockedContent) {\n container = that.lockedTable.find('tbody');\n }\n if (that._group) {\n that.angular(cmd, function () {\n return {\n elements: container.children('.k-grouping-row'),\n data: $.map(groupRows(that.dataSource.view()), function (dataItem) {\n return { dataItem: dataItem };\n })\n };\n });\n }\n },\n _angularGroupFooterItems: function (cmd) {\n var that = this, container = that.tbody;\n if (that.lockedContent) {\n container = that.element;\n }\n if (that._group && that.groupFooterTemplate) {\n that.angular(cmd, function () {\n return {\n elements: container.find('.k-group-footer'),\n data: $.map(groupFooters(that.dataSource.view()), function (dataItem) {\n return { dataItem: dataItem };\n })\n };\n });\n }\n },\n _renderContent: function (data, colspan, groups) {\n var that = this, idx, length, html = '', isLocked = that.lockedContent != null, templates = {\n rowTemplate: that.rowTemplate,\n altRowTemplate: that.altRowTemplate,\n groupFooterTemplate: that.groupFooterTemplate\n };\n colspan = isLocked ? colspan - visibleLeafColumns(visibleLockedColumns(that.columns)).length : colspan;\n if (groups > 0) {\n colspan = isLocked ? colspan - groups : colspan;\n if (that.detailTemplate) {\n colspan++;\n }\n if (that.groupFooterTemplate) {\n that._groupAggregatesDefaultObject = that.dataSource.aggregates();\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n html += that._groupRowHtml(data[idx], colspan, 0, isLocked ? groupRowLockedContentBuilder : groupRowBuilder, templates, isLocked);\n }\n } else {\n html += that._rowsHtml(data, templates);\n }\n that.tbody = appendContent(that.tbody, that.table, html, this.options.$angular);\n },\n _renderLockedContent: function (data, colspan, groups) {\n var html = '', idx, length, templates = {\n rowTemplate: this.lockedRowTemplate,\n altRowTemplate: this.lockedAltRowTemplate,\n groupFooterTemplate: this.lockedGroupFooterTemplate\n };\n if (this.lockedContent) {\n var table = this.lockedTable;\n if (groups > 0) {\n colspan = colspan - visibleColumns(leafColumns(nonLockedColumns(this.columns))).length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n html += this._groupRowHtml(data[idx], colspan, 0, groupRowBuilder, templates);\n }\n } else {\n html = this._rowsHtml(data, templates);\n }\n appendContent(table.children('tbody'), table, html, this.options.$angular);\n this._syncLockedContentHeight();\n }\n },\n _adjustRowsHeight: function (table1, table2) {\n var rows = table1[0].rows, length = rows.length, idx, rows2 = table2[0].rows, containers = table1.add(table2), containersLength = containers.length, heights = [];\n for (idx = 0; idx < length; idx++) {\n if (!rows2[idx]) {\n break;\n }\n if (rows[idx].style.height) {\n rows[idx].style.height = rows2[idx].style.height = '';\n }\n }\n for (idx = 0; idx < length; idx++) {\n if (!rows2[idx]) {\n break;\n }\n var offsetHeight1 = rows[idx].offsetHeight;\n var offsetHeight2 = rows2[idx].offsetHeight;\n var height = 0;\n if (offsetHeight1 > offsetHeight2) {\n height = offsetHeight1;\n } else if (offsetHeight1 < offsetHeight2) {\n height = offsetHeight2;\n }\n heights.push(height);\n }\n for (idx = 0; idx < containersLength; idx++) {\n containers[idx].style.display = 'none';\n }\n for (idx = 0; idx < length; idx++) {\n if (heights[idx]) {\n rows[idx].style.height = rows2[idx].style.height = heights[idx] + 1 + 'px';\n }\n }\n for (idx = 0; idx < containersLength; idx++) {\n containers[idx].style.display = '';\n }\n }\n });\n if (kendo.ExcelMixin) {\n kendo.ExcelMixin.extend(Grid.prototype);\n }\n if (kendo.PDFMixin) {\n kendo.PDFMixin.extend(Grid.prototype);\n Grid.prototype._drawPDF_autoPageBreak = function (progress) {\n var grid = this;\n var result = new $.Deferred();\n var dataSource = grid.dataSource;\n var allPages = grid.options.pdf.allPages;\n var origBody = grid.wrapper.find('.k-grid-content tbody');\n var cont = $('<div>').css({\n position: 'absolute',\n left: -10000,\n top: -10000\n });\n var clone = grid.wrapper.clone().css({\n height: 'auto',\n width: 'auto'\n }).appendTo(cont);\n clone.find('.k-grid-content').css({\n height: 'auto',\n width: 'auto',\n overflow: 'visible'\n });\n clone.find('.k-grid-pager, .k-grid-toolbar, .k-grouping-header').remove();\n clone.find('.k-grid-header').css({ paddingRight: 0 });\n this._initPDFProgress(progress);\n var body = clone.find('.k-grid-content tbody').empty();\n var startingPage = dataSource.page();\n function resolve() {\n if (allPages && startingPage !== undefined) {\n dataSource.one('change', draw);\n dataSource.page(startingPage);\n } else {\n grid.refresh();\n draw();\n }\n }\n function draw() {\n cont.appendTo(document.body);\n var options = $.extend({}, grid.options.pdf, {\n _destructive: true,\n progress: function (p) {\n progress.notify({\n page: p.page,\n pageNumber: p.pageNum,\n progress: 0.5 + p.pageNum / p.totalPages / 2,\n totalPages: p.totalPages\n });\n }\n });\n kendo.drawing.drawDOM(clone, options).always(function () {\n cont.remove();\n }).then(function (group) {\n result.resolve(group);\n }).fail(function (err) {\n result.reject(err);\n });\n }\n function renderPage() {\n var pageNum = dataSource.page();\n var totalPages = allPages ? dataSource.totalPages() : 1;\n body.append(origBody.find('tr'));\n if (pageNum < totalPages) {\n dataSource.page(pageNum + 1);\n } else {\n dataSource.unbind('change', renderPage);\n resolve();\n }\n }\n if (allPages) {\n dataSource.bind('change', renderPage);\n dataSource.page(1);\n } else {\n renderPage();\n }\n return result.promise();\n };\n Grid.prototype._drawPDF = function (progress) {\n var grid = this;\n if (grid.options.pdf.paperSize && grid.options.pdf.paperSize != 'auto') {\n return grid._drawPDF_autoPageBreak(progress);\n }\n var result = new $.Deferred();\n var dataSource = grid.dataSource;\n var allPages = grid.options.pdf.allPages;\n this._initPDFProgress(progress);\n var doc = new kendo.drawing.Group();\n var startingPage = dataSource.page();\n function resolve() {\n if (allPages && startingPage !== undefined) {\n dataSource.unbind('change', exportPage);\n dataSource.one('change', function () {\n result.resolve(doc);\n });\n dataSource.page(startingPage);\n } else {\n result.resolve(doc);\n }\n }\n function exportPage() {\n grid._drawPDFShadow({ width: grid.wrapper.width() }, { avoidLinks: grid.options.pdf.avoidLinks }).done(function (group) {\n var pageNum = dataSource.page();\n var totalPages = allPages ? dataSource.totalPages() : 1;\n var args = {\n page: group,\n pageNumber: pageNum,\n progress: pageNum / totalPages,\n totalPages: totalPages\n };\n progress.notify(args);\n doc.append(args.page);\n if (pageNum < totalPages) {\n dataSource.page(pageNum + 1);\n } else {\n resolve();\n }\n }).fail(function (err) {\n result.reject(err);\n });\n }\n if (allPages) {\n dataSource.bind('change', exportPage);\n dataSource.page(1);\n } else {\n exportPage();\n }\n return result.promise();\n };\n Grid.prototype._initPDFProgress = function (deferred) {\n var loading = $('<div class=\\'k-loading-pdf-mask\\'><div class=\\'k-loading-color\\'/></div>');\n loading.prepend(this.wrapper.clone().css({\n position: 'absolute',\n top: 0,\n left: 0\n }));\n this.wrapper.append(loading);\n var pb = $('<div class=\\'k-loading-pdf-progress\\'>').appendTo(loading).kendoProgressBar({\n type: 'chunk',\n chunkCount: 10,\n min: 0,\n max: 1,\n value: 0\n }).data('kendoProgressBar');\n deferred.progress(function (e) {\n pb.value(e.progress);\n }).always(function () {\n kendo.destroy(loading);\n loading.remove();\n });\n };\n }\n function syncTableHeight(table1, table2) {\n table1 = table1[0];\n table2 = table2[0];\n if (table1.rows.length !== table2.rows.length) {\n var lockedHeigth = table1.offsetHeight;\n var tableHeigth = table2.offsetHeight;\n var row;\n var diff;\n if (lockedHeigth > tableHeigth) {\n row = table2.rows[table2.rows.length - 1];\n if (filterRowRegExp.test(row.className)) {\n row = table2.rows[table2.rows.length - 2];\n }\n diff = lockedHeigth - tableHeigth;\n } else {\n row = table1.rows[table1.rows.length - 1];\n if (filterRowRegExp.test(row.className)) {\n row = table1.rows[table1.rows.length - 2];\n }\n diff = tableHeigth - lockedHeigth;\n }\n row.style.height = row.offsetHeight + diff + 'px';\n }\n }\n function adjustRowHeight(row1, row2) {\n var height;\n var offsetHeight1 = row1.offsetHeight;\n var offsetHeight2 = row2.offsetHeight;\n if (offsetHeight1 > offsetHeight2) {\n height = offsetHeight1 + 'px';\n } else if (offsetHeight1 < offsetHeight2) {\n height = offsetHeight2 + 'px';\n }\n if (height) {\n row1.style.height = row2.style.height = height;\n }\n }\n function getCommand(commands, name) {\n var idx, length, command;\n if (typeof commands === STRING && commands === name) {\n return commands;\n }\n if (isPlainObject(commands) && commands.name === name) {\n return commands;\n }\n if (isArray(commands)) {\n for (idx = 0, length = commands.length; idx < length; idx++) {\n command = commands[idx];\n if (typeof command === STRING && command === name || command.name === name) {\n return command;\n }\n }\n }\n return null;\n }\n function focusTable(table, direct) {\n var msie = browser.msie || browser.edge;\n if (direct === true) {\n table = $(table);\n var scrollTop, scrollLeft;\n scrollTop = table.parent().scrollTop();\n scrollLeft = table.parent().scrollLeft();\n if (msie) {\n try {\n table[0].setActive();\n } catch (e) {\n table[0].focus();\n }\n } else {\n table[0].focus();\n }\n table.parent().scrollTop(scrollTop).scrollLeft(scrollLeft);\n } else {\n $(table).one('focusin', function (e) {\n e.preventDefault();\n }).focus();\n }\n }\n function isColumnEditable(column, model) {\n if (!column.field) {\n return false;\n }\n if (model.editable && !model.editable(column.field)) {\n return false;\n }\n if (column.editable && !column.editable(model)) {\n return false;\n }\n return true;\n }\n function isInputElement(element) {\n return $(element).is(':button,a,:input,a>.k-icon,textarea,span.k-select,span.k-icon,span.k-link,.k-input,.k-multiselect-wrap,.k-tool-icon');\n }\n function tableClick(e) {\n var currentTarget = $(e.currentTarget), isHeader = currentTarget.is('th'), table = this.table.add(this.lockedTable), headerTable = this.thead.parent().add($('>table', this.lockedHeader)), isInput = isInputElement(e.target), currentTable = currentTarget.closest('table')[0];\n if (kendo.support.touch) {\n return;\n }\n if (isInput && currentTarget.find(kendo.roleSelector('filtercell')).length) {\n this._setCurrent(currentTarget);\n return;\n }\n if (currentTable !== table[0] && currentTable !== table[1] && currentTable !== headerTable[0] && currentTable !== headerTable[1]) {\n return;\n }\n if ($(e.target).is('a.k-i-expand, a.k-i-collapse')) {\n return;\n }\n if (this.options.navigatable) {\n this._setCurrent(currentTarget);\n }\n if (isHeader || !isInput) {\n setTimeout(function () {\n if (!(isIE8 && $(kendo._activeElement()).hasClass('k-widget'))) {\n if (!isInputElement(kendo._activeElement())) {\n focusTable(currentTable, true);\n }\n }\n });\n }\n if (isHeader) {\n e.preventDefault();\n }\n }\n function isInEdit(cell) {\n return cell && (cell.hasClass('k-edit-cell') || cell.parent().hasClass('k-grid-edit-row'));\n }\n function groupRowBuilder(colspan, level, text) {\n return '<tr role=\"row\" class=\"k-grouping-row\">' + groupCells(level) + '<td colspan=\"' + colspan + '\" aria-expanded=\"true\">' + '<p class=\"k-reset\">' + '<a class=\"k-icon k-i-collapse\" href=\"#\" tabindex=\"-1\"></a>' + text + '</p></td></tr>';\n }\n function groupRowLockedContentBuilder(colspan) {\n return '<tr role=\"row\" class=\"k-grouping-row\">' + '<td colspan=\"' + colspan + '\" aria-expanded=\"true\">' + '<p class=\"k-reset\"> </p></td></tr>';\n }\n ui.plugin(Grid);\n ui.plugin(VirtualScrollable);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.listview', [\n 'kendo.data',\n 'kendo.editable',\n 'kendo.selectable'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'listview',\n name: 'ListView',\n category: 'web',\n description: 'The ListView widget offers rich support for interacting with data.',\n depends: ['data'],\n features: [\n {\n id: 'listview-editing',\n name: 'Editing',\n description: 'Support for record editing',\n depends: ['editable']\n },\n {\n id: 'listview-selection',\n name: 'Selection',\n description: 'Support for selection',\n depends: ['selectable']\n }\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, CHANGE = 'change', CANCEL = 'cancel', DATABOUND = 'dataBound', DATABINDING = 'dataBinding', Widget = kendo.ui.Widget, keys = kendo.keys, FOCUSSELECTOR = '>*:not(.k-loading-mask)', PROGRESS = 'progress', ERROR = 'error', FOCUSED = 'k-state-focused', SELECTED = 'k-state-selected', KEDITITEM = 'k-edit-item', EDIT = 'edit', REMOVE = 'remove', SAVE = 'save', CLICK = 'click', NS = '.kendoListView', proxy = $.proxy, activeElement = kendo._activeElement, progress = kendo.ui.progress, DataSource = kendo.data.DataSource;\n var ListView = kendo.ui.DataBoundWidget.extend({\n init: function (element, options) {\n var that = this;\n options = $.isArray(options) ? { dataSource: options } : options;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n that.wrapper = element = that.element;\n if (element[0].id) {\n that._itemId = element[0].id + '_lv_active';\n }\n that._element();\n that._dataSource();\n that._templates();\n that._navigatable();\n that._selectable();\n that._pageable();\n that._crudHandlers();\n if (that.options.autoBind) {\n that.dataSource.fetch();\n }\n kendo.notify(that);\n },\n events: [\n CHANGE,\n CANCEL,\n DATABINDING,\n DATABOUND,\n EDIT,\n REMOVE,\n SAVE\n ],\n options: {\n name: 'ListView',\n autoBind: true,\n selectable: false,\n navigatable: false,\n template: '',\n altTemplate: '',\n editTemplate: ''\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n this._templates();\n if (this.selectable) {\n this.selectable.destroy();\n this.selectable = null;\n }\n this._selectable();\n },\n _templates: function () {\n var options = this.options;\n this.template = kendo.template(options.template || '');\n this.altTemplate = kendo.template(options.altTemplate || options.template);\n this.editTemplate = kendo.template(options.editTemplate || '');\n },\n _item: function (action) {\n return this.element.children()[action]();\n },\n items: function () {\n return this.element.children();\n },\n dataItem: function (element) {\n var attr = kendo.attr('uid');\n var uid = $(element).closest('[' + attr + ']').attr(attr);\n return this.dataSource.getByUid(uid);\n },\n setDataSource: function (dataSource) {\n this.options.dataSource = dataSource;\n this._dataSource();\n if (this.options.autoBind) {\n dataSource.fetch();\n }\n },\n _unbindDataSource: function () {\n var that = this;\n that.dataSource.unbind(CHANGE, that._refreshHandler).unbind(PROGRESS, that._progressHandler).unbind(ERROR, that._errorHandler);\n },\n _dataSource: function () {\n var that = this;\n if (that.dataSource && that._refreshHandler) {\n that._unbindDataSource();\n } else {\n that._refreshHandler = proxy(that.refresh, that);\n that._progressHandler = proxy(that._progress, that);\n that._errorHandler = proxy(that._error, that);\n }\n that.dataSource = DataSource.create(that.options.dataSource).bind(CHANGE, that._refreshHandler).bind(PROGRESS, that._progressHandler).bind(ERROR, that._errorHandler);\n },\n _progress: function () {\n progress(this.element, true);\n },\n _error: function () {\n progress(this.element, false);\n },\n _element: function () {\n this.element.addClass('k-widget k-listview').attr('role', 'listbox');\n },\n refresh: function (e) {\n var that = this, view = that.dataSource.view(), data, items, item, html = '', idx, length, template = that.template, altTemplate = that.altTemplate, active = activeElement();\n e = e || {};\n if (e.action === 'itemchange') {\n if (!that._hasBindingTarget() && !that.editable) {\n data = e.items[0];\n item = that.items().filter('[' + kendo.attr('uid') + '=' + data.uid + ']');\n if (item.length > 0) {\n idx = item.index();\n that.angular('cleanup', function () {\n return { elements: [item] };\n });\n item.replaceWith(template(data));\n item = that.items().eq(idx);\n item.attr(kendo.attr('uid'), data.uid);\n that.angular('compile', function () {\n return {\n elements: [item],\n data: [{ dataItem: data }]\n };\n });\n that.trigger('itemChange', {\n item: item,\n data: data\n });\n }\n }\n return;\n }\n if (that.trigger(DATABINDING, {\n action: e.action || 'rebind',\n items: e.items,\n index: e.index\n })) {\n return;\n }\n that._angularItems('cleanup');\n that._destroyEditable();\n for (idx = 0, length = view.length; idx < length; idx++) {\n if (idx % 2) {\n html += altTemplate(view[idx]);\n } else {\n html += template(view[idx]);\n }\n }\n that.element.html(html);\n items = that.items();\n for (idx = 0, length = view.length; idx < length; idx++) {\n items.eq(idx).attr(kendo.attr('uid'), view[idx].uid).attr('role', 'option').attr('aria-selected', 'false');\n }\n if (that.element[0] === active && that.options.navigatable) {\n that.current(items.eq(0));\n }\n that._angularItems('compile');\n that.trigger(DATABOUND);\n },\n _pageable: function () {\n var that = this, pageable = that.options.pageable, settings, pagerId;\n if ($.isPlainObject(pageable)) {\n pagerId = pageable.pagerId;\n settings = $.extend({}, pageable, {\n dataSource: that.dataSource,\n pagerId: null\n });\n that.pager = new kendo.ui.Pager($('#' + pagerId), settings);\n }\n },\n _selectable: function () {\n var that = this, multi, current, selectable = that.options.selectable, navigatable = that.options.navigatable;\n if (selectable) {\n multi = kendo.ui.Selectable.parseOptions(selectable).multiple;\n that.selectable = new kendo.ui.Selectable(that.element, {\n aria: true,\n multiple: multi,\n filter: FOCUSSELECTOR,\n change: function () {\n that.trigger(CHANGE);\n }\n });\n if (navigatable) {\n that.element.on('keydown' + NS, function (e) {\n if (e.keyCode === keys.SPACEBAR) {\n current = that.current();\n if (e.target == e.currentTarget) {\n e.preventDefault();\n }\n if (multi) {\n if (!e.ctrlKey) {\n that.selectable.clear();\n } else {\n if (current && current.hasClass(SELECTED)) {\n current.removeClass(SELECTED);\n return;\n }\n }\n } else {\n that.selectable.clear();\n }\n that.selectable.value(current);\n }\n });\n }\n }\n },\n current: function (candidate) {\n var that = this, element = that.element, current = that._current, id = that._itemId;\n if (candidate === undefined) {\n return current;\n }\n if (current && current[0]) {\n if (current[0].id === id) {\n current.removeAttr('id');\n }\n current.removeClass(FOCUSED);\n element.removeAttr('aria-activedescendant');\n }\n if (candidate && candidate[0]) {\n id = candidate[0].id || id;\n that._scrollTo(candidate[0]);\n element.attr('aria-activedescendant', id);\n candidate.addClass(FOCUSED).attr('id', id);\n }\n that._current = candidate;\n },\n _scrollTo: function (element) {\n var that = this, container, UseJQueryoffset = false, SCROLL = 'scroll';\n if (that.wrapper.css('overflow') == 'auto' || that.wrapper.css('overflow') == SCROLL) {\n container = that.wrapper[0];\n } else {\n container = window;\n UseJQueryoffset = true;\n }\n var scrollDirectionFunc = function (direction, dimension) {\n var elementOffset = UseJQueryoffset ? $(element).offset()[direction.toLowerCase()] : element['offset' + direction], elementDimension = element['client' + dimension], containerScrollAmount = $(container)[SCROLL + direction](), containerDimension = $(container)[dimension.toLowerCase()]();\n if (elementOffset + elementDimension > containerScrollAmount + containerDimension) {\n $(container)[SCROLL + direction](elementOffset + elementDimension - containerDimension);\n } else if (elementOffset < containerScrollAmount) {\n $(container)[SCROLL + direction](elementOffset);\n }\n };\n scrollDirectionFunc('Top', 'Height');\n scrollDirectionFunc('Left', 'Width');\n },\n _navigatable: function () {\n var that = this, navigatable = that.options.navigatable, element = that.element, clickCallback = function (e) {\n that.current($(e.currentTarget));\n if (!$(e.target).is(':button,a,:input,a>.k-icon,textarea')) {\n element.focus();\n }\n };\n if (navigatable) {\n that._tabindex();\n element.on('focus' + NS, function () {\n var current = that._current;\n if (!current || !current.is(':visible')) {\n current = that._item('first');\n }\n that.current(current);\n }).on('focusout' + NS, function () {\n if (that._current) {\n that._current.removeClass(FOCUSED);\n }\n }).on('keydown' + NS, function (e) {\n var key = e.keyCode, current = that.current(), target = $(e.target), canHandle = !target.is(':button,textarea,a,a>.t-icon,input'), isTextBox = target.is(':text,:password'), preventDefault = kendo.preventDefault, editItem = element.find('.' + KEDITITEM), active = activeElement(), idx;\n if (!canHandle && !isTextBox && keys.ESC != key || isTextBox && keys.ESC != key && keys.ENTER != key) {\n return;\n }\n if (keys.UP === key || keys.LEFT === key) {\n if (current) {\n current = current.prev();\n }\n that.current(!current || !current[0] ? that._item('last') : current);\n preventDefault(e);\n } else if (keys.DOWN === key || keys.RIGHT === key) {\n if (current) {\n current = current.next();\n }\n that.current(!current || !current[0] ? that._item('first') : current);\n preventDefault(e);\n } else if (keys.PAGEUP === key) {\n that.current(null);\n that.dataSource.page(that.dataSource.page() - 1);\n preventDefault(e);\n } else if (keys.PAGEDOWN === key) {\n that.current(null);\n that.dataSource.page(that.dataSource.page() + 1);\n preventDefault(e);\n } else if (keys.HOME === key) {\n that.current(that._item('first'));\n preventDefault(e);\n } else if (keys.END === key) {\n that.current(that._item('last'));\n preventDefault(e);\n } else if (keys.ENTER === key) {\n if (editItem.length !== 0 && (canHandle || isTextBox)) {\n idx = that.items().index(editItem);\n if (active) {\n active.blur();\n }\n that.save();\n var focusAgain = function () {\n that.element.trigger('focus');\n that.current(that.items().eq(idx));\n };\n that.one('dataBound', focusAgain);\n } else if (that.options.editTemplate !== '') {\n that.edit(current);\n }\n } else if (keys.ESC === key) {\n editItem = element.find('.' + KEDITITEM);\n if (editItem.length === 0) {\n return;\n }\n idx = that.items().index(editItem);\n that.cancel();\n that.element.trigger('focus');\n that.current(that.items().eq(idx));\n }\n });\n element.on('mousedown' + NS + ' touchstart' + NS, FOCUSSELECTOR, proxy(clickCallback, that));\n }\n },\n clearSelection: function () {\n var that = this;\n that.selectable.clear();\n that.trigger(CHANGE);\n },\n select: function (items) {\n var that = this, selectable = that.selectable;\n items = $(items);\n if (items.length) {\n if (!selectable.options.multiple) {\n selectable.clear();\n items = items.first();\n }\n selectable.value(items);\n return;\n }\n return selectable.value();\n },\n _destroyEditable: function () {\n var that = this;\n if (that.editable) {\n that.editable.destroy();\n delete that.editable;\n }\n },\n _modelFromElement: function (element) {\n var uid = element.attr(kendo.attr('uid'));\n return this.dataSource.getByUid(uid);\n },\n _closeEditable: function () {\n var that = this, editable = that.editable, data, item, index, template = that.template;\n if (editable) {\n if (editable.element.index() % 2) {\n template = that.altTemplate;\n }\n that.angular('cleanup', function () {\n return { elements: [editable.element] };\n });\n data = that._modelFromElement(editable.element);\n that._destroyEditable();\n index = editable.element.index();\n editable.element.replaceWith(template(data));\n item = that.items().eq(index);\n item.attr(kendo.attr('uid'), data.uid);\n if (that._hasBindingTarget()) {\n kendo.bind(item, data);\n }\n that.angular('compile', function () {\n return {\n elements: [item],\n data: [{ dataItem: data }]\n };\n });\n }\n return true;\n },\n edit: function (item) {\n var that = this, data = that._modelFromElement(item), container, uid = data.uid, index;\n that.cancel();\n item = that.items().filter('[' + kendo.attr('uid') + '=' + uid + ']');\n index = item.index();\n item.replaceWith(that.editTemplate(data));\n container = that.items().eq(index).addClass(KEDITITEM).attr(kendo.attr('uid'), data.uid);\n that.editable = container.kendoEditable({\n model: data,\n clearContainer: false,\n errorTemplate: false,\n target: that\n }).data('kendoEditable');\n that.trigger(EDIT, {\n model: data,\n item: container\n });\n },\n save: function () {\n var that = this, editable = that.editable, model;\n if (!editable) {\n return;\n }\n var container = editable.element;\n model = that._modelFromElement(container);\n if (editable.end() && !that.trigger(SAVE, {\n model: model,\n item: container\n })) {\n that._closeEditable();\n that.dataSource.sync();\n }\n },\n remove: function (item) {\n var that = this, dataSource = that.dataSource, data = that._modelFromElement(item);\n if (that.editable) {\n dataSource.cancelChanges(that._modelFromElement(that.editable.element));\n that._closeEditable();\n }\n if (!that.trigger(REMOVE, {\n model: data,\n item: item\n })) {\n item.hide();\n dataSource.remove(data);\n dataSource.sync();\n }\n },\n add: function () {\n var that = this, dataItem, dataSource = that.dataSource, index = dataSource.indexOf((dataSource.view() || [])[0]);\n if (index < 0) {\n index = 0;\n }\n that.cancel();\n dataItem = dataSource.insert(index, {});\n that.edit(that.element.find('[data-uid=\\'' + dataItem.uid + '\\']'));\n },\n cancel: function () {\n var that = this, dataSource = that.dataSource;\n if (that.editable) {\n var container = that.editable.element;\n var model = that._modelFromElement(container);\n if (!that.trigger(CANCEL, {\n model: model,\n container: container\n })) {\n dataSource.cancelChanges(model);\n that._closeEditable();\n }\n }\n },\n _crudHandlers: function () {\n var that = this, clickNS = CLICK + NS;\n that.element.on(clickNS, '.k-edit-button', function (e) {\n var item = $(this).closest('[' + kendo.attr('uid') + ']');\n that.edit(item);\n e.preventDefault();\n });\n that.element.on(clickNS, '.k-delete-button', function (e) {\n var item = $(this).closest('[' + kendo.attr('uid') + ']');\n that.remove(item);\n e.preventDefault();\n });\n that.element.on(clickNS, '.k-update-button', function (e) {\n that.save();\n e.preventDefault();\n });\n that.element.on(clickNS, '.k-cancel-button', function (e) {\n that.cancel();\n e.preventDefault();\n });\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that._unbindDataSource();\n that._destroyEditable();\n that.element.off(NS);\n if (that.pager) {\n that.pager.destroy();\n }\n kendo.destroy(that.element);\n }\n });\n kendo.ui.plugin(ListView);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.upload', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'upload',\n name: 'Upload',\n category: 'web',\n description: 'The Upload widget uses progressive enhancement to deliver the best possible uploading experience to users.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, antiForgeryTokens = kendo.antiForgeryTokens, logToConsole = kendo.logToConsole, rFileExtension = /\\.([^\\.]+)$/, NS = '.kendoUpload', SELECT = 'select', UPLOAD = 'upload', SUCCESS = 'success', ERROR = 'error', COMPLETE = 'complete', CANCEL = 'cancel', CLEAR = 'clear', PROGRESS = 'progress', REMOVE = 'remove', VALIDATIONERRORS = 'validationErrors', INVALIDMAXFILESIZE = 'invalidMaxFileSize', INVALIDMINFILESIZE = 'invalidMinFileSize', INVALIDFILEEXTENSION = 'invalidFileExtension', PROGRESSHIDEDELAY = 1000, PROGRESSHIDEDURATION = 2000;\n var headerStatusIcon = {\n loading: 'k-i-loading',\n warning: 'k-i-warning',\n success: 'k-i-check'\n };\n var Upload = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.name = element.name;\n that.multiple = that.options.multiple;\n that.localization = that.options.localization;\n var activeInput = that.element;\n that.wrapper = activeInput.closest('.k-upload');\n if (that.wrapper.length === 0) {\n that.wrapper = that._wrapInput(activeInput);\n }\n that._activeInput(activeInput);\n that.toggle(that.options.enabled);\n var ns = that._ns = NS + '-' + kendo.guid();\n activeInput.closest('form').on('submit' + ns, $.proxy(that._onParentFormSubmit, that)).on('reset' + ns, $.proxy(that._onParentFormReset, that));\n if (that.options.async.saveUrl) {\n that._module = that._supportsFormData() ? new formDataUploadModule(that) : new iframeUploadModule(that);\n that._async = true;\n var initialFiles = that.options.files;\n if (initialFiles.length > 0) {\n that._renderInitialFiles(initialFiles);\n }\n } else {\n that._module = new syncUploadModule(that);\n }\n if (that._supportsDrop()) {\n if (that.options.dropZone !== '') {\n that._setupCustomDropZone();\n } else {\n that._setupDropZone();\n }\n }\n that.wrapper.on('click', '.k-upload-action', $.proxy(that._onFileAction, that)).on('click', '.k-clear-selected', $.proxy(that._onClearSelected, that)).on('click', '.k-upload-selected', $.proxy(that._onUploadSelected, that));\n if (that.element.val()) {\n that._onInputChange({ target: that.element });\n }\n },\n events: [\n SELECT,\n UPLOAD,\n SUCCESS,\n ERROR,\n COMPLETE,\n CANCEL,\n CLEAR,\n PROGRESS,\n REMOVE\n ],\n options: {\n name: 'Upload',\n enabled: true,\n multiple: true,\n showFileList: true,\n template: '',\n files: [],\n async: {\n removeVerb: 'POST',\n autoUpload: true,\n withCredentials: true,\n accept: '*/*; q=0.5, application/json'\n },\n localization: {\n 'select': 'Select files...',\n 'cancel': 'Cancel',\n 'retry': 'Retry',\n 'remove': 'Remove',\n 'clearSelectedFiles': 'Clear',\n 'uploadSelectedFiles': 'Upload',\n 'dropFilesHere': 'drop files here to upload',\n 'statusUploading': 'uploading',\n 'statusUploaded': 'uploaded',\n 'statusWarning': 'warning',\n 'statusFailed': 'failed',\n 'headerStatusUploading': 'Uploading...',\n 'headerStatusUploaded': 'Done',\n 'invalidMaxFileSize': 'File size too large.',\n 'invalidMinFileSize': 'File size too small.',\n 'invalidFileExtension': 'File type not allowed.'\n },\n validation: {\n allowedExtensions: [],\n maxFileSize: 0,\n minFileSize: 0\n },\n dropZone: ''\n },\n setOptions: function (options) {\n var that = this, activeInput = that.element;\n Widget.fn.setOptions.call(that, options);\n that.multiple = that.options.multiple;\n activeInput.attr('multiple', that._supportsMultiple() ? that.multiple : false);\n that.toggle(that.options.enabled);\n },\n enable: function (enable) {\n enable = typeof enable === 'undefined' ? true : enable;\n this.toggle(enable);\n },\n disable: function () {\n this.toggle(false);\n },\n toggle: function (enable) {\n enable = typeof enable === 'undefined' ? enable : !enable;\n this.wrapper.toggleClass('k-state-disabled', enable);\n this.element.prop('disabled', enable);\n },\n focus: function () {\n this.element.focus();\n },\n destroy: function () {\n var that = this;\n var customDropZone = $(that.options.dropZone);\n $(document).add($('.k-dropzone', that.wrapper)).add(that.wrapper.closest('form')).off(that._ns);\n if (customDropZone.length > 0) {\n customDropZone.off(that._ns);\n }\n $(that.element).off(NS);\n Widget.fn.destroy.call(that);\n },\n upload: function () {\n var that = this;\n that._module.onSaveSelected();\n },\n getFiles: function () {\n var that = this;\n var filesData;\n var allFiles = [];\n var listItems = that.wrapper.find('.k-file');\n for (var i = 0; i < listItems.length; i++) {\n filesData = $(listItems[i]).data('fileNames');\n if (filesData) {\n for (var j = 0; j < filesData.length; j++) {\n allFiles.push(filesData[j]);\n }\n }\n }\n return allFiles;\n },\n clearAllFiles: function () {\n var that = this;\n var files = that.wrapper.find('.k-file');\n files.each(function (index, file) {\n that._removeFileByDomElement(file, false);\n });\n },\n removeAllFiles: function () {\n var that = this;\n var files = that.wrapper.find('.k-file');\n files.each(function (index, file) {\n that._removeFileByDomElement(file, true);\n });\n },\n removeFileByUid: function (uid) {\n this._removeFileByUid(uid, true);\n },\n clearFileByUid: function (uid) {\n this._removeFileByUid(uid, false);\n },\n _removeFileByUid: function (uid, shouldSendRemoveRequest) {\n var that = this;\n var fileEntry;\n if (typeof uid !== 'string') {\n return;\n }\n fileEntry = $('.k-file[' + kendo.attr('uid') + '=\"' + uid + '\"]', that.wrapper);\n if (fileEntry.length > 0) {\n that._removeFileByDomElement(fileEntry, shouldSendRemoveRequest);\n }\n },\n clearFile: function (callback) {\n this._removeFile(callback, false);\n },\n removeFile: function (callback) {\n this._removeFile(callback, true);\n },\n _removeFile: function (callback, shouldSendRemoveRequest) {\n var that = this;\n var files = that.wrapper.find('.k-file');\n var fileData;\n if (typeof callback === 'function') {\n files.each(function (index, file) {\n fileData = $(file).data('fileNames');\n if (callback(fileData)) {\n that._removeFileByDomElement(file, shouldSendRemoveRequest);\n }\n });\n }\n },\n _removeFileByDomElement: function (fileEntry, shouldSendRemoveRequest) {\n var that = this;\n var fileData = { target: $(fileEntry, that.wrapper) };\n var allFiles;\n if (that.options.async.saveUrl) {\n if ($(fileEntry).hasClass('k-file-progress')) {\n that._module.onCancel(fileData);\n } else {\n that._module.onRemove(fileData, {}, shouldSendRemoveRequest);\n }\n allFiles = $('.k-file', that.wrapper);\n if (allFiles.length === 0) {\n that._hideHeaderUploadstatus();\n } else {\n that._updateHeaderUploadStatus();\n }\n } else {\n that._module.onRemove(fileData, {}, shouldSendRemoveRequest);\n }\n },\n _addInput: function (sourceInput) {\n if (!sourceInput[0].nodeType) {\n return;\n }\n var that = this, input = sourceInput.clone().val('');\n input.insertAfter(that.element).data('kendoUpload', that);\n $(that.element).hide().attr('tabindex', '-1').removeAttr('id').off(NS);\n that._activeInput(input);\n that.element.focus();\n },\n _activeInput: function (input) {\n var that = this, wrapper = that.wrapper;\n that.element = input;\n input.attr('multiple', that._supportsMultiple() ? that.multiple : false).attr('autocomplete', 'off').on('click' + NS, function (e) {\n if (wrapper.hasClass('k-state-disabled')) {\n e.preventDefault();\n }\n }).on('focus' + NS, function () {\n $(this).parent().addClass('k-state-focused');\n }).on('blur' + NS, function () {\n $(this).parent().removeClass('k-state-focused');\n }).on('change' + NS, $.proxy(that._onInputChange, that)).on('keydown' + NS, $.proxy(that._onInputKeyDown, that));\n },\n _onInputKeyDown: function (e) {\n var that = this;\n var firstButton = that.wrapper.find('.k-upload-action:visible:first');\n if (e.keyCode === kendo.keys.TAB && firstButton.length > 0) {\n e.preventDefault();\n firstButton.focus();\n }\n },\n _onInputChange: function (e) {\n var that = this;\n var input = $(e.target);\n var files = assignGuidToFiles(that._inputFiles(input), that._isAsyncNonBatch());\n validateFiles(files, that.options.validation);\n var prevented = that.trigger(SELECT, { files: files });\n if (prevented) {\n that._addInput(input);\n input.remove();\n } else {\n that._module.onSelect({ target: input }, files);\n }\n },\n _onDrop: function (e) {\n var dt = e.originalEvent.dataTransfer;\n var that = this;\n var droppedFiles = dt.files;\n var files = assignGuidToFiles(getAllFileInfo(droppedFiles), that._isAsyncNonBatch());\n stopEvent(e);\n if (droppedFiles.length > 0 && !that.wrapper.hasClass('k-state-disabled')) {\n if (!that.multiple && files.length > 1) {\n files.splice(1, files.length - 1);\n }\n validateFiles(files, that.options.validation);\n var prevented = that.trigger(SELECT, { files: files });\n if (!prevented) {\n that._module.onSelect({ target: $('.k-dropzone', that.wrapper) }, files);\n }\n }\n },\n _filesContainValidationErrors: function (files) {\n var hasErrors = false;\n $(files).each(function (index, file) {\n if (file[VALIDATIONERRORS] && file[VALIDATIONERRORS].length > 0) {\n hasErrors = true;\n return false;\n }\n });\n return hasErrors;\n },\n _isAsyncNonBatch: function () {\n return this._async && !this.options.async.batch || false;\n },\n _renderInitialFiles: function (files) {\n var that = this;\n var idx = 0;\n files = assignGuidToFiles(files, true);\n for (idx = 0; idx < files.length; idx++) {\n var currentFile = files[idx];\n var fileEntry = that._enqueueFile(currentFile.name, { fileNames: [currentFile] });\n fileEntry.addClass('k-file-success').data('files', [files[idx]]);\n if (!that.options.template) {\n $('.k-upload-status', fileEntry).prepend('<span class=\\'k-upload-pct\\'>100%</span>');\n }\n if (that._supportsRemove()) {\n that._fileAction(fileEntry, REMOVE);\n }\n }\n },\n _prepareTemplateData: function (name, data) {\n var filesData = data.fileNames, templateData = {}, totalSize = 0, idx = 0;\n for (idx = 0; idx < filesData.length; idx++) {\n totalSize += filesData[idx].size;\n }\n templateData.name = name;\n templateData.size = totalSize;\n templateData.files = data.fileNames;\n return templateData;\n },\n _prepareDefaultSingleFileEntryTemplate: function (data) {\n var that = this;\n var file = data.fileNames[0];\n var fileSize = getTotalFilesSizeMessage(data.fileNames);\n var errors = file[VALIDATIONERRORS];\n var template = '';\n if (errors && errors.length > 0) {\n template += '<li class=\\'k-file k-file-invalid\\'><span class=\\'k-progress\\'></span>' + '<span class=\\'k-file-invalid-extension-wrapper\\'>' + '<span class=\\'k-file-invalid-icon\\'>!</span>' + '<span class=\\'k-file-state\\'></span>' + '</span>' + '<span class=\\'k-file-name-size-wrapper\\'>' + '<span class=\\'k-file-name k-file-name-invalid\\' title=\\'' + file.name + '\\'>' + file.name + '</span>' + '<span class=\\'k-file-validation-message\\'>' + that.localization[errors[0]] + '</span>' + '</span>';\n } else {\n template += '<li class=\\'k-file\\'><span class=\\'k-progress\\'></span>' + '<span class=\\'k-file-extension-wrapper\\'>' + '<span class=\\'k-file-extension\\'>' + file.extension.substring(1) + '</span>' + '<span class=\\'k-file-state\\'></span>' + '</span>' + '<span class=\\'k-file-name-size-wrapper\\'><span class=\\'k-file-name\\' title=\\'' + file.name + '\\'>' + file.name + '</span>' + '<span class=\\'k-file-size\\'>' + fileSize + '</span></span>';\n }\n template += '<strong class=\\'k-upload-status\\'></strong>';\n return $(template);\n },\n _prepareDefaultMultipleFileEntriesTemplate: function (data) {\n var that = this;\n var files = data.fileNames;\n var filesHaveValidationErrors = that._filesContainValidationErrors(files);\n var totalFileSize = getTotalFilesSizeMessage(files);\n var template = '';\n var i, currentFile;\n if (filesHaveValidationErrors) {\n template += '<li class=\\'k-file k-file-invalid\\'><span class=\\'k-progress\\'></span>' + '<span class=\\'k-multiple-files-invalid-extension-wrapper\\'>' + '<span class=\\'k-file-invalid-icon\\'>!</span>';\n } else {\n template += '<li class=\\'k-file\\'><span class=\\'k-progress\\'></span>' + '<span class=\\'k-multiple-files-extension-wrapper\\'>';\n }\n template += '<span class=\\'k-file-state\\'></span></span>';\n files.sort(function (a, b) {\n if (a[VALIDATIONERRORS]) {\n return -1;\n }\n if (b[VALIDATIONERRORS]) {\n return 1;\n }\n return 0;\n });\n template += '<span class=\\'k-file-name-size-wrapper\\'>';\n for (i = 0; i < files.length; i++) {\n currentFile = files[i];\n if (currentFile[VALIDATIONERRORS] && currentFile[VALIDATIONERRORS].length > 0) {\n template += '<span class=\\'k-file-name k-file-name-invalid\\' title=\\'' + currentFile.name + '\\'>' + currentFile.name + '</span>';\n } else {\n template += '<span class=\\'k-file-name\\' title=\\'' + currentFile.name + '\\'>' + currentFile.name + '</span>';\n }\n }\n if (filesHaveValidationErrors) {\n template += '<span class=\\'k-file-validation-message\\'>Invalid file(s). Please check file upload requirements.</span>';\n } else {\n template += '<span class=\\'k-file-information\\'>Total: ' + files.length + ' files, ' + totalFileSize + '</span>';\n }\n template += '</span><strong class=\\'k-upload-status\\'></strong>';\n return $(template);\n },\n _enqueueFile: function (name, data) {\n var that = this;\n var existingFileEntries;\n var fileEntry;\n var fileUid = data.fileNames[0].uid;\n var fileList = $('.k-upload-files', that.wrapper);\n var options = that.options;\n var template = options.template;\n var templateData;\n var removeEventArgs;\n if (fileList.length === 0) {\n fileList = $('<ul class=\\'k-upload-files k-reset\\'></ul>').appendTo(that.wrapper);\n if (!that.options.showFileList) {\n fileList.hide();\n }\n that.wrapper.removeClass('k-upload-empty');\n }\n existingFileEntries = $('.k-file', fileList);\n if (!template) {\n if (data.fileNames.length === 1) {\n fileEntry = that._prepareDefaultSingleFileEntryTemplate(data);\n } else {\n fileEntry = that._prepareDefaultMultipleFileEntriesTemplate(data);\n }\n } else {\n templateData = that._prepareTemplateData(name, data);\n template = kendo.template(template);\n fileEntry = $('<li class=\\'k-file\\'>' + template(templateData) + '</li>');\n fileEntry.find('.k-upload-action').addClass('k-button');\n that.angular('compile', function () {\n return {\n elements: fileEntry,\n data: [templateData]\n };\n });\n }\n fileEntry.attr(kendo.attr('uid'), fileUid).appendTo(fileList).data(data);\n if (!that._async) {\n $('.k-progress', fileEntry).width('100%');\n }\n if (!that.multiple && existingFileEntries.length > 0) {\n removeEventArgs = {\n files: existingFileEntries.data('fileNames'),\n headers: {}\n };\n if (!that.trigger(REMOVE, removeEventArgs)) {\n that._module.onRemove({ target: $(existingFileEntries, that.wrapper) }, removeEventArgs);\n }\n }\n return fileEntry;\n },\n _removeFileEntry: function (fileEntry) {\n var that = this;\n var fileList = fileEntry.closest('.k-upload-files');\n var allFiles, allCompletedFiles, allInvalidFiles;\n fileEntry.remove();\n allFiles = $('.k-file', fileList);\n allCompletedFiles = $('.k-file-success, .k-file-error', fileList);\n allInvalidFiles = $('.k-file-invalid', fileList);\n if (allCompletedFiles.length === allFiles.length || allInvalidFiles.length === allFiles.length) {\n this._hideUploadButton();\n }\n if (allFiles.length === 0) {\n fileList.remove();\n that.wrapper.addClass('k-upload-empty');\n that._hideHeaderUploadstatus();\n } else {\n that._updateHeaderUploadStatus();\n }\n },\n _fileAction: function (fileElement, actionKey) {\n var classDictionary = {\n remove: 'k-i-x',\n cancel: 'k-i-cancel',\n retry: 'k-i-retry'\n };\n var iconsClassDictionary = {\n remove: 'k-i-close',\n cancel: 'k-i-close',\n retry: 'k-i-reload'\n };\n if (!classDictionary.hasOwnProperty(actionKey)) {\n return;\n }\n this._clearFileAction(fileElement);\n if (!this.options.template) {\n fileElement.find('.k-upload-status .k-upload-action').remove();\n fileElement.find('.k-upload-status').append(this._renderAction(classDictionary[actionKey], this.localization[actionKey], iconsClassDictionary[actionKey]));\n } else {\n fileElement.find('.k-upload-action').addClass('k-button').append('<span class=\\'k-icon ' + iconsClassDictionary[actionKey] + ' ' + classDictionary[actionKey] + '\\' title=\\'' + this.localization[actionKey] + '\\'' + 'aria-label=\\'' + this.localization[actionKey] + '\\'></span>').show();\n }\n },\n _fileState: function (fileEntry, stateKey) {\n var localization = this.localization, states = {\n uploading: { text: localization.statusUploading },\n uploaded: { text: localization.statusUploaded },\n failed: { text: localization.statusFailed }\n }, currentState = states[stateKey];\n if (currentState) {\n $('span.k-file-state', fileEntry).text(currentState.text);\n }\n },\n _renderAction: function (actionClass, actionText, iconClass) {\n if (actionClass !== '') {\n return $('<button type=\\'button\\' class=\\'k-button k-upload-action\\'>' + '<span class=\\'k-icon ' + iconClass + ' ' + actionClass + '\\' title=\\'' + actionText + '\\' aria-label=\\'' + actionText + '\\'></span>' + '</button>').on('focus', function () {\n $(this).addClass('k-state-focused');\n }).on('blur', function () {\n $(this).removeClass('k-state-focused');\n });\n } else {\n return $('<button type=\\'button\\' class=\\'k-button\\'>' + actionText + '</button>');\n }\n },\n _clearFileAction: function (fileElement) {\n $('.k-upload-action', fileElement).empty().hide();\n },\n _onFileAction: function (e) {\n var that = this;\n if (!that.wrapper.hasClass('k-state-disabled')) {\n var button = $(e.target).closest('.k-upload-action');\n var icon = button.find('.k-icon');\n var fileEntry = button.closest('.k-file');\n var files = fileEntry.data('fileNames');\n var hasValidationErrors = that._filesContainValidationErrors(files);\n var eventArgs = {\n files: files,\n headers: {}\n };\n if (icon.hasClass('k-i-x')) {\n if (!that.trigger(REMOVE, eventArgs)) {\n that._module.onRemove({ target: $(fileEntry, that.wrapper) }, eventArgs, !hasValidationErrors);\n }\n } else if (icon.hasClass('k-i-cancel')) {\n that.trigger(CANCEL, eventArgs);\n that._module.onCancel({ target: $(fileEntry, that.wrapper) });\n that._checkAllComplete();\n that._updateHeaderUploadStatus();\n } else if (icon.hasClass('k-i-retry')) {\n $('.k-i-warning', fileEntry).remove();\n $('.k-progress', fileEntry).finish().show();\n that._module.onRetry({ target: $(fileEntry, that.wrapper) });\n }\n }\n return false;\n },\n _onUploadSelected: function () {\n var that = this;\n var wrapper = that.wrapper;\n if (!wrapper.hasClass('k-state-disabled')) {\n this._module.onSaveSelected();\n }\n return false;\n },\n _onClearSelected: function () {\n var that = this;\n var wrapper = that.wrapper;\n var clearEventArgs = {};\n if (!wrapper.hasClass('k-state-disabled') && !that.trigger(CLEAR, clearEventArgs)) {\n that.clearAllFiles();\n }\n return false;\n },\n _onFileProgress: function (e, percentComplete) {\n var progressPct;\n if (percentComplete > 100) {\n percentComplete = 100;\n }\n if (!this.options.template) {\n progressPct = $('.k-upload-pct', e.target);\n if (progressPct.length === 0) {\n $('.k-upload-status', e.target).prepend('<span class=\\'k-upload-pct\\'></span>');\n }\n $('.k-upload-pct', e.target).text(percentComplete + '%');\n $('.k-progress', e.target).width(percentComplete + '%');\n } else {\n $('.k-progress', e.target).width(percentComplete + '%');\n }\n this.trigger(PROGRESS, {\n files: getFileEntry(e).data('fileNames'),\n percentComplete: percentComplete\n });\n },\n _onUploadSuccess: function (e, response, xhr) {\n var that = this;\n var fileEntry = getFileEntry(e);\n var prevented = that.trigger(SUCCESS, {\n files: fileEntry.data('fileNames'),\n response: response,\n operation: 'upload',\n XMLHttpRequest: xhr\n });\n if (prevented) {\n that._setUploadErrorState(fileEntry);\n } else {\n that._fileState(fileEntry, 'uploaded');\n fileEntry.removeClass('k-file-progress').addClass('k-file-success');\n that._updateHeaderUploadStatus();\n if (that._supportsRemove()) {\n that._fileAction(fileEntry, REMOVE);\n } else {\n that._clearFileAction(fileEntry);\n }\n }\n that._hideUploadProgress(fileEntry);\n that._checkAllComplete();\n },\n _onUploadError: function (e, xhr) {\n var that = this;\n var fileEntry = getFileEntry(e);\n that._setUploadErrorState(fileEntry);\n that.trigger(ERROR, {\n operation: 'upload',\n files: fileEntry.data('fileNames'),\n XMLHttpRequest: xhr\n });\n logToConsole('Server response: ' + xhr.responseText);\n that._hideUploadProgress(fileEntry);\n that._checkAllComplete();\n },\n _setUploadErrorState: function (fileEntry) {\n var that = this;\n var uploadPercentage = $('.k-upload-pct', fileEntry);\n that._fileState(fileEntry, 'failed');\n fileEntry.removeClass('k-file-progress').addClass('k-file-error');\n $('.k-progress', fileEntry).width('100%');\n if (uploadPercentage.length > 0) {\n uploadPercentage.empty().removeClass('k-upload-pct').addClass('k-icon k-i-warning');\n } else {\n $('.k-upload-status', fileEntry).prepend('<span class=\\'k-icon k-i-warning\\'></span>');\n }\n this._updateHeaderUploadStatus();\n this._fileAction(fileEntry, 'retry');\n },\n _hideUploadProgress: function (fileEntry) {\n $('.k-progress', fileEntry).delay(PROGRESSHIDEDELAY).fadeOut(PROGRESSHIDEDURATION, function () {\n $(this).css('width', '0%');\n });\n },\n _showUploadButton: function () {\n var that = this;\n var uploadButton = $('.k-upload-selected', that.wrapper);\n var clearButton = $('.k-clear-selected', that.wrapper);\n if (uploadButton.length === 0) {\n uploadButton = that._renderAction('', this.localization.uploadSelectedFiles).addClass('k-upload-selected');\n clearButton = that._renderAction('', this.localization.clearSelectedFiles).addClass('k-clear-selected');\n }\n this.wrapper.append(clearButton, uploadButton);\n },\n _hideUploadButton: function () {\n $('.k-upload-selected, .k-clear-selected', this.wrapper).remove();\n },\n _showHeaderUploadStatus: function (isUploading) {\n var that = this;\n var localization = that.localization;\n var dropZone = $('.k-dropzone', that.wrapper);\n var headerUploadStatus = $('.k-upload-status-total', that.wrapper);\n if (headerUploadStatus.length !== 0) {\n headerUploadStatus.remove();\n }\n headerUploadStatus = '<strong class=\"k-upload-status k-upload-status-total\"><span class=\"k-icon\"></span></strong>';\n if (isUploading) {\n headerUploadStatus = $(headerUploadStatus).append(localization.headerStatusUploading);\n headerUploadStatus.find('.k-icon').addClass(headerStatusIcon.loading);\n } else {\n headerUploadStatus = $(headerUploadStatus).append(localization.headerStatusUploaded);\n headerUploadStatus.find('.k-icon').addClass(headerStatusIcon.warning);\n }\n if (dropZone.length > 0) {\n dropZone.append(headerUploadStatus);\n } else {\n $('.k-upload-button', that.wrapper).after(headerUploadStatus);\n }\n },\n _updateHeaderUploadStatus: function () {\n var that = this;\n var headerUploadStatus = $('.k-upload-status-total', this.wrapper);\n var currentlyUploading = $('.k-file', that.wrapper).not('.k-file-success, .k-file-error, .k-file-invalid');\n var currentlyInvalid = $('.k-file-invalid', that.wrapper);\n var failedUploads, headerUploadStatusIcon;\n if (currentlyUploading.length === 0 || currentlyInvalid.length > 0) {\n failedUploads = $('.k-file.k-file-error, .k-file.k-file-invalid', that.wrapper);\n headerUploadStatus = $('.k-upload-status-total', that.wrapper);\n headerUploadStatusIcon = $('.k-icon', headerUploadStatus).removeClass().addClass('k-icon').addClass(failedUploads.length !== 0 ? headerStatusIcon.warning : headerStatusIcon.success);\n headerUploadStatus.html(headerUploadStatusIcon).append(that.localization.headerStatusUploaded);\n }\n },\n _hideHeaderUploadstatus: function () {\n $('.k-upload-status-total', this.wrapper).remove();\n },\n _onParentFormSubmit: function () {\n var upload = this, element = upload.element;\n if (typeof this._module.onAbort !== 'undefined') {\n this._module.onAbort();\n }\n if (!element.value) {\n var input = $(element);\n input.attr('disabled', 'disabled');\n window.setTimeout(function () {\n input.removeAttr('disabled');\n }, 0);\n }\n },\n _onParentFormReset: function () {\n $('.k-upload-files', this.wrapper).remove();\n },\n _supportsFormData: function () {\n return typeof FormData != 'undefined';\n },\n _supportsMultiple: function () {\n var windows = this._userAgent().indexOf('Windows') > -1;\n return !kendo.support.browser.opera && !(kendo.support.browser.safari && windows);\n },\n _supportsDrop: function () {\n var userAgent = this._userAgent().toLowerCase();\n var isChrome = /chrome/.test(userAgent);\n var isSafari = !isChrome && /safari/.test(userAgent);\n var isWindowsSafari = isSafari && /windows/.test(userAgent);\n return !isWindowsSafari && this._supportsFormData() && this.options.async.saveUrl;\n },\n _userAgent: function () {\n return navigator.userAgent;\n },\n _setupDropZone: function () {\n var that = this;\n $('.k-upload-button', that.wrapper).wrap('<div class=\\'k-dropzone\\'></div>');\n var ns = that._ns;\n var dropZone = $('.k-dropzone', that.wrapper).append($('<em>' + that.localization.dropFilesHere + '</em>')).on('dragenter' + ns, stopEvent).on('dragover' + ns, function (e) {\n e.preventDefault();\n }).on('drop' + ns, $.proxy(that._onDrop, that));\n bindDragEventWrappers(dropZone, ns, function () {\n if (!dropZone.closest('.k-upload').hasClass('k-state-disabled')) {\n dropZone.addClass('k-dropzone-hovered');\n }\n }, function () {\n dropZone.removeClass('k-dropzone-hovered');\n });\n that._bindDocumentDragEventWrappers(dropZone);\n },\n _setupCustomDropZone: function () {\n var that = this;\n var dropZone = $(that.options.dropZone);\n $('.k-upload-button', that.wrapper).wrap('<div class=\\'k-dropzone\\'></div>');\n var ns = that._ns;\n dropZone.on('dragenter' + ns, stopEvent).on('dragover' + ns, function (e) {\n e.preventDefault();\n }).on('drop' + ns, $.proxy(that._onDrop, that));\n bindDragEventWrappers(dropZone, ns, function (e) {\n if (!that.wrapper.hasClass('k-state-disabled')) {\n dropZone.removeClass('k-dropzone-hovered');\n $(e.target).addClass('k-dropzone-hovered');\n }\n }, function () {\n dropZone.removeClass('k-dropzone-hovered');\n });\n that._bindDocumentDragEventWrappers(dropZone);\n },\n _bindDocumentDragEventWrappers: function (dropZone) {\n var that = this;\n var ns = that._ns;\n bindDragEventWrappers($(document), ns, function () {\n if (!that.wrapper.hasClass('k-state-disabled')) {\n dropZone.addClass('k-dropzone-active');\n dropZone.closest('.k-upload').removeClass('k-upload-empty');\n }\n }, function () {\n dropZone.removeClass('k-dropzone-active');\n if ($('li.k-file', dropZone.closest('.k-upload')).length === 0) {\n dropZone.closest('.k-upload').addClass('k-upload-empty');\n }\n });\n },\n _supportsRemove: function () {\n return !!this.options.async.removeUrl;\n },\n _submitRemove: function (fileNames, eventArgs, onSuccess, onError) {\n var upload = this, removeField = upload.options.async.removeField || 'fileNames', params = $.extend(eventArgs.data, antiForgeryTokens());\n params[removeField] = fileNames;\n jQuery.ajax({\n type: this.options.async.removeVerb,\n dataType: 'json',\n dataFilter: normalizeJSON,\n url: this.options.async.removeUrl,\n traditional: true,\n data: params,\n headers: eventArgs.headers,\n success: onSuccess,\n error: onError,\n xhrFields: { withCredentials: this.options.async.withCredentials }\n });\n },\n _wrapInput: function (input) {\n var that = this;\n var options = that.options;\n input.wrap('<div class=\\'k-widget k-upload k-header\\'><div class=\\'k-button k-upload-button\\' aria-label=\\'' + this.localization.select + '\\'></div></div>');\n if (!options.async.saveUrl) {\n input.closest('.k-upload').addClass('k-upload-sync');\n }\n input.closest('.k-upload').addClass('k-upload-empty');\n input.closest('.k-button').append('<span>' + this.localization.select + '</span>');\n return input.closest('.k-upload');\n },\n _checkAllComplete: function () {\n if ($('.k-file.k-file-progress', this.wrapper).length === 0) {\n this.trigger(COMPLETE);\n }\n },\n _inputFiles: function (sourceInput) {\n return inputFiles(sourceInput);\n }\n });\n var syncUploadModule = function (upload) {\n this.name = 'syncUploadModule';\n this.element = upload.wrapper;\n this.upload = upload;\n this.element.closest('form').attr('enctype', 'multipart/form-data').attr('encoding', 'multipart/form-data');\n };\n syncUploadModule.prototype = {\n onSelect: function (e, files) {\n var upload = this.upload;\n var sourceInput = $(e.target);\n var filesContainErrors = upload._filesContainValidationErrors(files);\n upload._addInput(sourceInput);\n var fileData = { 'fileNames': files };\n if (filesContainErrors) {\n sourceInput.remove();\n } else {\n fileData.relatedInput = sourceInput;\n }\n var file = upload._enqueueFile(getFileName(sourceInput), fileData);\n if (filesContainErrors) {\n upload._hideUploadProgress(file);\n }\n upload._fileAction(file, REMOVE);\n },\n onRemove: function (e) {\n var fileEntry = getFileEntry(e);\n var relatedInput = fileEntry.data('relatedInput');\n if (relatedInput) {\n relatedInput.remove();\n }\n this.upload._removeFileEntry(fileEntry);\n }\n };\n var iframeUploadModule = function (upload) {\n this.name = 'iframeUploadModule';\n this.element = upload.wrapper;\n this.upload = upload;\n this.iframes = [];\n };\n Upload._frameId = 0;\n iframeUploadModule.prototype = {\n onSelect: function (e, files) {\n var upload = this.upload;\n var sourceInput = $(e.target);\n var hasValidationErrors = upload._filesContainValidationErrors(files);\n var fileEntry = this.prepareUpload(sourceInput, files, hasValidationErrors);\n if (upload.options.async.autoUpload) {\n if (!hasValidationErrors) {\n this.performUpload(fileEntry);\n } else {\n upload._fileAction(fileEntry, REMOVE);\n upload._showHeaderUploadStatus(false);\n }\n } else {\n upload._fileAction(fileEntry, REMOVE);\n if (!hasValidationErrors) {\n upload._showUploadButton();\n } else {\n upload._updateHeaderUploadStatus();\n }\n }\n if (hasValidationErrors) {\n upload._hideUploadProgress(fileEntry);\n }\n },\n prepareUpload: function (sourceInput, files, hasValidationErrors) {\n var upload = this.upload;\n var activeInput = $(upload.element);\n var name = upload.options.async.saveField || sourceInput.attr('name');\n var fileEntry, fileData, iframe, form;\n upload._addInput(sourceInput);\n sourceInput.attr('name', name);\n if (!hasValidationErrors) {\n iframe = this.createFrame(upload.name + '_' + Upload._frameId++);\n this.registerFrame(iframe);\n form = this.createForm(upload.options.async.saveUrl, iframe.attr('name')).append(activeInput);\n fileData = {\n 'frame': iframe,\n 'relatedInput': activeInput,\n 'fileNames': files\n };\n } else {\n sourceInput.remove();\n fileData = { 'fileNames': files };\n }\n fileEntry = upload._enqueueFile(getFileName(sourceInput), fileData);\n if (iframe) {\n iframe.data({\n 'form': form,\n 'file': fileEntry\n });\n }\n return fileEntry;\n },\n performUpload: function (fileEntry) {\n var e = { files: fileEntry.data('fileNames') };\n var iframe = fileEntry.data('frame');\n var upload = this.upload;\n if (!upload.trigger(UPLOAD, e)) {\n upload._hideUploadButton();\n upload._showHeaderUploadStatus(true);\n iframe.appendTo(document.body);\n var form = iframe.data('form').attr('action', upload.options.async.saveUrl).appendTo(document.body);\n e.data = $.extend({}, e.data, antiForgeryTokens());\n for (var key in e.data) {\n var dataInput = form.find('input[name=\\'' + key + '\\']');\n if (dataInput.length === 0) {\n dataInput = $('<input>', {\n type: 'hidden',\n name: key\n }).prependTo(form);\n }\n dataInput.val(e.data[key]);\n }\n upload._fileAction(fileEntry, CANCEL);\n upload._fileState(fileEntry, 'uploading');\n $(fileEntry).removeClass('k-file-error').addClass('k-file-progress');\n iframe.one('load', $.proxy(this.onIframeLoad, this));\n form[0].submit();\n } else {\n upload._removeFileEntry(iframe.data('file'));\n this.cleanupFrame(iframe);\n this.unregisterFrame(iframe);\n }\n },\n onSaveSelected: function () {\n var module = this;\n var upload = module.upload;\n $('.k-file', this.element).each(function () {\n var fileEntry = $(this);\n var started = isFileUploadStarted(fileEntry);\n var hasValidationErrors = upload._filesContainValidationErrors(fileEntry.data('fileNames'));\n if (!started && !hasValidationErrors) {\n module.performUpload(fileEntry);\n }\n });\n },\n onIframeLoad: function (e) {\n var iframe = $(e.target), responseText;\n try {\n responseText = iframe.contents().text();\n } catch (ex) {\n responseText = 'Error trying to get server response: ' + ex;\n }\n this.processResponse(iframe, responseText);\n },\n processResponse: function (iframe, responseText) {\n var fileEntry = iframe.data('file'), module = this, fakeXHR = { responseText: responseText };\n tryParseJSON(responseText, function (jsonResult) {\n $.extend(fakeXHR, {\n statusText: 'OK',\n status: '200'\n });\n module.upload._onFileProgress({ target: $(fileEntry, module.upload.wrapper) }, 100);\n module.upload._onUploadSuccess({ target: $(fileEntry, module.upload.wrapper) }, jsonResult, fakeXHR);\n module.cleanupFrame(iframe);\n module.unregisterFrame(iframe);\n }, function () {\n $.extend(fakeXHR, {\n statusText: 'error',\n status: '500'\n });\n module.upload._onUploadError({ target: $(fileEntry, module.upload.wrapper) }, fakeXHR);\n });\n },\n onCancel: function (e) {\n var iframe = $(e.target).data('frame');\n this.stopFrameSubmit(iframe);\n this.cleanupFrame(iframe);\n this.unregisterFrame(iframe);\n this.upload._removeFileEntry(iframe.data('file'));\n },\n onRetry: function (e) {\n var fileEntry = getFileEntry(e);\n this.performUpload(fileEntry);\n },\n onRemove: function (e, eventArgs, shouldSendRemoveRequest) {\n var module = this;\n var upload = module.upload;\n var fileEntry = getFileEntry(e);\n var iframe = fileEntry.data('frame');\n if (iframe) {\n module.unregisterFrame(iframe);\n upload._removeFileEntry(fileEntry);\n module.cleanupFrame(iframe);\n } else {\n if (fileEntry.hasClass('k-file-success')) {\n removeUploadedFile(fileEntry, upload, eventArgs, shouldSendRemoveRequest);\n } else {\n upload._removeFileEntry(fileEntry);\n }\n }\n },\n onAbort: function () {\n var element = this.element, module = this;\n $.each(this.iframes, function () {\n $('input', this.data('form')).appendTo(element);\n module.stopFrameSubmit(this[0]);\n this.data('form').remove();\n this.remove();\n });\n this.iframes = [];\n },\n createFrame: function (id) {\n return $('<iframe' + ' name=\\'' + id + '\\'' + ' id=\\'' + id + '\\'' + ' style=\\'display:none;\\' />');\n },\n createForm: function (action, target) {\n return $('<form enctype=\\'multipart/form-data\\' method=\\'POST\\'' + ' action=\\'' + action + '\\'' + ' target=\\'' + target + '\\'' + '/>');\n },\n stopFrameSubmit: function (frame) {\n if (typeof frame.stop != 'undefined') {\n frame.stop();\n } else if (frame.document) {\n frame.document.execCommand('Stop');\n }\n },\n registerFrame: function (frame) {\n this.iframes.push(frame);\n },\n unregisterFrame: function (frame) {\n this.iframes = $.grep(this.iframes, function (value) {\n return value.attr('name') != frame.attr('name');\n });\n },\n cleanupFrame: function (frame) {\n var form = frame.data('form');\n frame.data('file').data('frame', null);\n setTimeout(function () {\n form.remove();\n frame.remove();\n }, 1);\n }\n };\n var formDataUploadModule = function (upload) {\n this.name = 'formDataUploadModule';\n this.element = upload.wrapper;\n this.upload = upload;\n };\n formDataUploadModule.prototype = {\n onSelect: function (e, files) {\n var upload = this.upload;\n var module = this;\n var sourceElement = $(e.target);\n var fileEntries = this.prepareUpload(sourceElement, files);\n var hasValidationErrors;\n $.each(fileEntries, function () {\n hasValidationErrors = upload._filesContainValidationErrors($(this.data('fileNames')));\n if (upload.options.async.autoUpload) {\n if (!hasValidationErrors) {\n module.performUpload(this);\n } else {\n upload._fileAction(this, REMOVE);\n upload._showHeaderUploadStatus(false);\n }\n } else {\n upload._fileAction(this, REMOVE);\n if (!hasValidationErrors) {\n upload._showUploadButton();\n } else {\n upload._updateHeaderUploadStatus();\n }\n }\n if (hasValidationErrors) {\n upload._hideUploadProgress(this);\n }\n });\n },\n prepareUpload: function (sourceElement, files) {\n var fileEntries = this.enqueueFiles(files);\n if (sourceElement.is('input')) {\n $.each(fileEntries, function () {\n $(this).data('relatedInput', sourceElement);\n });\n sourceElement.data('relatedFileEntries', fileEntries);\n this.upload._addInput(sourceElement);\n }\n return fileEntries;\n },\n enqueueFiles: function (files) {\n var upload = this.upload;\n var name;\n var i;\n var filesLength = files.length;\n var currentFile;\n var fileEntry;\n var fileEntries = [];\n if (upload.options.async.batch === true) {\n name = $.map(files, function (file) {\n return file.name;\n }).join(', ');\n fileEntry = upload._enqueueFile(name, { fileNames: files });\n fileEntry.data('files', files);\n fileEntries.push(fileEntry);\n } else {\n for (i = 0; i < filesLength; i++) {\n currentFile = files[i];\n name = currentFile.name;\n fileEntry = upload._enqueueFile(name, { fileNames: [currentFile] });\n fileEntry.data('files', [currentFile]);\n fileEntries.push(fileEntry);\n }\n }\n return fileEntries;\n },\n performUpload: function (fileEntry) {\n var upload = this.upload, formData = this.createFormData(), xhr = this.createXHR(), e = {\n files: fileEntry.data('fileNames'),\n XMLHttpRequest: xhr\n };\n if (!upload.trigger(UPLOAD, e)) {\n upload._fileAction(fileEntry, CANCEL);\n upload._hideUploadButton();\n upload._showHeaderUploadStatus(true);\n if (e.formData) {\n formData = e.formData;\n } else {\n e.data = $.extend({}, e.data, antiForgeryTokens());\n for (var key in e.data) {\n formData.append(key, e.data[key]);\n }\n this.populateFormData(formData, fileEntry.data('files'));\n }\n upload._fileState(fileEntry, 'uploading');\n $(fileEntry).removeClass('k-file-error').addClass('k-file-progress');\n this.postFormData(upload.options.async.saveUrl, formData, fileEntry, xhr);\n } else {\n this.removeFileEntry(fileEntry);\n }\n },\n onSaveSelected: function () {\n var module = this;\n var upload = module.upload;\n $('.k-file', this.element).each(function () {\n var fileEntry = $(this);\n var started = isFileUploadStarted(fileEntry);\n var hasValidationErrors = upload._filesContainValidationErrors(fileEntry.data('fileNames'));\n if (!started && !hasValidationErrors) {\n module.performUpload(fileEntry);\n }\n });\n },\n onCancel: function (e) {\n var fileEntry = getFileEntry(e);\n this.stopUploadRequest(fileEntry);\n this.removeFileEntry(fileEntry);\n },\n onRetry: function (e) {\n var fileEntry = getFileEntry(e);\n this.performUpload(fileEntry);\n },\n onRemove: function (e, eventArgs, shouldSendRemoveRequest) {\n var module = this;\n var upload = module.upload;\n var fileEntry = getFileEntry(e);\n if (fileEntry.hasClass('k-file-success')) {\n removeUploadedFile(fileEntry, upload, eventArgs, shouldSendRemoveRequest);\n } else {\n module.removeFileEntry(fileEntry);\n }\n },\n createXHR: function () {\n return new XMLHttpRequest();\n },\n postFormData: function (url, data, fileEntry, xhr) {\n var module = this;\n fileEntry.data('request', xhr);\n xhr.addEventListener('load', function (e) {\n module.onRequestSuccess.call(module, e, fileEntry);\n }, false);\n xhr.addEventListener(ERROR, function (e) {\n module.onRequestError.call(module, e, fileEntry);\n }, false);\n xhr.upload.addEventListener('progress', function (e) {\n module.onRequestProgress.call(module, e, fileEntry);\n }, false);\n xhr.open('POST', url, true);\n xhr.withCredentials = this.upload.options.async.withCredentials;\n var accept = this.upload.options.async.accept;\n if (accept) {\n xhr.setRequestHeader('Accept', accept);\n }\n xhr.send(data);\n },\n createFormData: function () {\n return new FormData();\n },\n populateFormData: function (data, files) {\n var upload = this.upload, i, length = files.length;\n for (i = 0; i < length; i++) {\n data.append(upload.options.async.saveField || upload.name, files[i].rawFile);\n }\n return data;\n },\n onRequestSuccess: function (e, fileEntry) {\n var xhr = e.target, module = this;\n function raiseError() {\n module.upload._onUploadError({ target: $(fileEntry, module.upload.wrapper) }, xhr);\n }\n if (xhr.status >= 200 && xhr.status <= 299) {\n tryParseJSON(xhr.responseText, function (jsonResult) {\n module.upload._onFileProgress({ target: $(fileEntry, module.upload.wrapper) }, 100);\n module.upload._onUploadSuccess({ target: $(fileEntry, module.upload.wrapper) }, jsonResult, xhr);\n module.cleanupFileEntry(fileEntry);\n }, raiseError);\n } else {\n raiseError();\n }\n },\n onRequestError: function (e, fileEntry) {\n var xhr = e.target;\n this.upload._onUploadError({ target: $(fileEntry, this.upload.wrapper) }, xhr);\n },\n cleanupFileEntry: function (fileEntry) {\n var relatedInput = fileEntry.data('relatedInput'), uploadComplete = true;\n if (relatedInput) {\n $.each(relatedInput.data('relatedFileEntries') || [], function () {\n if (this.parent().length > 0 && this[0] != fileEntry[0]) {\n uploadComplete = uploadComplete && this.hasClass('k-file-success');\n }\n });\n if (uploadComplete) {\n relatedInput.remove();\n }\n }\n },\n removeFileEntry: function (fileEntry) {\n this.cleanupFileEntry(fileEntry);\n this.upload._removeFileEntry(fileEntry);\n },\n onRequestProgress: function (e, fileEntry) {\n var percentComplete = Math.round(e.loaded * 100 / e.total);\n this.upload._onFileProgress({ target: $(fileEntry, this.upload.wrapper) }, percentComplete);\n },\n stopUploadRequest: function (fileEntry) {\n fileEntry.data('request').abort();\n }\n };\n function getFileName(input) {\n return $.map(inputFiles(input), function (file) {\n return file.name;\n }).join(', ');\n }\n function inputFiles($input) {\n var input = $input[0];\n if (input.files) {\n return getAllFileInfo(input.files);\n } else {\n return [{\n name: stripPath(input.value),\n extension: getFileExtension(input.value),\n size: null\n }];\n }\n }\n function getAllFileInfo(rawFiles) {\n return $.map(rawFiles, function (file) {\n return getFileInfo(file);\n });\n }\n function getFileInfo(rawFile) {\n var fileName = rawFile.name || rawFile.fileName;\n return {\n name: kendo.htmlEncode(fileName),\n extension: getFileExtension(fileName),\n size: typeof rawFile.size == 'number' ? rawFile.size : rawFile.fileSize,\n rawFile: rawFile\n };\n }\n function getFileExtension(fileName) {\n var matches = fileName.match(rFileExtension);\n return matches ? matches[0] : '';\n }\n function stripPath(name) {\n var slashIndex = name.lastIndexOf('\\\\');\n return slashIndex != -1 ? name.substr(slashIndex + 1) : name;\n }\n function assignGuidToFiles(files, unique) {\n var uid = kendo.guid();\n return $.map(files, function (file) {\n file.uid = unique ? kendo.guid() : uid;\n return file;\n });\n }\n function validateFiles(files, validationInfo) {\n var allowedExtensions = parseAllowedExtensions(validationInfo.allowedExtensions);\n var maxFileSize = validationInfo.maxFileSize;\n var minFileSize = validationInfo.minFileSize;\n for (var i = 0; i < files.length; i++) {\n validateFileExtension(files[i], allowedExtensions);\n validateFileSize(files[i], minFileSize, maxFileSize);\n }\n }\n function parseAllowedExtensions(extensions) {\n var allowedExtensions = $.map(extensions, function (ext) {\n var parsedExt = ext.substring(0, 1) === '.' ? ext : '.' + ext;\n return parsedExt.toLowerCase();\n });\n return allowedExtensions;\n }\n function validateFileExtension(file, allowedExtensions) {\n if (allowedExtensions.length > 0) {\n if (allowedExtensions.indexOf(file.extension.toLowerCase()) < 0) {\n file.validationErrors = file.validationErrors || [];\n if ($.inArray(INVALIDFILEEXTENSION, file.validationErrors) === -1) {\n file.validationErrors.push(INVALIDFILEEXTENSION);\n }\n }\n }\n }\n function validateFileSize(file, minFileSize, maxFileSize) {\n if (minFileSize !== 0 && file.size < minFileSize) {\n file.validationErrors = file.validationErrors || [];\n if ($.inArray(INVALIDMINFILESIZE, file.validationErrors) === -1) {\n file.validationErrors.push(INVALIDMINFILESIZE);\n }\n }\n if (maxFileSize !== 0 && file.size > maxFileSize) {\n file.validationErrors = file.validationErrors || [];\n if ($.inArray(INVALIDMAXFILESIZE, file.validationErrors) === -1) {\n file.validationErrors.push(INVALIDMAXFILESIZE);\n }\n }\n }\n function getTotalFilesSizeMessage(files) {\n var totalSize = 0;\n if (typeof files[0].size == 'number') {\n for (var i = 0; i < files.length; i++) {\n if (files[i].size) {\n totalSize += files[i].size;\n }\n }\n } else {\n return '';\n }\n totalSize /= 1024;\n if (totalSize < 1024) {\n return totalSize.toFixed(2) + ' KB';\n } else {\n return (totalSize / 1024).toFixed(2) + ' MB';\n }\n }\n function shouldRemoveFileEntry(upload) {\n return !upload.multiple && $('.k-file', upload.wrapper).length > 1;\n }\n function removeUploadedFile(fileEntry, upload, eventArgs, shouldSendRemoveRequest) {\n if (!upload._supportsRemove()) {\n if (shouldRemoveFileEntry(upload) || !shouldSendRemoveRequest) {\n upload._removeFileEntry(fileEntry);\n }\n return;\n }\n var files = fileEntry.data('fileNames');\n var fileNames = $.map(files, function (file) {\n return file.name;\n });\n if (shouldSendRemoveRequest === false) {\n upload._removeFileEntry(fileEntry);\n return;\n }\n upload._submitRemove(fileNames, eventArgs, function onSuccess(data, textStatus, xhr) {\n var prevented = upload.trigger(SUCCESS, {\n operation: 'remove',\n files: files,\n response: data,\n XMLHttpRequest: xhr\n });\n if (!prevented) {\n upload._removeFileEntry(fileEntry);\n }\n }, function onError(xhr) {\n if (shouldRemoveFileEntry(upload)) {\n upload._removeFileEntry(fileEntry);\n }\n upload.trigger(ERROR, {\n operation: 'remove',\n files: files,\n XMLHttpRequest: xhr\n });\n logToConsole('Server response: ' + xhr.responseText);\n });\n }\n function tryParseJSON(input, onSuccess, onError) {\n var success = false, json = '';\n try {\n json = $.parseJSON(normalizeJSON(input));\n success = true;\n } catch (e) {\n onError();\n }\n if (success) {\n onSuccess(json);\n }\n }\n function normalizeJSON(input) {\n if (typeof input === 'undefined' || input === '') {\n input = '{}';\n }\n return input;\n }\n function stopEvent(e) {\n e.stopPropagation();\n e.preventDefault();\n }\n function bindDragEventWrappers(element, namespace, onDragEnter, onDragLeave) {\n var hideInterval, lastDrag;\n element.on('dragenter' + namespace, function (e) {\n onDragEnter(e);\n lastDrag = new Date();\n if (!hideInterval) {\n hideInterval = setInterval(function () {\n var sinceLastDrag = new Date() - lastDrag;\n if (sinceLastDrag > 100) {\n onDragLeave();\n clearInterval(hideInterval);\n hideInterval = null;\n }\n }, 100);\n }\n }).on('dragover' + namespace, function () {\n lastDrag = new Date();\n });\n }\n function isFileUploadStarted(fileEntry) {\n return fileEntry.is('.k-file-progress, .k-file-success, .k-file-error');\n }\n function getFileEntry(e) {\n return $(e.target).closest('.k-file');\n }\n kendo.ui.plugin(Upload);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.filebrowser', [\n 'kendo.listview',\n 'kendo.dropdownlist',\n 'kendo.upload'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'filebrowser',\n name: 'FileBrowser',\n category: 'web',\n description: '',\n hidden: true,\n depends: [\n 'selectable',\n 'listview',\n 'dropdownlist',\n 'upload'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, isPlainObject = $.isPlainObject, proxy = $.proxy, extend = $.extend, placeholderSupported = kendo.support.placeholder, browser = kendo.support.browser, isFunction = kendo.isFunction, trimSlashesRegExp = /(^\\/|\\/$)/g, CHANGE = 'change', APPLY = 'apply', ERROR = 'error', CLICK = 'click', NS = '.kendoFileBrowser', BREADCRUBMSNS = '.kendoBreadcrumbs', SEARCHBOXNS = '.kendoSearchBox', NAMEFIELD = 'name', SIZEFIELD = 'size', TYPEFIELD = 'type', DEFAULTSORTORDER = {\n field: TYPEFIELD,\n dir: 'asc'\n }, EMPTYTILE = kendo.template('<li class=\"k-tile-empty\"><strong>${text}</strong></li>'), TOOLBARTMPL = '<div class=\"k-widget k-filebrowser-toolbar k-header k-floatwrap\">' + '<div class=\"k-toolbar-wrap\">' + '# if (showUpload) { # ' + '<div class=\"k-widget k-upload\"><div class=\"k-button k-button-icontext k-upload-button\">' + '<span class=\"k-icon k-i-plus\"></span>#=messages.uploadFile#<input type=\"file\" name=\"file\" /></div></div>' + '# } #' + '# if (showCreate) { #' + '<button type=\"button\" class=\"k-button k-button-icon\"><span class=\"k-icon k-i-folder-add\" /></button>' + '# } #' + '# if (showDelete) { #' + '<button type=\"button\" class=\"k-button k-button-icon k-state-disabled\"><span class=\"k-icon k-i-close\" /></button> ' + '# } #' + '</div>' + '<div class=\"k-tiles-arrange\">' + '<label>#=messages.orderBy#: <select /></label>' + '</div>' + '</div>';\n extend(true, kendo.data, {\n schemas: {\n 'filebrowser': {\n data: function (data) {\n return data.items || data || [];\n },\n model: {\n id: 'name',\n fields: {\n name: 'name',\n size: 'size',\n type: 'type'\n }\n }\n }\n }\n });\n extend(true, kendo.data, {\n transports: {\n 'filebrowser': kendo.data.RemoteTransport.extend({\n init: function (options) {\n kendo.data.RemoteTransport.fn.init.call(this, $.extend(true, {}, this.options, options));\n },\n _call: function (type, options) {\n options.data = $.extend({}, options.data, { path: this.options.path() });\n if (isFunction(this.options[type])) {\n this.options[type].call(this, options);\n } else {\n kendo.data.RemoteTransport.fn[type].call(this, options);\n }\n },\n read: function (options) {\n this._call('read', options);\n },\n create: function (options) {\n this._call('create', options);\n },\n destroy: function (options) {\n this._call('destroy', options);\n },\n update: function () {\n },\n options: {\n read: { type: 'POST' },\n update: { type: 'POST' },\n create: { type: 'POST' },\n destroy: { type: 'POST' }\n }\n })\n }\n });\n function bindDragEventWrappers(element, onDragEnter, onDragLeave) {\n var hideInterval, lastDrag;\n element.on('dragenter' + NS, function () {\n onDragEnter();\n lastDrag = new Date();\n if (!hideInterval) {\n hideInterval = setInterval(function () {\n var sinceLastDrag = new Date() - lastDrag;\n if (sinceLastDrag > 100) {\n onDragLeave();\n clearInterval(hideInterval);\n hideInterval = null;\n }\n }, 100);\n }\n }).on('dragover' + NS, function () {\n lastDrag = new Date();\n });\n }\n var offsetTop;\n if (browser.msie && browser.version < 8) {\n offsetTop = function (element) {\n return element.offsetTop;\n };\n } else {\n offsetTop = function (element) {\n return element.offsetTop - $(element).height();\n };\n }\n function concatPaths(path, name) {\n if (path === undefined || !path.match(/\\/$/)) {\n path = (path || '') + '/';\n }\n return path + name;\n }\n function sizeFormatter(value) {\n if (!value) {\n return '';\n }\n var suffix = ' bytes';\n if (value >= 1073741824) {\n suffix = ' GB';\n value /= 1073741824;\n } else if (value >= 1048576) {\n suffix = ' MB';\n value /= 1048576;\n } else if (value >= 1024) {\n suffix = ' KB';\n value /= 1024;\n }\n return Math.round(value * 100) / 100 + suffix;\n }\n function fieldName(fields, name) {\n var descriptor = fields[name];\n if (isPlainObject(descriptor)) {\n return descriptor.from || descriptor.field || name;\n }\n return descriptor;\n }\n var FileBrowser = Widget.extend({\n init: function (element, options) {\n var that = this;\n options = options || {};\n Widget.fn.init.call(that, element, options);\n that.element.addClass('k-filebrowser');\n that.element.on(CLICK + NS, '.k-filebrowser-toolbar button:not(.k-state-disabled):has(.k-i-close)', proxy(that._deleteClick, that)).on(CLICK + NS, '.k-filebrowser-toolbar button:not(.k-state-disabled):has(.k-i-folder-add)', proxy(that._addClick, that)).on('keydown' + NS, 'li.k-state-selected input', proxy(that._directoryKeyDown, that)).on('blur' + NS, 'li.k-state-selected input', proxy(that._directoryBlur, that));\n that._dataSource();\n that.refresh();\n that.path(that.options.path);\n },\n options: {\n name: 'FileBrowser',\n messages: {\n uploadFile: 'Upload',\n orderBy: 'Arrange by',\n orderByName: 'Name',\n orderBySize: 'Size',\n directoryNotFound: 'A directory with this name was not found.',\n emptyFolder: 'Empty Folder',\n deleteFile: 'Are you sure you want to delete \"{0}\"?',\n invalidFileType: 'The selected file \"{0}\" is not valid. Supported file types are {1}.',\n overwriteFile: 'A file with name \"{0}\" already exists in the current directory. Do you want to overwrite it?',\n dropFilesHere: 'drop file here to upload',\n search: 'Search'\n },\n transport: {},\n path: '/',\n fileTypes: '*.*'\n },\n events: [\n ERROR,\n CHANGE,\n APPLY\n ],\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.dataSource.unbind(ERROR, that._errorHandler);\n that.element.add(that.list).add(that.toolbar).off(NS);\n kendo.destroy(that.element);\n },\n value: function () {\n var that = this, selected = that._selectedItem(), path, fileUrl = that.options.transport.fileUrl;\n if (selected && selected.get(TYPEFIELD) === 'f') {\n path = concatPaths(that.path(), selected.get(NAMEFIELD)).replace(trimSlashesRegExp, '');\n if (fileUrl) {\n path = isFunction(fileUrl) ? fileUrl(path) : kendo.format(fileUrl, encodeURIComponent(path));\n }\n return path;\n }\n },\n _selectedItem: function () {\n var listView = this.listView, selected = listView.select();\n if (selected.length) {\n return this.dataSource.getByUid(selected.attr(kendo.attr('uid')));\n }\n },\n _toolbar: function () {\n var that = this, template = kendo.template(TOOLBARTMPL), messages = that.options.messages, arrangeBy = [\n {\n text: messages.orderByName,\n value: 'name'\n },\n {\n text: messages.orderBySize,\n value: 'size'\n }\n ];\n that.toolbar = $(template({\n messages: messages,\n showUpload: that.options.transport.uploadUrl,\n showCreate: that.options.transport.create,\n showDelete: that.options.transport.destroy\n })).appendTo(that.element).find('.k-upload input').kendoUpload({\n multiple: false,\n localization: { dropFilesHere: messages.dropFilesHere },\n async: {\n saveUrl: that.options.transport.uploadUrl,\n autoUpload: true\n },\n upload: proxy(that._fileUpload, that),\n error: function (e) {\n that._error({\n xhr: e.XMLHttpRequest,\n status: 'error'\n });\n }\n }).end();\n that.upload = that.toolbar.find('.k-upload input').data('kendoUpload');\n that.arrangeBy = that.toolbar.find('.k-tiles-arrange select').kendoDropDownList({\n dataSource: arrangeBy,\n dataTextField: 'text',\n dataValueField: 'value',\n change: function () {\n that.orderBy(this.value());\n }\n }).data('kendoDropDownList');\n that._attachDropzoneEvents();\n },\n _attachDropzoneEvents: function () {\n var that = this;\n if (that.options.transport.uploadUrl) {\n bindDragEventWrappers($(document.documentElement), $.proxy(that._dropEnter, that), $.proxy(that._dropLeave, that));\n that._scrollHandler = proxy(that._positionDropzone, that);\n }\n },\n _dropEnter: function () {\n this._positionDropzone();\n $(document).on('scroll' + NS, this._scrollHandler);\n },\n _dropLeave: function () {\n this._removeDropzone();\n $(document).off('scroll' + NS, this._scrollHandler);\n },\n _positionDropzone: function () {\n var that = this, element = that.element, offset = element.offset();\n that.toolbar.find('.k-dropzone').addClass('k-filebrowser-dropzone').offset(offset).css({\n width: element[0].clientWidth,\n height: element[0].clientHeight,\n lineHeight: element[0].clientHeight + 'px'\n });\n },\n _removeDropzone: function () {\n this.toolbar.find('.k-dropzone').removeClass('k-filebrowser-dropzone').css({\n width: '',\n height: '',\n lineHeight: '',\n top: '',\n left: ''\n });\n },\n _deleteClick: function () {\n var that = this, item = that.listView.select(), message = kendo.format(that.options.messages.deleteFile, item.find('strong').text());\n if (item.length && that._showMessage(message, 'confirm')) {\n that.listView.remove(item);\n }\n },\n _addClick: function () {\n this.createDirectory();\n },\n _getFieldName: function (name) {\n return fieldName(this.dataSource.reader.model.fields, name);\n },\n _fileUpload: function (e) {\n var that = this, options = that.options, fileTypes = options.fileTypes, filterRegExp = new RegExp(('(' + fileTypes.split(',').join(')|(') + ')').replace(/\\*\\./g, '.*.'), 'i'), fileName = e.files[0].name, fileNameField = NAMEFIELD, sizeField = SIZEFIELD, file;\n if (filterRegExp.test(fileName)) {\n e.data = { path: that.path() };\n file = that._createFile(fileName);\n if (!file) {\n e.preventDefault();\n } else {\n that.upload.one('success', function (e) {\n var model = that._insertFileToList(file);\n model.set(fileNameField, e.response[that._getFieldName(fileNameField)]);\n model.set(sizeField, e.response[that._getFieldName(sizeField)]);\n that._tiles = that.listView.items().filter('[' + kendo.attr('type') + '=f]');\n });\n }\n } else {\n e.preventDefault();\n that._showMessage(kendo.format(options.messages.invalidFileType, fileName, fileTypes));\n }\n },\n _findFile: function (name) {\n var data = this.dataSource.data(), idx, result, typeField = TYPEFIELD, nameField = NAMEFIELD, length;\n name = name.toLowerCase();\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].get(typeField) === 'f' && data[idx].get(nameField).toLowerCase() === name) {\n result = data[idx];\n break;\n }\n }\n return result;\n },\n _createFile: function (fileName) {\n var that = this, model = {}, typeField = TYPEFIELD, file = that._findFile(fileName);\n if (file) {\n if (!that._showMessage(kendo.format(that.options.messages.overwriteFile, fileName), 'confirm')) {\n return null;\n } else {\n file._override = true;\n return file;\n }\n }\n model[typeField] = 'f';\n model[NAMEFIELD] = fileName;\n model[SIZEFIELD] = 0;\n return model;\n },\n _insertFileToList: function (model) {\n var index;\n if (model._override) {\n return model;\n }\n var dataSource = this.dataSource;\n var view = dataSource.view();\n for (var i = 0, length = view.length; i < length; i++) {\n if (view[i].get(TYPEFIELD) === 'f') {\n index = i;\n break;\n }\n }\n return dataSource.insert(++index, model);\n },\n createDirectory: function () {\n var that = this, idx, length, lastDirectoryIdx = 0, typeField = TYPEFIELD, nameField = NAMEFIELD, view = that.dataSource.data(), name = that._nameDirectory(), model = new that.dataSource.reader.model();\n for (idx = 0, length = view.length; idx < length; idx++) {\n if (view[idx].get(typeField) === 'd') {\n lastDirectoryIdx = idx;\n }\n }\n model.set(typeField, 'd');\n model.set(nameField, name);\n that.listView.one('dataBound', function () {\n var selected = that.listView.items().filter('[' + kendo.attr('uid') + '=' + model.uid + ']'), input = selected.find('input');\n if (selected.length) {\n this.edit(selected);\n }\n this.element.scrollTop(selected.attr('offsetTop') - this.element[0].offsetHeight);\n setTimeout(function () {\n input.select();\n });\n }).one('save', function (e) {\n var value = e.model.get(nameField);\n if (!value) {\n e.model.set(nameField, name);\n } else {\n e.model.set(nameField, that._nameExists(value, model.uid) ? that._nameDirectory() : value);\n }\n });\n that.dataSource.insert(++lastDirectoryIdx, model);\n },\n _directoryKeyDown: function (e) {\n if (e.keyCode == 13) {\n e.currentTarget.blur();\n }\n },\n _directoryBlur: function () {\n this.listView.save();\n },\n _nameExists: function (name, uid) {\n var data = this.dataSource.data(), typeField = TYPEFIELD, nameField = NAMEFIELD, idx, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].get(typeField) === 'd' && data[idx].get(nameField).toLowerCase() === name.toLowerCase() && data[idx].uid !== uid) {\n return true;\n }\n }\n return false;\n },\n _nameDirectory: function () {\n var name = 'New folder', data = this.dataSource.data(), directoryNames = [], typeField = TYPEFIELD, nameField = NAMEFIELD, candidate, idx, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].get(typeField) === 'd' && data[idx].get(nameField).toLowerCase().indexOf(name.toLowerCase()) > -1) {\n directoryNames.push(data[idx].get(nameField));\n }\n }\n if ($.inArray(name, directoryNames) > -1) {\n idx = 2;\n do {\n candidate = name + ' (' + idx + ')';\n idx++;\n } while ($.inArray(candidate, directoryNames) > -1);\n name = candidate;\n }\n return name;\n },\n orderBy: function (field) {\n this.dataSource.sort([\n {\n field: TYPEFIELD,\n dir: 'asc'\n },\n {\n field: field,\n dir: 'asc'\n }\n ]);\n },\n search: function (name) {\n this.dataSource.filter({\n field: NAMEFIELD,\n operator: 'contains',\n value: name\n });\n },\n _content: function () {\n var that = this;\n that.list = $('<ul class=\"k-reset k-floats k-tiles\" />').appendTo(that.element).on('dblclick' + NS, 'li', proxy(that._dblClick, that));\n that.listView = new kendo.ui.ListView(that.list, {\n dataSource: that.dataSource,\n template: that._itemTmpl(),\n editTemplate: that._editTmpl(),\n selectable: true,\n autoBind: false,\n dataBinding: function (e) {\n that.toolbar.find('.k-i-close').parent().addClass('k-state-disabled');\n if (e.action === 'remove' || e.action === 'sync') {\n e.preventDefault();\n }\n },\n dataBound: function () {\n if (that.dataSource.view().length) {\n that._tiles = this.items().filter('[' + kendo.attr('type') + '=f]');\n } else {\n this.wrapper.append(EMPTYTILE({ text: that.options.messages.emptyFolder }));\n }\n },\n change: proxy(that._listViewChange, that)\n });\n },\n _dblClick: function (e) {\n var that = this, li = $(e.currentTarget);\n if (li.hasClass('k-edit-item')) {\n that._directoryBlur();\n }\n if (li.filter('[' + kendo.attr('type') + '=d]').length) {\n var folder = that.dataSource.getByUid(li.attr(kendo.attr('uid')));\n if (folder) {\n that.path(concatPaths(that.path(), folder.get(NAMEFIELD)));\n that.breadcrumbs.value(that.path());\n }\n } else if (li.filter('[' + kendo.attr('type') + '=f]').length) {\n that.trigger(APPLY);\n }\n },\n _listViewChange: function () {\n var selected = this._selectedItem();\n if (selected) {\n this.toolbar.find('.k-i-close').parent().removeClass('k-state-disabled');\n this.trigger(CHANGE, { selected: selected });\n }\n },\n _dataSource: function () {\n var that = this, options = that.options, transport = options.transport, typeSortOrder = extend({}, DEFAULTSORTORDER), nameSortOrder = {\n field: NAMEFIELD,\n dir: 'asc'\n }, schema, dataSource = {\n type: transport.type || 'filebrowser',\n sort: [\n typeSortOrder,\n nameSortOrder\n ]\n };\n if (isPlainObject(transport)) {\n transport.path = proxy(that.path, that);\n dataSource.transport = transport;\n }\n if (isPlainObject(options.schema)) {\n dataSource.schema = options.schema;\n } else if (transport.type && isPlainObject(kendo.data.schemas[transport.type])) {\n schema = kendo.data.schemas[transport.type];\n }\n if (that.dataSource && that._errorHandler) {\n that.dataSource.unbind(ERROR, that._errorHandler);\n } else {\n that._errorHandler = proxy(that._error, that);\n }\n that.dataSource = kendo.data.DataSource.create(dataSource).bind(ERROR, that._errorHandler);\n },\n _navigation: function () {\n var that = this, navigation = $('<div class=\"k-floatwrap\"><input/><input/></div>').appendTo(this.element);\n that.breadcrumbs = navigation.find('input:first').kendoBreadcrumbs({\n value: that.options.path,\n change: function () {\n that.path(this.value());\n }\n }).data('kendoBreadcrumbs');\n that.searchBox = navigation.parent().find('input:last').kendoSearchBox({\n label: that.options.messages.search,\n change: function () {\n that.search(this.value());\n }\n }).data('kendoSearchBox');\n },\n _error: function (e) {\n var that = this, status;\n if (!that.trigger(ERROR, e)) {\n status = e.xhr.status;\n if (e.status == 'error') {\n if (status == '404') {\n that._showMessage(that.options.messages.directoryNotFound);\n } else if (status != '0') {\n that._showMessage('Error! The requested URL returned ' + status + ' - ' + e.xhr.statusText);\n }\n } else if (status == 'timeout') {\n that._showMessage('Error! Server timeout.');\n }\n var dataSource = that.dataSource;\n if (dataSource.hasChanges()) {\n dataSource.cancelChanges();\n }\n }\n },\n _showMessage: function (message, type) {\n return window[type || 'alert'](message);\n },\n refresh: function () {\n var that = this;\n that._navigation();\n that._toolbar();\n that._content();\n },\n _editTmpl: function () {\n var html = '<li class=\"k-tile k-state-selected\" ' + kendo.attr('uid') + '=\"#=uid#\" ';\n html += kendo.attr('type') + '=\"${' + TYPEFIELD + '}\">';\n html += '#if(' + TYPEFIELD + ' == \"d\") { #';\n html += '<div class=\"k-thumb\"><span class=\"k-icon k-i-folder\"></span></div>';\n html += '#}else{#';\n html += '<div class=\"k-thumb\"><span class=\"k-icon k-i-loading\"></span></div>';\n html += '#}#';\n html += '#if(' + TYPEFIELD + ' == \"d\") { #';\n html += '<input class=\"k-input\" ' + kendo.attr('bind') + '=\"value:' + NAMEFIELD + '\"/>';\n html += '#}#';\n html += '</li>';\n return proxy(kendo.template(html), { sizeFormatter: sizeFormatter });\n },\n _itemTmpl: function () {\n var html = '<li class=\"k-tile\" ' + kendo.attr('uid') + '=\"#=uid#\" ';\n html += kendo.attr('type') + '=\"${' + TYPEFIELD + '}\">';\n html += '#if(' + TYPEFIELD + ' == \"d\") { #';\n html += '<div class=\"k-thumb\"><span class=\"k-icon k-i-folder\"></span></div>';\n html += '#}else{#';\n html += '<div class=\"k-thumb\"><span class=\"k-icon k-i-file\"></span></div>';\n html += '#}#';\n html += '<strong>${' + NAMEFIELD + '}</strong>';\n html += '#if(' + TYPEFIELD + ' == \"f\") { # <span class=\"k-filesize\">${this.sizeFormatter(' + SIZEFIELD + ')}</span> #}#';\n html += '</li>';\n return proxy(kendo.template(html), { sizeFormatter: sizeFormatter });\n },\n path: function (value) {\n var that = this, path = that._path || '';\n if (value !== undefined) {\n that._path = value.replace(trimSlashesRegExp, '') + '/';\n that.dataSource.read({ path: that._path });\n return;\n }\n if (path) {\n path = path.replace(trimSlashesRegExp, '');\n }\n return path === '/' || path === '' ? '' : path + '/';\n }\n });\n var SearchBox = Widget.extend({\n init: function (element, options) {\n var that = this;\n options = options || {};\n Widget.fn.init.call(that, element, options);\n if (placeholderSupported) {\n that.element.attr('placeholder', that.options.label);\n }\n that._wrapper();\n that.element.on('keydown' + SEARCHBOXNS, proxy(that._keydown, that)).on('change' + SEARCHBOXNS, proxy(that._updateValue, that));\n that.wrapper.on(CLICK + SEARCHBOXNS, 'a', proxy(that._click, that));\n if (!placeholderSupported) {\n that.element.on('focus' + SEARCHBOXNS, proxy(that._focus, that)).on('blur' + SEARCHBOXNS, proxy(that._blur, that));\n }\n },\n options: {\n name: 'SearchBox',\n label: 'Search',\n value: ''\n },\n events: [CHANGE],\n destroy: function () {\n var that = this;\n that.wrapper.add(that.element).add(that.label).off(SEARCHBOXNS);\n Widget.fn.destroy.call(that);\n },\n _keydown: function (e) {\n if (e.keyCode === 13) {\n this._updateValue();\n }\n },\n _click: function (e) {\n e.preventDefault();\n this._updateValue();\n },\n _updateValue: function () {\n var that = this, value = that.element.val();\n if (value !== that.value()) {\n that.value(value);\n that.trigger(CHANGE);\n }\n },\n _blur: function () {\n this._updateValue();\n this._toggleLabel();\n },\n _toggleLabel: function () {\n if (!placeholderSupported) {\n this.label.toggle(!this.element.val());\n }\n },\n _focus: function () {\n this.label.hide();\n },\n _wrapper: function () {\n var element = this.element, wrapper = element.parents('.k-search-wrap');\n element[0].style.width = '';\n element.addClass('k-input');\n if (!wrapper.length) {\n wrapper = element.wrap($('<div class=\"k-widget k-search-wrap k-textbox\"/>')).parent();\n if (!placeholderSupported) {\n $('<label style=\"display:block\">' + this.options.label + '</label>').insertBefore(element);\n }\n $('<a href=\"#\" class=\"k-icon k-i-zoom k-search\"/>').appendTo(wrapper);\n }\n this.wrapper = wrapper;\n this.label = wrapper.find('>label');\n },\n value: function (value) {\n var that = this;\n if (value !== undefined) {\n that.options.value = value;\n that.element.val(value);\n that._toggleLabel();\n return;\n }\n return that.options.value;\n }\n });\n var Breadcrumbs = Widget.extend({\n init: function (element, options) {\n var that = this;\n options = options || {};\n Widget.fn.init.call(that, element, options);\n that._wrapper();\n that.wrapper.on('focus' + BREADCRUBMSNS, 'input', proxy(that._focus, that)).on('blur' + BREADCRUBMSNS, 'input', proxy(that._blur, that)).on('keydown' + BREADCRUBMSNS, 'input', proxy(that._keydown, that)).on(CLICK + BREADCRUBMSNS, 'a.k-i-arrow-60-up:first', proxy(that._rootClick, that)).on(CLICK + BREADCRUBMSNS, 'a:not(.k-i-arrow-60-up)', proxy(that._click, that));\n that.value(that.options.value);\n },\n options: {\n name: 'Breadcrumbs',\n gap: 50\n },\n events: [CHANGE],\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.wrapper.add(that.wrapper.find('input')).add(that.wrapper.find('a')).off(BREADCRUBMSNS);\n },\n _update: function (val) {\n val = (val || '').charAt(0) === '/' ? val : '/' + (val || '');\n if (val !== this.value()) {\n this.value(val);\n this.trigger(CHANGE);\n }\n },\n _click: function (e) {\n e.preventDefault();\n this._update(this._path($(e.target).prevAll('a:not(.k-i-arrow-60-up)').addBack()));\n },\n _rootClick: function (e) {\n e.preventDefault();\n this._update('');\n },\n _focus: function () {\n var that = this, element = that.element;\n that.overlay.hide();\n that.element.val(that.value());\n setTimeout(function () {\n element.select();\n });\n },\n _blur: function () {\n if (this.overlay.is(':visible')) {\n return;\n }\n var that = this, element = that.element, val = element.val().replace(/\\/{2,}/g, '/');\n that.overlay.show();\n element.val('');\n that._update(val);\n },\n _keydown: function (e) {\n var that = this;\n if (e.keyCode === 13) {\n that._blur();\n setTimeout(function () {\n that.overlay.find('a:first').focus();\n });\n }\n },\n _wrapper: function () {\n var element = this.element, wrapper = element.parents('.k-breadcrumbs'), overlay;\n element[0].style.width = '';\n element.addClass('k-input');\n if (!wrapper.length) {\n wrapper = element.wrap($('<div class=\"k-widget k-breadcrumbs k-textbox\"/>')).parent();\n }\n overlay = wrapper.find('.k-breadcrumbs-wrap');\n if (!overlay.length) {\n overlay = $('<div class=\"k-breadcrumbs-wrap\"/>').appendTo(wrapper);\n }\n this.wrapper = wrapper;\n this.overlay = overlay;\n },\n refresh: function () {\n var html = '', value = this.value(), segments, segment, idx, length;\n if (value === undefined || !value.match(/^\\//)) {\n value = '/' + (value || '');\n }\n segments = value.split('/');\n for (idx = 0, length = segments.length; idx < length; idx++) {\n segment = segments[idx];\n if (segment) {\n if (!html) {\n html += '<a href=\"#\" class=\"k-icon k-i-arrow-60-up\" title=\"Go to parent folder\"></a>';\n }\n html += '<a class=\"k-link\" href=\"#\">' + segments[idx] + '</a>';\n html += '<span class=\"k-icon k-i-arrow-60-right\" title=\"Go to child folder\"></span>';\n }\n }\n this.overlay.empty().append($(html));\n this._adjustSectionWidth();\n },\n _adjustSectionWidth: function () {\n var that = this, wrapper = that.wrapper, width = wrapper.width() - that.options.gap, links = that.overlay.find('a'), a;\n links.each(function (index) {\n a = $(this);\n if (a.parent().width() > width) {\n if (index == links.length - 1) {\n a.width(width);\n } else {\n a.prev().addBack().hide();\n }\n }\n });\n },\n value: function (val) {\n if (val !== undefined) {\n this._value = val.replace(/\\/{2,}/g, '/');\n this.refresh();\n return;\n }\n return this._value;\n },\n _path: function (trail) {\n return '/' + $.map(trail, function (b) {\n return $(b).text();\n }).join('/');\n }\n });\n kendo.ui.plugin(FileBrowser);\n kendo.ui.plugin(Breadcrumbs);\n kendo.ui.plugin(SearchBox);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.imagebrowser', ['kendo.filebrowser'], f);\n}(function () {\n var __meta__ = {\n id: 'imagebrowser',\n name: 'ImageBrowser',\n category: 'web',\n description: '',\n hidden: true,\n depends: ['filebrowser']\n };\n (function ($, undefined) {\n var kendo = window.kendo, FileBrowser = kendo.ui.FileBrowser, isPlainObject = $.isPlainObject, proxy = $.proxy, extend = $.extend, browser = kendo.support.browser, isFunction = kendo.isFunction, trimSlashesRegExp = /(^\\/|\\/$)/g, ERROR = 'error', NS = '.kendoImageBrowser', NAMEFIELD = 'name', SIZEFIELD = 'size', TYPEFIELD = 'type', DEFAULTSORTORDER = {\n field: TYPEFIELD,\n dir: 'asc'\n }, EMPTYTILE = kendo.template('<li class=\"k-tile-empty\"><strong>${text}</strong></li>');\n extend(true, kendo.data, {\n schemas: {\n 'imagebrowser': {\n data: function (data) {\n return data.items || data || [];\n },\n model: {\n id: 'name',\n fields: {\n name: 'name',\n size: 'size',\n type: 'type'\n }\n }\n }\n }\n });\n extend(true, kendo.data, {\n transports: {\n 'imagebrowser': kendo.data.RemoteTransport.extend({\n init: function (options) {\n kendo.data.RemoteTransport.fn.init.call(this, $.extend(true, {}, this.options, options));\n },\n _call: function (type, options) {\n options.data = $.extend({}, options.data, { path: this.options.path() });\n if (isFunction(this.options[type])) {\n this.options[type].call(this, options);\n } else {\n kendo.data.RemoteTransport.fn[type].call(this, options);\n }\n },\n read: function (options) {\n this._call('read', options);\n },\n create: function (options) {\n this._call('create', options);\n },\n destroy: function (options) {\n this._call('destroy', options);\n },\n update: function () {\n },\n options: {\n read: { type: 'POST' },\n update: { type: 'POST' },\n create: { type: 'POST' },\n destroy: { type: 'POST' }\n }\n })\n }\n });\n var offsetTop;\n if (browser.msie && browser.version < 8) {\n offsetTop = function (element) {\n return element.offsetTop;\n };\n } else {\n offsetTop = function (element) {\n return element.offsetTop - $(element).height();\n };\n }\n function concatPaths(path, name) {\n if (path === undefined || !path.match(/\\/$/)) {\n path = (path || '') + '/';\n }\n return path + name;\n }\n function sizeFormatter(value) {\n if (!value) {\n return '';\n }\n var suffix = ' bytes';\n if (value >= 1073741824) {\n suffix = ' GB';\n value /= 1073741824;\n } else if (value >= 1048576) {\n suffix = ' MB';\n value /= 1048576;\n } else if (value >= 1024) {\n suffix = ' KB';\n value /= 1024;\n }\n return Math.round(value * 100) / 100 + suffix;\n }\n var ImageBrowser = FileBrowser.extend({\n init: function (element, options) {\n var that = this;\n options = options || {};\n FileBrowser.fn.init.call(that, element, options);\n that.element.addClass('k-imagebrowser');\n },\n options: {\n name: 'ImageBrowser',\n fileTypes: '*.png,*.gif,*.jpg,*.jpeg'\n },\n value: function () {\n var that = this, selected = that._selectedItem(), path, imageUrl = that.options.transport.imageUrl;\n if (selected && selected.get(TYPEFIELD) === 'f') {\n path = concatPaths(that.path(), selected.get(NAMEFIELD)).replace(trimSlashesRegExp, '');\n if (imageUrl) {\n path = isFunction(imageUrl) ? imageUrl(path) : kendo.format(imageUrl, encodeURIComponent(path));\n }\n return path;\n }\n },\n _fileUpload: function (e) {\n var that = this, options = that.options, fileTypes = options.fileTypes, filterRegExp = new RegExp(('(' + fileTypes.split(',').join(')|(') + ')').replace(/\\*\\./g, '.*.'), 'i'), fileName = e.files[0].name, fileNameField = NAMEFIELD, sizeField = SIZEFIELD, file;\n if (filterRegExp.test(fileName)) {\n e.data = { path: that.path() };\n file = that._createFile(fileName);\n if (!file) {\n e.preventDefault();\n } else {\n file._uploading = true;\n that.upload.one('success', function (e) {\n delete file._uploading;\n var model = that._insertFileToList(file);\n model.set(fileNameField, e.response[that._getFieldName(fileNameField)]);\n model.set(sizeField, e.response[that._getFieldName(sizeField)]);\n that._tiles = that.listView.items().filter('[' + kendo.attr('type') + '=f]');\n that._scroll();\n });\n }\n } else {\n e.preventDefault();\n that._showMessage(kendo.format(options.messages.invalidFileType, fileName, fileTypes));\n }\n },\n _content: function () {\n var that = this;\n that.list = $('<ul class=\"k-reset k-floats k-tiles\" />').appendTo(that.element).on('scroll' + NS, proxy(that._scroll, that)).on('dblclick' + NS, 'li', proxy(that._dblClick, that));\n that.listView = new kendo.ui.ListView(that.list, {\n dataSource: that.dataSource,\n template: that._itemTmpl(),\n editTemplate: that._editTmpl(),\n selectable: true,\n autoBind: false,\n dataBinding: function (e) {\n that.toolbar.find('.k-i-close').parent().addClass('k-state-disabled');\n if (e.action === 'remove' || e.action === 'sync') {\n e.preventDefault();\n }\n },\n dataBound: function () {\n if (that.dataSource.view().length) {\n that._tiles = this.items().filter('[' + kendo.attr('type') + '=f]');\n that._scroll();\n } else {\n this.wrapper.append(EMPTYTILE({ text: that.options.messages.emptyFolder }));\n }\n },\n change: proxy(that._listViewChange, that)\n });\n },\n _dataSource: function () {\n var that = this, options = that.options, transport = options.transport, typeSortOrder = extend({}, DEFAULTSORTORDER), nameSortOrder = {\n field: NAMEFIELD,\n dir: 'asc'\n }, schema, dataSource = {\n type: transport.type || 'imagebrowser',\n sort: [\n typeSortOrder,\n nameSortOrder\n ]\n };\n if (isPlainObject(transport)) {\n transport.path = proxy(that.path, that);\n dataSource.transport = transport;\n }\n if (isPlainObject(options.schema)) {\n dataSource.schema = options.schema;\n } else if (transport.type && isPlainObject(kendo.data.schemas[transport.type])) {\n schema = kendo.data.schemas[transport.type];\n }\n if (that.dataSource && that._errorHandler) {\n that.dataSource.unbind(ERROR, that._errorHandler);\n } else {\n that._errorHandler = proxy(that._error, that);\n }\n that.dataSource = kendo.data.DataSource.create(dataSource).bind(ERROR, that._errorHandler);\n },\n _loadImage: function (li) {\n var that = this, element = $(li), dataItem = that.dataSource.getByUid(element.attr(kendo.attr('uid'))), name = dataItem.get(NAMEFIELD), thumbnailUrl = that.options.transport.thumbnailUrl, img = $('<img />', { alt: name }), urlJoin = '?';\n if (dataItem._uploading) {\n return;\n }\n img.hide().on('load' + NS, function () {\n $(this).prev().remove().end().addClass('k-image').fadeIn();\n });\n element.find('.k-i-loading').after(img);\n if (isFunction(thumbnailUrl)) {\n thumbnailUrl = thumbnailUrl(that.path(), encodeURIComponent(name));\n } else {\n if (thumbnailUrl.indexOf('?') >= 0) {\n urlJoin = '&';\n }\n thumbnailUrl = thumbnailUrl + urlJoin + 'path=' + encodeURIComponent(that.path() + name);\n if (dataItem._override) {\n thumbnailUrl += '&_=' + new Date().getTime();\n delete dataItem._override;\n }\n }\n img.attr('src', thumbnailUrl);\n li.loaded = true;\n },\n _scroll: function () {\n var that = this;\n if (that.options.transport && that.options.transport.thumbnailUrl) {\n clearTimeout(that._timeout);\n that._timeout = setTimeout(function () {\n var height = kendo._outerHeight(that.list), viewTop = that.list.scrollTop(), viewBottom = viewTop + height;\n that._tiles.each(function () {\n var top = offsetTop(this), bottom = top + this.offsetHeight;\n if (top >= viewTop && top < viewBottom || bottom >= viewTop && bottom < viewBottom) {\n that._loadImage(this);\n }\n if (top > viewBottom) {\n return false;\n }\n });\n that._tiles = that._tiles.filter(function () {\n return !this.loaded;\n });\n }, 250);\n }\n },\n _itemTmpl: function () {\n var that = this, html = '<li class=\"k-tile\" ' + kendo.attr('uid') + '=\"#=uid#\" ';\n html += kendo.attr('type') + '=\"${' + TYPEFIELD + '}\">';\n html += '#if(' + TYPEFIELD + ' == \"d\") { #';\n html += '<div class=\"k-thumb\"><span class=\"k-icon k-i-folder\"></span></div>';\n html += '#}else{#';\n if (that.options.transport && that.options.transport.thumbnailUrl) {\n html += '<div class=\"k-thumb\"><span class=\"k-icon k-i-loading\"></span></div>';\n } else {\n html += '<div class=\"k-thumb\"><span class=\"k-icon k-i-file\"></span></div>';\n }\n html += '#}#';\n html += '<strong>${' + NAMEFIELD + '}</strong>';\n html += '#if(' + TYPEFIELD + ' == \"f\") { # <span class=\"k-filesize\">${this.sizeFormatter(' + SIZEFIELD + ')}</span> #}#';\n html += '</li>';\n return proxy(kendo.template(html), { sizeFormatter: sizeFormatter });\n }\n });\n kendo.ui.plugin(ImageBrowser);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.tabstrip', ['kendo.data'], f);\n}(function () {\n var __meta__ = {\n id: 'tabstrip',\n name: 'TabStrip',\n category: 'web',\n description: 'The TabStrip widget displays a collection of tabs with associated tab content.',\n depends: ['data']\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, keys = kendo.keys, map = $.map, each = $.each, trim = $.trim, extend = $.extend, isFunction = kendo.isFunction, template = kendo.template, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, Widget = ui.Widget, excludedNodesRegExp = /^(a|div)$/i, NS = '.kendoTabStrip', IMG = 'img', HREF = 'href', PREV = 'prev', SHOW = 'show', LINK = 'k-link', LAST = 'k-last', CLICK = 'click', ERROR = 'error', EMPTY = ':empty', IMAGE = 'k-image', FIRST = 'k-first', SELECT = 'select', ACTIVATE = 'activate', CONTENT = 'k-content', CONTENTURL = 'contentUrl', MOUSEENTER = 'mouseenter', MOUSELEAVE = 'mouseleave', CONTENTLOAD = 'contentLoad', DISABLEDSTATE = 'k-state-disabled', DEFAULTSTATE = 'k-state-default', ACTIVESTATE = 'k-state-active', FOCUSEDSTATE = 'k-state-focused', HOVERSTATE = 'k-state-hover', TABONTOP = 'k-tab-on-top', NAVIGATABLEITEMS = '.k-item:not(.' + DISABLEDSTATE + ')', HOVERABLEITEMS = '.k-tabstrip-items > ' + NAVIGATABLEITEMS + ':not(.' + ACTIVESTATE + ')', templates = {\n content: template('<div class=\\'k-content\\'#= contentAttributes(data) # role=\\'tabpanel\\'>#= content(item) #</div>'),\n itemWrapper: template('<#= tag(item) # class=\\'k-link\\'#= contentUrl(item) ##= textAttributes(item) #>' + '#= image(item) ##= sprite(item) ##= text(item) #' + '</#= tag(item) #>'),\n item: template('<li class=\\'#= wrapperCssClass(group, item) #\\' role=\\'tab\\' #=item.active ? \"aria-selected=\\'true\\'\" : \\'\\'#>' + '#= itemWrapper(data) #' + '</li>'),\n image: template('<img class=\\'k-image\\' alt=\\'\\' src=\\'#= imageUrl #\\' />'),\n sprite: template('<span class=\\'k-sprite #= spriteCssClass #\\'></span>'),\n empty: template('')\n }, rendering = {\n wrapperCssClass: function (group, item) {\n var result = 'k-item', index = item.index;\n if (item.enabled === false) {\n result += ' k-state-disabled';\n } else {\n result += ' k-state-default';\n }\n if (index === 0) {\n result += ' k-first';\n }\n if (index == group.length - 1) {\n result += ' k-last';\n }\n return result;\n },\n textAttributes: function (item) {\n return item.url ? ' href=\\'' + item.url + '\\'' : '';\n },\n text: function (item) {\n return item.encoded === false ? item.text : kendo.htmlEncode(item.text);\n },\n tag: function (item) {\n return item.url ? 'a' : 'span';\n },\n contentAttributes: function (content) {\n return content.active !== true ? ' style=\\'display:none\\' aria-hidden=\\'true\\' aria-expanded=\\'false\\'' : '';\n },\n content: function (item) {\n return item.content ? item.content : item.contentUrl ? '' : ' ';\n },\n contentUrl: function (item) {\n return item.contentUrl ? kendo.attr('content-url') + '=\"' + item.contentUrl + '\"' : '';\n }\n };\n function updateTabClasses(tabs) {\n tabs.children(IMG).addClass(IMAGE);\n tabs.children('a').addClass(LINK).children(IMG).addClass(IMAGE);\n tabs.filter(':not([disabled]):not([class*=k-state-disabled])').addClass(DEFAULTSTATE);\n tabs.filter('li[disabled]').addClass(DISABLEDSTATE).removeAttr('disabled');\n tabs.filter(':not([class*=k-state])').children('a').filter(':focus').parent().addClass(ACTIVESTATE + ' ' + TABONTOP);\n tabs.attr('role', 'tab');\n tabs.filter('.' + ACTIVESTATE).attr('aria-selected', true);\n tabs.each(function () {\n var item = $(this);\n if (!item.children('.' + LINK).length) {\n item.contents().filter(function () {\n return !this.nodeName.match(excludedNodesRegExp) && !(this.nodeType == 3 && !trim(this.nodeValue));\n }).wrapAll('<span UNSELECTABLE=\\'on\\' class=\\'' + LINK + '\\'/>');\n }\n });\n }\n function updateFirstLast(tabGroup) {\n var tabs = tabGroup.children('.k-item');\n tabs.filter('.k-first:not(:first-child)').removeClass(FIRST);\n tabs.filter('.k-last:not(:last-child)').removeClass(LAST);\n tabs.filter(':first-child').addClass(FIRST);\n tabs.filter(':last-child').addClass(LAST);\n }\n function scrollButtonHtml(buttonClass, iconClass) {\n return '<span class=\\'k-button k-button-icon k-button-bare k-tabstrip-' + buttonClass + '\\' unselectable=\\'on\\'><span class=\\'k-icon ' + iconClass + '\\'></span></span>';\n }\n var TabStrip = Widget.extend({\n init: function (element, options) {\n var that = this, value;\n Widget.fn.init.call(that, element, options);\n that._animations(that.options);\n options = that.options;\n that._contentUrls = options.contentUrls || [];\n that._wrapper();\n that._isRtl = kendo.support.isRtl(that.wrapper);\n that._tabindex();\n that._updateClasses();\n that._dataSource();\n if (options.dataSource) {\n that.dataSource.fetch();\n }\n that._tabPosition();\n that._scrollable();\n if (that._contentUrls.length) {\n that.wrapper.find('.k-tabstrip-items > .k-item').each(function (index, item) {\n var url = that._contentUrls[index];\n if (typeof url === 'string') {\n $(item).find('>.' + LINK).data(CONTENTURL, url);\n }\n });\n } else {\n that._contentUrls.length = that.tabGroup.find('li.k-item').length;\n }\n that.wrapper.on(MOUSEENTER + NS + ' ' + MOUSELEAVE + NS, HOVERABLEITEMS, that._toggleHover).on('focus' + NS, $.proxy(that._active, that)).on('blur' + NS, function () {\n that._current(null);\n });\n that._keyDownProxy = $.proxy(that._keydown, that);\n if (options.navigatable) {\n that.wrapper.on('keydown' + NS, that._keyDownProxy);\n }\n if (that.options.value) {\n value = that.options.value;\n }\n that.wrapper.children('.k-tabstrip-items').on(CLICK + NS, '.k-state-disabled .k-link', false).on(CLICK + NS, ' > ' + NAVIGATABLEITEMS, function (e) {\n var wr = that.wrapper[0];\n if (wr !== document.activeElement) {\n var msie = kendo.support.browser.msie;\n if (msie) {\n try {\n wr.setActive();\n } catch (j) {\n wr.focus();\n }\n } else {\n wr.focus();\n }\n }\n if (that._click($(e.currentTarget))) {\n e.preventDefault();\n }\n });\n var selectedItems = that.tabGroup.children('li.' + ACTIVESTATE), content = that.contentHolder(selectedItems.index());\n if (selectedItems[0] && content.length > 0 && content[0].childNodes.length === 0) {\n that.activateTab(selectedItems.eq(0));\n }\n that.element.attr('role', 'tablist');\n if (that.element[0].id) {\n that._ariaId = that.element[0].id + '_ts_active';\n }\n that.value(value);\n kendo.notify(that);\n },\n _active: function () {\n var item = this.tabGroup.children().filter('.' + ACTIVESTATE);\n item = item[0] ? item : this._endItem('first');\n if (item[0]) {\n this._current(item);\n }\n },\n _endItem: function (action) {\n return this.tabGroup.children(NAVIGATABLEITEMS)[action]();\n },\n _item: function (item, action) {\n var endItem;\n if (action === PREV) {\n endItem = 'last';\n } else {\n endItem = 'first';\n }\n if (!item) {\n return this._endItem(endItem);\n }\n item = item[action]();\n if (!item[0]) {\n item = this._endItem(endItem);\n }\n if (item.hasClass(DISABLEDSTATE)) {\n item = this._item(item, action);\n }\n return item;\n },\n _current: function (candidate) {\n var that = this, focused = that._focused, id = that._ariaId;\n if (candidate === undefined) {\n return focused;\n }\n if (focused) {\n if (focused[0].id === id) {\n focused.removeAttr('id');\n }\n focused.removeClass(FOCUSEDSTATE);\n }\n if (candidate) {\n if (!candidate.hasClass(ACTIVESTATE)) {\n candidate.addClass(FOCUSEDSTATE);\n }\n that.element.removeAttr('aria-activedescendant');\n id = candidate[0].id || id;\n if (id) {\n candidate.attr('id', id);\n that.element.attr('aria-activedescendant', id);\n }\n }\n that._focused = candidate;\n },\n _keydown: function (e) {\n var that = this, key = e.keyCode, current = that._current(), rtl = that._isRtl, action;\n if (e.target != e.currentTarget) {\n return;\n }\n if (key == keys.DOWN || key == keys.RIGHT) {\n action = rtl ? PREV : 'next';\n } else if (key == keys.UP || key == keys.LEFT) {\n action = rtl ? 'next' : PREV;\n } else if (key == keys.ENTER || key == keys.SPACEBAR) {\n that._click(current);\n e.preventDefault();\n } else if (key == keys.HOME) {\n that._click(that._endItem('first'));\n e.preventDefault();\n return;\n } else if (key == keys.END) {\n that._click(that._endItem('last'));\n e.preventDefault();\n return;\n }\n if (action) {\n that._click(that._item(current, action));\n e.preventDefault();\n }\n },\n _dataSource: function () {\n var that = this;\n if (that.dataSource && that._refreshHandler) {\n that.dataSource.unbind('change', that._refreshHandler);\n } else {\n that._refreshHandler = $.proxy(that.refresh, that);\n }\n that.dataSource = kendo.data.DataSource.create(that.options.dataSource).bind('change', that._refreshHandler);\n },\n setDataSource: function (dataSource) {\n var that = this;\n that.options.dataSource = dataSource;\n that._dataSource();\n that.dataSource.fetch();\n },\n _animations: function (options) {\n if (options && 'animation' in options && !options.animation) {\n options.animation = {\n open: { effects: {} },\n close: { effects: {} }\n };\n }\n },\n refresh: function (e) {\n var that = this, options = that.options, text = kendo.getter(options.dataTextField), content = kendo.getter(options.dataContentField), contentUrl = kendo.getter(options.dataContentUrlField), image = kendo.getter(options.dataImageUrlField), url = kendo.getter(options.dataUrlField), sprite = kendo.getter(options.dataSpriteCssClass), idx, tabs = [], tab, action, view = that.dataSource.view(), length;\n e = e || {};\n action = e.action;\n if (action) {\n view = e.items;\n }\n for (idx = 0, length = view.length; idx < length; idx++) {\n tab = { text: text(view[idx]) };\n if (options.dataContentField) {\n tab.content = content(view[idx]);\n }\n if (options.dataContentUrlField) {\n tab.contentUrl = contentUrl(view[idx]);\n }\n if (options.dataUrlField) {\n tab.url = url(view[idx]);\n }\n if (options.dataImageUrlField) {\n tab.imageUrl = image(view[idx]);\n }\n if (options.dataSpriteCssClass) {\n tab.spriteCssClass = sprite(view[idx]);\n }\n tabs[idx] = tab;\n }\n if (e.action == 'add') {\n if (e.index < that.tabGroup.children().length) {\n that.insertBefore(tabs, that.tabGroup.children().eq(e.index));\n } else {\n that.append(tabs);\n }\n } else if (e.action == 'remove') {\n for (idx = 0; idx < view.length; idx++) {\n that.remove(e.index);\n }\n } else if (e.action == 'itemchange') {\n idx = that.dataSource.view().indexOf(view[0]);\n if (e.field === options.dataTextField) {\n that.tabGroup.children().eq(idx).find('.k-link').text(view[0].get(e.field));\n }\n if (e.field === options.dataUrlField) {\n that._contentUrls[idx] = view[0].get(e.field);\n }\n } else {\n that.trigger('dataBinding');\n that.remove('li');\n that._contentUrls = [];\n that.append(tabs);\n that.trigger('dataBound');\n }\n },\n value: function (value) {\n var that = this;\n if (value !== undefined) {\n if (value != that.value()) {\n that.tabGroup.children().each(function () {\n if ($.trim($(this).text()) == value) {\n that.select(this);\n }\n });\n }\n } else {\n return that.select().text();\n }\n },\n items: function () {\n return this.tabGroup[0].children;\n },\n setOptions: function (options) {\n var that = this, animation = that.options.animation;\n that._animations(options);\n if (options.contentUrls) {\n that._contentUrls = options.contentUrls;\n }\n options.animation = extend(true, animation, options.animation);\n if (options.navigatable) {\n that.wrapper.on('keydown' + NS, that._keyDownProxy);\n } else {\n that.wrapper.off('keydown' + NS, that._keyDownProxy);\n }\n Widget.fn.setOptions.call(that, options);\n },\n events: [\n SELECT,\n ACTIVATE,\n SHOW,\n ERROR,\n CONTENTLOAD,\n 'change',\n 'dataBinding',\n 'dataBound'\n ],\n options: {\n name: 'TabStrip',\n dataTextField: '',\n dataContentField: '',\n dataImageUrlField: '',\n dataUrlField: '',\n dataSpriteCssClass: '',\n dataContentUrlField: '',\n tabPosition: 'top',\n animation: {\n open: {\n effects: 'expand:vertical fadeIn',\n duration: 200\n },\n close: { duration: 200 }\n },\n collapsible: false,\n navigatable: true,\n contentUrls: false,\n scrollable: { distance: 200 }\n },\n destroy: function () {\n var that = this, scrollWrap = that.scrollWrap;\n Widget.fn.destroy.call(that);\n if (that._refreshHandler) {\n that.dataSource.unbind('change', that._refreshHandler);\n }\n that.wrapper.off(NS);\n that.wrapper.children('.k-tabstrip-items').off(NS);\n if (that._scrollableModeActive) {\n that._scrollPrevButton.off().remove();\n that._scrollNextButton.off().remove();\n }\n kendo.destroy(that.wrapper);\n scrollWrap.children('.k-tabstrip').unwrap();\n },\n select: function (element) {\n var that = this;\n if (arguments.length === 0) {\n return that.tabGroup.children('li.' + ACTIVESTATE);\n }\n if (!isNaN(element)) {\n element = that.tabGroup.children().get(element);\n }\n element = that.tabGroup.find(element);\n $(element).each(function (index, item) {\n item = $(item);\n if (!item.hasClass(ACTIVESTATE) && !that.trigger(SELECT, {\n item: item[0],\n contentElement: that.contentHolder(item.index())[0]\n })) {\n that.activateTab(item);\n }\n });\n return that;\n },\n enable: function (element, state) {\n this._toggleDisabled(element, state !== false);\n return this;\n },\n disable: function (element) {\n this._toggleDisabled(element, false);\n return this;\n },\n reload: function (element) {\n element = this.tabGroup.find(element);\n var that = this;\n var contentUrls = that._contentUrls;\n element.each(function () {\n var item = $(this), contentUrl = item.find('.' + LINK).data(CONTENTURL) || contentUrls[item.index()], content = that.contentHolder(item.index());\n if (contentUrl) {\n that.ajaxRequest(item, content, null, contentUrl);\n }\n });\n return that;\n },\n append: function (tab) {\n var that = this, inserted = that._create(tab);\n each(inserted.tabs, function (idx) {\n var contents = inserted.contents[idx];\n that.tabGroup.append(this);\n if (that.options.tabPosition == 'bottom') {\n that.tabGroup.before(contents);\n } else if (that._scrollableModeActive) {\n that._scrollPrevButton.before(contents);\n } else {\n that.wrapper.append(contents);\n }\n that.angular('compile', function () {\n return { elements: [contents] };\n });\n });\n updateFirstLast(that.tabGroup);\n that._updateContentElements();\n that.resize(true);\n return that;\n },\n _appendUrlItem: function (url) {\n this._contentUrls.push(url);\n },\n _moveUrlItem: function (from, to) {\n this._contentUrls.splice(to, 0, this._contentUrls.splice(from, 1)[0]);\n },\n _removeUrlItem: function (index) {\n this._contentUrls.splice(index, 1);\n },\n insertBefore: function (tab, referenceTab) {\n if ($(tab).is($(referenceTab))) {\n referenceTab = this.tabGroup.find(referenceTab).next();\n } else {\n referenceTab = this.tabGroup.find(referenceTab);\n }\n var that = this, inserted = that._create(tab), referenceContent = that.element.find('#' + referenceTab.attr('aria-controls'));\n each(inserted.tabs, function (idx) {\n var contents = inserted.contents[idx];\n var fromIndex = inserted.newTabsCreated ? that._contentUrls.length - (inserted.tabs.length - idx) : $(contents).index() - 1;\n referenceTab.before(this);\n referenceContent.before(contents);\n that._moveUrlItem(fromIndex, $(this).index());\n that.angular('compile', function () {\n return { elements: [contents] };\n });\n });\n updateFirstLast(that.tabGroup);\n that._updateContentElements(inserted.newTabsCreated);\n that.resize(true);\n return that;\n },\n insertAfter: function (tab, referenceTab) {\n if ($(tab).is($(referenceTab))) {\n referenceTab = this.tabGroup.find(referenceTab).prev();\n } else {\n referenceTab = this.tabGroup.find(referenceTab);\n }\n var that = this, inserted = that._create(tab), referenceContent = that.element.find('#' + referenceTab.attr('aria-controls'));\n each(inserted.tabs, function (idx) {\n var contents = inserted.contents[idx];\n var fromIndex = inserted.newTabsCreated ? that._contentUrls.length - (inserted.tabs.length - idx) : $(contents).index() - 1;\n referenceTab.after(this);\n referenceContent.after(contents);\n that._moveUrlItem(fromIndex, $(this).index());\n that.angular('compile', function () {\n return { elements: [contents] };\n });\n });\n updateFirstLast(that.tabGroup);\n that._updateContentElements(inserted.newTabsCreated);\n that.resize(true);\n return that;\n },\n remove: function (elements) {\n var that = this;\n var type = typeof elements;\n var contents;\n if (type === 'string') {\n elements = that.tabGroup.find(elements);\n } else if (type === 'number') {\n elements = that.tabGroup.children().eq(elements);\n }\n contents = elements.map(function () {\n var idx = $(this).index();\n var content = that.contentElement(idx);\n kendo.destroy(content);\n that._removeUrlItem(idx);\n return content;\n });\n elements.remove();\n contents.empty();\n contents.remove();\n that._updateContentElements();\n that.resize(true);\n return that;\n },\n _create: function (tab) {\n var that = this, tabs, contents, content, newTabsCreated = false;\n tab = tab instanceof kendo.data.ObservableArray ? tab.toJSON() : tab;\n if ($.isPlainObject(tab) || $.isArray(tab)) {\n tab = $.isArray(tab) ? tab : [tab];\n newTabsCreated = true;\n tabs = map(tab, function (value, idx) {\n that._appendUrlItem(tab[idx].contentUrl || null);\n return $(TabStrip.renderItem({\n group: that.tabGroup,\n item: extend(value, { index: idx })\n }));\n });\n contents = map(tab, function (value, idx) {\n if (typeof value.content == 'string' || value.contentUrl) {\n return $(TabStrip.renderContent({ item: extend(value, { index: idx }) }));\n }\n });\n } else {\n if (typeof tab == 'string' && tab[0] != '<') {\n tabs = that.element.find(tab);\n } else {\n tabs = $(tab);\n }\n contents = $();\n tabs.each(function () {\n if (/k-tabstrip-items/.test(this.parentNode.className)) {\n var element = that.element.find('#' + this.getAttribute('aria-controls'));\n content = element;\n } else {\n content = $('<div class=\\'' + CONTENT + '\\'/>');\n }\n contents = contents.add(content);\n });\n updateTabClasses(tabs);\n }\n return {\n tabs: tabs,\n contents: contents,\n newTabsCreated: newTabsCreated\n };\n },\n _toggleDisabled: function (element, enable) {\n element = this.tabGroup.find(element);\n element.each(function () {\n $(this).toggleClass(DEFAULTSTATE, enable).toggleClass(DISABLEDSTATE, !enable);\n });\n },\n _updateClasses: function () {\n var that = this, tabs, activeItem, activeTab;\n that.wrapper.addClass('k-widget k-header k-tabstrip');\n that.tabGroup = that.wrapper.children('ul').addClass('k-tabstrip-items k-reset');\n if (!that.tabGroup[0]) {\n that.tabGroup = $('<ul class=\\'k-tabstrip-items k-reset\\'/>').appendTo(that.wrapper);\n }\n tabs = that.tabGroup.find('li').addClass('k-item');\n if (tabs.length) {\n activeItem = tabs.filter('.' + ACTIVESTATE).index();\n activeTab = activeItem >= 0 ? activeItem : undefined;\n that.tabGroup.contents().filter(function () {\n return this.nodeType == 3 && !trim(this.nodeValue);\n }).remove();\n }\n if (activeItem >= 0) {\n tabs.eq(activeItem).addClass(TABONTOP);\n }\n that.contentElements = that.wrapper.children('div');\n that.contentElements.addClass(CONTENT).eq(activeTab).addClass(ACTIVESTATE).css({ display: 'block' });\n if (tabs.length) {\n updateTabClasses(tabs);\n updateFirstLast(that.tabGroup);\n that._updateContentElements(true);\n }\n },\n _elementId: function (element, idx) {\n var elementId = element.attr('id');\n var wrapperId = this.element.attr('id');\n if (!elementId || elementId.indexOf(wrapperId + '-') > -1) {\n var tabStripID = (wrapperId || kendo.guid()) + '-';\n return tabStripID + (idx + 1);\n }\n return elementId;\n },\n _updateContentElements: function (isInitialUpdate) {\n var that = this, contentUrls = that._contentUrls, items = that.tabGroup.find('.k-item'), contentElements = that.wrapper.children('div'), _elementId = that._elementId.bind(that);\n if (contentElements.length && items.length > contentElements.length) {\n contentElements.each(function (idx) {\n var id = _elementId($(this), idx);\n var item = items.filter('[aria-controls=' + (this.id || 0) + ']')[0];\n if (!item && isInitialUpdate) {\n item = items[idx];\n }\n if (item) {\n item.setAttribute('aria-controls', id);\n }\n this.setAttribute('id', id);\n });\n } else {\n items.each(function (idx) {\n var currentContent = contentElements.eq(idx);\n var id = _elementId(currentContent, idx);\n this.setAttribute('aria-controls', id);\n if (!currentContent.length && contentUrls[idx]) {\n $('<div class=\\'' + CONTENT + '\\'/>').appendTo(that.wrapper).attr('id', id);\n } else {\n currentContent.attr('id', id);\n if (!$(this).children('.k-loading')[0] && !contentUrls[idx]) {\n $('<span class=\\'k-loading k-complete\\'/>').prependTo(this);\n }\n }\n currentContent.attr('role', 'tabpanel');\n currentContent.filter(':not(.' + ACTIVESTATE + ')').attr('aria-hidden', true).attr('aria-expanded', false);\n currentContent.filter('.' + ACTIVESTATE).attr('aria-expanded', true);\n });\n }\n that.contentElements = that.contentAnimators = that.wrapper.children('div');\n that.tabsHeight = outerHeight(that.tabGroup) + parseInt(that.wrapper.css('border-top-width'), 10) + parseInt(that.wrapper.css('border-bottom-width'), 10);\n if (kendo.kineticScrollNeeded && kendo.mobile.ui.Scroller) {\n kendo.touchScroller(that.contentElements);\n that.contentElements = that.contentElements.children('.km-scroll-container');\n }\n },\n _wrapper: function () {\n var that = this;\n if (that.element.is('ul')) {\n that.wrapper = that.element.wrapAll('<div />').parent();\n } else {\n that.wrapper = that.element;\n }\n that.scrollWrap = that.wrapper.parent('.k-tabstrip-wrapper');\n if (!that.scrollWrap[0]) {\n that.scrollWrap = that.wrapper.wrapAll('<div class=\\'k-tabstrip-wrapper\\' />').parent();\n }\n },\n _tabPosition: function () {\n var that = this, tabPosition = that.options.tabPosition;\n that.wrapper.addClass('k-floatwrap k-tabstrip-' + tabPosition);\n if (tabPosition == 'bottom') {\n that.tabGroup.appendTo(that.wrapper);\n }\n that.resize(true);\n },\n _setContentElementsDimensions: function () {\n var that = this, tabPosition = that.options.tabPosition;\n if (tabPosition == 'left' || tabPosition == 'right') {\n var contentDivs = that.wrapper.children('.k-content'), activeDiv = contentDivs.filter(':visible'), marginStyleProperty = 'margin-' + tabPosition, tabGroup = that.tabGroup, margin = outerWidth(tabGroup);\n var minHeight = Math.ceil(tabGroup.height()) - parseInt(activeDiv.css('padding-top'), 10) - parseInt(activeDiv.css('padding-bottom'), 10) - parseInt(activeDiv.css('border-top-width'), 10) - parseInt(activeDiv.css('border-bottom-width'), 10);\n setTimeout(function () {\n contentDivs.css(marginStyleProperty, margin).css('min-height', minHeight);\n });\n }\n },\n _resize: function () {\n this._setContentElementsDimensions();\n this._scrollable();\n },\n _sizeScrollWrap: function (element) {\n if (element.is(':visible')) {\n var tabPosition = this.options.tabPosition;\n var h = Math.floor(outerHeight(element, true)) + (tabPosition === 'left' || tabPosition === 'right' ? 2 : this.tabsHeight);\n this.scrollWrap.css('height', h).css('height');\n }\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVERSTATE, e.type == MOUSEENTER);\n },\n _click: function (item) {\n var that = this, link = item.find('.' + LINK), href = link.attr(HREF), collapse = that.options.collapsible, index = item.index(), contentHolder = that.contentHolder(index), prevent, isAnchor;\n if (item.closest('.k-widget')[0] != that.wrapper[0]) {\n return;\n }\n if (item.is('.' + DISABLEDSTATE + (!collapse ? ',.' + ACTIVESTATE : ''))) {\n return true;\n }\n isAnchor = link.data(CONTENTURL) || that._contentUrls[index] || href && (href.charAt(href.length - 1) == '#' || href.indexOf('#' + that.element[0].id + '-') != -1);\n prevent = !href || isAnchor;\n if (that.tabGroup.children('[data-animating]').length) {\n return prevent;\n }\n if (that.trigger(SELECT, {\n item: item[0],\n contentElement: contentHolder[0]\n })) {\n return true;\n }\n if (prevent === false) {\n return;\n }\n if (collapse && item.is('.' + ACTIVESTATE)) {\n that.deactivateTab(item);\n return true;\n }\n if (that.activateTab(item)) {\n prevent = true;\n }\n return prevent;\n },\n _scrollable: function () {\n var that = this, options = that.options, wrapperOffsetWidth, tabGroupScrollWidth, scrollPrevButton, scrollNextButton;\n if (that._scrollableAllowed()) {\n that.wrapper.addClass('k-tabstrip-scrollable');\n wrapperOffsetWidth = that.wrapper[0].offsetWidth;\n tabGroupScrollWidth = that.tabGroup[0].scrollWidth;\n if (tabGroupScrollWidth > wrapperOffsetWidth && !that._scrollableModeActive) {\n that._nowScrollingTabs = false;\n that._isRtl = kendo.support.isRtl(that.element);\n var mouseDown = kendo.support.mobileOS ? 'touchstart' : 'mousedown';\n var mouseUp = kendo.support.mobileOS ? 'touchend' : 'mouseup';\n that.wrapper.append(scrollButtonHtml('prev', 'k-i-arrow-60-left') + scrollButtonHtml('next', 'k-i-arrow-60-right'));\n scrollPrevButton = that._scrollPrevButton = that.wrapper.children('.k-tabstrip-prev');\n scrollNextButton = that._scrollNextButton = that.wrapper.children('.k-tabstrip-next');\n that.tabGroup.css({\n marginLeft: outerWidth(scrollPrevButton) + 9,\n marginRight: outerWidth(scrollNextButton) + 12\n });\n scrollPrevButton.on(mouseDown + NS, function () {\n that._nowScrollingTabs = true;\n that._scrollTabsByDelta(options.scrollable.distance * (that._isRtl ? 1 : -1));\n });\n scrollNextButton.on(mouseDown + NS, function () {\n that._nowScrollingTabs = true;\n that._scrollTabsByDelta(options.scrollable.distance * (that._isRtl ? -1 : 1));\n });\n scrollPrevButton.add(scrollNextButton).on(mouseUp + NS, function () {\n that._nowScrollingTabs = false;\n });\n that._scrollableModeActive = true;\n that._toggleScrollButtons();\n } else if (that._scrollableModeActive && tabGroupScrollWidth <= wrapperOffsetWidth) {\n that._scrollableModeActive = false;\n that.wrapper.removeClass('k-tabstrip-scrollable');\n that._scrollPrevButton.off().remove();\n that._scrollNextButton.off().remove();\n that.tabGroup.css({\n marginLeft: '',\n marginRight: ''\n });\n } else if (!that._scrollableModeActive) {\n that.wrapper.removeClass('k-tabstrip-scrollable');\n } else {\n that._toggleScrollButtons();\n }\n }\n },\n _scrollableAllowed: function () {\n var options = this.options;\n return options.scrollable && !isNaN(options.scrollable.distance) && (options.tabPosition == 'top' || options.tabPosition == 'bottom');\n },\n _scrollTabsToItem: function (item) {\n var that = this, tabGroup = that.tabGroup, currentScrollOffset = tabGroup.scrollLeft(), itemWidth = outerWidth(item), itemOffset = that._isRtl ? item.position().left : item.position().left - tabGroup.children().first().position().left, tabGroupWidth = tabGroup[0].offsetWidth, tabGroupPadding = Math.ceil(parseFloat(tabGroup.css('padding-left'))), itemPosition;\n if (that._isRtl) {\n if (itemOffset < 0) {\n itemPosition = currentScrollOffset + itemOffset - (tabGroupWidth - currentScrollOffset) - tabGroupPadding;\n } else if (itemOffset + itemWidth > tabGroupWidth) {\n itemPosition = currentScrollOffset + itemOffset - itemWidth + tabGroupPadding * 2;\n }\n } else {\n if (currentScrollOffset + tabGroupWidth < itemOffset + itemWidth) {\n itemPosition = itemOffset + itemWidth - tabGroupWidth + tabGroupPadding * 2;\n } else if (currentScrollOffset > itemOffset) {\n itemPosition = itemOffset - tabGroupPadding;\n }\n }\n tabGroup.finish().animate({ 'scrollLeft': itemPosition }, 'fast', 'linear', function () {\n that._toggleScrollButtons();\n });\n },\n _scrollTabsByDelta: function (delta) {\n var that = this;\n var tabGroup = that.tabGroup;\n var scrLeft = tabGroup.scrollLeft();\n tabGroup.finish().animate({ 'scrollLeft': scrLeft + delta }, 'fast', 'linear', function () {\n if (that._nowScrollingTabs) {\n that._scrollTabsByDelta(delta);\n } else {\n that._toggleScrollButtons();\n }\n });\n },\n _toggleScrollButtons: function () {\n var that = this, ul = that.tabGroup, scrollLeft = ul.scrollLeft();\n that._scrollPrevButton.toggle(that._isRtl ? scrollLeft < ul[0].scrollWidth - ul[0].offsetWidth - 1 : scrollLeft !== 0);\n that._scrollNextButton.toggle(that._isRtl ? scrollLeft !== 0 : scrollLeft < ul[0].scrollWidth - ul[0].offsetWidth - 1);\n },\n deactivateTab: function (item) {\n var that = this, animationSettings = that.options.animation, animation = animationSettings.open, close = extend({}, animationSettings.close), hasCloseAnimation = close && 'effects' in close;\n item = that.tabGroup.find(item);\n close = extend(hasCloseAnimation ? close : extend({ reverse: true }, animation), { hide: true });\n if (kendo.size(animation.effects)) {\n item.kendoAddClass(DEFAULTSTATE, { duration: animation.duration });\n item.kendoRemoveClass(ACTIVESTATE, { duration: animation.duration });\n } else {\n item.addClass(DEFAULTSTATE);\n item.removeClass(ACTIVESTATE);\n }\n item.removeAttr('aria-selected');\n that.contentAnimators.filter('.' + ACTIVESTATE).kendoStop(true, true).kendoAnimate(close).removeClass(ACTIVESTATE).attr('aria-hidden', true);\n },\n activateTab: function (item) {\n if (this.tabGroup.children('[data-animating]').length) {\n return;\n }\n item = this.tabGroup.find(item);\n var that = this, animationSettings = that.options.animation, animation = animationSettings.open, close = extend({}, animationSettings.close), hasCloseAnimation = close && 'effects' in close, neighbours = item.parent().children(), oldTab = neighbours.filter('.' + ACTIVESTATE), itemIndex = neighbours.index(item);\n close = extend(hasCloseAnimation ? close : extend({ reverse: true }, animation), { hide: true });\n if (kendo.size(animation.effects)) {\n oldTab.kendoRemoveClass(ACTIVESTATE, { duration: close.duration });\n item.kendoRemoveClass(HOVERSTATE, { duration: close.duration });\n } else {\n oldTab.removeClass(ACTIVESTATE);\n item.removeClass(HOVERSTATE);\n }\n var contentAnimators = that.contentAnimators;\n if (that.inRequest) {\n that.xhr.abort();\n that.inRequest = false;\n }\n if (contentAnimators.length === 0) {\n that.tabGroup.find('.' + TABONTOP).removeClass(TABONTOP);\n item.addClass(TABONTOP).css('z-index');\n item.addClass(ACTIVESTATE);\n that._current(item);\n that.trigger('change');\n if (that._scrollableModeActive) {\n that._scrollTabsToItem(item);\n }\n return false;\n }\n var visibleContents = contentAnimators.filter('.' + ACTIVESTATE), contentHolder = that.contentHolder(itemIndex), contentElement = contentHolder.closest('.k-content');\n that.tabsHeight = outerHeight(that.tabGroup) + parseInt(that.wrapper.css('border-top-width'), 10) + parseInt(that.wrapper.css('border-bottom-width'), 10);\n that._sizeScrollWrap(visibleContents);\n if (contentHolder.length === 0) {\n visibleContents.removeClass(ACTIVESTATE).attr('aria-hidden', true).kendoStop(true, true).kendoAnimate(close);\n return false;\n }\n item.attr('data-animating', true);\n var isAjaxContent = (item.children('.' + LINK).data(CONTENTURL) || that._contentUrls[itemIndex] || false) && contentHolder.is(EMPTY), showContentElement = function () {\n that.tabGroup.find('.' + TABONTOP).removeClass(TABONTOP);\n item.addClass(TABONTOP).css('z-index');\n if (kendo.size(animation.effects)) {\n oldTab.kendoAddClass(DEFAULTSTATE, { duration: animation.duration });\n item.kendoAddClass(ACTIVESTATE, { duration: animation.duration });\n } else {\n oldTab.addClass(DEFAULTSTATE);\n item.addClass(ACTIVESTATE);\n }\n oldTab.removeAttr('aria-selected');\n item.attr('aria-selected', true);\n that._current(item);\n that._sizeScrollWrap(contentElement);\n contentElement.addClass(ACTIVESTATE).removeAttr('aria-hidden').kendoStop(true, true).attr('aria-expanded', true).kendoAnimate(extend({\n init: function () {\n that.trigger(SHOW, {\n item: item[0],\n contentElement: contentHolder[0]\n });\n kendo.resize(contentHolder);\n }\n }, animation, {\n complete: function () {\n item.removeAttr('data-animating');\n that.trigger(ACTIVATE, {\n item: item[0],\n contentElement: contentHolder[0]\n });\n kendo.resize(contentHolder);\n that.scrollWrap.css('height', '').css('height');\n }\n }));\n }, showContent = function () {\n if (!isAjaxContent) {\n showContentElement();\n that.trigger('change');\n } else {\n item.removeAttr('data-animating');\n that.ajaxRequest(item, contentHolder, function () {\n item.attr('data-animating', true);\n showContentElement();\n that.trigger('change');\n });\n }\n if (that._scrollableModeActive) {\n that._scrollTabsToItem(item);\n }\n };\n visibleContents.removeClass(ACTIVESTATE);\n visibleContents.attr('aria-hidden', true);\n visibleContents.attr('aria-expanded', false);\n if (visibleContents.length) {\n visibleContents.kendoStop(true, true).kendoAnimate(extend({ complete: showContent }, close));\n } else {\n showContent();\n }\n return true;\n },\n contentElement: function (itemIndex) {\n if (isNaN(itemIndex - 0)) {\n return undefined;\n }\n var contentElements = this.contentElements && this.contentElements[0] && !kendo.kineticScrollNeeded ? this.contentElements : this.contentAnimators;\n var id = $(this.tabGroup.children()[itemIndex]).attr('aria-controls');\n if (contentElements) {\n for (var i = 0, len = contentElements.length; i < len; i++) {\n if (contentElements.eq(i).closest('.k-content')[0].id == id) {\n return contentElements[i];\n }\n }\n }\n return undefined;\n },\n contentHolder: function (itemIndex) {\n var contentElement = $(this.contentElement(itemIndex)), scrollContainer = contentElement.children('.km-scroll-container');\n return kendo.support.touch && scrollContainer[0] ? scrollContainer : contentElement;\n },\n ajaxRequest: function (element, content, complete, url) {\n element = this.tabGroup.find(element);\n var that = this, xhr = $.ajaxSettings.xhr, link = element.find('.' + LINK), data = {}, halfWidth = element.width() / 2, fakeProgress = false, statusIcon = element.find('.k-loading').removeClass('k-complete');\n if (!statusIcon[0]) {\n statusIcon = $('<span class=\\'k-loading\\'/>').prependTo(element);\n }\n var endState = halfWidth * 2 - statusIcon.width();\n var oldProgressAnimation = function () {\n statusIcon.animate({ marginLeft: (parseInt(statusIcon.css('marginLeft'), 10) || 0) < halfWidth ? endState : 0 }, 500, oldProgressAnimation);\n };\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n setTimeout(oldProgressAnimation, 40);\n }\n url = url || link.data(CONTENTURL) || that._contentUrls[element.index()] || link.attr(HREF);\n that.inRequest = true;\n var ajaxOptions = {\n type: 'GET',\n cache: false,\n url: url,\n dataType: 'html',\n data: data,\n xhr: function () {\n var current = this, request = xhr(), event = current.progressUpload ? 'progressUpload' : current.progress ? 'progress' : false;\n if (request) {\n $.each([\n request,\n request.upload\n ], function () {\n if (this.addEventListener) {\n this.addEventListener('progress', function (evt) {\n if (event) {\n current[event](evt);\n }\n }, false);\n }\n });\n }\n current.noProgress = !(window.XMLHttpRequest && 'upload' in new XMLHttpRequest());\n return request;\n },\n progress: function (evt) {\n if (evt.lengthComputable) {\n var percent = parseInt(evt.loaded / evt.total * 100, 10) + '%';\n statusIcon.stop(true).addClass('k-progress').css({\n 'width': percent,\n 'marginLeft': 0\n });\n }\n },\n error: function (xhr, status) {\n if (that.trigger('error', {\n xhr: xhr,\n status: status\n })) {\n this.complete();\n }\n },\n stopProgress: function () {\n clearInterval(fakeProgress);\n statusIcon.stop(true).addClass('k-progress')[0].style.cssText = '';\n },\n complete: function (xhr) {\n that.inRequest = false;\n if (this.noProgress) {\n setTimeout(this.stopProgress, 500);\n } else {\n this.stopProgress();\n }\n if (xhr.statusText == 'abort') {\n statusIcon.remove();\n }\n },\n success: function (data) {\n statusIcon.addClass('k-complete');\n try {\n var current = this, loaded = 10;\n if (current.noProgress) {\n statusIcon.width(loaded + '%');\n fakeProgress = setInterval(function () {\n current.progress({\n lengthComputable: true,\n loaded: Math.min(loaded, 100),\n total: 100\n });\n loaded += 10;\n }, 40);\n }\n that.angular('cleanup', function () {\n return { elements: content.get() };\n });\n kendo.destroy(content);\n content.html(data);\n } catch (e) {\n var console = window.console;\n if (console && console.error) {\n console.error(e.name + ': ' + e.message + ' in ' + url);\n }\n this.error(this.xhr, 'error');\n }\n if (complete) {\n complete.call(that, content);\n }\n that.angular('compile', function () {\n return { elements: content.get() };\n });\n that.trigger(CONTENTLOAD, {\n item: element[0],\n contentElement: content[0]\n });\n }\n };\n if (typeof url === 'object') {\n ajaxOptions = $.extend(true, {}, ajaxOptions, url);\n if (isFunction(ajaxOptions.url)) {\n ajaxOptions.url = ajaxOptions.url();\n }\n }\n that.xhr = $.ajax(ajaxOptions);\n }\n });\n extend(TabStrip, {\n renderItem: function (options) {\n options = extend({\n tabStrip: {},\n group: {}\n }, options);\n var empty = templates.empty, item = options.item;\n return templates.item(extend(options, {\n image: item.imageUrl ? templates.image : empty,\n sprite: item.spriteCssClass ? templates.sprite : empty,\n itemWrapper: templates.itemWrapper\n }, rendering));\n },\n renderContent: function (options) {\n return templates.content(extend(options, rendering));\n }\n });\n kendo.ui.plugin(TabStrip);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('util/undoredostack', ['kendo.core'], f);\n}(function () {\n (function (kendo) {\n var UndoRedoStack = kendo.Observable.extend({\n init: function (options) {\n kendo.Observable.fn.init.call(this, options);\n this.clear();\n },\n events: [\n 'undo',\n 'redo'\n ],\n push: function (command) {\n this.stack = this.stack.slice(0, this.currentCommandIndex + 1);\n this.currentCommandIndex = this.stack.push(command) - 1;\n },\n undo: function () {\n if (this.canUndo()) {\n var command = this.stack[this.currentCommandIndex--];\n command.undo();\n this.trigger('undo', { command: command });\n }\n },\n redo: function () {\n if (this.canRedo()) {\n var command = this.stack[++this.currentCommandIndex];\n command.redo();\n this.trigger('redo', { command: command });\n }\n },\n clear: function () {\n this.stack = [];\n this.currentCommandIndex = -1;\n },\n canUndo: function () {\n return this.currentCommandIndex >= 0;\n },\n canRedo: function () {\n return this.currentCommandIndex != this.stack.length - 1;\n }\n });\n kendo.deepExtend(kendo, { util: { UndoRedoStack: UndoRedoStack } });\n }(kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/main', [\n 'util/undoredostack',\n 'kendo.combobox',\n 'kendo.dropdownlist',\n 'kendo.window',\n 'kendo.colorpicker'\n ], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, Class = kendo.Class, Widget = kendo.ui.Widget, os = kendo.support.mobileOS, browser = kendo.support.browser, extend = $.extend, proxy = $.proxy, deepExtend = kendo.deepExtend, keys = kendo.keys;\n var SELECT = 'select';\n var SELECT_OVERLAY_SELECTOR = 'select.k-select-overlay';\n var ToolTemplate = Class.extend({\n init: function (options) {\n this.options = options;\n },\n getHtml: function () {\n var options = this.options;\n return kendo.template(options.template, { useWithBlock: false })(options);\n }\n });\n var EditorUtils = {\n editorWrapperTemplate: '<table cellspacing=\"4\" cellpadding=\"0\" class=\"k-widget k-editor k-header\" role=\"presentation\"><tbody>' + '<tr role=\"presentation\"><td class=\"k-editor-toolbar-wrap\" role=\"presentation\"><ul class=\"k-editor-toolbar\" role=\"toolbar\" /></td></tr>' + '<tr><td class=\"k-editable-area\" /></tr>' + '</tbody></table>',\n buttonTemplate: '# var iconCssClass= \"k-icon k-i-\" + kendo.toHyphens(data.cssClass.replace(\"k-\", \"\"));#' + '<a tabindex=\"0\" role=\"button\" class=\"k-tool\"' + '#= data.popup ? \" data-popup\" : \"\" #' + ' unselectable=\"on\" title=\"#= data.title #\"><span unselectable=\"on\" class=\"k-tool-icon #= iconCssClass #\"></span><span class=\"k-tool-text\">#= data.title #</span></a>',\n colorPickerTemplate: '<div class=\"k-colorpicker k-icon k-i-#= data.cssClass.replace(\"k-\", \"\") #\" />',\n comboBoxTemplate: '<select title=\"#= data.title #\" class=\"#= data.cssClass #\" />',\n dropDownListTemplate: '<span class=\"k-editor-dropdown\"><select title=\"#= data.title #\" class=\"#= data.cssClass #\" /></span>',\n separatorTemplate: '<span class=\"k-separator\" />',\n overflowAnchorTemplate: '<a href=\"\" role=\"button\" class=\"k-tool k-overflow-anchor\" data-popup' + ' unselectable=\"on\"><span unselectable=\"on\" class=\"k-icon k-i-more-vertical\"></span></a>',\n formatByName: function (name, format) {\n for (var i = 0; i < format.length; i++) {\n if ($.inArray(name, format[i].tags) >= 0) {\n return format[i];\n }\n }\n },\n getToolCssClass: function (name) {\n var toolCssClassNames = {\n superscript: 'sup-script',\n subscript: 'sub-script',\n justifyLeft: 'align-left',\n justifyCenter: 'align-center',\n justifyRight: 'align-right',\n justifyFull: 'align-justify',\n insertUnorderedList: 'list-unordered',\n insertOrderedList: 'list-ordered',\n 'import': 'login',\n indent: 'indent-increase',\n outdent: 'indent-decrease',\n createLink: 'link-horizontal',\n unlink: 'unlink-horizontal',\n insertImage: 'image',\n insertFile: 'file-add',\n viewHtml: 'html',\n foreColor: 'foreground-color',\n backColor: 'paint',\n createTable: 'table-insert',\n addColumnLeft: 'table-column-insert-left',\n addColumnRight: 'table-column-insert-right',\n addRowAbove: 'table-row-insert-above',\n addRowBelow: 'table-row-insert-below',\n deleteRow: 'table-row-delete',\n deleteColumn: 'table-column-delete',\n tableWizard: 'table-properties',\n tableWizardInsert: 'table-wizard',\n cleanFormatting: 'clear-css'\n };\n var cssClass = toolCssClassNames[name];\n if (cssClass) {\n return cssClass;\n }\n return name;\n },\n registerTool: function (toolName, tool) {\n var toolOptions = tool.options;\n if (toolOptions && toolOptions.template) {\n toolOptions.template.options.cssClass = 'k-' + EditorUtils.getToolCssClass(toolName);\n }\n if (!tool.name) {\n tool.options.name = toolName;\n tool.name = toolName.toLowerCase();\n }\n Editor.defaultTools[toolName] = tool;\n },\n registerFormat: function (formatName, format) {\n Editor.fn.options.formats[formatName] = format;\n }\n };\n var messages = {\n bold: 'Bold',\n italic: 'Italic',\n underline: 'Underline',\n strikethrough: 'Strikethrough',\n superscript: 'Superscript',\n subscript: 'Subscript',\n justifyCenter: 'Center text',\n justifyLeft: 'Align text left',\n justifyRight: 'Align text right',\n justifyFull: 'Justify',\n insertUnorderedList: 'Insert unordered list',\n insertOrderedList: 'Insert ordered list',\n indent: 'Indent',\n outdent: 'Outdent',\n createLink: 'Insert hyperlink',\n unlink: 'Remove hyperlink',\n insertImage: 'Insert image',\n insertFile: 'Insert file',\n insertHtml: 'Insert HTML',\n viewHtml: 'View HTML',\n fontName: 'Select font family',\n fontNameInherit: '(inherited font)',\n fontSize: 'Select font size',\n fontSizeInherit: '(inherited size)',\n formatBlock: 'Format',\n formatting: 'Format',\n foreColor: 'Color',\n backColor: 'Background color',\n style: 'Styles',\n emptyFolder: 'Empty Folder',\n editAreaTitle: 'Editable area. Press F10 for toolbar.',\n uploadFile: 'Upload',\n orderBy: 'Arrange by:',\n orderBySize: 'Size',\n orderByName: 'Name',\n invalidFileType: 'The selected file \"{0}\" is not valid. Supported file types are {1}.',\n deleteFile: 'Are you sure you want to delete \"{0}\"?',\n overwriteFile: 'A file with name \"{0}\" already exists in the current directory. Do you want to overwrite it?',\n directoryNotFound: 'A directory with this name was not found.',\n imageWebAddress: 'Web address',\n imageAltText: 'Alternate text',\n imageWidth: 'Width (px)',\n imageHeight: 'Height (px)',\n fileWebAddress: 'Web address',\n fileTitle: 'Title',\n linkWebAddress: 'Web address',\n linkText: 'Text',\n linkToolTip: 'ToolTip',\n linkOpenInNewWindow: 'Open link in new window',\n dialogUpdate: 'Update',\n dialogInsert: 'Insert',\n dialogOk: 'Ok',\n dialogCancel: 'Cancel',\n cleanFormatting: 'Clean formatting',\n createTable: 'Create table',\n createTableHint: 'Create a {0} x {1} table',\n addColumnLeft: 'Add column on the left',\n addColumnRight: 'Add column on the right',\n addRowAbove: 'Add row above',\n addRowBelow: 'Add row below',\n deleteRow: 'Delete row',\n deleteColumn: 'Delete column',\n tableWizard: 'Table Wizard',\n tableTab: 'Table',\n cellTab: 'Cell',\n accessibilityTab: 'Accessibility',\n caption: 'Caption',\n summary: 'Summary',\n width: 'Width',\n height: 'Height',\n cellSpacing: 'Cell Spacing',\n cellPadding: 'Cell Padding',\n cellMargin: 'Cell Margin',\n alignment: 'Alignment',\n background: 'Background',\n cssClass: 'CSS Class',\n id: 'ID',\n border: 'Border',\n borderStyle: 'Border Style',\n collapseBorders: 'Collapse borders',\n wrapText: 'Wrap text',\n associateCellsWithHeaders: 'Associate cells with headers',\n alignLeft: 'Align Left',\n alignCenter: 'Align Center',\n alignRight: 'Align Right',\n alignLeftTop: 'Align Left Top',\n alignCenterTop: 'Align Center Top',\n alignRightTop: 'Align Right Top',\n alignLeftMiddle: 'Align Left Middle',\n alignCenterMiddle: 'Align Center Middle',\n alignRightMiddle: 'Align Right Middle',\n alignLeftBottom: 'Align Left Bottom',\n alignCenterBottom: 'Align Center Bottom',\n alignRightBottom: 'Align Right Bottom',\n alignRemove: 'Remove Alignment',\n columns: 'Columns',\n rows: 'Rows',\n selectAllCells: 'Select All Cells',\n exportAs: 'Export As',\n 'import': 'Import'\n };\n var supportedBrowser = !os || os.ios && os.flatVersion >= 500 || !os.ios && typeof document.documentElement.contentEditable != 'undefined';\n var toolGroups = {\n basic: [\n 'bold',\n 'italic',\n 'underline'\n ],\n alignment: [\n 'justifyLeft',\n 'justifyCenter',\n 'justifyRight'\n ],\n lists: [\n 'insertUnorderedList',\n 'insertOrderedList'\n ],\n indenting: [\n 'indent',\n 'outdent'\n ],\n links: [\n 'createLink',\n 'unlink'\n ],\n tables: [\n 'tableWizard',\n 'createTable',\n 'addColumnLeft',\n 'addColumnRight',\n 'addRowAbove',\n 'addRowBelow',\n 'deleteRow',\n 'deleteColumn'\n ]\n };\n var Editor = Widget.extend({\n init: function (element, options) {\n var that = this, value, editorNS = kendo.ui.editor, toolbarContainer, toolbarOptions, type;\n var domElement;\n var dom = editorNS.Dom;\n if (!supportedBrowser) {\n return;\n }\n Widget.fn.init.call(that, element, options);\n that.options = deepExtend({}, that.options, options);\n that.options.tools = that.options.tools.slice();\n element = that.element;\n domElement = element[0];\n type = dom.name(domElement);\n this._registerHandler(element.closest('form'), 'submit', proxy(that.update, that, undefined));\n toolbarOptions = extend({}, that.options);\n toolbarOptions.editor = that;\n if (type == 'textarea') {\n that._wrapTextarea();\n toolbarContainer = that.wrapper.find('.k-editor-toolbar');\n if (domElement.id) {\n toolbarContainer.attr('aria-controls', domElement.id);\n }\n } else {\n that.element.attr('contenteditable', true).addClass('k-widget k-editor k-editor-inline');\n toolbarOptions.popup = true;\n toolbarContainer = $('<ul class=\"k-editor-toolbar\" role=\"toolbar\" />').insertBefore(element);\n }\n that.toolbar = new editorNS.Toolbar(toolbarContainer[0], toolbarOptions);\n that.toolbar.bindTo(that);\n if (type == 'textarea') {\n setTimeout(function () {\n var heightStyle = that.wrapper[0].style.height;\n var expectedHeight = parseInt(heightStyle, 10);\n var actualHeight = that.wrapper.height();\n if (heightStyle.indexOf('px') > 0 && !isNaN(expectedHeight) && actualHeight > expectedHeight) {\n that.wrapper.height(expectedHeight - (actualHeight - expectedHeight));\n }\n });\n }\n that._resizable();\n that._initializeContentElement(that);\n that.keyboard = new editorNS.Keyboard([\n new editorNS.BackspaceHandler(that),\n new editorNS.TypingHandler(that),\n new editorNS.SystemHandler(that),\n new editorNS.SelectAllHandler(that)\n ]);\n that.clipboard = new editorNS.Clipboard(this);\n that.undoRedoStack = new kendo.util.UndoRedoStack();\n if (options && options.value) {\n value = options.value;\n } else if (that.textarea) {\n value = domElement.value;\n if (that.options.encoded && $.trim(domElement.defaultValue).length) {\n value = domElement.defaultValue;\n }\n value = value.replace(/[\\r\\n\\v\\f\\t ]+/gi, ' ');\n } else {\n value = domElement.innerHTML;\n }\n that.value(value || kendo.ui.editor.emptyElementContent);\n this._registerHandler(document, {\n 'mousedown': function () {\n that._endTyping();\n },\n 'mouseup': function (e) {\n that._mouseup(e);\n }\n });\n that._initializeImmutables();\n that.toolbar.resize();\n kendo.notify(that);\n },\n setOptions: function (options) {\n var editor = this;\n Widget.fn.setOptions.call(editor, options);\n if (options.tools) {\n editor.toolbar.bindTo(editor);\n }\n },\n _endTyping: function () {\n var keyboard = this.keyboard;\n try {\n if (keyboard.isTypingInProgress()) {\n keyboard.endTyping(true);\n this.saveSelection();\n }\n } catch (e) {\n }\n },\n _selectionChange: function () {\n this._selectionStarted = false;\n this.saveSelection();\n this.trigger('select', {});\n },\n _resizable: function () {\n var resizable = this.options.resizable;\n var isResizable = $.isPlainObject(resizable) ? resizable.content === undefined || resizable.content === true : resizable;\n if (isResizable && this.textarea) {\n $('<div class=\\'k-resize-handle\\'><span class=\\'k-icon k-i-arrow-45-down-right\\' /></div>').insertAfter(this.textarea);\n this.wrapper.kendoResizable(extend({}, this.options.resizable, {\n start: function (e) {\n var editor = this.editor = $(e.currentTarget).closest('.k-editor');\n this.initialSize = editor.height();\n editor.find('td:last').append('<div class=\\'k-overlay\\' />');\n },\n resize: function (e) {\n var delta = e.y.initialDelta;\n var newSize = this.initialSize + delta;\n var min = this.options.min || 0;\n var max = this.options.max || Infinity;\n newSize = Math.min(max, Math.max(min, newSize));\n this.editor.height(newSize);\n },\n resizeend: function () {\n this.editor.find('.k-overlay').remove();\n this.editor = null;\n }\n }));\n if (kendo.support.mobileOS.ios) {\n var resizableWidget = this.wrapper.getKendoResizable();\n resizableWidget.draggable.options.ignore = SELECT_OVERLAY_SELECTOR;\n }\n }\n },\n _initializeTableResizing: function () {\n var editor = this;\n kendo.ui.editor.TableResizing.create(editor);\n editor._showTableResizeHandlesProxy = proxy(editor._showTableResizeHandles, editor);\n editor.bind(SELECT, editor._showTableResizeHandlesProxy);\n },\n _destroyTableResizing: function () {\n var editor = this;\n var tableResizing = editor.tableResizing;\n if (tableResizing) {\n tableResizing.destroy();\n editor.tableResizing = null;\n }\n if (editor._showTableResizeHandlesProxy) {\n editor.unbind(SELECT, editor._showTableResizeHandlesProxy);\n }\n },\n _showTableResizeHandles: function () {\n var editor = this;\n var tableResizing = editor.tableResizing;\n if (tableResizing) {\n tableResizing.showResizeHandles();\n }\n },\n _initializeColumnResizing: function () {\n kendo.ui.editor.ColumnResizing.create(this);\n },\n _destroyColumnResizing: function () {\n var editor = this;\n if (editor.columnResizing) {\n editor.columnResizing.destroy();\n editor.columnResizing = null;\n }\n },\n _initializeRowResizing: function () {\n kendo.ui.editor.RowResizing.create(this);\n },\n _destroyRowResizing: function () {\n var editor = this;\n if (editor.rowResizing) {\n editor.rowResizing.destroy();\n editor.rowResizing = null;\n }\n },\n _wrapTextarea: function () {\n var that = this, textarea = that.element, w = textarea[0].style.width, h = textarea[0].style.height, template = EditorUtils.editorWrapperTemplate, editorWrap = $(template).insertBefore(textarea).width(w).height(h), editArea = editorWrap.find('.k-editable-area');\n textarea.attr('autocomplete', 'off').appendTo(editArea).addClass('k-content k-raw-content').css('display', 'none');\n that.textarea = textarea;\n that.wrapper = editorWrap;\n },\n _createContentElement: function (stylesheets) {\n var editor = this;\n var iframe, wnd, doc;\n var textarea = editor.textarea;\n var specifiedDomain = editor.options.domain;\n var domain = specifiedDomain || document.domain;\n var domainScript = '';\n var src = 'javascript:\"\"';\n if (specifiedDomain || domain != location.hostname) {\n domainScript = '<script>document.domain=\"' + domain + '\"</script>';\n src = 'javascript:document.write(\\'' + domainScript + '\\')';\n }\n textarea.hide();\n iframe = $('<iframe />', {\n title: editor.options.messages.editAreaTitle,\n frameBorder: '0'\n })[0];\n $(iframe).css('display', '').addClass('k-content').attr('tabindex', textarea[0].tabIndex).insertBefore(textarea);\n iframe.src = src;\n wnd = iframe.contentWindow || iframe;\n doc = wnd.document || iframe.contentDocument;\n $(iframe).one('load', function () {\n editor.toolbar.decorateFrom(doc.body);\n });\n doc.open();\n doc.write('<!DOCTYPE html><html><head>' + '<meta charset=\\'utf-8\\' />' + '<style>' + 'html,body{padding:0;margin:0;height:100%;min-height:100%;}' + 'body{box-sizing:border-box;font-size:12px;font-family:Verdana,Geneva,sans-serif;margin-top:-1px;padding:5px .4em 0;' + 'word-wrap: break-word;-webkit-nbsp-mode: space;-webkit-line-break: after-white-space;' + (kendo.support.isRtl(textarea) ? 'direction:rtl;' : '') + (browser.msie || browser.edge ? 'height:auto;' : '') + (os.ios ? 'word-break:break-all;' : '') + '}' + 'h1{font-size:2em;margin:.67em 0}h2{font-size:1.5em}h3{font-size:1.16em}h4{font-size:1em}h5{font-size:.83em}h6{font-size:.7em}' + 'p{margin:0 0 1em;}.k-marker{display:none;}.k-paste-container,.Apple-style-span{position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden}' + 'ul,ol{padding-left:2.5em}' + 'span{-ms-high-contrast-adjust:none;}' + 'a{color:#00a}' + 'code{font-size:1.23em}' + 'telerik\\\\3Ascript{display: none;}' + '.k-table{width:100%;border-spacing:0;margin: 0 0 1em;}' + '.k-table td{min-width:1px;padding:.2em .3em;}' + '.k-table,.k-table td{outline:0;border: 1px dotted #ccc;}' + '.k-table p{margin:0;padding:0;}' + '.k-column-resize-handle-wrapper {position: absolute; height: 10px; width:10px; cursor: col-resize; z-index: 2;}' + '.k-column-resize-handle {width: 100%; height: 100%;}' + '.k-column-resize-handle > .k-column-resize-marker {width:2px; height:100%; margin:0 auto; background-color:#00b0ff; display:none; opacity:0.8;}' + '.k-row-resize-handle-wrapper {position: absolute; cursor: row-resize; z-index:2; width: 10px; height: 10px;}' + '.k-row-resize-handle {display: table; width: 100%; height: 100%;}' + '.k-row-resize-marker-wrapper{display: table-cell; height:100%; width:100%; margin:0; padding:0; vertical-align: middle;}' + '.k-row-resize-marker{margin: 0; padding:0; width:100%; height:2px; background-color: #00b0ff; opacity:0.8; display:none;}' + '.k-table-resize-handle-wrapper {position: absolute; background-color: #fff; border: 1px solid #000; z-index: 100; width: 5px; height: 5px;}' + '.k-table-resize-handle {width: 100%; height: 100%;}' + '.k-table-resize-handle.k-resize-east{cursor:e-resize;}' + '.k-table-resize-handle.k-resize-north{cursor:n-resize;}' + '.k-table-resize-handle.k-resize-northeast{cursor:ne-resize;}' + '.k-table-resize-handle.k-resize-northwest{cursor:nw-resize;}' + '.k-table-resize-handle.k-resize-south{cursor:s-resize;}' + '.k-table-resize-handle.k-resize-southeast{cursor:se-resize;}' + '.k-table-resize-handle.k-resize-southwest{cursor:sw-resize;}' + '.k-table-resize-handle.k-resize-west{cursor:w-resize;}' + '.k-table.k-table-resizing{opacity:0.6;}' + 'k\\\\:script{display:none;}' + '</style>' + domainScript + '<script>(function(d,c){d[c](\\'header\\'),d[c](\\'article\\'),d[c](\\'nav\\'),d[c](\\'section\\'),d[c](\\'footer\\');})(document, \\'createElement\\');</script>' + $.map(stylesheets, function (href) {\n return '<link rel=\\'stylesheet\\' href=\\'' + href + '\\'>';\n }).join('') + '</head><body autocorrect=\\'off\\' contenteditable=\\'true\\'></body></html>');\n doc.close();\n return wnd;\n },\n _blur: function () {\n var textarea = this.textarea;\n var old = textarea ? textarea.val() : this._oldValue;\n var value = this.options.encoded ? this.encodedValue() : this.value();\n this.update();\n if (textarea) {\n textarea.trigger('blur');\n }\n if (value != old) {\n this.trigger('change');\n }\n },\n _spellCorrect: function (editor) {\n var beforeCorrection;\n var falseTrigger = false;\n this._registerHandler(editor.body, {\n 'contextmenu': function () {\n editor.one('select', function () {\n beforeCorrection = null;\n });\n editor._spellCorrectTimeout = setTimeout(function () {\n beforeCorrection = new kendo.ui.editor.RestorePoint(editor.getRange(), editor.body);\n falseTrigger = false;\n }, 10);\n },\n 'input': function () {\n if (!beforeCorrection) {\n return;\n }\n if (kendo.support.browser.mozilla && !falseTrigger) {\n falseTrigger = true;\n return;\n }\n kendo.ui.editor._finishUpdate(editor, beforeCorrection);\n }\n });\n },\n _registerHandler: function (element, type, handler) {\n var editor = this;\n var NS = '.kendoEditor';\n var eventNames;\n var i;\n element = $(element);\n if (!this._handlers) {\n this._handlers = [];\n }\n if (element.length) {\n if ($.isPlainObject(type)) {\n for (var t in type) {\n if (type.hasOwnProperty(t)) {\n this._registerHandler(element, t, type[t]);\n }\n }\n } else {\n eventNames = kendo.applyEventMap(type).split(' ');\n for (i = 0; i < eventNames.length; i++) {\n editor._handlers.push({\n element: element,\n type: eventNames[i] + NS,\n handler: handler\n });\n element.on(eventNames[i] + NS, handler);\n }\n }\n }\n },\n _deregisterHandlers: function () {\n var handlers = this._handlers;\n for (var i = 0; i < handlers.length; i++) {\n var h = handlers[i];\n h.element.off(h.type, h.handler);\n }\n this._handlers = [];\n },\n _initializeContentElement: function () {\n var editor = this;\n var doc;\n var blurTrigger;\n var mousedownTrigger;\n if (editor.textarea) {\n editor.window = editor._createContentElement(editor.options.stylesheets);\n doc = editor.document = editor.window.contentDocument || editor.window.document;\n editor.body = doc.body;\n blurTrigger = editor.window;\n mousedownTrigger = doc;\n this._registerHandler(doc, 'mouseup', proxy(this._mouseup, this));\n } else {\n editor.window = window;\n doc = editor.document = document;\n editor.body = editor.element[0];\n blurTrigger = editor.body;\n mousedownTrigger = editor.body;\n editor.toolbar.decorateFrom(editor.body);\n }\n this._registerHandler(blurTrigger, 'blur', proxy(this._blur, this));\n editor._registerHandler(mousedownTrigger, 'down', proxy(editor._mousedown, editor));\n try {\n doc.execCommand('enableInlineTableEditing', null, false);\n } catch (e) {\n }\n if (kendo.support.touch) {\n this._registerHandler(doc, {\n 'keydown': function () {\n if (kendo._activeElement() != doc.body) {\n editor.window.focus();\n }\n }\n });\n }\n this._spellCorrect(editor);\n this._registerHandler(editor.body, {\n 'keydown': function (e) {\n var range;\n if ((e.keyCode === keys.BACKSPACE || e.keyCode === keys.DELETE) && editor.body.getAttribute('contenteditable') !== 'true') {\n return false;\n }\n if (e.keyCode === keys.F10) {\n setTimeout(proxy(editor.toolbar.focus, editor.toolbar), 100);\n e.preventDefault();\n return;\n } else if (e.keyCode == keys.LEFT || e.keyCode == keys.RIGHT) {\n range = editor.getRange();\n var left = e.keyCode == keys.LEFT;\n var container = range[left ? 'startContainer' : 'endContainer'];\n var offset = range[left ? 'startOffset' : 'endOffset'];\n var direction = left ? -1 : 1;\n var next = offset + direction;\n var nextChar = left ? next : offset;\n if (container.nodeType == 3 && container.nodeValue[nextChar] == '\\uFEFF') {\n range.setStart(container, next);\n range.collapse(true);\n editor.selectRange(range);\n }\n }\n var tools = editor.toolbar.tools;\n var toolName = editor.keyboard.toolFromShortcut(tools, e);\n var toolOptions = toolName ? tools[toolName].options : {};\n if (toolName && !toolOptions.keyPressCommand) {\n e.preventDefault();\n if (!/^(undo|redo)$/.test(toolName)) {\n editor.keyboard.endTyping(true);\n }\n editor.trigger('keydown', e);\n editor.exec(toolName);\n editor._runPostContentKeyCommands(e);\n return false;\n }\n editor.keyboard.clearTimeout();\n editor.keyboard.keydown(e);\n },\n 'keypress': function (e) {\n setTimeout(function () {\n editor._runPostContentKeyCommands(e);\n editor._showTableResizeHandles();\n }, 0);\n },\n 'keyup': function (e) {\n var selectionCodes = [\n keys.BACKSPACE,\n keys.TAB,\n keys.PAGEUP,\n keys.PAGEDOWN,\n keys.END,\n keys.HOME,\n keys.LEFT,\n keys.UP,\n keys.RIGHT,\n keys.DOWN,\n keys.INSERT,\n keys.DELETE\n ];\n if ($.inArray(e.keyCode, selectionCodes) > -1 || e.keyCode == 65 && e.ctrlKey && !e.altKey && !e.shiftKey) {\n editor._selectionChange();\n }\n editor.keyboard.keyup(e);\n },\n 'click': function (e) {\n var dom = kendo.ui.editor.Dom, range;\n if (dom.name(e.target) === 'img') {\n range = editor.createRange();\n range.selectNode(e.target);\n editor.selectRange(range);\n }\n },\n 'cut copy paste': function (e) {\n editor.clipboard['on' + e.type](e);\n },\n 'focusin': function () {\n if (editor.body.hasAttribute('contenteditable')) {\n $(this).addClass('k-state-active');\n editor.toolbar.show();\n }\n },\n 'focusout': function () {\n setTimeout(function () {\n var active = kendo._activeElement();\n var body = editor.body;\n var toolbar = editor.toolbar;\n if (toolbar.options.popup) {\n var toolbarContainerElement = toolbar.window.element.get(0);\n if (toolbarContainerElement && !($.contains(toolbarContainerElement, active) || toolbarContainerElement == active)) {\n toolbar.preventPopupHide = false;\n }\n }\n if (active != body && !$.contains(body, active) && !$(active).is('.k-editortoolbar-dragHandle') && !toolbar.focused()) {\n $(body).removeClass('k-state-active');\n toolbar.hide();\n }\n }, 10);\n }\n });\n editor._initializeColumnResizing();\n editor._initializeRowResizing();\n editor._initializeTableResizing();\n },\n _initializeImmutables: function () {\n var that = this, editorNS = kendo.ui.editor;\n if (that.options.immutables) {\n that.immutables = new editorNS.Immutables(that);\n }\n },\n _mousedown: function (e) {\n var editor = this;\n editor._selectionStarted = true;\n if (browser.gecko) {\n return;\n }\n var target = $(e.target);\n if ((e.which == 2 || e.which == 1 && e.ctrlKey) && target.is('a[href]')) {\n window.open(target.attr('href'), '_new');\n }\n },\n _mouseup: function (e) {\n var that = this;\n if (kendo.support.mobileOS.ios && e && $(e.target).is(SELECT_OVERLAY_SELECTOR)) {\n return;\n }\n if (that._selectionStarted) {\n setTimeout(function () {\n that._selectionChange();\n }, 1);\n }\n },\n _runPostContentKeyCommands: function (e) {\n var range = this.getRange();\n var tools = this.keyboard.toolsFromShortcut(this.toolbar.tools, e);\n for (var i = 0; i < tools.length; i++) {\n var tool = tools[i];\n var o = tool.options;\n if (!o.keyPressCommand) {\n continue;\n }\n var cmd = new o.command({ range: range });\n if (cmd.changesContent()) {\n this.keyboard.endTyping(true);\n this.exec(tool.name);\n }\n }\n },\n refresh: function () {\n var that = this;\n if (that.textarea) {\n that._destroyResizings();\n that.textarea.val(that.value());\n that.wrapper.find('iframe').remove();\n that._initializeContentElement(that);\n that.value(that.textarea.val());\n }\n },\n events: [\n 'select',\n 'change',\n 'execute',\n 'error',\n 'paste',\n 'keydown',\n 'keyup'\n ],\n options: {\n name: 'Editor',\n messages: messages,\n formats: {},\n encoded: true,\n domain: null,\n resizable: false,\n deserialization: { custom: null },\n serialization: {\n entities: true,\n semantic: true,\n scripts: false\n },\n pasteCleanup: {\n all: false,\n css: false,\n custom: null,\n keepNewLines: false,\n msAllFormatting: false,\n msConvertLists: true,\n msTags: true,\n none: false,\n span: false\n },\n stylesheets: [],\n dialogOptions: {\n modal: true,\n resizable: false,\n draggable: true,\n animation: false\n },\n imageBrowser: null,\n fileBrowser: null,\n fontName: [\n {\n text: 'Arial',\n value: 'Arial,Helvetica,sans-serif'\n },\n {\n text: 'Courier New',\n value: '\\'Courier New\\',Courier,monospace'\n },\n {\n text: 'Georgia',\n value: 'Georgia,serif'\n },\n {\n text: 'Impact',\n value: 'Impact,Charcoal,sans-serif'\n },\n {\n text: 'Lucida Console',\n value: '\\'Lucida Console\\',Monaco,monospace'\n },\n {\n text: 'Tahoma',\n value: 'Tahoma,Geneva,sans-serif'\n },\n {\n text: 'Times New Roman',\n value: '\\'Times New Roman\\',Times,serif'\n },\n {\n text: 'Trebuchet MS',\n value: '\\'Trebuchet MS\\',Helvetica,sans-serif'\n },\n {\n text: 'Verdana',\n value: 'Verdana,Geneva,sans-serif'\n }\n ],\n fontSize: [\n {\n text: '1 (8pt)',\n value: 'xx-small'\n },\n {\n text: '2 (10pt)',\n value: 'x-small'\n },\n {\n text: '3 (12pt)',\n value: 'small'\n },\n {\n text: '4 (14pt)',\n value: 'medium'\n },\n {\n text: '5 (18pt)',\n value: 'large'\n },\n {\n text: '6 (24pt)',\n value: 'x-large'\n },\n {\n text: '7 (36pt)',\n value: 'xx-large'\n }\n ],\n formatBlock: [\n {\n text: 'Paragraph',\n value: 'p'\n },\n {\n text: 'Quotation',\n value: 'blockquote'\n },\n {\n text: 'Heading 1',\n value: 'h1'\n },\n {\n text: 'Heading 2',\n value: 'h2'\n },\n {\n text: 'Heading 3',\n value: 'h3'\n },\n {\n text: 'Heading 4',\n value: 'h4'\n },\n {\n text: 'Heading 5',\n value: 'h5'\n },\n {\n text: 'Heading 6',\n value: 'h6'\n }\n ],\n tools: [].concat.call(['formatting'], toolGroups.basic, toolGroups.alignment, toolGroups.lists, toolGroups.indenting, toolGroups.links, ['insertImage'], toolGroups.tables)\n },\n destroy: function () {\n var editor = this;\n Widget.fn.destroy.call(this);\n this._endTyping(true);\n this._deregisterHandlers();\n clearTimeout(this._spellCorrectTimeout);\n this._focusOutside();\n this.toolbar.destroy();\n editor._destroyUploadWidget();\n editor._destroyResizings();\n kendo.destroy(this.wrapper);\n },\n _destroyResizings: function () {\n var editor = this;\n editor._destroyTableResizing();\n kendo.ui.editor.TableResizing.dispose(editor);\n editor._destroyRowResizing();\n kendo.ui.editor.RowResizing.dispose(editor);\n editor._destroyColumnResizing();\n kendo.ui.editor.ColumnResizing.dispose(editor);\n },\n _focusOutside: function () {\n if (kendo.support.browser.msie && this.textarea) {\n var tempInput = $('<input style=\\'position:fixed;left:1px;top:1px;width:1px;height:1px;font-size:0;border:0;opacity:0\\' />').appendTo(document.body).focus();\n tempInput.blur().remove();\n }\n },\n _destroyUploadWidget: function () {\n var editor = this;\n if (editor._uploadWidget) {\n editor._uploadWidget.destroy();\n editor._uploadWidget = null;\n }\n },\n state: function (toolName) {\n var tool = Editor.defaultTools[toolName];\n var finder = tool && (tool.options.finder || tool.finder);\n var RangeUtils = kendo.ui.editor.RangeUtils;\n var range, textNodes;\n if (finder) {\n range = this.getRange();\n textNodes = RangeUtils.textNodes(range);\n if (!textNodes.length && range.collapsed) {\n textNodes = [range.startContainer];\n }\n return finder.getFormat ? finder.getFormat(textNodes) : finder.isFormatted(textNodes);\n }\n return false;\n },\n value: function (html) {\n var body = this.body, editorNS = kendo.ui.editor, options = this.options, currentHtml = editorNS.Serializer.domToXhtml(body, options.serialization);\n if (html === undefined) {\n return currentHtml;\n }\n if (html == currentHtml) {\n return;\n }\n editorNS.Serializer.htmlToDom(html, body, options.deserialization);\n this.selectionRestorePoint = null;\n this.update();\n this.toolbar.refreshTools();\n },\n saveSelection: function (range) {\n range = range || this.getRange();\n var container = range.commonAncestorContainer, body = this.body;\n if (container == body || $.contains(body, container)) {\n this.selectionRestorePoint = new kendo.ui.editor.RestorePoint(range, body);\n }\n },\n _focusBody: function () {\n var body = this.body;\n var iframe = this.wrapper && this.wrapper.find('iframe')[0];\n var documentElement = this.document.documentElement;\n var activeElement = kendo._activeElement();\n var scrollTop;\n if (iframe) {\n if (activeElement != body && activeElement != iframe) {\n scrollTop = documentElement.scrollTop;\n body.focus();\n documentElement.scrollTop = scrollTop;\n }\n } else {\n scrollTop = body.scrollTop;\n body.focus();\n body.scrollTop = scrollTop;\n }\n },\n restoreSelection: function () {\n this._focusBody();\n if (this.selectionRestorePoint) {\n this.selectRange(this.selectionRestorePoint.toRange());\n }\n },\n focus: function () {\n this.restoreSelection();\n },\n update: function (value) {\n value = value || this.options.encoded ? this.encodedValue() : this.value();\n if (this.textarea) {\n this.textarea.val(value);\n } else {\n this._oldValue = value;\n }\n },\n encodedValue: function () {\n return kendo.ui.editor.Dom.encode(this.value());\n },\n createRange: function (document) {\n return kendo.ui.editor.RangeUtils.createRange(document || this.document);\n },\n getSelection: function () {\n return kendo.ui.editor.SelectionUtils.selectionFromDocument(this.document);\n },\n selectRange: function (range) {\n this._focusBody();\n var selection = this.getSelection();\n selection.removeAllRanges();\n selection.addRange(range);\n this.saveSelection(range);\n },\n getRange: function () {\n var selection = this.getSelection(), range = selection && selection.rangeCount > 0 ? selection.getRangeAt(0) : this.createRange(), doc = this.document;\n if (range.startContainer == doc && range.endContainer == doc && !range.startOffset && !range.endOffset) {\n range.setStart(this.body, 0);\n range.collapse(true);\n }\n return range;\n },\n _containsRange: function (range) {\n var dom = kendo.ui.editor.Dom;\n var body = this.body;\n return range && dom.isAncestorOrSelf(body, range.startContainer) && dom.isAncestorOrSelf(body, range.endContainer);\n },\n selectedHtml: function () {\n return kendo.ui.editor.Serializer.domToXhtml(this.getRange().cloneContents());\n },\n paste: function (html, options) {\n this.focus();\n var command = new kendo.ui.editor.InsertHtmlCommand($.extend({\n range: this.getRange(),\n html: html\n }, options));\n command.editor = this;\n command.exec();\n },\n exec: function (name, params) {\n var that = this;\n var command = null;\n var range, tool, prevented;\n if (!name) {\n throw new Error('kendoEditor.exec(): `name` parameter cannot be empty');\n }\n if (that.body.getAttribute('contenteditable') !== 'true' && name !== 'print' && name !== 'pdf') {\n return false;\n }\n name = name.toLowerCase();\n if (!that.keyboard.isTypingInProgress()) {\n that._focusBody();\n that.selectRange(that._range || that.getRange());\n }\n tool = that.toolbar.toolById(name);\n if (!tool) {\n for (var id in Editor.defaultTools) {\n if (id.toLowerCase() == name) {\n tool = Editor.defaultTools[id];\n break;\n }\n }\n }\n if (tool) {\n range = that.getRange();\n if (tool.command) {\n command = tool.command(extend({\n range: range,\n body: that.body,\n immutables: !!that.immutables\n }, params));\n }\n prevented = that.trigger('execute', {\n name: name,\n command: command\n });\n if (prevented) {\n return;\n }\n if (/^(undo|redo)$/i.test(name)) {\n that.undoRedoStack[name]();\n } else if (command) {\n if (!command.managesUndoRedo) {\n that.undoRedoStack.push(command);\n }\n command.editor = that;\n command.exec();\n if (command.async) {\n command.change = proxy(that._selectionChange, that);\n return;\n }\n }\n that._selectionChange();\n }\n }\n });\n Editor.defaultTools = {\n undo: {\n options: {\n key: 'Z',\n ctrl: true\n }\n },\n redo: {\n options: {\n key: 'Y',\n ctrl: true\n }\n }\n };\n kendo.ui.plugin(Editor);\n var Tool = Class.extend({\n init: function (options) {\n this.options = options;\n },\n initialize: function (ui, options) {\n ui.attr({\n unselectable: 'on',\n title: options.title\n });\n ui.children('.k-tool-text').html(options.title);\n },\n command: function (commandArguments) {\n return new this.options.command(commandArguments);\n },\n update: $.noop\n });\n Tool.exec = function (editor, name, value) {\n editor.exec(name, { value: value });\n };\n var FormatTool = Tool.extend({\n init: function (options) {\n Tool.fn.init.call(this, options);\n },\n command: function (commandArguments) {\n var that = this;\n return new kendo.ui.editor.FormatCommand(extend(commandArguments, { formatter: that.options.formatter }));\n },\n update: function (ui, nodes) {\n var isFormatted = this.options.finder.isFormatted(nodes);\n ui.toggleClass('k-state-selected', isFormatted);\n ui.attr('aria-pressed', isFormatted);\n }\n });\n EditorUtils.registerTool('separator', new Tool({ template: new ToolTemplate({ template: EditorUtils.separatorTemplate }) }));\n var bomFill = browser.msie && browser.version < 9 ? '\\uFEFF' : '';\n var emptyElementContent = '\\uFEFF';\n var emptyTableCellContent = emptyElementContent;\n if (browser.msie && browser.version == 10) {\n emptyTableCellContent = ' ';\n }\n extend(kendo.ui, {\n editor: {\n ToolTemplate: ToolTemplate,\n EditorUtils: EditorUtils,\n Tool: Tool,\n FormatTool: FormatTool,\n _bomFill: bomFill,\n emptyElementContent: emptyElementContent,\n emptyTableCellContent: emptyTableCellContent\n }\n });\n if (kendo.PDFMixin) {\n kendo.PDFMixin.extend(Editor.prototype);\n Editor.prototype._drawPDF = function () {\n return kendo.drawing.drawDOM(this.body, this.options.pdf);\n };\n Editor.prototype.saveAsPDF = function () {\n var progress = new $.Deferred();\n var promise = progress.promise();\n var args = { promise: promise };\n if (this.trigger('pdfExport', args)) {\n return;\n }\n var options = this.options.pdf;\n this._drawPDF(progress).then(function (root) {\n return kendo.drawing.exportPDF(root, options);\n }).done(function (dataURI) {\n kendo.saveAs({\n dataURI: dataURI,\n fileName: options.fileName,\n proxyURL: options.proxyURL,\n forceProxy: options.forceProxy\n });\n progress.resolve();\n }).fail(function (err) {\n progress.reject(err);\n });\n return promise;\n };\n }\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/dom', ['editor/main'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo, map = $.map, extend = $.extend, browser = kendo.support.browser, STYLE = 'style', FLOAT = 'float', CSSFLOAT = 'cssFloat', STYLEFLOAT = 'styleFloat', CLASS = 'class', KMARKER = 'k-marker';\n function makeMap(items) {\n var obj = {}, i, len;\n for (i = 0, len = items.length; i < len; i++) {\n obj[items[i]] = true;\n }\n return obj;\n }\n var empty = makeMap('area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed'.split(',')), nonListBlockElements = 'div,p,h1,h2,h3,h4,h5,h6,address,applet,blockquote,button,center,dd,dir,dl,dt,fieldset,form,frameset,hr,iframe,isindex,map,menu,noframes,noscript,object,pre,script,table,tbody,td,tfoot,th,thead,tr,header,article,nav,footer,section,aside,main,figure,figcaption'.split(','), blockElements = nonListBlockElements.concat([\n 'ul',\n 'ol',\n 'li'\n ]), block = makeMap(blockElements), inlineElements = 'span,em,a,abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,strike,strong,sub,sup,textarea,tt,u,var,data,time,mark,ruby'.split(','), inline = makeMap(inlineElements), fillAttrs = makeMap('checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected'.split(','));\n var normalize = function (node) {\n if (node.nodeType == 1) {\n node.normalize();\n }\n };\n if (browser.msie && browser.version >= 8) {\n normalize = function (parent) {\n if (parent.nodeType == 1 && parent.firstChild) {\n var prev = parent.firstChild, node = prev;\n while (true) {\n node = node.nextSibling;\n if (!node) {\n break;\n }\n if (node.nodeType == 3 && prev.nodeType == 3) {\n node.nodeValue = prev.nodeValue + node.nodeValue;\n Dom.remove(prev);\n }\n prev = node;\n }\n }\n };\n }\n var whitespace = /^\\s+$/, emptyspace = /^[\\n\\r\\t]+$/, rgb = /rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/i, bom = /\\ufeff/g, whitespaceOrBom = /^(\\s+|\\ufeff)$/, persistedScrollTop, cssAttributes = ('color,padding-left,padding-right,padding-top,padding-bottom,' + 'background-color,background-attachment,background-image,background-position,background-repeat,' + 'border-top-style,border-top-width,border-top-color,' + 'border-bottom-style,border-bottom-width,border-bottom-color,' + 'border-left-style,border-left-width,border-left-color,' + 'border-right-style,border-right-width,border-right-color,' + 'font-family,font-size,font-style,font-variant,font-weight,line-height').split(','), htmlRe = /[<>\\&]/g, entityRe = /[\\u00A0-\\u2666<>\\&]/g, entityTable = {\n 34: 'quot',\n 38: 'amp',\n 39: 'apos',\n 60: 'lt',\n 62: 'gt',\n 160: 'nbsp',\n 161: 'iexcl',\n 162: 'cent',\n 163: 'pound',\n 164: 'curren',\n 165: 'yen',\n 166: 'brvbar',\n 167: 'sect',\n 168: 'uml',\n 169: 'copy',\n 170: 'ordf',\n 171: 'laquo',\n 172: 'not',\n 173: 'shy',\n 174: 'reg',\n 175: 'macr',\n 176: 'deg',\n 177: 'plusmn',\n 178: 'sup2',\n 179: 'sup3',\n 180: 'acute',\n 181: 'micro',\n 182: 'para',\n 183: 'middot',\n 184: 'cedil',\n 185: 'sup1',\n 186: 'ordm',\n 187: 'raquo',\n 188: 'frac14',\n 189: 'frac12',\n 190: 'frac34',\n 191: 'iquest',\n 192: 'Agrave',\n 193: 'Aacute',\n 194: 'Acirc',\n 195: 'Atilde',\n 196: 'Auml',\n 197: 'Aring',\n 198: 'AElig',\n 199: 'Ccedil',\n 200: 'Egrave',\n 201: 'Eacute',\n 202: 'Ecirc',\n 203: 'Euml',\n 204: 'Igrave',\n 205: 'Iacute',\n 206: 'Icirc',\n 207: 'Iuml',\n 208: 'ETH',\n 209: 'Ntilde',\n 210: 'Ograve',\n 211: 'Oacute',\n 212: 'Ocirc',\n 213: 'Otilde',\n 214: 'Ouml',\n 215: 'times',\n 216: 'Oslash',\n 217: 'Ugrave',\n 218: 'Uacute',\n 219: 'Ucirc',\n 220: 'Uuml',\n 221: 'Yacute',\n 222: 'THORN',\n 223: 'szlig',\n 224: 'agrave',\n 225: 'aacute',\n 226: 'acirc',\n 227: 'atilde',\n 228: 'auml',\n 229: 'aring',\n 230: 'aelig',\n 231: 'ccedil',\n 232: 'egrave',\n 233: 'eacute',\n 234: 'ecirc',\n 235: 'euml',\n 236: 'igrave',\n 237: 'iacute',\n 238: 'icirc',\n 239: 'iuml',\n 240: 'eth',\n 241: 'ntilde',\n 242: 'ograve',\n 243: 'oacute',\n 244: 'ocirc',\n 245: 'otilde',\n 246: 'ouml',\n 247: 'divide',\n 248: 'oslash',\n 249: 'ugrave',\n 250: 'uacute',\n 251: 'ucirc',\n 252: 'uuml',\n 253: 'yacute',\n 254: 'thorn',\n 255: 'yuml',\n 402: 'fnof',\n 913: 'Alpha',\n 914: 'Beta',\n 915: 'Gamma',\n 916: 'Delta',\n 917: 'Epsilon',\n 918: 'Zeta',\n 919: 'Eta',\n 920: 'Theta',\n 921: 'Iota',\n 922: 'Kappa',\n 923: 'Lambda',\n 924: 'Mu',\n 925: 'Nu',\n 926: 'Xi',\n 927: 'Omicron',\n 928: 'Pi',\n 929: 'Rho',\n 931: 'Sigma',\n 932: 'Tau',\n 933: 'Upsilon',\n 934: 'Phi',\n 935: 'Chi',\n 936: 'Psi',\n 937: 'Omega',\n 945: 'alpha',\n 946: 'beta',\n 947: 'gamma',\n 948: 'delta',\n 949: 'epsilon',\n 950: 'zeta',\n 951: 'eta',\n 952: 'theta',\n 953: 'iota',\n 954: 'kappa',\n 955: 'lambda',\n 956: 'mu',\n 957: 'nu',\n 958: 'xi',\n 959: 'omicron',\n 960: 'pi',\n 961: 'rho',\n 962: 'sigmaf',\n 963: 'sigma',\n 964: 'tau',\n 965: 'upsilon',\n 966: 'phi',\n 967: 'chi',\n 968: 'psi',\n 969: 'omega',\n 977: 'thetasym',\n 978: 'upsih',\n 982: 'piv',\n 8226: 'bull',\n 8230: 'hellip',\n 8242: 'prime',\n 8243: 'Prime',\n 8254: 'oline',\n 8260: 'frasl',\n 8472: 'weierp',\n 8465: 'image',\n 8476: 'real',\n 8482: 'trade',\n 8501: 'alefsym',\n 8592: 'larr',\n 8593: 'uarr',\n 8594: 'rarr',\n 8595: 'darr',\n 8596: 'harr',\n 8629: 'crarr',\n 8656: 'lArr',\n 8657: 'uArr',\n 8658: 'rArr',\n 8659: 'dArr',\n 8660: 'hArr',\n 8704: 'forall',\n 8706: 'part',\n 8707: 'exist',\n 8709: 'empty',\n 8711: 'nabla',\n 8712: 'isin',\n 8713: 'notin',\n 8715: 'ni',\n 8719: 'prod',\n 8721: 'sum',\n 8722: 'minus',\n 8727: 'lowast',\n 8730: 'radic',\n 8733: 'prop',\n 8734: 'infin',\n 8736: 'ang',\n 8743: 'and',\n 8744: 'or',\n 8745: 'cap',\n 8746: 'cup',\n 8747: 'int',\n 8756: 'there4',\n 8764: 'sim',\n 8773: 'cong',\n 8776: 'asymp',\n 8800: 'ne',\n 8801: 'equiv',\n 8804: 'le',\n 8805: 'ge',\n 8834: 'sub',\n 8835: 'sup',\n 8836: 'nsub',\n 8838: 'sube',\n 8839: 'supe',\n 8853: 'oplus',\n 8855: 'otimes',\n 8869: 'perp',\n 8901: 'sdot',\n 8968: 'lceil',\n 8969: 'rceil',\n 8970: 'lfloor',\n 8971: 'rfloor',\n 9001: 'lang',\n 9002: 'rang',\n 9674: 'loz',\n 9824: 'spades',\n 9827: 'clubs',\n 9829: 'hearts',\n 9830: 'diams',\n 338: 'OElig',\n 339: 'oelig',\n 352: 'Scaron',\n 353: 'scaron',\n 376: 'Yuml',\n 710: 'circ',\n 732: 'tilde',\n 8194: 'ensp',\n 8195: 'emsp',\n 8201: 'thinsp',\n 8204: 'zwnj',\n 8205: 'zwj',\n 8206: 'lrm',\n 8207: 'rlm',\n 8211: 'ndash',\n 8212: 'mdash',\n 8216: 'lsquo',\n 8217: 'rsquo',\n 8218: 'sbquo',\n 8220: 'ldquo',\n 8221: 'rdquo',\n 8222: 'bdquo',\n 8224: 'dagger',\n 8225: 'Dagger',\n 8240: 'permil',\n 8249: 'lsaquo',\n 8250: 'rsaquo',\n 8364: 'euro'\n };\n var Dom = {\n block: block,\n inline: inline,\n findNodeIndex: function (node, skipText) {\n var i = 0;\n if (!node) {\n return -1;\n }\n while (true) {\n node = node.previousSibling;\n if (!node) {\n break;\n }\n if (!(skipText && node.nodeType == 3)) {\n i++;\n }\n }\n return i;\n },\n isDataNode: function (node) {\n return node && node.nodeValue !== null && node.data !== null;\n },\n isAncestorOf: function (parent, node) {\n try {\n return !Dom.isDataNode(parent) && ($.contains(parent, Dom.isDataNode(node) ? node.parentNode : node) || node.parentNode == parent);\n } catch (e) {\n return false;\n }\n },\n isAncestorOrSelf: function (root, node) {\n return Dom.isAncestorOf(root, node) || root == node;\n },\n findClosestAncestor: function (root, node) {\n if (Dom.isAncestorOf(root, node)) {\n while (node && node.parentNode != root) {\n node = node.parentNode;\n }\n }\n return node;\n },\n getNodeLength: function (node) {\n return Dom.isDataNode(node) ? node.length : node.childNodes.length;\n },\n splitDataNode: function (node, offset) {\n var newNode = node.cloneNode(false);\n var denormalizedText = '';\n var iterator = node.nextSibling;\n var temp;\n while (iterator && iterator.nodeType == 3 && iterator.nodeValue) {\n denormalizedText += iterator.nodeValue;\n temp = iterator;\n iterator = iterator.nextSibling;\n Dom.remove(temp);\n }\n node.deleteData(offset, node.length);\n newNode.deleteData(0, offset);\n newNode.nodeValue += denormalizedText;\n Dom.insertAfter(newNode, node);\n },\n attrEquals: function (node, attributes) {\n for (var key in attributes) {\n var value = node[key];\n if (key == FLOAT) {\n value = node[kendo.support.cssFloat ? CSSFLOAT : STYLEFLOAT];\n }\n if (typeof value == 'object') {\n if (!Dom.attrEquals(value, attributes[key])) {\n return false;\n }\n } else if (value != attributes[key]) {\n return false;\n }\n }\n return true;\n },\n blockParentOrBody: function (node) {\n return Dom.parentOfType(node, blockElements) || node.ownerDocument.body;\n },\n blockParents: function (nodes) {\n var blocks = [], i, len;\n for (i = 0, len = nodes.length; i < len; i++) {\n var block = Dom.parentOfType(nodes[i], Dom.blockElements);\n if (block && $.inArray(block, blocks) < 0) {\n blocks.push(block);\n }\n }\n return blocks;\n },\n windowFromDocument: function (document) {\n return document.defaultView || document.parentWindow;\n },\n normalize: normalize,\n blockElements: blockElements,\n nonListBlockElements: nonListBlockElements,\n inlineElements: inlineElements,\n empty: empty,\n fillAttrs: fillAttrs,\n nodeTypes: {\n ELEMENT_NODE: 1,\n ATTRIBUTE_NODE: 2,\n TEXT_NODE: 3,\n CDATA_SECTION_NODE: 4,\n ENTITY_REFERENCE_NODE: 5,\n ENTITY_NODE: 6,\n PROCESSING_INSTRUCTION_NODE: 7,\n COMMENT_NODE: 8,\n DOCUMENT_NODE: 9,\n DOCUMENT_TYPE_NODE: 10,\n DOCUMENT_FRAGMENT_NODE: 11,\n NOTATION_NODE: 12\n },\n toHex: function (color) {\n var matches = rgb.exec(color);\n if (!matches) {\n return color;\n }\n return '#' + map(matches.slice(1), function (x) {\n x = parseInt(x, 10).toString(16);\n return x.length > 1 ? x : '0' + x;\n }).join('');\n },\n encode: function (value, options) {\n var encodableChars = !options || options.entities ? entityRe : htmlRe;\n return value.replace(encodableChars, function (c) {\n var charCode = c.charCodeAt(0);\n var entity = entityTable[charCode];\n return entity ? '&' + entity + ';' : c;\n });\n },\n isBom: function (node) {\n return node && node.nodeType === 3 && /^[\\ufeff]+$/.test(node.nodeValue);\n },\n stripBom: function (text) {\n return (text || '').replace(bom, '');\n },\n stripBomNode: function (node) {\n if (Dom.isBom(node)) {\n node.parentNode.removeChild(node);\n }\n },\n insignificant: function (node) {\n var attr = node.attributes;\n return node.className == 'k-marker' || Dom.is(node, 'br') && (node.className == 'k-br' || attr._moz_dirty || attr._moz_editor_bogus_node);\n },\n tableCell: function (node) {\n return Dom.is(node, 'td') || Dom.is(node, 'th');\n },\n significantNodes: function (nodes) {\n return $.grep(nodes, function (child) {\n var name = Dom.name(child);\n if (name == 'br') {\n return false;\n } else if (Dom.insignificant(child)) {\n return false;\n } else if (Dom.emptyTextNode(child)) {\n return false;\n } else if (child.nodeType == 1 && !empty[name] && Dom.emptyNode(child)) {\n return false;\n }\n return true;\n });\n },\n emptyTextNode: function (node) {\n return node && node.nodeType == 3 && whitespaceOrBom.test(node.nodeValue);\n },\n emptyNode: function (node) {\n return node.nodeType == 1 && !Dom.significantNodes(node.childNodes).length;\n },\n name: function (node) {\n return node.nodeName.toLowerCase();\n },\n significantChildNodes: function (node) {\n return $.grep(node.childNodes, function (child) {\n return child.nodeType != 3 || !Dom.isWhitespace(child);\n });\n },\n lastTextNode: function (node) {\n var result = null;\n if (node.nodeType == 3) {\n return node;\n }\n for (var child = node.lastChild; child; child = child.previousSibling) {\n result = Dom.lastTextNode(child);\n if (result) {\n return result;\n }\n }\n return result;\n },\n is: function (node, nodeName) {\n return node && Dom.name(node) == nodeName;\n },\n isMarker: function (node) {\n return node.className == KMARKER;\n },\n isWhitespace: function (node) {\n return whitespace.test(node.nodeValue);\n },\n allWhitespaceContent: function (node) {\n var child = node.firstChild;\n while (child && Dom.isWhitespace(child)) {\n child = child.nextSibling;\n }\n return !child;\n },\n isEmptyspace: function (node) {\n return emptyspace.test(node.nodeValue);\n },\n htmlIndentSpace: function (node) {\n if (!(Dom.isDataNode(node) && Dom.isWhitespace(node))) {\n return false;\n }\n if (emptyspace.test(node.nodeValue)) {\n return true;\n }\n var sibling = function (el, direction) {\n while (el[direction]) {\n el = el[direction];\n if (Dom.significantNodes([el]).length > 0) {\n return el;\n }\n }\n };\n var parent = node.parentNode;\n var prev = sibling(node, 'previousSibling');\n var next = sibling(node, 'nextSibling');\n if (bom.test(node.nodeValue)) {\n return !!(prev || next);\n }\n if ($(parent).is('tr,tbody,thead,tfoot,table,ol,ul')) {\n return true;\n }\n if (Dom.isBlock(parent) || Dom.is(parent, 'body')) {\n var isPrevBlock = prev && Dom.isBlock(prev);\n var isNextBlock = next && Dom.isBlock(next);\n if (!next && isPrevBlock || !prev && isNextBlock || isPrevBlock && isNextBlock) {\n return true;\n }\n }\n return false;\n },\n isBlock: function (node) {\n return block[Dom.name(node)];\n },\n isEmpty: function (node) {\n return empty[Dom.name(node)];\n },\n isInline: function (node) {\n return inline[Dom.name(node)];\n },\n list: function (node) {\n var name = node ? Dom.name(node) : '';\n return name == 'ul' || name == 'ol' || name == 'dl';\n },\n scrollContainer: function (doc) {\n var wnd = Dom.windowFromDocument(doc), scrollContainer = (wnd.contentWindow || wnd).document || wnd.ownerDocument || wnd;\n if (kendo.support.browser.webkit || scrollContainer.compatMode == 'BackCompat') {\n scrollContainer = scrollContainer.body;\n } else {\n scrollContainer = scrollContainer.documentElement;\n }\n return scrollContainer;\n },\n scrollTo: function (node) {\n var element = $(Dom.isDataNode(node) ? node.parentNode : node), wnd = Dom.windowFromDocument(node.ownerDocument), windowHeight = wnd.innerHeight, elementTop, elementHeight, scrollContainer = Dom.scrollContainer(node.ownerDocument);\n elementTop = element.offset().top;\n elementHeight = element[0].offsetHeight;\n if (!elementHeight) {\n elementHeight = parseInt(element.css('line-height'), 10) || Math.ceil(1.2 * parseInt(element.css('font-size'), 10)) || 15;\n }\n if (elementHeight + elementTop > scrollContainer.scrollTop + windowHeight) {\n scrollContainer.scrollTop = elementHeight + elementTop - windowHeight;\n }\n },\n persistScrollTop: function (doc) {\n persistedScrollTop = Dom.scrollContainer(doc).scrollTop;\n },\n offset: function (target, offsetParent) {\n var result = {\n top: target.offsetTop,\n left: target.offsetLeft\n };\n var parent = target.offsetParent;\n while (parent && (!offsetParent || Dom.isAncestorOf(offsetParent, parent))) {\n result.top += parent.offsetTop;\n result.left += parent.offsetLeft;\n parent = parent.offsetParent;\n }\n return result;\n },\n restoreScrollTop: function (doc) {\n if (typeof persistedScrollTop == 'number') {\n Dom.scrollContainer(doc).scrollTop = persistedScrollTop;\n }\n },\n insertAt: function (parent, newElement, position) {\n parent.insertBefore(newElement, parent.childNodes[position] || null);\n },\n insertBefore: function (newElement, referenceElement) {\n if (referenceElement.parentNode) {\n return referenceElement.parentNode.insertBefore(newElement, referenceElement);\n } else {\n return referenceElement;\n }\n },\n insertAfter: function (newElement, referenceElement) {\n return referenceElement.parentNode.insertBefore(newElement, referenceElement.nextSibling);\n },\n remove: function (node) {\n node.parentNode.removeChild(node);\n },\n removeTextSiblings: function (node) {\n var parentNode = node.parentNode;\n while (node.nextSibling && node.nextSibling.nodeType == 3) {\n parentNode.removeChild(node.nextSibling);\n }\n while (node.previousSibling && node.previousSibling.nodeType == 3) {\n parentNode.removeChild(node.previousSibling);\n }\n },\n trim: function (parent) {\n for (var i = parent.childNodes.length - 1; i >= 0; i--) {\n var node = parent.childNodes[i];\n if (Dom.isDataNode(node)) {\n if (!Dom.stripBom(node.nodeValue).length) {\n Dom.remove(node);\n }\n } else if (node.className != KMARKER) {\n Dom.trim(node);\n if (node.childNodes.length === 0 || Dom.allWhitespaceContent(node) && Dom.isBlock(node) && !Dom.isEmpty(node)) {\n Dom.remove(node);\n }\n }\n }\n return parent;\n },\n closest: function (node, tag) {\n while (node && Dom.name(node) != tag) {\n node = node.parentNode;\n }\n return node;\n },\n closestBy: function (node, condition, rootCondition) {\n while (node && !condition(node)) {\n if (rootCondition && rootCondition(node)) {\n return null;\n }\n node = node.parentNode;\n }\n return node;\n },\n sibling: function (node, direction) {\n do {\n node = node[direction];\n } while (node && node.nodeType != 1);\n return node;\n },\n next: function (node) {\n return Dom.sibling(node, 'nextSibling');\n },\n prev: function (node) {\n return Dom.sibling(node, 'previousSibling');\n },\n parentOfType: function (node, tags) {\n do {\n node = node.parentNode;\n } while (node && !Dom.ofType(node, tags));\n return node;\n },\n ofType: function (node, tags) {\n return $.inArray(Dom.name(node), tags) >= 0;\n },\n changeTag: function (referenceElement, tagName, skipAttributes) {\n var newElement = Dom.create(referenceElement.ownerDocument, tagName), attributes = referenceElement.attributes, i, len, name, value, attribute;\n if (!skipAttributes) {\n for (i = 0, len = attributes.length; i < len; i++) {\n attribute = attributes[i];\n if (attribute.specified) {\n name = attribute.nodeName;\n value = attribute.nodeValue;\n if (name == CLASS) {\n newElement.className = value;\n } else if (name == STYLE) {\n newElement.style.cssText = referenceElement.style.cssText;\n } else {\n newElement.setAttribute(name, value);\n }\n }\n }\n }\n while (referenceElement.firstChild) {\n newElement.appendChild(referenceElement.firstChild);\n }\n Dom.insertBefore(newElement, referenceElement);\n Dom.remove(referenceElement);\n return newElement;\n },\n editableParent: function (node) {\n while (node && (node.nodeType == 3 || node.contentEditable !== 'true')) {\n node = node.parentNode;\n }\n return node;\n },\n wrap: function (node, wrapper) {\n Dom.insertBefore(wrapper, node);\n wrapper.appendChild(node);\n return wrapper;\n },\n unwrap: function (node) {\n var parent = node.parentNode;\n while (node.firstChild) {\n parent.insertBefore(node.firstChild, node);\n }\n parent.removeChild(node);\n },\n wrapper: function (node) {\n var wrapper = Dom.closestBy(node, function (el) {\n return el.parentNode && Dom.significantNodes(el.parentNode.childNodes).length > 1;\n });\n return $(wrapper).is('body,.k-editor') ? undefined : wrapper;\n },\n create: function (document, tagName, attributes) {\n return Dom.attr(document.createElement(tagName), attributes);\n },\n attr: function (element, attributes) {\n attributes = extend({}, attributes);\n if (attributes && STYLE in attributes) {\n Dom.style(element, attributes.style);\n delete attributes.style;\n }\n for (var attr in attributes) {\n if (attributes[attr] === null) {\n element.removeAttribute(attr);\n delete attributes[attr];\n } else if (attr == 'className') {\n element[attr] = attributes[attr];\n }\n }\n return extend(element, attributes);\n },\n style: function (node, value) {\n $(node).css(value || {});\n },\n unstyle: function (node, value) {\n for (var key in value) {\n if (key == FLOAT) {\n key = kendo.support.cssFloat ? CSSFLOAT : STYLEFLOAT;\n }\n node.style[key] = '';\n }\n if (node.style.cssText === '') {\n node.removeAttribute(STYLE);\n }\n },\n inlineStyle: function (body, name, attributes) {\n var span = $(Dom.create(body.ownerDocument, name, attributes)), style;\n body.appendChild(span[0]);\n style = map(cssAttributes, function (value) {\n if (browser.msie && value == 'line-height' && span.css(value) == '1px') {\n return 'line-height:1.5';\n } else {\n return value + ':' + span.css(value);\n }\n }).join(';');\n span.remove();\n return style;\n },\n getEffectiveBackground: function (element) {\n var backgroundStyle = element.css('background-color');\n if (backgroundStyle.indexOf('rgba(0, 0, 0, 0') < 0 && backgroundStyle !== 'transparent') {\n return backgroundStyle;\n } else if (element[0].tagName.toLowerCase() === 'html') {\n return 'Window';\n } else {\n return Dom.getEffectiveBackground(element.parent());\n }\n },\n innerText: function (node) {\n var text = node.innerHTML;\n text = text.replace(/<!--(.|\\s)*?-->/gi, '');\n text = text.replace(/<\\/?[^>]+?\\/?>/gm, '');\n return text;\n },\n removeClass: function (node, classNames) {\n var className = ' ' + node.className + ' ', classes = classNames.split(' '), i, len;\n for (i = 0, len = classes.length; i < len; i++) {\n className = className.replace(' ' + classes[i] + ' ', ' ');\n }\n className = $.trim(className);\n if (className.length) {\n node.className = className;\n } else {\n node.removeAttribute(CLASS);\n }\n },\n commonAncestor: function () {\n var count = arguments.length, paths = [], minPathLength = Infinity, output = null, i, ancestors, node, first, j;\n if (!count) {\n return null;\n }\n if (count == 1) {\n return arguments[0];\n }\n for (i = 0; i < count; i++) {\n ancestors = [];\n node = arguments[i];\n while (node) {\n ancestors.push(node);\n node = node.parentNode;\n }\n paths.push(ancestors.reverse());\n minPathLength = Math.min(minPathLength, ancestors.length);\n }\n if (count == 1) {\n return paths[0][0];\n }\n for (i = 0; i < minPathLength; i++) {\n first = paths[0][i];\n for (j = 1; j < count; j++) {\n if (first != paths[j][i]) {\n return output;\n }\n }\n output = first;\n }\n return output;\n },\n closestSplittableParent: function (nodes) {\n var result;\n if (nodes.length == 1) {\n result = Dom.parentOfType(nodes[0], [\n 'ul',\n 'ol'\n ]);\n } else {\n result = Dom.commonAncestor.apply(null, nodes);\n }\n if (!result) {\n result = Dom.parentOfType(nodes[0], [\n 'p',\n 'td'\n ]) || nodes[0].ownerDocument.body;\n }\n if (Dom.isInline(result)) {\n result = Dom.blockParentOrBody(result);\n }\n var editableParents = map(nodes, Dom.editableParent);\n var editableAncestor = Dom.commonAncestor(editableParents)[0];\n if ($.contains(result, editableAncestor)) {\n result = editableAncestor;\n }\n return result;\n },\n closestEditable: function (node, types) {\n var closest;\n var editable = Dom.editableParent(node);\n if (Dom.ofType(node, types)) {\n closest = node;\n } else {\n closest = Dom.parentOfType(node, types);\n }\n if (closest && editable && $.contains(closest, editable)) {\n closest = editable;\n } else if (!closest && editable) {\n closest = editable;\n }\n return closest;\n },\n closestEditableOfType: function (node, types) {\n var editable = Dom.closestEditable(node, types);\n if (editable && Dom.ofType(editable, types)) {\n return editable;\n }\n },\n filter: function (tagName, nodes, invert) {\n var filterFn = function (node) {\n return Dom.name(node) == tagName;\n };\n return Dom.filterBy(nodes, filterFn, invert);\n },\n filterBy: function (nodes, condition, invert) {\n var i = 0;\n var len = nodes.length;\n var result = [];\n var match;\n for (; i < len; i++) {\n match = condition(nodes[i]);\n if (match && !invert || !match && invert) {\n result.push(nodes[i]);\n }\n }\n return result;\n },\n ensureTrailingBreaks: function (node) {\n var elements = $(node).find('p,td,th');\n var length = elements.length;\n var i = 0;\n if (length) {\n for (; i < length; i++) {\n Dom.ensureTrailingBreak(elements[i]);\n }\n } else {\n Dom.ensureTrailingBreak(node);\n }\n },\n removeTrailingBreak: function (node) {\n $(node).find('br[type=_moz],.k-br').remove();\n },\n ensureTrailingBreak: function (node) {\n Dom.removeTrailingBreak(node);\n var lastChild = node.lastChild;\n var name = lastChild && Dom.name(lastChild);\n var br;\n if (!name || name != 'br' && name != 'img' || name == 'br' && lastChild.className != 'k-br') {\n br = node.ownerDocument.createElement('br');\n br.className = 'k-br';\n node.appendChild(br);\n }\n }\n };\n kendo.ui.editor.Dom = Dom;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/serializer', ['editor/dom'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo;\n var Editor = kendo.ui.editor;\n var dom = Editor.Dom;\n var extend = $.extend;\n var fontSizeMappings = 'xx-small,x-small,small,medium,large,x-large,xx-large'.split(',');\n var quoteRe = /\"/g;\n var brRe = /<br[^>]*>/i;\n var pixelRe = /^\\d+(\\.\\d*)?(px)?$/i;\n var emptyPRe = /<p>(?: )?<\\/p>/i;\n var cssDeclaration = /(\\*?[-#\\/\\*\\\\\\w]+(?:\\[[0-9a-z_-]+\\])?)\\s*:\\s*((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^\\)]*?\\)|[^};])+)/g;\n var sizzleAttr = /^sizzle-\\d+/i;\n var scriptAttr = /^k-script-/i;\n var onerrorRe = /\\s*onerror\\s*=\\s*(?:'|\")?([^'\">\\s]*)(?:'|\")?/i;\n var br = '<br class=\"k-br\">';\n var div = document.createElement('div');\n div.innerHTML = ' <hr>';\n var supportsLeadingWhitespace = div.firstChild.nodeType === 3;\n div = null;\n var isFunction = $.isFunction;\n var TD = 'td';\n var Serializer = {\n toEditableHtml: function (html) {\n return (html || '').replace(/<!\\[CDATA\\[(.*)?\\]\\]>/g, '<!--[CDATA[$1]]-->').replace(/<(\\/?)script([^>]*)>/gi, '<$1k:script$2>').replace(/<img([^>]*)>/gi, function (match) {\n return match.replace(onerrorRe, '');\n }).replace(/(<\\/?img[^>]*>)[\\r\\n\\v\\f\\t ]+/gi, '$1').replace(/^<(table|blockquote)/i, br + '<$1').replace(/^[\\s]*( |\\u00a0)/i, '$1').replace(/<\\/(table|blockquote)>$/i, '</$1>' + br);\n },\n _toEditableImmutables: function (body) {\n var immutable = Editor.Immutables.immutable, emptyTextNode = dom.emptyTextNode, first = body.firstChild, last = body.lastChild;\n while (emptyTextNode(first)) {\n first = first.nextSibling;\n }\n while (emptyTextNode(last)) {\n last = last.previousSibling;\n }\n if (first && immutable(first)) {\n $(br).prependTo(body);\n }\n if (last && immutable(last)) {\n $(br).appendTo(body);\n }\n },\n _fillEmptyElements: function (body) {\n $(body).find('p,td').each(function () {\n var p = $(this);\n if (/^\\s*$/g.test(p.text()) && !p.find('img,input').length) {\n var node = this;\n while (node.firstChild && node.firstChild.nodeType != 3) {\n node = node.firstChild;\n }\n if (node.nodeType == 1 && !dom.empty[dom.name(node)]) {\n if (dom.is(node, 'td')) {\n node.innerHTML = kendo.ui.editor.emptyTableCellContent;\n } else {\n node.innerHTML = kendo.ui.editor.emptyElementContent;\n }\n }\n }\n });\n },\n _removeSystemElements: function (body) {\n $('.k-paste-container', body).remove();\n },\n _resetOrderedLists: function (root) {\n var ols = root.getElementsByTagName('ol'), i, ol, originalStart;\n for (i = 0; i < ols.length; i++) {\n ol = ols[i];\n originalStart = ol.getAttribute('start');\n ol.setAttribute('start', 1);\n if (originalStart) {\n ol.setAttribute('start', originalStart);\n } else {\n ol.removeAttribute(originalStart);\n }\n }\n },\n _preventScriptExecution: function (root) {\n $(root).find('*').each(function () {\n var attributes = this.attributes;\n var attribute, i, l, name;\n for (i = 0, l = attributes.length; i < l; i++) {\n attribute = attributes[i];\n name = attribute.nodeName;\n if (attribute.specified && /^on/i.test(name)) {\n this.setAttribute('k-script-' + name, attribute.value);\n this.removeAttribute(name);\n }\n }\n });\n },\n htmlToDom: function (html, root, options) {\n var browser = kendo.support.browser;\n var msie = browser.msie;\n var legacyIE = msie && browser.version < 9;\n var originalSrc = 'originalsrc';\n var originalHref = 'originalhref';\n var o = options || {};\n var immutables = o.immutables;\n html = Serializer.toEditableHtml(html);\n if (legacyIE) {\n html = '<br/>' + html;\n html = html.replace(/href\\s*=\\s*(?:'|\")?([^'\">\\s]*)(?:'|\")?/, originalHref + '=\"$1\"');\n html = html.replace(/src\\s*=\\s*(?:'|\")?([^'\">\\s]*)(?:'|\")?/, originalSrc + '=\"$1\"');\n }\n if (isFunction(o.custom)) {\n html = o.custom(html) || html;\n }\n root.innerHTML = html;\n if (immutables) {\n immutables.deserialize(root);\n }\n if (legacyIE) {\n dom.remove(root.firstChild);\n $(root).find('k\\\\:script,script,link,img,a').each(function () {\n var node = this;\n if (node[originalHref]) {\n node.setAttribute('href', node[originalHref]);\n node.removeAttribute(originalHref);\n }\n if (node[originalSrc]) {\n node.setAttribute('src', node[originalSrc]);\n node.removeAttribute(originalSrc);\n }\n });\n } else if (msie) {\n dom.normalize(root);\n Serializer._resetOrderedLists(root);\n }\n Serializer._preventScriptExecution(root);\n Serializer._fillEmptyElements(root);\n Serializer._removeSystemElements(root);\n Serializer._toEditableImmutables(root);\n $('table', root).addClass('k-table');\n return root;\n },\n domToXhtml: function (root, options) {\n var result = [];\n var immutables = options && options.immutables;\n function semanticFilter(attributes) {\n return $.grep(attributes, function (attr) {\n return attr.name != 'style';\n });\n }\n var tagMap = {\n iframe: {\n start: function (node) {\n result.push('<iframe');\n attr(node);\n result.push('>');\n },\n end: function () {\n result.push('</iframe>');\n }\n },\n 'k:script': {\n start: function (node) {\n result.push('<script');\n attr(node);\n result.push('>');\n },\n end: function () {\n result.push('</script>');\n },\n skipEncoding: true\n },\n span: {\n semantic: true,\n start: function (node) {\n var style = node.style;\n var attributes = specifiedAttributes(node);\n var semanticAttributes = semanticFilter(attributes);\n if (semanticAttributes.length) {\n result.push('<span');\n attr(node, semanticAttributes);\n result.push('>');\n }\n if (style.textDecoration == 'underline') {\n result.push('<u>');\n }\n var font = [];\n if (style.color) {\n font.push('color=\"' + dom.toHex(style.color) + '\"');\n }\n if (style.fontFamily) {\n font.push('face=\"' + style.fontFamily + '\"');\n }\n if (style.fontSize) {\n var size = $.inArray(style.fontSize, fontSizeMappings);\n font.push('size=\"' + size + '\"');\n }\n if (font.length) {\n result.push('<font ' + font.join(' ') + '>');\n }\n },\n end: function (node) {\n var style = node.style;\n if (style.color || style.fontFamily || style.fontSize) {\n result.push('</font>');\n }\n if (style.textDecoration == 'underline') {\n result.push('</u>');\n }\n if (semanticFilter(specifiedAttributes(node)).length) {\n result.push('</span>');\n }\n }\n },\n strong: {\n semantic: true,\n start: function () {\n result.push('<b>');\n },\n end: function () {\n result.push('</b>');\n }\n },\n em: {\n semantic: true,\n start: function () {\n result.push('<i>');\n },\n end: function () {\n result.push('</i>');\n }\n },\n b: {\n semantic: false,\n start: function () {\n result.push('<strong>');\n },\n end: function () {\n result.push('</strong>');\n }\n },\n i: {\n semantic: false,\n start: function () {\n result.push('<em>');\n },\n end: function () {\n result.push('</em>');\n }\n },\n u: {\n semantic: false,\n start: function () {\n result.push('<span style=\"text-decoration:underline;\">');\n },\n end: function () {\n result.push('</span>');\n }\n },\n font: {\n semantic: false,\n start: function (node) {\n result.push('<span style=\"');\n var color = node.getAttribute('color');\n var size = fontSizeMappings[node.getAttribute('size')];\n var face = node.getAttribute('face');\n if (color) {\n result.push('color:');\n result.push(dom.toHex(color));\n result.push(';');\n }\n if (face) {\n result.push('font-family:');\n result.push(face);\n result.push(';');\n }\n if (size) {\n result.push('font-size:');\n result.push(size);\n result.push(';');\n }\n result.push('\">');\n },\n end: function () {\n result.push('</span>');\n }\n }\n };\n tagMap.script = tagMap['k:script'];\n options = options || {};\n if (typeof options.semantic == 'undefined') {\n options.semantic = true;\n }\n function cssProperties(cssText) {\n var trim = $.trim;\n var css = trim(cssText);\n var match;\n var property, value;\n var properties = [];\n cssDeclaration.lastIndex = 0;\n while (true) {\n match = cssDeclaration.exec(css);\n if (!match) {\n break;\n }\n property = trim(match[1].toLowerCase());\n value = trim(match[2]);\n if (property == 'font-size-adjust' || property == 'font-stretch') {\n continue;\n }\n if (property.indexOf('color') >= 0) {\n value = dom.toHex(value);\n } else if (property.indexOf('font') >= 0) {\n value = value.replace(quoteRe, '\\'');\n } else if (/\\burl\\(/g.test(value)) {\n value = value.replace(quoteRe, '');\n }\n properties.push({\n property: property,\n value: value\n });\n }\n return properties;\n }\n function styleAttr(cssText) {\n var properties = cssProperties(cssText);\n var i;\n for (i = 0; i < properties.length; i++) {\n result.push(properties[i].property);\n result.push(':');\n result.push(properties[i].value);\n result.push(';');\n }\n }\n function specifiedAttributes(node) {\n var result = [];\n var attributes = node.attributes;\n var attribute, i, l;\n var name, value, specified;\n for (i = 0, l = attributes.length; i < l; i++) {\n attribute = attributes[i];\n name = attribute.nodeName;\n value = attribute.value;\n specified = attribute.specified;\n if (name == 'value' && 'value' in node && node.value) {\n specified = true;\n } else if (name == 'type' && value == 'text') {\n specified = true;\n } else if (name == 'class' && !value) {\n specified = false;\n } else if (sizzleAttr.test(name)) {\n specified = false;\n } else if (name == 'complete') {\n specified = false;\n } else if (name == 'altHtml') {\n specified = false;\n } else if (name == 'start' && dom.is(node, 'ul')) {\n specified = false;\n } else if (name == 'start' && dom.is(node, 'ol') && value == '1') {\n specified = false;\n } else if (name.indexOf('_moz') >= 0) {\n specified = false;\n } else if (scriptAttr.test(name)) {\n specified = !!options.scripts;\n } else if (name == 'data-role' && value == 'resizable' && (dom.is(node, 'tr') || dom.is(node, 'td'))) {\n specified = false;\n }\n if (specified) {\n result.push(attribute);\n }\n }\n return result;\n }\n function attr(node, attributes) {\n var i, l, attribute, name, value;\n attributes = attributes || specifiedAttributes(node);\n if (dom.is(node, 'img')) {\n var width = node.style.width, height = node.style.height, $node = $(node);\n if (width && pixelRe.test(width)) {\n $node.attr('width', parseInt(width, 10));\n dom.unstyle(node, { width: undefined });\n }\n if (height && pixelRe.test(height)) {\n $node.attr('height', parseInt(height, 10));\n dom.unstyle(node, { height: undefined });\n }\n }\n if (!attributes.length) {\n return;\n }\n attributes.sort(function (a, b) {\n return a.nodeName > b.nodeName ? 1 : a.nodeName < b.nodeName ? -1 : 0;\n });\n for (i = 0, l = attributes.length; i < l; i++) {\n attribute = attributes[i];\n name = attribute.nodeName;\n value = attribute.value;\n if (name == 'class' && value == 'k-table') {\n continue;\n }\n name = name.replace(scriptAttr, '');\n result.push(' ');\n result.push(name);\n result.push('=\"');\n if (name == 'style') {\n styleAttr(value || node.style.cssText);\n } else if (name == 'src' || name == 'href') {\n result.push(kendo.htmlEncode(node.getAttribute(name, 2)));\n } else {\n result.push(dom.fillAttrs[name] ? name : value);\n }\n result.push('\"');\n }\n }\n function children(node, skip, skipEncoding) {\n for (var childNode = node.firstChild; childNode; childNode = childNode.nextSibling) {\n child(childNode, skip, skipEncoding);\n }\n }\n function text(node) {\n return node.nodeValue.replace(/\\ufeff/g, '');\n }\n function isEmptyBomNode(node) {\n if (node.nodeValue === '\\uFEFF') {\n do {\n node = node.parentNode;\n if (dom.is(node, TD) && node.childNodes.length === 1) {\n return true;\n }\n if (node.childNodes.length !== 1) {\n return false;\n }\n } while (!dom.isBlock(node));\n return true;\n }\n return false;\n }\n function child(node, skip, skipEncoding) {\n var nodeType = node.nodeType, tagName, mapper, parent, value, previous, jqNode;\n if (immutables && Editor.Immutables.immutable(node)) {\n result.push(immutables.serialize(node));\n } else if (nodeType == 1) {\n tagName = dom.name(node);\n jqNode = $(node);\n if (jqNode.hasClass('k-table-resize-handle-wrapper') || jqNode.hasClass('k-column-resize-handle-wrapper') || jqNode.hasClass('k-row-resize-handle-wrapper')) {\n return;\n }\n if (!tagName || dom.insignificant(node)) {\n return;\n }\n if (!options.scripts && (tagName == 'script' || tagName == 'k:script')) {\n return;\n }\n mapper = tagMap[tagName];\n if (mapper) {\n if (typeof mapper.semantic == 'undefined' || options.semantic ^ mapper.semantic) {\n mapper.start(node);\n children(node, false, mapper.skipEncoding);\n mapper.end(node);\n return;\n }\n }\n result.push('<');\n result.push(tagName);\n attr(node);\n if (dom.empty[tagName]) {\n result.push(' />');\n } else {\n result.push('>');\n children(node, skip || dom.is(node, 'pre'));\n result.push('</');\n result.push(tagName);\n result.push('>');\n }\n } else if (nodeType == 3) {\n if (isEmptyBomNode(node)) {\n result.push(' ');\n return;\n }\n value = text(node);\n if (!skip && supportsLeadingWhitespace) {\n parent = node.parentNode;\n previous = node.previousSibling;\n if (!previous) {\n previous = (dom.isInline(parent) ? parent : node).previousSibling;\n }\n if (!previous || previous.innerHTML === '' || dom.isBlock(previous)) {\n value = value.replace(/^[\\r\\n\\v\\f\\t ]+/, '');\n }\n value = value.replace(/ +/, ' ');\n }\n result.push(skipEncoding ? value : dom.encode(value, options));\n } else if (nodeType == 4) {\n result.push('<![CDATA[');\n result.push(node.data);\n result.push(']]>');\n } else if (nodeType == 8) {\n if (node.data.indexOf('[CDATA[') < 0) {\n result.push('<!--');\n result.push(node.data);\n result.push('-->');\n } else {\n result.push('<!');\n result.push(node.data);\n result.push('>');\n }\n }\n }\n function textOnly(root) {\n var childrenCount = root.childNodes.length;\n var textChild = childrenCount && root.firstChild.nodeType == 3;\n return textChild && (childrenCount == 1 || childrenCount == 2 && dom.insignificant(root.lastChild));\n }\n function runCustom() {\n if ($.isFunction(options.custom)) {\n result = options.custom(result) || result;\n }\n }\n if (textOnly(root)) {\n result = dom.encode(text(root.firstChild).replace(/[\\r\\n\\v\\f\\t ]+/, ' '), options);\n runCustom();\n return result;\n }\n children(root);\n result = result.join('');\n runCustom();\n if (result.replace(brRe, '').replace(emptyPRe, '') === '') {\n return '';\n }\n return result;\n }\n };\n extend(Editor, { Serializer: Serializer });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/range', ['editor/serializer'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo, Class = kendo.Class, extend = $.extend, Editor = kendo.ui.editor, browser = kendo.support.browser, dom = Editor.Dom, findNodeIndex = dom.findNodeIndex, isDataNode = dom.isDataNode, findClosestAncestor = dom.findClosestAncestor, getNodeLength = dom.getNodeLength, normalize = dom.normalize;\n var SelectionUtils = {\n selectionFromWindow: function (window) {\n if (!('getSelection' in window)) {\n return new W3CSelection(window.document);\n }\n return window.getSelection();\n },\n selectionFromRange: function (range) {\n var rangeDocument = RangeUtils.documentFromRange(range);\n return SelectionUtils.selectionFromDocument(rangeDocument);\n },\n selectionFromDocument: function (document) {\n return SelectionUtils.selectionFromWindow(dom.windowFromDocument(document));\n }\n };\n var W3CRange = Class.extend({\n init: function (doc) {\n $.extend(this, {\n ownerDocument: doc,\n startContainer: doc,\n endContainer: doc,\n commonAncestorContainer: doc,\n startOffset: 0,\n endOffset: 0,\n collapsed: true\n });\n },\n setStart: function (node, offset) {\n this.startContainer = node;\n this.startOffset = offset;\n updateRangeProperties(this);\n fixIvalidRange(this, true);\n },\n setEnd: function (node, offset) {\n this.endContainer = node;\n this.endOffset = offset;\n updateRangeProperties(this);\n fixIvalidRange(this, false);\n },\n setStartBefore: function (node) {\n this.setStart(node.parentNode, findNodeIndex(node));\n },\n setStartAfter: function (node) {\n this.setStart(node.parentNode, findNodeIndex(node) + 1);\n },\n setEndBefore: function (node) {\n this.setEnd(node.parentNode, findNodeIndex(node));\n },\n setEndAfter: function (node) {\n this.setEnd(node.parentNode, findNodeIndex(node) + 1);\n },\n selectNode: function (node) {\n this.setStartBefore(node);\n this.setEndAfter(node);\n },\n selectNodeContents: function (node) {\n this.setStart(node, 0);\n this.setEnd(node, node[node.nodeType === 1 ? 'childNodes' : 'nodeValue'].length);\n },\n collapse: function (toStart) {\n var that = this;\n if (toStart) {\n that.setEnd(that.startContainer, that.startOffset);\n } else {\n that.setStart(that.endContainer, that.endOffset);\n }\n },\n deleteContents: function () {\n var that = this, range = that.cloneRange();\n if (that.startContainer != that.commonAncestorContainer) {\n that.setStartAfter(findClosestAncestor(that.commonAncestorContainer, that.startContainer));\n }\n that.collapse(true);\n (function deleteSubtree(iterator) {\n while (iterator.next()) {\n if (iterator.hasPartialSubtree()) {\n deleteSubtree(iterator.getSubtreeIterator());\n } else {\n iterator.remove();\n }\n }\n }(new RangeIterator(range)));\n },\n cloneContents: function () {\n var document = RangeUtils.documentFromRange(this);\n return function cloneSubtree(iterator) {\n var node, frag = document.createDocumentFragment();\n while (node = iterator.next()) {\n node = node.cloneNode(!iterator.hasPartialSubtree());\n if (iterator.hasPartialSubtree()) {\n node.appendChild(cloneSubtree(iterator.getSubtreeIterator()));\n }\n frag.appendChild(node);\n }\n return frag;\n }(new RangeIterator(this));\n },\n extractContents: function () {\n var that = this, range = that.cloneRange();\n if (that.startContainer != that.commonAncestorContainer) {\n that.setStartAfter(findClosestAncestor(that.commonAncestorContainer, that.startContainer));\n }\n that.collapse(true);\n var document = RangeUtils.documentFromRange(that);\n return function extractSubtree(iterator) {\n var node, frag = document.createDocumentFragment();\n while (node = iterator.next()) {\n if (iterator.hasPartialSubtree()) {\n node = node.cloneNode(false);\n node.appendChild(extractSubtree(iterator.getSubtreeIterator()));\n } else {\n iterator.remove(that.originalRange);\n }\n frag.appendChild(node);\n }\n return frag;\n }(new RangeIterator(range));\n },\n insertNode: function (node) {\n var that = this;\n if (isDataNode(that.startContainer)) {\n if (that.startOffset != that.startContainer.nodeValue.length) {\n dom.splitDataNode(that.startContainer, that.startOffset);\n }\n dom.insertAfter(node, that.startContainer);\n } else {\n dom.insertAt(that.startContainer, node, that.startOffset);\n }\n that.setStart(that.startContainer, that.startOffset);\n },\n cloneRange: function () {\n return $.extend(new W3CRange(this.ownerDocument), {\n startContainer: this.startContainer,\n endContainer: this.endContainer,\n commonAncestorContainer: this.commonAncestorContainer,\n startOffset: this.startOffset,\n endOffset: this.endOffset,\n collapsed: this.collapsed,\n originalRange: this\n });\n },\n toString: function () {\n var startNodeName = this.startContainer.nodeName, endNodeName = this.endContainer.nodeName;\n return [\n startNodeName == '#text' ? this.startContainer.nodeValue : startNodeName,\n '(',\n this.startOffset,\n ') : ',\n endNodeName == '#text' ? this.endContainer.nodeValue : endNodeName,\n '(',\n this.endOffset,\n ')'\n ].join('');\n }\n });\n W3CRange.fromNode = function (node) {\n return new W3CRange(node.ownerDocument);\n };\n function compareBoundaries(start, end, startOffset, endOffset) {\n if (start == end) {\n return endOffset - startOffset;\n }\n var container = end;\n while (container && container.parentNode != start) {\n container = container.parentNode;\n }\n if (container) {\n return findNodeIndex(container) - startOffset;\n }\n container = start;\n while (container && container.parentNode != end) {\n container = container.parentNode;\n }\n if (container) {\n return endOffset - findNodeIndex(container) - 1;\n }\n var root = dom.commonAncestor(start, end);\n var startAncestor = start;\n while (startAncestor && startAncestor.parentNode != root) {\n startAncestor = startAncestor.parentNode;\n }\n if (!startAncestor) {\n startAncestor = root;\n }\n var endAncestor = end;\n while (endAncestor && endAncestor.parentNode != root) {\n endAncestor = endAncestor.parentNode;\n }\n if (!endAncestor) {\n endAncestor = root;\n }\n if (startAncestor == endAncestor) {\n return 0;\n }\n return findNodeIndex(endAncestor) - findNodeIndex(startAncestor);\n }\n function fixIvalidRange(range, toStart) {\n function isInvalidRange(range) {\n try {\n return compareBoundaries(range.startContainer, range.endContainer, range.startOffset, range.endOffset) < 0;\n } catch (ex) {\n return true;\n }\n }\n if (isInvalidRange(range)) {\n if (toStart) {\n range.commonAncestorContainer = range.endContainer = range.startContainer;\n range.endOffset = range.startOffset;\n } else {\n range.commonAncestorContainer = range.startContainer = range.endContainer;\n range.startOffset = range.endOffset;\n }\n range.collapsed = true;\n }\n }\n function updateRangeProperties(range) {\n range.collapsed = range.startContainer == range.endContainer && range.startOffset == range.endOffset;\n var node = range.startContainer;\n while (node && node != range.endContainer && !dom.isAncestorOf(node, range.endContainer)) {\n node = node.parentNode;\n }\n range.commonAncestorContainer = node;\n }\n var RangeIterator = Class.extend({\n init: function (range) {\n $.extend(this, {\n range: range,\n _current: null,\n _next: null,\n _end: null\n });\n if (range.collapsed) {\n return;\n }\n var root = range.commonAncestorContainer;\n this._next = range.startContainer == root && !isDataNode(range.startContainer) ? range.startContainer.childNodes[range.startOffset] : findClosestAncestor(root, range.startContainer);\n this._end = range.endContainer == root && !isDataNode(range.endContainer) ? range.endContainer.childNodes[range.endOffset] : findClosestAncestor(root, range.endContainer).nextSibling;\n },\n hasNext: function () {\n return !!this._next;\n },\n next: function () {\n var that = this, current = that._current = that._next;\n that._next = that._current && that._current.nextSibling != that._end ? that._current.nextSibling : null;\n if (isDataNode(that._current)) {\n if (that.range.endContainer == that._current) {\n current = current.cloneNode(true);\n current.deleteData(that.range.endOffset, current.length - that.range.endOffset);\n }\n if (that.range.startContainer == that._current) {\n current = current.cloneNode(true);\n current.deleteData(0, that.range.startOffset);\n }\n }\n return current;\n },\n traverse: function (callback) {\n var that = this, current;\n function next() {\n that._current = that._next;\n that._next = that._current && that._current.nextSibling != that._end ? that._current.nextSibling : null;\n return that._current;\n }\n while (current = next()) {\n if (that.hasPartialSubtree()) {\n that.getSubtreeIterator().traverse(callback);\n } else {\n callback(current);\n }\n }\n return current;\n },\n remove: function (originalRange) {\n var that = this, inStartContainer = that.range.startContainer == that._current, inEndContainer = that.range.endContainer == that._current, start, end, delta;\n if (isDataNode(that._current) && (inStartContainer || inEndContainer)) {\n start = inStartContainer ? that.range.startOffset : 0;\n end = inEndContainer ? that.range.endOffset : that._current.length;\n delta = end - start;\n if (originalRange && (inStartContainer || inEndContainer)) {\n if (that._current == originalRange.startContainer && start <= originalRange.startOffset) {\n originalRange.startOffset -= delta;\n }\n if (that._current == originalRange.endContainer && end <= originalRange.endOffset) {\n originalRange.endOffset -= delta;\n }\n }\n that._current.deleteData(start, delta);\n } else {\n var parent = that._current.parentNode;\n if (originalRange && (that.range.startContainer == parent || that.range.endContainer == parent)) {\n var nodeIndex = findNodeIndex(that._current);\n if (parent == originalRange.startContainer && nodeIndex <= originalRange.startOffset) {\n originalRange.startOffset -= 1;\n }\n if (parent == originalRange.endContainer && nodeIndex < originalRange.endOffset) {\n originalRange.endOffset -= 1;\n }\n }\n dom.remove(that._current);\n }\n },\n hasPartialSubtree: function () {\n return !isDataNode(this._current) && (dom.isAncestorOrSelf(this._current, this.range.startContainer) || dom.isAncestorOrSelf(this._current, this.range.endContainer));\n },\n getSubtreeIterator: function () {\n return new RangeIterator(this.getSubRange());\n },\n getSubRange: function () {\n var that = this, subRange = that.range.cloneRange();\n subRange.selectNodeContents(that._current);\n if (dom.isAncestorOrSelf(that._current, that.range.startContainer)) {\n subRange.setStart(that.range.startContainer, that.range.startOffset);\n }\n if (dom.isAncestorOrSelf(that._current, that.range.endContainer)) {\n subRange.setEnd(that.range.endContainer, that.range.endOffset);\n }\n return subRange;\n }\n });\n var W3CSelection = Class.extend({\n init: function (doc) {\n this.ownerDocument = doc;\n this.rangeCount = 1;\n },\n addRange: function (range) {\n var textRange = this.ownerDocument.body.createTextRange();\n adoptContainer(textRange, range, false);\n adoptContainer(textRange, range, true);\n textRange.select();\n },\n removeAllRanges: function () {\n var selection = this.ownerDocument.selection;\n if (selection.type != 'None') {\n selection.empty();\n }\n },\n getRangeAt: function () {\n var textRange, range = new W3CRange(this.ownerDocument), selection = this.ownerDocument.selection, element, commonAncestor;\n try {\n textRange = selection.createRange();\n element = textRange.item ? textRange.item(0) : textRange.parentElement();\n if (element.ownerDocument != this.ownerDocument) {\n return range;\n }\n } catch (ex) {\n return range;\n }\n if (selection.type == 'Control') {\n range.selectNode(textRange.item(0));\n } else {\n commonAncestor = textRangeContainer(textRange);\n adoptEndPoint(textRange, range, commonAncestor, true);\n adoptEndPoint(textRange, range, commonAncestor, false);\n if (range.startContainer.nodeType == 9) {\n range.setStart(range.endContainer, range.startOffset);\n }\n if (range.endContainer.nodeType == 9) {\n range.setEnd(range.startContainer, range.endOffset);\n }\n if (textRange.compareEndPoints('StartToEnd', textRange) === 0) {\n range.collapse(false);\n }\n var startContainer = range.startContainer, endContainer = range.endContainer, body = this.ownerDocument.body;\n if (!range.collapsed && range.startOffset === 0 && range.endOffset == getNodeLength(range.endContainer) && !(startContainer == endContainer && isDataNode(startContainer) && startContainer.parentNode == body)) {\n var movedStart = false, movedEnd = false;\n while (findNodeIndex(startContainer) === 0 && startContainer == startContainer.parentNode.firstChild && startContainer != body) {\n startContainer = startContainer.parentNode;\n movedStart = true;\n }\n while (findNodeIndex(endContainer) == getNodeLength(endContainer.parentNode) - 1 && endContainer == endContainer.parentNode.lastChild && endContainer != body) {\n endContainer = endContainer.parentNode;\n movedEnd = true;\n }\n if (startContainer == body && endContainer == body && movedStart && movedEnd) {\n range.setStart(startContainer, 0);\n range.setEnd(endContainer, getNodeLength(body));\n }\n }\n }\n return range;\n }\n });\n function textRangeContainer(textRange) {\n var left = textRange.duplicate(), right = textRange.duplicate();\n left.collapse(true);\n right.collapse(false);\n return dom.commonAncestor(textRange.parentElement(), left.parentElement(), right.parentElement());\n }\n function adoptContainer(textRange, range, start) {\n var container = range[start ? 'startContainer' : 'endContainer'], offset = range[start ? 'startOffset' : 'endOffset'], textOffset = 0, isData = isDataNode(container), anchorNode = isData ? container : container.childNodes[offset] || null, anchorParent = isData ? container.parentNode : container, doc = range.ownerDocument, cursor = doc.body.createTextRange(), cursorNode;\n if (container.nodeType == 3 || container.nodeType == 4) {\n textOffset = offset;\n }\n if (!anchorParent) {\n anchorParent = doc.body;\n }\n if (anchorParent.nodeName.toLowerCase() == 'img') {\n cursor.moveToElementText(anchorParent);\n cursor.collapse(false);\n textRange.setEndPoint(start ? 'StartToStart' : 'EndToStart', cursor);\n } else {\n cursorNode = anchorParent.insertBefore(dom.create(doc, 'a'), anchorNode);\n cursor.moveToElementText(cursorNode);\n dom.remove(cursorNode);\n cursor[start ? 'moveStart' : 'moveEnd']('character', textOffset);\n cursor.collapse(false);\n textRange.setEndPoint(start ? 'StartToStart' : 'EndToStart', cursor);\n }\n }\n function adoptEndPoint(textRange, range, commonAncestor, start) {\n var cursorNode = dom.create(range.ownerDocument, 'a'), cursor = textRange.duplicate(), comparison = start ? 'StartToStart' : 'StartToEnd', result, parent, target, previous, next, args, index, appended = false;\n cursorNode.innerHTML = '\\uFEFF';\n cursor.collapse(start);\n parent = cursor.parentElement();\n if (!dom.isAncestorOrSelf(commonAncestor, parent)) {\n parent = commonAncestor;\n }\n do {\n if (appended) {\n parent.insertBefore(cursorNode, cursorNode.previousSibling);\n } else {\n parent.appendChild(cursorNode);\n appended = true;\n }\n cursor.moveToElementText(cursorNode);\n } while ((result = cursor.compareEndPoints(comparison, textRange)) > 0 && cursorNode.previousSibling);\n target = cursorNode.nextSibling;\n if (result == -1 && isDataNode(target)) {\n cursor.setEndPoint(start ? 'EndToStart' : 'EndToEnd', textRange);\n dom.remove(cursorNode);\n args = [\n target,\n cursor.text.length\n ];\n } else {\n previous = !start && cursorNode.previousSibling;\n next = start && cursorNode.nextSibling;\n if (isDataNode(next)) {\n args = [\n next,\n 0\n ];\n } else if (isDataNode(previous)) {\n args = [\n previous,\n previous.length\n ];\n } else {\n index = findNodeIndex(cursorNode);\n if (parent.nextSibling && index == parent.childNodes.length - 1) {\n args = [\n parent.nextSibling,\n 0\n ];\n } else {\n args = [\n parent,\n index\n ];\n }\n }\n dom.remove(cursorNode);\n }\n range[start ? 'setStart' : 'setEnd'].apply(range, args);\n }\n var RangeEnumerator = Class.extend({\n init: function (range) {\n this.enumerate = function () {\n var nodes = [];\n function visit(node) {\n if (dom.is(node, 'img') || node.nodeType == 3 && (!dom.isEmptyspace(node) || node.nodeValue == '\\uFEFF')) {\n nodes.push(node);\n } else {\n node = node.firstChild;\n while (node) {\n visit(node);\n node = node.nextSibling;\n }\n }\n }\n new RangeIterator(range).traverse(visit);\n return nodes;\n };\n }\n });\n var ImmutablesRangeIterator = RangeIterator.extend({\n hasPartialSubtree: function () {\n var immutable = Editor.Immutables && Editor.Immutables.immutable;\n return immutable && !immutable(this._current) && RangeIterator.fn.hasPartialSubtree.call(this);\n },\n getSubtreeIterator: function () {\n return new ImmutablesRangeIterator(this.getSubRange());\n }\n });\n var ImmutablesRangeEnumerator = Class.extend({\n init: function (range) {\n this.enumerate = function () {\n var nodes = [];\n var immutable = Editor.Immutables && Editor.Immutables.immutable;\n function visit(node) {\n if (immutable && !immutable(node)) {\n if (dom.is(node, 'img') || node.nodeType == 3 && (!dom.isEmptyspace(node) || node.nodeValue == '\\uFEFF')) {\n nodes.push(node);\n } else {\n node = node.firstChild;\n while (node) {\n visit(node);\n node = node.nextSibling;\n }\n }\n }\n }\n new ImmutablesRangeIterator(range).traverse(visit);\n return nodes;\n };\n }\n });\n var RestorePoint = Class.extend({\n init: function (range, body, options) {\n var that = this;\n that.range = range;\n that.rootNode = RangeUtils.documentFromRange(range);\n that.body = body || that.getEditable(range);\n if (dom.name(that.body) != 'body') {\n that.rootNode = that.body;\n }\n that.startContainer = that.nodeToPath(range.startContainer);\n that.endContainer = that.nodeToPath(range.endContainer);\n that.startOffset = that.offset(range.startContainer, range.startOffset);\n that.endOffset = that.offset(range.endContainer, range.endOffset);\n that.immutables = options && options.immutables;\n if (that.immutables) {\n that.serializedImmutables = Editor.Immutables.removeImmutables(that.body);\n }\n that.html = that.body.innerHTML;\n if (that.immutables && !that.serializedImmutables.empty) {\n Editor.Immutables.restoreImmutables(that.body, that.serializedImmutables);\n }\n },\n index: function (node) {\n var result = 0, lastType = node.nodeType;\n while (node = node.previousSibling) {\n var nodeType = node.nodeType;\n if (nodeType != 3 || lastType != nodeType) {\n result++;\n }\n lastType = nodeType;\n }\n return result;\n },\n getEditable: function (range) {\n var root = range.commonAncestorContainer;\n while (root && (root.nodeType == 3 || root.attributes && (!root.attributes.contentEditable || root.attributes.contentEditable.nodeValue.toLowerCase() == 'false'))) {\n root = root.parentNode;\n }\n return root;\n },\n restoreHtml: function () {\n var that = this;\n that.body.innerHTML = that.html;\n if (that.immutables && !that.serializedImmutables.empty) {\n Editor.Immutables.restoreImmutables(that.body, that.serializedImmutables);\n }\n },\n offset: function (node, value) {\n if (node.nodeType == 3) {\n while ((node = node.previousSibling) && node.nodeType == 3) {\n value += node.nodeValue.length;\n }\n }\n return value;\n },\n nodeToPath: function (node) {\n var path = [];\n while (node != this.rootNode) {\n path.push(this.index(node));\n node = node.parentNode;\n }\n return path;\n },\n toRangePoint: function (range, start, path, denormalizedOffset) {\n var node = this.rootNode, length = path.length, offset = denormalizedOffset;\n while (length--) {\n node = node.childNodes[path[length]];\n }\n while (node && node.nodeType == 3 && node.nodeValue.length < offset) {\n offset -= node.nodeValue.length;\n node = node.nextSibling;\n }\n if (node && offset >= 0) {\n range[start ? 'setStart' : 'setEnd'](node, offset);\n }\n },\n toRange: function () {\n var that = this, result = that.range.cloneRange();\n that.toRangePoint(result, true, that.startContainer, that.startOffset);\n that.toRangePoint(result, false, that.endContainer, that.endOffset);\n return result;\n }\n });\n var Marker = Class.extend({\n init: function () {\n this.caret = null;\n },\n addCaret: function (range) {\n var that = this;\n var caret = that.caret = dom.create(RangeUtils.documentFromRange(range), 'span', { className: 'k-marker' });\n range.insertNode(caret);\n dom.stripBomNode(caret.previousSibling);\n dom.stripBomNode(caret.nextSibling);\n range.selectNode(caret);\n return caret;\n },\n removeCaret: function (range) {\n var that = this, previous = that.caret.previousSibling, startOffset = 0;\n if (previous) {\n startOffset = isDataNode(previous) ? previous.nodeValue.length : findNodeIndex(previous);\n }\n var container = that.caret.parentNode;\n var containerIndex = previous ? findNodeIndex(previous) : 0;\n dom.remove(that.caret);\n normalize(container);\n var node = container.childNodes[containerIndex];\n if (isDataNode(node)) {\n range.setStart(node, startOffset);\n } else if (node) {\n var textNode = dom.lastTextNode(node);\n if (textNode) {\n range.setStart(textNode, textNode.nodeValue.length);\n } else {\n range[previous ? 'setStartAfter' : 'setStartBefore'](node);\n }\n } else {\n if (!browser.msie && !container.innerHTML) {\n container.innerHTML = '<br _moz_dirty=\"\" />';\n }\n range.selectNodeContents(container);\n }\n range.collapse(true);\n },\n add: function (range, expand) {\n var that = this;\n var collapsed = range.collapsed && !RangeUtils.isExpandable(range);\n var doc = RangeUtils.documentFromRange(range);\n if (expand && range.collapsed) {\n that.addCaret(range);\n range = RangeUtils.expand(range);\n }\n var rangeBoundary = range.cloneRange();\n rangeBoundary.collapse(false);\n that.end = dom.create(doc, 'span', { className: 'k-marker' });\n rangeBoundary.insertNode(that.end);\n rangeBoundary = range.cloneRange();\n rangeBoundary.collapse(true);\n that.start = that.end.cloneNode(true);\n rangeBoundary.insertNode(that.start);\n that._removeDeadMarkers(that.start, that.end);\n if (collapsed) {\n var bom = doc.createTextNode('\\uFEFF');\n dom.insertAfter(bom.cloneNode(), that.start);\n dom.insertBefore(bom, that.end);\n }\n normalize(range.commonAncestorContainer);\n range.setStartBefore(that.start);\n range.setEndAfter(that.end);\n return range;\n },\n _removeDeadMarkers: function (start, end) {\n if (start.previousSibling && start.previousSibling.nodeValue == '\\uFEFF') {\n dom.remove(start.previousSibling);\n }\n if (end.nextSibling && end.nextSibling.nodeValue == '\\uFEFF') {\n dom.remove(end.nextSibling);\n }\n },\n _normalizedIndex: function (node) {\n var index = findNodeIndex(node);\n var pointer = node;\n while (pointer.previousSibling) {\n if (pointer.nodeType == 3 && pointer.previousSibling.nodeType == 3) {\n index--;\n }\n pointer = pointer.previousSibling;\n }\n return index;\n },\n remove: function (range) {\n var that = this, start = that.start, end = that.end, shouldNormalizeStart, shouldNormalizeEnd, shouldNormalize;\n normalize(range.commonAncestorContainer);\n while (!start.nextSibling && start.parentNode) {\n start = start.parentNode;\n }\n while (!end.previousSibling && end.parentNode) {\n end = end.parentNode;\n }\n shouldNormalizeStart = start.previousSibling && start.previousSibling.nodeType == 3 && (start.nextSibling && start.nextSibling.nodeType == 3);\n shouldNormalizeEnd = end.previousSibling && end.previousSibling.nodeType == 3 && (end.nextSibling && end.nextSibling.nodeType == 3);\n shouldNormalize = shouldNormalizeStart && shouldNormalizeEnd;\n start = start.nextSibling;\n end = end.previousSibling;\n var collapsed = false;\n var collapsedToStart = false;\n if (start == that.end) {\n collapsedToStart = !!that.start.previousSibling;\n start = end = that.start.previousSibling || that.end.nextSibling;\n collapsed = true;\n }\n dom.remove(that.start);\n dom.remove(that.end);\n if (!start || !end) {\n range.selectNodeContents(range.commonAncestorContainer);\n range.collapse(true);\n return;\n }\n var startOffset = collapsed ? isDataNode(start) ? start.nodeValue.length : start.childNodes.length : 0;\n var endOffset = isDataNode(end) ? end.nodeValue.length : end.childNodes.length;\n if (start.nodeType == 3) {\n while (start.previousSibling && start.previousSibling.nodeType == 3) {\n start = start.previousSibling;\n startOffset += start.nodeValue.length;\n }\n }\n if (end.nodeType == 3) {\n while (end.previousSibling && end.previousSibling.nodeType == 3) {\n end = end.previousSibling;\n endOffset += end.nodeValue.length;\n }\n }\n var startParent = start.parentNode;\n var endParent = end.parentNode;\n var startIndex = this._normalizedIndex(start);\n var endIndex = this._normalizedIndex(end);\n normalize(startParent);\n if (start.nodeType == 3) {\n start = startParent.childNodes[startIndex];\n }\n normalize(endParent);\n if (end.nodeType == 3) {\n end = endParent.childNodes[endIndex];\n }\n if (collapsed) {\n if (start.nodeType == 3) {\n range.setStart(start, startOffset);\n } else {\n range[collapsedToStart ? 'setStartAfter' : 'setStartBefore'](start);\n }\n range.collapse(true);\n } else {\n if (start.nodeType == 3) {\n range.setStart(start, startOffset);\n } else {\n range.setStartBefore(start);\n }\n if (end.nodeType == 3) {\n range.setEnd(end, endOffset);\n } else {\n range.setEndAfter(end);\n }\n }\n if (that.caret) {\n that.removeCaret(range);\n }\n }\n });\n var boundary = /[\\u0009-\\u000d]|\\u0020|\\u00a0|\\ufeff|\\.|,|;|:|!|\\(|\\)|\\?/;\n var RangeUtils = {\n nodes: function (range) {\n var nodes = RangeUtils.textNodes(range);\n if (!nodes.length) {\n range.selectNodeContents(range.commonAncestorContainer);\n nodes = RangeUtils.textNodes(range);\n if (!nodes.length) {\n nodes = dom.significantChildNodes(range.commonAncestorContainer);\n }\n }\n return nodes;\n },\n textNodes: function (range) {\n return new RangeEnumerator(range).enumerate();\n },\n editableTextNodes: function (range) {\n var nodes = [], immutableParent = Editor.Immutables && Editor.Immutables.immutableParent;\n if (immutableParent && !immutableParent(range.commonAncestorContainer)) {\n nodes = new ImmutablesRangeEnumerator(range).enumerate();\n }\n return nodes;\n },\n documentFromRange: function (range) {\n var startContainer = range.startContainer;\n return startContainer.nodeType == 9 ? startContainer : startContainer.ownerDocument;\n },\n createRange: function (document) {\n if (browser.msie && browser.version < 9) {\n return new W3CRange(document);\n }\n return document.createRange();\n },\n selectRange: function (range) {\n var image = RangeUtils.image(range);\n if (image) {\n range.setStartAfter(image);\n range.setEndAfter(image);\n }\n var selection = SelectionUtils.selectionFromRange(range);\n selection.removeAllRanges();\n selection.addRange(range);\n },\n stringify: function (range) {\n return kendo.format('{0}:{1} - {2}:{3}', dom.name(range.startContainer), range.startOffset, dom.name(range.endContainer), range.endOffset);\n },\n split: function (range, node, trim) {\n function partition(start) {\n var partitionRange = range.cloneRange();\n partitionRange.collapse(start);\n partitionRange[start ? 'setStartBefore' : 'setEndAfter'](node);\n var contents = partitionRange.extractContents();\n if (trim) {\n contents = dom.trim(contents);\n }\n dom[start ? 'insertBefore' : 'insertAfter'](contents, node);\n }\n partition(true);\n partition(false);\n },\n mapAll: function (range, map) {\n var nodes = [];\n new RangeIterator(range).traverse(function (node) {\n var mapped = map(node);\n if (mapped && $.inArray(mapped, nodes) < 0) {\n nodes.push(mapped);\n }\n });\n return nodes;\n },\n getAll: function (range, predicate) {\n var selector = predicate;\n if (typeof predicate == 'string') {\n predicate = function (node) {\n return dom.is(node, selector);\n };\n }\n return RangeUtils.mapAll(range, function (node) {\n if (predicate(node)) {\n return node;\n }\n });\n },\n getMarkers: function (range) {\n return RangeUtils.getAll(range, function (node) {\n return node.className == 'k-marker';\n });\n },\n image: function (range) {\n var nodes = RangeUtils.getAll(range, 'img');\n if (nodes.length == 1) {\n return nodes[0];\n }\n },\n isStartOf: function (originalRange, node) {\n if (originalRange.startOffset !== 0) {\n return false;\n }\n var range = originalRange.cloneRange();\n while (range.startOffset === 0 && range.startContainer != node) {\n var index = dom.findNodeIndex(range.startContainer);\n var parent = range.startContainer.parentNode;\n while (index > 0 && parent[index - 1] && dom.insignificant(parent[index - 1])) {\n index--;\n }\n range.setStart(parent, index);\n }\n return range.startOffset === 0 && range.startContainer == node;\n },\n isEndOf: function (originalRange, node) {\n var range = originalRange.cloneRange();\n range.collapse(false);\n var start = range.startContainer;\n if (dom.isDataNode(start) && range.startOffset == dom.getNodeLength(start)) {\n range.setStart(start.parentNode, dom.findNodeIndex(start) + 1);\n range.collapse(true);\n }\n range.setEnd(node, dom.getNodeLength(node));\n var nodes = [];\n function visit(node) {\n if (!dom.insignificant(node)) {\n nodes.push(node);\n }\n }\n new RangeIterator(range).traverse(visit);\n return !nodes.length;\n },\n wrapSelectedElements: function (range) {\n var startEditable = dom.editableParent(range.startContainer);\n var endEditable = dom.editableParent(range.endContainer);\n while (range.startOffset === 0 && range.startContainer != startEditable) {\n range.setStart(range.startContainer.parentNode, dom.findNodeIndex(range.startContainer));\n }\n function isEnd(offset, container) {\n var length = dom.getNodeLength(container);\n if (offset == length) {\n return true;\n }\n for (var i = offset; i < length; i++) {\n if (!dom.insignificant(container.childNodes[i])) {\n return false;\n }\n }\n return true;\n }\n while (isEnd(range.endOffset, range.endContainer) && range.endContainer != endEditable) {\n range.setEnd(range.endContainer.parentNode, dom.findNodeIndex(range.endContainer) + 1);\n }\n return range;\n },\n expand: function (range) {\n var result = range.cloneRange();\n var startContainer = result.startContainer.childNodes[result.startOffset === 0 ? 0 : result.startOffset - 1];\n var endContainer = result.endContainer.childNodes[result.endOffset];\n if (!isDataNode(startContainer) || !isDataNode(endContainer)) {\n return result;\n }\n var beforeCaret = startContainer.nodeValue;\n var afterCaret = endContainer.nodeValue;\n if (!beforeCaret || !afterCaret) {\n return result;\n }\n var startOffset = beforeCaret.split('').reverse().join('').search(boundary);\n var endOffset = afterCaret.search(boundary);\n if (!startOffset || !endOffset) {\n return result;\n }\n endOffset = endOffset == -1 ? afterCaret.length : endOffset;\n startOffset = startOffset == -1 ? 0 : beforeCaret.length - startOffset;\n result.setStart(startContainer, startOffset);\n result.setEnd(endContainer, endOffset);\n return result;\n },\n isExpandable: function (range) {\n var node = range.startContainer;\n var rangeDocument = RangeUtils.documentFromRange(range);\n if (node == rangeDocument || node == rangeDocument.body) {\n return false;\n }\n var result = range.cloneRange();\n var value = node.nodeValue;\n if (!value) {\n return false;\n }\n var beforeCaret = value.substring(0, result.startOffset);\n var afterCaret = value.substring(result.startOffset);\n var startOffset = 0, endOffset = 0;\n if (beforeCaret) {\n startOffset = beforeCaret.split('').reverse().join('').search(boundary);\n }\n if (afterCaret) {\n endOffset = afterCaret.search(boundary);\n }\n return startOffset && endOffset;\n }\n };\n extend(Editor, {\n SelectionUtils: SelectionUtils,\n W3CRange: W3CRange,\n RangeIterator: RangeIterator,\n W3CSelection: W3CSelection,\n RangeEnumerator: RangeEnumerator,\n RestorePoint: RestorePoint,\n Marker: Marker,\n RangeUtils: RangeUtils\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/system', ['editor/range'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo, Class = kendo.Class, editorNS = kendo.ui.editor, EditorUtils = editorNS.EditorUtils, RangeUtils = editorNS.RangeUtils, registerTool = EditorUtils.registerTool, dom = editorNS.Dom, Tool = editorNS.Tool, ToolTemplate = editorNS.ToolTemplate, RestorePoint = editorNS.RestorePoint, Marker = editorNS.Marker, browser = kendo.support.browser, br = '<br class=\"k-br\">', extend = $.extend;\n var nodeTypes = dom.nodeTypes;\n var PREVIOUS_SIBLING = 'previousSibling';\n function finishUpdate(editor, startRestorePoint) {\n var endRestorePoint = editor.selectionRestorePoint = new RestorePoint(editor.getRange(), editor.body);\n var command = new GenericCommand(startRestorePoint, endRestorePoint);\n command.editor = editor;\n editor.undoRedoStack.push(command);\n return endRestorePoint;\n }\n function selected(node, range) {\n return range.startContainer === node && range.endContainer === node && range.startOffset === 0 && range.endOffset == node.childNodes.length;\n }\n function getSibling(node, direction, condition) {\n var sibling = node ? node[direction] : null;\n while (sibling && !condition(sibling)) {\n sibling = sibling[direction];\n }\n return sibling;\n }\n var Command = Class.extend({\n init: function (options) {\n this.options = options;\n this.restorePoint = new RestorePoint(options.range, options.body, { immutables: options.immutables });\n this.marker = new Marker();\n this.formatter = options.formatter;\n },\n getRange: function () {\n return this.restorePoint.toRange();\n },\n lockRange: function (expand) {\n return this.marker.add(this.getRange(), expand);\n },\n releaseRange: function (range) {\n this.marker.remove(range);\n this.editor.selectRange(range);\n },\n undo: function () {\n var point = this.restorePoint;\n point.restoreHtml();\n this.editor.selectRange(point.toRange());\n },\n redo: function () {\n this.exec();\n },\n createDialog: function (content, options) {\n var editor = this.editor;\n return $(content).appendTo(document.body).kendoWindow(extend({}, editor.options.dialogOptions, options)).closest('.k-window').toggleClass('k-rtl', kendo.support.isRtl(editor.wrapper)).end();\n },\n exec: function () {\n var range = this.lockRange(true);\n this.formatter.editor = this.editor;\n this.formatter.toggle(range);\n this.releaseRange(range);\n },\n immutables: function () {\n return this.editor && this.editor.options.immutables;\n },\n expandImmutablesIn: function (range) {\n if (this.immutables()) {\n kendo.ui.editor.Immutables.expandImmutablesIn(range);\n this.restorePoint = new RestorePoint(range, this.editor.body);\n }\n }\n });\n var GenericCommand = Class.extend({\n init: function (startRestorePoint, endRestorePoint) {\n this.body = startRestorePoint.body;\n this.startRestorePoint = startRestorePoint;\n this.endRestorePoint = endRestorePoint;\n },\n redo: function () {\n this.body.innerHTML = this.endRestorePoint.html;\n this.editor.selectRange(this.endRestorePoint.toRange());\n },\n undo: function () {\n this.body.innerHTML = this.startRestorePoint.html;\n this.editor.selectRange(this.startRestorePoint.toRange());\n }\n });\n var InsertHtmlCommand = Command.extend({\n init: function (options) {\n Command.fn.init.call(this, options);\n this.managesUndoRedo = true;\n },\n exec: function () {\n var editor = this.editor;\n var options = this.options;\n var range = options.range;\n var body = editor.body;\n var startRestorePoint = new RestorePoint(range, body);\n var html = options.html || options.value || '';\n editor.selectRange(range);\n editor.clipboard.paste(html, options);\n if (options.postProcess) {\n options.postProcess(editor, editor.getRange());\n }\n var genericCommand = new GenericCommand(startRestorePoint, new RestorePoint(editor.getRange(), body));\n genericCommand.editor = editor;\n editor.undoRedoStack.push(genericCommand);\n editor.focus();\n }\n });\n var InsertHtmlTool = Tool.extend({\n initialize: function (ui, initOptions) {\n var editor = initOptions.editor, options = this.options, dataSource = options.items ? options.items : editor.options.insertHtml;\n this._selectBox = new editorNS.SelectBox(ui, {\n dataSource: dataSource,\n dataTextField: 'text',\n dataValueField: 'value',\n change: function () {\n Tool.exec(editor, 'insertHtml', this.value());\n },\n title: editor.options.messages.insertHtml,\n highlightFirst: false\n });\n },\n command: function (commandArguments) {\n return new InsertHtmlCommand(commandArguments);\n },\n update: function (ui) {\n var selectbox = ui.data('kendoSelectBox') || ui.find('select').data('kendoSelectBox');\n selectbox.close();\n selectbox.value(selectbox.options.title);\n }\n });\n var tableCells = 'td,th,caption';\n var tableCellsWrappers = 'table,tbody,thead,tfoot,tr';\n var tableElements = tableCellsWrappers + ',' + tableCells;\n var inTable = function (range) {\n return !range.collapsed && $(range.commonAncestorContainer).is(tableCellsWrappers);\n };\n var RemoveTableContent = Class.extend({\n remove: function (range) {\n var that = this;\n var marker = new Marker();\n marker.add(range, false);\n var nodes = RangeUtils.getAll(range, function (node) {\n return $(node).is(tableElements);\n });\n var doc = RangeUtils.documentFromRange(range);\n var start = marker.start;\n var end = marker.end;\n var cellsTypes = tableCells.split(',');\n var startCell = dom.parentOfType(start, cellsTypes);\n var endCell = dom.parentOfType(end, cellsTypes);\n that._removeContent(start, startCell, true);\n that._removeContent(end, endCell, false);\n $(nodes).each(function (i, node) {\n node = $(node);\n (node.is(tableCells) ? node : node.find(tableCells)).each(function (j, cell) {\n cell.innerHTML = '';\n });\n });\n if (startCell && !start.previousSibling) {\n dom.insertBefore(doc.createTextNode('\\uFEFF'), start);\n }\n if (endCell && !end.nextSibling) {\n dom.insertAfter(doc.createTextNode('\\uFEFF'), end);\n }\n if (startCell) {\n range.setStartBefore(start);\n } else if (nodes[0]) {\n startCell = $(nodes[0]);\n startCell = startCell.is(tableCells) ? startCell : startCell.find(tableCells).first();\n if (startCell.length) {\n range.setStart(startCell.get(0), 0);\n }\n }\n range.collapse(true);\n dom.remove(start);\n dom.remove(end);\n },\n _removeContent: function (start, top, forwards) {\n if (top) {\n var sibling = forwards ? 'nextSibling' : 'previousSibling', next, getNext = function (node) {\n while (node && !node[sibling]) {\n node = node.parentNode;\n }\n return node && $.contains(top, node) ? node[sibling] : null;\n };\n start = getNext(start);\n while (start) {\n next = getNext(start);\n dom.remove(start);\n start = next;\n }\n }\n }\n });\n var TypingHandler = Class.extend({\n init: function (editor) {\n this.editor = editor;\n },\n keydown: function (e) {\n var that = this, editor = that.editor, keyboard = editor.keyboard, isTypingKey = keyboard.isTypingKey(e), evt = extend($.Event(), e);\n that.editor.trigger('keydown', evt);\n if (evt.isDefaultPrevented()) {\n e.preventDefault();\n return true;\n }\n if (!evt.isDefaultPrevented() && isTypingKey && !keyboard.isTypingInProgress()) {\n var range = editor.getRange();\n var body = editor.body;\n that.startRestorePoint = new RestorePoint(range, body);\n if (inTable(range)) {\n var removeTableContent = new RemoveTableContent(editor);\n removeTableContent.remove(range);\n editor.selectRange(range);\n }\n if (browser.webkit && !range.collapsed && selected(body, range)) {\n body.innerHTML = '';\n }\n if (editor.immutables && editorNS.Immutables.immutablesContext(range)) {\n var backspaceHandler = new editorNS.BackspaceHandler(editor);\n backspaceHandler.deleteSelection(range);\n }\n keyboard.startTyping(function () {\n that.endRestorePoint = finishUpdate(editor, that.startRestorePoint);\n });\n return true;\n }\n return false;\n },\n keyup: function (e) {\n var keyboard = this.editor.keyboard;\n this.editor.trigger('keyup', e);\n if (keyboard.isTypingInProgress()) {\n keyboard.endTyping();\n return true;\n }\n return false;\n }\n });\n var BackspaceHandler = Class.extend({\n init: function (editor) {\n this.editor = editor;\n },\n _addCaret: function (container) {\n var caret = dom.create(this.editor.document, 'a');\n dom.insertAt(container, caret, 0);\n dom.stripBomNode(caret.previousSibling);\n dom.stripBomNode(caret.nextSibling);\n return caret;\n },\n _restoreCaret: function (caret) {\n var range = this.editor.createRange();\n range.setStartAfter(caret);\n range.collapse(true);\n this.editor.selectRange(range);\n dom.remove(caret);\n },\n _handleDelete: function (range) {\n var node = range.endContainer;\n var block = dom.closestEditableOfType(node, dom.blockElements);\n if (block && editorNS.RangeUtils.isEndOf(range, block)) {\n var next = dom.next(block);\n if (!next || dom.name(next) != 'p') {\n return false;\n }\n var caret = this._addCaret(next);\n this._merge(block, next);\n this._restoreCaret(caret);\n return true;\n }\n return false;\n },\n _cleanBomBefore: function (range) {\n var offset = range.startOffset;\n var node = range.startContainer;\n var text = node.nodeValue;\n var count = 0;\n while (offset - count >= 0 && text[offset - count - 1] == '\\uFEFF') {\n count++;\n }\n if (count > 0) {\n node.deleteData(offset - count, count);\n range.setStart(node, Math.max(0, offset - count));\n range.collapse(true);\n this.editor.selectRange(range);\n }\n },\n _handleBackspace: function (range) {\n var node = range.startContainer;\n var li = dom.closestEditableOfType(node, ['li']);\n var block = dom.closestEditableOfType(node, 'p,h1,h2,h3,h4,h5,h6'.split(','));\n var previousSibling;\n if (dom.isDataNode(node)) {\n this._cleanBomBefore(range);\n }\n previousSibling = getSibling(block, PREVIOUS_SIBLING, function (sibling) {\n return !dom.htmlIndentSpace(sibling);\n });\n if (range.collapsed && range.startOffset !== range.endOffset && range.startOffset < 0) {\n range.startOffset = 0;\n range.endOffset = 0;\n this.editor.selectRange(range);\n }\n if (block && previousSibling && editorNS.RangeUtils.isStartOf(range, block)) {\n var caret = this._addCaret(block);\n this._merge(previousSibling, block);\n this._restoreCaret(caret);\n return true;\n }\n if (li && editorNS.RangeUtils.isStartOf(range, li)) {\n var child = li.firstChild;\n if (!child) {\n li.innerHTML = editorNS.emptyElementContent;\n child = li.firstChild;\n }\n var formatter = new editorNS.ListFormatter(dom.name(li.parentNode), 'p');\n range.selectNodeContents(li);\n formatter.toggle(range);\n if (dom.insignificant(child)) {\n range.setStartBefore(child);\n } else {\n range.setStart(child, 0);\n }\n this.editor.selectRange(range);\n return true;\n }\n return false;\n },\n _handleSelection: function (range) {\n var ancestor = range.commonAncestorContainer;\n var table = dom.closest(ancestor, 'table');\n var emptyParagraphContent = editorNS.emptyElementContent;\n var editor = this.editor;\n if (inTable(range)) {\n var removeTableContent = new RemoveTableContent(editor);\n removeTableContent.remove(range);\n editor.selectRange(range);\n return true;\n }\n var marker = new Marker();\n marker.add(range, false);\n if (editor.immutables) {\n this._handleImmutables(marker);\n }\n this._surroundFullySelectedAnchor(marker);\n range.setStartAfter(marker.start);\n range.setEndBefore(marker.end);\n var start = range.startContainer;\n var end = range.endContainer;\n range.deleteContents();\n if (table && $(table).text() === '') {\n range.selectNode(table);\n range.deleteContents();\n }\n ancestor = range.commonAncestorContainer;\n if (dom.name(ancestor) === 'p' && ancestor.innerHTML === '') {\n ancestor.innerHTML = emptyParagraphContent;\n range.setStart(ancestor, 0);\n }\n this._join(start, end);\n dom.insertAfter(editor.document.createTextNode('\\uFEFF'), marker.start);\n marker.remove(range);\n start = range.startContainer;\n if (dom.name(start) == 'tr') {\n start = start.childNodes[Math.max(0, range.startOffset - 1)];\n range.setStart(start, dom.getNodeLength(start));\n }\n range.collapse(true);\n editor.selectRange(range);\n return true;\n },\n _handleImmutables: function (marker) {\n var immutableParent = editorNS.Immutables.immutableParent;\n var startImmutable = immutableParent(marker.start);\n var endImmutable = immutableParent(marker.start);\n if (startImmutable) {\n dom.insertBefore(marker.start, startImmutable);\n }\n if (endImmutable) {\n dom.insertAfter(marker.end, endImmutable);\n }\n if (startImmutable) {\n dom.remove(startImmutable);\n }\n if (endImmutable && endImmutable.parentNode) {\n dom.remove(endImmutable);\n }\n },\n _surroundFullySelectedAnchor: function (marker) {\n var start = marker.start, startParent = start.parentNode, end = marker.end, anchorParent = dom.is(startParent, 'a') && startParent === end.parentNode && startParent, parent;\n if (anchorParent && start === anchorParent.firstChild && end === anchorParent.lastChild) {\n parent = anchorParent.parentNode;\n parent.insertBefore(start, anchorParent);\n parent.insertBefore(end, anchorParent.nextSibling);\n }\n },\n _root: function (node) {\n while (node && node.parentNode && dom.name(node.parentNode) != 'body') {\n node = node.parentNode;\n }\n return node;\n },\n _join: function (start, end) {\n start = this._root(start);\n end = this._root(end);\n if (start != end && dom.is(end, 'p')) {\n this._merge(start, end);\n }\n },\n _merge: function (dest, src) {\n dom.removeTrailingBreak(dest);\n while (dest && src.firstChild) {\n if (dest.nodeType == 1) {\n dest = dom.list(dest) ? dest.children[dest.children.length - 1] : dest;\n if (dest) {\n dest.appendChild(src.firstChild);\n }\n } else if (dest.nodeType === nodeTypes.TEXT_NODE) {\n this._mergeWithTextNode(dest, src.firstChild);\n } else {\n dest.parentNode.appendChild(src.firstChild);\n }\n }\n dom.remove(src);\n },\n _mergeWithTextNode: function (textNode, appendedNode) {\n if (textNode && textNode.nodeType === nodeTypes.TEXT_NODE) {\n if (textNode.nextSibling && this._isCaret(textNode.nextSibling)) {\n dom.insertAfter(appendedNode, textNode.nextSibling);\n } else {\n dom.insertAfter(appendedNode, textNode);\n }\n }\n },\n _isCaret: function (element) {\n return $(element).is('a');\n },\n keydown: function (e) {\n var method, startRestorePoint;\n var editor = this.editor;\n var range = editor.getRange();\n var keyCode = e.keyCode;\n var keys = kendo.keys;\n var backspace = keyCode === keys.BACKSPACE;\n var del = keyCode == keys.DELETE;\n if (editor.immutables && editor.immutables.keydown(e, range)) {\n return;\n }\n if ((backspace || del) && !range.collapsed) {\n method = '_handleSelection';\n } else if (backspace) {\n method = '_handleBackspace';\n } else if (del) {\n method = '_handleDelete';\n }\n if (!method) {\n return;\n }\n startRestorePoint = new RestorePoint(range, editor.body);\n if (this[method](range)) {\n e.preventDefault();\n finishUpdate(editor, startRestorePoint);\n }\n },\n deleteSelection: function (range) {\n this._handleSelection(range);\n },\n keyup: $.noop\n });\n var SystemHandler = Class.extend({\n init: function (editor) {\n this.editor = editor;\n this.systemCommandIsInProgress = false;\n },\n createUndoCommand: function () {\n this.startRestorePoint = this.endRestorePoint = finishUpdate(this.editor, this.startRestorePoint);\n },\n changed: function () {\n if (this.startRestorePoint) {\n return this.startRestorePoint.html != this.editor.body.innerHTML;\n }\n return false;\n },\n keydown: function (e) {\n var that = this, editor = that.editor, keyboard = editor.keyboard;\n if (keyboard.isModifierKey(e)) {\n if (keyboard.isTypingInProgress()) {\n keyboard.endTyping(true);\n }\n that.startRestorePoint = new RestorePoint(editor.getRange(), editor.body);\n return true;\n }\n if (keyboard.isSystem(e)) {\n that.systemCommandIsInProgress = true;\n if (that.changed()) {\n that.systemCommandIsInProgress = false;\n that.createUndoCommand();\n }\n return true;\n }\n return false;\n },\n keyup: function () {\n var that = this;\n if (that.systemCommandIsInProgress && that.changed()) {\n that.systemCommandIsInProgress = false;\n that.createUndoCommand();\n return true;\n }\n return false;\n }\n });\n var SelectAllHandler = Class.extend({\n init: function (editor) {\n this.editor = editor;\n },\n keydown: function (e) {\n if (!browser.webkit || e.isDefaultPrevented() || !(e.ctrlKey && e.keyCode == 65 && !e.altKey && !e.shiftKey)) {\n return;\n }\n if (this.editor.options.immutables) {\n this._toSelectableImmutables();\n }\n this._selectEditorBody();\n },\n _selectEditorBody: function () {\n var editor = this.editor;\n var range = editor.getRange();\n range.selectNodeContents(editor.body);\n editor.selectRange(range);\n },\n _toSelectableImmutables: function () {\n var editor = this.editor, body = editor.body, immutable = editorNS.Immutables.immutable, emptyTextNode = dom.emptyTextNode, first = body.firstChild, last = body.lastChild;\n while (emptyTextNode(first)) {\n first = first.nextSibling;\n }\n while (emptyTextNode(last)) {\n last = last.previousSibling;\n }\n if (first && immutable(first)) {\n $(br).prependTo(body);\n }\n if (last && immutable(last)) {\n $(br).appendTo(body);\n }\n },\n keyup: $.noop\n });\n var Keyboard = Class.extend({\n init: function (handlers) {\n this.handlers = handlers;\n this.typingInProgress = false;\n },\n isCharacter: function (keyCode) {\n return keyCode >= 48 && keyCode <= 90 || keyCode >= 96 && keyCode <= 111 || keyCode >= 186 && keyCode <= 192 || keyCode >= 219 && keyCode <= 222 || keyCode == 229;\n },\n toolFromShortcut: function (tools, e) {\n var key = String.fromCharCode(e.keyCode), toolName, toolOptions, modifier = this._getShortcutModifier(e, navigator.platform);\n for (toolName in tools) {\n toolOptions = $.extend({\n ctrl: false,\n alt: false,\n shift: false\n }, tools[toolName].options);\n if ((toolOptions.key == key || toolOptions.key == e.keyCode) && toolOptions.ctrl == modifier && toolOptions.alt == e.altKey && toolOptions.shift == e.shiftKey) {\n return toolName;\n }\n }\n },\n _getShortcutModifier: function (e, platform) {\n var mac = platform.toUpperCase().indexOf('MAC') >= 0;\n return mac ? e.metaKey : e.ctrlKey;\n },\n toolsFromShortcut: function (tools, e) {\n var key = String.fromCharCode(e.keyCode), toolName, o, matchesKey, found = [];\n var matchKey = function (toolKey) {\n return toolKey == key || toolKey == e.keyCode;\n };\n for (toolName in tools) {\n o = $.extend({\n ctrl: false,\n alt: false,\n shift: false\n }, tools[toolName].options);\n matchesKey = $.isArray(o.key) ? $.grep(o.key, matchKey).length > 0 : matchKey(o.key);\n if (matchesKey && o.ctrl == e.ctrlKey && o.alt == e.altKey && o.shift == e.shiftKey) {\n found.push(tools[toolName]);\n }\n }\n return found;\n },\n isTypingKey: function (e) {\n var keyCode = e.keyCode;\n return this.isCharacter(keyCode) && !e.ctrlKey && !e.altKey || keyCode == 32 || keyCode == 13 || keyCode == 8 || keyCode == 46 && !e.shiftKey && !e.ctrlKey && !e.altKey;\n },\n isModifierKey: function (e) {\n var keyCode = e.keyCode;\n return keyCode == 17 && !e.shiftKey && !e.altKey || keyCode == 16 && !e.ctrlKey && !e.altKey || keyCode == 18 && !e.ctrlKey && !e.shiftKey;\n },\n isSystem: function (e) {\n return e.keyCode == 46 && e.ctrlKey && !e.altKey && !e.shiftKey;\n },\n startTyping: function (callback) {\n this.onEndTyping = callback;\n this.typingInProgress = true;\n },\n stopTyping: function () {\n if (this.typingInProgress && this.onEndTyping) {\n this.onEndTyping();\n }\n this.typingInProgress = false;\n },\n endTyping: function (force) {\n var that = this;\n that.clearTimeout();\n if (force) {\n that.stopTyping();\n } else {\n that.timeout = window.setTimeout($.proxy(that.stopTyping, that), 1000);\n }\n },\n isTypingInProgress: function () {\n return this.typingInProgress;\n },\n clearTimeout: function () {\n window.clearTimeout(this.timeout);\n },\n notify: function (e, what) {\n var i, handlers = this.handlers;\n for (i = 0; i < handlers.length; i++) {\n if (handlers[i][what](e)) {\n break;\n }\n }\n },\n keydown: function (e) {\n this.notify(e, 'keydown');\n },\n keyup: function (e) {\n this.notify(e, 'keyup');\n }\n });\n var Clipboard = Class.extend({\n init: function (editor) {\n this.editor = editor;\n var pasteCleanup = editor.options.pasteCleanup;\n this.cleaners = [\n new ScriptCleaner(pasteCleanup),\n new TabCleaner(pasteCleanup),\n new MSWordFormatCleaner(pasteCleanup),\n new WebkitFormatCleaner(pasteCleanup),\n new HtmlTagsCleaner(pasteCleanup),\n new HtmlAttrCleaner(pasteCleanup),\n new HtmlContentCleaner(pasteCleanup),\n new CustomCleaner(pasteCleanup)\n ];\n },\n htmlToFragment: function (html) {\n var editor = this.editor, doc = editor.document, container = dom.create(doc, 'div'), fragment = doc.createDocumentFragment();\n container.innerHTML = html;\n while (container.firstChild) {\n fragment.appendChild(container.firstChild);\n }\n return fragment;\n },\n isBlock: function (html) {\n return /<(div|p|ul|ol|table|h[1-6])/i.test(html);\n },\n _startModification: function () {\n var range;\n var restorePoint;\n var editor = this.editor;\n if (this._inProgress) {\n return;\n }\n this._inProgress = true;\n range = editor.getRange();\n restorePoint = new RestorePoint(range, editor.body);\n dom.persistScrollTop(editor.document);\n return {\n range: range,\n restorePoint: restorePoint\n };\n },\n _endModification: function (modificationInfo) {\n finishUpdate(this.editor, modificationInfo.restorePoint);\n this.editor._selectionChange();\n this._inProgress = false;\n },\n _contentModification: function (before, after) {\n var that = this;\n var editor = that.editor;\n var modificationInfo = that._startModification();\n if (!modificationInfo) {\n return;\n }\n before.call(that, editor, modificationInfo.range);\n setTimeout(function () {\n after.call(that, editor, modificationInfo.range);\n that._endModification(modificationInfo);\n });\n },\n _removeBomNodes: function (range) {\n var nodes = editorNS.RangeUtils.textNodes(range);\n for (var i = 0; i < nodes.length; i++) {\n nodes[i].nodeValue = dom.stripBom(nodes[i].nodeValue);\n }\n },\n _onBeforeCopy: function (range) {\n var marker = new Marker();\n marker.add(range);\n this._removeBomNodes(range);\n marker.remove(range);\n this.editor.selectRange(range);\n },\n oncopy: function () {\n this._onBeforeCopy(this.editor.getRange());\n },\n oncut: function () {\n this._onBeforeCopy(this.editor.getRange());\n this._contentModification($.noop, $.noop);\n },\n _fileToDataURL: function (blob) {\n var deferred = $.Deferred();\n var reader = new FileReader();\n if (!(blob instanceof window.File) && blob.getAsFile) {\n blob = blob.getAsFile();\n }\n reader.onload = $.proxy(deferred.resolve, deferred);\n reader.readAsDataURL(blob);\n return deferred.promise();\n },\n _triggerPaste: function (html, options) {\n var args = { html: html || '' };\n args.html = args.html.replace(/\\ufeff/g, '');\n this.editor.trigger('paste', args);\n this.paste(args.html, options || {});\n },\n _handleImagePaste: function (e) {\n if (!('FileReader' in window) || browser.msie && browser.version > 10) {\n return;\n }\n var clipboardData = e.clipboardData || e.originalEvent.clipboardData || window.clipboardData || {};\n var items = clipboardData.items || clipboardData.files;\n if (!items) {\n return;\n }\n var images = $.grep(items, function (item) {\n return /^image\\//i.test(item.type);\n });\n var html = $.grep(items, function (item) {\n return /^text\\/html/i.test(item.type);\n });\n if (html.length || !images.length) {\n return;\n }\n var modificationInfo = this._startModification();\n if (!modificationInfo) {\n return;\n }\n $.when.apply($, $.map(images, this._fileToDataURL)).done($.proxy(function () {\n var results = Array.prototype.slice.call(arguments);\n var html = $.map(results, function (e) {\n return '<img src=\"' + e.target.result + '\" />';\n }).join('');\n this._triggerPaste(html);\n this._endModification(modificationInfo);\n }, this));\n return true;\n },\n onpaste: function (e) {\n if (this._handleImagePaste(e)) {\n e.preventDefault();\n return;\n }\n this.expandImmutablesIn();\n this._contentModification(function beforePaste(editor, range) {\n var clipboardNode = dom.create(editor.document, 'div', {\n className: 'k-paste-container',\n innerHTML: '\\uFEFF'\n });\n var browser = kendo.support.browser;\n var body = editor.body;\n this._decoreateClipboardNode(clipboardNode, body);\n body.appendChild(clipboardNode);\n if (browser.webkit) {\n this._moveToCaretPosition(clipboardNode, range);\n }\n if (browser.msie && browser.version < 11) {\n e.preventDefault();\n var r = editor.createRange();\n r.selectNodeContents(clipboardNode);\n editor.selectRange(r);\n var textRange = editor.document.body.createTextRange();\n textRange.moveToElementText(clipboardNode);\n $(body).unbind('paste');\n textRange.execCommand('Paste');\n $(body).bind('paste', $.proxy(this.onpaste, this));\n } else {\n var clipboardRange = editor.createRange();\n clipboardRange.selectNodeContents(clipboardNode);\n editor.selectRange(clipboardRange);\n }\n range.deleteContents();\n }, function afterPaste(editor, range) {\n var html = '', containers;\n editor.selectRange(range);\n containers = $(editor.body).children('.k-paste-container');\n containers.each(function () {\n var lastChild = this.lastChild;\n if (lastChild && dom.is(lastChild, 'br')) {\n dom.remove(lastChild);\n }\n html += this.innerHTML;\n });\n containers.remove();\n this._triggerPaste(html, { clean: true });\n });\n },\n _decoreateClipboardNode: function (node, body) {\n if (!browser.msie && !browser.webkit) {\n return;\n }\n node = $(node);\n node.css({\n borderWidth: '0px',\n width: '0px',\n height: '0px',\n overflow: 'hidden',\n margin: '0',\n padding: '0'\n });\n if (browser.msie) {\n var documentElement = $(body.ownerDocument.documentElement);\n node.css({\n fontVariant: 'normal',\n fontWeight: 'normal',\n lineSpacing: 'normal',\n lineHeight: 'normal',\n textDecoration: 'none'\n });\n var color = documentElement.css('color');\n if (color) {\n node.css('color', color);\n }\n var fontFamily = documentElement.css('fontFamily');\n if (fontFamily) {\n node.css('fontFamily', fontFamily);\n }\n var fontSize = documentElement.css('fontSize');\n if (fontSize) {\n node.css('fontSize', fontSize);\n }\n }\n },\n _moveToCaretPosition: function (node, range) {\n var that = this;\n var body = that.editor.body;\n var nodeOffset = dom.offset(node, body);\n var caretOffset = that._caretOffset(range, body);\n var translateX = caretOffset.left - nodeOffset.left;\n var translateY = caretOffset.top - nodeOffset.top;\n var translate = 'translate(' + translateX + 'px,' + translateY + 'px)';\n $(node).css({\n '-webkit-transform': translate,\n 'transform': translate\n });\n },\n _caretOffset: function (range, body) {\n var editor = this.editor;\n var caret = dom.create(editor.document, 'span', { innerHTML: '\\uFEFF' });\n var startContainer = range.startContainer;\n var rangeChanged;\n if (range.collapsed) {\n var isStartTextNode = dom.isDataNode(startContainer);\n if (isStartTextNode && (dom.isBom(startContainer) || range.startOffset === 0)) {\n dom.insertBefore(caret, startContainer);\n } else if (isStartTextNode && range.startOffset === startContainer.length) {\n dom.insertAfter(caret, startContainer);\n } else {\n range.insertNode(caret);\n rangeChanged = true;\n }\n } else {\n startContainer = startContainer === body ? startContainer.childNodes[range.startOffset] : startContainer;\n dom.insertBefore(caret, startContainer);\n }\n var offset = dom.offset(caret, body);\n var prev = caret.previousSibling;\n var next = caret.nextSibling;\n dom.remove(caret);\n if (rangeChanged && dom.isDataNode(prev) && dom.isDataNode(next) && !dom.isBom(prev) && !dom.isBom(next)) {\n var prevLength = prev.length;\n next.data = prev.data + next.data;\n range.setStart(next, prevLength);\n dom.remove(prev);\n range.collapse(true);\n editor.selectRange(range);\n }\n return offset;\n },\n expandImmutablesIn: function (range) {\n var editor = this.editor;\n if (editor && editor.options.immutables) {\n var body = editor.body;\n range = range || editor.getRange();\n kendo.ui.editor.Immutables.expandImmutablesIn(range);\n if (range.startContainer === body && range.startOffset === 0) {\n var doc = body.ownerDocument;\n var bomNode = doc.createTextNode('\\uFEFF');\n body.insertBefore(bomNode, body.childNodes[0]);\n range.setStartBefore(bomNode);\n }\n editor.selectRange(range);\n }\n },\n splittableParent: function (block, node) {\n var parentNode, body;\n if (block) {\n return dom.closestEditableOfType(node, [\n 'p',\n 'ul',\n 'ol'\n ]) || node.parentNode;\n }\n parentNode = node.parentNode;\n body = node.ownerDocument.body;\n if (dom.isInline(parentNode)) {\n while (parentNode.parentNode != body && !dom.isBlock(parentNode.parentNode)) {\n parentNode = parentNode.parentNode;\n }\n }\n return parentNode;\n },\n paste: function (html, options) {\n var editor = this.editor, i, l;\n this.expandImmutablesIn();\n options = extend({\n clean: false,\n split: true\n }, options);\n if (!options.skipCleaners) {\n for (i = 0, l = this.cleaners.length; i < l; i++) {\n if (this.cleaners[i].applicable(html)) {\n html = this.cleaners[i].clean(html);\n }\n }\n }\n if (options.clean) {\n html = html.replace(/(<br>(\\s| )*)+(<\\/?(div|p|li|col|t))/gi, '$3');\n html = html.replace(/<(a|span)[^>]*><\\/\\1>/gi, '');\n }\n html = html.replace(/^<li/i, '<ul><li').replace(/li>$/g, 'li></ul>');\n var block = this.isBlock(html);\n editor.focus();\n var range = editor.getRange();\n range.deleteContents();\n if (range.startContainer == editor.document) {\n range.selectNodeContents(editor.body);\n }\n var marker = new Marker();\n var caret = marker.addCaret(range);\n var parent = this.splittableParent(block, caret);\n var unwrap = false;\n var splittable = parent != editor.body && !dom.is(parent, 'td');\n if (options.split && splittable && (block || dom.isInline(parent))) {\n range.selectNode(caret);\n editorNS.RangeUtils.split(range, parent, true);\n unwrap = true;\n }\n var fragment = this.htmlToFragment(html);\n if (fragment.firstChild && fragment.firstChild.className === 'k-paste-container') {\n var fragmentsHtml = [];\n for (i = 0, l = fragment.childNodes.length; i < l; i++) {\n fragmentsHtml.push(fragment.childNodes[i].innerHTML);\n }\n fragment = this.htmlToFragment(fragmentsHtml.join('<br />'));\n }\n $(fragment.childNodes).filter('table').addClass('k-table').end().find('table').addClass('k-table');\n range.insertNode(fragment);\n parent = this.splittableParent(block, caret);\n if (unwrap) {\n while (caret.parentNode != parent) {\n dom.unwrap(caret.parentNode);\n }\n dom.unwrap(caret.parentNode);\n }\n dom.normalize(range.commonAncestorContainer);\n caret.style.display = 'inline';\n dom.restoreScrollTop(editor.document);\n dom.scrollTo(caret);\n marker.removeCaret(range);\n var rangeEnd = range.commonAncestorContainer.parentNode;\n if (range.collapsed && dom.name(rangeEnd) == 'tbody') {\n range.setStartAfter($(rangeEnd).closest('table')[0]);\n range.collapse(true);\n }\n editor.selectRange(range);\n }\n });\n var Cleaner = Class.extend({\n init: function (options) {\n this.options = options || {};\n this.replacements = [];\n },\n clean: function (html, customReplacements) {\n var that = this, replacements = customReplacements || that.replacements, i, l;\n for (i = 0, l = replacements.length; i < l; i += 2) {\n html = html.replace(replacements[i], replacements[i + 1]);\n }\n return html;\n }\n });\n var ScriptCleaner = Cleaner.extend({\n init: function (options) {\n Cleaner.fn.init.call(this, options);\n this.replacements = [\n /<(\\/?)script([^>]*)>/i,\n '<$1telerik:script$2>'\n ];\n },\n applicable: function (html) {\n return !this.options.none && /<script[^>]*>/i.test(html);\n }\n });\n var TabCleaner = Cleaner.extend({\n init: function (options) {\n Cleaner.fn.init.call(this, options);\n var replacement = ' ';\n this.replacements = [\n /<span\\s+class=\"Apple-tab-span\"[^>]*>\\s*<\\/span>/gi,\n replacement,\n /\\t/gi,\n replacement,\n / /gi,\n replacement\n ];\n },\n applicable: function (html) {\n return / |class=\"?Apple-tab-span/i.test(html);\n }\n });\n var MSWordFormatCleaner = Cleaner.extend({\n init: function (options) {\n Cleaner.fn.init.call(this, options);\n this.junkReplacements = [\n /<\\?xml[^>]*>/gi,\n '',\n /<!--(.|\\n)*?-->/g,\n '',\n /"/g,\n '\\'',\n /<o:p> <\\/o:p>/gi,\n ' ',\n /<\\/?(meta|link|style|o:|v:|x:)[^>]*>((?:.|\\n)*?<\\/(meta|link|style|o:|v:|x:)[^>]*>)?/gi,\n '',\n /<\\/o>/g,\n ''\n ];\n this.replacements = this.junkReplacements.concat([\n /(?:<br> [\\s\\r\\n]+|<br>)*(<\\/?(h[1-6]|hr|p|div|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|address|pre|form|blockquote|dl|dt|dd|dir|fieldset)[^>]*>)(?:<br> [\\s\\r\\n]+|<br>)*/g,\n '$1',\n /<br><br>/g,\n '<BR><BR>',\n /<br>(?!\\n)/g,\n ' ',\n /<table([^>]*)>(\\s| )+<t/gi,\n '<table$1><t',\n /<tr[^>]*>(\\s| )*<\\/tr>/gi,\n '',\n /<tbody[^>]*>(\\s| )*<\\/tbody>/gi,\n '',\n /<table[^>]*>(\\s| )*<\\/table>/gi,\n '',\n /<BR><BR>/g,\n '<br>',\n /^\\s*( )+/gi,\n '',\n /( |<br[^>]*>)+\\s*$/gi,\n '',\n /mso-[^;\"]*;?/gi,\n '',\n /<(\\/?)b(\\s[^>]*)?>/gi,\n '<$1strong$2>',\n /<(\\/?)font(\\s[^>]*)?>/gi,\n this.convertFontMatch,\n /<(\\/?)i(\\s[^>]*)?>/gi,\n '<$1em$2>',\n /style=([\"|'])\\s*\\1/g,\n '',\n /(<br[^>]*>)?\\n/g,\n function ($0, $1) {\n return $1 ? $0 : ' ';\n }\n ]);\n },\n convertFontMatch: function (match, closing, args) {\n var faceRe = /face=['\"]([^'\"]+)['\"]/i;\n var face = faceRe.exec(args);\n var family = args && face && face[1];\n if (closing) {\n return '</span>';\n } else if (family) {\n return '<span style=\"font-family:' + family + '\">';\n } else {\n return '<span>';\n }\n },\n applicable: function (html) {\n return /class=\"?Mso/i.test(html) || /style=\"[^\"]*mso-/i.test(html) || /urn:schemas-microsoft-com:office/.test(html);\n },\n stripEmptyAnchors: function (html) {\n return html.replace(/<a([^>]*)>\\s*<\\/a>/gi, function (a, attributes) {\n if (!attributes || attributes.indexOf('href') < 0) {\n return '';\n }\n return a;\n });\n },\n listType: function (p, listData) {\n var html = p.innerHTML;\n var text = dom.innerText(p);\n var startingSymbol;\n var matchSymbol = html.match(/^(?:<span [^>]*texhtml[^>]*>)?<span [^>]*(?:Symbol|Wingdings)[^>]*>([^<]+)/i);\n var symbol = matchSymbol && matchSymbol[1];\n var isNumber = /^[a-z\\d]/i.test(symbol);\n var trimStartText = function (text) {\n return text.replace(/^(?: |[\\u00a0\\n\\r\\s])+/, '');\n };\n if (matchSymbol) {\n startingSymbol = true;\n }\n html = html.replace(/<\\/?\\w+[^>]*>/g, '').replace(/ /g, '\\xA0');\n if (!startingSymbol && /^[\\u2022\\u00b7\\u00a7\\u00d8o]\\u00a0+/.test(html) || startingSymbol && /^.\\u00a0+/.test(html) || symbol && !isNumber && listData) {\n return {\n tag: 'ul',\n style: this._guessUnorderedListStyle(trimStartText(text))\n };\n }\n if (/^\\s*\\w+[\\.\\)][\\u00a0 ]{2,}/.test(html)) {\n return {\n tag: 'ol',\n style: this._guessOrderedListStyle(trimStartText(text))\n };\n }\n },\n _convertToLi: function (p) {\n var content;\n if (p.childNodes.length == 1) {\n content = p.firstChild.innerHTML.replace(/^\\w+[\\.\\)]( )+ /, '');\n } else {\n dom.remove(p.firstChild);\n if (p.firstChild.nodeType == 3) {\n if (/^[ivxlcdm]+\\.$/i.test(p.firstChild.nodeValue)) {\n dom.remove(p.firstChild);\n }\n }\n if (/^( |\\s)+$/i.test(p.firstChild.innerHTML)) {\n dom.remove(p.firstChild);\n }\n content = p.innerHTML;\n }\n dom.remove(p);\n return dom.create(document, 'li', { innerHTML: content });\n },\n _guessUnorderedListStyle: function (symbol) {\n if (/^[\\u2022\\u00b7\\u00FC\\u00D8\\u002dv-]/.test(symbol)) {\n return null;\n } else if (/^o/.test(symbol)) {\n return 'circle';\n } else {\n return 'square';\n }\n },\n _guessOrderedListStyle: function (symbol) {\n var listType = null;\n if (!/^\\d/.test(symbol)) {\n listType = (/^[a-z]/.test(symbol) ? 'lower-' : 'upper-') + (/^[ivxlcdm]/i.test(symbol) ? 'roman' : 'alpha');\n }\n return listType;\n },\n extractListLevels: function (html) {\n var msoListRegExp = /style=['\"]?[^'\"]*?mso-list:\\s?[a-zA-Z]+(\\d+)\\s[a-zA-Z]+(\\d+)\\s(\\w+)/gi;\n html = html.replace(msoListRegExp, function (match, list, level) {\n return kendo.format('data-list=\"{0}\" data-level=\"{1}\" {2}', list, level, match);\n });\n return html;\n },\n lists: function (placeholder) {\n var blockChildren = $(placeholder).find(dom.blockElements.join(',')), lastMargin = -1, name, levels = {}, li = placeholder, rootMargin, listContainer, i, p, type, margin, list, listData;\n for (i = 0; i < blockChildren.length; i++) {\n p = blockChildren[i];\n listData = $(p).data();\n var listIndex = listData.list;\n name = dom.name(p);\n if (name == 'td') {\n continue;\n }\n var listType = this.listType(p, listData);\n type = listType && listType.tag;\n if (!type || name != 'p') {\n if (!p.innerHTML) {\n dom.remove(p);\n } else {\n lastMargin = -1;\n li = placeholder;\n }\n continue;\n }\n margin = parseFloat(p.style.marginLeft || 0);\n if (rootMargin === undefined) {\n rootMargin = margin;\n }\n var levelType = type + listIndex;\n if (!levels[margin]) {\n levels[margin] = {};\n }\n list = levels[margin][levelType];\n if (margin > lastMargin || !list) {\n list = dom.create(document, type, { style: { listStyleType: listType.style } });\n if (li == placeholder || margin <= lastMargin) {\n if (listContainer && rootMargin !== margin) {\n listContainer.appendChild(list);\n } else {\n dom.insertBefore(list, p);\n }\n levels[margin] = {};\n } else {\n listContainer = li;\n li.appendChild(list);\n }\n levels[margin][levelType] = list;\n }\n li = this._convertToLi(p);\n list.appendChild(li);\n lastMargin = margin;\n }\n },\n removeAttributes: function (element) {\n var attributes = element.attributes, i = attributes.length;\n while (i--) {\n if (dom.name(attributes[i]) != 'colspan') {\n element.removeAttributeNode(attributes[i]);\n }\n }\n },\n createColGroup: function (row) {\n var cells = row.cells;\n var table = $(row).closest('table');\n var colgroup = table.children('colgroup');\n if (cells.length < 2) {\n return;\n } else if (colgroup.length) {\n cells = colgroup.children();\n colgroup[0].parentNode.removeChild(colgroup[0]);\n }\n colgroup = $($.map(cells, function (cell) {\n var width = cell.width;\n if (width && parseInt(width, 10) !== 0) {\n return kendo.format('<col style=\"width:{0}px;\"/>', width);\n }\n return '<col />';\n }).join(''));\n if (!colgroup.is('colgroup')) {\n colgroup = $('<colgroup/>').append(colgroup);\n }\n colgroup.prependTo(table);\n },\n convertHeaders: function (row) {\n var cells = row.cells, i, boldedCells = $.map(cells, function (cell) {\n var child = $(cell).children('p').children('strong')[0];\n if (child && dom.name(child) == 'strong') {\n return child;\n }\n });\n if (boldedCells.length == cells.length) {\n for (i = 0; i < boldedCells.length; i++) {\n dom.unwrap(boldedCells[i]);\n }\n $(row).closest('table').find('colgroup').after('<thead></thead>').end().find('thead').append(row);\n for (i = 0; i < cells.length; i++) {\n dom.changeTag(cells[i], 'th');\n }\n }\n },\n removeParagraphs: function (cells) {\n var i, j, len, cell, paragraphs;\n for (i = 0; i < cells.length; i++) {\n this.removeAttributes(cells[i]);\n cell = $(cells[i]);\n paragraphs = cell.children('p');\n for (j = 0, len = paragraphs.length; j < len; j++) {\n if (j < len - 1) {\n dom.insertAfter(dom.create(document, 'br'), paragraphs[j]);\n }\n dom.unwrap(paragraphs[j]);\n }\n }\n },\n removeDefaultColors: function (spans) {\n for (var i = 0; i < spans.length; i++) {\n if (/^\\s*color:\\s*[^;]*;?$/i.test(spans[i].style.cssText)) {\n dom.unwrap(spans[i]);\n }\n }\n },\n tables: function (placeholder) {\n var tables = $(placeholder).find('table'), that = this, rows, firstRow, longestRow, i, j;\n for (i = 0; i < tables.length; i++) {\n rows = tables[i].rows;\n longestRow = firstRow = rows[0];\n for (j = 1; j < rows.length; j++) {\n if (rows[j].cells.length > longestRow.cells.length) {\n longestRow = rows[j];\n }\n }\n that.createColGroup(longestRow);\n that.convertHeaders(firstRow);\n that.removeAttributes(tables[i]);\n that.removeParagraphs(tables.eq(i).find('td,th'));\n that.removeDefaultColors(tables.eq(i).find('span'));\n }\n },\n headers: function (placeholder) {\n var titles = $(placeholder).find('p.MsoTitle');\n for (var i = 0; i < titles.length; i++) {\n dom.changeTag(titles[i], 'h1');\n }\n },\n removeFormatting: function (placeholder) {\n $(placeholder).find('*').each(function () {\n $(this).css({\n fontSize: '',\n fontFamily: ''\n });\n if (!this.getAttribute('style') && !this.style.cssText) {\n this.removeAttribute('style');\n }\n });\n },\n clean: function (html) {\n var that = this, placeholder;\n var filters = this.options;\n if (filters.none) {\n html = Cleaner.fn.clean.call(that, html, this.junkReplacements);\n html = that.stripEmptyAnchors(html);\n } else {\n html = this.extractListLevels(html);\n html = Cleaner.fn.clean.call(that, html);\n html = that.stripEmptyAnchors(html);\n placeholder = dom.create(document, 'div', { innerHTML: html });\n that.headers(placeholder);\n if (filters.msConvertLists) {\n that.lists(placeholder);\n }\n that.tables(placeholder);\n if (filters.msAllFormatting) {\n that.removeFormatting(placeholder);\n }\n html = placeholder.innerHTML.replace(/(<[^>]*)\\s+class=\"?[^\"\\s>]*\"?/gi, '$1');\n }\n return html;\n }\n });\n var WebkitFormatCleaner = Cleaner.extend({\n init: function (options) {\n Cleaner.fn.init.call(this, options);\n this.replacements = [\n /\\s+class=\"Apple-style-span[^\"]*\"/gi,\n '',\n /<(div|p|h[1-6])\\s+style=\"[^\"]*\"/gi,\n '<$1',\n /^<div>(.*)<\\/div>$/,\n '$1'\n ];\n },\n applicable: function (html) {\n return /class=\"?Apple-style-span|style=\"[^\"]*-webkit-nbsp-mode/i.test(html);\n }\n });\n var DomCleaner = Cleaner.extend({\n clean: function (html) {\n var container = dom.create(document, 'div', { innerHTML: html });\n container = this.cleanDom(container);\n return container.innerHTML;\n },\n cleanDom: function (container) {\n return container;\n }\n });\n var HtmlTagsCleaner = DomCleaner.extend({\n cleanDom: function (container) {\n var tags = this.collectTags();\n $(container).find(tags).each(function () {\n dom.unwrap(this);\n });\n return container;\n },\n collectTags: function () {\n if (this.options.span) {\n return 'span';\n }\n },\n applicable: function () {\n return this.options.span;\n }\n });\n var HtmlAttrCleaner = DomCleaner.extend({\n cleanDom: function (container) {\n var attributes = this.collectAttr();\n var nodes = $(container).find('[' + attributes.join('],[') + ']');\n nodes.removeAttr(attributes.join(' '));\n return container;\n },\n collectAttr: function () {\n if (this.options.css) {\n return [\n 'class',\n 'style'\n ];\n }\n return [];\n },\n applicable: function () {\n return this.options.css;\n }\n });\n var TextContainer = function () {\n this.text = '';\n this.add = function (text) {\n this.text += text;\n };\n };\n var HtmlTextLines = Class.extend({\n init: function (separators) {\n this.separators = separators || {\n text: ' ',\n line: '<br/>'\n };\n this.lines = [];\n this.inlineBlockText = [];\n this.resetLine();\n },\n appendText: function (text) {\n if (text.nodeType === 3) {\n text = text.nodeValue;\n }\n this.textContainer.add(text);\n },\n appendInlineBlockText: function (text) {\n this.inlineBlockText.push(text);\n },\n flashInlineBlockText: function () {\n if (this.inlineBlockText.length) {\n this.appendText(this.inlineBlockText.join(' '));\n this.inlineBlockText = [];\n }\n },\n endLine: function () {\n this.flashInlineBlockText();\n this.resetLine();\n },\n html: function () {\n var separators = this.separators;\n var result = '';\n var lines = this.lines;\n this.flashInlineBlockText();\n for (var i = 0, il = lines.length, il1 = il - 1; i < il; i++) {\n var line = lines[i];\n for (var j = 0, jl = line.length, jl1 = jl - 1; j < jl; j++) {\n var text = line[j].text;\n result += text;\n if (j !== jl1) {\n result += separators.text;\n }\n }\n if (i !== il1) {\n result += separators.line;\n }\n }\n return result;\n },\n resetLine: function () {\n this.textContainer = new TextContainer();\n this.line = [];\n this.line.push(this.textContainer);\n this.lines.push(this.line);\n }\n });\n var DomEnumerator = Class.extend({\n init: function (callback) {\n this.callback = callback;\n },\n enumerate: function (node) {\n if (!node) {\n return;\n }\n var preventDown = this.callback(node);\n var child = node.firstChild;\n if (!preventDown && child) {\n this.enumerate(child);\n }\n this.enumerate(node.nextSibling);\n }\n });\n var HtmlContentCleaner = Cleaner.extend({\n init: function (options) {\n Cleaner.fn.init.call(this, options);\n this.hasText = false;\n this.enumerator = new DomEnumerator($.proxy(this.buildText, this));\n },\n clean: function (html) {\n var container = dom.create(document, 'div', { innerHTML: html });\n return this.cleanDom(container);\n },\n cleanDom: function (container) {\n this.separators = this.getDefaultSeparators();\n this.htmlLines = new HtmlTextLines(this.separators);\n this.enumerator.enumerate(container.firstChild);\n this.hasText = false;\n return this.htmlLines.html();\n },\n buildText: function (node) {\n if (dom.isDataNode(node)) {\n if (dom.isEmptyspace(node)) {\n return;\n }\n this.htmlLines.appendText(node.nodeValue.replace('\\n', this.separators.line));\n this.hasText = true;\n } else if (dom.isBlock(node) && this.hasText) {\n var action = this.actions[dom.name(node)] || this.actions.block;\n return action(this, node);\n }\n },\n applicable: function () {\n var o = this.options;\n return o.all || o.keepNewLines;\n },\n getDefaultSeparators: function () {\n if (this.options.all) {\n return {\n text: ' ',\n line: ' '\n };\n } else {\n return {\n text: ' ',\n line: '<br/>'\n };\n }\n },\n actions: {\n ul: $.noop,\n ol: $.noop,\n table: $.noop,\n thead: $.noop,\n tbody: $.noop,\n td: function (cleaner, node) {\n var tdCleaner = new HtmlContentCleaner({ all: true });\n var cellText = tdCleaner.cleanDom(node);\n cleaner.htmlLines.appendInlineBlockText(cellText);\n return true;\n },\n block: function (cleaner) {\n cleaner.htmlLines.endLine();\n }\n }\n });\n var CustomCleaner = Cleaner.extend({\n clean: function (html) {\n return this.options.custom(html);\n },\n applicable: function () {\n return typeof this.options.custom === 'function';\n }\n });\n var PrintCommand = Command.extend({\n init: function (options) {\n Command.fn.init.call(this, options);\n this.managesUndoRedo = true;\n },\n exec: function () {\n var editor = this.editor;\n if (kendo.support.browser.msie) {\n editor.document.execCommand('print', false, null);\n } else if (editor.window.print) {\n editor.window.print();\n }\n }\n });\n var ExportPdfCommand = Command.extend({\n init: function (options) {\n this.async = true;\n Command.fn.init.call(this, options);\n },\n exec: function () {\n var that = this;\n var range = this.lockRange(true);\n this.editor.saveAsPDF().then(function () {\n that.releaseRange(range);\n });\n }\n });\n extend(editorNS, {\n _finishUpdate: finishUpdate,\n Command: Command,\n GenericCommand: GenericCommand,\n InsertHtmlCommand: InsertHtmlCommand,\n InsertHtmlTool: InsertHtmlTool,\n TypingHandler: TypingHandler,\n SystemHandler: SystemHandler,\n BackspaceHandler: BackspaceHandler,\n SelectAllHandler: SelectAllHandler,\n Keyboard: Keyboard,\n Clipboard: Clipboard,\n Cleaner: Cleaner,\n ScriptCleaner: ScriptCleaner,\n TabCleaner: TabCleaner,\n MSWordFormatCleaner: MSWordFormatCleaner,\n WebkitFormatCleaner: WebkitFormatCleaner,\n HtmlTagsCleaner: HtmlTagsCleaner,\n HtmlAttrCleaner: HtmlAttrCleaner,\n HtmlContentCleaner: HtmlContentCleaner,\n HtmlTextLines: HtmlTextLines,\n CustomCleaner: CustomCleaner,\n PrintCommand: PrintCommand,\n ExportPdfCommand: ExportPdfCommand\n });\n registerTool('insertHtml', new InsertHtmlTool({\n template: new ToolTemplate({\n template: EditorUtils.dropDownListTemplate,\n title: 'Insert HTML',\n initialValue: 'Insert HTML'\n })\n }));\n registerTool('print', new Tool({\n command: PrintCommand,\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Print'\n })\n }));\n registerTool('pdf', new Tool({\n command: ExportPdfCommand,\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Export PDF'\n })\n }));\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/inlineformat', ['editor/system'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo, Class = kendo.Class, Editor = kendo.ui.editor, formats = kendo.ui.Editor.fn.options.formats, EditorUtils = Editor.EditorUtils, Tool = Editor.Tool, ToolTemplate = Editor.ToolTemplate, FormatTool = Editor.FormatTool, dom = Editor.Dom, RangeUtils = Editor.RangeUtils, extend = $.extend, registerTool = Editor.EditorUtils.registerTool, registerFormat = Editor.EditorUtils.registerFormat, preventDefault = function (ev) {\n ev.preventDefault();\n }, MOUSEDOWN_NS = 'mousedown.kendoEditor', KEYDOWN_NS = 'keydown.kendoEditor', KMARKER = 'k-marker';\n var InlineFormatFinder = Class.extend({\n init: function (format) {\n this.format = format;\n },\n numberOfSiblings: function (referenceNode) {\n var textNodesCount = 0, elementNodesCount = 0, markerCount = 0, parentNode = referenceNode.parentNode, node;\n for (node = parentNode.firstChild; node; node = node.nextSibling) {\n if (node != referenceNode) {\n if (node.className == KMARKER) {\n markerCount++;\n } else if (node.nodeType == 3) {\n textNodesCount++;\n } else {\n elementNodesCount++;\n }\n }\n }\n if (markerCount > 1 && parentNode.firstChild.className == KMARKER && parentNode.lastChild.className == KMARKER) {\n return 0;\n } else {\n return elementNodesCount + textNodesCount;\n }\n },\n findSuitable: function (sourceNode, skip) {\n if (!skip && this.numberOfSiblings(sourceNode) > 0) {\n return null;\n }\n var node = sourceNode.parentNode;\n var tags = this.format[0].tags;\n while (!dom.ofType(node, tags)) {\n if (this.numberOfSiblings(node) > 0) {\n return null;\n }\n node = node.parentNode;\n }\n return node;\n },\n findFormat: function (sourceNode) {\n var format = this.format, attrEquals = dom.attrEquals, i, len, node, tags, attributes;\n for (i = 0, len = format.length; i < len; i++) {\n node = sourceNode;\n tags = format[i].tags;\n attributes = format[i].attr;\n if (node && dom.ofType(node, tags) && attrEquals(node, attributes)) {\n return node;\n }\n while (node) {\n node = dom.parentOfType(node, tags);\n if (node && attrEquals(node, attributes)) {\n return node;\n }\n }\n }\n return null;\n },\n isFormatted: function (nodes) {\n var i, len;\n for (i = 0, len = nodes.length; i < len; i++) {\n if (this.findFormat(nodes[i])) {\n return true;\n }\n }\n return false;\n }\n });\n var InlineFormatter = Class.extend({\n init: function (format, values) {\n this.finder = new InlineFormatFinder(format);\n this.attributes = extend({}, format[0].attr, values);\n this.tag = format[0].tags[0];\n },\n wrap: function (node) {\n return dom.wrap(node, dom.create(node.ownerDocument, this.tag, this.attributes));\n },\n activate: function (range, nodes) {\n if (this.finder.isFormatted(nodes)) {\n this.split(range);\n this.remove(nodes);\n } else {\n this.apply(nodes);\n }\n },\n toggle: function (range) {\n var textNodes = this.immutables() ? RangeUtils.editableTextNodes : RangeUtils.textNodes;\n var nodes = textNodes(range);\n if (nodes.length > 0) {\n this.activate(range, nodes);\n }\n },\n immutables: function () {\n return this.editor && this.editor.options.immutables;\n },\n apply: function (nodes) {\n var formatNodes = [];\n var i, l, node, formatNode;\n var attributes = this.attributes;\n var styleAttr = attributes ? attributes.style || {} : {};\n for (i = 0, l = nodes.length; i < l; i++) {\n node = nodes[i];\n formatNode = this.finder.findSuitable(node);\n if (formatNode) {\n if (dom.is(formatNode, 'font')) {\n if (styleAttr.color) {\n formatNode.removeAttribute('color');\n }\n if (styleAttr.fontName) {\n formatNode.removeAttribute('face');\n }\n if (styleAttr.fontSize) {\n formatNode.removeAttribute('size');\n }\n }\n dom.attr(formatNode, attributes);\n } else {\n while (!dom.isBlock(node.parentNode) && node.parentNode.childNodes.length == 1 && node.parentNode.contentEditable !== 'true') {\n node = node.parentNode;\n }\n formatNode = this.wrap(node);\n }\n formatNodes.push(formatNode);\n }\n this.consolidate(formatNodes);\n },\n remove: function (nodes) {\n var i, l, formatNode;\n for (i = 0, l = nodes.length; i < l; i++) {\n formatNode = this.finder.findFormat(nodes[i]);\n if (formatNode) {\n if (this.attributes && this.attributes.style) {\n dom.unstyle(formatNode, this.attributes.style);\n if (!formatNode.style.cssText && !formatNode.attributes['class']) {\n dom.unwrap(formatNode);\n }\n } else {\n dom.unwrap(formatNode);\n }\n }\n }\n },\n split: function (range) {\n var nodes = RangeUtils.textNodes(range);\n var l = nodes.length;\n var i, formatNode;\n if (l > 0) {\n for (i = 0; i < l; i++) {\n formatNode = this.finder.findFormat(nodes[i]);\n if (formatNode) {\n RangeUtils.split(range, formatNode, true);\n }\n }\n }\n },\n consolidate: function (nodes) {\n var node, last;\n while (nodes.length > 1) {\n node = nodes.pop();\n last = nodes[nodes.length - 1];\n if (node.previousSibling && node.previousSibling.className == KMARKER) {\n last.appendChild(node.previousSibling);\n }\n if (node.tagName == last.tagName && node.previousSibling == last && node.style.cssText == last.style.cssText) {\n while (node.firstChild) {\n last.appendChild(node.firstChild);\n }\n dom.remove(node);\n }\n }\n }\n });\n var GreedyInlineFormatFinder = InlineFormatFinder.extend({\n init: function (format, greedyProperty) {\n this.format = format;\n this.greedyProperty = greedyProperty;\n InlineFormatFinder.fn.init.call(this, format);\n },\n getInlineCssValue: function (node) {\n var attributes = node.attributes;\n var trim = $.trim;\n var i, l, attribute, name, attributeValue, css, pair, cssIndex, len;\n var propertyAndValue, property, value;\n if (!attributes) {\n return;\n }\n for (i = 0, l = attributes.length; i < l; i++) {\n attribute = attributes[i];\n name = attribute.nodeName;\n attributeValue = attribute.nodeValue;\n if (attribute.specified && name == 'style') {\n css = trim(attributeValue || node.style.cssText).split(';');\n for (cssIndex = 0, len = css.length; cssIndex < len; cssIndex++) {\n pair = css[cssIndex];\n if (pair.length) {\n propertyAndValue = pair.split(':');\n property = trim(propertyAndValue[0].toLowerCase());\n value = trim(propertyAndValue[1]);\n if (property != this.greedyProperty) {\n continue;\n }\n return property.indexOf('color') >= 0 ? dom.toHex(value) : value;\n }\n }\n }\n }\n },\n getFormatInner: function (node) {\n var $node = $(dom.isDataNode(node) ? node.parentNode : node);\n var parents = $node.parentsUntil('[contentEditable]').addBack().toArray().reverse();\n var i, len, value;\n for (i = 0, len = parents.length; i < len; i++) {\n value = this.greedyProperty == 'className' ? parents[i].className : this.getInlineCssValue(parents[i]);\n if (value) {\n return value;\n }\n }\n return 'inherit';\n },\n getFormat: function (nodes) {\n var result = this.getFormatInner(nodes[0]), i, len;\n for (i = 1, len = nodes.length; i < len; i++) {\n if (result != this.getFormatInner(nodes[i])) {\n return '';\n }\n }\n return result;\n },\n isFormatted: function (nodes) {\n return this.getFormat(nodes) !== '';\n }\n });\n var GreedyInlineFormatter = InlineFormatter.extend({\n init: function (format, values, greedyProperty) {\n InlineFormatter.fn.init.call(this, format, values);\n this.values = values;\n this.finder = new GreedyInlineFormatFinder(format, greedyProperty);\n if (greedyProperty) {\n this.greedyProperty = kendo.toCamelCase(greedyProperty);\n }\n },\n activate: function (range, nodes) {\n var greedyProperty = this.greedyProperty;\n var action = 'apply';\n this.split(range);\n if (greedyProperty && this.values.style[greedyProperty] == 'inherit') {\n action = 'remove';\n }\n this[action](nodes);\n }\n });\n var InlineFormatTool = FormatTool.extend({\n init: function (options) {\n FormatTool.fn.init.call(this, extend(options, {\n finder: new InlineFormatFinder(options.format),\n formatter: function () {\n return new InlineFormatter(options.format);\n }\n }));\n }\n });\n var DelayedExecutionTool = Tool.extend({\n update: function (ui, nodes) {\n var list = ui.data(this.type);\n list.close();\n list.value(this.finder.getFormat(nodes));\n }\n });\n var FontTool = DelayedExecutionTool.extend({\n init: function (options) {\n Tool.fn.init.call(this, options);\n this.type = kendo.support.browser.msie || kendo.support.touch ? 'kendoDropDownList' : 'kendoComboBox';\n this.format = [{\n tags: [\n 'span',\n 'font'\n ]\n }];\n this.finder = new GreedyInlineFormatFinder(this.format, options.cssAttr);\n },\n command: function (commandArguments) {\n var options = this.options, format = this.format, style = {};\n return new Editor.FormatCommand(extend(commandArguments, {\n formatter: function () {\n style[options.domAttr] = commandArguments.value;\n return new GreedyInlineFormatter(format, { style: style }, options.cssAttr);\n }\n }));\n },\n initialize: function (ui, initOptions) {\n var editor = initOptions.editor, options = this.options, toolName = options.name, dataSource, range, defaultValue = [];\n if (options.defaultValue) {\n defaultValue = [{\n text: editor.options.messages[options.defaultValue[0].text],\n value: options.defaultValue[0].value\n }];\n }\n dataSource = defaultValue.concat(options.items ? options.items : editor.options[toolName] || []);\n ui.attr({ title: initOptions.title });\n ui[this.type]({\n dataTextField: 'text',\n dataValueField: 'value',\n dataSource: dataSource,\n change: function () {\n editor._range = range;\n Tool.exec(editor, toolName, this.value());\n },\n close: function () {\n setTimeout(function () {\n if ('_range' in editor) {\n delete editor._range;\n }\n }, 0);\n },\n highlightFirst: false\n });\n ui.closest('.k-widget').removeClass('k-' + toolName).find('*').addBack().attr('unselectable', 'on');\n var widget = ui.data(this.type);\n widget.value('inherit');\n widget.wrapper.on(MOUSEDOWN_NS, '.k-select,.k-input', function () {\n var newRange = editor.getRange();\n range = editor._containsRange(newRange) ? newRange : range;\n }).on(KEYDOWN_NS, function (e) {\n if (e.keyCode === kendo.keys.ENTER) {\n e.preventDefault();\n }\n });\n }\n });\n var ColorTool = Tool.extend({\n init: function (options) {\n Tool.fn.init.call(this, options);\n this.format = [{\n tags: [\n 'span',\n 'font'\n ]\n }];\n this.finder = new GreedyInlineFormatFinder(this.format, options.cssAttr);\n },\n options: { palette: 'websafe' },\n update: function () {\n this._widget.close();\n },\n command: function (commandArguments) {\n var options = this.options, format = this.format, style = {};\n return new Editor.FormatCommand(extend(commandArguments, {\n formatter: function () {\n style[options.domAttr] = commandArguments.value;\n return new GreedyInlineFormatter(format, { style: style }, options.cssAttr);\n }\n }));\n },\n initialize: function (ui, initOptions) {\n var editor = initOptions.editor, toolName = this.name, options = extend({}, ColorTool.fn.options, this.options), palette = options.palette;\n ui = this._widget = new kendo.ui.ColorPicker(ui, {\n toolIcon: 'k-icon k-i-' + EditorUtils.getToolCssClass(options.name),\n palette: palette,\n change: function () {\n var color = ui.value();\n if (color) {\n Tool.exec(editor, toolName, color);\n }\n editor.focus();\n },\n open: function (e) {\n var picker = e.sender;\n picker.value(null);\n picker._popup.element.on(MOUSEDOWN_NS, preventDefault);\n },\n close: function (e) {\n e.sender._popup.element.off(MOUSEDOWN_NS);\n },\n activate: function (e) {\n e.preventDefault();\n ui.trigger('change');\n }\n });\n ui.wrapper.attr({\n title: initOptions.title,\n unselectable: 'on'\n }).find('*').attr('unselectable', 'on');\n }\n });\n extend(Editor, {\n InlineFormatFinder: InlineFormatFinder,\n InlineFormatter: InlineFormatter,\n DelayedExecutionTool: DelayedExecutionTool,\n GreedyInlineFormatFinder: GreedyInlineFormatFinder,\n GreedyInlineFormatter: GreedyInlineFormatter,\n InlineFormatTool: InlineFormatTool,\n FontTool: FontTool,\n ColorTool: ColorTool\n });\n registerFormat('bold', [\n {\n tags: [\n 'strong',\n 'b'\n ]\n },\n {\n tags: ['span'],\n attr: { style: { fontWeight: 'bold' } }\n }\n ]);\n registerTool('bold', new InlineFormatTool({\n key: 'B',\n ctrl: true,\n format: formats.bold,\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Bold'\n })\n }));\n registerFormat('italic', [\n {\n tags: [\n 'em',\n 'i'\n ]\n },\n {\n tags: ['span'],\n attr: { style: { fontStyle: 'italic' } }\n }\n ]);\n registerTool('italic', new InlineFormatTool({\n key: 'I',\n ctrl: true,\n format: formats.italic,\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Italic'\n })\n }));\n registerFormat('underline', [\n {\n tags: ['span'],\n attr: { style: { textDecoration: 'underline' } }\n },\n { tags: ['u'] }\n ]);\n registerTool('underline', new InlineFormatTool({\n key: 'U',\n ctrl: true,\n format: formats.underline,\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Underline'\n })\n }));\n registerFormat('strikethrough', [\n {\n tags: [\n 'del',\n 'strike'\n ]\n },\n {\n tags: ['span'],\n attr: { style: { textDecoration: 'line-through' } }\n }\n ]);\n registerTool('strikethrough', new InlineFormatTool({\n format: formats.strikethrough,\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Strikethrough'\n })\n }));\n registerFormat('superscript', [{ tags: ['sup'] }]);\n registerTool('superscript', new InlineFormatTool({\n format: formats.superscript,\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Superscript'\n })\n }));\n registerFormat('subscript', [{ tags: ['sub'] }]);\n registerTool('subscript', new InlineFormatTool({\n format: formats.subscript,\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Subscript'\n })\n }));\n registerTool('foreColor', new ColorTool({\n cssAttr: 'color',\n domAttr: 'color',\n name: 'foreColor',\n template: new ToolTemplate({\n template: EditorUtils.colorPickerTemplate,\n title: 'Color'\n })\n }));\n registerTool('backColor', new ColorTool({\n cssAttr: 'background-color',\n domAttr: 'backgroundColor',\n name: 'backColor',\n template: new ToolTemplate({\n template: EditorUtils.colorPickerTemplate,\n title: 'Background Color'\n })\n }));\n registerTool('fontName', new FontTool({\n cssAttr: 'font-family',\n domAttr: 'fontFamily',\n name: 'fontName',\n defaultValue: [{\n text: 'fontNameInherit',\n value: 'inherit'\n }],\n template: new ToolTemplate({\n template: EditorUtils.comboBoxTemplate,\n title: 'Font Name'\n })\n }));\n registerTool('fontSize', new FontTool({\n cssAttr: 'font-size',\n domAttr: 'fontSize',\n name: 'fontSize',\n defaultValue: [{\n text: 'fontSizeInherit',\n value: 'inherit'\n }],\n template: new ToolTemplate({\n template: EditorUtils.comboBoxTemplate,\n title: 'Font Size'\n })\n }));\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/formatblock', ['editor/inlineformat'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo, Class = kendo.Class, extend = $.extend, Editor = kendo.ui.editor, formats = kendo.ui.Editor.fn.options.formats, dom = Editor.Dom, Command = Editor.Command, ToolTemplate = Editor.ToolTemplate, FormatTool = Editor.FormatTool, EditorUtils = Editor.EditorUtils, registerTool = EditorUtils.registerTool, registerFormat = EditorUtils.registerFormat, RangeUtils = Editor.RangeUtils;\n var BlockFormatFinder = Class.extend({\n init: function (format) {\n this.format = format;\n },\n contains: function (node, children) {\n var i, len, child;\n for (i = 0, len = children.length; i < len; i++) {\n child = children[i];\n if (!child || !dom.isAncestorOrSelf(node, child)) {\n return false;\n }\n }\n return true;\n },\n findSuitable: function (nodes) {\n var format = this.format, suitable = [], i, len, candidate;\n for (i = 0, len = nodes.length; i < len; i++) {\n for (var f = format.length - 1; f >= 0; f--) {\n candidate = dom.ofType(nodes[i], format[f].tags) ? nodes[i] : dom.closestEditableOfType(nodes[i], format[f].tags);\n if (candidate) {\n break;\n }\n }\n if (!candidate || candidate.contentEditable === 'true') {\n return [];\n }\n if ($.inArray(candidate, suitable) < 0) {\n suitable.push(candidate);\n }\n }\n this._resolveListsItems(suitable);\n for (i = 0, len = suitable.length; i < len; i++) {\n if (this.contains(suitable[i], suitable)) {\n return [suitable[i]];\n }\n }\n return suitable;\n },\n _resolveListsItems: function (nodes) {\n var i, node, wrapper;\n for (i = 0; i < nodes.length; i++) {\n node = nodes[i];\n wrapper = dom.is(node, 'li') ? node : dom.wrapper(node);\n wrapper = wrapper && dom.list(wrapper) ? wrapper.children[0] : wrapper;\n if (dom.is(wrapper, 'li')) {\n node = nodes[i] = wrapper;\n }\n }\n },\n findFormat: function (sourceNode) {\n var format = this.format, i, len, node, tags, attributes;\n var editableParent = dom.editableParent(sourceNode);\n var immutables = this.options && this.options.immutables;\n var ImmutablesNS = Editor.Immutables;\n for (i = 0, len = format.length; i < len; i++) {\n node = sourceNode;\n tags = format[i].tags;\n attributes = format[i].attr;\n if (immutables && tags && tags[0] == 'immutable') {\n var immutable = ImmutablesNS.immutableParent(node);\n if (immutable && dom.attrEquals(immutable, attributes)) {\n return node;\n }\n }\n while (node && dom.isAncestorOf(editableParent, node)) {\n if (dom.ofType(node, tags) && dom.attrEquals(node, attributes)) {\n return node;\n }\n node = node.parentNode;\n }\n }\n return null;\n },\n getFormat: function (nodes) {\n var that = this, findFormat = function (node) {\n return that.findFormat(dom.isDataNode(node) ? node.parentNode : node);\n }, result = findFormat(nodes[0]), i, len;\n if (!result) {\n return '';\n }\n for (i = 1, len = nodes.length; i < len; i++) {\n if (result != findFormat(nodes[i])) {\n return '';\n }\n }\n return result.nodeName.toLowerCase();\n },\n isFormatted: function (nodes) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n if (!this.findFormat(nodes[i])) {\n return false;\n }\n }\n return true;\n }\n });\n var BlockFormatter = Class.extend({\n init: function (format, values) {\n this.format = format;\n this.values = values;\n this.finder = new BlockFormatFinder(format);\n },\n wrap: function (tag, attributes, nodes) {\n var commonAncestor = nodes.length == 1 ? dom.blockParentOrBody(nodes[0]) : dom.commonAncestor.apply(null, nodes);\n if (dom.isInline(commonAncestor)) {\n commonAncestor = dom.blockParentOrBody(commonAncestor);\n }\n var ancestors = dom.significantChildNodes(commonAncestor), position = dom.findNodeIndex(ancestors[0]), wrapper = dom.create(commonAncestor.ownerDocument, tag, attributes), i, ancestor;\n for (i = 0; i < ancestors.length; i++) {\n ancestor = ancestors[i];\n if (dom.isBlock(ancestor)) {\n dom.attr(ancestor, attributes);\n if (wrapper.childNodes.length) {\n dom.insertBefore(wrapper, ancestor);\n wrapper = wrapper.cloneNode(false);\n }\n position = dom.findNodeIndex(ancestor) + 1;\n continue;\n }\n wrapper.appendChild(ancestor);\n }\n if (wrapper.firstChild) {\n dom.insertAt(commonAncestor, wrapper, position);\n }\n },\n apply: function (nodes) {\n var format, values = this.values;\n function attributes(format) {\n return extend({}, format && format.attr, values);\n }\n this._handleImmutables(nodes, true);\n var images = dom.filter('img', nodes);\n var imageFormat = EditorUtils.formatByName('img', this.format);\n var imageAttributes = attributes(imageFormat);\n $.each(images, function () {\n dom.attr(this, imageAttributes);\n });\n if (images.length == nodes.length) {\n return;\n }\n var nonImages = dom.filter('img', nodes, true);\n var formatNodes = this.finder.findSuitable(nonImages);\n if (formatNodes.length) {\n for (var i = 0, len = formatNodes.length; i < len; i++) {\n format = EditorUtils.formatByName(dom.name(formatNodes[i]), this.format);\n dom.attr(formatNodes[i], attributes(format));\n }\n } else {\n format = this.format[0];\n this.wrap(format.tags[0], attributes(format), nonImages);\n }\n },\n _handleImmutables: function (nodes, applyFormatting) {\n if (!this.immutables()) {\n return;\n }\n var immutableFormat = EditorUtils.formatByName('immutable', this.format);\n if (!immutableFormat) {\n return;\n }\n var ImmutablesNS = Editor.Immutables;\n var l = nodes.length - 1;\n for (var i = l; i >= 0; i--) {\n var immutableParent = ImmutablesNS.immutableParent(nodes[i]);\n if (!immutableParent) {\n continue;\n }\n if (immutableParent !== nodes[i + 1]) {\n if (applyFormatting) {\n dom.attr(immutableParent, immutableFormat.attr);\n } else {\n dom.unstyle(immutableParent, immutableFormat.attr.style);\n }\n }\n nodes.splice(i, 1);\n }\n },\n immutables: function () {\n return this.editor && this.editor.options.immutables;\n },\n remove: function (nodes) {\n var i, l, formatNode, namedFormat, name;\n this._handleImmutables(nodes, false);\n for (i = 0, l = nodes.length; i < l; i++) {\n formatNode = this.finder.findFormat(nodes[i]);\n if (formatNode) {\n name = dom.name(formatNode);\n if (name == 'div' && !formatNode.getAttribute('class')) {\n dom.unwrap(formatNode);\n } else {\n namedFormat = EditorUtils.formatByName(name, this.format);\n if (namedFormat.attr.style) {\n dom.unstyle(formatNode, namedFormat.attr.style);\n }\n if (namedFormat.attr.className) {\n dom.removeClass(formatNode, namedFormat.attr.className);\n }\n }\n }\n }\n },\n toggle: function (range) {\n var that = this, nodes = dom.filterBy(RangeUtils.nodes(range), dom.htmlIndentSpace, true);\n if (that.finder.isFormatted(nodes)) {\n that.remove(nodes);\n } else {\n that.apply(nodes);\n }\n }\n });\n var GreedyBlockFormatter = Class.extend({\n init: function (format, values) {\n var that = this;\n that.format = format;\n that.values = values;\n that.finder = new BlockFormatFinder(format);\n },\n apply: function (nodes) {\n var format = this.format;\n var blocks = dom.blockParents(nodes);\n var formatTag = format[0].tags[0];\n var i, len, list, formatter, range;\n var element;\n var tagName;\n var block;\n var immutalbeParent;\n if (blocks.length) {\n for (i = 0, len = blocks.length; i < len; i++) {\n block = blocks[i];\n immutalbeParent = this.immutables() && Editor.Immutables.immutableParent(block);\n if (!immutalbeParent) {\n tagName = dom.name(block);\n if (tagName == 'li') {\n list = block.parentNode;\n formatter = new Editor.ListFormatter(list.nodeName.toLowerCase(), formatTag);\n range = this.editor.createRange();\n range.selectNode(blocks[i]);\n formatter.toggle(range);\n } else if (formatTag && (tagName == 'td' || block.attributes.contentEditable)) {\n new BlockFormatter(format, this.values).apply(block.childNodes);\n } else {\n element = dom.changeTag(block, formatTag);\n dom.attr(element, format[0].attr);\n }\n }\n }\n } else {\n var blockFormatter = new BlockFormatter(format, this.values);\n blockFormatter.editor = this.editor;\n blockFormatter.apply(nodes);\n }\n },\n toggle: function (range) {\n var nodes = RangeUtils.textNodes(range);\n if (!nodes.length) {\n range.selectNodeContents(range.commonAncestorContainer);\n nodes = RangeUtils.textNodes(range);\n if (!nodes.length) {\n nodes = dom.significantChildNodes(range.commonAncestorContainer);\n }\n }\n this.apply(nodes);\n },\n immutables: function () {\n return this.editor && this.editor.options.immutables;\n }\n });\n var FormatCommand = Command.extend({\n init: function (options) {\n options.formatter = options.formatter();\n var finder = options.formatter.finder;\n if (finder && EditorUtils.formatByName('immutable', finder.format)) {\n finder._initOptions({ immutables: options.immutables });\n }\n Command.fn.init.call(this, options);\n }\n });\n var BlockFormatTool = FormatTool.extend({\n init: function (options) {\n FormatTool.fn.init.call(this, extend(options, {\n finder: new BlockFormatFinder(options.format),\n formatter: function () {\n return new BlockFormatter(options.format);\n }\n }));\n }\n });\n extend(Editor, {\n BlockFormatFinder: BlockFormatFinder,\n BlockFormatter: BlockFormatter,\n GreedyBlockFormatter: GreedyBlockFormatter,\n FormatCommand: FormatCommand,\n BlockFormatTool: BlockFormatTool\n });\n var listElements = [\n 'ul',\n 'ol',\n 'li'\n ];\n registerFormat('justifyLeft', [\n {\n tags: dom.nonListBlockElements,\n attr: { style: { textAlign: 'left' } }\n },\n {\n tags: ['img'],\n attr: {\n style: {\n 'float': 'left',\n display: '',\n marginLeft: '',\n marginRight: ''\n }\n }\n },\n {\n tags: ['immutable'],\n attr: {\n style: {\n 'float': 'left',\n display: '',\n marginLeft: '',\n marginRight: ''\n }\n }\n },\n {\n tags: listElements,\n attr: {\n style: {\n textAlign: 'left',\n listStylePosition: ''\n }\n }\n }\n ]);\n registerTool('justifyLeft', new BlockFormatTool({\n format: formats.justifyLeft,\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Justify Left'\n })\n }));\n registerFormat('justifyCenter', [\n {\n tags: dom.nonListBlockElements,\n attr: { style: { textAlign: 'center' } }\n },\n {\n tags: ['img'],\n attr: {\n style: {\n display: 'block',\n marginLeft: 'auto',\n marginRight: 'auto',\n 'float': ''\n }\n }\n },\n {\n tags: ['immutable'],\n attr: {\n style: {\n display: 'block',\n marginLeft: 'auto',\n marginRight: 'auto',\n 'float': ''\n }\n }\n },\n {\n tags: listElements,\n attr: {\n style: {\n textAlign: 'center',\n listStylePosition: 'inside'\n }\n }\n }\n ]);\n registerTool('justifyCenter', new BlockFormatTool({\n format: formats.justifyCenter,\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Justify Center'\n })\n }));\n registerFormat('justifyRight', [\n {\n tags: dom.nonListBlockElements,\n attr: { style: { textAlign: 'right' } }\n },\n {\n tags: ['img'],\n attr: {\n style: {\n 'float': 'right',\n display: '',\n marginLeft: '',\n marginRight: ''\n }\n }\n },\n {\n tags: ['immutable'],\n attr: {\n style: {\n 'float': 'right',\n display: '',\n marginLeft: '',\n marginRight: ''\n }\n }\n },\n {\n tags: listElements,\n attr: {\n style: {\n textAlign: 'right',\n listStylePosition: 'inside'\n }\n }\n }\n ]);\n registerTool('justifyRight', new BlockFormatTool({\n format: formats.justifyRight,\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Justify Right'\n })\n }));\n registerFormat('justifyFull', [\n {\n tags: dom.nonListBlockElements,\n attr: { style: { textAlign: 'justify' } }\n },\n {\n tags: ['img'],\n attr: {\n style: {\n display: 'block',\n marginLeft: 'auto',\n marginRight: 'auto',\n 'float': ''\n }\n }\n },\n {\n tags: ['immutable'],\n attr: {\n style: {\n display: 'block',\n marginLeft: 'auto',\n marginRight: 'auto',\n 'float': ''\n }\n }\n },\n {\n tags: listElements,\n attr: {\n style: {\n textAlign: 'justify',\n listStylePosition: ''\n }\n }\n }\n ]);\n registerTool('justifyFull', new BlockFormatTool({\n format: formats.justifyFull,\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Justify Full'\n })\n }));\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/linebreak', ['editor/formatblock'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo, extend = $.extend, editorNS = kendo.ui.editor, dom = editorNS.Dom, Command = editorNS.Command, Tool = editorNS.Tool, BlockFormatter = editorNS.BlockFormatter, normalize = dom.normalize, RangeUtils = editorNS.RangeUtils, registerTool = editorNS.EditorUtils.registerTool;\n var ParagraphCommand = Command.extend({\n init: function (options) {\n this.options = options;\n Command.fn.init.call(this, options);\n },\n _insertMarker: function (doc, range) {\n var marker = dom.create(doc, 'a'), container;\n marker.className = 'k-marker';\n range.insertNode(marker);\n if (!marker.parentNode) {\n container = range.commonAncestorContainer;\n container.innerHTML = '';\n container.appendChild(marker);\n }\n normalize(marker.parentNode);\n return marker;\n },\n _moveFocus: function (range, candidate) {\n if (dom.isEmpty(candidate)) {\n range.setStartBefore(candidate);\n } else {\n range.selectNodeContents(candidate);\n var focusNode = RangeUtils.textNodes(range)[0];\n if (!focusNode) {\n while (candidate.childNodes.length && !dom.is(candidate.firstChild, 'br')) {\n candidate = candidate.firstChild;\n }\n focusNode = candidate;\n }\n if (dom.isEmpty(focusNode)) {\n range.setStartBefore(focusNode);\n } else {\n if (dom.emptyNode(focusNode)) {\n focusNode.innerHTML = '\\uFEFF';\n }\n range.setStartBefore(focusNode.firstChild || focusNode);\n }\n }\n },\n shouldTrim: function (range) {\n var blocks = 'p,h1,h2,h3,h4,h5,h6'.split(','), startInBlock = dom.parentOfType(range.startContainer, blocks), endInBlock = dom.parentOfType(range.endContainer, blocks);\n return startInBlock && !endInBlock || !startInBlock && endInBlock;\n },\n _blankAfter: function (node) {\n while (node && (dom.isMarker(node) || dom.stripBom(node.nodeValue) === '')) {\n node = node.nextSibling;\n }\n return !node;\n },\n exec: function () {\n var range = this.getRange(), doc = RangeUtils.documentFromRange(range), parent, previous, next, emptyParagraphContent = editorNS.emptyElementContent, paragraph, marker, li, heading, rng, shouldTrim;\n this.expandImmutablesIn(range);\n shouldTrim = this.shouldTrim(range);\n range.deleteContents();\n marker = this._insertMarker(doc, range);\n dom.stripBomNode(marker.previousSibling);\n dom.stripBomNode(marker.nextSibling);\n li = dom.closestEditableOfType(marker, ['li']);\n heading = dom.closestEditableOfType(marker, 'h1,h2,h3,h4,h5,h6'.split(','));\n if (li) {\n if (dom.emptyNode(li)) {\n paragraph = dom.create(doc, 'p');\n if (dom.next(li)) {\n rng = range.cloneRange();\n rng.selectNode(li);\n RangeUtils.split(rng, li.parentNode);\n }\n var br = $('br', li);\n if (br.length == 1) {\n br.remove();\n }\n var parentNode = li.parentNode;\n var parentChildrenLength = li.parentNode.children.length;\n var firstChild = parentChildrenLength > 1 && li.childNodes.length == 1 && li.children[0];\n dom.insertAfter(paragraph, parentNode);\n dom.remove(parentChildrenLength == 1 ? li.parentNode : li);\n if (firstChild && firstChild !== marker) {\n paragraph.appendChild(firstChild);\n paragraph.appendChild(marker);\n } else {\n paragraph.innerHTML = emptyParagraphContent;\n }\n next = paragraph;\n }\n } else if (heading && this._blankAfter(marker)) {\n paragraph = dom.create(doc, 'p');\n dom.insertAfter(paragraph, heading);\n paragraph.innerHTML = emptyParagraphContent;\n dom.remove(marker);\n next = paragraph;\n }\n if (!next) {\n if (!(li || heading)) {\n new BlockFormatter([{ tags: ['p'] }]).apply([marker]);\n }\n range.selectNode(marker);\n parent = dom.parentOfType(marker, [li ? 'li' : heading ? dom.name(heading) : 'p']);\n RangeUtils.split(range, parent, shouldTrim);\n previous = parent.previousSibling;\n if (dom.is(previous, 'li') && previous.firstChild && !dom.is(previous.firstChild, 'br')) {\n previous = previous.firstChild;\n }\n next = parent.nextSibling;\n this.clean(previous);\n this.clean(next, { links: true });\n if (dom.is(next, 'li') && next.firstChild && !dom.is(next.firstChild, 'br')) {\n next = next.firstChild;\n }\n dom.remove(parent);\n normalize(previous);\n }\n normalize(next);\n this._moveFocus(range, next);\n range.collapse(true);\n dom.scrollTo(next);\n RangeUtils.selectRange(range);\n },\n clean: function (node, options) {\n var root = node;\n if (node.firstChild && dom.is(node.firstChild, 'br')) {\n dom.remove(node.firstChild);\n }\n if (dom.isDataNode(node) && !node.nodeValue) {\n node = node.parentNode;\n }\n if (node) {\n var siblings = false;\n while (node.firstChild && node.firstChild.nodeType == 1) {\n siblings = siblings || dom.significantNodes(node.childNodes).length > 1;\n node = node.firstChild;\n }\n if (!dom.isEmpty(node) && /^\\s*$/.test(node.innerHTML) && !siblings) {\n $(root).find('.k-br').remove();\n node.innerHTML = editorNS.emptyElementContent;\n }\n if (options && options.links) {\n while (node != root) {\n if (dom.is(node, 'a') && dom.emptyNode(node)) {\n dom.unwrap(node);\n break;\n }\n node = node.parentNode;\n }\n }\n }\n }\n });\n var NewLineCommand = Command.extend({\n init: function (options) {\n this.options = options;\n Command.fn.init.call(this, options);\n },\n exec: function () {\n var range = this.getRange();\n this.expandImmutablesIn(range);\n var br = dom.create(RangeUtils.documentFromRange(range), 'br');\n var filler;\n var browser = kendo.support.browser;\n var oldIE = browser.msie && browser.version < 11;\n range.deleteContents();\n range.insertNode(br);\n normalize(br.parentNode);\n if (!oldIE && (!br.nextSibling || dom.isWhitespace(br.nextSibling))) {\n filler = br.cloneNode(true);\n filler.className = 'k-br';\n dom.insertAfter(filler, br);\n }\n range.setStartAfter(br);\n range.collapse(true);\n dom.scrollTo(br.nextSibling || br);\n RangeUtils.selectRange(range);\n }\n });\n extend(editorNS, {\n ParagraphCommand: ParagraphCommand,\n NewLineCommand: NewLineCommand\n });\n registerTool('insertLineBreak', new Tool({\n key: 13,\n shift: true,\n command: NewLineCommand\n }));\n registerTool('insertParagraph', new Tool({\n key: 13,\n command: ParagraphCommand\n }));\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/lists', ['editor/linebreak'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo, Class = kendo.Class, extend = $.extend, Editor = kendo.ui.editor, dom = Editor.Dom, RangeUtils = Editor.RangeUtils, EditorUtils = Editor.EditorUtils, Command = Editor.Command, ToolTemplate = Editor.ToolTemplate, FormatTool = Editor.FormatTool, BlockFormatFinder = Editor.BlockFormatFinder, textNodes = RangeUtils.textNodes, registerTool = Editor.EditorUtils.registerTool;\n var ListFormatFinder = BlockFormatFinder.extend({\n init: function (tag) {\n this.tag = tag;\n var tags = this.tags = [\n tag == 'ul' ? 'ol' : 'ul',\n tag\n ];\n BlockFormatFinder.fn.init.call(this, [{ tags: tags }]);\n },\n isFormatted: function (nodes) {\n var formatNodes = [];\n var formatNode, i;\n for (i = 0; i < nodes.length; i++) {\n formatNode = this.findFormat(nodes[i]);\n if (formatNode && dom.name(formatNode) == this.tag) {\n formatNodes.push(formatNode);\n }\n }\n if (formatNodes.length < 1) {\n return false;\n }\n if (formatNodes.length != nodes.length) {\n return false;\n }\n for (i = 0; i < formatNodes.length; i++) {\n if (formatNodes[i].parentNode != formatNode.parentNode) {\n break;\n }\n if (formatNodes[i] != formatNode) {\n return false;\n }\n }\n return true;\n },\n findSuitable: function (nodes) {\n var candidate = this.findFormat(nodes[0]);\n if (candidate && dom.name(candidate) == this.tag) {\n return candidate;\n }\n return null;\n }\n });\n var ListFormatter = Class.extend({\n init: function (tag, unwrapTag) {\n var that = this;\n that.finder = new ListFormatFinder(tag);\n that.tag = tag;\n that.unwrapTag = unwrapTag;\n },\n isList: function (node) {\n return dom.list(node);\n },\n immutables: function () {\n return this.editor && !!this.editor.options.immutables;\n },\n wrap: function (list, nodes) {\n var li = dom.create(list.ownerDocument, 'li'), i, node, isImmutable = this.immutables() ? Editor.Immutables.immutable : $.noop;\n for (i = 0; i < nodes.length; i++) {\n node = nodes[i];\n if (dom.is(node, 'li')) {\n list.appendChild(node);\n continue;\n }\n if (this.isList(node)) {\n while (node.firstChild) {\n list.appendChild(node.firstChild);\n }\n continue;\n }\n if (dom.is(node, 'td')) {\n while (node.firstChild) {\n li.appendChild(node.firstChild);\n }\n list.appendChild(li);\n node.appendChild(list);\n list = list.cloneNode(false);\n li = li.cloneNode(false);\n continue;\n }\n li.appendChild(node);\n if (dom.isBlock(node)) {\n list.appendChild(li);\n if (!isImmutable(node)) {\n dom.unwrap(node);\n }\n li = li.cloneNode(false);\n }\n }\n if (li.firstChild) {\n list.appendChild(li);\n }\n },\n containsAny: function (parent, nodes) {\n for (var i = 0; i < nodes.length; i++) {\n if (dom.isAncestorOrSelf(parent, nodes[i])) {\n return true;\n }\n }\n return false;\n },\n suitable: function (candidate, nodes) {\n if (candidate.className == 'k-marker') {\n var sibling = candidate.nextSibling;\n if (sibling && dom.isBlock(sibling)) {\n return false;\n }\n sibling = candidate.previousSibling;\n if (sibling && dom.isBlock(sibling)) {\n return false;\n }\n }\n return this.containsAny(candidate, nodes) || dom.isInline(candidate) || candidate.nodeType == 3;\n },\n _parentLists: function (node) {\n var editable = dom.closestEditable(node);\n return $(node).parentsUntil(editable, 'ul,ol');\n },\n split: function (range) {\n var nodes = textNodes(range);\n var start, end, parents;\n if (nodes.length) {\n start = dom.parentOfType(nodes[0], ['li']);\n end = dom.parentOfType(nodes[nodes.length - 1], ['li']);\n range.setStartBefore(start);\n range.setEndAfter(end);\n for (var i = 0, l = nodes.length; i < l; i++) {\n var formatNode = this.finder.findFormat(nodes[i]);\n if (formatNode) {\n parents = this._parentLists(formatNode);\n if (parents.length) {\n RangeUtils.split(range, parents.last()[0], true);\n } else {\n RangeUtils.split(range, formatNode, true);\n }\n }\n }\n }\n },\n merge: function (tag, formatNode) {\n var prev = formatNode.previousSibling, next;\n while (prev && (prev.className == 'k-marker' || prev.nodeType == 3 && dom.isWhitespace(prev))) {\n prev = prev.previousSibling;\n }\n if (prev && dom.name(prev) == tag) {\n while (formatNode.firstChild) {\n prev.appendChild(formatNode.firstChild);\n }\n dom.remove(formatNode);\n formatNode = prev;\n }\n next = formatNode.nextSibling;\n while (next && (next.className == 'k-marker' || next.nodeType == 3 && dom.isWhitespace(next))) {\n next = next.nextSibling;\n }\n if (next && dom.name(next) == tag) {\n while (formatNode.lastChild) {\n next.insertBefore(formatNode.lastChild, next.firstChild);\n }\n dom.remove(formatNode);\n }\n },\n breakable: function (node) {\n return node != node.ownerDocument.body && !/table|tbody|tr|td/.test(dom.name(node)) && !node.attributes.contentEditable;\n },\n applyOnSection: function (section, nodes) {\n var tag = this.tag;\n var commonAncestor = dom.closestSplittableParent(nodes);\n var ancestors = [];\n var formatNode = this.finder.findSuitable(nodes);\n if (!formatNode) {\n formatNode = new ListFormatFinder(tag == 'ul' ? 'ol' : 'ul').findSuitable(nodes);\n }\n var childNodes;\n if (/table|tbody/.test(dom.name(commonAncestor))) {\n childNodes = $.map(nodes, function (node) {\n return dom.parentOfType(node, ['td']);\n });\n } else {\n childNodes = dom.significantChildNodes(commonAncestor);\n if ($.grep(childNodes, dom.isBlock).length) {\n childNodes = $.grep(childNodes, $.proxy(function (node) {\n return this.containsAny(node, nodes);\n }, this));\n }\n if (!childNodes.length) {\n childNodes = nodes;\n }\n }\n function pushAncestor() {\n ancestors.push(this);\n }\n for (var i = 0; i < childNodes.length; i++) {\n var child = childNodes[i];\n var suitable = (!formatNode || !dom.isAncestorOrSelf(formatNode, child)) && this.suitable(child, nodes);\n if (!suitable) {\n continue;\n }\n if (formatNode && this.isList(child)) {\n $.each(child.children, pushAncestor);\n dom.remove(child);\n } else {\n ancestors.push(child);\n }\n }\n if (ancestors.length == childNodes.length && this.breakable(commonAncestor)) {\n ancestors = [commonAncestor];\n }\n if (!formatNode) {\n formatNode = dom.create(commonAncestor.ownerDocument, tag);\n dom.insertBefore(formatNode, ancestors[0]);\n }\n this.wrap(formatNode, ancestors);\n while (dom.isBom(formatNode.nextSibling)) {\n dom.remove(formatNode.nextSibling);\n }\n if (!dom.is(formatNode, tag)) {\n dom.changeTag(formatNode, tag);\n }\n this.merge(tag, formatNode);\n },\n apply: function (nodes) {\n var i = 0, sections = [], lastSection, lastNodes, section, node, l = nodes.length, immutableParent = this.immutables() ? Editor.Immutables.immutableParent : $.noop;\n function addLastSection() {\n if (lastSection) {\n sections.push({\n section: lastSection,\n nodes: lastNodes\n });\n }\n }\n for (i = 0; i < l; i++) {\n node = immutableParent(nodes[i]) || nodes[i];\n section = dom.closestEditable(node, [\n 'td',\n 'body'\n ]);\n if (!lastSection || section != lastSection) {\n addLastSection();\n lastNodes = [node];\n lastSection = section;\n } else {\n lastNodes.push(node);\n }\n }\n addLastSection();\n for (i = 0; i < sections.length; i++) {\n this.applyOnSection(sections[i].section, sections[i].nodes);\n }\n },\n unwrap: function (ul) {\n var fragment = ul.ownerDocument.createDocumentFragment(), unwrapTag = this.unwrapTag, parents, li, p, child;\n for (li = ul.firstChild; li; li = li.nextSibling) {\n p = dom.create(ul.ownerDocument, unwrapTag || 'p');\n while (li.firstChild) {\n child = li.firstChild;\n if (dom.isBlock(child)) {\n if (p.firstChild) {\n fragment.appendChild(p);\n p = dom.create(ul.ownerDocument, unwrapTag || 'p');\n }\n fragment.appendChild(child);\n } else {\n p.appendChild(child);\n }\n }\n if (p.firstChild) {\n fragment.appendChild(p);\n }\n }\n parents = this._parentLists(ul);\n if (parents[0]) {\n dom.insertAfter(fragment, parents.last()[0]);\n parents.last().remove();\n } else {\n dom.insertAfter(fragment, ul);\n }\n dom.remove(ul);\n },\n remove: function (nodes) {\n var formatNode;\n for (var i = 0, l = nodes.length; i < l; i++) {\n formatNode = this.finder.findFormat(nodes[i]);\n if (formatNode) {\n this.unwrap(formatNode);\n }\n }\n },\n toggle: function (range) {\n var that = this, nodes = textNodes(range), ancestor = range.commonAncestorContainer;\n if (!nodes.length) {\n range.selectNodeContents(ancestor);\n nodes = textNodes(range);\n if (!nodes.length) {\n var text = ancestor.ownerDocument.createTextNode('');\n range.startContainer.appendChild(text);\n nodes = [text];\n range.selectNode(text.parentNode);\n }\n }\n nodes = dom.filterBy(nodes, dom.htmlIndentSpace, true);\n if (that.finder.isFormatted(nodes)) {\n that.split(range);\n that.remove(nodes);\n } else {\n that.apply(nodes);\n }\n }\n });\n var ListCommand = Command.extend({\n init: function (options) {\n options.formatter = new ListFormatter(options.tag);\n Command.fn.init.call(this, options);\n }\n });\n var ListTool = FormatTool.extend({\n init: function (options) {\n this.options = options;\n FormatTool.fn.init.call(this, extend(options, { finder: new ListFormatFinder(options.tag) }));\n },\n command: function (commandArguments) {\n return new ListCommand(extend(commandArguments, { tag: this.options.tag }));\n }\n });\n extend(Editor, {\n ListFormatFinder: ListFormatFinder,\n ListFormatter: ListFormatter,\n ListCommand: ListCommand,\n ListTool: ListTool\n });\n registerTool('insertUnorderedList', new ListTool({\n tag: 'ul',\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Insert unordered list'\n })\n }));\n registerTool('insertOrderedList', new ListTool({\n tag: 'ol',\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Insert ordered list'\n })\n }));\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/link', ['editor/lists'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, Class = kendo.Class, extend = $.extend, proxy = $.proxy, Editor = kendo.ui.editor, dom = Editor.Dom, RangeUtils = Editor.RangeUtils, EditorUtils = Editor.EditorUtils, Command = Editor.Command, Tool = Editor.Tool, ToolTemplate = Editor.ToolTemplate, InlineFormatter = Editor.InlineFormatter, InlineFormatFinder = Editor.InlineFormatFinder, textNodes = RangeUtils.textNodes, editableTextNodes = RangeUtils.editableTextNodes, registerTool = Editor.EditorUtils.registerTool, keys = kendo.keys;\n var HTTP_PROTOCOL = 'http://';\n var protocolRegExp = /^\\w*:\\/\\//;\n var endLinkCharsRegExp = /[\\w\\/\\$\\-_\\*\\?]/i;\n var LinkFormatFinder = Class.extend({\n findSuitable: function (sourceNode) {\n return dom.parentOfType(sourceNode, ['a']);\n }\n });\n var LinkFormatter = Class.extend({\n init: function () {\n this.finder = new LinkFormatFinder();\n },\n apply: function (range, attributes) {\n var nodes = this.immutables ? editableTextNodes(range) : textNodes(range);\n var markers, doc, formatter, a, parent;\n if (attributes.innerHTML) {\n doc = RangeUtils.documentFromRange(range);\n markers = RangeUtils.getMarkers(range);\n range.deleteContents();\n a = dom.create(doc, 'a', attributes);\n range.insertNode(a);\n parent = a.parentNode;\n if (dom.name(parent) == 'a') {\n dom.insertAfter(a, parent);\n }\n if (dom.emptyNode(parent)) {\n dom.remove(parent);\n }\n var ref = a;\n for (var i = 0; i < markers.length; i++) {\n dom.insertAfter(markers[i], ref);\n ref = markers[i];\n }\n if (markers.length) {\n dom.insertBefore(doc.createTextNode('\\uFEFF'), markers[1]);\n dom.insertAfter(doc.createTextNode('\\uFEFF'), markers[1]);\n range.setStartBefore(markers[0]);\n range.setEndAfter(markers[markers.length - 1]);\n }\n } else {\n formatter = new InlineFormatter([{ tags: ['a'] }], attributes);\n formatter.finder = this.finder;\n formatter.apply(nodes);\n }\n }\n });\n var UnlinkCommand = Command.extend({\n init: function (options) {\n var that = this;\n options.formatter = {\n toggle: function (range) {\n var nodes = that.immutables() ? editableTextNodes(range) : textNodes(range);\n new InlineFormatter([{ tags: ['a'] }]).remove(nodes);\n }\n };\n this.options = options;\n Command.fn.init.call(this, options);\n }\n });\n var LinkCommand = Command.extend({\n init: function (options) {\n var that;\n this.options = options;\n Command.fn.init.call(this, options);\n this.formatter = new LinkFormatter();\n if (!options.url) {\n this.attributes = null;\n this.async = true;\n } else {\n this.exec = function () {\n this.formatter.immutables = that && that.immutables();\n this.formatter.apply(options.range, {\n href: options.url,\n innerHTML: options.text || options.url,\n target: options.target\n });\n };\n }\n },\n _dialogTemplate: function () {\n return kendo.template('<div class=\"k-editor-dialog k-popup-edit-form k-edit-form-container\">' + '<div class=\\'k-edit-label\\'>' + '<label for=\\'k-editor-link-url\\'>#: messages.linkWebAddress #</label>' + '</div>' + '<div class=\\'k-edit-field\\'>' + '<input type=\\'text\\' class=\\'k-input k-textbox\\' id=\\'k-editor-link-url\\'>' + '</div>' + '<div class=\\'k-edit-label k-editor-link-text-row\\'>' + '<label for=\\'k-editor-link-text\\'>#: messages.linkText #</label>' + '</div>' + '<div class=\\'k-edit-field k-editor-link-text-row\\'>' + '<input type=\\'text\\' class=\\'k-input k-textbox\\' id=\\'k-editor-link-text\\'>' + '</div>' + '<div class=\\'k-edit-label\\'>' + '<label for=\\'k-editor-link-title\\'>#: messages.linkToolTip #</label>' + '</div>' + '<div class=\\'k-edit-field\\'>' + '<input type=\\'text\\' class=\\'k-input k-textbox\\' id=\\'k-editor-link-title\\'>' + '</div>' + '<div class=\\'k-edit-label\\'></div>' + '<div class=\\'k-edit-field\\'>' + '<input type=\\'checkbox\\' class=\\'k-checkbox\\' id=\\'k-editor-link-target\\'>' + '<label for=\\'k-editor-link-target\\' class=\\'k-checkbox-label\\'>#: messages.linkOpenInNewWindow #</label>' + '</div>' + '<div class=\\'k-edit-buttons k-state-default\\'>' + '<button class=\"k-dialog-insert k-button k-primary\">#: messages.dialogInsert #</button>' + '<button class=\"k-dialog-close k-button\">#: messages.dialogCancel #</button>' + '</div>' + '</div>')({ messages: this.editor.options.messages });\n },\n exec: function () {\n var messages = this.editor.options.messages;\n this._initialText = '';\n this._range = this.lockRange(true);\n this.formatter.immutables = this.immutables();\n var nodes = textNodes(this._range);\n var a = nodes.length ? this.formatter.finder.findSuitable(nodes[0]) : null;\n var img = nodes.length && dom.name(nodes[0]) == 'img';\n var dialog = this.createDialog(this._dialogTemplate(), {\n title: messages.createLink,\n close: proxy(this._close, this),\n visible: false\n });\n if (a) {\n this._range.selectNodeContents(a);\n nodes = textNodes(this._range);\n }\n this._initialText = this.linkText(nodes);\n dialog.find('.k-dialog-insert').click(proxy(this._apply, this)).end().find('.k-dialog-close').click(proxy(this._close, this)).end().find('.k-edit-field input').keydown(proxy(this._keydown, this)).end().find('#k-editor-link-url').val(this.linkUrl(a)).end().find('#k-editor-link-text').val(this._initialText).end().find('#k-editor-link-title').val(a ? a.title : '').end().find('#k-editor-link-target').attr('checked', a ? a.target == '_blank' : false).end().find('.k-editor-link-text-row').toggle(!img);\n this._dialog = dialog.data('kendoWindow').center().open();\n $('#k-editor-link-url', dialog).focus().select();\n },\n _keydown: function (e) {\n var keys = kendo.keys;\n if (e.keyCode == keys.ENTER) {\n this._apply(e);\n } else if (e.keyCode == keys.ESC) {\n this._close(e);\n }\n },\n _apply: function (e) {\n var element = this._dialog.element;\n var href = $('#k-editor-link-url', element).val();\n var title, text, target;\n var textInput = $('#k-editor-link-text', element);\n if (href && href != HTTP_PROTOCOL) {\n if (href.indexOf('@') > 0 && !/^(\\w+:)|(\\/\\/)/i.test(href)) {\n href = 'mailto:' + href;\n }\n this.attributes = { href: href };\n title = $('#k-editor-link-title', element).val();\n if (title) {\n this.attributes.title = title;\n }\n if (textInput.is(':visible')) {\n text = textInput.val();\n if (!text && !this._initialText) {\n this.attributes.innerHTML = href;\n } else if (text && text !== this._initialText) {\n this.attributes.innerHTML = dom.stripBom(text);\n }\n }\n target = $('#k-editor-link-target', element).is(':checked');\n this.attributes.target = target ? '_blank' : null;\n this.formatter.apply(this._range, this.attributes);\n }\n this._close(e);\n if (this.change) {\n this.change();\n }\n },\n _close: function (e) {\n e.preventDefault();\n this._dialog.destroy();\n dom.windowFromDocument(RangeUtils.documentFromRange(this._range)).focus();\n this.releaseRange(this._range);\n },\n linkUrl: function (anchor) {\n if (anchor) {\n return anchor.getAttribute('href', 2);\n }\n return HTTP_PROTOCOL;\n },\n linkText: function (nodes) {\n var text = '';\n var i;\n for (i = 0; i < nodes.length; i++) {\n text += nodes[i].nodeValue;\n }\n return dom.stripBom(text || '');\n },\n redo: function () {\n var range = this.lockRange(true);\n this.formatter.apply(range, this.attributes);\n this.releaseRange(range);\n }\n });\n var AutoLinkCommand = Command.extend({\n init: function (options) {\n Command.fn.init.call(this, options);\n this.formatter = new LinkFormatter();\n },\n exec: function () {\n var detectedLink = this.detectLink();\n if (!detectedLink) {\n return;\n }\n var range = this.getRange();\n var linkMarker = new kendo.ui.editor.Marker();\n var linkRange = range.cloneRange();\n linkRange.setStart(detectedLink.start.node, detectedLink.start.offset);\n linkRange.setEnd(detectedLink.end.node, detectedLink.end.offset);\n range = this.lockRange();\n linkMarker.add(linkRange);\n this.formatter.apply(linkRange, { href: this._ensureWebProtocol(detectedLink.text) });\n linkMarker.remove(linkRange);\n this.releaseRange(range);\n },\n detectLink: function () {\n var range = this.getRange();\n var traverser = new LeftDomTextTraverser({\n node: range.startContainer,\n offset: range.startOffset,\n cancelAtNode: function (node) {\n return node && dom.name(node) === 'a';\n }\n });\n var detection = new DomTextLinkDetection(traverser);\n return detection.detectLink();\n },\n changesContent: function () {\n return !!this.detectLink();\n },\n _ensureWebProtocol: function (linkText) {\n var hasProtocol = this._hasProtocolPrefix(linkText);\n return hasProtocol ? linkText : this._prefixWithWebProtocol(linkText);\n },\n _hasProtocolPrefix: function (linkText) {\n return protocolRegExp.test(linkText);\n },\n _prefixWithWebProtocol: function (linkText) {\n return HTTP_PROTOCOL + linkText;\n }\n });\n var UnlinkTool = Tool.extend({\n init: function (options) {\n this.options = options;\n this.finder = new InlineFormatFinder([{ tags: ['a'] }]);\n Tool.fn.init.call(this, $.extend(options, { command: UnlinkCommand }));\n },\n initialize: function (ui, options) {\n Tool.fn.initialize.call(this, ui, options);\n ui.addClass('k-state-disabled');\n },\n update: function (ui, nodes) {\n ui.toggleClass('k-state-disabled', !this.finder.isFormatted(nodes)).removeClass('k-state-hover');\n }\n });\n var DomTextLinkDetection = Class.extend({\n init: function (traverser) {\n this.traverser = traverser;\n this.start = DomPos();\n this.end = DomPos();\n this.text = '';\n },\n detectLink: function () {\n var node = this.traverser.node;\n var offset = this.traverser.offset;\n if (dom.isDataNode(node)) {\n var text = node.data.substring(0, offset);\n if (/\\s{2}$/.test(dom.stripBom(text))) {\n return;\n }\n } else if (offset === 0) {\n var p = dom.closestEditableOfType(node, dom.blockElements);\n if (p && p.previousSibling) {\n this.traverser.init({ node: p.previousSibling });\n }\n }\n this.traverser.traverse($.proxy(this._detectEnd, this));\n if (!this.end.blank()) {\n this.traverser = this.traverser.clone(this.end);\n this.traverser.traverse($.proxy(this._detectStart, this));\n if (!this._isLinkDetected()) {\n var puntuationOptions = this.traverser.extendOptions(this.start);\n var puntuationTraverser = new RightDomTextTraverser(puntuationOptions);\n puntuationTraverser.traverse($.proxy(this._skipStartPuntuation, this));\n if (!this._isLinkDetected()) {\n this.start = DomPos();\n }\n }\n }\n if (this.start.blank()) {\n return null;\n } else {\n return {\n start: this.start,\n end: this.end,\n text: this.text\n };\n }\n },\n _isLinkDetected: function () {\n return protocolRegExp.test(this.text) || /^w{3}\\./i.test(this.text);\n },\n _detectEnd: function (text, node) {\n var i = lastIndexOfRegExp(text, endLinkCharsRegExp);\n if (i > -1) {\n this.end.node = node;\n this.end.offset = i + 1;\n return false;\n }\n },\n _detectStart: function (text, node) {\n var i = lastIndexOfRegExp(text, /\\s/);\n var ii = i + 1;\n this.text = text.substring(ii) + this.text;\n this.start.node = node;\n this.start.offset = ii;\n if (i > -1) {\n return false;\n }\n },\n _skipStartPuntuation: function (text, node, offset) {\n var i = indexOfRegExp(text, /\\w/);\n var ii = i;\n if (i === -1) {\n ii = text.length;\n }\n this.text = this.text.substring(ii);\n this.start.node = node;\n this.start.offset = ii + (offset | 0);\n if (i > -1) {\n return false;\n }\n }\n });\n function lastIndexOfRegExp(str, search) {\n var i = str.length;\n while (i-- && !search.test(str[i])) {\n }\n return i;\n }\n function indexOfRegExp(str, search) {\n var r = search.exec(str);\n return r ? r.index : -1;\n }\n var DomPos = function () {\n return {\n node: null,\n offset: null,\n blank: function () {\n return this.node === null && this.offset === null;\n }\n };\n };\n var DomTextTraverser = Class.extend({\n init: function (options) {\n this.node = options.node;\n this.offset = options.offset === undefined ? dom.isDataNode(this.node) && this.node.length || 0 : options.offset;\n this.cancelAtNode = options.cancelAtNode || this.cancelAtNode || $.noop;\n },\n traverse: function (callback) {\n if (!callback) {\n return;\n }\n this.cancel = false;\n this._traverse(callback, this.node, this.offset);\n },\n _traverse: function (callback, node, offset) {\n if (!node || this.cancel) {\n return;\n }\n if (node.nodeType === 3) {\n var text = node.data;\n if (offset !== undefined) {\n text = this.subText(text, offset);\n }\n this.cancel = callback(text, node, offset) === false;\n } else {\n var edgeNode = this.edgeNode(node);\n this.cancel = this.cancel || this.cancelAtNode(edgeNode);\n return this._traverse(callback, edgeNode);\n }\n var next = this.next(node);\n if (!next) {\n var parent = node.parentNode;\n while (!next && dom.isInline(parent)) {\n next = this.next(parent);\n parent = parent.parentNode;\n }\n }\n this.cancel = this.cancel || this.cancelAtNode(next);\n this._traverse(callback, next);\n },\n extendOptions: function (o) {\n return $.extend({\n node: this.node,\n offset: this.offset,\n cancelAtNode: this.cancelAtNode\n }, o || {});\n },\n edgeNode: function (node) {\n },\n next: function (node) {\n },\n subText: function (text, offset) {\n }\n });\n var LeftDomTextTraverser = DomTextTraverser.extend({\n subText: function (text, splitIndex) {\n return text.substring(0, splitIndex);\n },\n next: function (node) {\n return node.previousSibling;\n },\n edgeNode: function (node) {\n return node.lastChild;\n },\n clone: function (options) {\n var o = this.extendOptions(options);\n return new LeftDomTextTraverser(o);\n }\n });\n var RightDomTextTraverser = DomTextTraverser.extend({\n subText: function (text, splitIndex) {\n return text.substring(splitIndex);\n },\n next: function (node) {\n return node.nextSibling;\n },\n edgeNode: function (node) {\n return node.firstChild;\n },\n clone: function (options) {\n var o = this.extendOptions(options);\n return new RightDomTextTraverser(o);\n }\n });\n extend(kendo.ui.editor, {\n LinkFormatFinder: LinkFormatFinder,\n LinkFormatter: LinkFormatter,\n UnlinkCommand: UnlinkCommand,\n LinkCommand: LinkCommand,\n AutoLinkCommand: AutoLinkCommand,\n UnlinkTool: UnlinkTool,\n DomTextLinkDetection: DomTextLinkDetection,\n LeftDomTextTraverser: LeftDomTextTraverser,\n RightDomTextTraverser: RightDomTextTraverser\n });\n registerTool('createLink', new Tool({\n key: 'K',\n ctrl: true,\n command: LinkCommand,\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Create Link'\n })\n }));\n registerTool('unlink', new UnlinkTool({\n key: 'K',\n ctrl: true,\n shift: true,\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Remove Link'\n })\n }));\n registerTool('autoLink', new Tool({\n key: [\n keys.ENTER,\n keys.SPACEBAR\n ],\n keyPressCommand: true,\n command: AutoLinkCommand\n }));\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/file', [\n 'kendo.filebrowser',\n 'editor/link'\n ], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, Editor = kendo.ui.editor, EditorUtils = Editor.EditorUtils, dom = Editor.Dom, registerTool = EditorUtils.registerTool, ToolTemplate = Editor.ToolTemplate, RangeUtils = Editor.RangeUtils, Command = Editor.Command, LinkFormatter = Editor.LinkFormatter, textNodes = RangeUtils.textNodes, keys = kendo.keys, KEDITORFILEURL = '#k-editor-file-url', KEDITORFILETITLE = '#k-editor-file-title';\n var FileCommand = Command.extend({\n init: function (options) {\n var that = this;\n Command.fn.init.call(that, options);\n that.formatter = new LinkFormatter();\n that.async = true;\n that.attributes = {};\n },\n insertFile: function (file, range) {\n var attributes = this.attributes;\n var doc = RangeUtils.documentFromRange(range);\n if (attributes.href && attributes.href != 'http://') {\n if (!file) {\n file = dom.create(doc, 'a', { href: attributes.href });\n file.innerHTML = attributes.innerHTML;\n range.deleteContents();\n range.insertNode(file);\n if (!file.nextSibling) {\n dom.insertAfter(doc.createTextNode('\\uFEFF'), file);\n }\n range.setStartAfter(file);\n range.setEndAfter(file);\n RangeUtils.selectRange(range);\n return true;\n } else {\n dom.attr(file, attributes);\n }\n }\n return false;\n },\n _dialogTemplate: function (showBrowser) {\n return kendo.template('<div class=\"k-editor-dialog k-popup-edit-form k-edit-form-container\">' + '# if (showBrowser) { #' + '<div class=\"k-filebrowser\"></div>' + '# } #' + '<div class=\\'k-edit-label\\'>' + '<label for=\"k-editor-file-url\">#: messages.fileWebAddress #</label>' + '</div>' + '<div class=\\'k-edit-field\\'>' + '<input type=\"text\" class=\"k-input k-textbox\" id=\"k-editor-file-url\">' + '</div>' + '<div class=\\'k-edit-label\\'>' + '<label for=\"k-editor-file-title\">#: messages.fileTitle #</label>' + '</div>' + '<div class=\\'k-edit-field\\'>' + '<input type=\"text\" class=\"k-input k-textbox\" id=\"k-editor-file-title\">' + '</div>' + '<div class=\"k-edit-buttons k-state-default\">' + '<button class=\"k-dialog-insert k-button k-primary\">#: messages.dialogInsert #</button>' + '<button class=\"k-dialog-close k-button\">#: messages.dialogCancel #</button>' + '</div>' + '</div>')({\n messages: this.editor.options.messages,\n showBrowser: showBrowser\n });\n },\n redo: function () {\n var that = this, range = that.lockRange();\n this.formatter.apply(range, this.attributes);\n that.releaseRange(range);\n },\n exec: function () {\n var that = this, range = that.lockRange(), nodes = textNodes(range), applied = false, file = nodes.length ? this.formatter.finder.findSuitable(nodes[0]) : null, dialog, options = that.editor.options, messages = options.messages, fileBrowser = options.fileBrowser, showBrowser = !!(kendo.ui.FileBrowser && fileBrowser && fileBrowser.transport && fileBrowser.transport.read !== undefined), dialogOptions = {\n title: messages.insertFile,\n visible: false,\n resizable: showBrowser\n };\n this.expandImmutablesIn(range);\n function apply(e) {\n var element = dialog.element, href = element.find(KEDITORFILEURL).val().replace(/ /g, '%20'), innerHTML = element.find(KEDITORFILETITLE).val();\n that.attributes = {\n href: href,\n innerHTML: innerHTML !== '' ? innerHTML : href\n };\n applied = that.insertFile(file, range);\n close(e);\n if (that.change) {\n that.change();\n }\n }\n function close(e) {\n e.preventDefault();\n dialog.destroy();\n dom.windowFromDocument(RangeUtils.documentFromRange(range)).focus();\n if (!applied) {\n that.releaseRange(range);\n }\n }\n function keyDown(e) {\n if (e.keyCode == keys.ENTER) {\n apply(e);\n } else if (e.keyCode == keys.ESC) {\n close(e);\n }\n }\n dialogOptions.close = close;\n if (showBrowser) {\n dialogOptions.width = 750;\n }\n dialog = this.createDialog(that._dialogTemplate(showBrowser), dialogOptions).toggleClass('k-filebrowser-dialog', showBrowser).find('.k-dialog-insert').click(apply).end().find('.k-dialog-close').click(close).end().find('.k-edit-field input').keydown(keyDown).end().find(KEDITORFILEURL).val(file ? file.getAttribute('href', 2) : 'http://').end().find(KEDITORFILETITLE).val(file ? file.title : '').end().data('kendoWindow');\n if (showBrowser) {\n that._fileBrowser = new kendo.ui.FileBrowser(dialog.element.find('.k-filebrowser'), extend({}, fileBrowser));\n that._fileBrowser.bind('change', function (ev) {\n if (ev.selected.get('type') === 'f') {\n dialog.element.find(KEDITORFILEURL).val(this.value());\n }\n });\n that._fileBrowser.bind('apply', apply);\n }\n dialog.center().open();\n dialog.element.find(KEDITORFILEURL).focus().select();\n }\n });\n kendo.ui.editor.FileCommand = FileCommand;\n registerTool('insertFile', new Editor.Tool({\n command: FileCommand,\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Insert File'\n })\n }));\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/image', [\n 'kendo.imagebrowser',\n 'editor/link'\n ], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, Editor = kendo.ui.editor, EditorUtils = Editor.EditorUtils, dom = Editor.Dom, registerTool = EditorUtils.registerTool, ToolTemplate = Editor.ToolTemplate, RangeUtils = Editor.RangeUtils, Command = Editor.Command, keys = kendo.keys, KEDITORIMAGEURL = '#k-editor-image-url', KEDITORIMAGETITLE = '#k-editor-image-title', KEDITORIMAGEWIDTH = '#k-editor-image-width', KEDITORIMAGEHEIGHT = '#k-editor-image-height';\n var ImageCommand = Command.extend({\n init: function (options) {\n var that = this;\n Command.fn.init.call(that, options);\n that.async = true;\n that.attributes = {};\n },\n insertImage: function (img, range) {\n var attributes = this.attributes;\n var doc = RangeUtils.documentFromRange(range);\n if (attributes.src && attributes.src != 'http://') {\n var removeIEAttributes = function () {\n setTimeout(function () {\n if (!attributes.width) {\n img.removeAttribute('width');\n }\n if (!attributes.height) {\n img.removeAttribute('height');\n }\n img.removeAttribute('complete');\n });\n };\n if (!img) {\n img = dom.create(doc, 'img', attributes);\n img.onload = img.onerror = removeIEAttributes;\n range.deleteContents();\n range.insertNode(img);\n if (!img.nextSibling) {\n dom.insertAfter(doc.createTextNode('\\uFEFF'), img);\n }\n removeIEAttributes();\n range.setStartAfter(img);\n range.setEndAfter(img);\n RangeUtils.selectRange(range);\n return true;\n } else {\n img.onload = img.onerror = removeIEAttributes;\n dom.attr(img, attributes);\n removeIEAttributes();\n }\n }\n return false;\n },\n _dialogTemplate: function (showBrowser) {\n return kendo.template('<div class=\"k-editor-dialog k-popup-edit-form k-edit-form-container\">' + '# if (showBrowser) { #' + '<div class=\"k-filebrowser k-imagebrowser\"></div>' + '# } #' + '<div class=\\'k-edit-label\\'>' + '<label for=\"k-editor-image-url\">#: messages.imageWebAddress #</label>' + '</div>' + '<div class=\\'k-edit-field\\'>' + '<input type=\"text\" class=\"k-input k-textbox\" id=\"k-editor-image-url\">' + '</div>' + '<div class=\\'k-edit-label\\'>' + '<label for=\"k-editor-image-title\">#: messages.imageAltText #</label>' + '</div>' + '<div class=\\'k-edit-field\\'>' + '<input type=\"text\" class=\"k-input k-textbox\" id=\"k-editor-image-title\">' + '</div>' + '<div class=\\'k-edit-label\\'>' + '<label for=\"k-editor-image-width\">#: messages.imageWidth #</label>' + '</div>' + '<div class=\\'k-edit-field\\'>' + '<input type=\"text\" class=\"k-input k-textbox\" id=\"k-editor-image-width\">' + '</div>' + '<div class=\\'k-edit-label\\'>' + '<label for=\"k-editor-image-height\">#: messages.imageHeight #</label>' + '</div>' + '<div class=\\'k-edit-field\\'>' + '<input type=\"text\" class=\"k-input k-textbox\" id=\"k-editor-image-height\">' + '</div>' + '<div class=\"k-edit-buttons k-state-default\">' + '<button class=\"k-dialog-insert k-button k-primary\">#: messages.dialogInsert #</button>' + '<button class=\"k-dialog-close k-button\">#: messages.dialogCancel #</button>' + '</div>' + '</div>')({\n messages: this.editor.options.messages,\n showBrowser: showBrowser\n });\n },\n redo: function () {\n var that = this, range = that.lockRange();\n if (!that.insertImage(RangeUtils.image(range), range)) {\n that.releaseRange(range);\n }\n },\n exec: function () {\n var that = this, range = that.lockRange(), applied = false, img = RangeUtils.image(range), imageWidth = img && img.getAttribute('width') || '', imageHeight = img && img.getAttribute('height') || '', dialog, options = that.editor.options, messages = options.messages, imageBrowser = options.imageBrowser, showBrowser = !!(kendo.ui.ImageBrowser && imageBrowser && imageBrowser.transport && imageBrowser.transport.read !== undefined), dialogOptions = {\n title: messages.insertImage,\n visible: false,\n resizable: showBrowser\n };\n this.expandImmutablesIn(range);\n function apply(e) {\n var element = dialog.element, w = parseInt(element.find(KEDITORIMAGEWIDTH).val(), 10), h = parseInt(element.find(KEDITORIMAGEHEIGHT).val(), 10);\n that.attributes = {\n src: element.find(KEDITORIMAGEURL).val().replace(/ /g, '%20'),\n alt: element.find(KEDITORIMAGETITLE).val()\n };\n that.attributes.width = null;\n that.attributes.height = null;\n if (!isNaN(w) && w > 0) {\n that.attributes.width = w;\n }\n if (!isNaN(h) && h > 0) {\n that.attributes.height = h;\n }\n applied = that.insertImage(img, range);\n close(e);\n if (that.change) {\n that.change();\n }\n }\n function close(e) {\n e.preventDefault();\n dialog.destroy();\n dom.windowFromDocument(RangeUtils.documentFromRange(range)).focus();\n if (!applied) {\n that.releaseRange(range);\n }\n }\n function keyDown(e) {\n if (e.keyCode == keys.ENTER) {\n apply(e);\n } else if (e.keyCode == keys.ESC) {\n close(e);\n }\n }\n dialogOptions.close = close;\n if (showBrowser) {\n dialogOptions.width = 750;\n }\n dialog = this.createDialog(that._dialogTemplate(showBrowser), dialogOptions).toggleClass('k-filebrowser-dialog', showBrowser).find('.k-dialog-insert').click(apply).end().find('.k-dialog-close').click(close).end().find('.k-edit-field input').keydown(keyDown).end().find(KEDITORIMAGEURL).val(img ? img.getAttribute('src', 2) : 'http://').end().find(KEDITORIMAGETITLE).val(img ? img.alt : '').end().find(KEDITORIMAGEWIDTH).val(imageWidth).end().find(KEDITORIMAGEHEIGHT).val(imageHeight).end().data('kendoWindow');\n if (showBrowser) {\n this._imageBrowser = new kendo.ui.ImageBrowser(dialog.element.find('.k-imagebrowser'), extend({}, imageBrowser));\n this._imageBrowser.bind('change', function (ev) {\n if (ev.selected.get('type') === 'f') {\n dialog.element.find(KEDITORIMAGEURL).val(this.value());\n }\n });\n this._imageBrowser.bind('apply', apply);\n }\n dialog.center().open();\n dialog.element.find(KEDITORIMAGEURL).focus().select();\n }\n });\n kendo.ui.editor.ImageCommand = ImageCommand;\n registerTool('insertImage', new Editor.Tool({\n command: ImageCommand,\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Insert Image'\n })\n }));\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/components', ['editor/image'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, DropDownList = kendo.ui.DropDownList, dom = kendo.ui.editor.Dom;\n var SelectBox = DropDownList.extend({\n init: function (element, options) {\n var that = this;\n DropDownList.fn.init.call(that, element, options);\n if (kendo.support.mobileOS.ios) {\n this._initSelectOverlay();\n this.bind('dataBound', $.proxy(this._initSelectOverlay, this));\n }\n that.text(that.options.title);\n that.bind('open', function () {\n if (that.options.autoSize) {\n var list = that.list, listWidth;\n list.css({\n whiteSpace: 'nowrap',\n width: 'auto'\n });\n listWidth = list.width();\n if (listWidth) {\n listWidth += 20;\n } else {\n listWidth = that._listWidth;\n }\n list.css('width', listWidth + kendo.support.scrollbar());\n that._listWidth = listWidth;\n }\n });\n },\n options: {\n name: 'SelectBox',\n index: -1\n },\n _initSelectOverlay: function () {\n var selectBox = this;\n var value = selectBox.value();\n var view = this.dataSource.view();\n var item;\n var html = '';\n var encode = kendo.htmlEncode;\n for (var i = 0; i < view.length; i++) {\n item = view[i];\n html += '<option value=\\'' + encode(item.value) + '\\'';\n if (item.value == value) {\n html += ' selected';\n }\n html += '>' + encode(item.text) + '</option>';\n }\n var select = $('<select class=\\'k-select-overlay\\'>' + html + '</select>');\n var wrapper = $(this.element).closest('.k-widget');\n wrapper.next('.k-select-overlay').remove();\n select.insertAfter(wrapper);\n select.on('change', function () {\n selectBox.value(this.value);\n selectBox.trigger('change');\n });\n },\n value: function (value) {\n var that = this, result = DropDownList.fn.value.call(that, value);\n if (value === undefined) {\n return result;\n }\n if (!DropDownList.fn.value.call(that)) {\n that.text(that.options.title);\n }\n },\n decorate: function (body) {\n var that = this, dataSource = that.dataSource, items = dataSource.data(), i, tag, className, style;\n if (body) {\n that.list.css('background-color', dom.getEffectiveBackground($(body)));\n }\n for (i = 0; i < items.length; i++) {\n tag = items[i].tag || 'span';\n className = items[i].className;\n style = dom.inlineStyle(body, tag, { className: className });\n style = style.replace(/\"/g, '\\'');\n items[i].style = style + ';display:inline-block';\n }\n dataSource.trigger('change');\n }\n });\n kendo.ui.plugin(SelectBox);\n kendo.ui.editor.SelectBox = SelectBox;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/indent', ['editor/components'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, Class = kendo.Class, extend = $.extend, Editor = kendo.ui.editor, dom = Editor.Dom, EditorUtils = Editor.EditorUtils, registerTool = EditorUtils.registerTool, Command = Editor.Command, Tool = Editor.Tool, ToolTemplate = Editor.ToolTemplate, RangeUtils = Editor.RangeUtils, blockElements = dom.blockElements, BlockFormatFinder = Editor.BlockFormatFinder, BlockFormatter = Editor.BlockFormatter;\n function indent(node, value) {\n var isRtl = $(node).css('direction') == 'rtl', indentDirection = isRtl ? 'Right' : 'Left', property = dom.name(node) != 'td' ? 'margin' + indentDirection : 'padding' + indentDirection;\n if (value === undefined) {\n return node.style[property] || 0;\n } else {\n if (value > 0) {\n node.style[property] = value + 'px';\n } else {\n node.style[property] = '';\n if (!node.style.cssText) {\n node.removeAttribute('style');\n }\n }\n }\n }\n var IndentFormatter = Class.extend({\n init: function () {\n this.finder = new BlockFormatFinder([{ tags: dom.blockElements }]);\n },\n apply: function (nodes) {\n nodes = dom.filterBy(nodes, dom.htmlIndentSpace, true);\n var formatNodes = this.finder.findSuitable(nodes), targets = [], i, len, formatNode, parentList, sibling;\n formatNodes = this.mapImmutables(formatNodes);\n if (formatNodes.length) {\n for (i = 0, len = formatNodes.length; i < len; i++) {\n if (dom.is(formatNodes[i], 'li')) {\n if (!$(formatNodes[i]).index()) {\n targets.push(formatNodes[i].parentNode);\n } else if ($.inArray(formatNodes[i].parentNode, targets) < 0) {\n targets.push(formatNodes[i]);\n }\n } else {\n targets.push(formatNodes[i]);\n }\n }\n while (targets.length) {\n formatNode = targets.shift();\n if (dom.is(formatNode, 'li')) {\n parentList = formatNode.parentNode;\n sibling = $(formatNode).prev('li');\n var siblingList = sibling.find('ul,ol').last();\n var nestedList = $(formatNode).children('ul,ol')[0];\n if (nestedList && sibling[0]) {\n if (siblingList[0]) {\n siblingList.append(formatNode);\n siblingList.append($(nestedList).children());\n dom.remove(nestedList);\n } else {\n sibling.append(nestedList);\n nestedList.insertBefore(formatNode, nestedList.firstChild);\n }\n } else {\n nestedList = sibling.children('ul,ol')[0];\n if (!nestedList) {\n nestedList = dom.create(formatNode.ownerDocument, dom.name(parentList));\n sibling.append(nestedList);\n }\n while (formatNode && formatNode.parentNode == parentList) {\n nestedList.appendChild(formatNode);\n formatNode = targets.shift();\n }\n }\n } else {\n var marginLeft = parseInt(indent(formatNode), 10) + 30;\n indent(formatNode, marginLeft);\n for (var targetIndex = 0; targetIndex < targets.length; targetIndex++) {\n if ($.contains(formatNode, targets[targetIndex])) {\n targets.splice(targetIndex, 1);\n }\n }\n }\n }\n } else {\n var formatter = new BlockFormatter([{ tags: ['p'] }], { style: { marginLeft: 30 } });\n formatter.apply(nodes);\n }\n },\n mapImmutables: function (nodes) {\n if (!this.immutables) {\n return nodes;\n } else {\n var immutables = [];\n return $.map(nodes, function (node) {\n var immutable = Editor.Immutables.immutableParent(node);\n if (immutable) {\n if ($.inArray(immutable, immutables) === -1) {\n immutables.push(immutable);\n } else {\n return null;\n }\n }\n return immutable || node;\n });\n }\n },\n remove: function (nodes) {\n nodes = dom.filterBy(nodes, dom.htmlIndentSpace, true);\n var formatNodes = this.finder.findSuitable(nodes), targetNode, i, len, list, listParent, siblings, formatNode, marginLeft;\n formatNodes = this.mapImmutables(formatNodes);\n for (i = 0, len = formatNodes.length; i < len; i++) {\n formatNode = $(formatNodes[i]);\n if (formatNode.is('li')) {\n list = formatNode.parent();\n listParent = list.parent();\n if (listParent.is('li,ul,ol') && !indent(list[0])) {\n if (targetNode && $.contains(targetNode, listParent[0])) {\n continue;\n }\n siblings = formatNode.nextAll('li');\n if (siblings.length) {\n $(list[0].cloneNode(false)).appendTo(formatNode).append(siblings);\n }\n if (listParent.is('li')) {\n formatNode.insertAfter(listParent);\n } else {\n formatNode.appendTo(listParent);\n }\n if (!list.children('li').length) {\n list.remove();\n }\n continue;\n } else {\n if (targetNode == list[0]) {\n continue;\n }\n targetNode = list[0];\n }\n } else {\n targetNode = formatNodes[i];\n }\n marginLeft = parseInt(indent(targetNode), 10) - 30;\n indent(targetNode, marginLeft);\n }\n }\n });\n var IndentCommand = Command.extend({\n init: function (options) {\n var that = this;\n options.formatter = {\n toggle: $.proxy(function (range) {\n var indentFormatter = new IndentFormatter();\n indentFormatter.immutables = this.editor && this.editor.options.immutables;\n indentFormatter.apply(RangeUtils.nodes(range));\n }, that)\n };\n Command.fn.init.call(this, options);\n }\n });\n var OutdentCommand = Command.extend({\n init: function (options) {\n var that = this;\n options.formatter = {\n toggle: $.proxy(function (range) {\n var indentFormatter = new IndentFormatter();\n indentFormatter.immutables = this.editor && this.editor.options.immutables;\n indentFormatter.remove(RangeUtils.nodes(range));\n }, that)\n };\n Command.fn.init.call(this, options);\n }\n });\n var OutdentTool = Tool.extend({\n init: function (options) {\n Tool.fn.init.call(this, options);\n this.finder = new BlockFormatFinder([{ tags: blockElements }]);\n },\n initialize: function (ui, options) {\n Tool.fn.initialize.call(this, ui, options);\n $.extend(this.options, { immutables: options.editor && options.editor.options.immutables });\n ui.addClass('k-state-disabled');\n },\n update: function (ui, nodes) {\n var suitableNodes = this.finder.findSuitable(nodes), isOutdentable, listParentsCount, i, len, suitable, immutableParent;\n for (i = 0, len = suitableNodes.length; i < len; i++) {\n suitable = suitableNodes[i];\n if (this.options.immutables) {\n immutableParent = Editor.Immutables.immutableParent(suitable);\n if (immutableParent) {\n suitable = immutableParent;\n }\n }\n isOutdentable = indent(suitable);\n if (!isOutdentable) {\n listParentsCount = $(suitable).parents('ul,ol').length;\n isOutdentable = dom.is(suitable, 'li') && (listParentsCount > 1 || indent(suitable.parentNode)) || dom.ofType(suitable, [\n 'ul',\n 'ol'\n ]) && listParentsCount > 0;\n }\n if (isOutdentable) {\n ui.removeClass('k-state-disabled');\n return;\n }\n }\n ui.addClass('k-state-disabled').removeClass('k-state-hover');\n }\n });\n extend(Editor, {\n IndentFormatter: IndentFormatter,\n IndentCommand: IndentCommand,\n OutdentCommand: OutdentCommand,\n OutdentTool: OutdentTool\n });\n registerTool('indent', new Tool({\n command: IndentCommand,\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Indent'\n })\n }));\n registerTool('outdent', new OutdentTool({\n command: OutdentCommand,\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Outdent'\n })\n }));\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/viewhtml', ['editor/indent'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, Editor = kendo.ui.editor, EditorUtils = Editor.EditorUtils, Command = Editor.Command, Tool = Editor.Tool, ToolTemplate = Editor.ToolTemplate;\n var ViewHtmlCommand = Command.extend({\n init: function (options) {\n var cmd = this;\n cmd.options = options;\n Command.fn.init.call(cmd, options);\n cmd.attributes = null;\n cmd.async = true;\n },\n exec: function () {\n var that = this, editor = that.editor, options = editor.options, messages = editor.options.messages, dialog = $(kendo.template(ViewHtmlCommand.template)(messages)).appendTo(document.body), textarea = '.k-editor-textarea', content;\n options.serialization.immutables = editor.immutables;\n content = ViewHtmlCommand.indent(editor.value());\n options.serialization.immutables = undefined;\n function apply(e) {\n options.deserialization.immutables = editor.immutables;\n editor.value(dialog.find(textarea).val());\n options.deserialization.immutables = undefined;\n close(e);\n if (that.change) {\n that.change();\n }\n editor.trigger('change');\n }\n function close(e) {\n e.preventDefault();\n dialog.data('kendoWindow').destroy();\n if (editor.immutables) {\n editor.immutables.serializedImmutables = {};\n }\n editor.focus();\n }\n this.createDialog(dialog, {\n title: messages.viewHtml,\n close: close,\n visible: false\n }).find(textarea).val(content).end().find('.k-dialog-update').click(apply).end().find('.k-dialog-close').click(close).end().data('kendoWindow').center().open();\n dialog.find(textarea).focus();\n }\n });\n extend(ViewHtmlCommand, {\n template: '<div class=\\'k-editor-dialog k-popup-edit-form k-edit-form-container k-viewhtml-dialog\\'>' + '<textarea class=\\'k-editor-textarea k-input\\'></textarea>' + '<div class=\\'k-edit-buttons k-state-default\\'>' + '<button class=\\'k-dialog-update k-button k-primary\\'>#: dialogUpdate #</button>' + '<button class=\\'k-dialog-close k-button\\'>#: dialogCancel #</button>' + '</div>' + '</div>',\n indent: function (content) {\n return content.replace(/<\\/(p|li|ul|ol|h[1-6]|table|tr|td|th)>/gi, '</$1>\\n').replace(/<(ul|ol)([^>]*)><li/gi, '<$1$2>\\n<li').replace(/<br \\/>/gi, '<br />\\n').replace(/\\n$/, '');\n }\n });\n kendo.ui.editor.ViewHtmlCommand = ViewHtmlCommand;\n Editor.EditorUtils.registerTool('viewHtml', new Tool({\n command: ViewHtmlCommand,\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'View HTML'\n })\n }));\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/formatting', ['editor/viewhtml'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo, Editor = kendo.ui.editor, Tool = Editor.Tool, ToolTemplate = Editor.ToolTemplate, DelayedExecutionTool = Editor.DelayedExecutionTool, Command = Editor.Command, dom = Editor.Dom, EditorUtils = Editor.EditorUtils, RangeUtils = Editor.RangeUtils, registerTool = EditorUtils.registerTool;\n var FormattingTool = DelayedExecutionTool.extend({\n init: function (options) {\n var that = this;\n Tool.fn.init.call(that, kendo.deepExtend({}, that.options, options));\n that.type = 'kendoSelectBox';\n that.finder = {\n getFormat: function () {\n return '';\n }\n };\n },\n options: {\n items: [\n {\n text: 'Paragraph',\n value: 'p'\n },\n {\n text: 'Quotation',\n value: 'blockquote'\n },\n {\n text: 'Heading 1',\n value: 'h1'\n },\n {\n text: 'Heading 2',\n value: 'h2'\n },\n {\n text: 'Heading 3',\n value: 'h3'\n },\n {\n text: 'Heading 4',\n value: 'h4'\n },\n {\n text: 'Heading 5',\n value: 'h5'\n },\n {\n text: 'Heading 6',\n value: 'h6'\n }\n ],\n width: 110\n },\n toFormattingItem: function (item) {\n var value = item.value;\n if (!value) {\n return item;\n }\n if (item.tag || item.className) {\n return item;\n }\n var dot = value.indexOf('.');\n if (dot === 0) {\n item.className = value.substring(1);\n } else if (dot == -1) {\n item.tag = value;\n } else {\n item.tag = value.substring(0, dot);\n item.className = value.substring(dot + 1);\n }\n return item;\n },\n command: function (args) {\n var that = this;\n var item = args.value;\n item = this.toFormattingItem(item);\n return new Editor.FormatCommand({\n range: args.range,\n formatter: function () {\n var formatter, tags = (item.tag || item.context || 'span').split(','), format = [{\n tags: tags,\n attr: { className: item.className || '' }\n }];\n if ($.inArray(tags[0], dom.inlineElements) >= 0) {\n formatter = new Editor.GreedyInlineFormatter(format);\n } else {\n formatter = new Editor.GreedyBlockFormatter(format);\n }\n formatter.editor = that.editor;\n return formatter;\n }\n });\n },\n initialize: function (ui, initOptions) {\n var editor = initOptions.editor;\n var options = this.options;\n var toolName = options.name;\n var that = this;\n that.editor = editor;\n ui.width(options.width);\n ui.kendoSelectBox({\n dataTextField: 'text',\n dataValueField: 'value',\n dataSource: options.items || editor.options[toolName],\n title: editor.options.messages[toolName],\n autoSize: true,\n change: function () {\n var dataItem = this.dataItem();\n if (dataItem) {\n Tool.exec(editor, toolName, dataItem.toJSON());\n }\n },\n dataBound: function () {\n var i, items = this.dataSource.data();\n for (i = 0; i < items.length; i++) {\n items[i] = that.toFormattingItem(items[i]);\n }\n },\n highlightFirst: false,\n template: kendo.template('<span unselectable=\"on\" style=\"display:block;#=(data.style||\"\")#\">#:data.text#</span>')\n });\n ui.addClass('k-decorated').closest('.k-widget').removeClass('k-' + toolName).find('*').addBack().attr('unselectable', 'on');\n },\n getFormattingValue: function (items, nodes) {\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n var tag = item.tag || item.context || '';\n var className = item.className ? '.' + item.className : '';\n var selector = tag + className;\n var element = $(nodes[0]).closest(selector)[0];\n if (!element) {\n continue;\n }\n if (nodes.length == 1) {\n return item.value;\n }\n for (var n = 1; n < nodes.length; n++) {\n if (!$(nodes[n]).closest(selector)[0]) {\n break;\n } else if (n == nodes.length - 1) {\n return item.value;\n }\n }\n }\n return '';\n },\n update: function (ui, nodes) {\n var selectBox = $(ui).data(this.type);\n if (!selectBox) {\n return;\n }\n var dataSource = selectBox.dataSource, items = dataSource.data(), i, context, ancestor = dom.commonAncestor.apply(null, nodes);\n if (ancestor != dom.closestEditable(ancestor) && this._ancestor == ancestor) {\n return;\n } else {\n this._ancestor = ancestor;\n }\n for (i = 0; i < items.length; i++) {\n context = items[i].context;\n items[i].visible = !context || !!$(ancestor).closest(context).length;\n }\n dataSource.filter([{\n field: 'visible',\n operator: 'eq',\n value: true\n }]);\n DelayedExecutionTool.fn.update.call(this, ui, nodes);\n selectBox.value(this.getFormattingValue(dataSource.view(), nodes));\n selectBox.wrapper.toggleClass('k-state-disabled', !dataSource.view().length);\n },\n destroy: function () {\n this._ancestor = null;\n }\n });\n var CleanFormatCommand = Command.extend({\n exec: function () {\n var range = this.lockRange(true);\n this.tagsToClean = this.options.remove || 'strong,em,span,sup,sub,del,b,i,u,font'.split(',');\n RangeUtils.wrapSelectedElements(range);\n var nodes = RangeUtils.mapAll(range, function (node) {\n return node;\n });\n for (var c = nodes.length - 1; c >= 0; c--) {\n var node = nodes[c];\n if (!this.immutableParent(node)) {\n this.clean(node);\n }\n }\n this.releaseRange(range);\n },\n clean: function (node) {\n if (!node || dom.isMarker(node)) {\n return;\n }\n var name = dom.name(node);\n if (name == 'ul' || name == 'ol') {\n var listFormatter = new Editor.ListFormatter(name);\n var prev = node.previousSibling;\n var next = node.nextSibling;\n listFormatter.unwrap(node);\n for (; prev && prev != next; prev = prev.nextSibling) {\n this.clean(prev);\n }\n } else if (name == 'blockquote') {\n dom.changeTag(node, 'p');\n } else if (node.nodeType == 1 && !dom.insignificant(node)) {\n for (var i = node.childNodes.length - 1; i >= 0; i--) {\n this.clean(node.childNodes[i]);\n }\n node.removeAttribute('style');\n node.removeAttribute('class');\n } else {\n unwrapListItem(node);\n }\n if ($.inArray(name, this.tagsToClean) > -1) {\n dom.unwrap(node);\n }\n },\n immutableParent: function (node) {\n return this.immutables() && Editor.Immutables.immutableParent(node);\n }\n });\n function unwrapListItem(node) {\n var li = dom.closestEditableOfType(node, ['li']);\n if (li) {\n var listFormatter = new Editor.ListFormatter(dom.name(li.parentNode));\n var range = kendo.ui.editor.W3CRange.fromNode(node);\n range.selectNode(li);\n listFormatter.toggle(range);\n }\n }\n $.extend(Editor, {\n FormattingTool: FormattingTool,\n CleanFormatCommand: CleanFormatCommand\n });\n registerTool('formatting', new FormattingTool({\n template: new ToolTemplate({\n template: EditorUtils.dropDownListTemplate,\n title: 'Format'\n })\n }));\n registerTool('cleanFormatting', new Tool({\n command: CleanFormatCommand,\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Clean formatting'\n })\n }));\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/toolbar', ['editor/formatting'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo;\n var ui = kendo.ui;\n var editorNS = ui.editor;\n var Widget = ui.Widget;\n var extend = $.extend;\n var proxy = $.proxy;\n var keys = kendo.keys;\n var NS = '.kendoEditor';\n var EditorUtils = kendo.ui.editor.EditorUtils;\n var ToolTemplate = kendo.ui.editor.ToolTemplate;\n var Tool = kendo.ui.editor.Tool;\n var outerWidth = kendo._outerWidth;\n var outerHeight = kendo._outerHeight;\n var OVERFLOWANCHOR = 'overflowAnchor';\n var focusable = '.k-tool-group:visible a.k-tool:not(.k-state-disabled),' + '.k-tool.k-overflow-anchor,' + '.k-tool-group:visible .k-widget.k-colorpicker,' + '.k-tool-group:visible .k-selectbox,' + '.k-tool-group:visible .k-dropdown,' + '.k-tool-group:visible .k-combobox .k-input';\n var toolNamesByCssClass = {\n 'k-i-sup-script': 'superscript',\n 'k-i-sub-script': 'subscript',\n 'k-i-align-left': 'justifyLeft',\n 'k-i-align-center': 'justifyCenter',\n 'k-i-align-right': 'justifyRight',\n 'k-i-align-justify': 'justifyFull',\n 'k-i-list-unordered': 'insertUnorderedList',\n 'k-i-list-ordered': 'insertOrderedList',\n 'k-i-login': 'import',\n 'k-i-indent-increase': 'indent',\n 'k-i-indent-decrease': 'outdent',\n 'k-i-link-horizontal': 'createLink',\n 'k-i-unlink-horizontal': 'unlink',\n 'k-i-image': 'insertImage',\n 'k-i-file-add': 'insertFile',\n 'k-i-html': 'viewHtml',\n 'k-i-foreground-color': 'foreColor',\n 'k-i-paint': 'backColor',\n 'k-i-table-insert': 'createTable',\n 'k-i-table-column-insert-left': 'addColumnLeft',\n 'k-i-table-column-insert-right': 'addColumnRight',\n 'k-i-table-row-insert-above': 'addRowAbove',\n 'k-i-table-row-insert-below': 'addRowBelow',\n 'k-i-table-row-delete': 'deleteRow',\n 'k-i-table-column-delete': 'deleteColumn',\n 'k-i-table-properties': 'tableWizard',\n 'k-i-table-wizard': 'tableWizardInsert',\n 'k-i-clear-css': 'cleanFormatting'\n };\n var OverflowAnchorTool = Tool.extend({\n initialize: function (ui, options) {\n ui.attr({ unselectable: 'on' });\n var toolbar = options.editor.toolbar;\n ui.on('click', $.proxy(function () {\n this.overflowPopup.toggle();\n }, toolbar));\n },\n options: { name: OVERFLOWANCHOR },\n command: $.noop,\n update: $.noop,\n destroy: $.noop\n });\n EditorUtils.registerTool(OVERFLOWANCHOR, new OverflowAnchorTool({\n key: '',\n ctrl: true,\n template: new ToolTemplate({ template: EditorUtils.overflowAnchorTemplate })\n }));\n var Toolbar = Widget.extend({\n init: function (element, options) {\n var that = this;\n options = extend({}, options, { name: 'EditorToolbar' });\n Widget.fn.init.call(that, element, options);\n if (options.popup) {\n that._initPopup();\n }\n if (options.resizable && options.resizable.toolbar) {\n that._resizeHandler = kendo.onResize(function () {\n that.resize();\n });\n that.element.addClass('k-toolbar-resizable');\n }\n },\n events: ['execute'],\n groups: {\n basic: [\n 'bold',\n 'italic',\n 'underline',\n 'strikethrough'\n ],\n scripts: [\n 'subscript',\n 'superscript'\n ],\n alignment: [\n 'justifyLeft',\n 'justifyCenter',\n 'justifyRight',\n 'justifyFull'\n ],\n links: [\n 'insertImage',\n 'insertFile',\n 'createLink',\n 'unlink'\n ],\n lists: [\n 'insertUnorderedList',\n 'insertOrderedList',\n 'indent',\n 'outdent'\n ],\n tables: [\n 'createTable',\n 'addColumnLeft',\n 'addColumnRight',\n 'addRowAbove',\n 'addRowBelow',\n 'deleteRow',\n 'deleteColumn'\n ],\n advanced: [\n 'viewHtml',\n 'cleanFormatting',\n 'print',\n 'pdf',\n 'exportAs',\n 'import'\n ],\n fonts: [\n 'fontName',\n 'fontSize'\n ],\n colors: [\n 'foreColor',\n 'backColor'\n ]\n },\n overflowFlaseTools: [\n 'formatting',\n 'fontName',\n 'fontSize',\n 'foreColor',\n 'backColor',\n 'insertHtml'\n ],\n _initPopup: function () {\n var that = this;\n this.window = $(this.element).wrap('<div class=\\'editorToolbarWindow k-header\\' />').parent().prepend('<button class=\\'k-button k-button-bare k-editortoolbar-dragHandle\\'><span class=\\'k-icon k-i-handler-drag\\' /></button>').kendoWindow({\n title: false,\n resizable: false,\n draggable: { dragHandle: '.k-editortoolbar-dragHandle' },\n animation: {\n open: { effects: 'fade:in' },\n close: { effects: 'fade:out' }\n },\n minHeight: 42,\n visible: false,\n autoFocus: false,\n actions: [],\n dragend: function () {\n this._moved = true;\n }\n }).on('mousedown', function (e) {\n if (!$(e.target).is('.k-icon')) {\n that.preventPopupHide = true;\n }\n }).on('focusout', function () {\n that.options.editor.element.focusout();\n }).data('kendoWindow');\n },\n _toggleOverflowStyles: function (element, show) {\n element.find('li').toggleClass('k-item k-state-default', show).find('.k-tool:not(.k-state-disabled),.k-overflow-button').toggleClass('k-overflow-button k-button', show);\n },\n _initOverflowPopup: function (ui) {\n var that = this;\n var popupTemplate = '<ul class=\\'k-editor-overflow-popup k-overflow-container k-list-container\\'></ul>';\n that.overflowPopup = $(popupTemplate).appendTo('body').kendoPopup({\n anchor: ui,\n origin: 'bottom right',\n position: 'top right',\n copyAnchorStyles: false,\n open: function (e) {\n if (this.element.is(':empty')) {\n e.preventDefault();\n }\n that._toggleOverflowStyles(this.element, true);\n },\n activate: proxy(that.focusOverflowPopup, that)\n }).data('kendoPopup');\n },\n items: function () {\n var isResizable = this.options.resizable && this.options.resizable.toolbar, popup, result;\n result = this.element.children().find('> *, select');\n if (isResizable) {\n popup = this.overflowPopup;\n result = result.add(popup.element.children().find('> *'));\n }\n return result;\n },\n focused: function () {\n return this.element.find('.k-state-focused').length > 0 || this.preventPopupHide || this.overflowPopup && this.overflowPopup.visible();\n },\n toolById: function (name) {\n var id, tools = this.tools;\n for (id in tools) {\n if (id.toLowerCase() == name) {\n return tools[id];\n }\n }\n },\n toolGroupFor: function (toolName) {\n var i, groups = this.groups;\n if (this.isCustomTool(toolName)) {\n return 'custom';\n }\n for (i in groups) {\n if ($.inArray(toolName, groups[i]) >= 0) {\n return i;\n }\n }\n },\n bindTo: function (editor) {\n var that = this, window = that.window;\n if (that._editor) {\n that._editor.unbind('select', proxy(that.resize, that));\n }\n that._editor = editor;\n if (that.options.resizable && that.options.resizable.toolbar) {\n editor.options.tools.push(OVERFLOWANCHOR);\n }\n that.tools = that.expandTools(editor.options.tools);\n that.render();\n that.element.find('.k-combobox .k-input').keydown(function (e) {\n var combobox = $(this).closest('.k-combobox').data('kendoComboBox'), key = e.keyCode;\n if (key == keys.RIGHT || key == keys.LEFT) {\n combobox.close();\n } else if (key == keys.DOWN) {\n if (!combobox.dropDown.isOpened()) {\n e.stopImmediatePropagation();\n combobox.open();\n }\n }\n });\n that._attachEvents();\n that.items().each(function initializeTool() {\n var toolName = that._toolName(this), tool = toolName !== 'moreVertical' ? that.tools[toolName] : that.tools.overflowAnchor, options = tool && tool.options, messages = editor.options.messages, description = options && options.tooltip || messages[toolName], ui = $(this);\n if (!tool || !tool.initialize) {\n return;\n }\n if (toolName == 'fontSize' || toolName == 'fontName') {\n var inheritText = messages[toolName + 'Inherit'];\n ui.find('input').val(inheritText).end().find('span.k-input').text(inheritText).end();\n }\n tool.initialize(ui, {\n title: that._appendShortcutSequence(description, tool),\n editor: that._editor\n });\n ui.closest('.k-widget', that.element).addClass('k-editor-widget');\n ui.closest('.k-colorpicker', that.element).next('.k-colorpicker').addClass('k-editor-widget');\n });\n editor.bind('select', proxy(that.resize, that));\n that.update();\n if (window) {\n window.wrapper.css({\n top: '',\n left: '',\n width: ''\n });\n }\n },\n show: function () {\n var that = this, window = that.window, editorOptions = that.options.editor, wrapper, editorElement, editorOffset, browser = kendo.support.browser;\n if (window) {\n wrapper = window.wrapper;\n editorElement = editorOptions.element;\n if (!wrapper.is(':visible') || !that.window.options.visible) {\n if (!wrapper[0].style.width) {\n wrapper.width(outerWidth(editorElement) - parseInt(wrapper.css('border-left-width'), 10) - parseInt(wrapper.css('border-right-width'), 10));\n }\n if (!window._moved) {\n editorOffset = editorElement.offset();\n wrapper.css({\n top: Math.max(0, parseInt(editorOffset.top, 10) - outerHeight(wrapper) - parseInt(that.window.element.css('padding-bottom'), 10)),\n left: Math.max(0, parseInt(editorOffset.left, 10))\n });\n }\n if ((browser.msie || browser.edge) && that._overlaps(editorElement)) {\n setTimeout(function () {\n window.open();\n }, 0);\n } else {\n window.open();\n }\n }\n }\n },\n _overlaps: function (box) {\n var toolbarWrapper = this.window.wrapper, toolbarWrapperOffset = toolbarWrapper.offset(), toolbarWrapperLeft = toolbarWrapperOffset.left, toolbarWrapperTop = toolbarWrapperOffset.top, boxOffset = box.offset(), boxOffsetLeft = boxOffset.left, boxOffsetTop = boxOffset.top;\n return !(boxOffsetLeft + box.width() < toolbarWrapperLeft || boxOffsetLeft > toolbarWrapperLeft + toolbarWrapper.width() || boxOffsetTop + box.height() < toolbarWrapperTop || boxOffsetTop > toolbarWrapperTop + toolbarWrapper.height());\n },\n hide: function () {\n if (this.window) {\n this.window.close();\n }\n },\n focus: function () {\n var TABINDEX = 'tabIndex';\n var element = this.element;\n var tabIndex = this._editor.element.attr(TABINDEX);\n element.attr(TABINDEX, tabIndex || 0).focus().find(focusable).first().focus();\n if (!tabIndex && tabIndex !== 0) {\n element.removeAttr(TABINDEX);\n }\n },\n focusOverflowPopup: function () {\n var TABINDEX = 'tabIndex';\n var element = this.overflowPopup.element;\n var tabIndex = this._editor.element.attr(TABINDEX);\n element.closest('.k-animation-container').addClass('k-overflow-wrapper');\n element.attr(TABINDEX, tabIndex || 0).find(focusable).first().focus();\n if (!tabIndex && tabIndex !== 0) {\n element.removeAttr(TABINDEX);\n }\n },\n _appendShortcutSequence: function (localizedText, tool) {\n if (!tool.key) {\n return localizedText;\n }\n var res = localizedText + ' (';\n if (tool.ctrl) {\n res += 'Ctrl + ';\n }\n if (tool.shift) {\n res += 'Shift + ';\n }\n if (tool.alt) {\n res += 'Alt + ';\n }\n res += tool.key + ')';\n return res;\n },\n _nativeTools: [\n 'insertLineBreak',\n 'insertParagraph',\n 'redo',\n 'undo',\n 'autoLink'\n ],\n tools: {},\n isCustomTool: function (toolName) {\n return !(toolName in kendo.ui.Editor.defaultTools);\n },\n expandTools: function (tools) {\n var currentTool, i, nativeTools = this._nativeTools, options, defaultTools = kendo.deepExtend({}, kendo.ui.Editor.defaultTools), result = {}, name;\n for (i = 0; i < tools.length; i++) {\n currentTool = tools[i];\n name = currentTool.name;\n if ($.isPlainObject(currentTool)) {\n if (name && defaultTools[name]) {\n result[name] = extend({}, defaultTools[name]);\n extend(result[name].options, currentTool);\n } else {\n options = extend({\n cssClass: 'k-i-gear',\n type: 'button',\n title: ''\n }, currentTool);\n if (!options.name) {\n options.name = 'custom';\n }\n options.cssClass = 'k-' + options.name;\n if (!options.template && options.type == 'button') {\n options.template = editorNS.EditorUtils.buttonTemplate;\n options.title = options.title || options.tooltip;\n }\n result[name] = { options: options };\n }\n } else if (defaultTools[currentTool]) {\n result[currentTool] = defaultTools[currentTool];\n }\n }\n for (i = 0; i < nativeTools.length; i++) {\n if (!result[nativeTools[i]]) {\n result[nativeTools[i]] = defaultTools[nativeTools[i]];\n }\n }\n return result;\n },\n render: function () {\n var that = this, tools = that.tools, options, template, toolElement, toolName, editorElement = that._editor.element, element = that.element.empty(), groupName, newGroupName, toolConfig = that._editor.options.tools, browser = kendo.support.browser, group, i, groupPosition = 0, resizable = that.options.resizable && that.options.resizable.toolbar, overflowFlaseTools = this.overflowFlaseTools;\n function stringify(template) {\n var result;\n if (template.getHtml) {\n result = template.getHtml();\n } else {\n if (!$.isFunction(template)) {\n template = kendo.template(template);\n }\n result = template(options);\n }\n return $.trim(result);\n }\n function endGroup() {\n if (group.children().length) {\n if (resizable) {\n group.data('position', groupPosition);\n groupPosition++;\n }\n group.appendTo(element);\n }\n }\n function startGroup(toolName) {\n if (toolName !== OVERFLOWANCHOR) {\n group = $('<li class=\\'k-tool-group\\' role=\\'presentation\\' />');\n group.data('overflow', $.inArray(toolName, overflowFlaseTools) === -1 ? true : false);\n } else {\n group = $('<li class=\\'k-overflow-tools\\' />');\n }\n }\n element.empty();\n if (toolConfig.length) {\n toolName = toolConfig[0].name || toolConfig[0];\n }\n startGroup(toolName, overflowFlaseTools);\n for (i = 0; i < toolConfig.length; i++) {\n toolName = toolConfig[i].name || toolConfig[i];\n options = tools[toolName] && tools[toolName].options;\n if (!options && $.isPlainObject(toolName)) {\n options = toolName;\n }\n template = options && options.template;\n if (toolName == 'break') {\n endGroup();\n $('<li class=\\'k-row-break\\' />').appendTo(that.element);\n startGroup(toolName, overflowFlaseTools);\n }\n if (!template) {\n continue;\n }\n newGroupName = that.toolGroupFor(toolName);\n if (groupName != newGroupName || toolName == OVERFLOWANCHOR) {\n endGroup();\n startGroup(toolName, overflowFlaseTools);\n groupName = newGroupName;\n }\n template = stringify(template);\n toolElement = $(template).appendTo(group);\n if (newGroupName == 'custom') {\n endGroup();\n startGroup(toolName, overflowFlaseTools);\n }\n if (options.exec && toolElement.hasClass('k-tool')) {\n toolElement.click(proxy(options.exec, editorElement[0]));\n }\n }\n endGroup();\n $(that.element).children(':has(> .k-tool)').addClass('k-button-group');\n if (that.options.popup && browser.msie && browser.version < 9) {\n that.window.wrapper.find('*').attr('unselectable', 'on');\n }\n that.updateGroups();\n if (resizable) {\n that._initOverflowPopup(that.element.find('.k-overflow-anchor'));\n }\n that.angular('compile', function () {\n return { elements: that.element };\n });\n },\n updateGroups: function () {\n $(this.element).children().each(function () {\n $(this).children().filter(function () {\n return !$(this).hasClass('k-state-disabled');\n }).removeClass('k-group-end').first().addClass('k-group-start').end().last().addClass('k-group-end').end();\n });\n },\n decorateFrom: function (body) {\n this.items().filter('.k-decorated').each(function () {\n var selectBox = $(this).data('kendoSelectBox');\n if (selectBox) {\n selectBox.decorate(body);\n }\n });\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n var id, tools = this.tools;\n for (id in tools) {\n if (tools[id].destroy) {\n tools[id].destroy();\n }\n }\n if (this.window) {\n this.window.destroy();\n }\n if (this._resizeHandler) {\n kendo.unbindResize(this._resizeHandler);\n }\n if (this.overflowPopup) {\n this.overflowPopup.destroy();\n }\n },\n _attachEvents: function () {\n var that = this, popupElement = that.overflowPopup ? that.overflowPopup.element : $([]);\n that.attachToolsEvents(that.element.add(popupElement));\n },\n attachToolsEvents: function (element) {\n var that = this, buttons = '[role=button].k-tool', enabledButtons = buttons + ':not(.k-state-disabled)', disabledButtons = buttons + '.k-state-disabled', dropdown = '.k-dropdown', colorpicker = '.k-colorpicker', editorTools = [\n buttons,\n dropdown,\n colorpicker\n ].join(',');\n element.off(NS).on('mouseenter' + NS, enabledButtons, function () {\n $(this).addClass('k-state-hover');\n }).on('mouseleave' + NS, enabledButtons, function () {\n $(this).removeClass('k-state-hover');\n }).on('mousedown' + NS, editorTools, function (e) {\n e.preventDefault();\n }).on('keydown' + NS, focusable, function (e) {\n var current = this;\n var resizable = that.options.resizable && that.options.resizable.toolbar;\n var focusElement, currentContainer, keyCode = e.keyCode;\n function move(direction, container, constrain) {\n var tools = container.find(focusable);\n var index = tools.index(current) + direction;\n if (constrain) {\n index = Math.max(0, Math.min(tools.length - 1, index));\n }\n return tools[index];\n }\n if (keyCode == keys.RIGHT || keyCode == keys.LEFT) {\n if (!$(current).hasClass('.k-dropdown')) {\n focusElement = move(keyCode == keys.RIGHT ? 1 : -1, that.element, true);\n }\n } else if (resizable && (keyCode == keys.UP || keyCode == keys.DOWN)) {\n focusElement = move(keyCode == keys.DOWN ? 1 : -1, that.overflowPopup.element, true);\n } else if (keyCode == keys.ESC) {\n if (that.overflowPopup && that.overflowPopup.visible()) {\n that.overflowPopup.close();\n }\n focusElement = that._editor;\n } else if (keyCode == keys.TAB && !(e.ctrlKey || e.altKey)) {\n if (resizable) {\n currentContainer = $(current.parentElement).hasClass('k-overflow-tool-group') ? that.overflowPopup.element : that.element;\n } else {\n currentContainer = that.element;\n }\n if (e.shiftKey) {\n focusElement = move(-1, currentContainer);\n } else {\n focusElement = move(1, currentContainer);\n if (!focusElement) {\n focusElement = that._editor;\n }\n }\n }\n if (focusElement) {\n e.preventDefault();\n focusElement.focus();\n }\n if (keyCode === keys.ENTER && $(current).is('a') && !$(current).attr('href')) {\n that._executeToolCommand(current, e);\n }\n }).on('click' + NS, enabledButtons, function (e) {\n that._executeToolCommand(this, e);\n }).on('click' + NS, disabledButtons, function (e) {\n e.preventDefault();\n });\n },\n _executeToolCommand: function (toolElement, e) {\n var that = this;\n var button = $(toolElement);\n e.preventDefault();\n e.stopPropagation();\n button.removeClass('k-state-hover');\n if (!button.is('[data-popup]')) {\n that._editor.exec(that._toolName(toolElement));\n }\n },\n _toolName: function (element) {\n if (!element) {\n return;\n }\n var className = element.className;\n if (/k-tool\\b/i.test(className)) {\n className = element.firstChild.className;\n }\n var tool = $.grep(className.split(' '), function (x) {\n return !/^k-(widget|tool|tool-icon|icon|state-hover|header|combobox|dropdown|selectbox|colorpicker)$/i.test(x);\n });\n if (tool[0]) {\n var toolname = tool[0];\n if (toolNamesByCssClass[toolname]) {\n toolname = toolNamesByCssClass[toolname];\n }\n if (toolname.indexOf('k-i-') >= 0) {\n return kendo.toCamelCase(toolname.substring(toolname.indexOf('k-i-') + 4));\n } else {\n return toolname.substring(toolname.lastIndexOf('-') + 1);\n }\n }\n return 'custom';\n },\n refreshTools: function () {\n var that = this, editorNS = kendo.ui.editor, editor = that._editor, range = editor.getRange(), nodes = editorNS.RangeUtils.textNodes(range), immutables = editor.options.immutables, immutablesContext = that._immutablesContext(range);\n nodes = editorNS.Dom.filterBy(nodes, editorNS.Dom.htmlIndentSpace, true);\n if (!nodes.length) {\n nodes = [range.startContainer];\n }\n that.items().each(function () {\n var tool = that.tools[that._toolName(this)];\n if (tool) {\n var ui = $(this);\n if (tool.update) {\n tool.update(ui, nodes);\n }\n if (immutables) {\n that._updateImmutablesState(tool, ui, immutablesContext);\n }\n }\n });\n this.update();\n },\n _immutablesContext: function (range) {\n if (this._editor.options.immutables) {\n var editorNS = kendo.ui.editor;\n if (range.collapsed) {\n return editorNS.Immutables.immutablesContext(range);\n } else {\n return editorNS.RangeUtils.editableTextNodes(range).length === 0;\n }\n }\n },\n _updateImmutablesState: function (tool, ui, immutablesContext) {\n var name = tool.name;\n var uiElement = ui;\n var trackImmutables = tool.options.trackImmutables;\n if (trackImmutables === undefined) {\n trackImmutables = $.inArray(name, editorNS.Immutables.toolsToBeUpdated) > -1;\n }\n if (trackImmutables) {\n var display = immutablesContext ? 'none' : '';\n if (!ui.is('.k-tool')) {\n var uiData = ui.data();\n for (var key in uiData) {\n if (key.match(/^kendo[A-Z][a-zA-Z]*/)) {\n var widget = uiData[key];\n uiElement = widget.wrapper;\n break;\n }\n }\n }\n uiElement.css('display', display);\n var groupUi = uiElement.closest('li');\n if (groupUi.children(':visible').length === 0) {\n groupUi.css('display', display);\n }\n }\n },\n update: function () {\n this.updateGroups();\n },\n _resize: function (e) {\n var containerWidth = e.width;\n var resizable = this.options.resizable && this.options.resizable.toolbar;\n var popup = this.overflowPopup;\n this.refreshTools();\n if (!resizable) {\n return;\n }\n if (popup.visible()) {\n popup.close(true);\n }\n this._refreshWidths();\n this._shrink(containerWidth);\n this._stretch(containerWidth);\n this._toggleOverflowStyles(this.element, false);\n this._toggleOverflowStyles(this.overflowPopup.element, true);\n this.element.children('li.k-overflow-tools').css('visibility', popup.element.is(':empty') ? 'hidden' : 'visible');\n },\n _refreshWidths: function () {\n this.element.children('li').each(function (idx, element) {\n var group = $(element);\n group.data('outerWidth', outerWidth(group, true));\n });\n },\n _shrink: function (width) {\n var group, visibleGroups;\n if (width < this._groupsWidth()) {\n visibleGroups = this._visibleGroups().filter(':not(.k-overflow-tools)');\n for (var i = visibleGroups.length - 1; i >= 0; i--) {\n group = visibleGroups.eq(i);\n if (width > this._groupsWidth()) {\n break;\n } else {\n this._hideGroup(group);\n }\n }\n }\n },\n _stretch: function (width) {\n var group, hiddenGroups;\n if (width > this._groupsWidth()) {\n hiddenGroups = this._hiddenGroups();\n for (var i = 0; i < hiddenGroups.length; i++) {\n group = hiddenGroups.eq(i);\n if (width < this._groupsWidth() || !this._showGroup(group, width)) {\n break;\n }\n }\n }\n },\n _hiddenGroups: function () {\n var popup = this.overflowPopup;\n var hiddenGroups = this.element.children('li.k-tool-group').filter(':hidden');\n hiddenGroups = hiddenGroups.add(popup.element.children('li'));\n hiddenGroups.sort(function (a, b) {\n return $(a).data('position') > $(b).data('position') ? 1 : -1;\n });\n return hiddenGroups;\n },\n _visibleGroups: function () {\n return this.element.children('li.k-tool-group, li.k-overflow-tools').filter(':visible');\n },\n _groupsWidth: function () {\n var width = 0;\n this._visibleGroups().each(function () {\n width += $(this).data('outerWidth');\n });\n return Math.ceil(width);\n },\n _hideGroup: function (group) {\n if (group.data('overflow')) {\n var popup = this.overflowPopup;\n group.detach().prependTo(popup.element).addClass('k-overflow-tool-group');\n } else {\n group.hide();\n }\n },\n _showGroup: function (group, width) {\n var position, previous;\n if (group.length && width > this._groupsWidth() + group.data('outerWidth')) {\n if (group.hasClass('k-overflow-tool-group')) {\n position = group.data('position');\n if (position === 0) {\n group.detach().prependTo(this.element);\n } else {\n previous = this.element.children().filter(function (idx, element) {\n return $(element).data('position') === position - 1;\n });\n group.detach().insertAfter(previous);\n }\n group.removeClass('k-overflow-tool-group');\n } else {\n group.show();\n }\n return true;\n }\n return false;\n }\n });\n $.extend(editorNS, { Toolbar: Toolbar });\n }(window.jQuery || window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/tables', ['editor/toolbar'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, proxy = $.proxy, Editor = kendo.ui.editor, dom = Editor.Dom, EditorUtils = Editor.EditorUtils, RangeUtils = Editor.RangeUtils, Command = Editor.Command, NS = 'kendoEditor', ACTIVESTATE = 'k-state-active', SELECTEDSTATE = 'k-state-selected', Tool = Editor.Tool, ToolTemplate = Editor.ToolTemplate, InsertHtmlCommand = Editor.InsertHtmlCommand, BlockFormatFinder = Editor.BlockFormatFinder, registerTool = Editor.EditorUtils.registerTool, getTouches = kendo.getTouches;\n var template = kendo.template;\n var columnTemplate = '<td style=\\'width:#=width#%;\\'>#=content#</td>';\n var tableFormatFinder = new BlockFormatFinder([{ tags: ['table'] }]);\n var TableCommand = InsertHtmlCommand.extend({\n init: function (options) {\n var o = $.extend({\n postProcess: this.postProcess,\n skipCleaners: true\n }, options || {});\n InsertHtmlCommand.fn.init.call(this, o);\n },\n _tableHtml: function (rows, columns) {\n rows = rows || 1;\n columns = columns || 1;\n var columnHtml = template(columnTemplate)({\n width: 100 / columns,\n content: Editor.emptyTableCellContent\n });\n var rowHeight = 100 / rows;\n return '<table class=\\'k-table\\' data-last>' + new Array(rows + 1).join('<tr style=\\'height:' + rowHeight + '%;\\'>' + new Array(columns + 1).join(columnHtml) + '</tr>') + '</table>';\n },\n postProcess: function (editor, range) {\n var insertedTable = $('table[data-last]', editor.document).removeAttr('data-last');\n range.setStart(insertedTable.find('td')[0], 0);\n range.collapse(true);\n editor.selectRange(range);\n },\n exec: function () {\n var options = this.options;\n options.html = this._tableHtml(options.rows, options.columns);\n InsertHtmlCommand.fn.exec.call(this);\n }\n });\n var PopupTool = Tool.extend({\n initialize: function (ui, options) {\n Tool.fn.initialize.call(this, ui, options);\n var popup = $(this.options.popupTemplate).appendTo('body').kendoPopup({\n anchor: ui,\n copyAnchorStyles: false,\n open: proxy(this._open, this),\n activate: proxy(this._activate, this),\n close: proxy(this._close, this)\n }).data('kendoPopup');\n ui.click(proxy(this._toggle, this)).keydown(proxy(this._keydown, this));\n var editor = this._editor = options.editor;\n this._popup = popup;\n var tableWizard = new Editor.TableWizardTool({\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: editor.options.messages.tableWizard\n }),\n command: Editor.TableWizardCommand,\n insertNewTable: true\n });\n registerTool('tableWizardInsert', tableWizard);\n var twTool = $('<div class=\\'k-editor-toolbar\\'>' + tableWizard.options.template.getHtml() + '</div>');\n twTool.appendTo(popup.element);\n if (editor.toolbar) {\n editor.toolbar.attachToolsEvents(twTool);\n }\n },\n popup: function () {\n return this._popup;\n },\n _activate: $.noop,\n _open: function () {\n this._popup.options.anchor.addClass(ACTIVESTATE);\n },\n _close: function () {\n this._popup.options.anchor.removeClass(ACTIVESTATE);\n },\n _keydown: function (e) {\n var keys = kendo.keys;\n var key = e.keyCode;\n if (key == keys.DOWN && e.altKey) {\n this._popup.open();\n } else if (key == keys.ESC) {\n this._popup.close();\n }\n },\n _toggle: function (e) {\n var button = $(e.target).closest('.k-tool');\n if (!button.hasClass('k-state-disabled')) {\n this.popup().toggle();\n }\n },\n update: function (ui) {\n var popup = this.popup();\n if (popup.wrapper && popup.wrapper.css('display') == 'block') {\n popup.close();\n }\n ui.removeClass('k-state-hover');\n },\n destroy: function () {\n this._popup.destroy();\n }\n });\n var InsertTableTool = PopupTool.extend({\n init: function (options) {\n this.cols = 8;\n this.rows = 6;\n PopupTool.fn.init.call(this, $.extend(options, {\n command: TableCommand,\n popupTemplate: '<div class=\\'k-ct-popup\\'>' + new Array(this.cols * this.rows + 1).join('<span class=\\'k-ct-cell k-state-disabled\\' />') + '<div class=\\'k-status\\'></div>' + '</div>'\n }));\n },\n _activate: function () {\n var that = this, element = that._popup.element, cells = element.find('.k-ct-cell'), firstCell = cells.eq(0), lastCell = cells.eq(cells.length - 1), start = kendo.getOffset(firstCell), end = kendo.getOffset(lastCell), cols = that.cols, rows = that.rows, cellWidth, cellHeight;\n element.find('*').addBack().attr('unselectable', 'on');\n end.left += lastCell[0].offsetWidth;\n end.top += lastCell[0].offsetHeight;\n cellWidth = (end.left - start.left) / cols;\n cellHeight = (end.top - start.top) / rows;\n function tableFromLocation(e) {\n var w = $(window);\n return {\n row: Math.floor((e.clientY + w.scrollTop() - start.top) / cellHeight) + 1,\n col: Math.floor((e.clientX + w.scrollLeft() - start.left) / cellWidth) + 1\n };\n }\n element.autoApplyNS(NS).on('mousemove', function (e) {\n that._setTableSize(tableFromLocation(e));\n }).on('mouseleave', function () {\n that._setTableSize();\n }).on('down', function (e) {\n e.preventDefault();\n var touch = getTouches(e)[0];\n that._exec(tableFromLocation(touch.location));\n });\n },\n _valid: function (size) {\n return size && size.row > 0 && size.col > 0 && size.row <= this.rows && size.col <= this.cols;\n },\n _exec: function (size) {\n if (this._valid(size)) {\n this._editor.exec('createTable', {\n rows: size.row,\n columns: size.col\n });\n this._popup.close();\n }\n },\n _setTableSize: function (size) {\n var element = this._popup.element;\n var status = element.find('.k-status');\n var cells = element.find('.k-ct-cell');\n var cols = this.cols;\n var messages = this._editor.options.messages;\n if (this._valid(size)) {\n status.text(kendo.format(messages.createTableHint, size.row, size.col));\n cells.each(function (i) {\n $(this).toggleClass(SELECTEDSTATE, i % cols < size.col && i / cols < size.row);\n });\n } else {\n status.text(messages.dialogCancel);\n cells.removeClass(SELECTEDSTATE);\n }\n },\n _keydown: function (e) {\n PopupTool.fn._keydown.call(this, e);\n if (!this._popup.visible()) {\n return;\n }\n var keys = kendo.keys;\n var key = e.keyCode;\n var cells = this._popup.element.find('.k-ct-cell');\n var focus = Math.max(cells.filter('.k-state-selected').last().index(), 0);\n var selectedRows = Math.floor(focus / this.cols);\n var selectedColumns = focus % this.cols;\n var changed = false;\n if (key == keys.DOWN && !e.altKey) {\n changed = true;\n selectedRows++;\n } else if (key == keys.UP) {\n changed = true;\n selectedRows--;\n } else if (key == keys.RIGHT) {\n changed = true;\n selectedColumns++;\n } else if (key == keys.LEFT) {\n changed = true;\n selectedColumns--;\n }\n var tableSize = {\n row: Math.max(1, Math.min(this.rows, selectedRows + 1)),\n col: Math.max(1, Math.min(this.cols, selectedColumns + 1))\n };\n if (key == keys.ENTER) {\n this._exec(tableSize);\n } else {\n this._setTableSize(tableSize);\n }\n if (changed) {\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n },\n _open: function () {\n var messages = this._editor.options.messages;\n PopupTool.fn._open.call(this);\n this.popup().element.find('.k-status').text(messages.dialogCancel).end().find('.k-ct-cell').removeClass(SELECTEDSTATE);\n },\n _close: function () {\n PopupTool.fn._close.call(this);\n this.popup().element.off('.' + NS);\n }\n });\n var InsertRowCommand = Command.extend({\n exec: function () {\n var range = this.lockRange(true), td = range.endContainer, cellCount, row, newRow;\n while (dom.name(td) != 'td') {\n td = td.parentNode;\n }\n if (this.immutables() && Editor.Immutables.immutableParent(td)) {\n return;\n }\n row = td.parentNode;\n cellCount = row.children.length;\n newRow = row.cloneNode(true);\n for (var i = 0; i < row.cells.length; i++) {\n newRow.cells[i].innerHTML = Editor.emptyTableCellContent;\n }\n if (this.options.position == 'before') {\n dom.insertBefore(newRow, row);\n } else {\n dom.insertAfter(newRow, row);\n }\n this.releaseRange(range);\n }\n });\n var InsertColumnCommand = Command.extend({\n exec: function () {\n var range = this.lockRange(true), td = dom.closest(range.endContainer, 'td'), table = dom.closest(td, 'table'), columnIndex, i, rows = table.rows, cell, newCell, position = this.options.position;\n if (this.immutables() && Editor.Immutables.immutableParent(td)) {\n return;\n }\n columnIndex = dom.findNodeIndex(td, true);\n for (i = 0; i < rows.length; i++) {\n cell = rows[i].cells[columnIndex];\n newCell = cell.cloneNode();\n newCell.innerHTML = Editor.emptyTableCellContent;\n if (position == 'before') {\n dom.insertBefore(newCell, cell);\n } else {\n dom.insertAfter(newCell, cell);\n }\n }\n this.releaseRange(range);\n }\n });\n var DeleteRowCommand = Command.extend({\n exec: function () {\n var range = this.lockRange();\n var rows = RangeUtils.mapAll(range, function (node) {\n return $(node).closest('tr')[0];\n });\n var row = rows[0];\n if (this.immutables() && Editor.Immutables.immutableParent(row)) {\n return;\n }\n var table = dom.closest(row, 'table');\n var focusElement;\n if (table.rows.length <= rows.length) {\n focusElement = dom.next(table);\n if (!focusElement || dom.insignificant(focusElement)) {\n focusElement = dom.prev(table);\n }\n dom.remove(table);\n } else {\n for (var i = 0; i < rows.length; i++) {\n row = rows[i];\n dom.removeTextSiblings(row);\n focusElement = dom.next(row) || dom.prev(row);\n focusElement = focusElement.cells[0];\n dom.remove(row);\n }\n }\n if (focusElement) {\n range.setStart(focusElement, 0);\n range.collapse(true);\n this.editor.selectRange(range);\n }\n }\n });\n var DeleteColumnCommand = Command.extend({\n exec: function () {\n var range = this.lockRange(), td = dom.closest(range.endContainer, 'td'), table = dom.closest(td, 'table'), rows = table.rows, columnIndex = dom.findNodeIndex(td, true), columnCount = rows[0].cells.length, focusElement, i;\n if (this.immutables() && Editor.Immutables.immutableParent(td)) {\n return;\n }\n if (columnCount == 1) {\n focusElement = dom.next(table);\n if (!focusElement || dom.insignificant(focusElement)) {\n focusElement = dom.prev(table);\n }\n dom.remove(table);\n } else {\n dom.removeTextSiblings(td);\n focusElement = dom.next(td) || dom.prev(td);\n for (i = 0; i < rows.length; i++) {\n dom.remove(rows[i].cells[columnIndex]);\n }\n }\n if (focusElement) {\n range.setStart(focusElement, 0);\n range.collapse(true);\n this.editor.selectRange(range);\n }\n }\n });\n var TableModificationTool = Tool.extend({\n command: function (options) {\n options = extend(options, this.options);\n if (options.action == 'delete') {\n if (options.type == 'row') {\n return new DeleteRowCommand(options);\n } else {\n return new DeleteColumnCommand(options);\n }\n } else {\n if (options.type == 'row') {\n return new InsertRowCommand(options);\n } else {\n return new InsertColumnCommand(options);\n }\n }\n },\n initialize: function (ui, options) {\n Tool.fn.initialize.call(this, ui, options);\n ui.addClass('k-state-disabled');\n },\n update: function (ui, nodes) {\n var isFormatted = !tableFormatFinder.isFormatted(nodes);\n ui.toggleClass('k-state-disabled', isFormatted);\n }\n });\n extend(kendo.ui.editor, {\n PopupTool: PopupTool,\n TableCommand: TableCommand,\n InsertTableTool: InsertTableTool,\n TableModificationTool: TableModificationTool,\n InsertRowCommand: InsertRowCommand,\n InsertColumnCommand: InsertColumnCommand,\n DeleteRowCommand: DeleteRowCommand,\n DeleteColumnCommand: DeleteColumnCommand\n });\n registerTool('createTable', new InsertTableTool({\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n popup: true,\n title: 'Create table'\n })\n }));\n registerTool('addColumnLeft', new TableModificationTool({\n type: 'column',\n position: 'before',\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Add column on the left'\n })\n }));\n registerTool('addColumnRight', new TableModificationTool({\n type: 'column',\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Add column on the right'\n })\n }));\n registerTool('addRowAbove', new TableModificationTool({\n type: 'row',\n position: 'before',\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Add row above'\n })\n }));\n registerTool('addRowBelow', new TableModificationTool({\n type: 'row',\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Add row below'\n })\n }));\n registerTool('deleteRow', new TableModificationTool({\n type: 'row',\n action: 'delete',\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Delete row'\n })\n }));\n registerTool('deleteColumn', new TableModificationTool({\n type: 'column',\n action: 'delete',\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Delete column'\n })\n }));\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/export', ['editor/main'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, proxy = $.proxy, Editor = kendo.ui.editor, EditorUtils = Editor.EditorUtils, Command = Editor.Command, Tool = Editor.Tool, registerTool = EditorUtils.registerTool, ToolTemplate = Editor.ToolTemplate, defaultExportAsItems = [\n {\n text: 'Docx',\n value: 'docx'\n },\n {\n text: 'Rtf',\n value: 'rtf'\n },\n {\n text: 'Pdf',\n value: 'pdf'\n },\n {\n text: 'Html',\n value: 'html'\n },\n {\n text: 'Plain Text',\n value: 'txt'\n }\n ];\n var ExportAsCommand = Command.extend({\n init: function (options) {\n var cmd = this;\n cmd.options = options;\n Command.fn.init.call(cmd, options);\n cmd.attributes = null;\n cmd.exportType = options.exportType;\n },\n exec: function () {\n var cmd = this;\n var range = this.lockRange(true);\n cmd.postToProxy();\n cmd.releaseRange(range);\n },\n postToProxy: function () {\n this.generateForm().appendTo('body').submit().remove();\n },\n generateForm: function () {\n var cmd = this;\n var exportAsOptions = cmd.editor.options.exportAs;\n var form = $('<form>').attr({\n action: exportAsOptions && exportAsOptions.proxyURL || '',\n method: 'POST'\n });\n form.append([\n cmd.valueInput(),\n cmd.exportTypeInput(),\n cmd.fileNameInput()\n ]);\n return form;\n },\n valueInput: function () {\n var editor = this.editor;\n return $('<input>').attr({\n value: editor.encodedValue(),\n name: 'value',\n type: 'hidden'\n });\n },\n exportTypeInput: function () {\n var cmd = this;\n return $('<input>').attr({\n value: cmd.exportType,\n name: 'exportType',\n type: 'hidden'\n });\n },\n fileNameInput: function () {\n var editor = this.editor;\n var exportAsOptions = editor.options.exportAs;\n var fileName = exportAsOptions && exportAsOptions.fileName || editor.element.attr('id') || 'editor';\n return $('<input>').attr({\n value: fileName,\n name: 'fileName',\n type: 'hidden'\n });\n }\n });\n var ExportAsTool = Tool.extend({\n init: function (options) {\n var tool = this;\n Tool.fn.init.call(tool, kendo.deepExtend({}, tool.options, options));\n tool.type = 'kendoSelectBox';\n },\n options: {\n items: defaultExportAsItems,\n width: 115\n },\n command: function (args) {\n var value = args.value;\n return new Editor.ExportAsCommand({\n range: args.range,\n exportType: value.exportType\n });\n },\n initialize: function (ui, initOptions) {\n var tool = this;\n var editor = initOptions.editor;\n var options = tool.options;\n var toolName = options.name;\n var changeHandler = proxy(tool.changeHandler, tool);\n var dataSource = options.items || editor.options[toolName];\n dataSource.unshift({\n text: editor.options.messages[toolName],\n value: ''\n });\n tool.editor = editor;\n ui.width(options.width);\n ui.kendoSelectBox({\n dataTextField: 'text',\n dataValueField: 'value',\n dataSource: dataSource,\n autoSize: true,\n change: changeHandler,\n open: function (e) {\n var sender = e.sender;\n sender.items()[0].style.display = 'none';\n sender.unbind('open');\n },\n highlightFirst: false,\n template: kendo.template('<span unselectable=\"on\" style=\"display:block;#=(data.style||\"\")#\">#:data.text#</span>')\n });\n ui.addClass('k-decorated').closest('.k-widget').removeClass('k-' + toolName).find('*').addBack().attr('unselectable', 'on');\n },\n changeHandler: function (e) {\n var sender = e.sender;\n var dataItem = sender.dataItem();\n var value = dataItem && dataItem.value;\n this._exec(value);\n sender.value('');\n },\n _exec: function (value) {\n if (value) {\n Tool.exec(this.editor, this.options.name, { exportType: value });\n }\n },\n destroy: function () {\n this._ancestor = null;\n }\n });\n extend(Editor, {\n ExportAsTool: ExportAsTool,\n ExportAsCommand: ExportAsCommand\n });\n registerTool('exportAs', new ExportAsTool({\n template: new ToolTemplate({\n template: EditorUtils.dropDownListTemplate,\n title: 'Export As'\n })\n }));\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/import', ['editor/main'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, proxy = $.proxy, Editor = kendo.ui.editor, EditorUtils = Editor.EditorUtils, Command = Editor.Command, Tool = Editor.Tool, registerTool = EditorUtils.registerTool, ToolTemplate = Editor.ToolTemplate, loadingOverlay = '<div contenteditable=\"false\" class=\"k-loading-mask\" style=\"width: 100%; height: 100%; position: absolute; top: 0px; left: 0px;\"><div class=\"k-loading-image\"></div><div class=\"k-loading-color\"></div></div>';\n var ImportCommand = Command.extend({\n exec: function () {\n (this.editor._uploadWidget || this._initializeUploadWidget()).element.click();\n },\n _initializeUploadWidget: function () {\n var cmd = this;\n var editor = cmd.editor;\n var importOptions = editor.options['import'];\n var upload = $('<input id=\"editorImport\" name=\"files\" type=\"file\" />').kendoUpload({\n success: proxy(cmd._onUploadSuccess, cmd),\n progress: proxy(cmd._onUploadProgress, cmd),\n select: proxy(cmd._onUploadSelect, cmd),\n error: proxy(cmd._onUploadError, cmd),\n complete: proxy(cmd._onUploadComplete, cmd),\n showFileList: false,\n multiple: false,\n async: {\n saveUrl: importOptions.proxyUrl,\n autoUpload: true,\n saveField: 'file'\n },\n validation: {\n allowedExtensions: importOptions.allowedExtensions,\n maxFileSize: importOptions.maxFileSize\n }\n }).getKendoUpload();\n editor._uploadWidget = upload;\n return upload;\n },\n _onUploadComplete: function (ev) {\n this._trigger('complete', ev);\n ev.sender.clearAllFiles();\n this._removeLoadingOverlay();\n },\n _onUploadSuccess: function (ev) {\n this.editor.value(ev.response.html.replace(/<\\/?body>/gi, ''));\n this._trigger('success', ev);\n },\n _onUploadProgress: function (ev) {\n this._trigger('progress', ev);\n },\n _onUploadSelect: function (ev) {\n this._trigger('select', ev);\n if (!ev.files[0].validationErrors) {\n this._initLoadingOverlay();\n }\n },\n _onUploadError: function (ev) {\n this._trigger('error', ev);\n },\n _trigger: function (eventType, uploadEvent) {\n var editor = this.editor;\n var importOptions = editor.options['import'];\n if (typeof importOptions[eventType] === 'function') {\n importOptions[eventType].call(editor, uploadEvent);\n }\n },\n _initLoadingOverlay: function () {\n var editable = this.editor.body;\n if (Editor.Dom.is(editable, 'body')) {\n this._iframeWrapper = this._container = this.editor.wrapper.find('iframe').parent().css({ position: 'relative' }).append(loadingOverlay);\n } else {\n this._container = $(editable).append(loadingOverlay);\n }\n kendo.ui.progress(this._container, true);\n },\n _removeLoadingOverlay: function () {\n kendo.ui.progress(this._container, false);\n $(this._iframeWrapper).css({ position: '' });\n delete this._container;\n delete this._iframeWrapper;\n }\n });\n extend(Editor, { ImportCommand: ImportCommand });\n registerTool('import', new Tool({\n command: ImportCommand,\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Import'\n })\n }));\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/resizing/resizing-utils', ['editor/main'], f);\n}(function () {\n (function (kendo, undefined) {\n var global = window;\n var math = global.Math;\n var min = math.min;\n var max = math.max;\n var parseFloat = global.parseFloat;\n var $ = kendo.jQuery;\n var extend = $.extend;\n var Editor = kendo.ui.editor;\n var PERCENTAGE = '%';\n var PIXEL = 'px';\n var REGEX_NUMBER_IN_PERCENTAGES = /(\\d+)(\\.?)(\\d*)%/;\n var REGEX_NUMBER_IN_PIXELS = /(\\d+)(\\.?)(\\d*)px/;\n var STRING = 'string';\n function constrain(options) {\n var value = options.value;\n var lowerBound = options.min;\n var upperBound = options.max;\n return max(min(parseFloat(value), parseFloat(upperBound)), parseFloat(lowerBound));\n }\n function getScrollBarWidth(element) {\n if (element && !$(element).is('body') && element.scrollHeight > element.clientHeight) {\n return kendo.support.scrollbar();\n }\n return 0;\n }\n function calculatePercentageRatio(value, total) {\n if (inPercentages(value)) {\n return parseFloat(value);\n } else {\n return parseFloat(value) / total * 100;\n }\n }\n function inPercentages(value) {\n return typeof value === STRING && REGEX_NUMBER_IN_PERCENTAGES.test(value);\n }\n function inPixels(value) {\n return typeof value === STRING && REGEX_NUMBER_IN_PIXELS.test(value);\n }\n function toPercentages(value) {\n return parseFloat(value) + PERCENTAGE;\n }\n function toPixels(value) {\n return parseFloat(value) + PIXEL;\n }\n var ResizingUtils = {\n constrain: constrain,\n getScrollBarWidth: getScrollBarWidth,\n calculatePercentageRatio: calculatePercentageRatio,\n inPercentages: inPercentages,\n inPixels: inPixels,\n toPercentages: toPercentages,\n toPixels: toPixels\n };\n extend(Editor, { ResizingUtils: ResizingUtils });\n }(window.kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/resizing/table-element-resizing', [\n 'editor/main',\n 'kendo.resizable',\n 'editor/resizing/resizing-utils'\n ], f);\n}(function () {\n (function (kendo, undefined) {\n var $ = kendo.jQuery;\n var extend = $.extend;\n var noop = $.noop;\n var proxy = $.proxy;\n var Editor = kendo.ui.editor;\n var Class = kendo.Class;\n var KEY_DOWN = 'keydown';\n var MOUSE_DOWN = 'mousedown';\n var MOUSE_ENTER = 'mouseenter';\n var MOUSE_LEAVE = 'mouseleave';\n var MOUSE_MOVE = 'mousemove';\n var MOUSE_UP = 'mouseup';\n var COMMA = ',';\n var DOT = '.';\n var LAST_CHILD = ':last-child';\n var TABLE = 'table';\n var TableElementResizing = Class.extend({\n init: function (element, options) {\n var that = this;\n that.options = extend({}, that.options, options);\n that.options.tags = $.isArray(that.options.tags) ? that.options.tags : [that.options.tags];\n if ($(element).is(TABLE)) {\n that.element = element;\n that._attachEventHandlers();\n }\n },\n destroy: function () {\n var that = this;\n var eventNamespace = that.options.eventNamespace;\n if (that.element) {\n $(that.element).off(eventNamespace);\n that.element = null;\n }\n $(that.options.rootElement).off(KEY_DOWN + eventNamespace);\n that._destroyResizeHandle();\n },\n options: {\n tags: [],\n min: 0,\n rootElement: null,\n eventNamespace: '',\n rtl: false,\n handle: {\n dataAttribute: '',\n height: 0,\n width: 0,\n classNames: {},\n template: ''\n }\n },\n _attachEventHandlers: function () {\n var that = this;\n var options = that.options;\n $(that.element).on(MOUSE_MOVE + options.eventNamespace, options.tags.join(COMMA), proxy(that.detectElementBorderHovering, that));\n },\n resizingInProgress: function () {\n var that = this;\n var resizable = that._resizable;\n if (resizable) {\n return !!resizable.resizing;\n }\n return false;\n },\n resize: noop,\n detectElementBorderHovering: function (e) {\n var that = this;\n var options = that.options;\n var handleOptions = options.handle;\n var tableElement = $(e.currentTarget);\n var resizeHandle = that.resizeHandle;\n var dataAttribute = handleOptions.dataAttribute;\n if (!that.resizingInProgress()) {\n if (!tableElement.is(LAST_CHILD) && that.elementBorderHovered(tableElement, e)) {\n if (resizeHandle) {\n if (resizeHandle.data(dataAttribute) && resizeHandle.data(dataAttribute) !== tableElement[0]) {\n that.showResizeHandle(tableElement, e);\n }\n } else {\n that.showResizeHandle(tableElement, e);\n }\n } else {\n if (resizeHandle) {\n that._destroyResizeHandle();\n }\n }\n }\n },\n elementBorderHovered: noop,\n showResizeHandle: function (tableElement, e) {\n var that = this;\n if (e.buttons !== 0) {\n return;\n }\n that._initResizeHandle();\n that.setResizeHandlePosition(tableElement);\n that.setResizeHandleDimensions();\n that.setResizeHandleDataAttributes(tableElement[0]);\n that._attachResizeHandleEventHandlers();\n that._initResizable(tableElement);\n that._hideResizeMarker();\n that.resizeHandle.show();\n },\n _initResizeHandle: function () {\n var that = this;\n var options = that.options;\n that._destroyResizeHandle();\n that.resizeHandle = $(options.handle.template).appendTo(options.rootElement);\n },\n setResizeHandlePosition: noop,\n setResizeHandleDimensions: noop,\n setResizeHandleDataAttributes: function (tableElement) {\n var that = this;\n that.resizeHandle.data(that.options.handle.dataAttribute, tableElement);\n },\n _attachResizeHandleEventHandlers: function () {\n var that = this;\n var options = that.options;\n var eventNamespace = options.eventNamespace;\n var markerClass = options.handle.classNames.marker;\n var resizeHandle = that.resizeHandle;\n that.resizeHandle.on(MOUSE_DOWN + eventNamespace, function () {\n resizeHandle.find(DOT + markerClass).show();\n }).on(MOUSE_UP + eventNamespace, function () {\n resizeHandle.find(DOT + markerClass).hide();\n });\n },\n _hideResizeMarker: function () {\n var that = this;\n that.resizeHandle.find(DOT + that.options.handle.classNames.marker).hide();\n },\n _destroyResizeHandle: function () {\n var that = this;\n if (that.resizeHandle) {\n that._destroyResizable();\n that.resizeHandle.off(that.options.eventNamespace).remove();\n that.resizeHandle = null;\n }\n },\n _initResizable: function (tableElement) {\n var that = this;\n if (!that.resizeHandle) {\n return;\n }\n that._destroyResizable();\n that._resizable = new kendo.ui.Resizable(tableElement, {\n draggableElement: that.resizeHandle[0],\n start: proxy(that.onResizeStart, that),\n resize: proxy(that.onResize, that),\n resizeend: proxy(that.onResizeEnd, that)\n });\n },\n _destroyResizable: function () {\n var that = this;\n if (that._resizable) {\n that._resizable.destroy();\n that._resizable = null;\n }\n },\n onResizeStart: function () {\n this._disableKeyboard();\n },\n onResize: function (e) {\n this.setResizeHandleDragPosition(e);\n },\n setResizeHandleDragPosition: noop,\n onResizeEnd: function (e) {\n var that = this;\n that.resize(e);\n that._destroyResizeHandle();\n that._enableKeyboard();\n },\n _enableKeyboard: function () {\n var options = this.options;\n $(options.rootElement).off(KEY_DOWN + options.eventNamespace);\n },\n _disableKeyboard: function () {\n var options = this.options;\n $(options.rootElement).on(KEY_DOWN + options.eventNamespace, function (e) {\n e.preventDefault();\n });\n },\n _forceResizing: function (e) {\n var resizable = this._resizable;\n if (resizable && resizable.userEvents) {\n resizable.userEvents._end(e);\n }\n }\n });\n var ResizingFactory = Class.extend({\n create: function (editor, options) {\n var that = this;\n var resizingName = options.name;\n var NS = options.eventNamespace;\n $(editor.body).on(MOUSE_ENTER + NS, TABLE, function (e) {\n var table = e.currentTarget;\n var resizing = editor[resizingName];\n e.stopPropagation();\n if (resizing) {\n if (resizing.element !== table && !resizing.resizingInProgress()) {\n that._destroyResizing(editor, options);\n that._initResizing(editor, table, options);\n }\n } else {\n that._initResizing(editor, table, options);\n }\n }).on(MOUSE_LEAVE + NS, TABLE, function (e) {\n var parentTable;\n var resizing = editor[resizingName];\n e.stopPropagation();\n if (resizing && !resizing.resizingInProgress() && !resizing.resizeHandle) {\n parentTable = $(resizing.element).parents(TABLE)[0];\n if (parentTable) {\n that._destroyResizing(editor, options);\n that._initResizing(editor, parentTable, options);\n }\n }\n }).on(MOUSE_LEAVE + NS, function () {\n var resizing = editor[resizingName];\n if (resizing && !resizing.resizingInProgress()) {\n that._destroyResizing(editor, options);\n }\n }).on(MOUSE_UP + NS, function (e) {\n var resizing = editor[resizingName];\n var parentTable;\n if (resizing && resizing.resizingInProgress()) {\n parentTable = $(e.target).parents(TABLE)[0];\n if (parentTable) {\n resizing._forceResizing(e);\n that._destroyResizing(editor, options);\n that._initResizing(editor, parentTable, options);\n }\n }\n });\n },\n dispose: function (editor, options) {\n $(editor.body).off(options.eventNamespace);\n },\n _initResizing: function (editor, tableElement, options) {\n var resizingName = options.name;\n var resizingType = options.type;\n editor[resizingName] = new resizingType(tableElement, {\n rtl: kendo.support.isRtl(editor.element),\n rootElement: editor.body\n });\n },\n _destroyResizing: function (editor, options) {\n var resizingName = options.name;\n if (editor[resizingName]) {\n editor[resizingName].destroy();\n editor[resizingName] = null;\n }\n }\n });\n ResizingFactory.current = new ResizingFactory();\n TableElementResizing.create = function (editor, options) {\n ResizingFactory.current.create(editor, options);\n };\n TableElementResizing.dispose = function (editor, options) {\n ResizingFactory.current.dispose(editor, options);\n };\n extend(Editor, { TableElementResizing: TableElementResizing });\n }(window.kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/resizing/column-resizing', [\n 'editor/main',\n 'editor/resizing/resizing-utils',\n 'editor/resizing/table-element-resizing'\n ], f);\n}(function () {\n (function (kendo, undefined) {\n var global = window;\n var math = global.Math;\n var abs = math.abs;\n var $ = kendo.jQuery;\n var extend = $.extend;\n var Editor = kendo.ui.editor;\n var TableElementResizing = Editor.TableElementResizing;\n var ResizingUtils = Editor.ResizingUtils;\n var constrain = ResizingUtils.constrain;\n var calculatePercentageRatio = ResizingUtils.calculatePercentageRatio;\n var getScrollBarWidth = ResizingUtils.getScrollBarWidth;\n var inPercentages = ResizingUtils.inPercentages;\n var toPercentages = ResizingUtils.toPercentages;\n var toPixels = ResizingUtils.toPixels;\n var outerWidth = kendo._outerWidth;\n var NS = '.kendoEditorColumnResizing';\n var RESIZE_HANDLE_CLASS = 'k-column-resize-handle';\n var RESIZE_MARKER_CLASS = 'k-column-resize-marker';\n var BODY = 'body';\n var TBODY = 'tbody';\n var TD = 'td';\n var TH = 'th';\n var TR = 'tr';\n var COMMA = ',';\n var WIDTH = 'width';\n var ColumnResizing = TableElementResizing.extend({\n options: {\n tags: [\n TD,\n TH\n ],\n min: 20,\n rootElement: null,\n eventNamespace: NS,\n rtl: false,\n handle: {\n dataAttribute: 'column',\n width: 10,\n height: 0,\n classNames: {\n handle: RESIZE_HANDLE_CLASS,\n marker: RESIZE_MARKER_CLASS\n },\n template: '<div class=\"k-column-resize-handle-wrapper\" unselectable=\"on\" contenteditable=\"false\">' + '<div class=\"' + RESIZE_HANDLE_CLASS + '\">' + '<div class=\"' + RESIZE_MARKER_CLASS + '\"></div>' + '</div>' + '</div>'\n }\n },\n elementBorderHovered: function (column, e) {\n var that = this;\n var options = that.options;\n var handleWidth = options.handle.width;\n var borderOffset = column.offset().left + (options.rtl ? 0 : outerWidth(column));\n var mousePosition = e.clientX + $(column[0].ownerDocument).scrollLeft();\n if (mousePosition > borderOffset - handleWidth && mousePosition < borderOffset + handleWidth) {\n return true;\n } else {\n return false;\n }\n },\n setResizeHandlePosition: function (column) {\n var that = this;\n var tableBody = $(that.element).children(TBODY);\n var options = that.options;\n var rtl = options.rtl;\n var handleWidth = options.handle.width;\n var rootElement = $(options.rootElement);\n var scrollTopOffset = rootElement.is(BODY) ? 0 : rootElement.scrollTop();\n var scrollLeftOffset = rootElement.is(BODY) ? 0 : rootElement.scrollLeft();\n var columnWidthOffset = rtl ? 0 : outerWidth(column);\n var scrollBarWidth = rtl ? getScrollBarWidth(rootElement[0]) : 0;\n that.resizeHandle.css({\n top: tableBody.position().top + scrollTopOffset,\n left: column.position().left + columnWidthOffset + (scrollLeftOffset - scrollBarWidth) - handleWidth / 2,\n position: 'absolute'\n });\n },\n setResizeHandleDimensions: function () {\n var that = this;\n var tableBody = $(that.element).children(TBODY);\n that.resizeHandle.css({\n width: that.options.handle.width,\n height: tableBody.height()\n });\n },\n setResizeHandleDragPosition: function (e) {\n var that = this;\n var column = $($(e.currentTarget).data(that.options.handle.dataAttribute));\n var options = that.options;\n var handleWidth = options.handle ? options.handle.width : 0;\n var min = options.min;\n var rtl = options.rtl;\n var columnWidth = outerWidth(column);\n var columnLeftOffset = column.position().left;\n var adjacentColumnWidth = outerWidth(column.next());\n var resizeHandle = $(that.resizeHandle);\n var rootElement = $(options.rootElement);\n var scrollLeftOffset = rootElement.is(BODY) ? 0 : rootElement.scrollLeft();\n var scrollBarWidth = rtl ? getScrollBarWidth(rootElement[0]) : 0;\n var handleOffset = constrain({\n value: resizeHandle.position().left + (scrollLeftOffset - scrollBarWidth) + e.x.delta,\n min: columnLeftOffset + (scrollLeftOffset - scrollBarWidth) - (rtl ? adjacentColumnWidth : 0) + min,\n max: columnLeftOffset + columnWidth + (scrollLeftOffset - scrollBarWidth) + (rtl ? 0 : adjacentColumnWidth) - handleWidth - min\n });\n resizeHandle.css({ left: handleOffset });\n },\n resize: function (e) {\n var that = this;\n var column = $($(e.currentTarget).data(that.options.handle.dataAttribute));\n var options = that.options;\n var rtlModifier = options.rtl ? -1 : 1;\n var min = options.min;\n var initialDeltaX = rtlModifier * e.x.initialDelta;\n var newWidth;\n var initialAdjacentColumnWidth;\n var initialColumnWidth;\n that._setTableComputedWidth();\n that._setColumnsComputedWidth();\n initialColumnWidth = outerWidth(column);\n initialAdjacentColumnWidth = outerWidth(column.next());\n newWidth = constrain({\n value: initialColumnWidth + initialDeltaX,\n min: min,\n max: initialColumnWidth + initialAdjacentColumnWidth - min\n });\n that._resizeColumn(column[0], newWidth);\n that._resizeTopAndBottomColumns(column[0], newWidth);\n that._resizeAdjacentColumns(column.index(), initialAdjacentColumnWidth, initialColumnWidth, initialColumnWidth - newWidth);\n },\n _setTableComputedWidth: function () {\n var element = this.element;\n if (element.style[WIDTH] === '') {\n element.style[WIDTH] = toPixels(outerWidth($(element)));\n }\n },\n _setColumnsComputedWidth: function () {\n var that = this;\n var tableBody = $(that.element).children(TBODY);\n var tableBodyWidth = outerWidth(tableBody);\n var columns = tableBody.children(TR).children(TD);\n var length = columns.length;\n var currentColumnsWidths = columns.map(function () {\n return outerWidth($(this));\n });\n var i;\n for (i = 0; i < length; i++) {\n if (inPercentages(columns[i].style[WIDTH])) {\n columns[i].style[WIDTH] = toPercentages(calculatePercentageRatio(currentColumnsWidths[i], tableBodyWidth));\n } else {\n columns[i].style[WIDTH] = toPixels(currentColumnsWidths[i]);\n }\n }\n },\n _resizeTopAndBottomColumns: function (column, newWidth) {\n var that = this;\n var columnIndex = $(column).index();\n var topAndBottomColumns = $(that.element).children(TBODY).children(TR).children(that.options.tags.join(COMMA)).filter(function () {\n var cell = this;\n return $(cell).index() === columnIndex && cell !== column;\n });\n var length = topAndBottomColumns.length;\n var i;\n for (i = 0; i < length; i++) {\n that._resizeColumn(topAndBottomColumns[i], newWidth);\n }\n },\n _resizeColumn: function (column, newWidth) {\n if (inPercentages(column.style[WIDTH])) {\n column.style[WIDTH] = toPercentages(calculatePercentageRatio(newWidth, outerWidth($(this.element).children(TBODY))));\n } else {\n column.style[WIDTH] = toPixels(newWidth);\n }\n },\n _resizeAdjacentColumns: function (columnIndex, initialAdjacentColumnWidth, initialColumnWidth, deltaWidth) {\n var that = this;\n var adjacentColumns = $(that.element).children(TBODY).children(TR).children(that.options.tags.join(COMMA)).filter(function () {\n return $(this).index() === columnIndex + 1;\n });\n var length = adjacentColumns.length;\n var i;\n for (i = 0; i < length; i++) {\n that._resizeAdjacentColumn(adjacentColumns[i], initialAdjacentColumnWidth, initialColumnWidth, deltaWidth);\n }\n },\n _resizeAdjacentColumn: function (adjacentColumn, initialAdjacentColumnWidth, initialColumnWidth, deltaWidth) {\n var that = this;\n var min = that.options.min;\n var newWidth;\n newWidth = constrain({\n value: initialAdjacentColumnWidth + deltaWidth,\n min: min,\n max: abs(initialColumnWidth + initialAdjacentColumnWidth - min)\n });\n that._resizeColumn(adjacentColumn, newWidth);\n }\n });\n ColumnResizing.create = function (editor) {\n TableElementResizing.create(editor, {\n name: 'columnResizing',\n type: ColumnResizing,\n eventNamespace: NS\n });\n };\n ColumnResizing.dispose = function (editor) {\n TableElementResizing.dispose(editor, { eventNamespace: NS });\n };\n extend(Editor, { ColumnResizing: ColumnResizing });\n }(window.kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/resizing/row-resizing', [\n 'editor/main',\n 'editor/resizing/resizing-utils',\n 'editor/resizing/table-element-resizing'\n ], f);\n}(function () {\n (function (kendo, undefined) {\n var math = window.Math;\n var abs = math.abs;\n var $ = kendo.jQuery;\n var extend = $.extend;\n var Editor = kendo.ui.editor;\n var TableElementResizing = Editor.TableElementResizing;\n var ResizingUtils = Editor.ResizingUtils;\n var getScrollBarWidth = ResizingUtils.getScrollBarWidth;\n var constrain = ResizingUtils.constrain;\n var calculatePercentageRatio = ResizingUtils.calculatePercentageRatio;\n var inPercentages = ResizingUtils.inPercentages;\n var toPercentages = ResizingUtils.toPercentages;\n var toPixels = ResizingUtils.toPixels;\n var outerHeight = kendo._outerHeight;\n var NS = '.kendoEditorRowResizing';\n var RESIZE_HANDLE_CLASS = 'k-row-resize-handle';\n var RESIZE_HANDLE_MARKER_WRAPPER_CLASS = 'k-row-resize-marker-wrapper';\n var RESIZE_MARKER_CLASS = 'k-row-resize-marker';\n var BODY = 'body';\n var TR = 'tr';\n var TBODY = 'tbody';\n var HEIGHT = 'height';\n var RowResizing = TableElementResizing.extend({\n options: {\n tags: [TR],\n min: 20,\n rootElement: null,\n eventNamespace: NS,\n rtl: false,\n handle: {\n dataAttribute: 'row',\n width: 0,\n height: 10,\n classNames: {\n handle: RESIZE_HANDLE_CLASS,\n marker: RESIZE_MARKER_CLASS\n },\n template: '<div class=\"k-row-resize-handle-wrapper\" unselectable=\"on\" contenteditable=\"false\">' + '<div class=\"' + RESIZE_HANDLE_CLASS + '\">' + '<div class=\"' + RESIZE_HANDLE_MARKER_WRAPPER_CLASS + '\">' + '<div class=\"' + RESIZE_MARKER_CLASS + '\"></div>' + '</div>' + '</div>' + '</div>'\n }\n },\n elementBorderHovered: function (tableElement, e) {\n var that = this;\n var handleHeight = that.options.handle[HEIGHT];\n var borderOffset = tableElement.offset().top + outerHeight(tableElement);\n var mousePosition = e.clientY + $(tableElement[0].ownerDocument).scrollTop();\n if (mousePosition > borderOffset - handleHeight && mousePosition < borderOffset + handleHeight) {\n return true;\n } else {\n return false;\n }\n },\n setResizeHandlePosition: function (row) {\n var that = this;\n var options = that.options;\n var handleHeight = options.handle[HEIGHT];\n var rowPosition = row.position();\n var rootElement = $(options.rootElement);\n var scrollTopOffset = rootElement.is(BODY) ? 0 : rootElement.scrollTop();\n var scrollLeftOffset = rootElement.is(BODY) ? 0 : rootElement.scrollLeft();\n var scrollBarWidth = options.rtl ? getScrollBarWidth(rootElement[0]) : 0;\n that.resizeHandle.css({\n top: rowPosition.top + outerHeight(row) + scrollTopOffset - handleHeight / 2,\n left: rowPosition.left + (scrollLeftOffset - scrollBarWidth),\n position: 'absolute'\n });\n },\n setResizeHandleDimensions: function () {\n var that = this;\n that.resizeHandle.css({\n width: $(that.element).children(TBODY).width(),\n height: that.options.handle[HEIGHT]\n });\n },\n setResizeHandleDragPosition: function (e) {\n var that = this;\n var options = that.options;\n var min = options.min;\n var tableBody = $(that.element).children(TBODY);\n var tableBodyTopOffset = tableBody.position().top;\n var resizeHandle = $(that.resizeHandle);\n var row = $(e.currentTarget).data(options.handle.dataAttribute);\n var rootElement = $(options.rootElement);\n var scrollTopOffset = rootElement.is(BODY) ? 0 : rootElement.scrollTop();\n var handleOffset = constrain({\n value: resizeHandle.position().top + scrollTopOffset + e.y.delta,\n min: $(row).position().top + scrollTopOffset + min,\n max: tableBodyTopOffset + outerHeight(tableBody) + scrollTopOffset - options.handle[HEIGHT] - min\n });\n resizeHandle.css({ top: handleOffset });\n },\n resize: function (e) {\n var that = this;\n var options = that.options;\n var row = $(e.currentTarget).data(options.handle.dataAttribute);\n var currentRowHeight = outerHeight($(row));\n var element = $(that.element);\n var initialTableHeight = outerHeight(element);\n var tableBody = element.children(TBODY);\n var tableBodyHeight = tableBody.height();\n var initialStyleHeight = row.style[HEIGHT];\n var newRowHeight = constrain({\n value: currentRowHeight + e.y.initialDelta,\n min: options.min,\n max: abs(tableBodyHeight - options.min)\n });\n that._setRowsHeightInPixels();\n row.style[HEIGHT] = toPixels(newRowHeight);\n that._setTableHeight(initialTableHeight + (newRowHeight - currentRowHeight));\n if (inPercentages(initialStyleHeight)) {\n that._setRowsHeightInPercentages();\n }\n },\n _setRowsHeightInPixels: function () {\n var that = this;\n var rows = $(that.element).children(TBODY).children(TR);\n var length = rows.length;\n var currentRowsHeights = rows.map(function () {\n return outerHeight($(this));\n });\n var i;\n for (i = 0; i < length; i++) {\n rows[i].style[HEIGHT] = toPixels(currentRowsHeights[i]);\n }\n },\n _setRowsHeightInPercentages: function () {\n var that = this;\n var tableBody = $(that.element).children(TBODY);\n var tableBodyHeight = tableBody.height();\n var rows = tableBody.children(TR);\n var length = rows.length;\n var currentRowsHeights = rows.map(function () {\n return outerHeight($(this));\n });\n var i;\n for (i = 0; i < length; i++) {\n rows[i].style[HEIGHT] = toPercentages(calculatePercentageRatio(currentRowsHeights[i], tableBodyHeight));\n }\n },\n _setTableHeight: function (newHeight) {\n var element = this.element;\n if (inPercentages(element.style[HEIGHT])) {\n element.style[HEIGHT] = toPercentages(calculatePercentageRatio(newHeight, $(element).parent().height()));\n } else {\n element.style[HEIGHT] = toPixels(newHeight);\n }\n }\n });\n RowResizing.create = function (editor) {\n TableElementResizing.create(editor, {\n name: 'rowResizing',\n type: RowResizing,\n eventNamespace: NS\n });\n };\n RowResizing.dispose = function (editor) {\n TableElementResizing.dispose(editor, { eventNamespace: NS });\n };\n extend(Editor, { RowResizing: RowResizing });\n }(window.kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/resizing/table-resize-handle', [\n 'editor/main',\n 'kendo.draganddrop',\n 'editor/resizing/resizing-utils'\n ], f);\n}(function () {\n (function (kendo, undefined) {\n var $ = kendo.jQuery;\n var extend = $.extend;\n var noop = $.noop;\n var proxy = $.proxy;\n var Editor = kendo.ui.editor;\n var Class = kendo.Class;\n var Draggable = kendo.ui.Draggable;\n var Observable = kendo.Observable;\n var getScrollBarWidth = Editor.ResizingUtils.getScrollBarWidth;\n var outerWidth = kendo._outerWidth;\n var outerHeight = kendo._outerHeight;\n var NS = '.kendoEditorTableResizeHandle';\n var RESIZE_HANDLE_CLASS = 'k-table-resize-handle';\n var DRAG_START = 'dragStart';\n var DRAG = 'drag';\n var DRAG_END = 'dragEnd';\n var HALF_INSIDE = 'halfInside';\n var MOUSE_OVER = 'mouseover';\n var MOUSE_OUT = 'mouseout';\n var BODY = 'body';\n var TABLE = 'table';\n var EAST = 'east';\n var NORTH = 'north';\n var NORTHEAST = 'northeast';\n var NORTHWEST = 'northwest';\n var SOUTH = 'south';\n var SOUTHEAST = 'southeast';\n var SOUTHWEST = 'southwest';\n var WEST = 'west';\n var DOT = '.';\n var TableResizeHandle = Observable.extend({\n init: function (options) {\n var that = this;\n Observable.fn.init.call(that);\n that.options = extend({}, that.options, options);\n that.element = $(that.options.template).appendTo(that.options.appendTo)[0];\n that._attachEventHandlers();\n that._addStyles();\n that._initDraggable();\n that._initPositioningStrategy();\n that._initDraggingStrategy();\n $(that.element).data(TABLE, that.options.resizableElement);\n },\n destroy: function () {\n var that = this;\n $(that.element).off(NS).remove();\n that.element = null;\n that._destroyDraggable();\n that.unbind();\n },\n options: {\n appendTo: null,\n direction: SOUTHEAST,\n resizableElement: null,\n rtl: false,\n template: '<div class=\\'k-table-resize-handle-wrapper\\' unselectable=\\'on\\' contenteditable=\\'false\\'>' + '<div class=\\'' + RESIZE_HANDLE_CLASS + '\\'></div>' + '</div>'\n },\n events: [\n DRAG_START,\n DRAG,\n DRAG_END,\n MOUSE_OVER,\n MOUSE_OUT\n ],\n show: function () {\n this._setPosition();\n },\n _setPosition: function () {\n var that = this;\n var position = that._positioningStrategy.getPosition();\n $(that.element).css({\n top: position.top,\n left: position.left,\n position: 'absolute'\n });\n },\n _attachEventHandlers: function () {\n var that = this;\n $(that.element).on(MOUSE_OVER + NS, proxy(that._onMouseOver, that)).on(MOUSE_OUT + NS, proxy(that._onMouseOut, that));\n },\n _onMouseOver: function () {\n this.trigger(MOUSE_OVER);\n },\n _onMouseOut: function () {\n this.trigger(MOUSE_OUT);\n },\n _addStyles: function () {\n var that = this;\n $(that.element).children(DOT + RESIZE_HANDLE_CLASS).addClass('k-resize-' + that.options.direction);\n },\n _initPositioningStrategy: function () {\n var that = this;\n var options = that.options;\n that._positioningStrategy = HandlePositioningStrategy.create({\n name: options.direction,\n handle: that.element,\n resizableElement: options.resizableElement,\n rootElement: options.rootElement,\n rtl: options.rtl\n });\n },\n _initDraggable: function () {\n var that = this;\n var element = that.element;\n if (that._draggable || !element) {\n return;\n }\n that._draggable = new Draggable(element, {\n dragstart: proxy(that._onDragStart, that),\n drag: proxy(that._onDrag, that),\n dragend: proxy(that._onDragEnd, that)\n });\n },\n _onDragStart: function () {\n this.trigger(DRAG_START);\n },\n _onDrag: function (e) {\n var that = this;\n that.trigger(DRAG, that._draggingStrategy.adjustDragDelta({\n deltaX: e.x.delta,\n deltaY: e.y.delta,\n initialDeltaX: e.x.initialDelta,\n initialDeltaY: e.y.initialDelta\n }));\n },\n _onDragEnd: function () {\n this.trigger(DRAG_END);\n },\n _destroyDraggable: function () {\n var that = this;\n if (that._draggable) {\n that._draggable.destroy();\n that._draggable = null;\n }\n },\n _initDraggingStrategy: function () {\n var that = this;\n that._draggingStrategy = HandleDraggingStrategy.create({ name: that.options.direction });\n }\n });\n var StrategyFactory = Class.extend({\n init: function () {\n this._items = [];\n },\n register: function (name, type) {\n this._items.push({\n name: name,\n type: type\n });\n },\n create: function (options) {\n var items = this._items;\n var itemsLength = items.length;\n var name = options.name ? options.name.toLowerCase() : '';\n var match;\n var item;\n var i;\n for (i = 0; i < itemsLength; i++) {\n item = items[i];\n if (item.name.toLowerCase() === name) {\n match = item;\n break;\n }\n }\n if (match) {\n return new match.type(options);\n }\n }\n });\n var PositioningStrategyFactory = StrategyFactory.extend({});\n PositioningStrategyFactory.current = new PositioningStrategyFactory();\n var HandlePositioningStrategy = Class.extend({\n init: function (options) {\n var that = this;\n that.options = extend({}, that.options, options);\n },\n options: {\n handle: null,\n offset: HALF_INSIDE,\n resizableElement: null,\n rootElement: null,\n rtl: false\n },\n getPosition: function () {\n var that = this;\n var position = that.calculatePosition();\n var handleOffsetPosition = that.applyHandleOffset(position);\n var scrollOffsetPosition = that.applyScrollOffset(handleOffsetPosition);\n return scrollOffsetPosition;\n },\n calculatePosition: noop,\n applyHandleOffset: function (position) {\n var options = this.options;\n var handle = $(options.handle);\n if (options.offset === HALF_INSIDE) {\n return {\n top: position.top - outerHeight(handle) / 2,\n left: position.left - outerWidth(handle) / 2\n };\n }\n return position;\n },\n applyScrollOffset: function (position) {\n var options = this.options;\n var rootElement = $(options.rootElement);\n var scrollBarWidth = options.rtl ? getScrollBarWidth(rootElement[0]) : 0;\n if (!rootElement.is(BODY)) {\n return {\n top: position.top + (rootElement.scrollTop() || 0),\n left: position.left + (rootElement.scrollLeft() || 0) - scrollBarWidth\n };\n }\n return position;\n }\n });\n HandlePositioningStrategy.create = function (options) {\n return PositioningStrategyFactory.current.create(options);\n };\n var EastPositioningStrategy = HandlePositioningStrategy.extend({\n calculatePosition: function () {\n var resizableElement = $(this.options.resizableElement);\n var offset = resizableElement.position();\n return {\n top: offset.top + outerHeight(resizableElement) / 2,\n left: offset.left + outerWidth(resizableElement)\n };\n }\n });\n PositioningStrategyFactory.current.register(EAST, EastPositioningStrategy);\n var NorthPositioningStrategy = HandlePositioningStrategy.extend({\n calculatePosition: function () {\n var resizableElement = $(this.options.resizableElement);\n var offset = resizableElement.position();\n return {\n top: offset.top,\n left: offset.left + outerWidth(resizableElement) / 2\n };\n }\n });\n PositioningStrategyFactory.current.register(NORTH, NorthPositioningStrategy);\n var NortheastPositioningStrategy = HandlePositioningStrategy.extend({\n calculatePosition: function () {\n var resizableElement = $(this.options.resizableElement);\n var offset = resizableElement.position();\n return {\n top: offset.top,\n left: offset.left + outerWidth(resizableElement)\n };\n }\n });\n PositioningStrategyFactory.current.register(NORTHEAST, NortheastPositioningStrategy);\n var NorthwestPositioningStrategy = HandlePositioningStrategy.extend({\n calculatePosition: function () {\n var resizableElement = $(this.options.resizableElement);\n var offset = resizableElement.position();\n return {\n top: offset.top,\n left: offset.left\n };\n }\n });\n PositioningStrategyFactory.current.register(NORTHWEST, NorthwestPositioningStrategy);\n var SouthPositioningStrategy = HandlePositioningStrategy.extend({\n calculatePosition: function () {\n var resizableElement = $(this.options.resizableElement);\n var offset = resizableElement.position();\n return {\n top: offset.top + outerHeight(resizableElement),\n left: offset.left + outerWidth(resizableElement) / 2\n };\n }\n });\n PositioningStrategyFactory.current.register(SOUTH, SouthPositioningStrategy);\n var SoutheastPositioningStrategy = HandlePositioningStrategy.extend({\n calculatePosition: function () {\n var resizableElement = $(this.options.resizableElement);\n var offset = resizableElement.position();\n return {\n top: offset.top + outerHeight(resizableElement),\n left: offset.left + outerWidth(resizableElement)\n };\n }\n });\n PositioningStrategyFactory.current.register(SOUTHEAST, SoutheastPositioningStrategy);\n var SouthwestPositioningStrategy = HandlePositioningStrategy.extend({\n calculatePosition: function () {\n var resizableElement = $(this.options.resizableElement);\n var offset = resizableElement.position();\n return {\n top: offset.top + outerHeight(resizableElement),\n left: offset.left\n };\n }\n });\n PositioningStrategyFactory.current.register(SOUTHWEST, SouthwestPositioningStrategy);\n var WestPositioningStrategy = HandlePositioningStrategy.extend({\n calculatePosition: function () {\n var resizableElement = $(this.options.resizableElement);\n var offset = resizableElement.position();\n return {\n top: offset.top + outerHeight(resizableElement) / 2,\n left: offset.left\n };\n }\n });\n PositioningStrategyFactory.current.register(WEST, WestPositioningStrategy);\n var DraggingStrategyFactory = StrategyFactory.extend({});\n DraggingStrategyFactory.current = new DraggingStrategyFactory();\n var HandleDraggingStrategy = Class.extend({\n init: function (options) {\n var that = this;\n that.options = extend({}, that.options, options);\n },\n options: {\n deltaX: {\n adjustment: null,\n modifier: null\n },\n deltaY: {\n adjustment: null,\n modifier: null\n }\n },\n adjustDragDelta: function (deltas) {\n var options = this.options;\n var xAxisAdjustment = options.deltaX.adjustment * options.deltaX.modifier;\n var yAxisAdjustment = options.deltaY.adjustment * options.deltaY.modifier;\n return {\n deltaX: deltas.deltaX * xAxisAdjustment,\n deltaY: deltas.deltaY * yAxisAdjustment,\n initialDeltaX: deltas.initialDeltaX * xAxisAdjustment,\n initialDeltaY: deltas.initialDeltaY * yAxisAdjustment\n };\n }\n });\n HandleDraggingStrategy.create = function (options) {\n return DraggingStrategyFactory.current.create(options);\n };\n var HorizontalDraggingStrategy = HandleDraggingStrategy.extend({\n options: {\n deltaX: {\n adjustment: 1,\n modifier: 1\n },\n deltaY: {\n adjustment: 0,\n modifier: 0\n }\n }\n });\n var EastDraggingStrategy = HorizontalDraggingStrategy.extend({ options: { deltaX: { modifier: 1 } } });\n DraggingStrategyFactory.current.register(EAST, EastDraggingStrategy);\n var WestDraggingStrategy = HorizontalDraggingStrategy.extend({ options: { deltaX: { modifier: -1 } } });\n DraggingStrategyFactory.current.register(WEST, WestDraggingStrategy);\n var VerticalDraggingStrategy = HandleDraggingStrategy.extend({\n options: {\n deltaX: {\n adjustment: 0,\n modifier: 0\n },\n deltaY: {\n adjustment: 1,\n modifier: 1\n }\n }\n });\n var NorthDraggingStrategy = VerticalDraggingStrategy.extend({ options: { deltaY: { modifier: -1 } } });\n DraggingStrategyFactory.current.register(NORTH, NorthDraggingStrategy);\n var SouthDraggingStrategy = VerticalDraggingStrategy.extend({ options: { deltaY: { modifier: 1 } } });\n DraggingStrategyFactory.current.register(SOUTH, SouthDraggingStrategy);\n var HorizontalAndVerticalDraggingStrategy = HandleDraggingStrategy.extend({\n options: {\n deltaX: {\n adjustment: 1,\n modifier: 1\n },\n deltaY: {\n adjustment: 1,\n modifier: 1\n }\n }\n });\n var NorthEastDraggingStrategy = HorizontalAndVerticalDraggingStrategy.extend({\n options: {\n deltaX: { modifier: 1 },\n deltaY: { modifier: -1 }\n }\n });\n DraggingStrategyFactory.current.register(NORTHEAST, NorthEastDraggingStrategy);\n var NorthWestDraggingStrategy = HorizontalAndVerticalDraggingStrategy.extend({\n options: {\n deltaX: { modifier: -1 },\n deltaY: { modifier: -1 }\n }\n });\n DraggingStrategyFactory.current.register(NORTHWEST, NorthWestDraggingStrategy);\n var SouthEastDraggingStrategy = HorizontalAndVerticalDraggingStrategy.extend({\n options: {\n deltaX: { modifier: 1 },\n deltaY: { modifier: 1 }\n }\n });\n DraggingStrategyFactory.current.register(SOUTHEAST, SouthEastDraggingStrategy);\n var SouthWestDraggingStrategy = HorizontalAndVerticalDraggingStrategy.extend({\n options: {\n deltaX: { modifier: -1 },\n deltaY: { modifier: 1 }\n }\n });\n DraggingStrategyFactory.current.register(SOUTHWEST, SouthWestDraggingStrategy);\n extend(Editor, { TableResizeHandle: TableResizeHandle });\n }(window.kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/resizing/table-resizing', [\n 'editor/main',\n 'editor/resizing/table-resize-handle',\n 'editor/resizing/resizing-utils'\n ], f);\n}(function () {\n (function (kendo, undefined) {\n var global = window;\n var math = global.Math;\n var min = math.min;\n var max = math.max;\n var $ = kendo.jQuery;\n var contains = $.contains;\n var extend = $.extend;\n var proxy = $.proxy;\n var browser = kendo.support.browser;\n var Editor = kendo.ui.editor;\n var Class = kendo.Class;\n var TableResizeHandle = Editor.TableResizeHandle;\n var ResizingUtils = Editor.ResizingUtils;\n var calculatePercentageRatio = ResizingUtils.calculatePercentageRatio;\n var constrain = ResizingUtils.constrain;\n var inPercentages = ResizingUtils.inPercentages;\n var inPixels = ResizingUtils.inPixels;\n var toPercentages = ResizingUtils.toPercentages;\n var toPixels = ResizingUtils.toPixels;\n var outerWidth = kendo._outerWidth;\n var outerHeight = kendo._outerHeight;\n var NS = '.kendoEditorTableResizing';\n var RESIZE_HANDLE_WRAPPER_CLASS = 'k-table-resize-handle-wrapper';\n var TABLE_CLASS = 'k-table';\n var TABLE_RESIZING_CLASS = 'k-table-resizing';\n var DRAG_START = 'dragStart';\n var DRAG = 'drag';\n var DRAG_END = 'dragEnd';\n var KEY_DOWN = 'keydown';\n var MOUSE_DOWN = 'mousedown';\n var MOUSE_OVER = 'mouseover';\n var MOUSE_OUT = 'mouseout';\n var COLUMN = 'td';\n var ROW = 'tr';\n var TBODY = 'tbody';\n var TABLE = 'table';\n var WIDTH = 'width';\n var HEIGHT = 'height';\n var EAST = 'east';\n var NORTH = 'north';\n var NORTHEAST = 'northeast';\n var NORTHWEST = 'northwest';\n var SOUTH = 'south';\n var SOUTHEAST = 'southeast';\n var SOUTHWEST = 'southwest';\n var WEST = 'west';\n var DOT = '.';\n function isUndefined(value) {\n return typeof value === 'undefined';\n }\n var TableResizing = Class.extend({\n init: function (element, options) {\n var that = this;\n that.options = extend({}, that.options, options);\n that.handles = [];\n if ($(element).is(TABLE)) {\n that.element = element;\n }\n },\n destroy: function () {\n var that = this;\n $(that.element).off(NS);\n that.element = null;\n $(that.options.rootElement).off(KEY_DOWN + NS);\n that._destroyResizeHandles();\n },\n options: {\n appendHandlesTo: null,\n rtl: false,\n rootElement: null,\n minWidth: 10,\n minHeight: 10,\n handles: [\n { direction: NORTHWEST },\n { direction: NORTH },\n { direction: NORTHEAST },\n { direction: EAST },\n { direction: SOUTHEAST },\n { direction: SOUTH },\n { direction: SOUTHWEST },\n { direction: WEST }\n ]\n },\n resize: function (args) {\n var that = this;\n var deltas = extend({}, {\n deltaX: 0,\n deltaY: 0,\n initialDeltaX: 0,\n initialDeltaY: 0\n }, args);\n that._resizeWidth(deltas.deltaX, deltas.initialDeltaX);\n that._resizeHeight(deltas.deltaY, deltas.initialDeltaY);\n that.showResizeHandles();\n },\n _resizeWidth: function (delta, initialDelta) {\n var that = this;\n var element = $(that.element);\n var styleWidth = element[0].style[WIDTH];\n var currentWidth = outerWidth(element);\n var parentWidth = element.parent().width();\n var maxWidth = that._getMaxDimensionValue(WIDTH);\n var newWidth;\n var ratioValue;\n var ratioTotalValue;\n var constrainedWidth;\n if (delta === 0) {\n return;\n }\n if (isUndefined(that._initialElementWidth)) {\n that._initialElementWidth = currentWidth;\n }\n constrainedWidth = constrain({\n value: that._initialElementWidth + initialDelta,\n min: that.options.minWidth,\n max: maxWidth\n });\n if (inPercentages(styleWidth)) {\n if (currentWidth + delta > parentWidth) {\n ratioValue = max(constrainedWidth, parentWidth);\n ratioTotalValue = min(constrainedWidth, parentWidth);\n } else {\n ratioValue = min(constrainedWidth, parentWidth);\n ratioTotalValue = max(constrainedWidth, parentWidth);\n }\n newWidth = toPercentages(calculatePercentageRatio(ratioValue, ratioTotalValue));\n } else {\n newWidth = toPixels(constrainedWidth);\n }\n that._setColumnsWidth();\n element[0].style[WIDTH] = newWidth;\n },\n _resizeHeight: function (delta, initialDelta) {\n var that = this;\n var element = $(that.element);\n var styleHeight = element[0].style[HEIGHT];\n var currentHeight = outerHeight(element);\n var parent = element.parent();\n var parentHeight = parent.height();\n var maxHeight = that._getMaxDimensionValue(HEIGHT);\n var newHeight;\n var ratioValue;\n var ratioTotalValue;\n var constrainedHeight;\n var minHeight = that.options.minHeight;\n var hasRowsInPixels = that._hasRowsInPixels();\n if (delta === 0) {\n return;\n }\n if (isUndefined(that._initialElementHeight)) {\n that._initialElementHeight = currentHeight;\n }\n constrainedHeight = constrain({\n value: that._initialElementHeight + initialDelta,\n min: minHeight,\n max: maxHeight\n });\n if (hasRowsInPixels && delta < 0) {\n that._setRowsHeightInPercentages();\n }\n if (inPercentages(styleHeight)) {\n if (currentHeight + delta > parentHeight) {\n ratioValue = max(constrainedHeight, parentHeight);\n ratioTotalValue = min(constrainedHeight, parentHeight);\n } else {\n ratioValue = min(constrainedHeight, parentHeight);\n ratioTotalValue = max(constrainedHeight, parentHeight);\n }\n newHeight = toPercentages(calculatePercentageRatio(ratioValue, ratioTotalValue));\n } else {\n newHeight = toPixels(constrainedHeight);\n }\n element[0].style[HEIGHT] = newHeight;\n if (hasRowsInPixels && delta < 0) {\n that._setRowsHeightInPixels();\n }\n },\n _getMaxDimensionValue: function (dimension) {\n var that = this;\n var element = $(that.element);\n var dimensionLowercase = dimension.toLowerCase();\n var rtlModifier = that.options.rtl ? -1 : 1;\n var parent = $(that.element).parent();\n var parentElement = parent[0];\n var parentDimension = parent[dimensionLowercase]();\n var parentScrollOffset = rtlModifier * (dimension === WIDTH ? parent.scrollLeft() : parent.scrollTop());\n if (parentElement === element.closest(COLUMN)[0]) {\n if (parentElement.style[dimensionLowercase] === '' && !inPercentages(that.element.style[dimensionLowercase])) {\n return Infinity;\n } else {\n return parentDimension + parentScrollOffset;\n }\n } else {\n return parentDimension + parentScrollOffset;\n }\n },\n _setColumnsWidth: function () {\n var that = this;\n var element = $(that.element);\n var parentElement = element.parent()[0];\n var parentColumn = element.closest(COLUMN);\n var columns = parentColumn.closest(ROW).children();\n var columnsLength = columns.length;\n var i;\n function isWidthInPercentages(element) {\n var styleWidth = element.style.width;\n if (styleWidth !== '') {\n return inPercentages(styleWidth) ? true : false;\n } else {\n return $(element).hasClass(TABLE_CLASS) ? true : false;\n }\n }\n if (isWidthInPercentages(element[0]) && parentElement === parentColumn[0] && parentElement.style[WIDTH] === '') {\n for (i = 0; i < columnsLength; i++) {\n columns[i].style[WIDTH] = toPixels($(columns[i]).width());\n }\n }\n },\n _hasRowsInPixels: function () {\n var that = this;\n var rows = $(that.element).children(TBODY).children(ROW);\n for (var i = 0; i < rows.length; i++) {\n if (rows[i].style.height === '' || inPixels(rows[i].style.height)) {\n return true;\n }\n }\n return false;\n },\n _setRowsHeightInPercentages: function () {\n var that = this;\n var tableBody = $(that.element).children(TBODY);\n var tableBodyHeight = tableBody.height();\n var rows = tableBody.children(ROW);\n var length = rows.length;\n var currentRowsHeights = rows.map(function () {\n return outerHeight($(this));\n });\n var i;\n for (i = 0; i < length; i++) {\n rows[i].style[HEIGHT] = toPercentages(calculatePercentageRatio(currentRowsHeights[i], tableBodyHeight));\n }\n },\n _setRowsHeightInPixels: function () {\n var that = this;\n var rows = $(that.element).children(TBODY).children(ROW);\n var length = rows.length;\n var currentRowsHeights = rows.map(function () {\n return outerHeight($(this));\n });\n var i;\n for (i = 0; i < length; i++) {\n rows[i].style[HEIGHT] = toPixels(currentRowsHeights[i]);\n }\n },\n showResizeHandles: function () {\n var that = this;\n that._initResizeHandles();\n that._showResizeHandles();\n },\n _initResizeHandles: function () {\n var that = this;\n var handles = that.handles;\n var options = that.options;\n var handleOptions = that.options.handles;\n var length = handleOptions.length;\n var i;\n if (handles && handles.length > 0) {\n return;\n }\n for (i = 0; i < length; i++) {\n that.handles.push(new TableResizeHandle(extend({\n appendTo: options.appendHandlesTo,\n resizableElement: that.element,\n rootElement: options.rootElement,\n rtl: options.rtl\n }, handleOptions[i])));\n }\n that._bindToResizeHandlesEvents();\n },\n _destroyResizeHandles: function () {\n var that = this;\n var length = that.handles ? that.handles.length : 0;\n for (var i = 0; i < length; i++) {\n that.handles[i].destroy();\n }\n },\n _showResizeHandles: function () {\n var that = this;\n var handles = that.handles || [];\n var length = handles.length;\n var i;\n for (i = 0; i < length; i++) {\n that.handles[i].show();\n }\n },\n _bindToResizeHandlesEvents: function () {\n var that = this;\n var handles = that.handles || [];\n var length = handles.length;\n var i;\n var handle;\n for (i = 0; i < length; i++) {\n handle = handles[i];\n handle.bind(DRAG_START, proxy(that._onResizeHandleDragStart, that));\n handle.bind(DRAG, proxy(that._onResizeHandleDrag, that));\n handle.bind(DRAG_END, proxy(that._onResizeHandleDragEnd, that));\n handle.bind(MOUSE_OVER, proxy(that._onResizeHandleMouseOver, that));\n handle.bind(MOUSE_OUT, proxy(that._onResizeHandleMouseOut, that));\n }\n },\n _onResizeHandleDragStart: function () {\n var that = this;\n var element = $(that.element);\n element.addClass(TABLE_RESIZING_CLASS);\n that._initialElementHeight = outerHeight(element);\n that._initialElementWidth = outerWidth(element);\n that._disableKeyboard();\n },\n _onResizeHandleDrag: function (e) {\n this.resize(e);\n },\n _onResizeHandleDragEnd: function () {\n var that = this;\n $(that.element).removeClass(TABLE_RESIZING_CLASS);\n that._enableKeyboard();\n },\n _enableKeyboard: function () {\n $(this.options.rootElement).off(KEY_DOWN + NS);\n },\n _disableKeyboard: function () {\n $(this.options.rootElement).on(KEY_DOWN + NS, function (e) {\n e.preventDefault();\n });\n }\n });\n var TableResizingFactory = Class.extend({\n create: function (editor) {\n var factory = this;\n $(editor.body).on(MOUSE_DOWN + NS, TABLE, function (e) {\n var eventTarget = e.target;\n var eventCurrentTarget = e.currentTarget;\n var tableResizing = editor.tableResizing;\n var element = tableResizing ? tableResizing.element : null;\n if (tableResizing) {\n if (element && eventCurrentTarget !== element) {\n if (contains(eventCurrentTarget, element) && element !== eventTarget && contains(element, eventTarget)) {\n return;\n } else {\n if (element !== eventTarget) {\n editor._destroyTableResizing();\n factory._initResizing(editor, eventCurrentTarget);\n }\n }\n }\n } else {\n factory._initResizing(editor, eventCurrentTarget);\n }\n editor._showTableResizeHandles();\n }).on(MOUSE_DOWN + NS, function (e) {\n var tableResizing = editor.tableResizing;\n var element = tableResizing ? tableResizing.element : null;\n var target = e.target;\n var isResizeHandleOrChild = $(target).hasClass(RESIZE_HANDLE_WRAPPER_CLASS) || $(target).parents(DOT + RESIZE_HANDLE_WRAPPER_CLASS).length > 0;\n if (tableResizing && element !== target && !contains(element, target) && !isResizeHandleOrChild) {\n editor._destroyTableResizing();\n }\n });\n },\n dispose: function (editor) {\n $(editor.body).off(NS);\n },\n _initResizing: function (editor, table) {\n if (!browser.msie && !browser.mozilla) {\n editor.tableResizing = new TableResizing(table, {\n appendHandlesTo: editor.body,\n rtl: kendo.support.isRtl(editor.element),\n rootElement: editor.body\n });\n }\n }\n });\n TableResizingFactory.current = new TableResizingFactory();\n TableResizing.create = function (editor) {\n TableResizingFactory.current.create(editor);\n };\n TableResizing.dispose = function (editor) {\n TableResizingFactory.current.dispose(editor);\n };\n extend(Editor, { TableResizing: TableResizing });\n }(window.kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/immutables', ['editor/tables'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, Class = kendo.Class, Editor = kendo.ui.editor, dom = Editor.Dom, template = kendo.template, RangeUtils = Editor.RangeUtils, complexBlocks = [\n 'ul',\n 'ol',\n 'tbody',\n 'thead',\n 'table'\n ], toolsToBeUpdated = [\n 'bold',\n 'italic',\n 'underline',\n 'strikethrough',\n 'superscript',\n 'subscript',\n 'forecolor',\n 'backcolor',\n 'fontname',\n 'fontsize',\n 'createlink',\n 'unlink',\n 'autolink',\n 'addcolumnleft',\n 'addcolumnright',\n 'addrowabove',\n 'addrowbelow',\n 'deleterow',\n 'deletecolumn',\n 'mergecells',\n 'formatting',\n 'cleanformatting'\n ], IMMUTABALE = 'k-immutable', IMMUTABALE_MARKER_SELECTOR = '[' + IMMUTABALE + ']', IMMUTABLE_SELECTOR = '[contenteditable=\\'false\\']';\n var rootCondition = function (node) {\n return $(node).is('body,.k-editor');\n };\n var immutable = function (node) {\n return node.getAttribute && node.getAttribute('contenteditable') == 'false';\n };\n var immutableParent = function (node) {\n return dom.closestBy(node, immutable, rootCondition);\n };\n var expandImmutablesIn = function (range) {\n var startImmutableParent = immutableParent(range.startContainer);\n var endImmutableParent = immutableParent(range.endContainer);\n if (startImmutableParent || endImmutableParent) {\n if (startImmutableParent) {\n range.setStartBefore(startImmutableParent);\n }\n if (endImmutableParent) {\n range.setEndAfter(endImmutableParent);\n }\n }\n };\n var immutablesContext = function (range) {\n if (immutableParent(range.commonAncestorContainer)) {\n return true;\n } else if (immutableParent(range.startContainer) || immutableParent(range.endContainer)) {\n var editableNodes = RangeUtils.editableTextNodes(range);\n if (editableNodes.length === 0) {\n return true;\n }\n }\n return false;\n };\n var randomId = function (length) {\n var result = '';\n var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n for (var i = length || 10; i > 0; --i) {\n result += chars.charAt(Math.round(Math.random() * (chars.length - 1)));\n }\n return result;\n };\n var removeImmutables = function (root) {\n var serializedImmutables = { empty: true }, nodeName, id, serialized;\n $(root).find(IMMUTABLE_SELECTOR).each(function (i, node) {\n nodeName = dom.name(node);\n id = randomId();\n serialized = '<' + nodeName + ' ' + IMMUTABALE + '=\\'' + id + '\\'></' + nodeName + '>';\n serializedImmutables[id] = {\n node: node,\n style: $(node).attr('style')\n };\n serializedImmutables.empty = false;\n $(node).replaceWith(serialized);\n });\n return serializedImmutables;\n };\n var restoreImmutables = function (root, serializedImmutables) {\n var id, immutable;\n $(root).find(IMMUTABALE_MARKER_SELECTOR).each(function (i, node) {\n id = node.getAttribute(IMMUTABALE);\n immutable = serializedImmutables[id];\n $(node).replaceWith(immutable.node);\n if (immutable.style != $(immutable.node).attr('style')) {\n $(immutable.node).removeAttr('style').attr('style', immutable.style);\n }\n });\n };\n var deletingKey = function (keyCode) {\n var keys = kendo.keys;\n return keyCode === keys.BACKSPACE || keyCode == keys.DELETE;\n };\n var updateToolOptions = function (tool) {\n var options = tool ? tool.options : undefined;\n if (options && options.finder) {\n options.finder._initOptions({ immutables: true });\n }\n };\n var Immutables = Class.extend({\n init: function (editor) {\n this.editor = editor;\n this.serializedImmutables = {};\n this.options = $.extend({}, editor && editor.options && editor.options.immutables);\n var tools = editor.toolbar.tools;\n updateToolOptions(tools.justifyLeft);\n updateToolOptions(tools.justifyCenter);\n updateToolOptions(tools.justifyRight);\n updateToolOptions(tools.justifyFull);\n },\n serialize: function (node) {\n var result = this._toHtml(node), id;\n if (result.indexOf(IMMUTABALE) === -1) {\n id = this.randomId();\n result = result.replace(/>/, ' ' + IMMUTABALE + '=\"' + id + '\">');\n } else {\n id = result.match(/k-immutable\\s*=\\s*['\"](.*)['\"]/)[1];\n }\n this.serializedImmutables[id] = node;\n return result;\n },\n _toHtml: function (node) {\n var serialization = this.options.serialization;\n var serializationType = typeof serialization;\n var nodeName;\n switch (serializationType) {\n case 'string':\n return template(serialization)(node);\n case 'function':\n return serialization(node);\n default:\n nodeName = dom.name(node);\n return '<' + nodeName + '></' + nodeName + '>';\n }\n },\n deserialize: function (node) {\n var that = this;\n var deserialization = this.options.deserialization;\n $(IMMUTABALE_MARKER_SELECTOR, node).each(function () {\n var id = this.getAttribute(IMMUTABALE);\n var immutable = that.serializedImmutables[id];\n if (kendo.isFunction(deserialization)) {\n deserialization(this, immutable);\n }\n $(this).replaceWith(immutable);\n });\n that.serializedImmutables = {};\n },\n randomId: function (length) {\n return randomId(length);\n },\n keydown: function (e, range) {\n var isDeleting = deletingKey(e.keyCode);\n var shouldCancelEvent = isDeleting && this._cancelDeleting(e, range) || !isDeleting && this._cancelTyping(e, range);\n if (shouldCancelEvent) {\n e.preventDefault();\n return true;\n }\n },\n _cancelTyping: function (e, range) {\n var editor = this.editor;\n var keyboard = editor.keyboard;\n return range.collapsed && !keyboard.typingInProgress && keyboard.isTypingKey(e) && immutablesContext(range);\n },\n _cancelDeleting: function (e, range) {\n var keys = kendo.keys;\n var backspace = e.keyCode === keys.BACKSPACE;\n var del = e.keyCode == keys.DELETE;\n if (!backspace && !del) {\n return false;\n }\n var cancelDeleting = false;\n if (range.collapsed) {\n if (immutablesContext(range)) {\n return true;\n }\n var immutable = this.nextImmutable(range, del);\n if (immutable && backspace) {\n var closestSelectionLi = dom.closest(range.commonAncestorContainer, 'li');\n if (closestSelectionLi) {\n var closestImmutableLi = dom.closest(immutable, 'li');\n if (closestImmutableLi && closestImmutableLi !== closestSelectionLi) {\n return cancelDeleting;\n }\n }\n }\n if (immutable && !dom.tableCell(immutable)) {\n if (dom.parentOfType(immutable, complexBlocks) === dom.parentOfType(range.commonAncestorContainer, complexBlocks)) {\n while (immutable && immutable.parentNode.childNodes.length == 1) {\n immutable = immutable.parentNode;\n }\n if (dom.tableCell(immutable)) {\n return cancelDeleting;\n }\n this._removeImmutable(immutable, range);\n }\n cancelDeleting = true;\n }\n }\n return cancelDeleting;\n },\n nextImmutable: function (range, forwards) {\n var commonContainer = range.commonAncestorContainer;\n if (dom.isBom(commonContainer) || (forwards && RangeUtils.isEndOf(range, commonContainer) || !forwards && RangeUtils.isStartOf(range, commonContainer))) {\n var next = this._nextNode(commonContainer, forwards);\n if (next && dom.isBlock(next) && !immutableParent(next)) {\n while (next && next.children && next.children[forwards ? 0 : next.children.length - 1]) {\n next = next.children[forwards ? 0 : next.children.length - 1];\n }\n }\n return immutableParent(next);\n }\n },\n _removeImmutable: function (immutable, range) {\n var editor = this.editor;\n var startRestorePoint = new Editor.RestorePoint(range, editor.body);\n dom.remove(immutable);\n Editor._finishUpdate(editor, startRestorePoint);\n },\n _nextNode: function (node, forwards) {\n var sibling = forwards ? 'nextSibling' : 'previousSibling';\n var current = node, next;\n while (current && !next) {\n next = current[sibling];\n if (next && dom.isDataNode(next) && /^\\s|[\\ufeff]$/.test(next.nodeValue)) {\n current = next;\n next = current[sibling];\n }\n if (!next) {\n current = current.parentNode;\n }\n }\n return next;\n }\n });\n Immutables.immutable = immutable;\n Immutables.immutableParent = immutableParent;\n Immutables.expandImmutablesIn = expandImmutablesIn;\n Immutables.immutablesContext = immutablesContext;\n Immutables.toolsToBeUpdated = toolsToBeUpdated;\n Immutables.removeImmutables = removeImmutables;\n Immutables.restoreImmutables = restoreImmutables;\n Editor.Immutables = Immutables;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/table-wizard/table-wizard-command', ['editor/tables'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, Editor = kendo.ui.editor, EditorUtils = Editor.EditorUtils, RangeUtils = Editor.RangeUtils, dom = Editor.Dom, registerTool = EditorUtils.registerTool, ToolTemplate = Editor.ToolTemplate, Command = Editor.Command;\n var tableFormatFinder = new Editor.BlockFormatFinder([{ tags: ['table'] }]);\n var cellsFormatFinder = new Editor.BlockFormatFinder([{\n tags: [\n 'td',\n 'th'\n ]\n }]);\n var reUnit = /([a-z]+|%)$/i;\n var TableWizardCommand = Command.extend({\n exec: function () {\n var cmd = this;\n var editor = cmd.editor;\n var range = cmd.range = cmd.lockRange();\n var selectedTable = cmd._sourceTable = !cmd.options.insertNewTable ? cmd._selectedTable(range) : undefined;\n var selectedCells = cmd._selectedTableCells = selectedTable ? cmd._selectedCells(range) : undefined;\n var options = {\n visible: false,\n messages: editor.options.messages,\n closeCallback: $.proxy(cmd.onDialogClose, cmd),\n table: cmd.parseTable(selectedTable, selectedCells),\n dialogOptions: editor.options.dialogOptions,\n isRtl: kendo.support.isRtl(editor.wrapper)\n };\n var dialog = new Editor.TableWizardDialog(options);\n dialog.open();\n },\n onDialogClose: function (data) {\n var cmd = this;\n cmd.releaseRange(cmd.range);\n if (data) {\n if (cmd.options.insertNewTable) {\n cmd.insertTable(cmd.createNewTable(data));\n } else {\n cmd.updateTable(data, cmd._sourceTable, cmd._selectedTableCells);\n }\n }\n },\n releaseRange: function (range) {\n var cmd = this;\n var doc = cmd.editor.document;\n dom.windowFromDocument(doc).focus();\n Command.fn.releaseRange.call(cmd, range);\n },\n insertTable: function (table) {\n var range = this.range;\n range.insertNode(table);\n range.collapse(true);\n this.editor.selectRange(range);\n },\n updateTable: function (data, table, selectedCells) {\n var cmd = this;\n var tableRows = $(table.rows).toArray();\n var tableProp = data.tableProperties;\n var rows = tableProp.rows;\n var columns = tableProp.columns;\n var last = function (collection) {\n return collection[collection.length - 1];\n };\n while (selectedCells.length > 1) {\n selectedCells.pop();\n }\n var lastSelectedRow = selectedCells.length ? last(selectedCells).parentNode : last(tableRows);\n var row, parent;\n cmd._deleteTableRows(tableRows, tableRows.length - rows);\n if (tableRows.length < rows) {\n var rowIndex = $(lastSelectedRow).index();\n var cellsLength = lastSelectedRow.cells.length;\n var newRowsCount = rows - tableRows.length;\n parent = lastSelectedRow.parentNode;\n while (newRowsCount) {\n row = parent.insertRow(rowIndex + 1);\n cmd._insertCells(cellsLength - row.cells.length, row);\n newRowsCount--;\n }\n }\n if (tableRows[0].cells.length > columns) {\n $(tableRows).each(function (i, row) {\n while (row.cells.length > columns) {\n row.deleteCell(-1);\n }\n });\n }\n if (tableRows[0].cells.length < columns) {\n var cellIndex = $(last(selectedCells) || last(lastSelectedRow.cells)).index();\n $(tableRows).each(function (i, row) {\n cmd._insertCells(columns - row.cells.length, row, cellIndex + 1);\n });\n }\n cmd._updateTableProperties(table, tableProp);\n var cellProp = data.cellProperties;\n if (selectedCells[0]) {\n dom.attr(selectedCells[0], { id: cellProp.id || null });\n }\n (cellProp.selectAllCells ? $(tableRows).children() : $(selectedCells)).each(function (i, cell) {\n cmd._updateCellProperties(cell, cellProp);\n });\n cmd._updateCaption(table, tableProp);\n tableProp.cellsWithHeaders = tableProp.cellsWithHeaders || false;\n if (cmd.cellsWithHeadersAssociated(table) != tableProp.cellsWithHeaders) {\n cmd.associateCellsWithHeader(table, tableProp.cellsWithHeaders);\n }\n },\n _isHeadingRow: function (row) {\n return dom.is(row.parentNode, 'thead') || dom.is(row.cells[0], 'th');\n },\n associateCellsWithHeader: function (table, associate) {\n var timestamp = new Date().getTime();\n var ids = [];\n var columns = table.rows[0].cells.length;\n var index, nextRow, isDataRow;\n var generateIds = function () {\n for (var i = 0; i < columns; i++) {\n ids[i] = 'table' + ++timestamp;\n }\n };\n var modifySellsIds = function (c, cell) {\n $(cell)[associate ? 'attr' : 'removeAttr']('id', ids[c]);\n };\n var modifyCellsHeadings = function (c, cell) {\n $(cell)[associate ? 'attr' : 'removeAttr']('headers', ids[c]);\n };\n var isHeadingRow = this._isHeadingRow;\n $(table.rows).each(function (r, row) {\n if (isHeadingRow(row)) {\n index = r;\n nextRow = table.rows[++index];\n isDataRow = nextRow && !isHeadingRow(nextRow);\n if (isDataRow) {\n generateIds();\n $(row.cells).each(modifySellsIds);\n }\n while (isDataRow) {\n $(nextRow.cells).each(modifyCellsHeadings);\n nextRow = table.rows[++index];\n isDataRow = nextRow && !isHeadingRow(nextRow);\n }\n }\n });\n },\n cellsWithHeadersAssociated: function (table) {\n var cells = $(table.rows).children();\n var isHeadingRow = this._isHeadingRow;\n var headingIds = [];\n cells.each(function (c, cell) {\n if (cell.id && isHeadingRow(cell.parentNode)) {\n headingIds.push(cell.id);\n }\n });\n var associatedCells = cells.filter(function (c, cell) {\n var headersAttr = cell.getAttribute('headers');\n return headersAttr && !isHeadingRow(cell.parentNode) && $.inArray(headersAttr, headingIds) > -1;\n });\n return !!associatedCells.length;\n },\n _insertCells: function (count, row, index) {\n index = isNaN(index) ? -1 : index;\n for (var i = 0, cell; i < count; i++) {\n cell = row.insertCell(index);\n cell.innerHTML = ' ';\n }\n },\n _deleteTableRows: function (rows, count) {\n for (var i = 0, row, rowParent; i < count; i++) {\n row = rows.pop();\n rowParent = row.parentNode;\n rowParent.removeChild(row);\n if (!rowParent.rows.length) {\n dom.remove(rowParent);\n }\n }\n },\n createNewTable: function (data) {\n var cmd = this;\n var doc = cmd.editor.document;\n var tableProp = data.tableProperties;\n var cellProp = data.cellProperties;\n var cellPropToAll = cellProp.selectAllCells;\n var table = dom.create(doc, 'table');\n cmd._updateTableProperties(table, tableProp);\n cmd._updateCaption(table, tableProp);\n var tbody = table.createTBody();\n for (var r = 0, row; r < tableProp.rows; r++) {\n row = tbody.insertRow();\n for (var c = 0, cell; c < tableProp.columns; c++) {\n cell = row.insertCell();\n cell.innerHTML = ' ';\n if (r === 0 && c === 0 && cellProp.id) {\n cell.id = cellProp.id;\n }\n cmd._updateCellProperties(cell, cellPropToAll || r === 0 && c === 0 ? cellProp : {});\n }\n }\n if (tableProp.cellsWithHeaders) {\n cmd.associateCellsWithHeader(table, tableProp.cellsWithHeaders);\n }\n return table;\n },\n _updateTableProperties: function (table, data) {\n var style = this._getStylesData(data);\n dom.attr(table, {\n cellSpacing: data.cellSpacing || null,\n cellPadding: data.cellPadding || null,\n className: data.className || null,\n id: data.id || null,\n summary: data.summary || null,\n style: style || null\n });\n $(table).addClass('k-table');\n },\n _updateCellProperties: function (cell, data) {\n var style = this._getStylesData(data);\n style.padding = data.cellPadding || null;\n style.margin = data.cellMargin || null;\n dom.attr(cell, {\n style: style || null,\n className: data.className || null\n });\n },\n _updateCaption: function (table, data) {\n if (table.caption && !data.captionContent) {\n table.deleteCaption();\n } else if (data.captionContent) {\n var caption = table.createCaption();\n caption.innerHTML = data.captionContent;\n var alignment = this._getAlignmentData(data.captionAlignment);\n dom.attr(caption, {\n style: {\n textAlign: alignment.textAlign,\n verticalAlign: alignment.verticalAlign\n }\n });\n }\n },\n _getStylesData: function (data) {\n var alignment = this._getAlignmentData(data.alignment);\n var whiteSpace = 'wrapText' in data ? data.wrapText ? '' : 'nowrap' : null;\n return {\n width: data.width ? data.width + data.widthUnit : null,\n height: data.height ? data.height + data.heightUnit : null,\n textAlign: alignment.textAlign,\n verticalAlign: alignment.verticalAlign,\n backgroundColor: data.bgColor || null,\n borderWidth: data.borderWidth,\n borderStyle: data.borderStyle,\n borderColor: data.borderColor,\n borderCollapse: data.collapseBorders ? 'collapse' : null,\n whiteSpace: whiteSpace\n };\n },\n _getAlignmentData: function (alignment) {\n var textAlign = '';\n var verticalAlign = textAlign;\n if (alignment) {\n if (alignment.indexOf(' ') != -1) {\n var align = alignment.split(' ');\n textAlign = align[0];\n verticalAlign = align[1];\n } else {\n textAlign = alignment;\n }\n }\n return {\n textAlign: textAlign,\n verticalAlign: verticalAlign\n };\n },\n parseTable: function (table, selectedCells) {\n if (!table) {\n return {\n tableProperties: {},\n selectedCells: []\n };\n }\n var cmd = this;\n var tStyle = table.style;\n var rows = table.rows;\n var caption = table.caption;\n var captionClone = $(caption ? caption.cloneNode(true) : undefined);\n captionClone.find('.k-marker').remove();\n var cssClass = table.className;\n cssClass = cssClass.replace(/^k-table\\s|\\sk-table$/, '');\n cssClass = cssClass.replace(/\\sk-table\\s/, ' ');\n cssClass = cssClass.replace(/^k-table$/, '');\n var tableAlignment = cmd._getAlignment(table, true);\n var captionAlignment = caption ? cmd._getAlignment(caption) : undefined;\n var cellsWithHeaders = cmd.cellsWithHeadersAssociated(table);\n var tableJson = {\n tableProperties: {\n width: tStyle.width || table.width ? parseFloat(tStyle.width || table.width) : null,\n height: tStyle.height || table.height ? parseFloat(tStyle.height || table.height) : null,\n columns: rows[0] ? rows[0].children.length : 0,\n rows: rows.length,\n widthUnit: cmd._getUnit(tStyle.width),\n heightUnit: cmd._getUnit(tStyle.height),\n cellSpacing: table.cellSpacing,\n cellPadding: table.cellPadding,\n alignment: tableAlignment.textAlign,\n bgColor: tStyle.backgroundColor || table.bgColor,\n className: cssClass,\n id: table.id,\n borderWidth: tStyle.borderWidth || table.border,\n borderColor: tStyle.borderColor,\n borderStyle: tStyle.borderStyle || '',\n collapseBorders: !!tStyle.borderCollapse,\n summary: table.summary,\n captionContent: caption ? captionClone.html() : '',\n captionAlignment: caption && captionAlignment.textAlign ? captionAlignment.textAlign + ' ' + captionAlignment.verticalAlign : '',\n cellsWithHeaders: cellsWithHeaders\n },\n selectedCells: []\n };\n tableJson.rows = cmd.parseTableRows(rows, selectedCells, tableJson);\n return tableJson;\n },\n parseTableRows: function (rows, selectedCells, tableJson) {\n var cmd = this;\n var data = [], row, rowData, cells, cell, cellData;\n for (var i = 0; i < rows.length; i++) {\n row = rows[i];\n rowData = { cells: [] };\n cells = row.cells;\n data.push(rowData);\n for (var j = 0; j < cells.length; j++) {\n cell = cells[j];\n cellData = cmd.parseCell(cell);\n if ($.inArray(cell, selectedCells) != -1) {\n tableJson.selectedCells.push(cellData);\n }\n rowData.cells.push(cellData);\n }\n }\n return data;\n },\n parseCell: function (cell) {\n var cmd = this;\n var cStyle = cell.style;\n var alignment = cmd._getAlignment(cell);\n alignment = alignment.textAlign ? alignment.textAlign + ' ' + alignment.verticalAlign : '';\n var data = {\n width: cStyle.width || cell.width ? parseFloat(cStyle.width || cell.width) : null,\n height: cStyle.height || cell.height ? parseFloat(cStyle.height || cell.height) : null,\n widthUnit: cmd._getUnit(cStyle.width),\n heightUnit: cmd._getUnit(cStyle.height),\n cellMargin: cStyle.margin,\n cellPadding: cStyle.padding,\n alignment: alignment,\n bgColor: cStyle.backgroundColor || cell.bgColor,\n className: cell.className,\n id: cell.id,\n borderWidth: cStyle.borderWidth || cell.border,\n borderColor: cStyle.borderColor,\n borderStyle: cStyle.borderStyle,\n wrapText: cStyle.whiteSpace != 'nowrap'\n };\n return data;\n },\n _getAlignment: function (element, horizontalOnly) {\n var style = element.style;\n var hAlign = style.textAlign || element.align || '';\n if (horizontalOnly) {\n return { textAlign: hAlign };\n }\n var vAlign = style.verticalAlign || element.vAlign || '';\n if (hAlign && vAlign) {\n return {\n textAlign: hAlign,\n verticalAlign: vAlign\n };\n }\n if (!hAlign && vAlign) {\n return {\n textAlign: 'left',\n verticalAlign: vAlign\n };\n }\n if (hAlign && !vAlign) {\n return {\n textAlign: hAlign,\n verticalAlign: 'top'\n };\n }\n return {\n textAlign: '',\n verticalAlign: ''\n };\n },\n _getUnit: function (value) {\n var unit = (value || '').match(reUnit);\n return unit ? unit[0] : 'px';\n },\n _selectedTable: function (range) {\n var nodes = dom.filterBy(RangeUtils.nodes(range), dom.htmlIndentSpace, true);\n return tableFormatFinder.findSuitable(nodes)[0];\n },\n _selectedCells: function (range) {\n var nodes = dom.filterBy(RangeUtils.nodes(range), dom.htmlIndentSpace, true);\n return cellsFormatFinder.findSuitable(nodes);\n }\n });\n var TableWizardTool = Editor.Tool.extend({\n command: function (options) {\n options.insertNewTable = this.options.insertNewTable;\n return new TableWizardCommand(options);\n }\n });\n var TableWizardEditTool = TableWizardTool.extend({\n update: function (ui, nodes) {\n var isFormatted = !tableFormatFinder.isFormatted(nodes);\n ui.toggleClass('k-state-disabled', isFormatted);\n }\n });\n kendo.ui.editor.TableWizardTool = TableWizardTool;\n kendo.ui.editor.TableWizardCommand = TableWizardCommand;\n registerTool('tableWizard', new TableWizardEditTool({\n command: TableWizardCommand,\n insertNewTable: false,\n template: new ToolTemplate({\n template: EditorUtils.buttonTemplate,\n title: 'Table Wizard'\n })\n }));\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('editor/table-wizard/table-wizard-dialog', ['editor/table-wizard/table-wizard-command'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, numericTextBoxSettings = {\n format: '0',\n min: 0\n }, units = [\n 'px',\n 'em'\n ], borderStyles = [\n 'solid',\n 'dotted',\n 'dashed',\n 'double',\n 'groove',\n 'ridge',\n 'inset',\n 'outset',\n 'initial',\n 'inherit',\n 'none',\n 'hidden'\n ];\n var tableAlignmentDropDownSettings = {\n dataSource: [\n {\n className: 'k-icon k-i-table-align-middle-left',\n value: 'left'\n },\n {\n className: 'k-icon k-i-table-align-middle-center',\n value: 'center'\n },\n {\n className: 'k-icon k-i-table-align-middle-right',\n value: 'right'\n },\n {\n className: 'k-icon k-i-align-remove',\n value: ''\n }\n ],\n dataTextField: 'className',\n dataValueField: 'value',\n template: '<span class=\\'#: className #\\' title=\\'#: tooltip #\\'></span>',\n valueTemplate: '<span class=\\'k-align-group #: className #\\' title=\\'#: tooltip #\\'></span>'\n };\n var cellAlignmentDropDownSettings = {\n dataSource: [\n {\n className: 'k-icon k-i-table-align-top-left',\n value: 'left top'\n },\n {\n className: 'k-icon k-i-table-align-top-center',\n value: 'center top'\n },\n {\n className: 'k-icon k-i-table-align-top-right',\n value: 'right top'\n },\n {\n className: 'k-icon k-i-table-align-middle-left',\n value: 'left middle'\n },\n {\n className: 'k-icon k-i-table-align-middle-center',\n value: 'center middle'\n },\n {\n className: 'k-icon k-i-table-align-middle-right',\n value: 'right middle'\n },\n {\n className: 'k-icon k-i-table-align-bottom-left',\n value: 'left bottom'\n },\n {\n className: 'k-icon k-i-table-align-bottom-center',\n value: 'center bottom'\n },\n {\n className: 'k-icon k-i-table-align-bottom-right',\n value: 'right bottom'\n },\n {\n className: 'k-icon k-i-align-remove',\n value: ''\n }\n ],\n dataTextField: 'className',\n dataValueField: 'value',\n template: '<span class=\\'#: className #\\' title=\\'#: tooltip #\\'></span>',\n valueTemplate: '<span class=\\'k-align-group #: className #\\' title=\\'#: tooltip #\\'></span>'\n };\n var accessibilityAlignmentDropDownSettings = {\n dataSource: [\n {\n className: 'k-icon k-i-table-align-top-left',\n value: 'left top'\n },\n {\n className: 'k-icon k-i-table-align-top-center',\n value: 'center top'\n },\n {\n className: 'k-icon k-i-table-align-top-right',\n value: 'right top'\n },\n {\n className: 'k-icon k-i-table-align-bottom-left',\n value: 'left bottom'\n },\n {\n className: 'k-icon k-i-table-align-bottom-center',\n value: 'center bottom'\n },\n {\n className: 'k-icon k-i-table-align-bottom-right',\n value: 'right bottom'\n },\n {\n className: 'k-icon k-i-align-remove',\n value: ''\n }\n ],\n dataTextField: 'className',\n dataValueField: 'value',\n template: '<span class=\\'#: className #\\' title=\\'#: tooltip #\\'></span>',\n valueTemplate: '<span class=\\'k-align-group #: className #\\' title=\\'#: tooltip #\\'></span>'\n };\n var dialogTemplate = '<div class=\"k-editor-dialog k-editor-table-wizard-dialog k-action-window k-edit-form-container k-popup-edit-form\">' + '<div id=\"k-table-wizard-tabs\" class=\"k-root-tabs\">' + '<ul>' + '<li class=\"k-state-active\">#= messages.tableTab #</li>' + '<li>#= messages.cellTab #</li>' + '<li>#= messages.accessibilityTab #</li>' + '</ul>' + '<div id=\"k-table-properties\">' + '<div class=\"k-edit-label\">' + '<label for=\"k-editor-table-width\">#= messages.width #</label>' + '</div>' + '<div class=\"k-edit-field\">' + '<input type=\"numeric\" id=\"k-editor-table-width\" />' + '<input id=\"k-editor-table-width-type\" />' + '</div>' + '<div class=\"k-edit-label\">' + '<label for=\"k-editor-table-height\">#= messages.height #</label>' + '</div>' + '<div class=\"k-edit-field\">' + '<input type=\"numeric\" id=\"k-editor-table-height\" />' + '<input id=\"k-editor-table-height-type\" />' + '</div>' + '<div class=\"k-edit-label\">' + '<label for=\"k-editor-table-columns\">#= messages.columns #</label>' + '</div>' + '<div class=\"k-edit-field\">' + '<input type=\"numeric\" id=\"k-editor-table-columns\" />' + '</div>' + '<div class=\"k-edit-label\">' + '<label for=\"k-editor-table-rows\">#= messages.rows #</label>' + '</div>' + '<div class=\"k-edit-field\">' + '<input type=\"numeric\" id=\"k-editor-table-rows\" />' + '</div>' + '<div class=\"k-edit-label\">' + '<label for=\"k-editor-table-cell-spacing\">#= messages.cellSpacing #</label>' + '</div>' + '<div class=\"k-edit-field\">' + '<input type=\"numeric\" id=\"k-editor-table-cell-spacing\" />' + '</div>' + '<div class=\"k-edit-label\">' + '<label for=\"k-editor-table-cell-padding\">#= messages.cellPadding #</label>' + '</div>' + '<div class=\"k-edit-field\">' + '<input type=\"numeric\" id=\"k-editor-table-cell-padding\" />' + '</div>' + '<div class=\"k-edit-label\">' + '<label for=\"k-editor-table-alignment\">#= messages.alignment #</label>' + '</div>' + '<div class=\"k-edit-field\">' + '<input id=\"k-editor-table-alignment\" class=\"k-align\" />' + '</div>' + '<div class=\"k-edit-label\">' + '<label for=\"k-editor-table-bg\">#= messages.background #</label>' + '</div>' + '<div class=\"k-edit-field\">' + '<input id=\"k-editor-table-bg\" />' + '</div>' + '<div class=\"k-edit-label\">' + '<label for=\"k-editor-css-class\">#= messages.cssClass #</label>' + '</div>' + '<div class=\"k-edit-field\">' + '<input id=\"k-editor-css-class\" class=\"k-input k-textbox\" type=\"text\" />' + '</div>' + '<div class=\"k-edit-label\">' + '<label for=\"k-editor-id\">#= messages.id #</label>' + '</div>' + '<div class=\"k-edit-field\">' + '<input id=\"k-editor-id\" class=\"k-input k-textbox\" type=\"text\" />' + '</div>' + '<div class=\"k-edit-label\">' + '<label for=\"k-editor-border-width\">#= messages.border #</label>' + '</div>' + '<div class=\"k-edit-field\">' + '<input type=\"numeric\" id=\"k-editor-border-width\" />' + '<input id=\"k-editor-border-color\" />' + '</div>' + '<div class=\"k-edit-label\">' + '<label for=\"k-editor-border-style\">#= messages.borderStyle #</label>' + '</div>' + '<div class=\"k-edit-field\">' + '<input id=\"k-editor-border-style\" />' + '</div>' + '<div class=\"k-edit-label\"> </div>' + '<div class=\"k-edit-field\">' + '<input id=\"k-editor-collapse-borders\" type=\"checkbox\" class=\"k-checkbox\" />' + '<label for=\"k-editor-collapse-borders\" class=\"k-checkbox-label\">#= messages.collapseBorders #</label>' + '</div>' + '</div>' + '<div id=\"k-cell-properties\">' + '<div class=\"k-edit-field\">' + '<input id=\"k-editor-selectAllCells\" type=\"checkbox\" class=\"k-checkbox\" />' + '<label for=\"k-editor-selectAllCells\" class=\"k-checkbox-label\">#= messages.selectAllCells #</label>' + '</div>' + '<div class=\"k-edit-label\">' + '<label for=\"k-editor-cell-width\">#= messages.width #</label>' + '</div>' + '<div class=\"k-edit-field\">' + '<input type=\"numeric\" id=\"k-editor-cell-width\" />' + '<input id=\"k-editor-cell-width-type\" />' + '</div>' + '<div class=\"k-edit-label\">' + '<label for=\"k-editor-cell-height\">#= messages.height #</label>' + '</div>' + '<div class=\"k-edit-field\">' + '<input type=\"numeric\" id=\"k-editor-cell-height\" />' + '<input id=\"k-editor-cell-height-type\" />' + '</div>' + '<div class=\"k-edit-label\">' + '<label for=\"k-editor-table-cell-margin\">#= messages.cellMargin #</label>' + '</div>' + '<div class=\"k-edit-field\">' + '<input type=\"numeric\" id=\"k-editor-table-cell-margin\" />' + '</div>' + '<div class=\"k-edit-label\">' + '<label for=\"k-editor-table-cells-padding\">#= messages.cellPadding #</label>' + '</div>' + '<div class=\"k-edit-field\">' + '<input type=\"numeric\" id=\"k-editor-table-cells-padding\" />' + '</div>' + '<div class=\"k-edit-label\">' + '<label for=\"k-editor-cell-alignment\">#= messages.alignment #</label>' + '</div>' + '<div class=\"k-edit-field\">' + '<input id=\"k-editor-cell-alignment\" class=\"k-align\" />' + '</div>' + '<div class=\"k-edit-label\">' + '<label for=\"k-editor-cell-bg\">#= messages.background #</label>' + '</div>' + '<div class=\"k-edit-field\">' + '<input id=\"k-editor-cell-bg\" />' + '</div>' + '<div class=\"k-edit-label\">' + '<label for=\"k-editor-cell-css-class\">#= messages.cssClass #</label>' + '</div>' + '<div class=\"k-edit-field\">' + '<input id=\"k-editor-cell-css-class\" class=\"k-input k-textbox\" type=\"text\" />' + '</div>' + '<div class=\"k-edit-label\">' + '<label for=\"k-editor-cell-id\">#= messages.id #</label>' + '</div>' + '<div class=\"k-edit-field\">' + '<input id=\"k-editor-cell-id\" class=\"k-input k-textbox\" type=\"text\" />' + '</div>' + '<div class=\"k-edit-label\">' + '<label for=\"k-editor-cell-border-width\">#= messages.border #</label>' + '</div>' + '<div class=\"k-edit-field\">' + '<input type=\"numeric\" id=\"k-editor-cell-border-width\" />' + '<input id=\"k-editor-cell-border-color\" />' + '</div>' + '<div class=\"k-edit-label\">' + '<label for=\"k-editor-cell-border-style\">#= messages.borderStyle #</label>' + '</div>' + '<div class=\"k-edit-field\">' + '<input id=\"k-editor-cell-border-style\" />' + '</div>' + '<div class=\"k-edit-label\"> </div>' + '<div class=\"k-edit-field\">' + '<input id=\"k-editor-wrap-text\" type=\"checkbox\" class=\"k-checkbox\" />' + '<label for=\"k-editor-wrap-text\" class=\"k-checkbox-label\">#= messages.wrapText #</label>' + '</div>' + '</div>' + '<div id=\"k-accessibility-properties\">' + '<div class=\"k-edit-label\">' + '<label for=\"k-editor-table-caption\">#= messages.caption #</label>' + '</div>' + '<div class=\"k-edit-field\">' + '<input id=\"k-editor-table-caption\" class=\"k-input k-textbox\" type=\"text\" />' + '</div>' + '<div class=\"k-edit-label\">' + '<label for=\"k-editor-accessibility-alignment\">#= messages.alignment #</label>' + '</div>' + '<div class=\"k-edit-field\">' + '<input id=\"k-editor-accessibility-alignment\" class=\"k-align\" />' + '</div>' + '<div class=\"k-edit-label\">' + '<label for=\"k-editor-accessibility-summary\">#= messages.summary #</label>' + '</div>' + '<div class=\"k-edit-field\">' + '<textarea id=\"k-editor-accessibility-summary\" class=\"k-input k-textbox\"></textarea>' + '</div>' + '<div class=\"k-edit-label\"> </div>' + '<div class=\"k-edit-field\">' + '<input id=\"k-editor-cells-headers\" type=\"checkbox\" class=\"k-checkbox\" />' + '<label for=\"k-editor-cells-headers\" class=\"k-checkbox-label\">#= messages.associateCellsWithHeaders #</label>' + '</div>' + '</div>' + '</div>' + '<div class=\"k-edit-buttons k-state-default\">' + '<button class=\"k-button k-primary k-dialog-ok\">#= messages.dialogOk #</button>' + '<button class=\"k-button k-dialog-close\">#= messages.dialogCancel #</button>' + '</div>' + '</div>';\n var TableWizardDialog = kendo.Class.extend({\n init: function (options) {\n this.options = options;\n },\n open: function () {\n var that = this, options = that.options, dialogOptions = options.dialogOptions, tableData = options.table, dialog, messages = options.messages;\n function close(e) {\n e.preventDefault();\n that.destroy();\n dialog.destroy();\n }\n function okHandler(e) {\n that.collectDialogValues(tableData);\n close(e);\n if (that.change) {\n that.change();\n }\n options.closeCallback(tableData);\n }\n function closeHandler(e) {\n close(e);\n options.closeCallback();\n }\n dialogOptions.close = closeHandler;\n dialogOptions.title = messages.tableWizard;\n dialogOptions.visible = options.visible;\n dialog = $(that._dialogTemplate(messages)).appendTo(document.body).kendoWindow(dialogOptions).closest('.k-window').toggleClass('k-rtl', options.isRtl).end().find('.k-dialog-ok').click(okHandler).end().find('.k-dialog-close').click(closeHandler).end().data('kendoWindow');\n var element = dialog.element;\n that._initTabStripComponent(element);\n that._initTableViewComponents(element, tableData);\n that._initCellViewComponents(element, tableData);\n that._initAccessibilityViewComponents(element, tableData);\n dialog.center();\n dialog.open();\n },\n _initTabStripComponent: function (element) {\n var components = this.components = {};\n components.tabStrip = element.find('#k-table-wizard-tabs').kendoTabStrip({ animation: false }).data('kendoTabStrip');\n },\n collectDialogValues: function () {\n var that = this;\n var data = that.options.table;\n that._collectTableViewValues(data);\n that._collectCellViewValues(data);\n that._collectAccessibilityViewValues(data);\n },\n _collectTableViewValues: function (tableData) {\n var tableView = this.components.tableView;\n var tableProperties = tableData.tableProperties;\n tableProperties.width = tableView.width.value();\n tableProperties.widthUnit = tableView.widthUnit.value();\n tableProperties.height = tableView.height.value();\n tableProperties.columns = tableView.columns.value();\n tableProperties.rows = tableView.rows.value();\n tableProperties.heightUnit = tableView.heightUnit.value();\n tableProperties.cellSpacing = tableView.cellSpacing.value();\n tableProperties.cellPadding = tableView.cellPadding.value();\n tableProperties.alignment = tableView.alignment.value();\n tableProperties.bgColor = tableView.bgColor.value();\n tableProperties.className = tableView.className.value;\n tableProperties.id = tableView.id.value;\n tableProperties.borderWidth = tableView.borderWidth.value();\n tableProperties.borderColor = tableView.borderColor.value();\n tableProperties.borderStyle = tableView.borderStyle.value();\n tableProperties.collapseBorders = tableView.collapseBorders.checked;\n },\n _collectCellViewValues: function (table) {\n var cellData = table.cellProperties = {};\n var cellView = this.components.cellView;\n cellData.selectAllCells = cellView.selectAllCells.checked;\n cellData.width = cellView.width.value();\n cellData.widthUnit = cellView.widthUnit.value();\n cellData.height = cellView.height.value();\n cellData.heightUnit = cellView.heightUnit.value();\n cellData.cellMargin = cellView.cellMargin.value();\n cellData.cellPadding = cellView.cellPadding.value();\n cellData.alignment = cellView.alignment.value();\n cellData.bgColor = cellView.bgColor.value();\n cellData.className = cellView.className.value;\n cellData.id = cellView.id.value;\n cellData.borderWidth = cellView.borderWidth.value();\n cellData.borderColor = cellView.borderColor.value();\n cellData.borderStyle = cellView.borderStyle.value();\n cellData.wrapText = cellView.wrapText.checked;\n },\n _collectAccessibilityViewValues: function (table) {\n var tableProperties = table.tableProperties;\n var accessibilityView = this.components.accessibilityView;\n tableProperties.captionContent = accessibilityView.captionContent.value;\n tableProperties.captionAlignment = accessibilityView.captionAlignment.value();\n tableProperties.summary = accessibilityView.summary.value;\n tableProperties.cellsWithHeaders = accessibilityView.cellsWithHeaders.checked;\n },\n _addUnit: function (units, value) {\n if (value && $.inArray(value, units) == -1) {\n units.push(value);\n }\n },\n _initTableViewComponents: function (element, table) {\n var components = this.components;\n var tableView = components.tableView = {};\n var tableProperties = table.tableProperties = table.tableProperties || {};\n tableProperties.borderStyle = tableProperties.borderStyle || '';\n this._addUnit(units, tableProperties.widthUnit);\n this._addUnit(units, tableProperties.heightUnit);\n this._initNumericTextbox(element.find('#k-editor-table-width'), 'width', tableProperties, tableView);\n this._initNumericTextbox(element.find('#k-editor-table-height'), 'height', tableProperties, tableView);\n this._initNumericTextbox(element.find('#k-editor-table-columns'), 'columns', tableProperties, tableView, {\n min: 1,\n value: 4\n });\n this._initNumericTextbox(element.find('#k-editor-table-rows'), 'rows', tableProperties, tableView, {\n min: 1,\n value: 4\n });\n this._initDropDownList(element.find('#k-editor-table-width-type'), 'widthUnit', tableProperties, tableView, units);\n this._initDropDownList(element.find('#k-editor-table-height-type'), 'heightUnit', tableProperties, tableView, units);\n this._initNumericTextbox(element.find('#k-editor-table-cell-spacing'), 'cellSpacing', tableProperties, tableView);\n this._initNumericTextbox(element.find('#k-editor-table-cell-padding'), 'cellPadding', tableProperties, tableView);\n this._initTableAlignmentDropDown(element.find('#k-editor-table-alignment'), tableProperties);\n this._initColorPicker(element.find('#k-editor-table-bg'), 'bgColor', tableProperties, tableView);\n this._initInput(element.find('#k-editor-css-class'), 'className', tableProperties, tableView);\n this._initInput(element.find('#k-editor-id'), 'id', tableProperties, tableView);\n this._initNumericTextbox(element.find('#k-editor-border-width'), 'borderWidth', tableProperties, tableView);\n this._initColorPicker(element.find('#k-editor-border-color'), 'borderColor', tableProperties, tableView);\n this._initDropDownList(element.find('#k-editor-border-style'), 'borderStyle', tableProperties, tableView, borderStyles);\n this._initCheckbox(element.find('#k-editor-collapse-borders'), 'collapseBorders', tableProperties, tableView);\n },\n _initCellViewComponents: function (element, table) {\n var components = this.components;\n var cellView = components.cellView = {};\n table.selectedCells = table.selectedCells = table.selectedCells || [];\n var cellProperties = table.selectedCells[0] || {\n borderStyle: '',\n wrapText: true\n };\n this._addUnit(units, cellProperties.widthUnit);\n this._addUnit(units, cellProperties.heightUnit);\n this._initCheckbox(element.find('#k-editor-selectAllCells'), 'selectAllCells', table.tableProperties, cellView);\n this._initNumericTextbox(element.find('#k-editor-cell-width'), 'width', cellProperties, cellView);\n this._initNumericTextbox(element.find('#k-editor-cell-height'), 'height', cellProperties, cellView);\n this._initDropDownList(element.find('#k-editor-cell-width-type'), 'widthUnit', cellProperties, cellView, units);\n this._initDropDownList(element.find('#k-editor-cell-height-type'), 'heightUnit', cellProperties, cellView, units);\n this._initNumericTextbox(element.find('#k-editor-table-cell-margin'), 'cellMargin', cellProperties, cellView);\n this._initNumericTextbox(element.find('#k-editor-table-cells-padding'), 'cellPadding', cellProperties, cellView);\n this._initCellAlignmentDropDown(element.find('#k-editor-cell-alignment'), cellProperties);\n this._initColorPicker(element.find('#k-editor-cell-bg'), 'bgColor', cellProperties, cellView);\n this._initInput(element.find('#k-editor-cell-css-class'), 'className', cellProperties, cellView);\n this._initInput(element.find('#k-editor-cell-id'), 'id', cellProperties, cellView);\n this._initNumericTextbox(element.find('#k-editor-cell-border-width'), 'borderWidth', cellProperties, cellView);\n this._initColorPicker(element.find('#k-editor-cell-border-color'), 'borderColor', cellProperties, cellView);\n this._initDropDownList(element.find('#k-editor-cell-border-style'), 'borderStyle', cellProperties, cellView, borderStyles);\n this._initCheckbox(element.find('#k-editor-wrap-text'), 'wrapText', cellProperties, cellView);\n },\n _initAccessibilityViewComponents: function (element, table) {\n var components = this.components;\n var accessibilityView = components.accessibilityView = {};\n var tableProperties = table.tableProperties;\n this._initInput(element.find('#k-editor-table-caption'), 'captionContent', tableProperties, accessibilityView);\n this._initAccessibilityAlignmentDropDown(element.find('#k-editor-accessibility-alignment'), tableProperties);\n this._initInput(element.find('#k-editor-accessibility-summary'), 'summary', tableProperties, accessibilityView);\n this._initCheckbox(element.find('#k-editor-cells-headers'), 'cellsWithHeaders', tableProperties, accessibilityView);\n },\n _initNumericTextbox: function (element, property, data, storage, settings) {\n var component = storage[property] = element.kendoNumericTextBox(settings ? $.extend({}, numericTextBoxSettings, settings) : numericTextBoxSettings).data('kendoNumericTextBox');\n if (property in data) {\n component.value(parseInt(data[property], 10));\n }\n },\n _initDropDownList: function (element, property, data, storage, dataSource) {\n var component = storage[property] = element.kendoDropDownList({ dataSource: dataSource }).data('kendoDropDownList');\n this._setComponentValue(component, data, property);\n },\n _initTableAlignmentDropDown: function (element, data) {\n var messages = this.options.messages;\n var tableView = this.components.tableView;\n var dataSource = tableAlignmentDropDownSettings.dataSource;\n dataSource[0].tooltip = messages.alignLeft;\n dataSource[1].tooltip = messages.alignCenter;\n dataSource[2].tooltip = messages.alignRight;\n dataSource[3].tooltip = messages.alignRemove;\n this._initAlignmentDropDown(element, tableAlignmentDropDownSettings, 'alignment', data, tableView);\n },\n _initCellAlignmentDropDown: function (element, data) {\n var messages = this.options.messages;\n var cellView = this.components.cellView;\n var dataSource = cellAlignmentDropDownSettings.dataSource;\n dataSource[0].tooltip = messages.alignLeftTop;\n dataSource[1].tooltip = messages.alignCenterTop;\n dataSource[2].tooltip = messages.alignRightTop;\n dataSource[3].tooltip = messages.alignLeftMiddle;\n dataSource[4].tooltip = messages.alignCenterMiddle;\n dataSource[5].tooltip = messages.alignRightMiddle;\n dataSource[6].tooltip = messages.alignLeftBottom;\n dataSource[7].tooltip = messages.alignCenterBottom;\n dataSource[8].tooltip = messages.alignRightBottom;\n dataSource[9].tooltip = messages.alignRemove;\n this._initAlignmentDropDown(element, cellAlignmentDropDownSettings, 'alignment', data, cellView);\n },\n _initAccessibilityAlignmentDropDown: function (element, data) {\n var messages = this.options.messages;\n var accessibilityView = this.components.accessibilityView;\n var dataSource = accessibilityAlignmentDropDownSettings.dataSource;\n dataSource[0].tooltip = messages.alignLeftTop;\n dataSource[1].tooltip = messages.alignCenterTop;\n dataSource[2].tooltip = messages.alignRightTop;\n dataSource[3].tooltip = messages.alignLeftBottom;\n dataSource[4].tooltip = messages.alignCenterBottom;\n dataSource[5].tooltip = messages.alignRightBottom;\n dataSource[6].tooltip = messages.alignRemove;\n this._initAlignmentDropDown(element, accessibilityAlignmentDropDownSettings, 'captionAlignment', data, accessibilityView);\n },\n _initAlignmentDropDown: function (element, settings, name, data, storage) {\n var component = storage[name] = element.kendoDropDownList(settings).data('kendoDropDownList');\n component.list.addClass('k-align').css('width', '110px');\n this._setComponentValue(component, data, name);\n },\n _setComponentValue: function (component, data, property) {\n if (property in data) {\n component.value(data[property]);\n }\n },\n _initColorPicker: function (element, property, data, storage) {\n var component = storage[property] = element.kendoColorPicker({\n buttons: false,\n clearButton: true\n }).data('kendoColorPicker');\n if (data[property]) {\n component.value(data[property]);\n }\n },\n _initInput: function (element, property, data, storage) {\n var component = storage[property] = element.get(0);\n if (property in data) {\n component.value = data[property];\n }\n },\n _initCheckbox: function (element, property, data, storage) {\n var component = storage[property] = element.get(0);\n if (property in data) {\n component.checked = data[property];\n }\n },\n destroy: function () {\n this._destroyComponents(this.components.tableView);\n this._destroyComponents(this.components.cellView);\n this._destroyComponents(this.components.accessibilityView);\n this._destroyComponents(this.components);\n delete this.components;\n },\n _destroyComponents: function (components) {\n for (var widget in components) {\n if (components[widget].destroy) {\n components[widget].destroy();\n }\n delete components[widget];\n }\n },\n _dialogTemplate: function (messages) {\n return kendo.template(dialogTemplate)({ messages: messages });\n }\n });\n kendo.ui.editor.TableWizardDialog = TableWizardDialog;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.editor', [\n 'kendo.combobox',\n 'kendo.dropdownlist',\n 'kendo.resizable',\n 'kendo.window',\n 'kendo.colorpicker',\n 'kendo.imagebrowser',\n 'kendo.tabstrip',\n 'kendo.numerictextbox',\n 'util/undoredostack',\n 'editor/main',\n 'editor/dom',\n 'editor/serializer',\n 'editor/range',\n 'editor/system',\n 'editor/inlineformat',\n 'editor/formatblock',\n 'editor/linebreak',\n 'editor/lists',\n 'editor/link',\n 'editor/file',\n 'editor/image',\n 'editor/components',\n 'editor/indent',\n 'editor/viewhtml',\n 'editor/formatting',\n 'editor/toolbar',\n 'editor/tables',\n 'editor/export',\n 'editor/import',\n 'editor/resizing/column-resizing',\n 'editor/resizing/row-resizing',\n 'editor/resizing/table-resizing',\n 'editor/resizing/table-resize-handle',\n 'editor/immutables',\n 'editor/table-wizard/table-wizard-command',\n 'editor/table-wizard/table-wizard-dialog'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'editor',\n name: 'Editor',\n category: 'web',\n description: 'Rich text editor component',\n depends: [\n 'combobox',\n 'dropdownlist',\n 'window',\n 'colorpicker'\n ],\n features: [\n {\n id: 'editor-imagebrowser',\n name: 'Image Browser',\n description: 'Support for uploading and inserting images',\n depends: ['imagebrowser']\n },\n {\n id: 'editor-resizable',\n name: 'Resize handle',\n description: 'Support for resizing the content area via a resize handle',\n depends: ['resizable']\n },\n {\n id: 'editor-tablewizard',\n name: 'Table wizard dialog',\n description: 'Support for table properties configuration',\n depends: [\n 'tabstrip',\n 'button',\n 'numerictextbox'\n ]\n },\n {\n id: 'editor-pdf-export',\n name: 'PDF export',\n description: 'Export Editor content as PDF',\n depends: [\n 'pdf',\n 'drawing'\n ]\n }\n ]\n };\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.maskedtextbox', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'maskedtextbox',\n name: 'MaskedTextBox',\n category: 'web',\n description: 'The MaskedTextBox widget allows to specify a mask type on an input field.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo;\n var caret = kendo.caret;\n var keys = kendo.keys;\n var ui = kendo.ui;\n var Widget = ui.Widget;\n var ns = '.kendoMaskedTextBox';\n var proxy = $.proxy;\n var INPUT_EVENT_NAME = (kendo.support.propertyChangeEvent ? 'propertychange' : 'input') + ns;\n var STATEDISABLED = 'k-state-disabled';\n var DISABLED = 'disabled';\n var READONLY = 'readonly';\n var CHANGE = 'change';\n var MaskedTextBox = Widget.extend({\n init: function (element, options) {\n var that = this;\n var DOMElement;\n Widget.fn.init.call(that, element, options);\n that._rules = $.extend({}, that.rules, that.options.rules);\n element = that.element;\n DOMElement = element[0];\n that.wrapper = element;\n that._tokenize();\n that._form();\n that.element.addClass('k-textbox').attr('autocomplete', 'off').on('focus' + ns, function () {\n var value = DOMElement.value;\n if (!value) {\n DOMElement.value = that._old = that._emptyMask;\n } else {\n that._togglePrompt(true);\n }\n that._oldValue = value;\n that._timeoutId = setTimeout(function () {\n caret(element, 0, value ? that._maskLength : 0);\n });\n }).on('focusout' + ns, function () {\n var value = element.val();\n clearTimeout(that._timeoutId);\n DOMElement.value = that._old = '';\n if (value !== that._emptyMask) {\n DOMElement.value = that._old = value;\n }\n that._change();\n that._togglePrompt();\n });\n var disabled = element.is('[disabled]') || $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n } else {\n that.readonly(element.is('[readonly]'));\n }\n that.value(that.options.value || element.val());\n kendo.notify(that);\n },\n options: {\n name: 'MaskedTextBox',\n clearPromptChar: false,\n unmaskOnPost: false,\n promptChar: '_',\n culture: '',\n rules: {},\n value: '',\n mask: ''\n },\n events: [CHANGE],\n rules: {\n '0': /\\d/,\n '9': /\\d|\\s/,\n '#': /\\d|\\s|\\+|\\-/,\n 'L': /[a-zA-Z]/,\n '?': /[a-zA-Z]|\\s/,\n '&': /\\S/,\n 'C': /./,\n 'A': /[a-zA-Z0-9]/,\n 'a': /[a-zA-Z0-9]|\\s/\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n that._rules = $.extend({}, that.rules, that.options.rules);\n that._tokenize();\n this._unbindInput();\n this._bindInput();\n that.value(that.element.val());\n },\n destroy: function () {\n var that = this;\n that.element.off(ns);\n if (that._formElement) {\n that._formElement.off('reset', that._resetHandler);\n that._formElement.off('submit', that._submitHandler);\n }\n Widget.fn.destroy.call(that);\n },\n raw: function () {\n var unmasked = this._unmask(this.element.val(), 0);\n return unmasked.replace(new RegExp(this.options.promptChar, 'g'), '');\n },\n value: function (value) {\n var element = this.element;\n var emptyMask = this._emptyMask;\n if (value === undefined) {\n return this.element.val();\n }\n if (value === null) {\n value = '';\n }\n if (!emptyMask) {\n element.val(value);\n return;\n }\n value = this._unmask(value + '');\n element.val(value ? emptyMask : '');\n this._mask(0, this._maskLength, value);\n value = element.val();\n this._oldValue = value;\n if (kendo._activeElement() !== element) {\n if (value === emptyMask) {\n element.val('');\n } else {\n this._togglePrompt();\n }\n }\n },\n _togglePrompt: function (show) {\n var DOMElement = this.element[0];\n var value = DOMElement.value;\n if (this.options.clearPromptChar) {\n if (!show) {\n value = value.replace(new RegExp(this.options.promptChar, 'g'), ' ');\n } else {\n value = this._oldValue;\n }\n DOMElement.value = this._old = value;\n }\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n _bindInput: function () {\n var that = this;\n if (that._maskLength) {\n that.element.on('keydown' + ns, proxy(that._keydown, that)).on('keypress' + ns, proxy(that._keypress, that)).on('paste' + ns, proxy(that._paste, that)).on(INPUT_EVENT_NAME, proxy(that._propertyChange, that));\n }\n },\n _unbindInput: function () {\n this.element.off('keydown' + ns).off('keypress' + ns).off('paste' + ns).off(INPUT_EVENT_NAME);\n },\n _editable: function (options) {\n var that = this;\n var element = that.element;\n var disable = options.disable;\n var readonly = options.readonly;\n that._unbindInput();\n if (!readonly && !disable) {\n element.removeAttr(DISABLED).removeAttr(READONLY).removeClass(STATEDISABLED);\n that._bindInput();\n } else {\n element.attr(DISABLED, disable).attr(READONLY, readonly).toggleClass(STATEDISABLED, disable);\n }\n },\n _change: function () {\n var that = this;\n var value = that.value();\n if (value !== that._oldValue) {\n that._oldValue = value;\n that.trigger(CHANGE);\n that.element.trigger(CHANGE);\n }\n },\n _propertyChange: function () {\n var that = this;\n var element = that.element[0];\n var value = element.value;\n var unmasked;\n var start;\n if (kendo._activeElement() !== element) {\n return;\n }\n if (value !== that._old && !that._pasting) {\n start = caret(element)[0];\n unmasked = that._unmask(value.substring(start), start);\n element.value = that._old = value.substring(0, start) + that._emptyMask.substring(start);\n that._mask(start, start, unmasked);\n caret(element, start);\n }\n },\n _paste: function (e) {\n var that = this;\n var element = e.target;\n var position = caret(element);\n var start = position[0];\n var end = position[1];\n var unmasked = that._unmask(element.value.substring(end), end);\n that._pasting = true;\n setTimeout(function () {\n var value = element.value;\n var pasted = value.substring(start, caret(element)[0]);\n element.value = that._old = value.substring(0, start) + that._emptyMask.substring(start);\n that._mask(start, start, pasted);\n start = caret(element)[0];\n that._mask(start, start, unmasked);\n caret(element, start);\n that._pasting = false;\n });\n },\n _form: function () {\n var that = this;\n var element = that.element;\n var formId = element.attr('form');\n var form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(element[0].value);\n });\n };\n that._submitHandler = function () {\n that.element[0].value = that._old = that.raw();\n };\n if (that.options.unmaskOnPost) {\n form.on('submit', that._submitHandler);\n }\n that._formElement = form.on('reset', that._resetHandler);\n }\n },\n _keydown: function (e) {\n var key = e.keyCode;\n var element = this.element[0];\n var selection = caret(element);\n var start = selection[0];\n var end = selection[1];\n var placeholder;\n var backward = key === keys.BACKSPACE;\n if (backward || key === keys.DELETE) {\n if (start === end) {\n if (backward) {\n start -= 1;\n } else {\n end += 1;\n }\n placeholder = this._find(start, backward);\n }\n if (placeholder !== undefined && placeholder !== start) {\n if (backward) {\n placeholder += 1;\n }\n caret(element, placeholder);\n } else if (start > -1) {\n this._mask(start, end, '', backward);\n }\n e.preventDefault();\n } else if (key === keys.ENTER) {\n this._change();\n }\n },\n _keypress: function (e) {\n if (e.which === 0 || e.metaKey || e.ctrlKey || e.keyCode === keys.ENTER) {\n return;\n }\n var character = String.fromCharCode(e.which);\n var selection = caret(this.element);\n this._mask(selection[0], selection[1], character);\n if (e.keyCode === keys.BACKSPACE || character) {\n e.preventDefault();\n }\n },\n _find: function (idx, backward) {\n var value = this.element.val() || this._emptyMask;\n var step = 1;\n if (backward === true) {\n step = -1;\n }\n while (idx > -1 || idx <= this._maskLength) {\n if (value.charAt(idx) !== this.tokens[idx]) {\n return idx;\n }\n idx += step;\n }\n return -1;\n },\n _mask: function (start, end, value, backward) {\n var element = this.element[0];\n var current = element.value || this._emptyMask;\n var empty = this.options.promptChar;\n var valueLength;\n var chrIdx = 0;\n var unmasked;\n var chr;\n var idx;\n start = this._find(start, backward);\n if (start > end) {\n end = start;\n }\n unmasked = this._unmask(current.substring(end), end);\n value = this._unmask(value, start);\n valueLength = value.length;\n if (value) {\n unmasked = unmasked.replace(new RegExp('^_{0,' + valueLength + '}'), '');\n }\n value += unmasked;\n current = current.split('');\n chr = value.charAt(chrIdx);\n while (start < this._maskLength) {\n current[start] = chr || empty;\n chr = value.charAt(++chrIdx);\n if (idx === undefined && chrIdx > valueLength) {\n idx = start;\n }\n start = this._find(start + 1);\n }\n element.value = this._old = current.join('');\n if (kendo._activeElement() === element) {\n if (idx === undefined) {\n idx = this._maskLength;\n }\n caret(element, idx);\n }\n },\n _unmask: function (value, idx) {\n if (!value) {\n return '';\n }\n value = (value + '').split('');\n var chr;\n var token;\n var chrIdx = 0;\n var tokenIdx = idx || 0;\n var empty = this.options.promptChar;\n var valueLength = value.length;\n var tokensLength = this.tokens.length;\n var result = '';\n while (tokenIdx < tokensLength) {\n chr = value[chrIdx];\n token = this.tokens[tokenIdx];\n if (chr === token || chr === empty) {\n result += chr === empty ? empty : '';\n chrIdx += 1;\n tokenIdx += 1;\n } else if (typeof token !== 'string') {\n if (token.test && token.test(chr) || $.isFunction(token) && token(chr)) {\n result += chr;\n tokenIdx += 1;\n }\n chrIdx += 1;\n } else {\n tokenIdx += 1;\n }\n if (chrIdx >= valueLength) {\n break;\n }\n }\n return result;\n },\n _tokenize: function () {\n var tokens = [];\n var tokenIdx = 0;\n var mask = this.options.mask || '';\n var maskChars = mask.split('');\n var length = maskChars.length;\n var idx = 0;\n var chr;\n var rule;\n var emptyMask = '';\n var promptChar = this.options.promptChar;\n var numberFormat = kendo.getCulture(this.options.culture).numberFormat;\n var rules = this._rules;\n for (; idx < length; idx++) {\n chr = maskChars[idx];\n rule = rules[chr];\n if (rule) {\n tokens[tokenIdx] = rule;\n emptyMask += promptChar;\n tokenIdx += 1;\n } else {\n if (chr === '.' || chr === ',') {\n chr = numberFormat[chr];\n } else if (chr === '$') {\n chr = numberFormat.currency.symbol;\n } else if (chr === '\\\\') {\n idx += 1;\n chr = maskChars[idx];\n }\n chr = chr.split('');\n for (var i = 0, l = chr.length; i < l; i++) {\n tokens[tokenIdx] = chr[i];\n emptyMask += chr[i];\n tokenIdx += 1;\n }\n }\n }\n this.tokens = tokens;\n this._emptyMask = emptyMask;\n this._maskLength = emptyMask.length;\n }\n });\n ui.plugin(MaskedTextBox);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.toolbar', [\n 'kendo.core',\n 'kendo.userevents',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'toolbar',\n name: 'ToolBar',\n category: 'web',\n description: 'The ToolBar widget displays one or more command buttons divided into groups.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Class = kendo.Class, Widget = kendo.ui.Widget, proxy = $.proxy, isFunction = kendo.isFunction, keys = kendo.keys, outerWidth = kendo._outerWidth, TOOLBAR = 'k-toolbar', BUTTON = 'k-button', OVERFLOW_BUTTON = 'k-overflow-button', TOGGLE_BUTTON = 'k-toggle-button', BUTTON_GROUP = 'k-button-group', SPLIT_BUTTON = 'k-split-button', SEPARATOR = 'k-separator', POPUP = 'k-popup', RESIZABLE_TOOLBAR = 'k-toolbar-resizable', STATE_ACTIVE = 'k-state-active', STATE_DISABLED = 'k-state-disabled', STATE_HIDDEN = 'k-state-hidden', GROUP_START = 'k-group-start', GROUP_END = 'k-group-end', PRIMARY = 'k-primary', ICON = 'k-icon', ICON_PREFIX = 'k-i-', BUTTON_ICON = 'k-button-icon', BUTTON_ICON_TEXT = 'k-button-icontext', LIST_CONTAINER = 'k-list-container k-split-container', SPLIT_BUTTON_ARROW = 'k-split-button-arrow', OVERFLOW_ANCHOR = 'k-overflow-anchor', OVERFLOW_CONTAINER = 'k-overflow-container', FIRST_TOOLBAR_VISIBLE = 'k-toolbar-first-visible', LAST_TOOLBAR_VISIBLE = 'k-toolbar-last-visible', CLICK = 'click', TOGGLE = 'toggle', OPEN = 'open', CLOSE = 'close', OVERFLOW_OPEN = 'overflowOpen', OVERFLOW_CLOSE = 'overflowClose', OVERFLOW_NEVER = 'never', OVERFLOW_AUTO = 'auto', OVERFLOW_ALWAYS = 'always', OVERFLOW_HIDDEN = 'k-overflow-hidden', KENDO_UID_ATTR = kendo.attr('uid');\n kendo.toolbar = {};\n var components = {\n overflowAnchor: '<div tabindex=\"0\" class=\"k-overflow-anchor\"></div>',\n overflowContainer: '<ul class=\"k-overflow-container k-list-container\"></ul>'\n };\n kendo.toolbar.registerComponent = function (name, toolbar, overflow) {\n components[name] = {\n toolbar: toolbar,\n overflow: overflow\n };\n };\n var Item = kendo.Class.extend({\n addOverflowAttr: function () {\n this.element.attr(kendo.attr('overflow'), this.options.overflow || OVERFLOW_AUTO);\n },\n addUidAttr: function () {\n this.element.attr(KENDO_UID_ATTR, this.options.uid);\n },\n addIdAttr: function () {\n if (this.options.id) {\n this.element.attr('id', this.options.id);\n }\n },\n addOverflowIdAttr: function () {\n if (this.options.id) {\n this.element.attr('id', this.options.id + '_overflow');\n }\n },\n attributes: function () {\n if (this.options.attributes) {\n this.element.attr(this.options.attributes);\n }\n },\n show: function () {\n this.element.removeClass(STATE_HIDDEN).show();\n this.options.hidden = false;\n },\n hide: function () {\n this.element.addClass(STATE_HIDDEN).hide();\n this.options.hidden = true;\n },\n remove: function () {\n this.element.remove();\n },\n enable: function (isEnabled) {\n if (isEnabled === undefined) {\n isEnabled = true;\n }\n this.element.toggleClass(STATE_DISABLED, !isEnabled);\n this.options.enable = isEnabled;\n },\n twin: function () {\n var uid = this.element.attr(KENDO_UID_ATTR);\n if (this.overflow) {\n return this.toolbar.element.find('[' + KENDO_UID_ATTR + '=\\'' + uid + '\\']').data(this.options.type);\n } else if (this.toolbar.options.resizable) {\n return this.toolbar.popup.element.find('[' + KENDO_UID_ATTR + '=\\'' + uid + '\\']').data(this.options.type);\n }\n }\n });\n kendo.toolbar.Item = Item;\n var Button = Item.extend({\n init: function (options, toolbar) {\n var element = options.useButtonTag ? $('<button tabindex=\"0\"></button>') : $('<a href tabindex=\"0\"></a>');\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n this.attributes();\n if (options.primary) {\n element.addClass(PRIMARY);\n }\n if (options.togglable) {\n element.addClass(TOGGLE_BUTTON);\n this.toggle(options.selected);\n }\n if (options.url !== undefined && !options.useButtonTag) {\n element.attr('href', options.url);\n if (options.mobile) {\n element.attr(kendo.attr('role'), 'button');\n }\n }\n if (options.group) {\n element.attr(kendo.attr('group'), options.group);\n this.group = this.toolbar.addToGroup(this, options.group);\n }\n if (!options.togglable && options.click && isFunction(options.click)) {\n this.clickHandler = options.click;\n }\n if (options.togglable && options.toggle && isFunction(options.toggle)) {\n this.toggleHandler = options.toggle;\n }\n },\n toggle: function (state, propagate) {\n state = !!state;\n if (this.group && state) {\n this.group.select(this);\n } else if (!this.group) {\n this.select(state);\n }\n if (propagate && this.twin()) {\n this.twin().toggle(state);\n }\n },\n getParentGroup: function () {\n if (this.options.isChild) {\n return this.element.closest('.' + BUTTON_GROUP).data('buttonGroup');\n }\n },\n _addGraphics: function () {\n var element = this.element, icon = this.options.icon, spriteCssClass = this.options.spriteCssClass, imageUrl = this.options.imageUrl, isEmpty, span, img;\n if (spriteCssClass || imageUrl || icon) {\n isEmpty = true;\n element.contents().filter(function () {\n return !$(this).hasClass('k-sprite') && !$(this).hasClass(ICON) && !$(this).hasClass('k-image');\n }).each(function (idx, el) {\n if (el.nodeType == 1 || el.nodeType == 3 && $.trim(el.nodeValue).length > 0) {\n isEmpty = false;\n }\n });\n if (isEmpty) {\n element.addClass(BUTTON_ICON);\n } else {\n element.addClass(BUTTON_ICON_TEXT);\n }\n }\n if (icon) {\n span = element.children('span.' + ICON).first();\n if (!span[0]) {\n span = $('<span class=\"' + ICON + '\"></span>').prependTo(element);\n }\n span.addClass(ICON_PREFIX + icon);\n } else if (spriteCssClass) {\n span = element.children('span.k-sprite').first();\n if (!span[0]) {\n span = $('<span class=\"k-sprite ' + ICON + '\"></span>').prependTo(element);\n }\n span.addClass(spriteCssClass);\n } else if (imageUrl) {\n img = element.children('img.k-image').first();\n if (!img[0]) {\n img = $('<img alt=\"icon\" class=\"k-image\" />').prependTo(element);\n }\n img.attr('src', imageUrl);\n }\n }\n });\n kendo.toolbar.Button = Button;\n var ToolBarButton = Button.extend({\n init: function (options, toolbar) {\n Button.fn.init.call(this, options, toolbar);\n var element = this.element;\n element.addClass(BUTTON);\n this.addIdAttr();\n if (options.align) {\n element.addClass('k-align-' + options.align);\n }\n if (options.showText != 'overflow' && options.text) {\n if (options.mobile) {\n element.html('<span class=\"km-text\">' + options.text + '</span>');\n } else {\n element.html(options.text);\n }\n }\n options.hasIcon = options.showIcon != 'overflow' && (options.icon || options.spriteCssClass || options.imageUrl);\n if (options.hasIcon) {\n this._addGraphics();\n }\n this.addUidAttr();\n this.addOverflowAttr();\n this.enable(options.enable);\n if (options.hidden) {\n this.hide();\n }\n this.element.data({\n type: 'button',\n button: this\n });\n },\n select: function (selected) {\n if (selected === undefined) {\n selected = false;\n }\n this.element.toggleClass(STATE_ACTIVE, selected);\n this.options.selected = selected;\n }\n });\n kendo.toolbar.ToolBarButton = ToolBarButton;\n var OverflowButton = Button.extend({\n init: function (options, toolbar) {\n this.overflow = true;\n Button.fn.init.call(this, options, toolbar);\n var element = this.element;\n if (options.showText != 'toolbar' && options.text) {\n if (options.mobile) {\n element.html('<span class=\"km-text\">' + options.text + '</span>');\n } else {\n element.html('<span class=\"k-text\">' + options.text + '</span>');\n }\n }\n options.hasIcon = options.showIcon != 'toolbar' && (options.icon || options.spriteCssClass || options.imageUrl);\n if (options.hasIcon) {\n this._addGraphics();\n }\n if (!options.isChild) {\n this._wrap();\n }\n this.addOverflowIdAttr();\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.enable(options.enable);\n element.addClass(OVERFLOW_BUTTON + ' ' + BUTTON);\n if (options.hidden) {\n this.hide();\n }\n this.element.data({\n type: 'button',\n button: this\n });\n },\n _wrap: function () {\n this.element = this.element.wrap('<li></li>').parent();\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n },\n select: function (selected) {\n if (selected === undefined) {\n selected = false;\n }\n if (this.options.isChild) {\n this.element.toggleClass(STATE_ACTIVE, selected);\n } else {\n this.element.find('.k-button').toggleClass(STATE_ACTIVE, selected);\n }\n this.options.selected = selected;\n }\n });\n kendo.toolbar.OverflowButton = OverflowButton;\n kendo.toolbar.registerComponent('button', ToolBarButton, OverflowButton);\n var ButtonGroup = Item.extend({\n createButtons: function (buttonConstructor) {\n var options = this.options;\n var items = options.buttons || [];\n var item;\n for (var i = 0; i < items.length; i++) {\n if (!items[i].uid) {\n items[i].uid = kendo.guid();\n }\n item = new buttonConstructor($.extend({\n mobile: options.mobile,\n isChild: true,\n type: 'button'\n }, items[i]), this.toolbar);\n item.element.appendTo(this.element);\n }\n },\n refresh: function () {\n this.element.children().filter(':not(\\'.' + STATE_HIDDEN + '\\'):first').addClass(GROUP_START);\n this.element.children().filter(':not(\\'.' + STATE_HIDDEN + '\\'):last').addClass(GROUP_END);\n }\n });\n kendo.toolbar.ButtonGroup = ButtonGroup;\n var ToolBarButtonGroup = ButtonGroup.extend({\n init: function (options, toolbar) {\n var element = this.element = $('<div></div>');\n this.options = options;\n this.toolbar = toolbar;\n this.addIdAttr();\n if (options.align) {\n element.addClass('k-align-' + options.align);\n }\n this.createButtons(ToolBarButton);\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.refresh();\n element.addClass(BUTTON_GROUP);\n this.element.data({\n type: 'buttonGroup',\n buttonGroup: this\n });\n }\n });\n kendo.toolbar.ToolBarButtonGroup = ToolBarButtonGroup;\n var OverflowButtonGroup = ButtonGroup.extend({\n init: function (options, toolbar) {\n var element = this.element = $('<li></li>');\n this.options = options;\n this.toolbar = toolbar;\n this.overflow = true;\n this.addOverflowIdAttr();\n this.createButtons(OverflowButton);\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.refresh();\n element.addClass((options.mobile ? '' : BUTTON_GROUP) + ' k-overflow-group');\n this.element.data({\n type: 'buttonGroup',\n buttonGroup: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.OverflowButtonGroup = OverflowButtonGroup;\n kendo.toolbar.registerComponent('buttonGroup', ToolBarButtonGroup, OverflowButtonGroup);\n var ToolBarSplitButton = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('<div class=\"' + SPLIT_BUTTON + '\" tabindex=\"0\"></div>');\n this.options = options;\n this.toolbar = toolbar;\n this.mainButton = new ToolBarButton($.extend({}, options, { hidden: false }), toolbar);\n this.arrowButton = $('<a class=\"' + BUTTON + ' ' + SPLIT_BUTTON_ARROW + '\"><span class=\"' + (options.mobile ? 'km-icon km-arrowdown' : 'k-icon k-i-arrow-60-down') + '\"></span></a>');\n this.popupElement = $('<ul class=\"' + LIST_CONTAINER + '\"></ul>');\n this.mainButton.element.removeAttr('href tabindex').appendTo(element);\n this.arrowButton.appendTo(element);\n this.popupElement.appendTo(element);\n if (options.align) {\n element.addClass('k-align-' + options.align);\n }\n if (!options.id) {\n options.id = options.uid;\n }\n element.attr('id', options.id + '_wrapper');\n this.addOverflowAttr();\n this.addUidAttr();\n this.createMenuButtons();\n this.createPopup();\n this._navigatable();\n this.mainButton.main = true;\n this.enable(options.enable);\n if (options.hidden) {\n this.hide();\n }\n element.data({\n type: 'splitButton',\n splitButton: this,\n kendoPopup: this.popup\n });\n },\n _navigatable: function () {\n var that = this;\n that.popupElement.on('keydown', '.' + BUTTON, function (e) {\n var li = $(e.target).parent();\n e.preventDefault();\n if (e.keyCode === keys.ESC || e.keyCode === keys.TAB || e.altKey && e.keyCode === keys.UP) {\n that.toggle();\n that.focus();\n } else if (e.keyCode === keys.DOWN) {\n findFocusableSibling(li, 'next').focus();\n } else if (e.keyCode === keys.UP) {\n findFocusableSibling(li, 'prev').focus();\n } else if (e.keyCode === keys.SPACEBAR || e.keyCode === keys.ENTER) {\n that.toolbar.userEvents.trigger('tap', { target: $(e.target) });\n }\n });\n },\n createMenuButtons: function () {\n var options = this.options;\n var items = options.menuButtons;\n var item;\n for (var i = 0; i < items.length; i++) {\n item = new ToolBarButton($.extend({\n mobile: options.mobile,\n type: 'button',\n click: options.click\n }, items[i]), this.toolbar);\n item.element.wrap('<li></li>').parent().appendTo(this.popupElement);\n }\n },\n createPopup: function () {\n var options = this.options;\n var element = this.element;\n this.popupElement.attr('id', options.id + '_optionlist').attr(KENDO_UID_ATTR, options.rootUid);\n if (options.mobile) {\n this.popupElement = actionSheetWrap(this.popupElement);\n }\n this.popup = this.popupElement.kendoPopup({\n appendTo: options.mobile ? $(options.mobile).children('.km-pane') : null,\n anchor: element,\n isRtl: this.toolbar._isRtl,\n copyAnchorStyles: false,\n animation: options.animation,\n open: adjustPopupWidth,\n activate: function () {\n this.element.find(':kendoFocusable').first().focus();\n },\n close: function () {\n element.focus();\n }\n }).data('kendoPopup');\n this.popup.element.on(CLICK, 'a.k-button', preventClick);\n },\n remove: function () {\n this.popup.element.off(CLICK, 'a.k-button');\n this.popup.destroy();\n this.element.remove();\n },\n toggle: function () {\n this.popup.toggle();\n },\n enable: function (isEnabled) {\n if (isEnabled === undefined) {\n isEnabled = true;\n }\n this.mainButton.enable(isEnabled);\n this.options.enable = isEnabled;\n },\n focus: function () {\n this.element.focus();\n },\n hide: function () {\n if (this.popup) {\n this.popup.close();\n }\n this.element.addClass(STATE_HIDDEN).hide();\n this.options.hidden = true;\n },\n show: function () {\n this.element.removeClass(STATE_HIDDEN).hide();\n this.options.hidden = false;\n }\n });\n kendo.toolbar.ToolBarSplitButton = ToolBarSplitButton;\n var OverflowSplitButton = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('<li class=\"' + SPLIT_BUTTON + '\"></li>'), items = options.menuButtons, item;\n this.options = options;\n this.toolbar = toolbar;\n this.overflow = true;\n this.mainButton = new OverflowButton($.extend({ isChild: true }, options));\n this.mainButton.element.appendTo(element);\n for (var i = 0; i < items.length; i++) {\n item = new OverflowButton($.extend({\n mobile: options.mobile,\n isChild: true\n }, items[i]), this.toolbar);\n item.element.appendTo(element);\n }\n this.addUidAttr();\n this.addOverflowAttr();\n this.mainButton.main = true;\n element.data({\n type: 'splitButton',\n splitButton: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.OverflowSplitButton = OverflowSplitButton;\n kendo.toolbar.registerComponent('splitButton', ToolBarSplitButton, OverflowSplitButton);\n var ToolBarSeparator = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('<div> </div>');\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n this.attributes();\n this.addIdAttr();\n this.addUidAttr();\n this.addOverflowAttr();\n element.addClass(SEPARATOR);\n element.data({\n type: 'separator',\n separator: this\n });\n }\n });\n var OverflowSeparator = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('<li> </li>');\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n this.overflow = true;\n this.attributes();\n this.addUidAttr();\n this.addOverflowIdAttr();\n element.addClass(SEPARATOR);\n element.data({\n type: 'separator',\n separator: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.registerComponent('separator', ToolBarSeparator, OverflowSeparator);\n var TemplateItem = Item.extend({\n init: function (template, options, toolbar) {\n var element = isFunction(template) ? template(options) : template;\n if (!(element instanceof jQuery)) {\n element = $('<div></div>').html(element);\n } else {\n element = element.wrap('<div></div>').parent();\n }\n this.element = element;\n this.options = options;\n this.options.type = 'template';\n this.toolbar = toolbar;\n this.attributes();\n this.addUidAttr();\n this.addIdAttr();\n this.addOverflowAttr();\n element.data({\n type: 'template',\n template: this\n });\n }\n });\n kendo.toolbar.TemplateItem = TemplateItem;\n var OverflowTemplateItem = Item.extend({\n init: function (template, options, toolbar) {\n var element = isFunction(template) ? $(template(options)) : $(template);\n if (!(element instanceof jQuery)) {\n element = $('<li></li>').html(element);\n } else {\n element = element.wrap('<li></li>').parent();\n }\n this.element = element;\n this.options = options;\n this.options.type = 'template';\n this.toolbar = toolbar;\n this.overflow = true;\n this.attributes();\n this.addUidAttr();\n this.addOverflowIdAttr();\n this.addOverflowAttr();\n element.data({\n type: 'template',\n template: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.OverflowTemplateItem = OverflowTemplateItem;\n function adjustPopupWidth() {\n var anchor = this.options.anchor, computedWidth = outerWidth(anchor), width;\n kendo.wrap(this.element).addClass('k-split-wrapper');\n if (this.element.css('box-sizing') !== 'border-box') {\n width = computedWidth - (outerWidth(this.element) - this.element.width());\n } else {\n width = computedWidth;\n }\n this.element.css({\n fontFamily: anchor.css('font-family'),\n 'min-width': width\n });\n }\n function toggleActive(e) {\n if (!e.target.is('.k-toggle-button')) {\n e.target.toggleClass(STATE_ACTIVE, e.type == 'press');\n }\n }\n function actionSheetWrap(element) {\n element = $(element);\n return element.hasClass('km-actionsheet') ? element.closest('.km-popup-wrapper') : element.addClass('km-widget km-actionsheet').wrap('<div class=\"km-actionsheet-wrapper km-actionsheet-tablet km-widget km-popup\"></div>').parent().wrap('<div class=\"km-popup-wrapper k-popup\"></div>').parent();\n }\n function preventClick(e) {\n e.preventDefault();\n }\n function findFocusableSibling(element, dir) {\n var getSibling = dir === 'next' ? $.fn.next : $.fn.prev;\n var getter = dir === 'next' ? $.fn.first : $.fn.last;\n var candidate = getSibling.call(element);\n if (candidate.is(':kendoFocusable') || !candidate.length) {\n return candidate;\n }\n if (candidate.find(':kendoFocusable').length) {\n return getter.call(candidate.find(':kendoFocusable'));\n }\n return findFocusableSibling(candidate, dir);\n }\n var Group = Class.extend({\n init: function (name) {\n this.name = name;\n this.buttons = [];\n },\n add: function (button) {\n this.buttons[this.buttons.length] = button;\n },\n remove: function (button) {\n var index = $.inArray(button, this.buttons);\n this.buttons.splice(index, 1);\n },\n select: function (button) {\n var tmp;\n for (var i = 0; i < this.buttons.length; i++) {\n tmp = this.buttons[i];\n tmp.select(false);\n }\n button.select(true);\n if (button.twin()) {\n button.twin().select(true);\n }\n }\n });\n var ToolBar = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.wrapper = that.element;\n element.addClass(TOOLBAR + ' k-widget');\n this.uid = kendo.guid();\n this._isRtl = kendo.support.isRtl(element);\n this._groups = {};\n element.attr(KENDO_UID_ATTR, this.uid);\n that.isMobile = typeof options.mobile === 'boolean' ? options.mobile : that.element.closest('.km-root')[0];\n that.animation = that.isMobile ? { open: { effects: 'fade' } } : {};\n if (that.isMobile) {\n element.addClass('km-widget');\n ICON = 'km-icon';\n ICON_PREFIX = 'km-';\n BUTTON = 'km-button';\n BUTTON_GROUP = 'km-buttongroup km-widget';\n STATE_ACTIVE = 'km-state-active';\n STATE_DISABLED = 'km-state-disabled';\n }\n if (options.resizable) {\n that._renderOverflow();\n element.addClass(RESIZABLE_TOOLBAR);\n that.overflowUserEvents = new kendo.UserEvents(that.element, {\n threshold: 5,\n allowSelection: true,\n filter: '.' + OVERFLOW_ANCHOR,\n tap: proxy(that._toggleOverflow, that)\n });\n that._resizeHandler = kendo.onResize(function () {\n that.resize();\n });\n } else {\n that.popup = { element: $([]) };\n }\n if (options.items && options.items.length) {\n for (var i = 0; i < options.items.length; i++) {\n that.add(options.items[i]);\n }\n }\n that.userEvents = new kendo.UserEvents(document, {\n threshold: 5,\n allowSelection: true,\n filter: '[' + KENDO_UID_ATTR + '=' + this.uid + '] a.' + BUTTON + ', ' + '[' + KENDO_UID_ATTR + '=' + this.uid + '] .' + OVERFLOW_BUTTON,\n tap: proxy(that._buttonClick, that),\n press: toggleActive,\n release: toggleActive\n });\n that.element.on(CLICK, 'a.k-button', preventClick);\n that._navigatable();\n if (options.resizable) {\n that.popup.element.on(CLICK, +'a.k-button', preventClick);\n }\n if (options.resizable) {\n this._toggleOverflowAnchor();\n }\n kendo.notify(that);\n },\n events: [\n CLICK,\n TOGGLE,\n OPEN,\n CLOSE,\n OVERFLOW_OPEN,\n OVERFLOW_CLOSE\n ],\n options: {\n name: 'ToolBar',\n items: [],\n resizable: true,\n mobile: null\n },\n addToGroup: function (button, groupName) {\n var group;\n if (!this._groups[groupName]) {\n group = this._groups[groupName] = new Group();\n } else {\n group = this._groups[groupName];\n }\n group.add(button);\n return group;\n },\n destroy: function () {\n var that = this;\n that.element.find('.' + SPLIT_BUTTON).each(function (idx, element) {\n $(element).data('kendoPopup').destroy();\n });\n that.element.off(CLICK, 'a.k-button');\n that.userEvents.destroy();\n if (that.options.resizable) {\n kendo.unbindResize(that._resizeHandler);\n that.overflowUserEvents.destroy();\n that.popup.element.off(CLICK, 'a.k-button');\n that.popup.destroy();\n }\n Widget.fn.destroy.call(that);\n },\n add: function (options) {\n var component = components[options.type], template = options.template, tool, that = this, itemClasses = that.isMobile ? '' : 'k-item k-state-default', overflowTemplate = options.overflowTemplate, overflowTool;\n $.extend(options, {\n uid: kendo.guid(),\n animation: that.animation,\n mobile: that.isMobile,\n rootUid: that.uid\n });\n if (options.menuButtons) {\n for (var i = 0; i < options.menuButtons.length; i++) {\n $.extend(options.menuButtons[i], { uid: kendo.guid() });\n }\n }\n if (template && !overflowTemplate) {\n options.overflow = OVERFLOW_NEVER;\n } else if (!options.overflow) {\n options.overflow = OVERFLOW_AUTO;\n }\n if (options.overflow !== OVERFLOW_NEVER && that.options.resizable) {\n if (overflowTemplate) {\n overflowTool = new OverflowTemplateItem(overflowTemplate, options, that);\n } else if (component) {\n overflowTool = new component.overflow(options, that);\n overflowTool.element.addClass(itemClasses);\n }\n if (overflowTool) {\n if (options.overflow === OVERFLOW_AUTO) {\n overflowTool.overflowHidden();\n }\n overflowTool.element.appendTo(that.popup.container);\n that.angular('compile', function () {\n return { elements: overflowTool.element.get() };\n });\n }\n }\n if (options.overflow !== OVERFLOW_ALWAYS) {\n if (template) {\n tool = new TemplateItem(template, options, that);\n } else if (component) {\n tool = new component.toolbar(options, that);\n }\n if (tool) {\n if (that.options.resizable) {\n tool.element.appendTo(that.element).css('visibility', 'hidden');\n that._shrink(that.element.innerWidth());\n tool.element.css('visibility', 'visible');\n } else {\n tool.element.appendTo(that.element);\n }\n that.angular('compile', function () {\n return { elements: tool.element.get() };\n });\n }\n }\n },\n _getItem: function (candidate) {\n var element, toolbarItem, overflowItem, isResizable = this.options.resizable, type;\n element = this.element.find(candidate);\n if (!element.length) {\n element = $('.k-split-container[data-uid=' + this.uid + ']').find(candidate);\n }\n type = element.length ? element.data('type') : '';\n toolbarItem = element.data(type);\n if (toolbarItem) {\n if (toolbarItem.main) {\n element = element.parent('.' + SPLIT_BUTTON);\n type = 'splitButton';\n toolbarItem = element.data(type);\n }\n if (isResizable) {\n overflowItem = toolbarItem.twin();\n }\n } else if (isResizable) {\n element = this.popup.element.find(candidate);\n type = element.length ? element.data('type') : '';\n overflowItem = element.data(type);\n if (overflowItem && overflowItem.main) {\n element = element.parent('.' + SPLIT_BUTTON);\n type = 'splitButton';\n overflowItem = element.data(type);\n }\n }\n return {\n type: type,\n toolbar: toolbarItem,\n overflow: overflowItem\n };\n },\n remove: function (candidate) {\n var item = this._getItem(candidate);\n if (item.toolbar) {\n item.toolbar.remove();\n }\n if (item.overflow) {\n item.overflow.remove();\n }\n this.resize(true);\n },\n hide: function (candidate) {\n var item = this._getItem(candidate);\n if (item.toolbar) {\n if (item.toolbar.options.type === 'button' && item.toolbar.options.isChild) {\n item.toolbar.hide();\n item.toolbar.getParentGroup().refresh();\n } else if (!item.toolbar.options.hidden) {\n item.toolbar.hide();\n }\n }\n if (item.overflow) {\n if (item.overflow.options.type === 'button' && item.overflow.options.isChild) {\n item.overflow.hide();\n item.overflow.getParentGroup().refresh();\n } else if (!item.overflow.options.hidden) {\n item.overflow.hide();\n }\n }\n this.resize(true);\n },\n show: function (candidate) {\n var item = this._getItem(candidate);\n if (item.toolbar) {\n if (item.toolbar.options.type === 'button' && item.toolbar.options.isChild) {\n item.toolbar.show();\n item.toolbar.getParentGroup().refresh();\n } else if (item.toolbar.options.hidden) {\n item.toolbar.show();\n }\n }\n if (item.overflow) {\n if (item.overflow.options.type === 'button' && item.overflow.options.isChild) {\n item.toolbar.show();\n item.overflow.getParentGroup().refresh();\n } else if (item.overflow.options.hidden) {\n item.overflow.show();\n }\n }\n this.resize(true);\n },\n enable: function (element, enable) {\n var item = this._getItem(element);\n if (typeof enable == 'undefined') {\n enable = true;\n }\n if (item.toolbar) {\n item.toolbar.enable(enable);\n }\n if (item.overflow) {\n item.overflow.enable(enable);\n }\n },\n getSelectedFromGroup: function (groupName) {\n return this.element.find('.' + TOGGLE_BUTTON + '[data-group=\\'' + groupName + '\\']').filter('.' + STATE_ACTIVE);\n },\n toggle: function (button, checked) {\n var element = $(button), item = element.data('button');\n if (item.options.togglable) {\n if (checked === undefined) {\n checked = true;\n }\n item.toggle(checked, true);\n }\n },\n _renderOverflow: function () {\n var that = this, overflowContainer = components.overflowContainer, isRtl = that._isRtl, horizontalDirection = isRtl ? 'left' : 'right';\n that.overflowAnchor = $(components.overflowAnchor).addClass(BUTTON);\n that.element.append(that.overflowAnchor);\n if (that.isMobile) {\n that.overflowAnchor.append('<span class=\"km-icon km-more\"></span>');\n overflowContainer = actionSheetWrap(overflowContainer);\n } else {\n that.overflowAnchor.append('<span class=\"k-icon k-i-arrow-60-down\"></span>');\n }\n that.popup = new kendo.ui.Popup(overflowContainer, {\n origin: 'bottom ' + horizontalDirection,\n position: 'top ' + horizontalDirection,\n anchor: that.overflowAnchor,\n isRtl: isRtl,\n animation: that.animation,\n appendTo: that.isMobile ? $(that.isMobile).children('.km-pane') : null,\n copyAnchorStyles: false,\n open: function (e) {\n var wrapper = kendo.wrap(that.popup.element).addClass('k-overflow-wrapper');\n if (!that.isMobile) {\n wrapper.css('margin-left', (isRtl ? -1 : 1) * ((outerWidth(wrapper) - wrapper.width()) / 2 + 1));\n } else {\n that.popup.container.css('max-height', parseFloat($('.km-content:visible').innerHeight()) - 15 + 'px');\n }\n if (that.trigger(OVERFLOW_OPEN)) {\n e.preventDefault();\n }\n },\n activate: function () {\n this.element.find(':kendoFocusable').first().focus();\n },\n close: function (e) {\n if (that.trigger(OVERFLOW_CLOSE)) {\n e.preventDefault();\n }\n this.element.focus();\n }\n });\n that.popup.element.on('keydown', '.' + BUTTON, function (e) {\n var target = $(e.target), li = target.parent(), isComplexTool = li.is('.' + BUTTON_GROUP) || li.is('.' + SPLIT_BUTTON), element;\n e.preventDefault();\n if (e.keyCode === keys.ESC || e.keyCode === keys.TAB || e.altKey && e.keyCode === keys.UP) {\n that._toggleOverflow();\n that.overflowAnchor.focus();\n } else if (e.keyCode === keys.DOWN) {\n element = !isComplexTool || isComplexTool && target.is(':last-child') ? li : target;\n findFocusableSibling(element, 'next').focus();\n } else if (e.keyCode === keys.UP) {\n element = !isComplexTool || isComplexTool && target.is(':first-child') ? li : target;\n findFocusableSibling(element, 'prev').focus();\n } else if (e.keyCode === keys.SPACEBAR || e.keyCode === keys.ENTER) {\n that.userEvents.trigger('tap', { target: $(e.target) });\n }\n });\n if (that.isMobile) {\n that.popup.container = that.popup.element.find('.' + OVERFLOW_CONTAINER);\n } else {\n that.popup.container = that.popup.element;\n }\n that.popup.container.attr(KENDO_UID_ATTR, this.uid);\n },\n _toggleOverflowAnchor: function () {\n var hasVisibleChildren = false;\n if (this.options.mobile) {\n hasVisibleChildren = this.popup.element.find('.' + OVERFLOW_CONTAINER).children(':not(.' + OVERFLOW_HIDDEN + ', .' + POPUP + ')').length > 0;\n } else {\n hasVisibleChildren = this.popup.element.children(':not(.' + OVERFLOW_HIDDEN + ', .' + POPUP + ')').length > 0;\n }\n if (hasVisibleChildren) {\n this.overflowAnchor.css({\n visibility: 'visible',\n width: ''\n });\n } else {\n this.overflowAnchor.css({\n visibility: 'hidden',\n width: '1px'\n });\n }\n },\n _buttonClick: function (e) {\n var that = this, popup, target, item, splitContainer, isSplitButtonArrow = e.target.closest('.' + SPLIT_BUTTON_ARROW).length, handler, eventData, urlTarget;\n e.preventDefault();\n if (isSplitButtonArrow) {\n that._toggle(e);\n return;\n }\n target = $(e.target).closest('.' + BUTTON, that.element);\n if (target.hasClass(OVERFLOW_ANCHOR)) {\n return;\n }\n item = target.data('button');\n if (!item && that.popup) {\n target = $(e.target).closest('.' + OVERFLOW_BUTTON, that.popup.container);\n item = target.parent('li').data('button');\n }\n if (!item || !item.options.enable) {\n return;\n }\n if (item.options.togglable) {\n handler = isFunction(item.toggleHandler) ? item.toggleHandler : null;\n item.toggle(!item.options.selected, true);\n eventData = {\n target: target,\n group: item.options.group,\n checked: item.options.selected,\n id: item.options.id\n };\n if (handler) {\n handler.call(that, eventData);\n }\n that.trigger(TOGGLE, eventData);\n } else {\n handler = isFunction(item.clickHandler) ? item.clickHandler : null;\n eventData = {\n sender: that,\n target: target,\n id: item.options.id\n };\n if (handler) {\n handler.call(that, eventData);\n }\n that.trigger(CLICK, eventData);\n }\n if (item.options.url) {\n if (item.options.attributes && item.options.attributes.target) {\n urlTarget = item.options.attributes.target;\n }\n window.open(item.options.url, urlTarget || '_self');\n }\n if (target.hasClass(OVERFLOW_BUTTON)) {\n that.popup.close();\n }\n splitContainer = target.closest('.k-split-container');\n if (splitContainer[0]) {\n popup = splitContainer.data('kendoPopup');\n (popup ? popup : splitContainer.parents('.km-popup-wrapper').data('kendoPopup')).close();\n }\n },\n _navigatable: function () {\n var that = this;\n that.element.attr('tabindex', 0).focus(function () {\n var element = $(this).find(':kendoFocusable:first');\n if (element.length === 0) {\n return;\n }\n if (element.is('.' + OVERFLOW_ANCHOR)) {\n element = findFocusableSibling(element, 'next');\n }\n element[0].focus();\n }).on('keydown', proxy(that._keydown, that));\n },\n _keydown: function (e) {\n var target = $(e.target), keyCode = e.keyCode, items = this.element.children(':not(.k-separator):visible');\n if (keyCode === keys.TAB) {\n var element = target.parentsUntil(this.element).last(), lastHasFocus = false, firstHasFocus = false;\n if (!element.length) {\n element = target;\n }\n if (element.is('.' + OVERFLOW_ANCHOR)) {\n if (e.shiftKey) {\n e.preventDefault();\n }\n if (items.last().is(':kendoFocusable')) {\n items.last().focus();\n } else {\n items.last().find(':kendoFocusable').last().focus();\n }\n }\n if (!e.shiftKey && items.index(element) === items.length - 1) {\n if (element.is('.' + BUTTON_GROUP)) {\n lastHasFocus = target.is(':last-child');\n } else {\n lastHasFocus = true;\n }\n }\n var isFirstTool = items.index(element) === items.not('.k-overflow-anchor').first().index();\n if (e.shiftKey && isFirstTool) {\n if (element.is('.' + BUTTON_GROUP)) {\n firstHasFocus = target.is(':first-child');\n } else {\n firstHasFocus = true;\n }\n }\n if (lastHasFocus && this.overflowAnchor && this.overflowAnchor.css('visibility') !== 'hidden') {\n e.preventDefault();\n this.overflowAnchor.focus();\n }\n if (firstHasFocus) {\n e.preventDefault();\n var prevFocusable = this._getPrevFocusable(this.wrapper);\n if (prevFocusable) {\n prevFocusable.focus();\n }\n }\n }\n if (e.altKey && keyCode === keys.DOWN) {\n var splitButton = $(document.activeElement).data('splitButton');\n var isOverflowAnchor = $(document.activeElement).is('.' + OVERFLOW_ANCHOR);\n if (splitButton) {\n splitButton.toggle();\n } else if (isOverflowAnchor) {\n this._toggleOverflow();\n }\n return;\n }\n if ((keyCode === keys.SPACEBAR || keyCode === keys.ENTER) && !target.is('input, checkbox')) {\n e.preventDefault();\n if (target.is('.' + SPLIT_BUTTON)) {\n target = target.children().first();\n }\n this.userEvents.trigger('tap', { target: target });\n return;\n }\n },\n _getPrevFocusable: function (element) {\n if (element.is('html')) {\n return element;\n }\n var elementToFocus, prevElement, prevElements = element.prevAll();\n prevElements.each(function () {\n prevElement = $(this);\n if (prevElement.is(':kendoFocusable')) {\n elementToFocus = prevElement;\n return false;\n } else if (prevElement.find(':kendoFocusable').length > 0) {\n elementToFocus = prevElement.find(':kendoFocusable').last();\n return false;\n }\n });\n if (elementToFocus) {\n return elementToFocus;\n } else {\n return this._getPrevFocusable(element.parent());\n }\n },\n _toggle: function (e) {\n var splitButton = $(e.target).closest('.' + SPLIT_BUTTON).data('splitButton'), isDefaultPrevented;\n e.preventDefault();\n if (!splitButton.options.enable) {\n return;\n }\n if (splitButton.popup.element.is(':visible')) {\n isDefaultPrevented = this.trigger(CLOSE, { target: splitButton.element });\n } else {\n isDefaultPrevented = this.trigger(OPEN, { target: splitButton.element });\n }\n if (!isDefaultPrevented) {\n splitButton.toggle();\n }\n },\n _toggleOverflow: function () {\n this.popup.toggle();\n },\n _resize: function (e) {\n var containerWidth = e.width;\n if (!this.options.resizable) {\n return;\n }\n this.popup.close();\n this._shrink(containerWidth);\n this._stretch(containerWidth);\n this._markVisibles();\n this._toggleOverflowAnchor();\n },\n _childrenWidth: function () {\n var childrenWidth = 0;\n this.element.children(':visible:not(\\'.' + STATE_HIDDEN + '\\')').each(function () {\n childrenWidth += outerWidth($(this), true);\n });\n return Math.ceil(childrenWidth);\n },\n _shrink: function (containerWidth) {\n var commandElement, visibleCommands;\n if (containerWidth < this._childrenWidth()) {\n visibleCommands = this.element.children(':visible:not([data-overflow=\\'never\\'], .' + OVERFLOW_ANCHOR + ')');\n for (var i = visibleCommands.length - 1; i >= 0; i--) {\n commandElement = visibleCommands.eq(i);\n if (containerWidth > this._childrenWidth()) {\n break;\n } else {\n this._hideItem(commandElement);\n }\n }\n }\n },\n _stretch: function (containerWidth) {\n var commandElement, hiddenCommands;\n if (containerWidth > this._childrenWidth()) {\n hiddenCommands = this.element.children(':hidden:not(\\'.' + STATE_HIDDEN + '\\')');\n for (var i = 0; i < hiddenCommands.length; i++) {\n commandElement = hiddenCommands.eq(i);\n if (containerWidth < this._childrenWidth() || !this._showItem(commandElement, containerWidth)) {\n break;\n }\n }\n }\n },\n _hideItem: function (item) {\n item.hide();\n if (this.popup) {\n this.popup.container.find('>li[data-uid=\\'' + item.data('uid') + '\\']').removeClass(OVERFLOW_HIDDEN);\n }\n },\n _showItem: function (item, containerWidth) {\n if (item.length && containerWidth > this._childrenWidth() + outerWidth(item, true)) {\n item.show();\n if (this.popup) {\n this.popup.container.find('>li[data-uid=\\'' + item.data('uid') + '\\']').addClass(OVERFLOW_HIDDEN);\n }\n return true;\n }\n return false;\n },\n _markVisibles: function () {\n var overflowItems = this.popup.container.children(), toolbarItems = this.element.children(':not(.k-overflow-anchor)'), visibleOverflowItems = overflowItems.filter(':not(.k-overflow-hidden)'), visibleToolbarItems = toolbarItems.filter(':visible');\n overflowItems.add(toolbarItems).removeClass(FIRST_TOOLBAR_VISIBLE + ' ' + LAST_TOOLBAR_VISIBLE);\n visibleOverflowItems.first().add(visibleToolbarItems.first()).addClass(FIRST_TOOLBAR_VISIBLE);\n visibleOverflowItems.last().add(visibleToolbarItems.last()).addClass(LAST_TOOLBAR_VISIBLE);\n }\n });\n kendo.ui.plugin(ToolBar);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mediaplayer', [\n 'kendo.slider',\n 'kendo.toolbar',\n 'kendo.dropdownlist',\n 'kendo.tooltip'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mediaplayer',\n name: 'MediaPlayer',\n category: 'web',\n description: '',\n depends: [\n 'slider',\n 'toolbar',\n 'dropdownlist',\n 'tooltip'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, END = 'end', PAUSE = 'pause', PLAY = 'play', READY = 'ready', TIMECHANGE = 'timeChange', VOLUMECHANGE = 'volumeChange', FULLSCREEN_ENTER = 'k-i-full-screen', FULLSCREEN_EXIT = 'k-i-full-screen-exit', MUTE = 'k-i-volume-off', LOW_VOLUME = 'k-i-volume-down', HIGH_VOLUME = 'k-i-volume-up', VIDEO_QUALITY = 'k-mediaplayer-quality', STATE_PLAY = 'k-i-play', STATE_PAUSE = 'k-i-pause', TITLEBAR = 'k-mediaplayer-titlebar', TITLE = 'k-title', TOOLBARWRAP = 'k-mediaplayer-toolbar-wrap', TOOLBAR = 'k-mediaplayer-toolbar', SLIDER = 'k-mediaplayer-seekbar', VOLUME_SLIDER = 'k-mediaplayer-volume', MEDIA = 'k-mediaplayer-media', OVERLAY = 'k-mediaplayer-overlay', YTPLAYER = 'k-mediaplayer-yt', DOT = '.', ui = kendo.ui, ns = '.kendoMediaPlayer', baseTime = new Date(1970, 0, 1), timeZoneSec = baseTime.getTimezoneOffset() * 60, Widget = kendo.ui.Widget, isArray = $.isArray, timeFormats = {\n shortTime: 'mm:ss',\n longTime: 'HH:mm:ss'\n }, template = kendo.template, proxy = $.proxy, keys = kendo.keys, templates = {\n htmlPlayer: '<video class=\\'' + MEDIA + '\\'> </video>',\n titleBar: template('<div class=\\'' + TITLEBAR + '\\' role=\\'heading\\'><span class=\\'' + TITLE + '\\'>Video Title</span></div>'),\n toolBar: '<div class=\\'' + TOOLBARWRAP + '\\'><div class=\\'' + TOOLBAR + '\\'></div></div>',\n youtubePlayer: '<div class=\\'' + YTPLAYER + '\\'> </div>',\n toolBarTime: '<span class=\\'k-mediaplayer-currenttime\\'>00:00:00</span> / <span class=\\'k-mediaplayer-duration\\'>00:00:00</span>',\n slider: '<input class=\\'' + SLIDER + '\\' value=\\'0\\' title=\\'seekbar\\' />',\n volumeSlider: '<input class=\\'' + VOLUME_SLIDER + '\\' title=\\'volume\\'/>',\n qualityDropDown: '<input class=\\'' + VIDEO_QUALITY + '\\' title=\\'video quality\\' />',\n toolTip: '#= kendo.toString(new Date(value), \\'HH:mm:ss\\') #'\n };\n var MediaPlayer = Widget.extend({\n init: function (element, options) {\n this.wrapper = $(element);\n Widget.fn.init.call(this, element, options);\n this.wrapper.addClass('k-mediaplayer k-widget');\n options = this.options;\n this._currentIndex = 0;\n this._createTitlebar();\n this._createToolbar();\n this._createDropDown();\n this._createSlider();\n this._createVolumeSlider();\n this._timers = {};\n this._aria();\n this._navigatable();\n if (options.media) {\n this.media(this.options.media);\n }\n kendo.notify(this);\n },\n events: [\n END,\n PAUSE,\n PLAY,\n READY,\n TIMECHANGE,\n VOLUMECHANGE\n ],\n options: {\n name: 'MediaPlayer',\n autoPlay: false,\n autoRepeat: false,\n volume: 100,\n fullScreen: false,\n mute: false,\n navigatable: false,\n forwardSeek: true,\n media: null,\n messages: {\n 'pause': 'Pause',\n 'play': 'Play',\n 'mute': 'Mute',\n 'unmute': 'Unmute',\n 'quality': 'Quality',\n 'fullscreen': 'Full Screen'\n }\n },\n _msToTime: function (ms) {\n var time = new Date(baseTime.getTime());\n time.setSeconds(ms);\n return time;\n },\n _timeToSec: function (time) {\n var curTime = new Date(time).getTime();\n return curTime / 1000;\n },\n _createTitlebar: function () {\n this._titleBar = this.wrapper.find(DOT + TITLEBAR);\n if (this._titleBar.length === 0) {\n this.wrapper.append(templates.titleBar);\n this._titleBar = this.wrapper.find(DOT + TITLEBAR);\n }\n },\n _createSlider: function () {\n var sliderElement = this.wrapper.find(DOT + SLIDER);\n if (!this._slider) {\n this._sliderDragChangeHandler = proxy(this._sliderDragChange, this);\n this._sliderDraggingHandler = proxy(this._sliderDragging, this);\n sliderElement = this.wrapper.find(DOT + SLIDER);\n this._slider = new ui.Slider(sliderElement[0], {\n smallStep: 1000,\n tickPlacement: 'none',\n showButtons: false,\n change: this._sliderDragChangeHandler,\n slide: this._sliderDraggingHandler,\n tooltip: { template: templates.toolTip },\n dragHandleTitle: ''\n });\n }\n },\n _createVolumeSlider: function () {\n var volumeSliderElement = this.wrapper.find(DOT + VOLUME_SLIDER);\n if (!this._volumeSlider) {\n this._volumeDraggingHandler = proxy(this._volumeDragging, this);\n this._volumeChangeHandler = proxy(this._volumeChange, this);\n volumeSliderElement.width(87);\n this._volumeSlider = new ui.Slider(volumeSliderElement[0], {\n smallStep: 1,\n min: 0,\n max: 100,\n value: this.options.volume,\n slide: this._volumeDraggingHandler,\n change: this._volumeChangeHandler,\n tickPlacement: 'none',\n showButtons: false,\n tooltip: { enabled: false },\n dragHandleTitle: ''\n });\n }\n },\n _resetTime: function () {\n if (this._youTubeVideo) {\n this._ytmedia.seekTo(0, true);\n } else {\n this._media.currentTime = 0;\n }\n this._mediaTimeUpdate();\n $.grep(this._toolBar.options.items, function (e) {\n return !!e.template;\n }).template = templates.toolBarTime;\n },\n _currentUrl: function () {\n var media = this.media();\n return isArray(media.source) ? media.source[this._currentIndex].url : media.source;\n },\n _isYouTubeUrl: function () {\n return !!this._currentUrl().match('youtube.com/|youtu.be/');\n },\n _setPlayerUrl: function () {\n var oldPlayer = this._youTubeVideo;\n this.stop();\n this._youTubeVideo = this._isYouTubeUrl();\n if (oldPlayer !== this._youTubeVideo) {\n this.wrapper.find(DOT + YTPLAYER).toggle();\n this.wrapper.find(DOT + MEDIA).toggle();\n }\n var initialized = this._media || this._ytmedia;\n this._initializePlayer();\n if (initialized) {\n this.mute(this.mute());\n this.volume(this.volume());\n }\n if (!this._youTubeVideo) {\n this._videoOverlay.show();\n this.wrapper.find(DOT + MEDIA + ' > source').remove();\n this.wrapper.find(DOT + MEDIA).attr('src', this._currentUrl());\n if (this.options.autoPlay) {\n this.play();\n }\n } else if (this._ytmedia) {\n if (this._videoOverlay) {\n this._videoOverlay.hide();\n }\n if (this.options.autoPlay) {\n this._ytmedia.loadVideoById(this._getMediaId());\n this._playStateToggle(true);\n } else {\n this._ytmedia.cueVideoById(this._getMediaId());\n this._playStateToggle(true);\n }\n }\n },\n _createToolbar: function () {\n var toolBarElement = this.wrapper.find(DOT + TOOLBAR);\n if (toolBarElement.length === 0) {\n this._toolbarClickHandler = proxy(this._toolbarClick, this);\n this.wrapper.append(templates.toolBar);\n toolBarElement = this.wrapper.find(DOT + TOOLBAR);\n toolBarElement.width(this.wrapper.find(DOT + MEDIA).width());\n this._toolBar = new ui.ToolBar(toolBarElement, {\n click: this._toolbarClickHandler,\n resizable: false,\n items: [\n {\n type: 'button',\n attributes: { 'class': 'k-play-button' },\n icon: 'play'\n },\n {\n template: templates.toolBarTime,\n attributes: { 'class': 'k-mediaplayer-currenttime-wrap' }\n },\n {\n type: 'separator',\n attributes: { 'class': 'k-toolbar-spacer' }\n },\n {\n type: 'button',\n attributes: { 'class': 'k-volume-button' },\n icon: 'volume-up'\n },\n {\n template: templates.volumeSlider,\n attributes: { 'class': 'k-mediaplayer-volume-wrap' }\n },\n {\n template: templates.qualityDropDown,\n attributes: { 'class': 'k-mediaplayer-quality-wrap' }\n },\n {\n type: 'button',\n attributes: { 'class': 'k-fullscreen-button' },\n icon: 'full-screen'\n }\n ]\n });\n toolBarElement.before(templates.slider);\n this._volumeButton = toolBarElement.find('.k-volume-button');\n this._fullscreenButton = toolBarElement.find('.k-fullscreen-button');\n this._volumeButton.attr('title', this.options.mute ? this.options.messages.unmute : this.options.messages.mute);\n this._volumeButton.attr('aria-label', this.options.mute ? this.options.messages.unmute : this.options.messages.mute);\n this._fullscreenButton.attr('title', this.options.messages.fullscreen);\n this._fullscreenButton.attr('aria-label', this.options.messages.fullscreen);\n toolBarElement.width('auto');\n this._currentTimeElement = toolBarElement.find('.k-mediaplayer-currenttime');\n this._durationElement = toolBarElement.find('.k-mediaplayer-duration');\n this._playButton = toolBarElement.find('.k-play-button');\n this._playButtonSpan = this._playButton.find('.k-i-play');\n if (this.options.autoPlay) {\n this._playStateToggle(true);\n }\n $([\n this._volumeButton[0],\n toolBarElement.find('.k-mediaplayer-volume-wrap')[0],\n toolBarElement.find('.k-mediaplayer-quality-wrap')[0],\n this._fullscreenButton[0]\n ]).wrapAll('<div class=\\'k-align-right\\' />');\n toolBarElement.find('.k-button').addClass('k-button-bare');\n }\n },\n _createDropDown: function () {\n var dropDownElement = this.wrapper.find(DOT + VIDEO_QUALITY);\n var media = this.media();\n if (typeof dropDownElement.data('kendoDropDownList') === 'undefined') {\n this._dropDownSelectHandler = proxy(this._dropDownSelect, this);\n this._dropDown = new ui.DropDownList(dropDownElement, {\n dataTextField: 'quality',\n dataValueField: 'url',\n popup: {\n position: 'bottom',\n origin: 'top',\n appendTo: this.wrapper\n },\n animation: {\n open: {\n effects: 'slideIn:up',\n duration: 1\n }\n },\n select: this._dropDownSelectHandler\n });\n if (media && isArray(media.source)) {\n this._dropDown.setDataSource(media.source);\n this._dropDown.select(0);\n }\n this._dropDown.wrapper.addClass('k-button k-button-bare');\n this._dropDown.wrapper.attr('title', this.options.messages.quality).hide();\n this._dropDown.wrapper.find('span.k-i-arrow-60-down').removeClass('k-i-arrow-60-down').addClass('k-icon k-i-hd');\n this._dropDown.list.addClass('k-quality-list');\n }\n },\n _dropDownSelect: function (e) {\n if (this._currentIndex !== e.item.index()) {\n this._currentIndex = e.item.index();\n this._setPlayerUrl();\n }\n },\n _toolbarClick: function (e) {\n var target = $(e.target).children().first();\n var isPaused = target.hasClass(STATE_PLAY);\n if (!this.media()) {\n return;\n }\n if (target.hasClass(STATE_PLAY) || target.hasClass(STATE_PAUSE)) {\n if (isPaused) {\n this.play();\n } else {\n this.pause();\n }\n }\n if (target.hasClass(FULLSCREEN_ENTER) || target.hasClass(FULLSCREEN_EXIT)) {\n if (this._isInFullScreen) {\n target.removeClass(FULLSCREEN_EXIT).addClass(FULLSCREEN_ENTER);\n this.fullScreen(false);\n } else {\n target.removeClass(FULLSCREEN_ENTER).addClass(FULLSCREEN_EXIT);\n this.fullScreen(true);\n }\n }\n if (target.hasClass(MUTE) || target.hasClass(LOW_VOLUME) || target.hasClass(HIGH_VOLUME)) {\n var muted = this.mute();\n this.mute(!muted);\n }\n },\n _sliderDragging: function () {\n if (!this.media()) {\n return;\n }\n this._isDragging = true;\n },\n _sliderDragChange: function (e) {\n var that = this;\n var slider = e.sender;\n var tzOffset = timeZoneSec * 1000;\n if (!this.media()) {\n return;\n }\n that._sliderChangeFired = true;\n that._isDragging = false;\n if (!this.options.forwardSeek && slider.value() > this._seekBarLastPosition) {\n setTimeout(function () {\n slider.value(that._seekBarLastPosition);\n }, 1);\n } else if (this._youTubeVideo) {\n that._ytmedia.seekTo(that._timeToSec(e.value - tzOffset));\n } else {\n that._media.currentTime = that._timeToSec(e.value - tzOffset);\n }\n that.trigger(TIMECHANGE);\n that._preventPlay = true;\n },\n _changeVolumeButtonImage: function (volume) {\n var volumeButton = this._volumeButton;\n var volumeElement = volumeButton.find('span');\n var cssClass = volumeElement.attr('class');\n cssClass = cssClass.substring(0, cssClass.lastIndexOf(' '));\n if (volume === 0) {\n volumeElement.attr('class', cssClass + ' ' + MUTE);\n volumeButton.attr('title', this.options.messages.unmute);\n volumeButton.attr('aria-label', this.options.messages.unmute);\n } else if (volume > 0 && volume < 51) {\n volumeElement.attr('class', cssClass + ' ' + LOW_VOLUME);\n volumeButton.attr('title', this.options.messages.mute);\n volumeButton.attr('aria-label', this.options.messages.mute);\n } else {\n volumeElement.attr('class', cssClass + ' ' + HIGH_VOLUME);\n volumeButton.attr('title', this.options.messages.mute);\n volumeButton.attr('aria-label', this.options.messages.mute);\n }\n },\n _volumeDragging: function (e) {\n if (!this.media()) {\n return;\n }\n this.volume(e.value);\n this._changeVolumeButtonImage(e.value);\n this.trigger(VOLUMECHANGE);\n },\n _volumeChange: function (e) {\n if (!this.media()) {\n return;\n }\n this.volume(e.value);\n this._changeVolumeButtonImage(e.value);\n this.trigger(VOLUMECHANGE);\n },\n _mediaTimeUpdate: function () {\n var currentTime = this._youTubeVideo ? this._ytmedia.getCurrentTime() : this._media.currentTime;\n var timeInMs = this._msToTime(currentTime);\n this._currentTimeElement.text(kendo.toString(timeInMs, this._timeFormat));\n if (!this._isDragging) {\n this._seekBarLastPosition = (currentTime + timeZoneSec) * 1000;\n this._slider.value(this._seekBarLastPosition);\n }\n return this.isPlaying();\n },\n _playStateToggle: function (play) {\n if (typeof play === 'undefined') {\n play = this._playButtonSpan.is(DOT + STATE_PLAY);\n }\n if (play) {\n this._playButtonSpan.removeClass(STATE_PLAY).addClass(STATE_PAUSE);\n this._playButton.attr('title', this.options.messages.pause);\n this._playButton.attr('aria-label', this.options.messages.pause);\n } else {\n this._playButtonSpan.removeClass(STATE_PAUSE).addClass(STATE_PLAY);\n this._playButton.attr('title', this.options.messages.play);\n this._playButton.attr('aria-label', this.options.messages.play);\n }\n },\n _mediaEnded: function () {\n this._playStateToggle(false);\n this._currentTimeElement.text(kendo.toString(this._msToTime(0), this._timeFormat));\n this._slider.value((0 + timeZoneSec) * 1000);\n this.trigger(END);\n },\n _mediaPlay: function () {\n this.trigger(PLAY);\n },\n _mediaReady: function () {\n this.trigger(READY);\n },\n _mediaDurationChange: function () {\n var durationTime = this._msToTime(this._youTubeVideo ? this._ytmedia.getDuration() : this._media.duration);\n this._timeFormat = durationTime.getHours() === 0 ? timeFormats.shortTime : timeFormats.longTime;\n this._durationElement.text(kendo.toString(durationTime, this._timeFormat));\n this._slider.setOptions({\n min: baseTime.getTime(),\n max: durationTime.getTime()\n });\n if (!this._isFirstRun) {\n this._resetTime();\n this._isFirstRun = true;\n }\n },\n _createYoutubePlayer: function () {\n this._mediaTimeUpdateHandler = proxy(this._mediaTimeUpdate, this);\n this._mediaDurationChangeHandler = proxy(this._mediaDurationChange, this);\n this.wrapper.prepend(templates.youtubePlayer);\n this._ytPlayer = this.wrapper.find(DOT + YTPLAYER)[0];\n $(this._ytPlayer).css({\n width: this.wrapper.width(),\n height: this.wrapper.height()\n });\n if (!window.YT || !window.YT.Player) {\n if (!window.onYouTubeIframeAPIReadyRegister) {\n window.onYouTubeIframeAPIReadyRegister = [];\n $.getScript('https://www.youtube.com/iframe_api');\n window.onYouTubeIframeAPIReady = function () {\n if (window.onYouTubeIframeAPIReadyRegister) {\n for (var i = 0; i < window.onYouTubeIframeAPIReadyRegister.length; i++) {\n window.onYouTubeIframeAPIReadyRegister[i]._youtubeApiReady();\n }\n }\n window.onYouTubeIframeAPIReadyRegister.length = 0;\n window.onYouTubeIframeAPIReadyRegister = undefined;\n };\n }\n window.onYouTubeIframeAPIReadyRegister[window.onYouTubeIframeAPIReadyRegister.length] = this;\n } else {\n this._configurePlayer();\n }\n },\n _poll: function (name, callback, interval, context) {\n var that = this;\n if (that._timers[name] !== null) {\n clearTimeout(that._timers[name]);\n }\n that._timers[name] = setTimeout(function (context) {\n return function callLater() {\n if (callback.call(context)) {\n that._timers[name] = setTimeout(callLater, interval);\n }\n };\n }(context), interval);\n return that._timers[name];\n },\n _youtubeApiReady: function () {\n this._configurePlayer();\n },\n _configurePlayer: function () {\n var vars = {\n 'autoplay': +this.options.autoPlay,\n 'wmode': 'transparent',\n 'controls': 0,\n 'rel': 0,\n 'showinfo': 0\n };\n this._onYouTubePlayerReady = proxy(this._onYouTubePlayerReady, this);\n window.onYouTubePlayerReady = this._onYouTubePlayerReady;\n this._onPlayerStateChangeHandler = proxy(this._onPlayerStateChange, this);\n window.onPlayerStateChange = this._onPlayerStateChange;\n var player = new window.YT.Player(this.wrapper.find(DOT + YTPLAYER)[0], {\n height: this.wrapper.height(),\n width: this.wrapper.width(),\n videoId: this._getMediaId(),\n playerVars: vars,\n events: {\n 'onReady': this._onYouTubePlayerReady,\n 'onStateChange': this._onPlayerStateChangeHandler\n }\n });\n },\n _onYouTubePlayerReady: function (event) {\n this._ytmedia = event.target;\n this._ytmedia.getIframe().style.width = '100%';\n this._ytmedia.getIframe().style.height = '100%';\n this._youTubeVideo = true;\n this._mediaDurationChangeHandler();\n if (this.options.autoPlay) {\n this._playStateToggle(true);\n this._ytmedia.loadVideoById(this._getMediaId());\n } else {\n this._ytmedia.cueVideoById(this._getMediaId());\n }\n if (this.options.mute) {\n this.mute(true);\n }\n this.trigger(READY);\n },\n _updateTitle: function () {\n this.titlebar().text(this.media().title || this.media().source);\n },\n _onPlayerStateChange: function (event) {\n if (event.data === 0) {\n this._slider.value(0);\n this._paused = false;\n this._playStateToggle(true);\n this.trigger(END);\n if (this.options.autoRepeat) {\n this.play();\n }\n } else if (event.data === 1) {\n this._mediaDurationChange();\n this._ytmedia.setVolume(this.volume());\n if (this._sliderChangeFired) {\n this._sliderChangeFired = false;\n } else {\n this._uiDisplay(false);\n }\n this.trigger(PLAY);\n this._playStateToggle(true);\n this._poll('progress', this._mediaTimeUpdate, 500, this);\n this._paused = false;\n } else if (event.data === 2) {\n if (!this._paused) {\n this._uiDisplay(true);\n this._playStateToggle(false);\n this.trigger(PAUSE);\n this._paused = true;\n }\n }\n },\n _getMediaId: function () {\n var result = this._currentUrl();\n var regExp = /^.*((youtu.be\\/)|(v\\/)|(\\/u\\/\\w\\/)|(embed\\/)|(watch\\?))\\??v?=?([^#\\&\\?]*).*/;\n var match = result.match(regExp);\n if (match && match[7].length === 11) {\n result = match[7];\n }\n return result;\n },\n _mouseClick: function () {\n if (this.isPaused()) {\n this.play();\n } else {\n this.pause();\n }\n },\n _initializePlayer: function () {\n if (!this._mouseMoveHandler) {\n this._mouseMoveHandler = proxy(this._mouseMove, this);\n this._mouseInHandler = proxy(this._mouseIn, this);\n this._mouseOutHandler = proxy(this._mouseOut, this);\n $(this.wrapper).on('mouseenter' + ns, this._mouseInHandler).on('mouseleave' + ns, this._mouseOutHandler).on('mousemove' + ns, this._mouseMoveHandler);\n }\n if (!this._ytmedia && this._youTubeVideo) {\n this._createYoutubePlayer();\n } else if (!this._media && !this._youTubeVideo) {\n this._createHtmlPlayer();\n }\n },\n _createHtmlPlayer: function () {\n if (!this._videoOverlay) {\n this._mouseClickHanlder = proxy(this._mouseClick, this);\n this.wrapper.append('<div class=\\'' + OVERLAY + '\\'></div>');\n this._videoOverlay = this.wrapper.find('.k-mediaplayer-overlay').on('click' + ns, this._mouseClickHanlder);\n }\n this._mediaTimeUpdateHandler = proxy(this._mediaTimeUpdate, this);\n this._mediaDurationChangeHandler = proxy(this._mediaDurationChange, this);\n this._mediaEndedHandler = proxy(this._mediaEnded, this);\n this._mediaCanPlayHandler = proxy(this._mediaReady, this);\n this._mediaPlayHandler = proxy(this._mediaPlay, this);\n this._videoOverlay.after(templates.htmlPlayer);\n this._media = this.wrapper.find(DOT + MEDIA)[0];\n $(this._media).css({\n width: '100%',\n height: '100%'\n });\n if (this.options.mute) {\n this.mute(true);\n }\n this._media.ontimeupdate = this._mediaTimeUpdateHandler;\n this._media.ondurationchange = this._mediaDurationChangeHandler;\n this._media.oncanplay = this._mediaCanPlayHandler;\n this._media.onplay = this._mediaPlayHandler;\n this._media.onended = this._mediaEndedHandler;\n },\n _mouseIn: function () {\n this._uiDisplay(true);\n },\n _mouseOut: function () {\n this._poll('mouseIdle', this._mouseIdle, 3000, this);\n },\n _mouseIdle: function () {\n this._uiDisplay(false);\n return false;\n },\n _mouseMove: function () {\n if (!(this._titleBar.is(':animated') || this._toolBar.element.is(':animated') || this._slider.wrapper.is(':animated'))) {\n this._uiDisplay(true);\n }\n this._poll('mouseIdle', this._mouseIdle, 3000, this);\n },\n _uiDisplay: function (state) {\n var animationSpeed = 'slow';\n var uiElements = this._titleBar.add(this._toolBar.element.parent());\n if (state) {\n uiElements.fadeIn(animationSpeed);\n } else {\n uiElements.fadeOut(animationSpeed);\n }\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n if (!this.isPaused()) {\n this.pause();\n }\n this.element.off(ns);\n this.element.find(DOT + OVERLAY).off(ns);\n this._timers = null;\n this._mouseMoveHandler = null;\n this._mouseOutHandler = null;\n this._mouseInHandler = null;\n this._mouseClickHanlder = null;\n this._keyDownHandler = null;\n this._fullscreenHandler = null;\n this._toolbarClickHandler = null;\n this._sliderDragChangeHandler = null;\n this._sliderDraggingHandler = null;\n this._volumeDraggingHandler = null;\n this._volumeChangeHandler = null;\n this._youtubeApiReadyHandler = null;\n this._onYouTubePlayerReady = null;\n this._onPlayerStateChangeHandler = null;\n this._dropDownSelectHandler = null;\n this._media.ontimeupdate = this._mediaTimeUpdateHandler = null;\n this._media.ondurationchange = this._mediaDurationChangeHandler = null;\n this._media.oncanplay = this._mediaCanPlayHandler = null;\n this._media.onplay = this._mediaPlayHandler = null;\n this._media.onended = this._mediaEndedHandler = null;\n if (this._youTubeVideo) {\n this._ytmedia.destroy();\n } else {\n this._media.src = '';\n this._media.remove();\n }\n this._mouseMoveTimer = null;\n clearTimeout(this._mouseMoveTimer);\n kendo.destroy(this.element);\n },\n seek: function (ms) {\n if (typeof ms === 'undefined') {\n return 1000 * this._youTubeVideo ? this._ytmedia.getCurrentTime() : this._media ? this._media.currentTime : 0;\n }\n var seconds = ms / 1000;\n if (this._youTubeVideo) {\n if (seconds + 3 >= this._ytmedia.getDuration() | 0) {\n this._ytmedia.seekTo(this._ytmedia.getDuration() - 3 | 0, true);\n } else {\n this._ytmedia.seekTo(seconds, true);\n }\n } else {\n this._media.currentTime = seconds;\n }\n return this;\n },\n play: function () {\n if (this._youTubeVideo) {\n this._ytmedia.playVideo();\n } else {\n this._uiDisplay(false);\n this._media.play();\n }\n this._paused = false;\n this._playStateToggle(true);\n return this;\n },\n stop: function () {\n if (this._youTubeVideo && this._ytmedia) {\n this._ytmedia.stopVideo();\n } else if (this._media && !this._youTubeVideo) {\n this._uiDisplay(true);\n this._media.pause();\n this._media.currentTime = 0;\n }\n this._paused = true;\n this._playStateToggle(false);\n return this;\n },\n pause: function () {\n if (this._youTubeVideo) {\n this._ytmedia.pauseVideo();\n } else {\n this._uiDisplay(true);\n this._media.pause();\n }\n this._paused = true;\n this._playStateToggle(false);\n this.trigger(PAUSE);\n return this;\n },\n toolbar: function () {\n return this._toolBar;\n },\n dropdown: function () {\n return this._dropDown;\n },\n titlebar: function () {\n return this._titleBar;\n },\n fullScreen: function (enterFullScreen) {\n if (typeof enterFullScreen === 'undefined') {\n return this._isInFullScreen || false;\n }\n var element = this.element.get(0);\n if (enterFullScreen) {\n this.element.addClass('k-mediaplayer-fullscreen');\n if (element.requestFullscreen) {\n element.requestFullscreen();\n } else if (element.webkitRequestFullscreen) {\n element.webkitRequestFullscreen();\n } else if (element.mozRequestFullScreen) {\n element.mozRequestFullScreen();\n } else if (element.msRequestFullscreen) {\n element.msRequestFullscreen();\n }\n this._isInFullScreen = true;\n } else {\n if (document.cancelFullscreen) {\n document.cancelFullscreen();\n } else if (document.webkitCancelFullScreen) {\n document.webkitCancelFullScreen();\n } else if (document.mozCancelFullScreen) {\n document.mozCancelFullScreen();\n } else if (document.msCancelFullscreen) {\n document.msCancelFullscreen();\n } else if (document.exitFullscreen) {\n document.exitFullscreen();\n } else if (document.msExitFullscreen) {\n document.msExitFullscreen();\n }\n this.element.removeClass('k-mediaplayer-fullscreen');\n this._isInFullScreen = false;\n }\n this._slider.resize();\n },\n volume: function (value) {\n if (typeof value === 'undefined') {\n return typeof this._volume !== 'undefined' ? this._volume : this._volume = this.options.volume;\n }\n this._volume = value;\n this.mute(value <= 0);\n if (this._youTubeVideo) {\n this._ytmedia.setVolume(this._volume);\n } else {\n this._media.volume = this._volume / 100;\n }\n this._volumeSlider.value(value);\n },\n mute: function (muted) {\n var currentState = this._youTubeVideo ? this._ytmedia && this._ytmedia.isMuted() : this._media && this._media.muted;\n if (typeof muted === 'undefined' || muted === currentState) {\n return currentState;\n }\n if (this._youTubeVideo) {\n if (muted) {\n this._ytmedia.mute();\n } else {\n this._ytmedia.unMute();\n }\n } else {\n this._media.muted = muted;\n }\n if (muted) {\n this._volumeSlider.value(0);\n } else {\n this._volumeSlider.value(this._media && this._media.volume * 100 || this._ytmedia && this._ytmedia.getVolume());\n }\n this.trigger(VOLUMECHANGE);\n this._changeVolumeButtonImage(this._volumeSlider.value());\n },\n isEnded: function () {\n if (this._youTubeVideo) {\n return this._ytmedia.getPlayerState() === 0;\n } else {\n return this._media.ended;\n }\n },\n media: function (value) {\n var dropdown = this.dropdown();\n if (typeof value === 'undefined') {\n return typeof this._mediaData !== 'undefined' ? this._mediaData : this._mediaData = this.options.media;\n }\n if (isArray(value.source)) {\n dropdown.setDataSource(value.source);\n dropdown.wrapper.show();\n } else {\n dropdown.wrapper.hide();\n }\n this._mediaData = value;\n this._updateTitle();\n this._setPlayerUrl();\n },\n isPaused: function () {\n return this._paused;\n },\n isPlaying: function () {\n return !this.isEnded() && !this._paused;\n },\n _aria: function () {\n this.wrapper.attr('role', 'region');\n },\n _navigatable: function () {\n this._fullscreenHandler = proxy(this._fullscreen, this);\n $(document).on('webkitfullscreenchange mozfullscreenchange fullscreenchange' + ns, this._fullscreenHandler);\n if (this.options.navigatable) {\n this.wrapper.attr('tabIndex', 0);\n this._keyDownHandler = proxy(this._keyDown, this);\n this.wrapper.on('keydown' + ns, this._keyDownHandler);\n }\n },\n _fullscreen: function () {\n var isFullScreen = document.fullScreen || document.mozFullScreen || document.webkitIsFullScreen;\n this._uiDisplay(true);\n this._slider.resize();\n if (!isFullScreen) {\n this.wrapper.find('span[class*=\"k-i-fullscreen\"]').removeClass(FULLSCREEN_EXIT).addClass(FULLSCREEN_ENTER);\n this.fullScreen(false);\n }\n },\n _keyDown: function (e) {\n e.preventDefault();\n var fsButton = this.wrapper.find('span[class*=\"k-i-fullscreen\"]');\n if (e.keyCode === keys.SPACEBAR) {\n if (this.isPlaying()) {\n this.pause();\n } else {\n this.play();\n }\n } else if (e.keyCode === keys.ENTER && !this._isInFullScreen) {\n fsButton.removeClass(FULLSCREEN_ENTER).addClass(FULLSCREEN_EXIT);\n this.fullScreen(true);\n } else if (e.keyCode === 77) {\n var muted = this.mute();\n this.mute(!muted);\n } else if (e.keyCode === keys.ESC && this._isInFullScreen) {\n fsButton.removeClass(FULLSCREEN_EXIT).addClass(FULLSCREEN_ENTER);\n this.fullScreen(false);\n }\n },\n _error: function () {\n },\n _progress: function () {\n }\n });\n ui.plugin(MediaPlayer);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define === 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.pivotgrid', [\n 'kendo.dom',\n 'kendo.data'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'pivotgrid',\n name: 'PivotGrid',\n category: 'web',\n description: 'The PivotGrid widget is a data summarization tool.',\n depends: [\n 'dom',\n 'data',\n 'data.xml',\n 'sortable'\n ],\n features: [\n {\n id: 'pivotgrid-configurator',\n name: 'Configurator',\n description: 'The PivotConfigurator widget allows the user to select data slices displayed in PivotGrid',\n depends: ['pivot.configurator']\n },\n {\n id: 'pivotgrid-filtering',\n name: 'Filtering',\n description: 'Support for filtering',\n depends: ['pivot.fieldmenu']\n },\n {\n id: 'pivotgrid-excel-export',\n name: 'Excel export',\n description: 'Export pivot grid data as Excel spreadsheet',\n depends: ['ooxml']\n },\n {\n id: 'pivotgrid-pdf-export',\n name: 'PDF export',\n description: 'Export pivot grid data as PDF',\n depends: [\n 'pdf',\n 'drawing'\n ]\n },\n {\n id: 'mobile-scroller',\n name: 'Mobile scroller',\n description: 'Support for kinetic scrolling in mobile device',\n depends: ['mobile.scroller']\n }\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Class = kendo.Class, Widget = ui.Widget, DataSource = kendo.data.DataSource, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, toString = {}.toString, identity = function (o) {\n return o;\n }, map = $.map, extend = $.extend, isFunction = kendo.isFunction, CHANGE = 'change', ERROR = 'error', MEASURES = 'Measures', PROGRESS = 'progress', STATERESET = 'stateReset', AUTO = 'auto', DIV = '<div/>', NS = '.kendoPivotGrid', ROW_TOTAL_KEY = '__row_total__', DATABINDING = 'dataBinding', DATABOUND = 'dataBound', EXPANDMEMBER = 'expandMember', COLLAPSEMEMBER = 'collapseMember', STATE_EXPANDED = 'k-i-collapse', STATE_COLLAPSED = 'k-i-expand', HEADER_TEMPLATE = '<span>#: data.member.caption || data.member.name #</span>', KPISTATUS_TEMPLATE = '<span class=\"k-icon k-i-#=data.dataItem.value > 0 ? \"circle\" : data.dataItem.value < 0 ? \"stop\" : \"arrow-60-up k-i-hold\"#\" title=\"#:data.dataItem.value#\"></span>', KPITREND_TEMPLATE = '<span class=\"k-icon k-i-#=data.dataItem.value > 0 ? \"arrow-60-up\" : data.dataItem.value < 0 ? \"arrow-60-down\" : \"minus\"#\" title=\"#:data.dataItem.value#\"></span>', DATACELL_TEMPLATE = '#= data.dataItem ? kendo.htmlEncode(data.dataItem.fmtValue || data.dataItem.value) || \" \" : \" \" #', LAYOUT_TABLE = '<table class=\"k-pivot-layout\">' + '<tr>' + '<td>' + '<div class=\"k-pivot-rowheaders\"></div>' + '</td>' + '<td>' + '<div class=\"k-pivot-table k-state-default\"></div>' + '</td>' + '</tr>' + '</table>';\n function normalizeMeasures(measure) {\n var descriptor = typeof measure === 'string' ? [{ name: measure }] : measure;\n var descriptors = toString.call(descriptor) === '[object Array]' ? descriptor : descriptor !== undefined ? [descriptor] : [];\n return map(descriptors, function (d) {\n if (typeof d === 'string') {\n return { name: d };\n }\n return {\n name: d.name,\n type: d.type\n };\n });\n }\n function normalizeMembers(member) {\n var descriptor = typeof member === 'string' ? [{\n name: [member],\n expand: false\n }] : member;\n var descriptors = toString.call(descriptor) === '[object Array]' ? descriptor : descriptor !== undefined ? [descriptor] : [];\n return map(descriptors, function (d) {\n if (typeof d === 'string') {\n return {\n name: [d],\n expand: false\n };\n }\n return {\n name: toString.call(d.name) === '[object Array]' ? d.name.slice() : [d.name],\n expand: d.expand\n };\n });\n }\n function normalizeName(name) {\n if (name.indexOf(' ') !== -1) {\n name = '[\"' + name + '\"]';\n }\n return name;\n }\n function accumulateMembers(accumulator, rootTuple, tuple, level) {\n var idx, length;\n var children;\n var member;\n if (!tuple) {\n tuple = rootTuple;\n }\n if (!level) {\n level = 0;\n }\n member = tuple.members[level];\n if (!member || member.measure) {\n return;\n }\n children = member.children;\n length = children.length;\n if (tuple === rootTuple) {\n accumulator[kendo.stringify([member.name])] = !!length;\n } else if (length) {\n accumulator[kendo.stringify(buildPath(tuple, level))] = true;\n }\n if (length) {\n for (idx = 0; idx < length; idx++) {\n accumulateMembers(accumulator, rootTuple, children[idx], level);\n }\n }\n accumulateMembers(accumulator, rootTuple, tuple, level + 1);\n }\n function descriptorsForAxes(tuples) {\n var result = {};\n if (tuples.length) {\n accumulateMembers(result, tuples[0]);\n }\n var descriptors = [];\n for (var k in result) {\n descriptors.push({\n name: $.parseJSON(k),\n expand: result[k]\n });\n }\n return descriptors;\n }\n function addMissingPathMembers(members, axis) {\n var tuples = axis.tuples || [];\n var firstTuple = tuples[0];\n if (firstTuple && members.length < firstTuple.members.length) {\n var tupleMembers = firstTuple.members;\n for (var idx = 0; idx < tupleMembers.length; idx++) {\n if (tupleMembers[idx].measure) {\n continue;\n }\n var found = false;\n for (var j = 0; j < members.length; j++) {\n if (getName(members[j]).indexOf(tupleMembers[idx].hierarchy) === 0) {\n found = true;\n break;\n }\n }\n if (!found) {\n members.push({\n name: [tupleMembers[idx].name],\n expand: false\n });\n }\n }\n }\n }\n function tupleToDescriptors(tuple) {\n var result = [];\n var members = tuple.members;\n for (var idx = 0; idx < members.length; idx++) {\n if (members[idx].measure) {\n continue;\n }\n result.push({\n name: [members[idx].name],\n expand: members[idx].children.length > 0\n });\n }\n return result;\n }\n function descriptorsForMembers(axis, members, measures) {\n axis = axis || {};\n addMissingPathMembers(members, axis);\n if (measures.length > 1) {\n members.push({\n name: MEASURES,\n measure: true,\n children: normalizeMembers(measures)\n });\n }\n var tupletoSearch = { members: members };\n if (axis.tuples) {\n var result = findExistingTuple(axis.tuples, tupletoSearch);\n if (result.tuple) {\n members = tupleToDescriptors(result.tuple);\n }\n }\n return members;\n }\n function createAggregateGetter(m) {\n var measureGetter = kendo.getter(m.field, true);\n return function (aggregatorContext, state) {\n return m.aggregate(measureGetter(aggregatorContext.dataItem), state, aggregatorContext);\n };\n }\n function isNumber(val) {\n return typeof val === 'number' && !isNaN(val);\n }\n function isDate(val) {\n return val && val.getTime;\n }\n var functions = {\n sum: function (value, state) {\n var accumulator = state.accumulator;\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n return accumulator;\n },\n count: function (value, state) {\n return (state.accumulator || 0) + 1;\n },\n average: {\n aggregate: function (value, state) {\n var accumulator = state.accumulator;\n if (state.count === undefined) {\n state.count = 0;\n }\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n if (isNumber(value)) {\n state.count++;\n }\n return accumulator;\n },\n result: function (state) {\n var accumulator = state.accumulator;\n if (isNumber(accumulator)) {\n accumulator = accumulator / state.count;\n }\n return accumulator;\n }\n },\n max: function (value, state) {\n var accumulator = state.accumulator;\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n if (accumulator < value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n },\n min: function (value, state) {\n var accumulator = state.accumulator;\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n if (accumulator > value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n }\n };\n var PivotCubeBuilder = Class.extend({\n init: function (options) {\n this.options = extend({}, this.options, options);\n this.dimensions = this._normalizeDescriptors('field', this.options.dimensions);\n this.measures = this._normalizeDescriptors('name', this.options.measures);\n },\n _normalizeDescriptors: function (keyField, descriptors) {\n descriptors = descriptors || {};\n var fields = {};\n var field;\n if (toString.call(descriptors) === '[object Array]') {\n for (var idx = 0, length = descriptors.length; idx < length; idx++) {\n field = descriptors[idx];\n if (typeof field === 'string') {\n fields[field] = {};\n } else if (field[keyField]) {\n fields[field[keyField]] = field;\n }\n }\n descriptors = fields;\n }\n return descriptors;\n },\n _rootTuples: function (rootNames, measureAggregators) {\n var aggregatorsLength = measureAggregators.length || 1;\n var dimensionsSchema = this.dimensions || [];\n var root, name, parts;\n var measureIdx = 0;\n var idx;\n var rootNamesLength = rootNames.length;\n var result = [];\n var keys = [];\n if (rootNamesLength || measureAggregators.length) {\n for (measureIdx = 0; measureIdx < aggregatorsLength; measureIdx++) {\n root = { members: [] };\n for (idx = 0; idx < rootNamesLength; idx++) {\n name = rootNames[idx];\n parts = name.split('&');\n root.members[root.members.length] = {\n children: [],\n caption: (dimensionsSchema[name] || {}).caption || 'All',\n name: name,\n levelName: name,\n levelNum: '0',\n hasChildren: true,\n parentName: parts.length > 1 ? parts[0] : undefined,\n hierarchy: name\n };\n }\n if (aggregatorsLength > 1) {\n root.members[root.members.length] = {\n children: [],\n caption: measureAggregators[measureIdx].caption,\n name: measureAggregators[measureIdx].descriptor.name,\n levelName: 'MEASURES',\n levelNum: '0',\n hasChildren: false,\n parentName: undefined,\n hierarchy: 'MEASURES'\n };\n }\n result[result.length] = root;\n }\n keys.push(ROW_TOTAL_KEY);\n }\n return {\n keys: keys,\n tuples: result\n };\n },\n _expandedTuples: function (map, expanded, measureAggregators) {\n var aggregatorsLength = measureAggregators.length || 1;\n var dimensionsSchema = this.dimensions || [];\n var measureIdx;\n var tuple;\n var key;\n var mapItem;\n var current;\n var currentKeys;\n var accumulator = [];\n var accumulatorKeys = [];\n var memberInfo;\n var expandedNames;\n var parts;\n var name;\n var idx;\n for (key in map) {\n mapItem = map[key];\n memberInfo = this._findExpandedMember(expanded, mapItem.uniquePath);\n current = accumulator[memberInfo.index] || [];\n currentKeys = accumulatorKeys[memberInfo.index] || [];\n expandedNames = memberInfo.member.names;\n for (measureIdx = 0; measureIdx < aggregatorsLength; measureIdx++) {\n tuple = { members: [] };\n for (idx = 0; idx < expandedNames.length; idx++) {\n if (idx === memberInfo.member.expandedIdx) {\n tuple.members[tuple.members.length] = {\n children: [],\n caption: mapItem.value,\n name: mapItem.name,\n hasChildren: false,\n levelNum: 1,\n levelName: mapItem.parentName + mapItem.name,\n parentName: mapItem.parentName,\n hierarchy: mapItem.parentName + mapItem.name\n };\n if (measureIdx === 0) {\n currentKeys.push(buildPath(tuple, idx).join(''));\n }\n } else {\n name = expandedNames[idx];\n parts = name.split('&');\n tuple.members[tuple.members.length] = {\n children: [],\n caption: (dimensionsSchema[name] || {}).caption || 'All',\n name: name,\n levelName: name,\n levelNum: '0',\n hasChildren: true,\n parentName: parts.length > 1 ? parts[0] : undefined,\n hierarchy: name\n };\n }\n }\n if (aggregatorsLength > 1) {\n tuple.members[tuple.members.length] = {\n children: [],\n caption: measureAggregators[measureIdx].caption,\n name: measureAggregators[measureIdx].descriptor.name,\n levelName: 'MEASURES',\n levelNum: '0',\n hasChildren: true,\n parentName: undefined,\n hierarchy: 'MEASURES'\n };\n }\n current[current.length] = tuple;\n }\n accumulator[memberInfo.index] = current;\n accumulatorKeys[memberInfo.index] = currentKeys;\n }\n return {\n keys: accumulatorKeys,\n tuples: accumulator\n };\n },\n _findExpandedMember: function (members, parentName) {\n for (var idx = 0; idx < members.length; idx++) {\n if (members[idx].uniquePath === parentName) {\n return {\n member: members[idx],\n index: idx\n };\n }\n }\n },\n _asTuples: function (map, descriptor, measureAggregators) {\n measureAggregators = measureAggregators || [];\n var rootInfo = this._rootTuples(descriptor.root, measureAggregators);\n var expandedInfo = this._expandedTuples(map, descriptor.expanded, measureAggregators);\n return {\n keys: [].concat.apply(rootInfo.keys, expandedInfo.keys),\n tuples: [].concat.apply(rootInfo.tuples, expandedInfo.tuples)\n };\n },\n _measuresInfo: function (measures, rowAxis) {\n var idx = 0;\n var length = measures && measures.length;\n var aggregateNames = [];\n var resultFuncs = {};\n var formats = {};\n var descriptors = this.measures || {};\n var measure;\n var name;\n for (; idx < length; idx++) {\n name = measures[idx].descriptor.name;\n measure = descriptors[name] || {};\n aggregateNames.push(name);\n if (measure.result) {\n resultFuncs[name] = measure.result;\n }\n if (measure.format) {\n formats[name] = measure.format;\n }\n }\n return {\n names: aggregateNames,\n formats: formats,\n resultFuncs: resultFuncs,\n rowAxis: rowAxis\n };\n },\n _toDataArray: function (map, measuresInfo, rowKeys, columnKeys) {\n var result = [];\n var aggregates;\n var name, i, j, k, n;\n var row, column, columnKey;\n var rowMeasureNamesLength = 1;\n var rowMeasureNames = [];\n var columnMeasureNames;\n var rowLength = rowKeys.length || 1;\n var columnLength = columnKeys.length || 1;\n if (measuresInfo.rowAxis) {\n rowMeasureNames = measuresInfo.names;\n rowMeasureNamesLength = rowMeasureNames.length;\n } else {\n columnMeasureNames = measuresInfo.names;\n }\n for (i = 0; i < rowLength; i++) {\n row = map[rowKeys[i] || ROW_TOTAL_KEY];\n for (n = 0; n < rowMeasureNamesLength; n++) {\n if (measuresInfo.rowAxis) {\n columnMeasureNames = [rowMeasureNames[n]];\n }\n for (j = 0; j < columnLength; j++) {\n columnKey = columnKeys[j] || ROW_TOTAL_KEY;\n column = row.items[columnKey];\n if (columnKey === ROW_TOTAL_KEY) {\n aggregates = row.aggregates;\n } else {\n aggregates = column ? column.aggregates : {};\n }\n for (k = 0; k < columnMeasureNames.length; k++) {\n name = columnMeasureNames[k];\n this._addData(result, aggregates[name], measuresInfo.formats[name], measuresInfo.resultFuncs[name]);\n }\n }\n }\n }\n return result;\n },\n _addData: function (result, value, format, resultFunc) {\n var fmtValue = '';\n var ordinal;\n if (value) {\n value = resultFunc ? resultFunc(value) : value.accumulator;\n fmtValue = format ? kendo.format(format, value) : value;\n }\n ordinal = result.length;\n result[ordinal] = {\n ordinal: ordinal,\n value: value || '',\n fmtValue: fmtValue\n };\n },\n _matchDescriptors: function (dataItem, descriptor, getters) {\n var parts;\n var parentField;\n var expectedValue;\n var names = descriptor.names;\n var idx = descriptor.expandedIdx;\n var value;\n while (idx > 0) {\n parts = names[--idx].split('&');\n if (parts.length > 1) {\n parentField = parts[0];\n expectedValue = parts[1];\n value = getters[parentField](dataItem);\n value = value !== undefined && value !== null ? value.toString() : value;\n if (value != expectedValue) {\n return false;\n }\n }\n }\n return true;\n },\n _calculateAggregate: function (measureAggregators, aggregatorContext, totalItem) {\n var result = {};\n var state;\n var name;\n for (var measureIdx = 0; measureIdx < measureAggregators.length; measureIdx++) {\n name = measureAggregators[measureIdx].descriptor.name;\n state = totalItem.aggregates[name] || {};\n state.accumulator = measureAggregators[measureIdx].aggregator(aggregatorContext, state);\n result[name] = state;\n }\n return result;\n },\n _processColumns: function (measureAggregators, descriptors, getters, columns, aggregatorContext, rowTotal, state, updateColumn) {\n var value;\n var descriptor;\n var column;\n var totalItem;\n var key, name, parentName, path;\n var dataItem = aggregatorContext.dataItem;\n var idx = 0;\n for (; idx < descriptors.length; idx++) {\n descriptor = descriptors[idx];\n if (!this._matchDescriptors(dataItem, descriptor, getters)) {\n continue;\n }\n path = descriptor.names.slice(0, descriptor.expandedIdx).join('');\n name = descriptor.names[descriptor.expandedIdx];\n value = getters[name](dataItem);\n value = value !== undefined && value !== null ? value.toString() : value;\n parentName = name;\n name = name + '&' + value;\n key = path + name;\n column = columns[key] || {\n index: state.columnIndex,\n parentName: parentName,\n name: name,\n uniquePath: path + parentName,\n value: value\n };\n totalItem = rowTotal.items[key] || { aggregates: {} };\n rowTotal.items[key] = {\n index: column.index,\n aggregates: this._calculateAggregate(measureAggregators, aggregatorContext, totalItem)\n };\n if (updateColumn) {\n if (!columns[key]) {\n state.columnIndex++;\n }\n columns[key] = column;\n }\n }\n },\n _measureAggregators: function (options) {\n var measureDescriptors = options.measures || [];\n var measures = this.measures || {};\n var aggregators = [];\n var descriptor, measure, idx, length;\n var defaultAggregate, aggregate;\n if (measureDescriptors.length) {\n for (idx = 0, length = measureDescriptors.length; idx < length; idx++) {\n descriptor = measureDescriptors[idx];\n measure = measures[descriptor.name];\n defaultAggregate = null;\n if (measure) {\n aggregate = measure.aggregate;\n if (typeof aggregate === 'string') {\n defaultAggregate = functions[aggregate.toLowerCase()];\n if (!defaultAggregate) {\n throw new Error('There is no such aggregate function');\n }\n measure.aggregate = defaultAggregate.aggregate || defaultAggregate;\n measure.result = defaultAggregate.result;\n }\n aggregators.push({\n descriptor: descriptor,\n caption: measure.caption,\n result: measure.result,\n aggregator: createAggregateGetter(measure)\n });\n }\n }\n } else {\n aggregators.push({\n descriptor: { name: 'default' },\n caption: 'default',\n aggregator: function () {\n return 1;\n }\n });\n }\n return aggregators;\n },\n _buildGetters: function (names) {\n var result = {};\n var parts;\n var name;\n for (var idx = 0; idx < names.length; idx++) {\n name = names[idx];\n parts = name.split('&');\n if (parts.length > 1) {\n result[parts[0]] = kendo.getter(parts[0], true);\n } else {\n result[name] = kendo.getter(normalizeName(name), true);\n }\n }\n return result;\n },\n _parseDescriptors: function (descriptors) {\n var parsedDescriptors = parseDescriptors(descriptors);\n var rootNames = getRootNames(parsedDescriptors.root);\n var expanded = parsedDescriptors.expanded;\n var result = [];\n for (var idx = 0; idx < expanded.length; idx++) {\n result.push(mapNames(expanded[idx].name, rootNames));\n }\n return {\n root: rootNames,\n expanded: result\n };\n },\n _filter: function (data, filter) {\n if (!filter) {\n return data;\n }\n var expr;\n var idx = 0;\n var filters = filter.filters;\n for (; idx < filters.length; idx++) {\n expr = filters[idx];\n if (expr.operator === 'in') {\n filters[idx] = this._normalizeFilter(expr);\n }\n }\n return new kendo.data.Query(data).filter(filter).data;\n },\n _normalizeFilter: function (filter) {\n var value = filter.value.split(',');\n var result = [];\n if (!value.length) {\n return value;\n }\n for (var idx = 0; idx < value.length; idx++) {\n result.push({\n field: filter.field,\n operator: 'eq',\n value: value[idx]\n });\n }\n return {\n logic: 'or',\n filters: result\n };\n },\n process: function (data, options) {\n data = data || [];\n options = options || {};\n data = this._filter(data, options.filter);\n var measures = options.measures || [];\n var measuresRowAxis = options.measuresAxis === 'rows';\n var columnDescriptors = options.columns || [];\n var rowDescriptors = options.rows || [];\n if (!columnDescriptors.length && rowDescriptors.length && (!measures.length || measures.length && measuresRowAxis)) {\n columnDescriptors = rowDescriptors;\n rowDescriptors = [];\n measuresRowAxis = false;\n }\n if (!columnDescriptors.length && !rowDescriptors.length) {\n measuresRowAxis = false;\n }\n if (!columnDescriptors.length && measures.length) {\n columnDescriptors = normalizeMembers(options.measures);\n }\n columnDescriptors = this._parseDescriptors(columnDescriptors);\n rowDescriptors = this._parseDescriptors(rowDescriptors);\n var aggregatedData = {};\n var columns = {};\n var rows = {};\n var rowValue;\n var state = { columnIndex: 0 };\n var measureAggregators = this._measureAggregators(options);\n var columnGetters = this._buildGetters(columnDescriptors.root);\n var rowGetters = this._buildGetters(rowDescriptors.root);\n var processed = false;\n var expandedColumns = columnDescriptors.expanded;\n var expandedRows = rowDescriptors.expanded;\n var dataItem;\n var aggregatorContext;\n var hasExpandedRows = expandedRows.length !== 0;\n var rowIdx, rowDescriptor, rowName, rowTotal;\n var key, path, parentName, value;\n var columnsInfo, rowsInfo;\n var length = data.length;\n var idx = 0;\n if (columnDescriptors.root.length || rowDescriptors.root.length) {\n processed = true;\n for (idx = 0; idx < length; idx++) {\n dataItem = data[idx];\n aggregatorContext = {\n dataItem: dataItem,\n index: idx\n };\n rowTotal = aggregatedData[ROW_TOTAL_KEY] || {\n items: {},\n aggregates: {}\n };\n this._processColumns(measureAggregators, expandedColumns, columnGetters, columns, aggregatorContext, rowTotal, state, !hasExpandedRows);\n rowTotal.aggregates = this._calculateAggregate(measureAggregators, aggregatorContext, rowTotal);\n aggregatedData[ROW_TOTAL_KEY] = rowTotal;\n for (rowIdx = 0; rowIdx < expandedRows.length; rowIdx++) {\n rowDescriptor = expandedRows[rowIdx];\n if (!this._matchDescriptors(dataItem, rowDescriptor, rowGetters)) {\n this._processColumns(measureAggregators, expandedColumns, columnGetters, columns, aggregatorContext, {\n items: {},\n aggregates: {}\n }, state, true);\n continue;\n }\n path = rowDescriptor.names.slice(0, rowDescriptor.expandedIdx).join('');\n rowName = rowDescriptor.names[rowDescriptor.expandedIdx];\n parentName = rowName;\n rowValue = rowGetters[rowName](dataItem);\n rowValue = rowValue !== undefined ? rowValue.toString() : rowValue;\n rowName = rowName + '&' + rowValue;\n key = path + rowName;\n rows[key] = {\n uniquePath: path + parentName,\n parentName: parentName,\n name: rowName,\n value: rowValue\n };\n value = aggregatedData[key] || {\n items: {},\n aggregates: {}\n };\n this._processColumns(measureAggregators, expandedColumns, columnGetters, columns, aggregatorContext, value, state, true);\n value.aggregates = this._calculateAggregate(measureAggregators, aggregatorContext, value);\n aggregatedData[key] = value;\n }\n }\n }\n if (processed && length) {\n if (measureAggregators.length > 1 && (!options.columns || !options.columns.length)) {\n columnDescriptors = {\n root: [],\n expanded: []\n };\n }\n columnsInfo = this._asTuples(columns, columnDescriptors, measuresRowAxis ? [] : measureAggregators);\n rowsInfo = this._asTuples(rows, rowDescriptors, measuresRowAxis ? measureAggregators : []);\n columns = columnsInfo.tuples;\n rows = rowsInfo.tuples;\n aggregatedData = this._toDataArray(aggregatedData, this._measuresInfo(measureAggregators, measuresRowAxis), rowsInfo.keys, columnsInfo.keys);\n } else {\n aggregatedData = columns = rows = [];\n }\n return {\n axes: {\n columns: { tuples: columns },\n rows: { tuples: rows }\n },\n data: aggregatedData\n };\n }\n });\n var PivotTransport = Class.extend({\n init: function (options, transport) {\n this.transport = transport;\n this.options = transport.options || {};\n if (!this.transport.discover) {\n if (isFunction(options.discover)) {\n this.discover = options.discover;\n }\n }\n },\n read: function (options) {\n return this.transport.read(options);\n },\n update: function (options) {\n return this.transport.update(options);\n },\n create: function (options) {\n return this.transport.create(options);\n },\n destroy: function (options) {\n return this.transport.destroy(options);\n },\n discover: function (options) {\n if (this.transport.discover) {\n return this.transport.discover(options);\n }\n options.success({});\n },\n catalog: function (val) {\n var options = this.options || {};\n if (val === undefined) {\n return (options.connection || {}).catalog;\n }\n var connection = options.connection || {};\n connection.catalog = val;\n this.options.connection = connection;\n $.extend(this.transport.options, { connection: connection });\n },\n cube: function (val) {\n var options = this.options || {};\n if (val === undefined) {\n return (options.connection || {}).cube;\n }\n var connection = options.connection || {};\n connection.cube = val;\n this.options.connection = connection;\n extend(true, this.transport.options, { connection: connection });\n }\n });\n var PivotDataSource = DataSource.extend({\n init: function (options) {\n var cube = ((options || {}).schema || {}).cube;\n var measuresAxis = 'columns';\n var measures;\n var schema = {\n axes: identity,\n cubes: identity,\n catalogs: identity,\n measures: identity,\n dimensions: identity,\n hierarchies: identity,\n levels: identity,\n members: identity\n };\n if (cube) {\n schema = $.extend(schema, this._cubeSchema(cube));\n this.cubeBuilder = new PivotCubeBuilder(cube);\n }\n DataSource.fn.init.call(this, extend(true, {}, { schema: schema }, options));\n this.transport = new PivotTransport(this.options.transport || {}, this.transport);\n this._columns = normalizeMembers(this.options.columns);\n this._rows = normalizeMembers(this.options.rows);\n measures = this.options.measures || [];\n if (toString.call(measures) === '[object Object]') {\n measuresAxis = measures.axis || 'columns';\n measures = measures.values || [];\n }\n this._measures = normalizeMeasures(measures);\n this._measuresAxis = measuresAxis;\n this._skipNormalize = 0;\n this._axes = {};\n },\n _cubeSchema: function (cube) {\n return {\n dimensions: function () {\n var result = [];\n var dimensions = cube.dimensions;\n for (var key in dimensions) {\n result.push({\n name: key,\n caption: dimensions[key].caption || key,\n uniqueName: key,\n defaultHierarchy: key,\n type: 1\n });\n }\n if (cube.measures) {\n result.push({\n name: MEASURES,\n caption: MEASURES,\n uniqueName: MEASURES,\n type: 2\n });\n }\n return result;\n },\n hierarchies: function () {\n return [];\n },\n measures: function () {\n var result = [];\n var measures = cube.measures;\n for (var key in measures) {\n result.push({\n name: key,\n caption: key,\n uniqueName: key,\n aggregator: key\n });\n }\n return result;\n },\n members: $.proxy(function (response, restrictions) {\n var name = restrictions.levelUniqueName || restrictions.memberUniqueName;\n var schemaData = this.options.schema.data;\n var dataGetter = isFunction(schemaData) ? schemaData : kendo.getter(schemaData, true);\n var data = this.options.data && dataGetter(this.options.data) || this._rawData || [];\n var result = [];\n var getter;\n var value;\n var idx = 0;\n var distinct = {};\n if (name) {\n name = name.split('.')[0];\n }\n if (!restrictions.treeOp) {\n result.push({\n caption: cube.dimensions[name].caption || name,\n childrenCardinality: '1',\n dimensionUniqueName: name,\n hierarchyUniqueName: name,\n levelUniqueName: name,\n name: name,\n uniqueName: name\n });\n return result;\n }\n getter = kendo.getter(normalizeName(name), true);\n for (; idx < data.length; idx++) {\n value = getter(data[idx]);\n if ((value || value === 0) && !distinct[value]) {\n distinct[value] = true;\n result.push({\n caption: value,\n childrenCardinality: '0',\n dimensionUniqueName: name,\n hierarchyUniqueName: name,\n levelUniqueName: name,\n name: value,\n uniqueName: value\n });\n }\n }\n return result;\n }, this)\n };\n },\n options: {\n serverSorting: true,\n serverPaging: true,\n serverFiltering: true,\n serverGrouping: true,\n serverAggregates: true\n },\n catalog: function (val) {\n if (val === undefined) {\n return this.transport.catalog();\n }\n this.transport.catalog(val);\n this._mergeState({});\n this._axes = {};\n this.data([]);\n },\n cube: function (val) {\n if (val === undefined) {\n return this.transport.cube();\n }\n this.transport.cube(val);\n this._axes = {};\n this._mergeState({});\n this.data([]);\n },\n axes: function () {\n return this._axes;\n },\n columns: function (val) {\n if (val === undefined) {\n return this._columns;\n }\n this._skipNormalize += 1;\n this._clearAxesData = true;\n this._columns = normalizeMembers(val);\n this.query({\n columns: val,\n rows: this.rowsAxisDescriptors(),\n measures: this.measures(),\n sort: this.sort(),\n filter: this.filter()\n });\n },\n rows: function (val) {\n if (val === undefined) {\n return this._rows;\n }\n this._skipNormalize += 1;\n this._clearAxesData = true;\n this._rows = normalizeMembers(val);\n this.query({\n columns: this.columnsAxisDescriptors(),\n rows: val,\n measures: this.measures(),\n sort: this.sort(),\n filter: this.filter()\n });\n },\n measures: function (val) {\n if (val === undefined) {\n return this._measures;\n }\n this._skipNormalize += 1;\n this._clearAxesData = true;\n this.query({\n columns: this.columnsAxisDescriptors(),\n rows: this.rowsAxisDescriptors(),\n measures: normalizeMeasures(val),\n sort: this.sort(),\n filter: this.filter()\n });\n },\n measuresAxis: function () {\n return this._measuresAxis || 'columns';\n },\n _expandPath: function (path, axis) {\n var origin = axis === 'columns' ? 'columns' : 'rows';\n var other = axis === 'columns' ? 'rows' : 'columns';\n var members = normalizeMembers(path);\n var memberToExpand = getName(members[members.length - 1]);\n this._lastExpanded = origin;\n members = descriptorsForMembers(this.axes()[origin], members, this.measures());\n for (var idx = 0; idx < members.length; idx++) {\n var memberName = getName(members[idx]);\n if (memberName === memberToExpand) {\n if (members[idx].expand) {\n return;\n }\n members[idx].expand = true;\n } else {\n members[idx].expand = false;\n }\n }\n var descriptors = {};\n descriptors[origin] = members;\n descriptors[other] = this._descriptorsForAxis(other);\n this._query(descriptors);\n },\n _descriptorsForAxis: function (axis) {\n var axes = this.axes();\n var descriptors = this[axis]() || [];\n if (axes && axes[axis] && axes[axis].tuples && axes[axis].tuples[0]) {\n descriptors = descriptorsForAxes(axes[axis].tuples || []);\n }\n return descriptors;\n },\n columnsAxisDescriptors: function () {\n return this._descriptorsForAxis('columns');\n },\n rowsAxisDescriptors: function () {\n return this._descriptorsForAxis('rows');\n },\n _process: function (data, e) {\n this._view = data;\n e = e || {};\n e.items = e.items || this._view;\n this.trigger(CHANGE, e);\n },\n _query: function (options) {\n var that = this;\n if (!options) {\n this._skipNormalize += 1;\n this._clearAxesData = true;\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 columns: this.columnsAxisDescriptors(),\n rows: this.rowsAxisDescriptors(),\n measures: this.measures()\n }, options));\n },\n query: function (options) {\n var state = this._mergeState(options);\n if (this._data.length && this.cubeBuilder) {\n this._params(state);\n this._updateLocalData(this._pristineData);\n return $.Deferred().resolve().promise();\n }\n return this.read(state);\n },\n _mergeState: function (options) {\n options = DataSource.fn._mergeState.call(this, options);\n if (options !== undefined) {\n this._measures = normalizeMeasures(options.measures);\n if (options.columns) {\n options.columns = normalizeMembers(options.columns);\n } else if (!options.columns) {\n this._columns = [];\n }\n if (options.rows) {\n options.rows = normalizeMembers(options.rows);\n } else if (!options.rows) {\n this._rows = [];\n }\n }\n return options;\n },\n filter: function (val) {\n if (val === undefined) {\n return this._filter;\n }\n this._skipNormalize += 1;\n this._clearAxesData = true;\n this._query({\n filter: val,\n page: 1\n });\n },\n expandColumn: function (path) {\n this._expandPath(path, 'columns');\n },\n expandRow: function (path) {\n this._expandPath(path, 'rows');\n },\n success: function (data) {\n var originalData;\n if (this.cubeBuilder) {\n originalData = (this.reader.data(data) || []).slice(0);\n }\n DataSource.fn.success.call(this, data);\n if (originalData) {\n this._pristineData = originalData;\n }\n },\n _processResult: function (data, axes) {\n if (this.cubeBuilder) {\n var processedData = this.cubeBuilder.process(data, this._requestData);\n data = processedData.data;\n axes = processedData.axes;\n }\n var columnIndexes, rowIndexes;\n var tuples, resultAxis, measures, axisToSkip;\n var columnDescriptors = this.columns();\n var rowDescriptors = this.rows();\n var hasColumnTuples = axes.columns && axes.columns.tuples;\n if (!columnDescriptors.length && rowDescriptors.length && hasColumnTuples && (this._rowMeasures().length || !this.measures().length)) {\n axes = {\n columns: {},\n rows: axes.columns\n };\n }\n if (!columnDescriptors.length && !rowDescriptors.length && this.measuresAxis() === 'rows' && hasColumnTuples) {\n axes = {\n columns: {},\n rows: axes.columns\n };\n }\n this._axes = {\n columns: normalizeAxis(this._axes.columns),\n rows: normalizeAxis(this._axes.rows)\n };\n axes = {\n columns: normalizeAxis(axes.columns),\n rows: normalizeAxis(axes.rows)\n };\n columnIndexes = this._normalizeTuples(axes.columns.tuples, this._axes.columns.tuples, columnDescriptors, this._columnMeasures());\n rowIndexes = this._normalizeTuples(axes.rows.tuples, this._axes.rows.tuples, rowDescriptors, this._rowMeasures());\n this._skipNormalize -= 1;\n if (!this.cubeBuilder) {\n data = this._normalizeData({\n columnsLength: axes.columns.tuples.length,\n rowsLength: axes.rows.tuples.length,\n columnIndexes: columnIndexes,\n rowIndexes: rowIndexes,\n data: data\n });\n }\n if (this._lastExpanded == 'rows') {\n tuples = axes.columns.tuples;\n measures = this._columnMeasures();\n resultAxis = validateAxis(axes.columns, this._axes.columns, measures);\n if (resultAxis) {\n axisToSkip = 'columns';\n axes.columns = resultAxis;\n adjustDataByColumn(tuples, resultAxis.tuples, axes.rows.tuples.length, measures, data);\n if (!this.cubeBuilder) {\n data = this._normalizeData({\n columnsLength: membersCount(axes.columns.tuples, measures),\n rowsLength: axes.rows.tuples.length,\n data: data\n });\n }\n }\n } else if (this._lastExpanded == 'columns') {\n tuples = axes.rows.tuples;\n measures = this._rowMeasures();\n resultAxis = validateAxis(axes.rows, this._axes.rows, measures);\n if (resultAxis) {\n axisToSkip = 'rows';\n axes.rows = resultAxis;\n adjustDataByRow(tuples, resultAxis.tuples, axes.columns.tuples.length, measures, data);\n if (!this.cubeBuilder) {\n data = this._normalizeData({\n columnsLength: membersCount(axes.rows.tuples, measures),\n rowsLength: axes.columns.tuples.length,\n data: data\n });\n }\n }\n }\n this._lastExpanded = null;\n var result = this._mergeAxes(axes, data, axisToSkip);\n this._axes = result.axes;\n return result.data;\n },\n _readData: function (data) {\n var axes = this.reader.axes(data);\n var newData = this.reader.data(data);\n if (this.cubeBuilder) {\n this._rawData = newData;\n }\n return this._processResult(newData, axes);\n },\n _createTuple: function (tuple, measure, buildRoot) {\n var members = tuple.members;\n var length = members.length;\n var root = { members: [] };\n var levelName, levelNum;\n var name, parentName;\n var hasChildren;\n var hierarchy;\n var caption;\n var member;\n var idx = 0;\n if (measure) {\n length -= 1;\n }\n for (; idx < length; idx++) {\n member = members[idx];\n levelNum = Number(member.levelNum);\n name = member.name;\n parentName = member.parentName;\n caption = member.caption || name;\n hasChildren = member.hasChildren;\n hierarchy = member.hierarchy;\n levelName = member.levelName;\n if (buildRoot) {\n caption = 'All';\n if (levelNum === 0) {\n parentName = member.name;\n } else {\n levelNum -= 1;\n }\n hasChildren = true;\n name = hierarchy = levelName = parentName;\n }\n root.members.push({\n name: name,\n children: [],\n caption: caption,\n levelName: levelName,\n levelNum: levelNum.toString(),\n hasChildren: hasChildren,\n hierarchy: hierarchy,\n parentName: !buildRoot ? parentName : ''\n });\n }\n if (measure) {\n root.members.push({\n name: measure.name,\n children: []\n });\n }\n return root;\n },\n _hasRoot: function (target, source, descriptors) {\n if (source.length) {\n return findExistingTuple(source, target).tuple;\n }\n var members = target.members;\n var member;\n var descriptor;\n var isRoot = true;\n var levelNum;\n for (var idx = 0, length = members.length; idx < length; idx++) {\n member = members[idx];\n levelNum = Number(member.levelNum) || 0;\n descriptor = descriptors[idx];\n if (!(levelNum === 0 || descriptor && member.name === getName(descriptor))) {\n isRoot = false;\n break;\n }\n }\n return isRoot;\n },\n _mergeAxes: function (sourceAxes, data, axisToSkip) {\n var columnMeasures = this._columnMeasures();\n var rowMeasures = this._rowMeasures();\n var axes = this.axes();\n var startIndex, tuples;\n var oldRowsLength = membersCount(axes.rows.tuples, rowMeasures);\n var newRowsLength = sourceAxes.rows.tuples.length;\n var oldColumnsLength = membersCount(axes.columns.tuples, columnMeasures);\n var newColumnsLength = sourceAxes.columns.tuples.length;\n if (axisToSkip == 'columns') {\n newColumnsLength = oldColumnsLength;\n tuples = sourceAxes.columns.tuples;\n } else {\n tuples = parseSource(sourceAxes.columns.tuples, columnMeasures);\n data = prepareDataOnColumns(tuples, data);\n }\n var mergedColumns = mergeTuples(axes.columns.tuples, tuples, columnMeasures);\n if (axisToSkip == 'rows') {\n newRowsLength = membersCount(sourceAxes.rows.tuples, rowMeasures);\n tuples = sourceAxes.rows.tuples;\n } else {\n tuples = parseSource(sourceAxes.rows.tuples, rowMeasures);\n data = prepareDataOnRows(tuples, data);\n }\n var mergedRows = mergeTuples(axes.rows.tuples, tuples, rowMeasures);\n axes.columns.tuples = mergedColumns.tuples;\n axes.rows.tuples = mergedRows.tuples;\n if (oldColumnsLength !== membersCount(axes.columns.tuples, columnMeasures)) {\n startIndex = mergedColumns.index + findDataIndex(mergedColumns.parsedRoot, mergedColumns.memberIndex, columnMeasures);\n var offset = oldColumnsLength + newColumnsLength;\n data = this._mergeColumnData(data, startIndex, newRowsLength, newColumnsLength, offset);\n } else if (oldRowsLength !== membersCount(axes.rows.tuples, rowMeasures)) {\n startIndex = mergedRows.index + findDataIndex(mergedRows.parsedRoot, mergedRows.memberIndex, rowMeasures);\n data = this._mergeRowData(data, startIndex, newRowsLength, newColumnsLength);\n }\n if (axes.columns.tuples.length === 0 && axes.rows.tuples.length === 0) {\n data = [];\n }\n return {\n axes: axes,\n data: data\n };\n },\n _mergeColumnData: function (newData, columnIndex, rowsLength, columnsLength, offset) {\n var data = this.data().toJSON();\n var rowIndex, index, drop = 0, toAdd;\n var columnMeasures = Math.max(this._columnMeasures().length, 1);\n rowsLength = Math.max(rowsLength, 1);\n if (data.length > 0) {\n drop = columnMeasures;\n offset -= columnMeasures;\n }\n for (rowIndex = 0; rowIndex < rowsLength; rowIndex++) {\n index = columnIndex + rowIndex * offset;\n toAdd = newData.splice(0, columnsLength);\n toAdd.splice(0, drop);\n [].splice.apply(data, [\n index,\n 0\n ].concat(toAdd));\n }\n return data;\n },\n _mergeRowData: function (newData, rowIndex, rowsLength, columnsLength) {\n var data = this.data().toJSON();\n var idx, dataIndex, toAdd;\n var rowMeasures = Math.max(this._rowMeasures().length, 1);\n columnsLength = Math.max(columnsLength, 1);\n if (data.length > 0) {\n rowsLength -= rowMeasures;\n newData.splice(0, columnsLength * rowMeasures);\n }\n for (idx = 0; idx < rowsLength; idx++) {\n toAdd = newData.splice(0, columnsLength);\n dataIndex = rowIndex * columnsLength + idx * columnsLength;\n [].splice.apply(data, [\n dataIndex,\n 0\n ].concat(toAdd));\n }\n return data;\n },\n _columnMeasures: function () {\n var measures = this.measures();\n var columnMeasures = [];\n if (this.measuresAxis() === 'columns') {\n if (this.columns().length === 0) {\n columnMeasures = measures;\n } else if (measures.length > 1) {\n columnMeasures = measures;\n }\n }\n return columnMeasures;\n },\n _rowMeasures: function () {\n var measures = this.measures();\n var rowMeasures = [];\n if (this.measuresAxis() === 'rows') {\n if (this.rows().length === 0) {\n rowMeasures = measures;\n } else if (measures.length > 1) {\n rowMeasures = measures;\n }\n }\n return rowMeasures;\n },\n _updateLocalData: function (data, state) {\n if (this.cubeBuilder) {\n if (state) {\n this._requestData = state;\n }\n data = this._processResult(data);\n }\n this._data = this._observe(data);\n this._ranges = [];\n this._addRange(this._data);\n this._total = this._data.length;\n this._pristineTotal = this._total;\n this._process(this._data);\n },\n data: function (value) {\n var that = this;\n if (value !== undefined) {\n this._pristineData = value.slice(0);\n this._updateLocalData(value, {\n columns: this.columns(),\n rows: this.rows(),\n measures: this.measures()\n });\n } else {\n return that._data;\n }\n },\n _normalizeTuples: function (tuples, source, descriptors, measures) {\n var length = measures.length || 1;\n var idx = 0;\n var roots = [];\n var indexes = {};\n var measureIdx = 0;\n var tuple, memberIdx, last;\n if (!tuples.length) {\n return;\n }\n if (this._skipNormalize <= 0 && !this._hasRoot(tuples[0], source, descriptors)) {\n this._skipNormalize = 0;\n for (; idx < length; idx++) {\n roots.push(this._createTuple(tuples[0], measures[idx], true));\n indexes[idx] = idx;\n }\n tuples.splice.apply(tuples, [\n 0,\n tuples.length\n ].concat(roots).concat(tuples));\n idx = length;\n }\n if (measures.length) {\n last = tuple = tuples[idx];\n memberIdx = tuple.members.length - 1;\n while (tuple) {\n if (measureIdx >= length) {\n measureIdx = 0;\n }\n if (tuple.members[memberIdx].name !== measures[measureIdx].name) {\n tuples.splice(idx, 0, this._createTuple(tuple, measures[measureIdx]));\n indexes[idx] = idx;\n }\n idx += 1;\n measureIdx += 1;\n tuple = tuples[idx];\n if (length > measureIdx && (!tuple || tupleName(last, memberIdx - 1) !== tupleName(tuple, memberIdx - 1))) {\n for (; measureIdx < length; measureIdx++) {\n tuples.splice(idx, 0, this._createTuple(last, measures[measureIdx]));\n indexes[idx] = idx;\n idx += 1;\n }\n tuple = tuples[idx];\n }\n last = tuple;\n }\n }\n return indexes;\n },\n _addMissingDataItems: function (result, metadata) {\n while (metadata.rowIndexes[parseInt(result.length / metadata.columnsLength, 10)] !== undefined) {\n for (var idx = 0; idx < metadata.columnsLength; idx++) {\n result = addEmptyDataItem(result);\n }\n }\n while (metadata.columnIndexes[result.length % metadata.columnsLength] !== undefined) {\n result = addEmptyDataItem(result);\n }\n return result;\n },\n _normalizeOrdinals: function (result, dataItem, metadata) {\n var lastOrdinal = metadata.lastOrdinal;\n if (!dataItem) {\n return addEmptyDataItem(result);\n }\n if (dataItem.ordinal - lastOrdinal > 1) {\n lastOrdinal += 1;\n while (lastOrdinal < dataItem.ordinal && result.length < metadata.length) {\n result = this._addMissingDataItems(addEmptyDataItem(result), metadata);\n lastOrdinal += 1;\n }\n }\n dataItem.ordinal = result.length;\n result[result.length] = dataItem;\n return result;\n },\n _normalizeData: function (options) {\n var data = options.data;\n var dataIdx = 0;\n var dataItem;\n var result = [];\n var lastOrdinal;\n var length;\n options.lastOrdinal = 0;\n options.columnIndexes = options.columnIndexes || {};\n options.rowIndexes = options.rowIndexes || {};\n options.columnsLength = options.columnsLength || 1;\n options.rowsLength = options.rowsLength || 1;\n options.length = options.columnsLength * options.rowsLength;\n length = options.length;\n if (data.length === length) {\n return data;\n }\n while (result.length < length) {\n dataItem = data[dataIdx++];\n if (dataItem) {\n lastOrdinal = dataItem.ordinal;\n }\n result = this._normalizeOrdinals(this._addMissingDataItems(result, options), dataItem, options);\n options.lastOrdinal = lastOrdinal;\n }\n return result;\n },\n discover: function (options, converter) {\n var that = this, transport = that.transport;\n return $.Deferred(function (deferred) {\n transport.discover(extend({\n success: function (response) {\n response = that.reader.parse(response);\n if (that._handleCustomErrors(response)) {\n return;\n }\n if (converter) {\n response = converter(response);\n }\n deferred.resolve(response);\n },\n error: function (response, status, error) {\n deferred.reject(response);\n that.error(response, status, error);\n }\n }, options));\n }).promise().done(function () {\n that.trigger('schemaChange');\n });\n },\n schemaMeasures: function () {\n var that = this;\n return that.discover({\n data: {\n command: 'schemaMeasures',\n restrictions: {\n catalogName: that.transport.catalog(),\n cubeName: that.transport.cube()\n }\n }\n }, function (response) {\n return that.reader.measures(response);\n });\n },\n schemaKPIs: function () {\n var that = this;\n return that.discover({\n data: {\n command: 'schemaKPIs',\n restrictions: {\n catalogName: that.transport.catalog(),\n cubeName: that.transport.cube()\n }\n }\n }, function (response) {\n return that.reader.kpis(response);\n });\n },\n schemaDimensions: function () {\n var that = this;\n return that.discover({\n data: {\n command: 'schemaDimensions',\n restrictions: {\n catalogName: that.transport.catalog(),\n cubeName: that.transport.cube()\n }\n }\n }, function (response) {\n return that.reader.dimensions(response);\n });\n },\n schemaHierarchies: function (dimensionName) {\n var that = this;\n return that.discover({\n data: {\n command: 'schemaHierarchies',\n restrictions: {\n catalogName: that.transport.catalog(),\n cubeName: that.transport.cube(),\n dimensionUniqueName: dimensionName\n }\n }\n }, function (response) {\n return that.reader.hierarchies(response);\n });\n },\n schemaLevels: function (hierarchyName) {\n var that = this;\n return that.discover({\n data: {\n command: 'schemaLevels',\n restrictions: {\n catalogName: that.transport.catalog(),\n cubeName: that.transport.cube(),\n hierarchyUniqueName: hierarchyName\n }\n }\n }, function (response) {\n return that.reader.levels(response);\n });\n },\n schemaCubes: function () {\n var that = this;\n return that.discover({\n data: {\n command: 'schemaCubes',\n restrictions: { catalogName: that.transport.catalog() }\n }\n }, function (response) {\n return that.reader.cubes(response);\n });\n },\n schemaCatalogs: function () {\n var that = this;\n return that.discover({ data: { command: 'schemaCatalogs' } }, function (response) {\n return that.reader.catalogs(response);\n });\n },\n schemaMembers: function (restrictions) {\n var that = this;\n var success = function (restrictions) {\n return function (response) {\n return that.reader.members(response, restrictions);\n };\n }(restrictions);\n return that.discover({\n data: {\n command: 'schemaMembers',\n restrictions: extend({\n catalogName: that.transport.catalog(),\n cubeName: that.transport.cube()\n }, restrictions)\n }\n }, success);\n },\n _params: function (data) {\n if (this._clearAxesData) {\n this._axes = {};\n this._data = this._observe([]);\n this._clearAxesData = false;\n this.trigger(STATERESET);\n }\n var options = DataSource.fn._params.call(this, data);\n options = extend({\n measures: this.measures(),\n measuresAxis: this.measuresAxis(),\n columns: this.columns(),\n rows: this.rows()\n }, options);\n if (this.cubeBuilder) {\n this._requestData = options;\n }\n return options;\n }\n });\n function addEmptyDataItem(result) {\n result[result.length] = {\n value: '',\n fmtValue: '',\n ordinal: result.length\n };\n return result;\n }\n function validateAxis(newAxis, axis, measures) {\n if (newAxis.tuples.length < membersCount(axis.tuples, measures)) {\n return axis;\n }\n return;\n }\n function adjustDataByColumn(sourceTuples, targetTuples, rowsLength, measures, data) {\n var columnIdx, rowIdx, dataIdx;\n var columnsLength = sourceTuples.length;\n var targetColumnsLength = membersCount(targetTuples, measures);\n var measuresLength = measures.length || 1;\n for (rowIdx = 0; rowIdx < rowsLength; rowIdx++) {\n for (columnIdx = 0; columnIdx < columnsLength; columnIdx++) {\n dataIdx = tupleIndex(sourceTuples[columnIdx], targetTuples) * measuresLength;\n dataIdx += columnIdx % measuresLength;\n data[rowIdx * columnsLength + columnIdx].ordinal = rowIdx * targetColumnsLength + dataIdx;\n }\n }\n }\n function adjustDataByRow(sourceTuples, targetTuples, columnsLength, measures, data) {\n var columnIdx, rowIdx, dataIdx;\n var rowsLength = sourceTuples.length;\n var measuresLength = measures.length || 1;\n for (rowIdx = 0; rowIdx < rowsLength; rowIdx++) {\n dataIdx = tupleIndex(sourceTuples[rowIdx], targetTuples);\n dataIdx *= measuresLength;\n dataIdx += rowIdx % measuresLength;\n for (columnIdx = 0; columnIdx < columnsLength; columnIdx++) {\n data[rowIdx * columnsLength + columnIdx].ordinal = dataIdx * columnsLength + columnIdx;\n }\n }\n }\n function tupleIndex(tuple, collection) {\n return findExistingTuple(collection, tuple).index;\n }\n function membersCount(tuples, measures) {\n if (!tuples.length) {\n return 0;\n }\n var queue = tuples.slice();\n var current = queue.shift();\n var result = 1;\n while (current) {\n if (current.members) {\n [].push.apply(queue, current.members);\n } else if (current.children) {\n if (!current.measure) {\n result += current.children.length;\n }\n [].push.apply(queue, current.children);\n }\n current = queue.shift();\n }\n if (measures.length) {\n result = result * measures.length;\n }\n return result;\n }\n function normalizeAxis(axis) {\n if (!axis) {\n axis = { tuples: [] };\n }\n if (!axis.tuples) {\n axis.tuples = [];\n }\n return axis;\n }\n function findDataIndex(tuple, memberIndex, measures) {\n if (!tuple) {\n return 0;\n }\n var measuresLength = Math.max(measures.length, 1);\n var tuples = tuple.members.slice(0, memberIndex);\n var counter = measuresLength;\n var current = tuples.shift();\n if (measuresLength > 1) {\n measuresLength += 1;\n }\n while (current) {\n if (current.name === MEASURES) {\n counter += measuresLength;\n } else if (current.children) {\n [].push.apply(tuples, current.children);\n } else {\n counter++;\n [].push.apply(tuples, current.members);\n }\n current = tuples.shift();\n }\n return counter;\n }\n function mergeTuples(target, source, measures) {\n if (!source[0]) {\n return {\n parsedRoot: null,\n tuples: target,\n memberIndex: 0,\n index: 0\n };\n }\n var result = findExistingTuple(target, source[0]);\n if (!result.tuple) {\n return {\n parsedRoot: null,\n tuples: source,\n memberIndex: 0,\n index: 0\n };\n }\n var targetMembers = result.tuple.members;\n var sourceMembers = source[0].members;\n var memberIndex = -1;\n if (targetMembers.length !== sourceMembers.length) {\n return {\n parsedRoot: null,\n tuples: source,\n memberIndex: 0,\n index: 0\n };\n }\n for (var idx = 0, length = targetMembers.length; idx < length; idx++) {\n if (!targetMembers[idx].measure && sourceMembers[idx].children[0]) {\n if (memberIndex == -1 && sourceMembers[idx].children.length) {\n memberIndex = idx;\n }\n targetMembers[idx].children = sourceMembers[idx].children;\n }\n }\n measures = Math.max(measures.length, 1);\n return {\n parsedRoot: result.tuple,\n index: result.index * measures,\n memberIndex: memberIndex,\n tuples: target\n };\n }\n function equalTuples(first, second) {\n var equal = true;\n var idx, length;\n first = first.members;\n second = second.members;\n for (idx = 0, length = first.length; idx < length; idx++) {\n if (first[idx].measure || second[idx].measure) {\n continue;\n }\n equal = equal && getName(first[idx]) === getName(second[idx]);\n }\n return equal;\n }\n function findExistingTuple(tuples, toFind) {\n var idx, length, tuple, found, counter = 0;\n var memberIndex, membersLength, member;\n for (idx = 0, length = tuples.length; idx < length; idx++) {\n tuple = tuples[idx];\n if (equalTuples(tuple, toFind)) {\n return {\n tuple: tuple,\n index: counter\n };\n }\n counter++;\n for (memberIndex = 0, membersLength = tuple.members.length; memberIndex < membersLength; memberIndex++) {\n member = tuple.members[memberIndex];\n if (member.measure) {\n continue;\n }\n found = findExistingTuple(member.children, toFind);\n counter += found.index;\n if (found.tuple) {\n return {\n tuple: found.tuple,\n index: counter\n };\n }\n }\n }\n return { index: counter };\n }\n function addMembers(members, map) {\n var member, i, len, path = '';\n for (i = 0, len = members.length; i < len; i++) {\n member = members[i];\n path += member.name;\n if (!map[path]) {\n map[path] = member;\n }\n }\n }\n function findParentMember(tuple, map) {\n var members = tuple.members;\n var i, len, member, path = '';\n var parentPath = '';\n var parentMember;\n for (i = 0, len = members.length; i < len; i++) {\n member = members[i];\n if (parentMember) {\n if (map[path + member.name]) {\n path += member.name;\n parentMember = map[path];\n continue;\n } else if (map[path + member.parentName]) {\n return map[path + member.parentName];\n } else if (map[parentPath + member.parentName]) {\n return map[parentPath + member.parentName];\n } else {\n return map[parentPath];\n }\n }\n path += member.name;\n parentMember = map[member.parentName];\n if (!parentMember) {\n parentMember = map[path];\n if (!parentMember) {\n return null;\n }\n }\n if (parentMember) {\n parentPath += parentMember.name;\n }\n }\n return parentMember;\n }\n function measurePosition(tuple, measures) {\n if (measures.length === 0) {\n return -1;\n }\n var measure = measures[0];\n var members = tuple.members;\n for (var idx = 0, len = members.length; idx < len; idx++) {\n if (members[idx].name == measure.name) {\n return idx;\n }\n }\n }\n function normalizeTupleMeasures(tuple, index) {\n if (index < 0) {\n return;\n }\n var member = {\n name: MEASURES,\n measure: true,\n children: [$.extend({\n members: [],\n dataIndex: tuple.dataIndex\n }, tuple.members[index])]\n };\n tuple.members.splice(index, 1, member);\n tuple.dataIndex = undefined;\n }\n function parseSource(tuples, measures) {\n if (tuples.length < 1) {\n return [];\n }\n var result = [];\n var map = {};\n var measureIndex = measurePosition(tuples[0], measures);\n for (var i = 0; i < tuples.length; i++) {\n var tuple = tuples[i];\n tuple.dataIndex = i;\n normalizeTupleMeasures(tuple, measureIndex);\n var parentMember = findParentMember(tuple, map);\n if (parentMember) {\n if (measureIndex < 0 || !parentMember.measure) {\n parentMember.children.push(tuple);\n } else {\n parentMember.children.push(tuple.members[measureIndex].children[0]);\n }\n } else {\n result.push(tuple);\n }\n addMembers(tuple.members, map);\n }\n return result;\n }\n function prepareDataOnRows(tuples, data) {\n if (!tuples || !tuples.length) {\n return data;\n }\n var result = [];\n var indices = buildDataIndices(tuples);\n var rowsLength = indices.length;\n var columnsLength = Math.max(data.length / rowsLength, 1);\n var rowIndex, columnIndex, targetIndex, sourceIndex;\n var calcIndex;\n for (rowIndex = 0; rowIndex < rowsLength; rowIndex++) {\n targetIndex = columnsLength * rowIndex;\n sourceIndex = columnsLength * indices[rowIndex];\n for (columnIndex = 0; columnIndex < columnsLength; columnIndex++) {\n calcIndex = parseInt(sourceIndex + columnIndex, 10);\n result[parseInt(targetIndex + columnIndex, 10)] = data[calcIndex] || {\n value: '',\n fmtValue: '',\n ordinal: calcIndex\n };\n }\n }\n return result;\n }\n function prepareDataOnColumns(tuples, data) {\n if (!tuples || !tuples.length) {\n return data;\n }\n var result = [];\n var indices = buildDataIndices(tuples);\n var columnsLength = indices.length;\n var rowsLength = Math.max(data.length / columnsLength, 1);\n var columnIndex, rowIndex, dataIndex, calcIndex;\n for (rowIndex = 0; rowIndex < rowsLength; rowIndex++) {\n dataIndex = columnsLength * rowIndex;\n for (columnIndex = 0; columnIndex < columnsLength; columnIndex++) {\n calcIndex = indices[columnIndex] + dataIndex;\n result[dataIndex + columnIndex] = data[calcIndex] || {\n value: '',\n fmtValue: '',\n ordinal: calcIndex\n };\n }\n }\n return result;\n }\n function buildDataIndices(tuples) {\n tuples = tuples.slice();\n var result = [];\n var tuple = tuples.shift();\n var idx, length, spliceIndex, children, member;\n while (tuple) {\n if (tuple.dataIndex !== undefined) {\n result.push(tuple.dataIndex);\n }\n spliceIndex = 0;\n for (idx = 0, length = tuple.members.length; idx < length; idx++) {\n member = tuple.members[idx];\n children = member.children;\n if (member.measure) {\n [].splice.apply(tuples, [\n 0,\n 0\n ].concat(children));\n } else {\n [].splice.apply(tuples, [\n spliceIndex,\n 0\n ].concat(children));\n }\n spliceIndex += children.length;\n }\n tuple = tuples.shift();\n }\n return result;\n }\n PivotDataSource.create = function (options) {\n options = options && options.push ? { data: options } : options;\n var dataSource = options || {}, data = dataSource.data;\n dataSource.data = data;\n if (!(dataSource instanceof PivotDataSource) && dataSource instanceof kendo.data.DataSource) {\n throw new Error('Incorrect DataSource type. Only PivotDataSource instances are supported');\n }\n return dataSource instanceof PivotDataSource ? dataSource : new PivotDataSource(dataSource);\n };\n function baseHierarchyPath(memberName) {\n var parts = memberName.split('.');\n if (parts.length > 2) {\n return parts[0] + '.' + parts[1];\n }\n return memberName;\n }\n function expandMemberDescriptor(names, sort) {\n var idx = names.length - 1;\n var name = names[idx];\n var sortDescriptor;\n sortDescriptor = sortDescriptorForMember(sort, name);\n if (sortDescriptor && sortDescriptor.dir) {\n name = 'ORDER(' + name + '.Children,' + sortDescriptor.field + '.CurrentMember.MEMBER_CAPTION,' + sortDescriptor.dir + ')';\n } else {\n name += '.Children';\n }\n names[idx] = name;\n return names;\n }\n function sortDescriptorForMember(sort, member) {\n for (var idx = 0, length = sort.length; idx < length; idx++) {\n if (member.indexOf(sort[idx].field) === 0) {\n return sort[idx];\n }\n }\n return null;\n }\n function crossJoin(names) {\n var result = 'CROSSJOIN({';\n var r;\n if (names.length > 2) {\n r = names.pop();\n result += crossJoin(names);\n } else {\n result += names.shift();\n r = names.pop();\n }\n result += '},{';\n result += r;\n result += '})';\n return result;\n }\n function crossJoinCommand(members, measures) {\n var tmp = members.slice(0);\n if (measures.length > 1) {\n tmp.push('{' + measureNames(measures).join(',') + '}');\n }\n return crossJoin(tmp);\n }\n function measureNames(measures) {\n var idx = 0;\n var length = measures.length;\n var result = [];\n var measure;\n for (; idx < length; idx++) {\n measure = measures[idx];\n result.push(measure.name !== undefined ? measure.name : measure);\n }\n return result;\n }\n function getName(name) {\n name = name.name || name;\n if (toString.call(name) === '[object Array]') {\n name = name[name.length - 1];\n }\n return name;\n }\n function getRootNames(members) {\n var length = members.length;\n var names = [];\n var idx = 0;\n for (; idx < length; idx++) {\n names.push(members[idx].name[0]);\n }\n return names;\n }\n function mapNames(names, rootNames) {\n var name;\n var rootName;\n var j;\n var idx = 0;\n var length = names.length;\n var rootLength = rootNames.length;\n rootNames = rootNames.slice(0);\n for (; idx < length; idx++) {\n name = names[idx];\n for (j = 0; j < rootLength; j++) {\n rootName = baseHierarchyPath(rootNames[j]);\n if (name.indexOf(rootName) !== -1) {\n rootNames[j] = name;\n break;\n }\n }\n }\n return {\n names: rootNames,\n expandedIdx: j,\n uniquePath: rootNames.slice(0, j + 1).join('')\n };\n }\n function parseDescriptors(members) {\n var expanded = [];\n var child = [];\n var root = [];\n var member;\n var j, l;\n var idx = 0;\n var length = members.length;\n var name;\n var hierarchyName;\n var found;\n for (; idx < length; idx++) {\n member = members[idx];\n name = member.name;\n found = false;\n if (toString.call(name) !== '[object Array]') {\n member.name = name = [name];\n }\n if (name.length > 1) {\n child.push(member);\n } else {\n hierarchyName = baseHierarchyPath(name[0]);\n for (j = 0, l = root.length; j < l; j++) {\n if (root[j].name[0].indexOf(hierarchyName) === 0) {\n found = true;\n break;\n }\n }\n if (!found) {\n root.push(member);\n }\n if (member.expand) {\n expanded.push(member);\n }\n }\n }\n expanded = expanded.concat(child);\n return {\n root: root,\n expanded: expanded\n };\n }\n function serializeMembers(members, measures, sort) {\n var command = '';\n members = members || [];\n var expanded = parseDescriptors(members);\n var root = expanded.root;\n var rootNames = getRootNames(root);\n var crossJoinCommands = [];\n expanded = expanded.expanded;\n var length = expanded.length;\n var idx = 0;\n var memberName;\n var names = [];\n if (rootNames.length > 1 || measures.length > 1) {\n crossJoinCommands.push(crossJoinCommand(rootNames, measures));\n for (; idx < length; idx++) {\n memberName = expandMemberDescriptor(expanded[idx].name, sort);\n names = mapNames(memberName, rootNames).names;\n crossJoinCommands.push(crossJoinCommand(names, measures));\n }\n command += crossJoinCommands.join(',');\n } else {\n for (; idx < length; idx++) {\n memberName = expandMemberDescriptor(expanded[idx].name, sort);\n names.push(memberName[0]);\n }\n command += rootNames.concat(names).join(',');\n }\n return command;\n }\n var filterFunctionFormats = {\n contains: ', InStr({0}.CurrentMember.MEMBER_CAPTION,\"{1}\") > 0',\n doesnotcontain: ', InStr({0}.CurrentMember.MEMBER_CAPTION,\"{1}\")',\n startswith: ', Left({0}.CurrentMember.MEMBER_CAPTION,Len(\"{1}\"))=\"{1}\"',\n endswith: ', Right({0}.CurrentMember.MEMBER_CAPTION,Len(\"{1}\"))=\"{1}\"',\n eq: ', {0}.CurrentMember.MEMBER_CAPTION = \"{1}\"',\n neq: ', {0}.CurrentMember.MEMBER_CAPTION = \"{1}\"'\n };\n function serializeExpression(expression) {\n var command = '';\n var value = expression.value;\n var field = expression.field;\n var operator = expression.operator;\n if (operator == 'in') {\n command += '{';\n command += value;\n command += '}';\n } else {\n command += operator == 'neq' || operator == 'doesnotcontain' ? '-' : '';\n command += 'Filter(';\n command += field + '.MEMBERS';\n command += kendo.format(filterFunctionFormats[operator], field, value);\n command += ')';\n }\n return command;\n }\n function serializeFilters(filter, cube) {\n var command = '', current;\n var filters = filter.filters;\n var length = filters.length;\n var idx;\n for (idx = length - 1; idx >= 0; idx--) {\n current = 'SELECT (';\n current += serializeExpression(filters[idx]);\n current += ') ON 0';\n if (idx == length - 1) {\n current += ' FROM [' + cube + ']';\n command = current;\n } else {\n command = current + ' FROM ( ' + command + ' )';\n }\n }\n return command;\n }\n function serializeOptions(parentTagName, options, capitalize) {\n var result = '';\n if (options) {\n result += '<' + parentTagName + '>';\n var value;\n for (var key in options) {\n value = options[key];\n if (capitalize) {\n key = key.replace(/([A-Z]+(?=$|[A-Z][a-z])|[A-Z]?[a-z]+)/g, '$1_').toUpperCase().replace(/_$/, '');\n }\n result += '<' + key + '>' + value + '</' + key + '>';\n }\n result += '</' + parentTagName + '>';\n } else {\n result += '<' + parentTagName + '/>';\n }\n return result;\n }\n var xmlaDiscoverCommands = {\n schemaCubes: 'MDSCHEMA_CUBES',\n schemaCatalogs: 'DBSCHEMA_CATALOGS',\n schemaMeasures: 'MDSCHEMA_MEASURES',\n schemaDimensions: 'MDSCHEMA_DIMENSIONS',\n schemaHierarchies: 'MDSCHEMA_HIERARCHIES',\n schemaLevels: 'MDSCHEMA_LEVELS',\n schemaMembers: 'MDSCHEMA_MEMBERS',\n schemaKPIs: 'MDSCHEMA_KPIS'\n };\n var convertersMap = {\n read: function (options) {\n var command = '<Envelope xmlns=\"http://schemas.xmlsoap.org/soap/envelope/\"><Header/><Body><Execute xmlns=\"urn:schemas-microsoft-com:xml-analysis\"><Command><Statement>';\n command += 'SELECT NON EMPTY {';\n var columns = options.columns || [];\n var rows = options.rows || [];\n var measures = options.measures || [];\n var measuresRowAxis = options.measuresAxis === 'rows';\n var sort = options.sort || [];\n if (!columns.length && rows.length && (!measures.length || measures.length && measuresRowAxis)) {\n columns = rows;\n rows = [];\n measuresRowAxis = false;\n }\n if (!columns.length && !rows.length) {\n measuresRowAxis = false;\n }\n if (columns.length) {\n command += serializeMembers(columns, !measuresRowAxis ? measures : [], sort);\n } else if (measures.length && !measuresRowAxis) {\n command += measureNames(measures).join(',');\n }\n command += '} DIMENSION PROPERTIES CHILDREN_CARDINALITY, PARENT_UNIQUE_NAME ON COLUMNS';\n if (rows.length || measuresRowAxis && measures.length > 1) {\n command += ', NON EMPTY {';\n if (rows.length) {\n command += serializeMembers(rows, measuresRowAxis ? measures : [], sort);\n } else {\n command += measureNames(measures).join(',');\n }\n command += '} DIMENSION PROPERTIES CHILDREN_CARDINALITY, PARENT_UNIQUE_NAME ON ROWS';\n }\n if (options.filter) {\n command += ' FROM ';\n command += '(';\n command += serializeFilters(options.filter, options.connection.cube);\n command += ')';\n } else {\n command += ' FROM [' + options.connection.cube + ']';\n }\n if (measures.length == 1 && columns.length) {\n command += ' WHERE (' + measureNames(measures).join(',') + ')';\n }\n command += '</Statement></Command><Properties><PropertyList><Catalog>' + options.connection.catalog + '</Catalog><Format>Multidimensional</Format></PropertyList></Properties></Execute></Body></Envelope>';\n return command.replace(/\\&/g, '&');\n },\n discover: function (options) {\n options = options || {};\n var command = '<Envelope xmlns=\"http://schemas.xmlsoap.org/soap/envelope/\"><Header/><Body><Discover xmlns=\"urn:schemas-microsoft-com:xml-analysis\">';\n command += '<RequestType>' + (xmlaDiscoverCommands[options.command] || options.command) + '</RequestType>';\n command += '<Restrictions>' + serializeOptions('RestrictionList', options.restrictions, true) + '</Restrictions>';\n if (options.connection && options.connection.catalog) {\n options.properties = $.extend({}, { Catalog: options.connection.catalog }, options.properties);\n }\n command += '<Properties>' + serializeOptions('PropertyList', options.properties) + '</Properties>';\n command += '</Discover></Body></Envelope>';\n return command;\n }\n };\n var XmlaTransport = kendo.data.RemoteTransport.extend({\n init: function (options) {\n var originalOptions = options;\n options = this.options = extend(true, {}, this.options, options);\n kendo.data.RemoteTransport.call(this, options);\n if (isFunction(originalOptions.discover)) {\n this.discover = originalOptions.discover;\n } else if (typeof originalOptions.discover === 'string') {\n this.options.discover = { url: originalOptions.discover };\n } else if (!originalOptions.discover) {\n this.options.discover = this.options.read;\n }\n },\n setup: function (options, type) {\n options.data = options.data || {};\n $.extend(true, options.data, { connection: this.options.connection });\n return kendo.data.RemoteTransport.fn.setup.call(this, options, type);\n },\n options: {\n read: {\n dataType: 'text',\n contentType: 'text/xml',\n type: 'POST'\n },\n discover: {\n dataType: 'text',\n contentType: 'text/xml',\n type: 'POST'\n },\n parameterMap: function (options, type) {\n return convertersMap[type](options, type);\n }\n },\n discover: function (options) {\n return $.ajax(this.setup(options, 'discover'));\n }\n });\n function asArray(object) {\n if (object == null) {\n return [];\n }\n var type = toString.call(object);\n if (type !== '[object Array]') {\n return [object];\n }\n return object;\n }\n function translateAxis(axis) {\n var result = { tuples: [] };\n var tuples = asArray(kendo.getter('Tuples.Tuple', true)(axis));\n var captionGetter = kendo.getter('Caption[\\'#text\\']');\n var unameGetter = kendo.getter('UName[\\'#text\\']');\n var levelNameGetter = kendo.getter('LName[\\'#text\\']');\n var levelNumGetter = kendo.getter('LNum[\\'#text\\']');\n var childrenGetter = kendo.getter('CHILDREN_CARDINALITY[\\'#text\\']', true);\n var hierarchyGetter = kendo.getter('[\\'@Hierarchy\\']');\n var parentNameGetter = kendo.getter('PARENT_UNIQUE_NAME[\\'#text\\']', true);\n for (var idx = 0; idx < tuples.length; idx++) {\n var members = [];\n var member = asArray(tuples[idx].Member);\n for (var memberIdx = 0; memberIdx < member.length; memberIdx++) {\n members.push({\n children: [],\n caption: captionGetter(member[memberIdx]),\n name: unameGetter(member[memberIdx]),\n levelName: levelNameGetter(member[memberIdx]),\n levelNum: levelNumGetter(member[memberIdx]),\n hasChildren: parseInt(childrenGetter(member[memberIdx]), 10) > 0,\n parentName: parentNameGetter(member[memberIdx]),\n hierarchy: hierarchyGetter(member[memberIdx])\n });\n }\n result.tuples.push({ members: members });\n }\n return result;\n }\n var schemaDataReaderMap = {\n cubes: {\n name: kendo.getter('CUBE_NAME[\\'#text\\']', true),\n caption: kendo.getter('CUBE_CAPTION[\\'#text\\']', true),\n description: kendo.getter('DESCRIPTION[\\'#text\\']', true),\n type: kendo.getter('CUBE_TYPE[\\'#text\\']', true)\n },\n catalogs: {\n name: kendo.getter('CATALOG_NAME[\\'#text\\']', true),\n description: kendo.getter('DESCRIPTION[\\'#text\\']', true)\n },\n measures: {\n name: kendo.getter('MEASURE_NAME[\\'#text\\']', true),\n caption: kendo.getter('MEASURE_CAPTION[\\'#text\\']', true),\n uniqueName: kendo.getter('MEASURE_UNIQUE_NAME[\\'#text\\']', true),\n description: kendo.getter('DESCRIPTION[\\'#text\\']', true),\n aggregator: kendo.getter('MEASURE_AGGREGATOR[\\'#text\\']', true),\n groupName: kendo.getter('MEASUREGROUP_NAME[\\'#text\\']', true),\n displayFolder: kendo.getter('MEASURE_DISPLAY_FOLDER[\\'#text\\']', true),\n defaultFormat: kendo.getter('DEFAULT_FORMAT_STRING[\\'#text\\']', true)\n },\n kpis: {\n name: kendo.getter('KPI_NAME[\\'#text\\']', true),\n caption: kendo.getter('KPI_CAPTION[\\'#text\\']', true),\n value: kendo.getter('KPI_VALUE[\\'#text\\']', true),\n goal: kendo.getter('KPI_GOAL[\\'#text\\']', true),\n status: kendo.getter('KPI_STATUS[\\'#text\\']', true),\n trend: kendo.getter('KPI_TREND[\\'#text\\']', true),\n statusGraphic: kendo.getter('KPI_STATUS_GRAPHIC[\\'#text\\']', true),\n trendGraphic: kendo.getter('KPI_TREND_GRAPHIC[\\'#text\\']', true),\n description: kendo.getter('KPI_DESCRIPTION[\\'#text\\']', true),\n groupName: kendo.getter('MEASUREGROUP_NAME[\\'#text\\']', true)\n },\n dimensions: {\n name: kendo.getter('DIMENSION_NAME[\\'#text\\']', true),\n caption: kendo.getter('DIMENSION_CAPTION[\\'#text\\']', true),\n description: kendo.getter('DESCRIPTION[\\'#text\\']', true),\n uniqueName: kendo.getter('DIMENSION_UNIQUE_NAME[\\'#text\\']', true),\n defaultHierarchy: kendo.getter('DEFAULT_HIERARCHY[\\'#text\\']', true),\n type: kendo.getter('DIMENSION_TYPE[\\'#text\\']', true)\n },\n hierarchies: {\n name: kendo.getter('HIERARCHY_NAME[\\'#text\\']', true),\n caption: kendo.getter('HIERARCHY_CAPTION[\\'#text\\']', true),\n description: kendo.getter('DESCRIPTION[\\'#text\\']', true),\n uniqueName: kendo.getter('HIERARCHY_UNIQUE_NAME[\\'#text\\']', true),\n dimensionUniqueName: kendo.getter('DIMENSION_UNIQUE_NAME[\\'#text\\']', true),\n displayFolder: kendo.getter('HIERARCHY_DISPLAY_FOLDER[\\'#text\\']', true),\n origin: kendo.getter('HIERARCHY_ORIGIN[\\'#text\\']', true),\n defaultMember: kendo.getter('DEFAULT_MEMBER[\\'#text\\']', true)\n },\n levels: {\n name: kendo.getter('LEVEL_NAME[\\'#text\\']', true),\n caption: kendo.getter('LEVEL_CAPTION[\\'#text\\']', true),\n description: kendo.getter('DESCRIPTION[\\'#text\\']', true),\n uniqueName: kendo.getter('LEVEL_UNIQUE_NAME[\\'#text\\']', true),\n dimensionUniqueName: kendo.getter('DIMENSION_UNIQUE_NAME[\\'#text\\']', true),\n displayFolder: kendo.getter('LEVEL_DISPLAY_FOLDER[\\'#text\\']', true),\n orderingProperty: kendo.getter('LEVEL_ORDERING_PROPERTY[\\'#text\\']', true),\n origin: kendo.getter('LEVEL_ORIGIN[\\'#text\\']', true),\n hierarchyUniqueName: kendo.getter('HIERARCHY_UNIQUE_NAME[\\'#text\\']', true)\n },\n members: {\n name: kendo.getter('MEMBER_NAME[\\'#text\\']', true),\n caption: kendo.getter('MEMBER_CAPTION[\\'#text\\']', true),\n uniqueName: kendo.getter('MEMBER_UNIQUE_NAME[\\'#text\\']', true),\n dimensionUniqueName: kendo.getter('DIMENSION_UNIQUE_NAME[\\'#text\\']', true),\n hierarchyUniqueName: kendo.getter('HIERARCHY_UNIQUE_NAME[\\'#text\\']', true),\n levelUniqueName: kendo.getter('LEVEL_UNIQUE_NAME[\\'#text\\']', true),\n childrenCardinality: kendo.getter('CHILDREN_CARDINALITY[\\'#text\\']', true)\n }\n };\n var xmlaReaderMethods = [\n 'axes',\n 'catalogs',\n 'cubes',\n 'dimensions',\n 'hierarchies',\n 'levels',\n 'measures'\n ];\n var XmlaDataReader = kendo.data.XmlDataReader.extend({\n init: function (options) {\n kendo.data.XmlDataReader.call(this, options);\n this._extend(options);\n },\n _extend: function (options) {\n var idx = 0;\n var length = xmlaReaderMethods.length;\n var methodName;\n var option;\n for (; idx < length; idx++) {\n methodName = xmlaReaderMethods[idx];\n option = options[methodName];\n if (option && option !== identity) {\n this[methodName] = option;\n }\n }\n },\n parse: function (xml) {\n var result = kendo.data.XmlDataReader.fn.parse(xml.replace(/<(\\/?)(\\w|-)+:/g, '<$1'));\n return kendo.getter('[\\'Envelope\\'][\\'Body\\']', true)(result);\n },\n errors: function (root) {\n var fault = kendo.getter('[\\'Fault\\']', true)(root);\n if (fault) {\n return [{\n faultstring: kendo.getter('faultstring[\\'#text\\']', true)(fault),\n faultcode: kendo.getter('faultcode[\\'#text\\']', true)(fault)\n }];\n }\n return null;\n },\n axes: function (root) {\n root = kendo.getter('ExecuteResponse[\"return\"].root', true)(root);\n var axes = asArray(kendo.getter('Axes.Axis', true)(root));\n var axis;\n var result = {\n columns: {},\n rows: {}\n };\n for (var idx = 0; idx < axes.length; idx++) {\n axis = axes[idx];\n if (axis['@name'].toLowerCase() !== 'sliceraxis') {\n if (!result.columns.tuples) {\n result.columns = translateAxis(axis);\n } else {\n result.rows = translateAxis(axis);\n }\n }\n }\n return result;\n },\n data: function (root) {\n root = kendo.getter('ExecuteResponse[\"return\"].root', true)(root);\n var cells = asArray(kendo.getter('CellData.Cell', true)(root));\n var result = [];\n var ordinalGetter = kendo.getter('[\\'@CellOrdinal\\']');\n var valueGetter = kendo.getter('Value[\\'#text\\']');\n var fmtValueGetter = kendo.getter('FmtValue[\\'#text\\']');\n for (var idx = 0; idx < cells.length; idx++) {\n result.push({\n value: valueGetter(cells[idx]),\n fmtValue: fmtValueGetter(cells[idx]),\n ordinal: parseInt(ordinalGetter(cells[idx]), 10)\n });\n }\n return result;\n },\n _mapSchema: function (root, getters) {\n root = kendo.getter('DiscoverResponse[\"return\"].root', true)(root);\n var rows = asArray(kendo.getter('row', true)(root));\n var result = [];\n for (var idx = 0; idx < rows.length; idx++) {\n var obj = {};\n for (var key in getters) {\n obj[key] = getters[key](rows[idx]);\n }\n result.push(obj);\n }\n return result;\n },\n measures: function (root) {\n return this._mapSchema(root, schemaDataReaderMap.measures);\n },\n kpis: function (root) {\n return this._mapSchema(root, schemaDataReaderMap.kpis);\n },\n hierarchies: function (root) {\n return this._mapSchema(root, schemaDataReaderMap.hierarchies);\n },\n levels: function (root) {\n return this._mapSchema(root, schemaDataReaderMap.levels);\n },\n dimensions: function (root) {\n return this._mapSchema(root, schemaDataReaderMap.dimensions);\n },\n cubes: function (root) {\n return this._mapSchema(root, schemaDataReaderMap.cubes);\n },\n catalogs: function (root) {\n return this._mapSchema(root, schemaDataReaderMap.catalogs);\n },\n members: function (root) {\n return this._mapSchema(root, schemaDataReaderMap.members);\n }\n });\n extend(true, kendo.data, {\n PivotDataSource: PivotDataSource,\n XmlaTransport: XmlaTransport,\n XmlaDataReader: XmlaDataReader,\n PivotCubeBuilder: PivotCubeBuilder,\n transports: { xmla: XmlaTransport },\n readers: { xmla: XmlaDataReader }\n });\n var sortExpr = function (expressions, name) {\n if (!expressions) {\n return null;\n }\n for (var idx = 0, length = expressions.length; idx < length; idx++) {\n if (expressions[idx].field === name) {\n return expressions[idx];\n }\n }\n return null;\n };\n var removeExpr = function (expressions, name) {\n var result = [];\n for (var idx = 0, length = expressions.length; idx < length; idx++) {\n if (expressions[idx].field !== name) {\n result.push(expressions[idx]);\n }\n }\n return result;\n };\n kendo.ui.PivotSettingTarget = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.element.addClass('k-pivot-setting');\n that.dataSource = kendo.data.PivotDataSource.create(options.dataSource);\n that._refreshHandler = $.proxy(that.refresh, that);\n that.dataSource.first(CHANGE, that._refreshHandler);\n if (!options.template) {\n that.options.template = '<div data-' + kendo.ns + 'name=\"${data.name || data}\">${data.name || data}' + (that.options.enabled ? '<a class=\"k-button k-button-icon k-button-bare\"><span class=\"k-icon k-i-close k-setting-delete\"></span></a>' : '') + '</div>';\n }\n that.template = kendo.template(that.options.template);\n that.emptyTemplate = kendo.template(that.options.emptyTemplate);\n that._sortable();\n that.element.on('click' + NS, '.k-button,.k-item', function (e) {\n var target = $(e.target);\n var name = target.closest('[' + kendo.attr('name') + ']').attr(kendo.attr('name'));\n if (!name) {\n return;\n }\n if (target.hasClass('k-i-close')) {\n that.remove(name);\n } else if (that.options.sortable && target[0] === e.currentTarget) {\n that.sort({\n field: name,\n dir: target.find('.k-i-sort-asc-sm')[0] ? 'desc' : 'asc'\n });\n }\n });\n if (options.filterable || options.sortable) {\n that.fieldMenu = new ui.PivotFieldMenu(that.element, {\n messages: that.options.messages.fieldMenu,\n filter: '.k-setting-fieldmenu',\n filterable: options.filterable,\n sortable: options.sortable,\n dataSource: that.dataSource\n });\n }\n that.refresh();\n },\n options: {\n name: 'PivotSettingTarget',\n template: null,\n filterable: false,\n sortable: false,\n emptyTemplate: '<div class=\\'k-empty\\'>${data}</div>',\n setting: 'columns',\n enabled: true,\n messages: { empty: 'Drop Fields Here' }\n },\n setDataSource: function (dataSource) {\n this.dataSource.unbind(CHANGE, this._refreshHandler);\n this.dataSource = this.options.dataSource = dataSource;\n if (this.fieldMenu) {\n this.fieldMenu.setDataSource(dataSource);\n }\n dataSource.first(CHANGE, this._refreshHandler);\n this.refresh();\n },\n _sortable: function () {\n var that = this;\n if (that.options.enabled) {\n this.sortable = this.element.kendoSortable({\n connectWith: this.options.connectWith,\n hint: that.options.hint,\n cursor: 'move',\n start: function (e) {\n e.item.focus().blur();\n },\n change: function (e) {\n var name = e.item.attr(kendo.attr('name'));\n if (e.action == 'receive') {\n that.add(name);\n } else if (e.action == 'remove') {\n that.remove(name);\n } else if (e.action == 'sort') {\n that.move(name, e.newIndex);\n }\n }\n }).data('kendoSortable');\n }\n },\n _indexOf: function (name, items) {\n var idx, length, index = -1;\n for (idx = 0, length = items.length; idx < length; idx++) {\n if (getName(items[idx]) === name) {\n index = idx;\n break;\n }\n }\n return index;\n },\n _isKPI: function (data) {\n return data.type === 'kpi' || data.measure;\n },\n validate: function (data) {\n var isMeasure = data.type == 2 || 'aggregator' in data || this._isKPI(data);\n if (isMeasure) {\n return this.options.setting === 'measures';\n }\n if (this.options.setting === 'measures') {\n return isMeasure;\n }\n var items = this.dataSource[this.options.setting]();\n var name = data.defaultHierarchy || data.uniqueName;\n if (this._indexOf(name, items) > -1) {\n return false;\n }\n items = this.dataSource[this.options.setting === 'columns' ? 'rows' : 'columns']();\n if (this._indexOf(name, items) > -1) {\n return false;\n }\n return true;\n },\n add: function (name) {\n var items = this.dataSource[this.options.setting]();\n var i, l;\n name = $.isArray(name) ? name.slice(0) : [name];\n for (i = 0, l = name.length; i < l; i++) {\n if (this._indexOf(name[i], items) !== -1) {\n name.splice(i, 1);\n i -= 1;\n l -= 1;\n }\n }\n if (name.length) {\n items = items.concat(name);\n this.dataSource[this.options.setting](items);\n }\n },\n move: function (name, index) {\n var items = this.dataSource[this.options.setting]();\n var idx = this._indexOf(name, items);\n if (idx > -1) {\n name = items.splice(idx, 1)[0];\n items.splice(index, 0, name);\n this.dataSource[this.options.setting](items);\n }\n },\n remove: function (name) {\n var items = this.dataSource[this.options.setting]();\n var idx = this._indexOf(name, items);\n var sortExpressions = this.dataSource.sort();\n var filter = this.dataSource.filter();\n if (idx > -1) {\n if (filter) {\n filter.filters = removeExpr(filter.filters, name);\n this.dataSource._filter.filters = filter.filters;\n if (!filter.filters.length) {\n this.dataSource._filter = null;\n }\n }\n if (sortExpressions) {\n sortExpressions = removeExpr(sortExpressions, name);\n this.dataSource._sort = sortExpressions;\n }\n items.splice(idx, 1);\n this.dataSource[this.options.setting](items);\n }\n },\n sort: function (expr) {\n var sortable = this.options.sortable;\n var allowUnsort = sortable === true || sortable.allowUnsort;\n var skipExpr = allowUnsort && expr.dir === 'asc';\n var expressions = this.dataSource.sort() || [];\n var result = removeExpr(expressions, expr.field);\n if (skipExpr && expressions.length !== result.length) {\n expr = null;\n }\n if (expr) {\n result.push(expr);\n }\n this.dataSource.sort(result);\n },\n refresh: function () {\n var html = '';\n var items = this.dataSource[this.options.setting]();\n var length = items.length;\n var idx = 0;\n var item;\n if (length) {\n for (; idx < length; idx++) {\n item = items[idx];\n item = item.name === undefined ? { name: item } : item;\n html += this.template(extend({ sortIcon: this._sortIcon(item.name) }, item));\n }\n } else {\n html = this.emptyTemplate(this.options.messages.empty);\n }\n this.element.html(html);\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.dataSource.unbind(CHANGE, this._refreshHandler);\n this.element.off(NS);\n if (this.sortable) {\n this.sortable.destroy();\n }\n if (this.fieldMenu) {\n this.fieldMenu.destroy();\n }\n this.element = null;\n this._refreshHandler = null;\n },\n _sortIcon: function (name) {\n var expressions = this.dataSource.sort();\n var expr = sortExpr(expressions, getName(name));\n var icon = '';\n if (expr) {\n icon = 'k-i-sort-' + expr.dir;\n }\n return icon;\n }\n });\n var PivotGrid = Widget.extend({\n init: function (element, options) {\n var that = this;\n var columnBuilder;\n var rowBuilder;\n Widget.fn.init.call(that, element, options);\n that._dataSource();\n that._bindConfigurator();\n that._wrapper();\n that._createLayout();\n that._columnBuilder = columnBuilder = new ColumnBuilder();\n that._rowBuilder = rowBuilder = new RowBuilder();\n that._contentBuilder = new ContentBuilder();\n that._templates();\n that.columnsHeader.add(that.rowsHeader).on('click', 'span.k-icon', function () {\n var button = $(this);\n var builder = columnBuilder;\n var action = 'expandColumn';\n var eventName;\n var path = button.attr(kendo.attr('path'));\n var eventArgs = {\n axis: 'columns',\n path: $.parseJSON(path)\n };\n if (button.parent().is('td')) {\n builder = rowBuilder;\n action = 'expandRow';\n eventArgs.axis = 'rows';\n }\n var expanded = button.hasClass(STATE_EXPANDED);\n var metadata = builder.metadata[path];\n var request = metadata.expanded === undefined;\n eventName = expanded ? COLLAPSEMEMBER : EXPANDMEMBER;\n eventArgs.childrenLoaded = metadata.maxChildren > metadata.children;\n if (that.trigger(eventName, eventArgs)) {\n return;\n }\n builder.metadata[path].expanded = !expanded;\n button.toggleClass(STATE_EXPANDED, !expanded).toggleClass(STATE_COLLAPSED, expanded);\n if (!expanded && request) {\n that.dataSource[action](eventArgs.path);\n } else {\n that.refresh();\n }\n });\n that._scrollable();\n if (that.options.autoBind) {\n that.dataSource.fetch();\n }\n kendo.notify(that);\n },\n events: [\n DATABINDING,\n DATABOUND,\n EXPANDMEMBER,\n COLLAPSEMEMBER\n ],\n options: {\n name: 'PivotGrid',\n autoBind: true,\n reorderable: true,\n filterable: false,\n sortable: false,\n height: null,\n columnWidth: 100,\n configurator: '',\n columnHeaderTemplate: null,\n rowHeaderTemplate: null,\n dataCellTemplate: null,\n kpiStatusTemplate: null,\n kpiTrendTemplate: null,\n messages: {\n measureFields: 'Drop Data Fields Here',\n columnFields: 'Drop Column Fields Here',\n rowFields: 'Drop Rows Fields Here'\n }\n },\n _templates: function () {\n var columnTemplate = this.options.columnHeaderTemplate;\n var rowTemplate = this.options.rowHeaderTemplate;\n var dataTemplate = this.options.dataCellTemplate;\n var kpiStatusTemplate = this.options.kpiStatusTemplate;\n var kpiTrendTemplate = this.options.kpiTrendTemplate;\n this._columnBuilder.template = kendo.template(columnTemplate || HEADER_TEMPLATE, { useWithBlock: !!columnTemplate });\n this._contentBuilder.dataTemplate = kendo.template(dataTemplate || DATACELL_TEMPLATE, { useWithBlock: !!dataTemplate });\n this._contentBuilder.kpiStatusTemplate = kendo.template(kpiStatusTemplate || KPISTATUS_TEMPLATE, { useWithBlock: !!kpiStatusTemplate });\n this._contentBuilder.kpiTrendTemplate = kendo.template(kpiTrendTemplate || KPITREND_TEMPLATE, { useWithBlock: !!kpiTrendTemplate });\n this._rowBuilder.template = kendo.template(rowTemplate || HEADER_TEMPLATE, { useWithBlock: !!rowTemplate });\n },\n _bindConfigurator: function () {\n var configurator = this.options.configurator;\n if (configurator) {\n $(configurator).kendoPivotConfigurator('setDataSource', this.dataSource);\n }\n },\n cellInfoByElement: function (element) {\n element = $(element);\n return this.cellInfo(element.index(), element.parent('tr').index());\n },\n cellInfo: function (columnIndex, rowIndex) {\n var contentBuilder = this._contentBuilder;\n var columnInfo = contentBuilder.columnIndexes[columnIndex || 0];\n var rowInfo = contentBuilder.rowIndexes[rowIndex || 0];\n var dataIndex;\n if (!columnInfo || !rowInfo) {\n return null;\n }\n dataIndex = rowInfo.index * contentBuilder.rowLength + columnInfo.index;\n return {\n columnTuple: columnInfo.tuple,\n rowTuple: rowInfo.tuple,\n measure: columnInfo.measure || rowInfo.measure,\n dataItem: this.dataSource.view()[dataIndex]\n };\n },\n setDataSource: function (dataSource) {\n this.options.dataSource = dataSource;\n this._dataSource();\n if (this.measuresTarget) {\n this.measuresTarget.setDataSource(dataSource);\n }\n if (this.rowsTarget) {\n this.rowsTarget.setDataSource(dataSource);\n }\n if (this.columnsTarget) {\n this.columnsTarget.setDataSource(dataSource);\n }\n this._bindConfigurator();\n if (this.options.autoBind) {\n dataSource.fetch();\n }\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n this._templates();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n clearTimeout(this._headerReflowTimeout);\n },\n _dataSource: function () {\n var that = this;\n var dataSource = that.options.dataSource;\n dataSource = $.isArray(dataSource) ? { data: dataSource } : dataSource;\n if (that.dataSource && this._refreshHandler) {\n that.dataSource.unbind(CHANGE, that._refreshHandler).unbind(STATERESET, that._stateResetHandler).unbind(PROGRESS, that._progressHandler).unbind(ERROR, that._errorHandler);\n } else {\n that._refreshHandler = $.proxy(that.refresh, that);\n that._progressHandler = $.proxy(that._requestStart, that);\n that._stateResetHandler = $.proxy(that._stateReset, that);\n that._errorHandler = $.proxy(that._error, that);\n }\n that.dataSource = kendo.data.PivotDataSource.create(dataSource).bind(CHANGE, that._refreshHandler).bind(PROGRESS, that._progressHandler).bind(STATERESET, that._stateResetHandler).bind(ERROR, that._errorHandler);\n },\n _error: function () {\n this._progress(false);\n },\n _requestStart: function () {\n this._progress(true);\n },\n _stateReset: function () {\n this._columnBuilder.reset();\n this._rowBuilder.reset();\n },\n _wrapper: function () {\n var height = this.options.height;\n this.wrapper = this.element.addClass('k-widget k-pivot');\n if (height) {\n this.wrapper.css('height', height);\n }\n },\n _measureFields: function () {\n this.measureFields = $(DIV).addClass('k-pivot-toolbar k-header k-settings-measures');\n this.measuresTarget = this._createSettingTarget(this.measureFields, {\n setting: 'measures',\n messages: { empty: this.options.messages.measureFields }\n });\n },\n _createSettingTarget: function (element, options) {\n var template = '<span tabindex=\"0\" class=\"k-button\" data-' + kendo.ns + 'name=\"${data.name}\">${data.name}';\n var sortable = options.sortable;\n var icons = '';\n if (sortable) {\n icons += '#if (data.sortIcon) {#';\n icons += '<span class=\"k-icon ${data.sortIcon}-sm\"></span>';\n icons += '#}#';\n }\n if (options.filterable || sortable) {\n icons += '<span class=\"k-icon k-i-more-vertical k-setting-fieldmenu\"></span>';\n }\n if (this.options.reorderable) {\n icons += '<span class=\"k-icon k-i-close k-setting-delete\"></span>';\n }\n if (icons) {\n template += '<span class=\"k-field-actions\">' + icons + '</span>';\n }\n template += '</span>';\n return new kendo.ui.PivotSettingTarget(element, $.extend({\n template: template,\n emptyTemplate: '<span class=\"k-empty\">${data}</span>',\n enabled: this.options.reorderable,\n dataSource: this.dataSource\n }, options));\n },\n _initSettingTargets: function () {\n this.columnsTarget = this._createSettingTarget(this.columnFields, {\n connectWith: this.rowFields,\n setting: 'columns',\n filterable: this.options.filterable,\n sortable: this.options.sortable,\n messages: {\n empty: this.options.messages.columnFields,\n fieldMenu: this.options.messages.fieldMenu\n }\n });\n this.rowsTarget = this._createSettingTarget(this.rowFields, {\n connectWith: this.columnFields,\n setting: 'rows',\n filterable: this.options.filterable,\n sortable: this.options.sortable,\n messages: {\n empty: this.options.messages.rowFields,\n fieldMenu: this.options.messages.fieldMenu\n }\n });\n },\n _createLayout: function () {\n var that = this;\n var layoutTable = $(LAYOUT_TABLE);\n var leftContainer = layoutTable.find('.k-pivot-rowheaders');\n var rightContainer = layoutTable.find('.k-pivot-table');\n var gridWrapper = $(DIV).addClass('k-grid k-widget');\n that._measureFields();\n that.columnFields = $(DIV).addClass('k-pivot-toolbar k-header k-settings-columns');\n that.rowFields = $(DIV).addClass('k-pivot-toolbar k-header k-settings-rows');\n that.columnsHeader = $('<div class=\"k-grid-header-wrap\" />').wrap('<div class=\"k-grid-header\" />');\n that.columnsHeader.parent().css('padding-right', kendo.support.scrollbar());\n that.rowsHeader = $('<div class=\"k-grid k-widget k-alt\"/>');\n that.content = $('<div class=\"k-grid-content\" />');\n leftContainer.append(that.measureFields);\n leftContainer.append(that.rowFields);\n leftContainer.append(that.rowsHeader);\n gridWrapper.append(that.columnsHeader.parent());\n gridWrapper.append(that.content);\n rightContainer.append(that.columnFields);\n rightContainer.append(gridWrapper);\n that.wrapper.append(layoutTable);\n that.columnsHeaderTree = new kendo.dom.Tree(that.columnsHeader[0]);\n that.rowsHeaderTree = new kendo.dom.Tree(that.rowsHeader[0]);\n that.contentTree = new kendo.dom.Tree(that.content[0]);\n that._initSettingTargets();\n },\n _progress: function (toggle) {\n kendo.ui.progress(this.wrapper, toggle);\n },\n _resize: function () {\n if (this.content[0].firstChild) {\n this._setSectionsWidth();\n this._setSectionsHeight();\n this._setContentWidth();\n this._setContentHeight();\n this._columnHeaderReflow();\n }\n },\n _columnHeaderReflow: function () {\n var columnTable = this.columnsHeader.children('table');\n if (!kendo.support.browser.mozilla) {\n return;\n }\n clearTimeout(this._headerReflowTimeout);\n columnTable.css('table-layout', 'auto');\n this._headerReflowTimeout = setTimeout(function () {\n columnTable.css('table-layout', '');\n });\n },\n _setSectionsWidth: function () {\n var rowsHeader = this.rowsHeader;\n var leftColumn = rowsHeader.parent('.k-pivot-rowheaders').width(AUTO);\n var width;\n width = Math.max(outerWidth(this.measureFields), outerWidth(this.rowFields));\n width = Math.max(rowsHeader.children('table').width(), width);\n leftColumn.width(width);\n },\n _setSectionsHeight: function () {\n var measureFieldsHeight = this.measureFields.height(AUTO).height();\n var columnFieldsHeight = this.columnFields.height(AUTO).height();\n var rowFieldsHeight = this.rowFields.height(AUTO).innerHeight();\n var columnsHeight = this.columnsHeader.height(AUTO).innerHeight();\n var padding = rowFieldsHeight - this.rowFields.height();\n var firstRowHeight = columnFieldsHeight > measureFieldsHeight ? columnFieldsHeight : measureFieldsHeight;\n var secondRowHeight = columnsHeight > rowFieldsHeight ? columnsHeight : rowFieldsHeight;\n this.measureFields.height(firstRowHeight);\n this.columnFields.height(firstRowHeight);\n this.rowFields.height(secondRowHeight - padding);\n this.columnsHeader.height(secondRowHeight);\n },\n _setContentWidth: function () {\n var contentTable = this.content.find('table');\n var columnTable = this.columnsHeader.children('table');\n var rowLength = contentTable.children('colgroup').children().length;\n var calculatedWidth = rowLength * this.options.columnWidth;\n var minWidth = Math.ceil(calculatedWidth / this.content.width() * 100);\n if (minWidth < 100) {\n minWidth = 100;\n }\n contentTable.add(columnTable).css('width', minWidth + '%');\n this._resetColspan(columnTable);\n },\n _setContentHeight: function () {\n var that = this;\n var content = that.content;\n var rowsHeader = that.rowsHeader;\n var innerHeight = that.wrapper.innerHeight();\n var scrollbar = kendo.support.scrollbar();\n var skipScrollbar = content[0].offsetHeight === content[0].clientHeight;\n var height = that.options.height;\n if (that.wrapper.is(':visible')) {\n if (!innerHeight || !height) {\n if (skipScrollbar) {\n scrollbar = 0;\n }\n content.height('auto');\n rowsHeader.height(content.height() - scrollbar);\n return;\n }\n innerHeight -= outerHeight(that.columnFields);\n innerHeight -= outerHeight(that.columnsHeader);\n if (innerHeight <= scrollbar * 2) {\n innerHeight = scrollbar * 2 + 1;\n if (!skipScrollbar) {\n innerHeight += scrollbar;\n }\n }\n content.height(innerHeight);\n if (skipScrollbar) {\n scrollbar = 0;\n }\n rowsHeader.height(innerHeight - scrollbar);\n }\n },\n _resetColspan: function (columnTable) {\n var that = this;\n var cell = columnTable.children('tbody').children(':first').children(':first');\n if (that._colspan === undefined) {\n that._colspan = cell.attr('colspan');\n }\n cell.attr('colspan', 1);\n clearTimeout(that._layoutTimeout);\n that._layoutTimeout = setTimeout(function () {\n cell.attr('colspan', that._colspan);\n that._colspan = undefined;\n });\n },\n _axisMeasures: function (axis) {\n var result = [];\n var dataSource = this.dataSource;\n var measures = dataSource.measures();\n var hasMeasure = measures.length > 1 || measures[0] && measures[0].type;\n if (dataSource.measuresAxis() === axis) {\n if (dataSource[axis]().length === 0 || hasMeasure) {\n result = measures;\n }\n }\n return result;\n },\n items: function () {\n return [];\n },\n refresh: function () {\n var that = this;\n var dataSource = that.dataSource;\n var axes = dataSource.axes();\n var columns = (axes.columns || {}).tuples || [];\n var rows = (axes.rows || {}).tuples || [];\n var columnBuilder = that._columnBuilder;\n var rowBuilder = that._rowBuilder;\n var columnAxis = {};\n var rowAxis = {};\n if (that.trigger(DATABINDING, { action: 'rebind' })) {\n return;\n }\n columnBuilder.measures = that._axisMeasures('columns');\n that.columnsHeaderTree.render(columnBuilder.build(columns));\n that.rowsHeaderTree.render(rowBuilder.build(rows));\n columnAxis = {\n indexes: columnBuilder._indexes,\n measures: columnBuilder.measures,\n metadata: columnBuilder.metadata\n };\n rowAxis = {\n indexes: rowBuilder._indexes,\n measures: this._axisMeasures('rows'),\n metadata: rowBuilder.metadata\n };\n that.contentTree.render(that._contentBuilder.build(dataSource.view(), columnAxis, rowAxis));\n that._resize();\n if (that.touchScroller) {\n that.touchScroller.contentResized();\n } else {\n var touchScroller = kendo.touchScroller(that.content);\n if (touchScroller && touchScroller.movable) {\n that.touchScroller = touchScroller;\n touchScroller.movable.bind('change', function (e) {\n that.columnsHeader.scrollLeft(-e.sender.x);\n that.rowsHeader.scrollTop(-e.sender.y);\n });\n }\n }\n that._progress(false);\n that.trigger(DATABOUND);\n },\n _scrollable: function () {\n var that = this;\n var columnsHeader = that.columnsHeader;\n var rowsHeader = that.rowsHeader;\n that.content.scroll(function () {\n columnsHeader.scrollLeft(this.scrollLeft);\n rowsHeader.scrollTop(this.scrollTop);\n });\n rowsHeader.bind('DOMMouseScroll' + NS + ' mousewheel' + NS, $.proxy(that._wheelScroll, that));\n },\n _wheelScroll: function (e) {\n if (e.ctrlKey) {\n return;\n }\n var delta = kendo.wheelDeltaY(e);\n var scrollTop = this.content.scrollTop();\n if (delta) {\n e.preventDefault();\n $(e.currentTarget).one('wheel' + NS, false);\n this.rowsHeader.scrollTop(scrollTop + -delta);\n this.content.scrollTop(scrollTop + -delta);\n }\n }\n });\n var element = kendo.dom.element;\n var htmlNode = kendo.dom.html;\n var createMetadata = function (levelNum, memberIdx) {\n return {\n maxChildren: 0,\n children: 0,\n maxMembers: 0,\n members: 0,\n measures: 1,\n levelNum: levelNum,\n parentMember: memberIdx !== 0\n };\n };\n var buildPath = function (tuple, index) {\n var path = [];\n var idx = 0;\n for (; idx <= index; idx++) {\n path.push(tuple.members[idx].name);\n }\n return path;\n };\n var tupleName = function (tuple, index) {\n var name = '';\n var idx = 0;\n for (; idx <= index; idx++) {\n name += tuple.members[idx].name;\n }\n return name;\n };\n var ColumnBuilder = Class.extend({\n init: function () {\n this.measures = 1;\n this.metadata = {};\n },\n build: function (tuples) {\n var tbody = this._tbody(tuples);\n var colgroup = this._colGroup();\n return [element('table', null, [\n colgroup,\n tbody\n ])];\n },\n reset: function () {\n this.metadata = {};\n },\n _colGroup: function () {\n var length = this._rowLength();\n var children = [];\n var idx = 0;\n for (; idx < length; idx++) {\n children.push(element('col', null));\n }\n return element('colgroup', null, children);\n },\n _tbody: function (tuples) {\n var root = tuples[0];\n this.map = {};\n this.rows = [];\n this.rootTuple = root;\n this._indexes = [];\n if (root) {\n this._buildRows(root, 0);\n this._normalize();\n } else {\n this.rows.push(element('tr', null, [element('th', null, [htmlNode(' ')])]));\n }\n return element('tbody', null, this.rows);\n },\n _normalize: function () {\n var rows = this.rows;\n var rowsLength = rows.length;\n var rowIdx = 0;\n var row;\n var cellsLength;\n var cellIdx;\n var cells;\n var cell;\n for (; rowIdx < rowsLength; rowIdx++) {\n row = rows[rowIdx];\n if (row.rowSpan === 1) {\n continue;\n }\n cells = row.children;\n cellIdx = 0;\n cellsLength = cells.length;\n for (; cellIdx < cellsLength; cellIdx++) {\n cell = cells[cellIdx];\n if (cell.tupleAll) {\n cell.attr.rowSpan = row.rowSpan;\n }\n }\n }\n },\n _rowIndex: function (row) {\n var rows = this.rows;\n var length = rows.length;\n var idx = 0;\n for (; idx < length; idx++) {\n if (rows[idx] === row) {\n break;\n }\n }\n return idx;\n },\n _rowLength: function () {\n var cells = this.rows[0] ? this.rows[0].children : [];\n var length = cells.length;\n var rowLength = 0;\n var idx = 0;\n if (length) {\n for (; idx < length; idx++) {\n rowLength += cells[idx].attr.colSpan || 1;\n }\n }\n if (!rowLength) {\n rowLength = this.measures;\n }\n return rowLength;\n },\n _row: function (tuple, memberIdx, parentMember) {\n var rootName = this.rootTuple.members[memberIdx].name;\n var levelNum = tuple.members[memberIdx].levelNum;\n var rowKey = rootName + levelNum;\n var map = this.map;\n var parentRow;\n var children;\n var row = map[rowKey];\n if (!row) {\n row = element('tr', null, []);\n row.parentMember = parentMember;\n row.collapsed = 0;\n row.colSpan = 0;\n row.rowSpan = 1;\n map[rowKey] = row;\n parentRow = map[rootName + (Number(levelNum) - 1)];\n if (parentRow) {\n children = parentRow.children;\n if (children[1] && children[1].attr.className.indexOf('k-alt') === -1) {\n row.notFirst = true;\n } else {\n row.notFirst = parentRow.notFirst;\n }\n }\n this.rows.splice(this._rowIndex(parentRow) + 1, 0, row);\n } else {\n row.notFirst = false;\n if (!row.parentMember || row.parentMember !== parentMember) {\n row.parentMember = parentMember;\n row.collapsed = 0;\n row.colSpan = 0;\n }\n }\n return row;\n },\n _measures: function (measures, tuple, className) {\n var map = this.map;\n var row = map.measureRow;\n var measure;\n if (!row) {\n row = element('tr', null, []);\n map.measureRow = row;\n this.rows.push(row);\n }\n for (var idx = 0, length = measures.length; idx < length; idx++) {\n measure = measures[idx];\n row.children.push(this._cell(className || '', [this._content(measure, tuple)], measure));\n }\n return length;\n },\n _content: function (member, tuple) {\n return htmlNode(this.template({\n member: member,\n tuple: tuple\n }));\n },\n _cell: function (className, children, member) {\n var cell = element('th', { className: 'k-header' + className }, children);\n cell.value = member.caption || member.name;\n return cell;\n },\n _buildRows: function (tuple, memberIdx, parentMember) {\n var members = tuple.members;\n var member = members[memberIdx];\n var nextMember = members[memberIdx + 1];\n var row, childRow, children, childrenLength;\n var cell, allCell, cellAttr;\n var cellChildren = [];\n var path;\n var idx = 0;\n var metadata;\n var colSpan;\n var collapsed = 0;\n var memberCollapsed = 0;\n if (member.measure) {\n this._measures(member.children, tuple);\n return;\n }\n path = kendo.stringify(buildPath(tuple, memberIdx));\n row = this._row(tuple, memberIdx, parentMember);\n children = member.children;\n childrenLength = children.length;\n metadata = this.metadata[path];\n if (!metadata) {\n this.metadata[path] = metadata = createMetadata(Number(member.levelNum), memberIdx);\n metadata.rootLevelNum = Number(this.rootTuple.members[memberIdx].levelNum);\n }\n this._indexes.push({\n path: path,\n tuple: tuple\n });\n if (member.hasChildren) {\n if (metadata.expanded === false) {\n collapsed = metadata.maxChildren;\n row.collapsed += collapsed;\n metadata.children = 0;\n childrenLength = 0;\n }\n cellAttr = { className: 'k-icon ' + (childrenLength ? STATE_EXPANDED : STATE_COLLAPSED) };\n cellAttr[kendo.attr('path')] = path;\n cellChildren.push(element('span', cellAttr));\n }\n cellChildren.push(this._content(member, tuple));\n cell = this._cell(row.notFirst ? ' k-first' : '', cellChildren, member);\n row.children.push(cell);\n row.colSpan += 1;\n if (childrenLength) {\n allCell = this._cell(' k-alt', [this._content(member, tuple)], member);\n row.children.push(allCell);\n for (; idx < childrenLength; idx++) {\n childRow = this._buildRows(children[idx], memberIdx, member);\n }\n colSpan = childRow.colSpan;\n collapsed = childRow.collapsed;\n cell.attr.colSpan = colSpan;\n metadata.children = colSpan;\n metadata.members = 1;\n row.colSpan += colSpan;\n row.collapsed += collapsed;\n row.rowSpan = childRow.rowSpan + 1;\n if (nextMember) {\n if (nextMember.measure) {\n colSpan = this._measures(nextMember.children, tuple, ' k-alt');\n } else {\n childRow = this._buildRows(tuple, memberIdx + 1);\n colSpan = childRow.colSpan;\n row.collapsed += childRow.collapsed;\n memberCollapsed = childRow.collapsed;\n }\n allCell.attr.colSpan = colSpan;\n colSpan -= 1;\n metadata.members += colSpan;\n row.colSpan += colSpan;\n }\n } else if (nextMember) {\n if (nextMember.measure) {\n colSpan = this._measures(nextMember.children, tuple);\n } else {\n childRow = this._buildRows(tuple, memberIdx + 1);\n colSpan = childRow.colSpan;\n row.collapsed += childRow.collapsed;\n memberCollapsed = childRow.collapsed;\n }\n metadata.members = colSpan;\n if (colSpan > 1) {\n cell.attr.colSpan = colSpan;\n row.colSpan += colSpan - 1;\n }\n }\n if (metadata.maxMembers < metadata.members + memberCollapsed) {\n metadata.maxMembers = metadata.members + memberCollapsed;\n }\n children = metadata.children + collapsed;\n if (metadata.maxChildren < children) {\n metadata.maxChildren = children;\n }\n (allCell || cell).tupleAll = true;\n return row;\n }\n });\n var RowBuilder = Class.extend({\n init: function () {\n this.metadata = {};\n },\n build: function (tuples) {\n var tbody = this._tbody(tuples);\n var colgroup = this._colGroup();\n return [element('table', null, [\n colgroup,\n tbody\n ])];\n },\n reset: function () {\n this.metadata = {};\n },\n _rowLength: function () {\n var children = this.rows[0].children;\n var length = 0;\n var idx = 0;\n var cell = children[idx];\n while (cell) {\n length += cell.attr.colSpan || 1;\n cell = children[++idx];\n }\n return length;\n },\n _colGroup: function () {\n var length = this._rowLength();\n var children = [];\n var idx = 0;\n for (; idx < length; idx++) {\n children.push(element('col', null));\n }\n return element('colgroup', null, children);\n },\n _tbody: function (tuples) {\n var root = tuples[0];\n this.rootTuple = root;\n this.rows = [];\n this.map = {};\n this._indexes = [];\n if (root) {\n this._buildRows(root, 0);\n this._normalize();\n } else {\n this.rows.push(element('tr', null, [element('td', null, [htmlNode(' ')])]));\n }\n return element('tbody', null, this.rows);\n },\n _normalize: function () {\n var rows = this.rows;\n var rowsLength = rows.length;\n var rowIdx = 0;\n var members = this.rootTuple.members;\n var firstMemberName = members[0].name;\n var membersLength = members.length;\n var memberIdx = 0;\n var row;\n var cell;\n var maxcolSpan;\n var map = this.map;\n var allRow;\n for (; rowIdx < rowsLength; rowIdx++) {\n row = rows[rowIdx];\n for (memberIdx = 0; memberIdx < membersLength; memberIdx++) {\n maxcolSpan = this[members[memberIdx].name];\n cell = row.colSpan['dim' + memberIdx];\n if (cell && cell.colSpan < maxcolSpan) {\n cell.attr.colSpan = maxcolSpan - cell.colSpan + 1;\n }\n }\n }\n row = map[firstMemberName];\n allRow = map[firstMemberName + 'all'];\n if (row) {\n row.children[0].attr.className = 'k-first';\n }\n if (allRow) {\n allRow.children[0].attr.className += ' k-first';\n }\n },\n _row: function (children) {\n var row = element('tr', null, children);\n row.rowSpan = 1;\n row.colSpan = {};\n this.rows.push(row);\n return row;\n },\n _content: function (member, tuple) {\n return htmlNode(this.template({\n member: member,\n tuple: tuple\n }));\n },\n _cell: function (className, children, member) {\n var cell = element('td', { className: className }, children);\n cell.value = member.caption || member.name;\n return cell;\n },\n _buildRows: function (tuple, memberIdx) {\n var map = this.map;\n var path;\n var members = tuple.members;\n var member = members[memberIdx];\n var nextMember = members[memberIdx + 1];\n var children = member.children;\n var childrenLength = children.length;\n var levelNum = Number(member.levelNum);\n var rootName = this.rootTuple.members[memberIdx].name;\n var tuplePath = buildPath(tuple, memberIdx - 1).join('');\n var rootLevelNum = Number(this.rootTuple.members[memberIdx].levelNum);\n var parentName = tuplePath + (rootLevelNum === levelNum ? '' : member.parentName || '');\n var row = map[parentName + 'all'] || map[parentName];\n var colSpan = levelNum + 1;\n var cell, allCell;\n var childRow, allRow;\n var metadata;\n var className;\n var cellChildren = [];\n var expandIconAttr;\n var idx;\n if (!row || row.hasChild) {\n row = this._row();\n } else {\n row.hasChild = true;\n }\n if (member.measure) {\n className = row.allCell ? 'k-grid-footer' : '';\n row.children.push(this._cell(className, [this._content(children[0], tuple)], children[0]));\n row.rowSpan = childrenLength;\n for (idx = 1; idx < childrenLength; idx++) {\n this._row([this._cell(className, [this._content(children[idx], tuple)], children[idx])]);\n }\n return row;\n }\n map[tuplePath + member.name] = row;\n path = kendo.stringify(buildPath(tuple, memberIdx));\n metadata = this.metadata[path];\n if (!metadata) {\n this.metadata[path] = metadata = createMetadata(levelNum, memberIdx);\n metadata.rootLevelNum = rootLevelNum;\n }\n this._indexes.push({\n path: path,\n tuple: tuple\n });\n if (member.hasChildren) {\n if (metadata.expanded === false) {\n childrenLength = 0;\n metadata.children = 0;\n }\n expandIconAttr = { className: 'k-icon ' + (childrenLength ? STATE_EXPANDED : STATE_COLLAPSED) };\n expandIconAttr[kendo.attr('path')] = path;\n cellChildren.push(element('span', expandIconAttr));\n }\n cellChildren.push(this._content(member, tuple));\n className = row.allCell && !childrenLength ? 'k-grid-footer' : '';\n cell = this._cell(className, cellChildren, member);\n cell.colSpan = colSpan;\n row.children.push(cell);\n row.colSpan['dim' + memberIdx] = cell;\n if (!this[rootName] || this[rootName] < colSpan) {\n this[rootName] = colSpan;\n }\n if (childrenLength) {\n row.allCell = false;\n row.hasChild = false;\n for (idx = 0; idx < childrenLength; idx++) {\n childRow = this._buildRows(children[idx], memberIdx);\n if (row !== childRow) {\n row.rowSpan += childRow.rowSpan;\n }\n }\n if (row.rowSpan > 1) {\n cell.attr.rowSpan = row.rowSpan;\n }\n metadata.children = row.rowSpan;\n allCell = this._cell('k-grid-footer', [this._content(member, tuple)], member);\n allCell.colSpan = colSpan;\n allRow = this._row([allCell]);\n allRow.colSpan['dim' + memberIdx] = allCell;\n allRow.allCell = true;\n map[tuplePath + member.name + 'all'] = allRow;\n if (nextMember) {\n childRow = this._buildRows(tuple, memberIdx + 1);\n allCell.attr.rowSpan = childRow.rowSpan;\n }\n row.rowSpan += allRow.rowSpan;\n metadata.members = allRow.rowSpan;\n } else if (nextMember) {\n row.hasChild = false;\n this._buildRows(tuple, memberIdx + 1);\n (allCell || cell).attr.rowSpan = row.rowSpan;\n metadata.members = row.rowSpan;\n }\n if (metadata.maxChildren < metadata.children) {\n metadata.maxChildren = metadata.children;\n }\n if (metadata.maxMembers < metadata.members) {\n metadata.maxMembers = metadata.members;\n }\n return row;\n }\n });\n var ContentBuilder = Class.extend({\n init: function () {\n this.columnAxis = {};\n this.rowAxis = {};\n },\n build: function (data, columnAxis, rowAxis) {\n var index = columnAxis.indexes[0];\n var metadata = columnAxis.metadata[index ? index.path : undefined];\n this.columnAxis = columnAxis;\n this.rowAxis = rowAxis;\n this.data = data;\n this.rowLength = metadata ? metadata.maxChildren + metadata.maxMembers : columnAxis.measures.length || 1;\n if (!this.rowLength) {\n this.rowLength = 1;\n }\n var tbody = this._tbody();\n var colgroup = this._colGroup();\n return [element('table', null, [\n colgroup,\n tbody\n ])];\n },\n _colGroup: function () {\n var length = this.columnAxis.measures.length || 1;\n var children = [];\n var idx = 0;\n if (this.rows[0]) {\n length = this.rows[0].children.length;\n }\n for (; idx < length; idx++) {\n children.push(element('col', null));\n }\n return element('colgroup', null, children);\n },\n _tbody: function () {\n this.rows = [];\n if (this.data[0]) {\n this.columnIndexes = this._indexes(this.columnAxis, this.rowLength);\n this.rowIndexes = this._indexes(this.rowAxis, Math.ceil(this.data.length / this.rowLength));\n this._buildRows();\n } else {\n this.rows.push(element('tr', null, [element('td', null, [htmlNode(' ')])]));\n }\n return element('tbody', null, this.rows);\n },\n _indexes: function (axisInfo, total) {\n var result = [];\n var axisInfoMember;\n var indexes = axisInfo.indexes;\n var metadata = axisInfo.metadata;\n var measures = axisInfo.measures;\n var measuresLength = measures.length || 1;\n var current;\n var dataIdx = 0;\n var firstEmpty = 0;\n var idx = 0;\n var length = indexes.length;\n var measureIdx;\n var index;\n var children;\n var skipChildren;\n if (!length) {\n for (measureIdx = 0; measureIdx < measuresLength; measureIdx++) {\n result[measureIdx] = {\n index: measureIdx,\n measure: measures[measureIdx],\n tuple: null\n };\n }\n return result;\n }\n for (; idx < length; idx++) {\n axisInfoMember = indexes[idx];\n current = metadata[axisInfoMember.path];\n children = current.children + current.members;\n skipChildren = 0;\n if (children) {\n children -= measuresLength;\n }\n if (current.expanded === false && current.children !== current.maxChildren) {\n skipChildren = current.maxChildren;\n }\n if (current.parentMember && current.levelNum === current.rootLevelNum) {\n children = -1;\n }\n if (children > -1) {\n for (measureIdx = 0; measureIdx < measuresLength; measureIdx++) {\n index = children + measureIdx;\n if (!current.children) {\n index += firstEmpty;\n }\n result[children + firstEmpty + measureIdx] = {\n children: children,\n index: dataIdx,\n measure: measures[measureIdx],\n tuple: axisInfoMember.tuple\n };\n dataIdx += 1;\n }\n while (result[firstEmpty] !== undefined) {\n firstEmpty += 1;\n }\n }\n if (firstEmpty === total) {\n break;\n }\n dataIdx += skipChildren;\n }\n return result;\n },\n _buildRows: function () {\n var rowIndexes = this.rowIndexes;\n var length = rowIndexes.length;\n var idx = 0;\n for (; idx < length; idx++) {\n this.rows.push(this._buildRow(rowIndexes[idx]));\n }\n },\n _buildRow: function (rowInfo) {\n var startIdx = rowInfo.index * this.rowLength;\n var columnIndexes = this.columnIndexes;\n var length = columnIndexes.length;\n var columnInfo;\n var cells = [];\n var idx = 0;\n var templateInfo;\n var cell, cellContent;\n var attr, dataItem, measure;\n for (; idx < length; idx++) {\n columnInfo = columnIndexes[idx];\n attr = {};\n if (columnInfo.children) {\n attr.className = 'k-alt';\n }\n cellContent = '';\n dataItem = this.data[startIdx + columnInfo.index];\n measure = columnInfo.measure || rowInfo.measure;\n templateInfo = {\n columnTuple: columnInfo.tuple,\n rowTuple: rowInfo.tuple,\n measure: measure,\n dataItem: dataItem\n };\n if (dataItem.value !== '' && measure && measure.type) {\n if (measure.type === 'status') {\n cellContent = this.kpiStatusTemplate(templateInfo);\n } else if (measure.type === 'trend') {\n cellContent = this.kpiTrendTemplate(templateInfo);\n }\n }\n if (!cellContent) {\n cellContent = this.dataTemplate(templateInfo);\n }\n cell = element('td', attr, [htmlNode(cellContent)]);\n cell.value = dataItem.value;\n cells.push(cell);\n }\n attr = {};\n if (rowInfo.children) {\n attr.className = 'k-grid-footer';\n }\n return element('tr', attr, cells);\n }\n });\n ui.plugin(PivotGrid);\n kendo.PivotExcelExporter = kendo.Class.extend({\n init: function (options) {\n this.options = options;\n this.widget = options.widget;\n this.dataSource = this.widget.dataSource;\n },\n _columns: function () {\n var columnHeaderTable = this.widget.columnsHeaderTree.children[0];\n var rowHeaderTable = this.widget.rowsHeaderTree.children[0];\n var columnHeaderLength = columnHeaderTable.children[0].children.length;\n var rowHeaderLength = rowHeaderTable.children[0].children.length;\n var width = this.widget.options.columnWidth;\n var result = [];\n var idx;\n if (rowHeaderLength && this.dataSource.data()[0]) {\n for (idx = 0; idx < rowHeaderLength; idx++) {\n result.push({ autoWidth: true });\n }\n }\n for (idx = 0; idx < columnHeaderLength; idx++) {\n result.push({\n autoWidth: false,\n width: width\n });\n }\n return result;\n },\n _cells: function (rows, type, callback) {\n var result = [];\n var i = 0;\n var length = rows.length;\n var cellsLength;\n var row, cells;\n var j, cell;\n for (; i < length; i++) {\n row = [];\n cells = rows[i].children;\n cellsLength = cells.length;\n for (j = 0; j < cellsLength; j++) {\n cell = cells[j];\n row.push({\n background: '#7a7a7a',\n color: '#fff',\n value: cell.value,\n colSpan: cell.attr.colSpan || 1,\n rowSpan: cell.attr.rowSpan || 1\n });\n }\n if (callback) {\n callback(row, i);\n }\n result.push({\n cells: row,\n type: type\n });\n }\n return result;\n },\n _rows: function () {\n var columnHeaderTable = this.widget.columnsHeaderTree.children[0];\n var rowHeaderTable = this.widget.rowsHeaderTree.children[0];\n var columnHeaderLength = columnHeaderTable.children[0].children.length;\n var rowHeaderLength = rowHeaderTable.children[0].children.length;\n var columnHeaderRows = columnHeaderTable.children[1].children;\n var rowHeaderRows = rowHeaderTable.children[1].children;\n var contentRows = this.widget.contentTree.children[0].children[1].children;\n var columnRows = this._cells(columnHeaderRows, 'header');\n if (rowHeaderLength) {\n columnRows[0].cells.splice(0, 0, {\n background: '#7a7a7a',\n color: '#fff',\n value: '',\n colSpan: rowHeaderLength,\n rowSpan: columnHeaderRows.length\n });\n }\n var dataCallback = function (row, index) {\n var j = 0;\n var cell, value;\n var cells = contentRows[index].children;\n for (; j < columnHeaderLength; j++) {\n cell = cells[j];\n value = Number(cell.value);\n if (isNaN(value)) {\n value = cell.value;\n }\n row.push({\n background: '#dfdfdf',\n color: '#333',\n value: value,\n colSpan: 1,\n rowSpan: 1\n });\n }\n };\n var rowRows = this._cells(rowHeaderRows, 'data', dataCallback);\n return columnRows.concat(rowRows);\n },\n _freezePane: function () {\n var columnHeaderTable = this.widget.columnsHeaderTree.children[0];\n var rowHeaderTable = this.widget.rowsHeaderTree.children[0];\n var rowHeaderLength = rowHeaderTable.children[0].children.length;\n var columnHeaderRows = columnHeaderTable.children[1].children;\n return {\n colSplit: rowHeaderLength,\n rowSplit: columnHeaderRows.length\n };\n },\n workbook: function () {\n var promise;\n if (this.dataSource.view()[0]) {\n promise = $.Deferred();\n promise.resolve();\n } else {\n promise = this.dataSource.fetch();\n }\n return promise.then($.proxy(function () {\n return {\n sheets: [{\n columns: this._columns(),\n rows: this._rows(),\n freezePane: this._freezePane(),\n filter: null\n }]\n };\n }, this));\n }\n });\n var PivotExcelMixin = {\n extend: function (proto) {\n proto.events.push('excelExport');\n proto.options.excel = $.extend(proto.options.excel, this.options);\n proto.saveAsExcel = this.saveAsExcel;\n },\n options: {\n proxyURL: '',\n filterable: false,\n fileName: 'Export.xlsx'\n },\n saveAsExcel: function () {\n var excel = this.options.excel || {};\n var exporter = new kendo.PivotExcelExporter({ widget: this });\n exporter.workbook().then($.proxy(function (book) {\n if (!this.trigger('excelExport', { workbook: book })) {\n var workbook = new kendo.ooxml.Workbook(book);\n kendo.saveAs({\n dataURI: workbook.toDataURL(),\n fileName: book.fileName || excel.fileName,\n proxyURL: excel.proxyURL,\n forceProxy: excel.forceProxy\n });\n }\n }, this));\n }\n };\n kendo.PivotExcelMixin = PivotExcelMixin;\n if (kendo.ooxml && kendo.ooxml.Workbook) {\n PivotExcelMixin.extend(PivotGrid.prototype);\n }\n if (kendo.PDFMixin) {\n kendo.PDFMixin.extend(PivotGrid.prototype);\n PivotGrid.fn._drawPDF = function () {\n return this._drawPDFShadow({ width: this.wrapper.width() }, { avoidLinks: this.options.pdf.avoidLinks });\n };\n }\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.treeview.draganddrop', [\n 'kendo.data',\n 'kendo.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'treeview.draganddrop',\n name: 'Hierarchical Drag & Drop',\n category: 'framework',\n depends: [\n 'core',\n 'draganddrop'\n ],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo;\n var ui = kendo.ui;\n var proxy = $.proxy;\n var extend = $.extend;\n var VISIBILITY = 'visibility';\n var KSTATEHOVER = 'k-state-hover';\n var INPUTSELECTOR = 'input,a,textarea,.k-multiselect-wrap,select,button,a.k-button>.k-icon,button.k-button>.k-icon,span.k-icon.k-i-arrow-60-right,span.k-icon.k-i-arrow-45-down-right';\n ui.HierarchicalDragAndDrop = kendo.Class.extend({\n init: function (element, options) {\n this.element = element;\n this.hovered = element;\n this.options = extend({\n dragstart: $.noop,\n drag: $.noop,\n drop: $.noop,\n dragend: $.noop\n }, options);\n this._draggable = new ui.Draggable(element, {\n ignore: INPUTSELECTOR,\n filter: options.filter,\n autoScroll: options.autoScroll,\n cursorOffset: {\n left: 10,\n top: kendo.support.mobileOS ? -40 / kendo.support.zoomLevel() : 10\n },\n hint: proxy(this._hint, this),\n dragstart: proxy(this.dragstart, this),\n dragcancel: proxy(this.dragcancel, this),\n drag: proxy(this.drag, this),\n dragend: proxy(this.dragend, this),\n $angular: options.$angular\n });\n },\n _hint: function (element) {\n return '<div class=\\'k-header k-drag-clue\\'>' + '<span class=\\'k-icon k-drag-status\\' />' + this.options.hintText(element) + '</div>';\n },\n _removeTouchHover: function () {\n if (kendo.support.touch && this.hovered) {\n this.hovered.find('.' + KSTATEHOVER).removeClass(KSTATEHOVER);\n this.hovered = false;\n }\n },\n _hintStatus: function (newStatus) {\n var statusElement = this._draggable.hint.find('.k-drag-status')[0];\n if (newStatus) {\n statusElement.className = 'k-icon k-drag-status ' + newStatus;\n } else {\n return $.trim(statusElement.className.replace(/(p|k)-(icon|drag-status)/g, ''));\n }\n },\n dragstart: function (e) {\n this.source = e.currentTarget.closest(this.options.itemSelector);\n if (this.options.dragstart(this.source)) {\n e.preventDefault();\n }\n if (this.options.reorderable) {\n this.dropHint = $('<div class=\\'k-i-drag-and-drop\\' />').css(VISIBILITY, 'hidden').appendTo(this.element);\n } else {\n this.dropHint = $();\n }\n },\n drag: function (e) {\n var options = this.options;\n var source = this.source;\n var target = this.dropTarget = $(kendo.eventTarget(e));\n var container = target.closest(options.allowedContainers);\n var hoveredItem, itemHeight, itemTop, itemContent, delta;\n var insertOnTop, insertOnBottom, addChild;\n var itemData, position, status;\n if (!container.length) {\n status = 'k-i-cancel';\n this._removeTouchHover();\n } else if (source[0] == target[0] || options.contains(source[0], target[0])) {\n status = 'k-i-cancel';\n } else {\n status = 'k-i-insert-middle';\n itemData = options.itemFromTarget(target);\n hoveredItem = itemData.item;\n if (hoveredItem.length) {\n this._removeTouchHover();\n itemHeight = kendo._outerHeight(hoveredItem);\n itemContent = itemData.content;\n if (options.reorderable) {\n delta = itemHeight / (itemContent.length > 0 ? 4 : 2);\n itemTop = kendo.getOffset(hoveredItem).top;\n insertOnTop = e.y.location < itemTop + delta;\n insertOnBottom = itemTop + itemHeight - delta < e.y.location;\n addChild = itemContent.length && !insertOnTop && !insertOnBottom;\n } else {\n addChild = true;\n insertOnTop = false;\n insertOnBottom = false;\n }\n this.hovered = addChild ? container : false;\n this.dropHint.css(VISIBILITY, addChild ? 'hidden' : 'visible');\n if (this._lastHover && this._lastHover[0] != itemContent[0]) {\n this._lastHover.removeClass(KSTATEHOVER);\n }\n this._lastHover = itemContent.toggleClass(KSTATEHOVER, addChild);\n if (addChild) {\n status = 'k-i-plus';\n } else {\n position = hoveredItem.position();\n position.top += insertOnTop ? 0 : itemHeight;\n this.dropHint.css(position)[insertOnTop ? 'prependTo' : 'appendTo'](options.dropHintContainer(hoveredItem));\n if (insertOnTop && itemData.first) {\n status = 'k-i-insert-up';\n }\n if (insertOnBottom && itemData.last) {\n status = 'k-i-insert-down';\n }\n }\n } else if (target[0] != this.dropHint[0]) {\n if (this._lastHover) {\n this._lastHover.removeClass(KSTATEHOVER);\n }\n if (!$.contains(this.element[0], container[0])) {\n status = 'k-i-plus';\n } else {\n status = 'k-i-cancel';\n }\n }\n }\n this.options.drag({\n originalEvent: e.originalEvent,\n source: source,\n target: target,\n pageY: e.y.location,\n pageX: e.x.location,\n status: status.substring(2),\n setStatus: function (value) {\n status = value;\n }\n });\n if (status.indexOf('k-i-insert') !== 0) {\n this.dropHint.css(VISIBILITY, 'hidden');\n }\n this._hintStatus(status);\n },\n dragcancel: function () {\n this.dropHint.remove();\n },\n dragend: function (e) {\n var position = 'over', source = this.source, destination, dropHint = this.dropHint, dropTarget = this.dropTarget, eventArgs, dropPrevented;\n if (dropHint.css(VISIBILITY) == 'visible') {\n position = this.options.dropPositionFrom(dropHint);\n destination = dropHint.closest(this.options.itemSelector);\n } else if (dropTarget) {\n destination = dropTarget.closest(this.options.itemSelector);\n if (!destination.length) {\n destination = dropTarget.closest(this.options.allowedContainers);\n }\n }\n eventArgs = {\n originalEvent: e.originalEvent,\n source: source[0],\n destination: destination[0],\n valid: this._hintStatus() != 'k-i-cancel',\n setValid: function (newValid) {\n this.valid = newValid;\n },\n dropTarget: dropTarget[0],\n position: position\n };\n dropPrevented = this.options.drop(eventArgs);\n dropHint.remove();\n this._removeTouchHover();\n if (this._lastHover) {\n this._lastHover.removeClass(KSTATEHOVER);\n }\n if (!eventArgs.valid || dropPrevented) {\n this._draggable.dropped = eventArgs.valid;\n return;\n }\n this._draggable.dropped = true;\n this.options.dragend({\n originalEvent: e.originalEvent,\n source: source,\n destination: destination,\n position: position\n });\n },\n destroy: function () {\n this._lastHover = this.hovered = null;\n this._draggable.destroy();\n }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.treeview', [\n 'kendo.data',\n 'kendo.treeview.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'treeview',\n name: 'TreeView',\n category: 'web',\n description: 'The TreeView widget displays hierarchical data in a traditional tree structure,with support for interactive drag-and-drop operations.',\n depends: ['data'],\n features: [{\n id: 'treeview-dragging',\n name: 'Drag & Drop',\n description: 'Support for drag & drop',\n depends: ['treeview.draganddrop']\n }]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, data = kendo.data, extend = $.extend, template = kendo.template, isArray = $.isArray, Widget = ui.Widget, HierarchicalDataSource = data.HierarchicalDataSource, proxy = $.proxy, keys = kendo.keys, NS = '.kendoTreeView', SELECT = 'select', CHECK = 'check', NAVIGATE = 'navigate', EXPAND = 'expand', CHANGE = 'change', ERROR = 'error', CHECKED = 'checked', INDETERMINATE = 'indeterminate', COLLAPSE = 'collapse', DRAGSTART = 'dragstart', DRAG = 'drag', DROP = 'drop', DRAGEND = 'dragend', DATABOUND = 'dataBound', CLICK = 'click', UNDEFINED = 'undefined', KSTATEHOVER = 'k-state-hover', KTREEVIEW = 'k-treeview', VISIBLE = ':visible', NODE = '.k-item', STRING = 'string', ARIASELECTED = 'aria-selected', ARIADISABLED = 'aria-disabled', TreeView, subGroup, nodeContents, nodeIcon, spriteRe, bindings = {\n text: 'dataTextField',\n url: 'dataUrlField',\n spriteCssClass: 'dataSpriteCssClassField',\n imageUrl: 'dataImageUrlField'\n }, isDomElement = function (o) {\n return typeof HTMLElement === 'object' ? o instanceof HTMLElement : o && typeof o === 'object' && o.nodeType === 1 && typeof o.nodeName === STRING;\n };\n function contentChild(filter) {\n return function (node) {\n var result = node.children('.k-animation-container');\n if (!result.length) {\n result = node;\n }\n return result.children(filter);\n };\n }\n function templateNoWith(code) {\n return kendo.template(code, { useWithBlock: false });\n }\n subGroup = contentChild('.k-group');\n nodeContents = contentChild('.k-group,.k-content');\n nodeIcon = function (node) {\n return node.children('div').children('.k-icon');\n };\n function checkboxes(node) {\n return node.find('> div .k-checkbox-wrapper [type=checkbox]');\n }\n function insertAction(indexOffset) {\n return function (nodeData, referenceNode) {\n referenceNode = referenceNode.closest(NODE);\n var group = referenceNode.parent(), parentNode;\n if (group.parent().is('li')) {\n parentNode = group.parent();\n }\n return this._dataSourceMove(nodeData, group, parentNode, function (dataSource, model) {\n return this._insert(dataSource.data(), model, referenceNode.index() + indexOffset);\n });\n };\n }\n spriteRe = /k-sprite/;\n function moveContents(node, container) {\n var tmp;\n while (node && node.nodeName.toLowerCase() != 'ul') {\n tmp = node;\n node = node.nextSibling;\n if (tmp.nodeType == 3) {\n tmp.nodeValue = $.trim(tmp.nodeValue);\n }\n if (spriteRe.test(tmp.className)) {\n container.insertBefore(tmp, container.firstChild);\n } else {\n container.appendChild(tmp);\n }\n }\n }\n function updateNodeHtml(node) {\n var wrapper = node.children('div'), group = node.children('ul'), toggleButton = wrapper.children('.k-icon'), checkbox = node.children(':checkbox'), innerWrapper = wrapper.children('.k-in');\n if (node.hasClass('k-treeview')) {\n return;\n }\n if (!wrapper.length) {\n wrapper = $('<div />').prependTo(node);\n }\n if (!toggleButton.length && group.length) {\n toggleButton = $('<span class=\\'k-icon\\' />').prependTo(wrapper);\n } else if (!group.length || !group.children().length) {\n toggleButton.remove();\n group.remove();\n }\n if (checkbox.length) {\n $('<span class=\\'k-checkbox-wrapper\\' />').appendTo(wrapper).append(checkbox);\n }\n if (!innerWrapper.length) {\n innerWrapper = node.children('a').eq(0).addClass('k-in k-link');\n if (!innerWrapper.length) {\n innerWrapper = $('<span class=\\'k-in\\' />');\n }\n innerWrapper.appendTo(wrapper);\n if (wrapper.length) {\n moveContents(wrapper[0].nextSibling, innerWrapper[0]);\n }\n }\n }\n TreeView = kendo.ui.DataBoundWidget.extend({\n init: function (element, options) {\n var that = this, inferred = false, hasDataSource = options && !!options.dataSource, list;\n if (isArray(options)) {\n options = { dataSource: options };\n }\n if (options && typeof options.loadOnDemand == UNDEFINED && isArray(options.dataSource)) {\n options.loadOnDemand = false;\n }\n Widget.prototype.init.call(that, element, options);\n element = that.element;\n options = that.options;\n list = element.is('ul') && element || element.hasClass(KTREEVIEW) && element.children('ul');\n inferred = !hasDataSource && list.length;\n if (inferred) {\n options.dataSource.list = list;\n }\n that._animation();\n that._accessors();\n that._templates();\n if (!element.hasClass(KTREEVIEW)) {\n that._wrapper();\n if (list) {\n that.root = element;\n that._group(that.wrapper);\n }\n } else {\n that.wrapper = element;\n that.root = element.children('ul').eq(0);\n }\n that._tabindex();\n that.root.attr('role', 'tree');\n that._dataSource(inferred);\n that._attachEvents();\n that._dragging();\n if (!inferred) {\n if (options.autoBind) {\n that._progress(true);\n that.dataSource.fetch();\n }\n } else {\n that._syncHtmlAndDataSource();\n }\n if (options.checkboxes && options.checkboxes.checkChildren) {\n that.updateIndeterminate();\n }\n if (that.element[0].id) {\n that._ariaId = kendo.format('{0}_tv_active', that.element[0].id);\n }\n kendo.notify(that);\n },\n _attachEvents: function () {\n var that = this, clickableItems = '.k-in:not(.k-state-selected,.k-state-disabled)', MOUSEENTER = 'mouseenter';\n that.wrapper.on(MOUSEENTER + NS, '.k-in.k-state-selected', function (e) {\n e.preventDefault();\n }).on(MOUSEENTER + NS, clickableItems, function () {\n $(this).addClass(KSTATEHOVER);\n }).on('mouseleave' + NS, clickableItems, function () {\n $(this).removeClass(KSTATEHOVER);\n }).on(CLICK + NS, clickableItems, proxy(that._click, that)).on('dblclick' + NS, '.k-in:not(.k-state-disabled)', proxy(that._toggleButtonClick, that)).on(CLICK + NS, '.k-i-expand,.k-i-collapse', proxy(that._toggleButtonClick, that)).on('keydown' + NS, proxy(that._keydown, that)).on('focus' + NS, proxy(that._focus, that)).on('blur' + NS, proxy(that._blur, that)).on('mousedown' + NS, '.k-in,.k-checkbox-wrapper :checkbox,.k-i-expand,.k-i-collapse', proxy(that._mousedown, that)).on('change' + NS, '.k-checkbox-wrapper :checkbox', proxy(that._checkboxChange, that)).on('click' + NS, '.k-checkbox-wrapper :checkbox', proxy(that._checkboxClick, that)).on('click' + NS, '.k-request-retry', proxy(that._retryRequest, that)).on('click' + NS, function (e) {\n if (!$(e.target).is(':kendoFocusable')) {\n that.focus();\n }\n });\n },\n _checkboxClick: function (e) {\n var checkbox = $(e.target);\n if (checkbox.data(INDETERMINATE)) {\n checkbox.data(INDETERMINATE, false).prop(INDETERMINATE, false).prop(CHECKED, true);\n this._checkboxChange(e);\n }\n },\n _syncHtmlAndDataSource: function (root, dataSource) {\n root = root || this.root;\n dataSource = dataSource || this.dataSource;\n var data = dataSource.view(), uidAttr = kendo.attr('uid'), expandedAttr = kendo.attr('expanded'), checkboxesEnabled = this.options.checkboxes, items = root.children('li'), i, item, dataItem, uid, itemCheckbox;\n for (i = 0; i < items.length; i++) {\n dataItem = data[i];\n uid = dataItem.uid;\n item = items.eq(i);\n item.attr('role', 'treeitem').attr(uidAttr, uid);\n dataItem.expanded = item.attr(expandedAttr) === 'true';\n if (checkboxesEnabled) {\n itemCheckbox = checkboxes(item);\n dataItem.checked = itemCheckbox.prop(CHECKED);\n itemCheckbox.attr('id', '_' + uid);\n itemCheckbox.next('.k-checkbox-label').attr('for', '_' + uid);\n }\n this._syncHtmlAndDataSource(item.children('ul'), dataItem.children);\n }\n },\n _animation: function () {\n var options = this.options, animationOptions = options.animation;\n if (animationOptions === false) {\n animationOptions = {\n expand: { effects: {} },\n collapse: {\n hide: true,\n effects: {}\n }\n };\n } else if (!animationOptions.collapse || !('effects' in animationOptions.collapse)) {\n animationOptions.collapse = extend({ reverse: true }, animationOptions.expand);\n }\n extend(animationOptions.collapse, { hide: true });\n options.animation = animationOptions;\n },\n _dragging: function () {\n var enabled = this.options.dragAndDrop;\n var dragging = this.dragging;\n if (enabled && !dragging) {\n var widget = this;\n this.dragging = new ui.HierarchicalDragAndDrop(this.element, {\n reorderable: true,\n $angular: this.options.$angular,\n autoScroll: this.options.autoScroll,\n filter: 'div:not(.k-state-disabled) .k-in',\n allowedContainers: '.k-treeview',\n itemSelector: '.k-treeview .k-item',\n hintText: proxy(this._hintText, this),\n contains: function (source, destination) {\n return $.contains(source, destination);\n },\n dropHintContainer: function (item) {\n return item;\n },\n itemFromTarget: function (target) {\n var item = target.closest('.k-top,.k-mid,.k-bot');\n return {\n item: item,\n content: target.closest('.k-in'),\n first: item.hasClass('k-top'),\n last: item.hasClass('k-bot')\n };\n },\n dropPositionFrom: function (dropHint) {\n return dropHint.prevAll('.k-in').length > 0 ? 'after' : 'before';\n },\n dragstart: function (source) {\n return widget.trigger(DRAGSTART, { sourceNode: source[0] });\n },\n drag: function (options) {\n widget.trigger(DRAG, {\n originalEvent: options.originalEvent,\n sourceNode: options.source[0],\n dropTarget: options.target[0],\n pageY: options.pageY,\n pageX: options.pageX,\n statusClass: options.status,\n setStatusClass: options.setStatus\n });\n },\n drop: function (options) {\n return widget.trigger(DROP, {\n originalEvent: options.originalEvent,\n sourceNode: options.source,\n destinationNode: options.destination,\n valid: options.valid,\n setValid: function (state) {\n this.valid = state;\n options.setValid(state);\n },\n dropTarget: options.dropTarget,\n dropPosition: options.position\n });\n },\n dragend: function (options) {\n var source = options.source;\n var destination = options.destination;\n var position = options.position;\n function triggerDragEnd(source) {\n widget.updateIndeterminate();\n widget.trigger(DRAGEND, {\n originalEvent: options.originalEvent,\n sourceNode: source && source[0],\n destinationNode: destination[0],\n dropPosition: position\n });\n }\n if (position == 'over') {\n widget.append(source, destination, triggerDragEnd);\n } else {\n if (position == 'before') {\n source = widget.insertBefore(source, destination);\n } else if (position == 'after') {\n source = widget.insertAfter(source, destination);\n }\n triggerDragEnd(source);\n }\n }\n });\n } else if (!enabled && dragging) {\n dragging.destroy();\n this.dragging = null;\n }\n },\n _hintText: function (node) {\n return this.templates.dragClue({\n item: this.dataItem(node),\n treeview: this.options\n });\n },\n _templates: function () {\n var that = this, options = that.options, fieldAccessor = proxy(that._fieldAccessor, that);\n if (options.template && typeof options.template == STRING) {\n options.template = template(options.template);\n } else if (!options.template) {\n options.template = templateNoWith('# var text = ' + fieldAccessor('text') + '(data.item); #' + '# if (typeof data.item.encoded != \\'undefined\\' && data.item.encoded === false) {#' + '#= text #' + '# } else { #' + '#: text #' + '# } #');\n }\n that._checkboxes();\n that.templates = {\n wrapperCssClass: function (group, item) {\n var result = 'k-item', index = item.index;\n if (group.firstLevel && index === 0) {\n result += ' k-first';\n }\n if (index == group.length - 1) {\n result += ' k-last';\n }\n return result;\n },\n cssClass: function (group, item) {\n var result = '', index = item.index, groupLength = group.length - 1;\n if (group.firstLevel && index === 0) {\n result += 'k-top ';\n }\n if (index === 0 && index != groupLength) {\n result += 'k-top';\n } else if (index == groupLength) {\n result += 'k-bot';\n } else {\n result += 'k-mid';\n }\n return result;\n },\n textClass: function (item, isLink) {\n var result = 'k-in';\n if (isLink) {\n result += ' k-link';\n }\n if (item.enabled === false) {\n result += ' k-state-disabled';\n }\n if (item.selected === true) {\n result += ' k-state-selected';\n }\n return result;\n },\n toggleButtonClass: function (item) {\n var result = 'k-icon';\n if (item.expanded !== true) {\n result += ' k-i-expand';\n } else {\n result += ' k-i-collapse';\n }\n return result;\n },\n groupAttributes: function (group) {\n var attributes = '';\n if (!group.firstLevel) {\n attributes = 'role=\\'group\\'';\n }\n return attributes + (group.expanded !== true ? ' style=\\'display:none\\'' : '');\n },\n groupCssClass: function (group) {\n var cssClass = 'k-group';\n if (group.firstLevel) {\n cssClass += ' k-treeview-lines';\n }\n return cssClass;\n },\n dragClue: templateNoWith('#= data.treeview.template(data) #'),\n group: templateNoWith('<ul class=\\'#= data.r.groupCssClass(data.group) #\\'#= data.r.groupAttributes(data.group) #>' + '#= data.renderItems(data) #' + '</ul>'),\n itemContent: templateNoWith('# var imageUrl = ' + fieldAccessor('imageUrl') + '(data.item); #' + '# var spriteCssClass = ' + fieldAccessor('spriteCssClass') + '(data.item); #' + '# if (imageUrl) { #' + '<img class=\\'k-image\\' alt=\\'\\' src=\\'#= imageUrl #\\'>' + '# } #' + '# if (spriteCssClass) { #' + '<span class=\\'k-sprite #= spriteCssClass #\\' />' + '# } #' + '#= data.treeview.template(data) #'),\n itemElement: templateNoWith('# var item = data.item, r = data.r; #' + '# var url = ' + fieldAccessor('url') + '(item); #' + '<div class=\\'#= r.cssClass(data.group, item) #\\'>' + '# if (item.hasChildren) { #' + '<span class=\\'#= r.toggleButtonClass(item) #\\'/>' + '# } #' + '# if (data.treeview.checkboxes) { #' + '<span class=\\'k-checkbox-wrapper\\' role=\\'presentation\\'>' + '#= data.treeview.checkboxes.template(data) #' + '</span>' + '# } #' + '# var tag = url ? \\'a\\' : \\'span\\'; #' + '# var textAttr = url ? \\' href=\\\\\\'\\' + url + \\'\\\\\\'\\' : \\'\\'; #' + '<#=tag# class=\\'#= r.textClass(item, !!url) #\\'#= textAttr #>' + '#= r.itemContent(data) #' + '</#=tag#>' + '</div>'),\n item: templateNoWith('# var item = data.item, r = data.r; #' + '<li role=\\'treeitem\\' class=\\'#= r.wrapperCssClass(data.group, item) #\\' ' + kendo.attr('uid') + '=\\'#= item.uid #\\' ' + 'aria-selected=\\'#= item.selected ? \"true\" : \"false \" #\\' ' + '#=item.enabled === false ? \"aria-disabled=\\'true\\'\" : \\'\\'#' + '# if (item.expanded) { #' + 'data-expanded=\\'true\\' aria-expanded=\\'true\\'' + '# } #' + '>' + '#= r.itemElement(data) #' + '</li>'),\n loading: templateNoWith('<div class=\\'k-icon k-i-loading\\' /> #: data.messages.loading #'),\n retry: templateNoWith('#: data.messages.requestFailed # ' + '<button class=\\'k-button k-request-retry\\'>#: data.messages.retry #</button>')\n };\n },\n items: function () {\n return this.element.find('.k-item > div:first-child');\n },\n setDataSource: function (dataSource) {\n var options = this.options;\n options.dataSource = dataSource;\n this._dataSource();\n if (options.checkboxes && options.checkboxes.checkChildren) {\n this.dataSource.one('change', $.proxy(this.updateIndeterminate, this, null));\n }\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _bindDataSource: function () {\n this._refreshHandler = proxy(this.refresh, this);\n this._errorHandler = proxy(this._error, this);\n this.dataSource.bind(CHANGE, this._refreshHandler);\n this.dataSource.bind(ERROR, this._errorHandler);\n },\n _unbindDataSource: function () {\n var dataSource = this.dataSource;\n if (dataSource) {\n dataSource.unbind(CHANGE, this._refreshHandler);\n dataSource.unbind(ERROR, this._errorHandler);\n }\n },\n _dataSource: function (silentRead) {\n var that = this, options = that.options, dataSource = options.dataSource;\n function recursiveRead(data) {\n for (var i = 0; i < data.length; i++) {\n data[i]._initChildren();\n data[i].children.fetch();\n recursiveRead(data[i].children.view());\n }\n }\n dataSource = isArray(dataSource) ? { data: dataSource } : dataSource;\n that._unbindDataSource();\n if (!dataSource.fields) {\n dataSource.fields = [\n { field: 'text' },\n { field: 'url' },\n { field: 'spriteCssClass' },\n { field: 'imageUrl' }\n ];\n }\n that.dataSource = dataSource = HierarchicalDataSource.create(dataSource);\n if (silentRead) {\n dataSource.fetch();\n recursiveRead(dataSource.view());\n }\n that._bindDataSource();\n },\n events: [\n DRAGSTART,\n DRAG,\n DROP,\n DRAGEND,\n DATABOUND,\n EXPAND,\n COLLAPSE,\n SELECT,\n CHANGE,\n NAVIGATE,\n CHECK\n ],\n options: {\n name: 'TreeView',\n dataSource: {},\n animation: {\n expand: {\n effects: 'expand:vertical',\n duration: 200\n },\n collapse: { duration: 100 }\n },\n messages: {\n loading: 'Loading...',\n requestFailed: 'Request failed.',\n retry: 'Retry'\n },\n dragAndDrop: false,\n checkboxes: false,\n autoBind: true,\n autoScroll: false,\n loadOnDemand: true,\n template: '',\n dataTextField: null\n },\n _accessors: function () {\n var that = this, options = that.options, i, field, textField, element = that.element;\n for (i in bindings) {\n field = options[bindings[i]];\n textField = element.attr(kendo.attr(i + '-field'));\n if (!field && textField) {\n field = textField;\n }\n if (!field) {\n field = i;\n }\n if (!isArray(field)) {\n field = [field];\n }\n options[bindings[i]] = field;\n }\n },\n _fieldAccessor: function (fieldName) {\n var fieldBindings = this.options[bindings[fieldName]], count = fieldBindings.length, result = '(function(item) {';\n if (count === 0) {\n result += 'return item[\\'' + fieldName + '\\'];';\n } else {\n result += 'var levels = [' + $.map(fieldBindings, function (x) {\n return 'function(d){ return ' + kendo.expr(x) + '}';\n }).join(',') + '];';\n result += 'return levels[Math.min(item.level(), ' + count + '-1)](item)';\n }\n result += '})';\n return result;\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n this._animation();\n this._dragging();\n this._templates();\n },\n _trigger: function (eventName, node) {\n return this.trigger(eventName, { node: node.closest(NODE)[0] });\n },\n _setChecked: function (datasource, value) {\n if (!datasource || !$.isFunction(datasource.view)) {\n return;\n }\n for (var i = 0, nodes = datasource.view(); i < nodes.length; i++) {\n nodes[i][CHECKED] = value;\n if (nodes[i].children) {\n this._setChecked(nodes[i].children, value);\n }\n }\n },\n _setIndeterminate: function (node) {\n var group = subGroup(node), siblings, length, all = true, i;\n if (!group.length) {\n return;\n }\n siblings = checkboxes(group.children());\n length = siblings.length;\n if (!length) {\n return;\n } else if (length > 1) {\n for (i = 1; i < length; i++) {\n if (siblings[i].checked != siblings[i - 1].checked || siblings[i].indeterminate || siblings[i - 1].indeterminate) {\n all = false;\n break;\n }\n }\n } else {\n all = !siblings[0].indeterminate;\n }\n return checkboxes(node).data(INDETERMINATE, !all).prop(INDETERMINATE, !all).prop(CHECKED, all && siblings[0].checked);\n },\n updateIndeterminate: function (node) {\n node = node || this.wrapper;\n var subnodes = subGroup(node).children();\n var i;\n var checkbox;\n if (subnodes.length) {\n for (i = 0; i < subnodes.length; i++) {\n this.updateIndeterminate(subnodes.eq(i));\n }\n checkbox = this._setIndeterminate(node);\n if (checkbox && checkbox.prop(CHECKED)) {\n this.dataItem(node).checked = true;\n }\n }\n },\n _bubbleIndeterminate: function (node) {\n if (!node.length) {\n return;\n }\n var parentNode = this.parent(node), checkbox;\n if (parentNode.length) {\n this._setIndeterminate(parentNode);\n checkbox = parentNode.children('div').find('.k-checkbox-wrapper :checkbox');\n if (checkbox.prop(INDETERMINATE) === false) {\n this.dataItem(parentNode).set(CHECKED, checkbox.prop(CHECKED));\n } else {\n delete this.dataItem(parentNode).checked;\n }\n this._bubbleIndeterminate(parentNode);\n }\n },\n _checkboxChange: function (e) {\n var checkbox = $(e.target);\n var isChecked = checkbox.prop(CHECKED);\n var node = checkbox.closest(NODE);\n var dataItem = this.dataItem(node);\n if (dataItem.checked != isChecked) {\n dataItem.set(CHECKED, isChecked);\n this._trigger(CHECK, node);\n }\n },\n _toggleButtonClick: function (e) {\n var node = $(e.currentTarget).closest(NODE);\n if (node.is('[aria-disabled=\\'true\\']')) {\n return;\n }\n this.toggle($(e.target).closest(NODE));\n },\n _mousedown: function (e) {\n var node = $(e.currentTarget).closest(NODE);\n if (node.is('[aria-disabled=\\'true\\']')) {\n return;\n }\n this._clickTarget = node;\n this.current(node);\n },\n _focusable: function (node) {\n return node && node.length && node.is(':visible') && !node.find('.k-in:first').hasClass('k-state-disabled');\n },\n _focus: function () {\n var current = this.select(), clickTarget = this._clickTarget;\n if (kendo.support.touch) {\n return;\n }\n if (clickTarget && clickTarget.length) {\n current = clickTarget;\n }\n if (!this._focusable(current)) {\n current = this.current();\n }\n if (!this._focusable(current)) {\n current = this._nextVisible($());\n }\n this.current(current);\n },\n focus: function () {\n var wrapper = this.wrapper, scrollContainer = wrapper[0], containers = [], offsets = [], documentElement = document.documentElement, i;\n do {\n scrollContainer = scrollContainer.parentNode;\n if (scrollContainer.scrollHeight > scrollContainer.clientHeight) {\n containers.push(scrollContainer);\n offsets.push(scrollContainer.scrollTop);\n }\n } while (scrollContainer != documentElement);\n wrapper.focus();\n for (i = 0; i < containers.length; i++) {\n containers[i].scrollTop = offsets[i];\n }\n },\n _blur: function () {\n this.current().find('.k-in:first').removeClass('k-state-focused');\n },\n _enabled: function (node) {\n return !node.children('div').children('.k-in').hasClass('k-state-disabled');\n },\n parent: function (node) {\n var wrapperRe = /\\bk-treeview\\b/, itemRe = /\\bk-item\\b/, result, skipSelf;\n if (typeof node == STRING) {\n node = this.element.find(node);\n }\n if (!isDomElement(node)) {\n node = node[0];\n }\n skipSelf = itemRe.test(node.className);\n do {\n node = node.parentNode;\n if (itemRe.test(node.className)) {\n if (skipSelf) {\n result = node;\n } else {\n skipSelf = true;\n }\n }\n } while (!wrapperRe.test(node.className) && !result);\n return $(result);\n },\n _nextVisible: function (node) {\n var that = this, expanded = that._expanded(node), result;\n function nextParent(node) {\n while (node.length && !node.next().length) {\n node = that.parent(node);\n }\n if (node.next().length) {\n return node.next();\n } else {\n return node;\n }\n }\n if (!node.length || !node.is(':visible')) {\n result = that.root.children().eq(0);\n } else if (expanded) {\n result = subGroup(node).children().first();\n if (!result.length) {\n result = nextParent(node);\n }\n } else {\n result = nextParent(node);\n }\n if (!that._enabled(result)) {\n result = that._nextVisible(result);\n }\n return result;\n },\n _previousVisible: function (node) {\n var that = this, lastChild, result;\n if (!node.length || node.prev().length) {\n if (node.length) {\n result = node.prev();\n } else {\n result = that.root.children().last();\n }\n while (that._expanded(result)) {\n lastChild = subGroup(result).children().last();\n if (!lastChild.length) {\n break;\n }\n result = lastChild;\n }\n } else {\n result = that.parent(node) || node;\n }\n if (!that._enabled(result)) {\n result = that._previousVisible(result);\n }\n return result;\n },\n _keydown: function (e) {\n var that = this, key = e.keyCode, target, focused = that.current(), expanded = that._expanded(focused), checkbox = focused.find('.k-checkbox-wrapper:first :checkbox'), rtl = kendo.support.isRtl(that.element);\n if (e.target != e.currentTarget) {\n return;\n }\n if (!rtl && key == keys.RIGHT || rtl && key == keys.LEFT) {\n if (expanded) {\n target = that._nextVisible(focused);\n } else {\n that.expand(focused);\n }\n } else if (!rtl && key == keys.LEFT || rtl && key == keys.RIGHT) {\n if (expanded) {\n that.collapse(focused);\n } else {\n target = that.parent(focused);\n if (!that._enabled(target)) {\n target = undefined;\n }\n }\n } else if (key == keys.DOWN) {\n target = that._nextVisible(focused);\n } else if (key == keys.UP) {\n target = that._previousVisible(focused);\n } else if (key == keys.HOME) {\n target = that._nextVisible($());\n } else if (key == keys.END) {\n target = that._previousVisible($());\n } else if (key == keys.ENTER) {\n if (!focused.find('.k-in:first').hasClass('k-state-selected')) {\n if (!that._trigger(SELECT, focused)) {\n that.select(focused);\n }\n }\n } else if (key == keys.SPACEBAR && checkbox.length) {\n checkbox.prop(CHECKED, !checkbox.prop(CHECKED)).data(INDETERMINATE, false).prop(INDETERMINATE, false);\n that._checkboxChange({ target: checkbox });\n target = focused;\n }\n if (target) {\n e.preventDefault();\n if (focused[0] != target[0]) {\n that._trigger(NAVIGATE, target);\n that.current(target);\n }\n }\n },\n _click: function (e) {\n var that = this, node = $(e.currentTarget), contents = nodeContents(node.closest(NODE)), href = node.attr('href'), shouldNavigate;\n if (href) {\n shouldNavigate = href == '#' || href.indexOf('#' + this.element.id + '-') >= 0;\n } else {\n shouldNavigate = contents.length && !contents.children().length;\n }\n if (shouldNavigate) {\n e.preventDefault();\n }\n if (!node.hasClass('.k-state-selected') && !that._trigger(SELECT, node)) {\n that.select(node);\n }\n },\n _wrapper: function () {\n var that = this, element = that.element, wrapper, root, wrapperClasses = 'k-widget k-treeview';\n if (element.is('ul')) {\n wrapper = element.wrap('<div />').parent();\n root = element;\n } else {\n wrapper = element;\n root = wrapper.children('ul').eq(0);\n }\n that.wrapper = wrapper.addClass(wrapperClasses);\n that.root = root;\n },\n _group: function (item) {\n var that = this, firstLevel = item.hasClass(KTREEVIEW), group = {\n firstLevel: firstLevel,\n expanded: firstLevel || that._expanded(item)\n }, groupElement = item.children('ul');\n groupElement.addClass(that.templates.groupCssClass(group)).css('display', group.expanded ? '' : 'none');\n that._nodes(groupElement, group);\n },\n _nodes: function (groupElement, groupData) {\n var that = this, nodes = groupElement.children('li'), nodeData;\n groupData = extend({ length: nodes.length }, groupData);\n nodes.each(function (i, node) {\n node = $(node);\n nodeData = {\n index: i,\n expanded: that._expanded(node)\n };\n updateNodeHtml(node);\n that._updateNodeClasses(node, groupData, nodeData);\n that._group(node);\n });\n },\n _checkboxes: function () {\n var options = this.options;\n var checkboxes = options.checkboxes;\n var defaultTemplate;\n if (checkboxes) {\n defaultTemplate = '<input type=\\'checkbox\\' tabindex=\\'-1\\' #= (item.enabled === false) ? \\'disabled\\' : \\'\\' # #= item.checked ? \\'checked\\' : \\'\\' #';\n if (checkboxes.name) {\n defaultTemplate += ' name=\\'' + checkboxes.name + '\\'';\n }\n defaultTemplate += ' id=\\'_#= item.uid #\\' class=\\'k-checkbox\\' /><label for=\\'_#= item.uid #\\' class=\\'k-checkbox-label\\'></label>';\n checkboxes = extend({ template: defaultTemplate }, options.checkboxes);\n if (typeof checkboxes.template == STRING) {\n checkboxes.template = template(checkboxes.template);\n }\n options.checkboxes = checkboxes;\n }\n },\n _updateNodeClasses: function (node, groupData, nodeData) {\n var wrapper = node.children('div'), group = node.children('ul'), templates = this.templates;\n if (node.hasClass('k-treeview')) {\n return;\n }\n nodeData = nodeData || {};\n nodeData.expanded = typeof nodeData.expanded != UNDEFINED ? nodeData.expanded : this._expanded(node);\n nodeData.index = typeof nodeData.index != UNDEFINED ? nodeData.index : node.index();\n nodeData.enabled = typeof nodeData.enabled != UNDEFINED ? nodeData.enabled : !wrapper.children('.k-in').hasClass('k-state-disabled');\n groupData = groupData || {};\n groupData.firstLevel = typeof groupData.firstLevel != UNDEFINED ? groupData.firstLevel : node.parent().parent().hasClass(KTREEVIEW);\n groupData.length = typeof groupData.length != UNDEFINED ? groupData.length : node.parent().children().length;\n node.removeClass('k-first k-last').addClass(templates.wrapperCssClass(groupData, nodeData));\n wrapper.removeClass('k-top k-mid k-bot').addClass(templates.cssClass(groupData, nodeData));\n var textWrap = wrapper.children('.k-in');\n var isLink = textWrap[0] && textWrap[0].nodeName.toLowerCase() == 'a';\n textWrap.removeClass('k-in k-link k-state-default k-state-disabled').addClass(templates.textClass(nodeData, isLink));\n if (group.length || node.attr('data-hasChildren') == 'true') {\n wrapper.children('.k-icon').removeClass('k-i-expand k-i-collapse').addClass(templates.toggleButtonClass(nodeData));\n group.addClass('k-group');\n }\n },\n _processNodes: function (nodes, callback) {\n var that = this;\n that.element.find(nodes).each(function (index, item) {\n callback.call(that, index, $(item).closest(NODE));\n });\n },\n dataItem: function (node) {\n var uid = $(node).closest(NODE).attr(kendo.attr('uid')), dataSource = this.dataSource;\n return dataSource && dataSource.getByUid(uid);\n },\n _insertNode: function (nodeData, index, parentNode, insertCallback, collapsed) {\n var that = this, group = subGroup(parentNode), updatedGroupLength = group.children().length + 1, childrenData, groupData = {\n firstLevel: parentNode.hasClass(KTREEVIEW),\n expanded: !collapsed,\n length: updatedGroupLength\n }, node, i, item, nodeHtml = '', append = function (item, group) {\n item.appendTo(group);\n };\n for (i = 0; i < nodeData.length; i++) {\n item = nodeData[i];\n item.index = index + i;\n nodeHtml += that._renderItem({\n group: groupData,\n item: item\n });\n }\n node = $(nodeHtml);\n if (!node.length) {\n return;\n }\n that.angular('compile', function () {\n return {\n elements: node.get(),\n data: nodeData.map(function (item) {\n return { dataItem: item };\n })\n };\n });\n if (!group.length) {\n group = $(that._renderGroup({ group: groupData })).appendTo(parentNode);\n }\n insertCallback(node, group);\n if (parentNode.hasClass('k-item')) {\n updateNodeHtml(parentNode);\n that._updateNodeClasses(parentNode);\n }\n that._updateNodeClasses(node.prev().first());\n that._updateNodeClasses(node.next().last());\n for (i = 0; i < nodeData.length; i++) {\n item = nodeData[i];\n if (item.hasChildren) {\n childrenData = item.children.data();\n if (childrenData.length) {\n that._insertNode(childrenData, item.index, node.eq(i), append, !that._expanded(node.eq(i)));\n }\n }\n }\n return node;\n },\n _updateNodes: function (items, field) {\n var that = this;\n var i, node, nodeWrapper, item, isChecked, isCollapsed;\n var context = {\n treeview: that.options,\n item: item\n };\n var render = field != 'expanded' && field != 'checked';\n function setCheckedState(root, state) {\n root.find('.k-checkbox-wrapper :checkbox').prop(CHECKED, state).data(INDETERMINATE, false).prop(INDETERMINATE, false);\n }\n if (field == 'selected') {\n item = items[0];\n node = that.findByUid(item.uid).find('.k-in:first').removeClass('k-state-hover').toggleClass('k-state-selected', item[field]).end();\n if (item[field]) {\n that.current(node);\n }\n node.attr(ARIASELECTED, !!item[field]);\n } else {\n var elements = $.map(items, function (item) {\n return that.findByUid(item.uid).children('div');\n });\n if (render) {\n that.angular('cleanup', function () {\n return { elements: elements };\n });\n }\n for (i = 0; i < items.length; i++) {\n context.item = item = items[i];\n nodeWrapper = elements[i];\n node = nodeWrapper.parent();\n if (render) {\n nodeWrapper.children('.k-in').html(that.templates.itemContent(context));\n }\n if (field == CHECKED) {\n isChecked = item[field];\n setCheckedState(nodeWrapper, isChecked);\n if (that.options.checkboxes.checkChildren) {\n setCheckedState(node.children('.k-group'), isChecked);\n that._setChecked(item.children, isChecked);\n that._bubbleIndeterminate(node);\n }\n } else if (field == 'expanded') {\n that._toggle(node, item, item[field]);\n } else if (field == 'enabled') {\n node.find('.k-checkbox-wrapper :checkbox').prop('disabled', !item[field]);\n isCollapsed = !nodeContents(node).is(VISIBLE);\n node.removeAttr(ARIADISABLED);\n if (!item[field]) {\n if (item.selected) {\n item.set('selected', false);\n }\n if (item.expanded) {\n item.set('expanded', false);\n }\n isCollapsed = true;\n node.attr(ARIASELECTED, false).attr(ARIADISABLED, true);\n }\n that._updateNodeClasses(node, {}, {\n enabled: item[field],\n expanded: !isCollapsed\n });\n }\n if (nodeWrapper.length) {\n this.trigger('itemChange', {\n item: nodeWrapper,\n data: item,\n ns: ui\n });\n }\n }\n if (render) {\n that.angular('compile', function () {\n return {\n elements: elements,\n data: $.map(items, function (item) {\n return [{ dataItem: item }];\n })\n };\n });\n }\n }\n },\n _appendItems: function (index, items, parentNode) {\n var group = subGroup(parentNode);\n var children = group.children();\n var collapsed = !this._expanded(parentNode);\n if (typeof index == UNDEFINED) {\n index = children.length;\n }\n this._insertNode(items, index, parentNode, function (item, group) {\n if (index >= children.length) {\n item.appendTo(group);\n } else {\n item.insertBefore(children.eq(index));\n }\n }, collapsed);\n if (this._expanded(parentNode)) {\n this._updateNodeClasses(parentNode);\n subGroup(parentNode).css('display', 'block');\n }\n },\n _refreshChildren: function (parentNode, items, index) {\n var i, children, child;\n var options = this.options;\n var loadOnDemand = options.loadOnDemand;\n var checkChildren = options.checkboxes && options.checkboxes.checkChildren;\n subGroup(parentNode).empty();\n if (!items.length) {\n updateNodeHtml(parentNode);\n } else {\n this._appendItems(index, items, parentNode);\n children = subGroup(parentNode).children();\n if (loadOnDemand && checkChildren) {\n this._bubbleIndeterminate(children.last());\n }\n for (i = 0; i < children.length; i++) {\n child = children.eq(i);\n this.trigger('itemChange', {\n item: child.children('div'),\n data: this.dataItem(child),\n ns: ui\n });\n }\n }\n },\n _refreshRoot: function (items) {\n var groupHtml = this._renderGroup({\n items: items,\n group: {\n firstLevel: true,\n expanded: true\n }\n });\n if (this.root.length) {\n this._angularItems('cleanup');\n var group = $(groupHtml);\n this.root.attr('class', group.attr('class')).html(group.html());\n } else {\n this.root = this.wrapper.html(groupHtml).children('ul');\n }\n this.root.attr('role', 'tree');\n var elements = this.root.children('.k-item');\n for (var i = 0; i < items.length; i++) {\n this.trigger('itemChange', {\n item: elements.eq(i),\n data: items[i],\n ns: ui\n });\n }\n this._angularItems('compile');\n },\n refresh: function (e) {\n var node = e.node;\n var action = e.action;\n var items = e.items;\n var parentNode = this.wrapper;\n var options = this.options;\n var loadOnDemand = options.loadOnDemand;\n var checkChildren = options.checkboxes && options.checkboxes.checkChildren;\n var i;\n if (e.field) {\n if (!items[0] || !items[0].level) {\n return;\n }\n return this._updateNodes(items, e.field);\n }\n if (node) {\n parentNode = this.findByUid(node.uid);\n this._progress(parentNode, false);\n }\n if (checkChildren && action != 'remove') {\n var bubble = false;\n for (i = 0; i < items.length; i++) {\n if ('checked' in items[i]) {\n bubble = true;\n break;\n }\n }\n if (!bubble && node && node.checked) {\n for (i = 0; i < items.length; i++) {\n items[i].checked = true;\n }\n }\n }\n if (action == 'add') {\n this._appendItems(e.index, items, parentNode);\n } else if (action == 'remove') {\n this._remove(this.findByUid(items[0].uid), false);\n } else if (action == 'itemchange') {\n this._updateNodes(items);\n } else if (action == 'itemloaded') {\n this._refreshChildren(parentNode, items, e.index);\n } else {\n this._refreshRoot(items);\n }\n if (action != 'remove') {\n for (i = 0; i < items.length; i++) {\n if (!loadOnDemand || items[i].expanded) {\n items[i].load();\n }\n }\n }\n this.trigger(DATABOUND, { node: node ? parentNode : undefined });\n },\n _error: function (e) {\n var node = e.node && this.findByUid(e.node.uid);\n var retryHtml = this.templates.retry({ messages: this.options.messages });\n if (node) {\n this._progress(node, false);\n this._expanded(node, false);\n nodeIcon(node).addClass('k-i-reload');\n e.node.loaded(false);\n } else {\n this._progress(false);\n this.element.html(retryHtml);\n }\n },\n _retryRequest: function (e) {\n e.preventDefault();\n this.dataSource.fetch();\n },\n expand: function (nodes) {\n this._processNodes(nodes, function (index, item) {\n this.toggle(item, true);\n });\n },\n collapse: function (nodes) {\n this._processNodes(nodes, function (index, item) {\n this.toggle(item, false);\n });\n },\n enable: function (nodes, enable) {\n enable = arguments.length == 2 ? !!enable : true;\n this._processNodes(nodes, function (index, item) {\n this.dataItem(item).set('enabled', enable);\n });\n },\n current: function (node) {\n var that = this, current = that._current, element = that.element, id = that._ariaId;\n if (arguments.length > 0 && node && node.length) {\n if (current) {\n if (current[0].id === id) {\n current.removeAttr('id');\n }\n current.find('.k-in:first').removeClass('k-state-focused');\n }\n current = that._current = $(node, element).closest(NODE);\n current.find('.k-in:first').addClass('k-state-focused');\n id = current[0].id || id;\n if (id) {\n that.wrapper.removeAttr('aria-activedescendant');\n current.attr('id', id);\n that.wrapper.attr('aria-activedescendant', id);\n }\n return;\n }\n if (!current) {\n current = that._nextVisible($());\n }\n return current;\n },\n select: function (node) {\n var that = this, element = that.element;\n if (!arguments.length) {\n return element.find('.k-state-selected').closest(NODE);\n }\n node = $(node, element).closest(NODE);\n element.find('.k-state-selected').each(function () {\n var dataItem = that.dataItem(this);\n if (dataItem) {\n dataItem.set('selected', false);\n delete dataItem.selected;\n } else {\n $(this).removeClass('k-state-selected');\n }\n });\n if (node.length) {\n that.dataItem(node).set('selected', true);\n that._clickTarget = node;\n }\n that.trigger(CHANGE);\n },\n _toggle: function (node, dataItem, expand) {\n var options = this.options;\n var contents = nodeContents(node);\n var direction = expand ? 'expand' : 'collapse';\n var loaded;\n if (contents.data('animating')) {\n return;\n }\n if (!this._trigger(direction, node)) {\n this._expanded(node, expand);\n loaded = dataItem && dataItem.loaded();\n if (expand && !loaded) {\n if (options.loadOnDemand) {\n this._progress(node, true);\n }\n contents.remove();\n dataItem.load();\n } else {\n this._updateNodeClasses(node, {}, { expanded: expand });\n if (!expand) {\n contents.css('height', contents.height()).css('height');\n }\n contents.kendoStop(true, true).kendoAnimate(extend({ reset: true }, options.animation[direction], {\n complete: function () {\n if (expand) {\n contents.css('height', '');\n }\n }\n }));\n }\n }\n },\n toggle: function (node, expand) {\n node = $(node);\n if (!nodeIcon(node).is('.k-i-expand, .k-i-collapse')) {\n return;\n }\n if (arguments.length == 1) {\n expand = !this._expanded(node);\n }\n this._expanded(node, expand);\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.wrapper.off(NS);\n that._unbindDataSource();\n if (that.dragging) {\n that.dragging.destroy();\n }\n kendo.destroy(that.element);\n that.root = that.wrapper = that.element = null;\n },\n _expanded: function (node, value) {\n var expandedAttr = kendo.attr('expanded');\n var dataItem = this.dataItem(node);\n var expanded = value;\n if (arguments.length == 1) {\n return node.attr(expandedAttr) === 'true' || dataItem && dataItem.expanded;\n }\n if (nodeContents(node).data('animating')) {\n return;\n }\n if (dataItem) {\n dataItem.set('expanded', expanded);\n expanded = dataItem.expanded;\n }\n if (expanded) {\n node.attr(expandedAttr, 'true');\n node.attr('aria-expanded', 'true');\n } else {\n node.removeAttr(expandedAttr);\n node.attr('aria-expanded', 'false');\n }\n },\n _progress: function (node, showProgress) {\n var element = this.element;\n var loadingText = this.templates.loading({ messages: this.options.messages });\n if (arguments.length == 1) {\n showProgress = node;\n if (showProgress) {\n element.html(loadingText);\n } else {\n element.empty();\n }\n } else {\n nodeIcon(node).toggleClass('k-i-loading', showProgress).removeClass('k-i-reload');\n }\n },\n text: function (node, text) {\n var dataItem = this.dataItem(node), fieldBindings = this.options[bindings.text], level = dataItem.level(), length = fieldBindings.length, field = fieldBindings[Math.min(level, length - 1)];\n if (text) {\n dataItem.set(field, text);\n } else {\n return dataItem[field];\n }\n },\n _objectOrSelf: function (node) {\n return $(node).closest('[data-role=treeview]').data('kendoTreeView') || this;\n },\n _dataSourceMove: function (nodeData, group, parentNode, callback) {\n var referenceDataItem, destTreeview = this._objectOrSelf(parentNode || group), destDataSource = destTreeview.dataSource;\n var loadPromise = $.Deferred().resolve().promise();\n if (parentNode && parentNode[0] != destTreeview.element[0]) {\n referenceDataItem = destTreeview.dataItem(parentNode);\n if (!referenceDataItem.loaded()) {\n destTreeview._progress(parentNode, true);\n loadPromise = referenceDataItem.load();\n }\n if (parentNode != this.root) {\n destDataSource = referenceDataItem.children;\n if (!destDataSource || !(destDataSource instanceof HierarchicalDataSource)) {\n referenceDataItem._initChildren();\n referenceDataItem.loaded(true);\n destDataSource = referenceDataItem.children;\n }\n }\n }\n nodeData = this._toObservableData(nodeData);\n return callback.call(destTreeview, destDataSource, nodeData, loadPromise);\n },\n _toObservableData: function (node) {\n var dataItem = node, dataSource, uid;\n if (node instanceof window.jQuery || isDomElement(node)) {\n dataSource = this._objectOrSelf(node).dataSource;\n uid = $(node).attr(kendo.attr('uid'));\n dataItem = dataSource.getByUid(uid);\n if (dataItem) {\n dataItem = dataSource.remove(dataItem);\n }\n }\n return dataItem;\n },\n _insert: function (data, model, index) {\n if (!(model instanceof kendo.data.ObservableArray)) {\n if (!isArray(model)) {\n model = [model];\n }\n } else {\n model = model.toJSON();\n }\n var parentNode = data.parent();\n if (parentNode && parentNode._initChildren) {\n parentNode.hasChildren = true;\n parentNode._initChildren();\n }\n data.splice.apply(data, [\n index,\n 0\n ].concat(model));\n return this.findByUid(data[index].uid);\n },\n insertAfter: insertAction(1),\n insertBefore: insertAction(0),\n append: function (nodeData, parentNode, success) {\n var group = this.root;\n if (parentNode) {\n group = subGroup(parentNode);\n }\n return this._dataSourceMove(nodeData, group, parentNode, function (dataSource, model, loadModel) {\n var inserted;\n var that = this;\n function add() {\n if (parentNode) {\n that._expanded(parentNode, true);\n }\n var data = dataSource.data(), index = Math.max(data.length, 0);\n return that._insert(data, model, index);\n }\n loadModel.done(function () {\n inserted = add();\n success = success || $.noop;\n success(inserted);\n });\n return inserted || null;\n });\n },\n _remove: function (node, keepData) {\n var that = this, parentNode, prevSibling, nextSibling;\n node = $(node, that.element);\n this.angular('cleanup', function () {\n return { elements: node.get() };\n });\n parentNode = node.parent().parent();\n prevSibling = node.prev();\n nextSibling = node.next();\n node[keepData ? 'detach' : 'remove']();\n if (parentNode.hasClass('k-item')) {\n updateNodeHtml(parentNode);\n that._updateNodeClasses(parentNode);\n }\n that._updateNodeClasses(prevSibling);\n that._updateNodeClasses(nextSibling);\n return node;\n },\n remove: function (node) {\n var dataItem = this.dataItem(node);\n if (dataItem) {\n this.dataSource.remove(dataItem);\n }\n },\n detach: function (node) {\n return this._remove(node, true);\n },\n findByText: function (text) {\n return $(this.element).find('.k-in').filter(function (i, element) {\n return $(element).text() == text;\n }).closest(NODE);\n },\n findByUid: function (uid) {\n var items = this.element.find('.k-item');\n var uidAttr = kendo.attr('uid');\n var result;\n for (var i = 0; i < items.length; i++) {\n if (items[i].getAttribute(uidAttr) == uid) {\n result = items[i];\n break;\n }\n }\n return $(result);\n },\n expandPath: function (path, complete) {\n var treeview = this;\n var nodeIds = path.slice(0);\n var callback = complete || $.noop;\n function proceed() {\n nodeIds.shift();\n if (nodeIds.length) {\n expand(nodeIds[0]).then(proceed);\n } else {\n callback.call(treeview);\n }\n }\n function expand(id) {\n var result = $.Deferred();\n var node = treeview.dataSource.get(id);\n if (node) {\n if (node.loaded()) {\n node.set('expanded', true);\n result.resolve();\n } else {\n treeview._progress(treeview.findByUid(node.uid), true);\n node.load().then(function () {\n node.set('expanded', true);\n result.resolve();\n });\n }\n } else {\n result.resolve();\n }\n return result.promise();\n }\n expand(nodeIds[0]).then(proceed);\n },\n _parentIds: function (node) {\n var parent = node && node.parentNode();\n var parents = [];\n while (parent && parent.parentNode) {\n parents.unshift(parent.id);\n parent = parent.parentNode();\n }\n return parents;\n },\n expandTo: function (node) {\n if (!(node instanceof kendo.data.Node)) {\n node = this.dataSource.get(node);\n }\n var parents = this._parentIds(node);\n this.expandPath(parents);\n },\n _renderItem: function (options) {\n if (!options.group) {\n options.group = {};\n }\n options.treeview = this.options;\n options.r = this.templates;\n return this.templates.item(options);\n },\n _renderGroup: function (options) {\n var that = this;\n options.renderItems = function (options) {\n var html = '', i = 0, items = options.items, len = items ? items.length : 0, group = options.group;\n group.length = len;\n for (; i < len; i++) {\n options.group = group;\n options.item = items[i];\n options.item.index = i;\n html += that._renderItem(options);\n }\n return html;\n };\n options.r = that.templates;\n return that.templates.group(options);\n }\n });\n ui.plugin(TreeView);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.pivot.fieldmenu', [\n 'kendo.pivotgrid',\n 'kendo.menu',\n 'kendo.window',\n 'kendo.treeview',\n 'kendo.dropdownlist'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'pivot.fieldmenu',\n name: 'PivotFieldMenu',\n category: 'web',\n description: 'The PivotFieldMenu widget allows the user to filter on fields displayed in PivotGrid',\n depends: [\n 'menu',\n 'window',\n 'treeview',\n 'dropdownlist'\n ],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, MENU = 'kendoContextMenu', proxy = $.proxy, NS = '.kendoPivotFieldMenu', Widget = ui.Widget;\n var PivotFieldMenu = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this._dataSource();\n this._layout();\n kendo.notify(this);\n },\n events: [],\n options: {\n name: 'PivotFieldMenu',\n filter: null,\n filterable: true,\n sortable: true,\n messages: {\n info: 'Show items with value that:',\n sortAscending: 'Sort Ascending',\n sortDescending: 'Sort Descending',\n filterFields: 'Fields Filter',\n filter: 'Filter',\n include: 'Include Fields...',\n title: 'Fields to include',\n clear: 'Clear',\n ok: 'OK',\n cancel: 'Cancel',\n operators: {\n contains: 'Contains',\n doesnotcontain: 'Does not contain',\n startswith: 'Starts with',\n endswith: 'Ends with',\n eq: 'Is equal to',\n neq: 'Is not equal to'\n }\n }\n },\n _layout: function () {\n var options = this.options;\n this.wrapper = $(kendo.template(MENUTEMPLATE)({\n ns: kendo.ns,\n filterable: options.filterable,\n sortable: options.sortable,\n messages: options.messages\n }));\n this.menu = this.wrapper[MENU]({\n filter: options.filter,\n target: this.element,\n orientation: 'vertical',\n showOn: 'click',\n closeOnClick: false,\n open: proxy(this._menuOpen, this),\n select: proxy(this._select, this),\n copyAnchorStyles: false\n }).data(MENU);\n this._createWindow();\n if (options.filterable) {\n this._initFilterForm();\n }\n },\n _initFilterForm: function () {\n var filterForm = this.menu.element.find('.k-filter-item');\n var filterProxy = proxy(this._filter, this);\n this._filterOperator = new kendo.ui.DropDownList(filterForm.find('select'));\n this._filterValue = filterForm.find('.k-textbox');\n filterForm.on('submit' + NS, filterProxy).on('click' + NS, '.k-button-filter', filterProxy).on('click' + NS, '.k-button-clear', proxy(this._reset, this));\n },\n _setFilterForm: function (expression) {\n var filterOperator = this._filterOperator;\n var operator = '';\n var value = '';\n if (expression) {\n operator = expression.operator;\n value = expression.value;\n }\n filterOperator.value(operator);\n if (!filterOperator.value()) {\n filterOperator.select(0);\n }\n this._filterValue.val(value);\n },\n _clearFilters: function (member) {\n var filter = this.dataSource.filter() || {};\n var expressions;\n var idx = 0;\n var length;\n filter.filters = filter.filters || [];\n expressions = findFilters(filter, member);\n for (length = expressions.length; idx < length; idx++) {\n filter.filters.splice(filter.filters.indexOf(expressions[idx]), 1);\n }\n return filter;\n },\n _convert: function (value) {\n var schema = this.dataSource.options.schema;\n var field = ((schema.model || {}).fields || {})[this.currentMember];\n if (field) {\n if (field.type === 'number') {\n value = parseFloat(value);\n } else if (field.type === 'boolean') {\n value = Boolean($.parseJSON(value));\n }\n }\n return value;\n },\n _filter: function (e) {\n var that = this;\n var value = that._convert(that._filterValue.val());\n e.preventDefault();\n if (value === '') {\n that.menu.close();\n return;\n }\n var expression = {\n field: that.currentMember,\n operator: that._filterOperator.value(),\n value: value\n };\n var filter = that._clearFilters(that.currentMember);\n filter.filters.push(expression);\n that.dataSource.filter(filter);\n that.menu.close();\n },\n _reset: function (e) {\n var that = this;\n var filter = that._clearFilters(that.currentMember);\n e.preventDefault();\n if (!filter.filters[0]) {\n filter = {};\n }\n that.dataSource.filter(filter);\n that._setFilterForm(null);\n that.menu.close();\n },\n _sort: function (dir) {\n var field = this.currentMember;\n var expressions = this.dataSource.sort() || [];\n expressions = removeExpr(expressions, field);\n expressions.push({\n field: field,\n dir: dir\n });\n this.dataSource.sort(expressions);\n this.menu.close();\n },\n setDataSource: function (dataSource) {\n this.options.dataSource = dataSource;\n this._dataSource();\n },\n _dataSource: function () {\n this.dataSource = kendo.data.PivotDataSource.create(this.options.dataSource);\n },\n _createWindow: function () {\n var messages = this.options.messages;\n this.includeWindow = $(kendo.template(WINDOWTEMPLATE)({ messages: messages })).on('click' + NS, '.k-button-ok', proxy(this._applyIncludes, this)).on('click' + NS, '.k-button-cancel', proxy(this._closeWindow, this));\n this.includeWindow = new ui.Window(this.includeWindow, {\n title: messages.title,\n visible: false,\n resizable: false,\n open: proxy(this._windowOpen, this)\n });\n },\n _applyIncludes: function (e) {\n var checkedNodes = [];\n var resultExpression;\n var view = this.treeView.dataSource.view();\n var rootChecked = view[0].checked;\n var filter = this.dataSource.filter();\n var existingExpression = findFilters(filter, this.currentMember, 'in')[0];\n checkedNodeIds(view, checkedNodes);\n if (existingExpression) {\n if (rootChecked) {\n filter.filters.splice(filter.filters.indexOf(existingExpression), 1);\n if (!filter.filters.length) {\n filter = {};\n }\n } else {\n existingExpression.value = checkedNodes.join(',');\n }\n resultExpression = filter;\n }\n if (checkedNodes.length) {\n if (!resultExpression && !rootChecked) {\n resultExpression = {\n field: this.currentMember,\n operator: 'in',\n value: checkedNodes.join(',')\n };\n if (filter) {\n filter.filters.push(resultExpression);\n resultExpression = filter;\n }\n }\n }\n if (resultExpression) {\n this.dataSource.filter(resultExpression);\n }\n this._closeWindow(e);\n },\n _closeWindow: function (e) {\n e.preventDefault();\n this.includeWindow.close();\n },\n _treeViewDataSource: function () {\n var that = this;\n return kendo.data.HierarchicalDataSource.create({\n schema: {\n model: {\n id: 'uniqueName',\n hasChildren: function (item) {\n return parseInt(item.childrenCardinality, 10) > 0;\n }\n }\n },\n transport: {\n read: function (options) {\n var restrictions = {};\n var node = that.treeView.dataSource.get(options.data.uniqueName);\n var name = options.data.uniqueName;\n if (!name) {\n restrictions.levelUniqueName = that.currentMember + '.[(ALL)]';\n } else {\n restrictions.memberUniqueName = node.uniqueName.replace(/\\&/g, '&');\n restrictions.treeOp = 1;\n }\n that.dataSource.schemaMembers(restrictions).done(function (data) {\n checkNodes(that.dataSource.filter(), that.currentMember, data);\n options.success(data);\n }).fail(options.error);\n }\n }\n });\n },\n _createTreeView: function (element) {\n var that = this;\n that.treeView = new ui.TreeView(element, {\n autoBind: false,\n dataSource: that._treeViewDataSource(),\n dataTextField: 'caption',\n template: '#: data.item.caption || data.item.name #',\n checkboxes: { checkChildren: true },\n dataBound: function () {\n ui.progress(that.includeWindow.element, false);\n }\n });\n },\n _menuOpen: function (e) {\n if (!e.event) {\n return;\n }\n var attr = kendo.attr('name');\n this.currentMember = $(e.event.target).closest('[' + attr + ']').attr(attr);\n if (this.options.filterable) {\n this._setFilterForm(findFilters(this.dataSource.filter(), this.currentMember)[0]);\n }\n },\n _select: function (e) {\n var item = $(e.item);\n $('.k-pivot-filter-window').not(this.includeWindow.element).kendoWindow('close');\n if (item.hasClass('k-include-item')) {\n this.includeWindow.center().open();\n } else if (item.hasClass('k-sort-asc')) {\n this._sort('asc');\n } else if (item.hasClass('k-sort-desc')) {\n this._sort('desc');\n }\n },\n _windowOpen: function () {\n if (!this.treeView) {\n this._createTreeView(this.includeWindow.element.find('.k-treeview'));\n }\n ui.progress(this.includeWindow.element, true);\n this.treeView.dataSource.read();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n if (this.menu) {\n this.menu.destroy();\n this.menu = null;\n }\n if (this.treeView) {\n this.treeView.destroy();\n this.treeView = null;\n }\n if (this.includeWindow) {\n this.includeWindow.destroy();\n this.includeWindow = null;\n }\n this.wrapper = null;\n this.element = null;\n }\n });\n function removeExpr(expressions, name) {\n var result = [];\n for (var idx = 0, length = expressions.length; idx < length; idx++) {\n if (expressions[idx].field !== name) {\n result.push(expressions[idx]);\n }\n }\n return result;\n }\n function findFilters(filter, member, operator) {\n if (!filter) {\n return [];\n }\n filter = filter.filters;\n var idx = 0;\n var result = [];\n var length = filter.length;\n var filterOperator;\n for (; idx < length; idx++) {\n filterOperator = filter[idx].operator;\n if ((!operator && filterOperator !== 'in' || filterOperator === operator) && filter[idx].field === member) {\n result.push(filter[idx]);\n }\n }\n return result;\n }\n function checkNodes(filter, member, nodes) {\n var values, idx = 0, length = nodes.length;\n filter = findFilters(filter, member, 'in')[0];\n if (!filter) {\n for (; idx < length; idx++) {\n nodes[idx].checked = true;\n }\n } else {\n values = filter.value.split(',');\n for (; idx < length; idx++) {\n nodes[idx].checked = $.inArray(nodes[idx].uniqueName, values) >= 0;\n }\n }\n }\n function checkedNodeIds(nodes, checkedNodes) {\n var idx, length = nodes.length;\n for (idx = 0; idx < length; idx++) {\n if (nodes[idx].checked && nodes[idx].level() !== 0) {\n checkedNodes.push(nodes[idx].uniqueName);\n }\n if (nodes[idx].hasChildren) {\n checkedNodeIds(nodes[idx].children.view(), checkedNodes);\n }\n }\n }\n var LABELMENUTEMPLATE = '<div class=\"k-filterable k-content\" tabindex=\"-1\" data-role=\"fieldmenu\">' + '<form class=\"k-filter-menu\">' + '<div>' + '<div class=\"k-filter-help-text\">#=messages.info#</div>' + '<select>' + '#for(var op in messages.operators){#' + '<option value=\"#=op#\">#=messages.operators[op]#</option>' + '#}#' + '</select>' + '<input class=\"k-textbox\" type=\"text\" />' + '<div>' + '<a class=\"k-button k-primary k-button-filter\" href=\"\\\\#\">#=messages.filter#</a>' + '<a class=\"k-button k-button-clear\" href=\"\\\\#\">#=messages.clear#</a>' + '</div>' + '</div>' + '</form>' + '</div>';\n var MENUTEMPLATE = '<ul class=\"k-pivot-fieldmenu\">' + '# if (sortable) {#' + '<li class=\"k-item k-sort-asc\">' + '<span class=\"k-link\">' + '<span class=\"k-icon k-i-sort-asc-sm\"></span>' + '${messages.sortAscending}' + '</span>' + '</li>' + '<li class=\"k-item k-sort-desc\">' + '<span class=\"k-link\">' + '<span class=\"k-icon k-i-sort-desc-sm\"></span>' + '${messages.sortDescending}' + '</span>' + '</li>' + '# if (filterable) {#' + '<li class=\"k-separator\"></li>' + '# } #' + '# } #' + '# if (filterable) {#' + '<li class=\"k-item k-include-item\">' + '<span class=\"k-link\">' + '<span class=\"k-icon k-i-filter\"></span>' + '${messages.include}' + '</span>' + '</li>' + '<li class=\"k-separator\"></li>' + '<li class=\"k-item k-filter-item\">' + '<span class=\"k-link\">' + '<span class=\"k-icon k-i-filter\"></span>' + '${messages.filterFields}' + '</span>' + '<ul>' + '<li>' + LABELMENUTEMPLATE + '</li>' + '</ul>' + '</li>' + '# } #' + '</ul>';\n var WINDOWTEMPLATE = '<div class=\"k-popup-edit-form k-pivot-filter-window\"><div class=\"k-edit-form-container\">' + '<div class=\"k-treeview\"></div>' + '<div class=\"k-edit-buttons k-state-default\">' + '<a class=\"k-button k-primary k-button-ok\" href=\"\\\\#\">' + '${messages.ok}' + '</a>' + '<a class=\"k-button k-button-cancel\" href=\"\\\\#\">' + '${messages.cancel}' + '</a>' + '</div></div>';\n ui.plugin(PivotFieldMenu);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.filtercell', [\n 'kendo.autocomplete',\n 'kendo.datepicker',\n 'kendo.numerictextbox',\n 'kendo.combobox',\n 'kendo.dropdownlist'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'filtercell',\n name: 'Row filter',\n category: 'framework',\n depends: ['autocomplete'],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, DataSource = kendo.data.DataSource, Widget = ui.Widget, CHANGE = 'change', BOOL = 'boolean', ENUM = 'enums', STRING = 'string', EQ = 'Is equal to', NEQ = 'Is not equal to', proxy = $.proxy, nonValueOperators = [\n 'isnull',\n 'isnotnull',\n 'isempty',\n 'isnotempty'\n ];\n function isNonValueFilter(filter) {\n var operator = typeof filter === 'string' ? filter : filter.operator;\n return $.inArray(operator, nonValueOperators) > -1;\n }\n function findFilterForField(filter, field) {\n var filters = [];\n if ($.isPlainObject(filter)) {\n if (filter.hasOwnProperty('filters')) {\n filters = filter.filters;\n } else if (filter.field == field) {\n return filter;\n }\n }\n if ($.isArray(filter)) {\n filters = filter;\n }\n for (var i = 0; i < filters.length; i++) {\n var result = findFilterForField(filters[i], field);\n if (result) {\n return result;\n }\n }\n }\n function removeFiltersForField(expression, field) {\n if (expression.filters) {\n expression.filters = $.grep(expression.filters, function (filter) {\n removeFiltersForField(filter, field);\n if (filter.filters) {\n return filter.filters.length;\n } else {\n return filter.field != field;\n }\n });\n }\n }\n function removeDuplicates(dataSelector, dataTextField) {\n var getter = kendo.getter(dataTextField, true);\n return function (e) {\n var items = dataSelector(e), result = [], index = 0, seen = {};\n while (index < items.length) {\n var item = items[index++], text = getter(item);\n if (!seen.hasOwnProperty(text)) {\n result.push(item);\n seen[text] = true;\n }\n }\n return result;\n };\n }\n var FilterCell = Widget.extend({\n init: function (element, options) {\n element = $(element).addClass('k-filtercell');\n var wrapper = this.wrapper = $('<span/>').appendTo(element);\n var that = this, dataSource, viewModel, passedOptions = options, first, type, operators = that.operators = options.operators || {}, input = that.input = $('<input/>').attr(kendo.attr('bind'), 'value: value').appendTo(wrapper);\n var suggestDataSource = options ? options.suggestDataSource : null;\n if (suggestDataSource) {\n options = $.extend({}, options, { suggestDataSource: {} });\n }\n Widget.fn.init.call(that, element[0], options);\n if (suggestDataSource) {\n that.options.suggestDataSource = suggestDataSource;\n }\n options = that.options;\n dataSource = that.dataSource = options.dataSource;\n that.model = dataSource.reader.model;\n type = options.type = STRING;\n var fields = kendo.getter('reader.model.fields', true)(dataSource) || {};\n var target = fields[options.field];\n if (target && target.type) {\n type = options.type = target.type;\n }\n if (options.values) {\n options.type = type = ENUM;\n }\n operators = operators[type] || options.operators[type];\n if (!passedOptions.operator) {\n for (first in operators) {\n options.operator = first;\n break;\n }\n }\n that._parse = function (value) {\n return value != null ? value + '' : value;\n };\n if (that.model && that.model.fields) {\n var field = that.model.fields[options.field];\n if (field) {\n if (field.parse) {\n that._parse = proxy(field.parse, field);\n }\n }\n }\n that.defaultOperator = options.operator;\n that.viewModel = viewModel = kendo.observable({\n operator: options.operator,\n value: null,\n operatorVisible: function () {\n var val = this.get('value');\n return val !== null && val !== undefined && val != 'undefined' || isNonValueFilter(this.get('operator')) && !that._clearInProgress;\n }\n });\n viewModel.bind(CHANGE, proxy(that.updateDsFilter, that));\n if (type == STRING) {\n that.initSuggestDataSource(options);\n }\n if (options.inputWidth !== null) {\n input.width(options.inputWidth);\n }\n that._setInputType(options, type);\n if (type != BOOL && options.showOperators !== false) {\n that._createOperatorDropDown(operators);\n } else {\n wrapper.addClass('k-operator-hidden');\n }\n that._createClearIcon();\n kendo.bind(this.wrapper, viewModel);\n if (type == STRING) {\n if (!options.template) {\n that.setAutoCompleteSource();\n }\n }\n if (type == ENUM) {\n that.setComboBoxSource(that.options.values);\n }\n that._refreshUI();\n that._refreshHandler = proxy(that._refreshUI, that);\n that.dataSource.bind(CHANGE, that._refreshHandler);\n },\n _setInputType: function (options, type) {\n var that = this, input = that.input;\n if (typeof options.template == 'function') {\n options.template.call(that.viewModel, {\n element: that.input,\n dataSource: that.suggestDataSource\n });\n that._angularItems('compile');\n } else if (type == STRING) {\n input.attr(kendo.attr('role'), 'autocomplete').attr(kendo.attr('text-field'), options.dataTextField || options.field).attr(kendo.attr('filter'), options.suggestionOperator).attr(kendo.attr('delay'), options.delay).attr(kendo.attr('min-length'), options.minLength).attr(kendo.attr('value-primitive'), true);\n } else if (type == 'date') {\n input.attr(kendo.attr('role'), 'datepicker');\n } else if (type == BOOL) {\n input.remove();\n var radioInput = $('<input type=\\'radio\\'/>');\n var wrapper = that.wrapper;\n var inputName = kendo.guid();\n var labelTrue = $('<label/>').text(options.messages.isTrue).append(radioInput);\n radioInput.attr(kendo.attr('bind'), 'checked:value').attr('name', inputName).val('true');\n var labelFalse = labelTrue.clone().text(options.messages.isFalse);\n radioInput.clone().val('false').appendTo(labelFalse);\n wrapper.append([\n labelTrue,\n labelFalse\n ]);\n } else if (type == 'number') {\n input.attr(kendo.attr('role'), 'numerictextbox');\n } else if (type == ENUM) {\n input.attr(kendo.attr('role'), 'combobox').attr(kendo.attr('text-field'), 'text').attr(kendo.attr('suggest'), true).attr(kendo.attr('filter'), 'contains').attr(kendo.attr('value-field'), 'value').attr(kendo.attr('value-primitive'), true);\n }\n },\n _createOperatorDropDown: function (operators) {\n var items = [];\n for (var prop in operators) {\n items.push({\n text: operators[prop],\n value: prop\n });\n }\n var dropdown = $('<input class=\"k-dropdown-operator\" ' + kendo.attr('bind') + '=\"value: operator\"/>').appendTo(this.wrapper);\n this.operatorDropDown = dropdown.kendoDropDownList({\n dataSource: items,\n dataTextField: 'text',\n dataValueField: 'value',\n open: function () {\n this.popup.element.width(150);\n },\n valuePrimitive: true\n }).data('kendoDropDownList');\n this.operatorDropDown.wrapper.find('.k-i-arrow-60-down').removeClass('k-i-arrow-60-down').addClass('k-i-filter');\n },\n initSuggestDataSource: function (options) {\n var suggestDataSource = options.suggestDataSource;\n if (!(suggestDataSource instanceof DataSource)) {\n if (!options.customDataSource && suggestDataSource) {\n suggestDataSource.group = undefined;\n }\n suggestDataSource = this.suggestDataSource = DataSource.create(suggestDataSource);\n }\n if (!options.customDataSource) {\n suggestDataSource._pageSize = undefined;\n suggestDataSource.reader.data = removeDuplicates(suggestDataSource.reader.data, this.options.field);\n }\n this.suggestDataSource = suggestDataSource;\n },\n setAutoCompleteSource: function () {\n var autoComplete = this.input.data('kendoAutoComplete');\n if (autoComplete) {\n autoComplete.setDataSource(this.suggestDataSource);\n }\n },\n setComboBoxSource: function (values) {\n var dataSource = DataSource.create({ data: values });\n var comboBox = this.input.data('kendoComboBox');\n if (comboBox) {\n comboBox.setDataSource(dataSource);\n }\n },\n _refreshUI: function () {\n var that = this, filter = findFilterForField(that.dataSource.filter(), this.options.field) || {}, viewModel = that.viewModel;\n that.manuallyUpdatingVM = true;\n filter = $.extend(true, {}, filter);\n if (that.options.type == BOOL) {\n if (viewModel.value !== filter.value) {\n that.wrapper.find(':radio').prop('checked', false);\n }\n }\n if (filter.operator) {\n viewModel.set('operator', filter.operator);\n }\n viewModel.set('value', filter.value);\n that.manuallyUpdatingVM = false;\n },\n updateDsFilter: function (e) {\n var that = this, model = that.viewModel;\n if (that.manuallyUpdatingVM || e.field == 'operator' && model.value === undefined && !isNonValueFilter(model)) {\n return;\n }\n var currentFilter = $.extend({}, that.viewModel.toJSON(), { field: that.options.field });\n var expression = {\n logic: 'and',\n filters: []\n };\n var prevented = false;\n if (currentFilter.value !== undefined && currentFilter.value !== null || isNonValueFilter(currentFilter) && !this._clearInProgress) {\n expression.filters.push(currentFilter);\n prevented = that.trigger(CHANGE, {\n filter: expression,\n field: that.options.field\n });\n }\n if (that._clearInProgress || currentFilter.value === null) {\n prevented = that.trigger(CHANGE, {\n filter: null,\n field: that.options.field\n });\n }\n if (prevented) {\n return;\n }\n var mergeResult = that._merge(expression);\n if (mergeResult.filters.length) {\n that.dataSource.filter(mergeResult);\n } else {\n that.dataSource.filter({});\n }\n },\n _merge: function (expression) {\n var that = this, logic = expression.logic || 'and', filters = expression.filters, filter, result = that.dataSource.filter() || {\n filters: [],\n logic: 'and'\n }, idx, length;\n removeFiltersForField(result, that.options.field);\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n filter.value = that._parse(filter.value);\n }\n filters = $.grep(filters, function (filter) {\n return filter.value !== '' && filter.value !== null || isNonValueFilter(filter);\n });\n if (filters.length) {\n if (result.filters.length) {\n expression.filters = filters;\n if (result.logic !== 'and') {\n result.filters = [{\n logic: result.logic,\n filters: result.filters\n }];\n result.logic = 'and';\n }\n if (filters.length > 1) {\n result.filters.push(expression);\n } else {\n result.filters.push(filters[0]);\n }\n } else {\n result.filters = filters;\n result.logic = logic;\n }\n }\n return result;\n },\n _createClearIcon: function () {\n var that = this;\n $('<button type=\\'button\\' class=\\'k-button k-button-icon\\' title = ' + that.options.messages.clear + '/>').attr(kendo.attr('bind'), 'visible:operatorVisible').html('<span class=\\'k-icon k-i-close\\'/>').click(proxy(that.clearFilter, that)).appendTo(that.wrapper);\n },\n clearFilter: function () {\n this._clearInProgress = true;\n if (isNonValueFilter(this.viewModel.operator)) {\n this.viewModel.set('operator', this.defaultOperator);\n }\n this.viewModel.set('value', null);\n this._clearInProgress = false;\n },\n _angularItems: function (action) {\n var elements = this.wrapper.closest('th').get();\n var column = this.options.column;\n this.angular(action, function () {\n return {\n elements: elements,\n data: [{ column: column }]\n };\n });\n },\n destroy: function () {\n var that = this;\n that.filterModel = null;\n that.operatorDropDown = null;\n that._angularItems('cleanup');\n if (that._refreshHandler) {\n that.dataSource.bind(CHANGE, that._refreshHandler);\n that._refreshHandler = null;\n }\n kendo.unbind(that.element);\n Widget.fn.destroy.call(that);\n kendo.destroy(that.element);\n },\n events: [CHANGE],\n options: {\n name: 'FilterCell',\n delay: 200,\n minLength: 1,\n inputWidth: null,\n values: undefined,\n customDataSource: false,\n field: '',\n dataTextField: '',\n type: 'string',\n suggestDataSource: null,\n suggestionOperator: 'startswith',\n operator: 'eq',\n showOperators: true,\n template: null,\n messages: {\n isTrue: 'is true',\n isFalse: 'is false',\n filter: 'Filter',\n clear: 'Clear',\n operator: 'Operator'\n },\n operators: {\n string: {\n eq: EQ,\n neq: NEQ,\n startswith: 'Starts with',\n contains: 'Contains',\n doesnotcontain: 'Does not contain',\n endswith: 'Ends with',\n isnull: 'Is null',\n isnotnull: 'Is not null',\n isempty: 'Is empty',\n isnotempty: 'Is not empty'\n },\n number: {\n eq: EQ,\n neq: NEQ,\n gte: 'Is greater than or equal to',\n gt: 'Is greater than',\n lte: 'Is less than or equal to',\n lt: 'Is less than',\n isnull: 'Is null',\n isnotnull: 'Is not null'\n },\n date: {\n eq: EQ,\n neq: NEQ,\n gte: 'Is after or equal to',\n gt: 'Is after',\n lte: 'Is before or equal to',\n lt: 'Is before',\n isnull: 'Is null',\n isnotnull: 'Is not null'\n },\n enums: {\n eq: EQ,\n neq: NEQ,\n isnull: 'Is null',\n isnotnull: 'Is not null'\n }\n }\n }\n });\n ui.plugin(FilterCell);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.panelbar', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'panelbar',\n name: 'PanelBar',\n category: 'web',\n description: 'The PanelBar widget displays hierarchical data as a multi-level expandable panel bar.',\n depends: [\n 'core',\n 'data.odata'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, keys = kendo.keys, extend = $.extend, proxy = $.proxy, each = $.each, isArray = $.isArray, template = kendo.template, Widget = ui.Widget, HierarchicalDataSource = kendo.data.HierarchicalDataSource, excludedNodesRegExp = /^(ul|a|div)$/i, NS = '.kendoPanelBar', IMG = 'img', HREF = 'href', LAST = 'k-last', LINK = 'k-link', LINKSELECTOR = '.' + LINK, ERROR = 'error', ITEM = '.k-item', GROUP = '.k-group', VISIBLEGROUP = GROUP + ':visible', IMAGE = 'k-image', FIRST = 'k-first', CHANGE = 'change', EXPAND = 'expand', SELECT = 'select', CONTENT = 'k-content', ACTIVATE = 'activate', COLLAPSE = 'collapse', DATABOUND = 'dataBound', MOUSEENTER = 'mouseenter', MOUSELEAVE = 'mouseleave', CONTENTLOAD = 'contentLoad', UNDEFINED = 'undefined', ACTIVECLASS = 'k-state-active', GROUPS = '> .k-panel', CONTENTS = '> .k-content', STRING = 'string', FOCUSEDCLASS = 'k-state-focused', DISABLEDCLASS = 'k-state-disabled', SELECTEDCLASS = 'k-state-selected', SELECTEDSELECTOR = '.' + SELECTEDCLASS, HIGHLIGHTCLASS = 'k-state-highlight', ACTIVEITEMSELECTOR = ITEM + ':not(.k-state-disabled)', clickableItems = '> ' + ACTIVEITEMSELECTOR + ' > ' + LINKSELECTOR + ', .k-panel > ' + ACTIVEITEMSELECTOR + ' > ' + LINKSELECTOR, disabledItems = ITEM + '.k-state-disabled > .k-link', selectableItems = '> li > ' + SELECTEDSELECTOR + ', .k-panel > li > ' + SELECTEDSELECTOR, defaultState = 'k-state-default', ARIA_DISABLED = 'aria-disabled', ARIA_EXPANDED = 'aria-expanded', ARIA_HIDDEN = 'aria-hidden', ARIA_SELECTED = 'aria-selected', VISIBLE = ':visible', EMPTY = ':empty', SINGLE = 'single', bindings = {\n text: 'dataTextField',\n url: 'dataUrlField',\n spriteCssClass: 'dataSpriteCssClassField',\n imageUrl: 'dataImageUrlField'\n }, itemIcon, rendering = {\n aria: function (item) {\n var attr = '';\n if (item.items || item.content || item.contentUrl || item.expanded) {\n attr += ARIA_EXPANDED + '=\\'' + (item.expanded ? 'true' : 'false') + '\\' ';\n }\n if (item.enabled === false) {\n attr += ARIA_DISABLED + '=\\'true\\'';\n }\n return attr;\n },\n wrapperCssClass: function (group, item) {\n var result = 'k-item', index = item.index;\n if (item.enabled === false) {\n result += ' ' + DISABLEDCLASS;\n } else if (item.expanded === true) {\n result += ' ' + ACTIVECLASS;\n } else {\n result += ' k-state-default';\n }\n if (index === 0) {\n result += ' k-first';\n }\n if (index == group.length - 1) {\n result += ' k-last';\n }\n if (item.cssClass) {\n result += ' ' + item.cssClass;\n }\n return result;\n },\n textClass: function (item, group) {\n var result = LINK;\n if (group.firstLevel) {\n result += ' k-header';\n }\n return result;\n },\n textAttributes: function (url) {\n return url ? ' href=\\'' + url + '\\'' : '';\n },\n arrowClass: function (item) {\n var result = 'k-icon';\n result += item.expanded ? ' k-panelbar-collapse k-i-arrow-n' : ' k-panelbar-expand k-i-arrow-s';\n return result;\n },\n text: function (item) {\n return item.encoded === false ? item.text : kendo.htmlEncode(item.text);\n },\n groupAttributes: function (group) {\n return group.expanded !== true ? ' style=\\'display:none\\'' : '';\n },\n groupCssClass: function () {\n return 'k-group k-panel';\n },\n contentAttributes: function (content) {\n return content.item.expanded !== true ? ' style=\\'display:none\\'' : '';\n },\n content: function (item) {\n return item.content ? item.content : item.contentUrl ? '' : ' ';\n },\n contentUrl: function (item) {\n return item.contentUrl ? 'href=\"' + item.contentUrl + '\"' : '';\n }\n };\n function updateFirstLast(items) {\n items = $(items);\n items.filter('.k-first:not(:first-child)').removeClass(FIRST);\n items.filter('.k-last:not(:last-child)').removeClass(LAST);\n items.filter(':first-child').addClass(FIRST);\n items.filter(':last-child').addClass(LAST);\n }\n function updateItemHtml(item) {\n var wrapper = item, group = item.children('ul'), toggleButton = wrapper.children('.k-link').children('.k-icon');\n if (item.hasClass('k-panelbar')) {\n return;\n }\n if (!toggleButton.length && group.length) {\n toggleButton = $('<span class=\\'k-icon\\' />').appendTo(wrapper);\n } else if (!group.length || !group.children().length) {\n toggleButton.remove();\n group.remove();\n }\n }\n itemIcon = function (item) {\n return item.children('span').children('.k-icon');\n };\n var PanelBar = kendo.ui.DataBoundWidget.extend({\n init: function (element, options) {\n var that = this, content, hasDataSource;\n if (isArray(options)) {\n options = { dataSource: options };\n }\n hasDataSource = options && !!options.dataSource;\n Widget.fn.init.call(that, element, options);\n element = that.wrapper = that.element.addClass('k-widget k-reset k-header k-panelbar');\n options = that.options;\n if (element[0].id) {\n that._itemId = element[0].id + '_pb_active';\n }\n that._tabindex();\n that._accessors();\n that._dataSource();\n that._templates();\n that._initData(hasDataSource);\n that._updateClasses();\n that._animations(options);\n element.on('click' + NS, clickableItems, function (e) {\n if (that._click($(e.currentTarget))) {\n e.preventDefault();\n }\n }).on(MOUSEENTER + NS + ' ' + MOUSELEAVE + NS, clickableItems, that._toggleHover).on('click' + NS, disabledItems, false).on('click' + NS, '.k-request-retry', proxy(that._retryRequest, that)).on('keydown' + NS, $.proxy(that._keydown, that)).on('focus' + NS, function () {\n var item = that.select();\n that._current(item[0] ? item : that._first());\n }).on('blur' + NS, function () {\n that._current(null);\n }).attr('role', 'menu');\n content = element.find('li.' + ACTIVECLASS + ' > .' + CONTENT);\n if (content[0]) {\n that.expand(content.parent(), false);\n }\n if (!options.dataSource) {\n that._angularCompile();\n }\n kendo.notify(that);\n },\n events: [\n EXPAND,\n COLLAPSE,\n SELECT,\n ACTIVATE,\n CHANGE,\n ERROR,\n DATABOUND,\n CONTENTLOAD\n ],\n options: {\n name: 'PanelBar',\n dataSource: {},\n animation: {\n expand: {\n effects: 'expand:vertical',\n duration: 200\n },\n collapse: { duration: 200 }\n },\n messages: {\n loading: 'Loading...',\n requestFailed: 'Request failed.',\n retry: 'Retry'\n },\n autoBind: true,\n loadOnDemand: true,\n expandMode: 'multiple',\n dataTextField: null\n },\n _angularCompile: function () {\n var that = this;\n that.angular('compile', function () {\n return {\n elements: that.element.children('li'),\n data: [{ dataItem: that.options.$angular }]\n };\n });\n },\n _angularCompileElements: function (html, items) {\n var that = this;\n that.angular('compile', function () {\n return {\n elements: html,\n data: $.map(items, function (item) {\n return [{ dataItem: item }];\n })\n };\n });\n },\n _angularCleanup: function () {\n var that = this;\n that.angular('cleanup', function () {\n return { elements: that.element.children('li') };\n });\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.off(NS);\n this._angularCleanup();\n kendo.destroy(this.element);\n },\n _initData: function (hasDataSource) {\n var that = this;\n if (hasDataSource) {\n that.element.empty();\n if (that.options.autoBind) {\n that._progress(true);\n that.dataSource.fetch();\n }\n }\n },\n _templates: function () {\n var that = this, options = that.options, fieldAccessor = proxy(that._fieldAccessor, that);\n if (options.template && typeof options.template == STRING) {\n options.template = template(options.template);\n } else if (!options.template) {\n options.template = template('# var text = ' + fieldAccessor('text') + '(data.item); #' + '# if (typeof data.item.encoded != \\'undefined\\' && data.item.encoded === false) {#' + '#= text #' + '# } else { #' + '#: text #' + '# } #');\n }\n that.templates = {\n content: template('<div role=\\'region\\' class=\\'k-content\\'#= contentAttributes(data) #>#= content(item) #</div>'),\n group: template('<ul role=\\'group\\' aria-hidden=\\'true\\' class=\\'#= groupCssClass(group) #\\'#= groupAttributes(group) #>' + '#= renderItems(data) #' + '</ul>'),\n itemWrapper: template('# var url = ' + fieldAccessor('url') + '(item); #' + '# var imageUrl = ' + fieldAccessor('imageUrl') + '(item); #' + '# var spriteCssClass = ' + fieldAccessor('spriteCssClass') + '(item); #' + '# var contentUrl = contentUrl(item); #' + '# var tag = url||contentUrl ? \\'a\\' : \\'span\\'; #' + '<#= tag # class=\\'#= textClass(item, group) #\\' #= contentUrl ##= textAttributes(url) #>' + '# if (imageUrl) { #' + '<img class=\\'k-image\\' alt=\\'\\' src=\\'#= imageUrl #\\' />' + '# } #' + '# if (spriteCssClass) { #' + '<span class=\\'k-sprite #= spriteCssClass #\\'></span>' + '# } #' + '#= data.panelBar.options.template(data) #' + '#= arrow(data) #' + '</#= tag #>'),\n item: template('<li role=\\'menuitem\\' #=aria(item)#class=\\'#= wrapperCssClass(group, item) #\\'' + kendo.attr('uid') + '=\\'#= item.uid #\\'>' + '#= itemWrapper(data) #' + '# if (item.items && item.items.length > 0) { #' + '#= subGroup({ items: item.items, panelBar: panelBar, group: { expanded: item.expanded } }) #' + '# } else if (item.content || item.contentUrl) { #' + '#= renderContent(data) #' + '# } #' + '</li>'),\n loading: template('<div class=\\'k-item\\'><span class=\\'k-icon k-i-loading\\'></span> #: data.messages.loading #</div>'),\n retry: template('#: data.messages.requestFailed # ' + '<button class=\\'k-button k-request-retry\\'>#: data.messages.retry #</button>'),\n arrow: template('<span class=\\'#= arrowClass(item) #\\'></span>'),\n empty: template('')\n };\n },\n setOptions: function (options) {\n var animation = this.options.animation;\n this._animations(options);\n options.animation = extend(true, animation, options.animation);\n if ('dataSource' in options) {\n this.setDataSource(options.dataSource);\n }\n Widget.fn.setOptions.call(this, options);\n },\n expand: function (element, useAnimation) {\n var that = this, animBackup = {};\n element = this.element.find(element);\n if (that._animating && element.find('ul').is(':visible')) {\n that.one('complete', function () {\n setTimeout(function () {\n that.expand(element);\n });\n });\n return;\n }\n that._animating = true;\n useAnimation = useAnimation !== false;\n element.each(function (index, item) {\n item = $(item);\n var wrapper = element.children('.k-group,.k-content');\n if (!wrapper.length) {\n wrapper = that._addGroupElement(element);\n }\n var groups = wrapper.add(item.find(CONTENTS));\n if (!item.hasClass(DISABLEDCLASS) && groups.length > 0) {\n if (that.options.expandMode == SINGLE && that._collapseAllExpanded(item)) {\n return that;\n }\n element.find('.' + HIGHLIGHTCLASS).removeClass(HIGHLIGHTCLASS);\n item.addClass(HIGHLIGHTCLASS);\n if (!useAnimation) {\n animBackup = that.options.animation;\n that.options.animation = {\n expand: { effects: {} },\n collapse: {\n hide: true,\n effects: {}\n }\n };\n }\n if (!that._triggerEvent(EXPAND, item)) {\n that._toggleItem(item, false, false);\n }\n if (!useAnimation) {\n that.options.animation = animBackup;\n }\n }\n });\n return that;\n },\n collapse: function (element, useAnimation) {\n var that = this, animBackup = {};\n that._animating = true;\n useAnimation = useAnimation !== false;\n element = that.element.find(element);\n element.each(function (index, item) {\n item = $(item);\n var groups = item.find(GROUPS).add(item.find(CONTENTS));\n if (!item.hasClass(DISABLEDCLASS) && groups.is(VISIBLE)) {\n item.removeClass(HIGHLIGHTCLASS);\n if (!useAnimation) {\n animBackup = that.options.animation;\n that.options.animation = {\n expand: { effects: {} },\n collapse: {\n hide: true,\n effects: {}\n }\n };\n }\n if (!that._triggerEvent(COLLAPSE, item)) {\n that._toggleItem(item, true);\n }\n if (!useAnimation) {\n that.options.animation = animBackup;\n }\n }\n });\n return that;\n },\n updateArrow: function (items) {\n var that = this;\n items = $(items);\n items.children(LINKSELECTOR).children('.k-panelbar-collapse, .k-panelbar-expand').remove();\n items.filter(function () {\n var dataItem = that.dataItem(this);\n if (!dataItem) {\n return $(this).find('.k-panel').length > 0 || $(this).find('.k-content').length > 0;\n }\n return dataItem.hasChildren || dataItem.content || dataItem.contentUrl;\n }).children('.k-link:not(:has([class*=k-i-arrow]))').each(function () {\n var item = $(this), parent = item.parent();\n item.append('<span class=\\'k-icon ' + (parent.hasClass(ACTIVECLASS) ? ' k-panelbar-collapse k-i-arrow-n' : ' k-panelbar-expand k-i-arrow-s') + '\\'/>');\n });\n },\n _accessors: function () {\n var that = this, options = that.options, i, field, textField, element = that.element;\n for (i in bindings) {\n field = options[bindings[i]];\n textField = element.attr(kendo.attr(i + '-field'));\n if (!field && textField) {\n field = textField;\n }\n if (!field) {\n field = i;\n }\n if (!isArray(field)) {\n field = [field];\n }\n options[bindings[i]] = field;\n }\n },\n _progress: function (item, showProgress) {\n var element = this.element;\n var loadingText = this.templates.loading({ messages: this.options.messages });\n if (arguments.length == 1) {\n showProgress = item;\n if (showProgress) {\n element.html(loadingText);\n } else {\n element.empty();\n }\n } else {\n itemIcon(item).toggleClass('k-i-loading', showProgress).removeClass('k-i-refresh');\n }\n },\n _refreshRoot: function (items) {\n var that = this;\n var parent = that.element;\n var groupData = {\n firstLevel: true,\n expanded: true,\n length: parent.children().length\n };\n this.element.empty();\n var rootItemsHtml = $.map(items, function (value, idx) {\n if (typeof value === 'string') {\n return $(value);\n } else {\n value.items = [];\n return $(that.renderItem({\n group: groupData,\n item: extend(value, { index: idx })\n }));\n }\n });\n this.element.append(rootItemsHtml);\n this._angularCompileElements(rootItemsHtml, items);\n },\n _refreshChildren: function (item, parentNode) {\n var i, children, child;\n parentNode.children('.k-group').empty();\n var items = item.children.data();\n if (!items.length) {\n updateItemHtml(parentNode);\n children = parentNode.children('.k-group').children('li');\n this._angularCompileElements(children, items);\n } else {\n this.append(item.children, parentNode);\n if (this.options.loadOnDemand) {\n this._toggleGroup(parentNode.children('.k-group'), false);\n }\n children = parentNode.children('.k-group').children('li');\n for (i = 0; i < children.length; i++) {\n child = children.eq(i);\n this.trigger('itemChange', {\n item: child,\n data: this.dataItem(child),\n ns: ui\n });\n }\n }\n },\n findByUid: function (uid) {\n var items = this.element.find('.k-item');\n var uidAttr = kendo.attr('uid');\n var result;\n for (var i = 0; i < items.length; i++) {\n if (items[i].getAttribute(uidAttr) == uid) {\n result = items[i];\n break;\n }\n }\n return $(result);\n },\n refresh: function (e) {\n var options = this.options;\n var node = e.node;\n var action = e.action;\n var items = e.items;\n var parentNode = this.wrapper;\n var loadOnDemand = options.loadOnDemand;\n if (e.field) {\n if (!items[0] || !items[0].level) {\n return;\n }\n return this._updateItems(items, e.field);\n }\n if (node) {\n parentNode = this.findByUid(node.uid);\n this._progress(parentNode, false);\n }\n if (action == 'add') {\n this._appendItems(e.index, items, parentNode);\n } else if (action == 'remove') {\n this.remove(this.findByUid(items[0].uid));\n } else if (action == 'itemchange') {\n this._updateItems(items);\n } else if (action == 'itemloaded') {\n this._refreshChildren(node, parentNode);\n } else {\n this._refreshRoot(items);\n }\n if (action != 'remove') {\n for (var k = 0; k < items.length; k++) {\n if (!loadOnDemand || items[k].expanded) {\n var tempItem = items[k];\n if (this._hasChildItems(tempItem)) {\n tempItem.load();\n }\n }\n }\n }\n this.trigger(DATABOUND, { node: node ? parentNode : undefined });\n },\n _error: function (e) {\n var node = e.node && this.findByUid(e.node.uid);\n var retryHtml = this.templates.retry({ messages: this.options.messages });\n if (node) {\n this._progress(node, false);\n this._expanded(node, false);\n itemIcon(node).addClass('k-i-refresh');\n e.node.loaded(false);\n } else {\n this._progress(false);\n this.element.html(retryHtml);\n }\n },\n _retryRequest: function (e) {\n e.preventDefault();\n this.dataSource.fetch();\n },\n items: function () {\n return this.element.find('.k-item > span:first-child');\n },\n setDataSource: function (dataSource) {\n var options = this.options;\n options.dataSource = dataSource;\n this._dataSource();\n if (this.options.autoBind) {\n this._progress(true);\n this.dataSource.fetch();\n }\n },\n _bindDataSource: function () {\n this._refreshHandler = proxy(this.refresh, this);\n this._errorHandler = proxy(this._error, this);\n this.dataSource.bind(CHANGE, this._refreshHandler);\n this.dataSource.bind(ERROR, this._errorHandler);\n },\n _unbindDataSource: function () {\n var dataSource = this.dataSource;\n if (dataSource) {\n dataSource.unbind(CHANGE, this._refreshHandler);\n dataSource.unbind(ERROR, this._errorHandler);\n }\n },\n _fieldAccessor: function (fieldName) {\n var fieldBindings = this.options[bindings[fieldName]] || [], count = fieldBindings.length, result = '(function(item) {';\n if (count === 0) {\n result += 'return item[\\'' + fieldName + '\\'];';\n } else {\n result += 'var levels = [' + $.map(fieldBindings, function (x) {\n return 'function(d){ return ' + kendo.expr(x) + '}';\n }).join(',') + '];';\n result += 'if(item.level){return levels[Math.min(item.level(), ' + count + '-1)](item);}else';\n result += '{return levels[' + count + '-1](item)}';\n }\n result += '})';\n return result;\n },\n _dataSource: function () {\n var that = this, options = that.options, dataSource = options.dataSource;\n if (!dataSource) {\n return;\n }\n dataSource = isArray(dataSource) ? { data: dataSource } : dataSource;\n that._unbindDataSource();\n if (!dataSource.fields) {\n dataSource.fields = [\n { field: 'text' },\n { field: 'url' },\n { field: 'spriteCssClass' },\n { field: 'imageUrl' }\n ];\n }\n that.dataSource = HierarchicalDataSource.create(dataSource);\n that._bindDataSource();\n },\n _appendItems: function (index, items, parentNode) {\n var that = this, children, wrapper;\n if (parentNode.hasClass('k-panelbar')) {\n children = parentNode.children('li');\n wrapper = parentNode;\n } else {\n wrapper = parentNode.children('.k-group');\n if (!wrapper.length) {\n wrapper = that._addGroupElement(parentNode);\n }\n children = wrapper.children('li');\n }\n var groupData = {\n firstLevel: parentNode.hasClass('k-panelbar'),\n expanded: true,\n length: children.length\n };\n var itemsHtml = $.map(items, function (value, idx) {\n if (typeof value === 'string') {\n return $(value);\n } else {\n return $(that.renderItem({\n group: groupData,\n item: extend(value, { index: idx })\n }));\n }\n });\n if (typeof index == UNDEFINED) {\n index = children.length;\n }\n for (var i = 0; i < itemsHtml.length; i++) {\n if (children.length === 0 || index === 0) {\n wrapper.append(itemsHtml[i]);\n } else {\n itemsHtml[i].insertAfter(children[index - 1]);\n }\n }\n that._angularCompileElements(itemsHtml, items);\n if (that.dataItem(parentNode)) {\n that.dataItem(parentNode).hasChildren = true;\n that.updateArrow(parentNode);\n }\n },\n _updateItems: function (items, field) {\n var that = this;\n var i, node, nodeWrapper, item;\n var context = {\n panelBar: that.options,\n item: item,\n group: {}\n };\n var render = field != 'expanded';\n if (field == 'selected') {\n if (items[0][field]) {\n var currentNode = that.findByUid(items[0].uid);\n if (!currentNode.hasClass(DISABLEDCLASS)) {\n that.select(currentNode, true);\n }\n } else {\n that.clearSelection();\n }\n } else {\n var elements = $.map(items, function (item) {\n return that.findByUid(item.uid);\n });\n if (render) {\n that.angular('cleanup', function () {\n return { elements: elements };\n });\n }\n for (i = 0; i < items.length; i++) {\n context.item = item = items[i];\n context.panelBar = that;\n nodeWrapper = elements[i];\n node = nodeWrapper.parent();\n if (render) {\n context.group = {\n firstLevel: node.hasClass('k-panelbar'),\n expanded: nodeWrapper.parent().hasClass(ACTIVECLASS),\n length: nodeWrapper.children().length\n };\n nodeWrapper.children('.k-link').remove();\n nodeWrapper.prepend(that.templates.itemWrapper(extend(context, { arrow: item.hasChildren || item.content || item.contentUrl ? that.templates.arrow : that.templates.empty }, rendering)));\n }\n if (field == 'expanded') {\n that._toggleItem(nodeWrapper, !item[field], item[field] ? 'true' : true);\n } else if (field == 'enabled') {\n that.enable(nodeWrapper, item[field]);\n if (!item[field]) {\n if (item.selected) {\n item.set('selected', false);\n }\n }\n }\n if (nodeWrapper.length) {\n this.trigger('itemChange', {\n item: nodeWrapper,\n data: item,\n ns: ui\n });\n }\n }\n if (render) {\n that.angular('compile', function () {\n return {\n elements: elements,\n data: $.map(items, function (item) {\n return [{ dataItem: item }];\n })\n };\n });\n }\n }\n },\n _toggleDisabled: function (element, enable) {\n element = this.element.find(element);\n element.toggleClass(defaultState, enable).toggleClass(DISABLEDCLASS, !enable).attr(ARIA_DISABLED, !enable);\n },\n dataItem: function (item) {\n var uid = $(item).closest(ITEM).attr(kendo.attr('uid')), dataSource = this.dataSource;\n return dataSource && dataSource.getByUid(uid);\n },\n select: function (element, skipChange) {\n var that = this;\n if (element === undefined) {\n return that.element.find(selectableItems).parent();\n }\n element = that.element.find(element);\n if (!element.length) {\n this._updateSelected(element);\n } else {\n element.each(function () {\n var item = $(this), link = item.children(LINKSELECTOR);\n if (item.hasClass(DISABLEDCLASS)) {\n return that;\n }\n that._updateSelected(link, skipChange);\n });\n }\n return that;\n },\n clearSelection: function () {\n this.select($());\n },\n enable: function (element, state) {\n this._toggleDisabled(element, state !== false);\n return this;\n },\n disable: function (element) {\n this._toggleDisabled(element, false);\n return this;\n },\n append: function (item, referenceItem) {\n referenceItem = this.element.find(referenceItem);\n var inserted = this._insert(item, referenceItem, referenceItem.length ? referenceItem.find(GROUPS) : null);\n each(inserted.items, function () {\n inserted.group.append(this);\n updateFirstLast(this);\n });\n this.updateArrow(referenceItem);\n updateFirstLast(inserted.group.find('.k-first, .k-last'));\n inserted.group.height('auto');\n return this;\n },\n insertBefore: function (item, referenceItem) {\n referenceItem = this.element.find(referenceItem);\n var inserted = this._insert(item, referenceItem, referenceItem.parent());\n each(inserted.items, function () {\n referenceItem.before(this);\n updateFirstLast(this);\n });\n updateFirstLast(referenceItem);\n inserted.group.height('auto');\n return this;\n },\n insertAfter: function (item, referenceItem) {\n referenceItem = this.element.find(referenceItem);\n var inserted = this._insert(item, referenceItem, referenceItem.parent());\n each(inserted.items, function () {\n referenceItem.after(this);\n updateFirstLast(this);\n });\n updateFirstLast(referenceItem);\n inserted.group.height('auto');\n return this;\n },\n remove: function (element) {\n element = this.element.find(element);\n var that = this, parent = element.parentsUntil(that.element, ITEM), group = element.parent('ul');\n element.remove();\n if (group && !group.hasClass('k-panelbar') && !group.children(ITEM).length) {\n group.remove();\n }\n if (parent.length) {\n parent = parent.eq(0);\n that.updateArrow(parent);\n updateFirstLast(parent);\n }\n return that;\n },\n reload: function (element) {\n var that = this;\n element = that.element.find(element);\n element.each(function () {\n var item = $(this);\n that._ajaxRequest(item, item.children('.' + CONTENT), !item.is(VISIBLE));\n });\n },\n _first: function () {\n return this.element.children(ACTIVEITEMSELECTOR).first();\n },\n _last: function () {\n var item = this.element.children(ACTIVEITEMSELECTOR).last(), group = item.children(VISIBLEGROUP);\n if (group[0]) {\n return group.children(ACTIVEITEMSELECTOR).last();\n }\n return item;\n },\n _current: function (candidate) {\n var that = this, focused = that._focused, id = that._itemId;\n if (candidate === undefined) {\n return focused;\n }\n that.element.removeAttr('aria-activedescendant');\n if (focused && focused.length) {\n if (focused[0].id === id) {\n focused.removeAttr('id');\n }\n focused.children(LINKSELECTOR).removeClass(FOCUSEDCLASS);\n }\n if ($(candidate).length) {\n id = candidate[0].id || id;\n candidate.attr('id', id).children(LINKSELECTOR).addClass(FOCUSEDCLASS);\n that.element.attr('aria-activedescendant', id);\n }\n that._focused = candidate;\n },\n _keydown: function (e) {\n var that = this, key = e.keyCode, current = that._current();\n if (e.target != e.currentTarget) {\n return;\n }\n if (key == keys.DOWN || key == keys.RIGHT) {\n that._current(that._nextItem(current));\n e.preventDefault();\n } else if (key == keys.UP || key == keys.LEFT) {\n that._current(that._prevItem(current));\n e.preventDefault();\n } else if (key == keys.ENTER || key == keys.SPACEBAR) {\n that._click(current.children(LINKSELECTOR));\n e.preventDefault();\n } else if (key == keys.HOME) {\n that._current(that._first());\n e.preventDefault();\n } else if (key == keys.END) {\n that._current(that._last());\n e.preventDefault();\n }\n },\n _nextItem: function (item) {\n if (!item) {\n return this._first();\n }\n var group = item.children(VISIBLEGROUP), next = item.nextAll(':visible').first();\n if (group[0]) {\n next = group.children('.' + FIRST);\n }\n if (!next[0]) {\n next = item.parent(VISIBLEGROUP).parent(ITEM).next();\n }\n if (!next[0]) {\n next = this._first();\n }\n if (next.hasClass(DISABLEDCLASS)) {\n next = this._nextItem(next);\n }\n return next;\n },\n _prevItem: function (item) {\n if (!item) {\n return this._last();\n }\n var prev = item.prevAll(':visible').first(), result;\n if (!prev[0]) {\n prev = item.parent(VISIBLEGROUP).parent(ITEM);\n if (!prev[0]) {\n prev = this._last();\n }\n } else {\n result = prev;\n while (result[0]) {\n result = result.children(VISIBLEGROUP).children('.' + LAST);\n if (result[0]) {\n prev = result;\n }\n }\n }\n if (prev.hasClass(DISABLEDCLASS)) {\n prev = this._prevItem(prev);\n }\n return prev;\n },\n _insert: function (item, referenceItem, parent) {\n var that = this, items, plain = $.isPlainObject(item), isReferenceItem = referenceItem && referenceItem[0], groupData;\n if (!isReferenceItem) {\n parent = that.element;\n }\n groupData = {\n firstLevel: parent.hasClass('k-panelbar'),\n expanded: $(referenceItem).hasClass(ACTIVECLASS),\n length: parent.children().length\n };\n if (isReferenceItem && !parent.length) {\n parent = $(that.renderGroup({\n group: groupData,\n options: that.options\n })).appendTo(referenceItem);\n }\n if (plain || $.isArray(item) || item instanceof HierarchicalDataSource) {\n if (item instanceof HierarchicalDataSource) {\n item = item.data();\n }\n items = $.map(plain ? [item] : item, function (value, idx) {\n if (typeof value === 'string') {\n return $(value);\n } else {\n return $(that.renderItem({\n group: groupData,\n item: extend(value, { index: idx })\n }));\n }\n });\n if (isReferenceItem) {\n var dataItem = that.dataItem(referenceItem);\n if (dataItem) {\n dataItem.hasChildren = true;\n }\n referenceItem.attr(ARIA_EXPANDED, false);\n }\n } else {\n if (typeof item == 'string' && item.charAt(0) != '<') {\n items = that.element.find(item);\n } else {\n items = $(item);\n }\n that._updateItemsClasses(items);\n }\n if (!item.length) {\n item = [item];\n }\n that._angularCompileElements(items, item);\n return {\n items: items,\n group: parent\n };\n },\n _toggleHover: function (e) {\n var target = $(e.currentTarget);\n if (!target.parents('li.' + DISABLEDCLASS).length) {\n target.toggleClass('k-state-hover', e.type == MOUSEENTER);\n }\n },\n _updateClasses: function () {\n var that = this, panels, items;\n panels = that.element.find('li > ul').not(function () {\n return $(this).parentsUntil('.k-panelbar', 'div').length;\n }).addClass('k-group k-panel').attr('role', 'group');\n panels.parent().attr(ARIA_EXPANDED, false).not('.' + ACTIVECLASS).children('ul').attr(ARIA_HIDDEN, true).hide();\n items = that.element.add(panels).children();\n that._updateItemsClasses(items);\n that.updateArrow(items);\n updateFirstLast(items);\n },\n _updateItemsClasses: function (items) {\n var length = items.length, idx = 0;\n for (; idx < length; idx++) {\n this._updateItemClasses(items[idx], idx);\n }\n },\n _updateItemClasses: function (item, index) {\n var selected = this._selected, contentUrls = this.options.contentUrls, url = contentUrls && contentUrls[index], root = this.element[0], wrapElement, link;\n item = $(item).addClass('k-item').attr('role', 'menuitem');\n if (kendo.support.browser.msie) {\n item.css('list-style-position', 'inside').css('list-style-position', '');\n }\n item.children(IMG).addClass(IMAGE);\n link = item.children('a').addClass(LINK);\n if (link[0]) {\n link.attr('href', url);\n link.children(IMG).addClass(IMAGE);\n }\n item.filter(':not([disabled]):not([class*=k-state])').addClass('k-state-default');\n item.filter('li[disabled]').addClass('k-state-disabled').attr(ARIA_DISABLED, true).removeAttr('disabled');\n item.children('div').addClass(CONTENT).attr('role', 'region').attr(ARIA_HIDDEN, true).hide().parent().attr(ARIA_EXPANDED, false);\n link = item.children(SELECTEDSELECTOR);\n if (link[0]) {\n if (selected) {\n selected.removeAttr(ARIA_SELECTED).children(SELECTEDSELECTOR).removeClass(SELECTEDCLASS);\n }\n link.addClass(SELECTEDCLASS);\n this._selected = item.attr(ARIA_SELECTED, true);\n }\n if (!item.children(LINKSELECTOR)[0]) {\n wrapElement = '<span class=\\'' + LINK + '\\'/>';\n if (contentUrls && contentUrls[index] && item[0].parentNode == root) {\n wrapElement = '<a class=\"k-link k-header\" href=\"' + contentUrls[index] + '\"/>';\n }\n item.contents().filter(function () {\n return !this.nodeName.match(excludedNodesRegExp) && !(this.nodeType == 3 && !$.trim(this.nodeValue));\n }).wrapAll(wrapElement);\n }\n if (item.parent('.k-panelbar')[0]) {\n item.children(LINKSELECTOR).addClass('k-header');\n }\n },\n _click: function (target) {\n var that = this, element = that.element, prevent, contents, href, isAnchor;\n if (target.parents('li.' + DISABLEDCLASS).length) {\n return;\n }\n if (target.closest('.k-widget')[0] != element[0]) {\n return;\n }\n var link = target.closest(LINKSELECTOR), item = link.closest(ITEM);\n that._updateSelected(link);\n var wrapper = item.children('.k-group,.k-content');\n var dataItem = this.dataItem(item);\n if (!wrapper.length && (that.options.loadOnDemand && dataItem && dataItem.hasChildren || this._hasChildItems(item) || item.content || item.contentUrl)) {\n wrapper = that._addGroupElement(item);\n }\n contents = item.find(GROUPS).add(item.find(CONTENTS));\n href = link.attr(HREF);\n isAnchor = href && (href.charAt(href.length - 1) == '#' || href.indexOf('#' + that.element[0].id + '-') != -1);\n prevent = !!(isAnchor || contents.length);\n if (contents.data('animating')) {\n return prevent;\n }\n if (that._triggerEvent(SELECT, item)) {\n prevent = true;\n }\n if (prevent === false) {\n return;\n }\n if (that.options.expandMode == SINGLE) {\n if (that._collapseAllExpanded(item)) {\n return prevent;\n }\n }\n if (contents.length) {\n var visibility = contents.is(VISIBLE);\n if (!that._triggerEvent(!visibility ? EXPAND : COLLAPSE, item)) {\n prevent = that._toggleItem(item, visibility);\n }\n }\n return prevent;\n },\n _hasChildItems: function (item) {\n return item.items && item.items.length > 0 || item.hasChildren;\n },\n _toggleItem: function (element, isVisible, expanded) {\n var that = this, childGroup = element.find(GROUPS), link = element.find(LINKSELECTOR), url = link.attr(HREF), prevent, content, dataItem = that.dataItem(element);\n var loaded = dataItem && dataItem.loaded();\n if (dataItem && !expanded) {\n dataItem.set('expanded', !isVisible);\n prevent = dataItem.hasChildren || !!dataItem.content || !!dataItem.contentUrl;\n return prevent;\n }\n if (dataItem && (!expanded || expanded === 'true') && !loaded && !dataItem.content && !dataItem.contentUrl) {\n if (that.options.loadOnDemand) {\n this._progress(element, true);\n }\n element.children('.k-group,.k-content').remove();\n prevent = dataItem.hasChildren;\n dataItem.load();\n } else {\n if (childGroup.length) {\n this._toggleGroup(childGroup, isVisible);\n prevent = true;\n } else {\n content = element.children('.' + CONTENT);\n if (content.length) {\n prevent = true;\n if (!content.is(EMPTY) || url === undefined) {\n that._toggleGroup(content, isVisible);\n } else {\n that._ajaxRequest(element, content, isVisible);\n }\n }\n }\n }\n return prevent;\n },\n _toggleGroup: function (element, visibility) {\n var that = this, animationSettings = that.options.animation, animation = animationSettings.expand, collapse = extend({}, animationSettings.collapse), hasCollapseAnimation = collapse && 'effects' in collapse;\n if (element.is(VISIBLE) != visibility) {\n that._animating = false;\n return;\n }\n element.parent().attr(ARIA_EXPANDED, !visibility).attr(ARIA_HIDDEN, visibility).toggleClass(ACTIVECLASS, !visibility).find('> .k-link > .k-panelbar-collapse, .k-panelbar-expand').toggleClass('k-i-arrow-n', !visibility).toggleClass('k-panelbar-collapse', !visibility).toggleClass('k-i-arrow-s', visibility).toggleClass('k-panelbar-expand', visibility);\n if (visibility) {\n animation = extend(hasCollapseAnimation ? collapse : extend({ reverse: true }, animation), { hide: true });\n animation.complete = function () {\n that._animationCallback();\n };\n } else {\n animation = extend({\n complete: function (element) {\n that._triggerEvent(ACTIVATE, element.closest(ITEM));\n that._animationCallback();\n }\n }, animation);\n }\n element.kendoStop(true, true).kendoAnimate(animation);\n },\n _animationCallback: function () {\n var that = this;\n that.trigger('complete');\n that._animating = false;\n },\n _addGroupElement: function (element) {\n var group = $('<ul role=\"group\" aria-hidden=\"true\" class=\"k-group k-panel\" style=\"display:none\"></ul>');\n element.append(group);\n return group;\n },\n _collapseAllExpanded: function (item) {\n var that = this, children, stopExpand = false;\n var groups = item.find(GROUPS).add(item.find(CONTENTS));\n if (groups.is(VISIBLE)) {\n stopExpand = true;\n }\n if (!(groups.is(VISIBLE) || groups.length === 0)) {\n children = item.siblings();\n children.find(GROUPS).add(children.find(CONTENTS)).filter(function () {\n return $(this).is(VISIBLE);\n }).each(function (index, content) {\n content = $(content);\n stopExpand = that._triggerEvent(COLLAPSE, content.closest(ITEM));\n if (!stopExpand) {\n that._toggleGroup(content, true);\n }\n });\n that.one('complete', function () {\n setTimeout(function () {\n children.each(function (index, child) {\n var dataItem = that.dataItem(child);\n if (dataItem) {\n dataItem.set('expanded', false);\n }\n });\n });\n });\n }\n return stopExpand;\n },\n _ajaxRequest: function (element, contentElement, isVisible) {\n var that = this, statusIcon = element.find('.k-panelbar-collapse, .k-panelbar-expand'), link = element.find(LINKSELECTOR), loadingIconTimeout = setTimeout(function () {\n statusIcon.addClass('k-i-loading');\n }, 100), data = {}, url = link.attr(HREF);\n $.ajax({\n type: 'GET',\n cache: false,\n url: url,\n dataType: 'html',\n data: data,\n error: function (xhr, status) {\n statusIcon.removeClass('k-i-loading');\n if (that.trigger(ERROR, {\n xhr: xhr,\n status: status\n })) {\n this.complete();\n }\n },\n complete: function () {\n clearTimeout(loadingIconTimeout);\n statusIcon.removeClass('k-i-loading');\n },\n success: function (data) {\n function getElements() {\n return { elements: contentElement.get() };\n }\n try {\n that.angular('cleanup', getElements);\n contentElement.html(data);\n that.angular('compile', getElements);\n } catch (e) {\n var console = window.console;\n if (console && console.error) {\n console.error(e.name + ': ' + e.message + ' in ' + url);\n }\n this.error(this.xhr, 'error');\n }\n that._toggleGroup(contentElement, isVisible);\n that.trigger(CONTENTLOAD, {\n item: element[0],\n contentElement: contentElement[0]\n });\n }\n });\n },\n _triggerEvent: function (eventName, element) {\n var that = this;\n return that.trigger(eventName, { item: element[0] });\n },\n _updateSelected: function (link, skipChange) {\n var that = this, element = that.element, item = link.parent(ITEM), selected = that._selected, dataItem = that.dataItem(item);\n if (selected) {\n selected.removeAttr(ARIA_SELECTED);\n }\n that._selected = item.attr(ARIA_SELECTED, true);\n element.find(selectableItems).removeClass(SELECTEDCLASS);\n element.find('> .' + HIGHLIGHTCLASS + ', .k-panel > .' + HIGHLIGHTCLASS).removeClass(HIGHLIGHTCLASS);\n link.addClass(SELECTEDCLASS);\n link.parentsUntil(element, ITEM).filter(':has(.k-header)').addClass(HIGHLIGHTCLASS);\n that._current(item[0] ? item : null);\n if (dataItem) {\n dataItem.set('selected', true);\n }\n if (!skipChange) {\n that.trigger(CHANGE);\n }\n },\n _animations: function (options) {\n if (options && 'animation' in options && !options.animation) {\n options.animation = {\n expand: { effects: {} },\n collapse: {\n hide: true,\n effects: {}\n }\n };\n }\n },\n renderItem: function (options) {\n var that = this;\n options = extend({\n panelBar: that,\n group: {}\n }, options);\n var empty = that.templates.empty, item = options.item;\n return that.templates.item(extend(options, {\n itemWrapper: that.templates.itemWrapper,\n renderContent: that.renderContent,\n arrow: that._hasChildItems(item) || item.content || item.contentUrl ? that.templates.arrow : empty,\n subGroup: !options.loadOnDemand || item.expanded ? that.renderGroup : empty\n }, rendering));\n },\n renderGroup: function (options) {\n var that = this;\n var templates = that.templates || options.panelBar.templates;\n return templates.group(extend({\n renderItems: function (options) {\n var html = '', i = 0, items = options.items, len = items ? items.length : 0, group = extend({ length: len }, options.group);\n for (; i < len; i++) {\n html += options.panelBar.renderItem(extend(options, {\n group: group,\n item: extend({ index: i }, items[i])\n }));\n }\n return html;\n }\n }, options, rendering));\n },\n renderContent: function (options) {\n return options.panelBar.templates.content(extend(options, rendering));\n }\n });\n kendo.ui.plugin(PanelBar);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.responsivepanel', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'responsive-panel',\n name: 'Responsive Panel',\n category: 'web',\n description: 'The Responsive Panel widget allows a panel of content to be hidden on mobile devices, available through a toggle button.',\n depends: ['core']\n };\n (function ($, undefined) {\n var proxy = $.proxy;\n var NS = '.kendoResponsivePanel';\n var OPEN = 'open';\n var CLOSE = 'close';\n var ACTIVATE_EVENTS = 'click' + NS + ' touchstart' + NS;\n var Widget = kendo.ui.Widget;\n var ResponsivePanel = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this._guid = '_' + kendo.guid();\n this._toggleHandler = proxy(this._toggleButtonClick, this);\n this._closeHandler = proxy(this._close, this);\n $(document.documentElement).on(ACTIVATE_EVENTS, this.options.toggleButton, this._toggleHandler);\n this._registerBreakpoint();\n this.element.addClass('k-rpanel k-rpanel-' + this.options.orientation + ' ' + this._guid);\n this._resizeHandler = proxy(this.resize, this, true);\n $(window).on('resize' + NS, this._resizeHandler);\n },\n _mediaQuery: '@media (max-width: #= breakpoint-1 #px) {' + '.#= guid #.k-rpanel-animate.k-rpanel-left,' + '.#= guid #.k-rpanel-animate.k-rpanel-right {' + '-webkit-transition: -webkit-transform .2s ease-out;' + '-ms-transition: -ms-transform .2s ease-out;' + 'transition: transform .2s ease-out;' + '} ' + '.#= guid #.k-rpanel-top {' + 'overflow: hidden;' + '}' + '.#= guid #.k-rpanel-animate.k-rpanel-top {' + '-webkit-transition: max-height .2s linear;' + '-ms-transition: max-height .2s linear;' + 'transition: max-height .2s linear;' + '}' + '} ' + '@media (min-width: #= breakpoint #px) {' + '#= toggleButton # { display: none; } ' + '.#= guid #.k-rpanel-left { float: left; } ' + '.#= guid #.k-rpanel-right { float: right; } ' + '.#= guid #.k-rpanel-left, .#= guid #.k-rpanel-right {' + 'position: relative;' + '-webkit-transform: translateX(0);' + '-ms-transform: translateX(0);' + 'transform: translateX(0);' + '-webkit-transform: translateX(0) translateZ(0);' + '-ms-transform: translateX(0) translateZ(0);' + 'transform: translateX(0) translateZ(0);' + '} ' + '.k-ie9 .#= guid #.k-rpanel-left { left: 0; } ' + '.#= guid #.k-rpanel-top { max-height: none; }' + '}',\n _registerBreakpoint: function () {\n var options = this.options;\n this._registerStyle(kendo.template(this._mediaQuery)({\n breakpoint: options.breakpoint,\n toggleButton: options.toggleButton,\n guid: this._guid\n }));\n },\n _registerStyle: function (cssText) {\n var head = $('head,body')[0];\n var style = document.createElement('style');\n head.appendChild(style);\n if (style.styleSheet) {\n style.styleSheet.cssText = cssText;\n } else {\n style.appendChild(document.createTextNode(cssText));\n }\n },\n options: {\n name: 'ResponsivePanel',\n orientation: 'left',\n toggleButton: '.k-rpanel-toggle',\n breakpoint: 640,\n autoClose: true\n },\n events: [\n OPEN,\n CLOSE\n ],\n _resize: function () {\n this.element.removeClass('k-rpanel-animate k-rpanel-expanded');\n $(document.documentElement).off(ACTIVATE_EVENTS, this._closeHandler);\n },\n _toggleButtonClick: function (e) {\n e.preventDefault();\n if (this.element.hasClass('k-rpanel-expanded')) {\n this.close();\n } else {\n this.open();\n }\n },\n open: function () {\n if (!this.trigger(OPEN)) {\n this.element.addClass('k-rpanel-animate k-rpanel-expanded');\n if (this.options.autoClose) {\n $(document.documentElement).on(ACTIVATE_EVENTS, this._closeHandler);\n }\n }\n },\n close: function () {\n if (!this.trigger(CLOSE)) {\n this.element.addClass('k-rpanel-animate').removeClass('k-rpanel-expanded');\n $(document.documentElement).off(ACTIVATE_EVENTS, this._closeHandler);\n }\n },\n _close: function (e) {\n var prevented = e.isDefaultPrevented();\n var container = $(e.target).closest(this.options.toggleButton + ',.k-rpanel');\n if (!container.length && !prevented) {\n this.close();\n }\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n $(window).off('resize' + NS, this._resizeHandler);\n $(document.documentElement).off(ACTIVATE_EVENTS, this._closeHandler);\n }\n });\n kendo.ui.plugin(ResponsivePanel);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.timepicker', ['kendo.popup'], f);\n}(function () {\n var __meta__ = {\n id: 'timepicker',\n name: 'TimePicker',\n category: 'web',\n description: 'The TimePicker widget allows the end user to select a value from a list of predefined values or to type a new value.',\n depends: ['popup']\n };\n (function ($, undefined) {\n var kendo = window.kendo, keys = kendo.keys, parse = kendo.parseDate, activeElement = kendo._activeElement, extractFormat = kendo._extractFormat, support = kendo.support, browser = support.browser, ui = kendo.ui, Widget = ui.Widget, OPEN = 'open', CLOSE = 'close', CHANGE = 'change', ns = '.kendoTimePicker', CLICK = 'click' + ns, DEFAULT = 'k-state-default', DISABLED = 'disabled', READONLY = 'readonly', LI = 'li', SPAN = '<span/>', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', HOVEREVENTS = 'mouseenter' + ns + ' mouseleave' + ns, MOUSEDOWN = 'mousedown' + ns, MS_PER_MINUTE = 60000, MS_PER_DAY = 86400000, SELECTED = 'k-state-selected', STATEDISABLED = 'k-state-disabled', ARIA_SELECTED = 'aria-selected', ARIA_EXPANDED = 'aria-expanded', ARIA_HIDDEN = 'aria-hidden', ARIA_DISABLED = 'aria-disabled', ARIA_ACTIVEDESCENDANT = 'aria-activedescendant', ID = 'id', isArray = $.isArray, extend = $.extend, proxy = $.proxy, DATE = Date, TODAY = new DATE();\n TODAY = new DATE(TODAY.getFullYear(), TODAY.getMonth(), TODAY.getDate(), 0, 0, 0);\n var TimeView = function (options) {\n var that = this, id = options.id;\n that.options = options;\n that._dates = [];\n that.ul = $('<ul tabindex=\"-1\" role=\"listbox\" aria-hidden=\"true\" unselectable=\"on\" class=\"k-list k-reset\"/>').css({ overflow: support.kineticScrollNeeded ? '' : 'auto' }).on(CLICK, LI, proxy(that._click, that)).on('mouseenter' + ns, LI, function () {\n $(this).addClass(HOVER);\n }).on('mouseleave' + ns, LI, function () {\n $(this).removeClass(HOVER);\n });\n that.list = $('<div class=\\'k-list-container k-list-scroller\\' unselectable=\\'on\\'/>').append(that.ul).on(MOUSEDOWN, preventDefault);\n if (id) {\n that._timeViewID = id + '_timeview';\n that._optionID = id + '_option_selected';\n that.ul.attr(ID, that._timeViewID);\n }\n that._popup();\n that._heightHandler = proxy(that._height, that);\n that.template = kendo.template('<li tabindex=\"-1\" role=\"option\" class=\"k-item\" unselectable=\"on\">#=data#</li>', { useWithBlock: false });\n };\n TimeView.prototype = {\n current: function (candidate) {\n var that = this, active = that.options.active;\n if (candidate !== undefined) {\n if (that._current) {\n that._current.removeClass(SELECTED).removeAttr(ARIA_SELECTED).removeAttr(ID);\n }\n if (candidate) {\n candidate = $(candidate).addClass(SELECTED).attr(ID, that._optionID).attr(ARIA_SELECTED, true);\n that.scroll(candidate[0]);\n }\n that._current = candidate;\n if (active) {\n active(candidate);\n }\n } else {\n return that._current;\n }\n },\n close: function () {\n this.popup.close();\n },\n destroy: function () {\n var that = this;\n that.ul.off(ns);\n that.list.off(ns);\n that.popup.destroy();\n },\n open: function () {\n var that = this;\n if (!that.ul[0].firstChild) {\n that.bind();\n }\n that.popup.open();\n if (that._current) {\n that.scroll(that._current[0]);\n }\n },\n dataBind: function (dates) {\n var that = this, options = that.options, format = options.format, toString = kendo.toString, template = that.template, length = dates.length, idx = 0, date, html = '';\n for (; idx < length; idx++) {\n date = dates[idx];\n if (isInRange(date, options.min, options.max)) {\n html += template(toString(date, format, options.culture));\n }\n }\n that._html(html);\n },\n refresh: function () {\n var that = this, options = that.options, format = options.format, offset = dst(), ignoreDST = offset < 0, min = options.min, max = options.max, msMin = getMilliseconds(min), msMax = getMilliseconds(max), msInterval = options.interval * MS_PER_MINUTE, toString = kendo.toString, template = that.template, start = new DATE(+min), startDay = start.getDate(), msStart, lastIdx, idx = 0, length, html = '';\n if (ignoreDST) {\n length = (MS_PER_DAY + offset * MS_PER_MINUTE) / msInterval;\n } else {\n length = MS_PER_DAY / msInterval;\n }\n if (msMin != msMax) {\n if (msMin > msMax) {\n msMax += MS_PER_DAY;\n }\n length = (msMax - msMin) / msInterval + 1;\n }\n lastIdx = parseInt(length, 10);\n for (; idx < length; idx++) {\n if (idx) {\n setTime(start, msInterval, ignoreDST);\n }\n if (msMax && lastIdx == idx) {\n msStart = getMilliseconds(start);\n if (startDay < start.getDate()) {\n msStart += MS_PER_DAY;\n }\n if (msStart > msMax) {\n start = new DATE(+max);\n }\n }\n that._dates.push(getMilliseconds(start));\n html += template(toString(start, format, options.culture));\n }\n that._html(html);\n },\n bind: function () {\n var that = this, dates = that.options.dates;\n if (dates && dates[0]) {\n that.dataBind(dates);\n } else {\n that.refresh();\n }\n },\n _html: function (html) {\n var that = this;\n that.ul[0].innerHTML = html;\n that.popup.unbind(OPEN, that._heightHandler);\n that.popup.one(OPEN, that._heightHandler);\n that.current(null);\n that.select(that._value);\n },\n scroll: function (item) {\n if (!item) {\n return;\n }\n var content = this.list[0], itemOffsetTop = item.offsetTop, itemOffsetHeight = item.offsetHeight, contentScrollTop = content.scrollTop, contentOffsetHeight = content.clientHeight, bottomDistance = itemOffsetTop + itemOffsetHeight;\n if (contentScrollTop > itemOffsetTop) {\n contentScrollTop = itemOffsetTop;\n } else if (bottomDistance > contentScrollTop + contentOffsetHeight) {\n contentScrollTop = bottomDistance - contentOffsetHeight;\n }\n content.scrollTop = contentScrollTop;\n },\n select: function (li) {\n var that = this, options = that.options, current = that._current, selection;\n if (li instanceof Date) {\n li = kendo.toString(li, options.format, options.culture);\n }\n if (typeof li === 'string') {\n if (!current || current.text() !== li) {\n li = $.grep(that.ul[0].childNodes, function (node) {\n return (node.textContent || node.innerText) == li;\n });\n li = li[0] ? li : null;\n } else {\n li = current;\n }\n }\n selection = that._distinctSelection(li);\n that.current(selection);\n },\n _distinctSelection: function (selection) {\n var that = this, currentValue, selectionIndex;\n if (selection && selection.length > 1) {\n currentValue = getMilliseconds(that._value);\n selectionIndex = $.inArray(currentValue, that._dates);\n selection = that.ul.children()[selectionIndex];\n }\n return selection;\n },\n setOptions: function (options) {\n var old = this.options;\n options.min = parse(options.min);\n options.max = parse(options.max);\n this.options = extend(old, options, {\n active: old.active,\n change: old.change,\n close: old.close,\n open: old.open\n });\n this.bind();\n },\n toggle: function () {\n var that = this;\n if (that.popup.visible()) {\n that.close();\n } else {\n that.open();\n }\n },\n value: function (value) {\n var that = this;\n that._value = value;\n if (that.ul[0].firstChild) {\n that.select(value);\n }\n },\n _click: function (e) {\n var that = this, li = $(e.currentTarget), date = li.text(), dates = that.options.dates;\n if (dates && dates.length > 0) {\n date = dates[li.index()];\n }\n if (!e.isDefaultPrevented()) {\n that.select(li);\n that.options.change(date, true);\n that.close();\n }\n },\n _height: function () {\n var that = this;\n var list = that.list;\n var parent = list.parent('.k-animation-container');\n var height = that.options.height;\n if (that.ul[0].children.length) {\n list.add(parent).show().height(that.ul[0].scrollHeight > height ? height : 'auto').hide();\n }\n },\n _parse: function (value) {\n var that = this, options = that.options, current = that._value || TODAY;\n if (value instanceof DATE) {\n return value;\n }\n value = parse(value, options.parseFormats, options.culture);\n if (value) {\n value = new DATE(current.getFullYear(), current.getMonth(), current.getDate(), value.getHours(), value.getMinutes(), value.getSeconds(), value.getMilliseconds());\n }\n return value;\n },\n _adjustListWidth: function () {\n var list = this.list, width = list[0].style.width, wrapper = this.options.anchor, computedStyle, computedWidth, outerWidth = kendo._outerWidth;\n if (!list.data('width') && width) {\n return;\n }\n computedStyle = window.getComputedStyle ? window.getComputedStyle(wrapper[0], null) : 0;\n computedWidth = computedStyle ? parseFloat(computedStyle.width) : outerWidth(wrapper);\n if (computedStyle && (browser.mozilla || browser.msie)) {\n computedWidth += parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight) + parseFloat(computedStyle.borderLeftWidth) + parseFloat(computedStyle.borderRightWidth);\n }\n width = computedWidth - (outerWidth(list) - list.width());\n list.css({\n fontFamily: wrapper.css('font-family'),\n width: width\n }).data('width', width);\n },\n _popup: function () {\n var that = this, list = that.list, options = that.options, anchor = options.anchor;\n that.popup = new ui.Popup(list, extend(options.popup, {\n anchor: anchor,\n open: options.open,\n close: options.close,\n animation: options.animation,\n isRtl: support.isRtl(options.anchor)\n }));\n },\n move: function (e) {\n var that = this, key = e.keyCode, ul = that.ul[0], current = that._current, down = key === keys.DOWN;\n if (key === keys.UP || down) {\n if (e.altKey) {\n that.toggle(down);\n return;\n } else if (down) {\n current = current ? current[0].nextSibling : ul.firstChild;\n } else {\n current = current ? current[0].previousSibling : ul.lastChild;\n }\n if (current) {\n that.select(current);\n }\n that.options.change(that._current.text());\n e.preventDefault();\n } else if (key === keys.ENTER || key === keys.TAB || key === keys.ESC) {\n e.preventDefault();\n if (current) {\n that.options.change(current.text(), true);\n }\n that.close();\n }\n }\n };\n function setTime(date, time, ignoreDST) {\n var offset = date.getTimezoneOffset(), offsetDiff;\n date.setTime(date.getTime() + time);\n if (!ignoreDST) {\n offsetDiff = date.getTimezoneOffset() - offset;\n date.setTime(date.getTime() + offsetDiff * MS_PER_MINUTE);\n }\n }\n function dst() {\n var today = new DATE(), midnight = new DATE(today.getFullYear(), today.getMonth(), today.getDate(), 0, 0, 0), noon = new DATE(today.getFullYear(), today.getMonth(), today.getDate(), 12, 0, 0);\n return -1 * (midnight.getTimezoneOffset() - noon.getTimezoneOffset());\n }\n function getMilliseconds(date) {\n return date.getHours() * 60 * MS_PER_MINUTE + date.getMinutes() * MS_PER_MINUTE + date.getSeconds() * 1000 + date.getMilliseconds();\n }\n function isInRange(value, min, max) {\n var msMin = getMilliseconds(min), msMax = getMilliseconds(max), msValue;\n if (!value || msMin == msMax) {\n return true;\n }\n msValue = getMilliseconds(value);\n if (msMin > msValue) {\n msValue += MS_PER_DAY;\n }\n if (msMax < msMin) {\n msMax += MS_PER_DAY;\n }\n return msValue >= msMin && msValue <= msMax;\n }\n TimeView.getMilliseconds = getMilliseconds;\n kendo.TimeView = TimeView;\n var TimePicker = Widget.extend({\n init: function (element, options) {\n var that = this, ul, timeView, disabled;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n options.min = parse(element.attr('min')) || parse(options.min);\n options.max = parse(element.attr('max')) || parse(options.max);\n normalize(options);\n that._initialOptions = extend({}, options);\n that._wrapper();\n that.timeView = timeView = new TimeView(extend({}, options, {\n id: element.attr(ID),\n anchor: that.wrapper,\n format: options.format,\n change: function (value, trigger) {\n if (trigger) {\n that._change(value);\n } else {\n element.val(value);\n }\n },\n open: function (e) {\n that.timeView._adjustListWidth();\n if (that.trigger(OPEN)) {\n e.preventDefault();\n } else {\n element.attr(ARIA_EXPANDED, true);\n ul.attr(ARIA_HIDDEN, false);\n }\n },\n close: function (e) {\n if (that.trigger(CLOSE)) {\n e.preventDefault();\n } else {\n element.attr(ARIA_EXPANDED, false);\n ul.attr(ARIA_HIDDEN, true);\n }\n },\n active: function (current) {\n element.removeAttr(ARIA_ACTIVEDESCENDANT);\n if (current) {\n element.attr(ARIA_ACTIVEDESCENDANT, timeView._optionID);\n }\n }\n }));\n ul = timeView.ul;\n that._icon();\n that._reset();\n try {\n element[0].setAttribute('type', 'text');\n } catch (e) {\n element[0].type = 'text';\n }\n element.addClass('k-input').attr({\n 'role': 'combobox',\n 'aria-expanded': false,\n 'aria-owns': timeView._timeViewID\n });\n disabled = element.is('[disabled]') || $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n } else {\n that.readonly(element.is('[readonly]'));\n }\n that._old = that._update(options.value || that.element.val());\n that._oldText = element.val();\n kendo.notify(that);\n },\n options: {\n name: 'TimePicker',\n min: TODAY,\n max: TODAY,\n format: '',\n dates: [],\n parseFormats: [],\n value: null,\n interval: 30,\n height: 200,\n animation: {}\n },\n events: [\n OPEN,\n CLOSE,\n CHANGE\n ],\n setOptions: function (options) {\n var that = this;\n var value = that._value;\n Widget.fn.setOptions.call(that, options);\n options = that.options;\n normalize(options);\n that.timeView.setOptions(options);\n if (value) {\n that.element.val(kendo.toString(value, options.format, options.culture));\n }\n },\n dataBind: function (dates) {\n if (isArray(dates)) {\n this.timeView.dataBind(dates);\n }\n },\n _editable: function (options) {\n var that = this, disable = options.disable, readonly = options.readonly, arrow = that._arrow.off(ns), element = that.element.off(ns), wrapper = that._inputWrapper.off(ns);\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n element.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false).on('keydown' + ns, proxy(that._keydown, that)).on('focusout' + ns, proxy(that._blur, that)).on('focus' + ns, function () {\n that._inputWrapper.addClass(FOCUSED);\n });\n arrow.on(CLICK, proxy(that._click, that)).on(MOUSEDOWN, preventDefault);\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n element.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable);\n }\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.timeView.destroy();\n that.element.off(ns);\n that._arrow.off(ns);\n that._inputWrapper.off(ns);\n if (that._form) {\n that._form.off('reset', that._resetHandler);\n }\n },\n close: function () {\n this.timeView.close();\n },\n open: function () {\n this.timeView.open();\n },\n min: function (value) {\n return this._option('min', value);\n },\n max: function (value) {\n return this._option('max', value);\n },\n value: function (value) {\n var that = this;\n if (value === undefined) {\n return that._value;\n }\n that._old = that._update(value);\n if (that._old === null) {\n that.element.val('');\n }\n that._oldText = that.element.val();\n },\n _blur: function () {\n var that = this, value = that.element.val();\n that.close();\n if (value !== that._oldText) {\n that._change(value);\n }\n that._inputWrapper.removeClass(FOCUSED);\n },\n _click: function () {\n var that = this, element = that.element;\n that.timeView.toggle();\n if (!support.touch && element[0] !== activeElement()) {\n element.focus();\n }\n },\n _change: function (value) {\n var that = this;\n value = that._update(value);\n if (+that._old != +value) {\n that._old = value;\n that._oldText = that.element.val();\n if (!that._typing) {\n that.element.trigger(CHANGE);\n }\n that.trigger(CHANGE);\n }\n that._typing = false;\n },\n _icon: function () {\n var that = this, element = that.element, arrow;\n arrow = element.next('span.k-select');\n if (!arrow[0]) {\n arrow = $('<span unselectable=\"on\" class=\"k-select\" aria-label=\"select\"><span class=\"k-icon k-i-clock\"></span></span>').insertAfter(element);\n }\n that._arrow = arrow.attr({\n 'role': 'button',\n 'aria-controls': that.timeView._timeViewID\n });\n },\n _keydown: function (e) {\n var that = this, key = e.keyCode, timeView = that.timeView, value = that.element.val();\n if (timeView.popup.visible() || e.altKey) {\n timeView.move(e);\n } else if (key === keys.ENTER && value !== that._oldText) {\n that._change(value);\n } else {\n that._typing = true;\n }\n },\n _option: function (option, value) {\n var that = this, options = that.options;\n if (value === undefined) {\n return options[option];\n }\n value = that.timeView._parse(value);\n if (!value) {\n return;\n }\n value = new DATE(+value);\n options[option] = value;\n that.timeView.options[option] = value;\n that.timeView.bind();\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _update: function (value) {\n var that = this, options = that.options, timeView = that.timeView, date = timeView._parse(value);\n if (!isInRange(date, options.min, options.max)) {\n date = null;\n }\n that._value = date;\n that.element.val(kendo.toString(date || value, options.format, options.culture));\n timeView.value(date);\n return date;\n },\n _wrapper: function () {\n var that = this, element = that.element, wrapper;\n wrapper = element.parents('.k-timepicker');\n if (!wrapper[0]) {\n wrapper = element.wrap(SPAN).parent().addClass('k-picker-wrap k-state-default');\n wrapper = wrapper.wrap(SPAN).parent();\n }\n wrapper[0].style.cssText = element[0].style.cssText;\n that.wrapper = wrapper.addClass('k-widget k-timepicker k-header').addClass(element[0].className);\n element.css({\n width: '100%',\n height: element[0].style.height\n });\n that._inputWrapper = $(wrapper[0].firstChild);\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n that.value(element[0].defaultValue);\n that.max(that._initialOptions.max);\n that.min(that._initialOptions.min);\n };\n that._form = form.on('reset', that._resetHandler);\n }\n }\n });\n function normalize(options) {\n var parseFormats = options.parseFormats;\n options.format = extractFormat(options.format || kendo.getCulture(options.culture).calendars.standard.patterns.t);\n parseFormats = isArray(parseFormats) ? parseFormats : [parseFormats];\n parseFormats.splice(0, 0, options.format);\n options.parseFormats = parseFormats;\n }\n function preventDefault(e) {\n e.preventDefault();\n }\n ui.plugin(TimePicker);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.datetimepicker', [\n 'kendo.datepicker',\n 'kendo.timepicker'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'datetimepicker',\n name: 'DateTimePicker',\n category: 'web',\n description: 'The DateTimePicker allows the end user to select a value from a calendar or a time drop-down list.',\n depends: [\n 'datepicker',\n 'timepicker'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, TimeView = kendo.TimeView, parse = kendo.parseDate, activeElement = kendo._activeElement, extractFormat = kendo._extractFormat, calendar = kendo.calendar, isInRange = calendar.isInRange, restrictValue = calendar.restrictValue, isEqualDatePart = calendar.isEqualDatePart, getMilliseconds = TimeView.getMilliseconds, ui = kendo.ui, Widget = ui.Widget, OPEN = 'open', CLOSE = 'close', CHANGE = 'change', ns = '.kendoDateTimePicker', CLICK = 'click' + ns, DISABLED = 'disabled', READONLY = 'readonly', DEFAULT = 'k-state-default', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', STATEDISABLED = 'k-state-disabled', HOVEREVENTS = 'mouseenter' + ns + ' mouseleave' + ns, MOUSEDOWN = 'mousedown' + ns, MONTH = 'month', SPAN = '<span/>', ARIA_ACTIVEDESCENDANT = 'aria-activedescendant', ARIA_EXPANDED = 'aria-expanded', ARIA_HIDDEN = 'aria-hidden', ARIA_OWNS = 'aria-owns', ARIA_DISABLED = 'aria-disabled', DATE = Date, MIN = new DATE(1800, 0, 1), MAX = new DATE(2099, 11, 31), dateViewParams = { view: 'date' }, timeViewParams = { view: 'time' }, extend = $.extend;\n var DateTimePicker = Widget.extend({\n init: function (element, options) {\n var that = this, disabled;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n options.disableDates = kendo.calendar.disabled(options.disableDates);\n options.min = parse(element.attr('min')) || parse(options.min);\n options.max = parse(element.attr('max')) || parse(options.max);\n normalize(options);\n that._initialOptions = extend({}, options);\n that._wrapper();\n that._views();\n that._icons();\n that._reset();\n that._template();\n try {\n element[0].setAttribute('type', 'text');\n } catch (e) {\n element[0].type = 'text';\n }\n element.addClass('k-input').attr({\n 'role': 'combobox',\n 'aria-expanded': false\n });\n that._midnight = that._calculateMidnight(options.min, options.max);\n disabled = element.is('[disabled]') || $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n } else {\n that.readonly(element.is('[readonly]'));\n }\n that._old = that._update(options.value || that.element.val());\n that._oldText = element.val();\n kendo.notify(that);\n },\n options: {\n name: 'DateTimePicker',\n value: null,\n format: '',\n timeFormat: '',\n culture: '',\n parseFormats: [],\n dates: [],\n min: new DATE(MIN),\n max: new DATE(MAX),\n interval: 30,\n height: 200,\n footer: '',\n start: MONTH,\n depth: MONTH,\n animation: {},\n month: {},\n ARIATemplate: 'Current focused date is #=kendo.toString(data.current, \"d\")#',\n dateButtonText: 'Open the date view',\n timeButtonText: 'Open the time view'\n },\n events: [\n OPEN,\n CLOSE,\n CHANGE\n ],\n setOptions: function (options) {\n var that = this, value = that._value, min, max, currentValue;\n Widget.fn.setOptions.call(that, options);\n options = that.options;\n options.min = min = parse(options.min);\n options.max = max = parse(options.max);\n normalize(options);\n that._midnight = that._calculateMidnight(options.min, options.max);\n currentValue = options.value || that._value || that.dateView._current;\n if (min && !isEqualDatePart(min, currentValue)) {\n min = new DATE(MIN);\n }\n if (max && !isEqualDatePart(max, currentValue)) {\n max = new DATE(MAX);\n }\n that.dateView.setOptions(options);\n that.timeView.setOptions(extend({}, options, {\n format: options.timeFormat,\n min: min,\n max: max\n }));\n if (value) {\n that.element.val(kendo.toString(value, options.format, options.culture));\n that._updateARIA(value);\n }\n },\n _editable: function (options) {\n var that = this, element = that.element.off(ns), dateIcon = that._dateIcon.off(ns), timeIcon = that._timeIcon.off(ns), wrapper = that._inputWrapper.off(ns), readonly = options.readonly, disable = options.disable;\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n element.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false).on('keydown' + ns, $.proxy(that._keydown, that)).on('focus' + ns, function () {\n that._inputWrapper.addClass(FOCUSED);\n }).on('focusout' + ns, function () {\n that._inputWrapper.removeClass(FOCUSED);\n if (element.val() !== that._oldText) {\n that._change(element.val());\n }\n that.close('date');\n that.close('time');\n });\n dateIcon.on(MOUSEDOWN, preventDefault).on(CLICK, function () {\n that.toggle('date');\n if (!kendo.support.touch && element[0] !== activeElement()) {\n element.focus();\n }\n });\n timeIcon.on(MOUSEDOWN, preventDefault).on(CLICK, function () {\n that.toggle('time');\n if (!kendo.support.touch && element[0] !== activeElement()) {\n element.focus();\n }\n });\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n element.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable);\n }\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.dateView.destroy();\n that.timeView.destroy();\n that.element.off(ns);\n that._dateIcon.off(ns);\n that._timeIcon.off(ns);\n that._inputWrapper.off(ns);\n if (that._form) {\n that._form.off('reset', that._resetHandler);\n }\n },\n close: function (view) {\n if (view !== 'time') {\n view = 'date';\n }\n this[view + 'View'].close();\n },\n open: function (view) {\n if (view !== 'time') {\n view = 'date';\n }\n this[view + 'View'].open();\n },\n min: function (value) {\n return this._option('min', value);\n },\n max: function (value) {\n return this._option('max', value);\n },\n toggle: function (view) {\n var secondView = 'timeView';\n if (view !== 'time') {\n view = 'date';\n } else {\n secondView = 'dateView';\n }\n this[view + 'View'].toggle();\n this[secondView].close();\n },\n value: function (value) {\n var that = this;\n if (value === undefined) {\n return that._value;\n }\n that._old = that._update(value);\n if (that._old === null) {\n that.element.val('');\n }\n that._oldText = that.element.val();\n },\n _change: function (value) {\n var that = this, oldValue = that.element.val(), dateChanged;\n value = that._update(value);\n dateChanged = +that._old != +value;\n var valueUpdated = dateChanged && !that._typing;\n var textFormatted = oldValue !== that.element.val();\n if (valueUpdated || textFormatted) {\n that.element.trigger(CHANGE);\n }\n if (dateChanged) {\n that._old = value;\n that._oldText = that.element.val();\n that.trigger(CHANGE);\n }\n that._typing = false;\n },\n _option: function (option, value) {\n var that = this;\n var options = that.options;\n var timeView = that.timeView;\n var timeViewOptions = timeView.options;\n var current = that._value || that._old;\n var minDateEqual;\n var maxDateEqual;\n if (value === undefined) {\n return options[option];\n }\n value = parse(value, options.parseFormats, options.culture);\n if (!value) {\n return;\n }\n if (options.min.getTime() === options.max.getTime()) {\n timeViewOptions.dates = [];\n }\n options[option] = new DATE(value.getTime());\n that.dateView[option](value);\n that._midnight = that._calculateMidnight(options.min, options.max);\n if (current) {\n minDateEqual = isEqualDatePart(options.min, current);\n maxDateEqual = isEqualDatePart(options.max, current);\n }\n if (minDateEqual || maxDateEqual) {\n timeViewOptions[option] = value;\n if (minDateEqual && !maxDateEqual) {\n timeViewOptions.max = lastTimeOption(options.interval);\n }\n if (maxDateEqual) {\n if (that._midnight) {\n timeView.dataBind([MAX]);\n return;\n } else if (!minDateEqual) {\n timeViewOptions.min = MIN;\n }\n }\n } else {\n timeViewOptions.max = MAX;\n timeViewOptions.min = MIN;\n }\n timeView.bind();\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _update: function (value) {\n var that = this, options = that.options, min = options.min, max = options.max, dates = options.dates, timeView = that.timeView, current = that._value, date = parse(value, options.parseFormats, options.culture), isSameType = date === null && current === null || date instanceof Date && current instanceof Date, rebind, timeViewOptions, old, skip, formattedValue;\n if (options.disableDates && options.disableDates(date)) {\n date = null;\n if (!that._old && !that.element.val()) {\n value = null;\n }\n }\n if (+date === +current && isSameType) {\n formattedValue = kendo.toString(date, options.format, options.culture);\n if (formattedValue !== value) {\n that.element.val(date === null ? value : formattedValue);\n if (value instanceof String) {\n that.element.trigger(CHANGE);\n }\n }\n return date;\n }\n if (date !== null && isEqualDatePart(date, min)) {\n date = restrictValue(date, min, max);\n } else if (!isInRange(date, min, max)) {\n date = null;\n }\n that._value = date;\n timeView.value(date);\n that.dateView.value(date);\n if (date) {\n old = that._old;\n timeViewOptions = timeView.options;\n if (dates[0]) {\n dates = $.grep(dates, function (d) {\n return isEqualDatePart(date, d);\n });\n if (dates[0]) {\n timeView.dataBind(dates);\n skip = true;\n }\n }\n if (!skip) {\n if (isEqualDatePart(date, min)) {\n timeViewOptions.min = min;\n timeViewOptions.max = lastTimeOption(options.interval);\n rebind = true;\n }\n if (isEqualDatePart(date, max)) {\n if (that._midnight) {\n timeView.dataBind([MAX]);\n skip = true;\n } else {\n timeViewOptions.max = max;\n if (!rebind) {\n timeViewOptions.min = MIN;\n }\n rebind = true;\n }\n }\n }\n if (!skip && (!old && rebind || old && !isEqualDatePart(old, date))) {\n if (!rebind) {\n timeViewOptions.max = MAX;\n timeViewOptions.min = MIN;\n }\n timeView.bind();\n }\n }\n that.element.val(kendo.toString(date || value, options.format, options.culture));\n that._updateARIA(date);\n return date;\n },\n _keydown: function (e) {\n var that = this, dateView = that.dateView, timeView = that.timeView, value = that.element.val(), isDateViewVisible = dateView.popup.visible();\n if (e.altKey && e.keyCode === kendo.keys.DOWN) {\n that.toggle(isDateViewVisible ? 'time' : 'date');\n } else if (isDateViewVisible) {\n dateView.move(e);\n that._updateARIA(dateView._current);\n } else if (timeView.popup.visible()) {\n timeView.move(e);\n } else if (e.keyCode === kendo.keys.ENTER && value !== that._oldText) {\n that._change(value);\n } else {\n that._typing = true;\n }\n },\n _views: function () {\n var that = this, element = that.element, options = that.options, id = element.attr('id'), dateView, timeView, div, ul, msMin, date;\n that.dateView = dateView = new kendo.DateView(extend({}, options, {\n id: id,\n anchor: that.wrapper,\n change: function () {\n var value = dateView.calendar.value(), msValue = +value, msMin = +options.min, msMax = +options.max, current, adjustedDate;\n if (msValue === msMin || msValue === msMax) {\n current = msValue === msMin ? msMin : msMax;\n current = new DATE(that._value || current);\n current.setFullYear(value.getFullYear(), value.getMonth(), value.getDate());\n if (isInRange(current, msMin, msMax)) {\n value = current;\n }\n }\n if (that._value) {\n adjustedDate = kendo.date.setHours(new Date(value), that._value);\n if (isInRange(adjustedDate, msMin, msMax)) {\n value = adjustedDate;\n }\n }\n that._change(value);\n that.close('date');\n },\n close: function (e) {\n if (that.trigger(CLOSE, dateViewParams)) {\n e.preventDefault();\n } else {\n element.attr(ARIA_EXPANDED, false);\n div.attr(ARIA_HIDDEN, true);\n if (!timeView.popup.visible()) {\n element.removeAttr(ARIA_OWNS);\n }\n }\n },\n open: function (e) {\n if (that.trigger(OPEN, dateViewParams)) {\n e.preventDefault();\n } else {\n if (element.val() !== that._oldText) {\n date = parse(element.val(), options.parseFormats, options.culture);\n that.dateView[date ? 'current' : 'value'](date);\n }\n div.attr(ARIA_HIDDEN, false);\n element.attr(ARIA_EXPANDED, true).attr(ARIA_OWNS, dateView._dateViewID);\n that._updateARIA(date);\n }\n }\n }));\n div = dateView.div;\n msMin = options.min.getTime();\n that.timeView = timeView = new TimeView({\n id: id,\n value: options.value,\n anchor: that.wrapper,\n animation: options.animation,\n format: options.timeFormat,\n culture: options.culture,\n height: options.height,\n interval: options.interval,\n min: new DATE(MIN),\n max: new DATE(MAX),\n dates: msMin === options.max.getTime() ? [new Date(msMin)] : [],\n parseFormats: options.parseFormats,\n change: function (value, trigger) {\n value = timeView._parse(value);\n if (value < options.min) {\n value = new DATE(+options.min);\n timeView.options.min = value;\n } else if (value > options.max) {\n value = new DATE(+options.max);\n timeView.options.max = value;\n }\n if (trigger) {\n that._timeSelected = true;\n that._change(value);\n } else {\n element.val(kendo.toString(value, options.format, options.culture));\n dateView.value(value);\n that._updateARIA(value);\n }\n },\n close: function (e) {\n if (that.trigger(CLOSE, timeViewParams)) {\n e.preventDefault();\n } else {\n ul.attr(ARIA_HIDDEN, true);\n element.attr(ARIA_EXPANDED, false);\n if (!dateView.popup.visible()) {\n element.removeAttr(ARIA_OWNS);\n }\n }\n },\n open: function (e) {\n timeView._adjustListWidth();\n if (that.trigger(OPEN, timeViewParams)) {\n e.preventDefault();\n } else {\n if (element.val() !== that._oldText) {\n date = parse(element.val(), options.parseFormats, options.culture);\n that.timeView.value(date);\n }\n ul.attr(ARIA_HIDDEN, false);\n element.attr(ARIA_EXPANDED, true).attr(ARIA_OWNS, timeView._timeViewID);\n timeView.options.active(timeView.current());\n }\n },\n active: function (current) {\n element.removeAttr(ARIA_ACTIVEDESCENDANT);\n if (current) {\n element.attr(ARIA_ACTIVEDESCENDANT, timeView._optionID);\n }\n }\n });\n ul = timeView.ul;\n },\n _icons: function () {\n var that = this;\n var element = that.element;\n var options = that.options;\n var icons;\n icons = element.next('span.k-select');\n if (!icons[0]) {\n icons = $('<span unselectable=\"on\" class=\"k-select\">' + '<span class=\"k-link k-link-date\" aria-label=\"' + options.dateButtonText + '\"><span unselectable=\"on\" class=\"k-icon k-i-calendar\"></span></span>' + '<span class=\"k-link k-link-time\" aria-label=\"' + options.timeButtonText + '\"><span unselectable=\"on\" class=\"k-icon k-i-clock\"></span></span>' + '</span>').insertAfter(element);\n }\n icons = icons.children();\n icons = icons.children();\n that._dateIcon = icons.eq(0).attr('aria-controls', that.dateView._dateViewID);\n that._timeIcon = icons.eq(1).attr('aria-controls', that.timeView._timeViewID);\n },\n _wrapper: function () {\n var that = this, element = that.element, wrapper;\n wrapper = element.parents('.k-datetimepicker');\n if (!wrapper[0]) {\n wrapper = element.wrap(SPAN).parent().addClass('k-picker-wrap k-state-default');\n wrapper = wrapper.wrap(SPAN).parent();\n }\n wrapper[0].style.cssText = element[0].style.cssText;\n element.css({\n width: '100%',\n height: element[0].style.height\n });\n that.wrapper = wrapper.addClass('k-widget k-datetimepicker k-header').addClass(element[0].className);\n that._inputWrapper = $(wrapper[0].firstChild);\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n that.value(element[0].defaultValue);\n that.max(that._initialOptions.max);\n that.min(that._initialOptions.min);\n };\n that._form = form.on('reset', that._resetHandler);\n }\n },\n _template: function () {\n this._ariaTemplate = kendo.template(this.options.ARIATemplate);\n },\n _calculateMidnight: function (min, max) {\n return getMilliseconds(min) + getMilliseconds(max) === 0;\n },\n _updateARIA: function (date) {\n var cell;\n var that = this;\n var calendar = that.dateView.calendar;\n that.element.removeAttr(ARIA_ACTIVEDESCENDANT);\n if (calendar) {\n cell = calendar._cell;\n cell.attr('aria-label', that._ariaTemplate({ current: date || calendar.current() }));\n that.element.attr(ARIA_ACTIVEDESCENDANT, cell.attr('id'));\n }\n }\n });\n function lastTimeOption(interval) {\n var date = new Date(2100, 0, 1);\n date.setMinutes(-interval);\n return date;\n }\n function preventDefault(e) {\n e.preventDefault();\n }\n function normalize(options) {\n var patterns = kendo.getCulture(options.culture).calendars.standard.patterns, parseFormats = !options.parseFormats.length, timeFormat;\n options.format = extractFormat(options.format || patterns.g);\n options.timeFormat = timeFormat = extractFormat(options.timeFormat || patterns.t);\n kendo.DateView.normalize(options);\n if (parseFormats) {\n options.parseFormats.unshift('yyyy-MM-ddTHH:mm:ss');\n }\n if ($.inArray(timeFormat, options.parseFormats) === -1) {\n options.parseFormats.splice(1, 0, timeFormat);\n }\n }\n ui.plugin(DateTimePicker);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.splitter', ['kendo.resizable'], f);\n}(function () {\n var __meta__ = {\n id: 'splitter',\n name: 'Splitter',\n category: 'web',\n description: 'The Splitter widget provides an easy way to create a dynamic layout of resizable and collapsible panes.',\n depends: ['resizable']\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, keys = kendo.keys, extend = $.extend, proxy = $.proxy, Widget = ui.Widget, pxUnitsRegex = /^\\d+(\\.\\d+)?px$/i, percentageUnitsRegex = /^\\d+(\\.\\d+)?%$/i, NS = '.kendoSplitter', EXPAND = 'expand', COLLAPSE = 'collapse', CONTENTLOAD = 'contentLoad', ERROR = 'error', RESIZE = 'resize', LAYOUTCHANGE = 'layoutChange', HORIZONTAL = 'horizontal', VERTICAL = 'vertical', MOUSEENTER = 'mouseenter', CLICK = 'click', PANE = 'pane', MOUSELEAVE = 'mouseleave', FOCUSED = 'k-state-focused', KPANE = 'k-' + PANE, PANECLASS = '.' + KPANE;\n function isPercentageSize(size) {\n return percentageUnitsRegex.test(size);\n }\n function isPixelSize(size) {\n return pxUnitsRegex.test(size) || /^\\d+$/.test(size);\n }\n function isFluid(size) {\n return !isPercentageSize(size) && !isPixelSize(size);\n }\n function calculateSize(size, total) {\n var output = parseInt(size, 10);\n if (isPercentageSize(size)) {\n output = Math.floor(output * total / 100);\n }\n return output;\n }\n function panePropertyAccessor(propertyName, triggersResize) {\n return function (pane, value) {\n var paneConfig = this.element.find(pane).data(PANE);\n if (arguments.length == 1) {\n return paneConfig[propertyName];\n }\n paneConfig[propertyName] = value;\n if (triggersResize) {\n var splitter = this.element.data('kendo' + this.options.name);\n splitter.resize(true);\n }\n };\n }\n var Splitter = Widget.extend({\n init: function (element, options) {\n var that = this, isHorizontal;\n Widget.fn.init.call(that, element, options);\n that.wrapper = that.element;\n isHorizontal = that.options.orientation.toLowerCase() != VERTICAL;\n that.orientation = isHorizontal ? HORIZONTAL : VERTICAL;\n that._dimension = isHorizontal ? 'width' : 'height';\n that._keys = {\n decrease: isHorizontal ? keys.LEFT : keys.UP,\n increase: isHorizontal ? keys.RIGHT : keys.DOWN\n };\n that._resizeStep = 10;\n that._marker = kendo.guid().substring(0, 8);\n that._initPanes();\n that.resizing = new PaneResizing(that);\n that.element.triggerHandler('init' + NS);\n },\n events: [\n EXPAND,\n COLLAPSE,\n CONTENTLOAD,\n ERROR,\n RESIZE,\n LAYOUTCHANGE\n ],\n _addOverlays: function () {\n this._panes().append('<div class=\\'k-splitter-overlay k-overlay\\' />');\n },\n _removeOverlays: function () {\n this._panes().children('.k-splitter-overlay').remove();\n },\n _attachEvents: function () {\n var that = this, orientation = that.options.orientation;\n that.element.children('.k-splitbar-draggable-' + orientation).on('keydown' + NS, proxy(that._keydown, that)).on('mousedown' + NS, function (e) {\n e.currentTarget.focus();\n }).on('focus' + NS, function (e) {\n $(e.currentTarget).addClass(FOCUSED);\n }).on('blur' + NS, function (e) {\n $(e.currentTarget).removeClass(FOCUSED);\n if (that.resizing) {\n that.resizing.end();\n }\n }).on(MOUSEENTER + NS, function () {\n $(this).addClass('k-splitbar-' + that.orientation + '-hover');\n }).on(MOUSELEAVE + NS, function () {\n $(this).removeClass('k-splitbar-' + that.orientation + '-hover');\n }).on('mousedown' + NS, proxy(that._addOverlays, that)).end().children('.k-splitbar').on('dblclick' + NS, proxy(that._togglePane, that)).children('.k-collapse-next, .k-collapse-prev').on(CLICK + NS, that._arrowClick(COLLAPSE)).end().children('.k-expand-next, .k-expand-prev').on(CLICK + NS, that._arrowClick(EXPAND)).end().end();\n $(window).on('resize' + NS + that._marker, proxy(that.resize, that, false));\n $(document).on('mouseup' + NS + that._marker, proxy(that._removeOverlays, that));\n },\n _detachEvents: function () {\n var that = this;\n that.element.children('.k-splitbar-draggable-' + that.orientation).off(NS).end().children('.k-splitbar').off('dblclick' + NS).children('.k-collapse-next, .k-collapse-prev, .k-expand-next, .k-expand-prev').off(NS);\n $(window).off(NS + that._marker);\n $(document).off(NS + that._marker);\n },\n options: {\n name: 'Splitter',\n orientation: HORIZONTAL,\n panes: []\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this._detachEvents();\n if (this.resizing) {\n this.resizing.destroy();\n }\n kendo.destroy(this.element);\n this.wrapper = this.element = null;\n },\n _keydown: function (e) {\n var that = this, key = e.keyCode, resizing = that.resizing, target = $(e.currentTarget), navigationKeys = that._keys, increase = key === navigationKeys.increase, decrease = key === navigationKeys.decrease, pane;\n if (increase || decrease) {\n if (e.ctrlKey) {\n pane = target[decrease ? 'next' : 'prev']();\n if (resizing && resizing.isResizing()) {\n resizing.end();\n }\n if (!pane[that._dimension]()) {\n that._triggerAction(EXPAND, pane);\n } else {\n that._triggerAction(COLLAPSE, target[decrease ? 'prev' : 'next']());\n }\n } else if (resizing) {\n resizing.move((decrease ? -1 : 1) * that._resizeStep, target);\n }\n e.preventDefault();\n } else if (key === keys.ENTER && resizing) {\n resizing.end();\n e.preventDefault();\n }\n },\n _initPanes: function () {\n var panesConfig = this.options.panes || [];\n var that = this;\n this.element.addClass('k-widget').addClass('k-splitter').children().each(function (i, pane) {\n if (pane.nodeName.toLowerCase() != 'script') {\n that._initPane(pane, panesConfig[i]);\n }\n });\n this.resize();\n },\n _initPane: function (pane, config) {\n pane = $(pane).attr('role', 'group').addClass(KPANE);\n pane.data(PANE, config ? config : {}).toggleClass('k-scrollable', config ? config.scrollable !== false : true);\n this.ajaxRequest(pane);\n },\n ajaxRequest: function (pane, url, data) {\n var that = this, paneConfig;\n pane = that.element.find(pane);\n paneConfig = pane.data(PANE);\n url = url || paneConfig.contentUrl;\n if (url) {\n pane.append('<span class=\\'k-icon k-i-loading k-pane-loading\\' />');\n if (kendo.isLocalUrl(url)) {\n jQuery.ajax({\n url: url,\n data: data || {},\n type: 'GET',\n dataType: 'html',\n success: function (data) {\n that.angular('cleanup', function () {\n return { elements: pane.get() };\n });\n pane.html(data);\n that.angular('compile', function () {\n return { elements: pane.get() };\n });\n that.trigger(CONTENTLOAD, { pane: pane[0] });\n },\n error: function (xhr, status) {\n that.trigger(ERROR, {\n pane: pane[0],\n status: status,\n xhr: xhr\n });\n }\n });\n } else {\n pane.removeClass('k-scrollable').html('<iframe src=\\'' + url + '\\' frameborder=\\'0\\' class=\\'k-content-frame\\'>' + 'This page requires frames in order to show content' + '</iframe>');\n }\n }\n },\n _triggerAction: function (type, pane) {\n if (!this.trigger(type, { pane: pane[0] })) {\n this[type](pane[0]);\n }\n },\n _togglePane: function (e) {\n var that = this, target = $(e.target), arrow;\n if (target.closest('.k-splitter')[0] != that.element[0]) {\n return;\n }\n arrow = target.children('.k-icon:not(.k-resize-handle)');\n if (arrow.length !== 1) {\n return;\n }\n if (arrow.is('.k-collapse-prev')) {\n that._triggerAction(COLLAPSE, target.prev());\n } else if (arrow.is('.k-collapse-next')) {\n that._triggerAction(COLLAPSE, target.next());\n } else if (arrow.is('.k-expand-prev')) {\n that._triggerAction(EXPAND, target.prev());\n } else if (arrow.is('.k-expand-next')) {\n that._triggerAction(EXPAND, target.next());\n }\n },\n _arrowClick: function (arrowType) {\n var that = this;\n return function (e) {\n var target = $(e.target), pane;\n if (target.closest('.k-splitter')[0] != that.element[0]) {\n return;\n }\n if (target.is('.k-' + arrowType + '-prev')) {\n pane = target.parent().prev();\n } else {\n pane = target.parent().next();\n }\n that._triggerAction(arrowType, pane);\n };\n },\n _updateSplitBar: function (splitbar, previousPane, nextPane) {\n var catIconIf = function (iconType, condition) {\n return condition ? '<div class=\\'k-icon ' + iconType + '\\' />' : '';\n }, orientation = this.orientation, draggable = previousPane.resizable !== false && nextPane.resizable !== false, prevCollapsible = previousPane.collapsible, prevCollapsed = previousPane.collapsed, nextCollapsible = nextPane.collapsible, nextCollapsed = nextPane.collapsed;\n splitbar.addClass('k-splitbar k-state-default k-splitbar-' + orientation).attr('role', 'separator').attr('aria-expanded', !(prevCollapsed || nextCollapsed)).removeClass('k-splitbar-' + orientation + '-hover').toggleClass('k-splitbar-draggable-' + orientation, draggable && !prevCollapsed && !nextCollapsed).toggleClass('k-splitbar-static-' + orientation, !draggable && !prevCollapsible && !nextCollapsible).html(catIconIf('k-collapse-prev k-i-arrow-60-up', prevCollapsible && !prevCollapsed && !nextCollapsed && orientation == VERTICAL) + catIconIf('k-collapse-prev k-i-arrow-60-left', prevCollapsible && !prevCollapsed && !nextCollapsed && orientation == HORIZONTAL) + catIconIf('k-expand-prev k-i-arrow-60-down', prevCollapsible && prevCollapsed && !nextCollapsed && orientation == VERTICAL) + catIconIf('k-expand-prev k-i-arrow-60-right', prevCollapsible && prevCollapsed && !nextCollapsed && orientation == HORIZONTAL) + catIconIf('k-resize-handle k-i-hbar', draggable && orientation == VERTICAL) + catIconIf('k-resize-handle k-i-vbar', draggable && orientation == HORIZONTAL) + catIconIf('k-collapse-next k-i-arrow-60-down', nextCollapsible && !nextCollapsed && !prevCollapsed && orientation == VERTICAL) + catIconIf('k-collapse-next k-i-arrow-60-right', nextCollapsible && !nextCollapsed && !prevCollapsed && orientation == HORIZONTAL) + catIconIf('k-expand-next k-i-arrow-60-up', nextCollapsible && nextCollapsed && !prevCollapsed && orientation == VERTICAL) + catIconIf('k-expand-next k-i-arrow-60-left', nextCollapsible && nextCollapsed && !prevCollapsed && orientation == HORIZONTAL));\n if (!draggable && !prevCollapsible && !nextCollapsible) {\n splitbar.removeAttr('tabindex');\n }\n },\n _updateSplitBars: function () {\n var that = this;\n this.element.children('.k-splitbar').each(function () {\n var splitbar = $(this), previousPane = splitbar.prevAll(PANECLASS).first().data(PANE), nextPane = splitbar.nextAll(PANECLASS).first().data(PANE);\n if (!nextPane) {\n return;\n }\n that._updateSplitBar(splitbar, previousPane, nextPane);\n });\n },\n _removeSplitBars: function () {\n this.element.children('.k-splitbar').remove();\n },\n _panes: function () {\n if (!this.element) {\n return $();\n }\n return this.element.children(PANECLASS);\n },\n _resize: function () {\n var that = this, element = that.element, panes = element.children(PANECLASS), isHorizontal = that.orientation == HORIZONTAL, splitBars = element.children('.k-splitbar'), splitBarsCount = splitBars.length, sizingProperty = isHorizontal ? 'width' : 'height', totalSize = element[sizingProperty]();\n that.wrapper.addClass('k-splitter-resizing');\n if (splitBarsCount === 0) {\n splitBarsCount = panes.length - 1;\n panes.slice(0, splitBarsCount).after('<div tabindex=\\'0\\' class=\\'k-splitbar\\' data-marker=\\'' + that._marker + '\\' />');\n that._updateSplitBars();\n splitBars = element.children('.k-splitbar');\n } else {\n that._updateSplitBars();\n }\n splitBars.each(function () {\n totalSize -= this[isHorizontal ? 'offsetWidth' : 'offsetHeight'];\n });\n var sizedPanesWidth = 0, sizedPanesCount = 0, freeSizedPanes = $();\n panes.css({\n position: 'absolute',\n top: 0\n })[sizingProperty](function () {\n var element = $(this), config = element.data(PANE) || {}, size;\n element.removeClass('k-state-collapsed');\n if (config.collapsed) {\n size = config.collapsedSize ? calculateSize(config.collapsedSize, totalSize) : 0;\n element.css('overflow', 'hidden').addClass('k-state-collapsed');\n } else if (isFluid(config.size)) {\n freeSizedPanes = freeSizedPanes.add(this);\n return;\n } else {\n size = calculateSize(config.size, totalSize);\n }\n sizedPanesCount++;\n sizedPanesWidth += size;\n return size;\n });\n totalSize -= sizedPanesWidth;\n var freeSizePanesCount = freeSizedPanes.length, freeSizePaneWidth = Math.floor(totalSize / freeSizePanesCount);\n freeSizedPanes.slice(0, freeSizePanesCount - 1).css(sizingProperty, freeSizePaneWidth).end().eq(freeSizePanesCount - 1).css(sizingProperty, totalSize - (freeSizePanesCount - 1) * freeSizePaneWidth);\n var sum = 0, alternateSizingProperty = isHorizontal ? 'height' : 'width', positioningProperty = isHorizontal ? 'left' : 'top', sizingDomProperty = isHorizontal ? 'offsetWidth' : 'offsetHeight';\n if (freeSizePanesCount === 0) {\n var lastNonCollapsedPane = panes.filter(function () {\n return !($(this).data(PANE) || {}).collapsed;\n }).last();\n lastNonCollapsedPane[sizingProperty](totalSize + lastNonCollapsedPane[0][sizingDomProperty]);\n }\n element.children().css(alternateSizingProperty, element[alternateSizingProperty]()).each(function (i, child) {\n if (child.tagName.toLowerCase() != 'script') {\n child.style[positioningProperty] = Math.floor(sum) + 'px';\n sum += child[sizingDomProperty];\n }\n });\n that._detachEvents();\n that._attachEvents();\n that.wrapper.removeClass('k-splitter-resizing');\n kendo.resize(panes);\n that.trigger(LAYOUTCHANGE);\n },\n toggle: function (pane, expand) {\n var that = this, paneConfig;\n pane = that.element.find(pane);\n paneConfig = pane.data(PANE);\n if (!expand && !paneConfig.collapsible) {\n return;\n }\n if (arguments.length == 1) {\n expand = paneConfig.collapsed === undefined ? false : paneConfig.collapsed;\n }\n paneConfig.collapsed = !expand;\n if (paneConfig.collapsed) {\n pane.css('overflow', 'hidden');\n } else {\n pane.css('overflow', '');\n }\n that.resize(true);\n },\n collapse: function (pane) {\n this.toggle(pane, false);\n },\n expand: function (pane) {\n this.toggle(pane, true);\n },\n _addPane: function (config, idx, paneElement) {\n var that = this;\n if (paneElement.length) {\n that.options.panes.splice(idx, 0, config);\n that._initPane(paneElement, config);\n that._removeSplitBars();\n that.resize(true);\n }\n return paneElement;\n },\n append: function (config) {\n config = config || {};\n var that = this, paneElement = $('<div />').appendTo(that.element);\n return that._addPane(config, that.options.panes.length, paneElement);\n },\n insertBefore: function (config, referencePane) {\n referencePane = $(referencePane);\n config = config || {};\n var that = this, idx = that.wrapper.children('.k-pane').index(referencePane), paneElement = $('<div />').insertBefore($(referencePane));\n return that._addPane(config, idx, paneElement);\n },\n insertAfter: function (config, referencePane) {\n referencePane = $(referencePane);\n config = config || {};\n var that = this, idx = that.wrapper.children('.k-pane').index(referencePane), paneElement = $('<div />').insertAfter($(referencePane));\n return that._addPane(config, idx + 1, paneElement);\n },\n remove: function (pane) {\n pane = $(pane);\n var that = this;\n if (pane.length) {\n kendo.destroy(pane);\n pane.each(function (idx, element) {\n that.options.panes.splice(that.wrapper.children('.k-pane').index(element), 1);\n $(element).remove();\n });\n that._removeSplitBars();\n if (that.options.panes.length) {\n that.resize(true);\n }\n }\n return that;\n },\n size: panePropertyAccessor('size', true),\n min: panePropertyAccessor('min'),\n max: panePropertyAccessor('max')\n });\n ui.plugin(Splitter);\n var verticalDefaults = {\n sizingProperty: 'height',\n sizingDomProperty: 'offsetHeight',\n alternateSizingProperty: 'width',\n positioningProperty: 'top',\n mousePositioningProperty: 'pageY'\n };\n var horizontalDefaults = {\n sizingProperty: 'width',\n sizingDomProperty: 'offsetWidth',\n alternateSizingProperty: 'height',\n positioningProperty: 'left',\n mousePositioningProperty: 'pageX'\n };\n function PaneResizing(splitter) {\n var that = this, orientation = splitter.orientation;\n that.owner = splitter;\n that._element = splitter.element;\n that.orientation = orientation;\n extend(that, orientation === HORIZONTAL ? horizontalDefaults : verticalDefaults);\n that._resizable = new kendo.ui.Resizable(splitter.element, {\n orientation: orientation,\n handle: '.k-splitbar-draggable-' + orientation + '[data-marker=' + splitter._marker + ']',\n hint: proxy(that._createHint, that),\n start: proxy(that._start, that),\n max: proxy(that._max, that),\n min: proxy(that._min, that),\n invalidClass: 'k-restricted-size-' + orientation,\n resizeend: proxy(that._stop, that)\n });\n }\n PaneResizing.prototype = {\n press: function (target) {\n this._resizable.press(target);\n },\n move: function (delta, target) {\n if (!this.pressed) {\n this.press(target);\n this.pressed = true;\n }\n if (!this._resizable.target) {\n this._resizable.press(target);\n }\n this._resizable.move(delta);\n },\n end: function () {\n this._resizable.end();\n this.pressed = false;\n },\n destroy: function () {\n this._resizable.destroy();\n this._resizable = this._element = this.owner = null;\n },\n isResizing: function () {\n return this._resizable.resizing;\n },\n _createHint: function (handle) {\n var that = this;\n return $('<div class=\\'k-ghost-splitbar k-ghost-splitbar-' + that.orientation + ' k-state-default\\' />').css(that.alternateSizingProperty, handle[that.alternateSizingProperty]());\n },\n _start: function (e) {\n var that = this, splitbar = $(e.currentTarget), previousPane = splitbar.prev(), nextPane = splitbar.next(), previousPaneConfig = previousPane.data(PANE), nextPaneConfig = nextPane.data(PANE), prevBoundary = parseInt(previousPane[0].style[that.positioningProperty], 10), nextBoundary = parseInt(nextPane[0].style[that.positioningProperty], 10) + nextPane[0][that.sizingDomProperty] - splitbar[0][that.sizingDomProperty], totalSize = parseInt(that._element.css(that.sizingProperty), 10), toPx = function (value) {\n var val = parseInt(value, 10);\n return (isPixelSize(value) ? val : totalSize * val / 100) || 0;\n }, prevMinSize = toPx(previousPaneConfig.min), prevMaxSize = toPx(previousPaneConfig.max) || nextBoundary - prevBoundary, nextMinSize = toPx(nextPaneConfig.min), nextMaxSize = toPx(nextPaneConfig.max) || nextBoundary - prevBoundary;\n that.previousPane = previousPane;\n that.nextPane = nextPane;\n that._maxPosition = Math.min(nextBoundary - nextMinSize, prevBoundary + prevMaxSize);\n that._minPosition = Math.max(prevBoundary + prevMinSize, nextBoundary - nextMaxSize);\n },\n _max: function () {\n return this._maxPosition;\n },\n _min: function () {\n return this._minPosition;\n },\n _stop: function (e) {\n var that = this, splitbar = $(e.currentTarget), owner = that.owner;\n owner._panes().children('.k-splitter-overlay').remove();\n if (e.keyCode !== kendo.keys.ESC) {\n var ghostPosition = e.position, previousPane = splitbar.prev(), nextPane = splitbar.next(), previousPaneConfig = previousPane.data(PANE), nextPaneConfig = nextPane.data(PANE), previousPaneNewSize = ghostPosition - parseInt(previousPane[0].style[that.positioningProperty], 10), nextPaneNewSize = parseInt(nextPane[0].style[that.positioningProperty], 10) + nextPane[0][that.sizingDomProperty] - ghostPosition - splitbar[0][that.sizingDomProperty], fluidPanesCount = that._element.children(PANECLASS).filter(function () {\n return isFluid($(this).data(PANE).size);\n }).length;\n if (!isFluid(previousPaneConfig.size) || fluidPanesCount > 1) {\n if (isFluid(previousPaneConfig.size)) {\n fluidPanesCount--;\n }\n previousPaneConfig.size = previousPaneNewSize + 'px';\n }\n if (!isFluid(nextPaneConfig.size) || fluidPanesCount > 1) {\n nextPaneConfig.size = nextPaneNewSize + 'px';\n }\n owner.resize(true);\n }\n return false;\n }\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dialog', [\n 'kendo.core',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dialog',\n name: 'Dialog',\n category: 'web',\n description: 'The dialog widget is a modal popup that brings information to the user.',\n depends: [\n 'core',\n 'popup'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Class = kendo.Class, Widget = kendo.ui.Widget, proxy = $.proxy, template = kendo.template, keys = kendo.keys, isFunction = $.isFunction, NS = 'kendoWindow', KDIALOG = '.k-dialog', KWINDOW = '.k-window', KICONCLOSE = '.k-dialog-close', KCONTENTCLASS = 'k-content', KCONTENT = '.k-content', KTITLELESS = 'k-dialog-titleless', KDIALOGTITLE = '.k-dialog-title', KDIALOGTITLEBAR = '.k-window-titlebar', KBUTTONGROUP = '.k-dialog-buttongroup', KBUTTON = '.k-button', KALERT = 'k-alert', KCONFIRM = 'k-confirm', KPROMPT = 'k-prompt', KTEXTBOX = '.k-textbox', KOVERLAY = '.k-overlay', VISIBLE = ':visible', ZINDEX = 'zIndex', BODY = 'body', INITOPEN = 'initOpen', OPEN = 'open', CLOSE = 'close', SHOW = 'show', HIDE = 'hide', WIDTH = 'width', HUNDREDPERCENT = 100, OK_CANCEL = {\n okText: 'OK',\n cancel: 'Cancel'\n }, ceil = Math.ceil, templates, overlaySelector = ':not(link,meta,script,style)';\n function defined(x) {\n return typeof x != 'undefined';\n }\n function constrain(value, low, high) {\n return Math.max(Math.min(parseInt(value, 10), high === Infinity ? high : parseInt(high, 10)), parseInt(low, 10));\n }\n function buttonKeyTrigger(e) {\n return e.keyCode == keys.ENTER || e.keyCode == keys.SPACEBAR;\n }\n var DialogBase = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that._init(that.element, that.options);\n kendo.notify(that);\n },\n _init: function (element, options) {\n var that = this, wrapper;\n that._centerCallback = proxy(that._center, that);\n that.appendTo = $(BODY);\n if (!defined(options.visible) || options.visible === null) {\n options.visible = element.is(VISIBLE);\n }\n if (that.wrapperTemplate === undefined) {\n that.wrapperTemplate = templates.wrapper;\n }\n that._createDialog();\n wrapper = that.wrapper = element.closest(KDIALOG);\n if (options._defaultFocus === undefined) {\n that._defaultFocus = element[0];\n }\n that._tabindex(element);\n that._dimensions();\n this._tabKeyTrap = new TabKeyTrap(wrapper);\n if (!that.options.visible) {\n that.wrapper.hide();\n } else {\n that.toFront();\n that._triggerInitOpen();\n that.trigger(OPEN);\n if (options.modal) {\n that._overlay(wrapper.is(VISIBLE)).css({ opacity: 0.5 });\n that._focusDialog();\n }\n }\n if (options.closable) {\n wrapper.autoApplyNS(NS);\n element.autoApplyNS(NS);\n wrapper.find(KICONCLOSE).on('click', proxy(that._closeClick, that)).on('keydown', proxy(that._closeKeyHandler, that));\n element.on('keydown', proxy(that._keydown, that));\n }\n },\n _dimensions: function () {\n var that = this, wrapper = that.wrapper, options = that.options, width = options.width, height = options.height, dimensions = [\n 'minWidth',\n 'minHeight',\n 'maxWidth',\n 'maxHeight'\n ];\n for (var i = 0; i < dimensions.length; i++) {\n var value = options[dimensions[i]];\n if (value && value != Infinity) {\n wrapper.css(dimensions[i], value);\n }\n }\n this._setElementMaxHeight();\n if (width) {\n if (width.toString().indexOf('%') > 0) {\n wrapper.width(width);\n } else {\n wrapper.width(constrain(width, options.minWidth, options.maxWidth));\n }\n }\n if (height) {\n if (height.toString().indexOf('%') > 0) {\n wrapper.height(height);\n } else {\n wrapper.height(constrain(height, options.minHeight, options.maxHeight));\n }\n this._setElementHeight();\n }\n },\n _setElementMaxHeight: function () {\n var that = this, element = that.element, maxHeight = that.options.maxHeight, paddingBox, elementMaxHeight;\n if (maxHeight != Infinity) {\n paddingBox = that._paddingBox(element);\n elementMaxHeight = parseFloat(maxHeight, 10) - that._uiHeight() - paddingBox.vertical;\n if (elementMaxHeight > 0) {\n element.css({\n maxHeight: ceil(elementMaxHeight) + 'px',\n overflow: 'hidden'\n });\n }\n }\n },\n _paddingBox: function (element) {\n var paddingTop = parseFloat(element.css('padding-top'), 10), paddingLeft = parseFloat(element.css('padding-left'), 10), paddingBottom = parseFloat(element.css('padding-bottom'), 10), paddingRight = parseFloat(element.css('padding-right'), 10);\n return {\n vertical: paddingTop + paddingBottom,\n horizontal: paddingLeft + paddingRight\n };\n },\n _setElementHeight: function () {\n var that = this, element = that.element, height = that.options.height, paddingBox = that._paddingBox(element), elementHeight = parseFloat(height, 10) - that._uiHeight() - paddingBox.vertical;\n if (elementHeight > 0) {\n that.element.css({\n height: ceil(elementHeight) + 'px',\n overflow: 'hidden'\n });\n }\n },\n _uiHeight: function () {\n var that = this, wrapper = that.wrapper, actionbar = wrapper.children(KBUTTONGROUP), actionbarHeight = actionbar[0] && actionbar[0].offsetHeight || 0, titlebar = wrapper.children(KDIALOGTITLEBAR), titlebarHeight = titlebar[0] && titlebar[0].offsetHeight || 0;\n return actionbarHeight + titlebarHeight;\n },\n _overlay: function (visible) {\n var overlay = this.appendTo.children(KOVERLAY), wrapper = this.wrapper;\n if (!overlay.length) {\n overlay = $(templates.overlay);\n }\n overlay.insertBefore(wrapper[0]).toggle(visible).css(ZINDEX, parseInt(wrapper.css(ZINDEX), 10) - 1);\n if (visible) {\n this._waiAriaOverlay();\n } else {\n this._removeWaiAriaOverlay();\n }\n return overlay;\n },\n _waiAriaOverlay: function () {\n var node = this.wrapper;\n this._overlayedNodes = node.prevAll(overlaySelector).add(node.nextAll(overlaySelector)).each(function () {\n var jthis = $(this);\n jthis.data('ariaHidden', jthis.attr('aria-hidden'));\n jthis.attr('aria-hidden', 'true');\n });\n },\n _removeWaiAriaOverlay: function () {\n return this._overlayedNodes && this._overlayedNodes.each(function () {\n var node = $(this);\n var hiddenValue = node.data('ariaHidden');\n if (hiddenValue) {\n node.attr('aria-hidden', hiddenValue);\n } else {\n node.removeAttr('aria-hidden');\n }\n });\n },\n _closeClick: function (e) {\n e.preventDefault();\n this.close();\n },\n _closeKeyHandler: function (e) {\n if (buttonKeyTrigger(e) || e.keyCode == keys.ESC) {\n this.close();\n }\n },\n _keydown: function (e) {\n var that = this, options = that.options, keyCode = e.keyCode;\n if (keyCode == keys.ESC && !that._closing && options.closable) {\n that.close();\n }\n },\n _createDialog: function () {\n var that = this, content = that.element, options = that.options, isRtl = kendo.support.isRtl(content), titlebar = $(templates.titlebar(options)), titleId = (content.id || kendo.guid()) + '_title', wrapper = $(that.wrapperTemplate(options));\n wrapper.toggleClass('k-rtl', isRtl);\n content.addClass(KCONTENTCLASS);\n that.appendTo.append(wrapper);\n if (options.closable !== false) {\n if (options.title !== false) {\n titlebar.append(templates.close(options));\n } else {\n wrapper.append(templates.close(options));\n }\n }\n if (options.title !== false) {\n wrapper.append(titlebar);\n titlebar.attr('id', titleId);\n wrapper.attr('aria-labelledby', titleId);\n } else {\n wrapper.addClass(KTITLELESS);\n }\n wrapper.append(content);\n if (options.content) {\n kendo.destroy(content.children());\n content.html(options.content);\n }\n if (options.actions.length) {\n that._createActionbar(wrapper);\n }\n },\n _createActionbar: function (wrapper) {\n var isStretchedLayout = this.options.buttonLayout === 'stretched';\n var buttonLayout = isStretchedLayout ? 'stretched' : 'normal';\n var actionbar = $(templates.actionbar({ buttonLayout: buttonLayout }));\n this._addButtons(actionbar);\n if (isStretchedLayout) {\n this._normalizeButtonSize(actionbar);\n }\n wrapper.append(actionbar);\n },\n _addButtons: function (actionbar) {\n var that = this, o = that.options, actionClick = proxy(that._actionClick, that), actionKeyHandler = proxy(that._actionKeyHandler, that), actions = that.options.actions, length = actions.length, buttonSize = HUNDREDPERCENT / length, action, text;\n for (var i = 0; i < length; i++) {\n action = actions[i];\n text = that._mergeTextWithOptions(action);\n var btn = $(templates.action(action)).autoApplyNS(NS).html(text).appendTo(actionbar).data('action', action.action).on('click', actionClick).on('keydown', actionKeyHandler);\n if (o.buttonLayout === 'stretched') {\n btn.css(WIDTH, buttonSize + '%');\n }\n }\n },\n _mergeTextWithOptions: function (action) {\n var text = action.text;\n return text ? template(text)(this.options) : '';\n },\n _normalizeButtonSize: function (actionbar) {\n var that = this, options = that.options, lastButton = actionbar.children(KBUTTON + ':last'), currentSize = parseFloat(lastButton[0].style[WIDTH]), difference = HUNDREDPERCENT - options.actions.length * currentSize;\n if (difference > 0) {\n lastButton.css(WIDTH, currentSize + difference + '%');\n }\n },\n _tabindex: function (target) {\n var that = this;\n var wrapper = that.wrapper;\n var closeBtn = wrapper.find(KICONCLOSE);\n var actionButtons = wrapper.find(KBUTTONGROUP + ' ' + KBUTTON);\n Widget.fn._tabindex.call(this, target);\n var tabIndex = target.attr('tabindex');\n closeBtn.attr('tabIndex', tabIndex);\n actionButtons.attr('tabIndex', tabIndex);\n },\n _actionClick: function (e) {\n this._runActionBtn(e.currentTarget);\n },\n _actionKeyHandler: function (e) {\n if (buttonKeyTrigger(e)) {\n this._runActionBtn(e.currentTarget);\n } else if (e.keyCode == keys.ESC) {\n this.close();\n }\n },\n _runActionBtn: function (target) {\n var that = this;\n if (that._closing) {\n return;\n }\n var action = $(target).data('action'), preventClose = isFunction(action) && action({ sender: that }) === false;\n if (!preventClose) {\n that.close();\n }\n },\n open: function () {\n var that = this, wrapper = that.wrapper, showOptions = this._animationOptions(OPEN), options = that.options, overlay, otherModalsVisible;\n this._triggerInitOpen();\n if (!that.trigger(OPEN)) {\n if (that._closing) {\n wrapper.kendoStop(true, true);\n }\n that._closing = false;\n that.toFront();\n options.visible = true;\n if (options.modal) {\n otherModalsVisible = !!that._modals().length;\n overlay = that._overlay(otherModalsVisible);\n overlay.kendoStop(true, true);\n if (showOptions.duration && kendo.effects.Fade && !otherModalsVisible) {\n var overlayFx = kendo.fx(overlay).fadeIn();\n overlayFx.duration(showOptions.duration || 0);\n overlayFx.endValue(0.5);\n overlayFx.play();\n } else {\n overlay.css('opacity', 0.5);\n }\n overlay.show();\n }\n wrapper.show().kendoStop().kendoAnimate({\n effects: showOptions.effects,\n duration: showOptions.duration,\n complete: proxy(that._openAnimationEnd, that)\n });\n wrapper.show();\n }\n return that;\n },\n _animationOptions: function (id) {\n var animation = this.options.animation;\n var basicAnimation = {\n open: { effects: {} },\n close: {\n hide: true,\n effects: {}\n }\n };\n return animation && animation[id] || basicAnimation[id];\n },\n _openAnimationEnd: function () {\n if (this.options.modal) {\n this._focusDialog();\n }\n this.trigger(SHOW);\n },\n _triggerInitOpen: function () {\n if (!defined(this._initOpenTriggered)) {\n this._initOpenTriggered = true;\n this.trigger(INITOPEN);\n }\n },\n toFront: function () {\n var that = this, wrapper = that.wrapper, zIndex = +wrapper.css(ZINDEX), originalZIndex = zIndex;\n that.center();\n $(KWINDOW).each(function (i, element) {\n var windowObject = $(element), zIndexNew = windowObject.css(ZINDEX);\n if (!isNaN(zIndexNew)) {\n zIndex = Math.max(+zIndexNew, zIndex);\n }\n });\n if (!wrapper[0].style.zIndex || originalZIndex < zIndex) {\n wrapper.css(ZINDEX, zIndex + 2);\n }\n that.element.find('> .k-overlay').remove();\n wrapper = null;\n return that;\n },\n close: function () {\n this._close(true);\n this._stopCenterOnResize();\n return this;\n },\n _close: function (systemTriggered) {\n var that = this, wrapper = that.wrapper, options = that.options, showOptions = this._animationOptions('open'), hideOptions = this._animationOptions('close');\n if (wrapper.is(VISIBLE) && !that.trigger(CLOSE, { userTriggered: !systemTriggered })) {\n if (that._closing) {\n return;\n }\n that._closing = true;\n options.visible = false;\n this._removeOverlay();\n wrapper.kendoStop().kendoAnimate({\n effects: hideOptions.effects || showOptions.effects,\n reverse: hideOptions.reverse === true,\n duration: hideOptions.duration,\n complete: proxy(this._closeAnimationEnd, this)\n });\n }\n return that;\n },\n center: function () {\n this._center();\n this._centerOnResize();\n },\n _center: function () {\n var that = this, wrapper = that.wrapper, documentWindow = $(window), scrollTop = 0, scrollLeft = 0, newLeft = scrollLeft + Math.max(0, (documentWindow.width() - wrapper.width()) / 2), newTop = scrollTop + Math.max(0, (documentWindow.height() - wrapper.height() - parseInt(wrapper.css('paddingTop'), 10)) / 2);\n wrapper.css({\n left: newLeft,\n top: newTop\n });\n return that;\n },\n _centerOnResize: function () {\n if (this._trackResize) {\n return;\n }\n kendo.onResize(this._centerCallback);\n this._trackResize = true;\n },\n _stopCenterOnResize: function () {\n kendo.unbindResize(this._centerCallback);\n this._trackResize = false;\n },\n _removeOverlay: function () {\n var modals = this._modals();\n var options = this.options;\n var hideOverlay = options.modal && !modals.length;\n if (hideOverlay) {\n this._overlay(false).remove();\n } else if (modals.length) {\n this._object(modals.last())._overlay(true);\n }\n },\n _closeAnimationEnd: function () {\n var that = this;\n that._closing = false;\n that.wrapper.hide().css('opacity', '');\n that.trigger(HIDE);\n if (that.options.modal) {\n var lastModal = that._object(that._modals().last());\n if (lastModal) {\n lastModal.toFront();\n }\n }\n },\n _modals: function () {\n var that = this;\n var zStack = $(KWINDOW).filter(function () {\n var dom = $(this);\n var object = that._object(dom);\n var options = object && object.options;\n return options && options.modal && that.options.appendTo == options.appendTo && options.visible && dom.is(VISIBLE);\n }).sort(function (a, b) {\n return +$(a).css('zIndex') - +$(b).css('zIndex');\n });\n that = null;\n return zStack;\n },\n _object: function (element) {\n var content = element.children(KCONTENT);\n var widget = kendo.widgetInstance(content);\n if (widget) {\n return widget;\n }\n return undefined;\n },\n destroy: function () {\n var that = this;\n that._destroy();\n Widget.fn.destroy.call(that);\n that.wrapper.remove();\n that.wrapper = that.element = $();\n },\n _destroy: function () {\n var that = this;\n var ns = '.' + NS;\n that.wrapper.off(ns);\n that.element.off(ns);\n that.wrapper.find(KICONCLOSE + ',' + KBUTTONGROUP + ' > ' + KBUTTON).off(ns);\n that._stopCenterOnResize();\n },\n title: function (html) {\n var that = this, wrapper = that.wrapper, options = that.options, titlebar = wrapper.children(KDIALOGTITLEBAR), title = titlebar.children(KDIALOGTITLE);\n if (!arguments.length) {\n return title.html();\n }\n if (html === false) {\n titlebar.remove();\n wrapper.addClass(KTITLELESS);\n } else {\n if (!titlebar.length) {\n titlebar = $(templates.titlebar(options)).prependTo(wrapper);\n title = titlebar.children(KDIALOGTITLE);\n wrapper.removeClass(KTITLELESS);\n }\n title.html(html);\n }\n that.options.title = html;\n return that;\n },\n content: function (html, data) {\n var that = this, content = that.wrapper.children(KCONTENT);\n if (!defined(html)) {\n return content.html();\n }\n this.angular('cleanup', function () {\n return { elements: content.children() };\n });\n kendo.destroy(content.children());\n content.html(html);\n this.angular('compile', function () {\n var a = [];\n for (var i = content.length; --i >= 0;) {\n a.push({ dataItem: data });\n }\n return {\n elements: content.children(),\n data: a\n };\n });\n that.options.content = html;\n return that;\n },\n _focusDialog: function () {\n if (this._defaultFocus) {\n this._focus(this._defaultFocus);\n }\n this._tabKeyTrap.trap();\n },\n _focus: function (node) {\n if (node) {\n node.focus();\n }\n },\n events: [\n INITOPEN,\n OPEN,\n CLOSE,\n SHOW,\n HIDE\n ],\n options: {\n title: '',\n buttonLayout: 'stretched',\n actions: [],\n modal: true,\n width: null,\n height: null,\n minWidth: 0,\n minHeight: 0,\n maxWidth: Infinity,\n maxHeight: Infinity,\n content: null,\n visible: null,\n appendTo: BODY,\n closable: true\n }\n });\n var Dialog = DialogBase.extend({\n options: {\n name: 'Dialog',\n messages: { close: 'Close' }\n }\n });\n kendo.ui.plugin(Dialog);\n var PopupBox = DialogBase.extend({\n _init: function (element, options) {\n var that = this;\n that.wrapperTemplate = templates.alertWrapper;\n options._defaultFocus = null;\n that._ensureContentId(element);\n DialogBase.fn._init.call(that, element, options);\n that.bind(HIDE, proxy(that.destroy, that));\n that._ariaDescribedBy();\n that._initFocus();\n },\n _ensureContentId: function (element) {\n var node = $(element);\n if (!node.attr('id')) {\n node.attr('id', kendo.guid() + '_k-popup');\n }\n },\n _ariaDescribedBy: function () {\n this.wrapper.attr('aria-describedby', this.element.attr('id'));\n },\n _initFocus: function () {\n var o = this.options;\n this._defaultFocus = this._chooseEntryFocus();\n if (this._defaultFocus && o.visible && o.modal) {\n this._focusDialog();\n }\n },\n _chooseEntryFocus: function () {\n return this.wrapper.find(KBUTTONGROUP + ' > ' + KBUTTON)[0];\n },\n options: {\n title: window.location.host,\n closable: false,\n messages: OK_CANCEL\n }\n });\n var Alert = PopupBox.extend({\n _init: function (element, options) {\n var that = this;\n PopupBox.fn._init.call(that, element, options);\n that.wrapper.addClass(KALERT);\n },\n options: {\n name: 'Alert',\n modal: true,\n actions: [{ text: '#= messages.okText #' }]\n }\n });\n kendo.ui.plugin(Alert);\n var kendoAlert = function (text) {\n return $(templates.alert).kendoAlert({ content: text }).data('kendoAlert').open();\n };\n var Confirm = PopupBox.extend({\n _init: function (element, options) {\n var that = this;\n PopupBox.fn._init.call(that, element, options);\n that.wrapper.addClass(KCONFIRM);\n that.result = $.Deferred();\n },\n options: {\n name: 'Confirm',\n modal: true,\n actions: [\n {\n text: '#= messages.okText #',\n primary: true,\n action: function (e) {\n e.sender.result.resolve();\n }\n },\n {\n text: '#= messages.cancel #',\n action: function (e) {\n e.sender.result.reject();\n }\n }\n ]\n }\n });\n kendo.ui.plugin(Confirm);\n var kendoConfirm = function (text) {\n var confirmDialog = $(templates.confirm).kendoConfirm({ content: text }).data('kendoConfirm').open();\n return confirmDialog.result;\n };\n var Prompt = PopupBox.extend({\n _init: function (element, options) {\n var that = this;\n PopupBox.fn._init.call(that, element, options);\n that.wrapper.addClass(KPROMPT);\n that._createPrompt();\n that.result = $.Deferred();\n },\n _createPrompt: function () {\n var value = this.options.value, promptContainer = $(templates.promptInputContainer).insertAfter(this.element);\n if (value) {\n promptContainer.children(KTEXTBOX).val(value);\n }\n this._defaultFocus = this._chooseEntryFocus();\n this._focusDialog();\n },\n _chooseEntryFocus: function () {\n return this.wrapper.find(KTEXTBOX)[0];\n },\n options: {\n name: 'Prompt',\n modal: true,\n value: '',\n actions: [\n {\n text: '#= messages.okText #',\n primary: true,\n action: function (e) {\n var sender = e.sender, value = sender.wrapper.find(KTEXTBOX).val();\n sender.result.resolve(value);\n }\n },\n {\n text: '#= messages.cancel #',\n action: function (e) {\n var sender = e.sender, value = sender.wrapper.find(KTEXTBOX).val();\n e.sender.result.reject(value);\n }\n }\n ]\n }\n });\n kendo.ui.plugin(Prompt);\n var kendoPrompt = function (text, value) {\n var promptDialog = $(templates.prompt).kendoPrompt({\n content: text,\n value: value\n }).data('kendoPrompt').open();\n return promptDialog.result;\n };\n templates = {\n wrapper: template('<div class=\\'k-widget k-dialog k-window\\' role=\\'dialog\\' />'),\n action: template('<button type=\\'button\\' class=\\'k-button# if (data.primary) { # k-primary# } role=\\'button\\' #\\'></button>'),\n titlebar: template('<div class=\\'k-window-titlebar k-dialog-titlebar k-header\\'>' + '<span class=\\'k-window-title k-dialog-title\\'>#= title #</span>' + '</div>'),\n close: template('<a role=\\'button\\' href=\\'\\\\#\\' class=\\'k-button-bare k-dialog-action k-dialog-close\\' title=\\'#= messages.close #\\' aria-label=\\'#= messages.close #\\' tabindex=\\'-1\\'><span class=\\'k-icon k-i-close\\'></span></a>'),\n actionbar: template('<div class=\\'k-dialog-buttongroup k-dialog-button-layout-#= buttonLayout #\\' role=\\'toolbar\\' />'),\n overlay: '<div class=\\'k-overlay\\' />',\n alertWrapper: template('<div class=\\'k-widget k-dialog k-window\\' role=\\'alertdialog\\' />'),\n alert: '<div />',\n confirm: '<div />',\n prompt: '<div />',\n promptInputContainer: '<div class=\\'k-prompt-container\\'><input type=\\'text\\' class=\\'k-textbox\\' /></div>'\n };\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 trap: function () {\n this.element.on('keydown', proxy(this._keepInTrap, this));\n },\n removeTrap: function () {\n this.element.kendoDestroy(tabKeyTrapNS);\n },\n destroy: function () {\n this.element.kendoDestroy(tabKeyTrapNS);\n this.element = undefined;\n },\n _keepInTrap: function (e) {\n if (e.which !== 9) {\n return;\n }\n var target = e.target;\n var focusableItems = this.element.find(focusableNodesSelector).filter(':visible[tabindex!=-1]');\n var focusableItemsCount = focusableItems.length;\n var lastIndex = focusableItemsCount - 1;\n var focusedItemIndex = focusableItems.index(target);\n if (e.shiftKey) {\n if (focusedItemIndex === 0) {\n focusableItems.get(lastIndex).focus();\n e.preventDefault();\n }\n } else {\n if (focusedItemIndex === lastIndex) {\n focusableItems.get(0).focus();\n e.preventDefault();\n }\n }\n }\n });\n kendo.alert = kendoAlert;\n kendo.confirm = kendoConfirm;\n kendo.prompt = kendoPrompt;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.virtuallist', ['kendo.data'], f);\n}(function () {\n var __meta__ = {\n id: 'virtuallist',\n name: 'VirtualList',\n category: 'framework',\n depends: ['data'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, DataBoundWidget = ui.DataBoundWidget, proxy = $.proxy, WRAPPER = 'k-virtual-wrap', VIRTUALLIST = 'k-virtual-list', CONTENT = 'k-virtual-content', LIST = 'k-list', HEADER = 'k-group-header', VIRTUALITEM = 'k-virtual-item', ITEM = 'k-item', HEIGHTCONTAINER = 'k-height-container', GROUPITEM = 'k-group', SELECTED = 'k-state-selected', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', CHANGE = 'change', CLICK = 'click', LISTBOUND = 'listBound', ITEMCHANGE = 'itemChange', ACTIVATE = 'activate', DEACTIVATE = 'deactivate', VIRTUAL_LIST_NS = '.VirtualList';\n function lastFrom(array) {\n return array[array.length - 1];\n }\n function toArray(value) {\n return value instanceof Array ? value : [value];\n }\n function isPrimitive(dataItem) {\n return typeof dataItem === 'string' || typeof dataItem === 'number' || typeof dataItem === 'boolean';\n }\n function getItemCount(screenHeight, listScreens, itemHeight) {\n return Math.ceil(screenHeight * listScreens / itemHeight);\n }\n function appendChild(parent, className, tagName) {\n var element = document.createElement(tagName || 'div');\n if (className) {\n element.className = className;\n }\n parent.appendChild(element);\n return element;\n }\n function getDefaultItemHeight() {\n var mockList = $('<div class=\"k-popup\"><ul class=\"k-list\"><li class=\"k-item\"><li></ul></div>'), lineHeight;\n mockList.css({\n position: 'absolute',\n left: '-200000px',\n visibility: 'hidden'\n });\n mockList.appendTo(document.body);\n lineHeight = parseFloat(kendo.getComputedStyles(mockList.find('.k-item')[0], ['line-height'])['line-height']);\n mockList.remove();\n return lineHeight;\n }\n function bufferSizes(screenHeight, listScreens, opposite) {\n return {\n down: screenHeight * opposite,\n up: screenHeight * (listScreens - 1 - opposite)\n };\n }\n function listValidator(options, screenHeight) {\n var downThreshold = (options.listScreens - 1 - options.threshold) * screenHeight;\n var upThreshold = options.threshold * screenHeight;\n return function (list, scrollTop, lastScrollTop) {\n if (scrollTop > lastScrollTop) {\n return scrollTop - list.top < downThreshold;\n } else {\n return list.top === 0 || scrollTop - list.top > upThreshold;\n }\n };\n }\n function scrollCallback(element, callback) {\n return function (force) {\n return callback(element.scrollTop, force);\n };\n }\n function syncList(reorder) {\n return function (list, force) {\n reorder(list.items, list.index, force);\n return list;\n };\n }\n function position(element, y) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n element.style.top = y + 'px';\n } else {\n element.style.webkitTransform = 'translateY(' + y + 'px)';\n element.style.transform = 'translateY(' + y + 'px)';\n }\n }\n function map2(callback, templates) {\n return function (arr1, arr2) {\n for (var i = 0, len = arr1.length; i < len; i++) {\n callback(arr1[i], arr2[i], templates);\n if (arr2[i].item) {\n this.trigger(ITEMCHANGE, {\n item: $(arr1[i]),\n data: arr2[i].item,\n ns: kendo.ui\n });\n }\n }\n };\n }\n function reshift(items, diff) {\n var range;\n if (diff > 0) {\n range = items.splice(0, diff);\n items.push.apply(items, range);\n } else {\n range = items.splice(diff, -diff);\n items.unshift.apply(items, range);\n }\n return range;\n }\n function render(element, data, templates) {\n var itemTemplate = templates.template;\n element = $(element);\n if (!data.item) {\n itemTemplate = templates.placeholderTemplate;\n }\n this.angular('cleanup', function () {\n return { elements: [element] };\n });\n element.attr('data-uid', data.item ? data.item.uid : '').attr('data-offset-index', data.index).html(itemTemplate(data.item || {}));\n element.toggleClass(FOCUSED, data.current);\n element.toggleClass(SELECTED, data.selected);\n element.toggleClass('k-first', data.newGroup);\n element.toggleClass('k-loading-item', !data.item);\n if (data.index !== 0 && data.newGroup) {\n $('<div class=' + GROUPITEM + '></div>').appendTo(element).html(templates.groupTemplate(data.group));\n }\n if (data.top !== undefined) {\n position(element[0], data.top);\n }\n this.angular('compile', function () {\n return {\n elements: [element],\n data: [{\n dataItem: data.item,\n group: data.group,\n newGroup: data.newGroup\n }]\n };\n });\n }\n function mapChangedItems(selected, itemsToMatch) {\n var itemsLength = itemsToMatch.length;\n var selectedLength = selected.length;\n var dataItem;\n var found;\n var i, j;\n var changed = [];\n var unchanged = [];\n if (selectedLength) {\n for (i = 0; i < selectedLength; i++) {\n dataItem = selected[i];\n found = false;\n for (j = 0; j < itemsLength; j++) {\n if (dataItem === itemsToMatch[j]) {\n found = true;\n changed.push({\n index: i,\n item: dataItem\n });\n break;\n }\n }\n if (!found) {\n unchanged.push(dataItem);\n }\n }\n }\n return {\n changed: changed,\n unchanged: unchanged\n };\n }\n function isActivePromise(promise) {\n return promise && promise.state() !== 'resolved';\n }\n var VirtualList = DataBoundWidget.extend({\n init: function (element, options) {\n var that = this;\n that.bound(false);\n that._fetching = false;\n Widget.fn.init.call(that, element, options);\n if (!that.options.itemHeight) {\n that.options.itemHeight = getDefaultItemHeight();\n }\n options = that.options;\n that.element.addClass(LIST + ' ' + VIRTUALLIST).attr('role', 'listbox');\n that.content = that.element.wrap('<div unselectable=\\'on\\' class=\\'' + CONTENT + '\\'></div>').parent();\n that.wrapper = that.content.wrap('<div class=\\'' + WRAPPER + '\\'></div>').parent();\n that.header = that.content.before('<div class=\\'' + HEADER + '\\'></div>').prev();\n that.element.on('mouseenter' + VIRTUAL_LIST_NS, 'li:not(.k-loading-item)', function () {\n $(this).addClass(HOVER);\n }).on('mouseleave' + VIRTUAL_LIST_NS, 'li', function () {\n $(this).removeClass(HOVER);\n });\n that._values = toArray(that.options.value);\n that._selectedDataItems = [];\n that._selectedIndexes = [];\n that._rangesList = {};\n that._promisesList = [];\n that._optionID = kendo.guid();\n that._templates();\n that.setDataSource(options.dataSource);\n that.content.on('scroll' + VIRTUAL_LIST_NS, kendo.throttle(function () {\n that._renderItems();\n that._triggerListBound();\n }, options.delay));\n that._selectable();\n },\n options: {\n name: 'VirtualList',\n autoBind: true,\n delay: 100,\n height: null,\n listScreens: 4,\n threshold: 0.5,\n itemHeight: null,\n oppositeBuffer: 1,\n type: 'flat',\n selectable: false,\n value: [],\n dataValueField: null,\n template: '#:data#',\n placeholderTemplate: 'loading...',\n groupTemplate: '#:data#',\n fixedGroupTemplate: 'fixed header template',\n mapValueTo: 'index',\n valueMapper: null\n },\n events: [\n CHANGE,\n CLICK,\n LISTBOUND,\n ITEMCHANGE,\n ACTIVATE,\n DEACTIVATE\n ],\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n if (this._selectProxy && this.options.selectable === false) {\n this.element.off(CLICK, '.' + VIRTUALITEM, this._selectProxy);\n } else if (!this._selectProxy && this.options.selectable) {\n this._selectable();\n }\n this._templates();\n this.refresh();\n },\n items: function () {\n return $(this._items);\n },\n destroy: function () {\n this.wrapper.off(VIRTUAL_LIST_NS);\n this.dataSource.unbind(CHANGE, this._refreshHandler);\n Widget.fn.destroy.call(this);\n },\n setDataSource: function (source) {\n var that = this;\n var dataSource = source || {};\n var value;\n dataSource = $.isArray(dataSource) ? { data: dataSource } : dataSource;\n dataSource = kendo.data.DataSource.create(dataSource);\n if (that.dataSource) {\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n that._clean();\n that.bound(false);\n that._deferValueSet = true;\n value = that.value();\n that.value([]);\n that.mute(function () {\n that.value(value);\n });\n } else {\n that._refreshHandler = $.proxy(that.refresh, that);\n }\n that.dataSource = dataSource.bind(CHANGE, that._refreshHandler);\n that.setDSFilter(dataSource.filter());\n if (dataSource.view().length !== 0) {\n that.refresh();\n } else if (that.options.autoBind) {\n dataSource.fetch();\n }\n },\n skip: function () {\n return this.dataSource.currentRangeStart();\n },\n _triggerListBound: function () {\n var that = this;\n var skip = that.skip();\n if (that.bound() && !that._selectingValue && that._skip !== skip) {\n that._skip = skip;\n that.trigger(LISTBOUND);\n }\n },\n _getValues: function (dataItems) {\n var getter = this._valueGetter;\n return $.map(dataItems, function (dataItem) {\n return getter(dataItem);\n });\n },\n refresh: function (e) {\n var that = this;\n var action = e && e.action;\n var isItemChange = action === 'itemchange';\n var filtered = this.isFiltered();\n var result;\n if (that._mute) {\n return;\n }\n that._deferValueSet = false;\n if (!that._fetching) {\n if (filtered) {\n that.focus(0);\n }\n that._createList();\n if (!action && that._values.length && !filtered && !that.options.skipUpdateOnBind) {\n that._selectingValue = true;\n that.value(that._values, true).done(function () {\n that.bound(true);\n that._selectingValue = false;\n that._triggerListBound();\n });\n } else {\n that.bound(true);\n that._triggerListBound();\n }\n } else {\n if (that._renderItems) {\n that._renderItems(true);\n }\n that._triggerListBound();\n }\n if (isItemChange || action === 'remove') {\n result = mapChangedItems(that._selectedDataItems, e.items);\n if (result.changed.length) {\n if (isItemChange) {\n that.trigger('selectedItemChange', { items: result.changed });\n } else {\n that.value(that._getValues(result.unchanged));\n }\n }\n }\n that._fetching = false;\n },\n removeAt: function (position) {\n this._selectedIndexes.splice(position, 1);\n this._values.splice(position, 1);\n return {\n position: position,\n dataItem: this._selectedDataItems.splice(position, 1)[0]\n };\n },\n setValue: function (value) {\n this._values = toArray(value);\n },\n value: function (value, _forcePrefetch) {\n var that = this;\n if (value === undefined) {\n return that._values.slice();\n }\n if (value === null) {\n value = [];\n }\n value = toArray(value);\n if (!that._valueDeferred || that._valueDeferred.state() === 'resolved') {\n that._valueDeferred = $.Deferred();\n }\n var shouldClear = that.options.selectable === 'multiple' && that.select().length && value.length;\n if (shouldClear || !value.length) {\n that.select(-1);\n }\n that._values = value;\n if (that.bound() && !that._mute && !that._deferValueSet || _forcePrefetch) {\n that._prefetchByValue(value);\n }\n return that._valueDeferred;\n },\n _prefetchByValue: function (value) {\n var that = this, dataView = that._dataView, valueGetter = that._valueGetter, mapValueTo = that.options.mapValueTo, item, match = false, forSelection = [];\n for (var i = 0; i < value.length; i++) {\n for (var idx = 0; idx < dataView.length; idx++) {\n item = dataView[idx].item;\n if (item) {\n match = isPrimitive(item) ? value[i] === item : value[i] === valueGetter(item);\n if (match) {\n forSelection.push(dataView[idx].index);\n }\n }\n }\n }\n if (forSelection.length === value.length) {\n that._values = [];\n that.select(forSelection);\n return;\n }\n if (typeof that.options.valueMapper === 'function') {\n that.options.valueMapper({\n value: this.options.selectable === 'multiple' ? value : value[0],\n success: function (response) {\n if (mapValueTo === 'index') {\n that.mapValueToIndex(response);\n } else if (mapValueTo === 'dataItem') {\n that.mapValueToDataItem(response);\n }\n }\n });\n } else {\n that.select([-1]);\n }\n },\n mapValueToIndex: function (indexes) {\n if (indexes === undefined || indexes === -1 || indexes === null) {\n indexes = [];\n } else {\n indexes = toArray(indexes);\n }\n if (!indexes.length) {\n indexes = [-1];\n } else {\n var removed = this._deselect([]).removed;\n if (removed.length) {\n this._triggerChange(removed, []);\n }\n }\n this.select(indexes);\n },\n mapValueToDataItem: function (dataItems) {\n var removed, added;\n if (dataItems === undefined || dataItems === null) {\n dataItems = [];\n } else {\n dataItems = toArray(dataItems);\n }\n if (!dataItems.length) {\n this.select([-1]);\n } else {\n removed = $.map(this._selectedDataItems, function (item, index) {\n return {\n index: index,\n dataItem: item\n };\n });\n added = $.map(dataItems, function (item, index) {\n return {\n index: index,\n dataItem: item\n };\n });\n this._selectedDataItems = dataItems;\n this._selectedIndexes = [];\n for (var i = 0; i < this._selectedDataItems.length; i++) {\n this._selectedIndexes.push(undefined);\n }\n this._triggerChange(removed, added);\n if (this._valueDeferred) {\n this._valueDeferred.resolve();\n }\n }\n },\n deferredRange: function (index) {\n var dataSource = this.dataSource;\n var take = this.itemCount;\n var ranges = this._rangesList;\n var result = $.Deferred();\n var defs = [];\n var low = Math.floor(index / take) * take;\n var high = Math.ceil(index / take) * take;\n var pages = high === low ? [high] : [\n low,\n high\n ];\n $.each(pages, function (_, skip) {\n var end = skip + take;\n var existingRange = ranges[skip];\n var deferred;\n if (!existingRange || existingRange.end !== end) {\n deferred = $.Deferred();\n ranges[skip] = {\n end: end,\n deferred: deferred\n };\n dataSource._multiplePrefetch(skip, take, function () {\n deferred.resolve();\n });\n } else {\n deferred = existingRange.deferred;\n }\n defs.push(deferred);\n });\n $.when.apply($, defs).then(function () {\n result.resolve();\n });\n return result;\n },\n prefetch: function (indexes) {\n var that = this, take = this.itemCount, isEmptyList = !that._promisesList.length;\n if (!isActivePromise(that._activeDeferred)) {\n that._activeDeferred = $.Deferred();\n that._promisesList = [];\n }\n $.each(indexes, function (_, index) {\n that._promisesList.push(that.deferredRange(that._getSkip(index, take)));\n });\n if (isEmptyList) {\n $.when.apply($, that._promisesList).done(function () {\n that._promisesList = [];\n that._activeDeferred.resolve();\n });\n }\n return that._activeDeferred;\n },\n _findDataItem: function (view, index) {\n var group;\n if (this.options.type === 'group') {\n for (var i = 0; i < view.length; i++) {\n group = view[i].items;\n if (group.length <= index) {\n index = index - group.length;\n } else {\n return group[index];\n }\n }\n }\n return view[index];\n },\n _getRange: function (skip, take) {\n return this.dataSource._findRange(skip, Math.min(skip + take, this.dataSource.total()));\n },\n dataItemByIndex: function (index) {\n var take = this.itemCount;\n var skip = this._getSkip(index, take);\n var view = this._getRange(skip, take);\n return this._findDataItem(view, [index - skip]);\n },\n selectedDataItems: function () {\n return this._selectedDataItems.slice();\n },\n scrollWith: function (value) {\n this.content.scrollTop(this.content.scrollTop() + value);\n },\n scrollTo: function (y) {\n this.content.scrollTop(y);\n },\n scrollToIndex: function (index) {\n this.scrollTo(index * this.options.itemHeight);\n },\n focus: function (candidate) {\n var element, index, data, current, itemHeight = this.options.itemHeight, id = this._optionID, triggerEvent = true;\n if (candidate === undefined) {\n current = this.element.find('.' + FOCUSED);\n return current.length ? current : null;\n }\n if (typeof candidate === 'function') {\n data = this.dataSource.flatView();\n for (var idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n candidate = idx;\n break;\n }\n }\n }\n if (candidate instanceof Array) {\n candidate = lastFrom(candidate);\n }\n if (isNaN(candidate)) {\n element = $(candidate);\n index = parseInt($(element).attr('data-offset-index'), 10);\n } else {\n index = candidate;\n element = this._getElementByIndex(index);\n }\n if (index === -1) {\n this.element.find('.' + FOCUSED).removeClass(FOCUSED);\n this._focusedIndex = undefined;\n return;\n }\n if (element.length) {\n if (element.hasClass(FOCUSED)) {\n triggerEvent = false;\n }\n if (this._focusedIndex !== undefined) {\n current = this._getElementByIndex(this._focusedIndex);\n current.removeClass(FOCUSED).removeAttr('id');\n if (triggerEvent) {\n this.trigger(DEACTIVATE);\n }\n }\n this._focusedIndex = index;\n element.addClass(FOCUSED).attr('id', id);\n var position = this._getElementLocation(index);\n if (position === 'top') {\n this.scrollTo(index * itemHeight);\n } else if (position === 'bottom') {\n this.scrollTo(index * itemHeight + itemHeight - this._screenHeight);\n } else if (position === 'outScreen') {\n this.scrollTo(index * itemHeight);\n }\n if (triggerEvent) {\n this.trigger(ACTIVATE);\n }\n } else {\n this._focusedIndex = index;\n this.items().removeClass(FOCUSED);\n this.scrollToIndex(index);\n }\n },\n focusIndex: function () {\n return this._focusedIndex;\n },\n focusFirst: function () {\n this.scrollTo(0);\n this.focus(0);\n },\n focusLast: function () {\n var lastIndex = this.dataSource.total();\n this.scrollTo(this.heightContainer.offsetHeight);\n this.focus(lastIndex);\n },\n focusPrev: function () {\n var index = this._focusedIndex;\n var current;\n if (!isNaN(index) && index > 0) {\n index -= 1;\n this.focus(index);\n current = this.focus();\n if (current && current.hasClass('k-loading-item')) {\n index += 1;\n this.focus(index);\n }\n return index;\n } else {\n index = this.dataSource.total() - 1;\n this.focus(index);\n return index;\n }\n },\n focusNext: function () {\n var index = this._focusedIndex;\n var lastIndex = this.dataSource.total() - 1;\n var current;\n if (!isNaN(index) && index < lastIndex) {\n index += 1;\n this.focus(index);\n current = this.focus();\n if (current && current.hasClass('k-loading-item')) {\n index -= 1;\n this.focus(index);\n }\n return index;\n } else {\n index = 0;\n this.focus(index);\n return index;\n }\n },\n _triggerChange: function (removed, added) {\n removed = removed || [];\n added = added || [];\n if (removed.length || added.length) {\n this.trigger(CHANGE, {\n removed: removed,\n added: added\n });\n }\n },\n select: function (candidate) {\n var that = this, indices, singleSelection = that.options.selectable !== 'multiple', prefetchStarted = isActivePromise(that._activeDeferred), filtered = this.isFiltered(), isAlreadySelected, deferred, result, removed = [];\n if (candidate === undefined) {\n return that._selectedIndexes.slice();\n }\n if (!that._selectDeferred || that._selectDeferred.state() === 'resolved') {\n that._selectDeferred = $.Deferred();\n }\n indices = that._getIndecies(candidate);\n isAlreadySelected = singleSelection && !filtered && lastFrom(indices) === lastFrom(this._selectedIndexes);\n removed = that._deselectCurrentValues(indices);\n if (removed.length || !indices.length || isAlreadySelected) {\n that._triggerChange(removed);\n if (that._valueDeferred) {\n that._valueDeferred.resolve();\n }\n return that._selectDeferred.resolve().promise();\n }\n if (indices.length === 1 && indices[0] === -1) {\n indices = [];\n }\n result = that._deselect(indices);\n removed = result.removed;\n indices = result.indices;\n if (singleSelection) {\n prefetchStarted = false;\n if (indices.length) {\n indices = [lastFrom(indices)];\n }\n }\n var done = function () {\n var added = that._select(indices);\n that.focus(indices);\n that._triggerChange(removed, added);\n if (that._valueDeferred) {\n that._valueDeferred.resolve();\n }\n that._selectDeferred.resolve();\n };\n deferred = that.prefetch(indices);\n if (!prefetchStarted) {\n if (deferred) {\n deferred.done(done);\n } else {\n done();\n }\n }\n return that._selectDeferred.promise();\n },\n bound: function (bound) {\n if (bound === undefined) {\n return this._listCreated;\n }\n this._listCreated = bound;\n },\n mute: function (callback) {\n this._mute = true;\n proxy(callback(), this);\n this._mute = false;\n },\n setDSFilter: function (filter) {\n this._lastDSFilter = $.extend({}, filter);\n },\n isFiltered: function () {\n if (!this._lastDSFilter) {\n this.setDSFilter(this.dataSource.filter());\n }\n return !kendo.data.Query.compareFilters(this.dataSource.filter(), this._lastDSFilter);\n },\n skipUpdate: $.noop,\n _getElementByIndex: function (index) {\n return this.items().filter(function (idx, element) {\n return index === parseInt($(element).attr('data-offset-index'), 10);\n });\n },\n _getElementByDataItem: function (dataItem) {\n var dataView = this._dataView, valueGetter = this._valueGetter, element, match;\n for (var i = 0; i < dataView.length; i++) {\n match = dataView[i].item && isPrimitive(dataView[i].item) ? dataView[i].item === dataItem : valueGetter(dataView[i].item) === valueGetter(dataItem);\n if (match) {\n element = dataView[i];\n break;\n }\n }\n return element ? this._getElementByIndex(element.index) : $();\n },\n _clean: function () {\n this.result = undefined;\n this._lastScrollTop = undefined;\n this._skip = undefined;\n $(this.heightContainer).remove();\n this.heightContainer = undefined;\n this.element.empty();\n },\n _height: function () {\n var hasData = !!this.dataSource.view().length, height = this.options.height, itemHeight = this.options.itemHeight, total = this.dataSource.total();\n if (!hasData) {\n height = 0;\n } else if (height / itemHeight > total) {\n height = total * itemHeight;\n }\n return height;\n },\n setScreenHeight: function () {\n var height = this._height();\n this.content.height(height);\n this._screenHeight = height;\n },\n screenHeight: function () {\n return this._screenHeight;\n },\n _getElementLocation: function (index) {\n var scrollTop = this.content.scrollTop(), screenHeight = this._screenHeight, itemHeight = this.options.itemHeight, yPosition = index * itemHeight, yDownPostion = yPosition + itemHeight, screenEnd = scrollTop + screenHeight, position;\n if (yPosition === scrollTop - itemHeight || yDownPostion > scrollTop && yPosition < scrollTop) {\n position = 'top';\n } else if (yPosition === screenEnd || yPosition < screenEnd && screenEnd < yDownPostion) {\n position = 'bottom';\n } else if (yPosition >= scrollTop && yPosition <= scrollTop + (screenHeight - itemHeight)) {\n position = 'inScreen';\n } else {\n position = 'outScreen';\n }\n return position;\n },\n _templates: function () {\n var options = this.options;\n var templates = {\n template: options.template,\n placeholderTemplate: options.placeholderTemplate,\n groupTemplate: options.groupTemplate,\n fixedGroupTemplate: options.fixedGroupTemplate\n };\n for (var key in templates) {\n if (typeof templates[key] !== 'function') {\n templates[key] = kendo.template(templates[key] || '');\n }\n }\n this.templates = templates;\n },\n _generateItems: function (element, count) {\n var items = [], item, itemHeight = this.options.itemHeight + 'px';\n while (count-- > 0) {\n item = document.createElement('li');\n item.tabIndex = -1;\n item.className = VIRTUALITEM + ' ' + ITEM;\n item.setAttribute('role', 'option');\n item.style.height = itemHeight;\n item.style.minHeight = itemHeight;\n element.appendChild(item);\n items.push(item);\n }\n return items;\n },\n _saveInitialRanges: function () {\n var ranges = this.dataSource._ranges;\n var deferred = $.Deferred();\n deferred.resolve();\n this._rangesList = {};\n for (var i = 0; i < ranges.length; i++) {\n this._rangesList[ranges[i].start] = {\n end: ranges[i].end,\n deferred: deferred\n };\n }\n },\n _createList: function () {\n var that = this, content = that.content.get(0), options = that.options, dataSource = that.dataSource;\n if (that.bound()) {\n that._clean();\n }\n that._saveInitialRanges();\n that._buildValueGetter();\n that.setScreenHeight();\n that.itemCount = getItemCount(that._screenHeight, options.listScreens, options.itemHeight);\n if (that.itemCount > dataSource.total()) {\n that.itemCount = dataSource.total();\n }\n that._items = that._generateItems(that.element[0], that.itemCount);\n that._setHeight(options.itemHeight * dataSource.total());\n that.options.type = (dataSource.group() || []).length ? 'group' : 'flat';\n if (that.options.type === 'flat') {\n that.header.hide();\n } else {\n that.header.show();\n }\n that.getter = that._getter(function () {\n that._renderItems(true);\n });\n that._onScroll = function (scrollTop, force) {\n var getList = that._listItems(that.getter);\n return that._fixedHeader(scrollTop, getList(scrollTop, force));\n };\n that._renderItems = that._whenChanged(scrollCallback(content, that._onScroll), syncList(that._reorderList(that._items, $.proxy(render, that))));\n that._renderItems();\n that._calculateGroupPadding(that._screenHeight);\n },\n _setHeight: function (height) {\n var currentHeight, heightContainer = this.heightContainer;\n if (!heightContainer) {\n heightContainer = this.heightContainer = appendChild(this.content[0], HEIGHTCONTAINER);\n } else {\n currentHeight = heightContainer.offsetHeight;\n }\n if (height !== currentHeight) {\n heightContainer.innerHTML = '';\n while (height > 0) {\n var padHeight = Math.min(height, 250000);\n appendChild(heightContainer).style.height = padHeight + 'px';\n height -= padHeight;\n }\n }\n },\n _getter: function () {\n var lastRequestedRange = null, dataSource = this.dataSource, lastRangeStart = dataSource.skip(), type = this.options.type, pageSize = this.itemCount, flatGroups = {};\n if (dataSource.pageSize() < pageSize) {\n this.mute(function () {\n dataSource.pageSize(pageSize);\n });\n }\n return function (index, rangeStart) {\n var that = this;\n if (!dataSource.inRange(rangeStart, pageSize)) {\n if (lastRequestedRange !== rangeStart) {\n lastRequestedRange = rangeStart;\n lastRangeStart = rangeStart;\n if (that._getterDeferred) {\n that._getterDeferred.reject();\n }\n that._getterDeferred = that.deferredRange(rangeStart);\n that._getterDeferred.then(function () {\n var firstItemIndex = that._indexConstraint(that.content[0].scrollTop);\n that._getterDeferred = null;\n if (rangeStart <= firstItemIndex && firstItemIndex <= rangeStart + pageSize) {\n that._fetching = true;\n dataSource.range(rangeStart, pageSize);\n }\n });\n }\n return null;\n } else {\n if (lastRangeStart !== rangeStart) {\n this.mute(function () {\n dataSource.range(rangeStart, pageSize);\n lastRangeStart = rangeStart;\n });\n }\n var result;\n if (type === 'group') {\n if (!flatGroups[rangeStart]) {\n var flatGroup = flatGroups[rangeStart] = [];\n var groups = dataSource.view();\n for (var i = 0, len = groups.length; i < len; i++) {\n var group = groups[i];\n for (var j = 0, groupLength = group.items.length; j < groupLength; j++) {\n flatGroup.push({\n item: group.items[j],\n group: group.value\n });\n }\n }\n }\n result = flatGroups[rangeStart][index - rangeStart];\n } else {\n result = dataSource.view()[index - rangeStart];\n }\n return result;\n }\n };\n },\n _fixedHeader: function (scrollTop, list) {\n var group = this.currentVisibleGroup, itemHeight = this.options.itemHeight, firstVisibleDataItemIndex = Math.floor((scrollTop - list.top) / itemHeight), firstVisibleDataItem = list.items[firstVisibleDataItemIndex];\n if (firstVisibleDataItem && firstVisibleDataItem.item) {\n var firstVisibleGroup = firstVisibleDataItem.group;\n if (firstVisibleGroup !== group) {\n this.header[0].innerHTML = firstVisibleGroup || '';\n this.currentVisibleGroup = firstVisibleGroup;\n }\n }\n return list;\n },\n _itemMapper: function (item, index, value) {\n var listType = this.options.type, itemHeight = this.options.itemHeight, currentIndex = this._focusedIndex, selected = false, current = false, newGroup = false, group = null, match = false, valueGetter = this._valueGetter;\n if (listType === 'group') {\n if (item) {\n newGroup = index === 0 || this._currentGroup && this._currentGroup !== item.group;\n this._currentGroup = item.group;\n }\n group = item ? item.group : null;\n item = item ? item.item : null;\n }\n if (!this.isFiltered() && value.length && item) {\n for (var i = 0; i < value.length; i++) {\n match = isPrimitive(item) ? value[i] === item : value[i] === valueGetter(item);\n if (match) {\n value.splice(i, 1);\n selected = true;\n break;\n }\n }\n }\n if (currentIndex === index) {\n current = true;\n }\n return {\n item: item ? item : null,\n group: group,\n newGroup: newGroup,\n selected: selected,\n current: current,\n index: index,\n top: index * itemHeight\n };\n },\n _range: function (index) {\n var itemCount = this.itemCount, value = this._values.slice(), items = [], item;\n this._view = {};\n this._currentGroup = null;\n for (var i = index, length = index + itemCount; i < length; i++) {\n item = this._itemMapper(this.getter(i, index), i, value);\n items.push(item);\n this._view[item.index] = item;\n }\n this._dataView = items;\n return items;\n },\n _getDataItemsCollection: function (scrollTop, lastScrollTop) {\n var items = this._range(this._listIndex(scrollTop, lastScrollTop));\n return {\n index: items.length ? items[0].index : 0,\n top: items.length ? items[0].top : 0,\n items: items\n };\n },\n _listItems: function () {\n var screenHeight = this._screenHeight, options = this.options;\n var theValidator = listValidator(options, screenHeight);\n return $.proxy(function (value, force) {\n var result = this.result, lastScrollTop = this._lastScrollTop;\n if (force || !result || !theValidator(result, value, lastScrollTop)) {\n result = this._getDataItemsCollection(value, lastScrollTop);\n }\n this._lastScrollTop = value;\n this.result = result;\n return result;\n }, this);\n },\n _whenChanged: function (getter, callback) {\n var current;\n return function (force) {\n var theNew = getter(force);\n if (theNew !== current) {\n current = theNew;\n callback(theNew, force);\n }\n };\n },\n _reorderList: function (list, reorder) {\n var that = this;\n var length = list.length;\n var currentOffset = -Infinity;\n reorder = $.proxy(map2(reorder, this.templates), this);\n return function (list2, offset, force) {\n var diff = offset - currentOffset;\n var range, range2;\n if (force || Math.abs(diff) >= length) {\n range = list;\n range2 = list2;\n } else {\n range = reshift(list, diff);\n range2 = diff > 0 ? list2.slice(-diff) : list2.slice(0, -diff);\n }\n reorder(range, range2, that.bound());\n currentOffset = offset;\n };\n },\n _bufferSizes: function () {\n var options = this.options;\n return bufferSizes(this._screenHeight, options.listScreens, options.oppositeBuffer);\n },\n _indexConstraint: function (position) {\n var itemCount = this.itemCount, itemHeight = this.options.itemHeight, total = this.dataSource.total();\n return Math.min(Math.max(total - itemCount, 0), Math.max(0, Math.floor(position / itemHeight)));\n },\n _listIndex: function (scrollTop, lastScrollTop) {\n var buffers = this._bufferSizes(), position;\n position = scrollTop - (scrollTop > lastScrollTop ? buffers.down : buffers.up);\n return this._indexConstraint(position);\n },\n _selectable: function () {\n if (this.options.selectable) {\n this._selectProxy = $.proxy(this, '_clickHandler');\n this.element.on(CLICK + VIRTUAL_LIST_NS, '.' + VIRTUALITEM, this._selectProxy);\n }\n },\n getElementIndex: function (element) {\n if (!(element instanceof jQuery)) {\n return undefined;\n }\n return parseInt(element.attr('data-offset-index'), 10);\n },\n _getIndecies: function (candidate) {\n var result = [], data;\n if (typeof candidate === 'function') {\n data = this.dataSource.flatView();\n for (var idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n result.push(idx);\n break;\n }\n }\n }\n if (typeof candidate === 'number') {\n result.push(candidate);\n }\n var elementIndex = this.getElementIndex(candidate);\n if (!isNaN(elementIndex)) {\n result.push(elementIndex);\n }\n if (candidate instanceof Array) {\n result = candidate;\n }\n return result;\n },\n _deselect: function (indices) {\n var removed = [], selectedIndex, dataItem, selectedIndexes = this._selectedIndexes, selectedDataItems = this._selectedDataItems, position = 0, selectable = this.options.selectable, removedindexesCounter = 0, valueGetter = this._valueGetter, item, match, result = null;\n indices = indices.slice();\n if (selectable === true || !indices.length) {\n for (var idx = 0; idx < selectedIndexes.length; idx++) {\n if (selectedIndexes[idx] !== undefined) {\n this._getElementByIndex(selectedIndexes[idx]).removeClass(SELECTED);\n } else if (selectedDataItems[idx]) {\n this._getElementByDataItem(selectedDataItems[idx]).removeClass(SELECTED);\n }\n removed.push({\n index: selectedIndexes[idx],\n position: idx,\n dataItem: selectedDataItems[idx]\n });\n }\n this._values = [];\n this._selectedDataItems = [];\n this._selectedIndexes = [];\n } else if (selectable === 'multiple') {\n for (var i = 0; i < indices.length; i++) {\n result = null;\n position = $.inArray(indices[i], selectedIndexes);\n dataItem = this.dataItemByIndex(indices[i]);\n if (position === -1 && dataItem) {\n for (var j = 0; j < selectedDataItems.length; j++) {\n match = isPrimitive(dataItem) ? selectedDataItems[j] === dataItem : valueGetter(selectedDataItems[j]) === valueGetter(dataItem);\n if (match) {\n item = this._getElementByIndex(indices[i]);\n result = this._deselectSingleItem(item, j, indices[i], removedindexesCounter);\n }\n }\n } else {\n selectedIndex = selectedIndexes[position];\n if (selectedIndex !== undefined) {\n item = this._getElementByIndex(selectedIndex);\n result = this._deselectSingleItem(item, position, selectedIndex, removedindexesCounter);\n }\n }\n if (result) {\n indices.splice(i, 1);\n removed.push(result);\n removedindexesCounter++;\n i--;\n }\n }\n }\n return {\n indices: indices,\n removed: removed\n };\n },\n _deselectSingleItem: function (item, position, selectedIndex, removedindexesCounter) {\n var dataItem;\n if (!item.hasClass('k-state-selected')) {\n return;\n }\n item.removeClass(SELECTED);\n this._values.splice(position, 1);\n this._selectedIndexes.splice(position, 1);\n dataItem = this._selectedDataItems.splice(position, 1)[0];\n return {\n index: selectedIndex,\n position: position + removedindexesCounter,\n dataItem: dataItem\n };\n },\n _deselectCurrentValues: function (indices) {\n var children = this.element[0].children;\n var value, index, position;\n var values = this._values;\n var removed = [];\n var idx = 0;\n var j;\n if (this.options.selectable !== 'multiple' || !this.isFiltered()) {\n return [];\n }\n if (indices[0] === -1) {\n $(children).removeClass('k-state-selected');\n removed = $.map(this._selectedDataItems.slice(0), function (dataItem, idx) {\n return {\n dataItem: dataItem,\n position: idx\n };\n });\n this._selectedIndexes = [];\n this._selectedDataItems = [];\n this._values = [];\n return removed;\n }\n for (; idx < indices.length; idx++) {\n position = -1;\n index = indices[idx];\n value = this._valueGetter(this.dataItemByIndex(index));\n for (j = 0; j < values.length; j++) {\n if (value == values[j]) {\n position = j;\n break;\n }\n }\n if (position > -1) {\n removed.push(this.removeAt(position));\n $(children[index]).removeClass('k-state-selected');\n }\n }\n return removed;\n },\n _getSkip: function (index, take) {\n var page = index < take ? 1 : Math.floor(index / take) + 1;\n return (page - 1) * take;\n },\n _select: function (indexes) {\n var that = this, singleSelection = this.options.selectable !== 'multiple', dataSource = this.dataSource, dataItem, oldSkip, take = this.itemCount, valueGetter = this._valueGetter, added = [];\n if (singleSelection) {\n that._selectedIndexes = [];\n that._selectedDataItems = [];\n that._values = [];\n }\n oldSkip = dataSource.skip();\n $.each(indexes, function (_, index) {\n var skip = that._getSkip(index, take);\n that.mute(function () {\n dataSource.range(skip, take);\n dataItem = that._findDataItem(dataSource.view(), [index - skip]);\n that._selectedIndexes.push(index);\n that._selectedDataItems.push(dataItem);\n that._values.push(isPrimitive(dataItem) ? dataItem : valueGetter(dataItem));\n added.push({\n index: index,\n dataItem: dataItem\n });\n that._getElementByIndex(index).addClass(SELECTED);\n dataSource.range(oldSkip, take);\n });\n });\n return added;\n },\n _clickHandler: function (e) {\n var item = $(e.currentTarget);\n if (!e.isDefaultPrevented() && item.attr('data-uid')) {\n this.trigger(CLICK, { item: item });\n }\n },\n _buildValueGetter: function () {\n this._valueGetter = kendo.getter(this.options.dataValueField);\n },\n _calculateGroupPadding: function (height) {\n var firstItem = this.items().first(), groupHeader = this.header, padding = 0;\n if (groupHeader[0] && groupHeader[0].style.display !== 'none') {\n if (height !== 'auto') {\n padding = kendo.support.scrollbar();\n }\n padding += parseFloat(firstItem.css('border-right-width'), 10) + parseFloat(firstItem.children('.k-group').css('right'), 10);\n groupHeader.css('padding-right', padding);\n }\n }\n });\n kendo.ui.VirtualList = VirtualList;\n kendo.ui.plugin(VirtualList);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.scheduler.view', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'scheduler.view',\n name: 'Scheduler View',\n category: 'web',\n description: 'The Scheduler Common View',\n depends: ['core'],\n hidden: true\n };\n kendo.ui.scheduler = {};\n (function ($) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, outerHeight = kendo._outerHeight, keys = kendo.keys, NS = '.kendoSchedulerView', math = Math;\n function levels(values, key) {\n var result = [];\n function collect(depth, values) {\n values = values[key];\n if (values) {\n var level = result[depth] = result[depth] || [];\n for (var idx = 0; idx < values.length; idx++) {\n level.push(values[idx]);\n collect(depth + 1, values[idx]);\n }\n }\n }\n collect(0, values);\n return result;\n }\n function cellspacing() {\n if (kendo.support.cssBorderSpacing) {\n return '';\n }\n return 'cellspacing=\"0\"';\n }\n function table(tableRows, className) {\n if (!tableRows.length) {\n return '';\n }\n return '<table ' + cellspacing() + ' class=\"' + $.trim('k-scheduler-table ' + (className || '')) + '\">' + '<tr>' + tableRows.join('</tr><tr>') + '</tr>' + '</table>';\n }\n function allDayTable(tableRows, className) {\n if (!tableRows.length) {\n return '';\n }\n return '<div style=\\'position:relative\\'>' + table(tableRows, className) + '</div>';\n }\n function timesHeader(columnLevelCount, allDaySlot, rowCount) {\n var tableRows = [];\n if (rowCount > 0) {\n for (var idx = 0; idx < columnLevelCount; idx++) {\n tableRows.push('<th> </th>');\n }\n }\n if (allDaySlot) {\n tableRows.push('<th class=\"k-scheduler-times-all-day\">' + allDaySlot.text + '</th>');\n }\n if (rowCount < 1) {\n return $();\n }\n return $('<div class=\"k-scheduler-times\">' + table(tableRows) + '</div>');\n }\n function datesHeader(columnLevels, columnCount, allDaySlot) {\n var dateTableRows = [];\n var columnIndex;\n for (var columnLevelIndex = 0; columnLevelIndex < columnLevels.length; columnLevelIndex++) {\n var level = columnLevels[columnLevelIndex];\n var th = [];\n var colspan = columnCount / level.length;\n for (columnIndex = 0; columnIndex < level.length; columnIndex++) {\n var column = level[columnIndex];\n th.push('<th colspan=\"' + (column.colspan || colspan) + '\" class=\"' + (column.className || '') + '\">' + column.text + '</th>');\n }\n dateTableRows.push(th.join(''));\n }\n var allDayTableRows = [];\n if (allDaySlot) {\n var lastLevel = columnLevels[columnLevels.length - 1];\n var td = [];\n var cellContent = allDaySlot.cellContent;\n for (columnIndex = 0; columnIndex < lastLevel.length; columnIndex++) {\n td.push('<td class=\"' + (lastLevel[columnIndex].className || '') + '\">' + (cellContent ? cellContent(columnIndex) : ' ') + '</td>');\n }\n allDayTableRows.push(td.join(''));\n }\n return $('<div class=\"k-scheduler-header k-state-default\">' + '<div class=\"k-scheduler-header-wrap\">' + table(dateTableRows) + allDayTable(allDayTableRows, 'k-scheduler-header-all-day') + '</div>' + '</div>');\n }\n function times(rowLevels, rowCount) {\n var rows = new Array(rowCount).join().split(',');\n var rowHeaderRows = [];\n var rowIndex;\n for (var rowLevelIndex = 0; rowLevelIndex < rowLevels.length; rowLevelIndex++) {\n var level = rowLevels[rowLevelIndex];\n var rowspan = rowCount / level.length;\n var className;\n for (rowIndex = 0; rowIndex < level.length; rowIndex++) {\n className = level[rowIndex].className || '';\n if (level[rowIndex].allDay) {\n className = 'k-scheduler-times-all-day';\n }\n rows[rowspan * rowIndex] += '<th class=\"' + className + '\" rowspan=\"' + rowspan + '\">' + level[rowIndex].text + '</th>';\n }\n }\n for (rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n rowHeaderRows.push(rows[rowIndex]);\n }\n if (rowCount < 1) {\n return $();\n }\n return $('<div class=\"k-scheduler-times\">' + table(rowHeaderRows) + '</div>');\n }\n function content() {\n return $('<div class=\"k-scheduler-content\">' + '<table ' + cellspacing() + ' class=\"k-scheduler-table\"/>' + '</div>');\n }\n var HINT = '<div class=\"k-marquee k-scheduler-marquee\">' + '<div class=\"k-marquee-color\"></div>' + '<div class=\"k-marquee-text\">' + '<div class=\"k-label-top\"></div>' + '<div class=\"k-label-bottom\"></div>' + '</div>' + '</div>';\n var ResourceView = kendo.Class.extend({\n init: function (index, isRtl) {\n this._index = index;\n this._timeSlotCollections = [];\n this._daySlotCollections = [];\n this._isRtl = isRtl;\n },\n addTimeSlotCollection: function (startDate, endDate) {\n return this._addCollection(startDate, endDate, this._timeSlotCollections);\n },\n addDaySlotCollection: function (startDate, endDate) {\n return this._addCollection(startDate, endDate, this._daySlotCollections);\n },\n _addCollection: function (startDate, endDate, collections) {\n var collection = new SlotCollection(startDate, endDate, this._index, collections.length);\n collections.push(collection);\n return collection;\n },\n timeSlotCollectionCount: function () {\n return this._timeSlotCollections.length;\n },\n daySlotCollectionCount: function () {\n return this._daySlotCollections.length;\n },\n daySlotByPosition: function (x, y, byDate) {\n return this._slotByPosition(x, y, this._daySlotCollections, byDate);\n },\n timeSlotByPosition: function (x, y, byDate) {\n return this._slotByPosition(x, y, this._timeSlotCollections, byDate);\n },\n _slotByPosition: function (x, y, collections, byDate) {\n for (var collectionIndex = 0; collectionIndex < collections.length; collectionIndex++) {\n var collection = collections[collectionIndex];\n for (var slotIndex = 0; slotIndex < collection.count(); slotIndex++) {\n var slot = collection.at(slotIndex);\n var width = slot.offsetWidth;\n var height = slot.offsetHeight;\n var nextSlot;\n var horizontalEnd = slot.offsetLeft + width;\n var verticalEnd = slot.offsetTop + height;\n if (!byDate) {\n nextSlot = collection.at(slotIndex + 1);\n }\n if (nextSlot) {\n if (nextSlot.offsetLeft != slot.offsetLeft) {\n if (this._isRtl) {\n horizontalEnd = slot.offsetLeft + (slot.offsetLeft - nextSlot.offsetLeft);\n } else {\n horizontalEnd = nextSlot.offsetLeft;\n }\n } else {\n verticalEnd = nextSlot.offsetTop;\n }\n }\n if (x >= slot.offsetLeft && x < horizontalEnd && y >= slot.offsetTop && y < verticalEnd) {\n return slot;\n }\n }\n }\n },\n refresh: function () {\n var collectionIndex;\n for (collectionIndex = 0; collectionIndex < this._daySlotCollections.length; collectionIndex++) {\n this._daySlotCollections[collectionIndex].refresh();\n }\n for (collectionIndex = 0; collectionIndex < this._timeSlotCollections.length; collectionIndex++) {\n this._timeSlotCollections[collectionIndex].refresh();\n }\n },\n timeSlotRanges: function (startTime, endTime) {\n var collections = this._timeSlotCollections;\n var start = this._startSlot(startTime, collections);\n if (!start.inRange && startTime >= start.slot.end) {\n start = null;\n }\n var end = start;\n if (startTime < endTime) {\n end = this._endSlot(endTime, collections);\n }\n if (end && !end.inRange && endTime <= end.slot.start) {\n end = null;\n }\n if (start === null && end === null) {\n return [];\n }\n if (start === null) {\n start = {\n inRange: true,\n slot: collections[end.slot.collectionIndex].first()\n };\n }\n if (end === null) {\n end = {\n inRange: true,\n slot: collections[start.slot.collectionIndex].last()\n };\n }\n return this._continuousRange(TimeSlotRange, collections, start, end);\n },\n daySlotRanges: function (startTime, endTime, isAllDay) {\n var collections = this._daySlotCollections;\n var start = this._startSlot(startTime, collections, isAllDay);\n if (!start.inRange && startTime >= start.slot.end) {\n start = null;\n }\n var end = start;\n if (startTime < endTime) {\n end = this._endSlot(endTime, collections, isAllDay);\n }\n if (end && !end.inRange && endTime <= end.slot.start) {\n end = null;\n }\n if (start === null && end === null) {\n return [];\n }\n if (start === null) {\n do {\n startTime += kendo.date.MS_PER_DAY;\n start = this._startSlot(startTime, collections, isAllDay);\n } while (!start.inRange && startTime >= start.slot.end);\n }\n if (end === null) {\n do {\n endTime -= kendo.date.MS_PER_DAY;\n end = this._endSlot(endTime, collections, isAllDay);\n } while (!end.inRange && endTime <= end.slot.start);\n }\n return this._continuousRange(DaySlotRange, collections, start, end);\n },\n _continuousRange: function (range, collections, start, end) {\n var startSlot = start.slot;\n var endSlot = end.slot;\n var startIndex = startSlot.collectionIndex;\n var endIndex = endSlot.collectionIndex;\n var ranges = [];\n for (var collectionIndex = startIndex; collectionIndex <= endIndex; collectionIndex++) {\n var collection = collections[collectionIndex];\n var first = collection.first();\n var last = collection.last();\n var head = false;\n var tail = false;\n if (collectionIndex == startIndex) {\n tail = !start.inRange;\n }\n if (collectionIndex == endIndex) {\n head = !end.inRange;\n }\n if (first.start < startSlot.start) {\n first = startSlot;\n }\n if (last.start > endSlot.start) {\n last = endSlot;\n }\n if (startIndex < endIndex) {\n if (collectionIndex == startIndex) {\n head = true;\n } else if (collectionIndex == endIndex) {\n tail = true;\n } else {\n head = tail = true;\n }\n }\n ranges.push(new range({\n start: first,\n end: last,\n collection: collection,\n head: head,\n tail: tail\n }));\n }\n return ranges;\n },\n slotRanges: function (event, isDay) {\n var startTime = event._startTime || kendo.date.toUtcTime(event.start);\n var endTime = event._endTime || kendo.date.toUtcTime(event.end);\n if (isDay === undefined) {\n isDay = event.isMultiDay();\n }\n if (isDay) {\n return this.daySlotRanges(startTime, endTime, event.isAllDay);\n }\n return this.timeSlotRanges(startTime, endTime);\n },\n ranges: function (startTime, endTime, isDay, isAllDay) {\n if (typeof startTime != 'number') {\n startTime = kendo.date.toUtcTime(startTime);\n }\n if (typeof endTime != 'number') {\n endTime = kendo.date.toUtcTime(endTime);\n }\n if (isDay) {\n return this.daySlotRanges(startTime, endTime, isAllDay);\n }\n return this.timeSlotRanges(startTime, endTime);\n },\n _startCollection: function (date, collections) {\n for (var collectionIndex = 0; collectionIndex < collections.length; collectionIndex++) {\n var collection = collections[collectionIndex];\n if (collection.startInRange(date)) {\n return collection;\n }\n }\n return null;\n },\n _endCollection: function (date, collections, isAllDay) {\n for (var collectionIndex = 0; collectionIndex < collections.length; collectionIndex++) {\n var collection = collections[collectionIndex];\n if (collection.endInRange(date, isAllDay)) {\n return collection;\n }\n }\n return null;\n },\n _getCollections: function (isDay) {\n return isDay ? this._daySlotCollections : this._timeSlotCollections;\n },\n continuousSlot: function (slot, reverse) {\n var pad = reverse ? -1 : 1;\n var collections = this._getCollections(slot.isDaySlot);\n var collection = collections[slot.collectionIndex + pad];\n return collection ? collection[reverse ? 'last' : 'first']() : undefined;\n },\n firstSlot: function () {\n var collections = this._getCollections(this.daySlotCollectionCount());\n return collections[0].first();\n },\n lastSlot: function () {\n var collections = this._getCollections(this.daySlotCollectionCount());\n return collections[collections.length - 1].last();\n },\n upSlot: function (slot, keepCollection, groupByDateVertically) {\n var that = this;\n var moveToDaySlot = function (isDaySlot, collectionIndex, index) {\n var isFirstCell = index === 0;\n if (!keepCollection && !isDaySlot && isFirstCell && that.daySlotCollectionCount()) {\n return that._daySlotCollections[0].at(collectionIndex);\n }\n };\n if (!this.timeSlotCollectionCount()) {\n keepCollection = true;\n }\n return this._verticalSlot(slot, -1, moveToDaySlot, groupByDateVertically);\n },\n downSlot: function (slot, keepCollection, groupByDateVertically) {\n var that = this;\n var moveToTimeSlot = function (isDaySlot, collectionIndex, index) {\n if (!keepCollection && isDaySlot && that.timeSlotCollectionCount()) {\n return that._timeSlotCollections[index].at(0);\n }\n };\n if (!this.timeSlotCollectionCount()) {\n keepCollection = true;\n }\n return this._verticalSlot(slot, 1, moveToTimeSlot, groupByDateVertically);\n },\n leftSlot: function (slot, groupByDateVertically) {\n return this._horizontalSlot(slot, -1, groupByDateVertically);\n },\n rightSlot: function (slot, groupByDateVertically) {\n return this._horizontalSlot(slot, 1, groupByDateVertically);\n },\n _horizontalSlot: function (slot, step, groupByDateVertically) {\n var index = slot.index;\n var isDaySlot = slot.isDaySlot;\n var collectionIndex = slot.collectionIndex;\n var collections = this._getCollections(isDaySlot);\n isDaySlot = groupByDateVertically ? false : isDaySlot;\n if (isDaySlot) {\n index += step;\n } else {\n collectionIndex += step;\n }\n var collection = collections[collectionIndex];\n return collection ? collection.at(index) : undefined;\n },\n _verticalSlot: function (slot, step, swapCollection, groupByDateVertically) {\n var index = slot.index;\n var isDaySlot = slot.isDaySlot;\n var collectionIndex = slot.collectionIndex;\n var collections = this._getCollections(isDaySlot);\n slot = swapCollection(isDaySlot, collectionIndex, index);\n if (slot) {\n return slot;\n }\n isDaySlot = groupByDateVertically ? false : isDaySlot;\n if (isDaySlot) {\n collectionIndex += step;\n } else {\n index += step;\n }\n var collection = collections[collectionIndex];\n return collection ? collection.at(index) : undefined;\n },\n _collection: function (index, multiday) {\n var collections = multiday ? this._daySlotCollections : this._timeSlotCollections;\n return collections[index];\n },\n _startSlot: function (time, collections, isAllDay) {\n var collection = this._startCollection(time, collections);\n var inRange = true;\n if (!collection) {\n collection = collections[0];\n inRange = false;\n }\n var slot = collection.slotByStartDate(time, isAllDay);\n if (!slot) {\n slot = collection.first();\n inRange = false;\n }\n return {\n slot: slot,\n inRange: inRange\n };\n },\n _endSlot: function (time, collections, isAllDay) {\n var collection = this._endCollection(time, collections, isAllDay);\n var inRange = true;\n if (!collection) {\n collection = collections[collections.length - 1];\n inRange = false;\n }\n var slot = collection.slotByEndDate(time, isAllDay);\n if (!slot) {\n slot = collection.last();\n inRange = false;\n }\n return {\n slot: slot,\n inRange: inRange\n };\n },\n getSlotCollection: function (index, isDay) {\n return this[isDay ? 'getDaySlotCollection' : 'getTimeSlotCollection'](index);\n },\n getTimeSlotCollection: function (index) {\n return this._timeSlotCollections[index];\n },\n getDaySlotCollection: function (index) {\n return this._daySlotCollections[index];\n }\n });\n var SlotRange = kendo.Class.extend({\n init: function (options) {\n $.extend(this, options);\n },\n innerHeight: function () {\n var collection = this.collection;\n var startIndex = this.start.index;\n var endIndex = this.end.index;\n var result = 0;\n for (var slotIndex = startIndex; slotIndex <= endIndex; slotIndex++) {\n result += collection.at(slotIndex).offsetHeight;\n }\n return result;\n },\n events: function () {\n return this.collection.events();\n },\n addEvent: function (event) {\n this.events().push(event);\n },\n startSlot: function () {\n if (this.start.offsetLeft > this.end.offsetLeft) {\n return this.end;\n }\n return this.start;\n },\n endSlot: function () {\n if (this.start.offsetLeft > this.end.offsetLeft) {\n return this.start;\n }\n return this.end;\n }\n });\n var TimeSlotRange = SlotRange.extend({\n innerHeight: function () {\n var collection = this.collection;\n var startIndex = this.start.index;\n var endIndex = this.end.index;\n var result = 0;\n for (var slotIndex = startIndex; slotIndex <= endIndex; slotIndex++) {\n result += collection.at(slotIndex).offsetHeight;\n }\n return result;\n },\n outerRect: function (start, end, snap) {\n return this._rect('offset', start, end, snap);\n },\n _rect: function (property, start, end, snap) {\n var top;\n var bottom;\n var left;\n var right;\n var startSlot = this.start;\n var endSlot = this.end;\n var isRtl = kendo.support.isRtl(startSlot.element);\n if (typeof start != 'number') {\n start = kendo.date.toUtcTime(start);\n }\n if (typeof end != 'number') {\n end = kendo.date.toUtcTime(end);\n }\n if (snap) {\n top = startSlot.offsetTop;\n bottom = endSlot.offsetTop + endSlot[property + 'Height'];\n if (isRtl) {\n left = endSlot.offsetLeft;\n right = startSlot.offsetLeft + startSlot[property + 'Width'];\n } else {\n left = startSlot.offsetLeft;\n right = endSlot.offsetLeft + endSlot[property + 'Width'];\n }\n } else {\n var startOffset = start - startSlot.start;\n if (startOffset < 0) {\n startOffset = 0;\n }\n var startSlotDuration = startSlot.end - startSlot.start;\n top = startSlot.offsetTop + startSlot[property + 'Height'] * startOffset / startSlotDuration;\n var endOffset = endSlot.end - end;\n if (endOffset < 0) {\n endOffset = 0;\n }\n var endSlotDuration = endSlot.end - endSlot.start;\n bottom = endSlot.offsetTop + endSlot[property + 'Height'] - endSlot[property + 'Height'] * endOffset / endSlotDuration;\n if (isRtl) {\n left = Math.round(endSlot.offsetLeft + endSlot[property + 'Width'] * endOffset / endSlotDuration);\n right = Math.round(startSlot.offsetLeft + startSlot[property + 'Width'] - startSlot[property + 'Width'] * startOffset / startSlotDuration);\n } else {\n left = Math.round(startSlot.offsetLeft + startSlot[property + 'Width'] * startOffset / startSlotDuration);\n right = Math.round(endSlot.offsetLeft + endSlot[property + 'Width'] - endSlot[property + 'Width'] * endOffset / endSlotDuration);\n }\n }\n return {\n top: top,\n bottom: bottom,\n left: left === 0 ? left : left + 1,\n right: right\n };\n },\n innerRect: function (start, end, snap) {\n return this._rect('client', start, end, snap);\n }\n });\n var DaySlotRange = SlotRange.extend({\n innerWidth: function () {\n var collection = this.collection;\n var startIndex = this.start.index;\n var endIndex = this.end.index;\n var result = 0;\n var width = startIndex !== endIndex ? 'offsetWidth' : 'clientWidth';\n for (var slotIndex = startIndex; slotIndex <= endIndex; slotIndex++) {\n result += collection.at(slotIndex)[width];\n }\n return result;\n }\n });\n var SlotCollection = kendo.Class.extend({\n init: function (startDate, endDate, groupIndex, collectionIndex) {\n this._slots = [];\n this._events = [];\n this._start = kendo.date.toUtcTime(startDate);\n this._end = kendo.date.toUtcTime(endDate);\n this._groupIndex = groupIndex;\n this._collectionIndex = collectionIndex;\n },\n refresh: function () {\n for (var slotIndex = 0; slotIndex < this._slots.length; slotIndex++) {\n this._slots[slotIndex].refresh();\n }\n },\n startInRange: function (date) {\n return this._start <= date && date < this._end;\n },\n endInRange: function (date, isAllDay) {\n var end = isAllDay ? date < this._end : date <= this._end;\n return this._start <= date && end;\n },\n slotByStartDate: function (date) {\n var time = date;\n if (typeof time != 'number') {\n time = kendo.date.toUtcTime(date);\n }\n for (var slotIndex = 0; slotIndex < this._slots.length; slotIndex++) {\n var slot = this._slots[slotIndex];\n if (slot.startInRange(time)) {\n return slot;\n }\n }\n return null;\n },\n slotByEndDate: function (date, allday) {\n var time = date;\n if (typeof time != 'number') {\n time = kendo.date.toUtcTime(date);\n }\n if (allday) {\n return this.slotByStartDate(date, false);\n }\n for (var slotIndex = 0; slotIndex < this._slots.length; slotIndex++) {\n var slot = this._slots[slotIndex];\n if (slot.endInRange(time)) {\n return slot;\n }\n }\n return null;\n },\n count: function () {\n return this._slots.length;\n },\n events: function () {\n return this._events;\n },\n addTimeSlot: function (element, start, end, isHorizontal) {\n var slot = new TimeSlot(element, start, end, this._groupIndex, this._collectionIndex, this._slots.length, isHorizontal);\n this._slots.push(slot);\n },\n addDaySlot: function (element, start, end, eventCount) {\n var slot = new DaySlot(element, start, end, this._groupIndex, this._collectionIndex, this._slots.length, eventCount);\n this._slots.push(slot);\n },\n first: function () {\n return this._slots[0];\n },\n last: function () {\n return this._slots[this._slots.length - 1];\n },\n at: function (index) {\n return this._slots[index];\n }\n });\n var Slot = kendo.Class.extend({\n init: function (element, start, end, groupIndex, collectionIndex, index) {\n this.element = element;\n this.clientWidth = element.clientWidth;\n this.clientHeight = element.clientHeight;\n this.offsetWidth = element.offsetWidth;\n this.offsetHeight = element.offsetHeight;\n this.offsetTop = element.offsetTop;\n this.offsetLeft = element.offsetLeft;\n this.start = start;\n this.end = end;\n this.element = element;\n this.groupIndex = groupIndex;\n this.collectionIndex = collectionIndex;\n this.index = index;\n this.isDaySlot = false;\n },\n refresh: function () {\n var element = this.element;\n this.clientWidth = element.clientWidth;\n this.clientHeight = element.clientHeight;\n this.offsetWidth = element.offsetWidth;\n this.offsetHeight = element.offsetHeight;\n this.offsetTop = element.offsetTop;\n this.offsetLeft = element.offsetLeft;\n },\n startDate: function () {\n return kendo.timezone.toLocalDate(this.start);\n },\n endDate: function () {\n return kendo.timezone.toLocalDate(this.end);\n },\n startInRange: function (date) {\n return this.start <= date && date < this.end;\n },\n endInRange: function (date) {\n return this.start < date && date <= this.end;\n },\n startOffset: function () {\n return this.start;\n },\n endOffset: function () {\n return this.end;\n }\n });\n var TimeSlot = Slot.extend({\n init: function (element, start, end, groupIndex, collectionIndex, index, isHorizontal) {\n Slot.fn.init.apply(this, arguments);\n this.isHorizontal = isHorizontal ? true : false;\n },\n offsetX: function (rtl, offset) {\n if (rtl) {\n return this.offsetLeft + offset;\n } else {\n return this.offsetLeft + offset;\n }\n },\n startInRange: function (date) {\n return this.start <= date && date < this.end;\n },\n endInRange: function (date) {\n return this.start < date && date <= this.end;\n },\n startOffset: function (x, y, snap) {\n if (snap) {\n return this.start;\n }\n var offset = $(this.element).offset();\n var duration = this.end - this.start;\n var difference;\n var time;\n if (this.isHorizontal) {\n var isRtl = kendo.support.isRtl(this.element);\n difference = x - offset.left;\n time = Math.floor(duration * (difference / this.offsetWidth));\n if (isRtl) {\n return this.start + duration - time;\n }\n } else {\n difference = y - offset.top;\n time = Math.floor(duration * (difference / this.offsetHeight));\n }\n return this.start + time;\n },\n endOffset: function (x, y, snap) {\n if (snap) {\n return this.end;\n }\n var offset = $(this.element).offset();\n var duration = this.end - this.start;\n var difference;\n var time;\n if (this.isHorizontal) {\n var isRtl = kendo.support.isRtl(this.element);\n difference = x - offset.left;\n time = Math.floor(duration * (difference / this.offsetWidth));\n if (isRtl) {\n return this.start + duration - time;\n }\n } else {\n difference = y - offset.top;\n time = Math.floor(duration * (difference / this.offsetHeight));\n }\n return this.start + time;\n }\n });\n var DaySlot = Slot.extend({\n init: function (element, start, end, groupIndex, collectionIndex, index, eventCount) {\n Slot.fn.init.apply(this, arguments);\n this.eventCount = eventCount;\n this.isDaySlot = true;\n if (this.element.children.length) {\n this.firstChildHeight = this.element.children[0].offsetHeight + 3;\n this.firstChildTop = this.element.children[0].offsetTop;\n } else {\n this.firstChildHeight = 3;\n this.firstChildTop = 0;\n }\n },\n startDate: function () {\n var date = new Date(this.start);\n return kendo.timezone.apply(date, 'Etc/UTC');\n },\n endDate: function () {\n var date = new Date(this.end);\n return kendo.timezone.apply(date, 'Etc/UTC');\n },\n startInRange: function (date) {\n return this.start <= date && date < this.end;\n },\n endInRange: function (date) {\n return this.start < date && date <= this.end;\n }\n });\n var scrollbarWidth;\n function scrollbar() {\n scrollbarWidth = scrollbarWidth ? scrollbarWidth : kendo.support.scrollbar();\n return scrollbarWidth;\n }\n kendo.ui.SchedulerView = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this._normalizeOptions();\n this._scrollbar = scrollbar();\n this._isRtl = kendo.support.isRtl(element);\n this._resizeHint = $();\n this._moveHint = $();\n this._cellId = kendo.guid();\n this._resourcesForGroups();\n this._selectedSlots = [];\n },\n _normalizeOptions: function () {\n var options = this.options;\n if (options.startTime) {\n options.startTime.setMilliseconds(0);\n }\n if (options.endTime) {\n options.endTime.setMilliseconds(0);\n }\n if (options.workDayStart) {\n options.workDayStart.setMilliseconds(0);\n }\n if (options.workDayEnd) {\n options.workDayEnd.setMilliseconds(0);\n }\n },\n _isMobile: function () {\n var options = this.options;\n return options.mobile === true && kendo.support.mobileOS || options.mobile === 'phone' || options.mobile === 'tablet';\n },\n _isMobilePhoneView: function () {\n var options = this.options;\n return options.mobile === true && kendo.support.mobileOS && !kendo.support.mobileOS.tablet || options.mobile === 'phone';\n },\n _addResourceView: function () {\n var resourceView = new ResourceView(this.groups.length, this._isRtl);\n this.groups.push(resourceView);\n return resourceView;\n },\n dateForTitle: function () {\n return kendo.format(this.options.selectedDateFormat, this.startDate(), this.endDate());\n },\n shortDateForTitle: function () {\n return kendo.format(this.options.selectedShortDateFormat, this.startDate(), this.endDate());\n },\n _changeGroup: function (selection, previous) {\n var method = previous ? 'prevGroupSlot' : 'nextGroupSlot';\n var slot = this[method](selection.start, selection.groupIndex, selection.isAllDay);\n if (slot) {\n selection.groupIndex += previous ? -1 : 1;\n }\n if (this._isGroupedByDate() && !slot) {\n selection.groupIndex = previous ? this.groups.length - 1 : 0;\n }\n return slot;\n },\n _changeDate: function (selection, slot, previous) {\n var group = this.groups[selection.groupIndex];\n var collections, index;\n if (previous) {\n collections = group._getCollections(false);\n index = group.daySlotCollectionCount() ? slot.index - 1 : slot.collectionIndex - 1;\n if (index >= 0) {\n return collections[index]._slots[collections[index]._slots.length - 1];\n }\n } else {\n collections = group._getCollections(group.daySlotCollectionCount());\n index = group.daySlotCollectionCount() ? 0 : slot.collectionIndex + 1;\n var slotIndex = group.daySlotCollectionCount() ? slot.collectionIndex + 1 : 0;\n if (collections[index] && collections[index]._slots[slotIndex]) {\n return collections[index]._slots[slotIndex];\n }\n }\n },\n _changeGroupContinuously: function () {\n return null;\n },\n _changeViewPeriod: function () {\n return false;\n },\n _horizontalSlots: function (selection, ranges, multiple, reverse) {\n var method = reverse ? 'leftSlot' : 'rightSlot';\n var horizontalRange = {\n startSlot: ranges[0].start,\n endSlot: ranges[ranges.length - 1].end\n };\n var group = this.groups[selection.groupIndex];\n var isVertical = this._isVerticallyGrouped();\n if (!multiple) {\n var slot = this._normalizeHorizontalSelection(selection, ranges, reverse);\n if (slot) {\n horizontalRange.startSlot = horizontalRange.endSlot = slot;\n }\n }\n if (this._isGroupedByDate() && !multiple) {\n var tempSlot = this._changeGroup(selection, reverse);\n if (!tempSlot) {\n horizontalRange = this._getNextHorizontalRange(group, method, horizontalRange);\n } else {\n horizontalRange.startSlot = horizontalRange.endSlot = tempSlot;\n }\n } else {\n horizontalRange.startSlot = group[method](horizontalRange.startSlot);\n horizontalRange.endSlot = group[method](horizontalRange.endSlot);\n if (!multiple && !isVertical && (!horizontalRange.startSlot || !horizontalRange.endSlot)) {\n horizontalRange.startSlot = horizontalRange.endSlot = this._changeGroup(selection, reverse);\n }\n }\n var continuousSlot;\n if ((!horizontalRange.startSlot || !horizontalRange.endSlot) && !this._isGroupedByDate()) {\n continuousSlot = this._continuousSlot(selection, ranges, reverse);\n continuousSlot = this._changeGroupContinuously(selection, continuousSlot, multiple, reverse);\n if (continuousSlot) {\n horizontalRange.startSlot = horizontalRange.endSlot = continuousSlot;\n }\n }\n return horizontalRange;\n },\n _getNextHorizontalRange: function (group, method, horizontalRange) {\n if (!this._isVerticallyGrouped()) {\n horizontalRange.startSlot = group[method](horizontalRange.startSlot);\n horizontalRange.endSlot = group[method](horizontalRange.endSlot);\n }\n return horizontalRange;\n },\n _verticalSlots: function (selection, ranges, multiple, reverse) {\n var group = this.groups[selection.groupIndex];\n var slot;\n var verticalRange = {\n startSlot: ranges[0].start,\n endSlot: ranges[ranges.length - 1].end\n };\n if (!multiple) {\n slot = this._normalizeVerticalSelection(selection, ranges, reverse);\n if (slot) {\n verticalRange.startSlot = verticalRange.endSlot = slot;\n }\n }\n var method = reverse ? 'upSlot' : 'downSlot';\n verticalRange = this._getNextVerticalRange(group, method, verticalRange, multiple);\n if (!multiple && this._isVerticallyGrouped() && (!verticalRange.startSlot || !verticalRange.endSlot)) {\n if (this._isGroupedByDate()) {\n verticalRange.startSlot = verticalRange.endSlot = this._changeDate(selection, slot, reverse);\n } else {\n verticalRange.startSlot = verticalRange.endSlot = this._changeGroup(selection, reverse);\n }\n }\n return verticalRange;\n },\n _getNextVerticalRange: function (group, method, verticalRange, multiple) {\n verticalRange.startSlot = group[method](verticalRange.startSlot, multiple);\n verticalRange.endSlot = group[method](verticalRange.endSlot, multiple);\n return verticalRange;\n },\n _normalizeHorizontalSelection: function () {\n return null;\n },\n _normalizeVerticalSelection: function (selection, ranges, reverse) {\n var slot;\n if (reverse) {\n slot = ranges[0].start;\n } else {\n slot = ranges[ranges.length - 1].end;\n }\n return slot;\n },\n _continuousSlot: function () {\n return null;\n },\n constrainSelection: function (selection) {\n var group = this.groups[0];\n var slot;\n if (!this.inRange(selection)) {\n slot = group.firstSlot();\n selection.isAllDay = slot.isDaySlot;\n selection.start = slot.startDate();\n selection.end = slot.endDate();\n } else {\n if (!group.daySlotCollectionCount()) {\n selection.isAllDay = false;\n } else if (!group.timeSlotCollectionCount()) {\n selection.isAllDay = true;\n }\n }\n if (!this.groups[selection.groupIndex]) {\n selection.groupIndex = 0;\n }\n },\n move: function (selection, key, shift) {\n var handled = false;\n var group = this.groups[selection.groupIndex];\n var verticalByDate = this._isGroupedByDate() && this._isVerticallyGrouped();\n if (!group.timeSlotCollectionCount()) {\n selection.isAllDay = true;\n }\n var ranges = group.ranges(selection.start, selection.end, selection.isAllDay, false);\n var startSlot, endSlot, reverse, slots;\n if (key === keys.DOWN || key === keys.UP) {\n handled = true;\n reverse = key === keys.UP;\n this._updateDirection(selection, ranges, shift, reverse, true);\n slots = this._verticalSlots(selection, ranges, shift, reverse);\n if (!slots.startSlot && !shift && this._changeViewPeriod(selection, reverse, !verticalByDate)) {\n return handled;\n }\n } else if (key === keys.LEFT || key === keys.RIGHT) {\n handled = true;\n reverse = key === keys.LEFT;\n this._updateDirection(selection, ranges, shift, reverse, false);\n slots = this._horizontalSlots(selection, ranges, shift, reverse);\n if (!slots.startSlot && !shift && this._changeViewPeriod(selection, reverse, verticalByDate)) {\n return handled;\n }\n }\n if (handled) {\n startSlot = slots.startSlot;\n endSlot = slots.endSlot;\n if (shift) {\n var backward = selection.backward;\n if (backward && startSlot) {\n selection.start = startSlot.startDate();\n } else if (!backward && endSlot) {\n selection.end = endSlot.endDate();\n }\n } else if (startSlot && endSlot) {\n selection.isAllDay = startSlot.isDaySlot;\n selection.start = startSlot.startDate();\n selection.end = endSlot.endDate();\n }\n selection.events = [];\n }\n return handled;\n },\n moveToEventInGroup: function (group, slot, selectedEvents, prev) {\n var events = group._continuousEvents || [];\n var found, event;\n var pad = prev ? -1 : 1;\n var length = events.length;\n var idx = prev ? length - 1 : 0;\n while (idx < length && idx > -1) {\n event = events[idx];\n if (!prev && event.start.startDate() >= slot.startDate() || prev && event.start.startDate() <= slot.startDate()) {\n if (selectedEvents.length) {\n event = events[idx + pad];\n }\n if (event && $.inArray(event.uid, selectedEvents) === -1) {\n found = !!event;\n break;\n }\n }\n idx += pad;\n }\n return event;\n },\n moveToEvent: function (selection, prev) {\n var groupIndex = selection.groupIndex;\n var group = this.groups[groupIndex];\n var slot = group.ranges(selection.start, selection.end, selection.isAllDay, false)[0].start;\n var length = this.groups.length;\n var pad = prev ? -1 : 1;\n var events = selection.events;\n var event;\n if (this._isGroupedByDate()) {\n var allEvents = this._getAllEvents();\n var uniqueAllEvents = this._getUniqueEvents(allEvents);\n var sortedEvents = this._getSortedEvents(uniqueAllEvents);\n if (events.length === 0) {\n var eventIndex = this._getNextEventIndexBySlot(slot, sortedEvents, groupIndex);\n if (prev) {\n eventIndex--;\n }\n event = sortedEvents[eventIndex];\n } else {\n var idx = this._getStartIdx(events, sortedEvents);\n while (idx < sortedEvents.length && idx > -1) {\n if (events.length > 0) {\n slot = this._getSelectedSlot(slot, sortedEvents, event, idx, pad, prev);\n }\n if (!slot) {\n break;\n }\n if (!prev && sortedEvents[idx].start.startDate() >= slot.startDate() || prev && sortedEvents[idx].start.startDate() <= slot.startDate()) {\n if (events[0] != sortedEvents[idx].uid) {\n event = sortedEvents[idx];\n break;\n }\n }\n idx += pad;\n }\n }\n } else {\n while (groupIndex < length && groupIndex > -1) {\n event = this.moveToEventInGroup(group, slot, events, prev);\n groupIndex += pad;\n group = this.groups[groupIndex];\n if (!group || event) {\n break;\n }\n events = [];\n if (prev) {\n slot = group.lastSlot();\n } else {\n slot = group.firstSlot(true);\n }\n }\n }\n if (event) {\n selection.events = [event.uid];\n selection.start = event.start.startDate();\n selection.end = event.end.endDate();\n selection.isAllDay = event.start.isDaySlot;\n selection.groupIndex = event.start.groupIndex;\n }\n return !!event;\n },\n current: function (candidate) {\n if (candidate !== undefined) {\n this._current = candidate;\n if (this.content.has(candidate)) {\n this._scrollTo(candidate, this.content[0]);\n }\n } else {\n return this._current;\n }\n },\n select: function (selection) {\n this.clearSelection();\n if (!this._selectEvents(selection)) {\n this._selectSlots(selection);\n }\n },\n _getNextEventIndexBySlot: function (slot, sortedEvents, groupIndex) {\n var tempIndex = 0;\n var slotStartDate = kendo.date.getDate(slot.startDate());\n for (var i = 0; i < sortedEvents.length; i++) {\n var eventStartDate = kendo.date.getDate(sortedEvents[i].start.startDate());\n if (slotStartDate > eventStartDate) {\n tempIndex++;\n continue;\n }\n if (slotStartDate.getTime() === eventStartDate.getTime() && groupIndex > sortedEvents[i].start.groupIndex) {\n tempIndex++;\n continue;\n }\n if (slotStartDate.getTime() === eventStartDate.getTime() && groupIndex >= sortedEvents[i].start.groupIndex && slot.startDate() > sortedEvents[i].start.startDate()) {\n tempIndex++;\n continue;\n }\n break;\n }\n return tempIndex;\n },\n _getSelectedSlot: function (slot, sortedEvents, event, idx, pad, prev) {\n if (sortedEvents[idx + pad] && sortedEvents[idx].start.groupIndex !== sortedEvents[idx + pad].start.groupIndex) {\n var groupIndex = sortedEvents[idx + pad].start.groupIndex;\n var group = this.groups[groupIndex];\n if (!group || event) {\n slot = null;\n }\n if (prev) {\n slot = group.lastSlot();\n } else {\n slot = group.firstSlot(true);\n }\n }\n return slot;\n },\n _getStartIdx: function (events, sortedEvents) {\n var selectedEventIndex = 0;\n $.each(sortedEvents, function () {\n if (this.uid === events[0]) {\n return false;\n }\n selectedEventIndex++;\n });\n return selectedEventIndex;\n },\n _getAllEvents: function () {\n var allEvents = [];\n var groups = this.groups;\n for (var idx = 0; idx < groups.length; idx++) {\n if (groups[idx]._continuousEvents) {\n allEvents = allEvents.concat(groups[idx]._continuousEvents);\n }\n }\n return allEvents;\n },\n _getUniqueEvents: function (allEvents) {\n var uniqueAllEvents = [];\n for (var i = 0; i < allEvents.length; i++) {\n var exists = false;\n for (var j = 0; j < uniqueAllEvents.length; j++) {\n if (allEvents[i].uid === uniqueAllEvents[j].uid) {\n exists = true;\n break;\n }\n }\n if (!exists) {\n uniqueAllEvents.push(allEvents[i]);\n }\n }\n return uniqueAllEvents;\n },\n _getSortedEvents: function (uniqueAllEvents) {\n return uniqueAllEvents.sort(function (first, second) {\n var firstStartDate = first.start.startDate();\n var secondStartDate = second.start.startDate();\n var result = kendo.date.getDate(firstStartDate) - kendo.date.getDate(secondStartDate);\n if (result === 0) {\n result = first.start.groupIndex - second.start.groupIndex;\n }\n if (result === 0) {\n result = firstStartDate.getTime() - secondStartDate.getTime();\n }\n if (result === 0) {\n if (first.start.isDaySlot && !second.start.isDaySlot) {\n result = -1;\n }\n if (!first.start.isDaySlot && second.start.isDaySlot) {\n result = 1;\n }\n }\n if (result === 0) {\n result = $(first.element).index() - $(second.element).index();\n }\n return result;\n });\n },\n _selectSlots: function (selection) {\n var isAllDay = selection.isAllDay;\n var group = this.groups[selection.groupIndex];\n if (!group.timeSlotCollectionCount()) {\n isAllDay = true;\n }\n this._selectedSlots = [];\n var ranges = group.ranges(selection.start, selection.end, isAllDay, false);\n var element;\n var slot;\n for (var rangeIndex = 0; rangeIndex < ranges.length; rangeIndex++) {\n var range = ranges[rangeIndex];\n var collection = range.collection;\n for (var slotIndex = range.start.index; slotIndex <= range.end.index; slotIndex++) {\n slot = collection.at(slotIndex);\n element = slot.element;\n element.setAttribute('aria-selected', true);\n addSelectedState(element);\n this._selectedSlots.push({\n start: slot.startDate(),\n end: slot.endDate(),\n element: element\n });\n }\n }\n if (selection.backward) {\n element = ranges[0].start.element;\n }\n this.current(element);\n },\n _selectEvents: function (selection) {\n var found = false;\n var events = selection.events;\n var groupEvents = this.groups[selection.groupIndex]._continuousEvents || [];\n var idx, length = groupEvents.length;\n if (!events[0] || !groupEvents[0]) {\n return found;\n }\n var result = $();\n selection.events = [];\n for (idx = 0; idx < length; idx++) {\n if ($.inArray(groupEvents[idx].uid, events) > -1) {\n result = result.add(groupEvents[idx].element);\n selection.events.push(groupEvents[idx].uid);\n }\n }\n if (result[0]) {\n result.addClass('k-state-selected').attr('aria-selected', true);\n this.current(result.last()[0]);\n this._selectedSlots = [];\n found = true;\n }\n return found;\n },\n inRange: function (options) {\n var startDate = this.startDate();\n var endDate = kendo.date.addDays(this.endDate(), 1);\n var start = options.start;\n var end = options.end;\n return startDate <= start && start < endDate && startDate < end && end <= endDate;\n },\n _resourceValue: function (resource, item) {\n if (resource.valuePrimitive) {\n item = kendo.getter(resource.dataValueField)(item);\n }\n return item;\n },\n _resourceBySlot: function (slot) {\n var resources = this.groupedResources;\n var result = {};\n if (resources.length) {\n var resourceIndex = slot.groupIndex;\n for (var idx = resources.length - 1; idx >= 0; idx--) {\n var resource = resources[idx];\n var value = this._resourceValue(resource, resource.dataSource.view()[resourceIndex % resource.dataSource.total()]);\n if (resource.multiple) {\n value = [value];\n }\n var setter = kendo.setter(resource.field);\n setter(result, value);\n resourceIndex = Math.floor(resourceIndex / resource.dataSource.total());\n }\n }\n return result;\n },\n _createResizeHint: function (left, top, width, height) {\n return $(HINT).css({\n left: left,\n top: top,\n width: width,\n height: height\n });\n },\n _removeResizeHint: function () {\n this._resizeHint.remove();\n this._resizeHint = $();\n },\n _removeMoveHint: function () {\n this._moveHint.remove();\n this._moveHint = $();\n },\n _scrollTo: function (element, container) {\n var elementOffset = element.offsetTop, elementOffsetDir = element.offsetHeight, containerScroll = container.scrollTop, containerOffsetDir = container.clientHeight, bottomDistance = elementOffset + elementOffsetDir, result = 0;\n if (containerScroll > elementOffset) {\n result = elementOffset;\n } else if (bottomDistance > containerScroll + containerOffsetDir) {\n if (elementOffsetDir <= containerOffsetDir) {\n result = bottomDistance - containerOffsetDir;\n } else {\n result = elementOffset;\n }\n } else {\n result = containerScroll;\n }\n container.scrollTop = result;\n },\n _shouldInverseResourceColor: function (resource) {\n var resourceColorIsDark = new Color(resource.color).isDark();\n var currentColor = this.element.css('color');\n var currentColorIsDark = new Color(currentColor).isDark();\n return resourceColorIsDark == currentColorIsDark;\n },\n _eventTmpl: function (template, wrapper) {\n var options = this.options, settings = $.extend({}, kendo.Template, options.templateSettings), paramName = settings.paramName, html = '', type = typeof template, state = {\n storage: {},\n count: 0\n };\n if (type === 'function') {\n state.storage['tmpl' + state.count] = template;\n html += '#=this.tmpl' + state.count + '(' + paramName + ')#';\n state.count++;\n } else if (type === 'string') {\n html += template;\n }\n var tmpl = kendo.template(kendo.format(wrapper, html), settings);\n if (state.count > 0) {\n tmpl = $.proxy(tmpl, state.storage);\n }\n return tmpl;\n },\n eventResources: function (event) {\n var resources = [], options = this.options;\n if (!options.resources) {\n return resources;\n }\n for (var idx = 0; idx < options.resources.length; idx++) {\n var resource = options.resources[idx];\n var field = resource.field;\n var eventResources = kendo.getter(field)(event);\n if (eventResources == null) {\n continue;\n }\n if (!resource.multiple) {\n eventResources = [eventResources];\n }\n var data = resource.dataSource.view();\n for (var resourceIndex = 0; resourceIndex < eventResources.length; resourceIndex++) {\n var eventResource = null;\n var value = eventResources[resourceIndex];\n if (!resource.valuePrimitive) {\n value = kendo.getter(resource.dataValueField)(value);\n }\n for (var dataIndex = 0; dataIndex < data.length; dataIndex++) {\n if (data[dataIndex].get(resource.dataValueField) == value) {\n eventResource = data[dataIndex];\n break;\n }\n }\n if (eventResource !== null) {\n var resourceColor = kendo.getter(resource.dataColorField)(eventResource);\n resources.push({\n field: resource.field,\n title: resource.title,\n name: resource.name,\n text: kendo.getter(resource.dataTextField)(eventResource),\n value: value,\n color: resourceColor\n });\n }\n }\n }\n return resources;\n },\n createLayout: function (layout) {\n var allDayIndex = -1;\n if (!layout.rows) {\n layout.rows = [];\n }\n for (var idx = 0; idx < layout.rows.length; idx++) {\n if (layout.rows[idx].allDay) {\n allDayIndex = idx;\n break;\n }\n }\n var allDaySlot = layout.rows[allDayIndex];\n if (allDayIndex >= 0) {\n layout.rows.splice(allDayIndex, 1);\n }\n var columnLevels = this.columnLevels = levels(layout, 'columns');\n var rowLevels = this.rowLevels = levels(layout, 'rows');\n this.table = $('<table ' + cellspacing() + ' class=\"k-scheduler-layout k-scheduler-' + this.name + 'view\"><tbody></tbody></table>');\n var rowCount = rowLevels[rowLevels.length - 1].length;\n this.table.find('tbody:first').append(this._topSection(columnLevels, allDaySlot, rowCount));\n this.table.find('tbody:first').append(this._bottomSection(columnLevels, rowLevels, rowCount));\n this.element.append(this.table);\n this._scroller();\n },\n refreshLayout: function () {\n var that = this, toolbar = that.element.find('>.k-scheduler-toolbar'), height = that.element.innerHeight(), scrollbar = this._scrollbar, headerHeight = 0, paddingDirection = this._isRtl ? 'left' : 'right';\n for (var idx = 0; idx < toolbar.length; idx++) {\n height -= outerHeight(toolbar.eq(idx));\n }\n if (that.datesHeader) {\n headerHeight = outerHeight(that.datesHeader);\n }\n if (that.timesHeader && outerHeight(that.timesHeader) > headerHeight) {\n headerHeight = outerHeight(that.timesHeader);\n }\n if (that.datesHeader && that.timesHeader) {\n var datesHeaderRows = that.datesHeader.find('table:first tr');\n that.timesHeader.find('tr').height(function (index) {\n $(this).height(datesHeaderRows.eq(index).height());\n });\n }\n if (headerHeight) {\n height -= headerHeight;\n }\n if (that.footer) {\n height -= outerHeight(that.footer);\n }\n var isSchedulerHeightSet = function (el) {\n var initialHeight, newHeight;\n if (el[0].style.height) {\n return true;\n } else {\n initialHeight = el.height();\n }\n el.height('auto');\n newHeight = el.height();\n if (initialHeight != newHeight) {\n el.height('');\n return true;\n }\n el.height('');\n return false;\n };\n var contentDiv = that.content[0], scrollbarWidth = !kendo.support.kineticScrollNeeded ? scrollbar : 0;\n if (isSchedulerHeightSet(that.element)) {\n if (height > scrollbar * 2) {\n that.content.height(height);\n } else {\n that.content.height(scrollbar * 2 + 1);\n }\n that.times.height(contentDiv.clientHeight);\n var timesTable = that.times.find('table');\n if (timesTable.length) {\n timesTable.height(that.content.find('table')[0].clientHeight);\n }\n }\n if (contentDiv.offsetWidth - contentDiv.clientWidth > 0) {\n that.table.addClass('k-scrollbar-v');\n that.datesHeader.css('padding-' + paddingDirection, scrollbarWidth - parseInt(that.datesHeader.children().css('border-' + paddingDirection + '-width'), 10));\n } else {\n that.datesHeader.css('padding-' + paddingDirection, '');\n }\n if (contentDiv.offsetHeight - contentDiv.clientHeight > 0 || contentDiv.clientHeight > that.content.children('.k-scheduler-table').height()) {\n that.table.addClass('k-scrollbar-h');\n } else {\n that.table.removeClass('k-scrollbar-h');\n }\n },\n _topSection: function (columnLevels, allDaySlot, rowCount) {\n this.timesHeader = timesHeader(columnLevels.length, allDaySlot, rowCount);\n var columnCount = columnLevels[columnLevels.length - 1].length;\n this.datesHeader = datesHeader(columnLevels, columnCount, allDaySlot);\n return $('<tr>').append(this.timesHeader.add(this.datesHeader).wrap('<td>').parent());\n },\n _bottomSection: function (columnLevels, rowLevels, rowCount) {\n this.times = times(rowLevels, rowCount);\n this.content = content(columnLevels[columnLevels.length - 1], rowLevels[rowLevels.length - 1]);\n return $('<tr>').append(this.times.add(this.content).wrap('<td>').parent());\n },\n _scroller: function () {\n var that = this;\n this.content.bind('scroll' + NS, function () {\n that.datesHeader.find('>.k-scheduler-header-wrap').scrollLeft(this.scrollLeft);\n that.times.scrollTop(this.scrollTop);\n });\n var touchScroller = kendo.touchScroller(this.content, {\n avoidScrolling: function (e) {\n return $(e.event.target).closest('.k-event.k-event-active').length > 0;\n }\n });\n if (touchScroller && touchScroller.movable) {\n this._touchScroller = touchScroller;\n this.content = touchScroller.scrollElement;\n touchScroller.movable.bind('change', function (e) {\n that.datesHeader.find('>.k-scheduler-header-wrap').scrollLeft(-e.sender.x);\n that.times.scrollTop(-e.sender.y);\n });\n }\n },\n _resourcesForGroups: function () {\n var result = [];\n var groups = this.options.group;\n var resources = this.options.resources;\n groups = groups && groups.resources ? groups.resources : [];\n if (resources && groups.length) {\n for (var idx = 0, length = resources.length; idx < length; idx++) {\n for (var groupIdx = 0, groupLength = groups.length; groupIdx < groupLength; groupIdx++) {\n if (resources[idx].name === groups[groupIdx]) {\n result.push(resources[idx]);\n }\n }\n }\n }\n this.groupedResources = result;\n },\n _createDateLayout: function (dates, inner, times) {\n return createDateLayoutConfiguration('rows', dates, inner, times);\n },\n _createColumnsLayout: function (resources, inner, template, dates, times) {\n return createLayoutConfiguration('columns', resources, inner, template, dates, times);\n },\n _groupOrientation: function () {\n var groups = this.options.group;\n return groups && groups.resources ? groups.orientation : 'horizontal';\n },\n _isGroupedByDate: function () {\n return this.options.group && this.options.group.date;\n },\n _isVerticallyGrouped: function () {\n return this.groupedResources.length && this._groupOrientation() === 'vertical';\n },\n _createRowsLayout: function (resources, inner, template, dates) {\n return createLayoutConfiguration('rows', resources, inner, template, dates);\n },\n selectionByElement: function () {\n return null;\n },\n clearSelection: function () {\n this.content.find('.k-state-selected').removeAttr('id').attr('aria-selected', false).removeClass('k-state-selected');\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(this);\n if (that.table) {\n kendo.destroy(that.table);\n that.table.remove();\n }\n that.groups = null;\n that.table = null;\n that.content = null;\n that.times = null;\n that.datesHeader = null;\n that.timesHeader = null;\n that.footer = null;\n that._resizeHint = null;\n that._moveHint = null;\n },\n calendarInfo: function () {\n return kendo.getCulture().calendars.standard;\n },\n prevGroupSlot: function (date, groupIndex, isDay) {\n var collection;\n var group = this.groups[groupIndex];\n var slot = group.ranges(date, date, isDay, false)[0].start;\n if (groupIndex <= 0) {\n return;\n }\n if (this._isGroupedByDate()) {\n return slot;\n }\n if (this._isVerticallyGrouped()) {\n if (!group.timeSlotCollectionCount()) {\n collection = group._collection(group.daySlotCollectionCount() - 1, true);\n return collection.at(slot.index);\n } else {\n collection = group._collection(isDay ? slot.index : slot.collectionIndex, false);\n return collection.last();\n }\n } else {\n if (!group.timeSlotCollectionCount()) {\n collection = group._collection(slot.collectionIndex, true);\n return collection.last();\n } else {\n collection = group._collection(isDay ? 0 : group.timeSlotCollectionCount() - 1, isDay);\n return isDay ? collection.last() : collection.at(slot.index);\n }\n }\n },\n nextGroupSlot: function (date, groupIndex, isDay) {\n var collection;\n var group = this.groups[groupIndex];\n var slot = group.ranges(date, date, isDay, false)[0].start;\n var daySlotCollectionCount;\n if (groupIndex >= this.groups.length - 1) {\n return;\n }\n if (this._isGroupedByDate()) {\n return slot;\n }\n if (this._isVerticallyGrouped()) {\n if (!group.timeSlotCollectionCount()) {\n collection = group._collection(0, true);\n return collection.at(slot.index);\n } else {\n daySlotCollectionCount = group.daySlotCollectionCount();\n collection = group._collection(daySlotCollectionCount ? 0 : slot.collectionIndex, daySlotCollectionCount);\n return isDay ? collection.first() : collection.at(slot.collectionIndex);\n }\n } else {\n if (!group.timeSlotCollectionCount()) {\n collection = group._collection(slot.collectionIndex, true);\n return collection.first();\n } else {\n collection = group._collection(0, isDay);\n return isDay ? collection.first() : collection.at(slot.index);\n }\n }\n },\n _eventOptionsForMove: function () {\n return {};\n },\n _updateEventForResize: function () {\n return;\n },\n _updateEventForSelection: function (event) {\n return event;\n }\n });\n function collidingEvents(elements, start, end) {\n var idx, index, startIndex, overlaps, endIndex;\n for (idx = elements.length - 1; idx >= 0; idx--) {\n index = rangeIndex(elements[idx]);\n startIndex = index.start;\n endIndex = index.end;\n overlaps = startIndex <= start && endIndex >= start;\n if (overlaps || startIndex >= start && endIndex <= end || start <= startIndex && end >= startIndex) {\n if (startIndex < start) {\n start = startIndex;\n }\n if (endIndex > end) {\n end = endIndex;\n }\n }\n }\n return eventsForSlot(elements, start, end);\n }\n function rangeIndex(eventElement) {\n return {\n start: eventElement.start,\n end: eventElement.end\n };\n }\n function eventsForSlot(elements, slotStart, slotEnd) {\n var events = [];\n for (var idx = 0; idx < elements.length; idx++) {\n var event = rangeIndex(elements[idx]);\n if (event.start < slotStart && event.end > slotStart || event.start >= slotStart && event.end <= slotEnd) {\n events.push(elements[idx]);\n }\n }\n return events;\n }\n function createColumns(eventElements) {\n return _createColumns(eventElements);\n }\n function createRows(eventElements) {\n return _createColumns(eventElements);\n }\n var Color = function (value) {\n var color = this, formats = Color.formats, re, processor, parts, i, channels;\n if (arguments.length === 1) {\n value = color.resolveColor(value);\n for (i = 0; i < formats.length; i++) {\n re = formats[i].re;\n processor = formats[i].process;\n parts = re.exec(value);\n if (parts) {\n channels = processor(parts);\n color.r = channels[0];\n color.g = channels[1];\n color.b = channels[2];\n }\n }\n } else {\n color.r = arguments[0];\n color.g = arguments[1];\n color.b = arguments[2];\n }\n color.r = color.normalizeByte(color.r);\n color.g = color.normalizeByte(color.g);\n color.b = color.normalizeByte(color.b);\n };\n Color.prototype = {\n resolveColor: function (value) {\n value = value || '#000';\n if (value.charAt(0) == '#') {\n value = value.substr(1, 6);\n }\n value = value.replace(/ /g, '');\n value = value.toLowerCase();\n value = Color.namedColors[value] || value;\n return value;\n },\n normalizeByte: function (value) {\n return value < 0 || isNaN(value) ? 0 : value > 255 ? 255 : value;\n },\n percBrightness: function () {\n var color = this;\n return math.sqrt(0.241 * color.r * color.r + 0.691 * color.g * color.g + 0.068 * color.b * color.b);\n },\n isDark: function () {\n var color = this;\n var brightnessValue = color.percBrightness();\n return brightnessValue < 180;\n }\n };\n Color.formats = [\n {\n re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n process: function (parts) {\n return [\n parseInt(parts[1], 10),\n parseInt(parts[2], 10),\n parseInt(parts[3], 10)\n ];\n }\n },\n {\n re: /^(\\w{2})(\\w{2})(\\w{2})$/,\n process: function (parts) {\n return [\n parseInt(parts[1], 16),\n parseInt(parts[2], 16),\n parseInt(parts[3], 16)\n ];\n }\n },\n {\n re: /^(\\w{1})(\\w{1})(\\w{1})$/,\n process: function (parts) {\n return [\n parseInt(parts[1] + parts[1], 16),\n parseInt(parts[2] + parts[2], 16),\n parseInt(parts[3] + parts[3], 16)\n ];\n }\n }\n ];\n Color.namedColors = {\n aqua: '00ffff',\n azure: 'f0ffff',\n beige: 'f5f5dc',\n black: '000000',\n blue: '0000ff',\n brown: 'a52a2a',\n coral: 'ff7f50',\n cyan: '00ffff',\n darkblue: '00008b',\n darkcyan: '008b8b',\n darkgray: 'a9a9a9',\n darkgreen: '006400',\n darkorange: 'ff8c00',\n darkred: '8b0000',\n dimgray: '696969',\n fuchsia: 'ff00ff',\n gold: 'ffd700',\n goldenrod: 'daa520',\n gray: '808080',\n green: '008000',\n greenyellow: 'adff2f',\n indigo: '4b0082',\n ivory: 'fffff0',\n khaki: 'f0e68c',\n lightblue: 'add8e6',\n lightgrey: 'd3d3d3',\n lightgreen: '90ee90',\n lightpink: 'ffb6c1',\n lightyellow: 'ffffe0',\n lime: '00ff00',\n limegreen: '32cd32',\n linen: 'faf0e6',\n magenta: 'ff00ff',\n maroon: '800000',\n mediumblue: '0000cd',\n navy: '000080',\n olive: '808000',\n orange: 'ffa500',\n orangered: 'ff4500',\n orchid: 'da70d6',\n pink: 'ffc0cb',\n plum: 'dda0dd',\n purple: '800080',\n red: 'ff0000',\n royalblue: '4169e1',\n salmon: 'fa8072',\n silver: 'c0c0c0',\n skyblue: '87ceeb',\n slateblue: '6a5acd',\n slategray: '708090',\n snow: 'fffafa',\n steelblue: '4682b4',\n tan: 'd2b48c',\n teal: '008080',\n tomato: 'ff6347',\n turquoise: '40e0d0',\n violet: 'ee82ee',\n wheat: 'f5deb3',\n white: 'ffffff',\n whitesmoke: 'f5f5f5',\n yellow: 'ffff00',\n yellowgreen: '9acd32'\n };\n function _createColumns(eventElements) {\n var columns = [];\n for (var idx = 0; idx < eventElements.length; idx++) {\n var event = eventElements[idx];\n var eventRange = rangeIndex(event);\n var column = null;\n for (var j = 0, columnLength = columns.length; j < columnLength; j++) {\n var endOverlaps = eventRange.start > columns[j].end;\n if (eventRange.start < columns[j].start || endOverlaps) {\n column = columns[j];\n if (column.end < eventRange.end) {\n column.end = eventRange.end;\n }\n break;\n }\n }\n if (!column) {\n column = {\n start: eventRange.start,\n end: eventRange.end,\n events: []\n };\n columns.push(column);\n }\n column.events.push(event);\n }\n return columns;\n }\n function createDateLayoutConfiguration(name, dates, inner, times) {\n var configuration = [];\n $.each(dates, function (index, item) {\n var className = item.className ? 'k-slot-cell ' + item.className : 'k-slot-cell';\n var obj = {\n text: item.text,\n className: className\n };\n if (times && !item.minorTicks) {\n obj[name] = createDateLayoutConfiguration(name, item.columns, inner, times);\n } else {\n obj[name] = inner;\n }\n configuration.push(obj);\n });\n return configuration;\n }\n function createLayoutConfiguration(name, resources, inner, template, dates, times) {\n var resource = resources[0];\n var configuration = [];\n if (resource) {\n if (dates && inner) {\n $.each(dates, function (index, item) {\n if (times && !item.minorTicks) {\n item[name] = createLayoutConfiguration(name, resources, item.columns, template, item.columns, times);\n } else {\n item[name] = createLayoutConfiguration(name, resources, null, template);\n }\n });\n configuration = dates;\n } else {\n var data = resource.dataSource.view();\n for (var dataIndex = 0; dataIndex < data.length; dataIndex++) {\n var obj = {\n text: template({\n text: kendo.htmlEncode(kendo.getter(resource.dataTextField)(data[dataIndex])),\n color: kendo.getter(resource.dataColorField)(data[dataIndex]),\n field: resource.field,\n title: resource.title,\n name: resource.name,\n value: kendo.getter(resource.dataValueField)(data[dataIndex])\n }),\n className: 'k-slot-cell'\n };\n obj[name] = createLayoutConfiguration(name, resources.slice(1), inner, template);\n configuration.push(obj);\n }\n }\n return configuration;\n }\n return inner;\n }\n function groupEqFilter(value) {\n return function (item) {\n if ($.isArray(item) || item instanceof kendo.data.ObservableArray) {\n for (var idx = 0; idx < item.length; idx++) {\n if (item[idx] == value) {\n return true;\n }\n }\n return false;\n }\n return item == value;\n };\n }\n var selectedStateRegExp = /\\s*k-state-selected/;\n function addSelectedState(cell) {\n cell.className = cell.className.replace(selectedStateRegExp, '') + ' k-state-selected';\n }\n $.extend(ui.SchedulerView, {\n createColumns: createColumns,\n createRows: createRows,\n rangeIndex: rangeIndex,\n collidingEvents: collidingEvents,\n groupEqFilter: groupEqFilter\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.scheduler.dayview', ['kendo.scheduler.view'], f);\n}(function () {\n var __meta__ = {\n id: 'scheduler.dayview',\n name: 'Scheduler Day View',\n category: 'web',\n description: 'The Scheduler Day View',\n depends: ['scheduler.view'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, setTime = kendo.date.setTime, SchedulerView = ui.SchedulerView, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, extend = $.extend, proxy = $.proxy, getDate = kendo.date.getDate, MS_PER_MINUTE = kendo.date.MS_PER_MINUTE, MS_PER_DAY = kendo.date.MS_PER_DAY, CURRENT_TIME_MARKER_CLASS = 'k-current-time', CURRENT_TIME_MARKER_ARROW_CLASS = 'k-current-time-arrow', BORDER_SIZE_COEFF = 0.8666, getMilliseconds = kendo.date.getMilliseconds, NS = '.kendoMultiDayView';\n var DAY_VIEW_EVENT_TEMPLATE = kendo.template('<div title=\"(#=kendo.format(\"{0:t} - {1:t}\", start, end)#): #=title.replace(/\"/g,\"&\\\\#34;\")#\">' + '<div class=\"k-event-template k-event-time\">#:kendo.format(\"{0:t} - {1:t}\", start, end)#</div>' + '<div class=\"k-event-template\">${title}</div>' + '</div>'), DAY_VIEW_ALL_DAY_EVENT_TEMPLATE = kendo.template('<div title=\"(#=kendo.format(\"{0:t}\", start)#): #=title.replace(/\"/g,\"&\\\\#34;\")#\">' + '<div class=\"k-event-template\">${title}</div>' + '</div>'), DATA_HEADER_TEMPLATE = kendo.template('<span class=\\'k-link k-nav-day\\'>#=kendo.toString(date, \\'ddd M/dd\\')#</span>'), ALLDAY_EVENT_WRAPPER_STRING = '<div role=\"gridcell\" aria-selected=\"false\" ' + 'data-#=ns#uid=\"#=uid#\"' + '#if (resources[0]) { #' + 'style=\"background-color:#=resources[0].color#; border-color: #=resources[0].color#\"' + 'class=\"k-event#=inverseColor ? \" k-event-inverse\" : \"\"#\" ' + '#} else {#' + 'class=\"k-event\"' + '#}#' + '>' + '<span class=\"k-event-actions\">' + '# if(data.tail || data.middle) {#' + '<span class=\"k-icon k-i-arrow-60-left\"></span>' + '#}#' + '# if(data.isException()) {#' + '<span class=\"k-icon k-i-warning\"></span>' + '# } else if(data.isRecurring()) {#' + '<span class=\"k-icon k-i-reload\"></span>' + '# } #' + '</span>' + '{0}' + '<span class=\"k-event-actions\">' + '#if (showDelete) {#' + '<a href=\"\\\\#\" class=\"k-link k-event-delete\"><span class=\"k-icon k-i-close\"></span></a>' + '#}#' + '# if(data.head || data.middle) {#' + '<span class=\"k-icon k-i-arrow-60-right\"></span>' + '#}#' + '</span>' + '#if(resizable && !singleDay && !data.tail && !data.middle){#' + '<span class=\"k-resize-handle k-resize-w\"></span>' + '#}#' + '#if(resizable && !singleDay && !data.head && !data.middle){#' + '<span class=\"k-resize-handle k-resize-e\"></span>' + '#}#' + '</div>', EVENT_WRAPPER_STRING = '<div role=\"gridcell\" aria-selected=\"false\" ' + 'data-#=ns#uid=\"#=uid#\" ' + '#if (resources[0]) { #' + 'style=\"background-color:#=resources[0].color #; border-color: #=resources[0].color#\"' + 'class=\"k-event#=inverseColor ? \" k-event-inverse\" : \"\"#\"' + '#} else {#' + 'class=\"k-event\"' + '#}#' + '>' + '<span class=\"k-event-actions\">' + '# if(data.isException()) {#' + '<span class=\"k-icon k-i-warning\"></span>' + '# } else if(data.isRecurring()) {#' + '<span class=\"k-icon k-i-reload\"></span>' + '# } #' + '</span>' + '{0}' + '<span class=\"k-event-actions\">' + '#if (showDelete) {#' + '<a href=\"\\\\#\" class=\"k-link k-event-delete\"><span class=\"k-icon k-i-close\"></span></a>' + '#}#' + '</span>' + '<span class=\"k-event-top-actions\">' + '# if(data.tail || data.middle) {#' + '<span class=\"k-icon k-i-arrow-60-up\"></span>' + '# } #' + '</span>' + '<span class=\"k-event-bottom-actions\">' + '# if(data.head || data.middle) {#' + '<span class=\"k-icon k-i-arrow-60-down\"></span>' + '# } #' + '</span>' + '# if(resizable && !data.tail && !data.middle) {#' + '<span class=\"k-resize-handle k-resize-n\"></span>' + '# } #' + '# if(resizable && !data.head && !data.middle) {#' + '<span class=\"k-resize-handle k-resize-s\"></span>' + '# } #' + '</div>';\n function toInvariantTime(date) {\n var staticDate = new Date(1980, 1, 1, 0, 0, 0);\n setTime(staticDate, getMilliseconds(date));\n return staticDate;\n }\n function isInDateRange(value, min, max) {\n return value >= min && value <= max;\n }\n function isInTimeRange(value, min, max, overlaps) {\n overlaps = overlaps ? value <= max : value < max;\n return value > min && overlaps;\n }\n function addContinuousEvent(group, range, element, isAllDay) {\n var events = group._continuousEvents;\n var lastEvent = events[events.length - 1];\n var startDate = getDate(range.start.startDate()).getTime();\n if (isAllDay && lastEvent && getDate(lastEvent.start.startDate()).getTime() == startDate) {\n var idx = events.length - 1;\n for (; idx > -1; idx--) {\n if (events[idx].isAllDay || getDate(events[idx].start.startDate()).getTime() < startDate) {\n break;\n }\n }\n events.splice(idx + 1, 0, {\n element: element,\n isAllDay: true,\n uid: element.attr(kendo.attr('uid')),\n start: range.start,\n end: range.end\n });\n } else {\n events.push({\n element: element,\n isAllDay: isAllDay,\n uid: element.attr(kendo.attr('uid')),\n start: range.start,\n end: range.end\n });\n }\n }\n function getWorkDays(options) {\n var workDays = [];\n var dayIndex = options.workWeekStart;\n workDays.push(dayIndex);\n while (options.workWeekEnd != dayIndex) {\n if (dayIndex > 6) {\n dayIndex -= 7;\n } else {\n dayIndex++;\n }\n workDays.push(dayIndex);\n }\n return workDays;\n }\n var MultiDayView = SchedulerView.extend({\n init: function (element, options) {\n var that = this;\n SchedulerView.fn.init.call(that, element, options);\n that.title = that.options.title || that.options.name;\n that._workDays = getWorkDays(that.options);\n that._templates();\n that._editable();\n that.calculateDateRange();\n that._groups();\n that._currentTime(true);\n },\n _currentTimeMarkerUpdater: function () {\n this._updateCurrentTimeMarker(new Date());\n },\n _updateCurrentTimeMarker: function (currentTime) {\n var options = this.options;\n if (options.currentTimeMarker.useLocalTimezone === false) {\n var timezone = options.dataSource.options.schema.timezone;\n if (options.dataSource && timezone) {\n var timezoneOffset = kendo.timezone.offset(currentTime, timezone);\n currentTime = kendo.timezone.convert(currentTime, currentTime.getTimezoneOffset(), timezoneOffset);\n }\n }\n this.times.find('.' + CURRENT_TIME_MARKER_CLASS).remove();\n this.content.find('.' + CURRENT_TIME_MARKER_CLASS).remove();\n var groupsCount = !options.group || options.group.orientation == 'horizontal' ? 1 : this.groups.length;\n var firstTimesCell = this.times.find('tr:first th:first');\n var lastTimesCell = this.times.find('tr:first th:last');\n for (var groupIndex = 0; groupIndex < groupsCount; groupIndex++) {\n var currentGroup = this.groups[groupIndex];\n if (!currentGroup) {\n return;\n }\n var utcCurrentTime = kendo.date.toUtcTime(currentTime);\n var ranges = currentGroup.timeSlotRanges(utcCurrentTime, utcCurrentTime + 1);\n if (ranges.length === 0) {\n return;\n }\n var collection = ranges[0].collection;\n var slotElement = collection.slotByStartDate(currentTime);\n if (slotElement) {\n var elementHtml = '<div class=\\'' + CURRENT_TIME_MARKER_CLASS + '\\'></div>';\n var timesTableMarker = $(elementHtml).prependTo(this.times);\n var markerTopPosition = Math.round(ranges[0].innerRect(currentTime, new Date(currentTime.getTime() + 1), false).top);\n var timesTableMarkerCss = {};\n if (this._isRtl) {\n timesTableMarkerCss.right = firstTimesCell.position().left + outerHeight(firstTimesCell) - outerHeight(lastTimesCell);\n timesTableMarker.addClass(CURRENT_TIME_MARKER_ARROW_CLASS + '-left');\n } else {\n timesTableMarkerCss.left = lastTimesCell.position().left;\n timesTableMarker.addClass(CURRENT_TIME_MARKER_ARROW_CLASS + '-right');\n }\n timesTableMarkerCss.top = markerTopPosition - outerWidth(timesTableMarker) * BORDER_SIZE_COEFF / 2;\n timesTableMarker.css(timesTableMarkerCss);\n $(elementHtml).prependTo(this.content).css({\n top: markerTopPosition,\n height: '1px',\n right: '1px',\n width: this.content[0].scrollWidth,\n left: 0\n });\n }\n }\n },\n _currentTime: function (setUpdateTimer) {\n var that = this;\n var markerOptions = that.options.currentTimeMarker;\n if (markerOptions !== false && markerOptions.updateInterval !== undefined) {\n that._currentTimeMarkerUpdater();\n if (setUpdateTimer) {\n that._currentTimeUpdateTimer = setInterval(proxy(this._currentTimeMarkerUpdater, that), markerOptions.updateInterval);\n }\n }\n },\n _updateResizeHint: function (event, groupIndex, startTime, endTime) {\n var multiday = event.isMultiDay();\n var group = this.groups[groupIndex];\n var ranges = group.ranges(startTime, endTime, multiday, event.isAllDay);\n var width, height, top, hint;\n this._removeResizeHint();\n for (var rangeIndex = 0; rangeIndex < ranges.length; rangeIndex++) {\n var range = ranges[rangeIndex];\n var start = range.startSlot();\n if (this._isGroupedByDate() && multiday) {\n for (var slotIdx = start.index; slotIdx <= range.end.index; slotIdx++) {\n var slot = range.collection._slots[slotIdx];\n width = slot.offsetWidth;\n height = slot.clientHeight;\n top = slot.offsetTop;\n hint = SchedulerView.fn._createResizeHint.call(this, slot.offsetLeft, top, width, height);\n this._resizeHint = this._resizeHint.add(hint);\n }\n } else {\n width = start.offsetWidth;\n height = start.clientHeight;\n top = start.offsetTop;\n if (multiday) {\n width = range.innerWidth();\n } else {\n var rect = range.outerRect(startTime, endTime, this.options.snap);\n top = rect.top;\n height = rect.bottom - rect.top;\n }\n hint = SchedulerView.fn._createResizeHint.call(this, start.offsetLeft, top, width, height);\n this._resizeHint = this._resizeHint.add(hint);\n }\n }\n var format = 't';\n var container = this.content;\n if (multiday) {\n format = 'M/dd';\n container = this.element.find('.k-scheduler-header-wrap:has(.k-scheduler-header-all-day) > div');\n if (!container.length) {\n container = this.content;\n }\n }\n this._resizeHint.appendTo(container);\n this._resizeHint.find('.k-label-top,.k-label-bottom').text('');\n this._resizeHint.first().addClass('k-first').find('.k-label-top').text(kendo.toString(kendo.timezone.toLocalDate(startTime), format));\n this._resizeHint.last().addClass('k-last').find('.k-label-bottom').text(kendo.toString(kendo.timezone.toLocalDate(endTime), format));\n },\n _updateMoveHint: function (event, groupIndex, distance) {\n var multiday = event.isMultiDay();\n var group = this.groups[groupIndex];\n var start = kendo.date.toUtcTime(event.start) + distance;\n var end = start + event.duration();\n var ranges = group.ranges(start, end, multiday, event.isAllDay);\n start = kendo.timezone.toLocalDate(start);\n end = kendo.timezone.toLocalDate(end);\n this._removeMoveHint();\n if (!multiday && (getMilliseconds(end) === 0 || getMilliseconds(end) < getMilliseconds(this.startTime()))) {\n if (ranges.length > 1) {\n ranges.pop();\n }\n }\n for (var rangeIndex = 0; rangeIndex < ranges.length; rangeIndex++) {\n var range = ranges[rangeIndex];\n var startSlot = range.start;\n var hint;\n var css = {\n left: startSlot.offsetLeft + 2,\n top: startSlot.offsetTop\n };\n if (this._isGroupedByDate() && multiday) {\n for (var slotIdx = startSlot.index; slotIdx <= range.end.index; slotIdx++) {\n var slot = range.collection._slots[slotIdx];\n css.left = this._isRtl ? slot.clientWidth * 0.1 + slot.offsetLeft + 2 : slot.offsetLeft + 2;\n css.height = slot.offsetHeight;\n css.width = slot.clientWidth * 0.9 - 4;\n hint = this._createEventElement(event.clone({\n start: start,\n end: end\n }), !multiday);\n this._appendMoveHint(hint, css);\n }\n } else {\n if (this._isRtl) {\n css.left = startSlot.clientWidth * 0.1 + startSlot.offsetLeft + 2;\n }\n if (multiday) {\n css.width = range.innerWidth() - 4;\n } else {\n var rect = range.outerRect(start, end, this.options.snap);\n css.top = rect.top;\n css.height = rect.bottom - rect.top;\n css.width = startSlot.clientWidth * 0.9 - 4;\n }\n hint = this._createEventElement(event.clone({\n start: start,\n end: end\n }), !multiday);\n this._appendMoveHint(hint, css);\n }\n }\n var content = this.content;\n if (multiday) {\n content = this.element.find('.k-scheduler-header-wrap:has(.k-scheduler-header-all-day) > div');\n if (!content.length) {\n content = this.content;\n }\n }\n this._moveHint.appendTo(content);\n },\n _appendMoveHint: function (hint, css) {\n hint.addClass('k-event-drag-hint');\n hint.css(css);\n this._moveHint = this._moveHint.add(hint);\n },\n _slotByPosition: function (x, y) {\n var slot, offset;\n if (this._isVerticallyGrouped()) {\n offset = this.content.offset();\n y += this.content[0].scrollTop;\n x += this.content[0].scrollLeft;\n } else {\n offset = this.element.find('.k-scheduler-header-wrap:has(.k-scheduler-header-all-day)').find('>div').offset();\n }\n if (offset) {\n x -= offset.left;\n y -= offset.top;\n }\n x = Math.ceil(x);\n y = Math.ceil(y);\n var group;\n var groupIndex;\n for (groupIndex = 0; groupIndex < this.groups.length; groupIndex++) {\n group = this.groups[groupIndex];\n slot = group.daySlotByPosition(x, y, this._isGroupedByDate());\n if (slot) {\n return slot;\n }\n }\n if (offset) {\n x += offset.left;\n y += offset.top;\n }\n offset = this.content.offset();\n x -= offset.left;\n y -= offset.top;\n if (!this._isVerticallyGrouped()) {\n y += this.content[0].scrollTop;\n x += this.content[0].scrollLeft;\n }\n x = Math.ceil(x);\n y = Math.ceil(y);\n for (groupIndex = 0; groupIndex < this.groups.length; groupIndex++) {\n group = this.groups[groupIndex];\n slot = group.timeSlotByPosition(x, y);\n if (slot) {\n return slot;\n }\n }\n return null;\n },\n _groupCount: function () {\n var resources = this.groupedResources;\n var byDate = this._isGroupedByDate();\n if (resources.length) {\n if (this._groupOrientation() === 'vertical') {\n if (byDate) {\n return this._columnCountForLevel(resources.length - 1);\n } else {\n return this._rowCountForLevel(resources.length - 1);\n }\n } else {\n if (byDate) {\n return this._columnCountForLevel(resources.length) / this._columnCountForLevel(0);\n } else {\n return this._columnCountForLevel(resources.length) / this._columnOffsetForResource(resources.length);\n }\n }\n }\n return 1;\n },\n _columnCountInResourceView: function () {\n var resources = this.groupedResources;\n var byDate = this._isGroupedByDate();\n if (!resources.length || this._isVerticallyGrouped()) {\n if (byDate) {\n return this._rowCountForLevel(0);\n } else {\n return this._columnCountForLevel(0);\n }\n }\n if (byDate) {\n return this._columnCountForLevel(0);\n } else {\n return this._columnOffsetForResource(resources.length);\n }\n },\n _timeSlotGroups: function (groupCount, columnCount) {\n var interval = this._timeSlotInterval();\n var verticalViews = groupCount;\n var byDate = this._isGroupedByDate();\n var tableRows = this.content.find('tr:not(.k-scheduler-header-all-day)');\n var group, time, rowIndex, cellIndex;\n tableRows.attr('role', 'row');\n var rowCount = tableRows.length;\n if (this._isVerticallyGrouped()) {\n if (byDate) {\n verticalViews = columnCount;\n }\n rowCount = Math.floor(rowCount / verticalViews);\n }\n for (var groupIndex = 0; groupIndex < verticalViews; groupIndex++) {\n var rowMultiplier = 0;\n var cellMultiplier = 0;\n if (this._isVerticallyGrouped()) {\n rowMultiplier = groupIndex;\n } else {\n cellMultiplier = groupIndex;\n }\n rowIndex = rowMultiplier * rowCount;\n while (rowIndex < (rowMultiplier + 1) * rowCount) {\n var cells = tableRows[rowIndex].children;\n if (rowIndex % rowCount === 0) {\n time = getMilliseconds(new Date(+this.startTime()));\n }\n var timeIndex = 0;\n if (byDate) {\n if (this._isVerticallyGrouped()) {\n for (cellIndex = 0; cellIndex < groupCount; cellIndex++) {\n group = this.groups[cellIndex];\n this._addTimeSlotGroup(group, cells, cellIndex, time, interval, groupIndex);\n }\n } else {\n group = this.groups[groupIndex];\n for (cellIndex = cellMultiplier; cellIndex < groupCount * columnCount; cellIndex = cellIndex + groupCount) {\n this._addTimeSlotGroup(group, cells, cellIndex, time, interval, timeIndex);\n timeIndex++;\n }\n }\n } else {\n group = this.groups[groupIndex];\n for (cellIndex = cellMultiplier * columnCount; cellIndex < (cellMultiplier + 1) * columnCount; cellIndex++) {\n this._addTimeSlotGroup(group, cells, cellIndex, time, interval, timeIndex);\n timeIndex++;\n }\n }\n time += interval;\n rowIndex++;\n }\n }\n },\n _addTimeSlotGroup: function (group, cells, cellIndex, time, interval, timeIndex) {\n var cell = cells[cellIndex];\n var collection = group.getTimeSlotCollection(timeIndex);\n var currentDate = this._dates[timeIndex];\n var currentTime = Date.UTC(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());\n var start = currentTime + time;\n var end = start + interval;\n cell.setAttribute('role', 'gridcell');\n cell.setAttribute('aria-selected', false);\n collection.addTimeSlot(cell, start, end);\n },\n _addDaySlotGroup: function (collection, cells, cellIndex, columnCount, cellCount) {\n var cell = cells[cellIndex];\n var start = this._dates[cellCount];\n var currentTime = Date.UTC(start.getFullYear(), start.getMonth(), start.getDate());\n cell.setAttribute('role', 'gridcell');\n cell.setAttribute('aria-selected', false);\n collection.addDaySlot(cell, currentTime, currentTime + kendo.date.MS_PER_DAY);\n },\n _daySlotGroups: function (groupCount, columnCount) {\n var tableRows, cellIndex;\n var verticalViews = groupCount;\n var byDate = this._isGroupedByDate();\n if (this._isVerticallyGrouped()) {\n if (byDate) {\n verticalViews = columnCount;\n }\n tableRows = this.element.find('.k-scheduler-header-all-day');\n } else {\n tableRows = this.element.find('.k-scheduler-header-all-day tr');\n }\n tableRows.attr('role', 'row');\n for (var groupIndex = 0; groupIndex < verticalViews; groupIndex++) {\n var rowMultiplier = 0;\n var group, collection;\n if (this._isVerticallyGrouped()) {\n rowMultiplier = groupIndex;\n }\n var cells = tableRows[rowMultiplier].children;\n var cellMultiplier = 0;\n if (!this._isVerticallyGrouped()) {\n cellMultiplier = groupIndex;\n }\n var cellCount = 0;\n if (byDate) {\n if (this._isVerticallyGrouped()) {\n for (cellIndex = 0; cellIndex < groupCount; cellIndex++) {\n group = this.groups[cellIndex];\n collection = group.getDaySlotCollection(0);\n this._addDaySlotGroup(collection, cells, cellIndex, columnCount, groupIndex);\n }\n } else {\n group = this.groups[groupIndex];\n collection = group.getDaySlotCollection(0);\n for (cellIndex = cellMultiplier; cellIndex < groupCount * columnCount; cellIndex = cellIndex + groupCount) {\n this._addDaySlotGroup(collection, cells, cellIndex, columnCount, cellCount);\n cellCount++;\n }\n }\n } else {\n group = this.groups[groupIndex];\n collection = group.getDaySlotCollection(0);\n for (cellIndex = cellMultiplier * columnCount; cellIndex < (cellMultiplier + 1) * columnCount; cellIndex++) {\n this._addDaySlotGroup(collection, cells, cellIndex, columnCount, cellCount);\n cellCount++;\n }\n }\n }\n },\n _groups: function () {\n var groupCount = this._groupCount();\n var columnCount = this._columnCountInResourceView();\n this.groups = [];\n for (var idx = 0; idx < groupCount; idx++) {\n var view = this._addResourceView(idx);\n for (var columnIndex = 0; columnIndex < columnCount; columnIndex++) {\n view.addTimeSlotCollection(this._dates[columnIndex], kendo.date.addDays(this._dates[columnIndex], 1));\n }\n if (this.options.allDaySlot) {\n view.addDaySlotCollection(this._dates[0], kendo.date.addDays(this._dates[this._dates.length - 1], 1));\n }\n }\n this._timeSlotGroups(groupCount, columnCount);\n if (this.options.allDaySlot) {\n this._daySlotGroups(groupCount, columnCount);\n }\n },\n options: {\n name: 'MultiDayView',\n selectedDateFormat: '{0:D}',\n selectedShortDateFormat: '{0:d}',\n allDaySlot: true,\n showWorkHours: false,\n title: '',\n startTime: kendo.date.today(),\n endTime: kendo.date.today(),\n minorTickCount: 2,\n majorTick: 60,\n majorTimeHeaderTemplate: '#=kendo.toString(date, \\'t\\')#',\n minorTimeHeaderTemplate: ' ',\n groupHeaderTemplate: '#=text#',\n slotTemplate: ' ',\n allDaySlotTemplate: ' ',\n eventTemplate: DAY_VIEW_EVENT_TEMPLATE,\n allDayEventTemplate: DAY_VIEW_ALL_DAY_EVENT_TEMPLATE,\n dateHeaderTemplate: DATA_HEADER_TEMPLATE,\n editable: true,\n workDayStart: new Date(1980, 1, 1, 8, 0, 0),\n workDayEnd: new Date(1980, 1, 1, 17, 0, 0),\n workWeekStart: 1,\n workWeekEnd: 5,\n footer: { command: 'workDay' },\n messages: {\n allDay: 'all day',\n showFullDay: 'Show full day',\n showWorkDay: 'Show business hours'\n },\n currentTimeMarker: {\n updateInterval: 10000,\n useLocalTimezone: true\n }\n },\n events: [\n 'remove',\n 'add',\n 'edit'\n ],\n _templates: function () {\n var options = this.options, settings = extend({}, kendo.Template, options.templateSettings);\n this.eventTemplate = this._eventTmpl(options.eventTemplate, EVENT_WRAPPER_STRING);\n this.allDayEventTemplate = this._eventTmpl(options.allDayEventTemplate, ALLDAY_EVENT_WRAPPER_STRING);\n this.majorTimeHeaderTemplate = kendo.template(options.majorTimeHeaderTemplate, settings);\n this.minorTimeHeaderTemplate = kendo.template(options.minorTimeHeaderTemplate, settings);\n this.dateHeaderTemplate = kendo.template(options.dateHeaderTemplate, settings);\n this.slotTemplate = kendo.template(options.slotTemplate, settings);\n this.allDaySlotTemplate = kendo.template(options.allDaySlotTemplate, settings);\n this.groupHeaderTemplate = kendo.template(options.groupHeaderTemplate, settings);\n },\n _editable: function () {\n if (this.options.editable) {\n if (this._isMobile()) {\n this._touchEditable();\n } else {\n this._mouseEditable();\n }\n }\n },\n _mouseEditable: function () {\n var that = this;\n that.element.on('click' + NS, '.k-event a:has(.k-i-close)', function (e) {\n that.trigger('remove', { uid: $(this).closest('.k-event').attr(kendo.attr('uid')) });\n e.preventDefault();\n });\n if (that.options.editable.create !== false) {\n that.element.on('dblclick' + NS, '.k-scheduler-content td', function (e) {\n if (!$(this).parent().hasClass('k-scheduler-header-all-day')) {\n var slot = that._slotByPosition(e.pageX, e.pageY);\n if (slot) {\n var resourceInfo = that._resourceBySlot(slot);\n that.trigger('add', {\n eventInfo: extend({\n start: slot.startDate(),\n end: slot.endDate()\n }, resourceInfo)\n });\n }\n e.preventDefault();\n }\n }).on('dblclick' + NS, '.k-scheduler-header-all-day td', function (e) {\n var slot = that._slotByPosition(e.pageX, e.pageY);\n if (slot) {\n var resourceInfo = that._resourceBySlot(slot);\n that.trigger('add', {\n eventInfo: extend({}, {\n isAllDay: true,\n start: kendo.date.getDate(slot.startDate()),\n end: kendo.date.getDate(slot.startDate())\n }, resourceInfo)\n });\n }\n e.preventDefault();\n });\n }\n if (that.options.editable.update !== false) {\n that.element.on('dblclick' + NS, '.k-event', function (e) {\n that.trigger('edit', { uid: $(this).closest('.k-event').attr(kendo.attr('uid')) });\n e.preventDefault();\n });\n }\n },\n _touchEditable: function () {\n var that = this;\n var threshold = 0;\n if (kendo.support.mobileOS.android) {\n threshold = 5;\n }\n if (that.options.editable.create !== false) {\n that._addUserEvents = new kendo.UserEvents(that.element, {\n threshold: threshold,\n filter: '.k-scheduler-content td',\n tap: function (e) {\n if (!$(e.target).parent().hasClass('k-scheduler-header-all-day')) {\n var x = e.x.location !== undefined ? e.x.location : e.x;\n var y = e.y.location !== undefined ? e.y.location : e.y;\n var slot = that._slotByPosition(x, y);\n if (slot) {\n var resourceInfo = that._resourceBySlot(slot);\n that.trigger('add', {\n eventInfo: extend({\n start: slot.startDate(),\n end: slot.endDate()\n }, resourceInfo)\n });\n }\n e.preventDefault();\n }\n }\n });\n that._allDayUserEvents = new kendo.UserEvents(that.element, {\n threshold: threshold,\n filter: '.k-scheduler-header-all-day td',\n tap: function (e) {\n var x = e.x.location !== undefined ? e.x.location : e.x;\n var y = e.y.location !== undefined ? e.y.location : e.y;\n var slot = that._slotByPosition(x, y);\n if (slot) {\n var resourceInfo = that._resourceBySlot(slot);\n that.trigger('add', {\n eventInfo: extend({}, {\n isAllDay: true,\n start: kendo.date.getDate(slot.startDate()),\n end: kendo.date.getDate(slot.startDate())\n }, resourceInfo)\n });\n }\n e.preventDefault();\n }\n });\n }\n if (that.options.editable.update !== false) {\n that._editUserEvents = new kendo.UserEvents(that.element, {\n threshold: threshold,\n filter: '.k-event',\n tap: function (e) {\n var eventElement = $(e.target).closest('.k-event');\n if (!eventElement.hasClass('k-event-active')) {\n that.trigger('edit', { uid: eventElement.attr(kendo.attr('uid')) });\n }\n e.preventDefault();\n }\n });\n }\n },\n _layout: function (dates) {\n var columns = [];\n var rows = [];\n var options = this.options;\n var that = this;\n var byDate = that._isGroupedByDate();\n for (var idx = 0; idx < dates.length; idx++) {\n var column = {};\n column.text = that.dateHeaderTemplate({ date: dates[idx] });\n if (kendo.date.isToday(dates[idx])) {\n column.className = 'k-today';\n }\n columns.push(column);\n }\n var resources = this.groupedResources;\n if (options.allDaySlot) {\n rows.push({\n text: options.messages.allDay,\n allDay: true,\n cellContent: function (idx) {\n var groupIndex = idx;\n idx = resources.length && that._groupOrientation() !== 'vertical' ? idx % dates.length : idx;\n return that.allDaySlotTemplate({\n date: dates[idx],\n resources: function () {\n return that._resourceBySlot({ groupIndex: groupIndex });\n }\n });\n }\n });\n }\n this._forTimeRange(this.startTime(), this.endTime(), function (date, majorTick, middleRow, lastSlotRow) {\n var template = majorTick ? that.majorTimeHeaderTemplate : that.minorTimeHeaderTemplate;\n var row = {\n text: template({ date: date }),\n className: lastSlotRow ? 'k-slot-cell' : ''\n };\n rows.push(row);\n });\n if (resources.length) {\n if (this._groupOrientation() === 'vertical') {\n if (byDate) {\n rows = this._createDateLayout(columns, rows);\n columns = this._createColumnsLayout(resources, null, this.groupHeaderTemplate);\n } else {\n rows = this._createRowsLayout(resources, rows, this.groupHeaderTemplate);\n }\n } else {\n if (byDate) {\n columns = this._createColumnsLayout(resources, columns, this.groupHeaderTemplate, columns);\n } else {\n columns = this._createColumnsLayout(resources, columns, this.groupHeaderTemplate);\n }\n }\n }\n return {\n columns: columns,\n rows: rows\n };\n },\n _footer: function () {\n var options = this.options;\n if (options.footer !== false) {\n var html = '<div class=\"k-header k-scheduler-footer\">';\n var command = options.footer.command;\n if (command && command === 'workDay') {\n html += '<ul class=\"k-reset k-header\">';\n html += '<li class=\"k-state-default k-scheduler-fullday\"><a href=\"#\" class=\"k-link\"><span class=\"k-icon k-i-clock\"></span>';\n html += (options.showWorkHours ? options.messages.showFullDay : options.messages.showWorkDay) + '</a></li>';\n html += '</ul>';\n } else {\n html += ' ';\n }\n html += '</div>';\n this.footer = $(html).appendTo(this.element);\n var that = this;\n this.footer.on('click' + NS, '.k-scheduler-fullday', function (e) {\n e.preventDefault();\n that.trigger('navigate', {\n view: that.name || options.name,\n date: options.date,\n isWorkDay: !options.showWorkHours\n });\n });\n }\n },\n _forTimeRange: function (min, max, action, after) {\n min = toInvariantTime(min);\n max = toInvariantTime(max);\n var that = this, msMin = getMilliseconds(min), msMax = getMilliseconds(max), minorTickCount = that.options.minorTickCount, msMajorInterval = that.options.majorTick * MS_PER_MINUTE, msInterval = msMajorInterval / minorTickCount || 1, start = new Date(+min), startDay = start.getDate(), msStart, idx = 0, length, html = '';\n length = MS_PER_DAY / msInterval;\n if (msMin != msMax) {\n if (msMin > msMax) {\n msMax += MS_PER_DAY;\n }\n length = (msMax - msMin) / msInterval;\n }\n length = Math.round(length);\n for (; idx < length; idx++) {\n var majorTickDivider = idx % (msMajorInterval / msInterval), isMajorTickRow = majorTickDivider === 0, isMiddleRow = majorTickDivider < minorTickCount - 1, isLastSlotRow = majorTickDivider === minorTickCount - 1;\n html += action(start, isMajorTickRow, isMiddleRow, isLastSlotRow);\n setTime(start, msInterval, false);\n }\n if (msMax) {\n msStart = getMilliseconds(start);\n if (startDay < start.getDate()) {\n msStart += MS_PER_DAY;\n }\n if (msStart > msMax) {\n start = new Date(+max);\n }\n }\n if (after) {\n html += after(start);\n }\n return html;\n },\n _content: function (dates) {\n var that = this;\n var options = that.options;\n var start = that.startTime();\n var end = this.endTime();\n var groupsCount = 1;\n var rowCount = 1;\n var columnCount = dates.length;\n var html = '';\n var resources = this.groupedResources;\n var allDaySlotTemplate = this.allDaySlotTemplate;\n var isVerticalGroupped = false;\n var allDayVerticalGroupRow;\n var byDate = that._isGroupedByDate();\n var dateID = 0;\n if (resources.length) {\n isVerticalGroupped = that._groupOrientation() === 'vertical';\n if (isVerticalGroupped) {\n rowCount = this._rowCountForLevel(this.rowLevels.length - 2);\n if (byDate) {\n groupsCount = this._columnCountForLevel(this.columnLevels.length - 1);\n }\n if (options.allDaySlot) {\n allDayVerticalGroupRow = function (groupIndex) {\n var result = '<tr class=\"k-scheduler-header-all-day\">';\n var dateGroupIndex = byDate ? 0 : groupIndex;\n var resources = function () {\n return that._resourceBySlot({ groupIndex: dateGroupIndex });\n };\n if (byDate) {\n for (; dateGroupIndex < groupsCount; dateGroupIndex++) {\n result += '<td>' + allDaySlotTemplate({\n date: dates[dateID],\n resources: resources\n }) + '</td>';\n }\n } else {\n for (var idx = 0; idx < dates.length; idx++) {\n result += '<td>' + allDaySlotTemplate({\n date: dates[idx],\n resources: resources\n }) + '</td>';\n }\n }\n return result + '</tr>';\n };\n }\n } else {\n if (byDate) {\n groupsCount = this._columnCountForLevel(this.columnLevels.length - 1) / this._columnCountForLevel(0);\n } else {\n groupsCount = this._columnCountForLevel(this.columnLevels.length - 2);\n }\n }\n }\n html += '<tbody>';\n var appendRow = function (date, majorTick) {\n var content = '';\n var groupIdx = 0;\n var idx, length;\n content = '<tr' + (majorTick ? ' class=\"k-middle-row\"' : '') + '>';\n if (byDate) {\n for (idx = 0, length = columnCount; idx < length; idx++) {\n for (groupIdx = 0; groupIdx < groupsCount; groupIdx++) {\n var dateIndex = idx;\n if (isVerticalGroupped) {\n dateIndex = dateID;\n }\n content = that._addCellsToContent(content, dates, date, dateIndex, groupIdx, rowIdx);\n }\n if (isVerticalGroupped) {\n break;\n }\n }\n } else {\n for (; groupIdx < groupsCount; groupIdx++) {\n for (idx = 0, length = columnCount; idx < length; idx++) {\n content = that._addCellsToContent(content, dates, date, idx, groupIdx, rowIdx);\n }\n }\n }\n content += '</tr>';\n return content;\n };\n for (var rowIdx = 0; rowIdx < rowCount; rowIdx++) {\n html += allDayVerticalGroupRow ? allDayVerticalGroupRow(rowIdx) : '';\n html += this._forTimeRange(start, end, appendRow);\n if (isVerticalGroupped) {\n dateID++;\n }\n }\n html += '</tbody>';\n this.content.find('table').append(html);\n },\n _addCellsToContent: function (content, dates, date, idx, groupIdx, rowIdx) {\n var that = this;\n var classes = '';\n var tmplDate;\n var slotTemplate = this.slotTemplate;\n var isVerticalGroupped = this._groupOrientation() === 'vertical';\n var resources = function (groupIndex) {\n return function () {\n return that._resourceBySlot({ groupIndex: groupIndex });\n };\n };\n if (kendo.date.isToday(dates[idx])) {\n classes += 'k-today';\n }\n if (kendo.date.getMilliseconds(date) < kendo.date.getMilliseconds(this.options.workDayStart) || kendo.date.getMilliseconds(date) >= kendo.date.getMilliseconds(this.options.workDayEnd) || !this._isWorkDay(dates[idx])) {\n classes += ' k-nonwork-hour';\n }\n content += '<td' + (classes !== '' ? ' class=\"' + classes + '\"' : '') + '>';\n tmplDate = kendo.date.getDate(dates[idx]);\n kendo.date.setTime(tmplDate, kendo.date.getMilliseconds(date));\n content += slotTemplate({\n date: tmplDate,\n resources: resources(isVerticalGroupped && !that._isGroupedByDate() ? rowIdx : groupIdx)\n });\n content += '</td>';\n return content;\n },\n _isWorkDay: function (date) {\n var day = date.getDay();\n var workDays = this._workDays;\n for (var i = 0; i < workDays.length; i++) {\n if (workDays[i] === day) {\n return true;\n }\n }\n return false;\n },\n _render: function (dates) {\n var that = this;\n dates = dates || [];\n this._dates = dates;\n this._startDate = dates[0];\n this._endDate = dates[dates.length - 1 || 0];\n this.createLayout(this._layout(dates));\n this._content(dates);\n this._footer();\n this.refreshLayout();\n var allDayHeader = this.element.find('.k-scheduler-header-all-day td');\n if (allDayHeader.length) {\n this._allDayHeaderHeight = allDayHeader.first()[0].clientHeight;\n }\n that.element.on('click' + NS, '.k-nav-day', function (e) {\n var th = $(e.currentTarget).closest('th');\n var offset = th.offset();\n var additioanlWidth = 0;\n var additionalHeight = outerHeight(th);\n if (that._isGroupedByDate()) {\n if (that._isVerticallyGrouped()) {\n additioanlWidth = outerWidth(that.times);\n additionalHeight = 0;\n } else {\n additionalHeight = outerHeight(that.datesHeader);\n }\n }\n var slot = that._slotByPosition(offset.left + additioanlWidth, offset.top + additionalHeight);\n that.trigger('navigate', {\n view: 'day',\n date: slot.startDate()\n });\n });\n },\n startTime: function () {\n var options = this.options;\n return options.showWorkHours ? options.workDayStart : options.startTime;\n },\n endTime: function () {\n var options = this.options;\n return options.showWorkHours ? options.workDayEnd : options.endTime;\n },\n startDate: function () {\n return this._startDate;\n },\n endDate: function () {\n return this._endDate;\n },\n _end: function (isAllDay) {\n var time = getMilliseconds(this.endTime()) || MS_PER_DAY;\n if (isAllDay) {\n time = 0;\n }\n return new Date(this._endDate.getTime() + time);\n },\n nextDate: function () {\n return kendo.date.nextDay(this.endDate());\n },\n previousDate: function () {\n return kendo.date.previousDay(this.startDate());\n },\n calculateDateRange: function () {\n this._render([this.options.date]);\n },\n destroy: function () {\n var that = this;\n if (that._currentTimeUpdateTimer) {\n clearInterval(that._currentTimeUpdateTimer);\n }\n if (that.datesHeader) {\n that.datesHeader.off(NS);\n }\n if (that.element) {\n that.element.off(NS);\n }\n if (that.footer) {\n that.footer.remove();\n }\n SchedulerView.fn.destroy.call(this);\n if (this._isMobile() && that.options.editable) {\n if (that.options.editable.create !== false) {\n that._addUserEvents.destroy();\n that._allDayUserEvents.destroy();\n }\n if (that.options.editable.update !== false) {\n that._editUserEvents.destroy();\n }\n }\n },\n inRange: function (options) {\n var inRange = SchedulerView.fn.inRange.call(this, options);\n if (options.isAllDay) {\n return inRange;\n }\n var startTime = getMilliseconds(this.startTime());\n var endTime = getMilliseconds(this.endTime()) || kendo.date.MS_PER_DAY;\n var start = getMilliseconds(options.start);\n var end = getMilliseconds(options.end) || kendo.date.MS_PER_DAY;\n return inRange && startTime <= start && end <= endTime;\n },\n selectionByElement: function (cell) {\n var offset = cell.offset();\n return this._slotByPosition(offset.left, offset.top);\n },\n _timeSlotInterval: function () {\n var options = this.options;\n return options.majorTick / options.minorTickCount * MS_PER_MINUTE;\n },\n _timeSlotIndex: function (date) {\n var options = this.options;\n var eventStartTime = getMilliseconds(date);\n var startTime = getMilliseconds(this.startTime());\n var timeSlotInterval = options.majorTick / options.minorTickCount * MS_PER_MINUTE;\n return (eventStartTime - startTime) / timeSlotInterval;\n },\n _slotIndex: function (date, multiday) {\n if (multiday) {\n return this._dateSlotIndex(date);\n }\n return this._timeSlotIndex(date);\n },\n _dateSlotIndex: function (date, overlaps) {\n var idx;\n var length;\n var slots = this._dates || [];\n var slotStart;\n var slotEnd;\n var offset = 1;\n for (idx = 0, length = slots.length; idx < length; idx++) {\n slotStart = kendo.date.getDate(slots[idx]);\n slotEnd = new Date(kendo.date.getDate(slots[idx]).getTime() + MS_PER_DAY - (overlaps ? 0 : 1));\n if (isInDateRange(date, slotStart, slotEnd)) {\n return idx * offset;\n }\n }\n return -1;\n },\n _positionAllDayEvent: function (element, slotRange) {\n var slotWidth = slotRange.innerWidth();\n var startIndex = slotRange.start.index;\n var endIndex = slotRange.end.index;\n var allDayEvents = SchedulerView.collidingEvents(slotRange.events(), startIndex, endIndex);\n var currentColumnCount = this._headerColumnCount || 0;\n var leftOffset = 2;\n var rightOffset = startIndex !== endIndex ? 5 : 4;\n var eventHeight = this._allDayHeaderHeight;\n var start = slotRange.startSlot();\n element.css({\n left: start.offsetLeft + leftOffset,\n width: slotWidth - rightOffset\n });\n slotRange.addEvent({\n slotIndex: startIndex,\n start: startIndex,\n end: endIndex,\n element: element\n });\n allDayEvents.push({\n slotIndex: startIndex,\n start: startIndex,\n end: endIndex,\n element: element\n });\n var rows = SchedulerView.createRows(allDayEvents);\n if (rows.length && rows.length > currentColumnCount) {\n this._headerColumnCount = rows.length;\n }\n var top = slotRange.start.offsetTop;\n for (var idx = 0, length = rows.length; idx < length; idx++) {\n var rowEvents = rows[idx].events;\n for (var j = 0, eventLength = rowEvents.length; j < eventLength; j++) {\n $(rowEvents[j].element).css({ top: top + idx * eventHeight });\n }\n }\n },\n _arrangeColumns: function (element, top, height, slotRange) {\n var startSlot = slotRange.start;\n element = {\n element: element,\n slotIndex: startSlot.index,\n start: top,\n end: top + height\n };\n var columns, slotWidth = startSlot.clientWidth, eventRightOffset = slotWidth * 0.1, columnEvents, eventElements = slotRange.events(), slotEvents = SchedulerView.collidingEvents(eventElements, element.start, element.end);\n slotRange.addEvent(element);\n slotEvents.push(element);\n columns = SchedulerView.createColumns(slotEvents);\n var columnWidth = (slotWidth - eventRightOffset) / columns.length;\n for (var idx = 0, length = columns.length; idx < length; idx++) {\n columnEvents = columns[idx].events;\n for (var j = 0, eventLength = columnEvents.length; j < eventLength; j++) {\n columnEvents[j].element[0].style.width = columnWidth - 4 + 'px';\n columnEvents[j].element[0].style.left = (this._isRtl ? eventRightOffset : 0) + startSlot.offsetLeft + idx * columnWidth + 2 + 'px';\n }\n }\n },\n _positionEvent: function (event, element, slotRange) {\n var start = event._startTime || event.start;\n var end = event._endTime || event.end;\n var rect = slotRange.innerRect(start, end, false);\n var height = rect.bottom - rect.top - 2;\n if (height < 0) {\n height = 0;\n }\n element.css({\n top: rect.top,\n height: height\n });\n this._arrangeColumns(element, rect.top, element[0].clientHeight, slotRange);\n },\n _createEventElement: function (event, isOneDayEvent, head, tail) {\n var template = isOneDayEvent ? this.eventTemplate : this.allDayEventTemplate;\n var options = this.options;\n var editable = options.editable;\n var isMobile = this._isMobile();\n var showDelete = editable && editable.destroy !== false && !isMobile;\n var resizable = editable && editable.resize !== false;\n var startDate = getDate(this.startDate());\n var endDate = getDate(this.endDate());\n var startTime = getMilliseconds(this.startTime());\n var endTime = getMilliseconds(this.endTime());\n var eventStartTime = event._time('start');\n var eventEndTime = event._time('end');\n var middle;\n if (startTime >= endTime) {\n endTime = getMilliseconds(new Date(this.endTime().getTime() + MS_PER_DAY - 1));\n }\n if (!isOneDayEvent && !event.isAllDay) {\n endDate = new Date(endDate.getTime() + MS_PER_DAY);\n }\n var eventStartDate = event.start;\n var eventEndDate = event.end;\n if (event.isAllDay) {\n eventEndDate = getDate(event.end);\n }\n if (!isInDateRange(getDate(eventStartDate), startDate, endDate) && !isInDateRange(eventEndDate, startDate, endDate) || isOneDayEvent && eventStartTime < startTime && eventEndTime > endTime) {\n middle = true;\n } else if (getDate(eventStartDate) < startDate || isOneDayEvent && eventStartTime < startTime) {\n tail = true;\n } else if (eventEndDate > endDate && !isOneDayEvent || isOneDayEvent && eventEndTime > endTime) {\n head = true;\n }\n var resources = this.eventResources(event);\n if (event._startTime && eventStartTime !== kendo.date.getMilliseconds(event.start)) {\n eventStartDate = new Date(eventStartTime);\n eventStartDate = kendo.timezone.apply(eventStartDate, 'Etc/UTC');\n }\n if (event._endTime && eventEndTime !== kendo.date.getMilliseconds(event.end)) {\n eventEndDate = new Date(eventEndTime);\n eventEndDate = kendo.timezone.apply(eventEndDate, 'Etc/UTC');\n }\n var data = extend({}, {\n ns: kendo.ns,\n resizable: resizable,\n showDelete: showDelete,\n middle: middle,\n head: head,\n tail: tail,\n singleDay: this._dates.length == 1,\n resources: resources,\n inverseColor: resources && resources[0] ? this._shouldInverseResourceColor(resources[0]) : false\n }, event, {\n start: eventStartDate,\n end: eventEndDate\n });\n var element = $(template(data));\n this.angular('compile', function () {\n return {\n elements: element,\n data: [{ dataItem: data }]\n };\n });\n return element;\n },\n _isInTimeSlot: function (event) {\n var slotStartTime = this.startTime(), slotEndTime = this.endTime(), startTime = event._startTime || event.start, endTime = event._endTime || event.end;\n if (getMilliseconds(slotEndTime) === getMilliseconds(kendo.date.getDate(slotEndTime))) {\n slotEndTime = kendo.date.getDate(slotEndTime);\n setTime(slotEndTime, MS_PER_DAY - 1);\n }\n if (event._date('end') > event._date('start')) {\n endTime = +event._date('end') + (MS_PER_DAY - 1);\n }\n endTime = endTime - event._date('end');\n startTime = startTime - event._date('start');\n slotEndTime = getMilliseconds(slotEndTime);\n slotStartTime = getMilliseconds(slotStartTime);\n if (slotStartTime === startTime && startTime === endTime) {\n return true;\n }\n var overlaps = startTime !== slotEndTime;\n return isInTimeRange(startTime, slotStartTime, slotEndTime, overlaps) || isInTimeRange(endTime, slotStartTime, slotEndTime, overlaps) || isInTimeRange(slotStartTime, startTime, endTime) || isInTimeRange(slotEndTime, startTime, endTime);\n },\n _isInDateSlot: function (event) {\n var groups = this.groups[0];\n var slotStart = groups.firstSlot().start;\n var slotEnd = groups.lastSlot().end - 1;\n var startTime = kendo.date.toUtcTime(event.start);\n var endTime = kendo.date.toUtcTime(event.end);\n return (isInDateRange(startTime, slotStart, slotEnd) || isInDateRange(endTime, slotStart, slotEnd) || isInDateRange(slotStart, startTime, endTime) || isInDateRange(slotEnd, startTime, endTime)) && (!isInDateRange(endTime, slotStart, slotStart) || isInDateRange(endTime, startTime, startTime) || event.isAllDay);\n },\n _updateAllDayHeaderHeight: function (height) {\n if (this._height !== height) {\n this._height = height;\n var allDaySlots = this.element.find('.k-scheduler-header-all-day td');\n if (allDaySlots.length) {\n allDaySlots.parent().add(this.element.find('.k-scheduler-times-all-day').parent()).height(height);\n for (var groupIndex = 0; groupIndex < this.groups.length; groupIndex++) {\n this.groups[groupIndex].refresh();\n }\n }\n }\n },\n _renderEvents: function (events, groupIndex) {\n var allDayEventContainer = this.datesHeader.find('.k-scheduler-header-wrap > div');\n var byDate = this._isGroupedByDate();\n var event;\n var idx;\n var length;\n for (idx = 0, length = events.length; idx < length; idx++) {\n event = events[idx];\n if (this._isInDateSlot(event)) {\n var isMultiDayEvent = event.isAllDay || event.end.getTime() - event.start.getTime() >= MS_PER_DAY;\n var container = isMultiDayEvent && !this._isVerticallyGrouped() ? allDayEventContainer : this.content;\n var element, ranges, range, start, end, group;\n if (!isMultiDayEvent) {\n if (this._isInTimeSlot(event)) {\n group = this.groups[groupIndex];\n if (!group._continuousEvents) {\n group._continuousEvents = [];\n }\n ranges = group.slotRanges(event);\n var rangeCount = ranges.length;\n for (var rangeIndex = 0; rangeIndex < rangeCount; rangeIndex++) {\n range = ranges[rangeIndex];\n start = event.start;\n end = event.end;\n if (rangeCount > 1) {\n if (rangeIndex === 0) {\n end = range.end.endDate();\n } else if (rangeIndex == rangeCount - 1) {\n start = range.start.startDate();\n } else {\n start = range.start.startDate();\n end = range.end.endDate();\n }\n }\n var occurrence = event.clone({\n start: start,\n end: end,\n _startTime: event._startTime,\n _endTime: event.endTime\n });\n if (this._isInTimeSlot(occurrence)) {\n var head = range.head;\n element = this._createEventElement(event, !isMultiDayEvent, head, range.tail);\n element.appendTo(container);\n this._positionEvent(occurrence, element, range);\n addContinuousEvent(group, range, element, false);\n }\n }\n }\n } else if (this.options.allDaySlot) {\n group = this.groups[groupIndex];\n if (!group._continuousEvents) {\n group._continuousEvents = [];\n }\n ranges = group.slotRanges(event);\n if (ranges.length) {\n range = ranges[0];\n var startIndex = range.start.index;\n var endIndex = range.end.index;\n if (byDate && startIndex !== endIndex) {\n start = range.start.start;\n end = range.end.end;\n var newStart = new Date(start);\n var newEnd = new Date(start);\n for (var i = range.start.index; i <= range.end.index; i++) {\n element = this._createEventElement(event, !isMultiDayEvent, i !== endIndex, i !== startIndex);\n var dateRange = group.daySlotRanges(newStart, newEnd, true)[0];\n newEnd.setDate(newEnd.getDate() + 1);\n newStart.setDate(newStart.getDate() + 1);\n this._positionAllDayEvent(element, dateRange);\n addContinuousEvent(group, dateRange, element, true);\n element.appendTo(container);\n }\n } else {\n element = this._createEventElement(event, !isMultiDayEvent);\n this._positionAllDayEvent(element, ranges[0]);\n addContinuousEvent(group, ranges[0], element, true);\n element.appendTo(container);\n }\n }\n }\n }\n }\n },\n render: function (events) {\n this._headerColumnCount = 0;\n this._groups();\n this.element.find('.k-event').remove();\n events = new kendo.data.Query(events).sort([\n {\n field: 'start',\n dir: 'asc'\n },\n {\n field: 'end',\n dir: 'desc'\n }\n ]).toArray();\n var eventsByResource = [];\n this._eventsByResource(events, this.groupedResources, eventsByResource);\n var eventsPerDate = $.map(this._dates, function (date) {\n return Math.max.apply(null, $.map(eventsByResource, function (events) {\n return $.grep(events, function (event) {\n return event.isMultiDay() && isInDateRange(date, getDate(event.start), getDate(event.end));\n }).length;\n }));\n });\n var height = Math.max.apply(null, eventsPerDate);\n this._updateAllDayHeaderHeight((height + 1) * this._allDayHeaderHeight);\n for (var groupIndex = 0; groupIndex < eventsByResource.length; groupIndex++) {\n this._renderEvents(eventsByResource[groupIndex], groupIndex);\n }\n this.refreshLayout();\n this._currentTime(false);\n this.trigger('activate');\n },\n _eventsByResource: function (events, resources, result) {\n var resource = resources[0];\n if (resource) {\n var view = resource.dataSource.view();\n for (var itemIdx = 0; itemIdx < view.length; itemIdx++) {\n var value = this._resourceValue(resource, view[itemIdx]);\n var eventsFilteredByResource = new kendo.data.Query(events).filter({\n field: resource.field,\n operator: SchedulerView.groupEqFilter(value)\n }).toArray();\n if (resources.length > 1) {\n this._eventsByResource(eventsFilteredByResource, resources.slice(1), result);\n } else {\n result.push(eventsFilteredByResource);\n }\n }\n } else {\n result.push(events);\n }\n },\n _columnOffsetForResource: function (index) {\n return this._columnCountForLevel(index) / this._columnCountForLevel(index - 1);\n },\n _columnCountForLevel: function (level) {\n var columnLevel = this.columnLevels[level];\n return columnLevel ? columnLevel.length : 0;\n },\n _rowCountForLevel: function (level) {\n var rowLevel = this.rowLevels[level];\n return rowLevel ? rowLevel.length : 0;\n },\n clearSelection: function () {\n this.content.add(this.datesHeader).find('.k-state-selected').removeAttr('id').attr('aria-selected', false).removeClass('k-state-selected');\n },\n _updateDirection: function (selection, ranges, multiple, reverse, vertical) {\n var isDaySlot = selection.isAllDay;\n var startSlot = ranges[0].start;\n var endSlot = ranges[ranges.length - 1].end;\n if (multiple) {\n if (vertical) {\n if (!isDaySlot && startSlot.index === endSlot.index && startSlot.collectionIndex === endSlot.collectionIndex) {\n selection.backward = reverse;\n }\n } else {\n if (isDaySlot && startSlot.index === endSlot.index || !isDaySlot && startSlot.collectionIndex === endSlot.collectionIndex) {\n selection.backward = reverse;\n }\n }\n }\n },\n _changeViewPeriod: function (selection, reverse, vertical) {\n if (!vertical) {\n var date = reverse ? this.previousDate() : this.nextDate();\n var start = selection.start;\n var end = selection.end;\n var verticalByDate = this._isGroupedByDate() && this._isVerticallyGrouped();\n var group = this.groups[selection.groupIndex];\n var collection = reverse ? group._timeSlotCollections : group._getCollections(group.daySlotCollectionCount());\n var slots = collection[collection.length - 1]._slots;\n var slotIndex = !reverse && !group.daySlotCollectionCount() ? 0 : slots.length - 1;\n var endMilliseconds;\n selection.start = new Date(date);\n selection.end = new Date(date);\n if (verticalByDate) {\n var newStart = new Date(slots[slotIndex].startDate());\n var newEnd = new Date(slots[slotIndex].endDate());\n endMilliseconds = getMilliseconds(newEnd) ? getMilliseconds(newEnd) : MS_PER_DAY;\n setTime(selection.start, getMilliseconds(newStart));\n setTime(selection.end, endMilliseconds);\n if (group.daySlotCollectionCount()) {\n selection.isAllDay = !selection.isAllDay;\n }\n } else {\n endMilliseconds = selection.isAllDay || !getMilliseconds(end) ? MS_PER_DAY : getMilliseconds(end);\n setTime(selection.start, getMilliseconds(start));\n setTime(selection.end, endMilliseconds);\n }\n if (!this._isVerticallyGrouped()) {\n selection.groupIndex = reverse ? this.groups.length - 1 : 0;\n }\n selection.events = [];\n return true;\n }\n }\n });\n extend(true, ui, {\n MultiDayView: MultiDayView,\n DayView: MultiDayView.extend({\n options: {\n name: 'DayView',\n title: 'Day'\n },\n name: 'day'\n }),\n WeekView: MultiDayView.extend({\n options: {\n name: 'WeekView',\n title: 'Week',\n selectedDateFormat: '{0:D} - {1:D}',\n selectedShortDateFormat: '{0:d} - {1:d}'\n },\n name: 'week',\n calculateDateRange: function () {\n var selectedDate = this.options.date, start = kendo.date.dayOfWeek(selectedDate, this.calendarInfo().firstDay, -1), idx, length, dates = [];\n for (idx = 0, length = 7; idx < length; idx++) {\n dates.push(start);\n start = kendo.date.nextDay(start);\n }\n this._render(dates);\n }\n }),\n WorkWeekView: MultiDayView.extend({\n options: {\n name: 'WorkWeekView',\n title: 'Work Week',\n selectedDateFormat: '{0:D} - {1:D}',\n selectedShortDateFormat: '{0:d} - {1:d}'\n },\n name: 'workWeek',\n nextDate: function () {\n var weekStart = kendo.date.dayOfWeek(kendo.date.nextDay(this.startDate()), this.calendarInfo().firstDay, 1);\n return kendo.date.addDays(weekStart, this._workDays[0]);\n },\n previousDate: function () {\n var weekStart = kendo.date.dayOfWeek(this.startDate(), this.calendarInfo().firstDay, -1);\n var workDays = this._workDays;\n return kendo.date.addDays(weekStart, workDays[workDays.length - 1] - 7);\n },\n calculateDateRange: function () {\n var selectedDate = this.options.date, dayOfWeek = kendo.date.dayOfWeek, weekStart = dayOfWeek(selectedDate, this.calendarInfo().firstDay, -1), start = dayOfWeek(weekStart, this.options.workWeekStart, 1), end = dayOfWeek(start, this.options.workWeekEnd, 1), dates = [];\n while (start <= end) {\n dates.push(start);\n start = kendo.date.nextDay(start);\n }\n this._render(dates);\n }\n })\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.scheduler.agendaview', ['kendo.scheduler.view'], f);\n}(function () {\n var __meta__ = {\n id: 'scheduler.agendaview',\n name: 'Scheduler Agenda View',\n category: 'web',\n description: 'The Scheduler Agenda View',\n depends: ['scheduler.view'],\n hidden: true\n };\n (function ($) {\n var kendo = window.kendo, ui = kendo.ui, NS = '.kendoAgendaView';\n var EVENT_WRAPPER_FORMAT = '<div class=\"k-task\" title=\"#:title.replace(/\"/g,\"\\'\")#\" data-#=kendo.ns#uid=\"#=uid#\">' + '# if (resources[0]) {#' + '<span class=\"k-scheduler-mark\" style=\"background-color:#=resources[0].color#\"></span>' + '# } #' + '# if (data.isException()) { #' + '<span class=\"k-icon k-i-warning\"></span>' + '# } else if (data.isRecurring()) {#' + '<span class=\"k-icon k-i-reload\"></span>' + '# } #' + '{0}' + '#if (showDelete) {#' + '<a href=\"\\\\#\" class=\"k-link k-event-delete\"><span class=\"k-icon k-i-close\"></span></a>' + '#}#' + '</div>';\n var AgendaGroupedView = kendo.Class.extend({\n init: function (view) {\n this._view = view;\n },\n _getColumns: function (groupHeaders, columns) {\n return groupHeaders.concat(columns);\n },\n _getGroupsInDay: function () {\n return [];\n },\n _getSumOfItemsForDate: function () {\n return 0;\n },\n _renderTaskGroupsCells: function (headerCells, groups, taskGroupIndex, taskIndex) {\n var view = this._view;\n if (taskGroupIndex === 0 && taskIndex === 0 && groups.length) {\n view._renderTaskGroupsCells(headerCells, groups);\n }\n },\n _renderDateCell: function (tableRow, groups, tasks, date, taskGroupIndex, tasksGroups) {\n var view = this._view;\n tableRow.push(kendo.format('<td class=\"k-scheduler-datecolumn{3}{2}\" rowspan=\"{0}\">{1}</td>', tasks.length, view._dateTemplate({ date: date }), taskGroupIndex == tasksGroups.length - 1 && !groups.length ? ' k-last' : '', !groups.length ? ' k-first' : ''));\n },\n _renderDates: function () {\n return undefined;\n },\n _getParents: function (parentGroups) {\n return parentGroups.splice(0);\n },\n _getGroupsByDate: function () {\n return undefined;\n },\n _renderTaskGroups: function (table, items, parents) {\n var view = this._view;\n table.append(view._renderTaskGroups(items, parents));\n }\n });\n var AgendaGroupedByDateView = kendo.Class.extend({\n init: function (view) {\n this._view = view;\n },\n _getColumns: function (groupHeaders, columns) {\n var view = this._view;\n if (view._isMobilePhoneView()) {\n return groupHeaders.concat(columns);\n } else {\n var date = columns.slice(0, 1);\n var columnsWithoutDate = columns.slice(1);\n return date.concat(groupHeaders).concat(columnsWithoutDate);\n }\n },\n _compareDateGroups: function (currentGroup, prevGroup, index) {\n if (currentGroup[index].text == prevGroup[index].text) {\n if (index === 0) {\n return true;\n } else {\n return this._compareDateGroups(currentGroup, prevGroup, index - 1);\n }\n }\n return false;\n },\n _getGroupsInDay: function (tasksGroups, groups) {\n var groupsInDay = [];\n var prevGroup = null;\n for (var tasksGroupIdx = 0; tasksGroupIdx < tasksGroups.length; tasksGroupIdx++) {\n for (var itemsIdx = 0; itemsIdx < tasksGroups[tasksGroupIdx].items.length; itemsIdx++) {\n var idx = 0;\n if (groupsInDay.length === 0) {\n for (idx; idx < groups[tasksGroupIdx].length; idx++) {\n groupsInDay.push([1]);\n }\n } else {\n for (idx; idx < groups[tasksGroupIdx].length; idx++) {\n if (this._compareDateGroups(groups[tasksGroupIdx], prevGroup, idx)) {\n groupsInDay[idx][groupsInDay[idx].length - 1]++;\n } else {\n var lastItemValue = groupsInDay[idx][groupsInDay[idx].length - 1] - 1;\n for (var i = 0; i < lastItemValue; i++) {\n groupsInDay[idx].push(0);\n }\n groupsInDay[idx].push(1);\n }\n }\n }\n prevGroup = groups[tasksGroupIdx];\n }\n }\n return groupsInDay;\n },\n _getSumOfItemsForDate: function (tasksGroups) {\n var sumOfItemsForDate = 0;\n for (var i = 0; i < tasksGroups.length; i++) {\n sumOfItemsForDate += tasksGroups[i].items.length;\n }\n return sumOfItemsForDate;\n },\n _renderTaskGroupsCells: function (headerCells, groups, taskGroupIndex, taskIndex, groupsInDay, sumOfItemsForDate, date, groupsRowSpanIndex) {\n var view = this._view;\n var isPhoneView = view._isMobilePhoneView();\n if (!isPhoneView) {\n if (taskGroupIndex === 0 && taskIndex === 0) {\n headerCells.push(kendo.format('<td class=\"k-scheduler-datecolumn k-first\" rowspan=\"{0}\">{1}</td>', sumOfItemsForDate, view._dateTemplate({ date: date })));\n }\n for (var idx = 0; idx < groups[taskGroupIndex].length; idx++) {\n if (groupsInDay[idx][groupsRowSpanIndex]) {\n headerCells.push(kendo.format('<td class=\"k-scheduler-groupcolumn\" rowspan=\"{0}\">{1}</td>', groupsInDay[idx][groupsRowSpanIndex], view._groupTemplate({ value: groups[taskGroupIndex][idx].text }), groups[taskGroupIndex][idx].className));\n }\n }\n } else {\n if (taskGroupIndex === 0 && taskIndex === 0 && groups.length) {\n view._renderTaskGroupsCells(headerCells, groups);\n }\n }\n },\n _renderDateCell: function () {\n return undefined;\n },\n _renderDates: function (table) {\n var view = this._view;\n var sortedArray = view._groupsByDate.sort(function (a, b) {\n return a.array[0].value.getTime() - b.array[0].value.getTime();\n });\n for (var i = 0; i < sortedArray.length; i++) {\n table.append(view._renderTaskGroups(sortedArray[i].array, sortedArray[i].groups));\n }\n },\n _getParents: function (parentGroups) {\n return parentGroups.slice(0);\n },\n _getGroupsByDate: function (groups, idx, parents) {\n var view = this._view;\n if (groups[idx].items) {\n for (var taskGroupIndex = 0; taskGroupIndex < groups[idx].items.length; taskGroupIndex++) {\n var date = groups[idx].items[taskGroupIndex].value;\n var dateExists = false;\n for (var i = 0; i < view._groupsByDate.length; i++) {\n if (view._groupsByDate[i].array[0].value.getTime() === date.getTime()) {\n dateExists = true;\n view._groupsByDate[i].array.push(groups[idx].items[taskGroupIndex]);\n view._groupsByDate[i].groups.push(parents);\n }\n }\n if (!dateExists) {\n view._groupsByDate.push({\n array: [groups[idx].items[taskGroupIndex]],\n groups: [parents]\n });\n }\n }\n }\n },\n _renderTaskGroups: function () {\n return undefined;\n }\n });\n kendo.ui.scheduler.AgendaGroupedView = AgendaGroupedView;\n kendo.ui.scheduler.AgendaGroupedByDateView = AgendaGroupedByDateView;\n ui.AgendaView = ui.SchedulerView.extend({\n init: function (element, options) {\n ui.SchedulerView.fn.init.call(this, element, options);\n this._groupedView = this._getGroupedView();\n options = this.options;\n if (options.editable) {\n options.editable = $.extend({ 'delete': true }, options.editable, {\n create: false,\n update: false\n });\n }\n this.title = options.title;\n this._eventTemplate = this._eventTmpl(options.eventTemplate, EVENT_WRAPPER_FORMAT);\n this._dateTemplate = kendo.template(options.eventDateTemplate);\n this._groupTemplate = kendo.template(options.eventGroupTemplate);\n this._timeTemplate = kendo.template(options.eventTimeTemplate);\n this.element.on('mouseenter' + NS, '.k-scheduler-agenda .k-scheduler-content tr', '_mouseenter').on('mouseleave' + NS, '.k-scheduler-agenda .k-scheduler-content tr', '_mouseleave').on('click' + NS, '.k-scheduler-agenda .k-scheduler-content .k-link:has(.k-i-close)', '_remove');\n this._renderLayout(options.date);\n },\n name: 'agenda',\n _getGroupedView: function () {\n if (this._isGroupedByDate()) {\n return new kendo.ui.scheduler.AgendaGroupedByDateView(this);\n } else {\n return new kendo.ui.scheduler.AgendaGroupedView(this);\n }\n },\n _mouseenter: function (e) {\n $(e.currentTarget).addClass('k-state-hover');\n },\n _mouseleave: function (e) {\n $(e.currentTarget).removeClass('k-state-hover');\n },\n _remove: function (e) {\n e.preventDefault();\n this.trigger('remove', { uid: $(e.currentTarget).closest('.k-task').attr(kendo.attr('uid')) });\n },\n nextDate: function () {\n return kendo.date.nextDay(this.startDate());\n },\n startDate: function () {\n return this._startDate;\n },\n endDate: function () {\n return this._endDate;\n },\n previousDate: function () {\n return kendo.date.previousDay(this.startDate());\n },\n _renderLayout: function (date) {\n this._startDate = date;\n this._endDate = kendo.date.addDays(date, 7);\n this.createLayout(this._layout());\n this.table.addClass('k-scheduler-agenda');\n },\n _layout: function () {\n var columns = [\n {\n text: this.options.messages.time,\n className: 'k-scheduler-timecolumn'\n },\n { text: this.options.messages.event }\n ];\n if (!this._isMobilePhoneView()) {\n columns.splice(0, 0, {\n text: this.options.messages.date,\n className: 'k-scheduler-datecolumn'\n });\n }\n var resources = this.groupedResources;\n if (resources.length) {\n var groupHeaders = [];\n for (var idx = 0; idx < resources.length; idx++) {\n groupHeaders.push({\n text: '',\n className: 'k-scheduler-groupcolumn'\n });\n }\n columns = this._groupedView._getColumns(groupHeaders, columns);\n }\n return { columns: columns };\n },\n _tasks: function (events) {\n var tasks = [];\n for (var idx = 0; idx < events.length; idx++) {\n var event = events[idx];\n var start = event.start;\n var end = event.isAllDay ? kendo.date.getDate(event.end) : event.end;\n var eventDurationInDays = Math.ceil((end - kendo.date.getDate(start)) / kendo.date.MS_PER_DAY);\n if (event.isAllDay) {\n eventDurationInDays += 1;\n }\n var task = event.clone();\n task.startDate = kendo.date.getDate(start);\n if (task.startDate >= this.startDate()) {\n tasks.push(task);\n }\n if (eventDurationInDays > 1) {\n task.end = kendo.date.nextDay(start);\n task.head = true;\n for (var day = 1; day < eventDurationInDays; day++) {\n start = task.end;\n task = event.clone();\n task.start = task.startDate = kendo.date.getDate(start);\n task.end = kendo.date.nextDay(start);\n if (day == eventDurationInDays - 1) {\n task.end = new Date(task.start.getFullYear(), task.start.getMonth(), task.start.getDate(), end.getHours(), end.getMinutes(), end.getSeconds(), end.getMilliseconds());\n task.tail = true;\n } else {\n task.isAllDay = true;\n task.middle = true;\n }\n if (kendo.date.getDate(task.end) <= this.endDate() && task.start >= this.startDate() || kendo.date.getDate(task.start).getTime() == this.endDate().getTime()) {\n tasks.push(task);\n }\n }\n }\n }\n return new kendo.data.Query(tasks).sort([\n {\n field: 'start',\n dir: 'asc'\n },\n {\n field: 'end',\n dir: 'asc'\n }\n ]).groupBy({ field: 'startDate' }).toArray();\n },\n _renderTaskGroups: function (tasksGroups, groups) {\n var tableRows = [];\n var editable = this.options.editable;\n var showDelete = editable && editable.destroy !== false && !this._isMobile();\n var isPhoneView = this._isMobilePhoneView();\n var sumOfItemsForDate = this._groupedView._getSumOfItemsForDate(tasksGroups);\n var groupsInDay = this._groupedView._getGroupsInDay(tasksGroups, groups);\n var groupsRowSpanIndex = 0;\n for (var taskGroupIndex = 0; taskGroupIndex < tasksGroups.length; taskGroupIndex++) {\n var date = tasksGroups[taskGroupIndex].value;\n var tasks = tasksGroups[taskGroupIndex].items;\n var today = kendo.date.isToday(date);\n for (var taskIndex = 0; taskIndex < tasks.length; taskIndex++) {\n var task = tasks[taskIndex];\n var tableRow = [];\n var headerCells = !isPhoneView ? tableRow : [];\n this._groupedView._renderTaskGroupsCells(headerCells, groups, taskGroupIndex, taskIndex, groupsInDay, sumOfItemsForDate, date, groupsRowSpanIndex);\n groupsRowSpanIndex++;\n if (taskIndex === 0) {\n if (isPhoneView) {\n headerCells.push(kendo.format('<td class=\"k-scheduler-datecolumn\" colspan=\"2\">{0}</td>', this._dateTemplate({ date: date })));\n tableRows.push('<tr role=\"row\" aria-selected=\"false\"' + (today ? ' class=\"k-today\">' : '>') + headerCells.join('') + '</tr>');\n } else {\n this._groupedView._renderDateCell(tableRow, groups, tasks, date, taskGroupIndex, tasksGroups);\n }\n }\n if (task.head) {\n task.format = '{0:t}';\n } else if (task.tail) {\n task.format = '{1:t}';\n } else {\n task.format = '{0:t}-{1:t}';\n }\n task.resources = this.eventResources(task);\n tableRow.push(kendo.format('<td class=\"k-scheduler-timecolumn\"><div>{0}{1}{2}</div></td><td>{3}</td>', task.tail || task.middle ? '<span class=\"k-icon k-i-arrow-60-left\"></span>' : '', this._timeTemplate(task.clone({\n start: task._startTime || task.start,\n end: task.endTime || task.end\n })), task.head || task.middle ? '<span class=\"k-icon k-i-arrow-60-right\"></span>' : '', this._eventTemplate(task.clone({ showDelete: showDelete }))));\n tableRows.push('<tr role=\"row\" aria-selected=\"false\"' + (today ? ' class=\"k-today\">' : '>') + tableRow.join('') + '</tr>');\n }\n }\n return tableRows.join('');\n },\n _renderTaskGroupsCells: function (headerCells, groups) {\n for (var idx = 0; idx < groups.length; idx++) {\n headerCells.push(kendo.format('<td class=\"k-scheduler-groupcolumn{2}\" rowspan=\"{0}\">{1}</td>', groups[idx].rowSpan, this._groupTemplate({ value: groups[idx].text }), groups[idx].className));\n }\n },\n render: function (events) {\n var table = this.content.find('table').empty();\n var groups = [];\n if (events.length > 0) {\n var resources = this.groupedResources;\n if (resources.length) {\n groups = this._createGroupConfiguration(events, resources, null);\n this._groupsByDate = [];\n this._renderGroups(groups, table, []);\n this._groupedView._renderDates(table);\n } else {\n groups = this._tasks(events);\n table.append(this._renderTaskGroups(groups, []));\n }\n }\n var items = this._eventsList = flattenTaskGroups(groups);\n this._angularItems(table, items);\n this.refreshLayout();\n this.trigger('activate');\n },\n _angularItems: function (table, items) {\n this.angular('compile', function () {\n var data = [], elements = items.map(function (item) {\n data.push({ dataItem: item });\n return table.find('.k-task[' + kendo.attr('uid') + '=' + item.uid + ']');\n });\n return {\n elements: elements,\n data: data\n };\n });\n },\n _renderGroups: function (groups, table, parentGroups) {\n for (var idx = 0, length = groups.length; idx < length; idx++) {\n var parents = this._groupedView._getParents(parentGroups);\n parents.push(groups[idx]);\n this._groupedView._getGroupsByDate(groups, idx, parents);\n if (groups[idx].groups) {\n this._renderGroups(groups[idx].groups, table, parents);\n } else {\n this._groupedView._renderTaskGroups(table, groups[idx].items, parents);\n }\n }\n },\n _createGroupConfiguration: function (events, resources, parent) {\n var resource = resources[0];\n var configuration = [];\n var data = resource.dataSource.view();\n var isPhoneView = this._isMobilePhoneView();\n for (var dataIndex = 0; dataIndex < data.length; dataIndex++) {\n var value = resourceValue(resource, data[dataIndex]);\n var tmp = new kendo.data.Query(events).filter({\n field: resource.field,\n operator: ui.SchedulerView.groupEqFilter(value)\n }).toArray();\n if (tmp.length) {\n var tasks = this._tasks(tmp);\n var className = parent ? '' : ' k-first';\n if (dataIndex === data.length - 1 && (!parent || parent.className.indexOf('k-last') > -1)) {\n className += ' k-last';\n }\n var obj = {\n text: kendo.getter(resource.dataTextField)(data[dataIndex]),\n value: value,\n rowSpan: 0,\n className: className\n };\n if (resources.length > 1) {\n obj.groups = this._createGroupConfiguration(tmp, resources.slice(1), obj);\n if (parent) {\n parent.rowSpan += obj.rowSpan;\n }\n } else {\n obj.items = tasks;\n var span = rowSpan(obj.items);\n if (isPhoneView) {\n span += obj.items.length;\n }\n obj.rowSpan = span;\n if (parent) {\n parent.rowSpan += span;\n }\n }\n configuration.push(obj);\n }\n }\n return configuration;\n },\n selectionByElement: function (cell) {\n var index, event;\n cell = $(cell);\n if (cell.hasClass('k-scheduler-datecolumn') || !this._eventsList.length) {\n return;\n }\n if (cell.is('.k-task')) {\n cell = cell.closest('td');\n }\n if (this._isMobile()) {\n var parent = cell.parent();\n index = parent.parent().children().filter(function () {\n return $(this).children(':not(.k-scheduler-datecolumn)').length;\n }).index(parent);\n } else {\n index = cell.parent().index();\n }\n event = this._eventsList[index];\n return {\n index: index,\n start: event.start,\n end: event.end,\n isAllDay: event.isAllDay,\n uid: event.uid\n };\n },\n select: function (selection) {\n this.clearSelection();\n var row = this.table.find('.k-task').eq(selection.index).closest('tr').addClass('k-state-selected').attr('aria-selected', true)[0];\n this.current(row);\n },\n move: function (selection, key) {\n var handled = false;\n var index = selection.index;\n if (key == kendo.keys.UP) {\n index--;\n handled = true;\n } else if (key == kendo.keys.DOWN) {\n index++;\n handled = true;\n }\n if (handled) {\n var event = this._eventsList[index];\n if (event) {\n selection.start = event.start;\n selection.end = event.end;\n selection.isAllDay = event.isAllDay;\n selection.events = [event.uid];\n selection.index = index;\n }\n }\n return handled;\n },\n moveToEvent: function () {\n return false;\n },\n constrainSelection: function (selection) {\n var event = this._eventsList[0];\n if (event) {\n selection.start = event.start;\n selection.end = event.end;\n selection.isAllDay = event.isAllDay;\n selection.events = [event.uid];\n selection.index = 0;\n }\n },\n isInRange: function () {\n return true;\n },\n destroy: function () {\n if (this.element) {\n this.element.off(NS);\n }\n ui.SchedulerView.fn.destroy.call(this);\n },\n options: {\n title: 'Agenda',\n name: 'agenda',\n editable: true,\n selectedDateFormat: '{0:D}-{1:D}',\n selectedShortDateFormat: '{0:d} - {1:d}',\n eventTemplate: '#:title#',\n eventTimeTemplate: '#if(data.isAllDay) {#' + '#=this.options.messages.allDay#' + '#} else { #' + '#=kendo.format(format, start, end)#' + '# } #',\n eventDateTemplate: '<strong class=\"k-scheduler-agendaday\">' + '#=kendo.toString(date, \"dd\")#' + '</strong>' + '<em class=\"k-scheduler-agendaweek\">' + '#=kendo.toString(date,\"dddd\")#' + '</em>' + '<span class=\"k-scheduler-agendadate\">' + '#=kendo.toString(date, \"y\")#' + '</span>',\n eventGroupTemplate: '<strong class=\"k-scheduler-adgendagroup\">' + '#=value#' + '</strong>',\n messages: {\n event: 'Event',\n date: 'Date',\n time: 'Time',\n allDay: 'all day'\n }\n }\n });\n function rowSpan(tasks) {\n var result = 0;\n for (var idx = 0, length = tasks.length; idx < length; idx++) {\n result += tasks[idx].items.length;\n }\n return result;\n }\n function resourceValue(resource, item) {\n if (resource.valuePrimitive) {\n item = kendo.getter(resource.dataValueField)(item);\n }\n return item;\n }\n function flattenTaskGroups(groups) {\n var idx = 0, length = groups.length, item, result = [];\n for (; idx < length; idx++) {\n item = groups[idx];\n if (item.groups) {\n item = flattenGroup(item.groups);\n result = result.concat(item);\n } else {\n result = result.concat(flattenGroup(item.items));\n }\n }\n return result;\n }\n function flattenGroup(groups) {\n var items = [].concat(groups), item = items.shift(), result = [], push = [].push;\n while (item) {\n if (item.groups) {\n push.apply(items, item.groups);\n } else if (item.items) {\n push.apply(items, item.items);\n } else {\n push.call(result, item);\n }\n item = items.shift();\n }\n return result;\n }\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.scheduler.monthview', ['kendo.scheduler.view'], f);\n}(function () {\n var __meta__ = {\n id: 'scheduler.monthview',\n name: 'Scheduler Month View',\n category: 'web',\n description: 'The Scheduler Month View',\n depends: ['scheduler.view'],\n hidden: true\n };\n (function ($) {\n var kendo = window.kendo, ui = kendo.ui, SchedulerView = ui.SchedulerView, NS = '.kendoMonthView', extend = $.extend, getDate = kendo.date.getDate, MS_PER_DAY = kendo.date.MS_PER_DAY, NUMBER_OF_ROWS = 6, NUMBER_OF_COLUMNS = 7, DAY_TEMPLATE = kendo.template('<span class=\"k-link k-nav-day\">#:kendo.toString(date, \"dd\")#</span>'), EVENT_WRAPPER_STRING = '<div role=\"gridcell\" aria-selected=\"false\" data-#=ns#uid=\"#=uid#\"' + '#if (resources[0]) { #' + 'style=\"background-color:#=resources[0].color #; border-color: #=resources[0].color#\"' + 'class=\"k-event#=inverseColor ? \" k-event-inverse\" : \"\"#\"' + '#} else {#' + 'class=\"k-event\"' + '#}#' + '>' + '<span class=\"k-event-actions\">' + '# if(data.tail || data.middle) {#' + '<span class=\"k-icon k-i-arrow-60-left\"></span>' + '#}#' + '# if(data.isException()) {#' + '<span class=\"k-icon k-i-warning\"></span>' + '# } else if(data.isRecurring()) {#' + '<span class=\"k-icon k-i-reload\"></span>' + '#}#' + '</span>' + '{0}' + '<span class=\"k-event-actions\">' + '#if (showDelete) {#' + '<a href=\"\\\\#\" class=\"k-link k-event-delete\"><span class=\"k-icon k-i-close\"></span></a>' + '#}#' + '# if(data.head || data.middle) {#' + '<span class=\"k-icon k-i-arrow-60-right\"></span>' + '#}#' + '</span>' + '# if(resizable && !data.tail && !data.middle) {#' + '<span class=\"k-resize-handle k-resize-w\"></span>' + '#}#' + '# if(resizable && !data.head && !data.middle) {#' + '<span class=\"k-resize-handle k-resize-e\"></span>' + '#}#' + '</div>', EVENT_TEMPLATE = kendo.template('<div title=\"#=title.replace(/\"/g,\"&\\\\#34;\")#\">' + '<div class=\"k-event-template\">#:title#</div>' + '</div>');\n var MORE_BUTTON_TEMPLATE = kendo.template('<div style=\"width:#=width#px;left:#=left#px;top:#=top#px\" class=\"k-more-events k-button\"><span>...</span></div>');\n var MonthGroupedView = kendo.Class.extend({\n init: function (view) {\n this._view = view;\n },\n _verticalRowCountForLevel: function (level) {\n var view = this._view;\n return view._rowCountForLevel(level);\n },\n _horizontalGroupCountForLevel: function (level) {\n var view = this._view;\n return view._columnCountForLevel(level);\n },\n _getCalendarRowsLength: function (cellsPerRow, cellCount) {\n return cellCount / cellsPerRow;\n },\n _createRows: function (start, startIdx, horizontalGroupCount, verticalGroupIndex) {\n var view = this._view;\n var cellsPerRow = NUMBER_OF_COLUMNS;\n var isVerticallyGrouped = view._isVerticallyGrouped();\n var html = '';\n for (var groupIdx = 0; groupIdx < horizontalGroupCount; groupIdx++) {\n html += view._createRow(start, startIdx, cellsPerRow, isVerticallyGrouped ? verticalGroupIndex : groupIdx);\n }\n return html;\n },\n _adjustStartDate: function (start) {\n return kendo.date.addDays(start, NUMBER_OF_COLUMNS);\n },\n _getContent: function (content, startDate, resources) {\n return content({\n date: startDate,\n resources: resources\n });\n },\n _getTimeSlotByPosition: function (x, y, groupIndex) {\n var group = this._view.groups[groupIndex];\n return group.daySlotByPosition(x, y);\n },\n _nextSlotStartDate: function (startDate) {\n return kendo.date.nextDay(startDate);\n },\n _createRowsLayout: function (resources, rows, groupHeaderTemplate) {\n var view = this._view;\n return view._createRowsLayout(resources, rows, groupHeaderTemplate);\n },\n _createVerticalColumnsLayout: function (resources, rows, groupHeaderTemplate, columns) {\n return columns;\n },\n _createColumnsLayout: function (resources, columns, groupHeaderTemplate) {\n var view = this._view;\n return view._createColumnsLayout(resources, columns, groupHeaderTemplate);\n },\n _verticalGroupCount: function (level) {\n var view = this._view;\n return view._rowCountForLevel(level);\n },\n _horizontalGroupCount: function (level) {\n var view = this._view;\n return view._columnCountForLevel(level) / view._columnOffsetForResource(level);\n },\n _positionEvent: function (event, group, range, rangeCount, start, end, rangeIndex) {\n var view = this._view;\n var isMobilePhoneView = view._isMobilePhoneView();\n if (rangeCount > 1) {\n if (rangeIndex === 0) {\n end = range.end.endDate();\n } else if (rangeIndex == rangeCount - 1) {\n start = range.start.startDate();\n } else {\n start = range.start.startDate();\n end = range.end.endDate();\n }\n }\n var occurrence = event.clone({\n start: start,\n end: end,\n head: range.head,\n tail: range.tail\n });\n if (isMobilePhoneView) {\n view._positionMobileEvent(range, view._createEventElement(occurrence), group);\n } else {\n view._positionEvent(range, view._createEventElement(occurrence), group);\n }\n },\n _addDaySlotCollections: function (groupCount, tableRows, startDate) {\n var view = this._view;\n var columnCount = NUMBER_OF_COLUMNS;\n var rowCount = NUMBER_OF_ROWS;\n for (var groupIndex = 0; groupIndex < groupCount; groupIndex++) {\n var cellCount = 0;\n var rowMultiplier = 0;\n if (view._isVerticallyGrouped()) {\n rowMultiplier = groupIndex;\n }\n for (var rowIndex = rowMultiplier * rowCount; rowIndex < (rowMultiplier + 1) * rowCount; rowIndex++) {\n var group = view.groups[groupIndex];\n var collection = group.addDaySlotCollection(kendo.date.addDays(startDate, cellCount), kendo.date.addDays(startDate, cellCount + columnCount));\n var tableRow = tableRows[rowIndex];\n var cells = tableRow.children;\n var cellMultiplier = 0;\n tableRow.setAttribute('role', 'row');\n if (!view._isVerticallyGrouped()) {\n cellMultiplier = groupIndex;\n }\n for (var cellIndex = cellMultiplier * columnCount; cellIndex < (cellMultiplier + 1) * columnCount; cellIndex++) {\n var cell = cells[cellIndex];\n view.addDaySlot(collection, cell, startDate, cellCount);\n cellCount++;\n }\n }\n }\n },\n _changePeriodGroupIndex: function (reverse) {\n var view = this._view;\n return reverse ? view.groups.length - 1 : 0;\n },\n _createResizeHint: function (range) {\n var view = this._view;\n var left = range.startSlot().offsetLeft;\n var top = range.start.offsetTop;\n var width = range.innerWidth();\n var height = range.start.clientHeight - 2;\n var hint = SchedulerView.fn._createResizeHint.call(view, left, top, width, height);\n view._appendResizeHint(hint);\n },\n _createMoveHint: function (range, event) {\n var view = this._view;\n var startSlot = range.startSlot();\n var endSlot = range.endSlot();\n var hint = view._createEventElement(event.clone({\n head: range.head,\n tail: range.tail\n }));\n hint.css({\n left: startSlot.offsetLeft + 2,\n top: startSlot.offsetTop + startSlot.firstChildHeight,\n height: view.options.eventHeight,\n width: range.innerWidth() - (startSlot.index !== endSlot.index ? 5 : 4)\n });\n hint.addClass('k-event-drag-hint');\n view._appendMoveHint(hint);\n }\n });\n var MonthGroupedByDateView = kendo.Class.extend({\n init: function (view) {\n this._view = view;\n },\n _verticalRowCountForLevel: function () {\n return 1;\n },\n _horizontalGroupCountForLevel: function (level) {\n var view = this._view;\n return view._columnCountForLevel(level + 1) / NUMBER_OF_COLUMNS;\n },\n _createRows: function (start, startIdx, horizontalGroupCount) {\n var view = this._view;\n var cellsPerRow = NUMBER_OF_COLUMNS;\n var isVerticallyGrouped = view._isVerticallyGrouped();\n var html = '';\n var dateIdx = 0;\n if (isVerticallyGrouped) {\n var verticalStart = new Date(start);\n var groupCount = view._groupCount();\n for (dateIdx; dateIdx < NUMBER_OF_ROWS; dateIdx++) {\n html += view._createRow(verticalStart, startIdx, groupCount, dateIdx);\n verticalStart = kendo.date.addDays(verticalStart, cellsPerRow);\n }\n start = kendo.date.nextDay(start);\n } else {\n for (dateIdx; dateIdx < cellsPerRow; dateIdx++) {\n html += view._createRow(start, startIdx, horizontalGroupCount, dateIdx);\n start = kendo.date.nextDay(start);\n }\n start = kendo.date.addDays(start, cellsPerRow);\n }\n return html;\n },\n _adjustStartDate: function (start, isLastRow) {\n var view = this._view;\n var isVerticallyGrouped = view._isVerticallyGrouped();\n if (isVerticallyGrouped) {\n if (isLastRow) {\n return kendo.date.addDays(start, NUMBER_OF_COLUMNS * (NUMBER_OF_ROWS - 1) + 1);\n } else {\n return kendo.date.nextDay(start);\n }\n }\n return kendo.date.addDays(start, NUMBER_OF_COLUMNS);\n },\n _getContent: function (content, startDate, resources, cellIdx) {\n if (cellIdx === 0) {\n return content({\n date: startDate,\n resources: resources\n });\n }\n return '';\n },\n _getTimeSlotByPosition: function (x, y, groupIndex) {\n var group = this._view.groups[groupIndex];\n return group.daySlotByPosition(x, y, true);\n },\n _nextSlotStartDate: function (startDate) {\n return startDate;\n },\n _getCalendarRowsLength: function () {\n var view = this._view;\n var isVerticallyGrouped = view._isVerticallyGrouped();\n return isVerticallyGrouped ? NUMBER_OF_COLUMNS : NUMBER_OF_ROWS;\n },\n _createRowsLayout: function (resources, rows, groupHeaderTemplate, columns) {\n var view = this._view;\n return view._createDateLayout(columns, null, false);\n },\n _createVerticalColumnsLayout: function (resources, rows, groupHeaderTemplate) {\n var view = this._view;\n var resource = resources[0];\n var configuration = [];\n var data = resource.dataSource.view();\n for (var dataIndex = 0; dataIndex < data.length * NUMBER_OF_ROWS; dataIndex++) {\n var obj = {\n text: groupHeaderTemplate({\n text: kendo.htmlEncode(kendo.getter(resource.dataTextField)(data[dataIndex % data.length])),\n color: kendo.getter(resource.dataColorField)(data[dataIndex % data.length]),\n field: resource.field,\n title: resource.title,\n name: resource.name,\n value: kendo.getter(resource.dataValueField)(data[dataIndex % data.length])\n }),\n className: 'k-slot-cell'\n };\n obj.columns = view._createColumnsLayout(resources.slice(1), null, groupHeaderTemplate);\n configuration.push(obj);\n }\n return configuration;\n },\n _createColumnsLayout: function (resources, columns, groupHeaderTemplate, subColumns) {\n var view = this._view;\n return view._createColumnsLayout(resources, columns, groupHeaderTemplate, subColumns, true);\n },\n _verticalGroupCount: function (level) {\n var view = this._view;\n return view._columnCountForLevel(level) / NUMBER_OF_ROWS;\n },\n _horizontalGroupCount: function (level) {\n var view = this._view;\n return view._columnCountForLevel(level) / NUMBER_OF_COLUMNS;\n },\n _positionEvent: function (event, group, range, rangeCount, start, end) {\n var view = this._view;\n var startIndex = range.start.index;\n var endIndex = range.end.index;\n var isMobilePhoneView = view._isMobilePhoneView();\n for (var i = range.start.index; i <= range.end.index; i++) {\n var currentSlot = range.collection._slots[i];\n var dateRange = group.daySlotRanges(currentSlot.start, currentSlot.start, true)[0];\n var occurrence = event.clone({\n start: i === startIndex ? currentSlot.start : start,\n end: i === endIndex ? currentSlot.end : end,\n head: i !== endIndex || range.head,\n tail: i !== startIndex || range.tail\n });\n if (isMobilePhoneView) {\n view._positionMobileEvent(dateRange, view._createEventElement(occurrence), group);\n } else {\n view._positionEvent(dateRange, view._createEventElement(occurrence), group);\n }\n }\n },\n _addDaySlotCollections: function (groupCount, tableRows, startDate) {\n var view = this._view;\n var columnCount = NUMBER_OF_COLUMNS;\n var rowCount = NUMBER_OF_ROWS;\n var isVerticallyGrouped = view._isVerticallyGrouped();\n for (var dateIndex = 0; dateIndex < columnCount; dateIndex++) {\n for (var rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n var groupIndex = 0;\n var currentTableIndex = isVerticallyGrouped ? dateIndex : rowIndex;\n var tableRow = tableRows[currentTableIndex];\n var cells = tableRow.children;\n var cellMultiplier = 0;\n tableRow.setAttribute('role', 'row');\n if (!view._isVerticallyGrouped()) {\n cellMultiplier = dateIndex;\n }\n for (var cellIndex = cellMultiplier * groupCount; cellIndex < (cellMultiplier + 1) * groupCount; cellIndex++) {\n var cellCount = rowIndex * columnCount + dateIndex;\n var currentCellIndex = isVerticallyGrouped ? cellIndex + rowIndex * groupCount : cellIndex;\n var cell = cells[currentCellIndex];\n var currentGroupIndex = isVerticallyGrouped ? cellIndex : groupIndex;\n var group = view.groups[currentGroupIndex];\n var collection;\n if (dateIndex === 0) {\n collection = group.addDaySlotCollection(kendo.date.addDays(startDate, cellCount), kendo.date.addDays(startDate, cellCount + columnCount));\n } else {\n collection = group._daySlotCollections[rowIndex];\n }\n view.addDaySlot(collection, cell, startDate, cellCount);\n groupIndex++;\n }\n }\n }\n },\n _changePeriodGroupIndex: function (reverse, vertical, selectionGroupIndex) {\n var view = this._view;\n if (vertical && view._isVerticallyGrouped()) {\n return reverse ? view.groups.length - 1 : 0;\n }\n return selectionGroupIndex;\n },\n _createResizeHint: function (range) {\n var view = this._view;\n var left, top, width, height, hint;\n if (view._isVerticallyGrouped()) {\n left = range.startSlot().offsetLeft;\n top = range.start.offsetTop;\n width = range.startSlot().offsetWidth;\n height = range.endSlot().offsetTop + range.startSlot().offsetHeight - range.startSlot().offsetTop - 2;\n hint = SchedulerView.fn._createResizeHint.call(view, left, top, width, height);\n view._appendResizeHint(hint);\n } else {\n for (var slotIdx = range.startSlot().index; slotIdx <= range.endSlot().index; slotIdx++) {\n var slot = range.collection._slots[slotIdx];\n left = slot.offsetLeft;\n top = slot.offsetTop;\n width = slot.offsetWidth;\n height = slot.offsetHeight - 2;\n hint = SchedulerView.fn._createResizeHint.call(view, left, top, width, height);\n view._appendResizeHint(hint);\n }\n }\n },\n _createMoveHint: function (range, event) {\n var view = this._view;\n var startSlot = range.startSlot();\n var endSlot = range.endSlot();\n for (var slotIdx = startSlot.index; slotIdx <= endSlot.index; slotIdx++) {\n var slot = range.collection._slots[slotIdx];\n var hint = view._createEventElement(event.clone({\n head: range.head,\n tail: range.tail\n }));\n hint.css({\n left: slot.offsetLeft,\n top: slot.offsetTop + slot.firstChildHeight,\n height: view.options.eventHeight,\n width: slot.offsetWidth - 2\n });\n hint.addClass('k-event-drag-hint');\n view._appendMoveHint(hint);\n }\n }\n });\n kendo.ui.scheduler.MonthGroupedView = MonthGroupedView;\n kendo.ui.scheduler.MonthGroupedByDateView = MonthGroupedByDateView;\n ui.MonthView = SchedulerView.extend({\n init: function (element, options) {\n var that = this;\n SchedulerView.fn.init.call(that, element, options);\n that._groupedView = that._getGroupedView();\n that.title = that.options.title;\n that._templates();\n that._editable();\n that._renderLayout(that.options.date);\n that._groups();\n },\n name: 'month',\n _getGroupedView: function () {\n if (this._isGroupedByDate()) {\n return new kendo.ui.scheduler.MonthGroupedByDateView(this);\n } else {\n return new kendo.ui.scheduler.MonthGroupedView(this);\n }\n },\n _updateDirection: function (selection, ranges, multiple, reverse, vertical) {\n if (multiple) {\n var startSlot = ranges[0].start;\n var endSlot = ranges[ranges.length - 1].end;\n var isSameSlot = startSlot.index === endSlot.index;\n var isSameCollection = startSlot.collectionIndex === endSlot.collectionIndex;\n var updateDirection;\n if (vertical) {\n updateDirection = isSameSlot && isSameCollection || isSameCollection;\n } else {\n updateDirection = isSameSlot && isSameCollection;\n }\n if (updateDirection) {\n selection.backward = reverse;\n }\n }\n },\n _changeDate: function (selection, slot, previous) {\n var group = this.groups[selection.groupIndex];\n var collections, index;\n if (previous) {\n collections = group._getCollections(group.daySlotCollectionCount());\n index = slot.collectionIndex - 1;\n if (index >= 0) {\n return collections[index]._slots[collections[index]._slots.length - 1];\n }\n } else {\n collections = group._getCollections(group.daySlotCollectionCount());\n index = slot.collectionIndex + 1;\n var slotIndex = 0;\n if (collections[index] && collections[index]._slots[slotIndex]) {\n return collections[index]._slots[slotIndex];\n }\n }\n },\n _getNextHorizontalRange: function (group, method, horizontalRange) {\n var isVertical = this._isVerticallyGrouped();\n horizontalRange.startSlot = group[method](horizontalRange.startSlot, isVertical);\n horizontalRange.endSlot = group[method](horizontalRange.endSlot, isVertical);\n return horizontalRange;\n },\n _getNextVerticalRange: function (group, method, verticalRange, multiple) {\n var isVertical = this._isVerticallyGrouped() && this._isGroupedByDate();\n verticalRange.startSlot = group[method](verticalRange.startSlot, multiple, isVertical);\n verticalRange.endSlot = group[method](verticalRange.endSlot, multiple, isVertical);\n return verticalRange;\n },\n _changeViewPeriod: function (selection, reverse, vertical) {\n var pad = vertical ? 7 : 1;\n if (reverse) {\n pad *= -1;\n }\n selection.start = kendo.date.addDays(selection.start, pad);\n selection.end = kendo.date.addDays(selection.end, pad);\n if (!vertical || vertical && this._isVerticallyGrouped()) {\n selection.groupIndex = this._groupedView._changePeriodGroupIndex(reverse, vertical, selection.groupIndex);\n }\n selection.events = [];\n return true;\n },\n _continuousSlot: function (selection, ranges, reverse) {\n var index = selection.backward ? 0 : ranges.length - 1;\n var group = this.groups[selection.groupIndex];\n return group.continuousSlot(ranges[index].start, reverse);\n },\n _changeGroupContinuously: function (selection, continuousSlot, multiple, reverse) {\n if (!multiple) {\n var groupIndex = selection.groupIndex;\n var lastGroupIndex = this.groups.length - 1;\n var vertical = this._isVerticallyGrouped();\n var group = this.groups[groupIndex];\n if (!continuousSlot && vertical) {\n continuousSlot = group[reverse ? 'lastSlot' : 'firstSlot']();\n groupIndex += reverse ? -1 : 1;\n } else if (continuousSlot && !vertical) {\n groupIndex = reverse ? lastGroupIndex : 0;\n }\n if (groupIndex < 0 || groupIndex > lastGroupIndex) {\n groupIndex = reverse ? lastGroupIndex : 0;\n continuousSlot = null;\n }\n selection.groupIndex = groupIndex;\n }\n return continuousSlot;\n },\n _normalizeHorizontalSelection: function (selection, ranges, reverse) {\n var slot;\n if (reverse) {\n slot = ranges[0].start;\n } else {\n slot = ranges[ranges.length - 1].end;\n }\n return slot;\n },\n _normalizeVerticalSelection: function (selection, ranges) {\n var slot;\n if (selection.backward) {\n slot = ranges[0].start;\n } else {\n slot = ranges[ranges.length - 1].end;\n }\n return slot;\n },\n _templates: function () {\n var options = this.options, settings = extend({}, kendo.Template, options.templateSettings);\n this.eventTemplate = this._eventTmpl(options.eventTemplate, EVENT_WRAPPER_STRING);\n this.dayTemplate = kendo.template(options.dayTemplate, settings);\n this.groupHeaderTemplate = kendo.template(options.groupHeaderTemplate, settings);\n },\n dateForTitle: function () {\n return kendo.format(this.options.selectedDateFormat, this._firstDayOfMonth, this._lastDayOfMonth);\n },\n shortDateForTitle: function () {\n return kendo.format(this.options.selectedShortDateFormat, this._firstDayOfMonth, this._lastDayOfMonth);\n },\n nextDate: function () {\n return kendo.date.nextDay(this._lastDayOfMonth);\n },\n previousDate: function () {\n return kendo.date.previousDay(this._firstDayOfMonth);\n },\n startDate: function () {\n return this._startDate;\n },\n endDate: function () {\n return this._endDate;\n },\n _renderLayout: function (date) {\n var that = this;\n this._firstDayOfMonth = kendo.date.firstDayOfMonth(date);\n this._lastDayOfMonth = kendo.date.lastDayOfMonth(date);\n this._startDate = firstVisibleMonthDay(date, this.calendarInfo());\n this.createLayout(this._layout());\n this._content();\n this.refreshLayout();\n this.content.on('click' + NS, '.k-nav-day,.k-more-events', function (e) {\n var offset = $(e.currentTarget).offset();\n var slot = that._slotByPosition(offset.left, offset.top);\n e.preventDefault();\n that.trigger('navigate', {\n view: 'day',\n date: slot.startDate()\n });\n });\n },\n _editable: function () {\n if (this.options.editable && !this._isMobilePhoneView()) {\n if (this._isMobile()) {\n this._touchEditable();\n } else {\n this._mouseEditable();\n }\n }\n },\n _mouseEditable: function () {\n var that = this;\n that.element.on('click' + NS, '.k-scheduler-monthview .k-event a:has(.k-i-close)', function (e) {\n that.trigger('remove', { uid: $(this).closest('.k-event').attr(kendo.attr('uid')) });\n e.preventDefault();\n });\n if (that.options.editable.create !== false) {\n that.element.on('dblclick' + NS, '.k-scheduler-monthview .k-scheduler-content td', function (e) {\n var offset = $(e.currentTarget).offset();\n var slot = that._slotByPosition(offset.left, offset.top);\n if (slot) {\n var resourceInfo = that._resourceBySlot(slot);\n that.trigger('add', {\n eventInfo: extend({\n isAllDay: true,\n start: slot.startDate(),\n end: slot.startDate()\n }, resourceInfo)\n });\n }\n e.preventDefault();\n });\n }\n if (that.options.editable.update !== false) {\n that.element.on('dblclick' + NS, '.k-scheduler-monthview .k-event', function (e) {\n that.trigger('edit', { uid: $(this).closest('.k-event').attr(kendo.attr('uid')) });\n e.preventDefault();\n });\n }\n },\n _touchEditable: function () {\n var that = this;\n var threshold = 0;\n if (kendo.support.mobileOS.android) {\n threshold = 5;\n }\n if (that.options.editable.create !== false) {\n that._addUserEvents = new kendo.UserEvents(that.element, {\n threshold: threshold,\n filter: '.k-scheduler-monthview .k-scheduler-content td',\n tap: function (e) {\n var offset = $(e.target).offset();\n var slot = that._slotByPosition(offset.left, offset.top);\n if (slot) {\n var resourceInfo = that._resourceBySlot(slot);\n that.trigger('add', {\n eventInfo: extend({\n isAllDay: true,\n start: slot.startDate(),\n end: slot.startDate()\n }, resourceInfo)\n });\n }\n e.preventDefault();\n }\n });\n }\n if (that.options.editable.update !== false) {\n that._editUserEvents = new kendo.UserEvents(that.element, {\n threshold: threshold,\n filter: '.k-scheduler-monthview .k-event',\n tap: function (e) {\n if ($(e.event.target).closest('a:has(.k-i-close)').length === 0) {\n that.trigger('edit', { uid: $(e.target).closest('.k-event').attr(kendo.attr('uid')) });\n e.preventDefault();\n }\n }\n });\n }\n },\n selectionByElement: function (cell) {\n var offset = $(cell).offset();\n return this._slotByPosition(offset.left, offset.top);\n },\n _columnCountForLevel: function (level) {\n var columnLevel = this.columnLevels[level];\n return columnLevel ? columnLevel.length : 0;\n },\n _rowCountForLevel: function (level) {\n var rowLevel = this.rowLevels[level];\n return rowLevel ? rowLevel.length : 0;\n },\n _content: function () {\n var html = '<tbody>';\n var verticalGroupCount = 1;\n var groupedView = this._groupedView;\n var resources = this.groupedResources;\n if (resources.length) {\n if (this._isVerticallyGrouped()) {\n verticalGroupCount = groupedView._verticalRowCountForLevel(resources.length - 1);\n }\n }\n for (var verticalGroupIdx = 0; verticalGroupIdx < verticalGroupCount; verticalGroupIdx++) {\n html += this._createCalendar(verticalGroupIdx);\n }\n html += '</tbody>';\n this.content.find('table').html(html);\n },\n _createCalendar: function (verticalGroupIndex) {\n var start = this.startDate();\n var cellCount = NUMBER_OF_COLUMNS * NUMBER_OF_ROWS;\n var cellsPerRow = NUMBER_OF_COLUMNS;\n var weekStartDates = [start];\n var html = '';\n var horizontalGroupCount = 1;\n var isVerticallyGrouped = this._isVerticallyGrouped();\n var groupedView = this._groupedView;\n var resources = this.groupedResources;\n if (resources.length) {\n if (!isVerticallyGrouped) {\n horizontalGroupCount = groupedView._horizontalGroupCountForLevel(resources.length - 1);\n }\n }\n this._slotIndices = {};\n var calendarRowsLength = groupedView._getCalendarRowsLength(cellsPerRow, cellCount);\n for (var rowIdx = 0; rowIdx < calendarRowsLength; rowIdx++) {\n html += '<tr>';\n weekStartDates.push(start);\n var startIdx = rowIdx * cellsPerRow;\n html += groupedView._createRows(start, startIdx, horizontalGroupCount, verticalGroupIndex);\n start = groupedView._adjustStartDate(start, rowIdx === calendarRowsLength - 1);\n html += '</tr>';\n }\n this._weekStartDates = weekStartDates;\n this._endDate = kendo.date.previousDay(start);\n return html;\n },\n _createRow: function (startDate, startIdx, cellsPerRow, groupIndex) {\n var that = this;\n var min = that._firstDayOfMonth;\n var max = that._lastDayOfMonth;\n var content = that.dayTemplate;\n var classes = '';\n var html = '';\n var groupedView = this._groupedView;\n var resources = function () {\n return that._resourceBySlot({ groupIndex: groupIndex });\n };\n for (var cellIdx = 0; cellIdx < cellsPerRow; cellIdx++) {\n classes = '';\n if (kendo.date.isToday(startDate)) {\n classes += 'k-today';\n }\n if (!kendo.date.isInDateRange(startDate, min, max)) {\n classes += ' k-other-month';\n }\n html += '<td ';\n if (classes !== '') {\n html += 'class=\"' + classes + '\"';\n }\n html += '>';\n html += groupedView._getContent(content, startDate, resources, cellIdx);\n html += '</td>';\n that._slotIndices[getDate(startDate).getTime()] = startIdx + cellIdx;\n startDate = groupedView._nextSlotStartDate(startDate);\n }\n return html;\n },\n _layout: function () {\n var calendarInfo = this.calendarInfo();\n var weekDayNames = this._isMobile() ? calendarInfo.days.namesShort : calendarInfo.days.names;\n var names = shiftArray(weekDayNames, calendarInfo.firstDay);\n var columns = $.map(names, function (value) {\n return { text: value };\n });\n var resources = this.groupedResources;\n var rows;\n var groupedView = this._groupedView;\n if (resources.length) {\n if (this._isVerticallyGrouped()) {\n var inner = [];\n for (var idx = 0; idx < 6; idx++) {\n inner.push({\n text: '<div> </div>',\n className: 'k-hidden k-slot-cell'\n });\n }\n rows = groupedView._createRowsLayout(resources, inner, this.groupHeaderTemplate, columns);\n columns = groupedView._createVerticalColumnsLayout(resources, inner, this.groupHeaderTemplate, columns);\n } else {\n columns = groupedView._createColumnsLayout(resources, columns, this.groupHeaderTemplate, columns);\n }\n }\n return {\n columns: columns,\n rows: rows\n };\n },\n _createEventElement: function (event) {\n var options = this.options;\n var editable = options.editable;\n var isMobile = this._isMobile();\n event.showDelete = editable && editable.destroy !== false && !isMobile;\n event.resizable = editable && editable.resize !== false && !isMobile;\n event.ns = kendo.ns;\n event.resources = this.eventResources(event);\n event.inverseColor = event.resources && event.resources[0] ? this._shouldInverseResourceColor(event.resources[0]) : false;\n var element = $(this.eventTemplate(event));\n this.angular('compile', function () {\n return {\n elements: element,\n data: [{ dataItem: event }]\n };\n });\n return element;\n },\n _isInDateSlot: function (event) {\n var groups = this.groups[0];\n var slotStart = groups.firstSlot().start;\n var slotEnd = groups.lastSlot().end - 1;\n var startTime = kendo.date.toUtcTime(event.start);\n var endTime = kendo.date.toUtcTime(event.end);\n return (isInDateRange(startTime, slotStart, slotEnd) || isInDateRange(endTime, slotStart, slotEnd) || isInDateRange(slotStart, startTime, endTime) || isInDateRange(slotEnd, startTime, endTime)) && (!isInDateRange(endTime, slotStart, slotStart) || isInDateRange(endTime, startTime, startTime) || event.isAllDay);\n },\n _slotIndex: function (date) {\n return this._slotIndices[getDate(date).getTime()];\n },\n _positionMobileEvent: function (slotRange, element, group) {\n var startSlot = slotRange.start;\n if (slotRange.start.offsetLeft > slotRange.end.offsetLeft) {\n startSlot = slotRange.end;\n }\n var startIndex = slotRange.start.index;\n var endIndex = startIndex;\n var eventCount = 3;\n var events = SchedulerView.collidingEvents(slotRange.events(), startIndex, endIndex);\n events.push({\n element: element,\n start: startIndex,\n end: endIndex\n });\n var rows = SchedulerView.createRows(events);\n var slot = slotRange.collection.at(startIndex);\n var container = slot.container;\n if (!container) {\n container = $(kendo.format('<div class=\"k-events-container\" style=\"top:{0};left:{1};width:{2}\"/>', startSlot.offsetTop + startSlot.firstChildTop + startSlot.firstChildHeight - 3 + 'px', startSlot.offsetLeft + 'px', startSlot.offsetWidth + 'px'));\n slot.container = container;\n this.content[0].appendChild(container[0]);\n }\n if (rows.length <= eventCount) {\n slotRange.addEvent({\n element: element,\n start: startIndex,\n end: endIndex,\n groupIndex: startSlot.groupIndex\n });\n group._continuousEvents.push({\n element: element,\n uid: element.attr(kendo.attr('uid')),\n start: slotRange.start,\n end: slotRange.end\n });\n container[0].appendChild(element[0]);\n }\n },\n _positionEvent: function (slotRange, element, group) {\n var eventHeight = this.options.eventHeight;\n var startSlot = slotRange.start;\n if (slotRange.start.offsetLeft > slotRange.end.offsetLeft) {\n startSlot = slotRange.end;\n }\n var startIndex = slotRange.start.index;\n var endIndex = slotRange.end.index;\n var eventCount = startSlot.eventCount;\n var events = SchedulerView.collidingEvents(slotRange.events(), startIndex, endIndex);\n var rightOffset = startIndex !== endIndex ? 5 : 4;\n events.push({\n element: element,\n start: startIndex,\n end: endIndex\n });\n var rows = SchedulerView.createRows(events);\n for (var idx = 0, length = Math.min(rows.length, eventCount); idx < length; idx++) {\n var rowEvents = rows[idx].events;\n var eventTop = startSlot.offsetTop + startSlot.firstChildHeight + idx * eventHeight + 3 * idx + 'px';\n for (var j = 0, eventLength = rowEvents.length; j < eventLength; j++) {\n rowEvents[j].element[0].style.top = eventTop;\n }\n }\n if (rows.length > eventCount) {\n for (var slotIndex = startIndex; slotIndex <= endIndex; slotIndex++) {\n var collection = slotRange.collection;\n var slot = collection.at(slotIndex);\n if (slot.more) {\n return;\n }\n slot.more = $(MORE_BUTTON_TEMPLATE({\n ns: kendo.ns,\n start: slotIndex,\n end: slotIndex,\n width: slot.clientWidth - 2,\n left: slot.offsetLeft + 2,\n top: slot.offsetTop + slot.firstChildHeight + eventCount * eventHeight + 3 * eventCount\n }));\n this.content[0].appendChild(slot.more[0]);\n }\n } else {\n slotRange.addEvent({\n element: element,\n start: startIndex,\n end: endIndex,\n groupIndex: startSlot.groupIndex\n });\n element[0].style.width = slotRange.innerWidth() - rightOffset + 'px';\n element[0].style.left = startSlot.offsetLeft + 2 + 'px';\n element[0].style.height = eventHeight + 'px';\n group._continuousEvents.push({\n element: element,\n uid: element.attr(kendo.attr('uid')),\n start: slotRange.start,\n end: slotRange.end\n });\n element.appendTo(this.content);\n }\n },\n _slotByPosition: function (x, y) {\n var offset = this.content.offset();\n x -= offset.left;\n y -= offset.top;\n y += this.content[0].scrollTop;\n x += this.content[0].scrollLeft;\n x = Math.ceil(x);\n y = Math.ceil(y);\n for (var groupIndex = 0; groupIndex < this.groups.length; groupIndex++) {\n var slot = this._groupedView._getTimeSlotByPosition(x, y, groupIndex);\n if (slot) {\n return slot;\n }\n }\n return null;\n },\n _appendResizeHint: function (hint) {\n hint.appendTo(this.content);\n this._resizeHint = this._resizeHint.add(hint);\n },\n _updateResizeHint: function (event, groupIndex, startTime, endTime) {\n this._removeResizeHint();\n var group = this.groups[groupIndex];\n var ranges = group.ranges(startTime, endTime, true, event.isAllDay);\n for (var rangeIndex = 0; rangeIndex < ranges.length; rangeIndex++) {\n this._groupedView._createResizeHint(ranges[rangeIndex]);\n }\n this._resizeHint.find('.k-label-top,.k-label-bottom').text('');\n this._resizeHint.first().addClass('k-first').find('.k-label-top').text(kendo.toString(kendo.timezone.toLocalDate(startTime), 'M/dd'));\n this._resizeHint.last().addClass('k-last').find('.k-label-bottom').text(kendo.toString(kendo.timezone.toLocalDate(endTime), 'M/dd'));\n },\n _updateMoveHint: function (event, groupIndex, distance) {\n var start = kendo.date.toUtcTime(event.start) + distance;\n var end = start + event.duration();\n var group = this.groups[groupIndex];\n var ranges = group.ranges(start, end, true, event.isAllDay);\n this._removeMoveHint();\n for (var rangeIndex = 0; rangeIndex < ranges.length; rangeIndex++) {\n this._groupedView._createMoveHint(ranges[rangeIndex], event);\n }\n },\n _appendMoveHint: function (hint) {\n hint.appendTo(this.content);\n this._moveHint = this._moveHint.add(hint);\n },\n _groups: function () {\n var groupCount = this._groupCount();\n var tableRows = this.content[0].getElementsByTagName('tr');\n var startDate = this.startDate();\n this.groups = [];\n for (var idx = 0; idx < groupCount; idx++) {\n this._addResourceView(idx);\n }\n this._groupedView._addDaySlotCollections(groupCount, tableRows, startDate);\n },\n addDaySlot: function (collection, cell, startDate, cellCount) {\n var clientHeight = cell.clientHeight;\n var firstChildHeight = cell.children.length ? cell.children[0].offsetHeight + 3 : 0;\n var start = kendo.date.addDays(startDate, cellCount);\n var end = kendo.date.MS_PER_DAY;\n if (startDate.getHours() !== start.getHours()) {\n end += (startDate.getHours() - start.getHours()) * kendo.date.MS_PER_HOUR;\n }\n start = kendo.date.toUtcTime(start);\n end += start;\n var eventCount = Math.floor((clientHeight - firstChildHeight - this.options.moreButtonHeight) / (this.options.eventHeight + 3));\n cell.setAttribute('role', 'gridcell');\n cell.setAttribute('aria-selected', false);\n collection.addDaySlot(cell, start, end, eventCount);\n },\n render: function (events) {\n this.content.children('.k-event,.k-more-events,.k-events-container').remove();\n this._groups();\n events = new kendo.data.Query(events).sort([\n {\n field: 'start',\n dir: 'asc'\n },\n {\n field: 'end',\n dir: 'desc'\n }\n ]).toArray();\n var resources = this.groupedResources;\n if (resources.length) {\n this._renderGroups(events, resources, 0, 1);\n } else {\n this._renderEvents(events, 0);\n }\n this.refreshLayout();\n this.trigger('activate');\n },\n _renderEvents: function (events, groupIndex) {\n var event;\n var idx;\n var length;\n for (idx = 0, length = events.length; idx < length; idx++) {\n event = events[idx];\n if (this._isInDateSlot(event)) {\n var group = this.groups[groupIndex];\n if (!group._continuousEvents) {\n group._continuousEvents = [];\n }\n var ranges = group.slotRanges(event, true);\n var rangeCount = ranges.length;\n for (var rangeIndex = 0; rangeIndex < rangeCount; rangeIndex++) {\n var range = ranges[rangeIndex];\n var start = event.start;\n var end = event.end;\n this._groupedView._positionEvent(event, group, range, rangeCount, start, end, rangeIndex);\n }\n }\n }\n },\n _renderGroups: function (events, resources, offset, columnLevel) {\n var resource = resources[0];\n if (resource) {\n var view = resource.dataSource.view();\n for (var itemIdx = 0; itemIdx < view.length; itemIdx++) {\n var value = this._resourceValue(resource, view[itemIdx]);\n var tmp = new kendo.data.Query(events).filter({\n field: resource.field,\n operator: SchedulerView.groupEqFilter(value)\n }).toArray();\n if (resources.length > 1) {\n offset = this._renderGroups(tmp, resources.slice(1), offset++, columnLevel + 1);\n } else {\n this._renderEvents(tmp, offset++);\n }\n }\n }\n return offset;\n },\n _groupCount: function () {\n var resources = this.groupedResources;\n var groupedView = this._groupedView;\n if (resources.length) {\n if (this._isVerticallyGrouped()) {\n return groupedView._verticalGroupCount(resources.length - 1);\n } else {\n return groupedView._horizontalGroupCount(resources.length);\n }\n }\n return 1;\n },\n _columnOffsetForResource: function (index) {\n return this._columnCountForLevel(index) / this._columnCountForLevel(index - 1);\n },\n destroy: function () {\n if (this.table) {\n this.table.removeClass('k-scheduler-monthview');\n }\n if (this.content) {\n this.content.off(NS);\n }\n if (this.element) {\n this.element.off(NS);\n }\n SchedulerView.fn.destroy.call(this);\n if (this._isMobile() && !this._isMobilePhoneView() && this.options.editable) {\n if (this.options.editable.create !== false) {\n this._addUserEvents.destroy();\n }\n if (this.options.editable.update !== false) {\n this._editUserEvents.destroy();\n }\n }\n },\n events: [\n 'remove',\n 'add',\n 'edit',\n 'navigate'\n ],\n options: {\n title: 'Month',\n name: 'month',\n eventHeight: 25,\n moreButtonHeight: 13,\n editable: true,\n selectedDateFormat: '{0:y}',\n selectedShortDateFormat: '{0:y}',\n groupHeaderTemplate: '#=text#',\n dayTemplate: DAY_TEMPLATE,\n eventTemplate: EVENT_TEMPLATE\n }\n });\n function shiftArray(array, idx) {\n return array.slice(idx).concat(array.slice(0, idx));\n }\n function firstVisibleMonthDay(date, calendarInfo) {\n var firstDay = calendarInfo.firstDay, firstVisibleDay = new Date(date.getFullYear(), date.getMonth(), 0, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n while (firstVisibleDay.getDay() != firstDay) {\n kendo.date.setTime(firstVisibleDay, -1 * MS_PER_DAY);\n }\n return firstVisibleDay;\n }\n function isInDateRange(value, min, max) {\n var msMin = min, msMax = max, msValue;\n msValue = value;\n return msValue >= msMin && msValue <= msMax;\n }\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.scheduler.recurrence', [\n 'kendo.dropdownlist',\n 'kendo.datepicker',\n 'kendo.numerictextbox'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'scheduler.recurrence',\n name: 'Recurrence',\n category: 'web',\n depends: [\n 'dropdownlist',\n 'datepicker',\n 'numerictextbox'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, timezone = kendo.timezone, Class = kendo.Class, ui = kendo.ui, Widget = ui.Widget, DropDownList = ui.DropDownList, kendoDate = kendo.date, setTime = kendoDate.setTime, setDayOfWeek = kendoDate.setDayOfWeek, adjustDST = kendoDate.adjustDST, firstDayOfMonth = kendoDate.firstDayOfMonth, getMilliseconds = kendoDate.getMilliseconds, DAYS_IN_LEAPYEAR = [\n 0,\n 31,\n 60,\n 91,\n 121,\n 152,\n 182,\n 213,\n 244,\n 274,\n 305,\n 335,\n 366\n ], DAYS_IN_YEAR = [\n 0,\n 31,\n 59,\n 90,\n 120,\n 151,\n 181,\n 212,\n 243,\n 273,\n 304,\n 334,\n 365\n ], MONTHS = [\n 31,\n 28,\n 30,\n 31,\n 30,\n 31,\n 30,\n 31,\n 30,\n 31,\n 30,\n 31\n ], WEEK_DAYS = {\n 0: 'SU',\n 1: 'MO',\n 2: 'TU',\n 3: 'WE',\n 4: 'TH',\n 5: 'FR',\n 6: 'SA'\n }, WEEK_DAYS_IDX = {\n 'SU': 0,\n 'MO': 1,\n 'TU': 2,\n 'WE': 3,\n 'TH': 4,\n 'FR': 5,\n 'SA': 6\n }, DATE_FORMATS = [\n 'yyyy-MM-ddTHH:mm:ss.fffzzz',\n 'yyyy-MM-ddTHH:mm:sszzz',\n 'yyyy-MM-ddTHH:mm:ss',\n 'yyyy-MM-ddTHH:mm',\n 'yyyy-MM-ddTHH',\n 'yyyy-MM-dd',\n 'yyyyMMddTHHmmssfffzzz',\n 'yyyyMMddTHHmmsszzz',\n 'yyyyMMddTHHmmss',\n 'yyyyMMddTHHmm',\n 'yyyyMMddTHH',\n 'yyyyMMdd'\n ], RULE_NAMES = [\n 'months',\n 'weeks',\n 'yearDays',\n 'monthDays',\n 'weekDays',\n 'hours',\n 'minutes',\n 'seconds'\n ], RULE_NAMES_LENGTH = RULE_NAMES.length, RECURRENCE_DATE_FORMAT = 'yyyyMMddTHHmmssZ', limitation = {\n months: function (date, end, rule) {\n var monthRules = rule.months, months = ruleValues(monthRules, date.getMonth() + 1), changed = false;\n if (months !== null) {\n if (months.length) {\n date.setMonth(months[0] - 1, 1);\n } else {\n date.setFullYear(date.getFullYear() + 1, monthRules[0] - 1, 1);\n }\n changed = true;\n }\n return changed;\n },\n monthDays: function (date, end, rule) {\n var monthLength, month, days, changed = false, hours = date.getHours(), normalize = function (monthDay) {\n if (monthDay < 0) {\n monthDay = monthLength + monthDay;\n }\n return monthDay;\n };\n while (date <= end) {\n month = date.getMonth();\n monthLength = getMonthLength(date);\n days = ruleValues(rule.monthDays, date.getDate(), normalize);\n if (days === null) {\n return changed;\n }\n changed = true;\n if (days.length) {\n date.setMonth(month, days.sort(numberSortPredicate)[0]);\n adjustDST(date, hours);\n if (month === date.getMonth()) {\n break;\n }\n } else {\n date.setMonth(month + 1, 1);\n }\n }\n return changed;\n },\n yearDays: function (date, end, rule) {\n var year, yearDays, changed = false, hours = date.getHours(), normalize = function (yearDay) {\n if (yearDay < 0) {\n yearDay = year + yearDay;\n }\n return yearDay;\n };\n while (date < end) {\n year = leapYear(date) ? 366 : 365;\n yearDays = ruleValues(rule.yearDays, dayInYear(date), normalize);\n if (yearDays === null) {\n return changed;\n }\n changed = true;\n year = date.getFullYear();\n if (yearDays.length) {\n date.setFullYear(year, 0, yearDays.sort(numberSortPredicate)[0]);\n adjustDST(date, hours);\n break;\n } else {\n date.setFullYear(year + 1, 0, 1);\n }\n }\n return changed;\n },\n weeks: function (date, end, rule) {\n var weekStart = rule.weekStart, year, weeks, day, changed = false, hours = date.getHours(), normalize = function (week) {\n if (week < 0) {\n week = 53 + week;\n }\n return week;\n };\n while (date < end) {\n weeks = ruleValues(rule.weeks, weekInYear(date, weekStart), normalize);\n if (weeks === null) {\n return changed;\n }\n changed = true;\n year = date.getFullYear();\n if (weeks.length) {\n day = weeks.sort(numberSortPredicate)[0] * 7 - 1;\n date.setFullYear(year, 0, day);\n setDayOfWeek(date, weekStart, -1);\n adjustDST(date, hours);\n break;\n } else {\n date.setFullYear(year + 1, 0, 1);\n }\n }\n return changed;\n },\n weekDays: function (date, end, rule) {\n var weekDays = rule.weekDays;\n var weekStart = rule.weekStart;\n var weekDayRules = ruleWeekValues(weekDays, date, weekStart);\n var hours = date.getHours();\n var weekDayRule, day;\n if (weekDayRules === null) {\n return false;\n }\n weekDayRule = weekDayRules[0];\n if (!weekDayRule) {\n weekDayRule = weekDays[0];\n setDayOfWeek(date, weekStart);\n }\n day = weekDayRule.day;\n if (weekDayRule.offset) {\n while (date <= end && !isInWeek(date, weekDayRule, weekStart)) {\n if (weekInMonth(date, weekStart) === numberOfWeeks(date, weekStart)) {\n date.setMonth(date.getMonth() + 1, 1);\n adjustDST(date, hours);\n } else {\n date.setDate(date.getDate() + 7);\n adjustDST(date, hours);\n setDayOfWeek(date, weekStart, -1);\n }\n }\n }\n if (date.getDay() !== day) {\n setDayOfWeek(date, day);\n }\n return true;\n },\n hours: function (date, end, rule) {\n var hourRules = rule.hours, startTime = rule._startTime, startHours = startTime.getHours(), hours = ruleValues(hourRules, startHours), changed = false;\n if (hours !== null) {\n changed = true;\n date.setHours(startHours);\n adjustDST(date, startHours);\n if (hours.length) {\n hours = hours[0];\n date.setHours(hours);\n } else {\n hours = date.getHours();\n date.setDate(date.getDate() + 1);\n adjustDST(date, hours);\n hours = hourRules[0];\n date.setHours(hours);\n adjustDST(date, hours);\n }\n if (rule.minutes) {\n date.setMinutes(0);\n }\n startTime.setHours(hours, date.getMinutes());\n }\n return changed;\n },\n minutes: function (date, end, rule) {\n var minuteRules = rule.minutes, currentMinutes = date.getMinutes(), minutes = ruleValues(minuteRules, currentMinutes), hours = rule._startTime.getHours(), changed = false;\n if (minutes !== null) {\n changed = true;\n if (minutes.length) {\n minutes = minutes[0];\n } else {\n hours += 1;\n minutes = minuteRules[0];\n }\n if (rule.seconds) {\n date.setSeconds(0);\n }\n date.setHours(hours, minutes);\n hours = hours % 24;\n adjustDST(date, hours);\n rule._startTime.setHours(hours, minutes, date.getSeconds());\n }\n return changed;\n },\n seconds: function (date, end, rule) {\n var secondRules = rule.seconds, hours = rule._startTime.getHours(), seconds = ruleValues(secondRules, date.getSeconds()), minutes = date.getMinutes(), changed = false;\n if (seconds !== null) {\n changed = true;\n if (seconds.length) {\n date.setSeconds(seconds[0]);\n } else {\n minutes += 1;\n date.setMinutes(minutes, secondRules[0]);\n if (minutes > 59) {\n minutes = minutes % 60;\n hours = (hours + 1) % 24;\n }\n }\n rule._startTime.setHours(hours, minutes, date.getSeconds());\n }\n return changed;\n }\n }, BaseFrequency = Class.extend({\n next: function (date, rule) {\n var startTime = rule._startTime, day = startTime.getDate(), minutes, seconds;\n if (rule.seconds) {\n seconds = date.getSeconds() + 1;\n date.setSeconds(seconds);\n startTime.setSeconds(seconds);\n startTime.setDate(day);\n } else if (rule.minutes) {\n minutes = date.getMinutes() + 1;\n date.setMinutes(minutes);\n startTime.setMinutes(minutes);\n startTime.setDate(day);\n } else {\n return false;\n }\n return true;\n },\n normalize: function (options) {\n var rule = options.rule;\n if (options.idx === 4 && rule.hours) {\n rule._startTime.setHours(0);\n this._hour(options.date, rule);\n }\n },\n limit: function (date, end, rule) {\n var interval = rule.interval, ruleName, firstRule, modified, idx, day;\n while (date <= end) {\n modified = firstRule = undefined;\n day = date.getDate();\n for (idx = 0; idx < RULE_NAMES_LENGTH; idx++) {\n ruleName = RULE_NAMES[idx];\n if (rule[ruleName]) {\n modified = limitation[ruleName](date, end, rule);\n if (firstRule !== undefined && modified) {\n break;\n } else {\n firstRule = modified;\n }\n }\n if (modified) {\n this.normalize({\n date: date,\n rule: rule,\n day: day,\n idx: idx\n });\n }\n }\n if ((interval === 1 || !this.interval(rule, date)) && idx === RULE_NAMES_LENGTH) {\n break;\n }\n }\n },\n interval: function (rule, current) {\n var start = new Date(rule._startPeriod);\n var date = new Date(current);\n var hours = current.getHours();\n var weekStart = rule.weekStart;\n var interval = rule.interval;\n var frequency = rule.freq;\n var modified = false;\n var excess = 0;\n var month = 0;\n var day = 1;\n var diff;\n var startTimeHours;\n if (frequency === 'hourly') {\n diff = date.getTimezoneOffset() - start.getTimezoneOffset();\n startTimeHours = rule._startTime.getHours();\n date = date.getTime();\n if (hours !== startTimeHours) {\n date += (startTimeHours - hours) * kendoDate.MS_PER_HOUR;\n }\n date -= start;\n if (diff) {\n date -= diff * kendoDate.MS_PER_MINUTE;\n }\n diff = Math.floor(date / kendoDate.MS_PER_HOUR);\n excess = intervalExcess(diff, interval);\n if (excess !== 0) {\n this._hour(current, rule, excess);\n modified = true;\n }\n } else if (frequency === 'daily') {\n kendoDate.setTime(date, -start, true);\n diff = Math.ceil(date / kendoDate.MS_PER_DAY);\n excess = intervalExcess(diff, interval);\n if (excess !== 0) {\n this._date(current, rule, excess);\n modified = true;\n }\n } else if (frequency === 'weekly') {\n excess = this._getNumberOfWeeksBetweenDates(start, current);\n var normalizedCurrentIndex = normalizeDayIndex(current.getDay(), weekStart);\n var normalizedStartIndex = normalizeDayIndex(start.getDay(), weekStart);\n if (normalizedCurrentIndex < normalizedStartIndex) {\n excess += 1;\n }\n excess = intervalExcess(excess, interval);\n if (excess !== 0) {\n kendoDate.setDayOfWeek(current, rule.weekStart, -1);\n current.setDate(current.getDate() + excess * 7);\n adjustDST(current, hours);\n modified = true;\n }\n } else if (frequency === 'monthly') {\n diff = current.getFullYear() - start.getFullYear();\n diff = current.getMonth() - start.getMonth() + diff * 12;\n excess = intervalExcess(diff, interval);\n if (excess !== 0) {\n day = rule._hasRuleValue ? 1 : current.getDate();\n current.setFullYear(current.getFullYear(), current.getMonth() + excess, day);\n adjustDST(current, hours);\n modified = true;\n }\n } else if (frequency === 'yearly') {\n diff = current.getFullYear() - start.getFullYear();\n excess = intervalExcess(diff, interval);\n if (!rule.months) {\n month = current.getMonth();\n }\n if (!rule.yearDays && !rule.monthDays && !rule.weekDays) {\n day = current.getDate();\n }\n if (excess !== 0) {\n current.setFullYear(current.getFullYear() + excess, month, day);\n adjustDST(current, hours);\n modified = true;\n }\n }\n return modified;\n },\n _getNumberOfWeeksBetweenDates: function (first, second) {\n var weeks = (second - first) / 604800000;\n var exactWeeks = Math.floor(weeks);\n if (weeks - exactWeeks > 0.99) {\n exactWeeks = Math.round(weeks);\n }\n return exactWeeks;\n },\n _hour: function (date, rule, interval) {\n var startTime = rule._startTime, hours = startTime.getHours();\n if (interval) {\n hours += interval;\n }\n date.setHours(hours);\n hours = hours % 24;\n startTime.setHours(hours);\n adjustDST(date, hours);\n },\n _date: function (date, rule, interval) {\n var hours = date.getHours();\n date.setDate(date.getDate() + interval);\n if (!adjustDST(date, hours)) {\n this._hour(date, rule);\n }\n }\n }), HourlyFrequency = BaseFrequency.extend({\n next: function (date, rule) {\n if (!BaseFrequency.fn.next(date, rule)) {\n this._hour(date, rule, 1);\n }\n },\n normalize: function (options) {\n var rule = options.rule;\n if (options.idx === 4) {\n rule._startTime.setHours(0);\n this._hour(options.date, rule);\n }\n }\n }), DailyFrequency = BaseFrequency.extend({\n next: function (date, rule) {\n if (!BaseFrequency.fn.next(date, rule)) {\n this[rule.hours ? '_hour' : '_date'](date, rule, 1);\n }\n }\n }), WeeklyFrequency = DailyFrequency.extend({\n setup: function (rule, eventStartDate) {\n if (!rule.weekDays) {\n rule.weekDays = [{\n day: eventStartDate.getDay(),\n offset: 0\n }];\n }\n }\n }), MonthlyFrequency = BaseFrequency.extend({\n next: function (date, rule) {\n var day, hours;\n if (!BaseFrequency.fn.next(date, rule)) {\n if (rule.hours) {\n this._hour(date, rule, 1);\n } else if (rule.monthDays || rule.weekDays || rule.yearDays || rule.weeks) {\n this._date(date, rule, 1);\n } else {\n day = date.getDate();\n hours = date.getHours();\n date.setMonth(date.getMonth() + 1);\n adjustDST(date, hours);\n while (date.getDate() !== day) {\n date.setDate(day);\n adjustDST(date, hours);\n }\n this._hour(date, rule);\n }\n }\n },\n normalize: function (options) {\n var rule = options.rule, date = options.date, hours = date.getHours();\n if (options.idx === 0 && !rule.monthDays && !rule.weekDays) {\n date.setDate(options.day);\n adjustDST(date, hours);\n } else {\n BaseFrequency.fn.normalize(options);\n }\n },\n setup: function (rule, eventStartDate, date) {\n if (!rule.monthDays && !rule.weekDays) {\n date.setDate(eventStartDate.getDate());\n }\n }\n }), YearlyFrequency = MonthlyFrequency.extend({\n next: function (date, rule) {\n var day, hours = date.getHours();\n if (!BaseFrequency.fn.next(date, rule)) {\n if (rule.hours) {\n this._hour(date, rule, 1);\n } else if (rule.monthDays || rule.weekDays || rule.yearDays || rule.weeks) {\n this._date(date, rule, 1);\n } else if (rule.months) {\n day = date.getDate();\n date.setMonth(date.getMonth() + 1);\n adjustDST(date, hours);\n while (date.getDate() !== day) {\n date.setDate(day);\n adjustDST(date, hours);\n }\n this._hour(date, rule);\n } else {\n date.setFullYear(date.getFullYear() + 1);\n adjustDST(date, hours);\n this._hour(date, rule);\n }\n }\n },\n setup: function () {\n }\n }), frequencies = {\n 'hourly': new HourlyFrequency(),\n 'daily': new DailyFrequency(),\n 'weekly': new WeeklyFrequency(),\n 'monthly': new MonthlyFrequency(),\n 'yearly': new YearlyFrequency()\n }, CLICK = 'click';\n function intervalExcess(diff, interval) {\n var excess;\n if (diff !== 0 && diff < interval) {\n excess = interval - diff;\n } else {\n excess = diff % interval;\n if (excess) {\n excess = interval - excess;\n }\n }\n return excess;\n }\n function dayInYear(date) {\n var month = date.getMonth();\n var days = leapYear(date) ? DAYS_IN_LEAPYEAR[month] : DAYS_IN_YEAR[month];\n return days + date.getDate();\n }\n function weekInYear(date, weekStart) {\n var year, days;\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n adjustDST(date, 0);\n year = date.getFullYear();\n if (weekStart !== undefined) {\n setDayOfWeek(date, weekStart, -1);\n date.setDate(date.getDate() + 4);\n } else {\n date.setDate(date.getDate() + (4 - (date.getDay() || 7)));\n }\n adjustDST(date, 0);\n days = Math.floor((date.getTime() - new Date(year, 0, 1, -6)) / 86400000);\n return 1 + Math.floor(days / 7);\n }\n function weekInMonth(date, weekStart) {\n var firstWeekDay = firstDayOfMonth(date).getDay();\n var firstWeekLength = 7 - (firstWeekDay + 7 - (weekStart || 7)) || 7;\n if (firstWeekLength < 0) {\n firstWeekLength += 7;\n }\n return Math.ceil((date.getDate() - firstWeekLength) / 7) + 1;\n }\n function normalizeDayIndex(weekDay, weekStart) {\n return weekDay + (weekDay < weekStart ? 7 : 0);\n }\n function normalizeOffset(date, rule, weekStart) {\n var offset = rule.offset;\n if (!offset) {\n return weekInMonth(date, weekStart);\n }\n var lastDate = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n var weeksInMonth = weekInMonth(lastDate, weekStart);\n var day = normalizeDayIndex(rule.day, weekStart);\n var skipFirst = day < normalizeDayIndex(new Date(date.getFullYear(), date.getMonth(), 1).getDay(), weekStart);\n var skipLast = day > normalizeDayIndex(lastDate.getDay(), weekStart);\n if (offset < 0) {\n offset = weeksInMonth + (offset + 1 - (skipLast ? 1 : 0));\n } else if (skipFirst) {\n offset += 1;\n }\n weeksInMonth -= skipLast ? 1 : 0;\n if (offset < (skipFirst ? 1 : 0) || offset > weeksInMonth) {\n return null;\n }\n return offset;\n }\n function numberOfWeeks(date, weekStart) {\n return weekInMonth(new Date(date.getFullYear(), date.getMonth() + 1, 0), weekStart);\n }\n function isInWeek(date, rule, weekStart) {\n return weekInMonth(date, weekStart) === normalizeOffset(date, rule, weekStart);\n }\n function ruleWeekValues(weekDays, date, weekStart) {\n var currentDay = normalizeDayIndex(date.getDay(), weekStart);\n var length = weekDays.length;\n var ruleWeekOffset;\n var weekDay, day;\n var weekNumber;\n var result = [];\n var idx = 0;\n for (; idx < length; idx++) {\n weekDay = weekDays[idx];\n weekNumber = weekInMonth(date, weekStart);\n ruleWeekOffset = normalizeOffset(date, weekDay, weekStart);\n if (ruleWeekOffset === null) {\n continue;\n }\n if (weekNumber < ruleWeekOffset) {\n result.push(weekDay);\n } else if (weekNumber === ruleWeekOffset) {\n day = normalizeDayIndex(weekDay.day, weekStart);\n if (currentDay < day) {\n result.push(weekDay);\n } else if (currentDay === day) {\n return null;\n }\n }\n }\n return result;\n }\n function ruleValues(rules, value, normalize) {\n var idx = 0, length = rules.length, availableRules = [], ruleValue;\n for (; idx < length; idx++) {\n ruleValue = rules[idx];\n if (normalize) {\n ruleValue = normalize(ruleValue);\n }\n if (value === ruleValue) {\n return null;\n } else if (value < ruleValue) {\n availableRules.push(ruleValue);\n }\n }\n return availableRules;\n }\n function parseArray(list, range) {\n var idx = 0, length = list.length, value;\n for (; idx < length; idx++) {\n value = parseInt(list[idx], 10);\n if (isNaN(value) || value < range.start || value > range.end || value === 0 && range.start < 0) {\n return null;\n }\n list[idx] = value;\n }\n return list.sort(numberSortPredicate);\n }\n function parseWeekDayList(list) {\n var idx = 0, length = list.length, value, valueLength, day;\n for (; idx < length; idx++) {\n value = list[idx];\n valueLength = value.length;\n day = value.substring(valueLength - 2).toUpperCase();\n day = WEEK_DAYS_IDX[day];\n if (day === undefined) {\n return null;\n }\n list[idx] = {\n offset: parseInt(value.substring(0, valueLength - 2), 10) || 0,\n day: day\n };\n }\n return list;\n }\n function serializeWeekDayList(list) {\n var idx = 0, length = list.length, value, valueString, result = [];\n for (; idx < length; idx++) {\n value = list[idx];\n if (typeof value === 'string') {\n valueString = value;\n } else {\n valueString = '' + WEEK_DAYS[value.day];\n if (value.offset) {\n valueString = value.offset + valueString;\n }\n }\n result.push(valueString);\n }\n return result.toString();\n }\n function getMonthLength(date) {\n var month = date.getMonth();\n if (month === 1) {\n if (new Date(date.getFullYear(), 1, 29).getMonth() === 1) {\n return 29;\n }\n return 28;\n }\n return MONTHS[month];\n }\n function leapYear(year) {\n year = year.getFullYear();\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n }\n function numberSortPredicate(a, b) {\n return a - b;\n }\n function parseExceptions(exceptions, zone) {\n var idx = 0, length, date, dates = [];\n if (exceptions) {\n exceptions = exceptions.split(exceptions.indexOf(';') !== -1 ? ';' : ',');\n length = exceptions.length;\n for (; idx < length; idx++) {\n date = parseUTCDate(exceptions[idx], zone);\n if (date) {\n dates.push(date);\n }\n }\n }\n return dates;\n }\n function isException(exceptions, date, zone) {\n var dates = $.isArray(exceptions) ? exceptions : parseExceptions(exceptions, zone), dateTime = date.getTime() - date.getMilliseconds(), idx = 0, length = dates.length;\n for (; idx < length; idx++) {\n if (dates[idx].getTime() === dateTime) {\n return true;\n }\n }\n return false;\n }\n function toExceptionString(dates, zone) {\n var idx = 0;\n var length;\n var date;\n var result = [].concat(dates);\n for (length = result.length; idx < length; idx++) {\n date = result[idx];\n date = kendo.timezone.convert(date, zone || date.getTimezoneOffset(), 'Etc/UTC');\n result[idx] = kendo.toString(date, RECURRENCE_DATE_FORMAT);\n }\n return result.join(',');\n }\n function startPeriodByFreq(start, rule) {\n var date = new Date(start);\n switch (rule.freq) {\n case 'yearly':\n date.setFullYear(date.getFullYear(), 0, 1);\n break;\n case 'monthly':\n date.setFullYear(date.getFullYear(), date.getMonth(), 1);\n break;\n case 'weekly':\n setDayOfWeek(date, rule.weekStart, -1);\n break;\n default:\n break;\n }\n if (rule.hours) {\n date.setHours(0);\n }\n if (rule.minutes) {\n date.setMinutes(0);\n }\n if (rule.seconds) {\n date.setSeconds(0);\n }\n return date;\n }\n function endPeriodByFreq(start, rule) {\n var date = new Date(start);\n switch (rule.freq) {\n case 'yearly':\n date.setFullYear(date.getFullYear(), 11, 31);\n break;\n case 'monthly':\n date.setFullYear(date.getFullYear(), date.getMonth() + 1, 0);\n break;\n case 'weekly':\n setDayOfWeek(date, rule.weekStart, -1);\n date.setDate(date.getDate() + 6);\n break;\n default:\n break;\n }\n if (rule.hours) {\n date.setHours(23);\n }\n if (rule.minutes) {\n date.setMinutes(59);\n }\n if (rule.seconds) {\n date.setSeconds(59);\n }\n return date;\n }\n function eventsByPosition(periodEvents, start, positions) {\n var periodEventsLength = periodEvents.length;\n var events = [];\n var position;\n var event;\n for (var idx = 0, length = positions.length; idx < length; idx++) {\n position = positions[idx];\n if (position < 0) {\n position = periodEventsLength + position;\n } else {\n position -= 1;\n }\n event = periodEvents[position];\n if (event && event.start >= start) {\n events.push(event);\n }\n }\n return events;\n }\n function removeExceptionDates(periodEvents, exceptionDates, zone) {\n var events = [];\n var event;\n for (var idx = 0; idx < periodEvents.length; idx++) {\n event = periodEvents[idx];\n if (!isException(exceptionDates, event.start, zone)) {\n events.push(event);\n }\n }\n return events;\n }\n function expand(event, start, end, zone) {\n var rule = parseRule(event.recurrenceRule, zone), startTime, endTime, endDate, hours, minutes, seconds, durationMS, startPeriod, inPeriod, ruleStart, ruleEnd, useEventStart, freqName, exceptionDates, eventStartTime, eventStartMS, eventStart, count, freq, positions, currentIdx, periodEvents, events = [];\n if (!rule) {\n return [event];\n }\n positions = rule.positions;\n currentIdx = positions ? 0 : 1;\n ruleStart = rule.start;\n ruleEnd = rule.end;\n if (ruleStart || ruleEnd) {\n event = event.clone({\n start: ruleStart ? new Date(ruleStart.value[0]) : undefined,\n end: ruleEnd ? new Date(ruleEnd.value[0]) : undefined\n });\n }\n eventStart = event.start;\n eventStartMS = eventStart.getTime();\n eventStartTime = getMilliseconds(eventStart);\n exceptionDates = parseExceptions(event.recurrenceException, zone);\n if (!exceptionDates[0] && rule.exdates) {\n exceptionDates = rule.exdates.value;\n event.set('recurrenceException', toExceptionString(exceptionDates, zone));\n }\n startPeriod = start = new Date(start);\n end = new Date(end);\n freqName = rule.freq;\n freq = frequencies[freqName];\n count = rule.count;\n if (rule.until && rule.until < end) {\n end = new Date(rule.until);\n }\n useEventStart = freqName === 'yearly' || freqName === 'monthly' || freqName === 'weekly';\n if (start < eventStartMS || count || rule.interval > 1 || useEventStart) {\n start = new Date(eventStartMS);\n } else {\n hours = start.getHours();\n minutes = start.getMinutes();\n seconds = start.getSeconds();\n if (!rule.hours) {\n hours = eventStart.getHours();\n }\n if (!rule.minutes) {\n minutes = eventStart.getMinutes();\n }\n if (!rule.seconds) {\n seconds = eventStart.getSeconds();\n }\n start.setHours(hours, minutes, seconds, eventStart.getMilliseconds());\n }\n rule._startPeriod = new Date(start);\n if (positions) {\n start = startPeriodByFreq(start, rule);\n end = endPeriodByFreq(end, rule);\n var diff = getMilliseconds(end) - getMilliseconds(start);\n if (diff < 0) {\n hours = start.getHours();\n end.setHours(hours, start.getMinutes(), start.getSeconds(), start.getMilliseconds());\n kendoDate.adjustDST(end, hours);\n }\n rule._startPeriod = new Date(start);\n rule._endPeriod = endPeriodByFreq(start, rule);\n }\n durationMS = event.duration();\n rule._startTime = startTime = kendoDate.toInvariantTime(start);\n if (freq.setup) {\n freq.setup(rule, eventStart, start);\n }\n freq.limit(start, end, rule);\n while (start <= end) {\n endDate = new Date(start);\n setTime(endDate, durationMS);\n inPeriod = start >= startPeriod || endDate > startPeriod;\n if (inPeriod && !isException(exceptionDates, start, zone) || positions) {\n startTime = kendoDate.toUtcTime(kendoDate.getDate(start)) + getMilliseconds(rule._startTime);\n endTime = startTime + durationMS;\n if (eventStartMS !== start.getTime() || eventStartTime !== getMilliseconds(rule._startTime)) {\n events.push(event.toOccurrence({\n start: new Date(start),\n end: endDate,\n _startTime: startTime,\n _endTime: endTime\n }));\n } else {\n event._startTime = startTime;\n event._endTime = endTime;\n events.push(event);\n }\n }\n if (positions) {\n freq.next(start, rule);\n freq.limit(start, end, rule);\n if (start > rule._endPeriod) {\n periodEvents = eventsByPosition(events.slice(currentIdx), eventStart, positions);\n periodEvents = removeExceptionDates(periodEvents, exceptionDates, zone);\n events = events.slice(0, currentIdx).concat(periodEvents);\n rule._endPeriod = endPeriodByFreq(start, rule);\n currentIdx = events.length;\n }\n if (count && count === currentIdx) {\n break;\n }\n } else {\n if (count && count === currentIdx) {\n break;\n }\n currentIdx += 1;\n freq.next(start, rule);\n freq.limit(start, end, rule);\n }\n }\n return events;\n }\n function parseUTCDate(value, zone) {\n value = kendo.parseDate(value, DATE_FORMATS);\n if (value && zone) {\n value = timezone.convert(value, value.getTimezoneOffset(), zone);\n }\n return value;\n }\n function parseDateRule(dateRule, zone) {\n var pairs = dateRule.split(';');\n var pair;\n var property;\n var value;\n var tzid;\n var valueIdx, valueLength;\n for (var idx = 0, length = pairs.length; idx < length; idx++) {\n pair = pairs[idx].split(':');\n property = pair[0];\n value = pair[1];\n if (property.indexOf('TZID') !== -1) {\n tzid = property.substring(property.indexOf('TZID')).split('=')[1];\n }\n if (value) {\n value = value.split(',');\n for (valueIdx = 0, valueLength = value.length; valueIdx < valueLength; valueIdx++) {\n value[valueIdx] = parseUTCDate(value[valueIdx], tzid || zone);\n }\n }\n }\n if (value) {\n return {\n value: value,\n tzid: tzid\n };\n }\n }\n function parseRule(recur, zone) {\n var instance = {};\n var splits, value;\n var idx = 0, length;\n var ruleValue = false;\n var rule, part, parts;\n var property, weekStart, weekDays;\n var predicate = function (a, b) {\n var day1 = a.day, day2 = b.day;\n if (day1 < weekStart) {\n day1 += 7;\n }\n if (day2 < weekStart) {\n day2 += 7;\n }\n return day1 - day2;\n };\n if (!recur) {\n return null;\n }\n parts = recur.split('\\n');\n if (!parts[1] && (recur.indexOf('DTSTART') !== -1 || recur.indexOf('DTEND') !== -1 || recur.indexOf('EXDATE') !== -1)) {\n parts = recur.split(' ');\n }\n for (idx = 0, length = parts.length; idx < length; idx++) {\n part = $.trim(parts[idx]);\n if (part.indexOf('DTSTART') !== -1) {\n instance.start = parseDateRule(part, zone);\n } else if (part.indexOf('DTEND') !== -1) {\n instance.end = parseDateRule(part, zone);\n } else if (part.indexOf('EXDATE') !== -1) {\n instance.exdates = parseDateRule(part, zone);\n } else if (part.indexOf('RRULE') !== -1) {\n rule = part.substring(6);\n } else if ($.trim(part)) {\n rule = part;\n }\n }\n rule = rule.split(';');\n for (idx = 0, length = rule.length; idx < length; idx++) {\n property = rule[idx];\n splits = property.split('=');\n value = $.trim(splits[1]).split(',');\n switch ($.trim(splits[0]).toUpperCase()) {\n case 'FREQ':\n instance.freq = value[0].toLowerCase();\n break;\n case 'UNTIL':\n instance.until = parseUTCDate(value[0], zone);\n break;\n case 'COUNT':\n instance.count = parseInt(value[0], 10);\n break;\n case 'INTERVAL':\n instance.interval = parseInt(value[0], 10);\n break;\n case 'BYSECOND':\n instance.seconds = parseArray(value, {\n start: 0,\n end: 60\n });\n ruleValue = true;\n break;\n case 'BYMINUTE':\n instance.minutes = parseArray(value, {\n start: 0,\n end: 59\n });\n ruleValue = true;\n break;\n case 'BYHOUR':\n instance.hours = parseArray(value, {\n start: 0,\n end: 23\n });\n ruleValue = true;\n break;\n case 'BYMONTHDAY':\n instance.monthDays = parseArray(value, {\n start: -31,\n end: 31\n });\n ruleValue = true;\n break;\n case 'BYYEARDAY':\n instance.yearDays = parseArray(value, {\n start: -366,\n end: 366\n });\n ruleValue = true;\n break;\n case 'BYMONTH':\n instance.months = parseArray(value, {\n start: 1,\n end: 12\n });\n ruleValue = true;\n break;\n case 'BYDAY':\n instance.weekDays = weekDays = parseWeekDayList(value);\n ruleValue = true;\n break;\n case 'BYWEEKNO':\n instance.weeks = parseArray(value, {\n start: -53,\n end: 53\n });\n ruleValue = true;\n break;\n case 'BYSETPOS':\n instance.positions = parseArray(value, {\n start: -366,\n end: 366\n });\n break;\n case 'WKST':\n instance.weekStart = weekStart = WEEK_DAYS_IDX[value[0]];\n break;\n }\n }\n if (instance.freq === undefined || instance.count !== undefined && instance.until) {\n return null;\n }\n if (!instance.interval) {\n instance.interval = 1;\n }\n if (weekStart === undefined) {\n instance.weekStart = weekStart = kendo.culture().calendar.firstDay;\n }\n if (weekDays) {\n instance.weekDays = weekDays.sort(predicate);\n }\n if (instance.positions && !ruleValue) {\n instance.positions = null;\n }\n instance._hasRuleValue = ruleValue;\n return instance;\n }\n function serializeDateRule(dateRule, zone) {\n var value = dateRule.value;\n var tzid = dateRule.tzid || '';\n var length = value.length;\n var idx = 0;\n var val;\n for (; idx < length; idx++) {\n val = value[idx];\n val = timezone.convert(val, tzid || zone || val.getTimezoneOffset(), 'Etc/UTC');\n value[idx] = kendo.toString(val, 'yyyyMMddTHHmmssZ');\n }\n if (tzid) {\n tzid = ';TZID=' + tzid;\n }\n return tzid + ':' + value.join(',') + ' ';\n }\n function serialize(rule, zone) {\n var weekStart = rule.weekStart;\n var ruleString = 'FREQ=' + rule.freq.toUpperCase();\n var exdates = rule.exdates || '';\n var start = rule.start || '';\n var end = rule.end || '';\n var until = rule.until;\n if (rule.interval > 1) {\n ruleString += ';INTERVAL=' + rule.interval;\n }\n if (rule.count) {\n ruleString += ';COUNT=' + rule.count;\n }\n if (until) {\n until = timezone.convert(until, zone || until.getTimezoneOffset(), 'Etc/UTC');\n ruleString += ';UNTIL=' + kendo.toString(until, 'yyyyMMddTHHmmssZ');\n }\n if (rule.months) {\n ruleString += ';BYMONTH=' + rule.months;\n }\n if (rule.weeks) {\n ruleString += ';BYWEEKNO=' + rule.weeks;\n }\n if (rule.yearDays) {\n ruleString += ';BYYEARDAY=' + rule.yearDays;\n }\n if (rule.monthDays) {\n ruleString += ';BYMONTHDAY=' + rule.monthDays;\n }\n if (rule.weekDays) {\n ruleString += ';BYDAY=' + serializeWeekDayList(rule.weekDays);\n }\n if (rule.hours) {\n ruleString += ';BYHOUR=' + rule.hours;\n }\n if (rule.minutes) {\n ruleString += ';BYMINUTE=' + rule.minutes;\n }\n if (rule.seconds) {\n ruleString += ';BYSECOND=' + rule.seconds;\n }\n if (rule.positions) {\n ruleString += ';BYSETPOS=' + rule.positions;\n }\n if (weekStart !== undefined) {\n ruleString += ';WKST=' + WEEK_DAYS[weekStart];\n }\n if (start) {\n start = 'DTSTART' + serializeDateRule(start, zone);\n }\n if (end) {\n end = 'DTEND' + serializeDateRule(end, zone);\n }\n if (exdates) {\n exdates = 'EXDATE' + serializeDateRule(exdates, zone);\n }\n if (start || end || exdates) {\n ruleString = start + end + exdates + 'RRULE:' + ruleString;\n }\n return ruleString;\n }\n kendo.recurrence = {\n rule: {\n parse: parseRule,\n serialize: serialize\n },\n expand: expand,\n dayInYear: dayInYear,\n weekInYear: weekInYear,\n weekInMonth: weekInMonth,\n numberOfWeeks: numberOfWeeks,\n isException: isException,\n toExceptionString: toExceptionString\n };\n var weekDayCheckBoxes = function (firstDay) {\n var shortNames = kendo.culture().calendar.days.namesShort, length = shortNames.length, result = '', idx = 0, values = [];\n for (; idx < length; idx++) {\n values.push(idx);\n }\n shortNames = shortNames.slice(firstDay).concat(shortNames.slice(0, firstDay));\n values = values.slice(firstDay).concat(values.slice(0, firstDay));\n for (idx = 0; idx < length; idx++) {\n result += '<label class=\"k-check\"><input class=\"k-recur-weekday-checkbox\" type=\"checkbox\" value=\"' + values[idx] + '\" /> ' + shortNames[idx] + '</label>';\n }\n return result;\n };\n var RECURRENCE_VIEW_TEMPLATE = kendo.template('# if (frequency !== \"never\") { #' + '<div class=\"k-edit-label\"><label>#:messages.repeatEvery#</label></div>' + '<div class=\"k-edit-field\"><input class=\"k-recur-interval\"/>#:messages.interval#</div>' + '# } #' + '# if (frequency === \"weekly\") { #' + '<div class=\"k-edit-label\"><label>#:messages.repeatOn#</label></div>' + '<div class=\"k-edit-field\">#=weekDayCheckBoxes(firstWeekDay)#</div>' + '# } else if (frequency === \"monthly\") { #' + '<div class=\"k-edit-label\"><label>#:messages.repeatOn#</label></div>' + '<div class=\"k-edit-field\">' + '<ul class=\"k-reset\">' + '<li>' + '<label><input class=\"k-recur-month-radio\" type=\"radio\" name=\"month\" value=\"monthday\" />#:messages.day#</label>' + '<input class=\"k-recur-monthday\" />' + '</li>' + '<li>' + '<input class=\"k-recur-month-radio\" type=\"radio\" name=\"month\" value=\"weekday\" />' + '<input class=\"k-recur-weekday-offset\" /><input class=\"k-recur-weekday\" />' + '</li>' + '</ul>' + '</div>' + '# } else if (frequency === \"yearly\") { #' + '<div class=\"k-edit-label\"><label>#:messages.repeatOn#</label></div>' + '<div class=\"k-edit-field\">' + '<ul class=\"k-reset\">' + '<li>' + '<input class=\"k-recur-year-radio\" type=\"radio\" name=\"year\" value=\"monthday\" />' + '<input class=\"k-recur-month\" /><input class=\"k-recur-monthday\" />' + '</li>' + '<li>' + '<input class=\"k-recur-year-radio\" type=\"radio\" name=\"year\" value=\"weekday\" />' + '<input class=\"k-recur-weekday-offset\" /><input class=\"k-recur-weekday\" />#:messages.of#<input class=\"k-recur-month\" />' + '</li>' + '</ul>' + '</div>' + '# } #' + '# if (frequency !== \"never\") { #' + '<div class=\"k-edit-label\"><label>#:end.label#</label></div>' + '<div class=\"k-edit-field\">' + '<ul class=\"k-reset\">' + '<li>' + '<label><input class=\"k-recur-end-never\" type=\"radio\" name=\"end\" value=\"never\" />#:end.never#</label>' + '</li>' + '<li>' + '<label><input class=\"k-recur-end-count\" type=\"radio\" name=\"end\" value=\"count\" />#:end.after#</label>' + '<input class=\"k-recur-count\" />#:end.occurrence#' + '</li>' + '<li>' + '<label><input class=\"k-recur-end-until\" type=\"radio\" name=\"end\" value=\"until\" />#:end.on#</label>' + '<input class=\"k-recur-until\" />' + '</li>' + '</ul>' + '</div>' + '# } #');\n var DAY_RULE = [\n {\n day: 0,\n offset: 0\n },\n {\n day: 1,\n offset: 0\n },\n {\n day: 2,\n offset: 0\n },\n {\n day: 3,\n offset: 0\n },\n {\n day: 4,\n offset: 0\n },\n {\n day: 5,\n offset: 0\n },\n {\n day: 6,\n offset: 0\n }\n ];\n var WEEKDAY_RULE = [\n {\n day: 1,\n offset: 0\n },\n {\n day: 2,\n offset: 0\n },\n {\n day: 3,\n offset: 0\n },\n {\n day: 4,\n offset: 0\n },\n {\n day: 5,\n offset: 0\n }\n ];\n var WEEKEND_RULE = [\n {\n day: 0,\n offset: 0\n },\n {\n day: 6,\n offset: 0\n }\n ];\n var BaseRecurrenceEditor = Widget.extend({\n init: function (element, options) {\n var start;\n var that = this;\n var frequencies = options && options.frequencies;\n Widget.fn.init.call(that, element, options);\n that.wrapper = that.element;\n options = that.options;\n options.start = start = options.start || kendoDate.today();\n if (frequencies) {\n options.frequencies = frequencies;\n }\n if (typeof start === 'string') {\n options.start = kendo.parseDate(start, 'yyyyMMddTHHmmss');\n }\n if (options.firstWeekDay === null) {\n options.firstWeekDay = kendo.culture().calendar.firstDay;\n }\n that._namespace = '.' + options.name;\n },\n options: {\n value: '',\n start: '',\n timezone: '',\n spinners: true,\n firstWeekDay: null,\n frequencies: [\n 'never',\n 'daily',\n 'weekly',\n 'monthly',\n 'yearly'\n ],\n mobile: false,\n messages: {\n frequencies: {\n never: 'Never',\n hourly: 'Hourly',\n daily: 'Daily',\n weekly: 'Weekly',\n monthly: 'Monthly',\n yearly: 'Yearly'\n },\n hourly: {\n repeatEvery: 'Repeat every: ',\n interval: ' hour(s)'\n },\n daily: {\n repeatEvery: 'Repeat every: ',\n interval: ' day(s)'\n },\n weekly: {\n interval: ' week(s)',\n repeatEvery: 'Repeat every: ',\n repeatOn: 'Repeat on: '\n },\n monthly: {\n repeatEvery: 'Repeat every: ',\n repeatOn: 'Repeat on: ',\n interval: ' month(s)',\n day: 'Day '\n },\n yearly: {\n repeatEvery: 'Repeat every: ',\n repeatOn: 'Repeat on: ',\n interval: ' year(s)',\n of: ' of '\n },\n end: {\n label: 'End:',\n mobileLabel: 'Ends',\n never: 'Never',\n after: 'After ',\n occurrence: ' occurrence(s)',\n on: 'On '\n },\n offsetPositions: {\n first: 'first',\n second: 'second',\n third: 'third',\n fourth: 'fourth',\n last: 'last'\n },\n weekdays: {\n day: 'day',\n weekday: 'weekday',\n weekend: 'weekend day'\n }\n }\n },\n events: ['change'],\n _initInterval: function () {\n var that = this;\n var rule = that._value;\n that._container.find('.k-recur-interval').kendoNumericTextBox({\n spinners: that.options.spinners,\n value: rule.interval || 1,\n decimals: 0,\n format: '#',\n min: 1,\n change: function () {\n rule.interval = this.value();\n that._trigger();\n }\n });\n },\n _weekDayRule: function (clear) {\n var that = this;\n var weekday = (that._weekDay.element || that._weekDay).val();\n var offset = Number((that._weekDayOffset.element || that._weekDayOffset).val());\n var weekDays = null;\n var positions = null;\n if (!clear) {\n if (weekday === 'day') {\n weekDays = DAY_RULE;\n positions = offset;\n } else if (weekday === 'weekday') {\n weekDays = WEEKDAY_RULE;\n positions = offset;\n } else if (weekday === 'weekend') {\n weekDays = WEEKEND_RULE;\n positions = offset;\n } else {\n weekDays = [{\n offset: offset,\n day: Number(weekday)\n }];\n }\n }\n that._value.weekDays = weekDays;\n that._value.positions = positions;\n },\n _weekDayView: function () {\n var that = this;\n var weekDays = that._value.weekDays;\n var positions = that._value.positions;\n var weekDayOffsetWidget = that._weekDayOffset;\n var weekDayOffset;\n var weekDayValue;\n var length;\n var method;\n if (weekDays) {\n length = weekDays.length;\n if (positions) {\n if (length === 7) {\n weekDayValue = 'day';\n weekDayOffset = positions;\n } else if (length === 5) {\n weekDayValue = 'weekday';\n weekDayOffset = positions;\n } else if (length === 2) {\n weekDayValue = 'weekend';\n weekDayOffset = positions;\n }\n }\n if (!weekDayValue) {\n weekDays = weekDays[0];\n weekDayValue = weekDays.day;\n weekDayOffset = weekDays.offset || '';\n }\n method = weekDayOffsetWidget.value ? 'value' : 'val';\n weekDayOffsetWidget[method](weekDayOffset);\n that._weekDay[method](weekDayValue);\n }\n },\n _initWeekDay: function () {\n var that = this, data;\n var weekdayMessage = that.options.messages.weekdays;\n var offsetMessage = that.options.messages.offsetPositions;\n var weekDayInput = that._container.find('.k-recur-weekday');\n var change = function () {\n that._weekDayRule();\n that._trigger();\n };\n if (weekDayInput[0]) {\n that._weekDayOffset = new DropDownList(that._container.find('.k-recur-weekday-offset'), {\n change: change,\n dataTextField: 'text',\n dataValueField: 'value',\n dataSource: [\n {\n text: offsetMessage.first,\n value: '1'\n },\n {\n text: offsetMessage.second,\n value: '2'\n },\n {\n text: offsetMessage.third,\n value: '3'\n },\n {\n text: offsetMessage.fourth,\n value: '4'\n },\n {\n text: offsetMessage.last,\n value: '-1'\n }\n ]\n });\n data = [\n {\n text: weekdayMessage.day,\n value: 'day'\n },\n {\n text: weekdayMessage.weekday,\n value: 'weekday'\n },\n {\n text: weekdayMessage.weekend,\n value: 'weekend'\n }\n ];\n that._weekDay = new DropDownList(weekDayInput, {\n value: that.options.start.getDay(),\n change: change,\n dataTextField: 'text',\n dataValueField: 'value',\n dataSource: data.concat($.map(kendo.culture().calendar.days.names, function (dayName, idx) {\n return {\n text: dayName,\n value: idx\n };\n }))\n });\n that._weekDayView();\n }\n },\n _initWeekDays: function () {\n var that = this;\n var rule = that._value;\n var weekDays = that._container.find('.k-recur-weekday-checkbox');\n if (weekDays[0]) {\n weekDays.on(CLICK + that._namespace, function () {\n rule.weekDays = $.map(weekDays.filter(':checked'), function (checkbox) {\n return {\n day: Number(checkbox.value),\n offset: 0\n };\n });\n if (!that.options.mobile) {\n that._trigger();\n }\n });\n if (rule.weekDays) {\n var idx, weekDay;\n var i = 0, l = weekDays.length;\n var length = rule.weekDays.length;\n for (; i < l; i++) {\n weekDay = weekDays[i];\n for (idx = 0; idx < length; idx++) {\n if (weekDay.value == rule.weekDays[idx].day) {\n weekDay.checked = true;\n }\n }\n }\n }\n }\n },\n _initMonthDay: function () {\n var that = this;\n var rule = that._value;\n var monthDayInput = that._container.find('.k-recur-monthday');\n if (monthDayInput[0]) {\n that._monthDay = new kendo.ui.NumericTextBox(monthDayInput, {\n spinners: that.options.spinners,\n min: 1,\n max: 31,\n decimals: 0,\n format: '#',\n value: rule.monthDays ? rule.monthDays[0] : that.options.start.getDate(),\n change: function () {\n var value = this.value();\n rule.monthDays = value ? [value] : value;\n that._trigger();\n }\n });\n }\n },\n _initCount: function () {\n var that = this, input = that._container.find('.k-recur-count'), rule = that._value;\n that._count = input.kendoNumericTextBox({\n spinners: that.options.spinners,\n value: rule.count || 1,\n decimals: 0,\n format: '#',\n min: 1,\n change: function () {\n rule.count = this.value();\n that._trigger();\n }\n }).data('kendoNumericTextBox');\n },\n _initUntil: function () {\n var that = this, input = that._container.find('.k-recur-until'), start = that.options.start, rule = that._value, until = rule.until;\n that._until = input.kendoDatePicker({\n min: until && until < start ? until : start,\n value: until || new Date(start.getFullYear(), start.getMonth(), start.getDate(), 23, 59, 59),\n change: function () {\n var date = this.value();\n rule.until = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59);\n that._trigger();\n }\n }).data('kendoDatePicker');\n },\n _trigger: function () {\n if (!this.options.mobile) {\n this.trigger('change');\n }\n }\n });\n var RecurrenceEditor = BaseRecurrenceEditor.extend({\n init: function (element, options) {\n var that = this;\n BaseRecurrenceEditor.fn.init.call(that, element, options);\n that._initFrequency();\n that._initContainer();\n that.value(that.options.value);\n },\n options: { name: 'RecurrenceEditor' },\n events: ['change'],\n destroy: function () {\n var that = this;\n that._frequency.destroy();\n that._container.find('input[type=radio],input[type=checkbox]').off(CLICK + that._namespace);\n kendo.destroy(that._container);\n BaseRecurrenceEditor.fn.destroy.call(that);\n },\n value: function (value) {\n var that = this;\n var timezone = that.options.timezone;\n var freq;\n if (value === undefined) {\n if (!that._value.freq) {\n return '';\n }\n return serialize(that._value, timezone);\n }\n that._value = parseRule(value, timezone) || {};\n freq = that._value.freq;\n if (freq) {\n that._frequency.value(freq);\n } else {\n that._frequency.select(0);\n }\n that._initView(that._frequency.value());\n },\n _initContainer: function () {\n var element = this.element, container = $('<div class=\"k-recur-view\" />'), editContainer = element.parent('.k-edit-field');\n if (editContainer[0]) {\n container.insertAfter(editContainer);\n } else {\n element.append(container);\n }\n this._container = container;\n },\n _initFrequency: function () {\n var that = this, options = that.options, frequencies = options.frequencies, messages = options.messages.frequencies, ddl = $('<input />'), frequency;\n frequencies = $.map(frequencies, function (frequency) {\n return {\n text: messages[frequency],\n value: frequency\n };\n });\n frequency = frequencies[0];\n if (frequency && frequency.value === 'never') {\n frequency.value = '';\n }\n that.element.append(ddl);\n that._frequency = new DropDownList(ddl, {\n dataTextField: 'text',\n dataValueField: 'value',\n dataSource: frequencies,\n change: function () {\n that._value = {};\n that._initView(that._frequency.value());\n that.trigger('change');\n }\n });\n },\n _initView: function (frequency) {\n var that = this;\n var rule = that._value;\n var options = that.options;\n var data = {\n frequency: frequency || 'never',\n weekDayCheckBoxes: weekDayCheckBoxes,\n firstWeekDay: options.firstWeekDay,\n messages: options.messages[frequency],\n end: options.messages.end\n };\n kendo.destroy(that._container);\n that._container.html(RECURRENCE_VIEW_TEMPLATE(data));\n if (!frequency) {\n that._value = {};\n return;\n }\n rule.freq = frequency;\n if (frequency === 'weekly' && !rule.weekDays) {\n rule.weekDays = [{\n day: options.start.getDay(),\n offset: 0\n }];\n }\n that._initInterval();\n that._initWeekDays();\n that._initMonthDay();\n that._initWeekDay();\n that._initMonth();\n that._initCount();\n that._initUntil();\n that._period();\n that._end();\n },\n _initMonth: function () {\n var that = this;\n var rule = that._value;\n var month = rule.months || [that.options.start.getMonth() + 1];\n var monthInputs = that._container.find('.k-recur-month');\n var options;\n if (monthInputs[0]) {\n options = {\n change: function () {\n rule.months = [Number(this.value())];\n that.trigger('change');\n },\n dataTextField: 'text',\n dataValueField: 'value',\n dataSource: $.map(kendo.culture().calendar.months.names, function (monthName, idx) {\n return {\n text: monthName,\n value: idx + 1\n };\n })\n };\n that._month1 = new DropDownList(monthInputs[0], options);\n that._month2 = new DropDownList(monthInputs[1], options);\n if (month) {\n month = month[0];\n that._month1.value(month);\n that._month2.value(month);\n }\n }\n },\n _end: function () {\n var that = this;\n var rule = that._value;\n var container = that._container;\n var namespace = that._namespace;\n var click = function (e) {\n that._toggleEnd(e.currentTarget.value);\n that.trigger('change');\n };\n var endRule;\n that._buttonNever = container.find('.k-recur-end-never').on(CLICK + namespace, click);\n that._buttonCount = container.find('.k-recur-end-count').on(CLICK + namespace, click);\n that._buttonUntil = container.find('.k-recur-end-until').on(CLICK + namespace, click);\n if (rule.count) {\n endRule = 'count';\n } else if (rule.until) {\n endRule = 'until';\n }\n that._toggleEnd(endRule);\n },\n _period: function () {\n var that = this;\n var rule = that._value;\n var monthly = rule.freq === 'monthly';\n var toggleRule = monthly ? that._toggleMonthDay : that._toggleYear;\n var selector = '.k-recur-' + (monthly ? 'month' : 'year') + '-radio';\n var radioButtons = that._container.find(selector);\n if (!monthly && rule.freq !== 'yearly') {\n return;\n }\n radioButtons.on(CLICK + that._namespace, function (e) {\n toggleRule.call(that, e.currentTarget.value);\n that.trigger('change');\n });\n that._buttonMonthDay = radioButtons.eq(0);\n that._buttonWeekDay = radioButtons.eq(1);\n toggleRule.call(that, rule.weekDays ? 'weekday' : 'monthday');\n },\n _toggleEnd: function (endRule) {\n var that = this;\n var count, until;\n var enableCount, enableUntil;\n if (endRule === 'count') {\n that._buttonCount.prop('checked', true);\n enableCount = true;\n enableUntil = false;\n count = that._count.value();\n until = null;\n } else if (endRule === 'until') {\n that._buttonUntil.prop('checked', true);\n enableCount = false;\n enableUntil = true;\n count = null;\n until = that._until.value();\n } else {\n that._buttonNever.prop('checked', true);\n enableCount = enableUntil = false;\n count = until = null;\n }\n that._count.enable(enableCount);\n that._until.enable(enableUntil);\n that._value.count = count;\n that._value.until = until;\n },\n _toggleMonthDay: function (monthRule) {\n var that = this;\n var enableMonthDay = false;\n var enableWeekDay = true;\n var clear = false;\n var monthDays;\n if (monthRule === 'monthday') {\n that._buttonMonthDay.prop('checked', true);\n monthDays = [that._monthDay.value()];\n enableMonthDay = true;\n enableWeekDay = false;\n clear = true;\n } else {\n that._buttonWeekDay.prop('checked', true);\n monthDays = null;\n }\n that._weekDay.enable(enableWeekDay);\n that._weekDayOffset.enable(enableWeekDay);\n that._monthDay.enable(enableMonthDay);\n that._value.monthDays = monthDays;\n that._weekDayRule(clear);\n },\n _toggleYear: function (yearRule) {\n var that = this;\n var enableMonth1 = false;\n var enableMonth2 = true;\n var month;\n if (yearRule === 'monthday') {\n enableMonth1 = true;\n enableMonth2 = false;\n month = that._month1.value();\n } else {\n month = that._month2.value();\n }\n that._month1.enable(enableMonth1);\n that._month2.enable(enableMonth2);\n that._value.months = [month];\n that._toggleMonthDay(yearRule);\n }\n });\n ui.plugin(RecurrenceEditor);\n var RECURRENCE_HEADER_TEMPLATE = kendo.template('<div class=\"k-edit-label\"><label>#:headerTitle#</label></div>' + '<div class=\"k-edit-field k-recur-pattern k-scheduler-toolbar\"></div>' + '<div class=\"k-recur-view\"></div>');\n var RECURRENCE_REPEAT_PATTERN_TEMPLATE = kendo.template('# if (frequency !== \"never\") { #' + '<div class=\"k-edit-label\"><label>#:messages.repeatEvery#</label></div>' + '<div class=\"k-edit-field\"><input class=\"k-recur-interval\" pattern=\"\\\\\\\\d*\"/>#:messages.interval#</div>' + '# } #' + '# if (frequency === \"weekly\") { #' + '<div class=\"k-edit-label\"><label>#:messages.repeatOn#</label></div>' + '<div class=\"k-edit-field\">#=weekDayCheckBoxes(firstWeekDay)#</div>' + '# } else if (frequency === \"monthly\") { #' + '<div class=\"k-edit-label\"><label>#:messages.repeatBy#</label></div>' + '<div class=\"k-edit-field k-scheduler-toolbar k-repeat-rule\"></div>' + '<div class=\"k-monthday-view\" style=\"display:none\">' + '<div class=\"k-edit-label\"><label>#:messages.day#</label></div>' + '<div class=\"k-edit-field\"><input class=\"k-recur-monthday\" pattern=\"\\\\\\\\d*\"/></div>' + '</div>' + '<div class=\"k-weekday-view\" style=\"display:none\">' + '<div class=\"k-edit-label\"><label>#:messages.every#</label></div>' + '<div class=\"k-edit-field\"><select class=\"k-recur-weekday-offset\"></select></div>' + '<div class=\"k-edit-label\"><label>#:messages.day#</label></div>' + '<div class=\"k-edit-field\"><select class=\"k-recur-weekday\"></select></div>' + '</div>' + '# } else if (frequency === \"yearly\") { #' + '<div class=\"k-edit-label\"><label>#:messages.repeatBy#</label></div>' + '<div class=\"k-edit-field k-scheduler-toolbar k-repeat-rule\"></div>' + '<div class=\"k-monthday-view\" style=\"display:none\">' + '<div class=\"k-edit-label\"><label>#:messages.day#</label></div>' + '<div class=\"k-edit-field\"><input class=\"k-recur-monthday\" pattern=\"\\\\\\\\d*\"/></div>' + '</div>' + '<div class=\"k-weekday-view\" style=\"display:none\">' + '<div class=\"k-edit-label\"><label>#:messages.every#</label></div>' + '<div class=\"k-edit-field\"><select class=\"k-recur-weekday-offset\"></select></div>' + '<div class=\"k-edit-label\"><label>#:messages.day#</label></div>' + '<div class=\"k-edit-field\"><select class=\"k-recur-weekday\"></select></div>' + '</div>' + '<div class=\"k-edit-label\"><label>#:messages.month#</label></div>' + '<div class=\"k-edit-field\"><select class=\"k-recur-month\"></select></div>' + '# } #');\n var RECURRENCE_END_PATTERN_TEMPLATE = kendo.template('# if (endPattern === \"count\") { #' + '<div class=\"k-edit-label\"><label>#:messages.after#</label></div>' + '<div class=\"k-edit-field\"><input class=\"k-recur-count\" pattern=\"\\\\\\\\d*\" /></div>' + '# } else if (endPattern === \"until\") { #' + '<div class=\"k-edit-label\"><label>#:messages.on#</label></div>' + '<div class=\"k-edit-field\"><input type=\"date\" class=\"k-recur-until\" /></div>' + '# } #');\n var RECURRENCE_GROUP_BUTTON_TEMPLATE = kendo.template('<ul class=\"k-reset k-header k-scheduler-navigation\">' + '#for (var i = 0, length = dataSource.length; i < length; i++) {#' + '<li class=\"k-state-default #= value === dataSource[i].value ? \"k-state-selected\" : \"\" #\">' + '<a role=\"button\" href=\"\\\\#\" class=\"k-link\" data-#=ns#value=\"#=dataSource[i].value#\">#:dataSource[i].text#</a>' + '</li>' + '#}#' + '</ul>');\n var MobileRecurrenceEditor = BaseRecurrenceEditor.extend({\n init: function (element, options) {\n var that = this;\n BaseRecurrenceEditor.fn.init.call(that, element, options);\n options = that.options;\n that._optionTemplate = kendo.template('<option value=\"#:value#\">#:text#</option>');\n that.value(options.value);\n that._pane = options.pane;\n that._initRepeatButton();\n that._initRepeatEnd();\n that._defaultValue = that._value;\n },\n options: {\n name: 'MobileRecurrenceEditor',\n animations: {\n left: 'slide',\n right: 'slide:right'\n },\n mobile: true,\n messages: {\n cancel: 'Cancel',\n update: 'Save',\n endTitle: 'Repeat ends',\n repeatTitle: 'Repeat pattern',\n headerTitle: 'Repeat event',\n end: {\n patterns: {\n never: 'Never',\n after: 'After...',\n on: 'On...'\n },\n never: 'Never',\n after: 'End repeat after',\n on: 'End repeat on'\n },\n daily: { interval: '' },\n hourly: { interval: '' },\n weekly: { interval: '' },\n monthly: {\n interval: '',\n repeatBy: 'Repeat by: ',\n dayOfMonth: 'Day of the month',\n dayOfWeek: 'Day of the week',\n repeatEvery: 'Repeat every',\n every: 'Every',\n day: 'Day '\n },\n yearly: {\n interval: '',\n repeatBy: 'Repeat by: ',\n dayOfMonth: 'Day of the month',\n dayOfWeek: 'Day of the week',\n repeatEvery: 'Repeat every: ',\n every: 'Every',\n month: 'Month',\n day: 'Day'\n }\n }\n },\n events: ['change'],\n value: function (value) {\n var that = this;\n var timezone = that.options.timezone;\n if (value === undefined) {\n if (!that._value.freq) {\n return '';\n }\n return serialize(that._value, timezone);\n }\n that._value = parseRule(value, timezone) || {};\n },\n destroy: function () {\n this._destroyView();\n kendo.destroy(this._endFields);\n this._repeatButton.off(CLICK + this._namespace);\n BaseRecurrenceEditor.fn.destroy.call(this);\n },\n _initRepeatButton: function () {\n var that = this;\n var freq = that.options.messages.frequencies[this._value.freq || 'never'];\n that._repeatButton = $('<a href=\"#\" class=\"k-button k-scheduler-recur\">' + freq + '</a>').on(CLICK + that._namespace, function (e) {\n e.preventDefault();\n that._createView('repeat');\n that._pane.navigate('recurrence', that.options.animations.left);\n });\n that.element.append(that._repeatButton);\n },\n _initRepeatEnd: function () {\n var that = this;\n var endLabelField = $('<div class=\"k-edit-label\"><label>' + that.options.messages.end.mobileLabel + '</label></div>').insertAfter(that.element.parent('.k-edit-field'));\n var endEditField = $('<div class=\"k-edit-field\"><a href=\"#\" class=\"k-button k-scheduler-recur-end\"></a></div>').on(CLICK + that._namespace, function (e) {\n e.preventDefault();\n if (!that._value.freq) {\n return;\n }\n that._createView('end');\n that._pane.navigate('recurrence', that.options.animations.left);\n }).insertAfter(endLabelField);\n that._endFields = endLabelField.add(endEditField).toggleClass('k-state-disabled', !that._value.freq);\n that._endButton = endEditField.find('.k-scheduler-recur-end').text(that._endText());\n },\n _endText: function () {\n var rule = this._value;\n var messages = this.options.messages.end;\n var text = messages.never;\n if (rule.count) {\n text = kendo.format('{0} {1}', messages.after, rule.count);\n } else if (rule.until) {\n text = kendo.format('{0} {1:d}', messages.on, rule.until);\n }\n return text;\n },\n _initFrequency: function () {\n var that = this;\n var frequencyMessages = that.options.messages.frequencies;\n var html = RECURRENCE_GROUP_BUTTON_TEMPLATE({\n dataSource: $.map(this.options.frequencies, function (frequency) {\n return {\n text: frequencyMessages[frequency],\n value: frequency !== 'never' ? frequency : ''\n };\n }),\n value: that._value.freq || '',\n ns: kendo.ns\n });\n that._view.element.find('.k-recur-pattern').append(html).on(CLICK + that._namespace, '.k-scheduler-navigation li', function (e) {\n var li = $(this);\n e.preventDefault();\n li.addClass('k-state-selected').siblings().removeClass('k-state-selected');\n that._value = { freq: li.children('a').attr(kendo.attr('value')) };\n that._initRepeatView();\n });\n },\n _initEndNavigation: function () {\n var that = this;\n var endMessages = that.options.messages.end.patterns;\n var rule = that._value;\n var value = '';\n if (rule.count) {\n value = 'count';\n } else if (rule.until) {\n value = 'until';\n }\n var html = RECURRENCE_GROUP_BUTTON_TEMPLATE({\n dataSource: [\n {\n text: endMessages.never,\n value: ''\n },\n {\n text: endMessages.after,\n value: 'count'\n },\n {\n text: endMessages.on,\n value: 'until'\n }\n ],\n value: value,\n ns: kendo.ns\n });\n that._view.element.find('.k-recur-pattern').append(html).on(CLICK + that._namespace, '.k-scheduler-navigation li', function (e) {\n var li = $(this);\n var count = null;\n var until = null;\n e.preventDefault();\n li.addClass('k-state-selected').siblings().removeClass('k-state-selected');\n that._initEndView(li.children('a').attr(kendo.attr('value')));\n if (that._count) {\n count = that._count.value();\n until = null;\n } else if (that._until) {\n count = null;\n until = that._until.val ? kendo.parseDate(that._until.val(), 'yyyy-MM-dd') : that._until.value();\n }\n rule.count = count;\n rule.until = until;\n });\n },\n _createView: function (viewType) {\n var that = this;\n var options = that.options;\n var messages = options.messages;\n var headerTitle = messages[viewType === 'repeat' ? 'repeatTitle' : 'endTitle'];\n var html = '<div data-role=\"view\" class=\"k-popup-edit-form k-scheduler-edit-form k-mobile-list\" id=\"recurrence\">' + '<div data-role=\"header\" class=\"k-header\">' + '<a href=\"#\" class=\"k-button k-scheduler-cancel\">' + messages.cancel + '</a>' + messages.headerTitle + '<a href=\"#\" class=\"k-button k-scheduler-update\">' + messages.update + '</a>' + '</div>';\n var returnViewId = that._pane.view().id;\n that._view = that._pane.append(html + RECURRENCE_HEADER_TEMPLATE({ headerTitle: headerTitle }));\n that._view.element.on(CLICK + that._namespace, 'a.k-scheduler-cancel, a.k-scheduler-update', function (e) {\n e.preventDefault();\n e.stopPropagation();\n if ($(this).hasClass('k-scheduler-update')) {\n that.trigger('change');\n that._defaultValue = $.extend({}, that._value);\n } else {\n that._value = that._defaultValue;\n }\n var frequency = that._value.freq;\n that._endButton.text(that._endText());\n that._endFields.toggleClass('k-state-disabled', !frequency);\n that._repeatButton.text(messages.frequencies[frequency || 'never']);\n that._pane.one('viewShow', function () {\n that._destroyView();\n });\n that._pane.navigate(returnViewId, that.options.animations.right);\n });\n that._container = that._view.element.find('.k-recur-view');\n if (viewType === 'repeat') {\n that._initFrequency();\n that._initRepeatView();\n } else {\n that._initEndNavigation();\n that._initEndView();\n }\n },\n _destroyView: function () {\n if (this._view) {\n this._view.destroy();\n this._view.element.remove();\n }\n this._view = null;\n },\n _initRepeatView: function () {\n var that = this;\n var frequency = that._value.freq || 'never';\n var data = {\n frequency: frequency,\n weekDayCheckBoxes: weekDayCheckBoxes,\n firstWeekDay: that.options.firstWeekDay,\n messages: that.options.messages[frequency]\n };\n var html = RECURRENCE_REPEAT_PATTERN_TEMPLATE(data);\n var container = that._container;\n var rule = that._value;\n kendo.destroy(container);\n container.html(html);\n if (!html) {\n that._value = {};\n return;\n }\n if (frequency === 'weekly' && !rule.weekDays) {\n rule.weekDays = [{\n day: that.options.start.getDay(),\n offset: 0\n }];\n }\n that._initInterval();\n that._initMonthDay();\n that._initWeekDays();\n that._initWeekDay();\n that._initMonth();\n that._period();\n },\n _initEndView: function (endPattern) {\n var that = this;\n var rule = that._value;\n if (endPattern === undefined) {\n if (rule.count) {\n endPattern = 'count';\n } else if (rule.until) {\n endPattern = 'until';\n }\n }\n var data = {\n endPattern: endPattern,\n messages: that.options.messages.end\n };\n kendo.destroy(that._container);\n that._container.html(RECURRENCE_END_PATTERN_TEMPLATE(data));\n that._initCount();\n that._initUntil();\n },\n _initWeekDay: function () {\n var that = this, data;\n var weekdayMessage = that.options.messages.weekdays;\n var offsetMessage = that.options.messages.offsetPositions;\n var weekDaySelect = that._container.find('.k-recur-weekday');\n var change = function () {\n that._weekDayRule();\n that.trigger('change');\n };\n if (weekDaySelect[0]) {\n that._weekDayOffset = that._container.find('.k-recur-weekday-offset').html(that._options([\n {\n text: offsetMessage.first,\n value: '1'\n },\n {\n text: offsetMessage.second,\n value: '2'\n },\n {\n text: offsetMessage.third,\n value: '3'\n },\n {\n text: offsetMessage.fourth,\n value: '4'\n },\n {\n text: offsetMessage.last,\n value: '-1'\n }\n ])).change(change);\n data = [\n {\n text: weekdayMessage.day,\n value: 'day'\n },\n {\n text: weekdayMessage.weekday,\n value: 'weekday'\n },\n {\n text: weekdayMessage.weekend,\n value: 'weekend'\n }\n ];\n data = data.concat($.map(kendo.culture().calendar.days.names, function (dayName, idx) {\n return {\n text: dayName,\n value: idx\n };\n }));\n that._weekDay = weekDaySelect.html(that._options(data)).change(change).val(that.options.start.getDay());\n that._weekDayView();\n }\n },\n _initMonth: function () {\n var that = this;\n var rule = that._value;\n var start = that.options.start;\n var month = rule.months || [start.getMonth() + 1];\n var monthSelect = that._container.find('.k-recur-month');\n var monthNames = kendo.culture().calendar.months.names;\n if (monthSelect[0]) {\n var data = $.map(monthNames, function (monthName, idx) {\n return {\n text: monthName,\n value: idx + 1\n };\n });\n monthSelect.html(that._options(data)).change(function () {\n rule.months = [Number(this.value)];\n });\n that._monthSelect = monthSelect;\n if (month) {\n monthSelect.val(month[0]);\n }\n }\n },\n _period: function () {\n var that = this;\n var rule = that._value;\n var container = that._container;\n var messages = that.options.messages[rule.freq];\n var repeatRuleGroupButton = container.find('.k-repeat-rule');\n var weekDayView = container.find('.k-weekday-view');\n var monthDayView = container.find('.k-monthday-view');\n if (repeatRuleGroupButton[0]) {\n var currentValue = rule.weekDays ? 'weekday' : 'monthday';\n var html = RECURRENCE_GROUP_BUTTON_TEMPLATE({\n value: currentValue,\n dataSource: [\n {\n text: messages.dayOfMonth,\n value: 'monthday'\n },\n {\n text: messages.dayOfWeek,\n value: 'weekday'\n }\n ],\n ns: kendo.ns\n });\n var init = function (val) {\n var weekDayName = that._weekDay.val();\n var weekDayOffset = that._weekDayOffset.val();\n var monthDay = that._monthDay.value();\n var month = that._monthSelect ? that._monthSelect.val() : null;\n if (val === 'monthday') {\n rule.weekDays = null;\n rule.monthDays = monthDay ? [monthDay] : monthDay;\n rule.months = month ? [Number(month)] : month;\n weekDayView.hide();\n monthDayView.show();\n } else {\n rule.monthDays = null;\n rule.months = month ? [Number(month)] : month;\n rule.weekDays = [{\n offset: Number(weekDayOffset),\n day: Number(weekDayName)\n }];\n weekDayView.show();\n monthDayView.hide();\n }\n };\n repeatRuleGroupButton.append(html).on(CLICK + that._namespace, '.k-scheduler-navigation li', function (e) {\n var li = $(this).addClass('k-state-selected');\n e.preventDefault();\n li.siblings().removeClass('k-state-selected');\n var value = li.children('a').attr(kendo.attr('value'));\n init(value);\n });\n init(currentValue);\n }\n },\n _initUntil: function () {\n var that = this;\n var input = that._container.find('.k-recur-until');\n var start = that.options.start;\n var rule = that._value;\n var until = rule.until;\n var min = until && until < start ? until : start;\n if (kendo.support.input.date) {\n that._until = input.attr('min', kendo.toString(min, 'yyyy-MM-dd')).val(kendo.toString(until || start, 'yyyy-MM-dd')).on('change', function () {\n rule.until = kendo.parseDate(this.value, 'yyyy-MM-dd');\n });\n } else {\n that._until = input.kendoDatePicker({\n min: min,\n value: until || start,\n change: function () {\n rule.until = this.value();\n }\n }).data('kendoDatePicker');\n }\n },\n _options: function (data, optionLabel) {\n var idx = 0;\n var html = '';\n var length = data.length;\n var template = this._optionTemplate;\n if (optionLabel) {\n html += template({\n value: '',\n text: optionLabel\n });\n }\n for (; idx < length; idx++) {\n html += template(data[idx]);\n }\n return html;\n }\n });\n ui.plugin(MobileRecurrenceEditor);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.scheduler.timelineview', ['kendo.scheduler.view'], f);\n}(function () {\n var __meta__ = {\n id: 'scheduler.timelineview',\n name: 'Scheduler Timeline View',\n category: 'web',\n description: 'The Scheduler Timeline View',\n depends: ['scheduler.view'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, setTime = kendo.date.setTime, SchedulerView = ui.SchedulerView, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, extend = $.extend, proxy = $.proxy, getDate = kendo.date.getDate, getMilliseconds = kendo.date.getMilliseconds, MS_PER_DAY = kendo.date.MS_PER_DAY, MS_PER_MINUTE = kendo.date.MS_PER_MINUTE, CURRENT_TIME_MARKER_CLASS = 'k-current-time', CURRENT_TIME_MARKER_ARROW_CLASS = 'k-current-time-arrow', SCHEDULER_HEADER_WRAP_CLASS = 'k-scheduler-header-wrap', BORDER_SIZE_COEFF = 0.8666, NS = '.kendoTimelineView';\n var EVENT_TEMPLATE = kendo.template('<div>' + '<div class=\"k-event-template k-event-time\">#:kendo.format(\"{0:t} - {1:t}\", start, end)#</div>' + '<div class=\"k-event-template\">${title}</div></div>'), DATA_HEADER_TEMPLATE = kendo.template('<span class=\\'k-link k-nav-day\\'>#=kendo.format(\\'{0:m}\\', date)#</span>'), EVENT_WRAPPER_STRING = '<div role=\"gridcell\" aria-selected=\"false\" ' + 'data-#=ns#uid=\"#=uid#\"' + '#if (resources[0]) { #' + 'style=\"background-color:#=resources[0].color#; border-color: #=resources[0].color#\"' + 'class=\"k-event#=inverseColor ? \" k-event-inverse\" : \"\"#\" ' + '#} else {#' + 'class=\"k-event\"' + '#}#' + '>' + '<span class=\"k-event-actions\">' + '# if(data.tail) {#' + '<span class=\"k-icon k-i-arrow-60-left\"></span>' + '#}#' + '# if(data.isException()) {#' + '<span class=\"k-icon k-i-warning\"></span>' + '# } else if(data.isRecurring()) {#' + '<span class=\"k-icon k-i-reload\"></span>' + '# } #' + '</span>' + '{0}' + '<span class=\"k-event-actions\">' + '#if (showDelete) {#' + '<a href=\"\\\\#\" class=\"k-link k-event-delete\"><span class=\"k-icon k-i-close\"></span></a>' + '#}#' + '# if(data.head) {#' + '<span class=\"k-icon k-i-arrow-60-right\"></span>' + '#}#' + '</span>' + '#if(resizable && !data.tail){#' + '<span class=\"k-resize-handle k-resize-w\"></span>' + '#}#' + '#if(resizable && !data.head){#' + '<span class=\"k-resize-handle k-resize-e\"></span>' + '#}#' + '</div>';\n function toInvariantTime(date) {\n var staticDate = new Date(1980, 1, 1, 0, 0, 0);\n setTime(staticDate, getMilliseconds(date));\n return staticDate;\n }\n function getWorkDays(options) {\n var workDays = [];\n var dayIndex = options.workWeekStart;\n workDays.push(dayIndex);\n while (options.workWeekEnd != dayIndex) {\n if (dayIndex > 6) {\n dayIndex -= 7;\n } else {\n dayIndex++;\n }\n workDays.push(dayIndex);\n }\n return workDays;\n }\n function setColspan(columnLevel) {\n var count = 0;\n if (columnLevel.columns) {\n for (var i = 0; i < columnLevel.columns.length; i++) {\n count += setColspan(columnLevel.columns[i]);\n }\n columnLevel.colspan = count;\n return count;\n } else {\n columnLevel.colspan = 1;\n return 1;\n }\n }\n function collidingEvents(elements, left, right) {\n var idx, startPosition, overlaps, endPosition;\n for (idx = elements.length - 1; idx >= 0; idx--) {\n startPosition = elements[idx].rectLeft;\n endPosition = elements[idx].rectRight;\n overlaps = startPosition <= left && endPosition >= left;\n if (overlaps || startPosition >= left && endPosition <= right || left <= startPosition && right >= startPosition) {\n if (startPosition < left) {\n left = startPosition;\n }\n if (endPosition > right) {\n right = endPosition;\n }\n }\n }\n return eventsForSlot(elements, left, right);\n }\n function eventsForSlot(elements, left, right) {\n var events = [];\n for (var idx = 0; idx < elements.length; idx++) {\n var event = {\n rectLeft: elements[idx].rectLeft,\n rectRight: elements[idx].rectRight\n };\n if (event.rectLeft < left && event.rectRight > left || event.rectLeft >= left && event.rectRight <= right) {\n events.push(elements[idx]);\n }\n }\n return events;\n }\n var TimelineGroupedView = kendo.Class.extend({\n init: function (view) {\n this._view = view;\n },\n _getTimeSlotByPosition: function (x, y, groupIndex) {\n var group = this._view.groups[groupIndex];\n return group.timeSlotByPosition(x, y);\n },\n _hideHeaders: function () {\n var view = this._view;\n view.timesHeader.find('table tr:last').hide();\n view.datesHeader.find('table tr:last').hide();\n },\n _setColspan: function (timeColumn) {\n setColspan(timeColumn);\n },\n _createRowsLayout: function (resources, rows, groupHeaderTemplate) {\n var view = this._view;\n return view._createRowsLayout(resources, rows, groupHeaderTemplate);\n },\n _createVerticalColumnsLayout: function (resources, rows, groupHeaderTemplate, columns) {\n return columns;\n },\n _createColumnsLayout: function (resources, columns, groupHeaderTemplate) {\n var view = this._view;\n return view._createColumnsLayout(resources, columns, groupHeaderTemplate);\n },\n _getRowCount: function () {\n var view = this._view;\n return view._groupCount();\n },\n _getGroupsCount: function () {\n return 1;\n },\n _addContent: function (dates, columnCount, groupsCount, rowCount, start, end, slotTemplate, isVerticalGrouped) {\n var view = this._view;\n var html = '';\n var options = view.options;\n var appendRow = function (date) {\n var content = '';\n var classes = '';\n var tmplDate;\n var resources = function (groupIndex) {\n return function () {\n return view._resourceBySlot({ groupIndex: groupIndex });\n };\n };\n if (kendo.date.isToday(dates[idx])) {\n classes += 'k-today';\n }\n if (kendo.date.getMilliseconds(date) < kendo.date.getMilliseconds(options.workDayStart) || kendo.date.getMilliseconds(date) >= kendo.date.getMilliseconds(options.workDayEnd) || !view._isWorkDay(dates[idx])) {\n classes += ' k-nonwork-hour';\n }\n content += '<td' + (classes !== '' ? ' class=\"' + classes + '\"' : '') + '>';\n tmplDate = kendo.date.getDate(dates[idx]);\n kendo.date.setTime(tmplDate, kendo.date.getMilliseconds(date));\n content += slotTemplate({\n date: tmplDate,\n resources: resources(isVerticalGrouped ? rowIdx : groupIdx)\n });\n content += '</td>';\n return content;\n };\n for (var rowIdx = 0; rowIdx < rowCount; rowIdx++) {\n html += '<tr>';\n for (var groupIdx = 0; groupIdx < groupsCount; groupIdx++) {\n for (var idx = 0, length = columnCount; idx < length; idx++) {\n html += view._forTimeRange(start, end, appendRow);\n }\n }\n html += '</tr>';\n }\n return html;\n },\n _addTimeSlotsCollections: function (groupCount, datesCount, tableRows, interval, isVerticallyGrouped) {\n var view = this._view;\n var rowCount = tableRows.length;\n if (isVerticallyGrouped) {\n rowCount = Math.floor(rowCount / groupCount);\n }\n for (var groupIndex = 0; groupIndex < groupCount; groupIndex++) {\n var rowMultiplier = 0;\n var group = view.groups[groupIndex];\n var time;\n if (isVerticallyGrouped) {\n rowMultiplier = groupIndex;\n }\n var rowIndex = rowMultiplier * rowCount;\n var cellMultiplier = 0;\n if (!isVerticallyGrouped) {\n cellMultiplier = groupIndex;\n }\n var cells = tableRows[rowIndex].children;\n var cellsPerGroup = cells.length / (!isVerticallyGrouped ? groupCount : 1);\n var cellsPerDay = cellsPerGroup / datesCount;\n for (var dateIndex = 0; dateIndex < datesCount; dateIndex++) {\n var cellOffset = dateIndex * cellsPerDay + cellsPerGroup * cellMultiplier;\n time = getMilliseconds(new Date(+view.startTime()));\n for (var cellIndex = 0; cellIndex < cellsPerDay; cellIndex++) {\n view._addTimeSlotToCollection(group, cells, cellIndex, cellOffset, dateIndex, time, interval);\n time += interval;\n }\n }\n }\n },\n _getVerticalGroupCount: function (groupsCount) {\n return groupsCount;\n },\n _getVerticalRowCount: function (eventGroups, groupIndex, maxRowCount) {\n var view = this._view;\n return view._isVerticallyGrouped() ? eventGroups[groupIndex].maxRowCount : maxRowCount;\n },\n _renderEvent: function (eventGroup, event, adjustedEvent, group, range, container) {\n var view = this._view;\n var element;\n element = view._createEventElement(adjustedEvent.occurrence, event, range.head || adjustedEvent.head, range.tail || adjustedEvent.tail);\n element.appendTo(container).css({\n top: 0,\n height: view.options.eventHeight\n });\n var eventObject = {\n start: adjustedEvent.occurrence._startTime || adjustedEvent.occurrence.start,\n end: adjustedEvent.occurrence._endTime || adjustedEvent.occurrence.end,\n element: element,\n uid: event.uid,\n slotRange: range,\n rowIndex: 0,\n offsetTop: 0\n };\n eventGroup.events[event.uid] = eventObject;\n view.addContinuousEvent(group, range, element, event.isAllDay);\n view._arrangeRows(eventObject, range, eventGroup);\n },\n _verticalCountForLevel: function (level) {\n var view = this._view;\n return view._rowCountForLevel(level);\n },\n _horizontalCountForLevel: function (level) {\n var view = this._view;\n return view._columnCountForLevel(level);\n },\n _updateCurrentVerticalTimeMarker: function (ranges, currentTime) {\n var view = this._view;\n var elementHtml = '<div class=\\'' + CURRENT_TIME_MARKER_CLASS + '\\'></div>';\n var headerWrap = view.datesHeader.find('.' + SCHEDULER_HEADER_WRAP_CLASS);\n var left = Math.round(ranges[0].innerRect(currentTime, new Date(currentTime.getTime() + 1), false).left);\n var timesTableMarker = $(elementHtml).prependTo(headerWrap).addClass(CURRENT_TIME_MARKER_ARROW_CLASS + '-down');\n timesTableMarker.css({\n left: view._adjustLeftPosition(left - outerWidth(timesTableMarker) * BORDER_SIZE_COEFF / 2),\n top: headerWrap.find('tr:last').prev().position().top\n });\n $(elementHtml).prependTo(view.content).css({\n left: view._adjustLeftPosition(left),\n width: '1px',\n height: view.content[0].scrollHeight - 1,\n top: 0\n });\n },\n _changeGroup: function () {\n return undefined;\n },\n _prevGroupSlot: function (slot, group, isDay) {\n var view = this._view;\n if (view._isVerticallyGrouped()) {\n return slot;\n } else {\n var collection = group._collection(0, isDay);\n return collection.last();\n }\n },\n _nextGroupSlot: function (slot, group, isDay) {\n var view = this._view;\n if (view._isVerticallyGrouped()) {\n return slot;\n } else {\n var collection = group._collection(0, isDay);\n return collection.first();\n }\n },\n _verticalSlots: function (selection, reverse) {\n var view = this._view;\n return view._changeGroup(selection, reverse);\n },\n _verticalMethod: function (reverse) {\n return reverse ? 'leftSlot' : 'rightSlot';\n },\n _normalizeVerticalSelection: function () {\n return undefined;\n },\n _horizontalSlots: function (selection, group, method, startSlot, endSlot, multiple, reverse) {\n var view = this._view;\n var result = {};\n result.startSlot = group[method](startSlot);\n result.endSlot = group[method](endSlot);\n if (!multiple && view._isHorizontallyGrouped() && (!result.startSlot || !result.endSlot)) {\n result.startSlot = result.endSlot = view._changeGroup(selection, reverse);\n }\n return result;\n },\n _changeVerticalViewPeriod: function () {\n return false;\n },\n _changeHorizontalViewPeriod: function (slots, shift, selection, reverse) {\n var view = this._view;\n if ((!slots.startSlot || !slots.endSlot) && !shift && view._changeViewPeriod(selection, reverse, false)) {\n return true;\n }\n return false;\n },\n _updateDirection: function (selection, ranges, shift, reverse) {\n var view = this._view;\n view._updateDirection(selection, ranges, shift, reverse, true);\n },\n _createMoveHint: function (range, adjustedEvent) {\n var view = this._view;\n var startSlot = range.start;\n var hint = view._createEventElement(adjustedEvent.occurrence, adjustedEvent.occurrence, false, false);\n hint.addClass('k-event-drag-hint');\n var rect = range.innerRect(adjustedEvent.occurrence.start, adjustedEvent.occurrence.end, view.options.snap);\n var width = rect.right - rect.left - 2;\n if (width < 0) {\n width = 0;\n }\n var left = view._adjustLeftPosition(rect.left);\n var css = {\n left: left,\n top: startSlot.offsetTop,\n height: startSlot.offsetHeight - 2,\n width: width\n };\n hint.css(css);\n view._moveHint = view._moveHint.add(hint);\n },\n _adjustLeftPosition: function (left) {\n var view = this._view;\n if (view._isRtl) {\n left -= view.content[0].scrollWidth - view.content[0].offsetWidth;\n }\n return left;\n }\n });\n var TimelineGroupedByDateView = kendo.Class.extend({\n init: function (view) {\n this._view = view;\n },\n _getTimeSlotByPosition: function (x, y, groupIndex) {\n var group = this._view.groups[groupIndex];\n return group.timeSlotByPosition(x, y, true);\n },\n _hideHeaders: function () {\n var view = this._view;\n if (!view._isVerticallyGrouped()) {\n view.timesHeader.find('table tr').eq(2).hide();\n view.datesHeader.find('table tr').eq(2).hide();\n } else {\n view.times.find('.k-last').hide();\n }\n },\n _setColspan: function () {\n },\n _createRowsLayout: function (resources, rows, groupHeaderTemplate, columns) {\n var view = this._view;\n return view._createDateLayout(columns, null, true);\n },\n _createVerticalColumnsLayout: function (resources, rows, groupHeaderTemplate) {\n var view = this._view;\n return view._createColumnsLayout(resources, null, groupHeaderTemplate);\n },\n _createColumnsLayout: function (resources, columns, groupHeaderTemplate, subColumns) {\n var view = this._view;\n return view._createColumnsLayout(resources, columns, groupHeaderTemplate, subColumns, true);\n },\n _getRowCount: function (level) {\n var view = this._view;\n return view._rowCountForLevel(level);\n },\n _getGroupsCount: function () {\n var view = this._view;\n return view._groupCount();\n },\n _addContent: function (dates, columnCount, groupsCount, rowCount, start, end, slotTemplate, isVerticalGrouped) {\n var view = this._view;\n var html = '';\n var options = view.options;\n var appendRow = function (date, isMajorTickColumn, isMiddleColumn, isLastSlotColumn, minorTickColumns, groupIdx) {\n var content = '';\n var classes = '';\n var tmplDate;\n var workDateIndex = view._isVerticallyGrouped() ? dateIndex : idx;\n var resources = function (groupIndex) {\n return function () {\n return view._resourceBySlot({ groupIndex: groupIndex });\n };\n };\n if (kendo.date.isToday(dates[idx])) {\n classes += 'k-today';\n }\n if (kendo.date.getMilliseconds(date) < kendo.date.getMilliseconds(options.workDayStart) || kendo.date.getMilliseconds(date) >= kendo.date.getMilliseconds(options.workDayEnd) || !view._isWorkDay(dates[workDateIndex])) {\n classes += ' k-nonwork-hour';\n }\n content += '<td' + (classes !== '' ? ' class=\"' + classes + '\"' : '') + '>';\n tmplDate = kendo.date.getDate(dates[idx]);\n kendo.date.setTime(tmplDate, kendo.date.getMilliseconds(date));\n content += slotTemplate({\n date: tmplDate,\n resources: resources(groupIdx)\n });\n content += '</td>';\n return content;\n };\n var tempStart = new Date(start), minorTickCount = view.options.minorTickCount, msMajorInterval = view.options.majorTick * MS_PER_MINUTE, msInterval = msMajorInterval / minorTickCount || 1, dateIndex;\n for (var rowIdx = 0; rowIdx < rowCount; rowIdx++) {\n html += '<tr>';\n if (rowIdx % (rowCount / view._dates.length) === 0) {\n dateIndex = rowIdx / (rowCount / view._dates.length);\n tempStart = new Date(view._dates[dateIndex]);\n kendo.date.setTime(tempStart, kendo.date.getMilliseconds(start));\n }\n for (var idx = 0, length = columnCount; idx < length; idx++) {\n html += view._forTimeRange(tempStart, end, appendRow, isVerticalGrouped, groupsCount);\n if (isVerticalGrouped) {\n setTime(tempStart, msInterval, false);\n break;\n }\n }\n html += '</tr>';\n }\n return html;\n },\n _addTimeSlotsCollections: function (groupCount, datesCount, tableRows, interval, isVerticallyGrouped) {\n var view = this._view;\n var rowCount = tableRows.length;\n if (isVerticallyGrouped) {\n rowCount = rowCount / datesCount;\n }\n for (var dateIndex = 0; dateIndex < datesCount; dateIndex++) {\n var rowMultiplier = 0;\n var time;\n if (isVerticallyGrouped) {\n rowMultiplier = dateIndex;\n }\n var rowIndex = rowMultiplier * rowCount;\n var cellMultiplier = 0;\n var cells = tableRows[rowIndex].children;\n var cellsPerGroup = isVerticallyGrouped ? rowCount : cells.length / (datesCount * groupCount);\n var cellsPerDay = cells.length / datesCount;\n var cellOffset;\n time = getMilliseconds(new Date(+view.startTime()));\n for (var cellIndex = 0; cellIndex < cellsPerGroup; cellIndex++) {\n if (!isVerticallyGrouped) {\n cellOffset = dateIndex * cellsPerDay + groupCount * cellIndex;\n cellMultiplier++;\n } else {\n cellOffset = 0;\n cells = tableRows[cellIndex + cellsPerGroup * dateIndex].children;\n }\n for (var groupIndex = 0; groupIndex < groupCount; groupIndex++) {\n var group = view.groups[groupIndex];\n view._addTimeSlotToCollection(group, cells, groupIndex, cellOffset, dateIndex, time, interval);\n }\n time += interval;\n }\n }\n },\n _getVerticalGroupCount: function () {\n var view = this._view;\n return view.content.find('tr').length;\n },\n _getVerticalRowCount: function (eventGroups, groupIndex, maxRowCount) {\n return maxRowCount;\n },\n _renderEvent: function (eventGroup, event, adjustedEvent, group, range, container, startIndex, endIndex) {\n var view = this._view;\n var element;\n var eventObjects = [];\n for (var i = range.start.index; i <= range.end.index; i++) {\n element = view._createEventElement(adjustedEvent.occurrence, event, i !== endIndex, i !== startIndex);\n element.appendTo(container).css({\n top: 0,\n height: view.options.eventHeight\n });\n var currentSlot = group._timeSlotCollections[0]._slots[i];\n var dateRange = group.timeSlotRanges(currentSlot.start, currentSlot.end, false)[0];\n var eventObject = {\n start: i === startIndex ? adjustedEvent.occurrence._startTime || adjustedEvent.occurrence.start : currentSlot.start,\n end: i === endIndex ? adjustedEvent.occurrence._endTime || adjustedEvent.occurrence.end : currentSlot.end,\n element: element,\n uid: event.uid,\n slotRange: dateRange,\n rowIndex: 0,\n offsetTop: 0\n };\n eventGroup.events[event.uid] = eventObject;\n eventObjects.push(eventObject);\n view.addContinuousEvent(group, dateRange, element, event.isAllDay);\n view._arrangeRows(eventObject, dateRange, eventGroup);\n }\n eventGroup.events[event.uid] = eventObjects;\n },\n _verticalCountForLevel: function (level) {\n var view = this._view;\n return view._columnCountForLevel(level);\n },\n _horizontalCountForLevel: function (level, columnLevel) {\n var view = this._view;\n return view._columnCountForLevel(columnLevel) / view._columnCountForLevel(2);\n },\n _updateCurrentVerticalTimeMarker: function (ranges, currentTime) {\n var view = this._view;\n var firstTimesCell = view.times.find('tr:first th:first');\n var lastTimesCell = view.times.find('tr:first th:last');\n var elementHtml = '<div class=\\'' + CURRENT_TIME_MARKER_CLASS + '\\'></div>';\n var timesTableMarker = $(elementHtml).prependTo(view.times);\n var markerTopPosition = Math.round(ranges[0].innerRect(currentTime, new Date(currentTime.getTime() + 1), false).top);\n var timesTableMarkerCss = {};\n if (this._isRtl) {\n timesTableMarkerCss.right = firstTimesCell.position().left + outerHeight(firstTimesCell) - outerHeight(lastTimesCell);\n timesTableMarker.addClass(CURRENT_TIME_MARKER_ARROW_CLASS + '-left');\n } else {\n timesTableMarkerCss.left = lastTimesCell.position().left;\n timesTableMarker.addClass(CURRENT_TIME_MARKER_ARROW_CLASS + '-right');\n }\n timesTableMarkerCss.top = markerTopPosition - outerWidth(timesTableMarker) * BORDER_SIZE_COEFF / 2;\n timesTableMarker.css(timesTableMarkerCss);\n $(elementHtml).prependTo(view.content).css({\n top: markerTopPosition,\n height: '1px',\n right: '1px',\n width: view.content[0].scrollWidth,\n left: 0\n });\n },\n _changeGroup: function (selection, previous, slot) {\n var view = this._view;\n if (!slot) {\n selection.groupIndex = previous ? view.groups.length - 1 : 0;\n }\n },\n _prevGroupSlot: function (slot) {\n return slot;\n },\n _nextGroupSlot: function (slot) {\n return slot;\n },\n _changeDate: function (selection, reverse, slot) {\n var view = this._view;\n var group = view.groups[selection.groupIndex];\n var collections, index;\n if (reverse) {\n collections = group._getCollections(false);\n index = slot.index - 1;\n if (index >= 0) {\n return collections[0]._slots[index];\n }\n } else {\n collections = group._getCollections(false);\n index = slot.index + 1;\n if (collections[0] && collections[0]._slots[index]) {\n return collections[0]._slots[index];\n }\n }\n },\n _verticalSlots: function (selection, reverse, slot) {\n return this._changeDate(selection, reverse, slot);\n },\n _verticalMethod: function (reverse, multiple) {\n if (multiple) {\n return reverse ? 'upSlot' : 'downSlot';\n } else {\n return reverse ? 'leftSlot' : 'rightSlot';\n }\n },\n _normalizeVerticalSelection: function (selection, ranges, reverse, multiple) {\n var view = this._view;\n if (!multiple) {\n return view._normalizeVerticalSelection(selection, ranges, reverse);\n }\n return undefined;\n },\n _horizontalSlots: function (selection, group, method, startSlot, endSlot, multiple, reverse) {\n var view = this._view;\n var tempSlot = view._changeGroup(selection, reverse);\n var result = {};\n if (!tempSlot) {\n if (!view._isVerticallyGrouped()) {\n result.startSlot = group[method](startSlot);\n result.endSlot = group[method](endSlot);\n }\n } else {\n result.startSlot = result.endSlot = tempSlot;\n }\n return result;\n },\n _changeVerticalViewPeriod: function (slots, shift, selection, reverse) {\n var view = this._view;\n if ((!slots.startSlot || !slots.endSlot) && !shift && view._changeViewPeriod(selection, reverse, view._isVerticallyGrouped())) {\n return true;\n }\n return false;\n },\n _changeHorizontalViewPeriod: function (slots, shift, selection, reverse) {\n var view = this._view;\n if (view._isVerticallyGrouped()) {\n return false;\n }\n if ((!slots.startSlot || !slots.endSlot) && !shift && view._changeViewPeriod(selection, reverse, false)) {\n return true;\n }\n return false;\n },\n _updateDirection: function (selection, ranges, shift, reverse) {\n var view = this._view;\n view._updateDirection(selection, ranges, shift, reverse, !view._isVerticallyGrouped());\n },\n _createMoveHint: function (range, adjustedEvent) {\n var view = this._view;\n var startSlot = range.start;\n var startEnd = range.end;\n for (var slotIdx = startSlot.index; slotIdx <= startEnd.index; slotIdx++) {\n var slot = range.collection._slots[slotIdx];\n var hint = view._createEventElement(adjustedEvent.occurrence, adjustedEvent.occurrence, false, false);\n hint.addClass('k-event-drag-hint');\n var css = {\n left: slot.offsetLeft + 2,\n top: slot.offsetTop,\n height: view.options.eventHeight,\n width: slot.offsetWidth\n };\n hint.css(css);\n view._moveHint = view._moveHint.add(hint);\n }\n },\n _adjustLeftPosition: function (left) {\n var view = this._view;\n if (view._isRtl && !view._isVerticallyGrouped()) {\n left -= view.content[0].scrollWidth - view.content[0].offsetWidth;\n }\n return left;\n }\n });\n kendo.ui.scheduler.TimelineGroupedView = TimelineGroupedView;\n kendo.ui.scheduler.TimelineGroupedByDateView = TimelineGroupedByDateView;\n var TimelineView = SchedulerView.extend({\n init: function (element, options) {\n var that = this;\n SchedulerView.fn.init.call(that, element, options);\n that._groupedView = that._getGroupedView();\n that.title = that.options.title || that.options.name;\n that._workDays = getWorkDays(that.options);\n that._templates();\n that._editable();\n that.calculateDateRange();\n that._groups();\n that._currentTime(true);\n },\n name: 'timeline',\n _getGroupedView: function () {\n if (this._isGroupedByDate()) {\n return new kendo.ui.scheduler.TimelineGroupedByDateView(this);\n } else {\n return new kendo.ui.scheduler.TimelineGroupedView(this);\n }\n },\n _getNextEventIndexBySlot: function (slot, sortedEvents, groupIndex) {\n if (this._isVerticallyGrouped()) {\n return kendo.ui.SchedulerView.fn._getNextEventIndexBySlot.call(this, slot, sortedEvents, groupIndex);\n }\n var tempIndex = 0;\n for (var i = 0; i < sortedEvents.length; i++) {\n if (slot.startDate() > sortedEvents[i].start.startDate()) {\n tempIndex++;\n continue;\n }\n if (slot.startDate().getTime() === sortedEvents[i].start.startDate().getTime() && groupIndex > sortedEvents[i].start.groupIndex) {\n tempIndex++;\n continue;\n }\n break;\n }\n return tempIndex;\n },\n _getSelectedSlot: function (slot, sortedEvents, event, idx, pad, prev) {\n if (this._isVerticallyGrouped()) {\n return kendo.ui.SchedulerView.fn._getSelectedSlot.call(this, slot, sortedEvents, event, idx, pad, prev);\n }\n return slot;\n },\n _getSortedEvents: function (uniqueAllEvents) {\n if (this._isVerticallyGrouped()) {\n return kendo.ui.SchedulerView.fn._getSortedEvents.call(this, uniqueAllEvents);\n }\n return uniqueAllEvents.sort(function (first, second) {\n var result = first.start.startDate().getTime() - second.start.startDate().getTime();\n if (result === 0) {\n if (first.start.isDaySlot && !second.start.isDaySlot) {\n result = -1;\n }\n if (!first.start.isDaySlot && second.start.isDaySlot) {\n result = 1;\n }\n }\n if (result === 0) {\n result = first.start.groupIndex - second.start.groupIndex;\n }\n if (result === 0) {\n result = $(first.element).index() - $(second.element).index();\n }\n return result;\n });\n },\n _currentTimeMarkerUpdater: function () {\n this._updateCurrentTimeMarker(new Date());\n },\n _updateCurrentTimeMarker: function (currentTime) {\n var options = this.options;\n this.datesHeader.find('.' + CURRENT_TIME_MARKER_CLASS).remove();\n this.times.find('.' + CURRENT_TIME_MARKER_CLASS).remove();\n this.content.find('.' + CURRENT_TIME_MARKER_CLASS).remove();\n if (!this._isInDateSlot({\n start: currentTime,\n end: currentTime\n })) {\n return;\n }\n if (options.currentTimeMarker.useLocalTimezone === false) {\n var timezone = options.dataSource.options.schema.timezone;\n if (options.dataSource && timezone) {\n var timezoneOffset = kendo.timezone.offset(currentTime, timezone);\n currentTime = kendo.timezone.convert(currentTime, currentTime.getTimezoneOffset(), timezoneOffset);\n }\n }\n var groupsCount = !options.group || options.group.orientation == 'vertical' ? 1 : this.groups.length;\n for (var groupIndex = 0; groupIndex < groupsCount; groupIndex++) {\n var currentGroup = this.groups[groupIndex];\n if (!currentGroup) {\n return;\n }\n var utcCurrentTime = kendo.date.toUtcTime(currentTime);\n var ranges = currentGroup.timeSlotRanges(utcCurrentTime, utcCurrentTime + 1);\n if (ranges.length === 0) {\n return;\n }\n var collection = ranges[0].collection;\n var slotElement = collection.slotByStartDate(currentTime);\n if (slotElement) {\n if (this._isVerticallyGrouped()) {\n this._groupedView._updateCurrentVerticalTimeMarker(ranges, currentTime);\n } else {\n var elementHtml = '<div class=\\'' + CURRENT_TIME_MARKER_CLASS + '\\'></div>';\n var headerWrap = this.datesHeader.find('.' + SCHEDULER_HEADER_WRAP_CLASS);\n var left = Math.round(ranges[0].innerRect(currentTime, new Date(currentTime.getTime() + 1), false).left);\n var timesTableMarker = $(elementHtml).prependTo(headerWrap).addClass(CURRENT_TIME_MARKER_ARROW_CLASS + '-down');\n timesTableMarker.css({\n left: this._adjustLeftPosition(left - outerWidth(timesTableMarker) * BORDER_SIZE_COEFF / 2),\n top: headerWrap.find('tr:last').prev().position().top\n });\n $(elementHtml).prependTo(this.content).css({\n left: this._adjustLeftPosition(left),\n width: '1px',\n height: this.content[0].scrollHeight - 1,\n top: 0\n });\n }\n }\n }\n },\n _adjustLeftPosition: function (left) {\n return this._groupedView._adjustLeftPosition(left);\n },\n _currentTime: function (setUpdateTimer) {\n var that = this;\n var markerOptions = that.options.currentTimeMarker;\n if (markerOptions !== false && markerOptions.updateInterval !== undefined) {\n that._currentTimeMarkerUpdater();\n if (setUpdateTimer) {\n that._currentTimeUpdateTimer = setInterval(proxy(this._currentTimeMarkerUpdater, that), markerOptions.updateInterval);\n }\n }\n },\n _editable: function () {\n if (this.options.editable) {\n if (this._isMobile()) {\n this._touchEditable();\n } else {\n this._mouseEditable();\n }\n }\n },\n _mouseEditable: function () {\n var that = this;\n that.element.on('click' + NS, '.k-event a:has(.k-i-close)', function (e) {\n that.trigger('remove', { uid: $(this).closest('.k-event').attr(kendo.attr('uid')) });\n e.preventDefault();\n });\n if (that.options.editable.create !== false) {\n that.element.on('dblclick' + NS, '.k-scheduler-content td', function (e) {\n var slot = that._slotByPosition(e.pageX, e.pageY);\n if (slot) {\n var resourceInfo = that._resourceBySlot(slot);\n that.trigger('add', {\n eventInfo: extend({\n start: slot.startDate(),\n end: slot.endDate()\n }, resourceInfo)\n });\n }\n e.preventDefault();\n });\n }\n if (that.options.editable.update !== false) {\n that.element.on('dblclick' + NS, '.k-event', function (e) {\n that.trigger('edit', { uid: $(this).closest('.k-event').attr(kendo.attr('uid')) });\n e.preventDefault();\n });\n }\n },\n _touchEditable: function () {\n var that = this;\n var threshold = 0;\n if (kendo.support.mobileOS.android) {\n threshold = 5;\n }\n if (that.options.editable.create !== false) {\n that._addUserEvents = new kendo.UserEvents(that.element, {\n threshold: threshold,\n filter: '.k-scheduler-content td',\n tap: function (e) {\n var x = e.x.location !== undefined ? e.x.location : e.x;\n var y = e.y.location !== undefined ? e.y.location : e.y;\n var slot = that._slotByPosition(x, y);\n if (slot) {\n var resourceInfo = that._resourceBySlot(slot);\n that.trigger('add', {\n eventInfo: extend({\n start: slot.startDate(),\n end: slot.endDate()\n }, resourceInfo)\n });\n }\n e.preventDefault();\n }\n });\n }\n if (that.options.editable.update !== false) {\n that._editUserEvents = new kendo.UserEvents(that.element, {\n threshold: threshold,\n filter: '.k-event',\n tap: function (e) {\n var eventElement = $(e.target).closest('.k-event');\n if (!eventElement.hasClass('k-event-active')) {\n that.trigger('edit', { uid: eventElement.attr(kendo.attr('uid')) });\n }\n e.preventDefault();\n }\n });\n }\n },\n _slotByPosition: function (x, y) {\n var slot;\n var content = this.content;\n var offset = content.offset();\n var groupIndex;\n x -= offset.left;\n y -= offset.top;\n if (this._isRtl) {\n var browser = kendo.support.browser;\n if (browser.mozilla) {\n x += content[0].scrollWidth - content[0].offsetWidth;\n x += content[0].scrollLeft;\n } else if (browser.msie) {\n x -= content.scrollLeft();\n x += content[0].scrollWidth - content[0].offsetWidth;\n } else if (browser.webkit) {\n x += content[0].scrollLeft;\n }\n } else {\n x += content[0].scrollLeft;\n }\n y += content[0].scrollTop;\n x = Math.ceil(x);\n y = Math.ceil(y);\n for (groupIndex = 0; groupIndex < this.groups.length; groupIndex++) {\n slot = this._groupedView._getTimeSlotByPosition(x, y, groupIndex);\n if (slot) {\n return slot;\n }\n }\n return null;\n },\n options: {\n name: 'TimelineView',\n title: 'Timeline',\n selectedDateFormat: '{0:D}',\n selectedShortDateFormat: '{0:d}',\n date: kendo.date.today(),\n startTime: kendo.date.today(),\n endTime: kendo.date.today(),\n showWorkHours: false,\n minorTickCount: 2,\n editable: true,\n workDayStart: new Date(1980, 1, 1, 8, 0, 0),\n workDayEnd: new Date(1980, 1, 1, 17, 0, 0),\n workWeekStart: 1,\n workWeekEnd: 5,\n majorTick: 60,\n eventHeight: 25,\n eventMinWidth: 0,\n columnWidth: 100,\n groupHeaderTemplate: '#=text#',\n majorTimeHeaderTemplate: '#=kendo.toString(date, \\'t\\')#',\n slotTemplate: ' ',\n eventTemplate: EVENT_TEMPLATE,\n dateHeaderTemplate: DATA_HEADER_TEMPLATE,\n footer: { command: 'workDay' },\n currentTimeMarker: {\n updateInterval: 10000,\n useLocalTimezone: true\n },\n messages: {\n defaultRowText: 'All events',\n showFullDay: 'Show full day',\n showWorkDay: 'Show business hours'\n }\n },\n events: [\n 'remove',\n 'add',\n 'edit'\n ],\n _templates: function () {\n var options = this.options, settings = extend({}, kendo.Template, options.templateSettings);\n this.eventTemplate = this._eventTmpl(options.eventTemplate, EVENT_WRAPPER_STRING);\n this.majorTimeHeaderTemplate = kendo.template(options.majorTimeHeaderTemplate, settings);\n this.dateHeaderTemplate = kendo.template(options.dateHeaderTemplate, settings);\n this.slotTemplate = kendo.template(options.slotTemplate, settings);\n this.groupHeaderTemplate = kendo.template(options.groupHeaderTemplate, settings);\n },\n _render: function (dates) {\n var that = this;\n dates = dates || [];\n that._dates = dates;\n that._startDate = dates[0];\n that._endDate = dates[dates.length - 1 || 0];\n that._calculateSlotRanges();\n that.createLayout(that._layout(dates));\n that._content(dates);\n that._footer();\n that._setContentWidth();\n that.refreshLayout();\n that.datesHeader.on('click' + NS, '.k-nav-day', function (e) {\n var th = $(e.currentTarget).closest('th');\n var slot = that._slotByPosition(th.offset().left, that.content.offset().top);\n that.trigger('navigate', {\n view: 'timeline',\n date: slot.startDate()\n });\n });\n that._groupedView._hideHeaders();\n },\n _setContentWidth: function () {\n var content = this.content;\n var contentWidth = content.width();\n var contentTable = this.content.find('table');\n var columnCount = contentTable.find('tr:first').children().length;\n var minWidth = 100;\n var calculatedWidth = columnCount * this.options.columnWidth;\n if (contentWidth < calculatedWidth) {\n minWidth = Math.ceil(calculatedWidth / contentWidth * 100);\n }\n contentTable.add(this.datesHeader.find('table')).css('width', minWidth + '%');\n },\n _calculateSlotRanges: function () {\n var dates = this._dates;\n var slotStartTime = this.startTime();\n var slotEndTime = this.endTime();\n if (getMilliseconds(slotEndTime) === getMilliseconds(kendo.date.getDate(slotEndTime))) {\n slotEndTime = kendo.date.getDate(slotEndTime);\n setTime(slotEndTime, MS_PER_DAY - 1);\n }\n slotEndTime = getMilliseconds(slotEndTime);\n slotStartTime = getMilliseconds(slotStartTime);\n var slotRanges = [];\n for (var i = 0; i < dates.length; i++) {\n var rangeStart = getDate(dates[i]);\n setTime(rangeStart, slotStartTime);\n var rangeEnd = getDate(dates[i]);\n setTime(rangeEnd, slotEndTime);\n slotRanges.push({\n start: kendo.date.toUtcTime(rangeStart),\n end: kendo.date.toUtcTime(rangeEnd)\n });\n }\n this._slotRanges = slotRanges;\n },\n _forTimeRange: function (min, max, action, verticalByDate, groupsCount) {\n min = toInvariantTime(min);\n max = toInvariantTime(max);\n var that = this, msMin = getMilliseconds(min), msMax = getMilliseconds(max), minorTickCount = that.options.minorTickCount, msMajorInterval = that.options.majorTick * MS_PER_MINUTE, msInterval = msMajorInterval / minorTickCount || 1, start = new Date(+min), startDay = start.getDate(), msStart, idx = 0, length, html = '';\n length = MS_PER_DAY / msInterval;\n if (msMin != msMax) {\n if (msMin > msMax) {\n msMax += MS_PER_DAY;\n }\n length = (msMax - msMin) / msInterval;\n }\n length = verticalByDate ? 1 : Math.round(length);\n if (groupsCount) {\n length = length * groupsCount;\n }\n for (; idx < length; idx++) {\n var majorTickDivider = idx % (msMajorInterval / msInterval);\n var isMajorTickColumn = majorTickDivider === 0;\n var isMiddleColumn = majorTickDivider < minorTickCount - 1;\n var isLastSlotColumn = majorTickDivider === minorTickCount - 1;\n var minorTickColumns = minorTickCount;\n if (length % minorTickCount !== 0) {\n var isLastMajorSlot = length - (idx + 1) < minorTickCount;\n if (isMajorTickColumn && isLastMajorSlot) {\n minorTickColumns = length % minorTickCount;\n }\n }\n html += action(start, isMajorTickColumn, isMiddleColumn, isLastSlotColumn, minorTickColumns, idx % groupsCount);\n if (!verticalByDate) {\n if (groupsCount) {\n if (idx % groupsCount === groupsCount - 1) {\n setTime(start, msInterval, false);\n }\n } else {\n setTime(start, msInterval, false);\n }\n }\n }\n if (msMax) {\n msStart = getMilliseconds(start);\n if (startDay < start.getDate()) {\n msStart += MS_PER_DAY;\n }\n if (msStart > msMax) {\n start = new Date(+max);\n }\n }\n return html;\n },\n _layout: function (dates) {\n var timeColumns = [];\n var columns = [];\n var that = this;\n var rows = [{ text: that.options.messages.defaultRowText }];\n var groupedView = that._groupedView;\n var minorTickSlots = [];\n for (var minorTickIndex = 0; minorTickIndex < that.options.minorTickCount; minorTickIndex++) {\n minorTickSlots.push({\n text: '',\n className: 'k-last',\n minorTicks: true\n });\n }\n this._forTimeRange(that.startTime(), that.endTime(), function (date, majorTick, middleColumn, lastSlotColumn, minorSlotsCount) {\n var template = that.majorTimeHeaderTemplate;\n if (majorTick) {\n var timeColumn = {\n text: template({ date: date }),\n className: lastSlotColumn ? 'k-slot-cell' : '',\n columns: minorTickSlots.slice(0, minorSlotsCount)\n };\n groupedView._setColspan(timeColumn);\n timeColumns.push(timeColumn);\n }\n });\n for (var idx = 0; idx < dates.length; idx++) {\n columns.push({\n text: that.dateHeaderTemplate({ date: dates[idx] }),\n className: 'k-slot-cell',\n columns: timeColumns.slice(0)\n });\n }\n var resources = this.groupedResources;\n if (resources.length) {\n if (this._groupOrientation() === 'vertical') {\n rows = groupedView._createRowsLayout(resources, null, this.groupHeaderTemplate, columns);\n columns = groupedView._createVerticalColumnsLayout(resources, null, this.groupHeaderTemplate, columns);\n } else {\n columns = groupedView._createColumnsLayout(resources, columns, this.groupHeaderTemplate, columns);\n }\n }\n return {\n columns: columns,\n rows: rows\n };\n },\n _footer: function () {\n var options = this.options;\n if (options.footer !== false) {\n var html = '<div class=\"k-header k-scheduler-footer\">';\n var command = options.footer.command;\n if (command && command === 'workDay') {\n html += '<ul class=\"k-reset k-header\">';\n html += '<li class=\"k-state-default k-scheduler-fullday\"><a href=\"#\" class=\"k-link\"><span class=\"k-icon k-i-clock\"></span>';\n html += (options.showWorkHours ? options.messages.showFullDay : options.messages.showWorkDay) + '</a></li>';\n html += '</ul>';\n } else {\n html += ' ';\n }\n html += '</div>';\n this.footer = $(html).appendTo(this.element);\n var that = this;\n this.footer.on('click' + NS, '.k-scheduler-fullday', function (e) {\n e.preventDefault();\n that.trigger('navigate', {\n view: that.name || options.name,\n date: that.startDate(),\n isWorkDay: !options.showWorkHours\n });\n });\n }\n },\n _columnCountForLevel: function (level) {\n var columnLevel = this.columnLevels[level];\n return columnLevel ? columnLevel.length : 0;\n },\n _rowCountForLevel: function (level) {\n var rowLevel = this.rowLevels[level];\n return rowLevel ? rowLevel.length : 0;\n },\n _isWorkDay: function (date) {\n var day = date.getDay();\n var workDays = this._workDays;\n for (var i = 0; i < workDays.length; i++) {\n if (workDays[i] === day) {\n return true;\n }\n }\n return false;\n },\n _content: function (dates) {\n var that = this;\n var start = that.startTime();\n var end = this.endTime();\n var groupsCount = 1;\n var rowCount = 1;\n var columnCount = dates.length;\n var html = '';\n var resources = this.groupedResources;\n var slotTemplate = this.slotTemplate;\n var isVerticalGrouped = false;\n if (resources.length) {\n isVerticalGrouped = that._groupOrientation() === 'vertical';\n if (isVerticalGrouped) {\n rowCount = that._groupedView._getRowCount(this.rowLevels.length - 1);\n groupsCount = that._groupedView._getGroupsCount();\n } else {\n groupsCount = that._groupCount();\n }\n }\n html += '<tbody>';\n html += that._groupedView._addContent(dates, columnCount, groupsCount, rowCount, start, end, slotTemplate, isVerticalGrouped);\n html += '</tbody>';\n this.content.find('table').append(html);\n },\n _groups: function () {\n var groupCount = this._groupCount();\n var dates = this._dates;\n var columnCount = dates.length;\n this.groups = [];\n for (var idx = 0; idx < groupCount; idx++) {\n var view = this._addResourceView(idx);\n var start = dates[0];\n var end = dates[dates.length - 1 || 0];\n view.addTimeSlotCollection(start, kendo.date.addDays(end, 1));\n }\n this._timeSlotGroups(groupCount, columnCount);\n },\n _isHorizontallyGrouped: function () {\n return this.groupedResources.length && this._groupOrientation() === 'horizontal';\n },\n _timeSlotGroups: function (groupCount, datesCount) {\n var interval = this._timeSlotInterval();\n var isVerticallyGrouped = this._isVerticallyGrouped();\n var tableRows = this.content.find('tr');\n tableRows.attr('role', 'row');\n this._groupedView._addTimeSlotsCollections(groupCount, datesCount, tableRows, interval, isVerticallyGrouped);\n },\n _addTimeSlotToCollection: function (group, cells, cellIndex, cellOffset, dateIndex, time, interval) {\n var cell = cells[cellIndex + cellOffset];\n var collection = group.getTimeSlotCollection(0);\n var currentDate = this._dates[dateIndex];\n var currentTime = Date.UTC(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());\n var start = currentTime + time;\n var end = start + interval;\n cell.setAttribute('role', 'gridcell');\n cell.setAttribute('aria-selected', false);\n collection.addTimeSlot(cell, start, end, true);\n },\n startDate: function () {\n return this._startDate;\n },\n endDate: function () {\n return this._endDate;\n },\n startTime: function () {\n var options = this.options;\n return options.showWorkHours ? options.workDayStart : options.startTime;\n },\n endTime: function () {\n var options = this.options;\n return options.showWorkHours ? options.workDayEnd : options.endTime;\n },\n _timeSlotInterval: function () {\n var options = this.options;\n return options.majorTick / options.minorTickCount * MS_PER_MINUTE;\n },\n nextDate: function () {\n return kendo.date.nextDay(this.endDate());\n },\n previousDate: function () {\n return kendo.date.previousDay(this.startDate());\n },\n calculateDateRange: function () {\n this._render([this.options.date]);\n },\n render: function (events) {\n this._headerColumnCount = 0;\n this._groups();\n this.element.find('.k-event').remove();\n events = new kendo.data.Query(events).sort([\n {\n field: 'start',\n dir: 'asc'\n },\n {\n field: 'end',\n dir: 'desc'\n }\n ]).toArray();\n var eventsByResource = [];\n this._eventsByResource(events, this.groupedResources, eventsByResource);\n var eventGroups = [];\n var maxRowCount = 0;\n for (var groupIndex = 0; groupIndex < eventsByResource.length; groupIndex++) {\n var eventGroup = {\n groupIndex: groupIndex,\n maxRowCount: 0,\n events: {}\n };\n eventGroups.push(eventGroup);\n this._renderEvents(eventsByResource[groupIndex], groupIndex, eventGroup);\n if (maxRowCount < eventGroup.maxRowCount) {\n maxRowCount = eventGroup.maxRowCount;\n }\n }\n this._setRowsHeight(eventGroups, eventsByResource.length, maxRowCount);\n this._positionEvents(eventGroups, eventsByResource.length);\n this._currentTime(false);\n this.trigger('activate');\n },\n _positionEvents: function (eventGroups, groupsCount) {\n for (var groupIndex = 0; groupIndex < groupsCount; groupIndex++) {\n var eventsForGroup = eventGroups[groupIndex].events;\n for (var eventUid in eventsForGroup) {\n var eventObject = eventsForGroup[eventUid];\n if ($.isArray(eventObject)) {\n for (var eventIndex = 0; eventIndex < eventObject.length; eventIndex++) {\n this._positionEvent(eventObject[eventIndex]);\n }\n } else {\n this._positionEvent(eventObject);\n }\n }\n }\n },\n _setRowsHeight: function (eventGroups, groupsCount, maxRowCount) {\n var eventHeight = this.options.eventHeight + 2;\n var eventBottomOffset = this._getBottomRowOffset();\n var groupedView = this._groupedView;\n var verticalGroupCount = groupedView._getVerticalGroupCount(groupsCount);\n groupsCount = this._isVerticallyGrouped() ? verticalGroupCount : 1;\n for (var groupIndex = 0; groupIndex < groupsCount; groupIndex++) {\n var rowsCount = groupedView._getVerticalRowCount(eventGroups, groupIndex, maxRowCount);\n rowsCount = rowsCount ? rowsCount : 1;\n var rowHeight = (eventHeight + 2) * rowsCount + eventBottomOffset;\n var timesRow = $(this.times.find('tr')[groupIndex]);\n var row = $(this.content.find('tr')[groupIndex]);\n timesRow.height(rowHeight);\n row.height(rowHeight);\n }\n this._setContentWidth();\n this.refreshLayout();\n this._refreshSlots();\n },\n _getBottomRowOffset: function () {\n var eventBottomOffset = this.options.eventHeight * 0.5;\n var isMobile = this._isMobile();\n var minOffset;\n var maxOffset;\n if (isMobile) {\n minOffset = 30;\n maxOffset = 60;\n } else {\n minOffset = 15;\n maxOffset = 30;\n }\n if (eventBottomOffset > maxOffset) {\n eventBottomOffset = maxOffset;\n } else if (eventBottomOffset < minOffset) {\n eventBottomOffset = minOffset;\n }\n return eventBottomOffset;\n },\n _positionEvent: function (eventObject) {\n var eventHeight = this.options.eventHeight + 2;\n var rect = eventObject.slotRange.innerRect(eventObject.start, eventObject.end, false);\n var left = this._adjustLeftPosition(rect.left);\n var width = rect.right - rect.left - 2;\n if (width < 0) {\n width = 0;\n }\n if (width < this.options.eventMinWidth) {\n var slotsCollection = eventObject.slotRange.collection;\n var lastSlot = slotsCollection._slots[slotsCollection._slots.length - 1];\n var offsetRight = lastSlot.offsetLeft + lastSlot.offsetWidth;\n width = this.options.eventMinWidth;\n if (offsetRight < left + width) {\n width = offsetRight - rect.left - 2;\n }\n }\n eventObject.element.css({\n top: eventObject.slotRange.start.offsetTop + eventObject.rowIndex * (eventHeight + 2) + 'px',\n left: left,\n width: width\n });\n },\n _refreshSlots: function () {\n for (var groupIndex = 0; groupIndex < this.groups.length; groupIndex++) {\n this.groups[groupIndex].refresh();\n }\n },\n _eventsByResource: function (events, resources, result) {\n var resource = resources[0];\n if (resource) {\n var view = resource.dataSource.view();\n for (var itemIdx = 0; itemIdx < view.length; itemIdx++) {\n var value = this._resourceValue(resource, view[itemIdx]);\n var eventsFilteredByResource = new kendo.data.Query(events).filter({\n field: resource.field,\n operator: SchedulerView.groupEqFilter(value)\n }).toArray();\n if (resources.length > 1) {\n this._eventsByResource(eventsFilteredByResource, resources.slice(1), result);\n } else {\n result.push(eventsFilteredByResource);\n }\n }\n } else {\n result.push(events);\n }\n },\n _isInDateSlot: function (event) {\n var startTime = event.start;\n var endTime = event.end;\n var rangeStart = getDate(this._startDate);\n var rangeEnd = kendo.date.addDays(getDate(this._endDate), 1);\n if (startTime < rangeEnd && rangeStart <= endTime) {\n return true;\n }\n return false;\n },\n _isInTimeSlot: function (event) {\n var startTime = event._startTime || kendo.date.toUtcTime(event.start);\n var endTime = event._endTime || kendo.date.toUtcTime(event.end);\n var slotRanges = this._slotRanges;\n if (startTime === endTime) {\n endTime = endTime + 1;\n }\n for (var slotIndex = 0; slotIndex < slotRanges.length; slotIndex++) {\n if (startTime < slotRanges[slotIndex].end && slotRanges[slotIndex].start < endTime) {\n return true;\n }\n }\n return false;\n },\n _adjustEvent: function (event) {\n var start = event.start;\n var end = event.end;\n var eventStartTime = event._time('start');\n var eventEndTime = event._time('end');\n var startTime = getMilliseconds(this.startTime());\n var endTime = getMilliseconds(this.endTime());\n var adjustedStartDate = null;\n var adjustedEndDate = null;\n var occurrence;\n var head = false;\n var tail = false;\n if (event.isAllDay) {\n adjustedStartDate = getDate(start);\n if (startTime > eventStartTime) {\n setTime(adjustedStartDate, startTime);\n tail = true;\n }\n adjustedEndDate = getDate(end);\n if (endTime === getMilliseconds(getDate(this.endTime()))) {\n adjustedEndDate = kendo.date.addDays(adjustedEndDate, 1);\n } else {\n setTime(adjustedEndDate, endTime);\n head = true;\n }\n } else {\n endTime = endTime === 0 ? MS_PER_DAY : endTime;\n if (startTime > eventStartTime) {\n adjustedStartDate = getDate(start);\n setTime(adjustedStartDate, startTime);\n tail = true;\n } else if (endTime < eventStartTime) {\n adjustedStartDate = getDate(start);\n adjustedStartDate = kendo.date.addDays(adjustedStartDate, 1);\n setTime(adjustedStartDate, startTime);\n tail = true;\n }\n if (endTime < eventEndTime) {\n adjustedEndDate = getDate(end);\n setTime(adjustedEndDate, endTime);\n head = true;\n } else if (startTime > eventEndTime) {\n adjustedEndDate = getDate(end);\n adjustedEndDate = kendo.date.addDays(adjustedEndDate, -1);\n setTime(adjustedEndDate, endTime);\n head = true;\n }\n }\n occurrence = event.clone({\n start: adjustedStartDate ? adjustedStartDate : start,\n end: adjustedEndDate ? adjustedEndDate : end,\n _startTime: adjustedStartDate ? kendo.date.toUtcTime(adjustedStartDate) : event._startTime,\n _endTime: adjustedEndDate ? kendo.date.toUtcTime(adjustedEndDate) : event._endTime,\n isAllDay: false\n });\n return {\n occurrence: occurrence,\n head: head,\n tail: tail\n };\n },\n _renderEvents: function (events, groupIndex, eventGroup) {\n var event;\n var idx;\n var length;\n for (idx = 0, length = events.length; idx < length; idx++) {\n event = events[idx];\n if (this._isInDateSlot(event)) {\n var isMultiDayEvent = event.isAllDay || event.end.getTime() - event.start.getTime() >= MS_PER_DAY;\n var container = this.content;\n if (isMultiDayEvent || this._isInTimeSlot(event)) {\n var adjustedEvent = this._adjustEvent(event);\n var group = this.groups[groupIndex];\n if (!group._continuousEvents) {\n group._continuousEvents = [];\n }\n var ranges = group.slotRanges(adjustedEvent.occurrence, false);\n var range = ranges[0];\n var startIndex = range.start.index;\n var endIndex = range.end.index;\n if (this._isInTimeSlot(adjustedEvent.occurrence)) {\n this._groupedView._renderEvent(eventGroup, event, adjustedEvent, group, range, container, startIndex, endIndex);\n }\n }\n }\n }\n },\n addContinuousEvent: function (group, range, element, isAllDay) {\n var events = group._continuousEvents;\n events.push({\n element: element,\n isAllDay: isAllDay,\n uid: element.attr(kendo.attr('uid')),\n start: range.start,\n end: range.end\n });\n },\n _createEventElement: function (occurrence, event, head, tail) {\n var template = this.eventTemplate;\n var editable = this.options.editable;\n var isMobile = this._isMobile();\n var showDelete = editable && editable.destroy !== false && !isMobile;\n var resizable = editable && editable.resize !== false;\n var eventStartTime = event._time('start');\n var eventEndTime = event._time('end');\n var eventStartDate = event.start;\n var eventEndDate = event.end;\n var resources = this.eventResources(event);\n if (event._startTime && eventStartTime !== kendo.date.getMilliseconds(event.start)) {\n eventStartDate = new Date(eventStartTime);\n eventStartDate = kendo.timezone.apply(eventStartDate, 'Etc/UTC');\n }\n if (event._endTime && eventEndTime !== kendo.date.getMilliseconds(event.end)) {\n eventEndDate = new Date(eventEndTime);\n eventEndDate = kendo.timezone.apply(eventEndDate, 'Etc/UTC');\n }\n var data = extend({}, {\n ns: kendo.ns,\n resizable: resizable,\n showDelete: showDelete,\n head: head,\n tail: tail,\n singleDay: this._dates.length == 1,\n resources: resources,\n inverseColor: resources && resources[0] ? this._shouldInverseResourceColor(resources[0]) : false\n }, event, {\n start: eventStartDate,\n end: eventEndDate\n });\n var element = $(template(data));\n this.angular('compile', function () {\n return {\n elements: element,\n data: [{ dataItem: data }]\n };\n });\n return element;\n },\n _arrangeRows: function (eventObject, slotRange, eventGroup) {\n var startIndex = slotRange.start.index;\n var endIndex = slotRange.end.index;\n var rect = eventObject.slotRange.innerRect(eventObject.start, eventObject.end, false);\n var rectRight = rect.right + this.options.eventMinWidth;\n var events = collidingEvents(slotRange.events(), rect.left, rectRight);\n slotRange.addEvent({\n slotIndex: startIndex,\n start: startIndex,\n end: endIndex,\n rectLeft: rect.left,\n rectRight: rectRight,\n element: eventObject.element,\n uid: eventObject.uid\n });\n events.push({\n start: startIndex,\n end: endIndex,\n uid: eventObject.uid\n });\n var rows = SchedulerView.createRows(events);\n if (eventGroup.maxRowCount < rows.length) {\n eventGroup.maxRowCount = rows.length;\n }\n for (var idx = 0, length = rows.length; idx < length; idx++) {\n var rowEvents = rows[idx].events;\n for (var j = 0, eventLength = rowEvents.length; j < eventLength; j++) {\n eventGroup.events[rowEvents[j].uid].rowIndex = idx;\n }\n }\n },\n _groupCount: function () {\n var resources = this.groupedResources;\n var groupedView = this._groupedView;\n if (resources.length) {\n if (this._groupOrientation() === 'vertical') {\n return groupedView._verticalCountForLevel(resources.length - 1);\n } else {\n return groupedView._horizontalCountForLevel(resources.length - 1, this.columnLevels.length - 1);\n }\n }\n return 1;\n },\n _updateEventForSelection: function (event) {\n var adjustedEvent = this._adjustEvent(event.clone());\n return adjustedEvent.occurrence;\n },\n _eventOptionsForMove: function (event) {\n if (event.isAllDay) {\n return { isAllDay: false };\n }\n return {};\n },\n _updateEventForResize: function (event) {\n if (event.isAllDay) {\n event.set('isAllDay', false);\n }\n },\n _updateMoveHint: function (event, groupIndex, distance) {\n var group = this.groups[groupIndex];\n var clonedEvent = event.clone({\n start: event.start,\n end: event.end\n });\n var eventDuraton = clonedEvent.duration();\n clonedEvent.start = new Date(clonedEvent.start.getTime() + distance);\n clonedEvent.end = new Date(+clonedEvent.start + eventDuraton);\n var adjustedEvent = this._adjustEvent(clonedEvent);\n var ranges = group.slotRanges(adjustedEvent.occurrence, false);\n this._removeMoveHint();\n for (var rangeIndex = 0; rangeIndex < ranges.length; rangeIndex++) {\n this._groupedView._createMoveHint(ranges[rangeIndex], adjustedEvent);\n }\n var content = this.content;\n this._moveHint.appendTo(content);\n },\n _updateResizeHint: function (event, groupIndex, startTime, endTime) {\n var group = this.groups[groupIndex];\n var ranges = group.ranges(startTime, endTime, false, false);\n this._removeResizeHint();\n for (var rangeIndex = 0; rangeIndex < ranges.length; rangeIndex++) {\n var range = ranges[rangeIndex];\n var start = range.startSlot();\n var startRect = range.innerRect(startTime, endTime, false);\n startRect.top = start.offsetTop;\n var width = startRect.right - startRect.left;\n var height = range.endSlot().offsetTop + start.offsetHeight - startRect.top;\n var left = this._adjustLeftPosition(startRect.left);\n var hint = SchedulerView.fn._createResizeHint.call(this, left, startRect.top, width, height);\n this._resizeHint = this._resizeHint.add(hint);\n }\n var format = 't';\n var container = this.content;\n this._resizeHint.appendTo(container);\n this._resizeHint.find('.k-label-top,.k-label-bottom').text('');\n this._resizeHint.first().addClass('k-first').find('.k-label-top').text(kendo.toString(kendo.timezone.toLocalDate(startTime), format));\n this._resizeHint.last().addClass('k-last').find('.k-label-bottom').text(kendo.toString(kendo.timezone.toLocalDate(endTime), format));\n },\n selectionByElement: function (cell) {\n var offset = cell.offset();\n return this._slotByPosition(offset.left, offset.top);\n },\n _updateDirection: function (selection, ranges, multiple, reverse, vertical) {\n var startSlot = ranges[0].start;\n var endSlot = ranges[ranges.length - 1].end;\n if (multiple && !vertical) {\n if (startSlot.index === endSlot.index && startSlot.collectionIndex === endSlot.collectionIndex) {\n selection.backward = reverse;\n }\n }\n },\n _changeGroup: function (selection, previous) {\n var method = previous ? 'prevGroupSlot' : 'nextGroupSlot';\n var slot = this[method](selection.start, selection.groupIndex, false);\n if (slot) {\n selection.groupIndex += previous ? -1 : 1;\n }\n this._groupedView._changeGroup(selection, previous, slot);\n return slot;\n },\n prevGroupSlot: function (date, groupIndex, isDay) {\n var group = this.groups[groupIndex];\n var slot = group.ranges(date, date, isDay, false)[0].start;\n if (groupIndex <= 0) {\n return;\n }\n return this._groupedView._prevGroupSlot(slot, group, isDay);\n },\n nextGroupSlot: function (date, groupIndex, isDay) {\n var group = this.groups[groupIndex];\n var slot = group.ranges(date, date, isDay, false)[0].start;\n if (groupIndex >= this.groups.length - 1) {\n return;\n }\n return this._groupedView._nextGroupSlot(slot, group, isDay);\n },\n _verticalSlots: function (selection, ranges, multiple, reverse) {\n var groupedView = this._groupedView;\n var method = groupedView._verticalMethod(reverse, multiple);\n var startSlot = ranges[0].start;\n var endSlot = ranges[ranges.length - 1].end;\n var group = this.groups[selection.groupIndex];\n var slot = groupedView._normalizeVerticalSelection(selection, ranges, reverse, multiple);\n if (slot) {\n startSlot = endSlot = slot;\n }\n startSlot = group[method](startSlot);\n endSlot = group[method](endSlot);\n if (!multiple && this._isVerticallyGrouped() && (!startSlot || !endSlot)) {\n startSlot = endSlot = groupedView._verticalSlots(selection, reverse, slot);\n }\n return {\n startSlot: startSlot,\n endSlot: endSlot\n };\n },\n _horizontalSlots: function (selection, ranges, multiple, reverse) {\n var method = reverse ? 'upSlot' : 'downSlot';\n var startSlot = ranges[0].start;\n var endSlot = ranges[ranges.length - 1].end;\n var group = this.groups[selection.groupIndex];\n var result = {};\n if (!multiple) {\n result = this._groupedView._horizontalSlots(selection, group, method, startSlot, endSlot, multiple, reverse);\n } else {\n result.startSlot = group[method](startSlot);\n result.endSlot = group[method](endSlot);\n if (!multiple && this._isHorizontallyGrouped() && (!startSlot || !endSlot)) {\n result.startSlot = result.endSlot = this._changeGroup(selection, reverse);\n }\n }\n return result;\n },\n _changeViewPeriod: function (selection, reverse) {\n var date = reverse ? this.previousDate() : this.nextDate();\n var start = selection.start;\n var end = selection.end;\n selection.start = new Date(date);\n selection.end = new Date(date);\n if (this._isHorizontallyGrouped()) {\n selection.groupIndex = reverse ? this.groups.length - 1 : 0;\n }\n var duration = end - start;\n if (reverse) {\n end = getMilliseconds(this.endTime());\n end = end === 0 ? MS_PER_DAY : end;\n setTime(selection.start, end - duration);\n setTime(selection.end, end);\n } else {\n start = getMilliseconds(this.startTime());\n setTime(selection.start, start);\n setTime(selection.end, start + duration);\n }\n selection.events = [];\n return true;\n },\n move: function (selection, key, shift) {\n var handled = false;\n var group = this.groups[selection.groupIndex];\n var keys = kendo.keys;\n var groupedView = this._groupedView;\n var ranges = group.ranges(selection.start, selection.end, false, false);\n var startSlot, endSlot, reverse, slots;\n if (key === keys.DOWN || key === keys.UP) {\n handled = true;\n reverse = key === keys.UP;\n groupedView._updateDirection(selection, ranges, shift, reverse);\n slots = this._verticalSlots(selection, ranges, shift, reverse);\n if (groupedView._changeVerticalViewPeriod(slots, shift, selection, reverse)) {\n return handled;\n }\n } else if (key === keys.LEFT || key === keys.RIGHT) {\n handled = true;\n reverse = key === keys.LEFT;\n this._updateDirection(selection, ranges, shift, reverse, false);\n slots = this._horizontalSlots(selection, ranges, shift, reverse);\n if (groupedView._changeHorizontalViewPeriod(slots, shift, selection, reverse)) {\n return handled;\n }\n }\n if (handled) {\n startSlot = slots.startSlot;\n endSlot = slots.endSlot;\n if (shift) {\n var backward = selection.backward;\n if (backward && startSlot) {\n selection.start = startSlot.startDate();\n } else if (!backward && endSlot) {\n selection.end = endSlot.endDate();\n }\n } else if (startSlot && endSlot) {\n selection.start = startSlot.startDate();\n selection.end = endSlot.endDate();\n }\n selection.events = [];\n }\n return handled;\n },\n destroy: function () {\n var that = this;\n if (that.element) {\n that.element.off(NS);\n }\n if (that.footer) {\n that.footer.remove();\n }\n if (that._currentTimeUpdateTimer) {\n clearInterval(that._currentTimeUpdateTimer);\n }\n SchedulerView.fn.destroy.call(this);\n if (this._isMobile() && that.options.editable) {\n if (that.options.editable.create !== false) {\n that._addUserEvents.destroy();\n }\n if (that.options.editable.update !== false) {\n that._editUserEvents.destroy();\n }\n }\n }\n });\n extend(true, ui, {\n TimelineView: TimelineView,\n TimelineWeekView: TimelineView.extend({\n options: {\n name: 'TimelineWeekView',\n title: 'Timeline Week',\n selectedDateFormat: '{0:D} - {1:D}',\n selectedShortDateFormat: '{0:d} - {1:d}',\n majorTick: 120\n },\n name: 'timelineWeek',\n calculateDateRange: function () {\n var selectedDate = this.options.date, start = kendo.date.dayOfWeek(selectedDate, this.calendarInfo().firstDay, -1), idx, length, dates = [];\n for (idx = 0, length = 7; idx < length; idx++) {\n dates.push(start);\n start = kendo.date.nextDay(start);\n }\n this._render(dates);\n }\n }),\n TimelineWorkWeekView: TimelineView.extend({\n options: {\n name: 'TimelineWorkWeekView',\n title: 'Timeline Work Week',\n selectedDateFormat: '{0:D} - {1:D}',\n selectedShortDateFormat: '{0:d} - {1:d}',\n majorTick: 120\n },\n name: 'timelineWorkWeek',\n nextDate: function () {\n var weekStart = kendo.date.dayOfWeek(kendo.date.nextDay(this.endDate()), this.calendarInfo().firstDay, 1);\n return kendo.date.addDays(weekStart, this._workDays[0]);\n },\n previousDate: function () {\n var weekStart = kendo.date.dayOfWeek(this.startDate(), this.calendarInfo().firstDay, -1);\n var workDays = this._workDays;\n return kendo.date.addDays(weekStart, workDays[workDays.length - 1] - 7);\n },\n calculateDateRange: function () {\n var selectedDate = this.options.date, start = kendo.date.dayOfWeek(selectedDate, this.options.workWeekStart, -1), end = kendo.date.dayOfWeek(start, this.options.workWeekEnd, 1), dates = [];\n while (start <= end) {\n dates.push(start);\n start = kendo.date.nextDay(start);\n }\n this._render(dates);\n }\n }),\n TimelineMonthView: TimelineView.extend({\n options: {\n name: 'TimelineMonthView',\n title: 'Timeline Month',\n selectedDateFormat: '{0:D} - {1:D}',\n selectedShortDateFormat: '{0:d} - {1:d}',\n workDayStart: new Date(1980, 1, 1, 0, 0, 0),\n workDayEnd: new Date(1980, 1, 1, 23, 59, 59),\n footer: false,\n majorTick: 1440,\n minorTickCount: 1\n },\n name: 'timelineMonth',\n calculateDateRange: function () {\n var selectedDate = this.options.date, start = kendo.date.firstDayOfMonth(selectedDate), end = kendo.date.lastDayOfMonth(selectedDate), idx, length, dates = [];\n for (idx = 0, length = end.getDate(); idx < length; idx++) {\n dates.push(start);\n start = kendo.date.nextDay(start);\n }\n this._render(dates);\n }\n })\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.scheduler', [\n 'kendo.dropdownlist',\n 'kendo.editable',\n 'kendo.multiselect',\n 'kendo.window',\n 'kendo.datetimepicker',\n 'kendo.scheduler.recurrence',\n 'kendo.scheduler.view',\n 'kendo.scheduler.dayview',\n 'kendo.scheduler.agendaview',\n 'kendo.scheduler.monthview',\n 'kendo.scheduler.timelineview',\n 'kendo.mobile.actionsheet',\n 'kendo.mobile.pane',\n 'kendo.pdf'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'scheduler',\n name: 'Scheduler',\n category: 'web',\n description: 'The Scheduler is an event calendar.',\n depends: [\n 'dropdownlist',\n 'editable',\n 'multiselect',\n 'window',\n 'datepicker',\n 'datetimepicker',\n 'scheduler.recurrence',\n 'scheduler.view'\n ],\n features: [\n {\n id: 'scheduler-dayview',\n name: 'Scheduler Day View',\n description: 'Scheduler Day View',\n depends: ['scheduler.dayview']\n },\n {\n id: 'scheduler-agendaview',\n name: 'Scheduler Agenda View',\n description: 'Scheduler Agenda View',\n depends: ['scheduler.agendaview']\n },\n {\n id: 'scheduler-monthview',\n name: 'Scheduler Month View',\n description: 'Scheduler Month View',\n depends: ['scheduler.monthview']\n },\n {\n id: 'scheduler-timelineview',\n name: 'Scheduler Timeline View',\n description: 'Scheduler Timeline View',\n depends: ['scheduler.timelineview']\n },\n {\n id: 'scheduler-mobile',\n name: 'Scheduler adaptive rendering',\n description: 'Support for adaptive rendering',\n depends: [\n 'mobile.actionsheet',\n 'mobile.pane'\n ]\n },\n {\n id: 'scheduler-pdf-export',\n name: 'PDF export',\n description: 'Export the scheduler events as PDF',\n depends: [\n 'pdf',\n 'drawing'\n ]\n },\n {\n id: 'scheduler-timezones',\n name: 'Timezones',\n description: 'Allow selecting timezones different than Etc/UTC',\n depends: ['timezones']\n }\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, date = kendo.date, input_support = kendo.support.input, MS_PER_DAY = date.MS_PER_DAY, getDate = date.getDate, getMilliseconds = kendo.date.getMilliseconds, recurrence = kendo.recurrence, keys = kendo.keys, ui = kendo.ui, Widget = ui.Widget, DataBoundWidget = ui.DataBoundWidget, STRING = 'string', Popup = ui.Popup, Calendar = ui.Calendar, DataSource = kendo.data.DataSource, isPlainObject = $.isPlainObject, extend = $.extend, proxy = $.proxy, toString = Object.prototype.toString, isArray = $.isArray, NS = '.kendoScheduler', CLICK = 'click', CHANGE = 'change', CANCEL = 'cancel', REMOVE = 'remove', SAVE = 'save', ADD = 'add', EDIT = 'edit', valueStartEndBoundRegex = /(?:value:start|value:end)(?:,|$)/, TODAY = getDate(new Date()), EXCEPTION_SEPARATOR = ',', OLD_EXCEPTION_SEPARATOR_REGEXP = /\\;/g, RECURRENCE_EXCEPTION = 'recurrenceException', DELETECONFIRM = 'Are you sure you want to delete this event?', DELETERECURRING = 'Do you want to delete only this event occurrence or the whole series?', EDITRECURRING = 'Do you want to edit only this event occurrence or the whole series?', DELETERECURRINGCONFIRM = 'Are you sure you want to delete this event occurrence?', DELETESERIESCONFIRM = 'Are you sure you want to delete the whole series?', COMMANDBUTTONTMPL = '<a class=\"k-button #=className#\" #=attr# href=\"\\\\#\">#=text#</a>', VIEWBUTTONTEMPLATE = kendo.template('<li class=\"k-current-view\" data-#=ns#name=\"#=view#\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\">${views[view].title}</a></li>'), TOOLBARTEMPLATE = kendo.template('<div class=\"k-floatwrap k-header k-scheduler-toolbar\">' + '# if (pdf) { #' + '<ul class=\"k-reset k-scheduler-tools\">' + '<li><a role=\"button\" href=\"\\\\#\" class=\"k-button k-pdf\"><span class=\"k-icon k-i-file-pdf\"></span>${messages.pdf}</a></li>' + '</ul>' + '# } #' + '<ul class=\"k-reset k-scheduler-navigation\">' + '<li class=\"k-state-default k-header k-nav-today\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\">${messages.today}</a></li>' + '<li class=\"k-state-default k-header k-nav-prev\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\"><span class=\"k-icon k-i-arrow-60-left\"></span></a></li>' + '<li class=\"k-state-default k-header k-nav-next\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\"><span class=\"k-icon k-i-arrow-60-right\"></span></a></li>' + '<li class=\"k-state-default k-nav-current\">' + '<a role=\"button\" href=\"\\\\#\" class=\"k-link\">' + '<span class=\"k-icon k-i-calendar\"></span>' + '<span class=\"k-sm-date-format\" data-#=ns#bind=\"text: formattedShortDate\"></span>' + '<span class=\"k-lg-date-format\" data-#=ns#bind=\"text: formattedDate\"></span>' + '</a>' + '</li>' + '</ul>' + '#if(viewsCount === 1){#' + '<a role=\"button\" data-#=ns#name=\"#=view#\" href=\"\\\\#\" class=\"k-link k-scheduler-refresh\">' + '<span class=\"k-icon k-i-reload\"></span>' + '</a>' + '#}else{#' + '<ul class=\"k-reset k-header k-scheduler-views\">' + '#for(var view in views){#' + '<li class=\"k-state-default k-view-#= view.toLowerCase() #\" data-#=ns#name=\"#=view#\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\">${views[view].title}</a></li>' + '#}#' + '</ul>' + '#}#' + '</div>'), MOBILETOOLBARTEMPLATE = kendo.template('<div class=\"k-floatwrap k-header k-scheduler-toolbar\">' + '<ul class=\"k-reset k-header k-scheduler-navigation\">' + '<li class=\"k-state-default k-nav-today\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\">${messages.today}</a></li>' + '</ul>' + '#if(viewsCount === 1){#' + '<a role=\"button\" data-#=ns#name=\"#=view#\" href=\"\\\\#\" class=\"k-link k-scheduler-refresh\">' + '<span class=\"k-icon k-i-reload\"></span>' + '</a>' + '#}else{#' + '<ul class=\"k-reset k-header k-scheduler-views\">' + '#for(var view in views){#' + '<li class=\"k-state-default k-view-#= view.toLowerCase() #\" data-#=ns#name=\"#=view#\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\">${views[view].title}</a></li>' + '#}#' + '</ul>' + '#}#' + '</div>' + '<div class=\"k-floatwrap k-header k-scheduler-toolbar\">' + '<ul class=\"k-reset k-header k-scheduler-navigation\">' + '<li class=\"k-state-default k-nav-prev\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\"><span class=\"k-icon k-i-arrow-60-left\"></span></a></li>' + '<li class=\"k-state-default k-nav-current\">' + '<span class=\"k-sm-date-format\" data-#=ns#bind=\"text: formattedShortDate\"></span>' + '<span class=\"k-lg-date-format\" data-#=ns#bind=\"text: formattedDate\"></span>' + '</li>' + '<li class=\"k-state-default k-nav-next\"><a role=\"button\" href=\"\\\\#\" class=\"k-link\"><span class=\"k-icon k-i-arrow-60-right\"></span></a></li>' + '</ul>' + '</div>'), MOBILEDATERANGEEDITOR = function (container, options) {\n var attr = { name: options.field };\n var datepicker_role = !input_support.date ? kendo.attr('role') + '=\"datepicker\" ' : '';\n var datetimepicker_role = kendo.attr('role') + '=\"datetimepicker\" ';\n var isAllDay = options.model.isAllDay;\n var dateTimeValidate = kendo.attr('validate') + '=\\'' + !isAllDay + '\\'';\n var dateValidate = kendo.attr('validate') + '=\\'' + isAllDay + '\\'';\n appendTimezoneAttr(attr, options);\n appendDateCompareValidator(attr, options);\n $('<input type=\"datetime-local\" required ' + kendo.attr('type') + '=\"date\" ' + datetimepicker_role + kendo.attr('bind') + '=\"value:' + options.field + ',invisible:isAllDay\" ' + dateTimeValidate + '/>').attr(attr).appendTo(container);\n $('<input type=\"date\" required ' + kendo.attr('type') + '=\"date\" ' + datepicker_role + kendo.attr('bind') + '=\"value:' + options.field + ',visible:isAllDay\" ' + dateValidate + '/>').attr(attr).appendTo(container);\n $('<span ' + kendo.attr('for') + '=\"' + options.field + '\" class=\"k-invalid-msg\"/>').hide().appendTo(container);\n }, DATERANGEEDITOR = function (container, options) {\n var attr = { name: options.field }, isAllDay = options.model.isAllDay, dateTimeValidate = kendo.attr('validate') + '=\\'' + !isAllDay + '\\' ', dateValidate = kendo.attr('validate') + '=\\'' + isAllDay + '\\' ';\n appendTimezoneAttr(attr, options);\n appendDateCompareValidator(attr, options);\n $('<input type=\"text\" required ' + kendo.attr('type') + '=\"date\"' + ' ' + kendo.attr('role') + '=\"datetimepicker\" ' + kendo.attr('bind') + '=\"value:' + options.field + ',invisible:isAllDay\" ' + dateTimeValidate + '/>').attr(attr).appendTo(container);\n $('<input type=\"text\" required ' + kendo.attr('type') + '=\"date\"' + ' ' + kendo.attr('role') + '=\"datepicker\" ' + kendo.attr('bind') + '=\"value:' + options.field + ',visible:isAllDay\" ' + dateValidate + '/>').attr(attr).appendTo(container);\n $('<span ' + kendo.attr('bind') + '=\"text: ' + options.field + 'Timezone\"></span>').appendTo(container);\n if (options.field === 'end') {\n $('<span ' + kendo.attr('bind') + '=\"text: startTimezone, invisible: endTimezone\"></span>').appendTo(container);\n }\n $('<span ' + kendo.attr('for') + '=\"' + options.field + '\" class=\"k-invalid-msg\"/>').hide().appendTo(container);\n }, RECURRENCEEDITOR = function (container, options) {\n $('<div ' + kendo.attr('bind') + '=\"value:' + options.field + '\" />').attr({ name: options.field }).appendTo(container).kendoRecurrenceEditor({\n start: options.model.start,\n timezone: options.timezone,\n messages: options.messages\n });\n }, MOBILERECURRENCEEDITOR = function (container, options) {\n $('<div ' + kendo.attr('bind') + '=\"value:' + options.field + '\" />').attr({ name: options.field }).appendTo(container).kendoMobileRecurrenceEditor({\n start: options.model.start,\n timezone: options.timezone,\n messages: options.messages,\n pane: options.pane,\n value: options.model[options.field]\n });\n }, MOBILETIMEZONEPOPUP = function (container, options) {\n var text = timezoneButtonText(options.model, options.messages.noTimezone);\n $('<a href=\"#\" class=\"k-button k-timezone-button\" data-bind=\"invisible:isAllDay\">' + text + '</a>').click(options.click).appendTo(container);\n }, TIMEZONEPOPUP = function (container, options) {\n $('<a href=\"#\" class=\"k-button\" data-bind=\"invisible:isAllDay\">' + options.messages.timezoneEditorButton + '</a>').click(options.click).appendTo(container);\n }, MOBILETIMEZONEEDITOR = function (container, options) {\n $('<div ' + kendo.attr('bind') + '=\"value:' + options.field + '\" />').attr({ name: options.field }).toggle(options.visible).appendTo(container).kendoMobileTimezoneEditor({ optionLabel: options.noTimezone });\n }, TIMEZONEEDITOR = function (container, options) {\n var visible = options.visible || options.visible === undefined;\n $('<div ' + kendo.attr('bind') + '=\"value:' + options.field + '\" />').attr({ name: options.field }).toggle(visible).appendTo(container).kendoTimezoneEditor({ optionLabel: options.noTimezone });\n };\n function timezoneButtonText(model, message) {\n message = message || '';\n if (model.startTimezone) {\n message = model.startTimezone;\n if (model.endTimezone) {\n message += ' | ' + model.endTimezone;\n }\n }\n return message;\n }\n function appendTimezoneAttr(attrs, options) {\n var timezone = options.timezone;\n if (timezone) {\n attrs[kendo.attr('timezone')] = timezone;\n }\n }\n function appendDateCompareValidator(attrs, options) {\n var validationRules = options.model.fields[options.field].validation;\n if (validationRules) {\n var dateCompareRule = validationRules.dateCompare;\n if (dateCompareRule && isPlainObject(dateCompareRule) && dateCompareRule.message) {\n attrs[kendo.attr('dateCompare-msg')] = dateCompareRule.message;\n }\n }\n }\n function wrapDataAccess(originalFunction, timezone) {\n return function (data) {\n data = originalFunction(data);\n convertData(data, 'apply', timezone);\n return data || [];\n };\n }\n function wrapDataSerialization(originalFunction, timezone) {\n return function (data) {\n if (data) {\n if (toString.call(data) !== '[object Array]' && !(data instanceof kendo.data.ObservableArray)) {\n data = [data];\n }\n }\n convertData(data, 'remove', timezone, true);\n data = originalFunction(data);\n return data || [];\n };\n }\n function convertData(data, method, timezone, removeUid) {\n var event, idx, length;\n data = data || [];\n for (idx = 0, length = data.length; idx < length; idx++) {\n event = data[idx];\n if (removeUid) {\n if (event.startTimezone || event.endTimezone) {\n if (timezone) {\n event.start = kendo.timezone.convert(event.start, event.startTimezone || event.endTimezone, timezone);\n event.end = kendo.timezone.convert(event.end, event.endTimezone || event.startTimezone, timezone);\n event.start = kendo.timezone[method](event.start, timezone);\n event.end = kendo.timezone[method](event.end, timezone);\n } else {\n event.start = kendo.timezone[method](event.start, event.startTimezone || event.endTimezone);\n event.end = kendo.timezone[method](event.end, event.endTimezone || event.startTimezone);\n }\n } else if (timezone) {\n event.start = kendo.timezone[method](event.start, timezone);\n event.end = kendo.timezone[method](event.end, timezone);\n }\n } else {\n if (event.startTimezone || event.endTimezone) {\n event.start = kendo.timezone[method](event.start, event.startTimezone || event.endTimezone);\n event.end = kendo.timezone[method](event.end, event.endTimezone || event.startTimezone);\n if (timezone) {\n event.start = kendo.timezone.convert(event.start, event.startTimezone || event.endTimezone, timezone);\n event.end = kendo.timezone.convert(event.end, event.endTimezone || event.startTimezone, timezone);\n }\n } else if (timezone) {\n event.start = kendo.timezone[method](event.start, timezone);\n event.end = kendo.timezone[method](event.end, timezone);\n }\n }\n if (removeUid) {\n delete event.uid;\n }\n }\n return data;\n }\n function getOccurrenceByUid(data, uid) {\n var length = data.length, idx = 0, event;\n for (; idx < length; idx++) {\n event = data[idx];\n if (event.uid === uid) {\n return event;\n }\n }\n }\n var SchedulerDataReader = kendo.Class.extend({\n init: function (schema, reader) {\n var timezone = schema.timezone;\n this.reader = reader;\n if (reader.model) {\n this.model = reader.model;\n }\n this.timezone = timezone;\n this.data = wrapDataAccess($.proxy(this.data, this), timezone);\n this.serialize = wrapDataSerialization($.proxy(this.serialize, this), timezone);\n },\n errors: function (data) {\n return this.reader.errors(data);\n },\n parse: function (data) {\n return this.reader.parse(data);\n },\n data: function (data) {\n return this.reader.data(data);\n },\n total: function (data) {\n return this.reader.total(data);\n },\n groups: function (data) {\n return this.reader.groups(data);\n },\n aggregates: function (data) {\n return this.reader.aggregates(data);\n },\n serialize: function (data) {\n return this.reader.serialize(data);\n }\n });\n function applyZone(date, fromZone, toZone) {\n if (toZone) {\n date = kendo.timezone.convert(date, fromZone, toZone);\n } else {\n date = kendo.timezone.remove(date, fromZone);\n }\n return date;\n }\n function dateCompareValidator(input) {\n if (input.filter('[name=end]').length) {\n var container = input.closest('.k-scheduler-edit-form');\n var startInput = container.find('[name=start]:visible');\n var endInput = container.find('[name=end]:visible');\n if (endInput[0] && startInput[0]) {\n var start, end;\n var startPicker = kendo.widgetInstance(startInput, kendo.ui);\n var endPicker = kendo.widgetInstance(endInput, kendo.ui);\n var editable = container.data('kendoEditable');\n var model = editable ? editable.options.model : null;\n if (startPicker && endPicker) {\n start = startPicker.value();\n end = endPicker.value();\n } else {\n start = kendo.parseDate(startInput.val());\n end = kendo.parseDate(endInput.val());\n }\n if (start && end) {\n if (model) {\n var timezone = startInput.attr(kendo.attr('timezone'));\n var startTimezone = model.startTimezone;\n var endTimezone = model.endTimezone;\n startTimezone = startTimezone || endTimezone;\n endTimezone = endTimezone || startTimezone;\n if (startTimezone) {\n start = applyZone(start, startTimezone, timezone);\n end = applyZone(end, endTimezone, timezone);\n }\n }\n return start <= end;\n }\n }\n }\n return true;\n }\n var SchedulerEvent = kendo.data.Model.define({\n init: function (value) {\n var that = this;\n kendo.data.Model.fn.init.call(that, value);\n that._defaultId = that.defaults[that.idField];\n },\n _time: function (field) {\n var date = this[field];\n var fieldTime = '_' + field + 'Time';\n if (this[fieldTime]) {\n return this[fieldTime] - kendo.date.toUtcTime(kendo.date.getDate(date));\n }\n return getMilliseconds(date);\n },\n _date: function (field) {\n var fieldTime = '_' + field + 'Time';\n if (this[fieldTime]) {\n return this[fieldTime] - this._time(field);\n }\n return kendo.date.getDate(this[field]);\n },\n clone: function (options, updateUid) {\n var uid = this.uid, event = new this.constructor($.extend({}, this.toJSON(), options));\n if (!updateUid) {\n event.uid = uid;\n }\n return event;\n },\n duration: function () {\n var end = this.end;\n var start = this.start;\n var offset = (end.getTimezoneOffset() - start.getTimezoneOffset()) * kendo.date.MS_PER_MINUTE;\n return end - start - offset;\n },\n expand: function (start, end, zone) {\n return recurrence ? recurrence.expand(this, start, end, zone) : [this];\n },\n update: function (eventInfo) {\n for (var field in eventInfo) {\n this.set(field, eventInfo[field]);\n }\n if (this._startTime) {\n this.set('_startTime', kendo.date.toUtcTime(this.start));\n }\n if (this._endTime) {\n this.set('_endTime', kendo.date.toUtcTime(this.end));\n }\n },\n isMultiDay: function () {\n return this.isAllDay || this.duration() >= kendo.date.MS_PER_DAY;\n },\n isException: function () {\n return !this.isNew() && this.recurrenceId;\n },\n isOccurrence: function () {\n return this.isNew() && this.recurrenceId;\n },\n isRecurring: function () {\n return !!(this.recurrenceRule || this.recurrenceId);\n },\n isRecurrenceHead: function () {\n return !!(this.id && this.recurrenceRule);\n },\n toOccurrence: function (options) {\n options = $.extend(options, {\n recurrenceException: null,\n recurrenceRule: null,\n recurrenceId: this.id || this.recurrenceId\n });\n options[this.idField] = this.defaults[this.idField];\n return this.clone(options, true);\n },\n toJSON: function () {\n var obj = kendo.data.Model.fn.toJSON.call(this);\n obj.uid = this.uid;\n delete obj._startTime;\n delete obj._endTime;\n return obj;\n },\n shouldSerialize: function (field) {\n return kendo.data.Model.fn.shouldSerialize.call(this, field) && field !== '_defaultId';\n },\n set: function (key, value) {\n var isAllDay = this.isAllDay || false;\n kendo.data.Model.fn.set.call(this, key, value);\n if (key == 'isAllDay' && value != isAllDay) {\n var start = kendo.date.getDate(this.start);\n var end = new Date(this.end);\n var milliseconds = kendo.date.getMilliseconds(end);\n if (milliseconds === 0 && value) {\n milliseconds = MS_PER_DAY;\n }\n this.set('start', start);\n if (value === true) {\n kendo.date.setTime(end, -milliseconds);\n if (end < start) {\n end = start;\n }\n } else {\n kendo.date.setTime(end, MS_PER_DAY - milliseconds);\n }\n this.set('end', end);\n }\n },\n id: 'id',\n fields: {\n id: { type: 'number' },\n title: {\n defaultValue: '',\n type: 'string'\n },\n start: {\n type: 'date',\n validation: { required: true }\n },\n startTimezone: { type: 'string' },\n end: {\n type: 'date',\n validation: {\n required: true,\n dateCompare: { value: dateCompareValidator }\n }\n },\n endTimezone: { type: 'string' },\n recurrenceRule: {\n defaultValue: '',\n type: 'string'\n },\n recurrenceException: {\n defaultValue: '',\n type: 'string'\n },\n isAllDay: {\n type: 'boolean',\n defaultValue: false\n },\n description: { type: 'string' }\n }\n });\n var SchedulerDataSource = DataSource.extend({\n init: function (options) {\n DataSource.fn.init.call(this, extend(true, {}, {\n schema: {\n modelBase: SchedulerEvent,\n model: SchedulerEvent\n }\n }, options));\n this.reader = new SchedulerDataReader(this.options.schema, this.reader);\n },\n expand: function (start, end) {\n var data = this.view(), filter = {};\n if (start && end) {\n end = new Date(end.getTime() + MS_PER_DAY - 1);\n filter = {\n logic: 'or',\n filters: [\n {\n logic: 'and',\n filters: [\n {\n field: 'start',\n operator: 'gte',\n value: start\n },\n {\n field: 'end',\n operator: 'gte',\n value: start\n },\n {\n field: 'start',\n operator: 'lte',\n value: end\n }\n ]\n },\n {\n logic: 'and',\n filters: [\n {\n field: 'start',\n operator: 'lte',\n value: new Date(start.getTime() + MS_PER_DAY - 1)\n },\n {\n field: 'end',\n operator: 'gte',\n value: start\n }\n ]\n }\n ]\n };\n data = new kendo.data.Query(expandAll(data, start, end, this.reader.timezone)).filter(filter).toArray();\n }\n return data;\n },\n cancelChanges: function (model) {\n if (model && model.isOccurrence()) {\n this._removeExceptionDate(model);\n }\n DataSource.fn.cancelChanges.call(this, model);\n },\n insert: function (index, model) {\n if (!model) {\n return;\n }\n if (!(model instanceof SchedulerEvent)) {\n var eventInfo = model;\n model = this._createNewModel();\n model.accept(eventInfo);\n }\n if (!this._pushCreated && model.isRecurrenceHead() || model.recurrenceId) {\n model = model.recurrenceId ? model : model.toOccurrence();\n this._addExceptionDate(model);\n }\n return DataSource.fn.insert.call(this, index, model);\n },\n pushCreate: function (items) {\n this._pushCreated = true;\n DataSource.fn.pushCreate.call(this, items);\n this._pushCreated = false;\n },\n remove: function (model) {\n if (model.isRecurrenceHead()) {\n this._removeExceptions(model);\n } else if (model.isRecurring()) {\n this._addExceptionDate(model);\n }\n return DataSource.fn.remove.call(this, model);\n },\n _removeExceptions: function (model) {\n var data = this.data().slice(0), item = data.shift(), id = model.id;\n while (item) {\n if (item.recurrenceId === id) {\n DataSource.fn.remove.call(this, item);\n }\n item = data.shift();\n }\n model.set(RECURRENCE_EXCEPTION, '');\n },\n _removeExceptionDate: function (model) {\n if (model.recurrenceId) {\n var head = this.get(model.recurrenceId);\n if (head) {\n var start = model.start;\n var replaceRegExp = new RegExp('(\\\\' + EXCEPTION_SEPARATOR + '?)' + recurrence.toExceptionString(start, this.reader.timezone));\n var recurrenceException = (head.recurrenceException || '').replace(OLD_EXCEPTION_SEPARATOR_REGEXP, EXCEPTION_SEPARATOR).replace(/\\,$/, '');\n head.set(RECURRENCE_EXCEPTION, recurrenceException.replace(replaceRegExp, ''));\n }\n }\n },\n _addExceptionDate: function (model) {\n var start = model.start;\n var zone = this.reader.timezone;\n var head = this.get(model.recurrenceId);\n var recurrenceException = (head.recurrenceException || '').replace(OLD_EXCEPTION_SEPARATOR_REGEXP, EXCEPTION_SEPARATOR).replace(/\\,$/, '');\n if (!recurrence.isException(recurrenceException, start, zone)) {\n var newException = recurrence.toExceptionString(start, zone);\n head.set(RECURRENCE_EXCEPTION, recurrenceException + (recurrenceException && newException ? EXCEPTION_SEPARATOR : '') + newException);\n }\n }\n });\n function expandAll(events, start, end, zone) {\n var length = events.length, data = [], idx = 0;\n for (; idx < length; idx++) {\n data = data.concat(events[idx].expand(start, end, zone));\n }\n return data;\n }\n SchedulerDataSource.create = function (options) {\n if (isArray(options) || options instanceof kendo.data.ObservableArray) {\n options = { data: options };\n }\n var dataSource = options || {}, data = dataSource.data;\n dataSource.data = data;\n if (!(dataSource instanceof SchedulerDataSource) && dataSource instanceof kendo.data.DataSource) {\n throw new Error('Incorrect DataSource type. Only SchedulerDataSource instances are supported');\n }\n return dataSource instanceof SchedulerDataSource ? dataSource : new SchedulerDataSource(dataSource);\n };\n extend(true, kendo.data, {\n SchedulerDataSource: SchedulerDataSource,\n SchedulerDataReader: SchedulerDataReader,\n SchedulerEvent: SchedulerEvent\n });\n var defaultCommands = {\n update: {\n text: 'Save',\n className: 'k-primary k-scheduler-update'\n },\n canceledit: {\n text: 'Cancel',\n className: 'k-scheduler-cancel'\n },\n destroy: {\n text: 'Delete',\n imageClass: 'k-i-close',\n className: 'k-primary k-scheduler-delete',\n iconClass: 'k-icon'\n }\n };\n function trimOptions(options) {\n delete options.name;\n delete options.prefix;\n delete options.remove;\n delete options.edit;\n delete options.add;\n delete options.navigate;\n return options;\n }\n function createValidationAttributes(model, field) {\n var modelField = (model.fields || model)[field];\n var specialRules = [\n 'url',\n 'email',\n 'number',\n 'date',\n 'boolean'\n ];\n var validation = modelField ? modelField.validation : {};\n var datatype = kendo.attr('type');\n var inArray = $.inArray;\n var ruleName;\n var rule;\n var attr = {};\n for (ruleName in validation) {\n rule = validation[ruleName];\n if (inArray(ruleName, specialRules) >= 0) {\n attr[datatype] = ruleName;\n } else if (!kendo.isFunction(rule)) {\n attr[ruleName] = isPlainObject(rule) ? rule.value || ruleName : rule;\n }\n attr[kendo.attr(ruleName + '-msg')] = rule.message;\n }\n return attr;\n }\n function dropDownResourceEditor(resource, model) {\n var attr = createValidationAttributes(model, resource.field);\n return function (container) {\n $(kendo.format('<select data-{0}bind=\"value:{1}\">', kendo.ns, resource.field)).appendTo(container).attr(attr).kendoDropDownList({\n dataTextField: resource.dataTextField,\n dataValueField: resource.dataValueField,\n dataSource: resource.dataSource,\n valuePrimitive: resource.valuePrimitive,\n optionLabel: 'None',\n template: kendo.format('<span class=\"k-scheduler-mark\" style=\"background-color:#= data.{0}?{0}:\"none\" #\"></span>#={1}#', resource.dataColorField, resource.dataTextField)\n });\n };\n }\n function descriptionEditor(options) {\n var attr = createValidationAttributes(options.model, options.field);\n return function (container) {\n $('<textarea name=\"description\" class=\"k-textbox\"/>').attr(attr).appendTo(container);\n };\n }\n function multiSelectResourceEditor(resource, model) {\n var attr = createValidationAttributes(model, resource.field);\n return function (container) {\n $(kendo.format('<select data-{0}bind=\"value:{1}\">', kendo.ns, resource.field)).appendTo(container).attr(attr).kendoMultiSelect({\n dataTextField: resource.dataTextField,\n dataValueField: resource.dataValueField,\n dataSource: resource.dataSource,\n valuePrimitive: resource.valuePrimitive,\n itemTemplate: kendo.format('<span class=\"k-scheduler-mark\" style=\"background-color:#= data.{0}?{0}:\"none\" #\"></span>#={1}#', resource.dataColorField, resource.dataTextField),\n tagTemplate: kendo.format('<span class=\"k-scheduler-mark\" style=\"background-color:#= data.{0}?{0}:\"none\" #\"></span>#={1}#', resource.dataColorField, resource.dataTextField)\n });\n };\n }\n function multiSelectResourceEditorMobile(resource, model) {\n var attr = createValidationAttributes(model, resource.field);\n return function (container) {\n var options = '';\n var view = resource.dataSource.view();\n for (var idx = 0, length = view.length; idx < length; idx++) {\n options += kendo.format('<option value=\"{0}\">{1}</option>', kendo.getter(resource.dataValueField)(view[idx]), kendo.getter(resource.dataTextField)(view[idx]));\n }\n $(kendo.format('<select data-{0}bind=\"value:{1}\" multiple=\"multiple\" data-{0}value-primitive=\"{3}\">{2}</select>', kendo.ns, resource.field, options, resource.valuePrimitive)).appendTo(container).attr(attr);\n };\n }\n function moveEventRange(event, distance) {\n var duration = event.end.getTime() - event.start.getTime();\n var start = new Date(event.start.getTime());\n kendo.date.setTime(start, distance);\n var end = new Date(start.getTime());\n kendo.date.setTime(end, duration, true);\n return {\n start: start,\n end: end\n };\n }\n var editors = {\n mobile: {\n dateRange: MOBILEDATERANGEEDITOR,\n timezonePopUp: MOBILETIMEZONEPOPUP,\n timezone: MOBILETIMEZONEEDITOR,\n recurrence: MOBILERECURRENCEEDITOR,\n description: descriptionEditor,\n multipleResources: multiSelectResourceEditorMobile,\n resources: dropDownResourceEditor\n },\n desktop: {\n dateRange: DATERANGEEDITOR,\n timezonePopUp: TIMEZONEPOPUP,\n timezone: TIMEZONEEDITOR,\n recurrence: RECURRENCEEDITOR,\n description: descriptionEditor,\n multipleResources: multiSelectResourceEditor,\n resources: dropDownResourceEditor\n }\n };\n var Editor = kendo.Observable.extend({\n init: function (element, options) {\n kendo.Observable.fn.init.call(this);\n this.element = element;\n this.options = extend(true, {}, this.options, options);\n this.createButton = this.options.createButton;\n this.toggleDateValidationHandler = proxy(this._toggleDateValidation, this);\n },\n _toggleDateValidation: function (e) {\n if (e.field == 'isAllDay') {\n var container = this.container, isAllDay = this.editable.options.model.isAllDay, bindAttribute = kendo.attr('bind'), element, isDateTimeInput, shouldValidate;\n container.find('[' + bindAttribute + '*=end],[' + bindAttribute + '*=start]').each(function () {\n element = $(this);\n if (valueStartEndBoundRegex.test(element.attr(bindAttribute))) {\n isDateTimeInput = element.is('[' + kendo.attr('role') + '=datetimepicker],[type*=datetime]');\n shouldValidate = isAllDay !== isDateTimeInput;\n element.attr(kendo.attr('validate'), shouldValidate);\n }\n });\n }\n },\n fields: function (editors, model) {\n var that = this;\n var messages = that.options.messages;\n var timezone = that.options.timezone;\n var click = function (e) {\n e.preventDefault();\n that._initTimezoneEditor(model, this);\n };\n var fields = [\n {\n field: 'title',\n title: messages.editor.title\n },\n {\n field: 'start',\n title: messages.editor.start,\n editor: editors.dateRange,\n timezone: timezone\n },\n {\n field: 'end',\n title: messages.editor.end,\n editor: editors.dateRange,\n timezone: timezone\n },\n {\n field: 'isAllDay',\n title: messages.editor.allDayEvent\n }\n ];\n if (kendo.timezone.windows_zones) {\n fields.push({\n field: 'timezone',\n title: messages.editor.timezone,\n editor: editors.timezonePopUp,\n click: click,\n messages: messages.editor,\n model: model\n });\n fields.push({\n field: 'startTimezone',\n title: messages.editor.startTimezone,\n editor: editors.timezone,\n noTimezone: messages.editor.noTimezone\n });\n fields.push({\n field: 'endTimezone',\n title: messages.editor.endTimezone,\n editor: editors.timezone,\n noTimezone: messages.editor.noTimezone\n });\n }\n if (!model.recurrenceId) {\n fields.push({\n field: 'recurrenceRule',\n title: messages.editor.repeat,\n editor: editors.recurrence,\n timezone: timezone,\n messages: messages.recurrenceEditor,\n pane: this.pane\n });\n }\n if ('description' in model) {\n fields.push({\n field: 'description',\n title: messages.editor.description,\n editor: editors.description({\n model: model,\n field: 'description'\n })\n });\n }\n for (var resourceIndex = 0; resourceIndex < this.options.resources.length; resourceIndex++) {\n var resource = this.options.resources[resourceIndex];\n fields.push({\n field: resource.field,\n title: resource.title,\n editor: resource.multiple ? editors.multipleResources(resource, model) : editors.resources(resource, model)\n });\n }\n return fields;\n },\n end: function () {\n return this.editable.end();\n },\n _buildEditTemplate: function (model, fields, editableFields) {\n var messages = this.options.messages;\n var settings = extend({}, kendo.Template, this.options.templateSettings);\n var paramName = settings.paramName;\n var template = this.options.editable.template;\n var html = '';\n if (template) {\n if (typeof template === STRING) {\n template = window.unescape(template);\n }\n html += kendo.template(template, settings)(model);\n } else {\n for (var idx = 0, length = fields.length; idx < length; idx++) {\n var field = fields[idx];\n if (field.field === 'startTimezone') {\n html += '<div class=\"k-popup-edit-form k-scheduler-edit-form k-scheduler-timezones\" style=\"display:none\">';\n html += '<div class=\"k-edit-form-container\">';\n html += '<div class=\"k-edit-label\"></div>';\n html += '<div class=\"k-edit-field\"><label class=\"k-check\"><input class=\"k-timezone-toggle\" type=\"checkbox\" />' + messages.editor.separateTimezones + '</label></div>';\n }\n html += '<div class=\"k-edit-label\"><label for=\"' + field.field + '\">' + (field.title || field.field || '') + '</label></div>';\n if (!model.editable || model.editable(field.field)) {\n editableFields.push(field);\n html += '<div ' + kendo.attr('container-for') + '=\"' + field.field + '\" class=\"k-edit-field\"></div>';\n } else {\n var tmpl = '#:';\n if (field.field) {\n field = kendo.expr(field.field, paramName);\n tmpl += field + '==null?\\'\\':' + field;\n } else {\n tmpl += '\\'\\'';\n }\n tmpl += '#';\n tmpl = kendo.template(tmpl, settings);\n html += '<div class=\"k-edit-field\">' + tmpl(model) + '</div>';\n }\n if (field.field === 'endTimezone') {\n html += this._createEndTimezoneButton();\n }\n }\n }\n return html;\n },\n _createEndTimezoneButton: function () {\n return '</div></div>';\n },\n _revertTimezones: function (model) {\n model.set('startTimezone', this._startTimezone);\n model.set('endTimezone', this._endTimezone);\n delete this._startTimezone;\n delete this._endTimezone;\n }\n });\n var MobileEditor = Editor.extend({\n init: function () {\n Editor.fn.init.apply(this, arguments);\n this.pane = kendo.mobile.ui.Pane.wrap(this.element);\n this.pane.element.parent().css('height', this.options.height);\n this.view = this.pane.view();\n this._actionSheetButtonTemplate = kendo.template('<li><a #=attr# class=\"k-button #=className#\" href=\"\\\\#\">#:text#</a></li>');\n this._actionSheetPopupOptions = $(document.documentElement).hasClass('km-root') ? { modal: false } : {\n align: 'bottom center',\n position: 'bottom center',\n effect: 'slideIn:up'\n };\n },\n options: {\n animations: {\n left: 'slide',\n right: 'slide:right'\n }\n },\n destroy: function () {\n this.close();\n this.unbind();\n this.pane.destroy();\n },\n _initTimezoneEditor: function (model) {\n var that = this;\n var pane = that.pane;\n var messages = that.options.messages;\n var timezoneView = that.timezoneView;\n var container = that.container.find('.k-scheduler-timezones');\n var checkbox = container.find('.k-timezone-toggle');\n var endTimezoneRow = container.find('.k-edit-label:last').add(container.find('.k-edit-field:last'));\n var startTimezoneChange = function (e) {\n if (e.field === 'startTimezone') {\n var value = model.startTimezone;\n checkbox.prop('disabled', !value);\n if (!value) {\n endTimezoneRow.hide();\n model.set('endTimezone', '');\n checkbox.prop('checked', false);\n }\n }\n };\n that._startTimezone = model.startTimezone || '';\n that._endTimezone = model.endTimezone || '';\n if (!timezoneView) {\n var html = '<div data-role=\"view\" class=\"k-popup-edit-form k-scheduler-edit-form k-mobile-list\">' + '<div data-role=\"header\" class=\"k-header\"><a href=\"#\" class=\"k-button k-scheduler-cancel\">' + messages.cancel + '</a>' + messages.editor.timezoneTitle + '<a href=\"#\" class=\"k-button k-scheduler-update\">' + messages.save + '</a></div></div>';\n this.timezoneView = timezoneView = pane.append(html);\n timezoneView.contentElement().append(container.show());\n timezoneView.element.on(CLICK + NS, '.k-scheduler-cancel, .k-scheduler-update', function (e) {\n e.preventDefault();\n e.stopPropagation();\n if ($(this).hasClass('k-scheduler-cancel')) {\n that._revertTimezones(model);\n }\n model.unbind('change', startTimezoneChange);\n var editView = pane.element.find('#edit').data('kendoMobileView');\n var text = timezoneButtonText(model, messages.editor.noTimezone);\n editView.contentElement().find('.k-timezone-button').text(text);\n pane.navigate(editView, that.options.animations.right);\n });\n checkbox.click(function () {\n endTimezoneRow.toggle(checkbox.prop('checked'));\n model.set('endTimezone', '');\n });\n model.bind('change', startTimezoneChange);\n }\n checkbox.prop('checked', model.endTimezone).prop('disabled', !model.startTimezone);\n if (model.endTimezone) {\n endTimezoneRow.show();\n } else {\n endTimezoneRow.hide();\n }\n pane.navigate(timezoneView, that.options.animations.left);\n },\n _createActionSheetButton: function (options) {\n options.template = this._actionSheetButtonTemplate;\n return this.createButton(options);\n },\n showDialog: function (options) {\n var type = '';\n var html = '<ul><li class=\"km-actionsheet-title\">' + options.title + '</li>';\n var target = this.element.find('.k-event[' + kendo.attr('uid') + '=\\'' + options.model.uid + '\\']');\n if (this.container) {\n target = this.container.find('.k-scheduler-delete');\n if (target[0]) {\n type = 'phone';\n }\n }\n for (var buttonIndex = 0; buttonIndex < options.buttons.length; buttonIndex++) {\n html += this._createActionSheetButton(options.buttons[buttonIndex]);\n }\n html += '</ul>';\n var actionSheet = $(html).appendTo(this.pane.view().element).kendoMobileActionSheet({\n type: type,\n cancel: this.options.messages.cancel,\n cancelTemplate: '<li class=\"km-actionsheet-cancel\"><a class=\"k-button\" href=\"\\\\#\">#:cancel#</a></li>',\n close: function () {\n this.destroy();\n },\n command: function (e) {\n var buttonIndex = actionSheet.element.find('li:not(.km-actionsheet-cancel) > .k-button').index($(e.currentTarget));\n if (buttonIndex > -1) {\n actionSheet.close();\n options.buttons[buttonIndex].click();\n }\n },\n popup: this._actionSheetPopupOptions\n }).data('kendoMobileActionSheet');\n actionSheet.open(target);\n },\n editEvent: function (model) {\n var pane = this.pane;\n var html = '';\n var messages = this.options.messages;\n var updateText = messages.save;\n var removeText = messages.destroy;\n var cancelText = messages.cancel;\n var titleText = messages.editor.editorTitle;\n html += '<div data-role=\"view\" class=\"k-popup-edit-form k-scheduler-edit-form k-mobile-list\" id=\"edit\" ' + kendo.attr('uid') + '=\"' + model.uid + '\">' + '<div data-role=\"header\" class=\"k-header\"><a href=\"#\" class=\"k-button k-scheduler-cancel\">' + cancelText + '</a>' + titleText + '<a href=\"#\" class=\"k-button k-scheduler-update\">' + updateText + '</a></div>';\n var fields = this.fields(editors.mobile, model);\n var that = this;\n var editableFields = [];\n html += this._buildEditTemplate(model, fields, editableFields);\n if (!model.isNew() && this.options.editable && this.options.editable.destroy !== false) {\n html += '<div class=\"k-edit-buttons\"><a href=\"#\" class=\"k-scheduler-delete k-button\">' + removeText + '</a></div>';\n }\n html += '</div>';\n var view = pane.append(html);\n var container = this.container = view.element;\n this.editable = container.kendoEditable({\n fields: editableFields,\n model: model,\n clearContainer: false,\n target: that.options.target,\n validateOnBlur: true\n }).data('kendoEditable');\n container.find('input[type=checkbox],input[type=radio]').parent('.k-edit-field').addClass('k-check').prev('.k-edit-label').addClass('k-check').click(function () {\n $(this).next().children('input').click();\n });\n if (!this.trigger('edit', {\n container: container,\n model: model\n })) {\n container.on(CLICK + NS, 'a.k-scheduler-edit, a.k-scheduler-cancel, a.k-scheduler-update, a.k-scheduler-delete', function (e) {\n e.preventDefault();\n e.stopPropagation();\n var button = $(this);\n if (!button.hasClass('k-scheduler-edit')) {\n var name = 'cancel';\n if (button.hasClass('k-scheduler-update')) {\n name = 'save';\n } else if (button.hasClass('k-scheduler-delete')) {\n name = 'remove';\n }\n that.trigger(name, {\n container: container,\n model: model\n });\n } else {\n pane.navigate('#edit', that.options.animations.right);\n }\n });\n pane.navigate(view, that.options.animations.left);\n model.bind('change', that.toggleDateValidationHandler);\n } else {\n this.trigger('cancel', {\n container: container,\n model: model\n });\n }\n return this.editable;\n },\n _views: function () {\n return this.pane.element.find(kendo.roleSelector('view')).not(this.view.element);\n },\n close: function () {\n if (this.container) {\n this.pane.navigate('', this.options.animations.right);\n var views = this._views();\n var view;\n for (var idx = 0, length = views.length; idx < length; idx++) {\n view = views.eq(idx).data('kendoMobileView');\n if (view) {\n view.purge();\n }\n }\n views.remove();\n this.container = null;\n if (this.editable) {\n this.editable.options.model.unbind('change', this.toggleDateValidationHandler);\n this.editable.destroy();\n this.editable = null;\n }\n this.timezoneView = null;\n }\n }\n });\n var PopupEditor = Editor.extend({\n destroy: function () {\n this.close();\n this.unbind();\n },\n editEvent: function (model) {\n var that = this;\n var editable = that.options.editable;\n var html = '<div ' + kendo.attr('uid') + '=\"' + model.uid + '\" class=\"k-popup-edit-form k-scheduler-edit-form\"><div class=\"k-edit-form-container\">';\n var messages = that.options.messages;\n var updateText = messages.save;\n var cancelText = messages.cancel;\n var deleteText = messages.destroy;\n var fields = this.fields(editors.desktop, model);\n var editableFields = [];\n html += this._buildEditTemplate(model, fields, editableFields);\n var attr;\n var options = isPlainObject(editable) ? editable.window : {};\n html += '<div class=\"k-edit-buttons k-state-default\">';\n html += this.createButton({\n name: 'update',\n text: updateText,\n attr: attr\n }) + this.createButton({\n name: 'canceledit',\n text: cancelText,\n attr: attr\n });\n if (!model.isNew() && editable.destroy !== false) {\n html += this.createButton({\n name: 'delete',\n text: deleteText,\n attr: attr\n });\n }\n html += '</div></div></div>';\n var container = this.container = $(html).appendTo(that.element).eq(0).kendoWindow(extend({\n modal: true,\n resizable: false,\n draggable: true,\n title: messages.editor.editorTitle,\n visible: false,\n close: function (e) {\n if (e.userTriggered) {\n if (that.trigger(CANCEL, {\n container: container,\n model: model\n })) {\n e.preventDefault();\n }\n }\n }\n }, options));\n that.editable = container.kendoEditable({\n fields: editableFields,\n model: model,\n clearContainer: false,\n validateOnBlur: true,\n target: that.options.target\n }).data('kendoEditable');\n if (!that.trigger(EDIT, {\n container: container,\n model: model\n })) {\n container.data('kendoWindow').center().open();\n container.on(CLICK + NS, 'a.k-scheduler-cancel', function (e) {\n e.preventDefault();\n e.stopPropagation();\n that.trigger(CANCEL, {\n container: container,\n model: model\n });\n });\n container.on(CLICK + NS, 'a.k-scheduler-update', function (e) {\n e.preventDefault();\n e.stopPropagation();\n that.trigger('save', {\n container: container,\n model: model\n });\n });\n container.on(CLICK + NS, 'a.k-scheduler-delete', function (e) {\n e.preventDefault();\n e.stopPropagation();\n that.trigger(REMOVE, {\n container: container,\n model: model\n });\n });\n kendo.cycleForm(container);\n model.bind('change', that.toggleDateValidationHandler);\n } else {\n that.trigger(CANCEL, {\n container: container,\n model: model\n });\n }\n return that.editable;\n },\n close: function () {\n var that = this;\n var destroy = function () {\n if (that.editable) {\n that.editable.options.model.unbind('change', that.toggleDateValidationHandler);\n that.editable.destroy();\n that.editable = null;\n that.container = null;\n }\n if (that.popup) {\n that.popup.destroy();\n that.popup = null;\n }\n };\n if (that.editable) {\n if (that._timezonePopup && that._timezonePopup.data('kendoWindow')) {\n that._timezonePopup.data('kendoWindow').destroy();\n that._timezonePopup = null;\n }\n if (that.container.is(':visible')) {\n that.container.data('kendoWindow').bind('deactivate', destroy).close();\n } else {\n destroy();\n }\n } else {\n destroy();\n }\n },\n _createEndTimezoneButton: function () {\n var messages = this.options.messages;\n var html = '';\n html += '<div class=\"k-edit-buttons k-state-default\">';\n html += this.createButton({\n name: 'savetimezone',\n text: messages.save\n }) + this.createButton({\n name: 'canceltimezone',\n text: messages.cancel\n });\n html += '</div></div></div>';\n return html;\n },\n showDialog: function (options) {\n var html = kendo.format('<div class=\\'k-popup-edit-form\\'><div class=\\'k-edit-form-container\\'><p class=\\'k-popup-message\\'>{0}</p>', options.text);\n html += '<div class=\"k-edit-buttons k-state-default\">';\n for (var buttonIndex = 0; buttonIndex < options.buttons.length; buttonIndex++) {\n html += this.createButton(options.buttons[buttonIndex]);\n }\n html += '</div></div></div>';\n var wrapper = this.element;\n if (this.popup) {\n this.popup.destroy();\n }\n var popup = this.popup = $(html).appendTo(wrapper).eq(0).on('click', '.k-button', function (e) {\n e.preventDefault();\n popup.close();\n var buttonIndex = $(e.currentTarget).index();\n options.buttons[buttonIndex].click();\n }).kendoWindow({\n modal: true,\n resizable: false,\n draggable: false,\n title: options.title,\n visible: false,\n close: function () {\n this.destroy();\n wrapper.focus();\n }\n }).getKendoWindow();\n popup.center().open();\n },\n _initTimezoneEditor: function (model, activator) {\n var that = this;\n var container = that.container.find('.k-scheduler-timezones');\n var checkbox = container.find('.k-timezone-toggle');\n var endTimezoneRow = container.find('.k-edit-label:last').add(container.find('.k-edit-field:last'));\n var saveButton = container.find('.k-scheduler-savetimezone');\n var cancelButton = container.find('.k-scheduler-canceltimezone');\n var timezonePopup = that._timezonePopup;\n var startTimezoneChange = function (e) {\n if (e.field === 'startTimezone') {\n var value = model.startTimezone;\n checkbox.prop('disabled', !value);\n if (!value) {\n endTimezoneRow.hide();\n model.set('endTimezone', '');\n checkbox.prop('checked', false);\n }\n }\n };\n var wnd;\n that._startTimezone = model.startTimezone;\n that._endTimezone = model.endTimezone;\n if (!timezonePopup) {\n that._timezonePopup = timezonePopup = container.kendoWindow({\n modal: true,\n resizable: false,\n draggable: true,\n title: that.options.messages.editor.timezoneEditorTitle,\n visible: false,\n close: function (e) {\n model.unbind('change', startTimezoneChange);\n if (e.userTriggered) {\n that._revertTimezones(model);\n }\n if (activator) {\n activator.focus();\n }\n }\n });\n checkbox.click(function () {\n endTimezoneRow.toggle(checkbox.prop('checked'));\n model.set('endTimezone', '');\n });\n saveButton.click(function (e) {\n e.preventDefault();\n wnd.close();\n });\n cancelButton.click(function (e) {\n e.preventDefault();\n that._revertTimezones(model);\n wnd.close();\n });\n model.bind('change', startTimezoneChange);\n }\n checkbox.prop('checked', model.endTimezone).prop('disabled', !model.startTimezone);\n if (model.endTimezone) {\n endTimezoneRow.show();\n } else {\n endTimezoneRow.hide();\n }\n wnd = timezonePopup.data('kendoWindow');\n wnd.center().open();\n }\n });\n var Scheduler = DataBoundWidget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n if (!that.options.views || !that.options.views.length) {\n that.options.views = [\n 'day',\n 'week'\n ];\n }\n that.resources = [];\n that._initModel();\n that._wrapper();\n that._views();\n that._toolbar();\n that._dataSource();\n that._resources();\n that._resizeHandler = function () {\n that.resize();\n };\n that.wrapper.on('mousedown' + NS + ' selectstart' + NS, function (e) {\n if (!$(e.target).is(':kendoFocusable')) {\n e.preventDefault();\n }\n });\n if (that.options.editable && that.options.editable.resize !== false) {\n that._resizable();\n }\n that._movable();\n that._bindResize();\n if (that.options.messages && that.options.messages.recurrence) {\n recurrence.options = that.options.messages.recurrence;\n }\n that._selectable();\n that._ariaId = kendo.guid();\n that._createEditor();\n },\n _bindResize: function () {\n $(window).on('resize' + NS, this._resizeHandler);\n },\n _unbindResize: function () {\n $(window).off('resize' + NS, this._resizeHandler);\n },\n dataItems: function () {\n var that = this;\n var items = that.items();\n var events = that._data;\n var eventsUids = $.map(items, function (item) {\n return $(item).attr('data-uid');\n });\n var i;\n var key;\n var dict = {};\n var eventsUidsLength = eventsUids.length;\n for (i = 0; i < eventsUidsLength; i++) {\n dict[eventsUids[i]] = null;\n }\n var eventsCount = events.length;\n for (i = 0; i < eventsCount; i++) {\n var event = events[i];\n if (dict[event.uid] !== undefined) {\n dict[event.uid] = event;\n }\n }\n var sortedData = [];\n for (key in dict) {\n sortedData.push(dict[key]);\n }\n return sortedData;\n },\n _isMobile: function () {\n var options = this.options;\n return options.mobile === true && kendo.support.mobileOS || options.mobile === 'phone' || options.mobile === 'tablet';\n },\n _isMobilePhoneView: function () {\n var options = this.options;\n return options.mobile === true && kendo.support.mobileOS && !kendo.support.mobileOS.tablet || options.mobile === 'phone';\n },\n _groupsByResource: function (resources, groupIndex, groupsArray, parentFieldValue, parentField) {\n if (!groupsArray) {\n groupsArray = [];\n }\n var resource = resources[0];\n if (resource) {\n var group;\n var data = resource.dataSource.view();\n var prevIndex = 0;\n for (var dataIndex = 0; dataIndex < data.length; dataIndex++) {\n var fieldValue = kendo.getter(resource.dataValueField)(data[dataIndex]);\n var currentGroupIndex = groupIndex + prevIndex + dataIndex;\n group = this._groupsByResource(resources.slice(1), currentGroupIndex, groupsArray, fieldValue, resource.field);\n group[resource.field] = fieldValue;\n prevIndex = group.groupIndex;\n if (parentField && parentFieldValue) {\n group[parentField] = parentFieldValue;\n }\n if (resources.length === 1) {\n group.groupIndex = groupIndex + dataIndex;\n groupsArray.push(group);\n }\n }\n return group;\n } else {\n return {};\n }\n },\n data: function () {\n return this._data;\n },\n select: function (options) {\n var that = this;\n var view = that.view();\n var selection = that._selection;\n var groups = view.groups;\n var selectedGroups;\n if (options === undefined) {\n var selectedEvents;\n var slots = view._selectedSlots;\n if (!selection) {\n return [];\n }\n if (selection && selection.events) {\n selectedEvents = that._selectedEvents();\n }\n return {\n start: selection.start,\n end: selection.end,\n events: selectedEvents,\n slots: slots,\n resources: view._resourceBySlot(selection)\n };\n }\n if (!options) {\n that._selection = null;\n that._old = null;\n view.clearSelection();\n return;\n }\n if ($.isArray(options)) {\n options = { events: options.splice(0) };\n }\n if (options.resources) {\n var fieldName;\n var filters = [];\n var groupsByResource = [];\n if (view.groupedResources) {\n that._groupsByResource(view.groupedResources, 0, groupsByResource);\n }\n for (fieldName in options.resources) {\n filters.push({\n field: fieldName,\n operator: 'eq',\n value: options.resources[fieldName]\n });\n }\n selectedGroups = new kendo.data.Query(groupsByResource).filter(filters).toArray();\n }\n if (options.events && options.events.length) {\n that._selectEvents(options.events, selectedGroups);\n that._select();\n return;\n }\n if (groups && (options.start && options.end)) {\n var rangeStart = getDate(view._startDate);\n var rangeEnd = kendo.date.addDays(getDate(view._endDate), 1);\n var group;\n var ranges;\n if (options.start < rangeEnd && rangeStart <= options.end) {\n if (selectedGroups && selectedGroups.length) {\n group = groups[selectedGroups[0].groupIndex];\n } else {\n group = groups[0];\n }\n ranges = group.ranges(options.start, options.end, options.isAllDay, false);\n if (ranges.length) {\n that._selection = {\n start: kendo.timezone.toLocalDate(ranges[0].start.start),\n end: kendo.timezone.toLocalDate(ranges[ranges.length - 1].end.end),\n groupIndex: ranges[0].start.groupIndex,\n index: ranges[0].start.index,\n isAllDay: ranges[0].start.isDaySlot,\n events: []\n };\n that._select();\n }\n }\n }\n },\n _selectEvents: function (eventsUids, selectedGroups) {\n var that = this;\n var idx;\n var view = that.view();\n var groups = view.groups;\n var eventsLength = eventsUids.length;\n var isGrouped = selectedGroups && selectedGroups.length;\n for (idx = 0; idx < eventsLength; idx++) {\n if (groups && isGrouped) {\n var currentGroup = groups[selectedGroups[0].groupIndex];\n var events = [];\n var timeSlotCollectionCount = currentGroup.timeSlotCollectionCount();\n var daySlotCollectionCount = currentGroup.daySlotCollectionCount();\n for (var collIdx = 0; collIdx < timeSlotCollectionCount; collIdx++) {\n events = events.concat(currentGroup.getTimeSlotCollection(collIdx).events());\n }\n for (var dayCollIdx = 0; dayCollIdx < daySlotCollectionCount; dayCollIdx++) {\n events = events.concat(currentGroup.getDaySlotCollection(dayCollIdx).events());\n }\n events = new kendo.data.Query(events).filter({\n field: 'element[0].getAttribute(\\'data-uid\\')',\n operator: 'eq',\n value: eventsUids[idx]\n }).toArray();\n if (events[0]) {\n that._createSelection(events[0].element);\n }\n } else {\n var element = view.element.find(kendo.format('.k-event[data-uid={0}], .k-task[data-uid={0}]', eventsUids[idx]));\n if (element.length) {\n that._createSelection(element[0]);\n }\n }\n }\n },\n _selectable: function () {\n var that = this, wrapper = that.wrapper, selectEvent = kendo.support.mobileOS ? 'touchend' : 'mousedown';\n if (!that.options.selectable) {\n return;\n }\n that._tabindex();\n wrapper.on(selectEvent + NS, '.k-scheduler-header-all-day td, .k-scheduler-content td, .k-event', function (e) {\n var which = e.which;\n var button = e.button;\n var browser = kendo.support.browser;\n var isRight = which && which === 3 || button && button == 2;\n if (kendo.support.mobileOS && e.isDefaultPrevented()) {\n return;\n }\n if (!isRight) {\n that._createSelection(e.currentTarget);\n }\n wrapper.focus();\n if (browser.msie && browser.version < 9) {\n setTimeout(function () {\n wrapper.focus();\n });\n }\n });\n var mouseMoveHandler = $.proxy(that._mouseMove, that);\n wrapper.on('mousedown' + NS, '.k-scheduler-header-all-day td, .k-scheduler-content td', function (e) {\n var which = e.which;\n var button = e.button;\n var isRight = which && which === 3 || button && button == 2;\n if (!isRight) {\n wrapper.on('mousemove' + NS, '.k-scheduler-header-all-day td, .k-scheduler-content td', mouseMoveHandler);\n }\n });\n wrapper.on('mouseup' + NS + ' mouseleave' + NS, function () {\n wrapper.off('mousemove' + NS, '.k-scheduler-header-all-day td, .k-scheduler-content td', mouseMoveHandler);\n });\n wrapper.on('focus' + NS, function () {\n if (!that._selection) {\n that._selectFirstSlot();\n }\n that._select();\n });\n wrapper.on('focusout' + NS, function () {\n that._ctrlKey = that._shiftKey = false;\n });\n wrapper.on('keydown' + NS, proxy(that._keydown, that));\n wrapper.on('keyup' + NS, function (e) {\n that._ctrlKey = e.ctrlKey;\n that._shiftKey = e.shiftKey;\n });\n },\n _selectFirstSlot: function () {\n this._createSelection(this.wrapper.find('.k-scheduler-content').find('td:first'));\n },\n _select: function () {\n var that = this;\n var view = that.view();\n var wrapper = that.wrapper;\n var current = view.current();\n var selection = that._selection;\n if (!selection) {\n return;\n }\n if (current) {\n current.removeAttribute('id');\n current.removeAttribute('aria-label');\n wrapper.removeAttr('aria-activedescendant');\n }\n view.select(selection);\n current = view.current();\n if (current && that._old !== current) {\n var currentUid = $(current).data('uid');\n if (that._old && currentUid && currentUid === $(that._old).data('uid')) {\n return;\n }\n var labelFormat;\n var data = selection;\n var events = that._selectedEvents();\n var slots = view._selectedSlots;\n if (events[0]) {\n data = events[0] || selection;\n labelFormat = kendo.format(that.options.messages.ariaEventLabel, data.title, data.start, data.start);\n } else {\n labelFormat = kendo.format(that.options.messages.ariaSlotLabel, data.start, data.end);\n }\n current.setAttribute('id', that._ariaId);\n current.setAttribute('aria-label', labelFormat);\n wrapper.attr('aria-activedescendant', that._ariaId);\n that._old = current;\n that.trigger('change', {\n start: selection.start,\n end: selection.end,\n events: events,\n slots: slots,\n resources: view._resourceBySlot(selection)\n });\n }\n },\n _selectedEvents: function () {\n var uids = this._selection.events;\n var length = uids.length;\n var idx = 0;\n var event;\n var events = [];\n for (; idx < length; idx++) {\n event = this.occurrenceByUid(uids[idx]);\n if (event) {\n events.push(event);\n }\n }\n return events;\n },\n _mouseMove: function (e) {\n var that = this;\n clearTimeout(that._moveTimer);\n that._moveTimer = setTimeout(function () {\n var view = that.view();\n var selection = that._selection;\n if (selection) {\n var slot = view.selectionByElement($(e.currentTarget));\n if (slot && selection.groupIndex === slot.groupIndex) {\n var startDate = slot.startDate();\n var endDate = slot.endDate();\n if (startDate >= selection.end) {\n selection.backward = false;\n } else if (endDate <= selection.start) {\n selection.backward = true;\n }\n if (selection.backward) {\n selection.start = startDate;\n } else {\n selection.end = endDate;\n }\n that._select();\n }\n }\n }, 5);\n },\n _viewByIndex: function (index) {\n var view, views = this.views;\n for (view in views) {\n if (!index) {\n return view;\n }\n index--;\n }\n },\n _keydown: function (e) {\n var that = this, key = e.keyCode, view = that.view(), editable = view.options.editable, selection = that._selection, shiftKey = e.shiftKey;\n that._ctrlKey = e.ctrlKey;\n that._shiftKey = e.shiftKey;\n if (!selection) {\n that._selectFirstSlot();\n that._select();\n return;\n }\n if (key === keys.TAB) {\n if (view.moveToEvent(selection, shiftKey)) {\n that._select();\n e.preventDefault();\n }\n } else if (editable && key === keys.ENTER) {\n if (selection.events.length) {\n if (editable.update !== false) {\n that.editEvent(selection.events[0]);\n }\n } else if (editable.create !== false) {\n if (selection.isAllDay) {\n selection = $.extend({}, selection, { end: kendo.date.addDays(selection.end, -1) });\n }\n that.addEvent(extend({}, selection, view._resourceBySlot(selection)));\n }\n } else if (key === keys.DELETE && editable !== false && editable.destroy !== false) {\n that.removeEvent(selection.events[0]);\n } else if (key >= 49 && key <= 57) {\n that.view(that._viewByIndex(key - 49));\n } else if (view.move(selection, key, shiftKey)) {\n if (view.inRange(selection)) {\n that._select();\n } else {\n that.date(selection.start);\n }\n e.preventDefault();\n }\n that._adjustSelectedDate();\n },\n _createSelection: function (item) {\n var uid, slot, selection;\n if (!this._selection || !this._ctrlKey && !this._shiftKey) {\n this._selection = {\n events: [],\n groupIndex: 0\n };\n }\n item = $(item);\n selection = this._selection;\n if (item.is('.k-event')) {\n uid = item.attr(kendo.attr('uid'));\n }\n slot = this.view().selectionByElement(item);\n if (slot) {\n selection.groupIndex = slot.groupIndex || 0;\n }\n if (uid) {\n slot = getOccurrenceByUid(this._data, uid);\n }\n if (slot && slot.uid) {\n uid = [slot.uid];\n }\n this._updateSelection(slot, uid);\n this._adjustSelectedDate();\n },\n _updateSelection: function (dataItem, events, groupIndex) {\n var selection = this._selection;\n if (dataItem && selection) {\n var view = this.view();\n if (dataItem.uid) {\n dataItem = view._updateEventForSelection(dataItem);\n }\n if (this._shiftKey && selection.start && selection.end) {\n var backward = dataItem.end < selection.end;\n selection.end = dataItem.endDate ? dataItem.endDate() : dataItem.end;\n if (backward && view._timeSlotInterval) {\n kendo.date.setTime(selection.end, -view._timeSlotInterval());\n }\n } else {\n selection.start = dataItem.startDate ? dataItem.startDate() : dataItem.start;\n selection.end = dataItem.endDate ? dataItem.endDate() : dataItem.end;\n }\n if ('isDaySlot' in dataItem) {\n selection.isAllDay = dataItem.isDaySlot;\n } else {\n selection.isAllDay = dataItem.isAllDay;\n }\n if (groupIndex !== null && groupIndex !== undefined) {\n selection.groupIndex = groupIndex;\n }\n selection.index = dataItem.index;\n if (this._ctrlKey) {\n selection.events = selection.events.concat(events || []);\n } else {\n selection.events = events || [];\n }\n }\n },\n options: {\n name: 'Scheduler',\n date: TODAY,\n editable: true,\n autoBind: true,\n snap: true,\n mobile: false,\n timezone: '',\n allDaySlot: true,\n min: new Date(1900, 0, 1),\n max: new Date(2099, 11, 31),\n toolbar: null,\n footer: {},\n messages: {\n today: 'Today',\n pdf: 'Export to PDF',\n save: 'Save',\n cancel: 'Cancel',\n destroy: 'Delete',\n deleteWindowTitle: 'Delete event',\n ariaSlotLabel: 'Selected from {0:t} to {1:t}',\n ariaEventLabel: '{0} on {1:D} at {2:t}',\n views: {\n day: 'Day',\n week: 'Week',\n workWeek: 'Work Week',\n agenda: 'Agenda',\n month: 'Month',\n timeline: 'Timeline',\n timelineWeek: 'Timeline Week',\n timelineWorkWeek: 'Timeline Work Week',\n timelineMonth: 'Timeline Month'\n },\n recurrenceMessages: {\n deleteWindowTitle: 'Delete Recurring Item',\n deleteWindowOccurrence: 'Delete current occurrence',\n deleteWindowSeries: 'Delete the series',\n editWindowTitle: 'Edit Recurring Item',\n editWindowOccurrence: 'Edit current occurrence',\n editWindowSeries: 'Edit the series'\n },\n editable: { confirmation: DELETECONFIRM },\n editor: {\n title: 'Title',\n start: 'Start',\n end: 'End',\n allDayEvent: 'All day event',\n description: 'Description',\n repeat: 'Repeat',\n timezone: ' ',\n startTimezone: 'Start timezone',\n endTimezone: 'End timezone',\n separateTimezones: 'Use separate start and end time zones',\n timezoneEditorTitle: 'Timezones',\n timezoneEditorButton: 'Time zone',\n timezoneTitle: 'Time zones',\n noTimezone: 'No timezone',\n editorTitle: 'Event'\n }\n },\n height: null,\n width: null,\n resources: [],\n group: {\n resources: [],\n orientation: 'horizontal'\n },\n views: [],\n selectable: false\n },\n events: [\n REMOVE,\n EDIT,\n CANCEL,\n SAVE,\n 'add',\n 'dataBinding',\n 'dataBound',\n 'moveStart',\n 'move',\n 'moveEnd',\n 'resizeStart',\n 'resize',\n 'resizeEnd',\n 'navigate',\n 'change'\n ],\n destroy: function () {\n var that = this, element;\n Widget.fn.destroy.call(that);\n if (that.dataSource) {\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n that.dataSource.unbind('progress', that._progressHandler);\n that.dataSource.unbind('error', that._errorHandler);\n }\n if (that.calendar) {\n that.calendar.destroy();\n that.popup.destroy();\n }\n if (that.view()) {\n that.view().destroy();\n }\n if (that._editor) {\n that._editor.destroy();\n }\n if (this._moveDraggable) {\n this._moveDraggable.destroy();\n }\n if (this._resizeDraggable) {\n this._resizeDraggable.destroy();\n }\n element = that.element.add(that.wrapper).add(that.toolbar).add(that.popup);\n element.off(NS);\n clearTimeout(that._moveTimer);\n that._model = null;\n that.toolbar = null;\n that.element = null;\n $(window).off('resize' + NS, that._resizeHandler);\n kendo.destroy(that.wrapper);\n },\n setDataSource: function (dataSource) {\n this.options.dataSource = dataSource;\n this._dataSource();\n if (this.options.autoBind) {\n dataSource.fetch();\n }\n },\n items: function () {\n var content = this.wrapper.find('.k-scheduler-content');\n var view = this.view();\n if (view && view.options.name === 'agenda') {\n return content.find('.k-task');\n } else {\n return content.find('.k-event').add(this.wrapper.find('.k-scheduler-header-wrap').find('.k-scheduler-header-all-day').siblings());\n }\n },\n _movable: function () {\n var startSlot;\n var endSlot;\n var startTime;\n var endTime;\n var event;\n var clonedEvent;\n var that = this;\n var originSlot;\n var distance = 0;\n var isMobile = that._isMobile();\n var movable = that.options.editable && that.options.editable.move !== false;\n var resizable = that.options.editable && that.options.editable.resize !== false;\n if (movable || resizable && isMobile) {\n if (isMobile && kendo.support.mobileOS.android) {\n distance = 5;\n }\n that._moveDraggable = new kendo.ui.Draggable(that.element, {\n distance: distance,\n filter: '.k-event',\n ignore: '.k-resize-handle',\n holdToDrag: isMobile,\n autoScroll: true\n });\n if (movable) {\n that._moveDraggable.bind('dragstart', function (e) {\n var view = that.view();\n var eventElement = e.currentTarget;\n if (!view.options.editable || view.options.editable.move === false) {\n e.preventDefault();\n return;\n }\n if (isMobile && !eventElement.hasClass('k-event-active')) {\n that.element.find('.k-event-active').removeClass('k-event-active');\n e.preventDefault();\n return;\n }\n event = that.occurrenceByUid(eventElement.attr(kendo.attr('uid')));\n clonedEvent = event.clone();\n clonedEvent.update(view._eventOptionsForMove(clonedEvent));\n startSlot = view._slotByPosition(e.x.startLocation, e.y.startLocation);\n startTime = startSlot.startOffset(e.x.startLocation, e.y.startLocation, that.options.snap);\n endSlot = startSlot;\n originSlot = startSlot;\n if (!startSlot || that.trigger('moveStart', { event: event })) {\n e.preventDefault();\n }\n }).bind('drag', function (e) {\n var view = that.view();\n var slot = view._slotByPosition(e.x.location, e.y.location);\n var distance;\n var range;\n if (!slot) {\n return;\n }\n endTime = slot.startOffset(e.x.location, e.y.location, that.options.snap);\n if (slot.isDaySlot !== startSlot.isDaySlot) {\n startSlot = view._slotByPosition(e.x.location, e.y.location);\n startTime = startSlot.startOffset(e.x.location, e.y.location, that.options.snap);\n distance = endTime - startTime;\n clonedEvent.isAllDay = slot.isDaySlot;\n clonedEvent.start = kendo.timezone.toLocalDate(startTime);\n clonedEvent.end = kendo.timezone.toLocalDate(endTime);\n view._updateMoveHint(clonedEvent, slot.groupIndex, distance);\n range = {\n start: clonedEvent.start,\n end: clonedEvent.end\n };\n } else {\n distance = endTime - startTime;\n view._updateMoveHint(clonedEvent, slot.groupIndex, distance);\n range = moveEventRange(clonedEvent, distance);\n }\n if (!that.trigger('move', {\n event: event,\n slot: {\n element: slot.element,\n start: slot.startDate(),\n end: slot.endDate(),\n isDaySlot: slot.isDaySlot\n },\n resources: view._resourceBySlot(slot),\n start: range.start,\n end: range.end\n })) {\n endSlot = slot;\n } else {\n view._updateMoveHint(clonedEvent, slot.groupIndex, distance);\n }\n }).bind('dragend', function (e) {\n that.view()._removeMoveHint();\n var distance = endTime - startTime;\n var range = moveEventRange(clonedEvent, distance);\n var start = range.start;\n var end = range.end;\n var endResources = that.view()._resourceBySlot(endSlot);\n var startResources = that.view()._resourceBySlot(startSlot);\n var prevented = that.trigger('moveEnd', {\n event: event,\n slot: {\n element: endSlot.element,\n start: endSlot.startDate(),\n end: endSlot.endDate()\n },\n start: start,\n end: end,\n resources: endResources\n });\n if (!prevented && (event.start.getTime() !== start.getTime() || event.end.getTime() !== end.getTime() || originSlot.isDaySlot !== endSlot.isDaySlot || kendo.stringify(endResources) !== kendo.stringify(startResources))) {\n var updatedEventOptions = that.view()._eventOptionsForMove(event);\n var eventOptions;\n if (originSlot.isDaySlot !== endSlot.isDaySlot) {\n if (endSlot.isDaySlot) {\n eventOptions = $.extend({\n start: endSlot.startDate(),\n end: endSlot.startDate(),\n isAllDay: endSlot.isDaySlot\n }, updatedEventOptions, endResources);\n } else {\n eventOptions = $.extend({\n isAllDay: endSlot.isDaySlot,\n start: start,\n end: end\n }, updatedEventOptions, endResources);\n }\n } else {\n eventOptions = $.extend({\n isAllDay: event.isAllDay,\n start: start,\n end: end\n }, updatedEventOptions, endResources);\n }\n that._updateEvent(null, event, eventOptions, endSlot.groupIndex);\n }\n e.currentTarget.removeClass('k-event-active');\n this.cancelHold();\n }).bind('dragcancel', function () {\n that.view()._removeMoveHint();\n this.cancelHold();\n });\n }\n if (isMobile) {\n that._moveDraggable.bind('hold', function (e) {\n if (that.element.find('.k-scheduler-monthview').length) {\n e.preventDefault();\n }\n that.element.find('.k-event-active').removeClass('k-event-active');\n e.currentTarget.addClass('k-event-active');\n });\n if (!kendo.support.mobileOS.android) {\n that._moveDraggable.userEvents.bind('press', function (e) {\n e.preventDefault();\n });\n }\n }\n }\n },\n _resizable: function () {\n var startTime;\n var endTime;\n var event;\n var clonedEvent;\n var slot;\n var that = this;\n var distance = 0;\n function direction(handle) {\n var directions = {\n 'k-resize-e': 'east',\n 'k-resize-w': 'west',\n 'k-resize-n': 'north',\n 'k-resize-s': 'south'\n };\n for (var key in directions) {\n if (handle.hasClass(key)) {\n return directions[key];\n }\n }\n }\n if (that._isMobile() && kendo.support.mobileOS.android) {\n distance = 5;\n }\n that._resizeDraggable = new kendo.ui.Draggable(that.element, {\n distance: distance,\n filter: '.k-resize-handle',\n autoScroll: true,\n dragstart: function (e) {\n var dragHandle = $(e.currentTarget);\n var eventElement = dragHandle.closest('.k-event');\n var uid = eventElement.attr(kendo.attr('uid'));\n var view = that.view();\n event = that.occurrenceByUid(uid);\n clonedEvent = event.clone();\n view._updateEventForResize(clonedEvent);\n slot = view._slotByPosition(e.x.startLocation, e.y.startLocation);\n if (that.trigger('resizeStart', { event: event })) {\n e.preventDefault();\n }\n startTime = kendo.date.toUtcTime(clonedEvent.start);\n endTime = kendo.date.toUtcTime(clonedEvent.end);\n },\n drag: function (e) {\n if (!slot) {\n return;\n }\n var dragHandle = $(e.currentTarget);\n var dir = direction(dragHandle);\n var view = that.view();\n var currentSlot = view._slotByPosition(e.x.location, e.y.location);\n if (!currentSlot || slot.groupIndex != currentSlot.groupIndex) {\n return;\n }\n slot = currentSlot;\n var originalStart = startTime;\n var originalEnd = endTime;\n if (dir == 'south') {\n if (!slot.isDaySlot && slot.end - kendo.date.toUtcTime(clonedEvent.start) >= view._timeSlotInterval()) {\n if (clonedEvent.isAllDay) {\n endTime = slot.startOffset(e.x.location, e.y.location, that.options.snap);\n } else {\n endTime = slot.endOffset(e.x.location, e.y.location, that.options.snap);\n }\n }\n } else if (dir == 'north') {\n if (!slot.isDaySlot && kendo.date.toUtcTime(clonedEvent.end) - slot.start >= view._timeSlotInterval()) {\n startTime = slot.startOffset(e.x.location, e.y.location, that.options.snap);\n }\n } else if (dir == 'east') {\n if (slot.isDaySlot && kendo.date.toUtcTime(kendo.date.getDate(slot.endDate())) >= kendo.date.toUtcTime(kendo.date.getDate(clonedEvent.start))) {\n if (clonedEvent.isAllDay) {\n endTime = slot.startOffset(e.x.location, e.y.location, that.options.snap);\n } else {\n endTime = slot.endOffset(e.x.location, e.y.location, that.options.snap);\n }\n } else if (!slot.isDaySlot && slot.end - kendo.date.toUtcTime(clonedEvent.start) >= view._timeSlotInterval()) {\n endTime = slot.endOffset(e.x.location, e.y.location, that.options.snap);\n }\n } else if (dir == 'west') {\n if (slot.isDaySlot && kendo.date.toUtcTime(kendo.date.getDate(clonedEvent.end)) >= kendo.date.toUtcTime(kendo.date.getDate(slot.startDate()))) {\n startTime = slot.startOffset(e.x.location, e.y.location, that.options.snap);\n } else if (!slot.isDaySlot && kendo.date.toUtcTime(clonedEvent.end) - slot.start >= view._timeSlotInterval()) {\n startTime = slot.startOffset(e.x.location, e.y.location, that.options.snap);\n }\n }\n if (!that.trigger('resize', {\n event: event,\n slot: {\n element: slot.element,\n start: slot.startDate(),\n end: slot.endDate()\n },\n start: kendo.timezone.toLocalDate(startTime),\n end: kendo.timezone.toLocalDate(endTime),\n resources: view._resourceBySlot(slot)\n })) {\n view._updateResizeHint(clonedEvent, slot.groupIndex, startTime, endTime);\n } else {\n startTime = originalStart;\n endTime = originalEnd;\n }\n },\n dragend: function (e) {\n var dragHandle = $(e.currentTarget);\n var start = new Date(clonedEvent.start.getTime());\n var end = new Date(clonedEvent.end.getTime());\n var dir = direction(dragHandle);\n that.view()._removeResizeHint();\n if (dir == 'south') {\n end = kendo.timezone.toLocalDate(endTime);\n } else if (dir == 'north') {\n start = kendo.timezone.toLocalDate(startTime);\n } else if (dir == 'east') {\n if (slot.isDaySlot) {\n end = kendo.date.getDate(kendo.timezone.toLocalDate(endTime));\n } else {\n end = kendo.timezone.toLocalDate(endTime);\n }\n } else if (dir == 'west') {\n if (slot.isDaySlot) {\n start = new Date(kendo.timezone.toLocalDate(startTime));\n start.setHours(0);\n start.setMinutes(0);\n } else {\n start = kendo.timezone.toLocalDate(startTime);\n }\n }\n var prevented = that.trigger('resizeEnd', {\n event: event,\n slot: {\n element: slot.element,\n start: slot.startDate(),\n end: slot.endDate()\n },\n start: start,\n end: end,\n resources: that.view()._resourceBySlot(slot)\n });\n if (!prevented && end.getTime() >= start.getTime()) {\n if (clonedEvent.start.getTime() != start.getTime() || clonedEvent.end.getTime() != end.getTime()) {\n that.view()._updateEventForResize(event);\n that._updateEvent(dir, event, {\n start: start,\n end: end\n });\n }\n }\n slot = null;\n event = null;\n },\n dragcancel: function () {\n that.view()._removeResizeHint();\n slot = null;\n event = null;\n }\n });\n },\n _updateEvent: function (dir, event, eventInfo, groupIndex) {\n var that = this;\n var updateEvent = function (event, callback) {\n try {\n that._preventRefresh = true;\n event.update(eventInfo);\n that._convertDates(event);\n } finally {\n that._preventRefresh = false;\n }\n if (!that.trigger(SAVE, { event: event })) {\n if (callback) {\n callback();\n }\n that._updateSelection(event, [event.uid], groupIndex);\n that.dataSource.sync();\n }\n };\n var recurrenceHead = function (event) {\n if (event.recurrenceRule) {\n return that.dataSource.getByUid(event.uid);\n } else {\n return that.dataSource.get(event.recurrenceId);\n }\n };\n var updateSeries = function () {\n var head = recurrenceHead(event);\n if (dir == 'south' || dir == 'north') {\n if (eventInfo.start) {\n var start = kendo.date.getDate(head.start);\n kendo.date.setTime(start, getMilliseconds(eventInfo.start));\n eventInfo.start = start;\n }\n if (eventInfo.end) {\n var end = kendo.date.getDate(head.end);\n kendo.date.setTime(end, getMilliseconds(eventInfo.end));\n eventInfo.end = end;\n }\n }\n that.dataSource._removeExceptions(head);\n updateEvent(head);\n };\n var updateOccurrence = function () {\n var head = recurrenceHead(event);\n var callback = function () {\n that._convertDates(head);\n };\n var exception = head.toOccurrence({\n start: event.start,\n end: event.end\n });\n updateEvent(that.dataSource.add(exception), callback);\n };\n if (event.recurrenceRule || event.isOccurrence()) {\n var recurrenceMessages = that.options.messages.recurrenceMessages;\n that._showRecurringDialog(event, updateOccurrence, updateSeries, {\n title: recurrenceMessages.editWindowTitle,\n text: recurrenceMessages.editRecurring ? recurrenceMessages.editRecurring : EDITRECURRING,\n occurrenceText: recurrenceMessages.editWindowOccurrence,\n seriesText: recurrenceMessages.editWindowSeries\n });\n } else {\n updateEvent(that.dataSource.getByUid(event.uid));\n }\n },\n _modelForContainer: function (container) {\n container = $(container).closest('[' + kendo.attr('uid') + ']');\n return this.dataSource.getByUid(container.attr(kendo.attr('uid')));\n },\n showDialog: function (options) {\n this._editor.showDialog(options);\n },\n focus: function () {\n this.wrapper.focus();\n },\n _confirmation: function (callback, model) {\n var editable = this.options.editable;\n if (editable === true || editable.confirmation !== false) {\n var messages = this.options.messages;\n var title = messages.deleteWindowTitle;\n var text = typeof editable.confirmation === STRING ? editable.confirmation : messages.editable.confirmation;\n if (this._isEditorOpened() && model.isRecurring()) {\n var recurrenceMessages = this.options.messages.recurrenceMessages;\n title = recurrenceMessages.deleteWindowTitle;\n if (model.isException()) {\n text = recurrenceMessages.deleteRecurringConfirmation ? recurrenceMessages.deleteRecurringConfirmation : DELETERECURRINGCONFIRM;\n } else {\n text = recurrenceMessages.deleteSeriesConfirmation ? recurrenceMessages.deleteSeriesConfirmation : DELETESERIESCONFIRM;\n }\n }\n var buttons = [{\n name: 'destroy',\n text: messages.destroy,\n click: function () {\n callback();\n }\n }];\n if (!(this._isMobile() && kendo.mobile.ui.Pane)) {\n buttons.push({\n name: 'canceledit',\n text: messages.cancel,\n click: function () {\n callback(true);\n }\n });\n }\n this._unbindResize();\n this.showDialog({\n model: model,\n text: text,\n title: title,\n buttons: buttons\n });\n this._bindResize();\n } else {\n callback();\n }\n },\n addEvent: function (eventInfo) {\n var editable = this._editor.editable;\n var dataSource = this.dataSource;\n var event;\n eventInfo = eventInfo || {};\n var prevented = this.trigger('add', { event: eventInfo });\n if (!prevented && (editable && editable.end() || !editable)) {\n this.cancelEvent();\n if (eventInfo && eventInfo.toJSON) {\n eventInfo = eventInfo.toJSON();\n }\n event = dataSource.add(eventInfo);\n if (event) {\n this.cancelEvent();\n this._editEvent(event);\n }\n }\n },\n saveEvent: function () {\n var editor = this._editor;\n if (!editor) {\n return;\n }\n var editable = editor.editable;\n var container = editor.container;\n var model = this._modelForContainer(container);\n if (container && editable && editable.end() && !this.trigger(SAVE, {\n container: container,\n event: model\n })) {\n if (model.isRecurrenceHead()) {\n this.dataSource._removeExceptions(model);\n }\n if (!model.dirty && !model.isOccurrence()) {\n this._convertDates(model, 'remove');\n }\n this.dataSource.sync();\n }\n },\n cancelEvent: function () {\n var editor = this._editor;\n var container = editor.container;\n var model;\n if (container) {\n model = this._modelForContainer(container);\n if (model && model.isOccurrence()) {\n this._convertDates(model, 'remove');\n this._convertDates(this.dataSource.get(model.recurrenceId), 'remove');\n }\n this.dataSource.cancelChanges(model);\n editor.close();\n }\n },\n editEvent: function (uid) {\n var model = typeof uid == 'string' ? this.occurrenceByUid(uid) : uid;\n if (!model) {\n return;\n }\n this.cancelEvent();\n if (model.isRecurring()) {\n this._editRecurringDialog(model);\n } else {\n this._editEvent(model);\n }\n },\n _editEvent: function (model) {\n this._unbindResize();\n this._createPopupEditor(model);\n this._bindResize();\n },\n _editRecurringDialog: function (model) {\n var that = this;\n var editOccurrence = function () {\n if (model.isException()) {\n that._editEvent(model);\n } else {\n that.addEvent(model);\n }\n };\n var editSeries = function () {\n if (model.recurrenceId) {\n model = that.dataSource.get(model.recurrenceId);\n }\n that._editEvent(model);\n };\n var recurrenceMessages = that.options.messages.recurrenceMessages;\n that._showRecurringDialog(model, editOccurrence, editSeries, {\n title: recurrenceMessages.editWindowTitle,\n text: recurrenceMessages.editRecurring ? recurrenceMessages.editRecurring : EDITRECURRING,\n occurrenceText: recurrenceMessages.editWindowOccurrence,\n seriesText: recurrenceMessages.editWindowSeries\n });\n },\n _showRecurringDialog: function (model, editOccurrence, editSeries, messages) {\n var that = this;\n var editable = that.options.editable;\n var editRecurringMode = isPlainObject(editable) ? editable.editRecurringMode : 'dialog';\n if (editRecurringMode === 'series') {\n editSeries();\n } else if (editRecurringMode === 'occurrence') {\n editOccurrence();\n } else {\n this._unbindResize();\n that.showDialog({\n model: model,\n title: messages.title,\n text: messages.text,\n buttons: [\n {\n text: messages.occurrenceText,\n click: editOccurrence\n },\n {\n text: messages.seriesText,\n click: editSeries\n }\n ]\n });\n this._bindResize();\n }\n },\n _createButton: function (command) {\n var template = command.template || COMMANDBUTTONTMPL, commandName = typeof command === STRING ? command : command.name || command.text, options = {\n className: 'k-scheduler-' + (commandName || '').replace(/\\s/g, ''),\n text: commandName,\n attr: ''\n };\n if (!commandName && !(isPlainObject(command) && command.template)) {\n throw new Error('Custom commands should have name specified');\n }\n if (isPlainObject(command)) {\n if (command.className) {\n command.className += ' ' + options.className;\n }\n if (commandName === 'edit' && isPlainObject(command.text)) {\n command = extend(true, {}, command);\n command.text = command.text.edit;\n }\n options = extend(true, options, defaultCommands[commandName], command);\n } else {\n options = extend(true, options, defaultCommands[commandName]);\n }\n return kendo.template(template)(options);\n },\n _convertDates: function (model, method) {\n var timezone = this.dataSource.reader.timezone;\n var startTimezone = model.startTimezone;\n var endTimezone = model.endTimezone;\n var start = model.start;\n var end = model.start;\n method = method || 'apply';\n startTimezone = startTimezone || endTimezone;\n endTimezone = endTimezone || startTimezone;\n if (startTimezone) {\n if (timezone) {\n if (method === 'apply') {\n start = kendo.timezone.convert(model.start, timezone, startTimezone);\n end = kendo.timezone.convert(model.end, timezone, endTimezone);\n } else {\n start = kendo.timezone.convert(model.start, startTimezone, timezone);\n end = kendo.timezone.convert(model.end, endTimezone, timezone);\n }\n } else {\n start = kendo.timezone[method](model.start, startTimezone);\n end = kendo.timezone[method](model.end, endTimezone);\n }\n model._set('start', start);\n model._set('end', end);\n }\n },\n _createEditor: function () {\n var that = this;\n var editor;\n if (this._isMobile() && kendo.mobile.ui.Pane) {\n editor = that._editor = new MobileEditor(this.wrapper, extend({}, this.options, {\n target: this,\n timezone: that.dataSource.reader.timezone,\n resources: that.resources,\n createButton: proxy(this._createButton, this)\n }));\n } else {\n editor = that._editor = new PopupEditor(this.wrapper, extend({}, this.options, {\n target: this,\n createButton: proxy(this._createButton, this),\n timezone: that.dataSource.reader.timezone,\n resources: that.resources\n }));\n }\n editor.bind('cancel', function (e) {\n if (that.trigger('cancel', {\n container: e.container,\n event: e.model\n })) {\n e.preventDefault();\n return;\n }\n that.cancelEvent();\n that.focus();\n });\n editor.bind('edit', function (e) {\n if (that.trigger(EDIT, {\n container: e.container,\n event: e.model\n })) {\n e.preventDefault();\n }\n });\n editor.bind('save', function () {\n that.saveEvent();\n });\n editor.bind('remove', function (e) {\n that.removeEvent(e.model);\n });\n },\n _createPopupEditor: function (model) {\n var editor = this._editor;\n if (!model.isNew() || model.isOccurrence()) {\n if (model.isOccurrence()) {\n this._convertDates(model.recurrenceId ? this.dataSource.get(model.recurrenceId) : model);\n }\n this._convertDates(model);\n }\n this.editable = editor.editEvent(model);\n },\n removeEvent: function (uid) {\n var that = this, model = typeof uid == 'string' ? that.occurrenceByUid(uid) : uid;\n if (!model) {\n return;\n }\n if (model.isRecurring()) {\n that._deleteRecurringDialog(model);\n } else {\n that._confirmation(function (cancel) {\n if (!cancel) {\n that._removeEvent(model);\n }\n }, model);\n }\n },\n occurrenceByUid: function (uid) {\n var occurrence = this.dataSource.getByUid(uid);\n if (!occurrence) {\n occurrence = getOccurrenceByUid(this._data, uid);\n }\n return occurrence;\n },\n occurrencesInRange: function (start, end) {\n return new kendo.data.Query(this._data).filter({\n logic: 'or',\n filters: [\n {\n logic: 'and',\n filters: [\n {\n field: 'start',\n operator: 'gte',\n value: start\n },\n {\n field: 'end',\n operator: 'gte',\n value: start\n },\n {\n field: 'start',\n operator: 'lt',\n value: end\n }\n ]\n },\n {\n logic: 'and',\n filters: [\n {\n field: 'start',\n operator: 'lte',\n value: start\n },\n {\n field: 'end',\n operator: 'gt',\n value: start\n }\n ]\n }\n ]\n }).toArray();\n },\n _removeEvent: function (model) {\n if (!this.trigger(REMOVE, { event: model })) {\n if (this.dataSource.remove(model)) {\n this.dataSource.sync();\n }\n }\n },\n _deleteRecurringDialog: function (model) {\n var that = this;\n var currentModel = model;\n var editable = that.options.editable;\n var deleteOccurrence;\n var deleteSeries;\n var deleteOccurrenceConfirmation;\n var deleteSeriesConfirmation;\n var editRecurringMode = isPlainObject(editable) ? editable.editRecurringMode : 'dialog';\n deleteOccurrence = function () {\n var occurrence = currentModel.recurrenceId ? currentModel : currentModel.toOccurrence();\n var head = that.dataSource.get(occurrence.recurrenceId);\n that._convertDates(head);\n that._removeEvent(occurrence);\n };\n deleteSeries = function () {\n if (currentModel.recurrenceId) {\n currentModel = that.dataSource.get(currentModel.recurrenceId);\n }\n that._removeEvent(currentModel);\n };\n if (editRecurringMode != 'dialog' || that._isEditorOpened()) {\n deleteOccurrenceConfirmation = function () {\n that._confirmation(function (cancel) {\n if (!cancel) {\n deleteOccurrence();\n }\n }, currentModel);\n };\n deleteSeriesConfirmation = function () {\n that._confirmation(function (cancel) {\n if (!cancel) {\n deleteSeries();\n }\n }, currentModel);\n };\n }\n var seriesCallback = deleteSeriesConfirmation || deleteSeries;\n var occurrenceCallback = deleteOccurrenceConfirmation || deleteOccurrence;\n if (that._isEditorOpened()) {\n if (model.isException()) {\n occurrenceCallback();\n } else {\n seriesCallback();\n }\n } else {\n var recurrenceMessages = that.options.messages.recurrenceMessages;\n that._showRecurringDialog(model, occurrenceCallback, seriesCallback, {\n title: recurrenceMessages.deleteWindowTitle,\n text: recurrenceMessages.deleteRecurring ? recurrenceMessages.deleteRecurring : DELETERECURRING,\n occurrenceText: recurrenceMessages.deleteWindowOccurrence,\n seriesText: recurrenceMessages.deleteWindowSeries\n });\n }\n },\n _isEditorOpened: function () {\n return !!this._editor.container;\n },\n _unbindView: function (view) {\n var that = this;\n that.angular('cleanup', function () {\n return { elements: that.items() };\n });\n view.destroy();\n },\n _bindView: function (view) {\n var that = this;\n if (that.options.editable) {\n if (that._viewRemoveHandler) {\n view.unbind(REMOVE, that._viewRemoveHandler);\n }\n that._viewRemoveHandler = function (e) {\n that.removeEvent(e.uid);\n };\n view.bind(REMOVE, that._viewRemoveHandler);\n if (that._viewAddHandler) {\n view.unbind(ADD, that._viewAddHandler);\n }\n that._viewAddHandler = function (e) {\n that.addEvent(e.eventInfo);\n };\n view.bind(ADD, this._viewAddHandler);\n if (that._viewEditHandler) {\n view.unbind(EDIT, that._viewEditHandler);\n }\n that._viewEditHandler = function (e) {\n that.editEvent(e.uid);\n };\n view.bind(EDIT, this._viewEditHandler);\n }\n if (that._viewNavigateHandler) {\n view.unbind('navigate', that._viewNavigateHandler);\n }\n that._viewNavigateHandler = function (e) {\n if (e.view) {\n var switchWorkDay = 'isWorkDay' in e;\n var action = switchWorkDay ? 'changeWorkDay' : 'changeView';\n if (!that.trigger('navigate', {\n view: e.view,\n isWorkDay: e.isWorkDay,\n action: action,\n date: e.date\n })) {\n if (switchWorkDay) {\n that._workDayMode = e.isWorkDay;\n }\n that._selectView(e.view);\n that.date(e.date);\n }\n }\n };\n view.bind('navigate', that._viewNavigateHandler);\n if (that._viewActivateHandler) {\n view.unbind('activate', that._viewActivateHandler);\n }\n that._viewActivateHandler = function () {\n var view = this;\n if (that._selection) {\n view.constrainSelection(that._selection);\n that._select();\n that._adjustSelectedDate();\n }\n };\n view.bind('activate', that._viewActivateHandler);\n },\n _selectView: function (name) {\n var that = this;\n if (name && that.views[name]) {\n if (that._selectedView) {\n that._unbindView(that._selectedView);\n }\n that._selectedView = that._renderView(name);\n that._selectedViewName = name;\n if (that._viewsCount > 1) {\n var viewButton = VIEWBUTTONTEMPLATE({\n views: that.views,\n view: name,\n ns: kendo.ns\n });\n var firstButton = that.toolbar.find('.k-scheduler-views li:first-child');\n if (firstButton.is('.k-current-view')) {\n firstButton.replaceWith(viewButton);\n } else {\n that.toolbar.find('.k-scheduler-views').prepend(viewButton);\n }\n var viewButtons = that.toolbar.find('.k-scheduler-views li').removeClass('k-state-selected');\n viewButtons.end().find('.k-view-' + name.replace(/\\./g, '\\\\.').toLowerCase()).addClass('k-state-selected');\n }\n }\n },\n view: function (name) {\n var that = this;\n if (name) {\n that._selectView(name);\n that.rebind();\n return;\n }\n return that._selectedView;\n },\n viewName: function () {\n return this.view().name;\n },\n _renderView: function (name) {\n var view = this._initializeView(name);\n this._bindView(view);\n this._model.set('formattedDate', view.dateForTitle());\n this._model.set('formattedShortDate', view.shortDateForTitle());\n return view;\n },\n resize: function (force) {\n var size = this.getSize();\n var currentSize = this._size;\n var view = this.view();\n if (!view || !view.groups) {\n return;\n }\n if (force || !currentSize || size.width !== currentSize.width || size.height !== currentSize.height) {\n this.refresh({ action: 'resize' });\n this._size = size;\n }\n },\n _adjustSelectedDate: function () {\n var date = this._model.selectedDate, selection = this._selection, start = selection.start;\n if (start && !kendo.date.isInDateRange(date, getDate(start), getDate(selection.end))) {\n date.setFullYear(start.getFullYear(), start.getMonth(), start.getDate());\n }\n },\n _initializeView: function (name) {\n var view = this.views[name];\n if (view) {\n var isSettings = isPlainObject(view), type = view.type;\n if (typeof type === STRING) {\n type = kendo.getter(view.type)(window);\n }\n if (type) {\n view = new type(this.wrapper, trimOptions(extend(true, {}, this.options, isSettings ? view : {}, {\n resources: this.resources,\n date: this.date(),\n showWorkHours: this._workDayMode\n })));\n } else {\n throw new Error('There is no such view');\n }\n }\n return view;\n },\n _views: function () {\n var views = this.options.views;\n var view;\n var defaultView;\n var selected;\n var isSettings;\n var name;\n var type;\n var idx;\n var length;\n this.views = {};\n this._viewsCount = 0;\n for (idx = 0, length = views.length; idx < length; idx++) {\n var hasType = false;\n view = views[idx];\n isSettings = isPlainObject(view);\n if (isSettings) {\n type = name = view.type ? view.type : view;\n if (typeof type !== STRING) {\n name = view.name || view.title;\n hasType = true;\n }\n } else {\n type = name = view;\n }\n defaultView = defaultViews[name];\n if (defaultView && !hasType) {\n view.type = defaultView.type;\n defaultView.title = this.options.messages.views[name];\n if (defaultView.type === 'day') {\n defaultView.messages = { allDay: this.options.messages.allDay };\n } else if (defaultView.type === 'agenda') {\n defaultView.messages = {\n event: this.options.messages.event,\n date: this.options.messages.date,\n time: this.options.messages.time\n };\n }\n }\n view = extend({ title: name }, defaultView, isSettings ? view : {});\n if (name) {\n this.views[name] = view;\n this._viewsCount++;\n if (!selected || view.selected) {\n selected = name;\n }\n }\n }\n if (selected) {\n this._selectedViewName = selected;\n }\n },\n rebind: function () {\n this.dataSource.fetch();\n },\n _dataSource: function () {\n var that = this, options = that.options, dataSource = options.dataSource;\n dataSource = isArray(dataSource) ? { data: dataSource } : dataSource;\n if (options.timezone && !(dataSource instanceof SchedulerDataSource)) {\n dataSource = extend(true, dataSource, { schema: { timezone: options.timezone } });\n } else if (dataSource instanceof SchedulerDataSource) {\n options.timezone = dataSource.options.schema ? dataSource.options.schema.timezone : '';\n }\n if (that.dataSource && that._refreshHandler) {\n that.dataSource.unbind(CHANGE, that._refreshHandler).unbind('progress', that._progressHandler).unbind('error', that._errorHandler);\n } else {\n that._refreshHandler = proxy(that.refresh, that);\n that._progressHandler = proxy(that._requestStart, that);\n that._errorHandler = proxy(that._error, that);\n }\n that.dataSource = kendo.data.SchedulerDataSource.create(dataSource).bind(CHANGE, that._refreshHandler).bind('progress', that._progressHandler).bind('error', that._errorHandler);\n that.options.dataSource = that.dataSource;\n },\n _error: function () {\n this._progress(false);\n },\n _requestStart: function () {\n this._progress(true);\n },\n _progress: function (toggle) {\n var element = this.element.find('.k-scheduler-content');\n kendo.ui.progress(element, toggle);\n },\n _resources: function () {\n var that = this;\n var resources = that.options.resources;\n for (var idx = 0; idx < resources.length; idx++) {\n var resource = resources[idx];\n var field = resource.field;\n var dataSource = resource.dataSource;\n if (!field || !dataSource) {\n throw new Error('The \"field\" and \"dataSource\" options of the scheduler resource are mandatory.');\n }\n that.resources.push({\n field: field,\n name: resource.name || field,\n title: resource.title || field,\n dataTextField: resource.dataTextField || 'text',\n dataValueField: resource.dataValueField || 'value',\n dataColorField: resource.dataColorField || 'color',\n valuePrimitive: resource.valuePrimitive != null ? resource.valuePrimitive : true,\n multiple: resource.multiple || false,\n dataSource: kendo.data.DataSource.create(dataSource)\n });\n }\n var promises = $.map(that.resources, function (resource) {\n return resource.dataSource.fetch();\n });\n $.when.apply(null, promises).then(function () {\n if (that.options.autoBind) {\n that.view(that._selectedViewName);\n } else {\n that._selectView(that._selectedViewName);\n }\n });\n },\n _initModel: function () {\n var that = this;\n that._model = kendo.observable({\n selectedDate: new Date(this.options.date),\n formattedDate: '',\n formattedShortDate: ''\n });\n that._model.bind('change', function (e) {\n if (e.field === 'selectedDate') {\n that.view(that._selectedViewName);\n }\n });\n },\n _wrapper: function () {\n var that = this;\n var options = that.options;\n var height = options.height;\n var width = options.width;\n that.wrapper = that.element.addClass('k-widget k-scheduler k-floatwrap').attr('role', 'grid').attr('aria-multiselectable', true);\n if (that._isMobile()) {\n that.wrapper.addClass('k-scheduler-mobile');\n }\n if (that._isMobilePhoneView()) {\n that.wrapper.addClass('k-scheduler-phone');\n }\n if (height) {\n that.wrapper.height(height);\n }\n if (width) {\n that.wrapper.width(width);\n }\n },\n date: function (value) {\n if (value != null && getDate(value) >= getDate(this.options.min) && getDate(value) <= getDate(this.options.max)) {\n this._model.set('selectedDate', value);\n }\n return getDate(this._model.get('selectedDate'));\n },\n _toolbar: function () {\n var that = this;\n var options = that.options;\n var commands = [];\n if (options.toolbar) {\n commands = $.isArray(options.toolbar) ? options.toolbar : [options.toolbar];\n }\n var template = this._isMobilePhoneView() ? MOBILETOOLBARTEMPLATE : TOOLBARTEMPLATE;\n var toolbar = $(template({\n messages: options.messages,\n pdf: $.grep(commands, function (item) {\n return item == 'pdf' || item.name == 'pdf';\n }).length > 0,\n ns: kendo.ns,\n views: that.views,\n viewsCount: that._viewsCount\n }));\n that.wrapper.append(toolbar);\n that.toolbar = toolbar;\n kendo.bind(that.toolbar, that._model);\n toolbar.on(CLICK + NS, '.k-pdf', function (e) {\n e.preventDefault();\n that.saveAsPDF();\n });\n toolbar.on(CLICK + NS, '.k-scheduler-navigation li', function (e) {\n var li = $(this);\n var date = new Date(that.date());\n var action = '';\n e.preventDefault();\n if (li.hasClass('k-nav-today')) {\n action = 'today';\n date = new Date();\n } else if (li.hasClass('k-nav-next')) {\n action = 'next';\n date = that.view().nextDate();\n } else if (li.hasClass('k-nav-prev')) {\n action = 'previous';\n date = that.view().previousDate();\n } else if (li.hasClass('k-nav-current') && !that._isMobilePhoneView()) {\n that._showCalendar();\n return;\n }\n if (!that.trigger('navigate', {\n view: that._selectedViewName,\n action: action,\n date: date\n })) {\n that.date(date);\n }\n });\n toolbar.on(CLICK + NS, '.k-scheduler-views li, .k-scheduler-refresh', function (e) {\n e.preventDefault();\n var name = $(this).attr(kendo.attr('name'));\n if (!that.trigger('navigate', {\n view: name,\n action: 'changeView',\n date: that.date()\n })) {\n that.view(name);\n that.element.find('.k-state-expanded').removeClass('k-state-expanded');\n }\n });\n toolbar.on(CLICK + NS, '.k-scheduler-views li.k-current-view', function () {\n that.element.find('.k-scheduler-views').toggleClass('k-state-expanded');\n });\n toolbar.find('li').hover(function () {\n $(this).addClass('k-state-hover');\n }, function () {\n $(this).removeClass('k-state-hover');\n });\n },\n _showCalendar: function () {\n var that = this, target = that.toolbar.find('.k-nav-current'), html = $('<div class=\"k-calendar-container\"><div class=\"k-scheduler-calendar\"/></div>');\n if (!that.popup) {\n that.popup = new Popup(html, {\n anchor: target,\n open: function () {\n if (!that.calendar) {\n that.calendar = new Calendar(this.element.find('.k-scheduler-calendar'), {\n change: function () {\n var date = this.value();\n if (!that.trigger('navigate', {\n view: that._selectedViewName,\n action: 'changeDate',\n date: date\n })) {\n that.date(date);\n that.popup.close();\n }\n },\n min: that.options.min,\n max: that.options.max\n });\n }\n that.calendar.value(that.date());\n },\n copyAnchorStyles: false\n });\n }\n that.popup.open();\n },\n refresh: function (e) {\n var that = this;\n var view = this.view();\n this._progress(false);\n this.angular('cleanup', function () {\n return { elements: that.items() };\n });\n e = e || {};\n if (!view) {\n return;\n }\n if (e && e.action === 'itemchange' && (this._editor.editable || this._preventRefresh)) {\n return;\n }\n if (this.trigger('dataBinding', {\n action: e.action || 'rebind',\n index: e.index,\n items: e.items\n })) {\n return;\n }\n if (!(e && e.action === 'resize') && this._editor) {\n this._editor.close();\n }\n this._data = this.dataSource.expand(view.startDate(), view.endDate());\n view.refreshLayout();\n view.render(this._data);\n this.trigger('dataBound');\n },\n slotByPosition: function (x, y) {\n var view = this.view();\n if (!view._slotByPosition) {\n return null;\n }\n var slot = view._slotByPosition(x, y);\n if (!slot) {\n return null;\n }\n return {\n startDate: slot.startDate(),\n endDate: slot.endDate(),\n groupIndex: slot.groupIndex,\n element: slot.element,\n isDaySlot: slot.isDaySlot\n };\n },\n slotByElement: function (element) {\n var offset = $(element).offset();\n return this.slotByPosition(offset.left, offset.top);\n },\n resourcesBySlot: function (slot) {\n return this.view()._resourceBySlot(slot);\n }\n });\n var defaultViews = {\n day: { type: 'kendo.ui.DayView' },\n week: { type: 'kendo.ui.WeekView' },\n workWeek: { type: 'kendo.ui.WorkWeekView' },\n agenda: { type: 'kendo.ui.AgendaView' },\n month: { type: 'kendo.ui.MonthView' },\n timeline: { type: 'kendo.ui.TimelineView' },\n timelineWeek: { type: 'kendo.ui.TimelineWeekView' },\n timelineWorkWeek: { type: 'kendo.ui.TimelineWorkWeekView' },\n timelineMonth: { type: 'kendo.ui.TimelineMonthView' }\n };\n ui.plugin(Scheduler);\n if (kendo.PDFMixin) {\n kendo.PDFMixin.extend(Scheduler.prototype);\n var SCHEDULER_EXPORT = 'k-scheduler-pdf-export';\n Scheduler.fn._drawPDF = function (progress) {\n var wrapper = this.wrapper;\n var styles = wrapper[0].style.cssText;\n wrapper.css({\n width: wrapper.width(),\n height: wrapper.height()\n });\n wrapper.addClass(SCHEDULER_EXPORT);\n var scheduler = this;\n var promise = new $.Deferred();\n var table = wrapper.find('.k-scheduler-content').find('table').css('table-layout', 'auto');\n setTimeout(function () {\n table.css('table-layout', 'fixed');\n scheduler.resize(true);\n scheduler._drawPDFShadow({}, { avoidLinks: scheduler.options.pdf.avoidLinks }).done(function (group) {\n var args = {\n page: group,\n pageNumber: 1,\n progress: 1,\n totalPages: 1\n };\n progress.notify(args);\n promise.resolve(args.page);\n }).fail(function (err) {\n promise.reject(err);\n }).always(function () {\n wrapper[0].style.cssText = styles;\n wrapper.removeClass(SCHEDULER_EXPORT);\n scheduler.resize(true);\n scheduler.resize(true);\n });\n });\n return promise;\n };\n }\n var TimezoneEditor = Widget.extend({\n init: function (element, options) {\n var that = this, zones = kendo.timezone.windows_zones;\n if (!zones || !kendo.timezone.zones_titles) {\n throw new Error('kendo.timezones.min.js is not included.');\n }\n Widget.fn.init.call(that, element, options);\n that.wrapper = that.element;\n that._zonesQuery = new kendo.data.Query(zones);\n that._zoneTitleId = kendo.guid();\n that._zoneTitlePicker();\n that._zonePicker();\n that._zoneTitle.bind('cascade', function () {\n if (!this.value()) {\n that._zone.wrapper.hide();\n }\n });\n that._zone.bind('cascade', function () {\n that._value = this.value();\n that.trigger('change');\n });\n that.value(that.options.value);\n },\n options: {\n name: 'TimezoneEditor',\n value: '',\n optionLabel: 'No timezone'\n },\n events: ['change'],\n _zoneTitlePicker: function () {\n var that = this, zoneTitle = $('<input id=\"' + that._zoneTitleId + '\"/>').appendTo(that.wrapper);\n that._zoneTitle = new kendo.ui.DropDownList(zoneTitle, {\n dataSource: kendo.timezone.zones_titles,\n dataValueField: 'other_zone',\n dataTextField: 'name',\n optionLabel: that.options.optionLabel\n });\n },\n _zonePicker: function () {\n var that = this, zone = $('<input />').appendTo(this.wrapper);\n that._zone = new kendo.ui.DropDownList(zone, {\n dataValueField: 'zone',\n dataTextField: 'territory',\n dataSource: that._zonesQuery.data,\n cascadeFrom: that._zoneTitleId,\n dataBound: function () {\n that._value = this.value();\n this.wrapper.toggle(this.dataSource.view().length > 1);\n }\n });\n that._zone.wrapper.hide();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.destroy(this.wrapper);\n },\n value: function (value) {\n var that = this, zone;\n if (value === undefined) {\n return that._value;\n }\n zone = that._zonesQuery.filter({\n field: 'zone',\n operator: 'eq',\n value: value\n }).data[0];\n if (zone) {\n that._zoneTitle.value(zone.other_zone);\n that._zone.value(zone.zone);\n } else {\n that._zoneTitle.select(0);\n }\n }\n });\n ui.plugin(TimezoneEditor);\n var ZONETITLEOPTIONTEMPLATE = kendo.template('<option value=\"#=other_zone#\">#=name#</option>');\n var ZONEOPTIONTEMPLATE = kendo.template('<option value=\"#=zone#\">#=territory#</option>');\n var MobileTimezoneEditor = Widget.extend({\n init: function (element, options) {\n var that = this, zones = kendo.timezone.windows_zones;\n if (!zones || !kendo.timezone.zones_titles) {\n throw new Error('kendo.timezones.min.js is not included.');\n }\n Widget.fn.init.call(that, element, options);\n that.wrapper = that.element;\n that._zonesQuery = new kendo.data.Query(zones);\n that._zoneTitlePicker();\n that._zonePicker();\n that.value(that.options.value);\n },\n options: {\n name: 'MobileTimezoneEditor',\n optionLabel: 'No timezone',\n value: ''\n },\n events: ['change'],\n _bindZones: function (value) {\n var data = value ? this._filter(value) : [];\n this._zone.html(this._options(data, ZONEOPTIONTEMPLATE));\n },\n _filter: function (value) {\n return this._zonesQuery.filter({\n field: 'other_zone',\n operator: 'eq',\n value: value\n }).data;\n },\n _options: function (data, template, optionLabel) {\n var idx = 0;\n var html = '';\n var length = data.length;\n if (optionLabel) {\n html += template({\n other_zone: '',\n name: optionLabel\n });\n }\n for (; idx < length; idx++) {\n html += template(data[idx]);\n }\n return html;\n },\n _zoneTitlePicker: function () {\n var that = this;\n var options = that._options(kendo.timezone.zones_titles, ZONETITLEOPTIONTEMPLATE, that.options.optionLabel);\n that._zoneTitle = $('<select>' + options + '</select>').appendTo(that.wrapper).change(function () {\n var value = this.value;\n var zone = that._zone;\n that._bindZones(value);\n if (value && zone[0].children.length > 1) {\n zone.show();\n } else {\n zone.hide();\n }\n that._value = zone[0].value;\n that.trigger('change');\n });\n },\n _zonePicker: function () {\n var that = this;\n that._zone = $('<select style=\"display:none\"></select>').appendTo(this.wrapper).change(function () {\n that._value = this.value;\n that.trigger('change');\n });\n that._bindZones(that._zoneTitle.val());\n that._value = that._zone[0].value;\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.destroy(this.wrapper);\n },\n value: function (value) {\n var that = this;\n var zonePicker = that._zone;\n var other_zone = '';\n var zone_value = '';\n var zone;\n if (value === undefined) {\n return that._value;\n }\n zone = that._zonesQuery.filter({\n field: 'zone',\n operator: 'eq',\n value: value\n }).data[0];\n if (zone) {\n zone_value = zone.zone;\n other_zone = zone.other_zone;\n }\n that._zoneTitle.val(other_zone);\n that._bindZones(other_zone);\n zonePicker.val(zone_value);\n zone_value = zonePicker[0].value;\n if (zone_value && zonePicker[0].children.length > 1) {\n zonePicker.show();\n } else {\n zonePicker.hide();\n }\n that._value = zone_value;\n }\n });\n ui.plugin(MobileTimezoneEditor);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.touch', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\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: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, proxy = $.proxy, abs = Math.abs, MAX_DOUBLE_TAP_DISTANCE = 20;\n var Touch = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element;\n that.wrapper = element;\n function eventProxy(name) {\n return function (e) {\n that._triggerTouch(name, e);\n };\n }\n function gestureEventProxy(name) {\n return function (e) {\n that.trigger(name, {\n touches: e.touches,\n distance: e.distance,\n center: e.center,\n 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: proxy(that, '_tap'),\n gesturestart: gestureEventProxy('gesturestart'),\n gesturechange: gestureEventProxy('gesturechange'),\n gestureend: gestureEventProxy('gestureend')\n });\n if (options.enableSwipe) {\n that.events.bind('start', proxy(that, '_swipestart'));\n that.events.bind('move', proxy(that, '_swipemove'));\n } else {\n that.events.bind('start', proxy(that, '_dragstart'));\n that.events.bind('move', eventProxy('drag'));\n that.events.bind('end', eventProxy('dragend'));\n }\n kendo.notify(that);\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 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 cancel: function () {\n this.events.cancel();\n },\n destroy: function () {\n this.events.destroy();\n },\n _triggerTouch: function (type, e) {\n if (this.trigger(type, {\n touch: e.touch,\n event: e.event\n })) {\n e.preventDefault();\n }\n },\n _tap: function (e) {\n var that = this, lastTap = that.lastTap, touch = e.touch;\n if (lastTap && touch.endTime - lastTap.endTime < that.options.doubleTapTimeout && kendo.touchDelta(touch, lastTap).distance < MAX_DOUBLE_TAP_DISTANCE) {\n that._triggerTouch('doubletap', e);\n that.lastTap = null;\n } else {\n that._triggerTouch('tap', e);\n that.lastTap = touch;\n }\n },\n _dragstart: function (e) {\n this._triggerTouch('dragstart', e);\n },\n _swipestart: function (e) {\n if (abs(e.x.velocity) * 2 >= abs(e.y.velocity)) {\n e.sender.capture();\n }\n },\n _swipemove: function (e) {\n var that = this, options = that.options, touch = e.touch, duration = e.event.timeStamp - touch.startTime, direction = touch.x.initialDelta > 0 ? 'right' : 'left';\n if (abs(touch.x.initialDelta) >= options.minXDelta && abs(touch.y.initialDelta) < options.maxYDelta && duration < options.maxDuration) {\n that.trigger('swipe', {\n direction: direction,\n touch: e.touch\n });\n touch.cancel();\n }\n }\n });\n kendo.ui.plugin(Touch);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.gantt.list', [\n 'kendo.dom',\n 'kendo.touch',\n 'kendo.draganddrop',\n 'kendo.columnsorter',\n 'kendo.datetimepicker',\n 'kendo.editable'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'gantt.list',\n name: 'Gantt List',\n category: 'web',\n description: 'The Gantt List',\n depends: [\n 'dom',\n 'touch',\n 'draganddrop',\n 'columnsorter',\n 'datetimepicker',\n 'editable'\n ],\n hidden: true\n };\n (function ($) {\n var kendo = window.kendo;\n var kendoDom = kendo.dom;\n var kendoDomElement = kendoDom.element;\n var kendoTextElement = kendoDom.text;\n var browser = kendo.support.browser;\n var mobileOS = kendo.support.mobileOS;\n var ui = kendo.ui;\n var Widget = ui.Widget;\n var extend = $.extend;\n var outerWidth = kendo._outerWidth;\n var outerHeight = kendo._outerHeight;\n var map = $.map;\n var isFunction = $.isFunction;\n var oldIE = browser.msie && browser.version < 9;\n var keys = kendo.keys;\n var titleFromField = {\n 'title': 'Title',\n 'start': 'Start Time',\n 'end': 'End Time',\n 'percentComplete': '% Done',\n 'parentId': 'Predecessor ID',\n 'id': 'ID',\n 'orderId': 'Order ID'\n };\n var STRING = 'string';\n var NS = '.kendoGanttList';\n var CLICK = 'click';\n var DOT = '.';\n var SIZE_CALCULATION_TEMPLATE = '<table style=\\'visibility: hidden;\\'>' + '<tbody>' + '<tr style=\\'height:{0}\\'>' + '<td> </td>' + '</tr>' + '</tbody>' + '</table>';\n var listStyles = {\n wrapper: 'k-treelist k-grid k-widget',\n header: 'k-header',\n alt: 'k-alt',\n rtl: 'k-rtl',\n editCell: 'k-edit-cell',\n group: 'k-treelist-group',\n gridHeader: 'k-grid-header',\n gridHeaderWrap: 'k-grid-header-wrap',\n gridContent: 'k-grid-content',\n gridContentWrap: 'k-grid-content',\n selected: 'k-state-selected',\n icon: 'k-icon',\n iconCollapse: 'k-i-collapse',\n iconExpand: 'k-i-expand',\n iconHidden: 'k-i-none',\n iconPlaceHolder: 'k-icon k-i-none',\n input: 'k-input',\n link: 'k-link',\n resizeHandle: 'k-resize-handle',\n resizeHandleInner: 'k-resize-handle-inner',\n dropPositions: 'k-i-insert-up k-i-insert-down k-i-plus k-i-insert-middle',\n dropTop: 'k-i-insert-up',\n dropBottom: 'k-i-insert-down',\n dropAdd: 'k-i-plus',\n dropMiddle: 'k-i-insert-middle',\n dropDenied: 'k-i-cancel',\n dragStatus: 'k-drag-status',\n dragClue: 'k-drag-clue',\n dragClueText: 'k-clue-text'\n };\n function createPlaceholders(options) {\n var spans = [];\n var className = options.className;\n for (var i = 0, level = options.level; i < level; i++) {\n spans.push(kendoDomElement('span', { className: className }));\n }\n return spans;\n }\n function blurActiveElement() {\n var activeElement = kendo._activeElement();\n if (activeElement && activeElement.nodeName.toLowerCase() !== 'body') {\n $(activeElement).blur();\n }\n }\n var GanttList = ui.GanttList = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n if (this.options.columns.length === 0) {\n this.options.columns.push('title');\n }\n this.dataSource = this.options.dataSource;\n this._columns();\n this._layout();\n this._domTrees();\n this._header();\n this._sortable();\n this._editable();\n this._selectable();\n this._draggable();\n this._resizable();\n this._attachEvents();\n this._adjustHeight();\n this.bind('render', function () {\n var headerCols;\n var tableCols;\n if (this.options.resizable) {\n headerCols = this.header.find('col');\n tableCols = this.content.find('col');\n this.header.find('th').not(':last').each(function (index) {\n var width = outerWidth($(this));\n headerCols.eq(index).width(width);\n tableCols.eq(index).width(width);\n });\n headerCols.last().css('width', 'auto');\n tableCols.last().css('width', 'auto');\n }\n }, true);\n },\n _adjustHeight: function () {\n this.content.height(this.element.height() - outerHeight(this.header.parent()));\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n if (this._reorderDraggable) {\n this._reorderDraggable.destroy();\n }\n if (this._tableDropArea) {\n this._tableDropArea.destroy();\n }\n if (this._contentDropArea) {\n this._contentDropArea.destroy();\n }\n if (this._columnResizable) {\n this._columnResizable.destroy();\n }\n if (this.touch) {\n this.touch.destroy();\n }\n if (this.timer) {\n clearTimeout(this.timer);\n }\n this.content.off(NS);\n this.header.find('thead').off(NS);\n this.header.find(DOT + GanttList.link).off(NS);\n this.header = null;\n this.content = null;\n this.levels = null;\n kendo.destroy(this.element);\n },\n options: {\n name: 'GanttList',\n selectable: true,\n editable: true,\n resizable: false\n },\n _attachEvents: function () {\n var that = this;\n var listStyles = GanttList.styles;\n that.content.on(CLICK + NS, 'td > span.' + listStyles.icon + ':not(.' + listStyles.iconHidden + ')', function (e) {\n var element = $(this);\n var model = that._modelFromElement(element);\n model.set('expanded', !model.get('expanded'));\n e.stopPropagation();\n });\n },\n _domTrees: function () {\n this.headerTree = new kendoDom.Tree(this.header[0]);\n this.contentTree = new kendoDom.Tree(this.content[0]);\n },\n _columns: function () {\n var columns = this.options.columns;\n var model = function () {\n this.field = '';\n this.title = '';\n this.editable = false;\n this.sortable = false;\n };\n this.columns = map(columns, function (column) {\n column = typeof column === STRING ? {\n field: column,\n title: titleFromField[column]\n } : column;\n return extend(new model(), column);\n });\n },\n _layout: function () {\n var that = this;\n var options = this.options;\n var element = this.element;\n var listStyles = GanttList.styles;\n var calculateRowHeight = function () {\n var rowHeight = typeof options.rowHeight === STRING ? options.rowHeight : options.rowHeight + 'px';\n var table = $(kendo.format(SIZE_CALCULATION_TEMPLATE, rowHeight));\n var height;\n that.content.append(table);\n height = outerHeight(table.find('tr'));\n table.remove();\n return height;\n };\n element.addClass(listStyles.wrapper).append('<div class=\\'' + listStyles.gridHeader + '\\'><div class=\\'' + listStyles.gridHeaderWrap + '\\'></div></div>').append('<div class=\\'' + listStyles.gridContentWrap + '\\'></div>');\n this.header = element.find(DOT + listStyles.gridHeaderWrap);\n this.content = element.find(DOT + listStyles.gridContent);\n if (options.rowHeight) {\n this._rowHeight = calculateRowHeight();\n }\n },\n _header: function () {\n var domTree = this.headerTree;\n var colgroup;\n var thead;\n var table;\n colgroup = kendoDomElement('colgroup', null, this._cols());\n thead = kendoDomElement('thead', { 'role': 'rowgroup' }, [kendoDomElement('tr', { 'role': 'row' }, this._ths())]);\n table = kendoDomElement('table', {\n 'style': { 'minWidth': this.options.listWidth + 'px' },\n 'role': 'grid'\n }, [\n colgroup,\n thead\n ]);\n domTree.render([table]);\n },\n _render: function (tasks) {\n var colgroup;\n var tbody;\n var table;\n var tableAttr = {\n 'style': { 'minWidth': this.options.listWidth + 'px' },\n 'tabIndex': 0,\n 'role': 'treegrid'\n };\n if (this._rowHeight) {\n tableAttr.style.height = tasks.length * this._rowHeight + 'px';\n }\n this.levels = [{\n field: null,\n value: 0\n }];\n colgroup = kendoDomElement('colgroup', null, this._cols());\n tbody = kendoDomElement('tbody', { 'role': 'rowgroup' }, this._trs(tasks));\n table = kendoDomElement('table', tableAttr, [\n colgroup,\n tbody\n ]);\n this.contentTree.render([table]);\n this.trigger('render');\n },\n _ths: function () {\n var columns = this.columns;\n var column;\n var attr;\n var ths = [];\n for (var i = 0, length = columns.length; i < length; i++) {\n column = columns[i];\n attr = {\n 'data-field': column.field,\n 'data-title': column.title,\n className: GanttList.styles.header,\n 'role': 'columnheader'\n };\n ths.push(kendoDomElement('th', attr, [kendoTextElement(column.title)]));\n }\n if (this.options.resizable) {\n ths.push(kendoDomElement('th', {\n className: GanttList.styles.header,\n 'role': 'columnheader'\n }));\n }\n return ths;\n },\n _cols: function () {\n var columns = this.columns;\n var column;\n var style;\n var width;\n var cols = [];\n for (var i = 0, length = columns.length; i < length; i++) {\n column = columns[i];\n width = column.width;\n if (width && parseInt(width, 10) !== 0) {\n style = { style: { width: typeof width === STRING ? width : width + 'px' } };\n } else {\n style = null;\n }\n cols.push(kendoDomElement('col', style, []));\n }\n if (this.options.resizable) {\n cols.push(kendoDomElement('col', { style: { width: '1px' } }));\n }\n return cols;\n },\n _trs: function (tasks) {\n var task;\n var rows = [];\n var attr;\n var className = [];\n var level;\n var listStyles = GanttList.styles;\n for (var i = 0, length = tasks.length; i < length; i++) {\n task = tasks[i];\n level = this._levels({\n idx: task.parentId,\n id: task.id,\n summary: task.summary\n });\n attr = {\n 'data-uid': task.uid,\n 'data-level': level,\n 'role': 'row'\n };\n if (task.summary) {\n attr['aria-expanded'] = task.expanded;\n }\n if (i % 2 !== 0) {\n className.push(listStyles.alt);\n }\n if (task.summary) {\n className.push(listStyles.group);\n }\n if (className.length) {\n attr.className = className.join(' ');\n }\n rows.push(this._tds({\n task: task,\n attr: attr,\n level: level\n }));\n className = [];\n }\n return rows;\n },\n _tds: function (options) {\n var children = [];\n var columns = this.columns;\n var column;\n for (var i = 0, l = columns.length; i < l; i++) {\n column = columns[i];\n children.push(this._td({\n task: options.task,\n column: column,\n level: options.level\n }));\n }\n if (this.options.resizable) {\n children.push(kendoDomElement('td', { 'role': 'gridcell' }));\n }\n return kendoDomElement('tr', options.attr, children);\n },\n _td: function (options) {\n var children = [];\n var resourcesField = this.options.resourcesField;\n var listStyles = GanttList.styles;\n var task = options.task;\n var column = options.column;\n var value = task.get(column.field);\n var formatedValue;\n var label;\n if (column.field == resourcesField) {\n value = value || [];\n formatedValue = [];\n for (var i = 0; i < value.length; i++) {\n formatedValue.push(kendo.format('{0} [{1}]', value[i].get('name'), value[i].get('formatedValue')));\n }\n formatedValue = formatedValue.join(', ');\n } else {\n formatedValue = column.format ? kendo.format(column.format, value) : value;\n }\n if (column.field === 'title') {\n children = createPlaceholders({\n level: options.level,\n className: listStyles.iconPlaceHolder\n });\n children.push(kendoDomElement('span', { className: listStyles.icon + ' ' + (task.summary ? task.expanded ? listStyles.iconCollapse : listStyles.iconExpand : listStyles.iconHidden) }));\n label = kendo.format('{0}, {1:P0}', formatedValue, task.percentComplete);\n }\n children.push(kendoDomElement('span', { 'aria-label': label }, [kendoTextElement(formatedValue)]));\n return kendoDomElement('td', { 'role': 'gridcell' }, children);\n },\n _levels: function (options) {\n var levels = this.levels;\n var level;\n var summary = options.summary;\n var idx = options.idx;\n var id = options.id;\n for (var i = 0, length = levels.length; i < length; i++) {\n level = levels[i];\n if (level.field == idx) {\n if (summary) {\n levels.push({\n field: id,\n value: level.value + 1\n });\n }\n return level.value;\n }\n }\n },\n _sortable: function () {\n var that = this;\n var resourcesField = this.options.resourcesField;\n var columns = this.columns;\n var column;\n var sortableInstance;\n var cells = this.header.find('th[' + kendo.attr('field') + ']');\n var cell;\n var changeHandler = function (e) {\n if (that.dataSource.total() === 0 || that.editable && that.editable.trigger('validate')) {\n e.preventDefault();\n }\n };\n for (var idx = 0, length = cells.length; idx < length; idx++) {\n column = columns[idx];\n if (column.sortable && column.field !== resourcesField) {\n cell = cells.eq(idx);\n sortableInstance = cell.data('kendoColumnSorter');\n if (sortableInstance) {\n sortableInstance.destroy();\n }\n cell.attr('data-' + kendo.ns + 'field', column.field).kendoColumnSorter({\n dataSource: this.dataSource,\n change: changeHandler\n });\n }\n }\n cells = null;\n },\n _selectable: function () {\n var that = this;\n var selectable = this.options.selectable;\n if (selectable) {\n this.content.on(CLICK + NS, 'tr', function (e) {\n var element = $(this);\n if (that.editable) {\n that.editable.trigger('validate');\n }\n if (!e.ctrlKey) {\n that.select(element);\n } else {\n that.clearSelection();\n }\n });\n }\n },\n select: function (value) {\n var element = this.content.find(value);\n var selectedClassName = GanttList.styles.selected;\n if (element.length) {\n element.siblings(DOT + selectedClassName).removeClass(selectedClassName).attr('aria-selected', false).end().addClass(selectedClassName).attr('aria-selected', true);\n this.trigger('change');\n return;\n }\n return this.content.find(DOT + selectedClassName);\n },\n clearSelection: function () {\n var selected = this.select();\n if (selected.length) {\n selected.removeClass(GanttList.styles.selected);\n this.trigger('change');\n }\n },\n _setDataSource: function (dataSource) {\n this.dataSource = dataSource;\n this._sortable();\n },\n _editable: function () {\n var that = this;\n var editable = this.options.editable;\n var listStyles = GanttList.styles;\n var iconSelector = 'span.' + listStyles.icon + ':not(' + listStyles.iconHidden + ')';\n var finishEdit = function () {\n var editable = that.editable;\n if (editable) {\n if (editable.end()) {\n that._closeCell();\n } else {\n editable.trigger('validate');\n }\n }\n };\n var mousedown = function (e) {\n var currentTarget = $(e.currentTarget);\n if (!currentTarget.hasClass(listStyles.editCell)) {\n blurActiveElement();\n }\n };\n if (!editable || editable.update === false) {\n return;\n }\n this._startEditHandler = function (e) {\n var td = e.currentTarget ? $(e.currentTarget) : e;\n var column = that._columnFromElement(td);\n if (that.editable) {\n return;\n }\n if (column && column.editable) {\n that._editCell({\n cell: td,\n column: column\n });\n }\n };\n that.content.on('focusin' + NS, function () {\n clearTimeout(that.timer);\n that.timer = null;\n }).on('focusout' + NS, function () {\n that.timer = setTimeout(finishEdit, 1);\n }).on('keydown' + NS, function (e) {\n if (e.keyCode === keys.ENTER) {\n e.preventDefault();\n }\n }).on('keyup' + NS, function (e) {\n var key = e.keyCode;\n var cell;\n var model;\n switch (key) {\n case keys.ENTER:\n blurActiveElement();\n finishEdit();\n break;\n case keys.ESC:\n if (that.editable) {\n cell = that._editableContainer;\n model = that._modelFromElement(cell);\n if (!that.trigger('cancel', {\n model: model,\n cell: cell\n })) {\n that._closeCell(true);\n }\n }\n break;\n }\n });\n if (!mobileOS) {\n that.content.on('mousedown' + NS, 'td', function (e) {\n mousedown(e);\n }).on('dblclick' + NS, 'td', function (e) {\n if (!$(e.target).is(iconSelector)) {\n that._startEditHandler(e);\n }\n });\n } else {\n that.touch = that.content.kendoTouch({\n filter: 'td',\n touchstart: function (e) {\n mousedown(e.touch);\n },\n doubletap: function (e) {\n if (!$(e.touch.initialTouch).is(iconSelector)) {\n that._startEditHandler(e.touch);\n }\n }\n }).data('kendoTouch');\n }\n },\n _editCell: function (options) {\n var resourcesField = this.options.resourcesField;\n var listStyles = GanttList.styles;\n var cell = options.cell;\n var column = options.column;\n var model = this._modelFromElement(cell);\n var modelCopy = this.dataSource._createNewModel(model.toJSON());\n var field = modelCopy.fields[column.field] || modelCopy[column.field];\n var validation = field.validation;\n var DATATYPE = kendo.attr('type');\n var BINDING = kendo.attr('bind');\n var FORMAT = kendo.attr('format');\n var attr = {\n 'name': column.field,\n 'required': field.validation ? field.validation.required === true : false\n };\n var editor;\n if (column.field === resourcesField) {\n column.editor(cell, modelCopy);\n return;\n }\n this._editableContent = cell.children().detach();\n this._editableContainer = cell;\n cell.data('modelCopy', modelCopy);\n if ((field.type === 'date' || $.type(field) === 'date') && (!column.format || /H|m|s|F|g|u/.test(column.format))) {\n attr[BINDING] = 'value:' + column.field;\n attr[DATATYPE] = 'date';\n if (column.format) {\n attr[FORMAT] = kendo._extractFormat(column.format);\n }\n editor = function (container, options) {\n $('<input type=\"text\"/>').attr(attr).appendTo(container).kendoDateTimePicker({ format: options.format });\n };\n }\n this.editable = cell.addClass(listStyles.editCell).kendoEditable({\n fields: {\n field: column.field,\n format: column.format,\n editor: column.editor || editor\n },\n model: modelCopy,\n clearContainer: false\n }).data('kendoEditable');\n if (validation && validation.dateCompare && isFunction(validation.dateCompare) && validation.message) {\n $('<span ' + kendo.attr('for') + '=\"' + column.field + '\" class=\"k-invalid-msg\"/>').hide().appendTo(cell);\n cell.find('[name=' + column.field + ']').attr(kendo.attr('dateCompare-msg'), validation.message);\n }\n this.editable.bind('validate', function (e) {\n var focusable = this.element.find(':kendoFocusable:first').focus();\n if (oldIE) {\n focusable.focus();\n }\n e.preventDefault();\n });\n if (this.trigger('edit', {\n model: model,\n cell: cell\n })) {\n this._closeCell(true);\n }\n },\n _closeCell: function (cancelUpdate) {\n var listStyles = GanttList.styles;\n var cell = this._editableContainer;\n var model = this._modelFromElement(cell);\n var column = this._columnFromElement(cell);\n var field = column.field;\n var copy = cell.data('modelCopy');\n var taskInfo = {};\n taskInfo[field] = copy.get(field);\n cell.empty().removeData('modelCopy').removeClass(listStyles.editCell).append(this._editableContent);\n this.editable.unbind();\n this.editable.destroy();\n this.editable = null;\n this._editableContainer = null;\n this._editableContent = null;\n if (!cancelUpdate) {\n if (field === 'start') {\n taskInfo.end = new Date(taskInfo.start.getTime() + model.duration());\n }\n this.trigger('update', {\n task: model,\n updateInfo: taskInfo\n });\n }\n },\n _draggable: function () {\n var that = this;\n var draggedTask = null;\n var dropAllowed = true;\n var dropTarget;\n var listStyles = GanttList.styles;\n var isRtl = kendo.support.isRtl(this.element);\n var selector = 'tr[' + kendo.attr('level') + ' = 0]:last';\n var action = {};\n var editable = this.options.editable;\n var clear = function () {\n draggedTask = null;\n dropTarget = null;\n dropAllowed = true;\n action = {};\n };\n var allowDrop = function (task) {\n var parent = task;\n while (parent) {\n if (draggedTask.get('id') === parent.get('id')) {\n dropAllowed = false;\n break;\n }\n parent = that.dataSource.taskParent(parent);\n }\n };\n var defineLimits = function () {\n var height = $(dropTarget).height();\n var offsetTop = kendo.getOffset(dropTarget).top;\n extend(dropTarget, {\n beforeLimit: offsetTop + height * 0.25,\n afterLimit: offsetTop + height * 0.75\n });\n };\n var defineAction = function (coordinate) {\n if (!dropTarget) {\n return;\n }\n var location = coordinate.location;\n var className = listStyles.dropAdd;\n var command = 'add';\n var level = parseInt(dropTarget.attr(kendo.attr('level')), 10);\n var sibling;\n if (location <= dropTarget.beforeLimit) {\n sibling = dropTarget.prev();\n className = listStyles.dropTop;\n command = 'insert-before';\n } else if (location >= dropTarget.afterLimit) {\n sibling = dropTarget.next();\n className = listStyles.dropBottom;\n command = 'insert-after';\n }\n if (sibling && parseInt(sibling.attr(kendo.attr('level')), 10) === level) {\n className = listStyles.dropMiddle;\n }\n action.className = className;\n action.command = command;\n };\n var status = function () {\n return that._reorderDraggable.hint.children(DOT + listStyles.dragStatus).removeClass(listStyles.dropPositions);\n };\n if (!editable || editable.reorder === false || editable.update === false) {\n return;\n }\n this._reorderDraggable = this.content.kendoDraggable({\n distance: 10,\n holdToDrag: mobileOS,\n group: 'listGroup',\n filter: 'tr[data-uid]',\n ignore: DOT + listStyles.input,\n hint: function (target) {\n return $('<div class=\"' + listStyles.header + ' ' + listStyles.dragClue + '\"/>').css({\n width: 300,\n paddingLeft: target.css('paddingLeft'),\n paddingRight: target.css('paddingRight'),\n lineHeight: target.height() + 'px',\n paddingTop: target.css('paddingTop'),\n paddingBottom: target.css('paddingBottom')\n }).append('<span class=\"' + listStyles.icon + ' ' + listStyles.dragStatus + '\" /><span class=\"' + listStyles.dragClueText + '\"/>');\n },\n cursorOffset: {\n top: -20,\n left: 0\n },\n container: this.content,\n 'dragstart': function (e) {\n var editable = that.editable;\n if (editable && editable.reorder !== false && editable.trigger('validate')) {\n e.preventDefault();\n return;\n }\n draggedTask = that._modelFromElement(e.currentTarget);\n this.hint.children(DOT + listStyles.dragClueText).text(draggedTask.get('title'));\n if (isRtl) {\n this.hint.addClass(listStyles.rtl);\n }\n },\n 'drag': function (e) {\n if (dropAllowed) {\n defineAction(e.y);\n status().addClass(action.className);\n }\n },\n 'dragend': function () {\n clear();\n },\n 'dragcancel': function () {\n clear();\n }\n }).data('kendoDraggable');\n this._tableDropArea = this.content.kendoDropTargetArea({\n distance: 0,\n group: 'listGroup',\n filter: 'tr[data-uid]',\n 'dragenter': function (e) {\n dropTarget = e.dropTarget;\n allowDrop(that._modelFromElement(dropTarget));\n defineLimits();\n status().toggleClass(listStyles.dropDenied, !dropAllowed);\n },\n 'dragleave': function () {\n dropAllowed = true;\n status();\n },\n 'drop': function () {\n var target = that._modelFromElement(dropTarget);\n var orderId = target.orderId;\n var taskInfo = { parentId: target.parentId };\n if (dropAllowed) {\n switch (action.command) {\n case 'add':\n taskInfo.parentId = target.id;\n break;\n case 'insert-before':\n if (target.parentId === draggedTask.parentId && target.orderId > draggedTask.orderId) {\n taskInfo.orderId = orderId - 1;\n } else {\n taskInfo.orderId = orderId;\n }\n break;\n case 'insert-after':\n if (target.parentId === draggedTask.parentId && target.orderId > draggedTask.orderId) {\n taskInfo.orderId = orderId;\n } else {\n taskInfo.orderId = orderId + 1;\n }\n break;\n }\n that.trigger('update', {\n task: draggedTask,\n updateInfo: taskInfo\n });\n }\n }\n }).data('kendoDropTargetArea');\n this._contentDropArea = this.element.kendoDropTargetArea({\n distance: 0,\n group: 'listGroup',\n filter: DOT + listStyles.gridContent,\n 'drop': function () {\n var target = that._modelFromElement(that.content.find(selector));\n var orderId = target.orderId;\n var taskInfo = {\n parentId: null,\n orderId: draggedTask.parentId !== null ? orderId + 1 : orderId\n };\n that.trigger('update', {\n task: draggedTask,\n updateInfo: taskInfo\n });\n }\n }).data('kendoDropTargetArea');\n },\n _resizable: function () {\n var that = this;\n var listStyles = GanttList.styles;\n var positionResizeHandle = function (e) {\n var th = $(e.currentTarget);\n var resizeHandle = that.resizeHandle;\n var position = th.position();\n var left = position.left;\n var cellWidth = outerWidth(th);\n var container = th.closest('div');\n var clientX = e.clientX + $(window).scrollLeft();\n var indicatorWidth = that.options.columnResizeHandleWidth;\n left += container.scrollLeft();\n if (!resizeHandle) {\n resizeHandle = that.resizeHandle = $('<div class=\"' + listStyles.resizeHandle + '\"><div class=\"' + listStyles.resizeHandleInner + '\" /></div>');\n }\n var cellOffset = th.offset().left + cellWidth;\n var show = clientX > cellOffset - indicatorWidth && clientX < cellOffset + indicatorWidth;\n if (!show) {\n resizeHandle.hide();\n return;\n }\n container.append(resizeHandle);\n resizeHandle.show().css({\n top: position.top,\n left: left + cellWidth - indicatorWidth - 1,\n height: outerHeight(th),\n width: indicatorWidth * 3\n }).data('th', th);\n };\n if (!this.options.resizable) {\n return;\n }\n if (this._columnResizable) {\n this._columnResizable.destroy();\n }\n this.header.find('thead').on('mousemove' + NS, 'th', positionResizeHandle);\n this._columnResizable = this.header.kendoResizable({\n handle: DOT + listStyles.resizeHandle,\n start: function (e) {\n var th = $(e.currentTarget).data('th');\n var colSelector = 'col:eq(' + th.index() + ')';\n var header = that.header.find('table');\n var contentTable = that.content.find('table');\n that.element.addClass('k-grid-column-resizing');\n this.col = contentTable.children('colgroup').find(colSelector).add(header.find(colSelector));\n this.th = th;\n this.startLocation = e.x.location;\n this.columnWidth = outerWidth(th);\n this.table = header.add(contentTable);\n this.totalWidth = this.table.width() - outerWidth(header.find('th:last'));\n },\n resize: function (e) {\n var minColumnWidth = 11;\n var delta = e.x.location - this.startLocation;\n if (this.columnWidth + delta < minColumnWidth) {\n delta = minColumnWidth - this.columnWidth;\n }\n this.table.css({ 'minWidth': this.totalWidth + delta });\n this.col.width(this.columnWidth + delta);\n },\n resizeend: function () {\n that.element.removeClass('k-grid-column-resizing');\n var oldWidth = Math.floor(this.columnWidth);\n var newWidth = Math.floor(outerWidth(this.th));\n var column = that.columns[this.th.index()];\n that.trigger('columnResize', {\n column: column,\n oldWidth: oldWidth,\n newWidth: newWidth\n });\n this.table = this.col = this.th = null;\n }\n }).data('kendoResizable');\n },\n _modelFromElement: function (element) {\n var row = element.closest('tr');\n var model = this.dataSource.getByUid(row.attr(kendo.attr('uid')));\n return model;\n },\n _columnFromElement: function (element) {\n var td = element.closest('td');\n var tr = td.parent();\n var idx = tr.children().index(td);\n return this.columns[idx];\n }\n });\n extend(true, ui.GanttList, { styles: listStyles });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.gantt.timeline', [\n 'kendo.dom',\n 'kendo.touch',\n 'kendo.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'gantt.timeline',\n name: 'Gantt Timeline',\n category: 'web',\n description: 'The Gantt Timeline',\n depends: [\n 'dom',\n 'touch',\n 'draganddrop'\n ],\n hidden: true\n };\n (function ($) {\n var Widget = kendo.ui.Widget;\n var kendoDomElement = kendo.dom.element;\n var kendoTextElement = kendo.dom.text;\n var kendoHtmlElement = kendo.dom.html;\n var isPlainObject = $.isPlainObject;\n var outerWidth = kendo._outerWidth;\n var outerHeight = kendo._outerHeight;\n var extend = $.extend;\n var proxy = $.proxy;\n var browser = kendo.support.browser;\n var isRtl = false;\n var keys = kendo.keys;\n var Query = kendo.data.Query;\n var STRING = 'string';\n var NS = '.kendoGanttTimeline';\n var CLICK = 'click';\n var DBLCLICK = 'dblclick';\n var MOUSEMOVE = 'mousemove';\n var MOUSEENTER = 'mouseenter';\n var MOUSELEAVE = 'mouseleave';\n var KEYDOWN = 'keydown';\n var DOT = '.';\n var TIME_HEADER_TEMPLATE = kendo.template('#=kendo.toString(start, \\'t\\')#');\n var DAY_HEADER_TEMPLATE = kendo.template('#=kendo.toString(start, \\'ddd M/dd\\')#');\n var WEEK_HEADER_TEMPLATE = kendo.template('#=kendo.toString(start, \\'ddd M/dd\\')# - #=kendo.toString(kendo.date.addDays(end, -1), \\'ddd M/dd\\')#');\n var MONTH_HEADER_TEMPLATE = kendo.template('#=kendo.toString(start, \\'MMM\\')#');\n var YEAR_HEADER_TEMPLATE = kendo.template('#=kendo.toString(start, \\'yyyy\\')#');\n var RESIZE_HINT = kendo.template('<div class=\"#=styles.marquee#\">' + '<div class=\"#=styles.marqueeColor#\"></div>' + '</div>');\n var RESIZE_TOOLTIP_TEMPLATE = kendo.template('<div style=\"z-index: 100002;\" class=\"#=styles.tooltipWrapper#\">' + '<div class=\"#=styles.tooltipContent#\">' + '<div>#=messages.start#: #=kendo.toString(start, format)#</div>' + '<div>#=messages.end#: #=kendo.toString(end, format)#</div>' + '</div>' + '</div>');\n var PERCENT_RESIZE_TOOLTIP_TEMPLATE = kendo.template('<div style=\"z-index: 100002;\" class=\"#=styles.tooltipWrapper#\" >' + '<div class=\"#=styles.tooltipContent#\">#=text#%</div>' + '<div class=\"#=styles.tooltipCallout#\" style=\"left:13px;\"></div>' + '</div>');\n var TASK_TOOLTIP_TEMPLATE = kendo.template('<div class=\"#=styles.taskDetails#\">' + '<strong>#=task.title#</strong>' + '<div class=\"#=styles.taskDetailsPercent#\">#=kendo.toString(task.percentComplete, \"p0\")#</div>' + '<ul class=\"#=styles.reset#\">' + '<li>#=messages.start#: #=kendo.toString(task.start, \"h:mm tt ddd, MMM d\")#</li>' + '<li>#=messages.end#: #=kendo.toString(task.end, \"h:mm tt ddd, MMM d\")#</li>' + '</ul>' + '</div>');\n var SIZE_CALCULATION_TEMPLATE = '<table style=\\'visibility: hidden;\\'>' + '<tbody>' + '<tr style=\\'height:{0}\\'>' + '<td> </td>' + '</tr>' + '</tbody>' + '</table>';\n var defaultViews = {\n day: { type: 'kendo.ui.GanttDayView' },\n week: { type: 'kendo.ui.GanttWeekView' },\n month: { type: 'kendo.ui.GanttMonthView' },\n year: { type: 'kendo.ui.GanttYearView' }\n };\n function trimOptions(options) {\n delete options.name;\n delete options.prefix;\n delete options.views;\n return options;\n }\n function getWorkDays(options) {\n var workDays = [];\n var dayIndex = options.workWeekStart;\n workDays.push(dayIndex);\n while (options.workWeekEnd != dayIndex) {\n if (dayIndex > 6) {\n dayIndex -= 7;\n } else {\n dayIndex++;\n }\n workDays.push(dayIndex);\n }\n return workDays;\n }\n function blurActiveElement() {\n var activeElement = kendo._activeElement();\n if (activeElement && activeElement.nodeName.toLowerCase() !== 'body') {\n $(activeElement).blur();\n }\n }\n var viewStyles = {\n alt: 'k-alt',\n reset: 'k-reset',\n nonWorking: 'k-nonwork-hour',\n header: 'k-header',\n gridHeader: 'k-grid-header',\n gridHeaderWrap: 'k-grid-header-wrap',\n gridContent: 'k-grid-content',\n tasksWrapper: 'k-gantt-tables',\n rowsTable: 'k-gantt-rows',\n columnsTable: 'k-gantt-columns',\n tasksTable: 'k-gantt-tasks',\n dependenciesWrapper: 'k-gantt-dependencies',\n resource: 'k-resource',\n resourceAlt: 'k-resource k-alt',\n task: 'k-task',\n taskSingle: 'k-task-single',\n taskMilestone: 'k-task-milestone',\n taskSummary: 'k-task-summary',\n taskWrap: 'k-task-wrap',\n taskMilestoneWrap: 'k-milestone-wrap',\n resourcesWrap: 'k-resources-wrap',\n taskDot: 'k-task-dot',\n taskDotStart: 'k-task-start',\n taskDotEnd: 'k-task-end',\n taskDragHandle: 'k-task-draghandle',\n taskContent: 'k-task-content',\n taskTemplate: 'k-task-template',\n taskActions: 'k-task-actions',\n taskDelete: 'k-task-delete',\n taskComplete: 'k-task-complete',\n taskDetails: 'k-task-details',\n taskDetailsPercent: 'k-task-pct',\n link: 'k-link',\n icon: 'k-icon',\n iconDelete: 'k-i-close',\n taskResizeHandle: 'k-resize-handle',\n taskResizeHandleWest: 'k-resize-w',\n taskResizeHandleEast: 'k-resize-e',\n taskSummaryProgress: 'k-task-summary-progress',\n taskSummaryComplete: 'k-task-summary-complete',\n line: 'k-line',\n lineHorizontal: 'k-line-h',\n lineVertical: 'k-line-v',\n arrowWest: 'k-arrow-w',\n arrowEast: 'k-arrow-e',\n dragHint: 'k-drag-hint',\n dependencyHint: 'k-dependency-hint',\n tooltipWrapper: 'k-widget k-tooltip k-popup k-group k-reset',\n tooltipContent: 'k-tooltip-content',\n tooltipCallout: 'k-callout k-callout-s',\n callout: 'k-callout',\n marquee: 'k-marquee k-gantt-marquee',\n marqueeColor: 'k-marquee-color'\n };\n var GanttView = kendo.ui.GanttView = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this.title = this.options.title || this.options.name;\n this.header = this.element.find(DOT + GanttView.styles.gridHeader);\n this.content = this.element.find(DOT + GanttView.styles.gridContent);\n this.contentWidth = this.content.width();\n this._workDays = getWorkDays(this.options);\n this._headerTree = options.headerTree;\n this._taskTree = options.taskTree;\n this._taskTemplate = options.taskTemplate ? kendo.template(options.taskTemplate, extend({}, kendo.Template, options.templateSettings)) : null;\n this._dependencyTree = options.dependencyTree;\n this._taskCoordinates = {};\n this._currentTime();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n clearTimeout(this._tooltipTimeout);\n this.headerRow = null;\n this.header = null;\n this.content = null;\n this._dragHint = null;\n this._resizeHint = null;\n this._resizeTooltip = null;\n this._taskTooltip = null;\n this._percentCompleteResizeTooltip = null;\n this._headerTree = null;\n this._taskTree = null;\n this._dependencyTree = null;\n },\n options: {\n showWorkHours: false,\n showWorkDays: false,\n workDayStart: new Date(1980, 1, 1, 8, 0, 0),\n workDayEnd: new Date(1980, 1, 1, 17, 0, 0),\n workWeekStart: 1,\n workWeekEnd: 5,\n hourSpan: 1,\n slotSize: 100,\n currentTimeMarker: { updateInterval: 10000 }\n },\n renderLayout: function () {\n this._slots = this._createSlots();\n this._tableWidth = this._calculateTableWidth();\n this.createLayout(this._layout());\n this._slotDimensions();\n this._adjustHeight();\n this.content.find(DOT + GanttView.styles.dependenciesWrapper).width(this._tableWidth);\n },\n _adjustHeight: function () {\n this.content.height(this.element.height() - outerHeight(this.header));\n },\n createLayout: function (rows) {\n var headers = this._headers(rows);\n var colgroup = this._colgroup();\n var tree = this._headerTree;\n var header = kendoDomElement('thead', null, headers);\n var table = kendoDomElement('table', { style: { width: this._tableWidth + 'px' } }, [\n colgroup,\n header\n ]);\n tree.render([table]);\n this.headerRow = this.header.find('table:first tr').last();\n },\n _slotDimensions: function () {\n var headers = this.headerRow[0].children;\n var slots = this._timeSlots();\n var slot;\n var header;\n for (var i = 0, length = headers.length; i < length; i++) {\n header = headers[i];\n slot = slots[i];\n slot.offsetLeft = header.offsetLeft;\n slot.offsetWidth = header.offsetWidth;\n }\n },\n render: function (tasks) {\n var taskCount = tasks.length;\n var styles = GanttView.styles;\n var contentTable;\n var rowsTable = this._rowsTable(taskCount);\n var columnsTable = this._columnsTable(taskCount);\n var tasksTable = this._tasksTable(tasks);\n var currentTimeMarker = this.options.currentTimeMarker;\n var calculatedSize = this.options.calculatedSize;\n var totalHeight;\n this._taskTree.render([\n rowsTable,\n columnsTable,\n tasksTable\n ]);\n contentTable = this.content.find(DOT + styles.rowsTable);\n if (calculatedSize) {\n totalHeight = calculatedSize.row * tasks.length;\n this.content.find(DOT + styles.tasksTable).height(totalHeight);\n contentTable.height(totalHeight);\n }\n this._contentHeight = contentTable.height();\n this._rowHeight = calculatedSize ? calculatedSize.row : this._contentHeight / contentTable.find('tr').length;\n this.content.find(DOT + styles.columnsTable).height(this._contentHeight);\n if (currentTimeMarker !== false && currentTimeMarker.updateInterval !== undefined) {\n this._renderCurrentTime();\n }\n },\n _rowsTable: function (rowCount) {\n var rows = [];\n var row;\n var styles = GanttView.styles;\n var attributes = [\n null,\n { className: styles.alt }\n ];\n for (var i = 0; i < rowCount; i++) {\n row = kendoDomElement('tr', attributes[i % 2], [kendoDomElement('td', null, [kendoTextElement('\\xA0')])]);\n rows.push(row);\n }\n return this._createTable(1, rows, { className: styles.rowsTable });\n },\n _columnsTable: function () {\n var cells = [];\n var row;\n var styles = GanttView.styles;\n var slots = this._timeSlots();\n var slotsCount = slots.length;\n var slot;\n var slotSpan;\n var totalSpan = 0;\n var attributes;\n for (var i = 0; i < slotsCount; i++) {\n slot = slots[i];\n attributes = {};\n slotSpan = slot.span;\n totalSpan += slotSpan;\n if (slotSpan !== 1) {\n attributes.colspan = slotSpan;\n }\n if (slot.isNonWorking) {\n attributes.className = styles.nonWorking;\n }\n cells.push(kendoDomElement('td', attributes, [kendoTextElement('\\xA0')]));\n }\n row = kendoDomElement('tr', null, cells);\n return this._createTable(totalSpan, [row], { className: styles.columnsTable });\n },\n _tasksTable: function (tasks) {\n var rows = [];\n var row;\n var cell;\n var position;\n var task;\n var styles = GanttView.styles;\n var coordinates = this._taskCoordinates = {};\n var size = this._calculateMilestoneWidth();\n var milestoneWidth = Math.round(size.width);\n var resourcesField = this.options.resourcesField;\n var className = [\n styles.resource,\n styles.resourceAlt\n ];\n var calculatedSize = this.options.calculatedSize;\n var resourcesPosition;\n var resourcesMargin = this._calculateResourcesMargin();\n var taskBorderWidth = this._calculateTaskBorderWidth();\n var resourceStyle;\n var addCoordinates = function (rowIndex) {\n var taskLeft;\n var taskRight;\n taskLeft = position.left;\n taskRight = taskLeft + position.width;\n if (task.isMilestone()) {\n taskLeft -= milestoneWidth / 2;\n taskRight = taskLeft + milestoneWidth;\n }\n coordinates[task.id] = {\n start: taskLeft,\n end: taskRight,\n rowIndex: rowIndex\n };\n };\n for (var i = 0, l = tasks.length; i < l; i++) {\n task = tasks[i];\n position = this._taskPosition(task);\n position.borderWidth = taskBorderWidth;\n row = kendoDomElement('tr', null);\n cell = kendoDomElement('td');\n if (task.start <= this.end && task.end >= this.start) {\n cell.children.push(this._renderTask(tasks[i], position));\n if (task[resourcesField] && task[resourcesField].length) {\n if (isRtl) {\n resourcesPosition = this._tableWidth - position.left;\n } else {\n resourcesPosition = Math.max(position.width || size.clientWidth, 0) + position.left;\n }\n resourceStyle = { width: this._tableWidth - (resourcesPosition + resourcesMargin) + 'px' };\n resourceStyle[isRtl ? 'right' : 'left'] = resourcesPosition + 'px';\n if (calculatedSize) {\n resourceStyle.height = calculatedSize.cell + 'px';\n }\n cell.children.push(kendoDomElement('div', {\n className: styles.resourcesWrap,\n style: resourceStyle\n }, this._renderResources(task[resourcesField], className[i % 2])));\n }\n addCoordinates(i);\n }\n row.children.push(cell);\n rows.push(row);\n }\n return this._createTable(1, rows, { className: GanttView.styles.tasksTable });\n },\n _createTable: function (colspan, rows, styles) {\n var cols = [];\n var colgroup;\n var tbody;\n for (var i = 0; i < colspan; i++) {\n cols.push(kendoDomElement('col'));\n }\n colgroup = kendoDomElement('colgroup', null, cols);\n tbody = kendoDomElement('tbody', null, rows);\n if (!styles.style) {\n styles.style = {};\n }\n styles.style.width = this._tableWidth + 'px';\n return kendoDomElement('table', styles, [\n colgroup,\n tbody\n ]);\n },\n _calculateTableWidth: function () {\n var slots = this._timeSlots();\n var maxSpan = 0;\n var totalSpan = 0;\n var currentSpan;\n var tableWidth;\n for (var i = 0, length = slots.length; i < length; i++) {\n currentSpan = slots[i].span;\n totalSpan += currentSpan;\n if (currentSpan > maxSpan) {\n maxSpan = currentSpan;\n }\n }\n tableWidth = Math.round(totalSpan * this.options.slotSize / maxSpan);\n return tableWidth;\n },\n _calculateMilestoneWidth: function () {\n var size;\n var className = GanttView.styles.task + ' ' + GanttView.styles.taskMilestone;\n var milestone = $('<div class=\\'' + className + '\\' style=\\'visibility: hidden; position: absolute\\'>');\n var boundingClientRect;\n this.content.append(milestone);\n boundingClientRect = milestone[0].getBoundingClientRect();\n size = {\n 'width': boundingClientRect.right - boundingClientRect.left,\n 'clientWidth': milestone[0].clientWidth\n };\n milestone.remove();\n return size;\n },\n _calculateResourcesMargin: function () {\n var margin;\n var wrapper = $('<div class=\\'' + GanttView.styles.resourcesWrap + '\\' style=\\'visibility: hidden; position: absolute\\'>');\n this.content.append(wrapper);\n margin = parseInt(wrapper.css(isRtl ? 'margin-right' : 'margin-left'), 10);\n wrapper.remove();\n return margin;\n },\n _calculateTaskBorderWidth: function () {\n var width;\n var className = GanttView.styles.task + ' ' + GanttView.styles.taskSingle;\n var task = $('<div class=\\'' + className + '\\' style=\\'visibility: hidden; position: absolute\\'>');\n var computedStyle;\n this.content.append(task);\n computedStyle = kendo.getComputedStyles(task[0], ['border-left-width']);\n width = parseFloat(computedStyle['border-left-width'], 10);\n task.remove();\n return width;\n },\n _renderTask: function (task, position) {\n var taskWrapper;\n var taskElement;\n var editable = this.options.editable;\n var progressHandleOffset;\n var taskLeft = position.left;\n var styles = GanttView.styles;\n var wrapClassName = styles.taskWrap;\n var calculatedSize = this.options.calculatedSize;\n var dragHandleStyle = {};\n var taskWrapAttr = {\n className: wrapClassName,\n style: { left: taskLeft + 'px' }\n };\n if (calculatedSize) {\n taskWrapAttr.style.height = calculatedSize.cell + 'px';\n }\n if (task.summary) {\n taskElement = this._renderSummary(task, position);\n } else if (task.isMilestone()) {\n taskElement = this._renderMilestone(task, position);\n taskWrapAttr.className += ' ' + styles.taskMilestoneWrap;\n } else {\n taskElement = this._renderSingleTask(task, position);\n }\n taskWrapper = kendoDomElement('div', taskWrapAttr, [taskElement]);\n if (editable && editable.dependencyCreate !== false) {\n taskWrapper.children.push(kendoDomElement('div', { className: styles.taskDot + ' ' + styles.taskDotStart }));\n taskWrapper.children.push(kendoDomElement('div', { className: styles.taskDot + ' ' + styles.taskDotEnd }));\n }\n if (!task.summary && !task.isMilestone() && editable && editable.dragPercentComplete !== false && editable.update !== false && this._taskTemplate === null) {\n progressHandleOffset = Math.round(position.width * task.percentComplete);\n dragHandleStyle[isRtl ? 'right' : 'left'] = progressHandleOffset + 'px';\n taskWrapper.children.push(kendoDomElement('div', {\n className: styles.taskDragHandle,\n style: dragHandleStyle\n }));\n }\n return taskWrapper;\n },\n _renderSingleTask: function (task, position) {\n var styles = GanttView.styles;\n var progressWidth = Math.round(position.width * task.percentComplete);\n var taskChildren = [];\n var taskContent;\n var editable = this.options.editable;\n if (this._taskTemplate !== null) {\n taskContent = kendoHtmlElement(this._taskTemplate(task));\n } else {\n taskContent = kendoTextElement(task.title);\n taskChildren.push(kendoDomElement('div', {\n className: styles.taskComplete,\n style: { width: progressWidth + 'px' }\n }));\n }\n var content = kendoDomElement('div', { className: styles.taskContent }, [kendoDomElement('div', { className: styles.taskTemplate }, [taskContent])]);\n taskChildren.push(content);\n if (editable) {\n if (editable.destroy !== false) {\n content.children.push(kendoDomElement('span', { className: styles.taskActions }, [kendoDomElement('a', {\n className: styles.link + ' ' + styles.taskDelete,\n href: '#'\n }, [kendoDomElement('span', { className: styles.icon + ' ' + styles.iconDelete })])]));\n }\n if (editable.resize !== false && editable.update !== false) {\n content.children.push(kendoDomElement('span', { className: styles.taskResizeHandle + ' ' + styles.taskResizeHandleWest }));\n content.children.push(kendoDomElement('span', { className: styles.taskResizeHandle + ' ' + styles.taskResizeHandleEast }));\n }\n }\n var element = kendoDomElement('div', {\n className: styles.task + ' ' + styles.taskSingle,\n 'data-uid': task.uid,\n style: { width: Math.max(position.width - position.borderWidth * 2, 0) + 'px' }\n }, taskChildren);\n return element;\n },\n _renderMilestone: function (task) {\n var styles = GanttView.styles;\n var element = kendoDomElement('div', {\n className: styles.task + ' ' + styles.taskMilestone,\n 'data-uid': task.uid\n });\n return element;\n },\n _renderSummary: function (task, position) {\n var styles = GanttView.styles;\n var progressWidth = Math.round(position.width * task.percentComplete);\n var element = kendoDomElement('div', {\n className: styles.task + ' ' + styles.taskSummary,\n 'data-uid': task.uid,\n style: { width: position.width + 'px' }\n }, [kendoDomElement('div', {\n className: styles.taskSummaryProgress,\n style: { width: progressWidth + 'px' }\n }, [kendoDomElement('div', {\n className: styles.taskSummaryComplete,\n style: { width: position.width + 'px' }\n })])]);\n return element;\n },\n _renderResources: function (resources, className) {\n var children = [];\n var resource;\n for (var i = 0, length = resources.length; i < length; i++) {\n resource = resources[i];\n children.push(kendoDomElement('span', {\n className: className,\n style: { 'color': resource.get('color') }\n }, [kendoTextElement(resource.get('name'))]));\n }\n if (isRtl) {\n children.reverse();\n }\n return children;\n },\n _taskPosition: function (task) {\n var round = Math.round;\n var startLeft = round(this._offset(isRtl ? task.end : task.start));\n var endLeft = round(this._offset(isRtl ? task.start : task.end));\n return {\n left: startLeft,\n width: endLeft - startLeft\n };\n },\n _offset: function (date) {\n var slots = this._timeSlots();\n var slot;\n var startOffset;\n var slotDuration;\n var slotOffset = 0;\n var startIndex;\n if (!slots.length) {\n return 0;\n }\n startIndex = this._slotIndex('start', date);\n slot = slots[startIndex];\n if (slot.end < date) {\n slotOffset = slot.offsetWidth;\n } else if (slot.start <= date) {\n startOffset = date - slot.start;\n slotDuration = slot.end - slot.start;\n slotOffset = startOffset / slotDuration * slot.offsetWidth;\n }\n if (isRtl) {\n slotOffset = slot.offsetWidth + 1 - slotOffset;\n }\n return slot.offsetLeft + slotOffset;\n },\n _slotIndex: function (field, value, reverse) {\n var slots = this._timeSlots();\n var startIdx = 0;\n var endIdx = slots.length - 1;\n var middle;\n if (reverse) {\n slots = [].slice.call(slots).reverse();\n }\n do {\n middle = Math.ceil((endIdx + startIdx) / 2);\n if (slots[middle][field] < value) {\n startIdx = middle;\n } else {\n if (middle === endIdx) {\n middle--;\n }\n endIdx = middle;\n }\n } while (startIdx !== endIdx);\n if (reverse) {\n startIdx = slots.length - 1 - startIdx;\n }\n return startIdx;\n },\n _timeByPosition: function (x, snap, snapToEnd) {\n var slot = this._slotByPosition(x);\n if (snap) {\n return snapToEnd ? slot.end : slot.start;\n }\n var offsetLeft = x - $(DOT + GanttView.styles.tasksTable).offset().left;\n var duration = slot.end - slot.start;\n var slotOffset = offsetLeft - slot.offsetLeft;\n if (isRtl) {\n slotOffset = slot.offsetWidth - slotOffset;\n }\n return new Date(slot.start.getTime() + duration * (slotOffset / slot.offsetWidth));\n },\n _slotByPosition: function (x) {\n var offsetLeft = x - $(DOT + GanttView.styles.tasksTable).offset().left;\n var slotIndex = this._slotIndex('offsetLeft', offsetLeft, isRtl);\n return this._timeSlots()[slotIndex];\n },\n _renderDependencies: function (dependencies) {\n var elements = [];\n var tree = this._dependencyTree;\n for (var i = 0, l = dependencies.length; i < l; i++) {\n elements.push.apply(elements, this._renderDependency(dependencies[i]));\n }\n tree.render(elements);\n },\n _renderDependency: function (dependency) {\n var predecessor = this._taskCoordinates[dependency.predecessorId];\n var successor = this._taskCoordinates[dependency.successorId];\n var elements;\n var method;\n if (!predecessor || !successor) {\n return [];\n }\n method = '_render' + [\n 'FF',\n 'FS',\n 'SF',\n 'SS'\n ][isRtl ? 3 - dependency.type : dependency.type];\n elements = this[method](predecessor, successor);\n for (var i = 0, length = elements.length; i < length; i++) {\n elements[i].attr['data-uid'] = dependency.uid;\n }\n return elements;\n },\n _renderFF: function (from, to) {\n var lines = this._dependencyFF(from, to, false);\n lines[lines.length - 1].children[0] = this._arrow(true);\n return lines;\n },\n _renderSS: function (from, to) {\n var lines = this._dependencyFF(to, from, true);\n lines[0].children[0] = this._arrow(false);\n return lines.reverse();\n },\n _renderFS: function (from, to) {\n var lines = this._dependencyFS(from, to, false);\n lines[lines.length - 1].children[0] = this._arrow(false);\n return lines;\n },\n _renderSF: function (from, to) {\n var lines = this._dependencyFS(to, from, true);\n lines[0].children[0] = this._arrow(true);\n return lines.reverse();\n },\n _dependencyFF: function (from, to, reverse) {\n var that = this;\n var lines = [];\n var left = 0;\n var top = 0;\n var width = 0;\n var height = 0;\n var dir = reverse ? 'start' : 'end';\n var delta;\n var overlap = 2;\n var arrowOverlap = 1;\n var rowHeight = this._rowHeight;\n var minLineWidth = 10;\n var fromTop = from.rowIndex * rowHeight + Math.floor(rowHeight / 2) - 1;\n var toTop = to.rowIndex * rowHeight + Math.floor(rowHeight / 2) - 1;\n var styles = GanttView.styles;\n var addHorizontal = function () {\n lines.push(that._line(styles.line + ' ' + styles.lineHorizontal, {\n left: left + 'px',\n top: top + 'px',\n width: width + 'px'\n }));\n };\n var addVertical = function () {\n lines.push(that._line(styles.line + ' ' + styles.lineVertical, {\n left: left + 'px',\n top: top + 'px',\n height: height + 'px'\n }));\n };\n left = from[dir];\n top = fromTop;\n width = minLineWidth;\n delta = to[dir] - from[dir];\n if (delta > 0 !== reverse) {\n width = Math.abs(delta) + minLineWidth;\n }\n if (reverse) {\n left -= width;\n width -= arrowOverlap;\n addHorizontal();\n } else {\n addHorizontal();\n left += width - overlap;\n }\n if (toTop < top) {\n height = top - toTop;\n height += overlap;\n top = toTop;\n addVertical();\n } else {\n height = toTop - top;\n height += overlap;\n addVertical();\n top += height - overlap;\n }\n width = Math.abs(left - to[dir]);\n if (!reverse) {\n width -= arrowOverlap;\n left -= width;\n }\n addHorizontal();\n return lines;\n },\n _dependencyFS: function (from, to, reverse) {\n var that = this;\n var lines = [];\n var left = 0;\n var top = 0;\n var width = 0;\n var height = 0;\n var rowHeight = this._rowHeight;\n var minLineHeight = Math.floor(rowHeight / 2);\n var minLineWidth = 10;\n var minDistance = 2 * minLineWidth;\n var delta = to.start - from.end;\n var overlap = 2;\n var arrowOverlap = 1;\n var fromTop = from.rowIndex * rowHeight + Math.floor(rowHeight / 2) - 1;\n var toTop = to.rowIndex * rowHeight + Math.floor(rowHeight / 2) - 1;\n var styles = GanttView.styles;\n var addHorizontal = function () {\n lines.push(that._line(styles.line + ' ' + styles.lineHorizontal, {\n left: left + 'px',\n top: top + 'px',\n width: width + 'px'\n }));\n };\n var addVertical = function () {\n lines.push(that._line(styles.line + ' ' + styles.lineVertical, {\n left: left + 'px',\n top: top + 'px',\n height: height + 'px'\n }));\n };\n left = from.end;\n top = fromTop;\n width = minLineWidth;\n if (reverse) {\n left += arrowOverlap;\n if (delta > minDistance) {\n width = delta - (minLineWidth - overlap);\n }\n width -= arrowOverlap;\n }\n addHorizontal();\n left += width - overlap;\n if (delta <= minDistance) {\n height = reverse ? Math.abs(toTop - fromTop) - minLineHeight : minLineHeight;\n if (toTop < fromTop) {\n top -= height;\n height += overlap;\n addVertical();\n } else {\n addVertical();\n top += height;\n }\n width = from.end - to.start + minDistance;\n if (width < minLineWidth) {\n width = minLineWidth;\n }\n left -= width - overlap;\n addHorizontal();\n }\n if (toTop < fromTop) {\n height = top - toTop;\n top = toTop;\n height += overlap;\n addVertical();\n } else {\n height = toTop - top;\n addVertical();\n top += height;\n }\n width = to.start - left;\n if (!reverse) {\n width -= arrowOverlap;\n }\n addHorizontal();\n return lines;\n },\n _line: function (className, styles) {\n return kendoDomElement('div', {\n className: className,\n style: styles\n });\n },\n _arrow: function (direction) {\n return kendoDomElement('span', { className: direction ? GanttView.styles.arrowWest : GanttView.styles.arrowEast });\n },\n _colgroup: function () {\n var slots = this._timeSlots();\n var count = slots.length;\n var cols = [];\n for (var i = 0; i < count; i++) {\n for (var j = 0, length = slots[i].span; j < length; j++) {\n cols.push(kendoDomElement('col'));\n }\n }\n return kendoDomElement('colgroup', null, cols);\n },\n _createDragHint: function (element) {\n this._dragHint = element.clone().addClass(GanttView.styles.dragHint).css('cursor', 'move');\n element.parent().append(this._dragHint);\n },\n _updateDragHint: function (start) {\n var left = this._offset(start);\n this._dragHint.css({ 'left': left });\n },\n _removeDragHint: function () {\n this._dragHint.remove();\n this._dragHint = null;\n },\n _createResizeHint: function (task) {\n var styles = GanttView.styles;\n var taskTop = this._taskCoordinates[task.id].rowIndex * this._rowHeight;\n var tooltipHeight;\n var tooltipTop;\n var options = this.options;\n var messages = options.messages;\n this._resizeHint = $(RESIZE_HINT({ styles: styles })).css({\n 'top': 0,\n 'height': this._contentHeight\n });\n this.content.append(this._resizeHint);\n this._resizeTooltip = $(RESIZE_TOOLTIP_TEMPLATE({\n styles: styles,\n start: task.start,\n end: task.end,\n messages: messages.views,\n format: options.resizeTooltipFormat\n })).css({\n 'top': 0,\n 'left': 0\n });\n this.content.append(this._resizeTooltip);\n this._resizeTooltipWidth = outerWidth(this._resizeTooltip);\n tooltipHeight = outerHeight(this._resizeTooltip);\n tooltipTop = taskTop - tooltipHeight;\n if (tooltipTop < 0) {\n tooltipTop = taskTop + this._rowHeight;\n }\n this._resizeTooltipTop = tooltipTop;\n },\n _updateResizeHint: function (start, end, resizeStart) {\n var left = this._offset(isRtl ? end : start);\n var right = this._offset(isRtl ? start : end);\n var width = right - left;\n var tooltipLeft = resizeStart !== isRtl ? left : right;\n var tablesWidth = this._tableWidth - kendo.support.scrollbar();\n var tooltipWidth = this._resizeTooltipWidth;\n var options = this.options;\n var messages = options.messages;\n var tableOffset = $(DOT + GanttView.styles.tasksTable).offset().left - $(DOT + GanttView.styles.tasksWrapper).offset().left;\n if (isRtl) {\n left += tableOffset;\n }\n this._resizeHint.css({\n 'left': left,\n 'width': width\n });\n if (this._resizeTooltip) {\n this._resizeTooltip.remove();\n }\n tooltipLeft -= Math.round(tooltipWidth / 2);\n if (tooltipLeft < 0) {\n tooltipLeft = 0;\n } else if (tooltipLeft + tooltipWidth > tablesWidth) {\n tooltipLeft = tablesWidth - tooltipWidth;\n }\n if (isRtl) {\n tooltipLeft += tableOffset;\n }\n this._resizeTooltip = $(RESIZE_TOOLTIP_TEMPLATE({\n styles: GanttView.styles,\n start: start,\n end: end,\n messages: messages.views,\n format: options.resizeTooltipFormat\n })).css({\n 'top': this._resizeTooltipTop,\n 'left': tooltipLeft,\n 'min-width': tooltipWidth\n }).appendTo(this.content);\n },\n _removeResizeHint: function () {\n this._resizeHint.remove();\n this._resizeHint = null;\n this._resizeTooltip.remove();\n this._resizeTooltip = null;\n },\n _updatePercentCompleteTooltip: function (top, left, text) {\n this._removePercentCompleteTooltip();\n var tooltip = this._percentCompleteResizeTooltip = $(PERCENT_RESIZE_TOOLTIP_TEMPLATE({\n styles: GanttView.styles,\n text: text\n })).appendTo(this.element);\n var tooltipMiddle = Math.round(outerWidth(tooltip) / 2);\n var arrow = tooltip.find(DOT + GanttView.styles.callout);\n var arrowHeight = Math.round(outerWidth(arrow) / 2);\n tooltip.css({\n 'top': top - (outerHeight(tooltip) + arrowHeight),\n 'left': left - tooltipMiddle\n });\n arrow.css('left', tooltipMiddle - arrowHeight);\n },\n _removePercentCompleteTooltip: function () {\n if (this._percentCompleteResizeTooltip) {\n this._percentCompleteResizeTooltip.remove();\n }\n this._percentCompleteResizeTooltip = null;\n },\n _updateDependencyDragHint: function (from, to, useVML) {\n this._removeDependencyDragHint();\n if (useVML) {\n this._creteVmlDependencyDragHint(from, to);\n } else {\n this._creteDependencyDragHint(from, to);\n }\n },\n _creteDependencyDragHint: function (from, to) {\n var styles = GanttView.styles;\n var deltaX = to.x - from.x;\n var deltaY = to.y - from.y;\n var width = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n var angle = Math.atan(deltaY / deltaX);\n if (deltaX < 0) {\n angle += Math.PI;\n }\n $('<div class=\\'' + styles.line + ' ' + styles.lineHorizontal + ' ' + styles.dependencyHint + '\\'></div>').css({\n 'top': from.y,\n 'left': from.x,\n 'width': width,\n 'transform-origin': '0% 0',\n '-ms-transform-origin': '0% 0',\n '-webkit-transform-origin': '0% 0',\n 'transform': 'rotate(' + angle + 'rad)',\n '-ms-transform': 'rotate(' + angle + 'rad)',\n '-webkit-transform': 'rotate(' + angle + 'rad)'\n }).appendTo(this.content);\n },\n _creteVmlDependencyDragHint: function (from, to) {\n var hint = $('<kvml:line class=\\'' + GanttView.styles.dependencyHint + '\\' style=\\'position:absolute; top: 0px; left: 0px;\\' strokecolor=\\'black\\' strokeweight=\\'2px\\' from=\\'' + from.x + 'px,' + from.y + 'px\\' to=\\'' + to.x + 'px,' + to.y + 'px\\'' + '></kvml:line>').appendTo(this.content);\n hint[0].outerHTML = hint[0].outerHTML;\n },\n _removeDependencyDragHint: function () {\n this.content.find(DOT + GanttView.styles.dependencyHint).remove();\n },\n _createTaskTooltip: function (task, element, mouseLeft) {\n var styles = GanttView.styles;\n var options = this.options;\n var content = this.content;\n var contentOffset = content.offset();\n var contentWidth = content.width();\n var contentScrollLeft = kendo.scrollLeft(content);\n var row = $(element).parents('tr').first();\n var rowOffset = row.offset();\n var template = options.tooltip && options.tooltip.template ? kendo.template(options.tooltip.template) : TASK_TOOLTIP_TEMPLATE;\n var left = isRtl ? mouseLeft - (contentOffset.left + contentScrollLeft + kendo.support.scrollbar()) : mouseLeft - (contentOffset.left - contentScrollLeft);\n var top = rowOffset.top + outerHeight(row) - contentOffset.top + content.scrollTop();\n var tooltip = this._taskTooltip = $('<div style=\"z-index: 100002;\" class=\"' + styles.tooltipWrapper + '\" >' + '<div class=\"' + styles.taskContent + '\"></div></div>');\n var tooltipWidth;\n tooltip.css({\n 'left': left,\n 'top': top\n }).appendTo(content).find(DOT + styles.taskContent).append(template({\n styles: styles,\n task: task,\n messages: options.messages.views\n }));\n if (outerHeight(tooltip) < rowOffset.top - contentOffset.top) {\n tooltip.css('top', rowOffset.top - contentOffset.top - outerHeight(tooltip) + content.scrollTop());\n }\n tooltipWidth = outerWidth(tooltip);\n if (tooltipWidth + left - contentScrollLeft > contentWidth) {\n left -= tooltipWidth;\n if (left < contentScrollLeft) {\n left = contentScrollLeft + contentWidth - (tooltipWidth + 17);\n }\n tooltip.css('left', left);\n }\n },\n _removeTaskTooltip: function () {\n if (this._taskTooltip) {\n this._taskTooltip.remove();\n }\n this._taskTooltip = null;\n },\n _scrollTo: function (element) {\n var elementLeft = element.offset().left;\n var elementWidth = element.width();\n var elementRight = elementLeft + elementWidth;\n var row = element.closest('tr');\n var rowTop = row.offset().top;\n var rowHeight = row.height();\n var rowBottom = rowTop + rowHeight;\n var content = this.content;\n var contentOffset = content.offset();\n var contentTop = contentOffset.top;\n var contentHeight = content.height();\n var contentBottom = contentTop + contentHeight;\n var contentLeft = contentOffset.left;\n var contentWidth = content.width();\n var contentRight = contentLeft + contentWidth;\n var scrollbarWidth = kendo.support.scrollbar();\n if (rowTop < contentTop) {\n content.scrollTop(content.scrollTop() + (rowTop - contentTop));\n } else if (rowBottom > contentBottom) {\n content.scrollTop(content.scrollTop() + (rowBottom + scrollbarWidth - contentBottom));\n }\n if (elementLeft < contentLeft && elementWidth > contentWidth && elementRight < contentRight || elementRight > contentRight && elementWidth < contentWidth) {\n content.scrollLeft(content.scrollLeft() + (elementRight + scrollbarWidth - contentRight));\n } else if (elementRight > contentRight && elementWidth > contentWidth && elementLeft > contentLeft || elementLeft < contentLeft && elementWidth < contentWidth) {\n content.scrollLeft(content.scrollLeft() + (elementLeft - contentLeft));\n }\n },\n _scrollToDate: function (date) {\n var viewStart = this.start;\n var viewEnd = this.end;\n var offset;\n if (date >= viewStart && date < viewEnd) {\n offset = this._offset(date);\n if (kendo.support.isRtl(this.element)) {\n offset = this._tableWidth - offset;\n }\n kendo.scrollLeft(this.content, offset);\n }\n },\n _timeSlots: function () {\n if (!this._slots || !this._slots.length) {\n return [];\n }\n return this._slots[this._slots.length - 1];\n },\n _headers: function (columnLevels) {\n var rows = [];\n var level;\n var headers;\n var column;\n var headerText;\n var styles = GanttView.styles;\n for (var levelIndex = 0, levelCount = columnLevels.length; levelIndex < levelCount; levelIndex++) {\n level = columnLevels[levelIndex];\n headers = [];\n for (var columnIndex = 0, columnCount = level.length; columnIndex < columnCount; columnIndex++) {\n column = level[columnIndex];\n headerText = kendoTextElement(column.text);\n headers.push(kendoDomElement('th', {\n colspan: column.span,\n className: styles.header + (column.isNonWorking ? ' ' + styles.nonWorking : '')\n }, [headerText]));\n }\n rows.push(kendoDomElement('tr', null, headers));\n }\n return rows;\n },\n _hours: function (start, end) {\n var slotEnd;\n var slots = [];\n var options = this.options;\n var workDayStart = options.workDayStart.getHours();\n var workDayEnd = options.workDayEnd.getHours();\n var isWorkHour;\n var hours;\n var hourSpan = options.hourSpan;\n start = new Date(start);\n end = new Date(end);\n while (start < end) {\n slotEnd = new Date(start);\n hours = slotEnd.getHours();\n isWorkHour = hours >= workDayStart && hours < workDayEnd;\n slotEnd.setHours(slotEnd.getHours() + hourSpan);\n if (hours == slotEnd.getHours()) {\n slotEnd.setHours(slotEnd.getHours() + 2 * hourSpan);\n }\n if (!options.showWorkHours || isWorkHour) {\n slots.push({\n start: start,\n end: slotEnd,\n isNonWorking: !isWorkHour,\n span: 1\n });\n }\n start = slotEnd;\n }\n return slots;\n },\n _days: function (start, end) {\n var slotEnd;\n var slots = [];\n var isWorkDay;\n start = new Date(start);\n end = new Date(end);\n while (start < end) {\n slotEnd = end < kendo.date.nextDay(start) ? end : kendo.date.nextDay(start);\n isWorkDay = this._isWorkDay(start);\n if (!this.options.showWorkDays || isWorkDay) {\n slots.push({\n start: start,\n end: slotEnd,\n isNonWorking: !isWorkDay,\n span: 1\n });\n }\n start = slotEnd;\n }\n return slots;\n },\n _weeks: function (start, end) {\n var slotEnd;\n var slots = [];\n var firstDay = this.calendarInfo().firstDay;\n var daySlots;\n var span;\n start = new Date(start);\n end = new Date(end);\n while (start < end) {\n slotEnd = kendo.date.dayOfWeek(kendo.date.addDays(start, 1), firstDay, 1);\n if (slotEnd > end) {\n slotEnd = end;\n }\n daySlots = this._days(start, slotEnd);\n span = daySlots.length;\n if (span > 0) {\n slots.push({\n start: daySlots[0].start,\n end: daySlots[span - 1].end,\n span: span\n });\n }\n start = slotEnd;\n }\n return slots;\n },\n _months: function (start, end) {\n var slotEnd;\n var endMonth;\n var slots = [];\n var daySlots;\n var span;\n start = new Date(start);\n end = new Date(end);\n while (start < end) {\n slotEnd = new Date(start);\n endMonth = kendo.date.firstDayOfMonth(new Date(slotEnd.setMonth(slotEnd.getMonth() + 1)));\n slotEnd = end < endMonth ? end : endMonth;\n daySlots = this._days(start, slotEnd);\n span = daySlots.length;\n if (span > 0) {\n slots.push({\n start: daySlots[0].start,\n end: daySlots[span - 1].end,\n span: span\n });\n }\n start = slotEnd;\n }\n return slots;\n },\n _years: function (start, end) {\n var slotEnd;\n var monthSpan;\n var endMonth;\n var slots = [];\n start = new Date(start);\n end = new Date(end);\n while (start < end) {\n slotEnd = new Date(start);\n slotEnd = kendo.date.firstDayOfMonth(new Date(slotEnd.setMonth(12)));\n if (slotEnd >= end) {\n slotEnd = end;\n }\n endMonth = slotEnd.getMonth() || 12;\n monthSpan = endMonth - start.getMonth();\n slots.push({\n start: start,\n end: slotEnd,\n span: monthSpan\n });\n start = slotEnd;\n }\n return slots;\n },\n _slotHeaders: function (slots, template) {\n var columns = [];\n var slot;\n for (var i = 0, l = slots.length; i < l; i++) {\n slot = slots[i];\n columns.push({\n text: template(slot),\n isNonWorking: !!slot.isNonWorking,\n span: slot.span\n });\n }\n return columns;\n },\n _isWorkDay: function (date) {\n var day = date.getDay();\n var workDays = this._workDays;\n for (var i = 0, l = workDays.length; i < l; i++) {\n if (workDays[i] === day) {\n return true;\n }\n }\n return false;\n },\n calendarInfo: function () {\n return kendo.getCulture().calendars.standard;\n },\n _renderCurrentTime: function () {\n var currentTime = this._getCurrentTime();\n var timeOffset = this._offset(currentTime);\n var element = $('<div class=\\'k-current-time\\'></div>');\n var viewStyles = GanttView.styles;\n var tablesWrap = $(DOT + viewStyles.tasksWrapper);\n var tasksTable = $(DOT + viewStyles.tasksTable);\n var slot;\n if (!this.content || !this._timeSlots().length) {\n return;\n }\n this.content.find('.k-current-time').remove();\n slot = this._timeSlots()[this._slotIndex('start', currentTime)];\n if (currentTime < slot.start || currentTime > slot.end) {\n return;\n }\n if (tablesWrap.length && tasksTable.length) {\n timeOffset += tasksTable.offset().left - tablesWrap.offset().left;\n }\n element.css({\n left: timeOffset + 'px',\n top: '0px',\n width: '1px',\n height: this._contentHeight + 'px'\n }).appendTo(this.content);\n },\n _getCurrentTime: function () {\n return new Date();\n },\n _currentTime: function () {\n var markerOptions = this.options.currentTimeMarker;\n if (markerOptions !== false && markerOptions.updateInterval !== undefined) {\n this._renderCurrentTime();\n this._currentTimeUpdateTimer = setInterval(proxy(this._renderCurrentTime, this), markerOptions.updateInterval);\n }\n }\n });\n extend(true, GanttView, { styles: viewStyles });\n kendo.ui.GanttDayView = GanttView.extend({\n name: 'day',\n options: {\n timeHeaderTemplate: TIME_HEADER_TEMPLATE,\n dayHeaderTemplate: DAY_HEADER_TEMPLATE,\n resizeTooltipFormat: 'h:mm tt ddd, MMM d'\n },\n range: function (range) {\n var optionsRange = this.options.range;\n this.start = kendo.date.getDate(range.start);\n this.end = kendo.date.getDate(range.end);\n if (kendo.date.getMilliseconds(range.end) > 0 || this.end.getTime() === this.start.getTime()) {\n this.end = kendo.date.addDays(this.end, 1);\n }\n if (optionsRange && optionsRange.start) {\n this.start = kendo.date.getDate(optionsRange.start);\n this.start.setHours(optionsRange.start.getHours());\n }\n if (optionsRange && optionsRange.end) {\n this.end = kendo.date.getDate(optionsRange.end);\n this.end.setHours(optionsRange.end.getHours());\n }\n },\n _createSlots: function () {\n var daySlots;\n var daySlot;\n var hourSlots;\n var hours;\n var slots = [];\n daySlots = this._days(this.start, this.end);\n hourSlots = [];\n for (var i = 0, l = daySlots.length; i < l; i++) {\n daySlot = daySlots[i];\n hours = this._hours(daySlot.start, daySlot.end);\n daySlot.span = hours.length;\n hourSlots.push.apply(hourSlots, hours);\n }\n slots.push(daySlots);\n slots.push(hourSlots);\n return slots;\n },\n _layout: function () {\n var rows = [];\n var options = this.options;\n rows.push(this._slotHeaders(this._slots[0], kendo.template(options.dayHeaderTemplate)));\n rows.push(this._slotHeaders(this._slots[1], kendo.template(options.timeHeaderTemplate)));\n return rows;\n }\n });\n kendo.ui.GanttWeekView = GanttView.extend({\n name: 'week',\n options: {\n dayHeaderTemplate: DAY_HEADER_TEMPLATE,\n weekHeaderTemplate: WEEK_HEADER_TEMPLATE,\n resizeTooltipFormat: 'h:mm tt ddd, MMM d'\n },\n range: function (range) {\n var optionsRange = this.options.range;\n var calendarInfo = this.calendarInfo();\n var firstDay = calendarInfo.firstDay;\n var rangeEnd = range.end;\n var endDay;\n if (firstDay === rangeEnd.getDay()) {\n rangeEnd.setDate(rangeEnd.getDate() + 7);\n }\n this.start = kendo.date.getDate(kendo.date.dayOfWeek(range.start, firstDay, -1));\n this.end = kendo.date.getDate(kendo.date.dayOfWeek(rangeEnd, firstDay, 1));\n if (optionsRange && optionsRange.start) {\n this.start = kendo.date.getDate(optionsRange.start);\n }\n if (optionsRange && optionsRange.end) {\n endDay = new Date(optionsRange.end);\n if (kendo.date.getDate(endDay) < optionsRange.end) {\n this.end = kendo.date.getDate(new Date(endDay.setDate(endDay.getDate() + 1)));\n } else {\n this.end = kendo.date.getDate(endDay);\n }\n }\n },\n _createSlots: function () {\n var slots = [];\n slots.push(this._weeks(this.start, this.end));\n slots.push(this._days(this.start, this.end));\n return slots;\n },\n _layout: function () {\n var rows = [];\n var options = this.options;\n rows.push(this._slotHeaders(this._slots[0], kendo.template(options.weekHeaderTemplate)));\n rows.push(this._slotHeaders(this._slots[1], kendo.template(options.dayHeaderTemplate)));\n return rows;\n }\n });\n kendo.ui.GanttMonthView = GanttView.extend({\n name: 'month',\n options: {\n weekHeaderTemplate: WEEK_HEADER_TEMPLATE,\n monthHeaderTemplate: MONTH_HEADER_TEMPLATE,\n resizeTooltipFormat: 'dddd, MMM d, yyyy'\n },\n range: function (range) {\n var optionsRange = this.options.range;\n var endDay;\n this.start = kendo.date.firstDayOfMonth(range.start);\n this.end = kendo.date.addDays(kendo.date.getDate(kendo.date.lastDayOfMonth(range.end)), 1);\n if (optionsRange && optionsRange.start) {\n this.start = kendo.date.getDate(optionsRange.start);\n }\n if (optionsRange && optionsRange.end) {\n endDay = new Date(optionsRange.end);\n if (kendo.date.getDate(endDay) < optionsRange.end) {\n this.end = kendo.date.getDate(new Date(endDay.setDate(endDay.getDate() + 1)));\n } else {\n this.end = kendo.date.getDate(endDay);\n }\n }\n },\n _createSlots: function () {\n var slots = [];\n slots.push(this._months(this.start, this.end));\n slots.push(this._weeks(this.start, this.end));\n return slots;\n },\n _layout: function () {\n var rows = [];\n var options = this.options;\n rows.push(this._slotHeaders(this._slots[0], kendo.template(options.monthHeaderTemplate)));\n rows.push(this._slotHeaders(this._slots[1], kendo.template(options.weekHeaderTemplate)));\n return rows;\n }\n });\n kendo.ui.GanttYearView = GanttView.extend({\n name: 'year',\n options: {\n yearHeaderTemplate: YEAR_HEADER_TEMPLATE,\n monthHeaderTemplate: MONTH_HEADER_TEMPLATE,\n resizeTooltipFormat: 'dddd, MMM d, yyyy'\n },\n range: function (range) {\n var optionsRange = this.options.range;\n var firstDayOfMonth;\n this.start = kendo.date.firstDayOfMonth(new Date(range.start.setMonth(0)));\n this.end = kendo.date.firstDayOfMonth(new Date(range.end.setMonth(12)));\n if (optionsRange && optionsRange.start) {\n this.start = kendo.date.firstDayOfMonth(optionsRange.start);\n }\n if (optionsRange && optionsRange.end) {\n firstDayOfMonth = kendo.date.firstDayOfMonth(optionsRange.end);\n this.end = kendo.date.getDate(new Date(firstDayOfMonth.setMonth(firstDayOfMonth.getMonth() + 1)));\n }\n },\n _createSlots: function () {\n var slots = [];\n var monthSlots = this._months(this.start, this.end);\n $(monthSlots).each(function (index, slot) {\n slot.span = 1;\n });\n slots.push(this._years(this.start, this.end));\n slots.push(monthSlots);\n return slots;\n },\n _layout: function () {\n var rows = [];\n var options = this.options;\n rows.push(this._slotHeaders(this._slots[0], kendo.template(options.yearHeaderTemplate)));\n rows.push(this._slotHeaders(this._slots[1], kendo.template(options.monthHeaderTemplate)));\n return rows;\n }\n });\n var timelineStyles = {\n wrapper: 'k-timeline k-grid k-widget',\n gridHeader: 'k-grid-header',\n gridHeaderWrap: 'k-grid-header-wrap',\n gridContent: 'k-grid-content',\n gridContentWrap: 'k-grid-content',\n tasksWrapper: 'k-gantt-tables',\n dependenciesWrapper: 'k-gantt-dependencies',\n task: 'k-task',\n line: 'k-line',\n taskResizeHandle: 'k-resize-handle',\n taskResizeHandleWest: 'k-resize-w',\n taskDragHandle: 'k-task-draghandle',\n taskComplete: 'k-task-complete',\n taskDelete: 'k-task-delete',\n taskWrapActive: 'k-task-wrap-active',\n taskWrap: 'k-task-wrap',\n taskDot: 'k-task-dot',\n taskDotStart: 'k-task-start',\n taskDotEnd: 'k-task-end',\n hovered: 'k-state-hover',\n selected: 'k-state-selected',\n origin: 'k-origin'\n };\n var GanttTimeline = kendo.ui.GanttTimeline = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n if (!this.options.views || !this.options.views.length) {\n this.options.views = [\n 'day',\n 'week',\n 'month'\n ];\n }\n isRtl = kendo.support.isRtl(element);\n this._wrapper();\n this._domTrees();\n this._views();\n this._selectable();\n this._draggable();\n this._resizable();\n this._percentResizeDraggable();\n this._createDependencyDraggable();\n this._attachEvents();\n this._tooltip();\n },\n options: {\n name: 'GanttTimeline',\n messages: {\n views: {\n day: 'Day',\n week: 'Week',\n month: 'Month',\n year: 'Year',\n start: 'Start',\n end: 'End'\n }\n },\n snap: true,\n selectable: true,\n editable: true\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n clearTimeout(this._tooltipTimeout);\n if (this._currentTimeUpdateTimer) {\n clearInterval(this._currentTimeUpdateTimer);\n }\n this._unbindView(this._selectedView);\n if (this._moveDraggable) {\n this._moveDraggable.destroy();\n }\n if (this._resizeDraggable) {\n this._resizeDraggable.destroy();\n }\n if (this._percentDraggable) {\n this._percentDraggable.destroy();\n }\n if (this._dependencyDraggable) {\n this._dependencyDraggable.destroy();\n }\n if (this.touch) {\n this.touch.destroy();\n }\n this._headerTree = null;\n this._taskTree = null;\n this._dependencyTree = null;\n this.wrapper.off(NS);\n kendo.destroy(this.wrapper);\n },\n _wrapper: function () {\n var styles = GanttTimeline.styles;\n var that = this;\n var options = this.options;\n var calculateSize = function () {\n var rowHeight = typeof options.rowHeight === STRING ? options.rowHeight : options.rowHeight + 'px';\n var table = $(kendo.format(SIZE_CALCULATION_TEMPLATE, rowHeight));\n var calculatedRowHeight;\n var calculatedCellHeight;\n var content = that.wrapper.find(DOT + styles.tasksWrapper);\n content.append(table);\n calculatedRowHeight = outerHeight(table.find('tr'));\n calculatedCellHeight = table.find('td').height();\n table.remove();\n return {\n 'row': calculatedRowHeight,\n 'cell': calculatedCellHeight\n };\n };\n this.wrapper = this.element.addClass(styles.wrapper).append('<div class=\\'' + styles.gridHeader + '\\'><div class=\\'' + styles.gridHeaderWrap + '\\'></div></div>').append('<div class=\\'' + styles.gridContentWrap + '\\'><div class=\\'' + styles.tasksWrapper + '\\'></div><div class=\\'' + styles.dependenciesWrapper + '\\'></div></div>');\n if (options.rowHeight) {\n this._calculatedSize = calculateSize();\n }\n },\n _domTrees: function () {\n var styles = GanttTimeline.styles;\n var tree = kendo.dom.Tree;\n var wrapper = this.wrapper;\n this._headerTree = new tree(wrapper.find(DOT + styles.gridHeaderWrap)[0]);\n this._taskTree = new tree(wrapper.find(DOT + styles.tasksWrapper)[0]);\n this._dependencyTree = new tree(wrapper.find(DOT + styles.dependenciesWrapper)[0]);\n },\n _views: function () {\n var views = this.options.views;\n var view;\n var isSettings;\n var name;\n var defaultView;\n var selected;\n this.views = {};\n for (var i = 0, l = views.length; i < l; i++) {\n view = views[i];\n isSettings = isPlainObject(view);\n if (isSettings && view.selectable === false) {\n continue;\n }\n name = isSettings ? typeof view.type !== 'string' ? view.title : view.type : view;\n defaultView = defaultViews[name];\n if (defaultView) {\n if (isSettings) {\n view.type = defaultView.type;\n }\n defaultView.title = this.options.messages.views[name];\n }\n view = extend({ title: name }, defaultView, isSettings ? view : {});\n if (name) {\n this.views[name] = view;\n if (!selected || view.selected) {\n selected = name;\n }\n }\n }\n if (selected) {\n this._selectedViewName = selected;\n }\n },\n view: function (name) {\n if (name) {\n this._selectView(name);\n this.trigger('navigate', {\n view: name,\n action: 'changeView'\n });\n }\n return this._selectedView;\n },\n _selectView: function (name) {\n if (name && this.views[name]) {\n if (this._selectedView) {\n this._unbindView(this._selectedView);\n }\n this._selectedView = this._initializeView(name);\n this._selectedViewName = name;\n }\n },\n _viewByIndex: function (index) {\n var view;\n var views = this.views;\n for (view in views) {\n if (!index) {\n return view;\n }\n index--;\n }\n },\n _initializeView: function (name) {\n var view = this.views[name];\n if (view) {\n var type = view.type;\n if (typeof type === 'string') {\n type = kendo.getter(view.type)(window);\n }\n if (type) {\n var newRange = {};\n extend(newRange, this.options.range, view.range);\n var newDate = view.date || this.options.date;\n view = new type(this.wrapper, trimOptions(extend(true, {\n headerTree: this._headerTree,\n taskTree: this._taskTree,\n dependencyTree: this._dependencyTree,\n calculatedSize: this._calculatedSize\n }, view, this.options, {\n date: newDate,\n range: newRange\n })));\n } else {\n throw new Error('There is no such view');\n }\n }\n return view;\n },\n _unbindView: function (view) {\n if (view) {\n view.destroy();\n }\n },\n _range: function (tasks) {\n var startOrder = {\n field: 'start',\n dir: 'asc'\n };\n var endOrder = {\n field: 'end',\n dir: 'desc'\n };\n if (!tasks || !tasks.length) {\n return {\n start: new Date(),\n end: new Date()\n };\n }\n var start = new Query(tasks).sort(startOrder).toArray()[0].start || new Date();\n var end = new Query(tasks).sort(endOrder).toArray()[0].end || new Date();\n return {\n start: new Date(start),\n end: new Date(end)\n };\n },\n _render: function (tasks) {\n var view = this.view();\n var range = this._range(tasks);\n var date = view.options.date;\n this._tasks = tasks;\n view.range(range);\n view.renderLayout();\n view.render(tasks);\n if (date) {\n view._scrollToDate(date);\n }\n },\n _renderDependencies: function (dependencies) {\n this.view()._renderDependencies(dependencies);\n },\n _taskByUid: function (uid) {\n var tasks = this._tasks;\n var length = tasks.length;\n var task;\n for (var i = 0; i < length; i++) {\n task = tasks[i];\n if (task.uid === uid) {\n return task;\n }\n }\n },\n _draggable: function () {\n var that = this;\n var element;\n var task;\n var currentStart;\n var startOffset;\n var snap = this.options.snap;\n var styles = GanttTimeline.styles;\n var editable = this.options.editable;\n var cleanUp = function () {\n that.view()._removeDragHint();\n if (element) {\n element.css('opacity', 1);\n }\n element = null;\n task = null;\n that.dragInProgress = false;\n };\n if (!editable || editable.move === false || editable.update === false) {\n return;\n }\n this._moveDraggable = new kendo.ui.Draggable(this.wrapper, {\n distance: 0,\n filter: DOT + styles.task,\n holdToDrag: kendo.support.mobileOS,\n ignore: DOT + styles.taskResizeHandle\n });\n this._moveDraggable.bind('dragstart', function (e) {\n var view = that.view();\n element = e.currentTarget.parent();\n task = that._taskByUid(e.currentTarget.attr('data-uid'));\n if (that.trigger('moveStart', { task: task })) {\n e.preventDefault();\n return;\n }\n currentStart = task.start;\n startOffset = view._timeByPosition(e.x.location, snap) - currentStart;\n view._createDragHint(element);\n element.css('opacity', 0.5);\n clearTimeout(that._tooltipTimeout);\n that.dragInProgress = true;\n }).bind('drag', kendo.throttle(function (e) {\n if (!that.dragInProgress) {\n return;\n }\n var view = that.view();\n var date = new Date(view._timeByPosition(e.x.location, snap) - startOffset);\n var updateHintDate = date;\n if (!that.trigger('move', {\n task: task,\n start: date\n })) {\n currentStart = date;\n if (isRtl) {\n updateHintDate = new Date(currentStart.getTime() + task.duration());\n }\n view._updateDragHint(updateHintDate);\n }\n }, 15)).bind('dragend', function () {\n that.trigger('moveEnd', {\n task: task,\n start: currentStart\n });\n cleanUp();\n }).bind('dragcancel', function () {\n cleanUp();\n }).userEvents.bind('select', function () {\n blurActiveElement();\n });\n },\n _resizable: function () {\n var that = this;\n var element;\n var task;\n var currentStart;\n var currentEnd;\n var resizeStart;\n var snap = this.options.snap;\n var styles = GanttTimeline.styles;\n var editable = this.options.editable;\n var cleanUp = function () {\n that.view()._removeResizeHint();\n element = null;\n task = null;\n that.dragInProgress = false;\n };\n if (!editable || editable.resize === false || editable.update === false) {\n return;\n }\n this._resizeDraggable = new kendo.ui.Draggable(this.wrapper, {\n distance: 0,\n filter: DOT + styles.taskResizeHandle,\n holdToDrag: false\n });\n this._resizeDraggable.bind('dragstart', function (e) {\n resizeStart = e.currentTarget.hasClass(styles.taskResizeHandleWest);\n if (isRtl) {\n resizeStart = !resizeStart;\n }\n element = e.currentTarget.closest(DOT + styles.task);\n task = that._taskByUid(element.attr('data-uid'));\n if (that.trigger('resizeStart', { task: task })) {\n e.preventDefault();\n return;\n }\n currentStart = task.start;\n currentEnd = task.end;\n that.view()._createResizeHint(task);\n clearTimeout(that._tooltipTimeout);\n that.dragInProgress = true;\n }).bind('drag', kendo.throttle(function (e) {\n if (!that.dragInProgress) {\n return;\n }\n var view = that.view();\n var date = view._timeByPosition(e.x.location, snap, !resizeStart);\n if (resizeStart) {\n if (date < currentEnd) {\n currentStart = date;\n } else {\n currentStart = currentEnd;\n }\n } else {\n if (date > currentStart) {\n currentEnd = date;\n } else {\n currentEnd = currentStart;\n }\n }\n if (!that.trigger('resize', {\n task: task,\n start: currentStart,\n end: currentEnd\n })) {\n view._updateResizeHint(currentStart, currentEnd, resizeStart);\n }\n }, 15)).bind('dragend', function () {\n that.trigger('resizeEnd', {\n task: task,\n resizeStart: resizeStart,\n start: currentStart,\n end: currentEnd\n });\n cleanUp();\n }).bind('dragcancel', function () {\n cleanUp();\n }).userEvents.bind('select', function () {\n blurActiveElement();\n });\n },\n _percentResizeDraggable: function () {\n var that = this;\n var task;\n var taskElement;\n var taskElementOffset;\n var timelineOffset;\n var originalPercentWidth;\n var maxPercentWidth;\n var currentPercentComplete;\n var tooltipTop;\n var tooltipLeft;\n var styles = GanttTimeline.styles;\n var delta;\n var editable = this.options.editable;\n var cleanUp = function () {\n that.view()._removePercentCompleteTooltip();\n taskElement = null;\n task = null;\n that.dragInProgress = false;\n };\n var updateElement = function (width) {\n taskElement.find(DOT + styles.taskComplete).width(width).end().siblings(DOT + styles.taskDragHandle).css(isRtl ? 'right' : 'left', width);\n };\n if (!editable || editable.dragPercentComplete === false || editable.update === false) {\n return;\n }\n this._percentDraggable = new kendo.ui.Draggable(this.wrapper, {\n distance: 0,\n filter: DOT + styles.taskDragHandle,\n holdToDrag: false\n });\n this._percentDraggable.bind('dragstart', function (e) {\n if (that.trigger('percentResizeStart')) {\n e.preventDefault();\n return;\n }\n taskElement = e.currentTarget.siblings(DOT + styles.task);\n task = that._taskByUid(taskElement.attr('data-uid'));\n currentPercentComplete = task.percentComplete;\n taskElementOffset = taskElement.offset();\n timelineOffset = this.element.offset();\n originalPercentWidth = taskElement.find(DOT + styles.taskComplete).width();\n maxPercentWidth = outerWidth(taskElement);\n clearTimeout(that._tooltipTimeout);\n that.dragInProgress = true;\n }).bind('drag', kendo.throttle(function (e) {\n if (!that.dragInProgress) {\n return;\n }\n delta = isRtl ? -e.x.initialDelta : e.x.initialDelta;\n var currentWidth = Math.max(0, Math.min(maxPercentWidth, originalPercentWidth + delta));\n currentPercentComplete = Math.round(currentWidth / maxPercentWidth * 100);\n updateElement(currentWidth);\n tooltipTop = taskElementOffset.top - timelineOffset.top;\n tooltipLeft = taskElementOffset.left + currentWidth - timelineOffset.left;\n if (isRtl) {\n tooltipLeft += maxPercentWidth - 2 * currentWidth;\n }\n that.view()._updatePercentCompleteTooltip(tooltipTop, tooltipLeft, currentPercentComplete);\n }, 15)).bind('dragend', function () {\n that.trigger('percentResizeEnd', {\n task: task,\n percentComplete: currentPercentComplete / 100\n });\n cleanUp();\n }).bind('dragcancel', function () {\n updateElement(originalPercentWidth);\n cleanUp();\n }).userEvents.bind('select', function () {\n blurActiveElement();\n });\n },\n _createDependencyDraggable: function () {\n var that = this;\n var originalHandle;\n var hoveredHandle = $();\n var hoveredTask = $();\n var startX;\n var startY;\n var useVML = browser.msie && browser.version < 9;\n var styles = GanttTimeline.styles;\n var editable = this.options.editable;\n var cleanUp = function () {\n originalHandle.css('display', '').removeClass(styles.hovered);\n originalHandle.parent().removeClass(styles.origin);\n originalHandle = null;\n toggleHandles(false);\n hoveredTask = $();\n hoveredHandle = $();\n that.view()._removeDependencyDragHint();\n that.dragInProgress = false;\n };\n var toggleHandles = function (value) {\n if (!hoveredTask.hasClass(styles.origin)) {\n hoveredTask.find(DOT + styles.taskDot).css('display', value ? 'block' : '');\n hoveredHandle.toggleClass(styles.hovered, value);\n }\n };\n if (!editable || editable.dependencyCreate === false) {\n return;\n }\n if (useVML && document.namespaces) {\n document.namespaces.add('kvml', 'urn:schemas-microsoft-com:vml', '#default#VML');\n }\n this._dependencyDraggable = new kendo.ui.Draggable(this.wrapper, {\n distance: 0,\n filter: DOT + styles.taskDot,\n holdToDrag: false\n });\n this._dependencyDraggable.bind('dragstart', function (e) {\n if (that.trigger('dependencyDragStart')) {\n e.preventDefault();\n return;\n }\n originalHandle = e.currentTarget.css('display', 'block').addClass(styles.hovered);\n originalHandle.parent().addClass(styles.origin);\n var elementOffset = originalHandle.offset();\n var tablesOffset = that.wrapper.find(DOT + styles.tasksWrapper).offset();\n startX = Math.round(elementOffset.left - tablesOffset.left + outerHeight(originalHandle) / 2);\n startY = Math.round(elementOffset.top - tablesOffset.top + outerWidth(originalHandle) / 2);\n clearTimeout(that._tooltipTimeout);\n that.dragInProgress = true;\n }).bind('drag', kendo.throttle(function (e) {\n if (!that.dragInProgress) {\n return;\n }\n that.view()._removeDependencyDragHint();\n var target = $(kendo.elementUnderCursor(e));\n var tablesOffset = that.wrapper.find(DOT + styles.tasksWrapper).offset();\n var currentX = e.x.location - tablesOffset.left;\n var currentY = e.y.location - tablesOffset.top;\n that.view()._updateDependencyDragHint({\n x: startX,\n y: startY\n }, {\n x: currentX,\n y: currentY\n }, useVML);\n toggleHandles(false);\n hoveredHandle = target.hasClass(styles.taskDot) ? target : $();\n hoveredTask = target.closest(DOT + styles.taskWrap);\n toggleHandles(true);\n }, 15)).bind('dragend', function () {\n if (hoveredHandle.length) {\n var fromStart = originalHandle.hasClass(styles.taskDotStart);\n var toStart = hoveredHandle.hasClass(styles.taskDotStart);\n var type = fromStart ? toStart ? 3 : 2 : toStart ? 1 : 0;\n var predecessor = that._taskByUid(originalHandle.siblings(DOT + styles.task).attr('data-uid'));\n var successor = that._taskByUid(hoveredHandle.siblings(DOT + styles.task).attr('data-uid'));\n if (predecessor !== successor) {\n that.trigger('dependencyDragEnd', {\n type: type,\n predecessor: predecessor,\n successor: successor\n });\n }\n }\n cleanUp();\n }).bind('dragcancel', function () {\n cleanUp();\n }).userEvents.bind('select', function () {\n blurActiveElement();\n });\n },\n _selectable: function () {\n var that = this;\n var styles = GanttTimeline.styles;\n if (this.options.selectable) {\n this.wrapper.on(CLICK + NS, DOT + styles.task, function (e) {\n e.stopPropagation();\n if (!e.ctrlKey) {\n that.trigger('select', { uid: $(this).attr('data-uid') });\n } else {\n that.trigger('clear');\n }\n }).on(CLICK + NS, DOT + styles.taskWrap, function (e) {\n e.stopPropagation();\n $(this).css('z-index', '0');\n var target = $(document.elementFromPoint(e.clientX, e.clientY));\n if (target.hasClass(styles.line)) {\n target.click();\n }\n $(this).css('z-index', '');\n }).on(CLICK + NS, DOT + styles.tasksWrapper, function () {\n if (that.selectDependency().length > 0) {\n that.clearSelection();\n } else {\n that.trigger('clear');\n }\n }).on(CLICK + NS, DOT + styles.line, function (e) {\n e.stopPropagation();\n that.selectDependency(this);\n });\n }\n },\n select: function (value) {\n var element = this.wrapper.find(value);\n var styles = GanttTimeline.styles;\n if (element.length) {\n this.clearSelection();\n element.addClass(styles.selected);\n if (kendo.support.mobileOS) {\n element.parent().addClass(styles.taskWrapActive);\n }\n return;\n }\n return this.wrapper.find(DOT + styles.task + DOT + styles.selected);\n },\n selectDependency: function (value) {\n var element = this.wrapper.find(value);\n var uid;\n var styles = GanttTimeline.styles;\n if (element.length) {\n this.clearSelection();\n this.trigger('clear');\n uid = $(element).attr('data-uid');\n this.wrapper.find(DOT + styles.line + '[data-uid=\\'' + uid + '\\']').addClass(styles.selected);\n return;\n }\n return this.wrapper.find(DOT + styles.line + DOT + styles.selected);\n },\n clearSelection: function () {\n var styles = GanttTimeline.styles;\n this.wrapper.find(DOT + styles.selected).removeClass(styles.selected);\n if (kendo.support.mobileOS) {\n this.wrapper.find(DOT + styles.taskWrapActive).removeClass(styles.taskWrapActive);\n }\n },\n _attachEvents: function () {\n var that = this;\n var styles = GanttTimeline.styles;\n var editable = this.options.editable;\n if (editable) {\n this._tabindex();\n this.wrapper.on(CLICK + NS, DOT + styles.taskDelete, function (e) {\n that.trigger('removeTask', { uid: $(this).closest(DOT + styles.task).attr('data-uid') });\n e.stopPropagation();\n e.preventDefault();\n }).on(KEYDOWN + NS, function (e) {\n var selectedDependency;\n var editable = that.options.editable;\n if (e.keyCode === keys.DELETE && editable && editable.dependencyDestroy !== false) {\n selectedDependency = that.selectDependency();\n if (selectedDependency.length) {\n that.trigger('removeDependency', { uid: selectedDependency.attr('data-uid') });\n that.clearSelection();\n }\n }\n });\n if (!kendo.support.mobileOS) {\n this.wrapper.on(DBLCLICK + NS, DOT + styles.task, function (e) {\n if (that.options.editable.update !== false) {\n that.trigger('editTask', { uid: $(this).attr('data-uid') });\n e.stopPropagation();\n e.preventDefault();\n }\n });\n } else {\n this.touch = this.wrapper.kendoTouch({\n filter: DOT + styles.task,\n doubletap: function (e) {\n if (that.options.editable.update !== false) {\n that.trigger('editTask', { uid: $(e.touch.currentTarget).attr('data-uid') });\n }\n }\n }).data('kendoTouch');\n }\n }\n },\n _tooltip: function () {\n var that = this;\n var tooltipOptions = this.options.tooltip;\n var styles = GanttTimeline.styles;\n var currentMousePosition;\n var mouseMoveHandler = function (e) {\n currentMousePosition = e.clientX;\n };\n if (tooltipOptions && tooltipOptions.visible === false) {\n return;\n }\n if (!kendo.support.mobileOS) {\n this.wrapper.on(MOUSEENTER + NS, DOT + styles.task, function () {\n var element = this;\n var task = that._taskByUid($(this).attr('data-uid'));\n if (that.dragInProgress) {\n return;\n }\n that._tooltipTimeout = setTimeout(function () {\n that.view()._createTaskTooltip(task, element, currentMousePosition);\n }, 800);\n $(this).on(MOUSEMOVE, mouseMoveHandler);\n }).on(MOUSELEAVE + NS, DOT + styles.task, function () {\n clearTimeout(that._tooltipTimeout);\n that.view()._removeTaskTooltip();\n $(this).off(MOUSEMOVE, mouseMoveHandler);\n });\n } else {\n this.wrapper.on(CLICK + NS, DOT + styles.taskDelete, function (e) {\n e.stopPropagation();\n that.view()._removeTaskTooltip();\n }).on(MOUSELEAVE + NS, DOT + styles.task, function (e) {\n var parents = $(e.relatedTarget).parents(DOT + styles.taskWrap, DOT + styles.task);\n if (parents.length === 0) {\n that.view()._removeTaskTooltip();\n }\n });\n if (this.touch) {\n this.touch.bind('tap', function (e) {\n var element = e.touch.target;\n var task = that._taskByUid($(element).attr('data-uid'));\n var currentPosition = e.touch.x.client;\n if (that.view()._taskTooltip) {\n that.view()._removeTaskTooltip();\n }\n that.view()._createTaskTooltip(task, element, currentPosition);\n }).bind('doubletap', function () {\n that.view()._removeTaskTooltip();\n });\n }\n }\n }\n });\n extend(true, GanttTimeline, { styles: timelineStyles });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.gantt', [\n 'kendo.data',\n 'kendo.popup',\n 'kendo.window',\n 'kendo.resizable',\n 'kendo.gantt.list',\n 'kendo.gantt.timeline',\n 'kendo.grid',\n 'kendo.pdf'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'gantt',\n name: 'Gantt',\n category: 'web',\n description: 'The Gantt component.',\n depends: [\n 'data',\n 'popup',\n 'resizable',\n 'window',\n 'gantt.list',\n 'gantt.timeline',\n 'grid'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo;\n var supportsMedia = 'matchMedia' in window;\n var browser = kendo.support.browser;\n var mobileOS = kendo.support.mobileOS;\n var Observable = kendo.Observable;\n var Widget = kendo.ui.Widget;\n var DataSource = kendo.data.DataSource;\n var ObservableObject = kendo.data.ObservableObject;\n var ObservableArray = kendo.data.ObservableArray;\n var Query = kendo.data.Query;\n var isArray = $.isArray;\n var inArray = $.inArray;\n var isFunction = kendo.isFunction;\n var proxy = $.proxy;\n var extend = $.extend;\n var isPlainObject = $.isPlainObject;\n var map = $.map;\n var outerWidth = kendo._outerWidth;\n var outerHeight = kendo._outerHeight;\n var keys = kendo.keys;\n var defaultIndicatorWidth = 3;\n var NS = '.kendoGantt';\n var PERCENTAGE_FORMAT = 'p0';\n var TABINDEX = 'tabIndex';\n var CLICK = 'click';\n var WIDTH = 'width';\n var STRING = 'string';\n var DIRECTIONS = {\n 'down': {\n origin: 'bottom left',\n position: 'top left'\n },\n 'up': {\n origin: 'top left',\n position: 'bottom left'\n }\n };\n var ARIA_DESCENDANT = 'aria-activedescendant';\n var ACTIVE_CELL = 'gantt_active_cell';\n var ACTIVE_OPTION = 'action-option-focused';\n var DOT = '.';\n var TASK_DELETE_CONFIRM = 'Are you sure you want to delete this task?';\n var DEPENDENCY_DELETE_CONFIRM = 'Are you sure you want to delete this dependency?';\n var TOGGLE_BUTTON_TEMPLATE = kendo.template('<button class=\"#=styles.buttonToggle#\" type=\"button\"><span class=\"#=styles.iconToggle#\"></span></button>');\n var BUTTON_TEMPLATE = '<button class=\"#=styles.button# #=className#\" type=\"button\" ' + '#if (action) {#' + 'data-action=\"#=action#\"' + '#}#' + '><span class=\"#=iconClass#\"></span><span>#=text#</span></button>';\n var COMMAND_BUTTON_TEMPLATE = '<a class=\"#=className#\" #=attr# href=\"\\\\#\">#=text#</a>';\n var VIEWBUTTONTEMPLATE = kendo.template('<li class=\"#=styles.currentView# #=styles.viewButtonDefault#\"><a href=\"\\\\#\" class=\"#=styles.link#\">&nbps;</a></li>');\n var HEADER_VIEWS_TEMPLATE = kendo.template('<ul class=\"#=styles.viewsWrapper#\">' + '#for(var view in views){#' + '<li class=\"#=styles.viewButtonDefault# #=styles.viewButton#-#= view.toLowerCase() #\" data-#=ns#name=\"#=view#\"><a href=\"\\\\#\" class=\"#=styles.link#\">#=views[view].title#</a></li>' + '#}#' + '</ul>');\n var TASK_DROPDOWN_TEMPLATE = kendo.template('<div class=\"#=styles.popupWrapper#\">' + '<ul class=\"#=styles.popupList#\" role=\"listbox\">' + '#for(var i = 0, l = actions.length; i < l; i++){#' + '<li class=\"#=styles.item#\" data-action=\"#=actions[i].data#\" role=\"option\">#=actions[i].text#</span>' + '#}#' + '</ul>' + '</div>');\n var DATERANGEEDITOR = function (container, options) {\n var attr = { name: options.field };\n var validationRules = options.model.fields[options.field].validation;\n if (validationRules && isPlainObject(validationRules) && validationRules.message) {\n attr[kendo.attr('dateCompare-msg')] = validationRules.message;\n }\n $('<input type=\"text\" required ' + kendo.attr('type') + '=\"date\" ' + kendo.attr('role') + '=\"datetimepicker\" ' + kendo.attr('bind') + '=\"value:' + options.field + '\" ' + kendo.attr('validate') + '=\\'true\\' />').attr(attr).appendTo(container);\n $('<span ' + kendo.attr('for') + '=\"' + options.field + '\" class=\"k-invalid-msg\"/>').hide().appendTo(container);\n };\n var RESOURCESEDITOR = function (container, options) {\n $('<a href=\"#\" class=\"' + options.styles.button + '\">' + options.messages.assignButton + '</a>').click(options.click).appendTo(container);\n };\n var ganttStyles = {\n wrapper: 'k-widget k-gantt',\n rowHeight: 'k-gantt-rowheight',\n listWrapper: 'k-gantt-layout k-gantt-treelist',\n list: 'k-gantt-treelist',\n timelineWrapper: 'k-gantt-layout k-gantt-timeline',\n timeline: 'k-gantt-timeline',\n splitBarWrapper: 'k-splitbar k-state-default k-splitbar-horizontal k-splitbar-draggable-horizontal k-gantt-layout',\n splitBar: 'k-splitbar',\n splitBarHover: 'k-splitbar-horizontal-hover',\n popupWrapper: 'k-list-container',\n popupList: 'k-list k-reset',\n resizeHandle: 'k-resize-handle',\n icon: 'k-icon',\n item: 'k-item',\n line: 'k-line',\n buttonDelete: 'k-gantt-delete',\n buttonCancel: 'k-gantt-cancel',\n buttonSave: 'k-gantt-update',\n buttonToggle: 'k-gantt-toggle',\n primary: 'k-primary',\n hovered: 'k-state-hover',\n selected: 'k-state-selected',\n focused: 'k-state-focused',\n gridHeader: 'k-grid-header',\n gridHeaderWrap: 'k-grid-header-wrap',\n gridContent: 'k-grid-content',\n popup: {\n form: 'k-popup-edit-form',\n editForm: 'k-gantt-edit-form',\n formContainer: 'k-edit-form-container',\n resourcesFormContainer: 'k-resources-form-container',\n message: 'k-popup-message',\n buttonsContainer: 'k-edit-buttons k-state-default',\n button: 'k-button',\n editField: 'k-edit-field',\n editLabel: 'k-edit-label',\n resourcesField: 'k-gantt-resources'\n },\n toolbar: {\n headerWrapper: 'k-floatwrap k-header k-gantt-toolbar',\n footerWrapper: 'k-floatwrap k-header k-gantt-toolbar',\n toolbar: 'k-gantt-toolbar',\n expanded: 'k-state-expanded',\n views: 'k-gantt-views',\n viewsWrapper: 'k-reset k-header k-gantt-views',\n actions: 'k-gantt-actions',\n button: 'k-button k-button-icontext',\n buttonToggle: 'k-button k-button-icon k-gantt-toggle',\n iconPlus: 'k-icon k-i-plus',\n iconPdf: 'k-icon k-i-file-pdf',\n iconToggle: 'k-icon k-i-layout-1-by-4',\n viewButtonDefault: 'k-state-default',\n viewButton: 'k-view',\n currentView: 'k-current-view',\n link: 'k-link',\n pdfButton: 'k-gantt-pdf',\n appendButton: 'k-gantt-create'\n }\n };\n function selector(uid) {\n return '[' + kendo.attr('uid') + (uid ? '=\\'' + uid + '\\']' : ']');\n }\n function trimOptions(options) {\n delete options.name;\n delete options.prefix;\n delete options.remove;\n delete options.edit;\n delete options.add;\n delete options.navigate;\n return options;\n }\n function dateCompareValidator(input) {\n if (input.filter('[name=end], [name=start]').length) {\n var field = input.attr('name');\n var picker = kendo.widgetInstance(input, kendo.ui);\n var dates = {};\n var container = input;\n var editable;\n var model;\n while (container !== window && !editable) {\n container = container.parent();\n editable = container.data('kendoEditable');\n }\n model = editable ? editable.options.model : null;\n if (!model) {\n return true;\n }\n dates.start = model.start;\n dates.end = model.end;\n dates[field] = picker ? picker.value() : kendo.parseDate(input.value());\n return dates.start <= dates.end;\n }\n return true;\n }\n function focusTable(table, direct) {\n var wrapper = table.parents('[' + kendo.attr('role') + '=\"gantt\"]');\n var scrollPositions = [];\n var parents = scrollableParents(wrapper);\n table.attr(TABINDEX, 0);\n if (direct) {\n parents.each(function (index, parent) {\n scrollPositions[index] = $(parent).scrollTop();\n });\n }\n try {\n table[0].setActive();\n } catch (e) {\n table[0].focus();\n }\n if (direct) {\n parents.each(function (index, parent) {\n $(parent).scrollTop(scrollPositions[index]);\n });\n }\n }\n function scrollableParents(element) {\n return $(element).parentsUntil('body').filter(function (index, element) {\n var computedStyle = kendo.getComputedStyles(element, ['overflow']);\n return computedStyle.overflow != 'visible';\n }).add(window);\n }\n var defaultCommands;\n var TaskDropDown = Observable.extend({\n init: function (element, options) {\n Observable.fn.init.call(this);\n this.element = element;\n this.options = extend(true, {}, this.options, options);\n this._popup();\n },\n options: {\n direction: 'down',\n navigatable: false\n },\n _current: function (method) {\n var ganttStyles = Gantt.styles;\n var current = this.list.find(DOT + ganttStyles.focused);\n var sibling = current[method]();\n if (sibling.length) {\n current.removeClass(ganttStyles.focused).removeAttr('id');\n sibling.addClass(ganttStyles.focused).attr('id', ACTIVE_OPTION);\n this.list.find('ul').removeAttr(ARIA_DESCENDANT).attr(ARIA_DESCENDANT, ACTIVE_OPTION);\n }\n },\n _popup: function () {\n var that = this;\n var ganttStyles = Gantt.styles;\n var itemSelector = 'li' + DOT + ganttStyles.item;\n var appendButtonSelector = DOT + ganttStyles.toolbar.appendButton;\n var actions = this.options.messages.actions;\n var navigatable = this.options.navigatable;\n this.list = $(TASK_DROPDOWN_TEMPLATE({\n styles: ganttStyles,\n actions: [\n {\n data: 'add',\n text: actions.addChild\n },\n {\n data: 'insert-before',\n text: actions.insertBefore\n },\n {\n data: 'insert-after',\n text: actions.insertAfter\n }\n ]\n }));\n this.element.append(this.list);\n this.popup = new kendo.ui.Popup(this.list, extend({\n anchor: this.element.find(appendButtonSelector),\n open: function () {\n that._adjustListWidth();\n },\n animation: this.options.animation\n }, DIRECTIONS[this.options.direction]));\n this.element.on(CLICK + NS, appendButtonSelector, function (e) {\n var target = $(this);\n var action = target.attr(kendo.attr('action'));\n e.preventDefault();\n if (action) {\n that.trigger('command', { type: action });\n } else {\n that.popup.open();\n if (navigatable) {\n that.list.find('li:first').addClass(ganttStyles.focused).attr('id', ACTIVE_OPTION).end().find('ul').attr({\n TABINDEX: 0,\n 'aria-activedescendant': ACTIVE_OPTION\n }).focus();\n }\n }\n });\n this.list.find(itemSelector).hover(function () {\n $(this).addClass(ganttStyles.hovered);\n }, function () {\n $(this).removeClass(ganttStyles.hovered);\n }).end().on(CLICK + NS, itemSelector, function () {\n that.trigger('command', { type: $(this).attr(kendo.attr('action')) });\n that.popup.close();\n });\n if (navigatable) {\n this.popup.bind('close', function () {\n that.list.find(itemSelector).removeClass(ganttStyles.focused).end().find('ul').attr(TABINDEX, 0);\n that.element.parents('[' + kendo.attr('role') + '=\"gantt\"]').find(DOT + ganttStyles.gridContent + ' > table:first').focus();\n });\n this.list.find('ul').on('keydown' + NS, function (e) {\n var key = e.keyCode;\n switch (key) {\n case keys.UP:\n e.preventDefault();\n that._current('prev');\n break;\n case keys.DOWN:\n e.preventDefault();\n that._current('next');\n break;\n case keys.ENTER:\n that.list.find(DOT + ganttStyles.focused).click();\n break;\n case keys.ESC:\n e.preventDefault();\n that.popup.close();\n break;\n }\n });\n }\n },\n _adjustListWidth: function () {\n var list = this.list;\n var ganttStyles = Gantt.styles;\n var width = list[0].style.width;\n var wrapper = this.element.find(DOT + ganttStyles.toolbar.appendButton);\n var listOuterWidth = outerWidth(list);\n var computedStyle;\n var computedWidth;\n if (!list.data(WIDTH) && width) {\n return;\n }\n computedStyle = window.getComputedStyle ? window.getComputedStyle(wrapper[0], null) : 0;\n computedWidth = computedStyle ? parseFloat(computedStyle.width) : outerWidth(wrapper);\n if (computedStyle && (browser.mozilla || browser.msie)) {\n computedWidth += parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight) + parseFloat(computedStyle.borderLeftWidth) + parseFloat(computedStyle.borderRightWidth);\n }\n if (list.css('box-sizing') !== 'border-box') {\n width = computedWidth - (outerWidth(list) - list.width());\n } else {\n width = computedWidth;\n }\n if (listOuterWidth > width) {\n width = listOuterWidth;\n }\n list.css({\n fontFamily: wrapper.css('font-family'),\n width: width\n }).data(WIDTH, width);\n },\n destroy: function () {\n clearTimeout(this._focusTimeout);\n this.popup.destroy();\n this.element.off(NS);\n this.list.off(NS);\n this.unbind();\n }\n });\n var createDataSource = function (type, name) {\n return function (options) {\n options = isArray(options) ? { data: options } : options;\n var dataSource = options || {};\n var data = dataSource.data;\n dataSource.data = data;\n if (!(dataSource instanceof type) && dataSource instanceof DataSource) {\n throw new Error('Incorrect DataSource type. Only ' + name + ' instances are supported');\n }\n return dataSource instanceof type ? dataSource : new type(dataSource);\n };\n };\n var GanttDependency = kendo.data.Model.define({\n id: 'id',\n fields: {\n id: { type: 'number' },\n predecessorId: { type: 'number' },\n successorId: { type: 'number' },\n type: { type: 'number' }\n }\n });\n var GanttDependencyDataSource = DataSource.extend({\n init: function (options) {\n DataSource.fn.init.call(this, extend(true, {}, {\n schema: {\n modelBase: GanttDependency,\n model: GanttDependency\n }\n }, options));\n },\n successors: function (id) {\n return this._dependencies('predecessorId', id);\n },\n predecessors: function (id) {\n return this._dependencies('successorId', id);\n },\n dependencies: function (id) {\n var predecessors = this.predecessors(id);\n var successors = this.successors(id);\n predecessors.push.apply(predecessors, successors);\n return predecessors;\n },\n _dependencies: function (field, id) {\n var data = this.view();\n var filter = {\n field: field,\n operator: 'eq',\n value: id\n };\n data = new Query(data).filter(filter).toArray();\n return data;\n }\n });\n GanttDependencyDataSource.create = createDataSource(GanttDependencyDataSource, 'GanttDependencyDataSource');\n var GanttTask = kendo.data.Model.define({\n duration: function () {\n var end = this.end;\n var start = this.start;\n return end - start;\n },\n isMilestone: function () {\n return this.duration() === 0;\n },\n _offset: function (value) {\n var field = [\n 'start',\n 'end'\n ];\n var newValue;\n for (var i = 0; i < field.length; i++) {\n newValue = new Date(this.get(field[i]).getTime() + value);\n this.set(field[i], newValue);\n }\n },\n id: 'id',\n fields: {\n id: { type: 'number' },\n parentId: {\n type: 'number',\n defaultValue: null,\n validation: { required: true }\n },\n orderId: {\n type: 'number',\n validation: { required: true }\n },\n title: {\n type: 'string',\n defaultValue: 'New task'\n },\n start: {\n type: 'date',\n validation: { required: true }\n },\n end: {\n type: 'date',\n validation: {\n required: true,\n dateCompare: dateCompareValidator,\n message: 'End date should be after or equal to the start date'\n }\n },\n percentComplete: {\n type: 'number',\n validation: {\n required: true,\n min: 0,\n max: 1,\n step: 0.01\n }\n },\n summary: { type: 'boolean' },\n expanded: {\n type: 'boolean',\n defaultValue: true\n }\n }\n });\n var GanttDataSource = DataSource.extend({\n init: function (options) {\n DataSource.fn.init.call(this, extend(true, {}, {\n schema: {\n modelBase: GanttTask,\n model: GanttTask\n }\n }, options));\n },\n remove: function (task) {\n var parentId = task.get('parentId');\n var children = this.taskAllChildren(task);\n this._removeItems(children);\n task = DataSource.fn.remove.call(this, task);\n this._childRemoved(parentId, task.get('orderId'));\n return task;\n },\n add: function (task) {\n if (!task) {\n return;\n }\n task = this._toGanttTask(task);\n return this.insert(this.taskSiblings(task).length, task);\n },\n insert: function (index, task) {\n if (!task) {\n return;\n }\n task = this._toGanttTask(task);\n task.set('orderId', index);\n task = DataSource.fn.insert.call(this, index, task);\n this._reorderSiblings(task, this.taskSiblings(task).length - 1);\n this._resolveSummaryFields(this.taskParent(task));\n return task;\n },\n taskChildren: function (task) {\n var data = this.view();\n var filter = {\n field: 'parentId',\n operator: 'eq',\n value: null\n };\n var order = this._sort && this._sort.length ? this._sort : {\n field: 'orderId',\n dir: 'asc'\n };\n var taskId;\n if (!!task) {\n taskId = task.get('id');\n if (taskId === undefined || taskId === null || taskId === '') {\n return [];\n }\n filter.value = taskId;\n }\n data = new Query(data).filter(filter).sort(order).toArray();\n return data;\n },\n taskAllChildren: function (task) {\n var data = [];\n var that = this;\n var callback = function (task) {\n var tasks = that.taskChildren(task);\n data.push.apply(data, tasks);\n map(tasks, callback);\n };\n if (!!task) {\n callback(task);\n } else {\n data = this.view();\n }\n return data;\n },\n taskSiblings: function (task) {\n if (!task) {\n return null;\n }\n var parent = this.taskParent(task);\n return this.taskChildren(parent);\n },\n taskParent: function (task) {\n if (!task || task.get('parentId') === null) {\n return null;\n }\n return this.get(task.parentId);\n },\n taskLevel: function (task) {\n var level = 0;\n var parent = this.taskParent(task);\n while (parent !== null) {\n level += 1;\n parent = this.taskParent(parent);\n }\n return level;\n },\n taskTree: function (task) {\n var data = [];\n var current;\n var tasks = this.taskChildren(task);\n for (var i = 0, l = tasks.length; i < l; i++) {\n current = tasks[i];\n data.push(current);\n if (current.get('expanded')) {\n var children = this.taskTree(current);\n data.push.apply(data, children);\n }\n }\n return data;\n },\n update: function (task, taskInfo) {\n var that = this;\n var oldValue;\n var offsetChildren = function (parentTask, offset) {\n var children = that.taskAllChildren(parentTask);\n for (var i = 0, l = children.length; i < l; i++) {\n children[i]._offset(offset);\n }\n };\n var modelChangeHandler = function (e) {\n var field = e.field;\n var model = e.sender;\n switch (field) {\n case 'start':\n that._resolveSummaryStart(that.taskParent(model));\n offsetChildren(model, model.get(field).getTime() - oldValue.getTime());\n break;\n case 'end':\n that._resolveSummaryEnd(that.taskParent(model));\n break;\n case 'percentComplete':\n that._resolveSummaryPercentComplete(that.taskParent(model));\n break;\n case 'orderId':\n that._reorderSiblings(model, oldValue);\n break;\n }\n };\n if (taskInfo.parentId !== undefined) {\n oldValue = task.get('parentId');\n if (oldValue !== taskInfo.parentId) {\n task.set('parentId', taskInfo.parentId);\n that._childRemoved(oldValue, task.get('orderId'));\n task.set('orderId', that.taskSiblings(task).length - 1);\n that._resolveSummaryFields(that.taskParent(task));\n }\n delete taskInfo.parentId;\n }\n task.bind('change', modelChangeHandler);\n for (var field in taskInfo) {\n oldValue = task.get(field);\n task.set(field, taskInfo[field]);\n }\n task.unbind('change', modelChangeHandler);\n },\n _resolveSummaryFields: function (summary) {\n if (!summary) {\n return;\n }\n this._updateSummary(summary);\n if (!this.taskChildren(summary).length) {\n return;\n }\n this._resolveSummaryStart(summary);\n this._resolveSummaryEnd(summary);\n this._resolveSummaryPercentComplete(summary);\n },\n _resolveSummaryStart: function (summary) {\n var that = this;\n var getSummaryStart = function (parentTask) {\n var children = that.taskChildren(parentTask);\n var min = children[0].start.getTime();\n var currentMin;\n for (var i = 1, l = children.length; i < l; i++) {\n currentMin = children[i].start.getTime();\n if (currentMin < min) {\n min = currentMin;\n }\n }\n return new Date(min);\n };\n this._updateSummaryRecursive(summary, 'start', getSummaryStart);\n },\n _resolveSummaryEnd: function (summary) {\n var that = this;\n var getSummaryEnd = function (parentTask) {\n var children = that.taskChildren(parentTask);\n var max = children[0].end.getTime();\n var currentMax;\n for (var i = 1, l = children.length; i < l; i++) {\n currentMax = children[i].end.getTime();\n if (currentMax > max) {\n max = currentMax;\n }\n }\n return new Date(max);\n };\n this._updateSummaryRecursive(summary, 'end', getSummaryEnd);\n },\n _resolveSummaryPercentComplete: function (summary) {\n var that = this;\n var getSummaryPercentComplete = function (parentTask) {\n var children = that.taskChildren(parentTask);\n var percentComplete = new Query(children).aggregate([{\n field: 'percentComplete',\n aggregate: 'average'\n }]);\n return percentComplete.percentComplete.average;\n };\n this._updateSummaryRecursive(summary, 'percentComplete', getSummaryPercentComplete);\n },\n _updateSummaryRecursive: function (summary, field, callback) {\n if (!summary) {\n return;\n }\n var value = callback(summary);\n summary.set(field, value);\n var parent = this.taskParent(summary);\n if (parent) {\n this._updateSummaryRecursive(parent, field, callback);\n }\n },\n _childRemoved: function (parentId, index) {\n var parent = parentId === null ? null : this.get(parentId);\n var children = this.taskChildren(parent);\n for (var i = index, l = children.length; i < l; i++) {\n children[i].set('orderId', i);\n }\n this._resolveSummaryFields(parent);\n },\n _reorderSiblings: function (task, oldOrderId) {\n var orderId = task.get('orderId');\n var direction = orderId > oldOrderId;\n var startIndex = direction ? oldOrderId : orderId;\n var endIndex = direction ? orderId : oldOrderId;\n var newIndex = direction ? startIndex : startIndex + 1;\n var siblings = this.taskSiblings(task);\n endIndex = Math.min(endIndex, siblings.length - 1);\n for (var i = startIndex; i <= endIndex; i++) {\n if (siblings[i] === task) {\n continue;\n }\n siblings[i].set('orderId', newIndex);\n newIndex += 1;\n }\n },\n _updateSummary: function (task) {\n if (task !== null) {\n var childCount = this.taskChildren(task).length;\n task.set('summary', childCount > 0);\n }\n },\n _toGanttTask: function (task) {\n if (!(task instanceof GanttTask)) {\n var taskInfo = task;\n task = this._createNewModel();\n task.accept(taskInfo);\n }\n return task;\n }\n });\n GanttDataSource.create = createDataSource(GanttDataSource, 'GanttDataSource');\n extend(true, kendo.data, {\n GanttDataSource: GanttDataSource,\n GanttTask: GanttTask,\n GanttDependencyDataSource: GanttDependencyDataSource,\n GanttDependency: GanttDependency\n });\n var editors = {\n desktop: {\n dateRange: DATERANGEEDITOR,\n resources: RESOURCESEDITOR\n }\n };\n var Editor = kendo.Observable.extend({\n init: function (element, options) {\n kendo.Observable.fn.init.call(this);\n this.element = element;\n this.options = extend(true, {}, this.options, options);\n this.createButton = this.options.createButton;\n },\n fields: function (editors, model) {\n var that = this;\n var options = this.options;\n var messages = options.messages.editor;\n var resources = options.resources;\n var fields;\n var click = function (e) {\n e.preventDefault();\n resources.editor(that.container.find(DOT + Gantt.styles.popup.resourcesField), model);\n };\n if (options.editable.template) {\n fields = $.map(model.fields, function (value, key) {\n return { field: key };\n });\n } else {\n fields = [\n {\n field: 'title',\n title: messages.title\n },\n {\n field: 'start',\n title: messages.start,\n editor: editors.dateRange\n },\n {\n field: 'end',\n title: messages.end,\n editor: editors.dateRange\n },\n {\n field: 'percentComplete',\n title: messages.percentComplete,\n format: PERCENTAGE_FORMAT\n }\n ];\n if (model.get(resources.field)) {\n fields.push({\n field: resources.field,\n title: messages.resources,\n messages: messages,\n editor: editors.resources,\n click: click,\n styles: Gantt.styles.popup\n });\n }\n }\n return fields;\n },\n _buildEditTemplate: function (model, fields, editableFields) {\n var resources = this.options.resources;\n var template = this.options.editable.template;\n var settings = extend({}, kendo.Template, this.options.templateSettings);\n var paramName = settings.paramName;\n var popupStyles = Gantt.styles.popup;\n var html = '';\n if (template) {\n if (typeof template === STRING) {\n template = window.unescape(template);\n }\n html += kendo.template(template, settings)(model);\n } else {\n for (var i = 0, length = fields.length; i < length; i++) {\n var field = fields[i];\n html += '<div class=\"' + popupStyles.editLabel + '\"><label for=\"' + field.field + '\">' + (field.title || field.field || '') + '</label></div>';\n if (field.field === resources.field) {\n html += '<div class=\"' + popupStyles.resourcesField + '\" style=\"display:none\"></div>';\n }\n if (!model.editable || model.editable(field.field)) {\n editableFields.push(field);\n html += '<div ' + kendo.attr('container-for') + '=\"' + field.field + '\" class=\"' + popupStyles.editField + '\"></div>';\n } else {\n var tmpl = '#:';\n if (field.field) {\n field = kendo.expr(field.field, paramName);\n tmpl += field + '==null?\\'\\':' + field;\n } else {\n tmpl += '\\'\\'';\n }\n tmpl += '#';\n tmpl = kendo.template(tmpl, settings);\n html += '<div class=\"' + popupStyles.editField + '\">' + tmpl(model) + '</div>';\n }\n }\n }\n return html;\n }\n });\n var PopupEditor = Editor.extend({\n destroy: function () {\n this.close();\n this.unbind();\n },\n editTask: function (task) {\n this.editable = this._createPopupEditor(task);\n },\n close: function () {\n var that = this;\n var destroy = function () {\n if (that.editable) {\n that.editable.destroy();\n that.editable = null;\n that.container = null;\n }\n if (that.popup) {\n that.popup.destroy();\n that.popup = null;\n }\n };\n if (this.editable && this.container.is(':visible')) {\n that.trigger('close', { window: that.container });\n this.container.data('kendoWindow').bind('deactivate', destroy).close();\n } else {\n destroy();\n }\n },\n showDialog: function (options) {\n var buttons = options.buttons;\n var popupStyles = Gantt.styles.popup;\n var html = kendo.format('<div class=\"{0}\"><div class=\"{1}\"><p class=\"{2}\">{3}</p><div class=\"{4}\">', popupStyles.form, popupStyles.formContainer, popupStyles.message, options.text, popupStyles.buttonsContainer);\n for (var i = 0, length = buttons.length; i < length; i++) {\n html += this.createButton(buttons[i]);\n }\n html += '</div></div></div>';\n var wrapper = this.element;\n if (this.popup) {\n this.popup.destroy();\n }\n var popup = this.popup = $(html).appendTo(wrapper).eq(0).on('click', DOT + popupStyles.button, function (e) {\n e.preventDefault();\n popup.close();\n var buttonIndex = $(e.currentTarget).index();\n buttons[buttonIndex].click();\n }).kendoWindow({\n modal: true,\n resizable: false,\n draggable: false,\n title: options.title,\n visible: false,\n deactivate: function () {\n this.destroy();\n wrapper.focus();\n }\n }).getKendoWindow();\n popup.center().open();\n },\n _createPopupEditor: function (task) {\n var that = this;\n var options = {};\n var messages = this.options.messages;\n var ganttStyles = Gantt.styles;\n var popupStyles = ganttStyles.popup;\n var html = kendo.format('<div {0}=\"{1}\" class=\"{2} {3}\"><div class=\"{4}\">', kendo.attr('uid'), task.uid, popupStyles.form, popupStyles.editForm, popupStyles.formContainer);\n var fields = this.fields(editors.desktop, task);\n var editableFields = [];\n html += this._buildEditTemplate(task, fields, editableFields);\n html += '<div class=\"' + popupStyles.buttonsContainer + '\">';\n html += this.createButton({\n name: 'update',\n text: messages.save,\n className: Gantt.styles.primary\n });\n html += this.createButton({\n name: 'cancel',\n text: messages.cancel\n });\n if (that.options.editable.destroy !== false) {\n html += this.createButton({\n name: 'delete',\n text: messages.destroy\n });\n }\n html += '</div></div></div>';\n var container = this.container = $(html).appendTo(this.element).eq(0).kendoWindow(extend({\n modal: true,\n resizable: false,\n draggable: true,\n title: messages.editor.editorTitle,\n visible: false,\n close: function (e) {\n if (e.userTriggered) {\n if (that.trigger('cancel', {\n container: container,\n model: task\n })) {\n e.preventDefault();\n }\n }\n }\n }, options));\n var editableWidget = container.kendoEditable({\n fields: editableFields,\n model: task,\n clearContainer: false,\n validateOnBlur: true,\n target: that.options.target\n }).data('kendoEditable');\n kendo.cycleForm(container);\n if (!this.trigger('edit', {\n container: container,\n model: task\n })) {\n container.data('kendoWindow').center().open();\n container.on(CLICK + NS, DOT + ganttStyles.buttonCancel, function (e) {\n e.preventDefault();\n e.stopPropagation();\n that.trigger('cancel', {\n container: container,\n model: task\n });\n });\n container.on(CLICK + NS, DOT + ganttStyles.buttonSave, function (e) {\n e.preventDefault();\n e.stopPropagation();\n var fields = that.fields(editors.desktop, task);\n var updateInfo = {};\n var field;\n for (var i = 0, length = fields.length; i < length; i++) {\n field = fields[i].field;\n updateInfo[field] = task.get(field);\n }\n that.trigger('save', {\n container: container,\n model: task,\n updateInfo: updateInfo\n });\n });\n container.on(CLICK + NS, DOT + ganttStyles.buttonDelete, function (e) {\n e.preventDefault();\n e.stopPropagation();\n that.trigger('remove', {\n container: container,\n model: task\n });\n });\n } else {\n that.trigger('cancel', {\n container: container,\n model: task\n });\n }\n return editableWidget;\n }\n });\n var ResourceEditor = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this.wrapper = this.element;\n this.model = this.options.model;\n this.resourcesField = this.options.resourcesField;\n this.createButton = this.options.createButton;\n this._initContainer();\n this._attachHandlers();\n },\n events: ['save'],\n open: function () {\n this.window.center().open();\n },\n close: function () {\n this.window.bind('deactivate', proxy(this.destroy, this)).close();\n },\n destroy: function () {\n this._dettachHandlers();\n this.grid.destroy();\n this.grid = null;\n this.window.destroy();\n this.window = null;\n Widget.fn.destroy.call(this);\n kendo.destroy(this.wrapper);\n this.element = this.wrapper = null;\n },\n _attachHandlers: function () {\n var ganttStyles = Gantt.styles;\n var grid = this.grid;\n var closeHandler = this._cancelProxy = proxy(this._cancel, this);\n this.container.on(CLICK + NS, DOT + ganttStyles.buttonCancel, this._cancelProxy);\n this._saveProxy = proxy(this._save, this);\n this.container.on(CLICK + NS, DOT + ganttStyles.buttonSave, this._saveProxy);\n this.window.bind('close', function (e) {\n if (e.userTriggered) {\n closeHandler(e);\n }\n });\n grid.wrapper.on(CLICK + NS, 'input[type=\\'checkbox\\']', function () {\n var element = $(this);\n var row = $(element).closest('tr');\n var model = grid.dataSource.getByUid(row.attr(kendo.attr('uid')));\n var value = $(element).is(':checked') ? 1 : '';\n model.set('value', value);\n });\n },\n _dettachHandlers: function () {\n this._cancelProxy = null;\n this._saveProxy = null;\n this.container.off(NS);\n this.grid.wrapper.off();\n },\n _cancel: function (e) {\n e.preventDefault();\n this.close();\n },\n _save: function (e) {\n e.preventDefault();\n this._updateModel();\n if (!this.wrapper.is(DOT + Gantt.styles.popup.resourcesField)) {\n this.trigger('save', {\n container: this.wrapper,\n model: this.model\n });\n }\n this.close();\n },\n _initContainer: function () {\n var that = this;\n var popupStyles = Gantt.styles.popup;\n var dom = kendo.format('<div class=\"{0} {1}\"><div class=\"{2} {3}\"/></div>\"', popupStyles.form, popupStyles.editForm, popupStyles.formContainer, popupStyles.resourcesFormContainer);\n dom = $(dom);\n this.container = dom.find(DOT + popupStyles.resourcesFormContainer);\n this.window = dom.kendoWindow({\n modal: true,\n resizable: false,\n draggable: true,\n visible: false,\n title: this.options.messages.resourcesEditorTitle,\n open: function () {\n that.grid.resize(true);\n }\n }).data('kendoWindow');\n this._resourceGrid();\n this._createButtons();\n },\n _resourceGrid: function () {\n var that = this;\n var messages = this.options.messages;\n var element = $('<div id=\"resources-grid\"/>').appendTo(this.container);\n this.grid = new kendo.ui.Grid(element, {\n columns: [\n {\n field: 'name',\n title: messages.resourcesHeader,\n template: '<label><input type=\\'checkbox\\' value=\\'#=name#\\'' + '# if (value > 0 && value !== null) {#' + 'checked=\\'checked\\'' + '# } #' + '/>#=name#</labe>'\n },\n {\n field: 'value',\n title: messages.unitsHeader,\n template: function (dataItem) {\n var valueFormat = dataItem.format;\n var value = dataItem.value !== null ? dataItem.value : '';\n return valueFormat ? kendo.toString(value, valueFormat) : value;\n }\n }\n ],\n height: 280,\n sortable: true,\n editable: true,\n filterable: true,\n dataSource: {\n data: that.options.data,\n schema: {\n model: {\n id: 'id',\n fields: {\n id: { from: 'id' },\n name: {\n from: 'name',\n type: 'string',\n editable: false\n },\n value: {\n from: 'value',\n type: 'number',\n defaultValue: ''\n },\n format: {\n from: 'format',\n type: 'string'\n }\n }\n }\n }\n },\n save: function (e) {\n var value = !!e.values.value;\n e.container.parent().find('input[type=\\'checkbox\\']').prop('checked', value);\n }\n });\n },\n _createButtons: function () {\n var buttons = this.options.buttons;\n var html = '<div class=\"' + Gantt.styles.popup.buttonsContainer + '\">';\n for (var i = 0, length = buttons.length; i < length; i++) {\n html += this.createButton(buttons[i]);\n }\n html += '</div>';\n this.container.append(html);\n },\n _updateModel: function () {\n var resources = [];\n var value;\n var data = this.grid.dataSource.data();\n for (var i = 0, length = data.length; i < length; i++) {\n value = data[i].get('value');\n if (value !== null && value > 0) {\n resources.push(data[i]);\n }\n }\n this.model[this.resourcesField] = resources;\n }\n });\n var Gantt = Widget.extend({\n init: function (element, options, events) {\n if (isArray(options)) {\n options = { dataSource: options };\n }\n defaultCommands = {\n append: {\n text: 'Add Task',\n action: 'add',\n className: Gantt.styles.toolbar.appendButton,\n iconClass: Gantt.styles.toolbar.iconPlus\n },\n pdf: {\n text: 'Export to PDF',\n className: Gantt.styles.toolbar.pdfButton,\n iconClass: Gantt.styles.toolbar.iconPdf\n }\n };\n Widget.fn.init.call(this, element, options);\n if (events) {\n this._events = events;\n }\n this._wrapper();\n this._resources();\n if (!this.options.views || !this.options.views.length) {\n this.options.views = [\n 'day',\n 'week',\n 'month'\n ];\n }\n this._timeline();\n this._toolbar();\n this._footer();\n this._adjustDimensions();\n this._preventRefresh = true;\n this.view(this.timeline._selectedViewName);\n this._preventRefresh = false;\n this._dataSource();\n this._assignments();\n this._dropDowns();\n this._list();\n this._dependencies();\n this._resizable();\n this._scrollable();\n this._dataBind();\n this._attachEvents();\n this._createEditor();\n kendo.notify(this);\n },\n events: [\n 'dataBinding',\n 'dataBound',\n 'add',\n 'edit',\n 'remove',\n 'cancel',\n 'save',\n 'change',\n 'navigate',\n 'moveStart',\n 'move',\n 'moveEnd',\n 'resizeStart',\n 'resize',\n 'resizeEnd',\n 'columnResize'\n ],\n options: {\n name: 'Gantt',\n autoBind: true,\n navigatable: false,\n selectable: true,\n editable: true,\n resizable: false,\n columnResizeHandleWidth: defaultIndicatorWidth,\n columns: [],\n views: [],\n dataSource: {},\n dependencies: {},\n resources: {},\n assignments: {},\n taskTemplate: null,\n messages: {\n save: 'Save',\n cancel: 'Cancel',\n destroy: 'Delete',\n deleteTaskConfirmation: TASK_DELETE_CONFIRM,\n deleteDependencyConfirmation: DEPENDENCY_DELETE_CONFIRM,\n deleteTaskWindowTitle: 'Delete task',\n deleteDependencyWindowTitle: 'Delete dependency',\n views: {\n day: 'Day',\n week: 'Week',\n month: 'Month',\n year: 'Year',\n start: 'Start',\n end: 'End'\n },\n actions: {\n append: 'Add Task',\n addChild: 'Add Child',\n insertBefore: 'Add Above',\n insertAfter: 'Add Below',\n pdf: 'Export to PDF'\n },\n editor: {\n editorTitle: 'Task',\n resourcesEditorTitle: 'Resources',\n title: 'Title',\n start: 'Start',\n end: 'End',\n percentComplete: 'Complete',\n resources: 'Resources',\n assignButton: 'Assign',\n resourcesHeader: 'Resources',\n unitsHeader: 'Units'\n }\n },\n showWorkHours: true,\n showWorkDays: true,\n toolbar: null,\n workDayStart: new Date(1980, 1, 1, 8, 0, 0),\n workDayEnd: new Date(1980, 1, 1, 17, 0, 0),\n workWeekStart: 1,\n workWeekEnd: 5,\n hourSpan: 1,\n snap: true,\n height: 600,\n listWidth: '30%',\n rowHeight: null\n },\n select: function (value) {\n var list = this.list;\n if (!value) {\n return list.select();\n }\n list.select(value);\n return;\n },\n clearSelection: function () {\n this.list.clearSelection();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n if (this.dataSource) {\n this.dataSource.unbind('change', this._refreshHandler);\n this.dataSource.unbind('progress', this._progressHandler);\n this.dataSource.unbind('error', this._errorHandler);\n }\n if (this.dependencies) {\n this.dependencies.unbind('change', this._dependencyRefreshHandler);\n this.dependencies.unbind('error', this._dependencyErrorHandler);\n }\n if (this.timeline) {\n this.timeline.unbind();\n this.timeline.destroy();\n }\n if (this.list) {\n this.list.unbind();\n this.list.destroy();\n }\n if (this.footerDropDown) {\n this.footerDropDown.destroy();\n }\n if (this.headerDropDown) {\n this.headerDropDown.destroy();\n }\n if (this._editor) {\n this._editor.destroy();\n }\n if (this._resizeDraggable) {\n this._resizeDraggable.destroy();\n }\n this.toolbar.off(NS);\n if (supportsMedia) {\n this._mediaQuery.removeListener(this._mediaQueryHandler);\n this._mediaQuery = null;\n }\n $(window).off('resize' + NS, this._resizeHandler);\n $(this.wrapper).off(NS);\n this.toolbar = null;\n this.footer = null;\n },\n setOptions: function (options) {\n var newOptions = kendo.deepExtend({}, this.options, options);\n var events = this._events;\n if (!options.views) {\n var selectedView = this.view().name;\n newOptions.views = $.map(this.options.views, function (view) {\n var isSettings = isPlainObject(view);\n var name = isSettings ? typeof view.type !== 'string' ? view.title : view.type : view;\n if (selectedView === name) {\n if (isSettings) {\n view.selected = true;\n } else {\n view = {\n type: name,\n selected: true\n };\n }\n } else if (isSettings) {\n view.selected = false;\n }\n return view;\n });\n }\n if (!options.dataSource) {\n newOptions.dataSource = this.dataSource;\n }\n if (!options.dependencies) {\n newOptions.dependencies = this.dependencies;\n }\n if (!options.resources) {\n newOptions.resources = this.resources;\n }\n if (!options.assignments) {\n newOptions.assignments = this.assignments;\n }\n this.destroy();\n this.element.empty();\n this.options = null;\n this.init(this.element, newOptions, events);\n Widget.fn._setEvents.call(this, newOptions);\n },\n _attachEvents: function () {\n this._resizeHandler = proxy(this.resize, this, false);\n $(window).on('resize' + NS, this._resizeHandler);\n },\n _wrapper: function () {\n var ganttStyles = Gantt.styles;\n var splitBarHandleClassName = [\n ganttStyles.icon,\n ganttStyles.resizeHandle\n ].join(' ');\n var options = this.options;\n var height = options.height;\n var width = options.width;\n this.wrapper = this.element.addClass(ganttStyles.wrapper).append('<div class=\\'' + ganttStyles.listWrapper + '\\'><div></div></div>').append('<div class=\\'' + ganttStyles.splitBarWrapper + '\\'><div class=\\'' + splitBarHandleClassName + '\\'></div></div>').append('<div class=\\'' + ganttStyles.timelineWrapper + '\\'><div></div></div>');\n this.wrapper.find(DOT + ganttStyles.list).width(options.listWidth);\n if (height) {\n this.wrapper.height(height);\n }\n if (width) {\n this.wrapper.width(width);\n }\n if (options.rowHeight) {\n this.wrapper.addClass(ganttStyles.rowHeight);\n }\n },\n _toolbar: function () {\n var that = this;\n var ganttStyles = Gantt.styles;\n var viewsSelector = DOT + ganttStyles.toolbar.views + ' > li';\n var pdfSelector = DOT + ganttStyles.toolbar.pdfButton;\n var toggleSelector = DOT + ganttStyles.buttonToggle;\n var contentSelector = DOT + ganttStyles.gridContent;\n var treelist = $(DOT + ganttStyles.list);\n var timeline = $(DOT + ganttStyles.timeline);\n var hoveredClassName = ganttStyles.hovered;\n var actions = this.options.toolbar;\n var actionsWrap = $('<div class=\\'' + ganttStyles.toolbar.actions + '\\'>');\n var toolbar;\n var views;\n var toggleButton;\n var handler = function (e) {\n if (e.matches) {\n treelist.css({\n 'display': 'none',\n 'max-width': 0\n });\n } else {\n treelist.css({\n 'display': 'inline-block',\n 'width': '30%',\n 'max-width': 'none'\n });\n timeline.css('display', 'inline-block');\n that.refresh();\n timeline.find(contentSelector).scrollTop(that.scrollTop);\n }\n that._resize();\n };\n if (!isFunction(actions)) {\n actions = typeof actions === STRING ? actions : this._actions(actions);\n actions = proxy(kendo.template(actions), this);\n }\n toggleButton = $(TOGGLE_BUTTON_TEMPLATE({ styles: ganttStyles.toolbar }));\n views = $(HEADER_VIEWS_TEMPLATE({\n ns: kendo.ns,\n views: this.timeline.views,\n styles: ganttStyles.toolbar\n }));\n actionsWrap.append(actions({}));\n toolbar = $('<div class=\\'' + ganttStyles.toolbar.headerWrapper + '\\'>').append(toggleButton).append(views).append(actionsWrap);\n if (views.find('li').length > 1) {\n views.prepend(VIEWBUTTONTEMPLATE({ styles: ganttStyles.toolbar }));\n }\n this.wrapper.prepend(toolbar);\n this.toolbar = toolbar;\n if (supportsMedia) {\n this._mediaQueryHandler = proxy(handler, this);\n this._mediaQuery = window.matchMedia('(max-width: 480px)');\n this._mediaQuery.addListener(this._mediaQueryHandler);\n }\n toolbar.on(CLICK + NS, viewsSelector, function (e) {\n e.preventDefault();\n var list = that.list;\n var name = $(this).attr(kendo.attr('name'));\n var currentView = views.find(DOT + ganttStyles.toolbar.currentView);\n if (currentView.is(':visible')) {\n currentView.parent().toggleClass(ganttStyles.toolbar.expanded);\n }\n if (list.editable && list.editable.trigger('validate')) {\n return;\n }\n if (!that.trigger('navigate', { view: name })) {\n that.view(name);\n }\n }).on(CLICK + NS, pdfSelector, function (e) {\n e.preventDefault();\n that.saveAsPDF();\n }).on(CLICK + NS, toggleSelector, function (e) {\n e.preventDefault();\n if (treelist.is(':visible')) {\n treelist.css({\n 'display': 'none',\n 'width': '0'\n });\n timeline.css({\n 'display': 'inline-block',\n 'width': '100%'\n });\n that.refresh();\n timeline.find(contentSelector).scrollTop(that.scrollTop);\n } else {\n timeline.css({\n 'display': 'none',\n 'width': 0\n });\n treelist.css({\n 'display': 'inline-block',\n 'width': '100%',\n 'max-width': 'none'\n }).find(contentSelector).scrollTop(that.scrollTop);\n }\n that._resize();\n });\n this.wrapper.find(DOT + ganttStyles.toolbar.toolbar + ' li').hover(function () {\n $(this).addClass(hoveredClassName);\n }, function () {\n $(this).removeClass(hoveredClassName);\n });\n },\n _actions: function () {\n var options = this.options;\n var editable = options.editable;\n var actions = options.toolbar;\n var html = '';\n if (!isArray(actions)) {\n if (editable && editable.create !== false) {\n actions = ['append'];\n } else {\n return html;\n }\n }\n for (var i = 0, length = actions.length; i < length; i++) {\n html += this._createButton(actions[i]);\n }\n return html;\n },\n _footer: function () {\n var editable = this.options.editable;\n if (!editable || editable.create === false) {\n return;\n }\n var ganttStyles = Gantt.styles.toolbar;\n var messages = this.options.messages.actions;\n var button = $(kendo.template(BUTTON_TEMPLATE)(extend(true, { styles: ganttStyles }, defaultCommands.append, { text: messages.append })));\n var actionsWrap = $('<div class=\\'' + ganttStyles.actions + '\\'>').append(button);\n var footer = $('<div class=\\'' + ganttStyles.footerWrapper + '\\'>').append(actionsWrap);\n this.wrapper.append(footer);\n this.footer = footer;\n },\n _createButton: function (command) {\n var template = command.template || BUTTON_TEMPLATE;\n var messages = this.options.messages.actions;\n var commandName = typeof command === STRING ? command : command.name || command.text;\n var className = defaultCommands[commandName] ? defaultCommands[commandName].className : 'k-gantt-' + (commandName || '').replace(/\\s/g, '');\n var options = {\n iconClass: '',\n action: '',\n text: commandName,\n className: className,\n styles: Gantt.styles.toolbar\n };\n if (!commandName && !(isPlainObject(command) && command.template)) {\n throw new Error('Custom commands should have name specified');\n }\n options = extend(true, options, defaultCommands[commandName], { text: messages[commandName] });\n if (isPlainObject(command)) {\n if (command.className && inArray(options.className, command.className.split(' ')) < 0) {\n command.className += ' ' + options.className;\n }\n options = extend(true, options, command);\n }\n return kendo.template(template)(options);\n },\n _adjustDimensions: function () {\n var element = this.element;\n var ganttStyles = Gantt.styles;\n var listSelector = DOT + ganttStyles.list;\n var timelineSelector = DOT + ganttStyles.timeline;\n var splitBarSelector = DOT + ganttStyles.splitBar;\n var toolbarHeight = outerHeight(this.toolbar);\n var footerHeight = this.footer ? outerHeight(this.footer) : 0;\n var totalHeight = element.height();\n var totalWidth = element.width();\n var splitBarWidth = outerWidth(element.find(splitBarSelector));\n var treeListWidth = outerWidth(element.find(listSelector));\n element.children([\n listSelector,\n timelineSelector,\n splitBarSelector\n ].join(',')).height(totalHeight - (toolbarHeight + footerHeight)).end().children(timelineSelector).width(totalWidth - (splitBarWidth + treeListWidth));\n if (totalWidth < treeListWidth + splitBarWidth) {\n element.find(listSelector).width(totalWidth - splitBarWidth);\n }\n },\n _scrollTo: function (value) {\n var view = this.timeline.view();\n var list = this.list;\n var attr = kendo.attr('uid');\n var id = typeof value === 'string' ? value : value.closest('tr' + selector()).attr(attr);\n var action;\n var scrollTarget;\n var scrollIntoView = function () {\n if (scrollTarget.length !== 0) {\n action();\n }\n };\n if (view.content.is(':visible')) {\n scrollTarget = view.content.find(selector(id));\n action = function () {\n view._scrollTo(scrollTarget);\n };\n } else {\n scrollTarget = list.content.find(selector(id));\n action = function () {\n scrollTarget.get(0).scrollIntoView();\n };\n }\n scrollIntoView();\n },\n _dropDowns: function () {\n var that = this;\n var actionsSelector = DOT + Gantt.styles.toolbar.actions;\n var actionMessages = this.options.messages.actions;\n var timeline = this.timeline;\n var editable = this.options.editable;\n var handler = function (e) {\n var type = e.type;\n var orderId;\n var dataSource = that.dataSource;\n var task = dataSource._createNewModel();\n var selected = that.dataItem(that.select());\n var parent = dataSource.taskParent(selected);\n var firstSlot = timeline.view()._timeSlots()[0];\n var target = type === 'add' ? selected : parent;\n var editable = that.list.editable;\n if (editable && editable.trigger('validate')) {\n return;\n }\n task.set('title', 'New task');\n if (target) {\n task.set('parentId', target.get('id'));\n task.set('start', target.get('start'));\n task.set('end', target.get('end'));\n } else {\n task.set('start', firstSlot.start);\n task.set('end', firstSlot.end);\n }\n if (type !== 'add') {\n orderId = selected.get('orderId');\n orderId = type === 'insert-before' ? orderId : orderId + 1;\n }\n that._createTask(task, orderId);\n };\n if (!editable || editable.create === false) {\n return;\n }\n this.footerDropDown = new TaskDropDown(this.footer.children(actionsSelector).eq(0), {\n messages: { actions: actionMessages },\n direction: 'up',\n animation: { open: { effects: 'slideIn:up' } },\n navigatable: that.options.navigatable\n });\n this.headerDropDown = new TaskDropDown(this.toolbar.children(actionsSelector).eq(0), {\n messages: { actions: actionMessages },\n navigatable: that.options.navigatable\n });\n this.footerDropDown.bind('command', handler);\n this.headerDropDown.bind('command', handler);\n },\n _list: function () {\n var that = this;\n var navigatable = that.options.navigatable;\n var ganttStyles = Gantt.styles;\n var listWrapper = this.wrapper.find(DOT + ganttStyles.list);\n var element = listWrapper.find('> div');\n var toggleButtons = this.wrapper.find(DOT + ganttStyles.toolbar.actions + ' > button');\n var options = {\n columns: this.options.columns || [],\n dataSource: this.dataSource,\n selectable: this.options.selectable,\n editable: this.options.editable,\n resizable: this.options.resizable,\n columnResizeHandleWidth: this.options.columnResizeHandleWidth,\n listWidth: outerWidth(listWrapper),\n resourcesField: this.resources.field,\n rowHeight: this.options.rowHeight\n };\n var columns = options.columns;\n var column;\n var restoreFocus = function () {\n if (navigatable) {\n that._current(that._cachedCurrent);\n focusTable(that.list.content.find('table'), true);\n }\n delete that._cachedCurrent;\n };\n for (var i = 0; i < columns.length; i++) {\n column = columns[i];\n if (column.field === this.resources.field && typeof column.editor !== 'function') {\n column.editor = proxy(this._createResourceEditor, this);\n }\n }\n this.list = new kendo.ui.GanttList(element, options);\n this.list.bind('render', function () {\n that._navigatable();\n }, true).bind('edit', function (e) {\n that._cachedCurrent = e.cell;\n if (that.trigger('edit', {\n task: e.model,\n container: e.cell\n })) {\n e.preventDefault();\n }\n }).bind('cancel', function (e) {\n if (that.trigger('cancel', {\n task: e.model,\n container: e.cell\n })) {\n e.preventDefault();\n }\n restoreFocus();\n }).bind('update', function (e) {\n that._updateTask(e.task, e.updateInfo);\n restoreFocus();\n }).bind('change', function () {\n that.trigger('change');\n var selection = that.list.select();\n if (selection.length) {\n toggleButtons.removeAttr('data-action', 'add');\n that.timeline.select('[data-uid=\\'' + selection.attr('data-uid') + '\\']');\n } else {\n toggleButtons.attr('data-action', 'add');\n that.timeline.clearSelection();\n }\n }).bind('columnResize', function (e) {\n that.trigger('columnResize', {\n column: e.column,\n oldWidth: e.oldWidth,\n newWidth: e.newWidth\n });\n });\n },\n _timeline: function () {\n var that = this;\n var ganttStyles = Gantt.styles;\n var options = trimOptions(extend(true, { resourcesField: this.resources.field }, this.options));\n var element = this.wrapper.find(DOT + ganttStyles.timeline + ' > div');\n var currentViewSelector = DOT + ganttStyles.toolbar.currentView + ' > ' + DOT + ganttStyles.toolbar.link;\n this.timeline = new kendo.ui.GanttTimeline(element, options);\n this.timeline.bind('navigate', function (e) {\n var viewName = e.view.replace(/\\./g, '\\\\.').toLowerCase();\n var text = that.toolbar.find(DOT + ganttStyles.toolbar.views + ' > li').removeClass(ganttStyles.selected).end().find(DOT + ganttStyles.toolbar.viewButton + '-' + viewName).addClass(ganttStyles.selected).find(DOT + ganttStyles.toolbar.link).text();\n that.toolbar.find(currentViewSelector).text(text);\n that.refresh();\n }).bind('moveStart', function (e) {\n var editable = that.list.editable;\n if (editable && editable.trigger('validate')) {\n e.preventDefault();\n return;\n }\n if (that.trigger('moveStart', { task: e.task })) {\n e.preventDefault();\n }\n }).bind('move', function (e) {\n var task = e.task;\n var start = e.start;\n var end = new Date(start.getTime() + task.duration());\n if (that.trigger('move', {\n task: task,\n start: start,\n end: end\n })) {\n e.preventDefault();\n }\n }).bind('moveEnd', function (e) {\n var task = e.task;\n var start = e.start;\n var end = new Date(start.getTime() + task.duration());\n if (!that.trigger('moveEnd', {\n task: task,\n start: start,\n end: end\n })) {\n that._updateTask(that.dataSource.getByUid(task.uid), {\n start: start,\n end: end\n });\n }\n }).bind('resizeStart', function (e) {\n var editable = that.list.editable;\n if (editable && editable.trigger('validate')) {\n e.preventDefault();\n return;\n }\n if (that.trigger('resizeStart', { task: e.task })) {\n e.preventDefault();\n }\n }).bind('resize', function (e) {\n if (that.trigger('resize', {\n task: e.task,\n start: e.start,\n end: e.end\n })) {\n e.preventDefault();\n }\n }).bind('resizeEnd', function (e) {\n var task = e.task;\n var updateInfo = {};\n if (e.resizeStart) {\n updateInfo.start = e.start;\n } else {\n updateInfo.end = e.end;\n }\n if (!that.trigger('resizeEnd', {\n task: task,\n start: e.start,\n end: e.end\n })) {\n that._updateTask(that.dataSource.getByUid(task.uid), updateInfo);\n }\n }).bind('percentResizeStart', function (e) {\n var editable = that.list.editable;\n if (editable && editable.trigger('validate')) {\n e.preventDefault();\n }\n }).bind('percentResizeEnd', function (e) {\n that._updateTask(that.dataSource.getByUid(e.task.uid), { percentComplete: e.percentComplete });\n }).bind('dependencyDragStart', function (e) {\n var editable = that.list.editable;\n if (editable && editable.trigger('validate')) {\n e.preventDefault();\n }\n }).bind('dependencyDragEnd', function (e) {\n var dependency = that.dependencies._createNewModel({\n type: e.type,\n predecessorId: e.predecessor.id,\n successorId: e.successor.id\n });\n that._createDependency(dependency);\n }).bind('select', function (e) {\n var editable = that.list.editable;\n if (editable) {\n editable.trigger('validate');\n }\n that.select('[data-uid=\\'' + e.uid + '\\']');\n }).bind('editTask', function (e) {\n var editable = that.list.editable;\n if (editable && editable.trigger('validate')) {\n return;\n }\n that.editTask(e.uid);\n }).bind('clear', function () {\n that.clearSelection();\n }).bind('removeTask', function (e) {\n var editable = that.list.editable;\n if (editable && editable.trigger('validate')) {\n return;\n }\n that.removeTask(that.dataSource.getByUid(e.uid));\n }).bind('removeDependency', function (e) {\n var editable = that.list.editable;\n if (editable && editable.trigger('validate')) {\n return;\n }\n that.removeDependency(that.dependencies.getByUid(e.uid));\n });\n },\n _dataSource: function () {\n var options = this.options;\n var dataSource = options.dataSource;\n dataSource = isArray(dataSource) ? { data: dataSource } : dataSource;\n if (this.dataSource && this._refreshHandler) {\n this.dataSource.unbind('change', this._refreshHandler).unbind('progress', this._progressHandler).unbind('error', this._errorHandler);\n } else {\n this._refreshHandler = proxy(this.refresh, this);\n this._progressHandler = proxy(this._requestStart, this);\n this._errorHandler = proxy(this._error, this);\n }\n this.dataSource = kendo.data.GanttDataSource.create(dataSource).bind('change', this._refreshHandler).bind('progress', this._progressHandler).bind('error', this._errorHandler);\n },\n _dependencies: function () {\n var dependencies = this.options.dependencies || {};\n var dataSource = isArray(dependencies) ? { data: dependencies } : dependencies;\n if (this.dependencies && this._dependencyRefreshHandler) {\n this.dependencies.unbind('change', this._dependencyRefreshHandler).unbind('error', this._dependencyErrorHandler);\n } else {\n this._dependencyRefreshHandler = proxy(this.refreshDependencies, this);\n this._dependencyErrorHandler = proxy(this._error, this);\n }\n this.dependencies = kendo.data.GanttDependencyDataSource.create(dataSource).bind('change', this._dependencyRefreshHandler).bind('error', this._dependencyErrorHandler);\n },\n _resources: function () {\n var resources = this.options.resources;\n var dataSource = resources.dataSource || {};\n this.resources = {\n field: 'resources',\n dataTextField: 'name',\n dataColorField: 'color',\n dataFormatField: 'format'\n };\n extend(this.resources, resources);\n this.resources.dataSource = kendo.data.DataSource.create(dataSource);\n },\n _assignments: function () {\n var assignments = this.options.assignments;\n var dataSource = assignments.dataSource || {};\n if (this.assignments) {\n this.assignments.dataSource.unbind('change', this._assignmentsRefreshHandler);\n } else {\n this._assignmentsRefreshHandler = proxy(this.refresh, this);\n }\n this.assignments = {\n dataTaskIdField: 'taskId',\n dataResourceIdField: 'resourceId',\n dataValueField: 'value'\n };\n extend(this.assignments, assignments);\n this.assignments.dataSource = kendo.data.DataSource.create(dataSource);\n this.assignments.dataSource.bind('change', this._assignmentsRefreshHandler);\n },\n _createEditor: function () {\n var that = this;\n var editor = this._editor = new PopupEditor(this.wrapper, extend({}, this.options, {\n target: this,\n resources: {\n field: this.resources.field,\n editor: proxy(this._createResourceEditor, this)\n },\n createButton: proxy(this._createPopupButton, this)\n }));\n editor.bind('cancel', function (e) {\n var task = that.dataSource.getByUid(e.model.uid);\n if (that.trigger('cancel', {\n container: e.container,\n task: task\n })) {\n e.preventDefault();\n return;\n }\n that.cancelTask();\n }).bind('edit', function (e) {\n var task = that.dataSource.getByUid(e.model.uid);\n if (that.trigger('edit', {\n container: e.container,\n task: task\n })) {\n e.preventDefault();\n }\n }).bind('save', function (e) {\n var task = that.dataSource.getByUid(e.model.uid);\n that.saveTask(task, e.updateInfo);\n }).bind('remove', function (e) {\n that.removeTask(e.model.uid);\n }).bind('close', that._onDialogClose);\n },\n _onDialogClose: function () {\n },\n _createResourceEditor: function (container, options) {\n var that = this;\n var model = options instanceof ObservableObject ? options : options.model;\n var id = model.get('id');\n var messages = this.options.messages;\n var resourcesField = that.resources.field;\n var editor = this._resourceEditor = new ResourceEditor(container, {\n resourcesField: resourcesField,\n data: this._wrapResourceData(id),\n model: model,\n messages: extend({}, messages.editor),\n buttons: [\n {\n name: 'update',\n text: messages.save,\n className: Gantt.styles.primary\n },\n {\n name: 'cancel',\n text: messages.cancel\n }\n ],\n createButton: proxy(this._createPopupButton, this),\n save: function (e) {\n that._updateAssignments(e.model.get('id'), e.model.get(resourcesField));\n }\n });\n editor.open();\n },\n _createPopupButton: function (command) {\n var commandName = command.name || command.text;\n var options = {\n className: Gantt.styles.popup.button + ' k-gantt-' + (commandName || '').replace(/\\s/g, ''),\n text: commandName,\n attr: ''\n };\n if (!commandName && !(isPlainObject(command) && command.template)) {\n throw new Error('Custom commands should have name specified');\n }\n if (isPlainObject(command)) {\n if (command.className) {\n command.className += ' ' + options.className;\n }\n options = extend(true, options, command);\n }\n return kendo.template(COMMAND_BUTTON_TEMPLATE)(options);\n },\n view: function (type) {\n return this.timeline.view(type);\n },\n range: function (range) {\n var dataSource = this.dataSource;\n var view = this.view();\n var timeline = this.timeline;\n if (range) {\n view.options.range = {\n start: range.start,\n end: range.end\n };\n timeline._render(dataSource.taskTree());\n timeline._renderDependencies(this.dependencies.view());\n }\n return {\n start: view.start,\n end: view.end\n };\n },\n date: function (date) {\n var view = this.view();\n if (date) {\n view.options.date = date;\n view._scrollToDate(date);\n }\n return view.options.date;\n },\n dataItem: function (value) {\n if (!value) {\n return null;\n }\n var list = this.list;\n var element = list.content.find(value);\n return list._modelFromElement(element);\n },\n setDataSource: function (dataSource) {\n this.options.dataSource = dataSource;\n this._dataSource();\n this.list._setDataSource(this.dataSource);\n if (this.options.autoBind) {\n dataSource.fetch();\n }\n },\n setDependenciesDataSource: function (dependencies) {\n this.options.dependencies = dependencies;\n this._dependencies();\n if (this.options.autoBind) {\n dependencies.fetch();\n }\n },\n items: function () {\n return this.wrapper.children('.k-task');\n },\n _updateAssignments: function (id, resources) {\n var dataSource = this.assignments.dataSource;\n var taskId = this.assignments.dataTaskIdField;\n var resourceId = this.assignments.dataResourceIdField;\n var hasMatch = false;\n var assignments = new Query(dataSource.view()).filter({\n field: taskId,\n operator: 'eq',\n value: id\n }).toArray();\n var assignment;\n var resource;\n var value;\n while (assignments.length) {\n assignment = assignments[0];\n for (var i = 0, length = resources.length; i < length; i++) {\n resource = resources[i];\n if (assignment.get(resourceId) === resource.get('id')) {\n value = resources[i].get('value');\n this._updateAssignment(assignment, value);\n resources.splice(i, 1);\n hasMatch = true;\n break;\n }\n }\n if (!hasMatch) {\n this._removeAssignment(assignment);\n }\n hasMatch = false;\n assignments.shift();\n }\n for (var j = 0, newLength = resources.length; j < newLength; j++) {\n resource = resources[j];\n this._createAssignment(resource, id);\n }\n dataSource.sync();\n },\n cancelTask: function () {\n var editor = this._editor;\n var container = editor.container;\n if (container) {\n editor.close();\n }\n },\n editTask: function (uid) {\n var task = typeof uid === 'string' ? this.dataSource.getByUid(uid) : uid;\n if (!task) {\n return;\n }\n var taskCopy = this.dataSource._createNewModel(task.toJSON());\n taskCopy.uid = task.uid;\n this.cancelTask();\n this._editTask(taskCopy);\n },\n _editTask: function (task) {\n this._editor.editTask(task);\n },\n saveTask: function (task, updateInfo) {\n var editor = this._editor;\n var container = editor.container;\n var editable = editor.editable;\n if (container && editable && editable.end()) {\n this._updateTask(task, updateInfo);\n }\n },\n _updateTask: function (task, updateInfo) {\n var resourcesField = this.resources.field;\n if (!this.trigger('save', {\n task: task,\n values: updateInfo\n })) {\n this._preventRefresh = true;\n this.dataSource.update(task, updateInfo);\n if (updateInfo[resourcesField]) {\n this._updateAssignments(task.get('id'), updateInfo[resourcesField]);\n }\n this._syncDataSource();\n }\n },\n _updateAssignment: function (assignment, value) {\n var resourceValueField = this.assignments.dataValueField;\n assignment.set(resourceValueField, value);\n },\n removeTask: function (uid) {\n var that = this;\n var task = typeof uid === 'string' ? this.dataSource.getByUid(uid) : uid;\n if (!task) {\n return;\n }\n this._taskConfirm(function (cancel) {\n if (!cancel) {\n that._removeTask(task);\n }\n }, task);\n },\n _createTask: function (task, index) {\n if (!this.trigger('add', {\n task: task,\n dependency: null\n })) {\n var dataSource = this.dataSource;\n this._preventRefresh = true;\n if (index === undefined) {\n dataSource.add(task);\n } else {\n dataSource.insert(index, task);\n }\n this._scrollToUid = task.uid;\n this._syncDataSource();\n }\n },\n _createDependency: function (dependency) {\n if (!this.trigger('add', {\n task: null,\n dependency: dependency\n })) {\n this._preventDependencyRefresh = true;\n this.dependencies.add(dependency);\n this._preventDependencyRefresh = false;\n this.dependencies.sync();\n }\n },\n _createAssignment: function (resource, id) {\n var assignments = this.assignments;\n var dataSource = assignments.dataSource;\n var taskId = assignments.dataTaskIdField;\n var resourceId = assignments.dataResourceIdField;\n var resourceValue = assignments.dataValueField;\n var assignment = dataSource._createNewModel();\n assignment[taskId] = id;\n assignment[resourceId] = resource.get('id');\n assignment[resourceValue] = resource.get('value');\n dataSource.add(assignment);\n },\n removeDependency: function (uid) {\n var that = this;\n var dependency = typeof uid === 'string' ? this.dependencies.getByUid(uid) : uid;\n if (!dependency) {\n return;\n }\n this._dependencyConfirm(function (cancel) {\n if (!cancel) {\n that._removeDependency(dependency);\n }\n }, dependency);\n },\n _removeTaskDependencies: function (task, dependencies) {\n this._preventDependencyRefresh = true;\n for (var i = 0, length = dependencies.length; i < length; i++) {\n this.dependencies.remove(dependencies[i]);\n }\n this._preventDependencyRefresh = false;\n this.dependencies.sync();\n },\n _removeTaskAssignments: function (task) {\n var dataSource = this.assignments.dataSource;\n var assignments = dataSource.view();\n var filter = {\n field: this.assignments.dataTaskIdField,\n operator: 'eq',\n value: task.get('id')\n };\n assignments = new Query(assignments).filter(filter).toArray();\n this._preventRefresh = true;\n for (var i = 0, length = assignments.length; i < length; i++) {\n dataSource.remove(assignments[i]);\n }\n this._preventRefresh = false;\n dataSource.sync();\n },\n _removeTask: function (task) {\n var dependencies = this.dependencies.dependencies(task.id);\n if (!this.trigger('remove', {\n task: task,\n dependencies: dependencies\n })) {\n this._removeTaskDependencies(task, dependencies);\n this._removeTaskAssignments(task);\n this._preventRefresh = true;\n if (this.dataSource.remove(task)) {\n this._syncDataSource();\n }\n this._preventRefresh = false;\n }\n },\n _removeDependency: function (dependency) {\n if (!this.trigger('remove', {\n task: null,\n dependencies: [dependency]\n })) {\n if (this.dependencies.remove(dependency)) {\n this.dependencies.sync();\n }\n }\n },\n _removeAssignment: function (assignment) {\n this.assignments.dataSource.remove(assignment);\n },\n _taskConfirm: function (callback, task) {\n var messages = this.options.messages;\n this._confirm(callback, {\n model: task,\n text: messages.deleteTaskConfirmation,\n title: messages.deleteTaskWindowTitle\n });\n },\n _dependencyConfirm: function (callback, dependency) {\n var messages = this.options.messages;\n this._confirm(callback, {\n model: dependency,\n text: messages.deleteDependencyConfirmation,\n title: messages.deleteDependencyWindowTitle\n });\n },\n _confirm: function (callback, options) {\n var editable = this.options.editable;\n var messages;\n var buttons;\n if (editable === true || editable.confirmation !== false) {\n messages = this.options.messages;\n buttons = [\n {\n name: 'delete',\n text: messages.destroy,\n className: Gantt.styles.primary,\n click: function () {\n callback();\n }\n },\n {\n name: 'cancel',\n text: messages.cancel,\n click: function () {\n callback(true);\n }\n }\n ];\n this.showDialog(extend(true, {}, options, { buttons: buttons }));\n } else {\n callback();\n }\n },\n showDialog: function (options) {\n this._editor.showDialog(options);\n },\n refresh: function () {\n if (this._preventRefresh || this.list.editable) {\n return;\n }\n this._progress(false);\n var dataSource = this.dataSource;\n var taskTree = dataSource.taskTree();\n var scrollToUid = this._scrollToUid;\n var current;\n var cachedUid;\n var cachedIndex = -1;\n if (this.current) {\n cachedUid = this.current.closest('tr').attr(kendo.attr('uid'));\n cachedIndex = this.current.index();\n }\n if (this.trigger('dataBinding')) {\n return;\n }\n if (this.resources.dataSource.data().length !== 0) {\n this._assignResources(taskTree);\n }\n if (this._editor) {\n this._editor.close();\n }\n this.clearSelection();\n this.list._render(taskTree);\n this.timeline._render(taskTree);\n this.timeline._renderDependencies(this.dependencies.view());\n if (scrollToUid) {\n this._scrollTo(scrollToUid);\n this.select(selector(scrollToUid));\n }\n if ((scrollToUid || cachedUid) && cachedIndex >= 0) {\n current = this.list.content.find('tr' + selector(scrollToUid || cachedUid) + ' > td:eq(' + cachedIndex + ')');\n this._current(current);\n }\n this._scrollToUid = null;\n this.trigger('dataBound');\n },\n refreshDependencies: function () {\n if (this._preventDependencyRefresh) {\n return;\n }\n if (this.trigger('dataBinding')) {\n return;\n }\n this.timeline._renderDependencies(this.dependencies.view());\n this.trigger('dataBound');\n },\n _assignResources: function (taskTree) {\n var resources = this.resources;\n var assignments = this.assignments;\n var groupAssigments = function () {\n var data = assignments.dataSource.view();\n var group = { field: assignments.dataTaskIdField };\n data = new Query(data).group(group).toArray();\n return data;\n };\n var assigments = groupAssigments();\n var applyTaskResource = function (task, action) {\n var taskId = task.get('id');\n kendo.setter(resources.field)(task, new ObservableArray([]));\n for (var i = 0, length = assigments.length; i < length; i++) {\n if (assigments[i].value === taskId) {\n action(task, assigments[i].items);\n }\n }\n };\n var wrapTask = function (task, items) {\n for (var j = 0, length = items.length; j < length; j++) {\n var item = items[j];\n var resource = resources.dataSource.get(item.get(assignments.dataResourceIdField));\n var resourceValue = item.get(assignments.dataValueField);\n var resourcedId = item.get(assignments.dataResourceIdField);\n var valueFormat = resource.get(resources.dataFormatField) || PERCENTAGE_FORMAT;\n var formatedValue = kendo.toString(resourceValue, valueFormat);\n task[resources.field].push(new ObservableObject({\n id: resourcedId,\n name: resource.get(resources.dataTextField),\n color: resource.get(resources.dataColorField),\n value: resourceValue,\n formatedValue: formatedValue\n }));\n }\n };\n for (var i = 0, length = taskTree.length; i < length; i++) {\n applyTaskResource(taskTree[i], wrapTask);\n }\n },\n _wrapResourceData: function (id) {\n var that = this;\n var result = [];\n var resource;\n var resources = this.resources.dataSource.view();\n var assignments = this.assignments.dataSource.view();\n var taskAssignments = new Query(assignments).filter({\n field: that.assignments.dataTaskIdField,\n operator: 'eq',\n value: id\n }).toArray();\n var valuePerResource = function (id) {\n var resourceValue = null;\n new Query(taskAssignments).filter({\n field: that.assignments.dataResourceIdField,\n operator: 'eq',\n value: id\n }).select(function (assignment) {\n resourceValue += assignment.get(that.assignments.dataValueField);\n });\n return resourceValue;\n };\n for (var i = 0, length = resources.length; i < length; i++) {\n resource = resources[i];\n result.push({\n id: resource.get('id'),\n name: resource.get(that.resources.dataTextField),\n format: resource.get(that.resources.dataFormatField) || PERCENTAGE_FORMAT,\n value: valuePerResource(resource.id)\n });\n }\n return result;\n },\n _syncDataSource: function () {\n this._preventRefresh = false;\n this._requestStart();\n this.dataSource.sync();\n },\n _requestStart: function () {\n this._progress(true);\n },\n _error: function () {\n this._progress(false);\n },\n _progress: function (toggle) {\n kendo.ui.progress(this.element, toggle);\n },\n _resizable: function () {\n var that = this;\n var wrapper = this.wrapper;\n var ganttStyles = Gantt.styles;\n var contentSelector = DOT + ganttStyles.gridContent;\n var treeListWrapper = wrapper.find(DOT + ganttStyles.list);\n var timelineWrapper = wrapper.find(DOT + ganttStyles.timeline);\n var treeListWidth;\n var timelineWidth;\n var timelineScroll;\n this._resizeDraggable = wrapper.find(DOT + ganttStyles.splitBar).height(treeListWrapper.height()).hover(function () {\n $(this).addClass(ganttStyles.splitBarHover);\n }, function () {\n $(this).removeClass(ganttStyles.splitBarHover);\n }).end().kendoResizable({\n orientation: 'horizontal',\n handle: DOT + ganttStyles.splitBar,\n 'start': function () {\n treeListWidth = treeListWrapper.width();\n timelineWidth = timelineWrapper.width();\n timelineScroll = timelineWrapper.find(contentSelector).scrollLeft();\n },\n 'resize': function (e) {\n var delta = e.x.initialDelta;\n if (kendo.support.isRtl(wrapper)) {\n delta *= -1;\n }\n if (treeListWidth + delta < 0 || timelineWidth - delta < 0) {\n return;\n }\n treeListWrapper.width(treeListWidth + delta);\n timelineWrapper.width(timelineWidth - delta);\n timelineWrapper.find(contentSelector).scrollLeft(timelineScroll + delta);\n that.timeline.view()._renderCurrentTime();\n }\n }).data('kendoResizable');\n },\n _scrollable: function () {\n var that = this;\n var ganttStyles = Gantt.styles;\n var contentSelector = DOT + ganttStyles.gridContent;\n var headerSelector = DOT + ganttStyles.gridHeaderWrap;\n var timelineHeader = this.timeline.element.find(headerSelector);\n var timelineContent = this.timeline.element.find(contentSelector);\n var treeListHeader = this.list.element.find(headerSelector);\n var treeListContent = this.list.element.find(contentSelector);\n if (mobileOS) {\n treeListContent.css('overflow-y', 'auto');\n }\n timelineContent.on('scroll', function () {\n that.scrollTop = this.scrollTop;\n timelineHeader.scrollLeft(this.scrollLeft);\n treeListContent.scrollTop(this.scrollTop);\n });\n treeListContent.on('scroll', function () {\n treeListHeader.scrollLeft(this.scrollLeft);\n }).on('DOMMouseScroll' + NS + ' mousewheel' + NS, function (e) {\n var scrollTop = timelineContent.scrollTop();\n var delta = kendo.wheelDeltaY(e);\n if (delta) {\n e.preventDefault();\n $(e.currentTarget).one('wheel' + NS, false);\n timelineContent.scrollTop(scrollTop + -delta);\n }\n });\n },\n _navigatable: function () {\n var that = this;\n var navigatable = this.options.navigatable;\n var editable = this.options.editable;\n var headerTable = this.list.header.find('table');\n var contentTable = this.list.content.find('table');\n var ganttStyles = Gantt.styles;\n var isRtl = kendo.support.isRtl(this.wrapper);\n var timelineContent = this.timeline.element.find(DOT + ganttStyles.gridContent);\n var tables = headerTable.add(contentTable);\n var attr = selector();\n var cellIndex;\n var expandState = {\n collapse: false,\n expand: true\n };\n var scroll = function (reverse) {\n var width = that.timeline.view()._timeSlots()[0].offsetWidth;\n timelineContent.scrollLeft(timelineContent.scrollLeft() + (reverse ? -width : width));\n };\n var moveVertical = function (method) {\n var parent = that.current.parent('tr' + selector());\n var index = that.current.index();\n var subling = parent[method]();\n if (that.select().length !== 0) {\n that.clearSelection();\n }\n if (subling.length !== 0) {\n that._current(subling.children('td:eq(' + index + ')'));\n that._scrollTo(that.current);\n } else {\n if (that.current.is('td') && method == 'prev') {\n focusTable(headerTable);\n } else if (that.current.is('th') && method == 'next') {\n focusTable(contentTable);\n }\n }\n };\n var moveHorizontal = function (method) {\n var subling = that.current[method]();\n if (subling.length !== 0) {\n that._current(subling);\n cellIndex = that.current.index();\n }\n };\n var toggleExpandedState = function (value) {\n var model = that.dataItem(that.current);\n if (model.summary && model.expanded !== value) {\n model.set('expanded', value);\n }\n };\n var deleteAction = function () {\n var editable = that.options.editable;\n if (!editable || editable.destroy === false || that.list.editable) {\n return;\n }\n var selectedTask = that.select();\n var uid = kendo.attr('uid');\n if (selectedTask.length) {\n that.removeTask(selectedTask.attr(uid));\n }\n };\n $(this.wrapper).on('mousedown' + NS, 'tr' + attr + ', div' + attr + ':not(' + DOT + ganttStyles.line + ')', function (e) {\n var currentTarget = $(e.currentTarget);\n var isInput = $(e.target).is(':button,a,:input,a>.k-icon,textarea,span.k-icon,span.k-link,.k-input,.k-multiselect-wrap');\n var current;\n if (e.ctrlKey) {\n return;\n }\n if (navigatable) {\n if (currentTarget.is('tr')) {\n current = $(e.target).closest('td');\n } else {\n current = that.list.content.find('tr' + selector(currentTarget.attr(kendo.attr('uid'))) + ' > td:first');\n }\n that._current(current);\n }\n if ((navigatable || editable) && !isInput) {\n that._focusTimeout = setTimeout(function () {\n focusTable(that.list.content.find('table'), true);\n }, 2);\n }\n });\n if (navigatable !== true) {\n contentTable.on('keydown' + NS, function (e) {\n if (e.keyCode == keys.DELETE) {\n deleteAction();\n }\n });\n return;\n }\n tables.on('focus' + NS, function () {\n var selector = this === contentTable.get(0) ? 'td' : 'th';\n var selection = that.select();\n var current = that.current || $(selection.length ? selection : this).find(selector + ':eq(' + (cellIndex || 0) + ')');\n that._current(current);\n }).on('blur' + NS, function () {\n that._current();\n if (this == headerTable) {\n $(this).attr(TABINDEX, -1);\n }\n }).on('keydown' + NS, function (e) {\n var key = e.keyCode;\n var isCell;\n if (!that.current) {\n return;\n }\n isCell = that.current.is('td');\n switch (key) {\n case keys.RIGHT:\n e.preventDefault();\n if (e.altKey) {\n scroll();\n } else if (e.ctrlKey) {\n toggleExpandedState(isRtl ? expandState.collapse : expandState.expand);\n } else {\n moveHorizontal(isRtl ? 'prev' : 'next');\n }\n break;\n case keys.LEFT:\n e.preventDefault();\n if (e.altKey) {\n scroll(true);\n } else if (e.ctrlKey) {\n toggleExpandedState(isRtl ? expandState.expand : expandState.collapse);\n } else {\n moveHorizontal(isRtl ? 'next' : 'prev');\n }\n break;\n case keys.UP:\n e.preventDefault();\n moveVertical('prev');\n break;\n case keys.DOWN:\n e.preventDefault();\n moveVertical('next');\n break;\n case keys.SPACEBAR:\n e.preventDefault();\n if (isCell) {\n that.select(that.current.closest('tr'));\n }\n break;\n case keys.ENTER:\n e.preventDefault();\n if (isCell) {\n if (that.options.editable && that.options.editable.update !== false) {\n that._cachedCurrent = that.current;\n that.list._startEditHandler(that.current);\n $(this).one('keyup', function (e) {\n e.stopPropagation();\n });\n }\n } else {\n that.current.children('a.k-link').click();\n }\n break;\n case keys.ESC:\n e.stopPropagation();\n break;\n case keys.DELETE:\n if (isCell) {\n deleteAction();\n }\n break;\n default:\n if (key >= 49 && key <= 57) {\n that.view(that.timeline._viewByIndex(key - 49));\n }\n break;\n }\n });\n },\n _current: function (element) {\n var ganttStyles = Gantt.styles;\n var activeElement;\n if (this.current && this.current.length) {\n this.current.removeClass(ganttStyles.focused).removeAttr('id');\n }\n if (element && element.length) {\n this.current = element.addClass(ganttStyles.focused).attr('id', ACTIVE_CELL);\n activeElement = $(kendo._activeElement());\n if (activeElement.is('table') && this.wrapper.find(activeElement).length > 0) {\n activeElement.removeAttr(ARIA_DESCENDANT).attr(ARIA_DESCENDANT, ACTIVE_CELL);\n }\n } else {\n this.current = null;\n }\n },\n _dataBind: function () {\n var that = this;\n if (that.options.autoBind) {\n this._preventRefresh = true;\n this._preventDependencyRefresh = true;\n var promises = $.map([\n this.dataSource,\n this.dependencies,\n this.resources.dataSource,\n this.assignments.dataSource\n ], function (dataSource) {\n return dataSource.fetch();\n });\n $.when.apply(null, promises).done(function () {\n that._preventRefresh = false;\n that._preventDependencyRefresh = false;\n that.refresh();\n });\n }\n },\n _resize: function () {\n this._adjustDimensions();\n this.timeline.view()._adjustHeight();\n this.timeline.view()._renderCurrentTime();\n this.list._adjustHeight();\n }\n });\n if (kendo.PDFMixin) {\n kendo.PDFMixin.extend(Gantt.fn);\n Gantt.fn._drawPDF = function () {\n var ganttStyles = Gantt.styles;\n var listClass = '.' + ganttStyles.list;\n var listWidth = this.wrapper.find(listClass).width();\n var content = this.wrapper.clone();\n content.find(listClass).css('width', listWidth);\n return this._drawPDFShadow({ content: content }, { avoidLinks: this.options.pdf.avoidLinks });\n };\n }\n kendo.ui.plugin(Gantt);\n extend(true, Gantt, { styles: ganttStyles });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.treelist', [\n 'kendo.dom',\n 'kendo.data',\n 'kendo.columnsorter',\n 'kendo.editable',\n 'kendo.window',\n 'kendo.filtermenu',\n 'kendo.selectable',\n 'kendo.resizable',\n 'kendo.treeview.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'treelist',\n name: 'TreeList',\n category: 'web',\n description: 'The TreeList widget displays self-referencing data and offers rich support for interacting with data, sorting, filtering, and selection.',\n depends: [\n 'dom',\n 'data'\n ],\n features: [\n {\n id: 'treelist-sorting',\n name: 'Sorting',\n description: 'Support for column sorting',\n depends: ['columnsorter']\n },\n {\n id: 'treelist-filtering',\n name: 'Filtering',\n description: 'Support for record filtering',\n depends: ['filtermenu']\n },\n {\n id: 'treelist-editing',\n name: 'Editing',\n description: 'Support for record editing',\n depends: [\n 'editable',\n 'window'\n ]\n },\n {\n id: 'treelist-selection',\n name: 'Selection',\n description: 'Support for row selection',\n depends: ['selectable']\n },\n {\n id: 'treelist-column-resize',\n name: 'Column resizing',\n description: 'Support for column resizing',\n depends: ['resizable']\n },\n {\n id: 'treelist-dragging',\n name: 'Drag & Drop',\n description: 'Support for drag & drop of rows',\n depends: ['treeview.draganddrop']\n },\n {\n id: 'treelist-excel-export',\n name: 'Excel export',\n description: 'Export data as Excel spreadsheet',\n depends: ['excel']\n },\n {\n id: 'treelist-pdf-export',\n name: 'PDF export',\n description: 'Export data as PDF',\n depends: [\n 'pdf',\n 'drawing'\n ]\n }\n ]\n };\n (function ($, undefined) {\n var data = kendo.data;\n var extend = $.extend;\n var kendoDom = kendo.dom;\n var kendoDomElement = kendoDom.element;\n var kendoTextElement = kendoDom.text;\n var kendoHtmlElement = kendoDom.html;\n var outerWidth = kendo._outerWidth;\n var outerHeight = kendo._outerHeight;\n var ui = kendo.ui;\n var DataBoundWidget = ui.DataBoundWidget;\n var DataSource = data.DataSource;\n var ObservableArray = data.ObservableArray;\n var Query = data.Query;\n var Model = data.Model;\n var proxy = $.proxy;\n var map = $.map;\n var grep = $.grep;\n var inArray = $.inArray;\n var isPlainObject = $.isPlainObject;\n var push = Array.prototype.push;\n var STRING = 'string';\n var CHANGE = 'change';\n var ERROR = 'error';\n var PROGRESS = 'progress';\n var DOT = '.';\n var NS = '.kendoTreeList';\n var CLICK = 'click';\n var MOUSEDOWN = 'mousedown';\n var EDIT = 'edit';\n var SAVE = 'save';\n var EXPAND = 'expand';\n var COLLAPSE = 'collapse';\n var REMOVE = 'remove';\n var DATABINDING = 'dataBinding';\n var DATABOUND = 'dataBound';\n var CANCEL = 'cancel';\n var FILTERMENUINIT = 'filterMenuInit';\n var COLUMNHIDE = 'columnHide';\n var COLUMNSHOW = 'columnShow';\n var HEADERCELLS = 'th.k-header';\n var COLUMNREORDER = 'columnReorder';\n var COLUMNRESIZE = 'columnResize';\n var COLUMNMENUINIT = 'columnMenuInit';\n var COLUMNLOCK = 'columnLock';\n var COLUMNUNLOCK = 'columnUnlock';\n var PARENTIDFIELD = 'parentId';\n var DRAGSTART = 'dragstart';\n var DRAG = 'drag';\n var DROP = 'drop';\n var DRAGEND = 'dragend';\n var classNames = {\n wrapper: 'k-treelist k-grid k-widget',\n header: 'k-header',\n button: 'k-button',\n alt: 'k-alt',\n editCell: 'k-edit-cell',\n group: 'k-treelist-group',\n gridToolbar: 'k-grid-toolbar',\n gridHeader: 'k-grid-header',\n gridHeaderWrap: 'k-grid-header-wrap',\n gridContent: 'k-grid-content',\n gridContentWrap: 'k-grid-content',\n gridFilter: 'k-grid-filter',\n footerTemplate: 'k-footer-template',\n loading: 'k-i-loading',\n refresh: 'k-i-reload',\n retry: 'k-request-retry',\n selected: 'k-state-selected',\n status: 'k-status',\n link: 'k-link',\n withIcon: 'k-with-icon',\n filterable: 'k-filterable',\n icon: 'k-icon',\n iconFilter: 'k-i-filter',\n iconCollapse: 'k-i-collapse',\n iconExpand: 'k-i-expand',\n iconHidden: 'k-i-none',\n iconPlaceHolder: 'k-icon k-i-none',\n input: 'k-input',\n dropPositions: 'k-i-insert-up k-i-insert-down k-i-plus k-i-insert-middle',\n dropTop: 'k-i-insert-up',\n dropBottom: 'k-i-insert-down',\n dropAdd: 'k-i-plus',\n dropMiddle: 'k-i-insert-middle',\n dropDenied: 'k-i-cancel',\n dragStatus: 'k-drag-status',\n dragClue: 'k-drag-clue',\n dragClueText: 'k-clue-text'\n };\n var defaultCommands = {\n create: {\n imageClass: 'k-i-plus',\n className: 'k-grid-add',\n methodName: 'addRow'\n },\n createchild: {\n imageClass: 'k-i-plus',\n className: 'k-grid-add',\n methodName: 'addRow'\n },\n destroy: {\n imageClass: 'k-i-close',\n className: 'k-grid-delete',\n methodName: 'removeRow'\n },\n edit: {\n imageClass: 'k-i-edit',\n className: 'k-grid-edit',\n methodName: 'editRow'\n },\n update: {\n imageClass: 'k-i-check',\n className: 'k-primary k-grid-update',\n methodName: 'saveRow'\n },\n canceledit: {\n imageClass: 'k-i-cancel',\n className: 'k-grid-cancel',\n methodName: '_cancelEdit'\n },\n excel: {\n imageClass: 'k-i-file-excel',\n className: 'k-grid-excel',\n methodName: 'saveAsExcel'\n },\n pdf: {\n imageClass: 'k-i-file-pdf',\n className: 'k-grid-pdf',\n methodName: 'saveAsPDF'\n }\n };\n var TreeListModel = Model.define({\n id: 'id',\n parentId: PARENTIDFIELD,\n fields: {\n id: { type: 'number' },\n parentId: {\n type: 'number',\n nullable: true\n }\n },\n init: function (value) {\n Model.fn.init.call(this, value);\n this._loaded = false;\n if (!this.parentIdField) {\n this.parentIdField = PARENTIDFIELD;\n }\n this.parentId = this.get(this.parentIdField);\n },\n accept: function (data) {\n Model.fn.accept.call(this, data);\n this.parentId = this.get(this.parentIdField);\n },\n set: function (field, value, initiator) {\n if (field == PARENTIDFIELD && this.parentIdField != PARENTIDFIELD) {\n this[this.parentIdField] = value;\n }\n Model.fn.set.call(this, field, value, initiator);\n if (field == this.parentIdField) {\n this.parentId = this.get(this.parentIdField);\n }\n },\n loaded: function (value) {\n if (value !== undefined) {\n this._loaded = value;\n } else {\n return this._loaded;\n }\n },\n shouldSerialize: function (field) {\n return Model.fn.shouldSerialize.call(this, field) && field !== '_loaded' && field != '_error' && field != '_edit' && !(this.parentIdField !== 'parentId' && field === 'parentId');\n }\n });\n TreeListModel.parentIdField = PARENTIDFIELD;\n TreeListModel.define = function (base, options) {\n if (options === undefined) {\n options = base;\n base = TreeListModel;\n }\n var parentId = options.parentId || PARENTIDFIELD;\n options.parentIdField = parentId;\n var model = Model.define(base, options);\n if (parentId) {\n model.parentIdField = parentId;\n }\n return model;\n };\n function is(field) {\n return function (object) {\n return object[field];\n };\n }\n function not(func) {\n return function (object) {\n return !func(object);\n };\n }\n var TreeListDataSource = DataSource.extend({\n init: function (options) {\n DataSource.fn.init.call(this, extend(true, {}, {\n schema: {\n modelBase: TreeListModel,\n model: TreeListModel\n }\n }, options));\n },\n _createNewModel: function (data) {\n var model = {};\n var fromModel = data instanceof Model;\n if (fromModel) {\n model = data;\n }\n model = DataSource.fn._createNewModel.call(this, model);\n if (!fromModel) {\n if (data.parentId) {\n data[model.parentIdField] = data.parentId;\n }\n model.accept(data);\n }\n return model;\n },\n _shouldWrap: function () {\n return true;\n },\n _push: function (result, operation) {\n var data = DataSource.fn._readData.call(this, result);\n if (!data) {\n data = result;\n }\n this[operation](data);\n },\n _readData: function (newData) {\n var data = this.data();\n newData = DataSource.fn._readData.call(this, newData);\n this._replaceData(data.toJSON().concat(newData), data);\n if (newData instanceof ObservableArray) {\n return newData;\n }\n return data;\n },\n _replaceData: function (source, target) {\n var sourceLength = source.length;\n for (var i = 0; i < sourceLength; i++) {\n target[i] = source[i];\n }\n target.length = sourceLength;\n },\n _readAggregates: function (data) {\n var result = extend(this._aggregateResult, this.reader.aggregates(data));\n if ('' in result) {\n result[this._defaultParentId()] = result[''];\n delete result[''];\n }\n return result;\n },\n remove: function (root) {\n var items = this._subtree(this._childrenMap(this.data()), root.id);\n this._removeItems(items);\n DataSource.fn.remove.call(this, root);\n },\n _filterCallback: function (query) {\n var i, item;\n var map = {};\n var result = [];\n var data = query.toArray();\n for (i = 0; i < data.length; i++) {\n item = data[i];\n while (item) {\n if (!map[item.id]) {\n map[item.id] = true;\n result.push(item);\n }\n if (!map[item.parentId]) {\n map[item.parentId] = true;\n item = this.parentNode(item);\n if (item) {\n result.push(item);\n }\n } else {\n break;\n }\n }\n }\n return new Query(result);\n },\n _subtree: function (map, id) {\n var result = map[id] || [];\n var defaultParentId = this._defaultParentId();\n for (var i = 0, len = result.length; i < len; i++) {\n if (result[i].id !== defaultParentId) {\n result = result.concat(this._subtree(map, result[i].id));\n }\n }\n return result;\n },\n _childrenMap: function (data) {\n var map = {};\n var i, item, id, parentId;\n data = this._observeView(data);\n for (i = 0; i < data.length; i++) {\n item = data[i];\n id = item.id;\n parentId = item.parentId;\n map[id] = map[id] || [];\n map[parentId] = map[parentId] || [];\n map[parentId].push(item);\n }\n return map;\n },\n _calculateAggregates: function (data, options) {\n options = options || {};\n var result = {};\n var item, subtree, i;\n var filter = options.filter;\n if (filter) {\n data = Query.process(data, {\n filter: filter,\n filterCallback: proxy(this._filterCallback, this)\n }).data;\n }\n var map = this._childrenMap(data);\n result[this._defaultParentId()] = new Query(this._subtree(map, this._defaultParentId())).aggregate(options.aggregate);\n for (i = 0; i < data.length; i++) {\n item = data[i];\n subtree = this._subtree(map, item.id);\n result[item.id] = new Query(subtree).aggregate(options.aggregate);\n }\n return result;\n },\n _queryProcess: function (data, options) {\n options = options || {};\n options.filterCallback = proxy(this._filterCallback, this);\n var defaultParentId = this._defaultParentId();\n var result = Query.process(data, options);\n var map = this._childrenMap(result.data);\n var hasLoadedChildren, i, item, children;\n data = map[defaultParentId] || [];\n for (i = 0; i < data.length; i++) {\n item = data[i];\n if (item.id === defaultParentId) {\n continue;\n }\n children = map[item.id];\n hasLoadedChildren = !!(children && children.length);\n if (!item.loaded()) {\n item.loaded(hasLoadedChildren || !item.hasChildren);\n }\n if (item.loaded() || item.hasChildren !== true) {\n item.hasChildren = hasLoadedChildren;\n }\n if (hasLoadedChildren) {\n data = data.slice(0, i + 1).concat(children, data.slice(i + 1));\n }\n }\n result.data = data;\n return result;\n },\n _queueRequest: function (options, callback) {\n callback.call(this);\n },\n _modelLoaded: function (id) {\n var model = this.get(id);\n model.loaded(true);\n model.hasChildren = this.childNodes(model).length > 0;\n },\n _modelError: function (id, e) {\n this.get(id)._error = e;\n },\n success: function (data, requestParams) {\n if (!requestParams || typeof requestParams.id == 'undefined') {\n this._data = this._observe([]);\n }\n return DataSource.fn.success.call(this, data, requestParams);\n },\n load: function (model) {\n var method = '_query';\n var remote = this.options.serverSorting || this.options.serverPaging || this.options.serverFiltering || this.options.serverGrouping || this.options.serverAggregates;\n var defaultPromise = $.Deferred().resolve().promise();\n if (model.loaded()) {\n if (remote) {\n return defaultPromise;\n }\n } else if (model.hasChildren) {\n method = 'read';\n }\n return this[method]({ id: model.id }).done(proxy(this._modelLoaded, this, model.id)).fail(proxy(this._modelError, this, model.id));\n },\n contains: function (root, child) {\n var rootId = root.id;\n while (child) {\n if (child.parentId === rootId) {\n return true;\n }\n child = this.parentNode(child);\n }\n return false;\n },\n _byParentId: function (id, defaultId) {\n var result = [];\n var view = this.view();\n var current;\n if (id === defaultId) {\n return [];\n }\n for (var i = 0; i < view.length; i++) {\n current = view.at(i);\n if (current.parentId == id) {\n result.push(current);\n }\n }\n return result;\n },\n _defaultParentId: function () {\n return this.reader.model.fn.defaults[this.reader.model.parentIdField];\n },\n childNodes: function (model) {\n return this._byParentId(model.id, this._defaultParentId());\n },\n rootNodes: function () {\n return this._byParentId(this._defaultParentId());\n },\n parentNode: function (model) {\n return this.get(model.parentId);\n },\n level: function (model) {\n var result = -1;\n if (!(model instanceof TreeListModel)) {\n model = this.get(model);\n }\n do {\n model = this.parentNode(model);\n result++;\n } while (model);\n return result;\n },\n filter: function (value) {\n var baseFilter = DataSource.fn.filter;\n if (value === undefined) {\n return baseFilter.call(this, value);\n }\n baseFilter.call(this, value);\n }\n });\n TreeListDataSource.create = function (options) {\n if ($.isArray(options)) {\n options = { data: options };\n } else if (options instanceof ObservableArray) {\n options = { data: options.toJSON() };\n }\n return options instanceof TreeListDataSource ? options : new TreeListDataSource(options);\n };\n function isCellVisible() {\n return this.style.display !== 'none';\n }\n function leafDataCells(container) {\n var rows = container.find('>tr:not(.k-filter-row)');\n var filter = function () {\n var el = $(this);\n return !el.hasClass('k-group-cell') && !el.hasClass('k-hierarchy-cell');\n };\n var cells = $();\n if (rows.length > 1) {\n cells = rows.find('th').filter(filter).filter(function () {\n return this.rowSpan > 1;\n });\n }\n cells = cells.add(rows.last().find('th').filter(filter));\n var indexAttr = kendo.attr('index');\n cells.sort(function (a, b) {\n a = $(a);\n b = $(b);\n var indexA = a.attr(indexAttr);\n var indexB = b.attr(indexAttr);\n if (indexA === undefined) {\n indexA = $(a).index();\n }\n if (indexB === undefined) {\n indexB = $(b).index();\n }\n indexA = parseInt(indexA, 10);\n indexB = parseInt(indexB, 10);\n return indexA > indexB ? 1 : indexA < indexB ? -1 : 0;\n });\n return cells;\n }\n function createPlaceholders(options) {\n var spans = [];\n var className = options.className;\n for (var i = 0, level = options.level; i < level; i++) {\n spans.push(kendoDomElement('span', { className: className }));\n }\n return spans;\n }\n function columnsWidth(cols) {\n var colWidth, width = 0;\n for (var idx = 0, length = cols.length; idx < length; idx++) {\n colWidth = cols[idx].style.width;\n if (colWidth && colWidth.indexOf('%') == -1) {\n width += parseInt(colWidth, 10);\n }\n }\n return width;\n }\n function syncTableHeight(table1, table2) {\n table1 = table1[0];\n table2 = table2[0];\n if (table1.rows.length !== table2.rows.length) {\n var lockedHeigth = table1.offsetHeight;\n var tableHeigth = table2.offsetHeight;\n var row;\n var diff;\n if (lockedHeigth > tableHeigth) {\n row = table2.rows[table2.rows.length - 1];\n diff = lockedHeigth - tableHeigth;\n } else {\n row = table1.rows[table1.rows.length - 1];\n diff = tableHeigth - lockedHeigth;\n }\n row.style.height = row.offsetHeight + diff + 'px';\n }\n }\n var Editor = kendo.Observable.extend({\n init: function (element, options) {\n kendo.Observable.fn.init.call(this);\n options = this.options = extend(true, {}, this.options, options);\n this.element = element;\n this.bind(this.events, options);\n this.model = this.options.model;\n this.fields = this._fields(this.options.columns);\n this._initContainer();\n this.createEditable();\n },\n events: [],\n _initContainer: function () {\n this.wrapper = this.element;\n },\n createEditable: function () {\n var options = this.options;\n this.editable = new ui.Editable(this.wrapper, {\n fields: this.fields,\n target: options.target,\n clearContainer: options.clearContainer,\n model: this.model\n });\n },\n _isEditable: function (column) {\n return column.field && this.model.editable(column.field);\n },\n _fields: function (columns) {\n var fields = [];\n var idx, length, column;\n for (idx = 0, length = columns.length; idx < length; idx++) {\n column = columns[idx];\n if (this._isEditable(column)) {\n fields.push({\n field: column.field,\n format: column.format,\n editor: column.editor\n });\n }\n }\n return fields;\n },\n end: function () {\n return this.editable.end();\n },\n close: function () {\n this.destroy();\n },\n destroy: function () {\n this.editable.destroy();\n this.editable.element.find('[' + kendo.attr('container-for') + ']').empty().end().removeAttr(kendo.attr('role'));\n this.model = this.wrapper = this.element = this.columns = this.editable = null;\n }\n });\n var PopupEditor = Editor.extend({\n init: function (element, options) {\n Editor.fn.init.call(this, element, options);\n this._attachHandlers();\n kendo.cycleForm(this.wrapper);\n this.open();\n },\n events: [\n CANCEL,\n SAVE\n ],\n options: {\n window: {\n modal: true,\n resizable: false,\n draggable: true,\n title: 'Edit',\n visible: false\n }\n },\n _initContainer: function () {\n var options = this.options;\n var formContent = [];\n this.wrapper = $('<div class=\"k-popup-edit-form\"/>').attr(kendo.attr('uid'), this.model.uid).append('<div class=\"k-edit-form-container\"/>');\n if (options.template) {\n this._appendTemplate(formContent);\n this.fields = [];\n } else {\n this._appendFields(formContent);\n }\n this._appendButtons(formContent);\n new kendoDom.Tree(this.wrapper.children()[0]).render(formContent);\n this.wrapper.appendTo(options.appendTo);\n this.window = new ui.Window(this.wrapper, options.window);\n },\n _appendTemplate: function (form) {\n var template = this.options.template;\n if (typeof template === STRING) {\n template = window.unescape(template);\n }\n template = kendo.template(template)(this.model);\n form.push(kendoHtmlElement(template));\n },\n _appendFields: function (form) {\n var idx, length, column;\n var columns = this.options.columns;\n for (idx = 0, length = columns.length; idx < length; idx++) {\n column = columns[idx];\n if (column.command) {\n continue;\n }\n form.push(kendoHtmlElement('<div class=\"k-edit-label\"><label for=\"' + column.field + '\">' + (column.title || column.field || '') + '</label></div>'));\n if (this._isEditable(column)) {\n form.push(kendoHtmlElement('<div ' + kendo.attr('container-for') + '=\"' + column.field + '\" class=\"k-edit-field\"></div>'));\n } else {\n form.push(kendoDomElement('div', { 'class': 'k-edit-field' }, [this.options.fieldRenderer(column, this.model)]));\n }\n }\n },\n _appendButtons: function (form) {\n form.push(kendoDomElement('div', { 'class': 'k-edit-buttons k-state-default' }, this.options.commandRenderer()));\n },\n _attachHandlers: function () {\n var closeHandler = this._cancelProxy = proxy(this._cancel, this);\n this.wrapper.on(CLICK + NS, '.k-grid-cancel', this._cancelProxy);\n this._saveProxy = proxy(this._save, this);\n this.wrapper.on(CLICK + NS, '.k-grid-update', this._saveProxy);\n this.window.bind('close', function (e) {\n if (e.userTriggered) {\n closeHandler(e);\n }\n });\n },\n _dettachHandlers: function () {\n this._cancelProxy = null;\n this._saveProxy = null;\n this.wrapper.off(NS);\n },\n _cancel: function (e) {\n this.trigger(CANCEL, e);\n },\n _save: function () {\n this.trigger(SAVE);\n },\n open: function () {\n this.window.center().open();\n },\n close: function () {\n this.window.bind('deactivate', proxy(this.destroy, this)).close();\n },\n destroy: function () {\n this.window.destroy();\n this.window = null;\n this._dettachHandlers();\n Editor.fn.destroy.call(this);\n }\n });\n var TreeList = DataBoundWidget.extend({\n init: function (element, options) {\n DataBoundWidget.fn.init.call(this, element, options);\n this._dataSource(this.options.dataSource);\n this._columns();\n this._layout();\n this._selectable();\n this._sortable();\n this._resizable();\n this._filterable();\n this._attachEvents();\n this._toolbar();\n this._scrollable();\n this._reorderable();\n this._columnMenu();\n this._minScreenSupport();\n this._draggable();\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n if (this._hasLockedColumns) {\n var widget = this;\n this.wrapper.addClass('k-grid-lockedcolumns');\n this._resizeHandler = function () {\n widget.resize();\n };\n $(window).on('resize' + NS, this._resizeHandler);\n }\n kendo.notify(this);\n },\n _draggable: function () {\n var editable = this.options.editable;\n if (!editable || !editable.move) {\n return;\n }\n this._dragging = new kendo.ui.HierarchicalDragAndDrop(this.wrapper, {\n $angular: this.$angular,\n autoScroll: true,\n filter: 'tbody>tr',\n itemSelector: 'tr',\n allowedContainers: this.wrapper,\n hintText: function (row) {\n var text = function () {\n return $(this).text();\n };\n var separator = '<span class=\\'k-header k-drag-separator\\' />';\n return row.children('td').map(text).toArray().join(separator);\n },\n contains: proxy(function (source, destination) {\n var dest = this.dataItem(destination);\n var src = this.dataItem(source);\n return src == dest || this.dataSource.contains(src, dest);\n }, this),\n itemFromTarget: function (target) {\n var tr = target.closest('tr');\n return {\n item: tr,\n content: tr\n };\n },\n dragstart: proxy(function (source) {\n this.wrapper.addClass('k-treelist-dragging');\n var model = this.dataItem(source);\n return this.trigger(DRAGSTART, { source: model });\n }, this),\n drag: proxy(function (e) {\n e.source = this.dataItem(e.source);\n this.trigger(DRAG, e);\n }, this),\n drop: proxy(function (e) {\n e.source = this.dataItem(e.source);\n e.destination = this.dataItem(e.destination);\n this.wrapper.removeClass('k-treelist-dragging');\n return this.trigger(DROP, e);\n }, this),\n dragend: proxy(function (e) {\n var dest = this.dataItem(e.destination);\n var src = this.dataItem(e.source);\n src.set('parentId', dest ? dest.id : null);\n e.source = src;\n e.destination = dest;\n this.trigger(DRAGEND, e);\n }, this),\n reorderable: false,\n dropHintContainer: function (item) {\n return item.children('td:eq(1)');\n },\n dropPositionFrom: function (dropHint) {\n return dropHint.prevAll('.k-i-none').length > 0 ? 'after' : 'before';\n }\n });\n },\n itemFor: function (model) {\n if (typeof model == 'number') {\n model = this.dataSource.get(model);\n }\n return this.tbody.find('[' + kendo.attr('uid') + '=' + model.uid + ']');\n },\n _scrollable: function () {\n if (this.options.scrollable) {\n var scrollables = this.thead.closest('.k-grid-header-wrap');\n var lockedContent = $(this.lockedContent).bind('DOMMouseScroll' + NS + ' mousewheel' + NS, proxy(this._wheelScroll, this));\n this.content.bind('scroll' + NS, function () {\n scrollables.scrollLeft(this.scrollLeft);\n lockedContent.scrollTop(this.scrollTop);\n });\n var touchScroller = kendo.touchScroller(this.content);\n if (touchScroller && touchScroller.movable) {\n this._touchScroller = touchScroller;\n touchScroller.movable.bind('change', function (e) {\n scrollables.scrollLeft(-e.sender.x);\n if (lockedContent) {\n lockedContent.scrollTop(-e.sender.y);\n }\n });\n }\n }\n },\n _wheelScroll: function (e) {\n if (e.ctrlKey) {\n return;\n }\n var delta = kendo.wheelDeltaY(e);\n var lockedDiv = $(e.currentTarget);\n if (delta) {\n if (lockedDiv[0].scrollHeight > lockedDiv[0].clientHeight && (lockedDiv[0].scrollTop < lockedDiv[0].scrollHeight - lockedDiv[0].clientHeight && delta < 0 || lockedDiv[0].scrollTop > 0 && delta > 0)) {\n e.preventDefault();\n }\n lockedDiv.one('wheel' + NS, false);\n this.content.scrollTop(this.content.scrollTop() + -delta);\n }\n },\n _progress: function () {\n var messages = this.options.messages;\n if (!this.tbody.find('tr').length) {\n this._showStatus(kendo.template('<span class=\\'#= className #\\' /> #: messages.loading #')({\n className: classNames.icon + ' ' + classNames.loading,\n messages: messages\n }));\n }\n },\n _error: function (e) {\n if (!this.dataSource.rootNodes().length) {\n this._render({ error: e });\n }\n },\n refresh: function (e) {\n e = e || {};\n if (e.action == 'itemchange' && this.editor) {\n return;\n }\n if (this.trigger(DATABINDING)) {\n return;\n }\n this._cancelEditor();\n this._render();\n this._adjustHeight();\n this.trigger(DATABOUND);\n },\n _angularFooters: function (command) {\n var i, footer, aggregates;\n var allAggregates = this.dataSource.aggregates();\n var footerRows = this._footerItems();\n for (i = 0; i < footerRows.length; i++) {\n footer = footerRows.eq(i);\n aggregates = allAggregates[footer.attr('data-parentId')];\n this._angularFooter(command, footer.find('td').get(), aggregates);\n }\n },\n _angularFooter: function (command, cells, aggregates) {\n var columns = this.columns;\n this.angular(command, function () {\n return {\n elements: cells,\n data: map(columns, function (col) {\n return {\n column: col,\n aggregate: aggregates && aggregates[col.field]\n };\n })\n };\n });\n },\n items: function () {\n if (this._hasLockedColumns) {\n return this._items(this.tbody).add(this._items(this.lockedTable));\n } else {\n return this._items(this.tbody);\n }\n },\n _items: function (container) {\n return container.find('tr').filter(function () {\n return !$(this).hasClass(classNames.footerTemplate);\n });\n },\n _footerItems: function () {\n var container = this.tbody;\n if (this._hasLockedColumns) {\n container = container.add(this.lockedTable);\n }\n return container.find('tr').filter(function () {\n return $(this).hasClass(classNames.footerTemplate);\n });\n },\n dataItems: function () {\n var dataItems = kendo.ui.DataBoundWidget.fn.dataItems.call(this);\n if (this._hasLockedColumns) {\n var n = dataItems.length, tmp = new Array(2 * n);\n for (var i = n; --i >= 0;) {\n tmp[i] = tmp[i + n] = dataItems[i];\n }\n dataItems = tmp;\n }\n return dataItems;\n },\n _showStatus: function (message) {\n var status = this.element.find('.k-status');\n var content = $(this.content).add(this.lockedContent);\n if (!status.length) {\n status = $('<div class=\\'k-status\\' />').appendTo(this.element);\n }\n this._contentTree.render([]);\n if (this._hasLockedColumns) {\n this._lockedContentTree.render([]);\n }\n content.hide();\n status.html(message);\n },\n _hideStatus: function () {\n this.element.find('.k-status').remove();\n $(this.content).add(this.lockedContent).show();\n },\n _adjustHeight: function () {\n var element = this.element;\n var contentWrap = element.find(DOT + classNames.gridContentWrap);\n var header = element.find(DOT + classNames.gridHeader);\n var toolbar = element.find(DOT + classNames.gridToolbar);\n var height;\n var scrollbar = kendo.support.scrollbar();\n element.height(this.options.height);\n var isHeightSet = function (el) {\n var initialHeight, newHeight;\n if (el[0].style.height) {\n return true;\n } else {\n initialHeight = el.height();\n }\n el.height('auto');\n newHeight = el.height();\n el.height('');\n return initialHeight != newHeight;\n };\n if (isHeightSet(element)) {\n height = element.height() - outerHeight(header) - outerHeight(toolbar);\n contentWrap.height(height);\n if (this._hasLockedColumns) {\n scrollbar = this.table[0].offsetWidth > this.table.parent()[0].clientWidth ? scrollbar : 0;\n this.lockedContent.height(height - scrollbar);\n }\n }\n },\n _resize: function () {\n this._applyLockedContainersWidth();\n this._adjustHeight();\n },\n _minScreenSupport: function () {\n var any = this.hideMinScreenCols();\n if (any) {\n this.minScreenResizeHandler = proxy(this.hideMinScreenCols, this);\n $(window).on('resize', this.minScreenResizeHandler);\n }\n },\n hideMinScreenCols: function () {\n var cols = this.columns, any = false, screenWidth = window.innerWidth > 0 ? window.innerWidth : screen.width;\n for (var i = 0; i < cols.length; i++) {\n var col = cols[i];\n var minWidth = col.minScreenWidth;\n if (minWidth !== undefined && minWidth !== null) {\n any = true;\n if (minWidth > screenWidth) {\n this.hideColumn(col);\n } else {\n this.showColumn(col);\n }\n }\n }\n return any;\n },\n destroy: function () {\n DataBoundWidget.fn.destroy.call(this);\n var dataSource = this.dataSource;\n dataSource.unbind(CHANGE, this._refreshHandler);\n dataSource.unbind(ERROR, this._errorHandler);\n dataSource.unbind(PROGRESS, this._progressHandler);\n if (this._resizeHandler) {\n $(window).off('resize' + NS, this._resizeHandler);\n }\n if (this._dragging) {\n this._dragging.destroy();\n this._dragging = null;\n }\n if (this.resizable) {\n this.resizable.destroy();\n this.resizable = null;\n }\n if (this.reorderable) {\n this.reorderable.destroy();\n this.reorderable = null;\n }\n if (this._draggableInstance && this._draggableInstance.element) {\n this._draggableInstance.destroy();\n this._draggableInstance = null;\n }\n if (this.minScreenResizeHandler) {\n $(window).off('resize', this.minScreenResizeHandler);\n }\n this._destroyEditor();\n this.element.off(NS);\n if (this._touchScroller) {\n this._touchScroller.destroy();\n }\n this._autoExpandable = null;\n this._refreshHandler = this._errorHandler = this._progressHandler = this._dataSourceFetchProxy = null;\n this.thead = this.content = this.tbody = this.table = this.element = this.lockedHeader = this.lockedContent = null;\n this._statusTree = this._headerTree = this._contentTree = this._lockedHeaderColsTree = this._lockedContentColsTree = this._lockedHeaderTree = this._lockedContentTree = null;\n },\n options: {\n name: 'TreeList',\n columns: [],\n autoBind: true,\n scrollable: true,\n selectable: false,\n sortable: false,\n toolbar: null,\n height: null,\n columnMenu: false,\n messages: {\n noRows: 'No records to display',\n loading: 'Loading...',\n requestFailed: 'Request failed.',\n retry: 'Retry',\n commands: {\n edit: 'Edit',\n update: 'Update',\n canceledit: 'Cancel',\n create: 'Add new record',\n createchild: 'Add child record',\n destroy: 'Delete',\n excel: 'Export to Excel',\n pdf: 'Export to PDF'\n }\n },\n excel: { hierarchy: true },\n resizable: false,\n filterable: false,\n editable: false,\n reorderable: false\n },\n events: [\n CHANGE,\n EDIT,\n SAVE,\n REMOVE,\n EXPAND,\n COLLAPSE,\n DATABINDING,\n DATABOUND,\n CANCEL,\n DRAGSTART,\n DRAG,\n DROP,\n DRAGEND,\n FILTERMENUINIT,\n COLUMNHIDE,\n COLUMNSHOW,\n COLUMNREORDER,\n COLUMNRESIZE,\n COLUMNMENUINIT,\n COLUMNLOCK,\n COLUMNUNLOCK\n ],\n _toggle: function (model, expand) {\n var defaultPromise = $.Deferred().resolve().promise();\n var loaded = model.loaded();\n if (model._error) {\n model.expanded = false;\n model._error = undefined;\n }\n if (!loaded && model.expanded) {\n return defaultPromise;\n }\n if (typeof expand == 'undefined') {\n expand = !model.expanded;\n }\n model.expanded = expand;\n if (!loaded) {\n defaultPromise = this.dataSource.load(model).always(proxy(function () {\n this._render();\n this._syncLockedContentHeight();\n }, this));\n }\n this._render();\n this._syncLockedContentHeight();\n return defaultPromise;\n },\n expand: function (row) {\n return this._toggle(this.dataItem(row), true);\n },\n collapse: function (row) {\n return this._toggle(this.dataItem(row), false);\n },\n _toggleChildren: function (e) {\n var icon = $(e.currentTarget);\n var model = this.dataItem(icon);\n var event = !model.expanded ? EXPAND : COLLAPSE;\n if (!this.trigger(event, { model: model })) {\n this._toggle(model);\n }\n e.preventDefault();\n },\n _attachEvents: function () {\n var icons = DOT + classNames.iconCollapse + ', .' + classNames.iconExpand + ', .' + classNames.refresh;\n var retryButton = DOT + classNames.retry;\n this.element.on(MOUSEDOWN + NS, icons, proxy(this._toggleChildren, this)).on(CLICK + NS, retryButton, this._dataSourceFetchProxy).on(CLICK + NS, '.k-button[data-command]', proxy(this._commandClick, this));\n },\n _commandByName: function (name) {\n var columns = this.columns;\n var toolbar = $.isArray(this.options.toolbar) ? this.options.toolbar : [];\n var i, j, commands, currentName;\n name = name.toLowerCase();\n if (defaultCommands[name]) {\n return defaultCommands[name];\n }\n for (i = 0; i < columns.length; i++) {\n commands = columns[i].command;\n if (commands) {\n for (j = 0; j < commands.length; j++) {\n currentName = commands[j].name;\n if (!currentName) {\n continue;\n }\n if (currentName.toLowerCase() == name) {\n return commands[j];\n }\n }\n }\n }\n for (i = 0; i < toolbar.length; i++) {\n currentName = toolbar[i].name;\n if (!currentName) {\n continue;\n }\n if (currentName.toLowerCase() == name) {\n return toolbar[i];\n }\n }\n },\n _commandClick: function (e) {\n var button = $(e.currentTarget);\n var commandName = button.attr('data-command');\n var command = this._commandByName(commandName);\n var row = button.parentsUntil(this.wrapper, 'tr');\n row = row.length ? row : undefined;\n if (command) {\n if (command.methodName) {\n this[command.methodName](row);\n } else if (command.click) {\n command.click.call(this, e);\n }\n e.preventDefault();\n }\n },\n _ensureExpandableColumn: function () {\n if (this._autoExpandable) {\n delete this._autoExpandable.expandable;\n }\n var visibleColumns = grep(this.columns, not(is('hidden')));\n var expandableColumns = grep(visibleColumns, is('expandable'));\n if (this.columns.length && !expandableColumns.length) {\n this._autoExpandable = visibleColumns[0];\n visibleColumns[0].expandable = true;\n }\n },\n _columns: function () {\n var columns = this.options.columns || [];\n this.columns = map(columns, function (column) {\n column = typeof column === 'string' ? { field: column } : column;\n return extend({ encoded: true }, column);\n });\n var lockedColumns = this._lockedColumns();\n if (lockedColumns.length > 0) {\n this._hasLockedColumns = true;\n this.columns = lockedColumns.concat(this._nonLockedColumns());\n }\n this._ensureExpandableColumn();\n this._columnTemplates();\n this._columnAttributes();\n },\n _columnTemplates: function () {\n var idx, length, column;\n var columns = this.columns;\n for (idx = 0, length = columns.length; idx < length; idx++) {\n column = columns[idx];\n if (column.template) {\n column.template = kendo.template(column.template);\n }\n if (column.headerTemplate) {\n column.headerTemplate = kendo.template(column.headerTemplate);\n }\n if (column.footerTemplate) {\n column.footerTemplate = kendo.template(column.footerTemplate);\n }\n }\n },\n _columnAttributes: function () {\n var idx, length;\n var columns = this.columns;\n function convertStyle(attr) {\n var properties, i, declaration;\n if (attr && attr.style) {\n properties = attr.style.split(';');\n attr.style = {};\n for (i = 0; i < properties.length; i++) {\n declaration = properties[i].split(':');\n var name = $.trim(declaration[0]);\n if (name) {\n attr.style[$.camelCase(name)] = $.trim(declaration[1]);\n }\n }\n }\n }\n for (idx = 0, length = columns.length; idx < length; idx++) {\n convertStyle(columns[idx].attributes);\n convertStyle(columns[idx].headerAttributes);\n }\n },\n _layout: function () {\n var columns = this.columns;\n var element = this.element;\n var layout = '';\n this.wrapper = element.addClass(classNames.wrapper);\n layout = '<div class=\\'#= gridHeader #\\'>';\n if (this._hasLockedColumns) {\n layout += '<div class=\\'k-grid-header-locked\\'>' + '<table role=\\'grid\\'>' + '<colgroup></colgroup>' + '<thead role=\\'rowgroup\\' />' + '</table>' + '</div>';\n }\n layout += '<div class=\\'#= gridHeaderWrap #\\'>' + '<table role=\\'grid\\'>' + '<colgroup></colgroup>' + '<thead role=\\'rowgroup\\' />' + '</table>' + '</div>' + '</div>';\n if (this._hasLockedColumns) {\n layout += '<div class=\\'k-grid-content-locked\\'>' + '<table role=\\'treegrid\\' tabindex=\\'0\\'>' + '<colgroup></colgroup>' + '<tbody />' + '</table>' + '</div>';\n }\n layout += '<div class=\\'#= gridContentWrap # k-auto-scrollable\\'>' + '<table role=\\'treegrid\\' tabindex=\\'0\\'>' + '<colgroup></colgroup>' + '<tbody />' + '</table>' + '</div>';\n if (!this.options.scrollable) {\n layout = '<table role=\\'treegrid\\' tabindex=\\'0\\'>' + '<colgroup></colgroup>' + '<thead class=\\'#= gridHeader #\\' role=\\'rowgroup\\' />' + '<tbody />' + '</table>';\n }\n if (this.options.toolbar) {\n layout = '<div class=\\'#= header # #= gridToolbar #\\' />' + layout;\n }\n element.append(kendo.template(layout)(classNames) + '<div class=\\'k-status\\' />');\n this.toolbar = element.find(DOT + classNames.gridToolbar);\n var header = element.find(DOT + classNames.gridHeader).find('thead').addBack().filter('thead');\n this.thead = header.last();\n if (this.options.scrollable) {\n var rtl = kendo.support.isRtl(element);\n element.find('div.' + classNames.gridHeader).css(rtl ? 'padding-left' : 'padding-right', kendo.support.scrollbar());\n }\n var content = element.find(DOT + classNames.gridContentWrap);\n if (!content.length) {\n content = element;\n } else {\n this.content = content;\n }\n this.table = content.find('>table');\n this.tbody = this.table.find('>tbody');\n if (this._hasLockedColumns) {\n this.lockedHeader = header.first().closest('.k-grid-header-locked');\n this.lockedContent = element.find('.k-grid-content-locked');\n this.lockedTable = this.lockedContent.children();\n }\n this._initVirtualTrees();\n this._renderCols();\n this._renderHeader();\n this.angular('compile', function () {\n return {\n elements: header.find('th.k-header').get(),\n data: map(columns, function (col) {\n return { column: col };\n })\n };\n });\n },\n _initVirtualTrees: function () {\n this._headerColsTree = new kendoDom.Tree(this.thead.prev()[0]);\n this._contentColsTree = new kendoDom.Tree(this.tbody.prev()[0]);\n this._headerTree = new kendoDom.Tree(this.thead[0]);\n this._contentTree = new kendoDom.Tree(this.tbody[0]);\n this._statusTree = new kendoDom.Tree(this.element.children('.k-status')[0]);\n if (this.lockedHeader) {\n this._lockedHeaderColsTree = new kendoDom.Tree(this.lockedHeader.find('colgroup')[0]);\n this._lockedContentColsTree = new kendoDom.Tree(this.lockedTable.find('>colgroup')[0]);\n this._lockedHeaderTree = new kendoDom.Tree(this.lockedHeader.find('thead')[0]);\n this._lockedContentTree = new kendoDom.Tree(this.lockedTable.find('>tbody')[0]);\n }\n },\n _toolbar: function () {\n var options = this.options.toolbar;\n var toolbar = this.toolbar;\n if (!options) {\n return;\n }\n if ($.isArray(options)) {\n var buttons = this._buildCommands(options);\n new kendoDom.Tree(toolbar[0]).render(buttons);\n } else {\n toolbar.append(kendo.template(options)({}));\n }\n this.angular('compile', function () {\n return { elements: toolbar.get() };\n });\n },\n _lockedColumns: function () {\n return grep(this.columns, is('locked'));\n },\n _nonLockedColumns: function () {\n return grep(this.columns, not(is('locked')));\n },\n _templateColumns: function () {\n return grep(this.columns, is('template'));\n },\n _flushCache: function () {\n if (this.options.$angular && this._templateColumns().length) {\n this._contentTree.render([]);\n if (this._hasLockedColumns) {\n this._lockedContentTree.render([]);\n }\n }\n },\n _render: function (options) {\n options = options || {};\n var messages = this.options.messages;\n var data = this.dataSource.rootNodes();\n var uidAttr = kendo.attr('uid');\n var selected = this.select().removeClass('k-state-selected').map(function (_, row) {\n return $(row).attr(uidAttr);\n });\n this._absoluteIndex = 0;\n this._angularItems('cleanup');\n this._angularFooters('cleanup');\n this._flushCache();\n if (options.error) {\n this._showStatus(kendo.template('#: messages.requestFailed # ' + '<button class=\\'#= buttonClass #\\'>#: messages.retry #</button>')({\n buttonClass: [\n classNames.button,\n classNames.retry\n ].join(' '),\n messages: messages\n }));\n } else if (!data.length) {\n this._showStatus(kendo.htmlEncode(messages.noRows));\n } else {\n this._hideStatus();\n this._contentTree.render(this._trs({\n columns: this._nonLockedColumns(),\n aggregates: options.aggregates,\n selected: selected,\n data: data,\n visible: true,\n level: 0\n }));\n if (this._hasLockedColumns) {\n this._absoluteIndex = 0;\n this._lockedContentTree.render(this._trs({\n columns: this._lockedColumns(),\n aggregates: options.aggregates,\n selected: selected,\n data: data,\n visible: true,\n level: 0\n }));\n }\n }\n if (this._touchScroller) {\n this._touchScroller.contentResized();\n }\n this._muteAngularRebind(function () {\n this._angularItems('compile');\n this._angularFooters('compile');\n });\n this.items().filter(function () {\n return $.inArray($(this).attr(uidAttr), selected) >= 0;\n }).addClass('k-state-selected');\n this._adjustRowsHeight();\n },\n _adjustRowsHeight: function () {\n if (!this._hasLockedColumns) {\n return;\n }\n var table = this.table;\n var lockedTable = this.lockedTable;\n var rows = table[0].rows;\n var length = rows.length;\n var idx;\n var lockedRows = lockedTable[0].rows;\n var containers = table.add(lockedTable);\n var containersLength = containers.length;\n var heights = [];\n var lockedHeaderRows = this.lockedHeader.find('tr');\n var headerRows = this.thead.find('tr');\n lockedHeaderRows.add(headerRows).height('auto').height(Math.max(lockedHeaderRows.height(), headerRows.height()));\n for (idx = 0; idx < length; idx++) {\n if (!lockedRows[idx]) {\n break;\n }\n if (rows[idx].style.height) {\n rows[idx].style.height = lockedRows[idx].style.height = '';\n }\n }\n for (idx = 0; idx < length; idx++) {\n if (!lockedRows[idx]) {\n break;\n }\n var offsetHeight1 = rows[idx].offsetHeight;\n var offsetHeight2 = lockedRows[idx].offsetHeight;\n var height = 0;\n if (offsetHeight1 > offsetHeight2) {\n height = offsetHeight1;\n } else if (offsetHeight1 < offsetHeight2) {\n height = offsetHeight2;\n }\n heights.push(height);\n }\n for (idx = 0; idx < containersLength; idx++) {\n containers[idx].style.display = 'none';\n }\n for (idx = 0; idx < length; idx++) {\n if (heights[idx]) {\n rows[idx].style.height = lockedRows[idx].style.height = heights[idx] + 1 + 'px';\n }\n }\n for (idx = 0; idx < containersLength; idx++) {\n containers[idx].style.display = '';\n }\n },\n _ths: function (columns) {\n var ths = [];\n var column, title, children, cellClasses, attr, headerContent;\n for (var i = 0, length = columns.length; i < length; i++) {\n column = columns[i];\n children = [];\n cellClasses = [classNames.header];\n if (column.headerTemplate) {\n title = column.headerTemplate({});\n } else {\n title = column.title || column.field || '';\n }\n if (column.headerTemplate) {\n headerContent = kendoHtmlElement(title);\n } else {\n headerContent = kendoTextElement(title);\n }\n if (column.sortable) {\n children.push(kendoDomElement('a', {\n href: '#',\n className: classNames.link\n }, [headerContent]));\n } else {\n children.push(headerContent);\n }\n attr = {\n 'data-field': column.field,\n 'data-title': column.title,\n 'style': column.hidden === true ? { 'display': 'none' } : {},\n className: cellClasses.join(' '),\n 'role': 'columnheader'\n };\n attr = extend(true, {}, attr, column.headerAttributes);\n ths.push(kendoDomElement('th', attr, children));\n }\n return ths;\n },\n _cols: function (columns) {\n var cols = [];\n var width, attr;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].hidden === true) {\n continue;\n }\n width = columns[i].width;\n attr = {};\n if (width && parseInt(width, 10) !== 0) {\n attr.style = { width: typeof width === 'string' ? width : width + 'px' };\n }\n cols.push(kendoDomElement('col', attr));\n }\n return cols;\n },\n _renderCols: function () {\n var columns = this._nonLockedColumns();\n this._headerColsTree.render(this._cols(columns));\n if (this.options.scrollable) {\n this._contentColsTree.render(this._cols(columns));\n }\n if (this._hasLockedColumns) {\n columns = this._lockedColumns();\n this._lockedHeaderColsTree.render(this._cols(columns));\n this._lockedContentColsTree.render(this._cols(columns));\n }\n },\n _renderHeader: function () {\n var columns = this._nonLockedColumns();\n this._headerTree.render([kendoDomElement('tr', { 'role': 'row' }, this._ths(columns))]);\n if (this._hasLockedColumns) {\n columns = this._lockedColumns();\n this._lockedHeaderTree.render([kendoDomElement('tr', { 'role': 'row' }, this._ths(columns))]);\n this._applyLockedContainersWidth();\n }\n },\n _applyLockedContainersWidth: function () {\n if (!this._hasLockedColumns) {\n return;\n }\n var lockedWidth = columnsWidth(this.lockedHeader.find('>table>colgroup>col'));\n var headerTable = this.thead.parent();\n var nonLockedWidth = columnsWidth(headerTable.find('>colgroup>col'));\n var wrapperWidth = this.wrapper[0].clientWidth;\n var scrollbar = kendo.support.scrollbar();\n if (lockedWidth >= wrapperWidth) {\n lockedWidth = wrapperWidth - 3 * scrollbar;\n }\n this.lockedHeader.add(this.lockedContent).width(lockedWidth);\n headerTable.add(this.table).width(nonLockedWidth);\n var width = wrapperWidth - lockedWidth - 2;\n this.content.width(width);\n headerTable.parent().width(width - scrollbar);\n },\n _trs: function (options) {\n var model, attr, className, hasChildren, childNodes, i, length;\n var rows = [];\n var level = options.level;\n var data = options.data;\n var dataSource = this.dataSource;\n var aggregates = dataSource.aggregates() || {};\n var columns = options.columns;\n for (i = 0, length = data.length; i < length; i++) {\n className = [];\n model = data[i];\n childNodes = model.loaded() && dataSource.childNodes(model);\n hasChildren = childNodes && childNodes.length;\n attr = { 'role': 'row' };\n attr[kendo.attr('uid')] = model.uid;\n if (hasChildren) {\n attr['aria-expanded'] = !!model.expanded;\n }\n if (options.visible) {\n if (this._absoluteIndex % 2 !== 0) {\n className.push(classNames.alt);\n }\n this._absoluteIndex++;\n } else {\n attr.style = { display: 'none' };\n }\n if ($.inArray(model.uid, options.selected) >= 0) {\n className.push(classNames.selected);\n }\n if (hasChildren) {\n className.push(classNames.group);\n }\n if (model._edit) {\n className.push('k-grid-edit-row');\n }\n attr.className = className.join(' ');\n rows.push(this._tds({\n model: model,\n attr: attr,\n level: level\n }, columns, proxy(this._td, this)));\n if (hasChildren) {\n rows = rows.concat(this._trs({\n columns: columns,\n aggregates: aggregates,\n selected: options.selected,\n visible: options.visible && !!model.expanded,\n data: childNodes,\n level: level + 1\n }));\n }\n }\n if (this._hasFooterTemplate()) {\n attr = {\n className: classNames.footerTemplate,\n 'data-parentId': model.parentId\n };\n if (!options.visible) {\n attr.style = { display: 'none' };\n }\n rows.push(this._tds({\n model: aggregates[model.parentId],\n attr: attr,\n level: level\n }, columns, this._footerTd));\n }\n return rows;\n },\n _footerTd: function (options) {\n var content = [];\n var column = options.column;\n var template = options.column.footerTemplate || $.noop;\n var aggregates = options.model[column.field] || {};\n var attr = {\n 'role': 'gridcell',\n 'style': column.hidden === true ? { 'display': 'none' } : {}\n };\n if (column.expandable) {\n content = content.concat(createPlaceholders({\n level: options.level + 1,\n className: classNames.iconPlaceHolder\n }));\n }\n if (column.attributes) {\n extend(attr, column.attributes);\n }\n content.push(kendoHtmlElement(template(aggregates) || ''));\n return kendoDomElement('td', attr, content);\n },\n _hasFooterTemplate: function () {\n return !!grep(this.columns, function (c) {\n return c.footerTemplate;\n }).length;\n },\n _tds: function (options, columns, renderer) {\n var children = [];\n var column;\n for (var i = 0, l = columns.length; i < l; i++) {\n column = columns[i];\n children.push(renderer({\n model: options.model,\n column: column,\n level: options.level\n }));\n }\n return kendoDomElement('tr', options.attr, children);\n },\n _td: function (options) {\n var children = [];\n var model = options.model;\n var column = options.column;\n var iconClass;\n var attr = {\n 'role': 'gridcell',\n 'style': column.hidden === true ? { 'display': 'none' } : {}\n };\n if (model._edit && column.field && model.editable(column.field)) {\n attr[kendo.attr('container-for')] = column.field;\n } else {\n if (column.expandable) {\n children = createPlaceholders({\n level: options.level,\n className: classNames.iconPlaceHolder\n });\n iconClass = [classNames.icon];\n if (model.hasChildren) {\n iconClass.push(model.expanded ? classNames.iconCollapse : classNames.iconExpand);\n } else {\n iconClass.push(classNames.iconHidden);\n }\n if (model._error) {\n iconClass.push(classNames.refresh);\n } else if (!model.loaded() && model.expanded) {\n iconClass.push(classNames.loading);\n }\n children.push(kendoDomElement('span', { className: iconClass.join(' ') }));\n attr.style['white-space'] = 'nowrap';\n }\n if (column.attributes) {\n extend(true, attr, column.attributes);\n }\n if (column.command) {\n if (model._edit) {\n children = this._buildCommands([\n 'update',\n 'canceledit'\n ]);\n } else {\n children = this._buildCommands(column.command);\n }\n } else {\n children.push(this._cellContent(column, model));\n }\n }\n return kendoDomElement('td', attr, children);\n },\n _cellContent: function (column, model) {\n var value;\n if (column.template) {\n value = column.template(model);\n } else if (column.field) {\n value = model.get(column.field);\n if (value !== null && column.format) {\n value = kendo.format(column.format, value);\n }\n }\n if (value === null || typeof value == 'undefined') {\n value = '';\n }\n if (column.template || !column.encoded) {\n return kendoHtmlElement(value);\n } else {\n return kendoTextElement(value);\n }\n },\n _buildCommands: function (commands) {\n var i, result = [];\n for (i = 0; i < commands.length; i++) {\n result.push(this._button(commands[i]));\n }\n return result;\n },\n _button: function (command) {\n var name = (command.name || command).toLowerCase();\n var text = this.options.messages.commands[name];\n var icon = [];\n command = extend({}, defaultCommands[name], { text: text }, command);\n if (command.imageClass) {\n icon.push(kendoDomElement('span', {\n className: [\n 'k-icon',\n command.imageClass\n ].join(' ')\n }));\n }\n return kendoDomElement('button', {\n 'type': 'button',\n 'data-command': name,\n className: [\n 'k-button',\n 'k-button-icontext',\n command.className\n ].join(' ')\n }, icon.concat([kendoTextElement(command.text || command.name)]));\n },\n _positionResizeHandle: function (e) {\n var th = $(e.currentTarget);\n var resizeHandle = this.resizeHandle;\n var position = th.position();\n var left = position.left;\n var cellWidth = outerWidth(th);\n var container = th.closest('div');\n var clientX = e.clientX + $(window).scrollLeft();\n var indicatorWidth = this.options.columnResizeHandleWidth || 3;\n left += container.scrollLeft();\n if (!resizeHandle) {\n resizeHandle = this.resizeHandle = $('<div class=\"k-resize-handle\"><div class=\"k-resize-handle-inner\" /></div>');\n }\n var cellOffset = th.offset().left + cellWidth;\n var show = clientX > cellOffset - indicatorWidth && clientX < cellOffset + indicatorWidth;\n if (!show) {\n resizeHandle.hide();\n return;\n }\n container.append(resizeHandle);\n resizeHandle.show().css({\n top: position.top,\n left: left + cellWidth - indicatorWidth - 1,\n height: outerHeight(th),\n width: indicatorWidth * 3\n }).data('th', th);\n var that = this;\n resizeHandle.off('dblclick' + NS).on('dblclick' + NS, function () {\n var index = th.index();\n if ($.contains(that.thead[0], th[0])) {\n index += grep(that.columns, function (val) {\n return val.locked && !val.hidden;\n }).length;\n }\n that.autoFitColumn(index);\n });\n },\n autoFitColumn: function (column) {\n var that = this, options = that.options, columns = that.columns, index, browser = kendo.support.browser, th, headerTable, isLocked, visibleLocked = that.lockedHeader ? leafDataCells(that.lockedHeader.find('>table>thead')).filter(isCellVisible).length : 0, col;\n if (typeof column == 'number') {\n column = columns[column];\n } else if (isPlainObject(column)) {\n column = grep(columns, function (item) {\n return item === column;\n })[0];\n } else {\n column = grep(columns, function (item) {\n return item.field === column;\n })[0];\n }\n if (!column || column.hidden) {\n return;\n }\n index = inArray(column, columns);\n isLocked = column.locked;\n if (isLocked) {\n headerTable = that.lockedHeader.children('table');\n } else {\n headerTable = that.thead.parent();\n }\n th = headerTable.find('[data-index=\\'' + index + '\\']');\n var contentTable = isLocked ? that.lockedTable : that.table, footer = that.footer || $();\n if (that.footer && that.lockedContent) {\n footer = isLocked ? that.footer.children('.k-grid-footer-locked') : that.footer.children('.k-grid-footer-wrap');\n }\n var footerTable = footer.find('table').first();\n if (that.lockedHeader && visibleLocked >= index && !isLocked) {\n index -= visibleLocked;\n }\n for (var j = 0; j < columns.length; j++) {\n if (columns[j] === column) {\n break;\n } else {\n if (columns[j].hidden) {\n index--;\n }\n }\n }\n if (options.scrollable) {\n col = headerTable.find('col:not(.k-group-col):not(.k-hierarchy-col):eq(' + index + ')').add(contentTable.children('colgroup').find('col:not(.k-group-col):not(.k-hierarchy-col):eq(' + index + ')')).add(footerTable.find('colgroup').find('col:not(.k-group-col):not(.k-hierarchy-col):eq(' + index + ')'));\n } else {\n col = contentTable.children('colgroup').find('col:not(.k-group-col):not(.k-hierarchy-col):eq(' + index + ')');\n }\n var tables = headerTable.add(contentTable).add(footerTable);\n var oldColumnWidth = outerWidth(th);\n col.width('');\n tables.css('table-layout', 'fixed');\n col.width('auto');\n tables.addClass('k-autofitting');\n tables.css('table-layout', '');\n var newColumnWidth = Math.ceil(Math.max(outerWidth(th), outerWidth(contentTable.find('tr').eq(0).children('td:visible').eq(index)), outerWidth(footerTable.find('tr').eq(0).children('td:visible').eq(index))));\n col.width(newColumnWidth);\n column.width = newColumnWidth;\n if (options.scrollable) {\n var cols = headerTable.find('col'), colWidth, totalWidth = 0;\n for (var idx = 0, length = cols.length; idx < length; idx += 1) {\n colWidth = cols[idx].style.width;\n if (colWidth && colWidth.indexOf('%') == -1) {\n totalWidth += parseInt(colWidth, 10);\n } else {\n totalWidth = 0;\n break;\n }\n }\n if (totalWidth) {\n tables.each(function () {\n this.style.width = totalWidth + 'px';\n });\n }\n }\n if (browser.msie && browser.version == 8) {\n tables.css('display', 'inline-table');\n setTimeout(function () {\n tables.css('display', 'table');\n }, 1);\n }\n tables.removeClass('k-autofitting');\n that.trigger(COLUMNRESIZE, {\n column: column,\n oldWidth: oldColumnWidth,\n newWidth: newColumnWidth\n });\n that._applyLockedContainersWidth();\n that._syncLockedContentHeight();\n that._syncLockedHeaderHeight();\n },\n _adjustLockedHorizontalScrollBar: function () {\n var table = this.table, content = table.parent();\n var scrollbar = table[0].offsetWidth > content[0].clientWidth ? kendo.support.scrollbar() : 0;\n this.lockedContent.height(content.height() - scrollbar);\n },\n _syncLockedContentHeight: function () {\n if (this.lockedTable) {\n if (!this._touchScroller) {\n this._adjustLockedHorizontalScrollBar();\n }\n this._adjustRowsHeight(this.table, this.lockedTable);\n }\n },\n _syncLockedHeaderHeight: function () {\n if (this.lockedHeader) {\n var lockedTable = this.lockedHeader.children('table');\n var table = this.thead.parent();\n this._adjustRowsHeight(lockedTable, table);\n syncTableHeight(lockedTable, table);\n }\n },\n _resizable: function () {\n if (!this.options.resizable) {\n return;\n }\n if (this.resizable) {\n this.resizable.destroy();\n }\n var treelist = this;\n $(this.lockedHeader).find('thead').add(this.thead).on('mousemove' + NS, 'th', $.proxy(this._positionResizeHandle, this));\n this.resizable = new kendo.ui.Resizable(this.wrapper, {\n handle: '.k-resize-handle',\n start: function (e) {\n var th = $(e.currentTarget).data('th');\n var colSelector = 'col:eq(' + $.inArray(th[0], th.parent().children().filter(':visible')) + ')';\n var header, contentTable;\n treelist.wrapper.addClass('k-grid-column-resizing');\n if (treelist.lockedHeader && $.contains(treelist.lockedHeader[0], th[0])) {\n header = treelist.lockedHeader;\n contentTable = treelist.lockedTable;\n } else {\n header = treelist.thead.parent();\n contentTable = treelist.table;\n }\n this.col = contentTable.children('colgroup').find(colSelector).add(header.find(colSelector));\n this.th = th;\n this.startLocation = e.x.location;\n this.columnWidth = outerWidth(th);\n this.table = this.col.closest('table');\n this.totalWidth = this.table.width();\n },\n resize: function (e) {\n var minColumnWidth = 11;\n var delta = e.x.location - this.startLocation;\n if (this.columnWidth + delta < minColumnWidth) {\n delta = minColumnWidth - this.columnWidth;\n }\n this.table.width(this.totalWidth + delta);\n this.col.width(this.columnWidth + delta);\n },\n resizeend: function () {\n treelist.wrapper.removeClass('k-grid-column-resizing');\n var field = this.th.attr('data-field');\n var column = grep(treelist.columns, function (c) {\n return c.field == field;\n });\n var newWidth = Math.floor(outerWidth(this.th));\n column[0].width = newWidth;\n treelist._resize();\n treelist._adjustRowsHeight();\n treelist.trigger(COLUMNRESIZE, {\n column: column,\n oldWidth: this.columnWidth,\n newWidth: newWidth\n });\n this.table = this.col = this.th = null;\n }\n });\n },\n _sortable: function () {\n var columns = this.columns;\n var column;\n var sortableInstance;\n var cells = $(this.lockedHeader).add(this.thead).find('th');\n var cell, idx, length;\n var fieldAttr = kendo.attr('field');\n var sortable = this.options.sortable;\n if (!sortable) {\n return;\n }\n for (idx = 0, length = cells.length; idx < length; idx++) {\n column = columns[idx];\n if (column.sortable !== false && !column.command && column.field) {\n cell = cells.eq(idx);\n sortableInstance = cell.data('kendoColumnSorter');\n if (sortableInstance) {\n sortableInstance.destroy();\n }\n cell.attr(fieldAttr, column.field).kendoColumnSorter(extend({}, sortable, column.sortable, { dataSource: this.dataSource }));\n }\n }\n },\n _filterable: function () {\n var cells = $(this.lockedHeader).add(this.thead).find('th');\n var filterable = this.options.filterable;\n var idx, length, column, cell, filterMenuInstance;\n if (!filterable || this.options.columnMenu) {\n return;\n }\n var filterInit = proxy(function (e) {\n this.trigger(FILTERMENUINIT, {\n field: e.field,\n container: e.container\n });\n }, this);\n for (idx = 0, length = cells.length; idx < length; idx++) {\n column = this.columns[idx];\n cell = cells.eq(idx);\n filterMenuInstance = cell.data('kendoFilterMenu');\n if (filterMenuInstance) {\n filterMenuInstance.destroy();\n }\n if (column.command || column.filterable === false) {\n continue;\n }\n cell.kendoFilterMenu(extend(true, {}, filterable, column.filterable, {\n dataSource: this.dataSource,\n init: filterInit\n }));\n }\n },\n _change: function () {\n this.trigger(CHANGE);\n },\n _selectable: function () {\n var selectable = this.options.selectable;\n var filter;\n var element = this.table;\n var useAllItems;\n if (selectable) {\n selectable = kendo.ui.Selectable.parseOptions(selectable);\n if (this._hasLockedColumns) {\n element = element.add(this.lockedTable);\n useAllItems = selectable.multiple && selectable.cell;\n }\n filter = '>tbody>tr:not(.k-footer-template)';\n if (selectable.cell) {\n filter = filter + '>td';\n }\n this.selectable = new kendo.ui.Selectable(element, {\n filter: filter,\n aria: true,\n multiple: selectable.multiple,\n change: proxy(this._change, this),\n useAllItems: useAllItems,\n continuousItems: proxy(this._continuousItems, this, filter, selectable.cell),\n relatedTarget: !selectable.cell && this._hasLockedColumns ? proxy(this._selectableTarget, this) : undefined\n });\n }\n },\n _continuousItems: function (filter, cell) {\n if (!this.lockedContent) {\n return;\n }\n var lockedItems = $(filter, this.lockedTable);\n var nonLockedItems = $(filter, this.table);\n var columns = cell ? this._lockedColumns().length : 1;\n var nonLockedColumns = cell ? this.columns.length - columns : 1;\n var result = [];\n for (var idx = 0; idx < lockedItems.length; idx += columns) {\n push.apply(result, lockedItems.slice(idx, idx + columns));\n push.apply(result, nonLockedItems.splice(0, nonLockedColumns));\n }\n return result;\n },\n _selectableTarget: function (items) {\n var related;\n var result = $();\n for (var idx = 0, length = items.length; idx < length; idx++) {\n related = this._relatedRow(items[idx]);\n if (inArray(related[0], items) < 0) {\n result = result.add(related);\n }\n }\n return result;\n },\n _relatedRow: function (row) {\n var lockedTable = this.lockedTable;\n row = $(row);\n if (!lockedTable) {\n return row;\n }\n var table = row.closest(this.table.add(this.lockedTable));\n var index = table.find('>tbody>tr').index(row);\n table = table[0] === this.table[0] ? lockedTable : this.table;\n return table.find('>tbody>tr').eq(index);\n },\n select: function (value) {\n var selectable = this.selectable;\n if (!selectable) {\n return $();\n }\n if (typeof value !== 'undefined') {\n if (!selectable.options.multiple) {\n selectable.clear();\n value = value.first();\n }\n if (this._hasLockedColumns) {\n value = value.add($.map(value, proxy(this._relatedRow, this)));\n }\n }\n return selectable.value(value);\n },\n clearSelection: function () {\n var selected = this.select();\n if (selected.length) {\n this.selectable.clear();\n this.trigger(CHANGE);\n }\n },\n _dataSource: function (dataSource) {\n var ds = this.dataSource;\n if (ds) {\n ds.unbind(CHANGE, this._refreshHandler);\n ds.unbind(ERROR, this._errorHandler);\n ds.unbind(PROGRESS, this._progressHandler);\n }\n this._refreshHandler = proxy(this.refresh, this);\n this._errorHandler = proxy(this._error, this);\n this._progressHandler = proxy(this._progress, this);\n ds = this.dataSource = TreeListDataSource.create(dataSource);\n ds.bind(CHANGE, this._refreshHandler);\n ds.bind(ERROR, this._errorHandler);\n ds.bind(PROGRESS, this._progressHandler);\n this._dataSourceFetchProxy = proxy(function () {\n this.dataSource.fetch();\n }, this);\n },\n setDataSource: function (dataSource) {\n this._dataSource(dataSource);\n this._sortable();\n this._filterable();\n this._contentTree.render([]);\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n dataItem: function (element) {\n if (element instanceof TreeListModel) {\n return element;\n }\n var row = $(element).closest('tr');\n var model = this.dataSource.getByUid(row.attr(kendo.attr('uid')));\n return model;\n },\n editRow: function (row) {\n var model;\n if (typeof row === STRING) {\n row = this.tbody.find(row);\n }\n model = this.dataItem(row);\n if (!model) {\n return;\n }\n if (this._editMode() != 'popup') {\n model._edit = true;\n }\n this._cancelEditor();\n this._render();\n this._createEditor(model);\n this.trigger(EDIT, {\n container: this.editor.wrapper,\n model: model\n });\n },\n _cancelEdit: function (e) {\n e = extend(e, {\n container: this.editor.wrapper,\n model: this.editor.model\n });\n if (this.trigger(CANCEL, e)) {\n return;\n }\n this.cancelRow();\n },\n cancelRow: function () {\n this._cancelEditor();\n this._render();\n },\n saveRow: function () {\n var editor = this.editor;\n var args;\n if (!editor) {\n return;\n }\n args = {\n model: editor.model,\n container: editor.wrapper\n };\n if (editor.end() && !this.trigger(SAVE, args)) {\n this.dataSource.sync();\n }\n },\n addRow: function (parent) {\n var editor = this.editor;\n var index = 0;\n var model = {};\n if (editor && !editor.end()) {\n return;\n }\n if (parent) {\n if (!(parent instanceof TreeListModel)) {\n parent = this.dataItem(parent);\n }\n model[parent.parentIdField] = parent.id;\n index = this.dataSource.indexOf(parent) + 1;\n this.expand(parent).then(proxy(this._insertAt, this, model, index));\n return;\n }\n this._insertAt(model, index);\n },\n _insertAt: function (model, index) {\n model = this.dataSource.insert(index, model);\n var row = this.itemFor(model);\n this.editRow(row);\n },\n removeRow: function (row) {\n var model = this.dataItem(row);\n var args = {\n model: model,\n row: row\n };\n if (model && !this.trigger(REMOVE, args)) {\n this.dataSource.remove(model);\n this.dataSource.sync();\n }\n },\n _cancelEditor: function () {\n var model;\n var editor = this.editor;\n if (editor) {\n model = editor.model;\n this._destroyEditor();\n this.dataSource.cancelChanges(model);\n model._edit = false;\n }\n },\n _destroyEditor: function () {\n if (!this.editor) {\n return;\n }\n this.editor.close();\n this.editor = null;\n },\n _createEditor: function (model) {\n var row = this.itemFor(model);\n row = row.add(this._relatedRow(row));\n var mode = this._editMode();\n var options = {\n columns: this.columns,\n model: model,\n target: this,\n clearContainer: false,\n template: this.options.editable.template\n };\n if (mode == 'inline') {\n this.editor = new Editor(row, options);\n } else {\n extend(options, {\n window: this.options.editable.window,\n commandRenderer: proxy(function () {\n return this._buildCommands([\n 'update',\n 'canceledit'\n ]);\n }, this),\n fieldRenderer: this._cellContent,\n save: proxy(this.saveRow, this),\n cancel: proxy(this._cancelEdit, this),\n appendTo: this.wrapper\n });\n this.editor = new PopupEditor(row, options);\n }\n },\n _editMode: function () {\n var mode = 'inline', editable = this.options.editable;\n if (editable !== true) {\n if (typeof editable == 'string') {\n mode = editable;\n } else {\n mode = editable.mode || mode;\n }\n }\n return mode.toLowerCase();\n },\n hideColumn: function (column) {\n this._toggleColumnVisibility(column, true);\n },\n showColumn: function (column) {\n this._toggleColumnVisibility(column, false);\n },\n _toggleColumnVisibility: function (column, hidden) {\n column = this._findColumn(column);\n if (!column || column.hidden === hidden) {\n return;\n }\n column.hidden = hidden;\n this._ensureExpandableColumn();\n this._renderCols();\n this._renderHeader();\n this._render();\n this._adjustTablesWidth();\n this.trigger(hidden ? COLUMNHIDE : COLUMNSHOW, { column: column });\n if (!hidden && !column.width) {\n this.table.add(this.thead.closest('table')).width('');\n }\n },\n _findColumn: function (column) {\n if (typeof column == 'number') {\n column = this.columns[column];\n } else if (isPlainObject(column)) {\n column = grep(this.columns, function (item) {\n return item === column;\n })[0];\n } else {\n column = grep(this.columns, function (item) {\n return item.field === column;\n })[0];\n }\n return column;\n },\n _adjustTablesWidth: function () {\n var idx, length;\n var cols = this.thead.prev().children();\n var colWidth, width = 0;\n for (idx = 0, length = cols.length; idx < length; idx++) {\n colWidth = cols[idx].style.width;\n if (colWidth && colWidth.indexOf('%') == -1) {\n width += parseInt(colWidth, 10);\n } else {\n width = 0;\n break;\n }\n }\n if (width) {\n this.table.add(this.thead.closest('table')).width(width);\n }\n },\n _reorderable: function () {\n if (!this.options.reorderable) {\n return;\n }\n var scrollable = this.options.scrollable === true;\n var selector = (scrollable ? '.k-grid-header:first ' : 'table:first>.k-grid-header ') + HEADERCELLS;\n var that = this;\n this._draggableInstance = new ui.Draggable(this.wrapper, {\n group: kendo.guid(),\n filter: selector,\n hint: function (target) {\n return $('<div class=\"k-header k-drag-clue\" />').css({\n width: target.width(),\n paddingLeft: target.css('paddingLeft'),\n paddingRight: target.css('paddingRight'),\n lineHeight: target.height() + 'px',\n paddingTop: target.css('paddingTop'),\n paddingBottom: target.css('paddingBottom')\n }).html(target.attr(kendo.attr('title')) || target.attr(kendo.attr('field')) || target.text()).prepend('<span class=\"k-icon k-drag-status k-i-cancel\" />');\n }\n });\n this.reorderable = new ui.Reorderable(this.wrapper, {\n draggable: this._draggableInstance,\n dragOverContainers: proxy(this._allowDragOverContainers, this),\n inSameContainer: function (e) {\n return $(e.source).parent()[0] === $(e.target).parent()[0];\n },\n change: function (e) {\n var newIndex = e.newIndex;\n var oldIndex = e.oldIndex;\n var before = e.position === 'before';\n var column = that.columns[oldIndex];\n that.trigger(COLUMNREORDER, {\n newIndex: newIndex,\n oldIndex: oldIndex,\n column: column\n });\n that.reorderColumn(newIndex, column, before);\n }\n });\n },\n _allowDragOverContainers: function (index) {\n return this.columns[index].lockable !== false;\n },\n reorderColumn: function (destIndex, column, before) {\n var lockChanged;\n var columns = this.columns;\n var sourceIndex = inArray(column, columns);\n var destColumn = columns[destIndex];\n var isLocked = !!destColumn.locked;\n var nonLockedColumnsLength = this._nonLockedColumns().length;\n if (sourceIndex === destIndex) {\n return;\n }\n if (isLocked && !column.locked && nonLockedColumnsLength == 1) {\n return;\n }\n if (!isLocked && column.locked && columns.length - nonLockedColumnsLength == 1) {\n return;\n }\n if (before === undefined) {\n before = destIndex < sourceIndex;\n }\n lockChanged = !!column.locked;\n lockChanged = lockChanged != isLocked;\n column.locked = isLocked;\n columns.splice(before ? destIndex : destIndex + 1, 0, column);\n columns.splice(sourceIndex < destIndex ? sourceIndex : sourceIndex + 1, 1);\n this._renderCols();\n var ths = $(this.lockedHeader).add(this.thead).find('th');\n ths.eq(sourceIndex)[before ? 'insertBefore' : 'insertAfter'](ths.eq(destIndex));\n var dom = this._headerTree.children[0].children;\n if (this._hasLockedColumns) {\n dom = this._lockedHeaderTree.children[0].children.concat(dom);\n }\n dom.splice(before ? destIndex : destIndex + 1, 0, dom[sourceIndex]);\n dom.splice(sourceIndex < destIndex ? sourceIndex : sourceIndex + 1, 1);\n if (this._hasLockedColumns) {\n this._lockedHeaderTree.children[0].children = dom.splice(0, this._lockedColumns().length);\n this._headerTree.children[0].children = dom;\n }\n this._applyLockedContainersWidth();\n this.refresh();\n if (!lockChanged) {\n return;\n }\n if (isLocked) {\n this.trigger(COLUMNLOCK, { column: column });\n } else {\n this.trigger(COLUMNUNLOCK, { column: column });\n }\n },\n lockColumn: function (column) {\n var columns = this.columns;\n if (typeof column == 'number') {\n column = columns[column];\n } else {\n column = grep(columns, function (item) {\n return item.field === column;\n })[0];\n }\n if (!column || column.hidden) {\n return;\n }\n var index = this._lockedColumns().length - 1;\n this.reorderColumn(index, column, false);\n },\n unlockColumn: function (column) {\n var columns = this.columns;\n if (typeof column == 'number') {\n column = columns[column];\n } else {\n column = grep(columns, function (item) {\n return item.field === column;\n })[0];\n }\n if (!column || column.hidden) {\n return;\n }\n var index = this._lockedColumns().length;\n this.reorderColumn(index, column, true);\n },\n _columnMenu: function () {\n var ths = $(this.lockedHeader).add(this.thead).find('th');\n var columns = this.columns;\n var options = this.options;\n var columnMenu = options.columnMenu;\n var column, menu, menuOptions, sortable, filterable;\n var initHandler = proxy(this._columnMenuInit, this);\n var lockedColumnsLength = this._lockedColumns().length;\n if (!columnMenu) {\n return;\n }\n if (typeof columnMenu == 'boolean') {\n columnMenu = {};\n }\n for (var i = 0; i < ths.length; i++) {\n column = columns[i];\n if (!column.field) {\n continue;\n }\n menu = ths.eq(i).data('kendoColumnMenu');\n if (menu) {\n menu.destroy();\n }\n sortable = false;\n if (column.sortable !== false && columnMenu.sortable !== false && options.sortable !== false) {\n sortable = extend({}, options.sortable, { compare: (column.sortable || {}).compare });\n }\n filterable = false;\n if (options.filterable && column.filterable !== false && columnMenu.filterable !== false) {\n filterable = extend({ pane: this.pane }, column.filterable, options.filterable);\n }\n menuOptions = {\n dataSource: this.dataSource,\n values: column.values,\n columns: columnMenu.columns,\n sortable: sortable,\n filterable: filterable,\n messages: columnMenu.messages,\n owner: this,\n closeCallback: $.noop,\n init: initHandler,\n pane: this.pane,\n lockedColumns: column.lockable !== false && lockedColumnsLength > 0\n };\n if (options.$angular) {\n menuOptions.$angular = options.$angular;\n }\n ths.eq(i).kendoColumnMenu(menuOptions);\n }\n },\n _columnMenuInit: function (e) {\n this.trigger(COLUMNMENUINIT, {\n field: e.field,\n container: e.container\n });\n }\n });\n if (kendo.ExcelMixin) {\n kendo.ExcelMixin.extend(TreeList.prototype);\n }\n if (kendo.PDFMixin) {\n kendo.PDFMixin.extend(TreeList.prototype);\n TreeList.fn._drawPDF = function (progress) {\n var promise = new $.Deferred();\n this._drawPDFShadow({ width: this.wrapper.width() }, { avoidLinks: this.options.pdf.avoidLinks }).done(function (group) {\n var args = {\n page: group,\n pageNumber: 1,\n progress: 1,\n totalPages: 1\n };\n progress.notify(args);\n promise.resolve(args.page);\n }).fail(function (err) {\n promise.reject(err);\n });\n return promise;\n };\n }\n extend(true, kendo.data, {\n TreeListDataSource: TreeListDataSource,\n TreeListModel: TreeListModel\n });\n extend(true, kendo.ui, { TreeList: TreeList });\n ui.plugin(TreeList);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('util/main', ['kendo.core'], f);\n}(function () {\n (function () {\n var kendo = window.kendo, deepExtend = kendo.deepExtend;\n function sqr(value) {\n return value * value;\n }\n var now = Date.now;\n if (!now) {\n now = function () {\n return new Date().getTime();\n };\n }\n function renderSize(size) {\n if (typeof size !== 'string') {\n size += 'px';\n }\n return size;\n }\n function renderPos(pos) {\n var result = [];\n if (pos) {\n var parts = kendo.toHyphens(pos).split('-');\n for (var i = 0; i < parts.length; i++) {\n result.push('k-pos-' + parts[i]);\n }\n }\n return result.join(' ');\n }\n function arabicToRoman(n) {\n var literals = {\n 1: 'i',\n 10: 'x',\n 100: 'c',\n 2: 'ii',\n 20: 'xx',\n 200: 'cc',\n 3: 'iii',\n 30: 'xxx',\n 300: 'ccc',\n 4: 'iv',\n 40: 'xl',\n 400: 'cd',\n 5: 'v',\n 50: 'l',\n 500: 'd',\n 6: 'vi',\n 60: 'lx',\n 600: 'dc',\n 7: 'vii',\n 70: 'lxx',\n 700: 'dcc',\n 8: 'viii',\n 80: 'lxxx',\n 800: 'dccc',\n 9: 'ix',\n 90: 'xc',\n 900: 'cm',\n 1000: 'm'\n };\n var values = [\n 1000,\n 900,\n 800,\n 700,\n 600,\n 500,\n 400,\n 300,\n 200,\n 100,\n 90,\n 80,\n 70,\n 60,\n 50,\n 40,\n 30,\n 20,\n 10,\n 9,\n 8,\n 7,\n 6,\n 5,\n 4,\n 3,\n 2,\n 1\n ];\n var roman = '';\n while (n > 0) {\n if (n < values[0]) {\n values.shift();\n } else {\n roman += literals[values[0]];\n n -= values[0];\n }\n }\n return roman;\n }\n function romanToArabic(r) {\n r = r.toLowerCase();\n var digits = {\n i: 1,\n v: 5,\n x: 10,\n l: 50,\n c: 100,\n d: 500,\n m: 1000\n };\n var value = 0, prev = 0;\n for (var i = 0; i < r.length; ++i) {\n var v = digits[r.charAt(i)];\n if (!v) {\n return null;\n }\n value += v;\n if (v > prev) {\n value -= 2 * prev;\n }\n prev = v;\n }\n return value;\n }\n function memoize(f) {\n var cache = Object.create(null);\n return function () {\n var id = '';\n for (var i = arguments.length; --i >= 0;) {\n id += ':' + arguments[i];\n }\n return id in cache ? cache[id] : cache[id] = f.apply(this, arguments);\n };\n }\n function isUnicodeLetter(ch) {\n return RX_UNICODE_LETTER.test(ch);\n }\n deepExtend(kendo, {\n util: {\n now: now,\n renderPos: renderPos,\n renderSize: renderSize,\n sqr: sqr,\n romanToArabic: romanToArabic,\n arabicToRoman: arabicToRoman,\n memoize: memoize,\n isUnicodeLetter: isUnicodeLetter\n }\n });\n var RX_UNICODE_LETTER = new RegExp('[\\\\u0041-\\\\u005A\\\\u0061-\\\\u007A\\\\u00AA\\\\u00B5\\\\u00BA\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B2\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]');\n }());\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('util/parse-xml', [\n 'kendo.core',\n 'util/main'\n ], f);\n}(function () {\n 'use strict';\n var STRING = String.fromCharCode;\n var ENTITIES = {\n 'amp': 38,\n 'lt': 60,\n 'gt': 62,\n 'quot': 34,\n 'apos': 39,\n 'nbsp': 160\n };\n function CODE(str) {\n var out = [];\n for (var i = 0; i < str.length; ++i) {\n out.push(str.charCodeAt(i));\n }\n return out;\n }\n function UCS2(out, code) {\n if (code > 65535) {\n code -= 65536;\n out.push(code >>> 10 & 1023 | 55296, 56320 | code & 1023);\n } else {\n out.push(code);\n }\n }\n var START_CDATA = CODE('<![CDATA[');\n var END_CDATA = CODE(']]>');\n var END_COMMENT = CODE('-->');\n var START_COMMENT = CODE('!--');\n var END_SHORT_TAG = CODE('/>');\n var END_TAG = CODE('</');\n var END_DECLARATION = CODE('?>');\n var QUESTION_MARK = CODE('?');\n var LESS_THAN = CODE('<');\n var GREATER_THAN = CODE('>');\n var SEMICOLON = CODE(';');\n var EQUAL = CODE('=');\n var AMPERSAND = CODE('&');\n var QUOTE = CODE('\"');\n var APOSTROPHE = CODE('\\'');\n var SHARP = CODE('#');\n var LOWERCASE_X = CODE('x');\n var UPPERCASE_X = CODE('X');\n var EXIT = {};\n function parse(data, callbacks) {\n var index = 0;\n var stack = [];\n var object = {\n is: function (selector) {\n var i = stack.length, j = selector.length;\n while (--i >= 0 && --j >= 0) {\n if (stack[i].$tag != selector[j] && selector[j] != '*') {\n return false;\n }\n }\n return j < 0 ? stack[stack.length - 1] : null;\n },\n exit: function () {\n throw EXIT;\n },\n stack: stack\n };\n function readChar(body) {\n var code = data[index++];\n if (!(code & 240 ^ 240)) {\n UCS2(body, (code & 3) << 18 | (data[index++] & 63) << 12 | (data[index++] & 63) << 6 | data[index++] & 63);\n } else if (!(code & 224 ^ 224)) {\n UCS2(body, (code & 15) << 12 | (data[index++] & 63) << 6 | data[index++] & 63);\n } else if (!(code & 192 ^ 192)) {\n UCS2(body, (code & 31) << 6 | data[index++] & 63);\n } else {\n body.push(code);\n }\n }\n function croak(msg) {\n throw new Error(msg + ', at ' + index);\n }\n function readWhile(pred) {\n var a = [];\n while (index < data.length && pred(data[index])) {\n a.push(data[index++]);\n }\n return a;\n }\n function readAsciiWhile(pred) {\n return STRING.apply(0, readWhile(pred));\n }\n function skipWhitespace() {\n readWhile(isWhitespace);\n }\n function eat(a) {\n var save = index;\n for (var i = 0; i < a.length; ++i) {\n if (data[index++] != a[i]) {\n index = save;\n return false;\n }\n }\n return a;\n }\n function skip(code) {\n if (!eat(code)) {\n croak('Expecting ' + code.join(', '));\n }\n }\n function isWhitespace(code) {\n return code == 9 || code == 10 || code == 13 || code == 32;\n }\n function isDigit(code) {\n return code >= 48 && code <= 57;\n }\n function isHexDigit(code) {\n return code >= 48 && code <= 57 || (code |= 32) >= 97 && code <= 102;\n }\n function isNameStart(code) {\n return code == 58 || code == 95 || (code |= 32) >= 97 && code <= 122;\n }\n function isName(code) {\n return code == 45 || isDigit(code) || isNameStart(code);\n }\n function xmlComment() {\n var body = [];\n while (index < data.length) {\n if (eat(END_COMMENT)) {\n return call('comment', STRING.apply(0, body));\n }\n readChar(body);\n }\n }\n function xmlTag() {\n var name, attrs;\n if (eat(QUESTION_MARK)) {\n xmlDecl();\n } else if (eat(START_COMMENT)) {\n xmlComment();\n } else {\n name = xmlName();\n attrs = xmlAttrs(name);\n stack.push(attrs);\n if (eat(END_SHORT_TAG)) {\n call('enter', name, attrs, true);\n } else {\n skip(GREATER_THAN);\n call('enter', name, attrs);\n xmlContent(name);\n if (name != xmlName()) {\n croak('Bad closing tag');\n }\n call('leave', name, attrs);\n skipWhitespace();\n skip(GREATER_THAN);\n }\n stack.pop();\n }\n }\n function xmlContent(name) {\n var body = [];\n while (index < data.length) {\n if (eat(END_TAG)) {\n return body.length && call('text', STRING.apply(0, body));\n } else if (eat(START_CDATA)) {\n while (index < data.length && !eat(END_CDATA)) {\n readChar(body);\n }\n } else if (eat(LESS_THAN)) {\n if (body.length) {\n call('text', STRING.apply(0, body));\n }\n xmlTag();\n body = [];\n } else if (eat(AMPERSAND)) {\n xmlEntity(body);\n } else {\n readChar(body);\n }\n }\n croak('Unclosed tag ' + name);\n }\n function xmlName() {\n if (!isNameStart(data[index])) {\n croak('Expecting XML name');\n }\n return readAsciiWhile(isName);\n }\n function xmlString() {\n var quote = eat(QUOTE) || eat(APOSTROPHE);\n if (!quote) {\n croak('Expecting string');\n }\n var body = [];\n while (index < data.length) {\n if (eat(quote)) {\n return STRING.apply(0, body);\n } else if (eat(AMPERSAND)) {\n xmlEntity(body);\n } else {\n readChar(body);\n }\n }\n croak('Unfinished string');\n }\n function xmlEntity(body) {\n var code;\n if (eat(SHARP)) {\n if (eat(LOWERCASE_X) || eat(UPPERCASE_X)) {\n code = parseInt(readAsciiWhile(isHexDigit), 16);\n } else {\n code = parseInt(readAsciiWhile(isDigit), 10);\n }\n if (isNaN(code)) {\n croak('Bad numeric entity');\n }\n } else {\n var name = xmlName();\n code = ENTITIES[name];\n if (code === undefined) {\n croak('Unknown entity ' + name);\n }\n }\n UCS2(body, code);\n skip(SEMICOLON);\n }\n function xmlDecl() {\n call('decl', xmlName(), xmlAttrs());\n skip(END_DECLARATION);\n }\n function xmlAttrs(name) {\n var map = { $tag: name };\n while (index < data.length) {\n skipWhitespace();\n var code = data[index];\n if (code == 63 || code == 62 || code == 47) {\n break;\n }\n map[xmlName()] = (skip(EQUAL), xmlString());\n }\n return map;\n }\n function call(what, thing, arg1, arg2) {\n var f = callbacks && callbacks[what];\n if (f) {\n f.call(object, thing, arg1, arg2);\n }\n }\n var tmp = [];\n readChar(tmp);\n if (tmp[0] != 65279) {\n index = 0;\n }\n while (index < data.length) {\n skipWhitespace();\n skip(LESS_THAN);\n xmlTag();\n skipWhitespace();\n }\n }\n kendo.util.parseXML = function parseXML() {\n try {\n return parse.apply(this, arguments);\n } catch (ex) {\n if (ex !== EXIT) {\n throw ex;\n }\n }\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/commands', [\n 'kendo.core',\n 'kendo.binder',\n 'kendo.window',\n 'kendo.list',\n 'kendo.tabstrip'\n ], f);\n}(function () {\n (function (kendo) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var $ = kendo.jQuery;\n var Command = kendo.spreadsheet.Command = kendo.Class.extend({\n init: function (options) {\n this.options = options;\n this._workbook = options.workbook;\n this._property = options && options.property;\n this._state = {};\n },\n range: function (range) {\n if (range !== undefined) {\n this._setRange(range);\n }\n return this._range;\n },\n _setRange: function (range) {\n this._range = range;\n },\n redo: function () {\n this.exec();\n },\n undo: function () {\n this.setState(this._state);\n },\n getState: function () {\n this._state = this.range().getState(this._property);\n },\n setState: function (state) {\n this.range().setState(state);\n },\n _forEachCell: function (callback) {\n var range = this.range();\n var ref = range._ref;\n ref.forEach(function (ref) {\n range.sheet().forEach(ref.toRangeRef(), callback.bind(this));\n }.bind(this));\n }\n });\n var TargetValueCommand = Command.extend({\n init: function (options) {\n Command.fn.init.call(this, options);\n this._target = options.target;\n this._value = options.value;\n },\n exec: function () {\n this.getState();\n this.setState(this._value);\n }\n });\n kendo.spreadsheet.ColumnWidthCommand = TargetValueCommand.extend({\n getState: function () {\n this._state = this.range().sheet().columnWidth(this._target);\n },\n setState: function (state) {\n this.range().sheet().columnWidth(this._target, state);\n }\n });\n kendo.spreadsheet.RowHeightCommand = TargetValueCommand.extend({\n getState: function () {\n this._state = this.range().sheet().rowHeight(this._target);\n },\n setState: function (state) {\n this.range().sheet().rowHeight(this._target, state);\n }\n });\n kendo.spreadsheet.HyperlinkCommand = Command.extend({\n init: function (options) {\n Command.fn.init.call(this, options);\n this._link = options.link;\n },\n exec: function () {\n var range = this.range();\n this._prevLink = range.link();\n this._prevUnderline = range.underline();\n range.link(this._link);\n range.underline(true);\n if (range.value() == null) {\n this._hasSetValue = true;\n range.value(this._link);\n }\n },\n undo: function () {\n var range = this.range();\n range.link(this._prevLink);\n range.underline(this._prevUnderline);\n if (this._hasSetValue) {\n range.value(null);\n }\n }\n });\n kendo.spreadsheet.GridLinesChangeCommand = TargetValueCommand.extend({\n getState: function () {\n this._state = this._range.sheet().showGridLines();\n },\n setState: function (v) {\n this._range.sheet().showGridLines(v);\n }\n });\n var PropertyChangeCommand = kendo.spreadsheet.PropertyChangeCommand = Command.extend({\n _setRange: function (range) {\n Command.prototype._setRange.call(this, range.skipHiddenCells());\n },\n init: function (options) {\n Command.fn.init.call(this, options);\n this._value = options.value;\n },\n exec: function () {\n var range = this.range();\n if (range.enable()) {\n this.getState();\n if (this.options.property === 'format') {\n this._workbook.trigger('changeFormat', { range: range });\n }\n range[this._property](this._value);\n }\n }\n });\n kendo.spreadsheet.ClearContentCommand = Command.extend({\n exec: function () {\n this.getState();\n this.range().clearContent();\n }\n });\n kendo.spreadsheet.EditCommand = PropertyChangeCommand.extend({\n init: function (options) {\n options.property = options.property || 'input';\n PropertyChangeCommand.fn.init.call(this, options);\n },\n rejectState: function (validationState) {\n this.undo();\n return {\n title: validationState.title,\n body: validationState.message,\n reason: 'error',\n type: 'validationError'\n };\n },\n getState: function () {\n this._state = this.range().getState();\n },\n exec: function () {\n var range = this.range();\n if (!range.enable()) {\n return {\n reason: 'error',\n type: 'rangeDisabled'\n };\n }\n var value = this._value;\n this.getState();\n if (this._property == 'value') {\n range.value(value);\n return;\n }\n try {\n range.link(null);\n if (value === '') {\n range.value(null);\n } else {\n range.input(value);\n if (/\\n/.test(range.value())) {\n range.wrap(true);\n }\n }\n range._adjustRowHeight();\n var validationState = range._getValidationState();\n if (validationState) {\n return this.rejectState(validationState);\n }\n } catch (ex) {\n if (ex instanceof kendo.spreadsheet.calc.ParseError) {\n return {\n title: 'Error in formula',\n body: ex + '',\n reason: 'error'\n };\n } else {\n throw ex;\n }\n }\n }\n });\n kendo.spreadsheet.TextWrapCommand = PropertyChangeCommand.extend({\n init: function (options) {\n options.property = 'wrap';\n PropertyChangeCommand.fn.init.call(this, options);\n this._value = options.value;\n },\n getState: function () {\n var rowHeight = {};\n this.range().forEachRow(function (range) {\n var index = range.topLeft().row;\n rowHeight[index] = range.sheet().rowHeight(index);\n });\n this._state = this.range().getState(this._property);\n this._rowHeight = rowHeight;\n },\n undo: function () {\n var sheet = this.range().sheet();\n var rowHeight = this._rowHeight;\n this.range().setState(this._state);\n for (var row in rowHeight) {\n sheet.rowHeight(row, rowHeight[row]);\n }\n }\n });\n kendo.spreadsheet.AdjustDecimalsCommand = Command.extend({\n init: function (options) {\n this._decimals = options.value;\n options.property = 'format';\n Command.fn.init.call(this, options);\n },\n exec: function () {\n var sheet = this.range().sheet();\n var decimals = this._decimals;\n var formatting = kendo.spreadsheet.formatting;\n this.getState();\n sheet.batch(function () {\n this.range().forEachCell(function (row, col, cell) {\n var format = cell.format;\n if (format || decimals > 0) {\n format = formatting.adjustDecimals(format || '#', decimals);\n sheet.range(row, col).format(format);\n }\n });\n }.bind(this));\n }\n });\n kendo.spreadsheet.BorderChangeCommand = Command.extend({\n init: function (options) {\n options.property = 'border';\n Command.fn.init.call(this, options);\n this._type = options.border;\n this._style = options.style;\n },\n exec: function () {\n this.getState();\n this[this._type](this._style);\n },\n noBorders: function () {\n var range = this.range();\n range.sheet().batch(function () {\n range.borderLeft(null).borderTop(null).borderRight(null).borderBottom(null);\n }.bind(this), {});\n },\n allBorders: function (style) {\n var range = this.range();\n range.sheet().batch(function () {\n range.borderLeft(style).borderTop(style).borderRight(style).borderBottom(style);\n }.bind(this), {});\n },\n leftBorder: function (style) {\n this.range().leftColumn().borderLeft(style);\n },\n rightBorder: function (style) {\n this.range().rightColumn().borderRight(style);\n },\n topBorder: function (style) {\n this.range().topRow().borderTop(style);\n },\n bottomBorder: function (style) {\n this.range().bottomRow().borderBottom(style);\n },\n outsideBorders: function (style) {\n var range = this.range();\n range.sheet().batch(function () {\n range.leftColumn().borderLeft(style);\n range.topRow().borderTop(style);\n range.rightColumn().borderRight(style);\n range.bottomRow().borderBottom(style);\n }.bind(this), {});\n },\n insideBorders: function (style) {\n this.range().sheet().batch(function () {\n this.allBorders(style);\n this.outsideBorders(null);\n }.bind(this), {});\n },\n insideHorizontalBorders: function (style) {\n var range = this.range();\n range.sheet().batch(function () {\n range.borderBottom(style);\n range.bottomRow().borderBottom(null);\n }.bind(this), {});\n },\n insideVerticalBorders: function (style) {\n var range = this.range();\n range.sheet().batch(function () {\n range.borderRight(style);\n range.rightColumn().borderRight(null);\n }.bind(this), {});\n }\n });\n kendo.spreadsheet.MergeCellCommand = Command.extend({\n init: function (options) {\n Command.fn.init.call(this, options);\n this._type = options.value;\n },\n exec: function () {\n this.getState();\n this[this._type]();\n },\n activate: function (ref) {\n this.range().sheet().activeCell(ref);\n },\n getState: function () {\n this._state = this.range().getState();\n },\n undo: function () {\n if (this._type !== 'unmerge') {\n this.range().unmerge();\n this.activate(this.range().topLeft());\n }\n this.range().setState(this._state);\n },\n cells: function () {\n var range = this.range();\n var ref = range._ref;\n range.merge();\n this.activate(ref);\n },\n horizontally: function () {\n var ref = this.range().topRow()._ref;\n this.range().forEachRow(function (range) {\n range.merge();\n });\n this.activate(ref);\n },\n vertically: function () {\n var ref = this.range().leftColumn()._ref;\n this.range().forEachColumn(function (range) {\n range.merge();\n });\n this.activate(ref);\n },\n unmerge: function () {\n var range = this.range();\n var ref = range._ref.topLeft;\n range.unmerge();\n this.activate(ref);\n }\n });\n kendo.spreadsheet.FreezePanesCommand = Command.extend({\n init: function (options) {\n Command.fn.init.call(this, options);\n this._type = options.value;\n },\n exec: function () {\n this.getState();\n this._topLeft = this.range().topLeft();\n this[this._type]();\n },\n getState: function () {\n this._state = this.range().sheet().getState();\n },\n undo: function () {\n this.range().sheet().setState(this._state);\n },\n panes: function () {\n var topLeft = this._topLeft;\n var sheet = this.range().sheet();\n sheet.frozenColumns(topLeft.col).frozenRows(topLeft.row);\n },\n rows: function () {\n var topLeft = this._topLeft;\n var sheet = this.range().sheet();\n sheet.frozenRows(topLeft.row);\n },\n columns: function () {\n var topLeft = this._topLeft;\n var sheet = this.range().sheet();\n sheet.frozenColumns(topLeft.col);\n },\n unfreeze: function () {\n var sheet = this.range().sheet();\n sheet.frozenRows(0).frozenColumns(0);\n }\n });\n kendo.spreadsheet.PasteCommand = Command.extend({\n init: function (options) {\n Command.fn.init.call(this, options);\n this._clipboard = options.workbook.clipboard();\n this._event = options.event;\n },\n getState: function () {\n this._range = this._workbook.activeSheet().range(this._clipboard.pasteRef());\n this._state = this._range.getState();\n },\n exec: function () {\n this.getState();\n this._clipboard.parse();\n var status = this._clipboard.canPaste();\n if (!status.canPaste) {\n if (status.menuInvoked) {\n return {\n reason: 'error',\n type: 'useKeyboard'\n };\n }\n if (status.pasteOnMerged) {\n return {\n reason: 'error',\n type: 'modifyMerged'\n };\n }\n if (status.overflow) {\n return {\n reason: 'error',\n type: 'overflow'\n };\n }\n if (status.pasteOnDisabled) {\n this._event.preventDefault();\n return {\n reason: 'error',\n type: 'cannotModifyDisabled'\n };\n }\n return { reason: 'error' };\n }\n var range = this._workbook.activeSheet().selection();\n var preventDefault = this._workbook.trigger('paste', { range: range });\n if (preventDefault) {\n this._event.preventDefault();\n } else {\n this._clipboard.paste();\n range._adjustRowHeight();\n }\n }\n });\n kendo.spreadsheet.AdjustRowHeightCommand = Command.extend({\n exec: function () {\n var options = this.options;\n var sheet = this._workbook.activeSheet();\n var range = options.range || sheet.range(options.rowIndex);\n range._adjustRowHeight();\n }\n });\n kendo.spreadsheet.ToolbarPasteCommand = Command.extend({\n exec: function () {\n if (kendo.support.clipboard.paste) {\n this._workbook._view.clipboard.focus().select();\n document.execCommand('paste');\n } else {\n return {\n reason: 'error',\n type: 'useKeyboard'\n };\n }\n }\n });\n kendo.spreadsheet.CopyCommand = Command.extend({\n init: function (options) {\n Command.fn.init.call(this, options);\n this._clipboard = options.workbook.clipboard();\n this._event = options.event;\n },\n undo: $.noop,\n exec: function () {\n var status = this._clipboard.canCopy();\n this._clipboard.menuInvoked = true;\n if (!status.canCopy) {\n if (status.menuInvoked) {\n return {\n reason: 'error',\n type: 'useKeyboard'\n };\n } else if (status.multiSelection) {\n return {\n reason: 'error',\n type: 'unsupportedSelection'\n };\n }\n return;\n }\n var range = this._workbook.activeSheet().selection();\n var preventDefault = this._workbook.trigger('copy', { range: range });\n if (preventDefault) {\n this._event.preventDefault();\n } else {\n this._clipboard.copy();\n }\n }\n });\n function copyToClipboard(html) {\n var textarea = document.createElement('textarea');\n $(textarea).addClass('k-spreadsheet-clipboard').val(html).appendTo(document.body).focus().select();\n document.execCommand('copy');\n $(textarea).remove();\n }\n kendo.spreadsheet.ToolbarCopyCommand = Command.extend({\n init: function (options) {\n Command.fn.init.call(this, options);\n this._clipboard = options.workbook.clipboard();\n },\n undo: $.noop,\n exec: function () {\n if (kendo.support.clipboard.copy) {\n var clipboard = this._workbook._view.clipboard;\n copyToClipboard(clipboard.html());\n clipboard.trigger('copy');\n } else {\n return {\n reason: 'error',\n type: 'useKeyboard'\n };\n }\n }\n });\n kendo.spreadsheet.CutCommand = Command.extend({\n init: function (options) {\n Command.fn.init.call(this, options);\n this._clipboard = options.workbook.clipboard();\n this._event = options.event;\n },\n exec: function () {\n if (!(this.range().enable() && this._clipboard.canCopy())) {\n this._event.preventDefault();\n return {\n reason: 'error',\n type: 'cannotModifyDisabled'\n };\n }\n this.getState();\n var range = this._workbook.activeSheet().selection();\n var preventDefault = this._workbook.trigger('cut', { range: range });\n if (preventDefault) {\n this._event.preventDefault();\n return;\n }\n this._clipboard.cut();\n }\n });\n kendo.spreadsheet.AutoFillCommand = Command.extend({\n init: function (options) {\n Command.fn.init.call(this, options);\n },\n origin: function (origin) {\n this._origin = origin;\n },\n exec: function () {\n var range = this.range();\n if (!range.enable()) {\n return {\n reason: 'error',\n type: 'rangeDisabled'\n };\n }\n this.getState();\n try {\n range.fillFrom(this._origin);\n } catch (ex) {\n if (ex instanceof kendo.spreadsheet.Range.FillError) {\n return {\n reason: 'error',\n type: ex.code\n };\n }\n throw ex;\n }\n }\n });\n kendo.spreadsheet.ToolbarCutCommand = Command.extend({\n init: function (options) {\n Command.fn.init.call(this, options);\n this._clipboard = options.workbook.clipboard();\n },\n exec: function () {\n if (kendo.support.clipboard.copy) {\n var clipboard = this._workbook._view.clipboard;\n copyToClipboard(clipboard.html());\n clipboard.trigger('cut');\n } else {\n return {\n reason: 'error',\n type: 'useKeyboard'\n };\n }\n }\n });\n kendo.spreadsheet.FilterCommand = Command.extend({\n undo: function () {\n this.range().filter(this._state);\n },\n exec: function () {\n var range = this.range();\n this._state = range.hasFilter();\n range.filter(!this._state);\n }\n });\n kendo.spreadsheet.SortCommand = Command.extend({\n undo: function () {\n var sheet = this.range().sheet();\n sheet.setState(this._state);\n },\n exec: function () {\n var range = this.range();\n var sheet = range.sheet();\n var activeCell = sheet.activeCell();\n var col = this.options.sheet ? activeCell.topLeft.col : this.options.column || 0;\n var ascending = this.options.value === 'asc' ? true : false;\n this._state = sheet.getState();\n if (this.options.sheet) {\n range = this.expandRange();\n }\n var reason = range.cantSort();\n if (reason) {\n return {\n reason: 'error',\n type: reason.code\n };\n }\n range.sort({\n column: col,\n ascending: ascending\n });\n },\n expandRange: function () {\n var sheet = this.range().sheet();\n return new kendo.spreadsheet.Range(sheet._sheetRef, sheet);\n }\n });\n var ApplyFilterCommand = kendo.spreadsheet.ApplyFilterCommand = Command.extend({\n column: function () {\n return this.options.column || 0;\n },\n undo: function () {\n var sheet = this.range().sheet();\n sheet.clearFilter(this.column());\n if (this._state.length) {\n this.range().filter(this._state);\n }\n },\n getState: function () {\n var sheet = this.range().sheet();\n var current = sheet.filter();\n if (current) {\n this._state = current.columns.filter(function (c) {\n return c.index == this.column();\n }.bind(this));\n }\n },\n exec: function () {\n var range = this.range();\n var column = this.column();\n var current = range.sheet().filter();\n var options;\n var filterRule;\n var exists = false;\n if (this.options.valueFilter) {\n filterRule = {\n column: column,\n filter: new kendo.spreadsheet.ValueFilter(this.options.valueFilter)\n };\n } else if (this.options.customFilter) {\n filterRule = {\n column: column,\n filter: new kendo.spreadsheet.CustomFilter(this.options.customFilter)\n };\n }\n this.getState();\n if (current && current.ref.eq(range._ref) && current.columns.length) {\n current.columns.forEach(function (element) {\n if (element.index === column) {\n exists = true;\n }\n });\n options = current.columns.map(function (element) {\n return element.index === column ? filterRule : {\n column: element.index,\n filter: element.filter\n };\n });\n if (!exists) {\n options.push(filterRule);\n }\n } else {\n options = filterRule;\n }\n range.filter(options);\n }\n });\n kendo.spreadsheet.ClearFilterCommand = ApplyFilterCommand.extend({\n exec: function () {\n var range = this.range();\n var column = this.column();\n this.getState();\n range.clearFilter(column);\n }\n });\n kendo.spreadsheet.HideLineCommand = Command.extend({\n init: function (options) {\n Command.fn.init.call(this, options);\n this.axis = options.axis;\n },\n undo: function () {\n var sheet = this.range().sheet();\n sheet.setAxisState(this._state);\n },\n exec: function () {\n var sheet = this.range().sheet();\n this._state = sheet.getAxisState();\n if (this.axis == 'row') {\n sheet.axisManager().hideSelectedRows();\n } else {\n sheet.axisManager().hideSelectedColumns();\n }\n }\n });\n kendo.spreadsheet.UnHideLineCommand = kendo.spreadsheet.HideLineCommand.extend({\n exec: function () {\n var sheet = this.range().sheet();\n this._state = sheet.getAxisState();\n if (this.axis == 'row') {\n sheet.axisManager().unhideSelectedRows();\n } else {\n sheet.axisManager().unhideSelectedColumns();\n }\n }\n });\n var DeleteCommand = kendo.spreadsheet.DeleteCommand = Command.extend({\n undo: function () {\n var sheet = this.range().sheet();\n sheet.setState(this._state);\n }\n });\n kendo.spreadsheet.DeleteRowCommand = DeleteCommand.extend({\n exec: function () {\n var sheet = this.range().sheet();\n this._state = sheet.getState();\n sheet.axisManager().deleteSelectedRows();\n }\n });\n kendo.spreadsheet.DeleteColumnCommand = DeleteCommand.extend({\n exec: function () {\n var sheet = this.range().sheet();\n this._state = sheet.getState();\n sheet.axisManager().deleteSelectedColumns();\n }\n });\n var AddCommand = Command.extend({\n init: function (options) {\n Command.fn.init.call(this, options);\n this._value = options.value;\n },\n undo: function () {\n var sheet = this.range().sheet();\n sheet.setState(this._state);\n }\n });\n kendo.spreadsheet.AddColumnCommand = AddCommand.extend({\n exec: function () {\n var sheet = this.range().sheet();\n var result = sheet.axisManager().preventAddColumn();\n if (result) {\n return result;\n }\n this._state = sheet.getState();\n if (this._value === 'left') {\n sheet.axisManager().addColumnLeft();\n } else {\n sheet.axisManager().addColumnRight();\n }\n }\n });\n kendo.spreadsheet.AddRowCommand = AddCommand.extend({\n exec: function () {\n var sheet = this.range().sheet();\n var result = sheet.axisManager().preventAddRow();\n if (result) {\n return result;\n }\n this._state = sheet.getState();\n if (this._value === 'above') {\n sheet.axisManager().addRowAbove();\n } else {\n sheet.axisManager().addRowBelow();\n }\n }\n });\n kendo.spreadsheet.EditValidationCommand = Command.extend({\n init: function (options) {\n Command.fn.init.call(this, options);\n this._value = options.value;\n },\n exec: function () {\n this.range().validation(this._value);\n }\n });\n kendo.spreadsheet.OpenCommand = Command.extend({\n cannotUndo: true,\n exec: function () {\n var file = this.options.file;\n if (file.name.match(/.xlsx$/i) === null) {\n return {\n reason: 'error',\n type: 'openUnsupported'\n };\n }\n var workbook = this.options.workbook;\n workbook.fromFile(this.options.file).then(function () {\n var errors = workbook.excelImportErrors;\n if (errors && errors.length) {\n workbook._view.openDialog('importError', { errors: errors });\n }\n });\n }\n });\n kendo.spreadsheet.SaveAsCommand = Command.extend({\n exec: function () {\n var fileName = this.options.name + this.options.extension;\n if (this.options.extension === '.xlsx') {\n this.options.workbook.saveAsExcel({ fileName: fileName });\n } else if (this.options.extension === '.pdf') {\n this.options.workbook.saveAsPDF($.extend(this.options.pdf, {\n workbook: this.options.workbook,\n fileName: fileName\n }));\n }\n }\n });\n var NameCommand = Command.extend({\n init: function (options) {\n Command.fn.init.call(this, options);\n this._name = options.name;\n this._value = options.value;\n },\n getState: function () {\n this._state = this._workbook.nameDefinition(this._name);\n },\n setState: function () {\n this._workbook.nameDefinition(this._name, this._state);\n this._workbook.trigger('change', { recalc: true });\n }\n });\n kendo.spreadsheet.DefineNameCommand = NameCommand.extend({\n exec: function () {\n this.getState();\n try {\n this._workbook.defineName(this._name, this._value);\n this._workbook.trigger('change', { recalc: true });\n } catch (ex) {\n return {\n title: 'Error',\n body: ex + '',\n reason: 'error'\n };\n }\n }\n });\n kendo.spreadsheet.DeleteNameCommand = NameCommand.extend({\n exec: function () {\n this.getState();\n this._workbook.undefineName(this._name);\n this._workbook.trigger('change', { recalc: true });\n }\n });\n }(kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/formulabar', ['kendo.core'], f);\n}(function () {\n (function (kendo) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var $ = kendo.jQuery;\n var classNames = { wrapper: 'k-spreadsheet-formula-bar' };\n var FormulaBar = kendo.ui.Widget.extend({\n init: function (element, options) {\n kendo.ui.Widget.call(this, element, options);\n element = this.element.addClass(FormulaBar.classNames.wrapper);\n this.formulaInput = new kendo.spreadsheet.FormulaInput($('<div/>').appendTo(element));\n },\n destroy: function () {\n if (this.formulaInput) {\n this.formulaInput.destroy();\n }\n this.formulaInput = null;\n }\n });\n kendo.spreadsheet.FormulaBar = FormulaBar;\n $.extend(true, FormulaBar, { classNames: classNames });\n }(window.kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/formulainput', ['kendo.core'], f);\n}(function () {\n (function (kendo, window) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var $ = kendo.jQuery;\n var Widget = kendo.ui.Widget;\n var ns = '.kendoFormulaInput';\n var keys = kendo.keys;\n var classNames = {\n wrapper: 'k-spreadsheet-formula-input',\n listWrapper: 'k-spreadsheet-formula-list'\n };\n var styles = [\n 'font-family',\n 'font-size',\n 'font-stretch',\n 'font-style',\n 'font-weight',\n 'letter-spacing',\n 'text-transform',\n 'line-height'\n ];\n var KEY_NAMES = {\n 27: 'esc',\n 37: 'left',\n 39: 'right',\n 35: 'end',\n 36: 'home',\n 32: 'spacebar'\n };\n var PRIVATE_FORMULA_CHECK = /(^_|[^a-z0-9]$)/i;\n var FormulaInput = Widget.extend({\n init: function (element, options) {\n Widget.call(this, element, options);\n element = this.element;\n element.addClass(FormulaInput.classNames.wrapper).attr('contenteditable', true).attr('spellcheck', false).css('white-space', 'pre');\n if (this.options.autoScale) {\n element.on('input', this.scale.bind(this));\n }\n this._highlightedRefs = [];\n this._staticTokens = [];\n this._formulaSource();\n this._formulaList();\n this._popup();\n this._tooltip();\n element.on('keydown', this._keydown.bind(this)).on('keyup', this._keyup.bind(this)).on('blur', this._blur.bind(this)).on('input click', this._input.bind(this)).on('focus', this._focus.bind(this)).on('paste', this._paste.bind(this));\n },\n options: {\n name: 'FormulaInput',\n autoScale: false,\n filterOperator: 'startswith',\n scalePadding: 30,\n minLength: 1\n },\n events: [\n 'keyup',\n 'focus'\n ],\n enable: function (enable) {\n if (enable === undefined) {\n return this.element.attr('contenteditable') === 'true';\n }\n if (enable) {\n this.element.attr('contenteditable', enable);\n } else {\n this.element.removeAttr('contenteditable');\n }\n this.element.toggleClass('k-state-disabled', !enable);\n },\n getPos: function () {\n var div = this.element[0];\n var sel = window.getSelection();\n var a = lookup(sel.focusNode, sel.focusOffset);\n var b = lookup(sel.anchorNode, sel.anchorOffset);\n if (a != null && b != null) {\n if (a > b) {\n var tmp = a;\n a = b;\n b = tmp;\n }\n return {\n begin: a,\n end: b,\n collapsed: a == b\n };\n }\n function lookup(lookupNode, pos) {\n try {\n (function loop(node) {\n if (node === lookupNode) {\n throw pos;\n } else if (node.nodeType == 1) {\n for (var i = node.firstChild; i; i = i.nextSibling) {\n loop(i);\n }\n } else if (node.nodeType == 3) {\n pos += node.nodeValue.length;\n }\n }(div));\n } catch (index) {\n return index;\n }\n }\n },\n setPos: function (begin, end) {\n var eiv = this.element[0];\n begin = lookup(eiv, begin);\n if (end != null) {\n end = lookup(eiv, end);\n } else {\n end = begin;\n }\n if (begin && end) {\n var range = document.createRange();\n range.setStart(begin.node, begin.pos);\n range.setEnd(end.node, end.pos);\n var sel = window.getSelection();\n var currentRange = sel.getRangeAt(0);\n if (differ(range, currentRange)) {\n sel.removeAllRanges();\n sel.addRange(range);\n }\n }\n function differ(a, b) {\n return a.startOffset != b.startOffset || a.endOffset != b.endOffset || a.startContainer != b.endContainer || a.endContainer != b.endContainer;\n }\n function lookup(node, pos) {\n try {\n (function loop(node) {\n if (node.nodeType == 3) {\n var len = node.nodeValue.length;\n if (len >= pos) {\n throw node;\n }\n pos -= len;\n } else if (node.nodeType == 1) {\n for (var i = node.firstChild; i; i = i.nextSibling) {\n loop(i);\n }\n }\n }(node));\n } catch (el) {\n return {\n node: el,\n pos: pos\n };\n }\n }\n },\n end: function () {\n this.setPos(this.length());\n },\n home: function () {\n this.setPos(0);\n },\n select: function () {\n this.setPos(0, this.length());\n },\n length: function () {\n return this.value().length;\n },\n _formulaSource: function () {\n var result = [];\n var value;\n for (var key in kendo.spreadsheet.calc.runtime.FUNCS) {\n if (!PRIVATE_FORMULA_CHECK.test(key)) {\n value = key.toUpperCase();\n result.push({\n value: value,\n text: value\n });\n }\n }\n this.formulaSource = new kendo.data.DataSource({ data: result });\n },\n _formulaList: function () {\n this.list = new kendo.ui.StaticList($('<ul />').addClass(FormulaInput.classNames.listWrapper).insertAfter(this.element), {\n autoBind: false,\n selectable: true,\n change: this._formulaListChange.bind(this),\n dataSource: this.formulaSource,\n dataValueField: 'value',\n template: '#:data.value#'\n });\n this.list.element.on('mousedown', function (e) {\n e.preventDefault();\n });\n },\n _formulaListChange: function () {\n var tokenCtx = this._tokenContext();\n if (!tokenCtx || this._mute) {\n return;\n }\n var activeToken = tokenCtx.token;\n var completion = this.list.value()[0];\n var ctx = {\n replace: true,\n token: activeToken,\n end: activeToken.end\n };\n if (!tokenCtx.nextToken || tokenCtx.nextToken.value != '(') {\n completion += '(';\n }\n this._replaceAt(ctx, completion);\n this.popup.close();\n },\n _popup: function () {\n this.popup = new kendo.ui.Popup(this.list.element, { anchor: this.element });\n },\n _blur: function () {\n this.popup.close();\n clearTimeout(this._focusId);\n this.trigger('blur');\n },\n _isFormula: function () {\n return /^=/.test(this.value());\n },\n _keydown: function (e) {\n var key = e.keyCode;\n if (KEY_NAMES[key]) {\n this.popup.close();\n this._navigated = true;\n } else if (this._move(key)) {\n this._navigated = true;\n e.preventDefault();\n }\n this._keyDownTimeout = setTimeout(this._syntaxHighlight.bind(this));\n },\n _keyup: function () {\n var popup = this.popup;\n var value;\n if (this._isFormula() && !this._navigated) {\n value = ((this._tokenContext() || {}).token || {}).value;\n this.filter(value);\n if (!value || !this.formulaSource.view().length) {\n popup.close();\n } else {\n popup[popup.visible() ? 'position' : 'open']();\n this.list.focusFirst();\n }\n }\n this._navigated = false;\n this._syntaxHighlight();\n this.trigger('keyup');\n },\n _input: function () {\n this._syntaxHighlight();\n },\n _focus: function () {\n this._focusTimeout = setTimeout(this._syntaxHighlight.bind(this));\n this.trigger('focus');\n },\n _paste: function (ev) {\n ev.preventDefault();\n var pos = this.getPos();\n var text;\n if (kendo.support.browser.msie) {\n text = window.clipboardData.getData('Text');\n } else {\n text = ev.originalEvent.clipboardData.getData('text/plain');\n }\n var val = this.value();\n val = val.substr(0, pos.begin) + text + val.substr(pos.end);\n this.value(val);\n this.setPos(pos.begin + text.length);\n this.scale();\n },\n _move: function (key) {\n var list = this.list;\n var popup = this.popup;\n if (popup.visible()) {\n if (key === keys.DOWN) {\n list.focusNext();\n if (!list.focus()) {\n list.focusFirst();\n }\n return true;\n }\n if (key === keys.UP) {\n list.focusPrev();\n if (!list.focus()) {\n list.focusLast();\n }\n return true;\n }\n if (key === keys.ENTER) {\n list.select(list.focus());\n popup.close();\n return true;\n }\n if (key === keys.TAB) {\n list.select(list.focus());\n popup.close();\n return true;\n }\n if (key === keys.PAGEUP) {\n list.focusFirst();\n return true;\n }\n if (key === keys.PAGEDOWN) {\n list.focusLast();\n return true;\n }\n }\n return key === keys.ENTER || key === keys.TAB;\n },\n _tokenContext: function () {\n var point = this.getPos();\n var value = this.value();\n if (!value || !point || !point.collapsed) {\n return null;\n }\n var tokens = kendo.spreadsheet.calc.tokenize(value, this.row(), this.col());\n var tok;\n for (var i = 0; i < tokens.length; ++i) {\n tok = tokens[i];\n if (touches(tok, point) && /^(?:str|sym|func)$/.test(tok.type)) {\n return {\n token: tok,\n nextToken: tokens[i + 1]\n };\n }\n }\n return null;\n },\n _sync: function () {\n if (this._editorToSync && this.isActive()) {\n this._editorToSync.value(this.value());\n }\n },\n _textContainer: function () {\n var computedStyles = kendo.getComputedStyles(this.element[0], styles);\n computedStyles.position = 'absolute';\n computedStyles.visibility = 'hidden';\n computedStyles.whiteSpace = 'pre';\n computedStyles.top = -3333;\n computedStyles.left = -3333;\n this._span = $('<span style=\\'white-space: pre\\'/>').css(computedStyles).insertAfter(this.element);\n },\n _tooltip: function () {\n this._cellTooltip = $('<div class=\"k-widget k-tooltip\" style=\"position:absolute; display:none\">A1</div>').insertAfter(this.element);\n },\n tooltip: function (value) {\n this._cellTooltip.text(value);\n },\n toggleTooltip: function (show) {\n this._cellTooltip.toggle(show);\n },\n isActive: function () {\n return this.element[0] === kendo._activeElement();\n },\n filter: function (value) {\n if (!value || value.length < this.options.minLength) {\n return;\n }\n this._mute = true;\n this.list.select(-1);\n this._mute = false;\n this.formulaSource.filter({\n field: this.list.options.dataValueField,\n operator: this.options.filterOperator,\n value: value\n });\n },\n hide: function () {\n this.enable(false);\n this.element.hide();\n this._cellTooltip.hide();\n },\n show: function () {\n this.enable(true);\n this.element.show();\n },\n row: function () {\n if (this.activeCell) {\n return this.activeCell.row;\n }\n },\n col: function () {\n if (this.activeCell) {\n return this.activeCell.col;\n }\n },\n position: function (rectangle) {\n if (!rectangle) {\n return;\n }\n this.show();\n this.element.css({\n 'top': rectangle.top + 1 + 'px',\n 'left': rectangle.left + 1 + 'px'\n });\n this._cellTooltip.css({\n 'top': rectangle.top - this._cellTooltip.height() - 10 + 'px',\n 'left': rectangle.left\n });\n },\n resize: function (rectangle) {\n if (!rectangle) {\n return;\n }\n this.element.css({\n width: rectangle.width - 1,\n height: rectangle.height - 1\n });\n },\n canInsertRef: function (isKeyboardAction) {\n var result = this._canInsertRef(isKeyboardAction);\n var token = result && result.token;\n var idx;\n if (token) {\n for (idx = 0; idx < this._staticTokens.length; idx++) {\n if (isEqualToken(token, this._staticTokens[idx])) {\n return null;\n }\n }\n }\n return result;\n },\n _canInsertRef: function (isKeyboardAction) {\n if (this.popup.visible()) {\n return null;\n }\n var strictMode = isKeyboardAction;\n var point = this.getPos();\n var tokens, tok;\n if (point && this._isFormula()) {\n if (point.begin === 0) {\n return null;\n }\n tokens = kendo.spreadsheet.calc.tokenize(this.value(), this.row(), this.col());\n for (var i = 0; i < tokens.length; ++i) {\n tok = tokens[i];\n if (touches(tok, point)) {\n return canReplace(tok);\n }\n if (afterPoint(tok)) {\n return canInsertBetween(tokens[i - 1], tok);\n }\n }\n return canInsertBetween(tok, null);\n }\n return null;\n function afterPoint(tok) {\n return tok.begin > point.begin;\n }\n function canReplace(tok) {\n if (tok) {\n if (/^(?:num|str|bool|sym|ref)$/.test(tok.type)) {\n return {\n replace: true,\n token: tok,\n end: tok.end\n };\n }\n if (/^(?:op|punc|startexp)$/.test(tok.type)) {\n if (tok.end == point.end) {\n return canInsertBetween(tok, tokens[i + 1]);\n }\n return canInsertBetween(tokens[i - 1], tok);\n }\n }\n }\n function canInsertBetween(left, right) {\n if (left == null) {\n return null;\n }\n if (right == null) {\n if (/^(?:op|startexp)$/.test(left.type) || isOpenParen(left.value)) {\n return {\n token: left,\n end: point.end\n };\n }\n return null;\n }\n if (strictMode) {\n if (left.type == 'op' && /^(?:punc|op)$/.test(right.type)) {\n return {\n token: left,\n end: point.end\n };\n }\n } else {\n if (left.type == 'startexp') {\n return {\n token: left,\n end: point.end\n };\n }\n if (/^(?:ref|op|punc)$/.test(left.type)) {\n return {\n token: left,\n end: point.end\n };\n }\n if (/^(?:punc|op)$/.test(left.type)) {\n return /^[,;({]$/.test(left.value) ? {\n token: left,\n end: point.end\n } : null;\n }\n }\n return false;\n }\n },\n refAtPoint: function (ref) {\n var x = this._canInsertRef();\n if (x) {\n this._replaceAt(x, ref.simplify().toString());\n }\n },\n _replaceAt: function (ctx, newValue) {\n var value = this.value();\n var tok = ctx.token;\n var rest = value.substr(ctx.end);\n value = value.substr(0, ctx.replace ? tok.begin : ctx.end) + newValue;\n var point = value.length;\n value += rest;\n this._value(value);\n this.setPos(point);\n this.scale();\n this._syntaxHighlight();\n this._sync();\n },\n syncWith: function (formulaInput) {\n var self = this;\n var eventName = 'input' + ns;\n var handler = self._sync.bind(self), iehandler;\n if (kendo.support.browser.msie) {\n eventName = 'keydown' + ns;\n iehandler = function () {\n setTimeout(handler);\n };\n }\n self._editorToSync = formulaInput;\n self.element.off(eventName).on(eventName, iehandler || handler);\n },\n scale: function () {\n var element = this.element;\n var width, height;\n if (!this._span) {\n this._textContainer();\n }\n this._span.html(element.html());\n width = this._span.width() + this.options.scalePadding;\n height = this._span.height();\n if (width > element.width()) {\n element.width(width);\n }\n if (height > element.height()) {\n element.height(height);\n }\n },\n _value: function (value) {\n this.element.text(value);\n },\n value: function (value) {\n if (value === undefined) {\n var txt = this.element[0].innerText;\n return txt.replace(/\\n$/, '');\n }\n this._value(value);\n this._syntaxHighlight();\n },\n highlightedRefs: function () {\n return this._highlightedRefs.slice();\n },\n _syntaxHighlight: function () {\n var pos = this.getPos();\n var value = this.value();\n var refClasses = kendo.spreadsheet.Pane.classNames.series;\n var highlightedRefs = [];\n var refIndex = 0;\n var parens = [];\n var tokens = [];\n var activeToken;\n if (pos && !pos.collapsed) {\n return;\n }\n if (!/^=/.test(value)) {\n if (this._staticTokens.length || this._highlightedRefs.length) {\n this._staticTokens = [];\n this._highlightedRefs = [];\n this.element.text(value);\n }\n if (this.popup) {\n this.popup.close();\n }\n return;\n } else {\n tokens = kendo.spreadsheet.calc.tokenize(value, this.row(), this.col());\n tokens.forEach(function (tok) {\n tok.active = false;\n tok.cls = ['k-syntax-' + tok.type];\n if (tok.type == 'ref') {\n tok.colorClass = refClasses[refIndex++ % refClasses.length];\n tok.cls.push(tok.colorClass);\n highlightedRefs.push(tok);\n }\n if (pos && tok.type == 'punc') {\n if (isOpenParen(tok.value)) {\n parens.unshift(tok);\n } else if (isCloseParen(tok.value)) {\n var open = parens.shift();\n if (open) {\n if (isMatchingParen(tok.value, open.value)) {\n if (touches(tok, pos) || touches(open, pos)) {\n tok.cls.push('k-syntax-paren-match');\n open.cls.push('k-syntax-paren-match');\n }\n } else {\n tok.cls.push('k-syntax-error');\n open.cls.push('k-syntax-error');\n }\n } else {\n tok.cls.push('k-syntax-error');\n }\n }\n }\n if (pos && touches(tok, pos)) {\n tok.cls.push('k-syntax-at-point');\n tok.active = true;\n activeToken = tok;\n }\n if (tok.type == 'func' && !knownFunction(tok.value) && (!pos || !touches(tok, pos))) {\n tok.cls.push('k-syntax-error');\n }\n });\n tokens.reverse().forEach(function (tok) {\n var begin = tok.begin, end = tok.end;\n var text = kendo.htmlEncode(value.substring(begin, end));\n value = value.substr(0, begin) + '<span class=\\'' + tok.cls.join(' ') + '\\'>' + text + '</span>' + value.substr(end);\n });\n this.element.html(value);\n }\n if (pos) {\n this.setPos(pos.begin, pos.end);\n }\n if (activeToken && /^(?:startexp|op|punc)$/.test(activeToken.type)) {\n this._setStaticTokens(tokens);\n }\n this._highlightedRefs = highlightedRefs;\n },\n _setStaticTokens: function (tokens) {\n var idx, tok;\n this._staticTokens = [];\n for (idx = 0; idx < tokens.length; idx++) {\n tok = tokens[idx];\n if (/^(?:num|str|bool|sym|ref)$/.test(tok.type)) {\n this._staticTokens.push(tok);\n }\n }\n },\n destroy: function () {\n this._editorToSync = null;\n this.element.off(ns);\n clearTimeout(this._focusTimeout);\n clearTimeout(this._keyDownTimeout);\n this._cellTooltip = null;\n this._span = null;\n this.popup.destroy();\n this.popup = null;\n Widget.fn.destroy.call(this);\n },\n insertNewline: function () {\n var val = this.value();\n var pos = this.getPos();\n var eof = pos.end == val.length;\n val = val.substr(0, pos.begin) + (eof ? '\\n\\n' : '\\n' + val.substr(pos.end));\n this.value(val);\n this.setPos(pos.begin + 1);\n }\n });\n function isOpenParen(ch) {\n return ch == '(' || ch == '[' || ch == '{';\n }\n function isCloseParen(ch) {\n return ch == ')' || ch == ']' || ch == '}';\n }\n function isMatchingParen(close, open) {\n return open == '(' ? close == ')' : open == '[' ? close == ']' : open == '{' ? close == '}' : false;\n }\n function touches(pos, target) {\n return pos.begin <= target.begin && pos.end >= target.end;\n }\n function knownFunction(name) {\n return kendo.spreadsheet.calc.runtime.FUNCS[name.toLowerCase()];\n }\n function isEqualToken(tok1, tok2) {\n if (!tok1 || !tok2) {\n return false;\n }\n if (tok1.type == 'ref' && tok2.type == 'ref') {\n return tok1.ref.eq(tok2.ref);\n } else {\n return tok1.value === tok2.value;\n }\n }\n kendo.spreadsheet.FormulaInput = FormulaInput;\n $.extend(true, FormulaInput, { classNames: classNames });\n }(kendo, window));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/eventlistener', ['kendo.core'], f);\n}(function () {\n (function (kendo) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var $ = kendo.jQuery;\n var KEY_NAMES = {\n 8: 'backspace',\n 9: 'tab',\n 13: 'enter',\n 27: 'esc',\n 37: 'left',\n 38: 'up',\n 39: 'right',\n 40: 'down',\n 35: 'end',\n 36: 'home',\n 32: 'spacebar',\n 33: 'pageup',\n 34: 'pagedown',\n 46: 'delete',\n 113: ':edit'\n };\n var Mac = navigator.platform.toUpperCase().indexOf('MAC') >= 0;\n var isAlphaNum = function (keyCode) {\n if (keyCode > 47 && keyCode < 58 || keyCode > 64 && keyCode < 91 || keyCode > 95 && keyCode < 112 || keyCode > 185 && keyCode < 193 || keyCode > 218 && keyCode < 223) {\n return true;\n }\n return false;\n };\n var keyName = function (event) {\n var keyCode = event.keyCode;\n var name = KEY_NAMES[keyCode];\n if (!name && isAlphaNum(keyCode)) {\n name = ':alphanum';\n }\n if (!name && event.key && event.key.length == 1) {\n name = ':alphanum';\n }\n return name;\n };\n var EventListener = kendo.Class.extend({\n init: function (target, observer, handlers) {\n this._handlers = {};\n this.target = target;\n this._observer = observer || window;\n this.keyDownProxy = this.keyDown.bind(this);\n this.mouseProxy = this.mouse.bind(this);\n this.threshold = 5;\n this._pressLocation = null;\n target.on('keydown', this.keyDownProxy);\n target.on('contextmenu mousedown cut copy paste scroll wheel click dblclick focus', this.mouseProxy);\n $(document.documentElement).on('mousemove mouseup', this.mouseProxy);\n if (handlers) {\n for (var key in handlers) {\n this.on(key, handlers[key]);\n }\n }\n },\n keyDown: function (e) {\n this.handleEvent(e, keyName(e.originalEvent));\n },\n mouse: function (e) {\n var rightClick;\n if (e.which) {\n rightClick = e.which == 3;\n } else if (e.button) {\n rightClick = e.button == 2;\n }\n var type = e.type;\n if (type === 'mousedown') {\n if (rightClick) {\n type = 'rightmousedown';\n } else {\n this._pressLocation = {\n x: e.pageX,\n y: e.pageY\n };\n }\n }\n if (type === 'mouseup') {\n if (!rightClick) {\n this._pressLocation = null;\n }\n }\n if (type === 'mousemove' && this._pressLocation) {\n var dx = this._pressLocation.x - e.pageX;\n var dy = this._pressLocation.y - e.pageY;\n var distance = Math.sqrt(dx * dx + dy * dy);\n if (distance > this.threshold) {\n type = 'mousedrag';\n }\n }\n this.handleEvent(e, type);\n },\n handleEvent: function (e, name) {\n var eventKey = '';\n e.mod = Mac ? e.metaKey : e.ctrlKey && !e.altKey;\n if (e.altKey) {\n eventKey += 'alt+';\n }\n if (e.shiftKey) {\n eventKey += 'shift+';\n }\n if (e.ctrlKey) {\n eventKey += 'ctrl+';\n }\n eventKey += name;\n var catchAllHandler = this._handlers['*+' + name];\n if (catchAllHandler) {\n catchAllHandler.call(this._observer, e, eventKey);\n }\n var handler = this._handlers[eventKey];\n if (handler) {\n handler.call(this._observer, e, eventKey);\n }\n },\n on: function (event, callback) {\n var handlers = this._handlers;\n if (typeof callback === 'string') {\n callback = this._observer[callback];\n }\n if (typeof event === 'string') {\n event = event.split(',');\n }\n event.forEach(function (e) {\n handlers[e] = callback;\n });\n },\n destroy: function () {\n this.target.off('keydown', this.keyDownProxy);\n this.target.off('keydown', this.mouseProxy);\n $(document.documentElement).off('mousemove mouseup', this.mouseProxy);\n }\n });\n kendo.spreadsheet.EventListener = EventListener;\n }(window.kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/rangelist', ['kendo.core'], f);\n}(function () {\n (function (kendo) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var RangeTreeNode = kendo.Class.extend({\n init: function Node(level, value, left, right) {\n this.level = level;\n this.value = value;\n this.left = left;\n this.right = right;\n }\n });\n var NilNode = new function NIL() {\n this.left = this;\n this.right = this;\n this.level = 0;\n }();\n function passThrough(value) {\n return value;\n }\n function skew(node) {\n if (node.left.level === node.level) {\n var temp = node;\n node = node.left;\n temp.left = node.right;\n node.right = temp;\n }\n return node;\n }\n function split(node) {\n if (node.right.right.level === node.level) {\n var temp = node;\n node = node.right;\n temp.right = node.left;\n node.left = temp;\n node.level += 1;\n }\n return node;\n }\n function insert(node, value) {\n if (node === NilNode) {\n return new RangeTreeNode(1, value, NilNode, NilNode);\n } else if (node.value.start - value.start > 0) {\n node.left = insert(node.left, value);\n } else {\n node.right = insert(node.right, value);\n }\n return split(skew(node));\n }\n function remove(node, value) {\n if (node === NilNode) {\n return node;\n }\n var diff = node.value.start - value.start;\n if (diff === 0) {\n if (node.left !== NilNode && node.right !== NilNode) {\n var heir = node.left;\n while (heir.right !== NilNode) {\n heir = heir.right;\n }\n node.value = heir.value;\n node.left = remove(node.left, node.value);\n } else if (node.left === NilNode) {\n node = node.right;\n } else {\n node = node.left;\n }\n } else if (diff > 0) {\n node.left = remove(node.left, value);\n } else {\n node.right = remove(node.right, value);\n }\n if (node.left.level < node.level - 1 || node.right.level < node.level - 1) {\n node.level -= 1;\n if (node.right.level > node.level) {\n node.right.level = node.level;\n }\n node = skew(node);\n node.right = skew(node.right);\n node.right.right = skew(node.right.right);\n node = split(node);\n node.right = split(node.right);\n }\n return node;\n }\n var Range = kendo.Class.extend({\n init: function Value(start, end, value) {\n this.start = start;\n this.end = end;\n this.value = value;\n },\n intersects: function (range) {\n return range.start <= this.end && range.end >= this.start;\n }\n });\n var RangeTree = kendo.Class.extend({\n init: function () {\n this.root = NilNode;\n },\n insert: function (value) {\n this.root = insert(this.root, value);\n },\n remove: function (value) {\n this.root = remove(this.root, value);\n },\n findrange: function (value) {\n var node = this.root;\n while (node != NilNode) {\n if (value < node.value.start) {\n node = node.left;\n } else if (value > node.value.end) {\n node = node.right;\n } else {\n return node.value;\n }\n }\n return null;\n },\n values: function () {\n var result = [];\n values(this.root, result);\n return result;\n },\n intersecting: function (start, end) {\n var ranges = [];\n intersecting(this.root, new Range(start, end), ranges);\n return ranges;\n },\n map: function (callback) {\n var tree = new RangeTree();\n map(tree, this.root, callback);\n return tree;\n },\n clone: function () {\n return this.map(passThrough);\n },\n first: function () {\n var first = this.root;\n while (first.left != NilNode) {\n first = first.left;\n }\n return first;\n },\n last: function () {\n var last = this.root;\n while (last.right != NilNode) {\n last = last.right;\n }\n return last;\n }\n });\n function values(node, result) {\n if (node === NilNode) {\n return;\n }\n values(node.left, result);\n result.push(node.value);\n values(node.right, result);\n }\n function intersecting(node, range, ranges) {\n if (node === NilNode) {\n return;\n }\n var value = node.value;\n if (range.start < value.start) {\n intersecting(node.left, range, ranges);\n }\n if (value.intersects(range)) {\n ranges.push(value);\n }\n if (range.end > value.end) {\n intersecting(node.right, range, ranges);\n }\n }\n function map(tree, root, callback) {\n if (root === NilNode) {\n return;\n }\n map(tree, root.left, callback);\n tree.insert(callback(root.value));\n map(tree, root.right, callback);\n }\n var RangeList = kendo.Class.extend({\n init: function (start, end, value) {\n if (end === undefined) {\n this.tree = start;\n } else {\n this.tree = new RangeTree();\n this.tree.insert(new Range(start, end, value));\n }\n },\n values: function () {\n return this.tree.values();\n },\n map: function (callback) {\n return new RangeList(this.tree.map(callback));\n },\n intersecting: function (start, end) {\n return this.tree.intersecting(start, end);\n },\n first: function () {\n return this.tree.first().value;\n },\n last: function () {\n return this.tree.last().value;\n },\n insert: function (start, end, value) {\n return this.tree.insert(new Range(start, end, value));\n },\n value: function (start, end, value) {\n if (value === undefined) {\n if (end === undefined) {\n end = start;\n }\n return this.intersecting(start, end)[0].value;\n }\n var ranges = this.tree.intersecting(start - 1, end + 1);\n if (ranges.length) {\n var firstRange = ranges[0], lastRange = ranges[ranges.length - 1];\n if (firstRange.end < start) {\n if (firstRange.value === value) {\n start = firstRange.start;\n } else {\n ranges.shift();\n }\n }\n if (lastRange.start > end) {\n if (lastRange.value === value) {\n end = lastRange.end;\n } else {\n ranges.pop();\n }\n }\n for (var i = 0, length = ranges.length; i < length; i++) {\n var range = ranges[i];\n var rangeValue = range.value;\n var rangeStart = range.start;\n var rangeEnd = range.end;\n this.tree.remove(range);\n if (rangeStart < start) {\n if (rangeValue !== value) {\n this.insert(rangeStart, start - 1, rangeValue);\n } else {\n start = rangeStart;\n }\n }\n if (rangeEnd > end) {\n if (rangeValue !== value) {\n this.insert(end + 1, rangeEnd, rangeValue);\n } else {\n end = rangeEnd;\n }\n }\n }\n }\n this.insert(start, end, value);\n },\n expandedValues: function (start, end) {\n var ranges = this.intersecting(start, end);\n var result = [];\n var rangeIndex = 0;\n for (var i = start; i <= end; i++) {\n if (ranges[rangeIndex].end < i) {\n rangeIndex++;\n }\n result.push({\n index: i - start,\n value: ranges[rangeIndex].value\n });\n }\n return result;\n },\n sortedIndices: function (start, end, valueComparer, indices) {\n var result = this.expandedValues(start, end);\n var comparer = function (a, b) {\n if (a.value === b.value) {\n return a.index - b.index;\n }\n return valueComparer(a.value, b.value);\n };\n if (indices) {\n comparer = function (a, b) {\n var x = indices[a.index];\n var y = indices[b.index];\n if (x.value === y.value) {\n return valueComparer(a.value, b.value);\n }\n return a.index - b.index;\n };\n }\n result.sort(comparer);\n return result;\n },\n sort: function (start, end, indices) {\n if (this.intersecting(start, end).length === 1) {\n return;\n }\n var values = this.expandedValues(start, end);\n for (var i = 0, len = indices.length; i < len; i++) {\n this.value(i + start, i + start, values[indices[i].index].value);\n }\n },\n copy: function (sourceStart, sourceEnd, targetStart) {\n var values = this.intersecting(sourceStart, sourceEnd);\n var start = targetStart;\n var end;\n for (var i = 0, len = values.length; i < len; i++) {\n var rangeStart = values[i].start;\n if (rangeStart < sourceStart) {\n rangeStart = sourceStart;\n }\n var rangeEnd = values[i].end;\n if (rangeEnd > sourceEnd) {\n rangeEnd = sourceEnd;\n }\n end = start + (rangeEnd - rangeStart);\n this.value(start, end, values[i].value);\n start = ++end;\n }\n },\n iterator: function (start, end) {\n return new Iterator(start, end, this.intersecting(start, end));\n },\n getState: function () {\n return this.tree.clone();\n },\n setState: function (state) {\n this.tree = state;\n }\n });\n var Iterator = kendo.Class.extend({\n init: function (start, end, ranges) {\n this.start = start;\n this.end = end;\n this.index = 0;\n this.ranges = ranges;\n },\n unique: function () {\n return this.ranges.map(function (range) {\n return range.value;\n });\n },\n at: function (index) {\n while (this.ranges[this.index].end < index) {\n this.index++;\n }\n return this.ranges[this.index].value;\n },\n forEach: function (callback) {\n for (var i = this.start; i <= this.end; i++) {\n callback(this.at(i), i);\n }\n this.index = 0;\n }\n });\n var SparseRangeList = RangeList.extend({\n init: function (start, end, value) {\n this.tree = new RangeTree();\n this.range = new Range(start, end, value);\n },\n intersecting: function (start, end) {\n var ranges = this.tree.intersecting(start, end);\n var result = [];\n var range;\n if (!ranges.length) {\n return [this.range];\n }\n for (var i = 0, len = ranges.length; i < len; i++) {\n range = ranges[i];\n if (range.start > start) {\n result.push(new Range(start, range.start - 1, this.range.value));\n }\n result.push(range);\n start = range.end + 1;\n }\n if (range.end < end) {\n result.push(new Range(range.end + 1, end, this.range.value));\n }\n return result;\n },\n insert: function (start, end, value) {\n if (value !== this.range.value) {\n this.tree.insert(new Range(start, end, value));\n }\n },\n lastRangeStart: function () {\n var node = this.tree.root;\n if (node === NilNode) {\n return this.range.start;\n }\n while (node.right !== NilNode) {\n node = node.right;\n }\n return node.value.end + 1;\n }\n });\n kendo.spreadsheet.RangeTree = RangeTree;\n kendo.spreadsheet.RangeList = RangeList;\n kendo.spreadsheet.SparseRangeList = SparseRangeList;\n kendo.spreadsheet.ValueRange = Range;\n }(kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/propertybag', ['kendo.core'], f);\n}(function () {\n (function (kendo) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var $ = kendo.jQuery;\n var Property = kendo.Class.extend({\n init: function (list) {\n this.list = list;\n },\n get: function (index) {\n return this.parse(this.list.value(index, index));\n },\n set: function (start, end, value) {\n if (value === undefined) {\n value = end;\n end = start;\n }\n this.list.value(start, end, value);\n },\n parse: function (value) {\n return value;\n },\n copy: function (start, end, dst) {\n this.list.copy(start, end, dst);\n },\n iterator: function (start, end) {\n return this.list.iterator(start, end);\n }\n });\n var JsonProperty = Property.extend({\n set: function (start, end, value) {\n this.list.value(start, end, JSON.stringify(value));\n },\n parse: function (value) {\n return JSON.parse(value);\n }\n });\n var ValueProperty = Property.extend({\n init: function (values, formats, validations) {\n Property.prototype.init.call(this, values);\n this.validations = validations;\n this.formats = formats;\n },\n set: function (start, end, value) {\n if (value instanceof Date) {\n value = kendo.spreadsheet.dateToNumber(value);\n this.formats.value(start, end, toExcelFormat(kendo.culture().calendar.patterns.d));\n }\n this.list.value(start, end, value);\n }\n });\n function toExcelFormat(format) {\n return format.replace(/M/g, 'm').replace(/'/g, '\"').replace(/tt/, 'am/pm');\n }\n kendo.spreadsheet.PropertyBag = kendo.Class.extend({\n specs: [\n {\n property: ValueProperty,\n name: 'value',\n value: null,\n sortable: true,\n serializable: true,\n depends: 'format'\n },\n {\n property: Property,\n name: 'format',\n value: null,\n sortable: true,\n serializable: true\n },\n {\n property: Property,\n name: 'formula',\n value: null,\n sortable: true,\n serializable: true\n },\n {\n property: Property,\n name: 'background',\n value: null,\n sortable: true,\n serializable: true\n },\n {\n property: JsonProperty,\n name: 'borderBottom',\n value: null,\n sortable: false,\n serializable: true\n },\n {\n property: JsonProperty,\n name: 'borderRight',\n value: null,\n sortable: false,\n serializable: true\n },\n {\n property: JsonProperty,\n name: 'borderLeft',\n value: null,\n sortable: false,\n serializable: true\n },\n {\n property: JsonProperty,\n name: 'borderTop',\n value: null,\n sortable: false,\n serializable: true\n },\n {\n property: Property,\n name: 'color',\n value: null,\n sortable: true,\n serializable: true\n },\n {\n property: Property,\n name: 'fontFamily',\n value: null,\n sortable: true,\n serializable: true\n },\n {\n property: Property,\n name: 'underline',\n value: null,\n sortable: true,\n serializable: true\n },\n {\n property: Property,\n name: 'fontSize',\n value: null,\n sortable: true,\n serializable: true\n },\n {\n property: Property,\n name: 'italic',\n value: null,\n sortable: true,\n serializable: true\n },\n {\n property: Property,\n name: 'bold',\n value: null,\n sortable: true,\n serializable: true\n },\n {\n property: Property,\n name: 'textAlign',\n value: null,\n sortable: true,\n serializable: true\n },\n {\n property: Property,\n name: 'verticalAlign',\n value: null,\n sortable: true,\n serializable: true\n },\n {\n property: Property,\n name: 'wrap',\n value: null,\n sortable: true,\n serializable: true\n },\n {\n property: Property,\n name: 'validation',\n value: null,\n sortable: false,\n serializable: true\n },\n {\n property: Property,\n name: 'enable',\n value: null,\n sortable: false,\n serializable: true\n },\n {\n property: Property,\n name: 'link',\n value: null,\n sortable: false,\n serializable: true\n },\n {\n property: Property,\n name: 'editor',\n value: null,\n sortable: false,\n serializable: true\n }\n ],\n init: function (cellCount, defaultValues) {\n defaultValues = defaultValues || {};\n this.properties = {};\n this.lists = {};\n this.specs.forEach(function (spec) {\n var value = defaultValues[spec.name] !== undefined ? defaultValues[spec.name] : spec.value;\n this.lists[spec.name] = new kendo.spreadsheet.SparseRangeList(0, cellCount, value);\n }, this);\n this.specs.forEach(function (spec) {\n this.properties[spec.name] = new spec.property(this.lists[spec.name], this.lists[spec.depends]);\n }, this);\n },\n getState: function () {\n var state = {};\n this.specs.forEach(function (spec) {\n state[spec.name] = this.lists[spec.name].getState();\n }, this);\n return state;\n },\n setState: function (state) {\n this.specs.forEach(function (spec) {\n this.lists[spec.name].setState(state[spec.name]);\n }, this);\n },\n get: function (name, index) {\n if (index === undefined) {\n return this.lists[name];\n }\n return this.properties[name].get(index);\n },\n set: function (name, start, end, value) {\n this.properties[name].set(start, end, value);\n },\n fromJSON: function (index, value) {\n for (var si = 0; si < this.specs.length; si++) {\n var spec = this.specs[si];\n if (spec.serializable) {\n if (value[spec.name] !== undefined) {\n this.set(spec.name, index, index, value[spec.name], false);\n }\n }\n }\n },\n copy: function (sourceStart, sourceEnd, targetStart) {\n this.specs.forEach(function (spec) {\n this.properties[spec.name].copy(sourceStart, sourceEnd, targetStart);\n }, this);\n },\n iterator: function (name, start, end) {\n return this.properties[name].iterator(start, end);\n },\n sortable: function () {\n return this.specs.filter(function (spec) {\n return spec.sortable;\n }).map(function (spec) {\n return this.lists[spec.name];\n }, this);\n },\n iterators: function (start, end) {\n var specs = this.specs.filter(function (spec) {\n return spec.serializable;\n });\n return specs.map(function (spec) {\n var iterator = this.iterator(spec.name, start, end);\n return {\n name: spec.name,\n value: spec.value,\n at: function (index) {\n return spec.property.fn.parse(iterator.at(index));\n }\n };\n }, this);\n },\n forEach: function (start, end, callback) {\n var iterators = this.iterators(start, end);\n for (var index = start; index <= end; index++) {\n var values = {};\n for (var i = 0; i < iterators.length; i++) {\n var iterator = iterators[i];\n var value = iterator.at(index);\n if (value !== iterator.value) {\n values[iterator.name] = value;\n }\n }\n callback(values);\n }\n },\n forEachProperty: function (callback) {\n for (var name in this.properties) {\n callback(this.properties[name]);\n }\n }\n });\n kendo.spreadsheet.ALL_PROPERTIES = $.map(kendo.spreadsheet.PropertyBag.prototype.specs, function (spec) {\n return spec.name;\n });\n }(window.kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/references', ['kendo.core'], f);\n}(function () {\n 'use strict';\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var spreadsheet = kendo.spreadsheet;\n var Class = kendo.Class;\n function columnName(colIndex) {\n var letter = Math.floor(colIndex / 26) - 1;\n return (letter >= 0 ? columnName(letter) : '') + String.fromCharCode(65 + colIndex % 26);\n }\n function displaySheet(sheet) {\n if (/^[a-z0-9_]*$/i.test(sheet)) {\n return sheet;\n }\n return '\\'' + sheet.replace(/\\x27/g, '\\\\\\'') + '\\'';\n }\n function displayRef(sheet, row, col, rel) {\n var aa = '';\n ++row;\n if (!isFinite(row)) {\n row = '';\n } else if (rel != null && !(rel & 2)) {\n row = '$' + row;\n }\n if (!isFinite(col)) {\n col = '';\n } else {\n aa = columnName(col);\n if (rel != null && !(rel & 1)) {\n aa = '$' + aa;\n }\n }\n if (sheet) {\n return displaySheet(sheet) + '!' + aa + row;\n } else {\n return aa + row;\n }\n }\n var Ref = Class.extend({\n type: 'ref',\n sheet: '',\n clone: function () {\n return this;\n },\n hasSheet: function () {\n return this._hasSheet;\n },\n simplify: function () {\n return this;\n },\n setSheet: function (sheet, hasSheet) {\n this.sheet = sheet;\n if (hasSheet != null) {\n this._hasSheet = hasSheet;\n }\n return this;\n },\n absolute: function () {\n return this;\n },\n relative: function () {\n return this;\n },\n adjust: function () {\n return this;\n },\n toString: function () {\n return this.relative(0, 0, 3, 3).print(0, 0);\n },\n forEach: function (callback, obj) {\n callback.call(obj, this);\n },\n map: function (callback, obj) {\n return callback.call(obj, this);\n },\n intersects: function (ref) {\n return this.intersect(ref) !== NULL;\n },\n isCell: function () {\n return false;\n },\n toRow: function () {\n return this;\n },\n toColumn: function () {\n return this;\n },\n first: function () {\n return this;\n },\n lastRange: function () {\n return this;\n },\n size: function () {\n return 1;\n },\n rangeAt: function () {\n return this;\n },\n nextRangeIndex: function () {\n return 0;\n },\n previousRangeIndex: function () {\n return 0;\n },\n eq: function (reference) {\n var r1 = this;\n var r2 = reference;\n if (r1 === NULL || r2 === NULL) {\n return r1 === r2;\n }\n if (r2 instanceof CellRef || r2 instanceof RangeRef && !(r1 instanceof CellRef)) {\n r1 = reference;\n r2 = this;\n }\n if (r1 instanceof CellRef) {\n r2 = r2.simplify();\n return r2 instanceof CellRef && r1.row == r2.row && r1.col == r2.col && r1.sheet == r2.sheet;\n } else if (r1 instanceof RangeRef) {\n if (r2 instanceof RangeRef) {\n return r2.topLeft.eq(r1.topLeft) && r2.bottomRight.eq(r1.bottomRight);\n }\n if (r2 instanceof UnionRef) {\n return r2.single() && r1.eq(r2.refs[0]);\n }\n } else if (r1 instanceof UnionRef && r2 instanceof UnionRef) {\n var refs1 = r1.refs;\n var refs2 = r2.refs;\n if (refs1.length != refs2.length) {\n return false;\n }\n for (var i = 0, len = refs1.length; i < len; i++) {\n if (!refs1[i].eq(refs2[i])) {\n return false;\n }\n }\n return true;\n }\n return r1 === r2;\n },\n concat: function (ref) {\n return new UnionRef([\n this,\n ref\n ]);\n },\n replaceAt: function (index, ref) {\n return ref;\n },\n forEachColumnIndex: function (callback) {\n this.forEachAxisIndex('col', callback);\n },\n forEachRowIndex: function (callback) {\n this.forEachAxisIndex('row', callback);\n },\n forEachAxisIndex: function (axis, callback) {\n var sorted = [];\n var method = axis === 'row' ? 'forEachRow' : 'forEachColumn';\n this[method](function (ref) {\n var index = ref.first()[axis];\n if (sorted.indexOf(index) === -1) {\n sorted.push(index);\n }\n });\n sorted.sort(function (a, b) {\n return a > b ? 1 : a < b ? -1 : 0;\n }).forEach(callback);\n },\n valid: function () {\n return false;\n },\n renameSheet: function (oldSheetName, newSheetName) {\n if (this.sheet && this.sheet.toLowerCase() == oldSheetName.toLowerCase()) {\n this.sheet = newSheetName;\n return true;\n }\n }\n });\n Ref.display = displayRef;\n var NULL = new (Ref.extend({\n init: function NullRef() {\n },\n print: function () {\n return '#NULL!';\n },\n eq: function (ref) {\n return ref === this;\n },\n forEach: function () {\n }\n }))();\n var NameRef = Ref.extend({\n ref: 'name',\n init: function NameRef(name) {\n this.name = name;\n },\n clone: function () {\n return new NameRef(this.name).setSheet(this.sheet, this.hasSheet());\n },\n print: function () {\n var ret = displaySheet(this.name);\n if (this.hasSheet()) {\n ret = displaySheet(this.sheet) + '!' + ret;\n }\n return ret;\n }\n });\n var CellRef = Ref.extend({\n ref: 'cell',\n init: function CellRef(row, col, rel) {\n this.row = row;\n this.col = col;\n this.rel = rel || 0;\n },\n clone: function () {\n return new CellRef(this.row, this.col, this.rel).setSheet(this.sheet, this.hasSheet());\n },\n intersect: function (ref) {\n if (ref instanceof CellRef) {\n if (this.eq(ref)) {\n return this;\n } else {\n return NULL;\n }\n }\n return ref.intersect(this);\n },\n print: function (trow, tcol, mod) {\n var col = this.col, row = this.row, rel = this.rel, abs;\n if (trow == null && rel) {\n var sheet = this.hasSheet() ? displaySheet(this.sheet) + '!' : '';\n if (isFinite(col)) {\n col = rel & 1 ? 'C[' + col + ']' : 'C' + (col + 1);\n } else {\n col = '';\n }\n if (isFinite(row)) {\n row = rel & 2 ? 'R[' + row + ']' : 'R' + (row + 1);\n } else {\n row = '';\n }\n return sheet + row + col;\n } else {\n abs = this.absolute(trow, tcol);\n if (mod) {\n row = abs.row % 1048576;\n col = abs.col % 16384;\n if (row < 0) {\n row += 1048576;\n }\n if (col < 0) {\n col += 16384;\n }\n return displayRef(this._hasSheet && this.sheet, row, col, rel);\n }\n return abs.valid() ? displayRef(this._hasSheet && this.sheet, abs.row, abs.col, rel) : '#REF!';\n }\n },\n absolute: function (arow, acol) {\n var ret = this.clone();\n if (ret.rel & 3 === 0) {\n return ret;\n }\n if (ret.rel & 1) {\n ret.col = (ret.col + acol) % 16384;\n }\n if (ret.rel & 2) {\n ret.row = (ret.row + arow) % 1048576;\n }\n ret.rel = 0;\n return ret;\n },\n toRangeRef: function () {\n return new RangeRef(this, this);\n },\n relative: function (arow, acol, rel) {\n if (rel == null) {\n rel = this.rel;\n }\n var row = rel & 2 ? this.row - arow : this.row;\n var col = rel & 1 ? this.col - acol : this.col;\n return new CellRef(row, col, rel).setSheet(this.sheet, this.hasSheet());\n },\n height: function () {\n return 1;\n },\n width: function () {\n return 1;\n },\n toString: function () {\n return displayRef(null, this.row, this.col, 3);\n },\n isCell: function () {\n return true;\n },\n leftColumn: function () {\n return this;\n },\n rightColumn: function () {\n return this;\n },\n topRow: function () {\n return this;\n },\n bottomRow: function () {\n return this;\n },\n forEachRow: function (callback) {\n callback(this.toRangeRef());\n },\n forEachColumn: function (callback) {\n callback(this.toRangeRef());\n },\n adjust: function (row, col, trow, tcol, forRow, start, delta) {\n var ref = this.absolute(row, col);\n if (forRow) {\n if (ref.row >= start) {\n if (delta < 0 && ref.row < start - delta) {\n return NULL;\n }\n ref.row += delta;\n }\n } else {\n if (ref.col >= start) {\n if (delta < 0 && ref.col < start - delta) {\n return NULL;\n }\n ref.col += delta;\n }\n }\n if (trow != null && tcol != null) {\n ref = ref.relative(trow, tcol, this.rel);\n }\n return ref;\n },\n valid: function () {\n if (this.rel) {\n throw new Error('valid() called on relative reference');\n }\n var col = this.col, row = this.row;\n return !(isFinite(col) && col < 0 || isFinite(row) && row < 0);\n }\n });\n var RangeRef = Ref.extend({\n ref: 'range',\n init: function RangeRef(tl, br) {\n if (tl._hasSheet && br._hasSheet && tl.sheet.toLowerCase() != br.sheet.toLowerCase()) {\n this.endSheet = br.sheet;\n }\n this.topLeft = new CellRef(tl.row, tl.col, tl.rel);\n this.bottomRight = new CellRef(br.row, br.col, br.rel);\n this.normalize();\n },\n clone: function () {\n return new RangeRef(this.topLeft.clone(), this.bottomRight.clone()).setSheet(this.sheet, this.hasSheet());\n },\n _containsRange: function (range) {\n return this._containsCell(range.topLeft) && this._containsCell(range.bottomRight);\n },\n _containsCell: function (cell) {\n return cell.sheet == this.sheet && cell.row >= this.topLeft.row && cell.col >= this.topLeft.col && cell.row <= this.bottomRight.row && cell.col <= this.bottomRight.col;\n },\n contains: function (ref) {\n if (ref instanceof Array) {\n var that = this;\n return ref.some(function (_ref) {\n return that.contains(_ref);\n });\n }\n if (ref instanceof CellRef) {\n return this._containsCell(ref);\n }\n if (ref instanceof RangeRef) {\n return this._containsRange(ref);\n }\n return false;\n },\n _intersectRange: function (ref) {\n if (this.sheet != ref.sheet) {\n return NULL;\n }\n var a_left = this.topLeft.col;\n var a_top = this.topLeft.row;\n var a_right = this.bottomRight.col;\n var a_bottom = this.bottomRight.row;\n var b_left = ref.topLeft.col;\n var b_top = ref.topLeft.row;\n var b_right = ref.bottomRight.col;\n var b_bottom = ref.bottomRight.row;\n if (a_left <= b_right && b_left <= a_right && a_top <= b_bottom && b_top <= a_bottom) {\n return new RangeRef(new CellRef(Math.max(a_top, b_top), Math.max(a_left, b_left)), new CellRef(Math.min(a_bottom, b_bottom), Math.min(a_right, b_right))).setSheet(this.sheet, this.hasSheet());\n } else {\n return NULL;\n }\n },\n intersect: function (ref) {\n if (ref instanceof CellRef) {\n return this._containsCell(ref) ? ref : NULL;\n }\n if (ref instanceof RangeRef) {\n return this._intersectRange(ref).simplify();\n }\n if (ref instanceof UnionRef) {\n return ref.intersect(this);\n }\n return NULL;\n },\n simplify: function () {\n if (this.isCell()) {\n return new CellRef(this.topLeft.row, this.topLeft.col, this.topLeft.rel).setSheet(this.sheet, this.hasSheet());\n }\n return this;\n },\n normalize: function () {\n var a = this.topLeft, b = this.bottomRight;\n var r1 = a.row, c1 = a.col, r2 = b.row, c2 = b.col;\n var rr1 = a.rel & 2, rc1 = a.rel & 1;\n var rr2 = b.rel & 2, rc2 = b.rel & 1;\n var tmp, changes = false;\n if (r1 > r2) {\n changes = true;\n tmp = r1;\n r1 = r2;\n r2 = tmp;\n tmp = rr1;\n rr1 = rr2;\n rr2 = tmp;\n }\n if (c1 > c2) {\n changes = true;\n tmp = c1;\n c1 = c2;\n c2 = tmp;\n tmp = rc1;\n rc1 = rc2;\n rc2 = tmp;\n }\n if (changes) {\n this.topLeft = new CellRef(r1, c1, rc1 | rr1);\n this.bottomRight = new CellRef(r2, c2, rc2 | rr2);\n }\n return this;\n },\n print: function (trow, tcol, mod) {\n if (mod || this.absolute(trow, tcol).valid()) {\n var ret = this.topLeft.print(trow, tcol, mod) + ':' + this.bottomRight.print(trow, tcol, mod);\n if (this.hasSheet()) {\n ret = displaySheet(this.sheet) + (this.endSheet ? ':' + displaySheet(this.endSheet) : '') + '!' + ret;\n }\n return ret;\n }\n return '#REF!';\n },\n absolute: function (arow, acol) {\n return new RangeRef(this.topLeft.absolute(arow, acol), this.bottomRight.absolute(arow, acol)).setSheet(this.sheet, this.hasSheet());\n },\n relative: function (arow, acol, relTL, relBR) {\n if (relBR == null) {\n relBR = relTL;\n }\n return new RangeRef(this.topLeft.relative(arow, acol, relTL), this.bottomRight.relative(arow, acol, relBR)).setSheet(this.sheet, this.hasSheet());\n },\n height: function () {\n if (this.topLeft.rel != this.bottomRight.rel) {\n throw new Error('Mixed relative/absolute references');\n }\n return this.bottomRight.row - this.topLeft.row + 1;\n },\n width: function () {\n if (this.topLeft.rel != this.bottomRight.rel) {\n throw new Error('Mixed relative/absolute references');\n }\n return this.bottomRight.col - this.topLeft.col + 1;\n },\n collapse: function () {\n return this.topLeft.toRangeRef();\n },\n leftColumn: function () {\n return new RangeRef(this.topLeft, new CellRef(this.bottomRight.row, this.topLeft.col));\n },\n rightColumn: function () {\n return new RangeRef(new CellRef(this.topLeft.row, this.bottomRight.col), this.bottomRight);\n },\n topRow: function () {\n return new RangeRef(this.topLeft, new CellRef(this.topLeft.row, this.bottomRight.col));\n },\n bottomRow: function () {\n return new RangeRef(new CellRef(this.bottomRight.row, this.topLeft.col), this.bottomRight);\n },\n toRangeRef: function () {\n return this;\n },\n toRow: function (row) {\n row += Math.max(0, this.topLeft.row);\n return new RangeRef(new CellRef(row, this.topLeft.col), new CellRef(row, this.bottomRight.col)).setSheet(this.sheet, this.hasSheet());\n },\n toColumn: function (col) {\n col += Math.max(0, this.topLeft.col);\n return new RangeRef(new CellRef(this.topLeft.row, col), new CellRef(this.bottomRight.row, col)).setSheet(this.sheet, this.hasSheet());\n },\n toCell: function (row, col) {\n row += Math.max(0, this.topLeft.row);\n col += Math.max(0, this.topLeft.col);\n return new CellRef(row, col, 0).setSheet(this.sheet, this.hasSheet());\n },\n forEachRow: function (callback) {\n var startRow = this.topLeft.row;\n var endRow = this.bottomRight.row;\n var startCol = this.topLeft.col;\n var endCol = this.bottomRight.col;\n for (var i = startRow; i <= endRow; i++) {\n callback(new RangeRef(new CellRef(i, startCol), new CellRef(i, endCol)));\n }\n },\n forEachColumn: function (callback) {\n var startRow = this.topLeft.row;\n var endRow = this.bottomRight.row;\n var startCol = this.topLeft.col;\n var endCol = this.bottomRight.col;\n for (var i = startCol; i <= endCol; i++) {\n callback(new RangeRef(new CellRef(startRow, i), new CellRef(endRow, i)));\n }\n },\n intersecting: function (refs) {\n return refs.filter(function (ref) {\n return ref.toRangeRef().intersects(this);\n }, this);\n },\n union: function (refs, callback) {\n var intersecting = this.intersecting(refs);\n var topLeftRow = this.topLeft.row;\n var topLeftCol = this.topLeft.col;\n var bottomRightRow = this.bottomRight.row;\n var bottomRightCol = this.bottomRight.col;\n var modified = false;\n intersecting.forEach(function (ref) {\n ref = ref.toRangeRef();\n if (ref.topLeft.row < topLeftRow) {\n modified = true;\n topLeftRow = ref.topLeft.row;\n }\n if (ref.topLeft.col < topLeftCol) {\n modified = true;\n topLeftCol = ref.topLeft.col;\n }\n if (ref.bottomRight.row > bottomRightRow) {\n modified = true;\n bottomRightRow = ref.bottomRight.row;\n }\n if (ref.bottomRight.col > bottomRightCol) {\n modified = true;\n bottomRightCol = ref.bottomRight.col;\n }\n if (callback) {\n callback(ref);\n }\n });\n var result = new RangeRef(new CellRef(topLeftRow, topLeftCol), new CellRef(bottomRightRow, bottomRightCol));\n if (modified) {\n return result.union(refs, callback);\n } else {\n return result;\n }\n },\n resize: function (options) {\n var limit = Math.max.bind(Math, 0);\n function num(value) {\n return value || 0;\n }\n var top = this.topLeft.row + num(options.top);\n var left = this.topLeft.col + num(options.left);\n var bottom = this.bottomRight.row + num(options.bottom);\n var right = this.bottomRight.col + num(options.right);\n if (left < 0 && right < 0 || top < 0 && bottom < 0) {\n return NULL;\n } else if (top <= bottom && left <= right) {\n return new RangeRef(new CellRef(limit(top), limit(left)), new CellRef(limit(bottom), limit(right)));\n } else {\n return NULL;\n }\n },\n move: function (rows, cols) {\n return new RangeRef(new CellRef(this.topLeft.row + rows, this.topLeft.col + cols), new CellRef(this.bottomRight.row + rows, this.bottomRight.col + cols));\n },\n first: function () {\n return this.topLeft;\n },\n isCell: function () {\n return !this.endSheet && this.topLeft.eq(this.bottomRight);\n },\n toString: function () {\n return this.topLeft + ':' + this.bottomRight;\n },\n adjust: function (row, col, trow, tcol, forRow, start, delta) {\n var tl = this.topLeft.adjust(row, col, trow, tcol, forRow, start, delta);\n var tr = this.bottomRight.adjust(row, col, trow, tcol, forRow, start, delta);\n if (tl === NULL && tr === NULL) {\n return NULL;\n }\n if (tl === NULL) {\n tl = this.topLeft.absolute(row, col);\n if (forRow) {\n tl.row = start;\n } else {\n tl.col = start;\n }\n if (trow != null && tcol != null) {\n tl = tl.relative(trow, tcol, this.topLeft.rel);\n }\n } else if (tr === NULL) {\n tr = this.bottomRight.absolute(row, col);\n if (forRow) {\n tr.row = start - 1;\n } else {\n tr.col = start - 1;\n }\n if (trow != null && tcol != null) {\n tr = tr.relative(trow, tcol, this.bottomRight.rel);\n }\n }\n return new RangeRef(tl, tr).setSheet(this.sheet, this.hasSheet()).simplify();\n },\n valid: function () {\n return this.topLeft.valid() && this.bottomRight.valid();\n }\n });\n var UnionRef = Ref.extend({\n init: function UnionRef(refs) {\n this.refs = refs;\n this.length = refs.length;\n },\n clone: function () {\n return new UnionRef(this.refs.slice());\n },\n intersect: function (ref) {\n var a = [];\n for (var i = 0; i < this.length; ++i) {\n var x = ref.intersect(this.refs[i]);\n if (x !== NULL) {\n a.push(x);\n }\n }\n if (a.length > 0) {\n return new UnionRef(a).simplify();\n }\n return NULL;\n },\n simplify: function () {\n var u = new UnionRef(this.refs.reduce(function (a, ref) {\n ref = ref.simplify();\n if (ref !== NULL) {\n a.push(ref);\n }\n return a;\n }, []));\n if (u.empty()) {\n return NULL;\n }\n if (u.single()) {\n return u.refs[0];\n }\n return u;\n },\n absolute: function (arow, acol) {\n return new UnionRef(this.refs.map(function (ref) {\n return ref.absolute(arow, acol);\n }));\n },\n forEach: function (callback, obj) {\n this.refs.forEach(callback, obj);\n },\n toRangeRef: function () {\n return this.refs[0].toRangeRef();\n },\n contains: function (theRef) {\n return this.refs.some(function (ref) {\n return ref.contains(theRef);\n });\n },\n map: function (callback, obj) {\n return new UnionRef(this.refs.map(callback, obj));\n },\n first: function () {\n return this.refs[0].first();\n },\n lastRange: function () {\n return this.refs[this.length - 1];\n },\n size: function () {\n return this.length;\n },\n single: function () {\n return this.length == 1;\n },\n empty: function () {\n return this.length === 0;\n },\n isCell: function () {\n return this.single() && this.refs[0].isCell();\n },\n rangeAt: function (index) {\n return this.refs[index];\n },\n nextRangeIndex: function (index) {\n if (index === this.length - 1) {\n return 0;\n } else {\n return index + 1;\n }\n },\n previousRangeIndex: function (index) {\n if (index === 0) {\n return this.length - 1;\n } else {\n return index - 1;\n }\n },\n concat: function (ref) {\n return new UnionRef(this.refs.concat([ref]));\n },\n print: function (row, col, mod) {\n return this.refs.map(function (ref) {\n return ref.print(row, col, mod);\n }).join(',');\n },\n replaceAt: function (index, ref) {\n var newRefs = this.refs.slice();\n newRefs.splice(index, 1, ref);\n return new UnionRef(newRefs);\n },\n leftColumn: function () {\n return this.map(function (ref) {\n return ref.leftColumn();\n });\n },\n rightColumn: function () {\n return this.map(function (ref) {\n return ref.rightColumn();\n });\n },\n topRow: function () {\n return this.map(function (ref) {\n return ref.topRow();\n });\n },\n bottomRow: function () {\n return this.map(function (ref) {\n return ref.bottomRow();\n });\n },\n forEachRow: function (callback) {\n this.forEach(function (ref) {\n ref.forEachRow(callback);\n });\n },\n forEachColumn: function (callback) {\n this.forEach(function (ref) {\n ref.forEachColumn(callback);\n });\n },\n adjust: function (row, col, trow, tcol, forRow, start, delta) {\n return this.map(function (ref) {\n return ref.adjust(row, col, trow, tcol, forRow, start, delta);\n }).simplify();\n },\n toString: function () {\n return this.refs.map(function (ref) {\n return ref.toString();\n }).join(', ');\n },\n valid: function () {\n for (var i = this.refs.length; --i >= 0;) {\n if (this.refs[i].valid()) {\n return false;\n }\n }\n return true;\n },\n renameSheet: function (oldSheetName, newSheetName) {\n this.refs.forEach(function (ref) {\n ref.renameSheet(oldSheetName, newSheetName);\n });\n }\n });\n spreadsheet.NULLREF = NULL;\n spreadsheet.SHEETREF = new RangeRef(new CellRef(0, 0), new CellRef(Infinity, Infinity));\n spreadsheet.FIRSTREF = new CellRef(0, 0);\n spreadsheet.Ref = Ref;\n spreadsheet.NameRef = NameRef;\n spreadsheet.CellRef = CellRef;\n spreadsheet.RangeRef = RangeRef;\n spreadsheet.UnionRef = UnionRef;\n spreadsheet.SHEETREF.print = function () {\n return '#SHEET';\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/autofillcalculator', ['kendo.core'], f);\n}(function () {\n (function (kendo) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var RangeRef = kendo.spreadsheet.RangeRef;\n var CellRef = kendo.spreadsheet.CellRef;\n var AutoFillCalculator = kendo.Class.extend({\n init: function (grid) {\n this._grid = grid;\n },\n rectIsVertical: function (start, end, x, y) {\n var startRect = this._grid.rectangle(start.toRangeRef());\n var endRect = this._grid.rectangle(end.toRangeRef());\n return Math.abs(endRect[y] - startRect[y]) > Math.abs(startRect[x] - endRect[x]);\n },\n autoFillDest: function (selection, cursor) {\n var topLeft = selection.topLeft;\n var bottomRight = selection.bottomRight;\n var quadrant;\n var lower = cursor.row >= topLeft.row;\n var further = cursor.col >= topLeft.col;\n if (lower) {\n quadrant = further ? 4 : 3;\n } else {\n quadrant = further ? 2 : 1;\n }\n var pivot, opposite, cornerResult, expanding;\n if (quadrant === 4) {\n pivot = topLeft;\n opposite = bottomRight;\n expanding = cursor.row > opposite.row || cursor.col > opposite.col;\n if (expanding) {\n cursor = new CellRef(Math.max(cursor.row, opposite.row), Math.max(cursor.col, opposite.col));\n }\n if (this.rectIsVertical(opposite, cursor, 'right', 'bottom')) {\n cornerResult = new CellRef(cursor.row, opposite.col);\n } else {\n cornerResult = new CellRef(opposite.row, cursor.col);\n }\n } else if (quadrant === 3) {\n var bottomLeft = new CellRef(topLeft.col, bottomRight.row);\n if (cursor.row > bottomRight.row && this.rectIsVertical(bottomLeft, cursor, 'left', 'bottom')) {\n pivot = topLeft;\n cornerResult = new CellRef(cursor.row, bottomRight.col);\n } else {\n pivot = bottomRight;\n cornerResult = new CellRef(topLeft.row, cursor.col);\n }\n } else if (quadrant === 2) {\n var topRight = new CellRef(topLeft.row, bottomRight.col);\n if (cursor.col > bottomRight.col && !this.rectIsVertical(topRight, cursor, 'right', 'top')) {\n pivot = topLeft;\n cornerResult = new CellRef(bottomRight.row, cursor.col);\n } else {\n pivot = bottomRight;\n cornerResult = new CellRef(cursor.row, topLeft.col);\n }\n } else {\n pivot = bottomRight;\n if (this.rectIsVertical(topLeft, cursor, 'left', 'top')) {\n cornerResult = new CellRef(cursor.row, topLeft.col);\n } else {\n cornerResult = new CellRef(topLeft.row, cursor.col);\n }\n }\n return this._grid.normalize(new RangeRef(pivot, cornerResult));\n }\n });\n kendo.spreadsheet.AutoFillCalculator = AutoFillCalculator;\n }(kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/navigator', [\n 'kendo.core',\n 'spreadsheet/autofillcalculator'\n ], f);\n}(function () {\n (function (kendo) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var RangeRef = kendo.spreadsheet.RangeRef;\n var CellRef = kendo.spreadsheet.CellRef;\n var EdgeNavigator = kendo.Class.extend({\n init: function (field, axis, rangeGetter, union) {\n this.rangeGetter = rangeGetter;\n this.prevLeft = function (index) {\n var current = union(this.range(index));\n var range = this.range(axis.prevVisible(current.topLeft[field]));\n return union(range).topLeft[field];\n };\n this.nextRight = function (index) {\n var current = union(this.range(index));\n var range = this.range(axis.nextVisible(current.bottomRight[field]));\n return union(range).bottomRight[field];\n };\n this.nextLeft = function (index) {\n var range = union(this.range(index));\n return axis.nextVisible(range.bottomRight[field]);\n };\n this.prevRight = function (index) {\n var range = union(this.range(index));\n return axis.prevVisible(range.topLeft[field]);\n };\n },\n boundary: function (top, bottom) {\n this.top = top;\n this.bottom = bottom;\n },\n range: function (index) {\n return this.rangeGetter(index, this.top, this.bottom);\n }\n });\n var SheetNavigator = kendo.Class.extend({\n init: function (sheet) {\n this._sheet = sheet;\n this.columns = this._sheet._grid._columns;\n this.autoFillCalculator = new kendo.spreadsheet.AutoFillCalculator(sheet._grid);\n this.colEdge = new EdgeNavigator('col', this._sheet._grid._columns, this.columnRange.bind(this), this.union.bind(this));\n this.rowEdge = new EdgeNavigator('row', this._sheet._grid._rows, this.rowRange.bind(this), this.union.bind(this));\n },\n height: function (height) {\n this._viewPortHeight = height;\n },\n union: function (ref) {\n return this._sheet.unionWithMerged(ref);\n },\n columnRange: function (col, topRow, bottomRow) {\n return this._sheet._ref(topRow, col, bottomRow - topRow, 1);\n },\n rowRange: function (row, leftCol, rightCol) {\n return this._sheet._ref(row, leftCol, 1, rightCol - leftCol);\n },\n selectionIncludesMergedCells: function () {\n return this._sheet.select().contains(this._sheet._mergedCells);\n },\n setSelectionValue: function (value) {\n var selection = this._sheet.selection();\n setTimeout(function () {\n selection.value(value());\n });\n },\n selectAll: function () {\n this._sheet.select(this._sheet._sheetRef);\n },\n select: function (ref, mode, addToExisting) {\n ref = this.refForMode(ref, mode);\n if (addToExisting) {\n ref = this._sheet.select().concat(ref);\n }\n this._sheet.select(ref);\n },\n refForMode: function (ref, mode) {\n var grid = this._sheet._grid;\n switch (mode) {\n case 'range':\n ref = grid.normalize(ref);\n break;\n case 'row':\n ref = grid.rowRef(ref.row);\n break;\n case 'column':\n ref = grid.colRef(ref.col);\n break;\n case 'sheet':\n ref = this._sheet._sheetRef;\n break;\n }\n return ref;\n },\n startSelection: function (ref, mode, addToExisting, shiftKey) {\n if (mode == 'autofill') {\n this._sheet.startAutoFill();\n } else if (shiftKey && mode == 'range') {\n var range = new RangeRef(this._sheet.activeCell().first(), ref);\n this._sheet.select(range, false, false);\n this._sheet.startSelection();\n } else {\n this._sheet.startSelection();\n this.select(ref, mode, addToExisting);\n }\n },\n completeSelection: function () {\n this._sheet.completeSelection();\n },\n selectForContextMenu: function (ref, mode) {\n var sheet = this._sheet;\n if (!sheet.select().contains(this.refForMode(ref, mode))) {\n this.select(ref, mode);\n }\n },\n modifySelection: function (action) {\n var direction = this.determineDirection(action);\n var sheet = this._sheet;\n var viewPortHeight = this._viewPortHeight;\n var rows = sheet._grid._rows;\n var columns = sheet._grid._columns;\n var originalSelection = sheet.currentOriginalSelectionRange();\n var selection = sheet.select().toRangeRef();\n var activeCell = sheet.activeCell();\n var topLeft = originalSelection.topLeft.clone();\n var bottomRight = originalSelection.bottomRight.clone();\n var scrollInto;\n this.colEdge.boundary(selection.topLeft.row, selection.bottomRight.row);\n this.rowEdge.boundary(selection.topLeft.col, selection.bottomRight.col);\n switch (direction) {\n case 'expand-left':\n topLeft.col = this.colEdge.prevLeft(topLeft.col);\n scrollInto = topLeft;\n break;\n case 'shrink-right':\n topLeft.col = this.colEdge.nextLeft(topLeft.col);\n scrollInto = topLeft;\n break;\n case 'expand-right':\n bottomRight.col = this.colEdge.nextRight(bottomRight.col);\n scrollInto = bottomRight;\n break;\n case 'shrink-left':\n bottomRight.col = this.colEdge.prevRight(bottomRight.col);\n scrollInto = bottomRight;\n break;\n case 'expand-up':\n topLeft.row = this.rowEdge.prevLeft(topLeft.row);\n scrollInto = topLeft;\n break;\n case 'shrink-down':\n topLeft.row = this.rowEdge.nextLeft(topLeft.row);\n scrollInto = topLeft;\n break;\n case 'expand-down':\n bottomRight.row = this.rowEdge.nextRight(bottomRight.row);\n scrollInto = bottomRight;\n break;\n case 'shrink-up':\n bottomRight.row = this.rowEdge.prevRight(bottomRight.row);\n scrollInto = bottomRight;\n break;\n case 'expand-page-up':\n topLeft.row = rows.prevPage(topLeft.row, viewPortHeight);\n break;\n case 'shrink-page-up':\n bottomRight.row = rows.prevPage(bottomRight.row, viewPortHeight);\n break;\n case 'expand-page-down':\n bottomRight.row = rows.nextPage(bottomRight.row, viewPortHeight);\n break;\n case 'shrink-page-down':\n topLeft.row = rows.nextPage(topLeft.row, viewPortHeight);\n break;\n case 'first-col':\n topLeft.col = columns.firstVisible();\n bottomRight.col = activeCell.bottomRight.col;\n scrollInto = topLeft;\n break;\n case 'last-col':\n bottomRight.col = columns.lastVisible();\n topLeft.col = activeCell.topLeft.col;\n scrollInto = bottomRight;\n break;\n case 'first-row':\n topLeft.row = rows.firstVisible();\n bottomRight.row = activeCell.bottomRight.row;\n scrollInto = topLeft;\n break;\n case 'last-row':\n bottomRight.row = rows.lastVisible();\n topLeft.row = activeCell.topLeft.row;\n scrollInto = bottomRight;\n break;\n case 'last':\n bottomRight.row = rows.lastVisible();\n bottomRight.col = columns.lastVisible();\n topLeft = activeCell.topLeft;\n scrollInto = bottomRight;\n break;\n case 'first':\n topLeft.row = rows.firstVisible();\n topLeft.col = columns.firstVisible();\n bottomRight = activeCell.bottomRight;\n scrollInto = topLeft;\n break;\n }\n var newSelection = new RangeRef(topLeft, bottomRight);\n if (!this.union(newSelection).intersects(activeCell)) {\n this.modifySelection(direction.replace('shrink', 'expand'));\n return;\n }\n if (scrollInto) {\n sheet.focus(scrollInto);\n }\n this.updateCurrentSelectionRange(newSelection);\n },\n moveActiveCell: function (direction) {\n var sheet = this._sheet;\n var activeCell = sheet.activeCell();\n var topLeft = activeCell.topLeft;\n var bottomRight = activeCell.bottomRight;\n var cell = sheet.originalActiveCell();\n var rows = sheet._grid._rows;\n var columns = sheet._grid._columns;\n var row = cell.row;\n var column = cell.col;\n switch (direction) {\n case 'left':\n column = columns.prevVisible(topLeft.col);\n break;\n case 'up':\n row = rows.prevVisible(topLeft.row);\n break;\n case 'right':\n column = columns.nextVisible(bottomRight.col);\n break;\n case 'down':\n row = rows.nextVisible(bottomRight.row);\n break;\n case 'first-col':\n column = columns.firstVisible();\n break;\n case 'last-col':\n column = columns.lastVisible();\n break;\n case 'first-row':\n row = rows.firstVisible();\n break;\n case 'last-row':\n row = rows.lastVisible();\n break;\n case 'last':\n row = rows.lastVisible();\n column = columns.lastVisible();\n break;\n case 'first':\n row = rows.firstVisible();\n column = columns.firstVisible();\n break;\n case 'next-page':\n row = rows.nextPage(bottomRight.row, this._viewPortHeight);\n break;\n case 'prev-page':\n row = rows.prevPage(bottomRight.row, this._viewPortHeight);\n break;\n }\n sheet.select(new CellRef(row, column));\n },\n navigateInSelection: function (direction) {\n var sheet = this._sheet;\n var activeCell = sheet.activeCell();\n var topLeft = activeCell.topLeft;\n var cell = sheet.originalActiveCell();\n var rows = sheet._grid._rows;\n var columns = sheet._grid._columns;\n var row = cell.row;\n var column = cell.col;\n var selection = sheet.currentNavigationRange();\n var selTopLeft = selection.topLeft;\n var selBottomRight = selection.bottomRight;\n var done = false;\n var topLeftCol = topLeft.col;\n var topLeftRow = topLeft.row;\n while (!done) {\n var current = new CellRef(row, column);\n switch (direction) {\n case 'next':\n if (selBottomRight.eq(current)) {\n selection = sheet.nextNavigationRange();\n row = selection.topLeft.row;\n column = selection.topLeft.col;\n } else {\n column = columns.nextVisible(topLeftCol, true);\n if (column > selBottomRight.col) {\n column = selTopLeft.col;\n row = rows.nextVisible(row, true);\n }\n }\n break;\n case 'previous':\n if (selTopLeft.eq(current)) {\n selection = sheet.previousNavigationRange();\n row = selection.bottomRight.row;\n column = selection.bottomRight.col;\n } else {\n column = columns.prevVisible(topLeftCol, true);\n if (column < selTopLeft.col) {\n column = selBottomRight.col;\n row = rows.prevVisible(row, true);\n }\n }\n break;\n case 'lower':\n if (selBottomRight.eq(current)) {\n selection = sheet.nextNavigationRange();\n row = selection.topLeft.row;\n column = selection.topLeft.col;\n } else {\n row = rows.nextVisible(topLeftRow, true);\n if (row > selBottomRight.row) {\n row = selTopLeft.row;\n column = columns.nextVisible(column, true);\n }\n }\n break;\n case 'upper':\n if (selTopLeft.eq(current)) {\n selection = sheet.previousNavigationRange();\n row = selection.bottomRight.row;\n column = selection.bottomRight.col;\n } else {\n row = rows.prevVisible(topLeftRow, true);\n if (row < selTopLeft.row) {\n row = selBottomRight.row;\n column = columns.prevVisible(column, true);\n }\n }\n break;\n default:\n throw new Error('Unknown entry navigation: ' + direction);\n }\n done = !this.shouldSkip(row, column);\n topLeftCol = column;\n topLeftRow = row;\n }\n if (sheet.singleCellSelection()) {\n sheet.select(new CellRef(row, column));\n } else {\n sheet.activeCell(new CellRef(row, column));\n }\n },\n extendSelection: function (ref, mode) {\n var sheet = this._sheet;\n var grid = sheet._grid;\n if (mode === 'autofill') {\n this.resizeAutoFill(ref);\n return;\n }\n if (mode === 'range') {\n ref = grid.normalize(ref);\n } else if (mode === 'row') {\n ref = grid.rowRef(ref.row).bottomRight;\n } else if (mode === 'column') {\n ref = grid.colRef(ref.col).bottomRight;\n }\n var activeCell = sheet.originalActiveCell().toRangeRef();\n this.updateCurrentSelectionRange(new RangeRef(activeCell.topLeft, ref));\n },\n shouldSkip: function (row, col) {\n var ref = new CellRef(row, col);\n var isMerged = false;\n this._sheet.forEachMergedCell(function (merged) {\n if (merged.intersects(ref) && !merged.collapse().eq(ref)) {\n isMerged = true;\n }\n });\n return isMerged;\n },\n resizeAutoFill: function (ref) {\n var sheet = this._sheet;\n var selection = sheet.select();\n var origin = sheet._autoFillOrigin;\n var dest = this.autoFillCalculator.autoFillDest(selection, ref);\n var punch = this.punch(selection, dest);\n var hint, direction, row;\n if (!punch) {\n var preview = sheet.range(dest)._previewFillFrom(sheet.range(origin));\n if (preview) {\n direction = preview.direction;\n var props = preview.props;\n if (direction === 0 || direction == 1) {\n row = props[props.length - 1];\n hint = row[row.length - 1].value;\n } else if (direction === 2) {\n row = props[0];\n hint = row[row.length - 1].value;\n } else if (direction === 3) {\n row = props[props.length - 1];\n hint = row[0].value;\n }\n }\n }\n sheet.updateAutoFill(dest, punch, hint, direction);\n },\n determineDirection: function (action) {\n var selection = this._sheet.currentSelectionRange();\n var activeCell = this._sheet.activeCell();\n var leftMode = activeCell.topLeft.col == selection.topLeft.col;\n var rightMode = activeCell.bottomRight.col == selection.bottomRight.col;\n var topMode = activeCell.topLeft.row == selection.topLeft.row;\n var bottomMode = activeCell.bottomRight.row == selection.bottomRight.row;\n switch (action) {\n case 'left':\n action = rightMode ? 'expand-left' : 'shrink-left';\n break;\n case 'right':\n action = leftMode ? 'expand-right' : 'shrink-right';\n break;\n case 'up':\n action = bottomMode ? 'expand-up' : 'shrink-up';\n break;\n case 'down':\n action = topMode ? 'expand-down' : 'shrink-down';\n break;\n case 'prev-page':\n action = bottomMode ? 'expand-page-up' : 'shrink-page-up';\n break;\n case 'next-page':\n action = topMode ? 'expand-page-down' : 'shrink-page-down';\n break;\n }\n return action;\n },\n updateCurrentSelectionRange: function (ref) {\n var sheet = this._sheet;\n sheet.select(sheet.originalSelect().replaceAt(sheet.selectionRangeIndex(), ref), false);\n },\n punch: function (selection, subset) {\n var punch;\n if (subset.topLeft.eq(selection.topLeft)) {\n if (subset.bottomRight.row < selection.bottomRight.row) {\n var bottomRow = this.rowEdge.nextRight(subset.bottomRight.row);\n punch = new RangeRef(new CellRef(bottomRow, selection.topLeft.col), selection.bottomRight);\n } else if (subset.bottomRight.col < selection.bottomRight.col) {\n var bottomCol = this.colEdge.nextRight(subset.bottomRight.col);\n punch = new RangeRef(new CellRef(selection.topLeft.row, bottomCol), selection.bottomRight);\n }\n }\n return punch;\n }\n });\n kendo.spreadsheet.SheetNavigator = SheetNavigator;\n }(kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/axismanager', ['kendo.core'], f);\n}(function () {\n (function (kendo) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var AxisManager = kendo.Class.extend({\n init: function (sheet) {\n this._sheet = sheet;\n },\n forEachSelectedColumn: function (callback) {\n var sheet = this._sheet;\n sheet.batch(function () {\n sheet.select().forEachColumnIndex(function (index, i) {\n callback(sheet, index, i);\n });\n }, {\n layout: true,\n recalc: true\n });\n },\n forEachSelectedRow: function (callback) {\n var sheet = this._sheet;\n sheet.batch(function () {\n sheet.select().forEachRowIndex(function (index, i) {\n callback(sheet, index, i);\n });\n }, {\n layout: true,\n recalc: true\n });\n },\n includesHiddenColumns: function (ref) {\n return this._sheet._grid._columns.includesHidden(ref.topLeft.col, ref.bottomRight.col);\n },\n includesHiddenRows: function (ref) {\n return this._sheet._grid._rows.includesHidden(ref.topLeft.row, ref.bottomRight.row);\n },\n selectionIncludesHiddenColumns: function () {\n return this.includesHiddenColumns(this._sheet.select());\n },\n selectionIncludesHiddenRows: function () {\n return this.includesHiddenRows(this._sheet.select());\n },\n deleteSelectedColumns: function () {\n this.forEachSelectedColumn(function (sheet, index, i) {\n sheet.deleteColumn(index - i);\n });\n },\n deleteSelectedRows: function () {\n this.forEachSelectedRow(function (sheet, index, i) {\n sheet.deleteRow(index - i);\n });\n },\n hideSelectedColumns: function () {\n this.forEachSelectedColumn(function (sheet, index) {\n sheet.hideColumn(index);\n });\n var sheet = this._sheet;\n var ref = sheet.select().toRangeRef();\n var left = ref.topLeft.col;\n var right = ref.bottomRight.col;\n var sel = null;\n while (true) {\n var hasRight = right < sheet._columns._count;\n var hasLeft = left >= 0;\n if (!hasLeft && !hasRight) {\n break;\n }\n if (hasRight && !sheet.isHiddenColumn(right)) {\n sel = right;\n break;\n }\n if (hasLeft && !sheet.isHiddenColumn(left)) {\n sel = left;\n break;\n }\n left--;\n right++;\n }\n if (sel !== null) {\n ref = new kendo.spreadsheet.RangeRef(new kendo.spreadsheet.CellRef(0, sel), new kendo.spreadsheet.CellRef(sheet._rows._count - 1, sel));\n sheet.range(ref).select();\n }\n },\n hideSelectedRows: function () {\n this.forEachSelectedRow(function (sheet, index) {\n sheet.hideRow(index);\n });\n var sheet = this._sheet;\n var ref = sheet.select().toRangeRef();\n var top = ref.topLeft.row;\n var bottom = ref.bottomRight.row;\n var sel = null;\n while (true) {\n var hasBottom = bottom < sheet._rows._count;\n var hasTop = top >= 0;\n if (!hasTop && !hasBottom) {\n break;\n }\n if (hasBottom && !sheet.isHiddenRow(bottom)) {\n sel = bottom;\n break;\n }\n if (hasTop && !sheet.isHiddenRow(top)) {\n sel = top;\n break;\n }\n top--;\n bottom++;\n }\n if (sel !== null) {\n ref = new kendo.spreadsheet.RangeRef(new kendo.spreadsheet.CellRef(sel, 0), new kendo.spreadsheet.CellRef(sel, sheet._columns._count - 1));\n sheet.range(ref).select();\n }\n },\n unhideSelectedColumns: function () {\n this.forEachSelectedColumn(function (sheet, index) {\n sheet.unhideColumn(index);\n });\n },\n unhideSelectedRows: function () {\n this.forEachSelectedRow(function (sheet, index) {\n sheet.unhideRow(index);\n });\n },\n addColumnLeft: function () {\n this.forEachSelectedColumn(function (sheet, index, i) {\n sheet.insertColumn(index - i);\n });\n },\n addColumnRight: function () {\n this.forEachSelectedColumn(function (sheet, index, i) {\n sheet.insertColumn(index + (i + 1));\n });\n },\n preventAddRow: function () {\n var range = this._sheet.select().toRangeRef();\n var rowCount = range.height();\n return this._sheet.preventInsertRow(0, rowCount);\n },\n preventAddColumn: function () {\n return this._sheet.preventInsertColumn();\n },\n addRowAbove: function () {\n this.forEachSelectedRow(function (sheet, index, i) {\n sheet.insertRow(index - i);\n });\n },\n addRowBelow: function () {\n this.forEachSelectedRow(function (sheet, index, i) {\n sheet.insertRow(index + (i + 1));\n });\n }\n });\n kendo.spreadsheet.AxisManager = AxisManager;\n }(kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/clipboard', ['kendo.core'], f);\n}(function () {\n (function (kendo) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var $ = kendo.jQuery;\n var CellRef = kendo.spreadsheet.CellRef;\n var Clipboard = kendo.Class.extend({\n init: function (workbook) {\n this._content = {};\n this._externalContent = {};\n this._internalContent = {};\n this.workbook = workbook;\n this.origin = kendo.spreadsheet.NULLREF;\n this.iframe = document.createElement('iframe');\n this.iframe.className = 'k-spreadsheet-clipboard-paste';\n this.menuInvoked = true;\n this._uid = kendo.guid();\n document.body.appendChild(this.iframe);\n },\n destroy: function () {\n document.body.removeChild(this.iframe);\n },\n canCopy: function () {\n var status = { canCopy: true };\n var selection = this.workbook.activeSheet().select();\n if (selection === kendo.spreadsheet.NULLREF) {\n status.canCopy = false;\n }\n if (selection instanceof kendo.spreadsheet.UnionRef) {\n status.canCopy = false;\n status.multiSelection = true;\n }\n if (this.menuInvoked) {\n status.canCopy = false;\n status.menuInvoked = true;\n }\n return status;\n },\n canPaste: function () {\n var sheet = this.workbook.activeSheet();\n var ref = this.pasteRef();\n var range = sheet.range(ref);\n var status = {\n canPaste: true,\n pasteOnMerged: false,\n pasteOnDisabled: false\n };\n if (!range.enable()) {\n status.canPaste = false;\n status.pasteOnDisabled = true;\n }\n if (!ref.eq(sheet.unionWithMerged(ref))) {\n status.canPaste = false;\n status.pasteOnMerged = true;\n }\n if (this.menuInvoked) {\n status.canPaste = false;\n status.menuInvoked = true;\n }\n if (ref.bottomRight.row >= sheet._rows._count || ref.bottomRight.col >= sheet._columns._count) {\n status.canPaste = false;\n status.overflow = true;\n }\n return status;\n },\n intersectsMerged: function () {\n var sheet = this.workbook.activeSheet();\n this.parse();\n this.origin = this._content.origRef;\n var ref = this.pasteRef();\n return !ref.eq(sheet.unionWithMerged(ref));\n },\n copy: function () {\n var sheet = this.workbook.activeSheet();\n this.origin = sheet.select();\n this._internalContent = sheet.selection().getState();\n delete this._externalContent.html;\n delete this._externalContent.plain;\n },\n cut: function () {\n var sheet = this.workbook.activeSheet();\n this.copy();\n sheet.range(sheet.select()).clear();\n },\n pasteRef: function () {\n var sheet = this.workbook.activeSheet();\n var destination = sheet.activeCell().first();\n var originActiveCell = this.origin.first();\n var rowDelta = originActiveCell.row - destination.row;\n var colDelta = originActiveCell.col - destination.col;\n return this.origin.relative(rowDelta, colDelta, 3);\n },\n paste: function () {\n var sheet = this.workbook.activeSheet();\n var pasteRef = this.pasteRef();\n sheet.range(pasteRef).setState(this._content, this);\n sheet.triggerChange({\n recalc: true,\n ref: pasteRef\n });\n },\n external: function (data) {\n if (data && (data.html || data.plain)) {\n this._externalContent = data;\n } else {\n return this._externalContent;\n }\n },\n isExternal: function () {\n return !this._isInternal();\n },\n parse: function () {\n var state = newState();\n if (this._isInternal()) {\n state = this._internalContent;\n } else {\n var data = this._externalContent;\n if (data.html) {\n var doc = this.iframe.contentWindow.document;\n doc.open();\n doc.write(data.html);\n doc.close();\n var table = $(doc).find('table:first');\n if (table.length) {\n state = parseHTML(table);\n } else {\n state = parseTSV(data.plain);\n }\n } else {\n state = parseTSV(data.plain);\n }\n this.origin = state.origRef;\n }\n this._content = state;\n },\n _isInternal: function () {\n if (this._externalContent.html === undefined) {\n return true;\n }\n var internalHTML = $('<div/>').html(this._externalContent.html).find('table.kendo-clipboard-' + this._uid).length ? true : false;\n var internalPlain = $('<div/>').html(this._externalContent.plain).find('table.kendo-clipboard-' + this._uid).length ? true : false;\n return internalHTML || internalPlain;\n }\n });\n kendo.spreadsheet.Clipboard = Clipboard;\n function newState() {\n var ref = new CellRef(0, 0, 0);\n return {\n ref: ref,\n mergedCells: [],\n data: [],\n foreign: true,\n origRef: ref.toRangeRef()\n };\n }\n function setStateData(state, row, col, value) {\n var data = state.data || (state.data = []);\n if (!data[row]) {\n data[row] = [];\n }\n data[row][col] = value;\n var br = state.origRef.bottomRight;\n br.row = Math.max(br.row, row);\n br.col = Math.max(br.col, col);\n }\n function stripStyle(style) {\n return style.replace(/^-(?:ms|moz|webkit)-/, '');\n }\n function borderObject(styles) {\n var obj = {};\n [\n 'borderBottom',\n 'borderRight',\n 'borderLeft',\n 'borderTop'\n ].forEach(function (key) {\n obj[key] = styles[key + 'Style'] == 'none' ? null : {\n size: 1,\n color: styles[key + 'Color']\n };\n });\n return obj;\n }\n function cellState(element) {\n var styles = window.getComputedStyle(element[0]);\n var text = element[0].innerText;\n var borders = borderObject(styles);\n var state = {\n value: text === '' ? null : text,\n borderBottom: borders.borderBottom,\n borderRight: borders.borderRight,\n borderLeft: borders.borderLeft,\n borderTop: borders.borderTop,\n fontSize: parseInt(styles['font-size'], 10)\n };\n if (styles['background-color'] !== 'rgb(0, 0, 0)' && styles['background-color'] !== 'rgba(0, 0, 0, 0)') {\n state.background = styles['background-color'];\n }\n if (styles.color !== 'rgb(0, 0, 0)' && styles.color !== 'rgba(0, 0, 0, 0)') {\n state.color = styles.color;\n }\n if (styles['text-decoration'] == 'underline') {\n state.underline = true;\n }\n if (styles['font-style'] == 'italic') {\n state.italic = true;\n }\n if (styles['font-weight'] == 'bold') {\n state.bold = true;\n }\n if (stripStyle(styles['text-align']) !== 'right') {\n state.textAlign = stripStyle(styles['text-align']);\n }\n if (styles['vertical-align'] !== 'middle') {\n state.verticalAlign = styles['vertical-align'];\n }\n if (styles['word-wrap'] !== 'normal') {\n state.wrap = true;\n }\n return state;\n }\n function parseHTML(table) {\n var state = newState();\n table.find('>tr, >tbody>tr').each(function (rowIndex, tr) {\n $(tr).find('>td, >th').each(function (colIndex, td) {\n var rowspan = parseInt($(td).attr('rowspan'), 10) - 1 || 0;\n var colspan = parseInt($(td).attr('colspan'), 10) - 1 || 0;\n var blankCell = '<td/>';\n var ci;\n if (rowspan) {\n var endRow = rowIndex + rowspan;\n for (var ri = rowIndex; ri <= endRow; ri++) {\n var row = table.find('tr').eq(ri);\n if (ri > rowIndex) {\n blankCell = '<td class=\\'rowspan\\'></td>';\n if (colIndex === 0) {\n row.find('td').eq(colIndex).after(blankCell);\n } else {\n var last = Math.min(row.find('td').length, colIndex);\n row.find('td').eq(last - 1).after(blankCell);\n }\n }\n if (colspan) {\n for (ci = colIndex; ci < colspan + colIndex; ci++) {\n blankCell = '<td class=\\'rowspan colspan\\'></td>';\n row.find('td').eq(ci).after(blankCell);\n }\n }\n }\n } else {\n if (colspan) {\n for (ci = colIndex; ci < colspan + colIndex; ci++) {\n blankCell = '<td class=\\'colspan\\'></td>';\n $(tr).find('td').eq(ci).after(blankCell);\n }\n }\n }\n });\n });\n table.find('>tr, >tbody>tr').each(function (rowIndex, tr) {\n $(tr).find('>td, >th').each(function (colIndex, td) {\n var rowspan = parseInt($(td).attr('rowspan'), 10) - 1 || 0;\n var colspan = parseInt($(td).attr('colspan'), 10) - 1 || 0;\n setStateData(state, rowIndex, colIndex, cellState($(td)));\n if (rowspan || colspan) {\n var startCol = String.fromCharCode(65 + colIndex);\n var endCol = String.fromCharCode(65 + colIndex + colspan);\n var address = startCol + (rowIndex + 1) + ':' + endCol + (rowIndex + 1 + rowspan);\n state.mergedCells.push(address);\n }\n });\n });\n return state;\n }\n function parseTSV(data) {\n var state = newState();\n if (data.indexOf('\\t') === -1 && data.indexOf('\\n') == -1) {\n setStateData(state, 0, 0, { value: data });\n } else {\n var rows = data.split('\\n');\n for (var ri = 0; ri < rows.length; ri++) {\n var cols = rows[ri].split('\\t');\n for (var ci = 0; ci < cols.length; ci++) {\n setStateData(state, ri, ci, { value: cols[ci] });\n }\n }\n }\n return state;\n }\n }(kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/range', [\n 'kendo.core',\n 'util/text-metrics'\n ], f);\n}(function () {\n (function (kendo) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var $ = kendo.jQuery;\n var UnionRef = kendo.spreadsheet.UnionRef;\n var CellRef = kendo.spreadsheet.CellRef;\n var RangeRef = kendo.spreadsheet.RangeRef;\n var PROPERTIES = [\n 'color',\n 'fontFamily',\n 'underline',\n 'italic',\n 'bold',\n 'textAlign',\n 'verticalAlign',\n 'background',\n 'format',\n 'link',\n 'editor'\n ];\n var borders = {\n borderTop: {\n complement: 'borderBottom',\n direction: {\n top: -1,\n bottom: -1\n }\n },\n borderLeft: {\n complement: 'borderRight',\n direction: {\n left: -1,\n right: -1\n }\n },\n borderRight: {\n complement: 'borderLeft',\n direction: {\n left: 1,\n right: 1\n }\n },\n borderBottom: {\n complement: 'borderTop',\n direction: {\n top: 1,\n bottom: 1\n }\n }\n };\n var Range = kendo.Class.extend({\n init: function (ref, sheet) {\n this._sheet = sheet;\n this._ref = ref;\n },\n clone: function () {\n return new Range(this._ref.clone(), this._sheet);\n },\n skipHiddenCells: function () {\n var refs = [];\n var self = this, sheet = self._sheet;\n var skipHiddenRows = sheet.isHiddenRow.bind(sheet);\n var skipHiddenCols = sheet.isHiddenColumn.bind(sheet);\n self._ref.forEach(function add(ref) {\n if (ref instanceof UnionRef) {\n ref.forEach(add);\n } else {\n ref = self._normalize(ref.toRangeRef());\n var tl = ref.topLeft, br = ref.bottomRight;\n var rows = partition(tl.row, br.row, skipHiddenRows);\n var cols = partition(tl.col, br.col, skipHiddenCols);\n for (var i = 0; i < rows.length; ++i) {\n for (var j = 0; j < cols.length; ++j) {\n refs.push(new RangeRef(new CellRef(rows[i].begin, cols[j].begin), new CellRef(rows[i].end, cols[j].end)));\n }\n }\n }\n });\n return sheet.range(refs.length > 1 ? new UnionRef(refs) : refs[0]);\n },\n _normalize: function (ref) {\n return this._sheet._grid.normalize(ref);\n },\n _set: function (name, value, noTrigger) {\n var self = this;\n var sheet = self._sheet;\n self._ref.forEach(function (ref) {\n sheet._set(ref.toRangeRef(), name, value);\n });\n if (!noTrigger) {\n sheet.triggerChange({\n recalc: name == 'formula' || name == 'value' || name == 'validation',\n value: value,\n range: self,\n ref: self._ref\n });\n }\n return self;\n },\n _get: function (name) {\n return this._sheet._get(this._ref.toRangeRef(), name);\n },\n _property: function (name, value) {\n if (value === undefined) {\n return this._get(name);\n } else {\n return this._set(name, value);\n }\n },\n value: function (value) {\n if (value !== undefined) {\n this._set('formula', null, true);\n }\n return this._property('value', value);\n },\n resize: function (direction) {\n var ref = this._resizedRef(direction);\n return new Range(ref, this._sheet);\n },\n _resizedRef: function (direction) {\n return this._ref.map(function (ref) {\n return ref.toRangeRef().resize(direction);\n });\n },\n _border: function (property, value) {\n var result;\n var complement = borders[property].complement;\n var direction = borders[property].direction;\n var sheet = this._sheet;\n sheet.batch(function () {\n result = this._property(property, value);\n if (value !== undefined) {\n this._resizedRef(direction).forEach(function (ref) {\n if (ref !== kendo.spreadsheet.NULLREF) {\n new Range(ref, sheet)._property(complement, null);\n }\n });\n }\n }.bind(this), {});\n return result;\n },\n _collapsedBorder: function (property) {\n var result = this._property(property);\n var complement = borders[property].complement;\n var direction = borders[property].direction;\n this._resizedRef(direction).forEach(function (ref) {\n if (!result && ref !== kendo.spreadsheet.NULLREF) {\n var range = new Range(ref, this._sheet);\n result = range._property(complement);\n }\n }.bind(this));\n return result;\n },\n borderTop: function (value) {\n return this._border('borderTop', value);\n },\n borderRight: function (value) {\n return this._border('borderRight', value);\n },\n borderBottom: function (value) {\n return this._border('borderBottom', value);\n },\n borderLeft: function (value) {\n return this._border('borderLeft', value);\n },\n collapsedBorderTop: function () {\n return this._collapsedBorder('borderTop');\n },\n collapsedBorderRight: function () {\n return this._collapsedBorder('borderRight');\n },\n collapsedBorderBottom: function () {\n return this._collapsedBorder('borderBottom');\n },\n collapsedBorderLeft: function () {\n return this._collapsedBorder('borderLeft');\n },\n input: function (value) {\n var existingFormat = this._get('format'), x;\n if (value !== undefined) {\n var tl = this._ref.toRangeRef().topLeft;\n x = kendo.spreadsheet.calc.parse(this._sheet.name(), tl.row, tl.col, value);\n this._sheet.batch(function () {\n var formula = null;\n if (x.type == 'exp') {\n formula = kendo.spreadsheet.calc.compile(x);\n } else if (existingFormat != '@') {\n var existingFormatType = existingFormat && kendo.spreadsheet.formatting.type(x.value, existingFormat);\n if (x.type == 'date' && existingFormatType != 'date') {\n this.format(x.format || toExcelFormat(kendo.culture().calendar.patterns.d));\n } else if (x.type == 'percent' && existingFormatType != 'percent') {\n this.format(x.value * 100 == (x.value * 100 | 0) ? '0%' : '0.00%');\n } else if (x.format && !existingFormat) {\n this.format(x.format);\n }\n } else if (x.type != 'string') {\n x.value = value;\n }\n this.formula(formula);\n if (!formula) {\n this.value(x.value);\n }\n }.bind(this), {\n recalc: true,\n value: value,\n ref: this._ref,\n editorChange: this._sheet.isInEditMode()\n });\n return this;\n } else {\n value = this._get('value');\n var formula = this._get('formula');\n var type = existingFormat && !formula && kendo.spreadsheet.formatting.type(value, existingFormat);\n if (formula) {\n value = '=' + formula;\n } else\n OUT: {\n if (existingFormat && type == 'date') {\n var t1 = kendo.spreadsheet.formatting.text(value, existingFormat);\n x = kendo.spreadsheet.calc.parse(null, null, null, t1);\n if (typeof x.value == 'number') {\n var t2 = kendo.spreadsheet.formatting.text(x.value, existingFormat);\n if (t1 == t2) {\n value = t1;\n break OUT;\n }\n }\n }\n if (type === 'date') {\n value = kendo.toString(kendo.spreadsheet.numberToDate(value), kendo.culture().calendar.patterns.d);\n } else if (type === 'percent') {\n value = value * 100 + '%';\n } else if (typeof value == 'string' && (/^[=']/.test(value) || /^(?:true|false)$/i.test(value) || looksLikeANumber(value))) {\n value = '\\'' + value;\n }\n }\n return value;\n }\n },\n enable: function (value) {\n if (value === undefined) {\n value = true;\n this._sheet.forEach(this._ref.toRangeRef(), function (_, __, data) {\n if (data.enable === false) {\n value = false;\n }\n });\n return value;\n }\n return this._property('enable', value);\n },\n formula: function (value) {\n if (value === undefined) {\n var f = this._get('formula');\n return f ? '' + f : null;\n }\n return this._property('formula', value);\n },\n validation: function (value) {\n if (value === undefined) {\n var f = this._get('validation');\n return f ? f.toJSON() : null;\n }\n return this._property('validation', value);\n },\n _getValidationState: function () {\n var ref = this._ref.toRangeRef();\n var topLeftRow = ref.topLeft.row;\n var topLeftCol = ref.topLeft.col;\n var bottomRightRow = ref.bottomRight.row;\n var bottomRightCol = ref.bottomRight.col;\n var ci, ri;\n for (ci = topLeftCol; ci <= bottomRightCol; ci++) {\n for (ri = topLeftRow; ri <= bottomRightRow; ri++) {\n var validation = this._sheet._validation(ri, ci);\n if (validation && validation.type === 'reject' && validation.value === false) {\n return validation;\n }\n }\n }\n return false;\n },\n merge: function () {\n this._ref = this._sheet._merge(this._ref);\n return this;\n },\n unmerge: function () {\n var mergedCells = this._sheet._mergedCells;\n this._ref.forEach(function (ref) {\n ref.toRangeRef().intersecting(mergedCells).forEach(function (mergedRef) {\n mergedCells.splice(mergedCells.indexOf(mergedRef), 1);\n });\n });\n this._sheet.triggerChange({});\n return this;\n },\n select: function () {\n this._sheet.select(this._ref);\n return this;\n },\n values: function (values) {\n if (this._ref instanceof UnionRef) {\n throw new Error('Unsupported for multiple ranges.');\n }\n if (this._ref === kendo.spreadsheet.NULLREF) {\n if (values !== undefined) {\n throw new Error('Unsupported for NULLREF.');\n } else {\n return [];\n }\n }\n var ref = this._ref.toRangeRef();\n var topLeftRow = ref.topLeft.row;\n var topLeftCol = ref.topLeft.col;\n var bottomRightRow = ref.bottomRight.row;\n var bottomRightCol = ref.bottomRight.col;\n var ci, ri;\n if (values === undefined) {\n values = new Array(ref.height());\n for (var vi = 0; vi < values.length; vi++) {\n values[vi] = new Array(ref.width());\n }\n for (ci = topLeftCol; ci <= bottomRightCol; ci++) {\n for (ri = topLeftRow; ri <= bottomRightRow; ri++) {\n values[ri - topLeftRow][ci - topLeftCol] = this._sheet._value(ri, ci);\n }\n }\n return values;\n } else {\n this._sheet._set(ref, 'formula', null);\n for (ci = topLeftCol; ci <= bottomRightCol; ci++) {\n for (ri = topLeftRow; ri <= bottomRightRow; ri++) {\n var row = values[ri - topLeftRow];\n if (row) {\n var value = row[ci - topLeftCol];\n if (value !== undefined) {\n this._sheet._value(ri, ci, value);\n }\n }\n }\n }\n this._sheet.triggerChange({\n recalc: true,\n ref: ref\n });\n return this;\n }\n },\n _properties: function (props) {\n if (this._ref instanceof UnionRef) {\n throw new Error('Unsupported for multiple ranges.');\n }\n if (this._ref === kendo.spreadsheet.NULLREF) {\n if (props !== undefined) {\n throw new Error('Unsupported for NULLREF.');\n } else {\n return [];\n }\n }\n var ref = this._ref.toRangeRef();\n var topLeftRow = ref.topLeft.row;\n var topLeftCol = ref.topLeft.col;\n var bottomRightRow = ref.bottomRight.row;\n var bottomRightCol = ref.bottomRight.col;\n var ci, ri;\n var sheet = this._sheet;\n if (props === undefined) {\n props = new Array(ref.height());\n sheet.forEach(ref, function (row, col, data) {\n row -= topLeftRow;\n col -= topLeftCol;\n var line = props[row] || (props[row] = []);\n line[col] = data;\n });\n return props;\n } else {\n var data;\n ref = ref.clone();\n var setProp = function (propName) {\n var propValue = data[propName];\n ref.topLeft.row = ref.bottomRight.row = ri;\n ref.topLeft.col = ref.bottomRight.col = ci;\n if (propName == 'value') {\n sheet._set(ref, 'formula', null);\n }\n sheet._set(ref, propName, propValue);\n };\n for (ci = topLeftCol; ci <= bottomRightCol; ci++) {\n for (ri = topLeftRow; ri <= bottomRightRow; ri++) {\n var row = props[ri - topLeftRow];\n if (row) {\n data = row[ci - topLeftCol];\n if (data) {\n Object.keys(data).forEach(setProp);\n }\n }\n }\n }\n sheet.triggerChange({\n recalc: true,\n ref: this._ref\n });\n return this;\n }\n },\n clear: function (options) {\n var clearAll = !options || !Object.keys(options).length;\n var sheet = this._sheet;\n var reason = {\n recalc: clearAll || options && options.contentsOnly === true,\n ref: this._ref\n };\n sheet.batch(function () {\n if (reason.recalc) {\n this.formula(null);\n }\n if (clearAll) {\n this.validation(null);\n }\n if (clearAll || options && options.formatOnly === true) {\n PROPERTIES.forEach(function (x) {\n this[x](null);\n }.bind(this));\n this.unmerge();\n }\n }.bind(this), reason);\n return this;\n },\n clearContent: function () {\n return this.clear({ contentsOnly: true });\n },\n clearFormat: function () {\n return this.clear({ formatOnly: true });\n },\n isSortable: function () {\n return !this.cantSort();\n },\n cantSort: function () {\n if (this._ref instanceof UnionRef) {\n return {\n code: 'cantSortMultipleSelection',\n message: 'Unsupported for multiple ranges.'\n };\n }\n if (this._ref === kendo.spreadsheet.NULLREF) {\n return {\n code: 'cantSortNullRef',\n message: 'Unsupported for NULLREF.'\n };\n }\n var mc = this._sheet._getMergedCells(this._ref.toRangeRef());\n var primary = mc.primary;\n var secondary = mc.secondary;\n var width = null, height = null;\n var cant = {};\n try {\n this._sheet.forEach(this, function (row, col) {\n var id = new CellRef(row, col).print();\n var merged = primary[id];\n if (merged) {\n if (width === null) {\n width = merged.width();\n height = merged.height();\n } else if (!(width == merged.width() && height == merged.height())) {\n throw cant;\n }\n } else if (!secondary[id] && mc.hasMerged) {\n throw cant;\n }\n });\n } catch (ex) {\n if (ex !== cant) {\n throw ex;\n }\n return {\n code: 'cantSortMixedCells',\n message: 'Unsupported for range containing cells of different shapes.'\n };\n }\n return false;\n },\n sort: function (spec) {\n var reason = this.cantSort();\n if (reason) {\n throw new Error(reason.message);\n }\n if (spec === undefined) {\n spec = { column: 0 };\n }\n spec = spec instanceof Array ? spec : [spec];\n this._sheet._sortBy(this._ref.toRangeRef(), spec.map(function (spec, index) {\n if (typeof spec === 'number') {\n spec = { column: spec };\n }\n return {\n index: spec.column === undefined ? index : spec.column,\n ascending: spec.ascending === undefined ? true : spec.ascending\n };\n }));\n return this;\n },\n isFilterable: function () {\n return !(this._ref instanceof UnionRef);\n },\n filter: function (spec) {\n if (this._ref instanceof UnionRef) {\n throw new Error('Unsupported for multiple ranges.');\n }\n if (spec === false) {\n this.clearFilters();\n } else {\n spec = spec === true ? [] : spec instanceof Array ? spec : [spec];\n this._sheet._filterBy(this._ref.toRangeRef(), spec.map(function (spec, index) {\n return {\n index: spec.column === undefined ? index : spec.column,\n filter: spec.filter\n };\n }));\n }\n return this;\n },\n clearFilter: function (spec) {\n this._sheet.clearFilter(spec);\n },\n clearFilters: function () {\n var filter = this._sheet.filter();\n var spec = [];\n if (filter) {\n for (var i = 0; i < filter.columns.length; i++) {\n spec.push(i);\n }\n this._sheet.batch(function () {\n this.clearFilter(spec);\n this._filter = null;\n }, {\n layout: true,\n filter: true\n });\n }\n },\n hasFilter: function () {\n var filter = this._sheet.filter();\n return !!filter;\n },\n leftColumn: function () {\n return new Range(this._ref.leftColumn(), this._sheet);\n },\n rightColumn: function () {\n return new Range(this._ref.rightColumn(), this._sheet);\n },\n topRow: function () {\n return new Range(this._ref.topRow(), this._sheet);\n },\n bottomRow: function () {\n return new Range(this._ref.bottomRow(), this._sheet);\n },\n column: function (column) {\n return new Range(this._ref.toColumn(column), this._sheet);\n },\n row: function (row) {\n return new Range(this._ref.toRow(row), this._sheet);\n },\n forEachRow: function (callback) {\n this._ref.forEachRow(function (ref) {\n callback(new Range(ref, this._sheet));\n }.bind(this));\n },\n forEachColumn: function (callback) {\n this._ref.forEachColumn(function (ref) {\n callback(new Range(ref, this._sheet));\n }.bind(this));\n },\n sheet: function () {\n return this._sheet;\n },\n topLeft: function () {\n return this._ref.toRangeRef().topLeft;\n },\n intersectingMerged: function () {\n var sheet = this._sheet;\n var mergedCells = [];\n sheet._mergedCells.forEach(function (ref) {\n if (ref.intersects(this._ref)) {\n mergedCells.push(ref.toString());\n }\n }.bind(this));\n return mergedCells;\n },\n getState: function (propertyName) {\n var topLeft = this._ref.first();\n var state = {\n ref: topLeft,\n data: [],\n origRef: this._ref\n };\n var properties;\n if (!propertyName) {\n properties = kendo.spreadsheet.ALL_PROPERTIES;\n state.mergedCells = this.intersectingMerged();\n } else if (propertyName === 'input') {\n properties = [\n 'value',\n 'formula'\n ];\n } else if (propertyName === 'border') {\n properties = [\n 'borderLeft',\n 'borderTop',\n 'borderRight',\n 'borderBottom'\n ];\n } else {\n properties = [propertyName];\n }\n var data = state.data;\n this.forEachCell(function (row, col, cell) {\n var cellState = {};\n var dr = row - topLeft.row;\n var dc = col - topLeft.col;\n if (!data[dr]) {\n data[dr] = [];\n }\n data[dr][dc] = cellState;\n properties.forEach(function (property) {\n cellState[property] = typeof cell[property] == 'undefined' ? null : cell[property];\n });\n });\n return state;\n },\n setState: function (state, clipboard) {\n var sheet = this._sheet;\n var origin = this._ref.first();\n var rowDelta = state.ref.row - origin.row;\n var colDelta = state.ref.col - origin.col;\n sheet.batch(function () {\n if (state.mergedCells) {\n this.unmerge();\n }\n var row = origin.row;\n state.data.forEach(function (data, dr) {\n if (clipboard && !clipboard.isExternal() && sheet.isHiddenRow(state.ref.row + dr)) {\n return;\n }\n var col = origin.col;\n data.forEach(function (cellState, dc) {\n if (clipboard && !clipboard.isExternal() && sheet.isHiddenColumn(state.ref.col + dc)) {\n return;\n }\n var range = clipboard ? sheet.range(row, col) : sheet.range(origin.row + dr, origin.col + dc);\n if (range.enable()) {\n for (var property in cellState) {\n if (property != 'value') {\n if (!(clipboard && property == 'enable')) {\n range._set(property, cellState[property]);\n }\n }\n }\n if (!cellState.formula) {\n if (clipboard && clipboard.isExternal()) {\n try {\n if (cellState.value == null) {\n range._set('value', null);\n } else {\n range.input(cellState.value);\n }\n } catch (ex) {\n range._set('value', cellState.value);\n }\n } else {\n range._set('value', cellState.value);\n }\n }\n }\n col++;\n });\n row++;\n });\n if (state.mergedCells) {\n state.mergedCells.forEach(function (merged) {\n merged = sheet._ref(merged).relative(rowDelta, colDelta, 3);\n sheet.range(merged).merge();\n }, this);\n }\n }.bind(this), { recalc: true });\n },\n _adjustRowHeight: function () {\n var sheet = this._sheet;\n var state = this.getState();\n var mergedCells = [];\n for (var i = 0; i < state.mergedCells.length; i++) {\n mergedCells.push(sheet.range(state.mergedCells[i]));\n }\n this.forEachRow(function (row) {\n if (row.topLeft().row >= row.sheet()._rows._count) {\n return;\n }\n var maxHeight = row.sheet().rowHeight(row.topLeft().row);\n row.forEachCell(function (rowIndex, colIndex, cell) {\n var cellRange = sheet.range(rowIndex, colIndex);\n var totalWidth = 0;\n for (var i = 0; i < mergedCells.length; i++) {\n if (cellRange._ref.intersects(mergedCells[i]._ref)) {\n totalWidth += cell.width;\n break;\n }\n }\n var width = Math.max(sheet.columnWidth(colIndex), totalWidth);\n maxHeight = Math.max(maxHeight, kendo.spreadsheet.util.getTextHeight(cell.value, width, cell.fontSize, cell.wrap));\n });\n sheet.rowHeight(row.topLeft().row, Math.max(sheet.rowHeight(row.topLeft().row), maxHeight));\n });\n },\n forEachCell: function (callback) {\n this._ref.forEach(function (ref) {\n this._sheet.forEach(ref.toRangeRef(), callback.bind(this));\n }.bind(this));\n },\n hasValue: function () {\n var yesItHas = {};\n var defStyle = this._sheet._defaultCellStyle;\n try {\n this.forEachCell(function (row, col, cell) {\n for (var key in cell) {\n var val = cell[key];\n if (val !== undefined && val !== defStyle[key]) {\n throw yesItHas;\n }\n }\n });\n } catch (ex) {\n if (ex === yesItHas) {\n return true;\n } else {\n throw ex;\n }\n }\n return false;\n },\n wrap: function (flag) {\n if (flag === undefined) {\n return !!this._property('wrap');\n }\n this.forEachRow(function (range) {\n var maxHeight = range.sheet().rowHeight(range.topLeft().row);\n range.forEachCell(function (row, col, cell) {\n var width = this._sheet.columnWidth(col);\n if (cell.value !== null && cell.value !== undefined) {\n maxHeight = Math.max(maxHeight, kendo.spreadsheet.util.getTextHeight(cell.value, width, cell.fontSize, true));\n }\n });\n range.sheet().rowHeight(range.topLeft().row, maxHeight);\n }.bind(this));\n this._property('wrap', flag);\n return this;\n },\n fontSize: function (size) {\n if (size === undefined) {\n return this._property('fontSize');\n }\n this.forEachRow(function (range) {\n var maxHeight = range.sheet().rowHeight(range.topLeft().row);\n range.forEachCell(function (row, col, cell) {\n var width = this._sheet.columnWidth(col);\n if (cell.value !== null && cell.value !== undefined) {\n maxHeight = Math.max(maxHeight, kendo.spreadsheet.util.getTextHeight(cell.value, width, size, cell.wrap));\n }\n });\n range.sheet().rowHeight(range.topLeft().row, maxHeight);\n }.bind(this));\n this._property('fontSize', size);\n return this;\n },\n draw: function (options, callback) {\n this._sheet.draw(this, options, callback);\n }\n });\n function partition(begin, end, predicate) {\n while (begin <= end && predicate(begin)) {\n begin++;\n }\n if (begin > end) {\n return [];\n }\n for (var i = begin + 1; i <= end; ++i) {\n if (predicate(i)) {\n return [{\n begin: begin,\n end: i - 1\n }].concat(partition(i + 1, end, predicate));\n }\n }\n return [{\n begin: begin,\n end: end\n }];\n }\n $.each(PROPERTIES, function (i, property) {\n Range.prototype[property] = function (value) {\n return this._property(property, value);\n };\n });\n function toExcelFormat(format) {\n return format.replace(/M/g, 'm').replace(/'/g, '\"').replace(/tt/, 'am/pm');\n }\n function looksLikeANumber(str) {\n return !/^=/.test(str) && /number|percent/.test(kendo.spreadsheet.calc.parse(null, 0, 0, str).type);\n }\n var measureBox = $('<div style=\"position: absolute !important; top: -4000px !important; height: auto !important;' + 'padding: 1px !important; margin: 0 !important; border: 1px solid black !important;' + 'line-height: normal !important; visibility: hidden !important;' + 'white-space: pre-wrap; word-break: break-all;\" />')[0];\n function getTextHeight(text, width, fontSize, wrap) {\n var styles = {\n 'baselineMarkerSize': 0,\n 'width': wrap === true ? width + 'px' : 'auto',\n 'font-size': (fontSize || 12) + 'px',\n 'word-break': wrap === true ? 'break-all' : 'normal',\n 'white-space': wrap === true ? 'pre-wrap' : 'pre'\n };\n return kendo.util.measureText(text, styles, measureBox).height;\n }\n kendo.spreadsheet.util = { getTextHeight: getTextHeight };\n kendo.spreadsheet.Range = Range;\n }(window.kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/runtime', ['spreadsheet/references'], f);\n}(function () {\n 'use strict';\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var calc = {};\n var spreadsheet = kendo.spreadsheet;\n spreadsheet.calc = calc;\n var exports = calc.runtime = {};\n var Class = kendo.Class;\n var Ref = spreadsheet.Ref;\n var CellRef = spreadsheet.CellRef;\n var RangeRef = spreadsheet.RangeRef;\n var UnionRef = spreadsheet.UnionRef;\n var NULL = spreadsheet.NULLREF;\n function CalcError(code) {\n if (code instanceof CalcError) {\n return code;\n }\n this.code = code;\n }\n CalcError.prototype.toString = function () {\n return '#' + this.code + (this.code == 'NAME' ? '?' : '!');\n };\n var Context = Class.extend({\n init: function Context(callback, formula, ss, parent) {\n this.callback = callback;\n this.formula = formula;\n this.ss = ss;\n this.parent = parent;\n },\n resolve: function (val) {\n var self = this;\n if (val instanceof Ref) {\n self.resolveCells([val], function () {\n self._resolve(val);\n });\n } else {\n self._resolve(val);\n }\n },\n error: function (val) {\n return new CalcError(val);\n },\n _resolve: function (val) {\n if (val === undefined) {\n val = null;\n } else if (Array.isArray(val)) {\n val = this.asMatrix(val);\n } else {\n val = maybeRoundFloatErrors(val);\n }\n var f = this.formula;\n f.value = val;\n if (this.ss.onFormula(f) && this.callback) {\n this.callback.call(f, val);\n }\n },\n resolveCells: function (a, f) {\n var context = this, formulas = [];\n (function loop(a) {\n for (var i = 0; i < a.length; ++i) {\n var x = a[i];\n if (x instanceof Ref) {\n add(context.getRefCells(x));\n }\n if (Array.isArray(x)) {\n loop(x);\n }\n }\n }(a));\n if (!formulas.length) {\n return f.call(context);\n }\n for (var pending = formulas.length, i = 0; i < formulas.length; ++i) {\n fetch(formulas[i]);\n }\n function fetch(formula) {\n formula.exec(context.ss, function () {\n if (!--pending) {\n f.call(context);\n }\n }, context);\n }\n function add(a) {\n for (var i = 0; i < a.length; ++i) {\n var cell = a[i];\n if (cell.formula) {\n formulas.push(cell.formula);\n }\n }\n return true;\n }\n },\n cellValues: function (a, f) {\n var ret = [];\n for (var i = 0; i < a.length; ++i) {\n var val = a[i];\n if (val instanceof Ref) {\n val = this.getRefData(val);\n ret = ret.concat(val);\n } else if (Array.isArray(val)) {\n ret = ret.concat(this.cellValues(val));\n } else if (val instanceof Matrix) {\n ret = ret.concat(this.cellValues(val.data));\n } else {\n ret.push(val);\n }\n }\n if (f) {\n return f.apply(this, ret);\n }\n return ret;\n },\n fetchName: function (ref, callback) {\n var f = this.formula;\n var val = this.ss.nameValue(ref, f.sheet, f.row, f.col);\n if (val instanceof Formula) {\n val = val.clone(f.sheet, f.row, f.col, true);\n var ss = new spreadsheet.ValidationFormulaContext(this.ss.workbook);\n val.exec(ss, callback, this);\n } else {\n if (val instanceof Ref) {\n val = val.absolute(f.row, f.col);\n if (!val.sheet) {\n val.sheet = f.sheet;\n }\n }\n callback(val == null ? new CalcError('NAME') : val);\n }\n },\n force: function (val) {\n if (val instanceof Ref) {\n return this.getRefData(val);\n }\n return val;\n },\n func: function (fname, callback, args) {\n fname = fname.toLowerCase();\n var f = FUNCS[fname];\n if (f) {\n return f.call(this, callback, args);\n }\n callback(new CalcError('NAME'));\n },\n bool: function (val) {\n if (val instanceof Ref) {\n val = this.getRefData(val);\n }\n if (typeof val == 'string') {\n return val.toLowerCase() == 'true';\n }\n if (typeof val == 'number') {\n return val !== 0;\n }\n if (typeof val == 'boolean') {\n return val;\n }\n return val != null;\n },\n asMatrix: function (range) {\n if (range instanceof Matrix) {\n return range;\n }\n var self = this;\n if (range instanceof RangeRef) {\n var tl = range.topLeft;\n var top = tl.row, left = tl.col;\n var cells = self.getRefCells(range);\n var m = new Matrix(self);\n if (isFinite(range.width())) {\n m.width = range.width();\n }\n if (isFinite(range.height())) {\n m.height = range.height();\n }\n if (!isFinite(top)) {\n top = 0;\n }\n if (!isFinite(left)) {\n left = 0;\n }\n cells.forEach(function (cell) {\n m.set(cell.row - top, cell.col - left, cell.value);\n });\n return m;\n }\n if (Array.isArray(range) && range.length > 0) {\n var m = new Matrix(self), row = 0;\n range.forEach(function (line) {\n var col = 0;\n var h = 1;\n line.forEach(function (el) {\n var isRange = el instanceof RangeRef;\n if (el instanceof Ref && !isRange) {\n el = self.getRefData(el);\n }\n if (isRange || Array.isArray(el)) {\n el = self.asMatrix(el);\n }\n if (el instanceof Matrix) {\n el.each(function (el, r, c) {\n m.set(row + r, col + c, el);\n });\n h = Math.max(h, el.height);\n col += el.width;\n } else {\n m.set(row, col++, el);\n }\n });\n row += h;\n });\n return m;\n }\n },\n getRefCells: function (refs, hiddenInfo) {\n var f = this.formula;\n return this.ss.getRefCells(refs, hiddenInfo, f.sheet, f.row, f.col);\n },\n getRefData: function (ref) {\n var f = this.formula;\n return this.ss.getData(ref, f.sheet, f.row, f.col);\n },\n workbook: function () {\n return this.ss.workbook;\n }\n });\n var Matrix = Class.extend({\n init: function Matrix(context) {\n this.context = context;\n this.height = 0;\n this.width = 0;\n this.data = [];\n },\n clone: function () {\n var m = new Matrix(this.context);\n m.height = this.height;\n m.width = this.width;\n m.data = this.data.map(function (row) {\n return row.slice();\n });\n return m;\n },\n get: function (row, col) {\n var line = this.data[row];\n var val = line ? line[col] : null;\n return val instanceof Ref ? this.context.getRefData(val) : val;\n },\n set: function (row, col, data) {\n var line = this.data[row];\n if (line == null) {\n line = this.data[row] = [];\n }\n line[col] = data;\n if (row >= this.height) {\n this.height = row + 1;\n }\n if (col >= this.width) {\n this.width = col + 1;\n }\n },\n each: function (f, includeEmpty) {\n for (var row = 0; row < this.height; ++row) {\n for (var col = 0; col < this.width; ++col) {\n var val = this.get(row, col);\n if (includeEmpty || val != null) {\n val = f.call(this.context, val, row, col);\n if (val !== undefined) {\n return val;\n }\n }\n }\n }\n },\n map: function (f, includeEmpty) {\n var m = new Matrix(this.context);\n this.each(function (el, row, col) {\n m.set(row, col, f.call(this, el, row, col));\n }, includeEmpty);\n return m;\n },\n eachRow: function (f) {\n for (var row = 0; row < this.height; ++row) {\n var val = f.call(this.context, row);\n if (val !== undefined) {\n return val;\n }\n }\n },\n eachCol: function (f) {\n for (var col = 0; col < this.width; ++col) {\n var val = f.call(this.context, col);\n if (val !== undefined) {\n return val;\n }\n }\n },\n mapRow: function (f) {\n var m = new Matrix(this.context);\n this.eachRow(function (row) {\n m.set(row, 0, f.call(this.context, row));\n });\n return m;\n },\n mapCol: function (f) {\n var m = new Matrix(this.context);\n this.eachCol(function (col) {\n m.set(0, col, f.call(this.context, col));\n });\n return m;\n },\n toString: function () {\n return JSON.stringify(this.data);\n },\n transpose: function () {\n var m = new Matrix(this.context);\n this.each(function (el, row, col) {\n m.set(col, row, el);\n });\n return m;\n },\n unit: function (n) {\n this.width = this.height = n;\n var a = this.data = new Array(n);\n for (var i = n; --i >= 0;) {\n var row = a[i] = new Array(n);\n for (var j = n; --j >= 0;) {\n row[j] = i == j ? 1 : 0;\n }\n }\n return this;\n },\n multiply: function (b) {\n var a = this, m = new Matrix(a.context);\n for (var row = 0; row < a.height; ++row) {\n for (var col = 0; col < b.width; ++col) {\n var s = 0;\n for (var i = 0; i < a.width; ++i) {\n var va = a.get(row, i);\n var vb = b.get(i, col);\n if (typeof va != 'number' || typeof vb != 'number') {\n throw new CalcError('VALUE');\n }\n s += va * vb;\n }\n m.set(row, col, s);\n }\n }\n return m;\n },\n adds: function (b, s) {\n var a = this, m = new Matrix(a.context);\n var sign = s ? -1 : 1;\n for (var row = 0; row < a.height; ++row) {\n for (var col = 0; col < a.width; ++col) {\n var x = a.get(row, col), y = b.get(row, col);\n m.set(row, col, x + sign * y);\n }\n }\n return m;\n },\n determinant: function () {\n var a = this.clone().data;\n var n = a.length;\n var d = 1, C, L, i, k;\n for (C = 0; C < n; C++) {\n for (L = C; L < n && !a[L][C]; L++) {\n }\n if (L == n) {\n return 0;\n }\n if (L != C) {\n d = -d;\n for (k = C; k < n; k++) {\n var t = a[C][k];\n a[C][k] = a[L][k];\n a[L][k] = t;\n }\n }\n for (i = C + 1; i < n; i++) {\n for (k = C + 1; k < n; k++) {\n a[i][k] -= a[C][k] * a[i][C] / a[C][C];\n }\n }\n d *= a[C][C];\n }\n return d;\n },\n inverse: function () {\n var n = this.width;\n var m = this.augment(new Matrix(this.context).unit(n));\n var a = m.data;\n var tmp;\n for (var k = 0; k < n; ++k) {\n var imax = argmax(k, n, function (i) {\n return a[i][k];\n });\n if (!a[imax][k]) {\n return null;\n }\n if (k != imax) {\n tmp = a[k];\n a[k] = a[imax];\n a[imax] = tmp;\n }\n for (var i = k + 1; i < n; ++i) {\n for (var j = k + 1; j < 2 * n; ++j) {\n a[i][j] -= a[k][j] * a[i][k] / a[k][k];\n }\n a[i][k] = 0;\n }\n }\n for (var i = 0; i < n; ++i) {\n for (var f = a[i][i], j = 0; j < 2 * n; ++j) {\n a[i][j] /= f;\n }\n }\n for (var k = n; --k >= 0;) {\n for (var i = k; --i >= 0;) {\n if (a[i][k]) {\n for (var j = 2 * n; --j >= n;) {\n a[i][j] -= a[k][j] * a[i][k];\n }\n }\n }\n }\n return m.slice(0, n, n, n);\n },\n augment: function (m) {\n var ret = this.clone(), n = ret.width;\n m.each(function (val, row, col) {\n ret.set(row, col + n, val);\n });\n return ret;\n },\n slice: function (row, col, height, width) {\n var m = new Matrix(this.context);\n for (var i = 0; i < height; ++i) {\n for (var j = 0; j < width; ++j) {\n m.set(i, j, this.get(row + i, col + j));\n }\n }\n return m;\n }\n });\n function argmax(i, end, f) {\n var max = f(i), pos = i;\n while (++i < end) {\n var v = f(i);\n if (v > max) {\n max = v;\n pos = i;\n }\n }\n return pos;\n }\n var Formula = Class.extend({\n init: function Formula(refs, handler, printer, sheet, row, col) {\n this.refs = refs;\n this.handler = handler;\n this.print = printer;\n this.absrefs = null;\n this.sheet = sheet;\n this.row = row;\n this.col = col;\n this.onReady = [];\n this.pending = false;\n },\n clone: function (sheet, row, col, forceRefs) {\n var lcsheet = sheet.toLowerCase();\n var refs = this.refs;\n if (forceRefs || lcsheet != this.sheet.toLowerCase()) {\n refs = refs.map(function (ref) {\n if (!ref.hasSheet() && (!ref.sheet || ref.sheet.toLowerCase() != lcsheet)) {\n ref = ref.clone().setSheet(sheet);\n }\n return ref;\n });\n }\n return new Formula(refs, this.handler, this.print, sheet, row, col);\n },\n resolve: function (val) {\n this.pending = false;\n this.onReady.forEach(function (callback) {\n callback(val);\n });\n },\n exec: function (ss, callback, parentContext) {\n if ('value' in this) {\n if (callback) {\n callback(this.value);\n }\n } else {\n if (callback) {\n this.onReady.push(callback);\n }\n var ctx = new Context(this.resolve, this, ss, parentContext);\n var level = 0;\n while (parentContext) {\n if (parentContext.formula === this) {\n this.pending = false;\n ctx.resolve(new CalcError('CIRCULAR'));\n return;\n }\n parentContext = parentContext.parent;\n ++level;\n }\n if (this.pending) {\n return;\n }\n this.pending = true;\n var next = function () {\n if (!this.absrefs) {\n this.absrefs = this.refs.map(function (ref) {\n return ref.absolute(this.row, this.col);\n }, this);\n }\n this.handler.call(ctx);\n }.bind(this);\n if (level < 20) {\n next();\n } else {\n setTimeout(next, 0);\n }\n }\n },\n reset: function () {\n this.onReady = [];\n this.pending = false;\n delete this.value;\n },\n renameSheet: function (oldSheetName, newSheetName) {\n oldSheetName = oldSheetName.toLowerCase();\n this.absrefs = null;\n if (this.sheet.toLowerCase() == oldSheetName) {\n this.sheet = newSheetName;\n }\n this.refs.forEach(function (ref) {\n ref.renameSheet(oldSheetName, newSheetName);\n });\n },\n adjust: function (affectedSheet, operation, start, delta) {\n affectedSheet = affectedSheet.toLowerCase();\n var formulaRow = this.row;\n var formulaCol = this.col;\n var formulaSheet = this.sheet.toLowerCase();\n var formulaMoves = false;\n if (formulaSheet == affectedSheet) {\n if (operation == 'row' && formulaRow >= start) {\n this.row += delta;\n formulaMoves = true;\n }\n if (operation == 'col' && formulaCol >= start) {\n this.col += delta;\n formulaMoves = true;\n }\n }\n var newFormulaRow = this.row;\n var newFormulaCol = this.col;\n this.absrefs = null;\n this.refs = this.refs.map(function (ref) {\n if (ref === NULL) {\n return ref;\n }\n if (ref.sheet.toLowerCase() != affectedSheet) {\n if (formulaMoves) {\n if (operation == 'row' && formulaRow >= start) {\n ref = ref.relative(delta, 0);\n }\n if (operation == 'col' && formulaCol >= start) {\n ref = ref.relative(0, delta);\n }\n }\n return ref;\n }\n return ref.adjust(formulaRow, formulaCol, newFormulaRow, newFormulaCol, operation == 'row', start, delta);\n }, this);\n },\n toString: function () {\n return this.print(this.row, this.col);\n }\n });\n var FUNCS = Object.create(null);\n FUNCS['if'] = function (callback, args) {\n var self = this;\n var co = args[0], th = args[1], el = args[2];\n this.resolveCells([co], function () {\n var comatrix = self.asMatrix(co);\n if (comatrix) {\n th(function (th) {\n el(function (el) {\n var thmatrix = self.asMatrix(th);\n var elmatrix = self.asMatrix(el);\n callback(comatrix.map(function (val, row, col) {\n if (val instanceof CalcError) {\n return val;\n } else if (self.bool(val)) {\n return thmatrix ? thmatrix.get(row, col) : th;\n } else {\n return elmatrix ? elmatrix.get(row, col) : el;\n }\n }));\n });\n });\n } else {\n co = this.force(co);\n if (co instanceof CalcError) {\n callback(co);\n } else if (self.bool(co)) {\n th(callback);\n } else {\n el(callback);\n }\n }\n });\n };\n FUNCS['φ'] = function (callback) {\n callback((1 + Math.sqrt(5)) / 2);\n };\n function compileArgumentChecks(functionName, args) {\n var arrayArgs = 'function arrayArgs(args) { var xargs = [], width = 0, height = 0, arrays = [], i = 0; ';\n var resolve = 'function resolve(args, callback) { var toResolve = [], i = 0; ';\n var name, forced, main = '\\'use strict\\'; function check(args) { var stack = [], tmp, xargs = [], i = 0, m, err = \\'VALUE\\'; ', haveForced = false;\n var canBeArrayArg = false, hasArrayArgs = false;\n main += args.map(comp).join('');\n main += 'if (i < args.length) return new CalcError(\\'N/A\\'); ';\n main += 'return xargs; } ';\n arrayArgs += 'return { args: xargs, width: width, height: height, arrays: arrays }; } ';\n var f;\n if (haveForced) {\n resolve += 'this.resolveCells(toResolve, callback); } ';\n f = new Function('CalcError', 'round', main + resolve + arrayArgs + ' return { resolve: resolve, check: check, arrayArgs: arrayArgs };');\n } else {\n f = new Function('CalcError', 'round', main + ' return { check: check };');\n }\n f = f(CalcError, roundFloatErrors);\n if (!hasArrayArgs) {\n delete f.arrayArgs;\n }\n return f;\n function comp(x) {\n name = x[0];\n var code = '{ ';\n if (Array.isArray(name)) {\n arrayArgs += 'while (i < args.length) { ';\n resolve += 'while (i < args.length) { ';\n code += 'xargs.push(tmp = []); stack.push(xargs); xargs = tmp; ';\n code += 'while (i < args.length) { ';\n code += x.map(comp).join('');\n code += '} ';\n code += 'xargs = stack.pop(); ';\n resolve += '} ';\n arrayArgs += '} ';\n } else if (name == '+') {\n arrayArgs += 'while (i < args.length) { ';\n resolve += 'while (i < args.length) { ';\n code += 'if (i >= args.length) return new CalcError(\\'N/A\\'); ';\n code += 'xargs.push(tmp = []); stack.push(xargs); xargs = tmp; ';\n code += 'do { ';\n code += x.slice(1).map(comp).join('');\n code += '} while (i < args.length); ';\n code += 'xargs = stack.pop(); ';\n resolve += '} ';\n arrayArgs += '} ';\n } else if (name == '?') {\n code += 'if (!(' + cond(x[1]) + ')) return new CalcError(err); ';\n } else {\n var type = x[1];\n if (Array.isArray(type) && /^#?collect/.test(type[0])) {\n var n = type[2];\n force();\n code += 'try {' + 'var $' + name + ' = this.cellValues(args.slice(i';\n if (n) {\n code += ', i + ' + n;\n }\n code += ')).filter(function($' + name + '){ ';\n if (type[0] == 'collect') {\n code += 'if ($' + name + ' instanceof CalcError) throw $' + name + '; ';\n }\n code += 'return ' + cond(type[1]) + '; }, this); ';\n if (n) {\n code += 'i += ' + n + '; ';\n } else {\n code += 'i = args.length; ';\n }\n code += 'xargs.push($' + name + ')' + '} catch(ex) { if (ex instanceof CalcError) return ex; throw ex; } ';\n resolve += 'toResolve.push(args.slice(i)); ';\n } else if (type == 'rest') {\n code += 'xargs.push(args.slice(i)); i = args.length; ';\n } else {\n if (canBeArrayArg = /^\\*/.test(name)) {\n hasArrayArgs = true;\n name = name.substr(1);\n }\n code += 'var $' + name + ' = args[i++]; ';\n var allowError = false;\n if (/!$/.test(type)) {\n type = type.substr(0, type.length - 1);\n allowError = true;\n } else {\n code += 'if ($' + name + ' instanceof CalcError) return $' + name + '; ';\n }\n code += typeCheck(type, allowError) + 'xargs.push($' + name + '); ';\n }\n }\n code += '} ';\n return code;\n }\n function force() {\n if (forced) {\n return '$' + name + '';\n }\n haveForced = true;\n forced = true;\n resolve += 'toResolve.push(args[i++]); ';\n return '($' + name + ' = this.force($' + name + '))';\n }\n function forceNum(round) {\n return '(' + (round ? '(typeof ' + force() + ' == \\'number\\' ? ($' + name + ' = round($' + name + '), true) : false) || ' : '(typeof ' + force() + ' == \\'number\\') || ') + '(typeof $' + name + ' == \\'boolean\\') || ' + '(typeof $' + name + ' == \\'string\\' && !/^(?:=|true|false)/i.test($' + name + ') ? (' + 'tmp = kendo.spreadsheet.calc.parse(0, 0, 0, $' + name + '), ' + '/^date|number|percent$/.test(tmp.type) ? ($' + name + ' = +tmp.value, true) : false' + ') : false)' + ')';\n }\n function typeCheck(type, allowError) {\n forced = false;\n var ret = 'if (!(' + cond(type) + ')) { ';\n if (forced && !allowError) {\n ret += ' if ($' + name + ' instanceof CalcError) return $' + name + '; ';\n }\n ret += 'return new CalcError(err); } ';\n if (!forced) {\n resolve += 'i++; ';\n }\n if (canBeArrayArg) {\n arrayArgs += 'var $' + name + ' = this.asMatrix(args[i]); ' + 'if ($' + name + ') { ' + 'xargs.push($' + name + '); ' + 'width = Math.max(width, $' + name + '.width); ' + 'height = Math.max(height, $' + name + '.height); ' + 'arrays.push(true) } else { ' + 'xargs.push(args[i]); ' + 'arrays.push(false); } i++; ';\n } else {\n arrayArgs += 'xargs.push(args[i++]); arrays.push(false); ';\n }\n return ret;\n }\n function cond(type) {\n if (Array.isArray(type)) {\n if (type[0] == 'or') {\n return '(' + type.slice(1).map(cond).join(') || (') + ')';\n }\n if (type[0] == 'and') {\n return '(' + type.slice(1).map(cond).join(') && (') + ')';\n }\n if (type[0] == 'values') {\n return '(' + type.slice(1).map(function (val) {\n return force() + ' === ' + val;\n }).join(') || (') + ')';\n }\n if (type[0] == 'null') {\n return '(' + cond('null') + ' ? (($' + name + ' = ' + type[1] + '), true) : false)';\n }\n if (type[0] == 'between' || type[0] == '[between]') {\n return '(' + force() + ' >= ' + type[1] + ' && ' + '$' + name + ' <= ' + type[2] + ' ? true : ((err = \\'NUM\\'), false))';\n }\n if (type[0] == '(between)') {\n return '(' + force() + ' > ' + type[1] + ' && ' + '$' + name + ' < ' + type[2] + ' ? true : ((err = \\'NUM\\'), false))';\n }\n if (type[0] == '(between]') {\n return '(' + force() + ' > ' + type[1] + ' && ' + '$' + name + ' <= ' + type[2] + ' ? true : ((err = \\'NUM\\'), false))';\n }\n if (type[0] == '[between)') {\n return '(' + force() + ' >= ' + type[1] + ' && ' + '$' + name + ' < ' + type[2] + ' ? true : ((err = \\'NUM\\'), false))';\n }\n if (type[0] == 'assert') {\n var err = type[2] || 'N/A';\n return '((' + type[1] + ') ? true : (err = ' + JSON.stringify(err) + ', false))';\n }\n if (type[0] == 'not') {\n return '!(' + cond(type[1]) + ')';\n }\n throw new Error('Unknown array type condition: ' + type[0]);\n }\n if (type == 'number' || type == 'datetime') {\n return forceNum(true);\n }\n if (type == 'integer' || type == 'date') {\n return '(' + forceNum() + ' && (($' + name + ' |= 0), true))';\n }\n if (type == 'divisor') {\n return '(' + forceNum(true) + ' && ($' + name + ' == 0 ? ((err = \\'DIV/0\\'), false) : true))';\n }\n if (type == 'number+') {\n return '(' + forceNum(true) + ' && ($' + name + ' >= 0 ? true : ((err = \\'NUM\\'), false)))';\n }\n if (type == 'integer+') {\n return '(' + forceNum() + ' && (($' + name + ' |= 0) >= 0 ? true : ((err = \\'NUM\\'), false)))';\n }\n if (type == 'number++') {\n return '(' + forceNum(true) + ' && ($' + name + ' > 0 ? true : ((err = \\'NUM\\'), false)))';\n }\n if (type == 'integer++') {\n return '(' + forceNum() + ' && (($' + name + ' |= 0) > 0 ? true : ((err = \\'NUM\\'), false)))';\n }\n if (type == 'string') {\n return '((typeof ' + force() + ' == \\'string\\' || typeof $' + name + ' == \\'boolean\\' || typeof $' + name + ' == \\'number\\') ? ($' + name + ' += \\'\\', true) : ($' + name + ' === undefined ? (($' + name + ' = \\'\\'), true) : false))';\n }\n if (type == 'boolean') {\n return '(typeof ' + force() + ' == \\'boolean\\')';\n }\n if (type == 'logical') {\n return '(typeof ' + force() + ' == \\'boolean\\' || (typeof $' + name + ' == \\'number\\' ? ($' + name + ' = !!$' + name + ', true) : false))';\n }\n if (type == 'matrix') {\n force();\n return '((m = this.asMatrix($' + name + ')) ? ($' + name + ' = m) : false)';\n }\n if (type == '#matrix') {\n return '((m = this.asMatrix($' + name + ')) ? ($' + name + ' = m) : false)';\n }\n if (type == 'ref') {\n return '($' + name + ' instanceof kendo.spreadsheet.Ref)';\n }\n if (type == 'area') {\n return '($' + name + ' instanceof kendo.spreadsheet.CellRef || $' + name + ' instanceof kendo.spreadsheet.RangeRef)';\n }\n if (type == 'cell') {\n return '($' + name + ' instanceof kendo.spreadsheet.CellRef)';\n }\n if (type == 'null') {\n return '(' + force() + ' == null)';\n }\n if (type == 'anyvalue') {\n return '(' + force() + ' != null && i <= args.length)';\n }\n if (type == 'forced') {\n return '(' + force() + ', i <= args.length)';\n }\n if (type == 'anything') {\n return '(i <= args.length)';\n }\n if (type == 'blank') {\n return '(' + force() + ' == null || $' + name + ' === \\'\\')';\n }\n throw new Error('Can\\'t check for type: ' + type);\n }\n }\n function roundFloatErrors(num) {\n var integer = Math.floor(num);\n var decimal = num - integer;\n return integer + Math.round(decimal * 1000000000000000) / 1000000000000000;\n }\n function maybeRoundFloatErrors(num) {\n if (typeof num == 'number') {\n return roundFloatErrors(num);\n } else {\n return num;\n }\n }\n function withErrorHandling(obj, f, args) {\n if (args instanceof CalcError) {\n return args;\n }\n try {\n return f.apply(obj, args);\n } catch (ex) {\n if (ex instanceof CalcError) {\n return ex;\n } else {\n throw ex;\n }\n }\n }\n function makeSyncFunction(handler, resolve, check, arrayArgs) {\n return function (callback, args) {\n function doit() {\n if (arrayArgs) {\n var x = arrayArgs.call(this, args);\n args = x.args;\n if (x.width > 0 && x.height > 0) {\n var result = new Matrix(this);\n for (var row = 0; row < x.height; ++row) {\n for (var col = 0; col < x.width; ++col) {\n var xargs = [];\n for (var i = 0; i < args.length; ++i) {\n if (x.arrays[i]) {\n var m = args[i];\n xargs[i] = m.get(row % m.height, col % m.width);\n } else {\n xargs[i] = args[i];\n }\n }\n xargs = check.call(this, xargs);\n result.set(row, col, withErrorHandling(this, handler, xargs));\n }\n }\n return callback(result);\n }\n }\n var xargs = check.call(this, args);\n callback(withErrorHandling(this, handler, xargs));\n }\n if (resolve) {\n resolve.call(this, args, doit);\n } else {\n doit.call(this);\n }\n };\n }\n function makeAsyncFunction(handler, resolve, check, arrayArgs) {\n return function (callback, args) {\n function doit() {\n if (arrayArgs) {\n var x = arrayArgs.call(this, args);\n args = x.args;\n if (x.width > 0 && x.height > 0) {\n var result = new Matrix(this);\n var count = x.width * x.height;\n var makeCallback = function (row, col) {\n return function (value) {\n result.set(row, col, value);\n --count;\n if (count === 0) {\n return callback(result);\n }\n };\n };\n for (var row = 0; row < x.height && count > 0; ++row) {\n for (var col = 0; col < x.width && count > 0; ++col) {\n var xargs = [];\n for (var i = 0; i < args.length; ++i) {\n if (x.arrays[i]) {\n var m = args[i];\n xargs[i] = m.get(row % m.height, col % m.width);\n } else {\n xargs[i] = args[i];\n }\n }\n xargs = check.call(this, xargs);\n if (xargs instanceof CalcError) {\n result.set(row, col, xargs);\n --count;\n if (count === 0) {\n return callback(result);\n }\n } else {\n xargs.unshift(makeCallback(row, col));\n handler.apply(this, xargs);\n }\n }\n }\n return;\n }\n }\n var x = check.call(this, args);\n if (x instanceof CalcError) {\n callback(x);\n } else {\n x.unshift(callback);\n handler.apply(this, x);\n }\n }\n if (resolve) {\n resolve.call(this, args, doit);\n } else {\n doit.call(this);\n }\n };\n }\n function defineFunction(name, func) {\n name = name.toLowerCase();\n FUNCS[name] = func;\n return {\n args: function (args, log) {\n var code = compileArgumentChecks(name, args);\n if (log) {\n if (code.arrayArgs) {\n console.log(code.arrayArgs.toString());\n }\n if (code.resolve) {\n console.log(code.resolve.toString());\n }\n if (code.check) {\n console.log(code.check.toString());\n }\n }\n var f = FUNCS[name] = makeSyncFunction(func, code.resolve, code.check, code.arrayArgs);\n f.kendoSpreadsheetArgs = args;\n return this;\n },\n argsAsync: function (args, log) {\n var code = compileArgumentChecks(name, args);\n if (log) {\n if (code.arrayArgs) {\n console.log(code.arrayArgs.toString());\n }\n if (code.resolve) {\n console.log(code.resolve.toString());\n }\n if (code.check) {\n console.log(code.check.toString());\n }\n }\n var f = FUNCS[name] = makeAsyncFunction(func, code.resolve, code.check, code.arrayArgs);\n f.kendoSpreadsheetArgs = args;\n return this;\n }\n };\n }\n function dateToJulianDays(y, m, d) {\n m++;\n return (1461 * (y + 4800 + ((m - 14) / 12 | 0)) / 4 | 0) + (367 * (m - 2 - 12 * ((m - 14) / 12 | 0)) / 12 | 0) - (3 * ((y + 4900 + ((m - 14) / 12 | 0)) / 100 | 0) / 4 | 0) + d - 32075;\n }\n function julianDaysToDate(jd) {\n var l, n, j, i, m, d, y;\n l = jd + 68569;\n n = 4 * l / 146097 | 0;\n l = l - ((146097 * n + 3) / 4 | 0);\n i = 4000 * (l + 1) / 1461001 | 0;\n l = l - (1461 * i / 4 | 0) + 31;\n j = 80 * l / 2447 | 0;\n d = l - (2447 * j / 80 | 0);\n l = j / 11 | 0;\n m = j + 2 - 12 * l;\n y = 100 * (n - 49) + i + l;\n m--;\n return {\n year: y,\n month: m,\n date: d,\n day: (jd + 1) % 7,\n ord: ORDINAL_ADD_DAYS[isLeapYear(y)][m] + d\n };\n }\n var BASE_DATE = dateToJulianDays(1900, 0, -1);\n var DAYS_IN_MONTH = [\n 31,\n 28,\n 31,\n 30,\n 31,\n 30,\n 31,\n 31,\n 30,\n 31,\n 30,\n 31\n ];\n var ORDINAL_ADD_DAYS = [\n [\n 0,\n 31,\n 59,\n 90,\n 120,\n 151,\n 181,\n 212,\n 243,\n 273,\n 304,\n 334\n ],\n [\n 0,\n 31,\n 60,\n 91,\n 121,\n 152,\n 182,\n 213,\n 244,\n 274,\n 305,\n 335\n ]\n ];\n function isLeapYear(yr) {\n if (yr % 4) {\n return 0;\n }\n if (yr % 100) {\n return 1;\n }\n if (yr % 400) {\n return 0;\n }\n return 1;\n }\n function daysInYear(yr) {\n return isLeapYear(yr) ? 366 : 365;\n }\n function daysInMonth(yr, mo) {\n return isLeapYear(yr) && mo == 1 ? 29 : DAYS_IN_MONTH[mo];\n }\n function unpackDate(serial) {\n return julianDaysToDate((serial | 0) + BASE_DATE);\n }\n function packDate(year, month, date) {\n return dateToJulianDays(year, month, date) - BASE_DATE;\n }\n var MS_IN_MIN = 60 * 1000;\n var MS_IN_HOUR = 60 * MS_IN_MIN;\n var MS_IN_DAY = 24 * MS_IN_HOUR;\n function unpackTime(serial) {\n var frac = serial - (serial | 0);\n if (frac < 0) {\n frac++;\n }\n var ms = Math.round(MS_IN_DAY * frac);\n var hours = Math.floor(ms / MS_IN_HOUR);\n ms -= hours * MS_IN_HOUR;\n var minutes = Math.floor(ms / MS_IN_MIN);\n ms -= minutes * MS_IN_MIN;\n var seconds = Math.floor(ms / 1000);\n ms -= seconds * 1000;\n return {\n hours: hours,\n minutes: minutes,\n seconds: seconds,\n milliseconds: ms\n };\n }\n function serialToDate(serial) {\n var d = unpackDate(serial), t = unpackTime(serial);\n return new Date(d.year, d.month, d.date, t.hours, t.minutes, t.seconds, t.milliseconds);\n }\n function packTime(hh, mm, ss, ms) {\n return (hh + (mm + (ss + ms / 1000) / 60) / 60) / 24;\n }\n function dateToSerial(date) {\n var time = packTime(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n date = packDate(date.getFullYear(), date.getMonth(), date.getDate());\n if (date < 0) {\n return date - 1 + time;\n } else {\n return date + time;\n }\n }\n function parseDate(str) {\n return kendo.parseDate(str) || kendo.parseDate(str, [\n 'MMMM dd yyyy',\n 'MMMM dd yy',\n 'MMM dd yyyy',\n 'MMM dd yy',\n 'dd MMMM yyyy',\n 'dd MMMM yy',\n 'dd MMM yyyy',\n 'dd MMM yy',\n 'MMMM dd, yyyy',\n 'MMMM dd, yy',\n 'MMM dd, yyyy',\n 'MMM dd, yy',\n 'MMMM dd',\n 'MMM dd',\n 'MMMM yyyy',\n 'MMM yyyy',\n 'dd MMMM',\n 'dd MMM'\n ]);\n }\n exports.CalcError = CalcError;\n exports.Formula = Formula;\n exports.Matrix = Matrix;\n exports.packDate = packDate;\n exports.unpackDate = unpackDate;\n exports.packTime = packTime;\n exports.unpackTime = unpackTime;\n exports.serialToDate = serialToDate;\n exports.dateToSerial = dateToSerial;\n exports.daysInMonth = daysInMonth;\n exports.isLeapYear = isLeapYear;\n exports.daysInYear = daysInYear;\n exports.parseDate = parseDate;\n spreadsheet.dateToNumber = dateToSerial;\n spreadsheet.numberToDate = serialToDate;\n spreadsheet.defineFunction = defineFunction;\n spreadsheet.CalcError = CalcError;\n exports.defineFunction = defineFunction;\n exports.defineAlias = function (alias, name) {\n var orig = FUNCS[name];\n if (!orig) {\n throw new Error('Function ' + name + ' is not yet defined');\n }\n if (!orig.kendoSpreadsheetAliases) {\n orig.kendoSpreadsheetAliases = [name];\n }\n orig.kendoSpreadsheetAliases.push(alias);\n FUNCS[alias] = orig;\n };\n exports.FUNCS = FUNCS;\n var NUMBER_OR_ZERO = [\n 'or',\n 'number',\n [\n 'null',\n 0\n ]\n ];\n var ARGS_NUMERIC = [\n [\n '*a',\n NUMBER_OR_ZERO\n ],\n [\n '*b',\n NUMBER_OR_ZERO\n ]\n ];\n var ARGS_ANYVALUE = [\n [\n '*a',\n [\n 'or',\n 'anyvalue',\n [\n 'null',\n 0\n ]\n ]\n ],\n [\n '*b',\n [\n 'or',\n 'anyvalue',\n [\n 'null',\n 0\n ]\n ]\n ]\n ];\n defineFunction('binary+', function (a, b) {\n return a + b;\n }).args(ARGS_NUMERIC);\n defineFunction('binary-', function (a, b) {\n return a - b;\n }).args(ARGS_NUMERIC);\n defineFunction('binary*', function (a, b) {\n return a * b;\n }).args(ARGS_NUMERIC);\n defineFunction('binary/', function (a, b) {\n return a / b;\n }).args([\n [\n '*a',\n NUMBER_OR_ZERO\n ],\n [\n '*b',\n 'divisor'\n ]\n ]);\n defineFunction('binary^', function (a, b) {\n return Math.pow(a, b);\n }).args(ARGS_NUMERIC);\n defineFunction('binary&', function (a, b) {\n if (a == null) {\n a = '';\n }\n if (b == null) {\n b = '';\n }\n return '' + a + b;\n }).args([\n [\n '*a',\n [\n 'or',\n 'number',\n 'string',\n 'boolean',\n 'null'\n ]\n ],\n [\n '*b',\n [\n 'or',\n 'number',\n 'string',\n 'boolean',\n 'null'\n ]\n ]\n ]);\n defineFunction('binary=', function (a, b) {\n return a === b;\n }).args(ARGS_ANYVALUE);\n defineFunction('binary<>', function (a, b) {\n return a !== b;\n }).args(ARGS_ANYVALUE);\n defineFunction('binary<', binaryCompare(function (a, b) {\n return a < b;\n })).args(ARGS_ANYVALUE);\n defineFunction('binary<=', binaryCompare(function (a, b) {\n return a <= b;\n })).args(ARGS_ANYVALUE);\n defineFunction('binary>', binaryCompare(function (a, b) {\n return a > b;\n })).args(ARGS_ANYVALUE);\n defineFunction('binary>=', binaryCompare(function (a, b) {\n return a >= b;\n })).args(ARGS_ANYVALUE);\n defineFunction('unary+', function (a) {\n return a;\n }).args([[\n '*a',\n NUMBER_OR_ZERO\n ]]);\n defineFunction('unary-', function (a) {\n return -a;\n }).args([[\n '*a',\n NUMBER_OR_ZERO\n ]]);\n defineFunction('unary%', function (a) {\n return a / 100;\n }).args([[\n '*a',\n NUMBER_OR_ZERO\n ]]);\n defineFunction('binary:', function (a, b) {\n return new RangeRef(a, b).setSheet(a.sheet || this.formula.sheet, a.hasSheet());\n }).args([\n [\n 'a',\n 'cell'\n ],\n [\n 'b',\n 'cell'\n ]\n ]);\n defineFunction('binary,', function (a, b) {\n return new UnionRef([\n a,\n b\n ]);\n }).args([\n [\n 'a',\n 'ref'\n ],\n [\n 'b',\n 'ref'\n ]\n ]);\n defineFunction('binary ', function (a, b) {\n return a.intersect(b);\n }).args([\n [\n 'a',\n 'ref'\n ],\n [\n 'b',\n 'ref'\n ]\n ]);\n defineFunction('not', function (a) {\n return !this.bool(a);\n }).args([[\n '*a',\n [\n 'or',\n 'anyvalue',\n [\n 'null',\n 0\n ]\n ]\n ]]);\n defineFunction('isblank', function (val) {\n if (val instanceof CellRef) {\n val = this.getRefData(val);\n return val == null;\n }\n return false;\n }).args([[\n '*value',\n 'anything!'\n ]]);\n defineFunction('iserror', function (val) {\n return val instanceof CalcError;\n }).args([[\n '*value',\n 'forced!'\n ]]);\n defineFunction('iserr', function (val) {\n return val instanceof CalcError && val.code != 'N/A';\n }).args([[\n '*value',\n 'forced!'\n ]]);\n defineFunction('isna', function (val) {\n return val instanceof CalcError && val.code == 'N/A';\n }).args([[\n '*value',\n 'forced!'\n ]]);\n defineFunction('islogical', function (val) {\n return typeof val == 'boolean';\n }).args([[\n '*value',\n 'forced!'\n ]]);\n defineFunction('isnontext', function (val) {\n return typeof val != 'string';\n }).args([[\n '*value',\n 'forced!'\n ]]);\n defineFunction('istext', function (val) {\n return typeof val == 'string';\n }).args([[\n '*value',\n 'forced!'\n ]]);\n defineFunction('isnumber', function (val) {\n return typeof val == 'number';\n }).args([[\n '*value',\n 'forced!'\n ]]);\n defineFunction('isref', function (val) {\n return val instanceof CellRef || val instanceof RangeRef;\n }).args([[\n '*value',\n 'anything!'\n ]]);\n FUNCS[',getname'] = function (callback, args) {\n this.fetchName(args[0], callback);\n };\n function binaryCompare(func) {\n return function (left, right) {\n if (typeof left == 'string' && typeof right != 'string') {\n right = right == null ? '' : right + '';\n }\n if (typeof left != 'string' && typeof right == 'string') {\n left = left == null ? '' : left + '';\n }\n if (typeof left == 'number' && right == null) {\n right = 0;\n }\n if (typeof right == 'number' && left == null) {\n left = 0;\n }\n if (typeof left == 'string' && typeof right == 'string') {\n left = left.toLowerCase();\n right = right.toLowerCase();\n }\n if (typeof right == typeof left) {\n return func(left, right);\n } else {\n return new CalcError('VALUE');\n }\n };\n }\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/validation', ['spreadsheet/runtime'], f);\n}(function () {\n 'use strict';\n var $ = kendo.jQuery;\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var spreadsheet = kendo.spreadsheet;\n var exports = {};\n spreadsheet.validation = exports;\n var calc = spreadsheet.calc;\n var Class = kendo.Class;\n var TRANSPOSE_FORMAT = '_matrix({0})';\n var DATE_FORMAT = 'DATEVALUE(\"{0}\")';\n calc.runtime.defineFunction('_matrix', function (m) {\n if (typeof m == 'string') {\n m = this.asMatrix([m.split(/\\s*,\\s*/)]);\n }\n return m;\n }).args([[\n 'm',\n [\n 'or',\n 'matrix',\n 'string'\n ]\n ]]);\n function compileValidation(sheet, row, col, validation) {\n var validationHandler;\n var comparer;\n var parsedFromDate;\n var parsedToDate;\n if (typeof validation === 'string') {\n validation = JSON.parse(validation);\n }\n if (validation.from) {\n if (validation.dataType === 'list' && !validation.fromIsListValue) {\n validation.from = kendo.format(TRANSPOSE_FORMAT, validation.from);\n validation.fromIsListValue = true;\n }\n if (validation.dataType === 'date') {\n parsedFromDate = calc.runtime.parseDate(validation.from);\n if (parsedFromDate) {\n validation.from = kendo.format(DATE_FORMAT, validation.from);\n validation.fromIsDateValue = true;\n }\n }\n validation.from = calc.compile(calc.parseFormula(sheet, row, col, validation.from));\n }\n if (validation.to) {\n if (validation.dataType === 'date') {\n parsedToDate = calc.runtime.parseDate(validation.to);\n if (parsedToDate) {\n validation.to = kendo.format(DATE_FORMAT, validation.to);\n validation.toIsDateValue = true;\n }\n }\n validation.to = calc.compile(calc.parseFormula(sheet, row, col, validation.to));\n }\n if (validation.dataType == 'custom') {\n comparer = exports.validationComparers.custom;\n } else if (validation.dataType == 'list') {\n comparer = exports.validationComparers.list;\n } else {\n comparer = exports.validationComparers[validation.comparerType];\n }\n if (!comparer) {\n throw kendo.format('\\'{0}\\' comparer is not implemented.', validation.comparerType);\n }\n validationHandler = function (valueToCompare) {\n var toValue = this.to && this.to_value ? this.to_value : undefined;\n if (valueToCompare === null || valueToCompare === '') {\n if (this.allowNulls) {\n this.value = true;\n } else {\n this.value = false;\n }\n } else if (this.dataType == 'custom') {\n this.value = comparer(valueToCompare, this.from_value, toValue);\n } else if (this.dataType == 'list') {\n var data = this._getListData();\n this.value = comparer(valueToCompare, data, toValue);\n } else {\n this.value = comparer(valueToCompare, this.from_value, toValue);\n }\n return this.value;\n };\n return new kendo.spreadsheet.validation.Validation($.extend(validation, {\n handler: validationHandler,\n sheet: sheet,\n row: row,\n col: col\n }));\n }\n var Validation = Class.extend({\n init: function Validation(options) {\n this.handler = options.handler;\n this.from = options.from;\n this.to = options.to;\n this.dataType = options.dataType;\n this.comparerType = options.comparerType;\n this.type = options.type ? options.type : 'warning';\n this.allowNulls = options.allowNulls ? true : false;\n this.fromIsDateValue = options.fromIsDateValue ? true : false;\n this.toIsDateValue = options.toIsDateValue ? true : false;\n this.showButton = options.showButton;\n this.fromIsListValue = options.fromIsListValue ? true : false;\n this.sheet = options.sheet;\n this.row = options.row;\n this.col = options.col;\n if (options.tooltipMessageTemplate) {\n this.tooltipMessageTemplate = options.tooltipMessageTemplate;\n }\n if (options.tooltipTitleTemplate) {\n this.tooltipTitleTemplate = options.tooltipTitleTemplate;\n }\n if (options.messageTemplate) {\n this.messageTemplate = options.messageTemplate;\n }\n if (options.titleTemplate) {\n this.titleTemplate = options.titleTemplate;\n }\n },\n _formatMessages: function (format) {\n var from = this.from ? this.from_value : '';\n var to = this.to ? this.to_value : '';\n var fromFormula = this.from ? this.from.toString() : '';\n var toFormula = this.to ? this.to.toString() : '';\n var dataType = this.dataType;\n var type = this.type;\n var comparerType = this.comparerType;\n return kendo.format(format, from, to, fromFormula, toFormula, dataType, type, comparerType);\n },\n _setMessages: function () {\n this.title = '';\n this.message = '';\n if (this.tooltipTitleTemplate) {\n this.tooltipTitle = this._formatMessages(this.tooltipTitleTemplate);\n }\n if (this.tooltipMessageTemplate) {\n this.tooltipMessage = this._formatMessages(this.tooltipMessageTemplate);\n }\n if (this.titleTemplate) {\n this.title = this._formatMessages(this.titleTemplate);\n }\n if (this.messageTemplate) {\n this.message = this._formatMessages(this.messageTemplate);\n }\n },\n _getListData: function () {\n if (!this.from_value || !this.from_value.data) {\n return [];\n }\n var cube = this.from_value.data;\n var i;\n var y;\n var data = [];\n for (i = 0; i < cube.length; i++) {\n var array = cube[i];\n if (array) {\n for (y = 0; y < array.length; y++) {\n data.push(array[y]);\n }\n }\n }\n return data;\n },\n clone: function (sheet, row, col) {\n var options = this._getOptions();\n if (options.from) {\n options.from = options.from.clone(sheet, row, col);\n }\n if (options.to) {\n options.to = options.to.clone(sheet, row, col);\n }\n return new Validation($.extend(options, { handler: this.handler }, {\n sheet: sheet,\n row: row,\n col: col\n }));\n },\n exec: function (ss, compareValue, compareFormat, callback) {\n var self = this;\n function getValue(val) {\n if (val instanceof kendo.spreadsheet.Ref) {\n val = ss.getData(val);\n if (Array.isArray(val)) {\n val = val[0];\n }\n }\n return val;\n }\n var calculateFromCallBack = function (val) {\n self.from_value = getValue(val);\n self.value = self.handler.call(self, compareValue, compareFormat);\n self._setMessages();\n if (callback) {\n callback(self.value);\n }\n };\n if (self.to) {\n self.to.exec(ss, function (val) {\n self.to_value = getValue(val);\n self.from.exec(ss, calculateFromCallBack);\n });\n } else {\n self.from.exec(ss, calculateFromCallBack);\n }\n },\n reset: function () {\n if (this.from) {\n this.from.reset();\n }\n if (this.to) {\n this.to.reset();\n }\n delete this.value;\n },\n adjust: function (affectedSheet, operation, start, delta) {\n if (this.from) {\n this.from.adjust(affectedSheet, operation, start, delta);\n }\n if (this.to) {\n this.to.adjust(affectedSheet, operation, start, delta);\n }\n if (this.sheet.toLowerCase() == affectedSheet.toLowerCase()) {\n var formulaRow = this.row;\n var formulaCol = this.col;\n switch (operation) {\n case 'row':\n if (formulaRow >= start) {\n this.row += delta;\n }\n break;\n case 'col':\n if (formulaCol >= start) {\n this.col += delta;\n }\n break;\n }\n }\n },\n toJSON: function () {\n var options = this._getOptions();\n if (options.from) {\n options.from = options.from.toString();\n if (options.dataType === 'list') {\n options.from = options.from.replace(/^_matrix\\((.*)\\)$/i, '$1');\n delete options.fromIsListValue;\n }\n if (options.dataType === 'date') {\n if (this.fromIsDateValue) {\n options.from = options.from.replace(/^DATEVALUE\\(\"(.*)\"\\)$/i, '$1');\n delete options.fromIsDateValue;\n }\n }\n }\n if (options.to) {\n options.to = options.to.toString();\n if (options.dataType === 'date') {\n if (this.toIsDateValue) {\n options.to = options.to.replace(/^DATEVALUE\\(\"(.*)\"\\)$/i, '$1');\n delete options.toIsDateValue;\n }\n }\n }\n return options;\n },\n _getOptions: function () {\n return {\n from: this.from,\n to: this.to,\n dataType: this.dataType,\n type: this.type,\n comparerType: this.comparerType,\n row: this.row,\n col: this.col,\n sheet: this.sheet,\n allowNulls: this.allowNulls,\n fromIsListValue: this.fromIsListValue,\n fromIsDateValue: this.fromIsDateValue,\n toIsDateValue: this.toIsDateValue,\n tooltipMessageTemplate: this.tooltipMessageTemplate,\n tooltipTitleTemplate: this.tooltipTitleTemplate,\n messageTemplate: this.messageTemplate,\n titleTemplate: this.titleTemplate,\n showButton: this.showButton\n };\n }\n });\n exports.compile = compileValidation;\n exports.validationComparers = {\n greaterThan: function (valueToCompare, from) {\n return valueToCompare > from;\n },\n lessThan: function (valueToCompare, from) {\n return valueToCompare < from;\n },\n between: function (valueToCompare, from, to) {\n return valueToCompare >= from && valueToCompare <= to;\n },\n equalTo: function (valueToCompare, from) {\n return valueToCompare == from;\n },\n notEqualTo: function (valueToCompare, from) {\n return valueToCompare != from;\n },\n greaterThanOrEqualTo: function (valueToCompare, from) {\n return valueToCompare >= from;\n },\n lessThanOrEqualTo: function (valueToCompare, from) {\n return valueToCompare <= from;\n },\n notBetween: function (valueToCompare, from, to) {\n return valueToCompare < from || valueToCompare > to;\n },\n custom: function (valueToCompare, from) {\n return from;\n },\n list: function (valueToCompare, data) {\n return data.indexOf(valueToCompare) > -1;\n }\n };\n exports.Validation = Validation;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/sheet', [\n 'kendo.core',\n 'kendo.color',\n 'spreadsheet/runtime',\n 'spreadsheet/validation',\n 'spreadsheet/references'\n ], f);\n}(function () {\n (function (kendo) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var RangeRef = kendo.spreadsheet.RangeRef;\n var CellRef = kendo.spreadsheet.CellRef;\n var Range = kendo.spreadsheet.Range;\n var Selection = kendo.Class.extend({\n init: function (sheet) {\n this._sheet = sheet;\n this.selection = kendo.spreadsheet.FIRSTREF.toRangeRef();\n this.originalSelection = kendo.spreadsheet.FIRSTREF.toRangeRef();\n this._activeCell = kendo.spreadsheet.FIRSTREF.toRangeRef();\n this.originalActiveCell = kendo.spreadsheet.FIRSTREF;\n },\n currentSelectionRange: function () {\n return this.selection.rangeAt(this.selectionRangeIndex).toRangeRef();\n },\n currentOriginalNavigationRange: function () {\n return this.originalSelection.rangeAt(this.selectionRangeIndex).toRangeRef();\n },\n currentNavigationRange: function () {\n if (this.singleCellSelection()) {\n return this._sheet._sheetRef;\n } else {\n return this.selection.rangeAt(this.selectionRangeIndex).toRangeRef();\n }\n },\n nextNavigationRange: function () {\n if (!this.singleCellSelection()) {\n this.selectionRangeIndex = this.selection.nextRangeIndex(this.selectionRangeIndex);\n }\n return this.currentNavigationRange();\n },\n previousNavigationRange: function () {\n if (!this.singleCellSelection()) {\n this.selectionRangeIndex = this.selection.previousRangeIndex(this.selectionRangeIndex);\n }\n return this.currentNavigationRange();\n },\n activeCell: function (ref) {\n if (ref) {\n this.originalActiveCell = ref.first();\n this._activeCell = this._sheet.unionWithMerged(ref.toRangeRef());\n this._sheet.focus(ref);\n this._sheet.triggerChange({\n activeCell: true,\n selection: true\n });\n }\n return this._activeCell;\n },\n select: function (ref, expanded, changeActiveCell) {\n if (ref) {\n if (ref.eq(this.originalSelection)) {\n return;\n }\n this._sheet.triggerSelect(new Range(ref, this._sheet));\n this.originalSelection = ref;\n this.selection = expanded;\n if (changeActiveCell !== false) {\n if (ref.isCell()) {\n this.activeCell(ref);\n } else {\n this.activeCell(this.selection.lastRange().first());\n }\n this.selectionRangeIndex = this.selection.size() - 1;\n } else {\n this._sheet.triggerChange({ selection: true });\n }\n }\n return this.selection;\n },\n singleCellSelection: function () {\n return this._activeCell.eq(this.selection);\n }\n });\n var Sheet = kendo.Observable.extend({\n init: function () {\n kendo.Observable.prototype.init.call(this);\n this._reinit.apply(this, arguments);\n },\n events: [\n 'commandRequest',\n 'afterInsertRow',\n 'afterDeleteRow',\n 'insertRow',\n 'insertColumn',\n 'deleteRow',\n 'deleteColumn',\n 'hideRow',\n 'hideColumn',\n 'unhideRow',\n 'unhideColumn',\n 'select'\n ],\n _reinit: function (rowCount, columnCount, rowHeight, columnWidth, headerHeight, headerWidth, defaultCellStyle) {\n var cellCount = rowCount * columnCount - 1;\n defaultCellStyle = defaultCellStyle || {};\n this._defaultCellStyle = {\n background: defaultCellStyle.background,\n color: defaultCellStyle.color,\n fontFamily: defaultCellStyle.fontFamily,\n fontSize: defaultCellStyle.fontSize,\n italic: defaultCellStyle.italic,\n bold: defaultCellStyle.bold,\n underline: defaultCellStyle.underline,\n wrap: defaultCellStyle.wrap\n };\n this._rows = new kendo.spreadsheet.Axis(rowCount, rowHeight);\n this._columns = new kendo.spreadsheet.Axis(columnCount, columnWidth);\n this._mergedCells = [];\n this._frozenRows = 0;\n this._frozenColumns = 0;\n this._suspendChanges = false;\n this._filter = null;\n this._showGridLines = true;\n this._gridLinesColor = null;\n this._grid = new kendo.spreadsheet.Grid(this._rows, this._columns, rowCount, columnCount, headerHeight, headerWidth);\n this._sheetRef = this._grid.normalize(kendo.spreadsheet.SHEETREF);\n this._properties = new kendo.spreadsheet.PropertyBag(cellCount, this._defaultCellStyle);\n this._sorter = new kendo.spreadsheet.Sorter(this._grid, this._properties.sortable());\n this._viewSelection = new Selection(this);\n this._editSelection = new Selection(this);\n this._formulaSelections = [];\n },\n _selectionState: function () {\n return this._inEdit ? this._editSelection : this._viewSelection;\n },\n navigator: function () {\n if (!this._navigator) {\n this._navigator = new kendo.spreadsheet.SheetNavigator(this);\n }\n return this._navigator;\n },\n axisManager: function () {\n if (!this._axisManager) {\n this._axisManager = new kendo.spreadsheet.AxisManager(this);\n }\n return this._axisManager;\n },\n _name: function (value) {\n if (!value) {\n return this._sheetName;\n }\n this._sheetName = value;\n return this;\n },\n name: function () {\n return this._name();\n },\n _property: function (accessor, value, reason) {\n if (value === undefined) {\n return accessor();\n } else {\n accessor(value);\n return this.triggerChange(reason);\n }\n },\n _field: function (name, value, reason) {\n if (value === undefined) {\n return this[name];\n } else {\n this[name] = value;\n return this.triggerChange(reason);\n }\n },\n suspendChanges: function (value) {\n if (value === undefined) {\n return this._suspendChanges;\n }\n this._suspendChanges = value;\n return this;\n },\n triggerChange: function (reason) {\n if (!this._suspendChanges) {\n this.trigger('change', reason);\n }\n return this;\n },\n triggerSelect: function (range) {\n this.trigger('select', { range: range });\n },\n setDataSource: function (dataSource, columns) {\n if (this.dataSourceBinder) {\n this.dataSourceBinder.destroy();\n }\n this.dataSourceBinder = new kendo.spreadsheet.SheetDataSourceBinder({\n dataSource: dataSource,\n sheet: this,\n columns: columns\n });\n this.dataSource = this.dataSourceBinder.dataSource;\n },\n hideColumn: function (columnIndex) {\n if (this.trigger('hideColumn', { index: columnIndex })) {\n return;\n }\n return this._property(this._columns.hide.bind(this._columns), columnIndex, { layout: true });\n },\n unhideColumn: function (columnIndex) {\n if (this.trigger('unhideColumn', { index: columnIndex })) {\n return;\n }\n return this._property(this._columns.unhide.bind(this._columns), columnIndex, { layout: true });\n },\n isHiddenColumn: function (columnIndex) {\n return this._grid._columns.hidden(columnIndex);\n },\n _copyRange: function (sourceRangeRef, targetRef) {\n var grid = this._grid;\n var rowCount = grid.rowCount;\n var nextRefTopLeft = grid.normalize(sourceRangeRef.topLeft);\n var nextRefBottomRight = grid.normalize(sourceRangeRef.bottomRight);\n var nextIndex = nextRefTopLeft.col * rowCount + nextRefTopLeft.row;\n var nextBottomIndex = nextRefBottomRight.col * rowCount + nextRefBottomRight.row;\n var targetIndex = targetRef.col * rowCount + targetRef.row;\n this._properties.copy(nextIndex, nextBottomIndex, targetIndex);\n },\n _adjustReferences: function (operation, start, delta, mergedCells) {\n this._mergedCells = mergedCells.reduce(function (a, ref) {\n ref = ref.adjust(null, null, null, null, operation == 'row', start, delta);\n if (ref instanceof RangeRef) {\n a.push(ref);\n }\n return a;\n }, []);\n if (this._workbook) {\n var affectedSheet = this._name();\n this._workbook._sheets.forEach(function (sheet) {\n sheet._forFormulas(function (formula) {\n formula.adjust(affectedSheet, operation, start, delta);\n });\n sheet._forValidations(function (validation) {\n validation.adjust(affectedSheet, operation, start, delta);\n });\n });\n this._workbook.adjustNames(affectedSheet, operation == 'row', start, delta);\n }\n var selection = this.select();\n selection = selection.adjust(null, null, null, null, operation == 'row', start, delta);\n if (selection !== kendo.spreadsheet.NULLREF) {\n this.select(selection);\n }\n var axis = operation == 'col' ? this._columns : this._rows;\n axis.adjust(start, delta);\n },\n _forFormulas: function (callback) {\n var props = this._properties;\n var formulas = props.get('formula').values();\n var n = formulas.length;\n formulas.forEach(function (f, i) {\n callback.call(this, f.value, i, n);\n }, this);\n },\n _forValidations: function (callback) {\n var props = this._properties;\n props.get('validation').values().forEach(function (v) {\n callback.call(this, v.value);\n }, this);\n },\n preventInsertRow: function (rowIndex, count) {\n if (this.selectedHeaders().allRows) {\n return {\n reason: 'error',\n type: 'insertRowWhenColumnIsSelected'\n };\n }\n count = count || 1;\n var grid = this._grid;\n var range = this.range(grid.rowCount - count, 0, count, grid.columnCount);\n if (range.hasValue()) {\n return {\n reason: 'error',\n type: 'shiftingNonblankCells'\n };\n }\n return false;\n },\n preventInsertColumn: function () {\n if (this.selectedHeaders().allCols) {\n return {\n reason: 'error',\n type: 'insertColumnWhenRowIsSelected'\n };\n }\n return false;\n },\n insertRow: function (rowIndex) {\n var result = this.preventInsertRow(rowIndex);\n if (result) {\n throw new Error('Shifting nonblank cells off the worksheet is not supported!');\n }\n if (this.trigger('insertRow', { index: rowIndex })) {\n return;\n }\n this.batch(function () {\n var grid = this._grid;\n var columnCount = grid.columnCount;\n var rowCount = grid.rowCount;\n var frozenRows = this.frozenRows();\n if (rowIndex < frozenRows) {\n this.frozenRows(frozenRows + 1);\n }\n var mergedCells = this._mergedCells.slice();\n for (var ci = 0; ci < columnCount; ci++) {\n var ref = new RangeRef(new CellRef(rowIndex, ci), new CellRef(rowIndex, ci));\n var topLeft = grid.normalize(ref.topLeft);\n var bottomRight = grid.normalize(ref.bottomRight);\n var nextRef = new RangeRef(new CellRef(topLeft.row, topLeft.col), new CellRef(rowCount - 2, bottomRight.col));\n this._copyRange(nextRef, new CellRef(topLeft.row + 1, topLeft.col));\n new Range(ref, this).clear();\n }\n this._adjustReferences('row', rowIndex, 1, mergedCells);\n }, {\n recalc: true,\n layout: true,\n insertRow: { index: rowIndex },\n ref: new RangeRef(new CellRef(rowIndex, 0), new CellRef(Infinity, Infinity))\n });\n this.trigger('afterInsertRow', { index: rowIndex });\n return this;\n },\n isEnabledRow: function (rowIndex) {\n var ref = new RangeRef(new CellRef(rowIndex, 0), new CellRef(rowIndex, this._grid.columnCount));\n return new Range(ref, this).enable();\n },\n deleteRow: function (rowIndex) {\n if (!this.isEnabledRow(rowIndex)) {\n return this;\n }\n if (this.trigger('deleteRow', { index: rowIndex })) {\n return;\n }\n this.batch(function () {\n var grid = this._grid;\n var columnCount = grid.columnCount;\n var frozenRows = this.frozenRows();\n if (rowIndex < frozenRows) {\n this.frozenRows(frozenRows - 1);\n }\n var mergedCells = this._mergedCells.slice();\n for (var ci = 0; ci < columnCount; ci++) {\n var ref = new RangeRef(new CellRef(rowIndex, ci), new CellRef(rowIndex, ci));\n new Range(ref, this).clear();\n var topLeft = grid.normalize(ref.topLeft);\n var bottomRight = grid.normalize(ref.bottomRight);\n var nextRef = new RangeRef(new CellRef(topLeft.row + 1, topLeft.col), new CellRef(Infinity, bottomRight.col));\n this._copyRange(nextRef, topLeft);\n var nextRefBottomRight = grid.normalize(nextRef.bottomRight);\n new Range(new RangeRef(nextRefBottomRight, nextRefBottomRight), this).clear();\n }\n this._adjustReferences('row', rowIndex, -1, mergedCells);\n }, {\n recalc: true,\n layout: true,\n deleteRow: { index: rowIndex },\n ref: new RangeRef(new CellRef(rowIndex, 0), new CellRef(Infinity, Infinity))\n });\n this.trigger('afterDeleteRow', { index: rowIndex });\n return this;\n },\n insertColumn: function (columnIndex) {\n if (this.trigger('insertColumn', { index: columnIndex })) {\n return;\n }\n this.batch(function () {\n var grid = this._grid;\n var columnCount = grid.columnCount;\n var frozenColumns = this.frozenColumns();\n if (columnIndex < frozenColumns) {\n this.frozenColumns(frozenColumns + 1);\n }\n var mergedCells = this._mergedCells.slice();\n for (var ci = columnCount; ci >= columnIndex; ci--) {\n var ref = new RangeRef(new CellRef(0, ci), new CellRef(Infinity, ci));\n new Range(ref, this).clear();\n if (ci == columnIndex) {\n break;\n }\n var topLeft = grid.normalize(ref.topLeft);\n var bottomRight = grid.normalize(ref.bottomRight);\n var nextRef = new RangeRef(new CellRef(topLeft.row, topLeft.col - 1), new CellRef(bottomRight.row, bottomRight.col - 1));\n this._copyRange(nextRef, topLeft);\n }\n this._adjustReferences('col', columnIndex, 1, mergedCells);\n }, {\n recalc: true,\n layout: true,\n insertColumn: { index: columnIndex },\n ref: new RangeRef(new CellRef(0, columnIndex), new CellRef(Infinity, Infinity))\n });\n return this;\n },\n isEnabledColumn: function (columnIndex) {\n var ref = new RangeRef(new CellRef(0, columnIndex), new CellRef(Infinity, columnIndex));\n return new Range(ref, this).enable();\n },\n deleteColumn: function (columnIndex) {\n if (!this.isEnabledColumn(columnIndex)) {\n return this;\n }\n if (this.trigger('deleteColumn', { index: columnIndex })) {\n return;\n }\n this.batch(function () {\n var grid = this._grid;\n var columnCount = grid.columnCount;\n var frozenColumns = this.frozenColumns();\n if (columnIndex < frozenColumns) {\n this.frozenColumns(frozenColumns - 1);\n }\n var mergedCells = this._mergedCells.slice();\n for (var ci = columnIndex; ci < columnCount; ci++) {\n var ref = new RangeRef(new CellRef(0, ci), new CellRef(Infinity, ci));\n new Range(ref, this).clear();\n if (ci == columnCount - 1) {\n break;\n }\n var topLeft = grid.normalize(ref.topLeft);\n var bottomRight = grid.normalize(ref.bottomRight);\n var nextRef = new RangeRef(new CellRef(topLeft.row, topLeft.col + 1), new CellRef(bottomRight.row, bottomRight.col + 1));\n this._copyRange(nextRef, topLeft);\n }\n this._adjustReferences('col', columnIndex, -1, mergedCells);\n }, {\n recalc: true,\n layout: true,\n deleteColumn: { index: columnIndex },\n ref: new RangeRef(new CellRef(0, columnIndex), new CellRef(Infinity, Infinity))\n });\n return this;\n },\n hideRow: function (rowIndex) {\n if (this.trigger('hideRow', { index: rowIndex })) {\n return;\n }\n return this._property(this._rows.hide.bind(this._rows), rowIndex, { layout: true });\n },\n unhideRow: function (rowIndex) {\n if (this.trigger('unhideRow', { index: rowIndex })) {\n return;\n }\n return this._property(this._rows.unhide.bind(this._rows), rowIndex, { layout: true });\n },\n isHiddenRow: function (rowIndex) {\n return this._grid._rows.hidden(rowIndex);\n },\n columnWidth: function (columnIndex, width) {\n return this._property(this._columns.value.bind(this._columns, columnIndex, columnIndex), width, { layout: true });\n },\n rowHeight: function (rowIndex, height) {\n return this._property(this._rows.value.bind(this._rows, rowIndex, rowIndex), height, { layout: true });\n },\n frozenRows: function (value) {\n return this._field('_frozenRows', value, { layout: true });\n },\n frozenColumns: function (value) {\n return this._field('_frozenColumns', value, { layout: true });\n },\n showGridLines: function (value) {\n return this._field('_showGridLines', value, { layout: true });\n },\n gridLinesColor: function (value) {\n return this._field('_gridLinesColor', value, { layout: true });\n },\n _ref: function (row, column, numRows, numColumns) {\n var ref = null;\n if (row instanceof kendo.spreadsheet.Ref) {\n return row;\n }\n if (row instanceof kendo.spreadsheet.Range) {\n return row._ref.toRangeRef();\n }\n if (typeof row === 'string') {\n ref = kendo.spreadsheet.calc.parseReference(row);\n } else {\n if (!numRows) {\n numRows = 1;\n }\n if (!numColumns) {\n numColumns = 1;\n }\n ref = new RangeRef(new CellRef(row, column), new CellRef(row + numRows - 1, column + numColumns - 1));\n }\n return ref;\n },\n range: function (row, column, numRows, numColumns) {\n return new Range(this._ref(row, column, numRows, numColumns), this);\n },\n _getMergedCells: function (range) {\n var grid = this._grid;\n var primary = {};\n var secondary = {};\n var hasMerged = false;\n this.forEachMergedCell(range, function (ref) {\n var topLeft = ref.topLeft;\n grid.forEach(ref, function (cellRef) {\n if (topLeft.eq(cellRef)) {\n primary[cellRef.print()] = ref;\n hasMerged = true;\n } else if (range.contains(cellRef)) {\n secondary[cellRef.print()] = topLeft;\n hasMerged = true;\n }\n });\n });\n return {\n primary: primary,\n secondary: secondary,\n hasMerged: hasMerged\n };\n },\n forEachMergedCell: function (ref, callback) {\n var selectAll = false;\n if (typeof callback === 'undefined') {\n callback = ref;\n selectAll = true;\n }\n this._mergedCells.forEach(function (merged) {\n if (selectAll || merged.intersects(ref)) {\n callback(merged);\n }\n });\n },\n forEachFilterHeader: function (ref, callback) {\n var selectAll = false;\n if (typeof callback === 'undefined') {\n callback = ref;\n selectAll = true;\n }\n if (this._filter) {\n var refs = [];\n this._filter.ref.forEachColumn(function (columnRef) {\n if (selectAll || columnRef.intersects(ref)) {\n refs.push(columnRef.topLeft);\n }\n });\n this._mergedCells.forEach(function (merged) {\n refs = refs.map(function (ref) {\n if (merged.intersects(ref)) {\n return merged;\n }\n return ref;\n });\n });\n refs.reduce(function unique(result, element) {\n if (result.indexOf(element) < 0) {\n result.push(element);\n }\n return result;\n }, []).forEach(callback);\n }\n },\n forEach: function (ref, callback) {\n if (!(ref instanceof RangeRef)) {\n ref = this._ref(ref);\n }\n var topLeft = this._grid.normalize(ref.topLeft);\n var bottomRight = this._grid.normalize(ref.bottomRight);\n function doIt(value) {\n callback(ri++, ci, value);\n }\n for (var ci = topLeft.col; ci <= bottomRight.col; ci++) {\n var ri = topLeft.row;\n var startCellIndex = this._grid.index(ri, ci);\n var endCellIndex = this._grid.index(bottomRight.row, ci);\n this._properties.forEach(startCellIndex, endCellIndex, doIt);\n }\n },\n startResizing: function (initialPosition) {\n this._initialPosition = initialPosition;\n this._resizeInProgress = true;\n },\n startAutoFill: function () {\n this._autoFillInProgress = true;\n var selection = this.select();\n this._autoFillOrigin = selection;\n this._autoFillDest = selection;\n this.triggerChange({ selection: true });\n },\n updateAutoFill: function (dest, punch, hint, direction) {\n this._autoFillDest = dest;\n this._autoFillPunch = punch;\n this._autoFillHint = hint;\n this._autoFillDirection = direction;\n this.triggerChange({ selection: true });\n },\n autoFillRef: function () {\n return this._autoFillDest;\n },\n autoFillPunch: function () {\n return this._autoFillPunch;\n },\n autoFillInProgress: function () {\n return this._autoFillInProgress;\n },\n resizingInProgress: function () {\n return this._resizeInProgress;\n },\n completeResizing: function () {\n if (this._resizeInProgress) {\n this._resizeInProgress = false;\n var hintPosition = this.resizeHintPosition();\n if (this._initialPosition && hintPosition) {\n var handlePosition = this.resizeHandlePosition();\n if (handlePosition.col !== -Infinity) {\n this.trigger('commandRequest', {\n command: 'ColumnWidthCommand',\n options: {\n target: handlePosition.col,\n value: this.columnWidth(handlePosition.col) - (this._initialPosition.x - hintPosition.x)\n }\n });\n } else {\n this.trigger('commandRequest', {\n command: 'RowHeightCommand',\n options: {\n target: handlePosition.row,\n value: this.rowHeight(handlePosition.row) - (this._initialPosition.y - hintPosition.y)\n }\n });\n }\n } else {\n this.trigger('change', { resize: true });\n }\n }\n },\n resizeHandlePosition: function () {\n return this._resizeHandlePosition;\n },\n resizeHintPosition: function (location) {\n if (location !== undefined) {\n this._resizeHintPosition = location;\n this.trigger('change', { resize: true });\n }\n return this._resizeHintPosition;\n },\n removeResizeHandle: function () {\n if (this._resizeHandlePosition) {\n this._resizeHintPosition = undefined;\n this._resizeHandlePosition = undefined;\n this._initialPosition = undefined;\n this.trigger('change', { resize: true });\n }\n },\n positionResizeHandle: function (ref) {\n this._resizeHandlePosition = ref;\n this.trigger('change', { resize: true });\n },\n startSelection: function () {\n this._selectionInProgress = true;\n },\n completeSelection: function () {\n if (this._selectionInProgress) {\n this._selectionInProgress = false;\n this._resizeHintPosition = undefined;\n this.trigger('change', { selection: true });\n }\n if (this._autoFillInProgress) {\n this._autoFillInProgress = false;\n var dest = this._autoFillDest;\n var origin = this._autoFillOrigin;\n if (this._autoFillPunch) {\n this.trigger('commandRequest', {\n command: 'ClearContentCommand',\n options: { operatingRange: this.range(this._autoFillPunch) }\n });\n } else {\n if (!dest.eq(origin)) {\n this.trigger('commandRequest', {\n command: 'AutoFillCommand',\n options: {\n operatingRange: this.range(dest),\n origin: this.range(origin)\n }\n });\n } else {\n this.triggerChange({ selection: true });\n }\n }\n this._autoFillDest = null;\n this._autoFillPunch = null;\n this._autoFillOrigin = null;\n this.select(dest);\n }\n },\n selectionInProgress: function () {\n return this._selectionInProgress;\n },\n select: function (ref, changeActiveCell) {\n var selectionState = this._selectionState();\n var expandedRef;\n if (ref) {\n ref = this._ref(ref);\n ref = this._grid.normalize(ref);\n expandedRef = this._grid.isAxis(ref) ? ref : this.unionWithMerged(ref);\n }\n return selectionState.select(ref, expandedRef, changeActiveCell);\n },\n originalSelect: function () {\n return this._selectionState().originalSelection;\n },\n currentSelectionRange: function () {\n return this._selectionState().currentSelectionRange();\n },\n currentOriginalSelectionRange: function () {\n return this._selectionState().currentOriginalNavigationRange();\n },\n currentNavigationRange: function () {\n return this._selectionState().currentNavigationRange();\n },\n nextNavigationRange: function () {\n return this._selectionState().nextNavigationRange();\n },\n previousNavigationRange: function () {\n return this._selectionState().previousNavigationRange();\n },\n selectionRangeIndex: function () {\n return this._selectionState().selectionRangeIndex;\n },\n activeCell: function (ref) {\n return this._selectionState().activeCell(ref);\n },\n originalActiveCell: function () {\n return this._selectionState().originalActiveCell;\n },\n singleCellSelection: function () {\n return this._selectionState().singleCellSelection();\n },\n unionWithMerged: function (ref) {\n var mergedCells = this._mergedCells;\n return ref.map(function (ref) {\n return ref.toRangeRef().union(mergedCells);\n });\n },\n trim: function (ref) {\n var trims = [];\n var grid = this._grid;\n this._properties.forEachProperty(function (property) {\n trims.push(grid.trim(ref, property.list));\n });\n return this.unionWithMerged(ref.topLeft.toRangeRef().union(trims));\n },\n focus: function (ref) {\n if (ref) {\n this._focus = ref.toRangeRef();\n } else {\n var focus = this._focus;\n this._focus = null;\n return focus;\n }\n },\n activeCellSelection: function () {\n return new Range(this._grid.normalize(this.activeCell()), this);\n },\n selection: function () {\n return new Range(this._grid.normalize(this._selectionState().selection), this);\n },\n selectedHeaders: function () {\n var selection = this.select();\n var rows = {};\n var cols = {};\n var allCols = false;\n var allRows = false;\n var maxRow = this._grid.rowCount - 1;\n var maxCol = this._grid.columnCount - 1;\n selection.forEach(function (ref) {\n var i;\n var rowState = 'partial';\n var colState = 'partial';\n ref = ref.toRangeRef();\n var bottomRight = ref.bottomRight;\n var topLeft = ref.topLeft;\n var rowSelection = topLeft.col <= 0 && bottomRight.col >= maxCol;\n var colSelection = topLeft.row <= 0 && bottomRight.row >= maxRow;\n if (colSelection) {\n allRows = true;\n colState = 'full';\n }\n if (rowSelection) {\n allCols = true;\n rowState = 'full';\n }\n if (!colSelection) {\n for (i = topLeft.row; i <= bottomRight.row; i++) {\n if (rows[i] !== 'full') {\n rows[i] = rowState;\n }\n }\n }\n if (!rowSelection) {\n for (i = topLeft.col; i <= bottomRight.col; i++) {\n if (cols[i] !== 'full') {\n cols[i] = colState;\n }\n }\n }\n });\n return {\n rows: rows,\n cols: cols,\n allRows: allRows,\n allCols: allCols,\n all: allRows && allCols\n };\n },\n isInEditMode: function (isInEdit) {\n if (isInEdit === undefined) {\n return this._inEdit;\n }\n this._inEdit = isInEdit;\n if (isInEdit) {\n this._editSelection.selection = this._viewSelection.selection.clone();\n this._editSelection.originalSelection = this._viewSelection.originalSelection.clone();\n this._editSelection._activeCell = this._viewSelection._activeCell.clone();\n this._editSelection.originalActiveCell = this._viewSelection.originalActiveCell.clone();\n }\n },\n _setFormulaSelections: function (selection) {\n this._formulaSelections = (selection || []).slice();\n this.triggerChange({ selection: true });\n },\n _viewActiveCell: function () {\n return this._viewSelection._activeCell.toRangeRef();\n },\n toJSON: function () {\n var positions = {};\n var rows = this._rows.toJSON('height', positions);\n var columns = this._columns.toJSON('width', {});\n var viewSelection = this._viewSelection;\n var hyperlinks = [];\n var defaultCellStyle = this._defaultCellStyle || {};\n function clearDefaultStyle(cell) {\n Object.keys(defaultCellStyle).forEach(function (key) {\n if (cell[key] === defaultCellStyle[key]) {\n delete cell[key];\n }\n });\n }\n this.forEach(kendo.spreadsheet.SHEETREF, function (row, col, cell) {\n clearDefaultStyle(cell);\n if (Object.keys(cell).length === 0) {\n return;\n }\n if (cell.link) {\n hyperlinks.push({\n ref: kendo.spreadsheet.Ref.display(null, row, col),\n target: cell.link\n });\n }\n var position = positions[row];\n if (position === undefined) {\n position = rows.length;\n rows.push({ index: row });\n positions[row] = position;\n }\n row = rows[position];\n cell.index = col;\n if (row.cells === undefined) {\n row.cells = [];\n }\n if (cell.formula) {\n cell.formula = cell.formula.toString();\n }\n if (cell.validation) {\n cell.validation = cell.validation.toJSON();\n }\n if (cell.color) {\n cell.color = kendo.parseColor(cell.color).toCss();\n }\n if (cell.background) {\n cell.background = kendo.parseColor(cell.background).toCss();\n }\n if (cell.borderTop && cell.borderTop.color) {\n cell.borderTop.color = kendo.parseColor(cell.borderTop.color).toCss();\n }\n if (cell.borderBottom && cell.borderBottom.color) {\n cell.borderBottom.color = kendo.parseColor(cell.borderBottom.color).toCss();\n }\n if (cell.borderRight && cell.borderRight.color) {\n cell.borderRight.color = kendo.parseColor(cell.borderRight.color).toCss();\n }\n if (cell.borderLeft && cell.borderLeft.color) {\n cell.borderLeft.color = kendo.parseColor(cell.borderLeft.color).toCss();\n }\n row.cells.push(cell);\n });\n var json = {\n name: this._name(),\n rows: rows,\n columns: columns,\n selection: viewSelection.selection.toString(),\n activeCell: viewSelection.activeCell().toString(),\n frozenRows: this.frozenRows(),\n frozenColumns: this.frozenColumns(),\n showGridLines: this.showGridLines(),\n gridLinesColor: this.gridLinesColor(),\n mergedCells: this._mergedCells.map(function (ref) {\n return ref.toString();\n }),\n hyperlinks: hyperlinks,\n defaultCellStyle: defaultCellStyle\n };\n if (this._sort) {\n json.sort = {\n ref: this._sort.ref.toString(),\n columns: this._sort.columns.map(function (column) {\n return {\n index: column.index,\n ascending: column.ascending\n };\n })\n };\n }\n if (this._filter) {\n json.filter = {\n ref: this._filter.ref.toString(),\n columns: this._filter.columns.map(function (column) {\n var filter = column.filter.toJSON();\n filter.index = column.index;\n return filter;\n })\n };\n }\n return json;\n },\n fromJSON: function (json) {\n this.batch(function () {\n if (json.name !== undefined) {\n this._name(json.name);\n }\n if (json.frozenColumns !== undefined) {\n this.frozenColumns(json.frozenColumns);\n }\n if (json.frozenRows !== undefined) {\n this.frozenRows(json.frozenRows);\n }\n if (json.columns !== undefined) {\n this._columns.fromJSON('width', json.columns);\n }\n if (json.rows !== undefined) {\n this._rows.fromJSON('height', json.rows);\n for (var ri = 0; ri < json.rows.length; ri++) {\n var row = json.rows[ri];\n var rowIndex = row.index;\n if (rowIndex === undefined) {\n rowIndex = ri;\n }\n if (row.cells) {\n for (var ci = 0; ci < row.cells.length; ci++) {\n var cell = row.cells[ci];\n var columnIndex = cell.index;\n if (columnIndex === undefined) {\n columnIndex = ci;\n }\n if (cell.formula) {\n cell.formula = this._compileFormula(rowIndex, columnIndex, cell.formula);\n }\n if (cell.validation) {\n cell.validation = this._compileValidation(rowIndex, columnIndex, cell.validation);\n }\n this._properties.fromJSON(this._grid.index(rowIndex, columnIndex), cell);\n }\n }\n }\n }\n if (json.selection) {\n this._viewSelection.selection = this._viewSelection.originalSelection = this._ref(json.selection);\n }\n if (json.activeCell) {\n var activeCellRef = this._ref(json.activeCell);\n this._viewSelection._activeCell = activeCellRef.toRangeRef();\n this._viewSelection.originalActiveCell = activeCellRef;\n }\n if (json.mergedCells) {\n json.mergedCells.forEach(function (ref) {\n this.range(ref).merge();\n }, this);\n }\n if (json.sort) {\n this._sort = {\n ref: this._ref(json.sort.ref),\n columns: json.sort.columns.slice(0)\n };\n }\n if (json.filter) {\n var ref = json.filter.ref;\n var columns = json.filter.columns === undefined ? [] : json.filter.columns;\n if (!ref) {\n kendo.logToConsole('Dropping filter for sheet \\'' + json.name + '\\' due to missing ref');\n } else {\n this._filter = {\n ref: this._ref(ref),\n columns: columns.map(function (column) {\n return {\n index: column.index,\n filter: kendo.spreadsheet.Filter.create(column)\n };\n })\n };\n this._refreshFilter();\n }\n }\n if (json.showGridLines !== undefined) {\n this._showGridLines = json.showGridLines;\n }\n this._gridLinesColor = json.gridLinesColor;\n });\n this._rows._refresh();\n this._columns._refresh();\n },\n formula: function (ref) {\n return this._properties.get('formula', this._grid.cellRefIndex(ref));\n },\n validation: function (ref) {\n return this._properties.get('validation', this._grid.cellRefIndex(ref));\n },\n resetFormulas: function () {\n this._forFormulas(function (formula) {\n formula.reset();\n });\n },\n resetValidations: function () {\n this._forValidations(function (validation) {\n validation.reset();\n });\n },\n recalc: function (context, callback) {\n var formulas = this._properties.get('formula').values();\n var count = formulas.length, pending = 0, i = 0;\n if (!count && callback) {\n return callback();\n }\n function next() {\n pending--;\n if (i == count && !pending) {\n callback();\n }\n }\n while (i < count) {\n pending++;\n formulas[i++].value.exec(context, callback ? next : null);\n }\n },\n revalidate: function (context) {\n var self = this;\n this._forValidations(function (validation) {\n var cellRef = new CellRef(validation.row, validation.col);\n var ref = new RangeRef(cellRef, cellRef);\n validation.exec(context, self._get(ref, 'value'), self._get(ref, 'format'));\n });\n },\n _value: function (row, col, value) {\n var index = this._grid.index(row, col);\n if (value !== undefined) {\n this._properties.set('value', index, index, value);\n } else {\n return this._properties.get('value', index);\n }\n },\n _validation: function (row, col) {\n var index = this._grid.index(row, col);\n return this._properties.get('validation', index);\n },\n _compileValidation: function (row, col, validation) {\n if (validation instanceof kendo.spreadsheet.validation.Validation) {\n return validation.clone(this._name(), row, col);\n }\n if (validation.from != null) {\n validation.from = (validation.from + '').replace(/^=/, '');\n }\n if (validation.to != null) {\n validation.to = (validation.to + '').replace(/^=/, '');\n }\n return kendo.spreadsheet.validation.compile(this._name(), row, col, validation);\n },\n _compileFormula: function (row, col, f) {\n f = f.replace(/^=/, '');\n f = kendo.spreadsheet.calc.parseFormula(this._name(), row, col, f);\n return kendo.spreadsheet.calc.compile(f);\n },\n _copyValuesInRange: function (topLeft, bottomRight, value, property) {\n var ci, start, end;\n for (ci = topLeft.col; ci <= bottomRight.col; ci++) {\n start = this._grid.index(topLeft.row, ci);\n end = this._grid.index(bottomRight.row, ci);\n for (var index = start, row = topLeft.row; index <= end; ++index, ++row) {\n value = value.clone(this._name(), row, ci);\n this._properties.set(property, index, index, value);\n }\n }\n return value;\n },\n _set: function (ref, name, value) {\n var topLeft = this._grid.normalize(ref.topLeft);\n var bottomRight = this._grid.normalize(ref.bottomRight);\n var ci, start, end;\n if (value && name == 'formula') {\n if (typeof value == 'string') {\n value = this._compileFormula(topLeft.row, topLeft.col, value);\n }\n value = this._copyValuesInRange(topLeft, bottomRight, value, 'formula');\n } else if (value && name == 'validation') {\n value = this._compileValidation(topLeft.row, topLeft.col, value);\n value = this._copyValuesInRange(topLeft, bottomRight, value, 'validation');\n } else {\n for (ci = topLeft.col; ci <= bottomRight.col; ci++) {\n start = this._grid.index(topLeft.row, ci);\n end = this._grid.index(bottomRight.row, ci);\n this._properties.set(name, start, end, value);\n if (name == 'formula') {\n this._properties.set('value', start, end, null);\n }\n }\n }\n },\n _get: function (ref, name) {\n var topLeft = this._grid.normalize(ref.topLeft);\n var index = this._grid.index(topLeft.row, topLeft.col);\n return this._properties.get(name, index);\n },\n batch: function (callback, reason) {\n var suspended = this.suspendChanges();\n this.suspendChanges(true);\n callback.call(this);\n return this.suspendChanges(suspended).triggerChange(reason || { recalc: true });\n },\n _sortBy: function (ref, columns) {\n var indices = null;\n columns.forEach(function (column) {\n indices = this._sorter.sortBy(ref, column.index, this._properties.get('value'), column.ascending, indices);\n }, this);\n this._sort = {\n ref: ref,\n columns: columns\n };\n this._refreshFilter();\n this.triggerChange({ recalc: true });\n },\n _refreshFilter: function () {\n if (this._filter) {\n this._filterBy(this._filter.ref, this._filter.columns);\n }\n },\n _filterBy: function (ref, columns) {\n this.batch(function () {\n for (var ri = ref.topLeft.row; ri <= ref.bottomRight.row; ri++) {\n if (this._rows.hidden(ri)) {\n this._rows.unhide(ri);\n }\n }\n columns.forEach(function (column) {\n var columnRef = ref.resize({ top: 1 }).toColumn(column.index);\n var cells = [];\n if (columnRef === kendo.spreadsheet.NULLREF) {\n return;\n }\n this.forEach(columnRef, function (row, col, cell) {\n cell.row = row;\n cells.push(cell);\n });\n column.filter.prepare(cells);\n for (var ci = 0; ci < cells.length; ci++) {\n var cell = cells[ci];\n var value = column.filter.value(cell);\n if (column.filter.matches(value) === false) {\n this.hideRow(cell.row);\n }\n }\n }, this);\n this._filter = {\n ref: ref,\n columns: columns\n };\n }, {\n layout: true,\n filter: true\n });\n },\n filterColumn: function (ref) {\n var filterRef = this.filter().ref;\n return ref.toRangeRef().topLeft.col - filterRef.topLeft.col;\n },\n filter: function () {\n return this._filter;\n },\n clearFilter: function (spec) {\n this._clearFilter(spec instanceof Array ? spec : [spec]);\n },\n _clearFilter: function (indices) {\n if (this._filter) {\n this.batch(function () {\n this._filter.columns = this._filter.columns.filter(function (column) {\n return indices.indexOf(column.index) < 0;\n });\n this._refreshFilter();\n }, {\n layout: true,\n filter: true\n });\n }\n },\n getAxisState: function () {\n return {\n rows: this._rows.getState(),\n columns: this._columns.getState()\n };\n },\n setAxisState: function (state) {\n this._rows.setState(state.rows);\n this._columns.setState(state.columns);\n this.triggerChange({ layout: true });\n },\n getState: function () {\n return {\n rows: this._rows.getState(),\n columns: this._columns.getState(),\n mergedCells: this._mergedCells.map(function (cell) {\n return cell.clone();\n }),\n properties: this._properties.getState()\n };\n },\n setState: function (state) {\n this._rows.setState(state.rows);\n this._columns.setState(state.columns);\n this._mergedCells = state.mergedCells;\n this._properties.setState(state.properties);\n this.triggerChange(kendo.spreadsheet.ALL_REASONS);\n },\n _merge: function (ref) {\n var mergedCells = this._mergedCells;\n var sheet = this;\n var mergedRef;\n this.batch(function () {\n mergedRef = ref.map(function (ref) {\n if (ref instanceof kendo.spreadsheet.CellRef) {\n return ref;\n }\n var currentRef = ref.toRangeRef().union(mergedCells, function (ref) {\n mergedCells.splice(mergedCells.indexOf(ref), 1);\n });\n var range = new Range(currentRef, sheet);\n var formula = range._get('formula');\n var value = range.value();\n var format = range.format();\n var background = range.background();\n range.value(null);\n range.format(null);\n range.background(null);\n var topLeft = new Range(currentRef.collapse(), sheet);\n if (formula) {\n topLeft._set('formula', formula);\n } else {\n topLeft.value(value);\n }\n topLeft.format(format);\n topLeft.background(background);\n mergedCells.push(currentRef);\n return currentRef;\n });\n var viewSelection = sheet._viewSelection;\n viewSelection.selection = sheet.unionWithMerged(viewSelection.originalSelection);\n viewSelection._activeCell = sheet.unionWithMerged(viewSelection.originalActiveCell);\n }, {\n activeCell: true,\n selection: true\n });\n return mergedRef;\n }\n });\n kendo.spreadsheet.Sheet = Sheet;\n }(kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/sheetsbar', [\n 'kendo.core',\n 'kendo.sortable'\n ], f);\n}(function () {\n (function (kendo) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var $ = kendo.jQuery;\n var outerWidth = kendo._outerWidth;\n var DOT = '.';\n var EMPTYCHAR = ' ';\n var sheetsBarClassNames = {\n sheetsBarWrapper: 'k-widget k-header',\n sheetsBarSheetsWrapper: 'k-tabstrip k-floatwrap k-tabstrip-bottom',\n sheetsBarActive: 'k-spreadsheet-sheets-bar-active',\n sheetsBarInactive: 'k-spreadsheet-sheets-bar-inactive',\n sheetsBarAdd: 'k-spreadsheet-sheets-bar-add',\n sheetsBarRemove: 'k-spreadsheet-sheets-remove',\n sheetsBarItems: 'k-spreadsheet-sheets-items',\n sheetsBarEditor: 'k-spreadsheet-sheets-editor',\n sheetsBarScrollable: 'k-tabstrip-scrollable',\n sheetsBarNext: 'k-tabstrip-next',\n sheetsBarPrev: 'k-tabstrip-prev',\n sheetsBarKItem: 'k-item k-state-default',\n sheetsBarKActive: 'k-state-active k-state-tab-on-top',\n sheetsBarKTextbox: 'k-textbox',\n sheetsBarKLink: 'k-link',\n sheetsBarKIcon: 'k-icon',\n sheetsBarKFontIcon: 'k-icon',\n sheetsBarKButton: 'k-button k-button-icon',\n sheetsBarKButtonBare: 'k-button-bare',\n sheetsBarKArrowW: 'k-i-arrow-60-left',\n sheetsBarKArrowE: 'k-i-arrow-60-right',\n sheetsBarKReset: 'k-reset k-tabstrip-items',\n sheetsBarKIconX: 'k-i-close',\n sheetsBarKSprite: 'k-sprite',\n sheetsBarKIconPlus: 'k-i-plus',\n sheetsBarHintWrapper: 'k-widget k-tabstrip k-tabstrip-bottom k-spreadsheet-sheets-items-hint',\n sheetsBarKResetItems: 'k-reset k-tabstrip-items'\n };\n var SheetsBar = kendo.ui.Widget.extend({\n init: function (element, options) {\n var classNames = SheetsBar.classNames;\n kendo.ui.Widget.call(this, element, options);\n element = this.element;\n element.addClass(classNames.sheetsBarWrapper);\n this._openDialog = options.openDialog;\n this._tree = new kendo.dom.Tree(element[0]);\n this._tree.render([\n this._addButton(),\n this._createSheetsWrapper([])\n ]);\n this._toggleScrollEvents(true);\n this._createSortable();\n this._sortable.bind('start', this._onSheetReorderStart.bind(this));\n this._sortable.bind('end', this._onSheetReorderEnd.bind(this));\n element.on('click', DOT + classNames.sheetsBarRemove, this._onSheetRemove.bind(this));\n element.on('click', 'li', this._onSheetSelect.bind(this));\n element.on('dblclick', 'li' + DOT + classNames.sheetsBarActive, this._createEditor.bind(this));\n element.on('click', DOT + classNames.sheetsBarAdd, this._onAddSelect.bind(this));\n },\n options: {\n name: 'SheetsBar',\n scrollable: { distance: 200 }\n },\n events: [\n 'select',\n 'reorder',\n 'rename'\n ],\n _createEditor: function () {\n if (this._editor) {\n return;\n }\n this._renderSheets(this._sheets, this._selectedIndex, true);\n this._editor = this.element.find(kendo.format('input{0}{1}', DOT, SheetsBar.classNames.sheetsBarEditor)).focus().on('keydown', this._onEditorKeydown.bind(this)).on('blur', this._onEditorBlur.bind(this));\n },\n _destroyEditor: function (canceled) {\n var newSheetName = canceled ? null : this._editor.val();\n this._editor.off();\n this._editor = null;\n this._renderSheets(this._sheets, this._selectedIndex, false);\n this._onSheetRename(newSheetName);\n },\n renderSheets: function (sheets, selectedIndex) {\n if (!sheets || selectedIndex < 0) {\n return;\n }\n this._renderSheets(sheets, selectedIndex, false);\n },\n _renderSheets: function (sheets, selectedIndex, isInEditMode) {\n var that = this;\n var wrapperOffsetWidth;\n var sheetsGroupScrollWidth;\n var classNames = SheetsBar.classNames;\n that._isRtl = kendo.support.isRtl(that.element);\n that._sheets = sheets;\n that._selectedIndex = selectedIndex;\n that._renderHtml(isInEditMode, true);\n if (!that._scrollableAllowed()) {\n return;\n }\n var sheetsWrapper = that._sheetsWrapper();\n var scrollPrevButton = sheetsWrapper.children(DOT + classNames.sheetsBarPrev);\n var scrollNextButton = sheetsWrapper.children(DOT + classNames.sheetsBarNext);\n var gapWidth = 2;\n var addButton = that.element.find(DOT + classNames.sheetsBarAdd);\n var addButtonWidth = outerWidth(addButton) + addButton.position().left + gapWidth;\n var scrollPrevButtonWidth = outerWidth(scrollPrevButton) + gapWidth;\n var sheetsGroup = that._sheetsGroup();\n scrollPrevButton.css({ left: addButtonWidth });\n sheetsWrapper.addClass(classNames.sheetsBarScrollable + EMPTYCHAR + classNames.sheetsBarSheetsWrapper);\n sheetsGroup.css({ marginLeft: addButtonWidth });\n wrapperOffsetWidth = sheetsWrapper[0].offsetWidth;\n sheetsGroupScrollWidth = sheetsGroup[0].scrollWidth;\n if (sheetsGroupScrollWidth + addButtonWidth > wrapperOffsetWidth) {\n var scrollNextButtonRight = Math.ceil(kendo.parseFloat(scrollNextButton.css('right')));\n if (!that._scrollableModeActive) {\n that._nowScrollingSheets = false;\n that._scrollableModeActive = true;\n }\n sheetsGroup.css({\n marginLeft: scrollPrevButtonWidth + addButtonWidth,\n marginRight: outerWidth(scrollNextButton) + scrollNextButtonRight + gapWidth\n });\n } else {\n if (that._scrollableModeActive && sheetsGroupScrollWidth <= wrapperOffsetWidth) {\n that._scrollableModeActive = false;\n sheetsGroup.css({\n marginLeft: addButtonWidth,\n marginRight: ''\n });\n } else {\n sheetsGroup.css({ marginLeft: addButtonWidth });\n }\n }\n that._toggleScrollButtons();\n },\n _toggleScrollButtons: function (toggle) {\n var that = this;\n var ul = that._sheetsGroup();\n var wrapper = that._sheetsWrapper();\n var scrollLeft = ul.scrollLeft();\n var prev = wrapper.find(DOT + SheetsBar.classNames.sheetsBarPrev);\n var next = wrapper.find(DOT + SheetsBar.classNames.sheetsBarNext);\n if (toggle === false) {\n prev.toggle(false);\n next.toggle(false);\n } else {\n prev.toggle(that._isRtl ? scrollLeft < ul[0].scrollWidth - ul[0].offsetWidth - 1 : scrollLeft !== 0);\n next.toggle(that._isRtl ? scrollLeft !== 0 : scrollLeft < ul[0].scrollWidth - ul[0].offsetWidth - 1);\n }\n },\n _toggleScrollEvents: function (toggle) {\n var that = this;\n var classNames = SheetsBar.classNames;\n var options = that.options;\n var scrollPrevButton;\n var scrollNextButton;\n var sheetsWrapper = that._sheetsWrapper();\n scrollPrevButton = sheetsWrapper.children(DOT + classNames.sheetsBarPrev);\n scrollNextButton = sheetsWrapper.children(DOT + classNames.sheetsBarNext);\n if (toggle) {\n scrollPrevButton.on('mousedown', function () {\n that._nowScrollingSheets = true;\n that._scrollSheetsByDelta(options.scrollable.distance * (that._isRtl ? 1 : -1));\n });\n scrollNextButton.on('mousedown', function () {\n that._nowScrollingSheets = true;\n that._scrollSheetsByDelta(options.scrollable.distance * (that._isRtl ? -1 : 1));\n });\n scrollPrevButton.add(scrollNextButton).on('mouseup', function () {\n that._nowScrollingSheets = false;\n });\n } else {\n scrollPrevButton.off();\n scrollNextButton.off();\n }\n },\n _renderHtml: function (isInEditMode, renderScrollButtons) {\n var idx;\n var sheetElements = [];\n var dom = kendo.dom;\n var element = dom.element;\n var sheets = this._sheets;\n var selectedIndex = this._selectedIndex;\n var classNames = SheetsBar.classNames;\n for (idx = 0; idx < sheets.length; idx++) {\n var sheet = sheets[idx];\n var isSelectedSheet = idx === selectedIndex;\n var attr = { className: classNames.sheetsBarKItem + EMPTYCHAR };\n var elementContent = [];\n if (isSelectedSheet) {\n attr.className += classNames.sheetsBarKActive + EMPTYCHAR + classNames.sheetsBarActive;\n } else {\n attr.className += classNames.sheetsBarInactive;\n }\n if (isSelectedSheet && isInEditMode) {\n elementContent.push(element('input', {\n type: 'text',\n value: sheet.name(),\n className: classNames.sheetsBarKTextbox + EMPTYCHAR + classNames.sheetsBarEditor,\n maxlength: 50\n }, []));\n } else {\n elementContent.push(element('span', {\n className: classNames.sheetsBarKLink,\n title: sheet.name()\n }, [dom.text(sheet.name())]));\n if (sheets.length > 1) {\n var deleteIcon = element('span', { className: classNames.sheetsBarKIcon + EMPTYCHAR + classNames.sheetsBarKFontIcon + EMPTYCHAR + classNames.sheetsBarKIconX }, []);\n elementContent.push(element('span', { className: classNames.sheetsBarKLink + EMPTYCHAR + classNames.sheetsBarRemove }, [deleteIcon]));\n }\n }\n sheetElements.push(element('li', attr, elementContent));\n }\n this._tree.render([\n this._addButton(),\n this._createSheetsWrapper(sheetElements, renderScrollButtons)\n ]);\n },\n _createSheetsWrapper: function (sheetElements, renderScrollButtons) {\n var element = kendo.dom.element;\n var classNames = SheetsBar.classNames;\n var childrenElements = [element('ul', { className: classNames.sheetsBarKReset }, sheetElements)];\n renderScrollButtons = true;\n if (renderScrollButtons) {\n var baseButtonClass = classNames.sheetsBarKButton + EMPTYCHAR + classNames.sheetsBarKButtonBare + EMPTYCHAR;\n childrenElements.push(element('span', { className: baseButtonClass + classNames.sheetsBarPrev }, [element('span', { className: classNames.sheetsBarKIcon + EMPTYCHAR + classNames.sheetsBarKArrowW }, [])]));\n childrenElements.push(element('span', { className: baseButtonClass + classNames.sheetsBarNext }, [element('span', { className: classNames.sheetsBarKIcon + EMPTYCHAR + classNames.sheetsBarKArrowE }, [])]));\n }\n return element('div', { className: classNames.sheetsBarItems }, childrenElements);\n },\n _createSortable: function () {\n var classNames = SheetsBar.classNames;\n this._sortable = new kendo.ui.Sortable(this.element, {\n filter: kendo.format('ul li.{0},ul li.{1}', classNames.sheetsBarActive, classNames.sheetsBarInactive),\n container: DOT + classNames.sheetsBarItems,\n axis: 'x',\n animation: false,\n ignore: 'input',\n end: function () {\n if (this.draggable.hint) {\n this.draggable.hint.remove();\n }\n },\n hint: function (element) {\n var hint = $(element).clone();\n return hint.wrap('<div class=\\'' + classNames.sheetsBarHintWrapper + '\\'><ul class=\\'' + classNames.sheetsBarKResetItems + '\\'></ul></div>').closest('div');\n }\n });\n },\n _onEditorKeydown: function (e) {\n if (this._editor) {\n if (e.which === 13) {\n this._destroyEditor();\n }\n if (e.which === 27) {\n this._destroyEditor(true);\n }\n }\n },\n _onEditorBlur: function () {\n if (this._editor) {\n this._destroyEditor();\n }\n },\n _onSheetReorderEnd: function (e) {\n e.preventDefault();\n this.trigger('reorder', {\n oldIndex: e.oldIndex,\n newIndex: e.newIndex\n });\n },\n _onSheetReorderStart: function (e) {\n if (this._editor) {\n e.preventDefault();\n }\n },\n _onSheetRemove: function (e) {\n var removedSheetName = $(e.target).closest('li').text();\n if (this._editor) {\n this._destroyEditor();\n }\n var closeCallback = function (e) {\n var dlg = e.sender;\n if (dlg.isConfirmed()) {\n this.trigger('remove', {\n name: removedSheetName,\n confirmation: true\n });\n }\n }.bind(this);\n this._openDialog('confirmation', { close: closeCallback });\n },\n _onSheetSelect: function (e) {\n var selectedSheetText = $(e.target).text();\n if ($(e.target).is(DOT + SheetsBar.classNames.sheetsBarEditor) || !selectedSheetText) {\n e.preventDefault();\n return;\n }\n if (this._editor) {\n this._destroyEditor();\n }\n this._scrollSheetsToItem($(e.target).closest('li'));\n this.trigger('select', {\n name: selectedSheetText,\n isAddButton: false\n });\n },\n _onSheetRename: function (newSheetName) {\n if (this._sheets[this._selectedIndex].name() === newSheetName || newSheetName === null) {\n return;\n }\n this.trigger('rename', {\n name: newSheetName,\n sheetIndex: this._selectedIndex\n });\n },\n _onAddSelect: function () {\n this.trigger('select', { isAddButton: true });\n },\n _addButton: function () {\n var element = kendo.dom.element;\n var classNames = SheetsBar.classNames;\n return element('a', { className: classNames.sheetsBarAdd + EMPTYCHAR + classNames.sheetsBarKButton }, [element('span', { className: classNames.sheetsBarKIcon + EMPTYCHAR + classNames.sheetsBarKFontIcon + EMPTYCHAR + classNames.sheetsBarKIconPlus }, [])]);\n },\n destroy: function () {\n this._sortable.destroy();\n },\n _scrollableAllowed: function () {\n var options = this.options;\n return options.scrollable && !isNaN(options.scrollable.distance);\n },\n _scrollSheetsToItem: function (item) {\n var that = this;\n if (!that._scrollableModeActive) {\n return;\n }\n var sheetsGroup = that._sheetsGroup();\n var currentScrollOffset = sheetsGroup.scrollLeft();\n var itemWidth = outerWidth(item);\n var itemOffset = that._isRtl ? item.position().left : item.position().left - sheetsGroup.children().first().position().left;\n var sheetsGroupWidth = sheetsGroup[0].offsetWidth;\n var sheetsGroupPadding = Math.ceil(parseFloat(sheetsGroup.css('padding-left')));\n var itemPosition;\n if (that._isRtl) {\n if (itemOffset < 0) {\n itemPosition = currentScrollOffset + itemOffset - (sheetsGroupWidth - currentScrollOffset) - sheetsGroupPadding;\n } else if (itemOffset + itemWidth > sheetsGroupWidth) {\n itemPosition = currentScrollOffset + itemOffset - itemWidth + sheetsGroupPadding * 2;\n }\n } else {\n if (currentScrollOffset + sheetsGroupWidth < itemOffset + itemWidth) {\n itemPosition = itemOffset + itemWidth - sheetsGroupWidth + sheetsGroupPadding * 2;\n } else if (currentScrollOffset > itemOffset) {\n itemPosition = itemOffset - sheetsGroupPadding;\n }\n }\n sheetsGroup.finish().animate({ 'scrollLeft': itemPosition }, 'fast', 'linear', function () {\n that._toggleScrollButtons();\n });\n },\n _sheetsGroup: function () {\n return this._sheetsWrapper().children('ul');\n },\n _sheetsWrapper: function () {\n return this.element.find(DOT + SheetsBar.classNames.sheetsBarItems);\n },\n _scrollSheetsByDelta: function (delta) {\n var that = this;\n var sheetsGroup = that._sheetsGroup();\n var scrLeft = sheetsGroup.scrollLeft();\n sheetsGroup.finish().animate({ 'scrollLeft': scrLeft + delta }, 'fast', 'linear', function () {\n if (that._nowScrollingSheets) {\n that._scrollSheetsByDelta(delta);\n } else {\n that._toggleScrollButtons();\n }\n });\n }\n });\n kendo.spreadsheet.SheetsBar = SheetsBar;\n $.extend(true, SheetsBar, { classNames: sheetsBarClassNames });\n }(window.kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/calc', ['spreadsheet/runtime'], f);\n}(function () {\n 'use strict';\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var util = kendo.util;\n var spreadsheet = kendo.spreadsheet;\n var Ref = spreadsheet.Ref;\n var RangeRef = spreadsheet.RangeRef;\n var CellRef = spreadsheet.CellRef;\n var NameRef = spreadsheet.NameRef;\n var exports = spreadsheet.calc;\n var runtime = exports.runtime;\n var OPERATORS = Object.create(null);\n var ParseError = kendo.Class.extend({\n init: function ParseError(message, pos) {\n this.message = message;\n this.pos = pos;\n },\n toString: function () {\n return this.message;\n }\n });\n (function (ops) {\n ops.forEach(function (cls, i) {\n cls.forEach(function (op) {\n OPERATORS[op] = ops.length - i;\n });\n });\n }([\n [':'],\n [' '],\n [','],\n ['%'],\n ['^'],\n [\n '*',\n '/'\n ],\n [\n '+',\n '-'\n ],\n ['&'],\n [\n '=',\n '<',\n '>',\n '<=',\n '>=',\n '<>'\n ]\n ]));\n var TRUE = {\n type: 'bool',\n value: true\n };\n var FALSE = {\n type: 'bool',\n value: false\n };\n function getcol(str) {\n str = str.toUpperCase();\n for (var col = 0, i = 0; i < str.length; ++i) {\n col = col * 26 + str.charCodeAt(i) - 64;\n }\n return col - 1;\n }\n function getrow(str) {\n return parseInt(str, 10) - 1;\n }\n function parseReference(name, noThrow) {\n if (name.toLowerCase() == '#sheet') {\n return spreadsheet.SHEETREF;\n }\n OUT: {\n var m;\n if (m = /^(\\$)?([a-z]+)(\\$)?(\\d+)$/i.exec(name)) {\n var row = getrow(m[4]), col = getcol(m[2]);\n if (row < 1048576 && col < 16384) {\n return new CellRef(getrow(m[4]), getcol(m[2]));\n }\n break OUT;\n }\n var stream = TokenStream(name, {});\n var a = [];\n while (true) {\n var ref = stream.next();\n if (ref instanceof CellRef) {\n ref.rel = 0;\n } else if (ref instanceof RangeRef) {\n ref.topLeft.rel = 0;\n ref.bottomRight.rel = 0;\n } else {\n break OUT;\n }\n a.push(ref);\n if (stream.eof()) {\n break;\n }\n if (!stream.is('op', ',')) {\n break OUT;\n }\n stream.next();\n }\n return a.length == 1 ? a[0] : new spreadsheet.UnionRef(a);\n }\n if (!noThrow) {\n throw new Error('Cannot parse reference: ' + name);\n }\n }\n function parseFormula(sheet, row, col, input) {\n var refs = [];\n input = TokenStream(input, {\n row: row,\n col: col\n });\n var is = input.is;\n return {\n type: 'exp',\n ast: parseExpression(true),\n refs: refs,\n sheet: sheet,\n row: row,\n col: col\n };\n function addReference(ref) {\n ref.index = refs.length;\n refs.push(ref);\n return ref;\n }\n function skip(type, value, allowEOF) {\n if (is(type, value)) {\n return input.next();\n } else {\n var tok = input.peek();\n if (tok) {\n input.croak('Expected ' + type + ' \\xAB' + value + '\\xBB but found ' + tok.type + ' \\xAB' + tok.value + '\\xBB');\n } else if (!allowEOF) {\n input.croak('Expected ' + type + ' \\xAB' + value + '\\xBB');\n }\n }\n }\n function parseExpression(commas) {\n return maybeBinary(maybeIntersect(parseAtom(commas)), 0, commas);\n }\n function parseSymbol(tok) {\n if (tok.upper == 'TRUE' || tok.upper == 'FALSE') {\n return tok.upper == 'TRUE' ? TRUE : FALSE;\n }\n return addReference(new NameRef(tok.value));\n }\n function parseFuncall() {\n var fname = input.next();\n fname = fname.value;\n skip('punc', '(');\n var args = [];\n while (1) {\n if (is('punc', ')')) {\n break;\n }\n if (is('op', ',')) {\n args.push({ type: 'null' });\n input.next();\n continue;\n }\n args.push(parseExpression(false));\n if (input.eof() || is('punc', ')')) {\n break;\n }\n skip('op', ',');\n }\n skip('punc', ')', true);\n return {\n type: 'func',\n func: fname,\n args: args\n };\n }\n function fixReference(ref) {\n if (!ref.hasSheet()) {\n ref.setSheet(sheet);\n }\n return addReference(ref);\n }\n function parseAtom(commas) {\n var exp;\n if (is('ref')) {\n exp = fixReference(input.next());\n } else if (is('func')) {\n exp = parseFuncall();\n } else if (is('punc', '(')) {\n input.next();\n exp = parseExpression(true);\n skip('punc', ')', true);\n } else if (is('punc', '{')) {\n input.next();\n exp = parseArray();\n skip('punc', '}', true);\n } else if (is('num') || is('str') || is('error')) {\n exp = input.next();\n } else if (is('sym')) {\n exp = parseSymbol(input.next());\n } else if (is('op', '+') || is('op', '-')) {\n exp = {\n type: 'prefix',\n op: input.next().value,\n exp: parseAtom(commas)\n };\n } else if (!input.peek()) {\n input.croak('Incomplete expression');\n } else if (is('punc', '[')) {\n input.croak('External reference not supported');\n } else {\n input.croak('Parse error');\n }\n return maybePercent(exp);\n }\n function parseArray() {\n var row = [], value = [row], first = true;\n while (!input.eof() && !is('punc', '}')) {\n if (first) {\n first = false;\n } else if (is('punc', ';')) {\n value.push(row = []);\n input.next();\n } else {\n skip('op', ',');\n }\n row.push(parseExpression(false));\n }\n return {\n type: 'matrix',\n value: value\n };\n }\n function maybeIntersect(exp) {\n if (is('punc', '(') || is('ref') || is('num') || is('func')) {\n return {\n type: 'binary',\n op: ' ',\n left: exp,\n right: parseExpression(false)\n };\n } else {\n return exp;\n }\n }\n function maybePercent(exp) {\n if (is('op', '%')) {\n input.next();\n return maybePercent({\n type: 'postfix',\n op: '%',\n exp: exp\n });\n } else {\n return exp;\n }\n }\n function maybeBinary(left, my_prec, commas) {\n var tok = is('op');\n if (tok && (commas || tok.value != ',')) {\n var his_prec = OPERATORS[tok.value];\n if (his_prec > my_prec) {\n input.next();\n var right = maybeBinary(parseAtom(commas), his_prec, commas);\n return maybeBinary({\n type: 'binary',\n op: tok.value,\n left: left,\n right: right\n }, my_prec, commas);\n }\n }\n return left;\n }\n }\n function parseNameDefinition(name, def) {\n var nameRef = parseFormula(null, 0, 0, name);\n if (!(nameRef.ast instanceof NameRef)) {\n throw new ParseError('Invalid name: ' + name);\n }\n nameRef = nameRef.ast;\n if (!(def instanceof Ref)) {\n var defAST = parseFormula(nameRef.sheet, 0, 0, def);\n if (defAST.ast instanceof Ref) {\n def = defAST.ast;\n } else if (/^(?:str|num|bool|error)$/.test(defAST.ast.type)) {\n def = defAST.ast.value;\n } else {\n def = makeFormula(defAST);\n }\n }\n return {\n name: nameRef,\n value: def\n };\n }\n function makePrinter(exp) {\n return makeClosure('function(row, col, mod){return(' + print(exp.ast, exp, 0) + ')}');\n function print(node, parent, prec) {\n switch (node.type) {\n case 'num':\n case 'bool':\n return JSON.stringify(node.value);\n case 'error':\n return JSON.stringify('#' + node.value);\n case 'str':\n return JSON.stringify(JSON.stringify(node.value));\n case 'ref':\n return 'this.refs[' + node.index + '].print(row, col, mod)';\n case 'prefix':\n return withParens(function () {\n return JSON.stringify(node.op) + ' + ' + print(node.exp, node, OPERATORS[node.op]);\n });\n case 'postfix':\n return withParens(function () {\n return print(node.exp, node, OPERATORS[node.op]) + ' + ' + JSON.stringify(node.op);\n });\n case 'binary':\n return withParens(function () {\n var left = parenthesize(print(node.left, node, OPERATORS[node.op]), node.left instanceof NameRef && node.op == ':');\n var right = parenthesize(print(node.right, node, OPERATORS[node.op]), node.right instanceof NameRef && node.op == ':');\n return left + ' + ' + JSON.stringify(node.op) + ' + ' + right;\n });\n case 'func':\n return JSON.stringify(node.func + '(') + ' + ' + (node.args.length > 0 ? node.args.map(function (arg) {\n return print(arg, node, 0);\n }).join(' + \\', \\' + ') : '\\'\\'') + ' + \\')\\'';\n case 'matrix':\n return '\\'{ \\' + ' + node.value.map(function (el) {\n return el.map(function (el) {\n return print(el, node, 0);\n }).join(' + \\', \\' + ');\n }).join(' + \\'; \\' + ') + '+ \\' }\\'';\n case 'null':\n return '\\'\\'';\n }\n throw new Error('Cannot make printer for node ' + node.type);\n function withParens(f) {\n var op = node.op;\n var needParens = OPERATORS[op] < prec || !prec && op == ',' || parent.type == 'prefix' && prec == OPERATORS[op] && parent.op == '-' || parent.type == 'binary' && prec == OPERATORS[op] && node === parent.right;\n return parenthesize(f(), needParens);\n }\n }\n function parenthesize(code, cond) {\n return cond ? '\\'(\\' + ' + code + ' + \\')\\'' : code;\n }\n }\n function toCPS(ast, k) {\n var GENSYM = 0;\n return cps(ast, k);\n function cps(node, k) {\n switch (node.type) {\n case 'ref':\n return cpsRef(node, k);\n case 'num':\n case 'str':\n case 'null':\n case 'error':\n case 'bool':\n return cpsAtom(node, k);\n case 'prefix':\n case 'postfix':\n return cpsUnary(node, k);\n case 'binary':\n return cpsBinary(node, k);\n case 'func':\n return cpsFunc(node, k);\n case 'lambda':\n return cpsLambda(node, k);\n case 'matrix':\n return cpsMatrix(node.value, k, true);\n }\n throw new Error('Cannot CPS ' + node.type);\n }\n function cpsRef(node, k) {\n return node.ref == 'name' ? cpsNameRef(node, k) : cpsAtom(node, k);\n }\n function cpsAtom(node, k) {\n return k(node);\n }\n function cpsNameRef(node, k) {\n return {\n type: 'func',\n func: ',getname',\n args: [\n makeContinuation(k),\n node\n ]\n };\n }\n function cpsUnary(node, k) {\n return cps({\n type: 'func',\n func: 'unary' + node.op,\n args: [node.exp]\n }, k);\n }\n function cpsBinary(node, k) {\n return cps({\n type: 'func',\n func: 'binary' + node.op,\n args: [\n node.left,\n node.right\n ]\n }, k);\n }\n function cpsIf(co, th, el, k) {\n return cps(co, function (co) {\n var rest = makeContinuation(k);\n var thenK = gensym('T');\n var elseK = gensym('E');\n return {\n type: 'func',\n func: 'if',\n args: [\n rest,\n co,\n {\n type: 'lambda',\n vars: [thenK],\n body: cps(th || TRUE, function (th) {\n return {\n type: 'call',\n func: {\n type: 'var',\n name: thenK\n },\n args: [th]\n };\n })\n },\n {\n type: 'lambda',\n vars: [elseK],\n body: cps(el || FALSE, function (el) {\n return {\n type: 'call',\n func: {\n type: 'var',\n name: elseK\n },\n args: [el]\n };\n })\n }\n ]\n };\n });\n }\n function cpsAnd(args, k) {\n if (args.length === 0) {\n return cpsAtom(TRUE, k);\n }\n return cps({\n type: 'func',\n func: 'IF',\n args: [\n args[0],\n {\n type: 'func',\n func: 'AND',\n args: args.slice(1)\n },\n FALSE\n ]\n }, k);\n }\n function cpsOr(args, k) {\n if (args.length === 0) {\n return cpsAtom(FALSE, k);\n }\n return cps({\n type: 'func',\n func: 'IF',\n args: [\n args[0],\n TRUE,\n {\n type: 'func',\n func: 'OR',\n args: args.slice(1)\n }\n ]\n }, k);\n }\n function cpsFunc(node, k) {\n switch (node.func.toLowerCase()) {\n case 'if':\n return cpsIf(node.args[0], node.args[1], node.args[2], k);\n case 'and':\n return cpsAnd(node.args, k);\n case 'or':\n return cpsOr(node.args, k);\n case 'true':\n return k(TRUE);\n case 'false':\n return k(FALSE);\n }\n return function loop(args, i) {\n if (i == node.args.length) {\n return {\n type: 'func',\n func: node.func,\n args: args\n };\n } else {\n return cps(node.args[i], function (value) {\n return loop(args.concat([value]), i + 1);\n });\n }\n }([makeContinuation(k)], 0);\n }\n function cpsLambda(node, k) {\n var cont = gensym('K');\n var body = cps(node.body, function (body) {\n return {\n type: 'call',\n func: {\n type: 'var',\n value: cont\n },\n args: [body]\n };\n });\n return k({\n type: 'lambda',\n vars: [cont].concat(node.vars),\n body: body\n });\n }\n function cpsMatrix(elements, k, isMatrix) {\n var a = [];\n return function loop(i) {\n if (i == elements.length) {\n return k({\n type: 'matrix',\n value: a\n });\n } else {\n return (isMatrix ? cpsMatrix : cps)(elements[i], function (val) {\n a[i] = val;\n return loop(i + 1);\n });\n }\n }(0);\n }\n function makeContinuation(k) {\n var cont = gensym('R');\n return {\n type: 'lambda',\n vars: [cont],\n body: k({\n type: 'var',\n name: cont\n })\n };\n }\n function gensym(name) {\n if (!name) {\n name = '';\n }\n name = '_' + name;\n return name + ++GENSYM;\n }\n }\n var makeClosure = function (cache) {\n return function (code) {\n var f = cache[code];\n if (!f) {\n f = cache[code] = new Function('\\'use strict\\';return(' + code + ')')();\n }\n return f;\n };\n }(Object.create(null));\n var FORMULA_CACHE = Object.create(null);\n function makeFormula(exp) {\n var printer = makePrinter(exp);\n var hash = printer.call(exp);\n var formula = FORMULA_CACHE[hash];\n if (formula) {\n return formula.clone(exp.sheet, exp.row, exp.col);\n }\n var code = js(toCPS(exp.ast, function (ret) {\n return {\n type: 'return',\n value: ret\n };\n }));\n code = [\n 'function(){',\n 'var context = this, refs = context.formula.absrefs',\n code,\n '}'\n ].join(';\\n');\n formula = new runtime.Formula(exp.refs, makeClosure(code), printer, exp.sheet, exp.row, exp.col);\n FORMULA_CACHE[hash] = formula;\n return formula;\n function js(node) {\n var type = node.type;\n if (type == 'num') {\n return node.value + '';\n } else if (type == 'str') {\n return JSON.stringify(node.value);\n } else if (type == 'error') {\n return 'context.error(' + JSON.stringify(node.value) + ')';\n } else if (type == 'return') {\n return 'context.resolve(' + js(node.value) + ')';\n } else if (type == 'func') {\n return 'context.func(' + JSON.stringify(node.func) + ', ' + js(node.args[0]) + ', ' + jsArray(node.args.slice(1)) + ')';\n } else if (type == 'call') {\n return js(node.func) + '(' + node.args.map(js).join(', ') + ')';\n } else if (type == 'ref') {\n return 'refs[' + node.index + ']';\n } else if (type == 'bool') {\n return '' + node.value;\n } else if (type == 'if') {\n return '(context.bool(' + js(node.co) + ') ? ' + js(node.th) + ' : ' + js(node.el) + ')';\n } else if (type == 'lambda') {\n return '(function(' + node.vars.join(', ') + '){ return(' + js(node.body) + ') })';\n } else if (type == 'var') {\n return node.name;\n } else if (type == 'matrix') {\n return jsArray(node.value);\n } else if (type == 'null') {\n return 'null';\n } else {\n throw new Error('Cannot compile expression ' + type);\n }\n }\n function jsArray(a) {\n return '[ ' + a.map(js).join(', ') + ' ]';\n }\n }\n function identity(x) {\n return x;\n }\n function TokenStream(input, options) {\n input = RawTokenStream(InputStream(input), options);\n var ahead = input.ahead;\n var skip = input.skip;\n var token = null;\n var fixCell = options.row != null && options.col != null ? function (cell) {\n if (cell.rel & 1) {\n cell.col -= options.col;\n }\n if (cell.rel & 2) {\n cell.row -= options.row;\n }\n return cell;\n } : identity;\n var addPos = options.forEditor ? function (thing, startToken, endToken) {\n thing.begin = startToken.begin;\n thing.end = endToken.end;\n return thing;\n } : identity;\n return {\n peek: peek,\n next: next,\n croak: input.croak,\n eof: input.eof,\n is: is\n };\n function is(type, value) {\n var tok = peek();\n return tok != null && (type == null || tok.type === type) && (value == null || tok.value === value) ? tok : null;\n }\n function peek() {\n if (token == null) {\n token = readNext();\n }\n return token;\n }\n function next() {\n if (token != null) {\n var tmp = token;\n token = null;\n return tmp;\n }\n return readNext();\n }\n function readNext() {\n var ret;\n var t = input.peek();\n if (t) {\n if (t.type == 'sym' || t.type == 'rc' || t.type == 'num') {\n ret = ahead(8, refRange3D) || ahead(6, refCell3D) || ahead(6, refSheetRange) || ahead(4, refSheetCell) || ahead(4, refRange) || ahead(2, refCell) || ahead(2, funcall);\n }\n if (!ret) {\n ret = input.next();\n }\n }\n return ret;\n }\n function toCell(tok, isFirst) {\n if (tok.type == 'rc') {\n if (tok.rel && !options.forEditor && (options.row == null || options.col == null)) {\n input.croak('Cannot read relative cell in RC notation');\n }\n return new CellRef(tok.row, tok.col, tok.rel);\n }\n if (tok.type == 'num') {\n if (tok.value <= 1048577) {\n return fixCell(new CellRef(getrow(tok.value), isFirst ? -Infinity : +Infinity, 2));\n } else {\n return null;\n }\n }\n var name = tok.value;\n var m = /^(\\$)?([a-z]+)(\\$)?(\\d+)$/i.exec(name);\n if (m) {\n var row = getrow(m[4]), col = getcol(m[2]);\n if (row <= 1048576 && col <= 16383) {\n return fixCell(new CellRef(getrow(m[4]), getcol(m[2]), (m[1] ? 0 : 1) | (m[3] ? 0 : 2)));\n } else {\n return null;\n }\n }\n var abs = name.charAt(0) == '$';\n if (abs) {\n name = name.substr(1);\n }\n if (/^\\d+$/.test(name)) {\n var row = getrow(name);\n if (row <= 1048576) {\n return fixCell(new CellRef(getrow(name), isFirst ? -Infinity : +Infinity, abs ? 0 : 2));\n }\n } else {\n var col = getcol(name);\n if (col <= 16383) {\n return fixCell(new CellRef(isFirst ? -Infinity : +Infinity, getcol(name), abs ? 0 : 1));\n }\n }\n }\n function refRange3D(a, b, c, d, e, f, g, h) {\n if (a.type == 'sym' && b.type == 'op' && b.value == ':' && c.type == 'sym' && d.type == 'punc' && d.value == '!' && (e.type == 'sym' || e.type == 'rc' || e.type == 'num' && e.value == e.value | 0) && f.type == 'op' && f.value == ':' && (g.type == 'sym' || g.type == 'rc' || g.type == 'num' && g.value == g.value | 0) && g.type == e.type && !(h.type == 'punc' && h.value == '(' && !g.space)) {\n var tl = toCell(e, true), br = toCell(g, false);\n if (tl && br) {\n skip(7);\n return addPos(new RangeRef(tl.setSheet(a.value, true), br.setSheet(c.value, true)).setSheet(a.value, true), a, g);\n }\n }\n }\n function refCell3D(a, b, c, d, e, f) {\n if (a.type == 'sym' && b.type == 'op' && b.value == ':' && c.type == 'sym' && d.type == 'punc' && d.value == '!' && (e.type == 'sym' || e.type == 'rc' || e.type == 'num' && e.value == e.value | 0) && !(f.type == 'punc' && f.value == '(' && !e.space)) {\n var tl = toCell(e);\n if (tl) {\n skip(5);\n var br = tl.clone();\n return addPos(new RangeRef(tl.setSheet(a.value, true), br.setSheet(c.value, true)).setSheet(a.value, true), a, e);\n }\n }\n }\n function refSheetRange(a, b, c, d, e, f) {\n if (a.type == 'sym' && b.type == 'punc' && b.value == '!' && (c.type == 'sym' || c.type == 'rc' || c.type == 'num' && c.value == c.value | 0) && d.type == 'op' && d.value == ':' && (e.type == 'sym' || e.type == 'rc' || e.type == 'num' && e.value == e.value | 0) && !(f.type == 'punc' && f.value == '(' && !e.space)) {\n var tl = toCell(c, true), br = toCell(e, false);\n if (tl && br) {\n skip(5);\n return addPos(new RangeRef(tl, br).setSheet(a.value, true), a, e);\n }\n }\n }\n function refSheetCell(a, b, c, d) {\n if (a.type == 'sym' && b.type == 'punc' && b.value == '!' && (c.type == 'sym' || c.type == 'rc' || c.type == 'num' && c.value == c.value | 0) && !(d.type == 'punc' && d.value == '(' && !c.space)) {\n skip(3);\n var x = toCell(c);\n if (!x || !isFinite(x.row)) {\n x = new NameRef(c.value);\n }\n return addPos(x.setSheet(a.value, true), a, c);\n }\n }\n function refRange(a, b, c, d) {\n if ((a.type == 'sym' || a.type == 'rc' || a.type == 'num' && a.value == a.value | 0) && (b.type == 'op' && b.value == ':') && (c.type == 'sym' || c.type == 'rc' || c.type == 'num' && c.value == c.value | 0) && !(d.type == 'punc' && d.value == '(' && !c.space)) {\n var tl = toCell(a, true), br = toCell(c, false);\n if (tl && br) {\n skip(3);\n return addPos(new RangeRef(tl, br), a, c);\n }\n }\n }\n function refCell(a, b) {\n if ((a.type == 'sym' || a.type == 'rc') && !(b.type == 'punc' && b.value == '(' && !a.space)) {\n var x = toCell(a);\n if (x && isFinite(x.row) && isFinite(x.col)) {\n skip(1);\n return addPos(x, a, a);\n }\n }\n }\n function funcall(a, b) {\n if (a.type == 'sym' && b.type == 'punc' && b.value == '(' && !a.space) {\n a.type = 'func';\n skip(1);\n return a;\n }\n }\n }\n function isWhitespace(ch) {\n return ' \\t\\n\\xA0\\u200B'.indexOf(ch) >= 0;\n }\n function RawTokenStream(input, options) {\n var tokens = [], index = 0;\n var readWhile = input.readWhile;\n return {\n next: next,\n peek: peek,\n eof: eof,\n croak: input.croak,\n ahead: ahead,\n skip: skip\n };\n function isDigit(ch) {\n return /[0-9]/i.test(ch);\n }\n function isIdStart(ch) {\n return /[a-z$_]/i.test(ch) || util.isUnicodeLetter(ch);\n }\n function isId(ch) {\n return isIdStart(ch) || isDigit(ch) || ch == '.';\n }\n function isOpChar(ch) {\n return ch in OPERATORS;\n }\n function isPunc(ch) {\n return '!;(){}[]'.indexOf(ch) >= 0;\n }\n function readNumber() {\n var has_dot = false;\n var number = readWhile(function (ch) {\n if (ch == '.') {\n if (has_dot) {\n return false;\n }\n has_dot = true;\n return true;\n }\n return isDigit(ch);\n });\n return {\n type: 'num',\n value: parseFloat(number)\n };\n }\n function symbol(id, quote) {\n return {\n type: 'sym',\n value: id,\n upper: id.toUpperCase(),\n space: isWhitespace(input.peek()),\n quote: quote\n };\n }\n function getRC(a, b, c) {\n if (!a && !b && !c) {\n return null;\n }\n if (!a && !c || a && c) {\n var num = b ? parseInt(b, 10) : 0;\n return a ? num : num - 1;\n }\n }\n function readSymbol() {\n var m = input.lookingAt(/^R(\\[)?(-?[0-9]+)?(\\])?C(\\[)?(-?[0-9]+)?(\\])?/i);\n if (m) {\n var row = getRC(m[1], m[2], m[3]);\n var col = getRC(m[4], m[5], m[6]);\n if (row != null && col != null) {\n input.skip(m);\n return {\n type: 'rc',\n row: row,\n col: col,\n rel: (m[4] || !(m[4] || m[5] || m[6]) ? 1 : 0) | (m[1] || !(m[1] || m[2] || m[3]) ? 2 : 0)\n };\n }\n }\n return symbol(readWhile(isId));\n }\n function readString() {\n input.next();\n return {\n type: 'str',\n value: input.readEscaped('\"')\n };\n }\n function readSheetName() {\n input.next();\n return symbol(input.readEscaped('\\''), true);\n }\n function readOperator() {\n return {\n type: 'op',\n value: readWhile(function (ch, op) {\n return op + ch in OPERATORS;\n })\n };\n }\n function readPunc() {\n return {\n type: 'punc',\n value: input.next()\n };\n }\n function readNext() {\n if (input.eof()) {\n return null;\n }\n var ch = input.peek(), m;\n if (ch == '\"') {\n return readString();\n }\n if (ch == '\\'') {\n return readSheetName();\n }\n if (isDigit(ch) || ch == '.') {\n return readNumber();\n }\n if (isIdStart(ch)) {\n return readSymbol();\n }\n if (isOpChar(ch)) {\n return readOperator();\n }\n if (isPunc(ch)) {\n return readPunc();\n }\n if (m = input.lookingAt(/^#([a-z\\/]+)[?!]?/i)) {\n input.skip(m);\n return {\n type: 'error',\n value: m[1]\n };\n }\n if (!options.forEditor) {\n input.croak('Can\\'t handle character: ' + ch);\n }\n return {\n type: 'error',\n value: input.next()\n };\n }\n function peek() {\n while (tokens.length <= index) {\n readWhile(isWhitespace);\n var begin = input.pos();\n var tok = readNext();\n if (options.forEditor && tok) {\n tok.begin = begin;\n tok.end = input.pos();\n }\n tokens.push(tok);\n }\n return tokens[index];\n }\n function next() {\n var tok = peek();\n if (tok) {\n index++;\n }\n return tok;\n }\n function ahead(n, f) {\n var pos = index, a = [];\n while (n-- > 0) {\n a.push(next() || EOF);\n }\n index = pos;\n return f.apply(a, a);\n }\n function skip(n) {\n index += n;\n }\n function eof() {\n return peek() == null;\n }\n }\n var EOF = { type: 'eof' };\n function InputStream(input) {\n var pos = 0, line = 1, col = 0;\n return {\n next: next,\n peek: peek,\n eof: eof,\n croak: croak,\n readWhile: readWhile,\n readEscaped: readEscaped,\n lookingAt: lookingAt,\n skip: skip,\n forward: forward,\n pos: location\n };\n function location() {\n return pos;\n }\n function next() {\n var ch = input.charAt(pos++);\n if (ch == '\\n') {\n line++;\n col = 0;\n } else {\n col++;\n }\n return ch;\n }\n function peek() {\n return input.charAt(pos);\n }\n function eof() {\n return peek() === '';\n }\n function croak(msg) {\n throw new ParseError(msg + ' (input: ' + input + ')', pos);\n }\n function skip(ch) {\n if (typeof ch == 'string') {\n if (input.substr(pos, ch.length) != ch) {\n croak('Expected ' + ch);\n }\n forward(ch.length);\n } else if (ch instanceof RegExp) {\n var m = ch.exec(input.substr(pos));\n if (m) {\n forward(m[0].length);\n return m;\n }\n } else {\n forward(ch[0].length);\n }\n }\n function forward(n) {\n while (n-- > 0) {\n next();\n }\n }\n function readEscaped(end) {\n var escaped = false, str = '';\n while (!eof()) {\n var ch = next();\n if (escaped) {\n str += ch;\n escaped = false;\n } else if (ch == '\\\\') {\n escaped = true;\n } else if (ch == end) {\n break;\n } else {\n str += ch;\n }\n }\n return str;\n }\n function readWhile(predicate) {\n var str = '';\n while (!eof() && predicate(peek(), str)) {\n str += next();\n }\n return str;\n }\n function lookingAt(rx) {\n return rx.exec(input.substr(pos));\n }\n }\n var FORMAT_PARSERS = [];\n var registerFormatParser = exports.registerFormatParser = function (p) {\n FORMAT_PARSERS.push(p);\n };\n exports.parse = function (sheet, row, col, input) {\n if (input instanceof Date) {\n return {\n type: 'date',\n value: runtime.dateToSerial(input)\n };\n }\n if (typeof input == 'number') {\n return {\n type: 'number',\n value: input\n };\n }\n if (typeof input == 'boolean') {\n return {\n type: 'boolean',\n value: input\n };\n }\n input += '';\n if (/^'/.test(input)) {\n return {\n type: 'string',\n value: input.substr(1)\n };\n }\n if (/^[0-9.]+%$/.test(input)) {\n var str = input.substr(0, input.length - 1);\n var num = parseFloat(str);\n if (!isNaN(num) && num == str) {\n return {\n type: 'percent',\n value: num / 100\n };\n }\n }\n if (/^=/.test(input)) {\n input = input.substr(1);\n if (/\\S/.test(input)) {\n return parseFormula(sheet, row, col, input);\n } else {\n return {\n type: 'string',\n value: '=' + input\n };\n }\n }\n for (var i = 0; i < FORMAT_PARSERS.length; ++i) {\n var result = FORMAT_PARSERS[i](input);\n if (result) {\n return result;\n }\n }\n if (input.toLowerCase() == 'true') {\n return {\n type: 'boolean',\n value: true\n };\n }\n if (input.toLowerCase() == 'false') {\n return {\n type: 'boolean',\n value: false\n };\n }\n var date = runtime.parseDate(input);\n if (date) {\n return {\n type: 'date',\n value: runtime.dateToSerial(date)\n };\n }\n var num = parseFloat(input);\n if (!isNaN(num) && input.length > 0 && num == input) {\n return {\n type: 'number',\n value: num\n };\n }\n return {\n type: 'string',\n value: input\n };\n };\n function tokenize(input, row, col) {\n var tokens = [];\n input = TokenStream(input, {\n forEditor: true,\n row: row,\n col: col\n });\n while (!input.eof()) {\n tokens.push(next());\n }\n var tok = tokens[0];\n if (tok.type == 'op' && tok.value == '=') {\n tok.type = 'startexp';\n }\n return tokens;\n function next() {\n var tok = input.next();\n if (tok.type == 'sym') {\n if (tok.upper == 'TRUE') {\n tok.type = 'bool';\n tok.value = true;\n } else if (tok.upper == 'FALSE') {\n tok.type = 'bool';\n tok.value = false;\n }\n } else if (tok.type == 'ref') {\n tok = {\n type: 'ref',\n ref: row != null && col != null ? tok.absolute(row, col) : tok,\n begin: tok.begin,\n end: tok.end\n };\n }\n return tok;\n }\n }\n function parseSqref(input, row, col) {\n row = row || 0;\n col = col || 0;\n input = TokenStream(input, {\n row: row,\n col: col\n });\n var refs = [];\n while (!input.eof()) {\n var ref = input.next();\n if (ref.type != 'ref') {\n throw new ParseError('Expecting a reference but got: ' + JSON.stringify(ref));\n }\n refs.push(ref.absolute(row, col));\n }\n return refs;\n }\n exports.parseNameDefinition = parseNameDefinition;\n exports.parseFormula = parseFormula;\n exports.parseReference = parseReference;\n exports.compile = makeFormula;\n exports.parseSqref = parseSqref;\n exports.InputStream = InputStream;\n exports.ParseError = ParseError;\n exports.tokenize = tokenize;\n registerFormatParser(function (input) {\n var m;\n if (m = /^(\\d+):(\\d+)$/.exec(input)) {\n var hh = parseInt(m[1], 10);\n var mm = parseInt(m[2], 10);\n return {\n type: 'date',\n format: 'hh:mm',\n value: runtime.packTime(hh, mm, 0, 0)\n };\n }\n if (m = /^(\\d+):(\\d+)(\\.\\d+)$/.exec(input)) {\n var mm = parseInt(m[1], 10);\n var ss = parseInt(m[2], 10);\n var ms = parseFloat(m[3]) * 1000;\n return {\n type: 'date',\n format: 'mm:ss.00',\n value: runtime.packTime(0, mm, ss, ms)\n };\n }\n if (m = /^(\\d+):(\\d+):(\\d+)$/.exec(input)) {\n var hh = parseInt(m[1], 10);\n var mm = parseInt(m[2], 10);\n var ss = parseInt(m[3], 10);\n return {\n type: 'date',\n format: 'hh:mm:ss',\n value: runtime.packTime(hh, mm, ss, 0)\n };\n }\n if (m = /^(\\d+):(\\d+):(\\d+)(\\.\\d+)$/.exec(input)) {\n var hh = parseInt(m[1], 10);\n var mm = parseInt(m[2], 10);\n var ss = parseInt(m[3], 10);\n var ms = parseFloat(m[4]) * 1000;\n return {\n type: 'date',\n format: 'hh:mm:ss.00',\n value: runtime.packTime(hh, mm, ss, ms)\n };\n }\n });\n registerFormatParser(function (input) {\n var m, n;\n var culture = kendo.culture();\n var comma = culture.numberFormat[','];\n var dot = culture.numberFormat['.'];\n var currency = culture.numberFormat.currency.symbol;\n var rxnum = getNumberRegexp(comma, dot);\n var rxcur = new RegExp('^\\\\s*\\\\' + currency + '\\\\s*');\n var sign = 1;\n var format = '';\n var suffix = '';\n var has_currency = false;\n input = InputStream(input.replace(/^\\s+|\\s+$/g, ''));\n if (input.skip(/^-\\s*/)) {\n sign = -1;\n }\n if (m = input.skip(rxcur)) {\n has_currency = true;\n format += '\"' + m[0] + '\"';\n }\n if (input.skip(/^-\\s*/)) {\n if (sign < 0) {\n return null;\n }\n sign = -1;\n }\n if (!(n = input.skip(rxnum))) {\n return null;\n }\n format += '#';\n if (m = input.skip(rxcur)) {\n if (has_currency) {\n return null;\n }\n has_currency = true;\n suffix = '\"' + m[0] + '\"';\n }\n if (!input.eof()) {\n return null;\n }\n if (n[2] || has_currency) {\n format += ',#';\n }\n if (n[3]) {\n format += '.' + repeat('0', n[3].length - 1);\n }\n var value = n[0].replace(new RegExp('\\\\' + comma, 'g'), '').replace(new RegExp('\\\\' + dot, 'g'), '.');\n format += suffix;\n if (has_currency) {\n format += ';-' + format;\n }\n return {\n type: 'number',\n format: format,\n value: sign * parseFloat(value)\n };\n });\n var NUMBER_FORMAT_RX = {};\n function getNumberRegexp(comma, dot) {\n var id = comma + dot;\n var rx = NUMBER_FORMAT_RX[id];\n if (!rx) {\n rx = '^(\\\\d+(COM\\\\d{3})*(DOT\\\\d+)?)';\n rx = rx.replace(/DOT/g, '\\\\' + dot).replace(/COM/g, '\\\\' + comma);\n rx = new RegExp(rx);\n NUMBER_FORMAT_RX[id] = rx;\n }\n return rx;\n }\n function repeat(str, len) {\n var out = '';\n while (len-- > 0) {\n out += str;\n }\n return out;\n }\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/excel-reader', [\n 'kendo.core',\n 'kendo.color',\n 'util/parse-xml',\n 'spreadsheet/calc'\n ], f);\n}(function () {\n 'use strict';\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var $ = kendo.jQuery;\n var parseXML = kendo.util.parseXML;\n var parseReference = kendo.spreadsheet.calc.parseReference;\n var MAP_EXCEL_OPERATOR = {\n greaterThanOrEqual: 'greaterThanOrEqualTo',\n lessThanOrEqual: 'lessThanOrEqualTo'\n };\n var ERROR_LOG = null;\n function readExcel(file, workbook, deferred) {\n var reader = new FileReader();\n reader.onload = function (e) {\n var zip = new JSZip(e.target.result);\n readWorkbook(zip, workbook, deferred);\n };\n reader.readAsArrayBuffer(file);\n }\n var SEL_CELL = [\n 'sheetData',\n 'row',\n 'c'\n ];\n var SEL_COL = [\n 'cols',\n 'col'\n ];\n var SEL_DEFINED_NAME = [\n 'definedNames',\n 'definedName'\n ];\n var SEL_FORMULA = [\n 'sheetData',\n 'row',\n 'c',\n 'f'\n ];\n var SEL_MERGE = [\n 'mergeCells',\n 'mergeCell'\n ];\n var SEL_PANE = [\n 'sheetViews',\n 'sheetView',\n 'pane'\n ];\n var SEL_ROW = [\n 'sheetData',\n 'row'\n ];\n var SEL_SELECTION = [\n 'sheetViews',\n 'sheetView',\n 'selection'\n ];\n var SEL_SHEET = [\n 'sheets',\n 'sheet'\n ];\n var SEL_STRING = [\n 'sheetData',\n 'row',\n 'c',\n 'is'\n ];\n var SEL_TEXT = ['t'];\n var SEL_SHARED_STRING = ['si'];\n var SEL_VALUE = [\n 'sheetData',\n 'row',\n 'c',\n 'v'\n ];\n var SEL_VIEW = [\n 'bookViews',\n 'workbookView'\n ];\n var SEL_SHEET_VIEW = [\n 'sheetViews',\n 'sheetView'\n ];\n var SEL_HYPERLINK = [\n 'hyperlinks',\n 'hyperlink'\n ];\n var SEL_VALIDATION = [\n 'dataValidations',\n 'dataValidation'\n ];\n var SEL_VALIDATION_FORMULA1 = [\n 'dataValidations',\n 'dataValidation',\n 'formula1'\n ];\n var SEL_VALIDATION_FORMULA2 = [\n 'dataValidations',\n 'dataValidation',\n 'formula2'\n ];\n function xl(file) {\n if (!/^\\//.test(file)) {\n file = 'xl/' + file;\n } else {\n file = file.substr(1);\n }\n return file;\n }\n function readWorkbook(zip, workbook, progress) {\n ERROR_LOG = workbook.excelImportErrors = [];\n var strings = readStrings(zip);\n var relationships = readRelationships(zip, '_rels/workbook.xml');\n var theme = readTheme(zip, relationships.byType.theme[0]);\n var styles = readStyles(zip, theme);\n var items = [];\n var activeSheet = 0;\n parse(zip, 'xl/workbook.xml', {\n enter: function (tag, attrs) {\n if (this.is(SEL_SHEET)) {\n var relId = attrs['r:id'];\n var file = relationships.byId[relId];\n var name = attrs.name;\n var dim = sheetDimensions(zip, file);\n items.push({\n workbook: workbook,\n zip: zip,\n strings: strings,\n styles: styles,\n file: file,\n options: {\n name: name,\n rows: Math.max(workbook.options.rows || 0, dim.rows),\n columns: Math.max(workbook.options.columns || 0, dim.cols),\n columnWidth: dim.columnWidth,\n rowHeight: dim.rowHeight\n }\n });\n } else if (this.is(SEL_VIEW)) {\n if (attrs.activeTab) {\n activeSheet = integer(attrs.activeTab);\n }\n }\n },\n text: function (text) {\n var attrs = this.is(SEL_DEFINED_NAME);\n if (attrs && !(bool(attrs['function']) || bool(attrs.vbProcedure))) {\n var localSheetId = attrs.localSheetId;\n var sheet = null;\n if (localSheetId != null) {\n sheet = items[localSheetId].options.name;\n }\n var name = attrs.name;\n if (sheet) {\n name = '\\'' + sheet.replace(/\\'/g, '\\\\\\'') + '\\'!' + name;\n }\n withErrorLog(sheet, null, function () {\n workbook.defineName(name, text, bool(attrs.hidden));\n }, 'reading user-defined name: ' + name);\n }\n }\n });\n var loading = new $.Deferred();\n loading.progress(function (args) {\n if (progress) {\n progress.notify(args);\n }\n }).then(function () {\n var sheets = workbook.sheets();\n recalcSheets(sheets);\n workbook.activeSheet(sheets[activeSheet]);\n if (progress) {\n progress.resolve();\n }\n });\n loadSheets(items, workbook, loading);\n }\n function loadSheets(items, workbook, progress) {\n var ready = new $.Deferred().resolve();\n for (var i = 0; i < items.length; i++) {\n (function (entry, i) {\n ready = ready.then(function () {\n var sheet = workbook.insertSheet(entry.options);\n sheet.suspendChanges(true);\n var promise = queueSheet(sheet, entry);\n var args = {\n sheet: sheet,\n progress: i / (items.length - 1)\n };\n promise.then(function () {\n progress.notify(args);\n });\n return promise;\n });\n }(items[i], i));\n }\n ready.then(function () {\n progress.resolve();\n });\n }\n function queueSheet(sheet, ctx) {\n var deferred = new $.Deferred();\n setTimeout(function () {\n readSheet(ctx.zip, ctx.file, sheet, ctx.strings, ctx.styles);\n deferred.resolve();\n }, 0);\n return deferred;\n }\n function recalcSheets(sheets) {\n for (var i = 0; i < sheets.length; i++) {\n sheets[i].suspendChanges(false).triggerChange({ recalc: true });\n }\n }\n function sheetDimensions(zip, file) {\n var dim = {\n rows: 0,\n cols: 0\n };\n parse(zip, xl(file), {\n enter: function (tag, attrs) {\n if (tag == 'dimension') {\n var ref = parseReference(attrs.ref);\n if (ref.bottomRight) {\n dim.cols = ref.bottomRight.col + 1;\n dim.rows = ref.bottomRight.row + 1;\n }\n } else if (tag === 'sheetFormatPr') {\n if (attrs.defaultColWidth) {\n dim.columnWidth = toColWidth(parseFloat(attrs.defaultColWidth));\n }\n if (attrs.defaultRowHeight) {\n dim.rowHeight = toRowHeight(parseFloat(attrs.defaultRowHeight));\n }\n } else if (this.is(SEL_ROW)) {\n this.exit();\n }\n }\n });\n return dim;\n }\n function toColWidth(size) {\n var maximumDigitWidth = 7;\n var fraction = (256 * size + Math.floor(128 / maximumDigitWidth)) / 256;\n return Math.floor(fraction) * maximumDigitWidth;\n }\n function toRowHeight(pts) {\n return pts * 1.5625;\n }\n function readSheet(zip, file, sheet, strings, styles) {\n var ref, type, value, formula, formulaRange;\n var nCols = sheet._columns._count;\n var prevCellRef = null;\n var relsFile = file.replace(/worksheets\\//, 'worksheets/_rels/');\n var relationships = readRelationships(zip, relsFile);\n var formula1, formula2;\n var filterRef;\n var filterColumn;\n var customFilterLogic;\n var customFilterCriteria;\n var valueFilterBlanks;\n var valueFilterValues;\n var filters = [];\n ERROR_LOG = sheet._workbook.excelImportErrors;\n parse(zip, xl(file), {\n enter: function (tag, attrs) {\n var tmp;\n if (this.is(SEL_CELL)) {\n value = null;\n formula = null;\n formulaRange = null;\n ref = attrs.r;\n if (ref == null) {\n ref = parseReference(prevCellRef);\n ref.col++;\n ref = ref.toString();\n }\n prevCellRef = ref;\n type = attrs.t;\n var styleIndex = attrs.s;\n if (styleIndex != null) {\n applyStyle(sheet, ref, styles, styleIndex);\n }\n } else if (this.is(SEL_MERGE)) {\n sheet.range(attrs.ref).merge();\n } else if (this.is(SEL_COL)) {\n var start = integer(attrs.min) - 1;\n var stop = Math.min(nCols, integer(attrs.max)) - 1;\n var width;\n if (attrs.width) {\n width = toColWidth(parseFloat(attrs.width));\n if (width !== 0) {\n sheet._columns.values.value(start, stop, width);\n }\n }\n if (attrs.hidden === '1' || width === 0) {\n for (var ci = start; ci <= stop; ci++) {\n sheet.hideColumn(ci);\n }\n }\n if (attrs.style != null) {\n applyStyle(sheet, new kendo.spreadsheet.RangeRef(new kendo.spreadsheet.CellRef(-Infinity, start), new kendo.spreadsheet.CellRef(+Infinity, stop)), styles, attrs.style);\n }\n } else if (this.is(SEL_ROW)) {\n var row = integer(attrs.r) - 1;\n var height;\n if (attrs.ht) {\n height = toRowHeight(parseFloat(attrs.ht));\n if (height !== 0) {\n sheet._rows.values.value(row, row, height);\n }\n }\n if (attrs.hidden === '1' || height === 0) {\n sheet.hideRow(row);\n }\n } else if (this.is(SEL_SELECTION)) {\n if (attrs.activeCell) {\n var acRef = parseReference(attrs.activeCell);\n sheet.select(acRef, true);\n }\n } else if (this.is(SEL_PANE)) {\n if (attrs.state == 'frozen') {\n if (attrs.xSplit) {\n sheet.frozenColumns(integer(attrs.xSplit));\n }\n if (attrs.ySplit) {\n sheet.frozenRows(integer(attrs.ySplit));\n }\n }\n } else if (this.is(SEL_SHEET_VIEW)) {\n sheet.showGridLines(bool(attrs.showGridLines, true));\n } else if (this.is(SEL_HYPERLINK)) {\n var relId = attrs['r:id'];\n var target = relationships.byId[relId];\n if (target) {\n sheet.range(attrs.ref).link(target);\n }\n } else if (this.is(['autoFilter'])) {\n filterRef = attrs.ref;\n } else if (filterRef) {\n if (this.is(['filterColumn'])) {\n filterColumn = parseInt(attrs.colId, 10);\n } else if (this.is(['customFilters'])) {\n customFilterLogic = bool(attrs.and) ? 'and' : 'or';\n customFilterCriteria = [];\n } else if (this.is(['customFilter'])) {\n tmp = getCustomFilter(attrs.operator, attrs.val);\n if (tmp) {\n customFilterCriteria.push({\n operator: tmp.operator,\n value: tmp.value\n });\n }\n } else if (this.is(['dynamicFilter'])) {\n filters.push({\n column: filterColumn,\n filter: new kendo.spreadsheet.DynamicFilter({ type: dynamicFilterType(attrs.type) })\n });\n } else if (this.is(['top10'])) {\n filters.push({\n column: filterColumn,\n filter: new kendo.spreadsheet.TopFilter({\n value: getFilterVal(attrs.val),\n type: function (percent, top) {\n return percent && top ? 'topPercent' : top ? 'topNumber' : percent ? 'bottomPercent' : 'bottomNumber';\n }(bool(attrs.percent), bool(attrs.top))\n })\n });\n } else if (this.is(['filters'])) {\n valueFilterBlanks = bool(attrs.blank);\n valueFilterValues = [];\n } else if (this.is(['filter'])) {\n valueFilterValues.push(getFilterVal(attrs.val));\n }\n }\n },\n leave: function (tag, attrs) {\n if (this.is(SEL_CELL)) {\n if (formula != null) {\n var failed = withErrorLog(sheet, formulaRange || ref, function () {\n sheet.range(formulaRange || ref).formula(formula);\n }, 'parsing formula');\n if (failed) {\n sheet.range(formulaRange || ref).value(formula).background('#ffaaaa');\n }\n } else if (value != null) {\n var range = sheet.range(ref);\n if (!range._get('formula')) {\n if (!type || type == 'n') {\n value = parseFloat(value);\n } else if (type == 's') {\n value = strings[integer(value)];\n } else if (type == 'b') {\n value = value === '1';\n } else if (type == 'd') {\n value = kendo.parseDate(value);\n }\n if (value != null) {\n range.value(value);\n }\n }\n }\n } else if (this.is(SEL_VALIDATION)) {\n (function () {\n var refs = kendo.spreadsheet.calc.parseSqref(attrs.sqref);\n var type = attrs.type.toLowerCase();\n var operator = attrs.operator;\n if (/^(?:whole|decimal)$/.test(type)) {\n type = 'number';\n } else if (type == 'list') {\n operator = 'list';\n }\n if (!operator && /^(?:number|date)$/.test(type)) {\n operator = 'between';\n }\n refs.forEach(function (ref) {\n withErrorLog(sheet, ref, function () {\n sheet.range(ref).validation({\n type: bool(attrs.showErrorMessage, true) ? 'reject' : 'warning',\n from: formula1,\n to: formula2,\n dataType: type,\n comparerType: MAP_EXCEL_OPERATOR[operator] || operator,\n allowNulls: bool(attrs.allowBlank),\n showButton: bool(attrs.showDropDown) || type == 'date' || type == 'list',\n messageTemplate: attrs.error,\n titleTemplate: attrs.errorTitle\n });\n }, 'parsing validation');\n });\n }());\n } else if (tag == 'cols') {\n sheet._columns._refresh();\n } else if (tag == 'sheetData') {\n sheet._rows._refresh();\n } else if (tag == 'autoFilter') {\n sheet.range(filterRef).filter(filters);\n filterRef = null;\n } else if (filterRef) {\n if (tag == 'customFilters') {\n filters.push({\n column: filterColumn,\n filter: new kendo.spreadsheet.CustomFilter({\n logic: customFilterLogic,\n criteria: customFilterCriteria\n })\n });\n } else if (tag == 'filters') {\n filters.push({\n column: filterColumn,\n filter: new kendo.spreadsheet.ValueFilter({\n values: valueFilterValues,\n blanks: valueFilterBlanks\n })\n });\n }\n }\n },\n text: function (text) {\n var attrs;\n if (this.is(SEL_VALUE) || this.is(SEL_STRING)) {\n value = text;\n } else if (attrs = this.is(SEL_FORMULA)) {\n formula = text;\n if (attrs.t == 'shared') {\n formulaRange = attrs.ref;\n }\n } else if (this.is(SEL_VALIDATION_FORMULA1)) {\n formula1 = text;\n } else if (this.is(SEL_VALIDATION_FORMULA2)) {\n formula2 = text;\n }\n }\n });\n }\n function getCustomFilter(op, value) {\n var ourOp = {\n equal: 'eq',\n notEqual: 'ne',\n greaterThan: 'gt',\n greaterThanOrEqual: 'gte',\n lessThan: 'lt',\n lessThanOrEqual: 'lte'\n }[op];\n value = getFilterVal(value);\n if (ourOp && typeof value == 'number') {\n return {\n operator: ourOp,\n value: value\n };\n }\n if ((op == 'notEqual' || !op) && typeof value == 'string') {\n return {\n operator: op ? 'doesnotmatch' : 'matches',\n value: value\n };\n }\n }\n function dynamicFilterType(type) {\n return {\n Q1: 'quarter1',\n Q2: 'quarter2',\n Q3: 'quarter3',\n Q4: 'quarter4',\n M1: 'january',\n M2: 'february',\n M3: 'march',\n M4: 'april',\n M5: 'may',\n M6: 'june',\n M7: 'july',\n M8: 'august',\n M9: 'september',\n M10: 'october',\n M11: 'november',\n M12: 'december'\n }[type.toUpperCase()] || type;\n }\n function getFilterVal(val) {\n var tmp = parseFloat(val);\n if (!isNaN(tmp) && tmp == val) {\n return tmp;\n }\n return val;\n }\n function withErrorLog(sheet, ref, func, context) {\n try {\n func();\n return false;\n } catch (ex) {\n var err = {\n context: context,\n error: String(ex)\n };\n if (sheet) {\n err.sheet = sheet.name();\n }\n if (ref) {\n err.location = String(ref);\n }\n ERROR_LOG.push(err);\n return true;\n }\n }\n var BORDER_WIDTHS = {\n 'none': 0,\n 'thin': 1,\n 'medium': 2,\n 'dashed': 1,\n 'dotted': 1,\n 'thick': 3,\n 'double': 3,\n 'hair': 1,\n 'mediumDashed': 2,\n 'dashDot': 1,\n 'mediumDashDot': 2,\n 'dashDotDot': 1,\n 'mediumDashDotDot': 2,\n 'slantDashDot': 1\n };\n var DEFAULT_FORMATS = {\n 0: 'General',\n 1: '0',\n 2: '0.00',\n 3: '#,##0',\n 4: '#,##0.00',\n 9: '0%',\n 10: '0.00%',\n 11: '0.00E+00',\n 12: '# ?/?',\n 13: '# ??/??',\n 14: 'mm-dd-yy',\n 15: 'd-mmm-yy',\n 16: 'd-mmm',\n 17: 'mmm-yy',\n 18: 'h:mm AM/PM',\n 19: 'h:mm:ss AM/PM',\n 20: 'h:mm',\n 21: 'h:mm:ss',\n 22: 'm/d/yy h:mm',\n 37: '#,##0 ;(#,##0)',\n 38: '#,##0 ;[Red](#,##0)',\n 39: '#,##0.00;(#,##0.00)',\n 40: '#,##0.00;[Red](#,##0.00)',\n 45: 'mm:ss',\n 46: '[h]:mm:ss',\n 47: 'mmss.0',\n 48: '##0.0E+0',\n 49: '@'\n };\n function applyStyle(sheet, ref, styles, styleIndex) {\n var range = sheet.range(ref);\n var xf = styles.inlineStyles[styleIndex], base, value;\n if (xf.xfId) {\n base = styles.namedStyles[xf.xfId];\n }\n if (shouldSet('applyBorder', 'borderId')) {\n setBorder(styles.borders[value]);\n }\n if (shouldSet('applyFont', 'fontId')) {\n setFont(styles.fonts[value]);\n }\n if (shouldSet('applyAlignment', 'textAlign')) {\n range.textAlign(value);\n }\n if (shouldSet('applyAlignment', 'verticalAlign')) {\n range.verticalAlign(value);\n }\n if (shouldSet('applyAlignment', 'wrapText')) {\n range._property('wrap', value);\n }\n if (shouldSet('applyFill', 'fillId')) {\n setFill(styles.fills[value]);\n }\n if (shouldSet('applyNumberFormat', 'numFmtId')) {\n setFormat(styles.numFmts[value] || DEFAULT_FORMATS[value]);\n }\n function setFormat(f) {\n var format = typeof f == 'string' ? f : f.formatCode;\n if (format != null && !/^general$/i.test(format)) {\n format = format.replace(/^\\[\\$-[0-9]+\\]/, '');\n range.format(format);\n }\n }\n function setFill(f) {\n if (f.type == 'solid') {\n range.background(f.color);\n }\n }\n function setFont(f) {\n range.fontFamily(f.name);\n range._property('fontSize', f.size);\n if (f.bold) {\n range.bold(true);\n }\n if (f.italic) {\n range.italic(true);\n }\n }\n function setBorder(b) {\n function set(side, prop) {\n var border = b[side];\n if (!border) {\n return;\n }\n var width = BORDER_WIDTHS[border.style];\n if (width === 0) {\n return;\n }\n var color = border.color;\n if (color == null) {\n color = '#000';\n }\n range._property(prop, {\n size: width,\n color: color\n });\n }\n set('left', 'borderLeft');\n set('top', 'borderTop');\n set('right', 'borderRight');\n set('bottom', 'borderBottom');\n }\n function shouldSet(applyName, propName) {\n var t = xf[applyName];\n if (t != null && !t) {\n return false;\n }\n value = xf[propName];\n if (base && value == null) {\n t = base[applyName];\n if (t != null && !t) {\n return false;\n }\n value = base[propName];\n }\n return value != null;\n }\n }\n function parse(zip, file, callbacks) {\n var part = zip.files[file];\n if (part) {\n parseXML(part.asUint8Array(), callbacks);\n }\n }\n function readStrings(zip) {\n var strings = [];\n var current = null;\n parse(zip, 'xl/sharedStrings.xml', {\n leave: function () {\n if (this.is(SEL_SHARED_STRING)) {\n strings.push(current);\n current = null;\n }\n },\n text: function (text) {\n if (this.is(SEL_TEXT)) {\n if (current == null) {\n current = '';\n }\n current += text;\n }\n }\n });\n return strings;\n }\n function readRelationships(zip, file) {\n var map = {\n byId: {},\n byType: { theme: [] }\n };\n parse(zip, xl(file) + '.rels', {\n enter: function (tag, attrs) {\n if (tag == 'Relationship') {\n map.byId[attrs.Id] = attrs.Target;\n var type = attrs.Type.match(/\\w+$/)[0];\n var entries = map.byType[type] || [];\n entries.push(attrs.Target);\n map.byType[type] = entries;\n }\n }\n });\n return map;\n }\n var SEL_BORDER = [\n 'borders',\n 'border'\n ];\n var SEL_FILL = [\n 'fills',\n 'fill'\n ];\n var SEL_FONT = [\n 'fonts',\n 'font'\n ];\n var SEL_INLINE_STYLE = [\n 'cellXfs',\n 'xf'\n ];\n var SEL_NAMED_STYLE = [\n 'cellStyleXfs',\n 'xf'\n ];\n var SEL_NUM_FMT = [\n 'numFmts',\n 'numFmt'\n ];\n var INDEXED_COLORS = [\n toCSSColor('FF000000'),\n toCSSColor('FFFFFFFF'),\n toCSSColor('FFFF0000'),\n toCSSColor('FF00FF00'),\n toCSSColor('FF0000FF'),\n toCSSColor('FFFFFF00'),\n toCSSColor('FFFF00FF'),\n toCSSColor('FF00FFFF'),\n toCSSColor('FF000000'),\n toCSSColor('FFFFFFFF'),\n toCSSColor('FFFF0000'),\n toCSSColor('FF00FF00'),\n toCSSColor('FF0000FF'),\n toCSSColor('FFFFFF00'),\n toCSSColor('FFFF00FF'),\n toCSSColor('FF00FFFF'),\n toCSSColor('FF800000'),\n toCSSColor('FF008000'),\n toCSSColor('FF000080'),\n toCSSColor('FF808000'),\n toCSSColor('FF800080'),\n toCSSColor('FF008080'),\n toCSSColor('FFC0C0C0'),\n toCSSColor('FF808080'),\n toCSSColor('FF9999FF'),\n toCSSColor('FF993366'),\n toCSSColor('FFFFFFCC'),\n toCSSColor('FFCCFFFF'),\n toCSSColor('FF660066'),\n toCSSColor('FFFF8080'),\n toCSSColor('FF0066CC'),\n toCSSColor('FFCCCCFF'),\n toCSSColor('FF000080'),\n toCSSColor('FFFF00FF'),\n toCSSColor('FFFFFF00'),\n toCSSColor('FF00FFFF'),\n toCSSColor('FF800080'),\n toCSSColor('FF800000'),\n toCSSColor('FF008080'),\n toCSSColor('FF0000FF'),\n toCSSColor('FF00CCFF'),\n toCSSColor('FFCCFFFF'),\n toCSSColor('FFCCFFCC'),\n toCSSColor('FFFFFF99'),\n toCSSColor('FF99CCFF'),\n toCSSColor('FFFF99CC'),\n toCSSColor('FFCC99FF'),\n toCSSColor('FFFFCC99'),\n toCSSColor('FF3366FF'),\n toCSSColor('FF33CCCC'),\n toCSSColor('FF99CC00'),\n toCSSColor('FFFFCC00'),\n toCSSColor('FFFF9900'),\n toCSSColor('FFFF6600'),\n toCSSColor('FF666699'),\n toCSSColor('FF969696'),\n toCSSColor('FF003366'),\n toCSSColor('FF339966'),\n toCSSColor('FF003300'),\n toCSSColor('FF333300'),\n toCSSColor('FF993300'),\n toCSSColor('FF993366'),\n toCSSColor('FF333399'),\n toCSSColor('FF333333'),\n toCSSColor('FF000000'),\n toCSSColor('FFFFFFFF')\n ];\n function readStyles(zip, theme) {\n var styles = {\n fonts: [],\n numFmts: {},\n fills: [],\n borders: [],\n namedStyles: [],\n inlineStyles: []\n };\n var font = null;\n var fill = null;\n var border = null;\n var xf = null;\n parse(zip, 'xl/styles.xml', {\n enter: function (tag, attrs, closed) {\n if (this.is(SEL_NUM_FMT)) {\n styles.numFmts[attrs.numFmtId] = attrs;\n } else if (this.is(SEL_FONT)) {\n styles.fonts.push(font = {});\n } else if (font) {\n if (tag == 'sz') {\n font.size = parseFloat(attrs.val);\n } else if (tag == 'name') {\n font.name = attrs.val;\n } else if (tag == 'b') {\n font.bold = bool(attrs.val, true);\n } else if (tag == 'i') {\n font.italic = bool(attrs.val, true);\n }\n } else if (this.is(SEL_FILL)) {\n styles.fills.push(fill = {});\n } else if (fill) {\n if (tag == 'patternFill') {\n fill.type = attrs.patternType;\n } else if (tag == 'fgColor' && fill.type === 'solid') {\n fill.color = getColor(attrs);\n } else if (tag == 'bgColor' && fill.type !== 'solid') {\n fill.color = getColor(attrs);\n }\n } else if (this.is(SEL_BORDER)) {\n styles.borders.push(border = {});\n } else if (border) {\n if (/^(?:left|top|right|bottom)$/.test(tag) && attrs.style) {\n border[tag] = { style: attrs.style };\n }\n if (tag == 'color') {\n var side = this.stack[this.stack.length - 2].$tag;\n border[side].color = getColor(attrs);\n }\n } else if (this.is(SEL_NAMED_STYLE)) {\n xf = getXf(attrs);\n styles.namedStyles.push(xf);\n if (closed) {\n xf = null;\n }\n } else if (this.is(SEL_INLINE_STYLE)) {\n xf = getXf(attrs);\n styles.inlineStyles.push(xf);\n if (closed) {\n xf = null;\n }\n } else if (xf) {\n if (tag == 'alignment') {\n if (/^(?:left|center|right|justify)$/.test(attrs.horizontal)) {\n xf.textAlign = attrs.horizontal;\n }\n if (/^(?:top|center|bottom)$/.test(attrs.vertical)) {\n xf.verticalAlign = attrs.vertical;\n }\n if (attrs.wrapText != null) {\n xf.wrapText = bool(attrs.wrapText);\n }\n }\n }\n },\n leave: function (tag) {\n if (this.is(SEL_FONT)) {\n font = null;\n } else if (this.is(SEL_FILL)) {\n fill = null;\n } else if (this.is(SEL_BORDER)) {\n border = null;\n } else if (tag == 'xf') {\n xf = null;\n }\n }\n });\n function getXf(attrs) {\n var xf = {\n borderId: integer(attrs.borderId),\n fillId: integer(attrs.fillId),\n fontId: integer(attrs.fontId),\n numFmtId: integer(attrs.numFmtId),\n pivotButton: bool(attrs.pivotButton),\n quotePrefix: bool(attrs.quotePrefix),\n xfId: integer(attrs.xfId)\n };\n addBool('applyAlignment');\n addBool('applyBorder');\n addBool('applyFill');\n addBool('applyFont');\n addBool('applyNumberFormat');\n addBool('applyProtection');\n function addBool(name) {\n if (attrs[name] != null) {\n xf[name] = bool(attrs[name]);\n }\n }\n return xf;\n }\n function getColor(attrs) {\n if (attrs.rgb) {\n return toCSSColor(attrs.rgb);\n } else if (attrs.indexed) {\n return INDEXED_COLORS[integer(attrs.indexed)];\n } else if (attrs.theme) {\n var themeColor = theme.colorScheme[integer(attrs.theme)];\n if (!themeColor) {\n return INDEXED_COLORS[0];\n }\n var color = kendo.parseColor(themeColor);\n if (attrs.tint) {\n color = color.toHSL();\n var tint = parseFloat(attrs.tint);\n if (tint < 0) {\n color.l = color.l * (1 + tint);\n } else {\n color.l = color.l * (1 - tint) + (100 - 100 * (1 - tint));\n }\n }\n return color.toCssRgba();\n }\n }\n return styles;\n }\n var SEL_SCHEME_RGBCLR = [\n 'a:clrScheme',\n '*',\n 'a:srgbClr'\n ];\n var SEL_SCHEME_SYSCLR = [\n 'a:clrScheme',\n '*',\n 'a:sysClr'\n ];\n function readTheme(zip, rel) {\n var scheme = [];\n var theme = { colorScheme: scheme };\n var file = xl(rel);\n if (zip.files[file]) {\n parse(zip, file, {\n enter: function (tag, attrs) {\n if (this.is(SEL_SCHEME_SYSCLR)) {\n scheme.push(toCSSColor(attrs.val == 'window' ? 'FFFFFFFF' : 'FF000000'));\n } else if (this.is(SEL_SCHEME_RGBCLR)) {\n scheme.push(toCSSColor('FF' + attrs.val));\n }\n }\n });\n if (scheme.length > 3) {\n swap(scheme, 0, 1);\n swap(scheme, 2, 3);\n }\n }\n function swap(arr, a, b) {\n var tmp = arr[a];\n arr[a] = arr[b];\n arr[b] = tmp;\n }\n return theme;\n }\n function integer(val) {\n return val == null ? null : parseInt(val, 10);\n }\n function bool(val, def) {\n if (val == null) {\n return def;\n }\n return val == 'true' || val === true || val == 1;\n }\n function toCSSColor(rgb) {\n var m = /^([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(rgb);\n return 'rgba(' + parseInt(m[2], 16) + ', ' + parseInt(m[3], 16) + ', ' + parseInt(m[4], 16) + ', ' + parseInt(m[1], 16) / 255 + ')';\n }\n kendo.spreadsheet.readExcel = readExcel;\n kendo.spreadsheet._readSheet = readSheet;\n kendo.spreadsheet._readStrings = readStrings;\n kendo.spreadsheet._readStyles = readStyles;\n kendo.spreadsheet._readTheme = readTheme;\n kendo.spreadsheet._readWorkbook = readWorkbook;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/workbook', [\n 'kendo.core',\n 'spreadsheet/runtime',\n 'spreadsheet/references',\n 'spreadsheet/excel-reader'\n ], f);\n}(function () {\n (function (kendo) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var $ = kendo.jQuery;\n var Formula = kendo.spreadsheet.calc.runtime.Formula;\n var Ref = kendo.spreadsheet.Ref;\n var CalcError = kendo.spreadsheet.CalcError;\n var Workbook = kendo.Observable.extend({\n init: function (options, view) {\n kendo.Observable.fn.init.call(this);\n this.options = options;\n this._view = view;\n this._sheets = [];\n this._sheetsSearchCache = {};\n this._sheet = this.insertSheet({\n rows: this.options.rows,\n columns: this.options.columns,\n rowHeight: this.options.rowHeight,\n columnWidth: this.options.columnWidth,\n headerHeight: this.options.headerHeight,\n headerWidth: this.options.headerWidth,\n dataSource: this.options.dataSource\n });\n this.undoRedoStack = new kendo.util.UndoRedoStack();\n this.undoRedoStack.bind([\n 'undo',\n 'redo'\n ], this._onUndoRedo.bind(this));\n this._context = new kendo.spreadsheet.FormulaContext(this);\n this._validationContext = new kendo.spreadsheet.ValidationFormulaContext(this);\n this._names = Object.create(null);\n this.fromJSON(this.options);\n },\n clipboard: function () {\n if (!this._clipboard) {\n this._clipboard = new kendo.spreadsheet.Clipboard(this);\n }\n return this._clipboard;\n },\n destroy: function () {\n this.unbind();\n if (this._clipboard) {\n this._clipboard.destroy();\n }\n },\n events: [\n 'cut',\n 'copy',\n 'paste',\n 'change',\n 'excelImport',\n 'excelExport',\n 'insertSheet',\n 'removeSheet',\n 'selectSheet',\n 'renameSheet',\n 'insertRow',\n 'insertColumn',\n 'deleteRow',\n 'deleteColumn',\n 'hideRow',\n 'hideColumn',\n 'unhideRow',\n 'unhideColumn',\n 'select',\n 'changeFormat'\n ],\n _sheetChange: function (e) {\n this.trigger('change', e);\n },\n _sheetInsertRow: function (e) {\n if (this.trigger('insertRow', {\n sheet: e.sender,\n index: e.index\n })) {\n e.preventDefault();\n }\n },\n _sheetInsertColumn: function (e) {\n if (this.trigger('insertColumn', {\n sheet: e.sender,\n index: e.index\n })) {\n e.preventDefault();\n }\n },\n _sheetDeleteRow: function (e) {\n if (this.trigger('deleteRow', {\n sheet: e.sender,\n index: e.index\n })) {\n e.preventDefault();\n }\n },\n _sheetDeleteColumn: function (e) {\n if (this.trigger('deleteColumn', {\n sheet: e.sender,\n index: e.index\n })) {\n e.preventDefault();\n }\n },\n _sheetHideRow: function (e) {\n if (this.trigger('hideRow', {\n sheet: e.sender,\n index: e.index\n })) {\n e.preventDefault();\n }\n },\n _sheetHideColumn: function (e) {\n if (this.trigger('hideColumn', {\n sheet: e.sender,\n index: e.index\n })) {\n e.preventDefault();\n }\n },\n _sheetUnhideRow: function (e) {\n if (this.trigger('unhideRow', {\n sheet: e.sender,\n index: e.index\n })) {\n e.preventDefault();\n }\n },\n _sheetUnhideColumn: function (e) {\n if (this.trigger('unhideColumn', {\n sheet: e.sender,\n index: e.index\n })) {\n e.preventDefault();\n }\n },\n _sheetSelect: function (e) {\n this.trigger('select', e);\n },\n _sheetCommandRequest: function (e) {\n this.trigger('commandRequest', e);\n },\n _inputForRef: function (ref) {\n return new kendo.spreadsheet.Range(ref, this._sheet).input();\n },\n _onUndoRedo: function (e) {\n e.command.range().select();\n },\n execute: function (options) {\n var commandOptions = $.extend({ workbook: this }, options.options);\n var command = new kendo.spreadsheet[options.command](commandOptions);\n var sheet = this.activeSheet();\n if (commandOptions.origin) {\n command.origin(commandOptions.origin);\n }\n if (commandOptions.operatingRange) {\n command.range(commandOptions.operatingRange);\n } else if (commandOptions.editActiveCell) {\n command.range(sheet.activeCellSelection());\n } else {\n command.range(sheet.selection());\n }\n var result = command.exec();\n if (!result || result.reason !== 'error') {\n if (command.cannotUndo) {\n this.undoRedoStack.clear();\n } else {\n this.undoRedoStack.push(command);\n }\n }\n return result;\n },\n resetFormulas: function () {\n this._sheets.forEach(function (sheet) {\n sheet.resetFormulas();\n });\n },\n resetValidations: function () {\n this._sheets.forEach(function (sheet) {\n sheet.resetValidations();\n });\n },\n refresh: function (reason) {\n if (reason.recalc) {\n this.resetFormulas();\n this.resetValidations();\n this._sheet.recalc(this._context);\n this._sheet.revalidate(this._validationContext);\n }\n },\n activeSheet: function (sheet) {\n if (sheet === undefined) {\n return this._sheet;\n }\n if (!this.sheetByName(sheet.name())) {\n return;\n }\n this._sheet = sheet;\n sheet.triggerChange(kendo.spreadsheet.ALL_REASONS);\n },\n moveSheetToIndex: function (sheet, toIndex) {\n var fromIndex = this.sheetIndex(sheet);\n var sheets = this._sheets;\n if (fromIndex === -1) {\n return;\n }\n this._sheetsSearchCache = {};\n sheets.splice(toIndex, 0, sheets.splice(fromIndex, 1)[0]);\n this.trigger('change', { sheetSelection: true });\n },\n insertSheet: function (options) {\n options = options || {};\n var that = this;\n var insertIndex = typeof options.index === 'number' ? options.index : that._sheets.length;\n var sheetName;\n var sheets = that._sheets;\n var getUniqueSheetName = function (sheetNameSuffix) {\n sheetNameSuffix = sheetNameSuffix ? sheetNameSuffix : 1;\n var name = 'Sheet' + sheetNameSuffix;\n if (!that.sheetByName(name)) {\n return name;\n }\n return getUniqueSheetName(sheetNameSuffix + 1);\n };\n if (options.name && that.sheetByName(options.name)) {\n return;\n }\n this._sheetsSearchCache = {};\n sheetName = options.name || getUniqueSheetName();\n var sheet = new kendo.spreadsheet.Sheet(options.rows || this.options.rows, options.columns || this.options.columns, options.rowHeight || this.options.rowHeight, options.columnWidth || this.options.columnWidth, options.headerHeight || this.options.headerHeight, options.headerWidth || this.options.headerWidth, options.defaultCellStyle || this.options.defaultCellStyle);\n sheet._workbook = this;\n sheet._name(sheetName);\n this._bindSheetEvents(sheet);\n sheets.splice(insertIndex, 0, sheet);\n if (options.data) {\n sheet.fromJSON(options.data);\n }\n if (options.dataSource) {\n sheet.setDataSource(options.dataSource);\n }\n this.trigger('change', { sheetSelection: true });\n return sheet;\n },\n _bindSheetEvents: function (sheet) {\n sheet.bind('change', this._sheetChange.bind(this));\n sheet.bind('insertRow', this._sheetInsertRow.bind(this));\n sheet.bind('insertColumn', this._sheetInsertColumn.bind(this));\n sheet.bind('deleteRow', this._sheetDeleteRow.bind(this));\n sheet.bind('deleteColumn', this._sheetDeleteColumn.bind(this));\n sheet.bind('hideRow', this._sheetHideRow.bind(this));\n sheet.bind('hideColumn', this._sheetHideColumn.bind(this));\n sheet.bind('unhideRow', this._sheetUnhideRow.bind(this));\n sheet.bind('unhideColumn', this._sheetUnhideColumn.bind(this));\n sheet.bind('select', this._sheetSelect.bind(this));\n sheet.bind('commandRequest', this._sheetCommandRequest.bind(this));\n },\n sheets: function () {\n return this._sheets.slice();\n },\n sheetByName: function (sheetName) {\n return this._sheets[this.sheetIndex(sheetName)];\n },\n sheetByIndex: function (index) {\n return this._sheets[index];\n },\n sheetIndex: function (sheet) {\n var sheets = this._sheets;\n var sheetName = (typeof sheet == 'string' ? sheet : sheet.name()).toLowerCase();\n var idx = this._sheetsSearchCache[sheetName];\n if (idx >= 0) {\n return idx;\n }\n for (idx = 0; idx < sheets.length; idx++) {\n var name = sheets[idx].name().toLowerCase();\n this._sheetsSearchCache[name] = idx;\n if (name === sheetName) {\n return idx;\n }\n }\n return -1;\n },\n renameSheet: function (sheet, newSheetName) {\n var oldSheetName = sheet.name().toLowerCase();\n if (!newSheetName || oldSheetName === newSheetName.toLowerCase() || this.sheetByName(newSheetName)) {\n return;\n }\n sheet = this.sheetByName(oldSheetName);\n if (!sheet) {\n return;\n }\n this._sheetsSearchCache = {};\n if (this.trigger('renameSheet', {\n sheet: sheet,\n newSheetName: newSheetName\n })) {\n return;\n }\n this._sheets.forEach(function (sheet) {\n sheet._forFormulas(function (formula) {\n formula.renameSheet(oldSheetName, newSheetName);\n });\n });\n this.forEachName(function (def, name) {\n if (def.nameref.renameSheet(oldSheetName, newSheetName)) {\n this.undefineName(name);\n def.name = def.nameref.print();\n this.nameDefinition(def.name, def);\n }\n if (def.value instanceof Ref || def.value instanceof Formula) {\n def.value.renameSheet(oldSheetName, newSheetName);\n }\n }.bind(this));\n sheet._name(newSheetName);\n this.trigger('change', { sheetSelection: true });\n return sheet;\n },\n removeSheet: function (sheet) {\n var that = this;\n var sheets = that._sheets;\n var name = sheet.name();\n var index = that.sheetIndex(sheet);\n if (sheets.length === 1) {\n return;\n }\n if (this.trigger('removeSheet', { sheet: sheet })) {\n return;\n }\n this._sheetsSearchCache = {};\n if (index > -1) {\n sheet.unbind();\n sheets.splice(index, 1);\n if (that.activeSheet().name() === name) {\n var newSheet = sheets[index === sheets.length ? index - 1 : index];\n that.activeSheet(newSheet);\n } else {\n this.trigger('change', {\n recalc: true,\n sheetSelection: true\n });\n }\n }\n },\n _clearSheets: function () {\n for (var i = 0; i < this._sheets.length; i++) {\n this._sheets[i].unbind();\n }\n this._sheets = [];\n this._sheetsSearchCache = {};\n this._names = {};\n },\n fromJSON: function (json) {\n if (json.sheets) {\n this._clearSheets();\n for (var idx = 0; idx < json.sheets.length; idx++) {\n var data = json.sheets[idx];\n var args = sheetParamsFromJSON(data, this.options);\n var sheet = this.insertSheet({\n rows: args.rowCount,\n columns: args.columnCount,\n rowHeight: args.rowHeight,\n columnWidth: args.columnWidth,\n headerHeight: args.headerHeight,\n headerWidth: args.headerWidth,\n data: data\n });\n if (data.dataSource) {\n sheet.setDataSource(data.dataSource);\n }\n }\n }\n if (json.activeSheet) {\n this.activeSheet(this.sheetByName(json.activeSheet));\n } else {\n this.activeSheet(this._sheets[0]);\n }\n if (json.names) {\n json.names.forEach(function (def) {\n this.defineName(def.name, def.value, def.hidden);\n }, this);\n }\n },\n toJSON: function () {\n this.resetFormulas();\n this.resetValidations();\n var names = Object.keys(this._names).map(function (name) {\n var def = this._names[name];\n var val = def.value;\n if (val instanceof Ref || val instanceof Formula) {\n val = val.print(0, 0, true);\n } else if (val instanceof CalcError) {\n val = val + '';\n } else {\n val = JSON.stringify(val);\n }\n return {\n value: val,\n hidden: def.hidden,\n name: def.name,\n sheet: def.nameref.sheet,\n localName: def.nameref.name\n };\n }, this);\n return {\n activeSheet: this.activeSheet().name(),\n sheets: this._sheets.map(function (sheet) {\n sheet.recalc(this._context);\n sheet.revalidate(this._validationContext);\n return sheet.toJSON();\n }, this),\n names: names,\n columnWidth: this.options.columnWidth,\n rowHeight: this.options.rowHeight\n };\n },\n fromFile: function (file) {\n var deferred = new $.Deferred();\n var promise = deferred.promise();\n var args = {\n file: file,\n promise: promise\n };\n if (file && !this.trigger('excelImport', args)) {\n this._clearSheets();\n kendo.spreadsheet.readExcel(file, this, deferred);\n } else {\n deferred.reject();\n }\n return promise;\n },\n saveAsExcel: function (options) {\n options = $.extend({}, this.options.excel, options);\n var data = this.toJSON();\n if (!this.trigger('excelExport', { workbook: data })) {\n var workbook = new kendo.ooxml.Workbook(data);\n kendo.saveAs({\n dataURI: workbook.toDataURL(),\n fileName: data.fileName || options.fileName,\n proxyURL: options.proxyURL,\n forceProxy: options.forceProxy\n });\n }\n },\n draw: function (options, callback) {\n if (typeof options == 'function' && !callback) {\n callback = options;\n options = {};\n }\n var parts = [], sheets = this._sheets;\n (function loop(i) {\n if (i < sheets.length) {\n sheets[i].draw(kendo.spreadsheet.SHEETREF, options, function (group) {\n parts.push(group);\n loop(i + 1);\n });\n } else {\n var group = parts[0];\n for (i = 1; i < parts.length; ++i) {\n group.children = group.children.concat(parts[i].children);\n }\n callback(group);\n }\n }(0));\n },\n nameForRef: function (ref, sheet) {\n if (sheet === undefined) {\n sheet = ref.sheet;\n }\n sheet = sheet.toLowerCase();\n var str = ref + '';\n for (var name in this._names) {\n var def = this._names[name];\n var val = def.value;\n if (val instanceof Ref) {\n if (!val.sheet || val.sheet && sheet == val.sheet.toLowerCase()) {\n if (val + '' == str) {\n return def;\n }\n }\n }\n }\n return { name: str };\n },\n defineName: function (name, value, hidden) {\n var x = kendo.spreadsheet.calc.parseNameDefinition(name, value);\n name = x.name.print();\n this._names[name.toLowerCase()] = {\n value: x.value,\n hidden: hidden,\n name: name,\n nameref: x.name\n };\n },\n undefineName: function (name) {\n delete this._names[name.toLowerCase()];\n },\n nameValue: function (name) {\n name = name.toLowerCase();\n if (name in this._names) {\n return this._names[name].value;\n }\n return null;\n },\n nameDefinition: function (name, def) {\n name = name.toLowerCase();\n if (arguments.length > 1) {\n if (def === undefined) {\n delete this._names[name];\n } else {\n this._names[name] = def;\n }\n }\n return this._names[name];\n },\n forEachName: function (func) {\n Object.keys(this._names).forEach(function (name) {\n func(this._names[name], name);\n }, this);\n },\n adjustNames: function (affectedSheet, forRow, start, delta) {\n affectedSheet = affectedSheet.toLowerCase();\n Object.keys(this._names).forEach(function (name) {\n var def = this._names[name];\n var x = def.value;\n if (x instanceof Ref && x.sheet.toLowerCase() == affectedSheet) {\n def.value = x.adjust(null, null, null, null, forRow, start, delta);\n } else if (x instanceof Formula) {\n x.adjust(affectedSheet, forRow ? 'row' : 'col', start, delta);\n }\n }, this);\n },\n options: {}\n });\n function sheetParamsFromJSON(data, options) {\n function or(a, b, c) {\n return a !== undefined ? a : b !== undefined ? b : c;\n }\n var rowCount = or(data.rowCount, options.rows, 200), columnCount = or(data.columnCount, options.columns, 50), rowHeight = or(data.rowHeight, options.rowHeight, 20), columnWidth = or(data.columnWidth, options.columnWidth, 64), headerHeight = or(data.headerHeight, options.headerHeight, 20), headerWidth = or(data.headerWidth, options.headerWidth, 32);\n if (data.rows !== undefined) {\n for (var i = 0; i < data.rows.length; ++i) {\n var row = data.rows[i];\n var ri = or(row.index, i);\n if (ri >= rowCount) {\n rowCount = ri + 1;\n }\n if (row.cells) {\n for (var j = 0; j < row.cells.length; ++j) {\n var cell = row.cells[j];\n var ci = or(cell.index, j);\n if (ci >= columnCount) {\n columnCount = ci + 1;\n }\n }\n }\n }\n }\n return {\n rowCount: rowCount,\n columnCount: columnCount,\n rowHeight: rowHeight,\n columnWidth: columnWidth,\n headerHeight: headerHeight,\n headerWidth: headerWidth\n };\n }\n kendo.spreadsheet.Workbook = Workbook;\n if (kendo.PDFMixin) {\n kendo.PDFMixin.extend(Workbook.prototype);\n Workbook.prototype.saveAsPDF = function (options) {\n var progress = new $.Deferred();\n var promise = progress.promise();\n var args = { promise: promise };\n if (this.trigger('pdfExport', args)) {\n return;\n }\n this._drawPDF(options, progress).then(function (root) {\n return kendo.drawing.exportPDF(root);\n }).done(function (dataURI) {\n kendo.saveAs({\n dataURI: dataURI,\n fileName: options.fileName,\n proxyURL: options.proxyURL,\n forceProxy: options.forceProxy,\n proxyTarget: options.proxyTarget\n });\n progress.resolve();\n }).fail(function (err) {\n progress.reject(err);\n });\n return promise;\n };\n Workbook.prototype._drawPDF = function (options) {\n var result = new $.Deferred();\n var callback = function (group) {\n result.resolve(group);\n };\n switch (options.area) {\n case 'workbook':\n options.workbook.draw(options, callback);\n break;\n case 'sheet':\n options.workbook.activeSheet().draw(options, callback);\n break;\n case 'selection':\n options.workbook.activeSheet().selection().draw(options, callback);\n break;\n }\n return result.promise();\n };\n }\n }(kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/formulacontext', ['kendo.core'], f);\n}(function () {\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var spreadsheet = kendo.spreadsheet;\n var CellRef = spreadsheet.CellRef;\n var RangeRef = spreadsheet.RangeRef;\n var UnionRef = spreadsheet.UnionRef;\n var NameRef = spreadsheet.NameRef;\n var Ref = spreadsheet.Ref;\n var FormulaContext = kendo.Class.extend({\n init: function (workbook) {\n this.workbook = workbook;\n },\n getRefCells: function (ref, hiddenInfo, fsheet, frow, fcol) {\n var sheet, formula, value, i;\n if (ref instanceof CellRef) {\n sheet = this.workbook.sheetByName(ref.sheet);\n if (!sheet || !ref.valid()) {\n return [{ value: new kendo.spreadsheet.calc.runtime.CalcError('REF') }];\n }\n formula = sheet.formula(ref);\n value = sheet.range(ref.row, ref.col).value();\n if (formula != null || value != null) {\n return [{\n formula: formula,\n value: value,\n row: ref.row,\n col: ref.col,\n sheet: ref.sheet,\n hidden: hiddenInfo ? sheet.columnWidth(ref.col) === 0 || sheet.rowHeight(ref.row) === 0 : false\n }];\n } else {\n return [];\n }\n }\n if (ref instanceof RangeRef) {\n i = this.workbook.sheetIndex(ref.sheet);\n var states = [], n = i;\n if (ref.endSheet) {\n n = this.workbook.sheetIndex(ref.endSheet);\n if (i > n) {\n var tmp = i;\n i = n;\n n = tmp;\n }\n }\n if (i < 0 || n < 0 || !ref.valid()) {\n return [{ value: new kendo.spreadsheet.calc.runtime.CalcError('REF') }];\n }\n while (i <= n) {\n sheet = this.workbook.sheetByIndex(i++);\n var tl = sheet._grid.normalize(ref.topLeft);\n var br = sheet._grid.normalize(ref.bottomRight);\n var startCellIndex = sheet._grid.cellRefIndex(tl);\n var endCellIndex = sheet._grid.cellRefIndex(br);\n var values = sheet._properties.iterator('value', startCellIndex, endCellIndex);\n for (var col = tl.col; col <= br.col; ++col) {\n for (var row = tl.row; row <= br.row; ++row) {\n var index = sheet._grid.index(row, col);\n formula = sheet._properties.get('formula', index);\n value = values.at(index);\n if (formula != null || value != null) {\n states.push({\n formula: formula,\n value: value,\n row: row,\n col: col,\n sheet: sheet.name(),\n hidden: hiddenInfo ? sheet.columnWidth(col) === 0 || sheet.rowHeight(row) === 0 : false\n });\n }\n }\n }\n }\n return states;\n }\n if (ref instanceof UnionRef) {\n var a = [];\n for (i = 0; i < ref.refs.length; ++i) {\n a = a.concat(this.getRefCells(ref.refs[i], hiddenInfo, fsheet, frow, fcol));\n }\n return a;\n }\n if (ref instanceof NameRef) {\n var val = this.nameValue(ref, fsheet, frow, fcol);\n if (val instanceof Ref) {\n return this.getRefCells(val, hiddenInfo, fsheet, frow, fcol);\n }\n return [{ value: val == null ? new kendo.spreadsheet.calc.runtime.CalcError('NAME') : val }];\n }\n return [];\n },\n nameValue: function (ref, fsheet, frow, fcol) {\n var val;\n if (ref.hasSheet()) {\n val = this.workbook.nameValue(ref.print());\n } else {\n ref = ref.clone().setSheet(fsheet, true);\n val = this.workbook.nameValue(ref.print());\n if (val == null) {\n val = this.workbook.nameValue(ref.name);\n }\n }\n if (val instanceof Ref) {\n val = val.absolute(frow, fcol);\n }\n return val;\n },\n getData: function (ref, fsheet, frow, fcol) {\n var single = ref instanceof CellRef;\n if (ref instanceof NameRef) {\n single = this.workbook.nameValue(ref.name) instanceof CellRef;\n }\n var data = this.getRefCells(ref, false, fsheet, frow, fcol).map(function (cell) {\n var val = cell.value;\n if (val instanceof kendo.spreadsheet.calc.runtime.Formula) {\n val = val.value;\n }\n return val;\n });\n return single ? data[0] : data;\n },\n onFormula: function (f) {\n var sheet = this.workbook.sheetByName(f.sheet);\n var row = f.row, col = f.col, value = f.value;\n var currentFormula = sheet.formula({\n row: row,\n col: col\n });\n if (currentFormula !== f) {\n return false;\n }\n if (value instanceof Ref) {\n value = this.getData(value, f.sheet, row, col);\n if (Array.isArray(value)) {\n value = value[0];\n }\n if (value === undefined) {\n value = null;\n }\n }\n if (value instanceof kendo.spreadsheet.calc.runtime.Matrix) {\n value.each(function (value, r, c) {\n sheet._value(row + r, col + c, value);\n });\n } else {\n sheet._value(row, col, value);\n }\n clearTimeout(sheet._formulaContextRefresh);\n sheet._formulaContextRefresh = setTimeout(function () {\n sheet.batch(function () {\n }, { layout: true });\n }, 50);\n return true;\n }\n });\n var ValidationFormulaContext = FormulaContext.extend({\n onFormula: function () {\n return true;\n }\n });\n spreadsheet.FormulaContext = FormulaContext;\n spreadsheet.ValidationFormulaContext = ValidationFormulaContext;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/controller', ['kendo.core'], f);\n}(function () {\n (function (kendo) {\n 'use strict';\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var $ = kendo.jQuery;\n var alphaNumRegExp = /:alphanum$/;\n var ACTIONS = {\n 'up': 'up',\n 'down': 'down',\n 'left': 'left',\n 'right': 'right',\n 'home': 'first-col',\n 'ctrl+left': 'first-col',\n 'end': 'last-col',\n 'ctrl+right': 'last-col',\n 'ctrl+up': 'first-row',\n 'ctrl+down': 'last-row',\n 'ctrl+home': 'first',\n 'ctrl+end': 'last',\n 'pageup': 'prev-page',\n 'pagedown': 'next-page'\n };\n var ENTRY_ACTIONS = {\n 'tab': 'next',\n 'shift+tab': 'previous',\n 'enter': 'lower',\n 'shift+enter': 'upper',\n 'delete': 'clearContents',\n 'backspace': 'clearContents',\n 'shift+:alphanum': 'edit',\n ':alphanum': 'edit',\n 'ctrl+:alphanum': 'ctrl',\n 'alt+ctrl+:alphanum': 'edit',\n ':edit': 'edit'\n };\n var CONTAINER_EVENTS = {\n 'wheel': 'onWheel',\n '*+mousedown': 'onMouseDown',\n 'contextmenu': 'onContextMenu',\n '*+mousedrag': 'onMouseDrag',\n '*+mouseup': 'onMouseUp',\n '*+dblclick': 'onDblClick',\n 'mousemove': 'onMouseMove'\n };\n var CLIPBOARD_EVENTS = {\n '*+pageup': 'onPageUp',\n '*+pagedown': 'onPageDown',\n 'mouseup': 'onMouseUp',\n '*+cut': 'onCut',\n '*+paste': 'onPaste',\n '*+copy': 'onCopy'\n };\n var EDITOR_EVENTS = {\n 'esc': 'onEditorEsc',\n 'enter': 'onEditorBlur',\n 'alt+enter': 'insertNewline',\n 'shift+enter': 'onEditorBlur',\n 'tab': 'onEditorBlur',\n 'shift+tab': 'onEditorBlur'\n };\n var FORMULABAR_EVENTS = $.extend({ focus: 'onEditorBarFocus' }, EDITOR_EVENTS);\n var FORMULAINPUT_EVENTS = $.extend({ focus: 'onEditorCellFocus' }, EDITOR_EVENTS);\n var SELECTION_MODES = {\n cell: 'range',\n rowheader: 'row',\n columnheader: 'column',\n topcorner: 'sheet',\n autofill: 'autofill'\n };\n function toActionSelector(selectors) {\n return selectors.map(function (action) {\n return '[data-action=\"' + action + '\"]';\n }).join(',');\n }\n var COMPOSITE_UNAVAILABLE_ACTION_SELECTORS = toActionSelector([\n 'cut',\n 'copy',\n 'paste',\n 'insert-left',\n 'insert-right',\n 'insert-above',\n 'insert-below'\n ]);\n var UNHIDE_ACTION_SELECTORS = toActionSelector([\n 'unhide-row',\n 'unhide-column'\n ]);\n var ACTION_KEYS = [];\n var SHIFT_ACTION_KEYS = [];\n var ENTRY_ACTION_KEYS = [];\n for (var key in ACTIONS) {\n ACTION_KEYS.push(key);\n SHIFT_ACTION_KEYS.push('shift+' + key);\n }\n for (key in ENTRY_ACTIONS) {\n ENTRY_ACTION_KEYS.push(key);\n }\n CLIPBOARD_EVENTS[ACTION_KEYS] = 'onAction';\n CLIPBOARD_EVENTS[SHIFT_ACTION_KEYS] = 'onShiftAction';\n CLIPBOARD_EVENTS[ENTRY_ACTION_KEYS] = 'onEntryAction';\n FORMULAINPUT_EVENTS[ACTION_KEYS] = 'onEditorAction';\n FORMULAINPUT_EVENTS[SHIFT_ACTION_KEYS] = 'onEditorShiftAction';\n var Controller = kendo.Class.extend({\n init: function (view, workbook) {\n this.view = view;\n this.workbook(workbook);\n this.container = $(view.container);\n this.clipboardElement = $(view.clipboard);\n this.cellContextMenu = view.cellContextMenu;\n this.rowHeaderContextMenu = view.rowHeaderContextMenu;\n this.colHeaderContextMenu = view.colHeaderContextMenu;\n this.scroller = view.scroller;\n this.tabstrip = view.tabstrip;\n this.sheetsbar = view.sheetsbar;\n view.nameEditor.bind('enter', this.onNameEditorEnter.bind(this));\n view.nameEditor.bind('cancel', this.onNameEditorCancel.bind(this));\n view.nameEditor.bind('select', this.onNameEditorSelect.bind(this));\n view.nameEditor.bind('delete', this.onNameEditorDelete.bind(this));\n this.editor = view.editor;\n this.editor.bind('change', this.onEditorChange.bind(this));\n this.editor.bind('activate', this.onEditorActivate.bind(this));\n this.editor.bind('deactivate', this.onEditorDeactivate.bind(this));\n this.editor.bind('update', this.onEditorUpdate.bind(this));\n $(view.scroller).on('scroll', this.onScroll.bind(this));\n this.listener = new kendo.spreadsheet.EventListener(this.container, this, CONTAINER_EVENTS);\n this._enableEditorEvents();\n if (this.sheetsbar) {\n this.sheetsbar.bind('select', this.onSheetBarSelect.bind(this));\n this.sheetsbar.bind('reorder', this.onSheetBarReorder.bind(this));\n this.sheetsbar.bind('rename', this.onSheetBarRename.bind(this));\n this.sheetsbar.bind('remove', this.onSheetBarRemove.bind(this));\n }\n this.cellContextMenu.bind('select', this.onContextMenuSelect.bind(this));\n this.rowHeaderContextMenu.bind('select', this.onContextMenuSelect.bind(this));\n this.colHeaderContextMenu.bind('select', this.onContextMenuSelect.bind(this));\n this.cellContextMenu.element.add(this.rowHeaderContextMenu.element).add(this.colHeaderContextMenu.element).on('contextmenu', false);\n if (this.tabstrip) {\n this.tabstrip.bind('action', this.onCommandRequest.bind(this));\n this.tabstrip.bind('dialog', this.onDialogRequest.bind(this));\n }\n },\n _enableEditorEvents: function (enable) {\n if (enable === undefined || enable) {\n this.keyListener = new kendo.spreadsheet.EventListener(this.clipboardElement, this, CLIPBOARD_EVENTS);\n this.barKeyListener = new kendo.spreadsheet.EventListener(this.editor.barElement(), this, FORMULABAR_EVENTS);\n this.inputKeyListener = new kendo.spreadsheet.EventListener(this.editor.cellElement(), this, FORMULAINPUT_EVENTS);\n } else {\n this.keyListener.destroy();\n this.barKeyListener.destroy();\n this.inputKeyListener.destroy();\n }\n },\n _execute: function (options) {\n var result = this._workbook.execute(options);\n if (options.command === 'EditCommand' && !result) {\n this._workbook.trigger('change', { editorClose: true });\n }\n if (result) {\n this._preventNavigation = true;\n if (result.reason === 'error') {\n this.view.showError(result, function () {\n this.activateEditor();\n this.editor.value(this._lastEditorValue);\n this.editor._value = this._workbook._inputForRef(this._workbook.activeSheet()._viewActiveCell());\n this.editor.select();\n }.bind(this));\n } else {\n this.view.openDialog(result.reason);\n }\n }\n return result;\n },\n _activeTooltip: function () {\n return this._workbook.activeSheet().activeCell().simplify().toString();\n },\n onContextMenuSelect: function (e) {\n var action = $(e.item).data('action');\n var command;\n switch (action) {\n case 'cut':\n command = {\n command: 'ToolbarCutCommand',\n options: { workbook: this._workbook }\n };\n break;\n case 'copy':\n command = {\n command: 'ToolbarCopyCommand',\n options: { workbook: this._workbook }\n };\n break;\n case 'paste':\n command = {\n command: 'ToolbarPasteCommand',\n options: { workbook: this._workbook }\n };\n break;\n case 'unmerge':\n command = {\n command: 'MergeCellCommand',\n options: { value: 'unmerge' }\n };\n break;\n case 'merge':\n this.view.openDialog('merge');\n break;\n case 'hide-row':\n command = {\n command: 'HideLineCommand',\n options: { axis: 'row' }\n };\n break;\n case 'hide-column':\n command = {\n command: 'HideLineCommand',\n options: { axis: 'column' }\n };\n break;\n case 'unhide-row':\n command = {\n command: 'UnHideLineCommand',\n options: { axis: 'row' }\n };\n break;\n case 'unhide-column':\n command = {\n command: 'UnHideLineCommand',\n options: { axis: 'column' }\n };\n break;\n case 'delete-row':\n command = { command: 'DeleteRowCommand' };\n break;\n case 'delete-column':\n command = { command: 'DeleteColumnCommand' };\n break;\n }\n if (command) {\n this._execute(command);\n }\n },\n onSheetBarRemove: function (e) {\n var sheet = this._workbook.sheetByName(e.name);\n if (!sheet) {\n return;\n }\n this._workbook.removeSheet(sheet);\n },\n destroy: function () {\n this.listener.destroy();\n this._enableEditorEvents(false);\n this.keyListener.destroy();\n this.inputKeyListener.destroy();\n },\n onSheetBarSelect: function (e) {\n var sheet;\n var workbook = this._workbook;\n if (e.isAddButton) {\n if (this._workbook.trigger('insertSheet')) {\n return;\n }\n sheet = workbook.insertSheet();\n } else {\n sheet = workbook.sheetByName(e.name);\n }\n if (workbook.activeSheet().name() !== sheet.name()) {\n if (this._workbook.trigger('selectSheet', { sheet: sheet })) {\n return;\n }\n workbook.activeSheet(sheet);\n }\n },\n onSheetBarReorder: function (e) {\n var sheet = this._workbook.sheetByIndex(e.oldIndex);\n this._workbook.moveSheetToIndex(sheet, e.newIndex);\n this._workbook.activeSheet(sheet);\n },\n onSheetBarRename: function (e) {\n var sheet = this._workbook.sheetByIndex(e.sheetIndex);\n if (this._workbook.sheetByName(e.name)) {\n this.view.showError({\n reason: 'error',\n type: 'duplicateSheetName'\n });\n return;\n }\n this._workbook.renameSheet(sheet, e.name);\n this.clipboardElement.focus();\n },\n sheet: function (sheet) {\n this.navigator = sheet.navigator();\n this.axisManager = sheet.axisManager();\n },\n workbook: function (workbook) {\n this._workbook = workbook;\n this.clipboard = workbook.clipboard();\n workbook.bind('commandRequest', this.onCommandRequest.bind(this));\n },\n refresh: function () {\n var editor = this.editor;\n var workbook = this._workbook;\n var sheet = workbook.activeSheet();\n this._viewPortHeight = this.view.scroller.clientHeight;\n this.navigator.height(this._viewPortHeight);\n if (!editor.isActive() && !this.isEditorDisabled) {\n editor.enable(sheet.selection().enable() !== false);\n editor.value(workbook._inputForRef(sheet.activeCell()));\n }\n var ref = sheet.selection()._ref.simplify();\n var def = this._workbook.nameForRef(ref, sheet.name());\n this.view.nameEditor.value(def.name);\n },\n onScroll: function () {\n this.view.render();\n },\n onWheel: function (event) {\n var deltaX = event.originalEvent.deltaX;\n var deltaY = event.originalEvent.deltaY;\n if (event.originalEvent.deltaMode === 1) {\n deltaX *= 10;\n deltaY *= 10;\n }\n this.scrollWith(deltaX, deltaY);\n event.preventDefault();\n },\n onAction: function (event, action) {\n this.navigator.moveActiveCell(ACTIONS[action]);\n event.preventDefault();\n },\n onPageUp: function () {\n this.scrollDown(-this._viewPortHeight);\n },\n onPageDown: function () {\n this.scrollDown(this._viewPortHeight);\n },\n onEntryAction: function (event, action) {\n if (event.mod) {\n var shouldPrevent = true;\n var key = String.fromCharCode(event.keyCode);\n switch (key) {\n case 'A':\n this.navigator.selectAll();\n break;\n case 'Y':\n this._workbook.undoRedoStack.redo();\n break;\n case 'Z':\n this._workbook.undoRedoStack.undo();\n break;\n default:\n shouldPrevent = false;\n break;\n }\n if (shouldPrevent) {\n event.preventDefault();\n }\n } else {\n var disabled = this._workbook.activeSheet().selection().enable() === false;\n if (action == 'delete' || action == 'backspace') {\n if (!disabled) {\n this._execute({ command: 'ClearContentCommand' });\n }\n event.preventDefault();\n } else if (alphaNumRegExp.test(action) || action === ':edit') {\n if (disabled) {\n event.preventDefault();\n return;\n }\n if (action !== ':edit') {\n this.editor.value('');\n }\n this.activateEditor();\n } else {\n this.navigator.navigateInSelection(ENTRY_ACTIONS[action]);\n event.preventDefault();\n }\n }\n },\n onShiftAction: function (event, action) {\n this.navigator.modifySelection(ACTIONS[action.replace('shift+', '')], this.appendSelection);\n event.preventDefault();\n },\n onMouseMove: function (event) {\n var sheet = this._workbook.activeSheet();\n if (sheet.resizingInProgress() || sheet.selectionInProgress()) {\n return;\n }\n var object = this.objectAt(event);\n if (object.type === 'columnresizehandle' || object.type === 'rowresizehandle') {\n sheet.positionResizeHandle(object.ref);\n } else {\n sheet.removeResizeHandle();\n }\n },\n onMouseDown: function (event) {\n var object = this.objectAt(event);\n if (object.pane) {\n this.originFrame = object.pane;\n }\n if (object.type === 'editor') {\n this.onEditorEsc();\n this.openCustomEditor();\n event.preventDefault();\n return;\n }\n if (this.editor.canInsertRef(false) && object.ref) {\n this._workbook.activeSheet()._setFormulaSelections(this.editor.highlightedRefs());\n this.navigator.startSelection(object.ref, this._selectionMode, this.appendSelection, event.shiftKey);\n event.preventDefault();\n return;\n } else {\n this._preventNavigation = false;\n this.editor.deactivate();\n if (this._preventNavigation) {\n return;\n }\n }\n var sheet = this._workbook.activeSheet();\n if (object.type === 'columnresizehandle' || object.type === 'rowresizehandle') {\n sheet.startResizing({\n x: object.x,\n y: object.y\n });\n event.preventDefault();\n return;\n }\n if (object.type === 'filtericon') {\n this.openFilterMenu(event);\n event.preventDefault();\n return;\n }\n this._selectionMode = SELECTION_MODES[object.type];\n this.appendSelection = event.mod;\n this.navigator.startSelection(object.ref, this._selectionMode, this.appendSelection, event.shiftKey);\n },\n onContextMenu: function (event) {\n var sheet = this._workbook.activeSheet();\n if (sheet.resizingInProgress()) {\n return;\n }\n event.preventDefault();\n this.cellContextMenu.close();\n this.colHeaderContextMenu.close();\n this.rowHeaderContextMenu.close();\n var menu;\n var object = this.objectAt(event);\n if (object.type === 'columnresizehandle' || object.type === 'rowresizehandle') {\n return;\n }\n this.navigator.selectForContextMenu(object.ref, SELECTION_MODES[object.type]);\n var isComposite = this.navigator._sheet.select() instanceof kendo.spreadsheet.UnionRef;\n var showUnhide = false;\n var showUnmerge = false;\n if (object.type == 'columnheader') {\n menu = this.colHeaderContextMenu;\n showUnhide = !isComposite && this.axisManager.selectionIncludesHiddenColumns();\n } else if (object.type == 'rowheader') {\n menu = this.rowHeaderContextMenu;\n showUnhide = !isComposite && this.axisManager.selectionIncludesHiddenRows();\n } else {\n menu = this.cellContextMenu;\n showUnmerge = this.navigator.selectionIncludesMergedCells();\n }\n menu.element.find(COMPOSITE_UNAVAILABLE_ACTION_SELECTORS).toggle(!isComposite);\n menu.element.find(UNHIDE_ACTION_SELECTORS).toggle(showUnhide);\n menu.element.find('[data-action=unmerge]').toggle(showUnmerge);\n setTimeout(function () {\n menu.open(event.pageX, event.pageY);\n });\n },\n prevent: function (event) {\n event.preventDefault();\n },\n constrainResize: function (type, ref) {\n var sheet = this._workbook.activeSheet();\n var resizeHandle = sheet.resizeHandlePosition();\n return !resizeHandle || type === 'outside' || type === 'topcorner' || ref.col < resizeHandle.col || ref.row < resizeHandle.row;\n },\n onMouseDrag: function (event) {\n if (this._selectionMode === 'sheet') {\n return;\n }\n var location = {\n clientX: event.clientX,\n clientY: event.clientY\n };\n var object = this.objectAt(location);\n var sheet = this._workbook.activeSheet();\n if (sheet.resizingInProgress()) {\n if (!this.constrainResize(object.type, object.ref)) {\n sheet.resizeHintPosition({\n x: object.x,\n y: object.y\n });\n }\n return;\n }\n if (object.type === 'outside') {\n this.startAutoScroll(object);\n return;\n }\n if (this.originFrame === object.pane) {\n this.selectToLocation(location);\n } else {\n var frame = this.originFrame._grid;\n if (object.x > frame.right) {\n this.scrollLeft();\n }\n if (object.y > frame.bottom) {\n this.scrollTop();\n }\n if (object.y < frame.top || object.x < frame.left) {\n this.startAutoScroll(object, location);\n } else {\n this.selectToLocation(location);\n }\n }\n event.preventDefault();\n },\n onMouseUp: function (event) {\n var sheet = this._workbook.activeSheet();\n sheet.completeResizing();\n this.navigator.completeSelection();\n this.stopAutoScroll();\n var editor = this.editor.activeEditor();\n if (!editor) {\n return;\n }\n var el = event.target;\n while (el) {\n if (el === editor.element[0]) {\n return;\n }\n el = el.parentNode;\n }\n var object = this.objectAt(event);\n if (object && object.ref && editor.canInsertRef(false)) {\n editor.refAtPoint(sheet.selection()._ref);\n sheet._setFormulaSelections(editor.highlightedRefs());\n }\n },\n onDblClick: function (event) {\n var object = this.objectAt(event);\n var disabled = this._workbook.activeSheet().selection().enable() === false;\n if (object.type !== 'cell' || disabled) {\n return;\n }\n this.editor.activate({\n range: this._workbook.activeSheet()._viewActiveCell(),\n rect: this.view.activeCellRectangle(),\n tooltip: this._activeTooltip()\n }).focus();\n this.onEditorUpdate();\n },\n onCut: function (e) {\n if (e) {\n var table = this.clipboardElement.find('table.kendo-clipboard-' + this.clipboard._uid).detach();\n this.clipboardElement.append(table.clone(false));\n setTimeout(function () {\n this.clipboardElement.empty().append(table);\n }.bind(this));\n }\n this._execute({\n command: 'CutCommand',\n options: {\n workbook: this.view._workbook,\n event: e.originalEvent || e\n }\n });\n },\n clipBoardValue: function () {\n return this.clipboardElement.html();\n },\n onPaste: function (e) {\n var html = '';\n var plain = '';\n this.clipboard.menuInvoked = e === undefined;\n if (e) {\n if (e.originalEvent.clipboardData && e.originalEvent.clipboardData.getData) {\n e.preventDefault();\n var hasHTML = false;\n var hasPlainText = false;\n if (window.DOMStringList && e.originalEvent.clipboardData.types instanceof window.DOMStringList) {\n hasHTML = e.originalEvent.clipboardData.types.contains('text/html');\n hasPlainText = e.originalEvent.clipboardData.types.contains('text/plain');\n } else {\n hasHTML = /text\\/html/.test(e.originalEvent.clipboardData.types);\n hasPlainText = /text\\/plain/.test(e.originalEvent.clipboardData.types);\n }\n if (hasHTML) {\n html = e.originalEvent.clipboardData.getData('text/html');\n }\n if (hasPlainText) {\n plain = e.originalEvent.clipboardData.getData('text/plain').trim();\n }\n } else {\n var table = this.clipboardElement.find('table.kendo-clipboard-' + this.clipboard._uid).detach();\n this.clipboardElement.empty();\n setTimeout(function () {\n var html = this.clipboardElement.html();\n var plain = window.clipboardData.getData('Text').trim();\n if (!html && !plain) {\n return;\n }\n this.clipboard.external({\n html: html,\n plain: plain\n });\n this.clipboardElement.empty().append(table);\n this._execute({\n command: 'PasteCommand',\n options: {\n workbook: this.view._workbook,\n event: e.originalEvent || e\n }\n });\n this.clipboard.menuInvoked = true;\n }.bind(this));\n return;\n }\n } else {\n if (kendo.support.browser.msie) {\n this.clipboardElement.focus().select();\n document.execCommand('paste');\n return;\n } else {\n this.clipboard.menuInvoked = true;\n }\n }\n if (!html && !plain) {\n return;\n }\n this.clipboard.external({\n html: html,\n plain: plain\n });\n this._execute({\n command: 'PasteCommand',\n options: {\n workbook: this.view._workbook,\n event: e.originalEvent || e\n }\n });\n },\n onCopy: function (e) {\n this.clipboard.menuInvoked = e === undefined;\n this._execute({\n command: 'CopyCommand',\n options: {\n workbook: this.view._workbook,\n event: e.originalEvent || e\n }\n });\n },\n scrollTop: function () {\n this.scroller.scrollTop = 0;\n },\n scrollLeft: function () {\n this.scroller.scrollLeft = 0;\n },\n scrollDown: function (value) {\n this.scroller.scrollTop += value;\n },\n scrollRight: function (value) {\n this.scroller.scrollLeft += value;\n },\n scrollWith: function (right, down) {\n this.scroller.scrollTop += down;\n this.scroller.scrollLeft += right;\n },\n objectAt: function (location) {\n var box = this.container[0].getBoundingClientRect();\n return this.view.objectAt(location.clientX - box.left, location.clientY - box.top);\n },\n selectToLocation: function (cellLocation) {\n var object = this.objectAt(cellLocation);\n if (object.pane) {\n this.extendSelection(object);\n this.lastKnownCellLocation = cellLocation;\n this.originFrame = object.pane;\n }\n this.stopAutoScroll();\n },\n extendSelection: function (object) {\n this.navigator.extendSelection(object.ref, this._selectionMode, this.appendSelection);\n },\n autoScroll: function () {\n var x = this._autoScrollTarget.x;\n var y = this._autoScrollTarget.y;\n var boundaries = this.originFrame._grid;\n var scroller = this.view.scroller;\n var scrollStep = 8;\n var scrollLeft = scroller.scrollLeft;\n var scrollTop = scroller.scrollTop;\n if (x < boundaries.left) {\n this.scrollRight(-scrollStep);\n }\n if (x > boundaries.right) {\n this.scrollRight(scrollStep);\n }\n if (y < boundaries.top) {\n this.scrollDown(-scrollStep);\n }\n if (y > boundaries.bottom) {\n this.scrollDown(scrollStep);\n }\n if (scrollTop === scroller.scrollTop && scrollLeft === scroller.scrollLeft) {\n this.selectToLocation(this.finalLocation);\n } else {\n this.extendSelection(this.objectAt(this.lastKnownCellLocation));\n }\n },\n startAutoScroll: function (viewObject, location) {\n if (!this._scrollInterval) {\n this._scrollInterval = setInterval(this.autoScroll.bind(this), 50);\n }\n this.finalLocation = location || this.lastKnownCellLocation;\n this._autoScrollTarget = viewObject;\n },\n stopAutoScroll: function () {\n clearInterval(this._scrollInterval);\n this._scrollInterval = null;\n },\n openCustomEditor: function () {\n this.view.openCustomEditor();\n },\n openFilterMenu: function (event) {\n var object = this.objectAt(event);\n var sheet = this._workbook.activeSheet();\n var column = sheet.filterColumn(object.ref);\n var filterMenu = this.view.createFilterMenu(column);\n filterMenu.bind('action', this.onCommandRequest.bind(this));\n filterMenu.bind('action', filterMenu.close.bind(filterMenu));\n filterMenu.openFor(event.target);\n },\n onEditorChange: function (e) {\n this._workbook.activeSheet().isInEditMode(false);\n this._lastEditorValue = e.value;\n this._execute({\n command: 'EditCommand',\n options: {\n editActiveCell: true,\n value: e.value\n }\n });\n },\n onEditorActivate: function () {\n var workbook = this._workbook;\n var sheet = workbook.activeSheet();\n sheet._setFormulaSelections(this.editor.highlightedRefs());\n sheet.isInEditMode(true);\n },\n onEditorDeactivate: function () {\n var sheet = this._workbook.activeSheet();\n sheet.isInEditMode(false);\n sheet._setFormulaSelections([]);\n },\n onEditorUpdate: function () {\n this._workbook.activeSheet()._setFormulaSelections(this.editor.highlightedRefs());\n },\n onEditorBarFocus: function () {\n var disabled = this._workbook.activeSheet().selection().enable() === false;\n if (disabled) {\n return;\n }\n this.editor.activate({\n range: this._workbook.activeSheet()._viewActiveCell(),\n rect: this.view.activeCellRectangle(),\n tooltip: this._activeTooltip()\n });\n },\n onEditorCellFocus: function () {\n this.editor.scale();\n },\n onEditorEsc: function () {\n this.resetEditorValue();\n this.editor.deactivate();\n this.clipboardElement.focus();\n },\n insertNewline: function (e) {\n e.preventDefault();\n this.editor.insertNewline();\n },\n onEditorBlur: function (_, action) {\n if (this.editor.isFiltered()) {\n return;\n }\n this._preventNavigation = false;\n this.editor.deactivate();\n if (!this._preventNavigation) {\n this.clipboardElement.focus();\n this.navigator.navigateInSelection(ENTRY_ACTIONS[action]);\n }\n },\n onEditorAction: function (event, action) {\n var editor = this.editor;\n var sheet = this._workbook.activeSheet();\n if (editor.canInsertRef(true)) {\n this.navigator.moveActiveCell(ACTIONS[action]);\n editor.activeEditor().refAtPoint(sheet.selection()._ref);\n sheet._setFormulaSelections(editor.highlightedRefs());\n event.preventDefault();\n }\n },\n onEditorShiftAction: function (event, action) {\n var editor = this.editor;\n var sheet = this._workbook.activeSheet();\n if (editor.canInsertRef(true)) {\n this.navigator.modifySelection(ACTIONS[action.replace('shift+', '')], this.appendSelection);\n editor.activeEditor().refAtPoint(sheet.selection()._ref);\n sheet._setFormulaSelections(editor.highlightedRefs());\n event.preventDefault();\n }\n },\n resetEditorValue: function () {\n this.editor.value(this._workbook._inputForRef(this._workbook.activeSheet()._viewActiveCell()));\n },\n activateEditor: function () {\n this.editor.activate({\n range: this._workbook.activeSheet()._viewActiveCell(),\n rect: this.view.activeCellRectangle(),\n tooltip: this._activeTooltip()\n }).focus();\n },\n deactivateEditor: function () {\n this.view.editor.deactivate();\n },\n onCommandRequest: function (e) {\n if (e.command) {\n this._execute(e);\n } else {\n this._workbook.undoRedoStack[e.action]();\n }\n },\n onDialogRequest: function (e) {\n var additionalOptions = {\n pdfExport: this._workbook.options.pdf,\n excelExport: this._workbook.options.excel\n };\n if (e.options) {\n $.extend(true, e.options, additionalOptions);\n } else {\n e.options = additionalOptions;\n }\n this.view.openDialog(e.name, e.options);\n },\n onNameEditorEnter: function () {\n var ref;\n var workbook = this._workbook;\n var sheet = workbook.activeSheet();\n var name = this.view.nameEditor.value();\n ref = kendo.spreadsheet.calc.parseReference(name, true) || workbook.nameValue(name);\n if (ref instanceof kendo.spreadsheet.Ref) {\n if (ref.sheet && ref.sheet.toLowerCase() != sheet.name().toLowerCase()) {\n var tmp = workbook.sheetByName(ref.sheet);\n if (tmp) {\n workbook.activeSheet(tmp);\n sheet = tmp;\n }\n }\n sheet.range(ref).select();\n return;\n }\n ref = sheet.selection()._ref.clone().simplify().setSheet(sheet.name(), true);\n this._execute({\n command: 'DefineNameCommand',\n options: {\n name: name,\n value: ref\n }\n });\n this.clipboardElement.focus();\n },\n onNameEditorCancel: function () {\n this.clipboardElement.focus();\n },\n onNameEditorSelect: function (ev) {\n var name = ev.name;\n var workbook = this._workbook;\n var sheet = workbook.activeSheet();\n var ref = workbook.nameValue(name);\n if (ref instanceof kendo.spreadsheet.Ref) {\n if (ref.sheet && ref.sheet.toLowerCase() != sheet.name().toLowerCase()) {\n var tmp = workbook.sheetByName(ref.sheet);\n if (tmp) {\n workbook.activeSheet(tmp);\n sheet = tmp;\n }\n }\n sheet.range(ref).select();\n return;\n }\n this.clipboardElement.focus();\n },\n onNameEditorDelete: function (ev) {\n this._execute({\n command: 'DeleteNameCommand',\n options: { name: ev.name }\n });\n this.clipboardElement.focus();\n }\n });\n kendo.spreadsheet.Controller = Controller;\n }(window.kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/view', [\n 'kendo.core',\n 'kendo.menu',\n 'spreadsheet/sheetsbar'\n ], f);\n}(function () {\n (function (kendo) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var $ = kendo.jQuery;\n var CellRef = kendo.spreadsheet.CellRef;\n var DOT = '.';\n var RESIZE_HANDLE_WIDTH = 7;\n var viewClassNames = {\n view: 'k-spreadsheet-view',\n fixedContainer: 'k-spreadsheet-fixed-container',\n editContainer: 'k-spreadsheet-edit-container',\n scroller: 'k-spreadsheet-scroller',\n viewSize: 'k-spreadsheet-view-size',\n clipboard: 'k-spreadsheet-clipboard',\n cellEditor: 'k-spreadsheet-cell-editor',\n barEditor: 'k-spreadsheet-editor',\n topCorner: 'k-spreadsheet-top-corner',\n filterHeadersWrapper: 'k-filter-wrapper',\n filterRange: 'k-filter-range',\n filterButton: 'k-spreadsheet-filter',\n filterButtonActive: 'k-state-active',\n horizontalResize: 'k-horizontal-resize',\n verticalResize: 'k-vertical-resize',\n icon: 'k-icon',\n iconFilterDefault: 'k-i-arrow-60-down',\n sheetsBar: 'k-spreadsheet-sheets-bar',\n sheetsBarActive: 'k-spreadsheet-sheets-bar-active',\n sheetsBarInactive: 'k-spreadsheet-sheets-bar-inactive',\n cellContextMenu: 'k-spreadsheet-cell-context-menu',\n rowHeaderContextMenu: 'k-spreadsheet-row-header-context-menu',\n colHeaderContextMenu: 'k-spreadsheet-col-header-context-menu'\n };\n kendo.spreadsheet.messages.view = {\n errors: {\n openUnsupported: 'Unsupported format. Please select an .xlsx file.',\n shiftingNonblankCells: 'Cannot insert cells due to data loss possibility. Select another insert location or delete the data from the end of your worksheet.',\n insertColumnWhenRowIsSelected: 'Cannot insert column when all columns are selected.',\n insertRowWhenColumnIsSelected: 'Cannot insert row when all rows are selected.',\n filterRangeContainingMerges: 'Cannot create a filter within a range containing merges',\n sortRangeContainingMerges: 'Cannot sort a range containing merges',\n cantSortMultipleSelection: 'Cannot sort multiple selection',\n cantSortNullRef: 'Cannot sort empty selection',\n cantSortMixedCells: 'Cannot sort range containing cells of mixed shapes',\n validationError: 'The value that you entered violates the validation rules set on the cell.',\n cannotModifyDisabled: 'Cannot modify disabled cells.'\n },\n tabs: {\n home: 'Home',\n insert: 'Insert',\n data: 'Data'\n }\n };\n function selectElementContents(el) {\n var sel = window.getSelection();\n sel.removeAllRanges();\n var range = document.createRange();\n range.selectNodeContents(el);\n sel.addRange(range);\n }\n function cellBefore(table, row) {\n var cells = table.trs[row].children;\n return cells[cells.length - 2];\n }\n function cellAbove(table, row) {\n var prevRow = table.trs[row - 1];\n var index = table.trs[row].children.length - 1;\n if (prevRow && index >= 0) {\n return prevRow.children[index];\n }\n }\n function cellBorder(value) {\n return [\n 'solid',\n (value.size || 1) + 'px',\n value.color || '#000'\n ].join(' ');\n }\n function asURL(link) {\n if (!/:\\/\\//.test(link)) {\n link = 'http://' + link;\n }\n return link;\n }\n function drawCell(collection, cell, cls, hBorders, vBorders, showGrid) {\n function maybeLink(el) {\n var link = cell.link;\n if (!link) {\n if (typeof cell.value == 'object') {\n link = cell.value.link;\n }\n }\n if (link) {\n var style = { textDecoration: 'none' };\n if (cell.color) {\n style.color = cell.color;\n }\n if (cell.underline) {\n style.textDecoration = 'underline';\n }\n return kendo.dom.element('a', {\n href: asURL(link),\n style: style,\n target: '_blank'\n }, el ? [el] : []);\n }\n return el;\n }\n if (!cls && !kendo.spreadsheet.draw.shouldDrawCell(cell)) {\n return;\n }\n var left = cell.left;\n var top = cell.top;\n var width = cell.width + 1;\n var height = cell.height + 1;\n var style = {};\n var background = cell.background;\n var defaultBorder = null;\n if (background) {\n defaultBorder = background;\n if (showGrid) {\n defaultBorder = kendo.parseColor(defaultBorder).toHSV();\n defaultBorder.v *= 0.9;\n defaultBorder = defaultBorder.toCssRgba();\n }\n defaultBorder = cellBorder({ color: defaultBorder });\n }\n if (background) {\n style.backgroundColor = background;\n }\n if (cell.color) {\n style.color = cell.color;\n }\n if (cell.fontFamily) {\n style.fontFamily = cell.fontFamily;\n }\n if (cell.underline) {\n style.textDecoration = 'underline';\n }\n if (cell.italic) {\n style.fontStyle = 'italic';\n }\n if (cell.textAlign) {\n style.textAlign = cell.textAlign;\n }\n if (cell.bold) {\n style.fontWeight = 'bold';\n }\n if (cell.fontSize) {\n style.fontSize = cell.fontSize + 'px';\n }\n if (cell.wrap === true) {\n style.whiteSpace = 'pre-wrap';\n style.overflowWrap = 'break-word';\n style.wordWrap = 'break-word';\n }\n if (cell.borderLeft) {\n style.borderLeft = cellBorder(cell.borderLeft);\n if (vBorders) {\n vBorders[cell.left] = true;\n }\n } else if (defaultBorder && vBorders && !vBorders[cell.left]) {\n style.borderLeft = defaultBorder;\n } else {\n left++;\n width--;\n }\n if (cell.borderTop) {\n style.borderTop = cellBorder(cell.borderTop);\n if (hBorders) {\n hBorders[cell.top] = true;\n }\n } else if (defaultBorder && hBorders && !hBorders[cell.top]) {\n style.borderTop = defaultBorder;\n } else {\n top++;\n height--;\n }\n if (cell.borderRight) {\n style.borderRight = cellBorder(cell.borderRight);\n if (vBorders) {\n vBorders[cell.right] = true;\n }\n } else if (defaultBorder && vBorders && !vBorders[cell.right]) {\n style.borderRight = defaultBorder;\n } else {\n width--;\n }\n if (cell.borderBottom) {\n style.borderBottom = cellBorder(cell.borderBottom);\n if (hBorders) {\n hBorders[cell.bottom] = true;\n }\n } else if (defaultBorder && hBorders && !hBorders[cell.bottom]) {\n style.borderBottom = defaultBorder;\n } else {\n height--;\n }\n style.left = left + 'px';\n style.top = top + 'px';\n style.width = width + 'px';\n style.height = height + 'px';\n var data = cell.value, type = typeof data;\n if (cell.format && data != null) {\n data = kendo.spreadsheet.formatting.format(data, cell.format);\n if (data.__dataType) {\n type = data.__dataType;\n }\n } else if (data !== null && data !== undefined) {\n data = kendo.dom.text(data);\n }\n if (!style.textAlign) {\n switch (type) {\n case 'number':\n case 'date':\n case 'percent':\n style.textAlign = 'right';\n break;\n case 'boolean':\n style.textAlign = 'center';\n break;\n }\n }\n var classNames = [paneClassNames.cell];\n if (cls) {\n classNames.push(cls);\n }\n if (cell.enable === false) {\n classNames.push('k-state-disabled');\n }\n if (cell.merged) {\n classNames.push('k-spreadsheet-merged-cell');\n }\n var verticalAlign = cell.verticalAlign || 'bottom';\n if (verticalAlign && data) {\n data = kendo.dom.element('div', { className: 'k-vertical-align-' + verticalAlign }, [maybeLink(data)]);\n } else {\n data = maybeLink(data);\n }\n var children = data ? [data] : [];\n var properties = { style: style };\n var validation = cell.validation;\n if (validation && !validation.value) {\n children.push(kendo.dom.element('span', { className: 'k-dirty' }));\n classNames.push('k-dirty-cell');\n properties.title = validation.message;\n }\n properties.className = classNames.join(' ');\n var div = kendo.dom.element('div', properties, children);\n collection.push(div);\n return div;\n }\n function addCell(table, row, cell) {\n var style = {};\n if (cell.background) {\n style.backgroundColor = cell.background;\n }\n if (cell.color) {\n style.color = cell.color;\n }\n if (cell.fontFamily) {\n style.fontFamily = cell.fontFamily;\n }\n if (cell.underline) {\n style.textDecoration = 'underline';\n }\n if (cell.italic) {\n style.fontStyle = 'italic';\n }\n if (cell.textAlign) {\n style.textAlign = cell.textAlign;\n }\n if (cell.verticalAlign) {\n style.verticalAlign = cell.verticalAlign === 'center' ? 'middle' : cell.verticalAlign;\n }\n if (cell.bold) {\n style.fontWeight = 'bold';\n }\n if (cell.fontSize) {\n style.fontSize = cell.fontSize + 'px';\n }\n if (cell.wrap === true) {\n style.whiteSpace = 'pre-wrap';\n style.wordBreak = 'break-all';\n }\n if (cell.borderRight) {\n style.borderRight = cellBorder(cell.borderRight);\n } else if (cell.background) {\n style.borderRightColor = cell.background;\n }\n if (cell.borderBottom) {\n style.borderBottom = cellBorder(cell.borderBottom);\n } else if (cell.background) {\n style.borderBottomColor = cell.background;\n }\n var data = cell.value, type = typeof data;\n if (cell.format && data != null) {\n data = kendo.spreadsheet.formatting.format(data, cell.format);\n if (data.__dataType) {\n type = data.__dataType;\n }\n }\n if (!style.textAlign) {\n switch (type) {\n case 'number':\n case 'date':\n case 'percent':\n style.textAlign = 'right';\n break;\n case 'boolean':\n style.textAlign = 'center';\n break;\n }\n }\n var className = null;\n if (cell.enable === false) {\n className = 'k-state-disabled';\n }\n var td = table.addCell(row, data, style, className, cell.validation);\n var border, sibling;\n if (cell.borderLeft) {\n sibling = cellBefore(table, row);\n border = cellBorder(cell.borderLeft);\n if (sibling && border) {\n sibling.attr.style.borderRight = border;\n }\n } else if (cell.background) {\n style.borderLeftColor = cell.background;\n }\n if (cell.borderTop) {\n sibling = cellAbove(table, row);\n border = cellBorder(cell.borderTop);\n if (sibling && border) {\n sibling.attr.style.borderBottom = border;\n }\n } else if (cell.background) {\n style.borderTopColor = cell.background;\n }\n return td;\n }\n var HtmlTable = kendo.Class.extend({\n init: function () {\n this.cols = [];\n this.trs = [];\n this._height = 0;\n this._width = 0;\n },\n addColumn: function (width) {\n this._width += width;\n var col = kendo.dom.element('col', { style: { width: width + 'px' } });\n col.visible = width > 0;\n this.cols.push(col);\n },\n addRow: function (height) {\n var attr = null;\n attr = { style: { height: height + 'px' } };\n this._height += height;\n var tr = kendo.dom.element('tr', attr);\n tr.visible = height > 0;\n this.trs.push(tr);\n },\n addCell: function (rowIndex, text, style, className, validation) {\n if (text === null || text === undefined) {\n text = '';\n }\n if (!(text instanceof kendo.dom.Node)) {\n text = kendo.dom.text(text);\n }\n var children = [text];\n var properties = { style: style };\n if (validation && !validation.value) {\n children.push(kendo.dom.element('span', { className: 'k-dirty' }));\n className = (className || '') + (className ? ' ' : '') + 'k-dirty-cell';\n properties.title = validation.message;\n }\n if (className) {\n properties.className = className;\n }\n var td = kendo.dom.element('td', properties, children);\n this.trs[rowIndex].children.push(td);\n return td;\n },\n toDomTree: function (x, y, className) {\n this.trs = this.trs.filter(function (tr) {\n return tr.visible;\n });\n var offset = 0;\n this.cols = this.cols.filter(function (col, ci) {\n if (!col.visible) {\n this.trs.forEach(function (tr) {\n tr.children.splice(ci - offset, 1);\n });\n offset++;\n }\n return col.visible;\n }, this);\n return kendo.dom.element('table', {\n style: {\n left: x + 'px',\n top: y + 'px',\n height: this._height + 'px',\n width: this._width + 'px'\n },\n className: className\n }, [\n kendo.dom.element('colgroup', null, this.cols),\n kendo.dom.element('tbody', null, this.trs)\n ]);\n }\n });\n var CELL_CONTEXT_MENU = '<ul class=\"#=classNames.cellContextMenu#\">' + '<li data-action=cut>Cut</li>' + '<li data-action=copy>Copy</li>' + '<li data-action=paste>Paste</li>' + '<li class=\"k-separator\"></li>' + '<li data-action=merge>Merge</li>' + '<li data-action=unmerge>Unmerge</li>' + '</ul>';\n var ROW_HEADER_CONTEXT_MENU = '<ul class=\"#=classNames.rowHeaderContextMenu#\">' + '<li data-action=cut>Cut</li>' + '<li data-action=copy>Copy</li>' + '<li data-action=paste>Paste</li>' + '<li class=\"k-separator\"></li>' + '<li data-action=\"delete-row\">Delete</li>' + '<li data-action=\"hide-row\">Hide</li>' + '<li data-action=\"unhide-row\">Unhide</li>' + '</ul>';\n var COL_HEADER_CONTEXT_MENU = '<ul class=\"#=classNames.colHeaderContextMenu#\">' + '<li data-action=cut>Cut</li>' + '<li data-action=copy>Copy</li>' + '<li data-action=paste>Paste</li>' + '<li class=\"k-separator\"></li>' + '<li data-action=\"delete-column\">Delete</li>' + '<li data-action=\"hide-column\">Hide</li>' + '<li data-action=\"unhide-column\">Unhide</li>' + '</ul>';\n kendo.spreadsheet.ContextMenu = kendo.ui.ContextMenu;\n var VIEW_CONTENTS = kendo.template('<div class=\"#=classNames.view#\"><div class=\"#=classNames.fixedContainer#\"></div><div class=\"#=classNames.scroller#\"><div class=\"#=classNames.viewSize#\"></div></div>' + '<div tabindex=\"0\" class=\"#=classNames.clipboard#\" contenteditable=true></div><div class=\"#=classNames.cellEditor#\"></div></div><div class=\"#=classNames.sheetsBar#\"></div>' + CELL_CONTEXT_MENU + ROW_HEADER_CONTEXT_MENU + COL_HEADER_CONTEXT_MENU);\n function within(value, min, max) {\n return value >= min && value <= max;\n }\n var View = kendo.Class.extend({\n init: function (element, options) {\n var classNames = View.classNames;\n this.element = element;\n this.options = $.extend(true, { messages: kendo.spreadsheet.messages.view }, this.options, options);\n this._chrome();\n this._dialogs = [];\n element.append(VIEW_CONTENTS({ classNames: classNames }));\n this._formulaInput();\n this.wrapper = element.find(DOT + classNames.view);\n this.container = element.find(DOT + classNames.fixedContainer)[0];\n this.scroller = element.find(DOT + classNames.scroller)[0];\n this.clipboard = element.find(DOT + classNames.clipboard);\n this.viewSize = $(this.scroller.firstChild);\n this.tree = new kendo.dom.Tree(this.container);\n this.clipboardContents = new kendo.dom.Tree(this.clipboard[0]);\n this.editor = new kendo.spreadsheet.SheetEditor(this);\n this._sheetsbar();\n var contextMenuConfig = {\n target: element,\n animation: false,\n showOn: 'never'\n };\n this.cellContextMenu = new kendo.spreadsheet.ContextMenu(element.find(DOT + classNames.cellContextMenu), contextMenuConfig);\n this.colHeaderContextMenu = new kendo.spreadsheet.ContextMenu(element.find(DOT + classNames.colHeaderContextMenu), contextMenuConfig);\n this.rowHeaderContextMenu = new kendo.spreadsheet.ContextMenu(element.find(DOT + classNames.rowHeaderContextMenu), contextMenuConfig);\n var scrollbar = kendo.support.scrollbar();\n $(this.container).css({\n width: this.wrapper[0].clientWidth - scrollbar,\n height: this.wrapper[0].clientHeight - scrollbar\n });\n },\n enableClipboard: function (enable) {\n this.isClipboardDeactivated = !enable;\n if (enable) {\n this.clipboard.attr('contenteditable', enable);\n } else {\n this.clipboard.removeAttr('contenteditable');\n }\n },\n _resize: function () {\n var outerHeight = kendo._outerHeight;\n var tabstripHeight = this.tabstrip ? outerHeight(this.tabstrip.element) : 0;\n var formulaBarHeight = this.formulaBar ? outerHeight(this.formulaBar.element) : 0;\n var sheetsBarHeight = this.sheetsbar ? outerHeight(this.sheetsbar.element) : 0;\n this.wrapper.height(this.element.height() - (tabstripHeight + formulaBarHeight + sheetsBarHeight));\n if (this.tabstrip) {\n this.tabstrip.quickAccessAdjust();\n }\n },\n _chrome: function () {\n var wrapper = $('<div class=\\'k-spreadsheet-action-bar\\' />').prependTo(this.element);\n var nameEditor = $('<div class=\\'k-spreadsheet-name-editor\\' />').appendTo(wrapper);\n this.nameEditor = new kendo.spreadsheet.NameEditor(nameEditor);\n var formulaBar = $('<div />').appendTo(wrapper);\n this.formulaBar = new kendo.spreadsheet.FormulaBar(formulaBar);\n if (this.options.toolbar) {\n this._tabstrip();\n }\n },\n _formulaInput: function () {\n var editor = this.element.find(DOT + View.classNames.cellEditor);\n this.formulaInput = new kendo.spreadsheet.FormulaInput(editor, { autoScale: true });\n },\n _sheetsbar: function () {\n if (this.options.sheetsbar) {\n var options = $.extend(true, { openDialog: this.openDialog.bind(this) }, this.options.sheetsbar);\n this.sheetsbar = new kendo.spreadsheet.SheetsBar(this.element.find(DOT + View.classNames.sheetsBar), options);\n }\n },\n _tabstrip: function () {\n var messages = this.options.messages.tabs;\n var options = $.extend(true, {\n home: true,\n insert: true,\n data: true\n }, this.options.toolbar);\n var tabs = [];\n if (this.tabstrip) {\n this.tabstrip.destroy();\n this.element.children('.k-tabstrip').remove();\n }\n for (var name in options) {\n if (options[name] === true || options[name] instanceof Array) {\n tabs.push({\n id: name,\n text: messages[name],\n content: ''\n });\n }\n }\n this.tabstrip = new kendo.spreadsheet.TabStrip($('<div />').prependTo(this.element), {\n animation: false,\n dataTextField: 'text',\n dataContentField: 'content',\n dataSource: tabs,\n toolbarOptions: options,\n view: this\n });\n this.tabstrip.select(0);\n },\n _executeCommand: function (e) {\n this._sheet.trigger('commandRequest', e);\n },\n workbook: function (workbook) {\n this._workbook = workbook;\n this.nameEditor._workbook = workbook;\n },\n sheet: function (sheet) {\n this._sheet = sheet;\n },\n activeCellRectangle: function () {\n return this.cellRectangle(this._sheet._viewActiveCell());\n },\n _rectangle: function (pane, ref) {\n return pane._grid.boundingRectangle(ref.toRangeRef());\n },\n isColumnResizer: function (x, pane, ref) {\n var rectangle = this._rectangle(pane, ref);\n x -= this._sheet._grid._headerWidth;\n var handleWidth = RESIZE_HANDLE_WIDTH / 2;\n var right = rectangle.right - this.scroller.scrollLeft;\n return right - handleWidth <= x && x <= right + handleWidth;\n },\n isRowResizer: function (y, pane, ref) {\n var rectangle = this._rectangle(pane, ref);\n y -= this._sheet._grid._headerHeight;\n var handleWidth = RESIZE_HANDLE_WIDTH / 2;\n var bottom = rectangle.bottom - this.scroller.scrollTop;\n return bottom - handleWidth <= y && y <= bottom + handleWidth;\n },\n isFilterIcon: function (x, y, pane, ref) {\n var theGrid = pane._grid;\n var scrollTop = theGrid.rows.frozen ? 0 : this.scroller.scrollTop;\n var scrollLeft = theGrid.columns.frozen ? 0 : this.scroller.scrollLeft;\n x -= this._sheet._grid._headerWidth - scrollLeft;\n y -= this._sheet._grid._headerHeight - scrollTop;\n var result = false;\n this._sheet.forEachFilterHeader(ref, function (ref) {\n if (!result) {\n var rect = this._rectangle(pane, ref);\n result = pane.filterIconRect(rect).intersects(x, y);\n }\n }.bind(this));\n return result;\n },\n isAutoFill: function (x, y, pane) {\n var selection = this._sheet.select();\n if (selection.size > 1) {\n return false;\n }\n x -= this._sheet._grid._headerWidth;\n y -= this._sheet._grid._headerHeight;\n if (!pane._grid.columns.frozen) {\n x += this.scroller.scrollLeft;\n }\n if (!pane._grid.rows.frozen) {\n y += this.scroller.scrollTop;\n }\n var rectangle = this._rectangle(pane, selection);\n return Math.abs(rectangle.right - x) < 8 && Math.abs(rectangle.bottom - y) < 8;\n },\n isEditButton: function (x, y) {\n var ed = this._sheet.activeCellCustomEditor();\n if (ed) {\n var r = this.activeCellRectangle();\n if (x > r.right && x <= r.right + 20 && y >= r.top && y <= r.bottom) {\n return true;\n }\n }\n },\n objectAt: function (x, y) {\n var grid = this._sheet._grid;\n var object, pane;\n if (x < 0 || y < 0 || x > this.scroller.clientWidth || y > this.scroller.clientHeight) {\n object = { type: 'outside' };\n } else if (x < grid._headerWidth && y < grid._headerHeight) {\n object = { type: 'topcorner' };\n } else {\n pane = this.paneAt(x, y);\n if (!pane) {\n object = { type: 'outside' };\n } else {\n var row = pane._grid.rows.index(y, this.scroller.scrollTop);\n var column = pane._grid.columns.index(x, this.scroller.scrollLeft);\n var type = 'cell';\n var ref = new CellRef(row, column);\n var selecting = this._sheet.selectionInProgress();\n if (this.isAutoFill(x, y, pane)) {\n type = 'autofill';\n } else if (this.isFilterIcon(x, y, pane, ref)) {\n type = 'filtericon';\n } else if (!selecting && x < grid._headerWidth) {\n ref = new CellRef(row, -Infinity);\n type = this.isRowResizer(y, pane, ref) ? 'rowresizehandle' : 'rowheader';\n } else if (!selecting && y < grid._headerHeight) {\n ref = new CellRef(-Infinity, column);\n type = this.isColumnResizer(x, pane, ref) ? 'columnresizehandle' : 'columnheader';\n } else if (this.isEditButton(x, y)) {\n type = 'editor';\n }\n object = {\n type: type,\n ref: ref\n };\n }\n }\n object.pane = pane;\n object.x = x;\n object.y = y;\n return object;\n },\n paneAt: function (x, y) {\n return this.panes.filter(function paneLocationWithin(pane) {\n var grid = pane._grid;\n return within(y, grid.top, grid.bottom) && within(x, grid.left, grid.right);\n })[0];\n },\n containingPane: function (cell) {\n return this.panes.filter(function (pane) {\n if (pane._grid.contains(cell)) {\n return true;\n }\n return false;\n })[0];\n },\n cellRectangle: function (cell) {\n var theGrid = this.containingPane(cell)._grid;\n var rectangle = this._sheet._grid.rectangle(cell);\n return rectangle.offset(theGrid.headerWidth - (theGrid.columns.frozen ? 0 : this.scroller.scrollLeft), theGrid.headerHeight - (theGrid.rows.frozen ? 0 : this.scroller.scrollTop));\n },\n refresh: function (reason) {\n var sheet = this._sheet;\n if (this.tabstrip) {\n this.tabstrip.refreshTools(sheet.range(sheet.activeCell()));\n }\n if (reason.sheetSelection && this.sheetsbar) {\n this.sheetsbar.renderSheets(this._workbook.sheets(), this._workbook.sheetIndex(this._sheet));\n }\n this._resize();\n this.viewSize[0].style.height = sheet._grid.totalHeight() + 'px';\n this.viewSize[0].style.width = sheet._grid.totalWidth() + 'px';\n if (reason.layout) {\n var frozenColumns = sheet.frozenColumns();\n var frozenRows = sheet.frozenRows();\n this.panes = [this._pane(frozenRows, frozenColumns)];\n if (frozenColumns > 0) {\n this.panes.push(this._pane(frozenRows, 0, null, frozenColumns));\n }\n if (frozenRows > 0) {\n this.panes.push(this._pane(0, frozenColumns, frozenRows, null));\n }\n if (frozenRows > 0 && frozenColumns > 0) {\n this.panes.push(this._pane(0, 0, frozenRows, frozenColumns));\n }\n }\n if (reason.filter) {\n this._destroyFilterMenu();\n }\n if (reason.activeCell) {\n this._focus = sheet.activeCell().toRangeRef();\n }\n },\n createFilterMenu: function (column) {\n if (this._filterMenu && this._filterMenu.options.column == column) {\n return this._filterMenu;\n }\n this._destroyFilterMenu();\n var sheet = this._sheet;\n var ref = sheet.filter().ref;\n var range = new kendo.spreadsheet.Range(ref, sheet);\n var element = $('<div />').appendTo(this.element);\n var options = {\n column: column,\n range: range\n };\n var filterMenu = new kendo.spreadsheet.FilterMenu(element, options);\n this._filterMenu = filterMenu;\n return filterMenu;\n },\n selectClipBoardContents: function () {\n if (!this.isClipboardDeactivated) {\n this.clipboard.focus();\n selectElementContents(this.clipboard[0]);\n }\n },\n scrollIntoView: function (cell) {\n var willScroll = false;\n var theGrid = this.containingPane(cell)._grid;\n var boundaries = theGrid.scrollBoundaries(cell);\n var scroller = this.scroller;\n var scrollTop = theGrid.rows.frozen ? 0 : scroller.scrollTop;\n var scrollLeft = theGrid.columns.frozen ? 0 : scroller.scrollLeft;\n if (boundaries.top < scrollTop) {\n willScroll = true;\n scroller.scrollTop = boundaries.scrollTop;\n }\n if (boundaries.bottom > scrollTop) {\n willScroll = true;\n scroller.scrollTop = boundaries.scrollBottom;\n }\n if (boundaries.left < scrollLeft) {\n willScroll = true;\n scroller.scrollLeft = boundaries.scrollLeft;\n }\n if (boundaries.right > scrollLeft) {\n willScroll = true;\n scroller.scrollLeft = boundaries.scrollRight;\n }\n return willScroll;\n },\n _destroyDialog: function () {\n this._dialogs.pop();\n },\n openCustomEditor: function () {\n var self = this;\n var cell = self._sheet.activeCell().first();\n var editor = self._sheet.activeCellCustomEditor();\n var range = self._sheet.range(cell);\n editor.edit({\n range: range,\n rect: self.activeCellRectangle(),\n view: this,\n validation: this._sheet.validation(cell),\n callback: function (value, parse) {\n self._executeCommand({\n command: 'EditCommand',\n options: {\n operatingRange: range,\n property: parse ? 'input' : 'value',\n value: value\n }\n });\n }\n });\n },\n openDialog: function (name, options) {\n var dialog = kendo.spreadsheet.dialogs.create(name, options);\n if (dialog) {\n dialog.bind('action', this._executeCommand.bind(this));\n dialog.bind('deactivate', this._destroyDialog.bind(this));\n this._dialogs.push(dialog);\n var sheet = this._sheet;\n var ref = sheet.activeCell();\n var range = new kendo.spreadsheet.Range(ref, sheet);\n dialog.open(range);\n return dialog;\n }\n },\n showError: function (options, reopenEditor) {\n var errorMessages = this.options.messages.errors;\n var focusButton = function (e) {\n var cont = e.sender.dialog().element;\n cont.find('.k-button:first').focus();\n cont.find('.k-button, input').on('keydown', function (ev) {\n if (ev.keyCode == kendo.keys.ESC) {\n e.sender.close();\n }\n });\n };\n var onClose = function (e) {\n var dlg = e.sender;\n this.selectClipBoardContents();\n if (dlg._retry && reopenEditor) {\n reopenEditor();\n }\n }.bind(this);\n if (kendo.spreadsheet.dialogs.registered(options.type)) {\n var dialogOptions = { close: onClose };\n if (options.type === 'validationError') {\n dialogOptions = $.extend(dialogOptions, {\n title: options.title || 'Error',\n text: options.body ? options.body : errorMessages[options.type],\n activate: focusButton\n });\n }\n this.openDialog(options.type, dialogOptions);\n } else {\n this.openDialog('message', {\n title: options.title || 'Error',\n text: options.body ? options.body : errorMessages[options.type],\n activate: focusButton,\n close: onClose\n });\n }\n },\n destroy: function () {\n this._dialogs.forEach(function (dialog) {\n dialog.destroy();\n });\n this.cellContextMenu.destroy();\n this.rowHeaderContextMenu.destroy();\n this.colHeaderContextMenu.destroy();\n if (this.tabstrip) {\n this.tabstrip.destroy();\n }\n this._destroyFilterMenu();\n },\n _destroyFilterMenu: function () {\n if (this._filterMenu) {\n this._filterMenu.destroy();\n this._filterMenu = undefined;\n this._filterMenuColumn = undefined;\n }\n },\n render: function () {\n if (!this.element.is(':visible')) {\n return;\n }\n var sheet = this._sheet;\n var focus = sheet.focus();\n if (focus && this.scrollIntoView(focus)) {\n return;\n }\n var resizeDirection = !sheet.resizingInProgress() ? 'none' : sheet.resizeHandlePosition().col === -Infinity ? 'column' : 'row';\n this.wrapper.toggleClass(viewClassNames.editContainer, this.editor.isActive()).toggleClass(viewClassNames.horizontalResize, resizeDirection == 'row').toggleClass(viewClassNames.verticalResize, resizeDirection == 'column');\n var grid = sheet._grid;\n var scrollTop = this.scroller.scrollTop;\n var scrollLeft = this.scroller.scrollLeft;\n if (scrollTop < 0) {\n scrollTop = 0;\n }\n if (scrollLeft < 0) {\n scrollLeft = 0;\n }\n var result = this.panes.map(function (pane) {\n return pane.render(scrollLeft, scrollTop);\n }, this);\n var merged = [];\n merged = Array.prototype.concat.apply(merged, result);\n var topCorner = kendo.dom.element('div', {\n style: {\n width: grid._headerWidth + 'px',\n height: grid._headerHeight + 'px'\n },\n className: View.classNames.topCorner\n });\n merged.push(topCorner);\n if (sheet.resizeHandlePosition() && sheet.resizeHintPosition()) {\n merged.push(this.renderResizeHint());\n }\n this.tree.render(merged);\n if (this.editor.isActive()) {\n this.editor.toggleTooltip(this.activeCellRectangle());\n } else if (!sheet.selectionInProgress() && !sheet.resizingInProgress() && !sheet.isInEditMode()) {\n this.renderClipboardContents();\n }\n },\n renderResizeHint: function () {\n var sheet = this._sheet;\n var ref = sheet.resizeHandlePosition();\n var horizontal = ref.col !== -Infinity;\n var style;\n if (horizontal) {\n style = {\n height: this.scroller.clientHeight + 'px',\n width: RESIZE_HANDLE_WIDTH + 'px',\n left: sheet.resizeHintPosition().x + 'px',\n top: '0px'\n };\n } else {\n style = {\n height: RESIZE_HANDLE_WIDTH + 'px',\n width: this.scroller.clientWidth + 'px',\n top: sheet.resizeHintPosition().y + 'px',\n left: '0px'\n };\n }\n var classNames = Pane.classNames;\n return kendo.dom.element('div', {\n className: classNames.resizeHint + (!horizontal ? ' ' + classNames.resizeHintVertical : ''),\n style: style\n }, [\n kendo.dom.element('div', { className: classNames.resizeHintHandle }),\n kendo.dom.element('div', { className: classNames.resizeHintMarker })\n ]);\n },\n renderClipboardContents: function () {\n var sheet = this._sheet;\n var grid = sheet._grid;\n var selection = sheet.select().toRangeRef();\n var status = this._workbook.clipboard().canCopy();\n if (status.canCopy === false && status.multiSelection) {\n this.clipboardContents.render([]);\n this.selectClipBoardContents();\n return;\n }\n selection = sheet.trim(selection);\n var table = new HtmlTable();\n var selectionView = grid.rangeDimensions(selection);\n selectionView.rows.forEach(function (height) {\n table.addRow(height);\n });\n selectionView.columns.forEach(function (width) {\n table.addColumn(width);\n });\n var tmp = sheet._getMergedCells(selection);\n var primaryMergedCells = tmp.primary;\n var secondaryMergedCells = tmp.secondary;\n sheet.forEach(selection, function (row, col, cell) {\n var location = new CellRef(row, col).print();\n if (!secondaryMergedCells[location]) {\n var td = addCell(table, row - selection.topLeft.row, cell);\n var mergedCell = primaryMergedCells[location];\n if (mergedCell) {\n td.attr.colspan = mergedCell.width();\n td.attr.rowspan = mergedCell.height();\n }\n }\n });\n this.clipboardContents.render([table.toDomTree(0, 0, 'kendo-clipboard-' + this._workbook.clipboard()._uid)]);\n this.selectClipBoardContents();\n },\n _pane: function (row, column, rowCount, columnCount) {\n var pane = new Pane(this._sheet, this._sheet._grid.pane({\n row: row,\n column: column,\n rowCount: rowCount,\n columnCount: columnCount\n }));\n pane.refresh(this.scroller.clientWidth, this.scroller.clientHeight);\n return pane;\n }\n });\n var paneClassNames = {\n cell: 'k-spreadsheet-cell',\n vaxis: 'k-spreadsheet-vaxis',\n haxis: 'k-spreadsheet-haxis',\n rowHeader: 'k-spreadsheet-row-header',\n columnHeader: 'k-spreadsheet-column-header',\n pane: 'k-spreadsheet-pane',\n data: 'k-spreadsheet-data',\n mergedCell: 'k-spreadsheet-merged-cell',\n mergedCellsWrapper: 'k-merged-cells-wrapper',\n activeCell: 'k-spreadsheet-active-cell',\n selection: 'k-spreadsheet-selection',\n selectionWrapper: 'k-selection-wrapper',\n autoFillWrapper: 'k-auto-fill-wrapper',\n single: 'k-single',\n top: 'k-top',\n right: 'k-right',\n bottom: 'k-bottom',\n left: 'k-left',\n resizeHandle: 'k-resize-handle',\n columnResizeHandle: 'k-column-resize-handle',\n rowResizeHandle: 'k-row-resize-handle',\n resizeHint: 'k-resize-hint',\n resizeHintHandle: 'k-resize-hint-handle',\n resizeHintMarker: 'k-resize-hint-marker',\n resizeHintVertical: 'k-resize-hint-vertical',\n selectionHighlight: 'k-spreadsheet-selection-highlight',\n series: [\n 'k-series-a',\n 'k-series-b',\n 'k-series-c',\n 'k-series-d',\n 'k-series-e',\n 'k-series-f'\n ]\n };\n var Pane = kendo.Class.extend({\n init: function (sheet, grid) {\n this._sheet = sheet;\n this._grid = grid;\n },\n refresh: function (width, height) {\n this._grid.refresh(width, height);\n },\n isVisible: function (scrollLeft, scrollTop, ref) {\n return this._grid.view(scrollLeft, scrollTop).ref.intersects(ref);\n },\n render: function (scrollLeft, scrollTop) {\n var classNames = Pane.classNames;\n var sheet = this._sheet;\n var grid = this._grid;\n var view = grid.view(scrollLeft, scrollTop);\n this._currentView = view;\n this._currentRect = this._rectangle(view.ref);\n this._selectedHeaders = sheet.selectedHeaders();\n var children = [];\n children.push(this.renderData());\n children.push(this.renderSelection());\n children.push(this.renderAutoFill());\n children.push(this.renderEditorSelection());\n children.push(this.renderFilterHeaders());\n if (grid.hasRowHeader) {\n var rowHeader = kendo.dom.element('div', {\n className: classNames.rowHeader,\n style: {\n width: grid.headerWidth + 'px',\n top: view.rowOffset + 'px'\n }\n });\n children.push(rowHeader);\n sheet.forEach(view.ref.leftColumn(), function (row) {\n if (!sheet.isHiddenRow(row)) {\n var text = row + 1, height = sheet.rowHeight(row);\n rowHeader.children.push(kendo.dom.element('div', {\n className: this.headerClassName(row, 'row'),\n style: {\n width: grid.headerWidth + 'px',\n height: height + 'px'\n }\n }, [kendo.dom.element('div', { className: 'k-vertical-align-center' }, [kendo.dom.text(text + '')])]));\n }\n }.bind(this));\n }\n if (grid.hasColumnHeader) {\n var columnHeader = kendo.dom.element('div', {\n className: classNames.columnHeader,\n style: {\n top: '0px',\n left: view.columnOffset + 'px',\n width: this._currentRect.width + 'px',\n height: grid.headerHeight + 'px'\n }\n });\n children.push(columnHeader);\n var left = 0;\n sheet.forEach(view.ref.topRow(), function (row, col) {\n if (!sheet.isHiddenColumn(col)) {\n var text = kendo.spreadsheet.Ref.display(null, Infinity, col), width = sheet.columnWidth(col);\n columnHeader.children.push(kendo.dom.element('div', {\n className: this.headerClassName(col, 'col'),\n style: {\n position: 'absolute',\n left: left + 'px',\n width: width + 'px',\n height: grid.headerHeight + 'px'\n }\n }, [kendo.dom.element('div', { className: 'k-vertical-align-center' }, [kendo.dom.text(text + '')])]));\n left += width;\n }\n }.bind(this));\n }\n if (sheet.resizeHandlePosition() && (grid.hasColumnHeader || grid.hasRowHeader)) {\n var ref = sheet._grid.normalize(sheet.resizeHandlePosition());\n if (view.ref.intersects(ref)) {\n if (!sheet.resizeHintPosition()) {\n children.push(this.renderResizeHandle());\n }\n }\n }\n var paneClasses = [classNames.pane];\n if (grid.hasColumnHeader) {\n paneClasses.push(classNames.top);\n }\n if (grid.hasRowHeader) {\n paneClasses.push(classNames.left);\n }\n return kendo.dom.element('div', {\n style: grid.style,\n className: paneClasses.join(' ')\n }, children);\n },\n headerClassName: function (index, type) {\n var selectedHeaders = this._selectedHeaders;\n var itemSelection;\n var allHeaders;\n if (type === 'row') {\n itemSelection = selectedHeaders.rows[index];\n allHeaders = selectedHeaders.allRows;\n } else {\n itemSelection = selectedHeaders.cols[index];\n allHeaders = selectedHeaders.allCols;\n }\n var className = itemSelection || (selectedHeaders.all ? 'full' : allHeaders ? 'partial' : 'none');\n if (className) {\n className = 'k-selection-' + className;\n }\n return className;\n },\n renderData: function () {\n var sheet = this._sheet;\n var view = this._currentView;\n var cont = kendo.dom.element('div', {\n className: Pane.classNames.data,\n style: {\n position: 'relative',\n left: view.columnOffset + 'px',\n top: view.rowOffset + 'px'\n }\n });\n var rect = this._currentRect;\n var layout = kendo.spreadsheet.draw.doLayout(sheet, view.ref, { forScreen: true }), prev;\n var showGridLines = sheet._showGridLines;\n if (showGridLines) {\n prev = null;\n layout.xCoords.forEach(function (x) {\n if (x !== prev) {\n prev = x;\n cont.children.push(kendo.dom.element('div', {\n className: paneClassNames.vaxis,\n style: {\n left: x + 'px',\n height: rect.height + 'px',\n borderColor: sheet.gridLinesColor()\n }\n }));\n }\n });\n prev = null;\n layout.yCoords.forEach(function (y) {\n if (y !== prev) {\n prev = y;\n cont.children.push(kendo.dom.element('div', {\n className: paneClassNames.haxis,\n style: {\n top: y + 'px',\n width: rect.width + 'px',\n borderColor: sheet.gridLinesColor()\n }\n }));\n }\n });\n }\n var vBorders = {}, hBorders = {};\n layout.cells.forEach(function (cell) {\n var hb = hBorders[cell.col] || (hBorders[cell.col] = {});\n var vb = vBorders[cell.row] || (vBorders[cell.row] = {});\n drawCell(cont.children, cell, null, hb, vb, showGridLines);\n });\n return cont;\n },\n renderResizeHandle: function () {\n var sheet = this._sheet;\n var ref = sheet.resizeHandlePosition();\n var rectangle = this._rectangle(ref);\n var classNames = [Pane.classNames.resizeHandle];\n var style;\n if (ref.col !== -Infinity) {\n style = {\n height: this._grid.headerHeight + 'px',\n width: RESIZE_HANDLE_WIDTH + 'px',\n left: rectangle.right - RESIZE_HANDLE_WIDTH / 2 + 'px',\n top: '0px'\n };\n classNames.push(viewClassNames.horizontalResize);\n } else {\n style = {\n height: RESIZE_HANDLE_WIDTH + 'px',\n width: this._grid.headerWidth + 'px',\n top: rectangle.bottom - RESIZE_HANDLE_WIDTH / 2 + 'px',\n left: '0px'\n };\n classNames.push(viewClassNames.verticalResize);\n }\n return kendo.dom.element('div', {\n className: classNames.join(' '),\n style: style\n });\n },\n filterIconRect: function (rect) {\n var BUTTON_SIZE = 16;\n var BUTTON_OFFSET = 3;\n return new kendo.spreadsheet.Rectangle(rect.right - BUTTON_SIZE - BUTTON_OFFSET, rect.top + BUTTON_OFFSET, BUTTON_SIZE, BUTTON_SIZE);\n },\n renderFilterHeaders: function () {\n var sheet = this._sheet;\n var children = [];\n var classNames = View.classNames;\n var filter = sheet.filter();\n function icon(className) {\n return kendo.dom.element('span', { className: classNames.icon + ' ' + className });\n }\n function filterButton(classNames, position, index) {\n var style = {\n left: position.left + 'px',\n top: position.top + 'px'\n };\n var filtered = filter && filter.columns.some(function (c) {\n return c.index === index;\n });\n var classes = classNames.filterButton;\n if (filtered) {\n classes += ' ' + classNames.filterButtonActive;\n }\n var button = kendo.dom.element('span', {\n className: classes,\n style: style\n }, [icon(classNames.iconFilterDefault)]);\n return button;\n }\n if (filter) {\n this._addDiv(children, filter.ref, classNames.filterRange);\n }\n sheet.forEachFilterHeader(this._currentView.ref, function (ref) {\n var rect = this._rectangle(ref);\n var position = this.filterIconRect(rect);\n var column = this._sheet.filterColumn(ref);\n var button = filterButton(classNames, position, column);\n children.push(button);\n }.bind(this));\n return kendo.dom.element('div', { className: classNames.filterHeadersWrapper }, children);\n },\n renderEditorSelection: function () {\n var classNames = Pane.classNames;\n var sheet = this._sheet;\n var selections = [];\n sheet._formulaSelections.forEach(function (range) {\n var ref = range.ref;\n if (ref === kendo.spreadsheet.NULLREF) {\n return;\n }\n this._addDiv(selections, ref, classNames.selectionHighlight + ' ' + range.colorClass);\n }.bind(this));\n return kendo.dom.element('div', { className: classNames.selectionWrapper }, selections);\n },\n renderSelection: function () {\n var classNames = Pane.classNames;\n var selections = [];\n var activeCellClasses = [classNames.activeCell];\n var selectionClasses = [classNames.selection];\n var sheet = this._sheet;\n var activeCell = sheet.activeCell().toRangeRef();\n var activeFormulaColor = this._activeFormulaColor();\n var selection = sheet.select();\n activeCellClasses = activeCellClasses.concat(activeFormulaColor, this._directionClasses(activeCell));\n selectionClasses = selectionClasses.concat(activeFormulaColor);\n if (sheet.singleCellSelection()) {\n activeCellClasses.push(classNames.single);\n }\n if (selection.size() === 1) {\n selectionClasses.push('k-single-selection');\n }\n if (this._sheet.autoFillPunch()) {\n selectionClasses.push('k-dim-auto-fill-handle');\n }\n selection.forEach(function (ref) {\n if (ref !== kendo.spreadsheet.NULLREF) {\n this._addDiv(selections, ref, selectionClasses.join(' '));\n }\n }.bind(this));\n this._addTable(selections, activeCell, activeCellClasses.join(' '));\n return kendo.dom.element('div', { className: classNames.selectionWrapper }, selections);\n },\n renderAutoFill: function () {\n var autoFillRectangle = [];\n if (this._sheet.autoFillInProgress()) {\n var autoFillRef = this._sheet.autoFillRef();\n var punch = this._sheet.autoFillPunch();\n var direction = this._sheet._autoFillDirection;\n this._addDiv(autoFillRectangle, autoFillRef, 'k-auto-fill');\n if (punch) {\n this._addDiv(autoFillRectangle, punch, 'k-auto-fill-punch');\n } else if (direction !== undefined) {\n var ref, cssClass;\n switch (direction) {\n case 0:\n ref = autoFillRef.bottomRight;\n cssClass = 'k-auto-fill-br-hint';\n break;\n case 1:\n ref = autoFillRef.bottomRight;\n cssClass = 'k-auto-fill-br-hint';\n break;\n case 2:\n ref = new CellRef(autoFillRef.topLeft.row, autoFillRef.bottomRight.col);\n cssClass = 'k-auto-fill-tr-hint';\n break;\n case 3:\n ref = new CellRef(autoFillRef.bottomRight.row, autoFillRef.topLeft.col);\n cssClass = 'k-auto-fill-bl-hint';\n break;\n }\n var hint = kendo.dom.element('span', { className: 'k-tooltip' }, [kendo.dom.text(this._sheet._autoFillHint)]);\n var rectangle = this._addDiv(autoFillRectangle, ref, cssClass);\n if (rectangle) {\n rectangle.children.push(hint);\n }\n }\n }\n return kendo.dom.element('div', { className: Pane.classNames.autoFillWrapper }, autoFillRectangle);\n },\n _addDiv: function (collection, ref, className) {\n var view = this._currentView, div;\n if (view.ref.intersects(ref)) {\n div = this._rectangle(ref).resize(1, 1).toDiv(className);\n collection.push(div);\n }\n return div;\n },\n _addTable: function (collection, ref, className) {\n var self = this;\n var sheet = self._sheet;\n var view = self._currentView;\n if (view.ref.intersects(ref)) {\n var rectangle = self._rectangle(ref);\n var ed = self._sheet.activeCellCustomEditor();\n sheet.forEach(ref.collapse(), function (row, col, cell) {\n cell.left = rectangle.left;\n cell.top = rectangle.top;\n cell.width = rectangle.width;\n cell.height = rectangle.height;\n drawCell(collection, cell, className, null, null, true);\n if (ed) {\n var btn = kendo.dom.element('div', {\n className: 'k-button k-spreadsheet-editor-button',\n style: {\n left: cell.left + cell.width + 'px',\n top: cell.top + 'px',\n height: cell.height + 'px'\n }\n });\n if (ed.icon) {\n btn.children.push(kendo.dom.element('span', { className: 'k-icon ' + ed.icon }));\n }\n collection.push(btn);\n }\n });\n }\n },\n _activeFormulaColor: function () {\n var activeFormulaSelection;\n var colorClasses = [];\n if (this._sheet.isInEditMode()) {\n activeFormulaSelection = this._sheet._formulaSelections.filter(function (sel) {\n return sel.active && sel.type == 'ref';\n })[0];\n if (activeFormulaSelection) {\n colorClasses.push(activeFormulaSelection.colorClass);\n }\n }\n return colorClasses;\n },\n _directionClasses: function (cell) {\n var cellClasses = [];\n var classNames = Pane.classNames;\n var view = this._currentView.ref;\n if (!cell.move(0, -1).intersects(view)) {\n cellClasses.push(classNames.left);\n }\n if (!cell.move(-1, 0).intersects(view)) {\n cellClasses.push(classNames.top);\n }\n if (!cell.move(0, 1).intersects(view)) {\n cellClasses.push(classNames.right);\n }\n if (!cell.move(1, 0).intersects(view)) {\n cellClasses.push(classNames.bottom);\n }\n return cellClasses;\n },\n _rectangle: function (ref) {\n return this._grid.boundingRectangle(ref.toRangeRef()).offset(-this._currentView.mergedCellLeft, -this._currentView.mergedCellTop);\n }\n });\n kendo.spreadsheet.View = View;\n kendo.spreadsheet.Pane = Pane;\n kendo.spreadsheet.drawCell = drawCell;\n $.extend(true, View, { classNames: viewClassNames });\n $.extend(true, Pane, { classNames: paneClassNames });\n }(window.kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/customeditors', [\n 'kendo.core',\n 'kendo.popup',\n 'kendo.calendar',\n 'kendo.listview',\n 'spreadsheet/sheet'\n ], f);\n}(function () {\n (function (kendo) {\n 'use strict';\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var EDITORS = {};\n var registerEditor = kendo.spreadsheet.registerEditor = function (name, editor) {\n EDITORS[name] = editor;\n };\n kendo.spreadsheet.Sheet.prototype.activeCellCustomEditor = function () {\n var cell = this.activeCell().first();\n if (this.range(cell).enable()) {\n var val = this.validation(cell);\n var key = this._properties.get('editor', this._grid.cellRefIndex(cell));\n var editor;\n if (key != null) {\n editor = EDITORS[key];\n } else if (val && val.showButton) {\n key = '_validation_' + val.dataType;\n editor = EDITORS[key];\n }\n if (typeof editor == 'function') {\n editor = EDITORS[key] = editor();\n }\n return editor;\n }\n };\n registerEditor('_validation_date', function () {\n var context, calendar, popup;\n function create() {\n if (!calendar) {\n calendar = $('<div>').kendoCalendar();\n popup = $('<div>').kendoPopup();\n calendar.appendTo(popup);\n calendar = calendar.getKendoCalendar();\n popup = popup.getKendoPopup();\n calendar.bind('change', function () {\n popup.close();\n var date = calendar.value();\n if (!context.range.format()) {\n context.range.format('yyyy-mm-dd');\n }\n context.callback(kendo.spreadsheet.dateToNumber(date));\n });\n }\n popup.setOptions({ anchor: context.view.element.find('.k-spreadsheet-editor-button') });\n }\n function open() {\n create();\n var date = context.range.value();\n if (date != null) {\n calendar.value(kendo.spreadsheet.numberToDate(date));\n } else {\n calendar.value(null);\n }\n var val = context.validation;\n if (val) {\n var min = kendo.ui.Calendar.fn.options.min;\n var max = kendo.ui.Calendar.fn.options.max;\n if (/^(?:greaterThan|between)/.test(val.comparerType)) {\n min = kendo.spreadsheet.numberToDate(val.from.value);\n }\n if (val.comparerType == 'between') {\n max = kendo.spreadsheet.numberToDate(val.to.value);\n }\n if (val.comparerType == 'lessThan') {\n max = kendo.spreadsheet.numberToDate(val.from.value);\n }\n calendar.setOptions({\n disableDates: function (date) {\n var from = val.from ? val.from.value | 0 : 0;\n var to = val.to ? val.to.value | 0 : 0;\n date = kendo.spreadsheet.dateToNumber(date) | 0;\n return !kendo.spreadsheet.validation.validationComparers[val.comparerType](date, from, to);\n },\n min: min,\n max: max\n });\n } else {\n calendar.setOptions({\n disableDates: null,\n min: null,\n max: null\n });\n }\n popup.open();\n }\n return {\n edit: function (options) {\n context = options;\n open();\n },\n icon: 'k-i-calendar'\n };\n });\n registerEditor('_validation_list', function () {\n var context, list, popup;\n function create() {\n if (!list) {\n list = $('<ul class=\\'k-list k-reset\\'/>').kendoStaticList({\n template: '#:value#',\n selectable: true,\n autoBind: false\n });\n popup = $('<div>').kendoPopup();\n list.appendTo(popup);\n popup = popup.getKendoPopup();\n list = list.getKendoStaticList();\n list.bind('change', function () {\n popup.close();\n var item = list.value()[0];\n if (item) {\n context.callback(item.value);\n }\n });\n }\n popup.setOptions({ anchor: context.view.element.find('.k-spreadsheet-editor-button') });\n }\n function open() {\n create();\n var matrix = context.validation.from.value;\n var data = [];\n if (matrix) {\n matrix.each(function (el) {\n data.push({ value: el });\n });\n }\n var dataSource = new kendo.data.DataSource({ data: data });\n list.setDataSource(dataSource);\n dataSource.read();\n popup.open();\n }\n return {\n edit: function (options) {\n context = options;\n open();\n },\n icon: 'k-i-arrow-60-down'\n };\n });\n }(window.kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/grid', [\n 'kendo.core',\n 'spreadsheet/references'\n ], f);\n}(function () {\n (function (kendo) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var CellRef = kendo.spreadsheet.CellRef;\n var RangeRef = kendo.spreadsheet.RangeRef;\n var UnionRef = kendo.spreadsheet.UnionRef;\n var Rectangle = kendo.Class.extend({\n init: function (left, top, width, height) {\n this.left = left;\n this.width = width;\n this.right = left + width;\n this.top = top;\n this.height = height;\n this.bottom = top + height;\n },\n offset: function (left, top) {\n return new Rectangle(this.left + left, this.top + top, this.width, this.height);\n },\n resize: function (width, height) {\n return new Rectangle(this.left, this.top, this.width + width, this.height + height);\n },\n intersects: function (x, y) {\n return this.left < x && x < this.left + this.width && this.top < y && y < this.top + this.height;\n },\n toDiv: function (className) {\n return kendo.dom.element('div', {\n className: className,\n style: {\n width: this.width + 'px',\n height: this.height + 'px',\n top: this.top + 'px',\n left: this.left + 'px'\n }\n });\n }\n });\n var Grid = kendo.Class.extend({\n init: function (rows, columns, rowCount, columnCount, headerHeight, headerWidth) {\n this.rowCount = rowCount;\n this.columnCount = columnCount;\n this._columns = columns;\n this._rows = rows;\n this._headerHeight = headerHeight;\n this._headerWidth = headerWidth;\n },\n isAxis: function (ref) {\n ref = ref.toRangeRef();\n var topLeft = ref.topLeft;\n var bottomRight = ref.bottomRight;\n return topLeft.row === 0 && bottomRight.row === this.rowCount - 1 || topLeft.col === 0 && bottomRight.col === this.columnCount - 1;\n },\n width: function (start, end) {\n return this._columns.sum(start, end);\n },\n height: function (start, end) {\n return this._rows.sum(start, end);\n },\n totalHeight: function () {\n return this._rows.total + this._headerHeight;\n },\n totalWidth: function () {\n return this._columns.total + this._headerWidth;\n },\n index: function (row, column) {\n return column * this.rowCount + row;\n },\n cellRef: function (index) {\n return new CellRef(index % this.rowCount, index / this.rowCount >> 0);\n },\n rowRef: function (row) {\n return new RangeRef(new CellRef(row, 0), new CellRef(row, this.columnCount - 1));\n },\n colRef: function (col) {\n return new RangeRef(new CellRef(0, col), new CellRef(this.rowCount - 1, col));\n },\n cellRefIndex: function (ref) {\n return this.index(ref.row, ref.col);\n },\n normalize: function (ref) {\n if (ref instanceof RangeRef) {\n return new RangeRef(this.normalize(ref.topLeft), this.normalize(ref.bottomRight)).setSheet(ref.sheet, ref.hasSheet());\n }\n if (ref instanceof UnionRef) {\n return ref.map(function (ref) {\n return this.normalize(ref);\n }, this);\n }\n if (ref instanceof CellRef) {\n ref = ref.clone();\n ref.col = Math.max(0, Math.min(this.columnCount - 1, ref.col));\n ref.row = Math.max(0, Math.min(this.rowCount - 1, ref.row));\n }\n return ref;\n },\n rectangle: function (ref) {\n var topLeft = this.normalize(ref.topLeft);\n var bottomRight = this.normalize(ref.bottomRight);\n return new Rectangle(this.width(0, topLeft.col - 1), this.height(0, topLeft.row - 1), this.width(topLeft.col, bottomRight.col), this.height(topLeft.row, bottomRight.row));\n },\n pane: function (options) {\n return new PaneGrid(new kendo.spreadsheet.PaneAxis(this._rows, options.row, options.rowCount, this._headerHeight), new kendo.spreadsheet.PaneAxis(this._columns, options.column, options.columnCount, this._headerWidth), this);\n },\n rangeDimensions: function (rangeRef) {\n return {\n rows: this._rows.values.iterator(rangeRef.topLeft.row, rangeRef.bottomRight.row),\n columns: this._columns.values.iterator(rangeRef.topLeft.col, rangeRef.bottomRight.col)\n };\n },\n forEach: function (ref, callback) {\n var topLeft = this.normalize(ref.topLeft);\n var bottomRight = this.normalize(ref.bottomRight);\n for (var ci = topLeft.col; ci <= bottomRight.col; ci++) {\n for (var ri = topLeft.row; ri <= bottomRight.row; ri++) {\n callback(new CellRef(ri, ci));\n }\n }\n },\n trim: function (ref, property) {\n var topLeft = ref.topLeft;\n var bottomRight = ref.bottomRight;\n var bottomRightRow = topLeft.row;\n var bottomRightCol = topLeft.col;\n for (var ci = topLeft.col; ci <= bottomRight.col; ci++) {\n var start = this.index(topLeft.row, ci);\n var end = this.index(bottomRight.row, ci);\n var values = property.tree.intersecting(start, end);\n if (values.length) {\n var cell = this.cellRef(values[values.length - 1].end);\n bottomRightRow = Math.max(bottomRightRow, cell.row);\n bottomRightCol = ci;\n }\n }\n return new RangeRef(ref.topLeft, new CellRef(Math.min(bottomRightRow, ref.bottomRight.row), bottomRightCol));\n }\n });\n var PaneGrid = kendo.Class.extend({\n init: function (rows, columns, grid) {\n this.rows = rows;\n this.columns = columns;\n this._grid = grid;\n this.headerHeight = rows.headerSize;\n this.headerWidth = columns.headerSize;\n this.hasRowHeader = columns.hasHeader;\n this.hasColumnHeader = rows.hasHeader;\n },\n refresh: function (width, height) {\n this.columns.viewSize(width);\n this.rows.viewSize(height);\n var x = this.columns.paneSegment();\n var y = this.rows.paneSegment();\n this.left = x.offset;\n this.top = y.offset;\n this.right = x.offset + x.length;\n this.bottom = y.offset + y.length;\n this.style = {\n top: y.offset + 'px',\n left: x.offset + 'px',\n height: y.length + 'px',\n width: x.length + 'px'\n };\n },\n view: function (left, top) {\n var rows = this.rows.visible(top);\n var columns = this.columns.visible(left);\n return {\n rows: rows,\n columns: columns,\n rowOffset: rows.offset,\n columnOffset: columns.offset,\n mergedCellLeft: columns.start,\n mergedCellTop: rows.start,\n ref: new RangeRef(new CellRef(rows.values.start, columns.values.start), new CellRef(rows.values.end, columns.values.end))\n };\n },\n contains: function (ref) {\n return this.rows.contains(ref.topLeft.row, ref.bottomRight.row) && this.columns.contains(ref.topLeft.col, ref.bottomRight.col);\n },\n index: function (row, column) {\n return this._grid.index(row, column);\n },\n boundingRectangle: function (ref) {\n return this._grid.rectangle(ref);\n },\n cellRefIndex: function (ref) {\n return this._grid.cellRefIndex(ref);\n },\n scrollBoundaries: function (cell) {\n var position = this.boundingRectangle(cell);\n var boundaries = {\n top: Math.max(0, position.top - this.top + (this.hasColumnHeader ? 0 : this.headerHeight)),\n left: Math.max(0, position.left - this.left + (this.hasRowHeader ? 0 : this.headerWidth)),\n right: position.right - this.columns._viewSize + this.headerWidth,\n bottom: position.bottom - this.rows._viewSize + this.headerHeight\n };\n var widthCompensation = this.columns.defaultValue / 2;\n var heightCompensation = this.rows.defaultValue / 2;\n boundaries.scrollTop = boundaries.top - heightCompensation;\n boundaries.scrollBottom = boundaries.bottom + heightCompensation;\n boundaries.scrollLeft = boundaries.left - widthCompensation;\n boundaries.scrollRight = boundaries.right + widthCompensation;\n return boundaries;\n }\n });\n kendo.spreadsheet.Grid = Grid;\n kendo.spreadsheet.PaneGrid = PaneGrid;\n kendo.spreadsheet.Rectangle = Rectangle;\n }(kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/axis', ['kendo.core'], f);\n}(function () {\n (function (kendo) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var Axis = kendo.Class.extend({\n init: function (count, value) {\n this._value = value;\n this._count = count;\n this.values = new kendo.spreadsheet.RangeList(0, count - 1, value);\n this._hidden = new kendo.spreadsheet.RangeList(0, count - 1, 0);\n this.scrollBarSize = kendo.support.scrollbar();\n this._refresh();\n },\n adjust: function (start, delta) {\n if (delta < 0) {\n this.values.copy(start - delta, this._count - 1, start);\n this._hidden.copy(start - delta, this._count - 1, start);\n } else {\n this.values.copy(start, this._count, start + delta);\n this._hidden.copy(start, this._count, start + delta);\n this.values.value(start, start + delta - 1, this._value);\n this._hidden.value(start, start + delta - 1, 0);\n }\n this._refresh();\n },\n toJSON: function (field, positions) {\n var values = [];\n var iterator = this.values.iterator(0, this._count - 1);\n for (var idx = 0; idx < this._count; idx++) {\n var value = iterator.at(idx);\n if (value === this._value) {\n continue;\n }\n var position = positions[idx];\n if (position === undefined) {\n position = values.length;\n var item = { index: idx };\n item[field] = value;\n values.push(item);\n positions[idx] = position;\n }\n }\n return values;\n },\n fromJSON: function (field, values) {\n for (var idx = 0; idx < values.length; idx++) {\n var value = values[idx][field];\n var index = values[idx].index;\n if (index === undefined) {\n index = idx;\n }\n this.value(index, index, value);\n }\n },\n hide: function (index) {\n if (!this.hidden(index)) {\n var value = this.value(index, index);\n this._hidden.value(index, index, value);\n this.value(index, index, 0);\n }\n },\n hidden: function (index) {\n return this._hidden.value(index, index) !== 0;\n },\n includesHidden: function (start, end) {\n return this._hidden.intersecting(start, end).length > 1;\n },\n nextVisible: function (index, overflow) {\n var end = this._count - 1;\n if (index === end) {\n return overflow ? index + 1 : index;\n }\n index += 1;\n var range = this._hidden.intersecting(index, index)[0];\n if (range.value !== 0) {\n if (range.end === end) {\n return index - 1;\n } else {\n return range.end + 1;\n }\n } else {\n return index;\n }\n },\n nextPage: function (index, pageSize) {\n return this.index(this.sum(0, index - 1) + pageSize);\n },\n prevPage: function (index, pageSize) {\n return this.index(this.sum(0, index) - pageSize);\n },\n firstVisible: function () {\n var firstHidden = this._hidden.first();\n if (firstHidden.value === 0) {\n return 0;\n } else {\n return firstHidden.end + 1;\n }\n },\n lastVisible: function () {\n var lastHidden = this._hidden.last();\n if (lastHidden.value === 0) {\n return this._count - 1;\n } else {\n return lastHidden.start - 1;\n }\n },\n prevVisible: function (index, overflow) {\n if (index === 0) {\n return overflow ? -1 : 0;\n }\n index -= 1;\n var range = this._hidden.intersecting(index, index)[0];\n if (range.value !== 0) {\n if (range.start === 0) {\n return index + 1;\n } else {\n return range.start - 1;\n }\n } else {\n return index;\n }\n },\n unhide: function (index) {\n if (this.hidden(index)) {\n var value = this._hidden.value(index, index);\n this._hidden.value(index, index, 0);\n this.value(index, index, value);\n }\n },\n value: function (start, end, value) {\n if (value !== undefined) {\n this.values.value(start, end, value);\n this._refresh();\n } else {\n return this.values.iterator(start, end).at(0);\n }\n },\n sum: function (start, end) {\n var values = this.values.iterator(start, end);\n var sum = 0;\n for (var idx = start; idx <= end; idx++) {\n sum += values.at(idx);\n }\n return sum;\n },\n visible: function (start, end) {\n var startSegment = null;\n var endSegment = null;\n var lastPage = false;\n if (end >= this.total + this.scrollBarSize) {\n lastPage = true;\n }\n var ranges = this._pixelValues.intersecting(start, end);\n startSegment = ranges[0];\n endSegment = ranges[ranges.length - 1];\n if (!startSegment) {\n return {\n values: this.values.iterator(0, 0),\n offset: 0\n };\n }\n var startOffset = start - startSegment.start;\n var startIndex = (startOffset / startSegment.value.value >> 0) + startSegment.value.start;\n var offset = startOffset - (startIndex - startSegment.value.start) * startSegment.value.value;\n var endOffset = end - endSegment.start;\n var endIndex = (endOffset / endSegment.value.value >> 0) + endSegment.value.start;\n if (endIndex > endSegment.value.end) {\n endIndex = endSegment.value.end;\n }\n if (lastPage) {\n offset += endSegment.value.value - (endOffset - (endIndex - endSegment.value.start) * endSegment.value.value);\n }\n offset = Math.min(-offset, 0);\n return {\n values: this.values.iterator(startIndex, endIndex),\n offset: offset\n };\n },\n index: function (value) {\n var index = 0;\n var iterator = this.values.iterator(0, this._count - 1);\n var current = iterator.at(0);\n while (current < value && index < this._count - 1) {\n current += iterator.at(++index);\n }\n return index;\n },\n _refresh: function () {\n var current = 0;\n this._pixelValues = this.values.map(function (range) {\n var start = current;\n current += (range.end - range.start + 1) * range.value;\n var end = current - 1;\n return new kendo.spreadsheet.ValueRange(start, end, range);\n });\n this.total = current;\n },\n getState: function () {\n return {\n values: this.values.getState(),\n hidden: this._hidden.getState()\n };\n },\n setState: function (state) {\n this.values.setState(state.values);\n this._hidden.setState(state.hidden);\n this._refresh();\n }\n });\n var PaneAxis = kendo.Class.extend({\n init: function (axis, start, count, headerSize) {\n this._axis = axis;\n this._start = start;\n this._count = count;\n this.hasHeader = start === 0;\n this.headerSize = headerSize;\n this.defaultValue = axis._value;\n this.frozen = count > 0;\n },\n viewSize: function (viewSize) {\n this._viewSize = viewSize;\n },\n sum: function (start, end) {\n return this._axis.sum(start, end - 1);\n },\n start: function () {\n return this.sum(0, this._start);\n },\n size: function () {\n return this.sum(this._start, this._start + this._count);\n },\n index: function (value, offset) {\n return this._axis.index(value + (this.frozen ? 0 : offset) - this.headerSize);\n },\n paneSegment: function () {\n var offset = this.start();\n var length;\n if (!this.hasHeader) {\n offset += this.headerSize;\n }\n if (this.frozen) {\n length = this.size();\n if (this.hasHeader) {\n length += this.headerSize;\n } else {\n length -= this.headerSize;\n }\n } else {\n length = this._viewSize - offset;\n }\n return {\n offset: offset,\n length: length\n };\n },\n visible: function (offset) {\n var start = this.start();\n var size;\n if (this.frozen) {\n size = this.size();\n if (!this.hasHeader) {\n size -= this.headerSize;\n }\n } else {\n size = this._viewSize - start - this.headerSize;\n start += offset;\n }\n var result = this._axis.visible(start, start + size - 1);\n if (this.frozen) {\n result.offset = 0;\n }\n result.start = start;\n if (this.hasHeader) {\n result.offset += this.headerSize;\n result.start -= this.headerSize;\n }\n return result;\n },\n contains: function (start, end) {\n if (this.frozen) {\n if (start > this._start + this._count) {\n return false;\n }\n if (end < this._start) {\n return false;\n }\n return true;\n } else {\n return end >= this._start;\n }\n }\n });\n kendo.spreadsheet.Axis = Axis;\n kendo.spreadsheet.PaneAxis = PaneAxis;\n }(kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/filter', [\n 'kendo.core',\n 'kendo.data'\n ], f);\n}(function () {\n (function (kendo) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var Filter = kendo.spreadsheet.Filter = kendo.Class.extend({\n prepare: function () {\n },\n value: function (cell) {\n return cell.value;\n },\n matches: function () {\n throw new Error('The \\'matches\\' method is not implemented.');\n },\n toJSON: function () {\n throw new Error('The \\'toJSON\\' method is not implemented.');\n }\n });\n Filter.create = function (options) {\n var filter = options.filter;\n if (!filter) {\n throw new Error('Filter type not specified.');\n }\n var constructor = kendo.spreadsheet[filter.charAt(0).toUpperCase() + filter.substring(1) + 'Filter'];\n if (!constructor) {\n throw new Error('Filter type not recognized.');\n }\n return new constructor(options);\n };\n kendo.spreadsheet.ValueFilter = Filter.extend({\n _values: [],\n _dates: [],\n _blanks: false,\n init: function ValueFilter(options) {\n if (options.values !== undefined) {\n this._values = options.values;\n }\n if (options.blanks !== undefined) {\n this._blanks = options.blanks;\n }\n if (options.dates !== undefined) {\n this._dates = options.dates;\n }\n },\n value: function (cell) {\n var value = cell.value;\n if (this._dates.length > 0 && cell.format && typeof value === 'number') {\n var type = kendo.spreadsheet.formatting.type(value, cell.format);\n if (type === 'date') {\n value = kendo.spreadsheet.numberToDate(value);\n }\n }\n return value;\n },\n matches: function (value) {\n if (value === null || value === undefined) {\n return this._blanks;\n }\n if (value instanceof Date) {\n return this._dates.some(function (date) {\n return date.year === value.getFullYear() && (date.month === undefined || date.month === value.getMonth()) && (date.day === undefined || date.day === value.getDate()) && (date.hours === undefined || date.hours === value.getHours()) && (date.minutes === undefined || date.minutes === value.getMinutes()) && (date.seconds === undefined || date.seconds === value.getSeconds());\n });\n }\n return this._values.indexOf(value) >= 0;\n },\n toJSON: function () {\n return {\n filter: 'value',\n blanks: this._blanks,\n values: this._values.slice(0)\n };\n }\n });\n kendo.spreadsheet.CustomFilter = Filter.extend({\n _logic: 'and',\n init: function CustomFilter(options) {\n if (options.logic !== undefined) {\n this._logic = options.logic;\n }\n if (options.criteria === undefined) {\n throw new Error('Must specify criteria.');\n }\n this._criteria = options.criteria;\n var expression = kendo.data.Query.filterExpr({\n logic: this._logic,\n filters: this._criteria\n }).expression;\n this._matches = new Function('d', 'return ' + expression);\n },\n matches: function (value) {\n if (value === null) {\n return false;\n }\n return this._matches(value);\n },\n value: function (cell) {\n var value = cell.value;\n var criterionValue = this._criteria[0].value;\n var criterionType = criterionValue instanceof Date ? 'date' : typeof criterionValue;\n var valueType = typeof value;\n if (cell.format) {\n valueType = kendo.spreadsheet.formatting.type(value, cell.format);\n }\n if (valueType != criterionType) {\n if (criterionType == 'string') {\n if (cell.format) {\n value = kendo.spreadsheet.formatting.text(value, cell.format);\n }\n value = value + '';\n }\n } else if (valueType == 'date') {\n value = kendo.spreadsheet.numberToDate(value);\n }\n return value;\n },\n toJSON: function () {\n return {\n filter: 'custom',\n logic: this._logic,\n criteria: this._criteria\n };\n }\n });\n kendo.spreadsheet.TopFilter = Filter.extend({\n init: function TopFilter(options) {\n this._type = options.type;\n this._value = options.value;\n this._values = [];\n },\n prepare: function (cells) {\n var values = cells.map(this.value).sort().filter(function (value, index, array) {\n return index === 0 || value !== array[index - 1];\n });\n if (this._type === 'topNumber' || this._type == 'topPercent') {\n values.sort(function (x, y) {\n return y - x;\n });\n } else {\n values.sort(function (x, y) {\n return x - y;\n });\n }\n var count = this._value;\n if (this._type === 'topPercent' || this._type === 'bottomPercent') {\n count = values.length * count / 100 >> 0;\n }\n this._values = values.slice(0, count);\n },\n matches: function (value) {\n return this._values.indexOf(value) >= 0;\n },\n toJSON: function () {\n return {\n filter: 'top',\n type: this._type,\n value: this._value\n };\n }\n });\n kendo.spreadsheet.DynamicFilter = Filter.extend({\n init: function DynamicFilter(options) {\n this._type = options.type;\n this._predicate = this[options.type];\n if (typeof this._predicate !== 'function') {\n throw new Error('DynamicFilter type \\'' + options.type + '\\' not recognized.');\n }\n },\n value: function (cell) {\n var value = cell.value;\n if (cell.format) {\n var type = kendo.spreadsheet.formatting.type(value, cell.format);\n if (type === 'date') {\n value = kendo.spreadsheet.numberToDate(value);\n }\n }\n return value;\n },\n prepare: function (cells) {\n var sum = 0;\n var count = 0;\n for (var ci = 0; ci < cells.length; ci++) {\n var value = this.value(cells[ci]);\n if (typeof value === 'number') {\n sum += value;\n count++;\n }\n }\n if (count > 0) {\n this._average = sum / count;\n } else {\n this._average = 0;\n }\n },\n matches: function (value) {\n return this._predicate(value);\n },\n aboveAverage: function (value) {\n if (value instanceof Date) {\n value = kendo.spreadsheet.dateToNumber(value);\n }\n if (typeof value !== 'number') {\n return false;\n }\n return value > this._average;\n },\n belowAverage: function (value) {\n if (value instanceof Date) {\n value = kendo.spreadsheet.dateToNumber(value);\n }\n if (typeof value !== 'number') {\n return false;\n }\n return value < this._average;\n },\n tomorrow: function (value) {\n if (value instanceof Date) {\n var tomorrow = kendo.date.addDays(kendo.date.today(), 1);\n return kendo.date.getDate(value).getTime() === tomorrow.getTime();\n }\n return false;\n },\n today: function (value) {\n if (value instanceof Date) {\n return kendo.date.isToday(value);\n }\n return false;\n },\n yesterday: function (value) {\n if (value instanceof Date) {\n var yesterday = kendo.date.addDays(kendo.date.today(), -1);\n return kendo.date.getDate(value).getTime() === yesterday.getTime();\n }\n return false;\n },\n nextWeek: function (value) {\n return sameWeek(kendo.date.addDays(kendo.date.today(), 7), value);\n },\n thisWeek: function (value) {\n return sameWeek(kendo.date.today(), value);\n },\n lastWeek: function (value) {\n return sameWeek(kendo.date.addDays(kendo.date.today(), -7), value);\n },\n nextMonth: function (value) {\n return sameMonth(value, 1);\n },\n thisMonth: function (value) {\n return sameMonth(value, 0);\n },\n lastMonth: function (value) {\n return sameMonth(value, -1);\n },\n nextQuarter: function (value) {\n if (value instanceof Date) {\n var today = kendo.date.today();\n var diff = quarter(value) - quarter(today);\n return diff === 1 && today.getFullYear() === value.getFullYear() || diff == -3 && today.getFullYear() + 1 === value.getFullYear();\n }\n return false;\n },\n thisQuarter: function (value) {\n if (value instanceof Date) {\n var today = kendo.date.today();\n var diff = quarter(value) - quarter(today);\n return diff === 0 && today.getFullYear() === value.getFullYear();\n }\n return false;\n },\n lastQuarter: function (value) {\n if (value instanceof Date) {\n var today = kendo.date.today();\n var diff = quarter(today) - quarter(value);\n return diff === 1 && today.getFullYear() === value.getFullYear() || diff == -3 && today.getFullYear() - 1 === value.getFullYear();\n }\n return false;\n },\n nextYear: function (value) {\n return sameYear(value, 1);\n },\n thisYear: function (value) {\n return sameYear(value, 0);\n },\n lastYear: function (value) {\n return sameYear(value, -1);\n },\n yearToDate: function (value) {\n if (value instanceof Date) {\n var today = kendo.date.today();\n return value.getFullYear() === today.getFullYear() && value <= today;\n }\n return false;\n },\n toJSON: function () {\n return {\n filter: 'dynamic',\n type: this._type\n };\n }\n });\n [\n 1,\n 2,\n 3,\n 4\n ].forEach(function (target) {\n kendo.spreadsheet.DynamicFilter.prototype['quarter' + target] = function (value) {\n if (value instanceof Date) {\n return quarter(value) === target;\n }\n return false;\n };\n });\n kendo.cultures['en-US'].calendar.months.names.forEach(function (month, index) {\n kendo.spreadsheet.DynamicFilter.prototype[month.toLowerCase()] = function (value) {\n if (value instanceof Date) {\n return value.getMonth() === index;\n }\n return false;\n };\n });\n function quarter(value) {\n var month = value.getMonth() + 1;\n if (month >= 1 && month <= 3) {\n return 1;\n } else if (month >= 4 && month <= 6) {\n return 2;\n } else if (month >= 7 && month <= 9) {\n return 3;\n } else {\n return 4;\n }\n }\n function sameYear(value, offset) {\n if (value instanceof Date) {\n var today = kendo.date.today();\n today.setFullYear(today.getFullYear() + offset);\n return today.getFullYear() === value.getFullYear();\n }\n return false;\n }\n function sameMonth(value, offset) {\n if (value instanceof Date) {\n var today = kendo.date.firstDayOfMonth(kendo.date.today());\n today.setMonth(today.getMonth() + offset, 1);\n return today.getTime() === kendo.date.firstDayOfMonth(value).getTime();\n }\n return false;\n }\n function sameWeek(a, b) {\n if (b instanceof Date) {\n var firstWeek = kendo.date.dayOfWeek(kendo.date.getDate(a), 1);\n var secondWeek = kendo.date.dayOfWeek(kendo.date.getDate(b), 1);\n return firstWeek.getTime() === secondWeek.getTime();\n }\n return false;\n }\n }(kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/sorter', ['kendo.core'], f);\n}(function () {\n (function (kendo) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var Sorter = kendo.Class.extend({\n init: function (grid, lists) {\n this._grid = grid;\n this._lists = lists;\n },\n indices: function (rangeRef, list, ascending, indices) {\n var comparer = Sorter.ascendingComparer;\n if (ascending === false) {\n comparer = Sorter.descendingComparer;\n }\n return list.sortedIndices(this._grid.cellRefIndex(rangeRef.topLeft), this._grid.cellRefIndex(rangeRef.bottomRight), comparer, indices);\n },\n sortBy: function (ref, column, list, ascending, indices) {\n var sortedIndices = this.indices(ref.toColumn(column), list, ascending, indices);\n for (var ci = ref.topLeft.col; ci <= ref.bottomRight.col; ci++) {\n var start = this._grid.index(ref.topLeft.row, ci);\n var end = this._grid.index(ref.bottomRight.row, ci);\n for (var li = 0; li < this._lists.length; li++) {\n if (start < this._lists[li].lastRangeStart()) {\n this._lists[li].sort(start, end, sortedIndices);\n }\n }\n }\n return sortedIndices;\n }\n });\n Sorter.ascendingComparer = function (a, b) {\n if (a === null && b === null) {\n return 0;\n }\n if (a === null) {\n return 1;\n }\n if (b === null) {\n return -1;\n }\n var typeA = typeof a;\n var typeB = typeof b;\n if (typeA === 'number') {\n if (typeB === 'number') {\n return a - b;\n } else {\n return -1;\n }\n }\n if (typeA === 'string') {\n switch (typeB) {\n case 'number':\n return 1;\n case 'string':\n return a.localeCompare(b);\n default:\n return -1;\n }\n }\n if (typeA === 'boolean') {\n switch (typeB) {\n case 'number':\n return 1;\n case 'string':\n return 1;\n case 'boolean':\n return a - b;\n default:\n return -1;\n }\n }\n if (a instanceof kendo.spreadsheet.calc.runtime.CalcError) {\n if (b instanceof kendo.spreadsheet.calc.runtime.CalcError) {\n return 0;\n } else {\n return 1;\n }\n }\n throw new Error('Cannot compare ' + a + ' and ' + b);\n };\n Sorter.descendingComparer = function (a, b) {\n if (a === null && b === null) {\n return 0;\n }\n if (a === null) {\n return 1;\n }\n if (b === null) {\n return -1;\n }\n return Sorter.ascendingComparer(b, a);\n };\n kendo.spreadsheet.Sorter = Sorter;\n }(kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/numformat', [\n 'spreadsheet/calc',\n 'kendo.dom'\n ], f);\n}(function () {\n 'use strict';\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var calc = kendo.spreadsheet.calc;\n var dom = kendo.dom;\n var RX_COLORS = /^\\[(black|green|white|blue|magenta|yellow|cyan|red)\\]/i;\n var RX_CONDITION = /^\\[(<=|>=|<>|<|>|=)(-?[0-9.]+)\\]/;\n function parse(input) {\n input = calc.InputStream(input);\n var sections = [], haveConditional = false, decimalPart;\n while (!input.eof()) {\n var sec = readSection();\n sections.push(sec);\n if (sec.cond) {\n haveConditional = true;\n }\n }\n if (!haveConditional) {\n if (sections.length == 1) {\n sections[0].cond = 'num';\n } else if (sections.length == 2) {\n sections[0].cond = {\n op: '>=',\n value: 0\n };\n sections[1].cond = {\n op: '<',\n value: 0\n };\n } else if (sections.length >= 3) {\n sections[0].cond = {\n op: '>',\n value: 0\n };\n sections[1].cond = {\n op: '<',\n value: 0\n };\n sections[2].cond = {\n op: '=',\n value: 0\n };\n if (sections.length > 3) {\n sections[3].cond = 'text';\n sections = sections.slice(0, 4);\n }\n }\n }\n return sections;\n function maybeColor() {\n var m = input.skip(RX_COLORS);\n if (m) {\n return m[1].toLowerCase();\n }\n }\n function maybeCondition() {\n var m = input.skip(RX_CONDITION);\n if (m) {\n var val = parseFloat(m[2]);\n if (!isNaN(val)) {\n return {\n op: m[1],\n value: val\n };\n }\n }\n }\n function readFormat() {\n var format = [], tok, prev = null;\n while (!input.eof() && (tok = readNext())) {\n if (tok.type == 'date') {\n if (prev && /^(el)?time$/.test(prev.type) && prev.part == 'h' && tok.part == 'm' && tok.format < 3) {\n tok.type = 'time';\n }\n } else if (/^(el)?time$/.test(tok.type) && tok.part == 's') {\n if (prev && prev.type == 'date' && prev.part == 'm' && prev.format < 3) {\n prev.type = 'time';\n }\n }\n if (!/^(?:str|space|fill)$/.test(tok.type)) {\n prev = tok;\n }\n format.push(tok);\n }\n return format;\n }\n function maybeFraction(tok) {\n if (tok.type != 'date' || tok.part == 'm' && tok.format < 3) {\n var m = input.skip(/^\\.(0+)/);\n if (m) {\n tok.fraction = m[1].length;\n if (tok.type == 'date') {\n tok.type = 'time';\n }\n }\n }\n return tok;\n }\n function readNext() {\n var ch, m;\n if (m = input.skip(/^([#0?]+)(?:,([#0?]+))+/)) {\n return {\n type: 'digit',\n sep: true,\n format: m[1] + m[2],\n decimal: decimalPart\n };\n }\n if (m = input.skip(/^[#0?]+/)) {\n return {\n type: 'digit',\n sep: false,\n format: m[0],\n decimal: decimalPart\n };\n }\n if (m = input.skip(/^(e)([+-])/i)) {\n return {\n type: 'exp',\n ch: m[1],\n sign: m[2]\n };\n }\n if (m = input.skip(/^(d{1,4}|m{1,5}|yyyy|yy)/i)) {\n m = m[1].toLowerCase();\n return maybeFraction({\n type: 'date',\n part: m.charAt(0),\n format: m.length\n });\n }\n if (m = input.skip(/^(hh?|ss?)/i)) {\n m = m[1].toLowerCase();\n return maybeFraction({\n type: 'time',\n part: m.charAt(0),\n format: m.length\n });\n }\n if (m = input.skip(/^\\[(hh?|mm?|ss?)\\]/i)) {\n m = m[1].toLowerCase();\n return maybeFraction({\n type: 'eltime',\n part: m.charAt(0),\n format: m.length\n });\n }\n if (m = input.skip(/^(am\\/pm|a\\/p)/i)) {\n m = m[1].split('/');\n return {\n type: 'ampm',\n am: m[0],\n pm: m[1]\n };\n }\n switch (ch = input.next()) {\n case ';':\n return null;\n case '\\\\':\n return {\n type: 'str',\n value: input.next()\n };\n case '\"':\n return {\n type: 'str',\n value: input.readEscaped(ch)\n };\n case '@':\n return { type: 'text' };\n case '_':\n return {\n type: 'space',\n value: input.next()\n };\n case '*':\n return {\n type: 'fill',\n value: input.next()\n };\n case '.':\n if (input.lookingAt(/^\\s*[#0?]/)) {\n decimalPart = true;\n return { type: 'dec' };\n }\n return {\n type: 'str',\n value: '.'\n };\n case '%':\n return { type: 'percent' };\n case ',':\n return { type: 'comma' };\n }\n return {\n type: 'str',\n value: ch\n };\n }\n function readSection() {\n decimalPart = false;\n var color = maybeColor(), cond = maybeCondition();\n if (!color && cond) {\n color = maybeColor();\n }\n return {\n color: color,\n cond: cond,\n body: readFormat()\n };\n }\n }\n function print(sections) {\n return sections.map(printSection).join(';');\n function printSection(sec) {\n var out = '';\n if (sec.color) {\n out += '[' + sec.color + ']';\n }\n if (sec.cond) {\n if (!(sec.cond == 'text' || sec.cond == 'num')) {\n out += '[' + sec.cond.op + sec.cond.value + ']';\n }\n }\n out += sec.body.map(printToken).join('');\n return out;\n }\n function maybeFraction(fmt, tok) {\n if (tok.fraction) {\n fmt += '.' + padLeft('', tok.fraction, '0');\n }\n return fmt;\n }\n function printToken(tok) {\n if (tok.type == 'digit') {\n if (tok.sep) {\n return tok.format.charAt(0) + ',' + tok.format.substr(1);\n } else {\n return tok.format;\n }\n } else if (tok.type == 'exp') {\n return tok.ch + tok.sign;\n } else if (tok.type == 'date' || tok.type == 'time') {\n return maybeFraction(padLeft('', tok.format, tok.part), tok);\n } else if (tok.type == 'eltime') {\n return maybeFraction('[' + padLeft('', tok.format, tok.part) + ']', tok);\n } else if (tok.type == 'ampm') {\n return tok.am + '/' + tok.pm;\n } else if (tok.type == 'str') {\n return JSON.stringify(tok.value);\n } else if (tok.type == 'text') {\n return '@';\n } else if (tok.type == 'space') {\n return '_' + tok.value;\n } else if (tok.type == 'fill') {\n return '*' + tok.value;\n } else if (tok.type == 'dec') {\n return '.';\n } else if (tok.type == 'percent') {\n return '%';\n } else if (tok.type == 'comma') {\n return ',';\n }\n }\n }\n function adjustDecimals(sections, x) {\n sections.forEach(function (sec) {\n var diff = x;\n if (sec.cond == 'text') {\n return;\n }\n var body = sec.body, adjusted = false, i = body.length;\n while (diff !== 0 && --i >= 0) {\n var tok = body[i];\n if (tok.type == 'digit') {\n if (tok.decimal) {\n adjusted = true;\n if (diff > 0) {\n tok.format += padLeft('', diff, '0');\n } else if (diff < 0) {\n var tmp = tok.format.length;\n tok.format = tok.format.substr(0, tmp + diff);\n diff += tmp - tok.format.length;\n }\n if (tok.format.length === 0) {\n body.splice(i, 1);\n while (--i >= 0) {\n tok = body[i];\n if (tok.type == 'digit' && tok.decimal) {\n ++i;\n break;\n }\n if (tok.type == 'dec') {\n body.splice(i, 1);\n break;\n }\n }\n }\n }\n if (diff > 0) {\n break;\n }\n }\n }\n if (!adjusted && diff > 0) {\n body.splice(i + 1, 0, { type: 'dec' }, {\n type: 'digit',\n sep: false,\n decimal: true,\n format: padLeft('', diff, '0')\n });\n }\n });\n }\n function TokenStream(parts) {\n var index = 0;\n return {\n next: function () {\n return parts[index++];\n },\n eof: function () {\n return index >= parts.length;\n },\n ahead: function (n, f) {\n if (index + n <= parts.length) {\n var val = f.apply(null, parts.slice(index, index + n));\n if (val) {\n index += n;\n }\n return val;\n }\n },\n restart: function () {\n index = 0;\n }\n };\n }\n function compileFormatPart(format) {\n var input = TokenStream(format.body);\n var hasDate = false;\n var hasTime = false;\n var hasAmpm = false;\n var percentCount = 0;\n var scaleCount = 0;\n var code = '';\n var separeThousands = false;\n var declen = 0;\n var intFormat = [], decFormat = [];\n var condition = format.cond;\n var preamble = '';\n if (condition == 'text') {\n preamble = 'if (typeof value == \\'string\\' || value instanceof kendo.spreadsheet.CalcError) { ';\n } else if (condition == 'num') {\n preamble = 'if (typeof value == \\'number\\') { ';\n } else if (condition) {\n var op = condition.op == '=' ? '==' : condition.op;\n preamble = 'if (typeof value == \\'number\\' && value ' + op + ' ' + condition.value + ') { ';\n code += 'value = Math.abs(value); ';\n }\n if (format.color) {\n code += 'result.color = ' + JSON.stringify(format.color) + '; ';\n }\n function checkComma(a, b) {\n if (a.type == 'digit' && b.type == 'comma' || a.type == 'comma' && a.hidden && b.type == 'comma') {\n b.hidden = true;\n scaleCount++;\n }\n }\n while (!input.eof()) {\n input.ahead(2, checkComma);\n var tok = input.next();\n if (tok.type == 'percent') {\n percentCount++;\n } else if (tok.type == 'digit') {\n if (tok.decimal) {\n declen += tok.format.length;\n decFormat.push(tok.format);\n } else {\n intFormat.push(tok.format);\n if (tok.sep) {\n separeThousands = true;\n }\n }\n } else if (tok.type == 'time') {\n hasTime = true;\n } else if (tok.type == 'date') {\n hasDate = true;\n } else if (tok.type == 'ampm') {\n hasAmpm = hasTime = true;\n }\n }\n if (percentCount > 0) {\n code += 'value *= ' + Math.pow(100, percentCount) + '; ';\n }\n if (scaleCount > 0) {\n code += 'value /= ' + Math.pow(1000, scaleCount) + '; ';\n }\n if (intFormat.length) {\n code += 'var intPart = runtime.formatInt(culture, value, ' + JSON.stringify(intFormat) + ', ' + declen + ', ' + separeThousands + '); ';\n }\n if (decFormat.length) {\n code += 'var decPart = runtime.formatDec(value, ' + JSON.stringify(decFormat) + ', ' + declen + '); ';\n }\n if (intFormat.length || decFormat.length) {\n code += 'type = \\'number\\'; ';\n }\n if (hasDate) {\n code += 'var date = runtime.unpackDate(value); ';\n }\n if (hasTime) {\n code += 'var time = runtime.unpackTime(value); ';\n }\n if (hasDate || hasTime) {\n code += 'type = \\'date\\'; ';\n }\n if (percentCount > 0 || scaleCount > 0 || intFormat.length || decFormat.length || hasDate || hasTime) {\n if (!preamble) {\n preamble = 'if (typeof value == \\'number\\') { ';\n }\n }\n input.restart();\n while (!input.eof()) {\n var tok = input.next();\n if (tok.type == 'dec') {\n code += 'output += culture.numberFormat[\\'.\\']; ';\n } else if (tok.type == 'comma' && !tok.hidden) {\n code += 'output += \\',\\'; ';\n } else if (tok.type == 'percent') {\n code += 'type = \\'percent\\'; ';\n code += 'output += culture.numberFormat.percent.symbol; ';\n } else if (tok.type == 'str') {\n code += 'output += ' + JSON.stringify(tok.value) + '; ';\n } else if (tok.type == 'text') {\n code += 'type = \\'text\\'; ';\n code += 'output += value; ';\n } else if (tok.type == 'space') {\n code += 'if (output) result.body.push(output); ';\n code += 'output = \\'\\'; ';\n code += 'result.body.push({ type: \\'space\\', value: ' + JSON.stringify(tok.value) + ' }); ';\n } else if (tok.type == 'fill') {\n code += 'output += runtime.fill(' + JSON.stringify(tok.value) + '); ';\n } else if (tok.type == 'digit') {\n code += 'output += ' + (tok.decimal ? 'decPart' : 'intPart') + '.shift(); ';\n } else if (tok.type == 'date') {\n code += 'output += runtime.date(culture, date, ' + JSON.stringify(tok.part) + ', ' + tok.format + '); ';\n } else if (tok.type == 'time') {\n code += 'output += runtime.time(time, ' + JSON.stringify(tok.part) + ', ' + tok.format + ', ' + hasAmpm + ', ' + tok.fraction + '); ';\n } else if (tok.type == 'eltime') {\n code += 'output += runtime.eltime(value, ' + JSON.stringify(tok.part) + ', ' + tok.format + ', ' + tok.fraction + '); ';\n } else if (tok.type == 'ampm') {\n code += 'output += time.hours < 12 ? ' + JSON.stringify(tok.am) + ' : ' + JSON.stringify(tok.pm) + '; ';\n }\n }\n code += 'if (output) result.body.push(output); ';\n code += 'result.type = type; ';\n code += 'return result; ';\n if (preamble) {\n code = preamble + code + '}';\n }\n return code;\n }\n var CACHE = Object.create(null);\n var TEXT = compileFormatPart({\n cond: 'text',\n body: [{ type: 'text' }]\n });\n function compile(format) {\n var f = CACHE[format];\n if (!f) {\n var tree = parse(format);\n var code = tree.map(compileFormatPart);\n code.push(TEXT);\n code = code.join('\\n');\n code = '\\'use strict\\'; return function(value, culture){ ' + 'if (!culture) culture = kendo.culture(); ' + 'var output = \\'\\', type = null, result = { body: [] }; ' + code + '; return result; };';\n f = CACHE[format] = new Function('runtime', code)(runtime);\n }\n return f;\n }\n var runtime = {\n unpackDate: calc.runtime.unpackDate,\n unpackTime: calc.runtime.unpackTime,\n date: function (culture, d, part, length) {\n switch (part) {\n case 'd':\n switch (length) {\n case 1:\n return d.date;\n case 2:\n return padLeft(d.date, 2, '0');\n case 3:\n return culture.calendars.standard.days.namesAbbr[d.day];\n case 4:\n return culture.calendars.standard.days.names[d.day];\n }\n break;\n case 'm':\n switch (length) {\n case 1:\n return d.month + 1;\n case 2:\n return padLeft(d.month + 1, 2, '0');\n case 3:\n return culture.calendars.standard.months.namesAbbr[d.month];\n case 4:\n return culture.calendars.standard.months.names[d.month];\n case 5:\n return culture.calendars.standard.months.names[d.month].charAt(0);\n }\n break;\n case 'y':\n switch (length) {\n case 2:\n return d.year % 100;\n case 4:\n return d.year;\n }\n break;\n }\n return '##';\n },\n time: function (t, part, length, ampm, fraclen) {\n var ret, fraction;\n switch (part) {\n case 'h':\n ret = padLeft(ampm ? t.hours % 12 || 12 : t.hours, length, '0');\n if (fraclen) {\n fraction = (t.minutes + (t.seconds + t.milliseconds / 1000) / 60) / 60;\n }\n break;\n case 'm':\n ret = padLeft(t.minutes, length, '0');\n if (fraclen) {\n fraction = (t.seconds + t.milliseconds / 1000) / 60;\n }\n break;\n case 's':\n ret = padLeft(t.seconds, length, '0');\n if (fraclen) {\n fraction = t.milliseconds / 1000;\n }\n break;\n }\n if (fraction) {\n ret += fraction.toFixed(fraclen).replace(/^0+/, '');\n }\n return ret;\n },\n eltime: function (value, part, length, fraclen) {\n var ret, fraction;\n switch (part) {\n case 'h':\n ret = value * 24;\n break;\n case 'm':\n ret = value * 24 * 60;\n break;\n case 's':\n ret = value * 24 * 60 * 60;\n break;\n }\n if (fraclen) {\n fraction = ret - (ret | 0);\n }\n ret = padLeft(ret | 0, length, '0');\n if (fraction) {\n ret += fraction.toFixed(fraclen).replace(/^0+/, '');\n }\n return ret;\n },\n fill: function (ch) {\n return ch;\n },\n formatInt: function (culture, value, parts, declen, sep) {\n value = value.toFixed(declen).replace(/\\..*$/, '');\n if (declen > 0) {\n if (value === '0') {\n value = '';\n } else if (value === '-0') {\n value = '-';\n }\n }\n var iv = value.length - 1;\n var result = [];\n var len = 0, str;\n function add(ch) {\n if (sep && len && len % 3 === 0 && /^[0-9]$/.test(ch)) {\n str = culture.numberFormat[','] + str;\n }\n str = ch + str;\n len++;\n }\n for (var j = parts.length; --j >= 0;) {\n var format = parts[j];\n str = '';\n for (var k = format.length; --k >= 0;) {\n var chf = format.charAt(k);\n if (iv < 0) {\n if (chf == '0') {\n add('0');\n } else if (chf == '?') {\n add(' ');\n }\n } else {\n add(value.charAt(iv--));\n }\n }\n if (j === 0) {\n while (iv >= 0) {\n add(value.charAt(iv--));\n }\n }\n result.unshift(str);\n }\n return result;\n },\n formatDec: function (value, parts, declen) {\n value = value.toFixed(declen);\n var pos = value.indexOf('.');\n if (pos >= 0) {\n value = value.substr(pos + 1).replace(/0+$/, '');\n } else {\n value = '';\n }\n var iv = 0;\n var result = [];\n for (var j = 0; j < parts.length; ++j) {\n var format = parts[j];\n var str = '';\n for (var k = 0; k < format.length; ++k) {\n var chf = format.charAt(k);\n if (iv < value.length) {\n str += value.charAt(iv++);\n } else if (chf == '0') {\n str += '0';\n } else if (chf == '?') {\n str += ' ';\n }\n }\n result.push(str);\n }\n return result;\n }\n };\n function padLeft(val, width, ch) {\n val += '';\n while (val.length < width) {\n val = ch + val;\n }\n return val;\n }\n function text(f) {\n var a = f.body;\n var text = '';\n for (var i = 0; i < a.length; ++i) {\n var el = a[i];\n if (typeof el == 'string') {\n text += el;\n } else if (el.type == 'space') {\n text += ' ';\n }\n }\n return text;\n }\n kendo.spreadsheet.formatting = {\n compile: compile,\n parse: parse,\n format: function (value, format, culture) {\n var f = compile(format)(value, culture);\n var span = dom.element('span');\n span.__dataType = f.type;\n var a = f.body;\n if (f.color) {\n span.attr.style = { color: f.color };\n }\n for (var i = 0; i < a.length; ++i) {\n var el = a[i];\n if (typeof el == 'string') {\n span.children.push(dom.text(el));\n } else if (el.type == 'space') {\n span.children.push(dom.element('span', { style: { visibility: 'hidden' } }, [dom.text(el.value)]));\n }\n }\n return span;\n },\n text: function (value, format, culture) {\n var f = compile(format)(value, culture);\n return text(f);\n },\n textAndColor: function (value, format, culture) {\n var f = compile(format)(value, culture);\n return {\n text: text(f),\n color: f.color,\n type: f.type\n };\n },\n type: function (value, format) {\n return compile(format)(value).type;\n },\n adjustDecimals: function (format, diff) {\n var ast = parse(format);\n adjustDecimals(ast, diff);\n return print(ast);\n }\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/runtime.functions', [\n 'spreadsheet/runtime',\n 'util/main'\n ], f);\n}(function () {\n 'use strict';\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var util = kendo.util;\n var spreadsheet = kendo.spreadsheet;\n var calc = spreadsheet.calc;\n var runtime = calc.runtime;\n var defineFunction = runtime.defineFunction;\n var defineAlias = runtime.defineAlias;\n var CalcError = runtime.CalcError;\n var RangeRef = spreadsheet.RangeRef;\n var CellRef = spreadsheet.CellRef;\n var UnionRef = spreadsheet.UnionRef;\n var Matrix = runtime.Matrix;\n var Ref = spreadsheet.Ref;\n var daysInMonth = runtime.daysInMonth;\n var packDate = runtime.packDate;\n var unpackDate = runtime.unpackDate;\n var daysInYear = runtime.daysInYear;\n [\n 'abs',\n 'cos',\n 'sin',\n 'acos',\n 'asin',\n 'tan',\n 'atan',\n 'exp',\n 'sqrt'\n ].forEach(function (name) {\n defineFunction(name, Math[name]).args([[\n '*n',\n 'number'\n ]]);\n });\n defineFunction('ln', Math.log).args([[\n '*n',\n 'number'\n ]]);\n defineFunction('log', function (num, base) {\n return Math.log(num) / Math.log(base);\n }).args([\n [\n '*num',\n 'number++'\n ],\n [\n '*base',\n [\n 'or',\n 'number++',\n [\n 'null',\n 10\n ]\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$base != 1',\n 'DIV/0'\n ]\n ]\n ]);\n defineFunction('log10', function (num) {\n return Math.log(num) / Math.log(10);\n }).args([[\n '*num',\n 'number++'\n ]]);\n defineFunction('pi', function () {\n return Math.PI;\n }).args([]);\n defineFunction('sqrtpi', function (n) {\n return Math.sqrt(n * Math.PI);\n }).args([[\n '*num',\n 'number+'\n ]]);\n defineFunction('degrees', function (rad) {\n return 180 * rad / Math.PI % 360;\n }).args([[\n '*radians',\n 'number'\n ]]);\n defineFunction('radians', function (deg) {\n return Math.PI * deg / 180;\n }).args([[\n '*degrees',\n 'number'\n ]]);\n function _cosh(n) {\n return (Math.exp(n) + Math.exp(-n)) / 2;\n }\n defineFunction('cosh', _cosh).args([[\n '*num',\n 'number'\n ]]);\n defineFunction('acosh', function (n) {\n return Math.log(n + Math.sqrt(n - 1) * Math.sqrt(n + 1));\n }).args([\n [\n '*num',\n 'number'\n ],\n [\n '?',\n [\n 'assert',\n '$num >= 1'\n ]\n ]\n ]);\n function _sinh(n) {\n return (Math.exp(n) - Math.exp(-n)) / 2;\n }\n defineFunction('sinh', _sinh).args([[\n '*num',\n 'number'\n ]]);\n defineFunction('asinh', function (n) {\n return Math.log(n + Math.sqrt(n * n + 1));\n }).args([[\n '*num',\n 'number'\n ]]);\n defineFunction('sec', function (n) {\n return 1 / Math.cos(n);\n }).args([[\n '*num',\n 'number'\n ]]);\n defineFunction('sech', function (n) {\n return 1 / _cosh(n);\n }).args([[\n '*num',\n 'number'\n ]]);\n defineFunction('csc', function (n) {\n return 1 / Math.sin(n);\n }).args([[\n '*num',\n 'number'\n ]]);\n defineFunction('csch', function (n) {\n return 1 / _sinh(n);\n }).args([[\n '*num',\n 'number'\n ]]);\n defineFunction('atan2', function (x, y) {\n return Math.atan(y / x);\n }).args([\n [\n '*x',\n 'divisor'\n ],\n [\n '*y',\n 'number'\n ]\n ]);\n function _tanh(n) {\n return _sinh(n) / _cosh(n);\n }\n defineFunction('tanh', _tanh).args([[\n '*num',\n 'number'\n ]]);\n defineFunction('atanh', function (n) {\n return Math.log(Math.sqrt(1 - n * n) / (1 - n));\n }).args([[\n '*num',\n [\n 'and',\n 'number',\n [\n '(between)',\n -1,\n 1\n ]\n ]\n ]]);\n defineFunction('cot', function (n) {\n return 1 / Math.tan(n);\n }).args([[\n '*num',\n 'divisor'\n ]]);\n defineFunction('coth', function (n) {\n return 1 / _tanh(n);\n }).args([[\n '*num',\n 'divisor'\n ]]);\n defineFunction('acot', function (n) {\n return Math.PI / 2 - Math.atan(n);\n }).args([[\n '*num',\n 'number'\n ]]);\n defineFunction('acoth', function (n) {\n return Math.log((n + 1) / (n - 1)) / 2;\n }).args([\n [\n '*num',\n 'number'\n ],\n [\n '?',\n [\n 'or',\n [\n 'assert',\n '$num < -1'\n ],\n [\n 'assert',\n '$num > 1'\n ]\n ]\n ]\n ]);\n defineFunction('power', function (a, b) {\n return Math.pow(a, b);\n }).args([\n [\n '*a',\n 'number'\n ],\n [\n '*b',\n 'number'\n ]\n ]);\n defineFunction('mod', function (a, b) {\n return a % b;\n }).args([\n [\n '*a',\n 'number'\n ],\n [\n '*b',\n 'divisor'\n ]\n ]);\n defineFunction('quotient', function (a, b) {\n return Math.floor(a / b);\n }).args([\n [\n '*a',\n 'number'\n ],\n [\n '*b',\n 'divisor'\n ]\n ]);\n defineFunction('ceiling', function (num, s) {\n return s ? s * Math.ceil(num / s) : 0;\n }).args([\n [\n '*number',\n 'number'\n ],\n [\n '*significance',\n 'number'\n ],\n [\n '?',\n [\n 'assert',\n '$significance >= 0 || $number < 0'\n ]\n ]\n ]);\n defineFunction('ceiling.precise', function (num, s) {\n s = Math.abs(s);\n return s ? s * Math.ceil(num / s) : 0;\n }).args([\n [\n '*number',\n 'number'\n ],\n [\n '*significance',\n [\n 'or',\n 'number',\n [\n 'null',\n 1\n ]\n ]\n ]\n ]);\n defineAlias('iso.ceiling', 'ceiling.precise');\n defineFunction('ceiling.math', function (num, s, mode) {\n if (!s || !num) {\n return 0;\n }\n if (num < 0 && (!mode && s < 0 || mode && s > 0)) {\n s = -s;\n }\n return s ? s * Math.ceil(num / s) : 0;\n }).args([\n [\n '*number',\n 'number'\n ],\n [\n '*significance',\n [\n 'or',\n 'number',\n [\n 'null',\n '$number < 0 ? -1 : 1'\n ]\n ]\n ],\n [\n '*mode',\n [\n 'or',\n 'logical',\n [\n 'null',\n 0\n ]\n ]\n ]\n ]);\n defineFunction('floor', function (num, s) {\n return s ? s * Math.floor(num / s) : 0;\n }).args([\n [\n '*number',\n 'number'\n ],\n [\n '*significance',\n 'number'\n ],\n [\n '?',\n [\n 'assert',\n '$significance >= 0 || $number < 0'\n ]\n ]\n ]);\n defineFunction('floor.precise', function (num, s) {\n s = Math.abs(s);\n return s ? s * Math.floor(num / s) : 0;\n }).args([\n [\n '*number',\n 'number'\n ],\n [\n '*significance',\n [\n 'or',\n 'number',\n [\n 'null',\n 1\n ]\n ]\n ]\n ]);\n defineFunction('floor.math', function (num, s, mode) {\n if (!s || !num) {\n return 0;\n }\n if (num < 0 && (!mode && s < 0 || mode && s > 0)) {\n s = -s;\n }\n return s ? s * Math.floor(num / s) : 0;\n }).args([\n [\n '*number',\n 'number'\n ],\n [\n '*significance',\n [\n 'or',\n 'number',\n [\n 'null',\n '$number < 0 ? -1 : 1'\n ]\n ]\n ],\n [\n '*mode',\n [\n 'or',\n 'logical',\n [\n 'null',\n 0\n ]\n ]\n ]\n ]);\n defineFunction('int', Math.floor).args([[\n '*number',\n 'number'\n ]]);\n defineFunction('mround', function (num, mult) {\n return mult ? mult * Math.round(num / mult) : 0;\n }).args([\n [\n '*number',\n 'number'\n ],\n [\n '*multiple',\n 'number'\n ]\n ]);\n defineFunction('round', function (num, digits) {\n var sign = num < 0 ? -1 : 1;\n if (sign < 0) {\n num = -num;\n }\n digits = Math.pow(10, digits);\n num *= digits;\n num = Math.round(num);\n return sign * num / digits;\n }).args([\n [\n '*number',\n 'number'\n ],\n [\n '*digits',\n 'number'\n ]\n ]);\n defineFunction('roundup', function (num, digits) {\n digits = Math.pow(10, digits);\n num *= digits;\n num = num < 0 ? Math.floor(num) : Math.ceil(num);\n return num / digits;\n }).args([\n [\n '*number',\n 'number'\n ],\n [\n '*digits',\n 'number'\n ]\n ]);\n defineFunction('rounddown', function (num, digits) {\n digits = Math.pow(10, digits);\n num *= digits;\n num = num < 0 ? Math.ceil(num) : Math.floor(num);\n return num / digits;\n }).args([\n [\n '*number',\n 'number'\n ],\n [\n '*digits',\n 'number'\n ]\n ]);\n defineFunction('even', function (num) {\n var n = num < 0 ? Math.floor(num) : Math.ceil(num);\n return n % 2 ? n + (n < 0 ? -1 : 1) : n;\n }).args([[\n '*number',\n 'number'\n ]]);\n defineFunction('odd', function (num) {\n var n = num < 0 ? Math.floor(num) : Math.ceil(num);\n return n % 2 ? n : n + (n < 0 ? -1 : 1);\n }).args([[\n '*number',\n 'number'\n ]]);\n defineFunction('sign', function (num) {\n return num < 0 ? -1 : num > 0 ? 1 : 0;\n }).args([[\n '*number',\n 'number'\n ]]);\n function _gcd(a, b) {\n while (b) {\n var r = a % b;\n a = b;\n b = r;\n }\n return a;\n }\n function _lcm(a, b) {\n return Math.abs(a * b) / _gcd(a, b);\n }\n defineFunction('gcd', function (args) {\n var a = args[0];\n for (var i = 1; i < args.length; ++i) {\n a = _gcd(a, args[i]);\n }\n return a;\n }).args([[\n 'numbers',\n [\n 'collect',\n 'number'\n ]\n ]]);\n defineFunction('lcm', function (args) {\n var a = args[0];\n for (var i = 1; i < args.length; ++i) {\n a = _lcm(a, args[i]);\n }\n return a;\n }).args([[\n 'numbers',\n [\n 'collect',\n 'number'\n ]\n ]]);\n defineFunction('sum', function (numbers) {\n return numbers.reduce(function (sum, num) {\n return sum + num;\n }, 0);\n }).args([[\n 'numbers',\n [\n 'collect',\n 'number'\n ]\n ]]);\n defineFunction('product', function (numbers) {\n return numbers.reduce(function (prod, num) {\n return prod * num;\n }, 1);\n }).args([[\n 'numbers',\n [\n 'collect',\n 'number'\n ]\n ]]);\n defineFunction('sumproduct', function (first, rest) {\n var sum = 0;\n first.each(function (p, row, col) {\n if (typeof p == 'number') {\n for (var i = 0; i < rest.length; ++i) {\n var v = rest[i].get(row, col);\n if (typeof v != 'number') {\n return;\n }\n p *= v;\n }\n sum += p;\n }\n });\n return sum;\n }).args([\n [\n 'a1',\n 'matrix'\n ],\n [\n '+',\n [\n 'a2',\n [\n 'and',\n 'matrix',\n [\n 'assert',\n '$a2.width == $a1.width'\n ],\n [\n 'assert',\n '$a2.height == $a1.height'\n ]\n ]\n ]\n ]\n ]);\n defineFunction('sumsq', function (numbers) {\n return numbers.reduce(function (sum, num) {\n return sum + num * num;\n }, 0);\n }).args([[\n 'numbers',\n [\n 'collect',\n 'number'\n ]\n ]]);\n defineFunction('sumx2my2', function (a, b) {\n var sum = 0;\n a.each(function (x, row, col) {\n var y = b.get(row, col);\n if (typeof x == 'number' && typeof y == 'number') {\n sum += x * x - y * y;\n }\n });\n return sum;\n }).args([\n [\n 'a',\n 'matrix'\n ],\n [\n 'b',\n [\n 'and',\n 'matrix',\n [\n 'assert',\n '$b.width == $a.width'\n ],\n [\n 'assert',\n '$b.height == $a.height'\n ]\n ]\n ]\n ]);\n defineFunction('sumx2py2', function (a, b) {\n var sum = 0;\n a.each(function (x, row, col) {\n var y = b.get(row, col);\n if (typeof x == 'number' && typeof y == 'number') {\n sum += x * x + y * y;\n }\n });\n return sum;\n }).args([\n [\n 'a',\n 'matrix'\n ],\n [\n 'b',\n [\n 'and',\n 'matrix',\n [\n 'assert',\n '$b.width == $a.width'\n ],\n [\n 'assert',\n '$b.height == $a.height'\n ]\n ]\n ]\n ]);\n defineFunction('sumxmy2', function (a, b) {\n var sum = 0;\n a.each(function (x, row, col) {\n var y = b.get(row, col);\n if (typeof x == 'number' && typeof y == 'number') {\n sum += (x - y) * (x - y);\n }\n });\n return sum;\n }).args([\n [\n 'a',\n 'matrix'\n ],\n [\n 'b',\n [\n 'and',\n 'matrix',\n [\n 'assert',\n '$b.width == $a.width'\n ],\n [\n 'assert',\n '$b.height == $a.height'\n ]\n ]\n ]\n ]);\n defineFunction('seriessum', function (x, n, m, a) {\n var sum = 0;\n a.each(function (coef) {\n if (typeof coef != 'number') {\n throw new CalcError('VALUE');\n }\n sum += coef * Math.pow(x, n);\n n += m;\n });\n return sum;\n }).args([\n [\n 'x',\n 'number'\n ],\n [\n 'y',\n 'number'\n ],\n [\n 'm',\n 'number'\n ],\n [\n 'a',\n 'matrix'\n ]\n ]);\n defineFunction('min', function (numbers) {\n return Math.min.apply(Math, numbers);\n }).args([\n [\n 'numbers',\n [\n 'collect',\n 'number'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$numbers.length > 0',\n 'N/A'\n ]\n ]\n ]);\n defineFunction('max', function (numbers) {\n return Math.max.apply(Math, numbers);\n }).args([\n [\n 'numbers',\n [\n 'collect',\n 'number'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$numbers.length > 0',\n 'N/A'\n ]\n ]\n ]);\n defineFunction('counta', function (values) {\n return values.length;\n }).args([[\n 'values',\n [\n '#collect',\n 'anyvalue'\n ]\n ]]);\n defineFunction('count', function (numbers) {\n return numbers.length;\n }).args([[\n 'numbers',\n [\n '#collect',\n 'number'\n ]\n ]]);\n defineFunction('countunique', function (values) {\n var count = 0, seen = [];\n values.forEach(function (val) {\n if (seen.indexOf(val) < 0) {\n count++;\n seen.push(val);\n }\n });\n return count;\n }).args([[\n 'values',\n [\n '#collect',\n 'anyvalue'\n ]\n ]]);\n defineFunction('countblank', function (a) {\n var count = 0;\n function add(val) {\n if (val == null || val === '') {\n count++;\n }\n }\n function loop(args) {\n for (var i = 0; i < args.length; ++i) {\n var x = args[i];\n if (x instanceof Matrix) {\n x.each(add, true);\n } else {\n add(x);\n }\n }\n }\n loop(a);\n return count;\n }).args([[\n '+',\n [\n 'args',\n [\n 'or',\n 'matrix',\n 'anyvalue'\n ]\n ]\n ]]);\n defineFunction('iseven', function (num) {\n return num % 2 === 0;\n }).args([[\n '*number',\n 'number'\n ]]);\n defineFunction('isodd', function (num) {\n return num % 2 !== 0;\n }).args([[\n '*number',\n 'number'\n ]]);\n defineFunction('n', function (val) {\n if (typeof val == 'boolean') {\n return val ? 1 : 0;\n }\n if (typeof val == 'number') {\n return val;\n }\n return 0;\n }).args([[\n '*value',\n 'anyvalue'\n ]]);\n defineFunction('na', function () {\n return new CalcError('N/A');\n }).args([]);\n function forIFS(args, f) {\n var chunks = [], i = 0, matrix = args[0];\n while (i < args.length) {\n chunks.push({\n matrix: args[i++],\n pred: parseCriteria(args[i++])\n });\n }\n ROW:\n for (var row = 0; row < matrix.height; ++row) {\n COL:\n for (var col = 0; col < matrix.width; ++col) {\n for (i = 0; i < chunks.length; ++i) {\n var val = chunks[i].matrix.get(row, col);\n if (!chunks[i].pred(val == null || val === '' ? 0 : val)) {\n continue COL;\n }\n }\n f(row, col);\n }\n }\n }\n var ARGS_COUNTIFS = [\n [\n 'm1',\n 'matrix'\n ],\n [\n 'c1',\n 'anyvalue'\n ],\n [\n [\n 'm2',\n 'matrix'\n ],\n [\n 'c2',\n 'anyvalue'\n ]\n ]\n ];\n defineFunction('countifs', function (m1, c1, rest) {\n var count = 0;\n rest.unshift(m1, c1);\n forIFS(rest, function () {\n count++;\n });\n return count;\n }).args(ARGS_COUNTIFS);\n var ARGS_SUMIFS = [[\n 'range',\n 'matrix'\n ]].concat(ARGS_COUNTIFS);\n defineFunction('sumifs', function (range, m1, c1, args) {\n args.unshift(range, numericPredicate, m1, c1);\n var sum = 0;\n forIFS(args, function (row, col) {\n var val = range.get(row, col);\n if (val) {\n sum += val;\n }\n });\n return sum;\n }).args(ARGS_SUMIFS);\n defineFunction('averageifs', function (range, m1, c1, args) {\n args.unshift(range, numericPredicate, m1, c1);\n var sum = 0, count = 0;\n forIFS(args, function (row, col) {\n var val = range.get(row, col);\n if (val == null || val === '') {\n val = 0;\n }\n sum += val;\n count++;\n });\n return count ? sum / count : new CalcError('DIV/0');\n }).args(ARGS_SUMIFS);\n defineFunction('countif', function (matrix, criteria) {\n criteria = parseCriteria(criteria);\n var count = 0;\n matrix.each(function (val) {\n if (criteria(val)) {\n count++;\n }\n });\n return count;\n }).args([\n [\n 'range',\n 'matrix'\n ],\n [\n '*criteria',\n 'anyvalue'\n ]\n ]);\n var ARGS_SUMIF = [\n [\n 'range',\n 'matrix'\n ],\n [\n '*criteria',\n 'anyvalue'\n ],\n [\n 'sumRange',\n [\n 'or',\n [\n 'and',\n 'matrix',\n [\n 'assert',\n '$sumRange.width == $range.width'\n ],\n [\n 'assert',\n '$sumRange.height == $range.height'\n ]\n ],\n [\n 'null',\n '$range'\n ]\n ]\n ]\n ];\n defineFunction('sumif', function (range, criteria, sumRange) {\n var sum = 0;\n criteria = parseCriteria(criteria);\n range.each(function (val, row, col) {\n if (criteria(val)) {\n var v = sumRange.get(row, col);\n if (numericPredicate(v)) {\n sum += v || 0;\n }\n }\n });\n return sum;\n }).args(ARGS_SUMIF);\n defineFunction('averageif', function (range, criteria, sumRange) {\n var sum = 0, count = 0;\n criteria = parseCriteria(criteria);\n range.each(function (val, row, col) {\n if (criteria(val)) {\n var v = sumRange.get(row, col);\n if (numericPredicate(v)) {\n sum += v || 0;\n count++;\n }\n }\n });\n return count ? sum / count : new CalcError('DIV/0');\n }).args(ARGS_SUMIF);\n (function (def) {\n def('large', function (numbers, nth) {\n return numbers.sort(descending)[nth];\n });\n def('small', function (numbers, nth) {\n return numbers.sort(ascending)[nth];\n });\n }(function (name, handler) {\n defineFunction(name, function (matrix, nth) {\n var numbers = [];\n var error = matrix.each(function (val) {\n if (val instanceof CalcError) {\n return val;\n }\n if (typeof val == 'number') {\n numbers.push(val);\n }\n });\n if (error) {\n return error;\n }\n if (nth > numbers.length) {\n return new CalcError('NUM');\n }\n return handler(numbers, nth - 1);\n }).args([\n [\n 'array',\n 'matrix'\n ],\n [\n '*nth',\n 'number++'\n ]\n ]);\n }));\n function _avg(numbers) {\n return numbers.reduce(function (sum, num) {\n return sum + num;\n }, 0) / numbers.length;\n }\n function _var_sp(numbers, divisor, avg) {\n if (avg == null) {\n avg = _avg(numbers);\n }\n return numbers.reduce(function (sum, num) {\n return sum + Math.pow(num - avg, 2);\n }, 0) / divisor;\n }\n function _stdev_sp(numbers, divisor) {\n return Math.sqrt(_var_sp(numbers, divisor));\n }\n defineFunction('stdev.s', function (numbers) {\n return _stdev_sp(numbers, numbers.length - 1);\n }).args([\n [\n 'numbers',\n [\n 'collect',\n 'number'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$numbers.length >= 2',\n 'NUM'\n ]\n ]\n ]);\n defineFunction('stdev.p', function (numbers) {\n return _stdev_sp(numbers, numbers.length);\n }).args([\n [\n 'numbers',\n [\n 'collect',\n 'number'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$numbers.length >= 2',\n 'NUM'\n ]\n ]\n ]);\n defineFunction('var.s', function (numbers) {\n return _var_sp(numbers, numbers.length - 1);\n }).args([\n [\n 'numbers',\n [\n 'collect',\n 'number'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$numbers.length >= 2',\n 'NUM'\n ]\n ]\n ]);\n defineFunction('var.p', function (numbers) {\n return _var_sp(numbers, numbers.length);\n }).args([\n [\n 'numbers',\n [\n 'collect',\n 'number'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$numbers.length >= 2',\n 'NUM'\n ]\n ]\n ]);\n defineFunction('median', function (numbers) {\n var n = numbers.length;\n numbers.sort(ascending);\n if (n % 2) {\n return numbers[n >> 1];\n }\n return (numbers[n >> 1] + numbers[n >> 1 + 1]) / 2;\n }).args([\n [\n 'numbers',\n [\n 'collect',\n 'number'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$numbers.length > 0',\n 'N/A'\n ]\n ]\n ]);\n defineFunction('mode.sngl', function (numbers) {\n numbers.sort(ascending);\n var prev = null, count = 0, max = 1, mode = null;\n for (var i = 0; i < numbers.length; ++i) {\n var n = numbers[i];\n if (n != prev) {\n count = 1;\n prev = n;\n } else {\n count++;\n }\n if (count > max) {\n max = count;\n mode = n;\n }\n }\n return mode == null ? new CalcError('N/A') : mode;\n }).args([[\n 'numbers',\n [\n 'collect',\n 'number'\n ]\n ]]);\n defineFunction('mode.mult', function (numbers) {\n var seen = Object.create(null), max = 2, res = [];\n numbers.forEach(function (num) {\n var s = seen[num] || 0;\n seen[num] = ++s;\n if (s == max) {\n res.push(num);\n } else if (s > max) {\n max = s;\n res = [num];\n }\n });\n var m = new Matrix(this);\n res.forEach(function (num, i) {\n m.set(i, 0, num);\n });\n return m;\n }).args([[\n 'numbers',\n [\n 'collect',\n 'number'\n ]\n ]]);\n defineFunction('geomean', function (numbers) {\n var n = numbers.length;\n var p = numbers.reduce(function (p, num) {\n if (num < 0) {\n throw new CalcError('NUM');\n }\n return p * num;\n }, 1);\n return Math.pow(p, 1 / n);\n }).args([\n [\n 'numbers',\n [\n 'collect',\n 'number'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$numbers.length > 0',\n 'NUM'\n ]\n ]\n ]);\n defineFunction('harmean', function (numbers) {\n var n = numbers.length;\n var s = numbers.reduce(function (s, num) {\n if (!num) {\n throw new CalcError('DIV/0');\n }\n return s + 1 / num;\n }, 0);\n return n / s;\n }).args([\n [\n 'numbers',\n [\n 'collect',\n 'number'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$numbers.length > 0',\n 'NUM'\n ]\n ]\n ]);\n defineFunction('trimmean', function (numbers, p) {\n var n = numbers.length;\n numbers.sort(ascending);\n var discard = Math.floor(n * p);\n if (discard % 2) {\n --discard;\n }\n discard /= 2;\n var sum = 0;\n for (var i = discard; i < n - discard; ++i) {\n sum += numbers[i];\n }\n return sum / (n - discard * 2);\n }).args([\n [\n 'numbers',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n 'percent',\n [\n 'and',\n 'number',\n [\n '[between)',\n 0,\n 1\n ]\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$numbers.length > 0',\n 'NUM'\n ]\n ]\n ]);\n defineFunction('frequency', function (data, bins) {\n data.sort(ascending);\n bins.sort(ascending);\n var prev = -Infinity;\n var i = 0;\n function count(max) {\n var n = 0;\n while (i < data.length && data[i] > prev && data[i] <= max) {\n ++n;\n ++i;\n }\n return n;\n }\n var m = new Matrix(this);\n bins.forEach(function (val, i) {\n var n = count(val);\n prev = val;\n m.set(i, 0, n);\n });\n m.set(m.height, 0, data.length - i);\n return m;\n }).args([\n [\n 'data',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n 'bins',\n [\n 'collect',\n 'number',\n 1\n ]\n ]\n ]);\n defineFunction('rank.eq', function (val, numbers, asc) {\n numbers.sort(asc ? ascending : descending);\n var pos = numbers.indexOf(val);\n return pos < 0 ? new CalcError('N/A') : pos + 1;\n }).args([\n [\n 'value',\n 'number'\n ],\n [\n 'numbers',\n [\n 'collect',\n 'number'\n ]\n ],\n [\n 'order',\n [\n 'or',\n 'logical',\n [\n 'null',\n false\n ]\n ]\n ]\n ]);\n defineAlias('rank', 'rank.eq');\n defineFunction('rank.avg', function (val, numbers, asc) {\n numbers.sort(asc ? ascending : descending);\n var pos = numbers.indexOf(val);\n if (pos < 0) {\n return new CalcError('N/A');\n }\n for (var i = pos; numbers[i] == val; ++i) {\n }\n return (pos + i + 1) / 2;\n }).args([\n [\n 'value',\n 'number'\n ],\n [\n 'numbers',\n [\n 'collect',\n 'number'\n ]\n ],\n [\n 'order',\n [\n 'or',\n 'logical',\n [\n 'null',\n false\n ]\n ]\n ]\n ]);\n defineFunction('kurt', function (numbers) {\n var n = numbers.length;\n var avg = _avg(numbers);\n var variance = _var_sp(numbers, n - 1, avg);\n var stddev = Math.sqrt(variance);\n var sum = numbers.reduce(function (sum, num) {\n return sum + Math.pow((num - avg) / stddev, 4);\n }, 0);\n return n * (n + 1) / ((n - 1) * (n - 2) * (n - 3)) * sum - 3 * Math.pow(n - 1, 2) / ((n - 2) * (n - 3));\n }).args([\n [\n 'numbers',\n [\n 'collect',\n 'number'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$numbers.length >= 4',\n 'NUM'\n ]\n ]\n ]);\n function _percentrank(numbers, x, exc) {\n var nlt = 0, ngt = 0, left = null, right = null, found = false;\n numbers.forEach(function (num) {\n if (num < x) {\n nlt++;\n left = left == null ? num : Math.max(left, num);\n } else if (num > x) {\n ngt++;\n right = right == null ? num : Math.min(right, num);\n } else {\n found = true;\n }\n });\n if (!nlt && !ngt) {\n return new CalcError('N/A');\n }\n if (found) {\n if (exc) {\n return (nlt + 1) / (numbers.length + 1);\n }\n return nlt / (nlt + ngt);\n }\n return ((right - x) * _percentrank(numbers, left, exc) + (x - left) * _percentrank(numbers, right, exc)) / (right - left);\n }\n var ARGS_PERCENTRANK = [\n [\n 'array',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n 'x',\n 'number'\n ],\n [\n 'significance',\n [\n 'or',\n [\n 'null',\n 3\n ],\n 'integer++'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$array.length > 0',\n 'NUM'\n ]\n ]\n ];\n defineFunction('percentrank.inc', function (numbers, x, significance) {\n var p = _percentrank(numbers, x, 0);\n p = p.toFixed(significance + 1);\n return parseFloat(p.substr(0, p.length - 1));\n }).args(ARGS_PERCENTRANK);\n defineFunction('percentrank.exc', function (numbers, x, significance) {\n var p = _percentrank(numbers, x, 1);\n p = p.toFixed(significance + 1);\n return parseFloat(p.substr(0, p.length - 1));\n }).args(ARGS_PERCENTRANK);\n defineAlias('percentrank', 'percentrank.inc');\n function _covariance(x, y, divisor) {\n var sum = 0;\n var ax = _avg(x);\n var ay = _avg(y);\n var n = x.length;\n for (var i = 0; i < n; ++i) {\n sum += (x[i] - ax) * (y[i] - ay);\n }\n return sum / divisor;\n }\n defineFunction('covariance.p', function (x, y) {\n return _covariance(x, y, x.length);\n }).args([\n [\n 'array1',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n 'array2',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$array1.length == $array2.length',\n 'N/A'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$array1.length > 0',\n 'DIV/0'\n ]\n ]\n ]);\n defineFunction('covariance.s', function (x, y) {\n return _covariance(x, y, x.length - 1);\n }).args([\n [\n 'array1',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n 'array2',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$array1.length == $array2.length',\n 'N/A'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$array1.length > 1',\n 'DIV/0'\n ]\n ]\n ]);\n defineAlias('covar', 'covariance.p');\n var _fact = util.memoize(function (n) {\n for (var i = 2, fact = 1; i <= n; ++i) {\n fact *= i;\n }\n return fact;\n });\n defineFunction('fact', _fact).args([[\n '*n',\n 'integer+'\n ]]);\n defineFunction('factdouble', function (n) {\n for (var i = 2 + (n & 1), fact = 1; i <= n; i += 2) {\n fact *= i;\n }\n return fact;\n }).args([[\n '*n',\n 'integer+'\n ]]);\n defineFunction('multinomial', function (numbers) {\n var div = 1, sum = 0;\n numbers.forEach(function (n) {\n if (n < 0) {\n throw new CalcError('NUM');\n }\n sum += n;\n div *= _fact(n);\n });\n return _fact(sum) / div;\n }).args([[\n 'numbers',\n [\n 'collect',\n 'number'\n ]\n ]]);\n var _combinations = util.memoize(function (n, k) {\n for (var f1 = k + 1, f2 = 1, p1 = 1, p2 = 1; f2 <= n - k; ++f1, ++f2) {\n p1 *= f1;\n p2 *= f2;\n }\n return p1 / p2;\n });\n defineFunction('combin', _combinations).args([\n [\n '*n',\n 'integer++'\n ],\n [\n '*k',\n [\n 'and',\n 'integer',\n [\n '[between]',\n 0,\n '$n'\n ]\n ]\n ]\n ]);\n defineFunction('combina', function (n, k) {\n return _combinations(n + k - 1, n - 1);\n }).args([\n [\n '*n',\n 'integer++'\n ],\n [\n '*k',\n [\n 'and',\n 'integer',\n [\n '[between]',\n 1,\n '$n'\n ]\n ]\n ]\n ]);\n defineFunction('average', function (numbers) {\n var sum = numbers.reduce(function (sum, num) {\n return sum + num;\n }, 0);\n return sum / numbers.length;\n }).args([\n [\n 'numbers',\n [\n 'collect',\n [\n 'and',\n 'number',\n [\n 'not',\n 'boolean'\n ]\n ]\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$numbers.length > 0',\n 'DIV/0'\n ]\n ]\n ]);\n defineFunction('averagea', function (values) {\n var sum = 0, count = 0;\n values.forEach(function (num) {\n if (typeof num != 'string') {\n sum += num;\n }\n ++count;\n });\n return count ? sum / count : new CalcError('DIV/0');\n }).args([[\n 'values',\n [\n 'collect',\n 'anyvalue'\n ]\n ]]);\n function _percentile(numbers, rank) {\n numbers.sort(ascending);\n var n = numbers.length;\n var k = rank | 0, d = rank - k;\n if (k === 0) {\n return numbers[0];\n }\n if (k >= n) {\n return numbers[n - 1];\n }\n --k;\n return numbers[k] + d * (numbers[k + 1] - numbers[k]);\n }\n function _percentile_inc(numbers, p) {\n var rank = p * (numbers.length - 1) + 1;\n return _percentile(numbers, rank);\n }\n function _percentile_exc(numbers, p) {\n var rank = p * (numbers.length + 1);\n return _percentile(numbers, rank);\n }\n defineFunction('percentile.inc', _percentile_inc).args([\n [\n 'numbers',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n 'p',\n [\n 'and',\n 'number',\n [\n '[between]',\n 0,\n 1\n ]\n ]\n ]\n ]);\n defineFunction('percentile.exc', _percentile_exc).args([\n [\n 'numbers',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n 'p',\n [\n 'and',\n 'number',\n [\n '(between)',\n 0,\n 1\n ]\n ]\n ]\n ]);\n defineFunction('quartile.inc', function (numbers, quarter) {\n return _percentile_inc(numbers, quarter / 4);\n }).args([\n [\n 'numbers',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n 'quarter',\n [\n 'values',\n 0,\n 1,\n 2,\n 3,\n 4\n ]\n ]\n ]);\n defineFunction('quartile.exc', function (numbers, quarter) {\n return _percentile_exc(numbers, quarter / 4);\n }).args([\n [\n 'numbers',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n 'quarter',\n [\n 'values',\n 0,\n 1,\n 2,\n 3,\n 4\n ]\n ]\n ]);\n defineAlias('quartile', 'quartile.inc');\n defineAlias('percentile', 'percentile.inc');\n var AGGREGATE_FUNCS = [\n 'AVERAGE',\n 'COUNT',\n 'COUNTA',\n 'MAX',\n 'MIN',\n 'PRODUCT',\n 'STDEV.S',\n 'STDEV.P',\n 'SUM',\n 'VAR.S',\n 'VAR.P',\n 'MEDIAN',\n 'MODE.SNGL',\n 'LARGE',\n 'SMALL',\n 'PERCENTILE.INC',\n 'QUARTILE.INC',\n 'PERCENTILE.EXC',\n 'QUARTILE.EXC'\n ];\n function fetchValuesForAggregate(self, args, options) {\n var values = [];\n var opt_ignore_hidden_rows = 1;\n var opt_ignore_errors = 2;\n var opt_use_aggregates = 4;\n (function fetchValues(args) {\n if (args instanceof Ref) {\n self.getRefCells(args, true).forEach(function (cell) {\n var value = cell.value;\n if (options & opt_ignore_hidden_rows && cell.hidden) {\n return;\n }\n if (cell.formula) {\n var str = cell.formula.print(cell.row, cell.col);\n if (/^\\s*(?:aggregate|subtotal)\\s*\\(/i.test(str)) {\n if (!(options & opt_use_aggregates)) {\n return;\n }\n }\n if ('value' in cell.formula) {\n value = cell.formula.value;\n }\n }\n if (options & opt_ignore_errors && value instanceof CalcError) {\n return;\n }\n if (typeof value == 'number' || value instanceof CalcError) {\n values.push(value);\n }\n });\n } else if (Array.isArray(args)) {\n for (var i = 0; i < args.length; ++i) {\n fetchValues(args[i]);\n }\n } else if (args instanceof Matrix) {\n args.each(fetchValues);\n } else if (typeof args == 'number') {\n values.push(args);\n } else if (args instanceof CalcError && !(options & opt_ignore_errors)) {\n values.push(args);\n }\n }(args));\n return values;\n }\n defineFunction('aggregate', function (callback, funcId, options, args) {\n var self = this;\n self.resolveCells(args, function () {\n var values;\n if (funcId > 12) {\n values = fetchValuesForAggregate(self, args[0], options);\n var k = args[1];\n if (k instanceof CellRef) {\n k = self.getRefData(k);\n }\n if (typeof k != 'number') {\n return callback(new CalcError('VALUE'));\n }\n } else {\n values = fetchValuesForAggregate(self, args, options);\n }\n self.func(AGGREGATE_FUNCS[funcId - 1], callback, values);\n });\n }).argsAsync([\n [\n 'funcId',\n [\n 'values',\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 18,\n 19\n ]\n ],\n [\n 'options',\n [\n 'or',\n [\n 'null',\n 0\n ],\n [\n 'values',\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7\n ]\n ]\n ],\n [\n 'args',\n 'rest'\n ]\n ]);\n defineFunction('subtotal', function (callback, funcId) {\n var self = this;\n var ignoreHidden = funcId > 100;\n if (ignoreHidden) {\n funcId -= 100;\n }\n var args = [];\n for (var i = 2; i < arguments.length; ++i) {\n args.push(arguments[i]);\n }\n self.resolveCells(args, function () {\n var values = fetchValuesForAggregate(self, args, ignoreHidden ? 1 : 0);\n self.func(AGGREGATE_FUNCS[funcId - 1], callback, values);\n });\n }).argsAsync([\n [\n 'funcId',\n [\n 'values',\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 101,\n 102,\n 103,\n 104,\n 105,\n 106,\n 107,\n 108,\n 109,\n 110,\n 111\n ]\n ],\n [\n '+',\n [\n 'ref',\n [\n 'or',\n 'ref',\n '#matrix'\n ]\n ]\n ]\n ]);\n defineFunction('avedev', function (numbers) {\n var avg = numbers.reduce(function (sum, num) {\n return sum + num;\n }, 0) / numbers.length;\n return numbers.reduce(function (sum, num) {\n return sum + Math.abs(num - avg);\n }, 0) / numbers.length;\n }).args([\n [\n 'numbers',\n [\n 'collect',\n 'number'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$numbers.length >= 2',\n 'NUM'\n ]\n ]\n ]);\n function _binom_dist(x, n, p, cumulative) {\n if (!cumulative) {\n return _combinations(n, x) * Math.pow(p, x) * Math.pow(1 - p, n - x);\n } else {\n var sum = 0;\n for (var j = 0; j <= x; ++j) {\n sum += _combinations(n, j) * Math.pow(p, j) * Math.pow(1 - p, n - j);\n }\n return sum;\n }\n }\n defineFunction('binom.dist', _binom_dist).args([\n [\n 'successes',\n 'integer+'\n ],\n [\n 'trials',\n [\n 'and',\n 'integer',\n [\n 'assert',\n '$trials >= $successes'\n ]\n ]\n ],\n [\n 'probability',\n [\n 'and',\n 'number',\n [\n '[between]',\n 0,\n 1\n ]\n ]\n ],\n [\n 'cumulative',\n 'logical'\n ]\n ]);\n defineAlias('binomdist', 'binom.dist');\n defineFunction('binom.inv', function (n, p, alpha) {\n for (var x = 0; x <= n; ++x) {\n if (_binom_dist(x, n, p, true) >= alpha) {\n return x;\n }\n }\n return new CalcError('N/A');\n }).args([\n [\n 'trials',\n 'integer+'\n ],\n [\n 'probability',\n [\n 'and',\n 'number',\n [\n '[between]',\n 0,\n 1\n ]\n ]\n ],\n [\n 'alpha',\n [\n 'and',\n 'number',\n [\n '[between]',\n 0,\n 1\n ]\n ]\n ]\n ]);\n defineAlias('critbinom', 'binom.inv');\n defineFunction('binom.dist.range', function (n, p, s, s2) {\n var sum = 0;\n for (var k = s; k <= s2; ++k) {\n sum += _combinations(n, k) * Math.pow(p, k) * Math.pow(1 - p, n - k);\n }\n return sum;\n }).args([\n [\n 'trials',\n 'integer+'\n ],\n [\n 'probability',\n [\n 'and',\n 'number',\n [\n '[between]',\n 0,\n 1\n ]\n ]\n ],\n [\n 'successes_min',\n [\n 'and',\n 'integer',\n [\n '[between]',\n 0,\n '$trials'\n ]\n ]\n ],\n [\n 'successes_max',\n [\n 'or',\n [\n 'and',\n 'integer',\n [\n '[between]',\n '$successes_min',\n '$trials'\n ]\n ],\n [\n 'null',\n '$successes_min'\n ]\n ]\n ]\n ]);\n defineFunction('negbinom.dist', function (x, k, p, cumulative) {\n if (cumulative) {\n var sum = 0;\n while (x >= 0) {\n sum += _combinations(x + k - 1, x) * Math.pow(p, k) * Math.pow(1 - p, x);\n x--;\n }\n return sum;\n }\n return _combinations(x + k - 1, x) * Math.pow(p, k) * Math.pow(1 - p, x);\n }).args([\n [\n 'number_f',\n 'integer+'\n ],\n [\n 'number_s',\n 'integer+'\n ],\n [\n 'probability_s',\n [\n 'and',\n 'number',\n [\n '[between]',\n 0,\n 1\n ]\n ]\n ],\n [\n 'cumulative',\n 'logical'\n ]\n ]);\n defineAlias('negbinomdist', 'negbinom.dist');\n defineFunction('address', function (row, col, abs, a1, sheet) {\n var cell = new CellRef(row - 1, col - 1, abs - 1);\n if (sheet) {\n cell.setSheet(sheet, true);\n }\n return a1 ? cell.print(0, 0) : cell.print();\n }).args([\n [\n 'row',\n 'integer++'\n ],\n [\n 'col',\n 'integer++'\n ],\n [\n 'abs',\n [\n 'or',\n [\n 'null',\n 1\n ],\n [\n 'values',\n 1,\n 2,\n 3,\n 4\n ]\n ]\n ],\n [\n 'a1',\n [\n 'or',\n [\n 'null',\n true\n ],\n 'logical'\n ]\n ],\n [\n 'sheet',\n [\n 'or',\n 'null',\n 'string'\n ]\n ]\n ]);\n defineFunction('areas', function (ref) {\n var count = 0;\n (function loop(x) {\n if (x instanceof CellRef || x instanceof RangeRef) {\n count++;\n } else if (x instanceof UnionRef) {\n x.refs.forEach(loop);\n }\n }(ref));\n return count;\n }).args([[\n 'ref',\n 'ref'\n ]]);\n defineFunction('choose', function (index, args) {\n if (index > args.length) {\n return new CalcError('N/A');\n } else {\n return args[index - 1];\n }\n }).args([\n [\n '*index',\n 'integer'\n ],\n [\n '+',\n [\n 'value',\n 'anything'\n ]\n ]\n ]);\n defineFunction('column', function (ref) {\n if (!ref) {\n return this.formula.col + 1;\n }\n if (ref instanceof CellRef) {\n return ref.col + 1;\n }\n return this.asMatrix(ref).mapCol(function (col) {\n return col + ref.topLeft.col + 1;\n });\n }).args([[\n 'ref',\n [\n 'or',\n 'area',\n 'null'\n ]\n ]]);\n defineFunction('columns', function (m) {\n return m instanceof Ref ? m.width() : m.width;\n }).args([[\n 'ref',\n [\n 'or',\n 'area',\n '#matrix'\n ]\n ]]);\n defineFunction('formulatext', function (ref) {\n var cell = this.getRefCells(ref)[0];\n if (!cell.formula) {\n return new CalcError('N/A');\n }\n return cell.formula.print(cell.row, cell.col);\n }).args([[\n 'ref',\n 'ref'\n ]]);\n defineFunction('hlookup', function (value, m, row, approx) {\n var resultCol = null;\n m.eachCol(function (col) {\n var data = m.get(0, col);\n if (approx) {\n if (data > value) {\n return true;\n }\n resultCol = col;\n } else if (data === value) {\n resultCol = col;\n return true;\n }\n });\n if (resultCol == null) {\n return new CalcError('N/A');\n }\n return m.get(row - 1, resultCol);\n }).args([\n [\n 'value',\n 'anyvalue'\n ],\n [\n 'range',\n 'matrix'\n ],\n [\n 'row',\n 'integer++'\n ],\n [\n 'approx',\n [\n 'or',\n 'logical',\n [\n 'null',\n true\n ]\n ]\n ]\n ]);\n defineFunction('index', function (callback, ref, row, col, areanum) {\n var self = this;\n if (ref instanceof UnionRef) {\n ref = ref.refs[areanum - 1];\n }\n if (!row && !col || !ref) {\n return callback(new CalcError('N/A'));\n }\n if (ref instanceof CellRef) {\n ref = ref.toRangeRef();\n }\n if (ref instanceof RangeRef) {\n if (row && col) {\n if (col > ref.width() || row > ref.height()) {\n return callback(new CalcError('REF'));\n }\n var cell = ref.toCell(row - 1, col - 1);\n self.resolveCells([cell], function () {\n callback(self.getRefData(cell));\n });\n return;\n }\n if (!row) {\n var colRange = ref.toColumn(col - 1);\n self.resolveCells([colRange], function () {\n callback(self.asMatrix(colRange));\n });\n return;\n }\n if (!col) {\n var rowRange = ref.toRow(row - 1);\n self.resolveCells([rowRange], function () {\n callback(self.asMatrix(rowRange));\n });\n return;\n }\n } else if (ref instanceof Matrix) {\n if (ref.width > 1 && ref.height > 1) {\n if (row && col) {\n return callback(ref.get(row - 1, col - 1));\n }\n if (!row) {\n return callback(ref.mapRow(function (row) {\n return ref.get(row, col - 1);\n }));\n }\n if (!col) {\n return callback(ref.mapCol(function (col) {\n return ref.get(row - 1, col);\n }));\n }\n }\n if (ref.width == 1) {\n return callback(ref.get(row - 1, 0));\n }\n if (ref.height == 1) {\n return callback(ref.get(0, col - 1));\n }\n } else {\n callback(new CalcError('REF'));\n }\n }).argsAsync([\n [\n 'range',\n [\n 'or',\n 'ref',\n 'matrix'\n ]\n ],\n [\n 'row',\n [\n 'or',\n 'integer+',\n 'null'\n ]\n ],\n [\n 'col',\n [\n 'or',\n 'integer+',\n 'null'\n ]\n ],\n [\n 'areanum',\n [\n 'or',\n 'integer++',\n [\n 'null',\n 1\n ]\n ]\n ]\n ]);\n defineFunction('indirect', function (thing) {\n try {\n var f = this.formula;\n var exp = calc.parseFormula(f.sheet, f.row, f.col, thing);\n if (!(exp.ast instanceof Ref)) {\n throw 1;\n }\n return exp.ast.absolute(f.row, f.col);\n } catch (ex) {\n return new CalcError('REF');\n }\n }).args([[\n 'thing',\n 'string'\n ]]);\n defineFunction('match', function (val, m, type) {\n var index = 1, cmp;\n if (type === 0) {\n cmp = parseCriteria(val);\n } else if (type === -1) {\n cmp = parseCriteria('<=' + val);\n } else if (type === 1) {\n cmp = parseCriteria('>=' + val);\n }\n if (m.each(function (el) {\n if (el != null && cmp(el)) {\n if (type !== 0 && val != el) {\n --index;\n }\n return true;\n }\n index++;\n }, true) && index > 0) {\n return index;\n } else {\n return new CalcError('N/A');\n }\n }).args([\n [\n 'value',\n 'anyvalue'\n ],\n [\n 'range',\n 'matrix'\n ],\n [\n 'type',\n [\n 'or',\n [\n 'values',\n -1,\n 0,\n 1\n ],\n [\n 'null',\n 1\n ]\n ]\n ]\n ]);\n defineFunction('offset', function (ref, rows, cols, height, width) {\n var topLeft = (ref instanceof CellRef ? ref : ref.topLeft).clone();\n topLeft.row += rows;\n topLeft.col += cols;\n if (topLeft.row < 0 || topLeft.col < 0) {\n return new CalcError('VALUE');\n }\n if (height > 1 || width > 1) {\n return new RangeRef(topLeft, new CellRef(topLeft.row + height - 1, topLeft.col + width - 1)).setSheet(ref.sheet, ref.hasSheet());\n }\n return topLeft;\n }).args([\n [\n 'ref',\n 'area'\n ],\n [\n '*rows',\n 'integer'\n ],\n [\n '*cols',\n 'integer'\n ],\n [\n '*height',\n [\n 'or',\n 'integer++',\n [\n 'null',\n '$ref.height()'\n ]\n ]\n ],\n [\n '*width',\n [\n 'or',\n 'integer++',\n [\n 'null',\n '$ref.width()'\n ]\n ]\n ]\n ]);\n defineFunction('row', function (ref) {\n if (!ref) {\n return this.formula.row + 1;\n }\n if (ref instanceof CellRef) {\n return ref.row + 1;\n }\n return this.asMatrix(ref).mapRow(function (row) {\n return row + ref.topLeft.row + 1;\n });\n }).args([[\n 'ref',\n [\n 'or',\n 'area',\n 'null'\n ]\n ]]);\n defineFunction('rows', function (m) {\n return m instanceof Ref ? m.height() : m.height;\n }).args([[\n 'ref',\n [\n 'or',\n 'area',\n '#matrix'\n ]\n ]]);\n defineFunction('vlookup', function (value, m, col, approx) {\n var resultRow = null;\n if (typeof value != 'number') {\n approx = false;\n }\n if (typeof value == 'string') {\n value = value.toLowerCase();\n }\n m.eachRow(function (row) {\n var data = m.get(row, 0);\n if (approx) {\n if (data > value) {\n return true;\n }\n resultRow = row;\n } else {\n if (typeof data == 'string') {\n data = data.toLowerCase();\n }\n if (data === value) {\n resultRow = row;\n return true;\n }\n }\n });\n if (resultRow == null) {\n return new CalcError('N/A');\n }\n return m.get(resultRow, col - 1);\n }).args([\n [\n 'value',\n 'anyvalue'\n ],\n [\n 'range',\n 'matrix'\n ],\n [\n 'col',\n 'integer++'\n ],\n [\n 'approx',\n [\n 'or',\n 'logical',\n [\n 'null',\n true\n ]\n ]\n ]\n ]);\n defineFunction('date', function (year, month, date) {\n return packDate(year, month - 1, date);\n }).args([\n [\n '*year',\n 'integer'\n ],\n [\n '*month',\n 'integer'\n ],\n [\n '*date',\n 'integer'\n ]\n ]);\n defineFunction('day', function (date) {\n return unpackDate(date).date;\n }).args([[\n '*date',\n 'date'\n ]]);\n defineFunction('month', function (date) {\n return unpackDate(date).month + 1;\n }).args([[\n '*date',\n 'date'\n ]]);\n defineFunction('year', function (date) {\n return unpackDate(date).year;\n }).args([[\n '*date',\n 'date'\n ]]);\n defineFunction('weekday', function (date) {\n return unpackDate(date).day + 1;\n }).args([[\n '*date',\n 'date'\n ]]);\n defineFunction('weeknum', function (date, type) {\n var fw = packDate(unpackDate(date).year, 0, 1);\n var sy = unpackDate(fw);\n var diff;\n if (type == 21) {\n diff = 3 - (sy.day + 6) % 7;\n if (diff < 0) {\n diff += 7;\n }\n fw += diff;\n sy.date += diff;\n sy.day = 4;\n type = 1;\n } else {\n if (type == 1) {\n type = 0;\n } else if (type == 2) {\n type = 1;\n } else {\n type = (type - 10) % 7;\n }\n }\n diff = sy.day - type;\n if (diff < 0) {\n diff += 7;\n }\n fw -= diff;\n return Math.ceil((date + 1 - fw) / 7);\n }).args([\n [\n '*date',\n 'date'\n ],\n [\n '*type',\n [\n 'or',\n [\n 'null',\n 1\n ],\n [\n 'values',\n 1,\n 2,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 21\n ]\n ]\n ]\n ]);\n function weeksInYear(year) {\n var d = unpackDate(packDate(year, 0, 1));\n if (d.day == 4 || d.day == 3 && runtime.isLeapYear(year)) {\n return 53;\n }\n return 52;\n }\n defineFunction('isoweeknum', function isoweeknum(date) {\n var d = unpackDate(date);\n var dow = d.day || 7;\n var wk = Math.floor((d.ord - dow + 10) / 7);\n if (wk < 1) {\n return weeksInYear(d.year - 1);\n } else if (wk == 53 && wk > weeksInYear(d.year)) {\n return 1;\n }\n return wk;\n }).args([[\n '*date',\n 'date'\n ]]);\n defineFunction('now', function () {\n return runtime.dateToSerial(new Date());\n }).args([]);\n defineFunction('today', function () {\n return runtime.dateToSerial(new Date()) | 0;\n }).args([]);\n defineFunction('time', function (hh, mm, ss) {\n return runtime.packTime(hh, mm, ss, 0);\n }).args([\n [\n '*hours',\n 'integer'\n ],\n [\n '*minutes',\n 'integer'\n ],\n [\n '*seconds',\n 'integer'\n ]\n ]);\n defineFunction('hour', function (time) {\n return runtime.unpackTime(time).hours;\n }).args([[\n '*time',\n 'datetime'\n ]]);\n defineFunction('minute', function (time) {\n return runtime.unpackTime(time).minutes;\n }).args([[\n '*time',\n 'datetime'\n ]]);\n defineFunction('second', function (time) {\n return runtime.unpackTime(time).seconds;\n }).args([[\n '*time',\n 'datetime'\n ]]);\n defineFunction('edate', function (base, months) {\n var d = unpackDate(base);\n var m = d.month + months;\n var y = d.year + Math.floor(m / 12);\n m %= 12;\n if (m < 0) {\n m += 12;\n }\n d = Math.min(d.date, daysInMonth(y, m));\n return packDate(y, m, d);\n }).args([\n [\n '*start_date',\n 'date'\n ],\n [\n '*months',\n 'integer'\n ]\n ]);\n defineFunction('eomonth', function (base, months) {\n var d = unpackDate(base);\n var m = d.month + months;\n var y = d.year + Math.floor(m / 12);\n m %= 12;\n if (m < 0) {\n m += 12;\n }\n d = daysInMonth(y, m);\n return packDate(y, m, d);\n }).args([\n [\n '*start_date',\n 'date'\n ],\n [\n '*months',\n 'integer'\n ]\n ]);\n defineFunction('workday', function (date, n, holidays) {\n var inc = n > 0 ? 1 : -1;\n n = Math.abs(n);\n var dow = unpackDate(date).day;\n while (n > 0) {\n date += inc;\n dow = (dow + inc) % 7;\n if (dow > 0 && dow < 6 && holidays.indexOf(date) < 0) {\n --n;\n }\n }\n return date;\n }).args([\n [\n 'start_date',\n 'date'\n ],\n [\n 'days',\n 'integer'\n ],\n [\n 'holidays',\n [\n 'collect',\n 'date'\n ]\n ]\n ]);\n defineFunction('networkdays', function (date, end, holidays) {\n if (date > end) {\n var tmp = date;\n date = end;\n end = tmp;\n }\n var count = 0;\n var dow = unpackDate(date).day;\n while (date <= end) {\n if (dow > 0 && dow < 6 && holidays.indexOf(date) < 0) {\n count++;\n }\n date++;\n dow = (dow + 1) % 7;\n }\n return count;\n }).args([\n [\n 'start_date',\n 'date'\n ],\n [\n 'end_date',\n 'date'\n ],\n [\n 'holidays',\n [\n 'collect',\n 'date'\n ]\n ]\n ]);\n defineFunction('days', function (start, end) {\n return end - start;\n }).args([\n [\n '*start_date',\n 'date'\n ],\n [\n '*end_date',\n 'date'\n ]\n ]);\n function _days_360(start, end, method) {\n var d1 = unpackDate(start);\n var d2 = unpackDate(end);\n if (method) {\n if (d1.date == 31) {\n d1.date = 30;\n }\n if (d2.date == 31) {\n d2.date = 30;\n }\n } else {\n if (d1.month == 1 && d2.month == 1 && d1.date == daysInMonth(d1.year, 1) && d2.date == daysInMonth(d2.year, 1)) {\n d2.date = 30;\n }\n if (d1.date == daysInMonth(d1.year, d1.month)) {\n d1.date = 30;\n if (d2.date == 31) {\n d2.date = 30;\n }\n } else {\n if (d1.date == 30 && d2.date == 31) {\n d2.date = 30;\n }\n }\n }\n return 360 * (d2.year - d1.year) + 30 * (d2.month - d1.month) + (d2.date - d1.date);\n }\n runtime._days_360 = _days_360;\n defineFunction('days360', _days_360).args([\n [\n '*start_date',\n 'date'\n ],\n [\n '*end_date',\n 'date'\n ],\n [\n '*method',\n [\n 'or',\n 'logical',\n [\n 'null',\n false\n ]\n ]\n ]\n ]);\n defineFunction('yearfrac', function (start, end, method) {\n switch (method) {\n case 0:\n return _days_360(start, end, false) / 360;\n case 1:\n return (end - start) / daysInYear(unpackDate(start).year);\n case 2:\n return (end - start) / 360;\n case 3:\n return (end - start) / 365;\n case 4:\n return _days_360(start, end, true) / 360;\n }\n }).args([\n [\n '*start_date',\n 'date'\n ],\n [\n '*end_date',\n 'date'\n ],\n [\n '*method',\n [\n 'or',\n [\n 'null',\n 0\n ],\n [\n 'values',\n 0,\n 1,\n 2,\n 3,\n 4\n ]\n ]\n ]\n ]);\n defineFunction('datevalue', function (text) {\n var date = runtime.parseDate(text);\n if (date) {\n return runtime.dateToSerial(date);\n }\n return new CalcError('VALUE');\n }).args([[\n '*text',\n 'string'\n ]]);\n defineFunction('timevalue', function (text) {\n var m = text.toLowerCase().match(/(\\d+):(\\d+)(:(\\d+)(\\.(\\d+))?)?\\s*(am?|pm?)?/);\n if (m) {\n var hh = parseFloat(m[1]);\n var mm = parseFloat(m[2]);\n var ss = m[3] ? parseFloat(m[4]) : 0;\n var ampm = m[7];\n if (ampm && (hh > 12 || hh < 1)) {\n return new CalcError('VALUE');\n }\n if (/^p/.test(ampm)) {\n hh += 12;\n }\n return runtime.packTime(hh, mm, ss, 0);\n }\n return new CalcError('VALUE');\n }).args([[\n '*text',\n 'string'\n ]]);\n defineFunction('mdeterm', function (m) {\n var error = m.each(function (val) {\n if (typeof val != 'number') {\n return new CalcError('VALUE');\n }\n }, true);\n return error || m.determinant();\n }).args([[\n 'm',\n [\n 'and',\n 'matrix',\n [\n 'assert',\n '$m.width == $m.height'\n ]\n ]\n ]]);\n defineFunction('transpose', function (m) {\n return m.transpose();\n }).args([[\n 'range',\n 'matrix'\n ]]);\n defineFunction('mmult', function (a, b) {\n return a.multiply(b);\n }).args([\n [\n 'a',\n 'matrix'\n ],\n [\n 'b',\n [\n 'and',\n 'matrix',\n [\n 'assert',\n '$b.height == $a.width'\n ]\n ]\n ]\n ]);\n defineFunction('munit', function (n) {\n return new Matrix(this).unit(n);\n }).args([[\n 'n',\n 'integer+'\n ]]);\n defineFunction('minverse', function (m) {\n var error = m.each(function (val) {\n if (typeof val != 'number') {\n return new CalcError('VALUE');\n }\n }, true);\n return error || m.inverse() || new CalcError('VALUE');\n }).args([[\n 'm',\n [\n 'and',\n 'matrix',\n [\n 'assert',\n '$m.width == $m.height'\n ]\n ]\n ]]);\n defineFunction('rand', function () {\n return Math.random();\n }).args([]);\n defineFunction('randbetween', function (min, max) {\n return min + Math.floor((max - min + 1) * Math.random());\n }).args([\n [\n 'min',\n 'integer'\n ],\n [\n 'max',\n [\n 'and',\n 'integer',\n [\n 'assert',\n '$max >= $min'\n ]\n ]\n ]\n ]);\n defineFunction('true', function () {\n return true;\n }).args([]);\n defineFunction('false', function () {\n return true;\n }).args([]);\n defineFunction('roman', function (num) {\n return util.arabicToRoman(num).toUpperCase();\n }).args([[\n '*number',\n 'integer'\n ]]);\n defineFunction('arabic', function (rom) {\n var num = util.romanToArabic(rom);\n return num == null ? new CalcError('VALUE') : num;\n }).args([[\n '*roman',\n 'string'\n ]]);\n defineFunction('base', function (number, radix, minLen) {\n var str = number.toString(radix).toUpperCase();\n while (str.length < minLen) {\n str = '0' + str;\n }\n return str;\n }).args([\n [\n '*number',\n 'integer'\n ],\n [\n '*radix',\n [\n 'and',\n 'integer',\n [\n '[between]',\n 2,\n 36\n ]\n ]\n ],\n [\n '*minLen',\n [\n 'or',\n 'integer+',\n [\n 'null',\n 0\n ]\n ]\n ]\n ]);\n defineFunction('decimal', function (text, radix) {\n text = text.toUpperCase();\n var val = 0;\n for (var i = 0; i < text.length; ++i) {\n var d = text.charCodeAt(i);\n if (d >= 48 && d <= 57) {\n d -= 48;\n } else if (d >= 65 && d < 55 + radix) {\n d -= 55;\n } else {\n return new CalcError('VALUE');\n }\n val = val * radix + d;\n }\n return val;\n }).args([\n [\n '*text',\n 'string'\n ],\n [\n '*radix',\n [\n 'and',\n 'integer',\n [\n '[between]',\n 2,\n 36\n ]\n ]\n ]\n ]);\n defineFunction('char', function (code) {\n return String.fromCharCode(code);\n }).args([[\n '*code',\n 'integer+'\n ]]);\n var RX_NON_PRINTABLE = /[\\0-\\x1F\\x7F-\\x9F\\xAD\\u0378\\u0379\\u037F-\\u0383\\u038B\\u038D\\u03A2\\u0528-\\u0530\\u0557\\u0558\\u0560\\u0588\\u058B-\\u058E\\u0590\\u05C8-\\u05CF\\u05EB-\\u05EF\\u05F5-\\u0605\\u061C\\u061D\\u06DD\\u070E\\u070F\\u074B\\u074C\\u07B2-\\u07BF\\u07FB-\\u07FF\\u082E\\u082F\\u083F\\u085C\\u085D\\u085F-\\u089F\\u08A1\\u08AD-\\u08E3\\u08FF\\u0978\\u0980\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09FC-\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A76-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF2-\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B55\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B78-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BFB-\\u0C00\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C34\\u0C3A-\\u0C3C\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5A-\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C77\\u0C80\\u0C81\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDD\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0D01\\u0D04\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D45\\u0D49\\u0D4F-\\u0D56\\u0D58-\\u0D5F\\u0D64\\u0D65\\u0D76-\\u0D78\\u0D80\\u0D81\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DF1\\u0DF5-\\u0E00\\u0E3B-\\u0E3E\\u0E5C-\\u0E80\\u0E83\\u0E85\\u0E86\\u0E89\\u0E8B\\u0E8C\\u0E8E-\\u0E93\\u0E98\\u0EA0\\u0EA4\\u0EA6\\u0EA8\\u0EA9\\u0EAC\\u0EBA\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F48\\u0F6D-\\u0F70\\u0F98\\u0FBD\\u0FCD\\u0FDB-\\u0FFF\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u137D-\\u137F\\u139A-\\u139F\\u13F5-\\u13FF\\u169D-\\u169F\\u16F1-\\u16FF\\u170D\\u1715-\\u171F\\u1737-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17DE\\u17DF\\u17EA-\\u17EF\\u17FA-\\u17FF\\u180F\\u181A-\\u181F\\u1878-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191D-\\u191F\\u192C-\\u192F\\u193C-\\u193F\\u1941-\\u1943\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DB-\\u19DD\\u1A1C\\u1A1D\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1A9F\\u1AAE-\\u1AFF\\u1B4C-\\u1B4F\\u1B7D-\\u1B7F\\u1BF4-\\u1BFB\\u1C38-\\u1C3A\\u1C4A-\\u1C4C\\u1C80-\\u1CBF\\u1CC8-\\u1CCF\\u1CF7-\\u1CFF\\u1DE7-\\u1DFB\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FC5\\u1FD4\\u1FD5\\u1FDC\\u1FF0\\u1FF1\\u1FF5\\u1FFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u2072\\u2073\\u208F\\u209D-\\u209F\\u20BB-\\u20CF\\u20F1-\\u20FF\\u218A-\\u218F\\u23F4-\\u23FF\\u2427-\\u243F\\u244B-\\u245F\\u2700\\u2B4D-\\u2B4F\\u2B5A-\\u2BFF\\u2C2F\\u2C5F\\u2CF4-\\u2CF8\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D71-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E3C-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u2FFF\\u3040\\u3097\\u3098\\u3100-\\u3104\\u312E-\\u3130\\u318F\\u31BB-\\u31BF\\u31E4-\\u31EF\\u321F\\u32FF\\u4DB6-\\u4DBF\\u9FCD-\\u9FFF\\uA48D-\\uA48F\\uA4C7-\\uA4CF\\uA62C-\\uA63F\\uA698-\\uA69E\\uA6F8-\\uA6FF\\uA78F\\uA794-\\uA79F\\uA7AB-\\uA7F7\\uA82C-\\uA82F\\uA83A-\\uA83F\\uA878-\\uA87F\\uA8C5-\\uA8CD\\uA8DA-\\uA8DF\\uA8FC-\\uA8FF\\uA954-\\uA95E\\uA97D-\\uA97F\\uA9CE\\uA9DA-\\uA9DD\\uA9E0-\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A\\uAA5B\\uAA7C-\\uAA7F\\uAAC3-\\uAADA\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F-\\uABBF\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBC2-\\uFBD2\\uFD40-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFE\\uFDFF\\uFE1A-\\uFE1F\\uFE27-\\uFE2F\\uFE53\\uFE67\\uFE6C-\\uFE6F\\uFE75\\uFEFD-\\uFF00\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFDF\\uFFE7\\uFFEF-\\uFFFB\\uFFFE\\uFFFF]/g;\n defineFunction('clean', function (text) {\n return text.replace(RX_NON_PRINTABLE, '');\n }).args([[\n '*text',\n 'string'\n ]]);\n defineFunction('code', function (text) {\n return text.charAt(0);\n }).args([[\n '*text',\n 'string'\n ]]);\n defineAlias('unichar', 'char');\n defineAlias('unicode', 'code');\n defineFunction('concatenate', function (args) {\n var out = '';\n for (var i = 0; i < args.length; ++i) {\n out += args[i];\n }\n return out;\n }).args([[\n '+',\n [\n '*text',\n 'string'\n ]\n ]]);\n defineFunction('dollar', function (number, decimals) {\n var format = '$#,##0.DECIMALS;($#,##0.DECIMALS)';\n var dec = '';\n while (decimals-- > 0) {\n dec += '0';\n }\n format = format.replace(/DECIMALS/g, dec);\n return spreadsheet.formatting.text(number, format);\n }).args([\n [\n '*number',\n 'number'\n ],\n [\n '*decimals',\n [\n 'or',\n 'integer++',\n [\n 'null',\n 2\n ]\n ]\n ]\n ]);\n defineFunction('exact', function (a, b) {\n return a === b;\n }).args([\n [\n '*text1',\n 'string'\n ],\n [\n '*text2',\n 'string'\n ]\n ]);\n defineFunction('find', function (substring, string, start) {\n var pos = string.indexOf(substring, start - 1);\n return pos < 0 ? new CalcError('VALUE') : pos + 1;\n }).args([\n [\n '*substring',\n 'string'\n ],\n [\n '*string',\n 'string'\n ],\n [\n '*start',\n [\n 'or',\n 'integer++',\n [\n 'null',\n 1\n ]\n ]\n ]\n ]);\n defineFunction('fixed', function (number, decimals, noCommas) {\n var format = noCommas ? '0.DECIMALS' : '#,##0.DECIMALS';\n var dec = '';\n while (decimals-- > 0) {\n dec += '0';\n }\n format = format.replace(/DECIMALS/g, dec);\n return spreadsheet.formatting.text(number, format);\n }).args([\n [\n '*number',\n 'number'\n ],\n [\n '*decimals',\n [\n 'or',\n 'integer++',\n [\n 'null',\n 2\n ]\n ]\n ],\n [\n '*noCommas',\n [\n 'or',\n 'boolean',\n [\n 'null',\n false\n ]\n ]\n ]\n ]);\n defineFunction('left', function (text, length) {\n return text.substr(0, length);\n }).args([\n [\n '*text',\n 'string'\n ],\n [\n '*length',\n [\n 'or',\n 'integer+',\n [\n 'null',\n 1\n ]\n ]\n ]\n ]);\n defineFunction('right', function (text, length) {\n return text.substr(-length);\n }).args([\n [\n '*text',\n 'string'\n ],\n [\n '*length',\n [\n 'or',\n 'integer+',\n [\n 'null',\n 1\n ]\n ]\n ]\n ]);\n defineFunction('len', function (text) {\n return text.length;\n }).args([[\n '*text',\n 'string'\n ]]);\n defineFunction('lower', function (text) {\n return text.toLowerCase();\n }).args([[\n '*text',\n 'string'\n ]]);\n defineFunction('upper', function (text) {\n return text.toUpperCase();\n }).args([[\n '*text',\n 'string'\n ]]);\n defineFunction('ltrim', function (text) {\n return text.replace(/^\\s+/, '');\n }).args([[\n '*text',\n 'string'\n ]]);\n defineFunction('rtrim', function (text) {\n return text.replace(/\\s+$/, '');\n }).args([[\n '*text',\n 'string'\n ]]);\n defineFunction('trim', function (text) {\n return text.replace(/^\\s+|\\s+$/, '');\n }).args([[\n '*text',\n 'string'\n ]]);\n defineFunction('mid', function (text, start, length) {\n return text.substr(start - 1, length);\n }).args([\n [\n '*text',\n 'string'\n ],\n [\n '*start',\n 'integer++'\n ],\n [\n '*length',\n 'integer+'\n ]\n ]);\n defineFunction('proper', function (text) {\n return text.toLowerCase().replace(/\\b./g, function (s) {\n return s.toUpperCase();\n });\n }).args([[\n '*text',\n 'string'\n ]]);\n defineFunction('replace', function (text, start, length, newText) {\n return text.substr(0, --start) + newText + text.substr(start + length);\n }).args([\n [\n '*text',\n 'string'\n ],\n [\n '*start',\n 'integer++'\n ],\n [\n '*length',\n 'integer+'\n ],\n [\n '*newText',\n 'string'\n ]\n ]);\n defineFunction('rept', function (text, number) {\n var out = '';\n while (number-- > 0) {\n out += text;\n }\n return out;\n }).args([\n [\n '*text',\n 'string'\n ],\n [\n '*number',\n 'integer+'\n ]\n ]);\n defineFunction('search', function (substring, string, start) {\n var pos = string.toLowerCase().indexOf(substring.toLowerCase(), start - 1);\n return pos < 0 ? new CalcError('VALUE') : pos + 1;\n }).args([\n [\n '*substring',\n 'string'\n ],\n [\n '*string',\n 'string'\n ],\n [\n '*start',\n [\n 'or',\n 'integer++',\n [\n 'null',\n 1\n ]\n ]\n ]\n ]);\n defineFunction('substitute', function (text, oldText, newText, nth) {\n if (oldText === newText) {\n return text;\n }\n var pos = -1;\n function replace() {\n text = text.substring(0, pos) + newText + text.substring(pos + oldText.length);\n }\n while ((pos = text.indexOf(oldText, pos + 1)) >= 0) {\n if (nth == null) {\n replace();\n } else if (--nth === 0) {\n replace();\n break;\n }\n }\n return text;\n }).args([\n [\n '*text',\n 'string'\n ],\n [\n '*oldText',\n 'string'\n ],\n [\n '*newText',\n 'string'\n ],\n [\n '*nth',\n [\n 'or',\n 'integer++',\n 'null'\n ]\n ]\n ]);\n defineFunction('t', function (value) {\n return typeof value == 'string' ? value : '';\n }).args([[\n '*value',\n 'anyvalue'\n ]]);\n defineFunction('text', function (value, format) {\n return spreadsheet.formatting.text(value, format);\n }).args([\n [\n '*value',\n 'anyvalue'\n ],\n [\n '*format',\n 'string'\n ]\n ]);\n defineFunction('value', function (value) {\n if (typeof value == 'number') {\n return value;\n }\n if (typeof value == 'boolean') {\n return +value;\n }\n value = (value + '').replace(/[$€,]/g, '');\n value = parseFloat(value);\n return isNaN(value) ? new CalcError('VALUE') : value;\n }).args([[\n '*value',\n 'anyvalue'\n ]]);\n function Hyperlink(link, text) {\n this.link = link;\n this.text = text;\n }\n Hyperlink.prototype.toString = function () {\n return this.text;\n };\n defineFunction('hyperlink', function (link, text) {\n return new Hyperlink(link, text);\n }).args([\n [\n '*link',\n 'string'\n ],\n [\n '*text',\n [\n 'or',\n 'string',\n [\n 'null',\n '$link'\n ]\n ]\n ]\n ]);\n defineFunction('iferror', function (value, valueIfError) {\n return value instanceof CalcError ? valueIfError : value;\n }).args([\n [\n '*value',\n 'forced!'\n ],\n [\n '*value_if_error',\n 'anyvalue!'\n ]\n ]);\n var parseCriteria = function () {\n var RXCACHE = Object.create(null);\n function makeComparator(cmp, x) {\n if (typeof x == 'string') {\n var num = parseFloat(x);\n if (!isNaN(num) && num == x) {\n x = num;\n }\n }\n return function (a) {\n var b = x;\n if (typeof a == 'string' && typeof b == 'string') {\n a = a.toLowerCase();\n b = b.toLowerCase();\n }\n return cmp(a, b);\n };\n }\n function lc(a) {\n var num, str;\n if (typeof a == 'string') {\n a = a.toLowerCase();\n }\n if (/^[0-9.]+%$/.test(a)) {\n str = a.substr(0, a.length - 1);\n num = parseFloat(str);\n if (!isNaN(num) && num == str) {\n a = num / 100;\n }\n } else if (/^[0-9.]+$/.test(a)) {\n num = parseFloat(a);\n if (!isNaN(num) && num == a) {\n a = num;\n }\n }\n return a;\n }\n function compLT(a, b) {\n return lc(a) < lc(b);\n }\n function compLTE(a, b) {\n return lc(a) <= lc(b);\n }\n function compGT(a, b) {\n return lc(a) > lc(b);\n }\n function compGTE(a, b) {\n return lc(a) >= lc(b);\n }\n function compNE(a, b) {\n return !compEQ(a, b);\n }\n function compEQ(a, b) {\n if (b instanceof RegExp) {\n return b.test(a);\n }\n if (typeof a == 'string' || typeof b == 'string') {\n a = String(a);\n b = String(b);\n }\n return lc(a) == lc(b);\n }\n return function (cmp) {\n if (typeof cmp == 'function') {\n return cmp;\n }\n var m;\n if (m = /^=(.*)$/.exec(cmp)) {\n return makeComparator(compEQ, m[1]);\n }\n if (m = /^<>(.*)$/.exec(cmp)) {\n return makeComparator(compNE, m[1]);\n }\n if (m = /^<=(.*)$/.exec(cmp)) {\n return makeComparator(compLTE, m[1]);\n }\n if (m = /^<(.*)$/.exec(cmp)) {\n return makeComparator(compLT, m[1]);\n }\n if (m = /^>=(.*)$/.exec(cmp)) {\n return makeComparator(compGTE, m[1]);\n }\n if (m = /^>(.*)$/.exec(cmp)) {\n return makeComparator(compGT, m[1]);\n }\n if (/[?*]/.exec(cmp)) {\n var rx = RXCACHE[cmp];\n if (!rx) {\n rx = cmp.replace(/(~\\?|~\\*|[\\]({\\+\\.\\|\\^\\$\\\\})\\[]|[?*])/g, function (s) {\n switch (s) {\n case '~?':\n return '\\\\?';\n case '~*':\n return '\\\\*';\n case '?':\n return '.';\n case '*':\n return '.*';\n default:\n return '\\\\' + s;\n }\n });\n rx = RXCACHE[cmp] = new RegExp('^' + rx + '$', 'i');\n }\n return makeComparator(compEQ, rx);\n }\n return makeComparator(compEQ, cmp);\n };\n }();\n function numericPredicate(val) {\n return typeof val == 'number' || typeof val == 'boolean' || val == null || val === '';\n }\n function ascending(a, b) {\n return a === b ? 0 : a < b ? -1 : 1;\n }\n function descending(a, b) {\n return a === b ? 0 : a < b ? 1 : -1;\n }\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/runtime.functions.2', ['spreadsheet/runtime'], f);\n}(function () {\n 'use strict';\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var spreadsheet = kendo.spreadsheet;\n var calc = spreadsheet.calc;\n var runtime = calc.runtime;\n var defineFunction = runtime.defineFunction;\n var CalcError = runtime.CalcError;\n var packDate = runtime.packDate;\n var unpackDate = runtime.unpackDate;\n var isLeapYear = runtime.isLeapYear;\n var daysInMonth = runtime.daysInMonth;\n var _days_360 = runtime._days_360;\n defineFunction('ERF', function (ll, ul) {\n if (ul == null) {\n return ERF(ll);\n }\n return ERF(ul) - ERF(ll);\n }).args([\n [\n 'lower_limit',\n 'number'\n ],\n [\n 'upper_limit',\n [\n 'or',\n 'number',\n 'null'\n ]\n ]\n ]);\n defineFunction('ERFC', ERFC).args([[\n 'x',\n 'number'\n ]]);\n defineFunction('GAMMALN', GAMMALN).args([[\n 'x',\n 'number++'\n ]]);\n defineFunction('GAMMA', GAMMA).args([[\n 'x',\n 'number'\n ]]);\n defineFunction('GAMMA.DIST', GAMMA_DIST).args([\n [\n 'x',\n 'number+'\n ],\n [\n 'alpha',\n 'number++'\n ],\n [\n 'beta',\n 'number++'\n ],\n [\n 'cumulative',\n 'logical'\n ]\n ]);\n defineFunction('GAMMA.INV', GAMMA_INV).args([\n [\n 'p',\n [\n 'and',\n 'number',\n [\n '[between]',\n 0,\n 1\n ]\n ]\n ],\n [\n 'alpha',\n 'number++'\n ],\n [\n 'beta',\n 'number++'\n ]\n ]);\n defineFunction('NORM.S.DIST', NORM_S_DIST).args([\n [\n 'z',\n 'number'\n ],\n [\n 'cumulative',\n 'logical'\n ]\n ]);\n defineFunction('NORM.S.INV', NORM_S_INV).args([[\n 'p',\n [\n 'and',\n 'number',\n [\n '[between]',\n 0,\n 1\n ]\n ]\n ]]);\n defineFunction('NORM.DIST', NORM_DIST).args([\n [\n 'x',\n 'number'\n ],\n [\n 'mean',\n 'number'\n ],\n [\n 'stddev',\n 'number++'\n ],\n [\n 'cumulative',\n 'logical'\n ]\n ]);\n defineFunction('NORM.INV', NORM_INV).args([\n [\n 'p',\n [\n 'and',\n 'number',\n [\n '[between]',\n 0,\n 1\n ]\n ]\n ],\n [\n 'mean',\n 'number'\n ],\n [\n 'stddev',\n 'number++'\n ]\n ]);\n defineFunction('BETADIST', BETADIST).args([\n [\n 'x',\n 'number'\n ],\n [\n 'alpha',\n 'number++'\n ],\n [\n 'beta',\n 'number++'\n ],\n [\n 'A',\n [\n 'or',\n 'number',\n [\n 'null',\n 0\n ]\n ]\n ],\n [\n 'B',\n [\n 'or',\n 'number',\n [\n 'null',\n 1\n ]\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$x >= $A',\n 'NUM'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$x <= $B',\n 'NUM'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$A < $B',\n 'NUM'\n ]\n ]\n ]);\n defineFunction('BETA.DIST', BETA_DIST).args([\n [\n 'x',\n 'number'\n ],\n [\n 'alpha',\n 'number++'\n ],\n [\n 'beta',\n 'number++'\n ],\n [\n 'cumulative',\n 'logical'\n ],\n [\n 'A',\n [\n 'or',\n 'number',\n [\n 'null',\n 0\n ]\n ]\n ],\n [\n 'B',\n [\n 'or',\n 'number',\n [\n 'null',\n 1\n ]\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$x >= $A',\n 'NUM'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$x <= $B',\n 'NUM'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$A < $B',\n 'NUM'\n ]\n ]\n ]);\n defineFunction('BETA.INV', BETA_INV).args([\n [\n 'p',\n [\n 'and',\n 'number',\n [\n '[between]',\n 0,\n 1\n ]\n ]\n ],\n [\n 'alpha',\n 'number++'\n ],\n [\n 'beta',\n 'number++'\n ],\n [\n 'A',\n [\n 'or',\n 'number',\n [\n 'null',\n 0\n ]\n ]\n ],\n [\n 'B',\n [\n 'or',\n 'number',\n [\n 'null',\n 1\n ]\n ]\n ]\n ]);\n defineFunction('CHISQ.DIST', chisq_left).args([\n [\n 'x',\n 'number+'\n ],\n [\n 'deg_freedom',\n 'integer++'\n ],\n [\n 'cumulative',\n 'logical'\n ]\n ]);\n defineFunction('CHISQ.DIST.RT', chisq_right).args([\n [\n 'x',\n 'number+'\n ],\n [\n 'deg_freedom',\n 'integer++'\n ]\n ]);\n defineFunction('CHISQ.INV', chisq_left_inv).args([\n [\n 'p',\n [\n 'and',\n 'number',\n [\n '[between]',\n 0,\n 1\n ]\n ]\n ],\n [\n 'deg_freedom',\n 'integer++'\n ]\n ]);\n defineFunction('CHISQ.INV.RT', chisq_right_inv).args([\n [\n 'p',\n [\n 'and',\n 'number',\n [\n '[between]',\n 0,\n 1\n ]\n ]\n ],\n [\n 'deg_freedom',\n 'integer++'\n ]\n ]);\n defineFunction('CHISQ.TEST', function (ac, ex) {\n return chisq_test(ac.data, ex.data);\n }).args([\n [\n 'actual_range',\n 'matrix'\n ],\n [\n 'expected_range',\n 'matrix'\n ],\n [\n '?',\n [\n 'assert',\n '$actual_range.width == $expected_range.width'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$actual_range.height == $expected_range.height'\n ]\n ]\n ]);\n defineFunction('EXPON.DIST', expon).args([\n [\n 'x',\n 'number+'\n ],\n [\n 'lambda',\n 'number++'\n ],\n [\n 'cumulative',\n 'logical'\n ]\n ]);\n defineFunction('POISSON.DIST', poisson).args([\n [\n 'x',\n 'integer+'\n ],\n [\n 'mean',\n 'number+'\n ],\n [\n 'cumulative',\n 'logical'\n ]\n ]);\n defineFunction('F.DIST', Fdist).args([\n [\n 'x',\n 'number+'\n ],\n [\n 'deg_freedom1',\n 'integer++'\n ],\n [\n 'deg_freedom2',\n 'integer++'\n ],\n [\n 'cumulative',\n 'logical'\n ]\n ]);\n defineFunction('F.DIST.RT', Fdist_right).args([\n [\n 'x',\n 'number+'\n ],\n [\n 'deg_freedom1',\n 'integer++'\n ],\n [\n 'deg_freedom2',\n 'integer++'\n ]\n ]);\n defineFunction('F.INV', Finv).args([\n [\n 'p',\n [\n 'and',\n 'number',\n [\n '[between]',\n 0,\n 1\n ]\n ]\n ],\n [\n 'deg_freedom1',\n 'integer++'\n ],\n [\n 'deg_freedom2',\n 'integer++'\n ]\n ]);\n defineFunction('F.INV.RT', Finv_right).args([\n [\n 'p',\n [\n 'and',\n 'number',\n [\n '[between]',\n 0,\n 1\n ]\n ]\n ],\n [\n 'deg_freedom1',\n 'integer++'\n ],\n [\n 'deg_freedom2',\n 'integer++'\n ]\n ]);\n defineFunction('F.TEST', Ftest).args([\n [\n 'array1',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n 'array2',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$array1.length >= 2',\n 'DIV/0'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$array2.length >= 2',\n 'DIV/0'\n ]\n ]\n ]);\n defineFunction('FISHER', fisher).args([[\n 'x',\n [\n 'and',\n 'number',\n [\n '(between)',\n -1,\n 1\n ]\n ]\n ]]);\n defineFunction('FISHERINV', fisherinv).args([[\n 'y',\n 'number'\n ]]);\n defineFunction('T.DIST', Tdist).args([\n [\n 'x',\n 'number'\n ],\n [\n 'deg_freedom',\n 'integer++'\n ],\n [\n 'cumulative',\n 'logical'\n ]\n ]);\n defineFunction('T.DIST.RT', Tdist_right).args([\n [\n 'x',\n 'number'\n ],\n [\n 'deg_freedom',\n 'integer++'\n ]\n ]);\n defineFunction('T.DIST.2T', Tdist_2tail).args([\n [\n 'x',\n 'number+'\n ],\n [\n 'deg_freedom',\n 'integer++'\n ]\n ]);\n defineFunction('T.INV', Tdist_inv).args([\n [\n 'p',\n [\n 'and',\n 'number',\n [\n '(between]',\n 0,\n 1\n ]\n ]\n ],\n [\n 'deg_freedom',\n 'integer++'\n ]\n ]);\n defineFunction('T.INV.2T', Tdist_2tail_inv).args([\n [\n 'p',\n [\n 'and',\n 'number',\n [\n '(between]',\n 0,\n 1\n ]\n ]\n ],\n [\n 'deg_freedom',\n 'integer++'\n ]\n ]);\n defineFunction('T.TEST', Tdist_test).args([\n [\n 'array1',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n 'array2',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n 'tails',\n [\n 'and',\n 'integer',\n [\n 'values',\n 1,\n 2\n ]\n ]\n ],\n [\n 'type',\n [\n 'and',\n 'integer',\n [\n 'values',\n 1,\n 2,\n 3\n ]\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$type != 1 || $array1.length == $array2.length',\n 'N/A'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$array1.length >= 2',\n 'DIV/0'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$array2.length >= 2',\n 'DIV/0'\n ]\n ]\n ]);\n defineFunction('CONFIDENCE.T', confidence_t).args([\n [\n 'alpha',\n [\n 'and',\n 'number',\n [\n '(between)',\n 0,\n 1\n ]\n ]\n ],\n [\n 'standard_dev',\n 'number++'\n ],\n [\n 'size',\n [\n 'and',\n 'integer++',\n [\n 'assert',\n '$size != 1',\n 'DIV/0'\n ]\n ]\n ]\n ]);\n defineFunction('CONFIDENCE.NORM', confidence_norm).args([\n [\n 'alpha',\n [\n 'and',\n 'number',\n [\n '(between)',\n 0,\n 1\n ]\n ]\n ],\n [\n 'standard_dev',\n 'number++'\n ],\n [\n 'size',\n [\n 'and',\n 'integer++'\n ]\n ]\n ]);\n defineFunction('GAUSS', gauss).args([[\n 'z',\n 'number'\n ]]);\n defineFunction('PHI', phi).args([[\n 'x',\n 'number'\n ]]);\n defineFunction('LOGNORM.DIST', lognorm_dist).args([\n [\n 'x',\n 'number++'\n ],\n [\n 'mean',\n 'number'\n ],\n [\n 'standard_dev',\n 'number++'\n ],\n [\n 'cumulative',\n 'logical'\n ]\n ]);\n defineFunction('LOGNORM.INV', lognorm_inv).args([\n [\n 'probability',\n [\n 'and',\n 'number',\n [\n '(between)',\n 0,\n 1\n ]\n ]\n ],\n [\n 'mean',\n 'number'\n ],\n [\n 'standard_dev',\n 'number++'\n ]\n ]);\n defineFunction('PROB', prob).args([\n [\n 'x_range',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n 'prob_range',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n 'lower_limit',\n 'number'\n ],\n [\n 'upper_limit',\n [\n 'or',\n 'number',\n [\n 'null',\n '$lower_limit'\n ]\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$prob_range.length == $x_range.length',\n 'N/A'\n ]\n ]\n ]);\n defineFunction('SLOPE', slope).args([\n [\n 'known_y',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n 'known_x',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$known_x.length == $known_y.length',\n 'N/A'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$known_x.length > 0 && $known_y.length > 0',\n 'N/A'\n ]\n ]\n ]);\n defineFunction('INTERCEPT', intercept).args([\n [\n 'known_y',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n 'known_x',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$known_x.length == $known_y.length',\n 'N/A'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$known_x.length > 0 && $known_y.length > 0',\n 'N/A'\n ]\n ]\n ]);\n defineFunction('PEARSON', pearson).args([\n [\n 'array1',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n 'array2',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$array2.length == $array1.length',\n 'N/A'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$array2.length > 0 && $array1.length > 0',\n 'N/A'\n ]\n ]\n ]);\n defineFunction('RSQ', rsq).args([\n [\n 'known_y',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n 'known_x',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$known_x.length == $known_y.length',\n 'N/A'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$known_x.length > 0 && $known_y.length > 0',\n 'N/A'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$known_x.length != 1 && $known_y.length != 1',\n 'N/A'\n ]\n ]\n ]);\n defineFunction('STEYX', steyx).args([\n [\n 'known_y',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n 'known_x',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$known_x.length == $known_y.length',\n 'N/A'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$known_x.length >= 3 && $known_y.length >= 3',\n 'DIV/0'\n ]\n ]\n ]);\n defineFunction('FORECAST', forecast).args([\n [\n 'x',\n 'number'\n ],\n [\n 'known_y',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n 'known_x',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$known_x.length == $known_y.length',\n 'N/A'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$known_x.length > 0 && $known_y.length > 0',\n 'N/A'\n ]\n ]\n ]);\n defineFunction('LINEST', linest).args([\n [\n 'known_y',\n 'matrix'\n ],\n [\n 'known_x',\n [\n 'or',\n 'matrix',\n 'null'\n ]\n ],\n [\n 'const',\n [\n 'or',\n 'logical',\n [\n 'null',\n true\n ]\n ]\n ],\n [\n 'stats',\n [\n 'or',\n 'logical',\n [\n 'null',\n false\n ]\n ]\n ]\n ]);\n defineFunction('LOGEST', logest).args([\n [\n 'known_y',\n 'matrix'\n ],\n [\n 'known_x',\n [\n 'or',\n 'matrix',\n 'null'\n ]\n ],\n [\n 'const',\n [\n 'or',\n 'logical',\n [\n 'null',\n true\n ]\n ]\n ],\n [\n 'stats',\n [\n 'or',\n 'logical',\n [\n 'null',\n false\n ]\n ]\n ]\n ]);\n defineFunction('TREND', trend).args([\n [\n 'known_y',\n 'matrix'\n ],\n [\n 'known_x',\n [\n 'or',\n 'matrix',\n 'null'\n ]\n ],\n [\n 'new_x',\n [\n 'or',\n 'matrix',\n 'null'\n ]\n ],\n [\n 'const',\n [\n 'or',\n 'logical',\n [\n 'null',\n true\n ]\n ]\n ]\n ]);\n defineFunction('GROWTH', growth).args([\n [\n 'known_y',\n 'matrix'\n ],\n [\n 'known_x',\n [\n 'or',\n 'matrix',\n 'null'\n ]\n ],\n [\n 'new_x',\n [\n 'or',\n 'matrix',\n 'null'\n ]\n ],\n [\n 'const',\n [\n 'or',\n 'logical',\n [\n 'null',\n true\n ]\n ]\n ]\n ]);\n defineFunction('FV', FV).args([\n [\n 'rate',\n 'number'\n ],\n [\n 'nper',\n 'number'\n ],\n [\n 'pmt',\n [\n 'or',\n 'number',\n [\n 'null',\n 0\n ]\n ]\n ],\n [\n 'pv',\n [\n 'or',\n 'number',\n [\n 'null',\n 0\n ]\n ]\n ],\n [\n 'type',\n [\n 'or',\n [\n 'values',\n 0,\n 1\n ],\n [\n 'null',\n 0\n ]\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$pmt || $pv'\n ]\n ]\n ]);\n defineFunction('PV', PV).args([\n [\n 'rate',\n 'number'\n ],\n [\n 'nper',\n 'number'\n ],\n [\n 'pmt',\n [\n 'or',\n 'number',\n [\n 'null',\n 0\n ]\n ]\n ],\n [\n 'fv',\n [\n 'or',\n 'number',\n [\n 'null',\n 0\n ]\n ]\n ],\n [\n 'type',\n [\n 'or',\n [\n 'values',\n 0,\n 1\n ],\n [\n 'null',\n 0\n ]\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$pmt || $fv'\n ]\n ]\n ]);\n defineFunction('PMT', PMT).args([\n [\n 'rate',\n 'number'\n ],\n [\n 'nper',\n 'number'\n ],\n [\n 'pmt',\n 'number'\n ],\n [\n 'fv',\n [\n 'or',\n 'number',\n [\n 'null',\n 0\n ]\n ]\n ],\n [\n 'type',\n [\n 'or',\n [\n 'values',\n 0,\n 1\n ],\n [\n 'null',\n 0\n ]\n ]\n ]\n ]);\n defineFunction('NPER', NPER).args([\n [\n 'rate',\n 'number'\n ],\n [\n 'pmt',\n 'number'\n ],\n [\n 'pv',\n 'number'\n ],\n [\n 'fv',\n [\n 'or',\n 'number',\n [\n 'null',\n 0\n ]\n ]\n ],\n [\n 'type',\n [\n 'or',\n [\n 'values',\n 0,\n 1\n ],\n [\n 'null',\n 0\n ]\n ]\n ]\n ]);\n defineFunction('RATE', RATE).args([\n [\n 'nper',\n 'number'\n ],\n [\n 'pmt',\n [\n 'or',\n 'number',\n [\n 'null',\n 0\n ]\n ]\n ],\n [\n 'pv',\n 'number'\n ],\n [\n 'fv',\n [\n 'or',\n 'number',\n [\n 'null',\n 0\n ]\n ]\n ],\n [\n 'type',\n [\n 'or',\n [\n 'values',\n 0,\n 1\n ],\n [\n 'null',\n 0\n ]\n ]\n ],\n [\n 'guess',\n [\n 'or',\n 'number++',\n [\n 'null',\n 0.01\n ]\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$pmt || $fv'\n ]\n ]\n ]);\n defineFunction('IPMT', IPMT).args([\n [\n 'rate',\n 'number'\n ],\n [\n 'per',\n 'number++'\n ],\n [\n 'nper',\n 'number++'\n ],\n [\n 'pv',\n 'number'\n ],\n [\n 'fv',\n [\n 'or',\n 'number',\n [\n 'null',\n 0\n ]\n ]\n ],\n [\n 'type',\n [\n 'or',\n [\n 'values',\n 0,\n 1\n ],\n [\n 'null',\n 0\n ]\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$per >= 1 && $per <= $nper'\n ]\n ]\n ]);\n defineFunction('PPMT', PPMT).args([\n [\n 'rate',\n 'number'\n ],\n [\n 'per',\n 'number++'\n ],\n [\n 'nper',\n 'number++'\n ],\n [\n 'pv',\n 'number'\n ],\n [\n 'fv',\n [\n 'or',\n 'number',\n [\n 'null',\n 0\n ]\n ]\n ],\n [\n 'type',\n [\n 'or',\n [\n 'values',\n 0,\n 1\n ],\n [\n 'null',\n 0\n ]\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$per >= 1 && $per <= $nper'\n ]\n ]\n ]);\n defineFunction('CUMPRINC', CUMPRINC).args([\n [\n 'rate',\n 'number++'\n ],\n [\n 'nper',\n 'number++'\n ],\n [\n 'pv',\n 'number++'\n ],\n [\n 'start_period',\n 'number++'\n ],\n [\n 'end_period',\n 'number++'\n ],\n [\n 'type',\n [\n 'or',\n [\n 'values',\n 0,\n 1\n ],\n [\n 'null',\n 0\n ]\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$end_period >= $start_period',\n 'NUM'\n ]\n ]\n ]);\n defineFunction('CUMIPMT', CUMIPMT).args([\n [\n 'rate',\n 'number++'\n ],\n [\n 'nper',\n 'number++'\n ],\n [\n 'pv',\n 'number++'\n ],\n [\n 'start_period',\n 'number++'\n ],\n [\n 'end_period',\n 'number++'\n ],\n [\n 'type',\n [\n 'or',\n [\n 'values',\n 0,\n 1\n ],\n [\n 'null',\n 0\n ]\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$end_period >= $start_period',\n 'NUM'\n ]\n ]\n ]);\n defineFunction('NPV', NPV).args([\n [\n 'rate',\n 'number'\n ],\n [\n 'values',\n [\n 'collect',\n 'number'\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$values.length > 0',\n 'N/A'\n ]\n ]\n ]);\n defineFunction('IRR', IRR).args([\n [\n 'values',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n 'guess',\n [\n 'or',\n 'number',\n [\n 'null',\n 0.1\n ]\n ]\n ]\n ]);\n defineFunction('EFFECT', EFFECT).args([\n [\n 'nominal_rate',\n 'number++'\n ],\n [\n 'npery',\n 'integer++'\n ]\n ]);\n defineFunction('NOMINAL', NOMINAL).args([\n [\n 'effect_rate',\n 'number++'\n ],\n [\n 'npery',\n 'integer++'\n ]\n ]);\n defineFunction('XNPV', XNPV).args([\n [\n 'rate',\n 'number'\n ],\n [\n 'values',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n 'dates',\n [\n 'collect',\n 'date',\n 1\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$values.length == $dates.length',\n 'NUM'\n ]\n ]\n ]);\n defineFunction('XIRR', XIRR).args([\n [\n 'values',\n [\n 'collect',\n 'number',\n 1\n ]\n ],\n [\n 'dates',\n [\n 'collect',\n 'date',\n 1\n ]\n ],\n [\n 'guess',\n [\n 'or',\n 'number',\n [\n 'null',\n 0.1\n ]\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$values.length == $dates.length',\n 'NUM'\n ]\n ]\n ]);\n defineFunction('ISPMT', ISPMT).args([\n [\n 'rate',\n 'number'\n ],\n [\n 'per',\n 'number++'\n ],\n [\n 'nper',\n 'number++'\n ],\n [\n 'pv',\n 'number'\n ],\n [\n '?',\n [\n 'assert',\n '$per >= 1 && $per <= $nper'\n ]\n ]\n ]);\n defineFunction('DB', DB).args([\n [\n 'cost',\n 'number'\n ],\n [\n 'salvage',\n 'number'\n ],\n [\n 'life',\n 'number++'\n ],\n [\n 'period',\n 'number++'\n ],\n [\n 'month',\n [\n 'or',\n 'number',\n [\n 'null',\n 12\n ]\n ]\n ]\n ]);\n defineFunction('DDB', DDB).args([\n [\n 'cost',\n 'number'\n ],\n [\n 'salvage',\n 'number'\n ],\n [\n 'life',\n 'number++'\n ],\n [\n 'period',\n 'number++'\n ],\n [\n 'factor',\n [\n 'or',\n 'number',\n [\n 'null',\n 2\n ]\n ]\n ]\n ]);\n defineFunction('SLN', SLN).args([\n [\n 'cost',\n 'number'\n ],\n [\n 'salvage',\n 'number'\n ],\n [\n 'life',\n 'number++'\n ]\n ]);\n defineFunction('SYD', SYD).args([\n [\n 'cost',\n 'number'\n ],\n [\n 'salvage',\n 'number'\n ],\n [\n 'life',\n 'number++'\n ],\n [\n 'per',\n 'number++'\n ]\n ]);\n defineFunction('VDB', VDB).args([\n [\n 'cost',\n 'number+'\n ],\n [\n 'salvage',\n 'number+'\n ],\n [\n 'life',\n 'number++'\n ],\n [\n 'start_period',\n 'number+'\n ],\n [\n 'end_period',\n 'number+'\n ],\n [\n 'factor',\n [\n 'or',\n 'number+',\n [\n 'null',\n 2\n ]\n ]\n ],\n [\n 'no_switch',\n [\n 'or',\n 'logical',\n [\n 'null',\n false\n ]\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$end_period >= $start_period',\n 'NUM'\n ]\n ]\n ]);\n var COUPS_ARGS = [\n [\n 'settlement',\n 'date'\n ],\n [\n 'maturity',\n 'date'\n ],\n [\n 'frequency',\n [\n 'and',\n 'integer',\n [\n 'values',\n 1,\n 2,\n 4\n ]\n ]\n ],\n [\n 'basis',\n [\n 'or',\n [\n 'null',\n 0\n ],\n [\n 'and',\n 'integer',\n [\n 'values',\n 0,\n 1,\n 2,\n 3,\n 4\n ]\n ]\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$settlement < $maturity',\n 'NUM'\n ]\n ]\n ];\n defineFunction('COUPDAYBS', COUPDAYBS).args(COUPS_ARGS);\n defineFunction('COUPDAYS', COUPDAYS).args(COUPS_ARGS);\n defineFunction('COUPDAYSNC', COUPDAYSNC).args(COUPS_ARGS);\n defineFunction('COUPPCD', COUPPCD).args(COUPS_ARGS);\n defineFunction('COUPNCD', COUPNCD).args(COUPS_ARGS);\n defineFunction('COUPNUM', COUPNUM).args(COUPS_ARGS);\n defineFunction('ACCRINTM', ACCRINTM).args([\n [\n 'issue',\n 'date'\n ],\n [\n 'settlement',\n 'date'\n ],\n [\n 'rate',\n 'number++'\n ],\n [\n 'par',\n [\n 'or',\n [\n 'null',\n 1000\n ],\n 'number++'\n ]\n ],\n [\n 'basis',\n [\n 'or',\n [\n 'null',\n 0\n ],\n [\n 'and',\n 'integer',\n [\n 'values',\n 0,\n 1,\n 2,\n 3,\n 4\n ]\n ]\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$issue < $settlement',\n 'NUM'\n ]\n ]\n ]);\n defineFunction('ACCRINT', ACCRINT).args([\n [\n 'issue',\n 'date'\n ],\n [\n 'first_interest',\n 'date'\n ],\n [\n 'settlement',\n 'date'\n ],\n [\n 'rate',\n 'number++'\n ],\n [\n 'par',\n [\n 'or',\n [\n 'null',\n 1000\n ],\n 'number++'\n ]\n ],\n [\n 'frequency',\n [\n 'and',\n 'integer',\n [\n 'values',\n 1,\n 2,\n 4\n ]\n ]\n ],\n [\n 'basis',\n [\n 'or',\n [\n 'null',\n 0\n ],\n [\n 'and',\n 'integer',\n [\n 'values',\n 0,\n 1,\n 2,\n 3,\n 4\n ]\n ]\n ]\n ],\n [\n 'calc_method',\n [\n 'or',\n 'logical',\n [\n 'null',\n true\n ]\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$issue < $settlement',\n 'NUM'\n ]\n ]\n ]);\n defineFunction('DISC', DISC).args([\n [\n 'settlement',\n 'date'\n ],\n [\n 'maturity',\n 'date'\n ],\n [\n 'pr',\n 'number++'\n ],\n [\n 'redemption',\n 'number++'\n ],\n [\n 'basis',\n [\n 'or',\n [\n 'null',\n 0\n ],\n [\n 'and',\n 'integer',\n [\n 'values',\n 0,\n 1,\n 2,\n 3,\n 4\n ]\n ]\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$settlement < $maturity',\n 'NUM'\n ]\n ]\n ]);\n defineFunction('INTRATE', INTRATE).args([\n [\n 'settlement',\n 'date'\n ],\n [\n 'maturity',\n 'date'\n ],\n [\n 'investment',\n 'number++'\n ],\n [\n 'redemption',\n 'number++'\n ],\n [\n 'basis',\n [\n 'or',\n [\n 'null',\n 0\n ],\n [\n 'and',\n 'integer',\n [\n 'values',\n 0,\n 1,\n 2,\n 3,\n 4\n ]\n ]\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$settlement < $maturity',\n 'NUM'\n ]\n ]\n ]);\n defineFunction('RECEIVED', RECEIVED).args([\n [\n 'settlement',\n 'date'\n ],\n [\n 'maturity',\n 'date'\n ],\n [\n 'investment',\n 'number++'\n ],\n [\n 'discount',\n 'number++'\n ],\n [\n 'basis',\n [\n 'or',\n [\n 'null',\n 0\n ],\n [\n 'and',\n 'integer',\n [\n 'values',\n 0,\n 1,\n 2,\n 3,\n 4\n ]\n ]\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$settlement < $maturity',\n 'NUM'\n ]\n ]\n ]);\n defineFunction('PRICE', PRICE).args([\n [\n 'settlement',\n 'date'\n ],\n [\n 'maturity',\n 'date'\n ],\n [\n 'rate',\n 'number++'\n ],\n [\n 'yld',\n 'number++'\n ],\n [\n 'redemption',\n 'number++'\n ],\n [\n 'frequency',\n [\n 'and',\n 'integer',\n [\n 'values',\n 1,\n 2,\n 4\n ]\n ]\n ],\n [\n 'basis',\n [\n 'or',\n [\n 'null',\n 0\n ],\n [\n 'and',\n 'integer',\n [\n 'values',\n 0,\n 1,\n 2,\n 3,\n 4\n ]\n ]\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$settlement < $maturity',\n 'NUM'\n ]\n ]\n ]);\n defineFunction('PRICEDISC', PRICEDISC).args([\n [\n 'settlement',\n 'date'\n ],\n [\n 'maturity',\n 'date'\n ],\n [\n 'discount',\n 'number++'\n ],\n [\n 'redemption',\n 'number++'\n ],\n [\n 'basis',\n [\n 'or',\n [\n 'null',\n 0\n ],\n [\n 'and',\n 'integer',\n [\n 'values',\n 0,\n 1,\n 2,\n 3,\n 4\n ]\n ]\n ]\n ],\n [\n '?',\n [\n 'assert',\n '$settlement < $maturity',\n 'NUM'\n ]\n ]\n ]);\n var MAX_IT = 300, EPS = 2.2204e-16, FP_MIN = 1e-30, f_abs = Math.abs;\n function ERF(x) {\n if (f_abs(x) >= 3.3) {\n return 1 - ERFC(x);\n }\n var S = x > 0 ? 1 : -1;\n if (S == -1) {\n x = -x;\n }\n var m = 0, an = 1;\n for (var n = 1; n < 100; n++) {\n m += an;\n an *= 2 * x * x / (2 * n + 1);\n }\n return S * 2 / Math.sqrt(Math.PI) * x * Math.exp(-x * x) * m;\n }\n function ERFC(x) {\n if (f_abs(x) < 3.3) {\n return 1 - ERF(x);\n }\n var s = 1;\n if (x < 0) {\n s = -1;\n x = -x;\n }\n var frac = x;\n for (var n = 8; n >= 1; n -= 0.5) {\n frac = x + n / frac;\n }\n frac = 1 / (x + frac);\n return s == 1 ? Math.exp(-x * x) / Math.sqrt(Math.PI) * frac : 2 - Math.exp(-x * x) / Math.sqrt(Math.PI) * frac;\n }\n function GAMMALN(x) {\n var cof = [\n 1.000000000190015,\n 76.18009172947146,\n -86.50532032941678,\n 24.01409824083091,\n -1.231739572450155,\n 0.001208650973866179,\n -0.000005395239384953\n ];\n var y = x, tmp = x + 5.5, ser = cof[0];\n tmp -= (x + 0.5) * Math.log(tmp);\n for (var j = 1; j <= 6; j++) {\n y += 1;\n ser += cof[j] / y;\n }\n return -tmp + Math.log(Math.sqrt(2 * Math.PI) * ser / x);\n }\n function GAMMA(x) {\n if (x > 0) {\n return Math.exp(GAMMALN(x));\n }\n var pi = Math.PI, y = -x;\n return -pi / (y * GAMMA(y) * Math.sin(pi * y));\n }\n function BETALN(a, b) {\n return GAMMALN(a) + GAMMALN(b) - GAMMALN(a + b);\n }\n function BETA(a, b) {\n return Math.exp(BETALN(a, b));\n }\n function gamma_inc(a, x) {\n return x < a + 1 ? g_series(a, x) : 1 - g_contfrac(a, x);\n }\n function g_series(a, x) {\n var sum = 1 / a, frac = sum, ap = a;\n var gln = GAMMALN(a), n;\n for (n = 1; n <= MAX_IT; n++) {\n ap++;\n frac *= x / ap;\n sum += frac;\n if (f_abs(frac) < f_abs(sum) * EPS) {\n break;\n }\n }\n return sum * Math.exp(-x + a * Math.log(x) - gln);\n }\n function g_contfrac(a, x) {\n var f = FP_MIN, c = f, d = 0, aj = 1, bj = x + 1 - a;\n var gln = GAMMALN(a);\n for (var i = 1; i <= MAX_IT; i++) {\n d = bj + aj * d;\n if (f_abs(d) < FP_MIN) {\n d = FP_MIN;\n }\n c = bj + aj / c;\n if (f_abs(c) < FP_MIN) {\n c = FP_MIN;\n }\n d = 1 / d;\n var delta = c * d;\n f *= delta;\n if (f_abs(delta - 1) < EPS) {\n break;\n }\n bj += 2;\n aj = -i * (i - a);\n }\n return f * Math.exp(-x - gln + a * Math.log(x));\n }\n function GAMMA_DIST(x, a, b, cumulative) {\n if (!cumulative) {\n return Math.pow(x / b, a - 1) * Math.exp(-x / b) / (b * GAMMA(a));\n }\n return gamma_inc(a, x / b);\n }\n function GAMMA_INV(p, a, b) {\n if (p === 0) {\n return 0;\n }\n if (p == 1) {\n return Infinity;\n }\n var m = 0, M = 10, x = 0, ab = a * b;\n if (ab > 1) {\n M *= ab;\n }\n for (var i = 0; i < MAX_IT; i++) {\n x = 0.5 * (m + M);\n var q = GAMMA_DIST(x, a, b, true);\n if (f_abs(p - q) < 1e-16) {\n break;\n }\n if (q > p) {\n M = x;\n } else {\n m = x;\n }\n }\n return x;\n }\n function NORM_S_DIST(x, cumulative) {\n if (!cumulative) {\n return Math.exp(-x * x / 2) / Math.sqrt(2 * Math.PI);\n }\n return 0.5 + 0.5 * ERF(x / Math.sqrt(2));\n }\n function NORM_S_INV(p) {\n var a = [\n -39.69683028665376,\n 220.9460984245205,\n -275.9285104469687,\n 138.357751867269,\n -30.66479806614716,\n 2.506628277459239\n ], b = [\n -54.47609879822406,\n 161.5858368580409,\n -155.6989798598866,\n 66.80131188771972,\n -13.28068155288572\n ], c = [\n -0.007784894002430293,\n -0.3223964580411365,\n -2.400758277161838,\n -2.549732539343734,\n 4.374664141464968,\n 2.938163982698783\n ], d = [\n 0.007784695709041462,\n 0.3224671290700398,\n 2.445134137142996,\n 3.754408661907416\n ];\n var plow = 0.02425, phigh = 1 - plow;\n var q, r;\n if (p < plow) {\n q = Math.sqrt(-2 * Math.log(p));\n return (((((c[0] * q + c[1]) * q + c[2]) * q + c[3]) * q + c[4]) * q + c[5]) / ((((d[0] * q + d[1]) * q + d[2]) * q + d[3]) * q + 1);\n }\n if (phigh < p) {\n q = Math.sqrt(-2 * Math.log(1 - p));\n return -(((((c[0] * q + c[1]) * q + c[2]) * q + c[3]) * q + c[4]) * q + c[5]) / ((((d[0] * q + d[1]) * q + d[2]) * q + d[3]) * q + 1);\n }\n q = p - 0.5;\n r = q * q;\n return (((((a[0] * r + a[1]) * r + a[2]) * r + a[3]) * r + a[4]) * r + a[5]) * q / (((((b[0] * r + b[1]) * r + b[2]) * r + b[3]) * r + b[4]) * r + 1);\n }\n function NORM_DIST(x, m, s, cumulative) {\n if (!cumulative) {\n return Math.exp(-(x - m) * (x - m) / (2 * s * s)) / (s * Math.sqrt(2 * Math.PI));\n }\n return NORM_S_DIST((x - m) / s, true);\n }\n function NORM_INV(p, m, s) {\n return m + s * NORM_S_INV(p);\n }\n function betastd_pdf(x, a, b) {\n return Math.exp((a - 1) * Math.log(x) + (b - 1) * Math.log(1 - x) - BETALN(a, b));\n }\n function betastd_cdf(x, a, b) {\n var k = Math.exp(a * Math.log(x) + b * Math.log(1 - x) - BETALN(a, b));\n return x < (a + 1) / (a + b + 2) ? k * beta_lentz(a, b, x) / a : 1 - k * beta_lentz(b, a, 1 - x) / b;\n }\n function beta_lentz(a, b, x) {\n var m, m2;\n var aa, c, d, del, h, qab, qam, qap;\n qab = a + b;\n qap = a + 1;\n qam = a - 1;\n c = 1;\n d = 1 - qab * x / qap;\n if (f_abs(d) < FP_MIN) {\n d = FP_MIN;\n }\n d = 1 / d;\n h = d;\n for (m = 1; m <= MAX_IT; m++) {\n m2 = 2 * m;\n aa = m * (b - m) * x / ((qam + m2) * (a + m2));\n d = 1 + aa * d;\n if (f_abs(d) < FP_MIN) {\n d = FP_MIN;\n }\n c = 1 + aa / c;\n if (f_abs(c) < FP_MIN) {\n c = FP_MIN;\n }\n d = 1 / d;\n h *= d * c;\n aa = -(a + m) * (qab + m) * x / ((a + m2) * (qap + m2));\n d = 1 + aa * d;\n if (f_abs(d) < FP_MIN) {\n d = FP_MIN;\n }\n c = 1 + aa / c;\n if (f_abs(c) < FP_MIN) {\n c = FP_MIN;\n }\n d = 1 / d;\n del = d * c;\n h *= del;\n if (f_abs(del - 1) < EPS) {\n break;\n }\n }\n return h;\n }\n function betastd_inv(p, a, b) {\n var m = 0, M = 1, x = 0;\n for (var i = 0; i < MAX_IT; i++) {\n x = 0.5 * (m + M);\n var q = betastd_cdf(x, a, b);\n if (f_abs(p - q) < EPS) {\n break;\n }\n if (q > p) {\n M = x;\n } else {\n m = x;\n }\n }\n return x;\n }\n function BETADIST(x, a, b, m, M) {\n return betastd_cdf((x - m) / (M - m), a, b);\n }\n function BETA_DIST(x, a, b, cdf, m, M) {\n if (cdf) {\n return betastd_cdf((x - m) / (M - m), a, b);\n }\n return betastd_pdf((x - m) / (M - m), a, b) / (M - m);\n }\n function BETA_INV(p, a, b, m, M) {\n return m + (M - m) * betastd_inv(p, a, b);\n }\n function chisq_left(x, n, cds) {\n return GAMMA_DIST(x, n / 2, 2, cds);\n }\n function chisq_right(x, n) {\n return 1 - chisq_left(x, n, true);\n }\n function chisq_left_inv(p, n) {\n return GAMMA_INV(p, n / 2, 2);\n }\n function chisq_right_inv(p, n) {\n return chisq_left_inv(1 - p, n);\n }\n function chisq_test(obsv, expect) {\n var rows = obsv.length, cols = obsv[0].length;\n var x = 0, i, j;\n for (i = 0; i < rows; i++) {\n for (j = 0; j < cols; j++) {\n var eij = expect[i][j];\n var delta = obsv[i][j] - eij;\n delta *= delta;\n x += delta / eij;\n }\n }\n var n = (rows - 1) * (cols - 1);\n return chisq_right(x, n);\n }\n function expon(x, r, cdf) {\n if (cdf) {\n return 1 - Math.exp(-r * x);\n }\n return r * Math.exp(-r * x);\n }\n function poisson(k, m, cdf) {\n if (cdf) {\n return 1 - chisq_left(2 * m, 2 * (k + 1), true);\n }\n var lnf = 0;\n for (var i = 2; i <= k; i++) {\n lnf += Math.log(i);\n }\n return Math.exp(k * Math.log(m) - m - lnf);\n }\n function Fdist(x, n, d, cdf) {\n if (cdf) {\n return betastd_cdf(n * x / (d + n * x), n / 2, d / 2);\n }\n var u = n / d;\n n /= 2;\n d /= 2;\n return u / BETA(n, d) * Math.pow(u * x, n - 1) / Math.pow(1 + u * x, n + d);\n }\n function Fdist_right(x, n, d) {\n return 1 - Fdist(x, n, d, true);\n }\n function Finv_right(p, n, d) {\n return d / n * (1 / BETA_INV(p, d / 2, n / 2, 0, 1) - 1);\n }\n function Finv(p, n, d) {\n return d / n * (1 / BETA_INV(1 - p, d / 2, n / 2, 0, 1) - 1);\n }\n function _mean(arr) {\n var me = 0, n = arr.length;\n for (var i = 0; i < n; i++) {\n me += arr[i];\n }\n return me / n;\n }\n function _var_sq(arr, m) {\n var v = 0, n = arr.length;\n for (var i = 0; i < n; i++) {\n var delta = arr[i] - m;\n v += delta * delta;\n }\n return v / (n - 1);\n }\n function Ftest(arr1, arr2) {\n var n1 = arr1.length - 1, n2 = arr2.length - 1;\n var va1 = _var_sq(arr1, _mean(arr1)), va2 = _var_sq(arr2, _mean(arr2));\n if (!va1 || !va2) {\n throw new CalcError('DIV/0');\n }\n return 2 * Fdist(va1 / va2, n1, n2, true);\n }\n function fisher(x) {\n return 0.5 * Math.log((1 + x) / (1 - x));\n }\n function fisherinv(x) {\n var e2 = Math.exp(2 * x);\n return (e2 - 1) / (e2 + 1);\n }\n function Tdist(x, n, cdf) {\n if (cdf) {\n return 1 - 0.5 * betastd_cdf(n / (x * x + n), n / 2, 0.5);\n }\n return 1 / (Math.sqrt(n) * BETA(0.5, n / 2)) * Math.pow(1 + x * x / n, -(n + 1) / 2);\n }\n function Tdist_right(x, n) {\n return 1 - Tdist(x, n, true);\n }\n function Tdist_2tail(x, n) {\n if (x < 0) {\n x = -x;\n }\n return 2 * Tdist_right(x, n);\n }\n function Tdist_inv(p, n) {\n var x = betastd_inv(2 * Math.min(p, 1 - p), n / 2, 0.5);\n x = Math.sqrt(n * (1 - x) / x);\n return p > 0.5 ? x : -x;\n }\n function Tdist_2tail_inv(p, n) {\n return Tdist_inv(1 - p / 2, n);\n }\n function Tdist_test(gr1, gr2, tail, type) {\n var n1 = gr1.length, n2 = gr2.length;\n var t_st, df;\n if (type == 1) {\n var d = 0, d2 = 0;\n for (var i = 0; i < n1; i++) {\n var delta = gr1[i] - gr2[i];\n d += delta;\n d2 += delta * delta;\n }\n var md = d / n1;\n t_st = md / Math.sqrt((d2 - d * md) / (n1 * (n1 - 1)));\n return tail == 1 ? Tdist_right(t_st, n1 - 1) : Tdist_2tail(t_st, n1 - 1);\n }\n var m1 = _mean(gr1), m2 = _mean(gr2), v1 = _var_sq(gr1, m1), v2 = _var_sq(gr2, m2);\n if (type == 3) {\n var u1 = v1 / n1, u2 = v2 / n2, u = u1 + u2;\n var q1 = u1 / u, q2 = u2 / u;\n df = 1 / (q1 * q1 / (n1 - 1) + q2 * q2 / (n2 - 1));\n t_st = f_abs(m1 - m2) / Math.sqrt(u);\n return tail == 1 ? Tdist_right(t_st, df) : Tdist_2tail(t_st, df);\n } else {\n df = n1 + n2 - 2;\n t_st = f_abs(m1 - m2) * Math.sqrt(df * n1 * n2 / ((n1 + n2) * ((n1 - 1) * v1 + (n2 - 1) * v2)));\n return tail == 1 ? Tdist_right(t_st, df) : Tdist_2tail(t_st, df);\n }\n }\n function confidence_t(alpha, stddev, size) {\n return -Tdist_inv(alpha / 2, size - 1) * stddev / Math.sqrt(size);\n }\n function confidence_norm(alpha, stddev, size) {\n return -NORM_S_INV(alpha / 2) * stddev / Math.sqrt(size);\n }\n function gauss(z) {\n return NORM_S_DIST(z, true) - 0.5;\n }\n function phi(x) {\n return NORM_S_DIST(x);\n }\n function lognorm_dist(x, m, s, cumulative) {\n if (cumulative) {\n return 0.5 + 0.5 * ERF((Math.log(x) - m) / (s * Math.sqrt(2)));\n }\n var t = Math.log(x) - m;\n return Math.exp(-t * t / (2 * s * s)) / (x * s * Math.sqrt(2 * Math.PI));\n }\n function lognorm_inv(p, m, s) {\n return Math.exp(NORM_INV(p, m, s));\n }\n function prob(x_, p_, lw, up) {\n var n = x_.length;\n var s = 0, i;\n for (i = 0; i < n; i++) {\n if (p_[i] <= 0 || p_[i] > 1) {\n throw new CalcError('NUM');\n }\n s += p_[i];\n }\n if (s != 1) {\n throw new CalcError('NUM');\n }\n var res = 0;\n for (i = 0; i < n; i++) {\n var x = x_[i];\n if (x >= lw && x <= up) {\n res += p_[i];\n }\n }\n return res;\n }\n function slope(y_, x_) {\n var mx = _mean(x_), my = _mean(y_), b1 = 0, b2 = 0;\n for (var i = 0, n = y_.length; i < n; i++) {\n var t = x_[i] - mx;\n b1 += t * (y_[i] - my);\n b2 += t * t;\n }\n return b1 / b2;\n }\n function intercept(y_, x_) {\n var mx = _mean(x_), my = _mean(y_);\n var b1 = 0, b2 = 0;\n for (var i = 0, n = y_.length; i < n; i++) {\n var t = x_[i] - mx;\n b1 += t * (y_[i] - my);\n b2 += t * t;\n }\n return my - b1 * mx / b2;\n }\n function pearson(x_, y_) {\n var mx = _mean(x_), my = _mean(y_);\n var s1 = 0, s2 = 0, s3 = 0;\n for (var i = 0, n = x_.length; i < n; i++) {\n var t1 = x_[i] - mx, t2 = y_[i] - my;\n s1 += t1 * t2;\n s2 += t1 * t1;\n s3 += t2 * t2;\n }\n return s1 / Math.sqrt(s2 * s3);\n }\n function rsq(x_, y_) {\n var r = pearson(x_, y_);\n return r * r;\n }\n function steyx(y_, x_) {\n var n = x_.length;\n var mx = _mean(x_), my = _mean(y_);\n var s1 = 0, s2 = 0, s3 = 0;\n for (var i = 0; i < n; i++) {\n var t1 = x_[i] - mx, t2 = y_[i] - my;\n s1 += t2 * t2;\n s2 += t1 * t2;\n s3 += t1 * t1;\n }\n return Math.sqrt((s1 - s2 * s2 / s3) / (n - 2));\n }\n function forecast(x, y_, x_) {\n var mx = _mean(x_), my = _mean(y_);\n var s1 = 0, s2 = 0;\n for (var i = 0, n = x_.length; i < n; i++) {\n var t1 = x_[i] - mx, t2 = y_[i] - my;\n s1 += t1 * t2;\n s2 += t1 * t1;\n }\n if (s2 === 0) {\n throw new CalcError('N/A');\n }\n var b = s1 / s2, a = my - b * mx;\n return a + b * x;\n }\n function _mat_mean(Mat) {\n var n = Mat.height, sum = 0;\n for (var i = 0; i < n; i++) {\n sum += Mat.data[i][0];\n }\n return sum / n;\n }\n function _mat_devsq(Mat, mean) {\n var n = Mat.height, sq = 0;\n for (var i = 0; i < n; i++) {\n var x = Mat.data[i][0] - mean;\n sq += x * x;\n }\n return sq;\n }\n function linest(Y, X, konst, stats) {\n var i = 0;\n if (!X) {\n X = Y.map(function () {\n return ++i;\n });\n }\n if (konst) {\n X = X.clone();\n X.eachRow(function (row) {\n X.data[row].unshift(1);\n });\n ++X.width;\n }\n var Xt = X.transpose();\n var B = Xt.multiply(X).inverse().multiply(Xt).multiply(Y);\n var line_1 = [];\n for (i = B.height - 1; i >= 0; i--) {\n line_1.push(B.data[i][0]);\n }\n if (!konst) {\n line_1.push(0);\n }\n if (!stats) {\n return this.asMatrix([line_1]);\n }\n var Y1 = X.multiply(B);\n var y_y1 = Y.adds(Y1, true);\n var mp = !konst ? 0 : _mat_mean(Y1);\n var SSreg = _mat_devsq(Y1, mp);\n var me = !konst ? 0 : _mat_mean(y_y1);\n var SSresid = _mat_devsq(y_y1, me);\n var line_5 = [];\n line_5.push(SSreg, SSresid);\n var R2 = SSreg / (SSreg + SSresid);\n var degfre = Y.height - X.width;\n var err_est = Math.sqrt(SSresid / degfre);\n var line_3 = [];\n line_3.push(R2, err_est);\n var F_sta = !konst ? R2 / X.width / ((1 - R2) / degfre) : SSreg / (X.width - 1) / (SSresid / degfre);\n var line_4 = [];\n line_4.push(F_sta, degfre);\n var SCP = Xt.multiply(X).inverse();\n var line_2 = [];\n for (i = SCP.height - 1; i >= 0; i--) {\n line_2.push(Math.sqrt(SCP.data[i][i] * SSresid / degfre));\n }\n return this.asMatrix([\n line_1,\n line_2,\n line_3,\n line_4,\n line_5\n ]);\n }\n function logest(Y, X, konst, stats) {\n return linest.call(this, Y.map(Math.log), X, konst, stats).map(Math.exp);\n }\n function trend(Y, X, W, konst) {\n var i = 0;\n if (!X) {\n X = Y.map(function () {\n return ++i;\n });\n }\n if (konst) {\n X = X.clone();\n X.eachRow(function (row) {\n X.data[row].unshift(1);\n });\n ++X.width;\n }\n var Xt = X.transpose();\n var B = Xt.multiply(X).inverse().multiply(Xt).multiply(Y);\n if (!W) {\n W = X;\n } else {\n if (konst) {\n W = W.clone();\n W.eachRow(function (row) {\n W.data[row].unshift(1);\n });\n ++W.width;\n }\n }\n return W.multiply(B);\n }\n function growth(Y, X, new_X, konst) {\n return trend.call(this, Y.map(Math.log), X, new_X, konst).map(Math.exp);\n }\n function root_newton(func, guess, max_it, eps) {\n var MAX_IT = max_it || 20, EPS = eps || 1e-7;\n var root = guess;\n for (var j = 1; j <= MAX_IT; j++) {\n var f_d = func(root), f = f_d[0], df = f_d[1];\n var dx = f / df;\n root -= dx;\n if (Math.abs(dx) < EPS) {\n return root;\n }\n }\n return new CalcError('NUM');\n }\n function FV(rate, nper, pmt, pv, type) {\n var h1 = Math.pow(1 + rate, nper);\n var h2 = rate ? (h1 - 1) / rate : nper;\n return -(pv * h1 + pmt * h2 * (1 + rate * type));\n }\n function PV(rate, nper, pmt, fv, type) {\n if (!rate) {\n return -fv - pmt * nper;\n }\n var h1 = Math.pow(1 + rate, nper);\n return -(fv + pmt * (h1 - 1) / rate * (1 + rate * type)) / h1;\n }\n function PMT(rate, nper, pv, fv, type) {\n if (!rate) {\n return -(fv + pv) / nper;\n }\n var h1 = Math.pow(1 + rate, nper);\n return -rate * (fv + pv * h1) / ((1 + rate * type) * (h1 - 1));\n }\n function NPER(rate, pmt, pv, fv, type) {\n if (!rate) {\n return -(fv + pv) / pmt;\n }\n var h1 = pmt * (1 + rate * type);\n return Math.log((h1 - fv * rate) / (h1 + pv * rate)) / Math.log(1 + rate);\n }\n function RATE(nper, pmt, pv, fv, type, guess) {\n function xfd(x) {\n var h2 = Math.pow(1 + x, nper - 1), h1 = h2 * (1 + x);\n return [\n pv * h1 + pmt * (1 / x + type) * (h1 - 1) + fv,\n nper * pv * h2 + pmt * (-(h1 - 1) / (x * x) + (1 / x + type) * nper * h2)\n ];\n }\n return root_newton(xfd, guess);\n }\n function IPMT(rate, per, nper, pv, fv, type) {\n if (type == 1 && per == 1) {\n return 0;\n }\n var pmt = PMT(rate, nper, pv, fv, type);\n var ipmt = FV(rate, per - 1, pmt, pv, type) * rate;\n return type ? ipmt / (1 + rate) : ipmt;\n }\n function PPMT(rate, per, nper, pv, fv, type) {\n var pmt = PMT(rate, nper, pv, fv, type);\n return pmt - IPMT(rate, per, nper, pv, fv, type);\n }\n function CUMPRINC(rate, nper, pv, start, end, type) {\n if (type == 1) {\n start--;\n end--;\n }\n var tn = Math.pow(1 + rate, nper), ts = Math.pow(1 + rate, start - 1), te = Math.pow(1 + rate, end);\n var monthlyPayment = rate * pv * tn / (tn - 1);\n var remainingBalanceAtStart = ts * pv - (ts - 1) / rate * monthlyPayment;\n var remainingBalanceAtEnd = te * pv - (te - 1) / rate * monthlyPayment;\n return remainingBalanceAtEnd - remainingBalanceAtStart;\n }\n function CUMIPMT(rate, nper, pv, start, end, type) {\n var cip = 0;\n for (var i = start; i <= end; i++) {\n cip += IPMT(rate, i, nper, pv, 0, type);\n }\n return cip;\n }\n function NPV(rate, flows) {\n var npv = 0;\n for (var i = 0, n = flows.length; i < n; i++) {\n npv += flows[i] * Math.pow(1 + rate, -i - 1);\n }\n return npv;\n }\n function IRR(flows, guess) {\n function xfd(x) {\n var npv = 0, npv1 = 0;\n for (var j = 0, n = flows.length; j < n; j++) {\n npv += flows[j] * Math.pow(1 + x, -j - 1);\n npv1 += -j * flows[j] * Math.pow(1 + x, -j - 2);\n }\n return [\n npv,\n npv1\n ];\n }\n return root_newton(xfd, guess);\n }\n function EFFECT(nominal_rate, npery) {\n return Math.pow(1 + nominal_rate / npery, npery) - 1;\n }\n function NOMINAL(effect_rate, npery) {\n return npery * (Math.pow(effect_rate + 1, 1 / npery) - 1);\n }\n function XNPV(rate, values, dates) {\n var npv = 0;\n for (var i = 0, n = values.length; i < n; i++) {\n npv += values[i] * Math.pow(1 + rate, (dates[0] - dates[i]) / 365);\n }\n return npv;\n }\n function XIRR(values, dates, guess) {\n function xfd(x) {\n var npv = values[0], npv1 = 0;\n for (var j = 1, n = values.length; j < n; j++) {\n var delta = (dates[0] - dates[j]) / 365;\n npv += values[j] * Math.pow(1 + x, delta);\n npv1 += delta * values[j] * Math.pow(1 + x, delta - 1);\n }\n return [\n npv,\n npv1\n ];\n }\n return root_newton(xfd, guess);\n }\n function ISPMT(rate, per, nper, pv) {\n var tmp = -pv * rate;\n return tmp * (1 - per / nper);\n }\n function DB(cost, salvage, life, period, month) {\n var rate = 1 - Math.pow(salvage / cost, 1 / life);\n rate = Math.floor(rate * 1000 + 0.5) / 1000;\n var db = cost * rate * month / 12;\n if (period == 1) {\n return db;\n }\n for (var i = 1; i < life; i++) {\n if (i == period - 1) {\n return (cost - db) * rate;\n }\n db += (cost - db) * rate;\n }\n return (cost - db) * rate * (12 - month) / 12;\n }\n function DDB(cost, salvage, life, period, factor) {\n var f = factor / life;\n var prior = -cost * (Math.pow(1 - f, period - 1) - 1);\n var dep = (cost - prior) * f;\n dep = Math.min(dep, Math.max(0, cost - prior - salvage));\n return dep;\n }\n function SLN(cost, salvage, life) {\n return (cost - salvage) / life;\n }\n function SYD(cost, salvage, life, per) {\n return (cost - salvage) * (life - per + 1) * 2 / (life * (life + 1));\n }\n function VDB(cost, salvage, life, start, end, factor, no_switch) {\n var interest = factor >= life ? 1 : factor / life;\n function _getGDA(value, period) {\n var gda, oldValue, newValue;\n if (interest == 1) {\n oldValue = period == 1 ? value : 0;\n } else {\n oldValue = value * Math.pow(1 - interest, period - 1);\n }\n newValue = value * Math.pow(1 - interest, period);\n gda = newValue < salvage ? oldValue - salvage : oldValue - newValue;\n return gda < 0 ? 0 : gda;\n }\n function _interVDB(cost, life1, period) {\n var remValue = cost - salvage;\n var intEnd = Math.ceil(period);\n var term, lia = 0, vdb = 0, nowLia = false;\n for (var i = 1; i <= intEnd; i++) {\n if (!nowLia) {\n var gda = _getGDA(cost, i);\n lia = remValue / (life1 - i + 1);\n if (lia > gda) {\n term = lia;\n nowLia = true;\n } else {\n term = gda;\n remValue -= gda;\n }\n } else {\n term = lia;\n }\n if (i == intEnd) {\n term *= period + 1 - intEnd;\n }\n vdb += term;\n }\n return vdb;\n }\n var intStart = Math.floor(start), intEnd = Math.ceil(end);\n var vdb = 0;\n if (no_switch) {\n for (var i = intStart + 1; i <= intEnd; i++) {\n var term = _getGDA(cost, i);\n if (i == intStart + 1) {\n term *= Math.min(end, intStart + 1) - start;\n } else {\n if (i == intEnd) {\n term *= end + 1 - intEnd;\n }\n }\n vdb += term;\n }\n } else {\n var life1 = life;\n if (start != Math.floor(start)) {\n if (factor > 1) {\n if (start >= life / 2) {\n var part = start - life / 2;\n start = life / 2;\n end -= part;\n life1 += 1;\n }\n }\n }\n cost -= _interVDB(cost, life1, start);\n vdb = _interVDB(cost, life - start, end - start);\n }\n return vdb;\n }\n function _edate(base, months) {\n var d = unpackDate(base);\n var m = d.month + months;\n var y = d.year + Math.floor(m / 12);\n m %= 12;\n if (m < 0) {\n m += 12;\n }\n d = Math.min(d.date, daysInMonth(y, m));\n return packDate(y, m, d);\n }\n function _daysBetween(from, to, basis) {\n if (basis == 1 || basis == 2 || basis == 3) {\n return to - from;\n }\n return _days_360(from, to, basis);\n }\n function _borderCoupons(settlement, maturity, freq) {\n var sett = unpackDate(settlement), base = unpackDate(maturity);\n var periods = base.year - sett.year;\n if (periods > 0) {\n periods = (periods - 1) * freq;\n }\n var prev, next, months = 12 / freq;\n do {\n periods++;\n prev = _edate(maturity, -periods * months);\n } while (settlement < prev);\n periods--;\n next = _edate(maturity, -periods * months);\n return [\n prev,\n next\n ];\n }\n function _borderCoupons_fw(first, settlement, freq) {\n var sett = unpackDate(settlement), base = unpackDate(first);\n var periods = sett.year - base.year;\n if (periods > 0) {\n periods = (periods - 1) * freq;\n }\n var prev = first, next, months = 12 / freq;\n while (settlement > prev) {\n next = prev;\n periods++;\n prev = _edate(first, periods * months);\n }\n return [\n next,\n prev\n ];\n }\n function COUPDAYBS(settlement, maturity, frequency, basis) {\n var prev = _borderCoupons(settlement, maturity, frequency)[0];\n return _daysBetween(prev, settlement, basis);\n }\n function COUPDAYS(settl, matur, freq, basis) {\n if (basis == 1) {\n var borders = _borderCoupons(settl, matur, freq);\n return _daysBetween(borders[0], borders[1], 1);\n }\n if (basis == 3) {\n return 365 / freq;\n }\n return 360 / freq;\n }\n function COUPDAYSNC(settl, matur, freq, basis) {\n var next = _borderCoupons(settl, matur, freq)[1];\n return _daysBetween(settl, next, basis);\n }\n function COUPPCD(settl, matur, freq) {\n return _borderCoupons(settl, matur, freq)[0];\n }\n function COUPNCD(settl, matur, freq) {\n return _borderCoupons(settl, matur, freq)[1];\n }\n function COUPNUM(settl, matur, freq) {\n var sett = unpackDate(settl), mat = unpackDate(matur);\n var months = 12 * (mat.year - sett.year) + mat.month - sett.month;\n return 1 + (months * freq / 12 | 0);\n }\n function daysInYear(yr, basis) {\n if (basis == 3) {\n return 365;\n }\n if (basis == 1) {\n return isLeapYear(yr) ? 366 : 365;\n }\n return 360;\n }\n function ACCRINTM(issue, maturity, rate, par, basis) {\n var year_days = daysInYear(unpackDate(maturity).year, basis);\n return rate * par * _daysBetween(issue, maturity, basis) / year_days;\n }\n function ACCRINT(issue, first, settl, rate, par, freq, basis, calc) {\n var accr = 0, cost = par * rate / freq;\n var brace, prev, next, prev1, next1, nrc;\n var annual = basis % 2 === 0 ? 360 : 365;\n function _numCoupons(from, to) {\n return (to - from) * freq / annual | 0;\n }\n if (settl <= first) {\n brace = _borderCoupons(settl, first, freq);\n prev = brace[0];\n next = brace[1];\n if (prev <= issue) {\n return cost * _daysBetween(issue, settl, basis) / _daysBetween(prev, next, basis);\n }\n brace = _borderCoupons(issue, prev, freq);\n prev1 = brace[0];\n next1 = brace[1];\n nrc = _numCoupons(next1, settl);\n return cost * (nrc + _daysBetween(issue, next1, basis) / _daysBetween(prev1, next1, basis) + (settl < next ? _daysBetween(prev, settl, basis) / _daysBetween(prev, next, basis) : 0));\n } else {\n brace = _borderCoupons_fw(first, settl, freq);\n prev = brace[0];\n next = brace[1];\n nrc = _numCoupons(first, settl);\n if (next == settl) {\n accr = cost * nrc;\n } else {\n accr = cost * (nrc + _daysBetween(prev, settl, basis) / _daysBetween(prev, next, basis));\n }\n if (!calc) {\n return accr;\n }\n brace = _borderCoupons(issue, first, freq);\n prev = brace[0];\n next = brace[1];\n nrc = _numCoupons(issue, first);\n accr += cost * (nrc + _daysBetween(issue, next, basis) / _daysBetween(prev, next, basis));\n return accr;\n }\n }\n function DISC(settl, matur, pr, redemption, basis) {\n var annual = basis % 2 === 0 ? 360 : isLeapYear(unpackDate(settl).year) ? 366 : 365;\n return (redemption - pr) / redemption * annual / _daysBetween(settl, matur, basis);\n }\n function INTRATE(settl, matur, investment, redemption, basis) {\n var annual = basis % 2 === 0 ? 360 : isLeapYear(unpackDate(settl).year) ? 366 : 365;\n return (redemption - investment) / investment * annual / _daysBetween(settl, matur, basis);\n }\n function RECEIVED(settl, matur, investment, discount, basis) {\n var annual = basis % 2 === 0 ? 360 : isLeapYear(unpackDate(settl).year) ? 366 : 365;\n return investment / (1 - discount * _daysBetween(settl, matur, basis) / annual);\n }\n function PRICE(settl, matur, rate, yld, redemption, freq, basis) {\n var N = 1 + ((matur - settl) * freq / (basis % 2 === 0 ? 360 : 365) | 0);\n var brace = _borderCoupons(settl, matur, freq), prev = brace[0], next = brace[1];\n var beg_settl = _daysBetween(prev, settl, basis), settl_end = _daysBetween(settl, next, basis), beg_end = _daysBetween(prev, next, basis);\n var den = 100 * rate / freq, yf = yld / freq, frac = settl_end / beg_end;\n if (N == 1) {\n return (redemption + den) / (1 + frac * yf) - beg_settl / beg_end * den;\n }\n return redemption / Math.pow(1 + yf, N - 1 + frac) + den * Math.pow(1 + yf, 1 - N - frac) * (Math.pow(1 + yf, N) - 1) / yf - beg_settl / beg_end * den;\n }\n function PRICEDISC(settl, matur, discount, redemption, basis) {\n var dsm = _daysBetween(settl, matur, basis), dy = daysInYear(unpackDate(matur).year, basis);\n return redemption - discount * redemption * dsm / dy;\n }\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/borderpalette', [\n 'kendo.core',\n 'kendo.colorpicker',\n 'kendo.popup'\n ], f);\n}(function () {\n (function (kendo) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var $ = kendo.jQuery;\n var BORDER_TYPES = [\n 'allBorders',\n 'insideBorders',\n 'insideHorizontalBorders',\n 'insideVerticalBorders',\n 'outsideBorders',\n 'leftBorder',\n 'topBorder',\n 'rightBorder',\n 'bottomBorder',\n 'noBorders'\n ];\n var BORDER_PALETTE_MESSAGES = kendo.spreadsheet.messages.borderPalette = {\n allBorders: 'All borders',\n insideBorders: 'Inside borders',\n insideHorizontalBorders: 'Inside horizontal borders',\n insideVerticalBorders: 'Inside vertical borders',\n outsideBorders: 'Outside borders',\n leftBorder: 'Left border',\n topBorder: 'Top border',\n rightBorder: 'Right border',\n bottomBorder: 'Bottom border',\n noBorders: 'No border',\n reset: 'Reset color',\n customColor: 'Custom color...',\n apply: 'Apply',\n cancel: 'Cancel'\n };\n function withPreventDefault(f) {\n return function (e) {\n e.preventDefault();\n return f.apply(this, arguments);\n };\n }\n var ColorChooser = kendo.ui.Widget.extend({\n init: function (element, options) {\n kendo.ui.Widget.call(this, element, options);\n this.element = element;\n this.color = options.color;\n this._resetButton();\n this._colorPalette();\n this._customColorPalette();\n this._customColorButton();\n this.resetButton.on('click', withPreventDefault(this.resetColor.bind(this)));\n this.customColorButton.on('click', withPreventDefault(this.customColor.bind(this)));\n },\n options: { name: 'ColorChooser' },\n events: ['change'],\n destroy: function () {\n kendo.unbind(this.dialog.element.find('.k-action-buttons'));\n this.dialog.destroy();\n this.colorPalette.destroy();\n this.resetButton.off('click');\n this.customColorButton.off('click');\n },\n value: function (value) {\n if (value !== undefined) {\n this.color = value;\n this.customColorButton.find('.k-icon').css('background-color', this.color);\n this.colorPalette.value(null);\n this.flatColorPicker.value(this.color);\n } else {\n return this.color;\n }\n },\n _change: function (value) {\n this.color = value;\n this.trigger('change', { value: value });\n },\n _colorPalette: function () {\n var element = $('<div />', { 'class': 'k-spreadsheet-color-palette' });\n var colorPalette = this.colorPalette = $('<div />').kendoColorPalette({\n palette: [\n '#ffffff',\n '#000000',\n '#d6ecff',\n '#4e5b6f',\n '#7fd13b',\n '#ea157a',\n '#feb80a',\n '#00addc',\n '#738ac8',\n '#1ab39f',\n '#f2f2f2',\n '#7f7f7f',\n '#a7d6ff',\n '#d9dde4',\n '#e5f5d7',\n '#fad0e4',\n '#fef0cd',\n '#c5f2ff',\n '#e2e7f4',\n '#c9f7f1',\n '#d8d8d8',\n '#595959',\n '#60b5ff',\n '#b3bcca',\n '#cbecb0',\n '#f6a1c9',\n '#fee29c',\n '#8be6ff',\n '#c7d0e9',\n '#94efe3',\n '#bfbfbf',\n '#3f3f3f',\n '#007dea',\n '#8d9baf',\n '#b2e389',\n '#f272af',\n '#fed46b',\n '#51d9ff',\n '#aab8de',\n '#5fe7d5',\n '#a5a5a5',\n '#262626',\n '#003e75',\n '#3a4453',\n '#5ea226',\n '#af0f5b',\n '#c58c00',\n '#0081a5',\n '#425ea9',\n '#138677',\n '#7f7f7f',\n '#0c0c0c',\n '#00192e',\n '#272d37',\n '#3f6c19',\n '#750a3d',\n '#835d00',\n '#00566e',\n '#2c3f71',\n '#0c594f'\n ],\n value: this.color,\n change: function (e) {\n this.customColorButton.find('.k-icon').css('background-color', 'transparent');\n this.flatColorPicker.value(null);\n this._change(e.value);\n }.bind(this)\n }).data('kendoColorPalette');\n element.append(colorPalette.wrapper).appendTo(this.element);\n },\n _customColorPalette: function () {\n var element = $('<div />', {\n 'class': 'k-spreadsheet-window',\n 'html': '<div></div>' + '<div class=\\'k-action-buttons\\'>' + '<button class=\\'k-button k-primary\\' data-bind=\\'click: apply\\'>' + BORDER_PALETTE_MESSAGES.apply + '</button>' + '<button class=\\'k-button\\' data-bind=\\'click: close\\'>' + BORDER_PALETTE_MESSAGES.cancel + '</button>' + '</div>'\n });\n var dialog = this.dialog = element.appendTo(document.body).kendoWindow({\n animation: false,\n scrollable: false,\n resizable: false,\n maximizable: false,\n modal: true,\n visible: false,\n width: 268,\n open: function () {\n this.center();\n }\n }).data('kendoWindow');\n dialog.one('activate', function () {\n this.element.find('[data-role=flatcolorpicker]').data('kendoFlatColorPicker')._hueSlider.resize();\n });\n var flatColorPicker = this.flatColorPicker = dialog.element.children().first().kendoFlatColorPicker().data('kendoFlatColorPicker');\n var viewModel = kendo.observable({\n apply: function () {\n this.customColorButton.find('.k-icon').css('background-color', flatColorPicker.value());\n this.colorPalette.value(null);\n this._change(flatColorPicker.value());\n dialog.close();\n }.bind(this),\n close: function () {\n flatColorPicker.value(null);\n dialog.close();\n }\n });\n kendo.bind(dialog.element.find('.k-action-buttons'), viewModel);\n },\n _resetButton: function () {\n this.resetButton = $('<a class=\\'k-button k-reset-color\\' href=\\'#\\'>' + '<span class=\\'k-icon k-i-reset-color\\'></span>' + BORDER_PALETTE_MESSAGES.reset + '</a>').appendTo(this.element);\n },\n _customColorButton: function () {\n this.customColorButton = $('<a class=\\'k-button k-custom-color\\' href=\\'#\\'>' + '<span class=\\'k-icon\\'></span>' + BORDER_PALETTE_MESSAGES.customColor + '</a>').appendTo(this.element);\n },\n resetColor: function () {\n this.colorPalette.value(null);\n this.flatColorPicker.value(null);\n this._change(null);\n },\n customColor: function () {\n this.dialog.open();\n }\n });\n var BorderPalette = kendo.ui.Widget.extend({\n init: function (element, options) {\n kendo.ui.Widget.call(this, element, options);\n this.element = element;\n this.color = '#000';\n this.element.addClass('k-spreadsheet-border-palette');\n this._borderTypePalette();\n this._borderColorPalette();\n this.element.on('click', '.k-spreadsheet-border-type-palette .k-button', withPreventDefault(this._click.bind(this)));\n },\n options: { name: 'BorderPalette' },\n events: ['change'],\n destroy: function () {\n this.colorChooser.destroy();\n this.element.off('click');\n },\n _borderTypePalette: function () {\n var messages = BORDER_PALETTE_MESSAGES;\n var buttons = BORDER_TYPES.map(function (type) {\n return '<a title=\"' + messages[type] + '\" href=\"#\" data-border-type=\"' + type + '\" class=\"k-button k-button-icon\">' + '<span class=\"k-icon k-i-' + kendo.toHyphens(type) + '\"></span>' + '</a>';\n }).join('');\n var element = $('<div />', {\n 'class': 'k-spreadsheet-border-type-palette',\n 'html': buttons\n });\n element.appendTo(this.element);\n },\n _borderColorPalette: function () {\n var element = $('<div />', { 'class': 'k-spreadsheet-border-color-palette' });\n element.appendTo(this.element);\n this.colorChooser = new ColorChooser(element, {\n color: this.color,\n change: this._colorChange.bind(this)\n });\n },\n _click: function (e) {\n this.type = $(e.currentTarget).data('borderType');\n this.trigger('change', {\n type: this.type,\n color: this.color\n });\n },\n _colorChange: function (e) {\n this.color = e.value;\n if (this.type) {\n this.trigger('change', {\n type: this.type,\n color: this.color\n });\n }\n }\n });\n kendo.spreadsheet.ColorChooser = ColorChooser;\n kendo.spreadsheet.BorderPalette = BorderPalette;\n }(window.kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/toolbar', [\n 'kendo.toolbar',\n 'kendo.colorpicker',\n 'kendo.combobox',\n 'kendo.dropdownlist',\n 'kendo.popup',\n 'spreadsheet/borderpalette'\n ], f);\n}(function () {\n (function (kendo) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var $ = kendo.jQuery;\n var ToolBar = kendo.ui.ToolBar;\n var MESSAGES = kendo.spreadsheet.messages.toolbar = {\n addColumnLeft: 'Add column left',\n addColumnRight: 'Add column right',\n addRowAbove: 'Add row above',\n addRowBelow: 'Add row below',\n alignment: 'Alignment',\n alignmentButtons: {\n justtifyLeft: 'Align left',\n justifyCenter: 'Center',\n justifyRight: 'Align right',\n justifyFull: 'Justify',\n alignTop: 'Align top',\n alignMiddle: 'Align middle',\n alignBottom: 'Align bottom'\n },\n backgroundColor: 'Background',\n bold: 'Bold',\n borders: 'Borders',\n colorPicker: {\n reset: 'Reset color',\n customColor: 'Custom color...'\n },\n copy: 'Copy',\n cut: 'Cut',\n deleteColumn: 'Delete column',\n deleteRow: 'Delete row',\n filter: 'Filter',\n fontFamily: 'Font',\n fontSize: 'Font size',\n format: 'Custom format...',\n formatTypes: {\n automatic: 'Automatic',\n number: 'Number',\n percent: 'Percent',\n financial: 'Financial',\n currency: 'Currency',\n date: 'Date',\n time: 'Time',\n dateTime: 'Date time',\n duration: 'Duration',\n moreFormats: 'More formats...'\n },\n formatDecreaseDecimal: 'Decrease decimal',\n formatIncreaseDecimal: 'Increase decimal',\n freeze: 'Freeze panes',\n freezeButtons: {\n freezePanes: 'Freeze panes',\n freezeRows: 'Freeze rows',\n freezeColumns: 'Freeze columns',\n unfreeze: 'Unfreeze panes'\n },\n italic: 'Italic',\n merge: 'Merge cells',\n mergeButtons: {\n mergeCells: 'Merge all',\n mergeHorizontally: 'Merge horizontally',\n mergeVertically: 'Merge vertically',\n unmerge: 'Unmerge'\n },\n open: 'Open...',\n paste: 'Paste',\n quickAccess: {\n redo: 'Redo',\n undo: 'Undo'\n },\n exportAs: 'Export...',\n toggleGridlines: 'Toggle gridlines',\n sortAsc: 'Sort ascending',\n sortDesc: 'Sort descending',\n sortButtons: {\n sortSheetAsc: 'Sort sheet A to Z',\n sortSheetDesc: 'Sort sheet Z to A',\n sortRangeAsc: 'Sort range A to Z',\n sortRangeDesc: 'Sort range Z to A'\n },\n textColor: 'Text Color',\n textWrap: 'Wrap text',\n underline: 'Underline',\n validation: 'Data validation...',\n hyperlink: 'Link'\n };\n var defaultTools = {\n home: [\n 'open',\n 'exportAs',\n [\n 'cut',\n 'copy',\n 'paste'\n ],\n [\n 'bold',\n 'italic',\n 'underline'\n ],\n 'hyperlink',\n 'backgroundColor',\n 'textColor',\n 'borders',\n 'fontSize',\n 'fontFamily',\n 'alignment',\n 'textWrap',\n [\n 'formatDecreaseDecimal',\n 'formatIncreaseDecimal'\n ],\n 'format',\n 'merge',\n 'freeze',\n 'filter',\n 'toggleGridlines'\n ],\n insert: [\n [\n 'addColumnLeft',\n 'addColumnRight',\n 'addRowBelow',\n 'addRowAbove'\n ],\n [\n 'deleteColumn',\n 'deleteRow'\n ]\n ],\n data: [\n 'sort',\n 'filter',\n 'validation'\n ]\n };\n var toolDefaults = {\n open: {\n type: 'open',\n overflow: 'never',\n iconClass: 'file-excel'\n },\n exportAs: {\n type: 'exportAsDialog',\n dialogName: 'exportAs',\n overflow: 'never',\n text: '',\n iconClass: 'file-excel'\n },\n bold: {\n type: 'button',\n command: 'PropertyChangeCommand',\n property: 'bold',\n value: true,\n iconClass: 'bold',\n togglable: true\n },\n italic: {\n type: 'button',\n command: 'PropertyChangeCommand',\n property: 'italic',\n value: true,\n iconClass: 'italic',\n togglable: true\n },\n underline: {\n type: 'button',\n command: 'PropertyChangeCommand',\n property: 'underline',\n value: true,\n iconClass: 'underline',\n togglable: true\n },\n formatDecreaseDecimal: {\n type: 'button',\n command: 'AdjustDecimalsCommand',\n value: -1,\n iconClass: 'decimal-decrease'\n },\n formatIncreaseDecimal: {\n type: 'button',\n command: 'AdjustDecimalsCommand',\n value: +1,\n iconClass: 'decimal-increase'\n },\n textWrap: {\n type: 'button',\n command: 'TextWrapCommand',\n property: 'wrap',\n value: true,\n iconClass: 'text-wrap',\n togglable: true\n },\n cut: {\n type: 'button',\n command: 'ToolbarCutCommand',\n iconClass: 'cut'\n },\n copy: {\n type: 'button',\n command: 'ToolbarCopyCommand',\n iconClass: 'copy'\n },\n paste: {\n type: 'button',\n command: 'ToolbarPasteCommand',\n iconClass: 'paste'\n },\n separator: { type: 'separator' },\n alignment: {\n type: 'alignment',\n iconClass: 'align-left'\n },\n backgroundColor: {\n type: 'colorPicker',\n property: 'background',\n iconClass: 'paint'\n },\n textColor: {\n type: 'colorPicker',\n property: 'color',\n iconClass: 'foreground-color'\n },\n fontFamily: {\n type: 'fontFamily',\n property: 'fontFamily',\n iconClass: 'font-family'\n },\n fontSize: {\n type: 'fontSize',\n property: 'fontSize',\n iconClass: 'font-size'\n },\n format: {\n type: 'format',\n property: 'format',\n iconClass: 'custom-format'\n },\n filter: {\n type: 'filter',\n property: 'hasFilter',\n iconClass: 'filter'\n },\n merge: {\n type: 'merge',\n iconClass: 'cells-merge'\n },\n freeze: {\n type: 'freeze',\n iconClass: 'pane-freeze'\n },\n borders: {\n type: 'borders',\n iconClass: 'borders-all'\n },\n formatCells: {\n type: 'dialog',\n dialogName: 'formatCells',\n overflow: 'never'\n },\n hyperlink: {\n type: 'dialog',\n dialogName: 'hyperlink',\n iconClass: 'link-horizontal',\n overflow: 'never',\n text: ''\n },\n toggleGridlines: {\n type: 'button',\n command: 'GridLinesChangeCommand',\n property: 'gridLines',\n value: true,\n iconClass: 'border-no',\n togglable: true\n },\n addColumnLeft: {\n type: 'button',\n command: 'AddColumnCommand',\n value: 'left',\n iconClass: 'table-column-insert-left'\n },\n addColumnRight: {\n type: 'button',\n command: 'AddColumnCommand',\n value: 'right',\n iconClass: 'table-column-insert-right'\n },\n addRowBelow: {\n type: 'button',\n command: 'AddRowCommand',\n value: 'below',\n iconClass: 'table-row-insert-below'\n },\n addRowAbove: {\n type: 'button',\n command: 'AddRowCommand',\n value: 'above',\n iconClass: 'table-row-insert-above'\n },\n deleteColumn: {\n type: 'button',\n command: 'DeleteColumnCommand',\n iconClass: 'table-column-delete'\n },\n deleteRow: {\n type: 'button',\n command: 'DeleteRowCommand',\n iconClass: 'table-row-delete'\n },\n sort: {\n type: 'sort',\n iconClass: 'sort-desc'\n },\n validation: {\n type: 'dialog',\n dialogName: 'validation',\n iconClass: 'exception',\n overflow: 'never'\n }\n };\n var SpreadsheetToolBar = ToolBar.extend({\n init: function (element, options) {\n options.items = this._expandTools(options.tools || SpreadsheetToolBar.prototype.options.tools[options.toolbarName]);\n ToolBar.fn.init.call(this, element, options);\n var handleClick = this._click.bind(this);\n this.element.addClass('k-spreadsheet-toolbar');\n this._addSeparators(this.element);\n this.bind({\n click: handleClick,\n toggle: handleClick\n });\n },\n _addSeparators: function (element) {\n var groups = element.children('.k-widget, a.k-button, .k-button-group');\n groups.before('<span class=\\'k-separator\\' />');\n },\n _expandTools: function (tools) {\n function expandTool(toolName) {\n var options = $.isPlainObject(toolName) ? toolName : toolDefaults[toolName] || {};\n var spriteCssClass = 'k-icon k-i-' + options.iconClass;\n var type = options.type;\n var typeDefaults = {\n button: { showText: 'overflow' },\n colorPicker: {\n toolIcon: spriteCssClass,\n spriteCssClass: spriteCssClass\n },\n borders: { spriteCssClass: spriteCssClass },\n alignment: { spriteCssClass: spriteCssClass },\n merge: { spriteCssClass: spriteCssClass },\n freeze: { spriteCssClass: spriteCssClass }\n };\n var tool = $.extend({\n name: options.name || toolName,\n text: MESSAGES[options.name || toolName],\n icon: options.iconClass,\n attributes: { title: MESSAGES[options.name || toolName] }\n }, typeDefaults[type], options);\n if (type == 'splitButton') {\n tool.menuButtons = tool.menuButtons.map(expandTool);\n }\n tool.attributes['data-tool'] = toolName;\n if (options.property) {\n tool.attributes['data-property'] = options.property;\n }\n return tool;\n }\n return tools.reduce(function (tools, tool) {\n if ($.isArray(tool)) {\n tools.push({\n type: 'buttonGroup',\n buttons: tool.map(expandTool)\n });\n } else {\n tools.push(expandTool.call(this, tool));\n }\n return tools;\n }, []);\n },\n _click: function (e) {\n var toolName = e.target.attr('data-tool');\n var tool = toolDefaults[toolName] || {};\n var commandType = tool.command;\n if (!commandType) {\n return;\n }\n var args = {\n command: commandType,\n options: {\n property: tool.property || null,\n value: tool.value || null\n }\n };\n if (typeof args.options.value === 'boolean') {\n args.options.value = e.checked ? true : null;\n }\n this.action(args);\n },\n events: [\n 'click',\n 'toggle',\n 'open',\n 'close',\n 'overflowOpen',\n 'overflowClose',\n 'action',\n 'dialog'\n ],\n options: {\n name: 'SpreadsheetToolBar',\n resizable: true,\n tools: defaultTools\n },\n action: function (args) {\n this.trigger('action', args);\n },\n dialog: function (args) {\n this.trigger('dialog', args);\n },\n refresh: function (activeCell) {\n var range = activeCell;\n var tools = this._tools();\n function setToggle(tool, value) {\n var toolbar = tool.toolbar;\n var overflow = tool.overflow;\n var togglable = toolbar && toolbar.options.togglable || overflow && overflow.options.togglable;\n if (!togglable) {\n return;\n }\n var toggle = false;\n if (typeof value === 'boolean') {\n toggle = value;\n } else if (typeof value === 'string') {\n toggle = toolbar.options.value === value;\n }\n toolbar.toggle(toggle);\n if (overflow) {\n overflow.toggle(toggle);\n }\n }\n function update(tool, value) {\n var toolbar = tool.toolbar;\n var overflow = tool.overflow;\n if (toolbar && toolbar.update) {\n toolbar.update(value);\n }\n if (overflow && overflow.update) {\n overflow.update(value);\n }\n }\n for (var i = 0; i < tools.length; i++) {\n var property = tools[i].property;\n var tool = tools[i].tool;\n var value = kendo.isFunction(range[property]) ? range[property]() : range;\n if (property == 'gridLines') {\n value = range.sheet().showGridLines();\n }\n if (tool.type === 'button') {\n setToggle(tool, value);\n } else {\n update(tool, value);\n }\n }\n },\n _tools: function () {\n return this.element.find('[data-property]').toArray().map(function (element) {\n element = $(element);\n return {\n property: element.attr('data-property'),\n tool: this._getItem(element)\n };\n }.bind(this));\n },\n destroy: function () {\n this.element.find('[data-command],.k-button').each(function () {\n var element = $(this);\n var instance = element.data('instance');\n if (instance && instance.destroy) {\n instance.destroy();\n }\n });\n ToolBar.fn.destroy.call(this);\n }\n });\n kendo.spreadsheet.ToolBar = SpreadsheetToolBar;\n var DropDownTool = kendo.toolbar.Item.extend({\n init: function (options, toolbar) {\n var dropDownList = $('<select />').kendoDropDownList({ height: 'auto' }).data('kendoDropDownList');\n this.dropDownList = dropDownList;\n this.element = dropDownList.wrapper;\n this.options = options;\n this.toolbar = toolbar;\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n dropDownList.bind('open', this._open.bind(this));\n dropDownList.bind('change', this._change.bind(this));\n this.element.width(options.width).attr({\n 'data-command': 'PropertyChangeCommand',\n 'data-property': options.property\n });\n },\n _open: function () {\n var ddl = this.dropDownList;\n var list = ddl.list;\n var listWidth;\n list.css({\n whiteSpace: 'nowrap',\n width: 'auto'\n });\n listWidth = list.width();\n if (listWidth) {\n listWidth += 20;\n } else {\n listWidth = ddl._listWidth;\n }\n list.css('width', listWidth + kendo.support.scrollbar());\n ddl._listWidth = listWidth;\n },\n _change: function (e) {\n var instance = e.sender;\n var value = instance.value();\n var dataItem = instance.dataItem();\n var popupName = dataItem ? dataItem.popup : undefined;\n if (popupName) {\n this.toolbar.dialog({ name: popupName });\n } else {\n this.toolbar.action({\n command: 'PropertyChangeCommand',\n options: {\n property: this.options.property,\n value: value == 'null' ? null : value\n }\n });\n }\n },\n value: function (value) {\n if (value !== undefined) {\n this.dropDownList.value(value);\n } else {\n return this.dropDownList.value();\n }\n }\n });\n var PopupTool = kendo.toolbar.Item.extend({\n init: function (options, toolbar) {\n this.element = $('<a href=\\'#\\' class=\\'k-button k-button-icon\\'>' + '<span class=\\'' + options.spriteCssClass + '\\'>' + '</span><span class=\\'k-icon k-i-arrow-60-down\\'></span>' + '</a>');\n this.element.on('click touchend', this.open.bind(this)).attr('data-command', options.command);\n this.options = options;\n this.toolbar = toolbar;\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this._popup();\n },\n destroy: function () {\n this.popup.destroy();\n },\n open: function (ev) {\n ev.preventDefault();\n this.popup.toggle();\n },\n _popup: function () {\n var element = this.element;\n this.popup = $('<div class=\\'k-spreadsheet-popup\\' />').appendTo(element).kendoPopup({ anchor: element }).data('kendoPopup');\n }\n });\n kendo.toolbar.registerComponent('dialog', kendo.toolbar.ToolBarButton.extend({\n init: function (options, toolbar) {\n kendo.toolbar.ToolBarButton.fn.init.call(this, options, toolbar);\n this._dialogName = options.dialogName;\n this.element.bind('click touchend', this.open.bind(this)).data('instance', this);\n },\n open: function () {\n this.toolbar.dialog({ name: this._dialogName });\n }\n }));\n kendo.toolbar.registerComponent('exportAsDialog', kendo.toolbar.Item.extend({\n init: function (options, toolbar) {\n this._dialogName = options.dialogName;\n this.toolbar = toolbar;\n this.element = $('<button class=\\'k-button k-button-icon\\' title=\\'' + options.attributes.title + '\\'>' + '<span class=\\'k-icon k-i-file-excel\\' />' + '</button>').data('instance', this);\n this.element.bind('click', this.open.bind(this)).data('instance', this);\n },\n open: function () {\n this.toolbar.dialog({ name: this._dialogName });\n }\n }));\n var OverflowDialogButton = kendo.toolbar.OverflowButton.extend({\n init: function (options, toolbar) {\n kendo.toolbar.OverflowButton.fn.init.call(this, options, toolbar);\n this.element.on('click touchend', this._click.bind(this));\n this.message = this.options.text;\n var instance = this.element.data('button');\n this.element.data(this.options.type, instance);\n },\n _click: $.noop\n });\n var ColorPicker = PopupTool.extend({\n init: function (options, toolbar) {\n PopupTool.fn.init.call(this, options, toolbar);\n this.popup.element.addClass('k-spreadsheet-colorpicker');\n this.colorChooser = new kendo.spreadsheet.ColorChooser(this.popup.element, { change: this._colorChange.bind(this) });\n this.element.attr({ 'data-property': options.property });\n this.element.data({\n type: 'colorPicker',\n colorPicker: this,\n instance: this\n });\n },\n destroy: function () {\n this.colorChooser.destroy();\n PopupTool.fn.destroy.call(this);\n },\n update: function (value) {\n this.value(value);\n },\n value: function (value) {\n this.colorChooser.value(value);\n },\n _colorChange: function (e) {\n this.toolbar.action({\n command: 'PropertyChangeCommand',\n options: {\n property: this.options.property,\n value: e.sender.value()\n }\n });\n this.popup.close();\n }\n });\n var ColorPickerButton = OverflowDialogButton.extend({\n init: function (options, toolbar) {\n options.iconName = 'text';\n OverflowDialogButton.fn.init.call(this, options, toolbar);\n },\n _click: function () {\n this.toolbar.dialog({\n name: 'colorPicker',\n options: {\n title: this.options.property,\n property: this.options.property\n }\n });\n }\n });\n kendo.toolbar.registerComponent('colorPicker', ColorPicker, ColorPickerButton);\n var FONT_SIZES = [\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 16,\n 18,\n 20,\n 22,\n 24,\n 26,\n 28,\n 36,\n 48,\n 72\n ];\n var DEFAULT_FONT_SIZE = 12;\n var FontSize = kendo.toolbar.Item.extend({\n init: function (options, toolbar) {\n var comboBox = $('<input />').kendoComboBox({\n change: this._valueChange.bind(this),\n clearButton: false,\n dataSource: options.fontSizes || FONT_SIZES,\n value: DEFAULT_FONT_SIZE\n }).data('kendoComboBox');\n this.comboBox = comboBox;\n this.element = comboBox.wrapper;\n this.options = options;\n this.toolbar = toolbar;\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.element.width(options.width).attr({\n 'data-command': 'PropertyChangeCommand',\n 'data-property': options.property\n });\n this.element.data({\n type: 'fontSize',\n fontSize: this\n });\n },\n _valueChange: function (e) {\n this.toolbar.action({\n command: 'PropertyChangeCommand',\n options: {\n property: this.options.property,\n value: kendo.parseInt(e.sender.value())\n }\n });\n },\n update: function (value) {\n this.value(kendo.parseInt(value) || DEFAULT_FONT_SIZE);\n },\n value: function (value) {\n if (value !== undefined) {\n this.comboBox.value(value);\n } else {\n return this.comboBox.value();\n }\n }\n });\n var FontSizeButton = OverflowDialogButton.extend({\n _click: function () {\n this.toolbar.dialog({\n name: 'fontSize',\n options: {\n sizes: FONT_SIZES,\n defaultSize: DEFAULT_FONT_SIZE\n }\n });\n },\n update: function (value) {\n this._value = value || DEFAULT_FONT_SIZE;\n this.element.find('.k-text').text(this.message + ' (' + this._value + ') ...');\n }\n });\n kendo.toolbar.registerComponent('fontSize', FontSize, FontSizeButton);\n var FONT_FAMILIES = [\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Times New Roman',\n 'Trebuchet MS',\n 'Verdana'\n ];\n var DEFAULT_FONT_FAMILY = 'Arial';\n var FontFamily = DropDownTool.extend({\n init: function (options, toolbar) {\n DropDownTool.fn.init.call(this, options, toolbar);\n var ddl = this.dropDownList;\n ddl.setDataSource(options.fontFamilies || FONT_FAMILIES);\n ddl.value(DEFAULT_FONT_FAMILY);\n this.element.data({\n type: 'fontFamily',\n fontFamily: this\n });\n },\n update: function (value) {\n this.value(value || DEFAULT_FONT_FAMILY);\n }\n });\n var FontFamilyButton = OverflowDialogButton.extend({\n _click: function () {\n this.toolbar.dialog({\n name: 'fontFamily',\n options: {\n fonts: FONT_FAMILIES,\n defaultFont: DEFAULT_FONT_FAMILY\n }\n });\n },\n update: function (value) {\n this._value = value || DEFAULT_FONT_FAMILY;\n this.element.find('.k-text').text(this.message + ' (' + this._value + ') ...');\n }\n });\n kendo.toolbar.registerComponent('fontFamily', FontFamily, FontFamilyButton);\n var defaultFormats = kendo.spreadsheet.formats = {\n automatic: null,\n number: '#,0.00',\n percent: '0.00%',\n financial: '_(\"$\"* #,##0.00_);_(\"$\"* (#,##0.00);_(\"$\"* \"-\"??_);_(@_)',\n currency: '$#,##0.00;[Red]$#,##0.00',\n date: 'm/d/yyyy',\n time: 'h:mm:ss AM/PM',\n dateTime: 'm/d/yyyy h:mm',\n duration: '[h]:mm:ss'\n };\n var Format = DropDownTool.extend({\n _revertTitle: function (e) {\n e.sender.value('');\n e.sender.wrapper.width('auto');\n },\n init: function (options, toolbar) {\n DropDownTool.fn.init.call(this, options, toolbar);\n var ddl = this.dropDownList;\n var icon = '<span class=\\'k-icon k-i-' + options.iconClass + '\\' style=\\'line-height: 1em; width: 1.35em;\\'></span>';\n ddl.bind('change', this._revertTitle.bind(this));\n ddl.bind('dataBound', this._revertTitle.bind(this));\n ddl.setOptions({\n dataValueField: 'format',\n dataTextField: 'name',\n dataValuePrimitive: true,\n valueTemplate: icon,\n template: '# if (data.sample) { #' + '<span class=\\'k-spreadsheet-sample\\'>#: data.sample #</span>' + '# } #' + '#: data.name #'\n });\n ddl.text(icon);\n ddl.setDataSource([\n {\n format: defaultFormats.automatic,\n name: MESSAGES.formatTypes.automatic\n },\n {\n format: defaultFormats.number,\n name: MESSAGES.formatTypes.number,\n sample: '1,499.99'\n },\n {\n format: defaultFormats.percent,\n name: MESSAGES.formatTypes.percent,\n sample: '14.50%'\n },\n {\n format: defaultFormats.financial,\n name: MESSAGES.formatTypes.financial,\n sample: '(1,000.12)'\n },\n {\n format: defaultFormats.currency,\n name: MESSAGES.formatTypes.currency,\n sample: '$1,499.99'\n },\n {\n format: defaultFormats.date,\n name: MESSAGES.formatTypes.date,\n sample: '4/21/2012'\n },\n {\n format: defaultFormats.time,\n name: MESSAGES.formatTypes.time,\n sample: '5:49:00 PM'\n },\n {\n format: defaultFormats.dateTime,\n name: MESSAGES.formatTypes.dateTime,\n sample: '4/21/2012 5:49:00'\n },\n {\n format: defaultFormats.duration,\n name: MESSAGES.formatTypes.duration,\n sample: '168:05:00'\n },\n {\n popup: 'formatCells',\n name: MESSAGES.formatTypes.moreFormats\n }\n ]);\n this.element.data({\n type: 'format',\n format: this\n });\n }\n });\n var FormatButton = OverflowDialogButton.extend({\n _click: function () {\n this.toolbar.dialog({ name: 'formatCells' });\n }\n });\n kendo.toolbar.registerComponent('format', Format, FormatButton);\n var BorderChangeTool = PopupTool.extend({\n init: function (options, toolbar) {\n PopupTool.fn.init.call(this, options, toolbar);\n this._borderPalette();\n this.element.data({\n type: 'borders',\n instance: this\n });\n },\n destroy: function () {\n this.borderPalette.destroy();\n PopupTool.fn.destroy.call(this);\n },\n _borderPalette: function () {\n var element = $('<div />').appendTo(this.popup.element);\n this.borderPalette = new kendo.spreadsheet.BorderPalette(element, { change: this._action.bind(this) });\n },\n _action: function (e) {\n this.toolbar.action({\n command: 'BorderChangeCommand',\n options: {\n border: e.type,\n style: {\n size: 1,\n color: e.color\n }\n }\n });\n }\n });\n var BorderChangeButton = OverflowDialogButton.extend({\n _click: function () {\n this.toolbar.dialog({ name: 'borders' });\n }\n });\n kendo.toolbar.registerComponent('borders', BorderChangeTool, BorderChangeButton);\n var AlignmentTool = PopupTool.extend({\n init: function (options, toolbar) {\n PopupTool.fn.init.call(this, options, toolbar);\n this.element.attr({ 'data-property': 'alignment' });\n this._commandPalette();\n this.popup.element.on('click', '.k-button', function (e) {\n this._action($(e.currentTarget));\n }.bind(this));\n this.element.data({\n type: 'alignment',\n alignment: this,\n instance: this\n });\n },\n buttons: [\n {\n property: 'textAlign',\n value: 'left',\n iconClass: 'align-left',\n text: MESSAGES.alignmentButtons.justtifyLeft\n },\n {\n property: 'textAlign',\n value: 'center',\n iconClass: 'align-center',\n text: MESSAGES.alignmentButtons.justifyCenter\n },\n {\n property: 'textAlign',\n value: 'right',\n iconClass: 'align-right',\n text: MESSAGES.alignmentButtons.justifyRight\n },\n {\n property: 'textAlign',\n value: 'justify',\n iconClass: 'align-justify',\n text: MESSAGES.alignmentButtons.justifyFull\n },\n {\n property: 'verticalAlign',\n value: 'top',\n iconClass: 'align-top',\n text: MESSAGES.alignmentButtons.alignTop\n },\n {\n property: 'verticalAlign',\n value: 'center',\n iconClass: 'align-middle',\n text: MESSAGES.alignmentButtons.alignMiddle\n },\n {\n property: 'verticalAlign',\n value: 'bottom',\n iconClass: 'align-bottom',\n text: MESSAGES.alignmentButtons.alignBottom\n }\n ],\n destroy: function () {\n this.popup.element.off();\n PopupTool.fn.destroy.call(this);\n },\n update: function (range) {\n var textAlign = range.textAlign();\n var verticalAlign = range.verticalAlign();\n var element = this.popup.element;\n element.find('.k-button').removeClass('k-state-active');\n if (textAlign) {\n element.find('[data-property=textAlign][data-value=' + textAlign + ']').addClass('k-state-active');\n }\n if (verticalAlign) {\n element.find('[data-property=verticalAlign][data-value=' + verticalAlign + ']').addClass('k-state-active');\n }\n },\n _commandPalette: function () {\n var buttons = this.buttons;\n var element = $('<div />').appendTo(this.popup.element);\n buttons.forEach(function (options, index) {\n var button = '<a title=\\'' + options.text + '\\' data-property=\\'' + options.property + '\\' data-value=\\'' + options.value + '\\' class=\\'k-button k-button-icon\\'>' + '<span class=\\'k-icon k-i-' + options.iconClass + '\\'></span>' + '</a>';\n if (index !== 0 && buttons[index - 1].property !== options.property) {\n element.append($('<span class=\\'k-separator\\' />'));\n }\n element.append(button);\n });\n },\n _action: function (button) {\n var property = button.attr('data-property');\n var value = button.attr('data-value');\n this.toolbar.action({\n command: 'PropertyChangeCommand',\n options: {\n property: property,\n value: value\n }\n });\n }\n });\n var AlignmentButton = OverflowDialogButton.extend({\n _click: function () {\n this.toolbar.dialog({ name: 'alignment' });\n }\n });\n kendo.toolbar.registerComponent('alignment', AlignmentTool, AlignmentButton);\n var MergeTool = PopupTool.extend({\n init: function (options, toolbar) {\n PopupTool.fn.init.call(this, options, toolbar);\n this._commandPalette();\n this.popup.element.on('click', '.k-button', function (e) {\n this._action($(e.currentTarget));\n }.bind(this));\n this.element.data({\n type: 'merge',\n merge: this,\n instance: this\n });\n },\n buttons: [\n {\n value: 'cells',\n iconClass: 'cells-merge',\n text: MESSAGES.mergeButtons.mergeCells\n },\n {\n value: 'horizontally',\n iconClass: 'cells-merge-horizontally',\n text: MESSAGES.mergeButtons.mergeHorizontally\n },\n {\n value: 'vertically',\n iconClass: 'cells-merge-vertically',\n text: MESSAGES.mergeButtons.mergeVertically\n },\n {\n value: 'unmerge',\n iconClass: 'table-unmerge',\n text: MESSAGES.mergeButtons.unmerge\n }\n ],\n destroy: function () {\n this.popup.element.off();\n PopupTool.fn.destroy.call(this);\n },\n _commandPalette: function () {\n var element = $('<div />').appendTo(this.popup.element);\n this.buttons.forEach(function (options) {\n var button = '<a title=\\'' + options.text + '\\' data-value=\\'' + options.value + '\\' class=\\'k-button k-button-icontext\\'>' + '<span class=\\'k-icon k-i-' + options.iconClass + '\\'></span>' + options.text + '</a>';\n element.append(button);\n });\n },\n _action: function (button) {\n var value = button.attr('data-value');\n this.toolbar.action({\n command: 'MergeCellCommand',\n options: { value: value }\n });\n }\n });\n var MergeButton = OverflowDialogButton.extend({\n _click: function () {\n this.toolbar.dialog({ name: 'merge' });\n }\n });\n kendo.toolbar.registerComponent('merge', MergeTool, MergeButton);\n var FreezeTool = PopupTool.extend({\n init: function (options, toolbar) {\n PopupTool.fn.init.call(this, options, toolbar);\n this._commandPalette();\n this.popup.element.on('click', '.k-button', function (e) {\n this._action($(e.currentTarget));\n }.bind(this));\n this.element.data({\n type: 'freeze',\n freeze: this,\n instance: this\n });\n },\n buttons: [\n {\n value: 'panes',\n iconClass: 'pane-freeze',\n text: MESSAGES.freezeButtons.freezePanes\n },\n {\n value: 'rows',\n iconClass: 'row-freeze',\n text: MESSAGES.freezeButtons.freezeRows\n },\n {\n value: 'columns',\n iconClass: 'column-freeze',\n text: MESSAGES.freezeButtons.freezeColumns\n },\n {\n value: 'unfreeze',\n iconClass: 'table-unmerge',\n text: MESSAGES.freezeButtons.unfreeze\n }\n ],\n destroy: function () {\n this.popup.element.off();\n PopupTool.fn.destroy.call(this);\n },\n _commandPalette: function () {\n var element = $('<div />').appendTo(this.popup.element);\n this.buttons.forEach(function (options) {\n var button = '<a title=\\'' + options.text + '\\' data-value=\\'' + options.value + '\\' class=\\'k-button k-button-icontext\\'>' + '<span class=\\'k-icon k-i-' + options.iconClass + '\\'></span>' + options.text + '</a>';\n element.append(button);\n });\n },\n _action: function (button) {\n var value = button.attr('data-value');\n this.toolbar.action({\n command: 'FreezePanesCommand',\n options: { value: value }\n });\n }\n });\n var FreezeButton = OverflowDialogButton.extend({\n _click: function () {\n this.toolbar.dialog({ name: 'freeze' });\n }\n });\n kendo.toolbar.registerComponent('freeze', FreezeTool, FreezeButton);\n var Sort = DropDownTool.extend({\n _revertTitle: function (e) {\n e.sender.value('');\n e.sender.wrapper.width('auto');\n },\n init: function (options, toolbar) {\n DropDownTool.fn.init.call(this, options, toolbar);\n var ddl = this.dropDownList;\n ddl.bind('change', this._revertTitle.bind(this));\n ddl.bind('dataBound', this._revertTitle.bind(this));\n ddl.setOptions({\n valueTemplate: '<span class=\\'k-icon k-i-' + options.iconClass + '\\' style=\\'line-height: 1em; width: 1.35em;\\'></span>',\n template: '<span class=\\'k-icon k-i-#= iconClass #\\' style=\\'line-height: 1em; width: 1.35em;\\'></span>#=text#',\n dataTextField: 'text',\n dataValueField: 'value'\n });\n ddl.setDataSource([\n {\n value: 'asc',\n sheet: false,\n text: MESSAGES.sortButtons.sortRangeAsc,\n iconClass: 'sort-asc'\n },\n {\n value: 'desc',\n sheet: false,\n text: MESSAGES.sortButtons.sortRangeDesc,\n iconClass: 'sort-desc'\n }\n ]);\n ddl.select(0);\n this.element.data({\n type: 'sort',\n sort: this\n });\n },\n _change: function (e) {\n var instance = e.sender;\n var dataItem = instance.dataItem();\n if (dataItem) {\n this.toolbar.action({\n command: 'SortCommand',\n options: {\n value: dataItem.value,\n sheet: dataItem.sheet\n }\n });\n }\n },\n value: $.noop\n });\n var SortButton = OverflowDialogButton.extend({\n _click: function () {\n this.toolbar.dialog({ name: 'sort' });\n }\n });\n kendo.toolbar.registerComponent('sort', Sort, SortButton);\n var Filter = kendo.toolbar.ToolBarButton.extend({\n init: function (options, toolbar) {\n options.showText = 'overflow';\n kendo.toolbar.ToolBarButton.fn.init.call(this, options, toolbar);\n this.element.on('click', this._click.bind(this));\n this.element.data({\n type: 'filter',\n filter: this\n });\n },\n _click: function () {\n this.toolbar.action({ command: 'FilterCommand' });\n },\n update: function (value) {\n this.toggle(value);\n }\n });\n var FilterButton = OverflowDialogButton.extend({\n init: function (options, toolbar) {\n OverflowDialogButton.fn.init.call(this, options, toolbar);\n this.element.data({\n type: 'filter',\n filter: this\n });\n },\n _click: function () {\n this.toolbar.action({ command: 'FilterCommand' });\n },\n update: function (value) {\n this.toggle(value);\n }\n });\n kendo.toolbar.registerComponent('filter', Filter, FilterButton);\n var Open = kendo.toolbar.Item.extend({\n init: function (options, toolbar) {\n this.toolbar = toolbar;\n this.element = $('<div class=\\'k-button k-upload-button k-button-icon\\'>' + '<span class=\\'k-icon k-i-folder-open\\' />' + '</div>').data('instance', this);\n this._title = options.attributes.title;\n this._reset();\n },\n _reset: function () {\n this.element.remove('input');\n $('<input type=\\'file\\' autocomplete=\\'off\\' accept=\\'.xlsx\\'/>').attr('title', this._title).one('change', this._change.bind(this)).appendTo(this.element);\n },\n _change: function (e) {\n this.toolbar.action({\n command: 'OpenCommand',\n options: { file: e.target.files[0] }\n });\n this._reset();\n }\n });\n kendo.toolbar.registerComponent('open', Open);\n kendo.spreadsheet.TabStrip = kendo.ui.TabStrip.extend({\n init: function (element, options) {\n kendo.ui.TabStrip.fn.init.call(this, element, options);\n element.addClass('k-spreadsheet-tabstrip');\n this._quickAccessButtons();\n this.toolbars = {};\n var tabs = options.dataSource;\n this.contentElements.each(function (idx, element) {\n this._toolbar($(element), tabs[idx].id, options.toolbarOptions[tabs[idx].id]);\n }.bind(this));\n this.one('activate', function () {\n this.toolbars[this.options.dataSource[0].id].resize();\n });\n },\n events: kendo.ui.TabStrip.fn.events.concat([\n 'action',\n 'dialog'\n ]),\n destroy: function () {\n this.quickAccessToolBar.off('click');\n kendo.ui.TabStrip.fn.destroy.call(this);\n for (var name in this.toolbars) {\n this.toolbars[name].destroy();\n }\n },\n action: function (args) {\n this.trigger('action', args);\n },\n dialog: function (args) {\n this.trigger('dialog', args);\n },\n refreshTools: function (range) {\n var toolbars = this.toolbars;\n for (var name in toolbars) {\n if (toolbars.hasOwnProperty(name)) {\n toolbars[name].refresh(range);\n }\n }\n },\n _quickAccessButtons: function () {\n var buttons = [\n {\n title: MESSAGES.quickAccess.undo,\n iconClass: 'undo',\n action: 'undo'\n },\n {\n title: MESSAGES.quickAccess.redo,\n iconClass: 'redo',\n action: 'redo'\n }\n ];\n var buttonTemplate = kendo.template('<a href=\\'\\\\#\\' title=\\'#= title #\\' data-action=\\'#= action #\\' class=\\'k-button k-button-icon\\'><span class=\\'k-icon k-i-#=iconClass#\\'></span></a>');\n this.quickAccessToolBar = $('<div />', {\n 'class': 'k-spreadsheet-quick-access-toolbar',\n 'html': kendo.render(buttonTemplate, buttons)\n }).insertBefore(this.wrapper);\n this.quickAccessToolBar.on('click', '.k-button', function (e) {\n e.preventDefault();\n var action = $(e.currentTarget).attr('data-action');\n this.action({ action: action });\n }.bind(this));\n this.quickAccessAdjust();\n },\n quickAccessAdjust: function () {\n this.tabGroup.css('padding-left', kendo._outerWidth(this.quickAccessToolBar));\n },\n _toolbar: function (container, name, tools) {\n var element;\n var options;\n if (this.toolbars[name]) {\n this.toolbars[name].destroy();\n container.children('.k-toolbar').remove();\n }\n if (tools) {\n element = container.html('<div />').children('div');\n options = {\n tools: typeof tools === 'boolean' ? undefined : tools,\n toolbarName: name,\n action: this.action.bind(this),\n dialog: this.dialog.bind(this)\n };\n this.toolbars[name] = new kendo.spreadsheet.ToolBar(element, options);\n }\n }\n });\n }(window.kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/dialogs', [\n 'kendo.core',\n 'kendo.binder',\n 'kendo.validator'\n ], f);\n}(function () {\n (function (kendo) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var $ = kendo.jQuery;\n var ObservableObject = kendo.data.ObservableObject;\n var MESSAGES = kendo.spreadsheet.messages.dialogs = {\n apply: 'Apply',\n save: 'Save',\n cancel: 'Cancel',\n remove: 'Remove',\n retry: 'Retry',\n revert: 'Revert',\n okText: 'OK',\n formatCellsDialog: {\n title: 'Format',\n categories: {\n number: 'Number',\n currency: 'Currency',\n date: 'Date'\n }\n },\n fontFamilyDialog: { title: 'Font' },\n fontSizeDialog: { title: 'Font size' },\n bordersDialog: { title: 'Borders' },\n alignmentDialog: {\n title: 'Alignment',\n buttons: {\n justtifyLeft: 'Align left',\n justifyCenter: 'Center',\n justifyRight: 'Align right',\n justifyFull: 'Justify',\n alignTop: 'Align top',\n alignMiddle: 'Align middle',\n alignBottom: 'Align bottom'\n }\n },\n mergeDialog: {\n title: 'Merge cells',\n buttons: {\n mergeCells: 'Merge all',\n mergeHorizontally: 'Merge horizontally',\n mergeVertically: 'Merge vertically',\n unmerge: 'Unmerge'\n }\n },\n freezeDialog: {\n title: 'Freeze panes',\n buttons: {\n freezePanes: 'Freeze panes',\n freezeRows: 'Freeze rows',\n freezeColumns: 'Freeze columns',\n unfreeze: 'Unfreeze panes'\n }\n },\n confirmationDialog: {\n text: 'Are you sure you want to remove this sheet?',\n title: 'Sheet remove'\n },\n validationDialog: {\n title: 'Data Validation',\n hintMessage: 'Please enter a valid {0} value {1}.',\n hintTitle: 'Validation {0}',\n criteria: {\n any: 'Any value',\n number: 'Number',\n text: 'Text',\n date: 'Date',\n custom: 'Custom Formula',\n list: 'List'\n },\n comparers: {\n greaterThan: 'greater than',\n lessThan: 'less than',\n between: 'between',\n notBetween: 'not between',\n equalTo: 'equal to',\n notEqualTo: 'not equal to',\n greaterThanOrEqualTo: 'greater than or equal to',\n lessThanOrEqualTo: 'less than or equal to'\n },\n comparerMessages: {\n greaterThan: 'greater than {0}',\n lessThan: 'less than {0}',\n between: 'between {0} and {1}',\n notBetween: 'not between {0} and {1}',\n equalTo: 'equal to {0}',\n notEqualTo: 'not equal to {0}',\n greaterThanOrEqualTo: 'greater than or equal to {0}',\n lessThanOrEqualTo: 'less than or equal to {0}',\n custom: 'that satisfies the formula: {0}'\n },\n labels: {\n criteria: 'Criteria',\n comparer: 'Comparer',\n min: 'Min',\n max: 'Max',\n value: 'Value',\n start: 'Start',\n end: 'End',\n onInvalidData: 'On invalid data',\n rejectInput: 'Reject input',\n showWarning: 'Show warning',\n showHint: 'Show hint',\n hintTitle: 'Hint title',\n hintMessage: 'Hint message',\n ignoreBlank: 'Ignore blank',\n showListButton: 'Display button to show list',\n showCalendarButton: 'Display button to show calendar'\n },\n placeholders: {\n typeTitle: 'Type title',\n typeMessage: 'Type message'\n }\n },\n exportAsDialog: {\n title: 'Export...',\n labels: {\n scale: 'Scale',\n fit: 'Fit to page',\n fileName: 'File name',\n saveAsType: 'Save as type',\n exportArea: 'Export',\n paperSize: 'Paper size',\n margins: 'Margins',\n orientation: 'Orientation',\n print: 'Print',\n guidelines: 'Guidelines',\n center: 'Center',\n horizontally: 'Horizontally',\n vertically: 'Vertically'\n }\n },\n modifyMergedDialog: { errorMessage: 'Cannot change part of a merged cell.' },\n rangeDisabledDialog: { errorMessage: 'Destination range contains disabled cells.' },\n incompatibleRangesDialog: { errorMessage: 'Incompatible ranges' },\n noFillDirectionDialog: { errorMessage: 'Cannot determine fill direction' },\n duplicateSheetNameDialog: { errorMessage: 'Duplicate sheet name' },\n overflowDialog: { errorMessage: 'Cannot paste, because the copy area and the paste area are not the same size and shape.' },\n useKeyboardDialog: {\n title: 'Copying and pasting',\n errorMessage: 'These actions cannot be invoked through the menu. Please use the keyboard shortcuts instead:',\n labels: {\n forCopy: 'for copy',\n forCut: 'for cut',\n forPaste: 'for paste'\n }\n },\n unsupportedSelectionDialog: { errorMessage: 'That action cannot be performed on multiple selection.' },\n linkDialog: {\n title: 'Hyperlink',\n labels: {\n text: 'Text',\n url: 'Address',\n removeLink: 'Remove link'\n }\n }\n };\n var registry = {};\n kendo.spreadsheet.dialogs = {\n register: function (name, dialogClass) {\n registry[name] = dialogClass;\n },\n registered: function (name) {\n return !!registry[name];\n },\n create: function (name, options) {\n var dialogClass = registry[name];\n if (dialogClass) {\n return new dialogClass(options);\n }\n }\n };\n var SpreadsheetDialog = kendo.spreadsheet.SpreadsheetDialog = kendo.Observable.extend({\n init: function (options) {\n kendo.Observable.fn.init.call(this, options);\n this.options = $.extend(true, {}, this.options, options);\n this.bind(this.events, options);\n },\n events: [\n 'close',\n 'activate'\n ],\n options: { autoFocus: true },\n dialog: function () {\n if (!this._dialog) {\n this._dialog = $('<div class=\\'k-spreadsheet-window k-action-window\\' />').addClass(this.options.className || '').append(kendo.template(this.options.template)({\n messages: kendo.spreadsheet.messages.dialogs || MESSAGES,\n errors: this.options.errors\n })).appendTo(document.body).kendoWindow({\n autoFocus: this.options.autoFocus,\n scrollable: false,\n resizable: false,\n modal: true,\n visible: false,\n width: this.options.width || 320,\n title: this.options.title,\n open: function () {\n this.center();\n },\n close: this._onDialogClose.bind(this),\n activate: this._onDialogActivate.bind(this),\n deactivate: this._onDialogDeactivate.bind(this)\n }).data('kendoWindow');\n }\n return this._dialog;\n },\n _onDialogClose: function () {\n this.trigger('close', { action: this._action });\n },\n _onDialogActivate: function () {\n this.trigger('activate');\n },\n _onDialogDeactivate: function () {\n this.trigger('deactivate');\n this.destroy();\n },\n destroy: function () {\n if (this._dialog) {\n this._dialog.destroy();\n this._dialog = null;\n }\n },\n open: function () {\n this.dialog().open();\n },\n apply: function () {\n this.close();\n },\n close: function () {\n this._action = 'close';\n this.dialog().close();\n }\n });\n function formattedValue(value, format) {\n return kendo.spreadsheet.formatting.text(value, format);\n }\n var FormatCellsViewModel = kendo.spreadsheet.FormatCellsViewModel = ObservableObject.extend({\n init: function (options) {\n ObservableObject.fn.init.call(this, options);\n this.useCategory(this.category);\n },\n useCategory: function (category) {\n var type = category && category.type || 'number';\n var formatCurrency = type == 'currency';\n this.category = category;\n this.set('showCurrencyFilter', formatCurrency && this.currencies.length > 1);\n if (!formatCurrency) {\n this.set('formats', this.allFormats[type + 'Formats']);\n } else {\n this.currency(this.currencies[0]);\n }\n this.useFirstFormat();\n },\n useFirstFormat: function () {\n if (this.formats.length) {\n this.set('format', this.formats[0].value);\n }\n },\n currency: function (currency) {\n if (currency !== undefined) {\n this._currency = currency;\n var info = currency.value;\n var formats = [\n {\n currency: info,\n decimals: true\n },\n {\n currency: info,\n decimals: true,\n iso: true\n },\n {\n currency: info,\n decimals: false\n }\n ];\n formats = formats.map(function (format) {\n format = FormatCellsViewModel.convert.currency(format);\n return {\n value: format,\n name: formattedValue(1000, format)\n };\n });\n this.set('formats', formats);\n this.useFirstFormat();\n }\n return this._currency || this.currencies[0];\n },\n categoryFilter: function (category) {\n if (category !== undefined) {\n this.useCategory(category);\n }\n return this.category;\n },\n preview: function () {\n var format = this.get('format');\n var value = this.value || 0;\n if (format && format.length) {\n return formattedValue(value, format);\n } else {\n return value;\n }\n }\n });\n FormatCellsViewModel.convert = {\n currency: function (options) {\n function repeat(token, n) {\n return new Array(n + 1).join(token);\n }\n var info = options.currency;\n var format = info.pattern[1];\n if (options.decimals) {\n format = format.replace(/n/g, 'n' + info['.'] + repeat('0', info.decimals));\n }\n if (options.iso) {\n format = '\"' + info.abbr + '\" ' + format.replace(/\\s*\\$\\s*/g, '');\n } else {\n format = format.replace(/\\$/g, info.symbol);\n }\n format = format.replace(/n/g, '?');\n return format;\n },\n date: function (format) {\n if (/T|Z/.test(format)) {\n return '';\n }\n return format.toLowerCase().replace(/tt/g, 'AM/PM').replace(/'/g, '\"');\n }\n };\n function uniqueBy(field, array) {\n var result = [];\n var values = [];\n for (var i = 0; i < array.length; i++) {\n if ($.inArray(array[i][field], values) == -1) {\n result.push(array[i]);\n values.push(array[i][field]);\n }\n }\n return result;\n }\n var FormatCellsDialog = SpreadsheetDialog.extend({\n init: function (options) {\n var messages = kendo.spreadsheet.messages.dialogs.formatCellsDialog || MESSAGES;\n var defaultOptions = {\n title: messages.title,\n categories: [\n {\n type: 'number',\n name: messages.categories.number\n },\n {\n type: 'currency',\n name: messages.categories.currency\n },\n {\n type: 'date',\n name: messages.categories.date\n }\n ]\n };\n SpreadsheetDialog.fn.init.call(this, $.extend(defaultOptions, options));\n this._generateFormats();\n },\n options: {\n className: 'k-spreadsheet-format-cells',\n template: '<div class=\\'k-root-tabs\\' data-role=\\'tabstrip\\' ' + 'data-text-field=\\'name\\' ' + 'data-bind=\\'source: categories, value: categoryFilter\\' ' + 'data-animation=\\'false\\' />' + '<div class=\\'k-spreadsheet-preview\\' data-bind=\\'text: preview\\' />' + '<script type=\\'text/x-kendo-template\\' id=\\'format-item-template\\'>' + '\\\\#: data.name \\\\#' + '</script>' + '<select data-role=\\'dropdownlist\\' class=\\'k-format-filter\\' ' + 'data-text-field=\\'description\\' ' + 'data-value-field=\\'value.name\\' ' + 'data-bind=\\'visible: showCurrencyFilter, value: currency, source: currencies\\' />' + '<ul data-role=\\'staticlist\\' tabindex=\\'0\\' ' + 'class=\\'k-list k-reset\\' ' + 'data-template=\\'format-item-template\\' ' + 'data-value-primitive=\\'true\\' ' + 'data-value-field=\\'value\\' ' + 'data-bind=\\'source: formats, value: format\\' />' + '<div class=\\'k-action-buttons\\'>' + '<button class=\\'k-button k-primary\\' data-bind=\\'click: apply\\'>#: messages.apply #</button>' + '<button class=\\'k-button\\' data-bind=\\'click: close\\'>#: messages.cancel #</button>' + '</div>'\n },\n _generateFormats: function () {\n var options = this.options;\n if (!options.currencies) {\n options.currencies = FormatCellsDialog.currenciesFrom(kendo.cultures);\n }\n if (!options.numberFormats) {\n options.numberFormats = [\n {\n value: '#.00%',\n name: '100.00%'\n },\n {\n value: '#%',\n name: '100%'\n },\n {\n value: '#.00',\n name: '1024.00'\n },\n {\n value: '#,###.00',\n name: '1,024.00'\n }\n ];\n }\n if (!options.dateFormats) {\n var calendarPatterns = kendo.cultures.current.calendars.standard.patterns;\n options.dateFormats = uniqueBy('value', $.map(calendarPatterns, function (format) {\n format = FormatCellsViewModel.convert.date(format);\n if (!format) {\n return;\n }\n return {\n value: format,\n name: formattedValue(34567.7678, format)\n };\n }));\n }\n },\n open: function (range) {\n var options = this.options;\n var value = range.value();\n var categories = options.categories.slice(0);\n var element;\n this.viewModel = new FormatCellsViewModel({\n currencies: options.currencies.slice(0),\n allFormats: {\n numberFormats: options.numberFormats.slice(0),\n dateFormats: options.dateFormats.slice(0)\n },\n categories: categories,\n format: range.format(),\n category: value instanceof Date ? categories[2] : categories[0],\n apply: this.apply.bind(this),\n close: this.close.bind(this),\n value: value\n });\n SpreadsheetDialog.fn.open.call(this);\n element = this.dialog().element;\n kendo.bind(element, this.viewModel);\n var currencyFilter = element.find('select.k-format-filter').data('kendoDropDownList');\n if (options.currencies.length > 10) {\n currencyFilter.setOptions({ filter: 'contains' });\n }\n element.find(kendo.roleSelector('staticlist')).parent().addClass('k-list-wrapper');\n },\n apply: function () {\n var format = this.viewModel.format;\n SpreadsheetDialog.fn.apply.call(this);\n this.trigger('action', {\n command: 'PropertyChangeCommand',\n options: {\n property: 'format',\n value: format\n }\n });\n }\n });\n FormatCellsDialog.currenciesFrom = function (cultures) {\n return uniqueBy('description', $.map(cultures, function (culture, name) {\n if (!/-/.test(name)) {\n return;\n }\n var currency = culture.numberFormat.currency;\n var description = kendo.format('{0} ({1}, {2})', currency.name, currency.abbr, currency.symbol);\n return {\n description: description,\n value: currency\n };\n }));\n };\n kendo.spreadsheet.dialogs.register('formatCells', FormatCellsDialog);\n kendo.spreadsheet.dialogs.FormatCellsDialog = FormatCellsDialog;\n var MessageDialog = SpreadsheetDialog.extend({\n options: {\n className: 'k-spreadsheet-message',\n title: '',\n messageId: '',\n text: '',\n template: '<div class=\\'k-spreadsheet-message-content\\' data-bind=\\'text: text\\' />' + '<div class=\\'k-action-buttons\\'>' + '<button class=\\'k-button k-primary\\' data-bind=\\'click: close\\'>' + '#= messages.okText #' + '</button>' + '</div>'\n },\n open: function () {\n SpreadsheetDialog.fn.open.call(this);\n var options = this.options;\n var text = options.text;\n if (options.messageId) {\n text = kendo.getter(options.messageId, true)(kendo.spreadsheet.messages.dialogs);\n }\n kendo.bind(this.dialog().element, {\n text: text,\n close: this.close.bind(this)\n });\n }\n });\n kendo.spreadsheet.dialogs.register('message', MessageDialog);\n var ConfirmationDialog = SpreadsheetDialog.extend({\n init: function (options) {\n var messages = kendo.spreadsheet.messages.dialogs.confirmationDialog || MESSAGES;\n var defaultOptions = {\n title: messages.title,\n text: messages.text\n };\n SpreadsheetDialog.fn.init.call(this, $.extend(defaultOptions, options));\n },\n options: {\n className: 'k-spreadsheet-message',\n messageId: '',\n template: '<div class=\\'k-spreadsheet-message-content\\' data-bind=\\'text: text\\' />' + '<div class=\\'k-action-buttons\\'>' + '<button class=\\'k-button k-primary\\' data-bind=\\'click: confirm\\'>' + '#= messages.okText #' + '</button>' + '<button class=\\'k-button\\' data-bind=\\'click: cancel\\'>' + '#= messages.cancel #' + '</button>' + '</div>'\n },\n open: function () {\n SpreadsheetDialog.fn.open.call(this);\n var options = this.options;\n var text = options.text;\n if (options.messageId) {\n text = kendo.getter(options.messageId, true)(kendo.spreadsheet.messages.dialogs);\n }\n kendo.bind(this.dialog().element, {\n text: text,\n confirm: this.confirm.bind(this),\n cancel: this.close.bind(this)\n });\n },\n isConfirmed: function () {\n return this._confirmed;\n },\n confirm: function () {\n this._confirmed = true;\n this.close();\n }\n });\n kendo.spreadsheet.dialogs.register('confirmation', ConfirmationDialog);\n var ValidationErrorDialog = SpreadsheetDialog.extend({\n options: {\n className: 'k-spreadsheet-message',\n title: '',\n messageId: '',\n text: '',\n template: '<div class=\\'k-spreadsheet-message-content\\' data-bind=\\'text: text\\' />' + '<div class=\\'k-action-buttons\\'>' + '<button class=\\'k-button k-primary\\' data-bind=\\'click: retry\\'>' + '#= messages.retry #' + '</button>' + '<button class=\\'k-button\\' data-bind=\\'click: cancel\\'>' + '#= messages.cancel #' + '</button>' + '</div>'\n },\n open: function () {\n SpreadsheetDialog.fn.open.call(this);\n var options = this.options;\n var text = options.text;\n if (options.messageId) {\n text = kendo.getter(options.messageId, true)(kendo.spreadsheet.messages.dialogs);\n }\n kendo.bind(this.dialog().element, {\n text: text,\n retry: this.retry.bind(this),\n cancel: this.close.bind(this)\n });\n },\n retry: function () {\n this._retry = true;\n this.close();\n }\n });\n kendo.spreadsheet.dialogs.register('validationError', ValidationErrorDialog);\n var FontFamilyDialog = SpreadsheetDialog.extend({\n init: function (options) {\n var messages = kendo.spreadsheet.messages.dialogs.fontFamilyDialog || MESSAGES;\n SpreadsheetDialog.fn.init.call(this, $.extend({ title: messages.title }, options));\n this._list();\n },\n options: { template: '<ul class=\\'k-list k-reset\\'></ul>' },\n _list: function () {\n var ul = this.dialog().element.find('ul');\n var fonts = this.options.fonts;\n var defaultFont = this.options.defaultFont;\n this.list = new kendo.ui.StaticList(ul, {\n dataSource: new kendo.data.DataSource({ data: fonts }),\n template: '#: data #',\n value: defaultFont,\n change: this.apply.bind(this)\n });\n this.list.dataSource.fetch();\n },\n apply: function (e) {\n SpreadsheetDialog.fn.apply.call(this);\n this.trigger('action', {\n command: 'PropertyChangeCommand',\n options: {\n property: 'fontFamily',\n value: e.sender.value()[0]\n }\n });\n }\n });\n kendo.spreadsheet.dialogs.register('fontFamily', FontFamilyDialog);\n var FontSizeDialog = SpreadsheetDialog.extend({\n init: function (options) {\n var messages = kendo.spreadsheet.messages.dialogs.fontSizeDialog || MESSAGES;\n SpreadsheetDialog.fn.init.call(this, $.extend({ title: messages.title }, options));\n this._list();\n },\n options: { template: '<ul class=\\'k-list k-reset\\'></ul>' },\n _list: function () {\n var ul = this.dialog().element.find('ul');\n var sizes = this.options.sizes;\n var defaultSize = this.options.defaultSize;\n this.list = new kendo.ui.StaticList(ul, {\n dataSource: new kendo.data.DataSource({ data: sizes }),\n template: '#: data #',\n value: defaultSize,\n change: this.apply.bind(this)\n });\n this.list.dataSource.fetch();\n },\n apply: function (e) {\n SpreadsheetDialog.fn.apply.call(this);\n this.trigger('action', {\n command: 'PropertyChangeCommand',\n options: {\n property: 'fontSize',\n value: kendo.parseInt(e.sender.value()[0])\n }\n });\n }\n });\n kendo.spreadsheet.dialogs.register('fontSize', FontSizeDialog);\n var BordersDialog = SpreadsheetDialog.extend({\n init: function (options) {\n var messages = kendo.spreadsheet.messages.dialogs.bordersDialog || MESSAGES;\n SpreadsheetDialog.fn.init.call(this, $.extend({ title: messages.title }, options));\n this.element = this.dialog().element;\n this._borderPalette();\n this.viewModel = kendo.observable({\n apply: this.apply.bind(this),\n close: this.close.bind(this)\n });\n kendo.bind(this.element.find('.k-action-buttons'), this.viewModel);\n },\n options: {\n width: 177,\n template: '<div></div>' + '<div class=\\'k-action-buttons\\'>' + '<button class=\\'k-button k-primary\\' data-bind=\\'click: apply\\'>#: messages.apply #</button>' + '<button class=\\'k-button\\' data-bind=\\'click: close\\'>#: messages.cancel #</button>' + '</div>'\n },\n apply: function () {\n SpreadsheetDialog.fn.apply.call(this);\n var state = this.value();\n this.trigger('action', {\n command: 'BorderChangeCommand',\n options: {\n border: state.type,\n style: {\n size: 1,\n color: state.color\n }\n }\n });\n },\n _borderPalette: function () {\n var element = this.dialog().element.find('div:first');\n this.borderPalette = new kendo.spreadsheet.BorderPalette(element, { change: this.value.bind(this) });\n },\n value: function (state) {\n if (state === undefined) {\n return this._state;\n } else {\n this._state = state;\n }\n }\n });\n kendo.spreadsheet.dialogs.register('borders', BordersDialog);\n var ColorChooser = SpreadsheetDialog.extend({\n init: function (options) {\n SpreadsheetDialog.fn.init.call(this, options);\n this.element = this.dialog().element;\n this.property = options.property;\n this.options.title = options.title;\n this.viewModel = kendo.observable({\n apply: this.apply.bind(this),\n close: this.close.bind(this)\n });\n kendo.bind(this.element.find('.k-action-buttons'), this.viewModel);\n },\n options: { template: '<div></div>' + '<div class=\\'k-action-buttons\\'>' + '<button class=\\'k-button k-primary\\' data-bind=\\'click: apply\\'>#: messages.apply #</button>' + '<button class=\\'k-button\\' data-bind=\\'click: close\\'>#: messages.cancel #</button>' + '</div>' },\n apply: function () {\n SpreadsheetDialog.fn.apply.call(this);\n this.trigger('action', {\n command: 'PropertyChangeCommand',\n options: {\n property: this.property,\n value: this.value()\n }\n });\n },\n value: function (e) {\n if (e === undefined) {\n return this._value;\n } else {\n this._value = e.value;\n }\n }\n });\n var ColorPickerDialog = ColorChooser.extend({\n init: function (options) {\n options.width = 177;\n ColorChooser.fn.init.call(this, options);\n this._colorPalette();\n },\n _colorPalette: function () {\n var element = this.dialog().element.find('div:first');\n this.colorPalette = element.kendoColorPalette({\n palette: [\n '#ffffff',\n '#000000',\n '#d6ecff',\n '#4e5b6f',\n '#7fd13b',\n '#ea157a',\n '#feb80a',\n '#00addc',\n '#738ac8',\n '#1ab39f',\n '#f2f2f2',\n '#7f7f7f',\n '#a7d6ff',\n '#d9dde4',\n '#e5f5d7',\n '#fad0e4',\n '#fef0cd',\n '#c5f2ff',\n '#e2e7f4',\n '#c9f7f1',\n '#d8d8d8',\n '#595959',\n '#60b5ff',\n '#b3bcca',\n '#cbecb0',\n '#f6a1c9',\n '#fee29c',\n '#8be6ff',\n '#c7d0e9',\n '#94efe3',\n '#bfbfbf',\n '#3f3f3f',\n '#007dea',\n '#8d9baf',\n '#b2e389',\n '#f272af',\n '#fed46b',\n '#51d9ff',\n '#aab8de',\n '#5fe7d5',\n '#a5a5a5',\n '#262626',\n '#003e75',\n '#3a4453',\n '#5ea226',\n '#af0f5b',\n '#c58c00',\n '#0081a5',\n '#425ea9',\n '#138677',\n '#7f7f7f',\n '#0c0c0c',\n '#00192e',\n '#272d37',\n '#3f6c19',\n '#750a3d',\n '#835d00',\n '#00566e',\n '#2c3f71',\n '#0c594f'\n ],\n change: this.value.bind(this)\n }).data('kendoColorPalette');\n }\n });\n kendo.spreadsheet.dialogs.register('colorPicker', ColorPickerDialog);\n var CustomColorDialog = ColorChooser.extend({\n init: function (options) {\n options.width = 268;\n ColorChooser.fn.init.call(this, options);\n this.dialog().setOptions({ animation: false });\n this.dialog().one('activate', this._colorPicker.bind(this));\n },\n _colorPicker: function () {\n var element = this.dialog().element.find('div:first');\n this.colorPicker = element.kendoFlatColorPicker({ change: this.value.bind(this) }).data('kendoFlatColorPicker');\n }\n });\n kendo.spreadsheet.dialogs.register('customColor', CustomColorDialog);\n var AlignmentDialog = SpreadsheetDialog.extend({\n init: function (options) {\n var messages = kendo.spreadsheet.messages.dialogs.alignmentDialog || MESSAGES;\n var defaultOptions = {\n title: messages.title,\n buttons: [\n {\n property: 'textAlign',\n value: 'left',\n iconClass: 'align-left',\n text: messages.buttons.justtifyLeft\n },\n {\n property: 'textAlign',\n value: 'center',\n iconClass: 'align-center',\n text: messages.buttons.justifyCenter\n },\n {\n property: 'textAlign',\n value: 'right',\n iconClass: 'align-right',\n text: messages.buttons.justifyRight\n },\n {\n property: 'textAlign',\n value: 'justify',\n iconClass: 'align-justify',\n text: messages.buttons.justifyFull\n },\n {\n property: 'verticalAlign',\n value: 'top',\n iconClass: 'align-top',\n text: messages.buttons.alignTop\n },\n {\n property: 'verticalAlign',\n value: 'center',\n iconClass: 'align-middle',\n text: messages.buttons.alignMiddle\n },\n {\n property: 'verticalAlign',\n value: 'bottom',\n iconClass: 'align-bottom',\n text: messages.buttons.alignBottom\n }\n ]\n };\n SpreadsheetDialog.fn.init.call(this, $.extend(defaultOptions, options));\n this._list();\n },\n options: { template: '<ul class=\\'k-list k-reset\\'></ul>' },\n _list: function () {\n var ul = this.dialog().element.find('ul');\n this.list = new kendo.ui.StaticList(ul, {\n dataSource: new kendo.data.DataSource({ data: this.options.buttons }),\n template: '<a title=\\'#=text#\\' data-property=\\'#=property#\\' data-value=\\'#=value#\\'>' + '<span class=\\'k-icon k-i-#=iconClass#\\'></span>' + '#=text#' + '</a>',\n change: this.apply.bind(this)\n });\n this.list.dataSource.fetch();\n },\n apply: function (e) {\n var dataItem = e.sender.value()[0];\n SpreadsheetDialog.fn.apply.call(this);\n this.trigger('action', {\n command: 'PropertyChangeCommand',\n options: {\n property: dataItem.property,\n value: dataItem.value\n }\n });\n }\n });\n kendo.spreadsheet.dialogs.register('alignment', AlignmentDialog);\n var MergeDialog = SpreadsheetDialog.extend({\n init: function (options) {\n var messages = kendo.spreadsheet.messages.dialogs.mergeDialog || MESSAGES;\n var defaultOptions = {\n title: messages.title,\n buttons: [\n {\n value: 'cells',\n iconClass: 'cells-merge',\n text: messages.buttons.mergeCells\n },\n {\n value: 'horizontally',\n iconClass: 'cells-merge-horizontally',\n text: messages.buttons.mergeHorizontally\n },\n {\n value: 'vertically',\n iconClass: 'cells-merge-vertically',\n text: messages.buttons.mergeVertically\n },\n {\n value: 'unmerge',\n iconClass: 'table-unmerge',\n text: messages.buttons.unmerge\n }\n ]\n };\n SpreadsheetDialog.fn.init.call(this, $.extend(defaultOptions, options));\n this._list();\n },\n options: { template: '<ul class=\\'k-list k-reset\\'></ul>' },\n _list: function () {\n var ul = this.dialog().element.find('ul');\n this.list = new kendo.ui.StaticList(ul, {\n dataSource: new kendo.data.DataSource({ data: this.options.buttons }),\n template: '<a title=\\'#=text#\\' data-value=\\'#=value#\\'>' + '<span class=\\'k-icon k-icon k-i-#=iconClass#\\'></span>#=text#' + '</a>',\n change: this.apply.bind(this)\n });\n this.list.dataSource.fetch();\n },\n apply: function (e) {\n var dataItem = e.sender.value()[0];\n SpreadsheetDialog.fn.apply.call(this);\n this.trigger('action', {\n command: 'MergeCellCommand',\n options: { value: dataItem.value }\n });\n }\n });\n kendo.spreadsheet.dialogs.register('merge', MergeDialog);\n var FreezeDialog = SpreadsheetDialog.extend({\n init: function (options) {\n var messages = kendo.spreadsheet.messages.dialogs.freezeDialog || MESSAGES;\n var defaultOptions = {\n title: messages.title,\n buttons: [\n {\n value: 'panes',\n iconClass: 'pane-freeze',\n text: messages.buttons.freezePanes\n },\n {\n value: 'rows',\n iconClass: 'row-freeze',\n text: messages.buttons.freezeRows\n },\n {\n value: 'columns',\n iconClass: 'column-freeze',\n text: messages.buttons.freezeColumns\n },\n {\n value: 'unfreeze',\n iconClass: 'table-unmerge',\n text: messages.buttons.unfreeze\n }\n ]\n };\n SpreadsheetDialog.fn.init.call(this, $.extend(defaultOptions, options));\n this._list();\n },\n options: { template: '<ul class=\\'k-list k-reset\\'></ul>' },\n _list: function () {\n var ul = this.dialog().element.find('ul');\n this.list = new kendo.ui.StaticList(ul, {\n dataSource: new kendo.data.DataSource({ data: this.options.buttons }),\n template: '<a title=\\'#=text#\\' data-value=\\'#=value#\\'>' + '<span class=\\'k-icon k-icon k-i-#=iconClass#\\'></span>#=text#' + '</a>',\n change: this.apply.bind(this)\n });\n this.list.dataSource.fetch();\n },\n apply: function (e) {\n var dataItem = e.sender.value()[0];\n SpreadsheetDialog.fn.apply.call(this);\n this.trigger('action', {\n command: 'FreezePanesCommand',\n options: { value: dataItem.value }\n });\n }\n });\n kendo.spreadsheet.dialogs.register('freeze', FreezeDialog);\n var ValidationViewModel = kendo.spreadsheet.ValidationCellsViewModel = ObservableObject.extend({\n init: function (options) {\n ObservableObject.fn.init.call(this, options);\n this.bind('change', function (e) {\n if (e.field === 'criterion') {\n this.reset();\n if (this.criterion === 'custom' || this.criterion === 'list') {\n this.setHintMessageTemplate();\n }\n }\n if (e.field === 'comparer') {\n this.setHintMessageTemplate();\n }\n if ((e.field == 'hintMessage' || e.field == 'hintTitle') && !this._mute) {\n this.shouldBuild = false;\n }\n if ((e.field == 'from' || e.field == 'to' || e.field == 'hintMessageTemplate' || e.field == 'type') && this.shouldBuild) {\n this.buildMessages();\n }\n }.bind(this));\n this.reset();\n },\n buildMessages: function () {\n this._mute = true;\n this.set('hintTitle', this.hintTitleTemplate ? kendo.format(this.hintTitleTemplate, this.type) : '');\n this.set('hintMessage', this.hintMessageTemplate ? kendo.format(this.hintMessageTemplate, this.from, this.to) : '');\n this._mute = false;\n },\n reset: function () {\n this.setComparers();\n this.set('comparer', this.comparers[0].type);\n this.set('from', null);\n this.set('to', null);\n this.set('useCustomMessages', false);\n this.shouldBuild = true;\n this.hintTitleTemplate = this.defaultHintTitle;\n this.buildMessages();\n },\n setComparers: function () {\n var all = this.defaultComparers;\n var comparers = [];\n if (this.criterion === 'text') {\n var text_comparers = [\n 'equalTo',\n 'notEqualTo'\n ];\n for (var idx = 0; idx < all.length; idx++) {\n if (text_comparers[0] == all[idx].type) {\n comparers.push(all[idx]);\n text_comparers.shift();\n }\n }\n } else {\n comparers = all.slice();\n }\n this.set('comparers', comparers);\n },\n setHintMessageTemplate: function () {\n if (this.criterion !== 'custom' && this.criterion !== 'list') {\n this.set('hintMessageTemplate', kendo.format(this.defaultHintMessage, this.criterion, this.comparerMessages[this.comparer]));\n } else {\n this.set('hintMessageTemplate', '');\n this.set('hintMessage', '');\n }\n },\n isAny: function () {\n return this.get('criterion') === 'any';\n },\n isNumber: function () {\n return this.get('criterion') === 'number';\n },\n showToForNumber: function () {\n return this.showTo() && this.isNumber();\n },\n showToForDate: function () {\n return this.showTo() && this.isDate();\n },\n isText: function () {\n return this.get('criterion') === 'text';\n },\n isDate: function () {\n return this.get('criterion') === 'date';\n },\n isList: function () {\n return this.get('criterion') === 'list';\n },\n isCustom: function () {\n return this.get('criterion') === 'custom';\n },\n showRemove: function () {\n return this.get('hasValidation');\n },\n showTo: function () {\n return this.get('comparer') == 'between' || this.get('comparer') == 'notBetween';\n },\n update: function (validation) {\n this.set('hasValidation', !!validation);\n if (validation) {\n this.fromValidationObject(validation);\n }\n },\n fromValidationObject: function (validation) {\n this.set('criterion', validation.dataType);\n this.set('comparer', validation.comparerType);\n this.set('from', validation.from);\n this.set('to', validation.to);\n this.set('type', validation.type);\n this.set('ignoreBlank', validation.allowNulls);\n this.set('showButton', validation.showButton);\n if (validation.messageTemplate || validation.titleTemplate) {\n this.hintMessageTemplate = validation.messageTemplate;\n this.hintMessage = validation.messageTemplate;\n this.hintTitleTemplate = validation.titleTemplate;\n this.hintTitle = validation.titleTemplate;\n this.useCustomMessages = true;\n this.buildMessages();\n } else {\n this.useCustomMessages = false;\n }\n },\n toValidationObject: function () {\n if (this.criterion === 'any') {\n return null;\n }\n var options = {\n type: this.type,\n dataType: this.criterion,\n comparerType: this.comparer,\n from: this.from,\n to: this.to,\n allowNulls: this.ignoreBlank,\n showButton: this.showButton\n };\n if (this.useCustomMessages) {\n options.messageTemplate = this.shouldBuild ? this.hintMessageTemplate : this.hintMessage;\n options.titleTemplate = this.hintTitle;\n }\n return options;\n }\n });\n var ValidationDialog = SpreadsheetDialog.extend({\n init: function (options) {\n var messages = kendo.spreadsheet.messages.dialogs.validationDialog || MESSAGES;\n var defaultOptions = {\n title: messages.title,\n hintMessage: messages.hintMessage,\n hintTitle: messages.hintTitle,\n criteria: [\n {\n type: 'any',\n name: messages.criteria.any\n },\n {\n type: 'number',\n name: messages.criteria.number\n },\n {\n type: 'text',\n name: messages.criteria.text\n },\n {\n type: 'date',\n name: messages.criteria.date\n },\n {\n type: 'custom',\n name: messages.criteria.custom\n },\n {\n type: 'list',\n name: messages.criteria.list\n }\n ],\n comparers: [\n {\n type: 'greaterThan',\n name: messages.comparers.greaterThan\n },\n {\n type: 'lessThan',\n name: messages.comparers.lessThan\n },\n {\n type: 'between',\n name: messages.comparers.between\n },\n {\n type: 'notBetween',\n name: messages.comparers.notBetween\n },\n {\n type: 'equalTo',\n name: messages.comparers.equalTo\n },\n {\n type: 'notEqualTo',\n name: messages.comparers.notEqualTo\n },\n {\n type: 'greaterThanOrEqualTo',\n name: messages.comparers.greaterThanOrEqualTo\n },\n {\n type: 'lessThanOrEqualTo',\n name: messages.comparers.lessThanOrEqualTo\n }\n ],\n comparerMessages: messages.comparerMessages\n };\n SpreadsheetDialog.fn.init.call(this, $.extend(defaultOptions, options));\n },\n options: {\n width: 450,\n criterion: 'any',\n type: 'reject',\n ignoreBlank: true,\n showButton: true,\n useCustomMessages: false,\n errorTemplate: '<div class=\"k-widget k-tooltip k-tooltip-validation\" style=\"margin:0.5em\"><span class=\"k-icon k-i-warning\"> </span>' + '#= message #<div class=\"k-callout k-callout-n\"></div></div>',\n template: '<div class=\"k-edit-form-container\">' + '<div class=\"k-edit-label\"><label>#: messages.validationDialog.labels.criteria #:</label></div>' + '<div class=\"k-edit-field\">' + '<select data-role=\"dropdownlist\" ' + 'data-text-field=\"name\" ' + 'data-value-field=\"type\" ' + 'data-bind=\"value: criterion, source: criteria\" />' + '</div>' + '<div data-bind=\"visible: isNumber\">' + '<div class=\"k-edit-label\"><label>#: messages.validationDialog.labels.comparer #:</label></div>' + '<div class=\"k-edit-field\">' + '<select data-role=\"dropdownlist\" ' + 'data-text-field=\"name\" ' + 'data-value-field=\"type\" ' + 'data-bind=\"value: comparer, source: comparers\" />' + '</div>' + '<div class=\"k-edit-label\"><label>#: messages.validationDialog.labels.min #:</label></div>' + '<div class=\"k-edit-field\">' + '<input name=\"#: messages.validationDialog.labels.min #\" placeholder=\"e.g. 10\" class=\"k-textbox\" data-bind=\"value: from, enabled: isNumber\" required=\"required\" />' + '</div>' + '<div data-bind=\"visible: showTo\">' + '<div class=\"k-edit-label\"><label>#: messages.validationDialog.labels.max #:</label></div>' + '<div class=\"k-edit-field\">' + '<input name=\"#: messages.validationDialog.labels.max #\" placeholder=\"e.g. 100\" class=\"k-textbox\" data-bind=\"value: to, enabled: showToForNumber\" required=\"required\" />' + '</div>' + '</div>' + '</div>' + '<div data-bind=\"visible: isText\">' + '<div class=\"k-edit-label\"><label>#: messages.validationDialog.labels.comparer #:</label></div>' + '<div class=\"k-edit-field\">' + '<select data-role=\"dropdownlist\" ' + 'data-text-field=\"name\" ' + 'data-value-field=\"type\" ' + 'data-bind=\"value: comparer, source: comparers\" />' + '</div>' + '<div class=\"k-edit-label\"><label>#: messages.validationDialog.labels.value #:</label></div>' + '<div class=\"k-edit-field\">' + '<input name=\"#: messages.validationDialog.labels.value #\" class=\"k-textbox\" data-bind=\"value: from, enabled: isText\" required=\"required\" />' + '</div>' + '</div>' + '<div data-bind=\"visible: isDate\">' + '<div class=\"k-edit-label\"><label>#: messages.validationDialog.labels.comparer #:</label></div>' + '<div class=\"k-edit-field\">' + '<select data-role=\"dropdownlist\" ' + 'data-text-field=\"name\" ' + 'data-value-field=\"type\" ' + 'data-bind=\"value: comparer, source: comparers\" />' + '</div>' + '<div class=\"k-edit-label\"><label>#: messages.validationDialog.labels.start #:</label></div>' + '<div class=\"k-edit-field\">' + '<input name=\"#: messages.validationDialog.labels.start #\" class=\"k-textbox\" data-bind=\"value: from, enabled: isDate\" required=\"required\" />' + '</div>' + '<div data-bind=\"visible: showTo\">' + '<div class=\"k-edit-label\"><label>#: messages.validationDialog.labels.end #:</label></div>' + '<div class=\"k-edit-field\">' + '<input name=\"#: messages.validationDialog.labels.end #\" class=\"k-textbox\" data-bind=\"value: to, enabled: showToForDate\" required=\"required\" />' + '</div>' + '</div>' + '</div>' + '<div data-bind=\"visible: isCustom\">' + '<div class=\"k-edit-label\"><label>#: messages.validationDialog.labels.value #:</label></div>' + '<div class=\"k-edit-field\">' + '<input name=\"#: messages.validationDialog.labels.value #\" class=\"k-textbox\" data-bind=\"value: from, enabled: isCustom\" required=\"required\" />' + '</div>' + '</div>' + '<div data-bind=\"visible: isList\">' + '<div class=\"k-edit-label\"><label>#: messages.validationDialog.labels.value #:</label></div>' + '<div class=\"k-edit-field\">' + '<input name=\"#: messages.validationDialog.labels.value #\" class=\"k-textbox\" data-bind=\"value: from, enabled: isList\" required=\"required\" />' + '</div>' + '</div>' + '<div data-bind=\"visible: isList\">' + '<div class=\"k-edit-field\">' + '<input type=\"checkbox\" name=\"showButton\" id=\"showButton\" class=\"k-checkbox\" data-bind=\"checked: showButton\"/>' + '<label for=\"showButton\" class=\"k-checkbox-label\">' + ' #: messages.validationDialog.labels.showListButton #' + '</label>' + '</div>' + '</div>' + '<div data-bind=\"visible: isDate\">' + '<div class=\"k-edit-field\">' + '<input type=\"checkbox\" name=\"showButton\" id=\"showButton\" class=\"k-checkbox\" data-bind=\"checked: showButton\"/>' + '<label for=\"showButton\" class=\"k-checkbox-label\">' + ' #: messages.validationDialog.labels.showCalendarButton #' + '</label>' + '</div>' + '</div>' + '<div data-bind=\"invisible: isAny\">' + '<div class=\"k-edit-field\">' + '<input type=\"checkbox\" name=\"ignoreBlank\" id=\"ignoreBlank\" class=\"k-checkbox\" data-bind=\"checked: ignoreBlank\"/>' + '<label for=\"ignoreBlank\" class=\"k-checkbox-label\">' + ' #: messages.validationDialog.labels.ignoreBlank #' + '</label>' + '</div>' + '</div>' + '<div data-bind=\"invisible: isAny\">' + '<div class=\"k-action-buttons\"></div>' + '<div class=\"k-edit-label\"><label>#: messages.validationDialog.labels.onInvalidData #:</label></div>' + '<div class=\"k-edit-field\">' + '<input type=\"radio\" id=\"validationTypeReject\" name=\"validationType\" value=\"reject\" data-bind=\"checked: type\" class=\"k-radio\" />' + '<label for=\"validationTypeReject\" class=\"k-radio-label\">' + '#: messages.validationDialog.labels.rejectInput #' + '</label> ' + '<input type=\"radio\" id=\"validationTypeWarning\" name=\"validationType\" value=\"warning\" data-bind=\"checked: type\" class=\"k-radio\" />' + '<label for=\"validationTypeWarning\" class=\"k-radio-label\">' + '#: messages.validationDialog.labels.showWarning #' + '</label>' + '</div>' + '</div>' + '<div data-bind=\"invisible: isAny\" class=\"hint-wrapper\">' + '<div class=\"k-edit-field\">' + '<input type=\"checkbox\" name=\"useCustomMessages\" id=\"useCustomMessages\" class=\"k-checkbox\" data-bind=\"checked: useCustomMessages\" />' + '<label class=\"k-checkbox-label\" for=\"useCustomMessages\">' + ' #: messages.validationDialog.labels.showHint #' + '</label>' + '</div>' + '<div data-bind=\"visible: useCustomMessages\">' + '<div class=\"k-edit-label\"><label>#: messages.validationDialog.labels.hintTitle #:</label></div>' + '<div class=\"k-edit-field\">' + '<input class=\"k-textbox\" placeholder=\"#: messages.validationDialog.placeholders.typeTitle #\" data-bind=\"value: hintTitle\" />' + '</div>' + '<div class=\"k-edit-label\"><label>#: messages.validationDialog.labels.hintMessage #:</label></div>' + '<div class=\"k-edit-field\">' + '<input class=\"k-textbox\" placeholder=\"#: messages.validationDialog.placeholders.typeMessage #\" data-bind=\"value: hintMessage\" />' + '</div>' + '</div>' + '</div>' + '<div class=\"k-action-buttons\">' + '<button class=\"k-button\" data-bind=\"visible: showRemove, click: remove\">#: messages.remove #</button>' + '<button class=\"k-button k-primary\" data-bind=\"click: apply\">#: messages.apply #</button>' + '<button class=\"k-button\" data-bind=\"click: close\">#: messages.cancel #</button>' + '</div>' + '</div>'\n },\n open: function (range) {\n var options = this.options;\n var element;\n this.viewModel = new ValidationViewModel({\n type: options.type,\n defaultHintMessage: options.hintMessage,\n defaultHintTitle: options.hintTitle,\n defaultComparers: options.comparers.slice(0),\n comparerMessages: options.comparerMessages,\n criteria: options.criteria.slice(0),\n criterion: options.criterion,\n ignoreBlank: options.ignoreBlank,\n showButton: options.showButton,\n apply: this.apply.bind(this),\n close: this.close.bind(this),\n remove: this.remove.bind(this)\n });\n this.viewModel.update(range.validation());\n SpreadsheetDialog.fn.open.call(this);\n element = this.dialog().element;\n if (this.validatable) {\n this.validatable.destroy();\n }\n kendo.bind(element, this.viewModel);\n this.validatable = new kendo.ui.Validator(element.find('.k-edit-form-container'), {\n validateOnBlur: false,\n errorTemplate: this.options.errorTemplate || undefined\n });\n },\n apply: function () {\n if (this.validatable.validate()) {\n SpreadsheetDialog.fn.apply.call(this);\n this.trigger('action', {\n command: 'EditValidationCommand',\n options: { value: this.viewModel.toValidationObject() }\n });\n }\n },\n remove: function () {\n this.viewModel.set('criterion', 'any');\n this.apply();\n }\n });\n kendo.spreadsheet.dialogs.register('validation', ValidationDialog);\n kendo.spreadsheet.dialogs.ValidationDialog = ValidationDialog;\n var ExportAsDialog = SpreadsheetDialog.extend({\n init: function (options) {\n var messages = kendo.spreadsheet.messages.dialogs.exportAsDialog || MESSAGES;\n SpreadsheetDialog.fn.init.call(this, $.extend({ title: messages.title }, options));\n this.viewModel = kendo.observable({\n title: this.options.title,\n name: this.options.name,\n extension: this.options.extension,\n fileFormats: this.options.fileFormats,\n excel: options.excelExport,\n pdf: {\n proxyURL: options.pdfExport.proxyURL,\n forceProxy: options.pdfExport.forceProxy,\n title: options.pdfExport.title,\n author: options.pdfExport.author,\n subject: options.pdfExport.subject,\n keywords: options.pdfExport.keywords,\n creator: options.pdfExport.creator,\n date: options.pdfExport.date,\n fitWidth: this.options.pdf.fitWidth,\n area: this.options.pdf.area,\n areas: this.options.pdf.areas,\n paperSize: this.options.pdf.paperSize,\n paperSizes: this.options.pdf.paperSizes,\n margin: this.options.pdf.margin,\n margins: this.options.pdf.margins,\n landscape: this.options.pdf.landscape,\n guidelines: this.options.pdf.guidelines,\n hCenter: this.options.pdf.hCenter,\n vCenter: this.options.pdf.vCenter\n },\n apply: this.apply.bind(this),\n close: this.close.bind(this)\n });\n var dialog = this.dialog();\n this.viewModel.bind('change', function (e) {\n if (e.field === 'extension') {\n this.set('showPdfOptions', this.extension === '.pdf' ? true : false);\n dialog.center();\n }\n });\n kendo.bind(dialog.element, this.viewModel);\n },\n options: {\n name: 'Workbook',\n extension: '.xlsx',\n fileFormats: [\n {\n description: 'Excel Workbook (.xlsx)',\n extension: '.xlsx'\n },\n {\n description: 'Portable Document Format(.pdf)',\n extension: '.pdf'\n }\n ],\n pdf: {\n fitWidth: true,\n area: 'workbook',\n areas: [\n {\n area: 'workbook',\n text: 'Entire Workbook'\n },\n {\n area: 'sheet',\n text: 'Active Sheet'\n },\n {\n area: 'selection',\n text: 'Selection'\n }\n ],\n paperSize: 'a4',\n paperSizes: [\n {\n value: 'a2',\n text: 'A2 (420 mm \\xD7 594 mm) '\n },\n {\n value: 'a3',\n text: 'A3 (297 mm x 420 mm) '\n },\n {\n value: 'a4',\n text: 'A4 (210 mm x 297 mm) '\n },\n {\n value: 'a5',\n text: 'A5 (148 mm x 210 mm) '\n },\n {\n value: 'b3',\n text: 'B3 (353 mm \\xD7 500 mm) '\n },\n {\n value: 'b4',\n text: 'B4 (250 mm x 353 mm) '\n },\n {\n value: 'b5',\n text: 'B5 (176 mm x 250 mm) '\n },\n {\n value: 'folio',\n text: 'Folio (8.5\" x 13\") '\n },\n {\n value: 'legal',\n text: 'Legal (8.5\" x 14\") '\n },\n {\n value: 'letter',\n text: 'Letter (8.5\" x 11\") '\n },\n {\n value: 'tabloid',\n text: 'Tabloid (11\" x 17\") '\n },\n {\n value: 'executive',\n text: 'Executive (7.25\" x 10.5\")'\n }\n ],\n margin: {\n bottom: '0.75in',\n left: '0.7in',\n right: '0.7in',\n top: '0.75in'\n },\n margins: [\n {\n value: {\n bottom: '0.75in',\n left: '0.7in',\n right: '0.7in',\n top: '0.75in'\n },\n text: 'Normal'\n },\n {\n value: {\n bottom: '0.75in',\n left: '0.25in',\n right: '0.25in',\n top: '0.75in'\n },\n text: 'Narrow'\n },\n {\n value: {\n bottom: '1in',\n left: '1in',\n right: '1in',\n top: '1in'\n },\n text: 'Wide'\n }\n ],\n landscape: true,\n guidelines: true,\n hCenter: true,\n vCenter: true\n },\n width: 520,\n template: '<div class=\\'k-edit-label\\'><label>#: messages.exportAsDialog.labels.fileName #:</label></div>' + '<div class=\\'k-edit-field\\'>' + '<input class=\\'k-textbox\\' data-bind=\\'value: name\\' />' + '</div>' + '<div >' + '<div class=\\'k-edit-label\\'><label>#: messages.exportAsDialog.labels.saveAsType #:</label></div>' + '<div class=\\'k-edit-field\\'>' + '<select data-role=\\'dropdownlist\\' class=\\'k-file-format\\' ' + 'data-text-field=\\'description\\' ' + 'data-value-field=\\'extension\\' ' + 'data-bind=\\'value: extension, source: fileFormats\\' />' + '</div>' + '</div>' + '<div class=\\'export-config\\' data-bind=\\'visible: showPdfOptions\\'>' + '<div class=\\'k-edit-label\\'><label>#: messages.exportAsDialog.labels.exportArea #:</label></div>' + '<div class=\\'k-edit-field\\'>' + '<select data-role=\\'dropdownlist\\' class=\\'k-file-format\\' ' + 'data-text-field=\\'text\\' ' + 'data-value-field=\\'area\\' ' + 'data-bind=\\'value: pdf.area, source: pdf.areas\\' />' + '</div>' + '<div class=\\'k-edit-label\\'><label>#: messages.exportAsDialog.labels.paperSize#:</label></div>' + '<div class=\\'k-edit-field\\'>' + '<select data-role=\\'dropdownlist\\' class=\\'k-file-format\\' ' + 'data-text-field=\\'text\\' ' + 'data-value-field=\\'value\\' ' + 'data-bind=\\'value: pdf.paperSize, source: pdf.paperSizes\\' />' + '</div>' + '<div class=\\'k-edit-label\\'><label>#: messages.exportAsDialog.labels.margins #:</label></div>' + '<div class=\\'k-edit-field\\'>' + '<select data-role=\\'dropdownlist\\' class=\\'k-file-format\\' ' + 'data-value-primitive=\\'true\\'' + 'data-text-field=\\'text\\' ' + 'data-value-field=\\'value\\' ' + 'data-bind=\\'value: pdf.margin, source: pdf.margins\\' />' + '</div>' + '<div class=\\'k-edit-label\\'><label>#: messages.exportAsDialog.labels.orientation #:</label></div>' + '<div class=\\'k-edit-field\\'>' + '<input type=\\'radio\\' id=\\'k-orientation-portrait\\' name=\\'orientation\\' data-type=\\'boolean\\' data-bind=\\'checked: pdf.landscape\\' value=\\'false\\' /><label class=\\'k-orientation-label k-orientation-portrait-label\\' for=\\'k-orientation-portrait\\'></label>' + '<input type=\\'radio\\' id=\\'k-orientation-landscape\\' name=\\'orientation\\' data-type=\\'boolean\\' data-bind=\\'checked: pdf.landscape\\' value=\\'true\\' /><label class=\\'k-orientation-label k-orientation-landscape-label\\' for=\\'k-orientation-landscape\\'></label>' + '</div>' + '<div class=\\'k-edit-label\\'><label>#: messages.exportAsDialog.labels.print #:</label></div>' + '<div class=\\'k-edit-field\\'>' + '<input class=\\'k-checkbox\\' id=\\'guidelines\\' type=\\'checkbox\\' data-bind=\\'checked: pdf.guidelines\\'/><label class=\\'k-checkbox-label\\' for=\\'guidelines\\'>#: messages.exportAsDialog.labels.guidelines#</label>' + '</div>' + '<div class=\\'k-edit-label\\'><label>#: messages.exportAsDialog.labels.scale #:</label></div>' + '<div class=\\'k-edit-field\\'>' + '<input class=\\'k-checkbox\\' id=\\'fitWidth\\' type=\\'checkbox\\' data-bind=\\'checked: pdf.fitWidth\\'/><label class=\\'k-checkbox-label\\' for=\\'fitWidth\\'>#: messages.exportAsDialog.labels.fit #</label>' + '</div>' + '<div class=\\'k-edit-label\\'><label>#: messages.exportAsDialog.labels.center #:</label></div>' + '<div class=\\'k-edit-field\\'>' + '<input class=\\'k-checkbox\\' id=\\'hCenter\\' type=\\'checkbox\\' data-bind=\\'checked: pdf.hCenter\\'/><label class=\\'k-checkbox-label\\' for=\\'hCenter\\'>#: messages.exportAsDialog.labels.horizontally #</label>' + '<input class=\\'k-checkbox\\' id=\\'vCenter\\' type=\\'checkbox\\' data-bind=\\'checked: pdf.vCenter\\'/><label class=\\'k-checkbox-label\\' for=\\'vCenter\\'>#: messages.exportAsDialog.labels.vertically #</label>' + '</div>' + '<div class=\\'k-page-orientation\\' data-bind=\\'css: {k-page-landscape: pdf.landscape}\\'>' + '<div class=\\'k-margins-horizontal\\'></div>' + '<div class=\\'k-margins-vertical\\'></div>' + '</div>' + '</div>' + '<div class=\\'k-action-buttons\\'>' + '<button class=\\'k-button k-primary\\' data-bind=\\'click: apply\\'>#: messages.save #</button>' + '<button class=\\'k-button\\' data-bind=\\'click: close\\'>#: messages.cancel #</button>' + '</div>'\n },\n apply: function () {\n SpreadsheetDialog.fn.apply.call(this);\n this.trigger('action', {\n command: 'SaveAsCommand',\n options: this.viewModel\n });\n }\n });\n kendo.spreadsheet.dialogs.register('exportAs', ExportAsDialog);\n function basicErrorDialog(id, msg) {\n kendo.spreadsheet.dialogs.register(id, MessageDialog.extend({ options: { messageId: msg } }));\n }\n basicErrorDialog('modifyMerged', 'modifyMergedDialog.errorMessage');\n basicErrorDialog('rangeDisabled', 'rangeDisabledDialog.errorMessage');\n basicErrorDialog('overflow', 'overflowDialog.errorMessage');\n basicErrorDialog('unsupportedSelection', 'unsupportedSelectionDialog.errorMessage');\n basicErrorDialog('incompatibleRanges', 'incompatibleRangesDialog.errorMessage');\n basicErrorDialog('noFillDirection', 'noFillDirectionDialog.errorMessage');\n basicErrorDialog('duplicateSheetName', 'duplicateSheetNameDialog.errorMessage');\n var ImportErrorDialog = MessageDialog.extend({\n options: {\n width: 640,\n title: 'Errors in import',\n template: '<div class=\\'k-spreadsheet-message-content k-spreadsheet-import-errors\\'>' + '<div class=\\'k--header-message\\'>We encountered #= errors.length # errors while reading this file. Please be aware that some formulas might be missing, or contain invalid results.</div>' + '<div class=\\'k--errors\\'>' + '<table>' + '<thead>' + '<tr><th>Context</th><th>Error message</th></tr>' + '</thead>' + '# for (var i = 0; i < errors.length; ++i) { #' + '# var err = errors[i]; #' + '<tr><td>#: err.context #</td><td>#: err.error #</td></tr>' + '# } #' + '</table>' + '</div>' + '</div>' + '<div class=\\'k-action-buttons\\'>' + '<button class=\\'k-button k-primary\\' data-bind=\\'click: close\\'>' + '#: messages.okText #' + '</button>' + '</div>'\n }\n });\n kendo.spreadsheet.dialogs.register('importError', ImportErrorDialog);\n var UseKeyboardDialog = MessageDialog.extend({\n init: function (options) {\n var messages = kendo.spreadsheet.messages.dialogs.useKeyboardDialog || MESSAGES;\n SpreadsheetDialog.fn.init.call(this, $.extend({ title: messages.title }, options));\n },\n options: { template: '#: messages.useKeyboardDialog.errorMessage #' + '<div>Ctrl+C #: messages.useKeyboardDialog.labels.forCopy #</div>' + '<div>Ctrl+X #: messages.useKeyboardDialog.labels.forCut #</div>' + '<div>Ctrl+V #: messages.useKeyboardDialog.labels.forPaste #</div>' + '<div class=\"k-action-buttons\">' + '<button class=\\'k-button k-primary\\' data-bind=\\'click: close\\'>' + '#= messages.okText #' + '</button>' + '</div>' }\n });\n kendo.spreadsheet.dialogs.register('useKeyboard', UseKeyboardDialog);\n var HyperlinkDialog = SpreadsheetDialog.extend({\n options: {\n template: '<div class=\\'k-edit-label\\'><label>#: messages.linkDialog.labels.url #:</label></div>' + '<div class=\\'k-edit-field\\'><input class=\\'k-textbox\\' data-bind=\\'value: url\\' /></div>' + '<div class=\\'k-action-buttons\\'>' + ('<button style=\\'float: left\\' class=\\'k-button\\' data-bind=\\'click: remove\\'>#= messages.linkDialog.labels.removeLink #</button>' + '<button class=\\'k-button k-primary\\' data-bind=\\'click: apply\\'>#= messages.okText #</button>' + '<button class=\\'k-button\\' data-bind=\\'click: cancel\\'>#= messages.cancel #</button>') + '</div>',\n title: MESSAGES.linkDialog.title,\n autoFocus: false\n },\n open: function (range) {\n var self = this;\n SpreadsheetDialog.fn.open.apply(self, arguments);\n var element = self.dialog().element;\n var model = kendo.observable({\n url: range.link(),\n apply: function () {\n if (!/\\S/.test(model.url)) {\n model.url = null;\n }\n self.trigger('action', {\n command: 'HyperlinkCommand',\n options: { link: model.url }\n });\n self.close();\n },\n remove: function () {\n model.url = null;\n model.apply();\n },\n cancel: self.close.bind(self)\n });\n kendo.bind(element, model);\n element.find('input').focus().on('keydown', function (ev) {\n if (ev.keyCode == 13) {\n model.url = $(this).val();\n ev.stopPropagation();\n ev.preventDefault();\n model.apply();\n } else if (ev.keyCode == 27) {\n ev.stopPropagation();\n ev.preventDefault();\n model.cancel();\n }\n });\n }\n });\n kendo.spreadsheet.dialogs.register('hyperlink', HyperlinkDialog);\n }(window.kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/sheetbinder', [\n 'kendo.core',\n 'kendo.data',\n 'spreadsheet/sheet'\n ], f);\n}(function () {\n (function (kendo) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var identity = function (o) {\n return o;\n };\n var SheetDataSourceBinder = kendo.Class.extend({\n init: function (options) {\n this.options = $.extend({}, this.options, options);\n this.columns = this._normalizeColumns(this.options.columns);\n this._sheet();\n this._dataSource();\n this._header();\n this._boundRowsCount = 0;\n this.dataSource.fetch();\n },\n _sheet: function () {\n this.sheet = this.options.sheet;\n this._sheetChangeHandler = this._sheetChange.bind(this);\n this._sheetDeleteRowHandler = this._sheetDeleteRow.bind(this);\n this._sheetInsertRowHandler = this._sheetInsertRow.bind(this);\n this.sheet.bind('change', this._sheetChangeHandler).bind('afterDeleteRow', this._sheetDeleteRowHandler).bind('afterInsertRow', this._sheetInsertRowHandler);\n },\n _sheetInsertRow: function (e) {\n if (e.index !== undefined) {\n this.dataSource.insert(Math.max(e.index - 1, 0), {});\n }\n },\n _sheetDeleteRow: function (e) {\n if (e.index !== undefined) {\n var dataSource = this.dataSource;\n var model = dataSource.view()[e.index - 1];\n if (model) {\n dataSource.remove(model);\n }\n }\n },\n _header: function () {\n this.sheet.batch(function () {\n this.columns.forEach(function (column, index) {\n this.sheet.range(0, index).value(column.title);\n }.bind(this));\n }.bind(this));\n },\n _sheetChange: function (e) {\n if (e.insertRow || e.deleteRow) {\n return;\n }\n if (e.recalc && e.ref) {\n var dataSource = this.dataSource;\n var data = dataSource.view();\n var columns = this.columns;\n var fields;\n if (dataSource.reader.model) {\n fields = dataSource.reader.model.fields;\n }\n if (!columns.length && data.length) {\n columns = Object.keys(data[0].toJSON());\n }\n var getters = columns.map(function (column) {\n var field = column.field;\n if (field && fields && fields[field] && fields[field].type == 'date') {\n return kendo.spreadsheet.numberToDate;\n }\n return identity;\n });\n this._skipRebind = true;\n var normalizedRef = this.sheet._grid.normalize(e.ref);\n var values = this.sheet.range(normalizedRef).values();\n normalizedRef.forEach(function (ref) {\n ref = ref.toRangeRef();\n var record;\n var valueIndex = 0;\n for (var ri = ref.topLeft.row; ri <= ref.bottomRight.row; ri++) {\n record = data[ri - 1];\n if (!record) {\n record = dataSource.insert(ri - 1, {});\n data = dataSource.view();\n }\n var colValueIndex = 0;\n for (var ci = ref.topLeft.col; ci <= ref.bottomRight.col && ci < columns.length; ci++) {\n record.set(columns[ci].field, getters[ci](values[valueIndex][colValueIndex++]));\n }\n valueIndex++;\n }\n });\n this._boundRowsCount = dataSource.view().length;\n this._skipRebind = false;\n }\n },\n _normalizeColumns: function (columns) {\n return columns.map(function (column) {\n var field = column.field || column;\n return {\n field: field,\n title: column.title || field\n };\n });\n },\n _dataSource: function () {\n var options = this.options;\n var dataSource = options.dataSource;\n dataSource = Array.isArray(dataSource) ? { data: dataSource } : dataSource;\n if (this.dataSource && this._changeHandler) {\n this.dataSource.unbind('change', this._changeHandler);\n } else {\n this._changeHandler = this._change.bind(this);\n }\n this.dataSource = kendo.data.DataSource.create(dataSource).bind('change', this._changeHandler);\n },\n _change: function () {\n if (this._skipRebind) {\n return;\n }\n var data = this.dataSource.view();\n var columns = this.columns;\n if (!columns.length && data.length) {\n this.columns = columns = this._normalizeColumns(Object.keys(data[0].toJSON()));\n this._header();\n }\n var getters = columns.map(function (column) {\n return kendo.getter(column.field);\n });\n this.sheet.batch(function () {\n var length = Math.max(data.length, this._boundRowsCount);\n for (var idx = 0; idx < length; idx++) {\n for (var getterIdx = 0; getterIdx < getters.length; getterIdx++) {\n var value = data[idx] ? getters[getterIdx](data[idx]) : null;\n this.sheet.range(idx + 1, getterIdx).value(value);\n }\n }\n }.bind(this));\n this._boundRowsCount = data.length;\n },\n destroy: function () {\n this.dataSource.unbind('change', this._changeHandler);\n this.sheet.unbind('change', this._sheetChangeHandler).unbind('deleteRow', this._sheetDeleteRowHandler).unbind('insertRow', this._sheetInsertRowHandler);\n },\n options: { columns: [] }\n });\n kendo.spreadsheet.SheetDataSourceBinder = SheetDataSourceBinder;\n }(kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/filtermenu', [\n 'kendo.core',\n 'kendo.popup',\n 'kendo.treeview',\n 'kendo.numerictextbox',\n 'kendo.datepicker',\n 'kendo.datetimepicker'\n ], f);\n}(function () {\n (function (kendo) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var $ = kendo.jQuery;\n var Widget = kendo.ui.Widget;\n var classNames = {\n details: 'k-details',\n button: 'k-button',\n detailsSummary: 'k-details-summary',\n detailsContent: 'k-details-content',\n icon: 'k-icon',\n iconCollapse: 'k-i-arrow-45-down-right',\n iconExpand: 'k-i-arrow-60-right',\n iconSearch: 'k-i-zoom',\n textbox: 'k-textbox',\n wrapper: 'k-spreadsheet-filter-menu',\n filterByCondition: 'k-spreadsheet-condition-filter',\n filterByValue: 'k-spreadsheet-value-filter',\n valuesTreeViewWrapper: 'k-spreadsheet-value-treeview-wrapper',\n actionButtons: 'k-action-buttons'\n };\n var Details = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this.element.addClass(FilterMenu.classNames.details);\n this._summary = this.element.find('.' + FilterMenu.classNames.detailsSummary).on('click', this._toggle.bind(this));\n var iconClass = options.expanded ? FilterMenu.classNames.iconCollapse : FilterMenu.classNames.iconExpand;\n this._icon = $('<span />', { 'class': FilterMenu.classNames.icon + ' ' + iconClass }).prependTo(this._summary);\n this._container = kendo.wrap(this._summary.next(), true);\n if (!options.expanded) {\n this._container.hide();\n }\n },\n options: { name: 'Details' },\n events: ['toggle'],\n visible: function () {\n return this.options.expanded;\n },\n toggle: function (show) {\n var animation = kendo.fx(this._container).expand('vertical');\n animation.stop()[show ? 'reverse' : 'play']();\n this._icon.toggleClass(FilterMenu.classNames.iconExpand, show).toggleClass(FilterMenu.classNames.iconCollapse, !show);\n this.options.expanded = !show;\n },\n _toggle: function () {\n var show = this.visible();\n this.toggle(show);\n this.trigger('toggle', { show: show });\n }\n });\n var FILTERMENU_MESSAGES = kendo.spreadsheet.messages.filterMenu = {\n sortAscending: 'Sort range A to Z',\n sortDescending: 'Sort range Z to A',\n filterByValue: 'Filter by value',\n filterByCondition: 'Filter by condition',\n apply: 'Apply',\n search: 'Search',\n addToCurrent: 'Add to current selection',\n clear: 'Clear',\n blanks: '(Blanks)',\n operatorNone: 'None',\n and: 'AND',\n or: 'OR',\n operators: {\n string: {\n contains: 'Text contains',\n doesnotcontain: 'Text does not contain',\n startswith: 'Text starts with',\n endswith: 'Text ends with',\n matches: 'Text matches',\n doesnotmatch: 'Text does not match'\n },\n date: {\n eq: 'Date is',\n neq: 'Date is not',\n lt: 'Date is before',\n gt: 'Date is after'\n },\n number: {\n eq: 'Is equal to',\n neq: 'Is not equal to',\n gte: 'Is greater than or equal to',\n gt: 'Is greater than',\n lte: 'Is less than or equal to',\n lt: 'Is less than'\n }\n }\n };\n kendo.data.binders.spreadsheetFilterValue = kendo.data.Binder.extend({\n init: function (element, bindings, options) {\n kendo.data.Binder.fn.init.call(this, element, bindings, options);\n this._change = $.proxy(this.change, this);\n $(this.element).on('change', this._change);\n },\n refresh: function () {\n var that = this, value = that.bindings.spreadsheetFilterValue.get();\n $(that.element).val(value instanceof Date ? '' : value);\n },\n change: function () {\n var value = this.element.value;\n this.bindings.spreadsheetFilterValue.set(value);\n }\n });\n kendo.data.binders.widget.spreadsheetFilterValue = kendo.data.Binder.extend({\n init: function (widget, bindings, options) {\n kendo.data.Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = $.proxy(this.change, this);\n this.widget.first('change', this._change);\n },\n refresh: function () {\n var binding = this.bindings.spreadsheetFilterValue, value = binding.get(), type = $(this.widget.element).data('filterType');\n if (type === 'date' && value instanceof Date || type === 'number' && !isNaN(value)) {\n this.widget.value(value);\n } else {\n this.widget.value(null);\n }\n },\n change: function () {\n var value = this.widget.value(), binding = this.bindings.spreadsheetFilterValue;\n binding.set(value);\n }\n });\n var templates = {\n filterByValue: '<div class=\\'' + classNames.detailsSummary + '\\'>#= messages.filterByValue #</div>' + '<div class=\\'' + classNames.detailsContent + '\\'>' + '<div class=\\'k-textbox k-space-right\\'>' + '<input placeholder=\\'#= messages.search #\\' data-#=ns#bind=\\'events: { input: filterValues }\\' />' + '<span class=\\'k-icon k-i-zoom\\' />' + '</div>' + '<div data-#=ns#bind=\\'visible: hasActiveSearch\\'><input class=\\'k-checkbox\\' type=\\'checkbox\\' data-#=ns#bind=\\'checked: appendToSearch\\' id=\\'_#=guid#\\' /><label class=\\'k-checkbox-label\\' for=\\'_#=guid#\\'>#= messages.addToCurrent #</label></div>' + '<div class=\\'' + classNames.valuesTreeViewWrapper + '\\'>' + '<div data-#=ns#role=\\'treeview\\' ' + 'data-#=ns#checkboxes=\\'{ checkChildren: true }\\' ' + 'data-#=ns#bind=\\'source: valuesDataSource, events: { check: valuesChange, select: valueSelect }\\' ' + '/>' + '</div>' + '</div>',\n filterByCondition: '<div class=\\'' + classNames.detailsSummary + '\\'>#= messages.filterByCondition #</div>' + '<div class=\\'' + classNames.detailsContent + '\\'>' + '<div>' + '<select ' + 'data-#=ns#role=\"dropdownlist\"' + 'data-#=ns#bind=\"value: operator, source: operators, events: { change: operatorChange } \"' + 'data-value-primitive=\"false\"' + 'data-option-label=\"#=messages.operatorNone#\"' + 'data-height=\"auto\"' + 'data-text-field=\"text\"' + 'data-value-field=\"unique\">' + '</select>' + '</div>' + '<div data-#=ns#bind=\"visible: isString\">' + '<input data-filter-type=\"string\" data-#=ns#bind=\"spreadsheetFilterValue: customFilter.criteria[0].value\" class=\"k-textbox\" />' + '</div>' + '<div data-#=ns#bind=\"visible: isNumber\">' + '<input data-filter-type=\"number\" data-#=ns#role=\"numerictextbox\" data-#=ns#bind=\"spreadsheetFilterValue: customFilter.criteria[0].value\" />' + '</div>' + '<div data-#=ns#bind=\"visible: isDate\">' + '<input data-filter-type=\"date\" data-#=ns#role=\"datepicker\" data-#=ns#bind=\"spreadsheetFilterValue: customFilter.criteria[0].value\" />' + '</div>' + '</div>',\n menuItem: '<li data-command=\\'#=command#\\' data-dir=\\'#=dir#\\'>' + '<span class=\\'k-icon k-i-#=iconClass#\\'></span>#=text#' + '</li>',\n actionButtons: '<button data-#=ns#bind=\\'click: apply\\' class=\\'k-button k-primary\\'>#=messages.apply#</button>' + '<button data-#=ns#bind=\\'click: clear\\' class=\\'k-button\\'>#=messages.clear#</button>'\n };\n function distinctValues(values) {\n var hash = {};\n var result = [];\n for (var i = 0; i < values.length; i++) {\n if (!hash[values[i].value]) {\n hash[values[i].value] = values[i];\n result.push(values[i]);\n } else if (!hash[values[i].value].checked && values[i].checked) {\n hash[values[i].value].checked = true;\n }\n }\n return result;\n }\n function filter(dataSource, query) {\n var hasVisibleChildren = false;\n var data = dataSource instanceof kendo.data.HierarchicalDataSource && dataSource.data();\n for (var i = 0; i < data.length; i++) {\n var item = data[i];\n var text = item.text.toString().toLowerCase();\n var itemVisible = query === true || query === '' || text.indexOf(query) >= 0;\n var anyVisibleChildren = filter(item.children, itemVisible || query);\n hasVisibleChildren = hasVisibleChildren || anyVisibleChildren || itemVisible;\n item.hidden = !itemVisible && !anyVisibleChildren;\n item.checked = !item.hidden;\n }\n if (data) {\n dataSource.filter({\n field: 'hidden',\n operator: 'neq',\n value: true\n });\n }\n return hasVisibleChildren;\n }\n function uncheckAll(dataSource) {\n var data = dataSource instanceof kendo.data.HierarchicalDataSource && dataSource.data();\n for (var i = 0; i < data.length; i++) {\n var item = data[i];\n item.checked = false;\n if (item.hasChildren) {\n uncheckAll(item.children);\n }\n }\n }\n var FilterMenuViewModel = kendo.spreadsheet.FilterMenuViewModel = kendo.data.ObservableObject.extend({\n valuesChange: function (e) {\n var dataSource = e ? e.sender.dataSource : this.valuesDataSource;\n var checked = function (item) {\n return item.checked;\n };\n var value = function (item) {\n return item.dataType === 'date' ? kendo.spreadsheet.dateToNumber(item.value) : item.value;\n };\n var unique = function (value, index, array) {\n return array.lastIndexOf(value) === index;\n };\n var data = dataSource.data();\n var values = data[0].children.data().toJSON();\n var blanks = values.filter(function (item) {\n return item.dataType === 'blank';\n });\n blanks = blanks.length ? blanks[0].checked : false;\n values = values.filter(checked).map(value);\n if (this.appendToSearch && this.valueFilter && this.valueFilter.values.length) {\n values = values.concat(this.valueFilter.values.toJSON()).sort().filter(unique);\n }\n this.set('valueFilter', {\n values: values,\n blanks: blanks\n });\n },\n valueSelect: function (e) {\n e.preventDefault();\n var node = e.sender.dataItem(e.node);\n node.set('checked', !node.checked);\n },\n hasActiveSearch: false,\n appendToSearch: false,\n filterValues: function (e) {\n var query = typeof e == 'string' ? e : $(e.target).val().toLowerCase();\n var dataSource = this.valuesDataSource;\n this.set('hasActiveSearch', !!query);\n uncheckAll(dataSource);\n filter(dataSource, query);\n },\n reset: function () {\n this.set('customFilter', {\n logic: 'and',\n criteria: [{\n operator: null,\n value: null\n }]\n });\n this.set('valueFilter', { values: [] });\n },\n operatorChange: function (e) {\n var dataItem = e.sender.dataItem();\n this.set('operatorType', dataItem.type);\n this.set('customFilter.criteria[0].operator', dataItem.value);\n },\n isNone: function () {\n return this.get('operatorType') === undefined;\n },\n isString: function () {\n return this.get('operatorType') === 'string';\n },\n isNumber: function () {\n return this.get('operatorType') === 'number';\n },\n isDate: function () {\n return this.get('operatorType') === 'date';\n }\n });\n function flattenOperators(operators) {\n var messages = FILTERMENU_MESSAGES.operators;\n var result = [];\n for (var type in operators) {\n if (!operators.hasOwnProperty(type)) {\n continue;\n }\n for (var operator in operators[type]) {\n if (!operators[type].hasOwnProperty(operator)) {\n continue;\n }\n result.push({\n text: messages[type][operator],\n value: operator,\n unique: type + '_' + operator,\n type: type\n });\n }\n }\n return result;\n }\n var FilterMenuController = kendo.spreadsheet.FilterMenuController = {\n valuesTree: function (range, column) {\n return [{\n text: 'All',\n expanded: true,\n checked: true,\n items: this.values(range.resize({ top: 1 }), column)\n }];\n },\n values: function (range, column) {\n var values = [];\n var messages = FILTERMENU_MESSAGES;\n var columnRange = range.column(column);\n var sheet = range.sheet();\n columnRange.forEachCell(function (row, col, cell) {\n if (sheet.isHiddenRow(row)) {\n return;\n }\n var value = cell.value;\n var dataType = cell.dataType;\n var text = cell.text;\n if (value === undefined) {\n dataType = 'blank';\n } else if (cell.format) {\n dataType = kendo.spreadsheet.formatting.type(value, cell.format);\n } else {\n dataType = typeof value;\n }\n if (value !== null && cell.format) {\n text = kendo.spreadsheet.formatting.text(value, cell.format);\n } else {\n text = dataType == 'blank' ? messages.blanks : value;\n }\n if (dataType === 'percent') {\n dataType = 'number';\n }\n if (dataType === 'date') {\n value = kendo.spreadsheet.numberToDate(value);\n }\n values.push({\n dataType: dataType,\n value: value,\n text: text,\n checked: true\n });\n });\n values = distinctValues(values);\n values.sort(function (a, b) {\n if (a.dataType === b.dataType) {\n return 0;\n }\n if (a.dataType === 'blank' || b.dataType === 'blank') {\n return a.dataType === 'blank' ? -1 : 1;\n }\n if (a.dataType === 'number' || b.dataType === 'number') {\n return a.dataType === 'number' ? -1 : 1;\n }\n if (a.dataType === 'date' || b.dataType === 'date') {\n return a.dataType === 'date' ? -1 : 1;\n }\n return 0;\n });\n return values;\n },\n filterType: function (range, column) {\n var sheet = range.sheet();\n var filter = this.filterForColumn(column, sheet);\n var type;\n filter = filter && filter.filter.toJSON();\n if (filter && filter.filter == 'custom') {\n var value = filter.criteria[0].value;\n if (value instanceof Date) {\n type = 'date';\n } else if (typeof value == 'string') {\n type = 'string';\n } else if (typeof value == 'number') {\n type = 'number';\n }\n }\n if (!type) {\n var topValue = this.values(range.row(1), column)[0];\n type = topValue && topValue.dataType;\n if (type == 'blank') {\n type = null;\n }\n }\n return type;\n },\n filterForColumn: function (column, sheet) {\n var allFilters = sheet.filter();\n var filters;\n if (allFilters) {\n filters = allFilters.columns.filter(function (item) {\n return item.index === column;\n })[0];\n }\n return filters;\n },\n filter: function (column, sheet) {\n var columnFilters = this.filterForColumn(column, sheet);\n if (!columnFilters) {\n return;\n }\n var options = columnFilters.filter.toJSON();\n var type = options.filter;\n delete options.filter;\n var result = {\n type: type,\n options: options\n };\n var criteria = options.criteria;\n if (criteria && criteria.length) {\n result.operator = criteria[0].operator;\n }\n return result;\n }\n };\n var FilterMenu = Widget.extend({\n init: function (element, options) {\n Widget.call(this, element, options);\n this.element.addClass(FilterMenu.classNames.wrapper);\n this.viewModel = new FilterMenuViewModel({\n active: 'value',\n operator: null,\n operators: flattenOperators(this.options.operators),\n clear: this.clear.bind(this),\n apply: this.apply.bind(this)\n });\n this._filterInit();\n this._popup();\n this._sort();\n this._filterByCondition();\n this._filterByValue();\n this._actionButtons();\n },\n options: {\n name: 'FilterMenu',\n column: 0,\n range: null,\n operators: {\n string: {\n contains: 'Text contains',\n doesnotcontain: 'Text does not contain',\n startswith: 'Text starts with',\n endswith: 'Text ends with',\n matches: 'Text matches',\n doesnotmatch: 'Text does not match'\n },\n date: {\n eq: 'Date is',\n neq: 'Date is not',\n lt: 'Date is before',\n gt: 'Date is after'\n },\n number: {\n eq: 'Is equal to',\n neq: 'Is not equal to',\n gte: 'Is greater than or equal to',\n gt: 'Is greater than',\n lte: 'Is less than or equal to',\n lt: 'Is less than'\n }\n }\n },\n events: ['action'],\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.menu.destroy();\n this.valuesTreeView.destroy();\n this.popup.destroy();\n },\n openFor: function (anchor) {\n this.popup.setOptions({ anchor: anchor });\n this.popup.open();\n },\n close: function () {\n this.popup.close();\n },\n clear: function () {\n this.action({\n command: 'ClearFilterCommand',\n options: { column: this.options.column }\n });\n this.viewModel.reset();\n this.close();\n },\n apply: function () {\n this._active();\n var options = {\n operatingRange: this.options.range,\n column: this.options.column\n };\n var valueFilter;\n var customFilter;\n if (this.viewModel.active === 'value') {\n this.viewModel.valuesChange({ sender: this.valuesTreeView });\n valueFilter = this.viewModel.valueFilter.toJSON();\n if (valueFilter.blanks || valueFilter.values && valueFilter.values.length) {\n options.valueFilter = valueFilter;\n }\n } else if (this.viewModel.active === 'custom') {\n customFilter = this.viewModel.customFilter.toJSON();\n if (customFilter.criteria.length && customFilter.criteria[0].value !== null) {\n options.customFilter = customFilter;\n }\n }\n if (options.valueFilter || options.customFilter) {\n this.action({\n command: 'ApplyFilterCommand',\n options: options\n });\n }\n },\n action: function (options) {\n this.trigger('action', $.extend({}, options));\n },\n _filterInit: function () {\n var column = this.options.column;\n var range = this.options.range;\n var sheet = range.sheet();\n var activeFilter = FilterMenuController.filter(column, sheet);\n if (activeFilter) {\n var filterType = FilterMenuController.filterType(range, column);\n this.viewModel.set('active', activeFilter.type);\n this.viewModel.set(activeFilter.type + 'Filter', activeFilter.options);\n if (activeFilter.type == 'custom') {\n this.viewModel.set('operator', filterType + '_' + activeFilter.operator);\n this.viewModel.set('operatorType', filterType);\n }\n } else {\n this.viewModel.reset();\n }\n },\n _popup: function () {\n this.popup = this.element.kendoPopup({ copyAnchorStyles: false }).data('kendoPopup');\n },\n _sort: function () {\n var template = kendo.template(FilterMenu.templates.menuItem);\n var messages = FILTERMENU_MESSAGES;\n var items = [\n {\n command: 'sort',\n dir: 'asc',\n text: messages.sortAscending,\n iconClass: 'sort-asc'\n },\n {\n command: 'sort',\n dir: 'desc',\n text: messages.sortDescending,\n iconClass: 'sort-desc'\n }\n ];\n var ul = $('<ul />', { 'html': kendo.render(template, items) }).appendTo(this.element);\n this.menu = ul.kendoMenu({\n orientation: 'vertical',\n select: function (e) {\n var dir = $(e.item).data('dir');\n var range = this.options.range.resize({ top: 1 });\n var options = {\n value: dir,\n sheet: false,\n operatingRange: range,\n column: this.options.column\n };\n if (range.isSortable()) {\n this.action({\n command: 'SortCommand',\n options: options\n });\n } else {\n this.close();\n }\n }.bind(this)\n }).data('kendoMenu');\n },\n _appendTemplate: function (template, className, details, expanded) {\n var compiledTemplate = kendo.template(template);\n var wrapper = $('<div class=\\'' + className + '\\'/>').html(compiledTemplate({\n messages: FILTERMENU_MESSAGES,\n guid: kendo.guid(),\n ns: kendo.ns\n }));\n this.element.append(wrapper);\n if (details) {\n details = new Details(wrapper, {\n expanded: expanded,\n toggle: this._detailToggle.bind(this)\n });\n }\n kendo.bind(wrapper, this.viewModel);\n return wrapper;\n },\n _detailToggle: function (e) {\n this.element.find('[data-role=details]').not(e.sender.element).data('kendoDetails').toggle(!e.show);\n },\n _filterByCondition: function () {\n var isExpanded = this.viewModel.active === 'custom';\n this._appendTemplate(FilterMenu.templates.filterByCondition, FilterMenu.classNames.filterByCondition, true, isExpanded);\n },\n _filterByValue: function () {\n var isExpanded = this.viewModel.active === 'value';\n var wrapper = this._appendTemplate(FilterMenu.templates.filterByValue, FilterMenu.classNames.filterByValue, true, isExpanded);\n this.valuesTreeView = wrapper.find('[data-role=treeview]').data('kendoTreeView');\n var values = FilterMenuController.valuesTree(this.options.range, this.options.column);\n this.viewModel.set('valuesDataSource', new kendo.data.HierarchicalDataSource({ data: values }));\n },\n _actionButtons: function () {\n this._appendTemplate(FilterMenu.templates.actionButtons, FilterMenu.classNames.actionButtons, false);\n },\n _active: function () {\n var activeContainer = this.element.find('[data-role=details]').filter(function (index, element) {\n return $(element).data('kendoDetails').visible();\n });\n if (activeContainer.hasClass(FilterMenu.classNames.filterByValue)) {\n this.viewModel.set('active', 'value');\n } else if (activeContainer.hasClass(FilterMenu.classNames.filterByCondition)) {\n this.viewModel.set('active', 'custom');\n }\n }\n });\n kendo.spreadsheet.FilterMenu = FilterMenu;\n $.extend(true, FilterMenu, {\n classNames: classNames,\n templates: templates\n });\n }(window.kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/editor', ['kendo.core'], f);\n}(function () {\n (function (kendo) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var SheetEditor = kendo.Observable.extend({\n init: function (view) {\n kendo.Observable.fn.init.call(this);\n this.view = view;\n this.formulaBar = view.formulaBar;\n this._active = false;\n this.barInput = view.formulaBar.formulaInput;\n this.cellInput = view.formulaInput;\n this.barInput.syncWith(this.cellInput);\n this.cellInput.syncWith(this.barInput);\n this.barInput.bind('keyup', this._triggerUpdate.bind(this));\n this.cellInput.bind('keyup', this._triggerUpdate.bind(this));\n this.barInput.bind('blur', this._blur.bind(this));\n this.cellInput.bind('blur', this._blur.bind(this));\n },\n events: [\n 'activate',\n 'deactivate',\n 'change',\n 'update'\n ],\n _blur: function () {\n this.deactivate();\n },\n _triggerUpdate: function () {\n this.trigger('update', { value: this.value() });\n },\n activeEditor: function () {\n var editor = null;\n var activeElement = kendo._activeElement();\n if (this.barElement()[0] === activeElement) {\n editor = this.barInput;\n } else if (this.cellElement()[0] === activeElement) {\n editor = this.cellInput;\n }\n return editor;\n },\n activate: function (options) {\n this._active = true;\n this._rect = options.rect;\n this.cellInput.position(options.rect);\n this.cellInput.resize(options.rect);\n this.cellInput.tooltip(options.tooltip);\n this.cellInput.activeCell = this.barInput.activeCell = options.range.topLeft;\n this.trigger('activate');\n return this;\n },\n deactivate: function () {\n var cellInput = this.cellInput;\n if (!this._active) {\n return;\n }\n if (cellInput.value() != this._value) {\n this.trigger('change', { value: cellInput.value() });\n }\n this._active = false;\n this._rect = null;\n cellInput.hide();\n this.trigger('deactivate');\n },\n enable: function (enable) {\n this.barInput.enable(enable);\n this.cellInput.enable(enable);\n },\n barElement: function () {\n return this.barInput.element;\n },\n cellElement: function () {\n return this.cellInput.element;\n },\n focus: function (inputType) {\n inputType = inputType || 'cell';\n if (inputType === 'cell') {\n this.cellInput.element.focus();\n this.cellInput.end();\n } else {\n this.barInput.element.focus();\n }\n },\n isActive: function () {\n return this._active;\n },\n isFiltered: function () {\n return this.barInput.popup.visible() || this.cellInput.popup.visible();\n },\n canInsertRef: function (isKeyboardAction) {\n var editor = this.activeEditor();\n return editor && editor.canInsertRef(isKeyboardAction);\n },\n highlightedRefs: function () {\n var editor = this.activeEditor();\n var refs = [];\n if (editor) {\n refs = editor.highlightedRefs();\n }\n return refs;\n },\n scale: function () {\n this.cellInput.scale();\n },\n toggleTooltip: function (rect) {\n this.cellInput.toggleTooltip(notEqual(this._rect, rect));\n },\n value: function (value) {\n if (value === undefined) {\n return this.barInput.value();\n }\n if (value === null) {\n value = '';\n }\n this._value = value;\n this.barInput.value(value);\n this.cellInput.value(value);\n },\n insertNewline: function () {\n this.activeEditor().insertNewline();\n this.scale();\n },\n select: function () {\n this.activeEditor().select();\n }\n });\n function notEqual(oldRect, newRect) {\n return oldRect && (oldRect.top !== newRect.top || oldRect.left !== newRect.left);\n }\n kendo.spreadsheet.SheetEditor = SheetEditor;\n }(kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/autofill', [\n 'spreadsheet/runtime',\n 'spreadsheet/range'\n ], f);\n}(function () {\n 'use strict';\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var spreadsheet = kendo.spreadsheet;\n var Range = spreadsheet.Range;\n var runtime = spreadsheet.calc.runtime;\n var Formula = runtime.Formula;\n var ERR_INCOMPATIBLE = 'incompatibleRanges';\n var ERR_NO_DIRECTION = 'noFillDirection';\n var FillError = Range.FillError = function (msg) {\n this.code = msg;\n };\n Range.prototype._previewFillFrom = function (srcRange, direction) {\n var destRange = this, sheet = destRange._sheet;\n if (typeof srcRange == 'string') {\n srcRange = sheet.range(srcRange);\n }\n var src = srcRange._ref.toRangeRef();\n var dest = destRange._ref.toRangeRef();\n if (src.intersects(dest)) {\n if (src.eq(dest)) {\n return null;\n }\n dest = dest.clone();\n if (src.topLeft.eq(dest.topLeft)) {\n if (src.width() == dest.width()) {\n dest.topLeft.row += src.height();\n direction = 0;\n } else if (src.height() == dest.height()) {\n dest.topLeft.col += src.width();\n direction = 1;\n } else {\n throw new FillError(ERR_INCOMPATIBLE);\n }\n } else if (src.bottomRight.eq(dest.bottomRight)) {\n if (src.width() == dest.width()) {\n dest.bottomRight.row -= src.height();\n direction = 2;\n } else if (src.height() == dest.height()) {\n dest.bottomRight.col -= src.width();\n direction = 3;\n } else {\n throw new FillError(ERR_INCOMPATIBLE);\n }\n } else {\n throw new FillError(ERR_INCOMPATIBLE);\n }\n return sheet.range(dest)._previewFillFrom(srcRange, direction);\n }\n if (direction == null) {\n if (src.topLeft.col == dest.topLeft.col) {\n direction = src.topLeft.row < dest.topLeft.row ? 0 : 2;\n } else if (src.topLeft.row == dest.topLeft.row) {\n direction = src.topLeft.col < dest.topLeft.col ? 1 : 3;\n } else {\n throw new FillError(ERR_NO_DIRECTION);\n }\n }\n var horizontal = direction & 1;\n var descending = direction & 2;\n if (horizontal && src.height() != dest.height() || !horizontal && src.width() != dest.width()) {\n throw new FillError(ERR_INCOMPATIBLE);\n }\n var data = srcRange._properties(), n;\n if (!horizontal) {\n data = transpose(data);\n n = dest.height();\n } else {\n n = dest.width();\n }\n var fill = new Array(data.length);\n for (var i = 0; i < data.length; ++i) {\n var s = data[i];\n var f = findSeries(s);\n var a = fill[i] = new Array(n);\n for (var j = 0; j < n; ++j) {\n var idx = descending ? -j - 1 : s.length + j;\n var srcIdx = descending ? s.length - j % s.length - 1 : j % s.length;\n a[descending ? n - j - 1 : j] = f(idx, srcIdx);\n }\n }\n if (!horizontal) {\n fill = transpose(fill);\n }\n return {\n props: fill,\n direction: direction,\n dest: destRange\n };\n };\n Range.prototype.fillFrom = function (srcRange, direction) {\n var x = this._previewFillFrom(srcRange, direction);\n x.dest._properties(x.props);\n return x.dest;\n };\n function linearRegression(data) {\n var N = data.length;\n var mx = (N + 1) / 2, my = data.reduce(function (a, b) {\n return a + b;\n }, 0) / N;\n var s1 = 0, s2 = 0;\n for (var i = 0; i < N; i++) {\n var t1 = i + 1 - mx, t2 = data[i] - my;\n s1 += t1 * t2;\n s2 += t1 * t1;\n }\n if (!s2) {\n return function (N) {\n return data[N % data.length];\n };\n }\n var b = s1 / s2, a = my - b * mx;\n return function (N) {\n return a + b * (N + 1);\n };\n }\n function findSeries(properties) {\n function findStep(a) {\n var diff = a[1] - a[0];\n for (var i = 2; i < a.length; ++i) {\n if (a[i] - a[i - 1] != diff) {\n return null;\n }\n }\n return diff;\n }\n function getData(a) {\n return a.map(function (v) {\n return v.number;\n });\n }\n var series = [];\n var data = properties.map(function (x) {\n return x.formula || x.value;\n });\n forEachSeries(data, function (begin, end, type, a) {\n var f, values;\n if (type == 'number') {\n values = getData(a);\n if (values.length == 1 && (begin > 0 || end < data.length || formatType(values[0], properties[begin].format) == 'date')) {\n values.push(values[0] + 1);\n }\n f = linearRegression(values);\n } else if (type == 'string' || type == 'formula' || type == 'boolean') {\n f = function (N, i) {\n return data[i];\n };\n } else if (Array.isArray(type)) {\n if (a.length == 1) {\n f = function (N) {\n return type[(a[0].number + N) % type.length];\n };\n } else {\n var diff = findStep(getData(a));\n if (diff == null) {\n f = function (N) {\n return a[N % a.length].value;\n };\n } else {\n f = function (N) {\n var idx = a[0].number + diff * N;\n return type[idx % type.length];\n };\n }\n }\n } else if (type != 'null') {\n values = getData(a);\n if (values.length == 1) {\n values.push(values[0] + 1);\n }\n values = linearRegression(values);\n f = function (N, i) {\n return data[i].replace(/^(.*\\D)\\d+/, '$1' + values(N, i));\n };\n } else {\n f = function () {\n return null;\n };\n }\n var s = {\n f: f,\n begin: begin,\n end: end,\n len: end - begin\n };\n for (var i = begin; i < end; ++i) {\n series[i] = s;\n }\n });\n return function (N, i) {\n var s = series[i];\n var q = N / data.length | 0;\n var r = N % data.length;\n var n = q * s.len + r - s.begin;\n var value = s.f(n, i);\n var props = clone(properties[i]);\n delete props.enable;\n if (value instanceof Formula) {\n props.formula = value;\n } else {\n props.value = value;\n }\n return props;\n };\n }\n function formatType(value, format) {\n if (format != null) {\n return spreadsheet.formatting.type(value, format);\n }\n }\n function clone(obj) {\n var copy = {};\n Object.keys(obj || {}).forEach(function (key) {\n copy[key] = obj[key];\n });\n return copy;\n }\n function forEachSeries(data, f) {\n var prev = null, start = 0, a = [], type;\n for (var i = 0; i < data.length; ++i) {\n type = getType(data[i]);\n a.push(type);\n if (prev != null && type.type !== prev.type) {\n f(start, i, prev.type, a.slice(start, i));\n start = i;\n }\n prev = type;\n }\n f(start, i, prev.type, a.slice(start, i));\n }\n function getType(el) {\n if (typeof el == 'number') {\n return {\n type: 'number',\n number: el\n };\n }\n if (typeof el == 'string') {\n var lst = findStringList(el);\n if (lst) {\n return lst;\n }\n var m = /^(.*\\D)(\\d+)/.exec(el);\n if (m) {\n el = el.replace(/^(.*\\D)\\d+/, '$1-######');\n return {\n type: el,\n match: m,\n number: parseFloat(m[2])\n };\n }\n return { type: 'string' };\n }\n if (typeof el == 'boolean') {\n return { type: 'boolean' };\n }\n if (el == null) {\n return { type: 'null' };\n }\n if (el instanceof Formula) {\n return { type: 'formula' };\n }\n window.console.error(el);\n throw new Error('Cannot fill data');\n }\n function stringLists() {\n var culture = kendo.culture();\n return [\n culture.calendars.standard.days.namesAbbr,\n culture.calendars.standard.days.names,\n culture.calendars.standard.months.namesAbbr,\n culture.calendars.standard.months.names\n ];\n }\n function findStringList(str) {\n var strl = str.toLowerCase();\n var lists = stringLists();\n for (var i = 0; i < lists.length; ++i) {\n var a = lists[i];\n for (var j = a.length; --j >= 0;) {\n var el = a[j].toLowerCase();\n if (el == strl) {\n return {\n type: a,\n number: j,\n value: str\n };\n }\n }\n }\n }\n function transpose(a) {\n var height = a.length, width = a[0].length;\n var t = [];\n for (var i = 0; i < width; ++i) {\n t[i] = [];\n for (var j = 0; j < height; ++j) {\n t[i][j] = a[j][i];\n }\n }\n return t;\n }\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/nameeditor', ['kendo.core'], f);\n}(function () {\n (function (kendo) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var $ = kendo.jQuery;\n var CLASS_NAMES = {\n input: 'k-spreadsheet-name-editor',\n list: 'k-spreadsheet-name-list'\n };\n var NameEditor = kendo.ui.Widget.extend({\n init: function (element, options) {\n kendo.ui.Widget.call(this, element, options);\n element.addClass(CLASS_NAMES.input);\n var dataSource = new kendo.data.DataSource({\n transport: {\n read: function (options) {\n var data = [];\n this._workbook.forEachName(function (def) {\n if (!def.hidden && def.value instanceof kendo.spreadsheet.Ref) {\n data.push({ name: def.name });\n }\n });\n options.success(data);\n }.bind(this),\n cache: false\n }\n });\n this.combo = $('<input />').appendTo(element).kendoComboBox({\n clearButton: false,\n dataTextField: 'name',\n dataValueField: 'name',\n template: '#:data.name#<a class=\\'k-button-delete\\' href=\\'\\\\#\\'><span class=\\'k-icon k-i-close\\'></span></a>',\n dataSource: dataSource,\n autoBind: false,\n ignoreCase: true,\n change: this._on_listChange.bind(this),\n noDataTemplate: '<div></div>',\n open: function () {\n dataSource.read();\n }\n }).getKendoComboBox();\n this.combo.input.on('keydown', this._on_keyDown.bind(this)).on('focus', this._on_focus.bind(this));\n this.combo.popup.element.addClass('k-spreadsheet-names-popup').on('mousemove', function (ev) {\n ev.stopPropagation();\n }).on('click', '.k-button-delete', function (ev) {\n ev.preventDefault();\n ev.stopPropagation();\n var item = $(ev.target).closest('.k-item');\n item = this.combo.dataItem(item);\n this._deleteItem(item.name);\n }.bind(this));\n },\n value: function (val) {\n if (val === undefined) {\n return this.combo.value();\n } else {\n this.combo.value(val);\n }\n },\n _deleteItem: function (name) {\n this.trigger('delete', { name: name });\n },\n _on_keyDown: function (ev) {\n switch (ev.keyCode) {\n case 27:\n this.combo.value(this._prevValue);\n this.trigger('cancel');\n break;\n case 13:\n this.trigger('enter');\n break;\n }\n },\n _on_focus: function () {\n this._prevValue = this.combo.value();\n },\n _on_listChange: function () {\n var name = this.combo.value();\n if (name) {\n this.trigger('select', { name: name });\n }\n }\n });\n kendo.spreadsheet.NameEditor = NameEditor;\n }(window.kendo));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('spreadsheet/print', [\n 'kendo.pdf',\n 'spreadsheet/sheet',\n 'spreadsheet/range',\n 'spreadsheet/references',\n 'spreadsheet/numformat',\n 'util/text-metrics'\n ], f);\n}(function () {\n 'use strict';\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var spreadsheet = kendo.spreadsheet;\n var CellRef = spreadsheet.CellRef;\n var drawing = kendo.drawing;\n var formatting = spreadsheet.formatting;\n var geo = kendo.geometry;\n var GUIDELINE_WIDTH = 0.8;\n function distributeCoords(heights, pageHeight) {\n var curr = 0;\n var out = [];\n var threshold = 0.2 * pageHeight;\n var bottom = pageHeight;\n heights.forEach(function (h) {\n if (pageHeight && curr + h > bottom) {\n if (bottom - curr < threshold) {\n curr = pageHeight * Math.ceil(curr / pageHeight);\n }\n bottom += pageHeight * Math.ceil(h / pageHeight);\n }\n out.push(curr);\n curr += h;\n });\n out.push(curr);\n return out;\n }\n function doLayout(sheet, range, options) {\n var cells = [];\n var rowHeights = [];\n var colWidths = [];\n var mergedCells = sheet._getMergedCells(range);\n var maxRow = -1, maxCol = -1;\n sheet.forEach(range, function (row, col, cell) {\n var relrow = row - range.topLeft.row;\n var relcol = col - range.topLeft.col;\n var rh = sheet.rowHeight(row);\n var cw = sheet.columnWidth(col);\n if (!relcol) {\n rowHeights.push(rh);\n }\n if (!relrow) {\n colWidths.push(cw);\n }\n if (sheet.isHiddenColumn(col) || sheet.isHiddenRow(row) || !rh || !cw) {\n return;\n }\n var nonEmpty = options.forScreen || shouldDrawCell(cell);\n if (!(options.emptyCells || nonEmpty)) {\n return;\n }\n var id = new CellRef(row, col).print();\n if (mergedCells.secondary[id]) {\n return;\n }\n if (nonEmpty) {\n maxRow = Math.max(maxRow, relrow);\n maxCol = Math.max(maxCol, relcol);\n } else {\n cell.empty = true;\n }\n var m = mergedCells.primary[id];\n if (m) {\n delete mergedCells.primary[id];\n cell.merged = true;\n cell.rowspan = m.height();\n cell.colspan = m.width();\n if (options.forScreen) {\n cell.width = sheet._columns.sum(m.topLeft.col, m.bottomRight.col);\n cell.height = sheet._rows.sum(m.topLeft.row, m.bottomRight.row);\n }\n } else {\n cell.rowspan = 1;\n cell.colspan = 1;\n }\n cell.row = relrow;\n cell.col = relcol;\n cells.push(cell);\n });\n rowHeights = rowHeights.slice(0, maxRow + 1);\n colWidths = colWidths.slice(0, maxCol + 1);\n var pageWidth = options.pageWidth;\n var pageHeight = options.pageHeight;\n var scaleFactor = 1;\n if (options.fitWidth) {\n var width = colWidths.reduce(sum, 0);\n if (width > pageWidth) {\n scaleFactor = pageWidth / width;\n pageWidth /= scaleFactor;\n pageHeight /= scaleFactor;\n }\n }\n var yCoords = distributeCoords(rowHeights, pageHeight || 0);\n var xCoords = distributeCoords(colWidths, pageWidth || 0);\n var boxWidth = 0;\n var boxHeight = 0;\n cells = cells.filter(function (cell) {\n if (cell.empty && (cell.row > maxRow || cell.col > maxCol)) {\n return false;\n }\n cell.left = xCoords[cell.col];\n cell.top = yCoords[cell.row];\n if (cell.merged) {\n if (!options.forScreen) {\n cell.right = orlast(xCoords, cell.col + cell.colspan);\n cell.bottom = orlast(yCoords, cell.row + cell.rowspan);\n cell.width = cell.right - cell.left;\n cell.height = cell.bottom - cell.top;\n } else {\n cell.right = cell.left + cell.width;\n cell.bottom = cell.top + cell.height;\n }\n } else {\n cell.width = colWidths[cell.col];\n cell.height = rowHeights[cell.row];\n cell.bottom = cell.top + cell.height;\n cell.right = cell.left + cell.width;\n }\n boxWidth = Math.max(boxWidth, cell.right);\n boxHeight = Math.max(boxHeight, cell.bottom);\n return true;\n });\n Object.keys(mergedCells.primary).forEach(function (id) {\n var ref = mergedCells.primary[id];\n sheet.forEach(ref.topLeft.toRangeRef(), function (row, col, cell) {\n var relrow = row - range.topLeft.row;\n var relcol = col - range.topLeft.col;\n cell.merged = true;\n cell.colspan = ref.height();\n cell.rowspan = ref.width();\n if (relrow < 0) {\n cell.top = -sheet._rows.sum(row, row - relrow - 1);\n } else {\n cell.top = yCoords[relrow];\n }\n if (relcol < 0) {\n cell.left = -sheet._columns.sum(col, col - relcol - 1);\n } else {\n cell.left = xCoords[relcol];\n }\n cell.height = sheet._rows.sum(ref.topLeft.row, ref.bottomRight.row);\n cell.width = sheet._columns.sum(ref.topLeft.col, ref.bottomRight.col);\n if (cell.height > 0 && cell.width > 0) {\n cell.right = cell.left + cell.width;\n cell.bottom = cell.top + cell.height;\n cells.push(cell);\n }\n });\n });\n return {\n width: boxWidth,\n height: boxHeight,\n cells: cells.sort(normalOrder),\n scale: scaleFactor,\n xCoords: xCoords,\n yCoords: yCoords\n };\n }\n function sum(a, b) {\n return a + b;\n }\n function orlast(a, i) {\n return i < a.length ? a[i] : a[a.length - 1];\n }\n function shouldDrawCell(cell) {\n return cell.value != null || cell.merged || cell.background != null || cell.borderTop != null || cell.borderRight != null || cell.borderBottom != null || cell.borderLeft != null || cell.validation != null && !cell.validation.value;\n }\n function normalOrder(a, b) {\n if (a.top < b.top) {\n return -1;\n } else if (a.top == b.top) {\n if (a.left < b.left) {\n return -1;\n } else if (a.left == b.left) {\n return 0;\n } else {\n return 1;\n }\n } else {\n return 1;\n }\n }\n function drawLayout(layout, group, options) {\n var ncols = Math.ceil(layout.width / options.pageWidth);\n var nrows = Math.ceil(layout.height / options.pageHeight);\n var pageWidth = options.pageWidth / layout.scale;\n var pageHeight = options.pageHeight / layout.scale;\n for (var i = 0; i < ncols; ++i) {\n for (var j = 0; j < nrows; ++j) {\n addPage(j, i);\n }\n }\n function addPage(row, col) {\n var left = col * pageWidth;\n var right = left + pageWidth;\n var top = row * pageHeight;\n var bottom = top + pageHeight;\n var endbottom = 0, endright = 0;\n var cells = layout.cells.filter(function (cell) {\n if (cell.right <= left || cell.left >= right || cell.bottom <= top || cell.top >= bottom) {\n return false;\n }\n endbottom = Math.max(cell.bottom, endbottom);\n endright = Math.max(cell.right, endright);\n return true;\n });\n if (cells.length > 0) {\n var page = new drawing.Group();\n group.append(page);\n page.clip(drawing.Path.fromRect(new geo.Rect([\n 0,\n 0\n ], [\n options.pageWidth,\n options.pageHeight\n ])));\n var content = new drawing.Group();\n page.append(content);\n var matrix = geo.Matrix.scale(layout.scale, layout.scale).multiplyCopy(geo.Matrix.translate(-left, -top));\n if (options.hCenter || options.vCenter) {\n matrix = matrix.multiplyCopy(geo.Matrix.translate(options.hCenter ? (right - endright) / 2 : 0, options.vCenter ? (bottom - endbottom) / 2 : 0));\n }\n content.transform(matrix);\n if (options.guidelines) {\n var prev = null;\n layout.xCoords.forEach(function (x) {\n x = Math.min(x, endright);\n if (x !== prev && x >= left && x <= right) {\n prev = x;\n content.append(new drawing.Path().moveTo(x, top).lineTo(x, endbottom).close().stroke('#999', GUIDELINE_WIDTH));\n }\n });\n var prev = null;\n layout.yCoords.forEach(function (y) {\n y = Math.min(y, endbottom);\n if (y !== prev && y >= top && y <= bottom) {\n prev = y;\n content.append(new drawing.Path().moveTo(left, y).lineTo(endright, y).close().stroke('#999', GUIDELINE_WIDTH));\n }\n });\n }\n var borders = new drawing.Group();\n cells.forEach(function (cell) {\n drawCell(cell, content, borders, options);\n });\n content.append(borders);\n }\n }\n }\n function drawCell(cell, content, borders, options) {\n var g = new drawing.Group();\n content.append(g);\n var rect = new geo.Rect([\n cell.left,\n cell.top\n ], [\n cell.width,\n cell.height\n ]);\n if (cell.background || cell.merged) {\n var r2d2 = rect;\n if (options.guidelines) {\n r2d2 = rect.clone();\n r2d2.origin.x += GUIDELINE_WIDTH / 2;\n r2d2.origin.y += GUIDELINE_WIDTH / 2;\n r2d2.size.width -= GUIDELINE_WIDTH;\n r2d2.size.height -= GUIDELINE_WIDTH;\n }\n g.append(new drawing.Rect(r2d2).fill(cell.background || '#fff').stroke(null));\n }\n if (cell.borderLeft) {\n borders.append(new drawing.Path().moveTo(cell.left, cell.top).lineTo(cell.left, cell.bottom).close().stroke(cell.borderLeft.color, cell.borderLeft.size));\n }\n if (cell.borderTop) {\n borders.append(new drawing.Path().moveTo(cell.left, cell.top).lineTo(cell.right, cell.top).close().stroke(cell.borderTop.color, cell.borderTop.size));\n }\n if (cell.borderRight) {\n borders.append(new drawing.Path().moveTo(cell.right, cell.top).lineTo(cell.right, cell.bottom).close().stroke(cell.borderRight.color, cell.borderRight.size));\n }\n if (cell.borderBottom) {\n borders.append(new drawing.Path().moveTo(cell.left, cell.bottom).lineTo(cell.right, cell.bottom).close().stroke(cell.borderBottom.color, cell.borderBottom.size));\n }\n var val = cell.value;\n if (val != null) {\n var type = typeof val == 'number' ? 'number' : null;\n var clip = new drawing.Group();\n clip.clip(drawing.Path.fromRect(rect));\n g.append(clip);\n var f;\n if (cell.format) {\n f = formatting.textAndColor(val, cell.format);\n val = f.text;\n if (f.type) {\n type = f.type;\n }\n } else {\n val += '';\n }\n if (!cell.textAlign) {\n switch (type) {\n case 'number':\n case 'date':\n case 'percent':\n cell.textAlign = 'right';\n break;\n case 'boolean':\n cell.textAlign = 'center';\n break;\n }\n }\n drawText(val, f && f.color || cell.color || '#000', cell, clip);\n }\n }\n var CONT;\n function drawText(text, color, cell, group) {\n if (!CONT) {\n CONT = document.createElement('div');\n CONT.style.position = 'absolute';\n CONT.style.left = '-10000px';\n CONT.style.top = '-10000px';\n CONT.style.overflow = 'hidden';\n CONT.style.boxSizing = 'border-box';\n CONT.style.padding = '2px 4px';\n CONT.style.lineHeight = 'normal';\n document.body.appendChild(CONT);\n }\n CONT.style.color = color;\n CONT.style.font = makeFontDef(cell);\n CONT.style.width = cell.width + 'px';\n CONT.style.textAlign = cell.textAlign || 'left';\n CONT.style.textDecoration = cell.underline ? 'underline' : 'none';\n if (cell.wrap) {\n CONT.style.whiteSpace = 'pre-wrap';\n CONT.style.overflowWrap = CONT.style.wordWrap = 'break-word';\n } else {\n CONT.style.whiteSpace = 'pre';\n CONT.style.overflowWrap = CONT.style.wordWrap = 'normal';\n }\n if (CONT.firstChild) {\n CONT.removeChild(CONT.firstChild);\n }\n CONT.appendChild(document.createTextNode(text));\n var vtrans = 0;\n switch (cell.verticalAlign) {\n case 'center':\n vtrans = cell.height - CONT.offsetHeight >> 1;\n break;\n case undefined:\n case null:\n case 'bottom':\n vtrans = cell.height - CONT.offsetHeight;\n break;\n }\n if (vtrans < 0) {\n vtrans = 0;\n }\n var text_group = kendo.drawing.drawDOM.drawText(CONT);\n text_group.transform(geo.Matrix.translate(10000 + cell.left, 10000 + cell.top + vtrans));\n group.append(text_group);\n }\n function makeFontDef(cell) {\n var font = [];\n if (cell.italic) {\n font.push('italic');\n }\n if (cell.bold) {\n font.push('bold');\n }\n font.push((cell.fontSize || 12) + 'px');\n font.push(cell.fontFamily || 'Arial');\n return font.join(' ');\n }\n function draw(sheet, range, options, callback) {\n if (options == null && callback == null) {\n callback = range;\n options = {};\n range = spreadsheet.SHEETREF;\n }\n if (callback == null) {\n callback = options;\n if (range instanceof spreadsheet.Range || range instanceof spreadsheet.Ref || typeof range == 'string') {\n options = {};\n } else {\n options = range;\n range = spreadsheet.SHEETREF;\n }\n }\n options = kendo.jQuery.extend({\n paperSize: 'A4',\n landscape: true,\n margin: '1cm',\n guidelines: true,\n emptyCells: true,\n fitWidth: false,\n center: false\n }, options);\n var group = new drawing.Group();\n var paper = kendo.pdf.getPaperOptions(options);\n group.options.set('pdf', {\n author: options.author,\n creator: options.creator,\n date: options.date,\n keywords: options.keywords,\n margin: paper.margin,\n multiPage: true,\n paperSize: paper.paperSize,\n subject: options.subject,\n title: options.title\n });\n var pageWidth = paper.paperSize[0];\n var pageHeight = paper.paperSize[1];\n if (paper.margin) {\n pageWidth -= paper.margin.left + paper.margin.right;\n pageHeight -= paper.margin.top + paper.margin.bottom;\n }\n options.pageWidth = pageWidth;\n options.pageHeight = pageHeight;\n var layout = doLayout(sheet, sheet._ref(range), options);\n drawLayout(layout, group, options);\n callback(group);\n }\n spreadsheet.Sheet.prototype.draw = function (range, options, callback) {\n var sheet = this;\n if (sheet._workbook) {\n sheet.recalc(sheet._workbook._context, function () {\n draw(sheet, range, options, callback);\n });\n } else {\n draw(sheet, range, options, callback);\n }\n };\n spreadsheet.draw = {\n doLayout: doLayout,\n drawLayout: drawLayout,\n shouldDrawCell: shouldDrawCell\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.spreadsheet', [\n 'util/undoredostack',\n 'util/text-metrics',\n 'util/parse-xml',\n 'kendo.excel',\n 'kendo.progressbar',\n 'kendo.pdf',\n 'spreadsheet/commands',\n 'spreadsheet/formulabar',\n 'spreadsheet/formulainput',\n 'spreadsheet/eventlistener',\n 'spreadsheet/rangelist',\n 'spreadsheet/propertybag',\n 'spreadsheet/references',\n 'spreadsheet/navigator',\n 'spreadsheet/axismanager',\n 'spreadsheet/clipboard',\n 'spreadsheet/range',\n 'spreadsheet/sheet',\n 'spreadsheet/sheetsbar',\n 'spreadsheet/excel-reader',\n 'spreadsheet/workbook',\n 'spreadsheet/formulacontext',\n 'spreadsheet/controller',\n 'spreadsheet/view',\n 'spreadsheet/customeditors',\n 'spreadsheet/grid',\n 'spreadsheet/axis',\n 'spreadsheet/filter',\n 'spreadsheet/sorter',\n 'spreadsheet/runtime',\n 'spreadsheet/calc',\n 'spreadsheet/numformat',\n 'spreadsheet/runtime.functions',\n 'spreadsheet/runtime.functions.2',\n 'spreadsheet/toolbar',\n 'spreadsheet/dialogs',\n 'spreadsheet/sheetbinder',\n 'spreadsheet/filtermenu',\n 'spreadsheet/editor',\n 'spreadsheet/autofill',\n 'spreadsheet/nameeditor',\n 'spreadsheet/print'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'spreadsheet',\n name: 'Spreadsheet',\n category: 'web',\n description: 'Spreadsheet component',\n depends: [\n 'core',\n 'binder',\n 'colorpicker',\n 'combobox',\n 'data',\n 'dom',\n 'dropdownlist',\n 'menu',\n 'ooxml',\n 'popup',\n 'sortable',\n 'tabstrip',\n 'toolbar',\n 'treeview',\n 'window',\n 'validator',\n 'excel',\n 'pdf',\n 'drawing'\n ]\n };\n (function (kendo, undefined) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 9) {\n return;\n }\n var $ = kendo.jQuery;\n var Widget = kendo.ui.Widget;\n var Workbook = kendo.spreadsheet.Workbook;\n var Controller = kendo.spreadsheet.Controller;\n var View = kendo.spreadsheet.View;\n var NS = '.kendoSpreadsheet';\n var ALL_REASONS = {\n recalc: true,\n selection: true,\n activeCell: true,\n layout: true,\n sheetSelection: true,\n resize: true,\n editorChange: false,\n editorClose: false\n };\n var classNames = { wrapper: 'k-widget k-spreadsheet' };\n var Spreadsheet = kendo.ui.Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this.element.addClass(Spreadsheet.classNames.wrapper);\n this._view = new View(this.element, {\n messages: this.options.messages.view,\n toolbar: this.options.toolbar,\n sheetsbar: this.options.sheetsbar\n });\n this._workbook = new Workbook(this.options, this._view);\n this._controller = new Controller(this._view, this._workbook);\n this._autoRefresh = true;\n this._bindWorkbookEvents();\n this._view.workbook(this._workbook);\n this.refresh();\n this._resizeHandler = function () {\n this.resize();\n }.bind(this);\n $(window).on('resize' + NS, this._resizeHandler);\n },\n _resize: function () {\n this.refresh({ layout: true });\n },\n _workbookChange: function (e) {\n if (this._autoRefresh) {\n this.refresh(e);\n }\n if (e.recalc && e.ref) {\n var range = e.range || new kendo.spreadsheet.Range(e.ref, this.activeSheet());\n this.trigger('change', { range: range });\n }\n },\n _workbookCut: function (e) {\n this.trigger('cut', e);\n },\n _workbookCopy: function (e) {\n this.trigger('copy', e);\n },\n _workbookPaste: function (e) {\n this.trigger('paste', e);\n },\n activeSheet: function (sheet) {\n return this._workbook.activeSheet(sheet);\n },\n moveSheetToIndex: function (sheet, index) {\n return this._workbook.moveSheetToIndex(sheet, index);\n },\n insertSheet: function (options) {\n return this._workbook.insertSheet(options);\n },\n sheets: function () {\n return this._workbook.sheets();\n },\n removeSheet: function (sheet) {\n return this._workbook.removeSheet(sheet);\n },\n sheetByName: function (sheetName) {\n return this._workbook.sheetByName(sheetName);\n },\n sheetIndex: function (sheet) {\n return this._workbook.sheetIndex(sheet);\n },\n sheetByIndex: function (index) {\n return this._workbook.sheetByIndex(index);\n },\n renameSheet: function (sheet, newSheetName) {\n return this._workbook.renameSheet(sheet, newSheetName);\n },\n refresh: function (reason) {\n if (!reason) {\n reason = ALL_REASONS;\n }\n if (!reason.editorClose) {\n this._view.sheet(this._workbook.activeSheet());\n this._controller.sheet(this._workbook.activeSheet());\n this._workbook.refresh(reason);\n }\n if (!reason.editorChange) {\n this._view.refresh(reason);\n this._controller.refresh();\n this._view.render();\n this.trigger('render');\n }\n return this;\n },\n openDialog: function (name, options) {\n return this._view.openDialog(name, options);\n },\n autoRefresh: function (value) {\n if (value !== undefined) {\n this._autoRefresh = value;\n if (value === true) {\n this.refresh();\n }\n return this;\n }\n return this._autoRefresh;\n },\n toJSON: function () {\n return this._workbook.toJSON();\n },\n fromJSON: function (json) {\n if (json.sheets) {\n this._workbook.destroy();\n this._workbook = new Workbook($.extend({}, this.options, json));\n this._bindWorkbookEvents();\n this._view.workbook(this._workbook);\n this._controller.workbook(this._workbook);\n this.activeSheet(this.activeSheet());\n } else {\n this.refresh();\n }\n },\n fromFile: function (blob, name) {\n return this._workbook.fromFile(blob, name);\n },\n saveAsPDF: function (options) {\n this._workbook.saveAsPDF($.extend({}, this.options.pdf, options, { workbook: this._workbook }));\n },\n saveAsExcel: function (options) {\n this._workbook.saveAsExcel(options);\n },\n draw: function (options, callback) {\n this._workbook.draw(options, callback);\n },\n _workbookExcelExport: function (e) {\n if (this.trigger('excelExport', e)) {\n e.preventDefault();\n }\n },\n _workbookExcelImport: function (e) {\n if (this.trigger('excelImport', e)) {\n e.preventDefault();\n } else {\n this._initProgress(e.promise);\n }\n },\n _initProgress: function (deferred) {\n var loading = $('<div class=\\'k-loading-mask\\' ' + 'style=\\'width: 100%; height: 100%; top: 0;\\'>' + '<div class=\\'k-loading-color\\'/>' + '</div>').appendTo(this.element);\n var pb = $('<div class=\\'k-loading-progress\\'>').appendTo(loading).kendoProgressBar({\n type: 'chunk',\n chunkCount: 10,\n min: 0,\n max: 1,\n value: 0\n }).data('kendoProgressBar');\n deferred.progress(function (e) {\n pb.value(e.progress);\n }).always(function () {\n kendo.destroy(loading);\n loading.remove();\n });\n },\n _workbookPdfExport: function (e) {\n if (this.trigger('pdfExport', e)) {\n e.preventDefault();\n }\n },\n _workbookInsertSheet: function (e) {\n if (this.trigger('insertSheet', e)) {\n e.preventDefault();\n }\n },\n _workbookRemoveSheet: function (e) {\n if (this.trigger('removeSheet', e)) {\n e.preventDefault();\n }\n },\n _workbookSelectSheet: function (e) {\n if (this.trigger('selectSheet', e)) {\n e.preventDefault();\n }\n },\n _workbookRenameSheet: function (e) {\n if (this.trigger('renameSheet', e)) {\n e.preventDefault();\n }\n },\n _workbookInsertRow: function (e) {\n if (this.trigger('insertRow', e)) {\n e.preventDefault();\n }\n },\n _workbookInsertColumn: function (e) {\n if (this.trigger('insertColumn', e)) {\n e.preventDefault();\n }\n },\n _workbookDeleteRow: function (e) {\n if (this.trigger('deleteRow', e)) {\n e.preventDefault();\n }\n },\n _workbookDeleteColumn: function (e) {\n if (this.trigger('deleteColumn', e)) {\n e.preventDefault();\n }\n },\n _workbookHideRow: function (e) {\n if (this.trigger('hideRow', e)) {\n e.preventDefault();\n }\n },\n _workbookHideColumn: function (e) {\n if (this.trigger('hideColumn', e)) {\n e.preventDefault();\n }\n },\n _workbookUnhideRow: function (e) {\n if (this.trigger('unhideRow', e)) {\n e.preventDefault();\n }\n },\n _workbookUnhideColumn: function (e) {\n if (this.trigger('unhideColumn', e)) {\n e.preventDefault();\n }\n },\n _workbookSelect: function (e) {\n this.trigger('select', e);\n },\n _workbookChangeFormat: function (e) {\n this.trigger('changeFormat', e);\n },\n _bindWorkbookEvents: function () {\n this._workbook.bind('cut', this._workbookCut.bind(this));\n this._workbook.bind('copy', this._workbookCopy.bind(this));\n this._workbook.bind('paste', this._workbookPaste.bind(this));\n this._workbook.bind('change', this._workbookChange.bind(this));\n this._workbook.bind('excelExport', this._workbookExcelExport.bind(this));\n this._workbook.bind('excelImport', this._workbookExcelImport.bind(this));\n this._workbook.bind('pdfExport', this._workbookPdfExport.bind(this));\n this._workbook.bind('insertSheet', this._workbookInsertSheet.bind(this));\n this._workbook.bind('removeSheet', this._workbookRemoveSheet.bind(this));\n this._workbook.bind('selectSheet', this._workbookSelectSheet.bind(this));\n this._workbook.bind('renameSheet', this._workbookRenameSheet.bind(this));\n this._workbook.bind('insertRow', this._workbookInsertRow.bind(this));\n this._workbook.bind('insertColumn', this._workbookInsertColumn.bind(this));\n this._workbook.bind('deleteRow', this._workbookDeleteRow.bind(this));\n this._workbook.bind('deleteColumn', this._workbookDeleteColumn.bind(this));\n this._workbook.bind('hideRow', this._workbookHideRow.bind(this));\n this._workbook.bind('hideColumn', this._workbookHideColumn.bind(this));\n this._workbook.bind('unhideRow', this._workbookUnhideRow.bind(this));\n this._workbook.bind('unhideColumn', this._workbookUnhideColumn.bind(this));\n this._workbook.bind('select', this._workbookSelect.bind(this));\n this._workbook.bind('changeFormat', this._workbookChangeFormat.bind(this));\n },\n destroy: function () {\n kendo.ui.Widget.fn.destroy.call(this);\n this._workbook.destroy();\n this._controller.destroy();\n this._view.destroy();\n if (this._resizeHandler) {\n $(window).off('resize' + NS, this._resizeHandler);\n }\n },\n options: {\n name: 'Spreadsheet',\n toolbar: true,\n sheetsbar: true,\n rows: 200,\n columns: 50,\n rowHeight: 20,\n columnWidth: 64,\n headerHeight: 20,\n headerWidth: 32,\n excel: {\n proxyURL: '',\n fileName: 'Workbook.xlsx'\n },\n messages: {},\n pdf: {\n area: 'workbook',\n fileName: 'Workbook.pdf',\n proxyURL: '',\n paperSize: 'a4',\n landscape: true,\n margin: null,\n title: null,\n author: null,\n subject: null,\n keywords: null,\n creator: 'Kendo UI PDF Generator v.' + kendo.version,\n date: null\n },\n defaultCellStyle: {\n fontFamily: 'Arial',\n fontSize: '12'\n }\n },\n defineName: function (name, value, hidden) {\n return this._workbook.defineName(name, value, hidden);\n },\n undefineName: function (name) {\n return this._workbook.undefineName(name);\n },\n nameValue: function (name) {\n return this._workbook.nameValue(name);\n },\n forEachName: function (func) {\n return this._workbook.forEachName(func);\n },\n cellContextMenu: function () {\n return this._view.cellContextMenu;\n },\n rowHeaderContextMenu: function () {\n return this._view.rowHeaderContextMenu;\n },\n colHeaderContextMenu: function () {\n return this._view.colHeaderContextMenu;\n },\n events: [\n 'cut',\n 'copy',\n 'paste',\n 'pdfExport',\n 'excelExport',\n 'excelImport',\n 'change',\n 'render',\n 'removeSheet',\n 'selectSheet',\n 'renameSheet',\n 'insertRow',\n 'insertColumn',\n 'deleteRow',\n 'insertSheet',\n 'deleteColumn',\n 'hideRow',\n 'hideColumn',\n 'unhideRow',\n 'unhideColumn',\n 'select',\n 'changeFormat'\n ]\n });\n kendo.spreadsheet.ALL_REASONS = ALL_REASONS;\n kendo.ui.plugin(Spreadsheet);\n $.extend(true, Spreadsheet, { classNames: classNames });\n }(window.kendo));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.pivot.configurator', ['kendo.dom'], f);\n}(function () {\n var __meta__ = {\n id: 'pivot.configurator',\n name: 'PivotConfigurator',\n category: 'web',\n depends: [\n 'dropdownlist',\n 'treeview',\n 'pivot.fieldmenu'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, ns = '.kendoPivotConfigurator', HOVEREVENTS = 'mouseenter' + ns + ' mouseleave' + ns, SETTING_CONTAINER_TEMPLATE = kendo.template('<p class=\"k-reset\"><span class=\"k-icon #=icon#\"></span>${name}</p>' + '<div class=\"k-list-container k-reset\"/>');\n function addKPI(data) {\n var found;\n var idx = 0;\n var length = data.length;\n for (; idx < length; idx++) {\n if (data[idx].type == 2) {\n found = true;\n break;\n }\n }\n if (found) {\n data.splice(idx + 1, 0, {\n caption: 'KPIs',\n defaultHierarchy: '[KPIs]',\n name: 'KPIs',\n uniqueName: '[KPIs]'\n });\n }\n }\n function kpiNode(node) {\n return {\n name: node.uniqueName,\n type: node.type\n };\n }\n function normalizeKPIs(data) {\n for (var idx = 0, length = data.length; idx < length; idx++) {\n data[idx].uniqueName = data[idx].name;\n data[idx].type = 'kpi';\n }\n return data;\n }\n function settingTargetFromNode(node) {\n var target = $(node).closest('.k-pivot-setting');\n if (target.length) {\n return target.data('kendoPivotSettingTarget');\n }\n return null;\n }\n var PivotConfigurator = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this.element.addClass('k-widget k-fieldselector k-alt k-edit-form-container');\n this._dataSource();\n this._layout();\n this.refresh();\n kendo.notify(this);\n },\n events: [],\n options: {\n name: 'PivotConfigurator',\n filterable: false,\n sortable: false,\n messages: {\n measures: 'Drop Data Fields Here',\n columns: 'Drop Column Fields Here',\n rows: 'Drop Rows Fields Here',\n measuresLabel: 'Measures',\n columnsLabel: 'Columns',\n rowsLabel: 'Rows',\n fieldsLabel: 'Fields'\n }\n },\n _dataSource: function () {\n var that = this;\n if (that.dataSource && that._refreshHandler) {\n that.dataSource.unbind('change', that._refreshHandler).unbind('error', that._errorHandler).unbind('progress', that._progressHandler);\n } else {\n that._errorHandler = $.proxy(that._error, that);\n that._refreshHandler = $.proxy(that.refresh, that);\n that._progressHandler = $.proxy(that._requestStart, that);\n }\n that.dataSource = kendo.data.PivotDataSource.create(that.options.dataSource);\n that.dataSource.bind('change', that._refreshHandler).bind('error', that._errorHandler).bind('progress', that._progressHandler);\n },\n setDataSource: function (dataSource) {\n this.options.dataSource = dataSource;\n this._dataSource();\n if (this.measures) {\n this.measures.setDataSource(dataSource);\n }\n if (this.rows) {\n this.rows.setDataSource(dataSource);\n }\n if (this.columns) {\n this.columns.setDataSource(dataSource);\n }\n this.refresh();\n },\n _treeViewDataSource: function () {\n var that = this;\n return kendo.data.HierarchicalDataSource.create({\n schema: {\n model: {\n id: 'uniqueName',\n hasChildren: function (item) {\n return !('hierarchyUniqueName' in item) && !('aggregator' in item);\n }\n }\n },\n transport: {\n read: function (options) {\n var promise;\n var node;\n var kpi;\n if ($.isEmptyObject(options.data)) {\n promise = that.dataSource.schemaDimensions();\n promise.done(function (data) {\n if (!that.dataSource.cubeBuilder) {\n addKPI(data);\n }\n options.success(data);\n }).fail(options.error);\n } else {\n node = that.treeView.dataSource.get(options.data.uniqueName);\n if (node.uniqueName === '[KPIs]') {\n kpi = true;\n promise = that.dataSource.schemaKPIs();\n promise.done(function (data) {\n options.success(normalizeKPIs(data));\n }).fail(options.error);\n } else if (node.type == 'kpi') {\n kpi = true;\n options.success(buildKPImeasures(node));\n }\n if (!kpi) {\n if (node.type == 2) {\n promise = that.dataSource.schemaMeasures();\n } else if (node.dimensionUniqueName) {\n promise = that.dataSource.schemaLevels(options.data.uniqueName);\n } else {\n promise = that.dataSource.schemaHierarchies(options.data.uniqueName);\n }\n promise.done(options.success).fail(options.error);\n }\n }\n }\n }\n });\n },\n _progress: function (toggle) {\n kendo.ui.progress(this.element, toggle);\n },\n _error: function () {\n this._progress(false);\n },\n _requestStart: function () {\n this._progress(true);\n },\n _layout: function () {\n this.form = $('<div class=\"k-columns k-state-default k-floatwrap\"/>').appendTo(this.element);\n this._fields();\n this._targets();\n },\n _fields: function () {\n var container = $('<div class=\"k-state-default\"><p class=\"k-reset\"><span class=\"k-icon k-i-group\"></span>' + this.options.messages.fieldsLabel + '</p></div>').appendTo(this.form);\n var template = '# if (item.type == 2 || item.uniqueName == \"[KPIs]\") { #' + '<span class=\"k-icon k-i-#= (item.type == 2 ? \"sum\" : \"kpi\") #\"></span>' + '# } else if (item.type && item.type !== \"kpi\") { #' + '<span class=\"k-icon k-i-arrows-dimensions\"></span>' + '# } #' + '#: item.caption || item.name #';\n this.treeView = $('<div/>').appendTo(container).kendoTreeView({\n template: template,\n dataTextField: 'caption',\n dragAndDrop: true,\n autoBind: false,\n dataSource: this._treeViewDataSource(),\n dragstart: function (e) {\n var dataItem = this.dataItem(e.sourceNode);\n if (!dataItem.hasChildren && !dataItem.aggregator && !dataItem.measure || dataItem.type == 2 || dataItem.uniqueName === '[KPIs]') {\n e.preventDefault();\n }\n },\n drag: function (e) {\n var status = 'k-i-cancel';\n var setting = settingTargetFromNode(e.dropTarget);\n if (setting && setting.validate(this.dataItem(e.sourceNode))) {\n status = 'k-i-plus';\n }\n e.setStatusClass(status);\n },\n drop: function (e) {\n e.preventDefault();\n var setting = settingTargetFromNode(e.dropTarget);\n var node = this.dataItem(e.sourceNode);\n var idx, length, measures;\n var name;\n if (setting && setting.validate(node)) {\n name = node.defaultHierarchy || node.uniqueName;\n if (node.type === 'kpi') {\n measures = buildKPImeasures(node);\n length = measures.length;\n name = [];\n for (idx = 0; idx < length; idx++) {\n name.push(kpiNode(measures[idx]));\n }\n } else if (node.kpi) {\n name = [kpiNode(node)];\n }\n setting.add(name);\n }\n }\n }).data('kendoTreeView');\n },\n _createTarget: function (element, options) {\n var template = '<li class=\"k-item k-header\" data-' + kendo.ns + 'name=\"${data.name}\">${data.name}';\n var sortable = options.sortable;\n var icons = '';\n if (sortable) {\n icons += '#if (data.sortIcon) {#';\n icons += '<span class=\"k-icon ${data.sortIcon}-sm\"></span>';\n icons += '#}#';\n }\n if (options.filterable || sortable) {\n icons += '<span class=\"k-icon k-i-more-vertical k-setting-fieldmenu\"></span>';\n }\n icons += '<span class=\"k-icon k-i-close k-setting-delete\"></span>';\n template += '<span class=\"k-field-actions\">' + icons + '</span></li>';\n return new kendo.ui.PivotSettingTarget(element, $.extend({\n dataSource: this.dataSource,\n hint: function (element) {\n var wrapper = $('<div class=\"k-fieldselector\"><ul class=\"k-list k-reset\"></ul></div>');\n wrapper.find('.k-list').append(element.clone());\n return wrapper;\n },\n template: template,\n emptyTemplate: '<li class=\"k-item k-empty\">${data}</li>'\n }, options));\n },\n _targets: function () {\n var container = $('<div class=\"k-state-default\"/>').appendTo(this.form);\n var columnsContainer = $(SETTING_CONTAINER_TEMPLATE({\n name: this.options.messages.columnsLabel,\n icon: 'k-i-columns'\n })).appendTo(container);\n var columns = $('<ul class=\"k-pivot-configurator-settings k-list k-reset\" />').appendTo(columnsContainer.last());\n var rowsContainer = $(SETTING_CONTAINER_TEMPLATE({\n name: this.options.messages.rowsLabel,\n icon: 'k-i-rows'\n })).appendTo(container);\n var rows = $('<ul class=\"k-pivot-configurator-settings k-list k-reset\" />').appendTo(rowsContainer.last());\n var measuresContainer = $(SETTING_CONTAINER_TEMPLATE({\n name: this.options.messages.measuresLabel,\n icon: 'k-i-sum'\n })).appendTo(container);\n var measures = $('<ul class=\"k-pivot-configurator-settings k-list k-reset\" />').appendTo(measuresContainer.last());\n var options = this.options;\n this.columns = this._createTarget(columns, {\n filterable: options.filterable,\n sortable: options.sortable,\n connectWith: rows,\n messages: {\n empty: options.messages.columns,\n fieldMenu: options.messages.fieldMenu\n }\n });\n this.rows = this._createTarget(rows, {\n filterable: options.filterable,\n sortable: options.sortable,\n setting: 'rows',\n connectWith: columns,\n messages: {\n empty: this.options.messages.rows,\n fieldMenu: this.options.messages.fieldMenu\n }\n });\n this.measures = this._createTarget(measures, {\n setting: 'measures',\n messages: { empty: options.messages.measures }\n });\n columns.add(rows).add(measures).on(HOVEREVENTS, '.k-item:not(.k-empty)', this._toggleHover);\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass('k-state-hover', e.type === 'mouseenter');\n },\n _resize: function () {\n var element = this.element;\n var height = this.options.height;\n var border, fields;\n var outerHeight = kendo._outerHeight;\n if (!height) {\n return;\n }\n element.height(height);\n if (element.is(':visible')) {\n fields = element.children('.k-columns').children('div.k-state-default');\n height = element.innerHeight();\n border = (outerHeight(element) - height) / 2;\n height = height - (outerHeight(fields, true) - fields.height()) - border;\n fields.height(height);\n }\n },\n refresh: function () {\n var dataSource = this.dataSource;\n if (dataSource.cubeBuilder || this._cube !== dataSource.cube() || this._catalog !== dataSource.catalog()) {\n this.treeView.dataSource.fetch();\n }\n this._catalog = this.dataSource.catalog();\n this._cube = this.dataSource.cube();\n this._resize();\n this._progress(false);\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.dataSource.unbind('change', this._refreshHandler);\n this.form.find('.k-list').off(ns);\n this.rows.destroy();\n this.columns.destroy();\n this.measures.destroy();\n this.treeView.destroy();\n this.element = null;\n this._refreshHandler = null;\n }\n });\n function kpiMeasure(name, measure, type) {\n return {\n hierarchyUniqueName: name,\n uniqueName: measure,\n caption: measure,\n measure: measure,\n name: measure,\n type: type,\n kpi: true\n };\n }\n function buildKPImeasures(node) {\n var name = node.name;\n return [\n kpiMeasure(name, node.value, 'value'),\n kpiMeasure(name, node.goal, 'goal'),\n kpiMeasure(name, node.status, 'status'),\n kpiMeasure(name, node.trend, 'trend')\n ];\n }\n ui.plugin(PivotConfigurator);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.angular', ['kendo.core'], f);\n}(function () {\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 (function ($, angular, undefined) {\n 'use strict';\n if (!angular || !angular.injector) {\n return;\n }\n var module = angular.module('kendo.directives', []), $injector = angular.injector(['ng']), $parse = $injector.get('$parse'), $timeout = $injector.get('$timeout'), $defaultCompile, $log = $injector.get('$log');\n function withoutTimeout(f) {\n var save = $timeout;\n try {\n $timeout = function (f) {\n return f();\n };\n return f();\n } finally {\n $timeout = save;\n }\n }\n var OPTIONS_NOW;\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 scope.$watch(source, function (mew) {\n var widget = kendoWidgetInstance(element);\n if (widget && typeof widget.setDataSource == 'function') {\n if (mew !== current) {\n var ds = toDataSource(mew, type);\n widget.setDataSource(ds);\n current = mew;\n }\n }\n });\n return ds;\n };\n }();\n var ignoredAttributes = {\n kDataSource: true,\n kOptions: true,\n kRebind: true,\n kNgModel: true,\n kNgDelay: true\n };\n var ignoredOwnProperties = {\n name: true,\n title: true,\n style: true\n };\n function createWidget(scope, element, attrs, widget, origAttr, controllers) {\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 var kNgDelay = attrs.kNgDelay, delayValue = scope.$eval(kNgDelay);\n controllers = controllers || [];\n var ngModel = controllers[0], ngForm = controllers[1];\n var ctor = $(element)[widget];\n if (!ctor) {\n window.console.error('Could not find: ' + widget);\n return null;\n }\n var parsed = parseOptions(scope, element, attrs, widget, ctor);\n var options = parsed.options;\n if (parsed.unresolved.length) {\n var promises = [];\n for (var i = 0, len = parsed.unresolved.length; i < len; i++) {\n var unresolved = parsed.unresolved[i];\n var promise = $.Deferred(function (d) {\n var unwatch = scope.$watch(unresolved.path, function (newValue) {\n if (newValue !== undefined) {\n unwatch();\n d.resolve();\n }\n });\n }).promise();\n promises.push(promise);\n }\n $.when.apply(null, promises).then(createIt);\n return;\n }\n if (kNgDelay && !delayValue) {\n var root = scope.$root || scope;\n var register = function () {\n var unregister = scope.$watch(kNgDelay, function (newValue) {\n if (newValue !== undefined) {\n unregister();\n element.removeAttr(attrs.$attr.kNgDelay);\n kNgDelay = null;\n $timeout(createIt);\n }\n });\n };\n if (/^\\$(digest|apply)$/.test(root.$$phase)) {\n register();\n } else {\n scope.$apply(register);\n }\n return;\n } else {\n return createIt();\n }\n function createIt() {\n var originalElement;\n if (attrs.kRebind) {\n originalElement = $($(element)[0].cloneNode(true));\n }\n options = parseOptions(scope, element, attrs, widget, ctor).options;\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 }(element[0].options));\n }\n var object = ctor.call(element, OPTIONS_NOW = options).data(widget);\n exposeWidget(object, scope, attrs, widget, origAttr);\n scope.$emit('kendoWidgetCreated', object);\n var destroyRegister = destroyWidgetOnScopeDestroy(scope, object);\n if (attrs.kRebind) {\n setupRebind(object, scope, element, originalElement, attrs.kRebind, destroyRegister, attrs);\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 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 if (attrs.kNgModel) {\n bindToKNgModel(object, scope, attrs.kNgModel);\n }\n if (ngModel) {\n bindToNgModel(object, scope, element, ngModel, ngForm);\n }\n if (object) {\n propagateClassToWidgetWrapper(object, element);\n }\n return object;\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 if (optionsPath && optionsValue === undefined) {\n unresolved.push({\n option: 'options',\n path: optionsPath\n });\n }\n var options = angular.extend({}, attrs.defaultOptions, optionsValue);\n function addOption(name, value) {\n var scopeValue = angular.copy(scope.$eval(value));\n if (scopeValue === undefined) {\n unresolved.push({\n option: name,\n path: value\n });\n } else {\n options[name] = scopeValue;\n }\n }\n var widgetOptions = ctor.widget.prototype.options;\n var widgetEvents = ctor.widget.prototype.events;\n $.each(attrs, function (name, value) {\n if (name === 'source' || name === 'kDataSource' || name === 'kScopeField' || name === 'scopeField') {\n return;\n }\n var dataName = 'data' + name.charAt(0).toUpperCase() + name.slice(1);\n if (name.indexOf('on') === 0) {\n var eventKey = name.replace(/^on./, function (prefix) {\n return prefix.charAt(2).toLowerCase();\n });\n if (widgetEvents.indexOf(eventKey) > -1) {\n options[eventKey] = value;\n }\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') {\n options[optionName] = value;\n } else {\n if (name == 'kOnLabel') {\n optionName = 'onLabel';\n }\n addOption(optionName, value);\n }\n }\n }\n });\n var dataSource = attrs.kDataSource || attrs.source;\n if (dataSource) {\n options.dataSource = createDataSource(scope, element, role, dataSource);\n }\n options.$angular = [scope];\n return {\n options: options,\n unresolved: unresolved\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 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 function exposeWidget(widget, scope, attrs, kendoWidget, origAttr) {\n if (attrs[origAttr]) {\n var set = $parse(attrs[origAttr]).assign;\n if (set) {\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 function formValue(element) {\n if (/checkbox|radio/i.test(element.attr('type'))) {\n return element.prop('checked');\n }\n return element.val();\n }\n var formRegExp = /^(input|select|textarea)$/i;\n function isForm(element) {\n return formRegExp.test(element[0].tagName);\n }\n function bindToNgModel(widget, scope, element, ngModel, ngForm) {\n if (!widget.value) {\n return;\n }\n var value;\n var haveChangeOnElement = false;\n if (isForm(element)) {\n value = function () {\n return formValue(element);\n };\n } else {\n value = function () {\n return widget.value();\n };\n }\n var viewRender = function () {\n var val = ngModel.$viewValue;\n if (val === undefined) {\n val = ngModel.$modelValue;\n }\n if (val === undefined) {\n val = null;\n }\n haveChangeOnElement = true;\n setTimeout(function () {\n haveChangeOnElement = false;\n if (widget) {\n var kNgModel = scope[widget.element.attr('k-ng-model')];\n if (kNgModel) {\n val = kNgModel;\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 ngModel.$render = viewRender;\n setTimeout(function () {\n if (ngModel.$render !== viewRender) {\n ngModel.$render = viewRender;\n ngModel.$render();\n }\n });\n if (isForm(element)) {\n element.on('change', function () {\n haveChangeOnElement = true;\n });\n }\n var onChange = function (pristine) {\n return function () {\n var formPristine;\n if (haveChangeOnElement) {\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 widget.first('change', onChange(false));\n widget.first('spin', onChange(false));\n if (!(kendo.ui.AutoComplete && widget instanceof kendo.ui.AutoComplete)) {\n widget.first('dataBound', onChange(true));\n }\n var currentVal = value();\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 ngModel.$setPristine();\n }\n function bindToKNgModel(widget, scope, kNgModel) {\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 var form = $(widget.element).parents('form');\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 var valueIsCollection = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect;\n var length = function (value) {\n return value && valueIsCollection ? value.length : 0;\n };\n var currentValueLength = length(getter(scope));\n widget.$angular_setLogicValue(getter(scope));\n var watchHandler = function (newValue, oldValue) {\n if (newValue === undefined) {\n newValue = null;\n }\n if (updating || newValue == oldValue && length(newValue) == currentValueLength) {\n return;\n }\n currentValueLength = length(newValue);\n widget.$angular_setLogicValue(newValue);\n };\n if (valueIsCollection) {\n scope.$watchCollection(kNgModel, watchHandler);\n } else {\n scope.$watch(kNgModel, watchHandler);\n }\n var changeHandler = function () {\n updating = true;\n if (ngForm && ngForm.$pristine) {\n ngForm.$setDirty();\n }\n digest(scope, function () {\n setter(scope, widget.$angular_getLogicValue());\n currentValueLength = length(getter(scope));\n });\n updating = false;\n };\n widget.first('change', changeHandler);\n widget.first('spin', changeHandler);\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 return deregister;\n }\n function propagateClassToWidgetWrapper(widget, element) {\n if (!(window.MutationObserver && widget.wrapper)) {\n return;\n }\n var prevClassList = [].slice.call($(element)[0].classList);\n var mo = new MutationObserver(function (changes) {\n suspend();\n if (!widget) {\n return;\n }\n changes.forEach(function (chg) {\n var w = $(widget.wrapper)[0];\n switch (chg.attributeName) {\n case 'class':\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) {\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) {\n widget.input[0].classList.remove(cls);\n }\n }\n });\n prevClassList = currClassList;\n break;\n case 'disabled':\n if (typeof widget.enable == 'function' && !widget.element.attr('readonly')) {\n widget.enable(!$(chg.target).attr('disabled'));\n }\n break;\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 resume();\n });\n function suspend() {\n mo.disconnect();\n }\n function resume() {\n mo.observe($(element)[0], { attributes: true });\n }\n resume();\n widget.first('destroy', suspend);\n }\n function setupRebind(widget, scope, element, originalElement, rebindAttr, destroyRegister, attrs) {\n var unregister = scope.$watch(rebindAttr, function (newValue, oldValue) {\n if (!widget._muteRebind && newValue !== oldValue) {\n unregister();\n if (attrs._cleanUp) {\n attrs._cleanUp();\n }\n var templateOptions = WIDGET_TEMPLATE_OPTIONS[widget.options.name];\n if (templateOptions) {\n templateOptions.forEach(function (name) {\n var templateContents = scope.$eval(attrs['k' + name]);\n if (templateContents) {\n originalElement.append($(templateContents).attr(kendo.toHyphens('k' + name), ''));\n }\n });\n }\n var _wrapper = $(widget.wrapper)[0];\n var _element = $(widget.element)[0];\n var isUpload = widget.options.name === 'Upload';\n if (isUpload) {\n element = $(_element);\n }\n var compile = element.injector().get('$compile');\n widget._destroy();\n if (destroyRegister) {\n destroyRegister();\n }\n widget = null;\n if (_element) {\n if (_wrapper) {\n _wrapper.parentNode.replaceChild(_element, _wrapper);\n }\n $(element).replaceWith(originalElement);\n }\n compile(originalElement)(scope);\n }\n }, true);\n digest(scope);\n }\n function bind(f, obj) {\n return function (a, b) {\n return f.call(obj, a, b);\n };\n }\n function setTemplate(key, value) {\n this[key] = kendo.stringify(value);\n }\n module.factory('directiveFactory', [\n '$compile',\n function (compile) {\n var kendoRenderedTimeout;\n var RENDERED = false;\n $defaultCompile = compile;\n var create = function (role, origAttr) {\n return {\n restrict: 'AC',\n require: [\n '?ngModel',\n '^?form'\n ],\n scope: false,\n controller: [\n '$scope',\n '$attrs',\n '$element',\n 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 var roleattr = role.replace(/([A-Z])/g, '-$1');\n $element.attr(roleattr, $element.attr('data-' + roleattr));\n $element[0].removeAttribute('data-' + roleattr);\n var widget = createWidget(scope, element, attrs, role, origAttr, controllers);\n if (!widget) {\n return;\n }\n if (kendoRenderedTimeout) {\n clearTimeout(kendoRenderedTimeout);\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 return { create: create };\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 PanelBar: 'ul',\n TreeView: 'ul',\n Menu: 'ul',\n ContextMenu: 'ul',\n ActionSheet: 'ul'\n };\n var SKIP_SHORTCUTS = [\n 'MobileView',\n 'MobileDrawer',\n 'MobileLayout',\n 'MobileSplitView',\n 'MobilePane',\n 'MobileModalView'\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 angular.forEach([\n 'MobileNavBar',\n 'MobileButton',\n 'MobileBackButton',\n 'MobileDetailButton',\n 'MobileTabStrip',\n 'MobileScrollView',\n 'MobileScroller'\n ], 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 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 var name = isMobile ? 'Mobile' : '';\n name += klass.fn.options.name;\n var className = name;\n var shortcut = 'kendo' + name.charAt(0) + name.substr(1).toLowerCase();\n name = 'kendo' + name;\n var dashed = name.replace(/([A-Z])/g, '-$1');\n if (SKIP_SHORTCUTS.indexOf(name.replace('kendo', '')) == -1) {\n var names = name === shortcut ? [name] : [\n name,\n shortcut\n ];\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 return '<' + tag + ' ' + dashed + (scopeField ? '=\"' + scopeField + '\"' : '') + '>' + element.html() + '</' + tag + '>';\n }\n };\n });\n });\n }\n if (MANUAL_DIRECTIVES.indexOf(name.replace('kendo', '')) > -1) {\n return;\n }\n make(name, name);\n if (shortcut != name) {\n make(shortcut, name);\n }\n }\n function kendoWidgetInstance(el) {\n el = $(el);\n return kendo.widgetInstance(el, kendo.ui) || kendo.widgetInstance(el, kendo.mobile.ui) || kendo.widgetInstance(el, kendo.dataviz.ui);\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 function destroyScope(scope, el) {\n scope.$destroy();\n if (el) {\n $(el).removeData('$scope').removeData('$$kendoScope').removeData('$isolateScope').removeData('$isolateScopeNoTemplate').removeClass('ng-scope');\n }\n }\n var pendingPatches = [];\n function defadvice(klass, methodName, func) {\n if ($.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([\n klass,\n methodName,\n func\n ]);\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 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 defadvice([\n 'ui.Widget',\n 'mobile.ui.Widget'\n ], 'angular', function (cmd, arg) {\n var self = this.self;\n if (cmd == 'init') {\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 var scope = self.$angular_scope;\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 case 'cleanup':\n angular.forEach(elements, function (el) {\n var itemScope = $(el).data('$$kendoScope');\n if (itemScope && itemScope !== scope && itemScope.$$kendoScope) {\n destroyScope(itemScope, el);\n }\n });\n break;\n case 'compile':\n var injector = self.element.injector();\n var compile = injector ? injector.get('$compile') : $defaultCompile;\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) {\n itemScope = $.extend(scope.$new(), vars);\n itemScope.$$kendoScope = true;\n } else {\n itemScope = scope;\n }\n }\n $(el).data('$$kendoScope', itemScope);\n compile(el)(itemScope);\n });\n digest(scope);\n break;\n }\n }\n });\n }\n });\n defadvice('ui.Widget', '$angular_getLogicValue', function () {\n return this.self.value();\n });\n defadvice('ui.Widget', '$angular_setLogicValue', function (val) {\n this.self.value(val);\n });\n defadvice('ui.Select', '$angular_getLogicValue', function () {\n var item = this.self.dataItem(), valueField = this.self.options.dataValueField;\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 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 if (val === undefined) {\n val = '';\n }\n if (valueField && !options.valuePrimitive && val) {\n text = val[options.dataTextField] || '';\n val = val[valueField || options.dataTextField];\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 defadvice('ui.MultiSelect', '$angular_getLogicValue', function () {\n var value = this.self.dataItems().slice(0);\n var valueField = this.self.options.dataValueField;\n if (valueField && this.self.options.valuePrimitive) {\n value = $.map(value, function (item) {\n return item[valueField];\n });\n }\n return value;\n });\n defadvice('ui.MultiSelect', '$angular_setLogicValue', function (val) {\n if (val == null) {\n val = [];\n }\n var self = this.self;\n var options = self.options;\n var valueField = options.dataValueField;\n var data = val;\n if (valueField && !options.valuePrimitive) {\n val = $.map(val, function (item) {\n return item[valueField];\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 defadvice('ui.AutoComplete', '$angular_getLogicValue', function () {\n var options = this.self.options;\n var values = this.self.value().split(options.separator);\n var valuePrimitive = options.valuePrimitive;\n var data = this.self.listView.selectedDataItems();\n var dataItems = [];\n for (var idx = 0, length = data.length; idx < length; idx++) {\n var item = data[idx];\n var dataValue = options.dataTextField ? item[options.dataTextField] : item;\n for (var j = 0; j < values.length; j++) {\n if (dataValue === values[j]) {\n if (valuePrimitive) {\n dataItems.push(dataValue);\n } else {\n dataItems.push(item.toJSON());\n }\n break;\n }\n }\n }\n return dataItems;\n });\n defadvice('ui.AutoComplete', '$angular_setLogicValue', function (value) {\n if (value == null) {\n value = [];\n }\n var self = this.self, dataTextField = self.options.dataTextField;\n if (dataTextField && !self.options.valuePrimitive) {\n if (value.length !== undefined) {\n value = $.map(value, function (item) {\n return item[dataTextField];\n });\n } else {\n value = value[dataTextField];\n }\n }\n self.value(value);\n });\n defadvice('ui.Widget', '$angular_init', function (element, options) {\n var self = this.self;\n if (options && !$.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 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 defadvice([\n 'ui.Grid',\n 'ui.ListView',\n 'ui.TreeView',\n 'ui.PanelBar'\n ], '$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 if (angular.isString(options.selectable)) {\n cell = options.selectable.indexOf('cell') !== -1;\n multiple = options.selectable.indexOf('multiple') !== -1;\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 if (!multiple) {\n locals.dataItem = locals.data = items[0];\n locals.angularDataItem = kendo.proxyModelSetters(locals.dataItem);\n locals.selected = elems[0];\n }\n digest(scope, function () {\n handler(scope, locals);\n });\n };\n });\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 || col.encoded)) {\n col.template = '<span ng-bind=\\'' + kendo.expr(col.field, 'dataItem') + '\\'>#: ' + kendo.expr(col.field, settings.paramName) + '#</span>';\n }\n });\n }\n });\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 defadvice('mobile.ui.ButtonGroup', '_select', function () {\n this.next();\n this.self.trigger('change');\n });\n }\n module.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 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 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 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 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 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 '<span data-' + kendo.ns + 'role=\\'view-title\\'>' + element.html() + '</span>';\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 '<div data-' + kendo.ns + 'role=\\'page\\'>' + element.html() + '</div>';\n }\n };\n });\n angular.forEach([\n 'align',\n 'icon',\n 'rel',\n 'transition',\n 'actionsheetContext'\n ], function (attr) {\n var kAttr = 'k' + attr.slice(0, 1).toUpperCase() + attr.slice(1);\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 var WIDGET_TEMPLATE_OPTIONS = {\n 'TreeMap': ['Template'],\n 'MobileListView': [\n 'HeaderTemplate',\n 'Template'\n ],\n 'MobileScrollView': [\n 'EmptyTemplate',\n 'Template'\n ],\n 'Grid': [\n 'AltRowTemplate',\n 'DetailTemplate',\n 'RowTemplate'\n ],\n 'ListView': [\n 'EditTemplate',\n 'Template',\n 'AltTemplate'\n ],\n 'Pager': [\n 'SelectTemplate',\n 'LinkTemplate'\n ],\n 'PivotGrid': [\n 'ColumnHeaderTemplate',\n 'DataCellTemplate',\n 'RowHeaderTemplate'\n ],\n 'Scheduler': [\n 'AllDayEventTemplate',\n 'DateHeaderTemplate',\n 'EventTemplate',\n 'MajorTimeHeaderTemplate',\n 'MinorTimeHeaderTemplate'\n ],\n 'PanelBar': ['Template'],\n 'TreeView': ['Template'],\n 'Validator': ['ErrorTemplate']\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 angular.forEach(templateDirectives, function (parents, directive) {\n var templateName = 'k' + directive;\n var attrName = kendo.toHyphens(templateName);\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 $element.removeAttr(attrName);\n var template = $element[0].outerHTML;\n return function (scope, element, attrs, controllers) {\n var controller;\n while (!controller && controllers.length) {\n controller = controllers.shift();\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 }(window.kendo.jQuery, window.angular));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.web', [\n 'kendo.core',\n 'kendo.router',\n 'kendo.view',\n 'kendo.fx',\n 'kendo.dom',\n 'kendo.data.odata',\n 'kendo.data.xml',\n 'kendo.data',\n 'kendo.ooxml',\n 'kendo.excel',\n 'kendo.data.signalr',\n 'kendo.binder',\n 'kendo.drawing',\n 'kendo.validator',\n 'kendo.userevents',\n 'kendo.draganddrop',\n 'kendo.mobile.scroller',\n 'kendo.groupable',\n 'kendo.reorderable',\n 'kendo.resizable',\n 'kendo.sortable',\n 'kendo.selectable',\n 'kendo.button',\n 'kendo.pager',\n 'kendo.popup',\n 'kendo.notification',\n 'kendo.tooltip',\n 'kendo.list',\n 'kendo.calendar',\n 'kendo.datepicker',\n 'kendo.autocomplete',\n 'kendo.dropdownlist',\n 'kendo.combobox',\n 'kendo.multiselect',\n 'kendo.colorpicker',\n 'kendo.columnmenu',\n 'kendo.columnsorter',\n 'kendo.grid',\n 'kendo.listview',\n 'kendo.filebrowser',\n 'kendo.imagebrowser',\n 'kendo.editor',\n 'kendo.numerictextbox',\n 'kendo.maskedtextbox',\n 'kendo.mediaplayer',\n 'kendo.menu',\n 'kendo.editable',\n 'kendo.pivot.fieldmenu',\n 'kendo.filtercell',\n 'kendo.panelbar',\n 'kendo.progressbar',\n 'kendo.responsivepanel',\n 'kendo.tabstrip',\n 'kendo.timepicker',\n 'kendo.toolbar',\n 'kendo.datetimepicker',\n 'kendo.treeview.draganddrop',\n 'kendo.treeview',\n 'kendo.slider',\n 'kendo.splitter',\n 'kendo.upload',\n 'kendo.dialog',\n 'kendo.window',\n 'kendo.virtuallist',\n 'kendo.scheduler.view',\n 'kendo.scheduler.dayview',\n 'kendo.scheduler.agendaview',\n 'kendo.scheduler.monthview',\n 'kendo.scheduler.recurrence',\n 'kendo.scheduler',\n 'kendo.gantt.list',\n 'kendo.gantt.timeline',\n 'kendo.gantt',\n 'kendo.treelist',\n 'kendo.pivotgrid',\n 'kendo.spreadsheet',\n 'kendo.pivot.configurator',\n 'kendo.angular'\n ], f);\n}(function () {\n 'bundle all';\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"],"sourceRoot":"/source/"}