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 });