context_menu.js
47 lines
| 1.5 KiB
| application/javascript
|
JavascriptLexer
|
r859 | 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 */ | ||||
|
r1012 | new Ajax.Updater({success:'context-menu'}, '../../issues/context_menu/' + id, {asynchronous:true, evalScripts:true, onComplete:function(request){ | ||
Effect.Appear('context-menu', {duration: 0.20}); | ||||
if (window.parseStylesheets) { window.parseStylesheets(); } | ||||
}}) | ||||
|
r859 | } | ||
} | ||||