toolbar.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. function _selectToolbar(name, fn) {
  2. var self = this,
  3. knode = self.get(name);
  4. if (knode) {
  5. if (knode.hasClass('ke-disabled')) {
  6. return;
  7. }
  8. fn(knode);
  9. }
  10. }
  11. // create KToolbar class
  12. function KToolbar(options) {
  13. this.init(options);
  14. }
  15. _extend(KToolbar, KWidget, {
  16. init : function(options) {
  17. var self = this;
  18. KToolbar.parent.init.call(self, options);
  19. self.disableMode = _undef(options.disableMode, false);
  20. self.noDisableItemMap = _toMap(_undef(options.noDisableItems, []));
  21. self._itemMap = {};
  22. self.div.addClass('ke-toolbar').bind('contextmenu,mousedown,mousemove', function(e) {
  23. e.preventDefault();
  24. }).attr('unselectable', 'on');
  25. function find(target) {
  26. var knode = K(target);
  27. if (knode.hasClass('ke-outline')) {
  28. return knode;
  29. }
  30. if (knode.hasClass('ke-toolbar-icon')) {
  31. return knode.parent();
  32. }
  33. }
  34. function hover(e, method) {
  35. var knode = find(e.target);
  36. if (knode) {
  37. if (knode.hasClass('ke-disabled')) {
  38. return;
  39. }
  40. if (knode.hasClass('ke-selected')) {
  41. return;
  42. }
  43. knode[method]('ke-on');
  44. }
  45. }
  46. self.div.mouseover(function(e) {
  47. hover(e, 'addClass');
  48. })
  49. .mouseout(function(e) {
  50. hover(e, 'removeClass');
  51. })
  52. .click(function(e) {
  53. var knode = find(e.target);
  54. if (knode) {
  55. if (knode.hasClass('ke-disabled')) {
  56. return;
  57. }
  58. self.options.click.call(this, e, knode.attr('data-name'));
  59. }
  60. });
  61. },
  62. get : function(name) {
  63. // cache
  64. if (this._itemMap[name]) {
  65. return this._itemMap[name];
  66. }
  67. return (this._itemMap[name] = K('span.ke-icon-' + name, this.div).parent());
  68. },
  69. select : function(name) {
  70. _selectToolbar.call(this, name, function(knode) {
  71. knode.addClass('ke-selected');
  72. });
  73. return self;
  74. },
  75. unselect : function(name) {
  76. _selectToolbar.call(this, name, function(knode) {
  77. knode.removeClass('ke-selected').removeClass('ke-on');
  78. });
  79. return self;
  80. },
  81. enable : function(name) {
  82. var self = this,
  83. knode = name.get ? name : self.get(name);
  84. if (knode) {
  85. knode.removeClass('ke-disabled');
  86. knode.opacity(1);
  87. }
  88. return self;
  89. },
  90. disable : function(name) {
  91. var self = this,
  92. knode = name.get ? name : self.get(name);
  93. if (knode) {
  94. knode.removeClass('ke-selected').addClass('ke-disabled');
  95. knode.opacity(0.5);
  96. }
  97. return self;
  98. },
  99. disableAll : function(bool, noDisableItems) {
  100. var self = this, map = self.noDisableItemMap, item;
  101. if (noDisableItems) {
  102. map = _toMap(noDisableItems);
  103. }
  104. // disable toolbar
  105. if (bool === undefined ? !self.disableMode : bool) {
  106. K('span.ke-outline', self.div).each(function() {
  107. var knode = K(this),
  108. name = knode[0].getAttribute('data-name', 2);
  109. if (!map[name]) {
  110. self.disable(knode);
  111. }
  112. });
  113. self.disableMode = true;
  114. // enable toolbar
  115. } else {
  116. K('span.ke-outline', self.div).each(function() {
  117. var knode = K(this),
  118. name = knode[0].getAttribute('data-name', 2);
  119. if (!map[name]) {
  120. self.enable(knode);
  121. }
  122. });
  123. self.disableMode = false;
  124. }
  125. return self;
  126. }
  127. });
  128. function _toolbar(options) {
  129. return new KToolbar(options);
  130. }
  131. K.ToolbarClass = KToolbar;
  132. K.toolbar = _toolbar;