tao-test/app/tao/views/js/lib/jsTree/plugins/jquery.tree.hotkeys.js

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);