code: function(e) {
              var $this = $(this);
              
              // disable actual context-menu
              e.preventDefault();
              e.stopImmediatePropagation();
              
              // abort native-triggered events unless we're triggering on right click
              if (e.data.trigger != 'right' && e.originalEvent) {
                  return;
              }
              
              if (!$this.hasClass('context-menu-disabled')) {
                  // theoretically need to fire a show event at <menu>
                  // http://www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#context-menus
                  // var evt = jQuery.Event("show", { data: data, pageX: e.pageX, pageY: e.pageY, relatedTarget: this });
                  // e.data.$menu.trigger(evt);
                  
                  $currentTrigger = $this;
                  if (e.data.build) {
                      var built = e.data.build($currentTrigger, e);
                      // abort if build() returned false
                      if (built === false) {
                          return;
                      }
                      
                      // dynamically build menu on invocation
                      e.data = $.extend(true, {}, defaults, e.data, built || {});
  
                      // abort if there are no items to display
                      if (!e.data.items || $.isEmptyObject(e.data.items)) {
                          // Note: jQuery captures and ignores errors from event handlers
                          if (window.console) {
                              (console.error || console.log)("No items specified to show in contextMenu");
                          }
                          
                          throw new Error('No Items sepcified');
                      }
                      
                      // backreference for custom command type creation
                      e.data.$trigger = $currentTrigger;
                      
                      op.create(e.data);
                  }
                  // show menu
                  op.show.call($this, e.data, e.pageX, e.pageY);
              }
          }
docs: contextmenu show dispatcher