pioneer
2 years ago
commit
3b94d2cac6
10 changed files with 311 additions and 0 deletions
@ -0,0 +1,6 @@ |
|||||||
|
# open-JSD-9663 |
||||||
|
|
||||||
|
JSD-9663 在图表添加超链页面新增一个超链类型.该超链支持添加参数,并依赖postMessage实现跨域超链\ |
||||||
|
免责说明:该源码为第三方爱好者提供,不保证源码和方案的可靠性,也不提供任何形式的源码教学指导和协助!\ |
||||||
|
仅作为开发者学习参考使用!禁止用于任何商业用途!\ |
||||||
|
为保护开发者隐私,开发者信息已隐去!若原开发者希望公开自己的信息,可联系【pioneer】处理。 |
Binary file not shown.
@ -0,0 +1,25 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?><plugin> |
||||||
|
<id>com.fr.plugin.xx.jsd9663</id> |
||||||
|
<name><![CDATA[ 超链向父窗口传参 ]]></name> |
||||||
|
<active>yes</active> |
||||||
|
<version>1.0.1</version> |
||||||
|
<env-version>10.0</env-version> |
||||||
|
<vendor>fr.open</vendor> |
||||||
|
<jartime>2020-11-02</jartime> |
||||||
|
<description><![CDATA[ postMessage ]]></description> |
||||||
|
<change-notes> |
||||||
|
<![CDATA[2022-03-03 初始化工程]]> |
||||||
|
<![CDATA[2022-03-07 设计器页面增加超链选项]]> |
||||||
|
</change-notes> |
||||||
|
<main-package>com.fr.plugin.xx</main-package> |
||||||
|
<!--功能点注册,这个类不能去掉--> |
||||||
|
<function-recorder class="com.fr.plugin.xx.jsd9663.FuncRecorder"/> |
||||||
|
|
||||||
|
<extra-report> |
||||||
|
<JavaScriptFileHandler class="com.fr.plugin.xx.jsd9663.JsFileHandler"/> |
||||||
|
</extra-report> |
||||||
|
<extra-designer> |
||||||
|
<HyperlinkProvider class="com.fr.plugin.xx.jsd9663.hyperlink.PostMessage"/> |
||||||
|
</extra-designer> |
||||||
|
|
||||||
|
</plugin> |
@ -0,0 +1,17 @@ |
|||||||
|
package com.fr.plugin.xx.jsd9663; |
||||||
|
|
||||||
|
|
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.plugin.transform.ExecuteFunctionRecord; |
||||||
|
import com.fr.plugin.transform.FunctionRecorder; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
|
||||||
|
//功能点注册
|
||||||
|
@FunctionRecorder |
||||||
|
@Authorize(callSignKey = "com.fr.plugin.xx.jsd9663") |
||||||
|
public class FuncRecorder { |
||||||
|
@ExecuteFunctionRecord |
||||||
|
public static boolean execute(){ |
||||||
|
return PluginContexts.currentContext().isAvailable();//付费
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
package com.fr.plugin.xx.jsd9663; |
||||||
|
|
||||||
|
import com.fr.plugin.transform.ExecuteFunctionRecord; |
||||||
|
import com.fr.plugin.transform.FunctionRecorder; |
||||||
|
import com.fr.stable.fun.impl.AbstractJavaScriptFileHandler; |
||||||
|
|
||||||
|
@FunctionRecorder |
||||||
|
public class JsFileHandler extends AbstractJavaScriptFileHandler{ |
||||||
|
|
||||||
|
@ExecuteFunctionRecord |
||||||
|
@Override |
||||||
|
public String[] pathsForFiles() { |
||||||
|
return new String[]{ |
||||||
|
"com/fr/plugin/xx/jsd9663/locale/js/jsd9663.js" |
||||||
|
}; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,29 @@ |
|||||||
|
package com.fr.plugin.xx.jsd9663.hyperlink; |
||||||
|
|
||||||
|
import com.fr.design.fun.impl.AbstractHyperlinkProvider; |
||||||
|
import com.fr.design.gui.controlpane.NameObjectCreator; |
||||||
|
import com.fr.design.gui.controlpane.NameableCreator; |
||||||
|
import com.fr.general.ComparatorUtils; |
||||||
|
|
||||||
|
|
||||||
|
public class PostMessage extends AbstractHyperlinkProvider { |
||||||
|
private NameableCreator nameableCreator = new NameObjectCreator( |
||||||
|
"\u4f20\u9012\u53c2\u6570\u7ed9\u7236\u7a97\u53e3", |
||||||
|
PostMessageHyperlink.class, PostMessageHyperlinkPane.class); |
||||||
|
|
||||||
|
@Override |
||||||
|
public int hashCode() { |
||||||
|
return nameableCreator.menuName().hashCode(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean equals(Object obj) { |
||||||
|
return (obj != null && obj instanceof PostMessage) |
||||||
|
&& ComparatorUtils.equals(((PostMessage) obj).nameableCreator, nameableCreator); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public NameableCreator createHyperlinkCreator() { |
||||||
|
return nameableCreator; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,72 @@ |
|||||||
|
package com.fr.plugin.xx.jsd9663.hyperlink; |
||||||
|
|
||||||
|
|
||||||
|
import com.fanruan.api.json.JSONKit; |
||||||
|
import com.fr.base.Formula; |
||||||
|
import com.fr.js.Hyperlink; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.stable.ParameterProvider; |
||||||
|
import com.fr.stable.web.Repository; |
||||||
|
import com.fr.stable.xml.XMLPrintWriter; |
||||||
|
import com.fr.stable.xml.XMLableReader; |
||||||
|
|
||||||
|
public class PostMessageHyperlink extends Hyperlink { |
||||||
|
private Integer parentNode; |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String actionJS(Repository repository) { |
||||||
|
ParameterProvider[] parameters = this.getParameters(); |
||||||
|
JSONObject entries = JSONKit.create(); |
||||||
|
for (ParameterProvider parameter : parameters) { |
||||||
|
Object value = parameter.getValue(); |
||||||
|
if(value instanceof Formula){ |
||||||
|
entries.put(parameter.getName(),((Formula)value).getResult()); |
||||||
|
}else{ |
||||||
|
entries.put(parameter.getName(),value); |
||||||
|
} |
||||||
|
} |
||||||
|
if(parentNode == null){ |
||||||
|
parentNode = 1; |
||||||
|
} |
||||||
|
return "FR.postMessage("+entries.toString() +","+parentNode+");"; |
||||||
|
} |
||||||
|
|
||||||
|
public Integer getParentNode() { |
||||||
|
return parentNode; |
||||||
|
} |
||||||
|
|
||||||
|
public void setParentNode(Integer parentNode) { |
||||||
|
if(parentNode == null || parentNode == 0){parentNode = 1;} |
||||||
|
this.parentNode = parentNode; |
||||||
|
} |
||||||
|
|
||||||
|
private static final String XML_TAG = "PostMessageHyperlink"; |
||||||
|
@Override |
||||||
|
public void writeXML( XMLPrintWriter writer ){ |
||||||
|
super.writeXML(writer); |
||||||
|
writer.startTAG(XML_TAG) |
||||||
|
.attr("parentNode", parentNode).end(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void readXML(XMLableReader reader){ |
||||||
|
super.readXML(reader); |
||||||
|
String tag = reader.getTagName(); |
||||||
|
if( XML_TAG.equals(tag) ){ |
||||||
|
parentNode = reader.getAttrAsInt("parentNode", 1); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Object clone() throws CloneNotSupportedException { |
||||||
|
PostMessageHyperlink rt = (PostMessageHyperlink)super.clone(); |
||||||
|
rt.setParentNode( this.getParentNode() ); |
||||||
|
return rt; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean equals(Object obj){ |
||||||
|
return obj instanceof PostMessageHyperlink |
||||||
|
&& (((PostMessageHyperlink)obj).getParentNode() == getParentNode()); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,94 @@ |
|||||||
|
package com.fr.plugin.xx.jsd9663.hyperlink; |
||||||
|
|
||||||
|
|
||||||
|
import com.fr.base.Parameter; |
||||||
|
import com.fr.design.beans.BasicBeanPane; |
||||||
|
import com.fr.design.editor.ValueEditorPane; |
||||||
|
import com.fr.design.editor.ValueEditorPaneFactory; |
||||||
|
import com.fr.design.gui.frpane.ReportletParameterViewPane; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.gui.itextfield.UINumberField; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.layout.TableLayout; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.utils.gui.GUICoreUtils; |
||||||
|
import com.fr.stable.ParameterProvider; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class PostMessageHyperlinkPane extends BasicBeanPane<PostMessageHyperlink> { |
||||||
|
private UINumberField parentNode; |
||||||
|
protected ReportletParameterViewPane parameterViewPane; |
||||||
|
private HashMap hyperLinkEditorMap; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public PostMessageHyperlinkPane() { |
||||||
|
this.initComponents(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return "title4PopupWindow"; |
||||||
|
} |
||||||
|
|
||||||
|
protected void initComponents() { |
||||||
|
parentNode = new UINumberField(); |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
JPanel pane = TableLayoutHelper.createTableLayoutPane( |
||||||
|
new Component[][]{ |
||||||
|
{new UILabel("\u7236\u7a97\u53e3\u6240\u5c5e\u5c42\u6570:"), parentNode} |
||||||
|
}, |
||||||
|
new double[]{TableLayout.PREFERRED, TableLayout.PREFERRED}, |
||||||
|
new double[]{ TableLayout.PREFERRED,TableLayout.FILL} |
||||||
|
); |
||||||
|
this.add( pane, BorderLayout.NORTH ); |
||||||
|
this.parameterViewPane = new ReportletParameterViewPane( this.getChartParaType(), this.getValueEditorPane(), this.getValueEditorPane()); |
||||||
|
this.add(this.parameterViewPane, "Center"); |
||||||
|
this.parameterViewPane.setBorder(GUICoreUtils.createTitledBorder(Toolkit.i18nText("Fine-Design_Basic_Parameter"), (Color)null)); |
||||||
|
} |
||||||
|
|
||||||
|
protected int getChartParaType() { |
||||||
|
return this.hyperLinkEditorMap != null ? 1 : 0; |
||||||
|
} |
||||||
|
|
||||||
|
protected ValueEditorPane getValueEditorPane() { |
||||||
|
return ValueEditorPaneFactory.createVallueEditorPaneWithUseType(this.getChartParaType(), this.hyperLinkEditorMap); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(PostMessageHyperlink demoHyperlink) { |
||||||
|
|
||||||
|
List var2 = this.parameterViewPane.update(); |
||||||
|
var2.clear(); |
||||||
|
ParameterProvider[] var3 = demoHyperlink.getParameters(); |
||||||
|
this.parameterViewPane.populate(var3); |
||||||
|
parentNode.setValue(demoHyperlink.getParentNode()); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public PostMessageHyperlink updateBean() { |
||||||
|
PostMessageHyperlink demoHyperlink = new PostMessageHyperlink(); |
||||||
|
this.updateBean(demoHyperlink); |
||||||
|
demoHyperlink.setParentNode((int)parentNode.getValue()); |
||||||
|
return demoHyperlink; |
||||||
|
} |
||||||
|
|
||||||
|
public void updateBean(PostMessageHyperlink var1) { |
||||||
|
List var2 = this.parameterViewPane.update(); |
||||||
|
if (!var2.isEmpty()) { |
||||||
|
Parameter[] var3 = new Parameter[var2.size()]; |
||||||
|
var2.toArray(var3); |
||||||
|
var1.setParameters(var3); |
||||||
|
var1.setParentNode((int)parentNode.getValue()); |
||||||
|
} else { |
||||||
|
var1.setParameters((ParameterProvider[])null); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,32 @@ |
|||||||
|
package com.fr.plugin.xx.jsd9663.logger; |
||||||
|
|
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
|
||||||
|
public class PluginLoggerFactory{ |
||||||
|
private static PluginLoggerFactory pluginLogger = null; |
||||||
|
private static final String pluginId = "[com.fr.plugin.xx.demo] "; |
||||||
|
|
||||||
|
private PluginLoggerFactory() { |
||||||
|
} |
||||||
|
|
||||||
|
public static PluginLoggerFactory getLogger(){ |
||||||
|
if(pluginLogger == null){ |
||||||
|
return new PluginLoggerFactory(); |
||||||
|
} |
||||||
|
return pluginLogger; |
||||||
|
} |
||||||
|
|
||||||
|
public void info(String m){ |
||||||
|
FineLoggerFactory.getLogger().info(pluginId+m); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public void debug(String m){ |
||||||
|
FineLoggerFactory.getLogger().debug(pluginId+m); |
||||||
|
} |
||||||
|
|
||||||
|
public void error(String m){ |
||||||
|
FineLoggerFactory.getLogger().error(pluginId+m); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,19 @@ |
|||||||
|
!(function (){ |
||||||
|
FR.postMessage = function(msg,parentNode){ |
||||||
|
var target = window.parent; |
||||||
|
if(typeof(parentNode) != 'number'){ |
||||||
|
parentNode = 1; |
||||||
|
}else if (parentNode > 8){ |
||||||
|
parentNode = -1; |
||||||
|
} |
||||||
|
|
||||||
|
if(parentNode == -1){ |
||||||
|
target = window.top; |
||||||
|
}else if(parentNode > 1){ |
||||||
|
for(i=1;i<parentNode;i++){ |
||||||
|
target = target.parent; |
||||||
|
} |
||||||
|
} |
||||||
|
target.postMessage(msg,"*"); |
||||||
|
} |
||||||
|
}()) |
Loading…
Reference in new issue