menu.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. // create KMenu class
  2. function KMenu(options) {
  3. this.init(options);
  4. }
  5. _extend(KMenu, KWidget, {
  6. init : function(options) {
  7. var self = this;
  8. options.z = options.z || 811213;
  9. KMenu.parent.init.call(self, options);
  10. self.centerLineMode = _undef(options.centerLineMode, true);
  11. self.div.addClass('ke-menu').bind('click,mousedown', function(e){
  12. e.stopPropagation();
  13. }).attr('unselectable', 'on');
  14. },
  15. addItem : function(item) {
  16. var self = this;
  17. if (item.title === '-') {
  18. self.div.append(K('<div class="ke-menu-separator"></div>'));
  19. return;
  20. }
  21. var itemDiv = K('<div class="ke-menu-item" unselectable="on"></div>'),
  22. leftDiv = K('<div class="ke-inline-block ke-menu-item-left"></div>'),
  23. rightDiv = K('<div class="ke-inline-block ke-menu-item-right"></div>'),
  24. height = _addUnit(item.height),
  25. iconClass = _undef(item.iconClass, '');
  26. self.div.append(itemDiv);
  27. if (height) {
  28. itemDiv.css('height', height);
  29. rightDiv.css('line-height', height);
  30. }
  31. var centerDiv;
  32. if (self.centerLineMode) {
  33. centerDiv = K('<div class="ke-inline-block ke-menu-item-center"></div>');
  34. if (height) {
  35. centerDiv.css('height', height);
  36. }
  37. }
  38. itemDiv.mouseover(function(e) {
  39. K(this).addClass('ke-menu-item-on');
  40. if (centerDiv) {
  41. centerDiv.addClass('ke-menu-item-center-on');
  42. }
  43. })
  44. .mouseout(function(e) {
  45. K(this).removeClass('ke-menu-item-on');
  46. if (centerDiv) {
  47. centerDiv.removeClass('ke-menu-item-center-on');
  48. }
  49. })
  50. .click(function(e) {
  51. item.click.call(K(this));
  52. e.stopPropagation();
  53. })
  54. .append(leftDiv);
  55. if (centerDiv) {
  56. itemDiv.append(centerDiv);
  57. }
  58. itemDiv.append(rightDiv);
  59. if (item.checked) {
  60. iconClass = 'ke-icon-checked';
  61. }
  62. if (iconClass !== '') {
  63. leftDiv.html('<span class="ke-inline-block ke-toolbar-icon ke-toolbar-icon-url ' + iconClass + '"></span>');
  64. }
  65. rightDiv.html(item.title);
  66. return self;
  67. },
  68. remove : function() {
  69. var self = this;
  70. if (self.options.beforeRemove) {
  71. self.options.beforeRemove.call(self);
  72. }
  73. K('.ke-menu-item', self.div[0]).unbind();
  74. KMenu.parent.remove.call(self);
  75. return self;
  76. }
  77. });
  78. function _menu(options) {
  79. return new KMenu(options);
  80. }
  81. K.MenuClass = KMenu;
  82. K.menu = _menu;