{"version":3,"file":"kendo.menu.min.js","names":["factory","define","amd","$","undefined$1","kendo","window","ui","activeElement","_activeElement","touch","support","mobileOS","isArray","Array","HierarchicalDataSource","data","MOUSEDOWN","CLICK","extend","each","template","keys","Widget","excludedNodesRegExp","NS","OPEN","MENU","LINK","LINK_SELECTOR","ICON_SELECTOR","LAST","CLOSE","TIMER","FIRST","IMAGE","SELECT","ZINDEX","ACTIVATE","DEACTIVATE","POINTERDOWN","pointers","msPointers","allPointers","CHANGE","ERROR","TOUCHSTART","MOUSEENTER","MOUSELEAVE","MOUSEWHEEL","RESIZE","resize","POPUP_ID_ATTR","POPUP_OPENER_ATTR","DOCUMENT_ELEMENT","document","documentElement","KENDOPOPUP","HOVERSTATE","FOCUSEDSTATE","DISABLEDSTATE","menuSelector","groupSelector","animationContainerSelector","popupSelector","allItemsSelector","itemSelector","availableItemsSelector","exclusionSelector","scrollButtonSelector","touchPointerTypes","DATABOUND","ARIA_EXPANDED","ROLE","bindings","text","url","spriteCssClass","imageUrl","imageAttr","content","rendering","wrapperCssClass","group","item","result","index","enabled","firstLevel","length","cssClass","attr","hasOwnProperty","selected","itemCssAttributes","attributes","imageCssAttributes","imgAttributes","toJSON","contentCssAttributes","contentAttr","defaultClasses","textClass","arrowClass","horizontal","groupAttributes","expanded","groupCssClass","contains","parent","child","e","updateItemClasses","addClass","children","filter","removeClass","empty","append","prop","contents","this","nodeName","match","nodeType","trim","nodeValue","wrapAll","idx","elm","wrap","updateArrow","updateFirstLast","find","remove","arrowCssClass","isRtl","hasClass","getArrowCssClass","updateHasAriaPopup","parents","parentLi","eq","removeAttr","getParentLiItems","parentsUntil","storeItemSelectEventHandler","element","options","selectHandler","select","isFunction","getItemSelectEventHandler","setItemData","items","i","popupOpenerSelector","id","popupGroupSelector","selector","getChildPopups","currentPopup","overflowWrapper","childPopupOpener","opener","popupId","popup","push","popupParentItem","popupElement","itemPopup","parentsScroll","current","scrollDirection","scroll","parentNode","isNaN","isPointerTouch","originalEvent","pointerType","removeSpacesBetweenItems","ul","Menu","DataBoundWidget","init","that","fn","call","wrapper","_accessors","_templates","_dataSource","_updateClasses","_animations","nextItemZIndex","_tabindex","_initOverflow","_attachMenuEventsHandlers","openOnClick","clicked","_ariaId","format","notify","events","name","animation","open","duration","close","orientation","direction","closeOnClick","hoverDelay","scrollable","popupCollision","_initData","dataSource","angular","elements","view","_overflowWrapper","_checkActiveProxy","_checkActiveElement","bind","on","_focusHandler","_click","_preventClose","_mouseenter","_mouseleave","_mousedown","_toggleHover","_keydown","_focus","_removeHoverItem","_mouseleavePopup","_mouseenterPopup","_documentClickHandler","_documentClick","_detachMenuEventsHandlers","off","backwardBtn","forwardBtn","isHorizontal","_openedPopups","_scrollWrapper","templates","scrollButton","add","appendTo","_initScrolling","initialWidth","outerWidth","initialCssWidth","style","width","setTimeout","_setOverflowWrapperWidth","_toggleScrollButtons","_popupsWrapper","wrapperCssWidth","css","wrapperWidth","menuWidth","borders","offsetWidth","clientWidth","Math","min","_reinitOverflow","distance","_destroyOverflow","popupWrapper","popupParentLi","unwrap","scrollElement","isNumeric","mouseWheelDistance","backward","forward","backwardDouble","forwardDouble","scrolling","touchEvents","value","scrollValue","scrollLeft","scrollTop","finish","animate","mouseenterHandler","mousedownHandler","ev","test","type","isTouch","stop","currentTarget","trigger","stopPropagation","preventDefault","eventMap","down","ctrlKey","shiftKey","altKey","wheelDelta","delta","ceil","floor","detail","round","mousewheelDelta","abs","_closeChildPopups","n","parseFloat","isFinite","currentScroll","scrollSize","offset","toggle","setOptions","destroy","enable","_toggleDisabled","disable","attemptGetItem","candidate","referenceItem","inserted","_insert","_childPopupElement","insertBefore","before","insertAfter","after","groups","plain","isPlainObject","ObservableObject","groupData","renderGroup","ObservableArray","map","get","renderItem","charAt","parentItems","container","_openAfterLoad","dataItem","loaded","_loading","one","getByUid","ns","hasChildren","load","replace","visiblePopups","closePopup","closest","siblings","li","clearTimeout","overflowPopup","first","_getPopup","is","_triggerEvent","windowHeight","height","maxHeight","_outerHeight","getShadows","bottom","overflow","nextZindex","zIndex","root","parentHorizontal","directions","split","output","origin","position","reverse","join","parseDirection","effects","openEffects","getEffectDirection","kendoPopup","activate","deactivate","_closing","sender","removeData","opacity","collision","anchor","_popupOpen","hide","mouseAndTouchPresent","_configurePopupOverflow","_hovered","_initPopupScrolling","popupOpener","_wrapPopupElement","groupId","Date","getTime","autosize","display","skipMouseEvents","scrollHeight","offsetHeight","_initPopupScrollButtons","scrollButtons","timeout","p","isEmptyObject","_closeParentPopups","last","_keyTriggered","_setPopupHeight","isFixed","popups","_initialHeight","location","_location","popupOuterHeight","popupOffsetTop","max","top","bottomScrollbar","innerHeight","dontClearClose","_isRootItem","toString","_forceClose","toggleClass","target","eventTarget","isEnter","indexOf","_closurePrevented","hoverItem","_hoverItem","_findRootParent","hasFocus","oldHoverItem","_oldHoverItem","matchesSelector","end","_itemHasChildren","pointerTouch","isParentClosing","delegateTarget","rootMenuItems","subMenuItems","relatedTarget","_","sibling","$window","browser","msie","toElement","clientX","clientY","stopImmediatePropagation","_closePopups","rootPopup","groupParent","innerPopup","_innerPopup","openHandle","childGroup","childGroupVisible","shouldCloseTheRootItem","targetElement","toUpperCase","formNode","link","itemElement","href","targetHref","sampleHref","isLink","isLocalLink","isTargetLink","_lastClickedElement","handled","_triggerSelect","childPopupId","_parentsUntil","enterKey","click","context","getParents","elem","overflowMenuParents","itemSelectEventData","_getEventData","isSelectItemDefaultPrevented","isDefaultPrevented","isSelectDefaultPrevented","_defaultPrevented","active","_moveHover","belongsToVertical","key","keyCode","ESC","_itemBelongsToVertival","RIGHT","LEFT","DOWN","_itemDown","UP","_itemUp","HOME","END","_itemEsc","ENTER","SPACEBAR","_moveHoverToRoot","TAB","menuIsVertical","nextItem","_scrollToItem","_itemRight","parentItem","nextAll","prevAll","_itemLeft","itemPosition","scrollDir","getSize","_outerWidth","currentScrollOffset","itemSize","itemOffset","ulSize","scrollButtonSize","_unbindDataSource","fields","field","create","_bindDataSource","fetch","_refreshHandler","refresh","_errorHandler","_error","unbind","findByUid","uid","node","action","parentElement","itemsToUpdate","updateProxy","_updateItem","removeProxy","_removeItem","_appendItems","forEach","nextElement","next","textField","_fieldAccessor","fieldName","fieldBindings","count","x","expr","fieldAccessor","itemWrapper","arrow","sprite","menu","renderContent","dataContentField","subGroup","renderItems","html","len","ContextMenu","_marker","guid","substring","_popup","_wire","_initialWidth","showOn","alignToAnchor","copyAnchorStyles","_showProxy","userEvents","mousedown","_closeProxy","y","visible","kendoStop","left","_configurePopupScrolling","downEvent","_mousedownProxy","visibility","_setPopupWidth","windowWidth","popupOuterWidth","popupOffsetLeft","shadow","maxWidth","right","arguments","_closeTimeoutProxy","focus","_showHandler","event","pageX","pageY","_eventOrigin","_targetChild","_closeHandler","sameTarget","containment","normalClick","which","_preventProxy","UserEvents","allowSelection","F10","_triggerProxy","noop","plugin","jQuery"],"sources":["kendo.menu.js"],"mappings":"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","sourcesContent":["(function (factory) {\n typeof define === 'function' && define.amd ? define(['kendo.popup', 'kendo.data'], factory) :\n factory();\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\", \"data\", \"data.odata\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n ui = kendo.ui,\n activeElement = kendo._activeElement,\n touch = (kendo.support.touch && kendo.support.mobileOS),\n isArray = Array.isArray,\n HierarchicalDataSource = kendo.data.HierarchicalDataSource,\n MOUSEDOWN = \"mousedown\",\n CLICK = \"click\",\n DELAY = 30,\n SCROLLSPEED = 50,\n extend = $.extend,\n each = $.each,\n template = kendo.template,\n keys = kendo.keys,\n Widget = ui.Widget,\n excludedNodesRegExp = /^(ul|a|div)$/i,\n NS = \".kendoMenu\",\n IMG = \"img\",\n OPEN = \"open\",\n MENU = \"k-menu\",\n LINK = \"k-link k-menu-link\",\n LINK_SELECTOR = \".k-link\",\n ICON_SELECTOR = \".k-menu-expand-arrow-icon\",\n LAST = \"k-last\",\n CLOSE = \"close\",\n TIMER = \"timer\",\n FIRST = \"k-first\",\n IMAGE = \"k-image\",\n SELECT = \"select\",\n ZINDEX = \"zIndex\",\n ACTIVATE = \"activate\",\n DEACTIVATE = \"deactivate\",\n POINTERDOWN = \"touchstart\" + NS + \" MSPointerDown\" + NS + \" pointerdown\" + NS,\n pointers = kendo.support.pointers,\n msPointers = kendo.support.msPointers,\n allPointers = msPointers || pointers,\n CHANGE = \"change\",\n ERROR = \"error\",\n TOUCHSTART = kendo.support.touch ? \"touchstart\" : \"\",\n MOUSEENTER = pointers ? \"pointerover\" : (msPointers ? \"MSPointerOver\" : \"mouseenter\"),\n MOUSELEAVE = pointers ? \"pointerout\" : (msPointers ? \"MSPointerOut\" : \"mouseleave\"),\n MOUSEWHEEL = \"DOMMouseScroll\" + NS + \" mousewheel\" + NS,\n RESIZE = kendo.support.resize + NS,\n SCROLLWIDTH = \"scrollWidth\",\n SCROLLHEIGHT = \"scrollHeight\",\n OFFSETWIDTH = \"offsetWidth\",\n OFFSETHEIGHT = \"offsetHeight\",\n POPUP_ID_ATTR = \"group\",\n POPUP_OPENER_ATTR = \"groupparent\",\n DOCUMENT_ELEMENT = $(document.documentElement),\n KENDOPOPUP = \"kendoPopup\",\n HOVERSTATE = \"k-hover\",\n FOCUSEDSTATE = \"k-focus\",\n DISABLEDSTATE = \"k-disabled\",\n SELECTEDSTATE = \"k-selected\",\n menuSelector = \".k-menu\",\n groupSelector = \".k-menu-group\",\n animationContainerSelector = \".k-animation-container\",\n popupSelector = groupSelector + \",\" + animationContainerSelector,\n allItemsSelector = \":not(.k-list) > .k-item:not([role='treeitem'])\",\n disabledSelector = \".k-item.k-disabled\",\n itemSelector = \".k-item\",\n availableItemsSelector = \".k-item:not(.k-disabled)\",\n linkSelector = \".k-item:not(.k-disabled) > .k-link\",\n exclusionSelector = \":not(.k-item.k-separator)\",\n templateSelector = \"div:not(.k-animation-container,.k-list-container)\",\n scrollButtonSelector = \".k-menu-scroll-button\",\n touchPointerTypes = { \"2\": 1, \"touch\": 1 },\n STRING = \"string\",\n DATABOUND = \"dataBound\",\n ARIA_EXPANDED = \"aria-expanded\",\n ROLE = \"role\",\n\n bindings = {\n text: \"dataTextField\",\n url: \"dataUrlField\",\n spriteCssClass: \"dataSpriteCssClassField\",\n imageUrl: \"dataImageUrlField\",\n imageAttr: \"dataImageAttrField\",\n content: \"dataContentField\"\n },\n\n rendering = {\n wrapperCssClass: function(group, item) {\n var result = \"k-item k-menu-item\",\n index = item.index;\n\n if (item.enabled === false) {\n result += \" k-disabled\";\n }\n\n if (group.firstLevel && index === 0) {\n result += \" k-first\";\n }\n\n if (index == group.length - 1) {\n result += \" k-last\";\n }\n\n if (item.cssClass) {\n result += \" \" + item.cssClass;\n }\n\n if (item.attr && item.attr.hasOwnProperty(\"class\")) {\n result += \" \" + item.attr[\"class\"];\n }\n\n if (item.selected) {\n result += \" \" + SELECTEDSTATE;\n }\n\n return result;\n },\n\n itemCssAttributes: function(item) {\n var result = \"\";\n var attributes = item.attr || {};\n\n for (var attr in attributes) {\n if (attributes.hasOwnProperty(attr) && attr !== \"class\") {\n result += attr + \"=\\\"\" + attributes[attr] + \"\\\" \";\n }\n }\n\n return result;\n },\n\n imageCssAttributes: function(imgAttributes) {\n var result = \"\";\n var attributes = imgAttributes && imgAttributes.toJSON ? imgAttributes.toJSON() : {};\n\n if (!attributes['class']) {\n attributes['class'] = IMAGE;\n } else {\n attributes['class'] += \" \" + IMAGE;\n }\n\n for (var attr in attributes) {\n if (attributes.hasOwnProperty(attr)) {\n result += attr + \"=\\\"\" + attributes[attr] + \"\\\" \";\n }\n }\n\n return result;\n },\n\n contentCssAttributes: function(item) {\n var result = \"\";\n var attributes = item.contentAttr || {};\n var defaultClasses = \"k-content k-group k-menu-group k-menu-group-md\";\n\n if (!attributes['class']) {\n attributes['class'] = defaultClasses;\n } else {\n attributes['class'] += \" \" + defaultClasses;\n }\n\n for (var attr in attributes) {\n if (attributes.hasOwnProperty(attr)) {\n result += attr + \"=\\\"\" + attributes[attr] + \"\\\" \";\n }\n }\n\n return result;\n },\n\n textClass: function() {\n return LINK;\n },\n\n arrowClass: function(item, group) {\n var result = \"k-menu-expand-arrow-icon k-icon\";\n\n if (group.horizontal) {\n result += \" k-i-arrow-s\";\n } else {\n result += \" k-i-arrow-e\";\n }\n\n return result;\n },\n\n groupAttributes: function(group) {\n return group.expanded !== true ? \" style='display:none'\" : \"\";\n },\n\n groupCssClass: function() {\n return \"k-group k-menu-group k-menu-group-md\";\n },\n\n content: function(item) {\n return item.content ? item.content : \" \";\n }\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\n function parseDirection(direction, root, isRtl) {\n direction = direction.split(\" \")[!root + 0] || direction;\n var output = { origin: [\"bottom\", (isRtl ? \"right\" : \"left\")], position: [\"top\", (isRtl ? \"right\" : \"left\")] },\n horizontal = /left|right/.test(direction);\n\n if (horizontal) {\n output.origin = [ \"top\", direction ];\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\n output.origin = output.origin.join(\" \");\n output.position = output.position.join(\" \");\n\n return output;\n }\n\n function contains(parent, child) {\n try {\n return $.contains(parent, child);\n } catch (e) {\n return false;\n }\n }\n\n function updateItemClasses(item) {\n item = $(item);\n var omitWrap = item.attr(kendo.attr(\"omit-wrap\"));\n\n if (omitWrap) {\n return;\n }\n\n item.addClass(\"k-item k-menu-item\")\n .children(IMG)\n .addClass(IMAGE);\n\n item\n .children(\"a\")\n .addClass(LINK)\n .children(IMG)\n .addClass(IMAGE);\n\n item\n .filter(\":not([disabled])\");\n\n item\n .filter(\".k-separator\")\n .removeClass(\"k-menu-item\")\n .addClass(\"k-menu-separator\")\n .empty()\n .append(\" \");\n\n item\n .filter(\"li[disabled]\")\n .addClass(DISABLEDSTATE)\n .prop(\"disabled\", false)\n .attr(\"aria-disabled\", true);\n\n if (!item.filter(\"[role]\").length) {\n item.attr(ROLE, \"menuitem\");\n }\n\n if (!item.children(LINK_SELECTOR).length) {\n item.contents() // exclude groups, real links, templates and empty text nodes\n .filter(function() { return (!this.nodeName.match(excludedNodesRegExp) && !(this.nodeType === 3 && !kendo.trim(this.nodeValue))); })\n .wrapAll(\"\")\n .filter(function(idx, elm) { return elm.nodeType === 3; })\n .wrap(\"\");\n }\n\n updateArrow(item);\n updateFirstLast(item);\n }\n\n function updateArrow(item) {\n item = $(item);\n\n item.find(\"> .k-link > .k-menu-expand-arrow > [class*=k-i-arrow]:not(.k-sprite)\").parent().remove();\n\n item.filter(\":has(.k-menu-group)\")\n .children(\".k-link:not(:has([class*=k-i-arrow]:not(.k-sprite)))\")\n .each(function() {\n var item = $(this),\n arrowCssClass = getArrowCssClass(item);\n\n item.append(\"
\").parent();\n if (isHorizontal) {\n removeSpacesBetweenItems(that.element);\n }\n\n backwardBtn = $(that.templates.scrollButton({ direction: isHorizontal ? \"left\" : \"up\" }));\n forwardBtn = $(that.templates.scrollButton({ direction: isHorizontal ? \"right\" : \"down\" }));\n backwardBtn.add(forwardBtn).appendTo(that._scrollWrapper);\n\n that._initScrolling(that.element, backwardBtn, forwardBtn, isHorizontal);\n\n var initialWidth = that.element.outerWidth();\n var initialCssWidth = that.element[0].style.width;\n initialCssWidth = initialCssWidth === \"auto\" ? \"\" : initialCssWidth;\n\n if (isHorizontal) {\n $(window).on(RESIZE, function() {\n setTimeout(function() {\n that._setOverflowWrapperWidth(initialWidth, initialCssWidth);\n that._toggleScrollButtons(that.element, backwardBtn, forwardBtn, isHorizontal);\n }, 300);\n });\n }\n\n that._setOverflowWrapperWidth(initialWidth, initialCssWidth);\n that._toggleScrollButtons(that.element, backwardBtn, forwardBtn, isHorizontal);\n }\n },\n\n _overflowWrapper: function() {\n return this._scrollWrapper || this._popupsWrapper;\n },\n\n _setOverflowWrapperWidth: function(initialWidth, initialCssWidth) {\n var that = this;\n var wrapperCssWidth = that._scrollWrapper.css(\"width\");\n\n that._scrollWrapper.css({ width: \"\" });\n var wrapperWidth = that._scrollWrapper.outerWidth();\n that._scrollWrapper.css({ width: wrapperCssWidth });\n\n var menuWidth = that.element.outerWidth();\n var borders = that.element[0].offsetWidth - that.element[0].clientWidth;\n\n if (menuWidth != wrapperWidth && wrapperWidth > 0) {\n var width = initialCssWidth ? Math.min(initialWidth, wrapperWidth) : wrapperWidth;\n that.element.width(width - borders);\n that._scrollWrapper.width(width);\n }\n },\n\n _reinitOverflow: function(options) {\n var that = this;\n var overflowChanged = ((options.scrollable && !that.options.scrollable) || (!options.scrollable && that.options.scrollable)) ||\n (options.scrollable && that.options.scrollable && options.scrollable.distance != that.options.scrollable.distance) ||\n options.orientation != that.options.orientation;\n\n if (overflowChanged) {\n that._detachMenuEventsHandlers();\n that._destroyOverflow();\n that._initOverflow(options);\n that._attachMenuEventsHandlers();\n }\n },\n\n _destroyOverflow: function() {\n var that = this;\n var overflowWrapper = that._overflowWrapper();\n if (overflowWrapper) {\n overflowWrapper.off(NS);\n overflowWrapper.find(scrollButtonSelector).off(NS).remove();\n overflowWrapper.children(animationContainerSelector).each(function(i, popupWrapper) {\n var ul = $(popupWrapper).children(groupSelector);\n ul.off(MOUSEWHEEL);\n var popupParentLi = popupParentItem(ul, overflowWrapper);\n if (popupParentLi.length) {\n popupParentLi.append(popupWrapper);\n }\n });\n\n overflowWrapper.find(popupOpenerSelector()).removeAttr(\"data-groupparent\");\n overflowWrapper.find(popupGroupSelector()).removeAttr(\"data-group\");\n that.element.off(MOUSEWHEEL);\n $(window).off(RESIZE);\n overflowWrapper.contents().unwrap();\n\n that._scrollWrapper = that._popupsWrapper = that._openedPopups = undefined$1;\n }\n },\n\n _initScrolling: function(scrollElement, backwardBtn, forwardBtn, isHorizontal) {\n var that = this;\n var scrollable = that.options.scrollable;\n var distance = that.isNumeric(scrollable.distance) ? scrollable.distance : SCROLLSPEED;\n var mouseWheelDistance = distance / 2;\n var backward = \"-=\" + distance;\n var forward = \"+=\" + distance;\n var backwardDouble = \"-=\" + distance * 2;\n var forwardDouble = \"+=\" + distance * 2;\n var scrolling = false;\n var touchEvents = false;\n\n var scroll = function(value) {\n var scrollValue = isHorizontal ? { \"scrollLeft\": value } : { \"scrollTop\": value };\n scrollElement.finish().animate(scrollValue, \"fast\", \"linear\", function() {\n if (scrolling) {\n scroll(value);\n }\n });\n that._toggleScrollButtons(scrollElement, backwardBtn, forwardBtn, isHorizontal);\n };\n\n var mouseenterHandler = function(e) {\n if (!scrolling && !touchEvents) {\n scroll(e.data.direction);\n scrolling = true;\n }\n };\n\n var mousedownHandler = function(e) {\n var scrollValue = isHorizontal ? { \"scrollLeft\": e.data.direction } : { \"scrollTop\": e.data.direction };\n touchEvents = isTouch(e) || isPointerTouch(e);\n scrollElement.stop().animate(scrollValue, \"fast\", \"linear\", function() {\n if (!touchEvents) {\n $(e.currentTarget).trigger(MOUSEENTER);\n } else {\n that._toggleScrollButtons(scrollElement, backwardBtn, forwardBtn, isHorizontal);\n scrolling = true;\n }\n });\n scrolling = false;\n\n e.stopPropagation();\n e.preventDefault();\n };\n\n backwardBtn.on(MOUSEENTER + NS, { direction: backward }, mouseenterHandler)\n .on(kendo.eventMap.down + NS, { direction: backwardDouble }, mousedownHandler);\n\n forwardBtn.on(MOUSEENTER + NS, { direction: forward }, mouseenterHandler)\n .on(kendo.eventMap.down + NS, { direction: forwardDouble }, mousedownHandler);\n\n backwardBtn.add(forwardBtn)\n .on(MOUSELEAVE + NS, function() {\n scrollElement.stop();\n scrolling = false;\n that._toggleScrollButtons(scrollElement, backwardBtn, forwardBtn, isHorizontal);\n });\n\n scrollElement.on(MOUSEWHEEL, function(e) {\n if (!e.ctrlKey && !e.shiftKey && !e.altKey) {\n var wheelDelta = mousewheelDelta(e.originalEvent);\n var scrollSpeed = Math.abs(wheelDelta) * mouseWheelDistance;\n var value = (wheelDelta > 0 ? \"+=\" : \"-=\") + scrollSpeed;\n var scrollValue = isHorizontal ? { \"scrollLeft\": value } : { \"scrollTop\": value };\n\n that._closeChildPopups(scrollElement);\n\n scrollElement.finish().animate(scrollValue, \"fast\", \"linear\", function() {\n that._toggleScrollButtons(scrollElement, backwardBtn, forwardBtn, isHorizontal);\n });\n e.preventDefault();\n }\n });\n },\n\n isNumeric: function(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n },\n\n _toggleScrollButtons: function(scrollElement, backwardBtn, forwardBtn, horizontal) {\n var currentScroll = horizontal ? kendo.scrollLeft(scrollElement) : scrollElement.scrollTop();\n var scrollSize = horizontal ? SCROLLWIDTH : SCROLLHEIGHT;\n var offset = horizontal ? OFFSETWIDTH : OFFSETHEIGHT;\n\n backwardBtn.toggle(currentScroll !== 0);\n forwardBtn.toggle(currentScroll < scrollElement[0][scrollSize] - scrollElement[0][offset] - 1);\n },\n\n setOptions: function(options) {\n var animation = this.options.animation;\n\n this._animations(options);\n\n options.animation = extend(true, animation, options.animation);\n\n if (\"dataSource\" in options) {\n this._dataSource(options);\n }\n\n this._updateClasses();\n this._reinitOverflow(options);\n\n Widget.fn.setOptions.call(this, options);\n },\n\n destroy: function() {\n var that = this;\n\n Widget.fn.destroy.call(that);\n\n that._detachMenuEventsHandlers();\n\n that._destroyOverflow();\n\n kendo.destroy(that.element);\n },\n\n enable: function(element, enable) {\n this._toggleDisabled(element, enable !== false);\n\n return this;\n },\n\n disable: function(element) {\n this._toggleDisabled(element, false);\n\n return this;\n },\n\n attemptGetItem: function(candidate) {\n candidate = candidate || this.element;\n var item = this.element.find(candidate);\n var overflowWrapper = this._overflowWrapper();\n\n if (item.length || candidate === this.element) {\n return item;\n } else if (overflowWrapper) {\n return overflowWrapper.find(candidate);\n } else {\n return $();\n }\n },\n\n append: function(item, referenceItem) {\n referenceItem = this.attemptGetItem(referenceItem);\n\n var inserted = this._insert(item, referenceItem, referenceItem.length ? this._childPopupElement(referenceItem) : null);\n\n each(inserted.items, function(i) {\n inserted.group.append(this);\n updateArrow(this);\n storeItemSelectEventHandler(this, item[i] || item);\n });\n\n updateArrow(referenceItem);\n updateFirstLast(inserted.group.find(\".k-first, .k-last\").add(inserted.items));\n updateHasAriaPopup(getParentLiItems(inserted.group));\n\n return this;\n },\n\n insertBefore: function(item, referenceItem) {\n referenceItem = this.attemptGetItem(referenceItem);\n\n var inserted = this._insert(item, referenceItem, referenceItem.parent());\n\n each(inserted.items, function(i) {\n referenceItem.before(this);\n updateArrow(this);\n updateFirstLast(this);\n storeItemSelectEventHandler(this, item[i] || item);\n });\n\n updateFirstLast(referenceItem);\n\n return this;\n },\n\n insertAfter: function(item, referenceItem) {\n referenceItem = this.attemptGetItem(referenceItem);\n\n var inserted = this._insert(item, referenceItem, referenceItem.parent());\n\n each(inserted.items, function(i) {\n referenceItem.after(this);\n updateArrow(this);\n updateFirstLast(this);\n storeItemSelectEventHandler(this, item[i] || item);\n });\n\n updateFirstLast(referenceItem);\n\n return this;\n },\n\n _insert: function(item, referenceItem, parent) {\n var that = this,\n items, groups;\n\n if (!referenceItem || !referenceItem.length) {\n parent = that.element;\n }\n\n var plain = $.isPlainObject(item) || item instanceof kendo.data.ObservableObject,\n groupData = {\n firstLevel: parent.hasClass(MENU),\n horizontal: parent.hasClass(MENU + \"-horizontal\"),\n expanded: true,\n length: parent.children().length\n };\n\n if (referenceItem && !parent.length) {\n parent = $(that.renderGroup({ group: groupData, options: that.options })).css(\"display\", \"none\").appendTo(referenceItem);\n }\n\n if (plain || isArray(item) || item instanceof kendo.data.ObservableArray) { // is JSON\n items = $($.map(plain ? [ item ] : item, function(value, idx) {\n if (typeof value === \"string\") {\n return $(value).get();\n } else {\n return $(that.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\n groups = items.find(\"> ul\")\n .addClass(\"k-menu-group k-menu-group-md\")\n .attr(ROLE, \"menu\");\n\n items = items.filter(\"li\");\n\n items.add(groups.find(\"> li\")).each(function() {\n updateItemClasses(this);\n });\n }\n\n return { items: items, group: parent };\n },\n\n remove: function(element) {\n element = this.attemptGetItem(element);\n\n var that = this,\n parent = element.parentsUntil(that.element, allItemsSelector),\n group = element.parent(\"ul:not(.k-menu)\");\n\n element.remove();\n\n if (group && !group.children(allItemsSelector).length) {\n var parentItems = getParentLiItems(group);\n\n var container = group.parent(animationContainerSelector);\n\n if (container.length) {\n container.remove();\n } else {\n group.remove();\n }\n\n updateHasAriaPopup(parentItems);\n }\n\n if (parent.length) {\n parent = parent.eq(0);\n\n updateArrow(parent);\n updateFirstLast(parent);\n }\n\n return that;\n },\n\n _openAfterLoad: function(element, dataItem) {\n var that = this;\n if (dataItem.loaded()) {\n that.open(element);\n that._loading = false;\n } else {\n dataItem.one(CHANGE, function() {\n element.find(ICON_SELECTOR).removeClass(\"k-i-loading\");\n if (that._loading) {\n that.open(element);\n that._loading = false;\n }\n });\n }\n },\n\n open: function(element) {\n var that = this;\n var options = that.options;\n var horizontal = options.orientation == \"horizontal\";\n var direction = options.direction;\n var isRtl = kendo.support.isRtl(that.wrapper);\n var overflowWrapper = that._overflowWrapper();\n element = (overflowWrapper || that.element).find(element);\n\n var dataItem = that.dataSource && that.dataSource.getByUid(element.data(kendo.ns + \"uid\"));\n\n if (dataItem && dataItem.hasChildren && !dataItem.loaded() && !that._loading) {\n that._loading = true;\n element.find(ICON_SELECTOR).addClass(\"k-i-loading\");\n dataItem.load();\n that._openAfterLoad(element, dataItem);\n return;\n }\n\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\n var visiblePopups = \">.k-popup:visible,>.k-animation-container>.k-popup:visible\";\n var closePopup = function() {\n var popup = $(this).data(KENDOPOPUP);\n if (popup) {\n // Use the built-in close method to play the hoverDelay from the options\n that.close($(this).closest(\"li.k-item\"), true);\n }\n };\n\n element.siblings()\n .find(visiblePopups)\n .each(closePopup);\n\n if (overflowWrapper) {\n element.find(visiblePopups).each(closePopup);\n }\n\n if (that.options.openOnClick) {\n that.clicked = true;\n }\n\n element.each(function() {\n var li = $(this);\n\n clearTimeout(li.data(TIMER));\n\n li.data(TIMER, setTimeout(function() {\n var ul = li.find(\"> .k-menu-group, > .k-animation-container > .k-menu-group\").filter(\":hidden\").first();\n var popup;\n var overflowPopup;\n\n if (!ul[0] && overflowWrapper) {\n overflowPopup = that._getPopup(li);\n ul = overflowPopup && overflowPopup.element;\n }\n if (ul.is(\":visible\")) {\n return;\n }\n\n if (ul[0] && that._triggerEvent({ item: li[0], type: OPEN }) === false) {\n\n if (!ul.find(\".k-menu-group\")[0] && ul.children(\".k-item\").length > 1) {\n var windowHeight = $(window).height(),\n setScrolling = function() {\n ul.css({ maxHeight: windowHeight - (kendo._outerHeight(ul) - ul.height()) - kendo.getShadows(ul).bottom, overflow: \"auto\" });\n };\n\n setScrolling();\n } else {\n ul.css({ maxHeight: \"\", overflow: \"\" });\n }\n\n li.data(ZINDEX, li.css(ZINDEX));\n var nextZindex = that.nextItemZIndex++;\n li.css(ZINDEX, nextZindex);\n\n if (that.options.scrollable) {\n li.parent().siblings(scrollButtonSelector).css({ zIndex: ++nextZindex });\n }\n\n popup = ul.data(KENDOPOPUP);\n var root = li.parent().hasClass(MENU),\n parentHorizontal = root && horizontal,\n directions = parseDirection(direction, root, isRtl),\n effects = options.animation.open.effects,\n openEffects = effects !== undefined$1 ? effects : \"slideIn:\" + getEffectDirection(direction, root);\n\n if (!popup) {\n popup = ul.kendoPopup({\n activate: function() { that._triggerEvent({ item: this.wrapper.parent(), type: ACTIVATE }); },\n deactivate: function(e) {\n that._closing = false;\n e.sender.element // Restore opacity after fade.\n .removeData(\"targetTransform\")\n .css({ opacity: \"\" });\n that._triggerEvent({ item: this.wrapper.parent(), type: DEACTIVATE });\n },\n origin: directions.origin,\n position: directions.position,\n collision: options.popupCollision !== undefined$1 ? options.popupCollision : (parentHorizontal ? \"fit\" : \"fit flip\"),\n anchor: li,\n appendTo: overflowWrapper || li,\n animation: {\n open: extend(true, { effects: openEffects }, options.animation.open),\n close: options.animation.close\n },\n open: that._popupOpen.bind(that),\n close: function(e) {\n that._closing = e.sender.element;\n var li = e.sender.wrapper.parent();\n\n if (overflowWrapper) {\n var popupId = e.sender.element.data(POPUP_ID_ATTR);\n if (popupId) {\n li = (overflowWrapper || that.element).find(popupOpenerSelector(popupId));\n }\n e.sender.wrapper.children(scrollButtonSelector).hide();\n }\n\n if (!that._triggerEvent({ item: li[0], type: CLOSE })) {\n li.css(ZINDEX, li.data(ZINDEX));\n li.removeData(ZINDEX);\n\n if (that.options.scrollable) {\n li.parent().siblings(scrollButtonSelector).css({ zIndex: \"\" });\n }\n\n if (touch || allPointers || kendo.support.mouseAndTouchPresent) {\n li.removeClass(HOVERSTATE);\n that._removeHoverItem();\n }\n } else {\n e.preventDefault();\n }\n }\n }).data(KENDOPOPUP);\n\n ul.closest(animationContainerSelector).removeAttr(ROLE);\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 li.attr(ARIA_EXPANDED, true);\n\n that._configurePopupOverflow(popup, li);\n\n popup._hovered = true;\n popup.open();\n\n that._initPopupScrolling(popup);\n }\n\n }, that.options.hoverDelay));\n });\n\n return that;\n },\n\n _configurePopupOverflow: function(popup, popupOpener) {\n var that = this;\n if (that.options.scrollable) {\n that._wrapPopupElement(popup);\n if (!popupOpener.attr(\"data-groupparent\")) {\n var groupId = new Date().getTime();\n popupOpener.attr(\"data-groupparent\", groupId);\n popup.element.attr(\"data-group\", groupId);\n }\n }\n },\n\n _wrapPopupElement: function(popup) {\n if (!popup.element.parent().is(animationContainerSelector)) {\n popup.wrapper = kendo.wrap(popup.element, popup.options.autosize)\n .css({\n overflow: \"hidden\",\n display: \"block\",\n position: \"absolute\"\n });\n }\n },\n\n _initPopupScrolling: function(popup, isHorizontal, skipMouseEvents) {\n var that = this;\n\n if (that.options.scrollable && popup.element[0].scrollHeight > popup.element[0].offsetHeight) {\n that._initPopupScrollButtons(popup, isHorizontal, skipMouseEvents);\n }\n },\n\n _initPopupScrollButtons: function(popup, isHorizontal, skipMouseEvents) {\n var that = this;\n var scrollButtons = popup.wrapper.children(scrollButtonSelector);\n var animation = that.options.animation;\n var timeout = ((animation && animation.open && animation.open.duration) || 0) + DELAY;\n setTimeout(function() {\n if (!scrollButtons.length) {\n var backwardBtn = $(that.templates.scrollButton({ direction: isHorizontal ? \"left\" : \"up\" }));\n var forwardBtn = $(that.templates.scrollButton({ direction: isHorizontal ? \"right\" : \"down\" }));\n\n scrollButtons = backwardBtn.add(forwardBtn).appendTo(popup.wrapper);\n\n that._initScrolling(popup.element, backwardBtn, forwardBtn, isHorizontal);\n if (!skipMouseEvents) {\n scrollButtons.on(MOUSEENTER + NS, function() {\n var overflowWrapper = that._overflowWrapper();\n $(getChildPopups(popup.element, overflowWrapper)).each(function(i, p) {\n var popupOpener = overflowWrapper.find(popupOpenerSelector(p.data(POPUP_ID_ATTR)));\n that.close(popupOpener);\n });\n })\n .on(MOUSELEAVE + NS, function() {\n setTimeout(function() {\n if ($.isEmptyObject(that._openedPopups)) {\n that._closeParentPopups(popup.element);\n }\n }, DELAY);\n });\n }\n }\n that._toggleScrollButtons(popup.element, scrollButtons.first(), scrollButtons.last(), isHorizontal);\n }, timeout);\n },\n\n _popupOpen: function(e) {\n if (!this._keyTriggered) {\n e.sender.element.children(\".\" + FOCUSEDSTATE).removeClass(FOCUSEDSTATE);\n }\n if (this.options.scrollable) {\n this._setPopupHeight(e.sender);\n }\n },\n\n _setPopupHeight: function(popup, isFixed) {\n var popupElement = popup.element;\n var popups = popupElement.add(popupElement.parent(animationContainerSelector));\n\n popups.height((popupElement.hasClass(MENU) && this._initialHeight) || \"\");\n\n var location = popup._location(isFixed);\n var windowHeight = $(window).height();\n var popupOuterHeight = location.height;\n var popupOffsetTop = isFixed ? 0 : Math.max(location.top, 0);\n var scrollTop = isFixed ? 0 : parentsScroll(this._overflowWrapper()[0], \"scrollTop\");\n var bottomScrollbar = window.innerHeight - windowHeight;\n var maxHeight = windowHeight - kendo.getShadows(popupElement).bottom + bottomScrollbar;\n var canFit = maxHeight + scrollTop > popupOuterHeight + popupOffsetTop;\n\n if (!canFit) {\n var height = Math.min(maxHeight, maxHeight - popupOffsetTop + scrollTop);\n popups.css({ overflow: \"hidden\", height: height + \"px\" });\n }\n },\n\n close: function(items, dontClearClose) {\n var that = this;\n var overflowWrapper = that._overflowWrapper();\n var element = (overflowWrapper || that.element);\n\n items = element.find(items);\n\n if (!items.length) {\n items = element.find(\">.k-item\");\n }\n\n var hasChildPopupsHovered = function(currentPopup) {\n var result = false;\n if ($.isEmptyObject(that._openedPopups)) {\n return result;\n }\n $(getChildPopups(currentPopup, overflowWrapper)).each(function(i, popup) {\n result = !!that._openedPopups[popup.data(POPUP_ID_ATTR).toString()];\n return !result;\n });\n return result;\n };\n\n var isPopupMouseLeaved = function(opener) {\n var groupId = opener.data(POPUP_OPENER_ATTR);\n return (!overflowWrapper || !groupId || !that._openedPopups[groupId.toString()]);\n };\n\n items.each(function() {\n var li = $(this);\n\n li.attr(ARIA_EXPANDED, false);\n\n if (!dontClearClose && that._isRootItem(li)) {\n that.clicked = false;\n }\n\n clearTimeout(li.data(TIMER));\n\n li.data(TIMER, setTimeout(function() {\n var popup = that._getPopup(li);\n if (popup && (isPopupMouseLeaved(li) || that._forceClose)) {\n if (!that._forceClose && hasChildPopupsHovered(popup.element)) {\n return;\n }\n\n popup.close();\n popup.element.attr(\"aria-hidden\", true);\n\n if (overflowWrapper) {\n if (that._forceClose && items.last().is(li[0])) {\n delete that._forceClose;\n }\n }\n }\n }, that.options.hoverDelay));\n });\n\n return that;\n },\n\n _getPopup: function(li) {\n var that = this;\n var popup = li.find(\".k-menu-group:not(.k-list-container):not(.k-calendar-container):visible\").first().data(KENDOPOPUP);\n var overflowWrapper = that._overflowWrapper();\n\n if (!popup && overflowWrapper) {\n var groupId = li.data(POPUP_OPENER_ATTR);\n if (groupId) {\n var popupElement = overflowWrapper.find(popupGroupSelector(groupId));\n popup = popupElement.data(KENDOPOPUP);\n }\n }\n return popup;\n },\n\n _toggleDisabled: function(items, enable) {\n this.element.find(items).each(function() {\n $(this)\n .toggleClass(DISABLEDSTATE, !enable)\n .attr(\"aria-disabled\", !enable);\n });\n },\n\n _toggleHover: function(e) {\n var target = $(kendo.eventTarget(e) || e.target).closest(allItemsSelector),\n isEnter = e.type == MOUSEENTER || MOUSEDOWN.indexOf(e.type) !== -1;\n\n target.siblings().removeClass(HOVERSTATE);\n\n if (!target.parents(\"li.\" + DISABLEDSTATE).length) {\n target.toggleClass(HOVERSTATE, isEnter || e.type == \"mousedown\" || e.type == \"pointerover\" || e.type == TOUCHSTART);\n }\n\n this._removeHoverItem();\n },\n\n _preventClose: function() {\n if (!this.options.closeOnClick) {\n this._closurePrevented = true;\n }\n },\n\n _checkActiveElement: function(e) {\n var that = this,\n hoverItem = $(e ? e.currentTarget : this._hoverItem()),\n target = that._findRootParent(hoverItem)[0];\n\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\n this._closurePrevented = false;\n },\n\n _removeHoverItem: function() {\n var oldHoverItem = this._hoverItem();\n\n if (oldHoverItem && oldHoverItem.hasClass(FOCUSEDSTATE)) {\n oldHoverItem.removeClass(FOCUSEDSTATE);\n this._oldHoverItem = null;\n }\n },\n\n _updateClasses: function() {\n var element = this.element,\n nonContentGroupsSelector = \".k-menu-init div ul\",\n items;\n\n element.removeClass(\"k-menu-horizontal k-menu-vertical\");\n element.addClass(\"k-widget k-reset k-menu-init \" + MENU).addClass(MENU + \"-\" + this.options.orientation);\n\n if (this.options.orientation === \"vertical\") {\n element.attr(\"aria-orientation\", \"vertical\");\n } else {\n element.attr(\"aria-orientation\", \"horizontal\");\n }\n\n element.find(\"li > ul\")\n .filter(function() {\n return !kendo.support.matchesSelector.call(this, nonContentGroupsSelector);\n })\n .addClass(\"k-group k-menu-group k-menu-group-md\")\n .attr(ROLE, \"menu\")\n .hide()\n .attr(\"aria-hidden\", element.is(\":visible\"))\n .parent(\"li\")\n .attr(\"aria-haspopup\", \"true\")\n .end()\n .find(\"li > div\")\n .addClass(\"k-content\")\n .attr(\"tabindex\", \"-1\"); // Capture the focus before the Menu\n\n element.find(\"li[aria-haspopup]\").attr(ARIA_EXPANDED, false);\n\n items = element.find(\"> li,.k-menu-group > li\");\n\n element.removeClass(\"k-menu-init\");\n\n items.each(function() {\n updateItemClasses(this);\n });\n },\n\n _mouseenter: function(e) {\n var that = this;\n var element = $(e.currentTarget);\n var hasChildren = that._itemHasChildren(element);\n var popupId = element.data(POPUP_OPENER_ATTR) || element.parent().data(POPUP_ID_ATTR);\n var pointerTouch = isPointerTouch(e);\n var isParentClosing = false;\n\n if (popupId) {\n that._openedPopups[popupId.toString()] = true;\n }\n\n if (that._closing) {\n isParentClosing = !!that._closing.find(element).length;\n }\n\n if (isParentClosing || (e.delegateTarget != element.parents(menuSelector)[0] && e.delegateTarget != element.parents(\".k-menu-scroll-wrapper,.k-popups-wrapper\")[0])) {\n return;\n }\n\n that._keyTriggered = false;\n\n if ((that.options.openOnClick.rootMenuItems && that._isRootItem(element.closest(allItemsSelector))) ||\n (that.options.openOnClick.subMenuItems && !that._isRootItem(element.closest(allItemsSelector)))) {\n return;\n }\n\n if ((that.options.openOnClick === false ||\n (that.options.openOnClick.rootMenuItems === false && that._isRootItem(element.closest(allItemsSelector))) ||\n (that.options.openOnClick.subMenuItems === false && !that._isRootItem(element.closest(allItemsSelector))) || that.clicked) && !touch &&\n !(pointerTouch && that._isRootItem(element.closest(allItemsSelector)))) {\n\n if (!contains(e.currentTarget, e.relatedTarget) && hasChildren) {\n that.open(element);\n }\n }\n\n if (that.options.openOnClick === true && that.clicked || touch) {\n element.siblings().each(function(_, sibling) {\n that.close(sibling, true);\n });\n }\n },\n\n _mousedown: function(e) {\n var that = this;\n var element = $(e.currentTarget);\n // needs to close subMenuItems\n if (that.options.openOnClick.subMenuItems && !that._isRootItem(element) || touch) {\n element.siblings().each(function(_, sibling) {\n that.close(sibling, true);\n });\n }\n },\n\n _mouseleave: function(e) {\n var that = this;\n var element = $(e.currentTarget);\n var popupOpener = element.data(POPUP_OPENER_ATTR);\n var hasChildren = (element.children(animationContainerSelector).length || element.children(groupSelector).length) || popupOpener;\n var $window = $(window);\n\n if (popupOpener) {\n delete that._openedPopups[popupOpener.toString()];\n }\n\n if (element.parentsUntil(animationContainerSelector, \".k-list-container,.k-calendar-container\")[0]) {\n e.stopImmediatePropagation();\n return;\n }\n\n if ((that.options.openOnClick === false || (!that.options.openOnClick.rootMenuItems && that._isRootItem(element)) ||\n (!that.options.openOnClick.subMenuItems && !that._isRootItem(element))) && !touch && !isPointerTouch(e) &&\n !contains(e.currentTarget, e.relatedTarget || e.target) && hasChildren &&\n !contains(e.currentTarget, kendo._activeElement())) {\n that.close(element, true);\n that._loading = false;\n return;\n }\n\n // Detect if cursor goes outside the viewport of the browser\n if ( (kendo.support.browser.msie && !e.toElement && !e.relatedTarget && !isPointerTouch(e)) ||\n e.clientX < 0 || e.clientY < 0 ||\n e.clientY > $window.height() ||\n e.clientX > $window.width()) {\n that.close(element);\n }\n },\n\n _mouseenterPopup: function(e) {\n var that = this;\n var popupElement = $(e.currentTarget);\n\n if (popupElement.parent().is(animationContainerSelector)) {\n return;\n }\n\n popupElement = popupElement.children(\"ul\");\n var popupId = popupElement.data(POPUP_ID_ATTR);\n\n if (popupId) {\n that._openedPopups[popupId.toString()] = true;\n }\n },\n\n _mouseleavePopup: function(e) {\n var that = this;\n var popupElement = $(e.currentTarget);\n\n if (!isPointerTouch(e) && popupElement.is(animationContainerSelector)) {\n that._closePopups(popupElement.children(\"ul\"));\n }\n },\n\n _closePopups: function(rootPopup) {\n var that = this;\n var overflowWrapper = that._overflowWrapper();\n var popupId = rootPopup.data(POPUP_ID_ATTR);\n\n if (popupId) {\n delete that._openedPopups[popupId.toString()];\n var groupParent = overflowWrapper.find(popupOpenerSelector(popupId));\n\n setTimeout(function() {\n if (that.options.openOnClick) {\n that._closeChildPopups(rootPopup);\n } else {\n if ($.isEmptyObject(that._openedPopups)) {\n var innerPopup = that._innerPopup(rootPopup);\n that._closeParentPopups(innerPopup);\n } else {\n that.close(groupParent, true);\n }\n }\n }, 0);\n }\n },\n\n _closeChildPopups: function(current) {\n var that = this;\n var overflowWrapper = that._overflowWrapper();\n $(getChildPopups(current, overflowWrapper)).each(function() {\n var popupOpener = overflowWrapper.find(popupOpenerSelector(this.data(POPUP_ID_ATTR)));\n that.close(popupOpener, true);\n });\n },\n\n _innerPopup: function(current) {\n var overflowWrapper = this._overflowWrapper();\n var popups = getChildPopups(current, overflowWrapper);\n return popups[popups.length - 1] || current;\n },\n\n _closeParentPopups: function(current) {\n var that = this;\n var overflowWrapper = that._overflowWrapper();\n var popupId = current.data(POPUP_ID_ATTR);\n var popupOpener = overflowWrapper.find(popupOpenerSelector(popupId));\n popupId = popupOpener.parent().data(POPUP_ID_ATTR);\n that.close(popupOpener, true);\n while (popupId && !that._openedPopups[popupId]) {\n if (popupOpener.parent().is(menuSelector)) {\n break;\n }\n popupOpener = overflowWrapper.find(popupOpenerSelector(popupId));\n that.close(popupOpener, true);\n popupId = popupOpener.parent().data(POPUP_ID_ATTR);\n }\n },\n\n _click: function(e) {\n var that = this, openHandle,\n options = that.options,\n target = $(kendo.eventTarget(e)),\n targetElement = target[0],\n nodeName = target[0] ? target[0].nodeName.toUpperCase() : \"\",\n formNode = (nodeName == \"INPUT\" || nodeName == \"SELECT\" || nodeName == \"BUTTON\" || nodeName == \"LABEL\"),\n link = target.closest(LINK_SELECTOR),\n element = target.closest(allItemsSelector),\n itemElement = element[0],\n href = link.attr(\"href\"), childGroup, childGroupVisible,\n targetHref = target.attr(\"href\"),\n sampleHref = $(\"\").attr(\"href\"),\n isLink = (!!href && href !== sampleHref),\n isLocalLink = isLink && !!href.match(/^#/),\n isTargetLink = (!!targetHref && targetHref !== sampleHref),\n overflowWrapper = that._overflowWrapper(),\n shouldCloseTheRootItem;\n\n if (targetElement && (!targetElement.parentNode || !itemElement)) {\n return;\n }\n\n if ($(target).hasClass('k-menu-expand-arrow-icon')) {\n this._lastClickedElement = itemElement;\n }\n\n while (targetElement && targetElement.parentNode != itemElement) {\n targetElement = targetElement.parentNode;\n }\n\n if ($(targetElement).is(templateSelector)) {\n return;\n }\n\n if (element.hasClass(DISABLEDSTATE)) {\n e.preventDefault();\n return;\n }\n\n if (!e.handled && that._triggerSelect(target, itemElement) && !formNode) { // We shouldn't stop propagation and shoudn't prevent form elements.\n e.preventDefault();\n }\n\n e.handled = true;\n\n childGroup = element.children(popupSelector);\n if (overflowWrapper) {\n var childPopupId = element.data(POPUP_OPENER_ATTR);\n if (childPopupId) {\n childGroup = overflowWrapper.find(popupGroupSelector(childPopupId));\n }\n }\n childGroupVisible = childGroup.is(\":visible\");\n shouldCloseTheRootItem = options.openOnClick && childGroupVisible && that._isRootItem(element);\n\n if (options.closeOnClick && (!isLink || isLocalLink) && (!childGroup.length || shouldCloseTheRootItem)) {\n element.removeClass(HOVERSTATE).css(\"height\"); // Force refresh for Chrome\n that._oldHoverItem = that._findRootParent(element);\n var item = that._parentsUntil(link, that.element, allItemsSelector);\n that._forceClose = !!overflowWrapper;\n that.close(item);\n that.clicked = false;\n if (\"MSPointerUp\".indexOf(e.type) != -1) {\n e.preventDefault();\n }\n return;\n }\n\n if (isLink && e.enterKey) {\n link[0].click();\n }\n\n if (((!that._isRootItem(element) || options.openOnClick === false) && !options.openOnClick.subMenuItems) && !kendo.support.touch && !(isPointerTouch(e) && that._isRootItem(element.closest(allItemsSelector)))) {\n return;\n }\n\n if (!isLink && !formNode && !isTargetLink) {\n e.preventDefault();\n }\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\n _parentsUntil: function(context, top, selector) {\n var overflowWrapper = this._overflowWrapper();\n if (!overflowWrapper) {\n return context.parentsUntil(top, selector);\n } else {\n var parents = overflowMenuParents(context, overflowWrapper);\n var result = [];\n $(parents).each(function() {\n var parent = $(this);\n if (parent.is(top)) {\n return false;\n }\n if (parent.is(selector)) {\n result.push(this);\n }\n });\n return $(result);\n }\n },\n\n _triggerSelect: function(target, itemElement) {\n target = target.is(\".k-link\") ? target : target.closest(\".k-link\");\n\n var selectHandler = target.data(\"selectHandler\"),\n itemSelectEventData;\n\n if (selectHandler) {\n itemSelectEventData = this._getEventData(target);\n selectHandler.call(this, itemSelectEventData);\n }\n\n var isSelectItemDefaultPrevented = itemSelectEventData && itemSelectEventData.isDefaultPrevented();\n var isSelectDefaultPrevented = this._triggerEvent({ item: itemElement, type: SELECT });\n return isSelectItemDefaultPrevented || isSelectDefaultPrevented;\n },\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\n _documentClick: function(e) {\n var that = this;\n var target = $(e.target).hasClass('k-menu-expand-arrow-icon') ? that._lastClickedElement : e.target;\n\n if (contains((that._overflowWrapper() || that.element)[0], target)) {\n that._lastClickedElement = undefined$1;\n return;\n }\n\n that.clicked = false;\n },\n\n _focus: function(e) {\n var that = this,\n target = e.target,\n hoverItem = that._hoverItem(),\n active = activeElement();\n\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.trigger(\"focus\");\n return;\n }\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\n _keydown: function(e) {\n var that = this,\n key = e.keyCode,\n hoverItem = that._oldHoverItem,\n target,\n belongsToVertical,\n hasChildren,\n isRtl = kendo.support.isRtl(that.wrapper);\n\n if (e.target != e.currentTarget && key != keys.ESC) {\n return;\n }\n\n if (!hoverItem) {\n hoverItem = that._oldHoverItem = that._hoverItem();\n }\n\n belongsToVertical = that._itemBelongsToVertival(hoverItem);\n hasChildren = that._itemHasChildren(hoverItem);\n that._keyTriggered = true;\n\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.HOME) {\n that._moveHover(hoverItem, hoverItem.parent().children().first());\n e.preventDefault();\n } else if (key == keys.END) {\n that._moveHover(hoverItem, hoverItem.parent().children().last());\n e.preventDefault();\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({ target: target[0], preventDefault: function() {}, enterKey: true });\n if (hasChildren && !hoverItem.hasClass(DISABLEDSTATE)) {\n that.open(hoverItem);\n that._moveHover(hoverItem, that._childPopupElement(hoverItem).children().first());\n } else if (hoverItem.is(\"li\") && hoverItem.attr(\"role\") === \"menuitemcheckbox\") {\n hoverItem.find(\".k-checkbox\").attr(\"checked\", true);\n } else {\n that._moveHoverToRoot(hoverItem, that._findRootParent(hoverItem));\n }\n }\n } else if (key == keys.TAB) {\n target = that._findRootParent(hoverItem);\n that._moveHover(hoverItem, target);\n that._checkActiveElement();\n return;\n }\n\n if (target && target[0]) {\n e.preventDefault();\n e.stopPropagation(); // needed to handle ESC in column menu only when a root item is focused\n }\n },\n\n _hoverItem: function() {\n return this.wrapper.find(\".k-item.k-hover,.k-item.k-focus\").filter(\":visible\");\n },\n\n _itemBelongsToVertival: function(item) {\n var menuIsVertical = this.wrapper.hasClass(\"k-menu-vertical\");\n\n if (!item.length) {\n return menuIsVertical;\n }\n return item.parent().hasClass(\"k-menu-group\") || menuIsVertical;\n },\n\n _itemHasChildren: function(item) {\n if (!item || !item.length || !item[0].nodeType) {\n return false;\n }\n return item.children(\".k-menu-group, div.k-animation-container\").length > 0 ||\n (!!item.data(POPUP_OPENER_ATTR) && !!this._overflowWrapper().children(popupGroupSelector(item.data(POPUP_OPENER_ATTR))));\n },\n\n _moveHover: function(item, nextItem) {\n var that = this,\n id = that._ariaId;\n\n if (item.length && nextItem.length) {\n item.removeClass(FOCUSEDSTATE);\n }\n\n if (nextItem.length) {\n if (nextItem[0].id) {\n id = nextItem[0].id;\n }\n\n nextItem.addClass(FOCUSEDSTATE);\n that._oldHoverItem = nextItem;\n\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 that._scrollToItem(nextItem);\n }\n },\n\n _moveHoverToRoot: function(item, nextItem) {\n this._moveHover(item, nextItem);\n },\n\n _findRootParent: function(item) {\n if (this._isRootItem(item)) {\n return item;\n } else {\n return this._parentsUntil(item, menuSelector, \"li.k-item\").last();\n }\n },\n\n _isRootItem: function(item) {\n return item.parent().hasClass(MENU);\n },\n\n _itemRight: function(item, belongsToVertical, hasChildren) {\n var that = this,\n nextItem,\n parentItem,\n overflowWrapper;\n\n if (!belongsToVertical) {\n nextItem = item.nextAll(itemSelector + exclusionSelector).eq(0);\n if (!nextItem.length) {\n nextItem = item.prevAll(itemSelector + exclusionSelector).last();\n }\n that.close(item);\n } else if (hasChildren && !item.hasClass(DISABLEDSTATE)) {\n that.open(item);\n nextItem = that._childPopupElement(item).children().first();\n } else if (that.options.orientation == \"horizontal\") {\n parentItem = that._findRootParent(item);\n overflowWrapper = that._overflowWrapper();\n if (overflowWrapper) {\n var rootPopup = itemPopup(parentItem, overflowWrapper);\n that._closeChildPopups(rootPopup);\n }\n that.close(parentItem);\n nextItem = parentItem.nextAll(itemSelector + exclusionSelector).eq(0);\n }\n\n if (nextItem && !nextItem.length) {\n nextItem = that.wrapper.children(\".k-item\").first();\n } else if (!nextItem) {\n nextItem = [];\n }\n\n that._moveHover(item, nextItem);\n return nextItem;\n },\n\n _itemLeft: function(item, belongsToVertical) {\n var that = this,\n nextItem,\n overflowWrapper;\n\n if (!belongsToVertical) {\n nextItem = item.prevAll(itemSelector + exclusionSelector).eq(0);\n if (!nextItem.length) {\n nextItem = item.nextAll(itemSelector + exclusionSelector).last();\n }\n that.close(item);\n } else {\n nextItem = item.parent().closest(\".k-item\");\n overflowWrapper = that._overflowWrapper();\n if (!nextItem.length && overflowWrapper) {\n nextItem = popupParentItem(item.parent(), overflowWrapper);\n }\n that.close(nextItem);\n if (that._isRootItem(nextItem) && that.options.orientation == \"horizontal\") {\n nextItem = nextItem.prevAll(itemSelector + exclusionSelector).eq(0);\n }\n }\n\n if (!nextItem.length) {\n nextItem = that.wrapper.children(\".k-item\").last();\n }\n\n that._moveHover(item, nextItem);\n return nextItem;\n },\n\n _itemDown: function(item, belongsToVertical, hasChildren) {\n var that = this,\n nextItem;\n\n if (!belongsToVertical) {\n if (!hasChildren || item.hasClass(DISABLEDSTATE)) {\n return;\n } else {\n that.open(item);\n nextItem = that._childPopupElement(item).children().first();\n }\n } else {\n nextItem = item.nextAll(itemSelector + exclusionSelector).eq(0);\n }\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\n that._moveHover(item, nextItem);\n return nextItem;\n },\n\n _itemUp: function(item, belongsToVertical) {\n var that = this,\n nextItem;\n\n if (!belongsToVertical) {\n return;\n } else {\n nextItem = item.prevAll(itemSelector + exclusionSelector).eq(0);\n }\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\n that._moveHover(item, nextItem);\n return nextItem;\n },\n\n _scrollToItem: function(item) {\n var that = this;\n if (that.options.scrollable && item && item.length) {\n var ul = item.parent();\n var isHorizontal = ul.hasClass(MENU) ? that.options.orientation == \"horizontal\" : false;\n var scrollDir = isHorizontal ? \"scrollLeft\" : \"scrollTop\";\n var getSize = isHorizontal ? kendo._outerWidth : kendo._outerHeight;\n var currentScrollOffset = ul[scrollDir]();\n var itemSize = getSize(item);\n var itemOffset = item[0][isHorizontal ? \"offsetLeft\" : \"offsetTop\"];\n var ulSize = getSize(ul);\n var scrollButtons = ul.siblings(scrollButtonSelector);\n var scrollButtonSize = scrollButtons.length ? getSize(scrollButtons.first()) : 0;\n var itemPosition;\n\n if (currentScrollOffset + ulSize < itemOffset + itemSize + scrollButtonSize) {\n itemPosition = itemOffset + itemSize - ulSize + scrollButtonSize;\n } else if (currentScrollOffset > itemOffset - scrollButtonSize) {\n itemPosition = itemOffset - scrollButtonSize;\n }\n\n if (!isNaN(itemPosition)) {\n var scrolling = {};\n scrolling[scrollDir] = itemPosition;\n ul.finish().animate(scrolling, \"fast\", \"linear\", function() {\n that._toggleScrollButtons(ul, scrollButtons.first(), scrollButtons.last(), isHorizontal);\n });\n }\n }\n },\n\n _itemEsc: function(item, belongsToVertical) {\n var that = this,\n nextItem, groupId;\n\n if (!belongsToVertical) {\n return item;\n } else {\n nextItem = item.parent().closest(\".k-item\");\n\n if (nextItem.length === 0) {\n groupId = item.closest(\".k-group\").data(\"group\");\n nextItem = that.wrapper.find(\".k-item[data-groupparent='\" + groupId + \"']\");\n }\n\n that.close(nextItem);\n that._moveHover(item, nextItem);\n }\n\n return nextItem;\n },\n\n _childPopupElement: function(item) {\n var popupElement = item.find(\".k-menu-group\");\n var wrapper = this._overflowWrapper();\n if (!popupElement.length && wrapper) {\n popupElement = itemPopup(item, wrapper);\n }\n return popupElement;\n },\n\n _triggerEvent: function(e) {\n var that = this;\n\n return that.trigger(e.type, { type: e.type, item: e.item });\n },\n\n _focusHandler: function(e) {\n var that = this,\n item = $(kendo.eventTarget(e)).closest(allItemsSelector);\n\n if (item.hasClass(DISABLEDSTATE)) {\n return;\n }\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\n _animations: function(options) {\n if (options && (\"animation\" in options) && !options.animation) {\n options.animation = { open: { effects: {} }, close: { hide: true, effects: {} } };\n }\n },\n _dataSource: function(options) {\n var that = this,\n dataSource = options ? options.dataSource : that.options.dataSource;\n\n if (!dataSource) {\n return;\n }\n\n dataSource = isArray(dataSource) ? { data: dataSource } : dataSource;\n\n that._unbindDataSource();\n\n if (!dataSource.fields) {\n dataSource.fields = [\n { field: \"uid\" },\n { field: \"text\" },\n { field: \"url\" },\n { field: \"cssClass\" },\n { field: \"spriteCssClass\" },\n { field: \"imageUrl\" },\n { field: \"imageAttr\" },\n { field: \"attr\" },\n { field: \"contentAttr\" },\n { field: \"content\" },\n { field: \"encoded\" },\n { field: \"items\" },\n { field: \"select\" }\n ];\n }\n\n that.dataSource = HierarchicalDataSource.create(dataSource);\n\n that._bindDataSource();\n\n that.dataSource.fetch();\n },\n\n _bindDataSource: function() {\n this._refreshHandler = this.refresh.bind(this);\n this._errorHandler = this._error.bind(this);\n\n this.dataSource.bind(CHANGE, this._refreshHandler);\n this.dataSource.bind(ERROR, this._errorHandler);\n },\n\n _unbindDataSource: function() {\n var dataSource = this.dataSource;\n\n if (dataSource) {\n dataSource.unbind(CHANGE, this._refreshHandler);\n dataSource.unbind(ERROR, this._errorHandler);\n }\n },\n\n _error: function() {\n\n },\n\n findByUid: function(uid) {\n var wrapperElement = this._overflowWrapper() || this.element;\n return wrapperElement.find(\"[\" + kendo.attr(\"uid\") + \"=\" + uid + \"]\");\n },\n\n refresh: function(ev) {\n var that = this;\n var node = ev.node;\n var action = ev.action;\n var parentElement = node ? that.findByUid(node.uid) : that.element;\n var itemsToUpdate = ev.items;\n var index = ev.index;\n var updateProxy = that._updateItem.bind(that);\n var removeProxy = that._removeItem.bind(that);\n\n if (action == \"add\") {\n that._appendItems(itemsToUpdate, index, parentElement);\n } else if (action == \"remove\") {\n itemsToUpdate.forEach(removeProxy);\n } else if (action == \"itemchange\") {\n itemsToUpdate.forEach(updateProxy);\n } else if (action === \"itemloaded\") {\n that.append(ev.items, parentElement);\n } else {\n this._initData();\n }\n\n this.trigger(DATABOUND, { item: parentElement, dataItem: node });\n },\n\n _appendItems: function(items, index, parent) {\n var that = this;\n var referenceItem = parent.find(itemSelector).eq(index);\n\n if (referenceItem.length) {\n that.insertBefore(items, referenceItem);\n } else {\n that.append(items, parent);\n }\n },\n\n _removeItem: function(item) {\n var that = this;\n var element = that.findByUid(item.uid);\n that.remove(element);\n },\n\n _updateItem: function(item) {\n var that = this;\n var element = that.findByUid(item.uid);\n var nextElement = element.next();\n var parentNode = item.parentNode();\n\n that.remove(element);\n\n if (nextElement.length) {\n that.insertBefore(item, nextElement);\n } else {\n that.append(item, parentNode && that.findByUid(parentNode.uid));\n }\n },\n\n _accessors: function() {\n var that = this,\n options = that.options,\n i, field, textField,\n element = that.element;\n\n for (i in bindings) {\n field = options[bindings[i]];\n textField = element.attr(kendo.attr(i + \"-field\"));\n\n if (!field && textField) {\n field = textField;\n }\n\n if (!field) {\n field = i;\n }\n\n if (!isArray(field)) {\n field = [field];\n }\n\n options[bindings[i]] = field;\n }\n },\n\n _fieldAccessor: function(fieldName) {\n var fieldBindings = this.options[bindings[fieldName]] || [],\n count = fieldBindings.length,\n result = \"(function(item) {\";\n\n if (count === 0) {\n result += \"return item['\" + fieldName + \"'];\";\n } else {\n result += \"var levels = [\" +\n $.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\n result += \"})\";\n\n return result;\n },\n\n _templates: function() {\n var that = this,\n options = that.options,\n fieldAccessor = that._fieldAccessor.bind(that);\n\n if (options.template && typeof options.template == STRING) {\n options.template = template(options.template);\n } else if (!options.template) {\n options.template = template(\n \" \");\n });\n }\n\n function getArrowCssClass(item) {\n var arrowCssClass,\n parent = item.parent().parent(),\n isRtl = kendo.support.isRtl(parent);\n\n if (parent.hasClass(MENU + \"-horizontal\")) {\n arrowCssClass = \"k-i-arrow-s\";\n } else {\n if (isRtl) {\n arrowCssClass = \"k-i-arrow-w\";\n }\n else {\n arrowCssClass = \"k-i-arrow-e\";\n }\n }\n return arrowCssClass;\n }\n\n function updateFirstLast(item) {\n item = $(item);\n\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\n function updateHasAriaPopup(parents) {\n if (parents && parents.length) {\n for (var index in parents) {\n var parentLi = parents.eq(index);\n if (parentLi.find(\"ul\").length) {\n parentLi.attr(\"aria-haspopup\", true);\n } else {\n parentLi.removeAttr(\"aria-haspopup\");\n }\n }\n }\n }\n\n function getParentLiItems(group) {\n if (!group.hasClass(MENU)) {\n return group.parentsUntil(\".\" + MENU, \"li\");\n }\n }\n\n function storeItemSelectEventHandler(element, options) {\n var selectHandler = getItemSelectEventHandler(options);\n if (selectHandler) {\n setItemData(element, selectHandler);\n }\n\n if (options.items) {\n $(element).children(\"ul\").children(\"li\").each(function(i) {\n storeItemSelectEventHandler(this, options.items[i]);\n });\n }\n }\n\n function setItemData(element, selectHandler) {\n $(element).children(\".k-link\").data({\n selectHandler: selectHandler\n });\n }\n\n function getItemSelectEventHandler(options) {\n var selectHandler = options.select,\n isFunction = kendo.isFunction;\n\n if (selectHandler && isFunction(selectHandler)) {\n return selectHandler;\n }\n return null;\n }\n\n function popupOpenerSelector(id) {\n return id ? \"li[data-groupparent='\" + id + \"']\" : \"li[data-groupparent]\";\n }\n function popupGroupSelector(id) {\n var selector = id ? \"[data-group='\" + id + \"']\" : \"[data-group]\";\n return \"ul\" + selector + \",div\" + selector;\n }\n function getChildPopups(currentPopup, overflowWrapper) {\n var childPopupOpener = currentPopup.find(popupOpenerSelector());\n var result = [];\n childPopupOpener.each(function(i, opener) {\n opener = $(opener);\n var popupId = opener.data(POPUP_OPENER_ATTR);\n var popup = currentPopup;\n while (popupId) {\n popup = overflowWrapper.find(popupGroupSelector(popupId) + \":visible\");\n if (popup.length) {\n result.push(popup);\n }\n opener = popup.find(popupOpenerSelector());\n popupId = opener.data(POPUP_OPENER_ATTR);\n }\n });\n\n return result;\n }\n\n function popupParentItem(popupElement, overflowWrapper) {\n var popupId = popupElement.data(POPUP_ID_ATTR);\n return popupId ? overflowWrapper.find(popupOpenerSelector(popupId)) : $([]);\n }\n\n function itemPopup(item, overflowWrapper) {\n var popupId = item.data(POPUP_OPENER_ATTR);\n return popupId ? overflowWrapper.children(animationContainerSelector).children(popupGroupSelector(popupId)) : $([]);\n }\n\n function overflowMenuParents(current, overflowWrapper) {\n var parents = [];\n var getParents = function(item) {\n while (item.parentNode && !overflowWrapper.is(item.parentNode)) {\n parents.push(item.parentNode);\n item = item.parentNode;\n }\n };\n var elem = current[0] || current;\n getParents(elem);\n var last = parents[parents.length - 1];\n while ($(last).is(animationContainerSelector)) {\n var popupElement = $(last).children(\"ul\");\n elem = popupParentItem(popupElement, overflowWrapper)[0];\n if (!elem) {\n break;\n }\n parents.push(elem);\n getParents(elem);\n last = parents[parents.length - 1];\n }\n return parents;\n }\n\n function mousewheelDelta(e) {\n var delta = 0;\n\n if (e.wheelDelta) {\n delta = -e.wheelDelta / 120;\n delta = delta > 0 ? Math.ceil(delta) : Math.floor(delta);\n }\n\n if (e.detail) {\n delta = Math.round(e.detail / 3);\n }\n\n return delta;\n }\n\n function parentsScroll(current, scrollDirection) {\n var scroll = 0;\n var parent = current.parentNode;\n while (parent && !isNaN(parent[scrollDirection])) {\n scroll += parent[scrollDirection];\n parent = parent.parentNode;\n }\n return scroll;\n }\n\n function isPointerTouch(e) {\n return allPointers && e.originalEvent && e.originalEvent.pointerType in touchPointerTypes;\n }\n\n function isTouch(e) {\n var ev = e.originalEvent;\n return touch && /touch/i.test(ev.type || \"\");\n }\n\n function removeSpacesBetweenItems(ul) {\n ul.contents().filter(function() { return this.nodeName != \"LI\"; }).remove();\n }\n\n var Menu = kendo.ui.DataBoundWidget.extend({\n init: function(element, options) {\n var that = this;\n\n Widget.fn.init.call(that, element, options);\n\n element = that.wrapper = that.element;\n options = that.options;\n that._accessors();\n that._templates();\n that._dataSource();\n\n that._updateClasses();\n\n that._animations(options);\n\n that.nextItemZIndex = 100;\n\n that._tabindex();\n\n that._initOverflow(options);\n\n that._attachMenuEventsHandlers();\n\n if (options.openOnClick) {\n that.clicked = false;\n }\n\n element.attr(ROLE, \"menubar\");\n\n if (element[0].id) {\n that._ariaId = kendo.format(\"{0}_mn_active\", element[0].id);\n }\n\n kendo.notify(that);\n },\n\n events: [\n OPEN,\n CLOSE,\n ACTIVATE,\n DEACTIVATE,\n SELECT,\n DATABOUND\n ],\n\n options: {\n name: \"Menu\",\n animation: {\n open: {\n duration: 200\n },\n close: { // if close animation effects are defined, they will be used instead of open.reverse\n duration: 100\n }\n },\n orientation: \"horizontal\",\n direction: \"default\",\n openOnClick: false,\n closeOnClick: true,\n hoverDelay: 100,\n scrollable: false,\n popupCollision: undefined$1\n },\n\n _initData: function() {\n var that = this;\n\n if (that.dataSource) {\n that.angular(\"cleanup\", function() {\n return {\n elements: that.element.children()\n };\n });\n that.element.empty();\n\n that.append(that.dataSource.view(), that.element);\n that.angular(\"compile\", function() {\n return {\n elements: that.element.children()\n };\n });\n }\n },\n\n _attachMenuEventsHandlers: function() {\n var that = this;\n var element = that.element;\n var options = that.options;\n var overflowWrapper = that._overflowWrapper();\n\n that._checkActiveProxy = that._checkActiveElement.bind(that);\n\n (overflowWrapper || element).on(POINTERDOWN, itemSelector, that._focusHandler.bind(that))\n .on(CLICK + NS, disabledSelector, false)\n .on(CLICK + NS, itemSelector, that._click.bind(that))\n .on(POINTERDOWN + \" \" + MOUSEDOWN + NS, \".k-content\", that._preventClose.bind(that))\n .on(MOUSEENTER + NS, availableItemsSelector, that._mouseenter.bind(that))\n .on(MOUSELEAVE + NS, availableItemsSelector, that._mouseleave.bind(that))\n .on(MOUSEDOWN + NS, availableItemsSelector, that._mousedown.bind(that))\n .on(TOUCHSTART + NS + \" \" + MOUSEENTER + NS + \" \" + MOUSELEAVE + NS + \" \" +\n MOUSEDOWN + NS + \" \" + CLICK + NS, linkSelector, that._toggleHover.bind(that));\n\n element.on(\"keydown\" + NS, that._keydown.bind(that))\n .on(\"focus\" + NS, that._focus.bind(that))\n .on(\"focus\" + NS, \".k-content\", that._focus.bind(that))\n .on(\"blur\" + NS, that._removeHoverItem.bind(that))\n .on(\"blur\" + NS, \"[tabindex]\", that._checkActiveProxy);\n\n if (overflowWrapper) {\n overflowWrapper\n .on(MOUSELEAVE + NS, popupSelector, that._mouseleavePopup.bind(that))\n .on(MOUSEENTER + NS, popupSelector, that._mouseenterPopup.bind(that));\n }\n\n if (options.openOnClick) {\n that._documentClickHandler = that._documentClick.bind(that);\n $(document).on(\"click\", that._documentClickHandler);\n }\n },\n\n _detachMenuEventsHandlers: function() {\n var that = this;\n var overflowWrapper = that._overflowWrapper();\n\n if (overflowWrapper) {\n overflowWrapper.off(NS);\n }\n\n that.element.off(NS);\n\n if (that._documentClickHandler) {\n $(document).off(\"click\", that._documentClickHandler);\n }\n },\n\n _initOverflow: function(options) {\n var that = this;\n var isHorizontal = options.orientation == \"horizontal\";\n var backwardBtn, forwardBtn;\n\n if (options.scrollable) {\n that._openedPopups = {};\n that._scrollWrapper = that.element.wrap(\" \"\n );\n }\n\n that.templates = {\n content: template(\n \"#var contentHtml = \" + fieldAccessor(\"content\") + \"(item);#\" +\n \"