1// jQuery Context Menu Plugin 2// 3// Version 1.01 customized version (see comment below) 4// 5// Cory S.N. LaViska 6// A Beautiful Site (http://abeautifulsite.net/) 7// 8// More info: http://abeautifulsite.net/2008/09/jquery-context-menu-plugin/ 9// 10// Terms of Use 11// 12// This plugin is dual-licensed under the GNU General Public License 13// and the MIT License and is copyright A Beautiful Site, LLC. 14// 15// 2011-02-17 Martin Wendt: 16// Changed stopPropagation() to preventDefault() in order to make it 17// work with Dynatree drag'n'drop. 18// See http://code.google.com/p/dynatree/issues/detail?id=174 19// 2012-09-27 Martin Wendt: 20// fixed position in a fancy layout 21// 2013-05-09 Martin Wendt: 22// Added polyfil for $.browser (fixes compatibility with jQuery 1.9) 23// 24if(jQuery)(function(){function _checkBrowser(){var matched,browser;function uaMatch(ua){ua=ua.toLowerCase();var match=/(chrome)[ \/]([\w.]+)/.exec(ua)||/(webkit)[ \/]([\w.]+)/.exec(ua)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua)||/(msie) ([\w.]+)/.exec(ua)||ua.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua)||[];return{browser:match[1]||'',version:match[2]||'0',};} 25matched=uaMatch(navigator.userAgent);browser={};if(matched.browser){browser[matched.browser]=true;browser.version=matched.version;} 26if(browser.chrome){browser.webkit=true;}else if(browser.webkit){browser.safari=true;} 27return browser;} 28var BROWSER=jQuery.browser||_checkBrowser();$.extend($.fn,{contextMenu:function(o,callback){if(o.menu==undefined)return false;if(o.inSpeed==undefined)o.inSpeed=150;if(o.outSpeed==undefined)o.outSpeed=75;if(o.inSpeed==0)o.inSpeed=-1;if(o.outSpeed==0)o.outSpeed=-1;$(this).each(function(){var el=$(this);var offset=$(el).offset();$('#'+o.menu).addClass('contextMenu');$(this).mousedown(function(e){var evt=e;evt.preventDefault();$(this).mouseup(function(e){e.preventDefault();var srcElement=$(this);$(this).unbind('mouseup');if(evt.button==2){$('.contextMenu').hide();var menu=$('#'+o.menu);if($(el).hasClass('disabled'))return false;var d={},x,y;if(self.innerHeight){d.pageYOffset=self.pageYOffset;d.pageXOffset=self.pageXOffset;d.innerHeight=self.innerHeight;d.innerWidth=self.innerWidth;}else if(document.documentElement&&document.documentElement.clientHeight){d.pageYOffset=document.documentElement.scrollTop;d.pageXOffset=document.documentElement.scrollLeft;d.innerHeight=document.documentElement.clientHeight;d.innerWidth=document.documentElement.clientWidth;}else if(document.body){d.pageYOffset=document.body.scrollTop;d.pageXOffset=document.body.scrollLeft;d.innerHeight=document.body.clientHeight;d.innerWidth=document.body.clientWidth;} 29(e.pageX)?x=e.pageX:x=e.clientX+d.scrollLeft;(e.pageY)?y=e.pageY:y=e.clientY+d.scrollTop;$(menu).unbind('click');$(menu).fadeIn(o.inSpeed).offset({top:y,left:x});$(menu).find('A').mouseover(function(){$(menu).find('LI.hover').removeClass('hover');$(this).parent().addClass('hover');}).mouseout(function(){$(menu).find('LI.hover').removeClass('hover');});$(document).keypress(function(e){switch(e.keyCode){case 38:if($(menu).find('LI.hover').size()==0){$(menu).find('LI:last').addClass('hover');}else{$(menu).find('LI.hover').removeClass('hover').prevAll('LI:not(.disabled)').eq(0).addClass('hover');if($(menu).find('LI.hover').size()==0)$(menu).find('LI:last').addClass('hover');} 30break;case 40:if($(menu).find('LI.hover').size()==0){$(menu).find('LI:first').addClass('hover');}else{$(menu).find('LI.hover').removeClass('hover').nextAll('LI:not(.disabled)').eq(0).addClass('hover');if($(menu).find('LI.hover').size()==0)$(menu).find('LI:first').addClass('hover');} 31break;case 13:$(menu).find('LI.hover A').trigger('click');break;case 27:$(document).trigger('click');break}});$('#'+o.menu).find('A').unbind('click');$('#'+o.menu).find('LI:not(.disabled) A').click(function(){$(menu).unbind('click').unbind('keypress');$('.contextMenu').hide();if(callback)callback($(this).attr('href').substr(1),$(srcElement),{x:x-offset.left,y:y-offset.top,docX:x,docY:y});return false;});setTimeout(function(){$(document).click(function(){$(menu).unbind('click').unbind('keypress');$(menu).fadeOut(o.outSpeed);});},0);}});});if(BROWSER.mozilla){$('#'+o.menu).each(function(){$(this).css({'MozUserSelect':'none'});});}else if(BROWSER.msie){$('#'+o.menu).each(function(){$(this).bind('selectstart.disableTextSelect',function(){return false;});});}else{$('#'+o.menu).each(function(){$(this).bind('mousedown.disableTextSelect',function(){return false;});});} 32$(el).add($('UL.contextMenu')).bind('contextmenu',function(){return false;});});return $(this);}
32,disableContextMenuItems:function(o){if(o==undefined){$(this).find('LI').addClass('disabled');return $(this);} 33$(this).each(function(){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);},enableContextMenuItems:function(o){if(o==undefined){$(this).find('LI.disabled').removeClass('disabled');return $(this);} 34$(this).each(function(){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);},disableContextMenu:function(){$(this).each(function(){$(this).addClass('disabled');});return $(this);},enableContextMenu:function(){$(this).each(function(){$(this).removeClass('disabled');});return $(this);},destroyContextMenu:function(){$(this).each(function(){$(this).unbind('mousedown').unbind('mouseup');});return $(this);}});})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.