var contextmenu_selected_item; var contextmenu_selected_id; function debugging() { return window.location.search.indexOf("debug=1") != -1; } //-------------------------------------------------------------------------------------------------------- function contextmenuGetObjectRoot(element) { var cname = 'contextmenu_object_root'; element = $(element); while($defined(element.hasClass) && !element.hasClass(cname)) element = element.getParent(); if($defined(element.hasClass) && element.hasClass(cname)) return element; else { requestDebug('element', element, 'is not contained in an element with class', cname, ': add this class name to the root element in the "contextmenu//object" page template'); return null; } } //-------------------------------------------------------------------------------------------------------- function onContextMenuDefaultAction(element, menuid, id) { element = contextmenuGetObjectRoot(element); contextMenuLoadBody(menuid, function() { contextMenuLoadEnable(element, menuid, id, function() { requestDebug('default action call'); requestDebug('elements',element.enable[0],menuid); requestDebug('my id is ',id); window[element.enable[0]](menuid + '_' + id, id); requestDebug('default action end'); })}); } //-------------------------------------------------------------------------------------------------------- function onContextMenu2(element, menuid, options) { element = contextmenuGetObjectRoot(element); contextMenuLoadBody(menuid, function() { var contextmenu_body = $E('#'+menuid+' .contextmenu_body'); contextmenu_body.setStyle('height', '0px'); contextmenu_body.setStyle('overflow', 'hidden'); openMenu(menuid, options, null, element, 500); contextMenuLoadEnable(element, menuid, options.item, function() { var l = $$('.'+menuid); var c = 0; for(var x=0; x < l.length; x++) if(element.enable == null || element.enable.contains(l[x].id)) { l[x].setStyle('display', 'block'); c = c+1; } var change = new Fx.Style(contextmenu_body, 'height', {duration: 150}); change.start(0, c*31); }); }); } //-------------------------------------------------------------------------------------------------------- function contextMenuLoadBody(menuid, callback) { var contextmenu_body = $E('#'+menuid+' .contextmenu_body'); if(!$defined(contextmenu_body)) { new AjaxReload("/reQUEST/input/ContextMenu/show_ajax", { data: Object.toQueryString({ menuid: menuid }), evalScripts: true, onComplete: function(text, xml) { requestDebug('call contextmenu load body (inject'); var element = new Element('div'); element.setHTML(text); element.injectInside($E('body')); requestDebug('callback del menu load '); callback(); requestDebug('end call contextmenu load body'); } }).request(); } else callback(); } //-------------------------------------------------------------------------------------------------------- /* check "element" has the associated 'enable' entry; if so, call the callback immediatly, otherwise query the server for the 'enable' and call the callback. menuid is the menu entry [e.g.: "file"], whereas item is the id of the object. */ function contextMenuLoadEnable(element, menuid, id, callback) { if($defined(element.enable)) { // server already queried, open directly callback(); } else // server yet to query: do it, and open at completion new AjaxReload("/reQUEST/input/reQUEST/contextmenu/get_enabled", { data: Object.toQueryString({menuid: menuid, itemid: id}), hideLoadingScreen: 1, evalScripts: true, onComplete: function(text, xml) { var value = Json.evaluate(text); element.enable = value; callback(); } }).request(); } //-------------------------------------------------------------------------------------------------------- function onContextMenu(menuid, options, event, element) { // go on with the rest contextmenu_selected_item = options['item']; contextmenu_selected_id = options['id']; var enable = options['enable']; var contextmenu = $(menuid); var myel = element; if(!$defined(element)) myel = $(options['id']); var left; var top; if(event == null) { left = myel.getLeft(); top = myel.getTop(); } else { left = event.page.x; top = event.page.y; } var l = $$('.'+menuid); for(var x=0; x < l.length; x++) if(enable == null || enable.contains(l[x].id)) l[x].setStyle('display', 'block'); else l[x].setStyle('display', 'none'); contextmenu.setStyle('position', 'absolute'); contextmenu.setStyle('left', left+'px'); contextmenu.setStyle('top', top+'px'); contextmenu.setOpacity(0); contextmenu.setStyle('display', 'block'); var change = new Fx.Style(contextmenu, 'opacity', {duration: 300}); change.start(0, 0.85); // close all tooltips in the meanwhile ToolTipCloseAll(); return false; } //-------------------------------------------------------------------------------------------------------- function openMenu(menuid, options, event, element, duration) { // go on with the rest contextmenu_selected_item = options['item']; contextmenu_selected_id = options['id']; var enable = options['enable']; var contextmenu = $(menuid); var myel = element; if(!$defined(element)) myel = $(options['id']); var left; var top; if(event == null) { left = myel.getLeft(); top = myel.getTop(); var coords = myel.getCoordinates(); top = coords['top']; left = coords['left']; } else { left = event.page.x; top = event.page.y; } var l = $$('.'+menuid); for(var x=0; x < l.length; x++) l[x].setStyle('display', 'none'); contextmenu.setOpacity(0); contextmenu.setStyle('display', 'block'); contextmenu.setStyle('width', '150px'); contextmenu.setStyle('position', 'absolute'); //FIXME should be "fixed" contextmenu.setStyle('left', left+'px'); contextmenu.setStyle('top', top+'px'); var change = new Fx.Style(contextmenu, 'opacity', {'duration': duration}); change.start(0, 0.85); // close all tooltips in the meanwhile ToolTipCloseAll(); return false; }