diff --git a/org.adempiere.base/src/org/compiere/print/IHTMLExtension.java b/org.adempiere.base/src/org/compiere/print/IHTMLExtension.java index fc1426cb52..bb244f783d 100644 --- a/org.adempiere.base/src/org/compiere/print/IHTMLExtension.java +++ b/org.adempiere.base/src/org/compiere/print/IHTMLExtension.java @@ -15,6 +15,7 @@ package org.compiere.print; import org.apache.ecs.ConcreteElement; import org.apache.ecs.xhtml.a; +import org.apache.ecs.xhtml.body; /** * @@ -32,4 +33,6 @@ public interface IHTMLExtension { public void extendRowElement(ConcreteElement row, PrintData printData); public void extendIDColumn(int row, ConcreteElement columnElement, a href, PrintDataElement dataElement); + + public void setWebAttribute (body reportBody); } diff --git a/org.adempiere.base/src/org/compiere/print/ReportEngine.java b/org.adempiere.base/src/org/compiere/print/ReportEngine.java index 5f15a0a3d0..fd50a313cf 100644 --- a/org.adempiere.base/src/org/compiere/print/ReportEngine.java +++ b/org.adempiere.base/src/org/compiere/print/ReportEngine.java @@ -776,6 +776,9 @@ queued-job-count = 0 (class javax.print.attribute.standard.QueuedJobCount) } appendInlineCss (doc); + if (extension != null){ + extension.setWebAttribute(doc.getBody()); + } doc.output(w); } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/report/HTMLExtension.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/report/HTMLExtension.java index fea7606e7f..3353403225 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/report/HTMLExtension.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/report/HTMLExtension.java @@ -17,8 +17,7 @@ import org.adempiere.webui.apps.AEnv; import org.adempiere.webui.theme.ThemeManager; import org.apache.ecs.ConcreteElement; import org.apache.ecs.xhtml.a; -import org.apache.ecs.xhtml.div; -import org.apache.ecs.xhtml.img; +import org.apache.ecs.xhtml.body; import org.compiere.model.MSysConfig; import org.compiere.print.IHTMLExtension; import org.compiere.print.PrintData; @@ -56,49 +55,9 @@ public class HTMLExtension implements IHTMLExtension { public void extendIDColumn(int row, ConcreteElement columnElement, a href, PrintDataElement dataElement) { href.addAttribute("onclick", "showColumnMenu(event, '" + dataElement.getColumnName() + "', " + row + ")"); - - //menu div - div menu = new div(); - menu.setID(dataElement.getColumnName() + "_" + row + "_d"); - menu.setStyle("position:absolute;display:none;top:0;left:0;border: 1px solid lightgray; background-color: white;"); - columnElement.addElementToRegistry(menu); - - //window menu item - div window = new div(); - window.setStyle("padding: 3px; vertical-align: middle"); - window.addAttribute("onmouseover", "this.style.backgroundColor = 'lightgray'"); - window.addAttribute("onmouseout", "this.style.backgroundColor = 'white'"); - href = new a("javascript:void(0)"); - href.setStyle("text-decoration: none; font-size: 11px; vertical-align: middle;"); - href.addAttribute("onclick", "parent.zoom('" - + componentId + "', '" - + dataElement.getForeignColumnName() + "', '" - + dataElement.getValueAsString() + "')"); - window.addElement(href); - menu.addElement(window); - img image = new img("/webui" + ThemeManager.getThemeResource("images/mWindow.png")); - image.setAlign("middle"); - href.addElement(image); - href.addElement(Msg.getMsg(AEnv.getLanguage(Env.getCtx()), "Window")); - - //report menu item - div report = new div(); - report.setStyle("padding: 3px; vertical-align: middle"); - report.addAttribute("onmouseover", "this.style.backgroundColor = 'lightgray'"); - report.addAttribute("onmouseout", "this.style.backgroundColor = 'white'"); - href = new a("javascript:void(0)"); - href.setStyle("text-decoration: none; font-size: 11px; vertical-align: middle;"); - href.addAttribute("onclick", "parent.drillDown('" - + componentId + "', '" - + dataElement.getForeignColumnName() + "', '" - + dataElement.getValueAsString() + "')"); - report.addElement(href); - menu.addElement(report); - image = new img("/webui" + ThemeManager.getThemeResource("images/mReport.png")); - image.setAlign("middle"); - href.addElement(image); - href.addElement(Msg.getMsg(AEnv.getLanguage(Env.getCtx()), "Report").replace("&", "")); - + href.addAttribute ("componentId", componentId); + href.addAttribute ("foreignColumnName", dataElement.getForeignColumnName()); + href.addAttribute ("value", dataElement.getValueAsString()); } public void extendRowElement(ConcreteElement row, PrintData printData) { @@ -124,4 +83,12 @@ public class HTMLExtension implements IHTMLExtension { return styleURL; } + public void setWebAttribute (body reportBody){ + // set attribute value for create menu context + reportBody.addAttribute("windowIco", "/webui" + ThemeManager.getThemeResource("images/mWindow.png")); + reportBody.addAttribute("reportIco", "/webui" + ThemeManager.getThemeResource("images/mReport.png")); + reportBody.addAttribute ("reportLabel", Msg.getMsg(AEnv.getLanguage(Env.getCtx()), "Report").replace("&", "")); + reportBody.addAttribute ("windowLabel", Msg.getMsg(AEnv.getLanguage(Env.getCtx()), "Window")); + + } } diff --git a/org.adempiere.ui.zk/js/report.js b/org.adempiere.ui.zk/js/report.js index 35a0aca705..c5226f1e84 100644 --- a/org.adempiere.ui.zk/js/report.js +++ b/org.adempiere.ui.zk/js/report.js @@ -20,7 +20,7 @@ function drillDown(cmpid, column, value){ } function showColumnMenu(e, columnName, row) { - var d = document.getElementById(columnName + "_" + row + "_d"); + var d = getMenu (e.target.getAttribute ("componentId"), e.target.getAttribute ("foreignColumnName"), e.target.getAttribute ("value")); var posx = 0; var posy = 0; @@ -40,6 +40,80 @@ function showColumnMenu(e, columnName, row) { d.style.left = posx; d.style.display = "block"; - setTimeout("document.getElementById('" + columnName + "_" + row + "_d" + "').style.display='none'", 3000); + setTimeout("getMenu ().style.display='none'", 3000); } +var contextMenu; + +function getMenu (componentId, foreignColumnName, value){ + if (contextMenu == null){ + + //menu div + var menu = document.createElement("div"); + menu.style.position = "absolute"; + menu.style.display = "none"; + menu.style.top = "0"; + menu.style.left = "0"; + menu.style.border = "1px solid lightgray"; + menu.style.border = "1px solid lightgray"; + menu.style.backgroundColor = "white"; + + //window menu item + var windowMenu = document.createElement("div"); + windowMenu.style.padding = "3px"; + windowMenu.style.verticalAlign = "middle"; + windowMenu.setAttribute("onmouseover", "this.style.backgroundColor = 'lightgray'"); + windowMenu.setAttribute("onmouseout", "this.style.backgroundColor = 'white'"); + + var href = document.createElement("a"); + href.style.fontSize = "11px"; + href.style.textDecoration = "none"; + href.style.verticalAlign = "middle"; + href.href = "javascript:void(0)"; + href.setAttribute("onclick", "parent.zoom(contextMenu.getAttribute ('componentId'), " + + "contextMenu.getAttribute ('foreignColumnName'), " + + "contextMenu.getAttribute ('value'))"); + + windowMenu.appendChild(href); + menu.appendChild(windowMenu); + + var image = document.createElement("img"); + image.src = window.document.body.getAttribute ("windowIco"); + image.setAttribute("align", "middle"); + href.appendChild(image); + href.appendChild(document.createTextNode(window.document.body.getAttribute ("windowLabel"))); + + //report menu item + var report = document.createElement("div"); + report.style.padding = "3px"; + report.style.verticalAlign = "middle"; + + report.setAttribute("onmouseover", "this.style.backgroundColor = 'lightgray'"); + report.setAttribute("onmouseout", "this.style.backgroundColor = 'white'"); + + var reportHref = document.createElement("a"); + reportHref.href = "javascript:void(0)"; + reportHref.style.textDecoration = "none"; + reportHref.style.fontSize = "11px"; + reportHref.style.verticalAlign = "middle"; + reportHref.setAttribute("onclick", "parent.drillDown(contextMenu.getAttribute ('componentId'), " + + "contextMenu.getAttribute ('foreignColumnName'), " + + "contextMenu.getAttribute ('value'))"); + + report.appendChild(reportHref); + menu.appendChild(report); + var reportimage = document.createElement("img"); + reportimage.src = window.document.body.getAttribute ("reportIco"); + reportimage.setAttribute("align", "middle"); + reportHref.appendChild(reportimage); + reportHref.appendChild(document.createTextNode(window.document.body.getAttribute ("reportLabel"))); + + contextMenu = menu; + window.document.body.appendChild (contextMenu); + } + + contextMenu.setAttribute ("componentId", componentId); + contextMenu.setAttribute ("foreignColumnName", foreignColumnName); + contextMenu.setAttribute ("value", value); + return contextMenu; +} \ No newline at end of file