mirror of
				https://github.com/redmine/redmine.git
				synced 2025-11-03 20:06:24 +01:00 
			
		
		
		
	
		
			
	
	
		
			45 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			45 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								ContextMenu = Class.create();
							 | 
						||
| 
								 | 
							
								ContextMenu.prototype = {
							 | 
						||
| 
								 | 
							
									initialize: function (options) {
							 | 
						||
| 
								 | 
							
										this.options = Object.extend({selector: '.hascontextmenu'}, options || { });
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
										Event.observe(document, 'click', function(e){
							 | 
						||
| 
								 | 
							
										    var t = Event.findElement(e, 'a');
							 | 
						||
| 
								 | 
							
										    if ((t != document) && (Element.hasClassName(t, 'disabled') || Element.hasClassName(t, 'submenu'))) {
							 | 
						||
| 
								 | 
							
								                Event.stop(e);
							 | 
						||
| 
								 | 
							
										    } else {
							 | 
						||
| 
								 | 
							
								       			$('context-menu').hide();
							 | 
						||
| 
								 | 
							
								    			if (this.selection) {
							 | 
						||
| 
								 | 
							
								                    this.selection.removeClassName('context-menu-selection');
							 | 
						||
| 
								 | 
							
								    			}
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
											
							 | 
						||
| 
								 | 
							
										}.bind(this));
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
										$$(this.options.selector).invoke('observe', (window.opera ? 'click' : 'contextmenu'), function(e){
							 | 
						||
| 
								 | 
							
											if (window.opera && !e.ctrlKey) {
							 | 
						||
| 
								 | 
							
												return;
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
											this.show(e);
							 | 
						||
| 
								 | 
							
										}.bind(this));
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
									},
							 | 
						||
| 
								 | 
							
									show: function(e) {
							 | 
						||
| 
								 | 
							
										Event.stop(e);
							 | 
						||
| 
								 | 
							
										Element.hide('context-menu');
							 | 
						||
| 
								 | 
							
										if (this.selection) {
							 | 
						||
| 
								 | 
							
										 this.selection.removeClassName('context-menu-selection');
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										$('context-menu').style['left'] = (Event.pointerX(e) + 'px');
							 | 
						||
| 
								 | 
							
										$('context-menu').style['top'] = (Event.pointerY(e) + 'px');		
							 | 
						||
| 
								 | 
							
										Element.update('context-menu', '');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										var tr = Event.findElement(e, 'tr');
							 | 
						||
| 
								 | 
							
										tr.addClassName('context-menu-selection');
							 | 
						||
| 
								 | 
							
										this.selection = tr;
							 | 
						||
| 
								 | 
							
										var id = tr.id.substring(6, tr.id.length);
							 | 
						||
| 
								 | 
							
										/* TODO: do not hard code path */
							 | 
						||
| 
								 | 
							
										new Ajax.Updater('context-menu', '../../issues/context_menu/' + id, {asynchronous:true, evalScripts:true, onComplete:function(request){Effect.Appear('context-menu', {duration: 0.20})}})		
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |