You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
3.1 KiB
136 lines
3.1 KiB
|
|
function _selectToolbar(name, fn) {
|
|
var self = this,
|
|
knode = self.get(name);
|
|
if (knode) {
|
|
if (knode.hasClass('ke-disabled')) {
|
|
return;
|
|
}
|
|
fn(knode);
|
|
}
|
|
}
|
|
|
|
// create KToolbar class
|
|
function KToolbar(options) {
|
|
this.init(options);
|
|
}
|
|
_extend(KToolbar, KWidget, {
|
|
init : function(options) {
|
|
var self = this;
|
|
KToolbar.parent.init.call(self, options);
|
|
self.disableMode = _undef(options.disableMode, false);
|
|
self.noDisableItemMap = _toMap(_undef(options.noDisableItems, []));
|
|
self._itemMap = {};
|
|
self.div.addClass('ke-toolbar').bind('contextmenu,mousedown,mousemove', function(e) {
|
|
e.preventDefault();
|
|
}).attr('unselectable', 'on');
|
|
function find(target) {
|
|
var knode = K(target);
|
|
if (knode.hasClass('ke-outline')) {
|
|
return knode;
|
|
}
|
|
if (knode.hasClass('ke-toolbar-icon')) {
|
|
return knode.parent();
|
|
}
|
|
}
|
|
function hover(e, method) {
|
|
var knode = find(e.target);
|
|
if (knode) {
|
|
if (knode.hasClass('ke-disabled')) {
|
|
return;
|
|
}
|
|
if (knode.hasClass('ke-selected')) {
|
|
return;
|
|
}
|
|
knode[method]('ke-on');
|
|
}
|
|
}
|
|
self.div.mouseover(function(e) {
|
|
hover(e, 'addClass');
|
|
})
|
|
.mouseout(function(e) {
|
|
hover(e, 'removeClass');
|
|
})
|
|
.click(function(e) {
|
|
var knode = find(e.target);
|
|
if (knode) {
|
|
if (knode.hasClass('ke-disabled')) {
|
|
return;
|
|
}
|
|
self.options.click.call(this, e, knode.attr('data-name'));
|
|
}
|
|
});
|
|
},
|
|
get : function(name) {
|
|
// cache
|
|
if (this._itemMap[name]) {
|
|
return this._itemMap[name];
|
|
}
|
|
return (this._itemMap[name] = K('span.ke-icon-' + name, this.div).parent());
|
|
},
|
|
select : function(name) {
|
|
_selectToolbar.call(this, name, function(knode) {
|
|
knode.addClass('ke-selected');
|
|
});
|
|
return self;
|
|
},
|
|
unselect : function(name) {
|
|
_selectToolbar.call(this, name, function(knode) {
|
|
knode.removeClass('ke-selected').removeClass('ke-on');
|
|
});
|
|
return self;
|
|
},
|
|
enable : function(name) {
|
|
var self = this,
|
|
knode = name.get ? name : self.get(name);
|
|
if (knode) {
|
|
knode.removeClass('ke-disabled');
|
|
knode.opacity(1);
|
|
}
|
|
return self;
|
|
},
|
|
disable : function(name) {
|
|
var self = this,
|
|
knode = name.get ? name : self.get(name);
|
|
if (knode) {
|
|
knode.removeClass('ke-selected').addClass('ke-disabled');
|
|
knode.opacity(0.5);
|
|
}
|
|
return self;
|
|
},
|
|
disableAll : function(bool, noDisableItems) {
|
|
var self = this, map = self.noDisableItemMap, item;
|
|
if (noDisableItems) {
|
|
map = _toMap(noDisableItems);
|
|
}
|
|
// disable toolbar
|
|
if (bool === undefined ? !self.disableMode : bool) {
|
|
K('span.ke-outline', self.div).each(function() {
|
|
var knode = K(this),
|
|
name = knode[0].getAttribute('data-name', 2);
|
|
if (!map[name]) {
|
|
self.disable(knode);
|
|
}
|
|
});
|
|
self.disableMode = true;
|
|
// enable toolbar
|
|
} else {
|
|
K('span.ke-outline', self.div).each(function() {
|
|
var knode = K(this),
|
|
name = knode[0].getAttribute('data-name', 2);
|
|
if (!map[name]) {
|
|
self.enable(knode);
|
|
}
|
|
});
|
|
self.disableMode = false;
|
|
}
|
|
return self;
|
|
}
|
|
});
|
|
|
|
function _toolbar(options) {
|
|
return new KToolbar(options);
|
|
}
|
|
|
|
K.ToolbarClass = KToolbar;
|
|
K.toolbar = _toolbar;
|
|
|