|  |  | 
 |  |  |    var doc = $(document); | 
 |  |  |  | 
 |  |  |    $.extend($.fn, { | 
 |  |  | 		 | 
 |  |  |  | 
 |  |  |       contextMenu: function(o, callback) { | 
 |  |  |          // Defaults | 
 |  |  |          if( o.menu == undefined ) return false; | 
 |  |  | 
 |  |  |          $(this).each( function() { | 
 |  |  |             var el = $(this); | 
 |  |  |             var offset = $(el).offset(); | 
 |  |  | 			 | 
 |  |  |  | 
 |  |  |             var menu = $('#' + o.menu); | 
 |  |  |  | 
 |  |  |             // Add contextMenu class | 
 |  |  | 
 |  |  |                 open_context_menu(e,e, srcElement); | 
 |  |  |               }) | 
 |  |  |             } | 
 |  |  | 				 | 
 |  |  |  | 
 |  |  |             var open_context_menu = function(e, evt, srcElement) { | 
 |  |  |               if (typeof evt == 'undefined') evt = e; | 
 |  |  |               e.stopPropagation(); | 
 |  |  |          | 
 |  |  |  | 
 |  |  |               // Get this context menu | 
 |  |  | 			   | 
 |  |  |  | 
 |  |  |               if( el.hasClass('disabled') || evt.altKey ) return false; | 
 |  |  | 				 | 
 |  |  |  | 
 |  |  |               // Detect mouse position | 
 |  |  |               var d = {}, x = e.pageX, y = e.pageY; | 
 |  |  |               if (svgedit.browser.isTouch()) var d = {}, x = e.originalEvent.touches[0].pageX, y = e.originalEvent.touches[0].pageY; | 
 |  |  | 				 | 
 |  |  |               var x_off = win.width() - menu.width(),  | 
 |  |  |  | 
 |  |  |               var x_off = win.width() - menu.width(), | 
 |  |  |                  y_off = win.height() - menu.height(); | 
 |  |  |          | 
 |  |  |  | 
 |  |  |               if(x > x_off - 15) x = x_off-15; | 
 |  |  |               if(y > y_off - 30) y = y_off-30; // 30 is needed to prevent scrollbars in FF | 
 |  |  | 				 | 
 |  |  |               if(svgedit.browser.isTouch())  | 
 |  |  |  | 
 |  |  |               if(svgedit.browser.isTouch()) | 
 |  |  |                 y = y - (menu.height()/2) | 
 |  |  | 				 | 
 |  |  |  | 
 |  |  |               // Show the menu | 
 |  |  |               doc.unbind('click'); | 
 |  |  |               menu.css({ top: y, left: x }).fadeIn(o.inSpeed); | 
 |  |  | 
 |  |  |               }).mouseout( function() { | 
 |  |  |                  menu.find('LI.hover').removeClass('hover'); | 
 |  |  |               }); | 
 |  |  | 				 | 
 |  |  |  | 
 |  |  |               // Keyboard | 
 |  |  |               doc.keypress( function(e) { | 
 |  |  |                  switch( e.keyCode ) { | 
 |  |  | 
 |  |  |                     break | 
 |  |  |                  } | 
 |  |  |               }); | 
 |  |  | 				 | 
 |  |  |  | 
 |  |  |               // When items are selected | 
 |  |  |               menu.find('A').unbind('mouseup'); | 
 |  |  |               menu.find('LI:not(.disabled) A').mouseup( function() { | 
 |  |  | 
 |  |  |                  if( callback ) callback( $(this).attr('href').substr(1), $(srcElement), {x: x - offset.left, y: y - offset.top, docX: x, docY: y} ); | 
 |  |  |                  return false; | 
 |  |  |               }); | 
 |  |  | 				 | 
 |  |  |  | 
 |  |  |               // Hide bindings | 
 |  |  |               setTimeout( function() { // Delay for Mozilla | 
 |  |  |                  doc.click( function() { | 
 |  |  | 
 |  |  |                  }); | 
 |  |  |               }, 0); | 
 |  |  |             } | 
 |  |  | 				 | 
 |  |  |  | 
 |  |  |  | 
 |  |  |             // Disable browser context menu (requires both selectors to work in IE/Safari + FF/Chrome) | 
 |  |  |             $(el).add($('UL.contextMenu')).bind('contextmenu', function() { return false; }); | 
 |  |  | 				 | 
 |  |  |  | 
 |  |  |          }); | 
 |  |  |          return $(this); | 
 |  |  |       }, | 
 |  |  | 		 | 
 |  |  |  | 
 |  |  |       // Disable context menu items on the fly | 
 |  |  |       disableContextMenuItems: function(o) { | 
 |  |  |          if( o == undefined ) { | 
 |  |  | 
 |  |  |                var d = o.split(','); | 
 |  |  |                for( var i = 0; i < d.length; i++ ) { | 
 |  |  |                   $(this).find('A[href="' + d[i] + '"]').parent().addClass('disabled'); | 
 |  |  | 						 | 
 |  |  |  | 
 |  |  |                } | 
 |  |  |             } | 
 |  |  |          }); | 
 |  |  |          return( $(this) ); | 
 |  |  |       }, | 
 |  |  | 		 | 
 |  |  |  | 
 |  |  |       // Enable context menu items on the fly | 
 |  |  |       enableContextMenuItems: function(o) { | 
 |  |  |          if( o == undefined ) { | 
 |  |  | 
 |  |  |                var d = o.split(','); | 
 |  |  |                for( var i = 0; i < d.length; i++ ) { | 
 |  |  |                   $(this).find('A[href="' + d[i] + '"]').parent().removeClass('disabled'); | 
 |  |  | 						 | 
 |  |  |  | 
 |  |  |                } | 
 |  |  |             } | 
 |  |  |          }); | 
 |  |  |          return( $(this) ); | 
 |  |  |       }, | 
 |  |  | 		 | 
 |  |  |  | 
 |  |  |       // Disable context menu(s) | 
 |  |  |       disableContextMenu: function() { | 
 |  |  |          $(this).each( function() { | 
 |  |  | 
 |  |  |          }); | 
 |  |  |          return( $(this) ); | 
 |  |  |       }, | 
 |  |  | 		 | 
 |  |  |  | 
 |  |  |       // Enable context menu(s) | 
 |  |  |       enableContextMenu: function() { | 
 |  |  |          $(this).each( function() { | 
 |  |  | 
 |  |  |          }); | 
 |  |  |          return( $(this) ); | 
 |  |  |       }, | 
 |  |  | 		 | 
 |  |  |  | 
 |  |  |       // Destroy context menu(s) | 
 |  |  |       destroyContextMenu: function() { | 
 |  |  |          // Destroy specified context menus | 
 |  |  | 
 |  |  |          }); | 
 |  |  |          return( $(this) ); | 
 |  |  |       } | 
 |  |  | 		 | 
 |  |  |  | 
 |  |  |    }); | 
 |  |  | })(jQuery); | 
 |  |  | })(jQuery); |