jquery.fancytree.contextMenu.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /**!
  2. * jquery.fancytree.contextmenu.js
  3. * 3rd party jQuery Context menu extension for jQuery Fancytree
  4. *
  5. * Authors: Rodney Rehm, Addy Osmani (patches for FF)
  6. * Web: http://medialize.github.com/jQuery-contextMenu/
  7. *
  8. * Copyright (c) 2012, Martin Wendt (http://wwWendt.de)
  9. * Dual licensed under the MIT or GPL Version 2 licenses.
  10. * http://code.google.com/p/fancytree/wiki/LicenseInfe
  11. */
  12. (function($, document) {
  13. "use strict";
  14. var initContextMenu = function(tree, selector, menu, actions) {
  15. tree.$container.on("mousedown.contextMenu", function(event) {
  16. var node = $.ui.fancytree.getNode(event);
  17. if(node) {
  18. $.contextMenu("destroy", "." + selector);
  19. node.setFocus(true);
  20. node.setActive(true);
  21. $.contextMenu({
  22. selector: "." + selector,
  23. build: function($trigger, e) {
  24. node = $.ui.fancytree.getNode($trigger);
  25. var menuItems = { };
  26. if($.isFunction(menu)) {
  27. menuItems = menu(node);
  28. } else if($.isPlainObject(menu)) {
  29. menuItems = menu;
  30. }
  31. return {
  32. callback: function(action, options) {
  33. if($.isFunction(actions)) {
  34. actions(node, action, options);
  35. } else if($.isPlainObject(actions)) {
  36. if(actions.hasOwnProperty(action) && $.isFunction(actions[action])) {
  37. actions[action](node, options);
  38. }
  39. }
  40. },
  41. items: menuItems
  42. };
  43. }
  44. });
  45. }
  46. });
  47. };
  48. $.ui.fancytree.registerExtension({
  49. name: "contextMenu",
  50. version: "1.0",
  51. contextMenu: {
  52. selector: "fancytree-title",
  53. menu: {},
  54. actions: {}
  55. },
  56. treeInit: function(ctx) {
  57. this._superApply(arguments);
  58. initContextMenu(ctx.tree,
  59. ctx.options.contextMenu.selector || "fancytree-title",
  60. ctx.options.contextMenu.menu,
  61. ctx.options.contextMenu.actions);
  62. }
  63. });
  64. }(jQuery, document));