/** * Copyright (c)2005-2009 Matt Kruse (javascripttoolbox.com) * * Dual licensed under the MIT and GPL licenses. * This basically means you can use this code however you want for * free, but don't claim to have written it yourself! * Donations always accepted: http://www.JavascriptToolbox.com/donate/ * * Please do not link to the .js files on javascripttoolbox.com from * your site. Copy the files locally to your server instead. * */ /** * jquery.contextmenu.js jQuery Plugin for Context Menus http://www.JavascriptToolbox.com/lib/contextmenu/ * * Copyright (c) 2008 Matt Kruse (javascripttoolbox.com) Dual licensed under the MIT and GPL licenses. * * @version 1.1 * @history 1.1 2010-01-25 Fixed a problem with 1.4 which caused undesired show/hide animations * @history 1.0 2008-10-20 Initial Release * @todo slideUp doesn't work in IE - because of iframe? * @todo Hide all other menus when contextmenu is shown? * @todo More themes * @todo Nested context menus */ ; (function($) { $.contextMenu = { shadow : true, shadowOffset : 0, shadowOffsetX : 5, shadowOffsetY : 5, shadowWidthAdjust : -3, shadowHeightAdjust : -3, shadowOpacity : .2, shadowClass : 'context-menu-shadow', shadowColor : 'black', offsetX : 0, offsetY : 0, appendTo : 'body', direction : 'down', constrainToScreen : true, showTransition : 'show', hideTransition : 'hide', showSpeed : null, hideSpeed : null, showCallback : null, hideCallback : null, className : 'context-menu', itemClassName : 'context-menu-item', itemHoverClassName : 'context-menu-item-hover', disabledItemClassName : 'context-menu-item-disabled', disabledItemHoverClassName : 'context-menu-item-disabled-hover', separatorClassName : 'context-menu-separator', innerDivClassName : 'context-menu-item-inner', themePrefix : 'context-menu-theme-', theme : 'default', separator : 'context-menu-separator', // A specific key to identify a separator target : null, // The target of the context click, to be populated when triggered menu : null, // The jQuery object containing the HTML object that is the menu itself shadowObj : null, // Shadow object bgiframe : null, // The iframe object for IE6 shown : false, // Currently being shown? useIframe : /* @cc_on @ *//* @if (@_win32) true, @else @ */false,/* @end @ */// This is a better check than // looking // at userAgent! // Create the menu instance create : function(menu, opts) { var cmenu = $.extend( {}, this, opts); // Clone all default // properties to created // object // If a selector has been passed in, then use that as the menu if (typeof menu == "string") { cmenu.menu = $(menu); } // If a function has been passed in, call it each time the menu is shown to create the menu else if (typeof menu == "function") { cmenu.menuFunction = menu; } // Otherwise parse the Array passed in else { cmenu.menu = cmenu.createMenu(menu, cmenu); } if (cmenu.menu) { cmenu.menu.css( { display : 'none' }); $(cmenu.appendTo).append(cmenu.menu); } // Create the shadow object if shadow is enabled if (cmenu.shadow) { cmenu.createShadow(cmenu); // Extracted to method for // extensibility if (cmenu.shadowOffset) { cmenu.shadowOffsetX = cmenu.shadowOffsetY = cmenu.shadowOffset; } } $('body').bind('contextmenu', function() { cmenu.hide(); }); // If right-clicked somewhere else in the document, hide this // menu return cmenu; }, // Create an iframe object to go behind the menu createIframe : function() { return $('