79 lines
3.2 KiB
JavaScript
79 lines
3.2 KiB
JavaScript
(function ($) {
|
|
if(typeof window.hotkeys == "undefined") throw "jsTree hotkeys: jQuery hotkeys plugin not included.";
|
|
|
|
$.extend($.tree.plugins, {
|
|
"hotkeys" : {
|
|
bound : [],
|
|
disabled : false,
|
|
defaults : {
|
|
hover_mode : false,
|
|
functions : {
|
|
"up" : function () { $.tree.plugins.hotkeys.get_prev.apply(this); return false; },
|
|
"down" : function () { $.tree.plugins.hotkeys.get_next.apply(this); return false; },
|
|
"left" : function () { $.tree.plugins.hotkeys.get_left.apply(this); return false; },
|
|
"right" : function () { $.tree.plugins.hotkeys.get_right.apply(this); return false; },
|
|
"f2" : function () { if(this.selected) this.rename(); return false; },
|
|
"del" : function () { if(this.selected) this.remove(); return false; },
|
|
"ctrl+c": function () { if(this.selected) this.copy(); return false; },
|
|
"ctrl+x": function () { if(this.selected) this.cut(); return false; },
|
|
"ctrl+v": function () { if(this.selected) this.paste(); return false; }
|
|
}
|
|
},
|
|
exec : function(key) {
|
|
if($.tree.plugins.hotkeys.disabled) return false;
|
|
|
|
var t = $.tree.focused();
|
|
if(typeof t.settings.plugins.hotkeys == "undefined") return;
|
|
var opts = $.extend(true, {}, $.tree.plugins.hotkeys.defaults, t.settings.plugins.hotkeys);
|
|
if(typeof opts.functions[key] == "function") return opts.functions[key].apply(t);
|
|
},
|
|
get_next : function() {
|
|
var opts = $.extend(true, {}, $.tree.plugins.hotkeys.defaults, this.settings.plugins.hotkeys);
|
|
var obj = this.hovered || this.selected;
|
|
return opts.hover_mode ? this.hover_branch(this.next(obj)) : this.select_branch(this.next(obj));
|
|
},
|
|
get_prev : function() {
|
|
var opts = $.extend(true, {}, $.tree.plugins.hotkeys.defaults, this.settings.plugins.hotkeys);
|
|
var obj = this.hovered || this.selected;
|
|
return opts.hover_mode ? this.hover_branch(this.prev(obj)) : this.select_branch(this.prev(obj));
|
|
},
|
|
get_left : function() {
|
|
var opts = $.extend(true, {}, $.tree.plugins.hotkeys.defaults, this.settings.plugins.hotkeys);
|
|
var obj = this.hovered || this.selected;
|
|
if(obj) {
|
|
if(obj.hasClass("open")) this.close_branch(obj);
|
|
else {
|
|
return opts.hover_mode ? this.hover_branch(this.parent(obj)) : this.select_branch(this.parent(obj));
|
|
}
|
|
}
|
|
},
|
|
get_right : function() {
|
|
var opts = $.extend(true, {}, $.tree.plugins.hotkeys.defaults, this.settings.plugins.hotkeys);
|
|
var obj = this.hovered || this.selected;
|
|
if(obj) {
|
|
if(obj.hasClass("closed")) this.open_branch(obj);
|
|
else {
|
|
return opts.hover_mode ? this.hover_branch(obj.find("li:eq(0)")) : this.select_branch(obj.find("li:eq(0)"));
|
|
}
|
|
}
|
|
},
|
|
|
|
callbacks : {
|
|
oninit : function (t) {
|
|
var opts = $.extend(true, {}, $.tree.plugins.hotkeys.defaults, this.settings.plugins.hotkeys);
|
|
for(var i in opts.functions) {
|
|
if(opts.functions.hasOwnProperty(i) && $.inArray(i, $.tree.plugins.hotkeys.bound) == -1) {
|
|
(function (k) {
|
|
$(document).on("keydown", { combi : k, disableInInput: true }, function (event) {
|
|
return $.tree.plugins.hotkeys.exec(k);
|
|
});
|
|
})(i);
|
|
$.tree.plugins.hotkeys.bound.push(i);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
})(jQuery);
|