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