comparison public/javascripts/context_menu.js @ 524:1248a47e81b3 feature_36

Merge from branch "luisf"
author luisf <luis.figueira@eecs.qmul.ac.uk>
date Mon, 25 Jul 2011 14:39:38 +0100
parents cbce1fd3b1b7
children cbb26bc654de
comparison
equal deleted inserted replaced
519:3be6bc3c2a17 524:1248a47e81b3
9 this.url = url; 9 this.url = url;
10 this.createMenu(); 10 this.createMenu();
11 11
12 if (!observingContextMenuClick) { 12 if (!observingContextMenuClick) {
13 Event.observe(document, 'click', this.Click.bindAsEventListener(this)); 13 Event.observe(document, 'click', this.Click.bindAsEventListener(this));
14 Event.observe(document, (window.opera ? 'click' : 'contextmenu'), this.RightClick.bindAsEventListener(this)); 14 Event.observe(document, 'contextmenu', this.RightClick.bindAsEventListener(this));
15 observingContextMenuClick = true; 15 observingContextMenuClick = true;
16 } 16 }
17 17
18 this.unselectAll(); 18 this.unselectAll();
19 this.lastSelected = null; 19 this.lastSelected = null;
21 21
22 RightClick: function(e) { 22 RightClick: function(e) {
23 this.hideMenu(); 23 this.hideMenu();
24 // do not show the context menu on links 24 // do not show the context menu on links
25 if (Event.element(e).tagName == 'A') { return; } 25 if (Event.element(e).tagName == 'A') { return; }
26 // right-click simulated by Alt+Click with Opera
27 if (window.opera && !e.altKey) { return; }
28 var tr = Event.findElement(e, 'tr'); 26 var tr = Event.findElement(e, 'tr');
29 if (tr == document || tr == undefined || !tr.hasClassName('hascontextmenu')) { return; } 27 if (tr == document || tr == undefined || !tr.hasClassName('hascontextmenu')) { return; }
30 Event.stop(e); 28 Event.stop(e);
31 if (!this.isSelected(tr)) { 29 if (!this.isSelected(tr)) {
32 this.unselectAll(); 30 this.unselectAll();
36 this.showMenu(e); 34 this.showMenu(e);
37 }, 35 },
38 36
39 Click: function(e) { 37 Click: function(e) {
40 this.hideMenu(); 38 this.hideMenu();
41 if (Event.element(e).tagName == 'A') { return; } 39 if (Event.element(e).tagName == 'A' || Event.element(e).tagName == 'IMG') { return; }
42 if (window.opera && e.altKey) { return; }
43 if (Event.isLeftClick(e) || (navigator.appVersion.match(/\bMSIE\b/))) { 40 if (Event.isLeftClick(e) || (navigator.appVersion.match(/\bMSIE\b/))) {
44 var tr = Event.findElement(e, 'tr'); 41 var tr = Event.findElement(e, 'tr');
45 if (tr!=null && tr!=document && tr.hasClassName('hascontextmenu')) { 42 if (tr!=null && tr!=document && tr.hasClassName('hascontextmenu')) {
46 // a row was clicked, check if the click was on checkbox 43 // a row was clicked, check if the click was on checkbox
47 var box = Event.findElement(e, 'input'); 44 var box = Event.findElement(e, 'input');
51 tr.addClassName('context-menu-selection'); 48 tr.addClassName('context-menu-selection');
52 } else { 49 } else {
53 tr.removeClassName('context-menu-selection'); 50 tr.removeClassName('context-menu-selection');
54 } 51 }
55 } else { 52 } else {
56 if (e.ctrlKey) { 53 if (e.ctrlKey || e.metaKey) {
57 this.toggleSelection(tr); 54 this.toggleSelection(tr);
58 } else if (e.shiftKey) { 55 } else if (e.shiftKey) {
59 if (this.lastSelected != null) { 56 if (this.lastSelected != null) {
60 var toggling = false; 57 var toggling = false;
61 var rows = $$('.hascontextmenu'); 58 var rows = $$('.hascontextmenu');
119 $('context-menu').style['top'] = (render_y + 'px'); 116 $('context-menu').style['top'] = (render_y + 'px');
120 Element.update('context-menu', ''); 117 Element.update('context-menu', '');
121 118
122 new Ajax.Updater({success:'context-menu'}, this.url, 119 new Ajax.Updater({success:'context-menu'}, this.url,
123 {asynchronous:true, 120 {asynchronous:true,
121 method: 'get',
124 evalScripts:true, 122 evalScripts:true,
125 parameters:Form.serialize(Event.findElement(e, 'form')), 123 parameters:Form.serialize(Event.findElement(e, 'form')),
126 onComplete:function(request){ 124 onComplete:function(request){
127 dims = $('context-menu').getDimensions(); 125 dims = $('context-menu').getDimensions();
128 menu_width = dims.width; 126 menu_width = dims.width;