Mercurial > hg > soundsoftware-site
comparison public/javascripts/context_menu.js @ 514:7eba09d624db live
Merge
author | Chris Cannam |
---|---|
date | Thu, 14 Jul 2011 10:50:53 +0100 |
parents | cbce1fd3b1b7 |
children | cbb26bc654de |
comparison
equal
deleted
inserted
replaced
512:b9aebdd7dd40 | 514:7eba09d624db |
---|---|
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; |