Menu.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. /**
  2. * Menu.js
  3. *
  4. * Copyright, Moxiecode Systems AB
  5. * Released under LGPL License.
  6. *
  7. * License: http://www.tinymce.com/license
  8. * Contributing: http://www.tinymce.com/contributing
  9. */
  10. /**
  11. * Creates a new menu.
  12. *
  13. * @-x-less Menu.less
  14. * @class tinymce.ui.Menu
  15. * @extends tinymce.ui.FloatPanel
  16. */
  17. define("tinymce/ui/Menu", [
  18. "tinymce/ui/FloatPanel",
  19. "tinymce/ui/MenuItem",
  20. "tinymce/util/Tools"
  21. ], function(FloatPanel, MenuItem, Tools) {
  22. "use strict";
  23. var Menu = FloatPanel.extend({
  24. Defaults: {
  25. defaultType: 'menuitem',
  26. border: 1,
  27. layout: 'stack',
  28. role: 'application',
  29. bodyRole: 'menu',
  30. ariaRoot: true
  31. },
  32. /**
  33. * Constructs a instance with the specified settings.
  34. *
  35. * @constructor
  36. * @param {Object} settings Name/value object with settings.
  37. */
  38. init: function(settings) {
  39. var self = this;
  40. settings.autohide = true;
  41. settings.constrainToViewport = true;
  42. if (settings.itemDefaults) {
  43. var items = settings.items, i = items.length;
  44. while (i--) {
  45. items[i] = Tools.extend({}, settings.itemDefaults, items[i]);
  46. }
  47. }
  48. self._super(settings);
  49. self.addClass('menu');
  50. },
  51. /**
  52. * Repaints the control after a layout operation.
  53. *
  54. * @method repaint
  55. */
  56. repaint: function() {
  57. this.toggleClass('menu-align', true);
  58. this._super();
  59. this.getEl().style.height = '';
  60. this.getEl('body').style.height = '';
  61. return this;
  62. },
  63. /**
  64. * Hides/closes the menu.
  65. *
  66. * @method cancel
  67. */
  68. cancel: function() {
  69. var self = this;
  70. self.hideAll();
  71. self.fire('select');
  72. },
  73. /**
  74. * Hide menu and all sub menus.
  75. *
  76. * @method hideAll
  77. */
  78. hideAll: function() {
  79. var self = this;
  80. this.find('menuitem').exec('hideMenu');
  81. return self._super();
  82. },
  83. /*
  84. getContainerElm: function() {
  85. var doc = document, id = this.classPrefix + 'menucontainer';
  86. var elm = doc.getElementById(id);
  87. if (!elm) {
  88. elm = doc.createElement('div');
  89. elm.id = id;
  90. elm.setAttribute('role', 'application');
  91. elm.className = this.classPrefix + '-reset';
  92. elm.style.position = 'absolute';
  93. elm.style.top = elm.style.left = '0';
  94. elm.style.overflow = 'visible';
  95. doc.body.appendChild(elm);
  96. }
  97. return elm;
  98. },
  99. */
  100. /**
  101. * Invoked before the menu is rendered.
  102. *
  103. * @method preRender
  104. */
  105. preRender: function() {
  106. var self = this;
  107. self.items().each(function(ctrl) {
  108. var settings = ctrl.settings;
  109. if (settings.icon || settings.selectable) {
  110. self._hasIcons = true;
  111. return false;
  112. }
  113. });
  114. return self._super();
  115. }
  116. });
  117. return Menu;
  118. });