1 /** 2 * @fileOverview positionable and not focusable menu 3 * @author yiminghe@gmail.com 4 */ 5 KISSY.add("menu/popupmenu", function (S, Component, Menu, PopupMenuRender) { 6 7 var autoHideOnMouseLeave = "autoHideOnMouseLeave"; 8 9 var UIBase = Component.UIBase; 10 11 12 /** 13 * @name PopupMenu 14 * @memberOf Menu 15 * @class 16 * Popup Menu. 17 * xclass: 'popupmenu'. 18 * @extends Menu 19 * @extends Component.UIBase.Position 20 * @extends Component.UIBase.Align 21 */ 22 var PopupMenu = Menu.extend([ 23 UIBase.ContentBox, 24 UIBase.Position, 25 UIBase.Align 26 ], 27 /** 28 * @lends Menu.PopupMenu# 29 */ 30 { 31 /** 32 * Handle mouseleave event.Make parent subMenu item unHighlighted. 33 * Protected, should only be overridden by subclasses. 34 * @protected 35 * @override 36 */ 37 handleMouseLeave:function () { 38 var self = this; 39 if (!self.get(autoHideOnMouseLeave)) { 40 return; 41 } 42 // 通知 submenu item buffer 层层检查,是否隐藏掉改子菜单以及子菜单的祖先菜单 43 self.get("parent").hideParentMenusBuffer(); 44 }, 45 46 /** 47 * Suppose it has focus (as a context menu), then it must hide when lose focus. 48 * Protected, should only be overridden by subclasses. 49 * @protected 50 * @override 51 */ 52 handleBlur:function () { 53 var self = this; 54 PopupMenu.superclass.handleBlur.apply(self, arguments); 55 self.hide(); 56 } 57 }, { 58 ATTRS:/** 59 * @lends Menu.PopupMenu# 60 */ 61 { 62 // 弹出菜单一般不可聚焦,焦点在使它弹出的元素上 63 /** 64 * Whether the popup menu is focusable. 65 * Default : false. 66 * @type Boolean 67 */ 68 focusable:{ 69 value:false 70 }, 71 visibleMode:{ 72 value:"visibility" 73 }, 74 /** 75 * Whether the popup menu hides when mouseleave. 76 * Only valid for submenu. 77 * Default : false. 78 * @type Boolean 79 */ 80 autoHideOnMouseLeave:{}, 81 xrender:{ 82 value:PopupMenuRender 83 } 84 } 85 }, { 86 xclass:'popupmenu', 87 priority:20 88 }); 89 90 return PopupMenu; 91 92 }, { 93 requires:['component', './base', './popupmenuRender'] 94 });