{"version":3,"file":"kendo.menu.min.js","names":["global","factory","exports","module","require","define","amd","globalThis","self","kendomenu","js","this","$","undefined$1","kendo","window","ui","activeElement","_activeElement","touch","support","mobileOS","isArray","Array","HierarchicalDataSource","data","MOUSEDOWN","CLICK","extend","each","encode","htmlEncode","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","animationContainerSelector","childAnimationContainerSelector","popupSelector","allItemsSelector","itemSelector","availableItemsSelector","exclusionSelector","scrollButtonSelector","touchPointerTypes","DATABOUND","ARIA_EXPANDED","ROLE","bindings","text","url","spriteCssClass","imageUrl","imageAttr","content","rendering","wrapperCssClass","group","item","result","index","separator","enabled","firstLevel","length","cssClass","attr","hasOwnProperty","selected","itemCssAttributes","attributes","imageCssAttributes","imgAttributes","toJSON","contentCssAttributes","contentAttr","defaultClasses","textClass","groupAttributes","expanded","groupCssClass","groupWrapperCssClass","contains","parent","child","e","updateItemClasses","addClass","children","filter","removeClass","empty","append","prop","contents","nodeName","match","nodeType","trim","nodeValue","wrapAll","idx","elm","wrap","updateArrow","updateFirstLast","find","remove","icon","getArrowIconName","iconClass","isRtl","hasClass","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","_wrapGroups","_animations","nextItemZIndex","_tabindex","_initOverflow","_attachMenuEventsHandlers","openOnClick","clicked","_ariaId","format","guid","notify","events","name","animation","open","duration","close","orientation","direction","closeOnClick","hoverDelay","scrollable","popupCollision","_initData","dataSource","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","horizontal","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","applyStylesFromKendoAttributes","ObservableArray","map","get","itemElement","renderItem","charAt","parentItems","container","_openAfterLoad","dataItem","loaded","_loading","one","getByUid","ns","hasChildren","load","replace","visiblePopups","closePopup","closest","siblings","li","clearTimeout","_timerTimeout","overflowPopup","div","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","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","levels","getter","level","this$1$1","fieldAccessor","encoded","contentHtml","renderItems","itemWrapper","tag","sprite","arrow","menu","subGroup","contentUrl","renderContent","ref","dataContentField","html","len","ContextMenu","_marker","substring","_popup","_wire","closes","_initialWidth","showOn","alignToAnchor","copyAnchorStyles","_showProxy","userEvents","mousedown","_closeProxy","x","y","visible","kendoStop","_triggerFocusOnActivate","_focusMenu","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","contextMenuElement","_triggerProxy","noop","not","plugin","jQuery"],"sources":["kendo.menu.js"],"mappings":"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","sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('kendo.popup.js'), require('kendo.data.js'), require('kendo.icons.js')) :\n typeof define === 'function' && define.amd ? define(['kendo.popup', 'kendo.data', 'kendo.icons'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (global.kendomenu = global.kendomenu || {}, global.kendomenu.js = factory()));\n})(this, (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 encode = kendo.htmlEncode,\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 childAnimationContainerSelector = \".k-child-animation-container\",\n popupSelector = \".k-menu-popup ,\" + 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):visible\",\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.separator) {\n result += \" k-separator\";\n }\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 groupAttributes: function(group) {\n return group.expanded !== true ? ((kendo.attr(\"style-display\")) + \"=\\\"none\\\"\") : \"\";\n },\n\n groupCssClass: function() {\n return \"k-group k-menu-group k-menu-group-md\";\n },\n\n groupWrapperCssClass: function() {\n return \"k-menu-popup\";\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 // adding role=none to span elements inside li[role=menuitem]\n // to make screen readers announce submenus #telerik/kendo-ui-core/issues/6942\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 item.find(\"> .k-link > .k-menu-expand-arrow > [class*=k-i-caret]:not(.k-sprite),> .k-link > .k-menu-expand-arrow > [class*=k-svg-i-caret]:not(.k-sprite)\").parent().remove();\n\n item.filter(\":has(.k-menu-group)\")\n .children(\".k-link:not(:has([class*=k-i-caret]:not(.k-sprite))),.k-link:not(:has([class*=k-svg-i-caret]:not(.k-sprite)))\")\n .each(function() {\n var item = $(this);\n\n item.append((\"\"));\n });\n }\n\n function getArrowIconName(item) {\n var arrowIconName,\n parent = item.parent().parent(),\n isRtl = kendo.support.isRtl(parent);\n\n if (parent.hasClass(MENU + \"-horizontal\")) {\n arrowIconName = \"caret-alt-down\";\n } else {\n if (isRtl) {\n arrowIconName = \"caret-alt-left\";\n }\n else {\n arrowIconName = \"caret-alt-right\";\n }\n }\n return arrowIconName;\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(\"div\").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).find(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).find(popupSelector);\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 that._wrapGroups();\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 } else {\n that._ariaId = kendo.format(\"{0}_mn_active\", kendo.guid());\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.element.empty();\n\n that.append(that.dataSource.view(), that.element);\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(\"
\").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).find(\".k-child-animation-container > .k-menu-popup\");\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._wrapGroups();\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).children().eq(0) : 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 kendo.applyStylesFromKendoAttributes(parent, [\"display\"]);\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 var itemElement = $(that.renderItem({\n group: groupData,\n item: extend(value, { index: idx })\n }));\n\n kendo.applyStylesFromKendoAttributes(itemElement, [\"display\"]);\n return itemElement.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-child-animation-container > .k-menu-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 clearTimeout(that._timerTimeout);\n that._timerTimeout = setTimeout(function() {\n var div = li.find(\"> .k-menu-popup, > .k-animation-container > .k-child-animation-container > .k-menu-popup\").filter(\":hidden\").first();\n var popup;\n var overflowPopup;\n\n if (!div[0] && overflowWrapper) {\n overflowPopup = that._getPopup(li);\n div = overflowPopup && overflowPopup.element;\n }\n if (div.is(\":visible\")) {\n return;\n }\n\n if (div[0] && that._triggerEvent({ item: li[0], type: OPEN }) === false) {\n\n if (!div.find(\".k-menu-popup\")[0] && div.children(\".k-menu-group\").children(\".k-item\").length > 1) {\n var windowHeight = $(window).height(),\n setScrolling = function() {\n div.css({ maxHeight: windowHeight - (kendo._outerHeight(div) - div.height()) - kendo.getShadows(div).bottom, overflow: \"auto\" });\n };\n\n setScrolling();\n } else {\n div.css({ maxHeight: \"\", overflow: \"visible\" });\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 = div.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 = div.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 div.closest(animationContainerSelector).removeAttr(ROLE);\n } else {\n popup = div.data(KENDOPOPUP);\n popup.options.origin = directions.origin;\n popup.options.position = directions.position;\n popup.options.animation.open.effects = openEffects;\n }\n div.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 li.data(TIMER, that._timerTimeout);\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(childAnimationContainerSelector)) {\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.find(\".\" + 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(childAnimationContainerSelector));\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-popup: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 _wrapGroups: function() {\n var that = this;\n\n that.element.find(\"li > ul\")\n .filter(function() {\n return !$(this).parent().hasClass(\"k-menu-popup\");\n })\n .wrap(\"
\")\n .parent(\"div\")\n .attr(\"aria-hidden\", that.element.is(\":visible\"))\n .hide();\n\n that.element.find(\"ul\").each(function() {\n var group = $(this);\n var id = kendo.guid();\n group.attr(\"id\", id)\n .closest(\"li\")\n .attr(\"aria-controls\", id);\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-header 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 .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.closest(popupSelector).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(popupSelector).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(childAnimationContainerSelector)) {\n return;\n }\n\n popupElement = popupElement.find(popupSelector);\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.find(popupSelector));\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.closest(popupSelector).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.closest(popupSelector).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).closest(\"span\").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).closest(\"span\").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-popup\").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(\":visible\").first());\n e.preventDefault();\n } else if (key == keys.END) {\n that._moveHover(hoverItem, hoverItem.parent().children(\":visible\").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().find(\"li\").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, .k-menu-popup, 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().find(\"li\").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().find(\"li\").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(\":visible\").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(\":visible\").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-menu-popup\").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-popup\");\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\n if (count === 0) {\n return (function(item) { return item[fieldName]; });\n } else {\n return (function(item) {\n var levels = $.map(fieldBindings, kendo.getter);\n if (item.level) {\n return levels[Math.min(item.level(), count - 1)](item);\n } else {\n return levels[count - 1](item);\n }\n });\n }\n },\n\n _templates: function() {\n var this$1$1 = this;\n\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(function (data) {\n var text = fieldAccessor(\"text\")(data.item);\n if (!(typeof data.item.encoded != 'undefined' && data.item.encoded === false)) {\n text = encode(text);\n }\n\n return (\"\" + text + \"\");\n });\n }\n\n that.templates = {\n content: template(function (data) {\n var item = data.item;\n var contentHtml = fieldAccessor(\"content\")(item);\n var contCssAttributes = data.contentCssAttributes(item.toJSON ? item.toJSON() : item);\n return (\"
\" + (contentHtml || '') + \"
\");\n }),\n group: template(function (data) { return \"
\" +\n \"\" +\n \"
\"; }\n ),\n itemWrapper: template(function (data) {\n var item = data.item;\n var url = fieldAccessor(\"url\")(item);\n var imageUrl = fieldAccessor(\"imageUrl\")(item);\n var imgAttributes = fieldAccessor(\"imageAttr\")(item);\n var tag = url ? 'a' : 'span';\n\n return \"<\" + tag + \" class='\" + (rendering.textClass(item)) + \"' role='none' \" + (url ? (\"href='\" + url + \"'\") : '') + \" >\" +\n (imageUrl ? (\"\") : '') +\n this$1$1.templates.sprite(item) +\n this$1$1.options.template(data) +\n data.arrow(data) +\n \"\";\n }),\n item: template(function (data) {\n var item = data.item,\n menu = data.menu,\n group = data.group,\n subGroup = data.subGroup;\n var contentHtml = fieldAccessor(\"content\")(item);\n var groupId = kendo.guid();\n return \"\";\n }),\n scrollButton: template(function (ref) {\n var direction = ref.direction;\n\n return \"\" +\n kendo.ui.icon({ icon: (\"caret-alt-\" + direction), iconClass: \"k-button-icon\" }) +\n \"\";\n }\n ),\n arrow: template(function (ref) {\n var item = ref.item;\n var group = ref.group;\n\n return (\"\");\n }),\n sprite: template(function (data) {\n var spriteCssClass = fieldAccessor(\"spriteCssClass\")(data);\n if (spriteCssClass) {\n return (\"\");\n }\n return '';\n }),\n empty: template(function () { return \"\"; })\n };\n },\n\n renderItem: function(options) {\n var that = this;\n options = extend({ menu: that, group: {} }, options);\n\n var empty = that.templates.empty,\n item = options.item;\n\n return that.templates.item(extend(options, {\n separator: item.separator ? that.templates.separator : empty,\n sprite: that.templates.sprite,\n itemWrapper: that.templates.itemWrapper,\n renderContent: that.renderContent,\n arrow: item.items || item.content || item[that.options.dataContentField[0]] ? that.templates.arrow : empty,\n subGroup: that.renderGroup.bind(that)\n }, rendering));\n },\n\n renderGroup: function(options) {\n var that = this;\n var templates = that.templates || options.menu.templates;\n\n return templates.group(extend({\n renderItems: function(options) {\n var html = \"\",\n i = 0,\n items = options.items,\n len = items ? items.length : 0,\n group = extend({ length: len }, options.group);\n\n for (; i < len; i++) {\n html += options.menu.renderItem(extend(options, {\n group: group,\n item: extend({ index: i }, items[i])\n }));\n }\n\n return html;\n }\n }, options, rendering));\n },\n\n renderContent: function(options) {\n return options.menu.templates.content(extend(options, rendering));\n }\n });\n\n var ContextMenu = Menu.extend({\n init: function(element, options) {\n var that = this;\n\n Menu.fn.init.call(that, element, options);\n\n that.element.attr(ROLE, \"menu\");\n\n that._marker = kendo.guid().substring(0, 8);\n\n that.target = $(that.options.target);\n\n that._popup();\n that._wire();\n },\n\n _initOverflow: function(options) {\n var that = this;\n if (options.scrollable && !that._overflowWrapper()) {\n that._openedPopups = {};\n\n that._popupsWrapper = (that.element.parent().is(childAnimationContainerSelector) ? that.element.closes(animationContainerSelector) : that.element)\n .wrap(\"
\").parent();\n\n if (that.options.orientation == \"horizontal\") {\n removeSpacesBetweenItems(that.element);\n }\n\n if (options.appendTo) {\n options.appendTo = $(options.appendTo);\n options.appendTo.append(that._popupsWrapper);\n }\n\n that._initialHeight = that.element[0].style.height;\n that._initialWidth = that.element[0].style.width;\n }\n },\n\n options: {\n name: \"ContextMenu\",\n filter: null,\n showOn: \"contextmenu\",\n orientation: \"vertical\",\n alignToAnchor: false,\n copyAnchorStyles: true,\n target: \"body\",\n origin: undefined$1,\n position: undefined$1\n },\n\n events: [\n OPEN,\n CLOSE,\n ACTIVATE,\n DEACTIVATE,\n SELECT\n ],\n\n setOptions: function(options) {\n var that = this;\n\n Menu.fn.setOptions.call(that, options);\n\n that.target.off(that.showOn + NS + that._marker, that._showProxy);\n\n if (that.userEvents) {\n that.userEvents.destroy();\n }\n\n that.target = $(that.options.target);\n if (options.orientation && that.popup.wrapper[0]) {\n that.popup.element.unwrap();\n }\n\n that._wire();\n\n Menu.fn.setOptions.call(this, options);\n },\n\n destroy: function() {\n var that = this;\n\n that.target.off(that.options.showOn + NS + that._marker);\n DOCUMENT_ELEMENT.off(kendo.support.mousedown + NS + that._marker, that._closeProxy);\n\n if (that.userEvents) {\n that.userEvents.destroy();\n }\n\n Menu.fn.destroy.call(that);\n\n if (that.popup) {\n that.popup.destroy();\n }\n },\n\n open: function(x, y) {\n var that = this;\n\n x = $(x)[0];\n\n if (contains(that.element[0], $(x)[0]) || that._itemHasChildren($(x))) { // call parent open for children elements\n Menu.fn.open.call(that, x);\n } else {\n if (that._triggerEvent({ item: that.element, type: OPEN }) === false) {\n if (that.popup.visible() && that.options.filter) {\n that.popup.close(true);\n that.popup.element.kendoStop(true);\n }\n\n if (!that._triggerFocusOnActivate) {\n that._triggerFocusOnActivate = that._focusMenu.bind(that);\n }\n that.bind(ACTIVATE, that._triggerFocusOnActivate);\n\n if (y !== undefined$1) {\n var overflowWrapper = that._overflowWrapper();\n if (overflowWrapper) {\n var offset = overflowWrapper.offset();\n x -= offset.left;\n y -= offset.top;\n }\n that.popup.wrapper.hide();\n that._configurePopupScrolling(x, y);\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._configurePopupScrolling();\n that.popup.open();\n }\n\n DOCUMENT_ELEMENT.off(that.popup.downEvent, that.popup._mousedownProxy);\n DOCUMENT_ELEMENT\n .on(kendo.support.mousedown + NS + that._marker, that._closeProxy);\n }\n }\n\n return that;\n },\n\n _focusMenu: function() {\n var that = this;\n\n that.unbind(ACTIVATE, that._triggerFocusOnActivate);\n that.element.trigger(\"focus\");\n },\n\n _configurePopupScrolling: function(x, y) {\n var that = this;\n var popup = that.popup;\n var isHorizontal = that.options.orientation == \"horizontal\";\n\n if (that.options.scrollable) {\n that._wrapPopupElement(popup);\n\n popup.element.parent().css({\n position: \"\",\n height: \"\"\n });\n\n popup.element.css({\n visibility: \"hidden\",\n display: \"\",\n position: \"\"\n });\n\n if (isHorizontal) {\n that._setPopupWidth(popup, isNaN(x) ? undefined$1 : { isFixed: true, x: x, y: y });\n } else {\n that._setPopupHeight(popup, isNaN(x) ? undefined$1 : { isFixed: true, x: x, y: y });\n }\n\n popup.element.css({\n visibility: \"\",\n display: \"none\",\n position: \"absolute\"\n });\n\n that._initPopupScrollButtons(popup, isHorizontal, true);\n popup.element.siblings(scrollButtonSelector).hide();\n }\n },\n\n _setPopupWidth: function(popup, isFixed) {\n var popupElement = popup.element;\n var popups = popupElement.add(popupElement.parent(childAnimationContainerSelector));\n\n popups.width(this._initialWidth || \"\");\n\n var location = popup._location(isFixed);\n var windowWidth = $(window).width();\n var popupOuterWidth = location.width;\n var popupOffsetLeft = Math.max(location.left, 0);\n var scrollLeft = isFixed ? 0 : parentsScroll(this._overflowWrapper()[0], \"scrollLeft\");\n var shadow = kendo.getShadows(popupElement);\n var maxWidth = windowWidth - shadow.left - shadow.right;\n var canFit = maxWidth + scrollLeft > popupOuterWidth + popupOffsetLeft;\n\n if (!canFit) {\n popups.css({ overflow: \"hidden\", width: (maxWidth - popupOffsetLeft + scrollLeft) + \"px\" });\n }\n },\n\n close: function() {\n var that = this;\n\n if (contains(that.element[0], $(arguments[0])[0]) || that._itemHasChildren(arguments[0])) {\n Menu.fn.close.call(that, arguments[0]);\n } else {\n if (that.popup.visible()) {\n if (that._triggerEvent({ item: that.element, type: CLOSE }) === false) {\n that._removeHoverItem();\n that.element.find(\"#\" + that._ariaId).removeAttr(\"id\");\n that.popup.close();\n DOCUMENT_ELEMENT.off(kendo.support.mousedown + NS + that._marker, that._closeProxy);\n that.unbind(SELECT, that._closeTimeoutProxy);\n that.popup.options.anchor.focus();\n }\n }\n }\n },\n\n _showHandler: function(e) {\n var ev = e, offset,\n that = this,\n options = that.options,\n target = kendo.support.mobileOS ? $(ev.target) : $(ev.currentTarget);\n\n if (e.event) {\n ev = e.event;\n ev.pageX = e.x.location;\n ev.pageY = e.y.location;\n }\n\n if (contains(that.element[0], e.relatedTarget || e.target)) {\n return;\n }\n\n that._eventOrigin = ev;\n\n ev.preventDefault();\n ev.stopImmediatePropagation();\n\n that.element.find(\".\" + FOCUSEDSTATE).removeClass(FOCUSEDSTATE);\n\n if ((options.filter && target.is(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\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\n _closeHandler: function(e) {\n var that = this,\n target = $(e.relatedTarget || e.target),\n sameTarget = target.closest(that.target.selector)[0] == that.target[0],\n item = target.closest(itemSelector),\n children = that._itemHasChildren(item),\n overflowWrapper = that._overflowWrapper(),\n containment = contains(that.element[0], target[0]) || (overflowWrapper && contains(overflowWrapper[0], target[0]));\n\n that._eventOrigin = e;\n\n var normalClick = e.which !== 3;\n\n if (that.popup.visible() && ((normalClick && sameTarget) || !sameTarget) && ((that.options.closeOnClick && !children && 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\n _wire: function() {\n var that = this,\n options = that.options,\n target = that.target;\n\n that._preventProxy = null;\n that._showProxy = that._showHandler.bind(that);\n that._closeProxy = that._closeHandler.bind(that);\n that._closeTimeoutProxy = that.close.bind(that);\n\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\n that._preventProxy = function() { return false; };\n\n that.userEvents.bind(\"hold\", that._showProxy);\n }\n\n if (options.filter) {\n target.on(options.showOn + NS + that._marker, options.filter, that._preventProxy || that._showProxy);\n } else {\n target.on(options.showOn + NS + that._marker, that._preventProxy || that._showProxy);\n }\n\n target.on(\"keydown\", function (e) {\n if (e.keyCode === kendo.keys.F10 && e.shiftKey) {\n e.preventDefault();\n that.open(e.target);\n }\n });\n }\n },\n\n _triggerEvent: function(e) {\n var that = this,\n anchor = $(that.popup.options.anchor)[0],\n origin = that._eventOrigin;\n\n that._eventOrigin = undefined$1;\n\n return that.trigger(e.type, extend({ type: e.type, item: e.item || this.element[0], target: anchor }, origin ? { event: origin } : {} ));\n },\n\n _popup: function() {\n var that = this;\n var overflowWrapper = that._overflowWrapper();\n var contextMenuElement = that.element.addClass(\"k-context-menu\");\n\n that._triggerProxy = that._triggerEvent.bind(that);\n\n that.popup = $(\"
\")\n .append(contextMenuElement)\n .kendoPopup({\n origin: that.options.origin,\n position: that.options.position,\n autosize: that.options.orientation === \"horizontal\",\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: overflowWrapper || that.options.appendTo,\n close: !overflowWrapper ? $.noop : function(e) {\n $(getChildPopups(e.sender.element, overflowWrapper)).each(function(i, p) {\n var popup = p.data(KENDOPOPUP);\n if (popup) {\n popup.close(true);\n }\n });\n }\n }).data(KENDOPOPUP);\n\n that._targetChild = contains(that.target[0], that.popup.element[0]);\n },\n\n _moveHoverToRoot: function(item, nextItem) {\n this._moveHover(item, nextItem);\n this.close();\n },\n\n _focus: function(e) {\n var hoverItem = this._oldHoverItem = this._hoverItem() || [];\n\n Menu.fn._focus.call(this, e);\n\n if (activeElement() === e.currentTarget) {\n this._moveHover(hoverItem, this.wrapper.children().filter(\":visible\").not(\".k-separator\").first());\n }\n }\n });\n\n ui.plugin(Menu);\n ui.plugin(ContextMenu);\n\n })(window.kendo.jQuery);\n var kendo$1 = kendo;\n\n return kendo$1;\n\n}));\n"]}